gspiceui-1.1.00+dfsg/0000755000000000000000000000000012525200532013012 5ustar rootrootgspiceui-1.1.00+dfsg/ChangeLog0000644000000000000000000012223012520120236014561 0ustar rootroot ChangeLog ----------- Start Date : 2004-08-12 Last Update : 2015-04-29 Author : Mike Waters Email : mwaters517_AT_gmail_DOT_com ==================================================================================================== gSpiceUI - A Graphical User Interface (GUI) to various freely available electronic circuit simulation engines. ---------------------------------------------------------------------------------------------------- 2015-04-29 : M.Waters * Released version 1.1.00. * BugFix : In the NetList class the load file and load attributes operations have been separated to prevent redundant disk activity. SimnBase class has been modified in simpathy. * BugFix : In the Component class the type is determined based on the first character in the name eg. D1 is assumed to be a diode. If the component type couldn't be identified it was deemed invalid. This was a bit too harsh so now the component is assumed to be valid even if it's type can't be determined. * BugFix : The PnlValue control could be tripped up under certain circumstances if a value was manually entered (eg. enter 1.0V and decrement to 0.0V instead of 1000.0mV). * If a netlist loaded by gSpiceUI is found to be a valid simulation file it is now loaded into the Simulation console as well as the NetList console. Changes to FrmMain::bSimnLoad( ). * BugFix : In the simulation file an incorrect reference to schematic file/s could be included. This could occur if a .ckt wasn't derived from a .sch file. * gSpiceUI can now be compiled against wxWidgets v3.0.0 or v2.8.12. Hence forth development will be based around wxWidgets v3.0.0 so gSpiceUI may look prettier with this version of the library. * The delay between successive spin button control updates can now be set using the Preferences dialogue and the "Spin control period" parameter. Allowable values range from 20 to 400 mSec. * BugFix : Henry reported on 2010-10-04 that the command line option -g for importing schematic file/s was broken. This bug has now been rectified. * BugFix : If a PnlValue value outside the allowable range was manually entered, the spin buttons ceased to work. The event handlers now know what to do in this case. * Further development and testing of OPTIONS dialogue. * Comparison of floating point numbers isn't easy when the values are similar. Two new functions have been added to class CnvtType which compare floats ie. CnvtType::bIsEqual( ). * Significant upgrades to class PnlValue bSetValue( ) functions. This is due to testing done using the test application test_AppPnlValue. * It's not good practise to declare "using namespace" with global scope so all such declaration have been removed. * BugFix : The CnvtType class bParseFlt( ) functions could fail at certain boundary conditions around mantissa values of 1.0 and 10.0. * Added a test application directory src/tests. The first test application is test_AppPnlValue which is used to test the display control class PnlValue and all the classes it uses. It's getting too difficult to test GUI components inside gSpiceUI. * Support for temperature values in Degrees Kelvin and Fahrenheit has been dropped. Both NG-Spice and GNU-Cap only support Deg.C and the data-sheets for various electronic components I've checked only mention Deg.C. Supporting Deg.K & Deg.F properly in gSpiceUI would require significant effort which isn't justified given the maginal benefit to be gained. * Phase angle units are now set via the Preferences dialogue. * The preferences dialogue now includes an option to alter the main frame layout. Either the probes (nodes and components) lists extend the full height of the frame or (as normal) the text controls can expand to cover the full width of the frame at the expense of probe lists height. * BugFix : When setting a PnlValue the units where being ignored if the value to be set was zero. The function PnlValue::bSetValue( wxString & ) has been completely rewritten. * BugFix : If Source sychronization was enabled the sweep parameter units where not being updated for the DC analysis panels. * BugFix : In the class NbkNgSpice the result file width was not being calculated correctly meaning results could be lost. * In the classes CmdGnuCapOPT and DlgGcpCfgOPT have removed options which are no longer supported and included new options. * In Settings menu place Preferences item at the top. * Created a new class UnitsBase as a base class to ChoUnits and LblUnits. * Tidied up the layout of all configuration dialogues. * Created a new class LblUnits to be used as an attribute in the class PnlValue as the units label. * The layout of the analysis panels for both NG-Spice and GNU-Cap were showing a some bit rot. These panels have been updated. * Created a new class PnlLblTxt to replace some instances of the wxTextCtrl class. It provides much of the functionality of wxTextCtrl and adds a parameter name string displayed to the left of the wxTextCtrl control. * Created a new class PnlLblCho to replace some instances of the wxChoice class. It provides the functionality of wxChoice and adds a parameter name string displayed to the left of the wxChoice control. * Updates to the build system to suppress warnings when building with gcc and wxWidgets v2.8.12. * Convert all bool values to lower case "true" or "false" instead of upper case "TRUE" and "FALSE". There seems to be no reason to use upper case values hence the change. * BugFix : The class CnvtType was failing one test utility check. The method bIsFloat( ) was not detecting that a string like "123E-4" represents a float. * Updates to the build system for the test utilities (ie. in src/Makefile). * Change from the drawing package Xfig (and FIG drawing files converted to JPEG image files) to Inkscape (and SVG drawing files converted to PNG image files). * BugFix : Contributor "dcb" ran cppcheck on the gSpiceUI sources. Two non-sensical test expressions inside two if( ) statements were found in the file CmdGnuCapGEN.cpp. Both bugs have now been rectified. The rest of the sources passed the cppcheck tests OK. * Update to GPL license version 3. * Changed email address references. * gSpiceUI now responds appropriately if a binary file can't be found eg. gschem or gnetlist. * Major update of ConvertType class including a name change to CnvtType. * HTML documentation updates. * Many minor updates and bug fixes. ---------------------------------------------------------------------------------------------------- 2011-09-27 : M.Waters * Released version 1.0.00. * When gSpiceUI is installed example schematic files and library files are now included (this was always intended but overlooked). * gSpiceUI has been successfully compiled against the wxWidgets library version 2.9.2 (with wxWidgets 2.8 compatibility enabled). This was requested by a Mac OSX user Jerry J. since "it works better with the Cocoa framework". * BugFix : The temporary file management scheme was incomplete. If more than one circuit descriptions were loaded in a single session temporary files could be created but not deleted. * Modifications to the functions in utility/StrUtils.cpp. Signal source names are now sorted so that the most used component types appear at the top of the list. * Modifications to the functions in utility/StrUtils.cpp. The more interesting node and component names now tend to be placed at the top of the test probe list boxes and the remaining names are sorted more sensibly. * In the classes NetList, SimnBase, SimnGunCap and SimnNgSpice change all Extract*( ) function names to Load*( ). * BugFix : In version v0.9.99 a reload operation would close gschem and gwave or gaw. (This was unintended behaviour.) * In class SpinCtrl hard-coded a spin button repeat period of 80 msec. This may be user configurable in the future. * Increased the maximum number of lines which can be displayed in any text control to 1,000,000 lines and the default to 10,000. (I don't know if wxTextCtrl can cope with this but someone will try it sooner or later and we'll find out). * Objects inheriting from PrcBase (which itself inherits from wxProcess) created input and output streams but didn't deleted them. Eventually all available file descriptors were used up and gSpiceUI could no longer launch new processes. This long standing bug has been resolved (I think?) thanks to a contribution made by Jarno H. * Added a LM555 model file and demo. schematic. * In the classes PrcGWave and PrcGaw removed the functions bFormatLine( ) and bFormatField( ) because these operations are already performed by PrcGnuCap and PrcNgSpice. * Over-haul of the ChoUnits class. * In the PnlValue::bSetValue( ) methods remove unnecessary complexity by eliminating the bNoUnits argument; it's already implemented by the PnlValue::m_bUseUnits attribute. * BugFix : If a node label didn't start with a digit CmdGnuCapPR::Parse( ) categorized it as a component label. * BugFix : The src/Makefile target "deps" was not correctly defined. Most of the source files where being overlooked. * In HelpTasks class removed the status bar from the HTML window, it wasn't used. * Disable the Stop tool and Stop menu option when no simulation is actually running. * In the HelpTasks class added a tool to the tool bar for moving forward in the history database. * In the HelpTasks class implemented wxFrame close tool for HTML window. * Implemented a new command-line option -d which enables debug mode. This causes console spew to be generated on standard error. * At startup error messages are held over until the the main frame of the GUI has been fully displayed. * In src/Makefile added a new variable $DESTDIR which may be used to specify the install location at the request of Declan. * BugFix : The src/Makefile install mechanism failed if the target bin/ directory didn't already exist. * In the classes PnlValue, SpinCtrl and ChoUnits the method bClear( ) is used to set defaults. Added a function bSetDefaults( ) to set default values and changed the bClear( ) methods to just clear the object attributes. * Replace all references to wxWindows with wxWidgets. * Minor updates to Install documentation. * BugFix : The files utility/iStrCmp.h and utility/iStrCmp.c actually contain C++ code so they have been renamed to utility/iStrCmp.hpp and utility/iStrCmp.cpp respectively. Also removed instructions for compiling C code from Makefile. * In the class ConvertType all function for processing double float's take only double's of long's as arguments. (This is to do with compile time problems under OSX.) * BugFix : If gSpiceUI has gschem open and a reload operation is executed, the gSchem process is no longer closed. * Added a mechanism to sch/Makefile to convert all example schematic files included with gSpiceUI to netlist files using gnetlist. This provides some level of validation of schematic files, although it doesn't guarantee that they will work. * Updates to the HTML documentation. * Minor updates to man page. * Various minor modifications and bug fixes. ---------------------------------------------------------------------------------------------------- 2010-04-19 : M.Waters * Released version 0.9.99 Alpha. * BugFix : The Component class wasn't recognizing sub-circuits, transmission-lines or logic devices correctly. * Minor mods. so that all test utilities compile. * Have defined the following types in TypeDefs.hpp : ulong, uint and uchar. * It has been reported that "gSpiceUI opens new FIFOs every time gWave, etc. are started but never closes them. In a long session the user eventually runs out of file handles". In PrcBase::bLogOutput( ) instead of repeatedly getting the input and error streams, get input stream pointers once. I've not personally encountered this bug but this might fix it. * The sweep sources can now be synchronized. If a sweep source is selected in one analysis page, where possible the same source will appear in other analysis pages. This feature may be enabled or disabled via the Preferences dialogue. * In the class ConvertType replaced all calls to pow10f( ) with calls to pow( ) owing to problems compiling the code on OSX. * Simplified FrmMain::OnOpen( ), FrmMain::OnImport( ) and FrmMain::OnReload( ) so that most of the work is done by the class FileTasks. * Simplified FileTasks::bReload( ) so that it calls FileTasks::bOpen( ) and FileTasks::bImport( ) instead of duplicating code. * In the class PrcGNetList remove the functions that aren't really required : bSetGNetList( ), rofnGetGNetList( ), szGetGuileProcCnt( ) and szGetSchemFileCnt( ). * BugFix : Sort out bugs in the mechanism for loading schematic file/s via the command line. * BugFix : Sort out bugs in the mechanism for loading a netlist file via the command line. * Added m_iExitCode attribute to PrcBase class to contain the exit code returned when the process was last run. * Re-organise contents of lib/ directory. * Implement function CmdLinePcr::bCheckFiles( ) for basic file name testing. * Implement function CmdLinePcr::Print( ) for debugging. * BugFix : If errors are encountered by gnetlist the Console tab is displayed instead of the NetList tab. * BugFix : In dialogs pressing the Clear or Defaults buttons can now reversed by pressing the Cancel button. * The function PnlValue::bSetValue( wxString, bool ) can now set the units with a value of 0.0 eg. "0.0msec". * BugFix : In FileTasks::InitNetLstFile( ) simulation data was transferred from FrmMain::m_oSimnGcp to FrmMain::m_oSimnNgs when it had already been transferred from FrmMain::m_oSimnNgs to FrmMain::m_oSimnGcp. * BugFix : In CpntNgIndSrc::bParseValue( ) and CpntNgIndSrc::bFormatValue( ) the pulse source function was incorrectly formatted; the pulse width appeared ahead of the fall time. * Super-conductor junction components are now recognized. * The class name AppGSpiceUI has been changed to App_gSpiceUI. * BugFix : LC_NUMERIC locale problem reported by Werner H. and Viktor N. Have applied a patch provide by Werner : moved the locale call from the AppGSpiceUI constructor to AppGSpiceUI::OnInit( ). * Documentation updates. * Various minor modifications and bug fixes. ---------------------------------------------------------------------------------------------------- 2009-09-14 : M.Waters * Released version 0.9.98 Alpha. * BugFix : In the /Makefile the "install" target had the files ReadMe and Install in upper-case which caused the install to fail. Bug found by Werner H. * BugFix : For NG-Spice simulations columns of results where lost if more than three parameters where derived. Class CmdNgSpiceOPT can now set an appropriate page width for the number of derived parameters. * Updates to the text files : Authors, ChangeLog, Install, ReadMe and ToDo. * Add a new command line option "-c" to partially rebuild/clean the configuration file ie. ~/.gspiceui.conf. * BugFix : The command line processor was not functioning properly when the option "-g" was specified without an argument. * Some updates to the installation instructions (ie. Install). * BugFix : Gaw was used regardless of the setting in the Preferences dialog. * In /src/Makefile the debug flag was set by default. This meant that the resulting binary was much larger than necessary. The debug flag is now clear by default. * There is a new parameter in the preferences dialog which allows the results precision to be specified; a lower value means the raw data is easier to read but a higher value provides for greater resolution. * Brought back the component names in the NG-Spice results column labels. * Much of the implementation of the method bMakeArgLst( ) in classes PrcGnuCap and PrcNgSpice has been moved to the base class PrcSimrBase. * The gSchem ".sym" files in the /lib/ directory where mistakenly omitted from the last release. * Bug fixes. ---------------------------------------------------------------------------------------------------- 2009-09-11 : M.Waters * Released version 0.9.97 Alpha. * Data is now transferred from a NG-Spice simulation object to a GNU-Cap object (and visa-versa) by design rather than happenstance. * DlgPrefs is no longer an attribute of FrmMain but is created when needed. * Tidy up PrcGNetList class source files. * Some changes to the installation instructions for wxWidgets (ie. Install). * Remove the restriction that the transient analyse must have a signal source. * Modified the class DlgGcpCfgGEN so that it is derived from wxDialog only and not CmdGnuCapGEN as well. * Modified the class DlgGcpCfgOPT so that it is derived from wxDialog only and not CmdGnuCapOPT as well. * Modified the class DlgNgsCfgSrc so that it is derived from wxDialog only and not CpntNgsIndSrc as well. * Modified the class DlgNgsCfgOPT so that it is derived from wxDialog only and not CmdNgSpiceOPT as well. * BugFix : The temporary file management strategy indicator wasn't being stored in the configuration file. Changes to FileTasks class and DlgPrefs class. * Modified the Component class to handle TABs as field separators in component definitions. * Updates to the About dialog. * Updates to the command line usage message. * Update the "tar" target in the project root Makefile. * Modified DlgNgsCfgOPT so that it inherits CmdNgSpiceOPT instead of having an instance as an attribute. * Modified DlgNgsCfgSrc so that it inherits CpntNgsIndSrc instead of having an instance as an attribute. * Updates to the class ConvertType. Can now specify a resolution for conversions from floats to strings. * Updates to the About dialogue contents particularly the licence details. * Major re-think and overhaul of the Simulation class to make it easier to understand and maintain. It's been replaced with the structures SimnBase, SimnNgSpice and SimnGnuCap. * Some classes have now been re-defined as structures so that most of they're attributes have public access. This increases they're ease of use since attributes can be accessed directly rather than via inline function calls. (It would be nice if C++ had a mechanism for defining attributes as read-only to the outside world.) * Created a new simulation structure SimnBase from which the new structures SimnNgSpice and SimnGnuCap inherit. These structure replace the single Simulation class which had become far too complicated. * Simplify NetList class. * Updated Component class, changed type to structure, it now permits public access to most attributes. * Added units of pico-seconds (psec) to the units of time in class ChoUnits. * Transient analyses may now be run without having to specify a sweep source. * Integrated the command classes into the simulation engine process classes. * Created new command classes CmdGnuCapOP, CmdGnuCapTR and CmdGnuCapFO for parsing and formatting GNU-Cap OP, Transient and Fourier commands. * Created new command classes CmdGnuCapPR and CmdGnuCapGEN for parsing and formatting GNU-Cap Print and Generator commands. * Created new command classes CmdNgSpicePR for parsing and formatting NG-Spice Print commands. * Created a new structure CpntNgsIndSrc which inherits from the Component structure. It processes NG-Spice independent voltage or current source definition commands. * And others things that I've forgotten. ---------------------------------------------------------------------------------------------------- 2008-02-29 : M.Waters * Released version 0.9.65 Alpha. * A schematic editor (ie. gSchem) can now be envoked from within gSpiceUI via the menuing system or the tool bar. * Implemented test utilities in all command classes to facilitate debugging. * Create new command classes CmdGnuCapDC and CmdGnuCapAC for parsing and formatting GNU-Cap DC and AC commands. * Created new command classes CmdNgSpiceAC and CmdNgSpiceTR for parsing and formatting NG-Spice AC and Transient analysis commands. * Modify class PrcNgSpice to use the command classes ie. CmdNgSpiceDC, etc. * Created a new class PrcGaw to interface to the waveform viewer Gaw (which is a rewrite of gWave). * One of two waveform viewers may now be specified by the user via the command line or the preferences dialog ie. gWave or Gaw. This preference is also stored in the configuration file and so need only be specified once. * Bug fixes. ---------------------------------------------------------------------------------------------------- 2007-10-25 : M.Waters * Released version 0.9.55 Alpha. * Various improvements to src/Makefile. * Changed the name of the Options menu to Settings to prevent confusion with the SPICE OPTIONS command. * Fixed a bug in the "make deps" process. * Fixed a bug where a reload operation was clearing the units of the stop value in the NG-Spice DC analysis. Also fixed many other bugs associated the reload operation in all other analysis panels. * Minor overhaul of the class PnlNgSpiceDC. Will do the same to all other analysis panel classes in the fullness of time. * Fixed bug 1759886 "make install: error if ../share/man/man1 is missing" submitted by Werner H. * Added the file TypeDefs.hpp to contain mainly the enumerated type definitions used throughout gSpiceUI. * First cut at controlling the fonts used by gSpiceUI. * Added a Clear button to the GNU-Cap Generator Setup dialog and the NG-Spice Signal Source Setup dialog. * A new class CmdNgSpiceDC has been introduced for parsing and formatting NG-Spice DC analysis commands. Ultimately all analysis commands will be processed using this mechanism. * The recommended version of the wxWidgets library is still v2.8.x but work has been done to improve support for v2.6.x. It seems that wxWidgets v2.8.x has not yet been sufficiently widely adopted to make it a requirement. * The src/Makefile has been modified so that the version of the wxWidgets library to compile against may be specified via the make command line or within the Makefile itself. * An upper limit of 9 characters has now been imposed on the number of characters which may be entered into a SpinCtrl object. * Fixed several bugs associated with the SpinCtrl class. * Bug fixes. ---------------------------------------------------------------------------------------------------- 2007-07-05 : M.Waters * Released version 0.9.33 Alpha. * Added a sinusoid function to the NG-Spice signal source configuration dialog. * Tidy up of the Makefiles. * The title line/s in user generated circuit description files are now preserved in the simulation file generated by gSpiceUI. Requested by Andres M. * Fixed a bugs in the GNU-Cap DC and AC command parsers causing them to break when the start and stop sweep values where equal. * Adjustments to the size and position of display components. * For GNU-Cap the option BASIC has been appended to all analysis lines to suppress the use of alpha abbreviations instead of an exponent eg. 3.1u now becomes 3.1E-6. Requested by Andres M. * Introduced an .OPTIONS button on each analysis panel and removed the .OPTIONS option in the Options menu. * Added tooltips to the NG-Spice source component setup dialog and the GNU-Cap generator component dialog. * Improvements to src/Makefile. * NG-Spice negative node values in .PRINT statements were not processed correctly. Eg. PRINT TRAN V(0,1) V(0,2) (2 parameters) is interpreted as PRINT TRAN (-V(1)-V(2)) (1 parameter); I've found through experiment that PRINT TRAN 0-V(1) 0-V(2) results in the correct intepretation. The code has been modified accordingly. * Fixed warnings generated by GCC v4.1.1. * Added tool tips to the OPTIONS line setup dialogs. * gSpiceUI can now be compiled against wxWidgets v2.8.4. * Addition of a man page. Minor updates to the documentation. * The SpinCtrl control is now right justified. * Implement the application preferences dialog. * Some modifications to the PnlValue class. * The main frame's system close button now works. * Automated the creation of dependencies. Added target "deps" to the Makefile in the C++ sources Makefile. This target creates the file Makefile.deps which contains a list of dependencies which are included in the Makefile. * Many bug fixes. ---------------------------------------------------------------------------------------------------- 2006-10-26 : M.Waters * Released version 0.8.90 Alpha. * Some modifications to the PnlValue class. * Fixed some subtle bugs in the SpinCtrl class. * The SpinCtrl class can now display positive floats with an exponent. * Added NG-Spice OPTIONS line setup dialog. * Added GNU-Cap OPTIONS command setup dialog. * Added selection to Options menu to access OPTIONS setup dialog. * All include file paths are now from the source directory. Allows reuse of file names. * Added TeraHz, kV and kA to the class ChoUnits. * If during installation $(INSTALLDIR)/bin doesn't exist it is created. * Bug fixes. ---------------------------------------------------------------------------------------------------- 2006-05-16 : M.Waters * Released version 0.8.55 Alpha. * Fixed fault where source component requested for NG-Spice temperature sweep. * Fixed some faults in the parsing of floating point numbers into mantissa and exponent (ConvertType.cpp). * The last line of the console output was missing if it didn't end in a new line character. * The output from gNetList is now searched for errors and the user notified if any are found. * The application initialization process has been overhauled. It's still not perfect but is an improvement. * A progress dialog is displayed while the simulation engine is being changed. * The source and generator dialogs now do some validity checks before accepting the user settings. * Bit rot in PrcBase::Print( ) meant that the text controls weren't always being loaded properly. * The Simulation text control wasn't being updated when a simulation was run. * Bug fixes. ---------------------------------------------------------------------------------------------------- 2006-02-17 : M.Waters * Released version 0.8.36 Alpha. * The rogue log file going by the name prcbase.log which some times appeared has been tracked down to the class PrcGNetList. The log file name wasn't being set properly and sometimes wasn't deleted when no longer needed. Both of these problems have been rectified. * The technique used to clear the save file in the function PrcSimrBase::bSaveOutput( ) has been much improved. Large simulations should now run noticably faster. * The function bExec( ) has been moved from the classes PrcGnuCap and PrcNgSpice to the class PrcSimrBase. * Cleaned up the code that formats NG-Spice results (PrcNgSpice.cpp). * Cleaned up the code that formats GNU-Cap results (PrcGnuCap.cpp). * A new panel has been added to the GNU-Cap notebook for Fourier analysis. * Options for displaying the GNU-Cap and NG-Spice manuals have been dropped from the Help menu. * An alternative installation directory may now be specified via the base Makefile. Refer to text file INSTALL for a complete description. * Include file wx/image.h added to HelpTasks.hpp for MAC platforms as a result of feedback provided by Anthony W. * Crash caused by an attempt to access the first character in an empty string fixed as a result of feedback from Anthony W. - functions modified were: PnlNgSpiceDC::InitSwpUnts( ) and PnlGnuCapDC::InitSwpUnts( ). * Crash caused by attempt to set the value of a non-existent display object fixed as a result of feedback from Anthony W. - function modified was: PnlGnuCapFO::CreateOutputs( ). * The tool bar help icon was found to be malformed and has been fixed as a result of feedback from Anthony W. - file modified was: icons/help.xpm * Additions to the documentation. * Bug fixes. ---------------------------------------------------------------------------------------------------- 2005-11-29 : M.Waters * Released version 0.8.08 Alpha. * Documentation is now included in the install process. * Added a tool to the tool bar linking with the gSpiceUI manual. * The gSpiceUI manual can now be accessed from the Help menu. * The application main frame close box has been disabled because when used configuration data isn't recorded. I will fix this at some later date. * Cleaned up the code run when the simulation engine selection changes. * Built using the infamous gcc version 4.0.1 compiler. One warning produced which has been fixed. * Bug fixes. ---------------------------------------------------------------------------------------------------- 2005-11-16 : M.Waters * Released version 0.7.93 Alpha. * If a net list or schematic is open on exit that same file will be opened next time gspiceui is started. * The open net list and import schematic dialogs now remember the last directory accessed (these values are stored in the configuration file). * Added two minor mods. for clean compilation under Sun Solaris. * A alternative configuration file may now be specified via the command line using the -r option. * The relationship between the class AppGSpiceUI, FrmMain and CmdLinePcr has been simplified. Should prevent compiler errors associated with circular includes. * Continued implementation of the configuration file mechanism. * The development status has reverted to Alpha since fundamental structural changes are still being made and are still required. * The command line option "-t" which sets the temporary file management strategy hadn't been implemented, it has now. * The command line option "-d" which sets the number of lines to display in text controls has been dropped. * The main frame is now resizable. * Changed the layout of the main frame to make better use of the available space. ---------------------------------------------------------------------------------------------------- 2005-09-03 : M.Waters * Released version 0.7.80 Alpha. * Rectified some bugs associated with the status bar. It now works correctly. * Commenced implementation of a configuration file mechanism. The configuration file name is ".gspiceui.conf" and is placed in the user's home directory. * The position of the main application frame is now recorded in the configuration file. At startup gSpiceUI attempts to position itself where it was last placed. * In class FrmMain the function OnRun( ) has been tidied up. * If required a .WIDTH card is now added to NG-Spice decks so that more than 5 columns of data may be output in the results files. * Net list files generated by gSpiceUI no longer have "gspiceui" appended to the file name eg. for a schematic "circuit.sch" the net list file name will be "circuit.ckt" and no longer "circuit.gspiceui.ckt". * The text control notebook page "Results" has been replaced with two pages "GNU-Cap" and "NG-Spice" which display GNU-Cap and NG-Spice simulation results respectively. * Added a reference to the source schematic/s in net list files created by gSpiceUI. A reload operation now re-imports the schematics if this reference exists in the currently open net list. * Added GHz to frequency units. * Additions to the documentation. * Bug fixes. ---------------------------------------------------------------------------------------------------- 2005-07-21 : M.Waters * Released version 0.7.56 Alpha. * Commenced the use of layout managers to place and size display objects. This has been completed in the classes DlgSrcCfg, DlgGenCfg and PnlValue. * Development of gSpiceUI is now based on the wxWidgets library v2.6.x. wxWidgets library v2.4.x is no longer supported as it does not contain the class wxSizerFlags which is required for use of layout managers. * Changed references to make in all Makefiles to $(MAKE) so that gmake works on FreeBSD. * Implemented the tool bar and removed the simulation control buttons in the main frame. * Implemented the schematic/netlist reload function in the File menu and tool bar. * Created a new class NbkTxtCtls to contain all of the code associated with the text controls used by the FrmMain class. * Created a new class HelpTasks to contain most of the help operations required by the FrmMain class. * Created a new class FileTasks to contain most of the file operations required by the FrmMain class. * Discovered the wonders of compiling NG-Spice with XSpice extensions. Enables NG-Spice to handle POLY( ) statements eg. found in opamp models. * Added "*.cir" to the netlist file filters in the open dialog. * Added modifications suggested by Ezra to remove errors when compiling under Mac OSX. * Added Unicode support. * Bug fixes. ---------------------------------------------------------------------------------------------------- 2005-05-18 : M.Waters * Released version 0.7.18 Alpha. * Added modifications suggested by Shahab Sanjari to remove errors when compiling under FreeBSD. * Dialogue added to NG-Spice Transient analysis to allow pulse source to be configured by the user. * Spin control precision changed from one decimal place to two. * Fixed some minor bugs associated with the PnlValue class. * In the AC analysis the default step scale has been set to "Dec" and the default source level to 1.0V (ie. 0dBV). * The AC analysis complex parts radio for magnitude in dB has been changed to "Mag. in dBV" to highlight the units used. * The correct Options menu simulator item is now checked when a new simulation is opened. * The class PrcPlotter has been rename to PrcGWave. * Added two new operational amplifier models to the lib/opamp directory ie. LM324 (national) and LMX358 (maxim). * Al Davis reported that the GNU-Cap AC analysis generated by gSpiceUI was missing an .OP command prior to the .AC command. The operational amplifier models in the lib/opamp directory can now be AC analysed correctly using GNU-Cap. * Additions to the documentation. * Bug fixes. ---------------------------------------------------------------------------------------------------- 2005-04-19 : M.Waters * Released version 0.7.01 Alpha. * More than one schematic files can now be imported via the command line. * gSpiceUI can now be compiled using the wxWidgets library v2.5.4 but at this stage the GUI looks better using wxWidgets v2.5.2 or earlier. * Command line option added to specify temporary file management strategy ie. "-t ", delete the files automatically, prompt the user or keep them. * Command line options which have not yet been implemented are no longer displayed in the application usage message which has also been tidied up. * The application frame now cannot be resized using the mouse but the text control display area can be resized with a new command line option "-d n". * The spin controls have been modified so that the units automatically change to the next logical value when appropriate eg. 1000.0mV rolls up to 1.0V and 1.0mV rolls down to 1000.0uV. * I have derived an opamp model on which NG-Spice can perform an AC analysis. The model is based on the Maxim LMX358 model. I haven't been able to find an opamp model on which GNU-Cap can successfully perform an AC analysis. So far I've tried models from National and Maxim. * Additions to the documentation. * Bug fixes. ---------------------------------------------------------------------------------------------------- 2005-03-22 : M.Waters * Released version 0.6.91 Alpha. * Added sweep step size checks when creating simulation. * Work has been completed on parsing basic GNU-Cap commands contained in circuit description files. * Work has been completed on parsing basic NG-Spice commands contained in circuit description files. * The command line processing code has been moved from class AppGSpiceUI to it's own class CmdLinePcr. * Fixed a bug that caused net list files to be loaded twice. Load operation should now be faster. * Fixed a bug in the spin control which caused incorrect incrementing of negative numbers. * Bug fixes. ---------------------------------------------------------------------------------------------------- 2005-02-22 : M.Waters * Released version 0.6.81 Alpha. * The log file created by gnetlist is now removed on Close or Exit. * Temporary files created by gSpiceUI to hold analysis results are now removed on Close or Exit. * The development status has been changed from Alpha to Beta. * The naming convention for the simulation file has changed from ".sim" to ".gspiceui.ckt". * Work has commenced on parsing SPICE commands contained in circuit description files. The GNU-Cap Quiescent analysis and the NG-Spice AC analysis are complete. * The circuit description files generated by gSpiceUI will now have the extension ".gspiceui.ckt" instead of ".sim". * The GNU-Cap Fourier analysis panel has been temporarily disabled. It is broken and as yet does nothing useful. It will be enabled again when it is fixed. * The spin controls have been modified so that the step increment is now dependent on the value shown. In most cases the control will be incremented or decremented by between 10% and 100% of the displayed value. * Sort out some bugs which have crept into the NG-Spice simulation mechanism. * Simulation class now inherits from NetList class. Streamlines application architecture. * Additions to the documentation eg. object model diagrams. * Bug fixes. ---------------------------------------------------------------------------------------------------- 2005-01-12 : M.Waters * Released version 0.6.58 Alpha. * Allow standard power supply rail labels (ie. Vcc, Vee, Vss and Vdd) to be used as sweep sources. * Move source attributes and code from analysis panel classes into base class PnlAnaBase to facilitate reuse and maintainability. * Move complex parts attributes and code into class PnlAnaBase to facilitate reuse and maintainability. * Bug fixes. ---------------------------------------------------------------------------------------------------- 2004-12-08 : M.Waters * Released version 0.6.53 Alpha. * Clean-up and re-arrange analysis notebook display objects to accommodate a new analysis temperature display control. * Implement new anaylsis temperature control. * Add units of radians and grad to phase values. * Move analysis temperature attribute and code into class PnlAnaBase to facilitate reuse and maintainability. * Improve the management of the i/o notebook text controls. * Additions to the documentation. * Bug fixes. ---------------------------------------------------------------------------------------------------- 2004-11-10 : M.Waters * Released version 0.6.47 Alpha. * Allow ".include" directives to be specified in net list files. * Replaced NG-Spice field identifiers in result file with component labels. ---------------------------------------------------------------------------------------------------- 2004-11-08 : M.Waters * Released version 0.6.45 Alpha. * gSpiceUI now behaves properly when sub-circuit appear in the net list. * As a result of the change to wxWidgets v2.5.2 the GWave process was broken. It now works again. * Multiple schematic files may now be selected and imported via the GUI but not yet from the command line. * Status line enhancements. Simulation engine is now displayed. * Improvements to the application architecture. * Plot process mechanism over-hauled. * New class introduced to display floating point or integer variables. It now behaves correctly near zero. * New choice control class introduced to display and process units. * Debug messages mechanism has been removed. * For the time being only one plotter process can be intiated at a time. * Additions to the documentation. * Bug fixes ---------------------------------------------------------------------------------------------------- 2004-09-16 : M.Waters * Released version 0.5.76 Alpha. * PrcGNetList.cpp : Multiple schematic files can now be imported via gnetlist into one netlist file. * gSpiceUI is now based on the wxWidgets v2.5.2 library (it may not be backwards compatible with v2.4.2). * Added Transient analysis panel for NG-Spice. * Added AC analysis panel for NG-Spice. * Makefile : "make config" is now part of "make all" because it got left out by some users and appeared to be a fault. ---------------------------------------------------------------------------------------------------- 2004-08-12 : M.Waters * Released version 0.5.63 Alpha. * Verbose mode option (-v) added to argument list to gnetlist. * Default argument in FrmMain::bImportSchem( ) was removed. Caused some compilers to barf. * Some additions to the documentation. ---------------------------------------------------------------------------------------------------- 2004-08-05 : M.Waters * The initial release of gSpiceUI, version 0.5.54 Alpha. ---------------------------------------------------------------------------------------------------- 2003-08-15 : M.Waters * Started development of gSpiceUI. ==================================================================================================== gspiceui-1.1.00+dfsg/svg/0000755000000000000000000000000012525200532013611 5ustar rootrootgspiceui-1.1.00+dfsg/svg/OM-Analysis.svg0000644000000000000000000011727412267500561016452 0ustar rootroot image/svg+xml Refer to PnlAnaBase.hpp PnlAnaBase PnlGnuCapOP.hpp Refer to PnlGnuCapOP Refer to PnlGnuCapAC.hpp PnlGnuCapAC Refer to PnlGnuCapFO.hpp PnlGnuCapFO Refer to PnlGnuCapTR.hpp PnlGnuCapTR Refer to PnlGnuCapDC.hpp PnlGnuCapDC Refer to PnlNgSpiceAC.hpp PnlNgSpiceAC Refer to PnlNgSpiceDC.hpp PnlNgSpiceDC Refer to PnlNgSpiceTR.hpp PnlNgSpiceTR Refer to wxWidgets lib. wxNotebook Refer to NbkSimrBase.hpp NbkSimrBase Refer to NbkGnuCap.hpp NbkGnuCap Refer to wxWidgets lib. wxPanel Refer to NbkNgSpice.hpp NbkNgSpice Analysis Class Hierarchy Object Model Last Update : 2014-01-21 gspiceui-1.1.00+dfsg/svg/OM-FrmMain.svg0000644000000000000000000010715512267452062016217 0ustar rootroot image/svg+xml Refer to wxWidgets lib. wxFrame Refer to FrmMain.hpp FrmMain Refer to NbkSimrBase.hpp NbkSimrBase 2 Refer to wxWidget lib. wxListBox Refer to wxWidget lib. wxStatusBar Refer to wxWidget lib. wxToolBar Refer to wxWidget lib. wxMenuBar wxTextCtrl Refer to wxWidgets lib. Refer to wxWidget lib. wxNotebook TextCtrl Refer to TextCtrl.hpp 5 Refer to wxWidgets lib. NbkTxtCtls Main Frame Class Hierarchy Object Model Last Update : 2014-01-21 gspiceui-1.1.00+dfsg/svg/OM-Process.svg0000644000000000000000000005375112267454465016317 0ustar rootroot image/svg+xml Refer to PrcGNetList.hpp PrcGNetList Refer to PrcSimrBase.hpp PrcSimrBase Refer to PrcBase.hpp PrcBase Refer to wxWidgets lib. wxProcess Refer to PrcGwave.hpp PrcGwave Refer to PrcNgSpice.hpp PrcNgSpice Refer to PrcGnuCap.hpp PrcGnuCap Process Class Hierarchy Object Model Last Update : 2014-01-21 PrcGaw Refer to PrcGaw.hpp gspiceui-1.1.00+dfsg/svg/OM-PnlValue.svg0000644000000000000000000007247012315251155016407 0ustar rootroot image/svg+xml Refer to wxWidgets lib. wxStaticText Refer to ChoUnits.hpp ChoUnits Refer to wxWidgets lib. wxChoice Refer to wxWidgets lib. wxTextCtrl Refer to wxWidgets lib. wxSpinButton SpinCtrl.hpp Refer to SpinCtrl Refer to PnlValue.hpp PnlValue Refer to wxWidgets lib. wxPanel PnlValue Class Hierarchy Object Model Last Update : 2014-03-28 Refer to ChoUnits.hpp LblUnits Refer to UnitsBase.hpp UnitsBase gspiceui-1.1.00+dfsg/svg/Makefile0000644000000000000000000000612612453750064015270 0ustar rootroot#*************************************************************************************************** # Makefile * # ---------- * # Description : Build system for GNU SPICE GUI project SVG diagrams (these drawings can be edited * # with GNU drawing package Inkscape). * # Started : 2004-04-06 * # Last update : 2015-01-09 * # Copyright : (C) 2004 by MSWaters * #*************************************************************************************************** #*************************************************************************************************** # * # This program is free software; you can redistribute it and/or modify it under the * # terms of the GNU General Public License as published by the Free Software Foundation; * # either version 3 of the License, or (at your option) any later version. * # * #*************************************************************************************************** #*************************************************************************************************** # Specify string values #*************************************************************************************************** # Which SVG converter CNVTR = inkscape # Directories ROOT := $(shell cd .. ; pwd) OBJDIR = $(ROOT)/html # Objects OBJS := $(patsubst %.svg,$(OBJDIR)/%.png,$(wildcard *.svg)) #*************************************************************************************************** # Make these targets #*************************************************************************************************** all : $(OBJS) # Compiler Rules # ($< is the name of the first dependency) # ($@ is the file name of the target) # (-L is the output graphics language) # (-m is the magnification at which the figure is rendered) $(OBJDIR)/%.png : %.svg $(CNVTR) -b white -D -f $< -e $@ #*************************************************************************************************** # Remove temporary files and backup files #*************************************************************************************************** clean : rm -f Makefile~ *.bak $(OBJDIR)/OM-*.png #*************************************************************************************************** # Specify phony targets #*************************************************************************************************** .PHONY : clean #*************************************************************************************************** gspiceui-1.1.00+dfsg/svg/OM-gSpiceUI.svg0000644000000000000000000011556012267454762016346 0ustar rootroot image/svg+xml NetList.hpp Refer to NetList Refer to Simulation.hpp Simulation Refer to PrcGNetList.hpp PrcGNetList Refer to PrcGnuCap.hpp PrcGnuCap Refer to PrcGaw.hpp PrcGaw Refer to FrmMain.hpp FrmMain Refer to PrcNgSpice.hpp PrcNgSpice App_gSpiceUI.hpp App_gSpiceUI Refer to main( ) Refer to wxWidgets lib. wxApp Refer to CmdLinePcr.hpp CmdLinePcr GNU SPICE GUI Application Object Model Last Update : 2014-01-21 Refer to PrcGWave.hpp PrcGWave Refer to DlgPrefs.hpp DlgPrefs Refer to HelpTasks.hpp HelpTasks Refer to FileTasks.hpp FileTasks Refer to PrcGSchem.hpp PrcGSchem gspiceui-1.1.00+dfsg/ToDo0000644000000000000000000002505712515100636013616 0ustar rootroot ToDo ------ Start Date : 2004-04-05 Last Update : 2015-04-03 Author : Mike Waters Email : mwaters517_AT_gmail_DOT_com ==================================================================================================== The following list contains "things to do" in the medium to long term for the gSpiceUI project. The items are grouped in the following categories : 1. Bugs (refer also to src/Version.hpp) 2. Enhancements to Existing Features 3. Improvements to the Code Base 4. Possible New Features Note : Bug reports are date stamped to highlight the age of the observation. ---------------------------------------------------------------------------------------------------- 1. Bugs (refer also to src/Version.hpp) : 2015-03-30 If at start-up a .ckt file can't be loaded but the associated .sch file exists then import it. This can happen if the .ckt file is deleted between envocations of gSpiceUI. The last accessed .ckt and .sch files are recorded in the config. file (.gspiceui.conf). If the reload button is pressed the schematic file is re-imported. 2015-02-22 Make sure all model files have the appropriate copyright notices. 2015-01-27 In CmdLinePcr the function CleanCfgFile( ) needs some work. The configuration file should be wipe clean and re-written using the existing configuration settings. 2012-02-10 If gnucap and/or ngspice aren't installed gSpiceUI just hangs. 2011-09-07 Source synchronization isn't quite working in both the NG-Spice and the GNU-Cap DC analyses. Source synchronization begins with a page changed event which is first intercepted by Nbk::OnPageChangd( ) which then allows NbkSimrBase::OnPageChangd( ) to actually handle the event. NbkSimrBase::OnPageChangd( ) gets a pointer to a PnlAnaBase object and changes the source name, however events can only propagate down from PnlDC to PnlAnaBase but not back the other way so PnlDC never knows about the event. PnlDC::OnSrcName( ) is where the sweep units type is set so this doesn't happen. 2011-08-26 Still producing "prcbase.log". 2011-05-26 Implement the bSaveSimCmds( ) method in the classes SimnGnuCap and SimnNgSpice. 2011-04-27 NG-Spice doesn't like probes where one of two nodes is ground, eg. ".PRINT TRAN V(Trigger,0)". It complains with the message : "Warning: can't parse '0': ignored" 2011-04-19 The way the wxProcess class is used is fault prone. wxProcess objects should be created dynamically when a process is to run and deleted soon after the process terminates. PrcBase inherits from wxProcess, it should contain a pointer to wxProcess object as an attribute. 2011-03-23 In the class PrcSimrBase the console spew logging mechanism is clumsy; PrcSimrBase::bSaveOutput( ) does almost the same thing as PrcBase::bLogOutput( ). Shouldn't have a results file should just use the PrcBase log file system. 2011-03-02 The GNU-Cap OP analysis the "Temp" column header is missing in the formatted results. Talk to the GNU-Cap developer/s. 2010-04-29 Resolve issues compiling the code under OSX. How? 2010-04-19 In FrmMain::Initialize( ) if the call to m_oFileTsks.Initialize( ) causes an error message to be displayed FrmMain is only partially initialized and it looks broken. Test Method : 1. delete the netlist file named in the config. file under "Files/NetList", 2. arrange it so that gnetlist can't be found by gspiceui. 2008-12-12 The function PrcBase::bLogOutput( ) ends early before all console output is collected. 2007-10-25 For NG-Spice simulations if R1 and C1 are connected in parallel and R1 is selected as a test component after a reload operation both R1 and C1 will be highlighted as test components. 2007-07-17 The transient analysis IC option isn't loaded correctly from the simulation file for NG-Spice. ---------------------------------------------------------------------------------------------------- 2. Enhancements to Existing Features : * The reload button / function could be rendered superfluous before running a simulation the schematic file modification timestamp was compared to the circuit file modification timestamp. If the schematic file is newer then reload it automatically. * After a simulation has completed add the run time in brackets to the status message. * Get NG-Spice to display phase results using radians or degrees. Refer to section 10.5 Variables -> "units". The SET command doesn't seem to work in batch mode. * Complete the implementation of layout managers in class PnlAnaBase and it's decendants. * Modify the spin control so that zero appears more often when using the spin buttons ie. decrement / increment through zero before changing the units. * When a gschem process is exited and the schematic file has changed automatically do a reload and maybe re-create the simulation file. * In the simulation file, place simulation commands ahead of models and sub-circuits. * After a simulation has run, if the data viewer utility is open tell it to reload the results file. * Could an existing opamp symbol be used in schematics instead of my symbol in the file opamp-3.sym? * Maybe all Open dialogs should accommodate upper case file extensions as well as lower case. * For AC analysis if results magnitudes are in dB chosen how about displaying Signal Source magnitude in dB. * If user envokes either of the schematic editor or data viewer utilities and it is already running bring it to the foreground instead of displaying an error message dialog. * Use standard component values in PnlValue controls displaying R, L or C. * Automatically add ".MODEL" statements to netlist file if they are missing. * Remove the discontinuity at 360 degrees from the phase results. * Remember the position of Gaw or gWave and place it there when it's envoked. * PnlValue & PnlTxtSpn classes should object if non-numeric chars are entered. * Allow the PnlTxtSpn class to be changed using the up and down arrow keys. * When a netlist created by gSpiceUI is loaded into the NetList text control load it into the Simulation text control as well. If gSpiceUI created the netlist it can be simulated. * The NG-Spice Transient analysis cold initial conditions doesn't work. Will need to implement the IC command to zero all nodes voltages. * In PnlValue class shouldn't be allowed to change value or units if a component name hasn't been chosen. * If gSpiceUI is exited with gschem open, any unsaved changes in the schematic file are lost. * In NG-Spice the variable "numdgt" could be useful for setting displayed precision. Refer to section 10.5 Variables. * While performing a simulation if the gSpiceUI GUI is corrupted it isn't re-drawn until after the simulation is complete. Need wxYield( ) statements in appropriate places to allow the GUI to be updated. * Make analysis panel back-ground a bit darker than control panels. ---------------------------------------------------------------------------------------------------- 3. Improvements to the Code Base : * In the preferences dialogue add an option indicating what the PnlValue class should do when it's next step could be zero, ie. change sign (eg. (+)ve to (-)ve) or change units (eg. V to mV). * In the preferences dialogue add an option for line wrapping of the console buffers. * Add cloc (Count Lines Of Code) to base Makefile. * Add cppcheck (C++ syntax checker) to src/Makefile. * In FrmMain layout investigate using one vertical and one horizontal box sizer instead of the more complex grid bag sizer. * In the PnlAnaBase class and it's descendants haven't used a layout manager. Have hard coded control sizes and positions. This is asking for trouble. * Should export as much as possible of FrmMain to App_gSpiceUI. FrmMain should layout the main frame and handle interrupts. App_gSpiceUI should manage all the processing tasks. Could some of the interrupts be hand-balled to App_gSpiceUI? * Abbreviate names containing NgSpice & GnuCap to NgSp & GCap respectively. * Investigate replacing parts of PnlTxtSpn with wxSpinCtrlDouble. Create a test app. perhaps. * Create a class for circuit description models. * Create a class for circuit description sub-circuits. * There are 3 types of source which may be used : a sweep source a signal source and an independant source. Ensure that this distinction is clearly made in the code and the GUI. * PnlValue class can be set to eg. 0.10 psec by the user but not programmatically, ie. using bSetValue( ). * In FrmMain the run simulation mechanism is evil. It needs a major overhaul. The Stop button doesn't work because the app. stays in the OnSimRun( ) event handler while the simulation runs so no other events are handled until this is exited. ---------------------------------------------------------------------------------------------------- 4. Possible New Features : * Add a mechanism to create a new schematic or netlist file so gSpiceUI can be used as an interface to gschem in all situations. Don't ever need to start gschem separately if preferred. * Provide support for SPICE OPUS. * Fully support non-English locales using gettext( ), etc. * Add help items for the documentation for NG-Spice and GNU-Cap. * Add application paths to the Preferences dialogue : - NG-Spice & GNU-Cap binaries (and documentation for same) - gschem & gnetlist - Gwave & Gaw - calculator utility Show which utilities have or haven't been found automatically. * Do 'include' directives need to be expanded by gnetlist? Simulation engine could be left to do this. * Add a tool bar button for the calculator utility. * Implement Fourier analysis panel for NG-Spice. * When a simulation ends prematurely because of problems encountered by the simulation engine, notify the user that this has happened. Need a mechanism to determining if the end of the sweep range was actually been reached. * Add a mechanism for envoking a calculator which the user may nominate in the preferences dialog (the best one I've found so far is galculator). * Develop a mechanism by which the user may set the initial conditions for the transient analysis. * Investigate using the simulation engine PLOT command to display results. ==================================================================================================== gspiceui-1.1.00+dfsg/html/0000755000000000000000000000000012525200532013756 5ustar rootrootgspiceui-1.1.00+dfsg/html/Scrn-GNUCap.jpg0000644000000000000000000027133312124473162016457 0ustar rootroot‰PNG  IHDRwÄ$x^. pHYsÄÄ•+"tEXtDescriptionWindow Class: gspiceuiŽXÁSvzTXtTitlexœÁ±! Ð_騉¥`dtº¸¸˜s'µZôNŠñ÷}oºÌpµÊÓ|ÞÁMº×örÈG8-¦6é@)Ò>ƼÒ¶ ­þ#ëí%<œžn•å[ÉYÉ]£“9˜ ;c½KY¿Ç¼A$‰®úz IDATxœìy\TÕÛÀŸ{ï,0ûî‚‚ ¸ïš¢Zn©©¥mš™Vjæ[šXfejiù³l³²Ür×÷ 7DA@eßfænï§q6†a†­óýÜÞ9÷,Ïsι‡gž³ 6hæZÐâÒö¥€@ @4¼¼<í<Íg_²,ÛÔÛêéÔÜR @4™©ì¢Ömü`Z¶f•yiûRξ,-*j.É´q¿µ«¦6·@ M„û­]¥Eóš[ŠFÁ²liQ‘«‡ghâðÄÄ,-*j!&&@ ¢ÕÁY’»¶móööÎÊD @ ¬ ®qd6·$@ ˆVψ¨(Ή|™¶…]Ä. s³knAZÿÙ:1Sq«ÔÏk¡Žì¢ %½œ“Iëbd1»(hÓpåÿŸí·¡mTší´°VÎÏÇ*’˜Î$²£øþ+è÷‚ØEA¡®ÂÆ„hJ\= ª®ùùõ&çÕÃDPRXhNM€«=±¼¯ëØN’öRɰiåê]iUkãË€Û±u·TÕý÷,†…07»[/ù¶!Uó4ü‡‰ÅJýÝ—dX¯ï3J•t#Uk× ¼(éïà(ȯ¡þw»œ«ìyØšAnÓºÈ\ì‰ûåê•—Kö¦Ë-ÈYðå`÷A>öB¢RE_Ì­ýàBQZ¹Z? ëuÿŽ2>tÝöà^ÙSqœÓbyö=êUÜÌhñðϹ*Hzß?‹\‚îAóéçeï#ᡞ€cpjr‡áíE:O]í‰Â7;ß“³0ÜÉXr•¯IþjˆÃoûŽ2>ɰ—ójß=W”Rªª7¹±GÆÚèTNÍ¢šyÝ~=~é–°³õfÜÇÆ´K#¸ðXÑê jüËÞ áËFueõ!ËXΔßXç4?[«toc™láéïÈK{”ò0®_ây ¢ìÌoß&{L`Ž´¦[ëâêáakŒ3ÿô âÂCÃÂê I}™ÚÖª ËÕ<ż3|߉p°äîËwö_¾-PV¾ÙE *LÕÄ qΑeƒÖQMî·viîÓbyµÆ>ÀïQ^/É*ä5¿Ÿ½yîfJ{º'•%×S¿ïž+\û “çÅðûÕÍMh¡¯‘A¶ß«€™~˜8ÿ2=HgïWwà”ªÞø8f:‚ëFvïëÓNB쌻C¨_v_HéGÛ2ÂóÝg•J¹ãâm)S»g¬O”‹¡ÊD´ýϵ{Î_RZYýǹ[eåÏûKF9J¦êàv"ÎÄ€¹.yù¼»Zn:¹‰G&ÚhÇ}Àßîíi°],C£…µ2´X~uq‹*¨Þ7¬÷²›9|Ù¨®¬;d™ÈÙFò7Y2M'G>¬Ü~lé›ÞÚ•i¬}µûX Ñêë¦[+¢±ÿl”?Ç®mÛ´‹Ó¹×<5Y¾Ls22ÕÈ'\;Êøñ™y“×üZµÔàN”µ/-VxÔ=Ų°l\Ÿ?7_÷.1¬ÿ¸ÿ⃵ԣœ™*BêRîûÍ’óEs»;¶—ò÷eÈ_?‘_K±P÷Õ'Hó…æµPÇáNAΚe‹Twfs™¿ÙÃqa¸s€#¿RÅìÏ¿¡¨RÅX cãÙs_¾i˜»¿§K©ò,ŽÁÔ.2Ø—¤’yÏééaPN®Þ¿Pôz7ÇÎŽbC `xt'Ƀܺ8 H†Í('?¹ZçsÒ® `QOçy=œ:Èx%µô®´ª/kU¼s¶pvˆCˆ‹0µL=óX^r‰®™»¸—3°v÷©­§nöêÕ럣Þä»éÒiÅÓ­<9P ï}¿÷Bfq¿ˆ°#óG.p8½ï±Zêaf4o Þÿiÿ¥¬²>aÝþy;ÒÛÁÞ!ëRYp”ŽH3ƒeœ]Э£ç¤þÝV\ˆ•{u׉c¢ÏpDøû¬Ó­›»H[ñÈŽâuCÜ;9òíyxi-û°zÑù¢’Z]óóþ¸rïZæÍ<ðÙšázçPñ/~s¡·§Ýª®«OÜ‹ÓUçQ´ŸøÔý" ã{oÍt½{X?¹éÊ×$ï½=+'öwRìæí“ugÅxoGq¸üöç&’›xd¢Î?VÀ˜ˆ.¢ËÛõÔWÖ4Zp ¶K½ÝxÙÅâùaŽö<|Ñù";ûl°è|Ñ)•\¶&Fê×›•Á—nI/篆¸oN,ûLá{=7 u__öÁÅ¢ý\?àº>¡lÉù"ý‚Œhºoz}êÿ;šPÓàØ¨98ðôê¹ðdöÉØÀ¢­áàöË(ïI¥ääæÄòÃ=êMn»a\Ûfh&íßœ5òêæûÅ`wƒ:+ÝXç4³eMç ûRoc™hšòÔ§sžV_·} ö13µ0-˜6¦ÇRó{£>Æ[M[Ÿ``¶­¡p¦Ô®mÛ¦ÎžÝ ¦Ž Vo°0®xâÑÔ61CÂÂê-Ñ,_æÔÙ³]&R>vÌÕÃCûâT²…ƒ7ÚOÿ;rQÎw( ~VÞ¡·¼Cïx§>†hâ¸z§£»ÓÜ΀®gy5ü0Òºù3¦>;B2èa§QJg_M„ÂÄïçÕÔ*§ɾ%1æß¿ýÜšáN?ò uÄ&f코؎¯rº†;máéÈcþºt';7ÿnŽ{GH0š´@ÇÆS®¤ÿÉ’Àä^xŠòáíÅ^b^U­*öfÚkÏ6-çêþÎ Y‡n¤¹'î€_G{9 ö]KÝw)‘ª*éÉä+ëÔÉ’^Î놺; Ø¿.&©käïF8ÿ:H¨]u_ tNÊ)Ê)®èî&üi ¯¶RGà>žvp;+¯Ú;ô"ø€‡£$€ÌÕ‰¦ XïäCvêÒ½;„uòÑv×íÃKÅjŠ^÷ê¸5ó^üfÆP5Í®ÞuŠP×êä $°É¥°òÏØ …ª«Ã07£ýÍDŸ‰yqÔܲœ’§÷–ðŠåŠ=—ïn?{³²¢ü¥®¿ è;˜{yÚÀýÜbµÔ]Xúœ¾>¾ãYŸ¸œªvìÕyÄñѾâ‰÷U2OÀ0ƒÉMT¾vòEª².‘åÏÔxu’¢‹KJ•ÜDrL´·8ÁÛYÖžµŽÿà©J#íRo7^ÐUp7·ÔÕžøi¤ûòÞ7²K]í‰ï‡»:Vå€É@_ÓY|é8ã{ˆ“Jú8a ·= s¨‘äÝæîo‹•ä&êd¢sê¼éõªÏ½ì&Ô466n¼YÎå°ïrò±×¸Ù'c‹¶ «¸Ï –ÕªÔ×nß]ÑKÊeb:y½Z7r×qkéϤiËÿëoƒB+ÝDçlPËÌAÓuh0ƒMi0Ð`3S Ó‚icb,mPo4ˆÁÑR#¶±Gæ£119léÑôôòÒ”O{1CÂÂ<½¼êÍÁ,_¦&Sí¦ML.ÂÄDíа0sÖŠZ€»ˆ€ÜÒ*…GÐÔ`§ÑÞ\¸öªˆŸN\ëÒiqtß»’:5´ˆ¹' ¶Gº¸;Hf‡Kf¨iæ­¾÷ï¬ëÊ¿b÷\O¿:rÐÖ_ïøÑѪ}zhçð^„3Äì8±õø5•c;üP NÖÀ»Îp'3G¥Rß*Tô €AÞ=vœOto¨ŽVa{jõ„ÎÏ÷ ]væØ‹AÁpøÚ]‹¿=°“i9¿øûìæcWUN0Çö À±¥êÄ;·«ø%)|e%Oê©‚vÚeÍs€•ÛÿÙqù^`H÷¸÷£§„û.ÝýWŽ{á“'>s³OŸ>Gæ ïè.}´¯½µÿýneyAnWJÄÉE5½]‡wñ’þtªÒo v¶ÎvT+Õ´P¦_¨6›Gx8 ññ›w*E®:xÛKÄ…ë7ÕNº>N &*€Ÿ«vrJä,àDyÀ¦#—*kI†oo"¹‰G&Ú¨J]ÓYˆá¤’áÞ…ðͰGäwÏ™úÒ«_ Û¥þn¼óÔñ»³ÿ÷Ž€G|ö×±cwrrþ÷®HÈUgÅ1>&F}Lgeð¥»Y¨”«é®í=ȪÞöE•a¼¥ªŠ~^ö Ë^»ŸMzõÑ/ÈDçÔyÓëU¿®ª«itlf¦ÆÓWÁÄXÚ Þhþ`¢ÀèˆjÚ&&gäYàÑÔvIÖ‹v)\ˆù&&˜?cÎy.5VchXÔ7“¾kÛ¶P=oêݧíNkQ¤ ½%sóAnµwňô|£ÛSkê%vAUN¶åJÆ]DHì SÏ þrW‡ìÒê 3GhŒàÏ^Šúß=õ¨h?ɵÇU•ruOcÉMT¾Nr7{âØÄö==ì~:—üÕ¾s –à›Hn⑉6’ êbVT×â2µ1+“ûSÁ±|ûñêvFíýJ0Ø.õvã…¥E.Áu÷%Å.uf8êoV´Ÿ»Ž¦³2üÒ±p)·6ÊOòBX;O1oñßW×Ï=³W!ž”]P¥P©Ånúššèœ:oz½ês˜PÓØØ¨Â#ˆÛPbl`ÑVÁSÌ€ôü’jŸðDì©o¶¦Ç%[ ãÚ!<ãÓ‡ÚòÒtEìœ jYƒ9è¿/¦ëÐ`&ÚhšÒD N3S c‚é«`b,mPo40ш õ|÷7‹zÝ|¦i¨ïÓÓËKÛœ›:{¶ù­YV¦fbžÛO¤mJ×›J;¤ÞIv‹9šUýF7Ç9cúíß“u«HùÞÃrÎÓá§Ä’Eý¼&ô ÖÌ©"ýø=|½Ïå1½=ì€e!¿¼ dO­mäc)×ã0ëv<µôRyÊñ¹ƒ¥öBIÞm•ÙÉÃùL‰$ÐIÅU58¥ë_|$§üø}ÛŸ}(Žq>šÇÕ”¯Œÿö÷û÷Ä%q1Û¹:<.©Ä;ûk[™¦u4S sPÑìžûò7º;}5s¤£x\Zy5-[0Ü„œÜG5E“b7M>¦Ví¸ xæ÷Ŭg¿ìü×ù[µ.Oy‘s«©Ž2~g/×3EÒ`g'vQ…œÕÕE3”øßãx0Vwö9¾@9ÚWÜÝÏëøª§‡UVç–V1žü gdU’*šåãØy¥ëåäRAUþ‚Á]1 .Ü}ÀðìÀÌhÜÑ7SÒJ]‚Ï‚ÿr€v.²‡»Ê»Dj„qÏúI`úÐðéC놙HøœŸÝ¯Jóæ&úŒAÅ_ v€÷~:´ëbâ°nþ-™£»ÛéFaí³~’/W<ÇÀF(:ºH:ºh>öëÒá|z¼]yYt'¿=×ÒH±‹‰&*?º“X“¼£ŒrRûÎN‚uG¯µóX­[@W¨éä&™h#® å—Ë‹*«™öcbcR5³]"SV¦–\ˆÁv©·3 KÙIôïXÆÄ›¥/€é¬Œ½tç×FùIæEõ'ivï…„'+ª\¹÷²wb ¾~A&:§Î›^¯ú&Ô466 €hbÆtÔV!¿šj'åùº;)•r*Ô›¼^­9,ÆI†åã˜Ld,ô0~T¶üÆ„4QQ`¤s6¨e æ ÿ¾˜®ÃzmmôÛ—C§™©…1ÁôU01–6¨7š?˜hÄÝeV ÊûdÌG{¢\{¦9iͲ2u¼²`ž¿ÔàSMY×Ü\y¹$ª=`°ï­7Nå3ö|‘ »òjùoQ"íÀ?îU~ÜÏõó—£&>® õv€ã7S«*šÿT´‹S;¦—Ö^.P×RÞ£}ÅpþÎíe71ÓGõ¼_ñ\¨;¸z‡û³§Í×7Ë6 ÷ˆyqTDJA1+ÑAÔùçLÀ°oo•¯êþÕ«cõï[‰‰z¸ »8 ܾI¤O-à0­£™Z˜ylÄöTùÝü<œ`ïådŠ/"%îæÈÉâ„æ>wNÀùG^ùŠ~a®ת$u¬Ì-·+¾ì¶ú¥1=ï• ëìÁU]E’ÖòB±˜©ÕÃÊFu0ix§ä‚‘Á^ðý±+ ߎˆîÍî=¾s«ŸÓÝeZiR‰GièN’*%¹áÀnë™Ñ®å×i'úæçŽg׎ p€øôG:û§t‘ L^«ŠKyÈ…ú¸uòtžÒ?äÏ9ú%¦ûŒ¾ây5T'þ¬gzu lôí;˜Yý¬Ÿ¤PÇïÒ³AêÛFÿùƒIÃgN³N•ÂÓCdá+`Äòîdø÷q΋OR9x›Hn¬òÛ»:h'¿<­£·„÷¨´ÊÇ®œ3»~u£4·š2Ñv&Íëîh¬†¶@ìÍ4†ooÌ‘ÉQ>ÕÄSŽŽ2¾¶ôÛÅœn Ú©žÎÁØ›ÕÎÕÑ &²2öÒ{¬€ÎÞ® Yùµ$—¯z.À âî=TKÝ jZOçÔzÓÍR߸š´@lll€‚ÊKÌûxZäm…ýÂK•Ætt÷뢭Ÿ©•ôvYóRTß´²è®OM#˜—l1Œß,Töõ²_ùbä€\úµ^n`ˆŽBmù i¢¢êÚåéþ`IËouÞ—zÇvÓƒ¶6úíûo&Oú˜ùZ˜LGciƒz£~ÎÆFKØ[~6¼TÔLLØNæ˜}©:k1jhšÛ´W€š?%ïéå¥}q ¹Ëºöx~ Õgûƒ_Ï&ÚØkÝ&ú‹n攬Ý{.«P×W¿=UžRôÔƧWKמ¾WTYÓ·ƒ“Z¥úëÂíw¶T9ø°_;Ú× eÊêÊIþösº;HzgÜÝw~<¨–ý;™¸ñÐÅ¡íER>ì¿vïË¿Ï*:èýí­ò·öÝNË-ìñr¤¬¢ÒåÞ?°!¡ìÝ·sŠ+&…z¾,1ÊN%8§žhŽæh¡Šd)ÇL¯pñ±"§²nOÉßqI*§ŽæËùo&¹ŠþnؼîŽ==ìnd¾¹y/·ßY›µñ¥Ëÿ¹SY£œæmÔ§o¾÷Ó!¥S–0êˆÒáDvÍK{S Êå/õlÓä§{/üïŸËÚ̳âeUf…ÚÛætsæ#ŒMÎóãƒygˆùÑfËÛ#Cb'|-ÂSÆcö_O}kË>RüÔrFnºü÷3 /oÚ;í׋Ó~½¸`çx¦Ggo•î¼6˜Ñgt˜usý_eAc({Óõér÷0¡V@Ype'3-§ŽšâøŠRœT²8NÙ;V{÷ %nú‘E…©ö%©`xB•cûjïúUÇ«­pN#^(»òQÁ]žJÎðí® ºEÚ9ª ¤u ‹j‰{OwÊΡAÑpR!ɽ-à”šá ÕRjŸ0†o¯-‰Óý3üšb…{f©¿ºÈ)ý,`XIèó®É¸‚Èú™ÙgtçWËŪjÊÎQáÖY–sÝ`¼*Û:Ê;fçéO{°8žÞÓÊ¡ŸJSîÁé¡yE¥ÿ·uwIÈ8íG“ëWþÑ íêM®i}cmgâ‘Á6ÙA|rrûŸÎ&~ôË¡Òà(ÚN ØÆ:¤9ÝØØ=z³vÏmBc÷Æ^:`Y·¤}C)Ü»Tû„‰ S%y· ¸û„#“;iÔ Mƒ¾úB¯vaðþwñ޽Œ©©èŒv¥Y’¼ÛÜþ_®¶õu<ðR¸¶ "®&)QöuaÅ£Ÿé»qö¨œâŠÞ‹6…O1˜œ”¸Ùtç)Êe9×xÊ*ÊN¦tö•äÞÖèÂå¼må;¹¥•Úmm´”n°sþúÉbËZÖôxkB<Ó™ì<úí«MçM4­…‰zÓÁôXj~oÔÇàh©ûŒóPƒ©4iSÖÏ3áô±cƈÒ=V¯ñœ>vlêìÙ:¾EÎäÂMÊ¥m˜• õY‡VÄ2C³YÐôž Mû£ eQOçú8[ºñ#­ð·æùGˆ†Ò}ƾô4'¾Ú'LÑðb—öv¾|ñâíâZyû^ÝÈä#:fœ«uë,oQìúh.-š^‚¬Ò9ûyÙÏsš,+©ªé±pCaà˜ÆÛý&ÐQ¡—‡Ý/£=÷§WÛñð¹Ý„xÌ_'¾;T2ÖXÍ;ŒÛ¨­mѲMOÛÐÂ+³^LÔc Û̘oÑŸ#ge6ØËÝ4&&ÂlH(ûþØ‘\]Ü»¹eAØœZ—N:«`Ígm|™¨’P»ÔÕÉ-F-õ°âWÓæÒ¢é°EAc|Å3‚e™ÅUü|@ñµ72ÚJji’¤>èåˆãxfIõ'¯þ{¥Ö§þùÁæÂFmÝì}Ø*´ -¬EÛ`\qú… ×§Á¾Ì¦¤¹3Í"!Æ@}Ñb±JççßÜ¥…yû^:?²Õꇬ8¢¶–Jk]jÝêùuûÿÂ+Ù6tl¥Zpb›˜g¯×‘Ùº0†­Ldc"@ ƒ+ù2@ ͘#@ ¬òe"@ ¬n0”µôÊ|ð 08˜HÏÈðéØÑâ|i$±ìjvù[Z…´«íµ ºÐ….t¡ ]mà2H£fÌ323&‰¸;;r$-%åßäMâ½”ôqLLò;Athß~éûìäç÷”$–a$yFfæ°#?|بÌÍÆ ‚Æ"k˦}o ±*úÕ˜‘™9bÔ¨ìÌÌzR¶$-@¤Q3æ,Ë‘‘šªŸ»i‚™w’$gΚõÞÂ…{víÂ1,99Y¥V7¾\Óò7™vÐpµekJ9-@_¼zná!ÐÐØsÈé™™íýütÕ(ï/[Ò£GPhè¢÷ßWªTVôÐææç—””LŸ>ÇãáÑ#,¬OŸ>Ú’p7¿oßÞ="¢wÿþñ ?þòK÷ˆˆˆ>}âtdNÏÌô Бÿ·?þèÝ¿¿—.ÑÏ?Ÿõð! 0yêT𦂂‚‚’ïÞmU¬¶lC†×Üï?xP§Bº…‡÷ìÛ÷Z|<—[qŠƒ IDATIÉŒ—_ <|øïÛ·kêá×ß~ëÙ·¯—.á½{oýùg+ª¦ßÌé6 ÕÓvìÚÕ«_¿À®]—.[¦&Iëʆ.t¡ ]èBºÌ¼`eËš{éGÖ„<¹ù¿?¬ªªºwãêÕ’’’uë×7 ÿú.////¯ùo¿}òäÉ’’ƒ’Ð4——wóúõ©/¼0wÞ¼²ÒқׯOŸ6mõgŸÐBO~?_ߨ£GSïÜñ÷ó[±r%°ìž; ‚H¿w/ý޽Ю]›KAƒåjËvþÌ™å yªBòóoÅÇ¿0y²¦-Yâìä”|ëÖ¿ÿÞ๤¤dùÇ¿ysFjêùÓ§hEÕL÷£µª¥E\\Ü…3g._¸p7%eã¦MV– ]èBºÐ….t™y5À—i64M…†r×/Û¶i&457555Z¹|¹X$‰D æÏ?|äˆùù× A{wïvrv^ùÉ'a={N˜<9++K[îfîoà85fLAAÁ›sçr÷©©©:1õågYvÐÀŽŽŽAÌž5ëVb¢ÎÓæRÐD¹ÕÑ­×_ÇqüÙ1cÒÒÒX–­’ËÏœ=»léR¡Pèääôö[oq‘ù<ÇËÈÌ”WWK$’.VT}ºÿ…†FWo·ÑÖ⃥Kíììœß]¸pÿÁƒÖ• @ „™´'w’Ë‘’”¤ ÈÌ̬KþÄ(**¢(jø“Ý*,ËanþæÑ¾]»/>û JJJV~òÉ;‹Ø»W#'¤L&cY–Ïã ‰XÌÝ×-pÔÄÐN¥ ükçÎ-ß_RR$EéMÓ$IòùüÒ²2§ååå._¾cûö~}û&%'O|á ÓDh.–«%ÛS÷¦svq€‚‚OOOÈËËÓ<ñÌ3#žy†$ÉŸýõí… ¯\ºÔX5ÌÀœZeY67/ÏÇÛrss]ÝÜš@0@ fÒØsýÈ 5¡É²¬X,½êÓO+++Y–-,,¼g~þõR\\¼y˖ǹ¹,ËVVVþ¾}{÷nÝ JbìÞËËK"ÿsì˜J¥Úöûï:©Ôj5MÓjµú—mÛ¸@™LÆ-mlF•«-›ö½é ‹ÅÇýrÝ:¥RYVVö¿ï¿çÂóóóÏž;§R©‚°··ÇpÜŠª±Æû‰ZÕÖbíºu …¢´¬lã·ßŽî9ëʆ@ ÂLl`eêGÖ„h=úbÍP8tĈàÐÐ)/¾˜vÿ¾µwïÞ?iR`×®‡-+/_ÿÕWÆ$1xOÄÊ+>\±bèˆáá:©ÜÜÜÞzóÍñ“& Œ  â]œg½üòˆQ£Bzô¸›’Ò< ©XmÙ 5÷wRRLWÈÚ/¾(**ê1qÊ”è¨(Dz,MÓßlÚÔ£gÏ ÐÐÝ{ö|³~½U3ÕŒu­f%¢ß¾ÃGŽ8dH``à‚ùó­)@ ³1hObÜßìÒ¢"îsA~þÝÄÄ~ƒŒøpêÌ™OV¯¾pæLs b”Ì"£¢¤¥5· @ àê¥KSfÍÒØ“§›:{¶‘Ý?æåè ò0#Ãr-B_†æ’ÄF4™‚醸ûççç½qã˜Ñ£m½•Ƙj`†v¬Ö¿@ Z Úcž•žnYB+¢/CsIb#šLÁŠŠŠ÷/.-+cFzgÁ[ס1ÕÀ íXííó@ ZúsD[¢WDÄųgŸ jÁÝÀßÏ/ãÞ½–,!@ ÿqw^&@ aˆF­ËD @ bØÊÌü¸‰å@ @´% [™†ob9@ ­”=¿ÿ®høTv@ ¢1 Ý?@ 냬L@ „õAçe"@ ¬:É@ a}/@ a}кL@ „õA'!@ ¬òe",áÆõë½úôin)æ‚ÚË|P]!„µ@V&Â"Xu’Öj/óAu…@ V͘#@ ¬M|™ö"‘öÇZ…¢1¹µ^Ú0¬ ü=ß¹Œ¢išfhš¦h¦î†ahšþtÃOÖ-«ò¶HDð0о³R¿µE{µUlQW_ŠÖ@ Ä @ü§°òIFöb±@‘jkjìÅâÚšËrn]2ü'°ö_b’¢Þ_½Y'pÉ›3Ü;õXüÖËë7ÿfÝâ âæáÅ…ÅMP–†·ÅbX5ytmm­J¥æóùB¡€Ïçóùü·E"øÎ*=Y™æcÕºúRüÄÄ@ Äh"+æ@ -kžÊ.‹@¡7€ráœñgë?t-A†–Ãø hš¦(J­V+•J¥R™pã†UrfmPE \ºtéõë×ÏŸµÎƆf÷¡‰IIÀB·î¡IIwlZ–†bñªÉ£ÕjuáØ2¬(ij֤ aÕäÑàm±øÛÆÙ%¶h¯¶Šuëjí“#bàÉ@¤?L!DÃj3æb‰¤¦ºÚ`Úšêj±DbqέK†¡Ëñìq U, Ãb†anÎÎ{Þ?h»ru˜>cŽãaaaE©T*…BQSSSUUѳ'I’I·o7¶Ì*R4 Ÿ~úéèÑ£cccGŽÙ¿’¦¯_¿Þ§OŸsçzÏõÂ÷Ûv[±D±Dâááö 3‹ûèæêîáæÍîêê¦Ñ. s@~~ׯ¬ÎB‰dÕäÑE7bå$ÈÕ°º¿BÓП –»0Õ$HoÄJðùôq ÄâM‘¡•Ϙk^^ó±¼É¬WW_IÖi›˜8[“ûêk£®…@ -«Í˜×ÈåÆR‰¥ÒÆäܺdÀ0ì™s¹{’VU©Ê åEå•t>ÝdS–³_}µW¯^€eYŠ¢ ÇÃ0Œ¦i¹\Þ5$$åN£}uV·2)V¬X}ž%CQôÖo>ÛB3CÓ4cÅBÅRé‘#GBºöK$ú…Àò•Ÿ%¥$c,¬Z½*rä`¸|õ–¼ZY,‘ÔÈåÖ*šc¡Túùôq¯.UÁŠBÆN›Æ=;mÚê;àS0€„Ã˺ÀB‰dScdhµV¦X*­¨¨ Ã0–e9÷Ÿ31¹yóÚÚZ''§.ÁÁ©÷îY\Šg_xÞöÌ"©:_æý´´ ÆÆÆŽ=úûm»¯^ðàAbbbvZ¢ëÐÉQÒµ'ÜM¾]Cb‰7.Ü‹?Š+KX`q‘×ësæ%ÀiyµÂÕÕU"¶·nó½#•~>}\ñõÃÕ$¬(¬sa~6c†&‚Æ©¹Ö›‹`¡TºÑ"s¤µÏ˜ÁãñpgX–aÇ1À0 ð°°påÊ(   ÃÀR•­RWëôLÌ•ì¿V®X³ ‹'~Mîkp5²5DÛ¢Q¾Ìѽ;Ýün¦ÈÍ€ekª‡ôò‹`MéZ‰ Ú`OΆZÕï+Ýg¶w&Íxé%ÎÄtppP(,ËÊd2 ÃH’T*•$IRÅçóq—ÉdüýddXXË6^Æw€£ÇâÈè(¿Ð.£àÙÕ«W¨TЧO†R3¤²W÷ ®¾íݾ¾›`Å:|”óxì¸ÈÏ¿ø*'·äâáž®  „ö«ÈŒ”ì;_¯Ú7þ¥ežnóæ¾^_h‹æSÓ ¦ê‰£ ð¸®e™Öh/É2ƒáÕs«¬’¿A0 Ãq\ ¨Õj Ã4@×®»oßž@’d¯^G.\þo²fª«u² úå«°ˆ‰˜ÐXœO>÷¬õú› –¯ËÓÇ÷ÇE‚ÁN¤ HN~ýJdïN÷ /iSÐ(I[ª :ð„uff³,ƒãþ …B1gÎøá‡„B!ŸÏW*•;wî€Aƒq‘¹ùG‹ËjLÚ)üàhl"°$°$vôŸ“‹|É=M ÕçÎ:u*591Àßϯ½÷ƒ¬ì3§S4mÝZ-.®R’v·Ïþ¾t$F`2LhÏ·òx"ŒµÖß±›î÷‡¾›úÖú*¹Òºå¾ëàðùôqYq‡€ª/ã HÀž¯¶‡wd²o*+-(Ô**Hg9À@Ï1 €ä™Áp«À²,Ã0jµša–eŸ8ëÑÈb•SWë¾6¸êlÊÏb F^YÙª×Î"„>ÚýãÕ¡#ˆìA¥€ê2¦¢P«Nöœ±È#úø»f©ç¬eË  !"€ ëpîÁW~xþW=yÊ”°°0®\MésçÎ]·n]UUÕwß}§_$uðõÍÎʲ ,‹Ïœ:1ŽžH– °›ÒPîÑ €„߄ܽ`ذÿ+/b(5K“,¥fh2ûQ.EYÇÊìÖÝÛÓ>û|MÜþ/Æ…V˜… ø¸]ì 9N(£‡öaÅ^}Ç—ÛÿÃâïüyôèa_Pv;±Ñ§ž ¦(¦žhµ$|UÀN ÃXd5æ H™£ãSŸ ê éV‡ª7*,+Å4Ré:¹|‰f]&M3 ÃpÕѹóŸwï¾@’$˲—/0àÄ©SƒtÞ‚јºÚàø “[”ÉÁ-ͬ{1€~q @´EŒÌ˜›ŽaÀ'€¢¡º¢âAÚ¦ÃÉñJ5ã$I1$ÍP KR I³Í4Û³K»ôÂ7TVU4öRKcÄGCÇyÂÁ_ rUÍÛ'Þ!àëGý¯.Ίáaú®ºþÁÊ>_Z¥PžìŠ T*•L&ûá‡æÎ K–,ÑÄ‰ŠŠâóù555ìl!‰1¦N 8z2@Íù/°›’Àˆê`ÕÀ’oÍYµå·½ B!YºxÃ+¯Í™õbZÒœ‚R–¡_œ2‘Û„ÞH;íߨ_ÿi)ùÅÁ®ögå,ã.•|³'ùÛé,­ü¤D±`ñ<ªº6 sx\\]þܱÇ××?ùÎ=™££µúŒš0×ù]µÖÆs×úlRkóé§Ÿ¾¿x±æãW™ë›X Åõ–;®Ÿ¦†©ë ð,£éÏ͵ŸÞsÕªºÿ>[‹‡@ Må¾L{;€JÁÊKNÜz”Lû¹™¬T*†á •J¥V×ý«TªÔÜ•Š$)–e׬YÓø?-AŽS«ÏZ3Â?Ä·I«b†¬q±sýàÌü{Á1rù°Î}ý»´ š:gUÜ÷þÂ*åj£9´ˆÛî# ×­[§mbNž<™Çã‘$É<ÁbCÓâ„êÊ«,M ÂÃnŠ|#ª3Ԝũ9/³{I^7šä™½zte)5K“YYY¤5|™$I&%Þttp.*|¤fnŽT>¼”ÅÃì\xmBŸBF ‰³o{1¥®ÍÉ+&IêÆõË`=Ÿ“A_¦ö Ž+Z¶5Í€eXÜ^Ë—/×þøÕ+ëM  ãø¬,/· P} ÞtrÚXT4€eîw¡(š¦V¦¤L!I’aX®KŸ=;døð Gö2-§ ,««¯651 &f÷ìik’31‡ È—‰@ Ú"–û2¥"`hPÉk*Ê~?Ÿùñ÷û hš¦iZ©¬U*• …B¥Rq‡×Ö¡T(ªŠÚÌÌÌÜÜÜÆKoŽ fçäät阓“ó÷ß{KKKŸ{n¬}\\\vvvãeÐpâÃÓ#—£ûÐÎÎ8†q&&÷(råˆðÈ.®¾ò_>³Yû©µP«ÕšC‹H’äóùUUOmÈP*•œMkM:ZW†za(5ÃPÕE—F³í¥n'çª<¼äÝõ¯½1wöŒ´¤9%é™Ù#öÌzôxÊØ‘mo(äwΟ¿p@¿ðW^sHw_¦‚/¶2„óžÍï¿0¡ì9±•ªex.Lv ¿žóIÌŠËWoyz8[Ël=+ó³3>úóOÍSî£ÆÄìOïÉêfÌ[2ÚŽO µ1xzz¬tww×{²²k×ýÀèèqÖ*Ú¾vÚS7ïýä? 11+W>5?þï-@ Ú$ñeòbèÊüÛ•2ÿÞ]»†TT”ÛÙÙa˜ÇqÀqŒ;âêN¡išV©xjµ*55õÞÝ»ÖðeÖ#C~~^ll¬¿¿ÿßÿ}ëVâùóçgÏž½{÷ßÞÞ^ƒIOϰ®ÿàä§g#W ‰D_È?^Ñës.ó羶󦦤K}òº¬½\·8ë“øe+z}nÅÒ•JeMM whgÜë¬Åxzytˆ=ìßq^¯QëKÏ.J’´Ûsp +àÓj†ÇǪròU²0G÷ŽÛ–}xãfREY™ÅZDgÆ\ÛÄÔÿ̓Ȼè,HŽÎÎO}6².“ã£>j|‰úde=ðóûíáÃ,x²ˆû¦¼+1ñUwˆyùСÏ=7¾‰û67ë]÷¯Q¯æ“Èz&¦ƒ“×Ç¢Í`áIFѺ îµåå%å_Nï;ô¥œœl©TÊ­ÍÇqÀ0Ç ‚ ÇqÇ 'g¦ªJ~ýz|ãÏì0G†üü‚ŒŒŒuëÖåææþüóÏ×®]‹ŠŠêׯ_tt´··wll¬Õ9ùÉ™÷Ï-\Ñs&çCsp7¶=Ïݬ蹦.¶UKW*•UUUܹ˜$Ir;Ê`òäÉJ¥òÈ‘#È­( (Ša,=çÜÒÓ^hJÍ™˜ C14å“´¥ ãäÃûT$IRtÚík,¥bHCªJÅ*–T3”’!U,MQ”5O¶/È+ptqéÞ£MØõ¾¾6é§ê¢{Bª–Šq>Q3˜s_;Ó¾ÝÛvî9RQZjõ®bl÷ŽSúÄ<1C3PçË´@KÛë³5k ¬Ë4”•ã/.ðªMÜ­$I¦§ÏðõÝ–ž>ƒ³2†éÚu7À*šK?ahšfŽé9vl‚19ëÇÒºâLF][3&fUŒnLóܹsè$#Ñ&±Ð—y$.õÃW"¬½“¯,ú¾?ejee%÷K34Ms¿½ÁÙ:\‡J¥®©©9yòdyIIãýæÈÖ¥K—wß}wæÌ™‘‘‘555¾¾¾Ý»w'bÞ¼y ¶X µvèFÓÙÚhÖå‹ûäãã£T*)ªn>:**ŠkŒÞ½{ÇÇÇW?Üoå=zd¡cÌr_¦Še(Ω17U$©V“M/û¿eÍ­º£©:C=ÙíA7Â󪓫kaþ£”{©çÏ“W êÓc¾ƒŒ/€rŒQ0vÞ¸Èå~jÖµ¸]ƒ†Žâ–”—”X«èu%%K\]?Ÿ>îèáô޺L}/&P,0—ª`EïŽÅíõáÿýŸöǯ^_œA©O”ÿd…÷Ú $Ir³"Ü^ríÅÅ9æ)mC“{ÔÄ}†:tèPÍGƒ~M}“³F­2*"D‹Âòßþ©+j*ªvÇe† ™‘——'‰4ó°ÜÜ•Z­V«Õ*•šûÅ7Š"U*UffFii©µ†ÒzexøðaBBÂðáÃY–-((ؼysHHÈ·ß~›ŸŸ?f̘}ûö5å NªHîÆv…’$)—Ëkkkù|>w.&ŸÏ'IR¥R‘$Èù/¹¡iº1’X––[—ù¯‰IS C©Õ¤JMNzj•T­R]«TÕ*UWn”ü¹/Õ*…êãÓÎçôÉ£*µÚA&É~üøÄ©U={õêÑÇÍÝà²ü^òíÄK/u êòìØi4Kܺ}Ë«WÞã|+•_‡ÚŒ…¦ý â;Fãò´¸¬Öëâ —ýTbÓŽaØíÛºvݘ8že™ððCññÏö31µ¾ÌÒ CïÞódºœe(•šT“¤š¤8Gfü­r.²M…Ñoú²Šš+WÎ8¿¼²VxøP¬ídà Í&aL‚Ðy: c”@kmÙQ[>O¬L€ó燳,KQ$·4“$Ÿ¬à}2qÞ,rÝ©^[óüùóð´‰Ù,Ò"DÓ`¹/SâèÜ-))™en/9þäÌä:×I’,ËÈåÕ™™ÖýÖnŽ íÛw˜;w®L&ËÏÏ;v¬B¡HOOçñxfjj1?þÃ`x¸.R’“ sPç˜ÑÃþèáCk `Y&ì¸ /½_¯žËy4Õ$©VS*5y6.O§é<99¹?lùÞ@~n^S–ûea!|`Èâ!JZU=˜°5µMÌf•@ šË­Ì´ÛNhZK†ÞýúÅÆÆ&$$ìÛ·¯¨¨èâÅ‹GŽùý÷ßçÌ™£óÓ8ˆ&FÛÖl^ûRCAÓÚ—Ú ƒ²aØÖD&&ø/a¹•ÙZˆ¿zUs?hÈââb4Ä·(Zˆ}‰@Ø[™˜â?EÛ·2µ¹tþ|s‹€@ þshlMdb"ˆÿxýQ=º‡…5·ˆ€ÚË|lWWÈÄD ÿ5•‰@ °>ÈÊD @Xde"@ ¬²2@ ÖY™@ 냬L@ „õAV&@ Âú +@ a} ÿöOê;M,@ ¢-aØÊ mb9@ ­”ÜGôÑŒ9@ Âú +@ a} Ϙ#œ»“¹5öZzn1I3Í-‹Õàx Û£û õonYD Y™ÑDÜÌ|üÍ ó&Œôóíx~êáÃìoöŸ’Ù #üÛ5·4¢¥Ð††9㤧§}æ™32ÚûúâÁ0mg¹žù°,Kðx2'§êª*‚Çk{•À)H`ÏonYlÎçÖ&›O›6ßWõáTnïëû0#£GïÞÍ-¢5Ñjö˜c6uÊ”~üQ'¼¬¼üÕ×_÷  Z¾bEQ\xiié´3:øùõ8ðR\œ&¾B¡xoñâÀ  ÿÀÀwÞ{O¥Rqá?ÿòK÷ððö¾¾¡=z|¿ukÓ(ÕŠX¹jÕŠåË'Œ/àóqï߯߷7‚‘úOOO÷ðöÞöÛoA!!añññ?üøcPHH·°°øøxM„?ÿú«GD„¯¿ÿ¢%KÔ$Éd:Ã.]»v¿víÙ`kŒ<~Ò$š¦;øùuðóKNNnÍ-¯ªÂqœe˜ÿò%•ÉTJe³‹a»ËŽÀ ÚðeG`Í^ÉMsµù¾ªá!¯ªjî‘ÑÊh5V&¼9gÎö?ÿ¬©©Ñ\°p!ã)ÉÉ—/]ºzýú×ß|Ã…/|÷]™ìþ½{GÚó÷ßšøK–.•Ëå7oÜHºu«¸¸ø‹µk ¤¤dÙ‡þ¼u룇/_¼8dðà¦Ô«åSYY™””­ÿÈXýÓ4››{7)iú‹/¾úÆe¥¥w“’^š1#æ“O4.^ºt5..áúõ;wî|ýõ×õf˜———’œ—ž‘Q]]-“ɺ7‹‚-–òòr Ã\œuÂÕ?Çü·Þ"":::??ÿíùó¹û”{÷4–ô‘½½½‹‹Ëû‹ÿ½o_½¾5oAãÆŽ½—š Æ[Ó`dmZls7»¯¢%\m»ŽÖ†/ñòÇ·í¾jLe¢A´šu™oÏŸ?uÚ´aC‡rKJJ ÷±}ûöEEEšpŸ'áíÚ·çnŠŠŠ(Š8d÷‘eY‚ ÀÁÁá·_ÝòíX²rÅŠÞ½z5V-GGG–eËÊËŸ^÷m¬þ€ GGGðù@*•r÷š% †µÓj í†3¡Z­ã­i0²6-¶¹‘Ÿ€£ ׃‡mt뇇·áæÓç?¥,a­ÌÊìصk×}û÷s]]]àqn.g—<~ôÈÝÝ]ž››Ëš¹sñ]\\‚¸}ó&gôh©&É­[·Î™;÷VBBSéÔ pttìÞ½ûÑ£G_š9S;ÜXý›˲š„¹s›º”¡‰ÖÔÞúÛÞ2›û¿°ÀÚp= ¼­n0çxn>}þSÊ"КfÌ9¾ýö¯Û¶q÷R©4räÈOW¯®­­---ýjýú&MÒ„¯^³F©T–––~³i“&þøçŸ_ññÇ•••PXXxáâEÈÏÏ?}æŒZ­æóx"‘Ç[_µØšU+W~ºzõƒÕ$É0L||ü‚wÞ1Vÿf²æóÏkkkKËÊÖmØ0yâD0Þ 1ÖšqttäkB nîfŸk WÛ®Ηن/!͘·å«¹ÇHD룥ü}5Ÿ~ýúuÐ|üvãF•JÚoÀ€ž={¾÷î»\ø¦o¾)++ë4öùçµÜùfá]ß:vêôÜ„ ©©©@3̺õ냃;øùýµsç–Í››X©–ÏàAƒ~ß¶í÷?þèìðÑŠÏ Æë¿^‚8`@¿{öî´hÑ".¼AlMƒ¸ºº¾þÚk‡ éÔ¹óí¤¤–ÙܬmÈÎÉi£Ì­Žíê¡% $0›n¾™11:¢KGŠTiÞ¼~uÖ”ñáºwòž8æ™#û÷Øp÷5o 7eooQ}µioî1ÑúÀ€eÙÒ'«ß òóï&&ŽˆŠjV©mœ–FzÓsñÔ©v;š9ñöí-?þ˜zÿ>ã=#"Ì›×áÉâã–ÃÃìì©/½tíÂ…¥zœm~=˜/É 3fØÛÙa8.‘H"zôxuÖ,?__M„Ĥ¤ý5åÞ=š¢üüü^œ2eLd¤ueàØ~úú¢y¯Ú"gxü(ç™}¼}|ÞÿpEôsã¹ÀË/Ì{}Ö§_¬‹ŠGðx7®]ݽcûºMÿ³‘ ¶ü2sDÓq†Œ ,€R©´·³ã/œ:e#‘Ì¡éûª¦Orýüü~Ó;§¯ò8;{ðÈ‘Í-¢…rúر)³fiìÉÓÇŽM=»•­ËD Ú0fº nÝú`ùòÿ[²dØ!$Eí;pàõyó~ûé'O[Khø?lá2ÁqüüÉ“PUUuèŸ^;÷§-[:ùùÀ›7—­X±tÑ¢¯×®%püvròá£GGÛæO)w’‘Ø·{çà¡ÃÂ{öÚ»kǸçë¬Ì5«V,[¾rüĺ•'ý è7`€­$0o÷×Ù993fÏæîáI£Ó4­ÙÃ×ô4q_ÕôÉÆgÕÐzkÞzFü§h}3æD[…1M›7Ï}íµáC‡b&àó§½ðÂÐÁƒÞ¶a˜¬‡û ÊEËzøpà3Ïè*ŠÏ¾ü22:zDTÔ§Ÿ®T*¹ðÝ{÷Ž8qHdä³&üµkXUUµâ“OFDE=3f̪5kLäÀ±÷ÀQãÆ8ñÖíÛ ÃÌ[¸a˜¡‘‘C##SÓÒÌÔÎüzhšl%Éô)SÆEGÿüÛo\ÈÆÍ›ßš3gäðáŽ@nÝ–/[f †8Ža6ºþÞµcÜø ÏŸpþìéÒ’bꫪ’“nG}Îv…ê\Üî3a˜'çàáÃÏMžüÎ’% Ãü½ÿs“'‰Œ|eîÜœG#Œ1Ôoëíí-§¯L^^Q±lÅŠácÆDFGoØ´‰$IÆä{­©73×®gËdF ²2Í@çÎÑt¹>欋ªªªº—–öÌСÚ#‡OHÐ,œÒ^D¥sóåúõÕ55ûvî<¸gOyyùÖ_~aY¶¬¼|ýÆ«cbÎ?¾ó·ßzEDp‘Wù¥J¥Ú¿k×ñC‡&Œg"–e†),*:ºoß³cÆ|·e ˲ß}ý5ŽãgŽ?süxç€ó~™³Aèd;xàÀ¤äd–eåryÚýûöE¡úØn÷Oµ«ùùyQQÏvìÒåàÞ=•åe†¹¹º4éî³Ñ4 Ã0©÷ïïÞ¾ý«5kX–mçã³íÇO9Ò¡]» ›6iâèt0cýÖto7˜U³ôUƒÉ?ýüsÇìÛ·ã÷ßo'%ýúÇú‘Õ›9ŠkÇ·Lf¢A +h)˜³Ç³¢¢Ã0™L;ÐÑÁ¡¼¢B߫枻©U(Nœ>½pÞ<{;;;¡ðå3NŸ=Ë2 Çy‘]S]-²·ïäëË2Luuõ…‹Λ'²·Ç1¬kP‰¸"^œ<6xpfV–Å›p-HbA¶2‰¤J.×Ô§L*mš-ºÜIF¶¸vïükøðgd8ÏŸ¸{ç_8ÎÎN,ËV–—ÙtËÑÓ»°Ç\»¾öòË<‚àóx,Ãô —I$ŽO?þnJбf°ßÖÛÛ[N_e&2:š»öìÛÇ2LuuuÜ•+óçÌòùŽ2Ù«/¿|üÄ ý²ŒÕ›9ŠkÇ·àjâ!Ñ@ë2ˆ–c†«@*•²,[V^Î;ÏQZ^.•H¸_Óä£ùWsS\ZJÓôŒW^áR±,‹ò"±ø³U«vïÝûÍwßøûÏ›3'´kײ²2ÀÝÝ][*c90,‹ã¸X"aX–Ïç“$©#ŒÕëÁ‚ µ³-¯¨àjL"‘°,[QY)“ɬ[¨A„<Œ°ÁºL¥²öà}4M‡uµJUYYyïîÐÐÐî=züsäð˳fY¿TCy˜™Í§Ý?q—98h>zôÏ]»ÊÊË€¢(cÌ`¿­···¾Ê‰qüÐ!í²²2pssã²õðð(-+3ñ^k×›™Šk×3Ñ +h)˜ã*ˆÅ]þŸ½ûk"ù>)@Bo¡J¤‰ ЇŠÅ Xî°‹Ä‚çù³XQAÑSOìDA¬§wžâ݉ŠÒ<+=$€ô;ì‘7BB „@˜ÏÃã³™ÌÌÎî&ë7»³3ff¿?~<ÝË‹Ÿøè?;8 <‘@àñxM‘H¬¬¨ø¯NìV§¬¤„Çã¯_ºD¡PZ¬ÔÕÙÙÕÙ™Ë寯Ço ‹½pA™NÇPRR¢%00¾ÈšWøÿeÁÄîÞ¬±eKžýý÷ kk”Ç£**š›™=~òdʤIݼRa$4*ûÝÛ· Â_ÿ#/'‡¥,X°àڕ˶áá?ÿ¶pÁ|:]ÉÓÓ“H$¾|ùâ왳GŽJêsìZf‡²Šøœ|ýúu_ddäÞ½ö¶¶oóòV‹ü€ ûܶÿiï%ŸUakT¦ÓÀ—®¤¤DME¥Ýïu‹ ;´áÔSàsê-°ë íþ-_ºô×Ó§ò¤‰Ë­oh¸zýú£ÇçÍžÍCQuuu ™üøéÓFçzb"øöZ&‰L=rä¡_~ùZ]]óx‘šÊCÑ2&óŸ””F‡Ç+H8Ë<ÂÍ-úøñšÚÚ&.7+'§¯¯ð—©T*Ç+e2;¸]­ëéÆ?~µUÕÕW¯_¿uçÎ÷sæ`)+–.=óèñcNSÂã¥geíÜ·OmàI¬_æåË—¾ÿþ{C}=m-ìÏßYlì5áŽrÿîÒ¥KçΞ15` ¯÷ã¦McÆxH´_¦Eð 765ñx<*•ÊijнyShlYèç¶ÝO{ïù¬¶.N"“]]\ŽÅÄÔ74°++OŸ??ÆÃƒ×Þ÷ºE…Üp±Û A¯eBPoÑÁË ¶¶a[·ž:wnODDCCƒ²²rÔÞ½zºº(GÀã–/ßèб“'}fÌxúì™`G.Àú5kŽ<ùý¢E ꪪӼ¼íì.÷Ì… [ÃÂx<ž¡¡áæõëù™FGÏš;‡Ç6ÌÒÜ\T ‚«àÿKWRšîå5É€ÃEíÝkjbÒ½û¡ã°>pã½¼ð8…B±4(úÀcCClE¶¶aÿûßÙ‹÷<ÈCQ#ï3$tÉGž€ÇãºÿbfBó¤»|³f̘Õ<…Û°aIwf%J¾Ã×2[ô/ä—RUVžëã³rÍ•i“'ÿñçŸ-òðÿú¹m÷ÓÞK>«-¶šoCpðC‡¦ùø‰Ä1£GïëÛ‘ïu‹ ÛÝpê1pTvêž>|¨¢¦ÖÙR>~ \·nÍÊ•cF–D«z^‹%Æ~è+Š ½¼½¥Ý JŒÕe0¤ÝŠ"ÛŸU¡*X,8*;$Š8£²ßŽ—|Ãú#´ÃsgOž6­u"<.½P©xŒŒö†…¥¦¥555É5÷Ƀ ‚ Þ ý;æ~Ë—÷@;ú•sÇŽføúò„Çã!Âãñxòß‚àðx@ îß¹#ªx\z•n9¦â±²´´²´ìÞ:!‚ ¨ëàÓ?AAP÷ƒQ&AAÔý`”Ù[Àù»d<¦AP£Ì^EÑÜüüwŸ>I»!P·Ç‚ êç`”)}(оÿøQDRPP(a2áÕ/)AÁQÙ¥ïýÇ(ŠÚ;8T”•}*,,¯ªÒTU•v£ .ã˜r¤¨°°gš×ËÕÃýЗõ«q?ü¬>HJ’v éÃãñJtº‰……šºzÛ9;e/Y²äùóç555 ]h!ôŸ÷?655 vrúÊfãp8=Ï……¬ÊJÍÎö›œœ¼}ûö/^p¹Ü5 ¯ž'Þ1mjj’íñº¡þ~†!¨?àñxåLfú«W¶ŽŽJtz9;eâñx//¯E‹Í›7¯k-„A<ïääT]U…ÝTÅáp míªš²¢"§3qáï¿ÿîíí}äȑ۷o‰ÄäääÓ§O{xxÀãÕúxLêë{¤™A$>%%%‡!C²32†¸º¶‘­sQ¦–––¿¿nnn×Úý‡@ ÖVW öÛÃãpê**õõ¸ÎÌw¼~ýú]»vÍž={ùÝwß}÷Ýwx¼zX7S‚ êµTÔÔª**ÚΟþ‘2¡ƒÝðx<×ñJ*++SSSg̘ѭMƒÄÔ-Ç‚ ‚z3<ßîÿk0Ê”, ‡Ã©·× ‚ ‚ ¨ÇÀgÌ¥ŒU^ž›]YQ O Ðét£Ô:óôªª*Š¢,«S¥ é–c AA}Œ2¥EÑÔ—/ ¿|QÓÐöÝwê(WÎdæ½}›–šª­«k3hP«RQQqttŒ_ºt©DÛ µ­)AõuŽ28¶ ‘HÝߨþ!ãÍ›ÒââñžžJÊÊ(ÇãñPOS[[CS³¶¶öñ£Gyyjgß¾}>>>t:}Ú´iD"ñŸþùõ×_OŸ> WOêÞc AA}Z§ûe’Éd;;»ÆÆF2™L&“%Ѧ~¢ðË—±“&)«¨´~‹F£yŒ_R\ÜñÚF}ãÆ'NhhhÐéôàààñãÇx¼zV÷S‚ HfØ:8dddH»=­ÓQ&ú-I´©ŸÐÐÖ¦++‹z—F£ihiuªÂ#F<|ø°ªªªººúùóçØ¨Fðxõ¤n?¦Äår]Ý܆ *˜XSS¶s§“‹‹±±•Íšà`&“Ù¢àù‹G¸»ë™˜Lš<¹ÁÔ»UVVªkiëZXYE:$­– ²·—˜©#§Ê®«¬¬,++³°°»¸ØÇ]ºG >c.5&¦¦íd07ï™–@ÝEZÇôÌÙ³DáÓ§OuuuXJUUÕd/¯>\»|ùó‡< …EE‚¥bN:rôhôáß?|Hýz¾ŸŸ²è‚ Þ 3+KMMíó‡Ÿ>E<þéóçvKaO"v#›Íd2;3u{ºKGN•Ý"'7×dÀyyyñŠ‹}Ü;{¤ºŒ2¥CDÒÖÕm;¦––ìFÙwHë˜~ýúu_DĈ…œæ~Ÿ?ýïêêê'Oœ0`@WW÷@D„½`ÁKW®,Z°ÀÎÖ‡Ã)))ùúø`}* Œ gΞU×Ò*++D9²&8+xìĉÁC†èN1{WhbÜõë^Ó§oÜ´ÉÌÂÂÒÚúî½{Ý»áÔedf:88`ËÎÎ΀úúúòòòÙsçZXY1 |fÏ®¨¬\¸ti¦·÷šà`3 ‹_Ž•ÇÛ×w݆ fή®oóòŽÿú«ÃàÁÌÌù+mñíþðჭ½=Ç3µ°0³°àr¹­ó´nÀ¿ÿþ;ÓÛÛÈÄÄÈÄd–OÏï:¡D*Q=mïè¨od4ï‡*;¼»D÷²²²ZYaË­÷Õ¶;~˜?{wëöíÓgÍâ45 ¶S¼ã¾~ãÆGªçŒ2¥†@lçÑ+Ð3-º‹TŽiÄC† 155ÍÎÎ^‹ÝºeKÛS ©(+Ÿ¿p!!1‘Åf ¦+++×ÖÖ¢(sê”±±qUUŠ¢gÎ[ºd à`TTl\ÜÍ7Þ¿{glh¸#,LTbvNNzzú˜Ñ£ßæä¬^µj݆ ݾíÔßddd vpTUU…ïÜiannnfVSS³: ;333=ýëׯ§Ïœdee½|õjª—WþÛ·Ë–-•çÍ›7³fÌx›“3ÐÊÊwöl"ðêÅ‹6ŒŠÂÖØúÛmll¼cÛ6¯)S>øÿö-‘HzhÑ€e+VLš8ñß¼¼¼ÜÜM¡¡ÒÚ‚Ú8U†íÜùðÑ£ûwï¾{û‡ÃíÚ³tlw‰:ïeçä ´¶"Ζ«W'?{–‘‘qæìÙßÿýì©Sòrr‚íï¸ïÞµ«Å‘êù££LêÃ>}út2&&tãF€¹™YVv6àÏ'O´µµµ7jRô¡CÇÿß¶m–úÌžÍïŠDWRª­­ýãñcccc+K˪¯_ýþ»ŽŽŽµuyyùƒOüò‹¾žž¼œÜ¼yóÒÒÒ„&²srV®;v,Ÿíë[ZZÊ¿¡Ax2339bbn>lĈºººØ«Wñx¼‘‘ÑðaÂвòHwwì‹–™•°råèQ£òrr¢ò­Y3tèP<oiaa5pàâE‹ðx¼•¥%ÂåD}»3³²lll°&µ‘G°………‚ <ž¼œÜ`GG)í¿oˆ:U–””œŒ‰‰9qBKKKAAaª—Wzz:èÀî¢Ï{ÙÙÙ­¬Dí+U•þþ«V¯ŽŒŠºré’’’R‹&‰}Ü ç/‚z»ººº’ÂB‡PTM[[__ŸÿÖŽðð±cÆ :`mmýðÑ#™Ìf³õõõIí )`dlyð`äÁƒiii³çÌ9zìØ®;*ªªMMM¿ž<¹68øü… uõõgÏ X¹’D&ÿýü9‡Ã;aVŠ¢¶¶¶BIdrnnî®ðp¬ ŠŠŠªßŽKÿæÅ‹îÛIÔàpD"QEMMUM­[ ¢¾òyùùY C0ÿ¥Ë—?þîßQ­¯¯?|è‰LÎÎÎ>Å?ˆÊsäða,OÞ»wž“&aËï?|°´²õ•Ç N›6 ËÜFÁœ=}zoDľýû'Mœ¸{×.±8Ä?tmŠ:Uþýü¹£££¾ö²±±QCC£#» ô¼‡¢hNn®ƒ££¨}ptqŠ:UVVV*R(ü—I·oOœ8±#»KÔyïã§OÁ@_?))©õ¾deeÏ›;÷Üùó>ÞÞ-Þû¸·8R “G¡#»·]0Ê„ ^­¸ @]KËÐØ˜ÛÔÄ?9P Ý´iÉâÅü¾5_¾|9zô—‚¯)Sþ·uëÎ]»‚‚‚(dò»w8ºq£à—Q‡¹¹¹9ØÛ755]ÿãñãÛ·nao)++G9²õÿ())ýå—•+V`=JÙØìÝ·/--ÍÎή®¾þÙ³gc<<„&fee„«×®=}úôÈÑ£w’’Zlšàæ@P?A¥Ñ˜š~úø‘F£ &CÔW––Æ‚„/''GGGÇÒÒòëׯCC™L¦¥¥åoZ[[c?;;’§ººúó—/ÖÍ·V322°–B¿Ýõ õõõü^æBóddd6 éöm#CÚšš¯ÕÕ-yîÊ© +ûSÔ©ÒÑÁ!,<üÇzzzQ‡}þòå‡~øã?ÚÝ]¢Î{™™™µ¯Š‹‹½}|¢"#GemcóôéÓß|b÷GJŒ£Ðîîmì— A½ZCCƒƒÁmjâñx‚éW¯]+++  Ój6xð`*•š™™©¢¢r'))%%ÅÄÔTK[ÛÛ×W^^¾Å,êeee ,ÐÒÑ102ºpñâëלœ°·”••¹\.ö{šF£UUU-\°{kĈ«fz{khiÙÙÛ'$$àp8¡‰YYY¾>>)))Ú::!ë×ŸŽ‰±´´ì‰ýA½YQ‘ÓÐÀiîÉׂ¨¯< =# VÍöõmâpô ¦Ï˜1`ÀKKKyyùÌÌL[[ÛŽçÉÌÌ0`…Lß^úíV¤P–,^lkooni)*O‹üù矣FÖÐÒšº{×wÁx-‚ î—™•%Åq€!¨÷q H¸^°?eù¼'îî…Q&AÝ/;;ÛN^APÏ{­Á§ ê~EÒnAP‚ç½ÖàµL‚ ‚ ¨ûu:Ê ±´´¤P(êêê .¬¨¨D³ NÉÍÍ% ÌmøôéÓ‘#G*))©¨¨LŸ>=//¯ãe[¿‹Ãá¨nÞ¼Y\\ìéé©®®.Þ¸AõŽ2i4Úµk×jkkóòòüüü$Ñ,Hl?ž6mÚªU«Ølvaaáˆ#ÜÜÜ>þ,v…¡FÀ´iÓðx¼——×ñãÇ»±ÙAɘNG™Û¶m³µµÅápªªª6lxòä‰$š‰mýúõ?ÿü³··7‘H¤P(k×®>}zXXøö²enn.v%rôèÑ‚`×)_¿~Ý‘Uhiiùûû[[[Kn+ ‚ êëºôôσº«)P×UTT¼|ùòÎ;‚‰¾¾¾‹/Uä÷ß·±±©©©‘|ë ‚ êGÄ2ïÞ½»gÏžÇw_c ®b±X8®Å|£šššåååb׉ ˆ²²2ÿå‹/ÌÌÌÄo"AAýƒ˜QæÍ›7—.]š 8—$ujjj(Š2™LÁ@³¬¬L]]]ì: Beeew´‚ ‚úŒZOQÅÓ%âD™çÎ ¾uëÖ°aú½APW¨¨¨ <866våÊ•üÄ«W¯zxxäååáp8òòòL&{× æK€ºw†Y‚$‡ zø QQ7zšW£§*g¬® í†ômþ>|xëÖ­÷îÝsvv–Dƒ .Ú»wï¬Y³455§M›ÖÔÔtìØ±øøø/^ôõõi4Z||üôéÓ9‚åWQQA¤  @OO¯ãkihhàp8ØiõCMMMÒnBï%'''í&Èšûÿ¶3n`æ—u%â|G¶³A|7¯\õVN%å5›zíÇÑ=ÙÌ»wï¾9RŒÞóòò\‡g5_Bê%:e‰ÄÑ£ÿÛõ$©+}þ n7zôè7nlÙ²eÑ¢Ex<ÞÝÝýéÓ§FFF99¹ÈÈÈ+V„††ß¼y ©©`mmÃá?~looߢBì tþ˽{÷®\¹’L&c/±E{fë ¨wÁáª**ÞfeU²Ù<OÚ­éfx<^YUÕÂÚš®¢PðÇÇ\Îñx|ø°¨š…qø1€ @]MMú«WfÖÖV²×ù„ÇãU²X©ÏŸ»¸¹Q\.×gÞüõ‹ÎC‡òÓs²³m ŒÚ(+3px¼ƒáâæ–š’¢¡©©(p¨‰ŠŠ6<Í›7oûöí›ü‘ÿ½|劯O!f–ð™HÀ­ôйzª­lóæÎ½pñâÎðpÀùóççÍ»k÷nì­“'Oî?p€ÅbY[[Çœ<9`À“É\æïÿ×_é2«V®ÜÊb2±P~DDXx¸‚‚™S§\]]ùñý¤É“ÑÒÖDGG/Yº ú——û/_žœœ¬Ë`¬Z±‚ß¼ÚººÐÐЄÄDA¦zyØ¿_ZÛ`7aè?Ÿ?¦¶œAPØåå ŠÌ†˜Ôµ´ØÝ¢Ð6©ª©Uý*XükU•Ž®nÛ¥dŒªšZMu5Ög½ð£"Q&{z²Øì¿þú {YYYyïÞ½¹sæ°Ùìïýüt #£¡¡-úBðC-mí´´´“'OZ ¨©¥5jôè÷ïßcy˜Læô3´´µ>£Ö<¶Im]ÝêÀ@##†¾þÊU«zlWˆÃýïÐû²†ˆ»{|‰„v¾ÑsçνËår 3³²&N˜ÀËÄÄäYrraA©©éú °Ä+Wª©©}üðááƒ×bcù™)**ú7?Þܹ?mÙ"¸Š;II¡´¤¤´¤ÄNÄx>+W­¢Óé?|øíþý+W¯òÓƒ‚‚ª¾~ÍÎÌÌËÍe2™á;wvft'eBÿ100¨iÅ@27} H6ðx<'Ã!&ÇÓåEù¹99¹99‚)x®EÿTEåˆDÁ<2ÿ‡í‰öÓíTTD&“gΘqéòeìåõøxssóAƒ-_±‚@ üûîÝ«/þþûï}‚¥¾ qìì:9õž§#SY[RK«šÛn|r0¤N¶Wm·”¾¾¹¹ùo^º|y挂½AF¥ªª*''çïïÿâåK@uuõý¶oÛF&“ÕÔÔÖ…„V¸z5@˜êå••Ý©–WWWß½woÇöíd2Y]]}ݺuXzm]]l\Üî;©Tª¢¢âúuëâãã;Us7‚Q&AÔQü+v&Nœ0qbAAà•¼6Šô@’ÝÄˆŠæÍ{ãæMìšâåË—çÍ‹(a?ÿL!“5446mÚtYô× 3‘S¯ qÚUÇA×\xŸ]X7voÆ?ïª/ýÍüijG¯­|?oÞ…‹Ï_¸ðý·•OŸ9cko¯­«;yÊ”ºº:6t ƒÁÀ2è5/6ï ™Lîì°Xµüña ôõ±…²ÒR.—ëä쬫§§«§7uúôªoï0ô$Ø-‚ ¨Û)± E?þøcëD,„b–—Ïòö¾rå `–·wBB‚†è©P™{XÇM^^¾çWEEËÆîÍ8±ÐìÒßÌ›AÛ-åêꪦ¦–””4xðà—¯^]ºx Pô›CƒÒÒÒ6j8}æÌÁÈȲ²2vo]TäÄq°—(Šñ6¶Päq϶ØyGçü•ÿuäÎtx Tn¿€©S§†¬[ghhhgg———‡%²Ùì àà¤ÄD77·ÔׯÇÀæI)**ÒÕÕv¤~Á›$rÃ]óöÁªåDø¥yð#uuuð6'‡F£up[$^Ë„ ‚: »Vççç6ÄÉiˆ“SxX˜ŸŸŸàe¼Öedéár=<<<<<.Wd6‰Á¢¢afJ_j;Í›;÷ÒåËW®^ãá¡©©‰(ü¸äó—/ZZZ‚ùC,r:røpqaáí¤$ì(ó#',?râ‡8EEÅ……½»¿®Šüï›-¥ÝÈåÙPÉÖ^‘B¹sûöù³g9‚ ***çØ±cX"F7vìö;Ølöƒ;R¿²²2‚ ………=ƒJ¥&&&666ÿõW~µÆß¶}{}}}yyyÄþýüô™3f„nÚTUU())‘âdà0Ê„ YðúÍ› “&i3 ƒa#Fܹ{—Ÿ¯ªÑ‰!šEåÏËϧ«ªêèéa£<<º­ÝPŸƒ¢E/œ;7ÒÝ[éî~áܹ6,T†þ¸²pÑ"*F¥Ñ.ZÄE¡Ù$J¼¨hΜ9<~|úÌ™ysç‚æeëÖ­uõõååå»wïžíë+˜_0ÄéTäÔ«BœR â/4;¾Ðl¤½SìíÍÌÌS´µµCÖ®íá1ØÉÉÆÆ†Ÿ~ôÈ‘’’CÃ1ãÆÍ˜6Øë»þË–a7¾srröîÙ³&8ØÁÑÑE`Nœ£GްX,C#£q&øz{óÓ£££H${GG- “&åäŠiUÒàsêó8Ž·¯ï†uën%$àñø7iiœÆÆÎV"j´m @(1—Ë…C¢H•JõôôÔÕÕ•——ß³gOë D"q„ \.÷åË—Ïž=k;½mØu,ÁË–-^ -ÒÂÛ·o;9ÕTWcþù矻wïVTTðÓù9]†­ì7¢(ºrÕª2&óz\`æ¬Y+W­úåèÑžü ‹ŠÑþ-«ï`C—ŒŒŒI“&a)¿=4ÀÄDNNÎ×Çg}ó³#~ˆƒÃáîݹƒENšššK—.¿qËsôÈ‘eþþ††zúúË—-{šŠ¥GGGÿ´e‹½£c]]ŽŽŽÿ²e#GŽìž-ïnÉ$7/+`â.þÚÎÏssóÖÈš››ó‡dß¾mÛömÛ°å5Ø‚––VÂÍ›Øò»w5µ´ZTůA0qDÄþæ§²lmmý~ø[^ÙÑ%ðÿêóŠŠŠ˜Læ|??ì9ÇÁŽŽXú//Atôô÷ïÜyñòåÈH‹e=pà¯Ç0 /?è°a‘îÝ·ÏÄÄ$7'G0¿­ˆ±3- &ÄÇ×ÕÕ…þøã­¤$A¼&OŽˆˆ )(ÊËËW¬Z•üìCWwÅòå›6o.+.ÆŠ³™L¬*·ï¾++.­Ë±woø®]òòò§Ož:t( ªªj݆ ÷<@QtÊäÉG£££~ñòå…æXBCq8Üž]»$ºó¥EѼ¼¼´´´©S§ ÍàîîN£Ñ>¬  0oÞ¼ÊÊʬ¬¬6ÒÛYXMlã-Aü—/ÏÌÊzpÿ¾ššZöÿkë"Òî܉¢hȺuùùù·È$ îÚµ)S§†„„ìˆè±@Óâä[Þ 4 Deæw°ì½;w_ª««_ºp¡Ež6BœFN 7…8m›6{v­+77‡ÃYXXìܹsª—W­Zº`” A}ƒÁÐÕÕ]¼lÙ¼9sœÖh¾ë}+1qè°aük슊§Óh´€ÀÀ›6Å^½ @$--íUJ ÀçÏŸó·M° 8$¤±±1ãÍ·hÉ’]»vaÿ'Òéô÷ïÞÕÖÔÌýþû¶ëU ‚ …EEy99;wïÞ²uëo÷ïV2ÓÒ(Êë7o¾>>»vﮪª¢Óé\.÷z|üuÑUdUmmíëׯÕÔÔDe°µµ½ví‡Ãáp8ÏŸ?·µµÅ¢IQéíè|´'ôZ&–ØÔÔ´hñâŸ>Ý»s‡N§ÿÿÚES†¹¹åçÿTÕ××o Ý,ì%I¨­­å45ÅÇÅ‘Éd¬1d29>.nó–-µµµŠŠŠ=ІK3-{`-×o#'1TTT,Yº”ÉdÊ+(LõòúhL‚Q&õyrrr÷nß>¹ióæ?uq9M8!h¤»;¶°léÒY>>üôM7*((´½ AôŒ°å-›7c÷¿øëêêâ®_ÏHKæ¼Y»vñÒ¥Û·m«®®¾wÿ~Vz:™D"“H!k×þ0¾¨Uˆª{wõªUaê”)ÇŽTWWß¾};ýõk%%%À''€¶–Ö0W×› óýü>z¤¦ªjog×±](³¨T*™Læ?>\ZZúÝwßµ‘Þ.1ùHó¾ÿžÅb%%&Òh´ÿ²µŠ2Sž=}Š¥=yòdμyS&Oî±Ø)Ê¡ÈÈm£Ñh­%d¼‰Š¤WÑYý6rƒ««kV¦È)+eŒ2!HF<(c2C7mò_±»à'èì¹s‘‡ý7IóÀlA]ô4|áËÇü—yùù‚KKK¹\® Âæ±KZŒu¢ß<œ›P¢*CÊ‘š‡”c2™(ж®pîœ9§NŸžïçwõÚµO3ôOØh;üN·ØH(m¤·KœpJD”Éãñ~ÿý÷;vШÔÿσ¢‚è (øßðæ•äççïçwòĉA66R¿“ÞŸõÛÈ ê8eBLÑÔÐ œ4e h5IpHHâÇÇHo]Vì¾eØØ%Ù-†gÃîÝbfAó½xy99þØo¬æ±ßDU"|355q8 8>OOϵëÖeçäÜ»ÿçíÛÅÛY‚ìH$±€R^^K•Þ>1®eŠHÄãñq±±³||”••}›/®£„"nجÍüJØlöôY³6nØ0aÂ`BP/×鑌îß¿ommM§Ó]]]“““Û/IXnnn/yÈë¦#8úÍ›7‹‹‹===ÕÕÕI$’´(›Ê˜Ìƒ‘‘X WUUuòÔ){{€2ŽM’ à45ñÇ"9~â„Ðzów F›1}ú›7ÿ7vIiéŸþ‰¥7nûÏ?×74”——óÇ:a0T*õVRRcc㉓'Û®D(*•:ÙÓsó–-ÕÕÕ\.÷å«WX:™Dš:eÊ’¥Kn€öO555õõõü¡µ´´°‹Ù¢ÒÛÕ‘io:XàæævéâÅÕñ7n|3qNë©tPEÑÆÆÆÙsçŽñðX±|y»-é^µµµkÖTUU &VUU®YS[[Û"sw:’Ž2íììbÄyyy*•êââ’žžÞvzÛÚQRH°·FyöôiÿåË“nßLoEÑ• eïž=] Å@"‘ˆrr³¼½ëêê°”ºººYÞÞD99‰Ô"³Ø‡‚dL§£LmmmìæŠ¢8ÎÄÄD­‚ÄwäÈ}}}EEEƒ‰%ÖÖÖ.[¶L]]]EEeñâÅØl¶ØÐcÇŽijjêëëó/Kw¼†ÒÒÒò÷÷Ù@]§¤¤t:&&7;»¤¨èÓû÷Ξåw…Ü·gOÁ§O_>~4hжÿý¯¤°0ýõëÀ€lä s33vóo­óó[gkB&“#öî}÷ömÑ—/¯^¼Xîï¥khh\-),|ñüùˆ#øù˜7ïó‡™ii+–/Ç#ªÁu™›™ñ3Óéô˜_-øôéó‡Gæ×l``@&‘úÕã®6lX²d @ذaÆ ªªª!ÍóJÿùçŸ555«W¯^¼xqff&ÿArQéí@Q€¢lKpª›o^Š("|v(:~ܸ“'N,^²ä·ß~RD åêÕ«ÉOŸ2ôõµuuµuu#öïï±)pìÛ½ÛÔÔÔwöìúúúúúzßÙ³MMM÷íÞk½Äë—™ŸŸ?dȯ_¿:;;?xð ÛÛ‰­¬¬lõêÕÉÉÉÆ «ªªúÜ<¯×Š+?|ø€ÃáæÌ™³uëVlôfA Š‹‹·nݺaÆ¿þú«³5@Poó˱cÓ¦Më øö˜ÖS™³ÙìýÍÓÍq¹Ü¤¤¤¤¤¤yD¥· »P·`ñâ  ì±ô'OžìŒLZh‘ÌLMÙL&ÿ­Éžžÿ?ä–@:–³¬¸K©b³;R¹äD<¸lùrß9sêêêØ#wðâ%‰"Î “fff•••eeeªªª?ýôS·· ›¼¼¼œœÜÛ·o«««ét:v9ª¶¶öòåË ÑhT*õǼví¿HHH@˜9sfff¦x5´€ ˆ²þàv$iuuu ƒß>ü14TÚm‘q1'Nüoûö—¯^½|õê۷Ljèé+{‰cÇjª«kª«O;FèÀ<ÔŸ‰ÿȈººúÖ­['MštèСnlÔÊÊÊñññ ²³³Û³g««kII —Ëåß°F¿ FEE@&“±'L;[Ck¡²²R²Û õM‚÷»%B¡6_}‡$Ç455/_¼è1f àÑÇšššmÁáŹœÑkñø{wïˆrrÒn õv]z0™Ëåöüü­PÛ<=====9NTTÔœ9s>~ü¨¡¡A >þŒ_Ý5@Ôczx(l~Ȩ§§—˜€-´]/[Q&—AÔé/ÿ­[·¾|ù())Ùºuë´iÓ$Ð*HL………÷îÝkll”““STTÄNîJJJ¾¾¾k×®Å.1?zôHr5ÕÐЀ]+mhhèÔ“Cõ*xVVVVVVøoµ.‚ëzþ¸@PïÔé(3??ذaŠŠŠvvvæææQQQ’h$AvìØ¡¡¡A¥ROŸ>}þüy,ý×_%‘H4mäÈ‘m›@ ”–” ²mûö€Õ«cš§É…ZƒQ&$&ƒšši·‚¤ EéÊÊC† “v;$¬9Ä;a‚¥ ÐÖÑilläñx²ÝuWPPèÅ-1¢¢?ÿüó{?¿ƒû÷_%‰ÿý÷ù Ú2¹\®à„¥-^BØPÓ'~ý{y2&&,<\AAáÌ©S®®®€“'Oî?p€ÅbY[[Çœ<9`ÀÀ‰'ö|¸àµÆ¼¼<×áÃYL&–x(*jÏž=&¦¦û÷í|y+!Ah<„•Ú!fMš<A-mm@iI‰4·_2¸\n\\œ¥…A¢¢¢óóÃwîüiË–GLLLž%'Óh´•«V­ß°áz\“É Y¿þáƒ..._¿~ÅFì5r8Ù™™8nÁÂ…á;wþ¼c‡4·­ûÀ(‚ HMMMÒnBïCðÞ£ªªêMZÚT/¯æGäMZÚëÔTE?þ,øˆŽ‡Z‡Yw’’†¸¸Èd|‰ ˆ®ž` •Õ‘æ‡bW¯&S½¼Žþò –2jÔ(lÁßßÆÌ™ yv½¼ü|kkk%%%l®“ÚººØ¸¸ìÌL*• X¿nÝÂE‹`” AÔïápUo³²*ÙlÙëtˆÇã•UU-¬­é**ØMó?>äLÑ:3F361Ñh5PiIIÞÛ·5ÕÕ2?Ö‡S¤R ÐÓ×ï=£f²Ùl§¦¦Öñ"›7mRPPhý²íx¨u˜%«BQAÿe^^@PVVÉdþïÏÓgÎŒŒ,++`_:~éâÅè#G6lÜ8hР°;œËJK¹\®“³3VªíÙõúœö£Ì­[·ö@;úi7‚ nPWS“þê•™µµ•ƒCï‰*º Ç«d±RŸ?wqs£(*¸\®Ï¼y¢2—•–¾üç"‘(ø›ÅÊÊÌ´±³Ó70ù œ<¯¤¸øÕóçý^󤊊 Š¢l6[õÛ³D!êcW ¾l#fõgl6;(88)1ÑÍÍ-õõëqãÇcéÆŸ0~<‡Ã9úË/ .ÌÎÊRWW'osrh4štÛ, íG™úAÔd§§[ÙÙéèéÑh4Ù‹2ÀؘÁ`¼NIqruÅD]ÄáñZ::ù _› IDATÎÇ¿~ñÂyèP~zNv¶­££¡‘Qee×a0\ÜÜRSR445©Ti·”••ííì.X ˜.'/ ‡Ã‘——///ïHUЇdóÑaA‡sìØ1,±¨¨(+;û»#äåå)ll/6sÆŒÐM›v†‡Óéô’’’ÜÜÜ‘#GJ³õݧýÑËP¨»õÀq… ¨°ËË(™ 1¨ki±B¶OnªjjÕ_¿ ÿZU¥£«Û3§Ö^BUM­¦ººWM¥¶uÛ¶øøx‡Ããñž?¾|Å =ƒJ¥&&&666o~Pºmüx¨ªª PRRòøñcQ™•••),,ì®­è[´µµCÖ®íá1ØÉɦyY„ÇÛ½{·¡±±–¶öù N6ïöèèhÉÞÑQKGg¤I9¹¹Òkx7kÿZ& £"‚ ax<žÌÏ[o1‹¦Àÿ¹¹¹KKËÿόõ蟊¢¨‘úÓÿ#ØNèUýtÝÝݯ\º´s÷îU«Wóx<+KË€U«äääöîÙ³&8ø[·$%%u¤ªèè蟶l±wt¬««ÓÑÑñ_¶LÔU7 ÿeËœœq8œ`/Æ^%ùÁƒ6F€ÊÜܼŠ ‚)æææ,&[Þ¾mÛömÛ°å5}==ìñó(dòˆˆlKŸþ ‚:ŠÝ¡°°pÂĉ€ä§O FGŠô+Úf1¢"̰aÃ’[$úýðƒß?`Ë+W¬­B¨Ö•ÐxHT˜µ?"b/ŽœàTI=^Ë„ ‚: ûY^>ËÛûÊ•+€YÞÞ Ï‹-"K8@^^¾‡× £"¨ÏQ&AÔQØÿ~~~áaaCœœáaa~~~wnßn£L5¯ âááxüDz4â I‚øOÿÌž=;88¸zRËžn?й¹¹8ŽJ¥R(GGÇ/^Š‹‹===ÕÕÕef¢*¨ ¯ß¼™0i’6ƒÁ006bÄ»wyùùª]¯lhhX¸p¡²²²––VXXX»é]/(vÆ`ä|)ªH ¹¹¹ŠT*¶ÌãñV®\éèèXZZ*˜ÎÏIWVîÎS°¸x<ÞÊU«Ê˜Ì¸ØØ¸ØØ2&såªU<¯uÎîL’yâD™ ÅÉÉéÉ“'Bß…Ú%ÁÉÇϘ1ãýû÷---l+H¶1™Ìù~~rrra°££««+`Š—‚ ØÈôôt6›í·`ž¡¡±©é¦Í›±è»ÞyþâŃ1 Öc}ÎÚ†•:wá‚ÝL@]]]`P±©©±qÀêÕ XÎòòro__=='gç˜S§4utÀ·Yóòó5›ç)Z –ùÔéÓ&ææV66ÿü󖹪ªj©¿¿±±¾‘ÑÊ€@ÔáÃßÏŸÏoä†ÐЛ6uÏ.îA¢~þôÓO………_¾|IMM=þüåË—ÛNïzA¡Ú½Ú'¬ *ä¯ù-„Ë]ºté«ÔÔ÷ïkò/½ Ë)Ý?”Ç ÉÏÏ»vL"‘I¤¸k×òóóCBBPOøÖAP¿'N”9jÔ¨çÏŸ×ÕÕ }j—ä'—˽v횣££äVõB CWWwñ²ewïÝc6?Ý ¸•˜È¿ikk»2 €@ äçæ¦üý÷ßÿüqà– A'Ož¼JIIKMÍÈÈà§· A´´´W))W/_‡„|ýú5ãÍ›œÌLfyù®]»°lt:ýý»w÷îܹzíZÛuŠªA¢¢¼œœ¹sæližlU``}CCfZÚ‡wï°á¦}}|>|ˆäÇår¯ÇÇÏéƒOKˆú}xæÌ™íÛ·Óh4ƒrêÔ©¶Ó»^P¸v2!%Dž ›šš,\ø6/ïÞ;ªªªüôÖ9±×áÃÕ55±?E-,<\BgéÖjkk9MMñqqd2K!“Éñqqœ¦¦ÚÚÚÖ † t$ÊlÁÈÈHII)==]­Ä† ˆ²²2…Bùõ×_Ïž=+íæ@=JNNîÞíÛjªª›6o6³´œ0iv=[Puuõ½û÷Þ¾L&khh„nØ ómݲ…L&«««oܰ!6.®õ*Ñ72ÂþN4$¼iãF’‚B]]]Üõë;ÃéTª¢¢bÈÚµñ7oòWº}ëV2‰¤®®²vm[!ªÌêU«ÂÔ)S²sr°šoß¾½+,LII‰H$b¡hki su½™xøè‘šªª½x»´·)..f±XöööØK{{ûÌÌÌ6Ò»^P”v£±ÁâÑyß_TT””˜¨¤¤$˜Þ:'¶üìéÓ²’’²’’¸k×”””¦LžÜ©H±+(Ê¡ÈH&˜H£ÑEFR(”™;}€!HFuîs"‘8f̘„„~"ü:õ¡²²²¦¦Æ××÷øñãáááÒnÔ£ £”1™¡›6ù¯XñÛýû‚°kœzzzØKƒÒÒRl‡ÃñÓõõõùé‚—ù/óòóg7.--år¹.üI›g7ÆVÊLQ__¿MU ˜"™Ô$DŒ6ŽŠR ‘;;ëêë{Nžœ“›‹¥G:Äb±ŒML&zzòãW99¹Ý»v‡„ vvv2¤ÝJ„Š>tˆH$ZÙØ 03;}æ ?}îœ9YÙÙükc}‘Ð߇óçÏß¶m[MMMQQÑþýû-ZÔv:ŸØ…ãó6΄(ŠŽ9òìéÓþË—'ݾ-˜Þ:'Š¢+(ÊÞ={$snn ‰D"ÊÉÍòö®««ÃRêêêfy{åäH$R‹Ì>ä$£ÄŸÇœÅbñŸ…¤ËÒÒRpÌ™3gΜ9À^³ý†’’Ò阡oíÛ³gßž=ü—D<öüy?Ì›'ª~s33¶À£ëBSÈdrÄÞ½{÷¶(«¡¡q=6[ÎËϺÆË—·Q‰àºÌÍÌÊšûçÐéô˜æçI¤©^^¢6§÷ãÿ&İ/rxxøòåË ‰D ˜3g–Ghz^^ž³³seeeg ¶El6[UU•ŸÖâ¥Ð"m¼5~ܸ“'N,^²äüÙ³†††Â‹ (àêÕ«$FsÜu!!ëÚ|¤¬áØ·{w@` ïìÙW¯\øÎžmjjºo÷nœÐCÔ‘(S°kAP/÷˱cÓ¦Mëh/Ã^IèïC‰tæÌ™3WmÛH777ÇBÌÎì`Û,^ôÝwßž¾S›cfjÊf2ùoMöô,nî‹)˜Žå,+.ÆRªØìŽT.9Q.[¾Üw΀ºº:öÈü=A¢À(‚ QWWgfi©Ç`Ä^½*í¶È¸˜'fùúbWÿ·}{\¿Ùááıcã&LÄÇÆÂyÌû´›W®´ašÜÍËËââRUQÑí5÷N0Ê„ ~­õ½o‰®«L’ãQP(”ÂÏŸ%W?ÀãñMMÍË/zŒxôðaÛãàð˜¹7#âñ÷îÞåäzxÕR‰Šd›Û¸q¢ÞJ~ð@hz^^ž£““"…ÂCQssóCQQƒ»<Š`V––‡²ko¬ß¾­¶eâeëA‰2êéé%&$AXE‘½ÿDZL1ß“ºu0‚éWþë ÜJ²è"¡´¤„Çã…ïܹ:0ð¯ä6òvV'‚ Û¶oX½úé“'md|£—kÿ˃º[W‚ IÀ °²²²²²Â«uiŸq¥@¢‡ÀP„6Š`LIQ‘»»{ÀêÕ’k[Š~ºÇ{M™òáÃ@m]ÝêÀ@##†¾þÊU«øCCœONÖÔÐÐÒÕí…QEñx¼Ò¢¢”ädG~¢¨ÍäñxÌÒÒW/^X;‡™¹ù«”'gg --ÙÛE-`;!õÅ 3 )öÝl­ES]]}÷Þ½ì¬, ™L!“7mÚ´14tSh¨±‘FKÏÈx—Ÿ?f̘ôôô¼¼¼ç))Ç ÃãñmÄR F?]M‚Z[[ë7þ©S§ü~øËå:9;cï¢(Ê|àô™3##ËÊÊ@{Ý ZL¬*´ @èssGÃ(³¯ê'?!¨7£P©Ž..i/_V°X²wëÇ«¨© rt¤P©üQǯ‹xÌÇÓh4 KK•o‡g×ÖÑ©¯¯O{ýº¶¦FövQ x<ž¦¤ddbB£Ó{U”Ù"‚Áúùé7?¶eh`PZZŠ-» þôéÓß¿wss£ÓéO““SRRÜÜÜe¥¥¢b©¾ýt¢¢â¾½{]‡ óóó#osrZ ÓËf³ƒ‚ƒ“ÝÜÜR_¿7~|kîHAIwÿí.0Êì«`” AÒ‡¢teå!ÆI»Ö|¶;a‚¥ ÐÖÑilläñx²}Ú€ÇãzùŒ¾€/X ùùË­æ. nnnwïÞýøéÓú:~õêÕ””€ºººÐXª?0`€‹‹KllìÌ3B7mÚN§ÓKJJrssGŽÉápQQQáp8Ç:ÓS®#•••),,d0Ý´5£L‚ qÈõøp‰}™LîåW¿B£Ñ&Œ¿uëÖèèèºÚÚÝ»wÏöõÅÞáæºi“¦¦&ƒÁPRRZ²t)—˵³µÅJ ¥¤¹%½ÀâE‹BÖ¯O}ùrÛŽöŽŽuuu:::þË–9R[[;díÚÑšššK—.¿q£ƒuv¤ †††ÿ²eNÎÎ8NðBuo£Ì¾ ^Ë„ éjjj’vz/‚÷r¿=4ÀÄDNNÎ×ÇgýºuXº©©)•J>l€F£a—0±w£££Ú²¥E,%­MèÉtv¬KsssÁ±Ð§N:uêTÀˆˆ-2oß¶mû¶mØòšÀÀÖÅ…ÖÙÁ‚û#"ö·Zco£Ì¾ F™$}8\UEÅÛ¬¬J6[ö:âñxeUU kkºŠ vÓü‡E=Á€õË461Ñhs ¨‹ºaÔÕÕ/]¸ 4ÿ¿ùùüåcƒSÈäÖ±”Ðúû8URèt”™››kee¥¨¨ˆ½Œ‰‰ñm¾Òõ$Á(SUUuáÂ…MMM8ŽÍfÿöÛo%%%€‘#G+))555½ÿþñãÇü¡b!꺺ššôW¯Ì¬­­úJgüŽãñx•,Vêóç.nnEE—Ëõ™7OTæ²ÒÒ—ÿüC$[<uA}Ž8×2 BMMM·7êÁ(EQE£¢¢p8ÜðáÃÇŽ{îÜ9@ccã­[·˜L&‰D3fÌ„ nt¸_AíÊNO·²³ÓÑÓ£Ñh²e€±1ƒÁx’âäêŠ%ˆº‡‚Ããµttœ‡ýâ…óС=Ö@‚z3xǼ¯je‚æXóíÛ·ŽŽŽXʳgϰ õõõÏŸ?Ÿ3g¼ÏA݈]^nag'³!&u--vy9ÿeÛçU5µê¯_%ß(‚úq¢LAtuu™6mÚøwÏ¡ž$4ÊÄãñ%%%­ÿ'022*--…Q&u#×óVKWËY4Î!¹¹¹KKËÿÏŒÃÉ^ÿT‚ÄÖé™ttt222 SSSß¾},‰fA…ÃáÖ¬Y³víZ;;»;wî´xÓëáÇRiA2mVPP0aâÄ ' ¤Ý@‚z‘N_ˤÓét:À`0ÂÃçOŸ~âÄ 4 jG‹³9Š¢‘‘‘òòò^^^vvvO 433›8qâõë×±¹ª ‚Ćy˜åå³¼½¯\¹˜åí Ñÿ¦~ ¨]]Uþr•ô[XJccãÇœœH$–nmm=iÒ¤¸¸¸/_¾ ÄHûãÐOååçkêèH»ý ö÷óó  âä4ÄÉ)<,ÌÏÏ~ j­ÓQæŸþ‰’STT´yófl0R¨çµŽr°6›]PPààà€¢èàÁƒÇŒsõêÕ·´ n'íxýæÍ„I“´ †Á°#îܽ ÈËÏWÕÐèz‹KJ¬¬­Sòòó骪:zz +›%Ë–å¾}+Ñ6@= EŠ^8wn¤»;¶<ÒÝý¹sØ2èß‚zNG™Ïž=³··WTTtpp8p`TT”$šµ«u”Ã_~ýúµ££#‡;v¬¼¼üܹs×­[·nݺ   ž ½úé~8Ž·¯ïŒéÓ¿|üøùÇÃQQ*ÊÊ=³ê¿ý6ÆÃ£E"@(.((üüù¯§OmmmÇŽŸ“›Û3íZ+..öôôTWW'‘H‚é .TVVÖÒÒ ë`mØ^EEEðó/øR[AP_Õé(óÇ,))©­­---=zô(|À¼7`±X»víâ¿ÌÍÍ=tèÇÛ¹sçîÝ»÷5;xð  INQQ“Éœïç'''G ;:ººº¦xy!¢£§§£§—žž^WWdljj`l°zuCc#h¾ÞyþâŃ1 Ös8¬Ú_Ož´²±Ñf0,<úË/BWýÛo¿;VTÃTTTü¾ÿ~_ód!BÛ¨ªªZêïo`l¬od´2 KŒ9uÊÚÖV›Áð;öýû÷Xbyy¹·¯¯Žžž“³óÓ§OùëU3„Çã½¼¼Ž?Þ"ý§Ÿ~*,,üòåKjjêùóç/_¾Ü‘ÚÐöþ ‚øºÚ/’Ô›H÷ÃÀ`0tuu/[v÷Þ=&“ÉO¿•˜ˆ]V,.(°µµ  ùúõkÆ›79™™Ìòrþ/Až|ðàSJŠ““ÓË—“…ó‚ƒ ?$%Ýùý÷_/^”-¥®š—Ë9s¦Çç6 „Nž<Êd2y<Þ¢E‹Ž?®Tu²3ãu½  d™-•ºÓ*ðõ6]]Ý;·n™š˜,_¹ÒÙÍ­ÿ€²#2eee—¯\Ù°~=ƒÁ000Xôý÷W¯_—]ýã4Ífÿ°té¥Ë—BzzzºººïÞ½+))a±XmÚÔ\î“'O¼<= †âðŒML ÄP\\|ëÖ­ëÖ±X,Ž:3öèÞÝÄÄDWW7hÆŒ—¯^‘SÞ¹{7tõj•Êf³}ÿ½2kjÊÌÌ>>>ä[Ÿ˜˜efÔð«GžýÓR©=³ÅÖÖv×Ρ>Ùòå3gϾw÷®üÙÙÙb±ØOöœ@‚ÀqœÆ0ÌÊÊŠ¶¶¶ÎÎÎFž9ujÿËV¬ðòô éÔ±cµ…†ß»×§îÓå2y‘‘‘‚ø|>AÖÖÖÕfüåÔ©Ÿwï&{àWV’S"„x<ž,Ú/®¨UII †a4|Ë`0Š‹‹•™òH€ò Ël©(8 jaÆá, 0x0úü¯›ÍÆq<.:šÉdV›… ˆ´´42ÑLKK333#ËûõíÛ¯o_‘HtàСiß~YmÆð{÷Μ>ýÅîܽÛÙÏOA fff†Éb ååå}·hÑo×®uíÚ•¼ƒ!ÄápBéééd¢™––öŵµb0A”——“‰fII‰²d™@[\¿pAñCÇŽmžH´d™-Ë29|þÙ³gGieeUXXxôøñv>>!#CC‰D’‘‘aiiÉd2‡¶båÊuk×feg¿MH]m¹výúŸwì(++Û²u먑#B™™qqqÝôôô èôšÿj>~üX!¹º¸(¬  àìùó'Oº{û6B¨® Æ WþøãÞÝ»i4Ú›ÈÈíÛ‹*+%‰±±±H$:Tõè&“Ù¯oßеkwýüsiIÉŽªÚ¯¨ÉÂÂÂÔÔ422²sçΡ7oÞxzz*3#ËT#µdEIII_õè‘QõNËôí[רGááµ–'&&vôó+ÌÏWYPŸ-Ë·C:]Jînn{vïöööþâ,Íž2 Ël©”<½š‡Ù—®MT)ª¾~Ttô¡Ã‡ ô©ÔnݺÜ¿!Äáp‚fÌèÔ¥ †a¿ß¼¹g×®W¯nß©SYY™…¹ùŒo¿%ó0ÇÚwêTXX8bذ%‹!„¤Éæ-[&O*‘HÜÜÜŸ4sæ“'O,y¼¹sæü°l™@®oZá8>bĈÃGŽÔ¬ c÷®]›7ovtrŠ—H$\ss„PvVV3|ŠÁµ}€†èÖ­›º£J©õ6p*•zòäÉÂÂÂìììü±^UM™>ýï¿ÿ&‡ÿþûï)Ó§Ã=æšB¡œœœŒ*-+›lcgdz¶ž3w.y!tøðaWww3.×ÙÕußþý¡ÄÄDCcãºÆ4ˆÌi¸ææ‘‘‘GuoÓÆŒËýºgO²§ rö£ÇŽÙ98¸º»ÿûï¿dU………Ó¿ý–gmmie5köl²°®¨4–D"IOOOJLœ8qâÄÉ“ARbâ”É“WVmPŽŽŽ=JOKsrrZ²t)Y8{ÎSSÓ”ääûááåþ3+ ‹/_¾ìæêZk…‰äMdä눈K¿þú{Xù§BRLY& aÓ>– h=Ž>üShèËW¯^¾zõSh豪 g&‹ÅW¯]#»¯Z¸paaQQ\LLbBŸÏ_¿aBˆÏç/Z²äÔÉ“9ÙÙ¯^¼èñù5'µŽ•Ïi¼½½ëÊ222Þ¿{7aüøUUé×ì¹sË…ÂøØØÔ”Ù‰Z£Òp ‚ƒq<8##cá‚äpll,9ö믿&»c›9sæ‹—/BÅÅÅwÃÃCCBh4š©©éâE‹×/‘H,­¬lììž>}ºoïÞš’V._®¯¯OÕ¼}2œ1 UsqvÎûÒÉdÈûÀÌÌÌΟ=Û«wo„Ð÷ïËú%š‰ÌTÊËË™LæãGJËÊ.]¾Cvv»dñâ©Ó¦­]³†ì%7ñÝ;‹U­'ÅcI²g4Ìœ9søˆ²òàùóqH>E¬¸¸8,,,&:šÅb!„:v숪+*U}(MÇq²›6===}}}²£===ÙÔNœ<¹óçŸÿëŽM,F5ºc³ªP°ùëbkVHNÃf³›tÍš Ë ,ŒB!_VVV¿Ý¸ñÛVVV²B zXÓHd¦’–šÚ±C‡ãÇçdg‹Åâ:YZYYZY 6¬°¨!dhhxîìÙ_/^tvuíÛ¿ÿóçÏå+Q<–tâäɶ>>æ––ƒ.++“-LÅh4ZeUÇ·AØ|ÞEn]Qµ\yyy ¿ûnßž=™éé·ÂÂÈëIÈîØ222ÈiÒÒÓYa5šÖÿ ì(‹"ÇÝÝÝÝÝò9uêd``°uË–ýû÷# Ãqüm||FZZFZZfzzZj*9Mÿ~ýÂ~ûícrò€o¾™2ujµjŽ•Ïi”ÉHd¹Ÿ>¿uìõ¶Ö¨Z(‘H$ëŽí`Õ¢L&³oŸ>¡kÖ…¼¼§Q&"1ŒÁƒ¯X¹²¸¸X,¿|ù!Äd2kªå277_ôý÷={õjß¡ƒ|´û÷íËÊʲ±µíÝ·ïð¡Cup!”””d)÷XŠzU(ÃáÌ " 7áº4ì´ABB†a ƒN§ûúú¾xñ‚,¿{÷®‡‡‡¡¡¡A—.]Aï4)6»¨ @ÝQ¨Vnv¶‰Ü%_ò'Çk¾òóó™,–£_4}Ú´ÃGŽü¼s§>•êãë˵°è?`@|BBH"•nÚ´ÉÖÞžkn~úÌ™£Ÿw.VëXùœ&''ç‹9Ìþ½{upÜÅÍÍÖÞþØñãdáÞ½{kF¥RÂÃÏ9Rë«®Y\\\ÈþAeä°¬7"ùáМìì˜èèÁÁ²B.—{ãúõœì숗/­¬­Í¸\TG¿¤ò‹¨«ÂšÓlß¶-3=]C:Ò‡»´Žã%%%R©tõêÕAAA¯_¿Fy{{‡‡‡óx¼ÊÊÊ={öŒ=Zv- ñÚ´mûìÑ#3‡ki©}Çð¤RivFÆóG|ýüd…u­¦T*ågg¿zñÂC¹g†y^ߣÕ²!C† 2!´cÛ¶Û¶ÉOimeõÇýûuÍ^ëX„ÐömÛ¶WÕÓ¶mÛЪîý£ºS1CCÃUÉ¥ F«•ê¨ë’ä!WW×´´´ 6 TKͲL­B¡P†¾{÷nò­¹¹99@†aŽŽŽê -Dg0|ýü"_¾Ì´ïÔ9…B165õòõ¥3²Ç—_©ã!‡ …Édºº¹C÷ì*ÕÖùùùßΘÁçóõôõ‡®X±BÝ©d™ZE,_¼xÑWîéaïÞ½ëØ±cQQQ§NÂëxþ ÂÐȨ£¿¿ºãP±ª³Oÿþê -Ð¥K—ؘuGÑL ËÔ‰ÄÈȨ¬¬ŒÅbEDDÈÊ rss'Mš´jÕ*ÙaN@#éêêª;Ðhej Ç JJJÆŒsèСõë×Ëe³Ù«W¯0`d™Z × €ÆÑ¶ËÕ[9ƒ±k×®]»våææV%‹5­³Vh1È2µ“““¿¿?ÙWÙÍ›7?}ú„ÊÊÊZ½zõСCÕZ È2µÐÌ™3÷ïß_YYùîÝ;ooo—]»v©;4 a¡uý¨Ù‰Šº£µƒË¹´›››X,–½1bĈ#Bßÿý÷߯¾¸Ô®®nAANWw -FiI •FÓËÓ5Ë4… ‡ó!1±¤¸XÁsÀ‰ ˆâÂÂÔäd†¡!äåš r@³JLLìèçWí‘h’‘‘‘H$ú”’"ª¨€DS1 èT*ƒÅ¢3º8.NhÈ2Ð6¯_ÿ°lYä›7·³³ûqÕª4anWký¯€Â0ŒËå–³X• !•"¸âP!§ÑhzzzâÊJuÇjY&ZE$9rÙ?üF¡P^¿y#ª¨hAõB4¦îZ¥˜¥"©\XØ(ðñ UÒ32ø|þ”É“uuuqïо½¿¿?BhÀ A‰„knÎ57ŒŒ,-+›lcgdz¶ž3w®P(D%&&Ÿ:}Ú­MsKËà D"‘’õ#„ §û-ÏÚÚÒÊjÖìÙdáÑ£GÝÛ´1ãr¿îÙóÇÕj«5 P»‡‰%9Ep|´±àX&ZÅŠÇãñxS§Oÿß„ ;tàp8dùïaaýü²³²È·3‚‚*D¢¸˜ æLº~ƵkÖ „$ÉßÿñêUYiéÈQ£¶nÛ¶rÅ eêGÍž;!K§Ó_¿~M:::>~ôˆÉdΙ;wÉÒ¥W._–¯máÂ…µ†ªvýÂ…ºFÅÐ_ç1.®èÙœñ’’’¾êÑ##-­¾3&&&véÚUÀç«"ªƒc™h]]Ý»wî°MMX¶ÌÁÉ©O¿~µA¼tùò¦  †Á’Å‹¯^½*B§ÑØlö²eË~½xQÉú‹‹‹ÃÂÂ6mÜÈb±ttt:vìHNÿõ×_›˜˜èêêΜ9óÅ˗ʇªзoÍÏ÷ë_>9Z j%11‘Ábuûê+Y‰P(äY[›Êýån ''§¤˜òÈÉ3W\ ‹ƒ%&&6Il Ç2h‘ óó3ÒÒ***A˜š›[[[ËFÙÙÚîÞµ !”““³tÙ²AAÜ¿/?oNv¶X,îЩù– ÇÉa ì­¬Èakëìììš‹®µ~>ŸO„\¤'Oîüù眜„Pµ;@„!óæÅ å?ÐÄ0LWGÇ„Ã1·´„^¯¶²µµ•[.’öݱd-ãcL]³à8^PXצM„ÐͰ033³ÔÔT•Ǫ4ÇÉ3W"‘($4tFPÐߨ%È2hyJŠ‹SSRL8ž••>•Šª¨íŠF33³ï,è?`BH>K`³Ù8Ž¿g2™Õf!âSZ™h~JK333S†|ýfff†Éæ%ååå-üî»°ß~ ˆxýºo¿~ò³+CƯ[7•"¤Ò< åý{)Aðä¾V´Øº©:86§—ůÇM6aüø3gÏnX¿!túôé ãÇoÜ´‰uôèÑí;vcG:88 „ø|~ÐÌ™Ož<±äñæÎ™óòeuÚ–õBlß¶mÝúõúúú'ïÒ¥Kµ‰sssgΚõèÑ#KonÕÕðòôôôFuò—_êÿI4 8c@Ë“öñ#›Ëµwt¤P(B¡|Š™““³}ÇŽOii¡Â£ǎµk×!ddd$‘HÒÓÓBL&sÄðáË–//,,Deee=û›»fÍš²òr@°yóæ1£GW[t]õ3ŒÁƒ¯X¹²¸¸X,¿|ù!$‰$‰±±±H$:xð`µª‡A"×^jy‰D"“éàäTTPPZZÚ $ÿ×/é‡á¶Ûi›ÇØëà_8x?~üø‹—.‰Åâôôô˜ØØoú÷—"/FOOKsrrZ²t)Y8{ÎSSÓ”ääûáá/]R20‰D’‘‘ñþÝ» ãǯúñǚ̙;×ÐÐ0%9ùÞÝ»~ýµæB¡ðüùóýü”\b“ƒ,€–G(ZðxâÊJiçS©Ô¨èèž½zq¸\//A^ÞáƒBgfPP‡N,­¬¢¢¢öîÝ«O¥úøúr-,úŸ@ÎŽãx·nÝ|Û·÷ðòjÓ¦ÍÒ%K”¬!´ï^wqs³µ·?vü8BÈÜÜ|Ñ÷ß÷ìÕ«}‡žžž5W¤®0€æ ˆ„²òru€Jü!h÷cDva%B(äÚÇv¶ŒA>&_œËÆÚÚÅÅåÞýûçΟ1|¸®®®lT͋ы‹‹ï†‡‡†„Ðh4SSÓÅ‹)^ðüù8Ž Œ‹«6ª¸¸øö;kBCi4›Í^¼x±l”D"±´²²´²âZX\º|yÛÖ­Ê/±iÁsZ ‚Ð×ׯ¨í,9‹ÅúåĉZgÚ¾mÛömÛdowlÛ¶Cî­Ì¤‰'MœX×’Ôohhxâxõ“L¡!!¡!!äð‚à`„‹‹‹¬sx:VW@C`FDÍÿ3h2±à̇”\aŸ-ч§:Ÿû—}a%çýß„ gÎžŽŽ>ýùù蚣óù|„Ç#'°ªø"ÇŒŒB4­²FŸ dµVrWÒËÏHÞB$ Z½ºfÿÍŽe 5¢ëaôöwfE*í±! § ^mŒ”œwÈ!þù'N÷öö–’£ïÛ³'3=ýVXùŒP²Ç·ŒŒ rš´ôô& ž¬6­ê†ôOµÝ™N¥RÇ÷ôÙ³&Yb@–© 0 c0t:Ý××÷E=oËMHHÐÑ£ÚZKc½?—{}m^!–úØ0hJ?ìÇ€NÿýÖ­j2k½ÉdöíÓ'tÍ¡P˜——·cçÎ&‰œÉdöï×/$4´¼¼<77wÛöí5§‰D/^ttph’%6äZÇñ’’©Tºzõê   YŸØ(Oþ\6@ø99IïÞ•–”Ã@­0 £ØØÚò¬¬ÓÙ–¾åÐTçövÌ÷9õ»þ¸OµÙÅèfff3f̸zíY¾ß¾ ™3mlm­¬­g½Žˆ@è€]†¬ÖÖÎÎÊÚzάYd9ù¤7„F¡´oßþè‘# ^D#A–©U(ÊðáÃwïÞ³fÍ ×ÕÕ8qâÖ­[utt<==É+E|||„BaÏž=% ƒÁ@=|ø¼e€Zäçå%ÄÅyúøXÛØÈßVª‘J¥Y™™/Ÿ=Ã0¬am= T5l€=ò…´¾Öã...²ž‰j^ŒŽâr¹7®_'‡¿}ÛŒËEutÀ.«_~AòõËãp8×äfñí·ß’—)^‹fY¦V‹Å/^ôõõEM:•N§gff–”” 8pýúõ«W¯®u®?ÿüÓÓÓ³¤¤¤yƒP‹Ä·oÛ¶ookg‡‚#™ `Š×9 àÕ³g¦l6•J­×ìCÇŽUQ`5‘¶¹ºº¦¥¥mذaH``³-Z½ ËÔ‰ÄÈȨ¬¬ŒÅbEDD………¥¤¤Ðét:¾zõêï¾û®®,€æ(.*²°´„såJ215--)©¨¨¨o–Ùœòóó¿1ƒÏçëéë \±b…º#j&ej Ç JJJÆŒsèС©S§"„lllȱvvvYYYj €R‚ÐÕÑAe*‡‚aR©T"‘¨;EºtéSç#+µd™Z…Á`ìÚµËÇÇgúôé¡ÔÔT2Ñüøñ£¹¹9BHOOO"‘ˆD"===~ÕEð„bí •HRÞ¿Oz÷.?/!dlbâäìlçäD¡¨³+ ÍŒJóc#i~„@Eà@&Ðej'''ÿsçÎ 8pùòåGŽ)--]³fÍ„ BÖÖÖL&óêիÆ Û·o9‹±±±D"IKK³‚G·XåååÿÜ¿_QYéìæÖ¹{w„Pzjjttô»·o»÷îM¥Ñ”¬§ñ÷<ª"*UÐäØZJ„@u ËÚþk¡™3gîß¿ÿСCB¡ÐÜÜÜÍÍÍÏÏoåÊ•!]]ÝŸþyöìÙ®®®]ºt!§733›7ož‡‡‡‘‘Ñ›7oÔ;h‚ ÿõÅ{ô¨®_¬ÄÄDCccù’ZïyT{TM®1±1X,®¹¹¹¥¥«»û´éÓTóTÌGHzòäIÿÌ--yÖÖãÆOJJR0q3|à Þ^õxMY¦6pss#;'"1"##ÃÒÒòÊ•+EEE`÷îݲî0¦M›–ŸŸŸ’’²`ÁaÕ# ÷ìÙSXXXPPàS£÷/ ù>¥¤ˆ$’€=Èî¨d F¿LfÚÇU­±QôèóN½7›ûÔlîÓy§ÞSôè_Œ Çñ쬬¬ŒŒ§Ožx{{÷ìÝ;>>^u6àÓ{øðá˜qãfΘ‘–šú.1Ñßß¿wß¾µ>h,^õy)‚a<µ‚hÌeueÐâ½wpv®–ŽÈ¸zx¤¼¯dU²ÃZäÀÑcÇì\ÝÝÿý÷_5F…ÊËËûߤI<žÝË–ÉþVñùüaÇsÍÍÛµoôØ1S§^±-½¼ï~¿¸’_\¹ï~ÆÒ ÉÊÇfll¼ 8xò¤I›·n%KJËÊæÛØÙñ¬­çÌ+ûWXX8ýÛoyÖÖ–VV³fÏ®W„µŽUáÊU«~Zµjذa:::tmþ¼yƒoÙ²¥®` DöáÌ57ŒŒT&< jDãüÏ?ÿ¬+˜ßÃÂÈ´ÙYYòOdêÔˆÓÇÿüóϨѣge¤¥}HJ ð÷ïÙ«×§ÔTòÌ2Žã¹99üììݻϞ3'7''7'çÉãÇúúúäpnNŽ| Šk£P(7ÃÂr²³ÿÿ´5Aˆ**†6rĈ¬ŒŒÌôôýûö©ëŒ¹ ‡ó!1±¤¸Xq2 j"¢¸°059™ahH§ÓV Üý¨Sðüù8Ž Üà€Ã(..¾}çN\l,F£ÓhË—/ÿaÙ²åË–ß Oˆ‹£Ñh4mñ¢EãÆoæØLLLòóóB¥ee—._Ž‹‰!@.Y¼xê´ik׬).. ‹‰Žf±X¡Ž;ª4ž¼¼< ÃØl¶|!‡ÃÉBÍ h°Æ¤DËW¬XýÓOä? 6þü·ïÞmܼyßž=dµAP(”‘#F>|XV"¿Pù·ŠkÃ0lÂøñ{÷í ‘Í•––Æçó§N™Bkß¾}#ר1ŒŒŒD"ѧ”QE$šõ‚a•Je°XtCÇå/ÌSd™´x¦lvfF†%WëXŸß°{;p722BÑh´ÊÊJ5FEöºe]Õ‚­Mvv¶¬œWµ«:–¥ ¶áØûîgÈʇw`×76@`llŒÊÉ΋Å:u"Ë ‚Àqœ ’ kk%+¬aí ­;B‚ rssåM>ŸÏ65mp0 ù58*((ˆˆˆ¸våŠ| #‡Ÿ=gQuØ ±X|ñÒ%W7·ÿ&û<Ë”½U¦¶¹sæø,^¼X6ÇãñxS¦Nýßÿþ×±CŽr×±¨†a\.·œÅª”H©AÏ}õ¡ƒã4MOOO\ÿŸ€ÿjhÚ€ÍÏÅÝ=66ÖÝã֓‰qqvŽŽ-:*òWêSZ™h¦~úÄåreåä½n¡´ôôúƶe¬=Bèâ3>Bh´‡|[¯Ønß¹Ó¹sg„›ÍÆqüm|<“É”ŸÀÌÌ Ã0Yðõ°¾Ÿž‘‘Q;Ÿk׮͘1CVxåêÕ=zÔ ô˜«‰še  ÃØ¦¦ò5pØl@@ž\–H$<B¨»ûþ={\–‰>Ï2A|±6„¥…E¿¾}?Þ¿o_r.]ð;w¶ïØñÃ?$§¤téÜùàŽ [£&A£A×_ ×àÁu™hk;;=ÿçÏ?k>Œ>&"¢´¤ÄÊÖVÁìB9Ò¦»³ £200è߯ßêÕ«ËÊËsss7mÚ4vÌ„“ÉìÛ§Oèš5B¡0//oÇÎõM**Û;É1g_çœ}÷Nr¤ëQ”‰TPP°wß¾'O.Y´ˆ fÄðáË–//,,Deee=xð!Ä`0¼båÊââb±XüòåËzEØ€OoÝÚµ¡k×^¿~],———ïÝ·ïÆo¿-]º´®`ŒŒŒ$IºÒ9:h ¾Ûš<˜ÍÏÍ•/ÌáóMMMÉaÇ3ÒÒ2ÒÒîß»çáé)›vµ»¶•©œlá‚û÷ïUVÊ*±µµÝ½kWTdäûwï,y¼AAj»Ç¨d™´x†uíÑ£¼¨èÁ;™iiâÊJqeefZÚ·n}üðÁ/ @ÁÁ*‰DÂ63“½=~¬Q=~üøÀþýŠ GÇvíÛwèÐaÉâÅä”û÷íËÊʲ±µíÝ·ïð¡Cup¼b#ûËìÔ¹ó«W¯þ¸wÏÃõwï^}*ÕÇ×—kaÑÀ€øª®4÷ïÝ«ƒã.nn¶ööÇŽWu„Ý»w¿pîÜþƒ­ll>|xïî]ÛªçÍÖ †ÃáÌ êЩ“¥•UTT”2áUkðÝÖ†††í||®^»&_xùÊ•î=zÈnÇ®ë6íšo•¬ÍÕÕÕÃÓ“¼ý®Zµgá‚qññ ^#e¨õ»ŠÀs´•Fë=p`Êû÷o^¼(,(@YÙÚÚ9:*x¡‹‹KIQQµÂo§O'GÉîbvqqT=T]Q!„Î9S³ËåÞ¸~þýöm3.W-±‘è4ÚŽmÛvTÝÿ.chhxB¹ä²ñ’ÂïÜ©uT­Álß¶m{°5&sZ³fÍÄI“Ølö +ÅâãÇÿvóæßý%ŸÖº8Y¹ü[%k[¸`Á˜±cÉ·999gΞ=j”••UaaáÑ£GÛùø@.Ø:A– €– P(ÎÎÎÎêä3ªŽ*!!Ã0WW×´´´ 6 ÔœØOó#ªRÏœ,))©G¯^d_ýÝ»u;wæÌºõëçÌK¡Pºv½{û¶µuõË.¿¸P‚P¾6ÿÎ]œ£¢£APõõ£££:TPP O¥~Õ­ÛÁªU. ¸æ@½Vh8È2-X~~þ·3fðù|=}ý!+V¬PwD4úùsttü”’"›««¿ÿí[·jVèìä”Çç׬ÜÙÉ)'3SV^m2%k»NŽb2™ÇU¼F²€kÔkņƒ,ЂuéÒ%6&FÝQ¨d™´@ðd^Ð\ˆÆ=Å4 ö¥Koh ËÔf žžž5ûëOLLìÔ©<Úµå"ŸÌÛàG~ ¼Ò’*Þৃ†ùâ ^´Ð޵Aÿþýúé'ù’7n˜››×õ44T~^gg爈‹5}úô ܺu+''gþüù=ò÷÷/,,LMMUÓj/`0 CÝQí)f3spt|õüy‡N8\.¥S@*•ò³³_½xáàèH¥RÕ¨d™ZbòäɃ Ú»w/•J=uêÔäÉ“e£6lØ@§ÓétúO?ý´páÂjYfïÞ½Éyóæ 0!¤§§§««ûöí[///CCC//¯æ\h叿æÂŠŠ7e¥¥â+@¡PL¦­-“ÅÒ××Ww8 ej‰€€6›}ýúõŽ;>þüêÕ«d9†a6UÏ/¶µµÍÊʪ6ã‘#G¶lÙ’ª¬¬D]½zuçÎ .ôööÞ¼ys—.]šqU µ³µµ5ãrE‰Dݱh4Çõôõip SSA–©=&MštêÔ©·oßöë×[uAA©©©d¢™ššÊýüB@0{öìû÷ïwïÞýå˗ݺu#Ë8pà@‘H´k×®qãÆ¥¤¤4ïª@kG£R!y-\ð¡=&Mštÿþý#GŽÈŸ.G­Zµª¬¬,77wíÚµãÇ—%‰$‰‰‰‰H$Ú³gY˜žž~çÎŠŠ ]]]¸*HÍ v´ ttZH ´‡¿¿iii`` ¬Çñ=z¸¹¹988xzz®ZµJ~ ‹eË–uéÒÅÝݽmÛ¶d¡D"Y³f ‡Ãa0'Nœ8}út³®øÙ»º£4™Ò’*=ÍÖZ¹Vyðàü[777²»¢iÓ¦ÕZŽÚ¸qãÆÉáÅ‹#„lllžŸ_óïhªZŽeЂ»paÚ”)ÞmÛbÆb±ÆŒMv¬yæÜ¹‰“'#„¤Réšuë\ÜÜ<½½¯^»faeE>ý—S§ÆŽ¿tÙ2×6m<Ú¶}ð÷ßd…¹¹¹cÇwuwçÙØŒ;6¿ !ÛÆÝ]ÉE±{ï^__k;» '’‹Û°qãÊU«È322¬íì¤R)çˆQ£|÷³«ëƒB§Ïœñ°±·÷ñõ}ôø19ËÁÇÛwìhek;døðœœ•¬h¶è˜OÙۚșsçF³xéRgW×N]º¼ML¾»û˜±cupüÕ‹?,]ºs×.rƸøø¨¨¨Þ={¾Ÿ?wîâ¥KW(¿©ÖÜQØÛÛ¯ <859ùÝÛ·:::Jnõ°k7È2µYbb¢*Οͱw÷î®]»þâÖ¦Íè±cù|>Yëáá!>¼w÷n6›mhhØ»W/Ù!ɸ¸¸óçtíŠrqq‘Uhgg×ÕßÇqc#£Ý»—••‘×<–Y뢳²²Ž;vìða.—«¯¯?$00** !#÷{çѦ,Îysæôüúk„PqQÑ–mÛŽ=êêâ‚rvv¶¶²ÊÍÍݱsçᬭ¬ôtu'L˜©ªO€– ¸¸8õÓ'/OO„P]HLlì :wîL¡PÜ\]ÝÛ´™>m…Bqws“T=<=.>~Þœ9}úô¡P(cÇŒÉÎÎ.++SP¡lSÕÓÕ­uG+Ë}‘r[}Qa!làÚ ®ËÔýû÷ïÔ©Óš5kd%7nܘ9sfZZy¾´heeeYéé"‘„©¹¹µµµl”½ýÏ;wþ¼sgddäØqãö<¸qÄP\\\ûöíÿ}úÔÓÓÓÁÑ‘œXXQáååE¥Ñ‚ˆ‹ß¿o•FC%½ïѦ 9|îüùC‡%½ODyyùžÝ»õ©Ôø„„v¾¾ÔÏrYë¢ÿ}öÌ×××ÚÆ†œ¦¢¢‚Ãá—”ðù|ooo*•ŠŠOHðïÒ…¬-..nÏ®]äð“§O==<ª4ý÷Ù3‘HÔ§ò-AmÛ¶•äÍ‹Mûi B¦££cljjbjŠaX]S)ØäB¯_3 WW ÃêÚ@âââöíÙCn)‰II ‡?$'»¹»“à ׯ'‡…&¦¦üõW]Ê6UTÛŽ‚œfèСä4|>_™­6ðæ£\ÛkrejƒÉ“'¯\¹244TÖtNŸ>=aÂø~[¼ŠŠŠôÔT‡ge¥O¥"„*„š“y{{{{{“GR?}‹Åvvv·ïÜ124$'J¥á÷î-Y¼!ô15U";;;“£"## „ºs÷îæ-[Nÿò‹§§§T*mãéÙÖË+åãGÇm>ÿ«kÑtºlTØ­[ß|óMBB‚££#ùc#‹ÿù矠o¿ý/ÎÊJÙ‘T>ŸoX­ ŸÏ2dÈ©“'ëZº_·nŠ?@4!•æ )ïßK ‚ÃáÔ:Í7ù¨èhOOOro_ë’úéS¥HäääD¾ŽŠúnÁr8&&ÆÛË !TXX˜––Æb±Èòë7nôíÛWA…ò›j­; ©TßÖË‹œFù­6ðæ¡LÛSÈB´ÁСCgÍšõðáï¾ú !”ŸŸöìÙ³„„OOO±XLìÝ»÷§Ÿ~Ò××?þ|@@€º£JÉLKcs¹¶ööâÊÊj?6»vïhçãSYYyåêÕ¿<¸uó&B(::ÚËÓÃ0''§õ6|øðÁÒÒ2$44!!ßÍÍínxx›ªS]_\´o»vëÖ¯ONN¶²²Úµ{wê§O'N|ùâEyY™X,Æq|uHHnn.yZ-::Z> 6mÖ®[íå啜’R)¹¸¸xyznÙº522ÒÛÛ»¬¼üñãǽ{õ’ÿ#^kÎ €Æb0™NNSR˜L&™„U£`“'EEEÉ’¹Z7ù-‹<½îQu";::šüK‹ãø¯/~·páÇ÷íßÿ{X˜2¢:våBayy¹ì†q‚ ”ÙêaoN_l{ª×ej6zôèSU½Z\¼xÑÍÍÍÛÛ[~‰D’–––™™9yòä¥UWyÍ' -x²›<)::Z¶áÔºÈoY111t !$¸166vÌèÑÏŸ?7·°X´dɉcÇÜÜÜ”©Õ±£0 Ó¿>½­‹›BHÉ­6ðf¦¸í©†"BPÕw@Vffì›7½¾ù†|{ëêÕI³f5[4­Ä©ƒõèôQ&R)!•J ‚J¥rà ×ÑÁut®þú«ì‚y5¿—G 4(++‹J¥víÚuäÈ‘ß}÷ü±Lww÷¼¼ Ë@Kdef¾/.*ÒúýisÂ0Œ|,›µMÍ}wYIIÔ«WÎîíÚiÔž½IH¥Ò âÙ3¿€ºBH,ž0¡®‰s²³_>}ª££clb"+Ïbcb<½½­ml´þ “T*ÍÊÌ|õìBÈÚÆF¥Ë‚¶'?1´½æl{õY&Ú@›éÑ:ö§ÍI~ßmck[ml\T”»··…•“ÉÔ¾_z„²·çñx¯Ÿ?ïÐ¥ YP×?ŒBáZXtêÚõõ‹:w–•ÇÇŵõõµµ³S0¯ÖÀ( Ï/ âùsŽ™™ƒ¡ºeAÛ“¶‡š·íÕ d™hƒØ˜¯V³?mN²}÷ë/̸\*•*?6/7×ÕÛ[kæB±¹Ü¼Ü\Ù[ÅGÊMLM‹?zmQa¡…¥e«:¾nbjZR\, UúKm¯h{¨¹Ú^½@– €6(*(hmûÓæDþ€ …ÂjY¦T*Å0L‹æB å³ËþäÚXBBBÈÍÍíÿ'ưjס«£ƒZSË$?U_+ mAÛ«¡yÚ^½@– €6h…ûÓæDî»%‰ºQ?Ù?™ôôôþß|ƒzôð!ÇSf–V¥5®³ŠAÛS’F­3d™h‰Ö¹?ÍŒlfüÜÜ‘£F]¸p!4rÔ¨7npØlųh‘H„ÒÓÓSw ­ ´=ÔÛd™h íÛŸ6§·ïV²™Mš4iýºu;t@­_·nÒ¤I¿ßº¥`žf ¯H$’^½z!„üõŽãê§¶×Ûd™h íÚŸ6§–¸ïV‚@9uÊÄÄ„îѽ{[//ÍO›Ú¥D"™6mƒÉDM6íøñãÐ`𴽨ö(êÐ4ˆú¼ß½337¯×,ÚúK$S§Mc0™ &sê´ib‰¤ÖÉ4VffæÀÙlvµ;“d„BáÔ©SŒŒ¸\îºuë¾X®AAräßÖ5K5ƒ]³F¾ä·›7mlm+++k^H¥Ò9sçæðù—/]º|éRŸ?gî\©TZsÊ|šlÑ¢Ennnt:ÍfO:5??Ÿ,gÈÑÓÓc±XÕfÔ̶—@¥ÑLÙlŽ™™£“Óä)Sââ⚪‘<~üxÀÀ\.×”ÍîpáÂ…&©¶å¶=È2еî›êú-·³³ËÊÌl’Ý_‹Ör÷Ý2 %00ðСCuM°jÕªôôôOŸ>EDDœ>}úüùóŠËûbÖ^ÛüìÙ³äÛËW®¸¸¸xzz6âûT-:¾û矙L¦|!“ÉÜýóÏt:½ÚÄMôíi¢ðððvíÚU+qâDÍ™šÜöª216.ÈÏGQZZzéÒ¥M60 tú’Å‹¯^½Š¢¸¨ènxøšÕ«iTª©‰ÉâE‹jV.0 3%ïL‚¶Wî1@[Ô±ùßøñÃGÚ±m•Jýì·!ÙÀ‚ùóq eh`àþ4p?ŒÁ`Q^^Nþ¨—””0™Lå_VÿæQ× »t155½Ö¾}û—¯^;{Zž&»~ýúŒ3nܸѶm[ùò›7o–””Ô¼(ScÛQcT®@`dlL ”-‹ÛwêTµ@Çq¡>!dÉã‘s‘]ÁW«œ¼I—gbbRß8µË@KÔuE¼ì·üCròËW¯FEÈíg „p742"¢Òh•••j¿é[3_-”………©©idd$ùöÍ›7žžž Ê¿¨Ç“L<~ܸsçÏŸ¿p¡W¯^ç‹•«Qiiið‚………ò…………Á hÍõ œ:ujúôé7nÜèÖ­[µQ‡7n£Æƒ³5¹íUuûÎÎ~~A˜ššâ8ž—þéSú§OiiŸ>~$‚Íf#„ÒÓÓÉé?¥¥Õ¬ÜÐÐÐÇÛûÆo¿}1ÎújÑm²L´„‚T­¿å²YäçU\–iÑûnyB¡ìU^( …Âjc'OžRRR’‘‘±}ûöiÓ¦).W¬鸂¯`ÜØ±=xpòäÉñ|߉J¥êèêŽ5ª¬¬Œ,)++9j”Ž®.•J­6qc¾M ´gÏž… Þ¾}Ûß߿ڨÔÔÔðððš§ËIÛöd£òóó÷îÛwâäÉE‹Á`0†¾lùò‚‚‚ 233ÿzð€,ïÓ§Oèš5ååå`çεV¾víÚÕ!!W®^­¨¨H$OŸ=›5{v+o{e %ì¤jý-G­>ËlÑûny4ÍÛÛ»¢¢‚F£‘g!ŒŒÈ±ëׯ777çñxíÚµûßÿþ7nÜ8Åå_@ˆ òùKÁ>{[Ç,µ¾l¬­ý:u*-+п¿š¯fûÒ Chë¦MNNNcÆŽ-/////3v¬““ÓÖM›°šë¨]‚ƒƒ‹‹‹{öìIvÉ–{¢ã±cǼ½½;tè +im!‰DbniiieÕ¹K—W¯^Ý»{×ÃÝ»w×.ª¾¾o‡<Þ€AƒâãÉò}{ödegÛÚÛ÷í×oèСxmÝttïÖíÜ™3'Ož´wtäY[/[¾¼W¯^­¼íÁu™h‹º÷/äoytLÌ¿å5g©µPÛ‘ûîyÁÁcÆŽýõ„Põ}w Q3 vqq)(( ‡©TêÉ“'OžSGݱ•€,P˜Ÿÿ!1ÑÊÖVWO¯µýÒ „0 «‰>å¾äYZP0uGÓ¼x–Ÿr Ì--[ÏWO~ÝIññÃlìí[ÏŠWŸù |HLÔÑÑ146Vw8 éA– €FHIJ²¶³£àxë|ˆ9A¸ŽŽa:ººêŽ¥¹Qtuq ÃutZÏWO~Ý,cã’¢¢VµâÕÀç@~Övv)IIÞ;ª;Ðô Ë@#YXY­ïgFÇðVv “DűVøÕ3Y,ANN+\ñjàs àxqQ‘º£*Y& I+þ™!éëPZÛér’¾EÚÊN•"„p‚ ZáŠWŸ’HZÛ¥­d™hŠÖ|0ƒ¤‡S(¨5¦™z8¥Õ~û­vÅ«Ïh%È2Ððo^_‡Ò:ϘëëPZí·ßjW¼ø€V‚,MÑ ¯ý¯Fo­gÌqJ«ýö[íŠWŸÐJe )à”™FËL~Ÿ4ü›ž¯S›aYú:pƼµƒÏh%xŽ9š‚hQ’SR:tíÚ´uêãC ~%'%:™­Z¼@ö¶ Wñô®<ÓšÃäËÑÉ)ò]ª2ó6þ¥c þÐ>¦¦~Õ§OƒgWþ{lä‚jÕâš½Šhþç Šo_žº÷¾@UàX&š¢ñ§ÌÞDE9q".>^"ÛÛÛ=ºŸ>M[Md´M{šOoÔ±LC åÞß—,_Éæ˜‘U)¨P~‚/N¬`ÞÆSòŒy|BÂŽÝ») ÏÂbÖŒ_XñxݹÓà/Bñ÷˜òñ㘉ŸýóB¨‘ R@½îؽ»²²R*•&§¤tîÞýÊõë}4|øëÈH²’‹W® >ü«>} vî×_ÉÂZk“J¥eeeë7oî3p`¯o¾Y»q£P(lØ*èã †5ø…aB(hÖœ gN——•‘oÉQ+—|_\\ô4"úeT¼ 7wÇæM »tý&ŽãïR3ߥfzµõ–M,_Ãò¹?._zðØÉ¤OY?yÑí«î5çmLØ #e*–••ŸŸ8p …BA¹»º¶õô”}•òßi¿ÀÀÀ‘##£¢Î_¼Ø/0pà°a‘QQòS’Ã]{ö¬ö=^¾v-päȯúô™:sfê§OR©tvp°T*íÞ§O÷>}îÜ»'›½^J4ûý‡Ï™ÓÅÏÃ0 Ã|}|æÏž-«m@¿~ç/^$ßU•×\ QÇrëÚˆj~2äÊÞ yŠ›SÍõ’oß?7OÎy¶sîÍãÝ›Í>uâÄ©'&¸¹é[2ŸT¦éé´oU*oܼ8i’1má |ûmgg'm€¦í𨉍™!B§Ó•ÿôÓÁÿû«~½~=sÿþÅbÖ³]¨ÁšÎ!&¦“±¸ôNnÞºU¥R}›{¢ `ÞìÙXØÇƒÀ€fªL°®×---,KÀç“äíííç/\Xµ|¹••P x-:úDQþ !±` ¡©“'ßøí7B§ã²Ù\çöíÛíí<;;×ñãÍj tº®Î΢’’7ÿúW;[[[›èÈÈ’Ó§{~“Q.—#„›…þöæ›iÿÚ£Õ¨ñÇû÷îj4š)ž;áɱaóÛ”JÃö¤m’ÄQèµÿ‹üǼÅsCgýT~‰¶}ßžþa›M‡ÍÞóÉ'Á'»w¿xðà_{÷¬XöZÕ•þ}džËb’1'gç„Õ«BÍÍÍÿüì³>úhï®]ú0S6‡ceeegg‡·¨Õ†Cfø¯áÇ£ß~›“›ÛÔÜŒÒh4ƺôhR™ ªGSÅžÏ'¢E©ðù¡¯ssoß¹³|¹¡«ááï¾÷žŸ¯ï•³Xèÿ®ß¨Ñj9ìÿ.éüòËXxòÛoíDÆ2Ãb±ôI5jNóXú’cÁšÈ)Xd|:ÑÆe8úB£F2t¸À#T™`)ôå?ôöÆMøÿï̹s³_zÉP.tp@Éår§Q£ð†ÈÑ‘Ðé¾þ…-lOò÷Ÿäï¯Ñhåç¿¿yó¡/¾0«A(°Ùì¯àñx}Œ¥oeÇ—f°†·Þ~;âÕpüÑAÀŸ7þúÄunÞìààpW.¿öË/S¦LqtjµZycÃèÑ£q_µªûÕét¸{ccCíϵA“'ÛX[ÛÆf³Ù,dØ·÷ÿ‰MW˜:8,Z¸ðwßý?CidLõÛ\G§Ó©<àr¹-Íͤ^J¥rû'Ÿ|²m›ÌËë—_}}õjc:{:©LÓ£ÀùÆ=9~ü…|qúô?û“Ã7vìS®®Å%%ø££ƒ¼±ÑÉÉ ÷hhh‰DØnñÑ£z7ŒíDÆ2CÄÿ&áîÝá8 ½¥g}k*?ÿ7XCe¤éD—Áè³ Fÿ¿úï ÷•W|¤Ò^„`Ía³Y½?™éáîÞÚܬÿxº¤D¿=ŒÇKÞ¹3yçNR—ä;’wìÀÛ , }‹r;öÔÉ“Ts†}ûˆ5ƒs™V\îõë×óikk³¶¶ö–Jÿþ»úeL ÿå°Ù[¹rç§ŸîMK[8þ÷çÏö..Z¸ðõ·ÞrttœzúìYB§sæ½òÊ’eË‹õî›oêµ1ŸTfcïé´îÙgÙ«Wgþûß7of³ÙO=ù䆿ÿd]âééòÄu7nàïÅÇïÝ·oI\\·J%àóCfÌˆŠˆ µK»Ñf†ÐéØl¶L"YüÚkíííÓ¦L1¦“!=êk"Xcù!i01hã"íï)»w/X´ˆÅfO ô˜0õßAxÄ`!„‚PÜ»‡?Ë®ªš>kþøm~~ôÊ•ƒæÝ#Êþ½{­y¼°ÈH¼ëêðC}Ûl6›Ãår¸ÜüÜÜ!!T 0.–FßÇôû“'E¢÷Ü¢h¨¯%,l°½ =fÌ`{14+CtÚßùý÷˜+N?Þ/Ú,'ýsšŠÉÁÁlè_J .Y¢¯'K ÃcbàŠ9Ðÿ@•9ø´·µ]«©éhkCu´·×]»ÖÑÞ>ØN}Ơʀžá2vìÀ_VÕ¸€Ážþ|ìù|±ßÃ7ÌÞþÿyxà%¿€¡ Œ)À/Ðÿ@•9øÀ=|0¦U&ÐÿÀ}™ƒÜÃ÷èÑ‹1Õhµ õõã`<¶£ßõ¸NòPtìØ`»0…Íf žrwaº%T™`¨ÕêÇó…äB†€!„N§»ÿÇW**¼||&ZB•9ø´·µýþÛocÆŽå ÖÑÞ^çÎ..¡p°ýzO¯Çô«œœph!_M\[]ý̤I&Ú@• –¬ û÷îEÍ×iµ:N«Õêt:Vûß-­–Åfs8‡óÝñãŽ"Qks³i…Pe>p_棌)ðhÃf³u:™6ã Ì!B.—1o›n¼|ùò}ûöõÝ(Ö“˜˜(‹G˜»¡Û,¦õ`[úI(ŠiÓ¦1±ÒÇØÛÛÛ·mÛ¦ÿhÌg³þô ˜ç¹wÈårgggc£Ü¿˜žQ}×l zz1^=š™ƒâaô0÷ÐôL0¦§wóÇD¯˜˜ww÷É“'£ ³ ØQ ªL°,ÔjõÒ¥KKKKB¹¹¹ &ß»wï»ï¾‹ŽŽî£Q½ž¤¤¤“'OöQBÈ„³>‹D¢Ó§O›5Ñ÷ØIÇYc>›õgˆV™ ólùô×^ðð4÷‹ž^Œó™9X2×cQcÁ„–––üüü«W¯~ÿý÷hÀÇÂ,=:jaö|‡1 ÊËÂÊÊ*---;;[¡P”——ïØ±ÃDã]»vÅÅÅÙØØèÿ?O áoׯ_ïîî.•JõJp³M›6ùúúº»»755‘ôÐZ¹xñ¢T*•H$S§Nmhh@ݺu+88X"‘Èd²S§N!„’““¥R©T* (++câ3BH«ÕFEEI¥Ò   ¬9))Éð„¢\.‰D+V¬3fLjjª1=b±ØÇÇgåÊ•øüµW]]Ý”)S$‰¿¿mmmbbbpppKK‹L&“Éd …‚Ö[’?Ô¬2ÔCâÈ‘#óçÏÇÛ%%%3fÌ`Ò‹)m’‡r¹ÜÑÑÑtžݘ’2ÆÄB¨¼¼ÜËËËÇÇgÆ XBe&Pg1 gA¤q'é‘Ëåöööþþþ ,xúé§×¬Yc"RÃý‹Ú‹û¸qãZ[[õ}—.]úÍ7ßPõPÇ‚ºWRc_¶li¼¨>“FvfRÇ‹šCê{H3Šö¨EÕCõÕu&0 c½ ¡Z§özï½÷‚‚‚:;;}||&OžL;fÆ´AC¨Gc&sÃA\««»~û¶‰6f âþÝ»ø¯¦ª*7+Kÿ1{Ïèo²÷ìù2;[£Ñ¨S=46‚$¨Gc³sCOöž=Yÿú—²¥¥E¡húã{?œ?þüù .\ºxñ·_½}ãÆnÝjüý÷¬ý«]©<ž®ÿËÍÊ" êÉܬ,ç2ÀÒ°²²ÊÈÈÀ·ò„‡‡oݺÕXËŒŒŒ9sæ >œö[{{{77·¸¸¸œœ[[[½ÜÚÚ:22!dkkkmmmVR©¼sç>Ù6þü~ø¡­­­¼¼üµ×^ÃÚ\\\B•••Ï=÷œD"yýõ×Mœy"ÙâñxXóܹsÏŸ?OÛE xxx¸ººÞ¿ŸVR©¼~ýzHHBhΜ9´½°Ï«V­’Édñññ†ªz„±¬ö›Y³fh4šo¿ýV^Ó4´‘2ñPŸç9sæÐæ™:¦L2Fµ¥T*ûí·àà`„>(&£L”4댵$Í(Ò¸Óê6l˜£££½½½P(T*•Æ"%i&õ¢ÆxéÒ¥/¿ü2&&F©Tj4š‘#GRõÐŽ…á^ÙÝÝm6vªÏ´{¥Ùñ¢FJc9£Œaè!ÕÚØÍ7h£ íe6‡f{Ãìјä!ÃãéhÌdnãæ­[AÈd²±ÎÎjµú¾ÁÙz†@• ‹ÅrvvÆ,‹EÛF«Õ~úé§«W¯ÖwÁo°Ùì²²²E‹}ýõ×áááúŽ<Ïðw’ªE‚Áí8*•*""b×®]ÕÕÕ_ý5~êê9Õ)jZ¹••þVï‰i=Æz±ÙìŠŠŠªªª+W®TVVöÈ=Ʋj–ßÿ_œÚ¾};–¼úê«yyy%%%~~~B#ïR¥ö2‹Y™ ¨^)c$hm™Î¡±oIš:I ¤q7«ÏUj¤¦ç˜N§£ÆXVVöã?úøø;vìÙgŸ5«Gïžá^É0v&ó™Ú…:^f÷¦‡7£¨G-ZH2Ü{zÜÀͨ½˜Ìyj/†˜=“<¤µNòöh̬ÇPróÖ-µZííãÓÖÜÌb±žøË_º»º--=ŠªL’äççËd2WWWüQ(vtttvvêï*ëîînmm Y·nݵk×êÁª:;;•J%þèàààââR\\ŒOš4‰Ïçûúúfdd „4M}}½Z­Öh4ãÇGeffÒ꡵ÕÙÙ‰5õ.v@àæævâÄ „þN8|>ßÛÛ;;;!¤Õjñ¯2ÇëèèP©TÆb§B›Uª*cÇŽ­ªªªªªÒ?Î5}úôÊÊÊ}ûöEDD0ìÅ$RZ óH›Ò˜ÒfŒäÕ–@ puuÅ7ÆåççS­e’fꬣíEQ$˜è¡Ô¬fjìÞÞÞÕÕÕA¼òÊ+[¶lÁy6=çiÇ¢w>SGQf&íÜ0»7=¼E=jÑBòêmìfõ0‰1˜ó ar”0ë!­u’‡Ô£1“¹¡×£ÿ¨ÕjÙl¶ŸŸ_{k+®žY,Ögg‹e7lóÀá}™0$Ù±cÇ®]»ômllâââ¦M›¦?Vvvv†††ªT*­Vkâ²;IVµfÍ//¯#F”——#„233W¬X¡ÓéD"QNNBèÀË–-ûôÓO9ÎÎ;§OŸ¾qãFooo'''|­VÕ–P(ÌÌÌŒçóùyyy!™L¦Ñhðménnn»wïfâsFFÆ’%KÖ­[ÀåÒÖrrrbcc“““ ‚X²d‰···@ ˆ‰‰‘Éd"‘¨  `øðáTŸIþ¤¦¦R³JÕc,Û†p8œÙ³ggeeáß]†˜”vÜõy¶··§ÍóáÇIc:fÌjƘØJOOåp8>>>$ëúQfuÖQ¡Î„Þé¡FjV35v.—;fÌÿ©S§Þ¸qï‰&æ¼~,˜ûlx&˜ê3uI3!D/³{ÓCQ¤£­’‡´þlMœ8‘šÕÞ †ÇU*LŽf=dbÝÞÞžz46;7¨þp8œ'Çëhk3^N€ä±’À`Ñ£ß2&ç2Y¸ÊTÜ»‡+NycãÏUUÓgÍ¿ÍÏ^¹²WÕ0`”ý{÷Zóxa‘‘„N÷¿‡ƒm6›Íár9\n~nîŒ?Wˆ2ÆÅÒèû˜;öJXØW990²À Ð£ß²Ùóæ:ôbh(î[RX¸pÉ}=YRXWÌ€þªL ÿ*è Êú¨2€þªL ÿ*è Ê‹ƒ ¹\>bļMÛæäÉ“2™L"‘xyyS¥P(¦M›Ö/^ÅÄĸ»»Ož<™ª911Q,c‡-–ööömÛ¶1l,—Ëiå&Égcy6;Ê=Š`˜ìï0D*, µZ½téÒÒÒR„PnnnBBµF£‰ˆˆÈÍÍ­®®þñÇ===i‰D§OŸî»W---ùùùW¯^ýþû署“’’Nž<Ùˆ ýY IDATw+•¡Xi‘|6–g³£<cL`²¿ÀЪL°,¬¬¬ÒÒÒ²³³ EyyùŽ;¨mººº”Jå¨Q£B<ÏÍÍM.—;::FEEI¥Ò   ††„PRRéÔ×­[·‚ƒƒ%‰L&;uêB¨®®nÊ”)‰Äßß¿¶¶–Ö¥÷Þ{/((¨³³ÓÇǟˤj¦ÂDsEE…X,öññY¹r%>wHê%—ËE"ÑŠ+ÆŒ“ššjL3>´iÓ&___ww÷¦¦¦ääd©T*•JÊÊʃƒƒ[ZZd2™L&S(´zÊË˽¼¼|||6lØ`,.­Vk˜çS§NM:U^^.•J™DÊ$.ZŸ©PÇbýúõîîîR©O†z€AÉþCÖ1X`óG~\ÇüÁƒ111yyy"‘èàÁƒ ´cbbFõÕW_áuBEEEA¤¤¤DEEáfúõ‘1©©©A¨TªÛ·oPZZJÄwß}l,@’ª„Ú€‰f//¯ÂÂB쳓“µŽëêÕ«¥¥¥b±Ø˜æÆÆF‡³ÿ~‚ ºººT*U}}=n|öìY___†Nœ8±¸¸˜ ˆíÛ·c¨yÐç999yñâÅ:ÎÍÍíÆA¼þúë»víb)ó¸L§*lmmµ³³ëîî&B¡P˜èX ÷wú}sî`–·P°²²ÊÈȸ{÷.B(<<|áÂ…´Í233+**ŠŠŠÖ®]ûÃ?ÄÇÇóx¼3f „æÌ™³k×.j—¶¶¶òòòsçÎ!„¬­­]\\°dÕªU!NÇápú+ &š•Jåõë×CBB°Ïü1m/@àááÑØØxÿþ}š­­­###B¶¶¶¡ÊÊʰ°0¥RIDSS•Jåo¿ýŒš?¾±³Jú<Ï;w×®],+666+++11ñÈ‘#IIIL"eWO±··wss‹‹‹›9sæ¼yóz§0îï0D*,‹åì쌋‹e¬™¯¯¯¯¯ïìÙ³CCCããã ¿"?CÀf³+**ú^_RýìfR/¹\nee…õ냢ÕÌãñØìÿÞ¤R©"""Μ9ãããSWW§bÉ´-¥Ri"Û´àö111AAA'N|á…„B!þ 㢵h6›]VVvúôé´´´ƒ=z”¡?À`Áp€¡Ü— C’¢¢"¼Q]]=zôh„Pgggqq1B¨   00Ú…Ïçûúúfdd „4M}}=ŸÏ÷ööÎÎÎFiµÚÊÊÊ^û# ;;;•J¥Þ–YÍÀÍÍíĉ¡o¾ù†a/&mÔjµF£?~#Jž©tww·¶¶†„„¬[·îÚµk´± PeÀ$%%ÅÝÝ}âĉÿüç??ÿüs„P(ÌÌÌ”J¥yyy[·nEÉd2ýc ,@8p 77W"‘øùùá$''';;[,{yyá≠TÍ666kÖ¬ñòòòóóÃm˜hÎÈȈ÷ññùå—_¸\.Ã^fÛØÛÛoܸÑÛÛÛßß«E ‚˜˜™L„¯¡Sõ¤§§¿ýöÛÞÞÞW¯^5»>χú裰0**ÊÆÆfÊ”)ÆzQ#eÕgjžIcÑÙÙ*•J£££ñ4 Õ0Às’~”ËåçÀ†Âªª*R¯ñãÇ“^…ãæævöìY³æôWôŒiF½ÿþûï¿ÿ~4»»»×ÔÔ „>|ûömÚ^Ø.~.Û˜f’{¡µk×®]»oðÁxcÏž=†m¨zžyæ™+W®˜pØÙÙ¹¹¹™*ÿá‡bccM\î$EªwØt\TŸ%ÏÔ±¸téÕª€‡ T™ ………6làr¹øRþ£««+00Çã?~ÜD³G R€žU&< POæ ÂÂÂÂÂÂÛ‹>aggÇä~ÖG R€ž÷eýT™@ÿU&XAà%QOÞ|I‹B¡˜6mZ?ùEƒ\.Çϯ˜^m²ßéǸbcc9Ÿ——çéé)‹ª««±0==ÝÃÃC,Ëd2ÚÕÃi{ݺukÒ¤Ib±xîܹ´’àà`¼ä„ ©š{ç“'OÊd2‰DâååUPP —˹\®···——×öíÛ±f.—‹­ûùù9s¦V€ÞÑû;XPe€e¡V«—.]ZZZŠÊÍÍMHHè‹6‘HD[ uú+®ãÇwuuûö©§žºpáBMMMBBÂòåËBûÛßN:USS³sçÎ×_I/„ÐêÕ«—/_^SS3~üøäädZÉÉ“'«ªªªªªV­ZÕkÀh4šˆˆˆÜÜÜêêêüÑÓÓ!$ +++/]ºtþüyü’N¡Pˆ­ÿóŸÿ¤ xôïþ–T™`YXYY¥¥¥egg+Šòòrcë®_¿ÞÝÝ]*•âr¹ÜÑÑ1**J*•544 „’’’Äb±áÙ¯[·nK$™L†_?^WW7eʉDâïï_[[ËÄB¨¼¼ÜËËËÇÇgÆ X¢ÕjIÖI9rdþüùx»¤¤/ÒHµŽOêlÚ´É×××Ýݽ©©‰j×Å‹¥R©D"™:ujCCƒ\.‰D+V¬3fLjjª±T·´´lÞ¼ùÃ?4ÖÀ×××ÁÁ!$“ÉpP¶¶¶£GnooG)•ʧžzŠI/‚ Š‹‹qáqüøqªÄPCVVVtt4­K¤<Ÿ:ujêÔ©ø«òòr©TJíÒÕÕ¥T*G…âñxnnnú¯lmmßyçýû÷¶ÇsÉXN€þ…áþC¨2À²P«ÕqqqÑÑÑ"‘ÈÏÏoÍš5Ô6J¥rçÎW®\¹|ùòk¯½†…---ÑÑÑ—/_^°`Á{gJLL$½3222<<¼ººúÒ¥K¸ÚˆŠŠÚ²eKuuõæÍ›ßzë-†¶bbb’““úé§ &¬ÿÏÿüþE•†Ìš5ëÂ… ¸>ËÍ͈ˆ0f½¥¥ÅÕÕµ¢¢âòåË:ŽjWLLÌŽ;ª««CCCqÆšššV¯^——G»¤;æ­·ÞJLL6l˜±z233ñËç9Î×_=uêT—üãYYYLz577[YYݽ{÷¥—^9räþóªDß«ªªª­­í¹çž£ÕIÊó´iÓêëëoÞ¼‰ÍÅÅÅQ»ðùüE‹yxxDGGçç瓮Ɏ?þÆX³L&7nÜòåËáåš“ý†.Pe€eaee•‘‘—Þ×/ßbˆ½½½››[\\\NNŽ­­-òx<|‚pΜ9çÏŸ§öjkk+//Çµšµµµ‹‹ –¬ZµJ&“ÅÇÇÓ¾ ‰jK©TþöÛoÁÁÁ!ýéI½õ¹sçÒZ·±±™5kVAAF£ùöÛoçÏŸo̺µµudd$BÈÖÖvøðáÔHI(•Ê;wî`ëóçÏÿá‡BÀÃÃÃÕÕÕØ žŽ;¦R©^~ùeÚo )**:zô¨þEèK—.Ý¿ÿ;w–,Yb¢& õB¹ºº?~ÜÚÚÚ„!”™™¹xñbcjIyf±X±±±YYY*•êÈ‘#Æ:fff?~üé§Ÿ^»v-隬þMòøŠùíÛ·×®]›””dÌ a²¿ÀЪL°8X,–þý—´ËɰÙì²²²E‹}ýõ×áááÔÌŸ!`³ÙUUUW®\Áï}üý÷ßñS ø¹Z[&¹1ñí«¯¾š——WRRâçç' i­#„x<›Íf©±`­¬¬°'ÆRqæÌ™K—.yxxLž<¹¥¥…öZ3B¨¦¦æ7Þ(((àóù¡–––_~ùWØaaaÆî %õrttT«ÕøŸúúú'žx‚*Á‘I›ç¨¨¨Ë—/O™2ÅX¯”””7ÞxƒËåòùü½{÷"„ZZZ¼½½µZí¢E‹–.]z÷î]œO‚ x<Ü— @¿U& =†~éÒ%’Ãá8pÀPRUUEj3~üxÒs3nnngÏží©­gžyæÊ•+†’ææf&žïÞ½{÷îÝ&¬“–ʤµNëÙgŸÕŸŒÄ`%ø]ž¦]"Y4üHòóòË/Sïæ4ÛëÉ'ŸüñÇMKBÇŽ3í*mžøá‡ØØX[ IFCÒL’ô¨2†*]]]<ô.$KªLx ìììhïg°àé ÿ*è Ê‹ƒ ¼Ð"êÉ›/{B¡˜6mU.—ˆŇ§ùaØ2–Ÿ~§½½}Û¶mú‰‰‰¤…4úCÒð׀¡ŸÛ$ =d;m¤CŽÞß` *, µZ½téÒÒÒR„PnnP${»8€0?¤š)))‰ôB†þÐÖ^–?ʆ2Œý¨2~€ªL°,¬¬¬ÒÒÒ²³³ EyyùŽ;¨mär¹££cTT”T* jhh@ž"Ú´i“¯¯¯»»{SSÓÅ‹¥R©D"™:ujCCÑ#Gô B–””à… “’’H'ÊË˽¼¼|||6lØ€%uuuS¦L‘H$þþþµµµ¡õë×»»»K¥RZ÷0ÉÉÉR©T*•”••Q5ÓúCê%—ËE"ÑŠ+ÆŒ“ššŠߺu+88X"‘Èd2ürxª‡Ô(¨¢ Í*5?L¬SÇ‹©Wbbbpp0~i¥L&S(´>Sý!EA«‡Ô‹ÖŸŠŠ ±Xìãã³råJcg©±SÇ‹šCêLÐjµfól6vj¤§Nš:u*þ¶¼¼ÜØzN“ý†6AÜ¿{ÿÕTUåfeé?fïÙCýMöž=_fgk4õƒº»»»ºº:::ÚÚÚ[[•--­MMm--ííªîî/³³õcaøãbiô}L¤§·+•Ù{ö•˜˜˜   ‰'¾ð Æf¸¥ÑÓý†p_& I:;;‹‹‹BÔ...¸M~~þ¤I“BÓ§O¯¬¬Ü·o_DD­Z@àêêŠo¹ËÏÏGñù|ooo¼ò¸V«­¬¬ìîînmm Y·nݵk×hõ¨ÕjF3~üx„Pff&­fª?Ô^Tø|¾¯¯/^@\£ÑÔ××S=¤µE‚6 ³YebÖUµÇëèèP©TúfB¡°³³S©TÓCUY››Û‰'Bß|ó1ŸI±ÓŽ)‡fÛÑš3;m¤ÎÎÎ^^^ï¾ûnll¬^xÿþ}<ÿ` Ê€!‰P(ÌÌÌ”J¥yyy[·n¥m“™™/‘HŽ;†¯Gs8œÙ³gŸ8qböìÙ¸L&Ó?B±`Á„PzzúÛo¿ííí}õêUÜ&''';;[,{yywvv†††J¥Òèèhc¦ííí7nÜèíííïïÏåþ÷š U3ÉÚ^T8››+‘HüüüpiEòÖ Ú(¨Y¥æ‡‰u&P{ ‚˜˜™L„¯,ÛØØ¬Y³ÆËËËÏÏv¼h£ ê¡FA%###>>ÞÇÇç—_~1–|Rì´ãEÊ¡é6‡úè£h=4;m¤¡¨¨(›)S¦èÝÖh4uuu Ç€~„…"Bqïþ,olü¹ªjú¬Yøã·ùùÑ+Wšw(û÷îµæñÂ"# ŽÐétAèt:ƒm6›Íár9\n~nK£ïcZtìØ+aa_åä0Y¹\.‹aIÉþå1Ïj{{»½½=Bèðáý[Ýr˜àèè¸nݺAô†(=ú-›=o^Á¡C/††â¾%…… —,Ñד%……á11p_&€ 7lØÀårðeñ!GWWW`` Çë]‰ @¿U& =ôÏ ýÈcžÕ°°°°°°>*ÜÚÙÙ1¼/€îËú¨2€þªL°8‚ÀËE"#om”Ëå\.×ÛÛÛËËkûöíî £õ£iÛ(ŠiÓ¦ ¼?ú|šîÕÇu±—/_¾oß>Ó’¾@ÅÆX~ð —ýIZZš±9ÿæ›o6¬»»Û˜æ“'OÊd2‰DâååUPP ×ìéé„ß°jÕ*±XŒåX¹V«MHHH$žžžsæÌ¡úÃ$ †˜Ýß`èU&XjµzéÒ¥¥¥¥¡ÜÜÜ„„ÚfB¡°²²òÒ¥Kçϟǯ]Hz]eŠD¢Ó§OŠ?Lzõ¥Ê¼wïÞwß}mBb:?B¡°êO–-[†ŒÌùÂÂÂ矿•ªY£ÑDDDäææVWWÿøãžžžz͵µµ‹-ÂË/}öÙg'OžÄr¼Ç}øá‡ííí—/_®­­ýðÃiýa…Yîï0D*, ++«´´´ììl…BQ^^N»:¢[[ÛwÞygÿþý¡‹/J¥R‰D2uêÔ††„Э[·‚ƒƒ%‰L&;uê”þ|‰\.wvvÆöööþþþ ,xúé§×¬Yƒª««›2eŠD"ñ÷÷¯­­•Ëå"‘hÅŠcÆŒIMME%&&ê_[(“É B(99Y*•J¥Ò€€€²²2Ú6IIIb±ØðlÉgª-Z˜Ø¢B„é(¨¹\îèè%•Jƒ‚‚pV‘‘·|ïÚµ+..ÎÆÆ†*7n\kk«^¾téR‹eVBûvt­VKòë¦M›|}}ÝÝÝ›šš¨3ÚfýúõîîîR©T?Áz7¤9F«‡:Ǩ«¨¨‹Å>>>+W®Ä“Ó†sþçŸ>|xXXiÑ#½æ®®.¥R9jÔ(„Çsss3lbì=š{÷îݸq#^IËËËË„?Ôqï=Úß`Hb¸ºyMUUnV–þcöž=¶FûãCV£×…ጋ¥Ñ÷1=žÞ®TfïÙóàÁƒ˜˜˜¼¼<‘HtðàÁ„„ª¹ÆÆF‘H„·oß¾=nÜ8‚ <<<ŠŠŠ‚ؾ}{dd$A©©©A¨TªÛ·oë{566:99á [[ÛÚÚÚaÆ]½zÕÝÝ ˆ€€€ÒÒR‚ ¾ûî»àààÆÆF„ÐÕ«WKKKÅb1ÕL}}=Þ8{ö¬¯¯/mªä3­-* m‘ì2‰‚$Á½°‡)))QQQÆ:vttŒ;V¡PÐJ.\X\\ÜÒÒR[[K„§§ç´iÓÌJîÝ»Gö'99yñâÅXÈápöïßODWW—J¥¢ÎR›?þøÃÎή»»› ½Ï½ Ò£ÕCcÔŒyyyâ<;99a‡¥R\\L;ç?úè£ÄÄÄ;wîŒ;ÖØXÄÄÄŒ5***ꫯ¾Òét†z6mÚ4kÖ,ê˜677óù|RæIþ÷žÂd€£G¿eíJåôtý¯XnVaPOæfe!x“XVVVwïÞE…‡‡/\¸Ðt{¼ð±R©¼sçÎŒ3BóçÏÿüóÏÛÚÚÊËËÏ;‡²¶¶vqq‘ËåÔîÆ stt´·· …J¥÷—u:^e[ xxx466šxIMeeeXX˜R©$B¿ ‹i¨>?<[ 5SáñxØÃ9sæìÚµ ©ïëÉÈȘ3gÎðáÃi%—.]º~ýzfffqq±F£™3gŽYÉÈ‘#Mø3wî\½?ÖÖÖ‘‘‘![[[Ú¬’ÚX[[»¹¹ÅÅÅÍœ9sÞ¼y¨·cAc´zHsŒš¥Ryýúõœç?þýy…ZoËpöêû>vìXRRÒØ±cy<^UU•L&£ŽEfffEEEQQÑÚµkøá‡øøx|ºZ­V»»»ïÝ»×ØÐ“ ùC¢wôt€¡T™`q°X,}£ÿA5Æ­[·\]]  èUi4Ú:!Äf³+**p}‰’ËåVVV¸»1+*•*""âÌ™3>>>uuu“'O6ë 2ò ÃC²ÅDsïFiµÚO?ý/N+ ܲe‹ƒƒƒÏ±cÇž}öY&³þè”Çãák»&œ4lÃf³ËÊÊNŸ>––vðàÁ£Gön,¨˜m‰ç5c=Ïy…BQVVÇf³ïÝ»wìØ1™LF«Ù×××××wöìÙ¡¡¡ñññ´õ¢!B¡ÐÎÎNc‰1ú…žíï0´€û2`£R©RRR/^ìàààââ‚—ÃÎÏÏŸ4iŸÏ÷õõÅ‹¸h4šúúz¡PØÑÑÑÙÙY[[kL!ŸÏ÷ööÆVhµZcï¸æñx*• T«Õfüøñ¡ÌÌLÚ6T¨>3 ¹w¶˜DA+éììÄb!é¾Ìüü|™LæêêjLâíí]]]MÄ+¯¼²eË–ÀÀ@&Z[†þQƒb’ÕîîîÖÖÖuëÖᇬ™…¡?Ô9ÆP)?ÀÍÍ —k´w£¢ŸóÇ饗~ýõ×k×®}ùå—øÖLêXáêêêÑ£G›V®'66öƒ>ÀEsuu5“( ç2`HÒÒÒâíí­Õj-Z´téR„PffæŠ+t:H$ÊÉÉA8p`Ù²eŸ~ú)‡ÃÙ¹sçôéÓãââ¦M›¦¯`hÉÉɉMNN&bÉ’%´Ï ‚˜˜™L&‰ †¾qãFooo''§?Wi§¶‘Éd_¯tss;|ø0Õg³ØÛÛ3±ÅDµI‚ …™™™ñññöööyyy¸£F£1|jdÇŽú‹×´.—;fÌÿ©S§Þ¸q#00‰„Ö–Þ>Ÿ¯÷‡„Ù¬vvv†††ªT*­V»uëV†½hý!ͱ1cÆ0ÑCÍXFFÆ’%KÖ­[ÀårBxžàoÃÂÂbccIs><<_šG=ÿüΙœ IDATó555wïÞ¥jNIIyã7¸\.ŸÏ7v}|ÕªUgÏžÅ###6mÚ´f͉D¢ÓéÜÜÜRSSIþ$&&Rm@‚…"B¿º¹¼±ñ窪é³fáßæçG¯\9hÞ=¢ôh5úþŽãbiô}L‹Ž{%,쫜YËA.—‹ÅbÓ÷qž;wîÿø¾7ј0„6?íííööö¡Ã‡gddôn!òÌ<Œ2ðHң߲Ùóæ:ôbh(î[RX¸pÉ}=YRXç2zÏóÏ?O*5¨ÀÚünذËå:88àKðý¥ù!£ L€*€ê³äÀC",,,,,l°½ Ÿ§€þªL ÿ*,‚ ô«Aâw©€$ y|$ðÈU&XjµzéÒ¥¥¥¥¡ÜÜÜ„„€$¤ß%`!°ŽùÀë˜?zôã:æA¨ÕêÐÐP„P||<Ö€äñ‘À`Ñïë˜Ã¹L°,Ôju\\\tt´H$òóó[³f H@’ÇG2ØG èo8—9°À¹ÌGþ=—©ÓéE"Þ H@òXI`°è÷s™°öÏ kÿÒÞÞ¾mÛ6ýÇÄÄD±XŒ'O"%éé111îîî“'Oî]wL/ÆB\.wvv[0‡;ØðÀ+ÎáusssËÊÊvìØ1ØNY:B¡°ªª !tþüù¸¸¸ÚÚZ†E"ÑéÓ§™Òh4¥¥¥îîî †Ö?ÿüóU«V•””|öÙgr¹\,c9BèÃ?loo¿|ù2›Í¾råŠa¯>‚«CýÊ„IIIo¼ñ†X,îi¤$=ÌiiiÉÏÏoiia³ûtÚ¢§c1TlÀã œËËÂÊÊ*---;;[¡P”——C‰Ù#är¹££#B¨®®nÊ”)‰Äßßb±ØÇÇgåÊ•ø¼WRR’ái?¹\.‰V¬X1f̘ÔÔTZý]]]J¥rÔ¨Q!çææfømHHH]]mǽ{÷nܸ×a^^^ c¡úCŠ+11188¸¥¥ŸU(´ªH‘"„Ö¯_ïîî.•Jñc¨çâÅ‹R©T"‘L:WØï½÷^PPPgg§í¹L¹\nooïïï¿`Á‚§Ÿ~W±ÉÉÉR©T*•”••Q=d2¡òòr///Ÿ 6Ðæ‡)m6Hsƒ¡uÌç2À²P«ÕË—/ŽŽ¾p႟Ÿßš5kþò—¿dggëØØØ¼ú꫉äâÅ‹æ†B¸ùäÜ+11166Öð´_SSÓêÕ«£££W®\¹|ùrª!>Ÿ¿hÑ"™3gÎ;wÞ¼y†ß~ñÅÔ“ˆØ½ÎÎNÒ%]ì3ÞÞ±cGpp0µ#Õj\øÌ¥éÓ¢¤H•JåÎ;›››mllšššÁPÓzbbb>ýôÓ3fìØ±cÍš5_|ñÅÇüöÛo›î¨Õj³³³Ÿyæ™òòò¹sçnÛ¶íÕW_}çwBçÎûë_ÿZ^^Þ‹±Àþ|òÉ'ÁÁÁú ’”Ÿ¯¾úŠ)5!êÜ0k=%%Å¢ö”Þã ®n^SU•›•¥ÿ˜½gÏ ­Øþ(Ó£Õèõcaøãbiô}L¤§·+•xdu:]cc£H$ÂÛƒœ¥£ÏA[·n]¸p¡R©äp8øl™D"‘Éd­­­<·¹y󦓓µocc£@ ¢¡¡ÁÙÙÙ„Åòòò-[¶¸¹¹½ûî»Ø–§§ç¼yónß¾MÕÜÜÜÌçóùl".’?Ô¸hUÑ*7jµZ‰DõÅ_ttt0tÉ0‡7nÜxòÉ'™tÄß666:99566þå/!âØ±cb±xâĉXBô|,Hþ899QóC)Éun0Ÿ ðˆÑ£ß²v¥ò@zºþW,7+‹0¨'s³²œË „Åb9;;ß¿o?ªgMÆ™•°°°Ï?ÿ!Äf³+**8–+•J&Ý­¬¬B,‹0ùЕ¯¯¯¯¯ïìÙ³CCCãããÍÞa) íììzú„ ­?¤¸ha±X¦Õ²Ùì²²²Ó§O§¥¥¢ËÏÓO?M”ª§sãÞ+ *€!¾Ç‘ ·gÏ„PNNNlllrr2AK–,ñööÎÈÈX²dɺuë¸\.BH&“i4Ü×ÍÍm÷îÝLl¥¤¤¼ñÆ\.—ÏçïÝ»—¶ÍªU«Îž=‹5GFF&$$lÚ´iÍš5‰D§Ó¹¹¹¥¦¦Þ—–˜˜ÈÄ:5.@#“ÉD"QAAÁðáÃmllÖ¬Yãåå5bĈòòrj¤©©©¡¡¡*•J«Õnݺk¦ê¡ZÏÌÌ\±b…N§‰D999L¦boo¿qãFooo''§,ìÝX¤§§ÇÆÆr8ÚüŒ7Ž)ÉÖáÇ©s€~v'†6ÎÎΆ$tss;{ö¬¡ÄÝݽ¦¦!tøðáÛ·o#„¨—¹ñ] ø)ccæ i{òÙgŸ‘$VVV)))†ªÏ$ôwMúC !„ kCÞÿý÷ß_ÿ‘é¥K—¨©zH<ûì³—/_6æ'-úoqøßµk×®]»7øàƒh=d2Ï<ó ~-”j~¨‘Rm‘æmæèPeðXPXX¸aÃ.—ëàà‘‘1ØîÌ xH@• ÀcAXXXXXØ`{X"07à!oeú¨2€þªL°8‚Ëåx<Ú×õé¿í …bÚ´i}òoÈò8Ç0ð@• –…Z­^ºtiii)B(777!!¡õ‹D"¼ãcÈã;ÀÀU&XVVViiiÙÙÙ …¢¼¼\¿@3 ­V%•Jƒ‚‚BuuuS¦L‘H$þþþµµµ¡ŠŠ ±Xìãã³råJ¼êLRR’X,ÖŸ•Ëå"‘hÅŠcÆŒIMM¥5täÈ‘ùóçãí’’’3f „nݺŒñ;uêm›õë×»»»K¥Rc!P}þý÷ß=<<ð»câââ¶mÛ&—ËI‘&''ãUÊÊÊh£ Z'ÅŽºxñ"^ŠpêÔ© L²Á$ ïjjjÞ|óÍ¿ÿýïTÍÔ(ìííýýý,XðôÓO¯Y³†VsPPPvvvWWs÷Ö1X`óG~\ÇüÁƒ111yyy"‘èàÁƒ Ts¡¢¢"‚ ’““/^LD@@@ii)Aß}÷]pp0A^^^………A¤¤¤[¹!tõêÕÒÒR±XLZww·³³s[[AqqqéééA¦¦¦¡R©nß¾MmÓÚÚjgg×ÝÝM„B¡0–7ªÏùùù!!!‡ž1c^Ï]iJJJTTAõõõ¸ûÙ³g}}}©Q³NZqÛÃÃkÞ¾}{dd$“l0Œ¢££#33ó¹çž{á…öïßãÆ ªfj¶¶¶µµµÃ† »zõª»»;­æ+W®¬^½z„ ûÛß®\¹ÂÜI³À:æðˆcee•‘‘q÷î]„PxxøÂ… i›ñx<|Êpîܹ»víjkk+//_µjBH§Óq8¥Ryýúu¼¶Êœ9s>þøcZ=ÀÃã±±ÑØ‹µmllfÍšUPP°páÂo¿ývÛ¶mØÖ¹sçBÖÖÖ...!R{{{77·¸¸¸™3gΛ7V3Õg„мyóNœ8ñ·¿ý­²²¯R­tΜ9»víBUVV†……)•J‚ ššš¨Q0±®T*ïܹƒ5ÏŸ?¯~n6 £=zô /¼ðÅ_àuår9U35ŠaÆ9::ÚÛÛ …B¥RI«Y"‘$''oÛ¶-77wÊ”)6lxûí·º 0À@• ‹ÅÒ¯>‚+-³íBl6»¢¢×"!¥RÉÄ–••Ö@Ð=f„yõÕW?ÿüs‘Häçç' ÛÚÚ̶A•••>}:--íàÁƒG¥ÕLò!¤Õj¯]»Æãñîܹƒ¯òB„J¥Šˆˆ8sæŒO]]ÝäÉ“©Q°Ùl³Öiãe’ &QäææîÛ·/<<|Ñ¢E‘‘‘TÍ´Q¢Óéh5qîܹ¬¬¬Ÿ~ú)>>~Ñ¢EÌýèZ¦Y¡…lK«Õ¶65 ‡çôdV¸/†$ÅÅÅ¡‚‚‚   >ŸïííÒjµ•••ÀÍÍíĉ¡o¾ù¦/¶¦OŸ^YY¹oß¾ˆˆ„ŸÏ÷õõÅK¤h4šúúzj›îîîÖÖÖuëÖ]»vV-Õg„ЦM›|||¾þú똘\(F¨V«5 >G˜™™I«™‰u¬9??Ò¤IÆÂ7ýD?m3gÎ<|øpAAAggçäÉ“ÓÓÓI½˜DA«ÙÃÃc÷îÝUUUëÖ­5j”1Çúˆ²µõnc£²¥!ÔÖÚzO.okm푨2`H" 333¥Ré¡C‡>úè#„PNNNvv¶X,öòòÂÅSFFF||¼Ï/¿üÂårB2™,88¸¥¥E&“-X°€¡-‡3{öì'NÌž=K8››+‘HüüüpGjÓÙÙ*•J£££·nÝjL3Éç3gÎ|üñÇ^^^+V¬ˆ‹‹3Œ4//oëÖ­ööö7nôööö÷÷çù/5­ujì™™™ñññ‰äرcÛ¶m3æä;wd2™‰üP3qrrúûßÿ^[[ûÊ+¯º0‰‚Vó÷ßèС_|‘ÉIn€¾ pppúË_B!Bˆïà0ÒÙ™ïàÐ# ,„AŠ{÷ðgycãÏUUÓgÍ¿ÍÏ^¹²_}Ðþ½{­y¼°ÈHB§#t:A:Î`›Ífs¸\—›Ÿ›;#$„ªÆÅÒèû˜;öJXØW99ý8²íííööö¡Ã‡gdd?~¼¿4r¹\,3¿Kòa°eË– &0/ʆ(=ú-›=o^Á¡C/††â¾%…… —,Ñד%……á11p_&<²nذËå:88à Ü@/X·nÝ`»0ôý¾L¨2à‘%,,,,,l°½èú§ €ß—‰::âû29ލ'·ƒC• 88h5ý}™Z­¶§÷eB• áp¹¢‘#ñ}™g¸HÄf÷ì©qxÆ, ¹\Îåre’––†Š‹‹srr2ñ>=±±±&šÝºukÒ¤Ib±xîܹ´mÌÚÊËËóôô‹ÅÕÕÕÆšQõP­÷N ZFñÇZ­!¤Õj› ¼Í¨2Àâ …U²lÙ2„PdddII‰ÙŽÇ7½ÂõêÕ«—/_^SS3~üøäädÚ6fm=õÔS.\¨©©IHHX¾|¹±fT=T뽓¼/ ¦NjöDfKKËæÍ›?üðCc ‚(..ÆKVFDD{±‘Y[¾¾¾!™LÖÐÐÀÐgªõÞILæè7úþ¾L¨2ÀâÀoÇœú™™™Éü-’T뽓ôÑg€!ø¾L¼È-¾/ÓpÁ[&ÀÓ?`qà+æ=êrìØ1•JõòË/ËårÓ-]]]?Þ÷r­¨¨èèÑ£çÏŸïQ/ªõÞIËÎeÀ£À™3g.]ºäáá1yòä––©TJmãèè¨V«ñ4õõõO<ñD¯ÍÕÔÔ¼ñÆ|>ŸaªõÞIzí30À@• ;vì¸yóæµk×¾ÿþ{¡Pxùòej‹5}úôC‡!„<8ëÏ…d{JCCCxxø—_~9~üx潨Ö{'éÏÀÀU&X†÷e&%%!„"""|||š››Ÿxâ‰Í›7÷Zó'Ÿ|²gϱX|ãÆwÞy‡¶Y[[¶l‘Ë寽öšL& 0f‹ª‡j½w`H÷e€eáìì¬ÑhHÂ/¿ü’ywK2>ùä“?þø£i fmíÞ½{÷îÝf=¡ê¡ZïÀ¹L ÿ*è Êú¨2€þªL°8V­Z%‹¹\®L&Û¾}û@š–ËåØ.&-- !çäädzÙI³mòòò<==Åbq@@@uu5Oœº}ëÖ­I“&‰Åâ¹sçâ—kƒT™`q|öÙg'OžÄ+%$$ °ul³lÙ2„PdddII‰é^fÛ<õÔS.\¨©©IHHX¾|yzŒÐêÕ«—/_^SS3~üøäääþUô¨2`°~ýzwww©TºcÇ,©««›2åÿ·w÷q5ÞÿÀ?çœn,Ýœí4ÝH*É9uº¡L)SøNZJë;kˆ¾än#w#í·¡5Œßï&²Ø—ɦ;Œ¥º#‹J”Õé†ntn~\¿ßYç¦SN:x=þ¸úœ÷ç}}>סëíºÇårGuãÆ >ŸÏb±æÍ›gaañí·ßªÙK͵ûúúª>©NŒ»»»‰‰ !„ÇãUWW+ »r劳³³››Ûºuë¨–ŠŠŠ€€.—Ëãñ²²²ä»H$’ôôô°°0BHDDDZZZ—3€çU&€¶kjjÚ¶m[AAA~~þ¬Y³¨Æ÷Þ{/>>¾°°0..nñâÅ„úúú˜˜˜”””;v¨ßKžì3á3224>¤¤¤ÐÐPeŸFEE%$$\½zÕÁÁj‰ŒŒ /,,ÌË˳³³“ï"tuukjj&Mšdff†×h <•@ÛÚÙÙEGGOœ8qÚ´i„æææ+W®,X°€"‹ !ÄØØØÑÑñÁƒÔSÙÕì%:cÞKs9sæÌÉ“'/^¼¨ðÓ¦¦¦òòò€€BHHHÈÖ­[©1Ÿ?ž¢§§gmm­,³­­mZZJLí*@ÛÑéôË—/gggïÛ·ïðáÃ'Ož¤ÿøãi¥Èçóuuu !4M"‘¨Ùë9+**Z´hѯ¿þjdd¤,†F£u7­©©iGGGKK‹AUU•¥¥å³ 4gÌ´][[[ccc``àêÕ«KJJ!FFF®®®$„ˆD¢k×®iªWï©®®ONN¶±±QclllkkK]|yìØ1Bˆ‘‘‘»»ûþýû !B¡°ªªJ¾Fó÷÷?zô(!äðáÃAAA½4èT™ZgÁ‚Ôõ‘[¶liii™2eŠ‹‹ËÌ™3?ÿüs*æ‡~8xð ‡ÃqvvNOO—OÒ³^äï×enÞ¼™áææ&,--ãââöê2&>>žÏçÏš5‹Çãyzz*›ûwß}·dÉWW×›7oR-‡:rä—Ëõðð Êey‰‰‰»wïæp8wîÜYºt©²äð<áŒ9€Öùúë¯;µäååuj±³³;wîœl u9¦¹¹9ŸÏ'„ 0@^˜›› …ÂNÉÉÉ]Ž¹Ë˜;wîܹ³Ë<#GŽ,((m±±±éò&¤!C†\ºt©Ëäð<áX&hŽe¼ºx<^§–U«V…‡‡÷É`à%ƒ*àÕÕ{O,ÀsПOå¤ìÛ·Íf³»|$!döìÙ*Â***¼½½9NpppKK‹êT|>ßÜܼË5ö 3hT™Zç믿ÎÈÈ ÞÁ³bÅ BÈ’%K–-[VXXèââBÕòº¬2É_ïõ¡Ì™3‡™™™ÙåÒÒÒZ[[UÄÄÄÌ;·¨¨ÈÆÆ&!!¡Ë„êë½ÌЫPeh;±Xœ=uêTBHHHȯ¿þÊçó©ÃŠÒƒ‚±±±ÒGlòx¼ºº:5“ûúúvy ³¡¡!..nÓ¦MÊ$IzzzXX!$"""--MaØ•+WœÝÜÜÖ­[GµTTTp¹\G=Œ½g™@ ¡ÊÐv@OOO__ŸÂf³«««åc6oÞ,=üyýúu‹¥0•ì×»|¥ÔâÅ‹cccû÷ï¯b„ººº555“&M233Sö2ñ¨¨¨„„„«W¯:88P-‘‘‘ááá………yyyvvv=Î Z÷˜¼B¨2´[]~þùçöööÉ“'S{WÁÖÖ6--MY!ØÔÔT^^@ Ùºukssó•+WΟ?OÑÓÓ³¶¶îYfÐN8–  íLMMŸ>}ÚÞÞN©©©±°° ÑhÔGòïéѸ³gÏæåå9::Ž;¶¡¡ÁÅÅEá;::¨[sªªª,--¦’[}jf-„*@ÛÑét__ß'NBŽ;öÖ[o1™Ì'Ož´´´Ü¸qCf``ðäɪՠ­[·–•••””üöÛoL&3??_>†F£ùûû=z”røðá   ùccc[[[êâËcÇŽBŒŒŒÜÝÝ÷ïßO …UUU=Ë Ú U&€ÖY°`ôVêŽòÄÄÄ-[¶p¹Üüüü+VèëëGGGûùù>}ZÚËØØ8**ŠÇã3¦¾¾^afÙë27oÞL‰ˆˆpss–––qqq=sbbâîÝ»9Î;w–.]ª0æ»ï¾[²d‰««ëÍ›7©–C‡9r„Ëåzxx”””ô83h!\—  u¾þúëN-öööyyy²-Û·o§¾üòKiãîÝ»U¤577—?Þœœ¬æ¨ÌÍÍkkk•}:dÈK—.©Î0räÈ‚‚Ù›.oBR'3h!ËÍñL€—ÇëÔ²jÕªððð> ¼‚Pe¼œºûÄ"ÍÂsиpá!äÈ‘#+V¬èë½X,Vvvv_þªLí¢««»oß¾ƒÖÕÕ]¹reëÖ­ ÃJKKÇÇårGuãÆ >ŸÏb±æÍ›gaañí·ßR1W®\qvvvss[·nÂ$?ýôSHHµœ™™9aÂBHEEE@@—ËåñxYYY cÖ®];lØ0eÓá½{÷©×TFGGñÅ|>ßÔÔô½÷Þsqq3f õ~ö„„OOÏË—/+œ—üÚ7oÞÌáp¨£¿”ÜÜ\.—ëëë[]]­0ô*T™Ú¥££#::zæÌ™,ËÃÃcåÊ• ÃÞ{ï½øøøÂ¸¸¸Å‹BêëëcbbRRRvìØAÅDEE%$$\½zÕÁÁAa’   œœœÇBŽ9A‰ŒŒ /,,ÌË˳³³“ijjÚ¶m[AAA~~þ¬Y³”M¤Ó­¬¬>ûì³>ø 55õîÝ»Ô1Ú†††™3gæç燆†~òÉ'„3fäçççççoÙ²eþüùòóR¸öØØØNÏÝŒŠŠÚºukaaá”)S¨m(¿} Wásí¢««»ÿþššBHxxxXX˜|Lssó•+W,X@‹Å ƒbllìèèøàÁêÙéMMMååå„…õõõƒ‚‚Nœ8vêÔ©/¾ø‚Ê|þüyBˆžžžµµ5!¤SŒ¡¡¡]ttôĉ§M›¦p G8mÚ´_~ùeáÂ…×®]£Þin``@:u*Uü]»vmúôéMMM‰„zƒQ§y©³ö¦¦¦ÊÊJ*sHHÈ®]»äó@oC•  uh4šôE;T5&N§ÿñÇTõFáóùºººT¼ô†!e}e͘1c×®]ÔqS&“ÙÜÜÜe !äòåËÙÙÙû/ IDATöí;|øðÉ“'Õ!!D$•””TVVÊß$‘HÚÛÛ#""Ξ=ëææVZZ:vìXBH§yÑéô.×®ð–)ùí½ gÌ^ÿüs5GØØØxâĉÜÜ\}}ýyóæEGGõÕWL&3))iùò円†)))†††ëׯwuue³Ù Ó*\;Ç … <ÏÎÎîÇLJJš7ožX,f±X?üðƒú4U&À ÉÎÎîܹs²-Ôvsssê>nBÈÈ‘# ºLµsçÎ;wJ´±±ét'M§˜äååõ`„Ò×-^¼xñâÅ|>ŸÁ`:tH6æã?þøã©å7ÊÏKáÚå_täå啟Ÿ/Û"¿} WáŒ9hªLèÒ;œà¥„*4U&hªLí³fÍjùÁƒ†††wïÞ•}w¢T]]ŸŸß³¬‹Ïçëèèðx<wüøqeaÞÞÞ'88¸¥¥E> %%ÅÉɉÃáxzzª¹.ù™¶··?Ët@« ÊÐ.AAAÙÙÙÔrVVÖøñãõõõF²X,id1™Ìëׯ_¿~]Ù{t!111sçÎ-**²±±IHH:thNNNQQÑŠ+æÎ«æºÔŸ)¼ˆPeh—qãÆSï ÏÊÊ "„ˆD¢÷Þ{ÏÅÅe̘1ÕÕÕ„Í›7s8Ùcœ ......žžž—/_&„¬]»vذa... _/©&‰D’žžN½è2"""--M>ÆÝÝÝÄÄ„Âãñ¨áõx¦ðÒ@•  ]ôõõÇŒsáÂBHvv6U{544Ìœ93??ÿwÞ¡'Ûé©–3fÌÈÏÏÏÏÏß²eËüù󛚚¶mÛVPPŸŸ?kÖ,e«kiiqvvö÷÷///W tuukjj&Mšdffvÿþ}ƒOJJ Us] g / T™Z'(((++«¼¼\__ŸzÝ¢Á„ !ÁÁÁ/^TØëÚµk£Gær¹}ôQuuµ¡¡¡]ttô?üЯ_?…]X,VMMMAAŸŸßÂ… U ÉÖÖ6--MOOOEÌ™3gNž<¹aÃõ×%?Sxi ÊÐ:Ô‹ÊN"Óh4ùÆöööˆˆˆ;v?~\,ÓéôË—/¿ûî»ÇW¸"]]]###BȻᆱì®SSÓŽŽꦟªª*KKK…aEEE‹-:qâ•PÍu©ž)¼ÐPeh[[Û'Ož?~\Z{µ´´¤§§BNœ81fÌù.B¡:˜””Dikkkll \½zuII‰ÂIßµøË/¿ >\a Fó÷÷?zô(!äðáà ËÁêêêðððäääNÇ#kkk½½½U¬K~¦ðÒÀ{Ì´Ñ[o½µoß¾ÔÔTêG&“™””´|ùr##£””BÇ … <ÏÎÎîÇ\¿~½««+›Í $„´´´L™2¥½½]$}þùç ×rðàÁýû÷ÓéôŸ/ÏÈÈpppPý!xÑ¡ÊÐ:L&óúõëÅÅÅ¡¡¡óçÏW³—šUfZZZkk«Š€˜˜˜¹sçÙØØ$$$(Œ‰ŒŒÌÌÌTÝKYžÜÜÜyóæ:uJÙÞàå€*@{Þºu‹’››ëââÂår}}}«««¥Çù|¾¹¹9!$666 €z|&Ç«««S˜°¡¡!..nÓ¦MÊÖ(‘HÒÓÓÃÂÂ!iii Ã|}}edÊ÷R–§¸¸8"""55ÕÞÞ¾G›^¨2´Wjjª‡‡!$**jëÖ­………S¦LY¹r¥|äæÍ›322¨ƒ ×¯_g±X .^¼866¶ÿþÊÖ(tuukjj&Mšdff¦æImù^ ó´¶¶Nœ8qìØ±<O­ùÀ‹ U&€Ö¡I²ÙììÝ»·©©©²²r„ „ßÿ½giþùçöööÉ“'wikk›––¦§§×­üò½:µ´··'$$dggŸ?¾[™àE„*@ëP‡$ËËË©BS"‘t  ÑhÔ‚P(T?íÙ³góòòÇŽÛÐÐàââ"cjjÚÑÑAݾSUU¥æ¥“ò½æa2™aaaÛ·oŸ={¶êkCà%€*@KìÚµ+>>žbmmžžN9v옷·7“É|òäIKKË7dãŸ}ZlllÅãñÆŒS__ßã•&&&îÞ½›ÃáܹsgéÒ¥ c"""ÜÜÜ¥¥e\\œÂ^*òìØ±#)))''§Çƒí§Ó×€¿177¯­­•þ¸gÏj¡Ó¡ÇíÛ·S _~ù¥´q÷îÝ=XE'C† ¹té’ê ÉÉÉ]öêÔÒ¿éJ-,,:C€Že€æ¡ÊÍC• š‡*4U&€v‰‰‰Y³f µüàÁCCCêáDuuu~~~ÝJµlÙ2‡ãììŸÅbÍ›7ÏÂÂâÛo¿U–ÊÔÔ”Z¨­­533ëñ®\¹âìììææ¶nÝ:ª¥¢¢" €Ëåòx¼¬¬,ù.‰$===,,Œ‘––¦0sBB‚‹‹‹‹‹‹§§çåË—ÕÉLñõõÅLí‡*@»èëë3æÂ… „ììlªÊŒÍÈÈ «¯¯‰‰IIIÙ±c‡Šl7n´²²Ú°aÑ#G´´´8;;ûûû———+K•põêUª%222<<¼°°0//ÏÎÎN¾‹@ ÐÕÕ­©©™4i’™™Ùýû÷fž1cF~~~~~þ–-[æÏŸ¯NfxQ ÊÐ:AAAYYYåååúúú666 cŒmmmU<_²nݺÊÊÊéÓ§¯ZµJþS‹USSSPPàçç·páB…šššÊËË!!!!„æææ+W®Ìš5‹¢§§gmm­lí¶¶¶iiizzzÊ®]»6zôh.—ûÑGUWW«Ÿ´ªL­C]š)=]®®®.!„F£I$ÕÙh4ZTTõtù$FFF„wß}·°°PEu‡þSSÓŽŽꦟªª*KKKù˜öööˆˆˆ;v?~\,ww- ÍPeh[[Û'Ož?~\E•©Ž‚‚jáÔ©S Ï>óù|já—_~>|¸Â$ÆÆÆ¶¶¶Ô%’ÇŽ#„¹»»ïß¿Ÿ" «ªªä{Ñh4ÿ£GB>¬p"B¡:X›””¤ffxQ ÊÐFo½õÖÙ³gß|óMêGÐÐÐÀãñBCCÕL²lÙ2'''GGÇÔÔT…7 |Ê”)FFF)))ƒ R.ðʱLíÒÐÐÐÒÒbnnÞKù7nÜheeµaÆ#Gލ?¤™3gæç燆†~òÉ'½40Ð"¡°‹‘HÍT¨2^-ëÖ­«¬¬œ>}úªU«Ôìb``0aÂBÈÔ©S/^¼Ø›£€>&T475ÑÔK…*@»0™Ì×^{­ËsßÏ‚F£EEEuùf …$‰ÆÇZ‚NÈÝ;wTÇTUVR×t©“ ´ËìÙ³7nÜHÕs………Ì,}Qä©S§ìììÔìÕÒÒB•¤'NœðññÑàx@«Ði´{wï675) hii)/+c ÊxA}úé§úúúÔ“Œbcc !nnnÀÒÒ2..Na/ub–-[æäääè蘚šúí·ßª™‡Éd&%%¹¸¸¤¤¤|þùçš%h!Ï{ÜÜ,ÿi[kk^N“ɤÓÔ:gŽ{Ì´Ž®®î—_~)Û’œœÜe/ubÔ9KÞ)ŸÏg0‡ê²#¼XW_Ÿ‘aimmemmhd$‹›ššøÕÕ÷ïÝ3a2---‹»ºv“‚*þFÈbµ=ª©©¬¨ …„]]]CCC›!C hêÈ$¨2@5ssóÚÚÚ¾¸ºº:<<<99ÙÆÆFY­[·–•••””üöÛoL&3??¿[ã ær¹Ô{Õº„ë2´—££cHHȶmÛrrrªªªÄb1›ÍÞ·oŸ|d||<ŸÏŸ5k!D__?77·Ç+ˆˆ8wîœ@ °´´üðÃeoiß±c‡Ã™>}º··wóÀ+U&€véôFÇ={ö¨ÓkçÎ;wîìÙ*:INNîÔ" ¶°°j®^q8cš‡*4U&hªLÐ~HJÍ<‘‘‘™™™òí¹¹¹óæÍ;uꔥ¥eÏæ¯T™Ú+00ðÖ­[îîî&&&„W]]­,ØÔÔ”Z¨­­533“P3¯¯¯ôà¥TqqqDDDjjª½½}&/„‰D"‘¨Ž‘H$mêdÃó2´Wjjª‡‡‡ôǤ¤¤ÐÐPñ7nÜ»woÿþýÏ;§"¬Ë<´¶¶Nœ8ÑßߟÇã©ß ^D"‘HGGU}ØÞÞ®f*ËÐ: <z‰ùÞ½{©Æ3gΜ >>žÏçw™'""âܹsÀÒÒòÃ?”½]}ÇŽgúôéÞÞÞ˜hgW׎§Oï–—÷ïߟÉd¾öÚk„¶¶¶z ©±Ñjð`޳siI‰:©PehsssÙ“{öìÙ³g:•%—Ú¹sçÎ;»Ì“œœÜ©E: @ Î`àE£ÑÜG²²¶..*¢^Bèt:ÓÔÔËÇnjͦÑhj¦B• cöúëoúùIÄb±X,‹Å‰D,¦Ó»w¥%®ËÍC• š‡*4U&€váóù:::<oĈãÇ/++#„DGG³Ùlù?ʪ¨¨ðööæp8ÁÁÁ--- cÔÉ##ŸYuÀ ªµµõ³Ï>{üø±lã“Ç·lÝÚ­§&£ÊÐ:ÔSÙ‹‹‹CCCçÏŸO‰ŒŒÌÌÌTÝ+&&fîܹEEE666 cÔÉ##ŸYuÀ ª_¿~:::K—.mkk£ZÚÚÚV®Z¥££Ó¯_?õó ÊÐ^·nÝ"„øúúª>)‘HÒÓÓÃÂÂ!iii úÌ##ŸYÍuÀ ŠF£-_¾ÜÚÚzùŠíííííퟬZeeeµdñbõcDPeh³ÔÔTu"®®nMMͤI“ÌÌÌîß¿¯©1Ègî½u€– Ñh«W¯`jºråÊ•Ÿ|bjjºrùòn•˜U&€jhhàñxÔKÌ÷îÝ«~G[[Û´´4===I>sï­ ´Nß°aÓ–––––µkÖt÷a™Uf)zCèßD¢ç3ÐM}§Ôu™åååT¡©NSSÓŽŽêFœªª*KKKuzõ,sï­ ´ Nß½k×®;{PbT™}¥½­íAuµê˜‡55í]u ÚOãß©Á®]»âãã» ¦ÑhþþþG%„>|8((H͵ô sï­ ´®®®®®nÏú¢Êì3e·o«¸óçŸÏg$ )ÿNCBB¶mÛáææ&,--ãââ'&&îÞ½›ÃáܹsgéÒ¥ cÔÉ##ŸYuÀ+ï1ï3jj…Ÿ677?ª©yÎC‚g¤‘ïôÌO?%ÄÅýû›o¨G»ºBì 7N#ý´“¢¢¨…ÔÿüGa@иq]æQ#Ÿ¹ËuÀ‹èè?h*ªÌ>cae•qú´ÿĉÆLf§š››Ïff²°¨(+등AÏ<ûw*éÑ…/„ýî<À !tBèݽcàEÐ!‘ô¸ï?¦MÓàHPeö®‹KG{û/?ÿ<ÐÌl˜“Ó@33‰XüðáÃÛ·nÕ>zd>hða¨2_,ùNCÂÃÕY—D")ÊÏ¿_YiÆfup0ã †þ9¨E$6wîÜ»{× ÿ,ªMx™H$‘HôT(Ô×[ÙØ8»ºªù7\ƒG1)Ø-õæêáaim]róæïçÏSwÓ ž›ÛüÖ{iä;+¹],ËÞâwíÊ>ŸÈ45¥Z$b±&&ðò£ÓéX¬,–½£ã…³gëêë²X}=(¡Ñh::::::ýÌÍ+ËË;ž>u5Júi[[›¾¾þó©1Peö1ÖÀ^>>b±X,‰E"‘X,‰h==m Úà¿S±¢bñNy9ƒÁ2x°D"!„ÔÕÖÞ»w/hÊ—=fhh8fܸ³íFFúxø+¼tètº9›}·¼ÜzðàffTc¶m cÅŠÏ¡ÐD•  ]:=SS"‘”UTtttxxx´¶°è«QÁ³xöïT¶Ê¤Óét:½þáCù«g$b1Žej'ƒþýÉ_7c)[­B})8– /·N¿|$b±„I/ïMPeö%ƒ¡££Sz玭-Õ"‹ïÞ¿?€Å246n}ò¤o‡=ðìß©Hæ_»íàÁüÚÚ»UU–o¼![hÒŒG±ÍÍ5>~xvO?&„ô74T± Z¥©©IWWU&¼¬ÚÚÚètºìuümmmŸ¬Z5ÀÔtë–- £÷.ñG•ÙÇ[Y•WVÞ©¨be%‹+îÝ3a2‡Ò(ôê¥Ð{žñ;íô$#3&³®±±²ªÊâ7¤û@“Ò[·^ÇÍ Z©êî]Bˆýðá*–A«ð«« QeÂËJ ˜ššJX>yòdå'ŸXYY­\¾œN£õê T™}ÏjРŠ{÷ÊïÝëxúÔ {;»úÚZ”˜/´gùN;=óˆFˆÙ€µ ÍÍMM© kllmó¯^}òä‰nXÖ>–ƒ“¿N¿*[íÑÖÚzÿþ}›Áƒq]&¼”„OŸ666zùøHù|³g½]Ì’%x’Ñ+F£Y[Xܺ}›¡£ã4|x-Ÿçe¾èžå;UXŒ²Y,Cö–ê—‹Å2ãs™™ã'ND¡©mdß/ªl´DKKËåÜ\êªY€—ŒP(¼]Vf5x°›-m\²d žÊþj¡Ñh¶¶ý^{MP[Û×cÍèîwJ§Ó©ã”Êy¶·¶Òh4é§gç?KJ²Îœa³Ù¶¯³Ù8þ  &‘HÔÜÔt¿²²¢¬ŒÉdZZZâ]kð2‘H$mííMµY Ìqv–ý®©«Ã;½‘N!T™Z¤åñc ²ýrQÿ;515ÔÕB~MKëÖ**ïÞ­¼{W¿_¿žŒàUE#„N§3èô& X èëáhR[G‡t¹´¤¤´¤¤7Ö"¨«3ùëÇÊ ÊРÜœ®]¾ü¦ŸßÀ×_Ç¥{ µÄbqíÇW¯:»¹©ŽìºÊü÷7ßhhTð7ÇŽy–îø^´Ð³|§Æ&&ùܒâ⦋ñànÐË_0YIDATZt:ݘÉtârMLTGvQeN Ñܨ@cð½¼”X²ìëQhNÌ€æ¡ÊÍC• š‡*4OéÝ??Ÿ:E™2y²t(ïðAÝÇÔ2ö’Ú ßÑó!»;QZe¾ÿÁ“’¤?Rå&ÈÃ^Rûá;zþpÆ4U&hªLÐÿ<ã×_ËJK‡úgI‰úkäóù\¯Ë0õóŒ^î_=ÍÍÍñŸ}ökZZey¹A_ k ÷’½ºSèÕAFffà¤Iƒmmmííÿüë™3Ô²Ù1Ë–I@¼‰êã¹¹¹ïLŸnkoo=dÈ„‰Së¥YÈ ›1ã>ÿ\¶åô/¿ çpü|vÜjR¸å·oˆÆŒôòêôãñŸ~¢–ßž6m¨ƒÃÓ§O‰ò)ß,)Èf["ý“vúô³¼çUæÓŽŽï¾|H:thú¦gfúûùizD=$ ûz½‹ú¦ìììúz jy!ö’êï;~=sfÁ¢EËbbîüùçŸ7o®\¾üâï¿SÑéôÓ¿üòèѣ㷠þ9sæ?##Knܨ¸sgã§Ÿž=w®ÇÙÔ7#<üè?J$iKÊÑ£ÓßyGGGés5åÙ·¼—WÞåË"‘ˆRSS#ìè((,”þX^^îíåE©¼wï?þ`±X§ù…¨˜2ƒÁ`0*ËË¥&=û4{^e>¨®®­­ùÞ{ººº ÃÍÕÕËË‹ú¨±±ñÃ>êà`ko¿hñbi—srrvuÍÍÍ¥ZZZZb–-sptêà°8&¦½½üõ :ŽÁss»|ùòž½{GŒàòx—/_¦:&8Àss³²±™T^^N ~ç‘HDàÇŽ—þJÙ`!7nÞôõ÷—ö²²±‘ÿo–ÂR222!ßíßïìêjecÃqqùæÛo;eèt&Wż¨€rqs³:téòåO;:¨$õÁ¬9s†ØÙ98:®Y»–úÛIÅè«»{xD„ì(,,T6òººº‘‘ÖC†x}áâE…_®üŒdÿW*ûÿQ…›Wa£²ñ(Üze¿©Ð°0eƒédç×_GÍš%ýqUlìê5kFhœ²½dww T6…¿ëTï ÕÙw¨9Íññ7l˜0a‚ŽŽŽŽŽÎØ1c6nØ@}D£ÑÂÃÂöìÝÛãmµþÓO×®Y3-8XOW—N§{{yíøê+…T±£ìIAAõÁ¥¿j’†††_Ïœ ûû^FáÎëPrò»ÿü'0ÒËkÖœ9Ô²³«kQQ‘²^šÝò½|å !äîÝ»OžÞÞTØá””à©Sƒß~;;;ûÑ£GêLYM%EE&¦¦ªcz^eêêêžüï »vípgÊÛoSÿÏhnnN;}zÓÆÆÆÆ:::îîÒ.ÍŸÏ`0þ1eÊÍ’BHKK˱ãÇ7}ú©¡¡aÿþýc–,ùïÿ+ ^ðÑG còäÉ …£ß|“ H$ £S°ž®®žžž‘‘µ,=ÍúŸï¿ß¾s'uH‡ò£åÊ£&#ÌÈȘàïO1119˜”´{ϞصkGŒ±~íÚ‘Êv9/fiaA-[ZYQ#Rÿ –¶[ýÕN%d±XêœJe!³ ù¾êÏHáæUبl< ×Õ­MªÚŒðð¤ƒßûç?=Ú{gR¸—” èr§ šê]aöÊ0MM%‰ ¡*w ¯_/--7~¼lÌ ÂgÌð7Žú‘N§Ë^üG‰ÅÒ}¨õ!ÔBey9“É”H$õÁ¹c '¨pGÙcžžž H;}Ú•Ç»zíšì»µ‰Ê2ÀÇÛûÂÅ‹ååå£}|LLL~Ïɹ|åÊhÕ½4»å½½½¿Û¿_ÐÐP[Wgkkkff¶`Ñ"ACÃÍ’oooBÈá#Gü|} !S§N=räÈüyó”M™Á`tëž§F ËÍ<ÉÈÌÌì_ –ܺE-Óh´ûUU]öb±X #ÿêÕ²ÒÒ²ÒÒòÛ·oߺ¥Îêê‚å+W&&$”ß¾}<5•ú{L£ÑLÍÁtw„é™™ÔE™„ &ûñÇ[7o¾õÖÜyóz¶.ŠD"‘޶êþ}333BÈÀ !Òöû÷î½þúëò}e·€²‘S©ªdV¡pò3ÒÓÓ‰DÔå/uuuT˜ÂÍ«°QÅ–T¸õToR…ƒQhRPÐ7n–”üšžúÎ;*"zì^R}ª×u¹+Tsß¡S&ÓqذŒŒ 1ÜœœŽ?Nýhff&‘HîÉìe*++Ùlöÿ-ÿu‹ !„Éd:;;Ÿú{ý­l‚DÉŽòYÌ ;’’rôÇýüü:eS±óíãsñâEê¨áhoï‹¿ÿþûï¿ûøø¨îÕ]ª·üH¦ææÿ|ÿ½ç¨Q„###ssóÿ|ÿ½¹¹ù`kë¶¶¶ŸNœøíÂ…áÎpçë]»ŠŠ‹© 7UL¹KÒå½{ÆüÑ£G_íØA}Óûpqq!„Nž4iý† ÍÍÍB¡ð«W•e022 ž:uíºuÔ•s555çûMUw<}*‰˜LfGGÇÞ}û¨F&“I]ú)©þ`º5»••OÛÛìí !<ÈÌÊzúô©®ŽŽþ¬…{ügŸµ¶¶ÖÕ×oMH ¡†1! `S\\kkk]]Ý–mÛ¦+*˜d·€²‘S©ââãÛÚÚêêê·o—Ï£pFƒ 244Õ¿ëºÜª¹ïPSìêÕkׯÏÈ̉Db±˜*V:ù×Â…IPËÆÆÆoM˜°áÓOëêë !w++?ß²%|út…É?]¿~S\ÜOÿýïÓŽ±X|ùòåE‹+œ E~Gù,ÂÂÂÎ?ÿï￟!wÊKE¡BËlmk4h——WVvv½@@ÝÒãòF![¾_¿~<—]»w{yzR-^žž»vï¦î.O;}šÁ`ü~Ṭ¬sYY9.xyy¥¤¤¨žr—¤'ÊÕ9cÞó’H__¿¨°0pÒ$ËÁƒÝG_ÿU²$&$0 gW×aNNÿýoIôûõóôñlkûö´i%ê=®’Íf/þ׿'Mò=z„“Õ8pàÀ9³g~óM[{{Ùï@ýÁ¨?ÂôôtéL‘X¼uÛ6‡áí‡ 9tøðîî*d1ŒÑ>>^£G»9ÜÑqéÒ¥Tûޝ¾jooÎáxùø¸»»Ç,Y"ß÷o[ ¨HÙ¶Ýž˜X__oïè8eêÔwýãT8#]]ÝÍ›6-_¹ÒÓÛÛcäHÙí#¿y•5ÊGẺܤʣЌðð7o†…†v±é4JÅ^RMª×u½+,*Rgßщ²’nOLܲu«­½½Ý°aß%%íݳ§SŒ———½Ìóæ¾Þ±ÃÈÐpôرƒmm§¿°4&FáJÇŽóïþýŸÿ >|ˆ]ìÚµãýüN(ßQö˜µ•ÕÈ‘#[ZZ‚å?U¶3:thÿþý©zÎÈÈhðàÁž£FIÏŒ÷ ¼éÙ–÷ññ©­­•>äÇËÓ³¶¶Öç¯ÓåïΘaiañú_æÌšu45U(*œ²ôéÔŸý¿x@ªQ  Î•KT B$IÝ_—5ð<(¾~Ý?(ˆõúë“’¦LžLùùÔ©)ŠnþzeÍx÷Ý9³fI MM)--3n\ÍßÇÂ3ªªªòôñ¹YTD]ð ¬×_—î:±—|nºµ£Äw¤A%EEžcÇ6 ò ÔvÎ<}:ìý÷¥<óôéð¨(¼Ç¼'FûøŒ3¦¯GjÙ³wïÔ·ßF‰ Ðcò'Ê{ýóWÖ¢… ûzе––'.×bРäC‡úz,/0éÉqùp,S‹ØÛÛãt¹Tܹsñ·ß¬•¿9^ ØQ>gòw”?§{Ìà%¦âDù³ž1—^'ûþô|€/:™‡c/©ði ë¯'­*\¨Sþ`|¥U¦lý^qØKj?|G}¢s•iþÆ#\\Rì“ÑÀ Gö1FR ŽeÖ=|öþûÏeHðÂSx´øÿ^x*û`v€ž¡É.‘Hp9hƒ"‘Hh4š;‡S~û¶Âwh¨–yútùíÛÔL"ûól6!äÈ};>x…GEB¨“ÈV™ÔÏT­ Ð-Òú’ò¿Ÿ»ðžj¥QõIEND®B`‚gspiceui-1.1.00+dfsg/html/OM-Process.png0000644000000000000000000011235412267503541016432 0ustar rootroot‰PNG  IHDR =°‰ëCsBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î< IDATxœìÝy\MùÿðW·}#•=mö$)”uÈ ¡3ŒÁdïË0 ÆÆn0ö%cc¦¯¤LÙ&Ù)Kd ¥M;R©>¿?zt~®N43Qx=3÷ÜÏùœ÷97÷¾úœÏ9WÍÆÆF´oßDDDDENœ8öíÛÃÛÛ»¼k!""¢ D©TBQÞEQÅÄ@DDD²ˆˆˆHCÉbH """Y DDD$‹!ˆˆˆd1$‘,†"""’Å@DDD²ˆˆˆHCÉbH """Y DDD$‹!ˆˆˆd1$‘,†"""’Å@DDD²ˆˆˆHCÉbH """Y DDD$‹!ˆˆˆd1$‘,ò.€Šûú믑˜˜¨²L¡P fÍš°³³ÃÀ¡¡Á—>|ˆ 6 ""·nÝBõêÕakk‹‰'ÂÊÊJ¥í¼y󙙉ŋ—Sµ%;v,ÔÕÕ±råJÙçÓÒÒ0zôh´k×cÇŽ¬]»—/_Æ/¿üò6K-6lÀÙ³g±yóæ·²½ÐÐPìÛ·áááxðà5j;;;|þùç¨_¿¾JÛsçÎaùòå˜={66løÊ~·lقÇcÇŽo²ü×züø1FŽ ðôôD÷îÝKl;gÎ\¿~uëÖÅüùóˬ†Ÿþ÷ïßǪU«þÑz7nÜÀìÙ³1iÒ$´lÙ²Ìê¡2âåå%¨b±¶¶ÂÂÂBú©V­š ˆ&Mšˆ´´´ò.³ÜíܹS 555ѸqcÑ«W/agg'ÔÔÔ„–––ðññQiïââ"š6mZNվ𹹹°²²*ñù¸¸8@ 0@Z6pà@ajjú6Ê+sÆ †††o|;¹¹¹búôéB¡P…B!7n,ÜÜÜ„¹¹¹ ôôôÄúõëUÖùßÿþ'ˆ'N¼¶ÿ±cÇ uuõ7U¾ˆŒŒ³fÍwïÞ}e»¤¤$éýÁÕÕµÄvB[[[-[¶,ÓZ=<<„¥¥å?^ïØ±c€ðõõ-Ózè¿óòò<ÝPAYYY!::ZúILLDXXÜÝÝqíÚ5Ìœ9³¼K,WW¯^ÅàÁƒabb‚k×®áúõëð÷÷ÇåË—qæÌTªT C‡Ettty—úÆLœ8[·n-ï2*4¥R‰  K—.xøð!®_¿Ž¿þú ÷ïßÇåË—annŽÑ£GcùòåÿªÿQ£FaÏž=e\õÿ»uëfÏž»wï–ª½ŽŽŽ9‚””Ùç÷íÛ‡œœèèè”e™ôcHx‡´hÑ?ÿü3ÔÔÔpäÈ‘Û=~üXvùÓ§OKµ¬¬¬RµËÎÎ~m!rss_Û.''§TÛ,2qâDhjj"$$7VyÎÉÉ “&M“'O°mÛ¶Rõ'„(õ~—¦Öº?ÿ†££ã+‡•Ÿ={V꾞„»»;ŒŒŒ```KKK̘1ùùù*ý !°hÑ"Ô­[úúú¨^½:† R,p<|øŸ|ò ŒQ©R%têÔ «W¯.VçßÿáÇ£V­Z066FŸ>}°sçN•6±±±øñÇÑ¢E èéé¡E‹˜={v‰¹téŽ9‚áÇÃÌÌL¶Í˜1c0a˜˜˜¼²¯cÇŽÁÉÉ zzz¨T©Z´hÉ“'«_ øqã`mmÊ•+£[·nX·n ¤6iiiX¼x1:tè}}}4iÒS§N}c£ßÿ=:uꤲ,''“&M‚¹¹9ôôô`gg‡)S¦ 33S¥ƒƒ6mÚ„½{÷ÂÊÊ =zôžûã?`cc]]]T®\}ô~üñG•7ù“'OÂÞÞ·o߯”)S`jjŠ+VHÏ/_¾õëׇ¾¾>ªV­Š"--­Ø>$&&¢G022‚©©)ˆ+W®( )mÚ´Á¤I“Š­{{ûW†åüjjjX²d ÔÔÔdÛ`Þ¼yHOO/v.=''Æ ƒ‰‰ аaClÙ²E¥ÍO?ýGGÇbëMž<¯| `ݺuhذ! `jjŠ~ýúIaåûï¿Çøñã^^^pww/q_‹˜››£uëÖØ½{w±ç233qèÐ!ôë×OvÝ{÷îÁÕÕ•+W†¬­­1þ|•ßq 0P>U«V…lllð¿ÿýO¶Ï¸¸8ôíÛWz¿èرã?ž³@åŒs*kkkQ¿~}Ùçüüüáää$-kÓ¦h×®¨[·®¨U«–èß¿¿Bˆ„„QµjU¡««+&Mš$¼½½ÅgŸ}&ˆO>ùD¥ß‘#G âÓO?k×®Ÿ}ö™ÐÒÒÍ›7—ÚÜ¿_˜šš MMMÑ¿1þ|aaa!ˆeË–IíN:%ÔÕÕEãÆÅìٳŢE‹„­­­ öíÛ'„"//OØÚÚ ===¡T*źuëDÿþýÑ»wïWŸßÿ]ÿ踾<'!..N( aaa!¾ýö[±víZñÅ_¢K—.R»¨¨(a`` êÔ©#¾ûî;±|ùrѦM@¬X±Bjçææ& …ðôôëÖ­#FŒ¢Y³f¯­­,æ$äççKuµk×N,]ºT8;; ÂÝÝ]HmÕÔÔD¿~ý„¾¾¾hР˜3gŽBˆ¿ÿþ[vvvâÇË–-ݺuÄ×_-­(ˆ!C†---áìì,‚‚‚„BLœ8QbíÚµbÀ€BGGG4lØPäçç ! ç$hii kkk1f̱k×.1~üx¡®®®rì?ýôSahh(ž={¦r<úöí+ Ä“'OJ’ý)ú yUH(úXºt©Jß .Äš5k¤ejjj€Ø¾}»J[¥R)tttD\\œ´,77WXXXGGGiYQH022ÑÑÑÒò¨¨(¡©©)úõë§Òï¬Y³qòäI!DaH F­Ò®oß¾€¸wïžBˆ?ÿüS~~~R›ôôt¡­­-¾üòËgZZšl.IýúõEݺu…ÿ*Uª$¥6©©©¢fÍš¢J•*"==]Q<$½K–,QéÑ¢E€X½zµBˆØØX¡­­-ÜÝÝeÛ>|X!D@@€ Ž9òÊú_ Eá·h[Ezõê%Ö—CÂËï Ez÷î-ÔÔÔÄÅ‹…Büú므˜.\¸¨[·.àèÑ£ÒPeãÆ/]~hff---\¼x©©©RĽ{÷ P”ü«Yt* råÊ%¶) OOO$$$ ]»v*Ë555U†Ö‹öçøñãÒywcccDGGc×®] ¢¹qãâââ¤u7n܈„„„bçÃå!-ûSš¹;v쀮®.†®²|ĈÐÒÒ¹sçT–ÛØØ`àÀ*ËæÏŸØØXÔ¬YSZ¦¦¦uuuÙóë£F‚………ôøÿûž?^ìwiܸqX¸pa±Kw_n׫W/~'zôè}}}øøø¨l#''žžžò†ìKló¢êÕ«#))Ie™‹‹ ªU«&=®R¥ \]]‘––†³gÏÊö³sçNèèè¼ö5ðõõENNN±ù J¥ .„®®n©ê–S³fM´k×Nå”CÑ©†þýûË®³wï^T¯^íÛ·WYÞ·o_!àïïàÿß3^þ½ùì³ÏT !°k×.8;;«œŽQWW‡———ÊûUl¼Ø¾‚ªS§þüóO•eFFF¨W¯žì=êÔ©ƒJ•*Isss‡=z@SSS¥mÇŽ¡®®.+¿}û6 :tè Ò®F˜6màÁƒÈÎÎFFF>ÿüs•vEÎîÝ» ð dÙ²e=z4æÍ›‡îÝ»£W¯^èÕ«—tnØÄÄ^^^X³f jÕª…?þ;wÆ!CP¥J•W›zõꢣ£annþʶ¯R©R%( „„„ <<—.]ÂÑ£G£Ò®{÷îpppÀ‚ °aøºº¢{÷îèׯŸtl5440iÒ$|÷Ýw077G‡¤ý©]»v©ê©U«V‰>ñññ¯œlwîÜ”Je±çôõõ¥×§H“&Mе366FJJ 8€ððp\¼xÁÁÁHIIM±ö/÷qçÎÀG}¤²ÜÄÄDú]*¢¥¥…Ž;ª,{9êéé¡G@NN´µµ±cÇÔ©S§Øº/²´´„––¢¢¢Jló¢[·nÛ—®]»k×­[7lÞ¼¹Ä« Š^ƒÑ£G{îÅ× è8½¼•+W.vœþþýûcìØ±ˆ…™™™tUÃËæ’’‚ÇÃÝݽØÜÎ;€ô^q÷î]Ô¬Yööö*íêׯ¯òo166Ïž=ÃãÇ‹½_äååI}QÅÇ‘„ JGGÎÎÎ*?5*ñ&JFFF*³³³QPP 2‰±ˆ ¥íiii000P /+št¥«« •CCCxzzÂÒÒ@áMTTüüüЬY3ìܹ°µµÅÉ“'¥>W­Z…7nÀËË W®\Á7ß|sssÌž=û•ǦèÃêÆ¯lçää##£¯® EãÆÑ©S'üúë¯022ÂÂ… ‹Ò¨««ãÂ… †‹‹ öïßAƒ¡^½zØ»w¯Ônòäɸwï¦M›†ØØX̘1ÖÖÖP*•B¼²Ö²™™ mmíb¯ŽŽÜÝÝáìì¬Ò^.ŒMdtssþ}û`mm7[·ÈË¿wiiiÐÖÖFÕªU_[¯¶¶6´´´^Û®_¿~ÈÌÌÄÁƒñðáC;v ƒ zåh“††êׯ«W¯JJ%‰ERRR± ˆrÿvŠßË‹ddd¼ò5hݺ5€Âã¤P(J5Âôo|úé§P(Ò>>>pppö‹ŠFˆäöרØÚÚÚÒ{E^^žl;*!öUïðôô,v³3ª 8'¡âyÕÄE9mÚ´‘½IP•*U„¹¹y±åçÏŸ„R©Bž‡ÆKs „(<½eË&ž>}*OO϶3Bˆœœ±{÷nall,>úè£Û]¾|YtéÒE¨©©‰¨¨¨ÛÅÄÄ---akk«2ìE±±±€hß¾½´ìå9 NNNB___DDD¨¬[4§¢$ùùù"((HX[[ KKËkˆŠŠ’&Bþý÷ß%ö'DÙL\trr’}½å¨©©‰Q£F©,ËËË•+W 4±±±*Ï}üñÇÂÆÆFz\4'¡h"j‘I“& âøñã*ËóóóÅï¿ÿ.Μ9#„(ùfJEçô_ü]ÌÊÊbРAbÉ’%€¸qãÆk÷±hîÊÚµk_Ùnøðá€Ø½{·âÿç$Ƚ7M6,š¤ùòœgggQ§N×Ö6cÆ @Ö¯_###;88 ""¢Ø¥¿/¿Wý÷Å·Eûñ∮®n‰ï«W¯†ŽŽN±}§ Š# OY$œ:uJ-Z´aaa"55Ulß¾]Šúõë‹çÏŸ ! G ¬­­E•*UÄŸþ)RRR„°²²ÆÆÆÒ ï={öH—ž?^$&&ŠM›6 ===Ѹqc‘——'„⫯¾’.Û:s挈‹‹›6mêêêÒHBhh¨ ìííÅÎ;Err²ŽŽŽBCCCDFF¾rŸ³²²Dݺu¥Ë6}}}Edd¤ðññ}úô‘.-ªIˆâ# ÖÖÖB___œ8qB<{öLøùù‰ž={J··-º"¡è¯×>}úˆÃ‡‹G‰={öˆJ•* !DáÈ…–––°²²7n‰‰‰âÌ™3Òåƒoc$ááÇBOOOXXXˆˆÔÔTñ×_ ¡§§§rLåF222„–––¨_¿¾¸råŠxüø±Ø²e‹teõêÕEnn®¢ä‘„üü|ѤIQ©R%±}ûv‘œœ,üüüDÆ …¡¡¡ˆ‰‰Bü³‘!„Ø»w¯ôº¼x•Æëüõ×_ÂÐÐPhjjŠ)S¦ˆˆ[·n ___1xð`@T­ZU$$$Hë$èèèOOOqóæMqãÆ éŠŒ &Hm_Iˆ‹‹zzzÂÜÜ\å5hÒ¤‰ÊkPPP „¾¾¾Ø¼y³HNNÒeÁE#iû÷ïÄæÍ›_¹Ÿr# ÉÉÉBCCChjjŠ-Z¨´ùꆠ  iä-<<\¤¤¤ˆ7 ]]]Ѽysi´ìÑ£GÂÀÀ@˜˜˜ˆÝ»w‹„„$j×®-ôôôT®n(zͺté"ÂÂÂDbb¢Ø¼y³Ð××5’þmr$¡ââ%TY…!„ ŠÞ`qûöm•v7oÞM›6Uigjj*UÚ­^½Zº÷û‹ý½xz --Mú`yñ§iÓ¦Ò¥mB1wî\¡©©©ÒÆÐÐðµoˆERSS¥7î—¬rùšÅC¤{ø««« ¢oß¾Ò}ôôôÄÕ«WEnn®pww/¶ KKK•Ë»6mÚ$ôõõUÚhkk‹yóæ½v_Êê»BBBDíÚµUj¨Q£†Ø¿¿J;¹ „ÞÞÞÂÄÄD:& …BL˜0AÌ™3Gº,ðùóç%†! O³8::ªÔP¥J•ž={& …–––HNN.ñ8É‰ŽŽ;w.öú©©©‰Áƒ‹û÷ï«´/ ÂØØXeOOO•{6È}wñcÇ„™™Ùk_ƒû÷ïK—¶ýTªTIüñÇR›ÔÔT¡§§'€Âïl)‰\HBH!uñâÅ*Ë_ B±aá«««ROÛ¶m‹ŸãÇ‹êÕ««´ëׯŸ˜>}z±ïnX³fÐÑÑQiÛ¼ysqçΕãÅP1yyy 5///áíí]ªQz7¥§§#,, ±±±°³³C³fÍd'@>þ—.]BDDjÔ¨¶mÛ›˜^^†øøx4nÜÎÎβw´;wî"##QPP€úõë£M›6ÅÚÅÆÆ",, III033C›6m^{uÃË{÷î¡N:°±±)õUB„††âöíÛppp€ „8vìù€+W®àêÕ«xö쬬¬Ð¾}ûbWŽ$''ãÌ™3ˆ‹‹CõêÕáää¤r9áÛ••…‹/âæÍ›077G»ví §§WêõóòòŒŒŒ ´jÕ ÈÍÍÅÁƒ‘••…~ýú•xÃûÇ•+WPµjU´iÓæµw¿|•gÏž¡fÍšpqq¯¯ï¿ê#==/^ÄÝ»wamm&Mš zõê¯\'33gÏžEbb"Z¶lYì4Ǹqã°~ýúb“#Kûäççãò厩©)Z·n]lÒçƒ éÑ7%%%aaaHHH€½½=š6m uuõbíž}DLLŒl]ü1<ˆíÛ·cøðá ÙÚµk1kÖ¬½¿D:~wÑrõêU¬_¿<À°aÃЧOܺu .ÄÓ§O1yòddffâÆ˜9s&æÎûÚ>Ÿ…;vl‰ßœø×_aùòåhÓ¦ FމÄÄDèëëÃßßjjj²ëÀ±cÇP­Z5üõ×_xøð!Nž<‰ñãÇ£uëÖèÞ½;–.] CCCìØ±»wïÆéÓ§U¶Õ¨Q#4mÚTeÙŽ;P­Z5$''ã—_~““Ž;†&Mš6l(L›6 *ëÿüóÏpww‡µµµìþ?~¼X_X´he×177Ço¿ýذaÌÍÍ¡¡¡®]»böìÙ¥:®D$!è ŒÔà IDAT?~<üýý1|øp DDD$‹!ˆˆˆd1$‘,†"""’Å@DDD²ˆˆˆHCÉbH """Y DDD$‹!ˆˆˆd1$‘,†"""’Å@DDD²ˆˆˆHCÉbH """Y DDD$‹!ˆˆˆd1$‘,†"""’Å@DDD²4Ê»¢EHHæÏŸºuë–w)ï­ˆˆüöÛohÔ¨Qy—Bô^`H z‹†ŽÏ?ÿ¼¼Ëxo­X±¢¼K z¯ðtÉbH """Y DDD$‹!ˆˆˆd1$‘,^Ý@ô9xð öîÝ 066FŸ>}вeËr®Šˆ*"Ž$}`.]ºSSS(•JtèÐC‡ETTTy—EDCÑ;ÎÛÛwîÜAAAŒ””¤¦¦bΜ9صkNœ8øé§Ÿ¨S§ìííáêê 777œ:u GÅáÇ¡T*þþþèÓ§V®\‰§OŸÂÂÂðÅ_`Á‚ÈÈÈüõ×_ðððÀ¤I“““øùçŸÑ½{wÌŸ?””„±cÇÂÃÃoõøÑ¿Ç@ôŽÓÒÒÂþýûqåÊ:t!!! A~~>\]]1cÆ øùù!&&µjÕ?~ÞÞÞøñÇáëë‹^½z!** 'NÄäÉ“qãÆ üòË/øõ×_‘ ooodggã믿ÆÒ¥Kaee…Y³f!<<Û·oǶmÛP½zuÌš5 ¡¡¡8{ö,PPP€ØØX¬X±­ZµÂÎ;qðàÁr>bDTZœ“@ôŽsuuÅÈ‘#¡¦¦†©S§âèÑ£PSSÃàÁƒadd„o¾ù£GÆ;w¤utuuadd„š5kbòäÉ000 0õêÕÃ’%Kðå—_ÂÄÄJ¥}ûöE£FЭ[7ÔªU  À€0kÖ,ddd`êÔ©xúô)âââ0uêTܹsC‡Å_|333tìØãÆÃ70f̘ò:TDô1$½ãjÕª…ŒŒ „„„`Û¶mèÙ³' Z´h@Æ qêÔ)téÒвeKÙÛCרQP­Z5$''222P¥J˜˜˜ 55ðäÉ„„„ÀØØƒF÷îÝ¥““ƒ !!ãÇGJJ qþüy„„„ sç·‰‰ÉÛ8ÔÕÕaff†ððp4lغººˆŠŠ‚¡¡!²³³¡©©‰š5kªô555i4áéÓ§Ø·oÚµksssÀóçϱoß>XXXH—MfffÂÏÏ-Z´€ àòåË E›6mФIäææ"$$‰‰‰puuEÕªUËü…_ðäêêÊo$*J¥’# DïƒjÕª¡Zµj i¹½½½ôÿ¯ûŠê—Cƒ¾¾>¾øâ •ešššøôÓOU–UªT _~ù¥Ê²fÍš¡Y³fÒc---tíÚµ{BD ¯n """Y DDD$‹!ˆˆˆd1$‘,†"""’Å«ˆÞ’`êÔ©˜1cFy—òÞÊÌÌ”n"EDÿCÑ[bnnŽåË—¿‘û$P¡+VÀÔÔ´¼Ë zoðtÉbH """Y DDD$‹!ˆˆˆd1$‘,†"""’Å@DDD²ˆˆˆHCÉbH """Y DDD$‹!ˆˆˆd1$‘,†"""’Å@DDD²ˆˆˆHCÉbH """Y DDD$K£¼ úPÄÇÇcÚ´i˜;wny—òÞÊÈÈ€““Sy—AôÞ`H zKjÖ¬‰Ÿ~ú Ÿþyy—òÞZ±bªT©RÞe½7xºˆˆˆd1$‘,†"""’Å@DDD²ˆˆˆH¯n ª ””$=611¦¦æ+×ÉÏÏÇóçÏ¡££ó¦Ë#¢Gˆ*ˆ””4nÜJ¥J¥:tÀ¼yóJlŸ““[[[œ8qâmgÿþýHIIù¯åÑ€!¨©_¿>üüüàçç‡S§NaÓ¦Mxòä €ÂQƒ3gÎ ++ pæÌ4hÐ-Z´deeáìÙ³ÈËËP:ž={†Û·oKý?}úÛ·oGXX˜´ìêÕ«Ò6ˆˆ^Ä@TAEEEAKK zzz¸qãzôè___´mÛ÷ïßÇùóç‹;wîàÀèß¿?víÚ…N:áéÓ§X¿~=”J%~ýõW©Ï¤¤$DGGãèÑ£BÀÝÝk×®EïÞ½±oß¾rÜ["ªˆ8'¨¹~ý:œ7oÞÄ’%K P(°mÛ6Œ7ŽŽŽ077ÇæÍ›ñÅ_ ""-[¶Dß¾}±dÉaΜ98xð  råÊøé§Ÿ¤þ­¬¬`ooaÆáÂ… °°°ÀêÕ«‘šš OOOxxx”Ë~QÅÄ@TØØØàìÙ³ O 888`äÈ‘¸páÒÒÒpäÈ@›6mTÖ‹ˆˆ€··7@KK ÕªUÃõë×Ñ¥K—·† Œ÷&v‰ˆÞa<Ý@TAéëëC[[111èÒ¥ Z¶l‰åË—ÃÎÎ5jÔPiÛºuk 8+V¬€¡¡!,-- …ü?ñüü|téÒ‡B~~>.\¸;;»7½KDôŽaH ª 455áè訲ÌÍÍ 7oÞÄ!CpáÂtíÚ—.]BÛ¶m¡§§‡F¦OŸŽåË—ÃÍÍ •*U‚™™,,,`bbRl;öööP*•033ƒ««+ÜÜܰråJ|÷Ýwoe?‰èÝ¡æåå%І)‰èÍ ABB¿ò Z±b\]]¥ðDDÿžR©äHÉcH """Y Dï ääd„„„H/_¾Œk×®I9‚ôôt[÷äÉ“ÈÎÎ.óšîÝ»‡Û·o#>>ׯ_GLL "##Ë|;Dôö0$½ƒÔÕÕáéé)=ž:u*fΜ B`ðàÁÐÐнeó²eË––Vêm¥§§cöìÙ¯m‚   $$$ 22çÎÃþýûK½"ªxˆ*!ðøñclݺððáC;v ¾¾¾xúô)`Ïž=Ð×ׇ©©) }ûö8wîÎ;‡V­ZÁÅÅGÅ¥K—¤ï€ÜÜ\èééI PPP555éÛÐÐ@á„Hèêê¢E‹*a6mÚ„áÇcÅŠèÝ»÷k÷I__ ¦¦}}}žr zÇ0$U&&&ÈÉÉA¥J•ФI£mÛ¶ ç!ã‡~À”)S~°}Oƒ†† ¡©©‰êÕ«CKKKê×ÖÖ—/_ÆéÓ§€ˆˆ( 4iÒ¾¾¾¸xñ"Ž?uuu¸»»ãìÙ³pttDpp°4O!99@a111Á¢E‹””ôÚ} @xx8¶lÙ‚† B¡Pà÷ß—ú#¢Š§ˆ*iÓ¦IõÏž=-[¶$&&bîܹÐÑÑA||<ž•*URY¿è¯uuuu :°wï^¬Zµ ÎÎÎØµk ±xñb¬^½=BÇŽÑ´iST®\ …3fÌ€‹‹ z÷î !5j„½{÷bÉ’%øõ×_¡¡¡ 6¨ÔÞ¼ysäääÀØØ†††055ÅÖ­[---¬]»““âwoËLô–T´Û25 nnnÐÐÐÀÚµkTÞ%ýg¼-3QÙám™‰>` .DZZÒÒÒ°gÏžò.‡ˆ* žn ú@™˜˜H§#ˆˆäp$ˆˆˆd1$‘,†"""’Å@DDD²ˆˆˆHCÉâ%Do‰žžþüóOé+˜+:!âââP»víò.¥ÔbccáááQÞe½7ˆÞ’V­ZÁ××·¼Ë(µµk×âÖ­[X¸p!ªT©RÞåQ9àé"*&)) Ø´iæÍ›WÞåQ9aH ¢bæÎ‹~øVVV066ÆÅ‹Ë»$"* D¤âÔ©S°²²’æ"Lž<Ë–-ã77}€ˆH’ŸŸuëÖaüøñÒ2mmm 8¿ýö[9VFDå!ˆ$k׮ŨQ£ ¡¡:§¹{÷î8wîRSSË©2"* DHHH@dd$>úè#Ùçg̘ÁIŒD†"Ì›7?üðC‰Ï[XX Zµj {‹UQybH "?~õë×G5^Ùî›o¾ÁÊ•+QPPð–*#¢òÄ@ôËËËÆ 0vìØ×¶ÕÒÒ—_~‰7¾…ʈ¨¼1$}àV¯^Ñ£GC]]½Tí»v튋/"99ù WFDå!è»wï¢]»vÿh½~ø“‰> D°¢;+þSfff¨]»6Ξ=ûª"¢Š‚!èuôèQ4iÒÕªUûWëO˜0kÖ¬á$F¢÷CÑèùóçøí·ß T*ÿuššš6l¼½½Ë°2"ªHˆ>@«V­Â˜1cJ=Y±$...¸zõ*=zTF•QEÂ@ôyøð!bbbкuë2éoÆŒ˜;wn™ôED‹Æë›ÑûÄÇÇ©©©¯=ÕPPP€û÷ïÃÊÊêµ}ÆÅÅ!&&uêÔ)«2‰¨`H úÀL˜0¡Tí²³³1mÚ4¬X±â WDDO7‘,†"""’Å@DDD²ˆˆˆHCÉbH """Y DDD$‹!ˆˆˆd1$‘,†"""’Å@DDD²ˆˆˆHCÉbH """Y DDD$K£¼ úP¤§§#!!¡¼Ë(µœœ¤¥¥áæÍ›å]J©éèèÀÒÒ²¼Ë zo0$½%»víBTTj×®]Þ¥”ZóæÍqàÀò.£ÔBBBàççWÞe½7ˆÞ¢ÂÞÞ¾¼Ëxo½K£DïÎI """Y DDD$‹!ˆˆˆd1$‘,†"""’Å«ˆÞ3wïÞEhh(ÀÐÐ...ÐÕÕ}ízQQQ T©R:u‚––Ö­•ˆ*6Ž$½gŽ=ŠmÛ¶!!!gÏž…½½=îÝ»÷Úõ‚ƒƒ±}ûv$$$ $$M›6ÅãÇßBÅDTQq$è=ÔºukL˜0@áh‚ŸŸúô郬¬,DDD oß¾ÈÈÈÀöíÛÑ¥KØØØÚ´i#­—’’‚£GÂÝÝ÷î݃jÖ¬‰~ýúA[[×®]ƒ¿¿?š6mŠž={Jëüþûï°¶¶FïÞ½Ëg牨Ìp$è=”œœŒ›7oâÔ©SðóóCÛ¶mŽþýû#%%éééèÞ½;,--1{öløúú.^¼ˆ-[¶à§Ÿ~Â;wжm[ÄÇÇ£_¿~hÕª.\¸€M›6!==£G†³³3¶oߎ³gÏ")) îîî¨_¿>öìÙƒÕ«W—óQ ¢ÿŠ!è=túôi¬X±»wïÆÌ™3ѪU+@³fÍðÕW_!((žžžððð€··w±»@A¡P <<Õ«WG@@òóóqóæMܹsêêê¸sçÂÃñtéR8;;cß¾}°³³ÃÓ§OáììÌÛ#½xºè=äîîŽ3f[Þ´iS@jj*LLL~)RÑE 2`ee…?þø•+WƸqãðÕW_aèС …¡¡!nܸ?ÿü®®®øá‡ðèÑ#CWWfff²Û'¢w Gˆ>@îîîøí·ßpïÞ=Ìœ9§Nܾ}€¿¿?–/_WWWܼy;w†››‚ƒƒ‘™™‰[·naРAèÕ«¼¼¼ œ;w¶¶¶¸{÷..\¸PÎ{IDÿCÑ{ÆÁÁ:t(¶¼Q£Fh×®€ÂQ‚ùóçcÁ‚¨[·.úöí GGGXXXàìÙ³¸zõ*-Z„O?ýŸ|ò  .\ˆ¯¾ú Ïž=ƒ‘‘>ýôSLž<999;v,š4i‚™3gbÁ‚ÐÔÔÄøñãßö®QSóòòÞÞÞå]Ñ{ÏÛÛÎÎÎüÈ7H©T‚ïgDeC©Tr$ˆˆˆä1$‘,†"""’Å@DDD²xŸ¢·¤  ñññ¨R¥Jy—òÞÊÉÉ)ïˆÞ+ DoILL ¼½½¡§§WÞ¥¼·ž} www©Ÿ/’—— ÿÿ§¾lÙ2Lœ8 6,q""€# DV­Zµ „@~~>’““1räHtêÔ ½zõ³gϰfÍDDDààÁƒ¸yó&ú÷ïvíÚa̘1€+V`ñâÅ0`€ÔgDDŽ=Š™3gæÏŸxxxàÊ•+岟DTq1$U ·nÝ‚««+\]]aii‰ï¾û:::ضmzôècÇŽ¡cÇŽX·nF¶mÛ¢[·nX²d æÏŸÓ§OãéÓ§8|ø0ž†¢ âáÇhÞ¼¹tUCzz:–.]жmÛ¾r½˜˜8::¢]»vÈÊÊBvv66nÜ(ÝQñ¿:þ<|||°lÙ²2éˆÞ<Ý@TØØØÀÏÏAAAX²d V®\ !>|ˆÌÌL$&&îÝ»‡äädi=[[[øùùáСC9r$~ùåé¹;wîàÊ•+BHË®^½Š»wïªl;::·nÝ*±¶ÌÌL鮌¹¹¹HJJ“'OTú‰EAA®^½úßUI ª nݺSSSdgg£gÏž°³³Ã·ß~‹eË–!!!yyyh×®ÜÜÜèèhdeeáðáÃèÒ¥ `ðàÁ¨^½:222 ££ƒÕ«Wc̘1ÐÖÖÆƒàêêŠ#FàÛo¿EFF’’’ФIÌŸ?_¥–cÇŽaÅŠ¸téÚ¶m‹ž={bðàÁhÙ²%âããQ¿~},^¼nnnhÕªÔÔÔƒÀÀ@~/Ñ;Œ!¨¹rå :vìˆÜÜ\Ô«WsçÎPBBB ¡¡K—.áСCÈÉÉÁÎ;Žüøã€k×®IwZüꫯàììŒÀÀ@|ÿý÷€ÐÐPLœ8sæÌABBÒÓÓqíÚ5lÚ´ ЦMÌ;WåÃÝÔÔ3gÎÄýû÷1qâDôìÙ?ƺuë­[·Fvv6bccqôèQ˜˜˜ÀËË çÏŸG«V­Þʱ#¢²Ç@‘Íl IDATTØÙÙ!$$DeÙ³gÏЪU+T®\/^”.ƒÔÖÖÆÐ¡Cqÿþ}4jÔ[¶lPxZÀÙÙnnnX¿~=þ½;Ë)ý?þjB£ÙB!YÊ.­dŒ}_‡‘u¬c߇>c™±“BÖ¡‘}4Èžµ,KQD¥ÔùýѯóÕ¸‘™’ò~>œûœë¼Ï¹îsî÷¹Îu®³páBìííÕQýüüX¼x1³fÍbðàÁXYYñðáCfÍš@Ë–-‰'_¾|j ÖÖÖèëë«Ó,--Õ¿-,,ÇÄÄDí8iccÃÅ‹%I"“v@!r---ªU«ÆåË—yùò%÷îÝ£K—.@ê $$$ðçŸbaaÁÝ»wyøð!¾¾¾4oÞœÄÄDEaîܹ̙3‡€€~ûí7j×®M˜4iS§N%%%…|ùòqýúubbbÞÓÑ£Gyúô)ÑÑÑ„††R¹re=zDpp0IIIìܹGGÇO²„YCZ„øLP£F·¦kkk«£4êèè0zôhÚ·o®®.&L Ož\]])X° åÊ•ScLkU°±±a̘1ܼy“ü---J–,ÉÖ­[?~<ß|ó eË–ýD{O‘dXf!>‘Ì–ùsƬY³XµjUºéööögST2,³™ÉÓÓSn7!>ž¡¡¡Úºð¦7‡{Bä|’$!>ZéÒ¥™0aÂ[Ó—/_ž Ñ!²Š$ B!„ÐH’!„Bh$I‚B!4’$A!„I’ „B$IB!„F2⢟HÙ²eY¼x1ºº9ã°KLL$,,ŒªU«fw(V°`ÁìAˆ\%gœ­„È\]]quuÍî02ì‡~ \¹r 6 ++«ìG‘ ävƒâ-çÏŸ'þü,Y²„Ÿ~ú)»ÃBdI„é(ŠÂ/¿ü¨Q£022ÂÝÝÍ›7gwXBˆl I‚"µk×Ò¾}{ èС»wïæÅ‹Ù™âS“$A¡Š‰‰!((ˆ-Z¤›>fÌ~þùçlŠJ‘]$IB¨fÎœÉøñãßš^±bE´´´ ͆¨„ÙE’!!!!,X²eËjü|̘1Ìš5ëG%„ÈN’$!P…¹sç2räÈwΓ/_><<<ظqã'ŒL‘$IB°zõj:uê„Á{çkÛ¶-Ò‰Qˆ/„$ B|ᢣ£ ÆÝÝ=CóK'F!¾’$ñ…›9s&ãÆËðü–––èééqåÊ•,ŒJñ9$Aˆ/ØÙ³g111¡téҵܨQ£øßÿþ—EQ !>’$ñ…R… 0lذ^6oÞ¼´lÙ__ß,ˆLñ¹$Aˆ/ÔÊ•+éÚµ+úúúÿjùo¾ù†ƒ›É‘ !>’$ñŠŽŽæÌ™38;;ÿ§r¤£¹›$ B|>¶³â»”+WCCC.]º” Q !>7ºÙ€âÓ:sæ ºººèêêùŸËëÚµ+cÇŽ•þ BäB’$ñ…¹uëx{{¿w¾ääd>LÓ¦M?X¦••÷îÝ£D‰™¦â3 I‚_˜6mÚЦM›Η@ll,S¦LÉú „Ÿ%é“ „B$IB!„F’$!„B#I„B¡‘$ B!„ÐH’!„Bh$I‚B!4’$A!„I’ „B$IB!„F’$!„B#I„B¡‘$ B!„ÐH’!„Bh$I‚B!4’$A!„éfwî޽˽{÷²; ñ‘’““ÑÑÑÉî0²Ìëׯ)X° ÁÁÁÙŠo177ÇÜÜ<»ÃÈõ$Iø xyyQªT)òæÍ›Ý¡ˆ°fÍzôè‘Ýad©²eË–Ýad™ÐÐPŒ)V¬Xv‡">³gÏØ³gS¦LÉîPr=I>;w¦P¡BÙ†øÁÁÁôìÙ3»ÃÿÁêÕ«©X±"öööÙŠø‘‘‘x{{gw_é“ „B$IB!„F’$!„B#I„B¡‘$ B!„ÐH’!„Bh$I‚B!4’$A!„I’ „B$IB!„F’$!„B#I„B¡‘$ B!„ÐH’!„Bh$I‚B!4ÒêׯŸ’›ÞË}ãÆ &L˜@¡B…²;” »yó&¥J•BWW7»CÉW¯^ѪU+¾þúëL-wðàÁ$%%ej™YéæÍ›XXXdw–˜˜HïÞ½©_¿~–­cÆ lÛ¶Â… gÙ:2Sll,zzzäÉ“'»Cɰׯ_³|ùòL-søðáÄÅÅej™Y)11‘û÷ïS¦L™ì%Cbcc©_¿>ýû÷ÏîP>Ч§'9ãWé#¼xñ‚Æãéé™Ý¡äZ!!!gz¹III䦄õssøða"""²t‰‰‰Œ1{{û,]Ï—,+Îmqqqrìe¡°°0öìÙ“Ýaü+r»A!„I’ „B$IB!„F’$!„B#I„B¡Q®{º!3%$$°}ûvttthРÅŠËðò/_¾$00êÖ­«> ƒÆÆÆÜ¹s‡ØØX¬­­ß[Þ“'O¸víéÖqáÂ…tÓ¾tÑÑÑ ¯¯OãÆùꫯ2´ìëׯ9zô(Ož<ÁÅÅ…üù󓘘Hpp0 6ü¨8vìØA||/åË—WëÍÎÎ4h@HH¥K—¦H‘"¬[·KKK5jÄ™3g055eøðáTªT‰³gÏÒ²eKõ*& €òåËsäÈzôèÁ_ýÅ•+WèÙ³')))„„„ ( eË–EGGG¡C‡|óÍ7üðÃ$&&òÇpåÊ<<<°±±!>>žmÛ¶I‡Ôº>pàçΣC‡”,YòSïÆÏŠ¥¥¥º?mmmÙ¸q#\¸päädÊ•+GáÂ…Y·n+V¤aÆ\¸p???.\¸ ¶,Y²„ƒbddDÉ’%)Y²$¾¾¾¸ººòÕW_áëëK§NÇßߟ%Jо}{BBBøê«¯(_¾<¯^½b×®]´iÓ†¨¨(Ö¬YC… 2}€±Ü Fj½™››³eËÌÌÌxðà4jÔ€µk×R·n]lmmÙ·o¡¡¡œ>}Z-gúôéœ>};;;î߿ϦM›022¢]»vܺu ===*UªÄ®]»°±±¡téÒøùùÑ¡Ci9ú¤%áâãã ãÂ… x{{S¯^=’““éÓ§ëׯ端¾¢uëÖÄÅÅF¿~ý8~ü8ÎÎÎèëë£( ‘‘‘Ô¯_ŸfÍš©å.Y²„‘#G¯NSggg ,Hxx8¤H‘"äÏŸKKKñ=yò„+VCÿþý±··gýúõS¶lYLLLrÌèw™)66–°°0Ξ=ËêÕ«©W¯Ož<¡{÷îê„‹‹ †††ìÙ³‡)S¦P¹renÞ¼I=زe 666´oßž—/_²xñbúôéÃÉ“'‰‰‰¡lÙ²ÄÇÇsåÊV­ZETTÝ»wçðáÑ’’ÂêÕ«Y±bC† ¡_¿~@êÒ­[·°³³£W¯^$''3sæLîß¿Oùòå4h#GŽäøñ㘛›Ó¦Mbcc³m~ÒêôÌ™3¬Y³†zõêE·nÝ8räùóçÇÅÅ…|ùò±k×.¦OŸÎáÇiݺ5ZZZ$''IëÖ­©S§7oÞÄÇLJ/^ðÝwß@hh(þþþܽ{—.]º`ooOpp0ëÖ­ãÙ³gjË\@@§Nâþýû´jÕ +++üüüd@" ¢££ ãĉlܸ‘zõêqãÆ :tèÀ7hÚ´)fffxyy±|ùr8@»ví€Ôº"##éÛ·/VVVÄÇÇãææFÕªU¹ÿ>¿üò Ïž=cÑ¢E@j žÏŸ?gþüù’ üGÒ’ðdøðáÄÇÇ£­­Ío¿ýF§N°µµ¥gÏž:tˆçÏŸÓ¼ysJ”(ÁöíÛ¹téW¯^%þüôìÙ“Q£F‘’’† ˜1cÛ¶m£Zµj¼xñ{{{¶oß.£½þÃÙ³g™?>ººº 0777Ž=Š……Æ # €-ZЦM\]]¹ÿ>'OžTϋׯ_gúôé<}ú” *°xñb<È•+W¸rå “&Mbøðá„……áîîNPPU«VÅÍÍ-;7=W–„°°°ÀÛÛ›¥K—òí·ß’/_>¬¬¬ÐÓÓ#&&&]G###jÖ¬©žè ðóócÀ€(Š’®ìþýûsüøqµ <**ŠB… ahhˆ¡¡!óçÏÏpœFFF„††’?~ÜÜÜðóóË„­Ï¹lmmñööfÉ’%tîÜY½íccc¤v„+P zzzÀž={pqqaöìÙìÚµ‹ ¤+7mŒ--­t§I+@[[›ž={Ò³gO~úé'>>Ô¨Qƒ5j©'¹üìììHHH@Qõ»0lØ0Ê•+—E{+g¨Y³¦Z§:uBOO€*Uª©W¬ÿ¬S;;;6oÞ @ñâÅñóó£}ûö˜˜˜¨·~úöíËõë×ÕÄïäÉ“´iÓ†‡Ò³gO 5Ùkذ!»wï&::KKK¢¢¢øê«¯044¤téÒŒ;öï•Ï_Ó¦MñööfñâÅ|óÍ7êñ¢éX400@__?]½Y[[ãçç§öIøûï¿qwwçêÕ«|ûí·èêêR¶lYV¯^MóæÍyýú54oÞüSon®#IÂT¡B"""&003fP½zuêÔ©C¯^½8yò$;wîäçŸV¨Òhkk³téR¼¼¼€ÔƒéÚµk˜››£¯¯ÏÖ­[Õy£¢¢€Ô–={ö¨ÿRRR€Ôl»k×®´hÑOOOnß¾––=úD{"g©_¿>AAA\¸pÕ«W³råJJ•*Å„ ð÷÷çæÍ›¬ZµŠV­Zýëu¤¤¤¨õ´xñb’““)^¼87oÞdĈ\¼x‘ØØXºwïNLL “&MÂÀÀHíñüùsjÔ¨Áܹs?ªWø—¨Aƒ:tˆ‹/²råJõCGG‡aÆqþüy|}}Y±b…ºŒ££#þþþØØØP¶lY>|H±bÅ ÅÅÅWWW<¨Þêéܹ3ýû÷§sçÎ|ýõל8q®^½ª&ü"ãš7oÎÆ¹~ý:ÿûßÿ {÷îܸqƒñãÇsùòeV¬X¿¿?·nÝ¢Zµj´k×NmýpwwgÉ’%Ô¯_vïÞ]vnZ® cgg7ÅÃÃ#»ãÈ4i½É3ãË¡¥¥…¾¾>¶¶¶oM×ÒÒR¯œœX·n÷îÝcìØ±ѦMî޽˦M›ˆeÆŒ˜››«9¦ÅW¤H*T¨€µµ5åË—§^½z,_¾œçÏŸ3aÂòæÍ‹®®.þþþ¸¸¸ðôéS"""Ô 6$oÞ¼Ô¯_Ÿ×¯_³téRLLL8p &&&ìÛ·üùógêãw™¹ß´k×.2㻨¥¥…‘‘‘ÆGJ ©\¹2ÚÚÚ4lØ_ýEQ:t(¥K—¦jÕªlß¾P·n]ºu놮®.zzzê•­­-ZZZ`mm––ÆÆÆ”/_>]GÒ””nÞ¼IDDfffÌš5 }}},--™3gE‹ÅÉɉúô郿¿?Œ5  b÷îÝŒ7ŽÒ¥Kÿ§ýrëÖ-^¼x¡^yg…LLL077Ïô² ( îÛ7R©R%µN—-[†––ßÿ=†††têÔ‰ .°yóf´´´˜?>ùòåÃÚÚsssÊ—/O5(^¼8¶¶¶T¨P *Ä‘#GèÓ§‡¢Q£FXZZ’@ïÞ½Ñ××ÇÌÌ sss¼¼¼(]º4ýû÷G[;k¯½2ë8Éê2Ó˜ššR¾|ù·¦*TˆråÊahhˆ­­-‹/¦xñâôéÓG­·àà`õ–ÑÂ… ÑÑÑÁÕÕ•ÐÐPvìØA·nݸ|ù2•*U¢Zµj˜ššÒ¸qcÌĮ̀\¹rº–½ìÅ7rÜ‹ÏvíÚ•û^ö†B¹/˜u²j{zzJǯ,tøða"##Õ~5YaõêÕT¬X1Ç s’¬8NäØËZioL럖SxzzÊí!„Bh&I‚B!4’$A!„I’ „B$IB!„F¹nÄŨ¨(f̘¡Ñ)2ß«W¯Ô!S3ÓþýûåMoY(..Žþýûgé:"""øñÇÕ±Dæ355Íô2ö÷÷gÀ€äÍ›÷­ÏÞ$õöùû"“„7P¦L¢££X²d îîîÔ¬Y“   öïßOXX¿üò )))Œ3ggg¸}û6‘‘‘ôìÙ“Î;sþüyµÜ… ª?bAAA¸»»ãää„··wvmj®’/_>ÌÍÍÕzûñÇquu¥V­Z\¹rnݺÅâÅ‹yùò%C† ¡iÓ¦4iÒ„§OŸrþüy† BË–-Ó]-Z´®^½Ê®]»pvvÆÉɉ7fצæjVVV<}ú€S§NѪU+êÖ­ËäÉ“‰eÍš5øúúrÿþ}vìØAóæÍ©U«ëׯ S§NÌŸ?ŸÙ³g«eúúúÆÂ… yúô)½zõÂÑÑ‘¾}ûòüùólÙÎÜDKK‹ *¨õvàÀ<<<°··gñâÅܽ{—;w²dÉâââX³f Íš5£fÍšê€B:t`òäɬZµJ-wÉ’%„……±nÝ:îܹCÇŽqttdèСY>˜x~ýú)¹É¹s甥K—¾wžæÍ›+õêÕS\]]•Zµj)7V•Ç+­ZµREQ>|¨T¯^]QE©W¯žòúõkåÏ?ÿTƯ(Š¢>|X騱£rïÞ=ÅÀÀ@yüøqºu+£GVEQ\\\”¨¨(%99YqttT^¼x‘Ù›ýIedÿú.Ö¨QCiÚ´©âêêªT«VMi×®’’’¢\¾|Y]öÒ¥Kг³³¢(ŠR§NEQÅ××WñòòREQ6lØ  >\9uê”R¸pa%!!!Ý:¶nݪ,X°@QE©_¿¾§¼zõJ©W¯ž’’’’©Ûû©:tHñõõÍÒu¬ZµJ9~üø;?_·nR®\9ÅÕÕUqttTŠ-ª„……)Š¢(ß|ó¥(Jê1sñâEeáÂ…Š’’’¢8::*¯_¿V’’’”råÊ)¯^½Rêׯ¯üúë¯o­§Q£FŠ¢(Š···òÛo¿)Š¢(sçÎUÖ¯_ŸÉ[üéeÅ9ûCeΚ5K©\¹²âêêª4jÔH)Y²¤òàÁEQÅÙÙYIHHPRRR”êÕ«+=RÆŒ£:tHyùò¥âî¤¤(ÏŸ?W¬¬¬EQ e×®]o­'­Þ&Mš¤ìÞ½[QE9r¤rðàÁLÜÚO/44T™7o^v‡ñÑúõë§|±#.þïÿ£R¥Jêxö.\àÆܾ}›N:o‘Hpp0:u"%%š4i‚‰‰‰Æõ$%%ñüùs . @íÚµ9zô(...Y¸u¹×òåË)T¨Ož<¡]»vÜ»wÀÀ@.]º¤ÖÛ?ßÈãÇ "11‘2eÊвeKµÿéþýû«e•+WŽË—/S¥J•¬Û¸/D«V­?~<))),[¶Œ+V0cÆ Nž<É AƒHNNæÉ“'ê2—.]âöíÛtíÚ333õó:¼s]dæÌ™8::²páBºté’U›–«}ûí·ôîݛׯ_3cÆ üüühß¾=aaaôìÙ€‚ ¥.ÄÝ»wéܹ3_}õIII(Pww÷w®ëСCŒ=H­·ƒÒ¤I“¬Û8ñN_l’P @ *D¡B…pwwçØ±c¸¸¸P»vm–.]JBB~~~é–©^½:æææôïߟ»w覆Òî»i¢§§‡¾¾>IIIèééúÖ}7‘q Të­aÆœ8q‚êÕ«óâÅ &NœÈ“'O8xð`ºeªW¯N™2ehÙ²%W®\áñãÇÀûëíÍ!€;wîP¡B…¬Ù¨/Lž>>hkk³|ùrÊ—/¯.SµjUªV­Š¯_¿fÕªUèééa``€¶ö»ïvÛÚÚréÒ%j×®-õ–;Ø$áM%K–ÄÇLJÁƒGëÖ­yõê}úôI7Ÿ»»;­ZµâøñãDDD°`Á‚w–Y¨P!¶mÛF·nÝèׯS¦LŠ-šÕ›ôE(Y²$,Y²„¹sçÒ©S'¢¢¢Þê×¶m[:uêÄÎ; ÇÇLJh,³P¡BÌœ9“o¾ù†:ТE tuuiÚ´é;[Ä¿gffÆ™3gxöìÝ»w§Q£FX[[£­­­^}BjbQ§Nœ)\¸0vvvhii½³Ü¸¸8V¯^MûöíéÛ·/;vìàþýû¬^½úlUîW²dIöíÛ€‡‡Mš4¡L™2˜››£§§§Îgff†±±1-Z´@[[›6mÚ¼·Ü»wïòûï¿Ó³gOFŒAÉ’%yòä ýû÷ÏÒíïñ%öIø(ñññïüüÎ;Êëׯ?XNxx¸£(Š¢$$$(=úOq}.²«O‡DDD(‰‰‰ïüüÖ­[êW¦¼|ùRQE‰U¢££ÿS\Ÿ‹Ï¡O‡$$$¨÷º5‰ŽŽV©÷‰ŽŽVnÞ¼©þÿîÝ»ÿ:¦ÏMvôIøØØØ·úe½éÑ£Gê‹õðáC%""BQEIIIQÿÎé¤OB.“ÖŒù.%K–ÌP9êߘššþ§¸Äû¥=&÷.}ä•••úwþüùÿSLâã¼÷øKkîþ´[RiÌÍÍÿslâÝòçÏÿÞc%£ç¾"EЍkii}ð˜Yï‹R!„š}‘IBtt4‘‘‘DFF’””ôÑË'&&òðáÃtÓ^¾|ÉË—/ÓM{³—ïûhš/íäŒúØùs¢¨¨(µÞ’““?zùˆˆˆtÿ‰‰ùè’^¼x¡ÆÿÑ1|ȳgÏþÕ¶åñññêþû·cDDD|ò®þÍw%7yùò¥Zoÿ<ÏeÔ?¿ÿ"::ú‹®Oé‹LÚµkG·nÝðôô¤nݺLš4)CË%$$гgO*†iÓ¦ñõ×_ãé鉓““úÈ^f4hÿýw¦–ù9ñññÁÑÑOOO¾þúk\]]3\Ë–-ÃÖÖ–‘#GÒ°aCæÏŸŸÅÑþŸîÝ»g8éÏæÌ™C³fÍðôôÄÍÍV­Zex€£™3gR½zuFEýúõY·nÝާk×®ê@j"k}‘I€··7Û·oçÔ©Slݺ•èèhîß¿OJJ ׯ_R“‚´r€1cÆ`aaÁ©S§Ø´i‹-bذajF«­­ýÎ÷ ÄÆÆròäI’““INNf÷îÝ’˜˜¨qþ… ¢«›Úeäúõ넆†ðäÉ–,YÂ;w4.‹/¸wpùòeõêôéÓ§ÄÅÅqóæMbcc?v·e»M›6±}ûvŽ=ÊâÅ‹IJJR¯,oܸ¤îë7ß0cÆ Ö­[ǯ¿þʦM›Xºt)?ýô äáÇ$%%ªÓ|êÔ)µ•éŸå5JáÌ™3„‡‡©CÌ=zT}ÄR¿CGM7†½¢(¿wÿ_¾|YmJ‹ïêÕ«j"øüùsž?ν{÷rÜW—.]ؾ};‡¦V­ZlÙ²…/^Cxx¸z<…„„¨upôèQÖ­[ÇðóóãðáÃlÚ´‰ëׯsûömuøÞk×®©ã“ܽ{Hmùû믿Ôýy÷î]µÜ„„îß¿¤ŽÍpüøñ÷^)_¸pgÏžðàÁ’““¹råŠZ^LL /^¼àöíÛ€~îÌöíÛ ÂØØ˜}ûö©Û›vÎT…³gϪõ±eËŽ?ÎÑ£GñõõeïÞ½Ì;W=FRRR8~ü8‘‘‘@êø$ißñððpõ¼õ®÷à\¸pAm‘zðà)))éê#::š—/_rûömµÞÄÇùâ;.¦€óäÉCÿþý)R¤–––dݺu˜šš2mÚ4úõ뇵µ5@ꋾ֬YÃÔ©SÑÕÕ¥H‘"üþûï888```ÀôéÓÙ¹s'½zõ¢R¥J888ðèÑ#nݺÅíÛ·IHH H‘"\¿~>}úдiS Äúõë)V¬¸ºº2hÐ þúë/ž¬¬¬hÞ¼9•*UâàÁƒ.\˜±cǪ-€i&OžŒ™™«V­âüùóŒ9’¼yó’?~Ž;ƪU«8xð û÷ï§lÙ²œ:uŠáÇӺuëO¾Ïr²/6IèÒ¥ yòäA[[›Ÿ~úIYÏÆÆ†¾}ûÒ½{w–-[F¹r娴i÷ïßGGGGYqÒ¤I9r„çÏŸ³yófôõõY¸p!ýû÷gïÞ½êºV®\ÉÒ¥KÉ“'#FŒàÌ™3¸»»chhøÎ‘Ó;vŒ–-[Ò«W/þþûo*W®L©R¥4Ž×µkWu’´&kZµj…ŸŸþþþ@êS³gÏæÖ­[ 6,G% ®®®hkkc``ÀÂ… ÑÒÒâÕ«W¸¸¸Ð¼ysÜÝÝÙ´iFFF¬\¹’ÄÄD6mÚÄêÕ«?~<—.]bܸqôîÝ;]¹¸¸¸ÈðáÃ)UªÖÖÖ@ê}t777š5kƹsçØ¼y3§Nâùóç/^œW¯^‘?~Ö¬YCáÂ… ãÈ‘#T­Z•¤¤$zôèA¯^½HIIaãÆtïÞGGGlllðöö~k¼ Z¶lItt´zBµ³³cÈ!굃ƒÆÆÆÌŸ?Ÿ—/_âêêšc’„+V°oß>^½zE£Fððð`çÎÄÅűråJhРãÇçÊ•+DEE®Ž¬xèÐ!¦NJbb";wÆÝÝ}ûöaff†‡‡‡"44”æÍ›S¸paÖ®]KÞ¼y9}ú4G¥sçÎÌž=›Ö­[³iÓ&6nÜÈ‚ 8p µjÕ¢L™2¬\¹’iÓ¦¥‹»mÛ¶4nܘ۷osåÊ4h@=ؽ{7~~~/^œâÅ‹3oÞ<?~L—.]rM’0kÖ,Ö¬YCRRÔªU‹“'O¢§§Ç¢E‹X¾|9]»v¥W¯^œ8q‚çÏŸNµjÕ€Ô—>-^¼˜øøxFŒA“&MXµjÅ‹'""‚ÇÓ¬Y3¼½½166ÆÕÕ•C‡Q¸paš7oþV<íÛ·§Aƒܼy“°°05jD×®]ùý÷ßÙ¸q#¦¦¦˜››3oÞ<>|H=$IøH_l’àãã“îj?““aaaê•DûöíÔæäK—.Q¥JõbooŸî–ƒƒVVVj¿´æ¯´û§¦¦¦~Œ R ///êÖ­K§N¨\¹ò;çMûQÓ××W§YZZP¥JvíÚ…úˆ_éÒ¥¹}ûv†cù¾5ì2ü_½=zô### µ_G\\ôë×~ýúñôéSêׯÿÖI'í-==½t§qvvVÿ8p íÚµRïÕ®]»–&Mš0bÄlllÔë֭˸qã6lQQQ¬_¿ž3gÎÊ©S§€Ô‘åþ)­ß¼)­ÎªT©ÂÅ‹qppPë6_¾|ÄÇÇ“’’òÞQì>ß~û-ãÇkzÚ> ¡bÅŠê÷}ÇŽìÞ½{{{š4iB“&M˜?>?¦{÷îxyyQ²dI&OžÌâÅ‹¹sçS§NåÌ™3Œ?ž5j¨Ã¬W¯^7n†±±1¦¦¦œ9s&Ýhi­Foz_½ØØØð믿R¼xquš©©)=Ê”}ö9=z4½zõzkú›õ–vñR§N u¤ÌÝ»wÓ¿Ú¶mKÛ¶mùá‡ˆŽŽæéÓ§ 0€J•*©û´fÍšœ?ž¢E‹2~üx¦L™B˜7oÞ[ëýÐq²jÕ*Õã¤hÑ¢ou8öùŸQ>±´“lƒ 8pà;v$22’Aƒ1}útîÞ½Krr2~~~œ>}ú­2fΜÉüùóQmmmjÕªÅwß}ÇüùóÑÕÕU“7{±'$$¨ÿÞœ>kÖ,&OžÌŸþ©&Êÿ]n\\—/_~ïöìܹH½7Ø´iS µ#_rr2{÷îÅÎÎîßí¨ÏLZ½YYYqéÒ%EQ &¨?Êúúú(P@m¶þØò!µ™“&M¢wïÞT¯^yóæ±jÕ*Š-J›6mðõõ¥OŸ>âççG\\:uÂÕÕ---Ú¶mK«V­xüø±zk.íØ…ÔÖŠ´ÖÃäädÜÜܸ}û¶ÚªQ¼xq:vìÈ‚ ˜8qb–ï«\G†eν¾ùæ›·†¸ýù矕mÛ¶ý§r?×a™s«Aƒ)§NJ7ÍÇÇGY¸páG•“†eÎIºuë¦\»v-Ý4///eíÚµYºÞÏqXæÏAçΕðððtÓ-ZôY¼\†eŸ%KKËtý 5«þئv‘½Ê”)£öOS¸pát}&ħW¾|yµå1M±bÅ4¶RЬW¾|ù·^ÂV´hQµÕGü;’$äb³fÍzkZZ“¨È9FŒñÖ4WW×lˆD¼IÓ lÒs>ûL:õ­iiŒÅ¿÷EöIB!ćI’ „B$IB!„F’$!„B#I„B¡‘$ B!„Ð(W>¹}ûvnݺ•ÝaäZ=¢víÚ™^îíÛ·Õîr‚ððpïÿø\ݸqƒúõëgé: ™7ožŒÅ‘Ã,XOOÏì#×zñâ5Êî0þ­~ýú)ÞÞÞÙG¦INN&666»ÃÈõòæÍûÖ@MÿUxx¸úøÏÝéÓ§ùé§Ÿ˜;w®Æa†?W%J”P‡°Bˆ÷ñôôÌ}- :::õ–EñùÈ)Wå¯_¿fæÌ™;vŒádzbÅŠìI!²„ôIâ#yyyáééIÁ‚qqqaË–-Ù’Bd I„ø‘‘‘„‡‡S·n]:tèÀ®]»xùòe6G&„™O’!>ÂŒ3?~|ºi?üðƒÆ÷d!DN'I‚„¥¥%E‹M7½R¥J(ŠBXXX6E&„YC’!2 99™eË–1`ÀŸ=ZZ„¹Ž$ Bd€——ýúõCGGGãçùóç§Y³flÚ´éG&„YG’!>àáÇ\»v ¼w¾víÚÀ‹/>QdB‘µ$Iâ¦OŸÎ„ 24ï˜1cøé§Ÿ²8"!„ø4$Iâ=þúë/Ê—/O±bÅ24ÅŠÑÖÖæÊ•+Y™Bd=I„x‡ääd–.]Ê Aƒ>j¹1cÆH'F!D® I‚ï°dÉúöí‹®îÇ^ž/_>Z´h¯¯oE&„Ÿ†$ BhððáC®\¹BãÆÿÕòmÛ¶%00P^6&„ÈÑ$IBƒéÓ§3qâÄÿTÆØ±c™9sf&E$„Ÿž$ BüÃÑ£G)S¦ Å‹ÿOåXYY¡§§Ç¥K—2)2!„ø´$Iâ ÉÉÉxyyñý÷ßgJyÒ‰Q‘“}\,!r¹C‡‘˜˜ÈàÁƒ?8ott4ÆÆÆœïÅ‹cooŸ! !Ä'#I‚oprrÂÉÉ)CózzzâííÅ !Dö‘Û B!„ÐH’!„Bh$I‚B!4’$A!„I’ „B$IB!„F’$!„B#I„B¡‘$ B!„ÐH’!„Bh$I‚B!4’$A!„I’ „B$IB!„F’$!„B#I„B¡‘nv r§#GްlÙ2ŒŒŒ²;”,óìÙ3<==³;ŒL•˜˜È€°³³ËîP„ŸID–xúô)ݺuÃÍÍ-»CaÏž=DDDH’ „ävƒB!ÞA’!„Bh$I‚B!4’$A!„I’ „B$IB!„F’$!„B#I„B¡‘$ B!„ÐH’!„Bh$I‚B!4’$A!„I’ „B$IB!„F’$!„B#I„B¡‘nv 2¦mÛ¶äÏŸ?»ÃȰ””´´´ðóóËîP2äñãÇ´k׎ž={fj¹ŽŽŽXZZfj™Y)>>EQسgOv‡’!qqq899ѽ{÷ìEˆ\I’„ÂÄÄooïì#× &,,,Ó˵´´”zËBaaa9&¡"'’Û B!„ÐH’!„Bh$I‚B!4’$A!„I’ „Bäé†/жmÛxõêZZZØÚÚR¡B… /›””Ä¡C‡HJJÂÑÑCCÃÙ3g¸páT¬Xñ_•ñ%IIIaÓ¦Mhkkãàà@É’%?¸\RR;vì M›6hiipîÜ9ÌÌÌ(V¬Ø;—;{ö,W¯^ÅÉÉ SSÓwÎwôèQlmmÿõ÷@ñy“–„/РAƒˆŒŒäÞ½{ 6Œ‘#Gfh¹   ¬¬¬8pà—.]ÂÎÎŽK—.}ôúÇÇ·ß~K||<Ó¦Mãûï¿ÿè2¾4¯_¿fÈ!DFFrçκwïΜ9s>¸ÜË—/i׮˖-S§­Y³†óçÏ¿s™nݺ±uëV’’’èС»wï~ç¼'Ož$!!áã6F‘cH’ðÒÓÓcèС >œ­[·²yóf¸ÿ>‡ 005kÖ””„¢(tïÞýû÷3kÖ,FͺuëØ²e‹ºìÕ«WùñÇ9rä:öÀãǸ|ù2ׯ_çòåËìܹ“sçÎ1`À6lØÀ³gÏˆŽŽFQŽ=ÊôéÓ9pàçÏŸçîÝ»øøøô©wÕgÅØØ˜¡C‡2räH|}}ñññR÷ýõë×9yò$)))øûûãïïOJJ µjÕÂÛÛ›û÷ï¿Uæµk×Xºt)?&((ˆ—/_ræÌ~üñGºwïÎÊ•+ %%%…={öpýúu–.]ÊË—/°¶¶ÆÀÀ€S§NáååEll¬ZþüÁܹs5®[ñù“$á ¤( aaa\¹r…E‹aggÀäÉ“™:u*EŠaذa?~œ¼yóÒ´iSÂÃÃ111Á€¨¨(Š/ާ§'óçÏgÑ¢E4nܘþýûóôéS¶lÙÂíÛ·8|ø0'Nœ ((777µé`õêÕ³zõjÖ®]KÆ ™6mÿý7ûöí£cÇŽèëë³lÙ2æÎû‰÷Öç#11‘°°0.]ºÄÂ… ©W¯C† aÑ¢E˜ššÒ­[7îÝ»GLL íÚµ _¾|Ìž=›Aƒ¥+ﯿþbàÀ˜™™ÑµkW|}}É—/åË—ÇÃõk×¢§§ÇÈ‘#INN¦k×®¬_¿êׯ¢(,[¶Œ˜˜–-[†··7eË–¥^½z$&&Ò¿._¾L‘"Ehݺµ´8‘IŸ„/Pbb"óçÏ B… ,]ºHmš?~<%K–$88˜ãÇP®\9ž>}JÁ‚Õ2¦M›Æ£G8tè>$%%…¡C‡R¾|yxðàÆuÇÅÅQ¸paŸuëÖ pæÌîܹÃÍ›7pww§]»v¸¸¸Ð²eK†žiû"'‰ŽŽVë­jÕªtéÒH­·3f ««ËƒÔÛ75jÔP—uqqaýúõlݺU¶cÇ&NœHÆ yöì'Nœ`çÎ?~œýû÷ãââBïÞ½2d:::L™2---Ž?ÎÙ³gÕ²ÒZ¤ (@Ù²eyõêÇŽ£Q£FhiiFõêÕ³v' !2•$ _ C(P€R¥J‘”””îJ¿P¡B˜ššrâÄ ?~Œ©©) .äÑ£G”+WNÏÌÌì댉‰¡`Á‚Ô¨QƒñãÇ3vìXõ³:0nÜ8öîÝËéÓ§éÙ³'êçiï¬044$>>þ?m{NV´hQõVºtiŒŒŒˆŠŠR›þ!µ>ß4wî\š6mŠ­­-ÏŸ?Wç122àÒ¥K9r„àààÀèÑ£±²²bÈ!äÍ›Wý^*Tˆèèhµì/^'Ou½ñññèèè¨ÇŒC‰%2kW!>¹Ý Þ¢§§G©R¥Ø¶m¡¡¡ôîÝ###~øáºvíÊÞ½{ bàÀê‹&&&&=z”ˆˆ¶mÛ@“&M044dÈ!„††²a⢢¨V­çÎcÈ!XXXpôèQõÞöÚµk¹zõ*³gÏV¯LÅÛLLLHNNæÐ¡C3jÔ¨·>5j”Ú—¡U«VxyyqëÖ-Ö­[‡ŽŽ,X°€åË—ó÷ß³víZœœœÔùΞ=ËüAÆ Õ²œœX°`·oߦ}ûöQºti¨Zµ*sçÎ}ïwEñyÒ±³³›òæU›ø<íÚµ‹Ì¬'{{{ÓÓ®2›6mÊþýû9pà“'OÆÔÔ”F¡««‹¿¿?7oÞdèСԮ]kkkªW¯ŽŽŽñ½Ü$9IDAT+V¤fÍšìÚµ‹0hÐ Ê•+GÑ¢EéÚµ+Š¢°|ùrŠ+Æ”)S044¤J•*,[¶ŒçÏŸÓ¹sgöîÝK¨Y³&þù'fff 6 ==½LÛi"""ˆŠŠÊôæð̬7mmmj×®­ñ³´zsvvÆßߟ‹/2qâD *„žžžº]U«VÅÈÈìììHHH`Û¶mÔ«W¢E‹R§NÜÜÜ`çΔ*UŠï¿ÿ8€½½=;wîä—_~¡hÑ¢hiiammMÆ ¹~ý:¾¾¾Œ5 õ;´ÿ~&MšDñâÅÿ_{÷•U•¸qü „Œx¿ŒÐŒ·TÆÄKŠƒ8¢L^0C”F¤@Ó,§x-%g²FÔÉ•¸¬) G×ò2%š33.Íò:Ž"ˆ0QEÀÌŸ1E%A.ïïç'y0M|{>ñžË>ûœíò}ÞsöÙ»V®Ãí®\¹ÂÙ³gkü÷,"?ÞöíÛ± µj–º†Ïb±ü$g\¼x1O<ñuzœªY k{ªè†Ün[·n%>>žñãÇAdddÓZ—––2|øpãÍ•†¢jÈ™3gÖwUDlŽÅbQŸiؼ¼¼hÕªU}WÃ&3†Ç{Œ„„V¬XA§NjÜÖÞÞÞè()"? Ò  2¤¾«`³ìììðóóÃÏÏï·upp 44ô!ÔJDu\S """bJ!ADDDL©OÂ#"%%ÅxÕPj_II “'O®õr¿üòËŸüœu©´´´V_ ‘ê}ûöm°¯ÒÙ‚ªW k[@@€Ú­U½)"uCDDDÄ”B‚ˆˆˆ˜RHS """bJ!ADDDL)$ˆˆˆˆ)…1¥ """¦DDDÄ”B‚ˆˆˆ˜RHS """bJ!ADDDL)$ˆˆˆˆ)…1¥ """¦DDDÄ”B‚ˆˆˆ˜RHSÕwäÞ;vŒž={Öw5lÖÍ›7yñÅk½ÜÍ›7sàÀZ/W*•””ðì³ÏÖw5Dl–BÂ#¢ÿþ¬Zµª¾«a³ÉÈȨõrÕnu(##ƒÿüç?õ] ›¥Ç """bJ!ADDDL)$ˆˆˆˆ)…1¥ """¦DDDÄ”B‚ˆŒŒ¤ÿþ 8///þð‡?pùòå·?tè£Fº¯cTTTpòäÉ­ªÜ&<<OOOÈo~óæÌ™CaaaÛoß¾û:Fqq1™™™ZUù RH°ß~û-o¿ý6‰‰‰>|˜–-[²råJc½ÕjÅjµŸ£££™3gŽñ¹¢¢Â´Ü²²2ãï’’þô§?U[_Ó~rorrrX²d ‰‰‰ÄÇÇsýúu¢££õß¿¾QQQDDDÔ¸¾Jyy¹ñwvv6}ôQµõj7¹ 6ÈÁÁ777®]»À¶mÛ=z4žžž|öÙgdff²wï^/^ ÀŠ+xöÙgéß¿?`üøñÌš5‹M›6å.[¶ŒÔÔT6oÞÌ×_M`` Æ cöìÙÿ$m££#]ºt1Úíïÿ;~~~ôïߟ;v˜˜HRR’Ñn .ä™gžÁÓÓ“Ó§OsëÖ-‚‚‚˜:u*ñññF¹Ë–-#>>ž˜˜Ž?Θ1c6lØÁADäû4⢠yÿý÷Y·nEEE\¼x‘¯¾ú €¥K—òßÿþ€=zššÊСC åÊ•+ÄÄİ{÷n.]ºÄ¨Q£HNN&66–mÛ¶1hÐ £ü°°0öïßO`` aaa¼õÖ[ 4ˆW_}•äädúõëW/çý¨{ûí·iÕªùùù”––ràÀŠ‹‹Ù°a»ví¢°°Μ9C¿~ýX°`iiidgg³gÏN:ÅÌ™3Ù¶m›7oæìÙ³téÒÅ(?,,ŒÂÂB†NPPË–-£sçÎ0iÒ$\]]ëñìE¤!SH°!aaarëÖ-ÂÃÃÙºu+žžždee󸺺råÊcŸ½{÷’••e<çnÞ¼9íÛ·¯¾/!!¥K—0tèPöíÛ§ð#ÍŸ?ŸAƒQTTÄ´iÓ8xð vvv\¸p &жm[JJJŒ}vïÞÍÉ“'vsvvà׿þuµ€ð}çÎã‰'žÀÇÇ‡ØØØûîã "? 6¤I“&´lÙ¨|\°eË‚ƒƒéÞ½;ÿüç?±³³cõêÕüò—¿4öéÛ·/^^^¬X±‚›7oòïÿ€ÆßõX={öä›o¾ÁÍÍ´´4†^w'fãš6mJË–-iÙ²%cÇŽåСC¼þúëôêÕ‹èèhÊËË‰ŠŠÂÉÉÉØ§oß¾1oÞ<òòòØ·oðÿa¡&íÚµ#??Ÿ-Z––†¿¿ž›ˆ<ÚÔ'ÁFuèÐÝ»wãää„··7¾¾¾„„„pýúuìììŒíž|òInܸÁ¸qã?~¼2Ì8::ròäIbbbxíµ×°X,¼ôÒK¤§§ãããó0NËæUµ[»vípqqÁßߟñãÇãèèXm; !88˜_üâ5–Ù¬Y3öìÙCRRo¼ñLœ8¨l‘𨅆†Z5K]Ãg±Xh6ÁëׯÔrssiÙ²%?ûÙÏîZÎÅ‹±³³ÃÕÕ•ŠŠ rssïúõ¨¨šrÊ”)µZÛåË—qvv¦I“&¦ë³³³i×®Ý!âûΟ?O“&MhÓ¦ ¥¥¥\½z—]¯†¢jÈ™3gÖwUDlŽÅbÑã†ŸŠ»Ý!î¹óÚã?nümooo¡!ûùÏ~×õ·?:º›Ž;;::ÚD@‘º§Ç """bJ!ÁF››Knn.EEE÷½¿Õj%;;ûë‘““CAAÁ•QQQa<±uùùùF»Ýþö¹~ý:·nÝ2>—••‘ŸŸÿƒûåääThÉLIIÉ]G}ü¡zi &Û¡`#Þ}÷]°X,øúú¯ÎÝ‹¹sçÒ¯_?fÍšÅàÁƒÙ²eË}?;;›Ìï~÷;&L˜Pm„Çû‘““믾ú£ö}Ô¼öÚk¼ð X,|||xóÍ7ïi¿I“&1mÚ4ãó‰'xã7jÜ>--gžy†ùóçãïïOdddÛÆÆÆ²víÚ{?‰Û¼òÊ+\ºtéGí+" B‚ ç‹/¾àСC“˜˜H^^7oÞä믿*¥?~Üø_³f YYY$&&ͶmÛxï½÷(((à»ï¾£  €ÔÔTΞ= TþÊüöÛo².\¸À›o¾‰Åb!>>ž½{÷Ò±cGþõ¯u;~ü8çÎ*‡ ¾xñ"ÅÅÅœ9s¦Æó)..æØ±cÆÒ999ܺu‹ŒŒ c›ªã§¦¦ÖÖe|è>úè#¾øâ Ž9ÂW_}Åÿþ÷?.]ºDii©Ñn¥¥¥¤¤¤TÛ/%%…ØØXÓ2ÓÓÓ)--5®Odd$sçÎå“O>açÎ|ùå—ܼy“œœ***8}ú´1÷àÁƒ«…Ì””JKKÏ$&&ÞõnÃÉ“'»A¹¹¹”——“žžnÜýÈÏÏçÆœ?ÞaRDu\´AUZ·nͪU«8sæ ...¼þúë¼òÊ+xzz2gÎÖ­[ÇÆ™7ožñVC«V­Œ/£õë׳~ýz @||<ï¼ó;wfÍš5üõ¯åÆL:•íÛ·Æ Œ:,Z´ˆŠŠ ÊËË:t(C‡åèÑ£<ÿüóøùù1jÔ(h¼³¿zõêjçpâÄ -ZÄ… hÞ¼9 .Ä××oooŠŠŠ°··gýúõãîîN£F8qâ;vì0„zÔ\½z•‚‚š6mÊ»ï¾Kyy9:ubÔ¨Q¼õÖ[xzzÎçŸT·\­œ—^z‰FQRRBRR§OŸÆÕÕ•ÈÈH5j„§§'qqq¼üòË4oÞœ&MšÀºuëÈÌÌ$==™3g@Ïž=ÉÈÈ`áÂ…4kÖŒ3fЧO, Ÿþùƒ7EDDо}{¢¢¢HNN6æiÑ¢‡æoûGŽaÛ¶mtëÖÍx5388¸î/²ˆÜ…2oÞ<–.]JYYÁÁÁüêW¿*ÿsþðÃY¼x1aaa<÷Üsìß¿Ÿk×®ñÍ7ßЧOÖ­[g ëüÞ{ï•Ã8/Z´ˆ={öCçÎï8îåË—éÒ¥KµÁ~ìíí±··§¨¨ˆåË—ãîîÎÇL\\~~~äææ²jÕ*ììì1byyy´iÓÆØÿ±ÇcÁ‚”––2xð` ò®ÁÊ•+qppÀßߟììl®_¿ÎŒ3èÝ»7 .dïÞ½Œ7®®.q˜6mÍš5ÃjµòÎ;ïסsçÎÌž=›?þñ|ðÁ 0€íÛ·“——@§N˜2e , 00¨|ìSXXÈgŸ}F^^ž1ºbDD›6mbùòå$&&òâ‹/2þ| rÄ̶lÙÂÆyê©§€ÊÑ8Ÿ~úiÂÃÃIKKãêÕ«lݺ‹ÅÂÀéÒ¥ Ÿ~ú)‹-ªv>ãÆcĈdggsêÔ)¼½½™:u*»wï&::š.]ºÁåêÕ«)$ˆ4@zÜ`C.\H\\$,,ÌX>bÄ ò¶qÕà9¿ýíoéÑ£nnnìܹ€)S¦Gß¾}·îîî899ÝÑÇ êÖñã?ιsçŒ//€ääd–,YÂÍ›7™3g‹…ââbc½›››1¨S=HOO¯VvÏž=Ê×õª¶ëÚµ+ôêÕ‹S§Náàà@·nÝŒeâTÖ+W®$..Žýû÷3yòdc¹Y»ùûûÓ¾}{c›éÓ§sàÀãqKZZÝ»w M›6´nݨ¼+Ć HKKãèÑ£Æ$PUÛ÷îÝ»ÚõKII¡G@e{ 2„cÇŽ±k×.þò—¿™™IïÞ½ï8Ÿª¶»=4š£jYëÖ­«ýÛ‘†C!á'ÀÞ¾²™}}}Ù±cP9_Àþýû™>}:Ë–-3~ñ:tˆ7ÖX–““¹¹¹ìÙ³;;;~ÿûßóç?ÿ™k×®QQQÁûï¿——û÷ïç©§žbÍš5¸»»A#))‰‹/RPP@BBžžžÆ³øš¤¦¦’••EQQ±±±x{{S^^ÎöíÛ©¨¨`Ë–- 6ìÁ/XaÖn¡¡¡dffVÛfåÊ•Ì;¨ìO””Ä­[·HNN6¾|£££Ù¼y3ååå8::RVVF×®]غu+›7o®vý|}}Ù¹s'V«•üã|òÉ'Œ1"##ñððÀÕÕ•’’Nœ8q×s©:ƦM›ŒcìÚµ‹ÒÒRŽ=Š››Û_/©} 6¢[·n´mÛöŽå:u2n_7Žœœ|}}ÉËËÃÇLJѣG3mÚ4BBBððð **Šõë×Ó¦M\\\ŒÁzZ´hA×®]éÞ½;ÎÎÎøùù‘‘‘aÜšŽˆˆ OŸ>Œ7ޱcÇòôÓO3xð`†NZZ“'O&77—¤¤$Ο?OŸ>}ˆˆˆà¹çžcöìÙ899Ó!;99¿F<<<€Ê;K–,a̘1„……Ñ´iS7nLZZ#Gޤ[·nw”ª!êÙ³'Íš5»c¹›››±¼jêç‘#GâââB÷îÝéÝ»·ñK½W¯^Ìš5‹=zàììÌ„ =z4ûöícÀ€¬ZµŠµk×Ò·o_ÆŽKpp0:t*;EŽ5ŠììlBBBhÛ¶-;vdÀ€tìØ‘‘#G²{÷nžþy&MšDZZ¾¾¾$&&âããõk×øøãó©ªW×®]iÑ¢P$ýüüHOO7FµìС'Näƒ>0o‰Hj•†Ï–ÚéÒ¥KÖ±cÇÞ×>Ö#FܱÜËË«Vê”`]»vm­”u»‡Ýn………ÖyóæYËÊʬGޱNŸ>ý®Û¿ð ֬¬¬:­ÓË/¿l=}útµe«W¯¶FEE=pÙéééÖÈÈÈ.GDîjUÇEyèçÑ÷ÊÁÁÁx>~»^½zÕVµl‚³³3O>ù$“'OÆÍÍððð»nïææV­ï@]èڵ볊º¸¸ýKD¤áRH‡®U«V|øá‡÷µOãÆY¶lÙË?ýôÓÚª–͘8q¢1Ë㉈ˆ¨ãÚ`ô—¸]@@@WDœú$ˆˆˆˆ)…1¥ """¦DDDÄ”B‚ˆˆˆ˜RHSzòáèèˆÅb©ïjجï¾ûŽ   Z/7!!AíV‡òóóñöö®ïjˆØ,…„GÄòåËë» ò#üМ"" ™7ˆˆˆˆ)…1¥ """¦DDDÄ”B‚ˆˆˆ˜RHS """bJ!ADDDL)$ˆˆˆˆ)…1¥ """¦DDDÄ”B‚ˆˆˆ˜RHS """bJ!ADDDL)$ˆˆˆˆ)…1¥ """¦DDDÄ”B‚ˆˆˆ˜RHS """bJ!ADDDL)$ˆˆˆˆ)…1¥ """¦DDDÄ”B‚ˆˆˆ˜RHS """bJ!ADDDLÙ¹»»[‡ Rßõ‘äÀüWµ¼Úíqá{IEND®B`‚gspiceui-1.1.00+dfsg/html/Scrn-NGSpice.jpg0000644000000000000000000027216412124473162016675 0ustar rootroot‰PNG  IHDRwÄ$x^. pHYsÄÄ•+"tEXtDescriptionWindow Class: gspiceuiŽXÁSvzTXtTitlexœÁ±! Ð_騉¥`dtº¸¸˜s'µZôNŠñ÷}oºÌpµÊÓ|ÞÁMº×örÈG8-¦6é@)Ò>ƼÒ¶ ­þ#ëí%<œžn•å[ÉYÉ]£“9˜ ;c½KY¿Ç¼A$‰®úz IDATxœìw\S×ÛÀŸ{o$!ì-2EDpà^UTŠZ«V­ÚjûkµÚj[W}[­ØZÛºµµZ»´µÎºµ–º.ˆŠ ‚²7ä®÷‹1f!aõ|?÷£7çžñ<çœ{xòœ¬Ïä ÁÅí @ xAX–ÕüÈSßqö¥Öã¦[“âæÔÔR @4ù)윖mü`Æd­•yqû.¨¤°°©$ÓÄåÖî|ßÔR @4.·v—Îhj)˲%……†qV%žš˜ÍľD @´D8cr÷Ö­œ¡‰7µ<@ ˆVŽ™@ s1(:šsg"_¦eaç±s‚­šZfĶNLTÜ,õó¿P;vNм® ɤe1¸­˜´a «…òÿÏöÛ†Ð:*ÍrZ˜+ç†çcIŒgå-~ð–ýq;'(ÔIØ‚‰“«þAÕÉÕ5?/¯Îä¼:c)Š LÉ¡p²&uwî'ñ²á‘ ›Z¦ÚZ¹"¡¸[÷J”a¿g2,„;[Ýzð5)ê§鿨×ÓZ÷i´¯¤BI§ÛÚËM¨7¹ñÊW'Ÿb[TZ¶óbRiEe”·øÄ+.V*™ñäFi£ä<ÿ ››Þv©j-Ì•a½àW5«‚ê|ÓÁ|/»‰Ã—…êʼC–‘œ-$£u!ãøÙñ`Éöã Þ|$ðЬLCí«ÙÇš‰PWo4>Øšµýg¡ü9voݪYœÖ½ú©Lòe𒑉X¨F¾èåä-å'däŽ]þ[5T6nwƒlXë’"¹kíÑS, GDþ¹ñ¸´¯GÚˆ`îO.<,VÙ¸aô ¦’°ñWîûͼs…ÓÃì¼løûÓeïü›WC±PûÕ'Hý…æ¡v³"ìƒ4Ë&*{ïÊâ2¯“Ýì‡;~…’9.›¾°BÉÔCdž³÷lÃ7ÇHŃñí¥°7>I)õ˜ÖÅU¯œ\ Ì?_øNG»vvbM2`xŒŸä›>Îí$æ—‘_\©õ9iÖ 0§‹ÃŒNöm¥¼âzwjå§‹4ª>êã³áâ)ùó­<6Ð>Þ¼ï|FQÎáGß¼ ³í©ýOT6®&Fóð`þÏ.f–F†wüûƒ([kÛÌ‹¥ÁÑZ"M–À¬üŽÞnczv\|>Næ¦ÇHŸáèìï¹bXÇŽ."MÅ£¼Å«ú¹øÙñ­yxI ÷¨jιÂâmó+þ¸|ÿ¡JêÁ<ðÜ’ît÷pѯz~s¡››ÕÒ^NËþ½;¬ƒÖ£_ñÉ…Æ÷Ø’átïˆnr㕯NÞm{fvÜï¤ØÙÃ3óîâQvâÙí˽$7òÈH{"€aÛ‹þ>"kÓEWÙz Ö‚û¨·]êìÆ /½ngÍÃçœ+´"°¯ú8csÎþ‘\ÁekdP  ú¼oYé}éæuuXÙÏecbÙ§ >îâ°¦¿ËŠ„ÒO..îáôE/§Õ7Jç+Ô-Èð€¦ý¦×¥þ³ЈšzÇFõÁ§–M‡§³O†M[ç_‡xŒigóXFnL,[?еÎä–Æ5`úfҞ嬖HGŸoúºèÕÑPé†:§‰-k<í—ÂpÊDÝ”'¿œö¼úÚí«·™¨…qÁ41>–šÞu14ت;ØêzfÛ^Δڽuëø©S_È£©eƒÕ™0$<œ+žz45MÌðð:K4É—9~êTC—‘T§ŽwruÕ¼8•,áàñ•ÀG/Èø¶¥Á/ËÚv“µí–`Yî×Oçà•»Þ.öÓÛÚœ)äVSðãûcV½?iü˃Ä!}ù Q8ø¨#|.¾ð ·ºF11HúM(‰1Ïþös_hfEØÿ<Ä-ÔQ—˜¾ïbb¾ÒþÁ)˜a¿i›ÙqñnVNÞ»íö ’`4YN™‚þ;Sc»úñäe½Äîb^e2îfêÿ^îk\Îe=nd澞꒸~êä Ø5eÿÅDª²¸ “-,¢U'óº:¬êïâ `w\HRUË>êìð[¡fÕ}ÓÛ!)»0»¨<ÌYøso+^M…–À‘nVp;3·Ê#ôø€«$€ÌÑŠ&§Xˆðó$ýz„„…@¸Ÿ§¦¸ÎhŸ^,RQôª·G,ŸñúºIýU4»l÷IBU£•ƒÀƶ³€%ƕ˕mœl8ìoFúLìëCîæ”f?§¸‡„W$“ï½toû™›åeot°ýµ—@×ÁÜÕÍ ä©l\ÔÅ¡#uðñ/{ÆgWþ¸sŸÖ#Ž õÿ›ø@)u Ó›ÜHåk&¿^¨,mUøRµ{G )º¨¸˜PÊŒ$7òÈHq‹<¤^¬yüÏUh—:»ñ¬‚{9%NÖÄσ]u³½žUâdMlèdW™ FG]Œg¥÷¥ãŒï~öJ›'7z{XÀÛjIîmîþÖÙ8IN¢nAF:§Ö›^§úÜËnDMCcãú›e\û/Ýù)î*7ûdh`ÑTai/—ÉÁÒ¥êêí{‹»Úp™O^§Ö ƵÜZº3išòÿ6ÌC¯†J7Ò9_¨eõæ ‹ñ:Ô›‰Þ¦Ô¨·™¨…qÁ412–¾PoÔ‹ÞÑR-¶¡G¦£619,éÑtswW—Ï{1CÂÃÝÜÝëÌÁ$_¦:SÍÆML.ÂÝÄDÍÐðpSÖŠÖ9%•r× ñÁö;c<¸pÍU?ÿ{µgˆßܘî×w'ø½hÓOäort±•LLPÑÌÌŸürÿÙ¬ë’q{¯¥]ÜgˤޯExvìï*ÏNš9|ÜÙbwþ»åŸ«J»6øádœ¬€:;ÀÝŒl¥Ru«@Þ%ytÚy.Ñ6âEu4 ÛSª^mgûJ÷Ð…§¿ G®ÞS²ø½ýŒËùÍ_g6¿¢´o‹Ùy€ÇªÊ¯ß½]ÉO/Næ+*x6nJh£YÖûáö°dûß;/Ý ‹Ÿ3.ÂgÁžÙ.¹_ì<ñË雑‘‘GßáíbóxYà Íl…Ô¨HJä ¤jí9;†“r†/RGûòJñ†®‹' ^ü4Db%à˵¿S‰v<³êu?~oÇw€+i9§î<¬òÔvRÆøIì­ˆâJù唬céå“Â\ÇGþs¾”¸€Fú̲Ý'9}+2²›¦â¿ß«(ËÏéé6ñÂêvNÛ»Ûü|²Â··f¶VT)T´Pª[¨&¹Ú ñQw)DNZzyXÛˆó×nªìµ}œjŒT~/_'Íä”ÈÁF€ÿíŽ^¬¨!¾µ‘äFi£JUmL!†“ †¯ºÏFäÎûÒ«[ zÛ¥în¼ëä?÷ždýð¡€G|µãøñ»ÙÙ?|$òCU™ñŒ§‘@WãYé}én(d*ºƒ—«-YÙÛÃ:½°"ÜÏÃFYÞÃÝšaÙ«²H÷HÝ‚ŒtN­7½Nõk«Ú°šÇƳv¶€_º^)dœÁðÀ¢©Â¤`),Ù~|וûñ¹òÍŸ½ ÆÇ%Kã&v6CB*ÝHç|¡–Õ›ƒîûb¼õf¢·)õêíc&jaH0]ŒŒ¥/ÔMLÔbQMAÓÄ䌼zx45]’u¢Y bº‰ ¦Ï˜sžKµÕuͤïÞº5TÇ›zïy»Ó\Êi ÏÝÞ†®¥–©¾¿œõAOoxº ™‹£ ©åñy¢ý?·×LK³@`€ãðž®!)íYȳª}×?|‰—éï:¡ox€»ã7½ÿ¼xOáèËExXPZÕ&< oÎR±UY–ÖðäeÀ«©ÙUžár—@OV¨¹-_yGYE %&êh¢¦pìaU¹‚òt”qÇÆ´³€½ñI ;/#rr÷WR³ª=:Ê]j§>>[ðmOé/³^€’ê“ E¿ÜÑö0qK¤äWµ‰¸!𠃶Pþ˜®Ý1sóaN•GxŽ4ø<‚§cV(i+B$°!æ×úæe5 \B2ügѾ»U–t?m„Í#ˆk©ÙÛçN,®¬Æm‡±‘h{†{vqµúêÐÕ-‡O¾;´Ç¢qƒ~š5¾ÛÎÇZ9pÓåÿÞJ¥Á¾Gä¤0b{t_±>+ÓHŸ¹ù0§Ê£“–â?F¹½Ûñ¹5õ+ 2_+Û2ã""$V†©ã³ƒmVI՚ɃÔFðWoDÿp_õÇC*ÆWrõIey…LÕÖÍPr#•¯•ÜÙš8>Ú«‹«ÕÏgï¬ÜVîÂ|#É<2ÒFRAmÌòª\ª2der*8mÿ§ªA;@·ô¶KÝøaAI¡cpí}~q‘cퟄªÚÈ›ãë¢%€ñ¬ô¿t,\Ì©‰ö•¼ÞÆMÌ›ûוÕS†NîÚÖVˆ'eåWÊ•*±³®¦F:§Ö›^§úFÔ446j"w â6”X4Upó -¯¸Ê3"{î›­ñqÉøfÏðô¡¦ü†„4^Qz;ç µ¬Þtßãu¨7MÔMi$P«™¨…!ÁtU02–¾Po4}0Q‹ u|÷7‰:Ý|ÆyQß§›»»¦97~êTÓ-Z“¬LõÄ<·ŸHÓ”®3•fH“ìõæXfÕ»í¦ ëq`oæ­BÅÇÊ8 L‹Ÿ‹çôpµ{°f`v%ékËïäãq6—éæj, ye• }nm{Oë‹9®GXçRJ.–%ÿ3½¯µP’{[meú¹:œ.–Ú  ¨²§´ý‹e”¯-?2ÐëÌ#)ðpŒóÑ<©¢|¤ü6ØŸÄÅlãdû¤¸oç¯ie×ÑD-LAI³{ÈÞ ³_9y°xRRq%5K0ЈœÜGE“bgu>¦Tî<Ÿ îûÍ”—×öuØqîVãs^äœ*Ê[ÊoçîtºÐ&ØAÀ‰]X.#¤µµGÑ %~vÆjÏ>'ä+†úˆÃ|ÝÿyHuqµ€ÂŠªœ’JÆä €Ì RI³|;§pºt§DP™7«o ƒó÷2<+01wôÆÍäÔÇà3à¿ ¤£ôÑî²öQjaì„Ä˾˜Ø?bbÿÚáF*ŽôµúM¡gÞÜHŸÑ«øÁ¶ðñχw_HÐÑǼI€1Ú»®Ô¼ì+ pw³õl„ÒÂÛQâí þØ£}Ûsi Ve¥1~¾{¯¦’bG#;ŒT~ŒŸXÜ[Ê?1Æ«½`Õ±k+w¯q¨v5žÜÈ##mÄu¡¼2YaEã%0$6¶&E=Û%0fejhÁ…èm—:»1ð”•D÷€eŒ¼YºÏÊÐKwîIM´¯dFtO’f÷¿ñéØ3£{Àåû(k{–àëd¤sj½éuªÏaDMCc#°€æ(fHGMòª¨66<ûÓ%6œ u&¯SkŽz ã$ÃòqL*²:>*HS~CB©(0Ð9_¨eõæ û¾¯Ã:mMtÛ—C«™¨…!ÁtU02–¾Po4}0Q‹ Úˬ^ 3î“1͉rÍ5š¦¤5ÉÊÔòÊ‚iþR½OÕd^ssÉ¥âh/~ï`Ÿ[ïÙŸÌc¬ùú#vÉ•²mÑ"ÍÀ?îW|ÞÃéë7£G?©õ°€n¦TÊ•4ÿ¹hÆ{§•Ô\ÊWÕPC}ÄpîîCÍe7±‡tyP>2Ô^¹ËýÙÓdíÍÒ ]c_Ò99¿ˆ j+j÷K`Øw·ÊV÷wYùöð>=»W`¢NÎÂööçu‰´à¹Æu4Q Øž"{7ÌÞ×Õö]ºCñE¤ÄÅ9YœPßçL 8÷Ø=OÞ#ÜI²¥äI¢–•¹évù7}—½1¬Ëýâí\¹ª+¯VÐ^(Öè©®kn”ñ2f ßüÁÁî°ùøe†oÅD÷§ú@—_îÞ*ǧ…9Nho“TìÚÖ¦SŒŸ¤RA®9xžÛúcb´«y5ýÚˆÖ½;òŸ¬šÁNöXkÿà¸ö6B“Õ(ã“q!žÎ~nãz†üy0[w¢ÄxŸÑU<·šò³åOy©kXxİ`ƒoß¡Œª—}%=ƒ¼¿OËØ:ôYäOÆ œBØO9YÏ‘,€A‹~¼›•ïÜ-ÄQ8#!Iiëa$¹¡Ê÷r²ÕL~i‚·‡„÷¸¤Ò–Ç.™6‘;­¼^’SEi;#f„Ùj£þmDw3•á[rdrFŒ7ò”Ã[Ê×ÔBn»˜ÒA3Õó9z³Ú8ÙéÀHV†^º³OäÐÎÃéFf^ IÅç)GØ@üýG*½šÖÑ95Þt“Ô7¬&- ¿šró>Ÿu[n=ûb…!]|ÛkªðgJÅ'Ý—¿Ý=µ4¦ÃsÓÆÇ%K ã7 ÝÝ­—¼Õ+‡þ_WgЇ·­PS~CB©¨Úvy¾?Ô§eõ·ZïKc»ñA[Ýö}–ÉÓ>fºFÓRÁÈXúB½Q7gC£¥ZìM¿è_*j"Fl'S̾z©Zk1_ÔÐ4µ+h®5}JÞÍÝ]óâr—yíñ¼j*rûÃßÎ$ZØÿ:ÚŽöÝÌ.^±ïlf¶¯~{Š,¹ð¹)Œ/¯”¬8u¿°¢º{[{•R¹ãüí·RÚz²_3ÚÚ¥ŠªŠ1þÖÓÂl%½+þÞ‡?RIŸM&®?|¡¿—Ȇ®Þÿö¯3 û¶ZEw«læþÛ©9E#‚]ß ’”–W8ÞÿÖÜ(ýèàíì¢ò1¡noÛˆÅ'o8¤üûB:š¢…z(’&7~¼Â…'òìŠÚ=%Å')í½M—óY&9òžÎØŒ0».®V×3 ÞÛ¸Ûï¬ÉŠ„’Eß­¨VL÷°ê§S7?þù°Â¾-KtDiñoVõû’óËdotñÂiòË}çøû’æs»ÌxBQ™Q®ò°‚imx ãîdýéa±¬Ú-Äôh“Žç¸ž.±þ¯³›”Ǹ–2sÓ~RüÜrFnºü÷Ó7ÞܰoÂo&üvaÖ®ËðR§vJíym0¡Ïh1åŸÜ´¼Òo·.®VË'ж=¹²¨J5$"ÐŽ¬]®>%ÄvJˆ-w?$"ðÍ0giÖUîcaÄxîR'/ :°{—Ç•ªÔô •ÔÝHrC•ã+ÑLÎmÏ÷r”¾;´û̾í>ìlï]™Ž“5FÚÎÈ##m4!HJ3ì–®(m=פ)hia„vcCo–é¨1ôÒÝ(PT©hHHyDZ;ÄçÕòWS³H‰³Þ‚Lïœ&ªod146À¢ø¢Òªš~¡~³"Ý%OnÒQK…ØËÅ»of‰­ýÚˆÖý{ h†5^E&j]a|Æ©‚䜒¶n1¾¢5'ïê­Ãè;Mù i¤¢ôÒÀ–5„)c»‰è¶oC´0]0#cé õF=9l9±M­Ë ¶Á¸«ÎøºÛ}ôn2¦ÿÂd~^Þ½ÄDÓW}ê&W'Ô¼×¥ÃÜM¦8´À)…8ïž°2'kXŒ ¬¤*[¹K{çq›Ò ¡”µ°¬CJOQêo!,+οk]úWÕ0<ÊÖCæ¡ee€$'Q +$”2Œ¡žP%u¯ò gxBÎA8hÑ—iQQ®ªVÚµ‘µä¾Š=W4€uÉCë¢4BQ FYÛ•æ2·.N·.Jç)+Y §…6J»6š6):Ñ‚“¡MÿWo¼v"1mòê¥AÃ(k[ãõéxï¡’@ip4e%5.§–š¶ãùòœT°8NYÛUyt"%κ‘E)ÖÅé)gxB¥W•G'ݪãÕ”;¤Ä/”UY¶(ÿO)cøÖr§¹kí¢Í•ù6Onªj#T—jÏ0ÊÊö…¢á¤\’s[ ËÇ)êl\«<þµ¦$öNó«‹ä.Aê¥NüªBû´3€aÅ¡¯8Ý9ÈD~ÖÃÄ>£¥8¿ªHú8PVQVvrçvÒìkzëäÝPé–!±»N}ñÄ•ÅyðüžVÝTêrM Í-,ù¿-{ŠCFh>Ò›\·ò½Ú¦ÎäêÖ7ÔvFém£ÁmÅ'Æzý|&ñ³_—GÓV6Ð0 ia¨CšÒ ݃¾7kÏŒ¡F0to襖uNÚ1”Ü¥}•g¸¨ E’{ŠÂ^=:ÖO³ ÐÔèª/ðjf·€^ó¿O°ëjHMõ@ghl´*É”äÞæöÿrµ­«ãÁ7"4UñpI‰²® Ë¿þR÷õS‡d•w›³¡0bœÞä¤ÄÙ¢Ã8O^&;ÊSTRVR…ƒ$ç¶Z.ç­K>Ì)©Ðlkƒíh t½ó·/æÖ¯e·FÄ3ž‰ÞΣ۾ZÑ´ÞDãZ©7-Œ¥¦÷F]ôŽ–j±O;ô×›J6yõ #N?nèÑ hícõΩãÇÇOªå[äLA.ÜH¡\Ú³2¡.ëÐŒÔÏÐlÔ½ç|ãþ(È‹2§‹Ãg‘¬ÌØ”û›óü#Ä‹Ò}ƺä¡MvB•g¸üň]ÐÍáÒ… ·‹jd^]ëQt“׬À.ýls;Y›ÎuÇ®‹¦Ò¢ñÐ*È,³‡»õûáö“ƒ¥Å•Õf¯)Öp»ßZ*tuµúu¨Û´*+>=ÌÎVˆÇîø÷ûSI%!à åдø…ÚÚ-Ûø´-L±2ë41ÀÈA=–°Í ùMñ9rVæ {¹ÇÄDX‚57J7¿,’©*ƒ»5µ,‹Sãè§µ ÖtV$”Š*•S@ÝQ-¼Þ¨l\ÍøÕ´©´h|,QÐ0ñ¤`iFQå'¿Ta|ÍŒ–@K…âš$©OºÚá8žQ\õ͉+¿Æ]®ñ¬{~°©°P[7y6 ­C sÑÈ6Wœn¡†Âuya_fcÒ‚Ü™†f‘C >ƒh¶˜¥sŠóîŠóïÑB‰Ì««Öl5„ªÚ63ž¨©À€¥„65N5Îuüºýá•l:¶P-8±Ì³×éÈlYèŸ1·Ð©éõæ¥UÁ´ ¡@ - Îú<=oTS b4½›gÌ-tpzýøn°Ì:ið§œ@ Z(œÓ¬L¯zÒ©“Öܸþu™/ Ö(ò˜Ê½æ%@ â§ÿùG7ÐÀîVû÷”@ ÓÑoe"@ Ñ X™È—‰@ hhÆ@ a~/@ a~p½¡l}¯Œ‡ƒƒY€´ôtOoïzçÓðK-Iý®&—¿¹UH3¹Z_»  ]èBºÐÕ .½4hÆ<=#£ï€"‘ˆûØ®Ýñ£GS““Ÿ%oŸèí¤¤ÏccïܽKD[/¯óçŠòóõ}N’úa yzFÆ€AƒžáÂN‚BCçÌŸ¯P*Íè¡ÍÉË+..ž8q"Çà ¢Sxxdd¤¦$ÜÍïÛ·‡uîÜ­gÏ„7~úõ×°Î;GF&ܸ¡%sZF†O@€–üÛþø£[ÏžþíÛǼòJæ£G,ÀØñãiš  ºsï^“(h¨b5eë7p úþÀ¡CZÒ1"¢K÷îW¸ÜŠŠ‹'½ùf@PPßYz'} IDATß¾]]¿mÛÖ¥{wÿöí#ºuÛòË/fTM·ÿ˜Òm@£§íܽ»k:,X¸PE’æ• ]èBºÐ….t™x½€• ,kê¥Yòôæÿ>ý´²²òJ|üõ+WŠ‹‹W­^ýù×uyº»»»»¿ÿÁ'Nœ(..Ö+ MÓ¹¹¹7¯]ÿÚkÓgÌ(-)¹yíÚÄ –}õ•-tä÷õñ‰;v,åî]_ßÅK–Ëîݵ‹ ˆ´û÷ÓîßíС©Ô[®¦lçNŸ~&gHÈs’—w+!áµ±cÕ•0gÞ<{û;·nüë¯r‘‹‹‹}þùæÓSRÎ:Õ·wo3ªf¼ÿ¬U -âããÏŸ>}éüù{ÉÉë7l0³lèBºÐ….t¡ËÄë|™&CÓtPh(wýºu«zBS}S]]}ððá%‹‰E"‘H4ëý÷=jzþuBľ={ì–|ñEx—.¯Ž›™™©)w3ýÝwq6,??ÿ½éÓ¹û””­˜ºò³,Û§wo;;;‚ ¦N™r+1QëiS)h¤\½êhWÈ;ïà8þò°a©©©,ËVÊd§ÏœY¸`P(´··ÿ`æL.2ŸÇãñx鲪*‰DÒ>0ÐŒª±Ï÷Ÿ ÐИ#êì6šZ|²`•••ƒƒÃG³g8tȼ²!0½ödÃN2bY‚ ’“’ԵɟZ………E |º[…eY‚ LÍß4¼Ú´ù櫯 ¸¸xÉ_|8gÎÁ}ûÔpBJ¥R–eù<ž@ ˆÅÜ}íGuLÍTêÀ»vmÚ¼¹¸¸HŠÒzÚT ,W¯:Ï«¦®+¡PE’,ËrÚ¹¹¹q‘ÝÝݹÈ666?mÞüó¯¿.Yº´Cpð§ véÜÙlŠéë?C^~ÙX·ÑÐÃ0wwN`OOÏ¢ÂBóV;@ ˆ†``¹ùptt$âÚ¥K‰ÄÒe999Íœ>}ì„ /”ŠÏçÓ4M’$ŸÏ/)-ÕzZVVöé¢E;·oïѽ{Ò;£_{ ÃÔšJAƒåjÈöܽñœ ??ßÍÍ rssÕ½ôÒ —^"Iò—ß~û`öìË/6T 0¥VY–ÍÉÍõôð€œœ'gçF @ „‰4tÆ\72hLh²,+‹GÄÄ,ýòËŠŠ –e .ÆÇ›žmÜ´éIN˲¿oßÖ±£^I Ý»»»KÄâ¿W*•[ÿ]+•J¥¢iÚÖÖV¥Rýºu+(•J¹¥M¨ ¡r5eÓ¼7^!b±x`ÿþß®Z¥P(JKKؼ™ ÏËË;sö¬R©$ÂÚÚÃq3ªÆî?FjUS‹«VÉåò’ÒÒõß}7jäHóʆ@ ÂD,`eêFV‡h<úfùrPØРàÐÐq¯¿žúàµ÷îÝ5fL`‡½û÷/-+[½r¥!IôÞ±dñâO/î?hP爭TÎÎÎ3ß{oÔ˜1£¢‚ƒ‚¸@G‡)o¾9hÈNî%'7‚*VS¶‚‚õýÝädã²â›o Ã:w=n\Lt4ÇcY–¦éu6têÒ%(4tÏÞ½ëV¯6£jÆú¡n£Ñ¬AôìÞ}ààÁ½ûõ œõþûæ” @ „Éèµ'1îovIa!÷9?/ï^bb>}ôÆFüG8yúôË–?}º©1HÆÃ‡QÑÑSS›Z@ påâÅqS¦¨íÉSÇŸ:ÕÀîÓrô Ð y”ž^ë…® M%‰…h4ÓÒÓ1 ð÷ÏËË[»~ý°¡C-½•Æj`‚v¬Æ¿@ š! Úcž™–V¿„fDW†¦’ÄB4š‚åååÏ[RZ*† òá¬Y–®CCª Ú±šÛç@4?ô;æˆÖD×Î/œ9ó\P3îþ¾¾é÷ï7g øÓ°ó2@ }4h]&@ ¡ýVfÞ“',@ ¢5¡ßÊì5p`#Ë@ h¡ìýýwÝ@ý§²#@  íþA @˜de"@ Ì:/@ a~ÐIF@ óƒ|™@ óƒÖe"@ Ì:É@ a~/Q®_»Ö52²©¥@˜ j/ÓAu…@ æY™ˆzÁ²¨“´$P{™ª+0hÆ@ a~,âË´‰4?ÖÈå É­åÊЊa-àïÙüíBЦiš¡iš¢™Ú†¡iúË5?›·¬fÈ"ÀÃ(høÞLýÖíÕZ±D]}+Z±‹"ñŸÂÌ'Y‹ÅzE"¨©®¶‹kª«ë—sË’á?¹ÿ“5ÙF­ÀyïMrñë4w曫7n3oqzqvu€¢‚¢F(KÍb1,;´¦¦F©Tñù|¡PÀçóù|þ"|o–‹¬LÓ1k]}+^ ±± ±êÈŒù#D³Åœ§²‹Äbë  \8güYú]s¡ù0êÕWiš¦(J¥R) …Bqãúu³äÌZ )ŠÖ¸`Á‚k×®Í}Ê* šaB“’€…Ža¡IIw-Z–šYbñÒ±CU*UÁõ¸R%,.À³Â l ÂÒ±CÁbñw ³K,Ñ^­óÖÕŠ§&&G,ÄÂÓHw˜B ˆV†ÙfÌÅIuU•Þ´ÕUUb‰¤Þ9·,ú/ìóÆ€V°,0 ‹a†9;8ìÈråj1qÒ$ÇÃÃÃ)ŠR*•r¹¼ººº²²²s—.$I&ݾÝÐ,0«HÑ4|ùå—C‡‹‹:;¹¸:{°€;99«µ h——Ïõ+³3["Y:vháõ8 2,+Á/Ó4ô$ˆEŽL 6×ãlðõijÄâ ‘¡…Ϙ«_^Ó©“™¯®VJViš˜j8[“ûêk¡®…@ ͳ͘WËd†R‰ml’sË’ðw'OçîIZY©,+–•WÐyt£MYN}ûí®]» –e)Š’Ëå<Ã0š¦===e2Y‡ä» öÕ™ÝʤhX¼x1D>=J†¢è-ë¾ÚD3CÓ4cÆBÅ66G éÐE,‘ôê‹–|•”|caé²¥QƒûÀ¥+·dUŠ„„Kb‰¤Z&3Wѳml¾ž8âÉå#%JX\€Àð ¸GÃ'LX¶k|éÊpãÈÂö0["ÙÐZ¬•)¶±)//'Ã0–e9÷ŸÏ™˜Ü¼yMM½½}ûàà”û÷ë]Šg_{ÅöÊ$©Z_æƒÔÔY³gÇÅÅ :tóÖ=W®%<|ø0111+5ÑŒuho' éÐîݹ]Mb‰×ÏßO8†+ŠY`q‘û;Ó¦÷-ÀiY•ÜÉÉI"¶6oó}hcóõÄE׎T‘°¸ Ö…ùÕ¤Iêj§æ FHÌ €Ù66ëëeŽ´ôs‚ x<Žã ÃË2 ƒã8†a~._‚a€a€aÔWe³ÔÕ*s ûìÃ’%Kb—b±ðÔ¯É} ®B¶&h]4È—9´›ßÍï'‹œ]X¶ºª_W߸„‡æ”®…È  öôl¨¥=Vj?³¼3iÒop&¦­­­\.gYV*•bF’¤B¡ I’¢(>Ÿã¸T*õó÷˜ž^Ï’X¶áê¼6ÊŽ c¢}CÛ€——-[¬T@dd$C©RÑ5,¨C€—‹íÚ{7ÌX‡³Ÿ õõ7+³sŠ/ùñ•àêÀ±@hM¸’LOκ»véþQo,ts¶1ýü¼K4ŸŠUG9 | €Çu­ú‰aŽöâü(Õ^5½Ò,ùëÃ0ÇJ¥Â0 @}tè°çöíWI’ìÚõèùóŸ%k¢ºZ%]£;Q¾‹…ØXˆµÅùô#pÏZ®¿@ ôRÿu™Ã"ý÷|>ZÔ6¬„@*1äÄÚ·¢ºù=È׿¤ýav~ƒ$m®2hÁÖš™M² ŽûK,ärù´iÓàÇ …|>_¡PìÚµ úôéÃEææë]VCÒŽ{ÕŽÅ%KK`Çþ>1wÖ·ÜÓB¡êìÙ“'O¦ÜI ð÷õõòx˜™5iòDЦÍ[«EE• Òêö™ß ÆLŠ ­ùÖBO„±VzÚuôÏÙ|øûñ3WWÊæ-÷#[Û¯'ŽÈŒ?T]WS@2Ö”J×UTÔ£P³¨`3Åzƒlš$?Jõ†›–e†Q©T ð,ûÔáX‡FõV¹!uµÚv­Þµ˜PkSÆêy ±²ŠŠ½v@ tiÐî÷¶Þ ²¥ªJ™òB¥<õÕHC‘Eú¿Z_ÏYó–ABDAôÖáôCoýøÊo*zì¸qááá\¹êÒ§OŸ¾jÕªÊÊÊï¿ÿ^+¾H$jëã“•™Y²ê}¦àøÑpìß4`I»iÊ=špc›» ðe… ¥bi’¥T Mf=Ρ(óX™aáanŽðÕ×Ëã|3"´’À¬(\ÀÇ­â®ËpBÓ?’»º·óU|üÀs7ÿôËС /¿ôvbƒ7N=EEPLÑjHXY…À'ö ÃÔËjÈR;»ç>÷Ö/@å»å6[l+ß-¯_)Ʊ±Y%“ÍS¯Ë¤i†a®:ÚµûóÞ½×H’dYöÒ¥!½zý{òd­·à…hH]­±[gÄÄäerpK3kŸ@, _\C ­3æ&€cð  h¨*/˜ºáÈ„‡%êq’¤’f(†%)†¤YŠfHšíÒ¾MZÁ³ ••å ýƒÔdàôYÀqž„°õ·™²úƒß!ેüPgñÀð–^ûdIä·f)T‹§»"(¥R)•JüñÇéÓ§À¼yóÔq¢££ù|~uu5ûKHbˆñ£ŽÈPqþKì¦$°sU2°*`əӖnÚ¶ï†PGÌ]óÖÿ¦My=5ézv~ ËЯÍmBo ~îѳwzjr^Qy@pg'ë32–q±‘¬Û{练i,­ø¢X>kî ªª& ]D[ÿܹ×ÇÇÿÎÝûR;;sõ`‚/óû*çNuÙ¤ææË/¿œ?w®úãÊŒÕ,€Šâú Ë×OÓ ÃÔö†aX–Q÷ç¦ÚOoЉ¹tiíÇgO –ÃÒâ!DãS_¦µ•@)geÅÿÞz|‡ö=zóŽB¡`†3t”J¥JUû¯B¡Tq”J’¤X–]¾|yÃÿ48N.;;dù ÿŸ6žž$­Œí·ÜÑÊé“ÓïÞí®ˆÁ‹´ëîß¾MДÐiKã?ù¼Û7f)Wõ¡EÜv¡P¸jÕ*MsìØ±<$Iæ)õ64ëPUq…¥i¡}`ØM‘OçªtgqªÏË +ÎíH“œ#³k§,¥bi233“4‡/“$ɤěv¶…UŒÀÕÙŽ*BÀ‚—œ-”•ÿ{5r–‡ÑBâàã%¦T5Ù¹E$I]¿v ÌçsÒëËÔÜÄqYö¦¨Ÿõn¯E‹i~\ùÖjãh9>+ÊÊêQ¨.ùùïÙÛ¯/,|€eîw¡(š¦–$'#I’aX®KŸ9ÓoàÀóÇŽu5.§êWWkí×41 6v)÷ìyk’31 È—‰@ Z#õ÷eÚÙˆ€¡A)«./ýý\Æç›÷çççÓ4MÓ´BQ£P(är¹R©ä¯©E!—WÉå5999 —Þ=ÊÊÎÎnß>0;;û¯¿ö•””Œ9ÜÊÊ:>>>++«á2¨ù÷ÓSƒ  #i‡@Ã8“{µdPDT'G[' ß–aÙo_Ú¨ùÔ\¨T*õ¡E$IòùüÊÊç6d( ÎΦ5&Í+C0”Ša¨ªÂ‹ £ÞöR»“ƒsU™÷Ñêÿ½;}ê¤Ô¤ëÙùÅiYƒzwÉ|üdÜðÁzmQ=Ì n—÷þì^="Þzç½~a>L9_l-d‡½ç¿öj$ìýw UÃð0\ö„lq;-û‹ØÅ—®Ürsu0—Ù:VæW“&}öçŸê§ÜGµ‰Ù“ >–ÖΘ7g4ŸZjCpssXâââ¢ódI‡!º11#ÌU´)¬µ_[;ïýô?5±±K–<7?þ쉆‰‰@ ­’†ø2ù@1tEÞí' ©·BÊËˬ¬¬0L€ã8Gà8Æqµ'Ð4M+•<•J™’’rÿÞ=sø2ë!//7..Îßßÿ¯¿þºu+ñܹsS§Nݳç/÷¾}û¥¥¥›×pâË3Q‹ŠD¢odŸ/îú5—ùÈÍ1Vn”ä4ϼ€ðö+.Õ.Îú"aáâ®_›±t…BQ]]ÍZÄ÷Zk1=Ú­[7’$¹¹uÎÐlä4­bhŠa(–¡|R¶Ý”t®JÀâÿ^Αÿ7wC©XŠìÒ1¥je²”êazš¹vÿÜO~nî®mãŽø{Ïè:duÉ™¹B C’V{mb|ZÅðøXevžRnçâ½uá§×o&•—–Ö[k½h͘kš˜º€y¹Þ.ºz¤;‡ç>X—ÉñÙgŸ5¼D]23úún{ô(žîâ¾)ïNL¼EÕ¢@FE]:|øàÈ‘£¹os³Þµÿôj>¬cbÚÚÛs} @ Z õ<É(¦Wû¾]¡¦¬¬¸ì¯KiÝû¿‘eccíÍÇqÀ0Ç ‚ ÇqÇ 'g¦²RvíZBÃÏì0E†¼¼üôôôU«VåääüòË/W¯^ŽŽîÑ£GLLŒ‡‡G\\œÙ9ñÅéùgg/î²\óáéG¹›W·¾ÂÝ,î²¼6¶YKW(•••ܹ˜$Ir;Ê`ìØ± …âèѣȭ( (Šaê{Îy}O{¡)gb2 ÅДgÒ¦üôœW’$IÑ©·¯²”’!• ©d(%C*YRÅP †T²4EQæ<Ù>?7ßÎÑ1¬S'š°ê>puMÒÏU…÷…T a#Æùš31iŠa(•ŠTªÈ1/C‚ªQ¨jÊ…òòõâ?÷§˜¥P]<Ûxž:qL©RÙJ%YOžü{ri—®];uŽtvqÁ0¨(»çvâÅ Ûµyøš%nݾåÞÆ=÷Iž™Ê¯EeÂBÓžñ–£vyÖ»ÌÖëâõ—þ\lÑŽaØíÛ¯vè°'1qË2‡^îÖm)gbj|™¥†Þ³'xܸ¦¬«%§iÚš†LÌÒb Ö@4õÿퟒrÙù;9%ïù¯-))%I8MS$I)•JÕóTTT¦¤¤›kb¨N6nüáäÉ“999)))7n lWVV¶uëÖáÇwïÞ½°°°WŸ>—.\0‹0º Y…ã8n…ñ„8Xã|!¿öÅ< W®Dtíjoo㵇ÃWWW«±q7ÜΑYIê=cN?µ2é§óæœ/“$U*‹$kK± 5 åö?ÿèÝ«ÇÉ'/]¹ÞÆÓýÈáÃíÚ{‡‡ÀùôŒ?ÿüÓ»­÷‰§kªß5z\\Üß iFyVÍwv^8f`ÜÑ3F¢õ$ˆÉ|†3F•°²¨¨iû§ô§"cEX µ/žº3€$) (’ëÞõÌÖTŸ,ZŸÂêUW±{vÀÙ³±gAÃÄÔckê51ëݬѼ©ÿîŸêÕÚc÷G¼û郾@ àv73 Ëø*•R¥"ÕÇ ÉdU¹¹9×®%”škb¨NJKK¦NÚ¿ÿÐÐÐàà`…BQ^^NQTuuõ… ââ⊊Š,7K… ñȨ.."'‘P$áÛò‰Ú#Ç-:/v3!¡SçÎR©T]g\>Ý!A‘$)—ËŸde5ð‡ê9cþÔ—©61ºÖ—©T‘J’R’¤’$•*,YQ%……Ž..—/_u°·»u#‰ =:zÚ´™B+ᇳßKJ¬u£Ž9tÉ’Å©²ÌØo9V.pqéÀ‡ñ<¦'ApÛÉ5§Ë{Äx£d’IXÑÿlTóB’$†vùònÝŽÀ… ƒ¸o•jÓòé¥>‹ ÑN2šU8ÓÑÅžš’Ka)°5uML³÷+h>Ôÿ$£ÄGåo¿5µ{÷ÈœœŠ(•*‚ÀqœÐZÉ͘WUUWVVÆÇÇ—šQú:e˜6mÚ† œœœz÷î½qãÆ­[·RõÊ+¯dff>~üøØ±cæ•G NNB¯P”V(JžX® -nß¼Ša˜H$R/bS¯Å¤i:';»Ñ„Ñdû®äÉ:À«æ3O§ËY†RªHIªHŠsd&Ü*ã"[Tݦ/-¯¾|ù4óË*jÔGÇYNÎÐ Àa Æô$­§c0FA¤3°Â’µùóÔÊ8wn ˲ErK3Iòé Þ§çM"!×ê´5Ï;Ï›˜M"-@4õ÷eJì‚;&%ÝaY†ÛKÎ…?=3¹Öµ@’$Ë22YUFFz~~¾y¿µ›"ƒ—WÛéÓ§K¥Ò¼¼¼áÇËåò´´4—žžn¢¦õæç¡è o×Eò;Ð.(ˆs̨aü葹¨_&ì¼o¼k—Mç<š*’T©(¥Š<Ÿ«ŽÓøžììœ7ýæè}!¾-(øÄÕxcpp@Î@öÓ8 —§å:ÌŠ œ\] =6,ÚPªF>Ɉ+8iõÚš ab6DBhÔß—IQô¶mÛ”J%††qksÔÎ8qÆ gä°,[TTœžšj¡M—¡ªªjÒ¤I~~~3fÌ6lX÷îÝãââîÝ»7sæÌ5kÖ<~üؼò47ÒR´wÏ44mÍo½®T‘GNd¨Ã›ŠŒ´t7O /'·1Ëý¶ >ÑgHqÅ-ªŒØšš&f“ʈ@ Aý­ÌÔdËNhšK†n=zÄÅÅݸqcÿþý……….\8zôèï¿ÿ>mÚ4­ŸÆA42š¶fÓÚ—jò×¾Ô”­ ý¶&21ĉú[™-…„+WÔ÷}úõ+**BC|³¢™Ø—„%в5‘‰‰@ þS´~+S“‹çÎ5µâ?‡ÚÖD&&øO×Ð!,<¼©E@¼¨½LÇru…LLñ_Y™@ óƒ¬L@ „ùAV&@ Âü +@ a~•‰@ 0?ÈÊD @˜de"@ ̲2@ æGÿoÿ¤Ü½ÛÈr @ Zú­Ì ÐÐF–@ ÑBÉyüX7͘#@ ̲2@ æGÿŒ9@4³w3¶Ä]MË)"i¦©ei|ôt~wh÷¡þM- @´$•‰@ ÌÏÍŒ'랟ñê`_oÀ[ø8ÃPe­;pRj-ììߦ©¥A ˆC ýM#--­ÿK/åê[—Š@4JŠŠ²33«e2–e›Z–†‚a˜ÄÆfÓ¥ô9ã£=¼Ú6µ8æ€àùùûÏÏßtäôÌ^­£™ Á5Ÿ—¯¯£³sSË‚@ Z<-ÃÊLKKëÙ§Ï“VQ/ê IDAT'¯]½ÕØè\½zuŪU·)ŠjøÞôécFnj¡L%--­Oÿþ¹¹M-ˆA*ÊÊ>xÐÆÛ›/´óÃ0R¥z\|ÝÓÃÇšZóáéáþ¸¸ÜÍãu4“!¸æ{øàdzµ·ojqD˦ÅìþÁqüø?ÿ5µ ÿ9.\¼8ùÍ7'Oš”’œü(#ã‹¥KÏž;×ÔBµ*¥§{ùø<Ã0lˇa‚Ç#0ŒÇçã´š‹ÇçÖjšÉ\óyùø>¡:mÞ²¥q”j,Yºtñ¢E¯Ž%àóqïÙ£Çwë׃šOKKsõðغm[PHHxçÎ ?þôSPHHÇðð„„u„?wìèÔ¹³¿ÿœyóT$Éd<Ãö:„ED\½z•‹¬·õF5f MÓm}}ÛúúÞ¹s§6´¬²Çq–aZÓeE`­ì²"°&¯ØÆ¹p‚UV6õ›@ Z<-ÆÊ€÷¦MÛþçŸÕÕÕš³fÏ&p<ùÎK/^¹vmíºu\øì>²•JÜ¿ìðá½ý¥Ž?oÁ™Lvóúõ¤[·ŠŠŠ¾Y±Š‹‹~úé/[¶<~ôèÒ… ýúömL½š3III111º Õ¸oAÙ™™Ù™™îîîͰ¡Y–¥†aÙÖt yx“{Í~ yx“Wlã\4M³­wUh4Z’•éîî5xð¶?þP‡Èd²OœX²d‰µµµ““Ó‚yóöüõ—:üóE‹¬¬¬?þðC.¾\.ßàÀ—K—J$±XüñG:tø|>ŸÇKKO¯ªª’J¥‚ƒ›DÁfHYY†aŽZá†jžãý™3 ‚ˆ‰‰ÉËËûàý÷¹ûäû÷Õ}ö™µµµ££ãü¹sÿÚ¿¿Î gΘAĈáÃ理€ávÔY“fÛÐMî»2û% p°Vv ˆÖær6r5õ;@ Z-c÷šÞü„ ú÷ç>@OO—Waa¡:Üóix//°¢¨ÞýúqY–%lmm·ýöÛ¦ülñâ%‹wëÚµñ´jÆØÙÙ±,[ZVæðü>C5AØÙÙ€€Ï666ܽzq†am4šF³ÉŒghee¥R©Àp;ê¬I³mèÖç7òp¢mýáòðÖ×Ra9Z˜•Ù>0°C‡ûà>:99À“œÎ:yòø±‹‹‹:<''‡34sž<áâ;::qûæMÎôÑ$*****JE’[¶l™6}ú­7K§f]XXرcÇÞ˜MQ¾¾¾¯7,*Ê\¥o?umÎŒ·Í•›Og¿Ô+ÒÃÓsþ§‹cFŽâ/]8?ã)_~³*:fÁã]¿zeÏÎí«6ü`Ær×lúuò Hãqú  ,€B¡°¶²âÏŸzäÍ)SÌ_êS„<ÌÄ–RW>ò8ŽKmmÕ ;öçîÝ¥ee@Q”:ŽX"aX–Ïç“$ɰ¬H,þjéÒ=ûö­ûþûÿÓ¦…vè Î¶¨¤„¦éIo½Ååɲ,N†²Òí Ñ8 +hz,â:âfW5rŽ¿|¹cHË0±8°]»³çÏxùeó— ;•ýø±cA\º|EÀçs!S§NݳkgØW_}ùå²·¦N±µ•ÆÄÄðx¼ë×¶mݶñsî1ç|™&EUWþó­PYY¹rݺu+V„‡…¥>x0óãµãhÜ÷ŒŒìIQÔÞýûc—-Û»}»ú©TŠãø¾;D"ѳ2 e¥Ó¢q@3æDÓÃ9œÌ~©s®ÉvïÛwäï¿'¿þ:2ãÝw7ÿòË©³gU$I3LÒ½{ËW®4cÑZ—¹sçŽÉ“'{{µqwså®éÓ§íÝ»‡¥©ýûíØ±ã÷m[üýÚzµùôÿþoðàAf_—YÊ×l_%I2 #‘HT$¹÷àA½q¸û¢¢+×®)U* Ç…VV†i>µ²¶~iÀ€ ›6UÊdœk3áæMCYI$†a ŠŠ^´ó DA¾L¢é±„Ÿ‰e†a†Ž‰c˜H$êÔ±ã÷kÖøz{seE„…-ûüómþ¹ríZ†e}Ú¶}môh3Š! p3¿3óÐÓ_—U3vôè±Ov¡O¯^G6{¡j&û2µÖeªS9ØÙM7næ‡ÚÛÛ>ü̹sZqÔÿÒµuûö%Ë–1 ãííýÙüùZ1çøÿìÝw\çÿð'¹’v€°÷’%bqá^(NÄÑÒ:q¢ˆ³¶_ÅŠ{áª{[Å=«­UlUTD¦ ‚lÂ!är¿?®ä#ž÷+Ü=yžçžÜ‘ã“»çžgéáãÇ¿5KPS£§£3ÞßßÓͭѪ˜ššüý¿Ÿ3‘Û·ÛX[·ý® j •‚”ìÙ£GÚººÊnEËËÍõPv+ÚØÍ«WÙle·¢ƒ”r¹pTv‚šO‘QÙïDG·ú¬ÙÓg?¾a"<(M+(A©¤¦ï˜ÍŸßíè>Î> ˜(FQ±XŒ¢¨X,£èK(J AäÁÝ»²*¥óh“ AAª>ýAAµ=eBAAmF™œÒMÅÀ AA0ÊT> ÃRÓÓ?~ù¢ì†@mP‚ 0ÊT: Ã>gfªS(êêê¼ÖÕÁ AA88*»’}ÎÌÄ0ÌÝã´¨èKnn1g ££ìFAŠSà€ŠP4/7·cšµR·:RoßVv ê\ˆD¢&“imo¯«§×œü-‹2óóóçÌ™óòåËÊÊJ@ P ¡ÿ÷93³¶¶¶§—WyI @012ÊÊÍå–•´|Œî˜˜˜ðððØØX‘Häää´lÙ²AƒÁƒÕÁ; µµµª7€¹J‚‡ ‚ nN,s8ïß¼qõôÔd2›Ìß²(“H$úûûÏš5kÆŒжúŠ¢D"ÑËË«‚ÇÃï«¶¡!¯²’ª¡!lI\øçŸc®Ö66Md°³ë˜–@mBYôô™3$ùòå ŸÏÇSx<ÞÿŒŒŒ+/fed<~øAܼ<éR'NžúßÿôôôŽ=jee066Þ½s§»››tÁß.]šõÃn®®ASS3pʼC…™¥eNn.àô™3z,VQQàÀÁƒKCCñ‚‡íÙ«—‰¹ù¸‰ñwMŒúýwÿ V¯]kkoïàì|ïþý¶ýàÔ %$&zxxàËÞÞÞ€êêêâââ©Ó§Û;:²Í̦LZZV8ÿÛo“–††ÚÚÛÿzø°¬<+V­²µ·÷öñù–väØ1ž=­lmoܼ)Ùh½owFF†«»»X,¶±··µ·‰D ó4lÀ§OŸ&XX[[X[Ož2¥ãw]£d*1 Ûwà€»§§©…ÅŒï¾+köî’uÞKJJrrtÄ—î« 7~÷ý÷ø»ëÃÃ'Lž,¬­•n§bÇ}åêÕõŽ”²ŽŒ2•!5ñÜ‚ Ó¨M(å€îܽÛÃãW¯^666ÉÉÉ€ÜÜÜ+W¯®ÿùgùS iki;þÆÍ›Ü’ét--­ªª* ÃNœ>¾ÑD@rJÊâ… ‡ F$§JnèC¤˜ÄÄÄýZÛÙõéߟÏç_½|™H$ZXXôíÓAm-­¾¾ø-1)iñÂ…ƒ ¨‘ɲò,[ºô›o¾!‰ööŽNN³gÍ"‰Ž¨HõíNLJrqqÁ›$'trssQEÅb52¹§§§’ößWd* ŽŸ8qâèQ‹¥®®>Îßÿýû÷ » È>ï%'';9:ÊÚW:ÚÚ ‚ƒ-Y²72òÒo¿ijjÖk’ÂÇ]úH”uàx™Ôyñùü‚Ü\¡P0L×ÐÐÔÔTòÖÆˆˆaC‡~óÍ7ggçGS¨Ô’’SSSJSã XXZîݳgïž=ñññS§M;tøð–Í›Ú::µµµÇŽ_zîüy~uõ™³g/\H¡Rÿ}ùR(9¯Ã0WW×F)Tjjjê–ˆ¼‚š ¯Ç¥Ûv; ‚ºD"iëêêèêÊ¹Õ ë+_SS“–žž”Àf³¥óÿvñâ‘#G>~ú„aXuuõþ}û(TjrròþÈHÉy@Vžƒû÷ãyÒ>~ô=_þœ‘áàè(ë+?~<žYNéœ9ujûÎ;ví=jÔÖ-[´¥ÆâPüTкý)ëTùïË—žžž¦fføjMM¾¾~sv Ñó†a)©©žž²öÀ³gÏí;wž5þÖ¿ÿþ{ãÆ ƒaec¨®®&‰}ƒü–ô^wsssss“\hÔb2߯Åõïßÿú ÉÉÉcÆŒp8œqãÆ=}Zºø¡_m˜Èãñrrr$¿È¯ß¸1|øðzÛíÝ¿ó A*‹K¸ÜÌOŸÄ¦¯¯ßh9_ùä”V/Ô¸ÿàÁ¶íÛÏ9ãââ"‹\\\{ôÈÊÎÕÖÚÕ=n(+O­PhSÓ$¼ºt)¾œ˜˜èÖ£ñ•‹ÅÉ))®u—ÍS¯______‡3qÒ¤³çÎ- ‘¼¥ð© •ûSÖ©²¬¬LƒF“¬Þ¾sgÔ¨QÍÙ]²Î{™_¾ bfjzûöí†û ””´,4tÆôégÏ›Pï]…{½#Zxš³{› F™ÔIåçäè±Xæ––¢ÚZÉÉ€aØšµkçÌž-é[“=pðàìœÿ±cÿ·~ýæ-[–-[F£R?~üxäèÑ5«WKOq¹o_¿~ý<ÜÝkkkŽþëÉ“;·náoiii8xpýÿþÐÔÔ<ôë¯ ,À{”öpqÙ¾cG||¼››¿ºúùóçC‡ i41)) AËW®„.[öìÙ³ƒ‡ݽ}»ÞG“þ8ÔMÐ +›/™™ £Ñ92d}åñññ’'H$RRRŒŒŒÊËËW¯YÃápþxôÈÙÙÿÙÙœ<YÙÙÎu·Vð–~»«‚êêjI/óFó$$$H7àö;...ææ•••åõynÍ© 5ûSÖ©ÒÓÃcSDDFF†‰‰Iä¾}YÙÙß}÷Ý_ýÕäî’uÞKLLtrr’µ¯òóó¦L‰Ü»wРAÎ..Ïž=ëÿuÀ§ðq¯w¤8 MîÞf‚ý2!¨“Fl¶¨¶V,K§_¾r¥¨¨(bÓ&Vž={ÒéôÄÄDmmí»·o¿zõÊÚÆ†eh¨¦¦Voõ¢¢¢~øeddfaqþÂ…k¿ÿîåå…¿¥¥¥%‰ðßÓ ƒÇãÍüáü­þýû/Y¼xR@€>‹åæî~ãÆ ÐhbRRRà”)¯^½242 [¹òÔ‰±¿ ¨Ó£jha]O¾zd}åïð`EÚÔÀÀZ¡ÐÔÌlÂĉVVVjjj‰‰‰®®®ÍÏ“˜˜heeE£RÁ×ÀývkÐhsfÏvuw·sp•§^þþûïAƒë³XcÆŽþîíÛ4*µ9»KÖy/99ïÙp_UVVNœfŒtâã{÷¦|ÿ½$ž||ï^à?Àk™µ¥Ä¤$¥ AZë§€êëûS•Ï{­Û½0Ê„ ¨-%''ÛÁ™« êNàyOøôAm)/'GÙM€ êPð¼' ¼– AAµ½G™aaa4MOOoæÌ™¥¥¥íÑ,¨ùRSSIRÓ>{ölàÀšššÚÚÚ&LHKKk~نﺔëׯçççûùùéééµfh‚ ‚T^‹£LƒqåÊ•ªªª´´4@ÔÍ‚óäÉ“ñãÇ/Z´¨¤¤$77·ÿþýúõËÊÊR¸BA*¥Œ?žH$úûû9r¤ › AAêiq”¹aÃWWW ££³jÕª§OŸ¶G³ Ŭ\¹ò—_~  ‘H4mùòå&LØ´iøú²ejj*~%rðàÁ(Šâ×)ãââš³ ‹ìììÜ~Ÿ‚ ‚ Ъ§>|èááÑVMZ©´´ôõë×wïÞ•N œ={¶¬"þù§‹‹Keeeû·‚ ‚ îEñ(óÞ½{Û¶m{òäIÛ5j.—K êM9j``P\\¬p(ŠjiiIVcccmmmo"AA݆‚Qæõë×çÎ{ãÆ é åÒÕÕÅ0ŒÃáHšEEEzzz ׉ HYYY[´‚ ‚º†*¡XC ÂÓ‰2Ïž=zëÖ­>}ú´yƒ …ikk÷ìÙóêÕ« .”$^¾|yÈ!555E…B¡šš‡ÃÁß%t‚) Ö@[7Ã,Aí‘=vG;QQz–Vi¢C¶ÔSWvCTA‹¿ û÷ï_¿~ýýû÷½½½Û£APklß¾}òäÉãǯ­­=|øptttll,ÀÔÔ”Á`DGGO˜0áàÁƒx~mmmEsrrLLLš¿@  ñÒênjkk•݄΋L&+» ÝŒŠZêú¥K²ÞJ)£Å•Яü8¸#Ûƒûøñã€à=--ͧo_nÝõ£N¥ÅQfHH‰D<ø¿@¡PZÓíj[ƒ¾víÚÏ?ÿûûúúÊ^jÖ¬Y³fÍ——.]Š/ìß¿ÿþý²jnôpÿâWV¾óÆÖÙÙÑÃCõzžˆÅâ2.÷íË—½ûõ£ihD"Ñ”3de.*,|ýâ‰DÒÖÑ‘¤—p¹I‰‰.nn¦ff*S,äç¿yù`jfÖ›P *?a‚——×OëÖIRnß¹²tišÜù8T)Ä‘ÏÜÜ\zµZ(~ðíÊ1æô/‰²Š RÆã%'';99nݾm``КA©UœÇ‚ ¨Å’ß¿wts321a0ªe€¥%›ÍŽ{õÊËÇOõã’@$²ŒŒ¼ûö‹õþæIzJr²«§§¹……œ²*ƒ@$±Ù½ûõ{ûꕾ†Ô- 6ÔÒ¨hÆŒáááë~üQò'zñÒ¥À)S䄘ÝÙ¦Y$„°pˆÑå“ò²Í˜>ýü… ›#"çΛ1}ú–­[ñ·Ž?¾k÷n.—ëìì|âøq+++‡Ã™üÏ?ÿ³Ù‹.\½f —ÃÁCù];wnŠˆPWW?}ò¤$¾=f Š¢,CCÀæÌ‹ýÒwÆ‹‹‹ƒçω‰1f³-X i^Ÿ¿fÍš7o¢(:Îß÷®]ÊíÕ; C••Eoþ>ƒ YJŠ‹Õi4• 1è±X%R¢0¹ttu+ÊË¥‹—óxFÆÆòK©]ÝÊŠ ¼ÃzDE²2Œñóã–”üóÏ?øjYYÙýû÷§O›VRRòmP›mfa±zÍšz}!$!ËÐ0>>þøñãŽNN,Ö Áƒ?þŒçáp8&NdzôìyüÄ ÝºMªøü%!!flSÓ…‹uØ®P˜Pôß/ ÏE‚÷r¶Z’&¾ÑÓ§O¿rõªH$ÊÍÍMLJ5r¤ä-kkëç11¹99666+W­Â,\¨««›™‘ñèáÃ+W¯J2£(š——÷)=}Æôé?ýü³ô&îÞ¾ HaAAaA›Œ‘|.ZÄd2332þxðàÒåË’ôeË–ñÊË“ÓRS9NÄæÍ-ÙmF™˜™™U6`Ö>÷} HˆÅb Â!&€H$~ÕåÃ$¯Ô””Ô”é"P¯*†adI:Ê¿ðЮýt[Q©ÔI'þvñ"¾ú{t´]=æ/X€ ȧßÄÆþûï¿;vî”.õUˆãæÖ¢È©³…8òÝ|Ëõøùm!¯°áÚsúw&K™™šÚÙÙýñèÑo/Nš8Qº7È AƒtttÈdrpppìë×€ŠŠŠ†oØ@¥RuuuW„…IW²d ‚ ãüý“’“[ÔòŠŠŠ{÷ïo §R©zzz+V¬ÀÓ«øü«QQ[7o¦Óé+W¬ˆŽŽnQÍmF™APÓ$WìrrrFŽ5rÔ¨œœé+yrŠt =»(͘>ýÚõëø5Å‹/Θ>P6ýò JÕ××_»víEÙ–DN0Ä‘ƒ/Ä–žÿœœË¶=áÅÇŠßþåü4®¹V¾1ãü… çΟÿöëÎʧNŸvuw7463v,ŸÏàã²Ùl<ƒIÝA|Ò*•ÚÒa+ðj%ƒÃ˜™šâ E……"‘ÈËÛÛØÄÄØÄdÜ„ ¼¯ï0t<Ø9‚ jBqŠ‹'\ºt 09 àÆú²ç}ÀTîIA|755µŽß4e †mO8:Óö·9×—95YÊÇÇGWW÷öíÛ={ö|ýæÍo.àŠi]€bnfVXX(§†S§OïÙ»·¨¨€ß[—9IB|Ã0Aû°€¦Fxþ³[À”ÒËn~Á'­¦‹7n\ØŠææænnniiixbIIɲÐÐÛ7oöë×ïm\Üð#ø$)yyyÆÆÆ€œÜÜæÔ/}“„,5ÖµdH¼ZÉ(„Ùuƒééé!ò!%…Á`4ó³´7x-‚ j~­.(((bÓ¦^^^½¼¼"6m ’¾Œ×°Œ*½P‘hÈ!C† AE"™ÙÚ õ±ÕLÈ®jQT4cúôß.^¼tùòÐ!C ðE—deg³X,éüÒ!9Ü¿??7÷ÎíÛøQ–DNxIä$ qòrròrròsss:wç~cmµ?×ö˜7ȰF$v7£S›=¬½v÷ÎsgÎH' …BEµµµ…BááÇñDƒ1|ذðAIIÉî={šS¿––Š¢¹¹¹6›N§ß¼y³¦¦æÈ±c’jGޱ!<¼ººº¸¸xç®]’ôI'®Y»–Çã ”> 8Œ2!¨k‹{÷näèцl6Û̬Oÿþwïݤ¥§ë|=£½|²ò§¥§3utŒLLð× !CÚ¬ÝP—ƒaÃΟ=;Ð×_èë{þìY9¦B/ŠÎœ5‹Î`ÐŒ™³f‰P´ÑlíJ±¨hÚ´i=yrêôéÓ§ƒºeýúõüêêâââ­[·N ”Î/â´(rê„!N“ÔIÄ#3mÌ´èÈlQAww[[[éCCðåËÒÓËËÅÅE’~èàÁ‚‚3só¡Ã‡O?žÔŒë»úúúÁóæá7¾SRR¶oÛ¶44ÔÃÓ³·Ôl8‡är¹æÃGŽ ¤8p@Bq÷ôd=:%5µEŸ«ÍÁ(‚º0¡P8q„ìÌ̬ŒŒý‘‘ÚZͽé#!k´m‚ ù99øë¯Ç›_joùùù~~~zzz²F*3gÎÔÒÒb±X›6mj2]>ü‚¥¶¶¶t7DéUYEêIMMÕ Óñe±X¼páBOOÏÂÂBétIN¦–V«ºI¶±X¼pÑ¢"'êêÕ¨«W‹8œ…‹‰Åâ†98Ž-¢@TdnfÖ»w着ªÑ£Gã)¿:$¨©±²¶öèÙÓËËkeݳ#8駨¨¨E‘Sg qäˆyøð±cøKãã-gÞcɪ¬"vvv ‡µ³³“ ɾaCQaabBÂÒI"‹ÅºqýzQaáÛׯMLM X¬zUIjNܵsg~nn^NŽ««kÐwßåfg''%-\°@R­¾¾þµèh¼Ú9sæHÒiTêî;3>}*ÌÏ÷öí‚ùóÛdw) öË„ .,//Ãá|„?çØÓÓOë‘‰ àÁÝ»±¯_ïÞ»—Ëå:;9;rÄÊÊ*-=ý›>}öîÙ³}ÇkkëÔ”éü®2ÆÎÔ+x#:šÏç¯ùñÇ[·o£(ê?fÌÎ;)êê€âââ‹Å<Î66^0þÚuëŠòóñâ%^U¿ŠòóV‚gÞ¹}{Ä–-jjj§Žÿæ›o<oŪU>Ä0lì˜1‡ˆÜ¿?öõëóu7°V­YC ¶mÙÒ®;_éˆD¢¿¿ÿ¬Y³fÈ/ý§Ÿ~ÊÍÍÍÎÎ.//''góæÍãüý;lÓŒ2!¨ c³ÙÆÆÆ³çÍ›1mšWÏžúuw½oݼùMŸ>ùu]¯JJKŸ=yÂ`0‡„¬^»öêåËEãããß¼z…••%_>邀а°ššš„wï¬9s¶lÙ‚ÿOZÂd2?üXUY9ýÛoå×)«EsóòÒRR6oÝúóúõŸõûï›#"ð±K–/¾~PQQqÿÁƒðõ멊žž^Øòår6!«Ü’E‹7vlrJ ^ó;w¶lÚ¤©©I"‘zyy Y¬>>>×oÜmÚÉS§¾ º|åJ½§º§ÊÊJ@­û—F§Ó+**ä¤7I‘Jƃçb±øÏ?ÿܸq#ƒNÿÿ<†¢¨‘Ô€‚ÿ o.UIzzú·AAÇíáâ¢ô;éÝ9)»P£LRúúËBBF ŒEvóÚµ¾}ûâ¤7,«pß2|ì’ä„„zóá÷îsssñ@3§î^¼™,û[7ö›¬Jÿ˜A2Pœ„ŸŸßò+’SRî?xðKx¸bG•Ðét ê««ñ€²²²ß½²Ò›¦Às‰D"1êêÕÉS¦hiiN™"IG$OªÛ>k³¤’’’’ “'¯^µjäÈ‘0À„ .¡ÅwÌtÈóç7Ù’¶UUU²t)Ç“Näñx!K—VUUÕË܇‚TG‹£L77·‡òx¼²²²€€€)u?C!€ ˆôLèãÇǃ=r䈲›¦š(êêï†nhlìêáQRZzøÐ!€¾¾þ¼¹s½}|L-,8EE¡Ë– >¼×7ß8;;7Ztþ„„„µad¤:…ÒÓÛÛØÔÔoÌÉØ%öíãr¹–ÖÖ£üü&OÆÉdòÖ-[BÃÂzz{{÷êÕd%:°o‰Drtq±²µ=uú´$}ú´iIÉÉÝé¤$ðÙh>‹ ´ï¿ÿ~Æ •••yyy»víš5k–ütùšQ²‘"2ào 8ðÌ©SÁóçß¾sG:½aN Ã.^L£Ñ¶oÛÖÊQ …D&Oàóùx ŸÏŸ@"“)J½Ì JRI-Ž2 ñ[`†kkëvh¤ ƒšššjhh°Ùì½{÷â‰UUUóæÍÓÓÓÓÖÖž={6þ¯¿zøðaSSSÉ5éæ×ÐLøc°²‚¨•455O8‘šœ\—÷åóçógÎHºBîØ¶-çË—ìÌÌ=zløßÿ rsßÇÅ…,^Œdgk[R7¾ZÃü’ĆÙ¦P©ÔÛ·üð!/;ûMlìüà`<]__ÿ÷«W rsc_¾ìß¿¿$ÿw3fded$ÆÇ/˜?oŒ¬J¤·egk+ÉÌd2O;–óåKVFÆÁýû%5›™™Q)”nõ¸+•Juss«©©¡R©øð´´4­º1S#""ð3¶‡‡Ç·ß~+y\Vz0 `X —+=ÕÍW«2Š4>;† 1|øñ£GgÏ™óÇ4RD*åòåË1Ïž±MM wîÚÕaSþرu«MàÔ©ÕÕÕÕÕÕS§ÚØØìØº•Ðð3B$E‘;­ééé½zõ*//÷öö~øða›· RLQQÑ’%KbbbúôéÃãñ²ê¦öZ°`AMMMFF@˜6mÚúõë·mÛ@Q4'''??ýúõ«V­úçŸZZu*¿><~üøÎ3ohxñÌÎή¬¬ _¦P(§OŸ>-u¹W~zs¶õÃìÙaË– 0ðôéÓ]{÷ÞˆŽn~ó¶66%Žä­1~~ÿ?ä–T:ž³(?Oá•”4§òö¹gϼùó§MèééáÜÁ‹—$Ÿ"#ÙÚÚ–••éèèüôÓOmÞ&H1jjjd2ùÇL&¿"UUUuñâÅÝ»w3 :þã?^¹rER$,, AI“&áC™(PC=(ŠjI‘ŒoAíŠÏç³ÍÌþxôèÇ5k”ÝwâèÑÿ…‡¿~óæõ›7ÿ ?!£§¯êAäèáÕ•GFš1O AŠ?5¢§§·~ýúÑ£GïÛ·¯ )LKK+::zÏž=Ë–-sssÛ¶m›OAAH$’ܰƾ#F[[@¥Rñ®]-­¡!A$×Q HBú~w{ Ñh¹u—Þ¡vB$/\2t(àñ£GrŠˆ*5$3‰H¼ï€D&+»-Ô5´êÙd‘HÔa“kAÍáççççç' ###§M›–™™©¯¯ HVV–¦¦fÇÔAJ’„Œ&&&7oÜÀä!ªV” €ce@P‹´øpëÖ­ììl@AAÁúõëÇß­‚‘››{ÿþýšš2™¬¡¡Ÿß555—/_Ž_bÌÏÏüøqûÕÐ(ùÁBÔ%¥8:::::¿Ö°¡ûéøãAY‹£Ìôôô>}úhhh¸¹¹ÙÙÙEFF¶G³  (ºqãF}}}:~êÔ©sçÎáéÇŽ£P(ööö càÀIIIíZƒôx™‡= A]‘HüofÕ%‹¥cGùцaõM<ä"v'øç…‘&I´øŽùòåË—Ë’ê`"‘`fföÏ?ÿ4Ì@£Ñ8pàÀFKáËø%ÆÕÐhK}â>† ©=½rUï‚\\X¨#5©üN–¥\.ãëN5tƒËå°XíվΧ”ËÕd2‰*×O@õ\¿tI~†ñS§6§ž´´´^½{óJKÛ¢Qª©SÌAÔµ8¹º¾Œ‰1Ð×g«^T!‹ óò^ÅÄxöî-I”õ1Åb1§°ðMl¬ó×sÙÚÙ½yõÊËÛ[ŸÅR½]T¾ÞÆÆÚÚÛ·GßÍĸ8ù\<<Ú|£ª­ßðá²ÞŠ‘1DcZZš§——&Æ0G‡ýûöÁ»sM‚Q&¤ˆ¬¬,''§z‰ÉÉÉfffJiu0îÙ»wüë×¥\®êÝ:'‰Úºº=<=itºd¤ñße\þ!‰ ÃÞÁA[GG:ÝÐȨºº:>.®ª²RõvQ=D"‘¡©iamÍ`2Ûé !9q¤ü”Çãe|ùRQ^Ž@£ÑLMLXrGh=>Ÿÿêõë´ëVZÏÜܼÑt9g#RXP€¢è†ððÅK–œ¨›&’F™"ÌÌÌ*++•Ý R cjiõêÓGÙíhgu!æ°‘#(mieehdTSS#‹U»ß "‘¨®®ÞÙ.n•––&&';ØÛ³½½)+-ý’•Åf³EµµrJásûÉZm& £ª¢B‘Fwzø8ÓGÃWŸ8±)"B]]ýôÉ“>>>€ãÇïÚ½›Ëå:;;Ÿ8~ÜÊÊ pôèÑ]{ö”–”0µ´–-]ºháB@Ÿ¿fÍš7o¢(:Îß÷®]*6ŽŒ2!‚Z† ‡Kl6øÌŸr}úüÙÖÚÚÜÂB(u55G{{@óü9~­‘ÏçǾyãÛ¿?~ÒÞÖ6óË*fgc#½êîꊢhú§OÅÅņéëéÙÙÚ‰D¼”­MFf&‘Htvtd2™qññ†Ý»w0 _?e'‰¢¢¢ìí(Šæåå}JOؼù§Ÿ~üèÀÚÚúyL ƒÁX¸hÑÊU«~Šâp8a+W>zø°wïÞåååøX=€eË–Õ…ɉ‰ᇙ3#6oþeãFe~¶¶£L‚ –©•{¨›ƒ!xç!‰**+Ù&&šÉãž(Š kjÀ××5 >ŸaXuMMß¾}ÕÔÔ*«ª¤Wðöí[L,ö0!‘âââ²rr,Ì̆‰1ÌwÀ€Ì/_>gfzyzz¸¹½zýzÔ¨QêT뮊¢Æ&&'GǃuOĆ,Y‚ È8ÿC¿þЧ 4_ž8i¨›Z/-=ÝÙÙYSSŸè¤ŠÏ¿•œ˜H§Ó+W¬˜9kŒ2!‚º=WZú!)©¬¤Dõ:‰D-{gg¦¶6~Óü¯G$aJÃÌ ÃÒÚZ¿Ao¿Â‚‚´*+*T~   A§[ZY™˜švžQ3ñŸC*•ßìPÏÞÞž@ ª«…ô*Š¢EEE¾Èd¡@`jb’œ’bgkËçóÖÖÖô˜ÌŒŒ 5uuP¼ªXˆ @$/'G²š––† ˆ––€J¥J~ž:}zÏÞ½EEEü‹Ãd2»páÀÁƒ«V¯îѣǦ½½½‹ E"‘—·7^JþÔz]TÓQæúõë; ݇µ‘‘²›APkñ++ß¿ycëììèáÑy¢Š¶"‹Ë¸Ü·/_öîצ¡‰DSfÌ•¹¨°ðõ‹$Iú .7)1ÑÅÍÍÔÌLå/pŠÅâ‚üü7/_L;ÍCøL˜B¡°™Q>@PSS“„¤Ò«x%1ÏŸðßètD"áÙÈd2¿²!1 S±iEPRR²,4ôöÍ›ýúõ{7|Ä<}äˆ#GŒ …‡~ýõ‡™3““’ôôôù’Â`0”ÛæöÓt”©««Ûí€ êB’ß¿wts321a0ªe€¥%›ÍŽ{õÊËÇO§ˆD–‘‘wß¾q±±Þß|#IOINvõô4·°SVeˆD#6»w¿~o_½Ò70РӕÝ" “H :½  @OGG:ÐÄGÑǯÁ tÿ¨’â«d2™@ :TÖÅ6I)Õü:´„P(DQT[[[(>|OÌËËKJNп¿ššš†íÅ`0&Mœ¸fíÚÍL&³   55uàÀÊl}[kú7µ©8¨µ·’âbuMeCLz,VIq±dUþ™MGW·¢¼\ºx9gdlÜ1çÕNBGW·²¢¢SÍ£kme•’’RÌåŠÅb Ãx<^Jj*…BA¤  @,çææ6§‰d ¯Ÿ””TÁãñ++ËJJr³³e݈'‘H†uªýБ Ö/ýÀꊻ§'ËÈhäèÑ)©©Êkx»húZ&#‚ ¯‰Åb•Ÿ·šXoM©ÿ©©©‡ÿÏL Ô럊a™DÝé?¾:U?]mmm·=2¾|INIÁ0ŒF£™›™Q¨T[kë„„ALÙìb.·9UÙÛÛgff¾xõ EQu556›­'55”45556ûÉ“'€þ}û¶áÇiC1ʳQvvvõ¦ù‘N±³³ãr8ørø† á6àËKCB¦&&øãçõШÔÝ;wîÞ¹³…mé2àÓ?APÓ$WrssGŽˆyöŒÍf7§H·ÒNŸ¹Ééda0nnduuü.-&× …FFF¦ffjêêÃ,­¬4m°Ô½Úz«„H´¶¶vtr»cb&ª­•ÎF£Ñùúâ˶66ÎÎÎ$2¹ùu¤fN µ¼– A5 ÿ_À).žpéÒ%À䀀7nè˸ Tñ߇P(¨©©uðv[9$Š¢(Ÿ_/QT[+›½V(ˆÅbéqÔë­† á×õHg“^ÖÔàC&AÝŒ2!‚ ¦áÿ ‚‚‚"6mêååˆØ´)((èî;rÊtXó:Š¢C† <ùë/Õq‚ÚƒâOÿL:544´ûR« 6?„©©©N§Óh4OOÏØØX@~~¾ŸŸŸžžžŠÍU5÷îÝÈÑ£ Ùleé*q IDAT¶™YŸþýïÞ»HKO×Ñ×o}åiééL#ü5hÈÖ× uU0ìüÙ³}}ñå¾¾çϞŗ (1z‰Ptæ¬YtƒÎ`Ìœ5K„¢fƒ Hš‚Q¦««+ÞÁ¹ƒC4ÐGAÊÊÊÊÊJ??¿yóæˆD¢¿¿ÿ‘#GÚcsPç! 'N˜™™•‘±?2R[K«m7 H~Nþúëñcé·d Ó )FÖC@0sæL---‹µiÓ¦&Ó[_°QøL[[[ú„&½*«H=©©©t:¾,‹.\èééYXX(.ÉÉÔÒjËó¯¢ÄbñÂE‹Š8œ¨«W£®^-âp.Z„?µ]O3w&uŠD™4ÍËËëéÓ§¾ É׎ǒHœ8qâçÏŸ,+88ŸÃ Rayyyçû  2™Œ HOOOÀXEñ ïß¿/)) úássK›µëÖáÑ!~½óÜ… N=z°ÍÌ–††â}ÎäÃK=ÞÅÍmÒ”)>Ÿ²l™¥™¥åâ%Ku=±Š‹‹LL¼¼½OœEãããß¼zuùâE@hXXyyy»w)‰‰œââ-[¶àÙ‡„0™ÌÏ?Þ¿{÷ò•+òë”U Š¢¹yyi))Ó§Mû¹n²E!!ÕAb||ÆÇ3ø8eÊ£Gx<@$ý=­ >C*ëÇáéÓ§ÃÃà ›Í ;yò¤üôÖl\“Y#%džkkk˜9óCZÚý»wutt$é sâ >}ûêà/ cSDD;¢ªªªÖÖFGEQ©T<…J¥FGE kk«ªª6‚ ‰Ïeaa¡©©ùþýûöh ¤Eµ´´h4Ú±cÇΜ9£ìæ@‡L&ß¿sGWGgíºu¶#GÆ/fK«¨¨¸ÿàÁ/ááT*U__ͪUÒ1ßúŸ¦R©zzz«W­ºÕp(ŠšZX௣u# ¯]½Z]]¢®Îçó£~ÿ}sDN×ÐÐ[¾<úúuÉFÃׯ§R(zzzaË—Ëù²*Á-Y´AqcÇ&§¤à5ß¹sg˦Mššš$  ÅÅêããsýÆ À£ÇuutÜÝÜÛ¥M~~>—ËuwwÇWÝÝÝ夷¾ ,MFcÍ,‚Ç£3¾ý6//ïöÍ›šššÒé sâËÏŸ=+*((*(ˆºrESSsì˜1-Š[ƒF£íÛ»—Á`H'2Œ}{÷Òh´z™[|€!H¥µìs‰4tèÐ7nHá—ª3@¤¬¬¬²²200ðÈ‘#ÊnÔqÌÍÍ#÷ìq8kÖ® ^°à¤3à×8MLLðU33³ÂÂB|™@ HÒMMM%éÒÉÎÌ”¬¦¥§#"¹°°P$õ–LBˆaø³·øF%ƒ)šššÊù²*Á·®¥¥ P©µµµx͆5¬pú´i'Oú>(èò•+Sål®k©¬¬$T*_¥ÓérÒ[_PEÎöÁ0±XüçŸnܸ‘A§uE¤àüoxs©JÒÓÓ¿ :~ôhx{‚:¿–E™šššÚÚÚS¦L‰D°xñ⨨¨üüüvl#Ô% @RÃ/ÕÕÕ\.wûŽ“'·´ câ„ ?®[‡÷‰,(,üûï¿% ÿå—j ¸¸x÷ž=x~6›M§Óoݾ]SSsôøqù•4ŠN§ñó[÷óÏ"‘èõ›7x:•B7v윹s½zö¬€viFFFºººñññøê»wïð™‘e¥·¾ , œÜääìׯßo., ‰¾vM:½aN|¡¦¦fêôéC‡ Y0¾B§^ÅUUU…,]Êãñ¤y<^ÈÒ¥°_&Éײ(S,WÖÁŸþ©¬¬DQ´Ý¿å*¤½hppð¡C‡jkk©Tª››[MM •J•܃T E]ý}BÂÐáà ]='fy( ‰LžÀçóñ>Ÿ?9 €D&S(”z™[|È!H¥)>9—Ë•< )‘ƒƒƒô°…“&Mš4i€]f»MMÍS'N4úÖŽmÛvlÛ&Y=/ã±°ïfÌønÆ YõÛÙÚ–H=ºÞh •Jݹ}ûÎíÛë•Õ××ÿýêU|9-=½Ñ-.˜?_N%ÒÛ²³µ-ªë™Ãd2OÔ=‡$ÍÌÌŒJ¡Œó÷—õq:?ÉB|ÿGDDÌŸ?ŸÍfS(”Å‹O›6 ÏÓhzZZš··wYYYK 6 Ã%%%:::’´z«‘óÖˆáÃ=:{ΜsgΘ››7^×/_¦¨«³ëúã® [!÷‘²6D`ÇÖ­‹CB§N½|é pêT›[·m0AušŽ2¥;xAuZ¿><~üøæö2ì”ýqH¡PNŸ>}Zꪭœt;;;<ÄliÁf¶í‡Ù³Ã–-0`àéÓ§»öî½Ý¢ckcSÂáHÞãç—_×S:ÏY”Ÿ§ðJJšSyû‰Ü³gÞüùÓ¦ôôôðGîày’F™uy|>ßÖÁÁ„;zù²²Û¢âN=:90¿êü¿ðð¨n³Ã9zøðð‘#ÑW¯ÂyÌ»´ë—.ÉÏ0¾ÜMKKëÕ»7¯´´ÍkîÌ`” AÝTÃ{ßíº­¢ö‰‚F£åfeµ_ý€H$ .^¸0dèPÀãGäK@ ¶xHæÎŒD$Þ¿w@"“;xÓ‰qqò3¸xxtLKTF¿áÃe½óða£éiiiž^^4šÃìììöEFölõ4(Òu::8ìß·Ï­©±~»V´Út”IT­ÓA¤IÈhbbróÆ 5«,ª÷ï£ÞóIN)+åóù/ccÁ0LCCÃÞÎŽA§·[»žÿº7#»‚ …b±8bóæ%!!ÿÄÈÉÛ\x(Šn_¼dɳ§Oåd–~ £Khú@€ÚTT‚ 6G”âèèèèèHüZÃ"Ê>Ý*AÇù¨Q£Fi``–žÞ~q·ê¢J$ýÇŽÍÈÈTñùKBBÌ,,ئ¦ -’ qüøqG''kÐàÁ §dkAI“&¥¥§7,˜––ÆÔÖ>sö¬“³ó„I“Fƒ¢(ËÐehØ®³M4}-³™ÓB@ÍdJBP×G$ÿ›™Fu‰Åbé D~U/³$¿ê]Δß .Ò€_U¥­¥•™™©N¡”óxÒÒJJK‰D"ËÀÀÆÚš@ äp8×=/^½¢kh¸8;þyñÂÕÅ…N§£(šþéSqq1†aúzzv¶¶D"‘Ïç¿zýÚÞÖ6óË*æîêªìÚAD"Qôµkø4­Ë–-« “ Â3gFlÞüËÆkkëç11 cá¢E+W­ú½±ù{ëÕå`oßhAEßÅÇǽ}‹aXVVV¯Þ½ :à“¶^ÓQf¸ ͢ќ=|¸õ•¬_¿¾õ•@mÂÚÈHÙM€”@GO¯¼îQnUU\X¨#5‹˜üN–¥\.CSS:…Î`p¹\ƒº‰¦ºƒR.W“Éì„5†a…EE4HLùðAÁƒc››kfb¢Åd~üô AÅbqEe¥:•ZVR‚¢¨>‹US]œšŠ‰Å¾ $R\\\VNŽ…™^suMMß¾}ÕÔÔÕÕÊþ íEQc“êêjƒñ<&¦ŠÏ¿•œ˜H§Ó+W¬˜9ke4/¤¤Ô¦·¤¤dYhèí›7ûõë÷6.nøˆͬ¹9;a÷_9`”Ù%Á(‚” ØZZ½úôQv;ÚYÝ©fØÈ‘ ”¶´²242ª©©‹Åª}Î"@$ÕÕÕ;çt¾’(¿ÒV]]‰Å@ ¦¦†G-ZZZÜâb~uµ ™L.(((++³°°@Q”L&„¡C‡Ê%´þK²²²êÝ»÷Õ«W'Mœ¸fíÚÍL&³   55uàÀB¡EQmmm¡Px¸%ÝäšSPKK EÑÜÜ\6›ÝFŸ¦Á(‚ ¨eÈ>\b×E¥R;gàÕ=‘H$]]ÝÔÔTkk‘H”ñå‹‘¡!#þ×5S]]CCCÑ„âb€aÚÚÚ555$É@_?))ÉÒÜA¡PXUU¥­­­ìO£d³gÍ [¹òíë×6nt÷ôäóùFFFÁóæ 8ÐÐÐ0lùòÁC†Ì;7úÚµfÖÙœ‚úúúÁóæyy{é[íŒ2»¤nøÃ‚:ÚÚZe7¡ó‚!x'ç`oÿñÓ§çÏŸÁŲ··GE"FCŸ•A*•J¡PD¢Eööö™™™/^½BQT]MÍfwÑn‚1¶t¬K;;;é±ÐÇ7nÜ8Àî;wïÜY/sø† á6àËKCBo´Îfܵsç®[ìœ`”Ù%Á(‚”Œ@à•–~HJ*+)Q½N‡D"QKGÇÞÙ™©­ß4ÿëÑ#YO0àý2-­­õåεR“Óÿ4D£ÑX/QLvvtT£PðÛߢÚZaM þV_Ž^žžT 1‘hmmíèä„wÇÄ0LT[Ûhý]B{L 5ªÅQfjjª£££††¾zâĉÀÀÀ¶nÔé(SGGgæÌ™µµµ¡¤¤ä?þ((( 8ÐÒÒRSS³¶¶öóçÏOž<‘Œ AP+ñ++ß¿ycëììèáѵ:ã7‡X,.ãrß¾|Ù»_?š†@$M™1CVæ¢ÂÂ×/^H¤zAmEá $ÅbqUƒA¯1 «‘ñH¸ôs<Õ|~½bB@ØŒú!HB‘k™‚Tv³Ê:é(Ã0 Ã"## Bß¾}‡ vöìY@MMÍ­[·8…B:tèÈ‘#¯5»kAò%¿ïèæfdbÂ`0T/ÊKK6›÷ê•—ž ë Hdy÷íëýÍ7Ö@‚:?xǼKªe‚ºXóÇžžžxÊs|Ô ª««_¾|9mÚ4xŸ‚ÚJIq±½››Ê†˜ôX¬’âbɪüˆŽ®nEyyû7 ‚ ®D‘(EQcccEÇ¿{÷nÉÝs¨Ã4e‰D{{û‚‚‚†ÿ ,,, a” AmE,wÎy«ÛPýY4¥N ©©©‡ÿÏL ¨^ÿT‚Z©Åó1%$$äææ¾}ûöÇ¡¡¡íÑ,¨EÂÒ¥K—/_îææv÷îÝzïâÃz=zôH)mƒ H5`urrrFŽ5rÔ¨œœLвAP§Óâk™L&“ÉdØlvDDÄ„ Ž=Ú ƒä©wBÇ0lïÞ½jjjþþþnnnOŸ>•¼ekk;jÔ¨ßÿŸ® ‚ H1øi‡S\<9 àÒ¥K€É7nÜÐïâ#Ú@Ô~Z;·,üýªØ×𔚚šGyyyQ(<ÝÙÙyôèÑQQQÙÙÙÔ>”ý·ÐM¥¥§)»Ý þ±iS//¯^^^›6ÁïA²´8Êüûï¿ñròòòÖ­[‡I u°†¾PRR’““ãááaXÏž=‡zùòåzwµ ¶¥ì¿÷îÝÈÑ£ Ùl¶™YŸþýïÞ»HKO×Ñ×o×íæ8:;K§¤¥§3utŒLLØffŽ..sæÍKýð¡]Ûu( vþìÙ¾¾øò@_ßógÏâË | êlZe>þÜÝÝ]CCÃÃÃÃÉÉ)22²=šÉ×0Б,ÇÅÅyzz„aÆ©©©MŸ>}ÅŠ+V¬X¶lYÇF_Ý…rÿ„Ba@`àÄ ²33³22öGFjkiu̦þñÇÐ!Cê%"’Ÿ““›•õϳg®®®ÃFŒHIMí˜ö@ åççûùùéééQ(ét@0sæL---‹µiÓ¦fÖ†ÿÁkkkKÿýK¯¶Ã'€ ¨kkq”ùã?TUU:t>`®t\.wË–-’ÕÔÔÔ}ûö‰ÅâÍ›7oݺuG={ö(±‘P;ÉËËãp8ß‘ÉdAzzzúøøÆúû£(jdbbdbòþý{>Ÿ²l™¥™¥åâ%K55 îzç¹ œzô`›™-  ÿqùØñãŽ..†l¶ƒ“Ó¡_mtÓüñÇðaÃd5L[[;dñâ o¿ÝQ7 Z£mðx¼¹ÁÁf––¦ /ÆOœ<éìêjÈf6ìóçÏxbqqq@` ‘‰‰—·÷³gÏ$Û’U3D$ýýý9R/ý§Ÿ~ÊÍÍÍÎÎ~ûöí¹sç.^¼ØœÚ°¦^Aõ´¶_&¤¨ÓPî_›Í666ž=oÞ½û÷9Ž$ýÖÍ›øeÅüœWW×а°òòò„wïR9ÅÅ’Ÿ%(Š>}úôÍ«Wñoß&$$ìܽÀápV®^}úäÉ‚ÜÜW/^øúú6Ünmmíóþ4hüæ5êÅË—ø²¬6, ©ãã3>~œùÃx¢µµõ³'O²33mllV¯]‹'. a2™Ÿ?~¼÷îå+W$[‘U3Äb±‚ƒƒ¿îØ8}útxx8ƒÁ`³Ùaaa'OžlVu’;ã²^A_ƒQf—¤ìÈ úÊýK “É÷ïÜÑÕÑY»nÝÿ±wßqMœÿÀŸË%! I6ÈFPŠ(V­ZWݳժ÷¨Z«]‚U[WݳjýªUë¶jUj[ëj]8˜ "  !dÝï+ù¥BP ƒÏûÅ‹×å¹»ç>¹ñ¢E†¼;PÛëׯÅbqhh(ù244411ÑMüê€ ‚gÿ˜%£'7ÀtxxxlÙ´ !T(-[¾|ƬY¿]½ª=AAAR© ×<' p'‡1 suu%‡ÝÜÜ B666GÚ¹kײÏ?oÓ¥sg…ÆýöÛ»õŸ.×(‹y<žžD"Annn:3þïСÍ[·’Ýo) rJ„‹‹‹&Úߨ“D"Á0ŒÉd’/Ùlv…aÏ¡†<ÐXeš% B]ÁÂùó‚þû;„Ïçã8žœÀáptf!"''‡L4srrÈòþýúõï×O.—ïÚ³gêÇ'>y¢3cÜo¿9|¸Á®\½Ú5<\O †ib ²xñ/gÏvïÞ¼ƒ!$B¹¹¹d¢™““Óà»ub³ÙATUU‘‰¦D"1tÕA– ,ŹãÇõO0lܸ–‰ÄâA²b–ŒzŠü‡q[B¡H´ióf2å*++Ûwà@‡ÐP„ÏÆF¥Rååå!„8ΈáÃ?ÿ⋲²2„P~AÁ_ý¥©á›Õ««ªªÄbñºõëG…Ê{ýúÚï¿WWWÓh4k«öOš—/_VËåþ~~z+--ݱk×ÁC‡ÈSÛõÅÀf³ôÅW_UTT(•Jòä¸\¡P©T¶¶¶r¹|OÍC8Nÿ~ýb¿ù¦J&+**ú¾æn6ýïÔæäädooÿ¤æ—Ããǃƒƒ ™ΘQâ£Gúÿšc¡R©ôæ­[ÍQ³)ˆìׯ¾¿úfIKK³±µm™ðÒÒÒØ\®ÐÑQ öŒŠzRë§~³´Xx†ƒc™fÉÀ3\ 84tmb³bXY=MHسwoii©ƒÑ£GÝ;w"„Aôôé]ºuÃ0ì× ¶mÙòÕŠ»t‘J¥NŽŽÓ?þ˜¼§ÇñÈÈÈŽ]º”••>üÓÅ‹Bj•jíºu“§LQ©T{wïÖYèÕ¸¸úî.'ol§P(\'"""îÊ•¶ä¨úbؾuë¢%Kƒƒ)ÊÁƒ;uìè(~²paŸ~ý>ž6ílÍu–Û·n9{voo7W×™3fÄ×|³ÖW3@Éd2²ë™L†"»4šæLSD š‘´²Ò†ËÍÌÌ´b0$ååéÏŸ!àóý|}É«brss_¾z¥P(hTª››››««öÑÊÚc=yBÄåË—BBCËËË_fg+ ¶µuÛÀ@&“IÎîëã“™•E¡P‚mllBJ¥2-=]\\Œ‚Ïç „T*UQ™,•J•›››‘–¶vݺ'OþðƒÈá/¾úêZ\BÈÛÛûö­[göœ9Ÿ.]zúÔ)„Ð0aS• IDAT¬Ù³ííí³23¥Réøÿþ¼¯R©zô(;'ÇÓÝ].—§edtéÔI ª”JiUNGR)BÈšÃ)‹kírïÁƒ÷Þ{<È­R*#ºve²XOŸ>}ž™Ù>8˜\®š ¢zöÌzùòEVV§°0•JE>x¶WTÝÊŠ¼Ô§Z&«3*ã®´-˜?Çñ¡C†¬ùöÛ… ÃÛ¶o'Çjºž1cƈ‘#BWãâR““™L&“É\²xñø ôÔ¯R©œ]]Bmwlß®¹~ZS!é‹åË­¬¬šã 6 È2h¥ü|}‹:Y€ylÉÁÁáØO?õéÛ!ôûµkš~ €i"âÊ•+*•ŠJ¥Ftë¦P( £zö¤Òhr™ÌÍÕ59%ÅÏ×W©TR0¬Z¡H$„¨ŠJë:? …¢gl¥D‚âñx8ŽËªª„OéVVH"Ay{{#‚àÙØdffÒ­¬*ÊËEEEQQQTM&•ZÑh …B¥RÕ•Ü„Ÿã…ã8ÙMN·²²";j Óéš'¨ýxðà¦Í›ÿíŽM©Dµºcs­гˆ¼šÎ4꬜†Ïç7é;kbehVsÓÕÕõ—óçÉ£F†aØ€ Å£Gróò|>A·nßFèßk 0 £R©T*5888777))ÉÚÚÚÛˈËÕT¢,)ïõëìW¯È‹  Ž“K§ÑhR‰§P‚À(…Bâp8ÒÊJò µJ%—ËëŒÊ”³LýŠ‹‹~òÉÅ_~‰ŒŒŒô¨_ÿþ¨¦;¶¼¼;uÒîvçŽùùùî}ûõ1lÇBÎ ¨¯Bm`Ftt§.]¬­%Á±L³—ššhmm­V«öìÙÓ¹sg„ÐÕ«W-Z”““£T*Û·o¿~ýúÈÈHc €…°ãóËKKEó**(°Óºä Ó›D–ˆÅœZgQIqvrJþ¼{DDFFÆ?÷î©T*+:ÝÅÅ…Ïçe½|™”œL„µµu»  íëK§Ó]]\®_¿Žêâáî~ûöm:æìì,Ò{Áw€Ÿ_Æ‹wþþ!Äçóy¶¶j•Êßß?++K'*Uc:]j¬[qqíÓÏϯ¬¤D{€ÖôF¤=[Ó킚;&…Báùš€½|ÙA(Dùøøh_©³,ÚÖžfㆠ7lhäÛj^eZÇ%‰Z­^±bEttô£GB!!!qqq... …bÛ¶mcÆŒ!Ÿx{mÛ·¿{ë–ƒ@ tv¶¼cxjµº /ïÞ­[aáášÂúÞ¦Z­<¼?Ȱg7óøa±X½{õÒ¼NNNtÃÇÛ;°m[*•Š"B©P0¬¬:uìÈ`00 CH­VWËdšÙë‹òõñ ¢Òh!.—@£Ñ‚ðööÖY:‹Åz§æY T*5Ðß?¤}{œJE©”Êj• §P¼kEÕ|Y¦± ™ššŠa˜¿¿NNΚ5kÞ:Ô(a´$È2-…B1bÄÖ­[É—ŽŽŽäA†‘›= I°Øì°ðð'”ˆÅ–wêœB¡ØÚÛ· c±ÙšÇ—Ÿ®çÑÏ …ÃáøØB÷ìÍFσôS«ÕÚ½¦+•J¥D‚’ËdòÿNI¨ÕURi}³×9!$¯®ÖÜ££=¬Ëu–®=L™§þ7¢vT¦¤¤äãéÓE"ÝÊêý¡C?ÿüscGÔì Ë´J¥òĉaaaš’ôôôÎ;———wéÒ%..Έ±`i†Çëaì8šYMŠùî€Æ  Э[·¤ÄDcGÑ¢ Ë´*•ŠÇãI¥R.—¯)÷õõ----**š4iÒ—_~©9Ì x4ÍØ!€€,Óà8^ZZ*‘HÆŽ»gÏžÕ«Wkåóù+V¬8p d™–‡¼° 0A–vÑzkÆf³·lÙ²eË–¢¢"QJ¥Ò4ûk€¥‚,Ó¢øøøDDD]¶^¸páÕ«W¡üüü+V 6ÌØÑ ,ÓÒ̘1cçÎ …"===""ÂÚÚ:$$ÄÏÏoË–-Æ @ý0Œ°¸þ šÙƒŠ±£úÀE]f/ @©Tj^Ž9räÈ‘¡E‹-Z´ÈxqhVZZÊb±ŒˆÙ¨”HL&.O7ap,0>;àEZš¤¢BóàoP‚ *Êʲ33Ù66—›2øh!iiiÃÃu‰ ñx<¹\þ*+K^] ‰¦~†1 6—Ëb³i8®}B˜È2°ñ}¶lÙ“Ç)8îééùÕ—_8° s»:ëûj! ÄBa—«P©µÁ‡zQqœÉdÒét¥BaìX@½ ËÀBÈåò‘£F-ûì³_/^¤P(?Ö<íÍ,ê „˜L&ÓØ1˜‘fJ1+åjk:\RØ`%`!róòD"ÑG“'Óh4Ç;uì8x°J¥:: ŸO¸¾úBeeeÓ>þØÅÍÍÙÕuæ¬Ydá¾}ûÛ¶u ßéÝûÅ‹:µÕÝÍ4Ia9mp, áêââââ2eÚ´&NìÜ©“@ ˽x±sxxA~>ùrzttµ\žœ˜ˆaØGS¦¬^³æ›•+B*•꯿þŠøPZY9jôèõ6|ñùç†Ôš5gB(%)‰Åb=zôˆ,ôöö¾}ë‡Ã™=gΧK—ž>uJ»¶… Ö4·sÇ×7*¥”õ¨˜}âóÞ-)##£g¯^y991--­[÷îb‘¨9¢zKp, A£Ñ®^¹Â··ÿlÙ2/Ÿwû÷¯óâÉS§¾[³†Íf[[[ºdÉ™3g4ccbbXL&ŸÏ_¶lÙÏ'NXEEÅÅ‹¿ûö[.—K¥R;wîLNÿÎ;ïØÙÙÑh´3fÜðÀð0 ¹EöëWûÏ%ìÿ½òê&®s–´´46—Û£gOM‰L&sqs³×úÉý6|||Þ ÅÔFFHž¹:9 <8--­Ib{cp,3SVR’—“S]]ÂÞÑÑÍÍM3ÊÓÃcë–-¡ÂÂ¥˖MŽþýÚ5íy ”Je§.]È—Aà8NcææêJ»»¹Ô^tõ‹D"‚ ܵ ýxðà¦Í› B:w€ê Cãñýû†¯ÐÄ0ŒF¥Ú ŽÎÎÐë5°TÚ/«äê~;â?ìÁ~™Xß,8Ž—–•%''·mÛ!táâE‡ìììfÕ`8Ž“g®äryLlìôèè¿®_7b;u ®ýFê ˜¦µµ\&“VU;šÅ/ñâ_Å”)B1g_vð`µkp.w77??¿ß®];zìØÈ#h4šfTí‹Ñ+**®ÆÅÅÆÄ0™L{{û%‹ÞüyópèФädQ—¯\YËd2ù|þ’%K4£T*•³««³««ÐÉéä©SÖ¯7|‰ÍΘ`VÂÊʪº®³ä\.÷?þXçL7lظaƒæå÷6|¯õRcÒ‡NúðÃú–¬§~›èždЉ‰‰!‡ÌŸòóóÓtÏb2ë ˜ ¨ý{ • ޼È*’½».aïߣ‹Î-lkà¼Lœxä§Ÿÿ÷|tí‹ÑE"BÈÅÅ…œÀµf A8Žóx<„“ÉTÔꔬÖUëJzíÉ[ˆd2Ù×+VÔîߣ…Á±L´.,:vû«_n«Ê^kžâÔ§-ÏÀyßÿý?þøƒÅb…„„h É‹ÑwlÛö:7÷ÒÅ‹ä3BÉßòòòÈirrs›$x²ÚœšÒ_Õug:ƒÁ?~ü?wï6Éßd™f/55Ã06›Íb±ÂÂÂî7òÎÜÔÔT*ih]œmé,oýŽcµRêÎfü°kë×K—tdÖy1:‡Ãé÷î»±+WÊd²âââï7mj’È9΀þýcbc«ªªŠŠŠ6lÜX{¹\~âÄ o/¯&YâƒôÂà8.‘HÔjõŠ+¢££5Ýb` ísÙ#f¤§WJ$äÁ0P' ÃXÖÖî.®®oÓÙ–•²gŠoGOÎóÂÆ]Ü!4T§Ds1ºƒƒÃôéÓÏœ=K–ïܱ#zÆ wW7·™ÑÑâãÑ[tÀ®AVëáééêæ6{æÌøøx²œ|ÒB£P:vì¸ï‡ÞxM²LËA¡PFŒ±uëV„X,ž9sf\\FûðÃׯ_O¥RSSSƒƒƒÉ‹ERSSCCCe2YïÞ½U*›ÍFݼy“¼k@Ë+).NMN usw×¾­èP«Õù¯_?¸{ð7ëlëV\Ü­šak„‚ì§Hëëü5îçç§é™¨öÅè!¡PxþÜ9rø×Ë—„BTOìšúµ¤]¿6@pVëaü19±¤¼\ÿ»haeZ¥Ryâĉ°°0„Д)SX,Öëׯ%É AƒV¯^½bÅŠ:çúã?‚ƒƒ%IË @WÚ³gí;vôðôDÁ‘L=0 ÅÉÅ¥kdäûwíù|ƒÑ¨Ù‡×LÕF^Õæï“³fÍš÷‡m±E›È2-J¥âñxR©”ËåÆÇÇ———_¼x1++‹Åb±X¬+V|òÉ'õe™LDEy¹“³3œ+7½}¥DR]]ÝØ,³%•””|<}ºH$¢[Y½?tèçŸnìˆZd™–ÇñÒÒR‰D2vìØ={öL™2!äîîNŽõôôÌÏÏ7j€FJEe†‚ajµZ¥R;}ºuë–”Xï#+-d™–ƒÍfoÙ²%44tÚ´i¡ììl2Ñ|ùò¥££#BˆN§«T*¹\N§ÓE5×yÀCŠ-€Z¥Êzþ<#=½¤¸!dkgçãëëéãC¡³ ‚ Š‹ŠÊJJdUU!“ickkÇç›B“3Í5¦Íô#ÍdKY¦Eñññ‰ˆˆ8zôè Aƒ–/_þÃ?TVV®\¹râĉ!777‡sæÌ™áÃ‡ïØ±ƒœÅÖÖV¥Råää¸ÂÓŠÍSUUÕkת ߀€®QQ¡Üìì„„„ôgÏ¢úöe0™Öóö÷¿¸¨ÈðÚ EbRÒ[·nݹ“ž‘¡9’'—ËŸ$$ܸuëîýû¹yyݼiHmš5¶ôxæŽky¢ …¨B±ãZÞÒã™Èà5fkk»`þüÉ“&­]¿ž,©”JçÍŸïîééâæ6{ÎÍO¸²²²iìâææìê:sÖ¬FEXçXý~ñå—_ùåðáéT*‹Éœ7wîÐ!CÖ­[W_0&ûp::>yòÄð@s#Þέ[·Þí×Oàà tt=fLZZYžššÊ`2íù|[;»ˆîÝ?~lÏçÛóùvööd9ù—ššjÍfXÛìÙ³5/mx*•*//ïyzúÄ ¾üê«ÆÎ.«ªb°Xõe0™äý@Jyö £Pz÷îU!‘¼ªypê³gt­OïÞ‘Ý»‹ŠŠaA5kì̃ÿdºäËF­±AþóÏ?äðÂ… ËÊË“ÓRSE"Ñê5kÈòYsæTÉd)IIÙYYÓ¦N5¤Ú7þLKKKã=>|¸váÈ#þøãú‚ùõâEòmA~¾ö™1½Åéã7nŒ3fftt^N΋ŒŒÈˆˆÞ}ú¼ÊÎ&Ï,ã8^TX(*(è5köì¢Â¢ÂÂ;·o[YY‘ÃE……Ú1è¯B¡\¸x±° àÿO[„¼ºzØðá£FŽÌÏË{›»sÇ[ÏXgÌí‚ii’Š ýÉ(¨ ˆŠ²²ìÌL¶ «þ¹!àî@æÏ›‡ãøûC‡îܵˈa(•J±XÜ+* Çñj™ÌÃÝ=ãùso/¯*©T\\üN¯^ ¥Z&swuM(+káØìììJJJB•RéÉS§’ÉŸ.Y2eêÔoV®¬¨¨¸xñbbB—ËEuîܹYã)..Æ0ŒÏçk ‚"±!ÔÂÁ€7ö6)ÑòÏ?_ñõ×ä/ &“9oÞ¼gééß®]»cÛ6²Z‚ (ʨ‘#÷îÝ«)Ñ^¨öKýµa6q„í;vÄÆÄhæÊÉɉDS>úˆ<Ö±cÇ·|GoƒÇãÉåòWYYòêjH4Ã0ƒÁærYl6 ǵ¯Êk,È20cö|þë¼jä‹Å¶¶¶¡Â‚¥RÙ©K²œ ÇB"‘ˆ w77+Ô‰°î…Ö¡AEEEÚ‰¦H$âÛÛ¿q0 å½q>TZZöôiíF1köl¢æ°AJ¥òÄÉ“þÿNöß,SóÒÚæÌž¹dÉÍ\......M™òÁtîÔI ¼Ù{i† …Â*.W¡Rj52>ÔÌÇ™L&NW6þ+à?õ4U@€–瘔”TçI´ädOoï–ÊŽÏ/‹ëË2õ_µ©ƒ¼q­ªªŠ¼Š_&“Ñét ÃÈr™LF~ʪ« ¬P³ÆÖkƒ:qW„. _6j]¾r¥k×®!>Ÿãø³”ÎOÙ;88`ö*'Ç­1Ý„½ñgÊãñ:„†ž={vúôéšÂÓgÎôêÕ«¾`L¡ïR ëM³L±XŒaßÞ^»Ÿ/‹É“Ë*•ÊÉÅ!Ô60pç¶mH+ËDÿÍ2A4XBÈÙÉ©¿~Я9J»reã÷ßöÙg™YYݺvݽk—·—×›½£&ÁdB×_oî-SL×e`ÖÜ<=é8~ã?j?‰>1>¾R"qõðÐ3»L‹ºénÆäÙÙÉ««ÿÿ/-E ¹œgg§gvµÇíííSSSÕ!W(2_¾trt$‚J¥ÚÛÙ¥¦¦¡P(²³³ ŒM³ÆÔréöIÞ…;ºîèº}’7‹N1d‘JKK·ïØñãÁƒŸ.^Œâp8#GŒX¶|yYYB(??ÿúõë!6›=dÈÏ¿ø¢¢¢B©T>xð Q¾Ágºê›ob¿ùæÜ¹sJ¥²ªªjûŽçùeéÒ¥õÃãñT*UnÍ¥®À¼ñÝÖäÁlQQ‘va¡HdooOã8ž—““—“sí·ß‚‚ƒµoÓÖ¹kÛÚÈÉ.X°sçN¹B¡©ÄÃÃcë–-OŸÕ«—ævìúnÓ®ýÒÀÚüýýƒ‚ƒOœ™÷-ù€!*%‹õ–O1Õà ^˜hÍfoÀ€_ýµvÉùóçë{$”ŸŸ¤˜æKàèOæͨyŠ1‡Ç³þï-ÿ ¹a 1ŒýqÀT³7yòä/¾ø"66V³½>|xâĉpÂ" ª««áɼ YaÆ`2¹<ËÚšÅd6aý@?r7‡3 ¤V«a]™8HDÌÞ°aÃfΜyóæÍž={"„JJJ.^¼x÷î]rìbbbJKKÇ¿mÛ6:®}&}×®]ß}÷]QQQ»víŽ9âããƒÚ±cÇwß}W\\Ìãñ>ýôÓ… ñ݆¹¹»K$’ª&}Z:¨T*‹Å²f± ™µ$k6[,;…ÆÄ<”ˆÅ.—ìI˜&È2Í“É3fÌ¡C‡È,óĉ!!!©©©*•ê?þHMM­¬¬ÿܹs;w¾wïÞ™3gÈr ÃÜkaìáᑟŸ¯3ã?ü°nݺ‚‚„B¡@ñx¼3gÎlÚ´iáÂ…!!!k×®íÖ­[ ¾hÕ<<<„ByuµJ¥2v,& Çqº•dš6È2-ĤI“:ôìÙ³þýû k®é!";;›L4³³³…ÿ½ÖG,Ïš5ëÚµkQQQ<èÑ£Y>hРAƒÉåò-[¶Œ?>++«eß ´jL’'`ಠ1iÒ¤k×®ýðÃÚ§ËB_~ù¥T*-**úæ›o&L˜ =J.—«T*;;;¹\¾mÛ6²077÷Ê•+ÕÕÕ4ÍÚÚ. 2&è€Ë݃Ör áééQYY9tèPM!Žã½zõ ðòò þòË/µgqrrZ¶lY·nÝÛ·oOªTª•+W 6›ýã?>|¸EßÐBvÀnì(M¦R"a0™ÐÍh= ­[Žëׯk¿  »+š:ujå¡o¿ýöÛo¿%‡—,Y‚rww¿sçN D d'¼HKóôö¶f³áøf Iyù«—/mììX,‚ÎnAëY&&ŠÇãÉårè€ €aƒÁ`s¹,6›†ãõ=› Y&& Ã0¡PXÅå*T*B­Fp8sFÅq&“I§Ó• …±c …@– €Ic2™LcÇh*b‚VîþM²LÐô ËM²LÐô ËÀ¢–™™ÙT¶ïÐ!!!¡©jÐz@– €¹:üÓO=¢¢Ü<==½½üúõk„†aããÛ´iÓ$‹(---,,ô÷÷7dÑ€früçŸÝÛ´qoÓÆÙÍÍÁɉöòõ•ËåÆí_íBCáç(¨ z2À,í?pà‡ýû÷ìÚÕ¾]»ŠŠŠËW®ðx¼&_JJjª·—NoÖE«T*Çß.R,Ù¸±cNjڰqãã'OŽ:d”0êÛTÅÅÅ"‘¨öÏÑ7¨ X8– €Y:züøÔ> ißÃ0.—;v̲cÍ#G~8y2BH­V¯\µÊ/ 8$äÌÙ³N®®äSÑÿwèи –.[æß¶mPûö×ÿú‹¬°¨¨hÜ„ þ.îîcÆ+)-E%%%µ 4pÑAlݾ=4,ÌÍÓs⇒‹[óí·_|ù%9c^^ž›§§Z­&ã9zô‚O>ñõ÷ßµ{7Bèð‘#‘‘îmÚ„†…ݺ}›œe÷Þ½;wvõðxĈÂÂÂf_­˜¶„ÄÄà  ÍËÚÈ‘£GG»déR_ÿ.ݺ=KKÛóÃ:vôòõ=ÿË/ä\§NŸ:|øgË—ûúû]¾rE…Ú›jíEfffûÐPµZíãïïëï¯T* ßêa·xe`–ly¼ÃGŽœÿåqq±vyRRù%´nýúÇß¹uëö»÷ìäÇĤ¤2äYròG“&mÙ¶œQ"‘Ì›;7911ñéÓòòòD%§¤´ÕúJÓ¿èUkÖ\ûý÷«—/g<{†aØ·k×"„ž&&ÕÔ””àïO¡PÈá¾?thú³gÑÑÑ;wíÚàÀdgfžüùg„Ц-[Nž:uîìÙm<ŸoccÓ·OÍ!ÉäääóæEvïŽòóóÓTèééÙ="Çq[¯WT”T*%'®},³ÎEçççïÛ¿ÿÞ½B¡ÐÊÊêý¡CŸ>}ŠJÔú¾ILNjÛVçÜÙ³{¿óB¨¢¼|݆ öíó÷óCùúúº¹º}¿iÓÞ]»Ü\]é4ÚĉŸˆ˜½aÆ͜9óæÍ›={öD•””\¼xñîÝ»©©©ÁÁÁJ¥’ؾ}û×_meeuìØ±ÈÈHcG ö:'‡/z´i£T(t¾l¶lÝÙ!4T¡Pœ>sæÏë×/]¸€JHHhŒa˜Ïê5k^¼xáì웚šJž´"Ïd‘×H!„ž<}º|ùr„PJJŠ““S@@@yyùgË–‰D¢€€€«qqmkNu5¸è°V­^™™éêêºeëÖìW¯>üðÃ÷ïWI¥J¥Çñ11EEEäiµ„„í0‚Ú¶ýfÕª„„„víÚefe)är??¿vÁÁëÖ¯òäIHHˆ´ªêöíÛ}ûôÑþ!^gÎ €Ébs8^>>/³²8™„éгɓž>}ªIæêÜ@´·,òôzP͉섄ò'eRRŽã?Ÿ8ñÉÂ…7oÞܱsç¯/R!ªgGQ%“UUUin'­6ð–Ô`Ûk>p]¦Ùc2™cÆŒ9Tӱʼn'BBB´§Q©T999¯_¿ž>>sçÌiÖ¥¤§í5ƒÉüåäÉ~ƒkþ~ùò˜É“5ùäï—/ýè#8–i "##ù|þ¹sçž?~ïÞ½ &èL€ã¸­­-BˆÉdšÎ³"@óyŸŸŸº}ûvLlì’E‹Œ †QÚ%&%5ªût`Qàîðf&MštèСgÏžõïß_(;`d<úÍ7J…ÂÃÓóû ¢¢¢ŒÀ$$''kwa@³‚,ÓBLš4iÕªUOŸ>Ý´i“±cÆmì(&'/'ÇØ!€VΘ[OOψˆˆÊÊÊ¡C‡;8–iA®_¿®ý2 @©TjÃ2èͲLhU‹÷Ì ÞlÅ€¶ôk¾¶÷fL+0} …ÂØ!˜.fì,´== í™ È20oÒ J³ÅR¹’ c‡c90 cÑ©®vl_!§ÔêþÃÊJJž%%•×ׇ¶ù¢P(<;;ÿ  [[D¡?¯]SÖsB¡p8œ6ÞÞQùùiÏžI**,¾ebfÍf·ñòrusköÞÅ¡íiM m¯EÛ^ãA– €yûûùë¿^\zš•S!WYøî´Eárãл÷lïÝÝ×Yg¬T"yúð¡oPP`‡&¸gKjµºT,Ž¿{7<2’emR*•c&N¬oâ‚‚ÿüC¥Rmíì4åÅbqRbbpHˆ›»»ÅdR«Õù¯_?¼{!äæîެ˂¶§=1´½–l{o²LÌØ Qùãç¹'>ÿl@È ðv,†•±#²2¹âꃔUî3è¸í%øÏ3’Ÿ> qruåp8–÷MBmÚ¸¸¸<ºw¯S·ndA}?a0 EèäÔ¥{÷G÷ïwéÚUSž’œÜ>,ÌÃÓSϼ£Pœ\\Â##ãïÝ88X³ÙÍ·,h{ÐöP˶½7Y&fìEaÙ‰{i+†t‚ZÁþ´%YÑiC#Ú³´ï~¹à樓eù‡„Xì×_ÿ,–D.—#„ètº±i] í!³m{e`ö,oÚ’ÌtßÝòÈf6iÒ¤Õ«VuîÔ !´zÕªI“&ýzé’žyZ,¼ R©úô郺þçŸ8Ž;œVÚžù¶=È20–µ?mI*•jð{ýB—¯þf^ûn# „БC‡ìììÈá^QQíÛµÓÓü,©]ªTª©S§²9„Д©S8 ¦å@Û3Û¶G1v€·E4æ/##£»k£f±Ô?¥J5sÆt6›ÃfsfΘ®T©êœÌd½~ýzРA|>ŸÁ`Ô9L&›2e Ç …«V­j°\?‚ ‚°µµ%´h¿¬oC† ‰]¹R»ä— Ü=< EÓ›µZ={ΜB‘èÔÉ“§Nž,‰fÏ™£V«kOùŸ£)[¼xq@@‹ÅâóùS¦L)))!ËÙZèt:—ËÕ™Ñ4Û^jj*ƒÉ´çóÞ>>“?ú(99¹©ÉíÛ·$ íùüî‘‘Ço’jͽíA– €Ù«sß4zäðoW¯Ò.ùõÒÅ@?wç/_5ÉîϬ©ÕêOÌ/9vìȱcE¢¢OÌ7£}7BˆB¡ :tÏž=õMðå—_æææ¾zõ*>>þðáÃÇŽÓ_®_ƒY{]óµÿ>˜8ñرc„Z­)9zôè¸qã¨8^çôFÿ#ÔêÅ‹§§§Ÿ:q‚É`0ŒS'N¤§§/^¼Xû]üûgY8Ή'*++ÓÒÒd2Ù¤I“Èr‰–ž={N˜0AgFÓl{!Ç‹ óóïß½òÎ;ï$''¿}#¹~ýú¨Ñ£?š4)ûåËÂüüï¾ýö÷߇¶‡ ËÀÔµ{7nüÉ?kï‰N?>jÔh“ý.oÉ?B­þü³¥Ï3Ò=ưb0¬GŽ{ž‘þùgKÍeß …3fÌ ªo‚ƒÆÆÆr8—Å‹8p@y\±uÌQ‡Áƒ‹Å·nß&_–””\¾|yâøñÍõ{â­UVVÊŠ3§N1™L²„Édž9uJ®PTVVêLüFŸ¤éЉ‰iß¾=†avvvK—.½qã†Î/^¼øã?¢££uÊM³í‘9ÀãñÌŸ?yòäï¾ûŽ,‘H$³çÎuqsstvž9kVUUY^XX8tØ0¾ƒCHhè?üÀ³³«]íòÏ?ÿ&6vÔ¨Q4 ðî{vï~ˆGXDÛƒ,³Wçû÷ .).þûï¿É—%¥¥qqWÇŒŸ–žæ(°'"þx ÀÏ'$¸í?ÿücôSØ-ö'­ªR(??Á`2É“ùÓñ …BZUÕðasðúõk±XJ¾ MLLÔSÞ ¿ œ…Á`Œ1â§Ÿ~"_ž:}ÚÏÏ/88ø-¾‹›‹ÅÚºy3‡ÃÑ.äp8[7of±X:7ѧgŠâââ:tè S¸oß¾°°°°°0íB“m{H+Ë$ 8ðïþ!‡ç/\X^V–’””öìYaaá7«þ=4cæL{{û—™™×~ûíç'jW^ZZúøñã¡C‡6gcY@Ûƒ,³WçîÉÊÊjè°á??F¾<öŒ¯¯oÛ  r_Dî”T*UnnnBrê˜qãcW|Õä»H“Åd2×mü¾ö¾{ÝÆï5Ç 4Œýñ¾!‰D‚a“É$_²Ù슊 =å jp­Ö9OL˜pöÜ9YU"ˆ£GNœ0Á臷›ìÏB]¾|yíÚµ[·nÕ.T*•?þøc홦ÜötFÙÙÚ––” ‚¨¬¬ŸOÔüî×Ðn *++?]¼¨ö¾ûÓÅ‹ÌeßM’Édd¯ò2™L&“éŒSùŸ—õÌR矻›[x—.•RéÀŒQ„Þ? ¡õß}çãã3vܸªªªªªª±ãÆùøø¬ÿî;¬ö{´,óçϯ¨¨èÝ»7Ù5&_뉎û÷ï éÔ©“¦Ä ÚB*•ÊÑÙÙÙÕµk·n>üíêÕ À@rìö-[VVa:9¹¸ }ú@ÛCðì,Aýû7W·N;'%%õï?àßÉ4ÿu^ê­ÇÂ`­Z½fñ¢…“?˜xèÈO¡ÉLôööZµzÍ¿ûn3Q; öóó+--%‡ ÆÁƒ<¨3M}å†,ë£iÓ/\سgO„Ð76nÞ|þÌÃÃÓvéÂC&3[6mŠž9sìøñ!>Ÿ¿¥æ˜–±ãj^zÞ`lllll¬v‰é·=_Ÿ²ââú¦d0ë×­[¿nÎ(àì©SdÉå+W„Ba•wëÚõüÙ³ Æð̺íA– €ÙÓ¿»9}æœödÞ>>¯r_¡ ³²sÌe·ÕTÖ­ß8oîœÉ~€²çó׭߈Ìgßm,û÷î5vì†uëB_ÇÆžúùgcGÔBpß»{w¿BgNž4£GüY cµ½ÔgÏ0 ó÷óËÍÍývíÚ¡ƒ·Ìr5̺íA– h¥pß¶}ÇûC!„~:vܼöÝ-B¡ „ŽýôSŸ¾}B¿_»æàà gŒbQeQ)”+—/#„¨4š±ci]ŒÛöJËʦGG‹D"++«¡C†|þùç-ß°Í·íA– €Ù³°ïò–D¥PÎýr™á¾»åi𙫫ë/çÏ“úg¡X\ˬï‘ñ Y·íuˆH6¬÷øfe¦m²LÌžå}—·$+óÜw·<ífhÈ,†5[8 ¶g¾ ËÀüÁþ´ÅQ(µZmì(š—Z­Öþv×ÿµ­3±fúVõˆ\ ͽ5BÛÓ?1‚¶gJ ËÀŒa†cH¡R[QášÂfQ­TáXi¼Ÿ_^s;­¥**(°Óê¹Fÿ…%b1‡ËÕ.as8b±ØA(l®øLO‰X̵±iîäÚžh{¨¥ÚÞ€,3Æ¢S=l¬n%½èÛÁߨ±X¦;Éž6V]§¼mûöwoÝr„ÎÎ&¸gKjµº /ïÞ­[aáášÂúÞ¦Z­<¼?è¿Ïqñõó{xï^§.]B¡å­"äJˆ¿ß×ß¿¹¯Ÿƒ¶§=1´½–l{o²L̘§€;ª“÷×gïV+Tý:XÑ`‹n2Õ eÜÃÔÕL ÷õs¶×Ëb³ÃÂß©yAÛ3´=Y&fŒ‚aÝ}¸¬Nþîe•U*•…ÿjoI†Ø º—ƒm°»îÕ]4èöÈ`šG_‚&mÏpÐöLd™˜7 C~Ž‚ *Êʲ33Ù66,«Îi`“ÍÁ¶×|à LÇ“Ë寲²äÕÕð­€YÃ0ŒÁ`°¹\›MÃq¥RY{ØäAs0¤í5È20Q† …Â*.W¡Rj5ÅDp]&FG¡P,þé,†Z­6ðÑe`d6¶¶%b±±£ R"ÛØÚ2%œ1ÀÈüÛ¶}tÿ~û°0¾ƒƒ¿€–§V«‹ ŸÆÇ· 3dzÈ202®M`»v©IIå·oés&‹B¡py¼¶íÚqml ™²LŒÏžÏ·çóДàôhze€¦Y&hze€¦Y&hze€¦=LÂõÄç{¯ÞMÏ)T–ßi( §ø¹¦÷ïìmìX ¹@– 0¾øç9›Ïݘ5¼oODiû%µ2+ë忳׏L«0oWcGÍ¢ìÍ0yb‘(;3³²¢‚ cÇÒÒ0 cs8»îd,ûž³›»±Ãi)8ÕËÛ{ÑXÚ® ÌŽði==ùq»µiƒjµmÁzÐZö±cͲLŒ¬¬¤äEZš«‡Nomß4! Ãrù«¢.ÎNÌØÑ´,g§WE¥ŽÎέç£'?„aîmÚ´ž7®Ö¹^¤¥Q©T[[c‡š d™YVF†›§'Ç[çCÌ ‚À©Tè4š±cii Ç0œJm==ùqsmm%åå­êë€õ@®7OϬŒŒÎh.e`dååN®®DëûšÑÆÀ1¼•È$1p¬~ô.W\XØ ß¸X¯(/7v A– €‘¡jÅ_3$+*¥µ.'YQ)êVvª!„S©A´Â7®ÖR©ZÛ¥­ d™_k>˜A¢ã ji&§´ÚO¿Õ¾q°Àÿ±wæqQUýã?³°Ì08*$‰Fó ÒÙX‚$Ì 1qã ŵl³K5+,7èQKdµ0AEC ÷°R P -´\¾ÈhË°Ž³Üßçi¾ó»÷ÎpYdÑÏûÅË×½çžóYϽsH2teA i…+[hÛ}Þ1¿rõjÒÖ­WÿÍf»<ñIJ˜˜žtq9uôh—a97nÞ ‹Œ<ö,B¨›Š,Ð)~üùçÔŒŒëüÁæpþG,Ž ÷ 7nÞ ˆ˜=sfB|<¶<"*êÜ©S¦.`Œ‡h…÷æIdJ§â`ÎY|”6>T!´ÝɜƇ”}à1æ2 ïéæd@IYÙ{ï¿?súôc‡Ÿ:vìíåËÏ_¸Ð#Ó ´ôˆÍ$𗌺óÇb±æ†½œ±k'ÞEè¿åím­¼÷¶ÂÃMú?#ãßyCû ÍB/‡ÌÔëõÏŽþì¨áU—/+g+ÝžøïlåW點WŒöù„¯Ì##e©í•Ë—º;—ÉewœZíÛqqS&O>YPp² `ÕÊ•|>¿û1·œÇ‡‘e’üÎ69[\üá'Ÿ¼²hщ‚‚¢#Gb/.+/Ç¢Ølö™~PÕÕ&–S]°àT/ŸD¦&u¶>­³„ùøxHÝ©Ë<ä‹+ÐÇÀ(úC÷ø÷_¼¾dIàĉ6!$—Jÿõþûƒ¡¾¡áýÕ«'M™>=iëV­Vk0þ¼qãùñã:ô3‚CBÊ/^ÄBr yqÊ”—æÌÙ““ƒ i%çÀ Ckkk↠S¦OŸF™Ð÷C—ÿX,–€Ï'•777Ÿûé§åK–ØXY ‚W.gβ7ß¼}û¶i"ðÆüÐPBþº~XÞ¾þǤš¤VxÃÇÓS`oÏa³ÿ9{ö¯UUæštªSYþël·olh`±XüAƒðî̹s_ziÊôéFiCö÷õ=”ŸOë e½æN" ‘Ymceå ¼Yxüx׺}â`ÎYËñaÞhý2fÿì?¼õÚk<;;6‹5ÚÃ艋Àÿ¾} ¼ý}Ow–˜³··'¢¡±Q ˜–×ÕÕ!„†Š…;99©êê a 6›=ÈÞÞ@VVVZ­Ö@¼Aƒ×­Ë=pàóíÛÅO?ýÚ’%’Ñ£-HÀ6ÿ¥RéõúˆÅ‹±F‚ ØN×|±ávksãüâh1c$ìg!Äa¡aC‡p8œK—«ø|¾i}.‹…Ì¿ýcZ4ujÐÔ©<øÏÎK_}¥âÒeÓ¶ÝdžËb1'gç¸+Bõõõÿþâ‹>ýtç¶mÆD˜æ”ÍáXYYÙÙÙáíZ­iÊLÿ5Ý=üÝwÙ99uõõ!Ng®I§:U‡Nuª«ØóùA4¨Õ>!t0'çæ­[QK–˜šöÞûïûx{ÿW8‹…þÿõuz=‡ýß%=§OÇ…Ç¿ûÎÜId.2,Ë„aÆá 0÷¥;q0笅øœEæ»­_¦Ù'6l˜©Á=xI`” }OwþCo?hÐ3ÿó?§ÏžñÒK¦åB„R©t6 oˆ ƒáû_X£ÉöX_ß±¾¾:n_^Þ‡Ÿ|²ïë¯;” Ølö={x<^7}éæWÙñM,áíwÞ 9 ï:øsBBV'¬úø“Oî*•WûmüøñŽŽB½^¯¬½3|øpÜV«iÿ?qn^[{§êת€qãl¬­í b³Ùl2mÛu‹ÿƦ“+L æÏ›÷æ{ïý©4“Sã6—Ã1 Ú¸\nC}=©•Z­ÞôùçŸoܨÉ~ûý÷×W¬0'³³Ê2rœ?hÐS£FýôóÏÿ˜<ùïöd÷GŽñ´›[щx×ÑÁ@HY[ëää„[ܹsG$a½E‡Í0w™‹ Aÿ„»wã t•ε5㬥øüÿΚ #u'z¿L²Ï2Éþ%ôÜEx$;æÐ÷à ƒ.ÿ½³3-íÄéÓ´Z½Ápé×_×oÚdkg7ÖÏogZZ[{{]CCÆW_Nžl:3aº}ﯿ~¾pAóà‹Í¶±µe±X‚èP‚­Ý¤ ¶îØ¡njÂS›%¿üÒ5ºù\&ÛäYÉÿ±Ï<óŒq÷‹mÛìlmžóñ~Òexpðô߯^á°ó°¡K–,yÞÏw¤ëˆË—+õz½³³“ñï§Ÿ~ÄÍ‘Á°qãñÓn.ßÈÎþzWJ ©í¯—+»ÿ\f‡ÁQÕÕ}µw¯òî]A¨›šò~æ™gH©¤æÔt{È!<;»Ó?ü yðà@~>©•F«5 ööö´Ú}‡áB{{{ƒÁp÷¯¿HgÞ©,ÿu¡Û¿µ}çΟ.\Ðéõzƒá÷kרî‡Ï›wðða¼kÇãùûùmOI©oh0DMmmúîÝÿøÛ`&'md°º”ŒŒ¶ööú††Ì¯¿œ8±Ë'oâ@ë¬åø0ïN´~³?. `ûþÓÜÒ¢Õé~½rÅÐ^¹Ä}Ìe@ßÓÍÿú{ÊdŸ¬Y“•½)9Ù@£\]CCBƒ!~ÅŠ¤­[gÏ›Çår'MZfú”•é¿z.óë¯×~ò‰Á`9rdB\>Ô¡„¸·ßÞ™šºà•WÚ5š!ƒÏž9ÓK.ï‚ Ö6›ÕõÉLw÷Æúzãî©'ŒÛƒx¼¤-[’¶l!5IÚ¼9ióf¼=oî\Òјèh„ëˆ'§ª3mÛM¬ÌeZq¹×®]Ë;t¨©©ÉÚÚÚS.ÿà½÷HOõ!JNMÿå°Ùo,[¶eëÖ©©óBB~8wδÕ`¡pþ¼y¯¿ý¶££ãìààSg΃ƒ@0gæÌE¯¾ŠX¬÷ÞzË(y§êÐ÷Îvûžž½bEÆW_­ýä6›ýôSO­ùà’véèÑ®O>Y}ý:Þ}?6vç®]‹bbÚ5Ÿ4eJdx8­^Ú“ˆ62„ÁÀf³Ré‚W^innž8~¼9™ éT[ Κ‹I‚…îDëé|OÞ¾}îüù,6{œ¿¿Ç3Ï ž»$,„Aª{÷ð¾²¶ö׊ŠÉÓ¦áÝïòò.[ÖgÖ=ŠìÞ¹ÓšÇ ˆÀg¯¿×g²Íf³9\.‡ËÍËÉ™D•IéWt?¡??î(õ¾åýŠ;553CCûÚŠ> ß¾á..}mEP¯R Ðnëöí¨¥KO~ÿ}Hë?qèY¿˜S¯R ìe¥ÀÃàDAÁ¼E‹ŒãÉaQQpÇèy`”ÙÇ475]½|¹¥© !ÔÒÜ\}õjKss_tH(``” Lq1¢÷o+÷ª_@ßoÿô1ö|¾‡D‚ãdoÿ?xÕ/`€  üþ=Œ2ûxŒï e=<—ÙÇÀc|]H¨N¯¿SSÓ;æýÇ6ûm«ã$ …GŽôµ SØl¶ÀÁáiwwÑ!LêÃ(ú­Vûx~@Aê@ †ûýu©¬Læå%ppè°>Œ2û˜æ¦¦Ûþé2boР–ææš[·žtu…}mÐEºœÐÙÙ½`ÐB0¾•:10°ª²ò¹±c;¬ £Lè/À¡@Ÿ°{çN„PHX˜A¯7 z½Þ`0ôúÿnéõ,6›Ãáp8œcßï(5Ö×3 £Ì>žË|Ä€„6l6Û`00ªù°M€9A(•Ê!C†àmË•—,Y²k×®î+År$Éft[À²¬Ëè# •J5qâD&Zºé{ss󯻿lîÐ’œó8w ¥Réììl.Ë=‹åÕ}ÉýANòÕ©žÙ'vJs -÷srºÖ,´ŠŠŠrww7nêõ\tH/_µ`” ý­V»xñâââb„PNNN\\œ…Ê÷îÝ;vìØÂ… »©Ô('11ñøñãÝ”†² §C›E"Ñ©S§:TÑ}ßI×Ys6whÏe2Œsÿ§§Î‚‡'¹Gät!_Ì{f_YÈ\N¿Êòòò®\¹òÃ? ^ÏE‡têªED‡ó–Q&ô¬¬¬RSS³²²T*UiiéæÍ›-TÞ¶m[LLŒñÿÓx ]½zµ»»»\.7 ÁÕÖ­[çíííîî^WWG’C«åüùór¹\*•N˜0áÎ;¡7nJ¥R…BqòäI„PRR’\.—Ëå~~~%%%LlFéõúÈÈH¹\€%'&&šN(*•J‘H´téR—””srÊÊÊ$‰——ײeËðüµUuuõøñã¥R©¯¯oUUUBBB```CCƒB¡P(*•ŠÖZ’=Ô¨2”CâСC!!!xûĉS¦LaÒŠê)m’…J¥ÒÑÑÑrœ]NIc¢ !TZZ*“ɼ¼¼Ö¬YƒK¨Yfµ×™Ã´'AÊ;IŽR©´··÷õõ;wî³Ï>oÁSÓó‹ÚŠäûÈ‘#m/^üí·ßRåPsA=+©¾¿úꫤ|Qm&e¶gRóE!µ=¤E{բʡZHõ‚ª‹Ú˜äÂ\+S¨Ú©­Þÿý€€€ÖÖV//¯qãÆÑæ¢Ã«1­…æ2h õj̤o˜ƒ ˆ«ÕÕ×nÞ´P‡AÜ¿{ÿ]®¨ÈÉÌ4îfíØA=JÖŽßdeét:íƒÚÛÛÛÚÚZZZšššÕ uuM ­ÍÍšööo²²Œ‰0ýƒ¤ô+ºŸÐ=iiÍjuÖŽ<ˆŠŠÊÍ͉D{÷î‹‹3§´¥¥eĈ*•Š ˆÚÚZ‘H„7œœœ‚hll´³³koo'×ÁG9ÎîÝ» ‚hkkÓh4$9¦¢Œxxx±iÓ¦ˆˆ‚ üýýSRR‚Ðh47oÞ$¢¦¦W>s挷·7­ªÍ!,9))iÁ‚Tp+W®K$Z9AÈd²‚‚‚ ’““œœh[ùùùqìØ±ÀÀ@Z im6-4Uj+Ë´··;;;755“––ư!ÉSjª…¦qNNNŽŒŒ¤5›šSjÄ:ÔEĘ1cŠŠŠ‚Ø´i“1Ô,wµ×ÑBíQ¤¼“äÔÖÖÚÚÚVUU 4èÊ•+îîîæ<%I&µ¢ú>oÞ¼¢¢¢†††ªª*‚ F}ïÞ=Z I¹ ž•´¾“òEµ™šARÚ|M¯GQ¯Z´rHÒzAÒÅäºAõÂ\+SÌEƒÚŠäíÕÆòÕ˜j¡¹ ’ ^;ìF²vìÈüÏÔ *UÝ_Ý«­ýñܹsçÎýôÓOΟÿó÷ßo^¿þ¿7nÔÞ¾ùŸÿ4«Õ{ÒÒH¿e9™™„Éx2'3Á\&ô¬¬¬ÒÓÓñ£OmůÆ$ iµ“,¤½3Ë1-ùãÆ ­VëéåÕT_Ïb±ž|â‰ö¶6UCC§|ÄÀ(yyy …ÂÍÍ ï …Â–––ÖÖVãSeíííAAA«V­ºzõ*C9XTkk«Z­Æ»®®®EEE¸òرcù|¾··wzz:BH§ÓÕÔÔhµZN7jÔ(„PFF­Z]­­­Xr~~~@@@×|b±øèÑ£!ã“p$ø|¾§§gVVBH¯×ã_e×ÒÒ¢ÑhÌùN…6ªT9TFŒQQQQQQa|kòäÉååå»ví gØŠ‰§´šÆÙßߟ6>¤œÒFŒdU—@ pssÃÆåååQµ›Ë2I2µ×Ѷ¢ö(LäÐzÚ¡dªïžžž•••AÌœ9sýúõ8Ζû?77!¤P(t:~,],oß¾‰Íééé‹-Zµj•ŸŸ—KAËÎÎŽŽŽNJJ"bÑ¢Ežžž **J¡PˆD¢üüüÁƒSm&Ù“’’B*U޹h›Âápf̘‘™™‰wÒ¡§´y7ÆÙÞÞž6Îû÷ï'åÔÅÅ…1&ºÒÒÒ¢££9Ž——I»1ËL ö:*ÔžÐ59TO;”LõË庸¸øúúN˜0áúõëøL´Ðç¹`n³éL0ÕfjI=!DÍW‡gÓCíQ¤«­’…´öt3†Õ®å‚Ãë*&W‰-d¢ÝÞÞžz5î°oPíáp8OÙÒÔd:AËf±†8:jÚÚ:¼íCoÿô"ðöÏ#F¾ýÃDÝ™3gÆ×}³{JNoꢕƒ_£!bß¾}Ó¦Më¾–~K<íÂËI‚‡×{^_íN..\¸0zôèî[eJ×ΦÞìQý3ƒ~b!é퟿”Ê»wîÔÞ¾]sãÆ­?þ¸Q]ݵ·`./¾øâÙ³gûœÞÔE+§  `Íš5\.×ÁÁßzTy|<í‡×{ûÛùUZZúꫯÖ×ׯ_¿¾ûÒLéÿgSËÅãÿ[Ø`” À&44444´¯­è ºà©ñM2 ÏéZ.|||L˜{ØtØÇÕÿ½ès U÷ï_­ªj¨¯×ëõ!6‡ãàà0ÊÍM$uVŒ2DÄ/¥¥5·o‹†õñÅ!C‡Ãý¿þúý·ß.þò‹óðá©´Sa”  ÊŠŠ»µµS§O…„Á`0ƒa˜³óÐaÃúgF1 IDATZZZNŸ8ñ{gÞ¯Gð%#èWa\{øû³P%Pò˜”@ßRsûö”—^::RñùüÉS§*kk;%F™Ð_Ðjµ‹/...FåääÄÅÅA ”@ÉãSÒc—è*CÌ,âóùCœ:-”€/õ"ð%£GŒžý’‘V« FÅÆÆbùP%Pòø”@_¿dtó?,ÿ–ÝøãXÇ$Z­6&&fáÂ…"‘ÈÇÇ'>>J JŸ’¾¾;6¶¶ÎÇ[®3ÌÉÉÆüBêô0—Ù‹À\æ#FÏÎe ã÷x ”@ ”s挷·7C ÇŒSTTDĦM›°=Ô8㜔”´`ÁƒÁ ‹¯_¿NÄ믿¾mÛ6&ž2÷ËrØ©…vvvíííA¨T* ­€þÃóz‡‡´Ž9·/‡·˜`ee•žž~÷î]„PXXؼyóh«edd”••®\¹òÇŒåñxS¦LAÍš5kÛ¶mÔ&MMM¥¥¥gÏžEY[[»ººâ’åË—#„ ‡Ãé)/˜HV«Õ×®] Â6öÙg´­‡‡Gmmíýû÷-H¶¶¶Žˆˆ@ÙÚÚ"„ÊËËCCCÕj5AuuuL,T«Õþùg`` B($$Äܬ’1γgÏÞ¶m‹ÅŠŽŽÎÌÌLHH8tèPbb"O™ûÕYìííÅbqLLÌÔ©SçÌ™Ó5!@¯Áð|€ Œ2 Áb±œñàƒÅb™«æííííí=cÆŒàààØØXÓCãwØlvYYY÷Ç—T;»&™ÔJ©TZYYaùF§h%óx<6û¿ÿh4šðððÓ§O{yyUWWßX²¬K­V[ˆ6-¸~TTT@@À˜1c&Mš$ ¶eè­F °Ùì’’’S§N¥¦¦îÝ»÷ðáà íú †ç; \à¹L`âÊÊÊáÇ#„Z[[‹ŠŠBùùùþþþÔ&|>ßÛÛ;==!¤Óéjjjø|¾§§gVVBH¯×———wÙ¡PØÚÚªV«º:”,ÄbñÑ£GBß~û-ÃVLêhµZN7jÔ(„PFF.äñx---Æœ@àææ†WÍËË3ç©iœBÎÎÎ2™ì½÷Þ‹ŽŽ¦mBõ”¡_$›%ÎTÚÛÛƒ‚‚V­ZuõêUZßzeÀ#99ÙÝÝ}̘1ÿþ÷¿¿üòK„P(ÌÈÈËå¹¹¹6l@) ãksçÎEíÙ³'''G*•úøøà!HvvvVV–D"‘ÉdxðĪd›øøx™Læããƒë0‘œžžëååõÛo¿q¹\†­:¬coo¿víZOOO___,!$¢¢¢ E@@¾‡N•“––öÎ;ïxzz^¹rÅœïÆ8ïÛ·ïÓO?Å…‘‘‘666ãÇ7׊ê)¿¨6SãLÊEkkkpp°\._¸p!î´rz ¸cŒ‚‚Ó]¥RÉápöìÙcZXQQAj5jÔ(Ò§pÄbñ™3g:Tg¼£gN2BèÃ?üðÃ;%ÙÝÝýòåË¡ýû÷ß¼y“¶Ö‹ßË6'™dBhåÊ•+W®ÄÛ}ôÞØ±c‡iªœçž{îÒ¥K vvv®¯¯§–ÿøãÑÑÑnw’<5lÙ/ªÍˆgj..\¸@5€* w€Q&}@AAÁš5k¸\®ƒƒ¾•?àhkkó÷÷çñxßÿ½…j€§]F™0°¡Næ BCCCCCûÚŠnaggÇäyÖGÀS€®Ïe=Œ2€žF™Ð /™ˆ:óåKZT*Õĉ{È.”J%~Åòj“=NúmÎøÜÜÜÑ£GK$??¿ÊÊJ\˜––æáá!‘H íêá´­nܸ1vìX‰D2{öìÖÖVÚ’ÀÀ@¼ä3Ï<ãèèH•Üå8?~\¡PH¥R™L–ŸŸ¯T*¹\®§§§L&Û´i–Ìår±vŸÓ§OwA Ð5zð|€þ Œ2 ¿ Õj/^\\\ŒÊÉɉ‹‹ëŽ4‘HD;èô”_ßÿ}[[›¹£O?ýôO?ýtùò常¸%K– „ZZZÞxã“'O^¾|yË–-¯¿þ:“V¡+V,Y²äòåË£FJJJ¢-9~üxEEEEEÅòåË{p Nž““SYYùóÏ?=!$ ËËË/\¸pîÜ9ü‘N¡Pˆµÿûßÿ¦õ xôìùýe@ÁÊÊ*555++K¥R•––š[çpõêÕîîîr¹WP*•ŽŽŽ‘‘‘r¹< àÎ;¡ÄÄD‰Db:ûuãÆÀÀ@©TªP(ðçÇ«««Ç/•J}}}«ªª˜èB•––Êd2//¯5kÖà½^OÒNâСC!!!xûĉx‘Fªv<©³nÝ:oooww÷ºº:ªvª_çÏŸ—ËåR©t„ wîÜQ*•"‘héÒ¥...)))æBÝÐÐðÉ'Ÿ|üñÇæ*x{{;88 „ vÊÖÖvøðáÍÍÍ!µZýôÓO3iEDQQ8†‡‡ÿý÷ÔS ™™™ .¤5‰ç“'ON˜0*--•ËåÔ&mmmjµzذa!'‹‡lmmß}÷ÝÝ»w›ÖÇ}É\L€ž…áùe@A«ÕÆÄÄ,\¸P$ùøøÄÇÇSë¨Õê-[¶\ºtéâÅ‹¯¼ò .lhhX¸páÅ‹çÎûþûï#„H_ÇŒˆˆ «¬¬¼pámDFF®_¿¾²²ò“O>yûí·ꊊŠJJJúå—_žyæ’öþóŸÆUš2mÚ´Ÿ~ú ÏrrrÂÃÃÍiohhpss+++»xñ¢Á` j§úµyóæÊÊÊàà`±ººº+VäææÒ.éŽyûí· d®‚‘ŒŒ üñy‡sðàÁ &¸ººþë_ÿÊÌÌdÒª¾¾ÞÊÊêîÝ»/½ôÒСCÿ÷ÿ—ZblUQQÑÔÔô /ÐÊ$Åyâĉ555üñVCmÂçóçÏŸïáá±pá¼¼<Ò=ÙQ£F]¿~KV(#GŽ\²d |\³×`r¾À@F™Ð_°²²JOOÇKo‡……—o1ÅÞÞ^,ÇÄÄdggÛÚÚâB‡'gÍšuîÜ9j«¦¦¦ÒÒR{ölZí666Ó¦MËÏÏ×étß}÷]HHˆ9íÖÖÖ![[ÛÁƒS=%¡V«oݺ…µ‡„„üøã!@àáááææfîOGŽÑh4Ó§O§=jJaaááÇB_¼xñîÝ»oݺµhÑ" cR+„››Û÷ßommm¡!”‘‘±`ÁsbIqf±XÑÑÑ™™™æÐ¡Cæfdd|ÿý÷Ï>ûìÊ•+I÷d_’ÇwÌoÞ¼¹råÊÄÄDs= “ó:0Ê€~‹Å2~ÿ’v96›]RR2þüƒ†……Q+0‡€Íf—••UTT\ºt ÷ñöíÛø-ü^­. ‹ÜX8úòË/çææž8qÂÇÇG(ÒjGñx<6›ÍÐSsÎZYYaKÌ…âôéÓ.\ððð7n\CCí½f„ÐåË—ß|óÍüü|>Ÿjhhøí·ßð;44Ôܳ¡¤VŽŽŽZ­¿âSSSóä“ORKpÃìÙ³ÇÜír8ÎQQQ{öì9tèФI“pTiñööþàƒ<¸ÿ~Óò7n¸¹¹™–„††ž?žV©oЖ¥Ãó:0Ê€D{{{cccPPЪU«ðrä¡ÖÖV¼øu~~¾¿¿?µŸÏ÷ööÆ Ïètºšš>Ÿïéé‰_þÐëõxœ7bÄüžô¢ênnnø±Î¼¼<ªö€€Z³'Ož\^^¾k×.|»œV;OI888¸ººbíyyycÇŽeÃÍ›7ÿñÇW¯^ýᇄBáÅ‹qùýû÷îܹöÍ7ߌ5 —ØÛÛ[[[—••!„Ξ=;räH&­X,ÖäÉ“÷íÛ‡Ú»wï´iÓ¨%¸æáÇÝÝÝIÃ>S¨qvvv–Édï½÷^tt´¹V………x£²²røðáÆrF“œœLš-))1ŽzIúm Xû­­­ÁÁÁF¯×o± …ÂŒŒŒØØX{{ûÜÜ\„B¡Ðétøy;±X¼ÿþ={ö¼úê«[·nåp8[¶lqqqÉÎÎŽŽŽNJJ"bÑ¢EžžžLt¥¥¥EGGs8///’v>ŸµSáp83fÌÈÌÌÄ#K„P×´SýÊÈÈXºt©Á`‰DÙÙÙ݉­N§«®®ÆÛëׯW*•ø›óçÏs¹Ü¯¾ú*22!$ŒkEZn…úüóÏÃÃÃ7mÚäææöÉ'ŸÐ– „222,OdÒÆ922òâÅ‹ãÇ7×*99ùÍ7ßär¹|>çΡ††OOO½^?þüŋ߽{Ç“ ÏeЃÀ(ƒ¾pá©ÃáìٳǴ¤¢¢‚TgÔ¨Q¤÷fÄbñ™3g:«ë¹çž»té’iI}}=Ë·oß¾}ûv ÚIKeÒj§úõüóÏ'#1Xþ–§e“HMwIÖb¦OŸN}š³ÃVO=õÔÏ?ÿl¹!täÈË¦ÒÆùÇŒŽŽ¶p³µ  €T¢ÓéH’I%=Œ2mmmþþþ<ô-$€þŒ2``CšìììhŸgè?ÀÛ?@Ï£L çQ&ô#‚À -¢Î|ù²Ë¨Tª‰'RË•J¥³³óÃÐøð$? ]æâÓã477oܸѸ›@ZH“¡=$9 [õƾMÂÔB†¾Óz:àèåóze@A«Õ.^¼¸¸¸!”““Ó Ÿ!‰Dæ¾. ^ŒiÌ”˜˜Hú C{hÇ^ý?˦2ôýeöþù½Œ2 ¿`ee•ššš••¥R©JKK7oÞL­£T*###åry@@À;wÐßSDëÖ­óöövww¯««;þ¼\.—J¥&L¸sçΡC‡Œ Bž8q/T˜˜˜Hš4*--•Éd^^^kÖ¬Á%ÕÕÕãÇ—J¥¾¾¾UUU¡Õ«W»»»ËårZó0IIIr¹\.—ûùù•””P%ÓÚCj¥T*E"ÑÒ¥K]\\RRRpå7nJ¥R…B?Oµê’´Q¥Æ‡‰vj¾¨^Z%$$âV* •JEk3Õ’´rH­hí)++“H$^^^Ë–-37ûKõš/j ©=A¯×wç}§zzòäÉ &ࣥ¥¥æÖsêW09ßàQ€ ˆûwïâ¿Ë9™™ÆÝ¬; GÉڱ㛬,N§}ðàA{{{[[[KKKSSsc£º¡¡±®®©¡¡µ¹YÓÞþMV–1¦”~E÷º'-­Y­ÎÚ±ãÁƒQQQ¹¹¹"‘hïÞ½qqqTuµµµ¡ÂÂB‚ ’““###q!‡ÃÙ½{7AmmmÆÃÃ×Ù´iSDDD{{»³³sSSA111iiiFi"‘È(|̘1EEE¸•““A~~~ÅÅÅA;v,00°±±ÑÎή½½ •Je.&555xãÌ™3ÞÞÞTÉ´öZaO¯\¹R\\,‘Hð!ÿ””‚ 4ÍÍ›7©ÒzA‚êmT©ña¢6_$/¨­HŠhKH…´¹è°­=2™¬  ûN1ZßióEŠ¡…:III , 5»C/¨»ƒA,_¿~ ˆ×_}Û¶m´^ô+˜œïÐktê·¬Y­Þ“–Fú-ËÉÌ$LÆ“9™™¾dý++«ôôô»wï"„ÂÂÂæÍ›G[ÇãáÉ¿Y³fmÛ¶ Z[[GDD „lmmÕjõ­[·p/¿üÒÆÆfÚ´iùùùóæÍûî»ïho5ªÕê?ÿü¯Ó²y󿦦¦ÒÒÒåË—#„ ‡Ã±··‹Å111S§N3gŽ9GÊËËCCCÕj5AuuuTÉ´öZ!„‡‡Gmm-þT¶çìÙ³Ø_WWWª…T]Tóh½ ª)L´ÓFƒÖ‹[uÃ\thZ­¾víZPPBhÖ¬YŸ}öµ ÕwD—/j -Ô™={6mœ»‹ÅŠŽŽÎÌÌLHH8tèPbbbOI~x0<ß`@£LèG°X,ã÷/-,èb„øûÇf³I…¦¼üòË_~ù¥H$òññ …æ´“JØlvYY™éH¨¤¤äÔ©S©©©{÷î=|ø0UˆF£ ?}ú´——Wuuõ¸qãh%“ì¡meee…ÛÒzDk¡Z­î0nl6Û²ÔYÖN Õ &­ºïs{ºm¾L!¢Ã:æ|dÒó©DEEŒ3fÒ¤Iæzx£³ç; 8à¹L`´¶¶!„òóóýýý©\]]q¼¼¼±cÇ"„&Ož\^^¾k×®ððpZ±ÀÍÍ ?r———‡âóùžžžxåq½^_^^ÞÞÞÞØØ´jÕª«W¯ÒÊÑjµ:nÔ¨Q¡ŒŒ ZÉT{¨­¨ðù|ooo¼€¸N§«©©¡ZH«‹­F•‰vZuT9ÔV<¯¥¥E£Ñ« …ÂÖÖVµZmN­T9"ÄbñÑ£GBß~û­9›I¾Óæ‹ÃëЪëÐwZOe2Ù{ï½m,¼ÿ>îÿô 0Ê€†P(ÌÈÈËå¹¹¹6l ­“‘‘+•J9‚ïGs8œ3f=ztÆŒ¸ŽB¡0¾B1wî\„PZZÚ;ï¼ãééyåÊ\';;;++K"‘Èd²¢¢¢ÖÖÖàà`¹\¾páBsªííí×®]ëéééëëËåþ÷n U2ÉÚVTöìÙ“““#•J}||ðЊd!­.´^P£JíL ¶QQQ …" ßY¶±±‰—Éd>>>´ù¢õ‚*‡ê•ôôôØØX//¯ß~ûÍ\ðI¾Óæ‹CËuöíÛ÷é§ŸÒZءﴞ"„"##mllÆo4[§ÓUWW3Ì = !D„êÞ=¼¯¬­ýµ¢bò´ix÷»¼¼…Ë–õ™u"»wî´æñB#"ƒ0 A “m6›Íár9\n^NΔ  ªHJ¿¢û -±‡I«îŒ2ïÝ»wìØ±… Z(L±¡PXñ7¯¾ú*2Óç ^|ñEümTªdNž““SYYùóÏ?=Ú(¹ªªjþüùxù¥/¾øâøñ㸟qüqssóÅ‹«ªª>þøcZ{˜xÑ! ÏwÐÀ(ú VVV©©©YYY*•ª´´”vuD#¶¶¶ï¾ûîîÝ»BçÏŸ—ËåR©t„ wîÜAݸq#00P*•*Š“'OçK”J¥³³3Þ°··÷õõ;wî³Ï>ª®®?~¼T*õõõ­ªªR*•"‘héÒ¥...)))¡„„ãg  …J¥B%%%Éår¹\îççWRRB['11Q"‘˜ÎÆ‘l¦ê¢…‰.*AXö‚Z¢T*###åry@@Ž*2ó•ïmÛ¶ÅÄÄØØØPKFŽÙØØh,_¼x1‹Åê°„öëèz½ždNëºuë¼½½ÝÝÝëêê¨=ZgõêÕîîîr¹ÜØÁº– R£•CícÔˆ•••I$//¯eË–áÎiÓ>ÿ믿<844”´è‘Qr[[›Z­6lBˆÇã‰ÅbÓjAAAæ¾£¹sçεk×â•´d2™{¨yï:ß`cººù劊œÌLãnÖŽ½¶RûcB§¤'-EIé‡t?¡{ÒÒšÕê¬;kÖ¬ÁƒÓ–øûû_¸páÚµkEEE:nÖ¬Y– :Ô‚=³gÏ6Úcmm²µµ¥*©ŽµµµX,މ‰™:uêœ9sPWsAíc´rH}ŒµZ}íÚµ   çÏ>û ý}‡Ú¨Ë´÷û>räHbbâˆ#x<^EE…B¡ æ"##£¬¬¬°°påÊ•?þøcll,ž®Öjµîîî;wî4—z${¨^tΞï0Q&ô#X,–qcüA5Ç7ÜÜÜ/ Eét:Ú ƒ!Äf³ËÊÊðø!¤T*­¬¬pssZ4MxxøéÓ§½¼¼ª««Çס1ÈÌ‹IÉ]3!¤×ë·nÝŠ§-ñ÷÷_¿~½ƒƒƒ——ב#Gžþy&%ÚcL(ÇÃ÷v-iZ‡Íf—””œ:u*55”(?Ÿ IDATuïÞ½‡îZ.¨tX÷1jÄ:îó*•ª¤¤$&&†Ífß»wïÈ‘# …‚V²·····÷Œ3‚ƒƒccciÇ‹¦…B;;;ãƒ%æè¦F:u¾À@žË€‰F£INN^°`ƒƒƒ««+^;//oìØ±|>ßÛÛ/â¢Óéjjj„BaKKKkkkUU•9|>ßÓÓ¿Z¡×ëÍ}ãšÇãµ´´h4¼«Õju:ݨQ£B´u¨Pmfâr×t1ñ‚¶¤µµ[˜ŸŸïïï IÏeæåå) 777s%žžž•••AÌœ9sýúõþþþLJhu™Ú@uŠITÛÛÛƒ‚‚V­Z…_²fž S{¨}Œ¡R|X,ÆÃ5Ú§QM1öùï¿ÿþ¥—^úý÷߯^½úÍ7ßàG3©¹(,,Ä•••Ç·,ÜHttôG}„Í•••L¼À0— Œ††OOO½^?þüÅ‹#„222–.]j0D"Qvv6BhÏž=¯¾úêÖ­[9Ζ-[&Ož3qâD㆖ìììèè褤$‚ -ZDûò¬@ ˆŠŠR("‘(??ðàÁk×®õôôtrr ú{•vj…B¡ÓéðýJ±X¼ÿ~ªÍbooÏDQÔV¤„P(ÌÈȈµ··ÏÍÍÅ u:é[#›7o6Þ¼¦-ár¹...¾¾¾&L¸~ýº¿¿?“Z]F{ø|¾ÑFµµµ588X£Ñèõú 60lEk©¹¸¸0‘CXzzú¢E‹V­ZåççÇårB¸Ÿà£¡¡¡ÑÑѤ>†oÍ#„^|ñÅË—/ß½{—*999ùÍ7ßär¹|>ßÜýñåË—Ÿ9skŒˆˆˆ‹‹[·n]||¼T*5 b±8%%…dOBBU´°BAW7WÖÖþZQ1yÚ4¼û]^ÞÂeËú̺G‘N-H?åïŸRS )ýŠî'´ðÈ‘™¡¡²³!­ý¥R)‘H,?ÇyöìÙýë_øÙDs%€)´ñinn¶··Gíß¿?==½k ‘÷fä!ËÀ#I§~ËfÌ™“¿oß?‚ƒM%œ((˜·h‘q>>§OŸfÞV¥RMœ8±SêŽ?®P(¤R©L&ËÏÏ7j=zt@@ÀÕ«WBË—/—H$¸|Ó¦M!½^'•JG=kÖ,S› Ejjj§l0¥¹¹yãÆÆÝ„„‰D‚;O§<%ÉéQQQîîîãÆëZsLraD©T:;;÷Ž.: ·¯ à¿àçðºÆ999%%%›7oîk£ú;B¡°¢¢!tîܹ˜˜˜ªª*† E"Ñ©S§˜+ÒétáááÅÅÅîîî­­­wîÜ1Õþå—_._¾üĉ_|ñ…R©”H$¸!ôñÇ777_¼x‘Íf_ºtÉ´U7Á£CãÊ„‰‰‰o¾ù¦D"鬧$9ÌihhÈËËkhh`³»5aÑÙ\ ]À\&ô¬¬¬RSS³²²T*Uii) 1;…R©tttDUWW?^*•úúúâAgYY™D"ñòòZ¶lž÷JLL4öS*•"‘héÒ¥...)))´òÛÚÚÔjõ°aÃB<O,› ª®®¦m¸sçεk×âq˜L&cè Õ’_ xNT¥RÑŠ"yŠZ½zµ»»»\.ÇŒ¡œóçÏËår©T:aÂ<Â~ÿý÷Z[[½¼¼hç2•J¥½½½¯¯ïܹsŸ}öY<ŠMJJ’Ëår¹ÜÏϯ¤¤„j!“\ „JKKe2™——ך5khãCõ”6¤¾ÁP; ¹Lè/hµÚ%K–,\¸ð§Ÿ~òññ‰â‰'²²²Œlll^~ùåǤäüùó !„ð𨾾¾¹¹ÏQEFFnÙ²å…^(,,|ûí·‹ŠŠ^yå•Í›7}þùç¸UBBBtt´é´_]]ÝŠ+.\¸lÙ²%K–Pñùüùóç{xxL:uöìÙsæÌ1=úõ×_S'±y­­­¤[ºØf¼½yóæÀÀ@jCª=T¿ðÌ¥åiQ’§jµzË–-õõõ666uuuÈdÔ²œ¨¨¨­[·N™2eóæÍñññ_ýõgŸ}öÎ;ïXn¨×ë³²²ž{î¹ÒÒÒÙ³goܸñå—_~÷ÝwBgÏž}íµ×JKK» lÏçŸhA’âsàÀ’§Ôh „¨}£CíÉÉÉýêLéå3:éêæ—+*r23»Y;vôѺí,Zž´=$¥Òý„îIKkV«qZ Cmm­H$ÂÛ}í\Ç+‚ 6lØ0oÞ<µZÍápðl™T*U(<×ùã?œœœ¨mkkkAwîÜqvv¶ ±´´týúõb±ø½÷Þ«­­ÅºF=gΜ›7oR%×××óù|s6[ð‹dÕ/ZQ´ÂM õz½T*ŒŒüúë¯[ZZšdÃëׯ?õÔSL⣵µµNNNµµµO<ñAGŽñ÷÷—H$cÆŒÁ%DçsA²ÇÉɉZOIº¨}ƒyO€GŒNý–5«Õ{ÒÒH¿e9™™„Éx2'3Á\&ô+X,–³³óýû÷ñö£:kò0fVBCC¿üòK„›Í.++ãp8¸\­V3inee…b±X„Å—®¼½½½½½g̘Ûá–B¡ÐÎή³o¨ÐÚCò‹‹eY,›Í.))9uêTjjêÞ½{>ÌÄË1aˆÁ`Ðh4ááá§OŸöòòª®®6÷Γ\P=¥Æ§ ž2Ñþ¨ž•0— < `” ý—+V¬X±‚Zø˜”tŠ’’’'Ÿ|’Ïç{zzfee½òÊ+z½þÒ¥Kžžžb±øèÑ£AAAß~ûmwTþãÿ@UVV>œa«èèè>úè‹/¾`±X•••C‡í‚jZ¿x<^KK‹F£±±±ÁÕ„Bakk«Z­´rÚÛÛÕjuPPаaÃÂÂÂp!U WW×¢¢¢)S¦äåå;¶ . „´Z­N§5jB(##£kBBÀÍÍíäÉ““&MÊËËCtñyöÙg©žRåt¡o<Âg%ô80Ê`ƒŸq$‚ÇãíØ±!”””DÄ¢E‹<==ÓÓÓ-Z´jÕ*???.—‹R(:·‹ÅÛ·og¢+99ùÍ7ßär¹|>çδu–/_~æÌ,9"""..nݺuñññR©Ô`0ˆÅâ””Óç2CCC˜h§ú%¢¢¢ …H$ÊÏÏ¢µI.ž{î9üY(#ÔøP=¥ê"õ ÚÈÐe`” À#NAAÁš5k¸\®ƒƒCzzz_›ô# oÀCF™<℆††††öµ@úßÓÓ3++ !¤×ëËËËX,>zô(BèÛo¿íޮɓ'———ïÚµ+<<!Äçó½½½ñ):®¦¦†Z§½½½±±1((hÕªUW¯^¥Kµ!´nÝ://¯ƒFEEᲩ§þþþZ­V§Óá9ÂŒŒ ZÉL´;88¸ººbÉyyycÇŽ5ç¾å7úi½˜:uêþýûóóó[[[Ç—––FjÅÄ ZÉÛ·o¯¨¨XµjÕ°aÃÌÐMÔwkkÕ ¡¦ÆÆ{JeSccäÀ(B¡0##C.—ïÛ·ïÓO?EegggeeI$™L†Oééé±±±^^^¿ýö—ËE)ŠÀÀÀ††…B1wî\†º8ÎŒ3Ž=:cÆ \²gÏžœœ©Têãデq¤:­­­ÁÁÁr¹|áÂ…6l0'™dóéÓ§óóó?ûì3™L¶téÒ˜˜SOsss7lØ`oo¿víZOOO___®™ÿRÓj§úž‘‘+•J9²qãFsFÞºuK¡PXˆ5ò''§>øíÝi\S×Ú7à•„Á"C0ÒPD@D @* VQ[‘*Hyj© ÖªGQ±UœŽ"}Z‘R¥Z‡J=§Å¢ç8`+“cQ¤*”– ˆ‚AÁ0(‚dx?ìǼ)!JÐÿõ뇕{Ýkíê¾Ýãê›7o¾÷Þ{º¨³ 3_¸páÈ‘#ï¼óŽ:¹ºÃÔÌŒýÖ[¦L&!ÄÄÌÌÂÒÒÄÌLƒ<4BˆD"©ð€úÌ¿¿äÆ ÿÀ@êã©£Gç|ò‰–æ „ò¯ï¾302š.‹%b±X"‘ˆÅb™e:ÎÐÓcèé=|xâäÉòð£è”îÿ gNž|oÖ¬ôŸ~ÒâÏúøñccccBÈÏ?ÿ¼ÿþŒŒ me~iø|>‡ÃQÿ*É!>>ÞÉÉIý¢ —êÒ¾ìÝ3Ž9òδi²²OŸùè#i=™}úthD®Ëx>}zýúõzzzfffÔ nÐÀš5kzz =@[×e¢ÊxÍš5kÖ¬Y==‹n‘Þ/u]&!„inN]—É`0X]¿U&ü¦ff"¡Pz]¦H$ÒìºLT™ðÿ1ôôXÔu™ £‹E§kr¿8î1Ð|>_OOûܾ}û!‘‘‘l6[Åót¤æÍ›§"¬²²Ò××—Ãáµ´´(Œét¬´´4‡ãíí]\\¬,L>üèšµÀK  ë>‰D„‘H$¨¯§–» U&€a2™7ž›?>!$<<<;;»ÓŽªßpÅãñìììÆt:–ƒƒC^^Ç‹‰‰‰ŠŠR&ŸG~tÍZà%Àó2^ ~~~Èlhhˆ‹‹Û¼y³²‰D’™™I½²2,,LÙƒ:ËËËËÌÌŒÂårkjjÔœ³üèšµ¨Ü 5Úz^&ªLB=9œ’••¥f¯¥K—ÆÆÆöíÛWY€@ Ð×ׯ­­2eŠ……Ž{÷º9Ï””õŸ")?ºf-Ýœ3¨‰º.“zÉ-u]¦ì oÕ‡»tuƼK]Nž<ÙÖÖ6uêT>Ÿ¯:ÒÞÞ>##£ûåÚ™3gNœ8qéÒ¥.õ’]³è-p, w;{öl~~¾³³óرcÜÝÝåcÌÍÍÛÛÛ©hª««­­­5ŽÇã-Y²äøñã&&&jv‘]³ç =U&@ï–P^^^ZZzáÂ&“YXX(C£Ñüýý9B9tèPàóWÈvUMMMhhhjjªú½äG׬E³9@OA•  Cd¯Ëܲe !$,,ÌÓÓS X[[ÇÅÅiœ9))i×®]çöíÛË—/WÓéXñññ|>îܹ\.×ÛÛ[ÙXòyäG׬z\—  +,--…Ba‡ÆÔÔTõ»«x%ã Aƒ._¾¬:C§c%'''''w:ù<ò£kÖ½Že€ö¡ÊíC• Ú‡*´U&€Y´h‡ÃÑÓÓãr¹[·n}™Cóù|j\ʾ}û!‘‘‘l6[õk';IKKsqqáp8ÞÞÞÅÅÅêÌÄÒÒRÍiWVVúúúr8œ   êáš #Peèo¿ý6++‹zPLLÌK—2þ|BHxxxvv¶ê^Æ888äååñx¼˜˜˜¨¨(mΘèè訨(ggg—˜˜¨ÝäШ2tÚºuë† âîîž@µ”••7ÎÕÕuäÈ‘7oÞäóù,kÁ‚VVV{öìQ³—š£ûùù©>©NŒ———™™!„ËåÖÔÔ( +((pssóôô\¿~=ÕRYYàêêÊårsrrä»H$’ÌÌÌBHXXXFFF§k/ ªLÝÕÔÔ´mÛ¶¢¢¢Â¹sçR~øa|||qqq\\ÜÒ¥K !=ŠŽŽNKKÛ±c‡ú½äÉ>>++Kë«“’’2sæLeßFDD$&&^»vÍÉɉj  -..ÎÏÏwtt”ï"ôõõkkk§L™baa×è<•@w;::FFFNš4iÆŒ„æææ‚‚‚E‹BÄb1ƒÁ „˜šš:;;ß¿Ÿz*»š½äQgÌ_кœ9sæÄ‰—.]RømSSSEEE@@!$888!!šóùóç !¶¶¶Ê2ÛÛÛgdd ÄÐ5¨2tN¿zõjnnî¾}û:tâÄ ªñ÷ß—VŠ|>___ŸB£Ñ$‰š½^2·dÉ’_ýÕÄÄDY FëjZssóööö––##£êêjkkëîM´ gÌtWkkkccãäɓ׬YSZZJ111ñðð8pà!D$]¿~][½^œšššÐÐÐÔÔT;;;e1¦¦¦öööÔÅ—G%„˜˜˜xyyíß¿Ÿ" «««å{Ñh4ÿ#GŽB:ø‚V4€*@‡,Z´( €º>rëÖ­---Ó¦MswwŸ3gΗ_~IÅüôÓOàp8nnn™™™òI4ëEþ~]æ–-[!aaažžžÀÚÚ:..Na¯Ncâããù|þܹs¹\®···²uÿþûï—-[æááqëÖ-ªåàÁƒ‡vuu>|8U.ËKJJÚµk‡Ã¹}ûöòåË•%€—gÌtÈ·ß~Û¡%??¿C‹££ã¹sçd[¨Ë1---ù|>!¤_¿~êôêÀÒÒR(vhLMMítÎÆ$'''''wšgĈEEE²-vvvÞ„4hР˗/wš^>ËíñL€×—ËíвzõêÐÐЙ ¼’Pe¼Ž^Ü‹(8cÚ‡*@‡,Z´ˆÃáèééQ÷˜Bþúë/oooWW×iÓ¦=~üXa¯ÇõÕW*Òòù|*'eß¾}„ÈÈH6›Ýé $ !óæÍSVYYéëëËáp‚‚‚ZZZT§âóù–––ލAfÐ5¨2tÈ·ß~›••E½ƒ'&&†²lÙ²+V»»»Su§¼N«Lòü½>”ùóçBÂÃó³³;RFFÆÓ§OUDGGGEEñx<;;»ÄÄÄNªïÅe€—U&€î‹Å¹¹¹Ó§O'„ÿúë¯|>Ÿ:¬(=(+}Ä&—Ë­¯¯W3¹ŸŸ_§2âââ6oÞ¬,@"‘dff†„„BÂÂÂ222†¸¹¹yzz®_¿žj©¬¬ puuår¹ÔÃØ5Ë : U&€î†††„6›]SS#³eËéáÏ7n°X,…©dŸ¸ÞéC(¥–.]Û·o_3Ô×ׯ­­2eŠ………²—‰GDD$&&^»vÍÉɉj  -..ÎÏÏwttÔ83è,ÜcðZ ÊÐ.u9yòd[[ÛÔ©S©‡½«`ooŸ‘‘¡¬ljjª¨¨ „'$$477œ?žb```kk«YfÐe8–  »ÌÍÍŸ={ÖÖÖF©­­µ²²¢ÑhÔWòïéѺ³gÏæçç;;;;¶¡¡ÁÝÝ]á ÛÛÛ©[sª««­­­¦’N[}jf…*@wÑét??¿ãÇBŽ=úÎ;ï0™Ì'Ož´´´Ü¼ySfddôäɪբ„„„òòòÒÒÒ .0™ÌÂÂBùæïïäÈBÈ¡C‡åcLMMííí©‹/=J111ñòòÚ¿?!D(VWWk–tªL²hÑ"é­<ÔåIII[·nuuu-,,Œ‰‰144ŒŒŒ?~üéÓ§¥½LMM#""¸\î˜1c=z¤0³ìu™[¶l!„„……yzz kk븸8眔”´k×.‡sûöíåË—+Œùþûï—-[æááqëÖ-ªåàÁƒ‡vuu>|xii©Æ™@gáºLòí·ßvh±àEÀsÐ>T™:D"‘Hß!)‘HºŸPú"ÊWX}}ýøñã{zЪL]ÑÞÞþñÇ_¼x‘røðᘘ˜žžQïÀb±rss{zЪL]¡¯¯¿oß¾Ô××$$$( +++7nœ««ëÈ‘#oÞ¼ÉçóY,Ö‚ ¬¬¬öìÙCŸ¹¹yzz®_¿^a’ÿüç?ÁÁÁÔrvvöĉ !•••®®®\.7Õ¯p‹ IDAT''Ga̺uë† âîî®lzò3¼{÷®³³3õšÊÈÈȯ¾úŠÏç›››øá‡îîîcÆŒ¡ÞÏž˜˜èîîîîîîíí}õêU…ë%?ú–-[8uô—råÊwwwWWW??¿šš…yà%@•  +ÚÛÛ###çÌ™Ãb±†¾jÕ*…a~øa|||qqq\\ÜÒ¥K !=ŠŽŽNKKÛ±c‘˜˜xíÚ5'''…Ióòò?~L9|øpXX!$<<<44´¸¸8??ßÑÑQ>¦©©iÛ¶mEEE………sçÎU¶"fhccóÅ_|üñÇéééwîÜ¡ŽÑ644Ì™3§°°pæÌ™Ÿþ9!döìÙ………………[·n]¸p¡üz)=66¶Ãs7#""Š‹‹§M›FmCùí/î1Ðúúúû÷ﯭ­%„„†††„„ÈÇ477,Z´ˆ"‹ !ÄÔÔÔÙÙùþýûÔ³Ó›šš***!ÁÁÁ :?~<$$äÔ©S_}õ•ùüùó„[[[BH‡cccGGÇÈÈÈI“&͘1CáZ(œáŒ3~ùå—Å‹_¿~z§¹‘‘uptúôéTñwýúõY³f555I$ê FÖKÑ›ššªªª¨ÌÁÁÁ;wî”Ï/ªLB£Ñ¤/Ú¡ª1yt:ý÷ß§ª7BŸÏ×××§â¥7 )ë+köìÙ;w›2™ÌæææNc!W¯^ÍÍÍÝ·oß¡C‡Nœ8¡Î !"‘¨´´ÔÈȨªªJþn$‰DÒÖÖvöìYOOϲ²²±cÇB:¬Nïtt…·LÉox pÆ 7111ñðð8pà!D$]¿~]>ÆÔÔÔÞÞ>''‡rôèQe©üýý¯_¿¾wï^êt¹‰‰‰——×þýû !B¡°ººZ>¦µµµ±±qòäÉkÖ¬Qöòq…3üç?ÿéééyìØ±ˆˆˆ¦¦&BHKKKff&!äøñã£Fjoo …vvv„””…™ÕÝÌÌÌÖÖ–Ê|ôèQ___e«/Žeô2?ýôÓ¼yó%ÉG}4gÎù˜ï¿ÿ~Þ¼y ÃÓÓSYƒñî»ïþðÃTEH9xðàüùó·oßÎ`0¶mÛfeeÕ!¦¥¥eÚ´immm"‘èË/¿Ts†Ç¿r务¡á‚ "##¿ùæ&“™’’²råJccã´´4ccã 6xxx°ÙìÉ“'+L«pt.—+ ¸\®££ãÏ?ÿœ’’²`Á±XÌb±~úé'õ7,hªL€^ÆÑÑñܹs²-ÔvKKKê>nBȈ#ŠŠŠ:M•œœœœœ,ýhgg×áNš1ýúõËÏÏ×`†Ò×-]ºtéÒ¥|>ŸÁ`ûì³Ï¨åM›6ɯ—ÂÑå_täããSXX(Û"¿}à%ÀsÐ>T™ð²Iïp€WªLÐ>T™ }¨2tEttôÚµk©åû÷ïß¹sGö݉RõõõãÇïÎX|>_OOËår¹ÜcÇŽ) «¬¬ôõõåp8AAA---òiii...ÇÛÛ»¸¸Xͱä×´­­­;«:U&€® ÌÍÍ¥–srr&L˜`hh¨0’ÅbI#5Æd2oܸqãÆ eïÑ!„DGGGEEñx<;;»ÄÄDù‡¼¼<¥æXê¯)ô^¨2tŸqãJJJ¨÷†çääBD"ч~èîî>f̘ššBÈ–-[8Žì1ÎÄÄDwwwwwwooï«W¯BÖ­[7dÈwww…¯—T“D"ÉÌ̤^t–‘‘!ãååeffFár¹Ôô4^SxÅ ÊІ††cÆŒ¹xñ"!$77—ª½æÌ™SXXøþûïS“ŒíðTËÙ³gnݺuáÂ…MMMÛ¶m+***,,œ;w®²áZZZÜÜÜüýý+**}}ýÚÚÚ)S¦XXXÜ»wOÅäSRRfΜ©æX ×^1¨2tH```NNNEE…¡¡!õºE##£‰'B‚‚‚.]º¤°×õë×Gíêêúé§ŸÖÔÔ;::FFFþôÓO}úôQØ…ÅbÕÖÖ?~ñâÅ*¦dooŸ‘‘a`` "æÌ™3'NœØ¸q£úcɯ)¼bPeèê‚Ee'‘i4š|c[[[XXØŽ;Š‹‹;&‹étúÕ«W?øàƒcÇŽ…††*H__ßÄÄ„òÁ(»kÇÜܼ½½ºé§ººÚÚÚZaÇ[²dÉñãÇ©„jŽ¥zMà€*@‡ØÛÛ?yò䨱cÒÚ«¥¥%33“rüøñ1cÆÈwioo …ÔáÀ””BHkkkccãäɓ׬YSZZªp é»ùå—¡C‡*Œ¡ÑhþþþGŽ!„:tHa9XSSšššÚáxd]]¯¯¯Š±ä×^1x9€nyçwöíÛ—žžN}d2™)))+W®411IKK#„p¹\¡PØÐÐÀårþùç 6xxx°ÙìÉ“'BZZZ¦M›ÖÖÖ&‰¾üòK…£8p`ÿþýt:½ÿþP6™¤¤¤°°°­[·ÚÛÛÇÅÅÉÄÇÇóù|êêOCCÃ+W®PíB¡°¬¬LõXÖ^1¨2tKRRRRRµlii):ܸq£CËgŸ}FÝDÙ´i!$??_õ(²]T4hÐåË—U$'''''˷˾CRÙX²k ¯œ1íC• Ú‡*´U&hªL]Áçóõôô¸\î°aÃ&L˜P^^®fÇÇõÕWêDΛ7OöÕ”TVVúúúr8œ   ê1™ò"##Ùl¶lù^Zø|¾4>++ËÉÉIõk„àÕ€*@‡0™Ì7n”””Ìœ9sáÂ…jöR³ÊÌÈÈxúô©Š€èè訨(ggg—˜˜¨0&<<<;;[u/ey®\¹²`Á‚S§N){À;¼JPeè¢É“'ÿñÇ„+W®¸»»»ººúùùÕÔÔH òù|KKKBHlll@@õøL.—[__¯0aCCC\\ÜæÍ›•(‘H233CBB!aaa ÃüüüddÊ÷R–§¤¤$,,,==}ðàÁmèePeè¢ôôôáÇB"""Š‹‹§M›¶jÕ*ùÈ-[¶deeQAoܸÁb±&\ºtilllß¾}•(ôõõkkk§L™baa¡æImù^ ó<}útÒ¤IcÇŽår¹j­?ô~¨2tuH’ÍfÿðÃ{÷îmjjªªªš8q"!$88ø·ß~Ó,íÉ“'ÛÚÚ¦NÚi¤½½}FF†A—òË÷êÐÒÖÖ–˜˜˜››{þüù.e€Þ U&€¡IVTTP…¦D"é@£Ñ¨¡P¨~Ú³gÏæçç;;;;¶¡¡ÁÝÝ]>ÆÜܼ½½º}§ººZÍK'å{)ÌÃd2CBB¶oß>oÞ<Õ׆À+U&€Î122Ú¹sg||}ZljjÁårÇŒóèÑ#MJJÚµk‡Ã¹}ûöòåËÆ„……yzz kk븸8…½TäÙ±cGJJJ^^žÆ“€ÞB¯§'ÿÇÒÒ²®®Núq÷îÝÔB‡CÛ·o§¾þúkiã®]»4¢ƒAƒ]¾|Yu†ÔÔÔN{uhéÛ·¯tP+++@ ÎT ·Ã±LÐ>T™ }¨2@ûPe€ö¡ÊÐÑÑÑk×®¥–ïß¿ollL=œ¨¾¾~üøñ]JµbÅ ‡ãææ6räH…7tóù|===꥔ǎë4¡ô…–ꨬ¬ôõõåp8AAAÔƒ3µ%22’Íf˾âtªL]˜››K-çääL˜0ÁÐÐÂb±¤íjZ»v-Ç+**ŠŸ?¾ÂéK)g̘ÑÍ™wÅãñìì쵘9<<<;;[‹ àÅA•  +ÆWRRòøñcBHNNõ<ó-[¶p8éÑ;>ŸÏb±,X`eeµgÏe©ÌÍÍ©…ºº: §TPPàæææéé¹~ýzª¥²²2 ÀÕÕ•ËåæääÈw‘H$™™™!!!„°°°ŒŒ …™ÝÝÝÝÝݽ½½¯^½ªNfBˆŸŸdô¨2t…¡¡á˜1c.^¼HÉÍÍ¥ªÌØØØ¬¬,Ù°GEGG§¥¥íرCE¶M›6ÙØØlܸñðáà ZZZÜÜÜüýý+**”%‰ˆˆHLL¼víš““ÕZ\\œŸŸïèè(ßE èëë×ÖÖN™2ÅÂÂâÞ½{ 3Ïž=»°°°°°pëÖ­ .T'3ô.¨2tH```NNNEE…¡¡¡ÂSSSggg{{{ÏW'„¬_¿¾ªªjÖ¬Y«W¯–ÿ–ÅbÕÖÖ?~ñâÅ 3455UTTB‚ƒƒ !ÍÍÍsçÎ%„ØÚÚ*ÝÞÞ>##ÃÀÀ@YÀõë×Gíêêúé§ŸÖÔÔ¨Ÿz T™:„º4Szº\!}}}BF“H$ª³Ñh´ˆˆê5èòILLL!|ðAqq±Š êNý9ssóöövꦟêêjkkkù˜¶¶¶°°°;v;vL,wuÐ}¨2tˆ½½ý“'OŽ;¦¢ÊTGQQµpêÔ)…gŸù|>µðË/¿ :TaSSS{{{êÉ£GBLLL¼¼¼öïßO …ÕÕÕò½h4š¿¿ÿ‘#G!‡R¸"íííB¡:X›’’¢ffè]Peè–wÞyçìÙ³o¿ý6õ‘Ëå444p¹Ü™3gª™dÅŠ...ÎÎÎééé o:pàÀ!C†šššªâèßÿý²eË<<ûì³Ï>ët2#FŒ¥ØÙÙu¸IÞ Aƒ._¾¬þ6mÚ¤fæÔÔÔNf :Ç2@ûPe€ö¡ÊíC• Ú‡*@‡ˆD¢˜˜WWW—éÓ§B"##Ùl¶ê×*ª³bÅ ‡ãææ6räȼ¼<ó¨ U&€Ù¼yóãÇ oÞ¼¹yófBHxxxvv¶ê^êĬ]»–ÇãÅÇÇÏŸ?_ã<j“ŒtÈwß}wãÆ :Nqss#„øùù©xbEsssj¡®®ÎÂÂB<|>èСӦM+**211IKK0`€úë¯9ËÐ ---–––/(ÿ¦M›lll6nÜxøðaõ§4gΜ™3g~þùç/hb  DBa'"Q—¢Êx]¬_¿¾ªªjÖ¬Y«W¯V³‹‘‘Ñĉ !Ó§O¿téÒ‹œô0@ : ¹©‰Ö•„¨2t“É|ã7:=÷Ý4-""¢Ó7)$‘H´>ÐtBîܾ­:¦ºªŠº¦Kýœ +æÍ›·iÓ&ªž+..Öbfé‹"O:åèè¨f¯––ª$=~üø¨Q£´8Ð)tíî;ÍMMÊZZZ*Ê˨2z©þ󟆆†Ô“Œbcc !aaažžžÀÚÚ:..Na/ubV¬Xáâââì윞ž¾gÏ5ó0™Ì””ww÷´´´/¿üRKk :‡Fˆ‘‘Ñ¥sç77ËÛúôi~^“ɤӺpÎ÷˜è}}ý¯¿þZ¶%55µÓ^êĨs–¼C>ŸÏ`0<ØiGxôïß¿þѣܬ,k[[[[c‰XÜÔÔ᩹w÷®“imm]ÒÙµ›²Pe¡ÑhýY¬6“‡µµU••B¡¢¯¯olll7h‘‘­+2 ªLPÆÒÒ²®®®§g/•¡ûÍ7ét:Á K1¤Âu™ }¨2@ûPeè >Ÿ¯§§Çår‡ 6a„òòrBÈŠ+8Ž››ÛÈ‘#óòòä{¥¥¥¹¸¸p8ooïN~4oÞ¼þýû+û622’ÍfKø|¾t9++ËÉÉéÞ½{®¼~Peè&“yãÆ’’’™3g.\¸²víZWTT?þ|ù.yyy</&&&**JEòŒŒŒ§OŸªÏÎΖo¿råÊ‚ N:emmÝŀתL]4yòä?þøƒbnnNµÔÕÕYXXÈGzyy™™™B¸\nMM²„ qqq›7oV1¨ŸŸŸü‘Î’’’°°°ôôôÁƒwu-àu†{ÌtQzzúðáéåM›6íÝ»·oß¾çÎSÑ%%%eæÌ™Ê¾]ºtilllß¾}»4§OŸNš4ÉßߟËåv©#Že膆.—Ëf³øá‡½{÷Rëׯ¯ªªš5kÖêÕ«•uùDö–ö;vp8œY³fùúújœ^+¨2tE‡7:îÞ½[^ÉÉÉÉÉÉš ÑAjjj‡i°•••@ Ps‚3æð" ÊíC• Ú‡*´U&€®àóùzzz\.wذa&L(//OKKsqqáp8ÞÞÞÅÅÅÊ:®X±‚Ãḹ¹92//O>@Í<‘‘‘l6[ú’I>Ÿ/]ÎÊÊrrrºwï^÷V^#¨2tõTö’’’™3g.\¸ÐÁÁ!//ÇãÅÄÄDEE)ëµvíZWTT/ûø!)5󄇇gggË·_¹reÁ‚§N²¶¶Öl½à5„*@Mž<ù?þðòò233#„p¹ÜššeÁæææÔB]]………|€šyüüü¤/¥JJJÂÂÂÒÓÓ¬ÁŠ@¯Ð.‘H$Õ1‰¤µ½]ýœx^&€.JOO>|¸ôcJJÊÌ™3UÄoÚ´iïÞ½}ûö=w°NótðôéÓI“&ùûûs¹\õ{@o$‰ôôTU†mmm]Jˆc™:¤¡¡ËåR/1ß»w/ÕxæÌ™'NlܸQEÇõë×WUUÍš5kõêÕÊbÔÉÓA[[[bbbnnîùóçÕï½Ñ3¡Pu@ccc—¢ÊÐ!Ôu™T¡IáñxK–,9~ü¸‰‰‰ê¾4-"""33Sá·êçé0ŸíÛ·Ï›7ïéÓ§êw€^G ˆÅbeß …BoSU&€Î122Ú¹sg||ü­[·BCCSSSíììTÄQ §Nrtt”¨©©Q'2AAA®®®±±±ô€ÞÂfàÀêû÷…ŠŽh Ÿ=ûó?¬mm»”×eè"ggçàà`—~ýúÍ;—bhhxåÊ…Á+V¬¨®®‹Ål6{ß¾}òñññ|>¿ÓF>³:c@/õôéÓ/¾øâñãDzO?Þš ÁS“Qeèê©ì%%%3gÎ\¸p!!$<<<;;[u¯èè訨(ggg—˜˜¨0F<ò1ò™Õ z©>}úèéé-_¾¼µµ•jimm]µzµžž^Ÿ>}ºš U&€.šF>³šc@/E£ÑV®\ikk»2&¦­­­­­íóÕ«mll–-]ÚÕÇT™º)==}øðáêD }}ýÚÚÚ)S¦XXXÜ»wO[sÏüâÆA£ÑÖ¬YÓÏÜ|ÕªU«>ÿÜÜÜ|ÕÊ•”˜U&€Nihhàr¹ÔKÌ÷îÝ«~G{{ûŒŒ ­OI>ó‹ tN߸qã“–––––uk×jö°L‚*³§ˆ½$ôo"ÑË™ h…¶~PêºÌŠŠ ªÐT§‹¹¹y{{;u#Nuuµµµµ:½4ËüâÆB§Ówíܹ39Yã“ Êìm­­÷kjTÇ<¨­m{~á-è8­ÿ FFF;wîŒollì4˜F£ùûû9r„rèСÀÀ@5GÑ ó‹ t¾¾¾¾¾~w2 Êìåý¥:àöŸ¾œ™€VhýuvvÞ¶m[XX˜§§§@ °¶¶Ž‹‹Sœ””´k×.‡sûöíåË—+ŒQ'|Œ|fuÆ xyOyX[Û ˜™™)ü¶¹¹ùamíKžt‡V~Ð3ÿùOb\Ü¿¾ûŽú8ÚÃâ8`@à¸qÒé·|A-¤ÿûß Çë4ÂùÌŽ½Ñ‘Ÿ~ÒnBT™=ÃÊÆ&ëôiÿI“L™Ì_577ŸÍÎ`eUY^Þ#s tÿ•hzá‹a×`ðš£B×ìŽYÝÖ.‘hÜ÷Ý3´8 ªÌžáêîÞÞÖöËÉ“ý-,†¸¸ô·°ˆÅ<øë?ê>´0ÀiÈT™½ˆV~ÐàÐPuÆ’H$¼ÂÂ{UUl¶ƒ““å[o1ôð@-"¡°A ¨¼}ûî;F}ûög±Pm«D"‘ˆD¢gB¡àÑ#;;75ÿ×úQL vN=ƒF£y nmk[zëÖoçÏS7 Ó 333®§g?üÅ×Ûhå+¹],ËÞâw½ €ÏçLžÌ47§Z$b±6VàÕG§Óû±XýX¬ÁÎÎÏž­ô¨?‹ÕӓЦ§§§§§×ÇÒ²ª¢¢ýÙ3¯‘#¥ß¶¶¶¾ÌUfObõïï3j”X,‹Db‘H$‹E"Z7=«›?¨XQ±x»¢‚Á` 8P"‘BêëêîÞ½8mš™™ŠK7îlVV›‰‰!þ ¯:nÉfß©¨°8°¿…Õ˜¸mƒÁˆ‰‰yi…&ªL]Ñᙚ‰¤¼²²½½}øðáOš›©*³ôæÍþ&ffân\|/ÈãæfBˆ±‰‰ŠeÐFÆÆV66<`¿ùfOÏ@ûôôôúñŠ‹ß?žjY¼dIttô游5kÖtç)˜]˜ÃKÔ!{,“*1%ÉðáÛ%ÏkÊ`ÔÛoã(¦nº[QAqæpT,ƒN±8°êΗ³»xù˜LfuMt—aôÆß$%­Œ‰Ù°aÆõë Æ‹žªL]!½.S"‘”–•öéãááÑøè‘Dæ°¥H$êoa¡ðÜ:ô8+òü_ Ê–A§›˜…Bú‹ß×ôˆ7ŒŒÄb±ì_> [·ÆÄÄDFFîÚµ«›]ïªÌ#‰Ê++mÿþŽ>‘X\ûà­•UOÍ 4ÖýT¶Ê¤Óét:ýуòWÏHÄbËÔMF}û’ç7c)[Bý(8– ¯¶ùHÄb !’—²7A•Ùc †žž^ÙíÛŽööT‹X,¾sï^?ËØÔôé“'=;=èªîÿ "™?íöòëêîTW[¿õ–l¡Ig0>|ȶ´Ôúü¡ûž<~Lékl¬btJSS“¾¾>ªLxUµ¶¶ÒétÙëø[[[?_½ºŸ¹yÂÖ­ ãE_â*³' ´±©¨ªº]Y9ÈÆF,WÞ½kÆd: Ô(¼„«%@|)còIDATëºùƒvx’‘“YߨXU]mõÖ[Ò} ™™YÙ¼‰›tRõ;„ÁC‡ªX¯©166F• ¯*@`nn.=`ùäÉ“UŸncc³jåJ:öN° Êìa6TÞ½[q÷nû³gF}ûvt|TW‡³÷êÎÚá™G4B,úõ«khhlnîonN]Xcgo_xíÚ“'OLpòî±8>ùW¯ŠD"BHmm­°½½¨¸Xú±¢¢Â×LJRu÷îï¿ÿÎb±Nÿò Q±Ê ƒÁ¨ª¨þ7%0°û«©y•y¿¦¦®®n·êëë3 Oê«ÆÆÆO>ýÔÁÉÉ~ðà%K—J»üpàÀ7+W®P----Ñ+V89;;89-Žnkk#Ïÿ)öÃÎÆq==¯^½º{ï^çaÃ\¹Ü«W¯RS~øëéicg7)0°¢¢‚ôþû"‘ˆ*À;&ýÇœ²ÉBnÞºåçï/íecg'úXá )YYY„ï÷ïwó𰱳㸻·gO‡ ÎäªX/*ৃÝ==í–¯\ù¬½JòH ˜;þ GG'gçµëÖQÿwRñ?<èáå&»Š‹‹•ͼ¾¾~vx¸í A>£G_¼tIá+¿F²ÿ>–ýW¬ÂÍ«°QÙ|n½²¿ÔÌe“é ùÛo#æÎ•~\»fíZ…‘Z§l/ÙÕ•Máßuªw…ÅÅÅêì;Ô\²{ïÞí[âã7mÜ8qâD=====½±cÆlÚ¸±«[C~Ç'»î]Ú§tÉ”ÀÀGÁåç5ICCïg΄ü}/£p ƒ©©üÏÿP#||æÎŸO-»yxðx}ú½÷ÞáÇ©ÿ=~Üið`ΰa²1 =jÔå+WÄb1ŸÏoöìjA!äÎ;OžÞÞ>#GJ?Žòõ¥Â¥¥MŸôÞ{¹¹¹>Tg•ÕTÊã™™›«ŽÑ¼ÊÔ××?ñßÿöë×/vݺ¡δ÷Þ£þ!ÕÜÜœqúôæM›LMMõôô†{yI»|ºp!ƒÁxwÚ´[¥¥„–––£ÇŽmþç?ûöí½lÙÿû_ið¢O?e0S§N½ÿþâE‹¨å›·nQߎ{ûí~ææúúúóçÍ»öûïÊ&©b2êP1ü˗‡q8ÆÆÆúúúúzzeýõøñcSSS—¡CUçT½^„µ±±o¼ñ‹ÅŠY±âç£G©µ8“™¹aÆ7Þx£ÿþ«V®L“©?‹‰100044TgæTªõk×öéÓ‡ÅbEÿýà.Eý5R¸y6*›Â±ººI•a³Ù¾>>ÇOœ „ääæ²úõswsÓ,@W)ÛKvÐéNAÕ»B ö„{{{e·(¼õÖ[üûßÒ–€F£™3™ÔGW.—º›V¾¯ê­!¿ã“] õ÷)˜züäIêXãá´´ÐÐPÙo• 4pà@ccc^IIÞåËãÇ·d³ËÊÊ.ýö›·7NW=½.myÕ[x´¯o^^!äòå˾>>>>>ÒT•yåÊ•šššÉ“&988 qr¢¶­²U‰DöƒKÿ+//W½é¼U„¢tëʃ¶¶‰ „‡®Y»öÓÅ‹OŸ:UWW'‘Hl¬­;3 &“IéÓ§u ꃄBáè·ß¦$ ƒÁèl ¯o```bbB-K‰ÿûÇ·''Sˆ´??­,OÙdÔ¤b†YYYýý !fffRRvíÞ»nݰaÃ6¬[7bøpe ;]/fmeE-[ÛØP#Rÿì“¶ÛEÞÞÞýúõË8}ڃ˽výºì»µU4Ê×÷â¥K£G233û-/ïjAÁèQ£T÷êê–W½…}}}¿ß¿_ÐÐPW_ooooaa±hÉACíÒR___BȡÇÇûù™ššB¦OŸ~øðá… ([eƒÑ¥{ž‚Nc´s}«……Å?/~oÆ j™F£Ý«®–þO£ ‹Åb0…×®Q®Ô÷H X¹jÕÑŸåë{£°pê»ïBh4šÂ‰©9™®Î03;[úÃLœ8qâĉÏÚÛ÷ìÙµ`ÁuåÇV;%‘H¤³­¾wςҿBˆ´ýÞÝ»o¾ù¦|_Ù- læTªêêj«çC(œ†üˆD¢gííúúõõõT˜ÂÍ«°QÅ–T¸õToR…“QhJ``ÌgŸÝ*-ý53sÆ *"^Ù½¤úTÿ]×é®PÍ}G— qrrqq9zìõÑœÉt2$++kÖÌ™òÁUŠŽÝ¹­¡pÇ'Ü¥}Šf‡„NKû믿Æßat5ê—_­ªªŠ^ºÔÌÔôHzzAAÁüyó´;=Õ[xÄðáMÍÍÿþñGï‘# !&&&–––ÿþñGKK˶¶­­­ÿ9~\$ åp!Ïž=kllä•”p† S±Ê*åñ¼ÇŽm¤ *‚5?cþðáÃovì¸W]MillÜÿÃîîî„ccã©S¦lظ±¹¹Y(þ~íš² &&&AÓ§¯[¿žºr®¶¶öü… ê Ýþì™H$b2™ííí{÷í£™L&ué§l¤ú“éÒ ïTU=kks<˜rÿþý윜gÏžéëéÑéÝ}iü_<}ú´þÑ£„ÄÄ™ÁÁÔ4&lŽ‹{úôi}}ýÖmÛf½ÿ¾|GÙ- læTª¸øøÖÖÖúúú¤íÛåó(\£Ÿ:uêÙ³gßïßOE*ܼ •ÍGáXnR…“Q¨OŸ>ïNºà“O<==5û—€f”í%Õ§úïºNw…jî;ºê‹§üðƒôcìš5ë6lÈÊΉDb±˜ºûDžê­!¿ã“êÒ>E3!!!çΟÿ×?Ζ;å¥b êXæÓÖÖøøøääæ>¨ÛB´;=[¸OŸ>\w÷»vùx{S->ÞÞ;wí¢î.Ï8}šÁ`üvñ⹜œs99y/úøø¤¥¥©^åNIO”«sÆ\ó’ÈÐÐW\/Y’ †›‡Ç—ÿú—Š$I‰‰†}úx5ÐÞþ½3JÕ{\%›Í^úLž2Åwôèa..TcÿþýçÏ›7úí·í–ý ÔŸŒú3ÌÌ̤î.'„ˆÄâ„mÛœ†µ4èà¡C»¾ý¶«CÈb0£Gò=ÚkĈ¡ÎÎË—/§Úw|óM[[ÛPÇgÔ(//¯èeËäûþm ðxʶíö¤¤G vvž6}úûÿìbôõõ·lÞ¼rÕ*o_ßá#FÈnùÍ«¬Q~> Çêt“*›ŒB³CCoÞº¢è_/ŽŠ½¤šTÿ]×ù®ÇSgßÑA§$÷ññ,óP¹ÀÉ“·'%mMH°<ØqÈïSRöîÞ-ßKÅÖP¶ã“RŸ¢[›#F´´´Nž,ÿ­²úöíKÕs&&&ô9Rzf\ƒé)Ûòª·ð¨Q£êêê¤ùññö®««õütù³g[[Y½ùÜü¹s¤§ …B…«,}:õßþ¿_< Õ(PÇ/¥ *Ð!‰¤þùeüû÷KnÜð d½ùæ””iS§BNž:E-eöÌŸ;WZhjKYYÙ˜qãjÿ~8º©ººÚ{Ô¨[<žVN¬PXo¾)Ýub/©±ºãÃo¤Eò'Ê¥ ÔvÎ>}:䣤<ûôéЈ¼Ç\£G3fLOÏÔ²{ïÞég@cò'Ê_ø=毭%‹÷ô s---.®®V¤<ØÓsèŤ'ÇåTÀ±L2xð`œ.×"##£ÊÛ·/]¸`«äå@г°ãÓqÒG¯«XPU&( âDywϘK¯“ýèã5Ÿ À+§^æááØKê&üFÚÂzþ¤U… õ¾,¥U¦lý^sØKê>üF=¢c•iùÖ[ÃÜÝÓè‘Ù@¯#û#)Ç2ë<ù裗2%èõ-þ¿žÊ>˜@3Ô#Ù% î1ícB$ Fóâp*þúKõÛKÊ>}ºâ¯¿¨™Dz]f]mm6›rø‡zprÐK…FDBÏ_ D#¿(“ª5ºãÿ^©¸t‰"ÈIEND®B`‚gspiceui-1.1.00+dfsg/html/OM-Analysis.png0000644000000000000000000020357612267503542016607 0ustar rootroot‰PNG  IHDR{ k0’sBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î< IDATxœìÝ{\Ž÷ÿð×}wë $ÒJIr*‡r¨$…ÂÌœÕdbsÚìgÌaØf6LvmŽ9åLæ5¤IˆˆèD•t®Ïï®ïn!šÛëùxôØîëþ\Ÿë}}ºÓ«ëþ|®[fee%@DDDDªåäÉ“P888  ºk!"""¢*æëë yuADDDD¯Ã‘ cØ#"""Ra {DDDD*ŒaˆˆˆH…1ì©0†=""""ưGDDD¤ÂöˆˆˆˆTÑ cØ#"""Ra {DDDD*ŒaˆˆˆH…1ì©0†=""""ưGDDD¤ÂöˆˆˆˆTÑ cØ#"""Ra {DDDD*ŒaˆˆˆH…1ì©0†=""""ưGDDD¤ÂöˆˆˆˆTÑ cØ#"""Ra {DDDD*ŒaˆˆˆH…1ì©0†=""""ưGDDD¤ÂöˆˆˆˆTÑ SëСÃܾ}ûVwôŽº~ý:®_¿Ž¼¼<èëë¿‘cáìÙ³Ëå¨U«V•öŸŸsçÎA¡P@GG§Jû~øð!"""‚¤¤$¨©©ÁÀÀ L»ØØX$''ÃÈȨJ_bbbpóæM˜˜˜TØæÜ¹sxøð!êÕ«HNNFLL ŒŒŒ —¿]Ÿ¦§§#::zzzPWW#Ç,,,Dtt4:„¤¤$hjj¢víÚ嶈ˆ@AAêÔ©óÌ>srr hkk¿Ž²+->>±±±HKK{æk<77‘‘‘HJJ‚ŽŽ455«äøˆˆˆ€ššÚ ÿû‡[·n¡AƒUR QeìÝ»ðññDÕ¡¤¤D˜šš ¢I“&oì¸÷îÝÄÂ… «¼ïøøx@,_¾¼Êú|üø±ðóó2™LPú0`€HIIQjïîî.ÌÍÍ«ìøUÉÑÑQÈd²g¶ÑÕÕ;w–/X°@÷ïßÝåU¹Í›7 âï¿ÿ~íÇÊÏϳfÍe^'Mš4aaaeö©Y³¦?~üsû¾pá‚ Ö®]û:JB‘••%²³³ŸÛnüøñ€PSSwïÞ­°]`` tþ»w﮲:ñÝwß½ð¾C‡õëׯ²Zˆ*ÃÇÇG¼]&“J Ebb"jÖ¬‰›7oâÌ™3Õ]Ò+ÓÔÔD·nÝžyåêEÀÎΫV­ÂÈ‘#±wï^\¿~‡ÂСC±k×.xyy¡°°°JŽ÷_dff†nݺ¡FÕ]ÊÖýû÷ѱcG,^¼ÎÎÎØ¸q#®\¹‚'N`éÒ¥ÈÈÈ€££#~üñÇ—ê_GGݺu{­W‹;vìˆAƒUº}qq1¶oß^áó[·n­Š²ˆTÃU›õë×¾ýö[ÀÆ«³œ*add„ãÇcàÀUÒß÷ßK—.aùòå „»»;ÌÍÍáââ‚M›6aðàÁ8}ú46lØP%Çû/úàƒpüøñ ߊ$`Ö¬YˆŽŽÆüùó±oß> 6 –––pttÄôéÓñÏ?ÿÀÒÒÓ§OÇõë×_¸ÿ&MšàøñãèÓ§Ïk¨þå´lÙ›7o.÷¹ŒŒ üõ×_°²²zÃUý7)ª»z7åççcÛ¶mèС|||ðÕW_aË–-X¶lÔÔÔ”Ú¡M›6033þ}ûpúôiXYY¡ÿþ044Tj+„À®]»…ÌÌLtéÒŽŽŽ¨_¿~…µ;v >„——W™ç¶mÛ}}}8;;JJJ}ûöA__}ûö…¹¹¹ÔþñãÇØ³gÚµk i{ff&:„³gÏ¢k×®èÕ«×sçô¥¥¥aáÂ…°±±¿¿¹mfÏž­[·bçÎ5jÔ3ûÛ³gþùç<|ø;w®ðJMjj*öïß+W® gÏžprr*3߬°°¡¡¡ A³fÍàîîþÚæ!ÅÄÄ ::žžžÐÐж§¥¥aÏž=ˆŽŽ†¥¥%\]]ѨQ#¥}9---ØÙÙaÇŽ ÃòåË¥çŸ7&BlÙ²:t€¡¡!6lØ!&MšàÉüÏàà`DDD@SS¶¶¶pssƒL&+sW®\ÁþýûqçθººÂÉÉIºZyôèQdffÂÓÓ³Ì~Û¶mƒºwï^îøDFF"00öööøâ‹/Êmcff†U«VÁÉÉ Ó¦Mî]»”žÏÊÊÂŽ;pþüy¼÷Þ{puuEÛ¶m¥ç333qàÀØÙÙ¡qãÆÒöÂÂBìÚµ ç΃žž\]]amm]îù=z§NBVVÚ·oÔ¬Y8xð ²²²pçÎlÞ¼]ºtAÆ Ë=—RC† Á—_~‰ääd¼÷Þ{JÏíÚµ ðööÆÜ¹sË웞žŽàà`\¼xúúú°µµEï޽˴+((ÀÖ­[ñÏ?ÿ N:èÑ£G…Wísrr°k×.DFFJcȰIÿœ³GÕaûöíJsÛ&Mš$ˆ2m …˜?¾èÑ£‡066­[·–æìüóÏ?R»¢¢"Ñ­[7@¨««‹† Jsv–.]*µ{zÎÞìÙ³£tÜÈÈH@üßÿýŸBˆK—. ###@ MMM@¸ººŠ¢¢"!DùsöæÌ™# …ËåÒE ±qãÆgŽÑÞ½{+5O*//OäççKŸž³WRR"zöì)‹™™™4.óçÏWêkĈB&“ uuuall,ˆZµj)Í÷Ú¿¿¨U«– LLL„B¡2™LLœ8ñ™u QusöBCCEƒ ahh(Ígœ={¶R_]»vƒ S§N„ŽŽÎ IAA4?ËÎÎNýúõB‘šš*ºví*ˆ Hså<==ENNŽâsöæÎ+j×®-¬­­E½zõamm-gÖ¬Y€ˆUªÿìÙ³Òþ™;w® >üÌq-5jˆÂÂB!Ä“9{ÂÆÆFÔ¨QC‡5jˆÕ«WKû•7g/!!AØÚÚJ¯‘Òówvv–ú/ÃÑ£G ¢víÚ¢N:€hÓ¦¸}û¶¸xñ¢¨_¿¾PSSêêê¢~ýú"88¸Âs(³wåÊ!“ÉÄ÷ß_¦»»»°¶¶6l(3g/<<\zm›šš @ 4Hú¾ !DZZšôý­U«–¨_¿¾ÉdbòäÉeæì]¹rEXYY BOOO( @x{{+ÕÅ9{T|||ÃU OOO¥ Ö'OžÄèѣ˴U(B[[[Lž\š(&är¹pvv–ú377µk××®]B‘‘‘!•ƪ"¥aïÀ~Õ¬Yó™a/;;[ sss,ŠŠŠDLLŒ¢££QXXøÜË¥¯¥ßÓ²^½zhÓ¦R»Ò±¹téR¹ýœ?À“qyú{ààà€ÈÈHܾ}úúú¸}û6 Pfß_ýõÌZ+cРAð÷÷GPP¦OŸàÉ¿/666077ÇÙ³g•ÚÇÄÄzöì©´].—ÃÑÑ»wïÆÝ»wqóæM•;¯gϞسgô¸t,Ú·o_f,ºuë†õë×#;;»Êï»Iô"¸—Þ¸Ò•£þþþhРôõÛo¿(UnË–-+Õ÷òåËÑ¥KèêêÂÒÒß}÷]¥þ‘2dH·rذa455¥íàçç‡Å‹#&&„¡¡!zõê…#GŽTدL&ÃÎ;Ñ·o_,_¾;v„f̘;wî<³¦-ZnܸñÌv7nÄܹs‘““Sa›•+W¢k×®ÐÕÕ………–,YRææ¸µkׯ¾}û`mm9sæ U«V066ÆâÅ‹‘™™)µ[²d ¦OŸŽÀÕÕzzz:th™_tÏâääTá—Bñì¿AãããQ\\ GGGØØØ(}…††âîÝ»ÈÍÍ•Úÿ{AÁóƤfÍšå¶}º›7oºvíZ©ó­Ìë·¼× ––üÌýZ´hââb©¦g‰…\.‡µµµ´ÍÞÞ¾L366†……Ëí'>>0iÒ¤2߃Ò0ñññ/)) À“s~Z—.]·nÝBrr2€'aíiJKÇbذaeÆ¢ôŽ¥mˆª ýQ  …­­-Ë|5hÐûöí{©«YŸ~ú)¦NŠ  00iii¸råJ¥îÝÕ¢E ´nÝÛ¶mC~~>¶oߥÛ}èèè`æÌ™¸yó&<ˆ™3gâòåËèÙ³ç3ocmm 6àöíÛX»v-\\\°lÙ2´mÛö™÷Ç+]ÉwðàÁ Û”””ÀßßkÖ¬©0¨|þùçøøãahhˆ_~ùiiiˆÅ°aÃÊ´íÞ½;öïßk×®aÕªUhݺ5>ûì3¥+!õë×Ç’%K””„;vÀ×ׄ þùçŸ k­*ÐÕÕEJJ îܹSî׿Wí>½ºx±1)¯Ò«|å]Å{Y­Zµ‚••¶mÛ†ÜÜ\ìØ±žžžJWËSzUîyW°=z„ÇÃÂÂBé ØØØ2msss‘ccãrû*]äÈ‘ ¿¯eœž6dÈDFF"..NZ…[Q@.½¢ùôÕ_Ò-iôõõ¥w®\¹Ra»R¥ŸbsñâŠǢyóæ/‚DU€aÞ¨M›6A___Œ5ªÌ—··7òòò°sçΗê»m۶ؾ};,ýÃ~ïÞ½JíïíísçÎaÕªUÈÌÌć~(=÷øñc,_¾ÇŽƒB¡€««+¾þúkܸqúúúøã?Êí3<<Ë—/Gzz:4h€Ñ£GcëÖ­øõ×_qÿþ}8p Âz:w;"00°Â_–GŽAZZZ™« ÿ¶qãFXZZ"88C‡•~9==.û÷ïÇ?ü€¢¢"˜››câĉ ÁgŸ}†sçÎáÊ•+HLLÄòåË…š5kÂÓÓ+V¬Àùóç!—Ë+‡ªdaa¬¬,Ü¿FFFJ_AAAؽ{÷s?V­²cR‘&Mš@™«ºB8::>÷­èŠx{{ãìÙ³øé§ŸðèÑ#¥×`EFŒÆcÉ’%HII©°ÝüùóqïÞ½2·ñ¹|ùr™ýŽ?޼¼¼ CJ³fÍ< CONŸ>5kÖ@.—£Q£FËåå^ýþøãann޼¼¼çžã³xyyA¡P (([·nE»víдiÓrÛ–^¡=|øp™ç> …BÆKßßò~>CBB”—ŽElll™±øë¯¿øÆ>*¨" {ôF­_¿åÞÓøß[Y/zƒe!²²²PTT¤´ýüùóÒ[)OÏÃªèØ³gφ‘‘\]]¥ç´´´0gÎøøø ;;[Ú~ïÞ=äääTøy\\¦NŠÕ«W+m¿uë<ó—€\.G@@€47,::ºÌ¹ :êêêÞ_ x2O«¸¸XiÛÅ‹±nÝ:O®Àßÿ)S¦”ùT‚Û·o+Õ:uêTÌš5KéªdBBJJJÞÈ/µ?ür¹óçÏWªaýúõð÷÷G\\ÜsûxÞ˜<ïµbgg‡æÍ›ãÀJoÇïß¿'Ož¬0l<Ï!C „À_|cccôêÕë¹ûhjjâ‡~@vv6ìììªô|AA>þøc|óÍ7èÛ·/|}}Ëôñï×gaa! “ÉàããSî1{öì SSSüôÓOJón¯^½ŠaÆáÀPWW‡ºº:†Š˜˜¥OÈINNÆÏ?ÿ ¥Ï¬}ú{R†††èÑ£Ö­[‡g¾í=pà@ÔªU [¶lQz÷àСCHHHÀûï¿5jÀÔÔÎÎΈˆˆ@XX˜Ô.11ñÉçŒþ‹——ôôôðÝwß)Mwøûï¿1räH•ød R\KoJé DOOÏ Û”””333¥Û²( 1vìØ2mûöí«´·ô^^Ý»w³gÏíÛ· …BZ:iÒ$q÷îÝg~6® >ýôÓ2ÏÍœ9SZZZbàÀbàÀÂÐÐP( év,O¯ÆÍÈÈPúüßñãÇ‹.]º…B!:vìXfåqy~úé'¡¥¥%är¹°²²^^^¢yóæÒ=â”Ú?½×××WŽŽŽböìÙÂÖÖV¨©©I÷$ôññÉÉÉ"..NhkkK÷@?~¼4”úóððD:uĈ#DŸ>}D­Zµ„žž^¥o½ò,•¹Ï^éªY iLår¹077WZݵkWÑ¡C‡2Ǩ옔®Æ>}z™>BBB„–––¨W¯ž5j”èÑ£‡PSSÒk·¢Ïƽ{÷n™Õ¸¥Ú´i#ˆ3f{+W®r¹\˜™™‰ñãÇ OOO¡®®.LMMÅíÛ·¥vBOOOhhhOOO1räHa`` ú÷ï/455•î³÷óÏ? 555abb"F%\\\D5„¾¾¾ÒÏWãRuðññj:t˜ûôJ1¢×!>>&&&3fL™;Þ—’ÉdhÔ¨,,,иqcÔ«W2™ ݺu+ó–’L&CëÖ­aggèÕ«š5k†ë×¯ãØ±c°´´D`` üüüpîÜ9œ9sýû÷GýúõQ£F 899ÁÌÌL©Ïëׯãï¿ÿÆš5kÊ|êFéêÛ´´4\ºt èÔ©~ûí7¥ èšššèÞ½;LLL ©© OOOäää 55QQQÐÑÑÁرc±jÕªJ-騱#¼½½QXXˆGáâÅ‹¨W¯\]]±~ýz¥+¥Ú´i#KÏž=aaa›7oâÈ‘#°°°À¯¿þŠ©S§âܹs8{ö,ÜÜÜвeK¸»»ãáÇHIIÁ¥K—P·n]L›6 .”NôíÛšššHKKÃùóçQTTWWWüþûïÒ[Z‘Éd°¶¶.³Šõé6öööh×®ô¸aÆJŸ8ѳgO´mÛ‰‰‰8uêÔÕÕ1bÄ*­4€víÚ¡}ûöJÛž7&gΜ››Œ!“ÉàääTæj]Ó¦Máááäädœ>}?†»»;¶lÙ"Íu“Éd¨[·.œœœ”æÞÉd2é5øô'E\»vMz+ôéèÏÒ¢E Œ1B:NTTd2ºté‚yóæá›o¾)³(G&“aäÈ‘6l.\¸€S§N¡aƘ5kæÌ™#µKMME@@<<<`cc#¯_¿~HIIADD>|ˆ^½záÏ?ÿTZÝ«§§‡?üˆŠŠÂÍ›7Ñ©S'üùçŸèܹ³ÔÎÌÌ —.]ÂÑ£Gáää¤ôÉ4O³°°@÷îÝ¥¹”7†¦¦&<<<¤ù¥êÕ«‡îÝ»KoÕÛÚÚÂÞÞÉÉÉGaa!<==±eË¥UÒÆÆÆðööÆýû÷qþüydddÀÛÛ«W¯†B¡€ƒƒLMM}ºÌ¶?þW®\‘=z‹-ªTsçÎÅÕ«WË}îÑ£GÒƒ_Fnn.-Z;vLÚ~þüyÌœ9.\PjöìYœ8q¢L?¿þú+.]ºTî1þúë/|þùç¸}û¶Òö;wâÆåîsõêU|òÉ'˜?>âã㕞ûæ›o*unDôöcØ#¢×¢°° å>Wú‰Ooû·)S¦”Ù/99yyyÒãììl¤¦¦*µ©¨ßÔÔT¥}‹‹‹¥ÿ¿qãV¬XñÌzžeÚ´iHKKøqã0wî\ÄÅÅáÚµkðóóC¿~ý0aÂi,V®\‰#F” _gΜ¿¿™ó€Ý»wcÍš5èÕ«úõë‡ââb`Þ¼yðõõEzzz¹uyzzÂÎÎøàƒ<ùÌÜ>øëׯ¯ôùÑÛaˆÞ¨¯¿þC† A¯^½ðÇx€¼¼¼àì쌬]»qqqøá‡*ÕgTTFŒ &ÀÑÑ[·n¬_¿ŽŽŽøàƒpùòe@dd$ OOOxyyAï¾û‡Fhh(¢¢¢àíí=z”8çÏŸŸ~úIi[:u°xñb´nÝ´Õ® IDAT:t@xx8BCC1qâDØÛÛcܸq8yò$ }ûöpqqQÚ?++ óæÍÃ!CÊ=¿'Nà³Ï>C÷îÝѳgODGGC.—£[·n°³³+wŸôôtŒ9C† A×®]‘žžŽ¬¬,`ܸqÉd•["zû1ìÑ¥¥¥…­[·bÕªU(½¡{@@–.]Š7B&“a̘1077‡¿¿¥ú,..Æ‘#G°bÅ >|Ë–-“BÜ_ý…µk×âÖ­[€´´4ÌŸ?;wîDvv6¢££ñé§Ÿ¢W¯^pttÄÒ¥Kñý÷ßãØ±cxøða™·[§OŸ^æãÌ,XuuujÖ¬Yîù………¡E‹€fÍš!,, …NNNhРA¹û`Ö¬Y(**´iÓЭ[7èêêÂÔÔNNN•W"R ü¸4"z£ÔÔÔ0lØ0( xrµlüøñÐÓÓÃgŸ}öRývêÔ cccœ8qæææÐÔÔð$d€‘‘.\ˆ’’$''£¨¨jjjR?aaaøôÓOxôè‘ÒqJûû·¢¢"øûû#77¡¡¡Ð×ׇ¡¡!>|xøð!ôôôÊ­{ÿþýHJJÂõë×qýúu;v mÛ¶ÅĉQPP€… ÂÐÐÐÒÒBFFLLLÊíëøñãX¾|9ŒñÓO?!!!£F€ðñÇ¿Èp‘ aØ#¢7æúõëØ³g<ˆÌÌL¸ºº¢¤¤™™™8qâþþûoøûûãÌ™3åîß©S'üý÷ß°±±„‡‡ÃÞÞ-µKNNF—.]0}úti[éóŸ|ò ЬY3 6¬Ì1¬­­ñÛo¿A[[»víBÇŽŸ{^ü1 °jÕ*i[çÎ=z &&F ›OkÒ¤ ˆŒŒ äçç#;;EEE R:ï . Aƒˆ‰‰··w¹}999IW튊ŠÐ½{wüùçŸèÒ¥ËsψTý6ÿüó:uê$= BVVf̘‚‚¤¥¥!** ÇŽáC‡ „Àûï¿àÉ ×?ÿü#FŒö;v,† †£G"??ZZZX¸p!¢¢¢ ©©‰aÆ!55ƒ ‚ºº: ggg˜˜˜ÀØØàì쌹sç¢nݺ¸sç6mÚ???:tÑÑÑðññ‹‹ Z¶l‰ÇÃÃÃC霾üòK`òäÉÒ¶={öÀÐÐ{÷îÌž=={ö„££#"##I“&•;F–––°´´\ºt ýúõƒ‘‘‘R›Aƒ¡ÿþ°¶¶ÆÃ‡Ñ´iÓçŽý¹sçžžŽ‰'JÛŽ;†:uê}ºÂç:„ÀÀÀ—®eΜ9¸víÚKïODDô®`Ø£J»ÿ>üüüPTTxðà233¥çKJJ”ÚO™2Eéñ¿Ÿôè OOOäææ¾¶±"""z›ñ4ÞQÐÖÖFJJ Nœ8ÔÔTâðáÃð÷÷G£F0qâDà?þö›9s&ìííáåå%m ‡B¡@HHBCC±fÍ|ÿý÷X±bf̘   ´hÑ+W®Äž={ðÕW_¡[·n¸{÷.Ž?Ž`РAèÑ£Ö¬YƒcÇŽ¡¤¤NNN4h/^ŒŸþÆÆÆèׯRRRÿý7qàÀhii½ñ1$""z0ì½ÃÜÜÜð×_!;;ÎÎÎ ††ôôô`ccMMM´nÝõêÕ“ö©Q£~üñGøúú¢OŸ>€'NÀÁÁйsg̘1Cé8‡Frr2N:…¢¢"!—ËahhˆœœDGG£iÓ¦P(ž¼, ‘œœŒ¤¤$i{{{œ:u °eËdgg#//ïõÑ[Œoã¾ÃÜÜܰråJ4oÞÎÎΘ7o\]]PWWGXX’’’”ö³³³C«V­¤+~;vÄ… 111hÓ¦RûöíÛc̘1Ø´i-Z„€´ONN455aee…[·nIûÝ¿ÆÆÆ¨[·.²²²ÑÑÑh×®`Ù²eøê«¯0uêÔ*"""ÕÁ+{ï°Æ#;;ŽŽŽèÚµ+¢££±víZäääà“O>App0nݺ???ìÚµKiß… ¢eË–'''àÃ?ÄíÛ·ñÍ7ßx²Ðâ×_…——†Ž}ûö!>>þù'ÒÓÓQTT„Q£FáÆ˜Úµk‡7â·ß~ƒ¹¹9ttt`nnŽC‡áÿþïÿ`kk‹9sæ 44111>|8233¥W£F 4iÒMš4––<<:`Ïž=ÈÌÌ|f¿éééhذ!ÒÒÒpòäI„„„ ^۹ыá•=4eÊ¥ÇcÇŽ…\.‡­­-fΜ‰  C‡Ò[³¥ÿ1bôôôðÅ_ÀÍÍ ÝºuÃõë×Q«V­2ÇèÞ½;fÏž¤¤$lÞ¼«V­‚ºº:þüóÏׂDDDTi2PÝuÐ 5jÖ­[WÝe¨,___ðg‚ˆˆT¯¯/߯%"""Re {DDDD*ŒaˆˆˆH…1ì©0†=""""ư÷+))AZZšô8//OéÞzYYYÈÍÍŃÊìûøñcäççWyMÅÅÅÈÈÈ<|øB<|ø°ÊCDDô®`Ø{‡ !вeK)´}óÍ7èÝ»·ôü°añcÇ–ÙwÙ²e8räÈ ï§Ÿ~zn›ÄÄDŒ=ùùù˜8q"233ñþûï¿ÐqˆˆˆèöTÌ7PXXˆŽŽðä Þµk×póæMäææRRR ;;;DFFŽ=Š¢¢" …Ý»wGXX²²² „€——>ŒØØXXXX@CC#FŒ,^¼ãÆÃ¢E‹G¿~ýðÛo¿aèСX·nŠ‹‹1`ÀlÚ´ C‡Å–-[‹ŒŒ DFFâàÁƒ3f Ž= —rÏ#??_úd˜˜Lš4 Ë–-ƒ··÷›H"""ÁKS1îîî8tèîÝ»‡þýûãØ±cÈÌÌ„»»;<<<ŒþýûcÉ’%ÐÖÖ†³³3¾üòK4kÖ Ý»w‡««+V¬XœœtïÞ]©ï   DDD@MM nnn€?þøßÿ=Z·n™3gNž< sssL™2#GŽÄ¸qãccc < ,€üüü0xð`! “É*<§ììl¬Y³r¹HLL„©©éëD"""Â+{*ÆÁÁgΜAhh(¾üòKœ8q'Nœ€««+ OŸ>¸yó&Z¶l hÓ¦ bccqèÐ!¸¸¸ÀÆÆQQQ ƒ“““ÔoNNjÖ¬ 555€……€'WÝš4ihÖ¬€'oß^¾|K–,ÁÏ?ÿ,»ÔÔ©SÑ©S'xzzböìÙ(..~æ95iÒr¹\:F\\Ü+ŽÑ»ƒaOŨ««ÃÐÐW¯^… îÝ»!êÔ©ƒû÷ïcÍš5øñÇ¥«p2™ VVVØ¿?lmm!“ÉвeKìÝ»vvvR¿5kÖD5ÇK‹3\\\°wï^”””àСCÒ6}}},Y²>>>ÐÖÖðdî ¬]»8~ü8ÒÒÒpûöígžSTT“'O¢K—.HLL,3wˆˆˆÊâÛ¸*høðሉ‰ôë×úúú€ßÿ_ý5lmmŽøøx4nÜC† ¹¹¹tÕnèС¨S§ÔÕÕíÚµðdÎÞ¤I“P·n]Œ9úúú;v,¦M›†]»vá½÷ÞC£FТE têÔ îîî000À’%KÍ›7ÇgŸ}oooL:šššprrBÓ¦M¥Ú555ѪU+ÈårX[[C¡P`âĉøá‡…™3gBCC!!!¨U«çð=‡ÌÇÇGTwôF…uëÖUw€7ÂÜÜ666=z4/^ “ê.ë•øúú‚?DD¤ |}}ù6.½šîÝ»ã÷ßǘ1càááñÖ="""U÷qé•4hЫV­ªî2ˆˆˆ¨¼²GDDD¤ÂöˆˆˆˆT߯} •”” //¯ºËPY¥·ˆ!""R {o¡÷Þ{³fͪî2*%77111hß¾}u—Ri\dBDDª„aï-ôõ×_Ww •6eÊXYYÁÏÏOú„ """zs8g^›ððp4nÜß}÷/^\Ý当öèµ(..F@@üüü ££lß¾½ºË"""zç0ìÑk±zõjŒ? Å“™C† ÁÞ½{ñøñãj®ŒˆˆèݰGU.55±±±pppPÚ>sæL,]º´šª"""z71ìQ•[¸p!fÏž]f»¥¥%JJJ[ U½›ö¨J:u æææ022*÷ùY³fq±ÑİGU¦¸¸kÖ¬ŸŸ_…m´µµáææ†­[·¾ÁʈˆˆÞ] {TeV®\ ¨©©=³ÝàÁƒqàÀdgg¿¡ÊˆˆˆÞ] {T%îÞ½‹7nÀÞÞ¾RígΜɷs‰ˆˆÞ†=ª ,(wQFEš7o555\¹rå5VEDDD {ôÊNœ8KKKÔ¯_ÿ…ö›1c–,Yòšª""""€a^QQQ~ýõW|ôÑG/¼¯¶¶6úõë‡Í›7¿†Êˆˆˆ`Ø£W´bÅ |ôÑGÏ]”Q‘"$$=ªâʈˆˆ`Ø£W’’‚øøxtéÒå•ú™5k¾þúë*ªŠˆˆˆþa^Ú‚ ðÅ_¼r?PWWÇåË—« *"""ú7Eu@o§cÇŽ¡aÆPWWGFFÆ+÷7aÂ|úé§Ø´iSTGDDD¥öè¥Üºu •ºW^DD:vìøÜvfffHLL„©©iU”HDDD`Ø£—4zôèJ·õõõå ”‰ˆˆª çì©0†=""""ưGDDD¤ÂöˆˆˆˆTÑ cØ#"""Ra¼õ ÑX\\>úè#4mÚ´ºK!z'ݹs}ôz÷î]Ý¥½4†=¢ÿ°¢¢"¸»»cÊ”)Õ] Ñ;)88yyyÕ]Ñ+áÛ¸DDDD*ŒaˆˆˆH…1ì©0†=""""ưGDDD¤ÂöˆˆˆˆTÑ ã}öÞ2%%%(((¨î2^Hqqñ[wŸ*MMÍê.ˆˆ¨J0ì½e‚‚‚°mÛ6˜˜˜Tw)•–••…Y³fUw•vôèQDGGWwDDDU‚aï-4iÒ$899Uw*Ë××·ºK ""ª2œ³GDDD¤ÂöˆˆˆˆTÑ cØ#"""Ra {DDDD*Œaï"„@PPŠŠŠ¤m111HJJµkט˜¨Ô>33eúÉÍÍž}û°eËdffJÛÂÂÂ^¸¦]»vaóæÍزe ®_¿þÂûѳ1ì½CŠ‹‹1dÈ,[¶LÚ¶cÇœ9sû÷ïGxx¸Rû„„üòË/eúpppÀ­[·ðøñctëÖ ‰‰‰ÈÏÏÇùóç_¸¦I“&!##iii˜6m¾úê«—;9"""*ï³÷ŽiÓ¦ ¶oß///˜››+=WRR‚ 6ÀÐЮ®®JÏ…‡‡C¡P ''VVVðóó4mÚÑÑÑprrBãÆÁÁÁhÑ¢N:…‘#G"44—/_Ƙ1cPTT„óçÏC&“ÁÌÌ jjjÒ}í† ‚=z`Μ9ÈËËÃpåʸ»»£mÛ¶ÈÍÍÅÎ;‘˜˜ˆJõ=z‘‘‘4hT=Á+{ïuuu¬X±}ôQ™ç/^ cÞ¼yÒöÇcÑ¢Ehݺ5Úµk‡¨¨(|ðÁضm¬­­áîîŽÌÌL¬]»0~üxDEE!##fffÈËËCll,6lØ€´´4Œ3gΜžžŠ‹‹€U«Vaܸq˜2e `êÔ©¸}û61~üxáÛo¿EJJ :tè€É“'>ûì3„‡‡ÃÒÒC‡EzzúE""¢·ÃÞ;ÈÖÖ­ZµÂ¯¿þª´}àÀðððÀ²eËpðàAÀ™3g0pà@|ùå—ÐÒÒ‚®®."##1|øpœ>}:t@pp°R?ï½÷† ‚aÆÁÚÚnnnðòòÂíÛ·ººº˜1côôô “É ©© mmm´jÕ Û¶m,[¶ Ý»wÇÙ³gqõêU<~üêêêØ±c ±{÷nÀÁƒannŽÇ£nݺˆŒŒ|ÝÃGDDôVaØ{G-X°«V­Â;w¤mZZZ…B™LàI0Û¿?¦OŸ!¶oߎÐÐPôéÓß~û-vìØ•+W*õ­©©Yîÿ—jÕª•ôÿr¹£F¨Q£°`Áøà¨©©ACC-[¶´k×”¶Õ©SMš4––Z´hàIØ»yó&’’’P¯^=,]ºhÑ¢¾ùæ¢wïÞøçŸ0aÂìܹû÷ïÇ'Ÿ| ôìÙ‘‘‘ضmf̘¦M›¾â{÷îÅåg"-- qqqèÔ©Su—BôNºzõ*ÀÒÒ²š+!z9{÷î…ÌÇÇGTw-TI›7o†‘‘œœœª»•åëë‹ÿÊÏÄÕ«WqðàAiá ½Y¥s’ PÍ•½___¾KDDD¤ÊxŸ="z)yyy¸uëVu—¡Òär9,,,ª» "zË1ìÑK‰ŠŠÂ?þ[[Ûê.Ee•ùd"¢ŰGD/ÍÅÅ£Fªî2TVTTTu—@D*€söˆˆˆˆT¯ì½eñùçŸK7@¦ª—žžþŸYKDDôªöÞ2¦¦¦X»v-o½òùúúVw DDDU†oã©0†=""""Æ·q‰H¥ÌŸ?ÉÉÉž|ÄÕ Aƒ`bbòJ}æää`Íš5˜:ujU”HDôFñÊ©”   L˜0S¦LA:uªäc® °{÷î*¨ŽˆèÍcØ#¢ÿ¬¢¢"|òÉ'€cÇŽáË/¿ìر!!!˜2e ?~ŒŒŒ |þùçÒ~°´´ÄÈ‘#qïÞ=ýôSôïß_ÚoÕªUX¾|9† †Î;£V­ZØ´iÆŒƒmÛ¶áûï¿GAA®^½Š}ûöaóæÍhذ!¶oߎ„„¬X±èÚµ+&Ož\#@Dôê8gˆþÓz÷î£GâöíÛèÝ»7Î;‡ääd4kÖ Íš5Æ `dd„N:IûÔ¯_ššš˜}švíÚQ¯^½"i›B¼ ’ì !Þ{ J•*qüøq7nLzz:³fÍ¢aÆ4nܘŠ+°uëÖW~NÐÛÛ›ÀÀ@† B§NˆÇÖÖcccÚ·oOVVFFF„††âëëˤI“hÔ¨ÙÙÙ¸¸¸¼Ó6 !Da‘dOñÞûcÏÚ˱yÅ‹§aÆÊ›4iòÊu˜˜˜0lØ0ÌÌÌ^9ÿ%===  LëèèðùçŸÿ‹!„úÈÓ¸B!„L’=!„B &ÉžB!„“dO!„BƒÉBˆ·¢R©HMM%11QÝ¡h¬¬¬,u‡ „Ð’ì !ÞJ\\K–,ÁÍÍMÝ¡h¬èèhu‡ „Ð’ì !ÞŠ©©)óæÍÃÖÖVÝ¡h,Ù·BˆÂ cö„B!4˜ôì}`îܹÃÌ™3)Y²¤ºCÑXñññ¸ººª; !„¢PH²÷©Q£[·n¥mÛ¶êEcÙÙÙ©;!„¢ÐÈm\!„B &ÉžB!„“dO!„BƒI²'„B¡Á$ÙB!„Ð`’ì !„Bh0yõŠjÖ¬™ò>]]]úôéó—¯qrrÂØØ˜Y³f½ñ6>|ˆ––fffÿ:^!„BIö4P||]ºtaÁ‚ɹsçÈÍÍ¥téÒù– âôéÓxzz’––F‹-°¶¶~í¶®\¹BÍš5ÑÑÉ;”Ê—/Ott´ŒåB!Þ’ìi(}}}j×®……W®\¡qãÆ4nܘaÆq÷î]®_¿žo™ÆÓ§Oš6mÊ™3gÐÑÑáÑ£G”(QâµÛ177WÆ<~ü˜J•*I›„BñÏI²÷PµjU>ÌØ±c8p ÁÁÁÜ»wM›6å«7|øpÆŽ‹¹¹9wîÜÁ××—G½r¥K—fõêÕôèÑ+++zõêEFF”5„Bˆ÷ˆ${è=mëׯW~òàÁÌÌÌ”'nCCC°°°àøñãÜ»wjÕªеkWºvíZ`}ûö¥nݺáääDRRÚÚÚQ«„Bñ6$ÙûªR¥Ê_Ιèý---êÔ©£Lÿ븄BQøä B!„Lzö„o%!!¹sç²lÙ2u‡¢±’’’Ô‚BH²'„x+åÊ•cÞ¼yØÚÚª;%ûVQä6®B!„“dO!„BƒI²§a’’’ppp --M)Û½{77nÜÀßß¿À‹”£¢¢ð÷÷/°žãÇ3yòd&OžÌ±cÇxøð!;wîüÇ1M˜0;;;&L˜À¶mÛxñâÅ?^Çëdgg³råÊB[ŸB¡i$ÙÓ0©©©¸¹¹1wî\¥ìäÉ“ÄÄÄFttt¾úÑÑÑœ>}º@Ù¬Y³°··güøñÌ™3‡;wîP²dI>þøãÓþýûqttdüøñDDD0oÞ¼·kÜ+äää°ÿþB[ŸB¡i$ÙÓ@mÛ¶åÌ™3œ;w®À¼ëׯ3räHœILLÌ7oÞ¼yœ?žS§NñÉ'ŸP³fM,,,puu%55•¤¤$.\¸À‹/X´h7ndìØ±œ?žo¿ý–òìÙ3¢¢¢ðôôdúôéÜ¿,,,¨_¿>ƒ """€‹/2aÂzõêž}û€¼žÆ‘#Gbmmͯ¿þ äõ(N›6¾}ûR MÙÙÙxxxЧO”¶ìÚµ‹þýû€³³3aaaôïߟ-[¶]hû\!„x_I²§´´´puueâĉV®\‰...JùäÉ“144¤aÆXYY‘ššJ:u˜:u*ÏŸ?§nݺ$%%qñâE²²²Xºt)½{÷ÆÒÒ’âääDݺuñóóãéÓ§ØÛÛ3lØ0ªV­Ê“'O0`}ûö¥{÷îJÏž‡‡Ó¦MÃÛÛ[)›;w.cÆŒÁÕÕ•àà`&NœÈ°aÃX·nS§NåÉ“'ùÚJãÆÙ°aÎÎÎ,_¾œÌÌLÖ¬YÜ9sxúô)§NbÇŽ¸¹¹qòäIŽ9Rdÿ"O\\±±±ÄÆÆ’‘‘ñ·õsss \„!„øwäÕ+ÊÜÜœ®]»²bÅŠ|åC‡¥téÒŒ7ŽN:Ѻuk6mÚ„;vìÀÀÀ€]»vñìÙ3~ùåìíí5jÍš5SÖÓ¼ysLLL¨U«mÛ¶ÅÐÐZµj@çΩW¯÷ÝÅ‹pùòeFÍÅ‹±··gß¾}œ8qBùÄ›••£FÂÚÚš1cÆœœÌùóç•O¾effrãÆ Ê–-«ÄÒ°aCe[/?gddÄàÁƒ)V¬}úôQz÷F‘‘£GÆËË‹.]ºê~ùÕ¬Y“nݺðèÑ#,,,øé§Ÿ^[¿I“&Lž<™áÇ¿ñ6Nœ8AéÒ¥©_¿þ¿ŽW!4‘ôìi0'''öîÝË7”²—ÉØãÇ©X±"666¢oß¾,]º”ß~û-ߺµ´´^ùû%SSSå·¶¶6Õ«W§zõêtïÞÌÌLÒÒÒèÞ½;-Z´`ïÞ½ÔªU ÈKÜÂÃñ°° uëÖèêêbnn΢E‹X´h?ýô“’ؽTªT©Ûñâ)))J[Ë•+W ýLEÑ(W®ÞÞÞx{{süøqΞ=Ë­[·P©T„……)/ŽŒŒD[[›:••Åï¿ÿNzz:‰‰‰<{öŒëׯ£R©€¼äßÏÏÀÀ@²²²¸yó¦òï,„Bzö4ZñâÅY»v--[¶dÆŒ@Þm\===üüü;v,÷][ ¬¬¬Xµj={ödÀ€„……ññdzuëVV¯^ýÖq$%%)Û¿zõ*–––”(QCCC?~Ì‚ ¸{÷.—.]bõêÕT«VZµjQ»vmôõõùôÓO™1cÍ›7ÇÇLJŸþoooT*}úôymÛíííiРÁÁÁ,X°€eË–±bÅ îܹÖ-[pss{ë6‰îáÇdddP®\9¢££5jM›6eâĉ¸¹¹qýúuž>}ÊÕ«WyôèóæÍ£aÆLž<BBBðññÁÔÔ”uëÖ¡¥¥Ejj*‘‘‘ÄÆÆ’žžÎ¤I“P©T<}ú”Æ3sæLu7[!ÔN’= S¶lY–,Y¢L7oޜӧOS«V-ªT©ÂÌ™39vì7n¤zõê$&&R£F fÏžÍÅ‹ùì³Ï â—_~AGG‡ýû÷S¾|yRRR˜:u*,]º€Zµj1uêTÚ·oOVV†††˜˜˜(1øùù)=1ööö˜™™°gÏŽ=Š–––$&&²fÍŽ=Jff&{öì`õêÕœ9s†û÷ï³wï^Z¶l‰J¥BWW7ßØÃ—·{ÍÌÌX¾|9¿üò §N¢xñâüôÓO„††rðàA¥·O¸¸8Ú¶m ä=|3aÂŒqww§_¿~téÒ…¦M›²~ýzÖ¬YÃÆ±´´düøñ̘1ƒO>ù„Ò¥Kãåå…©©)999lذAYéÒ¥éСUªT!33“èèhå!-ZH²'„H²§qtuu Œ]jܸ1׃(c¨ ïeéÒ¥ÐÓÓSÆå™™™1tèÐ|ë100à“O>P¶ñDz?&xFFFÊï6mÚ¼2V333elÖ—íÙ³gºM›6¥iÓ¦ÊtÕªU•ß 4P~7jÔHù]¾|yú÷ïŸo=úúúÊDÑ©P¡‚òTuNNµk×fÖ¬Y\¼x‘ììl._¾ ä]”üÑÅ‹)^¼8ÚÚÚ@Þ…ÄóçÏ•[¼¯rýúuªW¯®Lëëëóüùs ·QBñ‘1{B#­Zµª@Ùܹs•ÄV¼{ÚÚÚÔ¨Qƒ‹/biiIíÚµY¹r%_ýuñ“;v¤uëÖ¬ZµŠO>ùDé ~ùΟåääдiSåÕ@111+VL=!„@’=¡¡ÚµkW ì‹/¾@OOO ÑüwµhÑ"ßtÇŽ¹uë=zô ==Ž;²wï^:w¶6Ÿþ9ãÇ'$$„N:q÷î]5jD… ”¤ï>ýôS–,YBRRNNN 0€I“&±páÂwÒF!„xßÉm\!D‘ñööÎ7íää¤üž?~ú/{d_>„ñG¯»…Û¹sg:wî @÷îÝéÞ½û¿ŠY!4ôì !„Bh0éÙûíܹ“ÐÐPu‡ñÆ’““ó=°ñ¾»pႺCB! ${˜—/"þPÄÅÅaccƒ——×+Ç[½  î„BˆB#ÉÞ¦T©R¯übÄûjÑ¢EìÛ·µk×âáá¡îp„Bˆÿ³'ŠLHHæææ4iÒ„Ï?ÿœÀÀ@u‡$„BüçH²'ŠDVV6lÀÁÁ~úé'222Ô™Bñß"Éž(kÖ¬a„ èèäÐÑÑÁÑÑ‘åË—«92ñ>zþüy¾/­¬[·ŽÉ“'+Ó£GæÜ¹s¯O¹lÙ2ÂÃÃÿÑöÞ䧨¨(f̘ÁÓ§O™8q"111ʧ…âC"Éž(tÑÑÑ\¿~]ù&êK­[·æÞ½{Ü»wO=‰÷–¡¡!‰‰‰ýôÓ|_Fyù½åøøxÒÒÒ ”ÿQnnn¾iGGÇ|Ó999–ÉÈÈ &&†Ò¥K3wî\²²²ˆŽŽ~åú„â}&Éž(tóæÍcîܹ¯œçììÌœ9sÞqDB† Æ7ˆŽŽ¦L™2$%%ÎØ±cY°`Û·o'++‹®]»òäÉÚµkÇÉ“'III!33“/¿ü’3gÎEíÚµÑ××gذaìÙ³‡¯¾úŠAƒqîÜ9 ïÛ¸½{÷¦_¿~ØÛÛ³uëVT*NNNtïÞ/¿ü’›7o²iÓ&nÞ¼ÉÚµk §k×®ôèуï¾ûî•íxò䉒>xð;;;Z·n««ë»Ù‘Bñ/ÉÓ¸¢PýòË/XXXP©R¥WÎ755¥Q£FüüóÏtéÒåG'Þ¥Ö­[ÄG}DµjÕ8qâW®\¡uëÖØØØÐ±cGN:ŨQ£([¶,íÛ·'((ˆR¥JѶm[4h@`` U«VUz‰Ÿ?ä=å}ìØ1ôôô¨_¿>7t`æÌ™4kÖŒ¾}ûR·n]BCCÑÒÒâàÁƒ\¸piÓ¦áëë˦M›°··gòäÉtëÖñãdzmÛ¶W¶C¥RñâÅ ®]»ÆÑ£GÑÕÕ¥U«VŒ1B>Á'„xïIÏž(4~(ãu&MšÄ¦M›äa geeÅÑ£G9~ü8sçÎ%$$„_ý•Î;£§§Ç„ 8vì}úôò’ÃÐÐPŽ9‚¥¥%:t 88˜S§N勉‰ /^œ/¿ü€°°0š6m @«V­ "44”²dÉôõõóÅ8~üx‚‚‚hݺ5YYYÛ¦¦M›R²dIttthР/^,Œ]%„EJ’=Qh\\\˜8q¢òPÆëhkk3uêT–-[öŽ"ê`ffÆÓ§O¹wïÝ»w',,ŒÌÌLÊ•+GZZnnntìØQéQ+]º4ÚÚÚ„„„ТE ŒÑÒÒâøñãù^$njjÊãÇ•±y—/_ ^½zDEE@ãÆéÕ«^^^¸¸¸xÀ#""wwwüüüX¾|9±±±Ù¦K—.)Û½zõ*õêÕ+„=%„EKnãŠBÍ7˜6mÚÕoÕª;vìàîÝ»T¯^½hƒjóå—_òèÑ#´µµ)W®7`úôé888йsgÚ·o¥¥%¦¦¦´nÝš¨¨(å‚¡cÇŽüòË/n•ÚÚÚÒ¶m[ªW¯N™2e3f ¶¶¶4iÒ„¸¸8Ê–-K‡ظq#gÏž%&&F¹Àxñâ;wî$''‡nݺQ¿~}êׯ©©é_¶§jÕª :”„„:tè@É’%™:u*õë×gĈ…½û„¢Ph7N%Å¿5zôhœ_;VïUâââ˜>}º|Yã/DFFXàéÑ÷Ahh(‘‘‘ØÚÚªeûIIIèéé)·f>ÌçŸ޾¾>sçÎeÚ´iT®\È»©P¡‚’D>}ú”çÏŸS­Z5ž?NRR’R÷ïdgg“˜˜H¹r劦a`kk‹»»{‘oG¼žŸŸ½zõRs$B¼;;;éÙÿ^pp0Ÿ~úé?Jô*T¨@“&M8xð ]»v-¢è„¦266Î7]ªT)ÆŒƒ¡¡!UªTÉ—¼ýù»ÌeÊ”Qz 144|ãíêè輓DO! ‹${â_yùP†··÷[-?aÂúõëG‡ žâŸhÕª•ò`†Bˆÿ#hˆeÕªULš4éoÊxmmm¾ùæyXC!„("’쉷öðáCnÞ¼YàKÿTË–-‰‰‰áÎ;…˜B!’쉷6wî\¾ÿþûBY×_}uC!„oOÆì‰·Lxx8kÖ¬ùÛºIIIÓ¿Ê•+WäaŒ‡‡¡¡¡ê㥥¥Q¢D u‡ñÆÎž=«î„@’=ñVš5kF``àÕ>}úõÚ9::R²dÉšxGZ´hAHHˆºÃxcÞÞÞìÞ½[^õ#„øÏ‘dO¼•òºŠ’%KþíËj…(J))):tˆ>}úàëëKïÞ½Õ’B¼32fO¡ñ.\ÈÌ™32dûöí#55UÝ! !Ä;#ÉžB£]½z•bÅŠaaaä +X²d‰š£BˆwG’=!„F[¼x13gÎT¦ëׯOFFׯ_WcTBñîH²'„ÐX^^^tïÞR¥Jå+Ÿ5k .TSTBñnI²'„ÐHÏŸ?'00›óŒŒŒèر#{÷îUCdBñnI²'„ÐH .dÖ¬Y¯?xð`üüüäa !„Æ“dO¡q®\¹‚ŽŽæææYÏÉɉŋ¿£¨„B=$ÙBhœÅ‹3cÆŒ¿­W¯^=233‰ŠŠzQ !„zH²'„Ð(;wî¤gÏžÊxÙ³gËÃB&ÉžBc$''søða¬­­ßxCCC:uêÄž={Š02!„PIö„ãïÊxAƒáïïÏ‹/Š *!„P/Iö„!""]]Ý¿}(ãuf̘!k!4’${B°dÉœœœÞzùºuë’Mddd!F%„ê'Éž⃷cÇzõêõÆe¼Ž|YC¡‰$ÙB|Ð’““ ¢oß¾ÿz]†††XYY±{÷îBˆL!Þ:ê@h¾¸¸8¾ÿþ{u‡ñAJHH V­Zêã½6gÎrssÿöËÉÉ!==ýzÿvïÞM—.]000(¤(…B}$ÙE®lÙ²ØÙÙ©;Œ–‘‘‘ºCx¯Íž=›œœœ¿­÷àÁüüüÞèX´³³CWW·0ÂBµ“dO9LMMÕ†ÐPåË—£zéééʱ(„øÏ‘1{B!„L’=!„B &ÉžB!„“dO!„BƒI²'„B¡Á$ÙB!„Ð`’ì !„Bh0Iö„B!4˜${B!„L’=!„B &ÉžB!„“dO!„BƒI²'„B¡Á$ÙB!„Ð`’ì !„Bh0u þ™ßÿÍ›7££óáüÓEGGcgg§î0ÞXZZêã½wñâEæÎ‹©©©ºCy#™™™$%%}PÇâýû÷ùùçŸÕF¡:}ú4Ë—/§dÉ’êå<þ???5GòæÊ—/ϲeËÔ†x|8ƒàÞ½{ 2„¶mÛª;õ!%ê”––F¯^½°µµUw(K÷íÓ§O4h½zõRw(KÎaâÏä6®B!„“dO!„BƒI²'„B¡Á$ÙB!„Ð`’ì !„Bh0Iöþî]»Æ¹sçò•>|€£G¨FJJJr•JÅ©S§pwwçÑ£GoÏ7pssãðáÃdff¾õzćçÖ­[x{{ãííÍÁƒIMM}mÝ´´4Nœ8‘oÚÛÛû•ÇæßIIIQ¶»oß>Þ*~¡‡âéÓ§Êttt4ÄÅÅqùòåõÿ|^KKKÃ××7_Yxxø_999œyò„¥K—*Ó~~~Œ7޽{÷þãíÆÄÄàììLbb"wïÞÅÊÊŠààà·n‡x·¾ùæ”éððp|||ˆˆˆ`×®]êÿù¼öäÉúôéömÛ”²­[·õÚmöë×£GR²dI†ÎÁƒ_[÷Â… ¤§§ÿ“& Q$ä={ÿq;wÆÑÑOOÏó>|Èž={èß¿?+VTʳ³³ñðð`È!888°`Álll2dÿûßÿ°µµåôéÓ@¥J•2d÷îÝ#!!¦M›òäÉ.\¸@Û¶mqppàÌ™3Êv*W®ÌñãÇiß¾=‘‘‘øùùQ¹reúõëGJJ W®\AOOˆˆŒžžÞ»Ùa¢È4oÞ\y?X±bÅØ»w/}ûöåÙ³güþûï¨T*†^`9OOO~üñGvìØ¡Ì÷÷÷§víÚøøøÐ¼ys:uê„J¥âäÉ“„„„дiS:wî äk/·[½zu|}}éС ìÛ·ôôt¬­­©T©±±±øøøP¼xqú÷ïÏG}Dff&»ví"55•bddôŽö˜ÐÕÕ%33“ÀÀ@åßó‚‚‚ˆ§_¿~/^\)¿~ý:7oÞä³Ï>£M›6¬Zµ +++Ê—/Ÿoùk×®ñ믿ҳgOnÞ¼Iƒ ˆŠŠR.,¾üòK|}}ÉÍÍåàÁƒ˜››ÄСC122¢zõêèêêywFNŸ>ÍСC)]º4*•ŠÀÀ@®^½Jÿþý©\¹rî)ñ_'={ÿqÝ»w'''§À[úãââX²d 5jÔ cÇŽ<{ö €¬¬,Œ‘‘zzzœ>}š.]º@BB3fÌ ;;›ÀÀ@¦OŸN«V­ààÁƒ\¹r…#GŽy½*ÞÞÞܺu “| å„ hß¾=<`øðá´iÓ†óçÏãááAll,666œ>}šŒŒ zôèñŽö–(J111\¸pàà`öíÛGëÖ­¹|ù2#GŽä“O>!..ŽÕ«Wç[&!!G1tèPbbbˆ‹‹ÀÍÍüKKKfÏžÍÇÙµk›6mÂÒÒ®\¹ä]Ô¸ºº²råJ~üñGFŽ @—.]¨Zµ*+VdòäÉŒ5ŠÚµk“ͪU«èÑ£ºººhiiѯ_¿wµ»Äÿ·víZfΜYà6¾»»;111DGG3pà@¥<22’Ñ£GÓ°aC ùá‡òõüòË/LŸ>êÕ«3lØ0üüü022¢fÍšXZZ²eË´´´°··';;›ádz}ûvÊ”)CÛ¶mQ©T¸»»óìÙ36nÜÈÆ©S§­[·æÅ‹Lš4‰ÈÈH>þøc¬­­ßj‚oJ’=ÁêÕ«™5kV¾“Mnn. .¤gÏž 6ŒÀÀ@ÆG\\666dgg“™™©\¹zyy1qR« IDATcÆ ,--¹zõ*ýû÷§U«VôéÓçµ·åRSS)[¶ì+ç™™™áçç§ÜÞ»yó&×3iÒ$Æ––V¾q;âÆ««+û÷ïgÑ¢E4oÞ€víÚÑ©S'† ­[·ò-³{÷nÌÍÍ ¤víÚìÞ½[™7aÂZ´hA›6m¸wïÖÖÖ|ûí·Üºu‹›7o*ë*V¬úúú”)S†J•*À‘#G044ääɓܸqCY¯——Í›7ÇÙÙ™û÷ï“””„J¥ÂÈȈ›7o’––VÔ»JüA… °··göìÙùÊ¿øâ † ÆôéÓyøð!ÄÄÄ`iiÉðáÃó]\vëÖ •J•ï–¬ŸŸsæÌÁÊÊŠÁƒ+åþþþ|ÿý÷DGGÓ±cG-Z¤Ì›7o¤E‹„‡‡ç[׊+øúë¯ñóó#''‡'NP±bE222(UªE±{„$Ùä,'OžÌÌ™3•2å¶G‰%”&&OžL… ð÷÷GGG‡ªU«*cœìííñööV’?à/¿›š˜˜@:u8}ú4ÉÉÉʼmÛ¶±dÉÂÂÂèׯOŸ>eÔ¨QÊü%Jäûýòû•âÃÕ«W/\]]Y½z5_ýµRþòÒÒÒ*°Œ§§'õë×'22’† ²sçÎ×.·aÃfΜ‰±±1}ûöUêUªT [[[lmmÙ´i;vì --¯¿þš³gÏ2bÄôõõ8pà `þüùŒ1‚ÄÄDŒŒŒ(Q¢%J”`ÅŠ¯ŒS­‘#GrõêU~ÿýw¥ìç]]]rrrÈÍÍåСC¸¸¸8g¬Y³†Ù³g+åIIIÊ: €¼ïAoܸ‘–-[òÝwßqþüy\]]Q©TèééQ¬XÞŸÔR¥J‘””¤¬;%%EY—¾¾>YYYhkk+ǃƒ5jÔ(‚=#DIö#FŒ **Š/^y·kW¬XÁ¥K—pwwÇÊÊ €Ï?ÿ¾ýö[RRRpvvÆÉɉmÛ¶qùòeóäþ¬|ùòœ?ž'Ožàææ€žžÿûßÿèׯ'Nœ ,,Œ+V0fÌnܸAûöíéÔ©ÁÁÁʺÃÂÂ8tè2&§ZµjE¼‡ÄûæöíÛdff2kÖ,™={6©©©¯íAŽˆˆ`ôèÑXXXpüøqåXzòä 2sæLÚ·o¯$q#FŒPžÎÌÎΦM›6T«VùóçÍgŸ}Æ‹/044ÄÌ̌͛7+‰¡x·\]]Y¿~½2ÄÉ“'ñññÁÐÐ’%KbffFݺu™4iR‡5LLLpttÄËË €>}ú°råJnß¾‡‡ÚÚÚ|üñǬ\¹’-[¶pçÎ<<<èСZZZÄÆÆâææÆéÓ§ ⫯¾RÖݹsg\\\¸ÿ>ýúõC__sss’““iР«W¯ÆÐÐðÝì(ñŸ¤Ý¤I“ï»uë¦î8ÄŠˆˆÀÀÀ€êÕ«ÿëuiiiQµjULLLhÕªÆÆÆ´hÑ‚òåËóÙgŸáîîÎ?ü@Íš5¼^8jÔ¨AFF­[·¦~ýú8p€ß~ûîÝ»ckk‹™™†††Ô¨Qƒ2eÊy=ˆÍ›7çÞ½{ʵjÕÂÜÜœ6mÚðé§ŸâééI\\óçÏÇÌ̌ڵkóÛo¿qìØ1ÆŒï¿þJ½zõHJJ¢|ùòœ9s†+Vê ø€€äÿÄß{øð! 4hÐà_¯KKK‹J•*QµjÕååÊ•£jÕªhiiQ²dI,,,Ð××ÇÀÀ€/¿ü’?þX©_£F ´µµ©X±"Ÿ}ö™Ò;]«V-ZµjÅÖ­[‰gèСÒ­[7yøð!ÑÑÑ|õÕW888`dd„––nnn´k׎’%K¢¥¥EçÎquuåÆÌ™3‡2eÊ`iiÉ®]»¸zõ*ßÿ=ÆÆÆÿz¼äççG¯^½ m}7o’……E¡¬¯I“&”)S†O?ý jÔ¨A‡8wî111,Y²DIÂ5jDãÆ¹zõ*7¦T©RÔ¯_€ PªT)Z¶lIãÆIMMåÀ´nÝSSSš5k†¥¥%äÀT«V GGGôôô ¤cÇŽøûû³téR*T¨@ݺuiÓ¦ wïÞeÇŽ|óÍ7ÔªU‹Ž;òÛo¿ÀìÙ³©R¥J¡ìs˜È/ ­qãÆ©\]]Õ‹xCÞÞÞ˜ššÒ¶m[u‡¢6W¯^eÁ‚¯|‚¸0ØÙÙ!ÿ'þ^hh(‘‘‘ØÚÚª;ekk‹»»»ºÃ(T¤§§¿÷I¬çÏŸÇÚÚš9sæ°jÕ*>ùä“WÖÍÌÌ䫯¾",,ìGùjrdgg'¯^ž²e˾ò5 BQXúô郮®.AAA¬]»ö/ÇÔikk3`À€wÿŒ${âƒS¡B†ªî0„L[[›ž={Ò³gÏ7ª;eÊ”w•oGÐB!„Ð`’ì !„Bh0Iö„B!4˜ŒÙûÀDGG³xñbJ—.­îP4Öõë×åI¶7Ïœ9sX¶l™ºCÑXõÎÊUtt4ÎÎÎ|÷ÝwêEcikk«;ñž‘dïcjjŠƒƒƒòn)Qø~øáu‡ðA011ÁÙÙY^½R„4qßš™™±páBºvíªîP4ÖôéÓÕ‚xÏH²÷yù÷Ï>ûLÝ¡h¬×}§WQ8J•*%w'ŠÐË϶ ñ’B!„L’=!„B &ÉžB!„“dO!„BƒI²'„B¡Á$ÙB!„Ð`’ì !„Bh0Iö„B!4˜${B!„L’=!„B &ÉžB!„“dO!„BƒI²'„B¡Á$ÙB!„Ð`’ì !„Bh0Iö„B!4˜${B!„L’=!„B ¦£îÄ?“€ûöíSw(ëÔ©SêáƒÇüùóÙ¸q£ºCÑXþøcu‡¢±ÂÃÃÕ¡|ùòŒ?kkku‡¢±¦M›¦î M›6¥iÓ¦êEcI"-þL’½Œ‘‘ÖÖÖ´mÛVÝ¡h¬ÈÈHu‡ðA(V¬eË–¥ZµjêEc•,YRÝ!º%JЪU+zõê¥îP4VHHˆºCï³'„B¡Á$ÙB!„Ð`’ì !„Bh0Iö„B!4˜${B!„LžÆB™ñãÇ£R©¨\¹2½{÷¦nݺ¯­ïéé ÀàÁƒßx999hiiQ¬˜\»j‚K—.±~ýz´´´hÔ¨½{÷¦\¹r¯¬ŸžžÎ‚ 0`À_[–™™‰®®n¡Ä,ÄûN’= Œ:::|ñÅôìÙƒWÖüø1K—.eÚ´i˜˜˜¼ñväd)þÎ8zô(7nÜÀÊÊŠëׯ£¯¯_ nVV .䨱cÿh«W¯¦J•*ØØØJÌB½îܹCjj*³fÍ"''&Mš„··÷+냹¹ù?ÚÎ×_Mpp0Å‹/Œ°…x¯É¥°ºtéeË–ÅÑÑ‘1cÆpüøq-ZôÚú;wîÄØØøµWίӺuëªÐp:::XXX`aaA÷îÝ©V­wîÜ!77///zôèÁ·ß~KNN+W®$!!ÒÒÒX·nݺuãÇàĉ0jÔ(²³³ˆgûöí¸¸¸ðäÉÂÃÃ9r$ŽŽŽÜºuKMÿB™2e°°° nݺØÛÛsþüyž>}ÊüùóéÑ£‡rA»hÑ"Î;Ç•+W¸ÿ>ß|ó ÖÖÖœ8q€åË—söìY¾ûî;eý?ÿü3‘‘‘|ûí·¨T*¼½½éÝ»7...¤¤¤¼û QĤgOCU¨P ÆŒ÷ß~ ÀÇY½z5·oßfÒ¤IÔ­[—Í›7SºtiFÍ“'OX³f ÏŸ?göìÙÔ­[gggÚµkGxx8ŽŽŽlݺ•›7oâââÂøñãqwwçСCôèу¡C‡ÊÕ² 99™Å‹pëÖ-êÔ©ƒ……GåÔ©SìÞ½›%K–°lÙ2&OžÌáÇ5jkÖ¬ÀÇLJ±cÇR¥J^¼xÁ÷ßÏ‘#GÐÑÉ;u™˜˜0tèPªT©B™2eèÖ­ÞÞÞ$$$0aÂ>¬¶¶‹·wæÌ/^LNNÇŽcÁ‚Ì™3‡®]»booOïÞ½©S§ÄÅÅñùçŸÓ­[7–-[†±±1VVV?~œ3gÎÅòåË•õwéÒ æÏŸÏéÓ§Ù¿?Û·ogõêÕlÙ²u5]ˆ"!Éž†:zô(©©©dddpìØ1œ˜4i?üðåË—§K—.1`Àêׯ©©)ýúõÃËË‹””¬­­¹|ù2‡";;›3f(ë1b7nÄÑÑ///nݺ…§§'S§NÅÄÄ„nݺ©«éâ=¢««Kƒ €¼¯¿ìܹ---|}}‰eÊ”)$%%)=u/ùúúR£F ¦NJBBçÎÃÜܪW¯þÊm…‡‡óùçŸS­Z5ªU«Fzz:©©©ù MW¾|y4h€J¥âÎ;DEEpøða²³³ñ÷÷'==‹/¢­­ äõú]ºtI¹PÈÌÌTzwÇŒƒ±±ñ+·ÀСC100`ôèÑŒ9R’=¡q$ÙÓPfff4hЀììlΟ?Ïýû÷yþü9çÎS?gffrãÆ e™ .Ïüùó¼“gRR999ØÛÛ¿öf@@sçÎ¥T©RØÚÚâåå%Éž@__ŸÎ;+Ó f``@:u”!+ÊÝ¿:nÌÌ̈‹‹òÆ/ÿ“qËB|($ÙÓPuêÔQN–eÊ”ÁÕÕ•~ýúann®œ ¯^½J½zõøå—_€¼«éF)ómll044¤X±b”/_þµÛ233#66–Úµkóøñ㿬+þÛ*UªÄÑ£G±¶¶fäÈ‘ÊÀûï¿ÿ>_½Aƒ1vìXFņ ”ñY¯R¼xq~ûí7zôèANNK—.%&&†fÍš)½>âÃU®\9.\¸@rr2]»ve̘1ôîÝ›7¤ÔÓÕÕ¥f͚̞=›FáççÇ^»ÞâÅ‹sôèQºwïNŸ>}ÈÍÍeçÎL›6í]4KˆwJ’½ÿ€J•*Œ¶¶6uëÖÅÉɉ-Z°{÷n:¤Ô333#%%…•+WbddÄ7hß¾ýk×›’’Bxx8ÖÖÖLŸ>ádzqãF¶lÙò.š%>~‚réÒ¥èêêR­Z5‚‚‚ð÷÷gÍš5ÔªU‹ÜÜ\V­Z@=hÒ¤ AAAìÞ½SSS¾þúk²²² lcРAx{{“••…ŸŸ‡¦M›64oÞü´Q®V­Zå{…ŠŽŽAAA+VŒ)S¦Ð¥KΞ=ËþýûÑÓÓ£}ûöÊq±~ýzBCCyôè‘r0wî\*T¨P`;+V¬àêÕ«˜™™ÌþýûñððÀÌÌìÝ4TˆwHkܸq*WWWuÇ!Þ··7¦¦¦´mÛöµu>|ˆ–––rÒR©T;vŒ¯¾ú mmmΜ9ý{÷èÚµ+%J”àþýû”*UвeË¢R© B¥RÑ¡Cttt8wî5*°cÇŽ‘’’B×®]yòä ‡¢k×®|ôÑGEÕüwÂÎÎù?ñ÷BCC‰ŒŒÄÖÖVÝ¡h,[[[ÜÝÝÕF¡ $==^½z©;%ç0ñGvvvÒ³§‰*W®œoZKK+_rØ´iSš6mªLW­Z5_]KKË|Ë¿*ÑhÓ¦ò»lÙ² 2äß„-„Bˆ" ïÙB!„Ð`’ì !„Bh0Iö„B!4˜${B!„L’= “””„ƒƒiiiJÙîÝ»¹qãþþþ\¿~=_ý¨¨(üýý_¹ž;v0lØ0–.]Ê;wÞ*žˆˆ&NœÈðáÃÙ³g999oµÈ{m‡øpdggcgg‡&LÀÃ䤤×ÖwqqáÅ‹ÊôÒ¥KÙ³gÏ[m{Ù²eʶW¯^MLLÌ[­çuäX,:GŽaÓ¦MùÊ^~.íUûÝÃÃCy)òK...œüµuK—.]àoêU± ñ.H²§Ú¶mË™3g8wî\yׯ_gäÈ‘8;;8éÌ›7óçϳmÛ6ÌÍÍY¼x1uêÔ¡oß¾¬\¹’»wï‹‹ “&M¢G?~'''e=//\¸iÓ¦1|øpêÕ«‡‹‹ ™™™„……1fÌúôéC`` ÎÎÎüúë¯ôë×;w¢R© ÄÌ€X±b…²LXXýû÷góæÍdggãããÑ#G7nÜ+Û)Þ]]],,,¨W¯öööüöÛo@Þ±öÃ?н{w<== ,·{÷nFŒ©©)/^àÔ©S¸»»3xð`úõë§ô6ïÙ³‡0dÈ"##•uÔªU‹:uê0`À##ƒÉ“'³bÅ ôõõY»v-wêääDûöíYºt)-Z´@__Ÿ³gÏâêêÊÆ¹uë>>>ÄÆÆÅ;wX³f ›6m"77—Ÿ~ú‰€€®\¹‚/^¼`ݺuÚŠ›››r·%""‚eË–áââ‚J¥býúõÄÄÄàääĸqãèÓ§öööEµ«Å„${ÊÜÜœ®]»øã2tèPJ—.͸qã8zô(w # €/¾øÈûfä£G€¼+==Ë—/+t[µjEÕªU©Y³f¾1VV²dɸ™ÀM™2Hll¬2ܸqckk«ôø½T¬X1† ‚¶¶v¾m5 CCCF­,Ó¿Ê”)èQ£þòö(Z:::˜ššR¹re\]]•ïŽVªT‰¶mÛR¢D Œó-sûöm¢¢¢X¿~=§OŸÆËËKé!éÖ­ÆÆÆÔ©S‡ÄÄDôôô=z4óçÏgúôéùŽ·Y³f±dɶlÙ† ˆ‰‰ÁÆÆ†‡2jÔ(ÂÂÂHLL¤eË–¸ººâèèÈСCÑÖÖfÿþýüöÛoüïÿãùóçùn)¾l× AƒÐÖÖ¦F¤¦¦¢R©=z4FFFŒ5J9ÈG}Ę1c )ÊÝ­Qf̘’Д(Q‚#FP¶lY¨ìã)S¦’’Â'Ÿ|¢ÔÕÒÒbÆ ù.zOœ8A‡055ÅÚÚZ9öš4iÂåË—ùé§ŸÐÖÖ¦yóæJoÚˆ#044dܸqùÎI <ccc¦L™‚££#¾¾¾Ü¹s‡)S¦pûöí|‰æKƒF[[›:uê(=½C† ÁØØ;;;Ž9€••ÕªU£]»vÄÇÇ¿òSB¼)Iö4˜““{÷îåÆJÙËÁÁ?¦bÅŠØØØpðàAÈÎΦ}ûöÊ™*Uª`gg—ïvJ©R¥ lëåãÜÜ\>|@ëÖ­ó=üÇœ9sÈÌ̤wïÞ´mÛ–`bbR ¾„„Ê–-›oZZZ”(Q¢À¶ããã•6•+W.ßz’““100øû%Š„¡¡! `À€XXX(å¯:†^òôôdüøñ 0€qãÆaaa¡Üþýórááá8;;3tèÐßá­R¥ Õ«W§eË–XXXpÿþ}lmm100`ýúõôéÓ€2eÊpæÌlll°¶¶&**ŠJ•*1oÞ<-ZÄêÕ«•º/éèè ««[ ö—ÇbBBBc111##£7Úo"ï¢sÍš5ÊÝÈëQ}™ ÅÆÆR¥J\]]éÑ£‡rkþ%ssó|·ìMLL”‹ËÔÔTRSSøòË/IKK£V­Z|óÍ7tîÜ™K—.ùÏ™<'•/_ž§OŸyw@Nœ8‰‰ ööö,Z´ˆ¥K—òÍ7ßh׫Žý—Ûxòä eÊ”ÉW••…ŽŽ|ðJ¼=9z4XñâÅY»v--[¶dÆŒ@Þm\===üüü;v,ÆÆÆXXX`eeŪU«øßÿþÇÎ;iÕª$44”ÌÌL%9|}}}vìØÁÅ‹•ÄoÆŒtîÜ™+W®Ð¡C¶oßάY³(V¬¥J•"66–o¿ý–‡*O ÏŸ?ŸN:±iÓ&öíÛÇåË—Ùµk×_Ô_±b…r;ÎÍÍýû÷ãë닉‰ ‡.ôÁù¢hy{{Œ©©)Æ cçδoß¾@]CCC²³³¹ví~~~ܾ}[I,X€="!!fÍšaddÄ‹/ؼy3Çç‹/¾ ''‡'NЫW/*W®L… èׯ#GŽdèС¬[·ŽƒráÂ|}}•¡ ¯²téR®_¿ÎæÍ›qwwg×®]ìÙ³‡2eÊðóÏ?˱øµhÑ‚:uê(¬†††L›6FáëëËÔ©SÙ·o¥K—fÆŒ´hÑ¢À>ž>}:7¦yóæ|öÙgDEE±fÍîÞ½«|Ç»W¯^´oßžAƒ‘’’™3gX»v-žžžlذ¤¤$¶oßÎâÅ‹•ã«K—.tìØccc|||prr¢_¿~8880qâD<<^^^ª×ÎÏÈÈP]ºt)_ÙÙ³gU‰‰‰ªÛ·o«’““UPݹsG¥R©TÏž=Sݾ}[¥R©Téé骰°0•J¥Råææª‚‚‚TëÖ­S…††ªT*•êÚµkª´´4ÕÕ«W•u‡‡‡«T*•*&&FµiÓ&Õ™3gT/^Ì·ýsçΩ<==UÉÉÉJÙ;wTª'Ož¨BBBTaaaª¦M›ªž={¦òòòR={öL¥R©T‰‰‰Êú^nK¥R©®\¹¢JOOWuêÔIu÷î]•···*>>^¥R©T?üðƒÊÇÇGuðàAÕµk×ÞlÇþüŸx3¿ÿþ»jëÖ­¯Ÿ››«OöÇË—¿/\¸ JKKSŽ·—RSSUgÏžUÅÇǫ׹Ï}έ899)ÞÞÞŠŸŸŸ²{÷n%55UqssS6oÞ¬<}úT×ßß_qttTBBBEQ”ððpåæÍ›Yâ¿yó¦’œœ¬|ùå—Ê“'O”;w*¡¡¡Š¢(еµµâêêª:tH÷mŒ5ê­—ùØ=zTqqqÉöóG)ÁÁÁêÿqqqÊÅ‹EQ”7n(‘‘‘Ê®]»”„„EQÒë¥øøxEQ% @yøð¡âå奤¤¤¨ëxüø±rïÞ=%!!AñññQvïÞ­„„„(ƒ Rç¹té’²nÝ:åï¿ÿV’’’EQ”!C†(7nÜPvïÞ­–°°0% @Q”ô²¹}ûvåöíÛêz”-[¶¨õjrr²ÿ‹±úûû+ááእ¥¥ròäIÅÕÕUyðà¢(вÿ~eþüùÊ… ·>ÆR‡‰™™™)’ì}b^—ì}ÊZ´h¡$''¿Õ2]»vU‚‚‚2M[¸p¡²wïÞÇ!¿‰7óºd/¯ùòË/•°°°LÓ¬­­•äxy1Ù{ŸRRR”öíÛ+¶¶¶ÊÈ‘#GGÇWÎ?dÈL ¥¥rúôéLÓ2’½œ’:L¼ÈÌÌL‘۸⣱lÙ²·î—2wî\Š/žiÚÀ¥Ÿžøà,X@‘"E2M2dH–ò)´ÇÐÐS§NqåÊõašW±´´Tû¾/¯z‘©©)õêÕ{¯Ûy‹${â£Ñ¾}û·^&ã âÕ®];7Ââ­´iÓ&Ë´JCCCLMMßhÞæÍ›¿çhàóÏ?Ï2­B… ¯ì#-ÄÛ’§q…B!t˜${B!„:Lnã~‚ÂÃÃ3½ˆX䮌ñ4Åëݼy3Ë˯Eú{'sãUïíÓ5OŸ>Í4´È]ÃR ‘A’½OÌçŸÎÞ½{Õ~~ìRRRpss£C‡/} íǨFÚá“P§NÚ¶m«ŽEšSG¥U«V:õ ÃÖ­[iݺu¦râ‡~È¥ˆ>&&&x{{2 ÿý7Š¢Ð©S'm‡òÆzôè¡íÄGFÏÌÌLqppÐvBÅÇÇcnnÎСCÙºu+6l§dE&Ož<ÁÊÊŠâÅ‹³víZm‡“+îܹÚ5kgçÎèëKo™OÕ²eËÔ:+::š™3gj9"!Þž¹¹¹ôÙïGF¢gmmM·nÝX¸p!ãÆ#66VÛ¡‰ÈÂ… Y¹r%5kÖT‡DûÔ-X°€E‹1räHþøãm‡#rÈÖÖ–‚ 2aÂ&L˜@Ñ¢EYºt©¶Ã"G$Ù¹.#Ñ›3gµjÕ V­Z’ð‰LNŸ>Mƒ (S¦ “'Ofݺu™Æ`þíÞ½›.]ºP¢D zöìÉ¥K— ÕvXâ-­X±‚üùógº. Ÿø”I²'rU||U’ì‰\“‘èY[[gÛ1]>`ggÇ?ü€:­}ûöx{{²Oš/^¼++«LOáÖ¨QƒråÊqéÒ%-F&ÞÔªU«Ð××gòäÉÙÎ# ŸøI²'rÅ«Zôþ—$|y[`` <à¿ÿýo–ÏæÌ™ÃÂ… µÕ»¹ÿ>±±±4kÖ,Ëg3fÌÀÖÖF£…ÈÄ›²³³`Ê”)¯W>ñ©‘dO¼³øøxÆÏœ9sÞx¨2Iøò® `mmýÒÏ*T¨@­Zµ8wîÜŽêݼjŸ (À¨Q£X¿~ýŽJ¼©5kÖššÊÔ©SßxIøÄ§D’=ñNr’èe„/ï9sæ µk×Î2ðû‹&OžŒ½½=©©©0²œsuu¥}ûö”,Y2Ûy2Ö ù€‘‰7±víZ’““±´´|ëe%០IöD޽˜èÕ©S'Gë„/ïHMMÅÞÞ ‹WΗñ°Æ§ðÞ½„„vîÜÉ÷ßÿÚyçÎ+k|dÖ­[Gbb"Ó§OÏñ:$áŸIöDŽÄÇÇ3nÜ8fÏžãD/ƒ$|yÚ5k033ÃÐðõ÷´oßžû÷ïôkØØØ0cÆŒ7­F”/_ž‹/~€ÈÄë888ËŒ3Þy] ŸM.D&Dî“dOäÈíÛ·122zë[·Ù©Y³&… æÆ¹²>ñq âÎ;|ùå—o¼Ìœ9sX°`Á{ŒêÝøùùN‹-Þx™3f°bÅ yXã#B¥J•rm}•*U"000×Ö'Dn’dOäH‹-=z4S¦Lyç—¢(XZZ2`ÀÚ´i“KŠÉ¼yó˜;wî[-S¡Bj×®»»û{ŠêÝ,\¸0Û‡2²S @F½½ý{ŠJ¼©9sæàççÇöíÛßy]®®®¸¹¹±råÊ\ˆLˆÜ'ɞȱ:пÿwJøEaÚ´iôìÙ“.]ºär„âcpîÜ9ªW¯NåÊ•ßzÙI“&±~ýúîaÇcjjJ©R¥ÞzÙž={rùòeyXã#0gÎS¦LaõêÕ/mùÈHô @»ví´¥øPæÎ‹••‰‰‰ï¼®âÅ‹S£F Μ9C‡Þ=¸úé§Ÿ>|8žžž¹²¾ `ooϤI“re}âÝd Ož<ÁÀÀWWWm‡òQèÕ«½zõÒvâ-I²÷‰Ú¿?OŸ>¥fÍšÚåµzö쉷··¶ÃÐYnnnÔ¬Y“ªU«j;”iÞ¼9eÊ”Ñv¹êçŸÖvïÄÜÜm‡!>2AAA888H²÷ ’dïÖ³gOLMMµ†Ð²ÄÄDLMMiܸ±¶CBñ’>{B!„:L’=!„B&ÉžB!„“dO!„B‡I²'„B¡Ã$ÙB!„Ða’ì !„Bè0Iö„B!t˜${B!„:L’=!„B&ÉžB!„“dO!„B‡I²'„B¡Ã$ÙB!„Ða’ì !„Bè0Cm -ÁÁÁôêÕ‹fÍši;”yôègΜ¡xñâÚ%G=zÄ´iÓèܹ³¶CááÇ :” h;” ãâÅ‹k;”¹zõ*§N¢X±bÚ%×ìÙ³‡Ó§Ok;Œ ÃÜÜ\Ûa¼m‡ðR–––ÄÇÇk;ŒIKK#&&æ“-IIItëÖAƒi;”.Ï&{Š¢Ð©S'–,Y¢íPò$WWWÒÒÒ´^z÷î•••¶CÉ“¬¬¬PEÛaäªóçϳjÕ* ( íPò¤9‰ÿhQ]çííͱcÇ´†VÈm\!„B&ÉžB!„“dO!„B‡I²'„B¡Ã$ÙB!„Ða’ìå‚„„‚‚‚ "::ú•ój4"##3M‹ŽŽæÙ³gïCrr2wïÞ%))éÖóøñc#<<}}}öïßOÁ‚ßjyÁ¡C‡°¶¶¦Q£FDGG“˜˜ˆ££#•+WÎ2o||<½{÷æüù󄇇óÝwßHÕªU fÆ Ô­[÷­¶îÜ9†JóæÍ ¡M›6,]ºô­Ö1räHRRR(R¤çÎcàÀ¬^½€Ë—/3pà@4h@dd$5bÍš5oµ~ñv¬­­¹rå •*U"$$„’%K²{÷nôôô²Ì{îÜ9Ž=Š••åÊ•ãÌ™3´k×€ùóçÓ½{w:uêôÒíØÚÚâææFÕªUñööÆÆÆ†æÍ›¿tÞ 0iÒ$jÔ¨ñFû°cÇV¯^M½zõ¸yó&¥J•b÷îÝ”/_ž˜˜¾ýö[ž?NÕªU‰ŽŽÆÅÅ…%J¼áÊ»LLLèܹ3†G1qâDFŽùÒyÍÌ̘?>...lß¾k×®add@§NðòòzérIIIôíÛ—Š+ªIâ®]»^:orr2'NÄÙÙù­öãܹstìØWWWz÷î @JJ Æ ãÆ|þùç±}ûvªW¯þVëé¤e/— 4gggŽ;†©©)ÎÎÎDGGÆ­[·¸yóf–eÆŒØ1c¸pá...X[[cmm @@@ñññœ;wŽÐÐP ý '£å022’ÐÐP¢££™0ažžžìÝ»— .ð÷ßóøñc ýÇçáá¡^¹EFF®^eg1b3fÌàÊ•+œ={–-[¶0pà@µ¥p̘18;;sâÄ êÔ©ÃþýûßßÁüÄõîÝgggŽ9BÏž=qtt$..ŽçÏŸsïÞ=®]»–e™ &УGþùçöîÝ‹­­-³fÍÒ[[ãââðððP¿³°°0"""€ô›àà`’’’3f §NÂÅÅîÞ½ËÝ»wô¿óçÏóüùsu¹ÂÂÂÔò’ÁÆÆ†Ý»wãëë‹¿¿?×®]#--Ñ£G³oß><ÈÙ³g ãòåËïíXŠtÓ§OÇÙÙ™Ó§O£( gΜáùóçÄÄÄpéÒ%üýý³,S·n],--ILLÌòYjj*·oß&99™'Ož˜˜ÈÖ­[9xð ëÖ­cõêÕ8::àççGjjj¦:lÊ”)T¬XHo;qãF¦õGFFrùòåL-5ÄÙÙ™[·n1`ÀìííX¸p!mÚ´ÁËË‹ƒbnnΊ+Þý åEŠÁÙٙݻwsèÐ!-Z¤g‘‘‘œ={ö¥-© Ìö³OŸ>%44”gÏž‘ÀîÝ»iÕª›7of×®]Ô¨QƒK—.Ndd$OžU«VU×sâÄ ôõõ¹qãôèÑ öîÝË•+WX¿~=7æöíÛôíÛ—Þ½{ãëë›)–ÿþ÷¿-Z”«W¯fÚ¿ØØXãàÁƒ¯\¿x¿fΜɒ%KÐ××gøðáÔ«WC‡ѦM~ùåLLLððð E‹™–›8q":tÈÔò¶oß>¦NJŸ>}°··çßÿàÂ… 888ðÃ?È’%KèÕ«=bÅŠ+VŒ1cÆpçÎu][¶laݺuÔ­[—C‡©]Q¶nÝŠ¡¡!Ó¦MãÊ•+Yö§X±bDDD ÑhˆÍrk._¾|¹xôtWTT¦¦¦h4*Uª¤&èaaa,]º”råÊáî¡¡!¿ÿþ;æææ¸¹¹©ÓwíÚ…‡‡zzzêE]‡زe ŽŽŽÌŸ?u;uZ||<½zõbÈ!@zßã›7oròäIRRRرcÿüóåÊ•ÃÒÒ’¸¸8ÌèÑ£9zô(;vD£ÑÐ¥K\]]6lÏž=Ë2„¥”‹œ“d/—˜››óË/¿d™^¯^= k!­Y³&.\ ::š¢E‹âääDZZÕ«WW;Úf·, ^ùÖ©S'ËÐ;[¶l¡J•*(Pkkk6lHÑ¢EÕÏ?ûì3 ýŸœœL5pww'>>>S?¼“'O2eÊüüü˜>}ºšœˆW>|8666Y¦›˜˜éßç‹©+W®Ì½{÷ ¤bÅŠêí­úõë«à_URRR€ô²ð¿C¾íÝ»###ªU«ÆŒ3011¡P¡BêçeÀØØø¥•œ;wŽÎ;S§NÜÜÜPEí/väÈ¢¢¢ÔJ^¼K—.¥_¿~Y¦¿ª\èëëcoo¯¶äAúm´Œ~Qµk׿ßÿåÑ£GìÒ!’ìå‚ *¨Ú‹J—.­ö¥+X° uëÖ%_¾|ê­°µk×’ššJ«V­øòË/É—/ ,@OOúõë“?~jÔ¨A‰%èß¿?»ví¢GÔ®]›Ê•+c``ÀÁƒñõõ¥]»vLš4‰… R°`AF &L J•*j `F?À©S§ª}yÖ®]‹±±±z5Ÿ’’¢žªT©B¥J•ÞûqÔeÊ”¡fÍšY¦+VLnddDƒ 000 I“&,Y²„’%KÒ®];Ú¶mKxx8+V¬ÀÈȈ:uê¨Éz•*U(S¦ ½{÷æÔ©SjËKFE»gÏ"""èØ±#cÇŽå矦T©R :”72~üxJ–,É–-[Ðh44hЀI“&1f̵/Nƒ ˜1c={öäðáÃlÞ¼™ *àè舢(|õÕW >œI“&IÙxÏjÕªEéÒ¥³L¯Zµª:=£®)Q¢5kÖÄÈÈ(SÂôË/¿Ð¶m[J”(Aß¾}yøð!ýúõ£H‘"Ô¨QƒR¥J1þ| Ä_|Á¬Y³ÔÖé5j°{÷nºvíÊСC)[¶,&&&caaÁèÒ¥ 6¤R¥JÌ›79sæÐ³gOêׯOÑ¢E©P¡gΜ¡[·nüöÛoôîÝ›±cÇðý÷ß3xð`ÆO×®]144dĈàÈ~úLMM_:ýÅ~µ 4ÀÈȈzõêQ°`AªV­JÙ²eôÖü+V¨õмyó=z4óçϧAƒT¯^I“&OË–-éÔ©ÑÑÑ >H¿30|øpæÎ«ž»š4i‚¾¾>¿üò ƒf„ L:•êÕ«Ó¥Kz÷î•• àÚµkLœ8QíB¤§§Çĉ¹ví$ˆie IDAT}úôaÚ´iüøãtêÔ‰§OŸ2yòä÷y8u›™™™’={öL™9s¦¶ÃøàvíÚ¥,Z´HÛa(...ÊÑ£Gµ†¢(Šâïï¯,^¼XÛa|p'NœP~üñGm‡¡Ìœ9S‰ˆˆÐv¹jÊ”)JBB‚¶Ãx©“'O*‡RÒÒÒ+++åܹs¯œ¿Q£F(²Üó1Ÿ×>æØæÌ™£DEE)¡¡¡JïÞ½_9ï¦M›;;»Yî¸{÷®²råJm‡ñÁ™™™)Òg/)Q¢„zU'ò¶"EЍ¯ÏyG«V­°¶¶fûöítîÜ9ÛÖ¡ />Ý-t[·nݘŒÿ«÷còÏ?ÿP¿~}m‡‘'%''«£Xå5y6Ù+T¨#GŽÌv0hñ~¹ººªÃƒi[±bŘ4iR–Ñ'ćaee¥¾SRW”(Q‚/¿ü###m‡’'­_¿^Û!d«eË–YF=†···: A^“g“=!„x_ (@Ÿ>}>š š¼æøñãÚAˆŠÜcB!„Ða’ì !„Bè0Iö„B!t˜${B!„:L’=!„B&ÉžB!„“dO!„B‡I²'„B¡Ã$ÙB!„Ða’ì !„Bè0Iö„B!t˜${B!„:L’=!„B&ÉžB!„“dO!„B‡I²'„B¡Ã$ÙB!„Ða’ì !„Bè0Cm -±±±lÞ¼™C‡i;”<)&&†Ù³gk; """XµjÛ¶mÓv(yRHHS§NÕv¹*22’µk×bh˜g«X­ºyó¦¶CÈ–——ݺuÓvyR\\-[¶ÔvZ‘gk¢Â… óÝwß±dÉm‡’'¹ººR @m‡@‰%˜:u*VVVÚ%O²²²úhÊBnIIIÁßßm‡’'ÅÄÄh;„lU«VQ£Fi;Œ<éÉ“'„††j; ­È³ÉžB¼/eÊ”aÉ’%:—Ä~*ÌÍ͵B¶J”(A=´FžäííͱcÇ´†VHŸ=!„B&ÉžB!„“dO!„B‡I²'„B¡Ã$ÙB!„Ðaò4î+L˜0EQ¨T©_ý5Ÿþy¶óïØ±FÃðáÃßxiiièé顯/y÷ÇlúôéÄÅÅP®\9úõëG“&M²ßÅÅ…ÆÿÆÛHKK×uäÁÁÁÌ;Wý¿N:|óÍ7T«V-Ûelmmiܸ1:uzãí¤¦¦b``€žžÞ;Å+>œ}ûöqòäIòåËGûöíéÕ«ùóçéü¬Zµ òåË÷ÆÛINN~«ùŧM’½W8tè§NÀ××—=zpïÞ=Œ³Ì›ššÊo¿ý†»»û[mÃÎÎŽJ•*1pàÀ\‰Y¼{öìáĉ@zåÚ¯_?¼¼¼(Q¢ÄKç·¶¶æøñãoµmÛ¶‘””„™™Ù;Ç+>n‘‘‘ܾ}› 6pñâEúõëÇõë×_:¿ýõ'N|«íLœ8‘É“'Ó AƒwŽY|/^¤^½ztéÒ…¸¸8/^Lppp¶ßýºuëhРÁ['níÚµÃÓÓ37BŸiNzCCCêÖ­KݺuéÕ«5jÔÀÏÏFÃÎ;éÓ§³fÍ"--•+W‚««+ üþûïôêÕ‹5kÖàááÁ¡C‡øþûïIIIÒGضm«W¯&44”k×®ñÝwß1eÊ|}}µ¹ëâèëë«e¡[·n4nܘ;wîé­x_ý53fÌ )) ž={ÆÞ½{INNfÓ¦MôêÕ‹¥K—pýúuöîÝËäÉ“ ÒßìnooÏÆyôè·o߯ÌÌŒ‰'ªÛº¥P¡Bj™=z4¡¡¡$%%½´þX¼x1?æÌ™3„‡‡³páBúôéÃÞ½{عs'gÏžå‡~P×ïååÅéÓ§™3g'OždРAÌ›7çÏŸøo¬R¥JÔ­[—fÍš1bÄ®^½ ¤'ý?üðƒæÚµkx{{ãââÂîÝ»INNæŸþaäÈ‘Œ3†G°`Á<ˆ£££º~[[[|}}qtt$66–+VðÍ7ß°{÷nõn–Ð-Ò²÷ ÑÑÑê< víÚÔ«WÓ§OsþüyvïÞ 666XZZrøða¾ÿþ{Ö¬YCZZ{öìÁÌÌ WWW™3g'OžÄÈÈHñêˆ#¨T©¥J•¢wïÞìܹ“ððp&Nœ¨¶$ íKNNVËÂÇ)Z´(-[¶äêÕ«¸¸¸°cÇþøãæÌ™ƒ [¶lÁÂÂ'''žûì•]TħI’½WÈ—/7 hÑ¢lß¾===\]]yúô)Ó¦M#**Jm©ËàêêJµjÕ°´´T[ìêÕ«Gÿþý©^½úK·uýúu6lHõêÕ©^½:ÉÉÉÄÅÅQ¨P¡÷½›â ¨e¡T©R¬_¿\\\ ÅÒÒ’ÄÄD?~œi9 (À´iÓ BOOž={Ò·o_>ûì³—nËÏÏòåËS»vmŠ)Bpp0åÊ•{¿;)>¨¢E‹ªe*!![·n/¯?^¬7Nœ8F£Q/"ÿý÷_FŒ‘m9vì_ý5¥J•bÀ€,_¾üýîœx'Õ«W§qãÆ$&&rႃƒ)X° >Tï$$$¨.súôiâââÔ–\òçÏ™™Y¶·y9Â(R¤Æ ãøñã’ìé Iö^¡@™¬Þ¶m!!!”-[–ž={ÒªU+¢££Õ[qÊ•+Ç/¿üBéÒ¥ ÂÈȈ˗/S¾|ùl·U¡B…L·Ve¨¥ˆA¦²°ÿ~>ž§OŸfZ®lÙ²Œ7Žÿüç?„††’ššJ@@À+ËB™2eˆˆˆPÿ¥H‘"¹¿SB«J—.­–©®]»ªÉýËêÇz­^½:‹/FOO???*W®Œ··÷+ËTÅŠÕd2>>ž‚ ¾Ç=ïªI“&jÙHIIáÔ©SüôÓO4hЀŋ0hÐ *T¨ .S¶lYÚ·oµµ5  xñâÙ>Üÿî)R¤ˆz~ºGúì½…Š+rêÔ)¾ýö[æÎËÔ[o/2dãÇçÈ‘#Œ?þ•«‘‘çΣdÉ’(ŠÂÒ¥K±´´¤yóæòTæG,£,ôë×eË–±ÿ~,,,2%iƒÆÂ‚Ç3nÜ8 ³¿¾244ÄÓÓ}}}Ê•+Çüùó™={6ÕªU““³ŽÓÓÓÃÐÐ//¯×Ö=zô`üøñ>|˜©S§R¬X±l×kddÄ©S§hÛ¶-nnnØÛÛ3vìX5¿Œº¦D‰³hÑ"œœœØ¸qc¦ú¤yóæ\ºt‰ 6`ccùsç^¹Þ   îß¿Ï!C°°°`Ó¦Mlذ޽{¿ï]Ú`ff¦äEÏž=SfΜùÊy.^¼˜éÅßß_QE‰ŒŒT¶nݪܿ_QEÑh4Êõë×ÕyŸ>}ªlÙ²E TEQ‚ƒƒ•'OždÙFhh¨²víZ%&&FÑh4ÊÑ£G³lW¹¸¸(GÕvŠ¢(Š¿¿¿²xñâWÎó¿ß‰¿¿¿âãã£(Š¢ÄÄÄ(Û¶mSnß¾­~~õêUõïçÏŸ+[¶lQ=z¤(Š¢„……)Y¶¥¬[·N UEQþþûoåÌ™39Û©OÈÌ™3•ˆˆm‡‘«¦L™¢$$$dûy||¼rãÆLÓ¼¼¼”àà`EQ²Ö111j]£(Šr÷î]ÅÉÉI‰ŒŒT%½<†‡‡gÙŽŸŸŸ²nÝ:EQ%99YÙ³gr÷îÝwÛ¹OÀÇ|^{]l¾¾¾JHHˆúBB‚rîÜ9õ777寿þR’““EQ”û÷ï+111Š¢(Jjjªââ⢸»»+FQ”ÌuÑ‹:¤¸»»+Š¢(OžwïÞUV®\©í0>8333EÏÌÌLqppÐvÎùÁ±jÕ*µƒ´ø°\]]³Ü&×–€€œ±²²Òv(y’••VVV/^\Û¡äš©S§²dÉ銡%æææ|¬çµ96]çííͱcǘ:uª¶Cù ÌÍÍå6®B!„.“dO!„B‡I²'„B¡Ã$ÙB!„Ða’ì !„Bè0y©r64 »wïÒÇEmÙ²e¶£_œ9s†V­Z©/¯¼sç.\ M›6˜˜˜ä(†Ž?Ž‘‘=zôÈÑ‹uSSS9~ü8þþþ˜˜˜Ð©S' }ø¯ýû÷é/ nÕª•+W모¿?†š5kæ(~]²wï^RSSÑÓÓ£iÓ¦ÙŽ~páÂ6lHáÂ…ô7Ù»»»óÅ_äx@úˆˆŽ=Š¢(ôèу%J¼ÕòOž<ÁÃÀ… Ó¢E‹L£-ÄÄÄpäÈ’’’èÑ£¥K—δüÓ§O‰‰‰¡nݺ9Š_dɱcÇ€ôwáµk׎2eÊd;ÿñãÇéÚµ+gÏž¥zõêT­Z€¨¨(îÞ½‹©©i¶Ë>~ü˜S§NQ·n]¾øâ ôõ_~ÿüùs‚ƒƒß¸Œ*ŠÂ®]»€ôwDš˜˜P¿~ýLóœýÖ±ë¢I“&IXX3fÌà§Ÿ~ÊvÞU«VñìÙ3ÒÒÒèÑ£&L@£Ñ`kk˰aÃÞzÛ4oÞOOO‚ƒƒéСwïÞ}«uüóÏ?lÚ´‰ÈÈHNžyòd¦OŸŽžž«W¯f„ Y–={ö[mK¼ž${¯P¼xqÌÍÍùá‡غu«:ȸ««+nnn,\¸7ndZÆÖÖSSSuÄggg  Ãßߟ«W¯òûï¿cggGTTñññüõ×_êòWÊ?þø#k×®ÅÆÆ†™3gbggÇ¡C‡€ô«¹µk×booOhh¨S@@kÖ¬Q‡o[²d mÛ¶åðáÃLš4 OOOŒŒŒØ²e >,—¹¹9“'Oæ?þ`ûöíYŽ¢(8pð÷÷çßÿ娱cìÙ³FCRRÇŽãöíÛØÛÛ—»_ÄG @˜››3qâDvìØÁÎ;ôã~áÂ,X%Aúã?¨R¥ §NbüøñlÙ²…Ê•+óøñcñôôdÆ ¬X±‚ÐÐPÒÒÒ2ð3ʬY³˜?>vvvXZZ²qãFµb eýúõ¬Y³†gÏž©1²zõêLCð5lØsssV¯^ÍáÇÕw}Í›7iÓ¦±~ýz¦L™Â¶mÛÔ²ö¿Ž?Κ5kˆŽŽ&00Ë—/ãî“©©©8p___Ö®]KTTTn~T½zuÌÍÍ™:u*K—.eÇŽÄÇÇsâÄ öìÙÃâÅ‹yøða–åjÔ¨½½}–éñññ888pïÞ=\]]pttÄÚÚš0þ|š6mJ\\'Ož$<<µ+\¸°:üVxx8«W¯æÚµkêú=zÄ’%K2]-Zsss¬¬¬¸wï 55•£G››fffìÞ½___’““³ÄýàÁ–.]ʽ{÷€ôòûøñcìììÔúíàÁƒDGG³víZu>]Ö½{wÌÍÍY´hM›6ÅÍÍþù‡[·n±téR¶lÙBZZZ¦eÚ¶m‹ÁÁÁYÖwïÞ=ìííyöìîîîÄÆÆrëÖ-æÍ›Ç AƒØ²e þþþj}ŸñûŽŽ ZµjêØº—/_ÆÎÎ.ÓhAÇgùòå™$Ž9BïÞ½INNæÑ£G@z«åùóçùçŸ077çÏ?ÿ$99ù¥õÄÓ§O±±±ÁËË H/!!!¬^½Z–òôéÓ„……±~ýz®_¿þ.‡\çI²÷ IIIxyyqõêU–/_N»ví°´´äâÅ‹´oßžáÇgZæÌ™3ôï߀èèh°´´$þüܾ}›Ñ£GS³fMBCCY±bÑÑÑlÚ´I]~åÊ•\½z•Ž;ªÓ;vìÈĉQ….]ºP¿~}ŒŒŒ˜5k&L`íÚµT¨P:œœÌ©S§8p`¦øú÷ï››~rðòòâòåˬZµJÝ¿mذ"EŠàåå…££#·nÝâÛo¿%44oooÆG\\ÇÇÕÕ•B… ©·ŠuIjj*^^^\»ve˖ѦMæÎËÑ£GéÔ©£G&%%E]æÌ™3|ûí·@úø¶L˜0bÅŠáçç§\¯ÑhX¸p!)))¬]»V]>£,\¸p!Ó˧[´h¡¶ôtëÖ5jP¶lY¦M›ÀO?ýÄo¿ýFõêÕùꫯ^Z‘6jÔˆëׯ“––†‡‡Ý»wW?«W¯ ,ȲŒ££#~Ò···çÁƒôïß___ž?ÎàÁƒQ…1cưyófÊ”)C‡Ðh49;è:.** ///<==Y¿~=íÚµ#&&†#F@­Zµ˜8qb–åæÎ˦M›xòäI¦é]ºt¡dÉ’8::bffÀ7ß|ÃØ±c™7o/^dΜ9*Tˆ;w2|øpªU«Æ¬Y³8tè>>>>|˜ØØX¾úê+jժźuëØ´iׯ_ÇÌÌŒ–-[²víÚ—¶BêëëÓ¢E <<<ððð G™>srrR† 7nÜàøñã4hЀ±cÇé/¤^¾|9•+WæË/¿$>>ž7òý÷ßS³fMÌÍ͹páÂ;ÿ™ŸŸ^^^}:Õ«WgÔ¨Qìß¿ŸÂ… S·n]:wî̦M›P…)S¦ Ñh3f þù'¥K—¦}ûöh4 gãÆüþûïÔ«W:‹……7oÞ¤V­Zôïß_M·oßÎðáÃ8p zqìáá‘åEú›6mÊ2äßÓ§OqttÄÔÔT=Ç.X°€Ÿþ™š5kÒ»woqvvføðáT©Rkkkõ"Gd%}ö^!22Rmýhܸ1C‡Ò+®™3gb``@áÂ…Õ[*Þ·*£oݹsçØ¶m|ÿý÷”/_ž:Э[7jÖ¬ùÒ*@ZZ†††/}û¾žžîîîܼy“‹/¤'¦ .ÄØØ˜«W¯rîÜ9âãã³ô½*W®‰‰‰@zŸ@ôôôhÞ¼9ƒβ½>}úðå—_¢§§ÇÉ“'©X±"M›6U€¦¦¦h4 ( &ž§NÂÛÛ[§úw%$$¨e¡^½zê­ñ””~ù匩V­±±±ê2-Z€+W®àààÀÓ§OéÓ§­ZµÂÔÔ”>}úʘ1c²ÝvjjªÚÿï:uŠ[·nñ×_áãã£Æº`ÁJ•*Ž{÷8yòd–~Zzzzèé鑚šJRRÒ^Ñ¥KºvíJÙ²eùã?hݺ5uêÔQOÒ...$%%‘––Æ‚ 044T¯â_Õ§,¯ ÀÁÁ}}}úöíË·ß~KDD5jÔ`äÈ‘@ú‚ÿellÌòåË™8q¢ÚµäÎ;Ô©S‡òõ×_³aà =Ù355娱c,]º”àà`> Àˆ#èÞ½;•*UÂÎÎN­ßNœ8Á AƒèÙ³'íÛ·çùóçlܸ‘æÍ›óüùsZ¶lÉ¡C‡èׯßKc‹'>>ž’%K¾ö”+WNMh3êÄ„~ýõWŠ)ÂÍ›7Õ‹ÓñãÇóÕW_‘/_>:DëÖ­ßêxJŽ=ÊíÛ·)V¬{öìQå€hÛ¶-AAAøùùQ¯^½LËuïÞ''§L‰à˜={6¦¦¦„††råÊöïßÏÅ‹9}ú4]ºtaÈ!üüóÏh4,X€çÏŸÏtÇÂÅÅGGGJ•*…‹‹ www~þùg)Z´(7oÞäóÏ?çüùóŒ;–¢E‹²fÍfΜI||<¥J•zíþ(P€üCCCµîKLLdöìÙT¯^§OŸrôèQ†N=¨V­¶¶¶/-—BZö^©\¹r888ààà€¹¹¹zâ.]º4@úIóEÍš5cïÞ½ôìÙgggêÔ©£~^¾|ù—.é}ìRSS100 bÅŠ™®^o߾̀ ¡K—.ܹs'S_###ŒŒŒ€ô+¼ÈÈHš7o®>d’ÁÅÅ…æÍ›éMóêàè/ë|›տõôôHIIÉ”˜*THçnß)RD- jå[´hÑLÇãEÍš5cÏž=tèÐgggš5k¦~þ²c›!55U½nbb©S§ÔÏž>}JçΉ‹‹ã«¯¾âÚµk|ÿý÷ê÷¯¯¯¯>(”ÝwáëëËgŸ}Fþüùiذ!GŽQ?‹ˆˆP[._ô²²[°`Aõo###ÈŸ?¿úûÈ(‹"«FáààÀºuë2dˆÚêõªr‘¡cÇŽ”-[ggg ½•0£¾x¡haaAÙ²eùî»ïpuuU[ˆàÿ¿»ÿ-#jK‹‘‘†††DFFR²dIŒ©W¯æææ/ëÂ… tìØ‘&Mšdé еk×,­‘/ÛWCCÃ,uü½“ÊÔ?ü€ƒƒK—.¥I“&êôW?2¬Zµ kkkõ;ŽŽV]FóæMìííiÕª³gÏæúõëlذEQÈŸ?¿zqø¿Ç:66V]WHMME__cccŒ™4i5kÖdß¾}4oÞooobccÑh4ܾ}›¦M›f)C‡ÍÒªT©R/}(åeeàÅ}Óõrñ.$ÙËe?ýôŽŽŽØÚÚâííÍòåË_yË¡páÂŽú#ž7o“&Mbß¾}ܽ{KKK,,, ¡råÊ 6 www¢££Q…˜˜V¯^Íõë×Ù»w/]ºtÁÚÚš 6°xñbnݺŜ9sðððxí#ù³sôèQ.^¼ˆ³³3åË—'þüþù'>>>XXX¨­-NNNe³››îîî>>Ìš5 (Y²$•+WæÒ¥KêÃA/“ÀŠ+¸qã;vìPoûÙÙÙqïÞ=V¬XA¯^½ÞË1ÕeÊ”aúôéìØ±€¯¿þš•+WâïïÏÖ­[Ñ××ç?ÿù«V­bÓ¦Møûû³mÛ6:t耞žÏŸ?gýúõ\¾|™£GfúývïÞ•+WòèÑ#H¾|ù011!**Š&Mš°zõj .ÌöíÛY°`S§NeêÔ©Œ?ž;vйsgEaêԩܽ{—;wF£F¸uë–ú„zv–.]Ê;wX¿~½ZðööfÉ’%™Ê±ÈÌ yóæóòâ'66OOÏW>ÞñÊ•—iÚ´i¦¿õôôhÔ¨eË–¥GœÎÎθ»»Ó´iS-ZDË–-IHH wïÞtèÐ+W®°fÍ’’’9r$U«V%$$„wÞy‡uëÖáííMŸ>}066ÆÖÖêÕ«Çœ9spvvfРAT«VR¥J1wî\<==éׯFFF¤¥¥Kjj*¾¾¾Œ5 ###LLL8p wïÞå÷ßÇÝÝÏ?ÿ333¢££ÉÎΦJ•*å鹪W¯«V­âý÷ßgùòåLš4 V­ZÅСCYºt)o½õ]ºt)´wkóæÍ¯lBø$±¹¹¹å{uvvV——-[GGGìììpqqQÏ!Ûk\²dI7nLƒ Ðh4ÓªU+Ê–-K£FèØ±#þù'¡¡¡8::òÙgŸaaaÁ¦M›èܹ3AAAL›6 ŒŒŒ¨Q£­Zµ"&&†eË–ñÙgŸáêêŠaaa„„„0nÜ8*UªDbbbž'¿«T©ÂíÛ·©_¿>ýû÷G«Õ²xñbÊ—/Ï×_…… ܽ{W=_ýó;ö—_~aÔ¨QüòË/|úé§j/a¯^½Ø°a-Z´ oß¾-¹´]½zµÈÝV²yófðóóSŠ¢øøxe̘1ú㹩S§ÎKÙNhh¨2~üø<Ë’’’”6mÚq.\P~üñÇçÖkÁÏÏO‘4 ijŒßö,\\\ë­°°°PŸ:ú÷²ÚBÅŠ»Dkdd¤Þè/^žâÅ‹óÃ?JݺuÕ§q Ò¾}ûBqÖ§üÚo×®]ŸiPyÝ»wÇÔÔ”íÛ·3kÖ,\\\ ,kllLŸ>}^btO.¿vÑ®]»<ƒÃ‹‚I²g FýR¶S³fÍÇFÉ·´´Ìwˆ¡/«-¸¸¸äûÅ1jÔ¨—²}‘—»»ûÏÖ“ß“÷¯ŠüÚï!Cô‰a066¦k×®tíÚõ_Ë1räÈ—ÕÓ˯]¼ûî»zˆäõ$h!„B0Iö„B! X‘¾Œ¡”+^®S§NÑ­[7}‡¡:|ø°´=y8’¡)h>Sñâýs*±W‰F£!<<\ßaIùM?XTÙd¯L™2L:Ußa<³+VйsglmmõÊ3iܸ±:숾U¨Pᵞ}Ë–-T¯^½Ð¯_e76¸›ï[µjõZ·©èèhlmm_ÛÏ%¿â_½{÷æâÅ‹ú£Èz8ÎdQSd“=SSSêÖ­«ï0žYpp0îîîO4Ú¾(œ™™ÙkÝÂÃÃqqqy­÷ÁÐôèу=zè;Œg¶páB7n,mêøçܰB¼ rÏžB!„“dO!„€I²'„BaÀ$ÙB!„0`’ì !„B0Iö„B! ˜${B!„L’=!„B&ÉžB!„“dO!„€I²'„BaÀ$ÙB!„0`’ì !„B0Iö„B! ˜${B!„L’=!„B&ÉžB!„“dO!„€I²'„BaÀLõ€¾DEE¤ï0žYjj*K—.ÅÌÌLß¡<³ÿýïX[[ë; 4 áááúã™]¾|SSSRRRôÊ3kÞ¼9¦¦†s:Ú·o'OžÔwÏìæÍ›$&&²wï^}‡òÌFŒ‰‰‰¾Ãâ•`8g×§táŠ+FÛ¶mõJ‘4wî\îÞ½ûJ${ ,Z´ˆ®]»ê;”gR¥JŒIHHÐw(ÏdÕªUÔ­[—R¥Jé;”ç&((ˆÿýï¯õ±×Ùĉñ÷÷—dOˆÿ¯È&{+V¤zõêú£H*S¦Œ¾CÈ£víÚôîÝ[ßaIúá…pssÃÂÂBßaI†ôÃAˆçAîÙB!„0`’ì !„B0Iö„B! ˜${B!„L’=!„B&ÉÞs°nÝ:6lˆ··7ÞÞÞL˜0¬¬¬|ËÞ¾}233™6mÞÞÞ4kÖŒQ£F‘žžþÔÛ¿~ý:]»v¥víÚtêÔ‰-[¶<Ó~\»vêÕ«?6æÜ¢E‹¨S§ 6ä£>"55õ™ê/ ¶mÛFƒ ðöö¦U«V|ñŤ¥¥å[V£ÑðÞ{ï““ìY³hÛ¶-Mš4! €äää§Þ~\\½zõ¢V­Zøøø°aƧZ×®]jìµk×VÛ´V«¥Y³fêkæÎûÔñ‰§7uêTš4i¢÷Ÿ~ú©À²ÿý7Ó§O'%%nܸ¡¾7}útþþûï×ݾ};={ö¤cÇŽ|ðÁܼy³À²cÇŽ%**ê‰â×h4j»©]»6­ZµÂÛÛ›}ûö1~üxš6mŠ··7-[¶ä³Ï>ãîÝ»OT¯âÉI²÷¤¤¤Ð£GöîÝËöíÛ‰ŒŒdÓ¦MêûŠ¢ ÓéÐjµÄÄÄðù矓ÀúõëÙ¿?öööL›6-OÝ999…n;''‡·ß~›÷Þ{ˆˆ–.]Êĉó$ùÕ¡(ÊcËV¬X‹‹ K—.U—mݺ•U«VÄ‘#G¨Y³&?þøã•¢éþýû´iÓ†½{÷²k×.RRRX³fMž2?N§~a~óÍ7œ?žåË—†»»;_ýu¾ë¦wïÞtèГ'O²fÍfΜIRRÒ¿Öñ°=´mÛ–½{÷DÉ’%Ù»w/{÷îÅÔÔ”›7oª¯7nÜÈ/¿üÂåË—ŸüàˆgrëÖ-ÆŒ£~.+W®äüùóêû~¦ܾ}­VKRRÆ Sß»}û6êëGÏ:ŽñãdzdɶmÛÆ›o¾ùØÿóGË5ŠŠ+æYÿŸ.³°°PÛ 6l`ïÞ½´jÕŠøøx¾ýö[öîÝËž={022â·ß~{–Ã$„(D‘gïE033£råÊ$$$°uëVÖ®]Kbb"·nÝbêÔ©ê¸~YYY,[¶ŒØØX,--ÜäïôéÓ 0€2eÊpåÊRSSÙ¹s'óæÍÃÍÍÎ;³qãFnß¾MÍš5133SLj³··gÉ’%<ÀÍÍÚ´iî]»ÈÌÌToÈÎÎF£ÑäÛ\]])_¾<·oߦÿþÓ¢E ‚‚‚Ðjµ:tˆE‹±eË ݯÌÌL:vìHÇŽ©Q£5kÖÄÓÓóù<‘¯ÀÀ@ºwïN£F066¦uëÖdffbaaAHHÇÏwúÇÀÀ@~øáîܹ£.Û°aM›6%$$333222(V¬kÖ¬!00jÕªáïï‘‘;õÛ°aÃØ³gaaaÄÇÇ“žžŽN§cÁ‚ >œàà`LMM‰eÚ´iüöÛoê”qgΜ)t߯ŽKÇŽiÖ¬¿þú+Ÿþùó=xBéÙ{^ºwïÎÇŒ™™vvvêòæÍ›`kk‹V«U—;88püøqµmðàÁh4Þ|óMõòGAëÂÿ]R©X±"ëׯÏóÞ¡C‡°°°ÀÁÁyóæñË/¿põêU6lˆ‰‰ -Z´ÀØØ{{{RSSÑjµ¬X±‚Ë—/Ó±cGâããÉÉÉ¡sçÎT¬X‘Ó§OçIøæÌ™ÃÇüžaiß¾=ãǧX±bjwåÊ5I¶³³S“vÈMäâÅ‹¤¥¥aeeEß¾}ÉÈÈà½÷ÞC£Ñ¸î£~V:~ü8777fϞͲeËˆŠŠ¢W¯^j½¦¦¦XYYQ¬X1RSS±±±É·~sss‚ƒƒÜµsçÎ|÷ÝwêñâøûûÓ©S',--óL1øðaggÇ­[·[ÏÚÚšo¿ý–€€*T¨ä&o_}õ-Z´`ݺuÜ»wggg¶nÝJvv6kÖ¬¡}ûö\¼x‘J•*QµjUZ¶lÉÔú8 þH˜8q"YYY=zT½/Y£Ñüë½§ß|ó ­[·&##ƒaƱ}ûvºwïþ¬‡J‘éÙ{N¬¬¬pppÈ“èÎÍhooO­ZµX·nÎÎÎ$&&YàºFFF̶mÛ8~ü8 ##ƒîÝ»óûï¿«Éæ‘#G vz«ç¥D‰888¨‰ÞCµ Ú¶m˲eËprr";;;Ïq~’¶P§Nò$|S¦LÁÞÞžŸ~ú‰F±|ùrÞ}÷]õý‡mA§Ó‘––V`¢÷h¬¼ñÆÔªUë_{mÄóakk‹ƒƒÃcsI?Éܯ¾¾¾äää°cÇ4h ~îgÏžàÎ;ôíÛEQ(V¬=zôÀÒÒ’œœâââÔK«§OŸ¦N:jݵjÕRïÛœ5kwîÜ¡nݺ,]º”U«V1xð`õrpAÌḬ̀°°ÀÎÎŽÎ;sôèÑ'<*Bˆ'%={z´xñbzôèÁŒ3([¶,–––øúúX¾mÛ¶øùù±gÏ¢££©T©%K–ä÷ßgðàÁØÙÙ‘““ƒ··7*T U«V,X°€ýû÷sãÆ þþûoHjj*ýû÷çÚµk|ôÑGìÞ½›úõëceeäÞkÖ®];BCCùðÃ3f 5¢fÍš¤¦¦>ö‰øïæÍ›GÏž=™?>ÎÎÎäääðÎ;ïX¾uëÖôêÕ‹Ó§OCƒ 033cÅŠŒ9’âÅ‹cbbBÍš5qss£E‹röìYââ∉‰á«¯¾B«ÕÒ·o_bbbÔ{ýž”££#Û·o§Q£Fÿu÷Å 6gÎÜÝÝèÕ«½zõb×®]dee©=wµjÕ¢råÊ´nÝš›7o2zôhLLL(S¦ ÇG£Ñ`kkKµjÕÔzýüüÀÉɉ””>ùä @ëÖ­qwwÇÄÄ䩿œvttdΜ9L™2å¹!Š4???¥(Úºu«¤ï0EQ”ÈÈH%!!AQEÉÎÎ.´ljjª•ï{ÑÑÑŠV«Í³ìöíÛJzzº’““£\¼xQY³fòÝwß)÷îÝSÒÒÒž8ÆÌÌL%66ö‰Ëÿ› &(ׯ_nõýׯ_Wõ†¢(ŠrãÆ åæÍ›Š¢(}–ÿ”––Và1ŒU²²²ò,»{÷®’ššªèt:åÂ… ÊöíÛ•Ñ£G+éééJJJÊs‰ÿYŒ3FINNÖÛö_„€€åÁƒú#_ÇW.^¼¨ÜºuKY¼x±²yófõ½””åâÅ‹ŠN§S—Õ©SGQE‰Ï·>N§ÄÄÄäY–™™©ÄÅŽ€èŸŒŸŸß+{ü…xÙüüüéÙ{<|Òr{Õ cmmýØ¥œ‡[foo¯þ]­Z5õòMÉ’%Ÿ*F33³xynß¾ï\ͯ³””¦Nú¯\‰ãĉùÎ×+DQUdÏDŠ¢™™)s{êIvvö+óŸžžNpp0ÇŽÓw(ERTT”:õ›¡P…ôôtIöôäŸ3 QÔÙ3‘µµ5ýúõ“iyôdâĉXXXè; wÆŽ«ïPФ±cÇbnn®ï0ž+[[[¾ýöÛW¦5ÉÉÉË]JB<$ÿ„B! ˜${B!„L’=!„B&ÉžB!„“dO!„€I²'„BaÀ$ÙB!„0`’ì !„B0Iö„B! ˜${B!„L’=!„B&ÉžB!„“dO!„€I²'„BaÀ$ÙB!„0`’ì !„B0Iö„B! ˜${B!„ÌTßèKVV.\ L™2ú¥HŠŽŽ&''GßañBh4ÂÂÂ033Ów(ERBBŠ¢è; !^E6ÙKLLdÅŠüõ×_ú¥HºqãŸ|ò‰¾Ã %%…Ù³g³lÙ2}‡R$%&&¾2máy¹uë'NÄØX.žèÃåË—åǤ(²É^… ˜þù§úºZµjxzzºÎ‘#G°±±¡Zµj/:œ””RRR ¡N:Ô©ÓéèÖ­Z­ö©¶±zõjvíÚõ<Â/ÐG}¤¶…¿þú‹5j]`ù=z‘‘ñTÛøóÏ? þ¯¡Š×@\\ß~û­Ú¦fÍšUè0Pñññ 8ð©Çí›:u*‘‘‘ÿ5\!ÄkNzö aee…¿¿¿úúèÑ£œ={–ZµjÃÊ•+©W¯>>>„„„ ÕjÑh4œ;wŽÐÐP|||hР:ÈçñãÇéÓ§&&&Ü»w5kÖ`ccƒ——¦¦¦¬Zµ [[[ºvíZh/¢x¹Š+–§-\¼x‘ððpZ´hABBË–-ÃÝÝ7ß|“;vššª&þW®\aýúõ´lÙ’fÍšErr2‘‘‘tèÐ+++233Y±b9994oÞkkkÖ®]‹©©)o½õV¡½ˆâõäè訶)*V¬Hff&æææœ={–M›6©çßÿ[[[ÒÓÓ8pàaaaôìÙWWWÂÃÃqrrb×®]ôïßȸ<44”û÷ï3eÊ’““Y¾|9µjÕÂÛÛ[_»-„ÐéÙ+DVVááᄇ‡³bÅ EÁÍÍ3gÎ0dÈ4hÀÂ… Y³f ®®®X[[S¥J6lØÀ´iÓhذ!£FâØ±cœ8q‚¾}û¢ÕjÕ_çæææT®\WWWÌÍÍéÔ©fffܸqƒ¾}ûêyïÅ£rrrÔ¶°fÍîÞ½K:uˆŠŠâÝwßÅÓÓ“µk×òóÏ?SµjU¬¬¬puue×®]Œ7///&MšÄž={¸pá}ûöåîÝ»êtZ¦¦¦T­Z•*Uª`iiI=ÈÌÌ$%%…=zèyïÅ‹’’¢¶©9sæÐ¤IÌÍÍÙ°aÓ§OÏsþpuu¥\¹r8880eʶnÝJ­Zµèׯñññlݺ•Aƒacc£Ö_ªT)Ê–-‹‡‡†¶mÛâääDpp0“&MÒãž !^6Iö ‘‘‘App0ÁÁÁ„„„P­Z5ÌÍÍY·nõë×çÎ;4jÔˆM›6åIöV¯^M£FHLL¤N:ê”lõë×gàÀy“½›7oâàà@¿~ýøôÓO‰ŽŽ~êKÂâÅÑjµj[ ¥B… X[[³qãF<==ILLTÛ‚‹‹ VVV¼ñƬY³///îܹCƒ زe 5jÔàƒ>P“=5Ù{xùwðàÁøûû“‘‘¡öèÃqûöí“&MR½¢½{÷R·n]J•*¥ïPHIIáìÙ³4oÞ¼Ðrÿl æææ4oÞggg~úé'*W®Œ¿¿¿zOf½zõðððÀÈȈùóçããワ¯/¥K—ÆÙÙ9Oý666¬\¹///Þ}÷]Ö®]Kll,ß}÷VVVÏw§_!;wî¤yóæÿš´¼N¶mÛF»ví ì™722ÂÒÒ’Úµk«Ë¬­­)[¶,;vÌsþhݺ5%K–ÄÍÍ oooΟ?ÏÊ•+ ÀÝÝ###œ±³³Ë³KKK/^LŸ>}hÞ¼9óçϧR¥JôC?›7o¦cÇŽreDrÿ?ùùù) .Ôw,/ݶmÛÐh4…w ^œ‰'2pàÀÇ}¸qã«W¯fìØ±ú¥H;v,cÇŽ}%ÿçå“O>aêÔ©•À¾Nüýý™5k–!Èýÿ —q…B! ˜${B!„L’=!„B&ÉžB!„“dO!„€Ésé…HHHÀØØ˜²eËZ699™R¥J©³cèt:®]»FÕªUÕeÏ"66SSSž¹ŽÔÔTLLL¾C£Ñpýúu\]]ó¢àîÝ» åPTݺu EQ022¢lÙ²…~¦)))”,YRÛXQ"##qqqyê‰ì‡N§{løž§‰ÿQ666hµZuv33³|?oFƒN§3è¡€^6­VKbb";ïréÒ¥ -Ÿ””DéÒ¥IIIÁÒÒRtûáç÷è4iù¹~ý:+VÌ3X÷?eee‘••õÄÃü¤¤¤<6†¨……%J” )) ÈbÆÞÞþ±v¯(Š: ¹âÅ“d¯YYY¸¹¹Ñ¹sgrrrˆ‰‰aìØ±ÕòÎ;ï°jÕ*Ê”)Ãøñã ¢N:\»v¡C‡2hР§Ú~RR={öäÁƒØÛÛ“™™IHHÈ3 ´Ü¤IÞxã BCCÕe«W¯& ooo¢¢¢xÿý÷6lXžõ:wîLxxøSoϹ»»Ó¾}{t:ÑÑÑ|ôÑGôë×/ß²C‡eÊ”)¸ºº2mÚ4–-[FíÚµ¹qã½{÷æã?~ªm§¥¥ñöÛo³³3)))lܸñ_„G9­VËðôôÄÊÊŠ¡C‡²uëVÂÂÂptt$##ƒÄÄDæÏŸOݺuÕuׯ_Ojj*Ǫ¸EÁÎ;G—.]hÞ¼9†ÄÄDfÍšEƒ ò-ß¶m["""èׯåÊ•cñâÅ\¼xQmcù9þ<Æ £fÍšDEEѨQ#ÆŸoÙcÇŽƨQ£žh–,YBxx8×®]#;;›jÕªQ¯^=š6mJ¿~ýhܸ1:ލ¨(ȇ~¨®{ÿþ}z÷î­N%)„xÁüüü”¢hëÖ­JPPPïgff*nnnêë+W®(^^^Š¢(Jdd¤rçÎeÿþýʃEQ”víÚ)wîÜQV®\©ôìÙS]ž‘‘¡4iÒDILLTRSS•;wî(gÏžUN:¥(Š¢dgg+ׯ_W·sùòeEQÅÏÏO™1c†º|Ñ¢EÊ´iÓÔ×gΜQΟ?¯¾ŽŒŒT´Z­rúôé<ûqôèQ¥[·nЇ‡‡’””¤(ТܼySquuUnݺ¥(Š¢äää(^^^Jrrržu5j¤èt:åðáÃJFF†ºEQ”ˆˆE§Ó)Š¢(111Jff¦ráµܿ™0aBžýÖ§ëׯ+…–©\¹²úwBB‚âîî®(JîñHNNVöíÛ§¤§§+Š¢(½zõR._¾¬üù矊’––¦(JîgݲeK%::ZIKKS”‹/*ÇWt:¢Ó锫W¯ªÛyØÆŽ«Œ?^=ÞëÖ­SÆŽ«–»xñ¢rúôiõýÈÈHE§Ó)퇯¯¯Z¯¢(ʨQ£”uëÖ©¯W¬X¡øûûçYgÙ²eÊܹs•„„µÍÝ»wO¹sçŽrçÎ%&&FQ”ÜvtãÆ %33S9wî\¡ÇóQcÆŒy¬í½îÔs@~"""”nݺ©¯CCC•(ÙÙÙJTT”­„……)Z­VQE©S§Ž¢(ŠÒ¥KÅËËKÙµk—¢(¹ç~ýú©õœ?^ÉÌÌTÿŸúùù);wîTßïÒ¥‹’––¦DGG+ÙÙÙÊùóçF£(Š¢Ü¿_‰‹‹Ëã£û Ó锿ÿþ[IMMͳ/¿þú«òý÷ß«¯8'¦¤¤$ÅÙÙ9Ï:©©©Jûö핬¬,%<<\ÉÎÎV%ÿóØÃ}9uê”z<þŸŸ_¡Ç_ˆ¢ÄÏÏO‘ž½'túôiÊ•+@Ïž=ñôô¤J•*|ùå—ìß¿_-·aìæY¼xq€ÜQ¬§OŸNÓ¦M9wîo¾ù&ݺuãÓO?%((Èë2<<œÐÐP"""Ôz‡ ¢ÎÙ¡C7nLTTU«VeüøñtéÒ…&Mš`iiIdd$[¶lÁÈȈ+VЯ_?NŸ>Íúõë:t¨:cÁÃKÓÆÆÆ:tè±K-©©©Œ3kkkFŒÁáÇ0`nnnØÚÚÎæÍ› $99'''8À?üg¶ CsîÜ9µWí½÷Þ£zõ긺ºòé§ŸrüøqµÜÆ8p Úkjjʾ}û8xð £G¦Y³fDGGS¿~}2d{öìþ¯-³iÓ&õÒñÛo¿­NxÿÖ[oQ­Z5’““±´´ä‡~àí·ß¦nÝºØØØpòäIvìØñD³%deeqîÜ9ªV­úØ{7näÞ½{üõ×_Œ1KKK©_¿>W¯^¥U«VøùùѱcGu&’ôôtV®\ù¬‡¹ÈÈÉÉáܹs”+Wޤ¤$ºtéB‹-011añâÅüúë¯yÊÏ™3‡?üC‡åY>xð`ÌÍÍÑh4:tˆK—.áääÄôéÓ111¡Y³flÞ¼€#FMÅŠÙ¿?sçÎ%%%…]»vñÍ7ßйsgj×®ÍÅ‹ùì³ÏpuueÈ!xyyñÑG±xñbêÔ©óDûwîÜ9[~ñâE&MšÄýû÷™7oK—.¥S§N4kÖŒâÅ‹sãÆ þüóOüüüpvvÆÖÖ–ƒ²víÚgº•Aˆ¢L’½BDGGÓ¸qcrrr¨Zµª:iùíÛ·™;w.%J” 444ϽP‘‘‘êIpåʕ̙3FÃØ±c±²²ÂÑÑ‘©S§rþüyéÖ­ÛcÛÕjµÝ'hddD±bÅÐét|óÍ7xzz²råJ–-[Æøñ㉉‰áÀ”)S"""¨]»6[¶laâĉT©R…‘#G2tèPâããóLÓä{ÏÞƒ7n¶¶¶„„„““ý{÷:t(5bæÌ™lß¾€úõë3räH>ÌŠ+ .ÙKNNV/KUªT‰Ù³g¹—Û¿ÿþ{ìííÙ³gOž¹o¯]»Æ'Ÿ|À¦M›˜2e ™™™|øá‡Ô¨Q;;;f̘A\\~~~ä»íÔÔT\\\ò,{xïÕ¨Q£hذ!!!!¹÷š~õÕW¸¸¸0nÜ8<¨N¹•Ÿ &0wî\ÒÓÓILLääÉ“•©^½:ãÆÃËË‹m۶ѦMLLLøñÇQ…&MšàççGLL óæÍÃÌÌŒž={róæM*V¬øGºèØ¿?7F«ÕR¿~}&Mšä&ÝóçÏGQ6løØz•*Uâƒ>`„ ¼ÿþûÄÇÇ“’’† ¸ÿ¾zÌ¿øâ ÜÝÝùí·ß2d=zô`Ê”)@îíÆ cß¾}¬Y³†:¹?DêÕ«G`` 7nÜàêÕ«¬[·Ž>}úСC<==Y°`…ͼ´cǼ½½Ñétœ}HMM o ÙÙÙ@î—ûáÇÕå÷ïßgذaäääðÓO?ñþûïsóæMõsssœœœ€¼ŸQA&MšÄÞ½{9zô(#FŒà·ß~{¬ÌÃXókFFF˜™™‘žžNåÊ•Õýqssãܹs…n»(kÙ²%ááá;vŒŸþY}ËÝÝÈ=®ÍíêïïÏÑ£GÕžäóçÏ«=²%K–Tëúã?Ô9·Ï;Gdd$[·nòÿ ¹W1ÎîììL»v툈ˆ`÷îÝL›6ýû÷盄>ÊÇLJ½{÷²ÿ~"""ÔDöQùíg™2eÔsΣ璇±êùEˆM’½çløðá,\¸P= ;vŒ%K–XÞÌÌL}rmçÎ꼟Ÿ'N$..€™3gR¯^=Î;‡¥¥%Ë–-£qãÆj¯bRR‡"33“­[·Ò¦M–/_ÎÌ™3 &88˜?üÕ«WÓ±cG®^½Ê† Ðétܼy“õë×S§N’’’¸víZ¡ûŠN§#44”6mÚ¹=WŠ¢DÛ¶mÿÓ14Æ cÉ’%üý÷ß@î—èÏ?ÿ\`yRRR8|ø0wïÞr¿Ø¿ûî;¢¢¢€ÜËxµjÕâúõ뤥¥±råJÚµk§^æÏÌÌ䯿þB«Õ²yófõ3z5jÔàèÑ£œ9sæ±§-µgÏîß¿Oll,ÆÆÆ”(Q‚ .påÊÒÓÓÙ¿?Íš5{âm‹'gddÄ‚ øòË/hÖ¬áááú虞/ ¬¬¬ðððxl¹™™YžåÛ×çtkÕª¥ö®V¯^1cÆpÿþ},,,øàƒðõõ¥}ûö´hÑ€Ÿ~ú‰>úˆ)S¦àè舯¯/ÕªUÀÒÒ’öíÛSµjU&OžLtt4UªT¡Zµj4mÚ”N:aggÇìÙ³)Q¢ß}÷íÚµ£råÊÌ›7O±|ùòy†k±±±Q{íòññ!22’°°0Š/N×®]óÜJòp?+W®ÌÆùüóÏéÛ·¯ÚC™‘‘AëÖ­iܸ1:uzÆ£.D&OㆇOëéc;Æ S:ôTõ¼nOã¾N^F[زe‹2nܸ<ËîÝ»§´hÑâ©ë*ŠOã>oÊ—_~©hµZåìÙ³Ê!C -?hÐ åĉ/)º'—_Ûmݺµr÷îݧªGžÆâÿÈÓ¸äá¯u}l§R¥JÒƒó ymÁÚÚšòåËçYfll¬Þ[%^®‡W úõëG•*Uøúë¯ -ïää”§‡÷U‘_Û­Zµj÷. !žŒü2kÖ¬ÑÛvÆ÷R¶-žÌËh Íš5{ì~¼%J¨ƒýŠ—¯oß¾ôíÛ÷‰ÊNœ8ñÅóŒòk»¿üò‹"°ÈB!„L’=!„B&ÉžB!„+²÷ìÙÛÛ3{öl¶mÛ¦ïPžÉÃAšòàu’’’òÊÜ nbbÂŽ;¸qㆾC)’Ο?ÿØT}¯;wwwòKN¼xIIIê ãB0òóóS ›öF¼š‚ƒƒԱ؄B!þÉßß_.ã !„B2Iö„B! ˜${B!„L’=!„B&ÉžB!„“dO!„€I²'„BaÀ$ÙB!„0`’ì !„B0Iö„B! ˜${B!„L’=!„B&ÉžB!„“dO!„€I²'„BaÀ$ÙB!„0`’ì !„B0Iö„B! ˜${B!„ÌTßèKbb"ÇŽÓwÏ,22€mÛ¶é9’gW¯^=Ê–-«ï0„BƒVd“½cÇŽ±oß>5j¤ïPžIÕªUÐh4zŽäÙœ|8‡&((ˆÔÔTºtéB—.]022zªígee1wî\>LݺuéÓ§ÎÎÎOUÇ?üÀ•+WÔ×*Tà믿&''‡… rðàAJ•*Eß¾}iÞ¼ùSÕ-„Bý‘ž½çàÂ… /^œO>ù„îÝ»óÅ_pèС|˦§§³eË/^ÌèÑ£iÞ¼9C‡å?þ`Ù²eO½ý¾}ûrùòeÆ››ï½÷:î©ê ¡wïÞ|òÉ'|òÉ'ôï߀wÞy‡cÇŽñÙgŸÑ¤I†NPPÐSÇ(„Býž½çÄÞÞžêÕ«Э[7<ˆ™™gΜaÏž=7R©R%¼¼¼8xð )))8;;súôi.]º€‡‡Z­–ØØXJ—.ͼyó8pào¼ñ3fÌ <<œ¸¸8Ž?΃øüóÏ©X±";P³£££ºOû÷ïçÊ•+œ>}€† âîîNŸ>}èÑ£ÇË9°B!„øO$Ù{N˜5kIII¬\¹’]»vqúôiæÎËîݻٷosçÎe̘1\½zwww5Ñ !99ÈM9BFFÁÁÁôîÝ›cÇŽqùòeLLLˆåÖ­[¤¦¦Ò±cÇ<±¼ûî»ìÙ³ 6mÚĨQ£Ø²e <`ܸqìÝ»—K—.Àúõë>|8––– :”ˆˆÞ~ûí>^}••…F£aÒ¤IhµZÞ{ï=LLL¨V­©©©ùn×ÒÒ2O½7oÞ$&&†-Z`kkˈ#X³fšLvéÒGGGÚµkGll,999Œ7Ž©S§2uêT¼¼¼°´´$111OÝZ­–¬¬,ÌÌÌþÛB!ÄK!ÉÞsR»vmz÷îM=°¶¶V—?¼lûO•+WFQNœ8@¯^½èܹ3111…®ûð^¼¨¨( wÊ·;v¨ "À—_~IRRß|ó W¯^å›o¾aÔ¨Qêû·oßr{srrÔÞÂJ•*áì쌳³3VVVx{{œ§î]»vQ£F Iö„Bˆ×„\ÆÕ###,XÀ[o½EÏž=)[¶,;vì V­Z®ãîîÎ’%KÐh4êåÝ *0zôh4hÀ Aƒˆ‹‹#99™ºuë²cÇÙ´ikÖ¬ÁËË‹¦M›ÎôéÓ¹xñ">>>n¯zõêŒ1777üýý¹rå  44ôE!„B¼F~~~ÊÂ… õÇK·mÛ64 Ý»wÿÏuÅÇÇ“““SžåIII¤§§ãääăˆŠŠÂÅÅ…K—.©I]TT»víÂÊÊŠ:€››çÏŸÇÕÕ333®_¿Ž­­-ÖÖÖìܹ“„„Úµk‡¢(êÃ÷îÝ#44”:uê¨ugee±eËÊ•+GõêÕY¿~=666DFFÒ²eKŒiÒ¤ ¸»»cnnþØþ9s†°°0<<‰[·n¡( ¶¶¶˜››Z^§ÓqïÞ=J•*õ2ÂB!„øW’ìâ7Þ K—.ÄÅÅáææÆ¯¿þZ`ù† 2bÄøÄÛ8xð ÖÖÖÔ®]û¿†+„BñIö QºtiV¯^­¾nРW®\ÁÕÕEQ8räÕ«WÇÆÆ†K—.addD»víÈÎÎæØ±cxzzbaaAJJ Š¢˜˜HÕªU166&++‹àà`Ê–-‹»»;ÅŠ#22+++Ê•+§¯ÝB!„‘dï ÅÆÆ¢Ñh°··'..Žÿýï4lØádzhÑ"®^½ÊÝ»w9wîñññLœ8OOO>þøcBBBØ¿?kÖ¬ÁÁÁ¹sçðàÁ.^¼H\\<`Ĉèt:’““ñôôä‹/¾Ðó^ !„âu'É^!nß¾··7—/_ÆßߟR¥J±lÙ2zõêE—.]ðòòbþüùÌ›7ùóçÓ¡C† Ƙ1cpssÃÎÎŽU«VQ±bE²³³Y°`Z¿ mÛ¶¥bÅŠhµZbbbøóÏ?hܸ±${B!„øÏ$Ù+DÙ²eÙ»w/ûð…››_|ñdeeqöìY5j”g½S§NajjЉ‰ ­[·&##ƒ¶mÛ¸­+W®àì쬾.^¼8©©©ØØØ<ßB!D‘"C¯>>¬_¿žŽ;bllLݺuð÷÷gïÞ½tèÐk×®Q¿~}Ê–-K¥J•ÛF5˜6mÉÉÉŒ7Ž>}ú0lØ0¾ûî»—²B!„0lF~~~ÊÂ… õÇK·mÛ64 Ý»w×w(E’!„âÅó÷÷—ž=!„BC&ÉžB!„“dO!„€I²'„BaÀ$ÙB!„0`’ì !„B0Iö ‡‡ÞÞÞ´lÙ’ræÌ™Ë<˜ääd wX‘wÞy///z÷îÍ‘#GžzûZ­–¯¿þšÚµkÓ¨Q#¾úê+t:ÝSÕ±aÃ6lˆ···úïÒ¥Kèt:¦NЇ‡5jÔ W¯^ÄÅÅ=¶~ïÞ½Ÿ:n!„B¼Z$Ù+€¢(dgg³wï^öïßO¯^½øòË/ó”ÉÉ!i÷›IDATÉQÿŽŽŽ&''‡#GŽ0qâDFÍ‘#G˜0aÆ #+++OÝÿ–¸Íž=›7n°k×.}GGG>øà–/_ζmÛðõõUË=xð€É“'säÈœœœ˜;w.¾¾¾Ô¯_Ÿ°°0\]]™5k£G¦L™2?~cccfÏžïl!B!„xù¤g¯7oÞ¤{÷îøúúÒ³gOÆÀ‘#G˜1cýõ»víʳΙ3gðññr/ç8É“'sòäI²³³‰‹‹cÓ¦MÌ;—+V ( éééêú÷ïßG«Õ’™™‰›››ºÜÆÆ†:uê Óé°··gݺuLŸ>E‹Æ AƒØ³g§N"** €E‹Ѹqc7nŒŸŸ 8::ª‰ÞC:t 222ϲ[·n1`ÀBCCÙ½{7×®]£aÆlß¾bÅŠFFFѧOþøãçqø…BñH²WˆråʱpáB~ùå"""Ô^/Ê—/€µµužË—>|///ÆŽK™2e¸|ù2Íš5ÀÎÎî±Ë¦™šæv¸ÞºuK]–––ÆâÅ‹122"33“>}ú0sæL´Z-öööÔ¨Q€V­Z±ÿ~†Jxx8áááüüóÏ”)S†7nšššg›§Nz,|4)´¶¶V—·jÕ €Ö­[³oß¾<˼½½Õm !„Bÿ$Ù+„©©)888`bb¢.ôïzûí·ùý÷ßÉÌÌÄÎÎŽ*Uª°eË–B×Õh4œ;wŽÌÌL€ÿ×޻đÅÿ-Š`²° ‚b¡Ø¤ˆ¶¢`-Ú 6VQ+!¨B ;mÔÎÊÒÂV´DYÖ"`-tQPØ"bD¯8\λx'wççÓ,;;;ófª/;ï±ÑÛÛ •}VVVâüüÅÄÄDtttDKKK|ÿþ=¢¦¦&crr2~üøûûûñùóçÈårññãǸººŠÚÚÚxÿþ}looÿôœ333188KKKÑÚÚår9#—ËÅòòrlnnF>Ÿÿéw«ªª"ŸÏÇôôt”ËåÕÕÕX__b±177÷ßo$ð$2###·³³³/=Ž_nmm-.//£¿¿ÿYŽqq¥R)Z[[#“ÉÄÍÍ̓¿”ÝÞÞÆ×¯_£¹¹¹ò÷N¹\Ž«««Èår•m×××Q*•¢¡¡!ŽŽŽ"›ÍFggg …899‰úúúG±T*Åõõu444<úºÚÛÛ£P(ÄññqåQöððp|øð!ššš¢®®.2™Ì?ç¹ï?1::ê—½ç’Íf#›ÍVÞÿÝ£ßL&so1ƽyóæ/Ûª««+öçyv ½ˆßç$þ[w¡÷TÇž‡ØKD¡Px±óÜ­þ,ÐH˜ØH˜ØHØ«³W[[óóó±¶¶öÒCy•ÎÎÎbxxø¥‡É{µ±×ÕÕUù×€TyŒ 0±0±0±0±0±0±0±0±0±0±0±0±0±0±0±0±0±0±0±0±0±0±0±0±0±0±0±0±0±0±0±0±°Ì»wïn;;;_z<±ø /嚦øNIEND®B`‚gspiceui-1.1.00+dfsg/html/gEDA-gSpiceUI.html0000644000000000000000000000606512267646611017100 0ustar rootroot gSpiceUI What is gSpiceUI? What does it look like? Who is the author of gspiceui? What can gSpiceUI do? What features are missing from gspiceui? What does the version number mean? Where can I download the latest version? What is gSpiceUI? The name gSpiceUI is an abbreviation of the project title GNU SPICE GUI which is itself an acronym standing for Gnu is Not Unix Simulation Program with Integrated Circuit Emphasis Graphical User Interface. It is intended to provide a GUI for two freely available electronic circuit simulation engines : GNU-Cap and NG-Spice. What does it look like? Here is a page of current screenshots. Who is the author of gspiceui? Mike Waters mwaters517_AT_gmail_DOT_com What can gSpiceUI do? Current features: * Import gschem schematic files using gentlist. * Load and parse circuit description (net list) files. * Provides a GUI interface for GNU-Cap OP, DC, AC and Transient analyses and generates appropriate simulator commands based on user input. * Provides a GUI interface for Ng-Spice DC, AC and Transient analyses and generates appropriate simulator commands based on user input. * The raw output may be viewed for any processes initiated by gspiceui. * Formatting of simulator output so that it may be plotted using gwave. What features are missing from gspiceui? Wish list features: * Complete GUI interface for NG-Spice. * Complete GUI interface for GNU-Cap. * Place buttons to select and de-select all items in "Nodes" and "Components" list boxes. * List sub-circuit component labels (eg. R1.X2) in the "Components" list box. * Create simulator engine selection/configuration dialogue. * Create tool bar with the following buttons: Open Import Reload Close | Create Run Stop | View * Give the user the option of deleting all files generated by GSpiceUI on close or exit. * Develop a mechanism so that the user can enter model parameters (eg. from a data book) to be converted into model definitions in a library of components. * Add configuration file functionality. * Allow the user to specify the results precision; a lower precision makes the raw data easier to read, a higher precision gives more accuracy / resolution. * Use standard component values in PnlValue controls displaying R, L or C values. * Automatically add .MODEL statements to net list file if they are missing. What is the current version? The version numbering scheme uses the format: vA.B.CD A is the major release number (rarely updated). B is the minor release number (infrequently updated). CD is the modification increment number (incremented as a result of almost any modification). For example version 1.0 would be designated v1.0.00, any version with a major release number of 0 is pre-version 1.0. Until version 1.0.00 is released the version number will represent a percentage of the development completed towards version 1.0.00. Eg. v0.5.60 would signify that roughly %56 of the development effort has been completed towards version 1.0.00. Where can I download it? gEDA's download page. gspiceui-1.1.00+dfsg/html/Makefile0000644000000000000000000000743612453745334015446 0ustar rootroot#*************************************************************************************************** # Makefile * # ---------- * # Description : House-keeping for the GNU Spice GUI project documentation HTML files. * # Started : 2004-04-06 * # Last update : 2015-01-09 * # Copyright : (C) 2004 by MSWaters * #*************************************************************************************************** #*************************************************************************************************** # * # This program is free software; you can redistribute it and/or modify it under the * # terms of the GNU General Public License as published by the Free Software Foundation; * # either version 3 of the License, or (at your option) any later version. * # * #*************************************************************************************************** #*************************************************************************************************** # Any or all of the values in this section may be set below or on the command line when envoking # make eg. : # # make DESTDIR=/new/dest/dir install # make DESTDIR=/new/dest/dir uninstall # # Note : Values specified on the command line over-ride those specified below. #*************************************************************************************************** # Destination (install) directory DESTDIR = /usr/local #*************************************************************************************************** # Specify string values #*************************************************************************************************** # Root directory ROOT := $(shell cd .. ; pwd) #*************************************************************************************************** # Make these targets #*************************************************************************************************** all : #*************************************************************************************************** # Perform installation tasks #*************************************************************************************************** install : mkdir -p $(DESTDIR)/share/gspiceui/html cp $(ROOT)/html/*.html $(DESTDIR)/share/gspiceui/html cp $(ROOT)/html/*.jpg $(DESTDIR)/share/gspiceui/html #*************************************************************************************************** # Perform uninstall tasks #*************************************************************************************************** uninstall : rm -fR $(DESTDIR)/share/gspiceui/html #*************************************************************************************************** # Remove temporary files and backup files #*************************************************************************************************** clean : rm -f Makefile~ *.html~ #*************************************************************************************************** # Specify phony targets #*************************************************************************************************** .PHONY : install uninstall clean #*************************************************************************************************** gspiceui-1.1.00+dfsg/html/OM-PnlValue.png0000644000000000000000000013271612453750107016545 0ustar rootroot‰PNG  IHDR!Zùò—…sBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î< IDATxœìÝy\MéãðÏm/ EҌʒBR¡²Å˜&a$KYó²»a&Ë Æ2ÃŒc˜²dfHHˆì²'K¥ÒzŸß^Ÿ;÷¶ Žåó~½¼tÏyÎsžsîö¹ç<ç< Ѷm[½.„NÛ¶m±bÅ ¹ÛBDDDï‘ÐÐPhÉÝ"""z?1„‘,BˆˆˆH !DDD$ †"""’CÉ‚!„ˆˆˆdÁBDDD²`!"""Y0„‘,BˆˆˆH !DDD$ †"""’CÉ‚!„ˆˆˆdÁBDDD²`!"""Y0„‘,BˆˆˆH !DDD$ †"""’CÉ‚!„ˆˆˆdÁBDDD²`!"""Y0„‘,BˆˆˆH !o™ØØXDGGKÿ>Œ[·nAñÒu»ºº"00––†èèh$&&–ºÜéÓ§ŒŒŒçZ_hh(6løBm}•ÒÒÒðÏ?ÿ`ÕªUX¼x1¶oߎk×®©•2d_ŸSVV¢££qæÌ™bË\¾|ÑÑѸÿ¾4-##õë×Çĉ_G3_›Ó§O£~ýúX¹r¥lm¸qãþúë/,\¸›7oÆÙ³gQXX¨±ì‰'P¿~}¬Y³¦Lu'&&¢~ýú/Ï&—«k×®IŸaϾæþ+!!A*—ŸŸÿJÚÒ°aC :ô…—?{ö,êׯï¾û®[õ ôö°±±ÔþÕ¬YSüøã/UwµjÕ„«««Bˆ´´4ahh(,--EAAA±Ëäåå‰jÕª ccc‘™™ù\ëëܹ³ÐÑÑy©6—§üü|1mÚ4¡«««¶µ´´„¿¿¿¸xñ¢TÞÇÇGèééÉØâ²9yò¤ ºwï^l™Ñ£G bÛ¶mÒ´‡ bÀ€¯£™¯ÍÑ£G1{öì׾4 ñ=ܸqcqîÜ9µe:$ˆùóç—iÇŽÄŒ3Ê»ùj E»víÄ—_~ù\ËMžA… ÊeÝrÈÍÍ…««+¦M›†Fá÷ßÇ… pçÎDFFbìØ±øã?ð믿ÊÝÔ×ÆØØÛ¶mÃÈ‘#ånÊ;áîÝ»prrÂæÍ›€ƒ"==§NÂìÙ³‘˜˜gggDEE½ÔzêÖ­‹mÛ¶Áßß¿œZ^} ¥¥…sçÎIÓZ·nܽ{Ÿ|ò ÌÍÍQ¡B´nÝ'Ož,µNØØØ`ûöíHKKS›Ÿ’’‚ÈÈHØÙÙ¡uëÖHKKøqãàèèCCCàƒ>@ÿþý‘’’R¦í?~<œœœ4¾é‡ †¦M›ªMÏËËÔ)SаaC¢J•*èÔ©S™ݹssçÎE… °dÉèééi,gooŸë:þ<† ‚:uê@__†††¨S§&OžŒœœµò{÷îEëÖ­add„ *@OO 4ÀêÕ«UÊ­_¿5‚¾¾>ŒŒŒ```ÞååñãÇprrÂÔ©SÕæ%''ãã?FÍš5¡¯¯ZµjaĈÈÊÊR)wðàA899aÛ¶møóÏ?áîîi?^¼x!!!¨[·®´¿j×® &h e­ZµÂСCqóæM|üñǨQ£ ðèÑ#À“'O0~üx888ÀÈÈúúú¨S§ŽÆm€C‡ÁËË •*UBåÊ• ÒG!!!NNNX´h‘ÆåcbbàääTj³gÏbÍš5°´´ÄôéÓ5–ñññA=pþüyµç¿Èï¿ÿŽV­Z¡B… °´´Ä°aÃÔ^Wç΃“““Æ:àããƒêÕ«ÃÀÀvvv˜:uªÆ/f¥R‰Å‹£I“&066†¾¾>,--1hÐ àèÑ£R@ˆŠŠ‚“““ôïÒ¥K%î":uB5Ô~è$''cÿþý *vÙÜÜ\|ñŨW¯ PµjUx{{#))Icù½{÷¢yóæ022‚••‚ƒƒK þ·nÝBïÞ½amm }}}X[[#$$ä¹û¾QÉtän•»wïB©TÂØØXšvêÔ)dddÀÍÍ 4Àرc…}ûöÁÝÝ×®]CåÊ•‹­S¡P ((Ó¦MÃæÍ›ª2Æ (((ނ܏q?üðzôè~ýú!??»ví¦M›°ÿ~œ?†††%nǵk× ±£íåË—ÕÂSvv6ÜÜÜÞ½{#$$éééX½z5š5k†èèh´hÑ¢Äu;v Ož|»wïF·nÝP§Nܽ{øê«¯pâÄ ìÞ½[eÝ ÈÊÊB»víP§N 6 ©©©ÐÑÑÁ£GТE \¼x;wÆ€ ««‹Ó§OcÛ¶mj_þ111X´h>þøc¸»»cÓ¦Mزe îÝ»‡¿ÿþàèèˆììl,X°£F’Ú]dùòå8}ú4¼¼¼JÜ—111P*•†A±å†Žßÿû÷ïWë,ãÇcðàÁèß¿?öîÝ‹ððpœ9sÑÑÑÐÒzú›2;; ¸{÷®Êò[·nEŸ>}P£F „††¢zõêˆÅÌ™3qôèQDFFJe•J%:t耿ÿþ-[¶ÄĉQ¹re\¸p¿üò òóóQ­Z5tïÞ °´´„ŸŸŸ´¼‰‰I‰û£ˆŽŽúöí‹¥K—âÁƒ033üøãP(øôÓO±ÿ~µå àææ†£G¢k×®>|8nݺ…+VH§´Zµj%•ß¾};zõê L™2&&&øùçŸÑ­[7Ÿ5ÇGÇŽ¡T*1hÐ Ô®]çÏŸÇŠ+°ÿ~œ+??_ 2DPé`ell,ˆyóæ©”Ÿ>}º –,Y¢2ýÙŽ©E®]»& …pqqQkKƒ „¶¶¶¸}û¶Bˆ'OžˆœœµróæÍÓ¸>MSýýý‘››«VOÇŽ…B¡P™6iÒ$@lÙ²Eeúýû÷EµjÕDóæÍÕêù¯ bÚ´i¥–}–¦Ž©éééB©Tª•ýè£ñï¿ÿJÓŠ:çíÞ½[­|aa¡ôw=„®®®¸råJ‰åŠSÔ1µfÍš¢ÿþÿ988”©cj~~¾hР077wïÞUYÏÖ­[Õ^o;vì„®®®ˆWk[FF†ÆýUÔy3&&Feº¡¡¡ ¦Nª¶Ì°aÃ4¾Þ…*¯Ë¢Ž©ÚÚÚ"66V¥\»víqêÔ)iÚÂ… ñûï¿«”MIIºººÂ××Wm}ÿUÔñwݺu%–KNN„£££4­¨c*±ÿ~•òcÆŒĆ ¤iš:¦>zôHT«VM4hÐ@dee©ÔQôþܺu«4íÛo¿ÄÀÕ^c¹¹¹ÒsVPP ˆ>ú¨Ô}ð¬¢×þŽ;Ä™3g±lÙ2!„J¥RÔªUKtìØQ!„———ZÇÔððp@ 6L¥ÞØØX¡¥¥%Z´h!M+((¶¶¶ÂÔÔTܺuKe;ÜÜÜÔ>7 …³³³¨R¥Š¸~ýºJýjŸì˜úâØ1õ-6zôhŒ=Ÿ~ú),,,°jÕ*aÁ‚*åªT©‚1cƨLëØ±#àÂ… ¥®ÇÚÚ8zô¨Ê©ž¸¸8$&&ÂÛÛ5jÔ@___­ŽAƒÁÀÀÇŽ{îí,‰K—.EãÆÕ:á™™™!((qqqj¿ÿëêÕ«€š5k¾t›LLL P(Ô¦1ÀÓ_XEŠö[jjªZù¢_µ`ii‰‚‚é”CqåJsçÎüñÇÿ]¾|¹LuìÙ³‰‰‰5j”ÚQ£>úÖÖÖøóÏ?Õ– ÐØŸ¦bÅŠ%î/M¯™J•*!,,LeZAAV¯^ [[[Œ;VmM¯Ë®]»ÂÅÅEeš¦÷FPP Ô.é]»v-òóó¢V÷½Æ,--K,W4¿¨ü³ÜÝÝáîî®2mâĉÐÓÓ+õtЦM›ššŠI“&©ý‚5jtuuUž·o¿ýFFFøúë¯Õ^czzzŸ³Õ A4kÖL:%ƒ«W¯jìgVdíÚµÐÕÕÅ´iÓT¦»¸¸ k×®ˆÅÙ³g<=:YtÚïÙý¯§§‡I“&©Õ}ðàA?~¡¡¡jŸ >>>pppÐø§ÃÓ1o©+Vxúájee???Lž<666*åìííÕ!^¿wï^™ÖŒ}ûöaݺuøúë¯ü‡Ôàà`•²‡Ââŋ۷o«tÔôÁú2nݺ…ÌÌLäææâ³Ï>ƒB(•J!¤ûb\¸pÅÖSôeZÒý ÊJ_~ù+W®ÄÅ‹qçΕΑÏîƒO>ùÿûßÿзo_,\¸~~~@½zõTêüôÓOŽæÍ›ÃÍÍ ]»vE```‰Û¤IçÎñÇhœ7fÌ,Y²¤Ô:ŠÎ·ÇÆÆJû¼h !ŸŸ¯1Ü6jÔ¨Ø:·nÝŠ+VàüùójûKÓýYlmmÕNi\¾|ùùùpuu…¶¶v©Û@ã=j4½7LMMáïï 6àêÕ«¨U«„X½z5>øàtîܹÔu½Æ>|Xb¹¢ùšN jêUµjUXYYáÊ•+%Ö[ô¼ýõ×_8räˆÊs¦T*¡¯¯/=o………¸té7n,yÕ‚‚‚0bÄœ9sëÖ­CåÊ•UNïü×¥K—P«V-T«VMm^Ë–-±}ûv\ºt ÒviÚš¦í«øøx¯ñÌÌL\¿~ýE7•þƒ!ä-¥©“£&šú`}H‹2Þà¬gÏž¨\¹26lØ€9sæ ???ÿü3ªU«†®]»JåöíÛ‡Ž;âÃ?Dûöíáàà€:uê@GGAAAÈËË+ÓúÊêöíÛ€ÌÌL$$$¨Í×ÒÒB»víJýR*úÒ/탼,æÍ›‡°°04nÜ]ºtƒƒjÖ¬‰û÷ïcðàÁ*¡ÌÌÌ ×®]Cxx8¾ÿþ{L:Ó¦Mƒ··7æÌ™#9pqqÁ… ðÍ7ß`Æ ˆŽŽÆ„ àïï9sæ”Ëœ²ºsçàæÍ›;èÙÚÚBWWWmº©©©Æú-Z„Ï?ÿ5BçÎ¥ý•––†àà`W¾hºd³(4˜››—y[žç½1tèP¬_¿«V­Âܹsñ÷ßãòå˘:uj™BOÑk,99¹ÄrE_nÿ ¢€æíž^æZ\gÌ"Eï•«W¯âæÍ›jóamm àéÍúòòòžk_¾¬Þ½{cìØ±X¾|9¶nÝŠ~ýúÛw¦°°=Býúõ5ίZµ*€ÿÿQQt¤QÓþÓÔ'®h_ݹsGã•hµjÕB­ZµPXXXæÀKÅc¡R wïÞÇž={žžŽ´´4Œ=Zå gþüùP*•غu+š7o.MÏËËÃãÇË´®¢ú222¤“"ÿ=Q·n]@óæÍñû￿жîz‰ÜÜ\‡îËê믿F•*UƒJ•*IÓÿý÷_åÍÍÍ1uêTL:ñññøé§Ÿ°xñbBˆ®O; 7kÖ ‹-¦M›ÔæGGGãСCÒãÙ³gCþýû«‰‰‰Q¹¯ˆ Nœ8óçÏ—¾JбcG$%%aÏž=¥–?~<€§˜Ÿ}¯~õÕW8yò$úôéƒ>øÀÓŽ¯:uÂæÍ›U.‘¿xñ"f̘¡V·ƒƒ>ýôSüõ×_˜9s¦Ú=‹Ø1µ<ñÝ·‹¦Kt‹cll,<==Õ¦wY¦KtŸµhÑ"éRÁï¾ûNm~LLŒÐÖÖ–ÆÁpss†††bÒ¤IÂÒÒRírÙâÆŽ)ºLRWWW´hÑBT®\YµKt…bâĉBGGG‰V­Z‰.]ºˆ†  ]]]Q£Fb·ç¿.]º$­€°¶¶ŽŽŽÒX2VVV"**J*¯éÝ¢}¤­­-ÜÜÜ„³³³000K–,ÄðáÃ¥²½zõDíÚµEÇŽEëÖ­… –.]*•sppZZZÂÞÞ^tîÜY4iÒDèèèYêv•÷Ø1wîÜíÛ·„………èÔ©“ðððVVV€5j”T¶èÝï¿ÿ^ãz—-[&ÍÓ¦MѬY3a`` –.]*ˆ!C†¨”744”.Ýü/¥R)† & …¨X±¢h×®ðòòæææÂÆÆF*WÒØ1{öìÄ·ß~«qE—׬Y³Ä1•ŠsøðaQ»vm@ˆ&Mš333@kÜOE—èŽ1BX[[ {{{áãã#ÌÍÍ1yòd•òÅsîÜ9áää$½¶}}}…›››°°°Ðx ýÂ… …žžžÐ××-Z´>>>ÂÚÚZÙÙÙR¹ï¿ÿ^( @˜ššŠêÕ«kçYÏ^¢[M—è !DXX˜P(¢J•*¢S§N¢~ýú€pvvV¹·hÛ­¬¬„¶¶¶pqqžžžÂØØX|õÕWÇŽ¹ÿ¾èÔ©“ ÌÍÍE‡„———ôù;hÐ ©,/Ñ}q!!!B»Y³fÓºtéò c•'…B-Z¨]ªW\Ù¶mÛ¢qãÆjÓ§—ü5hÐ@e^ëÖ­‹½M·­­-ŒŒŒàîîŽÁƒ«u³¶¶†ŸŸ„ÈÍÍE£FðÅ_`ذaP(hÕª•Ú-˜Ñ®];•i¨P¡ôõõaaa̘1:::pttTÛvOOOôìÙ•*UBvv6²²²`ooàà`,^¼+V,u_O™÷ïßÍš5ƒttt ¯¯N:aÔ¨QX¹r¥t¾øÙö»¹¹I[µj…æÍ›C¡P //mÛ¶ÅܹsѱcGèééÁÝݶ¶¶žU°³³ƒ®®.ÒÓÓadd„:`ÅŠ*W´nݵk׆––>|ˆjÕª¡[·nøñÇÕN}i¢P(P¡B¸»»{Ø^¡P N:pww—úâ( èèèÀÝÝ]¥ ±±1ú÷ïGGGT¬X÷î݃‘‘\\\0qâD„††ªô233Cûöí¥K’Ÿåââ‚–-[Jû«M›6˜3g||| ««‹öíÛ«uÒtssÓ8z±B¡@çÎѾ}{T¬X>„¾¾><==1uêTé—±B¡@ÅŠáîî.þ{¶Ž*UªÀÝÝ]*ÿ¬ÌÌLlݺŸþ9Ú·o_Ü./Ö‡~ˆÂÎÎ|ð²²²àââ‚àà`,Y²·ËÄÄ~~~Òiš›7o¢I“&˜>}ºÚMÍnݺ…Õ«WÃÓÓSåµYµjU <µk׆‘‘RRRP¹re´mÛ3fÌ€¿¿¿Ê席ZµBÏž=abb‚ÌÌL eË–˜5k–Êë¡iÓ¦èÕ«œœœÐ°aC8;;ÃÍͭı¤ lllàîî^ê8 …Bzß?ûºòòòBûöía``€{÷îÁÎÎ!!!øî»ïÔ:œV­ZÐ××Ç£GP§NŒ7Nêóáîî®rd×ÈÈ}ûö…³³3Œqÿþ}èéé¡Y³f ÃÈ‘#¥¶( ÃÝÝ]íêD*ÙÎ;¡ E—{Qñ<<!DD¥ÉÍÍŪU«°ÿ~Œ7î W¯^ÅæÍ›@í(Ñ›ˆ—è•`þüùRÇÏ:uêH"ß4¿ýözõêàé}7J»Â„èMÀBDT,Y²NNNhÓ¦Í{ƒªÆcÅŠ°··Wé Bô&c!"*³³³Z‡ê7QݺuÕ:N½éØ'„ˆˆˆdÁBDDD²`!"""Y0„‘,BˆˆˆH !D¯Ydd$vïÞýÂËÇÆÆ;¬ûðáÃU¯_¿±±±e®{Ò¤I8pà@±óïß¿¯2ÐÙËˆŽŽFPPüýý±~ýz•Ñ€W­Z…îÝ»ãË/¿”K»qãæÏŸââÅ‹jõ9sAAAÅŽ¨œ””„~ýú¡OŸ>8}ú4   Ã† ƒ··7ÆŽ‹øøxËþòË/@PPÊ}>Äœ9sЫW/,Y²¹¹¹/¼?ˆÞG !D¯ÙéÓ§qöìYóžý"~Ö³C¸oܸQmôÝ"?ýô“ÊãÇ«‚Z’ŒŒ äåå۞˗/ãûï¿/s}%¹ÿ>FyóæáçŸÆŽ;<Š}ãÆX¸p!nß¾¹sçúýúõƒ¿¿?  P(ЧOüôÓOðõõEŸ>}Töu‘ÌÌLÌœ9ãÆCXX˜‚.\ˆüü|¬Y³çÎÃÆËeß½/BˆÞçÏŸ‡:wî éK.""¾¾¾ðõõEpp0®^½ŠÝ»wcöìÙÐø…YœÆÃßßmÚ´Á¸qã¤!Êׯ_WWWxxx¨aèÕ«ºté‚.]º`ûöí€ððpÄÄÄ 111xðà>ÿüstéÒ‡sÿóÏ?U†P¶~'''ØØØà£>BLL à÷ßÇ€P·n]Œ3Fº ¹““‚ƒƒ5x¶`æa‚ä IDATÁôïß&&&·ýĉ¨P¡üüüàííêÕ«ãСCÐÖÖFëÖ­ajjЦM›";;[e˜ú"ÁÁÁ°µµ…ƒƒ¼¼¼pðàAOƒTƒ `bb;;;Ü¿¿Ä瀈TñfeDo[[[DFFþþûo¬_¿3gÎÄwß}‡o¾ùFå&T:uB÷îÝáååõ\ë8uêV®\‰–-[bèСˆ‰‰AÛ¶m±páBÄÆÆB;;;©ü/¿ü---dggÃÏÏÝ»w—Fl]·n€§·4oÚ´).\ˆãÇcñâÅøï€˜ÆÆÆ*£³þWff&–/_ŽM›6x:BlÑ(­¶¶¶¸}ûv‰ÛuþüyÄÇÇcüøñ˜1c†Æ27nÜPùµ~ýú¸yó&àñãÇðððÀ¹sç°yófèéé»®äädìÚµ S¦LÌš5 îîî˜6mªT©‚={ö”ØV"RÅBôHOOÇÈ‘#‘™™ àé#Œ1þþþ°µµÅ˜1cвeËëÑÕÕE^^žôEš——' 9nbb‚-Z:tè€={ö@OOM›6… M›6R]'NÄÅ‹¡­­cÇŽ©œ¦)²sçN˜™™I§RŠ¾ØŸ¥ixú"Ož<ŸŸÂÂÂРA€222YYYÐ××/q›GމñãÇ#)) ¹¹¹¸téjÔ¨>}ú -- }ôjÖ¬)Õ <=ídhh¨X±"âââpüøqtéÒçÏŸÇŸþ‰7B___: tçÎôìÙk×®E•*UãÇÇàÁƒ„éÓ§cÁ‚R@!¢Ò1„½Ö®] 777 2‘‘‘øê«¯ÞÞÞðööƉ'лwoœ;wúúúÒ©”ÿjß¾=bccѶm[ÀñãÇ1oÞ<OƒMjj*ÌÍÍqåÊ888 ^½z*}F®\¹HLLÄÅ‹ñÛo¿!;;fffP*•Ð××W #NNNèÖ­<==Ÿ{›srrУGôë×Òtœ={:uÂÙ³g¥pR;;;lذššŠï¾ûÍš5Ã?þ!tttpëÖ-œ;wNZæìÙ³øòË/Uêqvv†¥¥%îÝ»‡€€ôêÕ …pïÞ=tëÖ ‹/–‚;v 3fÌ@åʕѳgO,Y²ä¹÷ÑûŒ!„H;wîDJJ  fÍš°··ÇW_}…¼¼<•CúcÇŽ…££#>|ˆºuëBKK X¸p!0nÜ8•S ÀøñãÑ¥Kœ>}...R Œ9Í›7ǶmÛ°}ûvT­ZÕ«WÇØ±c¡T*ñðáC©MgΜAxx8:„Š+5j„ÄÄDLŸ>={öÄàÁƒ1jÔ(ÄÅÅÁÐÐYYY˜8q¢Ê¶.Z´:::5j”ÊôQ£FáÆ8wîÂÂÂàèèˆÀÀ@ 2^^^xøð!~þùg„‡‡xz*$<<IIIÒÿIJeˤ:5j„E‹ÁØØXe]ÖÖÖpqqA= ¯¯[[[Ô¯_ÇÇÆQ³fM9rvvvÒ©/ÿÿxìÙ³'ŒŒŒˆˆtèОžž APPºvíŠ7ª"*™"$$Dü÷.½:7nÜÀåË—¥Ç&&&hÚ´)Ο?K—.ÁÕÕÉÉÉprrÂ… š5kÂÅÅEúb¼ÿ>áææ&ýZ/’——‡èèh4lØ–––Òt:t§OŸF‡T¾d> CCCÃÌÌ UªTÁƒpèÐ!4kÖ wïÞE“&M ¥¥…üü|ÄÇÇÃÊÊ P*•ˆ‰‰Aff&\]]Õ:Ž&''C¡PÀÊÊJeúéÓ§ñàÁé±¹¹9<=õqäÈ888HýTÒÓÓU.¡555…£££JÇŽC£F4žÂ),,Dtt4 Ѿ}{èêꢠ qqq¸yó&Z¶l‰š5kj|ÎŽ9‚œœéq­Zµ`mm ¸{÷.Ž;†Ö­[K§iˆ¨t¡¡¡ !Dï \»vMîfxBx‰.Ñ{bÛ¶mr7ˆHCÑ{¢I“&r7ˆHCÉ‚!„ˆˆˆdÁBDDD²`!"""Y0„‘,BˆˆˆH !DDD$ †"""’CÉ‚!„ˆˆˆdÁBDDD²`!"""Y0„‘,BˆˆˆH !DDD$ †"""’CÉ‚!„ˆˆˆdÁBDDD²`!"""YèÈÝz³=zJ¥Rîf¼Ó¬¬¬`ii)w3ˆˆ^;†*ÑøñãñÉ'ŸÈÝŒwÖƒ ­­°°0¹›BDôÚ1„P‰ììì*w3ÞY×®]ÃæÍ›ån‘,Ø'„ˆˆˆdÁBDDD²`!"""Y0„‘,BˆˆˆH¼:†Þ 5j€§WôôèÑõë×/—º###qäÈLŸ>½\ê#"¢§BèðäÉ=zHLL„——.\¸###! P(^¸îœœ<~ü¸[KDDOÇÐÈ××?ƽ{÷P£F \»v hß¾= àããƒÄÄD!ЫW/>| §§tîÜõêÕC\\BCCѵkWøúúbÍš5€äädtèÐ~~~hÓ¦ f̘!­{ýúõèÑ£|}}±víZY¶Ÿˆè}Á#!ôƱ··Ç••;;;ìÛ·°±±ŽŽ-Z„O?ý>>>¨W¯Zµj…””ddd`×®]HLLÄ¥K—àêꊶmÛBKK B´k× @aa!þùçܽ{&&&hÒ¤ ÆŽ‹ÜÜ\lذ{öì´oß2ï "¢wC½q<==±wï^ŒèèhøúúbìØ±øðáP(°hÑ"©Ü´iÓ¤À³iÓ&$''#66C‡EÕªUѶm[8::¾ŽÍ&"z¯0„Щ^½zÒß°°°©#iKKKéïfÍš©ÕS±bEtíÚUmzãÆ¥¿TæY[[ÃÚÚZz\µjUT­Zõ¶‚ˆˆJÂKt‰ˆˆH !DDD$ †"""’CÉ‚!„ˆˆˆdÁ«c¨D[·nÅÁƒånÆ;+//mÛ¶•»DD²`¡õêÕ +V¬»ï¬k×®©Ý¡•ˆè}ÁÓ1DDD$ †"""’CÉ‚!„ˆˆˆdÁBDDD²`!"""Y0„‘,BˆˆˆH !DDD$ †"""’CÉ‚!„ˆˆˆdÁBDDD²`!"""Y0„‘,BˆˆˆH !DDD$ †"""’CÉBGîЛmÇŽ8xð ÜÍxgåççÃËËKîfÉ‚!„JÔµkW¬X±Bîf¼³®]»†Í›7ËÝ ""Yðt É‚!„ˆˆˆdÁBDDD²`!"""Y0„‘,BèµËÉÉÁ•+WänÉŒ!„^ʘ1cвeK¸»»cäÈ‘¸yóf‰å£¢¢ÐµkWüþûï/´¾9sæ 33ó…–%"¢7 C½”ÔÔTÌž=ÑÑѰ´´Ä¢E‹TæŸ9sùùù€GáÇD¿~ýЧO©LRRž00_|ñzôèmmmT«V ááá%®#((Æ ƒµµ5V¬X___têÔ ………>|8ôôô^å&Q9R„„„Ž’JÅ å(º¯PÑ(ºaaar7…ˆèµ å%ºDDD$†"""’CÉ‚!„ˆˆˆdÁBDDD²`¡7RVV–ʸ1E²³³qï޽׺þÛ·o#''………HNN~åë&"z_0„ÐkçîîŽGþùçØÚÚ"77‰°°09rK–,Q[öŸþÁ¬Y³^h½&L(sÙƒbÚ´i€©S§âüùóxðàüýý_hÝDD¤Ž!„^X^^nݺà銢£ùùù¸yó&222pçΩü7 öíÛ777µuܸqC…·Q£FžvwïÞ=˜™™ìíí¥éqqq˜þý÷ß2mïåË—ñàÁ©-Eí½xñb™÷=ÅÓ1ôRš7oŽK—.aÚ´i044„ZµjàiˆˆDEEáñãÇððð@“&M`eewwwlذmÚ´´k×sçÎÅ–-[ÔÖ†àà`TªT …VVVžv0a233aii‰Ê•+&Mš„3f@¡P 33Ý»wÇ!CŒîÝ»£eË–ÐÑÑÁ±cÇP©R%¤¥¥¡uëÖeÚÞÚµk£wïÞ000À‡~ˆæÍ›xzÄ'55•£ø=Ž¢K%zSFÑU*•ÈÉÉQ9µ’ŸŸ]]](•J 0LJ‹‹‹4?-- úúú044ÔXgzz: …tÔæydffJ§e^GÑ%¢÷Uhh(„ÐÛAKKK­oGdd$¾ùæ!àáá!•(Rtd¤8•*Uzáö”G!"zß1„Ð[«[·nèÖ­›ÜÍ "¢ÄŽ©DDD$ †"""’CÉ‚}B¨DçÏŸ#®Ž)«œœÈÝŒ2{ðà´µµån‘,B¨DK—.…R©”»e¢T*1pà@L:666r7§Ì,--ån‘,B¨DŽŽŽr7¡Ì¾ûî;L:Û¶mÃ?þ(wsˆˆ¨ìBï„ÔÔTœ:u ~~~ðññÁ¯¿þ*w“ˆˆ¨ !ôN˜5k&Ož ÀÎ;¥Qu‰ˆèÍÄBo½ØØX|ðÁøðÃ¥iaaaøê«¯dl•†!„ÞjJ¥ß|ó F­2ÝÞÞpîÜ99šEDDeÀBoµU«V!((Hãèµ<BDôfc¡·Öƒ:hœollŒ.]º`óæÍ¯¹eDDT !ôÖz¶3jq>þøcìÚµ‹T‰ˆÞ@ !ôVŠ‹‹ƒ……jÖ¬YjÙ &`Μ9¯¡UDDô<Bè­£T*±téRŒ3¦Låíìì ££ƒÄÄÄWÜ2""z !ôÖùá‡Я_?Q‹†yóæ½ÂVÑób¡·ÊLJN:=×rFFFèÞ½;~úé§WÔ2""z^ !ôV)KgÔâôìÙ{÷îÅãÇ˹UDDô"Bè­qüøqT«V VVV/\ÇĉÙI•ˆè ÁBo!/^Œ±cǾT=¶¶¶Ð××Ç™3gÊ©eDDô¢Bè­°fÍôéÓúúú/]×øñãÙI•ˆè  #wˆJóèÑ#¬^½£G.õî§………ÐÖÖ.µN]]]lܸ}ûö-¯fÑsb¡7^^^^™Ç€Y´hQ™NÙôë×UªTyÙ¦ÑK`¡7^õêÕQ½zõ2•ݼy3ÜÝÝ_mƒˆˆ¨\°OÉ‚!„ˆˆˆdÁBDDD²`!"""Y0„‘,BˆˆˆH !DDD$ †"""’CÉ‚!„ˆˆˆdÁBDDD²`!"""Y0„‘,BˆˆˆH !DDD$ ¹@ª®_¿Ž~ýú¡V­Zr7å­tæÌÉÝŒ7–V¬X!w3ˆˆ0„¼qôôôо}{L›6Mî¦Ð;ˆˆÞ$<CDDD²`!"""Y0„‘,BˆˆˆH !DDD$ †"""’CÉ‚!„ˆˆˆdÁBDDD²`!"""Y0„‘,BˆˆˆH !DDD$ †"""’CÉBGî½ víÚ…œœ¹›Q*…B?þøCîf¼:uê Q£FåZg^^”Je¹ÖIÿOKK zzzr7ƒÞ` !Då`ÕªU2dˆÜÍ(Õ'Ÿ|"w^H~~>~øá,Y²¤\ëõóóC½zõʵNú—/_ÆŽ;än½ÁBˆÊ¹¹9¼½½ånÆ;+''ûöí+÷zÍÍÍË=ØÐÿ •» ô†cŸ"""’„Ñ[åСC¸té’ÜÍxç5jÔÎÎίt !DDôVY¿~=ånÆ;-33¿þú+Cѳ´´´àîî.w3Þiiii8tèÐ+_û„½a®\¹"wˆ^ †¢·HXX‚‚‚0~üx8p Ä²6lÀ²e˰sçNµË$ÿùç¬_¿^ãrQQQ˜8qb¹µù}çèè¨òxܸqؽ{w±å•J¥tª!&&¦Ä²0`À¸ººÂÍÍ 8uêÔË7šè5a!z‹lÛ¶ ÿûßÿàçç‡Ï>û ‡.¶lvv6²²²P«V-̘1CeÞÂ… annB¨ÌËÍÍEFFFù7þ=uýúu•Ç÷ïßGvv6„¸zõ*222püøqéyÐÒÒÂO?ý8pàþþûo$%%!77pþüy}………廈JÀBô–±²²B«V­Ð­[7DEEaíÚµ†§§'\]]¡R¾AƒÐÒÒ™3g©©©8yò$¼¼¼àííÎ;£[·nøûï¿ÕÖÕ«W/¤¤¤xú«|Ê”)€ .`ðàÁèܹ3 „G½â­~÷äçç£eË–ÿüsŒ5 ƒÆáDZpáB)””õ‹’Ô)•J,Y²«W¯F•*U §§‡™3gÂÆÆ}ûö-µ/W‘èèhœ>>˜;w.†Š  %%!!!R¹Áƒ£B… ÐÖÖÆ×_ ###øùùaøðáøõ×_UBª··7,--‘••…¾}û>ûì3|ùå—X¹r%rssѪU+L˜0¡üwÆ[$..þù'–-[†aÆA¡P`Ë–-˜1c<<<`jjа°0ìÛ·ß}÷®\¹‚%K–`ùòå‡ €§!¦uëÖ¸qãnܸ¡C‡¢Zµj¸tévíÚèׯ´´´––†&Mš`Ú´iصkâââ0oÞŠ*Ónݺ%®_¿.=>|ø°BˆÛ·o‹äädiºR©ÑÑÑâÉ“'Ò´;wîˆ?þøC¤¤¤ˆØØX!„<.\Êœ;wNìÙ³GÜ»wO\¼xQšž““#vìØ!öìÙ#²²²ÊwCÿãÉ“'â³Ï>+÷zû÷ï_îu'33ó¥ë(((wîÜJ¥²Ìå?~¬2M©TŠ»w¼<µòåÒÎ"¯ê}ñ:ÞoÙÙÙÂÉÉI(•Jáåå%<==Eaa¡pvvB!æÏŸ/>úè#ѦM‘››+„B___å=VäúõëÂÔÔTzÿ¶k×N$''‹óçÏ‹nݺIå5j$ž¹ŒõƒcÇŽqõUG”„B!%ÐÕÕ…½½=6lØqqq¬\¹’ë‡ÃÃŒ3pôèQlÚ´ zzzPTT„‰‰ 8555Ô«W999xýú55jÄuüýÖСCqèÐ!OЄ‡‡£gÏž\s111tëÖ aaaèÚµ+·:tèÀ lǪi?'„B)ŽŽž={†ÁƒcРAxþü9×ïbÓ¦MPWWÇo¿ý†Ý»wÃÔÔyyyX³f $$$жm[Œ?ššš¥ï  €ÁƒcäÈ‘9r$–.]Ê]-)dooåË—cÊ”)>|8ÀÜÜžžž˜8q"&L˜[[ÛŠ;ˆ®„B!%8p`‘Ñf333¹;µ¦¦&¼½½ÜÆÙ·oöîÝ‹””ÈÉÉqW@¾}<÷ĉܿ׬Yƒ¬¬,HJJBL¬àÚÀäÉ“1yòd€††._¾Œ¤¤$îV¼¼<:„¯_¿"??¿ÚÞJ£$„B1 ‰Ÿ?§N:?,#++[l™(úñ‰’BD !!¡R¦½®­²³³‹ü %„Ô ”„"ÏŸ?‡ƒƒßaÔXu¹ùÁƒPQQy½¤M†G~„’BD`èСpuuå;Œ«p/QXìË—/ešZàWQB!¤Z‰‹‹£>X,77÷§Fç-/JB!„T+mÛ¶¥¾<,55›7o®ðv¨O!„BxAI!„BxAI!„BxAI!„BxAI!„BxAI!„BxAI!„BxAI!„BxAI!„BxAI!„BxAI!„BxAI!„BxAI!„BxAI!„BxAI!„Bx!Áw„ÔžžžPQQá;Œ‹1†îÝ»‹¼Þû÷ïÓy«@€ïHGI!"0|øp¸ººòF•™™ [[[‘×Û¿:oÈÒÒ’ïHG·c!„ JB!„ ºC!¤Zyýú5õå©`yyyèÑ£G…·CI!„j¥sçθsçßaÔh©©©Ø¼ys…·C·c!„ JB©ÉÉɈˆˆÀ§OŸÊT>??8zôhGFJóéÓ'DDD 99¹Lå³³³qëÖ-\¾|¹‚##¤f $„J°jÕ*Ìš5 ,€––|||J-þüy¸¸¸ uëÖåjoæÌ™ˆŠŠ*×¶ä?FFFX¼x1ÌÌÌ0dÈ„‡‡—ZÞÑѾ¾¾——/W{ºººåڎꊒB*Éüùóáî+WbëÖ­ÜòøøxìÙ³?PÐéîï¿ÿFãÆ‘ HOOÇþýûáççÇmçííÐÐPìܹ>ä–¿{÷>Ä‘#GpâÄ @nn.Ξ=‹sçÎ!77·2v·ÆØ´iΟ?±cÇâï¿ÿæ–¿{÷;wîä“   ¸»»£~ýúÈÏÏÄÆÆb÷îÝ á¶;wî^¾| GGG|øð[Œ/^ÀÕÕ×®]dddàСCðöö®Œ]%¤ÒQBH%ÊÏÏÇ‹/ -- ðòò¬Y³Ð¡C¸¸¸ÀÕÕ222‘‘AëÖ­¡  €/^`ܸqhÑ¢nܸ•+W>Œ¹sç¢U«VhÑ¢×FÆ Ñ A())AII @Á/ì?"** C‡­ü¯æ²³³ñúõkî¼¹¸¸`Æ èܹ3.\4kÖ õêÕCÇŽѼys\ºt óæÍCÇŽáèèˆãÇ6oÞ {{{¨¨¨põ€œœ¤¤¤ ¬¬ EEEdff¢_¿~€§§'LMMyÙwB*%!„T;;;téÒ[¶lÁŽ;'NœÀÈ‘#!0|øpœ|§OŸF||üË'''ÃÁÁ ,(W{Ÿ>}B^^^¹¶­í( !¤’lÚ´ oÞ¼Á’%Kð矢¢¢‘‘¸¸8dddÀÊʪØv‘‘‘ÈÊÊB\\âãã±lÙ2î¯sçÎ?l÷ãÇEú(4oÞ?~Ñ^Õ|nnnˆŠŠB¯^½pèÐ!@LL RRRYYYÛ.** _¾|A\\òòò`ffÆ­+Ëy‹‰‰)r…KZZ©©©"Ø£šïÀ A||< Š$€%9rädddàääT®öŒŒŒP®mk;'„J¶|ùrôèÑoÞ¼‰‰ ^½z…E‹AJJ ÅÊO:GÅêÕ«Q¿~}DDD@\\¼Ô6Ú·oððp´oßššš˜?>×QõñãÇ8xð`EìZ%àììŒ>}úpWŸc˜6mcˆ‰‰)¶‰‰ RRR`ee DFFþ°V­ZáãÇPPPÀ˜1c0qâDÌž=>|€¤¤d¹;¼ÖFÇÇÈ‘#¡¤¤„íÛ·cêÔ©ÈÍÍÅÅ‹áááMMMÌš5 ÷ïßÇž={жm[0Æ`mm[·náèÑ£PQQÁœ9s ''‡;v yóæ8}ú4,,,0bÄ€ŸŸBCCaii‰:ÀÙÙ/^¼ÀÞ½{Q§NÌ;:uâùhT]t%„JЩS'4kÖ ..ܸqS§NE§N0iÒ$ >œ{´SII ²²²Œ5 ¦¦¦>|8þùç@×®]!##Sb{…`§M›qqq¸ººÂÎÎvvvpuu…„ýþ(‹^½z¡~ýúYYY,X°wîÜÁŠ+šš }}}Œ5 ÁÁÁUUUÔ­[`nnŽæÍ›ÃÐÐzzzðôôôîÝRRR%¶·nÝ:ØØØÀÞÞ­Zµ‚­­-fÍšWWW8p ö¸æG@@þùç 0°ÿ~<~üÿüóvïÞaÆaذaX½z5,X€«W¯ÂÃÃ{÷î…²²2V¯^  àÏÙ³g±oß>èèèpí <ݺuƒ««+œ‘——###XYYÁÄÄ“'Oæeÿ« FªŽØØX¶f;à ?‰ÞGK(²… м^:o«¢Žïê1c=z4366f]ºta±±±Œ1Ættt˜••³±±a .dêêê\}>>>Œ1ƦOŸÎLMM™ ³±±aŠŠŠŒ1Æ&OžÌ®\¹Rb{ÚÚÚ\ÞÞÞÌÜÜœ[7nÜ8öï¿ÿþÚó %%…ÙØØThŒ~B©q¬­­1räHîöÉÅ‹!--‰'¢C‡€¥K—ÛNZZ €––ÀÒÒ’[×¼yóÛ`Œêׯ¡PÈ­ …ÜÕ4RÝŽ!„RcMž<  ÄÌ™3±k×.$$$ 55Ïž=+V~ÆŒ8pࢢ¢ðõëWnüžÒ¨©©áÔ©Sxúô)444‚sçÎáĉHMM-SGäÚŠ’B!5ÊøñãѱcGîõ®]»””CCClÚ´ —.]‰'¸>Uh×®@CCGŽŸŸ8€zõê(HfJlÏÞÞrrr¸{÷.üüü¸$†&Ú+ÝŽ!„R£Œ7®ÈkuuuîßÊÊÊØ°aC‘õE^·mÛ–°PiL›4i‚iÓ¦q¯edd°páÂŸŽ»6¢+!„Bá%!„T‚ÂYtË2zczz:®\¹¡PXâHßo"//îîî¿«——W™â$%ûÑ$w|ˆŒŒ¤9ƒH•DI!• pÝùóçcРAð÷÷ÿnÙ„„lß¾ÉÉÉÐÔÔäzÝ@@@fΜYâv999X»ví/ÇzàÀ¼ÿþ—ë©  „ôôtîµ££ãGß422>>>>Å’Š/^p³.—$''ÁÁÁÈÈÈà–EFF"##ÁÁÁÈÉÉá–øðÛ·o—"j”„RÉ’““Ñ A|úô ¦¦¦†¼¼<†^¬ì¬Y³¸ùJ222póæML˜0‘‘‘4hÄÅÅ1jÔ¨bÛ]¿~÷ïßP„¬[·@Áí“&M‚‚‚Ο?_¬ƒ^¡={ö cÇŽØ»w/N:Ø·o¬¬¬Ð®];lÞ¼ûöíP0£ìüùóѾ}{lܸ±Ö ?xð`˜››ÃÍÍ êêêÜØººº€   „……ÁÍÍ 111ÜœA÷îÝãŽP0Cïׯ_ñþý{4iÒ@A°~ýzx{{ÃÀÀ×®]Pp,--ˆmÛ¶BCC1~üx=zcÇŽÅíÛ·KŒ×ÆÆnnnÐÒÒ‹/ -?nÜ8;v ÚÚÚ\riddCCC?~ÚÚÚxòäIAB( !¤ÒØÙÙ¡_¿~8{ö,–/_hÙ²%lmm1eÊÈÉÉ» 2nÜ8x{{ãË—/8{ö,ôõõQ¯^= 6 Ÿ>}ÂÛ·o‘””T¦yI€‚_éC‡…„„´µµqúôéË™™™a̘1X¸p!nݺÅ-Ÿ5k&L˜€;vébnnCCClß¾]$ýRªƒŒŒ lÚ´ [·nÅàÁƒ‹=Š9~üxhjjbíÚµèÔ©7NÅÊ•+akkË•[¿~=&L˜€?þø žÎØ·oÆéÓ§ãäÉ“€{÷îaÒ¤IX¾|9œÿüó¬­­±nÝ:ìܹ®®®%Æ;}út899aÞ¼y¸xñ"·|Ö¬Yؾ};pøðan¹¹¹9¶oߎµk×âÈ‘#"9fUYáÜJ››[ä=•OŸ>!::ºÈ•ÉB111¸{÷n…ÇøñãGøúúnß¾OŸ>!;;gΜ©ð¶+ %!„T’M›6!((—.]B÷îÝŠŠŠÜúF!--­È6RRR?~<<<>ž»ráàà€€€ôêÕ‹›ñÕß߀¥¥%þüóÏïŽe¡ªªZb¬=zôàþÿðáÃ.¯©&L˜€·oß(¸õ¨¤¤ÄýŸ9s6l@JJ ^½zUlÛׯ_s‰âÏ*¼rVaaa8~ü8€‚+`éééøúõ+7+wuDI!UÜÌ™3áää„„„ôíÛB¡ÉÉÉøí·ß ##Sb? uuuܽ{Œ±"¿n§NŠØØXL™23fÌ€¶¶6àÑ£Geºä~úôiäææâÌ™3ÐÓÓ+²??Œ1äååáìÙ³011ƒƒC‘A·Z·nÝ»wãßÿÅ¡C‡™™ àðáÃ8|ø0þúë/À§OŸŠ´/JŒ3((ˆûáßCiË«ºŒŒ n"È?rWæÒÓÓqãÆ ÄÄÄpëàìÙ³HJJ‚¶¶6w•ÁÇÇ“'Oæ®zøøø@[[Mš4A—.]¸mïÞ½‹;v %%¥H wîÜÁŽ;‚{÷îqËÃÃñsçN¼{÷ððáC¼xñ®®®¸~ý:€‚+6l€‹‹K±þ@ßêÖ­5jĽöõõÅÎ;‘ššúóG”„R ¾E·Pýúõ¹_§Ð½{w4hÐõêÕCÏž=¹å½zõBŸ>}ðÇêÕ«kkk`Íš5˜?>5j111ôíÛ@ÁS7†®®.ÄÄÄ ¡¡5j´µµabb‚áÇs¿ªBBBðòåKE?Ü4hÀ]µ€6mÚÀÀÀOŸ>…·\QQúúú ãn5Õ³fÍ•+W0zôhèèè`úôéhܸq™¶íׯbcc1zôh<|øššš033ìY³0{öl®ÜòåË¡­­ ===ØØØ yóæ=z4Ž;†)S¦àܹs\Yccc˜ššbÆŒÐÓÓCݺuaff///Lœ8&L€ `Íš58þüã¼qã áââR$®«W¯ÂÐЀ™™YYïêÕ«[[[0ÆàîîŽùóçãëׯ¸uëîÝ»‡–-[ÂÅÅ·nÝÂéÓ§áááYYÙ"IÈ£G°dÉŸ† RäJÄŸþ‰}ûöAAAŽŽŽ\û«V­ÂÉ“'¡¨¨ˆ9sæpIО={°qãFtîÜóçχŸŸš5k)))(++CQQ·nÝÂ?ÿü]]]ÈÊÊ–š„KKK+¶<>>žeff[þåË–žžþS1ijj²èèhöùóç"Ëû÷ïÏbcc‹-ÿY|Í¢kddÄ?~ÌÆÏV­ZÅ®]»Æ,--Ù;wcǰgÏžL]];Æiii¬}ûöìóçÏlĈ,??Ÿ 2„ÅÄÄ0Æc·nÝb³gÏfŒ1¦¡¡ÁRSScŒíܹ“YZZ2ÆëÕ«ûòå ·|þüùŒ1Æ ÀÎ;Ç®_¿Îœœœ¸ò]ºtáâ¾páÓÕÕe·nÝbyyyÅöËÓÓ“›¡×ØØ˜°äädV¿~}–••ÅclݺuìäÉ“?{H‹©¬YtéJ!¤LzõêÅõ‡øVï޽ѰaC"ª<¢˜ULL òòò/Sy@Pär{¡fÍš¡N:Å–KKKÿôy(¬§AƒE–KIIA [^]èèèàæÍ›ÈÌÌÄ„ pûömøûûcàÀ Χ¸¸86liii}²deeqìØ1 0Mš4Á¹sçJ¼•––ÆŸog× …Üqýöýƒ””ÄÅÅANN®ØÐò@AGôõë×ãüùóPWW/q°Â’4nÜRRR úmÅÄÄ”i»ª€’BH™ØÛÛéŸPhõêÕÜÔè¤z¹}ûv‰Y}}}¹NÈÕ‘®®.vî܉>}ú gÏžðòòBóæÍ¹äÀÊÊ ‹/†®®.÷ø:hkkcÓ¦M|üø‘»ut| Žûý÷ß¹Ûœ-Z´à:–GGG£ÿþØ»w/z÷î°°°2íoLL üüü  qþüyn.œÃ‡Wù‘r) !„R£tèÐýû÷‡ 0uêTƒÈÉËËã÷ßÇŠ+Ã=?fÌtìØýû÷èéé¡C‡2dé˜êàà€[·nÁÐÐ @çÎ[·nEjj*–.] uuu´iÓ@AŸ””}}}Œ=šëP¾~ýz,]º«W¯†ŸŸFŒ &@^^žK† }Û~aß-IIIÌœ9gΜÁ¤I“0}út®Ìùóç«|B}BªêR=Ñû¨bñÝ'„”_}BøÉ>}úÄ^½zÅ´µµYXXß!•Keõ ‘à; "„BjŠÄÄD8::¢Q£FX¿~=”••ù©J£$„xùò¥H&#%«¨KÊiiiEÆQ©òóó‰víÚñÊΑS›¨©©qS£$„(¬«:INNÆêÕ«áààPæ±/øTøƒ(­ZµªÄ «2wwwÂÉÉ ’’’|‡SªÂñiùJBÿˆ¬ªKLLÄÚµk±råJlذ»víBÓ¦Mù«ÒuëÖï~Jll,rrr°{÷nxzz0ŽêˆžŽ!¤–IJJ‚••vìØ555lÛ¶ óçϯ•—Ϋ› 6`ÕªUèÓ§ðáþC"ä—ЕBj‘¤¤$XZZbÇŽhÙ²%@^^žKDvïÞ]+¯ˆT¾¾¾èÚµ+7~‡½½=lmm±oß>ž#«|¹¹¹X´hßaü’¼¼<…Â*; \VVV‰ƒŠ%!„ÔÉÉɰ´´Ä_ý…V­ZYײeKlÛ¶ óæÍÞ={(©brss±ÿ~9r„[Ö´iSôíÛ7nܨQ“–…‹‹Kµëƒõ¿¶lÙ‚ððplÞ¼™ïP¾KB¢âSJB©RRR`aaggg(**–X¦eË–pvv¦D¤ ÚµkæÎ[lÈw333L›6 C‡-q(÷šJRR²ÊwÊ-Íû÷žŽAƒÁÇǧÖ%‘ߢ>!„Ôp)))˜={6¶mÛ†Ö­[—Z¶ðŠˆ••õ©"bccñþý{hjj['°xñb8;;ó)/ØÛÛÃÌÌ ÇŽCVVß!ñ†’Bj°ÔÔT.)>úGZµjgggJDªˆÂ/¬ïéÝ»7’““©“j5qåÊhii¡I“&ÃâÅ‹±mÛ6¾Ãâ %!„ÔP©©©077ÇÖ­[ѶmÛŸÚ¶U«VtE¤ ðññŠŠJ‘YZK²bÅ lܸ±’¢"å•™™ 777̘1ƒ[Ö§O$%%!""‚·¸øDI!5PZZÌÍÍáääTî‘5°mÛ6Ì;—äææâàÁƒ°´´üaÙ&Mš`À€¸~ýz%DFÊËÉÉ K—.…@ (²ÜÞÞŒ9sæ”»hjjÖÊþU‘££#–-[V¬3ê÷¬\¹²V=éDI!5˜††¬¬¬`aaQæDäÛ¤_¿~!ùÖÏvFýžiÓ¦áôéÓÔI•goß¾…P(„ªªj™·iܸ1´´´pùòå Œ¬ê $„îg‘ÂÄÌÌŒú€T²˜˜|üøQdǽ¶‚UüùçŸX±bÅOo7}útxxxÔŠNª4w !µ@Ÿ>}`eeKKK¸ºº–8ïFnn.¬­­annuuu¢¬ÝÖ®]‹´´´2 ËÍ‚\šÀÀ@L›6í»ó‘Šsþüyèêê¢Q£F?½­@ ÀÒ¥Káää„U«VU@tU%!„Ô…‰ÈܹsáêêZd†ÌÂdöìÙèÝ»7QÖ^ûöí+sÙÂd’TM8þ<Ž=Zî:zö쉓'O"<<JJJ"Œ®j¡Û1„Ô"êêê˜;w.æÎ‹ÜÜ\ÿ% ”€"ŽŽŽX¾|ù/׳bÅ üùçŸ"ˆ¨ê¢$„Z¦0±²²‚P(Ä‚ `iiYâHŽ„Ÿóúõkdgg£{÷î¿\—ŒŒ ´µµqñâEDV5ÑíBj¡Þ½{ÃÒÒ:::Ø·ozôèÁwH„ÔÖÖÖèØ±#lmmK-—››‹¼¼<Ô©Sç‡u^¾|zzz¨W¯ž¨Â¬2( !¤–êÝ»7TUU)!D„ÜÝÝËTîÑ£Gxýú5LLL~XÖÖÖRRR¿Z•DI!µXYP"„”MãÆËT®Aƒ¨_¿~™Ë×TÔ'„B!¼ $„B!¼ $„B!¼ $„B!¼ $„B!¼ $„B!¼ $„B!¼ $„B!¼ $„B!¼ $„B!¼ $„B!¼ ¹c!¤š‰ˆˆøá,­¤|äää°téR¾Ã¨5( !„jFQQ‘’ B Hå¢$„Bª ‰Z?ûjE‘ ¯ÅÊD}B!„ JB!„ JB!„ JB!„ JB!„ JB!„ JB!„ JB!„ JB!„ JB!„ JB!„ JB!„ JB!„ JB!„ JB!„ ¾ 5CNNfÏžÍw5ZBBš5k&Ò:ÃÃÃ1cÆ ‘ÖY¤¥¥AZZÕë£000°Ö·õë×£M›6|‡AD¬z½óH••——‡Æcûöí|‡RcYZZÂÕÕ•ï0j”Í›7ÃÈÈíÚµã;”ŸRÛþ\]]‘œœLIH D·c!„ JB!„ JB!„ JB!„ JB!„ JB!„ JB!„ JB!„ JB!„ JB!„ JB!„ JB!„ JB!„ JB!„ JB!„ ¾¨Î¢¢¢ðñãG‘Ö™––¡Pˆû÷ï‹´ÞŠ–¸¸8‘ÇݲeK´mÛV¤u¾ÿYYY"­³2¤¦¦âåË—|‡Q&222hÙ²%ßaBª8……suuå;ŽjÉÖÖmÚ´Aýúõù…wùùùxñâzôè!²:srrðâÅ lß¾]du€† &Ò:+CLL ZµjÅweòäÉ>|Xdõ¥§§cüøñèܹ³ÈꀷoߢU«VÕî=œ””YYY‘Ö™––L:UduÞ¿›7o†¼¼ü/Õ“iiéJ9OÙÙÙ’’ªðv²²²““ƒ üR=QQQppp€šššˆ"«<–––t%äW™˜˜ qãÆ|‡Q#effÂÖÖVäõ***bÑ¢E"¯—ügÆŒ"­/??}ûöÅæÍ›EZ/ùÏýû÷ñäɑ֙™™ ###‰´^òWW×jye·õ !„B/( !„B/( !„B/( !„B/( !„B/( ©†ÒÒÒàî[·âúõë`Œ}·lLLL™ž(ÈÊÊÂÙ³gáèèˆ3gÎ ''JÅ××gÏžýù¨…’’’püøqlÛ¶ ^^^ LLLüá¶ñññÈÍÍPð”È÷žìÉÈÈÀáÇ‹ýwûöí2ÇSæ²5•»»{±eË—/Gfff±åvvvøúõ+âââàíí]¬žüüüï¶óøñcî1æ„„î=GÊ/ ýõöíÛ‡ØØXÀŽ;^æ:NžÄüÖ­[ÃÕÕ{öìÁ­[·"°&òööÆ7ðîÝ;nÙ´iÓ¸?xð›6mB·nݰlÙ2ÈÈÈàóçÏ8räîÞ½ Œ3bbßÿ]ÎâE‹Ð©S'xzzbÊ”)011P0ÆÊÔ©Sá‬,üûï¿pppÀDZÿ~$&&ÂØØÓ§O¯¸ƒP]YXX0R>666,%%¥RÛÌÈÈ`***lìØ±ìàÁƒL(2Æ aâââÌÓÓ“…‡‡3UUUöùógÆFŽÉcÌÚÚšéëë³ÄÄD¶cÇfooÏcLUU•ùùù•Ø^—.]¸_¹r…ÉÉɱ‡²ììlvèÐ!¶víÚ ÛW¡PÈ.\(òzåoÞØØ˜³ .°:°«W¯²Ç3###ÆcnnnlÊ”)ìܹslâĉŒ1Æ’““YçÎÙĉÙ±cÇXvv6cŒ±G±©S§ruGFF²/_¾°¯_¿2SSSÄcläÈ‘ìýû÷Œ1ÆrrrXÇŽcŒy{{³Ñ£G³¨¨(–žžÎ>}úÄÕ5aÂvûöm–ŸŸÏÔÕÕYhh(‹‰‰a `B¡ÅÇdz^½z±Ö«W/ÅcLEE…åææ–ûøš>}ú/×ñ­””fcc#Ò:¿§E‹Å–õèу-X°€%%%1 väÈÆcjjj,99™Ý¹s‡Ù¦yóæ,++‹;w޵nÝš½zõŠ=}ú”iii1Æ»té³¶¶fŒ16~üxÆc,44”²ììlöùóg–˜˜X‘»Ë d..."­ÓÛÛ›:uJ¤u–dÆ lÁ‚%®›<{Mô£Ï°éÓ§CFFcÆŒÁÝ»wÜJ›7oäää`ff† .”¸í·çQVVÆÆÆhÒ¤  ÿRãRQQ™™<<<~yèúšŠ’jHLL #FŒÀÞ½{¡££Ãõ1ø¶ã\fff‰oÊF¤¤¤ PSSÕ+WJlK y]Ò]m¢«« ///„††ÂØØOŸ>…———„dddàÅ‹‘‘Áû÷ï¹íÄÅÅa``€@UUwîÜ)öŵ~ýz¨ªªâôéÓ˜þ  ä/8––FFFF©ñJKK£M›6°´´„¥¥%NŸ>¡C‡(¸„ݳgO…B!÷yÙ³gO„††rÛ¾xñêêꀆ rË¥¤¤Šõúß÷Ï¡C‡ààà€‡r}THQ”„T3þþþØ¿?BBBpåÊøùùaøðá ú…8p>>>ðññá¾l~dýúõ8~ü8V¬Xàà`œ:u ëÖ­Pt\»v:Íý¿víÚ!** Íš5ƒ˜˜š7oŽÈÈH´oß@A/ù¹sçÂÍÍ æææøòå ¼¼¼pøða<þ/^Ä“'O0dÈtíÚ¡¡¡ðõõEBB²²²   "_}ÖðGµäåå---Ô­[·ÒÚ¬W¯‚ƒƒqãÆ 0ưbÅ tèÐñññx÷îºu놧OŸb×®]\ö/--Íu"íÔ©wy·N:PSSCÓ¦MñÛo¿!44>>>à:JêèèàÁƒ …èÚµk‘ýвeK´k×®Bö577^^^9r¤Hë½rå ~åo¾Y³f6lZ·n–-[¢wïÞPQQA||<ÒÒÒ0{ölÈÊÊ¢}ûöHIIAç΄›7oBBB«W¯†‚‚$%%¡¡¡»wïBNN†††ð÷÷Çëׯ1oÞ<´nÝ:t@Ÿ>}‡°°0ôïßbbbèׯZ¶l \¸pÁÁÁ8p dddü"SQQA“&M0uêT¼}ûîîî0`|||`gg‡Faøðá DŸ>} ©©‰W¯^!&&æ—få¼páÆ_îíÿWff&îÝ»W)³ggg#** ÑÑÑˆŽŽ†²²2š4i‚Ñ£GÃÃógÏ.GŸ>} !!)S¦ 11·o߆±±1LLL   ''‡Ž;(87}ûö…˜˜÷~RSSCrr2ž={†^½zÁÃ÷oßF¿~ý`ddTj‡IQ‰ŽŽF\\úôé#²:#""ðåËtïÞ]du–D ÀÄÄ_¾|¯¯/¢££1gδlÙ@Ám‘« 6„ŠŠ  „ºuëÂËË +W®äþÞûõ뇶mÛâÒ¥KPRRÂÆ¹ÛÏÿûtš’’š5k à ™-Z U«V¸w•ˆ .@BBK—.ýåsKòèÑ#ÈËËWË[ªW®\¡Ž©¿‚ީߠøC¤ªbÇTR6Õ¹cjmU;¦ÖfÔ1•T òòòôø!„j…’BNN“&Mâ; B!¤Ì( !„B/( !„B/hØö_”••UâÄVä×eeeñ!„ DIÈ/ˆˆˆ€ŽŽÄÅÅù¥FbŒAIIIäõÞ¹s]ºty½ä?­[·i}™™™8tèP±‘J‰è…Bn¬ Q‰ŽŽ†6lØ ÒzÉRSS±{÷n¾Ã(7JB~A»víàêêŠÆóJ”™™ [[[‘׫££WWW‘×Kþ3cÆ ‘ÖW·n]Ìœ9›7oi½ä?…“%Š’¢¢"œœœ~8p)?WWWn<”êˆú„B!„”„B!„”„B!„”„B!„”„B!„”„B!„”„B!„”„B!„”„B!„”„B!„”„B!„”„B!„”„B!„”„B!„”„B!„”„B!„”„B!„”„B!„”„B!„|P½yóêêê|‡Rc)++‹¼N///¨¨¨ˆ¼^òŸfÍš‰´¾ììlœ9sÏŸ?i½ä?©©©ÐÕÕiIIIpttÄñãÇEZ/ùχàèèÈwåFIÈ/èÔ©<ˆÆóJ”™™ [[[‘×;lØ0¸ººŠ¼^òŸ3fˆ´>IIIhhhÀÜÜ\¤õ’ÿ„……1&Ò:edd0zôh :T¤õ’ÿ\¾| 6ä;Œr£$„Rå ´mÛVä¿Ôɤ¥¥ñäÉ‘Ö)!!îÝ»Óy«@oÞ¼„Dõý*§>!„Bá%!„Bá%!„Bá%!„Bá%!Uлwï••Åwä'äååáÍ›7"º€T¬ŒŒ DDDðùIÉÉɈ‹‹ã; "”„T ›7oBUUÚÚÚ˜2e nß¾]jù¬¬, 0{öìAJJJ¹Úóõõ-o¸äÿíß¿½{÷†¶¶6¦OŸŽÇ—Z>** ZZZØ¿?rssº½ãÇ#44´¼á’ÿ7gÎ 8C‡ÅâÅ‹_jù‹/bâĉ¸|ùr¹Ú[½zu¹Î7)JKK ÚÚÚ6lÖ¬YóÃcºiÓ&ÌŸ?÷îÝ+W{+V¬(×v¤bPR222 ¥¥¬Y³ÈÏÏçÖGEE!11›› ())ÁÂÂòòò€„„DGGsÛ¤§§#11‘‘‘ á–çççÃÛÛ¾¾¾xùò%rrrB¡¯^½ªŒÝ­1ÒÒÒ0uêTøøø`Ê”)Xºti‘õoÞ¼Á—/_ߣGB[[VVV””DFF"))‰Û&)) iiixõêÞ¼yÃ-ÏÌÌÄõë×ñàÁ¼|ù’[žššJ¿ÐR||<þúë/ܹsõë×Çž={Ь A^^€‚óqäȘ™™á·ß~ãÊ„††¹ ¡Pˆàà`î½ )))ððð@XX>|øÀ-ÿðáC¹~@ÔfÑÑѸyó&®_¿Ž§OŸâÒ¥Kܺœœœ"ÔÅÄÄàøñãX±b†  à³ïÙ³gE®B†‡‡C(Âßß¿ÈùŒ…»»;^¾|‰OŸ>qËÃÂÂèê3OªïÃÅÕŒ‚‚’’’ ˜ššBVV©©©èÚµ+,X€7nàýû÷8sæ V¬XKKKîC³^½zعs'.^¼ˆ;w¢}ûö044D=Œ(ùäÉHJJ"??ÖÖÖ¸yó&<ˆ.]ºàíÛ·8{ölµÔ†mÛ¶å¾d`ii‰¶mÛâÝ»w˜0a´µµáïï@€ëׯÃÌÌ Ó¦MC³fÍ””„ž={ÂÆÆ»w—:vìˆ)S¦ S§N .+>ç5kÖ`ëÖ­ðõõEóæÍ‘žžŽ3gÎðyª@€6mÚ 00€-[¶ k×®†££#¾~ýŠ×¯_ãöíÛ¨W¯:vìtîÜ!!!X´hFŒ™3gBJJ ]»v…™™äää¯^½Bjj*<<<Ю];˜™™ÁÄÄRRRHNN†††V­ZÅça¨v$%%ѲeKîývâÄ œ;wJJJxüø1NŸ>€€|úô gΜÁ˜1c””„½{÷BYY=‚‹‹ :uê„!C†@CCÊÊÊèÖ­êÔ© Bzz:ÜÜÜ ¡¡---Lœ8ÊÊÊ ………¦L™Âça¨},,,)–’’òÝõçÎcíÛ·gcÇŽeŠŠŠlÿþýŒ1ÆnÞ¼Élmm™P(dB¡õïߟåää°«W¯²%K–0Æ cS§NåÊèéé±ÄÄDvôèQ6|øðÛsvvfÿý7÷ºÿþ,55•1Ƙ½½=swwÕ®W ¡PÈ.\(òzô7ïääÄTTT˜¾¾>SPP`×®]cŒ1æââÂþþûo& YJJ ÓÒÒbŒ1¶sçN¶gÏÆcW®\a«V­âÎ[¿~ýXnn.[»víwÛ7oóòòbŒ1–——ǺwïÎòóócŒ³‡Šd¿+ÓôéÓEZ_JJ ³±±)µÌ¸qãØàÁƒ™®®.ëÖ­{õêcŒ±©S§²& ™¯¯/³¶¶fŒ1öÛo¿±§OŸ2Ƴµµeׯ_gB¡½}û–?ž1Ƙ®®.;~üx‰í©ªª²ÌÌLÆc/^¼`'NäÖuïÞeeeýÚNW²ÀÀ@æââ"Ò:½½½Ù©S§J-Ó¶m[6fÌ6`À¦­­Í’’’cŒ 4ˆ¥¦¦2¡PÈvíÚÅ8Àc¬K—.ܶcÆŒaL(² .°5kÖ0Æ“““c!!!%¶§¬¬ÌýûäÉ“lýúõŒ1ÆÙ€ʽ¯|qqqa|‡Q.Œ®„T°ÁƒÃÁÁ'Nœ€§§'ÌÍÍáïïXZZºtéR¬“•¿¿?¸2-[¶ÄÇ?l7;;©©©‘‘tïÞAAAE.=“ï›4if̘gggøùùaÔ¨Qð÷÷Grr2;vDvvv‘íüýý€ÈÈHsß$$$(Ûy{÷îZµjÅÍGÔ£GaccƒáÇãÖ­[000@DD> `ŒA àÙ³gÜv#GŽ„››W¦°ÜÓ§O!..^b[Mš4áî[KIIq‰‹‚‚1|øð ÛÏš¦aÆh×®œÑ³gOÌœ9úúúxýú5V¯^ à¿óö-ÄÇÇãÀÅÊ”vÞÒÓÓ$6qqqÈÊÊB:u''§ŠÚÍGVVݺuÃÁƒ¡§§‡#F`Ô¨Q˜0attt Ä'˜ôõõ!//éÓ§+ó½óÖ´iS|þüuêÔÁСC1{ölý"##Ëô%H ´hÑmÚ´££#-Z„ëׯ£{÷îØ²e Z´h ä󦫫‹E‹q `a1±ïwwüö|êèèÀÏÏcÆŒÁ‡ ¤¤D H%££]‰Ö¯_?þøPPP€ddd‹;wî)«  €Q£FA__Mš4Addd‘[%1bÌÌÌpûöm8pööö˜1cêÔ©yyy®#); ØÙÙaÆ Ø¿?–,Y‚qãÆ¡nݺÀ‰'Š”8p .^¼4jÔ‰‰‰¸uëV©mLœ8vvvØ·o®^½Š+V`ôèÑ’’‚ªª(F›€ IDATj…Ì$\Óµk×:::8tè-Z„5kÖÀÅÅYYYÐÔÔ„M‘ò3g΄­­-.^¼Èmïìì\jæææ055…²²2þúë/ôïß#GŽDNNlllJý"$%5jÖ¯_   ¬_¿sçÎE:u’’‚9sæ`„ EÊÛÙÙÁÁÁðõëWèëëcîܹ¥¶1iÒ$èëëcÔ¨Q077Ç… ```€œœØÛÛWؾ‘ï >!å÷£>!ä×ðÕ'„ü:>ú„_ÃWŸòkª{ŸJÕ !„ JB!„ JB!„ JB!„ JB!„ JB©$¹¹¹Ü fßÊËË+q¹¨åååqCbÎe̳A!| $¤åååáèÑ£022ÂĉqðàÁRË9r¤Ø¤[%¹yó&fΜ‰1cÆ`ݺuHIIAbbb©³J.X°÷ïß/²,##ÚÚÚeÚR:+++n$Õääd´oßž›xëÇ;v,1þübÛ&''ã÷ß/W»ÎÎÎE&V+M||<ŒÇŽÃÕ«W€1²&ðññ™™ `ooøøx<þ³fÍ*sW¯^ŵk׸׉‰‰EFå,ÉæÍ›qîÜ9ÀùóçËÜÖõë×XwmpêÔ)L:ãLJ³³3„B!ÜÝݱmÛ¶2×áââRd²»Çÿð3×ÔÔ¯^½Bff&nܸQæ¶¶nÝ 2—'ßGIHºté.]ºgggìÝ»­[·.µü¸qã¸/‰ïÙ·oÖ¬YƒñãÇãèÑ£èÖ­‚‚‚ÎÒù¿òóó‘––VlˆqÆX™¿Àj“÷ïß(8n¯_¿.²<++«Èì¶ HNNFçÎáåå¸{÷.ZµjÅ @çãã%%%ÈÉÉa÷îÝܶÙÙÙ.v^²²²ðèÑ#ddd **ªÈº/^på?þŒóçÏãéÓ§ÜÕŒœœÜ¿ÿþû/7ùaILMM¡¯¯Ï½ÎÈÈ@ppp‰£RVnnnX²d FމãÇ£oß¾ð÷÷GnnîOÍlûìÙ³"_fŸ?ÆåË—KÝÆÜÜœ ÐÎήØúogÏþVVV7ZnmµbÅ nFモaÆ ƒP(äf«. ___nj  `&ëÒ~˜À¦M›Ð¾}{¤¥¥aóæÍÅÖï¼}ùòB¡°Ì±‘ï£$¤=}ú={öD«V­Ð¢E èéé<ˆiÓ¦AKK ÚÚÚðôô\¼x§NhkkcÑ¢E:t( ¹*;;;ìܹãÆC“&M0yòdŒ9...ðõõ…‘‘|}}±nÝ:XZZBKK GŽùnŒ™™™066ÆàÁƒ±hÑ"@zz: €qãÆAKK «W¯c )))ÐÔÔĘ1c ¥¥…µk×VàÑãÏo¿ý†/_¾àáÇèÖ­"""‹Y³fARRsæÌÁ;w===dffB[[¾¾¾ > ííÿ¯½û ˆâê÷8þiŠ‚=¨1¢Xƒ‰5¢"ØØ#–(7ÐX“Xx’ØRl!ŒQ£X0öD%¢ØˆØÁ‚¢€Ræ¾à2— 0 ÿÏÙ™9gfØÝßž93çKŽ9¢N;88è´Dœ>}{{{Ö®]«>îàØ±c888àããCß¾}ÕLj_¼xQ žÎÎÎøùùELL ;wîdçÎ$&&ÒºuköïßϺuë8uêÔ3÷ÑÛÛ___ ûƒvÀ€¬]»–víÚ=|Š æÍ›Gÿþý)_¾<ÎÎÎôîÝÈn꿈ġµµÕùu=þ|:tè@=ð÷÷aß|ó îîî8::booOpp0+V¬ÀÏÏõë×sëÖ-\\\ðôô$&&ggg>øàÔq„r»ví;v¤M›6ü÷¿ÿ`×®]¸¸¸`oo:’ò¶mÛÔ÷«ÝKµºE÷ïßÇÓÓ“ß~û GGG*UªÄÈ‘#yï½÷€ì@Ø¡CÚ´i£îë£GøôÓOéС...\¸pá…å 8qãÆáèèH×®]Õ°âááADD?ÿü3/^ÄÅÅ…Í›7L÷îÝéÞ½;ÎÎÎOݦŸŸŽŽŽ´mÛV ;óæÍãã?¦mÛ¶tìØQm}þöÛoÕù:uâĉÿúؽ.ä±íhøðá >œzõêÑ·o_&L˜@µjÕxôè×®]ãÈ‘#$%%Ñ¡C:vìÈ£GHNN²ßœööö,Z´ˆiÓ¦±oß>lmm100xê€Z9*Îk&çK)00===:ôÔ:†‡‡sèÐ!Þ|óMÚ·oOtt4fff?~œK—.ѰaC ÄéÓ§©]»6AAA\½zU’þ¯¿þÒ¸ëu`ooÏáÇ9wî}ôþþþ˜˜˜àè舾¾>kÖ¬¡K—.T®\™yóæQ½zu,,,¸råŠÚº±`ÁæÍ›‡¢(9rOOO_Nk×®eÖ¬YtîÜ™-[¶°hÑ" û’Üwß}Gûöíùý÷ßÕËs«V­bìØ±´mÛ–¨¨(¾øâ |}}©[·.'NÄÒÒ’'N`aaÁèÑ£©R¥Jž÷7##ƒ¯¾úŠ÷ߟ_ý•Í›73iÒ¤ü=¨,))‰{÷î=óòâÅ‹¹yó&ÆÆÆX[[3~üx"## `ÿþýÄÅÅѹsgNŸ>ýÜrIOOçàÁƒâííM«V­HLL$55•Aƒ1kÖ,u ¼¥K—âää¤3Û?]¿~RSSiÓ¦ C† !55•Ó§OsîÜ9E¡M›6ôîÝ›ÔÔTBBB8{ö,™™™ØÚÚÒ³gÏbûˆøË—/Ó¤Iu|˜ºsçÄÆÆÒ³gOz÷îÍîÝ»100ÀÏÏÀÀ@æÌ™£†·g‰§uëÖ,^¼˜Å‹ãëëËĉ‰'##ƒÑ£GsèÐ!õ¼¹¹¹1eÊÚµk÷ÌmfffrðàAN:Å÷ßOÛ¶mILLäÞ½{««+$11‘„„‰ŒŒdÔ¨QêÏ’®xþå5kÖdÿþýPµjUÚ´i£6ïµoßÊ—/OÙ²e¹qãÆëç ¸Õ¸qcBCC)[¶,ræ×®]›[·néü•dB Á›o¾É§Ÿ~о¾>wîܲ[ r$$$`aañÄz9£9êéé¡( fff4nܘ}ûöé,—””„±±1ééé:óË”)óºå12§Èþ’vÂÃÃyûí·¸}û¶ú¦ Sç¿Nìííñóó#++ KKKbcc æý÷ß²?cbbèÛ·¯:xd`~óÍ7ØÚÚÙ_.³gÏ~ê¯ó¶mÛªMù9ÿBv8Í v¹^÷îÝéÑ£«W¯fõêÕ,\¸È711Q]ÎÍÍ   Úµk§^nyEQtê’óë/**ŠÔÔÔ7nЭ[·<½bÅ úöíËúõë±µµ% €#Fн{wΟ?ϬY³žiòŸÞ{ï=üýý122zæ2æææŒ9’&MšpèÐ!þóŸÿ’’‚™™#FŒàwÞáèÑ£¯eÏþråÊQ®\9lll€ìÖ### ¸uë8p€ *ЩS'>L»víppp`Ò¤IÌŸ?È3 xjGÅáÇ3nÜ8Ö®]«~H¸»»3uêTV¬X••æææ@vÇÇiÓ¦±eËEÁÊÊŠ ðÑG1yòdÞxã œY±b5jÔ 22’U«Våi Y¶l^^^±téR† ‚§§çS/ÿEK—.¥gÏžlÛ¶ GGGþüóOz÷îµµõS—···gæÌ™|ñÅ\»v¾}ûb``@óæÍyüø1#FŒ Fìß¿ÿ…wYäÖºukƯöIMMÅÌÌŒøøx4hÀßÿ͘1c^Øûöm>ûì3ÒÓÓiÔ¨åË—²ƒÇäÉ“IMM¥I“&˜™™åý 1ÆÆÆ¬^½š^½zÑ¡C7nÌž={øþûNß¾}0`÷îÝãàÁƒ¸¹¹àììL·nÝHKK#==“'Oòõ×_ç©åË—§T©R|õÕWtîÜ™ðæ›o’žžN… 077gÛ¶m:tH½tú,|ûí·„††2tèPuþáÇùî»ï ÁÕÕ5Oõ*dDÑW÷¢QtÓÒÒ”C‡)›6mRÂÂÂÔù^^^Ч§§räÈåüùóêü›7o*QQQŠ¢(ÊÉ“'•ŒŒ EQåÎ;Jxx¸º\bb¢âçç§lÞ¼Yg»?VŽ?®Ü¾}[¹víš«¾véÒ%%!!AQE RÒÓÓ•ÌÌLåĉê2ÿý·rïÞ=%!!AiÒ¤‰¡ìÛ·OÉÌÌTEQîÝ»§4oÞ\ ×™_PJÂ(º‰‰‰:Óéééêÿ¿ÿþ{eÙ²e:¯'%%)>|æö’““•{÷îåK]þ ­FÑMNNV<¨øúú*W®\Q%{¿r¿ÏΞ=«|X,nëËÈÈ(íÞ½{W}2bqV¬Ÿ ño¥¥¥=õy "¼Ì8-/ãÑ£GrÞ PqÃFBÈ¿0aÂõácÅ…GŽaÔ¨Qêø EÙË<~<¯¦M›¦> ©¸¸ÿ>ÞÞÞL˜0AçΩ¢jÚ´iùº=Œ‹e¿‹/›‡ú匵“_Þzë-þøãbyÞŠ“§=A¹¸ÐsssS¼½½µ®‡(?þø#ÆÆÆŒ5ŠO>ùDK}#FŒà?ÿù¬]»ö¹šE‹»»;ò+Ä“ÜÝÝ¥OHI‘@ÜÝÝÑ××gÉ’%lذAùU]XYYQ§NÆÏ?ü u•„"_H)rúúúüôÓOlÚ´é™#ì í¥§§³xñb>ûì3 {À®èèh¢¢¢4®™Bü{B^sO 9ôõõY¼x17n”dQ‹-b̘1:—_f̘Á¬Y³4¬•Bä !¯±ç9—f6mÚÄÁƒ ±vâEnÞ¼ÉåË—ŸxÔsÕªUiÖ¬Ù£) !Dq#!ä5•—’#'ˆøúúâïï_µy1}útfÏžýÔ×FÍÊ•+IKK+äZ !Dþ‘òz™’#'ˆüþûïøùù`íD^øûûÓ¨Q£gÞzWªT)&Nœˆ§§g!×L!ò„×Ì«9U·lÙ  v"/ÒÓÓYºt)&Lxîr­[·æÖ­[\¿~½j&„ùKBÈkäß9AdëÖ­Òç@#?üðãÆÃÐÐð…ËJ'U!Dq&!ä5±yófâããÿUÉ‘D–-[Æ… ò¡v"¯¢££ ÃÁÁ!OËW©R…-Z°wïÞ‚­˜B !¯‰nݺNXXX¾loÿþýXZZ›ÇM¿.fΜùÒ-îîî¬^½Z:© !Š !¯‰2eÊàííÍÌ™3ÿuùã?Ø¿?žžžèééåS Å‹8p€wÞy‡jÕª½ÔzúúúLš4‰ PÍ„¢`Hyä"áá᯴ Úxüø1Ë—/gìØ±¯´¾ wîÜ!222+&„HBÈkÆÔÔooo¦OŸþÒADˆv~øáÆÁ«l-T…Å„×PNùꫯòD$€h'**Šëׯcgg÷¯¶S¹reZµjÅîÝ»ó©fBQ°$„¼¦Ê–-˲eËøê«¯ˆˆˆxî²@´5sæLfΜ™/Û5jkÖ¬!555_¶'„éÕÛ~E‘—DFÅ·ß~KíÚµŸXFˆ¶8uê3fÌxá²wîÜ¡lÙ²˜šš>w¹{÷î±páB<<<ò«šBQ $„¼ær‘9sæ`ii©¾&D{íÛ·'444OËz{{cccCÓ¦M ¸VBQ8ärL P®\9–/_އ‡‡z÷„!„Z“–¢\¹rj‹H‡¸xñ¢!„š’R‚˜™™±|ùrúôéÃ$€!„Д\Ž)aÌĮ̀[·®!„š“"„BMHB!„&$„!„BB„B¡ !B!„Є„!„BhBBˆB!4!!D!„š"„BMHB!„&$„!„BB„B¡ !B!„Є„!„BhBBˆB!4a uŠ‚¬¬,>|¨u5 MVV ZW£Pbjjªu5„Bä"!ˆŠŠÂÕÕ­«R(*V¬Èܹsµ®F¡Šˆˆ`ãÆZWã_iРK–,¡T©RZWE¼„ÌÌL­« D‘%!äÿtéÒ…iÓ¦i] Q@ÜÝݵ®Â¿Ö¾}{Ú·o¯u5„"ßHŸ!„BhBBˆB!4!!D!„š"„BMHB!„&$„!„BB„B¡ !B!„Є„!„BhBBˆB!4!!D!„š"„BMHB!„&$„!„BB„B¡ ƒÂ*hÏž=DEEVq/%>>ž³gÏâíí­uUþ•wß}—6mÚäë6?ž¯ÛÓJrrr‘Ý—Fann®u5„¢ÐZñññáóÏ?/¬â^Z×®]µ®Â¿òøñc|||ò=„xxx0lذ|ݦœœœ¸|ù²ÖÕx™3gèÖ­]ºtѺ*BQè -„дiÓÂ*®ÄIMMÅÇÇ'ß·Û A\]]ó}»"[ùòåµ®‚BhFú„!„BB„B¡ !B!„Є„!„BhBBˆB!4QhwÇ%nnn¤¥¥é̳°°`îܹyZÿСC4mÚTçΆ5kÖ°wï^RSSqppÀÝÝèèhRSSiܸñS·Ó¥K|||¨X±â«ïÌkhýúõìÚµ‹GáääÄØ±cŸ¹ìÖ­[¹|ù2Ï\ÆËË‹3gÎ```@Ë–-éÛ·/•+W~æòÑÑÑܽ{—æÍ›pìØ1êÔ©Ão¼ñê;%„â %²%ä³Ï>cÚ´i˜˜˜ðÖ[o1mÚ4F•çõúé'nÞ¼©NOš4 ___FÍòåË144äï¿ÿ&00={ö<±¾¢((ŠÂýû÷ÉÊÊÊ—}z]|www¶oßNýúõiذ!•*U‚† róæM D·nݘ:u*[¶lá“O> €ÁƒsæÌ‚ƒƒ™¡}ûöhsÀ Iff&beeEff& :”û÷ïãààÀýû÷IJJÂÑÑ‘7npöìY¬­­©Y³&UªTQ"çëëËàÁƒ±³³ÃÞÞž;vàïïÏ/¿ü€³³3ãÇÇÑÑ‘>ø€ØØXµ>ÕªU£^½zôìÙ“ˆˆ »å‡~P—±³³àçŸfçθ¸¸°}ûvüýý™5kƒ `ïÞ½tëÖŽ;²xñb®^½J·nÝpvv¦mÛ¶ynUBˆ’¬Ø_ŽiÒ¤ þþþ4lØKKKöïß……ÆÆÆ”*U OOOºwïÎG}Djj*={ö|êv<<<øã?([¶,ãÆãøñãôéÓ‡-[¶°páBõr‹……­ZµbÖ¬YX[[ãïïO«V­¨P¡ÂÛtww'66VýåOƒ X²dI“¢ T©R˜˜˜É¨Y³&'Ožäܹs4iÒ„J•*1yòd\]])_¾<ÇçÍ7ßdÈ!|üñÇÔ©S‡^½z1iÒ$jÖ¬IJJ ¡¡¡œ>}šôôtÚ¶mK=HII!)) €¸¸8zõê…——sçÎeûöíŒ1€1cÆ`llÌÕ«WÙ»w/ý€·œu5´Œ=šÀÀ@æÏŸd90xð`ìíí쿕ÇcjjŠ““}úô!##ƒ£GrûömÊ”)Ã;ï¼Ãĉ111)´c.„ÅM±o qrrÂÏÏ€€¾üòK‚‚‚ðóóÃÉÉ €êÕ«3räHf̘ÁO?ýôÔm„‡‡Áˆ#pqqáÒ¥K;v €Å‹ãááÁ„ °°°xbݲeËrëÖ­<×·¸?þe䜛“'OòŸÿü???üýýqtt {÷îpçÎ @•*Uعs'AAAÔ­[—V­ZñøñcÚµk‡‘‘¦¦¦ÔªU‹‹/>µLkkkBCCÕùK—.åèÑ£ìÞ½›¾òe°+W®P£F ÌÍÍ100ÀÁÁ}ûö`ccC™2e°´´äÚµk¯T†B”Å>„4iÒ„ÐÐPŽ?޽½=†††ìرCý2zøð!¿þú+ ÀËËë©Û¨Y³&ÕªUÃÇLJ 6àççǤI“øî»ï>|8ÞÞÞ¤¦¦`llLzz:7æÁƒ:_ˆYYY¤¤¤`ll¬~æÈù’* Ù±cÆÆÆ´k׎£GröìYõñýÁÁÁÄÅÅñøñc5ôå°°°`̘1T­ZU½|®¾~ëÖ-j×®ýD™Ù{zzz(Š¢óšžž-Z´ 99™¸¸8ªT©¢¶~ÄÇÇðÄyË}¾kÕª¥Ó(,, kkk²ŸU¾B]ÅþrŒžž7&)) ###ìíí™3gÍš5`Ĉx ]¼ŒIDATxxлwo:tè@»ví°µµÕÙ†¡¡!ýû÷gàÀ899qýúu:uêDRRW®\aÇŽ,_¾œ‰'âíí““3fÌÀÉɉñãdzjÕ*:uêD×®]©_¿>»wïféÒ¥ØÙÙ±`Áôôôøøãµ8<šjÖ¬AAAxxx`llŒ¢(4nÜ====z4[·nEOOž={rðàA–-[Æ7hÔ¨!!!¼ñÆ4hЀàà`"""˜:u*‰‰‰´jÕê¥ÝŠ+ؽ{7'Nœ wïÞT®\[[[FÍ‚ 8{ö,¥K—²[4>ûì3¾þúkŒ££#óçÏçÔ©SL:'''>úè#ªU«Æ;wxÿý÷¹téRAF!„x}¹¹¹)…aذa¶íˆˆåÚµkŠ¢(Êýû÷•3gÎ(Š¢()))ÊñãÇÕåbcc•óçÏ«ÓáááÊÍ›7ÕéøøxeóæÍÊŸþ©¤§§+!!!JBB‚úúŸþ©ddd(Š¢(·nÝRŽ=ª¾v÷î]e÷îÝʶmÛ”˜˜u~RR’òçŸ*>TBCC•äädõµÓ§O+?Ηc’’¢L˜0!_¶•Û¿ýû8sæŒrÿþ}EQåÚµkJDD„¢(ÙÇïÊ•+êrW¯^UnÞ¼©¤§§+ÊÆu^ÿí·ß”éÓ§+ÇŽSBBBÔùwîÜQÂÃÃÕ²ÒÒÒEQ”{÷î)ÿý·¢(ŠrîÜ9% @9|ø°¯S¿ÄÄDeçÎÊíÛ·•àà`u~JJФÖýîݻʡC‡Ô×ÃÃÕ“'OªÓÉÉÉJhh¨:}îÜ9%))é…ÇgëÖ­ÊÞ½{_¸œB¼nÜÜÜ=777ÅÛÛ»ÀÃŽ««+«W¯.ðrJªÔÔT¦M›Æ¢E‹òu»îîîÆßÇ‹¬Y³†°°0fÍš¥uUòÕ¶mÛ011¡K—.ZWE! •»»{ñ¿#J†¡C‡j]!„ù¬ØwLB!Dñ$!D!„š"„BMZŸÄÄD¶nÝZXÅ•8éééêsLòSffflWdKOO—§ª !J¬B !wïÞeÍš5…U\‰“••U _f;vìPÇãù/))‰éÓ§k] !„ÐD¡…+++¹E·åÜ¢›ßz÷î]$nÑ}]åÜ¢+„%‘ô B!„&$„!„BB„B¡ !B!„Є„!„BhBBˆB!4!!D!„š"„BMHB!„&$„!„BB„B¡ !B!„Є„!„BhBBˆB!4!!D!„š"„BMHB!„&$„!„BB„B¡ ƒÂ*(44kkëÂ*®ÄQ++«|ßîï¿ÿN```¾oWdKJJâË/¿ÔºB¡‰B !ï¾û.«W¯.¬âJœÔÔT¦M›–ïÛíÛ·/ÞÞÞù¾]‘mÛ¶m˜˜˜h] !„Є\ŽB!„&$„!„BB„B¡ !B!„Є„!„Bh¢È„‡ÉÍ›7ó¼Î_ýÅ/¿üBFFFÖL<Ͻ{÷ˆŒŒ$666OËgffräÈ6lØPÀ5BQÔ™²|ùrú÷ïÏ”)ShÓ¦ 7n|îò!!!L:•5j ¯ÿò»1}út‚‚‚^µºâÿLœ8777ÆŒƒ'NœxîòkÖ¬aݺuÔ¨Qã•Êëß¿?ñññ¯´®Bˆ¢¥È„Ö­[ÇÊ•+™={¶:ÿáÇüòË/>|€˜˜æÏŸOÅŠINNF__ŸÔÔTþûßÿ²{÷n²²²8}ú4¡¡¡,[¶Œ}ûö©Û‹åÈ‘#øúúâíí¢((ŠÂX³f )))…»ãÅÜ”)SðõõeìØ±,Z´Hûöm~úé'Ο?ÀùóçY¹r%fff¤§§‡··7ÇW×Û·o—.]báÂ…„††ªó/_¾LHH+W®dÓ¦M<~ü˜ 6°k×.õ¼ !„(ŠTÉqþüyLMMì/ž=zðÆopàÀ¦NJéÒ¥©R¥ Ô®]›øøxÚµk‡‘‘aaa 2€]»v1tèPLLL¨]»¶º}*T¨@Íš5iذ!zzz 8£G’™™Éûï¿ÏãÇ5Ù÷â*33“‹/ªçmÛ¶mŒ;–ºuë2wî\|||¨P¡fffÔªU‹êÕ«Œ‹‹ 5kÖdÆ Ì›7oooÆ¥¥%•*URË077§téÒÔ«W:uêжm[¸xñ"]ºt)üBñÊ í‰©yáååŪU« ãäÉ“lÚ´ ;;;ŒŒŒ°µµåÓO?eîܹԫWR¥JÑ¢E V¯^MÓ¦M133ÃÌÌ ooo’’’èÖ­Æ Ó)§\¹rÔ¨Qƒ&Mšààà@rr2W¯^Uû)œ'ÉÉÉÄÄÄ ( üñëEGG“ššJLL qqqLœ8Q}-/çíæÍ›XXX¨ÓUªTáÖ­[ù°GB! C‘ !9 @jj*þþþ <˜›7oÒ¿\]]qppÀÐÐPgùIÏž=ÕeÊ—/ÿÜ2,--  fÍš¤¤¤páÂîß¿ÏîÝ»ùàƒ lÿ^W3gÎdÆ ܼy“Aƒ‘À!C6l-Z´xbùÁƒƒ‹‹ ®®®ØÛÛ¿° KKKÂÂÂprr" €˜˜ÂÃà ç½÷ÞË÷ýBQ0ŠL©Y³&5kÖT§¿þúküýýi×®ÎÎÎ :”Ž;òË/¿P£F õ‹ºuëòÙgŸñÉ'ŸÐ©S'¾ýö[ û +÷/åÜ ĹsçèÚµ+YYY¬X±‚E‹áææÆÌ™3©Zµjïñë¡Q£FT¨Pcccf̘Á¾}û5j•*U¢W¯^têÔ ???6lˆ™™ÎÎÎØØØàââBÇŽÕËa7¦lÙ²O-ïóÏ?ÇÛÛwwwJ—.Í¢E‹˜8q"³gÏfÅŠèééÂ^ !„ÈznnnJaŒ’êêê*£è œQtsß’ÜÝÝeÝ”3Š®tªB”4îîîE§%D!„%‹„!„BhBBˆB!4!!D!„š"„BM룎Apýúu233P…7nðèÑ#¶mÛöĺ©©©ìر£À똻ü3gÎpùòeÖ­[WàeUÑÑÑêÿÓÓÓu¦ÓÒÒ¸{÷.QQQüùçŸO¬{ãÆ Ž=Z(u àÀÄÆÆ’ššÊ–-[ ¼l!„()Šu™6m{÷î 22’:uê¨_PgÏžå£>"--'ÖMLLäûï¿¥r‡ –ç'ª>xð€ùóçÙ!éöíÛ|ñůTöë G\¿~€={ö`ee¥ŽŒ»aÃæÌ™C\\W¯^}bÝK—.½p„ågqrrÊó².\ÀÇÇGýbb">TÇ·Bñï™’óÅòèÑ#–/_Ž¢(êü””Ö®]«.{ðàAþþûo8tè‡fÀ€:ÓÓ¬Y3uÝ‹/âééIdd¤NùgÏžåûï¿çÂ… ìܹS÷î]–,Y¢™°°0N:Åo¿ý¦~I>}š¹sç²páBbccŸ¹µjÕÒ×äܹsxzzê´'IIIìÞ½Èn9ðõõ !!ýû÷sãÆ õu___âââpppPGD>tèýúõS[:„ƒƒ+VÔytû¡C‡ðòò"!!A§~~~xyyJPP:ÿÚµkxyy©ç988˜ .àíí;}ûP???fÏž··7iiiÏÜOkkkÊ•+§N°xñb>>Œ;–””öîÝ˱cǨ^½:?þø#dýúõlÛ¶Š+ꜷ&L˜ NbooÏùóçY¿~=³gÏfõêÕT«VM§õÊÃÃ͛7S½zuFŽ©† E‹1oÞ<êׯ»»;ÇŽ£jÕªѰaCjÔ¨Áž={X³f :t B… Ï !Ë—/W[n._¾Ì¶mÛ¨\¹2vvv$&&æÿBˆ¢ÈŒ¢ëè舿¿?çÎãóÏ?ÇÏÏcccµ }Þ¼y8::ò믿²uëVŒ±´´$!!påÊš4iBFFiiiœ8qîÝ»§–±e˾ùæZµj…™™3gβÃÉwß}GÓ¦M155Uû¾nÝ:ºt邞ž:ubÉ’%¸¹¹Q±bElll¨U«W¯^%..ŽØØXºw‰Ižö7++‹éÓ§S¿~}233Ù²eK±÷D__ŸFqþüyŽ=ÊÈ‘#9zô(þþþ¸ºº¢¯¯Ïš5kèÒ¥ †††`ooÏäÉ“IHHÀÔÔ”-ZàááAtt4åÊ•SŸcÛ¶m9r„²eË­¶nìÞ½›'N`bbBTT”Ú¢äãã£^îrpp`ýúõxyyQ¦L€ì0qçÎRRRèß¿?úúyË㊢àé鉗.]bß¾}ôë×/ަB”7nääÉ“´jÕŠÓ§OçiõôôtêR\GuttdïÞ½dddгgOüüü8~ü8­ZµÀÔÔ===ÌÍÍ)S¦ +VÄÔÔ”õë×ckkK©R¥055eûöíjHÈ-)) SSSÞxã ; ¤¥¥addüÿySE•7&& ‹§Fد_?¾úê+|}}iÞ¼9qqqyÚߊ+b`Ý‹óyBˆ¢ È„÷ߟÀÀ@ÌÌÌ033#==+W®Ð¨Q#,XÀ»ï¾Ë×_͈#Ôõ˜3gŽ:k»ví˜3gÎS¿Ì:wî̆ ÈÊÊRKèÖ­^^^ܽ{—eË–©óÌýû÷4h®®®ØØØº#¹Þ¹s‡Úµk3wî\† Ɖ'ò´¿Š¢°~ýz²²²Ø´i“úE¹cÇŽçö+)jœœœX¸p!6664oÞœ]»vQ³fMu¤c777¦M›FÛ¶mu.ýó¼ÙÙÙ1þü§ž·V­Z±gÏÒÒÒøý÷ßìgccÊ+¸qã†z·‘žž={öÄÀÀ€aÆ1dÈÞ~ûm*W®¬ÛèèhÚ´iƒ··7ï¼óW®\ÉÓþ^¿~   =zÄöíÛéÞ½;+W®$++뎠B”\E&„àìì¬6m÷éÓ‡?ü€[·nqñâE¾þúkz÷îµµ5G޲‰×©S‡:`kk‹••ݺuÐé˜êææFZZ]»v¥J•*êü1cÆÐ¨Q#>ùäêׯÏ[o½À!C°²²¢_¿~tìØ‘]»v0~üxÖ¯_««+W¯^¥GôêÕ‹k×®1tèPý222R/³äî˜jooObb"]»v¥nݺôèÑîß¿_G¸`4hЀ–-[Ò½{wôõõùàƒ4hÇŽ£víÚ 0€¯¾úŠÈÈH¢¢¢€ìtëÕ«GË–-ì€hee¥†’J•*Q¯^=æÌ™Ã®]»èÓ§mÛ¶¥nݺ@vß»wï2eÊZ¶l©ž·™3grûömºuëF÷îÝ9{ö,Ý·d„ Ìž=›€€:wîLß¾}±´´¤uëÖ:û•»clNÇT###FŒ~ø!#GŽÄÊÊ €ßÿ]BˆB¼$E¸ÿ>‰‰‰áááAÏž=éÓ§ÖÕz)%qݨ¨(J—.M\\#GŽdÕªUj((.d]!DIåîî^t:¦j)--Y³f‘‘‘Á‡~¨¶¢ˆ¢íîÝ»xzzbnnΜ9sŠ]Bˆ’NBP½zuV­Z¥u5ÄKjÑ¢…z¯Bˆâ§Èô B!DÉ"!D!„š"„BMZŸ‡âîî^XÅ•8™™™ê½òÓÅ‹‹ìÝ1¯ƒ³gÏÒ³gO­«!„š(´"C O^^^ZWáµfcc#wõ!J,¹;F¶ìLKëGû6¤Âd†ì&KIE›”¤½ë÷‡_÷×qN9fz=óxt®ûÚîûœ8ï®ë~Y­ZµDóæÍADDDDDDê:u ÚÍ›7‡ŸŸ_IÏ…ˆˆˆˆˆèƒ5lØ0ÈKzDDDDDDODDDDDD`ðDDDDDD¤ODDDDDD`ðDDDDDD¤ODDDDDD`ðDDDDDD¤ODDDDDD`ðDDDDDD¤ODDDDDD`ðDDDDDD¤ODDDDDD`ðDDDDDD¤ODDDDDD`ðDDDDDD¤ODDDDDD`ðDDDDDD¤ODDDDDD`ðDDDDDD¤ODDDDDD`ðDDDDDD¤ODDDDDD`ðDDDDDD¤ODDDDDD`ðDDDDDD¤ODDDDDD`ðDDDDDD¤ODDDDDD`ðDô‰+((Àºuëàéé‰5jÀÒÒ7Æ?ü€èèh•úñññP(èÑ£ž?®¶Ïôôt( ¬X±B* „B¡À±cÇŠœË²eË P(÷Úyçääà·ß~C‹-`mm kkk´jÕ óçÏGFF†JýB¡P(=:tè€ÁƒÃ××Wå\bbb P(ð믿ª?00 €““Ê•+‡ `øðáˆU©»~ýz•±_}tíÚõµç\èéÓ§˜>}:ÜÝÝammÊ•+ÃÝÝóæÍCzzºJýþù …6l(²Ï}ûöA¡PàܹsRYHH öíÛ§ñÜ`ÆŒP(9räµû¯<==±lÙ2é¹··7&Ožü^ç°víZ( !Þë¸/KIIÁÌ™3ѹsgT®\5kÖD¿~ý°bÅ äåå©Ô5j&MšôÚ~³²² P(°iÓ¦w1í7²gÏéw899¹Èz)))èС vïÞýVçУGøúú¾q»;v@¡P 11ñ­Î‡ˆ>ÞÞÞ‚ˆ>MIII¢nݺ€033mÚ´^^^ÂÄÄD:::bóæÍJmîÝ»'bìØ±jû}üø± FŒ!•­[·NPéïeß~û­ nß¾]ì¼³³³E£Faaa!¾üòKѧOajj*[[[‘œœ¬ÔÆÆÆFèêê '''éagg'‹HHHêߺuKƒ Rê'77Wx{{K׬mÛ¶¢_¿~ÂÙÙY"44T©ÍøñãñùçŸ+ÿò£Q£FÅžs¡3gÎKKK@X[[‹®]» www¡££#]«W¯*µ9wîœ &L˜Pd¿¾¾¾€Ø·oŸT¶mÛ6@,Y²D£¹ !ijgÏ„‘‘‘ d2™ˆŽŽÖ¸í%“ÉÄСC¥ç¢]»vïl¼'Nooo‘””$•ýøã€ÈÏÏgã'00PX[[K¿=zôíÛ·€pqqJmœ…‡‡Çkû~öì™ &Ožü®¦/V¬X!¦L™òÚz‹-’~wW¯^]d½Âwˆ… ¾Í© ccc1xðà7n7wî\@Ü¿ÿ­Î‡ˆJž···àÊÑ'J¯¾ú ×®]Ãøñã‘””„àà`ìÝ»?Fpp0ôõõ1dÈœ?^¥½L&Ã’%KpñâÅ÷>÷… âÂ… 6l°yóflß¾ÉÉÉøý÷ßqÿþ}Œ=Z¥µµ5._¾,="""pçÎôéÓ<Àĉ_;öŠ+°zõjtëÖ qqq „¿¿?þþûoüùçŸÈÎÎFŸ>}­ÒöÿûŸÒø/?Ô]ãW¥¤¤ oß¾ÈÌÌ„¿¿?bcc±oß>?~?Æo¿ý†äädtèЩ©©š]Ì·lß¾}ÈÈÈ@Ë–-!„ÀöíÛKd°iÓ&,\¸ðõíÚ5¬^½OŸ>•ÊFŒ'N@.ÿÿ}þý÷ßP(ÈÌÌÄÁƒ…]»v! ‰‰‰X°`._¾ŒfÍš!--íû700À‰'0dÈw0û°uëVëûÛ±c ßÆÔˆˆ4Âà‰èåëë‹Ã‡cÊ”)˜7o´µµ¥cÚÚÚhÓ¦ æÌ™ƒÜÜ\¬\¹R¥ý_|}}}|ûí·j·½K'Nœ€ŽŽ¦Nªô!U[[C† AãÆ‹Ýø²5j`þüùËå )¶nrr2¦OŸŽzõêa×®]*Ê<==Ñ«W/DGG# àÍOì5Œ˜˜ìÝ»ýúõS:fllŒï¾û½zõB\\Ü[ߢ¤©-[¶@WW›7o†F„ ðèÑ#úOIIAff¦Fu6lˆºuëª=öìÙ3C«V­Ší¯  @£¾RSS‘››«Q]!¾ÿþ{À±cÇЩS'¥ã2™ ?ýôV®\‰¤¤$̘1£È¾’““Õÿr¹­ZµBµjÕÔ¶ËÈÈÐ((ËÉÉABBÂkëi¢S§N A||¼Ê±””?~;v,¶'Ož¨Ýîúªôôt¥@ùuu5铈>= žˆ>Q«W¯FÅŠ1~üø"ëŒ1+W®DË–-UŽÙÚÚbÖ¬Y/ò¾ wE__¹¹¹E~ø]±bV­Z¥ñ}'VVV033{í=›6mBjjªJÐö²3f`üøñÐÒÒÒhlM%&&bÿþýðôô„‡‡G‘õ–/____T®\ù­Ž¯‰ÄÄDÁÓÓ666ðôôÄ•+WpóæM¥z·nÝ‚­­-Ξ=‹1cÆÀÂÂVVV°´´„RÝAƒ᫯¾Â… P·n]XXXÀÄÄÍ›7Gddd±óiÛ¶-¨T†úõëÃÔÔåÊ•CÍš5±wï^¥:qqqèÝ»7Ê”)ƒÊ•+£lÙ²èÔ©“R@Ú³gOLŸ>ТE ôîÝ0{ölØÚÚ*Hiii0`LMMQ¹re˜šš¢oß¾xüø±Ò¸íÛ·Ç„ pñâE8;;£\¹r(_¾< ¤ö^º—!44ƒF½zõЬ7dÈÔ®]Ë—/Wùý ‚,--abb‚¶mÛ*Ý÷øüùsØÚÚbñâÅJíNŸ> '''˜˜˜ÀÂÂÍ›7ǺuëTÆŽ‹‹C»ví`bb‚Š+¢J•*X°` 33¶¶¶ƃ`kk‹ß~û­Øs€Þ½{C]»v©Û·orssÑ«W/µm·oߎ5j lÙ²055…ƒƒþüóO•záááhРÌÌÌ`nn\¿~]mŸAAAptt”Þ_îîîo´’FD?ODŸ gÏžáîÝ»ððð€‘‘Q‘õär9†ŽÁƒ«=>jÔ(4lØÓ§Oǽ{÷ÞÕtU~êØ±#–/_®òÞ  k×®Édõ·oß>¤¤¤ÀÁÁ¡Øz…˜Ú¶m[d{{{Ì›7Oå/ÿÿÕ¥K—൉%Ê—/Ñ£G£}ûöou|Mlß¾ùùù0` OŸ>€mÛ¶)ÕËÉÉAtt4¾ûî;lÛ¶ ?ÿü3üüü`oo©S§*mŸLHHÀéÓ§Ñ®];ÔªU ëׯǘ1cpḺº›, ..Ni…#,, Í›7GFF|}}1wî\hkk£GØ¿¿T¯ÿþØ¿?ˆ 6`Ô¨Q¸zõ*úô郈ˆÀ€¤÷Á°aÃп/V;^8rssÑ´iSlÛ¶ ƒ ÂæÍ›áííÝ»w£Q£FÈÊÊRšï©S§Ð½{wôíÛû÷ïGÏž=±iÓ&,Z´¨ØkõêU(2P($—ËѳgOäææâÖ­[Rùµk×йsg´jÕ 7nÄ!Cpüøq¸¸¸HA–ÑÑÑJA×Ñ£GáîîŽØØXŒ=S¦LÁÝ»wñÍ7ß(4)))pqqAXX¦NŠ+V F?~<¦M›L˜05jÔ€™™&L˜€¦M›{.PµjU4nÜüñ‡Ê±;wÂÙÙÕ«WW9¶zõj|ñÅ033ÃÊ•+±téRèèè S§NJÛoÞ¼‰¦M›âîÝ»˜2e Ö®]‹ * Y³f*+ »wï†B¡@RRÆŸþׯ_Ç—_~ùNV¢‰èÅ„DŸžÓ§O böìÙ*Çîܹ#Nœ8¡òxþü¹âÿFLš4I!ÄåË—…¶¶¶hÓ¦ÔÇ»N‘••%¦N*ôõõ¡­­-ÜÜÜÄÔ©SÅÙ³gÕ¶±±±bÆ ÒcåÊ•¢k×®R?{öì‘ê«Káêê*ÌÍÍ‹›:… #…«««ÚÇÏ?ÿ\lsæÌÄ©S§TŽ………©¼^/_‡÷•0¢aÆÂÌÌLdee !„ÈÈÈFFF¢zõêJõ._¾,ÝÄÿÏ?ÿHåÙÙÙÂÉÉIèë닇 !„P(jwlÞ¼YãÇ—Ê^—0ÂÃÃCèéé‰ÄÄD©,>>^èëë‹=z!„xôè‘ËåâÕÿûvìØ!ˆ-[¶HeË–-Ľ{÷¤²WF,_¾\ ,PêoÕªU€ðõõ•ʱ~ýz¥º...ÂØØXˆ¢ tuu‹m[ÜköÍ7ߨ¼^Ý»wÿ×óü7nß¾°°0ôêÕ zzz^ÜÌß¹sgDFFªMˆQ§NØÛÛKÏuuuÑ­[7dee©ü¥¾gÏžJÏ»uëìÙ³G£ù¥¥¥!88®®®°´´”Ê+T¨€mÛ¶I+uRò—Þ×§î^ âûì3¥ò * víÚ*Û]ëÖ­«ÜÐè½Y„Þ½{ÎÎÎÅÖ- hj×®-••/_õë×WªW¹reÔªU wîÜQÛOaù… ”®!ik_TTœöíÛ«¼Nnnnpss{ÝéËÊÊ Íš5Ãü1cÆx±eÏÅÅÕªU“ËB…AŒº{Û´iܽ{æææÈÍÍU»öÕ÷náµ Q¹…÷RFEE½vk0}ü¸òDô ²··‡\.W›fÜÁÁAéË[_·"¼Hà°fͤ¤¤¨Mþ6=~ü7nT¹a[OO]»vÅ©S§Ð·o_$$$àøñãJutuuQ¯^=¥GµjÕ4¾7ÊÁÁùùùÒ}/ê<{ö zzz*Dÿ«Â]ÿý·Ê1777¥×ìÙ³goulMøûûCGGwïÞE@@€ôˆ‰‰¶¶6vìØ¡’µÎÂÂB¥Ÿ *€RÖ6###¥‚B+VDnnn‘_Öü²ÂÔíVVVÅÖ{úô)¼¼¼àêêŠÉ“'#33Æ “‚Ã7•™™)­ô¼ÊÒÒRå~½—WpÞDÍš5@£ ¯ð÷þå «\¹rj*V¬Xd¶ÁÂ÷YÅŠUðöö†……222——‡J•*½ñyiªOŸ>8þ<îß¿'Ož 88XJâñªÂ{•Ô½ÿÊ—/àE¶¼ÂÕÆWƒYàÅõz9iLq×¢nݺðöö†©©é;I"ú(0x"úéëëÃÃÃ.\(rKäççkœòÛÝ݃ƶmÛpøða•ãU«VÄÄÄÙÇÇ¡¥¥kkë"ë`øðá˜..N©î› Ž{÷пÜ¿_åÑ­[7ÄÇÇãĉJ킃ƒUú*|?¾¼R“ššª4 88åË—×h+¥­­-¨ÔÀ‹m\›6mBAA6lØ€`þüùxôè6lØooo¥Uš7akk‹ððp•ÌvÏŸ?ÇÙ³gÕ&3ø7<<<`hhˆ¹sç"''§Èz‘‘‘ضm¤@x‘ñÕ÷GFFNŸ>5j¨í«ð5jÓ¦ üüüÔ><<<`jj SSS•×x±R¶qãF$%%ý›Ó–ôìÙZZZøã?°ÿþb³ìþ[¤î½(› är¹Ú#ÿúë/¥m”…×¢S§NE^ M`ÑÇÁÑ'Ê××ÚÚÚ3fŒôÁùUÓ¦MÃ74îsÑ¢E¨P¡‚´uæe 4€––vìØ¡”a¬ÐÝ»wqòäIÔ®]»Ø/µ444D‹-pôèÑ"¿+¦ð~™Æk­r¯KaàݤI¥òW?À†††âñãÇ¿ÆU«VEùòåqìØ1¥½yyyèÝ»7fΜ ¹\ŽÐÐPÈd2x{{+mÍ] .r¹\˜™™‰¹sçŠàà`qõêU±}ûvѺukabb"¾úê+¥ x¯fÛ{ÕöíÛ¥Lj/gÛBˆ3f¢^½zbÚ´iâôéÓbïÞ½bðàÁÂÂÂBÈår¥l\EÙ³gÐÑÑ+VkÖ¬gÏžááábÍš5bÀ€€èܹ³Rv2Q­Z5¯ºl{B! …–––7nœ8|ø°k×®...€5j”R›ÂLcãÇ/òqãÆb生Ÿ/ºwï.ˆš5kŠÕ«W‹³gÏŠ°°0±fÍQ£F agg'Ú·o/*V¬¨Ôvç΀¨V­š7nœ AAAbÔ¨QÂÆÆF~~~Jm4ɶ—››+,--EùòåE^^žÚ:™™™ÂØØX˜ššŠ¬¬,¥l{mÚ´ááá"**JLœ8QmÛ¶•Úf53446l=¢ZµjR¶µB¯Ë¶W˜ïË/¿·nÝW®\‘²ÔMŸ>]!ÄÔ©S1mÚ4‘šš*®_¿.ÆŽ+ŒU2TþöÛoR¹Â÷Ú«Ùöâãã…‘‘‘°¶¶‡‰‰‰"((HT­ZUèëë+eˆsttÍš5S¹~cÇŽм¾…²²²D»víáìì,V­Z%ebœ?¾¨X±¢Ú,›ÎÎÎB___˜››‹Ý»w‹øøx±ÿ~Q±bEa`` e>|5ÛžBÌœ9SC† ×®]·nÝ“'ODÏž=¥zgΜD“&MDXX˜ˆŒŒ³fÍ2™LtîÜYª×¥Kajj*222ŠÍ.ør¶½BkÖ¬„–––RvÃW³í ñ™=úé')nß¾-† &ˆ‰'JõöîÝ+]ϳgÏŠ¸¸8±lÙ2¡§§'ŒŒŒ¤l{B1nÜ8@|ÿý÷âæÍ›âúõëÒûáåz̶Gôéòöö žˆ>qAAAÂÚÚZú0[øprr"&&æ‚'!„èØ±£Úà)//OÌž=[˜˜˜¨ŒW£F ¥4Ù¯súôiµóÖÑу Ož»u릔ÁѧËÛÛ[ȼ½½Åë2mÑÇïîÝ»øûï¿¡§§‡F)Ýw”––ccc¥¤ÿ‹´´4\¹r÷î݃jÔ¨'''èèè¼Q?BDEEáÊ•+HIIAÕªUQ§N¥{9ޕ±oܸ„„Ô¨QuêÔ)29ÀÛ–——‡ëׯãòå˨\¹2\\\`ffàŽjjÓšgffâÊ•+¸{÷. ¤k_Ü—%¿mW®\A½zõ°aÃôîÝ.\@TTœœœàä䤴…«C‡ˆŠŠÂ?ÿüƒ;wîàÂ… 011A“&MÔÞð¯‰ØØXœ?ÏŸ?G½zõP§N•:>Dpp0lmmѰaC ::'Nœ@Æ áè興ˆÀ©S§`kk«6{[¡ÌÌL\¼x°³³ƒ³³s±ÛSÿ«ÂÄ&áááÐÑуƒ^›%òÖ­[ C¥J•àêêªôÊÈÈ@™2e0yòdøøø(µ‹‰‰Á… н¦À‹”ê.\ÀÇaoo777¥Dùùù Å7ЬY3ÔªUë?\…×+üwO[[ 6”î‡zU||. žˆˆ>rÀÉ“'ÿUÛK—.aÕªUJe999˜4i’RÙÊ•+©QŸ³fÍ*òØÊ•+þæýÿ¼½½Ñ¾}{ôêÕ sç΄††¢eË–èÞ½;–,Y"ÕMKKCûöíñüùs¥>.^¼WWWµýïÙ³íÚµCûöí±{÷n©<..:tPÛæñãÇprrÂÈ‘#ѲeKœ:u À‹€jõêÕX¹rå¿>_""ú°0x""úD…‡‡cöìÙØ¹s§Éy¥b IDATô½Kç΃ôýJ[¶lÁž={4ŒN:…„„¬[·çÏŸ—Êcbbàë님˜©ìÉ“'X·n–,Y‚˜˜ÄÇÇcÏž=X¿~=òóó‘••…õë×cݺuÈÈÈPkãÆJ+L©©©¸ví.]º„#GŽ`çÎÈÈÈÀúõë±qãFáðáÀ;wî GxðàRŸ˜2e ŒŒŒÔžßúõëqôèQ=z6lðbÕíË/¿ÄÓ§OÕ¶ @¯^½pèÐ!üþûïX¸p!`âĉ*)}Ü<}‚BCC1iÒ$´iÓ‡B@@"##1cÆ xxx`ÕªU¸}û6ìííaeesssúÝ·oúö틊+bñâÅØ¼y3bbbСCÔ¨Q¿üò‹ðtîÜ*T@µjÕ0räH”)SVVV¨U«är9:tèSSS<{ö T+99Yiœ¡¡!8¹\Ž‹/"55†††¸zõ*jÔ¨¹\+++ܾ}Ÿþ9‚ƒƒQ§N¥>üñGüòË/ÐÓÓS/''OŸ>… ‘‘ììl´lÙLJ™™™ÚkÒ©S'üøã€]»vÁÚÚ0oÞ<Ì™3G£ëJDDí’ž½} 6ÄêÕ«qéÒ%ܸqwîÜ££#®^½Š°°0¬]»*T@\\¢££5ž wïÞèØ±#êÖ­‹1cÆàùóç9r$:wî gggxxx>Œ7n`Ïž=ˆˆˆP žnÞ¼ ÈÍÍE… péÒ%! “ɤqƧ4®®®.,,,àïï¥K—bÏž= ´-¯\¹rˆŠŠ‚ʼwîÜ +++4iÒD*»ÿ>öíÛxzzÂØØX:V¦L.\y""úÀßß7nÄþýûQPP˜9s&BBBлwolݺBlܸ'NœÀ×_ùóçãÙ³g%s’DDDD¥ ƒ'¢w !!øóÏ?qàÀ$''c×®]¨X±"ºté‚ï¿ÿÓ¦MCË–-¡¥¥…øøx|8Kì<‰ˆˆˆJODï€B¡ÀÑ£GíÛ·ÇöíÛQµjUhiiáùó爈ˆ@BB[·n…úöí‹yóæ! ÙÙÙ^¬b@RR,,,@j÷øñc”-[ö}ŸQ©¤]Ò ú•/_IIIèÔ©4h€cÇŽaéÒ¥€qãÆaìØ±011Á÷ßY³fA.—£mÛ¶Rû¦M›âÏ?ÿÌž= …k×®ÅîÝ»ñÛo¿aË–-Ð××ÇÞ½{áíí]"çHDDDTÚ”Hð€%K–ÀÖÖ¶$†/Ξ=‹ .@__¿¤§RjmÞ¼æææÐÒÒBpp0ìííQPP€¯¾ú ®®®]]]bË–-Jm-Z„ÜÜ\À† pôèQ;v fff€ùóç###~~~¨^½úû=1"""¢RªÄVž† //¯’þ“7zôè’žB©ggg'ýÜ AéçÂÀ \\\Ô¶­R¥Šô³‘‘úöí«t\&“¡k×®okªDDDD¤nÛ#ú€-\¸ÚÚÊ¿¦_ý5*V¬XB3""""*½<}ÀZ´h¡RV»ví˜ 1Û‘<i€Á‘JÍ=OIII8{ö¬R†²ãÇÃÕÕFFFŶ C… `cc#•ݼy†††L·þЉ‰&Ož\ÒSùd%%%ÁÇǧ¤§ADDDô^•šàéÎ;ðòòB`` ôe¤K–,ÁŠ+ÔOÉÉÉX´hæÍ›‡mÛ¶¡yóæJÁSLL Ê–-«6xò÷÷‡µµ5Zµjõ®N‡ŠQ¥J,]º”©ðߡѣG«d$"""úÔ•ªm{]ºtÁÏ?ÿŒçÏŸ«»wïæÎ‹S§NöìÙƒ#GŽàâÅ‹jû*_¾<ÌÌÌ „Ààãニ/"55üñ6oÞŒŒŒŒwz>DDDDDôþ”ªà©råÊøöÛo1mÚ4¥ò“'ObܸqpuuÅœ9s;;;˜››ÃÊÊJm_ýõÂÃñwï^ uëÖ3f är9ªV­ ;;;èêê¾Ó"""""¢÷ TO0|øp„……)­(ýñÇhÔ¨áââ‚?ÿüööö([¶,*UªTlzzz ƒpäȘ˜˜ÀÆÆvvvÐÑÑy×§CDDDDDïI© žd2V­Z…ï¾ûyyy€ÔÔTTªT æææhÖ¬† ¢q;vDPP"##áàà€ØØØw5u"""""*A¥.xtèÐÁÁÁ€®]»"$$ŽŽŽ8pàbbb?–Ú„‡‡# ¸té’Tþ믿bÇŽðööFýúõ‘––àE """""út”štYUªTAÇŽ¥ç'N„––LMMÑ«W/aêÔ©hݺ5:vì!pàÀ´oßçÎChh( fÍšhÒ¤ ŒÑ®];üöÛo3f úõëGGG`Ö¬YèÕ«ÌÍÍKꔉˆˆˆˆè-*UÁS•*U¤ç:::JßÔ±cG¥àJ&“ÁÏÏOzÞ¾}û"ûž:uªÒó:uê`ÇŽocÚDDDDDô(•ÛöˆˆˆˆˆˆÞƒ'"""""" 0x""""""Òƒ'"""""" 0x""""""Ò@‰dÛ{øð!f̘ñãÇ—Äð¥BZZ|||JzDDDDDŸŒ ž¬¬¬°téRxyy•Äð¥ÂèÑ£¡­]j2ѽsܶGDDDDD¤ODDDDDD`ðDDDDDD¤ODDDDDD`ðDDDDDD¤¦c£ON\\fÏž3f”ôT>YqqqL…ODDD¥ƒ'úäX[[cÖ¬YèØ±cIOå“5qâD¦Â'""¢R‡Ÿ~è“ddd33³’žÆ'KOO¯¤§@DDDôÞñž'"""""" 0x""""""Òƒ'"""""" 0x""""""ÒFP© !ÀÂÂeÊ”)¶~~~>RSSQ®\¹÷1=""""ú1x¢R©N:ðôôCxx8ÚµkÌ™3-[¶„‘‘‘RÝvíÚ¡Aƒ˜;w.ªU« ©uòóóáää„›7o"==‰‰‰ÈÌÌdàDDDDô*‘•§ÀÇÇ“'O.‰áK…„„øøø”ô4>X7VzîááÈÈHtíÚW¯^EÛ¶mammåË—C&“I󆊙3gbãÆpppÀ·ß~‹S§N!//Oe Œ3 …S¦LAÿþý¡¥¥…9sæ¼—s$"""¢·Kæíí-üüüÞë ÈÊÊ‚——×{·4=z4æÍ›}}ý’žÊ{Ç÷×»Wšß_DDDT: 6ŒÛöˆˆˆˆˆˆ4Áà‰ˆˆˆˆˆH žˆˆˆˆˆˆ4Àà‰ˆˆˆˆˆH žˆˆˆˆˆˆ4Àà‰¨yyyxøð¡ôüÙ³gxüø±ôüñãÇÈÈÈÀ£GTÚ¦¦¦"++ëÌ))) B$$$   ‰‰‰o}""""RöAO§NB­ZµÐ¸qc¸ººÂËË 'Ož,²~ZZÜÝÝqáÂ…7çÒ¥KÈÍÍý¯Ó¥OXAAêׯ/}“zôè!ïÑ£®\¹‚#F¨´]´hΜ9óFã­\¹òµu¢££1|øpdffbìØ±xòä üFãÑ›û ƒ§¬¬,4kÖ ¡¡¡8þ<&OžŒ±cÇ*Õ)((~>sæ š4i‚F©=^èÕ@iêÔ©HOO/¶ }zîܹƒüü|À•+W¼X͹{÷.îÝ»‡ììl@ll,²³³áää$Õ;yò$ž={†ôôtäååáÖ­[hذ!,X õƒ„„¥1Ÿ={†»wï"==ÉÉÉRùåË—¥º>„ŸŸ¢¢¢¼ø¢ãsçΩý^Ð××ÇŒ3¤ç™™™¸qãÆº6DDDDT´2xzUåÊ•¥íO7oÞDß¾}áááaÆA___:t.\@HHºuë†V­Zaîܹ€ï¿ÿË—/Ç?ü õyüøq„‡‡cÊ”)ÈÏÏǨQ£ P(УGüóÏ?%ržô~,Z´çÏŸGDDêÕ«‡ˆˆœ>}‹-BXX&Mš„ääd 8:::pwwÇÙ³g‘””„2eÊÀÓÓÇÇÕ«WQ¿~}èèèàË/¿Ìœ9ÇÇÌ™3±gÏ/Þk]ºtÁÚµkÑ»woøûû#77;wÆüž={bïÞ½¸uëRSSŽC‡aèС†B¡P{™™™ðöö\½z#GŽÄâÅ‹ñÅ_¼Ÿ IDDDTÊh—ôŠräÈ( àòåËØ·o`ñâÅðññA50bÄ9r£Fµk×ШQ#tèлw¡!Ú´iƒÞ½{ãùóçˆUÚÕºukÔ¯_>>>8{ö,tuuˆ¬\¹Ë–-+©S§w¬cÇŽ ‚••ºvíŠ'NàÑ£GèØ±#:wîŒ}ûö¡gÏžX²d ôõõáîîŽ%K– \¹rððð@Ó¦MáïïGGG¸»»Ký !°wï^\ºt 2™ ­[·lÞ¼«V­‚½½=F 8qâj×®~øýû÷ÇÈ‘#+++tïÞÓ§O‡¹¹9FŽ‰Þ½{¿öœ233±nÝ:Èd2têÔ qqq°¶¶~7ˆˆˆ¨”ú`WžÚµk‡}ûöáÀX´h–.] 8}ú4|||0hÐ ÄÇÇ#33Sj“žžŽk×®aĈ4h šš èÙ³g‘cýõ×_hÖ¬ÀÍÍ §Nz‡gF%­M›68uêN:…_~ùýõÎ;'; …±±±°··¸¸¸àÚµk D»víиqc„††âܹsJÁSZZÌÍÍ!“É@j[[[€€Ûÿùç,]ºþþþèܹ³ÒÇÆÃËË ¿üòËk·”~öÙgÒ¸Ÿþ9"##ÿãU""""¢W}°Á“––ôõõ¡¯¯Þ½{ãâÅ‹€:uêÀ××7nÄ7ß|£tŸ“±±1j×®ßÿ7nDŸ>}ààà044,r¬FáêÕ«€7nÀÅÅåž•4###èëë#!! 4@dd$ `dd„‡bëÖ­˜5k¦N ÐÖÖ†­­-Μ9'''hii¡Zµj ³³³Ô¯™™rss‹ôôt?~àááÇ£  Gð⦦¦˜9s&ú÷ï---ÿwߟŸZµj…“'O"..<(öœ.]º„˜˜¤§§ãÌ™3puuELL âããßúõ#"""*­>Øm{/Ó××GZZîÝ»‡#F S§NpttDbb"öìك˗/Kuûõë‡Ö­[ãóÏ?‡žžžt/Š:fffX°`fΜ‰Õ«WcàÀˆŽŽÆ¢E‹ÞÇiQ êׯŸ”‚¼k×®¨^½:`Æ X¸p!œœœ*mëÛ·/îܹ#­îôë×¶¶¶RÐÓ AÀ¼yóðí·ßÂÊÊ C† ¹¹9† †qãÆa÷îݰ±±­­-œœœàää„: \¹r˜?> zõêøå—_Ð¥K|÷Ýw000@ëÖ­¥•+000€££#´´´àääŒ9¾¾¾¸rå &Mš]]]ÀÜܼØUW""""ÒœÌÛÛ[øùù½×A••//¯Õ¾  qqq¨R¥ŠÚãYYYHMMEÅŠ‹í'33ÑÑѨY³&€ÙÎ*Uª$}@þ˜=óæÍƒ¾¾~IOå½û¯ï¯·mÓ¦M¨[·.ñå—_bÙ²e¨P¡BIOë?)Íï/"""*† öq¬<½J.—8/Vª^8/þ‚_8€••Õ[™ÑËÚ´iƒ9sæ ==Ý»wÿè'"""¢Òê£ žˆ>&•+WÖèËo‰ˆˆˆèÃöÁ&Œ """""ú0x""""""Òƒ'"""""" ðž'ú$]¿~fff%=7’ ]]Ý"ÛclllIOˆˆˆè½û ƒ§7bÿþýØ»w¯Tæéé‰Ã‡«­Ÿ””„ôôtT¯^}úô¯¯¯Ræ¼Ñ£GãÇ„JÛ+W®ÀÞÞ^)åò¤I“0pà@¥L|ôñ¨W¯RSS?º/ˆÝºu+lllЬY³’žÊkõìÙººº%= """¢÷êƒ žÒÓÓqþüy¬[·C† é M @.±ë044×®]äI“¼¼<¥ºS¦LQZ…ÈÏÏ—¾Ütîܹ˜?>ªV­*üø1rrr”Æ($„P»2PT9½+VDß¾}KzoäúõëprrBll,<==abbRÒS""""¢W|ÁŒ?Ë–-C§N”¾çæÍ›˜9s&agg‡U«VañâÅHIIA×®]Õö5iÒ$Lš4 ÑÑÑX°` àîîŽfÍšáìÙ³˜:u*6oÞ¬ÔÆßßÉÉɸqãŽ;___dggãÖ­[ÈÊÊÂâÅ‹ƒ;w"''‘‘‘˜8q" Å;½.ôiš?>üüü‡9sæ`Þ¼y%=%""""zÅ›0ÂØØsæÌÁ÷߯T¾xñbøøøàøñãËå8räÆŽ‹¾}ûÂÑÑQm_(((Àúõëѯ_?>|VVVpssƒ››fÍš¥Ò¦råÊX·nš5k†deeáÑ£Gصk~úé'¬Zµ yyy8sæ Ö®]‹ƒbΜ9ïäZЧmË–-ðòò‚‘‘ììì ££ƒ7n”ô´ˆˆˆˆèlð;v„––<(•>}>>>4hâãã‘™™©qãÆÃŽ;àîî.mÛ+Já}'åÊ•“¶¶jÕJ:vöìY@Ó¦M¡­­ Èår¤§§¿É)R)÷ôéS¡GRÙ„ ¸òDDDDôú`·íZºt)Úµk‡¬¬,@:uàëë sss>|uêÔÁåË—5êëêիرcRRRдiStéҥȺꂫ+W®`À€¸uë–´ÊuõêU/îÁÊÌÌ„±±ñ›ž"•b>>>˜è•'(_¾<ÆŒƒ””Àˆ#ЩS' :kÖ¬µµ5ÌḬ̀cÇÜ¿àåå…Æ£qãÆX¿~½Ôד'Oàé鉙3g¢I“&022‚©©),X€gÏž¡J•*ÅÎåÊ•+8p †Š¡C‡x‘^zÀ€hÙ²%¾ýöÛwsè“tõêUèëëÃÎÎNåXïÞ½qøða<{ö¬fFDDDDêȼ½½…ŸŸß{4 YYYðòòúWí §ìܾ}ÖÖÖ022*¶mjj*ž?.¥2ÏÎÎÆ½{÷P«V­bÛM™2Mš4A£F`nnmmm $$S§NE^^Þ•!môèј7ožR vúp!0`À¬]»†††jëܼy[¶lá½tDDDD€aÆ}ø+OêÈår•U";;»×N`ff¦ôPzzz¯ œ^fii mmåÝŽ†††TàD¾Í›7£gÏžENP«V-!pëÖ­÷83""""*ÊÏÓ‡ÂÇÇG¥L¡P059½±ÔÔT?~›6mzmÝI“&aĈøßÿþ÷fFDDDDÅù(Wžˆ>f³fÍ”)S4ªkll …B;v¼ãY…P& IDATÑë0x"zÂÃÃallŒÏ?ÿ\ã6ýû÷Çþýû‘‘‘ñgFDDDD¯Ãàéÿ±wçq5åÿÇ_(e—­Dv#̈1c“ec D"Û˜A¢ìc7£Pƒ±oY&;¥±+c˜!ÉVI‹¤½Îï~ÎW*Snêý|<îãqï¹ç|>ïsϹ÷~Þç|ÎçñŽ(ŠÂ¼yó˜4iÒ/;iÒ$œœœò *!„B‘S»æéÏ?ÿTïÝô>P…"EŠh:Œ»yó¦¦C¯øí·ß°²²¢D‰o¼l“&Mؼy34hÐ ¢B!„ÿF#ÉS‹-Þ»!´ÝÜܨY³&­ZµÒt(9òã?R¼xqM‡!þ_dd$>>>9$";Ó§OgÔ¨Q2x„B!„†h$yªP¡íÛ·×DÕoåáǤ¤¤pþüyÆŽ‹ŽŽŽ¦CïfΜùŸÊ(W®_~ù%»víÂÂÂ"—"B!„9%×<倃ƒŒ;–ùóçk:ñž¹xñ"zzzÔ­[÷?—5hÐ vîÜI\\\.D&„B!Þ„Üçé_œ8q‚† RµjUªV­Ê–-[¦fÍššM¼Eaܸq|÷ÝwìØ±ãµó¦¤¤P´hQŠ}ý1Zµj1wîÜ,ï=&„B!òŽ$O¯‘œœŒ‹‹ [·nU§Íš5‹)S¦àêêªÁÈÄû"!!‡Í»oß>5jD½zõ^;_—.]¤ë¨B!„HòôK–,aäÈ‘hiýïc200 I“&=z”N:i0:ñ>(Q¢Dޝï»qãŸ|ò M›6ÍÛ „B!Ä[‘kž²ñðáCiÛ¶m¦÷ìììpqq!99Y‘ !„B!4A’§l888ðÓO?eùž––£FbñâÅï8*!„B!„¦Hò”…'NШQ# ²§}ûöܺu‹G½ÃÈ„B!„š"ÉÓ+’““Y³f #GŽü×yúé'~þùç¼J!„B¡q’<½béÒ¥™‰ÈNµjÕ¨_¿>'Ož|‘ !„B!4I’§—¼$ÂÔÔ4ÇËŒ3†+V’’’‡‘ !„B!4M’§—¼nˆìhkk3lØ0V¬X‘GQ !„B!òIžþ߉'hܸ1úúúo¼lÇŽñ÷÷',,,"B!„Bä’<‘>HÄÚµks4HDvfΜ‰££c.F%„B!„ÈO$yâƒD+Vì­Ë022¢zõêœ9s&#B!„Bä…>yzøð!wîÜáóÏ?ÿÏe7Ž¥K—’––– ‘ !„B!ò“»€›2e ÖÖÖøùùåJyü1kÖ¬ÁÆÆ&WÊB!„Bä…:yЧM›6ôÚy/]ºDåÊ•122zí|eÊ”AOO/7ÃB!„Bä…:y*Q¢ÇÏѼ6lÀØØ˜V­ZåqTB!„Bˆü¨Ð_ó$„B!„9Q¨Ï<‰‚ÃÎÎŽäädM‡ñŸ„„„púôiJ•*¥éPÞX¹råøå—_4F¾ããニ‹ eÊ”Ñt(R\\}úôá›o¾Ñt(B! IžDœœÌêÕ«5F¡%¤d-22’Ð¥KM‡R ={–7nh: !„…ˆtÛB!„BˆäI!„B!r@’'!„B!„ÈIž„B!„"$yB!„BˆäIˆ,„††²iÓ&EÉóºnܸÁºuëøûï¿_;_@@9.7**Š'Nd˜¶ÿ~’’’ ᯿þz«xEþsóæM6lØáùFexzzâïïŸaÚŸþ‰Ïk—B! Iž„Èš5k=z4'OžÌÓz–-[†££#*T`ÅŠLœ81Ûy=zDhhhŽË¾wïK—.Í0mæÌ™ÄÅÅqíÚ5~ûí··Ž[ä/'OžÄÃÄ„õ‘––öFe8880cÆŒ Ó¾ÿþû×ÞàÒ¥Ko¯Bñ¾’äIˆ,¸»»³hÑ"¶nݪNóðð 00åË—óôéSuÚÓ§OYºt)AAA¯-óñãÇ,Y²„ÐÐP<<<Ø´i¿þú+={ödÕªU+VL-7:::C¹•*U¢B… Ü¿Ÿ_ý•Û·o«åûûûãääÄÅ‹sïƒï-Z`cc£>*Uª„‡‡!!!:tˆýû÷óäÉ–/_Nxx8üòË/ö¡øøxuß¾|ù2†††ê{?fåÊ•¬X±‚°°0>øà ý Ôõë×qtt”³QB! 4Iž„xÅÅ‹©S§}ûö娱c$%%éGá×®]K•*Uh×®©©©,Y²„‘#GR¯^=¬­­3u{záéÓ§|õÕWÔ­[—™3gâìì @ß¾}éܹ3 ,Àßß_¾xñbììì¨W¯ýúõãÚµkœ>}šóçÏsýúu @Ó¦M=z4ÞÞÞìÚµ‹yóæñé§Ÿ2aÂI  ¡óçϳzõjV¯^;}ûprrböìÙ±nÝ:,XÀG}DãÆqss£víÚŒ7N-ãÛo¿Uû;wbii©¾×¹sg>øàÊ•+§ž!]´h®®®,Z´ˆN:áèèÈ;wÞÕj !„ï”$OB¼bÛ¶mÔ©S/// ùã?HIIÁÑÑKKK:tèÀÙ³gIMMe̘1tíÚ• &d{ÔýرcX[[Ó­[7¦L™¢&dãÆcÿþý”*U ;;;ÌÌÌHKK#%%…±cÇÒµkWÆ—¡Ü}ûö1räH¾üòK6nÜHƒ رc-[¶äÉ“'˜˜˜pøðá¼ÿ D¾¢¥¥…®®.ººº/^€¸¸8&NœHãÆ°µµ¥]»vÔ¬Y“üKKK?~¬–annΞ={€ôëÚ¶m«¾çåå…ŽŽ§OŸÎp¶ê…áÇӪU+¾üòË= +„B¼¯$yâ%iiiìÝ»—5jpãÆ Z´h¡vÝ+^¼¸Ú­®téÒDGGP¢D J•*¥N{ULL ºººê|EŠ!99™Ñ£GS³fMFŒ··7III\¹r%C¹/×éA”)SF©H‘"<}úCCCôôôèÚµ+”-[Ví‚õBbb¢‡(X>þøcÌàÁƒéÒ¥ ¾¯ÕªUKçŶ/V¬ZZZ™ÊxÑ-ôøñ㘘˜P´hú_Dtt4:uâÊ•+ØÚÚfY¿EŠɵuB!òIž„xɉ'hÞ¼9cÆŒa̘1Ì›7Ó§OCDD+W®äâÅ‹ìß¿Ÿ/¾ø€_ý•7n°lÙ2¾ùæ›,Ë533cëܼ֭y“eË–Q¬X1´µµùûï¿™3gxyyA“&M2•Û­[7µ¬=z°fÍîß¿ׯ_ÇÌÌŒS§NñÑG±qãFbbb¨]»6EŠaÛ¶mâääD›6m$y¯ennÎСCéÓ§:-22’Ê•+3pà@Nž×ÖÖfÁ‚„……ѤIŒŒŒpuueë֭ꙡAƒ±xñbìííùüóϳ,³bÅŠÌŸ?ŸÅ‹cmm̓€ô!.\ÈŒ3hÖ¬[·nUÏn 8Å‹3vìXZ·n¶¶6ÚÚÚ˜˜˜`ggÇÏ?ÿÌ—_~I‡hÛ¶-»wïfÚ´iôêÕ‹-Z°cÇÜÝÝ™5k;vdÔ¨QÔ©S33³<û Żռysž?žiú?ü >ïÛ·/¥J•Ê4ýÅó¡C‡R¬X1zôèÁýû÷iÓ¦ XXXP§N,,,˜0aß}÷ݺuãÌ™3ê²–––”-[€/¾ø‚ÚµkçÙº6IIIXYYÉïy«U«“'Oεòüüü˜?¾ÚK@ä¾ÄÄDÌÍÍsõ¿lÛ¶m?~mmí\+SdÍìÙ³©W¯ž¦CykE†®¼n(Ú¼`ccC«V­Þi…É7hÚ´)VVVšå±±±yíʹ¡iÓ¦øùùe˜Ö¶m[<==Õ?ȈˆN:•iÙÊ•+³páBfΜɶmÛ¨[·.Æ ˶®Ï?ÿœÃ‡«Ýüî]|þï#tuuÕnt"w={–7n0xð`M‡’g˜@É’%166Î4Ÿ'NÄÓÓ“îÝ»g{†êKKK9ò%„B‘Ïh,yâ}“Õ líìì2¼.Q¢D–É@«V­r|ÆÕÞÞþÍB!„yJŒB!„BˆäI!„B!r@’'!„B!„ÈBqÍS`` 5jÔP/ÀŠŠ¢dÉ’èèè¼qYÏŸ?'55U–7;Ïž=£hÑ¢ïÍhiï;oooÁQƒâãã5B¾t÷î]-ZDéÒ¥5JŸå@.âÍ%$$ðüùs*V¬¨N{øð!ÕªUËrþØØXEÉr(î§OŸ•aš––Õ«WÏQ,111hiiQ²dÉ7XƒÂ)66–'Ožd˜fhhHDDU«V%44}}ý,o^ýàÁRRR2LÓÓÓ£\¹r9ª;$$„ªU«¾}ð…XDDÏž=@___½õ‰¢(„……©7ÕËß­råÊ¡§§÷Fõ>~üXn{ tòtéÒ%&L˜@ãÆ ä‹/¾`„ ¬Y³†öíÛÓ²eË7.ÓÃÃ&L˜åû+W®ÄÖÖJ—.¹¹ù] ‘­ZµbÖ¬Yš£Ð’Ï>kµjÕÂÅÅE†*Ï#/†*ÿÝ™3gؼy3¿ýö›:í‹/¾àï¿ÿÎ0¢è ;wîäÙ³gYnsâÄ ÜÜ܈ŒŒäÆ|öÙgT¬X‘+Vä(–5kÖP»vm,,,Þ~… ‰­[·²råJ6l¨Nûå—_3f {öìÁÜÜ//¯,oŽîääDDD.\ FèëëÓ§OŸ·[ÌÍÍ9{öl®­Ka2qâDîÞ½K•*U8}ú4;vdÍš5$''caaÁéÓ§³\néÒ¥8p€ÚµkŽŽŽY~G_Õ¯_?êÖ­‹££cn¯N¡S “§E‹1gÎZ·n¢(tíÚ;;;HÙ²e‰ˆˆ@[[›'Ož ¯¯O©R¥¸zõ*FFFèééñàÁ*V¬H‰%xüøq¦3UŠ¢pþüy 122"$$„Õ«WÓ¥K¾þúkõf§¾¾¾|øá‡èèè––Æýû÷ÑÒÒ"88˜-Z ¥U 7EžÓÕÕ¥fÍšš£ÐÊÉ·âý•œœÌÅ‹iÖ¬Y††ø‹ÿÑèèhJ•*EÅŠ177ÇÜÜœ‹/òË/¿°cÇuþ´´4Î;G5Ô³ZIII\¸p P©R¥ õÞ½{W=rëÖ-âââ011y7+ýžèÛ·o¦üΛ7/Ó| \¾|™æÍ›S¼xq5™:t(}úô¡cǎ꼑‘‘\¿~æÍ›«Û;44”   >ýôÓ m–ÔÔT®_¿Î‡~Hrr2çÏŸÏr[ŠŒf̘A‡HLLdذaxyyeºI@@5jÔ 44T½÷ÔðáÃ2d¶¶¶8p€öíÛS¬X1=z¤&Ò~~~```@hh(þþþ888ég n߾ͧŸ~*·Ey úš§š5kâääÄ©S§HMMåàÁƒèèè°dÉ.^¼ÈÎ;"!„HïtãÆ õ‘””ÀùóçéÑ£žžž´mÛ–u™ßÿ+++–-[†¥¥%Û¶m˶üˆˆZ·n··7ýû÷çøñã$%%Ñ¡CN:E—.]Ôÿ\OOOÆŒƒ®®.³fÍbñ⟸¸dÛó£° W·Ù½{÷0`@†yŽ?Ž¥¥%û÷ï§}ûö™ºU¾lÍš5 >oooÚµkGZZ{÷îÅÆÆ†£GÒµkWuÞÔÔT Ä•+W2mK9+œ3:::X[[³ÿþ ÓGŒÁ‚ °··§cÇŽ$''gxÿÙ³g¢¯¯Ï®]»:t(+V¬ %%333ÜÜܰ´´ÄÝÝ]mŸž;wŽƒòý÷ßsüøq¾úê«w¹ªF>Ý1{öl<<eË–Í4xÁË"##±³³£nݺêò5jÔ`Æ ¬\¹V¯^ ¤7ÛµkÇþýûéÝ»7¿ýö...˜ššbffÆO?ý”»+ÿëÝ»w– ÓËþùç¶oß®6’k×®í¼>>>L™2…–-[R¡B¦L™ÂÆ133£zõêlݺ•gϞѹsg/^ÌÌ™3122bãÆ¬Zµ V­Z•a‘½S§NÑ©S'õõÍ›7ÕK´µµÕ.{Ó¦MS»í½ìË/¿Ò¿¯,Y²€îÝ»g˜o„ lÚ´ sssªT©ÂŽ;2\f"þ]>,°yóföîÝKZZZZZ$$$¨?ò9¡££Cxx8©©©9r$Ã{GŽ¡K—.¸¸¸P³fMEÒ¯ƒzñ૯¾bÿþý(ŠÂ¾}ûøúë¯sgå„Bˆw S§N´hÑ'''ŒŒŒÔ/:tˆ¤¤$.^¼È|m9üñ¬ZµŠjÕª¡( ׯ_Ç××—7bkk«v]²²²báÂ…888Ü9s˜8q">>>¯í(²Ö®];:w“åË—í(y®®®ìÙ³‡É“'GZZ«V­âË/¿ÄÇLJ»wïòðáCÊ•+Çwß}‡­­-3gÎäÆœ?ž72jÔ(öíÛ÷×ðý“””DBBžžž,\¸0C’Ó¬Y3üýý‰åîÝ»ÎJeçÅ™¾Î;S¦Lf͚ŀ2%FkÖ¬ÁÔÔ”“'OFpppî®X!P “§5kÖàâ₉‰ fffX[[S³fMêÔ©Cùòå144T‡ƒ|1 àÃ?¤xñâ <'''¾ýö[:vìH¥J•Ð××ÇÈÈ333Nœ8Áwß}Gjj*‡"<<œ† 2iÒ$ªU«†¾¾>Ÿ}öÕ«W§S§Nœ>}šaÆ¡¥¥E“&MÔ8?þøc|>B¼ ÉÉÉœ;wNÓaä ???bcc5†ÿYùòå166Î0­E‹-Z[[[¼¼¼øê«¯¸}û6Í›7§jÕªê€uëÖ¥oß¾899e8#T¦L7n¬¾îÙ³'û÷ïgÈ!hiiááá¾¾¾tìØ‘cÇŽ1tèP5A«T©S§Ne÷îÝ´iÓ†¯¾ú kkk¦M›ön>”÷€¡¡!5jÔÈ4ýE»âã?¦hÑ¢Lœ8‘mÛ¶Ñ¥Kbcc3$¹ 4ÈÐ-ÌÞÞ ¦M›F»víX¼x1¦¦¦ØÚÚbffF—.]022Rë6l‘‘‘èééáççGÇŽ9|ø0Æ ËãµãääD—.]ضm , Q£F+VŒfÍšQ¬X1ÆÇ·ß~ËæÍ›iß¾=Å‹§fÍšY&¾/·g?üðC>ùäºvíʬY³èÙ³'ð¿}ÂÔԔѣGÓ­[7Ú¶mK:uÞÝŠÇWÞ5MÔY˜xyy)Û·o×tïT^ìSßÿ½‘íû111ÊÂ… 3LsttTRSSs=–ü.«ÏÿÙ³gÊôéÓ•F)-Z´Ð@Ty¯gÏžJ½zõ%,,,Óû{öìQ<¨È ‡3gÎ(®®®š#OÅÇÇ+£GÖtÙZ¹r¥âââ¢é0þ³Aƒåjy…ñø]»|ù²²jÕª\-ÓÉÉI ÊÕ2ßFrr²2yòd%))I¹sçŽÒ·o_M‡”kV­Z¥\¾|YÓa¼µáÇ+úÌ“¯R^êR™–––éý—§Í;W= dº®mÑ¢EtëÖ-ôO?ý´Ðw) cذa|üñÇÌ;—k׮ءøÓÒÒ¸}û6«W¯¦E‹ôîݛ۷ok:,!Þ™J•*Éu-Bä2--->ýôS IJeËä¿|¦`¶h„xEÏž=iÛ¶->>>|øá‡¤¥¥qòäI¬­­±±±aÕªU;vŒØØXºvíÊèÑ£=z4Ë–-cþüùÄÇÇLhh(‡BOO‹/2sæÌ õ|õÕW˜™™Ñ¿ ­©æÜºu‹I“&áëë«—[˜ÌŸþIãÆ™={¶¦C"ÏõîÝ[Ó!Q õìÙSír'òIžD¡Eûöí±··§Zµj\½z{{{úõë‡ )))ìܹ“°°0:wîÌèÑ£yþü9Š¢O5Xºt)sæÌáСC´iÓ}}ý,ëJII!55µP^sþüyš7oγgϲ|?00›wUÞóóóË4-44”ÐÐPÎ;ÇG}ÄÔ©S5™B!ò‚$O¢Ð066¦hÑ¢Ô¬Y“Ê•+“˜˜HJJ ~a³µµ5ÅŠËrØùÃÍëéé‘’’ÂíÛ·3 ú2}}}>|˜åE¼U‹-˜5ksçÎ%000Ó}ÒêÖ­«A\˜››s÷îÝ ÓÊ•+GíÚµ5jåË—/°]…BˆÂH®y…^TTË—/góæÍ¬_¿>Ë3F¯N«Y³&>̲¼ððð×[PuïÞ3gΨw ¯^½º¦Cz§ªT©‚©©)îîî\¾|™ï¿ÿ¾P}B! MJJâêÕ«š¨ºP¸sçŽÜx÷ èééQ¦L&MšDRR‰‰‰™n¦üª:uêd›<)R¤Pþ&&&xzzòèÑ#f̘··w¦›L$Õ«Wç“O>ÁÙÙ™ h:QÀ¤¤¤°eËŽ=ªéP ´ÜôâÁƒL™2GGÇ\-WüOBBæææ¹Zæ­[·èÔ©Å‹ÏÕrÅÿDEEáêêªé0þ$O!!!ØÛÛk¢êB!::kkkM‡‘¯¼œ ={H¿ ²··7'NœàþýûÔ¨QƒððpŠ)¢Þàoéҥ겶¶¶êó>ø€‡ª÷:8sæ ;wÎËUyo²~ýzž?ÎéÓ§5Nž7nÆÆÆ™n*DnÑÒÒ¢ÿþ,^¼XÓ¡hƒÎÕòªW¯Îüùó±²²ÊÕrÅÿøùù©ÿç¹¥~ýú̘1#Ûnùâ¿[½zu¶×Œ¿/4’<Õ¬Y³@^ÿ_x{{ªé0Þ+EŠQ¯QÊiCxâĉ¬Y³†éÓ§«ÓvïÞÍœ9sò$Æ÷U©R¥ lBijjªé„BñÉ•ÌB¼¥*UªdHœæÏŸ¯¡h„B!D^“#„B!„"$yB!„BˆäI!„B!r@®yÂÕ«WeG ÐtùÒãÇÙ°a...š¥@ŠŠŠ¢K—.šC!D!"É“(J—.M:u4F¡uûömM‡/•+Wޝ¿þšæÍ›k:”) €’%Kj: !„…ˆ$O¢@¨S§cÆŒÑt…Ö74B¾¤££Ã§Ÿ~*gGòH… dßBñNÉ5OB!„B‘’< !„B!DHò$„B!„9 É“B!„Bä€$OB!„B‘2Úž(ÜÝÝ9pàÅ‹ç®Å¡ IDATÇÔÔ ‹l‡9¾wïóçÏç—_~y£¡“’’(^¼x®Ä, ¾çÏŸ3räHõuíÚµéÝ»75Êv™Õ«WS¹re,,,r\OJJ E‹¥hQ9^&„Bü’<‰BÁ××—>úˆo¾ù†øøx~ýõWžáÌ™3ÄÄÄpùòeŠ/Ž••Õ«Wϲ®S§NѶm[ 144dܸq$&&f» !„"#IžD¡abbB—.]P…'N`jjJ“&MX´hW®\¡V­Zê2UªT¡]»vüòË/ 0€¢E‹Rºté×$Q­Z5¨\¹2áááæÝЉ÷Z¹råÔý²K—.¬[·Ž¤¤$ªT©Â!C066&""‚¸¸¸ ËâììL‰%¸ÿ>¥K—fÏž=d[׋ýÒ¿Š¢Hâ$„B¼IžD¡dhhȱcÇX°`åÊ•cÚ´iÔ«W£G²{÷nu¾&MšàççÇ¢E‹HHH ..ŽÏ>û,ÛrŸ>>ôéÓ‡‘#G2bÄÖ¯_ÏŠ+2Ìgii‰µµ5 `éÒ¥üñÇÙ–©­­——ŽŽŽÍõ!!! >üFÙo&((ˆ† j:ŒÿD#ÉÓƒhР&ª.3 ,`ذa”*UJ}mbbÂÒ¥KØ´i>>>DGG³}ûvFŽIåÊ•ðòòÂÓÓ“Ò¥KÓ¶m[V®\™e=Ë—/'$$„Ž;òá‡rüøq¼¼¼(S¦L^®žxO•+W— ÓV¯^M¹rå¨V­{÷îÅÓÓWWWjÕªERR@úYPSSS|||Ø»w/zzzôèуbÅŠeªgèС¸»»“––Æ‘#Gðôô¤}ûö4kÖ쬧x{E‹¥aÆ 8PÓ¡h¿ÿþ{®–W¦LÚ¶mK›6mrµ\ñ?wïÞ¥H‘"¹Z¦žž={ö¤J•*¹Z®øŸÃ‡¿÷É©F’§êÕ««÷ܹÏÛÛ›ÐÐPM‡‘¯Ô®];Ãk52<¨[·®ú¼hÑ¢tïÞ=Ãûüq–õ¼è~```€µµõ[Ç, >---š7ožaÚË÷xªT©ƒ R_/^œÆ«¯kÕª•¡›ivÝC 5j”úúÕýYä_EŠ¡nݺ˜››k:”-·N)^¼8Ÿ|ò‰l·<äçç—ë·ÑÕÕ嫯¾Êð»*rWXXÚÚÚšã?‘¡Ê…B!„"$yB!„BˆäI!„B!r@’'!„B!„ÈIž„B!„"òeòôÏ?ÿ0xð`Ìwß}ÇâÅ‹yôèQ¶ó§¤¤0cÆ .]ºôFõ$''ÿ×PÅ{ÆÞÞžcÇŽåy=‡fĈüøãœ?>Ûù’““ÕðæÔO?ý”ᆩGåÈ‘#L˜0!ÓüŽŽŽoT¾xw¢££Õߺ}ûö½Q{÷îeÖ¬Y¦ýùçŸØÚÚf»Ìž={øçŸþµìßÿ›7o¾Q<âÝ›2eŠºÿŒ?//¯×ÎôèQæÏŸÿFu¤¥¥‘’’ò_Â/‰Ïð½ÿùçŸñ÷÷í2k×®}ã!ÕSSSIKKû/¡Š—¼mûÔ××÷ê‘öiþ–/“§GÇäÉ“™8q"))) ><Ûù}||ÆÄÄäêéÑ£‘‘‘ÿ5\ñž¸páÇŽã×_ÍÓzüýýY¸p!S§NÅÚÚ;;»l÷³¢E‹Ò´iÓ7*ß¾}$%%©¯¯]»Æµk×pwwÏ4¿§§ç•/ÞçÏŸsõêU&Ož¬>Þô¾0W®\aáÂ…<~üXöo7f®]»6zzzÿZ¶¯¯¯Üöà=°gÏÆÇäÉ“133ÃÆÆ†   lçŸ>}:½{÷~£:Ž=ÊìÙ³ÿk¨âÿ%''söìYõ{߬Y3ºwïNjjj–óÇÄİzõjºvíúFõÌ™3‡Ã‡çFÈ‚ÌíÓÔÔÔ×¶OO:ÅÝ»wßøÞÜÜœˆˆˆÿ®È#ù2y(_¾<ÆÆÆ4jÔþþûo ýŽÒÎÎÎtïÞ­[·àä䄟Ÿ¾¾¾}úŽ×V¼ Û¶mÃÁÁû÷ï« ÍeË–ñçŸÒ¿–,YBBBÇÇÃÃqãÆ1qâÄ×6ƒ‚‚1b³fÍbåÊ•ãããC“&M022ÂÄÄ„U«VÍÑ£GÙ»w/cÇŽåÇ$,,Œ´´4þüóO =éúᇘ8q"÷ïßÒ ôíÛ—aÆþVë­( nnnXXX°cÇ8pà½{÷ÆÃÀŋsúôi¬­­Y¾|9‰‰‰oUŸx3%K–ÄØØX}T¬X‘7rúôiìíí9rännnØÙÙ±xñb|||èß¿?sæÌQËèÒ¥ »ví !!ÐÐPôõõ¸yó&cÆŒÁÌÌŒ 6pýúu?~ÌñãÇÙ´iVVVôíÛ7Ë#¨·nÝÂÖÖ–¡C‡’˜˜ˆ‡‡dĈÌœ9“ÈÈHøí·ßprrâ‡~³UРAŒi×®mÛ¶åÊ•+9r„Þ½{3räHbbbؾ};lÞ¼™´´4¶oߎ™™Ó§O'55•   6lØÀôéÓ3lÇ àîîΕ+W¸sçcÆŒaÈ!\¼xQS«üÞÓÑÑQ¿÷ß~û-eË–%,,Œ””6lØ@÷îÝ™={6Š¢0oÞ|˜ï¾ûN-ÿÞ½{ìܹgggž?ÎÙ³g8p &L 88XS«ýÞ{Óöé•+W²mŸ®X±"SûÔËË‹K—.1cÆ vïÞ……óæÍ“öi>‘o“§+W®àììÌܹséÕ«—ÚP˜3gõë×gÛ¶mlÞ¼™ .`oo••-Z´ÀÎÎ+++V­ZÅäÉ“yüø1—/_féÒ¥L™2E-ÿ‹/¾ Y³fÌž=›k×®±iÓ&\]])^¼8‹/ÖÔj‹<’ššÊÁƒéÖ­={öT»>\¾|™åË—³råJBCCÙ²e ÁÁÁL›6‰'Ò¦M&Mš”m¹¶¶¶ 6Œ¾}û2uêTž>}Š¥¥%·nÝÂÄĄɓ'£­­M:ufúôéLš4‰V­Z1eÊRSSÕäÉÆÆ†iӦѯ_?ìì숊ŠÂÁÁÕ«WÓ£G†úVë~íÚ5 Ù¸q£Ú…oÆ ܺu V¬XA`` ¾¾¾¬\¹’U«VÌöíÛߪ>ñf°²²R øûûãääÄŒ3¸{÷.îîî,Z´ˆ¿þú 6lØÀž={ˆ‰‰ [·nìß¿€ƒf8:íææÆ€ؽ{7Ë—/'>>ž7nðøñcîÝ»‡««+ëÖ­£S§NjCìe>>>,Y²„%JpèÐ!nݺ…ƒƒŽŽŽÔªU‹Ù³gÅ„ 077gäÈ‘ 6ìÝ|xBµ`Áœ=z4‘‘‘tîÜ™{÷î±lÙ2\]]iÓ¦ öööôíÛ—zõê1cÆ Ž?Î_ýÅï¿ÿ޶¶¶zðpôèÑXXXP¿~}µü &ЫW/LLL9r$ƒ bæÌ™ØØØH·°·ôøñcœqvvfРA|ñŲwï^nÞ¼ÉÎ;‰ŽŽfÕªUØÛÛóÉ'ŸÐ¯_?–,YB¹råpssãàÁƒœ8q‚»wïòã?âàà –_£F z÷îÍäÉ“ÑÑÑaìØ±Ì;WýžŠ·ãçç§¶O-,,2´OëիǶmÛØ²e‹Ú>íÓ§O–íÓ°°0._¾Ì’%K˜}:ƒ~«:EÎÕ¬YgggõµŽŽ¾-*W® À×_––õêÕ£cÇŽhiiQ£F ž?@éÒ¥)S¦ !!!¸»»3wî\¶lÙÀ?üÀï¿ÿÎüùó¹qã ê733£téÒ4lØ0Ëk.¬¬¬ÐÖÖ¦aÆêQÏÞ½{S©R% D›6m°´´¤]»v ««Ë“'O¨T©R.Z";Mš4A[[›ªU«âããCrr2ÄÆÆ2qâDÒÒÒðóó˰̞={ eìØ±<}ú”äädºté¢\ÌʳgÏHLLTßoÚ´).\ eË–y¾ŽM‰%ÔvŽŽŽÒ·Krr2cÇŽ%<<œèèhzõê¥.·wï^õsúô)¾¾¾”+W+++ŒŒŒ²¬ëôéÓ|öÙgT¯^êÕ«óøñcâãã)Q¢DÞ¯hójûôÅ™§íÓãÇóüùs._¾Œ¡¡!qqq™Ú§@zû´B… YÖuàÀúõëGÙ²e2dˆ´Oó‰|›ûŒ˜˜ž«öé¦M›r¼Ý"##©R¥J¯È‰|›<½¬lÙ²òäÉÌÍͱ¶¶¦OŸ>,[¶Œ£Gªó-ZìììøüóÏÙ¸q#Ç϶\mmmŽ;F×®]éܹ3%K–d×®] 2ä]¬–xG8yò$k×®UKKK¶mÛ¤`”˜˜È¶mÛ˜9s&ÁÁÁx{{³páB|}}133˲ÜbÅŠñé§Ÿ2~üxªV­JHH%J”ÀÂÂzõê…¾¾>k×®eçÎx{{ãååÅ¢E‹¸páß~û­Z–¾¾>%J”`Þ¼yDDD ­­ÍÌ™3™:u*¥J•âÖ­[Ô®]›Ö­[cggǨQ£8p ÁÁÁœ?>Ó©ü?þøƒû÷ïg{!«––“&MâóÏ?gëÖ­x{{ãééÉêÕ«‰eË–-rqø{æ›o¾¡N:úÎCúïgtt4‹-Âßß?Gר˜™™½vÔ¿ýû÷S½zuNœ8¥¥%žÄÿüóÏÄÆÆR§N9¢­A†††;vŒ±cÇÒ®];Š)Âùóç155åÓO?UçëÕ«C† aÔ¨Qlß¾3f¨Éð«´´´¸téOŸ>¥E‹Œ?žÊ•+“œœL5ÞÕªhúúúx{{cii‰½½=¶¶¶¸ºº²hÑ¢ óõéÓkkk ÄÒ¥KÕ3VYÑÖÖÆÛÛ›N:ÎÂ… ¹}û6:uÊö@ŒÈ¹íÓðððmŸ6mÚ”Q£FajjúFíÓN:Q²dIöìÙ#½Aò‹áÇ+ïÚ¿Õ©d˜vîÜ9åéÓ§Š¢(Ê­[·”M›6)Ož>^=zôkç9wî\†ß‡(×®]SEQ”íÛ·gø-{ù7!::ZÙ¸q£úŸûìÙ3åæÍ›™êHHHPÖ¬Y£þמ;wNùã?2Ôû>4hP®–÷oÿÃ)))êwô…k×®©ÿCOžûõÂËGÄÈÎËgý_Èêh¬BQåÛû< !„B!D~"É“B!„Bä€tÛBJJ ÑÑÑš£ÐJMMÕtùVXXwïÞÕt9–ššJ±bÅ4FŽ„„„h:!„…L¾Mžbbb8|ø0%J”àË/¿¤D‰„……ñàÁƒ·º6#)) //¯,GˆzYll,—.]RG›zSžžž|óÍ7oµ¬x{5ÂÙÙYÓaZY];&Ò¯‡Ûµk;vìÐt(9rðàAâââ077§hÑ÷£c‚üÞ„ X°`úzçÎÔ¬Y3ËñâââX¶l“&MÊôÞÇ™6mZ¦é?ÿüs–7r~ÕãÇñðð`ذa9ŽÝÑÑ‘3fäxþ‚"&&{{û ÓzôèA||<-Z´ €Š+ª7vÙÖ­[3ÜC V­ZüüóÏ9ªû÷ß§iÓ¦|ðÁ9šÿäÉ“-ZSSÓÍ_ùùù©÷U,S¦ ;vTïÙøë¯¿2tèPuÔÒ—½üÝÒÖÖV—ËÉŠÅÞÞž˜˜Μ9ƒµµ5ýúõãï¿ÿÎkhh(S¦L¡_¿~„††röìY~ÿýw¦NŠ÷ïß'&&† °zõjú÷ﯶà šŸy·nÝØ¹sg¦žOž ¤ßCÍØØ˜¦M›2|øpþüóOž={Æ¢E‹X¼x1§NâÎ;Œ=KKKÎ;GPPnnnìܹ“ØØX.\H÷îÝ™8qb–·>ñòò¢o߾̟?€9sæ$»è• IDATpöìY¬¬¬X»v-)))ìÙ³‡C‡1bÄ~úé§Lû›øwù2yjß¾=Û·oÇÖÖ–?þøƒîݻӼysÙ·oQQQ 0€§OŸröìYLLL¨P¡žžžœ8qõ”ö£G2Ùôn†††Ô¨QƒQ£FQ¦LªV­JãÆ‰ŠŠbÓ¦MtéÒ]]]Õ’.Y²WWW:wîÌèÑ£3ít>dÓ¦M´lÙ’þýûàààÀ”)S¨[·.ݺuSc²¶¶ÆÈȈŸ~úIýÓBˆwiÊ”)´nÝZízé7[»}ûv†íöüùsüýý3´+®\¹‚››[·n¥nݺL:5Ûò®^½J||<{÷îÅÀÀwww|}}9wîûöí£råÊ鉓……}ûö¥lÙ²Œ?žyóæ1uêÔ Ûò…£G2}útZ¶lÉÖ­[ aÒ¤I >œž={bggGbb"“&M¢qãÆ8880bĈ|soüb``@DDÏžý{wWSþÿüUÚ„2•}_b0vùC4”²e¢d c aÜŠÉ¡Ñ dHÉR"šÑØ—"*-R©´—öRÝ{«Ïï~™+Ë›«¼ŸÇ<ãÜsÞçsΧÏ9Ÿ÷9ŸsN17ÍÞÞƒ ‚­­-šš HLL„³³3±|ùrÌŸ?|>6l@ß¾}1jÔ(XZZbÅŠؽ{7/^ŒvíÚaòäɰ··GRR®_¿???tìØÏž=«UžgÏžáäÉ“ðööFNN‚‚‚püøq>|!!!ð÷÷Gll,¶nÝ têÔ ¿þúë'Û_Åg9l¯gÏž E`` .^¼ˆÕ«Ws MaÆaÒ¤IhÞ¼9ªªª0nÜ8ÄÇÇ#55­Zµzgü€€DEEáܹsˆ‹‹IžjÄÇÇ£C‡\Ò4|øpTTT`Íš5èØ±#´´´žž555n9%%%¬[·rrrÜØÔ²²2lܸ]»vEZZw%mîܹ000@—.]àää###‰ì?Bdž ð¿ÿýO$qª1räH0ưbÅ üþûï æ¨/‘’’’È3Ÿ;vìP=ꡤ¤„»J]3¢Fÿþý1jÔ(À!Cðøñã·‹·±±‹‹ nÞ¼‰ÜÜ\À´iÓ```333üðÃÈÏÏÇ_ý…lÙ²@õß‘©©)RSS±páB(**ŠÄíׯ† ÜoM›6…¹¹9`bb‚¿þú °hÑ"´hÑ?þø#\\\`llüQûMÚ:wî,RoM›6­5òóó±fÍÄÇÇ¿5^ÍEføúúÂÆÆšššÈÈÈ€±±1,X€=z¨¾ÛܤIôïß@u]böìÙøá‡jÅž1cš5k†>}úpw'Mš„.]º K—.°µµ…P(D¿~ý¸á}ÇGHHȇ6Œ1‘!u>„‹‹ ddd0yòdnº¢¢"Ú¶m \¸p:uBNN¾ùæLœ8éééˆÅîÝ»|>/^¼à–ïÞ½; ¸‘Y½{÷®Užyóæ¡I“&èÙ³'JJJ‹/F‹-°dÉ9r]»vÅÌ™3¡®®sssŒ=º¾vO£õY&Oû÷ަL™‚)S¦ÀÇÇÇŽã"ã{ß5Ö·°°Päß|>ººº˜3gæÍ›Ç^WVV&r “——箘Ռÿ–‘‘©µœºº:ääDw«ŒŒ «Y³fÈÎÎðï²yóæô¦8BÈ'µaÃhiiaúôéoG[[Œ1¬\¹ûöí£ê3%+++òBUUU@ëÖ­1kÖ,,\¸xúô©Èr5ç" z¨‘ººúãçææbþüù8~ü8Ö¯_Ï%Ö†††Xºt)Ž;CCCœ} OOO̘1Cìå[µj…ÐÐPäææâðáÃ"¿AYY‹/FDD222  ¹†^£ÿþˆŽŽÆƒpáÂhhh E‹o\_dd$weìMcعs'¢££áææÆ½PâСCˆ‰‰£££ÈÕ B©O¶¶¶ÐÒÒën÷¨Q£`bbkkëF?§±100€››ÜÝݱråÊZÏ%•––bÕªUøå—_P\\üÖŽ¼¢¢"’’‚uëÖqo¾µ±±‡‡Ñ­[7Õ@uuu¬^½6lÀýû÷±xñb¤§§£uëÖhß¾=Ο?ãÇ¿µÜòòòX½z5öíÛ‡ .@WW°oß>:t›7oÆ÷ß/™ô™›6mvìØXXXˆÜ‰xŠŠ ø|>®^½ŠãÇãÑ£GÈÉÉÁôéÓ UUU‘zúᇂÇcÍš58yò$¸y~øá.Ùz“ìØ±K–,Á¸qã ##ƒ²²2¬Zµ ÈËËéü7÷îÝÇÃÌ™31sæÌZoMœ9s&/^Œ ,,ìwߤY³fPWWÇÏ?ÿŒãÇcûöí——ç~/,,Ä´iÓtïÞÑÑÑøùçŸß×ÙÙ‡–-[¸¾´ŸŸ\\\`nn“:î ö©‰³Î³gϲ °eË–± .0Æ{ñâûûï¿Yaa!óöö™Æc=b?fŒ1¶sçN6wî\ÈüüüXYYswwgŒ1æááÁ/^Ì®_¿Î~ùåÀî޽ˌYnn.;{ö,cŒ±äädöÓO?1GGG–““ÃcìèÑ£¬²²’1ƘŸŸËÊÊbaaaìâÅ‹Œ1Æ>ÌmCÍÿ8ݹs‡YXX°Û·o3Æ[²d óòòb+V¬`žžž¬¢¢â#ö¨¨ëׯ3OOO‰Å#„46l`çΫór7oÞd+W®dUUUõP*ò6eeeÌÚÚúóÜ¿_äßÏŸ?gÙÙÙŒ1ÆÊËË™§§' aŒ1& YXXËÈÈ`úúú,!!ùøøpçµ·Å|öì;qâ+**b,""‚åææ²S§N±K—.±ÒÒRVVVÆ¢££cŒUUU±Û·o³ÊÊJvëÖ-väÈ–””Äc,%%…%$$0ƪÏÛ5jþàÀ,77—yzz²ÒÒRÆcFFF,&&†>}šeffŠ¿Å´`Á‰Æ{ßyX ˆl{øøxVXXÈ’““YVVcŒ±’’vâÄ öäÉ‘ysssYll,÷o¡PÈ.]ºÄ®_¿Î^½zÅ\]]Yee% gnnnÜòÏŸ?gŒ1ÆÒÓÓY\\W—/^äöypp0+//gééé,##ƒ1ÆX^^KLLdçÏŸg[¶la÷îÝcwîÜaŒ1–Í&L˜À™Dû5oÊ<(ј۷og‰‰‰oý=''‡]¿~]¿~…„„°òòrî·ððp&X\\ fAAAlùòå,--•””°ˆˆˆZñA­é·oßf¾¾¾¬¬¬Œ1&Z_ÌÍÍ………1Æ+,,äþ¿¦ÿËcÑÑѬ¬¬ŒMž<™ÅÇdzӧOsOŽŽŽìÔ©SìÊ•+,22òöÒÇ9xð ýäë• öÙ&OÉÀkM[²d {ðàA½¬’'BÈ›ØÚÚ~PâTãÆÌÚÚš¨OHœäéCÔ$OŸ£73ŒŒ¸„«>|êä©¡«Ižþ«&yúT¤‘<‰ÃÉɉýðÃlëÖ­lÚ´i’)ØšuëÖÕšFcL !ŸÊ¦M›0hÐ ‰<'¢££Ã%P{öì‘@éˆ4(**bäÈ‘Ò.Æ7®Ö´Æüƶ†¨]»vh×®È4hkkK©DŸ—šï…JÛˆ#jMÓÔÔ”BI—Ïò…„B$§{÷îHKK“X¼gÏž}6B!äS¢ä‰B¹… ¢eË–oUW®®®àóù°¶¶–@É!„†…†íBÈ`Á‚øóÏ?±{÷n¬Y³æƒbPâ$EEEïü¾ù<½|ù’ê­¥§§×KÜÔÔÔz‰KªÕ|d»!“Zòdii)­U7zééé033“v1!Ÿ™ùóçãĉصkןÅ|Jœ¤C^^½zõ‚———´‹"6¡Pˆ¸¸¸Z/øœÍœ9S¢ñºw  Uoùùù …hݺµ´‹"6}}}‰ÆÓÑÑÁ7$³¾ÅÆÆ¢W¯^Ò.†Øš4i‚öíÛK»EÆÂ‚¹ººJ»ŸµeË–áÀÒ.!„HÄÉ“'‘––†õë׋5?%N¤. àèèGGGi…ÔA@@ `jj*í¢:°´´õã?KKKzæI¥¥¥Ò.!„HÌܹsѱcGüúë¯ï—'B!ä_”<BÈhΜ9èÖ­Þ:%N„Bˆ(Jž!ä 5{ölôìÙ[·n­õ%N„BHm”<BÈÌÔÔ½{÷†½½=7'B!äÍèUå„ò…311··76oÞŒöíÛSâD!„¼Ýy"„‚Y³f¡uëÖˆ‹‹£Ä‰By ºóD!ðÍ7ß yóæÒ.!„òÙ¢;O„B!„"Jž!„B!D ”<B!„Bˆ(y"„B!„1PòD!„B!b ä‰B!„BÄ@É!„B!„ˆ’'B!„B%O„B!„"Jž!„B!D ”<B!„Bˆ(y"„B!„1ÈI» A^^¤] ÒˆÈËËCFFFÚE!uPZZ eeei£Þ¤§§£¸¸¸Ñïâââ ©©)íb|1ø|>š4iÒèþŽ»gÏž¡¼¼ü£ë­  ²²²PQQ‘PÉÈ»…B‰µ5UUUŒ9R"±3JžÄ`jjŠòòriã­\]]aii)íb:ðòò‚¾¾>Z¶l)í¢:psskÔmMMM jjjŸõñîCøûû7êzûiii}ÔßQii)Μ9ƒ H°Tä]ºtéÝþÃÃá  €ÁƒK¢Xä=¦L™"±c¶««+|}}%«1£äI fffÒ.Â;`úôéÒ.©ƒ°°0èëë£mÛ¶Ò. ©jk Õ[ÃSPP€P½5PJJJÐ××—v1HÑÝbñÐ3O„B!„"Jž!„B!D ”<B!„Bˆ(y"„B!„1PòD!„B!b ä‰B!„BÄ@É!„B!„ˆ’'B!„B%O„B!„"Jž!„B!D ”<B!„Bˆ(y"„B!„1PòD!„B!b ä‰B!„BÄ@É!„B!„ˆ’'B!„B%O„B!„"Jž!„B!D rÒ.!’‹¼¼‚Ïç7¨zSRR‚’’’Dc¦¤¤ --M¢1ëÛóçÏ¡¨¨ˆ   iElC‡…¼¼¼ÄâEGG£¨¨Hbñ>•¬¬¬So 2dˆTÖ-caaÁ\]]¥²òÏŸÏÇÈ‘#%ÞI¬OÅÅÅhÑ¢…´‹!¶¬¬,øøøH4æ‚ 0nÜ8‰Æ¬O%%%PVV†¬lùù{ìØ1ܼyS¢1§L™‚=zH4f}*--…²²²´‹!¶   øúú¢mÛ¶‹ÙÐꬡ)**B¯^½Àãñ$×ÕÕ·oßF«V­$·¾TUU¡¨¨-[¶”vQÄÂç󡪪 GGG‰Æåñxèܹsƒ:î44¾¾¾puu•èqröìÙÐÓÓ“X¼OååË— æáííË—/òõZZZÒ§×1Æ0fÌ8;;K»(–¥¥¥Äc6mÚæææKþuãÆ ‰ÇìСµµzdoo/ñ˜Tgõ+)) ^^^õ{ݺu4hP½ÄþÒHÌ›7üñòóóOž<ÁÏ?ÿ,2ïöíÛQ^^þÆ8Œ1î{HGÅÓ§OE~÷õõEddä—­¨¨@UU•Øen îß¿ÏÕ™••þúë/0ÆÄZÎÁÁAdÚæÍ›ß»Œ ¬¬¬øÎyëzŒýÒxxxpõÆãñðøñc±—MOOÇï¿ÿ޹sçâСCÈÍÍý 2\½z‹/†¥¥%>(Æ—&66–«7 œ?B¡P¬eËËËáããƒE‹ÁÞÞ€àà`=z”›ÏÉÉ wîÜáþmii)ö:HÝÝ»wOäú÷ß‹u ª?‘àááùóçcçÎHHH¨çÒ6l”<Õ£ãÇcçÎøá‡0gÎØÙÙÕê@½P(Äßÿ 8{öl­ßëú°ŠŠ ܽ{<666ˆ‹‹“ø÷D¾ÉÉɨªªǃ¹¹9~ÿýwøùù½w¹ÊÊJL:<€­­- ccc–.]Š>}ú`ïÞ½HKKÃîݻ߇Ïç¿·ã÷¥ºwïÆŒ‡1cÆàûï¿çöï»$&&B__Mš4ƒƒŠ‹‹±xñbÕI•³³3Nœ8ÁÍåÊ•·vbbbðã?îÞ½‹ŒŒ ‘ß»ví 55µ7.kggW/¯†ÿœ=þÊÊÊàñx˜3g¶oߎþùG¬å¶mÛ†K—.qÓÞÕsss±jÕ*,]ºÖÖÖØ±c¢¢¢Þ:¿´>ÂØPãÿûx<Æäää¼w¹ÔÔTLœ8UUUضm„B!æÏŸ_çõûøøÀÖÖfffX²d vïÞ|Ȧ|Q²²²ŸŸ‡üžžžøóÏ?ÅZÖÄÄÿüóÖ­[‡Ñ£GcîܹÈÈÈ€††öïß ú<·gÏ?~‡û÷ïKôC´DT||<š5kÆC·mÛ†ëׯ¿w9@€I“&!** vvvèÕ«ŒŒŒPVVö JÝ0Ñwžê‘ѳgOÕ)LOOGëÖ­qôèQÈËË#66K–,§§'ÒÒÒpðàA(++ÃÝÝ011yç:nݺCCClÛ¶ =zô€‡‡ €mÛ¶¡¢¢§N™3g ¥¥…M›6¨þ*ó×_ Xµj&Nœ Ão¿ý†¶mÛbåÊ•ÈÏÏGxx8>|ˆ5kÖ C‡õ¸·&555n_Ι3·o߯7ß|ƒ   DFFÂÒÒ)))8xð  €¥K—"00-Z´€““@SSªªªHLLĀޑ#GBMM <ë¾xñ{÷îŸÏÇÊ•+ѦMüñÇð÷÷ÇÒ¥K1qâDddd`ß¾}xöì,--1qâDÇŽÃ¥K— ««‹Õ«WÃÉÉ 7nÜxkPs!¥iÓ¦°³³CRRfΜ mmmøúúâþýû=z4êyO}>ÔÕÕ¹ödbb‚;wî uëÖˆ‰‰ÁÝ»wakk‹ððpüñÇ>|8—œZYYÁÖÖcÇŽù`xvv6öìÙ>Ÿ¡C‡BSSùùùèÒ¥ zôèYYY8p¯^½Â“'OŽÄÄD¤¥¥aýúõèÞ½;wŒ}½ýõéÓáááØ·o6oÞ MMM©ì7iëØ±#×ÖF ´´ðòòÂþýûqòäIøùùaÆŒ055…ƒƒ,--aee º¿úê+ &&OŸ>Å?ÿü>Ÿ;v@EEîîîÜŒõë×cÇŽ°··ÇÑ£G1tèPÀÁƒ¹;ù/^„§§'€êÍ0[¶l¦¦&.\¸ Œ?^ {ì󠪪ʵ·… ÂÛÛðóóCvv6¦N >Ÿßÿݺuƒ••"""ŸŸ .úôéƒcÇŽáÅ‹1bòóó¹ö4uêT¨¾Û[ó!û3gÎàìÙ³PPPÀ¦M›——‡˜˜˜››£ªª +V¬Àþýûq÷î]8pM›6…ƒƒƒD?bÛXihhpu:kÖ,ܾ}jjjˆ‹‹ÃíÛ·±iÓ&„††âÈ‘#Ü1ÔÛÛ={öį¿þ èÑ£TTT””„>}úÀÛÛç΃‚‚6oÞŒÔÔTÀÈÈ›6m˜1c0aÂX[[c×®]_Ä9‹’§zRPPyyy.q€~ýú¡_¿~HMMÅž={… .`ñâŸsç¶lÙ‚¿þú ÊÊʸqãŽ=úÞ!#7oÞPý±0YYY\¸pÓ§OGdd$âãã‰3gÎÀÎοÿþ;/^Œ¼¼<8;;£¢¢‚VÈòeËpúôi¤¤¤ÀÆÆK—.ÅÊ•+qóæMJœÞ"44ÎÎÎ(**©S§pòäIäççsûM]]óçχ¯¯/þþûo8::¢ªª FFF€œœîŠyÏž=!++ {{{hiiaذa044ÄìÙ³Tß‘rtt„††¾ÿþ{øûûãÖ­[8pà&Nœ333Lœ8+W®ÇC§N`hhˆþýû#,, ¹¹¹øã?Я_?lÚ´ GŽÁ¸qãmòäãヨ¨($%%áÉ“'3f ¶nÝŠ£Gr¹¨¨(œ:u –––h×®BBB¸a²aaa îJzË–-aooÕ«WãäɓܺÜÝÝQ\\Œ3gÎÀÊÊ ÞÞÞX»v-cÐÕÕÅ©S§j•/&&êêêøë¯¿ðõ×_cÏž=X³f æÌ™ƒéÓ§CWW÷‹8 ý׃àììŒüü|œ:u /^Djj*מcpttĹsçàíí}ûö¡K—.hÛ¶-¬­­±aø¸¸pñlmm1eÊ 6 :::عs'&MšoooôíÛzzz˜5kFÅ]I¿sçòòò`ii‰¿ÿþ›;ƾÞþîÞ½ +++œ9sÙÙÙ˜={6BBB¤µë¤ÊÏÏÏŸ?Grr2îß¿C‡ÁÉÉ ...8}ú4®\¹‚‡ÂÃëV­‚††>|ˆ7"""ðèÑ#ÕwÓÓÓqàÀ"00û÷µ5>|È­óæÍ› …ÈÉɹ;سgOôìÙ•••ðòòâ†ÌnÛ¶ §OŸÆöíÛáîîgggLŸ>W¯^…ŠŠÊ§ÝaŸ‰§OŸÂÙÙ¯^½‚——÷ÿ666 DŸ>}0vìXøøø ,, ¶¶¶èÞ½;wþ*..ƹsçT_¬€o¿ýÁÁÁ¸}û6ôõõQXXˆèèÏøšç IDAThÜ¿úúú(//Ç¥K—pâÄ Ü»w»wïÆ®]»°råJ˜››ãúõë••Eqq16n܈óçÏãñãÇX¸p!®\¹"µ}ÕP‹C/]º„äädîZYY‰;wâܹsðôô„‹‹ ^¼xÁÕizz:7Ú©yóæ(++ƒ¿¿?Nœ8»wïÂÉɉ¹4mÚ4œ={™™™ÐÒÒÂãÇ¿˜s Û«'JJJ(**y¦¼¼œëŒ5 jjjÐÔÔÄøñ㡬¬ MMM! PQQᮬŠÃÌÌ ²²²èÝ»7 àë다¤$¬^½‰‰‰ÜÉINNmÛ¶E§Nàææ|@õÀ¸¸8¬[·>„ŽŽŠ‹‹Q\\Œ }ûö¸ÿ>`äÈ‘ÐÔÔDçÎQQQ²²2ãðáÃØ¼y3bbbS¦LœœºvíŠ)S¦@UUµQè¾úê+´mÛúúú ƒœ\õµ¢ùóç£M›6¸téæÎ EEE;v cÇŽ…‚‚233Tq-//Ç… D:mFFF(//y¶¢æù%deeqmMcÇŽ…‹‹ lll°páBÈÊ~¹‡åfÍš¡mÛ¶8p >|È]A2e z÷îË—/cêÔ©hÙ²%~üñGØÚÚrË.Z´111"_ÇÔ©SѾ}{qôèQ„„„@WWëׯçžÔÕÕEÏž=1|øp…BÀÛß½{÷PPP€-[¶ààÁƒHMM…@ øT»ê³RÓÖ&L˜€'OžpÇ•¹sç¢mÛ¶¸téæÌ™%%%¸ººBOO ÜPÖš¶æïï{÷î ¡ªªŠ>}ú   àë•““ƒP(yî°¢¢!!!hÒ¤ ¬¬¬àèèȤªG ˜˜˜ ]»v˜6mÚ=ô¹iÓ¦hÛ¶-zõê…«W¯BWW@uÿdäÈ‘¸sçFŽÉGÝÜÜDÎ_Œ1”——#33ÎÎ΀qãÆáÞ½{¸víÆ=== 88cÇŽ…’’.\ˆ_~ùëׯG~~>TTTЩS'ÄÆÆâÔ©S\¢TVV† 6àìÙ³ÜyŒ¼ÛëÇÐÞ½{¦NŠ^½zÁßßÓ¦Mƒªª*,--±aÆ7öI¢¢¢pòäI4mÚ”«/‡üü|tëÖ ™™™xôèfΜ‰ˆˆܺu úúúÒÜôOêË=K×3%%%tëÖ wïÞå¦]ºt‰»Ë ##ÃMÿïÿÕC jN*/_¾{Íš5ùwëÖ­±fÍìÝ»¿ýö÷°»ŠŠ LMMabbÂ5, îäRYY‰Ó§OÝ&Þ½{ÃÔÔÆÆÆPWW禷iÓЪU+n¿ÂßßãÆÃ™3gTב¥¥%š4iHHH€±±1dee1lØ0¸¸¸ //Œ1‘gkN:ÆX­:WRRBïÞ½áìì ggg?~ZZZÞý7×éèèÀÔÔúúú"ãìkþ¦544¸NYhh(¢££¡££oooÀ°aÃ`ii‰´´´Z±]\\ÀãñðêÕ+Õõhgg‡½{÷âÀXºt©ØåTSSÃÇadd„©S§"11ñƒ·¹¡ëׯLMM1cÆ ´lÙ’›þ¦:{ùò%®^½*²üÁƒ±bÅ ®­(**rëš»‡{öìÁ‰'мysL:ÎÎθ}û6€êa~5ÊÊÊдiSÕÌ×Û_«V­ ­­½{÷bïÞ½8þ|£¾ñ.ß~û-LMM1iÒ$‘}PSo­Zµâê-""7n×Ö KKKdeeq˾~lÀ½D%%%Œ1ÈÈÈ`È!" Ðõë×qúôi<}ú?ýôLMMáëëËý^\\ŒÒÒRÕC’Ú N×®]ajjŠ™3gŠœëkÎ_ÿí”——ãܹsÐÑÑáî6©¨¨ÀÒÒR¤®Æî÷‰'âܹs““CË–-Œ_ý ,¹#?{ölœIvv6Eú$;v„¥¥%wáÿmõ5zôh899AGG;vĉ'`hhø©6SêhØ^=úí·ß°hÑ"¢S§N8|ø07†û]¦L™‚ùóç#//·nÝâ:~ååå"/wxßõ3gÎÄÊ•+±lÙ2?~œŽô&]»v…@ Àž={ðâÅ ´iÓíÚµ«ÃÖ’7=z46lØ€C‡áƘ2e 1xð`hiiaÞ¼yxòä ^½zEEEtïÞEEE˜5kôõõ‚ñãÇCEEZZZøùçŸÑºuk„„„¼ñ*OMgbùòå;v,Ž;öAoyü˜˜˜`ýúõHKKƒ³³3._¾Œ 6`„ ˆŽŽÆwß}ÿ7v®Úµk‡åË—sw†gÏžE‹áÇÄàááyyyDFFrÂ?þøƒñßaFýõ?~ CCCtìØêêê——Çõëס££óE߉zÝ„ °mÛ6tèÐþþþÜËijÎE¹¹¹Ø·oΟ?Ÿ~ú ß}÷¦OŸ===\¹rEäyµ×µiÓOŸ>….\¸eeeÀ®]»`ff†ÀÀ@|ýõ×8tè|}}!''‡ªª*ÄÆÆbïÞ½HNNFnn.äää`ee…þýûãöíÛܳ§¤¶ 99...xòä ˆï¿ÿ3fÌÀÀannޏ¸8äååqIsçΑÍõOÚ·oââbèéé¨N¨***ÄÅÅ¡¨¨†††X¶lw7ùÛo¿ÅO?ý¤¤¤p+ÈÇ™0a~ýõWtèÐ/^Ä’%K`dd„S§NaÔ¨Q033Cpp0ø|>Ú´iTVVÖª/Lš4 ÇŽÃÓ§OáèèˆAƒI{ó> FþUVVƬ­­%¯²²’]¾|™]¹r… …BÆcååå,**Š1ÆXAA{þü9cŒ±ôôt–‘‘Ác,''‡>}šñù|ÁcìöíÛìúõëÜ999ìÑ£GŒ1Æ"""˜@ `Œ1öüùsVPPÀc,77—¹»»³øøx®<þæ¤ñwœ““ÃâââjM/**™.˜··7WW5nܸÁöïßÏnݺÅcìéÓ§Œ1Æ„B!»té;xð {òä‰È2÷îÝc~~~L 0¡P(òûã?~ü˜>}š3Æ{öì+))aŒ1Î***j-ó> ,{^qÕW½={öŒåååÕšž˜˜(2ýåË—ìøñã,--›öêÕ+vîÜ9æææÆâââX~~>ËÈÈ`¹¹¹,!!›¯ªªŠÝ¼y“Û—ÌÝÝ¥¤¤p󸻻³ÈÈH#ÒvŸ>}Ê•E(²þù‡;vŒ+GZZsqqáŽÊÎÎŽ;¦HJ}ÕYff&KLL¬5=//Odzyy9óôôdáááÜrÿÝçB¡Ý¼y“1ÆXll,»ÿ> aK–,a/_¾dŒU×ÕÉ“'ÙÉ“'Yff&cŒ±ÀÀ@¶fÍöèÑ#víÚ5.ÞÛÈÝ»w¹öÇXõ߀¿¿?»zõ*÷wð±ÙöíÛ%ë¿<ÈBCC%7..ŽåääÔšþâÅ ‘é¹¹¹ìøñã"uUVVÆÎŸ?Ï:Äž={Æ YZZ{ùò%KNNfŒU·Ç˜˜ÆXu»>tè‹ç΋ŒU×C`` óóóc|>Ÿ›Æ<==YYY;wîKHH`dYYYÜùURòóóÙúõë%¯ÆúõëY~~¾Äãpçœÿ*--™^QQÁ|||ؽ{÷Dæ»wïÛ¿? dUUU"Ë~£ß¢!'ߥ®ÇÐ×ûW¯^eû÷ïg÷ïßgŒýÛ'yS} …BÄ«þÛ=Ö§ ­üÅ‚QòôI'O¤¶Æ’<}iRòDª5–NÁ‡Ú¶m³´´döööÌØØøóÖ$OÒÖÐ’§†fàÀõ·¡%Oä__úq²¡’fòDÃö!„4J6l@bb"JKKagg÷ÎyÈ=@/ú°8!äcQòD!¤ÑêÖ­›Xóihh|Ñ/øRÔ|kˆB>=‰L!„B!b ä‰B!„BÄ@ÃöH£  ñâÅ i£Q«ù6 !„O£¢¢)))(,,”vQ­ÂÂB0Æ$“ÏçSŸ¤žI³OBÉÓk***púôéZ_$’S’Œ‰‰©©©Äã’%%%I<æ;wЯ_?‰Ç%Õrrr0wî\‰Æ¤:«_:::ûüùsìÚµ JJJMª?.ß¿‰ÇMNNÆ¢E‹¸oŽÉKMM…•••Dc†‡‡SŸ¤žeffJmÝÔ_#''8;;K»(–¥¥¥Äcöïß®®®Kþenn.ñ˜£G¦z«GöööhÞ¼¹DcRÕ¯¤¤$xyyI·µk× ï\¦¼¼B¡-Z´øE$oðêÕ+¼|ù ++‹N:AFFæË¢iÓ¦ï­_RòòòPTTPTTD»víÞ»ÌË—/ѪU«ú.©ê(44cÇŽÇÃO?ýmmmìÞ½û­óggg£ÿþˆŽŽ®Óz¼¼¼êå»:_*ggg˜šš‚ÇãaùòåÐÒÒÂÝ»wß:ÿÙ³g1yòd.ñ×>¶¨ä?ÌḬ̀bÅ ðx<Ì;£G~g»X½z56nÜX§udeeáüùó[TòÿœabbµµaÆáÎ;oÿܹs˜>>ÈÈÈøØâ’ÿçççðx<ØØØ@KK믺 …¶¶6RSSë´jo’µuëVÌ›7<>|8ÂÂÂÞ:ÿÑ£Gñý÷ߣ¢¢¢Në¡z«”<}€‘#GÂËË §OŸF`` ~ûí7î·òòrÜ¿€±cÇ¢Gª¯ø<|øûPlzz:ø|>ž>}ÊÅ(((ÀñãÇñðáCnZXXX;òDÔÒ¥Káåå___lÚ´ ‡â~ËÌÌÄ“'Oeee¸|ù2–,Y‚¦M›¨îX<þœ›?!!•••ˆ‹‹ã¦%''ÃÕÕ)))ª¯ä†„„€1ö)6¯Ñúí·ßàåå…€€hkkãÌ™3ÜoÑÑÑHNNP}÷âÆ°¶¶æ~ôèrrrT|499ùùùÈÊÊâæyðàNž<‰¼¼<Õí/**êSlZ£õß¶foo/ò½“ÌÌL„‡‡¨>^^¾|‹/†²²2€ê¶ÏÍ_ÓÖbcc¹i)))puuåêžÚšd 4^^^ðòò­[·pøðaî\& qÿþ}”——þùç :}ûö””” 88˜ëÜeff¢´´TäÜV\\ ‘ WÜxòa¦OŸ///œ={سg÷[QQŦ5z4lï#EEEqÃRnܸݻwcÀ€°±±Á¥K—ŽÄÄD¤¥¥áÒ¥Kð÷÷G‡°iÓ&øùùÁÉÉ ¥¥¥èر#wÅ<33 Âøñ㡯¯Aƒ!,, VVV˜>}º47¹Á …xòä —Ðnß¾ñññ““Cii)vïÞ„„ÈËËÃÔÔ+V¬€‚‚RSS1`ÀØÙÙÁÜÜ €¾¾>455Tw —/_ÂÆÆ#GŽÄêÕ«áåå%Öð%òvEEEˆÇĉsæÌA»v퉩S§bĈÈÏÏÇíÛ·Ñ­[7cðàÁ¸ví¶lÙ‚!C†ÀØØ ÀÚµk¹ÎChh(RSS‘šš ???œ={ݺuË/àçç'ÍMnð„B!ÂÃÃѳgO€££#bcc¡  €’’ìÝ» hÒ¤ ÌḬ̀råJÈËË#-- ß|ó ìíí±páBôïßzzzèÕ«Ѷ–››‹Õ«WsmÍÓÓ;v”æf7 111PSSƒ‚‚ª;æ ‚ŠŠ fÍšmmmØØØÀÉÉ Ã‡—æf7x|>‘‘‘\ŸÄÖÖyyy(//‡’’6lØ€””Ü»wÆÆÆX´h444ƒ &`ÕªU033ÃàÁƒallÌÅyüø1 ƒ„„ØÙÙAKK «V­‚ŸŸ¾úê+invƒFÉÓ¸vítttÀChh(NŸ> 8rä¶lÙ‚öíÛC^^>>>˜:u*äååÑ¿¬^½ÇŽƒ¼¼<Ö®]‹àà`@ûöíE†}ýõ×èÛ·/æÍ›‡›7obĈppp@ZZ,--)yú@ŽŽŽ8vìJKK‘––†Ç£²²\Κ5 B¡#FŒÀ¤I“P\\ŒÌÌL‡‡îÝ»‡ŠŠ DDDpÃd?777(**âçŸFpp0  Ѿ}{üõ×_\{œ9s&÷<÷àÁƒEêbĈhß¾=æÍ›‡Ã‡cÁ‚X´hnß¾ Jž>ÐÆáì쌒’äçç#$$eee ‚‡‡@___}õŒ… âùó稬¬Äºuë  1iÒ$¬Zµ ÉÉÉøóÏ?¹ L@õ¹mçÎÐÕÕÅ’%K°oß>|óÍ7ؽ{7._¾Líí#PòôÆÏ)NNN†©©)&Mš„ÈÈHx{{skvïÞ[¦¢¢ñññÜøÓN:qYÿwß}÷Öu=}ú”»ŠÔ®];‘Û´¤nx<,Xpuu…››,X€¬¬,nèå¨Q£D–yòä ²³³¹ßg̘@UUU‘ÄéuOŸ>źuëšššðöö®Mú"œ:uŠkKsçÎÅÝ»w‘––†ÔÔT®^¦N*²Lxx8ž={Æý>iÒ$€¶¶¶Hâôºââb(**wEœ’§ºãñx077¸¹¹ÁÍÍ .ikÚÚÚ"/ˆˆˆˆxc[kÑ¢Å;;gÑÑѰ±±P]gžžžõ´Ußÿþ÷?\¾|››‹ñãÇcÖ¬YG‹-¸!CcÆŒY.&&†K´Z¶lɽ°EWW÷­ëúï¹­eË–ÈÎΖøö|)æÌ™ƒ_ý@õ˜;vàÏ?ÿDll,<hÓ¦ ÔÕÕ¹>DjjªH{=z4ï}õVsWSS“†8n_îØ±'NœÀ¸qã““#rîâóùÜ2áááHOOç~Ÿ6m€ê>å§×ÅÄÄpw¤455T/Ûô¥ gž>Rç鱦:::?~<¶oßuuu‘·§ÈÉÉaèСX°`¶oß@À -yÛ›q*++¡§§TVVâÚµkøöÛo?Év5výúõCHH:wîŒÎ;ÃÊÊ (,,ä†sÕ'”¦M›r/PPPxkÕ<Ë6qâDnÈ—ŸŸ×y'§oß¾xøð!¾ûî;(**bÓ¦M°²²ªU'N„††`ddĽUêmos«¬¬P}Á#::|>˜0aBýnР¦Î:uê$ÒÖŠŠŠDÚÚ¨Q£ ¬¬Ì½°@ܶ¦§§‡ . ¶&Iêêê(((@QQ&L˜€áÇcûöíèÔ©S­7~1¦¦¦ptt„¬¬ì{ÏmUUU˜0a  ñàÁ <¸Þ·éKзo_„„„@VVZZZ˜7oQUU%2œµK—.èÔ©¬¬¬ðË/¿ °°Kzßvœ¬ªª‚žžÛêAM½}óÍ7PWWÇêÕ«aoo¢¢"¨©©qó?ŠŠŠØ¸q£Èó½ï;NN˜0/^c /^¤zûH”<Õ‘ŠŠ ÷€l ===ÄÅÅÁÆÆgΜ¾¾>òòòЧO´lÙ’»jngg{{{ GhÙ²%zôèUUÕZë2dV®\ MMMŒ;“&M‚‡‡Ö®]ûI¶³±éÚµ+Ú¶mËý[SS“ë0oܸË–-ÃôéÓ¡«« 999tïÞ-[¶„²²2,--abb‚E‹aÆŒªëçMÔÔÔ°{÷nÌŸ?ÑÑÑÐÕÕ…²²2÷œ©›Aƒ‰Ü)ÒÒÒB^^Ú´icccLŸ>+W®„±±1€êá&222ÐÖÖFçΡ§§ggg‘ᳯkß¾=îß¿ëׯcË–-øõ×_1mÚ4ÌŸ?êêêŸl[‹7µµšø¦M›¸¶6nÜ8ÈÉÉ¡[·nøê«¯Ð´iS,]º&&&X¸pá{Ûš††œœœ0wî\<{ö ºººPRR¢¶ö”••kÝe500@LL –-[†ëׯCOOñññ:t(Z´hÁ=ï¹yóf899ÁÀÀjjjhÛ¶-ºuë&Òé«1hÐ X[[£]»vÜsO...u~K&©Öºuk‘Q.­}t“ø IDATZµBçΑ——;;;888ÀÀÀ;vä.êÖ\Ø­9÷qç¾þýûC^^¾Öz´´´°|ùrŒ?***øî»ïÁÝa&uÓ³gO‘OoôéÓ|>222àñxX´hfΜ CCCÈÈÈ W¯^hÞ¼9ÔÕÕaff†3f`ùòåøþûï¼ý8)''‡Ã‡ÃÂÂ7oÞÄ„ Ð¥K—Z£lHYXX0ò¯²²2fmm-íb4jõñ7GÇõoÁ‚IõV¿ìììXFF†DcRÕ¯ÄÄD¶}ûv‰Ç=xð •x\R-??Ÿ­_¿^âqׯ_Ïòóó%—ü‹Ž“ “´ö±……£;O„B!„"Jž!„B!D ”<B!„Bˆ(y"„B!„1PòD!„B!b äé•”” &&†{o]åååA  ¨¨ÅÅÅ"¿½zõªÖ4qâ%%%!)) EEET¦ÌÌÌZ®!ÈÏÏçöOaaa—gŒ!>>Œ±Z¿•”” --íË—••}ÐzßåCþN!„4%%%ܹ-''çƒb$$$ ¢¢‚ûw~~¾È¹%##B¡@õ¹099ùã ý………(++“X¼†"77—«·9WVVâùóç+Ovvö÷g¿D”<}'''ôêÕ ŽŽŽ>|8Î;Wçvvvxòä \]]qòäI‘ßqþüù:ÅÛ²e æÏŸ‡©S§bæÌ™oìè¿P(ĬY³ê´Î†dÇŽ˜3gx<ŒŒŒ0mÚ4î;Oïcgg‡AƒaÛ¶m=z4Ž9Âý¶téR,Y²›7oÆwß}‡ììì7Ƹví\\\$²-5Ξ= ‰ÆüÜcøðá1bôõõ¹¡ŠãСC˜4iÆŒKKK.Áuss«õ·n``ðÖ8YYYHJJÕê ,[¶ì­BCC!D¦­]» boGC³sçN 4#FŒÀ·ß~ '''±–Ûµk~üñG‘i流ªª*¬[·†††044„««ë[ç-,,ÄÂ… ÅÛ€×xyyÁÛÛûƒ–mHæÌ™---Œ1'N¬ÓyíÈ‘#000À˜1cðã?~P纰°?üð† ‚1cÆ|ÔñòÅ‹X½zõ/ßœ9sS¦LÇÃܹs1nÜ8±“¨?þøƒ ‚½½=tuu±yófÀéÓ§±uëV@EEúôéÃ}722FFF+ÿpõêU‰Åk(lmmann‡É“'cöìÙb/»víZ :ÐÖÖ†——×G—gñâÅÈËËûè8_ Jžê($$gΜAll,ÜÝÝqíÚ58::¢¢¢ÉÉɨ¬¬DTTc¨ªªÂƒÀçó¹å››ûÎuŒ;†††(--EVVbccñøñc‘d(99ÑÑÑ"Ë­]»^^^¸qãdddpûömŸÏGXX˜HcxöìY­uWTTü_{w_ÃÕ?püs#’4¶"TP!);E=©5ñ”Š%õ³•Ø©½‚Ä[ÃCB±ë¢ÄRûN„ Wí±„ ""{d‘È2¿?îëÎ#MèmEû}ÿ•;¹sfî93sÎ÷Ì93œ={Víeº{÷.yyy„††ªß‰ˆˆtÑç{«ÞtcÇŽeóæÍQ¦LŽ=J\\©©©„……º^µ .¨=0[¶l!44”³gϲ~ýzŽ;ƺu눋‹ãöíÛDDD°iÓ&Ö®]ˈ#غu«º½›7o¸Û”˜˜˜//îܹCxx¸úY_>ׯ_ 33“sçν°W(&&FÝÿ'OžO\\QQQ€®‘yïÞ=ž={Và˜yÓ=zôˆ;w¢ÕjY¿~=îîîù‚ýq äË‚‚‚X½z5'Ož¤C‡Lœ8ÐåÑ©S§òuZDGGçÛîóiýôÓOjCòÑ£G‚îÙ³gS¡Bõóóÿÿꫯ THñññdggZž/êðø=!¯[RRhµZ<Èþýû¹té’úÿ•YRRûöícÿþýê²çËå×y°k×.4 ûöíc÷îÝìØ±#_£ýùï—*UŠ… ºÝ—-]Ï~jj*Š¢Z†.{ÓÅÄĈV«åûï¿ÇÃÃ#ß•ÛÚµkÙ·o+V¬àäÉ“téÒ…qãÆåKÛŽª1cÆP­Z5NŸ>ÍÁƒ9xð W¯^ýÍ4 Ë뜜âââ ìëËÖyËLï³Ï>cóæÍ^¸pá¥Aݽ{÷Ô¶Ebb")))DEE©ëdeeMZZZ¾úòmæááÁæÍ›9qâhµZ?~LFF†Z§çææráÂõø\µj±±±üüóϬ_¿žC‡áë뫎8ÊÉÉ!$$DíÈŒŒ$33€ëׯ«ç±>ý_ UÛ¨< ''‡°°0õ¸ILL$99™¨¨(õû'2~Ý;ð¶Ù½{7ݺu£dÉ’”.]šsçκžKKKÊ—/Ï!ChÚ´)¦¦¦|ýõ×lÛ¶I“&qçά¬¬ bÀ€…ncÿþý$$$иqc&NœHË–-yøð!õë×ÇÓÓOOO’““yúô)%J”Àßß?ßúIIIÜ¿+++Ξ=ËôéÓiÑ¢S¦LaçÎ >š5k†½½½ºÞ;w˜9s&Ïž=cÑ¢Elݺ•.]ºÐ¬Y3J–,IXX‡b̘1TªT‰råÊqòäI¾ÿþ{lmm_Q޽””"##©X±"7näüùóXYY1iÒ$úöíËG}ÄÔ©Sñ÷÷gÛ¶m 4333ÌÌÌÔJ¥xñâܸqºw««º 777J—.MLL ...XXX°ÿ~ŒŒŒ8uêÝ»wgÈ!Œ3FCLL öööÌ™3‡~ýúÑ®];RSS¹víM›6%22’ºuë2}úô|¿eÛ¶m$%%qðàAÆ©©) .¤Q£F„‡‡Ó¦M†JÇŽiÕªŠ¢ðôéÓ·òŽUÅŠ166&--ñãÇÓ²eKnß¾ÍðáÙ:u*999Ô¯_///üüüØ»w/UªT GØÚÚªдiÓðññ¡cÇŽùÞòÊܹs‰‹‹£nݺøúú²téRÒÓÓéܹs¡ûåîîÎüùó¹qãK–,!77—Ž;Ò¨Q#Î;ÇŒ3X½zu¾u¾ùæbbb¸yó&AAAÌ;###®]»Fvv6K–,áÖ­[ìÝ»—ŒŒ "##™>}:íÛ·E¹ûj”(Q‚*UªÃÊ•+‰‹‹ãçŸfÓ¦MLœ8‘¨¨(ªV­Š··7sæÌaêÔ©8::ª×XÐJ~~~T«Vääd|||ˆ‹‹ãîÝ»ÄÇÇS¾|y6mÚDñâÅYµjáááDEE‘Àüùó±µµeÔ¨Qlݺ•uëÖ±eË,,,øâ‹/pttÄËË‹óçÏ“ÀÊ•+©W¯^¾ßqâÄ BCC aݺu}úмys’““±²²béÒ¥Mƾb <|ø *À½{÷¨T©ƒ bèС´jÕ OOOÖ¯_ÏöíÛ™6mšzŒ–*UŠ3gκŽí¾}ûÒ¥K&NœÈŠ+ؽ{7uëÖ¥}ûöÔ¯_Ÿ#GŽP¹re<<< ŒäðòòÂÆÆ†Õ«WsåÊfÍšEvv6ï¾û.'OžÄßߟK—.ˆƒƒ—/_æóÏ?a[öïL‚§ß)::š®]»¾ðÿÿ÷ÿG‹-Ø»w/žžžTªT‰&MšÍñãÇ9þ<Mš41h{,^¼˜˜˜LFFçÎS{ÍœœÈÈÈ`Ò¤IÌ›7###úõëÇûï¿Ï¨Q£X°`7æàÁƒ$&&’‘‘³³3ÎÎÎù¶•··7FFF4nÜ€‡2oÞ<¬­­;v¬(:;;ãêêÊÖ­[Ù¹s§Ú«ÿ&›>}:K–,A£ÑгgO4h@pp0fffüç?ÿ! €þýûãææÆ… HKKãîÝ»jC*00%K–™™ÉäÉ“éÓ§Z­–5kÖàêꊢ(øùùQ±bEÒÓÓÙ°aÉÉÉ=z€÷Þ{©S§rñâEV¬X‹‹ ‘‘‘jÃúã?櫯¾"33“I“&QªT)lmm9|ø0÷ïßÇÝݽÀoªS§žžž4iÒ„cÇŽáè舱±1K–,AQZ´hÁСCyðàþþþ˜˜˜Ð­[7¢££©\¹ò_—ù‚>xˆˆ W¯^”+WŽŒŒ ’’’X´hãÆcâĉ4oÞœiÓ¦©wÙjÕªèîBéÛ¹sçºójÖ¬YL˜0ï¾ûNÝ–>>>T­Z•ÁƒsüøqÆϽ{÷òu4ùäÖ®]‹™™;w&88˜J•*:$ºgÏž8::r÷î]õÎTË–-9r$ÁÁÁlÞ¼{{{,--Y´htîÜù<ɰ½ßÉÞÞ¾@ÅêîîÎãÇÔá;Å‹Wÿ666&&&†wß}W]ÇÎÎΠíÕ©S@íe'>>___|}}éÔ©“Zùøø Õj9}ú4£Gt=é5kÖ cÇŽê>´k×®À¶Þÿ}ŒŒŒÔý]¯FÅŠÕß~íÚ5µajgg§.{Óy{{£ÕjÕŠBOŸÏçUãÆiРvvvìÛ·ÐÆZ­–Î;“ššÊ¥K—ˆgæÌ™„„„0þ|ÆÏÕ«WÕ‹ ………zGªvíÚ˜šš¢( ×®]ËW–Ý»w'++ J—.F£ÁÊÊ ##£|Šçýúø€ÿ•F£¡xñâdddP­Z5õ;vvvêÀ·Á‚ @«Õ2kÖ,uùgŸ}ÀÉ“'ÕΈ¹sçR­Z5RSSÕ!_ݺuÃÃè¨(’““Õõ»wïNzzº:àôéÓÌœ9777µ£ÁP|óÍ7´oßþ7{®[µj€¥¥¥:ôµuëÖ€.ˆÖ¹mժŊ£lÙ²dffæü&wîµkׯÈÈkkk¼½½9|ø0aaa¸¹¹1gÎ,-- üž>úЕ—~Ø‹¾lÊ•+Gff&Ïž=ÃÁÁråÊQ¬X1š6mªþ†·Åœ9sàÌ™3Ì›7O]®¿†?~œæÍ›º¹ Õ«W'//OnÕ¥K<<<ˆ‹‹S‡[éó®lÙ²†yëï¿ûî»\¹r%ßй;wî°wï^J•*ÅÅ‹éÛ·/[¶lQÓhÒ¤ %J” xñâÔ©S'ß?Ð5ú4M¾s¬víÚê5µyóæj §?÷Ú´iÉ'þd.þõ†ªv´Ì›7O­/ «ÛÞ{ï=Úµk—¯nkÑ¢Z­–ñãÇ“””@Û¶mÙ·oFFF”*U ggg6nÜHÉ’%)]º4IIIŒ;wwwŒuýðæææØÛÛsùòe.^¼È¿þõ/._¾Ì•+WðõõeÇŽüûßÿ.°ÿ/«ÇJ–,©î“~€M‘>0áuX²d Z­–FŒ¡.×—Û•+WÔrkÙ²%µkצV­Zj¹ <­V‹££#éééÄÄÄ0lØ0fΜ‰¹¹9 ;OBCC9yò$Ó§OçÔ©S<½¬ kÿ™››ç«SÿI$xúúöíË twXX˜`¼ˆ ="66–äädNž<©þ/''‡ÌÌLµ~™zõêQ®\9¾üòKfÍšEjj*eË–}á÷œœ8|ø0 ëÁ×ÏsÒ7f¢££_ú¤¸'Ož̳gÏØ¿¿Ú#§Ÿ<ºsçη®—î×ôyÑ¡C5¯|||رc£FbåÊ•êà .°~ýz@wÇaÒ¤I¤{÷î¬Y³EQ¨\¹2%J”P’ç-_¾µA\¯^=–-[Ɔ 4hzÖ¡¡¡üøã|÷ÝwLž<ù¥Îó=äzW®\ts õ=‹úùq999(Š‚©©©Áûó:YXX`mmM™2eò-×—Y£FÔùPÏ;Ðý+V¬`̘1€®üŸ¯ õä%K–¨ˆªU«âä䤞ú¼Œ¥R¥JêºêÃ:žœÙ³g³zõj>úè#ìííÕý&;;›~ýúå«4ôß±¶¶æèÑ£xyyáêêÊ{ï½è&1¶mÛ–Fé“w^•5j`eeU`y•*UÔžæO>ù„K—.áääDµjÕ˜0aÆÆÆÌš5‹¡C‡¢( uêÔá»ï¾#%%…V­Záì쌓“ØÙÙáååEÉ’%1b...¼óÎ;Ì›7ääduN@‰%°··ÇÔԔѣGÓ»woLMMùòË/ò•þoSSSêÖ­ ÀÒ¥K™3gÖÖÖjÝÂÂB­`>øàFŽI||< , nݺøûûsùòeFM‰%^E6¿#GŽdôèÑT­Z•´´4ÜÝÝY°`={öÄÎÎÕ!*Ï«\¹2#GŽT‡Ö1‚Ž;R·n]èܹ3jz ;Nô=»£FRÓŠç“O>ÁÖÖ–?þSSSÊ”)Ã×_Í´iÓøðù}ûö Çùóçéß¿?·o߯Ïχ’žžN¿~ýˆŒŒdäÈ‘E™m¯U×®]qssC«ÕrëÖ-öìÙCpp°úÿZµjѽ{w6mÚ@Ÿ>}h×®µkׯ‚råÊ1fÌ\\\ðóóÃÒÒ’””¶oßÎúõ뉌Œ¤ÿþ„‡‡«O(S¦ Íš5£gÏž¤¤¤0lØ0Z¶l‰¯¯/½zõ"!!OOO@HïÝ»÷…¿!--M-}I… øüóÏIMM¥N:…ÞÅz› 6 wwwªV­Jbb"ãÆã«¯¾¢wïÞØÚÚÒ°aCbcc Ì?zÞ‡~ÈĉÕá€ú:sݺuxxxàççGÙ²e)Y²$:t ,,Œ•+W’‘‘AZZÁÁÁôë× z÷îMbb"mÚ´ÁÜÜœ±cÇÒ´iÓvU¨P777ÒÒÒ°µµ¥bÅŠh4V­ZÅòåËIIIaìØ±¯"ë^kkëBEKKKµÎ©]»¶úÄÒòåËãëëK… ظq#îîîŒ7ŽªU« Îé­Q£mÛ¶åÓO?t×ÊO?ýTýÜ­[7† ÆùóçiР{öìaòäÉj¥ÊõÑG‚³³3VVV,^¼Ð=L'00jÕª©çIÅŠ111!))‰š5kÒ¯_?rrrÔ9‘ 6dæÌ™üòË/xyy©m¬·‘åÊ•+°¼zõêêrWWWæÌ™ƒ““ööö´iÓFC||<ýúõ£X±b4hЀ7bllLŸ>}?~UÆ÷ºwãQ¿~ýË:uê¤DEEýá4_Å1'DZξ}û”©S§æ[–’’¢8::þé´ ð§Óøµ¢*·ÜÜ\åÁƒ–GEE)‘‘‘êwòòò~3­œœœiݼySIOOÿÍu•èèhõóÓ§O•7nüæzîîîÊ‘#G”Ç+999Š¢(ÊÎ;•Y³f)©©©Ê“'O~3ÂÌš5KyôèÑZ÷EŠò\»ÿ¾AßÛ´i“¯dgg+ݺuS—çåå)·oßVâããÕe~~~ÊÚµk•ÄÄD%33³Ðôâââ ”çÇ•¬¬,ƒögÇŽŠ———’ššª¤¦¦ªi¶oß^ÉÍÍU?~lP:…‰ˆˆPæÏŸÿ‡×‘+V(—.]úÓéäååZnÑÑÑJDD„¢(¿}®eee)ááá…~çñãÇÊ&--M‰‹‹SEQnß¾­Ü¼ySéÑ£‡’­.ÿ-ÉÉÉÊÇ¬äææ*¯ó-ŠVIDAT111êr}÷üyûG$%%)S¦LùSifÊ”)JRRR‘§û&[½zµ²|ùò|Ë”^½z½’í½é×É×eàÀÊÅ‹ó-[»v­âçç÷šö(¿×•ÇÇWäΓx©Â&ÉרQã…spÄëUºté|Ô@7|E?núïÊÈÈH}²ÞóžŸg¨ ñ[Š+V ­=,â×~=„ÖÌÌLëfˆÂîŽ>ÿÔ¹¿ƒ¾«ÞÝÑ÷|ƒnØ‹žôù²áÌ…Ý¥ÿ#P)¬lŒŒŒ -Ç¿ FSh¹=Ýù­sÍÄÄä…פÂò®D‰êÝr[[[u˜®±±q¡eù2FFF…³ÿõuS¼>–––¦0˜™™©wÒÄ_ÃÆÆ¦À^KKË·ê!8¯ŠO⥠,óóó{ {" ѪU+õaz%J”È÷b_ñæñññ)°ÌÅÅ—×°7ož±cÇ<œJ?WêUêÚµk§®–/_þù²Ï×ÁÖÖ–mÛ¶ý®uÊ”)“oh¨Þóï@o†Â¦T¯^]†.þ³gÏ.°Lê$y`„B!„B@‚'!„B!„0€OB!„Ba™óTˆ;wî°sçÎ×½[)))Ežfjj*ãÇ/òtÅÿ\ºt©ÈÓLHH  ÈÓ:ú÷“%)³W+!!¡ÐGO…mÛ¶¡Õj_IÚÿtú÷G½ žžžoÍ;ÞÞFZ­ö…ïcü£bcc¥MòŠýÖ;ª^%Íðáéÿ'///ß Eѳ°°PßR_T²³³ÉÍÍ-Ò4E~¦È+pý‹{Å«óÁxQéŸ!eöêU®\¹ÈŸØ—ÀƒŠ4M‘_ÅŠ‹ü©}999ê{yÄ«cÈ êgÏž½ô%ÀâÏ{mCŒ1Bî<ýš‘‘;v|Ý»!~§âÅ‹ËãÓßBµjÕzÝ» ~')³·“¥¥åßÿÆÆÆEÚù!þ&&&¯{Ä+$sž„B!„Â< !„B!„$xB!„BHð$„B!„àI!„B! Á“B!„B@‚'!„B!„0€OB!„Ba ž„B!„Â< !„B!„$xB!„BHð$„B!„àI!„B! Á“B!„B@‚'!„B!„0€OB!„Ba ž„B!„Â< !„B!„$xB!„BHð$„B!„àI!„B! Á“B!„B@‚'!„B!„0€OB!„Ba ž„B!„Â< !„B!„$xB!„BHð$„B!„àI!„B! Á“B!„B@S§Nå_ÿú×ëÞ!„B!„xcýôÓOü?PfeÄéIEND®B`‚gspiceui-1.1.00+dfsg/html/User-Manual.html0000644000000000000000000011073212520120175017000 0ustar rootroot GNU SPICE GUI - User Manual

GNU SPICE GUI
User Manual


Table of Contents

1.   Introduction

2.   Menu Bar
2.1   File Menu
2.2   Simulate Menu
2.3   Settings Menu
2.4   Help Menu
3.   Tool Bar

4.   Main Window
4.1   Node List
4.2   Component List
4.3   Analysis Notebook
4.4   Console Notebook
4.5   Status Bar
5.   Temporary Files

1.       Introduction


The name gSpiceUI is an abbreviation of the project title GNU SPICE GUI, which is itself an acronym standing for Gnu is Not Unix, Simulation Program with Integrated Circuit Emphasis, Graphical User Interface.

gSpiceUI is intended to provide a GUI for freely available electronic circuit simulation engines ie. NG-Spice and GnuCAP. The utility gnetlist is used to convert schematic files to netlist files, Gaw or Gwave to display simulation results and gschem is the preferred schematic capture tool. gSpiceUI is useless without the software tools it depends on, credit should go to the authors of those tools.

The gSpiceUI GUI is designed to be as consistant as possible between analysis types and simulation engines. The intention is to abstract the technical particulars from the user so that the focus may be on the simulation rather than the simulation engine or even the analysis type.

Like all open source software gSpiceUI is a work in progress and probably always will be. It has been developed over a long period of time (since 2003) and has reached a relatively mature state. Experience in software development as well as using software in general has taught me that it's better to provide less functionality that works than more functionality that just promises a lot. Consequently, as a generally rule, bugs fixes and improvements to the underlying architecture will take precedence over new functionality. I believe this approach pays off in the long term.

It is worth noting that whereas NG-Spice is derived from the SPICE code base, GNU-Cap is not. GNU-Cap is an independent implementation of the principals used to analyses electronic circuits. As a consequence analysis results can be generated using two independant mechanisms and then compared. This is one of the reasons for supporting more than one simulation engine; if the same or similar results can be achieved using two different simulation engines then it's likely that the simulation results will bear some resemblence to what actually happens in reality.

It is important to realise that a simulation engine models the behaviour of a system and therefore can never be 100% accurate. In addition the simulation engine itself is an implementation in software of a mathematical model and so is also subject to bugs. As the underlying mathematical model and software implementation improve the simulation performance improves. One of the reasons for the choice of simulation engines to support was that they are both in constant development. (Not to mention the inherent goodness and righteousness of open source software, so I won't mention it.)

The skills and judgement of the user have a profound impact on the usefulness of electronic simulation. It can be a technically demanding process requiring considerable thought, practice and persistence. The alternative is to go straight to building prototypes; in any case, ultimately prototypes must be created to finalize a design. However simulation is generally a rewarding step in the development process, even if it only provides a better understanding of the internal workings of a design.


Return to top

2.       Menu Bar


The menu bar provides access to almost all of the functionality provided by gSpiceUI. However there are a few functions that can only be accessed via command line options.

2.1     File Menu

This file menu contains options mainly associated with handling netlist and schematic files.

2.1.1   Open

Open a netlist (circuit description) file containing component definitions and load it into the NetList text control. If the netlist contains simulation instructions gSpiceUI attempts to parse them and the settings are displayed in the GUI.

Notes :

  • Be aware that gSpiceUI will modify the netlist file; it will change the formatting and remove things it doesn't understand. If this isn't OK give gSpiceUI a copy of you're file.
  • There is an upper limit to the number of lines which may be displayed in any text control (the underlying file isn't truncated). This setting maybe adjusted by the user, refer to 2.3.2 Preferences Dialog.

2.1.2   Import

Import one or more schematic files. gnetlist is used to convert the schematic file/s to a single netlist file. The netlist file name is automatically derived from the first schematic file name in the list with the file extension changed to .ckt. Eg. if schem1.sch, schem2.sch, schem3.sch were specified as the schematic file names to be imported the netlist file name would be schem1.ckt.

2.1.3   Reload

Reload the netlist file. If the netlist was imported from one or more schematic files, the import operation will be repeated. As far as possible the simulation settings shown in the currently displayed analysis notebook page are retained.

When gSpiceUI is used to create a netlist file from schematic file/s it inserts a reference to the schematic file/s near the beginning of the netlist file. If the currently open netlist has this schematic reference, reload performs an import operation otherwise the netlist is simply reloaded. In either case the simulation settings shown in the currently displayed analysis notebook page are retained as far as possible.

2.1.4   Close

If a netlist file is open then close it and resets all GUI parameters to default values.

2.1.5   Exit

Close all files and child applications, delete temporary files if required and exit the application.


Return to top

2.2     Simulate Menu

The simulate menu contains options associated with circuit simulation operations and provides access to other useful applications upon which gSpiceUI dependends.

2.2.1   Create

Create a simulation file based on the values currently displayed on the GUI or the contents of the Simulation text control. Note, any changes made to the GUI have priority over changes made by the user to the Simulation text control contents.

If any changes are made to the GUI control contents the simulation file is completely re-constructed, which then causes the Simulation control contents to be over-written and lost. However, if changes have been made to the Simulation text control contents alone then it is written verbatim to the simulation file.

If a problem is encountered a message box is displayed giving a brief explanation as to why the operation could not be completed. The raw console spew generated by the process will have been sent to the Console text control, a careful perusal of this generally reveals the cause of the problem/s.

2.2.2   Run

Run a simulation based on the values currently displayed on the GUI controls or in the Simulation text control. If the user has made changes since the last Create operation then a Create operation is automatically executed as described above.

If the simulation file is created successfully then gSpiceUI attempts to run the simulation. The simulation results are formatted then sent to a data file (refer to section 5. Files) and are displayed in the appropriate Simulation Results text control.

If a problem is encountered a message box is displayed giving a brief explanation as to why the operation could not be completed. The raw console spew generated by the process will have been sent to the Console text control, a careful perusal of this generally reveals the cause of the problem/s.

2.2.3   Stop

Stop a running simulation immediately. This option can only be executed if a simulation is actually running. This is a useful option if a simulation is running too long or appears as if it won't converge.

2.2.4   Schematic

Edit a schematic file. If there is a schematic file associated with an open netlist file it is opened using gschem and may be viewed or edited by the user. Note : if changes are made to the schematic file (and the schematic file has been updated on disk by gschem) then an Import operation must be performed in gSpiceUI in order for gSpiceUI to "know" about new the changes.

It's important to be aware that gSpiceUI cannot run a simulation based on any old schematic file eg. generated by gschem. In fact, the simulation will fail unless the schematic is trivial or you're just lucky. Certain prerequisites must be met before a schematic may be simulated. The schematic must be translated into a form which can be interpreted by the simulation engine (eg. by gnetlist), in short everything must be explicitly defined. The extra information required over that sufficient for human readability is :

  • All power supply sources must be explicitly defined.
  • All signal sources must be explicitly defined.
  • Components not already defined in the simulation environment must be defined using models.
  • Component labels must adhere to the rules specified for the simulation engine eg. resistor names always start with the letter 'R'. In particular be aware that often a model file contains a sub-circuit which must have a name starting with the character 'X'.
  • Net labels must adhere to the rules specified for the simulation engine eg. they can't start with a digit. Refer to the specific simulation engine documentation.

Notes :

  • In gschem, models may be included by setting the component's file attribute or by use of a SPICE Model object. Either way the component value is set to the model or sub-circuit label. Check the example schematics that come with gSpiceUI to see how it's done eg. the LM555 or operational amplifier examples.
  • gSpiceUI recognizes a component type by the first letter of the component name eg. an inductor name is expected to start with the letter 'L'. The following is list of the first letter of various component types (this format is derived from NG-Spice) :
               
    B-Non-Linear Dependent Source
    C-Capacitor
    D-Diode
    E-Voltage Controlled Voltage Source
    F-Current Controlled Current Source
    G-Voltage Controlled Current Source
    H-Current Controlled Voltage Source
    I-Independent Current Source
    J-JFET (Junction Field-Effect Transistor)
    K-Coupled (Mutual) Inductors
    L-Inductor
    M-MOSFET (Metal-Oxide Semiconductor Field-Effect Transistor)
    O-Lossy Transmission Line (LTRA)
    P-Coupled Multi-conductor Transmission Line (CPL)
    Q-BJT (Bipolar Junction Transistor)
    R-Resistor
    S-Voltage Controlled Switch
    T-Lossless Transmission Line
    U-Uniform Distributed RC Transmission Line (URC)
    V-Independent Voltage Source
    W-Current Controlled Switch
    X-Sub-circuit
    Y-Single Lossy Transmission Line (TXL)
    Z-MESFET (Metal-Semiconductor Field Effect Transistor)

2.2.5   View Results

View simulation results in a graphical form. One of the simulation results files is opened using a data viewer application eg. Gwave or Gaw. The particular results file loaded into the viewer process dependents on the currently selected simulation results tab and analysis type tab.


Return to top

2.3     Settings Menu

The settings menu contains application configuration options.

2.3.1   Simulation Engine Selection

The first section of the Settings Menu contains radio buttons allowing the selection of the electronic circuit simulation engine to be used. The analysis notebook is updated based on the chosen simulation engine, the selected simulation engine name is displayed in the status line and any simulation results are sent to the appropriate console tab.

When the simulation engine is changed gSpiceUI attempts to transfer simulation information to the new simulator environment. The information is tranferred via the simulation file so if information appears on the GUI but not in the simulation file it will be lost. If this is a problem create a fresh simulation file prior to changing the simulation engine.

2.3.2   Preferences Dialog

The preferences dialog contains the following settings :

  • Waveform viewer :
    A choice box containing the available waveform viewer utilities. The currently selected waveform viewer utility name is displayed in the status line.
     
  • Temporary files :
    A choice box containing the available temporary file management strategies, ie. automatically delete temporary files, prompt the user or just keep the temporary files. Most of the files in question contain simulation results data and may be useful outside gSpiceUI. Refer to section 5. Temporary Files.
     
  • Results precision :
    A choice box containing the available precisions which may be applied to simulation results. The data are rounded to the selected precision not just truncated.
     
  • Max text control lines :
    A value control which sets the maximum number of lines which may be displayed in any of the console text controls. Simulation results files can potentially be very large, this value allows the user to have some control over the system resources used by gSpiceUI.
     
  • Sync sweep sources :
    A check box which enables or disables synchronization of the sweep sources. If a sweep source is selected in one analysis page, where possible the same source will appear in other analysis pages.
     
  • Show tool tips :
    A check box which enables or disables tool tips.
     
  • The paths to the various utilities used by gSpiceUI may be manually set via this menu selection. (Not yet implemented)

Return to top

2.4     Help Menu

The Help Menu contains the following options :

2.4.1   User Manual

Open the gSpiceUI HTML documentation in a basic HTML viewing window.

2.4.2   About

Open a dialogue containing application "About" information.


Return to top

3.       Tool Bar


The tool bar contains buttons which give easy access to the most used functions. The buttons are presented in groups associated with the different types of activities. Refer to the matching menu bar function in section Menu Bar.


Return to top

4.       Main Window


The main window is made up of various display objects which are described in the following sub-sections. There are lists of possible test points, analysis settings, console output and a status bar.

The main window title bar always contains at least the application name. If a file is open, whether it be a netlist or schematic file/s, the name of a netlist file will be appended to the normal window title banner. Keep in mind that this netlist file is the main file that gSpiceUI works on.


Return to top

4.1     Node List

Display the list of node labels extracted from the netlist file. One or more nodes may be selected (or deselected) by clicking on the node/s in the list with the mouse. The probes for the selected nodes will be calculated and included in the simulation results.

A single node may be selected from the list by left clicking on it with the mouse. To select multiple nodes press the control key and left click on the desired nodes with the mouse. To select a range of nodes left click on the desired range with the mouse while holding down the shift key.


Return to top

4.2     Component List

Display the list of components extracted from the netlist file. One or more components may be selected (or deselected) by clicking on the component/s in the list with the mouse. The probes for the selected components will be calculated and included in the simulation results. At present only two terminal components are included in this list.

A single component may be selected from the list by left clicking on it with the mouse. To select multiple components press the control key and left click on the desired components with the mouse. To select a range of components left click on the desired range with the mouse while holding down the shift key.


Return to top

4.3     Analysis Notebook

There are two mildly different analysis notebooks associated with the two simulation engines supported by gSpiceUI ie. GNU-Cap or NG-Spice. Each analysis notebook contains analysis pages reflecting the various analysis types supported by the associated simulation engine. The following brief outlines the various analysis types current supported. For further information refer to the user documentation for the appropriate simulation engine (much of what follows is taken from this documentation).

4.3.1   Operating Point Analysis

NG-Spice :
This analysis type is supported using the DC command in NG-Spice. The DC analysis determines the DC operating point of the circuit with inductors shorted and capacitors opened. In this instance the DC analysis is used to generate DC transfer curves for temperature stepped over a user-specified range and the DC output variables are stored for each sequential temperature value.
GNU-Cap :
Performs a nonlinear DC steady state analysis. If a temperature range is given, it sweeps the temperature. If there are numeric arguments, they represent a temperature sweep. They are the start and stop temperatures in degrees Celsius, and the step size, in order. This command also sets up the quiescent point for subsequent AC analysis. It is necessary to do this for nonlinear circuits. The last step in the sweep determines the quiescent point for the AC analysis.

4.3.2   DC Analysis

NG-Spice :
The DC analysis determines the DC operating point of the circuit with inductors shorted and capacitors opened. A DC analysis is automatically performed prior to a Transient analysis to determine the transient initial conditions, and prior to an AC small-signal analysis to determine the linearized, small-signal models for nonlinear devices. The DC analysis can also be used to generate DC transfer curves : a specified independent voltage, current source, resistor or temperature is stepped over a user-specified range and the DC output variables are stored for each sequential source value.
GNU-Cap :
Performs a nonlinear DC steady state analysis, and sweeps the signal input, or a component value. If there are numeric arguments, without a part label, they represent a ramp from the generator function. They are the start value, stop value and step size, in order. In some cases, you will get one more step outside the specified range of inputs due to internal rounding errors. The last input may be beyond the end point. The program will sweep any simple component, including resistors, capacitors, and controlled sources.

4.3.3   AC Analysis

NG-Spice :
The AC small-signal analysis determines the output variables as a function of frequency. The DC operating point of the circuit is first determined and used to generate linearized, small-signal models for all of the nonlinear devices in the circuit. The resultant linearized version of the circuit is then analyzed over a user-specified range of frequencies. The desired output of an AC small-signal analysis is usually a transfer function (trans-impedance, voltage gain, etc.). If the circuit has only one AC input, it is convenient to set that input to unity and zero phase, so that output variables have the same value as the transfer function of the output variable with respect to the input.
GNU-Cap :
Performs a small signal, steady state, AC analysis. Sweeps frequency. The AC command does a linear analysis about an operating point. It is absolutely necessary to do an OP analysis first on any nonlinear circuit. Not doing this is the equivalent of testing it with the power off. If the start frequency is zero, the program will still do an AC analysis. The actual frequency can be considered to be the limit as the frequency approaches zero. It is, therefore, still possible to have a non-zero phase angle, but delays are not shown because they may be infinite.

4.3.4   Transient Analysis

NG-Spice :
The Transient analysis determines the transient output variables as a function of time over a user-specified time interval. The initial conditions are automatically determined by a DC analysis. All sources which are not time dependent (for example, power supplies) are set to their DC value.
GNU-Cap :
Performs a nonlinear time domain (transient) analysis. Do not use a step size too large as this will result in errors in the results. If you suspect that the results are not accurate, try a larger argument to skip. This will force a smaller internal step size. If the results are close to the same, they can be trusted. If not, try a still larger skip argument until they appear to match close enough. The most obvious error of this type is aliasing. You must select sample frequency at least twice the highest signal frequency that exists anywhere in the circuit. This frequency can be very high, when you use the default step function as input. The signal generator does not have any filtering.

4.3.5   Fourier Analysis

NG-Spice :
Not yet implemented.
GNU-Cap :
Performs a nonlinear time domain (transient) analysis, but displays the results in the frequency domain. Actually, this command does a nonlinear time domain analysis, then performs a Fourier transform on the data to get the frequency data. The transient analysis parameters (start, stop, step) are determined by the program as necessary to produce the desired spectral results. The internal time steps are selected to match the Fourier points, so there is no interpolation done.

Return to top

4.4     Text Control Notebook

The console notebook contains various text controls which display text data generated by the different operations initiated by gSpiceUI.

4.4.1   Console

Display the console input/output for the last process executed by gSpiceUI. If an error occurs this is a good place to look for indications of what has gone wrong.

4.4.2   Circuit

Display the raw netlist file which was opened or imported via the file menu. The variables and values contained in the netlist file are those displayed in the GUI's display objects.

4.4.3   Simulation

Display the simulation file to be run. It is basically the netlist file plus simulator commands based on user input to the GUI objects. It can be manually edited by the user and will be run as is if the Run button is pressed. NOTE : if the create button is pressed the contents of this tab will be over-written destroying any user input.

4.4.4   GNU-Cap Results

Display the results from the last run of the GNU-Cap simulation engine. The raw data is reformatted to aid readability; non-data records are removed and the precision is set according the value set in the Preferences dialog. If required the raw output from the simulation engine may be viewed in the Console tab.

4.4.5   NG-Spice Results

Display the results from the last run of the NG-Spice simulation engine. The raw data is reformatted to aid readability; non-data records are removed and the precision is set according the value set in the Preferences dialog. If required the raw output from the simulation engine may be viewed in the Console tab.


Return to top

4.5     Status Bar

The status bar is located at the bottom of the application main frame. It consists of three panes which contain text messages showing the state of gSpiceUI. From left to right the panes contain :

  1. The last application status or error message.
  2. The currently selected simulation engine.
  3. The currently selected waveform viewer utility.


Return to top

5.       Temporary Files


Whilst running gSpiceUI various temporary files may be generated in the directory occupied by the schematic or netlist file/s. To illustrate consider the situation where the gschem file test-amp1.sch is imported and every possible analysis type is run using both NG-Spice and GNU-Cap. The following is a list of files which would be created :

<path>/sch/test-amp1.sch (The schematic file to be analysed)
       
<path>/sch/test-amp1.ckt (Netlist file with simulation commands)
<path>/sch/gspiceui.log (Temporary file for raw process output)
 
<path>/sch/test-amp1.ngspice.op (Results file - operating point analysis)
<path>/sch/test-amp1.ngspice.dc (Results file - DC analysis)
<path>/sch/test-amp1.ngspice.ac (Results file - AC analysis)
<path>/sch/test-amp1.ngspice.tr (Results file - transient response analysis)
 
<path>/sch/test-amp1.gnucap.op (Results file - operating point analysis)
<path>/sch/test-amp1.gnucap.dc (Results file - DC analysis)
<path>/sch/test-amp1.gnucap.ac (Results file - AC analysis)
<path>/sch/test-amp1.gnucap.tr (Results file - transient response analysis)
<path>/sch/test-amp1.gnucap.fo (Results file - fourier analysis)

All file names begin with the prefix test-amp1 (taken from the schematic file name). File name extensions then depend on the file type. Files containing simulation results include the name of the simulation engine used to generate the data and an abbreviation indicating the analysis type.

Notes :

  • gSpiceUI can manage (eg. delete) temporary files, refer to Settings Menu.
  • Not all analysis types mentioned above have been implemented.

Return to top

Last modified : 2015-04-29
Author : Mike Waters
E-Mail : mwaters517_AT_gmail_DOT_com
gspiceui-1.1.00+dfsg/html/OM-FrmMain.png0000644000000000000000000014074712267503541016354 0ustar rootroot‰PNG  IHDRL$-M«4sBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î< IDATxœìÝy\Mùÿð×m_%Ke˥ŖJÙ*„ŠÁ 0ƒŒ%š1Œ/3ÃXÆËØ Ã4¡_²”­±kFÊ–KÉR¢P!•iSŸß™ëvcfp“×óñðx¸ç~Îç¼Ï¹7î«Ïù|®ÌÆÆFtêÔ DDDDDDô—'N@£S§N Tu-DDDDDD•ÊØ±c¡¦ê"ˆˆˆˆˆˆ*+&""""""%˜ˆˆˆˆˆˆ”``""""""R‚‰ˆˆˆˆˆH &""""""%˜ˆˆˆˆˆˆ”``""""""R‚‰ˆˆˆˆˆH &""""""%˜ˆˆˆˆˆˆ”``""""""R‚‰ˆˆˆˆˆH &""""""%˜ˆˆˆˆˆˆ”``""""""R‚‰ˆˆˆˆˆH &""""""%˜ˆˆˆˆˆˆ”``""""""R‚‰ˆˆˆˆˆH &""""""%˜ˆˆˆˆˆˆ”``""""""R‚‰ˆˆˆˆˆH &""""""%˜ˆˆˆˆˆˆ”ÐPuDôæ?EEE033C£F”¶»ÿ>RRRÎÎÎÿø8ñññÐ×ׇ¥¥å¿¬T^jj*ÒÓÓ+lS³fM4kÖ쵯2¹ÿ>þøã\»v &&&°µµ…B»¤¤$äååÁÞÞ^UV,)) =‚££#ÔÕÕËm™L†Ö­[222pëÖ-´jÕ ºººo³ÜÿìéÓ§¸téš5k†š5k¾•cãÊ•+ˆ‹‹ƒ®®.Ú´i+++¨©)þ>4!!Ïž=C‹-^ÚïéÓ§ajjZá¿oCVVnܸhÛ¶-455•¶-ûw®nݺ077m5\¼x:::°²²úGû•Õnkk CCÃ×V©€¿¿¿ ¢ª­N:€h×®]…í>þøc@¥¥¥ÿø8æææ¢_¿~ÿ¶L“&M’êQögàÀ¯íx•ANNŽ5jT¹çêåå%RSSåÚ÷íÛW˜ššª¨ÚŠõéÓGÙÙÙJÛ4lØP4jÔHz¼nÝ:@\½zõm”øZ={V[¶lyãÇ*--Ë–-zzz ï“5jˆÿû¿ÿSØÇÝÝ]´lÙò•úWWWŸ}öÙë.[òäÉñàÁƒ—¶ûå—_¤ó WÚ.55UÈd2@|ùå—¯³Taii)<==ÿñ~›7oDttôk­‡ˆÞ.Á&¢÷ÈéÓ§‘’’Rîo ±gÏžÿÔ¿‹‹ËíY²d š4iRîsõêÕ{íÇS•‚‚899!11þþþèׯš5k†;wî`ëÖ­Ø´iú÷ïèèhhii©ºÜ7¢nݺpuu…žžžªK©´Š‹‹Ñ»wo}þñ1Ž=ú:KþÏlmm±wï^üùçŸå†é°°°ÿôoQE˜ˆÞ¦¦¦hР¶mÛVn` ƒ¥¥%ZµjU˜˜?~)))hÙ²%ÜÜÜ`gg™L&µÙ±cjÖ¬ www@tt4²²²Ð·o_ÄÄÄààÁƒ(..Fß¾}áèè(·ï•˜˜ˆS§NaøðáˆÇæÍ›1bÄ´lÙpõêUDFF")) pssCÛ¶m¡¡ñ×?ƒ¿ÿþ;²³³Ñ«W/ìܹÑÑѨQ£ú÷ï;;;¤¥¥aÛ¶m¸qã<<<àéé ¹:Š‹‹±cÇœ;wºººèÙ³'œåŽSžÌÌL|ÿý÷hÙ²¥\Xú»©S§"((Û·oi`Ú¿?NŸ> ]»vpss+w”îîݻؿ?._¾ wwwxxx(Ì·(,,DTT8sssôêÕë>$%%!&&ýúõƒ‘‘‘´ýñãÇØ¹s'âããannOOOéµ-…üü|xzzbÏž=Ø·oV®\ mmmÏC@tt4ÒÒÒжm[¸¹¹)ÌK ƒ……lll°uëVܹs³gÏ!ŽØØXÃÁÁ”úÿ»;wî`çθví\]]áåå…jÕªbccqíÚ5 4Háý³oß>äççcàÀå^ŸÌÌLÌž= 4ÀŠ+Êi422¦M›`ii‰I“&ÁÓÓS®]II vî܉“'OÂÐÐ]ºtA—.]äú†••Úµk'·}ÿþýˆ‰‰A~~>ºwïWW×rçš;wDjj*Z´h>}ú Aƒ€-[¶àÆ(**BPPlllàääTîù–ñõõÅÌ™3±ÿ~…k“ššŠÓ§OcÖ¬YøöÛoö-;ß³gÏ¢¨¨mÛ¶Å€Ê ^‡FTTrssáää___¥5íÝ»±±±(,,”®Å‹¯'UœÃDTõÕ©SGtîÜYlذAIIIrÏççç CCC1cÆ 1xð`…9L“'O„ººº°²²€ðôô%%%R»ç0 >\4oÞ\¬Y³Fèëë '''¡­­-ˆ/¾øâ¥u—ÍaŠ‹‹{iÛU«V âÈ‘#BKKK{÷îB(455ѬY3¡««+[[[‘““#õ1hÐ agg'† &´µµEóæÍQ­Z5±aÃaff&ÌÌÌ„©©i¹sÂÒÓÓ…‹‹‹ ŒŒŒ„¡¡¡ E~~~…õïÛ·OkÖ¬©°]AA(((—7‡ÉËËKÚÚÚÂÒÒRšÛ1iÒ$¹vÇ„ŽŽŽ°°°„–––øõ×_¥6Gúúú€hÒ¤‰tí PaB¼¾9LçÏŸ5„©©©ôþ:t¨\_ :tßÿ½4ï%77W!İaá©©)¬¬¬„ššZ¹}˜™™‰)S¦ˆÞ½{ ¢U«VB!òòò¤mfffÂØØXNNNâþýûBˆ¿æ0Mž}*  ½¯jÕª%ˆzõê‰{÷îÉwÑ¢EB]]]èé鉆 JóªŽ;&„xþšëêê ™L&LMMÅŒ3”žCÙµŠŒŒ¢ÿþ m/^,455Å… æ0eddˆN: ÂÄÄDÔ¯__ÖÖÖ"11QjWZZ*üýý¡¡¡!Õíåå%6l(7‡)//Oôë×OáZ4hÐ@n^ç0U þþþ‚‰è=P˜>|(455żyóäžÄÅ‹Svv¶ÐÒÒ]ºt?B<ÿÀàíí-ˆ+W®Hý”˜tttDË–-¥•ÙÙÙ¢mÛ¶¢ZµjÒ‡YeÊÓ’%KDxx¸ÂŸ'NHmËS­ZµÄ¼yóD\\œæ7n,7n,}°+,,&LÄöíÛ¥> $ˆÞ½{Kõ–…LbÖ¬Y¢  @Im¤ý  455ÅêÕ«Enn®xòä‰X¼x±Édbøðážë¢E‹éCå«z10;wNcÆŒþù§Bˆ¬¬,aee%´´´DQQ‘BˆØØX@øúúJaîòåËBCCC8;;KýµnÝZèééI!;??_zíããã+¬­,0mݺµÜ×/<<\Ô®]»ÂÀôìÙ3aee%êÔ©#ÂÂÂDqq±¸{÷®ÄÒ¥K¥}  ŒŒŒ„™™™Ø´i“¸yó¦Bˆ””i²÷\vv¶pvvDff¦ÔGYrtt;w›9s¦ Ö®]+„xþZºt©ô¾â¯À@ìØ±CêsÞ¼yra8;;[hkk‹aÆÉ]¯õë× âСCJ¯éœ9sUáµBˆM›6 "$$Dñ<0VVVâÖ­[Bˆçïnݺ ",,LÚ÷ÅÀTvþ_ýµxðà(,,AAAÂÈÈHtèÐAz_•]ƒ?üPz_9sF{{{©????addôÒsø{`š6mšÐÕÕUøw£]»vÂÓÓSܾ}[!09RÈd2ñÓO?IÛöîÝ+ôôô„›››´mÛ¶m€ðööOž<BqõêU)8ý=0MŸ>]3g΢  @üüóÏÂÐÐPtêÔI !˜ˆª &¢÷DY`BOOOagg'÷üàÁƒ…•••ô÷¿¦+W®ˆ &H¿¥.&ˆÃ‡KÛÊ LÄŠ+äö]¹r¥ N:UaÝ/[%¯S§NRÛ²Àô¿ÿýO®¬¬,1a¹Q!„¸té’Bme!èäɓҶ§OŸ ---all,7²S6"$„xþá @¹¿wssäF³^4räH@ú ûª^ LG&LééérífÍš%HÛËF*þþA²ì¼BCC¥ÇµjÕmÛ¶•ksýúuñóÏ?‹””” k+ L/ûSQ` B~QQ‘¨U«–°°°¶•€”,–9uꔘ0a‚¸~ýºÜö²÷áÅ‹¥mfffBOOO¤¥¥IÛ „¡¡¡hÞ¼¹Üþ%%%¢M›6ÂÕÕUñWX°¶¶–k—““#tttäFŽ>øàQ½zu)h!DçÎEݺuåFm_T¶’åÝ»w•¶)óûï¿Ëº²À´aùvW®\„‹‹‹´íïééÓ§ÂÀÀ@ἄbܸqr?Ëýû÷/wû«¯¾Õ«W—Þÿ&0• mݺUz¾, ÿüóÏ éÞ½{B]]].¨•ùðÃqöìY!„mÛ¶-÷çoùòår)77Wèéé‰-Z(ô9zôh@œ;wNÁÀDTUp•<¢÷FŒ«W¯ÂÆÆØ»w/&NœXn{,[¶Lz|÷î]œ7hР ÷´jÕJẺººbÏž=())‘¾çI&“¡k×®ríÚµk'7'%%'NœÀš5kÊ=¦ êÖ­+=¾yó&rssáææ&×NMM çÏŸWØÿÅE ¡¯¯/·ÍÇÇ{öìÁÑ£GѳgO¤¦¦âĉ˜}úàÉ“'øî»ïpïÞ=ܾ}3gÎ|¥ã½Î•ð^Å‹çÌ™3èС1qâDܸq #.ÿUÙ‡ª}ûöáÞ½{åþéÞ½»ÒýË>GFF*mSZZЉ'bÕªUÒŠk/š1c```€ 6àÑ£GHLL,÷ƒxÇŽ±{÷nܸqpppÀ¬Y³Ð©S'¹óš;w.îܹƒÝ»wãóÏ?GTTÚµk‡ßÿý•®ÍQ«V-¨««ãæÍ›J¯ëßGƒÊ ¼Ë—/ÇСC!„ÀòåË‘™™‰7nàóÏ?/÷˜/öQ6úwóæÍ×v^†††ðôôDDDJJJ°eË´iÓæ¥!¨,LïØ±ã¥ÇصkÔÔÔкukiÛ½{÷ðøñc…¶ 066.7À–½·üñG¥¯ÁgŸ}555¾Öëô"___!<<)))8{ö¬Ò_ö”Õ]ÞÈYbb¢ÔÆÈÈÚÚÚ¸råŠB»‡Ê]¯²>W¬X¡ôZŒ7î?Ÿ'U. LDï!___\»v ±±±Ø»w¯Ò%ŒçË,ëèè`ß¾}3fŒ4²”‘‘ñ¶ÊýOÂÃÃQTT„-[¶`òäɰ°°ðúë/»eðÊ•+033“ûsá¬[·®Â/Ötvv†££#‚‚‚”~àÀÒ¥KqõêUhjj"88øß\ª¤Y³f())ÁÍ›7®ëòÒ%ÛCCCQ³fMDFFbذaÒ픯ú(!=tèÂs¾¾¾JG+_ÆÇÇYYYX±b®\¹òÒÑ%àù(W·nÝŠØØX¥íBCCQ£FÉ.–””àøñãrmÓÓÓqþüy…%ÖË”Ý^wñâE…× -- xôè€ç×*>>™™™r}lܸfff8sæÌKϱ"666°³³Ã¶mÛ°}ûvhii)ýž©²ÛëŽ9¢ðÜÁƒ¥s“Édhܸ1NŸ>­&9‚ÒÒRéqÙÏyy×âÎ; ,7Ñ»‰è=Tv;И1cðôéÓ oÇËÏÏGii©Üôôôt,Y²€â Ê¦  @a[vv6æÌ™àõÕß©S'XYYaݺuHMM•¶§¤¤ÀÇÇ»ví*÷{_ʨ©©!00B¸»»#..NîùË—/cРAÐÔÔÄ7ß|£´Ÿ‚‚!ä^¯«W¯bãÆþ:ßsçÎaâĉ ‘Û?%% ¥¥mmm|ñŘ4i ¥6wïÞųgÏÊý ×mðàÁÐ××ÇüùóñôéSiûáÇñÉ'ŸàâÅ‹/í£¼k’œœŒU«Vxù{ N:èÞ½;Μ9ƒ?þøCÚ~ñâElß¾ý_'UïÞ½¡««‹éÓ§CCCƒ~¥ýV®\ ôèÑCáõ+--Å¢E‹0lØ04oÞK—.UØÆ (..–ÿøãB`Ô¨QåÏÌÌ ½zõBDDΞ=+m/»•÷Ç„‰‰ ÀÏÏBéýEEEøá‡““#7’]RRòJçû"___9r7n”nÇ+¥¥%\\\pòäI¹Q¦»wïbß¾}°°°FSGŒ’’é=<ÿþ±¿ŸÔ«W={öÄÎ;忝忿ÂÇÇË–-“®U LDï!CCCxyyáòåËhÞ¼y…· <………èÒ¥ ¦M›///¹9LK—.}¥­ªâãã555øøøà‹/¾ÀàÁƒQ§Näää@[[ÁÁÁ ¿qÿ7444°jÕ*Ü¿ööö2dúõë[[[J‹LTÄÞÞ«V­BVVœœœ`ccƒþýûÃÆÆ-[¶DNN/^,w‹Õ‹Œ””¸ººbÆŒpqqA‹-¤}fΜ‰ÔÔT :FFFøä“O`ccƒ1cÆÀÑÑ›6m‚··7ììì`llŒ>úÑÑÑ011Á!CЧOtëÖ úúúJ¿`÷uªS§¾ÿþ{üþûï°³³ÃÈ‘#Ñ¥KxyyÁÌÌ ß}÷ÝKû’’’*ìcÑ¢E¨^½::vì(]GGGhiiáûï¿ÿW禯¯ooo {÷îJçy½¨yóæ8qâLMMñÑGÁÄÄ^^^èÚµ+Œñå—_ÂÂÂaaa !ÝÞÞñññ°··Ç¸qãàììŒ%K– C‡Žp-Z´:::pssCß¾}ññÇÃÜÜ·nÝÂêÕ«¥yccÆŒA»ví0mÚ4ôèÑŸ|ò êÔ©ƒëׯã»ï¾“Ú™˜˜ //“&M’F{^•¯¯/ž={†k×®U8:<ÿ÷IKK íÚµÃ!Càçç{{{äää`ÅŠÒÜÄ€€ØÙÙaæÌ™èܹ3ÆŽ‹V­Z!)) ÎÎÎr}.Y²ZZZèܹ3úõë‡>ú 6DJJ Ö¬YSîÑ»MÝÁÁáÛ^½z©º"zÃÚ·o/÷A»qãÆ¨W¯FŒ¡°µµ5ÜÝÝ­[·FÛ¶mñèÑ#DFFJsZ.\ˆ»wïâÔ©S°³³CË–-!“Éàìì,À¬­­ËLmbbwww¥sq€çóŸ,,,àææ¦t‚þßÛÖ­[nnnr“þ4h€nݺ¡¨¨û÷ï‡L&Ãøñã±víZ¨©©áäÉ“066†››d2lll¤ áï»cÇŽ°±±‘Ûfhh777)<6iÒýû÷ǽ{÷‡ÌÌLtéÒÁÁÁppp¨°þ2ðõõEqq1rssqéÒ%Ô®]VXü@&“ÁÎÎNZÀÕÕVVVHIIÁáÇaaaõë×cÊ”)ˆ‹‹Ã™3gУGØÚÚ¢wïÞÈÎÎÆýû÷qéÒ%Ô¨Q&LÀ¢E‹¤’žžž044DVV.^¼ˆ‚‚téÒAAA°µµ}éùØÙÙÁÝݽÂÑ(¹¥uêÔ»»»ôa¿]»vèØ±#îܹƒØØX”––¢ÿþؼy³ÜJq2™ ¶¶¶pqq‘ë¿ì=yïÞ=8põêÕòeË0{öl\¹rEšçVv{Vûöíå^kàùbƒFff&âââpïÞ=¸¹¹!44Tî:ÂÝݽÜðÓ±cG…Û÷>|ˆýû÷cîܹ¯´XD™úõëcäÈ‘¨Q£´µµqõêUäææÂÉÉ Ÿ}ö6n܈:uê(ì×¥K|ùå—HLLĉ' §§‡O>ù7n”{æÌ™GGGxyyx>—lèСxüø1._¾ŒëׯÃÑÑr·Ä©««cذaÐÐÐ@BBâããammE‹aäÈ‘R»fÍš!)) G޹¹¹Ü¼¹™ššÂÝÝ]Zí¯fÍš¨V­\\\0bĹyWÚÚÚpww—n£¬_¿>|}}‘••…øøx¤¦¦¢cÇŽ–[ BKK ~~~xöì®_¿Ž„„¸¸¸`Ë–-077—~iµk×ÆÐ¡CñèÑ#\¾|7nÜ€““Ö­[§ðóYV»²Zˆ¨òÛ·odþþþ"00PÕµ½w¼½½qòäIÜ¿ÿ¥+¾M7nœÒ•àˆˆÞcÇŽå-yDDDo[II ~ûí78pC‡­Ta))) %%% ßEDô¾b`"""z‹JKK¡«« 777˜››¿Ò<¬·eæÌ™hݺ5d2†®êrˆˆ*~q-Ñ[¤¦¦†Y³fA__>>>Îã{Ûš6mŠùóçÃÝÝý_/—NDTÕ00½e_ýµªK(׫|Ñû†·ä)ÁÀDDDDDD¤‘ LDDDDDDJ00U9998|øðkíóøñãxôè‘ôøÎ;8sæÌ+í{úôi<|øðµÖówHKKSØþ÷zË"##CaûãÇñäÉ¥Ç(¯¯ÜÜÜ—îóøñc…íwîÜQºU^ LDDUÄýû÷±xñâ½ÿ¨Q£¶­\¹·oß–ÇÇÇcëÖ­¯ÔßæÍ›‘’ +8 IDAT’Rîs)))ÿéû‡~ûí7XXX`Ê”)èÖ­òóóQ\\Œ`È!èÝ»7rss<ÿÞ£E‹!((H®gÏžÁÛÛGŽQè?##=zôÀ!CäVŽ+**ÂĉqôèÑrëš7o:tè€Q£FaÒ¤IÒö{÷îÁÝÝý_Ÿ/©Q—‘‘5kÖ`õêÕxðà -- Ë—/dž ðäÉ;v GŽÁ¯¿þúJ}fff"&&±±± BQQ€ç#9¿üò‹ÜHWII Ž=йsçâ·ß~lÛ¶ {÷îÅåË—111X°`ŽuæÌ…Q­Õ«WãСC A×®]±mÛ6ÄÅÅÁÊÊ €»»;Nœ8øôÓO±eË…~ç΋’’’rÏïСC4h8$%% PnÀž³ððp\ºt ;wîÄ… ––†èèh|ôÑGŽJQåÅÀDDTÅuïÞ–––022”)S#FŒ€rrr°fÍ4nÜhÖ¬Ù+õy÷î] 8ñññøóÏ?ѯ_?@ïÞ½‘äädi$jÍš5Ø»w/<<<ðÍ7ßàÞ½{°²²BíÚµabb‚Å‹#<<­Zµ‚ŸŸRSS厕——‡§OŸÊm[¾|9lmmñìÙ3DDD ^½zøý÷ßѶm[@Û¶m¥À´víZ|õÕWrûŸ8q?†‡‡G¹ç÷÷¾¤¾öìÙƒ?þXéu‰ŒŒ„††’““‘ccctìØÇŽCÍš5_éÚQåÂÀDDTÅ?~ÚÚÚ8yò$nܸ!m »»;¦M›&¦¦M›¾r¿5B@@ŸŸäädb„ 3fŒ8Ƈ±cÇ"!!7oÞÄíÛ·aii ˜˜˜HaéÉ“'hܸ1¢¢¢äŽÓ¥K…ÛÙêÔ©ƒëׯ£W¯^ðõõ…‡‡nß¾ZµjjÕª…ääärëÎÎÎÆ¼yóðÃ?Èmß°a–-[†¤¤$¹¾jÖ¬‰[·n•Û×íÛ·±lÙ2¬Zµ jjj055Åþýû1dÈ„……AOO'UNª.€ˆˆÞœììlxxxÀÏÏð÷÷8p¿þú+f̘FaÍš5åîodd„ììl¹þªW¯ÐÕÕ•¶ëèè ;;:::Ò6}}}ÀìÙ³‘––†AƒÁÓÓSá¨U«d2üüü`eeõÒó:yò$Ƈ°°04oÞÀóQ¥k×®¡sçÎHLL”Û‹¢££‘žžOOO$''#""µk׆ Q½zu888àÚµk¨[·.®]»‡rû244DëÖ­¡®®øñÇqìØ1îß¿333´iÓÚÚÚX»v-¼½½Ñ§O©½L&ƒ™™ÌÍÍ®Y“&MP»vm¹m–––HOOGpp0äF˜d27n¬°Off&d2=z$ÕÕ¦Mi¤ œœœþÉËIDD*¶oß>ÈüýýE`` ªkyïxyy•û7½wîÜÁ¢E‹`cc£êRˆª¤øøx¬\¹›6mRu)DDDoÌØ±cyKžª˜˜˜€AõÍ ”–9&¢×ÏÄÄDé sDDDU WÉ#"¢¬^½zýôSãÂ… 0`?~Œ­[·"//OŸ>EíÚµáêêŠéÓ§#<<pûömT¯^P«V-”””`àÀhÑ¢¦L™‚ &ÀÜÜùùù())ÁêÕ«ñÙgŸ¡eË–ÐÖÖ†¿¿?œœœPTT„7býúõX½z5bccallŒ¹sçbçÎPScV'"""¢Ê© óòò±cÇpéÒ%ôìÙ111ˆŠŠÂÌ™3Ñ´iStïÞÛ·oÇ–-[¤}‚ƒƒQ»vm@ß¾}áââ‚7nà÷߇¶¶6ÆvíÚaÿþýøæ›o¤ýüüü`ee…;v`Μ9ÐÕÕEÇŽaaa …L&ÃèÑ£qéÒ%´jÕêí^ """"¢© óööÆ‚ ðøñc|úé§ˆŠŠBjj*š7ohß¾=¢££aff&íóÍ7ßÀÙÙYzüàÁtèÐÚÚÚB`íÚµX¹r%œ¡©©)µ+ Y044”¶?yòwîÜÁŠ+vvvÐÑÑy£çMDDDDôºð¾¨*ÌÚÚIIIÐ××G§N°uëV´iÓpþüyܼy=zôÀºuë*ì§ìö¹´´4òòò¸ò½38ÂTÅõë׿ææÐÓÓC=àãã ²eËP³fMøûûcذa°±±AµjÕäö×ÒÒ‚ ~ýú°´´„Z·n ìß¿-[¶„†Æó·’½½½´oÙßgÍš…É“'£°°„®®îÛ8u""""¢ÿLæïï/U]Ç{ÇÏÏAAAª.£Ê „³³3Z·n­êRˆˆˆˆè5vìXÞ’GDDDDD¤ ‘ LDDDDDDJ00)ÁÀDDDDDD¤‘ü&‰ŠŠ‚­­­ªË¨²rrrðóÏ?«º """"zÇ10©ˆ››¿‡é D­ZµT]½ãxK‘ LDDDDDDJ00)ÁÀDDDDDD¤‘ LDDDDDDJ00)ÁÀDDDDDD¤‘ LDDDDDDJ00)ÁÀDDDDDD¤‘ LDDDDDDJ00)ÁÀDDDDDD¤‘ LDDDDDDJ00)¡¡êÞW¿ýöÜÜÜT]F••žžŽµkתº """"zÇ10©ˆ½½=fÍš¥ê2ª¬íÛ·£zõêª.ƒˆˆˆˆÞq L*bhhˆ–-[ªºŒ*+&&êêêª.ƒˆˆˆˆÞqœÃDDDDDD¤‘ LDDDDDDJ00)ÁE*¡mÛ¶!??`bbwwwèêê*mŸ’’‚ääd¸»»¿­‰ˆˆˆˆÞ aª„&OžŒ‚‚ 66ÖÖÖ(((PÚ~È!(,,üGÇ8~ü8¶nÝú_K%""""ªÒ8ÂT ©««cìØ±Òãk×®áäÉ“èÚµ+222°yófXXX oß¾8~ü8ÒÓÓQ\\ ¸uëÂÂÂàââWWW¤§§ãîÝ»xðà\\\P«V-!°yóf<|øîîî011Á®]»PPPèèè¨êÔ‰ˆˆˆˆ*Ž0UBBœ:u §NÂöíÛ‘‘‘{{{Ü»w~ø!Z¶l‰½{÷bùòåhܸ1 `ee…˜˜Lœ8NNNX¸p!"##qëÖ- :wîܾ¾>@&“¡Y³f077‡¡¡! „¬¬,”””ÀÓÓSÅgODDDDTy00UB%%%ˆˆˆ@DDöìÙ###T¯^hÙ²%>|ˆvíÚ!<<5‚,--'''dddÀÑÑ€&Mš @n”¥¥%6l555…ÒcCC㯷®®.rss_ÿI½ƒ8ÂôhР¢££Ñ§Oœ8qHLLDLLŒ\»>}úà·ß~ƒ­­-"##qûöí ûÍÊÊBõêÕ¡®®ŽC‡áĉHMMEóæÍßäé½3˜*¡‰'Ê=6ljժ̛7?üð`„ €Q£Fúöí‹Áƒã›o¾A›6mзo_˜››£{÷î ÇpqqAjj*®]»†-[¶àìÙ³øõ×_±cÇŽ7|vDDDDD¿¿ Tuï???©ºŒ*+00ÎÎÎhݺµªK!"""¢wÔØ±c9ÂDDDDDD¤ ‘ LDDDDDDJ00½ãîÞ½‹¨¨(éqLL ¤Çáááxôè>¬°ï‘#GPTTôÚkJMMÅÅ‹‘™™‰³gÏâþýû8þük?Ñ›ÆÀôŽ+--Åøñã¥Ç'NÄÂ… ………=z4455ñÇ(ì»téRäåå½ò±ž>}ª°‚_yâââ°{÷näääàÆHLLÄöíÛ_ù8DDDDD•S%ôóÏ?ÒÒÒ°yóf@RRbbb, mÞ¼õêÕCAA²³³¥ïU* Gqqqprr‚¶¶6š4iÈÍÍÅš5kpöìYéxBDDD`ÿþý8wîÒÒÒ)))X°`Ž?ˆˆˆÀpêÔ)dggcãÆXºt)ÒÓÓË=}}}Ô«WOz|èÐ!lÞ¼ÅÅůór½1 L•PHHîܹƒˆˆŒ?ùùùøå—_‘‘’’Ì;[¶lÁíÛ·¡®®WWWÄÆÆâÈ‘#ððð€­­-þøãÄÆÆÂÝÝ([:¾sçÎÐ××ÇáÇqìØ1ÀøñãqéÒ%dgg£ÿþ¸qãΞ=‹O?ýNNNXºt)vïÞ +++T¯^õë×Ç”)S ­­ sssLŸ>½ÜóHIIAxx8€ç!0==<À€ÞÎ…$""""ú4T])òööƱcÇpòäI|üñLj‰‰ALL ¦M›|øá‡8wîöíÛèÒ¥ bbb––†Ï?ÿuëÖÅÁƒqêÔ)L›6Mê÷Ò¥K°µµÅðáÃ?ýô€ç#Q±±± Ý:·}ûv8::"##NNNÇŠ+`dd„úõëCOO[·nÅW_}%ˆUÄÅÅ~~~Rß999¨V­Úk»fDDDDDoG˜*!///=zyyyèÓ§öîÝ ]]]ÔÕÕñôéS”””ÜÜÜpòäI\¸p­Zµ‚‡‡:„„„ØÛÛKýAOOOzl``€’’©àùmt 333ÃÑÑQnž,_¾3fÌ@pp0ºtéòÒsúûqÿþw""""¢ÊŒ©²´´ÄÅ‹aii‰: 88€ÀÀ@8;;cäÈ‘˜;w. nݺxðଭ­!“É`bb‚ììl4kÖ jj½Äööö8}ú4¢££±}ûv\»v êêê°µµEHHâââuuuôéÓ¿ÿþ;lllpøðaܼyðèÑ#!ЫW/¨©©aöìÙÈË˃¢Âs:zô(¢££T«V ;wîÄ7ÞÐU$""""úïxK^%õí·ß¢I“&ÐÓÓÃüùóÑ«W/”––¢¸¸'N„ºº:V®\‰ââbhjjbΜ9r ,Ìš5K‘ÒÖÖÆÐ¡C!“ɰk×.¬\¹;vDXXtuu±dɬX±999ððð€ Œ¡©©‰™3g¢cÇŽðññ´oßÛ·oÇ‚ °~ýz”––bíÚµÉdÒ±­­­Q£F Ô¯_={öD£F‚óçÏ#;;!!!žx•––¾Å«JDDDDôÏÈüýýEÙ‚ôöøùù!((HÕeF…>}ú@GG .,÷;›Þ5e#q­[·Vu)DDDDôŽ;v,oÉ#à‡~À½{÷’’‚;v¨º""""¢Jƒ·äjÖ¬‰1cƨº """"¢J‡#LDDDDDDJ00)ÁÀDDDDDD¤‘ LDDDDDDJp•<yòä N:¥ê2ª¬ääd8;;«º """"zÇ10©È Aƒ˜˜¨ê2^Ypp0 ===U—òJ¬­­ann®ê2ˆˆˆˆèÇÀ¤"¾¾¾ª.á•>|HNNÆ¢E‹T]Ñ[Ã9LT¡¢¢"üüóÏX°`ªU«† .¨º$""""¢·†‰*ôã?b„ PSSÔ)S°dÉ!T]Ñ[ÁÀDJ¥¦¦âÞ½{h×®@GGÄæÍ›U\ÑÛÁÀDJÍ™3ß|óܶ>øQQQxò䉊ª"""""z{˜¨\¿þú+Q«V-…ç¦OŸŽùóç« *""""¢·‹‰"88£G.÷ù¦M›BOO—.]zË•½] L¤`ñâŘ4iÔÔ”¿=¾üòK.1NDDDDUÉINNFff&+l§««‹~ýúaëÖ­o©2""""¢·‰ä”·Ðƒ2ýúõÑ#G››û†«"""""R &’ìÛ·íÛ·GÍš5_yŸiÓ¦q""""ª²˜PPP€­[·bÔ¨Qÿh?KKKhiiáÊ•+o¨2"""""Õa`"À?ü€ÿýïÉdÿx߯¾ú .|U©áæÍ›ÈÎΆƒƒÃ¿Ú_OO½{÷Fhhèk®ŒˆˆˆˆHµ˜è-ô Ì€pàÀäå彦ªˆˆˆˆˆTé=Î;£Fÿ¹¯©S§bÁ‚¯¡*""""¢ÊACÕêüùçŸX·nÖ¬Yƒ”””ÿÜŸŽŽ>>X½z5 Û¶mC¿~ý°téRé8±±±6l¦L™‚ÔÔT¹c|8–.]ŠnݺáôéÓ ÇïÙ³'¦OŸŽqãÆáäÉ“oðL‰ˆˆˆT£Aƒزe ±cÇìÚµ ééé¸q㜜œ‰ÈÈHlܸnnn333L˜0Ó§O—ëkáÂ…¨[·.Ö¯_eË–!99“'O†——œñÕW_ÁÍÍ AAAX¼x1’’’<ŸŠ±qãF\¹r;wîD\\víÚ…àà`"00ÅÅŘ4i,X€Þ½{cüøñÒq8€+V`Ô¨QoíºUv\ôá=Ñ¥K¬^½Za{×®]¥¿×®] ©©)÷÷2†††Ð××Grr2>|sssé¹_~ùË–-C»ví §§§p€––Öë9!"""¢J¦E‹¸yó&N:…Ñ£G#22QQQðòò¬]»M›6ÅùóçåÅúä“OàááØØXi[TTæÎ øøø`ÿþýhÛ¶- ´´ÇŽƒ¦¦&BCCQXXˆøøxÀèÑ£ahhˆÑ£GcÑ¢E¸~ý:†*mëß¿?Ú¶m‹Î;£nݺ¨[·.&Mš„ÂÂB¤¥¥aêÔ©èÞ½û?Z¬ªãÓ{N&“ý£öýû÷ÇÈ‘#¥|ÈÉÉÁÅ‹†Áƒ#//ïu—IDDDôNpppÀªU«Ð­[7bçÎÒ4†ÈÈH¸¹¹!,,La¿µk×âóÏ?GQQÀØØXZÀ!33¦¦¦R[5554iÒË–-òe˰iÓ&tïÞÀó9ç••…Æ£^½z¸ÿ¾\?ß&„@II ´´´`llŒ3gÎàäÉ“¸téÒºBï¦÷@5`ii©°½eË–ÐÐx>Èhii …íööö[[[èêê¢W¯^Éd8p ÔÕÕѦMT«V ®®®0`6lØ„„„ÀÎÎZZZ°°°€‘‘ N:¨S§ÎÛ8m"""¢·ÎÛÛ„½½=ÜÜÜpåÊ4mÚׯ_Ç®]»‰³gÏâ?þÛ¯iÓ¦8p tkÝàÁƒ1zôh¬_¿aaaèÙ³'455qáÂdee¡k×®øä“O°cÇŒ;Vú·nÝ:¬[·³gÏFÿþýÑ«W/¬_¿›6mÂøñã1hÐ XYY!==K—.ÅØ±cÑ­[7Èd2èééAKK +W®D@@„oýúUF2Q6§…Þ???©ºŒ*kÙ²eèÙ³'š7o®êRˆˆˆ¨’{ŸË qéÒ%888àáÇxðàlllpëÖ-èëëÃÔÔ™™™xòä ªU«†ÂÂÂÿgïÎãjÊÿ?€¿’[T²„ìÛÄŒ¥Áز–eì •%„flc± &k©!dÏ2JYB¦…k"I!QD»T·õüþè×}så^Wõz>÷ÜÏ}Ÿ÷½§sïyŸÏç|4hÈËËC@@zöì %%%DGGãêÕ«6l*Uª„üü|¸¸¸ÀÐÐÍš5ý{÷ŠÁƒ£zõê CóæÍááá>}úþTÆ* IDAT@[[‘‘S§N¡G⺠pæÌèêêŠCýnݺ%ž,¿yó&Z·nýÎK->Ö“'Oàêê ++«ÏŽõ¥YZZò&"""""YQSSƒ@[[[,Zš4i"¶ÑÑѯ[ÅŠahh(>nܸ17n,>VVVÆÔ©SÅÇúúúÐ××·iÓŠMÌUªT©©i±e*TÀ!CŠ-+*–ˆEqH‘T,˜ˆˆˆˆˆˆ¤`ÁDDDDDD$ &"""""")8郂¼zõ —.]RteVdd$ú÷ï¯è4ˆˆˆˆ¨”cÁ¤ ÷ïßÇÆF™sssE§ADDD¥@lll±ÙæH¶rssÑ·o_E§ñÉX0)ˆ¡¡!ïÃ$GöööÐÐÐPtDDDT Ô¯_ÞÞÞŠN£Ì*ºSiÅk˜ˆˆˆˆˆˆ¤`ÁDDDDDD$ &"""""")X0IÁ‚‰ˆˆˆˆˆH LDDDDDDR°`""""""’‚‘,˜ˆˆˆˆˆˆ¤`ÁDDDDDD$ &"""""")X0IÁ‚‰ˆˆˆˆˆH LDDDDDDR°`""""""’‚‘,˜ˆˆˆˆˆˆ¤`ÁDDDDDD$ &"""""")**:òÊËË úúúŠN£ÌJNNÆ÷߯è4ˆˆˆ¨ˆ‰‰áq™åææÂÐÐPÑi|2L 2`À¸¸¸(:2ËÞÞÚÚÚŠNƒˆˆˆJ† ÂÇÇGÑi”YOž<«««¢Óød’GDDDDD$ &"""""")X0IÁ‚‰ˆˆˆˆˆH LDDDDDDR°`ú >|mÛ¶E—.]ЩS'˜šš",,Ljûèèh"::ú£Öü¹©•yîîîpqq‹‹ <<<ðæÍ›÷¶‹‹Ãùóç¿Pv$o,˜¾Bééé033Cpp0®]»†áÇcÕªUÅÚˆÿ÷ññÁèѣѸqc€ ¡DÜÜÜÜbýõW©1‰ˆˆˆ¨Ð’%Kžž‰D‚|óÍ7HII‘Ú~òäÉHOOÿ¨uܼyNNNŸ›*ÉïÃT 4lØ€€€ØÚÚ")) }úôÁüùóÅëÇDHH\\\˜˜ˆéÓ§ÃÜÜ£GF¿~ýðüùs±ð:~ü8>|ˆ¿þú sæÌÁ¼yó‹š5kbãÆÐÕÕUØû%"""úÚXXX R¥J€/^ÀÛÛcÆŒAJJ öíÛ]]]Œ=W¯^Edd¤xò:66‡Bûöíadd„äädÜ»w999hÑ¢4h8tèîÞ½ ###4jÔ§OŸÆ«W¯`bb‚*Uª(ì}{˜¾Z{÷îÅ€зo_Œ1ŽŽŽ€uëÖÁÅÅ~~~¸zõ*ž>}ŠiÓ¦ÁÒÒ5‚££#N:…+W®`Æ ÈÌÌDZZ ŠõR3Íš5ÃÒ¥Káéé‰o¿ýçÏŸÇ€pèÐ!E½m"""¢¯Òµk× 777DFF¢k×®HOOÇÀѺukbåÊ•hРªV­ }}}„‡‡còäÉ000À®]»pøðaÄÇÇÃÜÜ¡¡¡¨^½º¿E‹¨W¯455aaa råÊèÝ»·ß5,˜¾Z&L€»»;<<<ðË/¿`çÎb7ðœ9s`nneee$%%‰¯ G\\&OžŒ)S¦ Aƒxõê€ÂI???ôèÑгgOøúúÊõ½•6žžžâ±™ŠŠ jÖ¬‰3gΠeË–HIIA‡àéé‰úõë£jÕªøæ›opâÄ tìØ èܹ3Nž< ¨Y³&æÏŸ 1~Ë–-¡«« DDD`Ñ¢E055EóæÍß{-;ɇä}¥*V¬uuuÀ¨Q£0wî\¨««£m۶صkTTTpøða´oß<4oÞÍš5ÃÞ½{¡¤¤„]»v¡aÆ v!¿K§NŠ:àÎ;èØ±£üß Q)²zõjñxj̘1Gjj*ttt ©© °µµ-öšÔÔTèééASSšššèÙ³' M›6Rד——‡ þíÓ¨R¥ÊG_E²Å¦R ~ýú¸|ù2²²²0qâDôéÓðññAµjÕÄvªªª044DÿþýajjŠW¯^AIIIj\5558::bذa8~ü8&Mš[[[˜™™}‰·EDDDT*5hЗ/_ÆÐ¡C===ÄÇÇ—˜oذað÷÷G«V­€{÷î½7nRRÔÔÔP·n]¸¹¹áúõë¸ví:wî,Ï·Cÿ=L_¡3f{\­Z5deeLLL0räH$''£nݺ€iÓ¦‰mûí7XZZ"//ZZZ€‹/¾s=žžžHHH€ŽŽΞ=‹ØØXÔ¯__o‰ˆˆˆ¨Ôš9s&TTTÄÇ?ýô^¼x]]]8::ÂÁÁA¼6(œ  QPP€•+W¢sçΘ4i’’’0lذëh×®vïÞ›7oÂÙÙÎÎÎÀ‰'Šõ8Ñ—Ç‚©*:ó ÍÛãaßGCC£X[KDDDD%Íœ9³Øã.]ºˆÿoß¾}‰éÀ‹ &èÝ»w±‰ttt0tèÐëÐÔÔÄÁƒÅÇ ,øì¼I6X®IÁ‚‰ˆˆˆˆˆH LDDDDDDR°`ú ÂÅÅEü·ÿþޱoß>ÄÇÇ[æîîŽððp©¯9sæÌÆ-((€——×GçCDDDTDFFâúõëâã‹/âéÓ§âãƒ"99%^û!ÇbÿåÍ›7ðññA~~>Ο?œœx{{vÜòŒÓWh÷îÝ …D"D"AvvöGǰ°°À®]»Älj‰‰;vl‰é.ßvëÖ­ÿŒ›ŸŸ5kÖ|t>DDDDåAbb"–/_.>ž4i’xLöìÙ3¬\¹‰D¼æÛV¯^ýQëŠŽŽ†µµu±e¯^½‚££# pûömddd`Ó¦MŸðN¨ ¦¯Ô!C`ii KKKL›6 ¹¹¹8sæ nݺ…ÐÐP¸»»ãñãÇprrBvv6‚‚‚°iÓ&$''Zµj1ÞÉ“'ѵkWñqTT6lØ€ýû÷‹S–·hÑ@aOT`` V­ZUì ÉÛ>|ˆõë×#22R|ͳgϰyóf$%%<<<ðúõk8::¾óKˆˆˆèk—››‹C‡ ÅÖ­[ñúõk9|Je ¦¯”§§'œœœàää„àà`dggÃÒÒîîî¨]»6,Xooo¨¨¨ ^½zxþü9’““±mÛ6€²²2Z¶l)Þ íÔ©S>|8 !!cÇŽE÷îÝñàÁñ¬‡`ùòå8wîúöí sssäææËíÖ­[ðöö†¾¾¾x¨9sæÀÆÆ 4@ïÞ½‘™™‰]»vÁÂÂM›6…¥¥å;»ž‰ˆˆˆ¾f***°±±D"‹‹‹8Ý·ƒƒòòò‹;wbãÆÈÏÏ‡ŠŠ Ú´iƒ{÷îáÂ… 1bÔÕÕ‘˜˜(Lñññ8rä$ ºwï]]]8;;‹'˜ÇŽ‹ôôt„……a̘1HLLÄ©S§`mmN:ÁÊÊ ÁÁÁhÙ²%tttP«V­yçææbëÖ­???œ9s044„ _î,x¦¯”ªª*ÔÕÕ+n&A°bÅ (++CCCÓ§OGvv6víÚ…Q£F¡Y³fؾ}»cìØ±8vìfÏž hjj")) 5kÖÄÙ³gŠ›7o¢yóæÅÖ——‡%K– R¥JÐÓÓÛ7o ©©)>¯«« KKKÀ_ýH$°¶¶FÕªU*Þ,wúôéèׯTUUáææ†nݺÉïC#"""’ƒ¾}û" áááøá‡ðàÁÜ¿;vD»ví`dd„:uêÀÊÊ Ð§OââÅ‹8xð ž>}Š‹/"((‹/Gùøø`øðá3f † †@"‘ 99?ÿü3ÀÙÙpôèQtéÒ h×®NŸ> SSSÔªUëÓÛj×®%K–¼½½qýúutêÔI^W™Ã¦¯”±±1ÌÍÍann@ëÖ­¡¬¬  ðæµEŠ «ÿÕ³gOøùùáäÉ“9r¤¸<$$#GŽÄ«W¯Ä¢·ihh R¥J »sÿW:uJ,«X±¢xì*Uª %%P¹råˈˆˆˆJ“AƒÁÓÓ•*UBß¾}áìì }}}())A¨ªª"--Mì¹éÝ»7¼½½‘žžÃÝ݉¤ØqTNNŽx¬T±bE¨««#++K<Þ ¡ 55ºººÐÔÔ„±±1LLL>8ÿ¢ãº¢xŸõy”7,˜Ê° * M›6°³³Ã°aÃÄå?F=0xð`üóÏ?HMMýÏXAAAð÷÷—ú|ff&lmmqçÎ9rC† PØ]ýàÁØÙÙ‰C‰ˆˆˆJ“=zˆ=<}úôÁ¶mÛ0hÐ ÀÊ•+1yòdtíÚ;wîtèЗ.]B=ß}÷®\¹Rb¤Mß¾}qüøqܺu ŽŽŽxýú5455¡¦¦†‹/Â××7oÞ„²²2† ´mÛ¯kJLLüÏü###qìØ1âêÕ«èÔ©._¾ŒÀÀ@Y~Le–²ÁŸ?þø£¢ó(wÜÝÝ¥JJJhÙ²e±ap@ᙇï¾ûN|Ü¡C())¡B… h×®”””PµjUqò4nÜ 4À?ü °w¨W¯^¸ví.^¼ ¡K—.¨V­:tè Æ.òí·ß"..999hÒ¤ ”””о}ûby¸ººb„ 8xð V­Z…&MšàÈ‘#˜>}:öïßQ£FáÇ|g•<£Y³f¨Y³æY•^ï;. ¯ /ê)jÔ¨TTT0nÜ8‚€GÁÜÜ?üð®^½ŠÎ;£B… ¨U« ())¡nݺ022Bݺuöô´mÛ=zôÀ®]»Ð³gOôéÓmÚ´A¯^½pøðahhh ;;Ó¦MC‡ ‘Hàää„!C†ÀØØÕ«WÇ¥K—P­Z54iÒDÌ·R¥JhÓ¦xŒøí·ß.\¸;;;hjjâñãÇ€† Êñ“-”ššŠ°°0tïÞ]îë’µÓ§OCiÆŒ‚“““¢s)wÌÍÍáââ¢è4d¦]»v¸}ûv±eC† ÁöíÛQ¿~ý/ž½½= €V­Z}ñuQéòµ—5 sæÌAJJ <ˆ'N(:¥ÏòäɸººŠ×x•&–––’G²affVbÙ°aÃPµjUdCDDDTzmÞ¼¡¡¡ÈÈÈÀþýûN¹ÇYòH&-ZTb™………2!"""*ÝêÕ«‡9sæ(: úìa""""""’‚‘,˜ˆˆˆˆˆˆ¤`ÁDDDDDD$ &"""""")8Kž‚DEEÁÒÒRÑi|°çÏŸ£nݺ_ìÆ³Ÿ+22ƒVtDDDTJ¬[·NÑ)|²ììl¨©©): ©RRR ©©©è4> & Pt l÷îݸsç²³³±uëV(+++:%""""™±±±Á›7oÆ'yýú5ÌÌÌpèÐ!hhh(:©X0Q™µk×.H$888àÊ•+˜9s&‹&"""*SjÖ¬‰š5k*:O²xñb8::âàÁƒØ°aƒ¢Ó)“x IµcÇH$Ìž=н{wŒ?3gÎD~~¾‚³#"""*ßnß¾5jÀÐÐZZZ QtJe &z§íÛ·#''G,–аh""""RLåX«V­`jjŠeË–É$ÞßÿÜÜ\Œ;V&ñˆˆˆˆ¨µµ5þøãzÍü¿þúKN•,˜Ê9333´jÕ곋&777ܼyÖÖÖ2ÊŒˆˆˆˆàÖ­[ÐÖÖ–:у4õë×G½zõpõêU9eV>°`"±hZ¾|ù'½ÞÝÝW¯^å–DDDD2ö¡=H3wî\8::rˆÏÀ‚‰M-[¶ÄŠ+>êu§NB`` Ö­['§ÌˆˆˆˆÊ¯={öÀÌÌì?'zFEE“'O†“““Œ3+?X0‘ÈÌÌ -Z´ÀŸþùAí=<}†„„eV¾°`¢bÌÌÌмyóÿ,šNŸ> ___ØØØ|™ÄˆˆˆˆÊ™O™èAš¥K—rˆOTQÑ Ð×ÇÌÌ ‡ÂÊ•+ß9DïÌ™3¸téìììQÙwóæM„††ÂÇÇç?Ûfee¡R¥JÿÙîÁƒ D×®]e‘b¹¡4cÆ cé]:„G› âìÙ³8þ<ìíí¡¤¤¤À숈ˆˆÊ®˜˜¼xñâƒÚ®_¿‹/þ ¶µk×FãÆ?'µrÅÒÒ’=L$]QOÓêÕ«±lÙ2œ;wçÎÃæÍ›Y,ÉQÆ ?xñÚµk£K—.rΨübÁDïUT4Mš4 ÕªUÖ-[X,Q¹ÁIè?™™™¡zõê,–ˆˆˆˆ¨ÜaÁD$''‡Å•;,˜ˆˆˆˆˆˆ¤`ÁDDDDDD$ &"""""")X0IÁ‚‰ˆˆˆˆˆH LDDDDDDR°`""""""’‚‘,˜ˆˆˆˆˆˆ¤`ÁDDDDDD$ &"""""")X0IQQÑ ”UáááØ°aÔÕÕŠL¼|ù–––ŠNCîòóóQPPE§BŸ!!!:::ŠNƒ>CFFªT©¢è4è#åää@UUUÑi”9‚  k×®˜4i’¢Sùh+V¬ÀË—/F™× AE§P¦±`’“ׯ_£K—.å¢È(K‚ƒƒsssE§BŸÁÒÒNNNŠNƒ>·aéÄí&‰VVV¥²`Љ‰‹‹‹¢Ó ú,’GDDDDD$ &"""""")X0IÁ‚‰ˆˆˆˆˆH LDDDDDDR°`""""""’‚ÉE^^nݺ…¨¨(E§BDDôÉx&""’¹””ôïßYYY¨Y³&òòòðÏ?ÿ@MMí?_›——‡ŒŒ ‚%%¥/-‘tìa"""™óðð@ãÆqçÎøùù¡Aƒ8|øð{_³wï^têÔ ­[·†››Zµj…îÝ»#88ø eMDDT{˜ˆˆHæêÔ©ƒ… BYYаaC<þüm³²²0|øp\½ziiiâòÈÈHDFFbøðá=z4¿HîDDDocÁDDD2gll,þßÅÅ'OžÄ¥K—ÞÙÖÒÒÞÞÞ(((xçó/_¾ÄðÝwßaÚ´irÉ—ˆˆHÉ#""¹HLLD¿~ýpìØ1øùùAOO¯D›k×®áܹsR‹¥"¯_¿ÆÚµk‘šš*¯t‰ˆˆÞ‰É\tt4úõ뇙3gâìÙ³ÐÕÕ}g»Ý»w#!!áƒbÆÆÆâòå˲L“ˆˆè?±`"""™;tèÚ·oMMMøúúÂ××>,Ñ.""âƒcæææâüùó²L“ˆˆè?ñ&""’¹7oÞ ::þù§¸lôèј5kV±vùùù7;;[é}0LDD$sëÖ­û vÍ›7G@@ÀµUVVÆ€>'-""¢Æ!yDD¤0¦¦¦ÐÒÒú ¶õêÕC=äœQq,˜ˆˆHaú÷ïnݺAIIé½íªT©‚©S§¢V­Z_(3""¢B,˜ˆˆH¡öíÛ‡.]º@]]ýÏkjjbðàÁX¶lÙÎŒˆˆ¨]ÃE§ñÁ^¼x—/_ÂÉÉIÑ©|°fÍš¡_¿~2éááçÏŸË4¦>‰DÑ©|”)S¦@UUU.±SSSáêê*—ØòòâÅ‹RµïÀàÁƒÑ A™ÅKOOÇ¡C‡dOÞ&L˜€êÕ«#44YYYH$¨\¹2*W® ccc`ÇŽŠN³„ Q£Fr‰ýüùsxxxÈ%¶¼„‡‡—º}ÏÀÀ2¹wï^™NP’ŸŸ„„„R÷Ù…ÀÈ:ïš5kbôèÑ2imm¨¨(™Æ¤%''cÇŽ¨[·®¢Sù$¥¦`ò÷÷‡¦¦&Z¶l©èTʬ­[·Ê¼`rssÃܹseSž:wî AP¡Béé|ݸq#Æ'·‚)>>=‚™™™\âËC—.]ÂGñññÁ½{÷dZ0%%%áþýû˜>^.7C®^½:·›U®\YÑ)P9SzN£}a,˜ˆˆˆˆˆˆ¤`ÁDDDDDD$ &"""""")JÕ¤ŠôôéSÀÄÄD\–––777Œ3UªTù¬ø/^D\\ E‹øá‡þóFŽôabbb B±eÚÚÚ¨V­Ú½>33¹¹¹¨Zµ*ž={PQQA½zõdž+½[XX‚ƒƒÑ½{w´jÕJ.ë(ÚŸÂÉJúôéƒÚµkËe]域ôõõQ³fMqÙ7 §§÷ÞÑ ‚€}ûö(œ”¦[·nhÒ¤‰Üó%""z{˜>ÐÍ›71~üxÜ¿_\vüøqL:IIIŸßÖÖ111H$Ø¿?† öÙ1©Ðï¿ÿ+++tíÚ¿üò ¬¬¬üÁ¯÷òòÂæÍ›ñòåK|ÿý÷°²²Â/¿ü‚~ø7oÞ”cæýõìíí¡¥¥…7båÊ•€]»váÚµkR_·lÙ2ÄÇÇðzâââ`kk ‰D‚çÏŸcàÀðööþìü ضm?~\lÙ£G––öÎöööö CAA-Z‰D‚””XXX”ÊûÐ(Úýû÷ñÛo¿;qdccƒääd8::"55µX{”ˆãááéÓ§cÉ’%¸}û6€Â߯sçÎ}T>)))077‡¹¹9¦M›†#GŽ”ê醿¤ÄÄD4oÞÑÑÑâ²Õ«WÃÏÏvvv%fü»~ý:Ö®][lÙÈ‘#Ñ¥K|óÍ7èСºté‚mÛ¶½s}oÿV†„„ OŸ>øþûï1tèP\¹r@áwgÑÉÄAƒÉä}–÷ï߇‹‹K±øäxYYY8qâöìÙƒØØØ÷¶}óæ |||>y]åM¹-˜BCCqëÖ-…÷ zðààСCÅn’   @Ïž=qôèQ1†»»»xßxðàÖ®]+¶òä nܸ­[·bóæÍHKKCVV<==Å×¼oܸq°´´„““îܹƒœœÀÇÇ«W¯Æ?ÿü#Æ ÅñãÇñæÍy|<_µØØX¤§§(Ü>EÓúÞ¿qqqâAXbb"pøða¸ºº¢]»v°µµ…««+ú÷ï ðEÛ¾Hvv¶ÔB¨E‹puuÅ©S§°dÉ’bo?FHH n§‚‚‚bEvy'‚xŸ‹'Ožˆÿ÷îÝÃõë×áââ‚üü|‚€ýû÷C>|ööö9r$vî܉ÌÌL$$$àĉØ»w/rrrðâÅ lÙ²N„sx IDATNNHJJBdd$Μ9ƒýû÷ãùóçâAÄ›7opæÌqk×®ÅÑ£G‘ŸŸÐÓÓƒ¥¥%,X+++œ>}@áßÒŽ;°e˼xñ@áþŸšš*öJ•'®®®H$ÈÈÈ€££# !!gΜ»»;'Ož”Zéêê¢jÕªÈÉÉÁ±cǰvíZqvwwÇîÝ»NÏlii‰9sæÀÎΧNPx#Ï¢v™™™€ƒŠß‡Bnn®\?‡Ò¢hÿpvv—]¸pðññ?¿"<ÀÇ‹- ÄÞ½{ñçŸbôèј1cÒÓÓ¡££óÑ÷ËÌÌÄÝ»wÅ“OçÏŸÇöíÛ?ý –#xóæ ~þùgqYJJ 233‘ššŠ¬¬,ñ7(ü=KNN.ãäÉ“†¡¡!Ö¬Yƒàà`üòË/ï\߯¿þ  ðFØãÇÇï¿ÿŽëׯÃÁÁ ,@AA.^¼ˆ³gÏ@±Õ}¯’tùùùH$xúô)6l؉DòQ·*HLLÄï¿ÿ p”Ä÷ß///äååa̘1ðòòüöÛoHII)ñÚÍ›7ËîÍ”qå¶`ÊÉɽ½=`áÂ…Ø»w/$ lmmÑ´iSüñLj‰‰ÁìÙ³Å! †††ðóóPx ]¡Bhkk(ì…X¾|9:uê„eË–áòå˸wï&OžŒ&Mš )) ¶¶¶HOO/ö£egg'þßÕÕNNN°´´ÄСC¡ªª ggg?~ýû÷ÇêÕ«ƒððp˜™™!--­TÝ PVÜÝÝáââ‚ÜÜ\àôéÓHHHÀôéÓ‘333äååÁÔÔ999RãlÛ¶ pppÀرc 0ÇG=Ä¿"YYYˆˆˆ@HHÜÜÜн{wÀäÉ“±uëVKEº|ù2€ß~û 8sæ îÝ»mmmÌž=AAAðôôDõêÕßãÔ©Sxüø1vìØ{÷î¡{÷îøå—_ ¡¡:uê@__@áA€““6oÞŒ… bÖ¬Y ÷¹ÇCMM }ûöP8loÙ²e8qâîß¿•/ó”'NÄÖ­[Å‚ÿmW®\ÁرcáèèX¬§'''óæÍCLL üüüбcGèêê¢C‡ppp@rr2ž?އâñãÇØºu+¬­­1þ|ܺu ³gÏÆÔ©S‘››‹+W®ÀÓÓS|\©R%´jÕ í۷Lj#!æ2eÊŒ=Z<û}ýúuŒ?ãÆOtFEEaÖ¬Y;vl¹ëéÿöÛoѨQ£wöD;v cÆŒÁ€&.ÏÈÈÀСCźï2zôh„‡‡#&&£F‚››>|ˆ+VÀÍÍ íÛ·O66nÜÎÎÎHJJÂöíÛáì쌧OŸŠ±¬­­1fÌôîÝû£Ft”vo#ŽŽŽÆ±cÇ+¿qãöîÝ[줠¾¾>,--abb‚úõëÃÒÒÓ¦M¼~ý[¶lÁáÇ‘——‡/^ˆ'ñž?Ž .àï¿ÿÆÙ³gqóæM¬[·¦¦¦pvvÆôéÓqüøqüóÏ?ǹsçpàÀ<þׯ_‡‡‡G‰ŠÞ¯ÜL CTTŒŒŒ„àà`ôíÛjjjpppÀ?ü€™3gŠ×1T¨Púúú¸{÷.ÜÜÜ0räH1ÞÑ£Gѹsg$$$ cÇŽâš¡¡!ˆ‰'–’ò¿ÔÔÔ ®®ŽÆãöíÛHLLÄ”)S0wî\DFFâÑ£Gb7¼¾¾>,,,ÊåÁ AƒpéÒ%ܸqýúõƒ¯¯/üüü0pà@´k×;wFïÞ½1uêÔ÷^gtøðaœ8qÛ¶mC^^¢££±ÿ~ØÛÛcݺu5j”xÖ¬Hll,Ö­[ܹs•*UL›6 6l@¿~ýŠý µmÛ¶Ø™@___\¿~ÇÇÍ›7qãÆ ôìÙ³fÍ‚ŸŸ¼¼¼0wî\ÀŠ+püøq(++cÊ”)011AåÊ•Q¯^=´nÝ***≌àà`DEE‰S›6mÞ™ƒ²²2ž={† .ÀÊÊ P¸«««CKK õêÕ{£¼½½Q¹re ** @áãäÉ“ñý÷ßËû#ûêíƒþþþ˜>}:|||àëë‹Áƒ£GÐÕÕŬY³àààðŸ±*Uª„S§N!99çÏŸGµjÕP·n]qÛm èëëãØ±cÈÍÍÅãÇ1þ|Œ?zzzˆˆˆ€‰‰ ž={†;v`ÅŠòþJ•ªU«bíÚµ˜={v‰ç|||àì쌈ˆ?~@a±dbb‚nݺ¡aƘ4iбcG,]ºšššhذ!ž?ލ¨(¤¥¥aëÖ­˜3gêÔ©ƒE‹ÁÆÆ‚ ±±±˜?>–-[œœœðúõk¼~ý›6mÂöíÛ‘šš*õZõììl¡iÓ¦¸{÷./^Œ:uê`ûöí¸sçfÍš…  E‹ÐÒÒ‚®®.®\¹‚Áƒ‹1êׯ 6@GGšššhÓ¦ =z„ñãÇ#..N<~¡Sn &%%%|ûí·Ø¹s'Œ¡ªª qümAAÔÔÔJŒíþé§ŸpôèQœ:u Ç—§¦¦¢nݺÐÔÔDŸ>}0qâD@:u¤æP4™@‘#FÀÜÜ‹/F»vípùòe¬_¿ýõjÕª…!C†ˆm¥–Mš4ÁË—/áãã#žÉôññ¿(Œ÷þ0äææ"??ÊÊÊ€æÍ›#,, hÚ´i±eokÞ¼¹8Îøòå˰²²8;;ÃÔÔPWWÛ÷ë×O¦ï½,4h.\¸€¼¼<±7¯víÚPUU… PQQAzz: žžŽÅ‹£iÓ¦˜={6SìäÃË—/add„ˆˆˆÿ,N‹öguuuÜ¿M›6ŨQ£°k×.…?0æææ˜G•ˆ£¤¤„Õ«WÃÔÔ¿ýö444>öí•j €¯¯/nÞ¼‰¡C‡âÖ­[¸uëzôè9sæàŸþÁÅ‹ßyò¢ˆ··76lˆ×¯_£M›68{ö¬XŒ9†††hݺ5Z¶l ---Ô­[™™™¨Q£F‰XoLдiSüüóÏÅŽUè¿•Û‚ (EªV­Š˜˜$%%aË–-Åž»|ù2¼¼¼°oß>œ?½zõBXXfΜ‰FáÊ•+% ¸òªk׮ػw/ºtéܸqß}÷²³³±hÑ"xzzJ“ ž…ÓÖÖÆ“'O••???ÂÈÈžžžžžžâðƒ"âc4jÔIIIxøð!Ž=ŠQ£F»€3–Ô¾}{\ºt íÚµC¯^½°cDZ‡gÓ¦M4hFŽ T«V ¾¾¾°±±ATTΟ? °hVRRBbb"^¾|‰† ÂÔÔ¾¾¾HKK/nOJJ‚ŽŽBCC‘œœŒ;vž={†áÇ£OŸ>˜5k–x ‘///œ;w¿ýöú÷ïÔÔTÔ¨Qæææ¸zõ*’’’ÊýÁx¥J•PµjU¨ªª¢qãÆŒ½½½!‘HÄÞ†"ÁÁÁðòò‚——W± .ĵk×0oÞ<4hÐ@¼.³è;433S|ݺuë §§---Ô¬Y¸zõ*BBB```€½{÷B__³gÏÆòåË¿à'RzØÛÛcùòåÅ®-{ùò%€Â¿ÿÆæÏŸÍ›7‹u“'OFhh(jÖ¬‰I“&aÞ¼y%†w½ý}÷®ï¾·O ª©©¡Q£FhÔ¨ÌÌÌôôtŒ;ÆÆÆ8{ö¬8“iŸ>}påÊÔ¨QFFFÐÒÒÂwß};;;ØÙÙáÈ‘#bÞåÉðáÃ!‘HŠMN  ð:´:ÌÍͱoß>lÙ²¯^½’/** Ïž=C||<îÝ»Wì9ccc\¸pA|½D"ÁºuëÞ9Š£è:ª€€Lž<‹/þì÷Zš <çÏŸGAAŒqôèQèêêBEE¥ÄIAiRSSQ³fMhjj¢fÍšâµFPUU}ç±`ûöí‹]#ŸŽ;–˜%¸¼žèû\åzZqccc¬^½ÚÚÚ;v,ôôô ¢¢‚ÐÐP¬^½µk׆££#ÂÃÃѺukhii¡B… X´htuu&&&¨^½:&Nœˆ5j`éÒ¥066FïÞ½%~ákiiaäÈ‘¨\¹2þøãÌ™3C† Á¢E‹ãÇÇÇ mmmøûûCSS«V­Â¦M› ¯¯M›6áÌ™3øùçŸQµjU…}n_ƒÑ£GC"‘@UUcÇŽÏ.ž‚ ÀÑÑùùù8wî6mÚ„¥K—ÂÀÀ‡ 2ëׯÇðáÃÑ»wo,^¼S§NÅóçÏqëÖ-Œ?Û¶mƒ³³3† †9sæÀÜÜ)))hР؛ûÍ7ß`Á‚ÈËËàAƒ %%% 8FFFPVVÆ„ °`ÁLš4 &&&ð÷÷Çĉ‹õ6•7E|…3¶lÙ@ádëׯ‡††>|ˆ¤¤$Œ3Fœ(üa722‚žž,XGGGøùùÁÊÊ µkׯ¨Q£ààà€ÁƒcúôéâëZ·n-Žáß³gvíÚ…Ë—/ãĉ ‡-^¼+VDRR²³³¹þ,\¸PÎ8ùôéS|8ôôôžž ¨««£zõê°±±GÝTªT G…——ÒÓÓ1f̘/öy| :v숱cÇbÒ¤IèÕ«ÌÍÍÅáÉ7nÄ!C••…M›6‰Ç€ÿkРAؼy3f̘Àßß}ûö…¥¥%<==1wî\ܽ{ÚÚÚâLÍEÃË•••add[[[L™2E} 3f¥ÁöíÛ…E§Q¦Éão¡´ü}•fsçÎRRRäÿþýû‚Üâ“ ¸¹¹ çΓiÌèèhaíÚµ2IÅ;wNpss“[|áÈ‘#Ÿ'%%Exøða±eþþþ‚D"‰D";vLHHHAâââ„øøxA!99Y¸{÷® ‚ðàÁÁÙÙYpwwÒÒÒA„„„áéÓ§BzzºYl™ BLLŒ˜˜(¼|ùRˆA²³³ÁÇÇGðõõ×+‚ððáCaÿþýBjjªàíí-„„„)))‚«««pêÔ)áÍ›7Å>!;;û“?›/^+V¬øä×K3iÒ$™ÇüP B^^žLb½½]‹Wnn.bbb¸å(&&Ý»w—iÌÜÜ\<}ú”ÛMŽbccѶm[¹ÅÏÎÎÆÃ‡åº—wYYY¨^½ºÌã&%%qß“£””™ÇlÞ¼9Ö­['ó¸TÈÞÞ^.ûÚ—Rj &,_¾íÚµSt*e–¥¥¥Ìc¶lٲؔ—${¿þú+TTTä¿J•*;vl±©QI¶ÜÝÝ¡®®.Ó˜•+WƨQ£Ä›ƒ’ìyyyA"‘È-~50}útŒ7Nnë(ïâããåòe``À&9’Çñ €Óï“ìÈú7îKã5LDDDDDDR°`""""""’‚‘,˜ˆˆˆˆˆˆ¤`ÁDDDDDD$ &"""""")X0IÁ‚‰ˆˆˆˆˆH LDDDDDDR°`""""""’‚‘,˜ˆˆˆˆˆˆ¤`ÁDDDDDD$ &"""""")X0IÁ‚‰ˆˆˆˆˆH LDDDDDDR°`""""""’¢¢¢øPxóæ RSSJ™UPP ó˜ùùùÜfr–““#×ø‚ @"‘p;ÊQff&ÔÔÔd“ÛMþ222P¡‚üÎ; ‚€ÌÌLnC9zýúµ\~ûrss¹Ýä(??_æ1ãââ`aa!ó¸T(44C‡UtŸ¬ÔL?†­­-ÔÕÕJ™U£F ™Ç F·nÝd—þåË—Ë-~rr2ìííqàÀ¹­£¼KOOÇÒ¥Ke355Û·oÇñãÇe—þõæÍÌ›7Onñãââ°|ùrØÚÚÊmå]^^:vì(ó¸/^äoŸÉãDaÕªUÑ¥K™Ç¥B©©©¨X±Ô”%”šÌ›5k†¿ÿþíÚµSt*e–¥¥¥ÌcvëÖ NNN2Kÿúõ×_åz"A[[VVVøõ×_å¶ŽòÎÝÝ]æÛPSSóæÍƒ•••LãÒ¿¼¼¼ ‘Hä¿~ýú°±±Á¸qãä¶Žò.>>^.¿Qƒ ‚‹‹‹ÌãR!y¯T¯^=Lr”˜˜UUUE§ñÉx ‘,˜ˆˆˆˆˆˆ¤`ÁDDDDDD$ &"""""")JͤDDDDD_Ú‹/  prMMÍÿ|Í«W¯P«V-y§F_H™(˜öîÝ ???€ºº:úôéƒ#F@EEåí###áàà€­[·~ÔzrrrJõ _›àÒ¥K ·[¯^½0bÄ©÷£yôè6mÚ„-[¶|Ô½O¸ÝäËËË ®®®€Š+¢k×®=z4444ÞÙ>11ÖÖÖ°²²BíÚµ?x=ÜŽ²5bÄÄÅÅ¡B… PRR‚¡¡!Ö¬Y#ußÚµk‚‚‚°gÏž^Çëׯ‡Ö­[Ë*mz‹µµ5¢¢¢Ä 0”Ú>((^^^X¹rå¯Cäçç—ê逿6kÖ¬Add$€ÂífllŒAƒImÏí¦xƒ B“&M ¢¢‚¤¤$äååáܹsRg7µ°°@5`ccóÁ눉‰Á½{÷Þû·@ŠS&†äÀÐÐVVV°°°ÀpôèQ©í·mÛ†ž={~Ô:²³³addô¹©Ò[‚ƒƒÑµkWXYYaÚ´i8vì<(µýÎ;Ñ¥K—*–A@¯^½d-I† ÀÊÊ sæÌÁ7°aéíÿþûohiiAGGç£Öó±û,½ß‹/àéé‰àà`øûû#<<.\Ÿÿß›yîÛ·›7o–újwîÜÁ¬Y³>7UzËîÝ»áêꊋ/¢I“&8}ú´øÜ;wðâÅ ÀË—/qíÚ5LŸ>]|þÚµkHIIPxò/..¯^½Brr²ØæÊ•+puuEZZ€Â“‹<øo>@™(˜@OO­Zµ‚FÀ½{÷0cÆ ˜ššâÞ½{¸}û6NŸ>}ûö(,¶ÌÌÌ`aaøøx…_NÇÇ‘#GÄø666Ç‘#Gðúõklܸ£FÂßÿýåßlR¿~}´jÕ ;vÄO?ý„Û·o"""ðóÏ?ÃÄÄwîÜAXXÜÜÜpàÀäçç#88&LÀ”)S p»µ)bkk‹ÈÈH8pééé°µµÅÈ‘#qìØ1‚ ÷\Õ©S­ZµÂ·ß~‹I“&‰û_ll,-Z„Q£FÁÇǯ^½‚““¼¼¼ðòåK„‡‡‹ûgXX€ÂíPìfû÷ïÇÇakk‹œœìÚµ LJ³³³\n`XÞ¨¨¨ nݺÈÈÈPx|èСèÒ¥ nܸOOODDD`õêÕÈÍÍżyóðã?¢gÏžˆE\\&L˜€‰'Šû0P¸ÿ?W®\¿¿? ccã÷Ôôqš5k†V­Z¡[·n022÷½+W®ÀÔÔxùò%Μ9ƒñ·ïÔ©S1bæÏŸ‰D‚””lÙ²666 ãÛÚÚââÅ‹ð÷÷ÇóçÏñûï¿ÃÌÌLÕAŸ¦iÓ¦âv366~çv‹ÇÙ³gqóæMìß¿@áv9r$æÍ›‡¬¬,¤¦¦bóæÍ°µµE`` ßÖÖÞÞÞðóóË/°dɘ™™Á××Wo·LIIIÁ³gÏШQ#`Ĉ8|ø0LLLpøða>[·nÅ´iÓ`oo¾[͘1C( ¶oß.„„„¼ó¹©S§ S§NÖ®]+,Y²DèׯŸðèÑ#A¡GBll¬!´iÓæÿØ»ï¸\UëH IDAT®ªÿà/–¢‚ #EÍ4L2Í,µàFÍQššæ¹gî-j‰âÌ,×/såJBL7Ce( 2EeÏÏû÷î×Oð)M×ó>÷~î8çî½çý¹çœ+""&L???INN–Î;KRR’899IÏž=EDäÍ7ß”]»vIvv¶²ÌÌLéÔ©“ˆˆ¬^½Z¶oß.Ož<kkkñ÷÷/Áœ¿:%ñ¿ðOÛœùä9vì˜Ìœ9SRSSeÊ”)òûï¿—D¶_©S§NɹsçŠu›÷îÝ“uëÖiüþ“O>KKKéÑ£‡´jÕJúõë'*•JÂÃÃeäÈ‘""¥œ?íÚµ•J%çΓµk׊ˆˆ««« >\"##E___’’’ÔöqãÆ ™:uªˆˆôìÙS=z$*•Jºví*ñññÅšßÒpîÜ99uêT‰mßÅÅE>¬ñûöíÛËÂ… eݺu2{öléÛ·¯$%%É“'OÄÒÒR?~,.\kkkÉ?ß²³³åæÍ›2tèPIKK“íÛ·ËÌ™3åáÇ¢¯¯/ýõ—äåå)ûðõõ•I“&‰ˆÈ°aÃÄÉÉI>|(}ô‘¤¦¦–XÞ_•˜˜Y¾|y±o·à*ÊgŸ}Vd¹=}úT:wî,?–‹/J¯^½DD¤cÇŽ’••%~~~2dÈIKK“;vÈŒ3$&&FôõõÅÙÙY­ÜnÞ¼©Ü‡./^”˜˜iÓ¦¤¤¤{~_µW]_iÙ²¥|úé§Ò©S'155•H^^žxxxÈÌ™3%&&F‚‚‚¤M›6"ò¿ûÕîÝ»eÛ¶m#/^”ÁƒKhh¨˜˜˜Hnn®Ú>.]º$³gÏ‘üs» <  ÷îÝ+öü¾jëÖ­+³ù˜8q¢”›Æ­¦¦¦hÙ²%ÒÓÓáææ†¸¸8$''#>>kÖ¬$%%!!!AYçìÙ³ÈÈÈÀ¢E‹þþþCCCŒ3FcÛ_GGG\¸pUªTÁ°aÃ`oo÷Þ{¯„sX>5iÒ-[¶DFF<<<‹ÜÜ\<|øk×®¤¤¤(O‘€ü㟞žŽÅ‹îܹ¨R¥ Ư±ŸËÙ³gqæÌbذappp@ëÖ­K8‡Cƒ вeKäææÂÛÛaaa°°°€¯¯¯Ò$+;;·oßVÖñóóC||:vì´nÝaaaøþûšŠÓ§O«­Óºuk4oÞcÇŽEdd¤k p@GG†††ÈÌÌ„¾¾>nݺ¥dôr,--•룷·7¼½½all kkkÌ›7"‚o¾ùFmcccŒ5 ýúõCff&îß¿ ¿i­&ZZZÐÓÓC^^tttxï{I;wFƒ ä—›———R'ùî»ïüïÞV  Üú÷ïÌÌLÜ»wÀ‹•¯™Å£yóæðòòB÷îÝáéé‰+V ""§NR[®G¸télllàêêªôsÒÒÒ*r»*• •*UB­Zµccc¸»»cÉ’%%ž'úgå&`z–‰‰ ~ÿýwÌŸ?OŸ>ÅÚµkQ½zu¢}ûöÊr:tÀwß}‡êÕ«#** ÆÆÆjß?K[[‘‘‘ǰaÃðí·ßâóÏ?Çþýûáääôª²V®™˜˜`Ïž=X¶lrrr°jÕ*ÃÛÛ[­\Ú¶m‹Ù³g£víÚˆ‹‹CµjÕ4–›––¢££q÷î] :Ó¦MÃÀñóÏ?ãìÙ³¯*kЉ‰ œœœ «« sss̘1mÛ¶Å¡C‡pñâEµåRRR`ccƒš5k" @c9@FFnܸ/¿ü3fÌ@TTvíÚ¥6ýw 6„££#†Š7bðàÁxúô)f̘¡¶\ïÞ½1dȸ¹¹!""¢Ð ϪY³&Ξ=‹‰'bÊ”)èÛ·/jÖ¬‰:uê qãÆ%¥ §àÜÛ´i,XCCCÜ¿&&&h×®²\¿~ýзo_¤¦¦ÂÑÑÆ ÓX‰ÖÓÓí[·¾}ûbâĉxÿý÷áëë‹O>ùäUe­\311³³3ììì0þ|T¯^¨[·®Ú5±_¿~èÓ§ÒÒÒàèèˆ!C† ^½zEnóÙrûüóÏ1aÂ|ðÁðööþÇs–ŠöÑG©ýÞ®];„„„àÝwßE‡ЧOÔªUKi1ñᇺuëtïÞõêÕÃÖ­[‘‘‘QäÈ¡o½õ.\¸€«W¯ÂÆÆóçÏÇ“'O0eʾšŒ’få¡SPPZŽ””¹r劈ä÷a¹pႜ;wN铬´½ÎÉÉ‘ãÇ‹§§§¨T*ñöö.r?§NOOO‰ˆˆƒ–‹6Ü^u›àyôè‘2––&—.]R¦/^¼(J¹Ý½{W’““ED$77WNž<)îîîJ;_MåvæÌqss‘ü>,m¸ ”v¦ÈÈH‰ŽŽV¦óòòÄÅÅE)—ëׯ˱cÇ”>IQQQjýWþ~~j*Gwww9s挈ˆ›qqqâçç'"ù÷¶cÇŽÉ¥K—”{›¯¯¯ò955U8 ·nÝ‘ü² (´•J%{÷î•ÀÀ@ñ÷÷—“'OJNNNñd²”•F&___µsëïåö÷:ɳ喖–&¿ýö›²ü?•Û¾}ûäÎ;"’_n'Nœ(7åöªë+ôò؇é5ЬY3µi´mÛ@þ†¿þî»ï*Ÿuuu µ£/øeàïžmóûÖ[oaذa/•iÓ¦jÓU«VUû5­ ÍuSSS峎ŽN¡aV5•Û³mŠ4hÀr+f 6T›ÖÖÖVʽM›6hÓ¦2]Ð ¥ÀßÏOM娡CåsíÚµ1|øðÿšdzÿÔÌ(\îš4iÒDù\©R%¾È±µjÕJmÚØØX9¾ºººøòË/Õ¾oÙ²¥ò¹ZµjjçP¥J•`aaQhZZZ=z´2ýÞ{ï±ÏîKz¶€Âåö÷:ɳËW­Z_ýµ2ýOåöl³W–ÑË)7Ê7LDDDDDD0`""""""Ò ÂL"‚É“'C¥R®]»†uëÖ)ß8p...X·nòòòÔÖý믿ÔÞ¤ý<²³³ ͳµµEJJ ~ùåÄÅÅaçÎxôèÑÈMÅràÀxzzÈ/lj'">>pÿþ}¬Zµ žžž…Þdž““ƒï¿ÿþ…ö•——W¨ü¯]»†³gÏ"88ÇŽC@@þøãÿž¡ ÊÍÍ |@þK‡GމK—.ȹðéÓ§¸¸8µõRRR°yóæÚ×ñãÇqáµynnnpvvÆ£G///œ;wî%rTþéééá·ß~DGGc×®]Ê—/_Æýû÷Q»ví"_¬èààðBû:þ¼ZebbbpãÆ T«V Íš5ãGpõêÕÿ–™rdåÊ•jþgff¢OŸ>PhP5j’““Õæ…„„`ĈèÕ«† ¢×9sæ(ïùy^@‹-жm[´oß¾P9¾¬ýû÷”—gZZZð÷÷W^R{ðàAØÙÙ)•ä]»v¡FÅVg±²²*ôƒÅß©T*ØÛÛøß =/zž—gõêÕömÛ”vçÎj/pß¹s'êÖ­[äGîîîHIIy¡ýuìØñ_—‰Åõë×QµjU˜™™!))酃銮\L;v쀿¿?T*Œ %%ß}÷Ž;¦T†6lØ€ððpXZZ*´k×®aذaððð@NNÂÂÂЪU+xxx@DðàÁÌž=S¦LADD€ü_º·oߎáÇãܹsJ”~åÊŒ1cÆŒAtt4¤¼`õï¼½½‘šš ¿Ò1dÈlݺ™™™%}È^ ÁÁÁJxçÎÊq\»v-nÞ¼©¼PØÇÇ¿üò ,--•'|ŽŽŽ˜3gŽ]¾|VVVˆŒŒÄ½{÷››‹½{÷â‹/¾P»{zzbèС8pàV¬X ÿ©ÆòåËѯ_?œ>}éé騹s'vïÞ­”ù³•›Wbb"-Z„ &àîÝ»%s ^sááápww899)/¦=}ú4•'ÑÑѸxñ¢Úùwá 6L)Ç+W®ÀÒÒuêÔAíÚµä?]ؼy³ÚSØÇcÛ¶mˆˆˆP{Êçèè[[[DFF"55‡Æo¿ý†§OŸJwõêÕ•wψþøã;vì_+ åAll,V®\ 8tèò.«;vàÆ˜9s&T*ÂÂÂ`kk‹:àúõ뀋/bÖ¬Yptt_fVVVˆ‹‹CPPàðáÃøâ‹/ðûï¿CDäŸÇ#FŒÀÎ;±bÅ ¨T*<}úßÿ=úöí«d¶¶¶øý÷ßáïï_(Ý)))ðõõ<}úkÖ¬ÁÈ‘#‹\¶"HJJ‰'”§ê"‚‡€ò‚ÌgŸ:ÄÅÅz ±råJLŸ>ç΃òÒÔ… ª„XPŽßfœœ¤¤¤`Ĉ¸zõ*\\\àáᡜëŠ<·ŠšWÔöüòOMMUKKQé{žù¥iûöí¸}û¶Rgyøð!’““1þ|üþûïÊõð‡~(²Î2tèPxzz";;÷îÝÃ| ÔY¢¢¢ ÕY233±mÛ6¥ÎRðtöÊ•+>|8ÆŽ‹‡ÂÞÞÁÁÁX²d ÒÓÓ1gÎôíÛ?ýô“Ƽ\ûóòò°ÿ~ 4¨\þ5cÆ dggãîÝ»Ê …¯_¿Ž}ûöaõêÕ¸ÿ>òòò0gΈ,,,€„„"//ÉÉÉðññQÞéTpì¼½½ñÍ7ßÀÆÆF –âãã±`ÁÌš5 ¿ýö®]»Á±cÇЯ_?ÌŸ?999°³³Chh(öïß°°0Œ7T{çá³RRRàããHNN† Fމ[·n½‚£X¶•‹€©F°··‡¿¿?<<<àìì @¯^½°fÍœ>}¡¡¡hÒ¤ ¬¬¬pùòeDFF¢^½zèÝ»7.\¸___|üñÇÐÖÖ†‡‡T*æÌ™ƒ:`É’%JÅïðáȉ‰ÁÎ;ñóÏ?# éééX°`¶lÙ‚Q£FaäÈ‘èÝ»7ÌÌÌ4>ªöññQ&gggüòË/W~}/ï7n¬I§OŸV.âGÅ|mmmìÝ»óçÏGÿþýѨQ#<}úéééprr´iÓ•J…k×®¡S§NˆŒŒÄýû÷áìì GGGìÛ·^^^òosæÌôôô°}ûvÀüùóaii‰}ûöÁÖÖÑÑÑøöÛo1nÜ84jÔ¨Pº•&\gΜÁøñã1zôhL˜0áU¶×޾¾¾Rù^½z5ìììK—.EÓ¦M±mÛ6øûûcêÔ©hذ!>þøcøùùȯ|¯^½nnnþ0yxxÀËË ?~<š5k†¹sçȯ˜YYY¡aÆشi.\˜9s&nÞ¼ SSS 4hܸ1LMM¡¯¯_(ÝwîÜQ*ýÛ·oGff&üýý1nܸ’=`¯ºuëâøñãP©T8qâ: ¿y……5j„M›6aæÌ™øâ‹/`hhˆ:uê ::ZyÑiZZÒÓÓ•2‹‹‹Cpp0|}}±ÿ~ìÞ½[ \Eß~û-Ö¬YƒfÍš)ÿ/ëÖ­C“&MpèÐ!:t×®]Ãܹs1xð`¼ÿþû…ÒýìÍþìÙ³8p æÌ™ƒ±cǾºƒ÷šY·nfÏž]臶ÇcêÔ©°´´Ä²eËÔ¾ûóÏ?ñõ×_#77 ðññAnn.êÕ«‡@D°téRÜ¿ëׯÇÂ… 1nÜ8Œ7ëׯǠAƒ”¡ÆÇ‡;wbÞ¼y…Ò¦¥¥…J•*!//cÆŒÁ AƒÐ¹sgåüŸ}ЬY3¬Y³D­Zµpúôi„„„(­pþ®àÚ}ûömT«V Û¶mÊ+ µ(ë²³³qõêU\¼xNNN ÅéÓ§Q»vm 8“'O†­­-Þÿ}T®\Y©g:99¡K—.°²²Â_ý¥üÀüïØ; .DïÞ½•@gñâÅhß¾=æÍ›‡U«V!&&—/_†££#Ž= ###¬^½³fÍ‚©©)F…5kÖ`ذaØ»w¯Ææë©©©j×Ð`îܹúú¼ÊEÀÔ³gO¸ººÂÍÍ óçχ««+\]]Ñ»wo`ùòå;v,6nÜhÛ¶-|||àèèˆnݺ¡C‡pwwWnüDÁÁÁ0`êÕ«§¼‡éüùó;v, •wú\¸pX¼x1>üÂ}"ÆCCCL˜0AyÔ]ÞUªT 5‚¿¿?Þxã äææÂ××-[¶„––V®\‰µk×bäÈ‘xã7ä¿‹§  c:uðá‡⯿þ‚ŽŽêÔ©£lûüùó˜0aªW¯®2îîîèÖ­êÖ­‹Áƒ£FP©TpqqÁ‘#G°hÑ"dee)“çÑ«W/4nÜíÚµCvv6’’’Š÷ •&&&HOOGBBêׯ„††¢yóæÐÕÕÅO?ý„þýû£K—.033ƒžžÞ}÷] )) 7F5•J¥<õòéeË–¡W¯^ÊGOOOôìÙýû÷ÇŠ+••‹‹ Þzë-dff¢Fð÷÷ÇÛo¿ SSST®\ùóЭ[7 2«V­‚··w¡f´åQ»vípãÆ ¨T*# uêÔAÕªU1cÆ =z–––hܸ1€ü¦:žžž†™™:uê'''DEEÁÌÌLÙîùóç1zôhÔªU &L€¶¶6üüüðÁ Q£F°²²RÞÍdooggg|÷ÝwHKKSžb=KKK4oÞ-Z´@ݺu+ìÞFaäÈ‘Xµj•Úüððp|÷Ýwpuu…···Ò'ðÌ™3زe öìÙ]]]ìÙ³^^^xï½÷0pà@ÄÆÆBKK éééP©TÈÌÌDݺu±gÏ$&&ÂÜÜ'NœP~ˆJKKCBB‚ÒZ`ûöíhÛ¶-ÌÌÌðäÉ4oÞ‰‰‰èÞ½;Nž<‰#FàСCˆ…‡‡öïß7âÉ“'¸qã²³³áàà€Ÿþ³fÍ*”_===lÛ¶ Ó¦Mßþ‰œœx{{ã×_Å‘#G°zõj¨T*\¸pëׯ‡³³3öíÛ÷ZµÜèÕ«\]]áîîŽùóçÃÅÅ...JeéÒ¥?~¼Rgi×®Z¥cÇŽpwwÇåË— ÕYîÞ½‹~ýúÁÄĤP¥zõê:t(€ü:Kzz:/^Œ£Gª³´k×GŽÁäÉ“1xðཆ¾ùæ›4hêÖ­‹–»§LÖÖÖpvvÆ¥K—0wî\¸ººâÊ•+èÚµ+,,,ЦM8::*ï¾*r ʬ{÷î8þ|¡zf@@,,,`nnŽ–-[¢]»vò»|þùç011µµ5àÔ©Sˆ‹‹Ã¬Y³P¨YrïÞ½1eÊlذ'Nü×ýôSù•®?üNNN€Ê•+£nݺø¿ÿû?tïÞ•+W†‘‘Ž;¦ö¬¥¥}}}¥ò”˜˜ ÿ«6ÏØØݺuƒìììpâĉÊCÁà‰‰‰J¥"èÝ»7V­Z…O?ýTióÞ»woùOàÞy眠J•*ÿá”=ÖÖÖ°µµE«V­`ii‰•+W¢W¯^òûµÔ®]çÎSšGYZZbûöíÊK4{ôè 6¨½”P?÷’’’”€¬à\Q©Txüø1€ü—ßÚÚÚÂÎÎ?ÿü3üÜéöì””Ô«Wï?‰²oÚ´ipwwWžÜù/ ~ë­· ¥¥…N:)­.ìíí‘  ®‘••…_~ùAAA˜1c¬4ç+P׬YSù\p>P{AîÔ©SqõêUÜ»wC† ÁÊ•+ahhooo|ýõ×8vìrrrP·n]Œ=Ý»wÇŽ;`hhˆ‹/âæÍ›5jlmmQ½zõBy-¸¯)÷æŽ;B[[ÆÆÆHJJBNNZµj…5j@WW­ZµÂµk׊ãP‹7ÞxYYYpuuÅøñãqçÎøùù)•å3gΠU«VJE__ÆÆÆ8pàºuë}}}Ô¬Y'NœPžVùu–Ê•+« ¢¨ßûž­³ôèÑC©³<;(M¼|ù2¾ùæ|óÍ7JSXM’““‘‘‘¡ì£¨þŒeY—.]péÒ%$''£_¿~M§ IDAT°··GÕªUQ­Z5äääàÚµkÈËËSúýµiÓ~~~ÊEü1®_¿Ž;wpº^½zjƒ<”OåÊ•• ÿÙ2›8q"ììì°iÓ&% .ðî»ï*?:wìØQãSÁÏ^C“““ õÿ&uå"`òoæ±±±000@“&M`dd]]]œ={ZZZ8uê¾ÿþ{åFmii‰¨¨(4mÚн{wjÒ»woŒ9›6mRž<|õÕWX°`öîÝ‹3gΠJ•*h×®œ±cÇ,[¶L¹Ðééé)ŸÿÉž={°k×.,Y²ƒ Bbb¢ÒN¶<ëÕ«Nž<‰Ž;ÂÊÊ §OŸF÷îÝ‘––†ï¾ûGEÓ¦MqðàAùåæéé‰nݺÈTãï¿Ø@Ÿ>}°qãFüôÓOؼy3*Uª„>øØºu+–-[¦7]ºtÁ˜1cpüøqLš4 ÐÓÓÃÕ«Wÿu0Žàà`¬_¿S§NE»ví ­­Å‹¿ÐSªòÀÚÚ?þø£RŽ?ýôzöì •J…o¿ýgÏžÅåË—•_1---qøða¥{ôèÇ*Ç^½zaãÆƶmÛäWööö¸sçŽ2¯R¥J077GLL ÌÍͱvíZÀs@ioo7nàÀhܸ±2ÈAA3¡ò¨k×®°··WÊìĉ°¶¶FNN¦L™‚={ö gϞزe €üŠêõëו2kß¾=nÞ¼Y¨Ìzôè}ûö)×ÂêÕ«ÃÄÄ999øá‡°dÉT©RZZZ0`† †“'ObÔ¨Q¨Zµ*ôôôàíí­`%&&+V¬À‚ аaC`Æ øë¯¿J怽ƴµµ±sçNL:U™¡ôÝ»uë–RßµkÆ•+WB[[}ûöU®s:uBÓ¦M_øi̳?8<ËÈÈ:::8räªU«†ƒ*iŒŽŽ†……®_¿ lܸ­[·F÷îݱÿ~lذ¡ÈZGG§Ð¼‚@133•+W†žžnß¾­ô D‹-^(O%ÍÒÒñññ¨V­Þ~ûmÔ©Sºººppp€ŽŽN:…õë׫ÕY¢££ajj ¿Î µíöêÕ £F¦M›” 端¾Âwß}‡½{÷âÏ?ÿD•*Uо}{8::âÇÄÒ¥K•&\u–+W®`ܸqˆ‰‰±±ñ¿þ Q­Z5Ìœ9vvvðððÀgŸ}¥é{YWµjUTªT M›6…©©)nÞ¼©\ W®\‰o¾ù;vìÀäÉ“!"ÐÕÕEýúõann---èèèàwÞA“&MÔþ‡ŒŒP¹re,]ºK–,Qºi 8ãÇÇŽ;€*Uª`àÀX¾|9Ž9‚±cÇ*?BÅÆÆ"$$»víÂêÕ«‘——‡&Mš R¥Jÿ˜§¸¸8¬X± .Dýúõahh[[Ûb¶\š8q¢”;wî___ß'&&J`` ˆˆÜ¿_"""DDÄÏÏORSSED$<<\bbbDD$!!Anݺ¥¬Ÿ””$>>>Ê´¯¯¯¨T*ñòòwwwIHHØØXyðàˆ½½½ìÛ·ONŸ>-""¹¹¹ròäIqww—¼¼<ñññ‘ƒª¥ÕÏÏO²³³%00PÒÓÓåöíÛ’™™)ÇŽ“øøxÉÊÊ’Ë—/ÿ÷ö”ÄÿÂólÓÓÓST*•deeÉÕ«WED$>>^BCCED$##C­l<<<$;;[™¾r劤§§‹ˆHLLŒ<|øPDòËôÈ‘#’™™)þþþ’‘‘!wïÞ•ßÿ]䫯¾R¶ ”'OžˆˆÈÓ§OåÇ”ÄÄDe™¸¸8‰ŒŒ”'OžHXX˜$%%ITT”xyyÉ¥K—”åüüü$))é…Õ5cÆ yüøq‰m?00Pìììþq™¼¼}Ä××Wlllþ5(( J+`z•zöì)ßÿ½Œ?^lmmK;9Å¢´¦çñ<•ŸŒŒ ¹sçŽÚQÅ-55U©ôݽ{WÙ׳Ÿ ˜ˆŠ&"""¢2*<<_|ñÅKõå‘bLQùÀ‰ˆˆˆ¨Œ ƒ¾¾>¶lÙ‚wÞy½zõ‚ŽŽÎ?®£R©°~ýzœ;w÷îÝ4jÔíÚµÃÚµk9˜Ñßðy-QŽß~û éé騻w/Úµk÷ËGDDàã?ÆêÕ«áéé‰èèhDGGãòåËØºu+Z·n›7o¾¢Ô• |ÂDDDDTFmÛ¶ ÕªUSž YXXÀÛÛ­[·.´l^^Ÿ"·•““ƒ€€ 6 ׯ_‡A‰¦¨¬à&"""¢2*,,Lm€sssÄÆÆ¹ìâÅ‹ð¯Û ¸qãŠ-De&"""¢2jÅŠøá‡ R©àíí oootïÞ½Èe‘ý¯Û6Ë#z&"""¢2jçθté5jìß¿zzz…–ËÎÎFbbâso÷É“'ˆˆˆ(Τ•YìÃDDDDTF5lØÿº\ZZrrrž{»™™™HJJB£F^&yDåŸ0•sµjÕBíÚµŸ{y###¼÷Þ{%˜"¢²ƒQðÖ[o=÷²uêÔ)²iQEÄ€‰ˆˆˆ¨øé§Ÿž«‰‰‰ ~üñÇW"¢²QРA,[¶ &&&—©[·.&NœXä{œˆ**ú@DDDTAŒ3Ÿ|ò ¾ùæÄÇÇ#>>*• ÆÆÆ022ÂŽ;СC‡ÒN&ÑkEkâĉòÓO?•v:ˆˆˆˆè=zçÏŸGåÊ•‹e{YYYˆG^^Þ|óMT©R¥X¶ûªÄÄÄ ^½zźÍ7ß|+W®,ÖmRÙ6iÒ$>a""""* bbb0þ|˜™™•vRÊ­Q£F•vè5Ä>LDDDDDD0`""""""Ò€‘ ˜ˆˆˆˆˆˆ4`ÀDDDDDD¤GÉ#""""5W®\Á®]» Íßµk×skž““===@XX¶mÛ†„„tëÖ _}õªT©‚ÜÜ\èèè@KKKY/33vvvX¸pañd†è%ñ ©±°°À‚ 0iÒ$xyyaÁ‚X°`*Uªô\ëgff¢{÷îò‡C·¶¶†……V­Z…€€lÚ´ 0~üx«­›óçÏo†ˆ^Ÿ0‘šêÕ«£zõêxôèôõõÕÞýtýúulß¾:::Xµj `cc[[[ÀÕÕOž<Á;wpäÈxyyaôèÑ?~<`ýúõøùçŸáåå777¤¦¦bÓ¦MpttDdd$¬­­K+ÛDEbÀDDDDDÏ%33sçÎÅ©S§ŒáÇÃÍÍ Õ«WÇÎ;qúôiìÛ·µjÕ‚³³3† ‚={ö`Æ Ê6tuu1yòd@§N0þ|$''cæÌ™pqqAÓ¦MK+{DEbÀDDDDDÏÅÉÉ éééX²d 88*• ‹-Â|€Y³f¡^½zÈÌÌTÖ©Zµ*=z¤¶ooo´hÑBm^§NðÑG!99¹ä3Bô؇‰ˆˆˆˆž‹±±1¬¬¬`gg;;;œÂîÝ»¡­­ˆˆ„‡‡cÊ”)¸}û6úõë‡={ö`À€˜:u*@OONNN¥œ+¢Æ&yDDDDT¤5j¨ /®¥¥wwwüù矨U«:tè€Çc÷îÝxã7°hÑ"øûû£R¥JØ´ibccѤI8;;#88×®]áC‡`dd˜?>œœœÐ¸qcÌ›7P­Z5lÙ²¥TòKTLDDDDT$]]]´nÝZmžŽŽú÷ï¯L)P¥J•”åŸ]š5k†fÍš©Í{çwðÎ;ï(ßl¿eË–Å›¢—À&yDDDDDD0`""""""Ò€‘ ˜ˆˆˆˆˆˆ4`ÀDDDDDD¤GÉ#"""*BCCѧOT®\¹´“RnÕ¨Q£´“@¯!LDDDDe€©©)ìííaffVÚI)·FUÚI ×›äiÀ€‰ˆˆˆˆˆHLDDDDDD0`""""""Ò€‘ ˜ˆˆˆˆˆˆ4`ÀDDDDDD¤&"""""" 0iÀ€‰ˆˆˆˆˆHLDDDDDD0`""""""Ò€‘ ˜ˆˆˆˆˆˆ4`ÀDDDDDD¤&"""""" 0iÀ€‰ˆˆˆˆˆHLDDDDDDè–vˆˆˆˆèßÅÄÄ`Ú´i000(í¤”[)))¥z 1`""""*jÕª…~ýú¡~ýú¥”rëÈ‘#¥z 1`""""*ôõõѵkW˜™™•vRÊ­Ó§O—vè5Ä>LDDDDDD0`""""""Ò€‘ ˜ˆˆˆˆˆˆ4`ÀDDDDDD¤GÉ#"""*¦NŠÔÔTÀ›o¾‰ mÛ¶—ÿã?)S¦<÷>T*D:::/^¢²‚Q9pæÌ8::nnn¨[·.@OOÓ¦MCBBLMMaee…;v@[[#GŽÄÕ«WK3ûD%†Q9 ££ƒ–-[ŒŒŒ”`æÔ©SHJJÂìÙ³‘••…µõþøãhiiaÖ¬Yˆ‹‹CJJ LMMѧO˜™™¹¯‡ÂÀÀæææ€úõë#$$ï¾ûnÉf’¨0`""""*tttгgOeúäÉ“ ƒ±±1F¾}û"##jëc̘1033ãGžžŽ¨¨(åÉRQjÕª…””e:)) FFFÅŸ)¢×û0•C&&&pvvFÿþý±nÝ: ìÛ·o¿ý6LLLиqãBûèÙ³'‘‘‘½{÷ÂÃÃYYYX¾|yÉg¨”0`""""*þþÎ¥·ß~[ù\­Z5 >\íû?üPù\§NŒ9R™®Y³&jÖ¬Yh˜4i’2Ý¡C‡—M6ÑkMòˆˆˆˆˆˆ4`ÀDDDDDD¤&"""""" ؇‰ˆˆˆ¨ŒóõõÅ–-[ Íß²e jÔ¨ñ\ÛÈÎÎF¥J•QQQؼy3bbb`ee…!C†ÀÀÀ¹¹¹ÐÑÑ–––ں˗/ÇÊ•+•é;wî ((|‰\½ø„‰ˆˆˆ¨ŒkÚ´),X€9sæÀÍÍ ,À‚ ```ðÜÛèØ±#€üw*uïÞ7Æš5k5kÖfÏž ///µõDþù§Ú¼‡Â××÷%sEôzà&"""¢2ÎÀÀfffÊS"333å;___lÛ¶ ¹¹¹X¶lêÕ«‡Å‹cÓ¦M¸wïN:]]]„††bß¾}ˆŒŒÄÀ1uêTÀªU«°}ûvܾ}çÏŸGpp0<ˆ£G"%%VVVE¦ééÓ§X¿~=nܸ5kÖ J•*pttÄÓ§Oˆ¹sç¢yóæX¹r%ÌÍÍqüøqŒ7Ý»w%ÇŒèy1`""""*§òòò0}út?~111:t(nܸFaÓ¦MpssÃÖ­[Ѹqc9r£GÆÀ1kÖ,eZZZ˜6m€ü÷01˜7oΟ?Ö­[¹ï .àòå˰°°ÀŽ;0~üxÌž=—/_†µµ5Ƈ˗/cÓ¦Mزe ¶oߎþýû£U«Vxã7^Éñ!zl’GDDDTNyzzâéÓ§X±bvíÚ…ÈÈHdffbÆŒ8zô(,-- ½ ¶jÕªHLLT›wóæMdffªÍkÓ¦ :vìmí¢«“½{÷†‘‘ÌÍÍñôéSÀgŸ}†-ZÀÂÂÆÆÆ‡¡¡!FŒccc|ñÅ8{öl1¢—Ç€‰ˆˆˆ¨œ266ÆgŸ};;;ØÙÙáÔ©SÐ××GHHj×®sçÎA¥R©­Ó±cGœ9sF™ÎÎÎÆ¤I“”! ¼ùæ›ÿ¸ïjÕªš§|~òä jÖ¬‰ôôt¤¤¤P§NÎ'QIbÀDDDDTN™››#887nĆ ðûï¿#''S¦LÁž={гgOet½¸¸8c̘1ˆ‡µµ5öìÙƒbìØ±ÐÖÖ†žžœœœ4îoÉ’%ðööÖø}TT/^ŒÅ‹ÃØØµk׆žž¦M›†-[¶ÀÑÑ]»v-öã@ô2؇‰ˆˆˆ¨œÐÓÓÃÔæ]¼xç΃¾¾>:w”lß¾ 4ÀÌ™3•gÇŽˆ‰‰A³fÍààà€°°0xzzbïÞ½066̘1gΜ±±1V¬X ¿Ó/¿ü> charcnt.txt #*************************************************************************************************** # Create an archive of the essential project files as follows : # # 1. Change the make variable "TAR_NAME" (below) to the current version number # 2. Change to the project root directory # 3. Execute "make tar" to create the project archive file eg. gspiceui-v1.1.00.tar.gz #*************************************************************************************************** TAR_VER=v1.1.00 TAR_DEST= gspiceui-$(TAR_VER)/gspiceui-$(TAR_VER).tar.gz TAR_SRCS =gspiceui-$(TAR_VER)/release-notes-$(TAR_VER).txt TAR_SRCS+=gspiceui-$(TAR_VER)/Authors TAR_SRCS+=gspiceui-$(TAR_VER)/ChangeLog TAR_SRCS+=gspiceui-$(TAR_VER)/Install TAR_SRCS+=gspiceui-$(TAR_VER)/License TAR_SRCS+=gspiceui-$(TAR_VER)/Makefile TAR_SRCS+=gspiceui-$(TAR_VER)/ReadMe TAR_SRCS+=gspiceui-$(TAR_VER)/ToDo TAR_SRCS+=gspiceui-$(TAR_VER)/gspiceui.1 TAR_SRCS+=gspiceui-$(TAR_VER)/gspiceui.lsm TAR_SRCS+=gspiceui-$(TAR_VER)/src/* TAR_SRCS+=gspiceui-$(TAR_VER)/html/Makefile TAR_SRCS+=gspiceui-$(TAR_VER)/html/*.html TAR_SRCS+=gspiceui-$(TAR_VER)/html/*.png TAR_SRCS+=gspiceui-$(TAR_VER)/html/*.jpg TAR_SRCS+=gspiceui-$(TAR_VER)/sch/Makefile TAR_SRCS+=gspiceui-$(TAR_VER)/sch/*/*.sch TAR_SRCS+=gspiceui-$(TAR_VER)/lib/Makefile TAR_SRCS+=gspiceui-$(TAR_VER)/lib/models/*.ckt TAR_SRCS+=gspiceui-$(TAR_VER)/lib/models/*.mod TAR_SRCS+=gspiceui-$(TAR_VER)/lib/symbols/* TAR_SRCS+=gspiceui-$(TAR_VER)/mac/Info.plist TAR_SRCS+=gspiceui-$(TAR_VER)/mac/GSpiceUI.icns TAR_SRCS+=gspiceui-$(TAR_VER)/svg/Makefile TAR_SRCS+=gspiceui-$(TAR_VER)/svg/*.svg tar : make clean cd svg ; make ; cd .. cd .. ; mv gspiceui gspiceui-$(TAR_VER) cd .. ; tar --totals --exclude .svn -zcf $(TAR_DEST) $(TAR_SRCS) cd .. ; mv gspiceui-$(TAR_VER) gspiceui #*************************************************************************************************** # Perform configuration tasks #*************************************************************************************************** # Everyone should call this once config : ifneq ($(ROOT)/bin,$(wildcard $(ROOT)/bin)) mkdir $(ROOT)/bin endif ifneq ($(ROOT)/src/obj,$(wildcard $(ROOT)/src/obj)) mkdir $(ROOT)/src/obj endif # You should also call this once if running on a MAC maccfg : $(ROOT)/mac/Info.plist $(ROOT)/mac/GSpiceUI.icns ifneq ($(ROOT)/GSpiceUI.app,$(wildcard $(ROOT)/GSpiceUI.app)) -mkdir $(ROOT)/GSpiceUI.app -mkdir $(ROOT)/GSpiceUI.app/Contents -mkdir $(ROOT)/GSpiceUI.app/Contents/MacOS -mkdir $(ROOT)/GSpiceUI.app/Contents/Resources cp $(ROOT)/mac/Info.plist $(ROOT)/GSpiceUI.app/Contents/ echo -n 'APPL????' > $(ROOT)/GSpiceUI.app/Contents/PkgInfo cp $(ROOT)/mac/GSpiceUI.icns $(ROOT)/GSpiceUI.app/Contents/Resources/ endif #*************************************************************************************************** # Perform installation tasks #*************************************************************************************************** install : mkdir -p $(DESTDIR)/share/gspiceui cp ReadMe $(DESTDIR)/share/gspiceui cp Install $(DESTDIR)/share/gspiceui cp ChangeLog $(DESTDIR)/share/gspiceui mkdir -p $(DESTDIR)/share/gspiceui/icons cp src/icons/gspiceui-*.xpm $(DESTDIR)/share/gspiceui/icons mkdir -p $(DESTDIR)/share/man/man1 cp gspiceui.1 $(DESTDIR)/share/man/man1 cd $(ROOT)/src ; $(MAKE) install DESTDIR=$(DESTDIR) cd $(ROOT)/html ; $(MAKE) install DESTDIR=$(DESTDIR) cd $(ROOT)/sch ; $(MAKE) install DESTDIR=$(DESTDIR) cd $(ROOT)/lib ; $(MAKE) install DESTDIR=$(DESTDIR) #*************************************************************************************************** # Perform uninstall tasks #*************************************************************************************************** uninstall : cd $(ROOT)/src ; $(MAKE) uninstall DESTDIR=$(DESTDIR) cd $(ROOT)/html ; $(MAKE) uninstall DESTDIR=$(DESTDIR) cd $(ROOT)/sch ; $(MAKE) uninstall DESTDIR=$(DESTDIR) cd $(ROOT)/lib ; $(MAKE) uninstall DESTDIR=$(DESTDIR) rm -f $(DESTDIR)/share/man/man1/gspiceui.1 rm -fr $(DESTDIR)/share/gspiceui # rmdir --ignore-fail-on-non-empty $(DESTDIR)/share/man/man1 # rmdir --ignore-fail-on-non-empty $(DESTDIR)/share/man # rmdir --ignore-fail-on-non-empty $(DESTDIR)/share #*************************************************************************************************** # Remove temporary files and backup files #*************************************************************************************************** clean : rm -f Makefile~ charcnt~ cd $(ROOT)/src ; $(MAKE) cleanall cd $(ROOT)/html ; $(MAKE) clean cd $(ROOT)/sch ; $(MAKE) clean cd $(ROOT)/lib ; $(MAKE) clean #*************************************************************************************************** # Specify phony targets #*************************************************************************************************** .PHONY : size tar config install uninstall clean #*************************************************************************************************** gspiceui-1.1.00+dfsg/mac/0000755000000000000000000000000012525200532013552 5ustar rootrootgspiceui-1.1.00+dfsg/mac/GSpiceUI.icns0000644000000000000000000011471612124473157016064 0ustar rootrooticns™Îics#His32ÀÁÀÈdžÁÃ˲„†…ŒÄ‚È ÃÁï…S{ Xq€ƒ‚€¯Ãµ›ci†ˆQ‡¤Q”š•µÂÁÂǺ€›¢¾ˆFv­ÈÂÁ ÂÅÆÅŽ’™°Ã‚Á ÿ»ÄºwGh£ÄÁ ¾]J´ÃÅ I‚‚Á Éws“GÃëXŽÆÂ€ÁAÄ©SÀÉZŒÆÃ†¹³¼ÃÁÁÈ`—ÆÄ¢GÂÁ¿§I^¸ÂĤO½ÂÁÆ[‘ǼF­›ªÃë±ÄÁÁÄ£JÍ{gÈÅÃÁÁÃÃÁÅrDPµÃ‡ÁÂÀƒªÅ‰ÁÂÈÄ‚ÁFCGM€LD‚C FEÿÿô·º¹Á„ÿ4EFð°n¤ÐÕu–®®­­ªðFEøÍ„Œ²µk´ÚjÄÌÆøECÿÿôÎÎÍ×üµ]œæÿÿCCÿø—ÿ#ûÂʾéÿÿCCÿ÷†ÿ÷ÿÿö^‰ØÿÿCCÿøŠpíÿÿÕ`­€ÿ CCÿÿ3¢Çjÿÿãu¼€ÿCCÿågÿÿ‡Åÿÿ²öìøÿCCÿˆZÿÿæt€ÿ(Þ|þDFíK@‹ˆŠMއ–XwZÈJFìÝ‚øóöØnÿ¦•ü÷ÿCCÿúÿ©g{ø€ÿCEÿÿå‚ÿ¶êÿEFDHCDLG€CF€ÁÀÈdžÁÃ˲„†…ŒÄ‚È ÃÁï…S{ Xq€ƒ‚€¯Ãµ›ci†ˆQ‡¤Q”š•µÂÁÂǸ€›¢¾ˆFv­È€Á »rÈÄÅŽ’™°ÃÁ ºcÅÂÀºwGh£ÄÁ ºeëïÃÀÅ I‚‚Á ·‡àÑïÀëXŽÄÁK¿ÊÝÃ¾ëØ¾Ã‡´ÆÂÀÁÁ¾ä{ÉÄÔõÃÇ¾ÉøîÄÀ¿ÑÌ5hf`¿©]vãrt®ÃÀɽ_»¸µÊí²Öäµµ½ÁÁÀ¹bÆÁÁ¿äñðÈÀ‚Á ¿¦ÂÁÁÀÁÖÉ¿„ÁÄ‚Á¿À‚Ás8mkÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿICN#ÿÿÿÿøÿÿ?€?€ÿÿÿÿøÿÿ?€?€il32¬äÀ†”À„ÀÀ‚„À‹‡À„À‚ÀŽÀ†‚ÀœÀ™À„ÖÀ„™ÀÀ‡ÀÀXX„À‚ŒÀÀÀ—ÀÀXƒÀ€ŒÀXÀX”ÀXƒÀXƒÀŒÀ„ÀX‡À†ÀX…ÀX…ÀXX…ÀX…ÀX„ÀXÀÀXƒÀX‡ÀX‚ÀXˆÀˆÀX‚ÀX•ÀX€ÀX–ÀX€ÀX—ÀXXX™À€èÀž›ÿ›ÿƒÿ†Œÿƒÿ„ÿŒÿÿÿ‚„ÿ‹ÿÿƒÿ„ÿ‚ÿ†ÿƒÿ†‚ÿ†ÿ‘ÿ†ÿŽÿ„ƒÿ‚ÿ•ÿ‚ÿ•ÿ‚ÿˆÿ„ƒÿ‚ÿ‹ÿ†ÿ‚ÿÿÿ‡ÿ†ÿ‚ÿÿ¨¨„ÿ‚„ÿ‚ÿ€ÿÿÿ‚ÿÿ¨ƒÿ€…ÿ‚ÿ¨ÿ¨Žÿÿ¨ƒÿ¨ƒÿ†ÿÿƒÿ¨‡ÿÿ€ÿ¨„ÿ¨…ÿ¨¨€ÿ€ÿ¨„ÿ¨„ÿ ¨ÿÿ¨ÿÿÿÿ¨‰¨‚¨ƒ ÿÿÿÿÿÿ…ÿ¨‚ÿ¨„ÿ‚ÿ†ÿ¨€ÿ¨…ÿ‚ÿ†ÿ¨€ÿ¨…ÿ‚ÿ‡ÿ¨¨¨†ÿ‚ÿˆÿ€‡ÿ›ÿ›ÿžäÀ†”À„ÀÀ‚„À‹‡À„À‚ÀŽÀ†‚ÀœÀ™À„ŠÀœÀœÀˆÀ„ŠÀ‹ÀÀÀÀÿÿ‡ÀÀÀÿ„À‚‹ÀÿÿÀÀÿÿ–ÀÿÀÿÿƒÀ€ŒÀÿÿÀÿÿ”ÀÿÿƒÀÿÿƒÀŒÀÿƒÀÿÿ‡Àÿÿ†Àÿÿ„Àÿÿ…Àÿ…Àÿÿ„Àÿÿ„ÀÿÿÀÀÿÿƒÀÿÿ‡ÿÿ‚ÿÿ‚ƒÀÿÀÀ…Àÿÿ‚Àÿÿ‹À†Àÿÿ€ÀÿÿŒÀ†Àÿÿ€ÀÿÿŒÀ‡À‚ÿÀˆÀ€ÿèÀl8mkÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿich#H€€ih32 ™ÿÀÅÀ‰`fºžÀ`‡  ´žÀ` ©†´Z ´˜À‚`0 ´†À`Z`…Àf‚  ´†À`„ ‡ f…Àº‚´Z ´†À` ©ƒ´Z ©†´º‹À`Z†`0 ´ƒÀ` ´•Àf‰ ´ƒÀ` ´•Àº‰´µ¿ƒÀ` ´¥Àºf€`0Z€`¡À´† f¡À¿µ†´ºÑÀ¿µ†´º¡À´† f¡Àºf€`0Z€`”Àº´´º‹À` ´˜Àf f‹À` ´–ÀºfF,,Ffº†À``0Z`fº’À º© /__0 ©º…Àfƒ ´’À f \¹¹] f…Àºƒ´µ¿’À `ZÀÀZF¼„Àºf€`’À¿µ\´À´,Z¹„À´€ f’À´/Z¹À¹Z,´„À¿µ€´º‘À¦„F¼À¼F„¦…Àfº’À‰Nf…Àb NŠ…Àf´€Àº´´º‹Àb©º…À‰N c…Àºµ¿€Àf f‰À¼F ´†À¦„F¼‡ÀºfF,,Ffº‡À¹Z,´‡À´,Z¹†À º©2__2©º†À´,Z¹‡À¹Z,´†À fN†¹¹†Nf…À¦„F¼‡À¼F„¦ƒÀ ¼F„¦ÀÀ¦Šb…À‰Nf‹Àb NŠƒÀ¹Z,´ŒÀb©º‹À‰N cƒÀ´,Z¹ŒÀfºŒÀ¦„F¼€À¦„F¼ŸÀ´,Z¹€À‰N c¡À¹Z,´€Àb NŠ¡À ¼\0\vŠbF2†¦£ÀZ)N/f¹¤À¼® \º¿¥Àºf€`ÿÀËÀ®?©@©ÿ€©ÿ€…ÿÀ‰€‡ø’ÿ€…ÿ€‡ð’ÿ€…ÿ€á†ðxð’ÿ€ÿÿÀ‚€@ð†ÿ€x€ ¿ÿÿ€ÿÿ‡‚ð†ÿ€„‡ ‡ÿÿ€ÿÿø‚ðxð†ÿ€áƒðxá†ð÷ÿÿ€…ÿ€x†€@ðƒÿ€ð‰ÿ€…ÿ‡‰ðƒÿ€ð‰ÿ€…ÿøŠð„ÿ€ð‰ÿ€•ÿø‡€€@x€€¿…ÿ€„ÿð÷Œÿð†‡…ÿ€ƒÿð‡ÿ‡ð÷…ÿ€ƒÿð ÿ€ƒÿðÿ‡ð÷…ÿ€ƒÿðŒÿð†‡…ÿ€ƒÿðŒÿ÷‡€@x€¿…ÿ€ƒÿðÿÿøðð÷‹ÿ€ð‰ÿ€ƒÿðÿÿ‡‡‹ÿ€ð‰ÿ€ƒÿ ðø‡jTTj‡ø†ÿÀ€€@x€‡ø†ÿ€ƒÿ ðxáV­­Wá÷…ÿ‡ƒð†ÿ€ƒÿ ð}úú}‡…ÿø„ð‡ÿ€ƒÿ ðx¿ÿÿ¿xjÖý„ÿø‡€€¿ˆÿ€ƒÿððÿðT¤ù„ÿð€‡ˆÿ€ƒÿðO¤ùÿù¤Tð…ÿð÷ˆÿ€‚ÿêÇ iÕýÿýÕj Çé…ÿÀ‡ø‰ÿ€‚ÿÏ• …ÿ…•Î…ÿ‡ð€ÿøðð÷‚ÿ€‚ÿ… …ÿÏ•„…ÿøðÿ‡‡‚ÿ€€ÿýÖj…ÿéÆ jÖý‡ÿø‡jTTj‡ø€ÿ€€ÿù¤T †ÿðT¤ù†ÿøá[­­\á÷ÿÿ€€ÿðT• †ÿù¤Tð†ÿ‡•ÌúúÌ•‡ÿÿ€ÿÿêÇ *O@†€}W* Ǫƒ€…ÏjOj€€jOÿÿ€ÿÿÏ•ˆ •Vƒ•T „‡ÿÿ€ÿÿ…áðáxˆðÇ•}ƒðáT¤êƒð÷ÿÿ€ÿÿ¿‡÷ÿðˆÿéÆ jÖý€ÿêÇ iÕý†ÿ€ƒÿð‰ÿðT¤ù€ÿÏ•„ˆÿ€ƒÿð‰ÿù¤Tð€ÿ…•Έÿ€ƒÿð‰ÿ ýÕ”W}ªÏ…j\Ëéˆÿ€ƒÿð‹ÿÖ£ O• V²ú‰ÿ€ƒÿð‹ÿýë }úŠÿ€ƒÿ÷‡¿Œÿ÷‡€¿‹ÿ€©ÿ€©ÿ€@©€@®ÿÀÅÀ‰`fºžÀ`‡  ´žÀ` ©†´Z ´˜À‚`0 ´†À`Z`…Àf‚  ´†À`„ ‡ f…Àº‚´Z ´†À` ©ƒ´Z ©†´º‹À`Z†`0 ´ƒÀ` ´•Àf‰ ´ƒÀ` ´•Àº‰´µ¿ƒÀ` ´¥Àºf€`0Z€`À¿µºŒÀ´† fÀ´fŒÀ¿µ†´ºÀ´ `ªÀ´ `ŒÀ¿µ†´ºÀ´ `ŒÀ´† fÀ´ `ŒÀºf€`0Z€`À´ `ÀÀÁÃËÀ` ´“À´ `ÀÀÞüüÞ‹À` ´“À ´ `ÁÞïÿÿïÞÁ†À``0Z`fºÀ ´ aÆüþüüýüÆÂ…Àfƒ ´À ´ ~üÿáÃÃáÿüÞ…Àºƒ´µ¿À ´ þáÐÀÀÐáþïÞÁ„Àºf€`’À´‡üÃÀÃüÿüÄÀ´€ f’ÀÃí÷üÃÀÃüÿüÄÀ¿µ€´º‘ÀÏáýðÞÂÀÂÞïýáÐ…Àfº’ÀßÿðØ…Àßÿÿà…Àf´€ÀÁÃËÀßðh…Àßÿÿà…Àºµ¿€ÀÞüüÞ‰ÀÁÞïð`…ÀÐáþïÞÁ‡ÀÁÞïÿÿïÞÁ‡ÀÃüÿð`†ÀÃüÿüÆÀ ÁÆüþüüýüÆÂ†ÀÃüÿð`†ÀÃüÿüÆÀ ÞüÿáÃÃáÿüÞ…ÀÏáýÀx0†`b~¿ýá ƒ` gØïø‡p``p€€ …Àßÿü„ ˆ …ÿÿ†ƒ ðÿðƒ f…ÀßüƼ© Zˆ´ÙÿÿÚƒ´¸ûÿû¸ƒ´º…ÀÐÞÂÀ´ `ˆÀÐáþïÞÁ€ÀÏáýðÞÂÀ´ `‰ÀÃüÿüÀÀßÿÿà’À´ `‰ÀÃüÿüÀÀßÿÿà’À´ `‰ÀÂÞïýá€ßïþáÐ’À´ `‹ÀÞüÿþùÓÀ´ `‹ÀÁÆü€ÿáÔÀºfŒÀÂÞ€àÐÿÀËÀh8mk ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿit327ÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀƒÀ¿½·µ´µ·½¿ÕÀ½´œ““œ´½ÕÀ·œT909Tœ·ÕÀ´“9 9“´ÕÀ´0  —   0´ÕÀ´0  $-•0-$  0´ÕÀ´0 $l‡•‡l$ 0´ÕÀ´0 -‡©•´©‡- 0´ÅÀ¿½·µ‰´©‡- 0´•À´0 -‡©­´µ·½¿‘À½´œ“‰‡l$ 0´•À´0 $l‡­“œ´½‘À·œT9‰0-$  0´•À´0  $-­09Tœ·‘À´“9Š   0´•À´0  ® 9“´‘À´“9Š   0´•À´0    – 9“´‘À·œT9‰0-$  0´•À´0  $-0-$  $-•09Tœ·‘À½´œ“‰‡l$ 0´•À´0 $l‡‡l$ $l‡•“œ´½‘À¿½·µ‰´©‡- 0´•À´0 -‡©´©‡- -‡©•´µ·½¿¡À´0 -‡©•´©‡- 0´À´0 0´½À´0 $l‡•‡l$ 0´À´0 0´½À´0  $-•0-$  0´À´0 0´½À´0  —   0´À´0 0´½À´“9 9“´À´0 0´½À·œT909Tœ·À´0 0´½À½´œ““œ´½À´0 0´½À¿½·µ´µ·½¿À´0 0´éÀ¿½·µ…´©‡- -‡©…´µ·½¿ÝÀ½´œ“…‡l$ $l‡…“œ´½ÝÀ·œT9…0-$  $-…09Tœ·ÝÀ´“9†   † 9“´ÝÀ´“9• 9“´ÝÀ·œT9•09Tœ·ÝÀ½´œ“•“œ´½ÝÀ¿½·µ•´µ·½¿ÿÀÿÀÿÀÿÀÕÀ¿½·µ•´µ·½¿ÝÀ½´œ“•“œ´½ÝÀ·œT9•09Tœ·ÝÀ´“9• 9“´ÝÀ´“9†   † 9“´ÝÀ·œT9…0-$  $-…09Tœ·ÝÀ½´œ“…‡l$ $l‡…“œ´½ÝÀ¿½·µ…´©‡- -‡©…´µ·½¿¹À¿½·µ´µ·½¿¡À´0 0´ÅÀ½´œ““œ´½¡À´0 0´ÅÀ·œT909Tœ·¡À´0 0´ÅÀ´“9 9“´¡À´0 0´ÁÀ¿½·µ©ˆ11ˆ©µ·½¿•À¿½·µ´©‡- -‡©´µ·½¿¹À½´œ“ˆq55qˆ“œ´½•À½´œ“‡l$ $l‡“œ´½¹À·œT914>ABA>419Tœ·•À·œT90-$  $-09Tœ·¹À´“9BNSNB9“´•À´“9‚   ‚ 9“´µÀ ¿½·µ©‡- HZ_ ZH -‡©µ·½¿‘À´“9 9“´µÀ ½´œ“‡l$ Vkr kV $l‡“œ´½‘À·œT909Tœ·µÀ ·œT9-$  )}œ¦ œ})  $-9Tœ·‘À½´œ““œ´½µÀ ´“9  .‹®¹ ®‹.  9“´‘À¿½·µ´µ·½¿µÀ ´0  9“´À´“9  .‹®º»¾¿‘À¿½·µ…´µ·½¿¹À ´0  $-9Tœ·À·œT9-$  )}œ¨­¹¾‘À½´œ“…“œ´½¹À ´0 $l‡“œ´½À½´œ“‡l$ Vkw†¬»‘À·œT9…09Tœ·¹À ´0 -‡©µ·½¿À¿½·µ©‡- HZfx§¹‘À´“9… 9“´µÀ ¿½·µ©ˆ14‘´‰À ´‘4 @NZo¤¹‘À´“9… 9“´µÀ ½´œ“ˆq5!A•µ‰À µ•A!!7?Jb ¸‘À·œT9…09Tœ·µÀ ·œT914>AJb ¸‰À ¸ bJ?7!!A•µ‘À½´œ“…“œ´½µÀ ´“9BNZo¤¹‰À ¹¤oZN@ 4‘´‘À¿½·µ…´µ·½¿±À¿¾»º®‹. HZfx§¹‰À¹§xfZH .‹®º»¾¿‘À¿½·µµ·½¿µÀ¾¹­¨œ}) Vkw†¬»‰À»¬†wkV )}œ¨­¹¾‘À½´œ““œ´½µÀ»¬†wkV )}œ¨­¹¾‰À¾¹­¨œ}) Vkw†¬»‘À·œT99Tœ·µÀ¹§xfZH .‹®º»¾¿‰À¿¾»º®‹. HZfx§¹‘À´“99“´µÀ ¹¤oZNB9“´‘À ´‘4 @NZo¤¹‘À´“99“´…À¿½·µ´µ·½¿¡À ¸ bJA>419Tœ·‘À µ•A!!7?Jb ¸‘À·œT99Tœ·…À½´œ““œ´½¡À µ•A!5qˆ“œ´½‘À ¸ bJ?7!!A•µ‘À½´œ““œ´½…À·œT909Tœ·¡À ´‘41ˆ©µ·½¿‘À ¹¤oZN@ 4‘´‘À¿½·µµ·½¿…À´“9 9“´À ¿¾»º®‹. 0´•À¹§xfZH .‹®º»¾¿™À¿½·µ©ˆ11ˆ©µ·½¿™À ¾¹­¨œ}) 0´•À»¬†wkV )}œ¨­¹¾™À½´œ“ˆq55qˆ“œ´½™À »¬†wkV 0´•À¾¹­¨œ}) Vkw†¬»™À·œT914>ABA>419Tœ·™À ¹§xfZH 0´•À¿¾»º®‹. HZfx§¹™À´“9BNSNB9“´™À ¹¤oZN@ 4‘´™À ´‘4 @NZo¤¹•À ¿½·µ©ˆ1 IZ_ ZI 1ˆ©µ·½¿•À ¸ bJ?7!!A•µ™À µ•A!!7?Jb ¸•À ½´œ“ˆq5-[lr l[-5qˆ“œ´½•À µ•A!!7?Jb ¸™À ¸ bJ?7!!A•µ•À ·œT914>AH[ ¦  [HA>419Tœ·•À ´‘4 @NZo¤¹™À ¹¤oZN@ 4‘´•À ´“9BNYmŸ³¹ ³ŸmYNB9“´‘À¿¾»º®‹. HZfx§¹™À¹§xfZH .‹®º»¾¿À¿¾»º®‹. HZfx§¹À ¹§xfZK 9“´‘À¾¹­¨œ}) Vkw†¬»™À»¬†wkV )}œ¨­¹¾À¾¹­¨œ}) Vkw†¬»À »¬†wnb@49Tœ·‘À»¬†wkV )}œ¨­¹¾™À¾¹­¨œ}) Vkw†¬»À»¬†wkV )}œ¨­¹¾À ¾¹­¨¥¡•‘“œ´½‘À¹§xfZH .‹®º»¾¿™À¿¾»º®‹. HZfx§¹À¹§xfZH .‹®º»¾¿À ¿¾»º¹¸µ´µ·½¿‘À ¹¤oZNB9“´¡À ´‘4 @NZo¤¹À ¹¤oZN@ 4‘´¥À ¸ bJA>419Tœ·¡À µ•A!!7?Jb ¸À ¸ bJ?7!!A•µ¥À µ•A!5qˆ“œ´½¡À ¸ bJ?7!!A•µÀ µ•A!!7?Jb ¸¥À ´‘41ˆ©µ·½¿¡À ¹¤oZN@ 4‘´À ´‘4 @NZo¤¹¥À´“99“´¥À¹§xfZH .‹®º»¾¿…À¿¾»º®‹. HZfx§¹¥À·œT99Tœ·¥À»¬†wkV )}œ¨­¹¾…À¾¹­¨œ}) Vkw†¬»¥À½´œ““œ´½¥À¾¹­¨œ}) Vkw†¬»…À»¬†wkV )}œ¨­¹¾¥À¿½·µµ·½¿¥À¿¾»º®‹. HZfx§¹…À¹§xfZH .‹®º»¾¿ÙÀ ´‘4 @NZo¤¹…À ¹¤oZN@ 4‘´ÝÀ µ•A!!7?Jb ¸…À ¸ bJ?7!!A•µÝÀ ¸ bJ?7!!A•µ…À µ•A!!7?Jb ¸ÝÀ ¹¤oZN@ 4‘´…À ´‘4 @NZo¤¹ÝÀ¹§xfZI 1ˆ©´µ¸¹¹¸µ´©ˆ1 IZfx§¹ÝÀ»¬†wl[-5qˆ‘•¡¥¥¡•‘ˆq5-[lw†¬»ÝÀ¾¹­¨ [HA>414@bnnb@414>AH[ ¨­¹¾ÝÀ¿¾»º³ŸmYNB KZZK BNYmŸ³º»¾¿áÀ¹§xfZH?NN?HZfx§¹åÀ»¬†wkV2>>2Vkw†¬»åÀ¾¹­¨œ})  )}œ¨­¹¾åÀ¿¾»º®‹.  .‹®º»¾¿éÀ´“9… 9“´íÀ·œT9…09Tœ·íÀ½´œ“…“œ´½íÀ¿½·µ…´µ·½¿ÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ“Àÿþ ó ‚0<ñ?<0 0´ñÀ´0 <´áñðá´<?ÀðñÿðÀ??ÀðñÿðÀ??ÀðñÿðÀ??ÀðñÿðÀ??Àð’ÿüóŸðóü¶ÿðÀ??Àð‘ÿüðÏÃÀÃÏðüµÿðÀ??Àð‘ÿóÏoK?KoÏóµÿðÀ??Àð‘ÿðÃKKÃðµÿðÀ??Àð‘ÿðÀ? — ?ÀðµÿðÀ??Àð‘ÿðÀ?0<•?<0?ÀðµÿðÀ??Àð‘ÿðÀ? 0´•À´0 ?ÀðµÿðÀ??Àð‘ÿðÀ?<´á•ðá´<?ÀðµÿðÀ??Àð‚ÿüóŠðá´<?Àð•ÿðÀ?<´á®ðóü‚ÿðÀ??ÀðÿüðÏÉÀ´0 ?Àð•ÿðÀ? 0´­ÀÃÏðüÿðÀ??ÀðÿóÏoK‰?<0?Àð•ÿðÀ?0<­?KoÏóÿðÀ??ÀðÿðÃKŠ ?Àð•ÿðÀ? ®KÃðÿðÀ??ÀðÿðÃKŠ ?Àð•ÿðÀ?   –KÃðÿðÀ??ÀðÿóÏoK‰?<0?Àð•ÿðÀ?0¼ëú ë¼> KÃð’ÿüóðóü–ÿðÀ??ÀðÿðÀ?‚ KÃðÿðÃK >¼ëúûþ“ÿüó‡ðóüšÿðÀ??ÀðÿðÀ?0 +‚£²Áëú‰ÿúëÁ²£‚+ >¼ëúûþ“ÿüóððóüžÿðÀ??Àð‰ÿþúïëܰ: /޲ÁÍïû‰ÿûïÍÁ²Ž/ :°Üëïúþ‘ÿüðÏÃÃÏðüÿðÀ??Àð‰ÿûïÍÁ²Ž/ :°Üëïúþ‰ÿþúïëܰ: /޲ÁÍïû‘ÿóÏoKKoÏóÿðÀ??Àð‰ÿúëÁ²£‚+ >¼ëúûþ‹ÿþûúë¼> +‚£²Áëú‘ÿðÃKKÃðÿðÀ??Àð‰ÿ ù綤•w' ?Àð‘ÿ ðÂG/y•¤¶çù‘ÿðÃKKÃð†ÿüóƒðóüŠÿðÀ??Àð‰ÿ ÷ßž†w_?Àð‘ÿ òÊ_7/?iy†žß÷‘ÿóÏoKKoÏó…ÿüðÏÃÀÃÏðü‰ÿðÀ??Àð‰ÿ òÊ_7( ?Àð‘ÿ ÷ßž†yi?/7_Êò‘ÿüðÏÃÃÏðü…ÿóÏoK?KoÏó‰ÿðÀ??Àð‰ÿ ðÂG ?Àð‘ÿ ù綤•y/GÂð’ÿüóððóü†ÿðÃKKÃð‰ÿðÀ??Àð†ÿþûúë¼>?Àð‘ÿúëÁ²£‚+ >¼ëúûþ›ÿüóðá¶D D¶áðóü†ÿðÀ??Àð…ÿþúïëܰ:?Àð‘ÿûïÍÁ²Ž/ :°Üëïúþ™ÿüðÏöšP4*4Pš¶ÃÏðü…ÿðÀ??Àð…ÿûïÍÁ²Ž/ ?Àð‘ÿþúïëܰ: /޲ÁÍïû™ÿóÏoKCOnz~znOCKoÏó…ÿðÀ??Àð…ÿúëÁ²£‚+ ?Àð’ÿþûúë¼> +‚£²Áëú™ÿðÃK3z•ž•z3KÃð…ÿðÀ??Àð…ÿù綤•y/ ?Àð•ÿ ðÂG/y•¤¶çù–ÿ üóðá¶D3„£­ £„3D¶áðóü‚ÿðÀ??Àð…ÿ÷ßž†yi?/( ?Àð•ÿ òÊ_7/?iy†žß÷•ÿ üðÏöšP43O˜´½ ´˜O34Pš¶ÃÏðüÿðÀ??Àð…ÿòÊ_7/?iyw_?Àð•ÿ ÷ßž†yi?/7_Êò•ÿ óÏoKCOnz…™Ïãê ãÏ™…znOCKoÏóÿðÀ??Àð…ÿðÂG/y••w' ?Àð•ÿ ù綤•y/GÂð•ÿ ðÃK3z•¤µãôú ô㵤•z3KÃðÿðÀ??Àð‚ÿþûúë¼> 'w••w' <´á•ðêÛ³¤•w' >¼ëúøòðòøúë¼> 'w•¤³Ûêð êÛ³¤•w' ?ÀðÿðÀ??Àðÿþúïëܰ:_ww_ 0´•À»¯ƒw_:°ÜèàÊÂÀÂÊàèܰ:_wƒ¯»À »¯ƒw_?ÀðÿðÀ??ÀðÿûïÍÁ²Ž/  (( 0<•?>:/+(  /޲µ_G?G_µ²Ž/  (+/:>? >:/+( ?ÀðÿðÀ??ÀðÿúëÁ²£‚+   —  +‚££…77…££‚+  ƒ  ?ÀðÿðÀ??Àðÿù綤•z3‚  ›  /y••z3 3z••y/ ŽKÃðÿðÀ??Àðÿ÷ßž†znOC?<00<™? >:/+/?iyznOC? COnzyi?/+/:>?KoÏóÿðÀ??ÀðÿòÊ_74Pš¶À´0 0´™À »¯ƒyi?/4Pš¶À ¶šP4/?iyƒ¯»ÀÃÏðüÿðÀ??ÀðÿðÂGD¶áðá´<<´á™ð êÛ³¤•y/D¶áð á¶D/y•¤³ÛêŽðóü‚ÿðÀ??ÀðÿðÃKKÃðÿðÀ??Àð™ÿúëÁ²£‚+ >¼ëúûþ‡ÿþûúë¼> +‚£²Áëú•ÿðÀ??ÀðÿóÏoKKoÏóÿðÀ??Àð™ÿûïÍÁ²Ž/ :°Üëïúþ…ÿþúïëܰ: /޲ÁÍïû•ÿðÀ??ÀðÿüðÏÃÃÏðüÿðÀ??Àð™ÿþúïëܰ: /޲ÁÍïû…ÿûïÍÁ²Ž/ :°Üëïúþ•ÿðÀ??Àð‚ÿüóððóü‚ÿðÀ??Àðšÿþûúë¼> +‚£²Áëú…ÿúëÁ²£‚+ >¼ëúûþ–ÿðÀ??ÀðÿðÀ??Àðÿ ðÂG/y•¤¶çù…ÿ ù綤•y/GÂð™ÿðÀ??ÀðÿðÀ??Àðÿ òÊ_7/?iy†žß÷…ÿ ÷ßž†yi?/7_Êò™ÿðÀ??ÀðÿðÀ??Àðÿ ÷ßž†yi?/7_Êò…ÿ òÊ_7/?iy†žß÷™ÿðÀ??ÀðÿðÀ??Àðÿ ù綤•y/GÂð…ÿ ðÂG/y•¤¶çù™ÿðÀ??ÀðÿðÀ??ÀðÿúëÁ²£„3D¶áðòøúúøòðá¶D3„£²Áëú™ÿðÀ??ÀðÿðÀ??ÀðÿûïÍÁ´˜O34Pš¶ÂÊàèèàʶšP43O˜´ÁÍïû™ÿðÀ??ÀðÿðÀ??ÀðÿþúïëãÏ™…znOCG_µµ_GCOnz…™Ïãëïúþ™ÿðÀ??ÀðÿðÀ??Àðžÿþûúô㵤•z37…££…73z•¤µãôúûþšÿðÀ??ÀðÿðÀ??Àð¡ÿúëÁ²£‚+ 'w••w' +‚£²ÁëúÿðÀ??ÀðÿðÀ??Àð¡ÿûïÍÁ²Ž/ _ww_ /޲ÁÍïûÿðÀ??ÀðÿðÀ??Àð¡ÿþúïëܰ: (( :°ÜëïúþÿðÀ??ÀðÿðÀ??Àð¢ÿþûúë¼> >¼ëúûþžÿðÀ??ÀðÿðÃKKÃð¥ÿðÃK…KÃð¡ÿðÀ??ÀðÿóÏoKKoÏó¥ÿóÏoK…?KoÏó¡ÿðÀ??ÀðÿüðÏÃÃÏðü¥ÿüðÏÃ…ÀÃÏðü¡ÿðÀ??ÀðŽÿüóððóü§ÿüó‡ðóü¢ÿðÀ??ÀðñÿðÀ??ÀðñÿðÀ??ÀðñÿðÀ??ÀðñÿðÀ?<´áñðá´< 0´ñÀ´0 0<ñ?<0‚ ó ÿþÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀƒÀ¿½·µ´µ·½¿ÕÀ½´œ““œ´½ÕÀ·œT909Tœ·ÕÀ´“9 9“´ÕÀ´0  —   0´ÕÀ´0  $-•0-$  0´ÕÀ´0 $l‡•‡l$ 0´ÕÀ´0 -‡©•´©‡- 0´ÅÀ¿½·µ‰´©‡- 0´•À´0 -‡©­´µ·½¿‘À½´œ“‰‡l$ 0´•À´0 $l‡­“œ´½‘À·œT9‰0-$  0´•À´0  $-­09Tœ·‘À´“9Š   0´•À´0  ® 9“´‘À´“9Š   0´•À´0    – 9“´‘À·œT9‰0-$  0´•À´0  $-0-$  $-•09Tœ·‘À½´œ“‰‡l$ 0´•À´0 $l‡‡l$ $l‡•“œ´½‘À¿½·µ‰´©‡- 0´•À´0 -‡©´©‡- -‡©•´µ·½¿¡À´0 -‡©•´©‡- 0´À´0 0´½À´0 $l‡•‡l$ 0´À´0 0´½À´0  $-•0-$  0´À´0 0´½À´0  —   0´À´0 0´½À´“9 9“´À´0 0´½À·œT909Tœ·À´0 0´½À½´œ““œ´½À´0 0´½À¿½·µ´µ·½¿À´0 0´éÀ¿½·µ…´©‡- -‡©…´µ·½¿ÝÀ½´œ“…‡l$ $l‡…“œ´½ÝÀ·œT9…0-$  $-…09Tœ·ÝÀ´“9†   † 9“´­À¿½·µµ·½¿¥À´“9• 9“´­À½´œ““œ´½¥À·œT9•09Tœ·­À·œT99Tœ·¥À½´œ“•“œ´½­À´“99“´¥À¿½·µ•´µ·½¿­À´0 0´õÀ´0 0´õÀ´0 0´õÀ´0 0´õÀ´0 0´¥À¿½·µ•´µ·½¿­À´0 0´¥À½´œ“•“œ´½­À´0 0´¥À·œT9•09Tœ·­À´0 0´¥À´“9• 9“´­À´0 0´¥À´“9†   † 9“´­À´0 0´¥À·œT9…0-$  $-…09Tœ·­À´0 0´¥À½´œ“…‡l$ $l‡…“œ´½­À´0 0´¥À¿½·µ…´©‡- -‡©…´µ·½¿­À´0 0´ƒÀ…ãÀ´0 0´¹À´0 0´‚ÀÃ̃ÏÌâÀ´0 0´¹À´0 0´ÀÃÌäíðíäÌáÀ´0 0´¹À´0 0´ÀÃÏíùüùíÏáÀ´0 0´¹À´0 0´ÀÀÃÃÆÒðüÿüðÒÆÃ×À¿½·µ´©‡- -‡©´µ·½¿±À´0 0´ÀÃÌÏÒÛóüÿüóÛÒÏÌÖÀ½´œ“‡l$ $l‡“œ´½±À´0 0´ÃÌäíðóüƒÿüóðíäÌÕÀ·œT90-$  $-09Tœ·±À ´0 0´ÃÏíùüü…ÿüüùíÏÕÀ´“9‚   ‚ 9“´±À ´0 0“·ÆÒðüÿÿ…üÿÿüðÒÆÃÓÀ´“9 9“´±À´0 3œÃÒÛóüÿüóƒð óüÿüóÛÒÏÌÃ’À·œT909Tœ·±À´0 <´áðóüÿüóÛÒÏ ÒÛóüÿüóðíäÌÑÀ½´œ““œ´½±À´0 ?½íüüÿÿüðÒÆÃ ÆÒðüÿÿüüùíÏÑÀ¿½·µ´µ·½¿±À´0 ?ÀðÿÿüüùíÏÃÀ ÃÏíùüüÿÿüðÒÆÃÓÀ¿½·µ…´µ·½¿µÀ´0 ?ÀðÿüóðíäÌÃÀÃÌäíðóüÿüóÛÒÏÌÃ’À½´œ“…“œ´½µÀ´0 ?ÀðüóÛÒÏÌÃÀÃÌÏÒÛóüÿüóðíäÌÑÀ·œT9…09Tœ·µÀ ´0 ?ÀðüðÒÆÃÃ…À ÃÃÆÒðüÿÿüüùíÏÑÀ´“9… 9“´µÀ ´“<KÃðüðÏÉÀÃÏðüÿüðÏÑÀ´“9… 9“´µÀ ·Ÿ`HKoÏóüðÏÉÀÃÏðüÿüðÏÑÀ·œT9…09Tœ·¹ÀÃÏðüüðÏÉÀÃÏðüÿüðÏÑÀ½´œ“…“œ´½µÀ ÃÌäíðóüÿüðÏÉÀÃÏðüÿüðÏÑÀ¿½·µ…´µ·½¿³À ÃÃÆÒðüÿÿüüùíÏÉÀ ÃÏíùüüÿÿüðÒÆÃÓÀ¿½·µµ·½¿¶ÀÃÌÏÒÛóüÿüóðíäÌÉÀÃÌäíðóüÿüóÛÒÏÌÃ’À½´œ““œ´½µÀÃÌäíðóüÿüóÛÒÏÌËÀÃÌÏÒÛóüÿüóðíäÌÑÀ·œT99Tœ·µÀ ÃÏíùüüÿÿüðÒÆÃÃÀ ÃÃÆÒðüÿÿüüùíÏÑÀ´“99“´µÀ ÃÏðüÿüóðíäÌÑÀÃÏðüÿüðÏÑÀ´“99“´‡À…ãÀÃÏðüüðÏÕÀÃÏðüÿüðÏÑÀ·œT99Tœ·†ÀÃ̃ÏÌâÀ ÃÏðüóÏoKH`Ÿ·‘ÀÃÏðüÿüðÏÑÀ½´œ““œ´½…ÀÃÌäíðíäÌáÀ ÃÏðüðÃK<“´‘ÀÃÏðüÿüðÏÑÀ¿½·µµ·½¿…ÀÃÏíùüùíÏßÀ ÃÃÆÒðüðÀ? 0´‘À ÃÏíùüüÿÿüðÒÆÃÃÀÃÃÆÒðüÿüðÒÆÃÜÀÃÌÏÒÛóüðÀ? 0´‘ÀÃÌäíðóüÿüóÛÒÏÌÛÀÃÌÏÒÛóüÿüóÛÒÏÌÚÀÃÌäíðóüÿðÀ? 0´’ÀÃÌÏÒÛóüÿüóðíäÌÙÀÃÌäíðóüƒÿüóðíäÌÙÀÃÏíùüüÿÿðÀ? 0´“À ÃÃÆÒðüÿÿüüùíÏÙÀÃÏíùüü…ÿüüùíÏÙÀÃÏðüÿðÀ? 0´•ÀÃÏðüÿüðÏ×ÀÃÃÆÒðüÿÿ…üÿÿüðÒÆÃ×ÀÃÏðüÿðÀ? 0´•ÀÃÏðüÿüðÏÖÀ ÃÌÏÒÛóüÿüóƒð óüÿüóÛÒÏÌÖÀÃÏðüÿðÀ? 0´•ÀÃÏðüÿüðÏÕÀ ÃÌäíðóüÿüóÛÒÏ ÒÛóüÿüóðíäÌÕÀÃÏðüÿðÀ? 0´•ÀÃÏðüÿüðÏÕÀ ÃÏíùüüÿÿüðÒÆÃ ÆÒðüÿÿüüùíÏÓÀÃÃÆÒðüÿüóðá´< -‡©•´¸ÃáìðóüÿüðÒÆÂÀ·µ´µ·ÀÂÆÒðüÿüóðìáø´¸ÃáìðíäÌÃ’ÀÃÌÏÒÛóüüðÏô0 $l‡•“œ´½ÃÏðüüóÛÒÌÀŸ““ŸÀÌÒÛóüüðÏý´œ““œ´½™ÀÃÌäíðóüÿóÏoK<0 $-–03 CFBundleDevelopmentRegion English CFBundleExecutable gspiceui CFBundleGetInfoString gspiceui version 0.7.18 CFBundleIconFile GSpiceUI.icns CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString 0.7.01 CFBundleName gspiceui CFBundlePackageType APPL CFBundleShortVersionString 0.7.01 CFBundleSignature ???? CFBundleVersion 0.7.01 gspiceui-1.1.00+dfsg/src/0000755000000000000000000000000012525200532013601 5ustar rootrootgspiceui-1.1.00+dfsg/src/TypeDefs.cpp0000644000000000000000000000363212432271155016042 0ustar rootroot//************************************************************************************************** // TypeDefs.cpp * // -------------- * // Started : 2009-05-07 * // Last Update : 2014-11-17 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "TypeDefs.hpp" //************************************************************************************************** // The following completes the definition of new array types. It expands into some C++ code and so // should only be compiled once (ie. don't put this into a header file rather put it in a source // file or there will be linker errors). #include WX_DEFINE_OBJARRAY( ArrayFileName ); //************************************************************************************************** gspiceui-1.1.00+dfsg/src/utility/0000755000000000000000000000000012507467106015320 5ustar rootrootgspiceui-1.1.00+dfsg/src/utility/ChoUnits.cpp0000644000000000000000000003623112460726021017555 0ustar rootroot//************************************************************************************************** // ChoUnits.cpp * // -------------- * // Started : 2004-03-27 * // Last Update : 2015-01-24 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "ChoUnits.hpp" //************************************************************************************************** // Constructor. ChoUnits::ChoUnits( void ) : UnitsBase( ), wxChoice( ) { bClear( ); } //************************************************************************************************** // Destructor. ChoUnits::~ChoUnits( ) { } //************************************************************************************************** // Create an instance of this object. // // Argument List : // poWin - The parent window // oWinID - The window identifier // iWidth - The width of the choice control in pixels // // Return Values : // true - Success // false - Failure bool ChoUnits::bCreate( wxWindow * poWin, wxWindowID oWinID, int iWidth ) { // Check if the object has already been created if( bIsCreated( ) ) return( true ); // Create the object #if wxCHECK_VERSION( 3,0,0 ) if( ! wxChoice::Create( poWin, oWinID, wxDefaultPosition, wxSize( iWidth, -1) ) ) return( false ); #else if( ! wxChoice::Create( poWin, oWinID, wxDefaultPosition, wxSize( iWidth, GUI_CTRL_HT ) ) ) return( false ); #endif // Set the units if( ! bSetUnitsType( m_eUnitsType ) ) return( false ); if( ! bSetUnits( m_osDefUnits ) ) return( false ); return( true ); } //************************************************************************************************** // Clear object attributes. // // Return Values : // Success - true // Failure - false bool ChoUnits::bClear( void ) { m_eUnitsType = eUNITS_NONE; m_osDefUnits = wxT("Units"); if( bIsCreated( ) ) Clear( ); return( true ); } //************************************************************************************************** // Set the type of units to be displayed. // // Argument List : // eUType - The type of units to be displayed // // Return Values : // Success - true // Failure - false bool ChoUnits::bSetUnitsType( eTypeUnits eUType ) { int i1; if( ! bIsCreated( ) ) return( false ); if( eUType==m_eUnitsType && !IsEmpty( ) ) return( true ); // Load the new choice items into the control switch( eUType ) { case eUNITS_CAP : // Capacitance Clear( ); // Delete existing choice items from the list Append( wxT("F") , new wxStringClientData( wxT("0") ) ); Append( wxT("mF") , new wxStringClientData( wxT("-3") ) ); Append( wxT("uF") , new wxStringClientData( wxT("-6") ) ); Append( wxT("nF") , new wxStringClientData( wxT("-9") ) ); Append( wxT("pF") , new wxStringClientData( wxT("-12") ) ); m_osDefUnits = wxT("uF"); break; case eUNITS_IND : // Inductance Clear( ); Append( wxT("H") , new wxStringClientData( wxT("0") ) ); Append( wxT("mH") , new wxStringClientData( wxT("-3") ) ); Append( wxT("uH") , new wxStringClientData( wxT("-6") ) ); m_osDefUnits = wxT("mH"); break; case eUNITS_RES : // Resistance Clear( ); Append( wxT("GOhm") , new wxStringClientData( wxT("9") ) ); Append( wxT("MOhm") , new wxStringClientData( wxT("6") ) ); Append( wxT("kOhm") , new wxStringClientData( wxT("3") ) ); Append( wxT("Ohm") , new wxStringClientData( wxT("0") ) ); Append( wxT("mOhm") , new wxStringClientData( wxT("-3") ) ); Append( wxT("uOhm") , new wxStringClientData( wxT("-6") ) ); Append( wxT("nOhm") , new wxStringClientData( wxT("-9") ) ); m_osDefUnits = wxT("kOhm"); break; case eUNITS_COND : // Conductance Clear( ); Append( wxT("kS") , new wxStringClientData( wxT("3") ) ); Append( wxT("S") , new wxStringClientData( wxT("0") ) ); Append( wxT("mS") , new wxStringClientData( wxT("-3") ) ); Append( wxT("uS") , new wxStringClientData( wxT("-6") ) ); Append( wxT("nS") , new wxStringClientData( wxT("-9") ) ); Append( wxT("pS") , new wxStringClientData( wxT("-12") ) ); Append( wxT("fS") , new wxStringClientData( wxT("-15") ) ); m_osDefUnits = wxT("mS"); break; case eUNITS_VOLT : // Voltage Clear( ); Append( wxT("MV") , new wxStringClientData( wxT("6") ) ); Append( wxT("kV") , new wxStringClientData( wxT("3") ) ); Append( wxT("V") , new wxStringClientData( wxT("0") ) ); Append( wxT("mV") , new wxStringClientData( wxT("-3") ) ); Append( wxT("uV") , new wxStringClientData( wxT("-6") ) ); Append( wxT("nV") , new wxStringClientData( wxT("-9") ) ); Append( wxT("pV") , new wxStringClientData( wxT("-12") ) ); Append( wxT("fV") , new wxStringClientData( wxT("-15") ) ); m_osDefUnits = wxT("mV"); break; case eUNITS_CURR : // Current Clear( ); Append( wxT("kA") , new wxStringClientData( wxT("3") ) ); Append( wxT("A") , new wxStringClientData( wxT("0") ) ); Append( wxT("mA") , new wxStringClientData( wxT("-3") ) ); Append( wxT("uA") , new wxStringClientData( wxT("-6") ) ); Append( wxT("nA") , new wxStringClientData( wxT("-9") ) ); Append( wxT("pA") , new wxStringClientData( wxT("-12") ) ); m_osDefUnits = wxT("mA"); break; case eUNITS_TIME : // Time Clear( ); Append( wxT("Sec") , new wxStringClientData( wxT("0") ) ); Append( wxT("mSec") , new wxStringClientData( wxT("-3") ) ); Append( wxT("uSec") , new wxStringClientData( wxT("-6") ) ); Append( wxT("nSec") , new wxStringClientData( wxT("-9") ) ); Append( wxT("pSec") , new wxStringClientData( wxT("-12") ) ); m_osDefUnits = wxT("mSec"); break; case eUNITS_FREQ : // Frequency Clear( ); Append( wxT("THz") , new wxStringClientData( wxT("12") ) ); Append( wxT("GHz") , new wxStringClientData( wxT("9") ) ); Append( wxT("MHz") , new wxStringClientData( wxT("6") ) ); Append( wxT("kHz") , new wxStringClientData( wxT("3") ) ); Append( wxT("Hz") , new wxStringClientData( wxT("0") ) ); m_osDefUnits = wxT("kHz"); break; case eUNITS_CHRG : // Charge Clear( ); Append( wxT("C") , new wxStringClientData( wxT("0") ) ); Append( wxT("mC") , new wxStringClientData( wxT("-3") ) ); Append( wxT("uC") , new wxStringClientData( wxT("-6") ) ); Append( wxT("nC") , new wxStringClientData( wxT("-9") ) ); Append( wxT("pC") , new wxStringClientData( wxT("-12") ) ); Append( wxT("fC") , new wxStringClientData( wxT("-15") ) ); m_osDefUnits = wxT("uC"); break; case eUNITS_PHAD : // Phase / angle case eUNITS_PHAR : Clear( ); Append( wxT("Degree") , new wxStringClientData( wxT("0") ) ); Append( wxT("Radian") , new wxStringClientData( wxT("0") ) ); m_osDefUnits = wxT("Degree"); break; case eUNITS_TMPC : // Temperature case eUNITS_TMPF : Clear( ); Append( wxT("Deg.C") , new wxStringClientData( wxT("0") ) ); Append( wxT("Deg.F") , new wxStringClientData( wxT("0") ) ); m_osDefUnits = wxT("Deg.C"); break; case eUNITS_EXP : // Dimensionless, append an exponent Clear( ); // Append( wxT("x 1E21") , new wxStringClientData( wxT("21") ) ); // Append( wxT("x 1E18") , new wxStringClientData( wxT("18") ) ); Append( wxT("x 1E15") , new wxStringClientData( wxT("15") ) ); Append( wxT("x 1E12") , new wxStringClientData( wxT("12") ) ); Append( wxT("x 1E9") , new wxStringClientData( wxT("9") ) ); Append( wxT("x 1E6") , new wxStringClientData( wxT("6") ) ); Append( wxT("x 1E3") , new wxStringClientData( wxT("3") ) ); Append( wxT("x 1") , new wxStringClientData( wxT("0") ) ); Append( wxT("x 1E-3") , new wxStringClientData( wxT("-3") ) ); Append( wxT("x 1E-6") , new wxStringClientData( wxT("-6") ) ); Append( wxT("x 1E-9") , new wxStringClientData( wxT("-9") ) ); Append( wxT("x 1E-12"), new wxStringClientData( wxT("-12") ) ); Append( wxT("x 1E-15"), new wxStringClientData( wxT("-15") ) ); // Append( wxT("x 1E-18"), new wxStringClientData( wxT("-18") ) ); // Append( wxT("x 1E-21"), new wxStringClientData( wxT("-21") ) ); m_osDefUnits = wxT("x 1"); break; case eUNITS_NONE : // No units specified Clear( ); Append( wxT("Units") , new wxStringClientData( wxT("0") ) ); m_osDefUnits = wxT("Units"); break; default : return( false ); } // Set the new units type m_eUnitsType = eUType; // Select the default units i1 = FindString( m_osDefUnits, true ); // Do case sensitive string search if( i1 != wxNOT_FOUND ) SetSelection( i1 ); return( true ); } //************************************************************************************************** // Set the units to be displayed. // // Note : If a units type is specified in the function argument it must correspond with the type // currently set in this class instance. // // Argument List: // rosUnits - The units to be displayed as a string // // Return Values: // Success - true // Failure - false bool ChoUnits::bSetUnits( const wxString & rosUnits ) { eTypeUnits eUType; int i1; if( ! bIsCreated( ) ) return( false ); // Are a different units type specified in the function argument? if( UnitsBase::bGetUnitsType( rosUnits, &eUType ) ) if( eUType != eGetUnitsType( ) ) return( false ); // Check that the specified units are supported i1 = FindString( rosUnits ); if( i1 == wxNOT_FOUND ) return( false ); // Set the units displayed in the control SetSelection( i1 ); return( true ); } //************************************************************************************************** // Set the units to be displayed. // // Argument List : // iExp - The exponent associated with the units to be displayed // // Return Values : // Success - true // Failure - false bool ChoUnits::bSetUnits( int iExp ) { wxString os1; long li1; uint ui1; if( ! bIsCreated( ) ) return( false ); for( ui1=0; ui1GetData( ); os1.ToLong( &li1 ); if( (int) li1 == iExp ) { SetSelection( ui1 ); return( true ); } } return( false ); } //************************************************************************************************** // Set the default units. // // Argument List : // rosUnits - The default units to be used // // Return Values : // Success - true // Failure - false bool ChoUnits::bSetDefUnits( const wxString & rosUnits ) { // Don't proceed unless the display object has been created if( ! bIsCreated( ) ) return( false ); // Attempt to find the specified units if( FindString( rosUnits ) == wxNOT_FOUND ) return( false ); // Set the default units m_osDefUnits = rosUnits; return( true ); } //************************************************************************************************** // Get the currently selected units. // // Return Values : // Success - The selected units // Failure - An empty string const wxString & ChoUnits::rosGetUnits( void ) { static wxString osUnits; osUnits.Empty( ); if( ! bIsCreated( ) ) return( osUnits ); osUnits = GetStringSelection( ); return( osUnits ); } //************************************************************************************************** // Get the currently selected units as an exponent. // // Eg. if the units are mV return -3 or if the units are MOhm return 6. // // Return Values : // Success - The units exponent // Failure - 0 int ChoUnits::iGetUnits( void ) { wxString os1; long i1; if( ! bIsCreated( ) ) return( 0 ); i1 = GetSelection( ); if( i1 == wxNOT_FOUND ) return( 0 ); os1 = ( (wxStringClientData *) GetClientObject( i1 ) )->GetData( ); if( ! CnvtType::bStrToInt( os1, &i1 ) ) return( 0 ); return( i1 ); } //************************************************************************************************** // Print the object attributes. // // Argument List : // rosPrefix - A prefix to every line displayed (usually just spaces) void ChoUnits::Print( const wxString & rosPrefix ) { std::cout << rosPrefix.mb_str( ) << "m_eUnitsType : "; switch( m_eUnitsType ) { case eUNITS_CAP : std::cout << "eUNITS_CAP"; break; case eUNITS_IND : std::cout << "eUNITS_IND"; break; case eUNITS_RES : std::cout << "eUNITS_RES"; break; case eUNITS_COND : std::cout << "eUNITS_COND"; break; case eUNITS_VOLT : std::cout << "eUNITS_VOLT"; break; case eUNITS_CURR : std::cout << "eUNITS_CURR"; break; case eUNITS_TIME : std::cout << "eUNITS_TIME"; break; case eUNITS_FREQ : std::cout << "eUNITS_FREQ"; break; case eUNITS_CHRG : std::cout << "eUNITS_CHRG"; break; case eUNITS_PHAD : std::cout << "eUNITS_PHAD"; break; case eUNITS_PHAR : std::cout << "eUNITS_PHAR"; break; case eUNITS_TMPC : std::cout << "eUNITS_TMPC"; break; case eUNITS_TMPF : std::cout << "eUNITS_TMPF"; break; case eUNITS_PCT : std::cout << "eUNITS_PCT"; break; case eUNITS_EXP : std::cout << "eUNITS_EXP"; break; case eUNITS_NONE : std::cout << "eUNITS_NONE"; break; default : std::cout << "Invalid"; } std::cout << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osDefUnits : " << m_osDefUnits.mb_str( ) << '\n'; } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/utility/StrUtils.cpp0000644000000000000000000002751512455753724017635 0ustar rootroot//************************************************************************************************** // StrUtils.cpp * // -------------- * // Started : 2008-05-15 * // Last Update : 2015-01-15 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "StrUtils.hpp" //************************************************************************************************** // Compare algorithm for sorting node labels. // // As a general rule node labels are automatically generated and are purely numeric. Where a label // diverges from this form it's often because the user has identified it as having some special // significance. When displayed in a list control on a GUI it's more convenient to have these // labels positioned towards the top. // // Argument List : // rosArg1 - a reference to the first string to be compared // rosArg2 - a reference to the second string to be compared // // Return Values : // If ros1 > ros2 then -1 // If ros1 = ros2 then 0 // If ros1 < ros2 then 1 int iStrCmpNode( const wxString & rosArg1, const wxString & rosArg2 ) { wxChar oc1, oc2; size_t sz1, sz2; long li1, li2; // First look for empty strings sz1 = rosArg1.Len( ); sz2 = rosArg2.Len( ); if( sz1==0 && sz2!=0 ) return( 1 ); if( sz1==0 && sz2==0 ) return( 0 ); if( sz1!=0 && sz2==0 ) return( -1 ); // Now do some simple tests oc1 = rosArg1.at( 0 ); oc2 = rosArg2.at( 0 ); if( wxIsalpha( oc1 ) && wxIsdigit( oc2 ) ) return( -1 ); if( wxIsdigit( oc1 ) && wxIsalpha( oc2 ) ) return( 1 ); // If the node names are purely numeric do the compare if( rosArg1.ToLong( &li1 ) && rosArg2.ToLong( &li2 ) ) { if( li1 > li2 ) return( 1 ); if( li1 == li2 ) return( 0 ); if( li1 < li2 ) return( -1 ); } // It's all got too hard, just compare the labels as component labels return( iStrCmpCpnt( rosArg1, rosArg2 ) ); } //************************************************************************************************** // Compare algorithm for sorting component labels. // // As a rule component labels are comprised of a single letter (signifying the component type) // followed by a number. Where a label diverges from this form it's often because the user has // identified it as having some significance. When displayed in a list control on a GUI it's more // convenient to have these special labels positioned towards the top. Any remaining labels are // simply sorted alphabetically. // // Argument List : // rosArg1 - a reference to the first string to be compared // rosArg2 - a reference to the second string to be compared // // Return Values : // If ros1 > ros2 then -1 // If ros1 = ros2 then 0 // If ros1 < ros2 then 1 int iStrCmpCpnt( const wxString & rosArg1, const wxString & rosArg2 ) { wxString osStr1, osStr2; ulong ulNum1, ulNum2; wxString osEnd1, osEnd2; wxString os1; wxChar oc1; size_t sz1, sz2; // First look for empty strings sz1 = rosArg1.Len( ); sz2 = rosArg2.Len( ); if( sz1==0 && sz2!=0 ) return( 1 ); if( sz1==0 && sz2==0 ) return( 0 ); if( sz1!=0 && sz2==0 ) return( -1 ); // Parse the first alpha and numeric components of the first argument for( sz1=0, osStr1=wxT(""); sz1 sz2 ) return( -1 ); if( sz1 < sz2 ) return( 1 ); // Compare the first numeric component of the two arguments sz1 = osEnd1.Len( ); sz2 = osEnd2.Len( ); if( sz1==0 && sz2==0 ) { if( ulNum1 > ulNum2 ) return( 1 ); if( ulNum1 == ulNum2 ) return( 0 ); if( ulNum2 > ulNum1 ) return( -1 ); } if( sz1 > sz2 ) return( -1 ); else return( 1 ); // If all else fails do it all again //std::cout << "\niStrCmpCpnt( ) : Look out! Re-entrance\n"; return( iStrCmpCpnt( osEnd1, osEnd2 ) ); } //************************************************************************************************** // Compare algorithm for sorting signal source labels. // // Signal source labels form a sub-set of all component labels which, as a general rule, are // comprised of a single letter (signifying the component type) followed by a number. Where a label // diverges from this form it's often because the user has identified it as having some special // significance. When displayed in a list control on a GUI it's more convenient to have these // significant labels positioned towards the top. // // Argument List : // rosArg1 - a reference to the first string to be compared // rosArg2 - a reference to the second string to be compared // // Return Values : // If ros1 > ros2 then -1 // If ros1 = ros2 then 0 // If ros1 < ros2 then 1 int iStrCmpSrc( const wxString & rosArg1, const wxString & rosArg2 ) { eTypeCpnt eCpnt1, eCpnt2; size_t sz1, sz2; // First look for empty strings sz1 = rosArg1.Len( ); sz2 = rosArg2.Len( ); if( sz1==0 && sz2!=0 ) return( 1 ); if( sz1==0 && sz2==0 ) return( 0 ); if( sz1!=0 && sz2==0 ) return( -1 ); // Compare component types eCpnt1 = Component::eGetType( rosArg1 ); eCpnt2 = Component::eGetType( rosArg2 ); switch( eCpnt1 ) { case eCPNT_IVS : sz1 = 5; break; case eCPNT_ICS : sz1 = 4; break; case eCPNT_IND : sz1 = 3; break; case eCPNT_CAP : sz1 = 2; break; case eCPNT_RES : sz1 = 1; break; default : sz1 = 0; break; } switch( eCpnt2 ) { case eCPNT_IVS : sz2 = 5; break; case eCPNT_ICS : sz2 = 4; break; case eCPNT_IND : sz2 = 3; break; case eCPNT_CAP : sz2 = 2; break; case eCPNT_RES : sz2 = 1; break; default : sz2 = 0; break; } if( sz1>0 && sz2>0 ) { if( sz1 > sz2 ) return( -1 ); if( sz1 < sz2 ) return( 1 ); } // It's all got too hard, just compare the labels as component labels return( iStrCmpCpnt( rosArg1, rosArg2 ) ); } //************************************************************************************************** // Reduce a string down so that it can be displayed in a single line. // // (This function is intended for debugging purposes. Multi-line and formated messages can be sent // to std::cout or std::cerr.) // // Argument List : // ros - The string to be reformatted // // Return Values : // A reference to string containing a single line const wxString & rosStrToLine( const wxString & ros ) { static wxString os1; size_t sz1; char c1; // Copy the input string os1 = ros; // Remove white-space (space, tab, '\n' & '\r') from both ends of the string os1.Trim( false ); os1.Trim( true ); // Replace '\n' & '\r' within the string with space characters for( sz1=0; sz1 2 ) { Usage( argv[0] ); exit( EXIT_FAILURE ); } // Process the command line arguments os1 = wxConvLibc.cMB2WC( argv[ 1 ] ); if( argc > 1 ) { if( os1.at( 0 ) == wxT('-') ) { if( os1.at( 1 ) == wxT('h') ) { Usage( argv[0] ); exit( EXIT_SUCCESS ); } else { Usage( argv[0] ); exit( EXIT_FAILURE ); } } } // Display the utility banner cout << "\n StrUtils Test Utility" << "\n Version 1.02 (04/04/2014)\n"; // Exercise the function : iStrCmpCpnt( ) oas1.Empty( ); oas1.Add( wxT("3,1") ); oas1.Add( wxT("2,0") ); std::cout << "\nTest iStrCmpCpnt( ) :\n"; std::cout << " Before : "; PrintArray( oas1 ); oas1.Sort( &iStrCmpCpnt ); std::cout << " After : "; PrintArray( oas1 ); // */ // Exercise the function : iStrCmpNode( ) oas1.Empty( ); oas1.Add( wxT("Vcc") ); oas1.Add( wxT("1") ); oas1.Add( wxT("2") ); oas1.Add( wxT("2SK1058_Drive") ); oas1.Add( wxT("3") ); oas1.Add( wxT("V1") ); std::cout << "\nTest iStrCmpNode( ) :\n"; std::cout << " Before : "; PrintArray( oas1 ); oas1.Sort( &iStrCmpNode ); std::cout << " After : "; PrintArray( oas1 ); // */ // Exercise the function : iStrCmpSrc( ) oas1.Empty( ); oas1.Add( wxT("Iin") ); oas1.Add( wxT("Rin") ); oas1.Add( wxT("Vin") ); oas1.Add( wxT("V2") ); oas1.Add( wxT("I1") ); std::cout << "\nTest iStrCmpSrc( ) :\n"; std::cout << " Before : "; PrintArray( oas1 ); oas1.Sort( &iStrCmpNode ); std::cout << " After : "; PrintArray( oas1 ); // */ std::cout << '\n'; exit( EXIT_SUCCESS ); } //************************************************************************************************** void Usage( char * psAppName ) { cout << "\nUsage : " << psAppName << " [-OPTIONS]" << "\nOptions :" << "\n -h : Print usage (this message)\n"; } //************************************************************************************************** void PrintArray( wxArrayString & roas ) { size_t sz1; for( sz1=0; sz1 0 ) std::cout << " "; std::cout << roas.Item( sz1 ).mb_str( ); } std::cout << '\n'; } //************************************************************************************************** #endif // TEST_STRUTILS gspiceui-1.1.00+dfsg/src/utility/PnlLblCho.hpp0000644000000000000000000000555012473352544017654 0ustar rootroot//************************************************************************************************** // PnlLblCho.hpp * // --------------- * // Description : This class extends wxPanel, and can substitute for the wxWidgets library class * // wxChoice. It adds a label to the left of a wxChoice control. * // Started : 2014-02-20 * // Last Update : 2015-02-25 * // Copyright : (C) 2014 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef PNLLBLCHO_HPP #define PNLLBLCHO_HPP // Application Includes #include "TypeDefs.hpp" //************************************************************************************************** class PnlLblCho : public wxPanel { private : void DoLayout ( void ); public : wxLabel m_oLblName; // The choice control name displayed to the left wxChoice m_oChoice; // The wxChoice object to contain the items PnlLblCho ( void ); ~PnlLblCho ( ); bool bCreate ( wxWindow * poWin, wxWindowID oWinID, int iNameWd=-1, int iChoiceWd=-1, const wxPoint & roPosn=wxDefaultPosition ); bool bIsCreated( void ) { return( GetParent( )!=NULL ? true : false ); } private : // Event handlers // void OnText( wxCommandEvent & roEvtCmd ); // In order to be able to react to a menu command, it must be given a // unique identifier such as a const or an enum. enum ePnlItemID { ID_CHOICE = 1, ID_UNUSED, ID_FST = ID_CHOICE, ID_LST = ID_CHOICE }; // Leave this as the last line as private access is envoked by macro // wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // PNLLBLCHO_HPP gspiceui-1.1.00+dfsg/src/utility/PnlLblTxt.cpp0000644000000000000000000001270612450000213017670 0ustar rootroot//************************************************************************************************** // PnlLblTxt.cpp * // --------------- * // Started : 2014-02-22 * // Last Update : 2014-11-28 * // Copyright : (C) 2014 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "PnlLblTxt.hpp" //************************************************************************************************** // Implement an event table. //wxBEGIN_EVENT_TABLE( PnlLblTxt, wxPanel ) // EVT_CHOICE( ID_TXTCTRL, PnlLblTxt::OnText ) //wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. PnlLblTxt::PnlLblTxt( void ) : wxPanel( ) { } //************************************************************************************************** // Destructor. PnlLblTxt::~PnlLblTxt( ) { } //************************************************************************************************** // Layout the display objects. void PnlLblTxt::DoLayout( void ) { wxBoxSizer * poSzr; wxSizerFlags oFlags; poSzr = new wxBoxSizer( wxHORIZONTAL ); oFlags.Proportion( 1 ); oFlags.Border( wxTOP, 8 ); poSzr->Add( &m_oLblName, oFlags ); oFlags.Proportion( 0 ); oFlags.Border( wxTOP, 0 ); poSzr->Add( &m_oTxtCtrl, oFlags ); // Set the panel sizer and the min. & init. sizes as calculated by the sizer SetSizer( poSzr ); poSzr->SetSizeHints( this ); } //************************************************************************************************** // Create an instance of this object. // // Argument List : // poWin - The parent window // oWinID - The window identifier // iNameWd - The width of the name label in pixels // iTextWd - The width of the text control in pixels // roPosn - The position // // Return Values : // true - Success // false - Failure bool PnlLblTxt::bCreate( wxWindow * poWin, wxWindowID oWinID, int iNameWd, int iTextWd, const wxPoint & roPosn ) { if( bIsCreated( ) ) return( true ); // Create the base class (wxPanel) if( ! wxPanel::Create( poWin, oWinID, roPosn ) ) return( false ); // Create the variable name label m_oLblName.Create( this, ID_UNUSED, wxT("Unknown"), wxDefaultPosition, wxSize( iNameWd, GUI_CTRL_HT ), wxALIGN_LEFT ); // Create the text control m_oTxtCtrl.Create( this, ID_TXTCTRL, wxT("") , wxDefaultPosition, wxSize( iTextWd, GUI_CTRL_HT ), wxTE_LEFT ); // Layout the display objects DoLayout( ); return( true ); } //************************************************************************************************** // Set the name label. // // Argument List : // rosName - The name of the variable // // Return Values : // Success - true // Failure - false bool PnlLblTxt::bSetName( const wxString & rosName ) { if( ! bIsCreated( ) ) return( false ); if( rosName.IsEmpty( ) ) return( false ); m_oLblName.SetLabel( rosName ); return( true ); } //************************************************************************************************** // Set the text control contents. // // Argument List : // rosText - The text control contents // // Return Values : // Success - true // Failure - false bool PnlLblTxt::bSetText( const wxString & rosText ) { if( ! bIsCreated( ) ) return( false ); m_oTxtCtrl.SetValue( rosText ); return( true ); } //************************************************************************************************** // Get the control contents as a string. // // Return Values : // A reference to the control string contents const wxString & PnlLblTxt::rosGetText( void ) { static wxString os1; os1 = m_oTxtCtrl.GetValue( ); return( os1 ); } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // Choice control an item on the list is selected event handler. // // Argument List : // roEvtCmd - An object holding information about the event /* void PnlLblTxt::OnText( wxCommandEvent & roEvtCmd ) { } */ //************************************************************************************************** gspiceui-1.1.00+dfsg/src/utility/ChoUnits.hpp0000644000000000000000000000564312477244555017604 0ustar rootroot//************************************************************************************************** // ChoUnits.hpp * // -------------- * // Description : This class is intended to provide useful functionality for managing the units * // associated with some variable. It is particular aimed at parameters to do with * // electronics. * // Started : 2004-03-27 * // Last Update : 2015-03-09 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef CHOUNITS_HPP #define CHOUNITS_HPP // Application Includes #include "TypeDefs.hpp" #include "base/UnitsBase.hpp" //************************************************************************************************** class ChoUnits : public UnitsBase, public wxChoice { private : eTypeUnits m_eUnitsType; wxString m_osDefUnits; public : ChoUnits( void ); ~ChoUnits( ); bool bCreate ( wxWindow * poWin, wxWindowID oWinID, int iWidth=-1 ); bool bIsCreated ( void ) { return( GetParent( )!=NULL ? true : false ); } bool bClear ( void ); bool bSetUnitsType( eTypeUnits eUType ); bool bSetUnits ( const wxString & rosUnits ); bool bSetUnits ( int iExp ); bool bSetDefUnits ( const wxString & rosUnits ); inline eTypeUnits eGetUnitsType( void ) { return( m_eUnitsType ); } const wxString & rosGetUnits ( void ); int iGetUnits ( void ); inline const wxString & rosGetDefUnits ( void ) { return( m_osDefUnits ); } void Print( const wxString & rosPrefix=wxT(" ") ); }; //************************************************************************************************** #endif // CHOUNITS_HPP gspiceui-1.1.00+dfsg/src/utility/CnvtType.cpp0000644000000000000000000006707112501543234017602 0ustar rootroot//************************************************************************************************** // CnvtType.hpp * // -------------- * // Started : 2004-09-21 * // Last Update : 2015-03-16 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "CnvtType.hpp" //************************************************************************************************** // Allocate storage for static data members. int CnvtType::m_iFltRes = CNVT_DEF_FLT_RES; //************************************************************************************************** // Constructor. CnvtType::CnvtType( void ) { } //************************************************************************************************** // Destructor. CnvtType::~CnvtType( ) { } //************************************************************************************************** // Extract the numeric part of a string and convert it to scientific notation ie. a mantissa and // exponent. // // (Eg. 10.0E-2uVolt becomes 10.0E-8 and 0.0E-2uF becomes 0.0E-8) // // Argument List : // rosNum - The string containing a numeric value // // Return Values : // Success - The numeric part of the string // Failure - An empty string TYPE_STR & CnvtType::rosGetNum( const TYPE_STR & rosNum ) { static TYPE_STR osNum; // The number to be returned TYPE_STR osInt; // The integer part of the number TYPE_STR osFrac; // The part of the string after a decimal point TYPE_STR osExp; // The exponent part of the string TYPE_CHR oc1; size_t sz1, sz2; long li1; int i1; #ifndef __WXGTK__ stringstream oss1; #endif // Clear the local static variable osNum = wxT(""); // Basic argument test if( rosNum.length( ) <= 0 ) return( osNum ); // Extract the first non-space character (any leading non-space characters are a show stopper) sz1 = rosNum.find_first_of( wxT("+-.0123456789") ); if( sz1 == std::string::npos ) return( osNum ); for( sz2=0; sz2> li1; if( oss1.fail( ) ) li1 = 0; #endif if( CnvtType::bUnitPfxToExp( oc1, &i1 ) ) li1 += (long) i1; if( li1 != 0 ) #ifdef __WXGTK__ osExp = wxString::Format( wxT("%i"), (int) li1 ); #else osExp = to_string( li1 ); #endif // Construct the number string #ifdef __WXGTK__ osNum << osInt; if( osFrac.length( ) > 0 ) osNum << wxT('.') << osFrac; if( osExp .length( ) > 0 ) osNum << wxT('E') << osExp; #else osNum += osInt; if( osFrac.length( ) > 0 ) osNum += '.' + osFrac; if( osExp .length( ) > 0 ) osNum += 'E' + osExp; #endif return( osNum ); } //************************************************************************************************** // Test if two floats are equal taking into account boundary conditions. // // Argument List : // f1 - The 1st float to test // f2 - The 2nd float to test // // Return Values : // true - The floats are equal // false - The floats aren't equal bool CnvtType::bIsEqual( float f1, float f2 ) { float fMax; // Determine fMax ie. the largest of : f1, f2 and 1.0 fMax = std::max( fabsf( f1 ), fabsf( f2 ) ); fMax = std::max( float( 1.0 ), fMax ); // Determine if f1 and f2 differ significantly #if wxCHECK_VERSION( 3,0,0 ) return( fabsf( f1 - f2 ) <= std::numeric_limits::epsilon( ) * fMax ); #else return( fabsf( f1 - f2 ) <= FLT_EPSILON * fMax ); #endif } //************************************************************************************************** bool CnvtType::bIsEqual( double df1, double df2 ) { double dfMax; // Determine dfMax ie. the largest of : df1, df2 and 1.0 dfMax = std::max( std::fabs( df1 ), std::fabs( df2 ) ); dfMax = std::max( 1.0, dfMax ); // Determine if df1 and df2 differ significantly #if wxCHECK_VERSION( 3,0,0 ) return( fabs( df1 - df2 ) <= std::numeric_limits::epsilon( ) * dfMax ); #else return( std::fabs( df1 - df2 ) <= DBL_EPSILON * dfMax ); #endif } //************************************************************************************************** // Set the resolution of conversions from floats to strings. // // (Ie. the number of digits after the decimal point.) // // Argument List : // iFltRes - The desired resolution // // Return Values : // true - Success // false - Failure bool CnvtType::bSetFltRes( int iFltRes ) { if( iFltResCNVT_MAX_FLT_RES ) return( false ); m_iFltRes = iFltRes; return( true ); } //************************************************************************************************** // Is the argument string a pure integer number? // // Ie. all characters in the string are part of a valid integer number. // // Argument List : // rosStr - The string to test // // Return Values : // true - The string is a integer // false - The string isn't a integer bool CnvtType::bIsInteger( const TYPE_STR & rosStr ) { TYPE_STR os1; double df1, df2; os1 = rosGetNum( rosStr ); if( os1.empty( ) ) return( false ); if( rosStr.find( '.' ) != std::string::npos ) return( false ); if( ! bStrToDbl( rosStr, &df1 ) ) return( false ); if( modf( df1, &df2 ) != 0.0 ) return( false ); return( true ); } //************************************************************************************************** // Is the argument string a pure floating point number? // // Ie. all characters in the string are part of a valid floating point number and the number has a // non-zero fractional part. // // Argument List : // rosStr - The string to test // // Return Values : // true - The string is a float // false - The string isn't a float bool CnvtType::bIsFloat( const TYPE_STR & rosStr ) { TYPE_STR os1; double df1, df2; os1 = rosGetNum( rosStr ); if( os1.empty( ) ) return( false ); if( rosStr.find( '.' ) != std::string::npos ) return( true ); if( ! bStrToDbl( rosStr, &df1 ) ) return( false ); if( modf( df1, &df2 ) == 0.0 ) return( false ); return( true ); } //************************************************************************************************** // Parse a float value into it's mantissa and exponent. // // Argument List : // fNum - The float value to be parsed // pfMan - A pointer to float to hold the mantissa (1.000 to 9.999) // piExp - A pointer to integer to hold the exponent // // Return Values : // Success - true // Failure - false bool CnvtType::bParseFlt( float fNum, float * pfMan, int * piExp ) { if( fNum<-FLT_MAX || fNum>FLT_MAX ) return( false ); if( fNum != 0.0 ) { *piExp = (int) floorf( log10f( fabsf( fNum ) ) ); *pfMan = fNum / EXP10F( float( *piExp ) ); // The following looks for boundary conditions at 1.0 and 10.0 where things can go wrong if( fabsf( *pfMan ) < float( 1.0 ) ) { if( ! bIsEqual( *pfMan, float( 1.0 ) ) ) { (*pfMan) *= 10.0; (*piExp)--; } } else if( fabsf( *pfMan ) < float( 10.0 ) ) { if( bIsEqual( *pfMan, float( 10.0 ) ) ) { (*pfMan) /= 10.0; (*piExp)++; } } else { (*pfMan) /= 10.0; (*piExp)++; } } else { *pfMan = 0.0; *piExp = 0; } return( true ); } //************************************************************************************************** bool CnvtType::bParseFlt( double dfNum, double * pdfMan, int * piExp ) { if( dfNum<-DBL_MAX || dfNum>DBL_MAX ) return( false ); if( dfNum != 0.0 ) { *piExp = (int) floor( log10( fabs( dfNum ) ) ); *pdfMan = dfNum / EXP10( double( *piExp ) ); // The following looks for boundary conditions at 1.0 and 10.0 where things can go wrong if( fabs( *pdfMan ) < 1.0 ) { if( ! bIsEqual( *pdfMan, 1.0 ) ) { (*pdfMan) *= 10.0; (*piExp)--; } } else if( fabs( *pdfMan ) < 10.0 ) { if( bIsEqual( *pdfMan, 10.0 ) ) { (*pdfMan) /= 10.0; (*piExp)++; } } else { (*pdfMan) /= 10.0; (*piExp)++; } } else { *pdfMan = 0.0; *piExp = 0; } return( true ); } //************************************************************************************************** // Convert a string into an integer. // // Some examples of strings that can be converted to an integer : // * 12 // * 12k ("k" could alternatively be T, Tera, G, Giga, M, Meg, Mega, K) // * 12kV ("V" could alternatively be Ohm, F, H, A, Sec and is ignored) // // Argument List : // rosNum - The string to be converted // piNum - A pointer to an integer to hold the conversion // // Return Values : // Success - true // Failure - false bool CnvtType::bStrToInt( const TYPE_STR & rosNum, int * piNum ) { long li1; if( ! bStrToInt( rosNum, &li1 ) ) return( false ); *piNum = (int) li1; return( true ); } //************************************************************************************************** bool CnvtType::bStrToInt( const TYPE_STR & rosNum, long * pliNum ) { double df1; if( ! bStrToFlt( rosNum, &df1 ) ) return( false ); *pliNum = lround( df1 ); return( true ); } //************************************************************************************************** // Convert a string into a float point number. // // Some examples of strings that can be converted to a float : // * 12.3 // * 12.3m ("m" could also be T, Tera, G, Giga, M, Meg, Mega, k, u, n, etc.) // * 12.3mF ("F" could also be Ohm, H, V, A, Sec, is actually ignored) // * 12.3E-3 // // Argument List : // rosNum - The string to be converted // piNum - A pointer to a float to hold the result // // Return Values : // true - (part or all of the string was converted) // false - (no part of the string could be converted) bool CnvtType::bStrToFlt( const TYPE_STR & rosNum, float * pfNum ) { double df1; if( ! bStrToFlt( rosNum, &df1 ) ) return( false ); *pfNum = (float) df1; return( true ); } //************************************************************************************************** bool CnvtType::bStrToFlt( const TYPE_STR & rosNum, double * pdfNum ) { double df1; #ifdef __WXGTK__ wxString osNum; osNum = rosGetNum( rosNum ); if( ! osNum.ToDouble( &df1 ) ) return( false ); #else stringstream oss1; oss1 << rosGetNum( rosNum ); oss1 >> df1; if( oss1.fail( ) ) return( false ); #endif *pdfNum = df1; return( true ); } //************************************************************************************************** // Convert an integer number to a string. // // Argument List : // fNum - The integer to be converted // rosNum - A reference to a string to hold the conversion // // Return Values : // Success - true // Failure - false bool CnvtType::bIntToStr( int iNum, TYPE_STR & rosNum ) { #ifdef __WXGTK__ wxString os1; #else char sNum[ 16 ]; #endif int i1; #ifdef __WXGTK__ i1 = os1.Printf( wxT("% i"), iNum ); #else i1 = snprintf( sNum, 16, "% i", iNum ); #endif if( i1 <= 0 ) return( false ); #ifdef __WXGTK__ rosNum = os1; #else rosNum = sNum; #endif return( true ); } //************************************************************************************************** bool CnvtType::bIntToStr( long liNum, TYPE_STR & rosNum ) { #ifdef __WXGTK__ wxString os1; #else char sNum[ 32 ]; #endif int i1; #ifdef __WXGTK__ i1 = os1.Printf( wxT("% li"), liNum ); #else i1 = snprintf( sNum, 32, "% li", liNum ); #endif if( i1 <= 0 ) return( false ); #ifdef __WXGTK__ rosNum = os1; #else rosNum = sNum; #endif return( true ); } //************************************************************************************************** // Convert a floating point number to a string. // // The format used by this function is as follows : // 1.234E-05 // -1.234E+05 // // Argument List : // fNum - The float to be converted // rosNum - A reference to a string to hold the result // // Return Values : // Success - true // Failure - false bool CnvtType::bFltToStr( float fNum, TYPE_STR & rosNum ) { double df1; df1 = (double) fNum; return( bFltToStr( df1, rosNum ) ); } //************************************************************************************************** bool CnvtType::bFltToStr( double dfNum, TYPE_STR & rosNum ) { #ifdef __WXGTK__ wxString osFmt; osFmt = wxString::Format( wxT("%% %i.%iE"), m_iFltRes+2, m_iFltRes ); if( rosNum.Printf( osFmt, dfNum ) < 0 ) return( false ); #else char sFmt[ 16 ], sNum[ 32 ]; int i1; i1 = snprintf( sFmt, 16, "%% %i.%iE", m_iFltRes+2, m_iFltRes ); if( i1 <= 0 ) return( false ); i1 = snprintf( sNum, 32, sFmt, dfNum ); if( i1 <= 0 ) return( false ); rosNum = sNum; #endif return( true ); } //************************************************************************************************** // Convert a floating point value to a string using engineering format. // // Eg. convert 100000 to 100k. // // Argument List : // fNum - The float to be converted // rosNum - A reference to a string to hold the result // // Return Values : // true - The string containing the engineering format // false - An empty string bool CnvtType::bFltToStrEng( float fNum, TYPE_STR & rosNum ) { double df1; df1 = (double) fNum; return( bFltToStrEng( df1, rosNum ) ); } //************************************************************************************************** bool CnvtType::bFltToStrEng( double dfNum, TYPE_STR & rosNum ) { #ifdef __WXGTK__ wxString osFmt; #else char sFmt[ 16 ], sNum[ 32 ]; #endif TYPE_STR os1; TYPE_CHR oc1; float fMan; // Mantissa int iExp; // Exponent int i1; // Setup the format string based on the desired resolution #ifdef __WXGTK__ osFmt = wxString::Format( wxT("%% %i.%if"), m_iFltRes+2, m_iFltRes ); #else i1 = snprintf( sFmt, 16, "%% %i.%if", m_iFltRes+2, m_iFltRes ); if( i1 <= 0 ) return( false ); #endif // Parse the number to be converted if( ! bParseFlt( dfNum, &fMan, &iExp ) ) return( false ); // Round the mantissa based on the desired resolution fMan *= EXP10F( (float) m_iFltRes ); fMan = roundf( fMan ); fMan /= EXP10F( (float) m_iFltRes ); // Scale the mantissa so that the exponent is a multiple of 3 while( iExp % 3 ) { iExp--; fMan *= 10.0; } // Determine the appropriate scaling factor to be appended as units if( bUnitExpToPfx( iExp, &oc1 ) ) os1 = oc1; else os1 = wxT("E%02i"); #ifdef __WXGTK__ osFmt << os1; #else strcat( sFmt, os1.c_str( ) ); #endif // Create the string representation of the number #ifdef __WXGTK__ i1 = rosNum.Printf( osFmt, fMan, iExp ); if( i1 <= 0 ) return( false ); #else i1 = snprintf( sNum, 32, sFmt, fMan, iExp ); if( i1 <= 0 ) return( false ); rosNum = sNum; #endif return( true ); } //************************************************************************************************** // Take a units prefix and return the associated exponent. // // Eg. "m" or "milli" returns -3. // // Argument List : // ocPfx - the units prefix // piExp - the associated exponent // // Return Values : // Success - true // Failure - false bool CnvtType::bUnitPfxToExp( TYPE_CHR ocPfx, int * piExp ) { switch( ocPfx ) { case wxT('Y') : *piExp = 24; break; // Yotta case wxT('Z') : *piExp = 21; break; // Zetta case wxT('E') : *piExp = 18; break; // Exa case wxT('P') : *piExp = 15; break; // Peta case wxT('T') : *piExp = 12; break; // Tera case wxT('G') : *piExp = 9; break; // Giga case wxT('M') : *piExp = 6; break; // Mega case wxT('K') : // Kilo case wxT('k') : *piExp = 3; break; // kilo case wxT('%') : *piExp = -2; break; // percent case wxT('m') : *piExp = -3; break; // milli case wxT('u') : *piExp = -6; break; // micro case wxT('n') : *piExp = -9; break; // nano case wxT('p') : *piExp = -12; break; // pico case wxT('f') : *piExp = -15; break; // femto case wxT('a') : *piExp = -18; break; // atto case wxT('z') : *piExp = -21; break; // zepto case wxT('y') : *piExp = -24; break; // yocto default : return( false ); // A units prefix was not recognized } return( true ); } //************************************************************************************************** // Take a units exponent and return the associated prefix. // // Eg. the exponent 6 returns "Mega". // // Argument List : // iExp - the exponent // pocPfx - the associated units prefix // // Return Values : // Success - true // Failure - false bool CnvtType::bUnitExpToPfx( int iExp, TYPE_CHR * pocPfx ) { switch( iExp ) { case 24 : *pocPfx = wxT('Y'); break; // Yotta case 21 : *pocPfx = wxT('Z'); break; // Zetta case 18 : *pocPfx = wxT('E'); break; // Exa case 15 : *pocPfx = wxT('P'); break; // Peta case 12 : *pocPfx = wxT('T'); break; // Tera case 9 : *pocPfx = wxT('G'); break; // Giga case 6 : *pocPfx = wxT('M'); break; // Mega case 3 : *pocPfx = wxT('k'); break; // kilo case 0 : *pocPfx = wxT(' '); break; // Empty units prefix case -2 : *pocPfx = wxT('%'); break; // Percent case -3 : *pocPfx = wxT('m'); break; // milli case -6 : *pocPfx = wxT('u'); break; // micro case -9 : *pocPfx = wxT('n'); break; // nano case -12 : *pocPfx = wxT('p'); break; // pico case -15 : *pocPfx = wxT('f'); break; // femto case -18 : *pocPfx = wxT('a'); break; // atto case -21 : *pocPfx = wxT('z'); break; // zepto case -24 : *pocPfx = wxT('y'); break; // yocto default : return( false ); // No units recognized } return( true ); } //************************************************************************************************** // Test Utility * //************************************************************************************************** #ifdef TEST_CNVTTYPE using namespace std; // System Includes #include #include // Function prototypes void Test_GetNum( const TYPE_STR & rosNum ); void Test_IsType( const TYPE_STR & rosNum ); void PrintLimits( void ); void Usage( char * psAppName ); //************************************************************************************************** int main( int argc, char * argv[ ] ) { TYPE_STR osNum, os1; double dfNum, dfMan; float fNum, fMan; long liNum; int iNum, iExp; // Validate the argument count passed to the application if( argc > 2 ) { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } // Process the command line arguments if( argc > 1 ) { #ifdef __WXGTK__ os1 = wxConvLibc.cMB2WC( argv[ 1 ] ); #else os1 = argv[ 1 ]; #endif if( os1 == wxT("-h") ) { Usage( argv[ 0 ] ); exit( EXIT_SUCCESS ); } else { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } } // Display the utility banner cout << "\n CnvtType Class Test Utility" << "\n Version 1.20 (2015-03-02)\n\n"; //--------------------------------------- Test_GetNum( wxT("-10.0E-2uF") ); Test_GetNum( wxT("0.0E2uVolt") ); Test_GetNum( wxT("bigbums(1)") ); cout << '\n'; //--------------------------------------- Test_IsType( wxT("123.4") ); Test_IsType( wxT("1234.") ); Test_IsType( wxT("123E-4") ); Test_IsType( wxT("123E4") ); Test_IsType( wxT("1234m") ); Test_IsType( wxT("1000m") ); Test_IsType( wxT("bum(1)") ); cout << '\n'; //--------------------------------------- cout << "CnvtType::bParseFlt ( ) : "; fNum = 12.3E-04; if( CnvtType::bParseFlt( fNum, &fMan, &iExp ) ) cout << "Success"; else cout << "Failure"; cout << " ( " << fNum << " --> " << fMan << "E" << iExp << ")\n"; cout << "CnvtType::bParseFlt ( ) : "; dfNum = -12.3E-04; if( CnvtType::bParseDbl( dfNum, &dfMan, &iExp ) ) cout << "Success"; else cout << "Failure"; cout << " (" << dfNum << " --> " << dfMan << "E" << iExp << ")\n"; cout << '\n'; //--------------------------------------- cout << "CnvtType::bStrToInt ( ) : "; osNum = wxT("123.45E-5"); if( CnvtType::bStrToInt( osNum, &iNum ) ) cout << "Success"; else cout << "Failure"; cout << " (\"" << osNum.C_STR( ) << "\" --> " << iNum << ")\n"; cout << "CnvtType::bStrToLong ( ) : "; osNum = wxT("123.5V"); if( CnvtType::bStrToLong( osNum, &liNum ) ) cout << "Success"; else cout << "Failure"; cout << " (\"" << osNum.C_STR( ) << "\" --> " << liNum << ")\n"; cout << '\n'; //--------------------------------------- cout << "CnvtType::bStrToFlt ( ) : "; osNum = wxT("123.45E-5"); if( CnvtType::bStrToFlt( osNum, &fNum ) ) cout << "Success"; else cout << "Failure"; cout << " (\"" << osNum.C_STR( ) << "\" --> " << fNum << ")\n"; cout << "CnvtType::bStrToDbl ( ) : "; osNum = wxT("123.4uV"); if( CnvtType::bStrToDbl( osNum, &dfNum ) ) cout << "Success"; else cout << "Failure"; cout << " (\"" << osNum.C_STR( ) << "\" --> " << dfNum << ")\n"; cout << '\n'; //--------------------------------------- cout << "CnvtType::bIntToStr ( ) : "; iNum = 123; if( CnvtType::bIntToStr( iNum, osNum ) ) cout << "Success"; else cout << "Failure"; cout << " ( " << iNum << " --> \"" << osNum.C_STR( ) << "\")\n"; cout << "CnvtType::bLongToStr ( ) : "; liNum = -123; if( CnvtType::bLongToStr( liNum, osNum ) ) cout << "Success"; else cout << "Failure"; cout << " (" << liNum << " --> \"" << osNum.C_STR( ) << "\")\n"; cout << '\n'; //--------------------------------------- cout << "CnvtType::bFltToStr ( ) : "; fNum = 1.23E+04; if( CnvtType::bFltToStr( fNum, osNum ) ) cout << "Success"; else cout << "Failure"; cout << " ( " << fNum << " --> \"" << osNum.C_STR( ) << "\")\n"; cout << "CnvtType::bDblToStr ( ) : "; dfNum = -1.23E+04; if( CnvtType::bDblToStr( dfNum, osNum ) ) cout << "Success"; else cout << "Failure"; cout << " (" << dfNum << " --> \"" << osNum.C_STR( ) << "\")\n"; cout << '\n'; //--------------------------------------- cout << "CnvtType::bFltToStrEng( ) : "; fNum = 1.23E+04; if( CnvtType::bFltToStrEng( fNum, osNum ) ) cout << "Success"; else cout << "Failure"; cout << " ( " << fNum << " --> \"" << osNum.C_STR( ) << "\")\n"; cout << "CnvtType::bDblToStrEng( ) : "; dfNum = -1.23E+04; if( CnvtType::bDblToStrEng( dfNum, osNum ) ) cout << "Success"; else cout << "Failure"; cout << " (" << dfNum << " --> \"" << osNum.C_STR( ) << "\")\n"; cout << '\n'; //--------------------------------------- cout << "Print various macro values defined in TypeDefs.hpp :\n"; PrintLimits( ); exit( EXIT_SUCCESS ); } //************************************************************************************************** void Test_GetNum( const TYPE_STR & rosNum ) { TYPE_STR os1; cout << "CnvtType::rosGetNum ( ) : "; os1 = CnvtType::rosGetNum( rosNum ); cout << "\"" << rosNum.C_STR( ) << "\" --> \"" << os1.C_STR( ) << "\"\n"; } //************************************************************************************************** void Test_IsType( const TYPE_STR & rosNum ) { TYPE_STR os1; os1 = TYPE_STR( "\"" ) + rosNum + "\""; cout << left; cout << "CnvtType::bIsInteger ( ) : " << setw( 8 ) << os1.C_STR( ) << " --> " << (CnvtType::bIsInteger( rosNum ) ? "True" : "False") << '\n'; cout << "CnvtType::bIsFloat ( ) : " << setw( 8 ) << os1.C_STR( ) << " --> " << (CnvtType::bIsFloat ( rosNum ) ? "True" : "False") << '\n'; } //************************************************************************************************** void PrintLimits( void ) { cout << " UINT_MAX = " << UINT_MAX << "\n"; cout << " ULNG_MAX = " << ULONG_MAX << "\n"; cout << " INT_MIN = " << INT_MIN << "\n"; cout << " INT_MAX = " << INT_MAX << "\n"; cout << " LNG_MIN = " << LONG_MIN << "\n"; cout << " LNG_MAX = " << LONG_MAX << "\n"; cout << " LLG_MIN = " << LLONG_MIN << "\n"; cout << " LLG_MAX = " << LLONG_MAX << "\n"; cout << " FLT_MIN = " << FLT_MIN << "\n"; cout << " FLT_MAX = " << FLT_MAX << "\n"; cout << " DBL_MIN = " << DBL_MIN << "\n"; cout << " DBL_MAX = " << DBL_MAX << "\n"; cout << '\n'; } //************************************************************************************************** void Usage( char * psAppName ) { cout << "\nUsage : " << psAppName << " [-OPTIONS]" << "\nOptions :" << "\n -h : Print usage (this message)\n\n"; } #endif // TEST_CNVTTYPE //************************************************************************************************** gspiceui-1.1.00+dfsg/src/utility/PnlValue.cpp0000644000000000000000000006304712505244022017550 0ustar rootroot//************************************************************************************************** // PnlValue.cpp * // -------------- * // Started : 2004-09-14 * // Last Update : 2015-03-27 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "PnlValue.hpp" //************************************************************************************************** // Implement an event table. wxBEGIN_EVENT_TABLE( PnlValue, wxPanel ) EVT_SPIN_UP ( PnlTxtSpn::ID_SPINBTN , PnlValue::OnSpnScroll ) EVT_SPIN_DOWN( PnlTxtSpn::ID_SPINBTN , PnlValue::OnSpnScroll ) EVT_CHOICE ( PnlValue ::ID_CHO_UNITS, PnlValue::OnChoUnits ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. PnlValue::PnlValue( void ) : wxPanel( ) { bClear( ); } //************************************************************************************************** // Destructor. PnlValue::~PnlValue( ) { } //************************************************************************************************** // Layout the display objects. void PnlValue::DoLayout( void ) { wxBoxSizer * poSzr; wxSizerFlags oFlags; // Create and set the sizer for the panel poSzr = new wxBoxSizer( wxHORIZONTAL ); SetSizer( poSzr ); // Add the value label oFlags.Proportion( 1 ); // The next 3 lines vertically center the wxLabel oFlags.Border( wxTOP, 6 ); poSzr->Add( &m_oLblName, oFlags ); // Add the value itself oFlags.Proportion( 0 ); oFlags.Border( wxTOP, 0 ); poSzr->Add( &m_oSpnValue, oFlags ); // Add units for the value poSzr->AddSpacer( 4 ); poSzr->Add( &m_oChoUnits, oFlags ); poSzr->AddSpacer( 3 ); oFlags.Border( wxTOP, 6 ); poSzr->Add( &m_oLblUnits, oFlags ); // Set the panel sizer and the min. & init. sizes as calculated by the sizer poSzr->SetSizeHints( this ); } //************************************************************************************************** // Create an instance of this object. // // Argument List : // poWin - The parent window // oWinID - The window identifier // iNameWd - The width of the name label in pixels // iValueWd - The width of the value control // iUnitsWd - The width of the units control // roPosn - The position // eShowUnits - Flag indicating if units should be accommodated // // Return Values : // true - Success // false - Failure bool PnlValue::bCreate( wxWindow * poWin, wxWindowID oWinID, int iNameWd, int iValueWd, int iUnitsWd, const wxPoint & roPosn, eTypeShow eShowUnits ) { bool bRtn=true; if( bIsCreated( ) ) return( true ); // Create the base class (wxPanel) if( ! wxPanel::Create( poWin, oWinID, roPosn ) ) return( false ); // Create the variable name label if( ! m_oLblName.Create( this, ID_UNUSED, wxT(""), wxDefaultPosition, wxSize( iNameWd, GUI_CTRL_HT-2 ), wxALIGN_LEFT ) ) bRtn = false; // Create the value spin control if( ! m_oSpnValue.bCreate( this, ID_SPN_VALUE, iValueWd ) ) bRtn = false; // Create the units choice box if( ! m_oChoUnits.bCreate( this, ID_CHO_UNITS, iUnitsWd ) ) bRtn = false; // Create the units static label if( ! m_oLblUnits.bCreate( this, ID_LBL_UNITS, iUnitsWd ) ) bRtn = false; // Specify how units should be displayed bShowUnits( eShowUnits ); // Layout the display objects DoLayout( ); return( bRtn ); } //************************************************************************************************** // Clear the spin and choice values. // // Return Values : // Success - true // Failure - false bool PnlValue::bClear( void ) { bool bRtn=true; m_eShowUnits = eSHOW_CHO; if( ! m_oSpnValue.bClear( ) ) bRtn = false; if( ! m_oChoUnits.bClear( ) ) bRtn = false; if( ! m_oLblUnits.bClear( ) ) bRtn = false; return( bRtn ); } //************************************************************************************************** // Set the name label. // // Argument List : // rosName - The name of the variable // // Return Values : // Success - true // Failure - false bool PnlValue::bSetName( const wxString & rosName ) { if( ! bIsCreated( ) ) return( false ); if( rosName.IsEmpty( ) ) return( false ); m_oLblName.SetLabel( rosName ); return( true ); } //************************************************************************************************** // Set the variable type for the spin control to display. // // Argument List : // eVType - The variable type // // Return Values : // Success - true // Failure - false bool PnlValue::bSetValueType( eTypeValue eVType ) { if( ! bIsCreated( ) ) return( false ); return( m_oSpnValue.bSetValType( eVType ) ); } //************************************************************************************************** // Set the type of units to be displayed in the choice control. // // Argument List : // eUType - The units specifier // // Return Values : // Success - true // Failure - false bool PnlValue::bSetUnitsType( eTypeUnits eUType ) { if( ! bIsCreated( ) ) return( false ); switch( m_eShowUnits ) { //---------------------------------------------------------------------------------------------- case eSHOW_CHO : if( m_oChoUnits.eGetUnitsType( ) == eUType ) return( true ); if( ! m_oChoUnits.bSetUnitsType( eUType ) ) return( false ); // Automatically set the spin control parameters switch( eUType ) { case eUNITS_CAP : // Capacitance bSetDefValue( 100.0 ); bSetSpnRange( 0.0 , 1001.0 ); bSetSpnIncSz( 1.0, 100.0 ); break; case eUNITS_IND : // Inductance bSetDefValue( 100.0 ); bSetSpnRange( 0.0 , 1001.0 ); bSetSpnIncSz( 1.0, 100.0 ); break; case eUNITS_RES : // Resistance bSetDefValue( 100.0 ); bSetSpnRange( 0.0 , 1001.0 ); bSetSpnIncSz( 1.0, 100.0 ); break; case eUNITS_COND : // Conductance bSetDefValue( 100.0 ); bSetSpnRange( 0.0 , 1001.0 ); bSetSpnIncSz( 1.0, 100.0 ); break; case eUNITS_VOLT : // Voltage bSetDefValue( 1.0 ); bSetSpnRange( -10000.0 , 10000.0 ); bSetSpnIncSz( 1.0, 1000.0 ); break; case eUNITS_CURR : // Current bSetDefValue( 1.0 ); bSetSpnRange( -1001.0 , 1001.0 ); bSetSpnIncSz( 1.0, 100.0 ); break; case eUNITS_TIME : // Time bSetDefValue( 1.0 ); bSetSpnRange( 0.0 , 1001.0 ); bSetSpnIncSz( 1.0, 100.0 ); break; case eUNITS_FREQ : // Frequency bSetDefValue( 100.0 ); bSetSpnRange( 0.01, 1001.0 ); bSetSpnIncSz( 1.0, 100.0 ); break; case eUNITS_CHRG : // Charge bSetDefValue( 100.0 ); bSetSpnRange( 0.0 , 1001.0 ); bSetSpnIncSz( 1.0, 100.0 ); break; case eUNITS_PHAD : // Phase / angle in Degree bSetDefValue( 0.0 ); bSetSpnRange( -200.0 , 200.0 ); bSetSpnIncSz( 1.0, 10.0 ); break; case eUNITS_PHAR : // Phase / angle in Radian bSetDefValue( 0.0 ); bSetSpnRange( -3.2 , 3.2 ); bSetSpnIncSz( 0.1, 0.5 ); break; case eUNITS_TMPC : // Temperature in Celcius bSetDefValue( 27.0 ); bSetSpnRange( -273.15, 300.0 ); bSetSpnIncSz( 1.0, 10.0 ); break; case eUNITS_TMPF : // Temperature in Fahrenheit bSetDefValue( 80.0 ); bSetSpnRange( -459.7 , 500.0 ); bSetSpnIncSz( 1.0, 10.0 ); break; case eUNITS_EXP : // Exponent (dimensionless) bSetDefValue( 1.0 ); bSetSpnRange( -1001.0 , 1001.0 ); bSetSpnIncSz( 1.0, 100.0 ); break; default : bSetDefValue( 100.0 ); bSetSpnRange( -1001.0 , 1001.0 ); bSetSpnIncSz( 1.0, 100.0 ); break; } //---------------------------------------------------------------------------------------------- case eSHOW_LBL : if( m_oLblUnits.eGetUnitsType( ) == eUType ) return( true ); if( ! m_oLblUnits.bSetUnitsType( eUType ) ) return( false ); break; //---------------------------------------------------------------------------------------------- case eSHOW_NONE : return( false ); } return( true ); } //************************************************************************************************** // Set the spin control range. // // Argument List : // dfMinValue - The spin control minimum value // dfMaxValue - The spin control maximum value // // Return Values : // Success - true // Failure - false bool PnlValue::bSetSpnRange( double dfMinValue, double dfMaxValue ) { if( ! bIsCreated( ) ) return( false ); return( m_oSpnValue.bSetRange( dfMinValue, dfMaxValue ) ); } //************************************************************************************************** // Set the increment sizes of the spin control. // // This spin control can be incremented using two different approaches, constant or variable step // sizes. A constant step size means that the spin control is incremented by the same amount // throughout it's range. A variable step size means that the spin control is incremented by an // amount dependent on it's current value. // // Argument List : // dfMinIncSz - The minimum spin control increment size // dfMaxIncSz - The maximum spin control increment size // // Return Values : // true - Success // false - Failure bool PnlValue::bSetSpnIncSz( double dfMinIncSz, double dfMaxIncSz ) { if( ! bIsCreated( ) ) return( false ); return( m_oSpnValue.bSetIncSz( dfMinIncSz, dfMaxIncSz ) ); } //************************************************************************************************** // Set the value from a long integer. // // Argument List : // liValue - The long integer value // uiExp - An optional exponent, specifies the units if it is a multiple of 3 // // Return Values : // Success - true // Failure - false bool PnlValue::bSetValue( long liValue, uint uiExp ) { long liMan; uint ui1; int i1; if( ! bIsCreated( ) ) return( false ); // Combine the value with the exponent function argument if specified liMan = liValue; if( uiExp != NOVAL_UINT ) for( ui1=uiExp; ui1>0; ui1-- ) liMan *= 10; // Set the value. Do different things depending on the units control on display switch( m_eShowUnits ) { case eSHOW_CHO : // Parse the value passed to the function for( ui1=0; liMan>1000; ui1++ ) { liMan += 5; liMan /= 10; } // Note : rounding could occur here // Restore values if the exponent is a multiple of 3 if( uiExp != NOVAL_UINT ) { if( uiExp % 3 == 0 ) { liMan = liValue; ui1 = uiExp; } } // Set the units choice control values if( ! m_oChoUnits.bSetUnits( (int) ui1 ) ) return( false ); break; case eSHOW_LBL : // Combine the value with it's units i1 = m_oLblUnits.iGetUnits( ); for( ; i1>0; i1-- ) { liMan += 5; liMan /= 10; } // Note : rounding could occur here for( ; i1<0; i1++ ) { liMan *= 10; } break; case eSHOW_NONE : break; } // Set the spin control value if( ! m_oSpnValue.bSetValue( liMan ) ) return( false ); return( true ); } //************************************************************************************************** // Set the value from a double float. // // Argument List : // dfValue - The double float value // iExp - An optional exponent, specifies the units if it is a multiple of 3 // // Return Values : // Success - true // Failure - false bool PnlValue::bSetValue( double dfValue, int iExp ) { double dfMan; int i1; if( ! bIsCreated( ) ) return( false ); // Combine the value with the exponent function argument if specified if( iExp != NOVAL_INT ) dfMan = dfValue * EXP10( (double) iExp ); else dfMan = dfValue; // Set the value. Do different things depending on the units control on display switch( m_eShowUnits ) { case eSHOW_CHO : // Restore mantissa and exponent if the exponent is a multiple of 3 if( iExp!=NOVAL_INT && iExp%3==0 ) { dfMan = dfValue; i1 = iExp; } else { // Parse the value passed to the function if( ! CnvtType::bParseDbl( dfValue, &dfMan, &i1 ) ) return( false ); // Determine the spin control value and the units choice selection if( dfMan != 0.0 ) for( ; i1%3!=0; i1-- ) dfMan *= 10.0; } // Set the units choice control values if( ! m_oChoUnits.bSetUnits( i1 ) ) return( false ); break; case eSHOW_LBL : // Determine the spin control value combined with it's units i1 = m_oLblUnits.iGetUnits( ); if( i1 != 0 ) dfMan /= EXP10( (double) i1 ); break; case eSHOW_NONE : dfMan = dfValue; break; } // Set the spin control value if( ! m_oSpnValue.bSetValue( dfMan ) ) return( false ); return( true ); } //************************************************************************************************** // Set the value from a string. // // Notes : 1. If the arguments numeric component is zero but units have been specified the units // will still be set, eg. "0.00mVolt". // 2. If the units type specified differ from the currently set units type then the // operation fails. // 3. This function will cope with arguments which contain both an exponent and a units // specifier, eg. 12.3E-7mF will be set as 1.23nF. // // Argument List : // rosValue - The string value // // Return Values : // Success - true // Failure - false bool PnlValue::bSetValue( const wxString & rosValue ) { eTypeUnits eUType=eUNITS_NONE; double dfValue; int iPfx; size_t sz1; // Don't continue unless the panel has been created if( ! bIsCreated( ) ) return( false ); // Check that the string represents a numeric value if( ! CnvtType::bStrToFlt( rosValue, &dfValue ) ) return( false ); // If there is a units specifier check that it matches the object's units type if( UnitsBase::bGetUnitsType( rosValue, &eUType ) ) if( eUType!=eGetUnitsType( ) && eUType!=eUNITS_NONE ) return( false ); // Set the value. Do different things depending on the units control on display switch( m_eShowUnits ) { case eSHOW_CHO : // Look for a units prefix and attempt to set the units accordingly sz1 = rosValue.find_first_not_of( wxT(" .-+0123456789Ee") ); if( sz1 != std::string::npos ) if( CnvtType::bUnitPfxToExp( rosValue[ sz1 ], &iPfx ) ) if( bSetValue( dfValue / EXP10( (double) iPfx ), iPfx ) ) break; // See if the value can be set without units if( bSetValue( dfValue, 0 ) ) if( dfValue == dfGetValue( ) ) break; // Set the value and allow the choice control to select an appropriate units prefix if( ! bSetValue( dfValue ) ) return( false ); break; case eSHOW_LBL : if( ! bSetValue( dfValue ) ) return( false ); break; case eSHOW_NONE : if( ! m_oSpnValue.bSetValue( rosValue ) ) return( false ); break; } return( true ); } //************************************************************************************************** // Set the units to be displayed in the choice control or static label. // // Argument List : // rosUnits - The units to be displayed // // Return Values : // Success - true // Failure - false bool PnlValue::bSetUnits( const wxString & rosUnits ) { if( ! bIsCreated( ) ) return( false ); switch( m_eShowUnits ) { case eSHOW_CHO : if( ! m_oChoUnits.bSetUnits( rosUnits ) ) return( false ); break; case eSHOW_LBL : if( ! m_oLblUnits.bSetUnits( rosUnits ) ) return( false ); break; case eSHOW_NONE : return( false ); } return( true ); } //************************************************************************************************** // Specify if and how units should be displayed. // // The units can be hidden or displayed in either a choice control or a static label. A choice // control allowes the user to specify the units. A label simply displays the units. // // Argument List : // eShow - Enumerated show (units) specifier // // Return Values : // Success - true // Failure - false bool PnlValue::bShowUnits( eTypeShow eShow ) { if( ! bIsCreated( ) ) return( false ); switch( eShow ) { case eSHOW_CHO : m_oChoUnits.Show( true ); m_oLblUnits.Show( false ); break; case eSHOW_LBL : m_oChoUnits.Show( false ); m_oLblUnits.Show( true ); break; case eSHOW_NONE : m_oChoUnits.Show( false ); m_oLblUnits.Show( false ); break; } m_eShowUnits = eShow; return( true ); } //************************************************************************************************** // Get the variable name. // // Return Values : // Success - The variable name as a string // Failure - An empty string const wxString & PnlValue::rosGetName( void ) { static wxString osName; osName.Empty( ); if( ! bIsCreated( ) ) return( osName ); osName = m_oLblName.GetLabel( ); return( osName ); } //************************************************************************************************** // Get the spin control value including units as an integer. // // Return Values : // Success - The value as a long integer // Failure - NOVAL_LNG long PnlValue::liGetValue( void ) { double df1; long li1=0; // Has the control been created? if( ! bIsCreated( ) ) return( NOVAL_LNG ); // Get the spin control as a float and check it can be converted to a long df1 = m_oSpnValue.dfGetValue( ); if( df1LONG_MAX ) return( NOVAL_LNG ); // Get the value combining it with any units switch( m_eShowUnits ) { case eSHOW_CHO : li1 = m_oChoUnits.liGetValue( df1 ); break; case eSHOW_LBL : li1 = m_oLblUnits.liGetValue( df1 ); break; case eSHOW_NONE : li1 = m_oSpnValue.liGetValue( ); break; } return( li1 ); } //************************************************************************************************** // Get the spin control value including units as a float. // // Return Values : // Success - The value as a double precision float // Failure - NOVAL_DBL double PnlValue::dfGetValue( void ) { double df1; // Has the control been created? if( ! bIsCreated( ) ) return( NOVAL_DBL ); // Get the spin control value df1 = m_oSpnValue.dfGetValue( ); if( df1 == NOVAL_DBL ) return( NOVAL_DBL ); // Combine the spin control value with any units switch( m_eShowUnits ) { case eSHOW_CHO : df1 = m_oChoUnits.dfGetValue( df1 ); break; case eSHOW_LBL : df1 = m_oLblUnits.dfGetValue( df1 ); break; case eSHOW_NONE : break; } return( df1 ); } //************************************************************************************************** // Get the spin control value including units as a string. // // Return Values : // Success - The value as a string // Failure - An empty string const wxString & PnlValue::rosGetValue( void ) { static wxString osValue; double df1; osValue.Empty( ); // Has the control been created? if( ! bIsCreated( ) ) return( osValue ); // Test the spin control value df1 = m_oSpnValue.dfGetValue( ); if( df1 == NOVAL_DBL ) return( osValue ); // Combine the spin control value with any units osValue = m_oSpnValue.rosGetValue( ); switch( m_eShowUnits ) { case eSHOW_CHO : if( m_oChoUnits.iGetUnits( ) != 0 ) osValue = m_oChoUnits.rosGetValue( df1 ); break; case eSHOW_LBL : if( m_oLblUnits.iGetUnits( ) != 0 ) osValue = m_oLblUnits.rosGetValue( df1 ); break; case eSHOW_NONE : break; } return( osValue ); } //************************************************************************************************** // Get the units type. // // Return Values : // Enumerated units type specifier eTypeUnits PnlValue::eGetUnitsType( void ) { eTypeUnits eUType=eUNITS_NONE; switch( m_eShowUnits ) { case eSHOW_CHO : eUType = m_oChoUnits.eGetUnitsType( ); break; case eSHOW_LBL : eUType = m_oLblUnits.eGetUnitsType( ); break; case eSHOW_NONE : eUType = eUNITS_NONE; break; } return( eUType ); } //************************************************************************************************** // Get the units. // // Return Values : // Success - The currently selected units // Failure - An empty string const wxString & PnlValue::rosGetUnits( void ) { static wxString osUnits; osUnits.Empty( ); if( ! bIsCreated( ) ) return( osUnits ); switch( m_eShowUnits ) { case eSHOW_CHO : osUnits = m_oChoUnits.rosGetUnits( ); case eSHOW_LBL : osUnits = m_oLblUnits.rosGetUnits( ); case eSHOW_NONE : break; } return( osUnits ); } //************************************************************************************************** // Print the object attributes. // // Argument List : // rosPrefix - A prefix to every line displayed (usually just spaces) void PnlValue::Print( const wxString & rosPrefix ) { m_oSpnValue.Print( rosPrefix + wxT("m_oSpnValue.") ); m_oChoUnits.Print( rosPrefix + wxT("m_oChoUnits.") ); m_oLblUnits.Print( rosPrefix + wxT("m_oLblUnits.") ); } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // Spin button scroll event handler. // // Combine the spin control value and the choice control units // // Argument List : // roEvtSpn - An object holding information about the event void PnlValue::OnSpnScroll( wxSpinEvent & roEvtSpn ) { double dfMan, df1; int iExp; // If there's no units or the units are fixed then skip this event handler if( m_eShowUnits != eSHOW_CHO ) return; switch( m_oChoUnits.eGetUnitsType( ) ) { case eUNITS_TMPC : case eUNITS_TMPF : case eUNITS_PHAD : case eUNITS_PHAR : return; default : break; } // Get the current values for the value and it's units dfMan = m_oSpnValue.dfGetValue( ); iExp = m_oChoUnits.iGetUnits( ); df1 = dfMan; // Determine the event type and act accordingly if( roEvtSpn.GetEventType( ) == wxEVT_SCROLL_LINEUP ) { // Increment the value if( dfMan > 0.0 ) { // Positive numbers if( dfMan <= 1000.0 ) return; df1 = 1.0; iExp += 3; } else { // Negative numbers if( dfMan <= -1.0 ) return; df1 = -1000.0; iExp -= 3; } } else if( roEvtSpn.GetEventType( ) == wxEVT_SCROLL_LINEDOWN ) { // Decrement the value if( dfMan < 0.0 ) { // Negative numbers if( dfMan >= -1000.0 ) return; df1 = -1.0; iExp += 3; } else { // Positive numbers if( dfMan >= 1.0 ) return; df1 = 1000.0; iExp -= 3; } } else return; // Set the new spin control and choice control values if( m_oChoUnits.bSetUnits( iExp ) ) dfMan = df1; m_oSpnValue.bSetValue( dfMan ); } //************************************************************************************************** // Units choice box event handler. // // Argument List : // roEvtCmd - An object holding information about the event void PnlValue::OnChoUnits( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { eTypeUnits eUType; eUType = m_oChoUnits.eGetUnitsType( ); if( eUType==eUNITS_TMPC || eUType==eUNITS_TMPF ) { if( m_oChoUnits.rosGetUnits( ).IsSameAs( wxT("Deg.C") ) ) bSetUnitsType( eUNITS_TMPC ); else if( m_oChoUnits.rosGetUnits( ).IsSameAs( wxT("Deg.F") ) ) bSetUnitsType( eUNITS_TMPF ); } else if( eUType==eUNITS_PHAD || eUType==eUNITS_PHAR ) { if( m_oChoUnits.rosGetUnits( ).IsSameAs( wxT("Degree") ) ) bSetUnitsType( eUNITS_PHAD ); else if( m_oChoUnits.rosGetUnits( ).IsSameAs( wxT("Radian") ) ) bSetUnitsType( eUNITS_PHAR ); } } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/utility/CnvtType.hpp0000644000000000000000000001355712474775641017631 0ustar rootroot//************************************************************************************************** // CnvtType.hpp * // -------------- * // Description : This class is intended to provide useful functionality for converting basic types * // one to another eg. wxString to long. The strings may contain alpha scaling * // factors eg. K for Kilo. * // Started : 2004-09-21 * // Last Update : 2015-01-31 * // Copyright : (C) 2004 by MSWaters * // Note : This class cannot be instanciated. It is intended as a container for related * // functionality. A static member function of a class may be accessed without using * // an object of that class. A static member function does not have a 'this' pointer. * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef CNVTTYPE_HPP #define CNVTTYPE_HPP // System Includes #ifndef __WXGTK__ #include #include #include #include #include #include #include #endif // Application includes #ifdef __WXGTK__ #include "TypeDefs.hpp" #endif // Macro declarations to convert between degree Celsius and Fahrenheit. #define TEMP_DEGF2C(X) ((X - 32.0) * 100.0 / (212.0 - 32.0)) // Convert from Fahrenheit to Deg.C #define TEMP_DEGC2F(X) (X * ((212.0 - 32.0) / 100.0) + 32.0) // Convert from Celsius to Deg.F // Local Constant Declarations #ifdef __WXGTK__ #define TYPE_STR wxString #define TYPE_CHR wxChar #define C_STR mb_str #define IS_DIGIT wxIsdigit #else #define TYPE_STR std::string #define TYPE_CHR char #define C_STR c_str #define IS_DIGIT isdigit #define wxT(X) X #endif #define CNVT_DEF_FLT_RES 3 // Default floating point number resolution #define CNVT_MIN_FLT_RES 1 // Minimum floating point number resolution #define CNVT_MAX_FLT_RES 10 // Maximum floating point number resolution //************************************************************************************************** class CnvtType { private : static int m_iFltRes; CnvtType( void ); ~CnvtType( ); #ifdef TEST_CNVTTYPE public : #endif static TYPE_STR & rosGetNum( const TYPE_STR & rosNum ); #ifndef TEST_CNVTTYPE public : #endif static bool bIsEqual( float f1, float f2 ); static bool bIsEqual( double df1, double df2 ); static int iGetFltRes ( void ) { return( m_iFltRes ); } static bool bSetFltRes ( int iRes ); static bool bIsInteger ( const TYPE_STR & rosStr ); static bool bIsFloat ( const TYPE_STR & rosStr ); static bool bParseFlt ( float fNum, float * pfMan, int * piExp ); static bool bParseFlt ( double dfNum, double * pdfMan, int * piExp ); static bool bParseDbl ( double dfNum, double * pdfMan, int * piExp ) { return( bParseFlt( dfNum, pdfMan, piExp ) ); } static bool bStrToInt ( const TYPE_STR & rosNum, int * piNum ); static bool bStrToInt ( const TYPE_STR & rosNum, long * pliNum ); static bool bStrToLong ( const TYPE_STR & rosNum, long * pliNum ) { return( bStrToInt( rosNum, pliNum ) ); } static bool bStrToFlt ( const TYPE_STR & rosNum, float * pfNum ); static bool bStrToFlt ( const TYPE_STR & rosNum, double * pdfNum ); static bool bStrToDbl ( const TYPE_STR & rosNum, double * pdfNum ) { return( bStrToFlt( rosNum, pdfNum ) ); } static bool bIntToStr ( int iNum , TYPE_STR & rosNum ); static bool bIntToStr ( long liNum , TYPE_STR & rosNum ); static bool bLongToStr ( long liNum , TYPE_STR & rosNum ) { return( bIntToStr( liNum, rosNum ) ); } static bool bFltToStr ( float fNum , TYPE_STR & rosNum ); static bool bFltToStr ( double dfNum, TYPE_STR & rosNum ); static bool bDblToStr ( double dfNum, TYPE_STR & rosNum ) { return( bFltToStr( dfNum, rosNum ) ); } static bool bFltToStrEng ( float fNum , TYPE_STR & rosNum ); static bool bFltToStrEng ( double dfNum, TYPE_STR & rosNum ); static bool bDblToStrEng ( double dfNum, TYPE_STR & rosNum ) { return( bFltToStrEng( dfNum, rosNum ) ); } static bool bUnitPfxToExp( TYPE_CHR ocPfx, int * piExp ); static bool bUnitExpToPfx( int iExp, TYPE_CHR * pocPfx ); }; //************************************************************************************************** #endif // CNVTTYPE_HPP gspiceui-1.1.00+dfsg/src/utility/PnlTxtSpn.cpp0000644000000000000000000004747212502174166017750 0ustar rootroot//************************************************************************************************** // PnlTxtSpn.cpp * // --------------- * // Started : 2004-03-20 * // Last Update : 2015-03-17 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "PnlTxtSpn.hpp" //************************************************************************************************** // Allocate storage for static data members. uint PnlTxtSpn::m_uiSpnPeriod = SPN_PERIOD_DEF; //************************************************************************************************** // Implement an event table. wxBEGIN_EVENT_TABLE( PnlTxtSpn, wxPanel ) EVT_CHAR ( PnlTxtSpn::OnTxtChar ) EVT_TEXT_MAXLEN( PnlTxtSpn::ID_TXTCTRL, PnlTxtSpn::OnTxtMaxLen ) EVT_SPIN_UP ( PnlTxtSpn::ID_SPINBTN, PnlTxtSpn::OnSbnInc ) EVT_SPIN_DOWN ( PnlTxtSpn::ID_SPINBTN, PnlTxtSpn::OnSbnDec ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. PnlTxtSpn::PnlTxtSpn( void ) : wxPanel( ) { bClear( ); } //************************************************************************************************** // Destructor. PnlTxtSpn::~PnlTxtSpn( ) { } //************************************************************************************************** // Layout the display objects. void PnlTxtSpn::DoLayout( void ) { wxBoxSizer * poSzr; wxSizerFlags oFlags; // Create and set the sizer for the panel poSzr = new wxBoxSizer( wxHORIZONTAL ); SetSizer( poSzr ); #if !wxCHECK_VERSION( 3,0,0 ) oFlags.Expand( ); #endif // Add the text control oFlags.Proportion( 1 ); poSzr->Add( &m_oTxtValue, oFlags ); // Add the spin control oFlags.Proportion( 0 ); poSzr->Add( &m_oSbnValue, oFlags ); // Set the panel sizer and the min. & init. sizes as calculated by the sizer poSzr->SetSizeHints( this ); } //************************************************************************************************** // Create an instance of this object. // // Argument List : // poWin - The parent window // oWinID - The window identifier // iWidth - The width the spin control in pixels // // Return Values : // true - Success // false - Failure bool PnlTxtSpn::bCreate( wxWindow * poWin, wxWindowID oWinID, int iWidth ) { int i1; if( bIsCreated( ) ) return( true ); // Subtract 15 (pixels) from iWidth to allow for the spin control width i1 = iWidth - 15; if( i1 <= 0 ) i1 = -1; // Create the base class (wxPanel) if( ! wxPanel::Create( poWin, oWinID ) ) return( false ); // Create the text control m_oTxtValue.Create( this, ID_TXTCTRL, wxT(""), wxDefaultPosition, wxSize( i1, -1 ), wxTE_RIGHT ); // Create the spin control m_oSbnValue.Create( this, ID_SPINBTN, wxDefaultPosition, wxDefaultSize, wxSP_VERTICAL | wxSP_ARROW_KEYS ); // Set the display object attributes m_oTxtValue.SetMaxLength( SPN_MAXLEN ); m_oSbnValue.SetRange( -0x8000, 0x7FFF ); bSetValDef( m_dfDefValue ); bSetRange( m_dfMinValue, m_dfMaxValue ); bSetIncSz( m_dfMinIncSz, m_dfMaxIncSz ); bSetValue( m_dfDefValue ); // Layout the display objects DoLayout( ); return( true ); } //************************************************************************************************** // Clear the object attributes. // // Return Values : // true - Success // false - Failure bool PnlTxtSpn::bClear( void ) { bool bRtn=true; if( ! bSetValType( eVALUE_FLT ) ) bRtn = false; if( ! bSetValDef( 0.0 ) ) bRtn = false; if( ! bSetRange( -10000.0, 10000.0 ) ) bRtn = false; if( ! bSetIncSz( 1.0, 100.0 ) ) bRtn = false; if( m_oTxtValue.GetParent( ) != NULL ) m_oTxtValue.Clear( ); return( bRtn ); } //************************************************************************************************** // Set the variable type to be displayed by the spin control. // // Argument List : // eVType - The variable type specifier // // Return Values : // true - Success // false - Failure bool PnlTxtSpn::bSetValType( eTypeValue eVType ) { double df1; // Argument validity checks if( m_eValType == eVType ) return( true ); if( eVType!=eVALUE_INT && eVType!=eVALUE_FLT && eVType!=eVALUE_SCI && eVType!=eVALUE_ENG ) return( false ); // Set the new variable type m_eValType = eVType; // Display the new variable type if( bIsCreated( ) ) { if( ! rosGetValue( ).IsEmpty( ) ) { // Attempt to display the current value using the new format df1 = dfGetValue( ); bSetValue( df1 ); } } return( true ); } //************************************************************************************************** // Set the current value of the spin control. // // Argument List : // dfValue - The float value // // Return Values : // true - Success // false - Failure bool PnlTxtSpn::bSetValue( double dfValue ) { wxString osValue; double df1; long li1; int i1; // Argument validity checks if( ! bIsCreated( ) ) return( false ); if( dfValuem_dfMaxValue && !CnvtType::bIsEqual( dfValue, m_dfMaxValue ) ) return( false ); // Format the string to load into the control switch( m_eValType ) { case eVALUE_HEX : if( dfValue < 0.0 ) return( false ); li1 = lround( dfValue ); osValue.Printf( wxT("%X"), (ulong) li1 ); break; case eVALUE_INT : li1 = lround( dfValue ); osValue.Printf( wxT("%li"), li1 ); break; case eVALUE_FLT : osValue.Printf( wxT("%#.2f"), dfValue ); break; case eVALUE_SCI : osValue.Printf( wxT("%#.2E"), dfValue ); break; case eVALUE_ENG : if( ! CnvtType::bParseFlt( dfValue, &df1, &i1 ) ) return( false ); for( ; i1%3!=0; i1-- ) df1 *= 10.0; osValue.Printf( wxT("%#.2fE%02i"), df1, i1 ); break; default: return( false ); } // Load the new value osValue.Append( wxT(" ") ); m_oTxtValue.SetValue( osValue ); return( true ); } //************************************************************************************************** // Set the current value of the spin control. // // Argument List : // rosValue - The string value // // Return Values : // true - Success // false - Failure bool PnlTxtSpn::bSetValue( const wxString & rosValue ) { double dfValue; if( ! CnvtType::bStrToFlt( rosValue, &dfValue ) ) return( false ); if( ! bSetValue( dfValue ) ) return( false ); return( true ); } //************************************************************************************************** // Set the initial value of the spin control. // // Argument List : // dfDefValue - The spin control default value // // Return Values : // true - Success // false - Failure bool PnlTxtSpn::bSetValDef( double dfDefValue ) { if( dfDefValue == NOVAL_DBL ) return( bSetValue( m_dfDefValue ) ); if( dfDefValuem_dfMaxValue && !CnvtType::bIsEqual( dfDefValue, m_dfMaxValue ) ) return( false ); m_dfDefValue = dfDefValue; return( true ); } //************************************************************************************************** // Set the increment sizes of the spin control. // // This spin control can be incremented using two different approaches, // constant or variable step sizes. A constant step size means that the spin // control is incremented by the same amount throughout it's range. A variable // step size means that the spin control is incremented by an amount dependent // on it's current value. // // Argument List : // dfMinIncSz - The minimum spin control increment size // dfMaxIncSz - The maximum spin control increment size // // Return Values : // true - Success // false - Failure bool PnlTxtSpn::bSetIncSz( double dfMinIncSz, double dfMaxIncSz ) { // Constant or variable incrementing? if( dfMinIncSz < 0.0 ) return( false ); if( dfMaxIncSz < 0.0 ) dfMaxIncSz = dfMinIncSz; // Do some validity checks on the arguments if( dfMinIncSz > dfMaxIncSz ) return( false ); // Check that the new increment sizes fit within the current range if( dfMaxIncSz > (m_dfMaxValue - m_dfMinValue) ) return( false ); m_dfMinIncSz = dfMinIncSz; // Set increment sizes m_dfMaxIncSz = dfMaxIncSz; return( true ); } //************************************************************************************************** // Set the spin control range. // // Argument List : // dfMinValue - The spin control minimum value // dfMaxValue - The spin control maximum value // // Return Values : // true - Success // false - Failure bool PnlTxtSpn::bSetRange( double dfMinValue, double dfMaxValue ) { wxString os1; double df1; // Check argument validity if( dfMinValue >= dfMaxValue ) return( false ); // Set new parameter values m_dfMinValue = dfMinValue; m_dfMaxValue = dfMaxValue; // Update the text control if necessary if( bIsCreated( ) ) { os1 = m_oTxtValue.GetValue( ); CnvtType::bStrToFlt( os1, &df1 ); if( df1 < m_dfMinValue ) bSetValue( m_dfMinValue ); else if( df1 > m_dfMaxValue ) bSetValue( m_dfMaxValue ); } return( true ); } //************************************************************************************************** // Get the current spin control value as an integer. // // Return Values : // Success - The integer value // Failure - NOVAL_LONG long PnlTxtSpn::liGetValue( void ) { double df1; long li1; // Get the value as a float df1 = dfGetValue( ); if( df1 == NOVAL_DBL ) return( NOVAL_LNG ); // Round the value li1 = lround( df1 ); return( li1 ); } //************************************************************************************************** // Get the current spin control value as a float. // // Return Values : // Success - The float value // Failure - NOVAL_DBL double PnlTxtSpn::dfGetValue( void ) { wxString os1; double df1; // Has the control been created? if( ! bIsCreated( ) ) return( NOVAL_DBL ); // Get the value as a float os1 = m_oTxtValue.GetValue( ); if( ! CnvtType::bStrToFlt( os1, &df1 ) ) return( NOVAL_DBL ); return( df1 ); } //************************************************************************************************** // Get the current spin control value as a string. // // Return Values : // Success - The string value // Failure - An empty string const wxString & PnlTxtSpn::rosGetValue( void ) { static wxString osValue; osValue.Empty( ); if( dfGetValue( ) != NOVAL_DBL ) { osValue = m_oTxtValue.GetValue( ); osValue.Trim( ); } return( osValue ); } //************************************************************************************************** // Set the spin control repeat rate. // // Argument List : // uiPeriod - The period between successive spin control updates (in mSec) // // Return Values : // Success - true // Failure - false bool PnlTxtSpn::bSetSpnPeriod( uint uiPeriod ) { if( uiPeriodSPN_PERIOD_MAX ) return( false ); m_uiSpnPeriod = uiPeriod; return( true ); } //************************************************************************************************** // Print the object attributes. // // Argument List : // rosPrefix - A prefix to every line displayed (usually just spaces) void PnlTxtSpn::Print( const wxString & rosPrefix ) { std::cout << rosPrefix.mb_str( ) << "m_eValType : "; switch( m_eValType ) { case eVALUE_BIN : std::cout << "eVALUE_BIN"; break; case eVALUE_OCT : std::cout << "eVALUE_OCT"; break; case eVALUE_HEX : std::cout << "eVALUE_HEX"; break; case eVALUE_INT : std::cout << "eVALUE_INT"; break; case eVALUE_FLT : std::cout << "eVALUE_FLT"; break; case eVALUE_SCI : std::cout << "eVALUE_SCI"; break; case eVALUE_ENG : std::cout << "eVALUE_ENG"; break; case eVALUE_NONE : std::cout << "eVALUE_NONE"; break; default : std::cout << "Invalid"; } std::cout << '\n'; std::cout << rosPrefix.mb_str( ) << "m_dfDefValue : " << m_dfDefValue << '\n'; std::cout << rosPrefix.mb_str( ) << "m_dfMinValue : " << m_dfMinValue << '\n'; std::cout << rosPrefix.mb_str( ) << "m_dfMaxValue : " << m_dfMaxValue << '\n'; std::cout << rosPrefix.mb_str( ) << "m_dfMinIncSz : " << m_dfMinIncSz << '\n'; std::cout << rosPrefix.mb_str( ) << "m_dfMaxIncSz : " << m_dfMaxIncSz << '\n'; } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // Key press event handler. // // Argument List : // roEvtKey - An object holding information about the event void PnlTxtSpn::OnTxtChar( wxKeyEvent & roEvtKey ) { wxSpinEvent oEvtSpn; int iKeyCode; // Look for the modifier keys and if( roEvtKey.HasModifiers( ) ) return; // Get the key code iKeyCode = roEvtKey.GetKeyCode( ); // Process arrow keys etc. if( iKeyCode == WXK_UP ) { OnSbnInc( oEvtSpn ); return; } else if( iKeyCode == WXK_DOWN ) { OnSbnDec( oEvtSpn ); return; } // Test that the key code is valid and reject invalid characters // ??? (2007-07-07) This doesn't work but it would be good if it did. Only up // and down arrow keys get through to this function, don't know why. switch( iKeyCode ) { case (int) '.' : case (int) '0' : case (int) '1' : case (int) '2' : case (int) '3' : case (int) '4' : case (int) '5' : case (int) '6' : case (int) '7' : case (int) '8' : case (int) '9' : case (int) '+' : case (int) '-' : case (int) 'e' : case (int) 'E' : case WXK_BACK : case WXK_DELETE : break; default : wxBell( ); // Sound the system bell } } //************************************************************************************************** // Text control maximum length reached event handler. // // Argument List : // roEvtCmd - An object holding information about the event void PnlTxtSpn::OnTxtMaxLen( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { wxBell( ); // Sound the system bell } //************************************************************************************************** // Spin button scroll up event handler. // // Argument List : // roEvtSpn - An object holding information about the event void PnlTxtSpn::OnSbnInc( wxSpinEvent & roEvtSpn ) { static uint ui_msec=0; double dfValue, dfIncSz; wxString os1; double df1, df2; uint ui1; int i1; // Allow additional event handlers to be called roEvtSpn.Skip( ); // Increment the text control SPN_RPTRATE times per second ui1 = (uint) wxGetLocalTimeMillis( ).GetLo( ); if( ui1>ui_msec && (ui1-ui_msec) m_dfMaxIncSz ) dfIncSz = m_dfMaxIncSz; } // Determine if the text control value is a whole multiple of the increment size if( ! CnvtType::bIsEqual( fmod( dfValue, dfIncSz ), 0.0 ) ) dfIncSz = ceil( dfValue / dfIncSz ) * dfIncSz - dfValue; // Increment the value and check it against the minimum and maximum limits dfValue += dfIncSz; if( dfValue > m_dfMaxValue ) dfValue = m_dfMaxValue; else if( dfValue < m_dfMinValue ) dfValue = m_dfMinValue; // Set the text control value bSetValue( dfValue ); } //************************************************************************************************** // Spin button scroll down event handler. // // Argument List : // roEvtSpn - An object holding information about the event void PnlTxtSpn::OnSbnDec( wxSpinEvent & roEvtSpn ) { static uint ui_msec=0; double dfValue, dfDecSz; wxString os1; double df1, df2; uint ui1; int i1; // Allow additional event handlers to be called roEvtSpn.Skip( ); // Decrement the text control SPN_RPTRATE times per second ui1 = (uint) wxGetLocalTimeMillis( ).GetLo( ); if( ui1>ui_msec && (ui1-ui_msec) m_dfMaxIncSz ) dfDecSz = m_dfMaxIncSz; } // Determine if the text control value is a whole multiple of the decrement size if( ! CnvtType::bIsEqual( round( dfValue / dfDecSz ), dfValue / dfDecSz ) ) dfDecSz = dfValue - floor( dfValue / dfDecSz ) * dfDecSz; // Decrement the value and check it against the minimum and maximum limits dfValue -= dfDecSz; if( dfValue < m_dfMinValue ) { // The following makes zero a valid value even if the allowable limits don't include it if( m_eValType==eVALUE_SCI || m_eValType==eVALUE_ENG ) dfValue = 0.0; else dfValue = m_dfMinValue; } else if( dfValue > m_dfMaxValue ) dfValue = m_dfMaxValue; // Set the text control value bSetValue( dfValue ); } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/utility/PnlValue.hpp0000644000000000000000000001216012464145077017561 0ustar rootroot//************************************************************************************************** // PnlValue.hpp * // -------------- * // Description : This class derives from the wxPanel base class. It provides the functionality * // for displaying and setting the value of floating point variables and can * // optionally allow the setting and processing of units. * // Started : 2004-09-14 * // Last Update : 2015-02-03 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef PNLVALUE_HPP #define PNLVALUE_HPP // Application Includes #include "TypeDefs.hpp" #include "utility/PnlTxtSpn.hpp" #include "utility/ChoUnits.hpp" #include "utility/LblUnits.hpp" #include "utility/CnvtType.hpp" // wxWidgets Library Includes #include //************************************************************************************************** class PnlValue : public wxPanel { public : // Enumerated type to specify if or how the units should be displayed enum eTypeShow { eSHOW_NONE, // Don't display units at all eSHOW_LBL, // Display the units in a static label control eSHOW_CHO // Display the units in a choice control }; private : // Flag indicating if units should accommodated eTypeShow m_eShowUnits; // Display objects wxLabel m_oLblName; // The static value name PnlTxtSpn m_oSpnValue; // Displays the numeric value ChoUnits m_oChoUnits; // Displayed if the units are user selectable LblUnits m_oLblUnits; // Displayed if the units aren't user selectable void DoLayout ( void ); public : PnlValue ( void ); ~PnlValue ( ); bool bCreate ( wxWindow * poWin, wxWindowID oWinID, int iNameWd, int iValueWd, int iUnitsWd, const wxPoint & roPosn=wxDefaultPosition, eTypeShow eShowUnits=eSHOW_CHO ); bool bIsCreated ( void ) { return( GetParent( )!=NULL ? true : false ); } bool bClear ( void ); bool bSetName ( const wxString & rosName ); bool bSetValueType( eTypeValue eVType ); bool bSetUnitsType( eTypeUnits eUType ); bool bSetSpnRange ( double dfMinValue, double dfMaxValue ); bool bSetSpnIncSz ( double dfMinIncSz, double dfMaxIncSz=-1.0 ); bool bSetDefValue ( double dfValue=NOVAL_DBL ) { return( m_oSpnValue.bSetValDef( dfValue ) ); } bool bSetDefUnits ( const wxString & rosUnits ) { return( m_oChoUnits.bSetDefUnits( rosUnits ) );} bool bSetValue ( long liValue, uint uiExp=NOVAL_UINT ); bool bSetValue ( double dfValue, int iExp=NOVAL_INT ); bool bSetValue ( const wxString & rosValue ); bool bSetUnits ( const wxString & rosUnits ); bool bShowUnits ( eTypeShow eShow ); const wxString & rosGetName ( void ); long liGetValue ( void ); double dfGetValue ( void ); int iGetValue ( void ) { return( (int) liGetValue( ) ); } float fGetValue ( void ) { return( (float) dfGetValue( ) ); } const wxString & rosGetValue ( void ); eTypeUnits eGetUnitsType( void ); const wxString & rosGetUnits ( void ); void Print( const wxString & rosPrefix=wxT(" ") ); private : // Event handlers void OnSpnScroll( wxSpinEvent & roEvtSpn ); void OnChoUnits ( wxCommandEvent & roEvtCmd ); // In order to be able to react to a menu command, it must be given a // unique identifier such as a const or an enum. enum ePnlItemID { ID_SPN_VALUE = 0, ID_CHO_UNITS, ID_LBL_UNITS, ID_UNUSED, ID_FST = ID_SPN_VALUE, ID_LST = ID_LBL_UNITS }; // Leave this as the last line as private access is envoked by macro wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // PNLVALUE_HPP gspiceui-1.1.00+dfsg/src/utility/LblUnits.hpp0000644000000000000000000000544712456734755017611 0ustar rootroot//************************************************************************************************** // LblUnits.hpp * // -------------- * // Description : This class is intended to provide useful functionality for managing the units * // associated with some variable. It is particular aimed at parameters to do with * // electronics. * // Started : 2014-03-01 * // Last Update : 2015-01-18 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef LBLUNITS_HPP #define LBLUNITS_HPP // Application Includes #include "TypeDefs.hpp" #include "base/UnitsBase.hpp" //************************************************************************************************** class LblUnits : public UnitsBase, public wxLabel { private : eTypeUnits m_eUnitsType; int m_iUnitsExp; public : LblUnits ( void ); ~LblUnits ( ); bool bCreate ( wxWindow * poWin, wxWindowID oWinID, int iWidth=-1 ); bool bIsCreated ( void ) { return( GetParent( )!=NULL ? true : false ); } bool bClear ( void ); bool bSetUnitsType( eTypeUnits eUType ); bool bSetUnits ( const wxString & rosUnits ); bool bSetUnits ( int iExp ); eTypeUnits eGetUnitsType( void ) { return( m_eUnitsType ); } const wxString & rosGetUnits ( void ); int iGetUnits ( void ) { return( m_iUnitsExp ); }; void Print( const wxString & rosPrefix=wxT(" ") ); }; //************************************************************************************************** #endif // LBLUNITS_HPP gspiceui-1.1.00+dfsg/src/utility/TextCtrl.cpp0000644000000000000000000002152212507467106017577 0ustar rootroot//************************************************************************************************** // TextCtrl.cpp * // -------------- * // Started : 2004-06-21 * // Last Update : 2015-04-03 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "TextCtrl.hpp" //************************************************************************************************** // Initialize static variables for class int TextCtrl::m_iLinesMax = TXT_LNSDEF; int TextCtrl::m_iLinesDsp = TXT_DISPDEF; //************************************************************************************************** // Constructor. TextCtrl::TextCtrl( void ) : wxTextCtrl( ) { bSetInitMsg( TXT_INITMSG ); bClear( ); } //************************************************************************************************** // Destructor. TextCtrl::~TextCtrl( ) { } //************************************************************************************************** // Create an instantance of this object. // // Argument List : // poWin - The parent window // oWinID - The window identifier // // Return Values : // true - Success // false - Failure bool TextCtrl::bCreate( wxWindow * poWin, wxWindowID oWinID ) { long lStyle; // Check if the object has already been created if( bIsCreated( ) ) return( true ); lStyle = wxTE_MULTILINE | wxTE_READONLY | wxSUNKEN_BORDER | wxTE_DONTWRAP | wxHSCROLL; if( ! Create( poWin, oWinID, wxT(""), wxDefaultPosition, wxDefaultSize, lStyle )) return( false ); SetFont( FONT_MONO ); return( bClear( ) ); } //************************************************************************************************** // Clear the text control. // // Return Values : // true - Success // false - Failure bool TextCtrl::bClear( void ) { long lStyle; m_iLinesCnt = 0; // Check if the object has already been created if( ! bIsCreated( ) ) return( false ); // Left-justify the text control contents lStyle = GetWindowStyle( ); lStyle &= ~( wxTE_LEFT | wxTE_CENTER | wxTE_RIGHT ); lStyle |= wxTE_LEFT; SetWindowStyle( lStyle ); Clear( ); // Clear the text control contents SetEditable( false ); // Make the text control non-editable DiscardEdits( ); // Clear internal modified flag as if the current changes had been saved return( true ); } //************************************************************************************************** // Clear the text control and display a message to the user. // // Return Values : // true - Success // false - Failure bool TextCtrl::bInitialize( void ) { int i1; // Check if the object has already been created if( ! bIsCreated( ) ) return( false ); bClear( ); // Clear the text control contents if( ! m_osInitMsg.IsEmpty( ) ) { // Center the default message horizontally SetWindowStyle( GetWindowStyle( ) | wxTE_CENTRE ); // Display the requisite number of blank lines for( i1=1; i1 60 ) return( false ); m_osInitMsg = rosMsg; return( true ); } //************************************************************************************************** // Set the maximum number of lines to be loaded into the control. // // Argument List : // iLines - The maximum number of lines to be displayed // // Return Values : // true - Success // false - Failure bool TextCtrl::bSetLinesMax( int iLines ) { if( iLinesTXT_LNSMAX ) return( false ); m_iLinesMax = iLines; return( true ); } //************************************************************************************************** // Set the number of lines to be displayed in the control. // // Argument List : // iLines - The number of lines to be displayed // // Return Values : // true - Success // false - Failure bool TextCtrl::bSetLinesDsp( int iLines ) { if( iLinesTXT_DISPMAX ) return( false ); m_iLinesDsp = iLines; return( true ); } //************************************************************************************************** // Append a line of text to the text control. // // Argument List : // rosLine - The line of text to append // // Return Values : // true - Success // false - Failure bool TextCtrl::bAppendLine( const wxString & rosLine ) { // Check if the object has already been created if( ! bIsCreated( ) ) return( false ); // Check that the max. lines hasn't been reached if( m_iLinesCnt >= m_iLinesMax ) return( false ); // Append this text and a line terminator *this << rosLine << wxT('\n'); m_iLinesCnt++; return( true ); } //************************************************************************************************** // Append the contents of a file to the text control. // // Argument List : // roFName - The file name to append // // Return Values : // true - Success // false - Failure bool TextCtrl::bAppendFile( const wxString & roFName ) { wxString os1; size_t szt1; // Check if the object has already been created if( ! bIsCreated( ) ) return( false ); // Open the file wxTextFile oFile( roFName ); if( ! oFile.Open( ) ) { *this << wxT("Couldn't load the file containing the process output :\n "); if( roFName.IsEmpty( ) ) *this << wxT("The log file name is empty!"); else *this << roFName; return( false ); } // Check that the file isn't empty if( oFile.GetLineCount( ) > 0 ) { // Append the file contents to the text control for( szt1=0; szt124 ) return( false ); if( iExp%3 != 0 ) return( false ); m_iUnitsExp = iExp; bSetUnitsType( m_eUnitsType ); return( true ); } //************************************************************************************************** // Get the units. // // Return Values : // Success - The selected units // Failure - An empty string const wxString & LblUnits::rosGetUnits( void ) { static wxString osUnits; osUnits.Empty( ); if( ! bIsCreated( ) ) return( osUnits ); osUnits = GetLabel( ); return( osUnits ); } //************************************************************************************************** // Print the object attributes. // // Argument List : // rosPrefix - A prefix to every line displayed (usually just spaces) void LblUnits::Print( const wxString & rosPrefix ) { std::cout << rosPrefix.mb_str( ) << "m_eUnitsType : "; switch( m_eUnitsType ) { case eUNITS_CAP : std::cout << "eUNITS_CAP"; break; case eUNITS_IND : std::cout << "eUNITS_IND"; break; case eUNITS_RES : std::cout << "eUNITS_RES"; break; case eUNITS_COND : std::cout << "eUNITS_COND"; break; case eUNITS_VOLT : std::cout << "eUNITS_VOLT"; break; case eUNITS_CURR : std::cout << "eUNITS_CURR"; break; case eUNITS_TIME : std::cout << "eUNITS_TIME"; break; case eUNITS_FREQ : std::cout << "eUNITS_FREQ"; break; case eUNITS_CHRG : std::cout << "eUNITS_CHRG"; break; case eUNITS_PHAD : std::cout << "eUNITS_PHAD"; break; case eUNITS_PHAR : std::cout << "eUNITS_PHAR"; break; case eUNITS_TMPC : std::cout << "eUNITS_TMPC"; break; case eUNITS_TMPF : std::cout << "eUNITS_TMPF"; break; case eUNITS_PCT : std::cout << "eUNITS_PCT"; break; case eUNITS_EXP : std::cout << "eUNITS_EXP"; break; case eUNITS_NONE : std::cout << "eUNITS_NONE"; break; default : std::cout << "Invalid"; } std::cout << '\n'; std::cout << rosPrefix.mb_str( ) << "m_iUnitsExp : " << m_iUnitsExp << '\n'; } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/utility/PnlLblCho.cpp0000644000000000000000000001046612461334055017643 0ustar rootroot//************************************************************************************************** // PnlLblCho.cpp * // --------------- * // Started : 2014-02-20 * // Last Update : 2015-01-26 * // Copyright : (C) 2014 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "PnlLblCho.hpp" //************************************************************************************************** // Implement an event table. //wxBEGIN_EVENT_TABLE( PnlLblCho, wxPanel ) // EVT_CHOICE( ID_CHOICE, PnlLblCho::OnChoice ) //wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. PnlLblCho::PnlLblCho( void ) : wxPanel( ) { } //************************************************************************************************** // Destructor. PnlLblCho::~PnlLblCho( ) { } //************************************************************************************************** // Layout the display objects. void PnlLblCho::DoLayout( void ) { wxBoxSizer * poSzr; wxSizerFlags oFlags; poSzr = new wxBoxSizer( wxHORIZONTAL ); oFlags.Proportion( 1 ); oFlags.Border( wxTOP, 5 ); poSzr->Add( &m_oLblName, oFlags ); oFlags.Proportion( 0 ); oFlags.Border( wxTOP, 0 ); poSzr->Add( &m_oChoice , oFlags ); // Set the panel sizer and the min. & init. sizes as calculated by the sizer SetSizer( poSzr ); poSzr->SetSizeHints( this ); } //************************************************************************************************** // Create an instance of this object. // // Argument List : // poWin - The parent window // oWinID - The window identifier // iNameWd - The width of the name label in pixels // iChoiceWd - The width of the choice control in pixels // roPosn - The position // // Return Values : // true - Success // false - Failure bool PnlLblCho::bCreate( wxWindow * poWin, wxWindowID oWinID, int iNameWd, int iChoiceWd, const wxPoint & roPosn ) { if( bIsCreated( ) ) return( true ); // Create the base class (wxPanel) if( ! wxPanel::Create( poWin, oWinID, roPosn, wxSize( -1, GUI_CTRL_HT ) ) ) return( false ); // Create the variable name label m_oLblName.Create( this, ID_UNUSED, wxT("Unknown"), wxDefaultPosition, wxSize( iNameWd , GUI_CTRL_HT ), wxALIGN_LEFT ); // Create the choice control m_oChoice .Create( this, ID_CHOICE, wxDefaultPosition, wxSize( iChoiceWd, GUI_CTRL_HT ) ); // Layout the display objects DoLayout( ); return( true ); } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // Choice control an item on the list is selected event handler. // // Argument List : // roEvtCmd - An object holding information about the event /* void PnlLblCho::OnChoice( wxCommandEvent & roEvtCmd ) { } */ //************************************************************************************************** gspiceui-1.1.00+dfsg/src/utility/PnlTxtSpn.hpp0000644000000000000000000001260012462145312017732 0ustar rootroot//************************************************************************************************** // PnlTxtSpn.hpp * // --------------- * // Description : This class extends wxPanel and can substitute for the wxWidgets library class * // wxSpinCtrl. It adds some useful functionality : * // - floating point or integer numbers can be displayed, * // - incrementing by orders of magnitude not just a constant, * // - variable step size incrementing. * // Started : 2004-03-20 * // Last Update : 2015-01-28 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef PNLTXTSPN_HPP #define PNLTXTSPN_HPP // Application Includes #include "TypeDefs.hpp" #include "utility/CnvtType.hpp" // wxWidgets Includes #include // Local Constant Declarations #define SPN_MAXLEN 9 // Maximum chars. that may be entered into text ctrl. #define SPN_PERIOD_DEF 83 // The default spin button repeat period (in msec) #define SPN_PERIOD_MIN 20 // The minimum spin button repeat period (in msec) #define SPN_PERIOD_MAX 400 // The maximum spin button repeat period (in msec) //************************************************************************************************** class PnlTxtSpn : public wxPanel { private : // Display objects wxTextCtrl m_oTxtValue; wxSpinButton m_oSbnValue; eTypeValue m_eValType; // The value type to be displayed double m_dfDefValue; // Default value double m_dfMinValue; // Minimum value double m_dfMaxValue; // Maximum value double m_dfMinIncSz; // Minimum increment size double m_dfMaxIncSz; // Maximum increment size static uint m_uiSpnPeriod; // The interval between successive spin control updates void DoLayout ( void ); public : PnlTxtSpn ( void ); ~PnlTxtSpn ( ); bool bCreate ( wxWindow * poWin, wxWindowID oWinID, int iWidth=-1 ); bool bIsCreated ( void ) { return( GetParent( )!=NULL ? true : false ); } bool bClear ( void ); bool bSetValType( eTypeValue eVType ); bool bSetRange ( double dfMinValue, double dfMaxValue ); bool bSetIncSz ( double dfMinIncSz, double dfMaxIncSz=-1.0 ); bool bSetValue ( long liValue ) { return( bSetValue( (double) liValue ) ); } bool bSetValue ( double dfValue ); bool bSetValue ( const wxString & rosValue ); bool bSetValDef ( double dfDefValue=NOVAL_DBL ); bool bSetValMin ( double dfMinValue ) { return( bSetRange( dfMinValue, m_dfMaxValue ) ); } bool bSetValMax ( double dfMaxValue ) { return( bSetRange( m_dfMinValue, dfMaxValue ) ); } inline eTypeValue eGetVType ( void ) { return( m_eValType ); } long liGetValue ( void ); double dfGetValue ( void ); const wxString & rosGetValue ( void ); inline double dfGetValDef ( void ) { return( m_dfDefValue ); } inline double dfGetValMin ( void ) { return( m_dfMinValue ); } inline double dfGetValMax ( void ) { return( m_dfMaxValue ); } inline double dfGetMinIncSz( void ) { return( m_dfMinIncSz ); } inline double dfGetMaxIncSz( void ) { return( m_dfMaxIncSz ); } static bool bSetSpnPeriod( uint uiPeriod ); void Print( const wxString & rosPrefix=wxT(" ") ); private : // Event handlers void OnTxtChar ( wxKeyEvent & roEvtKey ); void OnTxtMaxLen( wxCommandEvent & roEvtCmd ); void OnSbnInc ( wxSpinEvent & roEvtSpn ); void OnSbnDec ( wxSpinEvent & roEvtSpn ); friend class PnlValue; // In order to be able to react to a menu command, it must be given a // unique identifier such as a const or an enum. enum ePnlItemID { ID_TXTCTRL = 1, ID_SPINBTN, ID_UNUSED, ID_FST = ID_TXTCTRL, ID_LST = ID_SPINBTN }; // Leave this as the last line as private access is envoked by macro wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // PNLTXTSPN_HPP gspiceui-1.1.00+dfsg/src/utility/TextCtrl.hpp0000644000000000000000000001054312507466120017600 0ustar rootroot//************************************************************************************************** // TextCtrl.hpp * // -------------- * // Description : This class extends wxTextCtrl, it adds some useful functionality (eg. increment * // by more than one). * // Started : 2004-06-21 * // Last Update : 2015-04-03 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef TEXTCTRL_HPP #define TEXTCTRL_HPP // Application Includes #include "TypeDefs.hpp" // wxWidgets Includes #include #include // Local Constant Declarations #define TXT_INITMSG wxT("Empty") // Default initialization message #define TXT_INITLNS 4 // Totals initial lines including init. msg. #define TXT_DISPMIN 10 // Minimum allowable lines in display area #define TXT_DISPDEF 15 // Default number of lines in display area #define TXT_DISPMAX 50 // Maximum allowable lines in display area #define TXT_LNSMIN 100 // Minimum allowable lines in text control #define TXT_LNSDEF 1E4 // Default number of lines in text control #define TXT_LNSMAX 1E6 // Maximum allowable lines in text control #define TXT_VIEWCOLS 122 // The number of columns in display area #define TXT_NBKTABHT 40 // Extra height in pixels needed by wxNotebook #define TXT_FONTHT 12.7 // Height in pixels of the font //************************************************************************************************** class TextCtrl : public wxTextCtrl { private : wxString m_osInitMsg; // A message to be displayed when the control has been cleared static int m_iLinesMax; // Max no. lines the text controls will hold static int m_iLinesDsp; // No. of lines in text control display area int m_iLinesCnt; // No. of lines currently in text control public : TextCtrl ( void ); ~TextCtrl ( ); bool bCreate ( wxWindow * poWin, wxWindowID oWinID=-1 ); bool bIsCreated ( void ) { return( GetParent() != NULL ); } bool bClear ( void ); bool bInitialize ( void ); bool bIsEmpty ( void ); bool bSetInitMsg ( const wxString & rosMsg ); static bool bSetLinesMax( int iLines ); static bool bSetLinesDsp( int iLines ); const wxString & rosGetInitMsg ( void ) { return( m_osInitMsg ); } int iGetLinesMax( void ) { return( m_iLinesMax ); } int iGetLinesDsp( void ) { return( m_iLinesDsp ); } int iGetLinesCnt( void ) { return( m_iLinesCnt ); } static int iGetPixelHt ( void ) { return( (int) ((float) m_iLinesDsp * TXT_FONTHT + 0.5 )); } bool bAppendLine ( const wxString & rosLine ); bool bAppendFile ( const wxString & roFName ); bool bLoadFile ( const wxString & roFName ); }; //************************************************************************************************** #endif // TEXTCTRL_HPP gspiceui-1.1.00+dfsg/src/utility/PnlLblTxt.hpp0000644000000000000000000000577412452502263017722 0ustar rootroot//************************************************************************************************** // PnlLblTxt.hpp * // --------------- * // Description : This class extends wxPanel, and can substitute for the wxWidgets library class * // wxTextCtrl. It adds a label to the left of a single line wxTextCtrl control. * // Started : 2014-02-22 * // Last Update : 2014-12-04 * // Copyright : (C) 2014 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef PNLLBLTXT_HPP #define PNLLBLTXT_HPP // Application Includes #include "TypeDefs.hpp" //************************************************************************************************** class PnlLblTxt : public wxPanel { private : wxLabel m_oLblName; // The text control name displayed to the left wxTextCtrl m_oTxtCtrl; // The wxTextCtrl object to contain the text void DoLayout ( void ); public : PnlLblTxt ( void ); ~PnlLblTxt ( ); bool bCreate ( wxWindow * poWin, wxWindowID oWinID, int iNameWd=-1, int iTextWd=-1, const wxPoint & roPosn=wxDefaultPosition ); bool bIsCreated( void ) { return( GetParent( )!=NULL ? true : false ); } bool bSetName ( const wxString & rosName ); bool bSetText ( const wxString & rosText ); const wxString & rosGetText( void ); private : // Event handlers // void OnText( wxCommandEvent & roEvtCmd ); // In order to be able to react to a menu command, it must be given a // unique identifier such as a const or an enum. enum ePnlItemID { ID_TXTCTRL = 1, ID_UNUSED, ID_FST = ID_TXTCTRL, ID_LST = ID_TXTCTRL }; // Leave this as the last line as private access is envoked by macro // wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // PNLLBLTXT_HPP gspiceui-1.1.00+dfsg/src/utility/StrUtils.hpp0000644000000000000000000000447612452501611017622 0ustar rootroot//************************************************************************************************** // StrUtils.hpp * // -------------- * // Description : This file contains my own string utilities : * // - a string compare algorithm, * // - a function to reduce a string to a single line. * // Started : 2008-05-15 * // Last Update : 2014-12-04 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef ISTRCMP_HPP #define ISTRCMP_HPP // Application Includes #include "TypeDefs.hpp" #include "netlist/Component.hpp" //************************************************************************************************** int iStrCmpNode( const wxString & ros1, const wxString & ros2 ); int iStrCmpCpnt( const wxString & ros1, const wxString & ros2 ); int iStrCmpSrc ( const wxString & ros1, const wxString & ros2 ); const wxString & rosStrToLine ( const wxString & ros ); //************************************************************************************************** #endif // ISTRCMP_HPP gspiceui-1.1.00+dfsg/src/gspiceui.conf0000644000000000000000000000072712124473155016276 0ustar rootroot[Main] NbkMaxLines=1000 TmpFileMgt=0 ToolTips=0 Precision=4 PosnX=73 PosnY=0 SizeW=873 SizeH=650 [Files] NetList=/home/msw/projects/gspiceui/bin/filter-lp-2.ckt Schematics=/home/msw/projects/gspiceui/bin/filter-lp-2.sch [Directories] LastAccess=/home/msw/projects/gspiceui/bin [gNetList] GuileProc=spice-sdb [Viewer] Name=GAW [Simulator] Engine=GNUCAP Analysis=FO [GNU-Cap] FO_Mag=1 FO_Phase=0 FO_MagDB=1 FO_MagRel=0 [Help] PosnX=314 PosnY=107 SizeW=758 SizeH=746 gspiceui-1.1.00+dfsg/src/CmdLinePcr.cpp0000644000000000000000000005710612507637655016322 0ustar rootroot//************************************************************************************************** // CmdLinePcr.cpp * // ---------------- * // Started : 2005-02-22 * // Last Update : 2015-04-04 * // Copyright : (C) 2005 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "CmdLinePcr.hpp" //************************************************************************************************** // Constructor. CmdLinePcr::CmdLinePcr( void ) : wxCmdLineParser( ) { bClear( ); m_iArgC = -1; m_ppsArgV = NULL; } //************************************************************************************************** // Destructor. CmdLinePcr::~CmdLinePcr( ) { } //************************************************************************************************** // Process command line option -a : analysis page specifier. // // Argument List : // piArg - A pointer to the current command line argument (incremented as part of processing) // // Return Values : // true - Success // false - Failure bool CmdLinePcr::bProcOption_a( int * piArg ) { wxString osArg; ( *piArg )++; if( *piArg >= m_iArgC ) { std::cout << "Missing analysis type specifier.\n"; return( false ); } osArg = m_ppsArgV[ *piArg ]; osArg.MakeUpper( ); if( osArg == wxT("OP") ) ; else if( osArg == wxT("DC") ) ; else if( osArg == wxT("AC") ) ; else if( osArg == wxT("TR") ) ; else if( osArg == wxT("FO") ) ; //else if( osArg == wxT("DI") ) ; //else if( osArg == wxT("NO") ) ; //else if( osArg == wxT("PZ") ) ; //else if( osArg == wxT("SE") ) ; //else if( osArg == wxT("TF") ) ; else { std::cout << "Analysis type invalid or not supported : " << wxString( m_ppsArgV[ *piArg ] ).mb_str( ) << '\n'; return( false ); } m_osAnaType = osArg; return( true ); } //************************************************************************************************** // Process command line option -c : Rebuild/clean the configuration file. // // Note : This function must be called twice to actually rebuild/clean the configuration file. // // Argument List : // piArg - A pointer to the current command line argument (incremented as part of processing) // // Return Values : // true - Success // false - Failure bool CmdLinePcr::bProcOption_c( int * piArg __attribute__ ((unused)) ) { // Signify that the configuration file needs to be rebuilt/cleaned if( ! m_bCleanCfgFile ) { m_bCleanCfgFile = true; return( true ); } return( true ); } //************************************************************************************************** // Process command line option -d : Enable debug mode. Print debug info. to the console during // program execution. // // Argument List : // piArg - A pointer to the current command line argument (incremented as part of processing) // // Return Values : // true - Success // false - Failure bool CmdLinePcr::bProcOption_d( int * piArg __attribute__ ((unused)) ) { g_bDebug = true; std::cout << "\nDEBUG : Debug mode enabled\n"; return( true ); } //************************************************************************************************** // Process command line option -g : Guile procedure used when importing schematic file. // // Argument List : // piArg - A pointer to the current command line argument (incremented as part of processing) // // Return Values : // true - Success // false - Failure bool CmdLinePcr::bProcOption_g( int * piArg ) { PrcGNetList oGNetList; wxString osArg; // Check that there are more arguments and that the next is not an option if( *piArg < (m_iArgC-1) ) { osArg = m_ppsArgV[ (*piArg)+1 ]; if( osArg.GetChar( 0 ) != wxT('-') ) { // Test the Guile procedure name if( oGNetList.bSetGuileProc( osArg ) ) m_osGuileProc = osArg; else { // The argument isn't a Guile procedure so is it a file name? If it is assume it's a // schematic file and use the default Guile procedure. wxRegEx oRegEx( wxT("[./]") ); if( ! oRegEx.Matches( osArg ) ) { std::cout << "Invalid Guile procedure name : " << osArg.mb_str( ) << '\n'; return( false ); } } } // Increment argument pointer ( *piArg )++; } else // Use the default value m_osGuileProc = wxT("spice-sdb"); return( true ); } //************************************************************************************************** // Process command line option -h : display usage and exit. // // Argument List : // piArg - A pointer to the current command line argument (incremented as part of processing) // // Return Values : // true - Success // false - Failure bool CmdLinePcr::bProcOption_h( int * piArg __attribute__ ((unused)) ) { Usage( ); return( false ); } //************************************************************************************************** // Process command line option -r : specify a configuration file. // // Argument List : // piArg - A pointer to the current command line argument (incremented as part of processing) // // Return Values : // true - Success // false - Failure bool CmdLinePcr::bProcOption_r( int * piArg ) { wxFileName ofn1; ( *piArg )++; // Check that there are enough arguments if( *piArg >= m_iArgC ) { std::cout << "Missing configuration file name.\n"; return( false ); } // Check the validity of the file name ofn1 = wxString( m_ppsArgV[ *piArg ], *wxConvCurrent ); if( ! ofn1.IsOk( ) ) { std::cout << "Invalid file name : " << m_ppsArgV[ *piArg ] << '\n'; return( false ); } if( ! ofn1.FileExists( ) ) { std::cout << "File doesn't exist : " << m_ppsArgV[ *piArg ] << '\n'; return( false ); } if( ofn1.IsRelative( ) ) ofn1.MakeAbsolute( ); m_osConfigFile = ofn1.GetFullPath( ); return( true ); } //************************************************************************************************** // Process command line option -s : simulator engine specifier. // // Argument List : // piArg - A pointer to the current command line argument (incremented as part of processing) // // Return Values : // true - Success // false - Failure bool CmdLinePcr::bProcOption_s( int * piArg ) { wxString osArg; ( *piArg )++; if( *piArg >= m_iArgC ) { std::cout << "Missing simulator engine specifier.\n"; return( false ); } osArg = m_ppsArgV[ *piArg ]; osArg.MakeUpper( ); if( wxString( wxT("GNUCAP") ).StartsWith( osArg ) ) osArg = CLP_GNUCAP; else if( wxString( wxT("NGSPICE") ).StartsWith( osArg ) ) osArg = CLP_NGSPICE; else { std::cout << "Invalid simulator engine specifier : " << wxString( m_ppsArgV[ *piArg ] ).mb_str( ) << '\n'; return( false ); } m_osSimrType = osArg; return( true ); } //************************************************************************************************** // Process command line option -v : display app. version and exit. // // Argument List : // piArg - A pointer to the current command line argument (incremented as part of processing) // // Return Values : // true - Success // false - Failure bool CmdLinePcr::bProcOption_v( int * piArg __attribute__ ((unused)) ) { wxString os1; os1 << APP_NAME << wxT(", Version ") << APP_VERSION << wxT(" (") << APP_DATE << wxT(")") << wxT('\n'); std::cout << os1.mb_str( ); return( false ); } //************************************************************************************************** // Process command line option -w : waveform viewer specifier. // // Argument List : // piArg - A pointer to the current command line argument (incremented as part of processing) // // Return Values : // true - Success // false - Failure bool CmdLinePcr::bProcOption_w( int * piArg ) { wxString osArg; ( *piArg )++; if( *piArg >= m_iArgC ) { std::cout << "Missing waveform viewer specifier.\n"; return( false ); } osArg = m_ppsArgV[ *piArg ]; osArg.MakeUpper( ); if( wxString(CLP_GWAVE).Upper().StartsWith(osArg) ) osArg = CLP_GWAVE; else if( wxString(CLP_GAW ).Upper().StartsWith(osArg) ) osArg = CLP_GAW; else { std::cout << "Invalid waveform viewer specifier : " << wxString( m_ppsArgV[ *piArg ] ).mb_str( ) << '\n'; return( false ); } m_osViewer = osArg; return( true ); } //************************************************************************************************** // Do general checks of arguments which should be file names. If any of the args. is not a valid // file name display an error message and return false. // // Argument List : // piArg - A pointer to the current command line argument (incremented as part of processing) // // Return Values : // true - Success // false - Failure bool CmdLinePcr::bCheckFiles( int * piArg ) { wxFileName ofn1; wxString os1; int i1; // Check the validity of the file name/s for( i1=*piArg; i1= m_iArgC ) return( false ); // If no Guile procedure has been specified test the file name extensions if( m_osGuileProc.IsEmpty( ) ) { for( i1=*piArg; i1= m_iArgC ) return( false ); // Load the netlist file name into m_osNetLstFile ofn1 = wxString( m_ppsArgV[ *piArg ], *wxConvCurrent ); if( ofn1.IsRelative( ) ) ofn1.MakeAbsolute( ); m_osNetLstFile = ofn1.GetFullPath( ); ( *piArg )++; return( true ); } //************************************************************************************************** // Print usage message on console. void CmdLinePcr::Usage( void ) { wxString os1, os2; os2 = wxString( m_ppsArgV[ 0 ] ).AfterLast( wxT('/') ); os1 << wxT("\n") << wxT("Analyse a electronic circuit using a GUI to a numerical simulation engine\n") << wxT("\n") << wxT("USAGE : ") << os2 << wxT(" [-OPTION [ARG]] [FILE/S]\n") << wxT("\n") << wxT("OPTIONS : -h : Print usage (this message)\n") << wxT(" -v : Print version information\n") << wxT(" -d : Enable debug mode (generates console spew on standard error)\n") << wxT(" -r RCFILE : Specify a configuration file\n") << wxT(" RCFILE = ~/.gspiceui.conf (default)\n") << wxT(" -c : Rebuild/clean the configuration file\n") << wxT(" -s SIMENG : Specify the simulation engine to be used\n") << wxT(" SIMENG = gnucap (default) or ngspice\n") << wxT(" -a ANA : Specify the analysis page to be displayed\n") << wxT(" ANA = op, dc (default), ac, tr, fo, di, no, pz, se or tf\n") << wxT(" -g [PROC] : Guile procedure for importing a schematic file with gNetList\n") << wxT(" PROC = spice-sdb (default), pcb, protelii, verilog, etc.\n") << wxT(" -w VIEWER : Specify the waveform viewer to be used\n") << wxT(" VIEWER = gaw (default), gwave or gwave2\n") << wxT("\n") << wxT("ARGS : FILE/S : Import schematic file/s or load a circuit description file\n") << wxT("\n") << wxT("NOTES : Option -s should come before -a if both are specified\n") << wxT("\n"); std::cout << os1.mb_str( ); } //************************************************************************************************** // Print version information on console. void CmdLinePcr::Version( void ) { wxString os1; os1 << wxT("\n ") << APP_NAME << wxT("\n Version ") << APP_VERSION << wxT(" (") << APP_DATE << wxT(")\n\n"); std::cout << os1.mb_str( ); } //************************************************************************************************** // Set the configuration file name and update its contents based on the command line arguments. void CmdLinePcr::SetConfig( void ) { wxConfig * poCfg; wxString os1; int i1; // Create the global configuration object if( ! m_osConfigFile.IsEmpty( ) ) os1 = rosGetConfigFile( ); else os1 << wxT('.') << wxString( m_ppsArgV[ 0 ] ).AfterLast( wxT('/') ) << wxT(".conf"); poCfg = new wxConfig( wxEmptyString, wxEmptyString, os1 ); wxConfig::Set( poCfg ); poCfg->SetRecordDefaults( true ); // Set the simulation engine type if( ! m_osSimrType.IsEmpty( ) ) { poCfg->SetPath( wxT("/Simulator") ); poCfg->Write( wxT("Engine"), m_osSimrType ); } // Set the analysis type if( ! m_osAnaType.IsEmpty( ) ) { poCfg->SetPath( wxT("/Simulator") ); poCfg->Write( wxT("Analysis"), m_osAnaType ); } // Set the Guile procedure to be used by GNetList if( ! m_osGuileProc.IsEmpty( ) ) { poCfg->SetPath( wxT("/gNetList") ); poCfg->Write( wxT("GuileProc"), m_osGuileProc ); } // Set the waveform viewer type if( ! m_osViewer.IsEmpty( ) ) { poCfg->SetPath( wxT("/Viewer") ); poCfg->Write( wxT("Name"), m_osViewer ); } // Set the netlist file name if( ! m_osNetLstFile.IsEmpty( ) ) { poCfg->SetPath( wxT("/Files") ); poCfg->Write( wxT("NetList"), m_osNetLstFile ); poCfg->Write( wxT("Schematics"), wxT("") ); } // Set the schematic file name/s if( ! m_osaSchemFiles.IsEmpty( ) ) { poCfg->SetPath( wxT("/Files") ); for( i1=0, os1.Empty( ); i1<(int)m_osaSchemFiles.GetCount( ); i1++ ) os1 << m_osaSchemFiles.Item( i1 ) << wxT(' '); poCfg->Write( wxT("Schematics"), os1 ); poCfg->Write( wxT("NetList"), wxT("") ); } // Write any changes to file poCfg->Flush( ); } //************************************************************************************************** // Rebuild/clean the configuration file. void CmdLinePcr::CleanCfgFile( void ) { wxConfig * poCfg; wxString os1; long li1; uint ui1; bool b1; // Get a pointer to the configuration object poCfg = (wxConfig *) wxConfig::Get( ); // Record the number of groups ui1 = poCfg->GetNumberOfGroups( ); // Look for any superceded groups for( b1=poCfg->GetFirstGroup(os1,li1); b1; b1=poCfg->GetNextGroup(os1,li1) ) { if( os1 == wxT("Help") ) continue; else if( os1 == wxT("Main") ) continue; else if( os1 == wxT("Simulator") ) continue; else if( os1 == wxT("gNetList") ) continue; else if( os1 == wxT("Files") ) continue; else if( os1 == wxT("Directories") ) continue; else if( os1 == wxT("Viewer") ) continue; else if( os1 == wxT("GNU-Cap") ) continue; poCfg->DeleteGroup( os1 ); } // Write any changes to file poCfg->Flush( ); // Display message to the user ui1 -= poCfg->GetNumberOfGroups( ); os1.Empty( ); os1 << wxT("Rebuild/clean configuration file : "); if( ui1 > 0 ) os1 << ui1 << wxT(" unused group/s found & deleted\n"); else os1 << wxT("nothing to be done\n"); std::cout << os1.mb_str( ); } //************************************************************************************************** // Clear the object attributes. // // Return Values : // true - Success // false - Failure bool CmdLinePcr::bClear( void ) { m_osSimrType .Empty( ); m_osAnaType .Empty( ); m_osGuileProc .Empty( ); m_osViewer .Empty( ); m_osConfigFile .Empty( ); m_osNetLstFile .Empty( ); m_osaSchemFiles.Empty( ); m_bCleanCfgFile = false; return( true ); } //************************************************************************************************** // Set the command line to be processed. // // Argument List : // iArgV - The argment count // ppsArgV - The string array of argument fields // // Return Values: // true - Success // false - Failure bool CmdLinePcr::bSetCmdLine( int iArgC, wxChar ** ppsArgV ) { // Check validity of arguments if( iArgC <= 0 ) return( false ); if( ppsArgV == NULL ) return( false ); m_iArgC = iArgC; m_ppsArgV = ppsArgV; return( true ); } //************************************************************************************************** // Process any command line arguments past to the application at start-up. // // Return Values : // true - Success (continue application execution) // false - Failure (terminate application execution) bool CmdLinePcr::bProcArgs( void ) { wxString osArg, os1; int iArg; // Check validity of arguments if( m_iArgC <= 0 ) return( false ); if( m_ppsArgV == NULL ) return( false ); // Process options for( iArg=1; iArg2 ) { // Found concatenated options --> error std::cout << "Options must be specified separately : " << osArg.mb_str( ) << '\n'; return( false ); } else if( osArg == wxT("-v") ) { // Print version information if( ! bProcOption_v( &iArg ) ) return( false ); } else if( osArg == wxT("-h") ) { // Print usage information if( ! bProcOption_h( &iArg ) ) return( false ); } else if( osArg == wxT("-d") ) { // Enable debug mode if( ! bProcOption_d( &iArg ) ) return( false ); } else if( osArg == wxT("-r") ) { // Specify a configuration file if( ! bProcOption_r( &iArg ) ) return( false ); } else if( osArg == wxT("-c") ) { // Rebuild/clean the configuration file if( ! bProcOption_c( &iArg ) ) return( false ); } else if( osArg == wxT("-s") ) { // Process simulation engine specifier if( ! bProcOption_s( &iArg ) ) return( false ); } else if( osArg == wxT("-a") ) { // Process analysis type specfier if( ! bProcOption_a( &iArg ) ) return( false ); } else if( osArg == wxT("-g") ) { // Specify Guile procedure for importing a schematic file if( ! bProcOption_g( &iArg ) ) return( false ); } else if( osArg == wxT("-w") ) { // Process waveform viewer specifier if( ! bProcOption_w( &iArg ) ) return( false ); } else if( osArg.GetChar( 0 ) == wxT('-') ) { // Found invalid option --> error std::cout << "Invalid option : " << osArg.mb_str( ) << '\n'; return( false ); } // The argument is not an option else break; } // Attempt to process any remaining argument/s as file name/s if( ! bCheckFiles( &iArg ) ) return( false ); bProcSchems ( &iArg ); bProcNetList( &iArg ); // At this stage all arguments should have been processed if( iArg < m_iArgC ) { os1 << wxT("Too many arguments :"); for( osArg=m_ppsArgV[ iArg ]; iArg 0 ) std::cout << ", "; std::cout << m_osaSchemFiles.Item( i1 ).mb_str( ); } std::cout << '\n'; std::cout << osPrefix.mb_str( ) << "m_bCleanCfgFile : " << (m_bCleanCfgFile ? "true" : "false") << '\n'; } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/App_gSpiceUI.cpp0000644000000000000000000001247312452476213016576 0ustar rootroot//************************************************************************************************** // App_gSpiceUI.hpp * // ------------------ * // Started : 2003-08-15 * // Last Update : 2014-12-13 * // Copyright : (C) 2003 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "App_gSpiceUI.hpp" //************************************************************************************************** // All programs must have a "main" function. Under wxWidgets main( ) is // implemented using the following macro which creates an application instance // and starts program execution. wxIMPLEMENT_APP( App_gSpiceUI ); //************************************************************************************************** // Implement an event table in which the events are routed to their respective // handler functions in the class. If -1 is given as the ID, the given handler // will be invoked for any event of the specified type. //wxBEGIN_EVENT_TABLE( App_gSpiceUI, wxApp ) //wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. App_gSpiceUI::App_gSpiceUI( void ) { g_bDebug = false; m_poFrmMain = NULL; } //************************************************************************************************** // Destructor. App_gSpiceUI::~App_gSpiceUI( ) { } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // wxWidgets calls wxApp::OnInit( ) at startup. // // This method is used to initialize the application. // // Return Values : // true - Success (continue application execution) // false - Failure (terminate application execution) bool App_gSpiceUI::OnInit( void ) { // The following lines magically makes locale stuff work, don't touch! m_oLocale.Init( wxLANGUAGE_DEFAULT, wxLOCALE_LOAD_DEFAULT ); // setlocale( LC_ALL, "C" ); setlocale( LC_NUMERIC, "C" ); // Set the command line and process it if( ! m_oCmdLnPcr.bSetCmdLine( argc, argv ) ) return( false ); if( ! m_oCmdLnPcr.bProcArgs( ) ) return( false ); // Create the GUI m_poFrmMain = new FrmMain( this ); m_poFrmMain->Show( true ); SetTopWindow( m_poFrmMain ); // Display error message held over during startup m_poFrmMain->DlgErrMsg( ); return( true ); } //************************************************************************************************** // wxWidgets calls wxApp::OnRun( ) to start execution of the application. // // This function is where the execution of a program written in wxWidgets // starts. The default implementation just enters the main loop and starts // handling the events until it terminates. The return value of this function // becomes the exit code of the application. // // Return Values : // EXIT_SUCCESS - application exit code on success // EXIT_FAILURE - application exit code on failure /* int App_gSpiceUI::OnRun( void ) { MainLoop( ); return( EXIT_SUCCESS ); } // */ //************************************************************************************************** // wxWidgets calls wxApp::Mainloop( ) on creation of the application. // // Return Values : // 0 - the return value is not used /* int App_gSpiceUI::MainLoop( void ) { while( m_poFrmMain->bIsOpen( ) ) { Yield( ); // Allow messages in the event queue to be processed wxMilliSleep( 100 ); // Sleep for 100msec } return( 0 ); } // */ //************************************************************************************************** // wxWidgets calls wxApp::OnExit( ) on application termination. // // This method does any processing which needs to be done as the application is // about to exit. Note that it is not called at all if OnInit( ) failed. // // Return Values : // 0 - the return value is not used int App_gSpiceUI::OnExit( void ) { // Delete the global configuration object delete wxConfig::Set( (wxConfig *) NULL ); return( 0 ); } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/Makefile.deps0000644000000000000000000007300712463156615016217 0ustar rootrootobj/App_gSpiceUI.o: App_gSpiceUI.cpp App_gSpiceUI.hpp CmdLinePcr.hpp \ Version.hpp TypeDefs.hpp process/PrcGNetList.hpp TypeDefs.hpp \ base/PrcBase.hpp utility/TextCtrl.hpp utility/StrUtils.hpp \ netlist/Component.hpp utility/CnvtType.hpp main/FrmMain.hpp \ main/FileTasks.hpp base/SimnBase.hpp base/CmdBase.hpp \ netlist/NetList.hpp Version.hpp process/PrcGSchem.hpp \ process/PrcGNetList.hpp main/HelpTasks.hpp CmdLinePcr.hpp \ main/NbkTxtCtls.hpp main/DlgPrefs.hpp utility/PnlValue.hpp \ utility/PnlTxtSpn.hpp utility/ChoUnits.hpp base/UnitsBase.hpp \ utility/LblUnits.hpp utility/PnlLblCho.hpp utility/PnlLblTxt.hpp \ netlist/SimnGnuCap.hpp gnucap/commands/CmdGnuCapOPT.hpp base/CmdBase.hpp \ ngspice/commands/CmdNgSpiceOPT.hpp gnucap/commands/CmdGnuCapOP.hpp \ ngspice/commands/CmdNgSpiceDC.hpp gnucap/commands/CmdGnuCapDC.hpp \ gnucap/commands/CmdGnuCapAC.hpp ngspice/commands/CmdNgSpiceAC.hpp \ gnucap/commands/CmdGnuCapTR.hpp ngspice/commands/CmdNgSpiceTR.hpp \ gnucap/commands/CmdGnuCapFO.hpp gnucap/commands/CmdGnuCapPR.hpp \ ngspice/commands/CmdNgSpicePR.hpp gnucap/commands/CmdGnuCapGEN.hpp \ netlist/CpntNgsIndSrc.hpp netlist/SimnNgSpice.hpp process/PrcGnuCap.hpp \ base/PrcSimEngBase.hpp process/PrcNgSpice.hpp process/PrcGaw.hpp \ process/PrcGWave.hpp gnucap/NbkGnuCap.hpp base/NbkSimEngBase.hpp \ base/PnlAnaBase.hpp gnucap/dialogs/DlgGcpCfgOPT.hpp \ gnucap/panels/PnlGnuCapOP.hpp gnucap/panels/PnlGnuCapDC.hpp \ gnucap/panels/PnlGnuCapAC.hpp gnucap/panels/PnlGnuCapTR.hpp \ gnucap/dialogs/DlgGcpCfgGEN.hpp gnucap/panels/PnlGnuCapFO.hpp \ ngspice/NbkNgSpice.hpp ngspice/dialogs/DlgNgsCfgOPT.hpp \ ngspice/panels/PnlNgSpiceOP.hpp ngspice/panels/PnlNgSpiceDC.hpp \ ngspice/panels/PnlNgSpiceAC.hpp ngspice/panels/PnlNgSpiceTR.hpp \ ngspice/dialogs/DlgNgsCfgSrc.hpp obj/CmdLinePcr.o: CmdLinePcr.cpp CmdLinePcr.hpp Version.hpp TypeDefs.hpp \ process/PrcGNetList.hpp TypeDefs.hpp base/PrcBase.hpp \ utility/TextCtrl.hpp utility/StrUtils.hpp netlist/Component.hpp \ utility/CnvtType.hpp obj/TypeDefs.o: TypeDefs.cpp TypeDefs.hpp obj/CmdBase.o: base/CmdBase.cpp base/CmdBase.hpp TypeDefs.hpp obj/NbkSimEngBase.o: base/NbkSimEngBase.cpp base/NbkSimEngBase.hpp \ TypeDefs.hpp netlist/NetList.hpp Version.hpp utility/StrUtils.hpp \ netlist/Component.hpp utility/CnvtType.hpp base/SimnBase.hpp \ base/CmdBase.hpp base/PnlAnaBase.hpp utility/PnlValue.hpp \ utility/PnlTxtSpn.hpp utility/ChoUnits.hpp base/UnitsBase.hpp \ utility/LblUnits.hpp obj/PnlAnaBase.o: base/PnlAnaBase.cpp base/PnlAnaBase.hpp TypeDefs.hpp \ netlist/Component.hpp utility/CnvtType.hpp utility/StrUtils.hpp \ utility/PnlValue.hpp utility/PnlTxtSpn.hpp utility/ChoUnits.hpp \ base/UnitsBase.hpp utility/LblUnits.hpp obj/PrcBase.o: base/PrcBase.cpp base/PrcBase.hpp TypeDefs.hpp \ utility/TextCtrl.hpp utility/StrUtils.hpp netlist/Component.hpp \ utility/CnvtType.hpp obj/PrcSimEngBase.o: base/PrcSimEngBase.cpp base/PrcSimEngBase.hpp \ TypeDefs.hpp base/PrcBase.hpp utility/TextCtrl.hpp utility/StrUtils.hpp \ netlist/Component.hpp utility/CnvtType.hpp base/SimnBase.hpp \ base/CmdBase.hpp netlist/NetList.hpp Version.hpp obj/SimnBase.o: base/SimnBase.cpp base/SimnBase.hpp TypeDefs.hpp \ base/CmdBase.hpp netlist/NetList.hpp Version.hpp utility/StrUtils.hpp \ netlist/Component.hpp utility/CnvtType.hpp obj/UnitsBase.o: base/UnitsBase.cpp base/UnitsBase.hpp TypeDefs.hpp \ utility/CnvtType.hpp obj/NbkGnuCap.o: gnucap/NbkGnuCap.cpp gnucap/NbkGnuCap.hpp TypeDefs.hpp \ base/NbkSimEngBase.hpp netlist/NetList.hpp Version.hpp \ utility/StrUtils.hpp netlist/Component.hpp utility/CnvtType.hpp \ base/SimnBase.hpp base/CmdBase.hpp base/PnlAnaBase.hpp \ utility/PnlValue.hpp utility/PnlTxtSpn.hpp utility/ChoUnits.hpp \ base/UnitsBase.hpp utility/LblUnits.hpp gnucap/dialogs/DlgGcpCfgOPT.hpp \ utility/PnlLblCho.hpp gnucap/commands/CmdGnuCapOPT.hpp base/CmdBase.hpp \ ngspice/commands/CmdNgSpiceOPT.hpp gnucap/panels/PnlGnuCapOP.hpp \ netlist/SimnGnuCap.hpp gnucap/commands/CmdGnuCapOP.hpp \ ngspice/commands/CmdNgSpiceDC.hpp gnucap/commands/CmdGnuCapDC.hpp \ gnucap/commands/CmdGnuCapAC.hpp ngspice/commands/CmdNgSpiceAC.hpp \ gnucap/commands/CmdGnuCapTR.hpp ngspice/commands/CmdNgSpiceTR.hpp \ gnucap/commands/CmdGnuCapFO.hpp gnucap/commands/CmdGnuCapPR.hpp \ ngspice/commands/CmdNgSpicePR.hpp gnucap/commands/CmdGnuCapGEN.hpp \ netlist/CpntNgsIndSrc.hpp netlist/SimnNgSpice.hpp \ gnucap/panels/PnlGnuCapDC.hpp gnucap/panels/PnlGnuCapAC.hpp \ gnucap/panels/PnlGnuCapTR.hpp gnucap/dialogs/DlgGcpCfgGEN.hpp \ gnucap/panels/PnlGnuCapFO.hpp obj/DlgPrefs.o: main/DlgPrefs.cpp main/DlgPrefs.hpp TypeDefs.hpp \ CmdLinePcr.hpp Version.hpp TypeDefs.hpp process/PrcGNetList.hpp \ base/PrcBase.hpp utility/TextCtrl.hpp utility/StrUtils.hpp \ netlist/Component.hpp utility/CnvtType.hpp utility/PnlValue.hpp \ utility/PnlTxtSpn.hpp utility/ChoUnits.hpp base/UnitsBase.hpp \ utility/LblUnits.hpp utility/PnlLblCho.hpp utility/PnlLblTxt.hpp obj/FileTasks.o: main/FileTasks.cpp main/FileTasks.hpp TypeDefs.hpp \ base/SimnBase.hpp base/CmdBase.hpp netlist/NetList.hpp Version.hpp \ utility/StrUtils.hpp netlist/Component.hpp utility/CnvtType.hpp \ process/PrcGSchem.hpp base/PrcBase.hpp utility/TextCtrl.hpp \ process/PrcGNetList.hpp main/FrmMain.hpp main/FileTasks.hpp \ main/HelpTasks.hpp CmdLinePcr.hpp Version.hpp TypeDefs.hpp \ process/PrcGNetList.hpp main/NbkTxtCtls.hpp main/DlgPrefs.hpp \ utility/PnlValue.hpp utility/PnlTxtSpn.hpp utility/ChoUnits.hpp \ base/UnitsBase.hpp utility/LblUnits.hpp utility/PnlLblCho.hpp \ utility/PnlLblTxt.hpp netlist/SimnGnuCap.hpp \ gnucap/commands/CmdGnuCapOPT.hpp base/CmdBase.hpp \ ngspice/commands/CmdNgSpiceOPT.hpp gnucap/commands/CmdGnuCapOP.hpp \ ngspice/commands/CmdNgSpiceDC.hpp gnucap/commands/CmdGnuCapDC.hpp \ gnucap/commands/CmdGnuCapAC.hpp ngspice/commands/CmdNgSpiceAC.hpp \ gnucap/commands/CmdGnuCapTR.hpp ngspice/commands/CmdNgSpiceTR.hpp \ gnucap/commands/CmdGnuCapFO.hpp gnucap/commands/CmdGnuCapPR.hpp \ ngspice/commands/CmdNgSpicePR.hpp gnucap/commands/CmdGnuCapGEN.hpp \ netlist/CpntNgsIndSrc.hpp netlist/SimnNgSpice.hpp process/PrcGnuCap.hpp \ base/PrcSimEngBase.hpp process/PrcNgSpice.hpp process/PrcGaw.hpp \ process/PrcGWave.hpp gnucap/NbkGnuCap.hpp base/NbkSimEngBase.hpp \ base/PnlAnaBase.hpp gnucap/dialogs/DlgGcpCfgOPT.hpp \ gnucap/panels/PnlGnuCapOP.hpp gnucap/panels/PnlGnuCapDC.hpp \ gnucap/panels/PnlGnuCapAC.hpp gnucap/panels/PnlGnuCapTR.hpp \ gnucap/dialogs/DlgGcpCfgGEN.hpp gnucap/panels/PnlGnuCapFO.hpp \ ngspice/NbkNgSpice.hpp ngspice/dialogs/DlgNgsCfgOPT.hpp \ ngspice/panels/PnlNgSpiceOP.hpp ngspice/panels/PnlNgSpiceDC.hpp \ ngspice/panels/PnlNgSpiceAC.hpp ngspice/panels/PnlNgSpiceTR.hpp \ ngspice/dialogs/DlgNgsCfgSrc.hpp obj/FrmMain.o: main/FrmMain.cpp main/FrmMain.hpp TypeDefs.hpp \ main/FileTasks.hpp base/SimnBase.hpp base/CmdBase.hpp \ netlist/NetList.hpp Version.hpp utility/StrUtils.hpp \ netlist/Component.hpp utility/CnvtType.hpp process/PrcGSchem.hpp \ base/PrcBase.hpp utility/TextCtrl.hpp process/PrcGNetList.hpp \ main/HelpTasks.hpp CmdLinePcr.hpp Version.hpp TypeDefs.hpp \ process/PrcGNetList.hpp main/NbkTxtCtls.hpp main/DlgPrefs.hpp \ utility/PnlValue.hpp utility/PnlTxtSpn.hpp utility/ChoUnits.hpp \ base/UnitsBase.hpp utility/LblUnits.hpp utility/PnlLblCho.hpp \ utility/PnlLblTxt.hpp netlist/SimnGnuCap.hpp \ gnucap/commands/CmdGnuCapOPT.hpp base/CmdBase.hpp \ ngspice/commands/CmdNgSpiceOPT.hpp gnucap/commands/CmdGnuCapOP.hpp \ ngspice/commands/CmdNgSpiceDC.hpp gnucap/commands/CmdGnuCapDC.hpp \ gnucap/commands/CmdGnuCapAC.hpp ngspice/commands/CmdNgSpiceAC.hpp \ gnucap/commands/CmdGnuCapTR.hpp ngspice/commands/CmdNgSpiceTR.hpp \ gnucap/commands/CmdGnuCapFO.hpp gnucap/commands/CmdGnuCapPR.hpp \ ngspice/commands/CmdNgSpicePR.hpp gnucap/commands/CmdGnuCapGEN.hpp \ netlist/CpntNgsIndSrc.hpp netlist/SimnNgSpice.hpp process/PrcGnuCap.hpp \ base/PrcSimEngBase.hpp process/PrcNgSpice.hpp process/PrcGaw.hpp \ process/PrcGWave.hpp gnucap/NbkGnuCap.hpp base/NbkSimEngBase.hpp \ base/PnlAnaBase.hpp gnucap/dialogs/DlgGcpCfgOPT.hpp \ gnucap/panels/PnlGnuCapOP.hpp gnucap/panels/PnlGnuCapDC.hpp \ gnucap/panels/PnlGnuCapAC.hpp gnucap/panels/PnlGnuCapTR.hpp \ gnucap/dialogs/DlgGcpCfgGEN.hpp gnucap/panels/PnlGnuCapFO.hpp \ ngspice/NbkNgSpice.hpp ngspice/dialogs/DlgNgsCfgOPT.hpp \ ngspice/panels/PnlNgSpiceOP.hpp ngspice/panels/PnlNgSpiceDC.hpp \ ngspice/panels/PnlNgSpiceAC.hpp ngspice/panels/PnlNgSpiceTR.hpp \ ngspice/dialogs/DlgNgsCfgSrc.hpp icons/gspiceui-32x32.xpm \ icons/file-open.xpm icons/file-import.xpm icons/file-reload.xpm \ icons/file-close.xpm icons/sim-create.xpm icons/sim-run.xpm \ icons/sim-stop.xpm icons/sim-edit.xpm icons/sim-plot.xpm icons/help.xpm obj/HelpTasks.o: main/HelpTasks.cpp main/HelpTasks.hpp TypeDefs.hpp \ CmdLinePcr.hpp Version.hpp TypeDefs.hpp process/PrcGNetList.hpp \ base/PrcBase.hpp utility/TextCtrl.hpp utility/StrUtils.hpp \ netlist/Component.hpp utility/CnvtType.hpp main/FrmMain.hpp \ main/FileTasks.hpp base/SimnBase.hpp base/CmdBase.hpp \ netlist/NetList.hpp Version.hpp process/PrcGSchem.hpp \ process/PrcGNetList.hpp main/HelpTasks.hpp main/NbkTxtCtls.hpp \ main/DlgPrefs.hpp utility/PnlValue.hpp utility/PnlTxtSpn.hpp \ utility/ChoUnits.hpp base/UnitsBase.hpp utility/LblUnits.hpp \ utility/PnlLblCho.hpp utility/PnlLblTxt.hpp netlist/SimnGnuCap.hpp \ gnucap/commands/CmdGnuCapOPT.hpp base/CmdBase.hpp \ ngspice/commands/CmdNgSpiceOPT.hpp gnucap/commands/CmdGnuCapOP.hpp \ ngspice/commands/CmdNgSpiceDC.hpp gnucap/commands/CmdGnuCapDC.hpp \ gnucap/commands/CmdGnuCapAC.hpp ngspice/commands/CmdNgSpiceAC.hpp \ gnucap/commands/CmdGnuCapTR.hpp ngspice/commands/CmdNgSpiceTR.hpp \ gnucap/commands/CmdGnuCapFO.hpp gnucap/commands/CmdGnuCapPR.hpp \ ngspice/commands/CmdNgSpicePR.hpp gnucap/commands/CmdGnuCapGEN.hpp \ netlist/CpntNgsIndSrc.hpp netlist/SimnNgSpice.hpp process/PrcGnuCap.hpp \ base/PrcSimEngBase.hpp process/PrcNgSpice.hpp process/PrcGaw.hpp \ process/PrcGWave.hpp gnucap/NbkGnuCap.hpp base/NbkSimEngBase.hpp \ base/PnlAnaBase.hpp gnucap/dialogs/DlgGcpCfgOPT.hpp \ gnucap/panels/PnlGnuCapOP.hpp gnucap/panels/PnlGnuCapDC.hpp \ gnucap/panels/PnlGnuCapAC.hpp gnucap/panels/PnlGnuCapTR.hpp \ gnucap/dialogs/DlgGcpCfgGEN.hpp gnucap/panels/PnlGnuCapFO.hpp \ ngspice/NbkNgSpice.hpp ngspice/dialogs/DlgNgsCfgOPT.hpp \ ngspice/panels/PnlNgSpiceOP.hpp ngspice/panels/PnlNgSpiceDC.hpp \ ngspice/panels/PnlNgSpiceAC.hpp ngspice/panels/PnlNgSpiceTR.hpp \ ngspice/dialogs/DlgNgsCfgSrc.hpp icons/gspiceui-32x32.xpm \ icons/html-forward.xpm icons/html-back.xpm icons/html-close.xpm obj/NbkTxtCtls.o: main/NbkTxtCtls.cpp main/NbkTxtCtls.hpp TypeDefs.hpp \ utility/TextCtrl.hpp obj/Component.o: netlist/Component.cpp netlist/Component.hpp TypeDefs.hpp \ utility/CnvtType.hpp utility/StrUtils.hpp netlist/Component.hpp obj/CpntNgsIndSrc.o: netlist/CpntNgsIndSrc.cpp netlist/CpntNgsIndSrc.hpp \ TypeDefs.hpp netlist/Component.hpp utility/CnvtType.hpp \ utility/StrUtils.hpp gnucap/commands/CmdGnuCapGEN.hpp base/CmdBase.hpp \ netlist/CpntNgsIndSrc.hpp obj/NetList.o: netlist/NetList.cpp netlist/NetList.hpp Version.hpp \ TypeDefs.hpp utility/StrUtils.hpp netlist/Component.hpp \ utility/CnvtType.hpp obj/SimnGnuCap.o: netlist/SimnGnuCap.cpp netlist/SimnGnuCap.hpp TypeDefs.hpp \ base/SimnBase.hpp base/CmdBase.hpp netlist/NetList.hpp Version.hpp \ utility/StrUtils.hpp netlist/Component.hpp utility/CnvtType.hpp \ gnucap/commands/CmdGnuCapOPT.hpp base/CmdBase.hpp \ ngspice/commands/CmdNgSpiceOPT.hpp gnucap/commands/CmdGnuCapOP.hpp \ ngspice/commands/CmdNgSpiceDC.hpp gnucap/commands/CmdGnuCapDC.hpp \ gnucap/commands/CmdGnuCapAC.hpp ngspice/commands/CmdNgSpiceAC.hpp \ gnucap/commands/CmdGnuCapTR.hpp ngspice/commands/CmdNgSpiceTR.hpp \ gnucap/commands/CmdGnuCapFO.hpp gnucap/commands/CmdGnuCapPR.hpp \ ngspice/commands/CmdNgSpicePR.hpp gnucap/commands/CmdGnuCapGEN.hpp \ netlist/CpntNgsIndSrc.hpp netlist/SimnNgSpice.hpp netlist/SimnGnuCap.hpp obj/SimnNgSpice.o: netlist/SimnNgSpice.cpp netlist/SimnNgSpice.hpp \ TypeDefs.hpp base/SimnBase.hpp base/CmdBase.hpp netlist/NetList.hpp \ Version.hpp utility/StrUtils.hpp netlist/Component.hpp \ utility/CnvtType.hpp ngspice/commands/CmdNgSpiceOPT.hpp base/CmdBase.hpp \ gnucap/commands/CmdGnuCapOPT.hpp ngspice/commands/CmdNgSpiceDC.hpp \ gnucap/commands/CmdGnuCapOP.hpp gnucap/commands/CmdGnuCapDC.hpp \ ngspice/commands/CmdNgSpiceAC.hpp gnucap/commands/CmdGnuCapAC.hpp \ ngspice/commands/CmdNgSpiceTR.hpp gnucap/commands/CmdGnuCapTR.hpp \ ngspice/commands/CmdNgSpicePR.hpp gnucap/commands/CmdGnuCapPR.hpp \ netlist/SimnGnuCap.hpp gnucap/commands/CmdGnuCapFO.hpp \ gnucap/commands/CmdGnuCapGEN.hpp netlist/CpntNgsIndSrc.hpp \ netlist/SimnNgSpice.hpp obj/NbkNgSpice.o: ngspice/NbkNgSpice.cpp ngspice/NbkNgSpice.hpp TypeDefs.hpp \ base/NbkSimEngBase.hpp netlist/NetList.hpp Version.hpp \ utility/StrUtils.hpp netlist/Component.hpp utility/CnvtType.hpp \ base/SimnBase.hpp base/CmdBase.hpp base/PnlAnaBase.hpp \ utility/PnlValue.hpp utility/PnlTxtSpn.hpp utility/ChoUnits.hpp \ base/UnitsBase.hpp utility/LblUnits.hpp ngspice/dialogs/DlgNgsCfgOPT.hpp \ utility/PnlLblCho.hpp ngspice/commands/CmdNgSpiceOPT.hpp \ base/CmdBase.hpp gnucap/commands/CmdGnuCapOPT.hpp \ ngspice/panels/PnlNgSpiceOP.hpp netlist/SimnNgSpice.hpp \ ngspice/commands/CmdNgSpiceDC.hpp gnucap/commands/CmdGnuCapOP.hpp \ gnucap/commands/CmdGnuCapDC.hpp ngspice/commands/CmdNgSpiceAC.hpp \ gnucap/commands/CmdGnuCapAC.hpp ngspice/commands/CmdNgSpiceTR.hpp \ gnucap/commands/CmdGnuCapTR.hpp ngspice/commands/CmdNgSpicePR.hpp \ gnucap/commands/CmdGnuCapPR.hpp netlist/SimnGnuCap.hpp \ gnucap/commands/CmdGnuCapFO.hpp gnucap/commands/CmdGnuCapGEN.hpp \ netlist/CpntNgsIndSrc.hpp ngspice/panels/PnlNgSpiceDC.hpp \ ngspice/panels/PnlNgSpiceAC.hpp ngspice/panels/PnlNgSpiceTR.hpp \ ngspice/dialogs/DlgNgsCfgSrc.hpp obj/PrcGaw.o: process/PrcGaw.cpp process/PrcGaw.hpp TypeDefs.hpp \ base/PrcBase.hpp utility/TextCtrl.hpp utility/StrUtils.hpp \ netlist/Component.hpp utility/CnvtType.hpp obj/PrcGNetList.o: process/PrcGNetList.cpp process/PrcGNetList.hpp \ TypeDefs.hpp base/PrcBase.hpp utility/TextCtrl.hpp utility/StrUtils.hpp \ netlist/Component.hpp utility/CnvtType.hpp obj/PrcGnuCap.o: process/PrcGnuCap.cpp process/PrcGnuCap.hpp TypeDefs.hpp \ base/PrcSimEngBase.hpp base/PrcBase.hpp utility/TextCtrl.hpp \ utility/StrUtils.hpp netlist/Component.hpp utility/CnvtType.hpp \ base/SimnBase.hpp base/CmdBase.hpp netlist/NetList.hpp Version.hpp \ netlist/SimnGnuCap.hpp gnucap/commands/CmdGnuCapOPT.hpp base/CmdBase.hpp \ ngspice/commands/CmdNgSpiceOPT.hpp gnucap/commands/CmdGnuCapOP.hpp \ ngspice/commands/CmdNgSpiceDC.hpp gnucap/commands/CmdGnuCapDC.hpp \ gnucap/commands/CmdGnuCapAC.hpp ngspice/commands/CmdNgSpiceAC.hpp \ gnucap/commands/CmdGnuCapTR.hpp ngspice/commands/CmdNgSpiceTR.hpp \ gnucap/commands/CmdGnuCapFO.hpp gnucap/commands/CmdGnuCapPR.hpp \ ngspice/commands/CmdNgSpicePR.hpp gnucap/commands/CmdGnuCapGEN.hpp \ netlist/CpntNgsIndSrc.hpp netlist/SimnNgSpice.hpp obj/PrcGSchem.o: process/PrcGSchem.cpp process/PrcGSchem.hpp TypeDefs.hpp \ base/PrcBase.hpp utility/TextCtrl.hpp utility/StrUtils.hpp \ netlist/Component.hpp utility/CnvtType.hpp obj/PrcGWave.o: process/PrcGWave.cpp process/PrcGWave.hpp TypeDefs.hpp \ base/PrcBase.hpp utility/TextCtrl.hpp utility/StrUtils.hpp \ netlist/Component.hpp utility/CnvtType.hpp obj/PrcNgSpice.o: process/PrcNgSpice.cpp process/PrcNgSpice.hpp TypeDefs.hpp \ base/PrcSimEngBase.hpp base/PrcBase.hpp utility/TextCtrl.hpp \ utility/StrUtils.hpp netlist/Component.hpp utility/CnvtType.hpp \ base/SimnBase.hpp base/CmdBase.hpp netlist/NetList.hpp Version.hpp \ netlist/SimnGnuCap.hpp gnucap/commands/CmdGnuCapOPT.hpp base/CmdBase.hpp \ ngspice/commands/CmdNgSpiceOPT.hpp gnucap/commands/CmdGnuCapOP.hpp \ ngspice/commands/CmdNgSpiceDC.hpp gnucap/commands/CmdGnuCapDC.hpp \ gnucap/commands/CmdGnuCapAC.hpp ngspice/commands/CmdNgSpiceAC.hpp \ gnucap/commands/CmdGnuCapTR.hpp ngspice/commands/CmdNgSpiceTR.hpp \ gnucap/commands/CmdGnuCapFO.hpp gnucap/commands/CmdGnuCapPR.hpp \ ngspice/commands/CmdNgSpicePR.hpp gnucap/commands/CmdGnuCapGEN.hpp \ netlist/CpntNgsIndSrc.hpp netlist/SimnNgSpice.hpp obj/AppPnlValue.o: tests/AppPnlValue.cpp tests/AppPnlValue.hpp TypeDefs.hpp \ utility/PnlLblTxt.hpp utility/PnlValue.hpp utility/PnlTxtSpn.hpp \ utility/CnvtType.hpp utility/ChoUnits.hpp base/UnitsBase.hpp \ utility/LblUnits.hpp obj/ChoUnits.o: utility/ChoUnits.cpp utility/ChoUnits.hpp TypeDefs.hpp \ base/UnitsBase.hpp utility/CnvtType.hpp obj/CnvtType.o: utility/CnvtType.cpp utility/CnvtType.hpp obj/LblUnits.o: utility/LblUnits.cpp utility/LblUnits.hpp TypeDefs.hpp \ base/UnitsBase.hpp utility/CnvtType.hpp obj/PnlLblCho.o: utility/PnlLblCho.cpp utility/PnlLblCho.hpp TypeDefs.hpp obj/PnlLblTxt.o: utility/PnlLblTxt.cpp utility/PnlLblTxt.hpp TypeDefs.hpp obj/PnlTxtSpn.o: utility/PnlTxtSpn.cpp utility/PnlTxtSpn.hpp TypeDefs.hpp \ utility/CnvtType.hpp obj/PnlValue.o: utility/PnlValue.cpp utility/PnlValue.hpp TypeDefs.hpp \ utility/PnlTxtSpn.hpp utility/CnvtType.hpp utility/ChoUnits.hpp \ base/UnitsBase.hpp utility/LblUnits.hpp obj/StrUtils.o: utility/StrUtils.cpp utility/StrUtils.hpp TypeDefs.hpp \ netlist/Component.hpp utility/CnvtType.hpp utility/StrUtils.hpp obj/TextCtrl.o: utility/TextCtrl.cpp utility/TextCtrl.hpp TypeDefs.hpp obj/CmdGnuCapAC.o: gnucap/commands/CmdGnuCapAC.cpp \ gnucap/commands/CmdGnuCapAC.hpp TypeDefs.hpp base/CmdBase.hpp \ ngspice/commands/CmdNgSpiceAC.hpp gnucap/commands/CmdGnuCapAC.hpp \ utility/CnvtType.hpp obj/CmdGnuCapDC.o: gnucap/commands/CmdGnuCapDC.cpp \ gnucap/commands/CmdGnuCapDC.hpp TypeDefs.hpp base/CmdBase.hpp \ ngspice/commands/CmdNgSpiceDC.hpp gnucap/commands/CmdGnuCapOP.hpp \ utility/CnvtType.hpp gnucap/commands/CmdGnuCapDC.hpp obj/CmdGnuCapFO.o: gnucap/commands/CmdGnuCapFO.cpp \ gnucap/commands/CmdGnuCapFO.hpp TypeDefs.hpp base/CmdBase.hpp \ utility/CnvtType.hpp obj/CmdGnuCapGEN.o: gnucap/commands/CmdGnuCapGEN.cpp \ gnucap/commands/CmdGnuCapGEN.hpp TypeDefs.hpp base/CmdBase.hpp \ utility/CnvtType.hpp netlist/CpntNgsIndSrc.hpp netlist/Component.hpp \ utility/StrUtils.hpp gnucap/commands/CmdGnuCapGEN.hpp obj/CmdGnuCapOP.o: gnucap/commands/CmdGnuCapOP.cpp \ gnucap/commands/CmdGnuCapOP.hpp TypeDefs.hpp base/CmdBase.hpp \ ngspice/commands/CmdNgSpiceDC.hpp gnucap/commands/CmdGnuCapOP.hpp \ gnucap/commands/CmdGnuCapDC.hpp utility/CnvtType.hpp obj/CmdGnuCapOPT.o: gnucap/commands/CmdGnuCapOPT.cpp \ gnucap/commands/CmdGnuCapOPT.hpp TypeDefs.hpp base/CmdBase.hpp \ ngspice/commands/CmdNgSpiceOPT.hpp gnucap/commands/CmdGnuCapOPT.hpp \ utility/CnvtType.hpp obj/CmdGnuCapPR.o: gnucap/commands/CmdGnuCapPR.cpp \ gnucap/commands/CmdGnuCapPR.hpp TypeDefs.hpp base/CmdBase.hpp \ netlist/Component.hpp utility/CnvtType.hpp utility/StrUtils.hpp \ netlist/NetList.hpp Version.hpp ngspice/commands/CmdNgSpicePR.hpp \ gnucap/commands/CmdGnuCapPR.hpp obj/CmdGnuCapTR.o: gnucap/commands/CmdGnuCapTR.cpp \ gnucap/commands/CmdGnuCapTR.hpp TypeDefs.hpp base/CmdBase.hpp \ ngspice/commands/CmdNgSpiceTR.hpp gnucap/commands/CmdGnuCapTR.hpp \ utility/CnvtType.hpp obj/DlgGcpCfgGEN.o: gnucap/dialogs/DlgGcpCfgGEN.cpp \ gnucap/dialogs/DlgGcpCfgGEN.hpp TypeDefs.hpp utility/PnlValue.hpp \ utility/PnlTxtSpn.hpp utility/CnvtType.hpp utility/ChoUnits.hpp \ base/UnitsBase.hpp utility/LblUnits.hpp gnucap/commands/CmdGnuCapGEN.hpp \ base/CmdBase.hpp netlist/CpntNgsIndSrc.hpp netlist/Component.hpp \ utility/StrUtils.hpp obj/DlgGcpCfgOPT.o: gnucap/dialogs/DlgGcpCfgOPT.cpp \ gnucap/dialogs/DlgGcpCfgOPT.hpp TypeDefs.hpp utility/PnlValue.hpp \ utility/PnlTxtSpn.hpp utility/CnvtType.hpp utility/ChoUnits.hpp \ base/UnitsBase.hpp utility/LblUnits.hpp utility/PnlLblCho.hpp \ gnucap/commands/CmdGnuCapOPT.hpp base/CmdBase.hpp \ ngspice/commands/CmdNgSpiceOPT.hpp base/PnlAnaBase.hpp \ netlist/Component.hpp utility/StrUtils.hpp obj/PnlGnuCapAC.o: gnucap/panels/PnlGnuCapAC.cpp \ gnucap/panels/PnlGnuCapAC.hpp TypeDefs.hpp base/PnlAnaBase.hpp \ netlist/Component.hpp utility/CnvtType.hpp utility/StrUtils.hpp \ utility/PnlValue.hpp utility/PnlTxtSpn.hpp utility/ChoUnits.hpp \ base/UnitsBase.hpp utility/LblUnits.hpp netlist/SimnGnuCap.hpp \ base/SimnBase.hpp base/CmdBase.hpp netlist/NetList.hpp Version.hpp \ gnucap/commands/CmdGnuCapOPT.hpp base/CmdBase.hpp \ ngspice/commands/CmdNgSpiceOPT.hpp gnucap/commands/CmdGnuCapOP.hpp \ ngspice/commands/CmdNgSpiceDC.hpp gnucap/commands/CmdGnuCapDC.hpp \ gnucap/commands/CmdGnuCapAC.hpp ngspice/commands/CmdNgSpiceAC.hpp \ gnucap/commands/CmdGnuCapTR.hpp ngspice/commands/CmdNgSpiceTR.hpp \ gnucap/commands/CmdGnuCapFO.hpp gnucap/commands/CmdGnuCapPR.hpp \ ngspice/commands/CmdNgSpicePR.hpp gnucap/commands/CmdGnuCapGEN.hpp \ netlist/CpntNgsIndSrc.hpp netlist/SimnNgSpice.hpp obj/PnlGnuCapDC.o: gnucap/panels/PnlGnuCapDC.cpp \ gnucap/panels/PnlGnuCapDC.hpp TypeDefs.hpp base/PnlAnaBase.hpp \ netlist/Component.hpp utility/CnvtType.hpp utility/StrUtils.hpp \ utility/PnlValue.hpp utility/PnlTxtSpn.hpp utility/ChoUnits.hpp \ base/UnitsBase.hpp utility/LblUnits.hpp netlist/SimnGnuCap.hpp \ base/SimnBase.hpp base/CmdBase.hpp netlist/NetList.hpp Version.hpp \ gnucap/commands/CmdGnuCapOPT.hpp base/CmdBase.hpp \ ngspice/commands/CmdNgSpiceOPT.hpp gnucap/commands/CmdGnuCapOP.hpp \ ngspice/commands/CmdNgSpiceDC.hpp gnucap/commands/CmdGnuCapDC.hpp \ gnucap/commands/CmdGnuCapAC.hpp ngspice/commands/CmdNgSpiceAC.hpp \ gnucap/commands/CmdGnuCapTR.hpp ngspice/commands/CmdNgSpiceTR.hpp \ gnucap/commands/CmdGnuCapFO.hpp gnucap/commands/CmdGnuCapPR.hpp \ ngspice/commands/CmdNgSpicePR.hpp gnucap/commands/CmdGnuCapGEN.hpp \ netlist/CpntNgsIndSrc.hpp netlist/SimnNgSpice.hpp obj/PnlGnuCapFO.o: gnucap/panels/PnlGnuCapFO.cpp \ gnucap/panels/PnlGnuCapFO.hpp TypeDefs.hpp base/PnlAnaBase.hpp \ netlist/Component.hpp utility/CnvtType.hpp utility/StrUtils.hpp \ utility/PnlValue.hpp utility/PnlTxtSpn.hpp utility/ChoUnits.hpp \ base/UnitsBase.hpp utility/LblUnits.hpp netlist/SimnGnuCap.hpp \ base/SimnBase.hpp base/CmdBase.hpp netlist/NetList.hpp Version.hpp \ gnucap/commands/CmdGnuCapOPT.hpp base/CmdBase.hpp \ ngspice/commands/CmdNgSpiceOPT.hpp gnucap/commands/CmdGnuCapOP.hpp \ ngspice/commands/CmdNgSpiceDC.hpp gnucap/commands/CmdGnuCapDC.hpp \ gnucap/commands/CmdGnuCapAC.hpp ngspice/commands/CmdNgSpiceAC.hpp \ gnucap/commands/CmdGnuCapTR.hpp ngspice/commands/CmdNgSpiceTR.hpp \ gnucap/commands/CmdGnuCapFO.hpp gnucap/commands/CmdGnuCapPR.hpp \ ngspice/commands/CmdNgSpicePR.hpp gnucap/commands/CmdGnuCapGEN.hpp \ netlist/CpntNgsIndSrc.hpp netlist/SimnNgSpice.hpp \ gnucap/dialogs/DlgGcpCfgGEN.hpp obj/PnlGnuCapOP.o: gnucap/panels/PnlGnuCapOP.cpp \ gnucap/panels/PnlGnuCapOP.hpp TypeDefs.hpp base/PnlAnaBase.hpp \ netlist/Component.hpp utility/CnvtType.hpp utility/StrUtils.hpp \ utility/PnlValue.hpp utility/PnlTxtSpn.hpp utility/ChoUnits.hpp \ base/UnitsBase.hpp utility/LblUnits.hpp netlist/SimnGnuCap.hpp \ base/SimnBase.hpp base/CmdBase.hpp netlist/NetList.hpp Version.hpp \ gnucap/commands/CmdGnuCapOPT.hpp base/CmdBase.hpp \ ngspice/commands/CmdNgSpiceOPT.hpp gnucap/commands/CmdGnuCapOP.hpp \ ngspice/commands/CmdNgSpiceDC.hpp gnucap/commands/CmdGnuCapDC.hpp \ gnucap/commands/CmdGnuCapAC.hpp ngspice/commands/CmdNgSpiceAC.hpp \ gnucap/commands/CmdGnuCapTR.hpp ngspice/commands/CmdNgSpiceTR.hpp \ gnucap/commands/CmdGnuCapFO.hpp gnucap/commands/CmdGnuCapPR.hpp \ ngspice/commands/CmdNgSpicePR.hpp gnucap/commands/CmdGnuCapGEN.hpp \ netlist/CpntNgsIndSrc.hpp netlist/SimnNgSpice.hpp obj/PnlGnuCapTR.o: gnucap/panels/PnlGnuCapTR.cpp \ gnucap/panels/PnlGnuCapTR.hpp TypeDefs.hpp base/PnlAnaBase.hpp \ netlist/Component.hpp utility/CnvtType.hpp utility/StrUtils.hpp \ utility/PnlValue.hpp utility/PnlTxtSpn.hpp utility/ChoUnits.hpp \ base/UnitsBase.hpp utility/LblUnits.hpp netlist/SimnGnuCap.hpp \ base/SimnBase.hpp base/CmdBase.hpp netlist/NetList.hpp Version.hpp \ gnucap/commands/CmdGnuCapOPT.hpp base/CmdBase.hpp \ ngspice/commands/CmdNgSpiceOPT.hpp gnucap/commands/CmdGnuCapOP.hpp \ ngspice/commands/CmdNgSpiceDC.hpp gnucap/commands/CmdGnuCapDC.hpp \ gnucap/commands/CmdGnuCapAC.hpp ngspice/commands/CmdNgSpiceAC.hpp \ gnucap/commands/CmdGnuCapTR.hpp ngspice/commands/CmdNgSpiceTR.hpp \ gnucap/commands/CmdGnuCapFO.hpp gnucap/commands/CmdGnuCapPR.hpp \ ngspice/commands/CmdNgSpicePR.hpp gnucap/commands/CmdGnuCapGEN.hpp \ netlist/CpntNgsIndSrc.hpp netlist/SimnNgSpice.hpp \ gnucap/dialogs/DlgGcpCfgGEN.hpp obj/CmdNgSpiceAC.o: ngspice/commands/CmdNgSpiceAC.cpp \ ngspice/commands/CmdNgSpiceAC.hpp TypeDefs.hpp base/CmdBase.hpp \ gnucap/commands/CmdGnuCapAC.hpp ngspice/commands/CmdNgSpiceAC.hpp \ utility/CnvtType.hpp obj/CmdNgSpiceDC.o: ngspice/commands/CmdNgSpiceDC.cpp \ ngspice/commands/CmdNgSpiceDC.hpp TypeDefs.hpp base/CmdBase.hpp \ gnucap/commands/CmdGnuCapOP.hpp ngspice/commands/CmdNgSpiceDC.hpp \ utility/CnvtType.hpp gnucap/commands/CmdGnuCapDC.hpp obj/CmdNgSpiceOPT.o: ngspice/commands/CmdNgSpiceOPT.cpp \ ngspice/commands/CmdNgSpiceOPT.hpp TypeDefs.hpp base/CmdBase.hpp \ gnucap/commands/CmdGnuCapOPT.hpp ngspice/commands/CmdNgSpiceOPT.hpp \ utility/CnvtType.hpp obj/CmdNgSpicePR.o: ngspice/commands/CmdNgSpicePR.cpp \ ngspice/commands/CmdNgSpicePR.hpp TypeDefs.hpp base/CmdBase.hpp \ gnucap/commands/CmdGnuCapPR.hpp netlist/Component.hpp \ utility/CnvtType.hpp utility/StrUtils.hpp netlist/NetList.hpp \ Version.hpp ngspice/commands/CmdNgSpicePR.hpp obj/CmdNgSpiceTR.o: ngspice/commands/CmdNgSpiceTR.cpp \ ngspice/commands/CmdNgSpiceTR.hpp TypeDefs.hpp base/CmdBase.hpp \ gnucap/commands/CmdGnuCapTR.hpp ngspice/commands/CmdNgSpiceTR.hpp \ utility/CnvtType.hpp obj/DlgNgsCfgOPT.o: ngspice/dialogs/DlgNgsCfgOPT.cpp \ ngspice/dialogs/DlgNgsCfgOPT.hpp TypeDefs.hpp utility/PnlValue.hpp \ utility/PnlTxtSpn.hpp utility/CnvtType.hpp utility/ChoUnits.hpp \ base/UnitsBase.hpp utility/LblUnits.hpp utility/PnlLblCho.hpp \ ngspice/commands/CmdNgSpiceOPT.hpp base/CmdBase.hpp \ gnucap/commands/CmdGnuCapOPT.hpp base/PnlAnaBase.hpp \ netlist/Component.hpp utility/StrUtils.hpp obj/DlgNgsCfgSrc.o: ngspice/dialogs/DlgNgsCfgSrc.cpp \ ngspice/dialogs/DlgNgsCfgSrc.hpp TypeDefs.hpp utility/PnlValue.hpp \ utility/PnlTxtSpn.hpp utility/CnvtType.hpp utility/ChoUnits.hpp \ base/UnitsBase.hpp utility/LblUnits.hpp netlist/CpntNgsIndSrc.hpp \ netlist/Component.hpp utility/StrUtils.hpp \ gnucap/commands/CmdGnuCapGEN.hpp base/CmdBase.hpp obj/PnlNgSpiceAC.o: ngspice/panels/PnlNgSpiceAC.cpp \ ngspice/panels/PnlNgSpiceAC.hpp TypeDefs.hpp base/PnlAnaBase.hpp \ netlist/Component.hpp utility/CnvtType.hpp utility/StrUtils.hpp \ utility/PnlValue.hpp utility/PnlTxtSpn.hpp utility/ChoUnits.hpp \ base/UnitsBase.hpp utility/LblUnits.hpp netlist/SimnNgSpice.hpp \ base/SimnBase.hpp base/CmdBase.hpp netlist/NetList.hpp Version.hpp \ ngspice/commands/CmdNgSpiceOPT.hpp base/CmdBase.hpp \ gnucap/commands/CmdGnuCapOPT.hpp ngspice/commands/CmdNgSpiceDC.hpp \ gnucap/commands/CmdGnuCapOP.hpp gnucap/commands/CmdGnuCapDC.hpp \ ngspice/commands/CmdNgSpiceAC.hpp gnucap/commands/CmdGnuCapAC.hpp \ ngspice/commands/CmdNgSpiceTR.hpp gnucap/commands/CmdGnuCapTR.hpp \ ngspice/commands/CmdNgSpicePR.hpp gnucap/commands/CmdGnuCapPR.hpp \ netlist/SimnGnuCap.hpp gnucap/commands/CmdGnuCapFO.hpp \ gnucap/commands/CmdGnuCapGEN.hpp netlist/CpntNgsIndSrc.hpp obj/PnlNgSpiceDC.o: ngspice/panels/PnlNgSpiceDC.cpp \ ngspice/panels/PnlNgSpiceDC.hpp TypeDefs.hpp base/PnlAnaBase.hpp \ netlist/Component.hpp utility/CnvtType.hpp utility/StrUtils.hpp \ utility/PnlValue.hpp utility/PnlTxtSpn.hpp utility/ChoUnits.hpp \ base/UnitsBase.hpp utility/LblUnits.hpp netlist/SimnNgSpice.hpp \ base/SimnBase.hpp base/CmdBase.hpp netlist/NetList.hpp Version.hpp \ ngspice/commands/CmdNgSpiceOPT.hpp base/CmdBase.hpp \ gnucap/commands/CmdGnuCapOPT.hpp ngspice/commands/CmdNgSpiceDC.hpp \ gnucap/commands/CmdGnuCapOP.hpp gnucap/commands/CmdGnuCapDC.hpp \ ngspice/commands/CmdNgSpiceAC.hpp gnucap/commands/CmdGnuCapAC.hpp \ ngspice/commands/CmdNgSpiceTR.hpp gnucap/commands/CmdGnuCapTR.hpp \ ngspice/commands/CmdNgSpicePR.hpp gnucap/commands/CmdGnuCapPR.hpp \ netlist/SimnGnuCap.hpp gnucap/commands/CmdGnuCapFO.hpp \ gnucap/commands/CmdGnuCapGEN.hpp netlist/CpntNgsIndSrc.hpp obj/PnlNgSpiceOP.o: ngspice/panels/PnlNgSpiceOP.cpp \ ngspice/panels/PnlNgSpiceOP.hpp TypeDefs.hpp base/PnlAnaBase.hpp \ netlist/Component.hpp utility/CnvtType.hpp utility/StrUtils.hpp \ utility/PnlValue.hpp utility/PnlTxtSpn.hpp utility/ChoUnits.hpp \ base/UnitsBase.hpp utility/LblUnits.hpp netlist/SimnNgSpice.hpp \ base/SimnBase.hpp base/CmdBase.hpp netlist/NetList.hpp Version.hpp \ ngspice/commands/CmdNgSpiceOPT.hpp base/CmdBase.hpp \ gnucap/commands/CmdGnuCapOPT.hpp ngspice/commands/CmdNgSpiceDC.hpp \ gnucap/commands/CmdGnuCapOP.hpp gnucap/commands/CmdGnuCapDC.hpp \ ngspice/commands/CmdNgSpiceAC.hpp gnucap/commands/CmdGnuCapAC.hpp \ ngspice/commands/CmdNgSpiceTR.hpp gnucap/commands/CmdGnuCapTR.hpp \ ngspice/commands/CmdNgSpicePR.hpp gnucap/commands/CmdGnuCapPR.hpp \ netlist/SimnGnuCap.hpp gnucap/commands/CmdGnuCapFO.hpp \ gnucap/commands/CmdGnuCapGEN.hpp netlist/CpntNgsIndSrc.hpp obj/PnlNgSpiceTR.o: ngspice/panels/PnlNgSpiceTR.cpp \ ngspice/panels/PnlNgSpiceTR.hpp TypeDefs.hpp base/PnlAnaBase.hpp \ netlist/Component.hpp utility/CnvtType.hpp utility/StrUtils.hpp \ utility/PnlValue.hpp utility/PnlTxtSpn.hpp utility/ChoUnits.hpp \ base/UnitsBase.hpp utility/LblUnits.hpp netlist/SimnNgSpice.hpp \ base/SimnBase.hpp base/CmdBase.hpp netlist/NetList.hpp Version.hpp \ ngspice/commands/CmdNgSpiceOPT.hpp base/CmdBase.hpp \ gnucap/commands/CmdGnuCapOPT.hpp ngspice/commands/CmdNgSpiceDC.hpp \ gnucap/commands/CmdGnuCapOP.hpp gnucap/commands/CmdGnuCapDC.hpp \ ngspice/commands/CmdNgSpiceAC.hpp gnucap/commands/CmdGnuCapAC.hpp \ ngspice/commands/CmdNgSpiceTR.hpp gnucap/commands/CmdGnuCapTR.hpp \ ngspice/commands/CmdNgSpicePR.hpp gnucap/commands/CmdGnuCapPR.hpp \ netlist/SimnGnuCap.hpp gnucap/commands/CmdGnuCapFO.hpp \ gnucap/commands/CmdGnuCapGEN.hpp netlist/CpntNgsIndSrc.hpp \ ngspice/dialogs/DlgNgsCfgSrc.hpp gspiceui-1.1.00+dfsg/src/main/0000755000000000000000000000000012514475365014545 5ustar rootrootgspiceui-1.1.00+dfsg/src/main/HelpTasks.cpp0000644000000000000000000002736112506660735017156 0ustar rootroot//************************************************************************************************** // HelpTasks.cpp * // --------------- * // Started : 2005-06-03 * // Last Update : 2015-01-28 * // Copyright : (C) 2005 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "HelpTasks.hpp" #include "FrmMain.hpp" // The application icons #include "icons/gspiceui-32x32.xpm" #include "icons/html-forward.xpm" #include "icons/html-back.xpm" #include "icons/html-close.xpm" //************************************************************************************************** // Implement an event table in which the events are routed to their respective handler functions in // the class. If -1 is given as the ID, the given handler will be invoked for any event of the // specified type. wxBEGIN_EVENT_TABLE( HelpTasks, wxFrame ) EVT_TOOL( HelpTasks::ID_TBR_FORWARD, HelpTasks::OnForward ) EVT_TOOL( HelpTasks::ID_TBR_BACK , HelpTasks::OnBack ) EVT_TOOL( HelpTasks::ID_TBR_CLOSE , HelpTasks::OnClose ) EVT_CLOSE( HelpTasks::OnClose ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. // // Argument List : // poFrmMain - A pointer to the parent frame HelpTasks::HelpTasks( FrmMain * poFrmMain ) : wxFrame( poFrmMain, -1, wxT(""), wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE ), m_oHtmlWin( this ) { // Set the pointer to the parent frame m_poFrmMain = poFrmMain; // Get the global configuration object m_poCfg = (wxConfig *) wxConfig::Get( ); // Initialize the help viewer Initialize( ); } //************************************************************************************************** // Destructor. HelpTasks::~HelpTasks( ) { } //************************************************************************************************** // Initialize the main frame. void HelpTasks::Initialize( void ) { // Set the frame icon SetIcon( wxICON( gspiceui32x32 ) ); // Set the frame title SetTitle( ); // Call all the initialization functions InitToolBar( ); InitHtmlWin( ); InitPosnSize( ); } //************************************************************************************************** // Initialize the tool bar. void HelpTasks::InitToolBar( void ) { wxBitmap * poPixMap[ 3 ]; wxToolBar * poToolBar; // Create the tool bar poToolBar = CreateToolBar( wxHORIZONTAL | wxTB_FLAT ); // Create the bitmaps for the tools poPixMap[ 0 ] = new wxBitmap( html_back_xpm ); poPixMap[ 1 ] = new wxBitmap( html_forward_xpm ); poPixMap[ 2 ] = new wxBitmap( html_close_xpm ); // Add the tools to the toolbar poToolBar->AddTool( ID_TBR_BACK , wxT(""), *(poPixMap[ 0 ]), wxT("Back") ); poToolBar->AddTool( ID_TBR_FORWARD, wxT(""), *(poPixMap[ 1 ]), wxT("Forward") ); poToolBar->AddTool( ID_TBR_CLOSE , wxT(""), *(poPixMap[ 2 ]), wxT("Close") ); // Realize the toolbar poToolBar->Realize( ); // Can delete the bitmaps since they're reference counted for( int i1=0; i1<3; i1++ ) delete poPixMap[ i1 ]; } //************************************************************************************************** // Initialize the frames position amd size. void HelpTasks::InitHtmlWin( void ) { // Enable display of image types wxInitAllImageHandlers( ); // Set suitable wxHtmlWindow font sizes int ia[ 7 ]={ 9,10,11,14,16,18,20 }; m_oHtmlWin.SetFonts( wxT(""), wxT(""), ia ); } //************************************************************************************************** // Initialize the frames position amd size. void HelpTasks::InitPosnSize( void ) { int ix, iy, iw, ih; // Set the position and size from the configuration object m_poCfg->SetPath( wxT("/Help") ); ix = m_poCfg->Read( wxT("PosnX"), 500 ); iy = m_poCfg->Read( wxT("PosnY"), 1 ); iw = m_poCfg->Read( wxT("SizeW"), 500 ); ih = m_poCfg->Read( wxT("SizeH"), 700 ); if( ix>0 && iy>0 ) Move( ix, iy ); if( iw>0 && ih>0 ) SetClientSize( iw, ih ); } //************************************************************************************************** // Determine the path to the applications base installation point. // // Return Values : // Success - The path to the installation point // Failure - An empty string wxString & HelpTasks::rosGetInstallPath( void ) { static wxString osPath; wxPathList opl1; wxFileName ofn1; wxString os1; osPath.Empty( ); // Get the command used to envoke this process ofn1 = wxTheApp->argv[ 0 ]; if( ! ofn1.GetPath( ).IsEmpty( ) ) { // Extract the desired part of the path ofn1.Normalize( ); // Expand abbreviations eg. "..", "~', etc. } else { // Search env. var. PATH for the first occurrence of the app. name opl1.AddEnvList( wxT("PATH") ); os1 = opl1.FindAbsoluteValidPath( ofn1.GetFullName( ) ); ofn1 = os1; } osPath = ofn1.GetPath( ); if( osPath.AfterLast( wxT('/') ) == wxT("bin") ) osPath = osPath.BeforeLast( wxT('/') ); return( osPath ); } //************************************************************************************************** // Set the help frame title. void HelpTasks::SetTitle( void ) { wxString os1; os1 = wxT("GNU Spice GUI - User Manual"); if( ! m_oHtmlWin.GetOpenedPage( ).IsEmpty( ) ) os1 << wxT(" - ") << m_oHtmlWin.GetOpenedPage( ); wxFrame::SetTitle( os1 ); } //************************************************************************************************** // Display the gSpiceUI User Manual. void HelpTasks::ManualUser( void ) { wxFileName ofn1, ofn2; wxString os1; // Check if the manual has been loaded into memory if( m_oHtmlWin.GetOpenedPage( ).IsEmpty( ) ) { // Specify the two locations to search os1 = rosGetInstallPath( ); if( os1.IsEmpty( ) ) return; ofn1 = os1 + wxT("/share/gspiceui/html/User-Manual.html"); ofn2 = os1 + wxT("/html/User-Manual.html"); // Search for the manual if( ofn1.FileExists( ) ) os1 = ofn1.GetFullPath( ); else if( ofn2.FileExists( ) ) os1 = ofn2.GetFullPath( ); else { // Display an error message os1.Empty( ); os1 << wxT("\nThe base manual page \"") << ofn1.GetFullName( ) << wxT('\"') << wxT(" couldn't be found in either of the following locations :\n\n") << wxT(" ") << ofn1.GetPath( ) << wxT("/\n") << wxT(" ") << ofn2.GetPath( ) << wxT("/\n"); wxMessageBox( os1, wxT("User Manual"), wxOK | wxCENTRE, m_poFrmMain ); return; } // Load the manual m_oHtmlWin.LoadPage( os1 ); SetTitle( ); } // Show the manual Show( true ); } //************************************************************************************************** // Display the about message dialog. void HelpTasks::About( void ) { wxString os1; long lStyle; os1 << wxT("\n " ) << APP_NAME << wxT("\n Version ") << APP_VERSION << wxT(" (") << APP_DATE << wxT(")") << wxT("\n ") << APP_COPYRIGHT << wxT("\n\n") << wxT("\nThis application is intended to provide a GUI for various") << wxT("\nfreely available electronic circuit simulation engines :\n") << wxT("\n - NG-Spice") << wxT("\n - GNU-Cap\n") << wxT("\nSchematic files are imported using gnetlist and waveform ") << wxT("\ndata can be viewed using either ") << CLP_GWAVE << wxT(" or ") << CLP_GAW << wxT(".\n") << wxT("\nThis application is written in C++ and uses the wxWidgets") << wxT("\nlibrary which is a free and open source widget toolkit and") << wxT("\ntools library. wxWidgets version ") << wxMAJOR_VERSION << '.' << wxMINOR_VERSION << '.' << wxRELEASE_NUMBER << wxT(" was used in this") << wxT("\nbuild of ") << APP_NAME << wxT(".\n") << wxT("\n") << APP_NAME << wxT(" is free software; you can redistribute it and/or") << wxT("\nmodify it under the terms of the GNU Library General") << wxT("\nPublic Licence as published by the Free Software") << wxT("\nFoundation; either version 3 of the Licence, or (at your") << wxT("\noption) any later version.\n") << wxT("\n") << APP_NAME << wxT(" is distributed in the hope that it will be useful,") << wxT("\nbut WITHOUT ANY WARRANTY; without even the implied") << wxT("\nwarranty of MERCHANTABILITY or FITNESS FOR A") << wxT("\nPARTICULAR PURPOSE."); lStyle = wxOK | wxICON_INFORMATION; wxMessageBox( os1, wxT("About gSpiceUI"), lStyle, m_poFrmMain ); } //************************************************************************************************** // Go to the next page in the history store. // // Argument List : // roEvtCmd - The event to be processed void HelpTasks::OnForward( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { if( m_oHtmlWin.HistoryCanForward( ) ) m_oHtmlWin.HistoryForward( ); } //************************************************************************************************** // Go to the previous page in the history store. // // Argument List : // roEvtCmd - The event to be processed void HelpTasks::OnBack( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { if( m_oHtmlWin.HistoryCanBack( ) ) m_oHtmlWin.HistoryBack( ); } //************************************************************************************************** // Close the help viewer frame. // // Argument List : // roEvtCmd - The event to be processed void HelpTasks::OnClose( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { int ix, iy, iw, ih; // Save the frame size and position GetPosition( &ix, &iy ); GetClientSize( &iw, &ih ); m_poCfg->SetPath( wxT("/Help") ); m_poCfg->Write( wxT("PosnX"), (long) ix ); m_poCfg->Write( wxT("PosnY"), (long) iy ); m_poCfg->Write( wxT("SizeW"), (long) iw ); m_poCfg->Write( wxT("SizeH"), (long) ih ); m_poCfg->Flush( ); Show( false ); // Hide the frame // Reset the HTML Window settings while( m_oHtmlWin.HistoryCanBack( ) ) m_oHtmlWin.HistoryBack( ); m_oHtmlWin.HistoryClear( ); m_oHtmlWin.Scroll( 0, 0 ); } //************************************************************************************************** // Close the help viewer frame. // // Argument List : // roEvtClose - The event to be processed void HelpTasks::OnClose( wxCloseEvent & WXUNUSED( roEvtClose ) ) { wxCommandEvent oEvtCmd; OnClose( oEvtCmd ); } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/main/NbkTxtCtls.hpp0000644000000000000000000000571112506657525017323 0ustar rootroot//************************************************************************************************** // NbkTxtCtls.hpp * // ---------------- * // Description : This class extends wxNotebook, it contains all text control objects which appear * // at the bottom of the GUI. * // Started : 2005-06-14 * // Last Update : 2015-04-01 * // Copyright : (C) 2005 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef NBKTXTCTLS_HPP #define NBKTXTCTLS_HPP // Application Includes #include "TypeDefs.hpp" #include "utility/TextCtrl.hpp" // wxWidgets Includes #include //************************************************************************************************** class NbkTxtCtls : public wxNotebook { public : // The various page identifiers enum ePageType { ePAGE_CONSOLE = 0, ePAGE_NETLIST, ePAGE_SIMULTN, ePAGE_NGSPICE, ePAGE_GNUCAP, ePAGE_ALL, ePAGE_CURRENT, ePAGE_NONE, ePAGE_FST = ePAGE_CONSOLE, ePAGE_LST = ePAGE_NGSPICE }; NbkTxtCtls( void ); ~NbkTxtCtls( ); bool bCreate( wxWindow * poWin, wxWindowID oWinID ); bool bIsCreated( void ) { return( GetParent( )!=NULL ? true : false ); } bool bClear ( ePageType ePage=ePAGE_ALL ); bool bInitialize( ePageType ePage=ePAGE_ALL ); bool bSetPage( ePageType ePage ); bool bSetPosn( long liPosn ); ePageType eGetPage( void ); TextCtrl * poGetPage( ePageType ePage=ePAGE_CURRENT ); bool bSetLinesMax( int iLines ) { return( TextCtrl::bSetLinesMax( iLines ) ); } bool bSetLinesDsp( int iLines ) { return( TextCtrl::bSetLinesDsp( iLines ) ); } }; //************************************************************************************************** #endif // NBKTXTCTLS_HPP gspiceui-1.1.00+dfsg/src/main/FileTasks.hpp0000644000000000000000000000661012506660735017144 0ustar rootroot//************************************************************************************************** // FileTasks.hpp * // --------------- * // Description : This is a helper class for FrmMain, it handles most of the file operations. * // Started : 2005-05-28 * // Last Update : 2015-04-01 * // Copyright : (C) 2005 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef FILETASKS_HPP #define FILETASKS_HPP // Application includes class FrmMain; #include "TypeDefs.hpp" #include "base/SimnBase.hpp" #include "process/PrcGSchem.hpp" #include "process/PrcGNetList.hpp" // wxWidgets includes #include //************************************************************************************************** class FileTasks { private : FrmMain * m_poFrmMain; // Pointer to application main frame wxConfig * m_poCfg; // Pointer to global configuration object PrcGNetList m_oPrcGNetList; // gnetlist file conversion utility // Object initialization functions void InitGuileProc ( void ); void InitSchemFiles( void ); void InitNetLstFile( void ); void DlgErrSchems ( void ); void DlgErrNetLst ( void ); bool bExecImport ( void ); public : FileTasks( FrmMain * poFrmMain ); ~FileTasks( ); void Initialize( void ); // This function calls all the initialization fns bool bIsOk_gnetlist( void ); bool bSetTitle ( void ); bool bSetGuileProc ( const wxString & rosPName ); bool bSetSchemFiles( const wxString & rosFNames ); bool bSetNetLstFile( const wxString & rosFName=GNETLST_USE_SCHEM ); bool bSetLogFile ( const wxString & rosFName ) { return( m_oPrcGNetList.bSetLogFile( rosFName ) ); } const wxString & rosGetGuileProc ( void ); const wxArrayString & rosaGetSchemFiles( void ); const wxString & rosGetNetLstFile( void ); bool bDlgOpen ( void ); bool bDlgImport ( void ); bool bDelTmpFiles( void ); bool bOpen ( void ); bool bImport( void ); bool bReload( void ); bool bClose ( void ); bool bExit ( void ); }; //************************************************************************************************** #endif // FILETASKS_HPP gspiceui-1.1.00+dfsg/src/main/HelpTasks.hpp0000644000000000000000000000711712506660735017160 0ustar rootroot//************************************************************************************************** // HelpTasks.hpp * // --------------- * // Description : This is a helper class for FrmMain, it handles most of the required help * // operations. * // Started : 2005-06-03 * // Last Update : 2015-04-01 * // Copyright : (C) 2005 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef HELPTASKS_HPP #define HELPTASKS_HPP // Application includes #include "TypeDefs.hpp" #include "CmdLinePcr.hpp" class FrmMain; // wxWidgets includes #include #include #include #ifdef __WXMAC__ #include #endif //************************************************************************************************** class HelpTasks : public wxFrame { private : FrmMain * m_poFrmMain; // Pointer to application main frame wxConfig * m_poCfg; // Pointer to the configuration object wxHtmlWindow m_oHtmlWin; // The HTML viewer window // Object initialization functions void Initialize ( void ); // This function calls the following init. fns void InitToolBar ( void ); void InitHtmlWin ( void ); void InitPosnSize( void ); wxString & rosGetInstallPath( void ); public : HelpTasks( FrmMain * poFrmMain ); ~HelpTasks( ); void SetAppFrm( FrmMain * poFrmMain ) { m_poFrmMain = poFrmMain; } void SetTitle ( void ); void ManualUser( void ); void ManualNGSP( void ) {} void ManualGCAP( void ) {} void About ( void ); // Event handlers void OnForward( wxCommandEvent & roEvtCmd ); void OnBack ( wxCommandEvent & roEvtCmd ); void OnClose ( wxCommandEvent & roEvtCmd ); void OnClose ( wxCloseEvent & roEvtClose ); // In order to be able to react to a menu command, it must be given a // unique identifier such as a const or an enum. enum eFrmItemID { ID_TOOLBAR = 1, ID_TBR_FORWARD, ID_TBR_BACK, ID_TBR_CLOSE, ID_UNUSED, // Assigned to controls for which events are not used ID_FST = ID_TOOLBAR, ID_LST = ID_TBR_CLOSE }; // Leave this as the last line as private access is envoked by this macro wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // HELPTASKS_HPP gspiceui-1.1.00+dfsg/src/main/FrmMain.cpp0000644000000000000000000015270712513451034016600 0ustar rootroot//************************************************************************************************** // FrmMain.cpp * // ------------- * // Started : 2003-08-18 * // Last Update : 2015-04-15 * // Copyright : (C) 2003 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "FrmMain.hpp" // The application icons #include "icons/gspiceui-32x32.xpm" #include "icons/file-open.xpm" #include "icons/file-import.xpm" #include "icons/file-reload.xpm" #include "icons/file-close.xpm" #include "icons/sim-create.xpm" #include "icons/sim-run.xpm" #include "icons/sim-stop.xpm" #include "icons/sim-edit.xpm" #include "icons/sim-plot.xpm" #include "icons/help.xpm" //************************************************************************************************** // Implement an event table in which the events are routed to their respective handler functions in // the class. If -1 is given as the ID, the given handler will be invoked for any event of the // specified type. wxBEGIN_EVENT_TABLE( FrmMain, wxFrame ) EVT_MENU( FrmMain::ID_MNU_OPEN , FrmMain::OnOpen ) EVT_MENU( FrmMain::ID_MNU_IMPORT , FrmMain::OnImport ) EVT_MENU( FrmMain::ID_MNU_RELOAD , FrmMain::OnReload ) EVT_MENU( FrmMain::ID_MNU_CLOSE , FrmMain::OnClose ) EVT_MENU( FrmMain::ID_MNU_EXIT , FrmMain::OnAppExit ) EVT_MENU( FrmMain::ID_MNU_CREATE , FrmMain::OnSimCreate ) EVT_MENU( FrmMain::ID_MNU_RUN , FrmMain::OnSimRun ) EVT_MENU( FrmMain::ID_MNU_STOP , FrmMain::OnSimStop ) EVT_MENU( FrmMain::ID_MNU_SCHEM , FrmMain::OnSchematic ) EVT_MENU( FrmMain::ID_MNU_VIEWER , FrmMain::OnViewData ) EVT_MENU( FrmMain::ID_MNU_NGSPICE , FrmMain::OnSelSimEng ) EVT_MENU( FrmMain::ID_MNU_GNUCAP , FrmMain::OnSelSimEng ) EVT_MENU( FrmMain::ID_MNU_PREFS , FrmMain::OnPrefs ) EVT_MENU( FrmMain::ID_MNU_MAN_USER, FrmMain::OnManualUser ) EVT_MENU( FrmMain::ID_MNU_MAN_NGSP, FrmMain::OnManualNGSP ) EVT_MENU( FrmMain::ID_MNU_MAN_GCAP, FrmMain::OnManualGCAP ) EVT_MENU( FrmMain::ID_MNU_ABOUT , FrmMain::OnAbout ) EVT_TOOL( FrmMain::ID_TBR_OPEN , FrmMain::OnOpen ) EVT_TOOL( FrmMain::ID_TBR_IMPORT , FrmMain::OnImport ) EVT_TOOL( FrmMain::ID_TBR_RELOAD , FrmMain::OnReload ) EVT_TOOL( FrmMain::ID_TBR_CLOSE , FrmMain::OnClose ) EVT_TOOL( FrmMain::ID_TBR_CREATE , FrmMain::OnSimCreate ) EVT_TOOL( FrmMain::ID_TBR_RUN , FrmMain::OnSimRun ) EVT_TOOL( FrmMain::ID_TBR_STOP , FrmMain::OnSimStop ) EVT_TOOL( FrmMain::ID_TBR_SCHEM , FrmMain::OnSchematic ) EVT_TOOL( FrmMain::ID_TBR_VIEWER , FrmMain::OnViewData ) EVT_TOOL( FrmMain::ID_TBR_HELP , FrmMain::OnManualUser ) EVT_TOOL_ENTER( -1 , FrmMain::OnToolEnter ) EVT_CLOSE( FrmMain::OnSysExit ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. // // Argument List : // poApp - A pointer to the class that created this object FrmMain::FrmMain( const wxApp * poApp ) : wxFrame( (wxFrame *) NULL, -1, wxT(""), wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE & ~wxMAXIMIZE_BOX ), m_oFileTsks( this ), m_oHelpTsks( this ), m_oSimnNgSp( ), m_oSimnGCap( ) { wxString os1; // Indicate that the main frame is open m_bIsOpen = true; // Set pointer to parent application m_poApp = poApp; // Get the global configuration object m_poCfg = (wxConfig *) wxConfig::Get( ); // Initialize pointers m_poSimn = NULL; m_poPrcSimEng = NULL; m_poNbkSimEng = NULL; // Create everything Initialize( ); // Set status bar text os1 << APP_NAME << wxT(", Version ") << APP_VERSION << wxT(" (") << APP_DATE << wxT(")"); SetStatusText( wxT(" Welcome to ") + os1, ePANE_MESAGE ); } //************************************************************************************************** // Destructor. FrmMain::~FrmMain( ) { if( m_poNbkSimEng != NULL ) { delete m_poNbkSimEng; m_poNbkSimEng = NULL; } if( m_poPrcSimEng != NULL ) { delete m_poPrcSimEng; m_poPrcSimEng = NULL; } } //************************************************************************************************** // Initialize the main frame. void FrmMain::Initialize( void ) { long li1; // Set the frame icon, font and title SetIcon( wxICON( gspiceui32x32 ) ); SetFont( FONT_NORM ); m_oFileTsks.bSetTitle( ); // Automatically update the frame layout when it is resized SetAutoLayout( true ); m_poCfg->SetPath( wxT("/Main") ); // Set the main frame layout m_poCfg->Read( wxT("MainFrmLayout"), &li1, 0 ); m_bIsLayout = ( li1==0 ? true : false ); // Call all the initialization functions InitMenuBar ( ); InitToolBar ( ); InitLstBoxs ( ); InitNbkTCtls( ); InitStatBar ( ); InitToolTips( ); InitSimEng ( ); InitLogFiles( ); DoLayout( ); InitPosnSize( ); m_poCfg->SetPath( wxT("/Simulator") ); // Set the sweep source synchronization flag m_poCfg->Read( wxT("SyncSwpSrcs"), &li1, 0 ); NbkSimEngBase::SetSyncSwpSrcs( li1 != 0 ? true : false ); // Set the phase angle units to used m_poCfg->Read( wxT("PhaseUnits") , &li1, eUNITS_PHAD ); NbkSimEngBase::bSetUnitsPhase( li1 == 0 ? eUNITS_PHAD : eUNITS_PHAR ); // Display the desired analysis page m_poNbkSimEng->bSetPage( m_poCfg->Read( wxT("Analysis"), wxT("OP") ) ); // Initialize the FileTasks object eg. load schematic or netlist file/s m_oFileTsks.Initialize( ); // If necessary load the simulation or netlist if( ! m_oNetLst.bIsEmpty( ) ) bSimnLoad( ); // Display the appropriate text control page if( ! m_oNbkTxtCtls.poGetPage( NbkTxtCtls::ePAGE_SIMULTN )->bIsEmpty( ) ) m_oNbkTxtCtls.bSetPage( NbkTxtCtls::ePAGE_SIMULTN ); else if( ! m_oNbkTxtCtls.poGetPage( NbkTxtCtls::ePAGE_NETLIST )->bIsEmpty( ) ) m_oNbkTxtCtls.bSetPage( NbkTxtCtls::ePAGE_NETLIST ); else m_oNbkTxtCtls.bSetPage( NbkTxtCtls::ePAGE_CONSOLE ); } //************************************************************************************************** // Initialize the menu bar. void FrmMain::InitMenuBar( void ) { // Create the menu bar and menus wxMenuBar * poMenuBar = new wxMenuBar; wxMenu * poMenuFile = new wxMenu; wxMenu * poMenuSimu = new wxMenu; wxMenu * poMenuSets = new wxMenu; wxMenu * poMenuHelp = new wxMenu; // Set the tool bar font poMenuBar->SetFont( FONT_NORM ); // Load the menus with items poMenuFile->Append( ID_MNU_OPEN , wxT(" &Open ... ") ); poMenuFile->Append( ID_MNU_IMPORT, wxT(" &Import ... ") ); poMenuFile->Append( ID_MNU_RELOAD, wxT(" &Reload ") ); poMenuFile->Append( ID_MNU_CLOSE , wxT(" &Close ") ); poMenuFile->AppendSeparator( ); poMenuFile->Append( ID_MNU_EXIT , wxT(" E&xit ") ); poMenuSimu->Append( ID_MNU_CREATE, wxT(" &Create ") ); poMenuSimu->Append( ID_MNU_RUN , wxT(" &Run ") ); poMenuSimu->Append( ID_MNU_STOP , wxT(" &Stop ") ); poMenuSimu->AppendSeparator( ); poMenuSimu->Append( ID_MNU_SCHEM , wxT(" Sc&hematic ... ") ); poMenuSimu->Append( ID_MNU_VIEWER, wxT(" R&esults ... ") ); poMenuSets->Append( ID_MNU_PREFS, wxT(" &Preferences ... ") ); poMenuSets->AppendSeparator( ); poMenuSets->AppendRadioItem( ID_MNU_NGSPICE, wxT(" &NG-Spice ") ); poMenuSets->AppendRadioItem( ID_MNU_GNUCAP , wxT(" &GNU-Cap ") ); poMenuHelp->Append( ID_MNU_MAN_USER, wxT(" &User Manual ... ") ); // poMenuHelp->Append( ID_MNU_MAN_NGSP, wxT(" &NG-Spice Manual ... ") ); // poMenuHelp->Append( ID_MNU_MAN_GCAP, wxT(" &GNU-Cap Manual ... ") ); // poMenuHelp->AppendSeparator( ); poMenuHelp->Append( ID_MNU_ABOUT , wxT(" &About ... ") ); // Load the menubar with menus poMenuBar ->Append( poMenuFile, wxT(" &File ") ); poMenuBar ->Append( poMenuSimu, wxT(" &Simulate ") ); poMenuBar ->Append( poMenuSets, wxT(" S&ettings ") ); poMenuBar ->Append( poMenuHelp, wxT(" &Help ") ); // Check the appropriate simulation engine menu item m_poCfg->SetPath( wxT("/Simulator") ); if( m_poCfg->Read( wxT("Engine"), CLP_GNUCAP ) == CLP_NGSPICE ) poMenuSets->Check( ID_MNU_NGSPICE, true ); else poMenuSets->Check( ID_MNU_GNUCAP , true ); // Attach the menu bar to the frame SetMenuBar( poMenuBar ); // Disable the stop option poMenuBar->Enable( ID_MNU_STOP, false ); } //************************************************************************************************** // Initialize the tool bar. void FrmMain::InitToolBar( void ) { wxBitmap * poPixMap[ 10 ]; wxToolBar * poToolBar; // Create the tool bar poToolBar = CreateToolBar( wxHORIZONTAL | wxTB_FLAT ); // Create the bitmaps for the tools poPixMap[ 0 ] = new wxBitmap( file_open_xpm ); poPixMap[ 1 ] = new wxBitmap( file_import_xpm ); poPixMap[ 2 ] = new wxBitmap( file_reload_xpm ); poPixMap[ 3 ] = new wxBitmap( file_close_xpm ); poPixMap[ 4 ] = new wxBitmap( sim_create_xpm ); poPixMap[ 5 ] = new wxBitmap( sim_run_xpm ); poPixMap[ 6 ] = new wxBitmap( sim_stop_xpm ); poPixMap[ 7 ] = new wxBitmap( sim_edit_xpm ); poPixMap[ 8 ] = new wxBitmap( sim_plot_xpm ); poPixMap[ 9 ] = new wxBitmap( help_xpm ); // Add the tools to the toolbar poToolBar->SetToolSeparation( 10 ); poToolBar->AddTool( ID_TBR_OPEN, wxT(""), *(poPixMap[ 0 ]), wxT("Open a netlist file") ); poToolBar->AddTool( ID_TBR_IMPORT, wxT(""), *(poPixMap[ 1 ]), wxT("Import a schematic file") ); poToolBar->AddTool( ID_TBR_RELOAD, wxT(""), *(poPixMap[ 2 ]), wxT("Reload a netlist / schematic file") ); poToolBar->AddTool( ID_TBR_CLOSE, wxT(""), *(poPixMap[ 3 ]), wxT("Close a netlist / schematic file") ); poToolBar->AddSeparator( ); poToolBar->AddTool( ID_TBR_CREATE, wxT(""), *(poPixMap[ 4 ]), wxT("Create a netlist file including simulation instructions") ); poToolBar->AddTool( ID_TBR_RUN, wxT(""), *(poPixMap[ 5 ]), wxT("Run the simulation engine") ); poToolBar->AddTool( ID_TBR_STOP, wxT(""), *(poPixMap[ 6 ]), wxT("Stop the simulation engine") ); poToolBar->AddSeparator( ); poToolBar->AddTool( ID_TBR_SCHEM, wxT(""), *(poPixMap[ 7 ]), wxT("Edit / view a schematic") ); poToolBar->AddTool( ID_TBR_VIEWER, wxT(""), *(poPixMap[ 8 ]), wxT("View simulation results") ); poToolBar->AddSeparator( ); poToolBar->AddTool( ID_TBR_HELP, wxT(""), *(poPixMap[ 9 ]), wxT("View the user manual") ); // Realize the toolbar poToolBar->Realize( ); // Delete the bitmaps for( int i1=0; i1<10; i1++ ) delete poPixMap[ i1 ]; // Disable the stop button poToolBar->EnableTool( ID_TBR_STOP, false ); } //************************************************************************************************** // Initialize the test node and component list boxes. void FrmMain::InitLstBoxs( void ) { long lStyle; // Create the node and component list labels lStyle = wxALIGN_CENTER; m_oLblNodes.Create( this, ID_UNUSED, wxT("Nodes"), wxDefaultPosition, wxDefaultSize, lStyle ); m_oLblCpnts.Create( this, ID_UNUSED, wxT("Components"), wxDefaultPosition, wxDefaultSize, lStyle ); // Create the node and component list boxes lStyle = wxLB_EXTENDED | wxLB_NEEDED_SB; m_oLbxNodes.Create( this, ID_LBX_NODES, wxDefaultPosition, wxSize( 100, -1 ), 0, NULL, lStyle ); m_oLbxCpnts.Create( this, ID_LBX_CPNTS, wxDefaultPosition, wxSize( 100, -1 ), 0, NULL, lStyle ); } //************************************************************************************************** // Initialize the console notebook. void FrmMain::InitNbkTCtls( void ) { long li1; // Create the text control notebook m_oNbkTxtCtls.bCreate( this, ID_NBK_TXTCTRLS ); // Set the text control maximum lines m_poCfg->SetPath( wxT("/Main") ); m_poCfg->Read( wxT("NbkMaxLines"), &li1, TXT_LNSDEF ); m_oNbkTxtCtls.bSetLinesMax( li1 ); // Set the precision of the results data m_poCfg->Read( wxT("Precision"), &li1, CNVT_DEF_FLT_RES ); CnvtType::bSetFltRes( (int) li1 ); } //************************************************************************************************** // Initialize the status bar. // // Note : The first field in the status bar has benn effectively disable by setting it's width to // near zero. It is not used since the frame insists on writing text into this field as the // user moves the mouse over display controls. void FrmMain::InitStatBar( void ) { wxStatusBar * poStatusBar = new wxStatusBar; long liStyle; int iaPaneWidths[ ePANE_LAST+1 ]; #if wxCHECK_VERSION( 3,0,0 ) int iaPaneStyles[ ePANE_LAST+1 ]; #endif wxString os1; // Set the style bits #if wxCHECK_VERSION( 3,0,0 ) liStyle = wxSTB_SHOW_TIPS | wxSTB_ELLIPSIZE_END | wxFULL_REPAINT_ON_RESIZE; #else liStyle = wxFULL_REPAINT_ON_RESIZE; #endif // Create the status bar poStatusBar->Create( this, wxID_ANY, liStyle ); poStatusBar->SetFieldsCount( ePANE_LAST+1 ); poStatusBar->SetMinHeight( 25 ); // Set the status bar pane widths iaPaneWidths[ ePANE_MESAGE ] = -1; // Variable width iaPaneWidths[ ePANE_SIMENG ] = 144; // Fixed width iaPaneWidths[ ePANE_VIEWER ] = 110; // Fixed width poStatusBar->SetStatusWidths( ePANE_LAST+1, iaPaneWidths ); // Set the status bar pane styles #if wxCHECK_VERSION( 3,0,0 ) iaPaneStyles[ ePANE_MESAGE ] = wxSB_SUNKEN; iaPaneStyles[ ePANE_SIMENG ] = wxSB_SUNKEN; iaPaneStyles[ ePANE_VIEWER ] = wxSB_SUNKEN; poStatusBar->SetStatusStyles( ePANE_LAST+1, iaPaneStyles ); #endif // Get the viewer application name from the configuration object m_poCfg->SetPath( wxT("/Viewer") ); m_poCfg->Read( wxT("Name"), &os1, CLP_GWAVE ); // Set status bar text poStatusBar->SetStatusText( wxT(" Welcome message") , ePANE_MESAGE ); poStatusBar->SetStatusText( wxT(" Simulator : None"), ePANE_SIMENG ); poStatusBar->SetStatusText( wxT(" Viewer : ") + os1 , ePANE_VIEWER ); // Set the main frame status bar SetStatusBar( poStatusBar ); // Disable the status bar pane used to display menu and toolbar help SetStatusBarPane( -1 ); } //************************************************************************************************** // Initialize the tool tips. void FrmMain::InitToolTips( void ) { long li1; // Define tool tips for each control m_oLbxNodes.SetToolTip( wxT(" Test Nodes ") ); m_oLbxCpnts.SetToolTip( wxT(" Test Components ") ); // Set global tool tip attributes m_poCfg->SetPath( wxT("/Main") ); m_poCfg->Read( wxT("ToolTips"), &li1, (long) 0 ); wxToolTip::Enable( li1 != 0 ? true : false ); wxToolTip::SetDelay( 700 ); } //************************************************************************************************** // Set the electronic circuit simulator engine to use. void FrmMain::InitSimEng( void ) { // Delete any existing simulation engine notebook object if( m_poNbkSimEng != NULL ) { GetSizer( )->Detach( m_poNbkSimEng ); delete m_poNbkSimEng; m_poNbkSimEng = NULL; } // Delete any existing simulation engine process object if( m_poPrcSimEng != NULL ) { delete m_poPrcSimEng; m_poPrcSimEng = NULL; } // Create the new simulation engine objects and update the status text if( GetMenuBar( )->IsChecked( ID_MNU_NGSPICE ) ) { m_poNbkSimEng = new NbkNgSpice( this, ID_NBK_ANALYSIS ); m_poPrcSimEng = new PrcNgSpice( ); m_poSimn = &m_oSimnNgSp; SetStatusText( wxT(" Simulator : NG-Spice"), ePANE_SIMENG ); } else { m_poNbkSimEng = new NbkGnuCap( this, ID_NBK_ANALYSIS ); m_poPrcSimEng = new PrcGnuCap( ); m_poSimn = &m_oSimnGCap; SetStatusText( wxT(" Simulator : GNU-Cap"), ePANE_SIMENG ); } } //************************************************************************************************** // Initialize the log file names in the process objects. void FrmMain::InitLogFiles( void ) { wxFileName ofn1; wxString os1; // Check that a netlist file has been defined ofn1 = m_oFileTsks.rosGetNetLstFile( ); if( ! ofn1.IsOk( ) ) return; if( ! ofn1.FileExists( ) ) return; // Get the path to the schematic or netlist file os1 = ofn1.GetPath( ) + wxT("/gspiceui.log"); // Set the log file path for the gNetList process object m_oFileTsks.bSetLogFile( os1 ); // Set the log file path for the simulation process object if( m_poPrcSimEng != NULL ) m_poPrcSimEng->bSetLogFile( os1 ); } //************************************************************************************************** // Initialize the frames position amd size. void FrmMain::InitPosnSize( void ) { int ix, iy, iw, ih; // Get the default position and size GetPosition( &ix, &iy ); GetClientSize( &iw, &ih ); // Get the position and size from the configuration object m_poCfg->SetPath( wxT("/Main") ); ix = m_poCfg->Read( wxT("PosnX"), 1 ); iy = m_poCfg->Read( wxT("PosnY"), iy ); iw = m_poCfg->Read( wxT("SizeW"), iw ); ih = m_poCfg->Read( wxT("SizeH"), ih+100 ); // (10/03/2011) ??? Is this line related to the main frame sizing problems when simr. engine changes? // Set the position and size Move( ix, iy ); SetClientSize( iw, ih ); } //************************************************************************************************** // Layout the main frame display objects. void FrmMain::DoLayout( void ) { wxGridBagSizer * poSzr; wxGBPosition oGBPosn; wxGBSpan oGBSpan; int iFlags; int iBorder; size_t sz1; if( GetSizer( ) == NULL ) { // Create and set the frame's sizer (at startup) poSzr = new wxGridBagSizer( 1, 1 ); SetSizer( poSzr ); // Specify how the sizer will grow when resized poSzr->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); poSzr->SetCols( 3 ); poSzr->AddGrowableCol( 0 ); poSzr->AddGrowableCol( 1 ); for( sz1=13; sz1<20; sz1++ ) poSzr->AddGrowableRow( sz1 ); } else { // Detach the display objects from the sizer poSzr = (wxGridBagSizer *) GetSizer( ); poSzr->Detach( &m_oLblNodes ); poSzr->Detach( &m_oLbxNodes ); poSzr->Detach( &m_oLblCpnts ); poSzr->Detach( &m_oLbxCpnts ); poSzr->Detach( m_poNbkSimEng ); poSzr->Detach( &m_oNbkTxtCtls ); poSzr->Clear( ); } iFlags = wxTOP | wxALIGN_CENTER_HORIZONTAL | wxALIGN_TOP; iBorder = 11; // Add the nodes list box label oGBPosn.SetCol( 0 ); oGBPosn.SetRow( 0 ); oGBSpan.SetColspan( 1 ); oGBSpan.SetRowspan( 1 ); poSzr->Add( &m_oLblNodes, oGBPosn, oGBSpan, iFlags, iBorder ); // Add the components list box label oGBPosn.SetCol( 1 ); oGBPosn.SetRow( 0 ); oGBSpan.SetColspan( 1 ); oGBSpan.SetRowspan( 1 ); poSzr->Add( &m_oLblCpnts, oGBPosn, oGBSpan, iFlags, iBorder ); iFlags = (wxALL & ~wxRIGHT) | wxALIGN_CENTER | wxEXPAND; iBorder = 5; // Add the nodes list box oGBPosn.SetCol( 0 ); oGBPosn.SetRow( 1 ); oGBSpan.SetColspan( 1 ); if( m_bIsLayout ) oGBSpan.SetRowspan( 19 ); else oGBSpan.SetRowspan( 12 ); poSzr->Add( &m_oLbxNodes, oGBPosn, oGBSpan, iFlags, iBorder ); // Add the components list box oGBPosn.SetCol( 1 ); oGBPosn.SetRow( 1 ); oGBSpan.SetColspan( 1 ); if( m_bIsLayout ) oGBSpan.SetRowspan( 19 ); else oGBSpan.SetRowspan( 12 ); poSzr->Add( &m_oLbxCpnts, oGBPosn, oGBSpan, iFlags, iBorder ); iFlags = wxALL | wxALIGN_CENTER | wxEXPAND; iBorder = 5; // Add the simulator notebook oGBPosn.SetCol( 2 ); oGBPosn.SetRow( 0 ); oGBSpan.SetColspan( 1 ); oGBSpan.SetRowspan( 13 ); poSzr->Add( m_poNbkSimEng, oGBPosn, oGBSpan, iFlags, iBorder ); #ifndef LAYOUT_MNGR poSzr->SetItemMinSize( m_poNbkSimEng, NBKSIMENG_WIDTH, NBKSIMENG_HEIGHT ); #endif // LAYOUT_MNGR iFlags = (wxALL & ~wxTOP) | wxALIGN_CENTER | wxEXPAND; iBorder = 5; // Add the console notebook oGBPosn.SetRow( 13 ); oGBSpan.SetRowspan( 7 ); if( m_bIsLayout ) { oGBPosn.SetCol( 2 ); oGBSpan.SetColspan( 1 ); } else { oGBPosn.SetCol( 0 ); oGBSpan.SetColspan( 3 ); } poSzr->Add( &m_oNbkTxtCtls, oGBPosn, oGBSpan, iFlags, iBorder ); // Set minimum and initial sizes as calculated by the frame's sizer poSzr->SetSizeHints( this ); } //************************************************************************************************** // Load information from the Simulation object (FrmMain::m_poSimn) into the various display // controls. // // Return Values : // true - Success // false - Failure bool FrmMain::bSimnLoad( void ) { TextCtrl * poTxtCtl; wxArrayString osa1; size_t sz1; // Load all the nodes (except ground) into the "Nodes" list box for( sz1=0; sz1m_osaNodeLbls.GetCount( ); sz1++ ) m_oLbxNodes.Append( m_poSimn->m_osaNodeLbls.Item( sz1 ) ); // Select the test nodes (if any have been specified) for( sz1=0; sz1rosaGetTstNodes( ).GetCount( ); sz1++ ) m_oLbxNodes.SetStringSelection( m_poSimn->rosaGetTstNodes( ).Item( sz1 ) ); // Load all 2-port components into the "Components" list box for( sz1=0; sz1m_oaCpnts.GetCount( ); sz1++ ) { Component & roCpnt = m_poSimn->m_oaCpnts.Item( sz1 ); switch( roCpnt.eGetType( ) ) // Only collect two terminal components { case eCPNT_CAP : // Capacitor case eCPNT_RES : // Resistor case eCPNT_IND : // Inductor case eCPNT_CIND : // Coupled (Mutual) Inductors case eCPNT_DIODE : // Diode case eCPNT_VCVS : // Voltage Controlled Voltage Source case eCPNT_CCCS : // Current Controlled Current Source case eCPNT_VCCS : // Voltage Controlled Current Source case eCPNT_CCVS : // Current Controlled Voltage Source case eCPNT_IVS : // Independent Voltage Source case eCPNT_ICS : // Independent Current Source case eCPNT_NLDS : // Non-Linear Dependent Source case eCPNT_NLDCS : // Non-Linear Dependent Current Source case eCPNT_NLDVS : // Non-Linear Dependent Voltage Source case eCPNT_STJ : // Super-conducting Tunnel Junction osa1.Add( roCpnt.rosGetName( ) ); break; default : // Do nothing break; } } osa1.Sort( &iStrCmpCpnt ); // Function iStrCmpCpnt( ) is defined in utility/StrUtils.hpp if( ! osa1.IsEmpty( ) ) m_oLbxCpnts.InsertItems( osa1, 0 ); // Select the test components (if any have been specified) const wxArrayString & rosa1 = m_poSimn->rosaGetTstCpnts( ); for( sz1=0; sz1bClear( ); for( sz1=0; sz1bAppendLine( m_oNetLst.m_osaNetLst.Item( sz1 ) ); m_oNbkTxtCtls.bSetPosn( 0 ); } // Load the analysis notebook with simulation information if( ! m_poNbkSimEng->bLoad( *m_poSimn ) ) return( false ); // Load the circuit description into the Simulation text control m_oNbkTxtCtls.bSetPage( NbkTxtCtls::ePAGE_SIMULTN ); poTxtCtl = m_oNbkTxtCtls.poGetPage( ); poTxtCtl->bClear( ); for( sz1=0; sz1bAppendLine( m_oNetLst.m_osaNetLst.Item( sz1 ) ); m_oNbkTxtCtls.bSetPosn( 0 ); poTxtCtl->SetEditable( true ); return( true ); } //************************************************************************************************** // Reload information from the Simulation object (FrmMain::m_poSimn) into the various display // controls. // // Return Values : // true - Success // false - Failure bool FrmMain::bSimnReload( void ) { wxArrayString osaTstNodes; wxArrayString osaTstCpnts; size_t sz1; int i1; // Record the nodes that are currently selected #if wxCHECK_VERSION( 2,8,0 ) for( sz1=0; sz1bClrCmds( ); // Get an array of indicies to the currently selected test points m_oLbxNodes.GetSelections( oaiSelNodes ); m_oLbxCpnts.GetSelections( oaiSelCpnts ); // Load the test nodes into the simulation object for( sz1=0; sz1bAddTstNode( osSel ); } // Load the test components into the simulation object for( sz1=0; sz1bAddTstCpnt( osSel ); } // Transfer the simulation parameters into the simulation object if( ! m_poNbkSimEng->bSave( *m_poSimn ) ) return( false ); // Create the simulation information and save it to file if( ! m_poSimn->bSave( ) ) return( false ); if( ! m_poSimn->bSaveFile( ) ) return( false ); return( true ); } //************************************************************************************************** // Check that the electronic circuit simulator engine is present and accounted for, if not display // an error message. // // Argument List : // poPrcSimEng - The utility object to be tested // // Return Values : // true - Success // false - Failure bool FrmMain::bIsOkSimEng( PrcBase * poPrcSimEng ) { wxString os1; // Check that gnetlist exists and is accessible if( ! poPrcSimEng->bBinExists( ) ) { os1 << wxT("Can't find the binary file required to run simulation :\n") << poPrcSimEng->roGetBinary( ).GetFullName( ) << wxT("\nThere is no path to the binary or it hasn't been installed.") << wxT("\n\n"); DlgErrMsg( wxT("ERROR"), os1 ); return( false ); } return( true ); } //************************************************************************************************** // Check that the waveform viewer utility is present and accounted for, if not display an error // message. // // Argument List : // poPrcViewer - The utility object to be tested // // Return Values : // true - Success // false - Failure bool FrmMain::bIsOkViewer( PrcBase * poPrcViewer ) { wxString os1; // Check that the waveform viewer utility exists and is accessible if( ! poPrcViewer->bBinExists( ) ) { os1 << wxT("Can't find the binary file required to plot the simulation ") << wxT("results :\n") << poPrcViewer->roGetBinary( ).GetFullName( ) << wxT("\nThere is no path to the binary or it hasn't been installed.") << wxT("\n\n"); DlgErrMsg( wxT("ERROR"), os1 ); return( false ); } return( true ); } //************************************************************************************************** // Check that a required binary file is present and accounted for, if not display an error message. // // Argument List : // poProcess - The process object to test // rosPurpose - What is the binary needed to do? // // Return Values : // true - Success // false - Failure bool FrmMain::bIsOkBinary( PrcBase * poProcess, const wxString & rosPurpose ) { wxString os1; // Check that the waveform viewer utility exists and is accessible if( ! poProcess->bBinExists( ) ) { os1 << wxT("Can't find the binary file required to ") << rosPurpose << wxT(" :\n") << poProcess->roGetBinary( ).GetFullName( ) << wxT("\nThere is no path to the binary or it hasn't been installed.") << wxT("\n\n"); DlgErrMsg( wxT("ERROR"), os1 ); return( false ); } return( true ); } //************************************************************************************************** // Clear the object attributes. bool FrmMain::bClear( void ) { bool bRtn = true; // Clear all previously selected test points m_oLbxNodes.Clear( ); m_oLbxCpnts.Clear( ); // Clear simulation object attributes m_oSimnGCap.bClear( ); m_oSimnNgSp.bClear( ); // Clear the simulation object and the analysis panels if( m_poNbkSimEng != NULL ) if( ! m_poNbkSimEng->bClear( ) ) bRtn = false; // Clear the text controls if( ! m_oNbkTxtCtls.bClear( ) ) bRtn = false; m_oNbkTxtCtls.bInitialize( ); // Terminate any simulation process if( m_poPrcSimEng != NULL ) if( ! m_poPrcSimEng->bKill( ) ) bRtn = false; // Terminate any schematic editor process if( ! m_oPrc_gschem.bKill( ) ) bRtn = false; // Terminate any waveform viewer process m_poCfg->SetPath( wxT("/Viewer") ); if( m_poCfg->Read( wxT("Name") ) == CLP_GWAVE ) { if( ! m_oPrc_gwave.bKill( ) ) bRtn = false; } else { if( ! m_oPrc_gaw .bKill( ) ) bRtn = false; } return( bRtn ); } //************************************************************************************************** // Display a dialog box containing an error message. // // Note : At start-up the first error message is held over until the the main GUI is created and // displayed; to display this message call this function with no arguments. // // Argument List : // rosTitle - The dialogue box title // rosMsg - The error message void FrmMain::DlgErrMsg( const wxString & rosTitle, const wxString & rosMsg ) { static wxMessageDialog * poDlgMsg=NULL; wxStringTokenizer ostk1; wxString os1, os2, os3; if( poDlgMsg == NULL ) { if( rosTitle.IsEmpty( ) || rosMsg.IsEmpty( ) ) return; // Tokenize the message into lines ostk1.SetString( rosMsg, wxT(" \n\r"), wxTOKEN_STRTOK ); // Use the first complete sentence as the status bar message os1 << wxT(" ERROR :"); while( ostk1.HasMoreTokens( ) ) { // Get the next line os2 = ostk1.GetNextToken( ).Strip( wxString::both ); // Remove the path from file names if( os2.Freq( wxT('/') ) > 1 ) { os3 << os2.AfterLast( wxT('/') ) << wxT(','); os2 = os3; } // Look for the end of the sentence if( os2==wxT('.') || os2==wxT(':') ) break; // Append the line to the message os1 << wxT(' ') << os2; } // If debug mode is enabled send the error message to the console if( g_bDebug ) std::cerr << "DEBUG : " << rosStrToLine( os1 ).mb_str( ) << "\n\n"; // Set the status line message SetStatusText( os1, ePANE_MESAGE ); // Create the error message dialog os1 = wxT('\n') + rosMsg; poDlgMsg = new wxMessageDialog( this, os1, rosTitle, wxOK | wxICON_ERROR ); } if( ! IsShown( ) ) return; // Display the error message dialog poDlgMsg->ShowModal( ); // Delete the error message dialog delete poDlgMsg; poDlgMsg = NULL; } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // Open a circuit description file. // // Argument List : // roEvtCmd - The event to be processed void FrmMain::OnOpen( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { if( ! m_oFileTsks.bDlgOpen( ) ) return; // Attempt to get a netlist file name from the user ::wxBeginBusyCursor( ); // Change the cursor to the wait symbol bClear( ); // Clear the main frame object attributes m_oFileTsks.bOpen( ); // Attempt to open and read the netlist file bSimnLoad( ); // Load the simulation information InitLogFiles( ); // Initialize the process log files ::wxEndBusyCursor( ); // Change the cursor to the default } //************************************************************************************************** // Import a schematic file using gnetlist to convert the schematic to a circuit description. // // Argument List : // roEvtCmd - The event to be processed void FrmMain::OnImport( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { if( ! m_oFileTsks.bDlgImport( ) ) return; // Attempt to get the schematic file name/s from user ::wxBeginBusyCursor( ); // Change the cursor to the wait symbol bClear( ); // Clear the main frame object attributes m_oFileTsks.bImport( ); // Attempt to import schematic/s and read netlist file bSimnLoad( ); // Load the simulation information InitLogFiles( ); // Initialize the process log files ::wxEndBusyCursor( ); // Change the cursor to the default } //************************************************************************************************** // Reload the schematic or netlist file. // // Argument List : // roEvtCmd - The event to be processed void FrmMain::OnReload( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { ::wxBeginBusyCursor( ); // Change the cursor to the wait symbol m_oFileTsks.bReload( ); // Reload schematic file/s and/or the netlist file bSimnReload( ); // Reload the simulation information ::wxEndBusyCursor( ); // Change the cursor to the default } //************************************************************************************************** // Close the circuit description file. // // Argument List : // roEvtCmd - The event to be processed void FrmMain::OnClose( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { m_oFileTsks.bClose( ); // Delete temporary files bClear( ); // Clear the object attributes m_oFileTsks.bSetTitle( ); // Set the frame title m_poNbkSimEng->bSetPage( eCMD_ANA_FST ); // Display first analysis panel } //************************************************************************************************** // Exit the application. // // Argument List : // roEvtCmd - The event to be processed void FrmMain::OnAppExit( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { Close( true ); // Generates a wxCloseEvent which is handled by OnSysExit( ) } //************************************************************************************************** // Create the simulation. // // Argument List : // roEvtCmd - The event to be processed void FrmMain::OnSimCreate( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { TextCtrl * poTxtCtl; wxString os1; ::wxBeginBusyCursor( ); // Change the cursor to the wait symbol if( ! m_oNetLst.m_osaNetLst.IsEmpty( ) ) { // Save the simulation info. in the simulation object if( bSimnSave( ) ) { // Print the simulation to the simulation text control m_oNbkTxtCtls.bSetPage( NbkTxtCtls::ePAGE_SIMULTN ); poTxtCtl = m_oNbkTxtCtls.poGetPage( NbkTxtCtls::ePAGE_SIMULTN ); poTxtCtl->bLoadFile( m_poSimn->roGetSaveFile( ).GetFullPath( ) ); poTxtCtl->SetEditable( true ); } else { if( ! m_poNbkSimEng->bIsOk( ) ) os1 = m_poNbkSimEng->rosGetErrMsg(); else if( ! m_poSimn->bIsValid( ) ) os1 = m_poSimn ->rosGetErrMsg(); else os1 = wxT("Unknown error."); DlgErrMsg( wxT("Create Simulation Error"), os1 ); } } else { // Display an error message dialogue os1 = wxT("There is no netlist loaded."); DlgErrMsg( wxT("Create Simulation Error"), os1 ); } ::wxEndBusyCursor( ); // Change the cursor to the default // Set the status line text if( os1.IsEmpty( ) ) os1 = wxT(" Simulation created successfully"); else os1 = wxT(" Error/s encountered creating simulation"); SetStatusText( os1, ePANE_MESAGE ); } //************************************************************************************************** // Run the simulation. // // Argument List : // roEvtCmd - The event to be processed void FrmMain::OnSimRun( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { TextCtrl * poTxtCtl; NbkTxtCtls::ePageType ePage; wxFileName ofn1; wxString os1; //------------------------------------------------------------------------------------------------ // Check if a schematic or netlist file is currently open ofn1 = m_oFileTsks.rosGetNetLstFile( ); if( ofn1.GetFullPath( ).IsEmpty( ) ) { os1 = wxT("There is no schematic or netlist file currently loaded."); DlgErrMsg( wxT("Run Simulation Error"), os1 ); return; } //------------------------------------------------------------------------------------------------ ::wxBeginBusyCursor( ); // Change cursor to busy symbol GetMenuBar( )->Enable( ID_MNU_STOP, true ); // Enable Stop option GetToolBar( )->EnableTool( ID_TBR_STOP, true ); // Enable Stop tool //------------------------------------------------------------------------------------------------ // Prepare to run the simulation (and update the Simulation text page) poTxtCtl = m_oNbkTxtCtls.poGetPage( NbkTxtCtls::ePAGE_SIMULTN ); if( poTxtCtl->IsModified( ) ) { // Save the simulation in the text page to file, the user has modified it poTxtCtl->SaveFile( m_poSimn->roGetSaveFile( ).GetFullPath( ) ); } else if( bSimnSave( ) ) { // Load the simulation on file into the Simulation text page poTxtCtl->bLoadFile( m_poSimn->roGetSaveFile( ).GetFullPath( ) ); poTxtCtl->DiscardEdits( ); // Reset internal modified flag as if changes had been saved poTxtCtl->SetEditable( true ); // Make the text control editable } else { // There's been an error, report it to the user and return if( ! m_poNbkSimEng->bIsOk( ) ) os1 = m_poNbkSimEng->rosGetErrMsg( ); else if( ! m_poSimn->bIsValid( ) ) os1 = m_poSimn ->rosGetErrMsg( ); else os1 = wxT("Unknown error."); DlgErrMsg( wxT("Run Simulation Error"), os1 ); goto OnSimRun_Exit; } m_oNbkTxtCtls.bSetPage( NbkTxtCtls::ePAGE_SIMULTN ); //------------------------------------------------------------------------------------------------ // Run the simulation (and update the Console text page) if( ! m_poPrcSimEng->bMakeArgLst( *m_poSimn ) ) { DlgErrMsg( wxT( "Run Simulation Error" ), m_poPrcSimEng->rosGetErrMsg( ) ); goto OnSimRun_Exit; } if( ! m_poPrcSimEng->bExec( ) ) { DlgErrMsg( wxT( "Run Simulation Error" ), m_poPrcSimEng->rosGetErrMsg( ) ); goto OnSimRun_Exit; } m_oNbkTxtCtls.bSetPage( NbkTxtCtls::ePAGE_CONSOLE ); poTxtCtl = m_oNbkTxtCtls.poGetPage( NbkTxtCtls::ePAGE_CONSOLE ); poTxtCtl->bClear( ); // Clear the Console text page m_poPrcSimEng->PrintCmd( *poTxtCtl ); // Print simulator cmd to Console page SetStatusText( wxT(" Running the simulation ..."), ePANE_MESAGE ); // Exit immediately if the user aborts the simulation if( GetStatusBar( )->GetStatusText( 1 ).Contains( wxT("aborted") ) ) goto OnSimRun_Exit; m_poPrcSimEng->PrintRsp( *poTxtCtl ); // Print simulator output to Console page //------------------------------------------------------------------------------------------------ // Format the simulation results (and update the Results text page) SetStatusText( wxT(" Formatting the simulation results ..."), ePANE_MESAGE ); ::wxSafeYield( ); if( ! m_poPrcSimEng->bFmtResults( ) ) { DlgErrMsg( wxT( "Run Simulation Error" ), m_poPrcSimEng->rosGetErrMsg( ) ); goto OnSimRun_Exit; } if( m_poNbkSimEng->eGetSimEng( ) == eSIMR_GNUCAP ) ePage = NbkTxtCtls::ePAGE_GNUCAP; else ePage = NbkTxtCtls::ePAGE_NGSPICE; poTxtCtl = m_oNbkTxtCtls.poGetPage( ePage ); os1 = m_poPrcSimEng->roGetResultsFile( ).GetFullPath( ); // Load the simulation output into the results text page if( ! poTxtCtl->bLoadFile( os1 ) ) { os1.Prepend( wxT("Couldn't load the results file : \n\n") ); DlgErrMsg( wxT( "Run Simulation Error" ), os1 ); goto OnSimRun_Exit; } m_oNbkTxtCtls.bSetPage( ePage ); // Change to the appropriate results page //------------------------------------------------------------------------------------------------ SetStatusText( wxT(" Simulation ran successfully"), ePANE_MESAGE ); OnSimRun_Exit: ::wxEndBusyCursor( ); // Change cursor to default symbol GetMenuBar( )->Enable( ID_MNU_STOP, false ); // Disable Stop option GetToolBar( )->EnableTool( ID_TBR_STOP, false ); // Disable Stop tool } //************************************************************************************************** // Stop the simulation. // // Argument List : // roEvtCmd - The event to be processed void FrmMain::OnSimStop( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { if( m_poPrcSimEng->bIsExec( ) ) { m_poPrcSimEng->bKill( ); SetStatusText( wxT(" Simulation aborted by user"), ePANE_MESAGE ); wxMessageDialog oMsgDlg( this, wxT("\nThe simulation has been aborted."), wxT("Run Simulation Event"), wxICON_INFORMATION ); oMsgDlg.ShowModal( ); GetMenuBar( )->Enable( ID_MNU_STOP, false ); GetToolBar( )->EnableTool( ID_TBR_STOP, false ); } } //************************************************************************************************** // Edit / view the schematic file. // // Argument List : // roEvtCmd - The event to be processed void FrmMain::OnSchematic( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { wxString os1; // Check if the schematic editor process is already running if( m_oPrc_gschem.bIsExec( ) ) { os1 = wxT("The schematic editor process is already running."); DlgErrMsg( wxT("Schematic Editor Error"), os1 ); return; } // Check if a schematic file is currently set m_oPrc_gschem.bSetSchems( m_oFileTsks.rosaGetSchemFiles( ) ); if( m_oPrc_gschem.rosGetSchems( ).IsEmpty( ) ) { os1 = wxT("The netlist has no associated schematic file to edit."); DlgErrMsg( wxT("Schematic Editor Error"), os1 ); return; } // Execute the schematic editor process if( ! m_oPrc_gschem.bExec( ) ) // Something went wrong, display an error message DlgErrMsg( os1, m_oPrc_gschem.rosGetErrMsg( ) ); } //************************************************************************************************** // View the simulation results. // // Argument List : // roEvtCmd - The event to be processed void FrmMain::OnViewData( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { wxFileName ofn1; wxString os1 = wxT("Plot Results Error"); wxString os2; // Check if the waveform viewer process is already running if( m_oPrc_gaw.bIsExec( ) || m_oPrc_gwave.bIsExec( ) ) { DlgErrMsg( os1, wxT("The waveform viewer process is already running.") ); return; } // Check if a schematic or netlist file is currently open ofn1 = m_oFileTsks.rosGetNetLstFile( ); if( ofn1.GetFullPath( ).IsEmpty( ) ) { DlgErrMsg( os1, wxT("There is no schematic or netlist file currently loaded.") ); return; } // Create the appropriate name for the results file os2 = ofn1.GetName( ); switch( m_poNbkSimEng->eGetSimEng( ) ) { case eSIMR_GNUCAP : if( m_oNbkTxtCtls.eGetPage( ) == NbkTxtCtls::ePAGE_NGSPICE ) os2 << wxT(".ngspice"); else os2 << wxT(".gnucap"); break; case eSIMR_NGSPICE : if( m_oNbkTxtCtls.eGetPage( ) == NbkTxtCtls::ePAGE_GNUCAP ) os2 << wxT(".gnucap"); else os2 << wxT(".ngspice"); break; default : return; } ofn1.SetName( os2 ); ofn1.SetExt( m_poNbkSimEng->rosGetPage( ) ); // Set the results file in the waveform viewer process if( ! ofn1.FileExists( ) ) { os2.Empty( ); os2 << wxT("The simulation results file :\n\n") << ofn1.GetFullPath( ) << wxT("\n\nhasn't yet been generated."); DlgErrMsg( os1, os2 ); return; } m_oPrc_gaw .bSetResults( ofn1.GetFullPath( ) ); m_oPrc_gwave.bSetResults( ofn1.GetFullPath( ) ); // Execute the waveform viewer process m_poCfg->SetPath( wxT("/Viewer") ); if( m_poCfg->Read( wxT("Name") ) == CLP_GWAVE ) { if( ! m_oPrc_gwave.bExec( ) ) DlgErrMsg( os1, m_oPrc_gwave.rosGetErrMsg( ) ); } else { if( ! m_oPrc_gaw.bExec( ) ) DlgErrMsg( os1, m_oPrc_gaw.rosGetErrMsg( ) ); } } //************************************************************************************************** // Select which simulator to use. // // Argument List : // roEvtCmd - The event to be processed void FrmMain::OnSelSimEng( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { int iw, ih; // Temporarily store the current main frame size GetClientSize( &iw, &ih ); // Change cursor to the wait symbol and hide the GUI while re-constructing it ::wxBeginBusyCursor( ); Show( false ); // Create and display a progress dialog wxProgressDialog oDlgProgress( wxT(" GNU Spice GUI"), wxT("Changing simulation engines ..."), 100, this, wxPD_AUTO_HIDE | wxPD_APP_MODAL | wxPD_SMOOTH ); oDlgProgress.CenterOnParent( ); oDlgProgress.Update( 5 ); ::wxMilliSleep( 250 ); // Record the simulation engine change in the configuration file m_poCfg->SetPath( wxT("/Simulator") ); if( GetMenuBar( )->IsChecked( ID_MNU_GNUCAP ) ) m_poCfg->Write( wxT("Engine"), CLP_GNUCAP ); else m_poCfg->Write( wxT("Engine"), CLP_NGSPICE ); m_poCfg->Flush( ); // Write changes to the configuration file // Update the progress dialog oDlgProgress.Update( 20 ); // Change the simulator InitSimEng( ); // Update the progress dialog oDlgProgress.Update( 50 ); ::wxMilliSleep( 150 ); // Set the simulator process log file name InitLogFiles( ); // Update the progress dialog oDlgProgress.Update( 60 ); ::wxMilliSleep( 150 ); // Update the GUI components DoLayout( ); // Update the progress dialog oDlgProgress.Update( 70 ); ::wxMilliSleep( 150 ); // Transfer info. from one simulation object to the other if( ! m_oNetLst.bIsEmpty( ) ) { if( GetMenuBar( )->IsChecked( ID_MNU_GNUCAP ) ) m_oSimnGCap = m_oSimnNgSp; else m_oSimnNgSp = m_oSimnGCap; } // Update the progress dialog oDlgProgress.Update( 80 ); ::wxMilliSleep( 150 ); // Load the analysis notebook with the simulation values m_poNbkSimEng->bLoad( *m_poSimn ); // Update the progress dialog oDlgProgress.Update( 90 ); ::wxMilliSleep( 150 ); // Restore the frame's original size SetClientSize( iw, ih ); // Update the progress dialog oDlgProgress.Update( 99 ); ::wxMilliSleep( 150 ); oDlgProgress.Update( 100 ); // Kill the progress dialog // Show the GUI again and change the cursor to the default Show( true ); ::wxEndBusyCursor( ); } //************************************************************************************************** // Show the application preferences dialog. // // Argument List : // roEvtCmd - The event to be processed void FrmMain::OnPrefs( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { DlgPrefs oDlgPrefs( this ); wxString os1; oDlgPrefs.CenterOnParent( ); oDlgPrefs.ShowModal( ); if( oDlgPrefs.GetReturnCode( ) == wxID_OK ) { // Set the waveform viewer os1 = wxT(" Viewer : ") + oDlgPrefs.rosGetViewerUtil( ); SetStatusText( os1, ePANE_VIEWER ); // Set the precision of the results values CnvtType::bSetFltRes( oDlgPrefs.iGetPrecision( ) ); // Set the text control maximum lines m_oNbkTxtCtls.bSetLinesMax( oDlgPrefs.iGetNbkMaxLns( ) ); // Set the spin control update rate PnlTxtSpn::bSetSpnPeriod( oDlgPrefs.iGetSpnPeriod( ) ); // Set the state of tooltips wxToolTip::Enable( oDlgPrefs.bGetToolTips( ) ); // Set the main frame layout to be used if( m_bIsLayout != ( oDlgPrefs.iGetFrmLayout( )==0 ? true : false ) ) { m_bIsLayout = ! m_bIsLayout; DoLayout( ); InitPosnSize( ); } // Set the phase angle units to used if( oDlgPrefs.iGetUnitsPhase( ) == 0 ) NbkSimEngBase::bSetUnitsPhase( eUNITS_PHAD ); else NbkSimEngBase::bSetUnitsPhase( eUNITS_PHAR ); // Set the sweep source synchronization flag NbkSimEngBase::SetSyncSwpSrcs( oDlgPrefs.bGetSyncSwpSrcs( ) ); } } //************************************************************************************************** // Display the gSpiceUI user manual. // // Argument List : // roEvtCmd - The event to be processed void FrmMain::OnManualUser( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { m_oHelpTsks.ManualUser( ); } //************************************************************************************************** // Display about message dialog. // // Argument List : // roEvtCmd - The event to be processed void FrmMain::OnAbout( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { m_oHelpTsks.About( ); } //************************************************************************************************** // Change the cursor when a simulation is running and the mouse is over the stop button. // // Argument List : // roEvtCmd - The event to be processed void FrmMain::OnToolEnter( wxCommandEvent & roEvtCmd ) { if( roEvtCmd.GetSelection( ) == ID_TBR_STOP ) { if( m_poPrcSimEng->bIsExec( ) && ::wxIsBusy( ) ) { ::wxEndBusyCursor( ); // Change the cursor to the default ::wxSafeYield( ); // Allow the display to update } } else { if( m_poPrcSimEng->bIsExec( ) && !::wxIsBusy( ) ) { ::wxBeginBusyCursor( ); // Change the cursor to the hour glass ::wxSafeYield( ); // Allow the display to update } } } //************************************************************************************************** // Event handler for system close. // // Argument List : // roEvtClose - The event to be processed void FrmMain::OnSysExit( wxCloseEvent & WXUNUSED( roEvtClose ) ) { wxString os1; int ix, iy, iw, ih; bClear( ); // Kill any processes currently running m_oFileTsks.bExit( ); // Delete temporary files Hide( ); // Hide the main frame while exiting // Save the frame size and position m_poCfg->SetPath( wxT("/Main") ); GetClientSize( &iw, &ih ); GetPosition( &ix, &iy ); m_poCfg->Write( wxT("PosnX"), (long) ix ); m_poCfg->Write( wxT("PosnY"), (long) iy ); m_poCfg->Write( wxT("SizeW"), (long) iw ); m_poCfg->Write( wxT("SizeH"), (long) ih ); m_poCfg->Flush( ); // Record the simulation engine currently selected m_poCfg->SetPath( wxT("/Simulator") ); os1 = m_poPrcSimEng->eGetSimEng( )==eSIMR_GNUCAP ? CLP_GNUCAP : CLP_NGSPICE; m_poCfg->Write( wxT("Engine"), os1 ); // Record the analysis type last used os1 = m_poNbkSimEng->rosGetPage( ); m_poCfg->Write( wxT("Analysis"), os1.Upper( ) ); // Record the waveform veiwer currently selected m_poCfg->SetPath( wxT("/Viewer") ); if( m_poCfg->Read( wxT("Name") ).IsEmpty( ) ) m_poCfg->Write( wxT("Name"), CLP_GWAVE ); m_bIsOpen = false; // Indicate that the main frame has been closed // Destroys the window safely (used instead of the delete operator) Destroy( ); } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/main/DlgPrefs.cpp0000644000000000000000000003704212503760620016752 0ustar rootroot//************************************************************************************************** // DlgPrefs.cpp * // -------------- * // Started : 2006-10-17 * // Last Update : 2015-03-23 * // Copyright : (C) 2006 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "DlgPrefs.hpp" //************************************************************************************************** // Implement an event table. wxBEGIN_EVENT_TABLE( DlgPrefs, wxDialog ) EVT_BUTTON( DlgPrefs::ID_BTN_OK , DlgPrefs::OnBtnOk ) EVT_BUTTON( DlgPrefs::ID_BTN_CANCEL, DlgPrefs::OnBtnCancel ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. // // Argument List: // poWin - A pointer to the dialog parent window DlgPrefs::DlgPrefs( wxWindow * poWin ) : wxDialog( poWin, -1, wxT(""), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE, wxDialogNameStr ) { // Get the global configuration object m_poCfg = (wxConfig *) wxConfig::Get( ); // Construct the display objects Initialize( ); // Clear object attributes bClear( ); } //************************************************************************************************** // Destructor. DlgPrefs::~DlgPrefs( ) { } //************************************************************************************************** // Initialize object attributes. void DlgPrefs::Initialize( void ) { SetTitle( wxT(" Preferences") ); // Call all the initialization functions Create( ); ToolTips( ); // Layout the of the display objects DoLayout( ); } //************************************************************************************************** // Create the display objects. void DlgPrefs::Create( void ) { wxPanel * poPnlPrefs, * poPnlBtns; // wxPanel * poPnlLHS, * poPnlRHS; wxSize oSizeCbx; int iWdName=145, iWdValue=130; // Create the various underlying panel objects poPnlPrefs = new wxPanel( this ); // poPnlLHS = new wxPanel( this ); // poPnlRHS = new wxPanel( this ); poPnlBtns = new wxPanel( this ); // Create the waveform viewer choice control m_oChoViewerUtil.bCreate( poPnlPrefs, ID_CHO_VIEWERUTIL, iWdName, iWdValue ); m_oChoViewerUtil.m_oLblName.SetLabel( wxT("Waveform viewer") ); m_oChoViewerUtil.m_oChoice.Append( CLP_GAW ); m_oChoViewerUtil.m_oChoice.Append( CLP_GWAVE ); // Create the temporary file management strategy choice control m_oChoTmpFileMgt.bCreate( poPnlPrefs, ID_CHO_TMPFILEMGT, iWdName, iWdValue ); m_oChoTmpFileMgt.m_oLblName.SetLabel( wxT("Temporary files") ); m_oChoTmpFileMgt.m_oChoice.Append( wxT("Delete") ); m_oChoTmpFileMgt.m_oChoice.Append( wxT("Prompt") ); m_oChoTmpFileMgt.m_oChoice.Append( wxT("Keep") ); // Create the main frame layout choice control m_oChoFrmLayout.bCreate( poPnlPrefs, ID_CHO_FRMLAYOUT , iWdName, iWdValue ); m_oChoFrmLayout.m_oLblName.SetLabel( wxT("Main frame layout") ); m_oChoFrmLayout.m_oChoice.Append( wxT("Long Probes") ); m_oChoFrmLayout.m_oChoice.Append( wxT("Wide Console") ); // Create the phase / angle units choice control m_oChoUnitsPhase.bCreate( poPnlPrefs, ID_CHO_PHASEUNITS, iWdName, iWdValue ); m_oChoUnitsPhase.m_oLblName.SetLabel( wxT("Phase / angle units") ); m_oChoUnitsPhase.m_oChoice.Append( wxT("Degrees") ); m_oChoUnitsPhase.m_oChoice.Append( wxT("Radians") ); // Create the results precision choice control m_oChoPrecision.bCreate( poPnlPrefs, ID_CHO_PRECISION , iWdName, iWdValue ); m_oChoPrecision.m_oLblName.SetLabel( wxT("Results precision") ); m_oChoPrecision.m_oChoice.Append( wxT("%3.1E") ); m_oChoPrecision.m_oChoice.Append( wxT("%4.2E") ); m_oChoPrecision.m_oChoice.Append( wxT("%5.3E") ); m_oChoPrecision.m_oChoice.Append( wxT("%6.4E") ); m_oChoPrecision.m_oChoice.Append( wxT("%7.5E") ); m_oChoPrecision.m_oChoice.Append( wxT("%8.6E") ); // Create the PnlValue controls m_oPnlNbkMaxLns.bCreate( poPnlPrefs, ID_VAL_NBKMAXLNS , iWdName, iWdValue-45, 45, wxDefaultPosition, PnlValue::eSHOW_LBL ); m_oPnlNbkMaxLns.bSetName( wxT("Max text control size") ); m_oPnlNbkMaxLns.bSetValueType( eVALUE_INT ); m_oPnlNbkMaxLns.bSetDefValue( TXT_LNSDEF ); m_oPnlNbkMaxLns.bSetSpnRange( TXT_LNSMIN, TXT_LNSMAX ); m_oPnlNbkMaxLns.bSetSpnIncSz( 10, 10000 ); m_oPnlNbkMaxLns.bSetUnits( wxT("Lines") ); // Create the PnlValue controls m_oPnlSpnPeriod.bCreate( poPnlPrefs, ID_VAL_SPINPERIOD, iWdName, iWdValue-45, 45, wxDefaultPosition, PnlValue::eSHOW_LBL ); m_oPnlSpnPeriod.bSetName( wxT("Spin control period") ); m_oPnlSpnPeriod.bSetValueType( eVALUE_INT ); m_oPnlSpnPeriod.bSetDefValue( SPN_PERIOD_DEF ); m_oPnlSpnPeriod.bSetSpnRange( SPN_PERIOD_MIN, SPN_PERIOD_MAX ); m_oPnlSpnPeriod.bSetSpnIncSz( 1, 10 ); m_oPnlSpnPeriod.bSetUnits( wxT("mSec") ); // Set height of check box controls according to size of PnlValue object oSizeCbx = m_oPnlNbkMaxLns.GetSize( ); oSizeCbx.SetWidth( 250 ); // Create the synchronize sweep sources check box m_oCbxSyncSwpSrcs.Create( poPnlPrefs, ID_CBX_SYNCSWPSRCS, wxT("Sync sweep sources \t "), wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); // Create the tool tips check box #if wxCHECK_VERSION( 3,0,0 ) m_oCbxToolTips.Create( poPnlPrefs, ID_CBX_TOOLTIPS, wxT("Show tool tips \t\t ") , wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); #else m_oCbxToolTips.Create( poPnlPrefs, ID_CBX_TOOLTIPS, wxT("Show tool tips \t\t\t ") , wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); #endif // Create the application path text controls // m_oTxtGschem .bCreate( poPnlRight, ID_TXT_GSCHEM , 80, 250 ); // m_oTxtGnetlst.bCreate( poPnlRight, ID_TXT_GNETLST, 80, 250 ); // m_oTxtNgspice.bCreate( poPnlRight, ID_TXT_NGSPICE, 80, 250 ); // m_oTxtGnucap .bCreate( poPnlRight, ID_TXT_GNUCAP , 80, 250 ); // m_oTxtGaw .bCreate( poPnlRight, ID_TXT_GAW , 80, 250 ); // m_oTxtGwave .bCreate( poPnlRight, ID_TXT_GWAVE , 80, 250 ); // m_oTxtCalc .bCreate( poPnlRight, ID_TXT_CALC , 80, 250 ); // m_oTxtGschem .m_oLblName.SetLabel( wxT("Gschem") ); // m_oTxtGnetlst.m_oLblName.SetLabel( wxT("Gnetlist") ); // m_oTxtNgspice.m_oLblName.SetLabel( wxT("NG-Spice") ); // m_oTxtGnucap .m_oLblName.SetLabel( wxT("GNU-Cap") ); // m_oTxtGaw .m_oLblName.SetLabel( wxT("Gaw") ); // m_oTxtGwave .m_oLblName.SetLabel( wxT("Gwave") ); // m_oTxtCalc .m_oLblName.SetLabel( wxT("Calculator") ); // Create the buttons m_oBtnOk .Create( poPnlBtns, ID_BTN_OK, wxT("OK") ); m_oBtnCancel.Create( poPnlBtns, ID_BTN_CANCEL, wxT("Cancel") ); } //************************************************************************************************** // Initialize the tool tips. void DlgPrefs::ToolTips( void ) { m_oChoViewerUtil .SetToolTip( wxT("Select the waveform viewing utility") ); m_oChoTmpFileMgt .SetToolTip( wxT("The temporary file management strategy to be used") ); m_oChoFrmLayout .SetToolTip( wxT("The main frame layout to be used") ); m_oChoUnitsPhase .SetToolTip( wxT("The phase / angle units to be used") ); m_oChoPrecision .SetToolTip( wxT("Select the precision of the analysis results") ); m_oPnlNbkMaxLns .SetToolTip( wxT("The maximum number of lines that can be displayed in a text control") ); m_oPnlSpnPeriod .SetToolTip( wxT("The period between successive spin button control updates") ); m_oCbxSyncSwpSrcs.SetToolTip( wxT("Enable or disable synchronization of sweep sources") ); m_oCbxToolTips .SetToolTip( wxT("Enable or disable tool tips") ); //m_oTxtGschem .SetToolTip( wxT("The path to the binary for gschem (schematic capture application)") ); //m_oTxtGnetlst .SetToolTip( wxT("The path to the binary for gnetlist (schematic to netlist converter)") ); //m_oTxtNgspice .SetToolTip( wxT("The path to the binary for NG-Spice (simulation engine)") ); //m_oTxtGnucap .SetToolTip( wxT("The path to the binary for GNU-Cap (simulation engine)") ); //m_oTxtGaw .SetToolTip( wxT("The path to the binary for Gaw (waveform viewer)") ); //m_oTxtGwave .SetToolTip( wxT("The path to the binary for Gwave (waveform viewer)") ); //m_oTxtCalc .SetToolTip( wxT("The path to the binary for the calculator utility") ); } //************************************************************************************************** // Layout the display objects within the dialog. void DlgPrefs::DoLayout( void ) { wxBoxSizer * poSzrDlg; wxPanel * poPnlPrefs, * poPnlBtns; wxBoxSizer * poSzrPrefs, * poSzrBtns; wxSizerFlags oFlags; // Get pointers to the various panels poPnlPrefs = (wxPanel *) m_oPnlNbkMaxLns .GetParent( ); poPnlBtns = (wxPanel *) m_oBtnOk .GetParent( ); // Create sizers to associate with the panels poSzrDlg = new wxBoxSizer ( wxVERTICAL ); poSzrPrefs = new wxStaticBoxSizer( wxVERTICAL, poPnlPrefs, wxT("") ); poSzrBtns = new wxBoxSizer ( wxHORIZONTAL ); // Set the sizers to the panels SetSizer( poSzrDlg ); poPnlPrefs->SetSizer( poSzrPrefs ); poPnlBtns ->SetSizer( poSzrBtns ); // Layout the preferences controls oFlags.Align( wxALIGN_LEFT ); oFlags.Border( wxLEFT | wxRIGHT | wxTOP, 10 ); poSzrPrefs->Add( &m_oChoViewerUtil , oFlags ); oFlags.Border( wxLEFT , 10 ); poSzrPrefs->Add( &m_oChoTmpFileMgt , oFlags ); poSzrPrefs->Add( &m_oChoFrmLayout , oFlags ); poSzrPrefs->Add( &m_oChoUnitsPhase , oFlags ); poSzrPrefs->Add( &m_oChoPrecision , oFlags ); poSzrPrefs->Add( &m_oPnlNbkMaxLns , oFlags ); poSzrPrefs->Add( &m_oPnlSpnPeriod , oFlags ); oFlags.Border( wxLEFT , 7 ); poSzrPrefs->Add( &m_oCbxSyncSwpSrcs, oFlags ); oFlags.Border( wxLEFT | wxBOTTOM , 7 ); poSzrPrefs->Add( &m_oCbxToolTips , oFlags ); // Layout the buttons oFlags.Border( wxTOP | wxBOTTOM, 10 ); oFlags.Align( wxALIGN_RIGHT ); poSzrBtns->Add( &m_oBtnOk , oFlags ); poSzrBtns->AddSpacer( 10 ); oFlags.Align( wxALIGN_LEFT ); poSzrBtns->Add( &m_oBtnCancel, oFlags ); // Layout the underlying dialog oFlags.Border( wxALL, 15 ); poSzrDlg->Add( poPnlPrefs, oFlags ); oFlags.Align( wxALIGN_CENTER ); oFlags.Border( wxBOTTOM, 15 ); poSzrDlg->Add( poPnlBtns , oFlags ); // Set dialogues minimum size and initial size as calculated by the sizer poSzrPrefs->SetSizeHints( poPnlPrefs ); poSzrBtns ->SetSizeHints( poPnlBtns ); poSzrDlg ->SetSizeHints( this ); } //************************************************************************************************** // Load the values into the display controls from the configuration file. void DlgPrefs::Load( void ) { wxString os1; long li1; SetEvtHandlerEnabled( false ); m_poCfg->SetPath( wxT("/Viewer") ); m_poCfg->Read( wxT("Name"), &os1, CLP_GWAVE ); for( li1=0; (uint)li1SetPath( wxT("/Main") ); m_poCfg->Read( wxT("TmpFileMgt") , &li1, eTFM_DELETE ); m_oChoTmpFileMgt .m_oChoice.SetSelection( li1 ); m_poCfg->Read( wxT("MainFrmLayout"), &li1, 0 ); m_oChoFrmLayout .m_oChoice.SetSelection( li1 ); m_poCfg->Read( wxT("Precision") , &li1, CNVT_DEF_FLT_RES ); m_oChoPrecision .m_oChoice.SetSelection( li1-1 ); m_poCfg->Read( wxT("NbkMaxLns") , &li1, TXT_LNSDEF ); m_oPnlNbkMaxLns .bSetValue( li1 ); m_poCfg->Read( wxT("SpnPeriod") , &li1, SPN_PERIOD_DEF ); m_oPnlSpnPeriod .bSetValue( double( li1 ), -3 ); m_poCfg->Read( wxT("ToolTips") , &li1, 0 ); m_oCbxToolTips .SetValue( li1 != 0 ? true : false ); // m_poCfg->Read( wxT("TipDelay") , &li1, 0 ); // ??? MSW 2015-03-23 // m_oPnlTipDelay .bSetValue( li1 ); m_poCfg->SetPath( wxT("/Simulator") ); m_poCfg->Read( wxT("PhaseUnits") , &li1, 0 ); m_oChoUnitsPhase .m_oChoice.SetSelection( li1 ); m_poCfg->Read( wxT("SyncSwpSrcs") , &li1, 0 ); m_oCbxSyncSwpSrcs.SetValue( li1 != 0 ? true : false ); SetEvtHandlerEnabled( true ); } //************************************************************************************************** // Save the values in the display controls in the configuration file. void DlgPrefs::Save( void ) { SetEvtHandlerEnabled( false ); m_poCfg->SetPath( wxT("/Viewer") ); m_poCfg->Write( wxT("Name") , rosGetViewerUtil( ) ); m_poCfg->SetPath( wxT("/Main") ); m_poCfg->Write( wxT("TmpFileMgt") , (long) iGetTmpFileMgt( ) ); m_poCfg->Write( wxT("MainFrmLayout"), (long) iGetFrmLayout( ) ); m_poCfg->Write( wxT("Precision") , (long) iGetPrecision( ) ); m_poCfg->Write( wxT("NbkMaxLns") , (long) iGetNbkMaxLns( ) ); m_poCfg->Write( wxT("SpnPeriod") , (long) iGetSpnPeriod( ) ); m_poCfg->Write( wxT("ToolTips") , (long) ( bGetToolTips( ) ? 1 : 0 ) ); // m_poCfg->Write( wxT("TipDelay") , (long) iGetTipDelay( ) ); // ??? MSW 2015-03-23 m_poCfg->SetPath( wxT("/Simulator") ); m_poCfg->Write( wxT("PhaseUnits") , (long) iGetUnitsPhase( ) ); m_poCfg->Write( wxT("SyncSwpSrcs") , (long) ( bGetSyncSwpSrcs( ) ? 1 : 0 ) ); m_poCfg->Flush( ); SetEvtHandlerEnabled( true ); } //************************************************************************************************** // Reset all dialog settings to defaults. // // Return Values: // true - Success // false - Failure bool DlgPrefs::bClear( void ) { Load( ); return( true ); } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // Ok button event handler. // // Argument List: // roEvtCmd - An object holding information about the event (not used) void DlgPrefs::OnBtnOk( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { Save( ); EndModal( wxID_OK ); } //************************************************************************************************** // Cancel button event handler. // // Argument List: // roEvtCmd - An object holding information about the event (not used) void DlgPrefs::OnBtnCancel( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { Load( ); EndModal( wxID_CANCEL ); } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/main/FrmMain.hpp0000644000000000000000000001654512506660271016613 0ustar rootroot//************************************************************************************************** // FrmMain.hpp * // ------------- * // Description : The main frame used to contain the applications display objects. * // Started : 2003-08-18 * // Last Update : 2015-04-01 * // Copyright : (C) 2003 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef FRMMAIN_HPP #define FRMMAIN_HPP // Application Includes #include "TypeDefs.hpp" #include "main/FileTasks.hpp" #include "main/HelpTasks.hpp" #include "main/NbkTxtCtls.hpp" #include "main/DlgPrefs.hpp" #include "netlist/NetList.hpp" #include "netlist/SimnNgSpice.hpp" #include "netlist/SimnGnuCap.hpp" #include "process/PrcGSchem.hpp" #include "process/PrcNgSpice.hpp" #include "process/PrcGnuCap.hpp" #include "process/PrcGaw.hpp" #include "process/PrcGWave.hpp" #include "gnucap/NbkGnuCap.hpp" #include "ngspice/NbkNgSpice.hpp" // wxWidgets Includes #include #include #include #include #include #include //************************************************************************************************** class FrmMain : public wxFrame { private : // Define an enumerated type for the different status bar panes enum ePaneType { ePANE_MESAGE = 0, ePANE_SIMENG = 1, ePANE_VIEWER = 2, ePANE_LAST = ePANE_VIEWER }; // Object attributes bool m_bIsOpen; // Flag indicating when the frame has closed bool m_bIsLayout; // Flag indicating which main frame layout to use wxConfig * m_poCfg; // Pointer to the configuration object const wxApp * m_poApp; // Pointer to the frames parent application FileTasks m_oFileTsks; // Class to handler file operations HelpTasks m_oHelpTsks; // Class to handler help operations NetList m_oNetLst; // The netlist object SimnNgSpice m_oSimnNgSp; // NG-Spice simulation object SimnGnuCap m_oSimnGCap; // GNU-Cap simulation object SimnBase * m_poSimn; // A pointer to the simulation object PrcSimEngBase * m_poPrcSimEng; // Pointer to the simulator engine process PrcGSchem m_oPrc_gschem; // Process object to schematic capture PrcGaw m_oPrc_gaw; // Process object to view simulation results PrcGWave m_oPrc_gwave; // Process object to view simulation results // Display control objects NbkSimEngBase * m_poNbkSimEng; // Pointer to the simulation engine notebook wxLabel m_oLblNodes; // Label above the test nodes list wxListBox m_oLbxNodes; // List of possible test nodes wxLabel m_oLblCpnts; // Label above the test components list wxListBox m_oLbxCpnts; // List of possible test components NbkTxtCtls m_oNbkTxtCtls; // Notebook containing the text controls // Object initialization functions void Initialize ( void ); void InitMenuBar ( void ); void InitToolBar ( void ); void InitLstBoxs ( void ); void InitNbkTCtls( void ); void InitStatBar ( void ); void InitToolTips( void ); void InitSimEng ( void ); void InitLogFiles( void ); void InitPosnSize( void ); void DoLayout ( void ); // Read / write simulation information from / to file bool bSimnLoad ( void ); bool bSimnReload( void ); bool bSimnSave ( void ); // Check that helper utilities are present & accounted for bool bIsOkSimEng( PrcBase * poPrcSimEng ); bool bIsOkViewer( PrcBase * poPrcViewer ); bool bIsOkBinary( PrcBase * poProcess, const wxString & rosPurpose ); public : FrmMain( const wxApp * poApp=NULL ); ~FrmMain( ); bool bIsOpen( void ) { return( m_bIsOpen ); } bool bClear( void ); // Clear the object attributes void DlgErrMsg( const wxString & rosTitle=wxT(""), const wxString & rosMsg=wxT("") ); private : // Event handlers void OnOpen ( wxCommandEvent & roEvtCmd ); void OnImport ( wxCommandEvent & roEvtCmd ); void OnReload ( wxCommandEvent & roEvtCmd ); void OnClose ( wxCommandEvent & roEvtCmd ); void OnAppExit ( wxCommandEvent & roEvtCmd ); void OnSimCreate ( wxCommandEvent & roEvtCmd ); void OnSimRun ( wxCommandEvent & roEvtCmd ); void OnSimStop ( wxCommandEvent & roEvtCmd ); void OnSchematic ( wxCommandEvent & roEvtCmd ); void OnViewData ( wxCommandEvent & roEvtCmd ); void OnSelSimEng ( wxCommandEvent & roEvtCmd ); void OnPrefs ( wxCommandEvent & roEvtCmd ); void OnManualUser( wxCommandEvent & roEvtCmd ); void OnManualNGSP( wxCommandEvent & WXUNUSED( roEvtCmd ) ) {} // Not yet implemented ??? void OnManualGCAP( wxCommandEvent & WXUNUSED( roEvtCmd ) ) {} // Not yet implemented ??? void OnAbout ( wxCommandEvent & roEvtCmd ); void OnToolEnter ( wxCommandEvent & roEvtCmd ); void OnSysExit ( wxCloseEvent & roEvtClose ); friend class FileTasks; // In order to be able to react to a menu command, it must be given a // unique identifier such as a const or an enum. enum eFrmItemID { ID_MNU_OPEN = 1, ID_MNU_IMPORT, ID_MNU_RELOAD, ID_MNU_CLOSE, ID_MNU_EXIT, ID_MNU_CREATE, ID_MNU_RUN, ID_MNU_STOP, ID_MNU_SCHEM, ID_MNU_VIEWER, ID_MNU_NGSPICE, ID_MNU_GNUCAP, ID_MNU_PREFS, ID_MNU_MAN_USER, ID_MNU_MAN_NGSP, ID_MNU_MAN_GCAP, ID_MNU_ABOUT, ID_TOOLBAR, ID_TBR_OPEN, ID_TBR_IMPORT, ID_TBR_RELOAD, ID_TBR_CLOSE, ID_TBR_CREATE, ID_TBR_RUN, ID_TBR_STOP, ID_TBR_SCHEM, ID_TBR_VIEWER, ID_TBR_HELP, ID_LBX_NODES, ID_LBX_CPNTS, ID_NBK_ANALYSIS, ID_NBK_TXTCTRLS, ID_UNUSED, // Assigned to controls for which events are not used ID_FST = ID_MNU_OPEN, ID_LST = ID_NBK_TXTCTRLS }; // Leave this as the last line as private access is envoked by this macro wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // FRMMAIN_HPP gspiceui-1.1.00+dfsg/src/main/DlgPrefs.hpp0000644000000000000000000001343112514475365016766 0ustar rootroot//************************************************************************************************** // DlgPrefs.hpp * // -------------- * // Description : This dialogue is used to enter applications preferences. * // Started : 2006-10-17 * // Last Update : 2015-04-18 * // Copyright : (C) 2006 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef DLGPREFS_HPP #define DLGPREFS_HPP // Application Includes #include "TypeDefs.hpp" #include "CmdLinePcr.hpp" #include "utility/PnlValue.hpp" #include "utility/TextCtrl.hpp" #include "utility/PnlLblCho.hpp" #include "utility/PnlLblTxt.hpp" #include "utility/PnlTxtSpn.hpp" // wxWidgets Includes #include //************************************************************************************************** class DlgPrefs : public wxDialog { private : // Pointer to global configuration object wxConfig * m_poCfg; // Display controls PnlLblCho m_oChoViewerUtil; PnlLblCho m_oChoTmpFileMgt; PnlLblCho m_oChoFrmLayout; PnlLblCho m_oChoUnitsPhase; PnlLblCho m_oChoPrecision; PnlValue m_oPnlNbkMaxLns; PnlValue m_oPnlSpnPeriod; // PnlLblCho m_oPnlTipDelay; // ??? MSW 2015-03-23 Tool tip delay wxCheckBox m_oCbxToolTips; wxCheckBox m_oCbxSyncSwpSrcs; // wxCheckBox m_oCbxSubcktCpnts; // ??? MSW 2015-04-18 Include sub-circuit components in Components list // PnlLblTxt m_oTxtBinGschem; // ??? MSW 2014-03-11 Allow binary names to be specified // PnlLblTxt m_oTxtBinGnetlst; // PnlLblTxt m_oTxtBinNgspice; // PnlLblTxt m_oTxtBinGnucap; // PnlLblTxt m_oTxtBinGaw; // PnlLblTxt m_oTxtBinGwave; // PnlLblTxt m_oTxtBinCalc; // PnlLblTxt m_oTxtDocNgSpice; // PnlLblTxt m_oTxtDocGnuCap; // Button controls wxButton m_oBtnOk; wxButton m_oBtnCancel; // Object initialization functions void Initialize( void ); void Create ( void ); void ToolTips ( void ); void DoLayout ( void ); void Load( void ); void Save( void ); public : DlgPrefs( wxWindow * poWin ); ~DlgPrefs( ); bool bClear( void ); const wxString rosGetViewerUtil ( void ) { return( m_oChoViewerUtil.m_oChoice.GetStringSelection() ); } int iGetTmpFileMgt ( void ) { return( m_oChoTmpFileMgt.m_oChoice.GetSelection( ) ); } int iGetFrmLayout ( void ) { return( m_oChoFrmLayout .m_oChoice.GetSelection( ) ); } int iGetUnitsPhase ( void ) { return( m_oChoUnitsPhase.m_oChoice.GetSelection( ) ); } int iGetPrecision ( void ) { return( m_oChoPrecision .m_oChoice.GetSelection( ) + 1 ); } int iGetNbkMaxLns ( void ) { return( (int) m_oPnlNbkMaxLns.liGetValue( ) ); } int iGetSpnPeriod ( void ) { return( (int) (1000.0 * m_oPnlSpnPeriod.dfGetValue( )) ); } // int iGetTipDelay ( void ) // ??? MSW 2015-03-23 // { return( m_oPnlTipDelay .liGetValue( ) ); } bool bGetSyncSwpSrcs( void ) { return( m_oCbxSyncSwpSrcs.IsChecked( ) ); } bool bGetToolTips ( void ) { return( m_oCbxToolTips .IsChecked( ) ); } private : // Event handlers void OnBtnOk ( wxCommandEvent & roEvtCmd ); void OnBtnCancel( wxCommandEvent & roEvtCmd ); friend class FrmMain; // In order to be able to react to a menu command, it must be given a unique identifier such as // a const or an enum. enum eDlgItemID { ID_CHO_SIMENG, ID_CHO_VIEWERUTIL, ID_CHO_TMPFILEMGT, ID_CHO_FRMLAYOUT, ID_CHO_PHASEUNITS, ID_CHO_PRECISION, ID_VAL_NBKMAXLNS, ID_VAL_SPINPERIOD, // ID_VAL_TIPDELAY, // ??? MSW 2015-03-23 ID_CBX_SYNCSWPSRCS, ID_CBX_TOOLTIPS, ID_TXT_GSCHEM, ID_TXT_GNETLST, ID_TXT_NGSPICE, ID_TXT_GNUCAP, ID_TXT_GAW, ID_TXT_GWAVE, ID_TXT_CALC, ID_BTN_OK, ID_BTN_CANCEL, ID_UNUSED, // Assigned to controls for which events are not used ID_FST = ID_CHO_SIMENG, ID_LST = ID_BTN_CANCEL }; // Leave this as the last line as private access is envoked by macro wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // DLGPREFS_HPP gspiceui-1.1.00+dfsg/src/main/FileTasks.cpp0000644000000000000000000006015412511462727017137 0ustar rootroot//************************************************************************************************** // FileTasks.cpp * // --------------- * // Started : 2005-05-28 * // Last Update : 2015-04-09 * // Copyright : (C) 2005 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "FileTasks.hpp" #include "FrmMain.hpp" //************************************************************************************************** // Constructor. // // Argument List : // poFrmMain - A pointer to the parent frame FileTasks::FileTasks( FrmMain * poFrmMain ) { // Set the pointer to the parent frame m_poFrmMain = poFrmMain; // Get the global configuration object m_poCfg = (wxConfig *) wxConfig::Get( ); } //************************************************************************************************** // Destructor. FileTasks::~FileTasks( ) { } //************************************************************************************************** // Execute the schematic import process. // // Return Values : // true - Success // false - Failure bool FileTasks::bExecImport( void ) { bool bRtn; TextCtrl * poTxtCtl; // Display the console page m_poFrmMain->m_oNbkTxtCtls.bSetPage( NbkTxtCtls::ePAGE_CONSOLE ); // Convert the schematic file/s to a netlist file bRtn = m_oPrcGNetList.bExec( ); // Print the results poTxtCtl = m_poFrmMain->m_oNbkTxtCtls.poGetPage( ); m_oPrcGNetList.Print( *poTxtCtl ); // Check for errors in the gnetlist output if( poTxtCtl->GetValue( ).Contains( wxT("ERROR") ) ) bRtn = false; if( poTxtCtl->GetValue( ).Contains( wxT("Backtrace") ) ) bRtn = false; // Delete the process log file m_oPrcGNetList.bDelLogFile( ); return( bRtn ); } //************************************************************************************************** // Initialize the Guile procedure name to be used by gnetlist when importing schematic files. void FileTasks::InitGuileProc( void ) { wxString os1; // Set the Guile procedure name m_poCfg->SetPath( wxT("/gnetlist") ); os1 = m_poCfg->Read( wxT("GuileProc"), wxT("spice-sdb") ); bSetGuileProc( os1 ); } //************************************************************************************************** // Initialize the schematic file name/s. void FileTasks::InitSchemFiles( void ) { wxString os1; // Get the schematic file name/s m_poCfg->SetPath( wxT("/Files") ); os1 = m_poCfg->Read( wxT("Schematics"), wxT("") ); if( os1.IsEmpty( ) ) return; // Set the schematic file name/s if( ! bSetSchemFiles( os1 ) ) return; // Return if a netlist file has also been specified os1 = m_poCfg->Read( wxT("NetList"), wxT("") ); if( ! os1.IsEmpty( ) ) return; // Import the schematic file/s bImport( ); } //************************************************************************************************** // Initialize the netlist file name. void FileTasks::InitNetLstFile( void ) { wxString os1; // Return if a netlist file has already been loaded if( ! m_poFrmMain->m_oNetLst.bIsEmpty( ) ) return; // Get the netlist file name m_poCfg->SetPath( wxT("/Files") ); os1 = m_poCfg->Read( wxT("NetList"), wxT("") ); if( os1.IsEmpty( ) ) return; // Set the netlist file name if( ! bSetNetLstFile( os1 ) ) return; // Open the netlist file bOpen( ); // Does the netlist file contain simulator specific information? m_poCfg->SetPath( wxT("/Simulator") ); if( m_poFrmMain->m_oSimnNgSp.m_oCmdPR.bIsValid( ) ) { m_poCfg->Write( wxT("Engine"), CLP_NGSPICE ); m_poFrmMain->m_oSimnGCap = m_poFrmMain->m_oSimnNgSp; } else if( m_poFrmMain->m_oSimnGCap.m_oCmdPR.bIsValid( ) ) { m_poCfg->Write( wxT("Engine"), CLP_GNUCAP ); m_poFrmMain->m_oSimnNgSp = m_poFrmMain->m_oSimnGCap; } } //************************************************************************************************** // Display a error message dialog when schematic file/s can't be imported. void FileTasks::DlgErrSchems( void ) { wxString os1, os2, os3; size_t sz1; for( sz1=0; sz1 1 ) os3 = wxT("s were"); else os3 = wxT(" was"); os1 << wxT("The schematic file") << os3 << wxT("n't converted to a netlist correctly :\n") << wxT("\n") << os2 << wxT("\n") << wxT("This is usually because gnetlist encountered problem/s\n") << wxT("while attempting to convert the schematic file/s to a netlist. \n") << wxT("Try examining the Console output to determine where the\n") << wxT("problem/s occurred.\n"); m_poFrmMain->DlgErrMsg( wxT("Import Schematic/s Error"), os1 ); } //************************************************************************************************** // Display a error message dialog when a netlist file can't be loaded. void FileTasks::DlgErrNetLst( void ) { wxString os1; os1 << wxT("The netlist file wasn't loaded correctly :\n") << wxT("\n ") << m_oPrcGNetList.rofnGetNetLstFile( ).GetFullPath( ) << wxT("\n\n") << wxT("This is often because the file is in-complete, empty or \n") << wxT("doesn't exist.\n"); m_poFrmMain->DlgErrMsg( wxT("Netlist File Error"), os1 ); } //************************************************************************************************** // Do initialization tasks. void FileTasks::Initialize( void ) { InitGuileProc ( ); InitSchemFiles( ); InitNetLstFile( ); } //************************************************************************************************** // Check that the gnetlist binary can be found, if not display an error message. // // Return Values : // true - Success // false - Failure bool FileTasks::bIsOk_gnetlist( void ) { wxString os1; // Check that gnetlist exists and is accessible if( ! m_oPrcGNetList.bBinExists( ) ) { if( m_poFrmMain != NULL ) { os1 << wxT("Can't find the binary \"") << m_oPrcGNetList.roGetBinary( ).GetFullName( ) << wxT("\" which is required\n") << wxT("to import schematic file/s. The path is unknown \n") << wxT("or gnetlist hasn't been installed.\n"); m_poFrmMain->DlgErrMsg( wxT("gnetlist Error"), os1 ); } return( false ); } return( true ); } //************************************************************************************************** // Set the application main frame title. // // Return Values : // true - Success // false - Failure bool FileTasks::bSetTitle( void ) { wxFileName ofn1; wxString os1; if( m_poFrmMain == NULL ) return( false ); // Create the title line os1 << wxT(" ") << APP_NAME; if( ! rosGetNetLstFile( ).IsEmpty( ) ) { ofn1 = rosGetNetLstFile( ); if( ! ofn1.IsAbsolute( ) ) ofn1.MakeAbsolute( ); if( ofn1.GetFullPath( ).StartsWith( ofn1.GetHomeDir( ) ) ) ofn1.MakeRelativeTo( ofn1.GetHomeDir( ) ); os1 << wxT(" - "); if( ! ofn1.IsAbsolute( ) ) os1 << wxT("~/"); os1 << ofn1.GetFullPath( ); } // Set the main frames title line m_poFrmMain->wxFrame::SetTitle( os1 ); return( true ); } //************************************************************************************************** // Set a Guile procedure name to be used for importing schematic files using gNetList. // // Argument List : // rosPName - The Guile procedure name // (Refer to gNetList documentation for list of procedure names) bool FileTasks::bSetGuileProc( const wxString & rosPName ) { if( ! m_oPrcGNetList.bSetGuileProc( rosPName ) ) return( false ); // Record the Guile procedure name currently selected m_poCfg->SetPath( wxT("/gNetList") ); m_poCfg->Write( wxT("GuileProc"), rosGetGuileProc( ) ); // Write any changes to the configuration file m_poCfg->Flush( ); return( true ); } //************************************************************************************************** // Set the schematic file name/s. // // Argument List : // rosFNames - A string containing the full path and file name/s // // Return Values : // true - Success // false - Failure bool FileTasks::bSetSchemFiles( const wxString & rosFNames ) { wxString os1; size_t sz1; if( rosFNames.IsEmpty( ) ) { // Clear the schematic file name/s in the configuration object m_poCfg->SetPath( wxT("/Files") ); m_poCfg->Write( wxT("Schematics"), os1 ); m_poCfg->Flush( ); } // Attempt to set the schematic file name/s in the gnetlist process object if( ! m_oPrcGNetList.bSetSchemFiles( rosFNames ) ) return( false ); // Set the schematic file name/s if( m_poFrmMain != NULL ) m_poFrmMain->m_oNetLst.bSetSchemFiles( rosFNames ); // Record the schematic file name/s in the configuration object const wxArrayString & rosa1=rosaGetSchemFiles( ); for( sz1=0; sz1 0 ) os1 += wxT(' '); os1 += rosa1[ sz1 ]; } m_poCfg->SetPath( wxT("/Files") ); m_poCfg->Write( wxT("Schematics"), os1 ); m_poCfg->Flush( ); return( true ); } //************************************************************************************************** // Set the netlist file name. // // Argument List : // psFileName - A string containing the full path and file name // // Return Values : // true - Success // false - Failure bool FileTasks::bSetNetLstFile( const wxString & rosFName ) { wxString os1; if( rosFName.IsEmpty( ) ) { // Clear the netlist file name in the configuration object m_poCfg->SetPath( wxT("/Files") ); m_poCfg->Write( wxT("NetList"), os1 ); m_poCfg->Flush( ); } // Attempt to set the netlist file name in the gNetList process object if( ! m_oPrcGNetList.bSetNetLstFile( rosFName ) ) return( false ); // Configure stuff in the main frame if( m_poFrmMain != NULL ) { m_poFrmMain->m_oNetLst.bSetLoadFile( rosFName ); // Set load file path m_poFrmMain->m_oNetLst.bSetSaveFile( rosFName ); // Set save file path } // Record the netlist file name in the configuration object os1 = rosGetNetLstFile( ); m_poCfg->SetPath( wxT("/Files") ); m_poCfg->Write( wxT("NetList"), os1 ); m_poCfg->Flush( ); return( true ); } //************************************************************************************************** // Get the currently selected Guile procedure. // // Return Values : // The currently selected Guile procedure const wxString & FileTasks::rosGetGuileProc( void ) { return( m_oPrcGNetList.rosGetGuileProc( ) ); } //************************************************************************************************** // Get an array containing the schematic file name/s. // // Return Values : // An array of schematic file names const wxArrayString & FileTasks::rosaGetSchemFiles( void ) { static wxArrayString osa1; wxString os1; size_t szt1; osa1.Clear( ); for( szt1=0; szt1SetPath( wxT("/Directories") ); os2 = m_poCfg->Read( wxT("LastAccess"), wxGetHomeDir( ) ); // Set the style bit pattern #if wxCHECK_VERSION( 2,8,0 ) li1 = wxFD_OPEN | wxFD_CHANGE_DIR | wxFD_FILE_MUST_EXIST; #else li1 = wxOPEN | wxCHANGE_DIR | wxFILE_MUST_EXIST; #endif // Create and configure the file open dialog poDlgOpen = new wxFileDialog( m_poFrmMain, wxT(""), wxT(""), wxT(""), wxT(""), li1 ); poDlgOpen->SetMessage( wxT("Open a Circuit Description File") ); poDlgOpen->SetWildcard( os1 ); poDlgOpen->SetFilterIndex( 1 ); poDlgOpen->SetDirectory( os2 ); // Display file open dialog if( poDlgOpen->ShowModal( ) != wxID_OK ) return( false ); // Delete temporary files bDelTmpFiles( ); // Set the netlist file name os1 = poDlgOpen->GetPath( ); if( ! bSetNetLstFile( os1 ) ) return( false ); // Set the path last accessed in the global configuration object m_poCfg->SetPath( wxT("/Directories") ); m_poCfg->Write( wxT("LastAccess"), poDlgOpen->GetDirectory( ) ); m_poCfg->Flush( ); return( true ); } //************************************************************************************************** // Display an import file/s dialog and set the schematic file name/s. // // Return Values : // true - Success // false - Failure bool FileTasks::bDlgImport( void ) { wxFileDialog * poDlgImport; wxArrayString osa1; wxString os1, os2; long li1; size_t sz1; // Can't display dialogue unless the application main frame has been created if( m_poFrmMain == NULL ) return( false ); // Create the different file filters os1 << wxT("gSchem files (*.sch)|*.sch|") << wxT("Protel II files (*.\?\?\?)|*.\?\?\?"); // Get the file path from the global configuration object m_poCfg->SetPath( wxT("/Directories") ); os2 = m_poCfg->Read( wxT("LastAccess"), wxGetHomeDir( ) ); // Set the style bit pattern #if wxCHECK_VERSION( 2,8,0 ) li1 = wxFD_OPEN | wxFD_CHANGE_DIR | wxFD_MULTIPLE | wxFD_FILE_MUST_EXIST; #else li1 = wxOPEN | wxCHANGE_DIR | wxMULTIPLE | wxFILE_MUST_EXIST; #endif // Create and configure the file import dialog poDlgImport = new wxFileDialog( m_poFrmMain, wxT(""), wxT(""), wxT(""), wxT(""), li1 ); poDlgImport->SetMessage( wxT("Import a Schematic File/s") ); poDlgImport->SetWildcard( os1 ); poDlgImport->SetFilterIndex( 0 ); poDlgImport->SetDirectory( os2 ); // Display file import dialog if( poDlgImport->ShowModal( ) != wxID_OK ) return( false ); // Delete temporary files bDelTmpFiles( ); // Set the guile procedure name bSetGuileProc( wxT("spice-sdb") ); // Set the schematic file name/s poDlgImport->GetPaths( osa1 ); os1 = osa1.Item( 0 ); for( sz1=1; sz1SetPath( wxT("/Directories") ); m_poCfg->Write( wxT("LastAccess"), poDlgImport->GetDirectory( ) ); m_poCfg->Flush( ); return( true ); } //************************************************************************************************** // Delete temporary files which may have been generated by this application. // // Ie. given the circuit description file ".ckt" delete files of the following form : // .ngspice.dc, .ngspice.ac, ... etc. // .gnucap.op, .gnucap.dc, .... etc. // gnetlist.log bool FileTasks::bDelTmpFiles( void ) { wxArrayString osa1; wxFileName ofn1; wxString os1, os2; long liTmpFileMgt; int i1; // Determine the current temporary file management strategy m_poCfg->SetPath( wxT("/Main") ); m_poCfg->Read( wxT("TmpFileMgt"), &liTmpFileMgt, (long) eTFM_DELETE ); // Return if nothing needs to be done if( liTmpFileMgt == (long) eTFM_KEEP ) return( true ); // Get the path to the schematic or circuit description file ofn1 = m_oPrcGNetList.rofnGetNetLstFile( ); ofn1.Normalize( ); if( !ofn1.IsOk( ) || !ofn1.FileExists( ) ) return( false ); // Look for the gnetlist log file os1 = ofn1.GetPath( ) + wxT("/gnetlist.log"); if( wxFileExists( os1 ) ) osa1.Add( os1 ); // Look for files containing simulation results os1 = ofn1.GetName( ); i1 = os1.Find( wxT(".gspiceui") ); if( i1 > 0 ) os1 = os1.Truncate( (size_t) i1 ); ofn1.SetFullName( os1 ); // Look for any GNU-Cap results file os1 = ofn1.GetFullPath( ) + wxT(".gnucap.??"); for( os2=wxFindFirstFile( os1 ); !os2.IsEmpty( ); os2=wxFindNextFile( ) ) osa1.Add( os2 ); // Look for any NG-Spice results files os1 = ofn1.GetFullPath( ) + wxT(".ngspice.??"); for( os2=wxFindFirstFile( os1 ); !os2.IsEmpty( ); os2=wxFindNextFile( ) ) osa1.Add( os2 ); // If necessary prompt the user for permission to delete temporary files if( osa1.GetCount( ) > 0 ) { if( m_poFrmMain!=NULL && m_poFrmMain->IsShown( ) ) { // Prompt the user if( liTmpFileMgt == (long) eTFM_PROMPT ) { os1 = wxT("Delete Temporary Files"); os2 = wxT("\nDelete the following temporary files :\n\n"); for( i1=0; i1<(int)osa1.GetCount( ); i1++ ) os2 << wxT(" ") << osa1.Item( i1 ) << wxT(" \n"); i1 = wxMessageBox( os2, os1, wxYES_NO|wxICON_QUESTION, m_poFrmMain ); } else i1 = wxYES; // Delete the temporary files if( i1 == wxYES ) for( i1=0; i1<(int)osa1.GetCount( ); i1++ ) wxRemoveFile( osa1.Item( i1 ) ); } } return( true ); } //************************************************************************************************** // Open and load a circuit description (netlist) file into the m_poFrmMain attribute's simulation // objects. // // Return Values : // true - Success // false - Failure bool FileTasks::bOpen( void ) { bool bRtn=true; wxString os1; // Attempt to load the circuit description file NetList::bLoadFile( ); // Load circuit description (& simulation) information into the attributes of the class hierarchy if( m_poFrmMain->m_oSimnNgSp.bLoad( ) ) m_poFrmMain->m_oSimnGCap = m_poFrmMain->m_oSimnNgSp; else if( m_poFrmMain->m_oSimnGCap.bLoad( ) ) m_poFrmMain->m_oSimnNgSp = m_poFrmMain->m_oSimnGCap; // Check for problems if( ! m_poFrmMain->m_oNetLst.bIsValid( ) ) { DlgErrNetLst( ); m_poFrmMain->m_oNbkTxtCtls.bSetPage( NbkTxtCtls::ePAGE_NETLIST ); bRtn = false; } else m_poFrmMain->SetStatusText( wxT(" Netlist file opened successfully"), FrmMain::ePANE_MESAGE ); // Set the main frame title and the schematic file name/s if supplied bSetTitle( ); os1 = m_poFrmMain->m_oNetLst.rosGetSchemFiles( ); if( ! os1.IsEmpty( ) ) bSetSchemFiles( os1 ); return( bRtn ); } //************************************************************************************************** // Import a schematic file by converting it to a netlist using gNetList and then loading it into the // FrmMain simulation object. // // Return Values : // true - Success // false - Failure bool FileTasks::bImport( void ) { bool bRtn=true; // Check that gnetList binary exists and is accessible if( ! bIsOk_gnetlist( ) ) return( false ); // Convert the schematic file/s to a netlist file and load it if( bExecImport( ) ) { bSetNetLstFile( m_oPrcGNetList.rofnGetNetLstFile( ).GetFullPath( ) ); // Attempt to load the circuit description file NetList::bLoadFile( ); // Load circuit description (& simulation) info. into the attributes of the class hierarchy m_poFrmMain->m_oSimnNgSp.bLoad( ); m_poFrmMain->m_oSimnGCap.bLoad( ); if( m_poFrmMain->m_oNetLst.bIsValid( ) ) m_poFrmMain->SetStatusText( wxT(" Schematic file/s imported successfully"), FrmMain::ePANE_MESAGE ); else { DlgErrNetLst( ); m_poFrmMain->m_oNbkTxtCtls.bSetPage( NbkTxtCtls::ePAGE_NETLIST ); bRtn = false; } } else { DlgErrSchems( ); m_poFrmMain->m_oNbkTxtCtls.bSetPage( NbkTxtCtls::ePAGE_CONSOLE ); m_poFrmMain->m_oNbkTxtCtls.bSetPosn( -1 ); bRtn = false; } // Set the main frame title bSetTitle( ); return( bRtn ); } //************************************************************************************************** // Reload a simulation object whether it be from a schematic or netlist file. // // Return Values : // true - Success // false - Failure bool FileTasks::bReload( void ) { bool bRtn; // Re-initialize the text control notebook m_poFrmMain->m_oNbkTxtCtls.bInitialize( ); // Attempt to perform the reload operation if( ! m_oPrcGNetList.roaGetSchemFiles( ).IsEmpty( ) ) { // Reload schematic file/s bRtn = bImport( ); if( bRtn ) m_poFrmMain->SetStatusText( wxT(" Schematic file/s re-imported successfully"), FrmMain::ePANE_MESAGE ); } else if( m_oPrcGNetList.rofnGetNetLstFile( ).IsOk( ) ) { // Reload a netlist file bRtn = bOpen( ); if( bRtn ) m_poFrmMain->SetStatusText( wxT(" Netlist file reloaded successfully"), FrmMain::ePANE_MESAGE ); } else { // There's no open schematic or netlist to reload, display an error message m_poFrmMain->DlgErrMsg( wxT("Reload Operation Error"), wxT("No file is currently open.") ); bRtn = false; } return( bRtn ); } //************************************************************************************************** // Close the circuit description file. // // Return Values : // true - Success // false - Failure bool FileTasks::bClose( void ) { // Is there a file currently open? if( m_oPrcGNetList.roaGetSchemFiles().IsEmpty() && !m_oPrcGNetList.rofnGetNetLstFile().IsOk() ) { // There's no open schematic or netlist to close, display an error message m_poFrmMain->DlgErrMsg( wxT("Close Operation Error"), wxT("No file is currently open.") ); return( false ); } // Delete temporary files bDelTmpFiles( ); // Clear file names m_oPrcGNetList.bClear( ); bSetNetLstFile( wxT("") ); bSetSchemFiles( wxT("") ); // Set the status bar message m_poFrmMain->SetStatusText( wxT(" Netlist file closed successfully"), FrmMain::ePANE_MESAGE ); // Set the text control notebook page m_poFrmMain->m_oNbkTxtCtls.bSetPage( NbkTxtCtls::ePAGE_CONSOLE ); return( true ); } //************************************************************************************************** // Do the necessary tasks before the application exits. // // Return Values : // true - Success // false - Failure bool FileTasks::bExit( void ) { // Delete temporary file/s if( ! bDelTmpFiles( ) ) return( false ); return( true ); } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/main/NbkTxtCtls.cpp0000644000000000000000000002246012506657525017316 0ustar rootroot//************************************************************************************************** // NbkTxtCtls.cpp * // ---------------- * // Started : 2005-06-14 * // Last Update : 2015-04-01 * // Copyright : (C) 2005 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "NbkTxtCtls.hpp" //************************************************************************************************** // Constructor. NbkTxtCtls::NbkTxtCtls( void ) : wxNotebook( ) { } //************************************************************************************************** // Destructor. NbkTxtCtls::~NbkTxtCtls( ) { } //************************************************************************************************** // Create an instantance of this object. // // Argument List : // poWin - The parent window // oWinID - The window identifier // roPosn - The position // roSize - The size // // Return Values : // true - Success // false - Failure bool NbkTxtCtls::bCreate( wxWindow * poWin, wxWindowID oWinID ) { bool bRtn=true; wxString os1; // Check if the object has already been created if( bIsCreated( ) ) return( true ); // Create the notebook object to hold the text controls if( ! Create( poWin, oWinID ) ) return( false ); // Allocate memory for the text controls TextCtrl * poTxcConsole = new TextCtrl; TextCtrl * poTxcNetList = new TextCtrl; TextCtrl * poTxcSimultn = new TextCtrl; TextCtrl * poTxcNgSpice = new TextCtrl; TextCtrl * poTxcGnuCap = new TextCtrl; // Create the text controls if( ! poTxcConsole->bCreate( this ) ) bRtn = false; if( ! poTxcNetList->bCreate( this ) ) bRtn = false; if( ! poTxcSimultn->bCreate( this ) ) bRtn = false; if( ! poTxcNgSpice->bCreate( this ) ) bRtn = false; if( ! poTxcGnuCap ->bCreate( this ) ) bRtn = false; // Initialize the text controls os1 = wxT("No console I/O to display"); if( ! poTxcConsole->bSetInitMsg( os1 ) ) bRtn = false; os1 = wxT("No netlist currently loaded"); if( ! poTxcNetList->bSetInitMsg( os1 ) ) bRtn = false; os1 = wxT("No simulation currently defined"); if( ! poTxcSimultn->bSetInitMsg( os1 ) ) bRtn = false; os1 = wxT("No NG-Spice simulation results to display"); if( ! poTxcNgSpice->bSetInitMsg( os1 ) ) bRtn = false; os1 = wxT("No GNU-Cap simulation results to display"); if( ! poTxcGnuCap ->bSetInitMsg( os1 ) ) bRtn = false; // Define tool tips for the wxNotebook and each page poTxcConsole->SetToolTip( wxT("Console I/O (non-editable)") ); poTxcNetList->SetToolTip( wxT("Netlist file (non-editable)") ); poTxcSimultn->SetToolTip( wxT("Simulation file (editable)") ); poTxcNgSpice->SetToolTip( wxT("NG-Spice simulation results (non-editable)") ); poTxcGnuCap ->SetToolTip( wxT("GNU-Cap simulation results (non-editable)") ); // Add the display objects to the wxNotebook (wxNotebook will delete them) AddPage( poTxcConsole, wxT(" Console ") ); AddPage( poTxcNetList, wxT(" NetList ") ); AddPage( poTxcSimultn, wxT(" Simulation ") ); AddPage( poTxcNgSpice, wxT(" NG-Spice ") ); AddPage( poTxcGnuCap , wxT(" GNU-Cap ") ); bInitialize( ); return( bRtn ); } //************************************************************************************************** // Clear one or all text controls associated with the notebook. // // Argument List : // ePage - The enumerated page identifier // // Return Values : // true - Success // false - Failure bool NbkTxtCtls::bClear( ePageType ePage ) { size_t szt1; // Check that the object has been created if( ! bIsCreated( ) ) return( false ); // Attempt the clear operation switch( ePage ) { case ePAGE_CONSOLE : // Clear a particular page case ePAGE_NETLIST : case ePAGE_SIMULTN : case ePAGE_NGSPICE : case ePAGE_GNUCAP : case ePAGE_CURRENT : if( ! poGetPage( ePage )->bClear( ) ) return( false ); break; case ePAGE_ALL : // Clear all pages for( szt1=0; szt1bClear( ) ) return( false ); break; default : // Invalid page identifier return( false ); } return( true ); } //************************************************************************************************** // Initialize one or all text controls associated with the notebook. // // Argument List : // ePage - The enumerated page identifier // // Return Values : // true - Success // false - Failure bool NbkTxtCtls::bInitialize( ePageType ePage ) { size_t szt1; // Check that the object has been created if( ! bIsCreated( ) ) return( false ); // Attempt the initialize operation switch( ePage ) { case ePAGE_CONSOLE : // Initialize a particular page case ePAGE_NETLIST : case ePAGE_SIMULTN : case ePAGE_NGSPICE : case ePAGE_GNUCAP : case ePAGE_CURRENT : if( ! poGetPage( ePage )->bInitialize( ) ) return( false ); break; case ePAGE_ALL : // Initialize all pages for( szt1=0; szt1bInitialize( ) ) return( false ); break; default : // Invalid page identifier return( false ); } return( true ); } //************************************************************************************************** // Set the page to be displayed. // // Argument List : // ePage - The enumerated page identifier // // Return Values : // true - Success // false - Failure bool NbkTxtCtls::bSetPage( NbkTxtCtls::ePageType ePage ) { // Check if the object has already been created if( ! bIsCreated( ) ) return( false ); // Check that the page identifier is valid if( GetPageCount( ) < ((size_t) ePage + 1) ) return( false ); SetSelection( (size_t) ePage ); return( true ); } //************************************************************************************************** // Set the insert and show positions in the currently displayed page. // // Argument List : // liPosn - The position // // Return Values : // true - Success // false - Failure bool NbkTxtCtls::bSetPosn( long liPosn ) { TextCtrl * poTxtCtl; // Check if the object has already been created if( ! bIsCreated( ) ) return( false ); // Get a pointer to the currently displayed page poTxtCtl = (TextCtrl *) GetCurrentPage( ); if( poTxtCtl == NULL ) return( false ); // Set the position if( liPosn >= 0 ) poTxtCtl->SetInsertionPoint( liPosn ); else poTxtCtl->SetInsertionPointEnd( ); return( true ); } //************************************************************************************************** // Get the enumerated identifier for the currently displayed notebook page. // // Return Values : // Success - The enumerated page identifier // Failure - ePAGE_NONE NbkTxtCtls::ePageType NbkTxtCtls::eGetPage( void ) { ePageType ePage; // Check if the object has already been created if( ! bIsCreated( ) ) return( ePAGE_NONE ); // Get the enumerated identifier for the currently displayed page switch( GetSelection( ) ) { case 0 : ePage = ePAGE_CONSOLE; break; case 1 : ePage = ePAGE_NETLIST; break; case 2 : ePage = ePAGE_SIMULTN; break; case 3 : ePage = ePAGE_NGSPICE; break; case 4 : ePage = ePAGE_GNUCAP; break; default : ePage = ePAGE_NONE; } return( ePage ); } //************************************************************************************************** // Get a pointer to the text control currently being displayed. // // Argument List : // ePage - The enumerated page identifier // // Return Values : // Success - A pointer to the TextCtrl object // Failure - NULL TextCtrl * NbkTxtCtls::poGetPage( NbkTxtCtls::ePageType ePage ) { // Check if the object has already been created if( ! bIsCreated( ) ) return( NULL ); // Check that the page identifier is valid if( ePage == ePAGE_CURRENT ) ePage = eGetPage( ); if( GetPageCount( ) < ((size_t) ePage + 1) ) return( NULL ); // Return a pointer to the requested page return( (TextCtrl *) GetPage( (size_t) ePage ) ); } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/netlist/0000755000000000000000000000000012514476365015304 5ustar rootrootgspiceui-1.1.00+dfsg/src/netlist/NetList.cpp0000644000000000000000000007203412514476365017400 0ustar rootroot//************************************************************************************************** // NetList.cpp * // ------------- * // Started : 2003-09-01 * // Last Update : 2015-04-18 * // Copyright : (C) 2003 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "NetList.hpp" //************************************************************************************************** // Allocate storage for static data members. wxFileName NetList::m_ofnLoadFile; wxFileName NetList::m_ofnSaveFile; ArrayFileName NetList::m_oaSchemFiles; wxArrayString NetList::m_osaNetLst; wxArrayString NetList::m_osaTitle; wxArrayString NetList::m_osaIncludes; ArrayComponent NetList::m_oaCpnts; wxArrayString NetList::m_osaModels; wxArrayString NetList::m_osaSubCcts; wxArrayString NetList::m_osaNodeLbls; bool NetList::m_bIsValid=false; //************************************************************************************************** // Constructor. NetList::NetList( void ) { } //************************************************************************************************** // Destructor. NetList::~NetList( ) { } //************************************************************************************************** // Extract the title for the netlist. // // Noyes : - Traditionally the first line in the netlist is the title. // - An '*' at the start of a line seems to be used as a comment designator. // - If the file was created by gnetlist or gSpiceUI throw it away. // // Return Values : // true - Success // false - Failure bool NetList::bLoadTitle( void ) { // Clear the title string array object attribute m_osaTitle.Clear( ); // Check that the circuit isn't empty if( m_osaNetLst.IsEmpty( ) ) return( false ); // If the first line is empty assume there is no title wxString os1 = m_osaNetLst.Item( 0 ); if( os1.IsEmpty( ) ) return( true ); // If the first line doesn't begin with an '*' then assume it is the title if( os1.GetChar( 0 ) != wxT('*') ) { os1 = wxT("* ") + os1; m_osaTitle.Add( os1 ); return( true ); } // If the netlist was created using gnetlist the first line will look something like the // following : // gnetlist -v -g spice-sdb -o filter-lp-1.ckt filter-lp-1.sch if( os1.Contains( wxT("gnetlist") ) ) return( true ); // If the netlist was created by gSpiceUI the start of the file will look something like this : // ************************************************************** // * Electronic circuit simulation file generated by gSpiceUI * // * Version 0.9.93 (2008-12-28) * // ************************************************************** if( m_osaNetLst.Item( 0 ).find_first_not_of( wxT('*') ) != wxString::npos ) ; else if( ! m_osaNetLst.Item( 1 ).Contains( APP_NAME ) ) ; else if( ! m_osaNetLst.Item( 2 ).Contains( wxT("Version") ) ) ; else if( m_osaNetLst.Item( 3 ).find_first_not_of( wxT('*') ) != wxString::npos ) ; else return( true ); // Accept all lines beginning with an '*' as the title for( size_t sz1=0; sz1 1 ) osModel << wxT('\n') << os1; } else if( ! osModel.IsEmpty( ) ) { // Last line of model description found m_osaModels.Add( osModel ); osModel.Empty( ); } } return( true ); } //************************************************************************************************** // Extract any sub-circuit descriptions from the circuit description (netlist). // // The format of a sub-circuit description is illustrated in the following example : // // .SUBCKT CCTNAME 1 5 // R1 1 2 1K // R2 2 3 2K // R3 3 4 3K // R4 4 5 4K // .ENDS CCTNAME // // Return Values : // true - Success // false - Failure bool NetList::bLoadSubCcts( void ) { wxString osSubCct; wxString os1, os2; size_t sz1; // Clear the sub-circuit string array object attribute m_osaSubCcts.Clear( ); // Need at least a title line, 2 components and a sub-circuit description containing 2 lines if( m_osaNetLst.GetCount( ) < 7 ) return( true ); // Scan circuit description for sub-circuits for( sz1=0; sz1/circuit1.sch /circuit2.sch" // // Return Values : // true - Success // false - Failure bool NetList::bLoadSchemFiles( void ) { wxString os1, os2; size_t sz1; // Scan the netlist for a reference any schematic file name/s it was derived from for( sz1=0; sz1 0 ) m_osaNetLst.Add( os1 ); oFileCct.Close( ); // Close the netlist file return( true ); } //************************************************************************************************** // Save (or resave) the circuit description to file. // // Argument List : // rosFName - The name of the file to be saved // // Return Values : // true - Success // false - Failure bool NetList::bSaveFile( const wxString & rosFName ) { size_t sz1; // Is this a save or resave? if( ! rosFName.IsEmpty( ) ) { if( ! bSetSaveFile( rosFName ) ) return( false ); } else { if( ! m_ofnSaveFile.IsOk( ) ) return( false ); } // Open the file wxTextFile oFileCct( m_ofnSaveFile.GetFullPath( ) ); if( oFileCct.Exists( ) ) { if( ! oFileCct.Open( ) ) return( false ); } else { if( ! oFileCct.Create( ) ) return( false ); } // Clear the file if it contains lines for( sz1=oFileCct.GetLineCount( ); sz1>0; sz1-- ) oFileCct.RemoveLine( 0 ); // Save the contents of the netlist string array to file for( sz1=0; sz1 0 ) std::cout << rosPrefix.mb_str( ) << " "; std::cout << m_osaNetLst.Item( sz1 ).mb_str( ) << '\n'; } } else std::cout << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osaTitle[ ] : "; if( ! m_osaTitle.IsEmpty( ) ) { for( sz1=0; sz1 0 ) std::cout << rosPrefix.mb_str( ) << " "; std::cout << m_osaTitle.Item( sz1 ).mb_str( ) << '\n'; } } else std::cout << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osaIncludes[ ] : "; if( ! m_osaIncludes.IsEmpty( ) ) { for( sz1=0; sz1 0 ) std::cout << rosPrefix.mb_str( ) << " "; std::cout << m_osaIncludes.Item( sz1 ).mb_str( ) << '\n'; } } else std::cout << '\n'; std::cout << rosPrefix.mb_str( ) << "m_oaCpnts[ ] : "; if( ! m_oaCpnts.IsEmpty( ) ) { for( sz1=0; sz1 0 ) std::cout << rosPrefix.mb_str( ) << " "; std::cout << m_oaCpnts.Item( sz1 ).rosGetString( ).mb_str( ) << '\n'; } } else std::cout << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osaModels[ ] : "; if( ! m_osaModels.IsEmpty( ) ) { for( sz1=0; sz1 0 ) std::cout << rosPrefix.mb_str( ) << " "; std::cout << m_osaModels.Item( sz1 ).mb_str( ) << '\n'; } } else std::cout << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osaSubCcts[ ] : "; if( ! m_osaSubCcts.IsEmpty( ) ) { for( sz1=0; sz1 0 ) std::cout << rosPrefix.mb_str( ) << " "; std::cout << m_osaSubCcts.Item( sz1 ).mb_str( ) << '\n'; } } else std::cout << '\n'; std::cout << rosPrefix.mb_str( ) << "m_bIsValid : " << ( m_bIsValid ? "true" : "false") << '\n'; } //************************************************************************************************** // Test Utility * //************************************************************************************************** #ifdef TEST_NETLIST using namespace std; // Function prototypes void Usage( char * psAppName ); //************************************************************************************************** int main( int argc, char * argv[ ] ) { wxString osCpnt; wxString os1; // Validate the argument count passed to the application if( argc > 3 ) { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } // Process the command line arguments os1 = wxConvLibc.cMB2WC( argv[ 1 ] ); if( argc > 1 ) { if( os1.at( 0 ) == wxT('-') ) { if( os1.at( 1 ) == wxT('h') ) { Usage( argv[ 0 ] ); exit( EXIT_SUCCESS ); } else { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } } } else { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } // Display the utility banner cout << "\n Netlist Structure Test Utility" << "\n Version 1.00 (08/05/2009)\n"; // Create a NetList object NetList tNetLst; cout << "\nLoad the netlist file : "; if( tNetLst.bLoadFile( os1 ) ) cout << "Success"; else cout << "Failure"; cout << "\n"; cout << "\ntNetLst.Print( ) :\n"; tNetLst.Print( ); cout << "\n"; exit( EXIT_SUCCESS ); } //************************************************************************************************** void Usage( char * psAppName ) { cout << "\nUsage : " << psAppName << " [-OPTIONS] [FILE]" << "\nOptions : -h : Print usage (this message)" << "\n FILE : A circuit description (NetList) file" << "\n\n"; } #endif // TEST_NETLIST //************************************************************************************************** gspiceui-1.1.00+dfsg/src/netlist/Component.cpp0000644000000000000000000006212412510457771017753 0ustar rootroot//************************************************************************************************** // Component.cpp * // --------------- * // Started : 2004-05-14 * // Last Update : 2015-04-06 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "Component.hpp" //************************************************************************************************** // Finish the definition of the ArrayComponent type. The following expands into // some C++ code and so should only be compiled once (ie. don't put this into a // header file rather put it in a source file or there will be linker errors). #include WX_DEFINE_OBJARRAY( ArrayComponent ); //************************************************************************************************** // Constructor. Component::Component( void ) : wxString( ) { bClear( ); } //************************************************************************************************** // Destructor. Component::~Component( ) { } //************************************************************************************************** // Get the component ports. void Component::GetPorts( void ) { // Not yet implemented ??? } //************************************************************************************************** // Test the values against each other. // // Return Values : // true - Success // false - Failure bool Component::bValidate( void ) { m_osErrMsg.Empty( ); if( IsEmpty( ) ) bSetErrMsg( wxT("component is empty") ); else if( m_osName.IsEmpty( ) ) bSetErrMsg( wxT("component has no name") ); else if( m_osaNodes.GetCount( ) < 2 ) bSetErrMsg( wxT("component has less than two nodes") ); else if( m_osValue.IsEmpty( ) ) bSetErrMsg( wxT("component has no value") ); return( bIsValid( ) ); } //************************************************************************************************** // Attempt to set the objects error message string attribute. // // Argument List : // rosErrMsg - A reference to a string containing the new error message // // Return Values : // true - Success // false - Failure bool Component::bSetErrMsg( const wxString & rosErrMsg ) { if( ! bIsValid( ) ) return( false ); m_osErrMsg = rosErrMsg; return( true ); } //************************************************************************************************** // Compare algorithm for sorting Component objects. // // Argument List : // ppo1 - The address of a pointer to the first Component object to compare // ppo2 - The address of a pointer to the second Component object to compare // // Return Values : // >0 - If *(*ppo1) is greater than *(*ppo2) // =0 - If *(*ppo1) is equal to *(*ppo2) // <0 - If *(*ppo1) is less than *(*ppo2) int Component::iCompare( Component ** ppo1, Component ** ppo2 ) { const wxString & ros1 = (const wxString &) **ppo1; const wxString & ros2 = (const wxString &) **ppo2; return( ros1.Cmp( ros2 ) ); } //************************************************************************************************** // Clear the object attributes. // // Return Values : // true - Success // false - Failure bool Component::bClear( void ) { wxString::Empty( ); m_osErrMsg = wxT("Invalid"); m_osName .Clear( ); m_osaNodes.Clear( ); m_osValue .Clear( ); m_eType = eCPNT_NONE; m_osaPorts.Clear( ); return( true ); } //************************************************************************************************** // Parse a component definition string extracted from a netlist. // // Return Values : // true - Success // false - Failure bool Component::bParse( void ) { wxStringTokenizer ostk1; wxString os1; size_t szt1; // Clear the object attributes os1 = (wxString &) *this; bClear( ); wxString::assign( os1 ); m_osErrMsg.Empty( ); // Tokenize the command string if( IsEmpty( ) ) return( bValidate( ) ); ostk1.SetString( os1 ); // Extract the component name bSetName( ostk1.GetNextToken( ) ); // Extract the nodes the component is connected to if( ! ostk1.HasMoreTokens( ) ) return( bValidate( ) ); bSetNodes( ostk1.GetString( ) ); for( szt1=0; szt1=wxT('a') && oc1<=wxT('z')) && !(oc1>=wxT('A') && oc1<=wxT('Z')) ) return( false ); m_osName = os1; // Determine the component type and units type m_eType = eGetType( m_osName ); return( true ); } //************************************************************************************************** // Set the component nodes. // // Argument List : // rosNodes - A reference to a string containing component nodes eg. "2,1". // // Return Values : // true - Success // false - Failure bool Component::bSetNodes( const wxString & rosNodes ) { wxStringTokenizer ostk1; size_t szNodeCnt; size_t sz1; // Tokenize the name string ostk1.SetString( rosNodes, wxT(" \t\r\n,") ); if( ostk1.CountTokens( ) <=0 ) return( false ); // Determine how many nodes to look for based on the component type switch( m_eType ) { case eCPNT_CAP : case eCPNT_RES : case eCPNT_IND : case eCPNT_CIND : case eCPNT_DIODE : case eCPNT_VCVS : case eCPNT_CCCS : case eCPNT_VCCS : case eCPNT_CCVS : case eCPNT_IVS : case eCPNT_ICS : case eCPNT_NLDS : case eCPNT_NLDCS : case eCPNT_NLDVS : case eCPNT_STJ : szNodeCnt = 2; break; case eCPNT_JFET : case eCPNT_MOSFET : case eCPNT_MESFET : case eCPNT_BJT : case eCPNT_VCSW : case eCPNT_CCSW : case eCPNT_URC : szNodeCnt = 3; break; case eCPNT_TLINE : case eCPNT_LTRA : case eCPNT_TXL : szNodeCnt = 4; break; case eCPNT_LOGIC : szNodeCnt = ostk1.CountTokens( ) - 2; break; case eCPNT_CPL : case eCPNT_SUBCKT : szNodeCnt = ostk1.CountTokens( ) - 1; break; // For the default guess that all but the last token are nodes default : szNodeCnt = ostk1.CountTokens( ) - 1; break; } if( szNodeCnt > ostk1.CountTokens( ) ) return( false ); // Extract the nodes the component is connected to m_osaNodes.Empty( ); if( szNodeCnt > 0 ) { for( sz1=0; sz1mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osErrMsg : " << m_osErrMsg .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_eType : "; switch( m_eType ) { case eCPNT_CAP : std::cout << "eCPNT_CAP" ; break; // Capacitor case eCPNT_RES : std::cout << "eCPNT_RES" ; break; // Resistor case eCPNT_IND : std::cout << "eCPNT_IND" ; break; // Inductor case eCPNT_CIND : std::cout << "eCPNT_CIND" ; break; // Coupled (Mutual) Inductors case eCPNT_DIODE : std::cout << "eCPNT_DIODE" ; break; // Diode case eCPNT_BJT : std::cout << "eCPNT_BJT" ; break; // BJT (Bipolar Junction Transistor) case eCPNT_JFET : std::cout << "eCPNT_JFET" ; break; // JFET (Junction Field-Effect Transistor) case eCPNT_MOSFET : std::cout << "eCPNT_MOSFET"; break; // MOSFET (Metal-Oxide Semiconductor Field-Effect Transistor) case eCPNT_MESFET : std::cout << "eCPNT_MESFET"; break; // MESFET (Metal–Semiconductor Field Effect Transistor) case eCPNT_VCVS : std::cout << "eCPNT_VCVS" ; break; // Voltage Controlled Voltage Source case eCPNT_CCCS : std::cout << "eCPNT_CCCS" ; break; // Current Controlled Current Source case eCPNT_VCCS : std::cout << "eCPNT_VCCS" ; break; // Voltage Controlled Current Source case eCPNT_CCVS : std::cout << "eCPNT_CCVS" ; break; // Current Controlled Voltage Source case eCPNT_TLINE : std::cout << "eCPNT_TLINE" ; break; // Lossless Transmission Line case eCPNT_LTRA : std::cout << "eCPNT_LTRA" ; break; // Lossy Transmission Line (LTRA) case eCPNT_CPL : std::cout << "eCPNT_CPL" ; break; // Coupled Multi-conductor Transmission Line (CPL) case eCPNT_TXL : std::cout << "eCPNT_TXL" ; break; // Single Lossy Transmission Line (TXL) case eCPNT_URC : std::cout << "eCPNT_URC" ; break; // Uniform Distributed RC Transmission Line (URC) case eCPNT_ICS : std::cout << "eCPNT_ICS" ; break; // Independent Current Source case eCPNT_IVS : std::cout << "eCPNT_IVS" ; break; // Independent Voltage Source case eCPNT_NLDS : std::cout << "eCPNT_NLDS" ; break; // Non-Linear Dependent Source case eCPNT_NLDCS : std::cout << "eCPNT_NLDCS" ; break; // Non-Linear Dependent Current Source case eCPNT_NLDVS : std::cout << "eCPNT_NLDVS" ; break; // Non-Linear Dependent Voltage Source case eCPNT_CCSW : std::cout << "eCPNT_CCSW" ; break; // Current Controlled Switch case eCPNT_VCSW : std::cout << "eCPNT_VCSW" ; break; // Voltage Controlled Switch case eCPNT_SUBCKT : std::cout << "eCPNT_SUBCKT"; break; // Sub-circuit case eCPNT_LOGIC : std::cout << "eCPNT_LOGIC" ; break; // Logic Device case eCPNT_STJ : std::cout << "eCPNT_STJ" ; break; // Super-conducting Tunnel Junction default : std::cout << "Invalid"; } std::cout << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osName : " << m_osName .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osaNodes[ ] : "; for( sz1=0; sz1 0 ) std::cout << ", "; std::cout << m_osaNodes.Item( sz1 ).mb_str( ); } std::cout << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osaPorts[ ] : "; for( sz1=0; sz1 0 ) std::cout << " "; std::cout << m_osaPorts.Item( sz1 ).mb_str( ); } std::cout << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osValue : " << m_osValue .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "rosGetNumValue( ) : " << rosGetNumValue( ).mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "eGetUnitsType( ) : "; switch( eGetUnitsType( m_osName ) ) { case eUNITS_CAP : std::cout << "eUNITS_CAP"; break; case eUNITS_IND : std::cout << "eUNITS_IND"; break; case eUNITS_RES : std::cout << "eUNITS_RES"; break; case eUNITS_VOLT : std::cout << "eUNITS_VOLT"; break; case eUNITS_CURR : std::cout << "eUNITS_CURR"; break; case eUNITS_TIME : std::cout << "eUNITS_TIME"; break; case eUNITS_FREQ : std::cout << "eUNITS_FREQ"; break; case eUNITS_PHAD : std::cout << "eUNITS_PHAD"; break; case eUNITS_PHAR : std::cout << "eUNITS_PHAR"; break; case eUNITS_TMPC : std::cout << "eUNITS_TMPC"; break; case eUNITS_TMPF : std::cout << "eUNITS_TMPF"; break; case eUNITS_EXP : std::cout << "eUNITS_EXP"; break; case eUNITS_NONE : std::cout << "eUNITS_NONE"; break; default : std::cout << "Invalid"; break; } std::cout << '\n'; } //************************************************************************************************** // Test Utility * //************************************************************************************************** #ifdef TEST_COMPONENT using namespace std; // Function prototypes void Usage( char * psAppName ); //************************************************************************************************** int main( int argc, char * argv[ ] ) { wxString osCpnt; wxString os1; // Validate the argument count passed to the application if( argc > 2 ) { Usage( argv[0] ); exit( EXIT_FAILURE ); } // Process the command line arguments os1 = wxConvLibc.cMB2WC( argv[ 1 ] ); if( argc > 1 ) { if( os1.at( 0 ) == wxT('-') ) { if( os1.at( 1 ) == wxT('h') ) { Usage( argv[0] ); exit( EXIT_SUCCESS ); } else { Usage( argv[0] ); exit( EXIT_FAILURE ); } } } // Display the utility banner cout << "\n Component Class Test Utility" << "\n Version 1.07 (19/08/2011)\n"; // Create a GNU-CAP OP command object Component tCpnt; // Use the following command example to check the formatter and the parser : osCpnt = wxT("Vin 2 0 AC 1V"); // This contains TABs and SPACEs cout << "\nCpnt defn to test : " << osCpnt.mb_str( ) << "\n\n"; // ******************** Test the formatter ******************** cout << "Test the component formatter :"; // Set things up for a formatter test tCpnt.bClear( ); tCpnt.bSetName ( wxT("Vin") ); tCpnt.bSetNodes( wxT("2,0") ); tCpnt.bSetValue( wxT("AC 1V") ); // Run the formatter cout << "\n Run formatter : "; if( tCpnt.bFormat( ) ) cout << "OK"; else cout << "FAULT (" << tCpnt.rosGetErrMsg( ).mb_str( ) << ')'; // Test the formatter output cout << "\n Test format : "; if( (wxString) tCpnt == Component::rosTrim( osCpnt ) ) cout << "OK\n" << " Component defn : " << tCpnt.rosGetString( ).mb_str( ) << '\n'; else { // There's been an error so print the component contents cout << "FAULT\n"; cout << " tCpnt Contents : \n"; tCpnt.Print( wxT(" ") ); } cout << "\n"; // ********************* Test the parser ********************* cout << "Test the component parser :"; // Set things up for a parser test tCpnt.bClear( ); tCpnt = osCpnt; // Run the parser cout << "\n Run parser : "; if( tCpnt.bParse( ) ) cout << "OK"; else cout << "FAULT (" << tCpnt.rosGetErrMsg( ).mb_str( ) << ')'; // Test the parser output tCpnt.bFormat( ); cout << "\n Test format : "; if( (wxString) tCpnt == Component::rosTrim( osCpnt ) ) cout << "OK\n" << " Component defn : " << tCpnt.rosGetString( ).mb_str( ) << '\n'; else { // There's been an error so print the component contents cout << "FAULT\n"; cout << " tCpnt Contents : \n"; tCpnt.Print( wxT(" ") ); } cout << "\n"; exit( EXIT_SUCCESS ); } //************************************************************************************************** void Usage( char * psAppName ) { cout << "\nUsage : " << psAppName << " [-OPTIONS]" << "\nOptions :" << "\n -h : Print usage (this message)\n"; } #endif // TEST_COMPONENT //************************************************************************************************** gspiceui-1.1.00+dfsg/src/netlist/SimnNgSpice.cpp0000644000000000000000000002617212511365273020167 0ustar rootroot//************************************************************************************************** // SimnNgSpice.cpp * // ----------------- * // Started : 2008-05-07 * // Last Update : 2015-04-09 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "SimnNgSpice.hpp" //************************************************************************************************** // Constructor. SimnNgSpice::SimnNgSpice( void ) : SimnBase( ) { m_eSimEng = eSIMR_NGSPICE; // Initialize all object attributes bClear( ); } //************************************************************************************************** // Destructor. SimnNgSpice::~SimnNgSpice( ) { } //************************************************************************************************** // Extract the simulator engine and return true if it's NG-Spice. // // Return Values : // true - Success // false - Failure bool SimnNgSpice::bLoadSimEng( void ) { wxString os1; size_t sz1; // Scan the circuit description for simulator type for( sz1=0; sz1 // Local Constant Declarations #define NGS_SINAMP wxT("1.0") #define NGS_SINOFFSET wxT("0.0") #define NGS_SINFREQ wxT("1.0K") #define NGS_SINDELAY wxT("0.0m") #define NGS_SINDAMP wxT("0.0") #define NGS_PULINITIAL wxT("0.0") #define NGS_PULMAX wxT("0.0") #define NGS_PULDELAY wxT("0.0m") #define NGS_PULRISE wxT("0.0m") #define NGS_PULWIDTH wxT("0.0m") #define NGS_PULFALL wxT("0.0m") #define NGS_PULPERIOD wxT("0.0m") //************************************************************************************************** class CpntNgsIndSrc : public Component { private : virtual bool bParseValue ( void ); virtual bool bFormatValue( void ); virtual bool bValidate ( void ); void ClrValues( void ); public : // Value for a sinusoidal source wxString m_osSinOffset; wxString m_osSinAmp; wxString m_osSinFreq; wxString m_osSinDelay; wxString m_osSinDamp; // Value for a pulse source wxString m_osPulInitial; wxString m_osPulMax; wxString m_osPulDelay; wxString m_osPulRise; wxString m_osPulWidth; wxString m_osPulFall; wxString m_osPulPeriod; CpntNgsIndSrc( void ); virtual ~CpntNgsIndSrc( ); virtual bool bClear( void ); CpntNgsIndSrc & operator = ( const Component & roCpnt ); CpntNgsIndSrc & operator = ( const CmdGnuCapGEN & roCmdGEN ); void Print( const wxString & rosPrefix=wxT(" ") ); }; //************************************************************************************************** #endif // CPNTNGSINDSRC_HPP gspiceui-1.1.00+dfsg/src/netlist/SimnGnuCap.cpp0000644000000000000000000002766112511441126020010 0ustar rootroot//************************************************************************************************** // SimnGnuCap.cpp * // ---------------- * // Started : 2008-05-07 * // Last Update : 2015-04-09 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "SimnGnuCap.hpp" //************************************************************************************************** // Constructor. SimnGnuCap::SimnGnuCap( void ) : SimnBase( ) { m_eSimEng = eSIMR_GNUCAP; // Initialize all object attributes bClear( ); } //************************************************************************************************** // Destructor. SimnGnuCap::~SimnGnuCap( ) { } //************************************************************************************************** // Extract the simulator engine and return true if it's GNU-Cap. // // Return Values : // true - Success // false - Failure bool SimnGnuCap::bLoadSimEng( void ) { wxString os1; size_t sz1; // Scan the circuit description for simulator type for( sz1=0; sz1 #include #include //************************************************************************************************** class NetList { protected : // File names static wxFileName m_ofnLoadFile; static wxFileName m_ofnSaveFile; static ArrayFileName m_oaSchemFiles; public : // String array containing the netlist data static wxArrayString m_osaNetLst; // String arrays containing data extracted from the netlist static wxArrayString m_osaTitle; static wxArrayString m_osaIncludes; static ArrayComponent m_oaCpnts; static wxArrayString m_osaModels; static wxArrayString m_osaSubCcts; // String arrays containing node labels only static wxArrayString m_osaNodeLbls; private : static bool m_bIsValid; // Functions to transfer circuit description information to or from m_osaNetLst bool bLoadTitle ( void ); bool bLoadIncludes ( void ); bool bLoadCpnts ( void ); bool bLoadModels ( void ); bool bLoadSubCcts ( void ); bool bLoadNodeLbls ( void ); bool bLoadSchemFiles( void ); bool bIsSubCkt( wxString & roLine ); public : NetList( void ); ~NetList( ); static bool bClear ( void ); bool bIsEmpty ( void ) { return( m_osaNetLst.IsEmpty( ) ); } virtual bool bValidate( void ); virtual bool bIsValid ( void ) { return( m_bIsValid ); } static bool bLoadFile( const wxString & rosFName=wxT("") ); static bool bSaveFile( const wxString & rosFName=wxT("") ); virtual bool bLoad ( void ); virtual bool bSave ( void ); static bool bSetLoadFile ( const wxString & rosFName ); static bool bSetSaveFile ( const wxString & rosFName ); bool bSetSchemFiles( const wxArrayString & rosaFNames ); bool bSetSchemFiles( const wxString & rosFNames ); static const wxFileName & roGetLoadFile ( void ) { return( m_ofnLoadFile ); } static const wxFileName & roGetSaveFile ( void ) { return( m_ofnSaveFile ); } static const ArrayFileName & roGetSchemFiles( void ) { return( m_oaSchemFiles ); } static const wxString & rosGetSchemFiles( void ); static const Component & roGetCpnt ( const wxString & rosName ); virtual void Print( const wxString & rosPrefix=wxT(" ") ); friend class PrcGnuCap; friend class PrcNgSpice; }; //************************************************************************************************** #endif // NETLIST_HPP gspiceui-1.1.00+dfsg/src/netlist/SimnGnuCap.hpp0000644000000000000000000000723312511166637020021 0ustar rootroot//************************************************************************************************** // SimnGnuCap.hpp * // ---------------- * // Description : A class to contain the values required to define a GNU-Cap simulation. * // Started : 2008-05-07 * // Last Update : 2015-04-08 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef SIMNGNUCAP_HPP #define SIMNGNUCAP_HPP // Application Includes #include "TypeDefs.hpp" #include "base/SimnBase.hpp" #include "gnucap/commands/CmdGnuCapOPT.hpp" #include "gnucap/commands/CmdGnuCapOP.hpp" #include "gnucap/commands/CmdGnuCapDC.hpp" #include "gnucap/commands/CmdGnuCapAC.hpp" #include "gnucap/commands/CmdGnuCapTR.hpp" #include "gnucap/commands/CmdGnuCapFO.hpp" #include "gnucap/commands/CmdGnuCapPR.hpp" #include "gnucap/commands/CmdGnuCapGEN.hpp" #include "netlist/SimnNgSpice.hpp" class SimnNgSpice; //************************************************************************************************** class SimnGnuCap : public SimnBase { public : CmdGnuCapOP m_oCmdOP; CmdGnuCapDC m_oCmdDC; CmdGnuCapAC m_oCmdAC; CmdGnuCapTR m_oCmdTR; CmdGnuCapFO m_oCmdFO; CmdGnuCapOPT m_oCmdOPT; CmdGnuCapPR m_oCmdPR; CmdGnuCapGEN m_oCmdGEN; private : // Function to extract information from the circuit description virtual bool bLoadSimEng ( void ); virtual bool bLoadSimCmds( void ); virtual bool bLoadSigSrc ( void ); public : SimnGnuCap( void ); ~SimnGnuCap( ); virtual bool bClear ( void ); virtual bool bClrCmds ( void ); virtual bool bClrTstPts ( void ); virtual bool bValidate ( void ); virtual bool bLoad ( void ); virtual bool bSave ( void ); virtual bool bSetAnaType( eTypeCmd eAnaType ) { return( m_oCmdPR.bSetAnaType( eAnaType ) ); } virtual bool bAddTstNode( const wxString & rosName ); virtual bool bAddTstCpnt( const wxString & rosName ); virtual eTypeCmd eGetAnaType ( void ) const { return( m_oCmdPR.eGetAnaType());} virtual const wxArrayString & rosaGetTstNodes( void ) const { return( m_oCmdPR.m_osaNodes ); } virtual const wxArrayString & rosaGetTstCpnts( void ) const { return( m_oCmdPR.m_osaCpnts ); } SimnGnuCap & operator = ( const SimnNgSpice & roSimn ); virtual void Print( const wxString & rosPrefix=wxT(" ") ); }; //************************************************************************************************** #endif // SIMNGNUCAP_HPP gspiceui-1.1.00+dfsg/src/netlist/Component.hpp0000644000000000000000000001147712476574755020002 0ustar rootroot//************************************************************************************************** // Component.hpp * // --------------- * // Description : This class processes a component definition line from a netlist. The line is * // parsed into it's constituant parts. * // Started : 2004-05-14 * // Last Update : 2015-03-07 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef COMPONENT_HPP #define COMPONENT_HPP // Application Include Files #include "TypeDefs.hpp" #include "utility/CnvtType.hpp" #include "utility/StrUtils.hpp" // wxWidgets Include Files #include //************************************************************************************************** class Component : public wxString { protected : // The following attributes are the minumum required to define a component wxString m_osName; wxArrayString m_osaNodes; wxString m_osValue; // The following attributes are derived from the above attributes eTypeCpnt m_eType; wxArrayString m_osaPorts; // ??? Not yet implemented // Error message string wxString m_osErrMsg; virtual bool bParseValue ( void ) { return( true ); } // ??? Not yet implemented virtual bool bFormatValue( void ) { return( true ); } // ??? Not yet implemented virtual bool bValidate ( void ); void GetPorts( void ); // ??? Not yet implemented public : // Function which provides the Component sorting criterion static int iCompare( Component ** ppo1, Component ** ppo2 ); Component( void ); virtual ~Component( ); virtual bool bClear ( void ); bool bIsValid( void ) { return( m_osErrMsg.IsEmpty( ) ); } virtual bool bParse ( void ); virtual bool bFormat( void ); bool bSetString( const wxString & rosCmd ); bool bSetName ( const wxString & rosName ); bool bSetNodes ( const wxString & rosNodes ); bool bSetValue ( const wxString & rosValue ); bool bSetErrMsg( const wxString & rosErrMsg ); const wxString & rosGetString ( void ); inline const wxString & rosGetName ( void ) { return( m_osName ); } inline const wxArrayString & rosaGetNodes ( void ) { return( m_osaNodes ); } inline const wxString & rosGetValue ( void ) { return( m_osValue ); } eTypeCpnt eGetType ( void ) { return( m_eType ); } const wxString & rosGetNodes ( void ); const wxString & rosGetNumValue ( void ); eTypeUnits eGetUnitsType( void ) { return( eGetUnitsType( m_osName ) ); } inline const wxString & rosGetErrMsg ( void ) { return( m_osErrMsg ); } // Static helper functions (may be called without instantiating the class) static eTypeCpnt eGetType ( const wxString & rosName ); static eTypeUnits eGetUnitsType( const wxString & rosName ); static const wxString & rosTrim ( const wxString & rosDefn ); wxString & operator = ( const wxString & rosCmd ); Component & operator = ( const Component & roCpnt ); void Print( const wxString & rosPrefix=wxT(" ") ); }; //************************************************************************************************** // Define a new array type WX_DECLARE_OBJARRAY( Component, ArrayComponent ); //************************************************************************************************** #endif // COMPONENT_HPP gspiceui-1.1.00+dfsg/src/netlist/CpntNgsIndSrc.cpp0000644000000000000000000003123612443541116020460 0ustar rootroot//************************************************************************************************** // CpntNgsIndSrc.cpp * // ------------------- * // Started : 2008-06-12 * // Last Update : 2014-12-15 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "CpntNgsIndSrc.hpp" //************************************************************************************************** // Constructor. CpntNgsIndSrc::CpntNgsIndSrc( void ) : Component( ) { bClear( ); } //************************************************************************************************** // Destructor. CpntNgsIndSrc::~CpntNgsIndSrc( ) { } //************************************************************************************************** // Parse the value part of the component definition string. // // Eg. : Vin 3 0 SIN(0 1 100Meg 1ns 1E10) // // Return Values : // true - Success // false - Failure bool CpntNgsIndSrc::bParseValue( void ) { wxStringTokenizer ostk1; size_t szSin, szPulse; size_t sz1, sz2; ClrValues( ); // Find the beginning of the SIN and/or PULSE sections szSin = Component::m_osValue.Upper( ).Find( wxT("SIN(") ); szPulse = Component::m_osValue.Upper( ).Find( wxT("PULSE(") ); if( szSin==wxString::npos && szPulse==wxString::npos ) return( false ); // Extract the sinusoid function parameter values if( szSin != wxString::npos ) { sz1 = Component::m_osValue.find( wxT('('), szSin ); sz2 = Component::m_osValue.find( wxT(')'), szSin ); if( sz1==wxString::npos || sz2==wxString::npos ) return( false ); ostk1.SetString( Component::m_osValue.substr( sz1+1, sz2-sz1-1 ) ); if( ostk1.CountTokens( ) != 5 ) return( false ); m_osSinOffset = ostk1.GetNextToken( ); m_osSinAmp = ostk1.GetNextToken( ); m_osSinFreq = ostk1.GetNextToken( ); m_osSinDelay = ostk1.GetNextToken( ); m_osSinDamp = ostk1.GetNextToken( ); } // Extract the pulse function parameter values if( szPulse != wxString::npos ) { sz1 = Component::m_osValue.find( wxT('('), szPulse ); sz2 = Component::m_osValue.find( wxT(')'), szPulse ); if( sz1==wxString::npos || sz2==wxString::npos ) return( false ); ostk1.SetString( Component::m_osValue.substr( sz1+1, sz2-sz1-1 ) ); if( ostk1.CountTokens( ) != 7 ) return( false ); m_osPulInitial = ostk1.GetNextToken( ); m_osPulMax = ostk1.GetNextToken( ); m_osPulDelay = ostk1.GetNextToken( ); m_osPulRise = ostk1.GetNextToken( ); m_osPulFall = ostk1.GetNextToken( ); m_osPulWidth = ostk1.GetNextToken( ); m_osPulPeriod = ostk1.GetNextToken( ); } return( true ); } //************************************************************************************************** // Format the value part of the command string. // // Eg. : Vin 3 0 SIN(0 1 100Meg 1ns 1E10) // // Return Values : // true - Success // false - Failure bool CpntNgsIndSrc::bFormatValue( void ) { float f1; bool b1; m_osValue.Empty( ); f1 = 0.0; b1 = CnvtType::bStrToFlt( m_osSinAmp, &f1 ); if( b1==true && f1!=0.0 ) { // Create the sinusoid function section m_osValue << wxT("SIN( "); m_osValue << m_osSinOffset << wxT(' '); m_osValue << m_osSinAmp << wxT(' '); m_osValue << m_osSinFreq << wxT(' '); m_osValue << m_osSinDelay << wxT(' '); m_osValue << m_osSinDamp << wxT(' '); m_osValue << wxT(')'); } f1 = 0.0; b1 = CnvtType::bStrToFlt( m_osPulMax, &f1 ); if( b1==true && f1!=0.0 ) { // Create the pulse function section if( ! m_osValue.IsEmpty( ) ) m_osValue << wxT(' '); m_osValue << wxT("PULSE( "); m_osValue << m_osPulInitial << wxT(' '); m_osValue << m_osPulMax << wxT(' '); m_osValue << m_osPulDelay << wxT(' '); m_osValue << m_osPulRise << wxT(' '); m_osValue << m_osPulFall << wxT(' '); m_osValue << m_osPulWidth << wxT(' '); m_osValue << m_osPulPeriod << wxT(' '); m_osValue << wxT(')'); } if( m_osValue.IsEmpty( ) ) m_osValue = wxT("0.0"); return( true ); } //************************************************************************************************** // Check that the object attributes are valid. // // Return Values : // true - Success // false - Failure bool CpntNgsIndSrc::bValidate( void ) { double dfSinOffset, dfSinAmp, dfSinFreq, dfSinDelay, dfSinDamp; double dfPulInitial, dfPulMax, dfPulDelay, dfPulRise, dfPulWidth, dfPulFall, dfPulPeriod; // Check the validity of the base component if( ! Component::bValidate( ) ) return( false ); // Check that the component type is valid if( m_eType!=eCPNT_IVS && m_eType!=eCPNT_ICS ) return( false ); // Check the sinusoidal source values dfSinAmp = 0.0; dfSinOffset = 0.0; dfSinFreq = 0.0; dfSinDelay = 0.0; dfSinDamp = 0.0; if( ! CnvtType::bStrToFlt( m_osSinOffset, &dfSinOffset ) ) bSetErrMsg( wxT("sinusoid offset value is invalid") ); if( ! CnvtType::bStrToFlt( m_osSinAmp, &dfSinAmp ) ) bSetErrMsg( wxT("sinusoid amplitude value is invalid") ); if( ! CnvtType::bStrToFlt( m_osSinFreq, &dfSinFreq ) ) bSetErrMsg( wxT("sinusoid frequency value is invalid") ); if( ! CnvtType::bStrToFlt( m_osSinDelay, &dfSinDelay ) ) bSetErrMsg( wxT("sinusoid delay value is invalid") ); if( ! CnvtType::bStrToFlt( m_osSinDamp, &dfSinDamp ) ) bSetErrMsg( wxT("sinusoid damping factor is invalid") ); // Check overall sinusoidal source logic if( dfSinFreq>0.0 && dfSinAmp <=0.0 ) bSetErrMsg( wxT("sinusoid amplitude value must be greater than zero") ); if( dfSinAmp >0.0 && dfSinFreq<=0.0 ) bSetErrMsg( wxT("sinusoid frequency must be greater than zero") ); // Check the pulse source values dfPulInitial = 0.0; dfPulMax = 0.0; dfPulDelay = 0.0; dfPulRise = 0.0; dfPulWidth = 0.0; dfPulFall = 0.0; dfPulPeriod = 0.0; if( ! CnvtType::bStrToFlt( m_osPulInitial, &dfPulInitial ) ) bSetErrMsg( wxT("initial pulse value is invalid") ); if( ! CnvtType::bStrToFlt( m_osPulMax, &dfPulMax ) ) bSetErrMsg( wxT("maximum pulse value is invalid") ); if( ! CnvtType::bStrToFlt( m_osPulDelay, &dfPulDelay ) ) bSetErrMsg( wxT("pulse delay value is invalid") ); if( ! CnvtType::bStrToFlt( m_osPulRise, &dfPulRise ) ) bSetErrMsg( wxT("pulse rise time value is invalid") ); if( ! CnvtType::bStrToFlt( m_osPulWidth, &dfPulWidth ) ) bSetErrMsg( wxT("pulse width value is invalid") ); if( ! CnvtType::bStrToFlt( m_osPulFall, &dfPulFall ) ) bSetErrMsg( wxT("pulse fall time value is invalid") ); if( ! CnvtType::bStrToFlt( m_osPulPeriod, &dfPulPeriod ) ) bSetErrMsg( wxT("pulse period value is invalid") ); // Check the pulse time values if( dfPulPeriod < dfPulRise ) bSetErrMsg( wxT("pulse rise time is greater than the period") ); if( dfPulPeriod < dfPulWidth ) bSetErrMsg( wxT("pulse width is greater than the period") ); if( dfPulPeriod < dfPulFall ) bSetErrMsg( wxT("pulse fall time is greater than the period") ); if( dfPulPeriod < dfPulRise+dfPulWidth+dfPulFall ) bSetErrMsg( wxT("pulse period is less then the width") ); // Check the pulse level values if( dfPulInitial > dfPulMax ) bSetErrMsg( wxT("initial pulse value is greater than the maximum value") ); // Check overall pulse source logic if( dfPulPeriod!=0.0 && (dfPulInitial==0.0 && dfPulMax==0.0) ) bSetErrMsg( wxT("pulse timing has been defined but no levels") ); if( dfPulPeriod==0.0 && (dfPulInitial!=0.0 || dfPulMax!=0.0) ) bSetErrMsg( wxT("pulse levels have been defined but no timings") ); return( bIsValid( ) ); } //************************************************************************************************** void CpntNgsIndSrc::ClrValues( void ) { m_osSinOffset = NGS_SINOFFSET; m_osSinAmp = NGS_SINAMP; m_osSinFreq = NGS_SINFREQ; m_osSinDelay = NGS_SINDELAY; m_osSinDamp = NGS_SINDAMP; m_osPulInitial = NGS_PULINITIAL; m_osPulMax = NGS_PULMAX; m_osPulDelay = NGS_PULDELAY; m_osPulRise = NGS_PULRISE; m_osPulWidth = NGS_PULWIDTH; m_osPulFall = NGS_PULFALL; m_osPulPeriod = NGS_PULPERIOD; } //************************************************************************************************** // Clear the object attributes. // // Return Values : // true - Success // false - Failure bool CpntNgsIndSrc::bClear( void ) { Component::bClear( ); ClrValues( ); return( true ); } //************************************************************************************************** // Copy and digest the contents of a Component object. // // Argument List : // roCpnt - A reference to a Component object // // Return Values : // A reference to this object CpntNgsIndSrc & CpntNgsIndSrc::operator = ( const Component & roCpnt ) { // Copy the component contents (Component &) *this = roCpnt; // Parse the value part of the component definition bParseValue( ); return( *this ); } //************************************************************************************************** // Copy the contents of an CmdGnuCapGEN object. // // Argument List : // roCmdGEN - A reference to a CmdGnuCapGEN object // // Return Values : // A reference to this object CpntNgsIndSrc & CpntNgsIndSrc::operator = ( const CmdGnuCapGEN & roCmdGEN ) { double df1, df2; m_osSinOffset = roCmdGEN.m_osOffset; m_osSinAmp = roCmdGEN.m_osAmplitude; m_osSinFreq = roCmdGEN.m_osSinFreq; if( CnvtType::bStrToFlt( roCmdGEN.m_osSinPhase, &df1 ) && CnvtType::bStrToFlt( roCmdGEN.m_osSinFreq, &df2 ) ) CnvtType::bFltToStr( df1 / (360.0 * df2), m_osSinDelay ); else m_osSinDelay = wxT("0.0"); m_osSinDamp = wxT("0.0"); m_osPulInitial = roCmdGEN.m_osPulInitial; m_osPulMax = roCmdGEN.m_osPulMax; m_osPulDelay = roCmdGEN.m_osPulDelay; m_osPulRise = roCmdGEN.m_osPulRise; m_osPulWidth = roCmdGEN.m_osPulWidth; m_osPulFall = roCmdGEN.m_osPulFall; m_osPulPeriod = roCmdGEN.m_osPulPeriod; bFormat( ); return( *this ); } //************************************************************************************************** // Print the object attributes. // // Argument List : // rosPrefix - A prefix to every line displayed (usually just spaces) void CpntNgsIndSrc::Print( const wxString & rosPrefix ) { Component::Print( rosPrefix + wxT("Component::") ); std::cout << rosPrefix.mb_str( ) << "m_osSinOffset : " << m_osSinOffset .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osSinAmp : " << m_osSinAmp .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osSinFreq : " << m_osSinFreq .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osSinDelay : " << m_osSinDelay .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osSinDamp : " << m_osSinDamp .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osPulseInitV : " << m_osPulInitial.mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osPulseMaxV : " << m_osPulMax .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osPulseDelay : " << m_osPulDelay .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osPulseRise : " << m_osPulRise .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osPulseWidth : " << m_osPulWidth .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osPulseFall : " << m_osPulFall .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osPulsePeriod : " << m_osPulPeriod .mb_str( ) << '\n'; } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/ngspice/0000755000000000000000000000000012502714316015236 5ustar rootrootgspiceui-1.1.00+dfsg/src/ngspice/dialogs/0000755000000000000000000000000012514070616016661 5ustar rootrootgspiceui-1.1.00+dfsg/src/ngspice/dialogs/DlgNgsCfgOPT.hpp0000644000000000000000000001366012463162654021570 0ustar rootroot//************************************************************************************************** // DlgNgsCfgOPT.hpp * // ------------------ * // Description : This dialogue is used to enter values associated with the NG-Spice OPTIONS * // command. * // Started : 2006-03-03 * // Last Update : 2015-01-31 * // Copyright : (C) 2006 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef DLGNGSCFGOPT_HPP #define DLGNGSCFGOPT_HPP // Application Includes #include "TypeDefs.hpp" #include "utility/PnlValue.hpp" #include "utility/PnlLblCho.hpp" #include "ngspice/commands/CmdNgSpiceOPT.hpp" #include "base/NbkSimEngBase.hpp" // wxWidgets Includes #include //************************************************************************************************** class DlgNgsCfgOPT : public wxDialog { private : // Value panel controls (for float values) PnlValue m_oPnlABSTOL; PnlValue m_oPnlCHGTOL; PnlValue m_oPnlCONVABSS; PnlValue m_oPnlCONVSTEP; PnlValue m_oPnlDEFL; PnlValue m_oPnlDEFW; PnlValue m_oPnlDEFAD; PnlValue m_oPnlDEFAS; PnlValue m_oPnlGMIN; PnlValue m_oPnlPIVREL; PnlValue m_oPnlPIVTOL; PnlValue m_oPnlRAMPTIME; PnlValue m_oPnlRELTOL; PnlValue m_oPnlRSERIES; PnlValue m_oPnlRSHUNT; PnlValue m_oPnlTEMP; PnlValue m_oPnlTNOM; PnlValue m_oPnlTRTOL; PnlValue m_oPnlVNTOL; // Value panel controls (for integer values) PnlValue m_oPnlGMINSTEP; PnlValue m_oPnlITL1; PnlValue m_oPnlITL2; PnlValue m_oPnlITL3; PnlValue m_oPnlITL4; PnlValue m_oPnlITL5; PnlValue m_oPnlITL6; PnlValue m_oPnlMAXEVIT; PnlValue m_oPnlMAXOPALT; PnlValue m_oPnlMAXORD; PnlValue m_oPnlMAXWARNS; PnlValue m_oPnlSRCSTEPS; // Value panel controls (for string values) PnlLblCho m_oChoMETHOD; // Value panel controls (for boolean values) wxCheckBox m_oCbxBADMOS3; wxCheckBox m_oCbxINTERP; wxCheckBox m_oCbxNOOPAC; wxCheckBox m_oCbxNOOPALT; wxCheckBox m_oCbxOPTS; wxCheckBox m_oCbxTRYTOCOM; wxCheckBox m_oCbxWARN; // Button controls wxButton m_oBtnOk; wxButton m_oBtnCancel; wxButton m_oBtnDefaults; // Storage for validated OPTION values CmdNgSpiceOPT m_oCmdOPT; // Object initialization functions void Initialize( void ); void Create ( void ); void ToolTips ( void ); void DoLayout ( void ); PnlValue * poGetPanel( int iPnlID ); void SetValues( CmdNgSpiceOPT & roCmdOPT ); void GetValues( CmdNgSpiceOPT & roCmdOPT ); public : DlgNgsCfgOPT( wxWindow * poWin ); ~DlgNgsCfgOPT( ); bool bClear( void ); bool bSetValues( CmdNgSpiceOPT & roCmdOPT ); bool bGetValues( CmdNgSpiceOPT & roCmdOPT ); bool bSetValue( int iPnlID, const wxString & rosValue ); const wxString & rosGetValue( int iPnlID ); // Event handlers void OnBtnOk ( wxCommandEvent & roEvtCmd ); void OnBtnDefaults( wxCommandEvent & roEvtCmd ); void OnBtnCancel ( wxCommandEvent & roEvtCmd ); // In order to be able to react to a menu command, it must be given a // unique identifier such as a const or an enum. enum eDlgItemID { ID_PNL_ABSTOL = 0, ID_PNL_CHGTOL , ID_PNL_CONVABSS, ID_PNL_CONVSTEP, ID_PNL_DEFL , ID_PNL_DEFW , ID_PNL_DEFAD , ID_PNL_DEFAS , ID_PNL_GMIN , ID_PNL_GMINSTEP, ID_PNL_ITL1 , ID_PNL_ITL2 , ID_PNL_ITL3 , ID_PNL_ITL4 , ID_PNL_ITL5 , ID_PNL_ITL6 , ID_PNL_MAXEVIT , ID_PNL_MAXOPALT, ID_PNL_MAXORD , ID_PNL_MAXWARNS, ID_PNL_PIVREL , ID_PNL_PIVTOL , ID_PNL_RAMPTIME, ID_PNL_RELTOL , ID_PNL_RSERIES , ID_PNL_RSHUNT , ID_PNL_SRCSTEPS, ID_PNL_TEMP , ID_PNL_TNOM , ID_PNL_TRTOL , ID_PNL_VNTOL , ID_CHO_METHOD , ID_CBX_BADMOS3 , ID_CBX_INTERP , ID_CBX_NOOPAC , ID_CBX_NOOPALT , ID_CBX_OPTS , ID_CBX_TRYTOCOM, ID_CBX_WARN , ID_BTN_OK , ID_BTN_DEFAULTS, ID_BTN_CANCEL , ID_UNUSED , // Assigned to controls for which events are not used ID_FST = ID_PNL_ABSTOL, ID_LST = ID_BTN_CANCEL }; // Leave this as the last line as private access is envoked by macro wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // DLGNGSCFGOPT_HPP gspiceui-1.1.00+dfsg/src/ngspice/dialogs/DlgNgsCfgSrc.hpp0000644000000000000000000001046012514070616021641 0ustar rootroot//************************************************************************************************** // DlgNgsCfgSrc.hpp * // ------------------ * // Description : This dialogue is used to enter values associated with an NG-Spice independent * // voltage source definition. It is used for Transient analysis and is based on a * // pulse function. * // Started : 2005-05-10 * // Last Update : 2015-04-17 * // Copyright : (C) 2005 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef DLGNGSCFGSRC_HPP #define DLGNGSCFGSRC_HPP // Application Includes #include "TypeDefs.hpp" #include "utility/PnlValue.hpp" #include "netlist/CpntNgsIndSrc.hpp" // wxWidgets Includes #include //************************************************************************************************** class DlgNgsCfgSrc : public wxDialog { private : // Value panel controls for a sinusoidal source PnlValue m_oPnlSinAmp; PnlValue m_oPnlSinFreq; PnlValue m_oPnlSinOffset; PnlValue m_oPnlSinDelay; PnlValue m_oPnlSinDamp; // Value panel controls for a pulse source PnlValue m_oPnlPulInitial; PnlValue m_oPnlPulMax; PnlValue m_oPnlPulDelay; PnlValue m_oPnlPulRise; PnlValue m_oPnlPulWidth; PnlValue m_oPnlPulFall; PnlValue m_oPnlPulPeriod; // Button controls wxButton m_oBtnOk; wxButton m_oBtnClear; wxButton m_oBtnCancel; // Storage for validated Independent Source values CpntNgsIndSrc m_oCpntIndSrc; // Object initialization functions void Initialize( void ); void Create ( void ); void ToolTips ( void ); void DoLayout ( void ); void SetValues( CpntNgsIndSrc & roCpntSrc ); void GetValues( CpntNgsIndSrc & roCpntSrc ); public : DlgNgsCfgSrc( wxWindow * poWin ); ~DlgNgsCfgSrc( ); bool bClear( void ); bool bSetValues( CpntNgsIndSrc & roCpntSrc ); bool bGetValues( CpntNgsIndSrc & roCpntSrc ); bool bSetName( wxString & rosName ); // Event handlers void OnBtnOk ( wxCommandEvent & roEvtCmd ); void OnBtnClear ( wxCommandEvent & roEvtCmd ); void OnBtnCancel( wxCommandEvent & roEvtCmd ); // In order to be able to react to a menu command, it must be given a // unique identifier such as a const or an enum. enum eDlgItemID { ID_PNL_SIN_OFFSET = 0, ID_PNL_SIN_AMP, ID_PNL_SIN_FREQ, ID_PNL_SIN_DELAY, ID_PNL_SIN_DAMP, ID_PNL_PUL_INITV, ID_PNL_PUL_MAXV, ID_PNL_PUL_DELAY, ID_PNL_PUL_RISE, ID_PNL_PUL_WIDTH, ID_PNL_PUL_FALL, ID_PNL_PUL_PERIOD, ID_BTN_OK, ID_BTN_CLEAR, ID_BTN_CANCEL, ID_UNUSED, // Assigned to controls for which events are not used ID_PNL_FST = ID_PNL_SIN_OFFSET, ID_PNL_LST = ID_PNL_PUL_PERIOD, ID_FST = ID_PNL_SIN_OFFSET, ID_LST = ID_BTN_CANCEL }; // Leave this as the last line as private access is envoked by macro wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // DLGNGSCFGSRC_HPP gspiceui-1.1.00+dfsg/src/ngspice/dialogs/DlgNgsCfgOPT.cpp0000644000000000000000000010025612463654015021556 0ustar rootroot//************************************************************************************************** // DlgNgsCfgOPT.cpp * // ------------------ * // Started : 2006-03-03 * // Last Update : 2015-02-02 * // Copyright : (C) 2006 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "DlgNgsCfgOPT.hpp" //************************************************************************************************** // Implement an event table. wxBEGIN_EVENT_TABLE( DlgNgsCfgOPT, wxDialog ) EVT_BUTTON( DlgNgsCfgOPT::ID_BTN_OK , DlgNgsCfgOPT::OnBtnOk ) EVT_BUTTON( DlgNgsCfgOPT::ID_BTN_DEFAULTS, DlgNgsCfgOPT::OnBtnDefaults ) EVT_BUTTON( DlgNgsCfgOPT::ID_BTN_CANCEL , DlgNgsCfgOPT::OnBtnCancel ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. // // Argument List : // poWin - A pointer to the dialog parent window DlgNgsCfgOPT::DlgNgsCfgOPT( wxWindow * poWin ) : wxDialog( poWin, -1, wxT(""), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE, wxDialogNameStr ) { SetTitle( wxT(" NG-Spice OPTIONS Line Setup") ); Initialize( ); bClear( ); } //************************************************************************************************** // Destructor. DlgNgsCfgOPT::~DlgNgsCfgOPT( ) { } //************************************************************************************************** // Initialize object attributes. void DlgNgsCfgOPT::Initialize( void ) { // Call all the initialization functions Create( ); ToolTips( ); // Layout the of the display objects DoLayout( ); } //************************************************************************************************** // Create the display objects. void DlgNgsCfgOPT::Create( void ) { wxPanel * poPnlLHS, * poPnlMID, * poPnlRHS, * poPnlRHS1, * poPnlBtns; wxSize oSizeCbx; int iWdName=85, iWdValue=95, iWdUnits=80; // Create the necessary panel objects poPnlLHS = new wxPanel( this ); poPnlMID = new wxPanel( this ); poPnlRHS = new wxPanel( this ); poPnlRHS1 = new wxPanel( poPnlRHS ); poPnlBtns = new wxPanel( poPnlRHS ); // Create the PnlValue controls m_oPnlABSTOL .bCreate( poPnlLHS , ID_PNL_ABSTOL , iWdName, iWdValue, iWdUnits ); m_oPnlCHGTOL .bCreate( poPnlLHS , ID_PNL_CHGTOL , iWdName, iWdValue, iWdUnits ); m_oPnlPIVTOL .bCreate( poPnlLHS , ID_PNL_PIVTOL , iWdName, iWdValue, iWdUnits ); m_oPnlRELTOL .bCreate( poPnlLHS , ID_PNL_RELTOL , iWdName, iWdValue, iWdUnits ); m_oPnlTRTOL .bCreate( poPnlLHS , ID_PNL_TRTOL , iWdName, iWdValue, iWdUnits ); m_oPnlVNTOL .bCreate( poPnlLHS , ID_PNL_VNTOL , iWdName, iWdValue, iWdUnits ); m_oPnlPIVREL .bCreate( poPnlLHS , ID_PNL_PIVREL , iWdName, iWdValue, iWdUnits ); m_oPnlDEFL .bCreate( poPnlLHS , ID_PNL_DEFL , iWdName, iWdValue, iWdUnits ); m_oPnlDEFW .bCreate( poPnlLHS , ID_PNL_DEFW , iWdName, iWdValue, iWdUnits ); m_oPnlDEFAD .bCreate( poPnlLHS , ID_PNL_DEFAD , iWdName, iWdValue, iWdUnits ); m_oPnlDEFAS .bCreate( poPnlLHS , ID_PNL_DEFAS , iWdName, iWdValue, iWdUnits ); m_oPnlTEMP .bCreate( poPnlLHS , ID_PNL_TEMP , iWdName, iWdValue, iWdUnits ); m_oPnlTNOM .bCreate( poPnlLHS , ID_PNL_TNOM , iWdName, iWdValue, iWdUnits ); m_oPnlCONVABSS.bCreate( poPnlLHS , ID_PNL_CONVABSS, iWdName, iWdValue, iWdUnits ); m_oPnlCONVSTEP.bCreate( poPnlMID , ID_PNL_CONVSTEP, iWdName, iWdValue, iWdUnits ); m_oPnlGMIN .bCreate( poPnlMID , ID_PNL_GMIN , iWdName, iWdValue, iWdUnits ); m_oPnlRSERIES .bCreate( poPnlMID , ID_PNL_RSERIES , iWdName, iWdValue, iWdUnits ); m_oPnlRSHUNT .bCreate( poPnlMID , ID_PNL_RSHUNT , iWdName, iWdValue, iWdUnits ); m_oPnlRAMPTIME.bCreate( poPnlMID , ID_PNL_RAMPTIME, iWdName, iWdValue, iWdUnits ); m_oPnlITL1 .bCreate( poPnlMID , ID_PNL_ITL1 , iWdName, iWdValue, iWdUnits ); m_oPnlITL2 .bCreate( poPnlMID , ID_PNL_ITL2 , iWdName, iWdValue, iWdUnits ); m_oPnlITL3 .bCreate( poPnlMID , ID_PNL_ITL3 , iWdName, iWdValue, iWdUnits ); m_oPnlITL4 .bCreate( poPnlMID , ID_PNL_ITL4 , iWdName, iWdValue, iWdUnits ); m_oPnlITL5 .bCreate( poPnlMID , ID_PNL_ITL5 , iWdName, iWdValue, iWdUnits ); m_oPnlITL6 .bCreate( poPnlMID , ID_PNL_ITL6 , iWdName, iWdValue, iWdUnits ); m_oPnlSRCSTEPS.bCreate( poPnlMID , ID_PNL_SRCSTEPS, iWdName, iWdValue, iWdUnits ); m_oPnlGMINSTEP.bCreate( poPnlMID , ID_PNL_GMINSTEP, iWdName, iWdValue, iWdUnits ); m_oPnlMAXEVIT .bCreate( poPnlMID , ID_PNL_MAXEVIT , iWdName, iWdValue, iWdUnits ); m_oPnlMAXOPALT.bCreate( poPnlRHS1, ID_PNL_MAXOPALT, iWdName, iWdValue, iWdUnits ); m_oPnlMAXORD .bCreate( poPnlRHS1, ID_PNL_MAXORD , iWdName, iWdValue, iWdUnits ); m_oPnlMAXWARNS.bCreate( poPnlRHS1, ID_PNL_MAXWARNS, iWdName, iWdValue, iWdUnits ); m_oPnlABSTOL .bSetName( wxT("ABSTOL") ); m_oPnlCHGTOL .bSetName( wxT("CHGTOL") ); m_oPnlCONVABSS.bSetName( wxT("CONVABSS") ); m_oPnlCONVSTEP.bSetName( wxT("CONVSTEP") ); m_oPnlDEFL .bSetName( wxT("DEFL") ); m_oPnlDEFW .bSetName( wxT("DEFW") ); m_oPnlDEFAD .bSetName( wxT("DEFAD") ); m_oPnlDEFAS .bSetName( wxT("DEFAS") ); m_oPnlGMIN .bSetName( wxT("GMIN") ); m_oPnlGMINSTEP.bSetName( wxT("GMINSTEP") ); m_oPnlITL1 .bSetName( wxT("ITL1") ); m_oPnlITL2 .bSetName( wxT("ITL2") ); m_oPnlITL3 .bSetName( wxT("ITL3") ); m_oPnlITL4 .bSetName( wxT("ITL4") ); m_oPnlITL5 .bSetName( wxT("ITL5") ); m_oPnlITL6 .bSetName( wxT("ITL6") ); m_oPnlMAXEVIT .bSetName( wxT("MAXEVIT") ); m_oPnlMAXOPALT.bSetName( wxT("MAXOPALT") ); m_oPnlMAXORD .bSetName( wxT("MAXORD") ); m_oPnlMAXWARNS.bSetName( wxT("MAXWARNS") ); m_oPnlPIVREL .bSetName( wxT("PIVREL") ); m_oPnlPIVTOL .bSetName( wxT("PIVTOL") ); m_oPnlRAMPTIME.bSetName( wxT("RAMPTIME") ); m_oPnlRELTOL .bSetName( wxT("RELTOL") ); m_oPnlRSERIES .bSetName( wxT("RSERIES") ); m_oPnlRSHUNT .bSetName( wxT("RSHUNT") ); m_oPnlSRCSTEPS.bSetName( wxT("SRCSTEPS") ); m_oPnlTEMP .bSetName( wxT("TEMP") ); m_oPnlTNOM .bSetName( wxT("TNOM") ); m_oPnlTRTOL .bSetName( wxT("TRTOL") ); m_oPnlVNTOL .bSetName( wxT("VNTOL") ); m_oPnlABSTOL .bSetUnitsType( eUNITS_CURR ); m_oPnlCHGTOL .bSetUnitsType( eUNITS_CHRG ); m_oPnlCONVABSS.bSetUnitsType( eUNITS_EXP ); m_oPnlCONVSTEP.bSetUnitsType( eUNITS_EXP ); m_oPnlGMIN .bSetUnitsType( eUNITS_COND ); m_oPnlPIVTOL .bSetUnitsType( eUNITS_EXP ); m_oPnlRAMPTIME.bSetUnitsType( eUNITS_TIME ); m_oPnlRSERIES .bSetUnitsType( eUNITS_RES ); m_oPnlRSHUNT .bSetUnitsType( eUNITS_RES ); m_oPnlTEMP .bSetUnitsType( eUNITS_TMPC ); m_oPnlTNOM .bSetUnitsType( eUNITS_TMPC ); m_oPnlVNTOL .bSetUnitsType( eUNITS_VOLT ); m_oPnlDEFL .bSetValueType( eVALUE_FLT ); m_oPnlDEFW .bSetValueType( eVALUE_FLT ); m_oPnlDEFAD .bSetValueType( eVALUE_SCI ); m_oPnlDEFAS .bSetValueType( eVALUE_SCI ); m_oPnlGMIN .bSetValueType( eVALUE_FLT ); m_oPnlGMINSTEP.bSetValueType( eVALUE_INT ); m_oPnlITL1 .bSetValueType( eVALUE_INT ); m_oPnlITL2 .bSetValueType( eVALUE_INT ); m_oPnlITL3 .bSetValueType( eVALUE_INT ); m_oPnlITL4 .bSetValueType( eVALUE_INT ); m_oPnlITL5 .bSetValueType( eVALUE_INT ); m_oPnlITL6 .bSetValueType( eVALUE_INT ); m_oPnlMAXEVIT .bSetValueType( eVALUE_INT ); m_oPnlMAXOPALT.bSetValueType( eVALUE_INT ); m_oPnlMAXORD .bSetValueType( eVALUE_INT ); m_oPnlMAXWARNS.bSetValueType( eVALUE_INT ); m_oPnlPIVREL .bSetValueType( eVALUE_FLT ); m_oPnlRELTOL .bSetValueType( eVALUE_FLT ); m_oPnlSRCSTEPS.bSetValueType( eVALUE_INT ); m_oPnlTRTOL .bSetValueType( eVALUE_FLT ); m_oPnlDEFL .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlDEFW .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlDEFAD .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlDEFAS .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlGMINSTEP.bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlITL1 .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlITL2 .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlITL3 .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlITL4 .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlITL5 .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlITL6 .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlMAXEVIT .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlMAXOPALT.bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlMAXORD .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlMAXWARNS.bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlPIVREL .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlRELTOL .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlSRCSTEPS.bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlTEMP .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlTNOM .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlTRTOL .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlDEFL .bSetUnits( wxT("uMetre") ); m_oPnlDEFW .bSetUnits( wxT("uMetre") ); m_oPnlDEFAD .bSetUnits( wxT("Metre²") ); m_oPnlDEFAS .bSetUnits( wxT("Metre²") ); m_oPnlPIVREL .bSetUnits( wxT("%") ); m_oPnlRELTOL .bSetUnits( wxT("%") ); m_oPnlDEFAD .bSetSpnRange( 1.0E-12, 1.0E-6 ); m_oPnlDEFAS .bSetSpnRange( 1.0E-12, 1.0E-6 ); m_oPnlDEFL .bSetSpnRange( 0.0 , 10000.0 ); m_oPnlDEFL .bSetSpnIncSz( 1.0 , 1000.0 ); m_oPnlDEFW .bSetSpnRange( 0.0 , 10000.0 ); m_oPnlDEFW .bSetSpnIncSz( 1.0 , 1000.0 ); m_oPnlTRTOL .bSetSpnRange( 0.01, 100.0 ); m_oPnlTRTOL .bSetSpnIncSz( 0.01, 10.0 ); m_oPnlPIVREL .bSetSpnRange( 0.01, 100.0 ); m_oPnlPIVREL.bSetSpnIncSz( 0.01, 10.0 ); m_oPnlRELTOL .bSetSpnRange( 0.01, 100.0 ); m_oPnlRELTOL.bSetSpnIncSz( 0.01, 10.0 ); m_oPnlITL1 .bSetSpnRange( 0, 1000 ); m_oPnlITL1 .bSetSpnIncSz( 1, 100 ); m_oPnlITL2 .bSetSpnRange( 0, 1000 ); m_oPnlITL2 .bSetSpnIncSz( 1, 100 ); m_oPnlITL3 .bSetSpnRange( 0, 1000 ); m_oPnlITL3 .bSetSpnIncSz( 1, 100 ); m_oPnlITL4 .bSetSpnRange( 0, 1000 ); m_oPnlITL4 .bSetSpnIncSz( 1, 100 ); m_oPnlITL5 .bSetSpnRange( 0, 10000 ); m_oPnlITL5 .bSetSpnIncSz( 1, 1000 ); m_oPnlITL6 .bSetSpnRange( 0, 1000 ); m_oPnlITL6 .bSetSpnIncSz( 1, 100 ); // Create the choice box control m_oChoMETHOD.bCreate( poPnlRHS1, ID_CHO_METHOD, iWdName, iWdValue ); m_oChoMETHOD.m_oLblName.SetLabel( wxT("METHOD") ); m_oChoMETHOD.m_oChoice.Append( wxT("Trap") ); m_oChoMETHOD.m_oChoice.Append( wxT("Gear") ); // Set height of check box controls according to size of PnlValue object oSizeCbx.SetWidth ( 250 ); oSizeCbx.SetHeight( GUI_CTRL_HT+3 ); // Create the check box control m_oCbxBADMOS3 .Create( poPnlRHS1, ID_CBX_BADMOS3 , wxT("BADMOS3 \t ") , wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); m_oCbxINTERP .Create( poPnlRHS1, ID_CBX_INTERP , wxT("INTERP \t\t "), wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); m_oCbxNOOPAC .Create( poPnlRHS1, ID_CBX_NOOPAC , wxT("NOOPAC \t ") , wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); m_oCbxNOOPALT .Create( poPnlRHS1, ID_CBX_NOOPALT , wxT("NOOPALT \t ") , wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); m_oCbxOPTS .Create( poPnlRHS1, ID_CBX_OPTS , wxT("OPTS \t\t "), wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); m_oCbxTRYTOCOM.Create( poPnlRHS1, ID_CBX_TRYTOCOM, wxT("TRYTOCOM \t ") , wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); m_oCbxWARN .Create( poPnlRHS1, ID_CBX_WARN , wxT("WARN \t\t "), wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); // Create the buttons m_oBtnOk .Create( poPnlBtns, ID_BTN_OK, wxT("OK") ); m_oBtnDefaults.Create( poPnlBtns, ID_BTN_DEFAULTS, wxT("Defaults") ); m_oBtnCancel .Create( poPnlBtns, ID_BTN_CANCEL, wxT("Cancel") ); } //************************************************************************************************** // Initialize the tool tips. void DlgNgsCfgOPT::ToolTips( void ) { // Define tool tips for each control m_oPnlABSTOL .SetToolTip( wxT(" Absolute current error tolerance ") ); m_oPnlCHGTOL .SetToolTip( wxT(" Charge tolerance (in Coulomb) ") ); m_oPnlCONVABSS.SetToolTip( wxT(" Absolute step limit applied to code models ") ); m_oPnlCONVSTEP.SetToolTip( wxT(" Relative step limit applied to code models ") ); m_oPnlDEFL .SetToolTip( wxT(" MOSFET default channel length ") ); m_oPnlDEFW .SetToolTip( wxT(" MOSFET default channel width ") ); m_oPnlDEFAD .SetToolTip( wxT(" MOSFET default drain diffusion area ") ); m_oPnlDEFAS .SetToolTip( wxT(" MOSFET default source diffusion area ") ); m_oPnlGMIN .SetToolTip( wxT(" Minimum allowable conductance (in Siemen)") ); m_oPnlGMINSTEP.SetToolTip( wxT(" Number of GMIN steps to be attempted ") ); m_oPnlITL1 .SetToolTip( wxT(" DC iteration limit ") ); m_oPnlITL2 .SetToolTip( wxT(" DC transfer curve iteration limit ") ); m_oPnlITL3 .SetToolTip( wxT(" Transient analysis lower iteration limit ") ); m_oPnlITL4 .SetToolTip( wxT(" Transient analysis timepoint iteration limit ") ); m_oPnlITL5 .SetToolTip( wxT(" Transient analysis total iteration limit ") ); m_oPnlITL6 .SetToolTip( wxT(" Source stepping iteration limit (synonym for SRCSTEPS) ") ); m_oPnlMAXEVIT .SetToolTip( wxT(" Maximum event iterations at an analysis point ") ); m_oPnlMAXOPALT.SetToolTip( wxT(" Maximum analog/event alternations in OP analysis ") ); m_oPnlMAXORD .SetToolTip( wxT(" Maximum order for the numerical integration method ") ); m_oPnlMAXWARNS.SetToolTip( wxT(" Maximum number of SOA (Safe Operating Area) voltage warning messages ") ); m_oPnlPIVREL .SetToolTip( wxT(" Relative ratio between largest column entry and an acceptable pivot value ") ); m_oPnlPIVTOL .SetToolTip( wxT(" Absolute minimum value for matrix entry as pivot ") ); m_oPnlRAMPTIME.SetToolTip( wxT(" Transient analysis supply ramping time ") ); m_oPnlRELTOL .SetToolTip( wxT(" Relative error tolerance ") ); m_oPnlRSERIES .SetToolTip( wxT(" Adds a resistor to each inductor in the circuit ") ); m_oPnlRSHUNT .SetToolTip( wxT(" Adds a resistor from each analogue node to ground ") ); m_oPnlSRCSTEPS.SetToolTip( wxT(" Source stepping iteration limit ") ); m_oPnlTEMP .SetToolTip( wxT(" Operating temperature of circuit ") ); m_oPnlTNOM .SetToolTip( wxT(" Nominal temperature at which device parameters measured ") ); m_oPnlTRTOL .SetToolTip( wxT(" Transient error tolerance ") ); m_oPnlVNTOL .SetToolTip( wxT(" Absolute voltage error tolerance ") ); m_oCbxBADMOS3 .SetToolTip( wxT(" Use MOS3 model with \"kappa\" discontinuity ") ); m_oCbxINTERP .SetToolTip( wxT(" Interpolate output data onto fixed time steps ") ); m_oCbxNOOPAC .SetToolTip( wxT(" Don't do an OP analysis before the AC analysis ") ); m_oCbxNOOPALT .SetToolTip( wxT(" Analog/event alternation in OP analysis ") ); m_oCbxOPTS .SetToolTip( wxT(" Enable printing of option values ") ); m_oCbxTRYTOCOM.SetToolTip( wxT(" Try to condense LTRA model's past history ") ); m_oCbxWARN .SetToolTip( wxT(" Enable SOA (Safe Operating Area) voltage warning messages ") ); m_oChoMETHOD.GetParent( )->SetToolTip( wxT(" Numerical integration method ") ); } //************************************************************************************************** // Layout the dialog display objects. void DlgNgsCfgOPT::DoLayout( void ) { wxBoxSizer * poSzrDlg; wxPanel * poPnlLHS, * poPnlMID, * poPnlRHS, * poPnlRHS1, * poPnlBtns; wxBoxSizer * poSzrLHS, * poSzrMID, * poSzrRHS, * poSzrRHS1, * poSzrBtns; wxSizerFlags oFlags; // Get pointers to the various panels poPnlLHS = (wxPanel *) m_oPnlABSTOL .GetParent( ); poPnlMID = (wxPanel *) m_oPnlRSERIES .GetParent( ); poPnlRHS1 = (wxPanel *) m_oPnlMAXWARNS.GetParent( ); poPnlBtns = (wxPanel *) m_oBtnOk .GetParent( ); poPnlRHS = (wxPanel *) poPnlBtns ->GetParent( ); // Create sizers to associate with the panels poSzrDlg = new wxBoxSizer ( wxHORIZONTAL ); poSzrLHS = new wxStaticBoxSizer( wxVERTICAL, poPnlLHS , wxT("") ); poSzrMID = new wxStaticBoxSizer( wxVERTICAL, poPnlMID , wxT("") ); poSzrRHS1 = new wxStaticBoxSizer( wxVERTICAL, poPnlRHS1, wxT("") ); poSzrBtns = new wxBoxSizer ( wxHORIZONTAL ); poSzrRHS = new wxBoxSizer ( wxVERTICAL ); // Set the sizers to the panels SetSizer( poSzrDlg ); poPnlLHS ->SetSizer( poSzrLHS ); poPnlMID ->SetSizer( poSzrMID ); poPnlRHS ->SetSizer( poSzrRHS ); poPnlRHS1->SetSizer( poSzrRHS1 ); poPnlBtns->SetSizer( poSzrBtns ); // Layout the left hand panel oFlags.Align( wxALIGN_LEFT ); oFlags.Border( wxTOP | wxLEFT | wxRIGHT, 10 ); poSzrLHS->Add( &m_oPnlABSTOL , oFlags ); oFlags.Border( wxLEFT , 10 ); poSzrLHS->Add( &m_oPnlCHGTOL , oFlags ); poSzrLHS->Add( &m_oPnlPIVTOL , oFlags ); poSzrLHS->Add( &m_oPnlRELTOL , oFlags ); poSzrLHS->Add( &m_oPnlTRTOL , oFlags ); poSzrLHS->Add( &m_oPnlVNTOL , oFlags ); poSzrLHS->Add( &m_oPnlPIVREL , oFlags ); poSzrLHS->Add( &m_oPnlDEFL , oFlags ); poSzrLHS->Add( &m_oPnlDEFW , oFlags ); poSzrLHS->Add( &m_oPnlDEFAD , oFlags ); poSzrLHS->Add( &m_oPnlDEFAS , oFlags ); poSzrLHS->Add( &m_oPnlTEMP , oFlags ); poSzrLHS->Add( &m_oPnlTNOM , oFlags ); oFlags.Border( wxLEFT | wxBOTTOM , 10 ); poSzrLHS->Add( &m_oPnlCONVABSS, oFlags ); // Layout the middle panel oFlags.Border( wxTOP | wxLEFT | wxRIGHT, 10 ); poSzrMID->Add( &m_oPnlCONVSTEP, oFlags ); oFlags.Border( wxLEFT , 10 ); poSzrMID->Add( &m_oPnlGMIN , oFlags ); poSzrMID->Add( &m_oPnlRSERIES , oFlags ); poSzrMID->Add( &m_oPnlRSHUNT , oFlags ); poSzrMID->Add( &m_oPnlRAMPTIME, oFlags ); poSzrMID->Add( &m_oPnlITL1 , oFlags ); poSzrMID->Add( &m_oPnlITL2 , oFlags ); poSzrMID->Add( &m_oPnlITL3 , oFlags ); poSzrMID->Add( &m_oPnlITL4 , oFlags ); poSzrMID->Add( &m_oPnlITL5 , oFlags ); poSzrMID->Add( &m_oPnlITL6 , oFlags ); poSzrMID->Add( &m_oPnlSRCSTEPS, oFlags ); poSzrMID->Add( &m_oPnlGMINSTEP, oFlags ); oFlags.Border( wxLEFT | wxBOTTOM , 10 ); poSzrMID->Add( &m_oPnlMAXEVIT , oFlags ); // Layout the right hand options panel oFlags.Border( wxTOP | wxLEFT | wxRIGHT, 10 ); poSzrRHS1->Add( &m_oPnlMAXOPALT, oFlags ); oFlags.Border( wxLEFT , 10 ); poSzrRHS1->Add( &m_oPnlMAXORD , oFlags ); poSzrRHS1->Add( &m_oPnlMAXWARNS, oFlags ); poSzrRHS1->Add( &m_oChoMETHOD , oFlags ); oFlags.Border( wxLEFT , 7 ); poSzrRHS1->Add( &m_oCbxBADMOS3 , oFlags ); poSzrRHS1->Add( &m_oCbxINTERP , oFlags ); poSzrRHS1->Add( &m_oCbxNOOPAC , oFlags ); poSzrRHS1->Add( &m_oCbxNOOPALT , oFlags ); poSzrRHS1->Add( &m_oCbxOPTS , oFlags ); poSzrRHS1->Add( &m_oCbxTRYTOCOM, oFlags ); oFlags.Border( wxLEFT | wxBOTTOM , 7 ); poSzrRHS1->Add( &m_oCbxWARN , oFlags ); // Layout the buttons panel oFlags.Align( wxALIGN_RIGHT ); oFlags.Border( wxTOP | wxBOTTOM , 12 ); poSzrBtns->Add( &m_oBtnOk , oFlags ); poSzrBtns->AddSpacer( 10 ); oFlags.Align( wxALIGN_CENTER ); poSzrBtns->Add( &m_oBtnDefaults, oFlags ); poSzrBtns->AddSpacer( 10 ); oFlags.Align( wxALIGN_LEFT ); poSzrBtns->Add( &m_oBtnCancel , oFlags ); // Layout the right hand panel oFlags.Align( wxALIGN_CENTER ); oFlags.Border( wxALL , 0 ); poSzrRHS->Add( poPnlRHS1 , oFlags ); oFlags.Border( wxTOP , 43 ); poSzrRHS->Add( poPnlBtns, oFlags ); // Layout the overall dialog oFlags.Border( wxALL , 15 ); poSzrDlg->Add( poPnlLHS , oFlags ); oFlags.Border( wxTOP | wxBOTTOM , 15 ); poSzrDlg->Add( poPnlMID , oFlags ); oFlags.Border( wxALL , 15 ); poSzrDlg->Add( poPnlRHS , oFlags ); // Set dialogues minimum size and initial size as calculated by the sizer poSzrLHS ->SetSizeHints( poPnlLHS ); poSzrMID ->SetSizeHints( poPnlMID ); poSzrRHS1->SetSizeHints( poPnlRHS1 ); poSzrBtns->SetSizeHints( poPnlBtns ); poSzrRHS ->SetSizeHints( poPnlRHS ); poSzrDlg ->SetSizeHints( this ); } //************************************************************************************************** // Get a pointer to a value panel associated with a control ID number. // // Argument List : // iPnlID - The control ID number // // Return Values : // Success - A pointer to the value panel // Failure - NULL PnlValue * DlgNgsCfgOPT::poGetPanel( int iPnlID ) { switch( iPnlID ) { case ID_PNL_ABSTOL : return( &m_oPnlABSTOL ); case ID_PNL_CHGTOL : return( &m_oPnlCHGTOL ); case ID_PNL_CONVABSS : return( &m_oPnlCONVABSS ); case ID_PNL_CONVSTEP : return( &m_oPnlCONVSTEP ); case ID_PNL_DEFL : return( &m_oPnlDEFL ); case ID_PNL_DEFW : return( &m_oPnlDEFW ); case ID_PNL_DEFAD : return( &m_oPnlDEFAD ); case ID_PNL_DEFAS : return( &m_oPnlDEFAS ); case ID_PNL_GMIN : return( &m_oPnlGMIN ); case ID_PNL_GMINSTEP : return( &m_oPnlGMINSTEP ); case ID_PNL_ITL1 : return( &m_oPnlITL1 ); case ID_PNL_ITL2 : return( &m_oPnlITL2 ); case ID_PNL_ITL3 : return( &m_oPnlITL3 ); case ID_PNL_ITL4 : return( &m_oPnlITL4 ); case ID_PNL_ITL5 : return( &m_oPnlITL5 ); case ID_PNL_ITL6 : return( &m_oPnlITL6 ); case ID_PNL_MAXEVIT : return( &m_oPnlMAXEVIT ); case ID_PNL_MAXOPALT : return( &m_oPnlMAXOPALT ); case ID_PNL_MAXORD : return( &m_oPnlMAXORD ); case ID_PNL_MAXWARNS : return( &m_oPnlMAXWARNS ); case ID_PNL_PIVREL : return( &m_oPnlPIVREL ); case ID_PNL_PIVTOL : return( &m_oPnlPIVTOL ); case ID_PNL_RAMPTIME : return( &m_oPnlRAMPTIME ); case ID_PNL_RELTOL : return( &m_oPnlRELTOL ); case ID_PNL_RSERIES : return( &m_oPnlRSERIES ); case ID_PNL_RSHUNT : return( &m_oPnlRSHUNT ); case ID_PNL_SRCSTEPS : return( &m_oPnlSRCSTEPS ); case ID_PNL_TEMP : return( &m_oPnlTEMP ); case ID_PNL_TNOM : return( &m_oPnlTNOM ); case ID_PNL_TRTOL : return( &m_oPnlTRTOL ); case ID_PNL_VNTOL : return( &m_oPnlVNTOL ); default : return( NULL ); } } //************************************************************************************************** // Set the values in the value panel controls. // // Argument List : // rosCmdOPT - A reference to an OPTION command object void DlgNgsCfgOPT::SetValues( CmdNgSpiceOPT & roCmdOPT ) { wxString os1; uint ui1; SetEvtHandlerEnabled( false ); m_oPnlABSTOL .bSetValue( roCmdOPT.m_osABSTOL ); m_oPnlCHGTOL .bSetValue( roCmdOPT.m_osCHGTOL ); m_oPnlCONVABSS.bSetValue( roCmdOPT.m_osCONVABSS ); m_oPnlCONVSTEP.bSetValue( roCmdOPT.m_osCONVSTEP ); m_oPnlDEFL .bSetValue( roCmdOPT.m_osDEFL ); m_oPnlDEFW .bSetValue( roCmdOPT.m_osDEFW ); m_oPnlDEFAD .bSetValue( roCmdOPT.m_osDEFAD ); m_oPnlDEFAS .bSetValue( roCmdOPT.m_osDEFAS ); m_oPnlGMIN .bSetValue( roCmdOPT.m_osGMIN ); m_oPnlGMINSTEP.bSetValue( roCmdOPT.m_osGMINSTEP ); m_oPnlITL1 .bSetValue( roCmdOPT.m_osITL1 ); m_oPnlITL2 .bSetValue( roCmdOPT.m_osITL2 ); m_oPnlITL3 .bSetValue( roCmdOPT.m_osITL3 ); m_oPnlITL4 .bSetValue( roCmdOPT.m_osITL4 ); m_oPnlITL5 .bSetValue( roCmdOPT.m_osITL5 ); m_oPnlITL6 .bSetValue( roCmdOPT.m_osITL6 ); m_oPnlMAXEVIT .bSetValue( roCmdOPT.m_osMAXEVIT ); m_oPnlMAXOPALT.bSetValue( roCmdOPT.m_osMAXOPALT ); m_oPnlMAXORD .bSetValue( roCmdOPT.m_osMAXORD ); m_oPnlMAXWARNS.bSetValue( roCmdOPT.m_osMAXWARNS ); m_oPnlPIVREL .bSetValue( roCmdOPT.m_osPIVREL ); m_oPnlPIVTOL .bSetValue( roCmdOPT.m_osPIVTOL ); m_oPnlRAMPTIME.bSetValue( roCmdOPT.m_osRAMPTIME ); m_oPnlRELTOL .bSetValue( roCmdOPT.m_osRELTOL ); m_oPnlRSERIES .bSetValue( roCmdOPT.m_osRSERIES ); m_oPnlRSHUNT .bSetValue( roCmdOPT.m_osRSHUNT ); m_oPnlSRCSTEPS.bSetValue( roCmdOPT.m_osSRCSTEPS ); m_oPnlTEMP .bSetValue( roCmdOPT.m_osTEMP ); m_oPnlTNOM .bSetValue( roCmdOPT.m_osTNOM ); m_oPnlTRTOL .bSetValue( roCmdOPT.m_osTRTOL ); m_oPnlVNTOL .bSetValue( roCmdOPT.m_osVNTOL ); m_oCbxBADMOS3 . SetValue( roCmdOPT.m_bBADMOS3 ); m_oCbxINTERP . SetValue( roCmdOPT.m_bINTERP ); m_oCbxNOOPAC . SetValue( roCmdOPT.m_bNOOPAC ); m_oCbxNOOPALT . SetValue( roCmdOPT.m_bNOOPALT ); m_oCbxOPTS . SetValue( roCmdOPT.m_bOPTS ); m_oCbxTRYTOCOM. SetValue( roCmdOPT.m_bTRYTOCOM ); m_oCbxWARN . SetValue( roCmdOPT.m_bWARN ); for( ui1=0; ui1rosGetValue( ) ); } //************************************************************************************************** // Set a value panel control's value. // // Argument List : // iPnlID - Value panel control identifier // rosValue - The value to set // // Return Values : // true - Success // false - Failure bool DlgNgsCfgOPT::bSetValue( int iPnlID, const wxString & rosValue ) { PnlValue * poPnlValue; // Get a pointer to the appropriate value panel poPnlValue = poGetPanel( iPnlID ); if( poPnlValue == NULL ) return( false ); // Set the panel value if( ! poPnlValue->bSetValue( rosValue ) ) return( false ); // Update the OPTIONS command object GetValues( m_oCmdOPT ); return( true ); } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // Ok button event handler. // // Argument List : // roEvtCmd - An object holding information about the event (not used) void DlgNgsCfgOPT::OnBtnOk( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { GetValues( m_oCmdOPT ); EndModal( wxID_OK ); } //************************************************************************************************** // Defaults button event handler. // // Argument List : // roEvtCmd - An object holding information about the event (not used) void DlgNgsCfgOPT::OnBtnDefaults( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { CmdNgSpiceOPT oCmdOPT; oCmdOPT.bSetDefaults( ); SetValues( oCmdOPT ); } //************************************************************************************************** // Cancel button event handler. // // Argument List : // roEvtCmd - An object holding information about the event (not used) void DlgNgsCfgOPT::OnBtnCancel( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { SetValues( m_oCmdOPT ); EndModal( wxID_CANCEL ); } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/ngspice/dialogs/DlgNgsCfgSrc.cpp0000644000000000000000000003553712514070616021650 0ustar rootroot//************************************************************************************************** // DlgNgsCfgSrc.hpp * // ------------------ * // Started : 2005-05-13 * // Last Update : 2015-04-17 * // Copyright : (C) 2005 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "DlgNgsCfgSrc.hpp" //************************************************************************************************** // Implement an event table. wxBEGIN_EVENT_TABLE( DlgNgsCfgSrc, wxDialog ) EVT_BUTTON( ID_BTN_OK, DlgNgsCfgSrc::OnBtnOk ) EVT_BUTTON( ID_BTN_CLEAR, DlgNgsCfgSrc::OnBtnClear ) EVT_BUTTON( ID_BTN_CANCEL, DlgNgsCfgSrc::OnBtnCancel ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. // // Argument List : // poWin - A pointer to the dialog parent window DlgNgsCfgSrc::DlgNgsCfgSrc( wxWindow * poWin ) : wxDialog( poWin, -1, wxT(""), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE, wxDialogNameStr ) { SetTitle( wxT("Signal Source Setup") ); Initialize( ); bClear( ); } //************************************************************************************************** // Destructor. DlgNgsCfgSrc::~DlgNgsCfgSrc( ) { } //************************************************************************************************** // Initialize object attributes. void DlgNgsCfgSrc::Initialize( void ) { // Call all the initialization functions Create( ); ToolTips( ); // Layout the of the display objects DoLayout( ); } //************************************************************************************************** // Create the display objects. void DlgNgsCfgSrc::Create( void ) { wxPanel * poPnlSine, * poPnlPulse, * poPnlBtns; int iWdName=115, iWdValue=95, iWdUnits=75; // Create the various underlying panel objects poPnlSine = new wxPanel( this ); poPnlPulse = new wxPanel( this ); poPnlBtns = new wxPanel( this ); // Create the Sinusoid panel controls m_oPnlSinAmp .bCreate( poPnlSine, ID_PNL_SIN_AMP , iWdName, iWdValue, iWdUnits ); m_oPnlSinFreq .bCreate( poPnlSine, ID_PNL_SIN_FREQ , iWdName, iWdValue, iWdUnits ); m_oPnlSinOffset.bCreate( poPnlSine, ID_PNL_SIN_OFFSET, iWdName, iWdValue, iWdUnits ); m_oPnlSinDelay .bCreate( poPnlSine, ID_PNL_SIN_DELAY , iWdName, iWdValue, iWdUnits ); m_oPnlSinDamp .bCreate( poPnlSine, ID_PNL_SIN_DAMP , iWdName, iWdValue, iWdUnits ); m_oPnlSinAmp .bSetName( wxT("Amplitude") ); m_oPnlSinFreq .bSetName( wxT("Frequency") ); m_oPnlSinOffset.bSetName( wxT("DC Offset") ); m_oPnlSinDelay .bSetName( wxT("Initial Delay") ); m_oPnlSinDamp .bSetName( wxT("Damping Factor") ); m_oPnlSinAmp .bSetUnitsType( eUNITS_VOLT ); m_oPnlSinFreq .bSetUnitsType( eUNITS_FREQ ); m_oPnlSinOffset.bSetUnitsType( eUNITS_VOLT ); m_oPnlSinDelay .bSetUnitsType( eUNITS_TIME ); m_oPnlSinDamp .bShowUnits( PnlValue::eSHOW_LBL ); // Create the Pulse panel controls m_oPnlPulInitial.bCreate( poPnlPulse, ID_PNL_PUL_INITV , iWdName, iWdValue, iWdUnits ); m_oPnlPulMax .bCreate( poPnlPulse, ID_PNL_PUL_MAXV , iWdName, iWdValue, iWdUnits ); m_oPnlPulDelay .bCreate( poPnlPulse, ID_PNL_PUL_DELAY , iWdName, iWdValue, iWdUnits ); m_oPnlPulRise .bCreate( poPnlPulse, ID_PNL_PUL_RISE , iWdName, iWdValue, iWdUnits ); m_oPnlPulWidth .bCreate( poPnlPulse, ID_PNL_PUL_WIDTH , iWdName, iWdValue, iWdUnits ); m_oPnlPulFall .bCreate( poPnlPulse, ID_PNL_PUL_FALL , iWdName, iWdValue, iWdUnits ); m_oPnlPulPeriod .bCreate( poPnlPulse, ID_PNL_PUL_PERIOD, iWdName, iWdValue, iWdUnits ); m_oPnlPulInitial.bSetName( wxT("Initial Value") ); m_oPnlPulMax .bSetName( wxT("Pulsed Value") ); m_oPnlPulDelay .bSetName( wxT("Initial Delay") ); m_oPnlPulRise .bSetName( wxT("Rise Time") ); m_oPnlPulWidth .bSetName( wxT("Pulse Width") ); m_oPnlPulFall .bSetName( wxT("Fall Time") ); m_oPnlPulPeriod .bSetName( wxT("Period") ); m_oPnlPulInitial.bSetUnitsType( eUNITS_VOLT ); m_oPnlPulMax .bSetUnitsType( eUNITS_VOLT ); m_oPnlPulDelay .bSetUnitsType( eUNITS_TIME ); m_oPnlPulRise .bSetUnitsType( eUNITS_TIME ); m_oPnlPulWidth .bSetUnitsType( eUNITS_TIME ); m_oPnlPulFall .bSetUnitsType( eUNITS_TIME ); m_oPnlPulPeriod .bSetUnitsType( eUNITS_TIME ); // Create buttons panel and the button controls m_oBtnOk .Create( poPnlBtns, ID_BTN_OK, wxT("OK") ); m_oBtnClear .Create( poPnlBtns, ID_BTN_CLEAR, wxT("Clear") ); m_oBtnCancel.Create( poPnlBtns, ID_BTN_CANCEL, wxT("Cancel") ); } //************************************************************************************************** // Initialize the tool tips. void DlgNgsCfgSrc::ToolTips( void ) { m_oPnlSinAmp .SetToolTip( wxT("The amplitude of the sinusoidal signal") ); m_oPnlSinFreq .SetToolTip( wxT("The frequency of the sinusoidal signal") ); m_oPnlSinOffset .SetToolTip( wxT("The DC offset of the sinusoidal signal") ); m_oPnlSinDelay .SetToolTip( wxT("The initial delay of the sinusoidal signal") ); m_oPnlSinDamp .SetToolTip( wxT("The damping factor of the sinusoidal signal") ); m_oPnlPulInitial.SetToolTip( wxT("The initial value of the pulse source") ); m_oPnlPulMax .SetToolTip( wxT("The maximum value of each pulse") ); m_oPnlPulDelay .SetToolTip( wxT("The time until the first pulse") ); m_oPnlPulRise .SetToolTip( wxT("The time taken to go from 0 to the pulsed value") ); m_oPnlPulWidth .SetToolTip( wxT("The width of each pulse") ); m_oPnlPulFall .SetToolTip( wxT("The time taken to go from the pulsed value to 0") ); m_oPnlPulPeriod .SetToolTip( wxT("The period of the pulse train") ); } //************************************************************************************************** // Layout the dialog display objects. void DlgNgsCfgSrc::DoLayout( void ) { wxBoxSizer * poSzrDlg; wxPanel * poPnlSine, * poPnlPulse, * poPnlBtns; wxBoxSizer * poSzrSine, * poSzrPulse, * poSzrBtns; wxSizerFlags oFlags; // Get pointers to the various panels poPnlSine = (wxPanel *) m_oPnlSinFreq .GetParent( ); poPnlPulse = (wxPanel *) m_oPnlPulInitial.GetParent( ); poPnlBtns = (wxPanel *) m_oBtnOk .GetParent( ); // Create sizers to associate with the panels poSzrDlg = new wxBoxSizer ( wxVERTICAL ); poSzrSine = new wxStaticBoxSizer( wxVERTICAL, poPnlSine , wxT(" Sinusoid ") ); poSzrPulse = new wxStaticBoxSizer( wxVERTICAL, poPnlPulse, wxT(" Pulse ") ); poSzrBtns = new wxBoxSizer ( wxHORIZONTAL ); // Set the sizers to the panels SetSizer( poSzrDlg ); poPnlSine ->SetSizer( poSzrSine ); poPnlPulse->SetSizer( poSzrPulse ); poPnlBtns ->SetSizer( poSzrBtns ); // Layout the Sinusoid panel oFlags.Align( wxALIGN_LEFT ); oFlags.Border( wxTOP | wxLEFT | wxRIGHT, 10 ); poSzrSine->Add( &m_oPnlSinAmp , oFlags ); oFlags.Border( wxLEFT | wxRIGHT , 10 ); poSzrSine->Add( &m_oPnlSinFreq , oFlags ); poSzrSine->Add( &m_oPnlSinOffset, oFlags ); poSzrSine->Add( &m_oPnlSinDelay , oFlags ); oFlags.Border( wxLEFT | wxBOTTOM , 10 ); poSzrSine->Add( &m_oPnlSinDamp , oFlags ); // Layout the Pulse panel oFlags.Border( wxTOP | wxLEFT | wxRIGHT, 10 ); poSzrPulse->Add( &m_oPnlPulInitial, oFlags ); oFlags.Border( wxLEFT | wxRIGHT , 10 ); poSzrPulse->Add( &m_oPnlPulMax , oFlags ); poSzrPulse->Add( &m_oPnlPulDelay , oFlags ); poSzrPulse->Add( &m_oPnlPulRise , oFlags ); poSzrPulse->Add( &m_oPnlPulWidth , oFlags ); poSzrPulse->Add( &m_oPnlPulFall , oFlags ); oFlags.Border( wxLEFT | wxBOTTOM , 10 ); poSzrPulse->Add( &m_oPnlPulPeriod , oFlags ); // Layout the button panel oFlags.Align( wxALIGN_RIGHT ); oFlags.Border( wxTOP | wxBOTTOM, 10 ); poSzrBtns->Add( &m_oBtnOk , oFlags ); poSzrBtns->AddSpacer( 10 ); oFlags.Align( wxALIGN_CENTER ); poSzrBtns->Add( &m_oBtnClear , oFlags ); poSzrBtns->AddSpacer( 10 ); oFlags.Align( wxALIGN_LEFT ); poSzrBtns->Add( &m_oBtnCancel, oFlags ); // Layout the underlying dialog oFlags.Align( wxALIGN_CENTER ); oFlags.Border( wxTOP | wxLEFT | wxRIGHT, 15 ); poSzrDlg->Add( poPnlSine , oFlags ); oFlags.Border( wxALL , 15 ); poSzrDlg->Add( poPnlPulse, oFlags ); oFlags.Align( wxALIGN_CENTER ); oFlags.Border( wxBOTTOM , 15 ); poSzrDlg->Add( poPnlBtns , oFlags ); // Set dialogues minimum size and initial size as calculated by the sizer poSzrSine ->SetSizeHints( poPnlSine ); poSzrPulse->SetSizeHints( poPnlPulse ); poSzrBtns ->SetSizeHints( poPnlBtns ); poSzrDlg ->SetSizeHints( this ); } //************************************************************************************************** // Set the values in the value panel controls. // // Argument List : // roCpntSrc - A reference to an independent source component object void DlgNgsCfgSrc::SetValues( CpntNgsIndSrc & roCpntSrc ) { SetEvtHandlerEnabled( false ); m_oPnlSinAmp .bSetValue( roCpntSrc.m_osSinAmp ); m_oPnlSinFreq .bSetValue( roCpntSrc.m_osSinFreq ); m_oPnlSinOffset .bSetValue( roCpntSrc.m_osSinOffset ); m_oPnlSinDelay .bSetValue( roCpntSrc.m_osSinDelay ); m_oPnlSinDamp .bSetValue( roCpntSrc.m_osSinDamp ); m_oPnlPulInitial.bSetValue( roCpntSrc.m_osPulInitial ); m_oPnlPulMax .bSetValue( roCpntSrc.m_osPulMax ); m_oPnlPulDelay .bSetValue( roCpntSrc.m_osPulDelay ); m_oPnlPulRise .bSetValue( roCpntSrc.m_osPulRise ); m_oPnlPulWidth .bSetValue( roCpntSrc.m_osPulWidth ); m_oPnlPulFall .bSetValue( roCpntSrc.m_osPulFall ); m_oPnlPulPeriod .bSetValue( roCpntSrc.m_osPulPeriod ); SetEvtHandlerEnabled( true ); } //************************************************************************************************** // Get the values from the value panel controls. // // Argument List : // roCpntSrc - A reference to an independent source component object void DlgNgsCfgSrc::GetValues( CpntNgsIndSrc & roCpntSrc ) { SetEvtHandlerEnabled( false ); roCpntSrc.m_osSinAmp = m_oPnlSinAmp .rosGetValue( ); roCpntSrc.m_osSinFreq = m_oPnlSinFreq .rosGetValue( ); roCpntSrc.m_osSinOffset = m_oPnlSinOffset .rosGetValue( ); roCpntSrc.m_osSinDelay = m_oPnlSinDelay .rosGetValue( ); roCpntSrc.m_osSinDamp = m_oPnlSinDamp .rosGetValue( ); roCpntSrc.m_osPulInitial = m_oPnlPulInitial.rosGetValue( ); roCpntSrc.m_osPulMax = m_oPnlPulMax .rosGetValue( ); roCpntSrc.m_osPulDelay = m_oPnlPulDelay .rosGetValue( ); roCpntSrc.m_osPulRise = m_oPnlPulRise .rosGetValue( ); roCpntSrc.m_osPulWidth = m_oPnlPulWidth .rosGetValue( ); roCpntSrc.m_osPulFall = m_oPnlPulFall .rosGetValue( ); roCpntSrc.m_osPulPeriod = m_oPnlPulPeriod .rosGetValue( ); SetEvtHandlerEnabled( true ); } //************************************************************************************************** // Set the source component name. // // Argument List : // rosName - The name of the source component // // Return Values : // true - Success // false - Failure bool DlgNgsCfgSrc::bSetName( wxString & rosName ) { eTypeCpnt eCpnt; eCpnt = Component::eGetType( rosName ); if( eCpnt!=eCPNT_IVS && eCpnt!=eCPNT_ICS ) return( false ); m_oCpntIndSrc.bSetName( rosName ); return( true ); } //************************************************************************************************** // Reset all dialog settings to defaults. // // Return Values : // true - Success // false - Failure bool DlgNgsCfgSrc::bClear( void ) { m_oCpntIndSrc.bClear( ); SetValues( m_oCpntIndSrc ); return( true ); } //************************************************************************************************** // Set the values in the value panel controls. // // Argument List : // roCpntSrc - A reference to an independent source component object // // Return Values : // true - Success // false - Failure bool DlgNgsCfgSrc::bSetValues( CpntNgsIndSrc & roCpntSrc ) { SetValues( roCpntSrc ); m_oCpntIndSrc = roCpntSrc; return( true ); } //************************************************************************************************** // Get the values from the value panel controls. // // Argument List : // roCpntSrc - A reference to an independent source component object // // Return Values : // true - Success // false - Failure bool DlgNgsCfgSrc::bGetValues( CpntNgsIndSrc & roCpntSrc ) { GetValues( roCpntSrc ); return( true ); } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // OK button event handler. // // Argument List : // roEvtCmd - An object holding information about the event (not used) void DlgNgsCfgSrc::OnBtnOk( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { GetValues( m_oCpntIndSrc ); EndModal( wxID_OK ); } //************************************************************************************************** // Clear button event handler. // // Argument List : // roEvtCmd - An object holding information about the event (not used) void DlgNgsCfgSrc::OnBtnClear( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { CpntNgsIndSrc oCpntIndSrc; oCpntIndSrc.bClear( ); SetValues( oCpntIndSrc ); } //************************************************************************************************** // Cancel button event handler. // // Argument List : // roEvtCmd - An object holding information about the event (not used) void DlgNgsCfgSrc::OnBtnCancel( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { SetValues( m_oCpntIndSrc ); EndModal( wxID_CANCEL ); } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/ngspice/NbkNgSpice.cpp0000644000000000000000000003100612502714316017725 0ustar rootroot//************************************************************************************************** // NbkNgSpice.cpp * // ---------------- * // Started : 2004-05-08 * // Last Update : 2015-03-20 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "NbkNgSpice.hpp" //************************************************************************************************** // Implement an event table. wxBEGIN_EVENT_TABLE( NbkNgSpice, NbkSimEngBase ) EVT_NOTEBOOK_PAGE_CHANGED( -1, NbkNgSpice::OnPageChangd ) EVT_BUTTON( PnlAnaBase::ID_BTN_OPTIONS, NbkNgSpice::OnBtnOptions ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. // // Arguments : // poParent - The parent window // oWinID - The display object ID // roPosn - The notebook position // roSize - The notebook size NbkNgSpice::NbkNgSpice( wxWindow * poParent, wxWindowID oWinID ) : NbkSimEngBase( poParent, oWinID ), m_oDlgCfgOPT( poParent ) { // Set the simulator engine type specifier m_eSimEng = eSIMR_NGSPICE; // Create the various display objects m_poPnlNgSpiceDC = new PnlNgSpiceDC( this ); m_poPnlNgSpiceAC = new PnlNgSpiceAC( this ); m_poPnlNgSpiceTR = new PnlNgSpiceTR( this ); m_poPnlNgSpiceOP = new PnlNgSpiceOP( this ); // Add the display objects to the note book AddPage( m_poPnlNgSpiceOP, wxT( " Quiescent " ) ); AddPage( m_poPnlNgSpiceDC, wxT( " DC " ) ); AddPage( m_poPnlNgSpiceAC, wxT( " AC " ) ); AddPage( m_poPnlNgSpiceTR, wxT( " Transient " ) ); // Specify the default page to be displayed SetSelection( 0 ); } //************************************************************************************************** // Destructor. NbkNgSpice::~NbkNgSpice( ) { } //************************************************************************************************** // Clear the object attributes. // // Return Values : // true - Success // false - Failure bool NbkNgSpice::bClear( void ) { bool bRtn=true; // Clear the base class if( ! NbkSimEngBase ::bClear( ) ) bRtn = false; if( ! m_poPnlNgSpiceOP->bClear( ) ) bRtn = false; if( ! m_poPnlNgSpiceDC->bClear( ) ) bRtn = false; if( ! m_poPnlNgSpiceAC->bClear( ) ) bRtn = false; if( ! m_poPnlNgSpiceTR->bClear( ) ) bRtn = false; if( ! m_oDlgCfgOPT .bClear( ) ) bRtn = false; return( bRtn ); } //************************************************************************************************** // Load information from a simulation object. // // Argument List : // roSimn - The simulation object // // Return Values : // true - Success // false - Failure bool NbkNgSpice::bLoad( const SimnBase & roSimn ) { bool bRtn=true; size_t sz1; if( roSimn.eGetSimEng( ) != eSIMR_NGSPICE ) return( false ); PnlAnaBase::m_oCpntSwpSrc = roSimn.m_oCpntSwpSrc; SimnNgSpice & roSimnNgs = (SimnNgSpice &) roSimn; if( ! bSetPage( roSimnNgs.eGetAnaType( ) ) ) bRtn = false; sz1 = 0; if( m_poPnlNgSpiceOP->bLoad( roSimnNgs ) ) sz1++; if( m_poPnlNgSpiceDC->bLoad( roSimnNgs ) ) sz1++; if( m_poPnlNgSpiceAC->bLoad( roSimnNgs ) ) sz1++; if( m_poPnlNgSpiceTR->bLoad( roSimnNgs ) ) sz1++; if( sz1 == 0 ) bRtn = false; if( ! m_oDlgCfgOPT.bSetValues( roSimnNgs.m_oCmdOPT ) ) bRtn = false; return( bRtn ); } //************************************************************************************************** // Save information to a simulation object. // // Argument List : // roSimultn - The simulation object // // Return Values : // true - Success // false - Failure bool NbkNgSpice::bSave( SimnBase & roSimn ) { wxString os1; int i1; // Only proceed if this is an NG-Spice simulation object if( roSimn.eGetSimEng( ) != eSIMR_NGSPICE ) return( false ); SimnNgSpice & roSimnNgs = (SimnNgSpice &) roSimn; // Clear the error string NbkSimEngBase::m_osErrMsg.Empty( ); // Create the analysis command/s switch( GetSelection( ) ) { case 0 : // OP analysis if( ! m_poPnlNgSpiceOP->bSave( roSimnNgs ) ) SetErrMsg( m_poPnlNgSpiceOP->rosGetErrMsg( ) ); break; case 1 : // DC analysis if( ! m_poPnlNgSpiceDC->bSave( roSimnNgs ) ) SetErrMsg( m_poPnlNgSpiceDC->rosGetErrMsg( ) ); break; case 2 : // AC analysis if( ! m_poPnlNgSpiceAC->bSave( roSimnNgs ) ) SetErrMsg( m_poPnlNgSpiceAC->rosGetErrMsg( ) ); break; case 3 : // TR analysis if( ! m_poPnlNgSpiceTR->bSave( roSimnNgs ) ) SetErrMsg( m_poPnlNgSpiceTR->rosGetErrMsg( ) ); break; default : return( false ); } if( ! bIsOk( ) ) return( false ); // Transfer the values in OPTIONS config. dialogue to OPTIONS command object m_oDlgCfgOPT.bGetValues( roSimnNgs.m_oCmdOPT ); // Set the results output page width : 40 chars. for the index and the // independent variable plus 16 chars. multiplied by the number of dependent // variables. i1 = 40 + 16 * roSimnNgs.m_oCmdPR.iGetParamCnt( ); CnvtType::bIntToStr( i1, os1 ); os1.Trim( false ); roSimnNgs.m_oCmdOPT.m_osWIDTH = os1; // Create the OPTIONS command roSimnNgs.m_oCmdOPT.bFormat( ); if( ! roSimnNgs.m_oCmdOPT.bIsValid( ) ) { os1 = wxT("OPTIONS command fault :\n\n "); SetErrMsg( os1 + roSimnNgs.m_oCmdOPT.rosGetErrMsg( ) ); return( false ); } return( true ); } //************************************************************************************************** // Set the page to be displayed. // // Argument List : // eAnalysis - The enumerated analysis type specifier // // Return Values : // true - Success // false - Failure bool NbkNgSpice::bSetPage( eTypeCmd eAnalysis ) { int iPage; switch( eAnalysis ) { case eCMD_OP : iPage = 0; break; case eCMD_DC : iPage = 1; break; case eCMD_AC : iPage = 2; break; case eCMD_TR : iPage = 3; break; default : return( false ); } SetSelection( iPage ); // Specify the page to be displayed return( true ); } //************************************************************************************************** // Set the page to be displayed. // // Argument List : // rosAnalysis - The two letter analysis type specifier (case ignored) // // Return Values : // true - Success // false - Failure bool NbkNgSpice::bSetPage( const wxString & rosAnalysis ) { eTypeCmd eAnalysis=eCMD_NONE; wxString os1; os1 = rosAnalysis.Upper( ); if( os1.Length( ) == 2 ) { if( os1 == wxT("OP") ) eAnalysis = eCMD_OP; else if( os1 == wxT("DC") ) eAnalysis = eCMD_DC; else if( os1 == wxT("AC") ) eAnalysis = eCMD_AC; else if( os1 == wxT("TR") ) eAnalysis = eCMD_TR; } return( bSetPage( eAnalysis ) ); } //************************************************************************************************** // Get the two letter page specifier. // // Return Values : // Success - The two letter analysis type specifier (lower case) // Failure - An empty string const wxString & NbkNgSpice::rosGetPage( void ) { static wxString osAnalysis; switch( eGetPage( ) ) { case eCMD_OP : osAnalysis = wxT("op"); break; case eCMD_DC : osAnalysis = wxT("dc"); break; case eCMD_AC : osAnalysis = wxT("ac"); break; case eCMD_TR : osAnalysis = wxT("tr"); break; default : osAnalysis.Empty( ); } return( osAnalysis ); } //************************************************************************************************** // Get the enumerated page specifier. // // Return Values : // Success - The enumerated analysis specifier // Failure - eCMD_NONE eTypeCmd NbkNgSpice::eGetPage( void ) { eTypeCmd eAnalysis; switch( GetSelection( ) ) { case 0 : eAnalysis = eCMD_OP; break; case 1 : eAnalysis = eCMD_DC; break; case 2 : eAnalysis = eCMD_AC; break; case 3 : eAnalysis = eCMD_TR; break; default : eAnalysis = eCMD_NONE; } return( eAnalysis ); } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // This event is generated when a notebook page has just changed. // // Argument List: // roEvtNbk - An object holding information about the event void NbkNgSpice::OnPageChangd( wxNotebookEvent & roEvtNbk ) { PnlAnaBase * poPnlAna; wxString os1; int i1; // Transfer the ambient temperature from the previous page to OPTIONS dialog i1 = roEvtNbk.GetOldSelection( ); if( i1 != -1 ) { poPnlAna = (PnlAnaBase *) GetPage( (size_t) i1 ); if( poPnlAna->m_oPnlTemp.GetParent( ) != NULL ) { os1 = poPnlAna->m_oPnlTemp.rosGetValue( ); m_oDlgCfgOPT.bSetValue( DlgNgsCfgOPT::ID_PNL_TEMP, os1 ); } } // Transfer the ambient temperature from the OPTIONS dialog to current page poPnlAna = (PnlAnaBase *) GetCurrentPage( ); if( poPnlAna->m_oPnlTemp.GetParent( ) != NULL ) { os1 = m_oDlgCfgOPT.rosGetValue( DlgNgsCfgOPT::ID_PNL_TEMP ); poPnlAna->m_oPnlTemp.bSetValue( os1 ); } // Synchronize the sweep sources between the different analysis pages if( m_bSyncSwpSrcs ) { os1 = poPnlAna->m_oCpntSwpSrc.rosGetName( ); if( poPnlAna->m_oChoSrcName.SetStringSelection( os1 ) ) { // Set the sweep source value if it's been defined if( poPnlAna->m_oPnlSrcLvl.GetParent( ) != NULL ) { poPnlAna->m_oPnlSrcLvl.bSetUnitsType( poPnlAna->m_oCpntSwpSrc.eGetUnitsType( ) ); poPnlAna->m_oPnlSrcLvl.bSetValue( poPnlAna->m_oCpntSwpSrc.rosGetValue( ) ); } } else { // Couldn't set the sweep source name so clear it poPnlAna->m_oChoSrcName.SetSelection( 0 ); if( poPnlAna->m_oPnlSrcLvl.GetParent( ) != NULL ) { poPnlAna->m_oPnlSrcLvl.bSetUnitsType( eUNITS_NONE ); poPnlAna->m_oPnlSrcLvl.bSetValue( 0.0 ); } } // Update the sweep parameter units if( poPnlAna->eGetAnalysType( ) == eCMD_DC ) m_poPnlNgSpiceDC->OnSrcName( (wxCommandEvent &) roEvtNbk ); } // Allow additional event handlers to be called roEvtNbk.Skip( ); } //************************************************************************************************** // Setup .OPTIONS command button event handler. // // Argument List : // roEvtCmd - An object holding information about the event void NbkNgSpice::OnBtnOptions( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { PnlAnaBase * poPnlAna; wxString os1; int i1; // Get a pointer to the currently displayed analysis page poPnlAna = (PnlAnaBase *) GetCurrentPage( ); if( poPnlAna == NULL ) return; // Set the temperature in the OPTIONS dialog if( poPnlAna->m_oPnlTemp.GetParent( ) != NULL ) { os1 = poPnlAna->m_oPnlTemp.rosGetValue( ); m_oDlgCfgOPT.bSetValue( DlgNgsCfgOPT::ID_PNL_TEMP, os1 ); } // Display the OPTIONS dialog m_oDlgCfgOPT.CenterOnParent( ); i1 = m_oDlgCfgOPT.ShowModal( ); if( i1 != wxID_OK ) return; // Set the temperature in the current analysis panel if( poPnlAna->m_oPnlTemp.GetParent( ) != NULL ) { os1 = m_oDlgCfgOPT.rosGetValue( DlgNgsCfgOPT::ID_PNL_TEMP ); poPnlAna->m_oPnlTemp.bSetValue( os1 ); } } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/ngspice/commands/0000755000000000000000000000000012505244022017032 5ustar rootrootgspiceui-1.1.00+dfsg/src/ngspice/commands/CmdNgSpiceDC.cpp0000644000000000000000000002306212442524076021736 0ustar rootroot//************************************************************************************************** // CmdNgSpiceDC.cpp * // ------------------ * // Started : 2007-08-21 * // Last Update : 2014-12-12 * // Copyright : (C) 2007 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "CmdNgSpiceDC.hpp" //************************************************************************************************** // Constructor. CmdNgSpiceDC::CmdNgSpiceDC( void ) { bSetDefaults( ); } //************************************************************************************************** // Destructor. CmdNgSpiceDC::~CmdNgSpiceDC( ) { } //************************************************************************************************** // Check that the object attributes are valid. // // Return Values : // true - Success // false - Failure bool CmdNgSpiceDC::bValidate( void ) { double df1, df2, df3; CmdBase::bValidate( ); // Check the sweep start and stop values if( ! CnvtType::bStrToFlt( m_osStart, &df1 ) ) SetErrMsg( wxT("Invalid sweep start value.") ); if( ! CnvtType::bStrToFlt( m_osStop, &df2 ) ) SetErrMsg( wxT("Invalid sweep stop value.") ); if( df2 < df1 ) SetErrMsg( wxT("Start value greater than stop value.") ); // Check the sweep step value and sweep scale if( ! CnvtType::bStrToFlt( m_osStep, &df3 ) ) SetErrMsg( wxT("Invalid sweep step value.") ); if( df3 <= 0.0 ) SetErrMsg( wxT("Step value less than or equal to zero.") ); // Check the component to be used as the sweep source if( m_osSource.IsEmpty( ) && m_osSource!=wxT("TEMP") ) SetErrMsg( wxT("No source component has been selected.") ); return( bIsValid( ) ); } //************************************************************************************************** // Set the object attributes to they're default values. // // Return Values : // true - Success // false - Failure bool CmdNgSpiceDC::bSetDefaults( void ) { CmdBase::bSetDefaults( ); m_eSimEng = eSIMR_NGSPICE; m_eCmdType = eCMD_DC; m_osStart = wxT("0.0"); m_osStop = wxT("100.0"); m_osStep = wxT("10.0"); m_osSource = wxT("None"); return( true ); } //************************************************************************************************** // Parse the command string. // // Eg.s : .DC Vin 0.00 200.00m 25.00m // .DC TEMP 0.00 200.00 25.00 // // Return Values : // true - Success // false - Failure bool CmdNgSpiceDC::bParse( void ) { wxStringTokenizer ostk1; wxString os1; double df1; // Clear the object attributes os1 = *this; bSetDefaults( ); assign( os1 ); // Tokenize the command string ostk1.SetString( *this ); if( ostk1.CountTokens( ) != 5 ) return( bValidate( ) ); // Check command type os1 = ostk1.GetNextToken( ).Left( 3 ).Upper( ); if( os1 != wxT(".DC") ) return( false ); // Extract the sweep type : a signal source or temperature m_osSource = ostk1.GetNextToken( ); if( m_osSource.IsEmpty( ) ) return( bValidate( ) ); // Extract the start value os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osStart = os1; else return( bValidate( ) ); // Extract the stop value os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osStop = os1; else return( bValidate( ) ); // Extract the step increment os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osStep = os1; else return( bValidate( ) ); return( bValidate( ) ); } //************************************************************************************************** // Format the command string. // // Return Values : // true - Success // false - Failure bool CmdNgSpiceDC::bFormat( void ) { wxString osCmd; // Set the command name osCmd = wxT(".DC"); // Set signal source osCmd << wxT(' ') << m_osSource; // Set sweep parameters osCmd << wxT(' ') << m_osStart; osCmd << wxT(' ') << m_osStop; osCmd << wxT(' ') << m_osStep; assign( osCmd ); return( bValidate( ) ); } //************************************************************************************************** // Copy the contents of a CmdGnuCapOP object. // // Argument List : // roCmdOP - A reference to a CmdGnuCapOP object // // Return Values : // A reference to this object CmdNgSpiceDC & CmdNgSpiceDC::operator = ( const CmdGnuCapOP & roCmdOP ) { (CmdBase &) *this = (CmdBase &) roCmdOP; m_osStart = roCmdOP.m_osStart; m_osStop = roCmdOP.m_osStop; m_osStep = roCmdOP.m_osStep; m_osSource = wxT("TEMP"); bFormat( ); return( *this ); } //************************************************************************************************** // Copy the contents of a CmdGnuCapDC object. // // Argument List : // roCmdDC - A reference to a CmdGnuCapDC object // // Return Values : // A reference to this object CmdNgSpiceDC & CmdNgSpiceDC::operator = ( const CmdGnuCapDC & roCmdDC ) { (CmdBase &) *this = (CmdBase &) roCmdDC; m_osStart = roCmdDC.m_osStart; m_osStop = roCmdDC.m_osStop; m_osStep = roCmdDC.m_osStep; m_osSource = roCmdDC.m_osSource; bFormat( ); return( *this ); } //************************************************************************************************** // Print the object attributes. // // Argument List : // rosPrefix - A prefix to every line displayed (usually just spaces) void CmdNgSpiceDC::Print( const wxString & rosPrefix ) { CmdBase::Print( rosPrefix + wxT("CmdBase::") ); std::cout << rosPrefix.mb_str( ) << "m_osStart : " << m_osStart .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osStop : " << m_osStop .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osStep : " << m_osStep .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osSource : " << m_osSource.mb_str( ) << '\n'; } //************************************************************************************************** // Test Utility * //************************************************************************************************** #ifdef TEST_CMDNGSPICEDC using namespace std; // Function prototypes void Usage( char * psAppName ); //************************************************************************************************** int main( int argc, char * argv[ ] ) { wxString osCmd; wxString os1; // Validate the argument count passed to the application if( argc > 2 ) { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } // Process the command line arguments os1 = wxConvLibc.cMB2WC( argv[ 1 ] ); if( argc > 1 ) { if( os1 == wxT("-h") ) { Usage( argv[ 0 ] ); exit( EXIT_SUCCESS ); } else { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } } // Display the utility banner cout << "\n Class CmdNgSpiceDC Test Utility" << "\n Version 1.02 (12/08/2011)\n"; // Create a NG-SPICE DC command object CmdNgSpiceDC oCmd_DC; // Use the following command example to check the formatter and the parser : osCmd = wxT(".DC Vin 0.00 100.00m 10.00m"); // Set things up for a formatter test oCmd_DC.m_osStart = wxT("0.00"); oCmd_DC.m_osStop = wxT("100.00m"); oCmd_DC.m_osStep = wxT("10.00m"); oCmd_DC.m_osSource = wxT("Vin"); cout << "\nRun Formatter : " << ( oCmd_DC.bFormat( ) ? "OK" : "FAULT" ); cout << "\nTest Cmd Format : " << ( oCmd_DC == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\noCmd_DC Contents : " << oCmd_DC.mb_str( ) << '\n'; // Set things up for a parser test oCmd_DC.bSetString( osCmd ); cout << "\nRun Parser : " << ( oCmd_DC.bParse( ) ? "OK" : "FAULT" ); oCmd_DC.bFormat( ); cout << "\nTest Cmd Format : " << ( oCmd_DC == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\noCmd_DC Contents : " << oCmd_DC.mb_str( ) << '\n'; cout << '\n'; exit( EXIT_SUCCESS ); } //************************************************************************************************** void Usage( char * psAppName ) { cout << "\nUsage : " << psAppName << " [-OPTIONS]" << "\nOptions :" << "\n -h : Print usage (this message)\n"; } #endif // TEST_CMDNGSPICEDC //************************************************************************************************** gspiceui-1.1.00+dfsg/src/ngspice/commands/CmdNgSpiceTR.cpp0000644000000000000000000002315412442524240021770 0ustar rootroot//************************************************************************************************** // CmdNgSpiceTR.cpp * // ------------------ * // Started : 2007-10-15 * // Last Update : 2014-12-12 * // Copyright : (C) 2007 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "CmdNgSpiceTR.hpp" //************************************************************************************************** // Constructor. CmdNgSpiceTR::CmdNgSpiceTR( void ) { bSetDefaults( ); } //************************************************************************************************** // Destructor. CmdNgSpiceTR::~CmdNgSpiceTR( ) { } //************************************************************************************************** // Check that the object attributes are valid. // // Return Values : // true - Success // false - Failure bool CmdNgSpiceTR::bValidate( void ) { double df1, df2, df3; CmdBase::bValidate( ); // Check the sweep start and stop values if( ! CnvtType::bStrToFlt( m_osStart, &df1 ) ) SetErrMsg( wxT("Invalid sweep start value.") ); if( ! CnvtType::bStrToFlt( m_osStop, &df2 ) ) SetErrMsg( wxT("Invalid sweep stop value.") ); if( df2 < df1 ) SetErrMsg( wxT("Start value greater than stop value.") ); // Check the sweep step value and initial conditions if( ! CnvtType::bStrToFlt( m_osStep, &df3 ) ) SetErrMsg( wxT("Invalid sweep step value.") ); if( df3 <= 0.0 ) SetErrMsg( wxT("Step value less than or equal to zero.") ); switch( m_eInitC ) { case eINITC_WARM : case eINITC_UICS : case eINITC_COLD : break; default : SetErrMsg( wxT("Invalid initial conditions value.") ); } return( bIsValid( ) ); } //************************************************************************************************** // Set the object attributes to they're default values. // // Return Values : // true - Success // false - Failure bool CmdNgSpiceTR::bSetDefaults( void ) { CmdBase::bSetDefaults( ); m_eSimEng = eSIMR_NGSPICE; m_eCmdType = eCMD_TR; m_osStart = wxT("0.0m"); m_osStop = wxT("100.0m"); m_osStep = wxT("10.0m"); m_eInitC = eINITC_WARM; return( true ); } //************************************************************************************************** // Parse the command string. // // Eg.s : .TRAN 10.00m 100.00m 0.00 10.00m UIC // .TRAN 10.00m 100.00m 0.00 10.00m // .TRAN 10.00m 100.00m 0.00 // .TRAN 10.00m 100.00m // // Return Values : // true - Success // false - Failure bool CmdNgSpiceTR::bParse( void ) { wxStringTokenizer ostk1; wxString os1; double df1; int i1; // Clear the object attributes os1 = *this; bSetDefaults( ); assign( os1 ); // Tokenize the command string ostk1.SetString( *this ); i1 = ostk1.CountTokens( ); if( i1<3 || i1>6 ) return( bValidate( ) ); // Check command type os1 = ostk1.GetNextToken( ).Left( 3 ).Upper( ); if( os1 != wxT(".TR") ) return( bValidate( ) ); // Extract the step increment (must be present) os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osStep = os1; else return( bValidate( ) ); // Extract the stop value (must be present) os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osStop = os1; else return( bValidate( ) ); // Extract the start value (may be omitted) m_osStart = wxT("0.0"); if( ostk1.HasMoreTokens( ) ) { os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osStart = os1; else return( bValidate( ) ); } // Extract the initial conditions specifier m_eInitC = eINITC_WARM; while( ostk1.HasMoreTokens( ) ) { os1 = ostk1.GetNextToken( ).Upper( ); if( os1 == wxT("UIC") ) { m_eInitC = eINITC_UICS; break; } } return( bValidate( ) ); } //************************************************************************************************** // Format the command string. // // Return Values : // true - Success // false - Failure bool CmdNgSpiceTR::bFormat( void ) { wxString osCmd; // Set the command name osCmd = wxT(".TRAN"); // Set sweep parameters osCmd << wxT(' ') << m_osStep; osCmd << wxT(' ') << m_osStop; osCmd << wxT(' ') << m_osStart; // Set initial conditions if( m_eInitC != eINITC_WARM ) osCmd << wxT(" UIC"); assign( osCmd ); return( bValidate( ) ); } //************************************************************************************************** // Copy the contents of a CmdGnuCapAC object. // // Argument List : // roCmdTR - A reference to a CmdGnuCapTR object // // Return Values : // A reference to this object CmdNgSpiceTR & CmdNgSpiceTR::operator = ( const CmdGnuCapTR & roCmdTR ) { (CmdBase &) *this = (CmdBase &) roCmdTR; m_osStart = roCmdTR.m_osStart; m_osStop = roCmdTR.m_osStop; m_osStep = roCmdTR.m_osStep; m_eInitC = roCmdTR.m_eInitC; bFormat( ); return( *this ); } //************************************************************************************************** // Print the object attributes. // // Argument List : // rosPrefix - A prefix to every line displayed (usually just spaces) void CmdNgSpiceTR::Print( const wxString & rosPrefix ) { CmdBase::Print( rosPrefix + wxT("CmdBase::") ); std::cout << rosPrefix.mb_str( ) << "m_osStart : " << m_osStart.mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osStop : " << m_osStop .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osStep : " << m_osStep .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_eInitC : "; switch( m_eInitC ) { case eINITC_WARM : std::cout << "eINITC_COLD\n"; break; case eINITC_UICS : std::cout << "eINITC_UICS\n"; break; case eINITC_COLD : std::cout << "eINITC_COLD\n"; break; case eINITC_NONE : std::cout << "eINITC_NONE\n"; break; default : std::cout << "Invalid\n"; break; } } //************************************************************************************************** // Test Utility * //************************************************************************************************** #ifdef TEST_CMDNGSPICETR using namespace std; // Function prototypes void Usage( char * psAppName ); //************************************************************************************************** int main( int argc, char * argv[ ] ) { wxString osCmd; wxString os1; // Validate the argument count passed to the application if( argc > 2 ) { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } // Process the command line arguments os1 = wxConvLibc.cMB2WC( argv[ 1 ] ); if( argc > 1 ) { if( os1 == wxT("-h") ) { Usage( argv[ 0 ] ); exit( EXIT_SUCCESS ); } else { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } } // Display the utility banner cout << "\n Class CmdNgSpiceTR Test Utility" << "\n Version 1.02 (12/08/2011)\n"; // Create a NG-SPICE TRANSIENT command object CmdNgSpiceTR oCmd_TR; // Use the following command example to check the formatter and the parser : osCmd = wxT(".TRAN 10.00m 100.00m 0.00 UIC"); // Set things up for a formatter test oCmd_TR.m_osStart = wxT("0.00"); oCmd_TR.m_osStop = wxT("100.00m"); oCmd_TR.m_osStep = wxT("10.00m"); oCmd_TR.m_eInitC = eINITC_UICS; cout << "\nRun Formatter : " << ( oCmd_TR.bFormat( ) ? "OK" : "FAULT" ); cout << "\nTest Cmd Format : " << ( oCmd_TR == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\noCmd_TR Contents : " << oCmd_TR.mb_str( ) << '\n'; // Set things up for a parser test oCmd_TR.bSetString( osCmd ); cout << "\nRun Parser : " << ( oCmd_TR.bParse( ) ? "OK" : "FAULT" ); oCmd_TR.bFormat( ); cout << "\nTest Cmd Format : " << ( oCmd_TR == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\noCmd_TR Contents : " << oCmd_TR.mb_str( ) << '\n'; cout << '\n'; exit( EXIT_SUCCESS ); } //************************************************************************************************** void Usage( char * psAppName ) { cout << "\nUsage : " << psAppName << " [-OPTIONS]" << "\nOptions :" << "\n -h : Print usage (this message)\n"; } #endif // TEST_CMDNGSPICETR //************************************************************************************************** gspiceui-1.1.00+dfsg/src/ngspice/commands/CmdNgSpiceTR.hpp0000644000000000000000000000522012476466611022005 0ustar rootroot//************************************************************************************************** // CmdNgSpiceTR.hpp * // ------------------ * // Description : This class contains values associated with the NG-Spice TRANSIENT command. It * // inherits from the class CmdBase. * // Started : 2007-10-15 * // Last Update : 2015-03-07 * // Copyright : (C) 2007 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef CMDNGSTR_HPP #define CMDNGSTR_HPP // Application Includes #include "TypeDefs.hpp" #include "base/CmdBase.hpp" #include "gnucap/commands/CmdGnuCapTR.hpp" #include "utility/CnvtType.hpp" class CmdGnuCapTR; //************************************************************************************************** class CmdNgSpiceTR : public CmdBase { private : virtual bool bValidate( void ); public : wxString m_osStart; // The sweep start value wxString m_osStop; // The sweep stop value wxString m_osStep; // The sweep step value eTypeInitC m_eInitC; // The initial conditions CmdNgSpiceTR( void ); virtual ~CmdNgSpiceTR( ); virtual bool bSetDefaults( void ); virtual bool bParse ( void ); virtual bool bFormat( void ); CmdNgSpiceTR & operator = ( const CmdGnuCapTR & roCmdTR ); void Print( const wxString & rosPrefix=wxT(" ") ); }; //************************************************************************************************** #endif // CMDNGSTR_HPP gspiceui-1.1.00+dfsg/src/ngspice/commands/CmdNgSpiceOPT.hpp0000644000000000000000000001636112476466611022132 0ustar rootroot//************************************************************************************************** // CmdNgSpiceOPT.hpp * // ------------------- * // Description : This class contains values associated with the NG-Spice OPTIONS command. It * // inherits from the class CmdBase. * // Started : 2006-08-23 * // Last Update : 2015-03-07 * // Copyright : (C) 2006 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef CMDNGSOPT_HPP #define CMDNGSOPT_HPP // Application Includes #include "TypeDefs.hpp" #include "base/CmdBase.hpp" #include "gnucap/commands/CmdGnuCapOPT.hpp" #include "utility/CnvtType.hpp" class CmdGnuCapOPT; // Local Macro and/or Constant Declarations #define NGS_ABSTOL wxT("1.0pA") // Absolute current error tolerance #define NGS_CHGTOL wxT("10.0fC") // Charge tolerance #define NGS_PIVTOL wxT("1.0E-13") // Absolute minimum value for matrix entry as pivot #define NGS_RELTOL wxT("0.001") // Relative error tolerance #define NGS_TRTOL wxT("7.0") // Transient analysis error tolerance #define NGS_VNTOL wxT("1.0uV") // Absolute voltage error tolerance #define NGS_PIVREL wxT("1.0E-03") // Relative ratio of largest col. entry & acceptable pivot value #define NGS_DEFL wxT("100.0um") // MOSFET default channel length (metre) #define NGS_DEFW wxT("100.0um") // MOSFET default channel width (metre) #define NGS_DEFAD wxT("0.0") // MOSFET default drain diffusion area (sq.m) #define NGS_DEFAS wxT("0.0") // MOSFET default source diffusion area (sq.m) #define NGS_TEMP wxT("27.0Deg.C") // Operating temperature of circuit #define NGS_TNOM wxT("27.0Deg.C") // Nominal temp. device parameters measured at #define NGS_CONVABSS wxT("0.1") // Absolute step limit applied to code models #define NGS_CONVSTEP wxT("0.25") // Relative step limit applied to code models #define NGS_GMIN wxT("1.0pS") // Minimum allowable conductance #define NGS_RSERIES wxT("0.0mOhm") // Adds a resistor to each inductor in the circuit #define NGS_RSHUNT wxT("1000.0GOhm") // Adds a resistor from each analogue node to ground #define NGS_RAMPTIME wxT("0.0mSec") // Transient analysis supply ramping time #define NGS_ITL1 wxT("100") // DC analysis iteration limit #define NGS_ITL2 wxT("50") // DC analysis transfer curve iteration limit #define NGS_ITL3 wxT("4") // Transient analysis lower iteration limit #define NGS_ITL4 wxT("10") // Transient analysis timepoint iteration limit #define NGS_ITL5 wxT("5000") // Transient analysis total iteration limit #define NGS_ITL6 wxT("10") // Source stepping iteration limit (synonym for SRCSTEPS) #define NGS_SRCSTEPS wxT("10") // Source stepping iteration limit #define NGS_GMINSTEP wxT("0") // Number of GMIN steps to be attempted #define NGS_MAXEVIT wxT("5") // Max. event iterations at an analysis point #define NGS_MAXOPALT wxT("5") // Max. analog/event alternations in OP analysis #define NGS_MAXORD wxT("2") // Max. order for the numerical integration method #define NGS_MAXWARNS wxT("5") // Max. no. of SOA (Safe Operating Area) voltage warning messages #define NGS_NUMDGT wxT("6") // Precision : no. of digits after decimal point #define NGS_WIDTH wxT("0") // Allows for operator (eg. frequency) & 10 cols of data #define NGS_METHOD wxT("Trap") // Numerical integration method (TRAPezoidal or GEAR) #define NGS_UNITS wxT("Degrees") // Phase angle units : degrees or radians #define NGS_BADMOS3 false // Use MOS3 model with "kappa" discontinuity #define NGS_INTERP false // Interpolate output data onto fixed time steps #define NGS_NOOPAC false // Don't do an OP analysis before the AC analysis #define NGS_NOOPALT false // Analog/event alternation in OP analysis #define NGS_OPTS false // Enable printing of option values #define NGS_TRYTOCOM false // Try to condense LTRA model's past history #define NGS_WARN false // Enable SOA (Safe Operating Area) voltage warning messages //************************************************************************************************** class CmdNgSpiceOPT : public CmdBase { private : virtual bool bValidate( void ); public : // Options which are floating point values wxString m_osABSTOL; wxString m_osCHGTOL; wxString m_osCONVABSS; wxString m_osCONVSTEP; wxString m_osDEFL; wxString m_osDEFW; wxString m_osDEFAD; wxString m_osDEFAS; wxString m_osGMIN; wxString m_osPIVREL; wxString m_osPIVTOL; wxString m_osRAMPTIME; wxString m_osRELTOL; wxString m_osRSERIES; wxString m_osRSHUNT; wxString m_osTEMP; wxString m_osTNOM; wxString m_osTRTOL; wxString m_osVNTOL; // Options which are integer values wxString m_osGMINSTEP; wxString m_osITL1; wxString m_osITL2; wxString m_osITL3; wxString m_osITL4; wxString m_osITL5; wxString m_osITL6; wxString m_osMAXEVIT; wxString m_osMAXOPALT; wxString m_osMAXORD; wxString m_osMAXWARNS; wxString m_osNUMDGT; wxString m_osSRCSTEPS; wxString m_osWIDTH; // Options which are string values wxString m_osMETHOD; wxString m_osUNITS; // Options which are boolean values bool m_bBADMOS3; bool m_bINTERP; bool m_bNOOPAC; bool m_bNOOPALT; bool m_bOPTS; bool m_bTRYTOCOM; bool m_bWARN; CmdNgSpiceOPT( void ); virtual ~CmdNgSpiceOPT( ); virtual bool bSetDefaults( void ); virtual bool bParse ( void ); virtual bool bFormat( void ); CmdNgSpiceOPT & operator = ( const CmdGnuCapOPT & roCmdOPT ); void Print( const wxString & rosPrefix=wxT(" ") ); }; //************************************************************************************************** #endif // CMDNGSOPT_HPP gspiceui-1.1.00+dfsg/src/ngspice/commands/CmdNgSpiceAC.cpp0000644000000000000000000002362112442524274021734 0ustar rootroot//************************************************************************************************** // CmdNgSpiceAC.cpp * // ------------------ * // Started : 2007-10-11 * // Last Update : 2014-12-12 * // Copyright : (C) 2007 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "CmdNgSpiceAC.hpp" //************************************************************************************************** // Constructor. CmdNgSpiceAC::CmdNgSpiceAC( void ) { bSetDefaults( ); } //************************************************************************************************** // Destructor. CmdNgSpiceAC::~CmdNgSpiceAC( ) { } //************************************************************************************************** // Check that the object attributes are valid. // // Return Values : // true - Success // false - Failure bool CmdNgSpiceAC::bValidate( void ) { double df1, df2, df3; // Call the base class validation function first CmdBase::bValidate( ); // Check the sweep start and stop values if( ! CnvtType::bStrToFlt( m_osStart, &df1 ) ) SetErrMsg( wxT("Invalid sweep start value.") ); if( ! CnvtType::bStrToFlt( m_osStop, &df2 ) ) SetErrMsg( wxT("Invalid sweep stop value.") ); if( df2 < df1 ) SetErrMsg( wxT("Start value greater than stop value.") ); // Check the sweep step value and sweep scale if( ! CnvtType::bStrToFlt( m_osStep, &df3 ) ) SetErrMsg( wxT("Invalid sweep step value.") ); if( df3 <= 0.0 ) SetErrMsg( wxT("Step value less than or equal to zero.") ); switch( m_eScale ) { case eSCALE_LIN : if( df1!=df2 && df3>fabs( df2 - df1 ) ) SetErrMsg( wxT("Step value is greater than sweep range.") ); break; case eSCALE_DEC : case eSCALE_OCT : break; default : SetErrMsg( wxT("Invalid step scale value.") ); } return( bIsValid( ) ); } //************************************************************************************************** // Set the object attributes to they're default values. // // Return Values : // true - Success // false - Failure bool CmdNgSpiceAC::bSetDefaults( void ) { CmdBase::bSetDefaults( ); m_eSimEng = eSIMR_NGSPICE; m_eCmdType = eCMD_AC; m_osStart = wxT("1.0K"); m_osStop = wxT("100.0K"); m_osStep = wxT("10"); m_eScale = eSCALE_DEC; return( true ); } //************************************************************************************************** // Parse the command string. // // Eg.s : .AC LIN 50 1.00K 300.00K // .AC DEC 20 1.00K 300.00K // .AC OCT 10 1.00K 300.00K // // Return Values : // true - Success // false - Failure bool CmdNgSpiceAC::bParse( void ) { wxStringTokenizer ostk1; wxString os1; double df1; long li1; // Clear the object attributes os1 = *this; bSetDefaults( ); assign( os1 ); // Tokenize the command string ostk1.SetString( *this ); if( ostk1.CountTokens( ) != 5 ) return( bValidate( ) ); // Check command type os1 = ostk1.GetNextToken( ).Left( 3 ).Upper( ); if( os1 != wxT(".AC") ) return( bValidate( ) ); // Extract the sweep type: linear or log os1 = ostk1.GetNextToken( ).Upper( ); if( os1 == wxT("LIN") ) m_eScale = eSCALE_LIN; else if( os1 == wxT("DEC") ) m_eScale = eSCALE_DEC; else if( os1 == wxT("OCT") ) m_eScale = eSCALE_OCT; else return( bValidate( ) ); // Extract the step count os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToInt( os1, &li1 ) ) m_osStep = os1; else return( bValidate( ) ); // Extract the start frequency os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osStart = os1; else return( bValidate( ) ); // Extract the stop frequency os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osStop = os1; else return( bValidate( ) ); return( bValidate( ) ); } //************************************************************************************************** // Format the command string. // // Return Values : // true - Success // false - Failure bool CmdNgSpiceAC::bFormat( void ) { wxString osCmd, os1; osCmd = wxT(".AC"); switch( m_eScale ) { case eSCALE_LIN : osCmd << wxT(" LIN"); break; case eSCALE_DEC : osCmd << wxT(" DEC"); break; case eSCALE_OCT : osCmd << wxT(" OCT"); break; default : break; } osCmd << wxT(' ') << m_osStep; osCmd << wxT(' ') << m_osStart; osCmd << wxT(' ') << m_osStop; assign( osCmd ); return( bValidate( ) ); } //************************************************************************************************** // Copy the contents of a CmdGnuCapAC object. // // Argument List : // poCmdAC - A pointer to a CmdNgSpiceAC object // // Return Values : // A pointer to this object CmdNgSpiceAC & CmdNgSpiceAC::operator = ( const CmdGnuCapAC & roCmdAC ) { (CmdBase &) *this = (CmdBase &) roCmdAC; m_osStart = roCmdAC.m_osStart; m_osStop = roCmdAC.m_osStop; m_osStep = roCmdAC.m_osStep; m_eScale = roCmdAC.m_eScale; // NG-Spice doesn't support logarithmic scaling if( m_eScale == eSCALE_LOG ) m_eScale = eSCALE_DEC; bFormat( ); return( *this ); } //************************************************************************************************** // Print the object attributes. // // Argument List : // psPrefix - A prefix to every line displayed (usually just spaces) void CmdNgSpiceAC::Print( const wxString & rosPrefix ) { CmdBase::Print( rosPrefix + wxT("CmdBase::") ); std::cout << rosPrefix.mb_str( ) << "m_osStart : " << m_osStart .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osStop : " << m_osStop .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osStep : " << m_osStep .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_eScale : "; switch( m_eScale ) { case eSCALE_LIN : std::cout << "eSCALE_LIN\n"; break; case eSCALE_LOG : std::cout << "eSCALE_LOG\n"; break; case eSCALE_DEC : std::cout << "eSCALE_DEC\n"; break; case eSCALE_OCT : std::cout << "eSCALE_OCT\n"; break; case eSCALE_NONE : std::cout << "eSCALE_NONE\n"; break; default : std::cout << "Invalid\n"; break; } } //************************************************************************************************** // Test Utility * //************************************************************************************************** #ifdef TEST_CMDNGSPICEAC using namespace std; // Function prototypes void Usage( char * psAppName ); //************************************************************************************************** int main( int argc, char * argv[ ] ) { wxString osCmd; wxString os1; // Validate the argument count passed to the application if( argc > 2 ) { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } // Process the command line arguments os1 = wxConvLibc.cMB2WC( argv[ 1 ] ); if( argc > 1 ) { if( os1 == wxT("-h") ) { Usage( argv[ 0 ] ); exit( EXIT_SUCCESS ); } else { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } } // Display the utility banner cout << "\n Class CmdNgSpiceAC Test Utility" << "\n Version 1.02 (12/08/2011)\n"; // Create a GNU-CAP AC command object CmdNgSpiceAC oCmd_AC; // Use the following command example to check the formatter and the parser : osCmd = wxT(".AC DEC 30 1.00K 300.00K"); // Set things up for a formatter test oCmd_AC.m_osStart = wxT("1.00K"); oCmd_AC.m_osStop = wxT("300.00K"); oCmd_AC.m_osStep = wxT("30"); oCmd_AC.m_eScale = eSCALE_DEC; cout << "\nRun Formatter : " << ( oCmd_AC.bFormat( ) ? "OK" : "FAULT" ); cout << "\nTest Cmd Format : " << ( oCmd_AC == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\noCmd_AC Contents : " << oCmd_AC.mb_str( ) << '\n'; // Set things up for a parser test oCmd_AC.bSetString( osCmd ); cout << "\nRun Parser : " << ( oCmd_AC.bParse( ) ? "OK" : "FAULT" ); oCmd_AC.bFormat( ); cout << "\nTest Cmd Format : " << ( oCmd_AC == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\noCmd_AC Contents : " << oCmd_AC.mb_str( ) << '\n'; cout << '\n'; exit( EXIT_SUCCESS ); } //************************************************************************************************** void Usage( char * psAppName ) { cout << "\nUsage : " << psAppName << " [-OPTIONS]" << "\nOptions :" << "\n -h : Print usage (this message)\n"; } #endif // TEST_CMDNGSPICEAC //************************************************************************************************** gspiceui-1.1.00+dfsg/src/ngspice/commands/CmdNgSpicePR.hpp0000644000000000000000000000567612503013567022005 0ustar rootroot//************************************************************************************************** // CmdNgSpicePR.hpp * // ------------------ * // Description : This class contains values associated with the NG-Spice PRINT command. It * // inherits from the class CmdBase. * // Started : 2007-10-16 * // Last Update : 2015-03-20 * // Copyright : (C) 2007 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef CMDNGSPR_HPP #define CMDNGSPR_HPP // Application Includes #include "TypeDefs.hpp" #include "base/CmdBase.hpp" #include "netlist/NetList.hpp" #include "gnucap/commands/CmdGnuCapPR.hpp" class CmdGnuCapPR; // wxWidgets Includes #include //************************************************************************************************** class CmdNgSpicePR : public CmdBase { private : eTypeCmd m_eAnaType; virtual bool bValidate( void ); public : wxArrayString m_osaNodes; wxArrayString m_osaCpnts; bool m_bParams[ ePARAM_LST+1 ]; bool m_bCpxPts[ eCPXPT_LST+1 ]; CmdNgSpicePR( void ); virtual ~CmdNgSpicePR( ); virtual bool bSetDefaults( void ); bool bSetAnaType ( eTypeCmd eAnaType ); eTypeCmd eGetAnaType( void ) const { return( m_eAnaType ); } virtual bool bParse ( void ); virtual bool bFormat( void ); const wxString & rosGetParamLst( void ); int iGetParamCnt( void ); CmdNgSpicePR & operator = ( const CmdNgSpicePR & roCmdPR ); CmdNgSpicePR & operator = ( const CmdGnuCapPR & roCmdPR ); void Print( const wxString & rosPrefix=wxT(" ") ); }; //************************************************************************************************** #endif // CMDNGSPR_HPP gspiceui-1.1.00+dfsg/src/ngspice/commands/CmdNgSpiceAC.hpp0000644000000000000000000000521612476466611021750 0ustar rootroot//************************************************************************************************** // CmdNgSpiceAC.hpp * // ------------------ * // Description : This class contains values associated with the NG-Spice AC command. It inherits * // from the class CmdBase. * // Started : 2007-10-11 * // Last Update : 2015-03-07 * // Copyright : (C) 2007 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef CMDNGSAC_HPP #define CMDNGSAC_HPP // Application Includes #include "TypeDefs.hpp" #include "base/CmdBase.hpp" #include "gnucap/commands/CmdGnuCapAC.hpp" #include "utility/CnvtType.hpp" class CmdGnuCapAC; //************************************************************************************************** class CmdNgSpiceAC : public CmdBase { private : virtual bool bValidate( void ); public : wxString m_osStart; // The sweep start value wxString m_osStop; // The sweep stop value wxString m_osStep; // The sweep step value eTypeScale m_eScale; // The sweep scale type CmdNgSpiceAC( void ); virtual ~CmdNgSpiceAC( ); virtual bool bSetDefaults( void ); virtual bool bParse ( void ); virtual bool bFormat( void ); CmdNgSpiceAC & operator = ( const CmdGnuCapAC & roCmdAC ); void Print( const wxString & rosPrefix=wxT(" ") ); }; //************************************************************************************************** #endif // CMDNGSAC_HPP gspiceui-1.1.00+dfsg/src/ngspice/commands/CmdNgSpiceDC.hpp0000644000000000000000000000536312476466611021756 0ustar rootroot//************************************************************************************************** // CmdNgSpiceDC.hpp * // ------------------ * // Description : This class contains values associated with the NG-Spice DC command. It inherits * // from the class CmdBase. * // Started : 2006-08-23 * // Last Update : 2015-03-07 * // Copyright : (C) 2006 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef CMDNGSDC_HPP #define CMDNGSDC_HPP // Application Includes #include "TypeDefs.hpp" #include "base/CmdBase.hpp" #include "gnucap/commands/CmdGnuCapOP.hpp" #include "gnucap/commands/CmdGnuCapDC.hpp" #include "utility/CnvtType.hpp" class CmdGnuCapOP; class CmdGnuCapDC; //************************************************************************************************** class CmdNgSpiceDC : public CmdBase { private : virtual bool bValidate( void ); public : wxString m_osStart; // Sweep start value wxString m_osStop; // Sweep stop value wxString m_osStep; // Sweep step value wxString m_osSource; // Sweep source CmdNgSpiceDC( void ); virtual ~CmdNgSpiceDC( ); virtual bool bSetDefaults( void ); virtual bool bParse ( void ); virtual bool bFormat( void ); CmdNgSpiceDC & operator = ( const CmdGnuCapOP & roCmdOP ); CmdNgSpiceDC & operator = ( const CmdGnuCapDC & roCmdDC ); void Print( const wxString & rosPrefix=wxT(" ") ); }; //************************************************************************************************** #endif // CMDNGSDC_HPP gspiceui-1.1.00+dfsg/src/ngspice/commands/CmdNgSpiceOPT.cpp0000644000000000000000000007041012452734370022112 0ustar rootroot//************************************************************************************************** // CmdNgSpiceOPT.cpp * // ------------------- * // Started : 2006-08-23 * // Last Update : 2015-01-05 * // Copyright : (C) 2006 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "CmdNgSpiceOPT.hpp" //************************************************************************************************** // Constructor. CmdNgSpiceOPT::CmdNgSpiceOPT( void ) { bSetDefaults( ); } //************************************************************************************************** // Destructor. CmdNgSpiceOPT::~CmdNgSpiceOPT( ) { } //************************************************************************************************** // Check that the object attributes are valid. // // Return Values : // true - Success // false - Failure bool CmdNgSpiceOPT::bValidate( void ) { wxString os1=wxT("Invalid value for "); double df1; long li1; CmdBase::bValidate( ); if( ! CnvtType::bStrToFlt( m_osABSTOL , &df1 ) ) SetErrMsg( os1 + wxT("ABSTOL.") ); if( ! CnvtType::bStrToFlt( m_osCHGTOL , &df1 ) ) SetErrMsg( os1 + wxT("CHGTOL.") ); if( ! CnvtType::bStrToFlt( m_osCONVABSS, &df1 ) ) SetErrMsg( os1 + wxT("CONVABSS.") ); if( ! CnvtType::bStrToFlt( m_osCONVSTEP, &df1 ) ) SetErrMsg( os1 + wxT("CONVSTEP.") ); if( ! CnvtType::bStrToFlt( m_osDEFAD , &df1 ) ) SetErrMsg( os1 + wxT("DEFAD.") ); if( ! CnvtType::bStrToFlt( m_osDEFAS , &df1 ) ) SetErrMsg( os1 + wxT("DEFAS.") ); if( ! CnvtType::bStrToFlt( m_osDEFL , &df1 ) ) SetErrMsg( os1 + wxT("DEFL.") ); if( ! CnvtType::bStrToFlt( m_osDEFW , &df1 ) ) SetErrMsg( os1 + wxT("DEFW.") ); if( ! CnvtType::bStrToFlt( m_osGMIN , &df1 ) ) SetErrMsg( os1 + wxT("GMIN.") ); if( ! CnvtType::bStrToFlt( m_osPIVREL , &df1 ) ) SetErrMsg( os1 + wxT("PIVREL.") ); if( ! CnvtType::bStrToFlt( m_osPIVTOL , &df1 ) ) SetErrMsg( os1 + wxT("PIVTOL.") ); if( ! CnvtType::bStrToFlt( m_osRAMPTIME, &df1 ) ) SetErrMsg( os1 + wxT("RAMPTIME.") ); if( ! CnvtType::bStrToFlt( m_osRELTOL , &df1 ) ) SetErrMsg( os1 + wxT("RELTOL.") ); if( ! CnvtType::bStrToFlt( m_osRSERIES , &df1 ) ) SetErrMsg( os1 + wxT("RSERIES.") ); if( ! CnvtType::bStrToFlt( m_osRSHUNT , &df1 ) ) SetErrMsg( os1 + wxT("RSHUNT.") ); if( ! CnvtType::bStrToFlt( m_osTEMP , &df1 ) ) SetErrMsg( os1 + wxT("TEMP.") ); if( ! CnvtType::bStrToFlt( m_osTNOM , &df1 ) ) SetErrMsg( os1 + wxT("TNOM.") ); if( ! CnvtType::bStrToFlt( m_osTRTOL , &df1 ) ) SetErrMsg( os1 + wxT("TRTOL.") ); if( ! CnvtType::bStrToFlt( m_osVNTOL , &df1 ) ) SetErrMsg( os1 + wxT("VNTOL.") ); if( ! CnvtType::bStrToInt( m_osGMINSTEP, &li1 ) ) SetErrMsg( os1 + wxT("GMINSTEP.") ); if( ! CnvtType::bStrToInt( m_osITL1 , &li1 ) ) SetErrMsg( os1 + wxT("ITL1.") ); if( ! CnvtType::bStrToInt( m_osITL2 , &li1 ) ) SetErrMsg( os1 + wxT("ITL2.") ); if( ! CnvtType::bStrToInt( m_osITL3 , &li1 ) ) SetErrMsg( os1 + wxT("ITL3.") ); if( ! CnvtType::bStrToInt( m_osITL4 , &li1 ) ) SetErrMsg( os1 + wxT("ITL4.") ); if( ! CnvtType::bStrToInt( m_osITL5 , &li1 ) ) SetErrMsg( os1 + wxT("ITL5.") ); if( ! CnvtType::bStrToInt( m_osITL6 , &li1 ) ) SetErrMsg( os1 + wxT("ITL6.") ); if( ! CnvtType::bStrToInt( m_osMAXEVIT , &li1 ) ) SetErrMsg( os1 + wxT("MAXEVIT.") ); if( ! CnvtType::bStrToInt( m_osMAXOPALT, &li1 ) ) SetErrMsg( os1 + wxT("MAXOPALT.") ); if( ! CnvtType::bStrToInt( m_osMAXORD , &li1 ) ) SetErrMsg( os1 + wxT("MAXORD.") ); if( ! CnvtType::bStrToInt( m_osMAXWARNS, &li1 ) ) SetErrMsg( os1 + wxT("MAXWARNS.") ); if( ! CnvtType::bStrToInt( m_osSRCSTEPS, &li1 ) ) SetErrMsg( os1 + wxT("SRCSTEPS.") ); if( m_osMETHOD.IsEmpty( ) ) SetErrMsg( os1 + wxT("METHOD.") ); return( bIsValid( ) ); } //************************************************************************************************** // Set the object attributes to they're default values. // // Return Values : // true - Success // false - Failure bool CmdNgSpiceOPT::bSetDefaults( void ) { CmdBase::bSetDefaults( ); m_eSimEng = eSIMR_NGSPICE; m_eCmdType = eCMD_OPT; m_osABSTOL = NGS_ABSTOL; m_osCHGTOL = NGS_CHGTOL; m_osCONVABSS = NGS_CONVABSS; m_osCONVSTEP = NGS_CONVSTEP; m_osDEFAD = NGS_DEFAD; m_osDEFAS = NGS_DEFAS; m_osDEFL = NGS_DEFL; m_osDEFW = NGS_DEFW; m_osGMIN = NGS_GMIN; m_osPIVREL = NGS_PIVREL; m_osPIVTOL = NGS_PIVTOL; m_osRAMPTIME = NGS_RAMPTIME; m_osRELTOL = NGS_RELTOL; m_osRSERIES = NGS_RSERIES; m_osRSHUNT = NGS_RSHUNT; m_osTEMP = NGS_TEMP; m_osTNOM = NGS_TNOM; m_osTRTOL = NGS_TRTOL; m_osVNTOL = NGS_VNTOL; m_osGMINSTEP = NGS_GMINSTEP; m_osITL1 = NGS_ITL1; m_osITL2 = NGS_ITL2; m_osITL3 = NGS_ITL3; m_osITL4 = NGS_ITL4; m_osITL5 = NGS_ITL5; m_osITL6 = NGS_ITL6; m_osMAXEVIT = NGS_MAXEVIT; m_osMAXOPALT = NGS_MAXOPALT; m_osMAXORD = NGS_MAXORD; m_osMAXWARNS = NGS_MAXWARNS; m_osNUMDGT = NGS_NUMDGT; m_osSRCSTEPS = NGS_SRCSTEPS; m_osWIDTH = NGS_WIDTH; m_osMETHOD = NGS_METHOD; m_osUNITS = NGS_UNITS; m_bBADMOS3 = NGS_BADMOS3; m_bINTERP = NGS_INTERP; m_bNOOPAC = NGS_NOOPAC; m_bNOOPALT = NGS_NOOPALT; m_bOPTS = NGS_OPTS; m_bTRYTOCOM = NGS_TRYTOCOM; m_bWARN = NGS_WARN; return( true ); } //************************************************************************************************** // Parse the command string. // // Eg.s : .OPTIONS NOPAGE // .OPTIONS NOPAGE ABSTOL=1.1p CHGTOL=11.0f CONVABSS=0.2 CONVSTEP=0.5 DEFAD=10.0f DEFAS=10.0f // DEFL=110.0u DEFW=110.0u GMIN=1.1p GMINSTEP=1 ITL1=110 ITL2=60 ITL3=5 ITL4=20 // ITL5=2000 ITL6=20 MAXEVIT=6 MAXOPALT=6 MAXORD=3 MAXWARNS=6 PIVREL=2.0m // PIVTOL=110.0f RAMPTIME=1.0 RELTOL=2.0m RSERIES=1.0 RSHUNT=2.0E11 SRCSTEPS=20 // TEMP=30.0 TNOM=30.0 TRTOL=8.0 VNTOL=2.0u METHOD=GEAR BADMOS3 INTERP NOOPAC // NOOPALT OPTS TRYTOCOM WARN // // Return Values : // true - Success // false - Failure bool CmdNgSpiceOPT::bParse( void ) { wxStringTokenizer ostk1; wxString os1, os2; size_t sz1; // Clear the object attributes os1 = (wxString &) *this; bSetDefaults( ); assign( os1 ); // Tokenize the command string ostk1.SetString( *this ); if( ostk1.CountTokens( ) < 2 ) return( bValidate( ) ); // Check command type os1 = ostk1.GetNextToken( ).Left( 4 ).Upper( ); if( os1 != wxT(".OPT") ) return( bValidate( ) ); // Extract each parameter value while( ostk1.HasMoreTokens( ) ) { // Extract the field name and the associated value os1 = ostk1.GetNextToken( ); os2 = wxT(""); if( (sz1=os1.find( wxT("=") )) != wxString::npos ) { os2 = os1.Right( os1.Length( )-sz1-1 ); os1 = os1.Left( sz1 ); } // Set the attribute value if( os1.StartsWith( wxT("ABSTOL") ) ) m_osABSTOL = os2; else if( os1.StartsWith( wxT("CHGTOL") ) ) m_osCHGTOL = os2; else if( os1.StartsWith( wxT("CONVABSS") ) ) m_osCONVABSS = os2; else if( os1.StartsWith( wxT("CONVSTEP") ) ) m_osCONVSTEP = os2; else if( os1.StartsWith( wxT("DEFAD") ) ) m_osDEFAD = os2; else if( os1.StartsWith( wxT("DEFAS") ) ) m_osDEFAS = os2; else if( os1.StartsWith( wxT("DEFL") ) ) m_osDEFL = os2; else if( os1.StartsWith( wxT("DEFW") ) ) m_osDEFW = os2; else if( os1.StartsWith( wxT("GMIN") ) ) m_osGMIN = os2; else if( os1.StartsWith( wxT("PIVREL") ) ) m_osPIVREL = os2; else if( os1.StartsWith( wxT("PIVTOL") ) ) m_osPIVTOL = os2; else if( os1.StartsWith( wxT("RAMPTIME") ) ) m_osRAMPTIME = os2; else if( os1.StartsWith( wxT("RELTOL") ) ) m_osRELTOL = os2; else if( os1.StartsWith( wxT("RSERIES") ) ) m_osRSERIES = os2; else if( os1.StartsWith( wxT("RSHUNT") ) ) m_osRSHUNT = os2; else if( os1.StartsWith( wxT("TEMP") ) ) m_osTEMP = os2; else if( os1.StartsWith( wxT("TNOM") ) ) m_osTNOM = os2; else if( os1.StartsWith( wxT("TRTOL") ) ) m_osTRTOL = os2; else if( os1.StartsWith( wxT("VNTOL") ) ) m_osVNTOL = os2; else if( os1.StartsWith( wxT("GMINSTEP") ) ) m_osGMINSTEP = os2; else if( os1.StartsWith( wxT("ITL1") ) ) m_osITL1 = os2; else if( os1.StartsWith( wxT("ITL2") ) ) m_osITL2 = os2; else if( os1.StartsWith( wxT("ITL3") ) ) m_osITL3 = os2; else if( os1.StartsWith( wxT("ITL4") ) ) m_osITL4 = os2; else if( os1.StartsWith( wxT("ITL5") ) ) m_osITL5 = os2; else if( os1.StartsWith( wxT("ITL6") ) ) m_osITL6 = os2; else if( os1.StartsWith( wxT("MAXEVIT") ) ) m_osMAXEVIT = os2; else if( os1.StartsWith( wxT("MAXOPALT") ) ) m_osMAXOPALT = os2; else if( os1.StartsWith( wxT("MAXORD") ) ) m_osMAXORD = os2; else if( os1.StartsWith( wxT("MAXWARNS") ) ) m_osMAXWARNS = os2; else if( os1.StartsWith( wxT("SRCSTEPS") ) ) m_osSRCSTEPS = os2; else if( os1.StartsWith( wxT("METHOD") ) ) m_osMETHOD = os2; else if( os1.StartsWith( wxT("BADMOS3") ) ) m_bBADMOS3 = true; else if( os1.StartsWith( wxT("INTERP") ) ) m_bINTERP = true; else if( os1.StartsWith( wxT("NOOPAC") ) ) m_bNOOPAC = true; else if( os1.StartsWith( wxT("NOOPALT") ) ) m_bNOOPALT = true; else if( os1.StartsWith( wxT("OPTS") ) ) m_bOPTS = true; else if( os1.StartsWith( wxT("TRYTOCOM") ) ) m_bTRYTOCOM = true; else if( os1.StartsWith( wxT("WARN") ) ) m_bWARN = true; else if( os1.StartsWith( wxT("NOPAGE") ) ) { ; } } return( bValidate( ) ); } //************************************************************************************************** // Format the command string. // // Return Values : // true - Success // false - Failure bool CmdNgSpiceOPT::bFormat( void ) { wxString os1, os2; double df1, df2; long li1, li2; os1 = wxT(".OPTIONS NOPAGE"); CnvtType::bStrToFlt( m_osABSTOL , &df1 ); CnvtType::bStrToFlt( NGS_ABSTOL , &df2 ); if( df1 != df2 ) os1 << wxT(" ABSTOL=") << m_osABSTOL; CnvtType::bStrToFlt( m_osCHGTOL , &df1 ); CnvtType::bStrToFlt( NGS_CHGTOL , &df2 ); if( df1 != df2 ) os1 << wxT(" CHGTOL=") << m_osCHGTOL; CnvtType::bStrToFlt( m_osCONVABSS, &df1 ); CnvtType::bStrToFlt( NGS_CONVABSS, &df2 ); if( df1 != df2 ) os1 << wxT(" CONVABSS=") << m_osCONVABSS; CnvtType::bStrToFlt( m_osCONVSTEP, &df1 ); CnvtType::bStrToFlt( NGS_CONVSTEP, &df2 ); if( df1 != df2 ) os1 << wxT(" CONVSTEP=") << m_osCONVSTEP; CnvtType::bStrToFlt( m_osDEFAD , &df1 ); CnvtType::bStrToFlt( NGS_DEFAD , &df2 ); if( df1 != df2 ) os1 << wxT(" DEFAD=") << m_osDEFAD; CnvtType::bStrToFlt( m_osDEFAS , &df1 ); CnvtType::bStrToFlt( NGS_DEFAS , &df2 ); if( df1 != df2 ) os1 << wxT(" DEFAS=") << m_osDEFAS; CnvtType::bStrToFlt( m_osDEFL , &df1 ); CnvtType::bStrToFlt( NGS_DEFL , &df2 ); if( df1 != df2 ) os1 << wxT(" DEFL=") << m_osDEFL; CnvtType::bStrToFlt( m_osDEFW , &df1 ); CnvtType::bStrToFlt( NGS_DEFW , &df2 ); if( df1 != df2 ) os1 << wxT(" DEFW=") << m_osDEFW; CnvtType::bStrToFlt( m_osGMIN , &df1 ); CnvtType::bStrToFlt( NGS_GMIN , &df2 ); if( df1 != df2 ) os1 << wxT(" GMIN=") << m_osGMIN; CnvtType::bStrToFlt( m_osPIVREL , &df1 ); CnvtType::bStrToFlt( NGS_PIVREL , &df2 ); if( df1 != df2 ) os1 << wxT(" PIVREL=") << m_osPIVREL; CnvtType::bStrToFlt( m_osPIVTOL , &df1 ); CnvtType::bStrToFlt( NGS_PIVTOL , &df2 ); if( df1 != df2 ) os1 << wxT(" PIVTOL=") << m_osPIVTOL; CnvtType::bStrToFlt( m_osRAMPTIME, &df1 ); CnvtType::bStrToFlt( NGS_RAMPTIME, &df2 ); if( df1 != df2 ) os1 << wxT(" RAMPTIME=") << m_osRAMPTIME; CnvtType::bStrToFlt( m_osRELTOL , &df1 ); CnvtType::bStrToFlt( NGS_RELTOL , &df2 ); if( df1 != df2 ) os1 << wxT(" RELTOL=") << m_osRELTOL; CnvtType::bStrToFlt( m_osRSERIES , &df1 ); CnvtType::bStrToFlt( NGS_RSERIES , &df2 ); if( df1 != df2 ) os1 << wxT(" RSERIES=") << m_osRSERIES; CnvtType::bStrToFlt( m_osRSHUNT , &df1 ); CnvtType::bStrToFlt( NGS_RSHUNT , &df2 ); if( df1 != df2 ) os1 << wxT(" RSHUNT=") << m_osRSHUNT; CnvtType::bStrToFlt( m_osTEMP , &df1 ); CnvtType::bStrToFlt( NGS_TEMP , &df2 ); if( df1 != df2 ) os1 << wxT(" TEMP=") << m_osTEMP; CnvtType::bStrToFlt( m_osTNOM , &df1 ); CnvtType::bStrToFlt( NGS_TNOM , &df2 ); if( df1 != df2 ) os1 << wxT(" TNOM=") << m_osTNOM; CnvtType::bStrToFlt( m_osTRTOL , &df1 ); CnvtType::bStrToFlt( NGS_TRTOL , &df2 ); if( df1 != df2 ) os1 << wxT(" TRTOL=") << m_osTRTOL; CnvtType::bStrToFlt( m_osVNTOL , &df1 ); CnvtType::bStrToFlt( NGS_VNTOL , &df2 ); if( df1 != df2 ) os1 << wxT(" VNTOL=") << m_osVNTOL; CnvtType::bStrToInt( m_osGMINSTEP, &li1 ); CnvtType::bStrToInt( NGS_GMINSTEP, &li2 ); if( li1 != li2 ) os1 << wxT(" GMINSTEP=") << m_osGMINSTEP; CnvtType::bStrToInt( m_osITL1 , &li1 ); CnvtType::bStrToInt( NGS_ITL1 , &li2 ); if( li1 != li2 ) os1 << wxT(" ITL1=") << m_osITL1; CnvtType::bStrToInt( m_osITL2 , &li1 ); CnvtType::bStrToInt( NGS_ITL2 , &li2 ); if( li1 != li2 ) os1 << wxT(" ITL2=") << m_osITL2; CnvtType::bStrToInt( m_osITL3 , &li1 ); CnvtType::bStrToInt( NGS_ITL3 , &li2 ); if( li1 != li2 ) os1 << wxT(" ITL3=") << m_osITL3; CnvtType::bStrToInt( m_osITL4 , &li1 ); CnvtType::bStrToInt( NGS_ITL4 , &li2 ); if( li1 != li2 ) os1 << wxT(" ITL4=") << m_osITL4; CnvtType::bStrToInt( m_osITL5 , &li1 ); CnvtType::bStrToInt( NGS_ITL5 , &li2 ); if( li1 != li2 ) os1 << wxT(" ITL5=") << m_osITL5; CnvtType::bStrToInt( m_osITL6 , &li1 ); CnvtType::bStrToInt( NGS_ITL6 , &li2 ); if( li1 != li2 ) os1 << wxT(" ITL6=") << m_osITL6; CnvtType::bStrToInt( m_osMAXEVIT , &li1 ); CnvtType::bStrToInt( NGS_MAXEVIT , &li2 ); if( li1 != li2 ) os1 << wxT(" MAXEVIT=") << m_osMAXEVIT; CnvtType::bStrToInt( m_osMAXOPALT, &li1 ); CnvtType::bStrToInt( NGS_MAXOPALT, &li2 ); if( li1 != li2 ) os1 << wxT(" MAXOPALT=") << m_osMAXOPALT; CnvtType::bStrToInt( m_osMAXORD , &li1 ); CnvtType::bStrToInt( NGS_MAXORD , &li2 ); if( li1 != li2 ) os1 << wxT(" MAXORD=") << m_osMAXORD; CnvtType::bStrToInt( m_osMAXWARNS, &li1 ); CnvtType::bStrToInt( NGS_MAXWARNS, &li2 ); if( li1 != li2 ) os1 << wxT(" MAXWARNS=") << m_osMAXWARNS; CnvtType::bStrToInt( m_osNUMDGT , &li1 ); CnvtType::bStrToInt( NGS_NUMDGT , &li2 ); if( li1 != li2 ) os1 << wxT(" NUMDGT=") << m_osNUMDGT; CnvtType::bStrToInt( m_osSRCSTEPS, &li1 ); CnvtType::bStrToInt( NGS_SRCSTEPS, &li2 ); if( li1 != li2 ) os1 << wxT(" SRCSTEPS=") << m_osSRCSTEPS; CnvtType::bStrToInt( m_osWIDTH , &li1 ); CnvtType::bStrToInt( NGS_WIDTH , &li2 ); if( li1 != li2 ) os1 << wxT(" WIDTH=") << m_osWIDTH; os2 = m_osMETHOD.Upper( ); if( os2.CmpNoCase( NGS_METHOD ) ) os1 << wxT(" METHOD=") << os2; os2 = m_osUNITS .Upper( ); if( os2.CmpNoCase( NGS_UNITS ) ) os1 << wxT(" UNITS=") << os2; if( m_bBADMOS3 != NGS_BADMOS3 ) os1 << wxT(" BADMOS3"); if( m_bINTERP != NGS_INTERP ) os1 << wxT(" INTERP"); if( m_bNOOPAC != NGS_NOOPAC ) os1 << wxT(" NOOPAC"); if( m_bNOOPALT != NGS_NOOPALT ) os1 << wxT(" NOOPALT"); if( m_bOPTS != NGS_OPTS ) os1 << wxT(" OPTS"); if( m_bTRYTOCOM != NGS_TRYTOCOM ) os1 << wxT(" TRYTOCOM"); if( m_bWARN != NGS_WARN ) os1 << wxT(" WARN"); assign( os1 ); return( bValidate( ) ); } //************************************************************************************************** // Copy the contents of a CmdGnuCapAC object. // // Argument List : // roCmdOPT - A reference to a CmdGnuCapOPT object // // Return Values : // A reference to this object CmdNgSpiceOPT & CmdNgSpiceOPT::operator = ( const CmdGnuCapOPT & roCmdOPT ) { (CmdBase &) *this = (CmdBase &) roCmdOPT; if( m_osABSTOL != NGS_ABSTOL ) m_osABSTOL = roCmdOPT.m_osABSTOL; if( m_osCHGTOL != NGS_CHGTOL ) m_osCHGTOL = roCmdOPT.m_osCHGTOL; //if( m_osCONVABSS != NGS_CONVABSS ) m_osCONVABSS = roCmdOPT.m_osCONVABSS; //if( m_osCONVSTEP != NGS_CONVSTEP ) m_osCONVSTEP = roCmdOPT.m_osCONVSTEP; if( m_osDEFAD != NGS_DEFAD ) m_osDEFAD = roCmdOPT.m_osDEFAD; if( m_osDEFAS != NGS_DEFAS ) m_osDEFAS = roCmdOPT.m_osDEFAS; if( m_osDEFL != NGS_DEFL ) m_osDEFL = roCmdOPT.m_osDEFL; if( m_osDEFW != NGS_DEFW ) m_osDEFW = roCmdOPT.m_osDEFW; if( m_osGMIN != NGS_GMIN ) m_osGMIN = roCmdOPT.m_osGMIN; //if( m_osRAMPTIME != NGS_RAMPTIME ) m_osRAMPTIME = roCmdOPT.m_osRAMPTIME; if( m_osRELTOL != NGS_RELTOL ) m_osRELTOL = roCmdOPT.m_osRELTOL; //if( m_osRSERIES != NGS_RSERIES ) m_osRSERIES = roCmdOPT.m_osRSERIES; //if( m_osRSHUNT != NGS_RSHUNT ) m_osRSHUNT = roCmdOPT.m_osRSHUNT; if( m_osTEMP != NGS_TEMP ) m_osTEMP = roCmdOPT.m_osTEMP; if( m_osTNOM != NGS_TNOM ) m_osTNOM = roCmdOPT.m_osTNOM; if( m_osTRTOL != NGS_TRTOL ) m_osTRTOL = roCmdOPT.m_osTRTOL; if( m_osVNTOL != NGS_VNTOL ) m_osVNTOL = roCmdOPT.m_osVNTOL; //if( m_osGMINSTEP != NGS_GMINSTEP ) m_osGMINSTEP = roCmdOPT.m_osGMINSTEP; if( m_osITL1 != NGS_ITL1 ) m_osITL1 = roCmdOPT.m_osITL1; if( m_osITL2 != NGS_ITL2 ) m_osITL2 = roCmdOPT.m_osITL2; if( m_osITL3 != NGS_ITL3 ) m_osITL3 = roCmdOPT.m_osITL3; if( m_osITL4 != NGS_ITL4 ) m_osITL4 = roCmdOPT.m_osITL4; if( m_osITL5 != NGS_ITL5 ) m_osITL5 = roCmdOPT.m_osITL5; if( m_osITL6 != NGS_ITL6 ) m_osITL6 = roCmdOPT.m_osITL6; //if( m_osMAXEVIT != NGS_MAXEVIT ) m_osMAXEVIT = roCmdOPT.m_osMAXEVIT; //if( m_osMAXOPALT != NGS_MAXOPALT ) m_osMAXOPALT = roCmdOPT.m_osMAXOPALT; //if( m_osMAXORD != NGS_MAXORD ) m_osMAXORD = roCmdOPT.m_osMAXORD; //if( m_osMAXWARNS != NGS_MAXWARNS ) m_osMAXWARNS = roCmdOPT.m_osMAXWARNS; //if( m_osSRCSTEPS != NGS_SRCSTEPS ) m_osSRCSTEPS = roCmdOPT.m_osSRCSTEPS; if( m_osMETHOD != NGS_METHOD ) m_osMETHOD = roCmdOPT.m_osMETHOD; //if( m_bBADMOS3 != NGS_BADMOS3 ) m_bBADMOS3 = roCmdOPT.m_bBADMOS3; //if( m_bINTERP != NGS_INTERP ) m_bINTERP = roCmdOPT.m_bINTERP; //if( m_bNOOPAC != NGS_NOOPAC ) m_bNOOPAC = roCmdOPT.m_bNOOPAC; //if( m_bNOOPALT != NGS_NOOPALT ) m_bNOOPALT = roCmdOPT.m_bNOOPALT; if( m_bOPTS != NGS_OPTS ) m_bOPTS = roCmdOPT.m_bOPTS; //if( m_bTRYTOCOM != NGS_TRYTOCOM ) m_bTRYTOCOM = roCmdOPT.m_bTRYTOCOM; //if( m_bWARN != NGS_WARN ) m_bWARN = roCmdOPT.m_bWARN; bFormat( ); return( *this ); } //************************************************************************************************** // Print the object attributes. // // Argument List : // rosPrefix - A prefix to every line displayed (usually just spaces) void CmdNgSpiceOPT::Print( const wxString & rosPrefix ) { CmdBase::Print( rosPrefix + wxT("CmdBase::") ); std::cout << rosPrefix.mb_str( ) << "m_osABSTOL : " << m_osABSTOL .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osCHGTOL : " << m_osCHGTOL .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osCONVABSS : " << m_osCONVABSS.mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osCONVSTEP : " << m_osCONVSTEP.mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osDEFAD : " << m_osDEFAD .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osDEFAS : " << m_osDEFAS .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osDEFL : " << m_osDEFL .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osDEFW : " << m_osDEFW .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osGMIN : " << m_osGMIN .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osPIVREL : " << m_osPIVREL .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osPIVTOL : " << m_osPIVTOL .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osRAMPTIME : " << m_osRAMPTIME.mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osRELTOL : " << m_osRELTOL .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osRSERIES : " << m_osRSERIES .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osRSHUNT : " << m_osRSHUNT .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osTEMP : " << m_osTEMP .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osTNOM : " << m_osTNOM .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osTRTOL : " << m_osTRTOL .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osVNTOL : " << m_osVNTOL .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osGMINSTEP : " << m_osGMINSTEP.mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osITL1 : " << m_osITL1 .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osITL2 : " << m_osITL2 .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osITL3 : " << m_osITL3 .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osITL4 : " << m_osITL4 .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osITL5 : " << m_osITL5 .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osITL6 : " << m_osITL6 .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osMAXEVIT : " << m_osMAXEVIT .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osMAXOPALT : " << m_osMAXOPALT.mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osMAXORD : " << m_osMAXORD .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osMAXWARNS : " << m_osMAXWARNS.mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osSRCSTEPS : " << m_osSRCSTEPS.mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osMETHOD : " << m_osMETHOD .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_bBADMOS3 : " << (m_bBADMOS3 ? "true" : "false") << '\n'; std::cout << rosPrefix.mb_str( ) << "m_bINTERP : " << (m_bINTERP ? "true" : "false") << '\n'; std::cout << rosPrefix.mb_str( ) << "m_bNOOPAC : " << (m_bNOOPAC ? "true" : "false") << '\n'; std::cout << rosPrefix.mb_str( ) << "m_bNOOPALT : " << (m_bNOOPALT ? "true" : "false") << '\n'; std::cout << rosPrefix.mb_str( ) << "m_bOPTS : " << (m_bOPTS ? "true" : "false") << '\n'; std::cout << rosPrefix.mb_str( ) << "m_bTRYTOCOM : " << (m_bTRYTOCOM ? "true" : "false") << '\n'; std::cout << rosPrefix.mb_str( ) << "m_bWARN : " << (m_bWARN ? "true" : "false") << '\n'; } //************************************************************************************************** // Test Utility * //************************************************************************************************** #ifdef TEST_CMDNGSPICEOPT using namespace std; // Function prototypes void Usage( char * psAppName ); //************************************************************************************************** int main( int argc, char * argv[ ] ) { wxString osCmd; wxString os1; // Validate the argument count passed to the application if( argc > 2 ) { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } // Process the command line arguments os1 = wxConvLibc.cMB2WC( argv[ 1 ] ); if( argc > 1 ) { if( os1 == wxT("-h") ) { Usage( argv[ 0 ] ); exit( EXIT_SUCCESS ); } else { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } } // Display the utility banner cout << "\n Class CmdNgSpiceOPT Test Utility" << "\n Version 1.04 (2015-01-03)\n"; // Create a NG-SPICE OPTIONS command object CmdNgSpiceOPT oCmd_OPT; // Use the following command example to check the formatter and the parser : osCmd << wxT(".OPTIONS NOPAGE ABSTOL=1.1p CHGTOL=11.0f CONVABSS=0.2 CONVSTEP=0.5 DEFAD=10.0f ") << wxT("DEFAS=10.0f DEFL=110.0u DEFW=110.0u GMIN=1.1p GMINSTEP=1 ITL1=110 ITL2=60 ITL3=5 ") << wxT("ITL4=20 ITL5=2000 ITL6=20 MAXEVIT=6 MAXOPALT=6 MAXORD=3 MAXWARNS=6 PIVREL=2.0m ") << wxT("PIVTOL=110.0f RAMPTIME=1.0 RELTOL=2.0m RSERIES=1.0 RSHUNT=2.0E11 SRCSTEPS=20 ") << wxT("TEMP=30.0 TNOM=30.0 TRTOL=8.0 VNTOL=2.0u METHOD=GEAR BADMOS3 INTERP NOOPAC ") << wxT("NOOPALT OPTS TRYTOCOM WARN"); // Set things up for a formatter test oCmd_OPT.m_osABSTOL = wxT("1.1p"); oCmd_OPT.m_osCHGTOL = wxT("11.0f"); oCmd_OPT.m_osCONVABSS = wxT("0.2"); oCmd_OPT.m_osCONVSTEP = wxT("0.5"); oCmd_OPT.m_osDEFAD = wxT("10.0f"); oCmd_OPT.m_osDEFAS = wxT("10.0f"); oCmd_OPT.m_osDEFL = wxT("110.0u"); oCmd_OPT.m_osDEFW = wxT("110.0u"); oCmd_OPT.m_osGMIN = wxT("1.1p"); oCmd_OPT.m_osGMINSTEP = wxT("1"); oCmd_OPT.m_osITL1 = wxT("110"); oCmd_OPT.m_osITL2 = wxT("60"); oCmd_OPT.m_osITL3 = wxT("5"); oCmd_OPT.m_osITL4 = wxT("20"); oCmd_OPT.m_osITL5 = wxT("2000"); oCmd_OPT.m_osITL6 = wxT("20"); oCmd_OPT.m_osMAXEVIT = wxT("6"); oCmd_OPT.m_osMAXOPALT = wxT("6"); oCmd_OPT.m_osMAXORD = wxT("3"); oCmd_OPT.m_osMAXWARNS = wxT("6"); oCmd_OPT.m_osPIVREL = wxT("2.0m"); oCmd_OPT.m_osPIVTOL = wxT("110.0f"); oCmd_OPT.m_osRAMPTIME = wxT("1.0"); oCmd_OPT.m_osRELTOL = wxT("2.0m"); oCmd_OPT.m_osRSERIES = wxT("1.0"); oCmd_OPT.m_osRSHUNT = wxT("2.0E11"); oCmd_OPT.m_osSRCSTEPS = wxT("20"); oCmd_OPT.m_osTEMP = wxT("30.0"); oCmd_OPT.m_osTNOM = wxT("30.0"); oCmd_OPT.m_osTRTOL = wxT("8.0"); oCmd_OPT.m_osVNTOL = wxT("2.0u"); oCmd_OPT.m_osMETHOD = wxT("GEAR"); oCmd_OPT.m_bBADMOS3 = true; oCmd_OPT.m_bINTERP = true; oCmd_OPT.m_bNOOPAC = true; oCmd_OPT.m_bNOOPALT = true; oCmd_OPT.m_bOPTS = true; oCmd_OPT.m_bTRYTOCOM = true; oCmd_OPT.m_bWARN = true; cout << "\nRun Formatter : " << ( oCmd_OPT.bFormat( ) ? "OK" : "FAULT" ); cout << "\nTest Cmd Format : " << ( oCmd_OPT == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\noCmd_OPT Contents : " << oCmd_OPT.mb_str( ) << '\n'; // Set things up for a parser test oCmd_OPT.bSetString( osCmd ); cout << "\nRun Parser : " << ( oCmd_OPT.bParse( ) ? "OK" : "FAULT" ); oCmd_OPT.bFormat( ); cout << "\nTest Cmd Format : " << ( oCmd_OPT == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\noCmd_OPT Contents : " << oCmd_OPT.mb_str( ) << '\n'; cout << '\n'; exit( EXIT_SUCCESS ); } //************************************************************************************************** void Usage( char * psAppName ) { cout << "\nUsage : " << psAppName << " [-OPTIONS]" << "\nOptions :" << "\n -h : Print usage (this message)\n"; } #endif // TEST_CMDNGSPICEOPT //************************************************************************************************** gspiceui-1.1.00+dfsg/src/ngspice/commands/CmdNgSpicePR.cpp0000644000000000000000000004444212505244022021764 0ustar rootroot//************************************************************************************************** // CmdNgSpicePR.cpp * // ------------------ * // Started : 2007-10-16 * // Last Update : 2015-03-27 * // Copyright : (C) 2007 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "CmdNgSpicePR.hpp" //************************************************************************************************** // Constructor. CmdNgSpicePR::CmdNgSpicePR( void ) { bSetDefaults( ); } //************************************************************************************************** // Destructor. CmdNgSpicePR::~CmdNgSpicePR( ) { } //************************************************************************************************** // Check that the object attributes are valid. // // Return Values : // true - Success // false - Failure bool CmdNgSpicePR::bValidate( void ) { CmdBase::bValidate( ); if( m_osaNodes.GetCount( )<=0 && m_osaCpnts.GetCount( )<=0 ) SetErrMsg( wxT("No components or nodes have been selected.") ); if( ! m_bParams[ ePARAM_VLT ] ) SetErrMsg( wxT("No parameters selected.") ); return( bIsValid( ) ); } //************************************************************************************************** // Set the object attributes to they're default values. // // Return Values : // true - Success // false - Failure bool CmdNgSpicePR::bSetDefaults( void ) { int i1; CmdBase::bSetDefaults( ); m_eSimEng = eSIMR_NGSPICE; m_eCmdType = eCMD_PR; m_eAnaType = eCMD_NONE; m_osaNodes.Empty( ); m_osaCpnts.Empty( ); for( i1=(int)ePARAM_FST; i1<=(int)ePARAM_LST; i1++ ) m_bParams[ i1 ] = false; for( i1=(int)eCPXPT_FST; i1<=(int)eCPXPT_LST; i1++ ) m_bCpxPts[ i1 ] = false; return( true ); } //************************************************************************************************** // Set the analysis type. // // Argument List : // eAnaType - An analysis command type // // Return Values : // true - Success // false - Failure bool CmdNgSpicePR::bSetAnaType( eTypeCmd eAnaType ) { // Does anything actually need to be done? if( eAnaType == m_eAnaType ) return( true ); // Check that the desired analysis type is supported switch( eAnaType ) { case eCMD_OP : case eCMD_DC : case eCMD_AC : case eCMD_TR : break; default : return( false ); } m_eAnaType = eAnaType; return( true ); } //************************************************************************************************** // Parse the command string. // // Eg.s : .PRINT AC VM(6,0) 0-VM(5) VM(1,7) VM(2) VP(6,0) 0-VP(5) VP(1,7) VP(2) // .PRINT AC VDB(4) // // Return Values : // true - Success // false - Failure bool CmdNgSpicePR::bParse( void ) { wxStringTokenizer ostk1; Component oCpnt1; wxString os1, os2; int i1, i2; size_t sz1; // Clear the object attributes os1 = *this; bSetDefaults( ); assign( os1 ); // Tokenize the command string ostk1.SetString( *this ); if( ostk1.CountTokens( ) < 3 ) return( bValidate( ) ); // Check command type os1 = ostk1.GetNextToken( ).Left( 3 ).Upper( ); if( os1 != wxT(".PR") ) return( bValidate( ) ); // Extract the analysis type os1 = ostk1.GetNextToken( ); if( os1 == wxT("DC") ) m_eAnaType = eCMD_DC; else if( os1 == wxT("AC") ) m_eAnaType = eCMD_AC; else if( os1 == wxT("TRAN") ) m_eAnaType = eCMD_TR; else return( bValidate( ) ); // Standardize the argument list format; there are 3 possible formats eg. V(n), V(n,m) or 0-V(n), // reformat the latter to : V(0,n). os2.Empty( ); while( ostk1.HasMoreTokens( ) ) { os1 = ostk1.GetNextToken( ); if( os1.Length( ) < 4 ) return( bValidate( ) ); if( os1.StartsWith( wxT("0-") ) ) { i1 = os1.Index( wxT('(') ); i2 = os1.Index( wxT(')') ); if( i1!=-1 && i2!=-1 && i2>(i1+1) ) os1 = os1.Mid( 2, (size_t) i1-1 ) + wxT("0,") + os1.Mid( (size_t) i1+1 ); } os2 << os1 << wxT(' '); } ostk1.SetString( os2 ); // Extract the parameters to derive, any complex parts and test component and/or test node labels while( ostk1.HasMoreTokens( ) ) { // Extract the next field os1 = ostk1.GetNextToken( ); // Extract the parameter specifiers switch( (char) os1.GetChar( 0 ) ) { case wxT('V') : m_bParams[ ePARAM_VLT ] = true; break; case wxT('I') : m_bParams[ ePARAM_CUR ] = true; break; case wxT('P') : m_bParams[ ePARAM_PWR ] = true; break; case wxT('R') : m_bParams[ ePARAM_RES ] = true; break; default : return( bValidate( ) ); } // Extract the complex parts if the analysis type is AC if( m_eAnaType == eCMD_AC ) { switch( (char) os1.GetChar( 1 ) ) { case wxT('M') : m_bCpxPts[ eCPXPT_MAG ] = true; break; case wxT('P') : m_bCpxPts[ eCPXPT_PHASE ] = true; break; case wxT('R') : m_bCpxPts[ eCPXPT_REAL ] = true; break; case wxT('I') : m_bCpxPts[ eCPXPT_IMAG ] = true; break; case wxT('D') : if( os1.Mid( 1, 2 ).Upper( ) == wxT("DB") ) { m_bCpxPts[ eCPXPT_MAG ] = true; m_bCpxPts[ eCPXPT_MAGDB ] = true; break; } default : return( bValidate( ) ); } } // Extract the node and component label/s, there are 2 possible formats eg. V(n) or V(n,m,...), // the first denotes a node and the second component. i1 = os1.Index( wxT('(') ); i2 = os1.Index( wxT(')') ); if( i1!=-1 && i2!=-1 && i2>(i1+1) ) { os1 = os1.Mid( (size_t) i1+1, (size_t) i2-i1-1 ); if( os1.Find( wxT(',') ) == wxNOT_FOUND ) { // This is a node, add it to the list if it's not already there if( m_osaNodes.Index( os1 ) == wxNOT_FOUND ) m_osaNodes.Add( os1 ); } else { // This is a component, add it to the list if it's not already there for( sz1=0; sz1sz1+1 ) { os2 = os1.SubString( sz1+1, sz2-1 ); oCpnt1 = NetList::roGetCpnt( os2 ); if( m_osaCpnts.Index( os2 )!=wxNOT_FOUND && oCpnt1.bIsValid( ) ) { os1.Remove( sz1+1, sz2-sz1-1 ); os1.insert( sz1+1, oCpnt1.rosGetNodes( ) ); } sz1 = os1.find( wxT('('), sz2 ); sz2 = os1.find( wxT(')'), sz1 ); } osCmd << wxT(' ') << os1; // Modify the argument list slightly; reformat V(0,n) to 0-V(n) otherwise NG-Spice barfs ostk1.SetString( osCmd ); osCmd.Empty( ); while( ostk1.HasMoreTokens( ) ) { os1 = ostk1.GetNextToken( ); if( (i1=os1.Find( wxT("(0,") )) != wxNOT_FOUND ) { os1.Remove( (size_t) i1+1, 2 ); os1.Prepend( wxT("0-") ); } if( ! osCmd.IsEmpty( ) ) osCmd << wxT(' '); osCmd << os1; } // Assign the command string value to the base class assign( osCmd ); return( bValidate( ) ); } //************************************************************************************************** // Get the list of parameters to print. // // Return Values : // The number of parameters to derive const wxString & CmdNgSpicePR::rosGetParamLst( void ) { static wxString osParamLst; wxString osParam, osCpxPt; int i1, i2, i3; // Clear the static variable osParamLst = wxT(""); // Sequence through the various parameter types for( i1=ePARAM_FST; i1<=ePARAM_LST; i1++ ) { if( ! m_bParams[ i1 ] ) continue; switch( (eTypeParam) i1 ) { case ePARAM_VLT : osParam = wxT('V'); break; case ePARAM_CUR : osParam = wxT('I'); break; case ePARAM_PWR : osParam = wxT('P'); break; case ePARAM_RES : osParam = wxT('R'); break; default : break; } // Sequence through the various complex parts for( i2=eCPXPT_FST; i2 2 ) { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } // Process the command line arguments os1 = wxConvLibc.cMB2WC( argv[ 1 ] ); if( argc > 1 ) { if( os1 == wxT("-h") ) { Usage( argv[ 0 ] ); exit( EXIT_SUCCESS ); } else { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } } // Display the utility banner cout << "\n Class CmdNgSpicePR Test Utility" << "\n Version 1.03 (2014-04-04)\n"; // Create a NG-SPICE PRINT command object CmdNgSpicePR oCmd_PR; // Use the following command example to check the formatter and the parser : osCmd = wxT(".PRINT AC VM(6,0) 0-VM(5) VM(1,7) VM(2) VP(6,0) 0-VP(5) VP(1,7) VP(2)"); // Set things up for a formatter test oCmd_PR.m_eAnaType = eCMD_AC; oCmd_PR.m_osaCpnts.Add( wxT("6,0") ); oCmd_PR.m_osaCpnts.Add( wxT("0,5") ); oCmd_PR.m_osaCpnts.Add( wxT("1,7") ); oCmd_PR.m_osaNodes.Add( wxT("2") ); oCmd_PR.m_bParams[ ePARAM_VLT ] = true; oCmd_PR.m_bCpxPts[ eCPXPT_MAG ] = true; oCmd_PR.m_bCpxPts[ eCPXPT_PHASE ] = true; cout << "\nRun Formatter : " << ( oCmd_PR.bFormat( ) ? "OK" : "FAULT" ); cout << "\nTest Cmd Format : " << ( oCmd_PR == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\noCmdPR Contents : " << oCmd_PR.mb_str( ) << '\n'; // Set things up for a parser test oCmd_PR.bSetString( osCmd ); cout << "\nRun Parser : " << ( oCmd_PR.bParse( ) ? "OK" : "FAULT" ); oCmd_PR.bFormat( ); cout << "\nTest Cmd Format : " << ( oCmd_PR == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\noCmdPR Contents : " << oCmd_PR.mb_str( ) << '\n'; cout << '\n'; exit( EXIT_SUCCESS ); } //************************************************************************************************** void Usage( char * psAppName ) { cout << "\nUsage : " << psAppName << " [-OPTIONS]" << "\nOptions :" << "\n -h : Print usage (this message)\n"; } #endif // TEST_CMDNGSPICEPR //************************************************************************************************** gspiceui-1.1.00+dfsg/src/ngspice/panels/0000755000000000000000000000000012513706514016523 5ustar rootrootgspiceui-1.1.00+dfsg/src/ngspice/panels/PnlNgSpiceTR.cpp0000644000000000000000000002343112505766061021506 0ustar rootroot//************************************************************************************************** // PnlNgSpiceTR.cpp * // ------------------ * // Started : 2004-08-05 * // Last Update : 2015-03-29 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "PnlNgSpiceTR.hpp" //************************************************************************************************** // Implement an event table. wxBEGIN_EVENT_TABLE( PnlNgSpiceTR, PnlAnaBase ) EVT_CHOICE( PnlAnaBase ::ID_CHO_SRCNAME, PnlNgSpiceTR::OnSrcName ) EVT_BUTTON( PnlNgSpiceTR::ID_BTN_SETUP , PnlNgSpiceTR::OnBtnSetup ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. PnlNgSpiceTR::PnlNgSpiceTR( wxWindow * poWin ) : PnlAnaBase( poWin ), m_oDlgCfgSrc( poWin ) { bSetAnalysType( eCMD_TR ); Create( ); // Create the analysis panel bClear( ); // Clear all object attributes } //************************************************************************************************** // Destructor. PnlNgSpiceTR::~PnlNgSpiceTR( ) { } //************************************************************************************************** // Create the display objects. void PnlNgSpiceTR::Create( void ) { PnlAnaBase::CreateBase( ); // Create the base controls PnlAnaBase::CreateInitC( ); // Create and add the initial condtns controls PnlAnaBase::CreateTemp( ); // Create the analysis temperature controls CreateSigSrc( ); // Create and add signal source controls PnlAnaBase::DoLayout( ); // Layout the panel's GUI objects // Set the time sweep parameter labels m_oSbxSwpPars.SetLabel( wxT(" Time Sweep ") ); m_oPnlStart .bSetName( wxT("Start Time") ); m_oPnlStop .bSetName( wxT("Stop Time") ); m_oPnlStep .bSetName( wxT("Step Increment") ); // Set sweep parameter units m_oPnlStart.bSetUnitsType( eUNITS_TIME ); m_oPnlStop .bSetUnitsType( eUNITS_TIME ); m_oPnlStep .bSetUnitsType( eUNITS_TIME ); // Disable the checkboxes for the parameters NG-Spice cannot calculate m_oCbxCurrent.Disable( ); m_oCbxPower .Disable( ); m_oCbxResist .Disable( ); } //************************************************************************************************** // Create the source component display objects. void PnlNgSpiceTR::CreateSigSrc( void ) { // Create and add signal source controls m_oSbxSigSrc .Create( this, ID_UNUSED , wxT(" Signal Source "), wxPoint( 6, 178 ), wxSize( 255, 60 ) ); m_oChoSrcName.Create( this, ID_CHO_SRCNAME, wxPoint( 18, 200 ), wxSize( 121, GUI_CTRL_HT ) ); m_oBtnSetup .Create( this, ID_BTN_SETUP, wxT("Setup ..."), wxPoint( 143, 200 ), wxSize( 105, GUI_CTRL_HT ) ); // Set static box font m_oSbxSigSrc.SetOwnFont( FONT_SLANT ); } //************************************************************************************************** // Clear the object attributes. // // Return Values: // true - Success // false - Failure bool PnlNgSpiceTR::bClear( void ) { // Clear the base class PnlAnaBase::bClear( ); // Set the sweep parameters to their defaults m_oPnlStart.bSetValue( (float) 0.0 ); m_oPnlStop .bSetValue( (float) 100.0 ); m_oPnlStep .bSetValue( (float) 10.0 ); m_oPnlStart.bSetUnits( wxT("msec") ); m_oPnlStop .bSetUnits( wxT("msec") ); m_oPnlStep .bSetUnits( wxT("msec") ); // Set default initial condition values bSetInitC( eINITC_WARM ); // Set input source default values m_oChoSrcName.Clear( ); m_oChoSrcName.Append( wxT("None") ); m_oChoSrcName.SetSelection( 0 ); // Clear the generator dialog m_oDlgCfgSrc.bClear( ); // Set parameters check box default values m_oCbxVoltage.SetValue( true ); m_oCbxCurrent.SetValue( false ); m_oCbxPower .SetValue( false ); m_oCbxResist .SetValue( false ); // Set default temperature value m_oPnlTemp.bSetValue( 27.0 ); return( true ); } //************************************************************************************************** // Load information from a simulation object. // // Argument List : // roSimn - A simulation object // // Return Values : // true - Success // false - Failure bool PnlNgSpiceTR::bLoad( SimnNgSpice & roSimn ) { bool bRtn=true; // Load the components into the signal source choice box PnlAnaBase::LoadSrcNames( roSimn.m_oaCpnts, wxT("VI") ); // Go no further if the TR command isn't valid if( ! roSimn.m_oCmdTR.bIsValid( ) ) return( false ); // Set the source component name (a sweep source is not mandatory for a TR analysis) PnlAnaBase::bSetSrcCpnt( roSimn.m_oCpntSwpSrc ); // Set the initial state of the source setup dialog m_oDlgCfgSrc.bSetValues( roSimn.m_oCpntIndSrc ); // Set the initial conditions if( ! bSetInitC( (eTypeInitC) roSimn.m_oCmdTR.m_eInitC ) ) bRtn = false; // Set the sweep values if( ! m_oPnlStart.bSetValue( roSimn.m_oCmdTR.m_osStart ) ) bRtn = false; if( ! m_oPnlStop .bSetValue( roSimn.m_oCmdTR.m_osStop ) ) bRtn = false; if( ! m_oPnlStep .bSetValue( roSimn.m_oCmdTR.m_osStep ) ) bRtn = false; // Set the analysis temperature if( ! m_oPnlTemp.bSetValue( roSimn.m_oCmdOPT.m_osTEMP ) ) bRtn = false; return( bRtn ); } //************************************************************************************************** // Save information to a simulation object. // (Prior to it being passed to a simulator object.) // // Argument List : // roSimn - A simulation object // // Return Values : // true - Success // false - Failure bool PnlNgSpiceTR::bSave( SimnNgSpice & roSimn ) { wxString os1; m_osErrMsg.Empty( ); // Set the analysis type roSimn.m_oCmdPR.bSetAnaType( eCMD_TR ); // Set the sweep values roSimn.m_oCmdTR.m_osStart = m_oPnlStart.rosGetValue( ); roSimn.m_oCmdTR.m_osStop = m_oPnlStop .rosGetValue( ); roSimn.m_oCmdTR.m_osStep = m_oPnlStep .rosGetValue( ); // Set the initial conditions roSimn.m_oCmdTR.m_eInitC = (eTypeInitC) m_oRbxSweep.GetSelection( ); // Set the component to be used as a signal source if( m_oChoSrcName.GetStringSelection( ) != wxT("None") ) { // Get the unmodified signal source component os1 = m_oChoSrcName.GetStringSelection( ); (Component &) roSimn.m_oCpntIndSrc = roSimn.roGetCpnt( os1 ); // Add the modifications from the independent source configuration dialog m_oDlgCfgSrc.bGetValues( roSimn.m_oCpntIndSrc ); if( roSimn.m_oCpntIndSrc.bFormat( ) ) roSimn.m_oCpntSwpSrc = roSimn.m_oCpntIndSrc; else { os1 = wxT("The signal source ") + roSimn.m_oCpntIndSrc.rosGetErrMsg( ) + wxT(". "); SetErrMsg( os1 ); } } else { roSimn.m_oCpntSwpSrc.bClear( ); roSimn.m_oCpntIndSrc.bClear( ); } // Store the parameters to derive roSimn.m_oCmdPR.m_bParams[ ePARAM_VLT ] = m_oCbxVoltage.GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_CUR ] = m_oCbxCurrent.GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_PWR ] = m_oCbxPower .GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_RES ] = m_oCbxResist .GetValue( ); // Create the command strings roSimn.m_oCmdTR.bFormat( ); roSimn.m_oCmdPR.bFormat( ); // Check for errors if( ! roSimn.m_oCmdTR.bIsValid( ) ) SetErrMsg( roSimn.m_oCmdTR.rosGetErrMsg( ) ); if( ! roSimn.m_oCmdPR.bIsValid( ) ) SetErrMsg( roSimn.m_oCmdPR.rosGetErrMsg( ) ); return( bIsOk( ) ); } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // Generator component choice control event handler. // // Argument List: // roEvtCmd - An object holding information about the event void PnlNgSpiceTR::OnSrcName( wxCommandEvent & roEvtCmd ) { wxString os1; // Execute the base class event handler first PnlAnaBase::OnSrcName( roEvtCmd ); // Set the signal source name in the configuration dialogue os1 = m_oChoSrcName.GetStringSelection( ); if( os1 != wxT("None") ) m_oDlgCfgSrc.bSetName( os1 ); else m_oDlgCfgSrc.bClear( ); } //************************************************************************************************** // Generator component setup button control event handler. // // Argument List: // roEvtCmd - An object holding information about the event void PnlNgSpiceTR::OnBtnSetup( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { m_oDlgCfgSrc.CenterOnParent( ); m_oDlgCfgSrc.ShowModal( ); } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/ngspice/panels/PnlNgSpiceAC.hpp0000644000000000000000000000520612454733560021452 0ustar rootroot//************************************************************************************************** // PnlNgSpiceAC.hpp * // ------------------ * // Description : This class derives from the Analysis Panel base class and provides a GUI for a * // user to configure a AC Analysis for the NG-Spice electronic circuit simulation * // engine. * // Started : 2004-08-04 * // Last Update : 2015-01-12 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef PNLNGSPICEAC_HPP #define PNLNGSPICEAC_HPP // Application Includes #include "TypeDefs.hpp" #include "base/PnlAnaBase.hpp" #include "netlist/SimnNgSpice.hpp" //************************************************************************************************** class PnlNgSpiceAC : public PnlAnaBase { private : void Create( void ); void InitScale( void ); bool bSetScale( eTypeScale eScale ); public : PnlNgSpiceAC( wxWindow * poWin ); ~PnlNgSpiceAC( ); bool bClear( void ); bool bLoad( SimnNgSpice & roSimn ); bool bSave( SimnNgSpice & roSimn ); // Event handlers void OnScale ( wxCommandEvent & roEvtCmd ); void OnSrcName( wxCommandEvent & roEvtCmd ); // Leave this as the last line as private access is envoked by macro wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // PNLNGSPICEAC_HPP gspiceui-1.1.00+dfsg/src/ngspice/panels/PnlNgSpiceTR.hpp0000644000000000000000000000570112456106366021514 0ustar rootroot//************************************************************************************************** // PnlNgSpiceTR.hpp * // ------------------ * // Description : This class derives from the Analysis Panel base class and provides a GUI for a * // user to configure a Transient Analysis for the NG-Spice electronic circuit * // simulation engine. * // Started : 2004-08-05 * // Last Update : 2015-01-16 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef PNLNGSPICETR_HPP #define PNLNGSPICETR_HPP // Application Includes #include "TypeDefs.hpp" #include "base/PnlAnaBase.hpp" #include "netlist/SimnNgSpice.hpp" #include "ngspice/dialogs/DlgNgsCfgSrc.hpp" //************************************************************************************************** class PnlNgSpiceTR : public PnlAnaBase { private : // Signal source configuration controls wxButton m_oBtnSetup; DlgNgsCfgSrc m_oDlgCfgSrc; void Create ( void ); void CreateSigSrc( void ); public : PnlNgSpiceTR( wxWindow * poWin ); ~PnlNgSpiceTR( ); bool bClear( void ); bool bLoad( SimnNgSpice & roSimn ); bool bSave( SimnNgSpice & roSimn ); // Event handlers void OnSrcName ( wxCommandEvent & roEvtCmd ); void OnBtnSetup( wxCommandEvent & roEvtCmd ); // Unique display control identifiers enum ePnlItemID { ID_BTN_SETUP = PnlAnaBase::ID_LST+1, ID_UNUSED, ID_FST = ID_BTN_SETUP, ID_LST = ID_BTN_SETUP }; // Leave this as the last line as private access is envoked by macro wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // PNLNGSPICETR_HPP gspiceui-1.1.00+dfsg/src/ngspice/panels/PnlNgSpiceOP.cpp0000644000000000000000000002047112505766061021500 0ustar rootroot//************************************************************************************************** // PnlNgSpiceOP.cpp * // ------------------ * // Started : 2015-01-12 * // Last Update : 2015-03-29 * // Copyright : (C) 2015 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "PnlNgSpiceOP.hpp" //************************************************************************************************** // Implement an event table. wxBEGIN_EVENT_TABLE( PnlNgSpiceOP, PnlAnaBase ) EVT_CHOICE( PnlAnaBase::ID_CHO_SRCNAME, PnlNgSpiceOP::OnSrcName ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. // // Argunebt List: // poWin - A pointer to the parent window PnlNgSpiceOP::PnlNgSpiceOP( wxWindow * poWin ) : PnlAnaBase( poWin ) { bSetAnalysType( eCMD_OP ); Create( ); bClear( ); } //************************************************************************************************** // Destructor. PnlNgSpiceOP::~PnlNgSpiceOP( ) { } //************************************************************************************************** // Create the display objects. void PnlNgSpiceOP::Create( void ) { PnlAnaBase::CreateBase( ); // Create the base controls PnlAnaBase::CreateScale( ); // Create the scale controls PnlAnaBase::CreateSigSrc( ); // Create input signal source controls PnlAnaBase::DoLayout( ); // Layout the panel's GUI objects // Set the sweep parameter labels m_oSbxSwpPars.SetLabel( wxT(" Operating Point Sweep ") ); m_oPnlStart .bSetName( wxT("Start Temperature") ); m_oPnlStop .bSetName( wxT("Stop Temperature") ); // Display the PnlValue units as a label m_oPnlStart.bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlStop .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlStep .bShowUnits( PnlValue::eSHOW_LBL ); // Set sweep parameter units m_oPnlStart.bSetUnitsType( eUNITS_TMPC ); m_oPnlStop .bSetUnitsType( eUNITS_TMPC ); m_oPnlStep .bSetUnitsType( eUNITS_TMPC ); // Layout the PnlValue controls m_oPnlStart.Layout( ); m_oPnlStop .Layout( ); m_oPnlStep .Layout( ); // Disable the scale options NG-Spice doesn't support m_oRbxSweep.Enable( eSCALE_LOG, false ); m_oRbxSweep.Enable( eSCALE_DEC, false ); m_oRbxSweep.Enable( eSCALE_OCT, false ); // Disable the checkboxes for the parameters NG-Spice cannot calculate m_oCbxCurrent.Disable( ); m_oCbxPower .Disable( ); m_oCbxResist .Disable( ); } //************************************************************************************************** // Clear the object attributes. // // Return Values : // true - Success // false - Failure bool PnlNgSpiceOP::bClear( void ) { // Clear the base class PnlAnaBase::bClear( ); // Set the step scale type and default sweep values m_oPnlStart.bSetValue( (float) 0.0 ); m_oPnlStop .bSetValue( (float) 100.0 ); m_oPnlStep .bSetValue( (float) 10.0 ); // Set default scale value bSetScale( eSCALE_LIN ); // Set input source default values m_oChoSrcName.Clear( ); m_oChoSrcName.Append( wxT("None") ); m_oChoSrcName.SetSelection( 0 ); m_oPnlSrcLvl.bSetValue( (float) 0.0 ); m_oPnlSrcLvl.bSetUnitsType( eUNITS_NONE ); // Set parameters check box default values m_oCbxVoltage.SetValue( true ); m_oCbxCurrent.SetValue( false ); m_oCbxPower .SetValue( false ); m_oCbxResist .SetValue( false ); return( true ); } //************************************************************************************************** // Load information from a simulation object. // // Argument List : // roSimn - A SimnGnuCap object // // Return Values : // true - Success // false - Failure bool PnlNgSpiceOP::bLoad( SimnNgSpice & roSimn ) { bool bRtn=true; // Load the components into the signal source choice box PnlAnaBase::LoadSrcNames( roSimn.m_oaCpnts, wxT("VIRLC") ); // Go no further if the OP command isn't valid if( ! roSimn.m_oCmdDC.bIsValid( ) ) return( false ); if( roSimn.m_oCmdDC.m_osSource.Upper( ) != wxT("TEMP") ) return( false ); // Set the source component (a sweep source is not mandatory for an OP analysis) PnlAnaBase::bSetSrcCpnt( roSimn.m_oCpntSwpSrc ); // Set the sweep values if( ! m_oPnlStart.bSetValue( roSimn.m_oCmdDC.m_osStart ) ) bRtn = false; if( ! m_oPnlStop .bSetValue( roSimn.m_oCmdDC.m_osStop ) ) bRtn = false; if( ! m_oPnlStep .bSetValue( roSimn.m_oCmdDC.m_osStep ) ) bRtn = false; return( bRtn ); } //************************************************************************************************** // Save information to a simulation object. // // Argument List : // roSimn - A SimnGnuCap object // // Return Values : // true - Success // false - Failure bool PnlNgSpiceOP::bSave( SimnNgSpice & roSimn ) { wxString os1; m_osErrMsg.Empty( ); // Set the analysis type roSimn.m_oCmdPR.bSetAnaType( eCMD_OP ); // Set the sweep values roSimn.m_oCmdDC.m_osStart = m_oPnlStart.rosGetValue( ); roSimn.m_oCmdDC.m_osStop = m_oPnlStop .rosGetValue( ); roSimn.m_oCmdDC.m_osStep = m_oPnlStep .rosGetValue( ); // Set the sweep type to temperature roSimn.m_oCmdDC.m_osSource = wxT("TEMP"); // Set the sweep source (a sweep source is not compulsory for a OP analysis) if( m_oChoSrcName.GetStringSelection( ) != wxT("None") ) { os1 = m_oChoSrcName.GetStringSelection( ); (Component &) roSimn.m_oCpntSwpSrc = roSimn.roGetCpnt( os1 ); roSimn.m_oCpntSwpSrc.bSetValue( m_oPnlSrcLvl.rosGetValue( ) ); } else roSimn.m_oCpntSwpSrc.bClear( ); // Store the parameters to derive roSimn.m_oCmdPR.m_bParams[ ePARAM_VLT ] = m_oCbxVoltage.GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_CUR ] = m_oCbxCurrent.GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_PWR ] = m_oCbxPower .GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_RES ] = m_oCbxResist .GetValue( ); // Create the command strings roSimn.m_oCmdDC.bFormat( ); roSimn.m_oCmdPR.bFormat( ); // Check for errors if( ! roSimn.m_oCmdDC.bIsValid( ) ) SetErrMsg( roSimn.m_oCmdDC.rosGetErrMsg( ) ); if( ! roSimn.m_oCmdPR.bIsValid( ) ) SetErrMsg( roSimn.m_oCmdPR.rosGetErrMsg( ) ); return( bIsOk( ) ); } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // Source component choice box event handler. // // Argument List : // roEvtCmd - An object holding information about the event void PnlNgSpiceOP::OnSrcName( wxCommandEvent & roEvtCmd ) { wxString os1; // Execute the base class event handler first PnlAnaBase::OnSrcName( roEvtCmd ); if( m_oChoSrcName.GetStringSelection( ) != wxT("None") ) { // Set the units type os1 = m_oChoSrcName.GetStringSelection( ); m_oPnlSrcLvl.bSetUnitsType( Component::eGetUnitsType( os1 ) ); // Set the source value if( m_oPnlSrcLvl.dfGetValue( ) == 0.0 ) m_oPnlSrcLvl.bSetValue( (double) 1.0 ); } else { m_oPnlSrcLvl.bSetUnitsType( eUNITS_NONE ); m_oPnlSrcLvl.bSetValue( (double) 0.0 ); } } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/ngspice/panels/PnlNgSpiceAC.cpp0000644000000000000000000002777112506223351021446 0ustar rootroot//************************************************************************************************** // PnlNgSpiceAC.cpp * // ------------------ * // Started : 2004-08-04 * // Last Update : 2015-03-30 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "PnlNgSpiceAC.hpp" //************************************************************************************************** // Implement an event table. wxBEGIN_EVENT_TABLE( PnlNgSpiceAC, PnlAnaBase ) EVT_RADIOBOX( PnlAnaBase::ID_RBX_SCALE , PnlNgSpiceAC::OnScale ) EVT_CHOICE ( PnlAnaBase::ID_CHO_SRCNAME, PnlNgSpiceAC::OnSrcName ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. PnlNgSpiceAC::PnlNgSpiceAC( wxWindow * poWin ) : PnlAnaBase( poWin ) { bSetAnalysType( eCMD_AC ); Create( ); // Create the analysis panel bClear( ); // Clear all object attributes } //************************************************************************************************** // Destructor. PnlNgSpiceAC::~PnlNgSpiceAC( ) { } //************************************************************************************************** // Create the display objects. void PnlNgSpiceAC::Create( void ) { PnlAnaBase::CreateBase( ); // Create the base controls PnlAnaBase::CreateScale( ); // Create the scale controls PnlAnaBase::CreateCpxPrt( ); // Create the simulation parameter complex part check boxes PnlAnaBase::CreateSigSrc( ); // Create input signal source controls PnlAnaBase::CreateTemp( ); // Create the analysis temperature controls PnlAnaBase::DoLayout( ); // Layout the panel's GUI objects // Set the frequency sweep parameter labels m_oSbxSwpPars.SetLabel( wxT(" AC Sweep ") ); m_oPnlStart .bSetName( wxT("Start Frequency") ); m_oPnlStop .bSetName( wxT("Stop Frequency") ); // Set sweep parameter spin control parameters and units m_oPnlStart.bSetUnitsType( eUNITS_FREQ ); m_oPnlStop .bSetUnitsType( eUNITS_FREQ ); m_oPnlStep .bSetValueType( eVALUE_INT ); m_oPnlStep .bShowUnits( PnlValue::eSHOW_LBL ); // Disable the scale option NG-Spice doesn't support m_oRbxSweep.Enable( eSCALE_LOG, false ); // Disable the checkboxes for the parameters NG-Spice cannot calculate m_oCbxCurrent.Disable( ); m_oCbxPower .Disable( ); m_oCbxResist .Disable( ); } //************************************************************************************************** // Initialize the step scale. void PnlNgSpiceAC::InitScale( void ) { switch( m_oRbxSweep.GetSelection( ) ) { case eSCALE_LIN : m_oPnlStep.bSetName( wxT("Steps in Total") ); m_oPnlStep.bSetSpnRange( 1, 100000 ); m_oPnlStep.bSetSpnIncSz( 1, 10000 ); m_oPnlStep.bSetDefValue( 10 ); break; case eSCALE_DEC : m_oPnlStep.bSetName( wxT("Steps / Decade") ); m_oPnlStep.bSetSpnRange( 1, 10000 ); m_oPnlStep.bSetSpnIncSz( 1, 1000 ); m_oPnlStep.bSetDefValue( 10 ); break; case eSCALE_OCT : m_oPnlStep.bSetName( wxT("Steps / Octave") ); m_oPnlStep.bSetSpnRange( 1, 10000 ); m_oPnlStep.bSetSpnIncSz( 1, 1000 ); m_oPnlStep.bSetDefValue( 10 ); break; default : break; } } //************************************************************************************************** // Set the state of the step scale radio box. // // Argument List : // eScale - The enumerated scale specifier // // Return Values : // Success - true // Failure - false bool PnlNgSpiceAC::bSetScale( eTypeScale eScale ) { if( eScaleeSCALE_LST ) return( false ); #if wxCHECK_VERSION( 2,8,0 ) if( m_oRbxSweep.GetCount( ) < (uint) eScale + 1 ) return( false ); #else if( m_oRbxSweep.GetCount( ) < (int) eScale + 1 ) return( false ); #endif m_oRbxSweep.SetSelection( (int) eScale ); InitScale( ); return( true ); } //************************************************************************************************** // Clear the object attributes. // // Return Values : // true - Success // false - Failure bool PnlNgSpiceAC::bClear( void ) { // Clear the base class PnlAnaBase::bClear( ); // Set the sweep parameters to their defaults m_oPnlStart.bSetValue( (float) 1.0 ); m_oPnlStop .bSetValue( (float) 100.0 ); m_oPnlStep .bSetValue( (float) 10.0 ); m_oPnlStart.bSetUnits( wxT("kHz") ); m_oPnlStop .bSetUnits( wxT("kHz") ); // Set default scale value bSetScale( eSCALE_DEC ); // Set input source default values m_oChoSrcName.Clear( ); m_oChoSrcName.Append( wxT("None") ); m_oChoSrcName.SetSelection( 0 ); m_oPnlSrcLvl.bSetValue( (float) 0.0 ); m_oPnlSrcLvl.bSetUnitsType( eUNITS_NONE ); // Set parameters check box default values m_oCbxVoltage.SetValue( true ); m_oCbxCurrent.SetValue( false ); m_oCbxPower .SetValue( false ); m_oCbxResist .SetValue( false ); // Set the complex part check box default values m_oCbxMag .SetValue( true ); m_oCbxPhase.SetValue( false ); m_oCbxReal .SetValue( false ); m_oCbxImag .SetValue( false ); m_oCbxMagDb.SetValue( true ); // Set default temperature value m_oPnlTemp.bSetValue( 27.0 ); return( true ); } //************************************************************************************************** // Load information from a simulation object. // // Argument List : // roSim - A simulation object // // Return Values : // true - Success // false - Failure bool PnlNgSpiceAC::bLoad( SimnNgSpice & roSimn ) { bool bRtn=true; // Load components into the source choice box PnlAnaBase::LoadSrcNames( roSimn.m_oaCpnts, wxT("VI") ); // Go no further if the AC command isn't valid if( ! roSimn.m_oCmdAC.bIsValid( ) ) return( false ); // Set the source component if( ! PnlAnaBase::bSetSrcCpnt( roSimn.m_oCpntSwpSrc ) ) bRtn = false; // Set the step scale (do this before setting the sweep step) m_oRbxSweep.SetSelection( roSimn.m_oCmdAC.m_eScale ); // Set the sweep values if( ! m_oPnlStart.bSetValue( roSimn.m_oCmdAC.m_osStart ) ) bRtn = false; if( ! m_oPnlStop .bSetValue( roSimn.m_oCmdAC.m_osStop ) ) bRtn = false; if( ! m_oPnlStep .bSetValue( roSimn.m_oCmdAC.m_osStep ) ) bRtn = false; // Set the complex parts to derive m_oCbxMag .SetValue( roSimn.m_oCmdPR.m_bCpxPts[ eCPXPT_MAG ] ); m_oCbxPhase.SetValue( roSimn.m_oCmdPR.m_bCpxPts[ eCPXPT_PHASE ] ); m_oCbxReal .SetValue( roSimn.m_oCmdPR.m_bCpxPts[ eCPXPT_REAL ] ); m_oCbxImag .SetValue( roSimn.m_oCmdPR.m_bCpxPts[ eCPXPT_IMAG ] ); m_oCbxMagDb.SetValue( roSimn.m_oCmdPR.m_bCpxPts[ eCPXPT_MAGDB ] ); // Set the analysis temperature if( ! m_oPnlTemp.bSetValue( roSimn.m_oCmdOPT.m_osTEMP ) ) bRtn = false; return( bRtn ); } //************************************************************************************************** // Save information to a simulation object. // // Argument List : // roSimn - A simulation object // // Return Values : // true - Success // false - Failure bool PnlNgSpiceAC::bSave( SimnNgSpice & roSimn ) { wxString os1; float f1; size_t sz1; bool b1; m_osErrMsg.Empty( ); // Set the analysis type roSimn.m_oCmdPR.bSetAnaType( eCMD_AC ); // Check the start frequency (can't set a frequency of zero so set one as // small as possible, 1.4e-45 is as small as I can go as a float but it will // be converted to a string in engineering units so use 1.0e-15 = 1.0f) CnvtType::bStrToFlt( roSimn.m_oCmdAC.m_osStart, &f1 ); if( f1 == 0.0 ) roSimn.m_oCmdAC.m_osStart = wxT("1.0e-15"); // Set the sweep values roSimn.m_oCmdAC.m_osStart = m_oPnlStart.rosGetValue( ); roSimn.m_oCmdAC.m_osStop = m_oPnlStop .rosGetValue( ); roSimn.m_oCmdAC.m_osStep = m_oPnlStep .rosGetValue( ); // Set the sweep scale roSimn.m_oCmdAC.m_eScale = (eTypeScale) m_oRbxSweep.GetSelection( ); // Set the sweep source component if( m_oChoSrcName.GetStringSelection( ) == wxT("None") ) SetErrMsg( wxT("No source component has been selected.") ); else if( m_oPnlSrcLvl.dfGetValue( ) == 0.0 ) SetErrMsg( wxT("Signal source component value of zero is not permitted.") ); else { os1 = m_oChoSrcName.GetStringSelection( ); roSimn.m_oCpntSwpSrc = roSimn.NetList::roGetCpnt( os1 ); os1 = wxT("AC ") + m_oPnlSrcLvl.rosGetValue( ); roSimn.m_oCpntSwpSrc.bSetValue( os1 ); } // Store the parameters to derive roSimn.m_oCmdPR.m_bParams[ ePARAM_VLT ] = m_oCbxVoltage.GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_CUR ] = m_oCbxCurrent.GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_PWR ] = m_oCbxPower .GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_RES ] = m_oCbxResist .GetValue( ); // Store the complex parts of the parameters to derive roSimn.m_oCmdPR.m_bCpxPts[ eCPXPT_MAG ] = m_oCbxMag .GetValue( ); roSimn.m_oCmdPR.m_bCpxPts[ eCPXPT_PHASE ] = m_oCbxPhase.GetValue( ); roSimn.m_oCmdPR.m_bCpxPts[ eCPXPT_REAL ] = m_oCbxReal .GetValue( ); roSimn.m_oCmdPR.m_bCpxPts[ eCPXPT_IMAG ] = m_oCbxImag .GetValue( ); roSimn.m_oCmdPR.m_bCpxPts[ eCPXPT_MAGDB ] = m_oCbxMagDb.GetValue( ); // Create the command strings roSimn.m_oCmdAC.bFormat( ); roSimn.m_oCmdPR.bFormat( ); // Check for errors if( ! roSimn.m_oCmdAC.bIsValid( ) ) SetErrMsg( roSimn.m_oCmdAC.rosGetErrMsg( ) ); if( ! roSimn.m_oCmdPR.bIsValid( ) ) SetErrMsg( roSimn.m_oCmdPR.rosGetErrMsg( ) ); for( sz1=eCPXPT_MAG, b1=false; sz1<=eCPXPT_IMAG; sz1++ ) if( roSimn.m_oCmdPR.m_bCpxPts[ sz1 ] ) b1 = true; if( ! b1 ) SetErrMsg( wxT("No complex parts have been selected.") ); return( bIsOk( ) ); } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // Step scale radio box event handler. // // Argument List : // roEvtCmd - An object holding information about the event void PnlNgSpiceAC::OnScale( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { InitScale( ); } //************************************************************************************************** // Source component choice box event handler. // // Argument List : // roEvtCmd - An object holding information about the event void PnlNgSpiceAC::OnSrcName( wxCommandEvent & roEvtCmd ) { wxString os1; // Execute the base class event handler first PnlAnaBase::OnSrcName( roEvtCmd ); if( m_oChoSrcName.GetStringSelection( ) != wxT("None") ) { // Set the units type os1 = m_oChoSrcName.GetStringSelection( ); m_oPnlSrcLvl.bSetUnitsType( Component::eGetUnitsType( os1 ) ); // Set the source value if( m_oPnlSrcLvl.dfGetValue( ) == 0.0 ) m_oPnlSrcLvl.bSetValue( (double) 1.0 ); } else { m_oPnlSrcLvl.bSetUnitsType( eUNITS_NONE ); m_oPnlSrcLvl.bSetValue( (double) 0.0 ); } } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/ngspice/panels/PnlNgSpiceOP.hpp0000644000000000000000000000501412455751676021513 0ustar rootroot//************************************************************************************************** // PnlNgSpiceOP.hpp * // ------------------ * // Description : This class derives from the Analysis Panel base class and provides a GUI for a * // user to configure a Operating Point Analysis for the NG-Spice electronic circuit * // simulation engine. * // Started : 2015-01-12 * // Last Update : 2015-01-12 * // Copyright : (C) 2015 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef PNLNGSPICEOP_HPP #define PNLNGSPICEOP_HPP // Application Includes #include "TypeDefs.hpp" #include "base/PnlAnaBase.hpp" #include "netlist/SimnNgSpice.hpp" //************************************************************************************************** class PnlNgSpiceOP : public PnlAnaBase { private : void Create( void ); public : PnlNgSpiceOP( wxWindow * poWin ); ~PnlNgSpiceOP( ); bool bClear( void ); bool bLoad( SimnNgSpice & roSimn ); bool bSave( SimnNgSpice & roSimn ); // Event handlers void OnSrcName( wxCommandEvent & roEvtCmd ); // Leave this as the last line as private access is envoked by macro wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // PNLNGSPICEOP_HPP gspiceui-1.1.00+dfsg/src/ngspice/panels/PnlNgSpiceDC.cpp0000644000000000000000000002216412513706514021445 0ustar rootroot//************************************************************************************************** // PnlNgSpiceDC.cpp * // ------------------ * // Started : 2004-05-08 * // Last Update : 2015-04-16 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "PnlNgSpiceDC.hpp" //************************************************************************************************** // Implement an event table. wxBEGIN_EVENT_TABLE( PnlNgSpiceDC, PnlAnaBase ) EVT_CHOICE( PnlAnaBase::ID_CHO_SRCNAME, PnlNgSpiceDC::OnSrcName ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. PnlNgSpiceDC::PnlNgSpiceDC( wxWindow * poWin ) : PnlAnaBase( poWin ) { bSetAnalysType( eCMD_DC ); Create( ); // Create the analysis panel InitSwpUnits( ); // Initialize the sweep units bClear( ); // Clear all object attributes } //************************************************************************************************** // Destructor. PnlNgSpiceDC::~PnlNgSpiceDC( ) { } //************************************************************************************************** // Create the display objects. void PnlNgSpiceDC::Create( void ) { PnlAnaBase::CreateBase( ); // Create the base controls PnlAnaBase::CreateScale( ); // Create the scale controls PnlAnaBase::CreateTemp( ); // Create the analysis temperature controls CreateSigSrc( ); // Create the source component display objects PnlAnaBase::DoLayout( ); // Layout the panel's GUI objects // Set the DC sweep parameter labels m_oSbxSwpPars.SetLabel( wxT(" DC Sweep ") ); m_oPnlStart .bSetName( wxT("Start Value") ); m_oPnlStop .bSetName( wxT("Stop Value") ); m_oPnlStep .bSetName( wxT("Step Increment") ); // Disable the scale options NG-Spice doesn't support m_oRbxSweep.Enable( eSCALE_LOG, false ); m_oRbxSweep.Enable( eSCALE_DEC, false ); m_oRbxSweep.Enable( eSCALE_OCT, false ); // Disable the checkboxes for the parameters NG-Spice cannot calculate m_oCbxCurrent.Disable( ); m_oCbxPower .Disable( ); m_oCbxResist .Disable( ); } //************************************************************************************************** // Create the source component display objects. void PnlNgSpiceDC::CreateSigSrc( void ) { // Create and add signal source controls m_oSbxSigSrc .Create( this, ID_UNUSED, wxT(" Signal Source "), wxPoint( 6, 178 ), wxSize( 145, 60 ) ); m_oChoSrcName.Create( this, ID_CHO_SRCNAME, wxPoint( 18, 200 ), wxSize( 121, GUI_CTRL_HT ) ); // Set static box font m_oSbxSigSrc.SetOwnFont( FONT_SLANT ); } //************************************************************************************************** // Initialize the sweep parameter units. void PnlNgSpiceDC::InitSwpUnits( void ) { wxString os1; eTypeUnits eUnits; // Determine the sweep parameter units os1 = m_oChoSrcName.GetStringSelection( ); eUnits = Component::eGetUnitsType( os1 ); switch( eUnits ) { case eUNITS_VOLT : // Units of voltage os1 = wxT("Voltage"); break; case eUNITS_CURR : // Units of current os1 = wxT("Current"); break; case eUNITS_RES : // Units of resistance os1 = wxT("Resistance"); break; default : // No units os1 = wxT("Value"); } // Set the sweep parameter units m_oPnlStart.bSetName( wxString( wxT("Start ") ) + os1 ); m_oPnlStop .bSetName( wxString( wxT("Stop ") ) + os1 ); m_oPnlStart.bSetUnitsType( eUnits ); m_oPnlStop .bSetUnitsType( eUnits ); m_oPnlStep .bSetUnitsType( eUnits ); } //************************************************************************************************** // Clear the object attributes. // // Return Values: // true - Success // false - Failure bool PnlNgSpiceDC::bClear( void ) { // Clear the base class PnlAnaBase::bClear( ); // Set the sweep parameters to their defaults m_oPnlStart.bSetValue( (float) 0.0 ); m_oPnlStop .bSetValue( (float) 100.0 ); m_oPnlStep .bSetValue( (float) 10.0 ); // Set sweep default values m_oChoSrcName.Clear( ); m_oChoSrcName.Append( wxT("None") ); m_oChoSrcName.SetSelection( 0 ); // Set parameters check box default values m_oCbxVoltage.SetValue( true ); m_oCbxCurrent.SetValue( false ); m_oCbxPower .SetValue( false ); m_oCbxResist .SetValue( false ); // Set default temperature value m_oPnlTemp.bSetValue( 27.0 ); return( true ); } //************************************************************************************************** // Load information from a simulation object. // // Argument List : // roSim - A simulation object // // Return Values : // true - Success // false - Failure bool PnlNgSpiceDC::bLoad( SimnNgSpice & roSimn ) { bool bRtn=true; // Load components into the signal source choice box PnlAnaBase::LoadSrcNames( roSimn.m_oaCpnts, wxT("VIR") ); // Go no further if the DC command isn't valid if( ! roSimn.m_oCmdDC.bIsValid( ) ) return( false ); if( roSimn.m_oCmdDC.m_osSource.Upper( ) == wxT("TEMP") ) return( false ); // Set the source component label if( ! PnlAnaBase::bSetSrcCpnt( roSimn.m_oCpntSwpSrc ) ) bRtn = false; InitSwpUnits( ); // Set the sweep values if( ! m_oPnlStart.bSetValue( roSimn.m_oCmdDC.m_osStart ) ) bRtn = false; if( ! m_oPnlStop .bSetValue( roSimn.m_oCmdDC.m_osStop ) ) bRtn = false; if( ! m_oPnlStep .bSetValue( roSimn.m_oCmdDC.m_osStep ) ) bRtn = false; // Set the analysis temperature if( ! m_oPnlTemp.bSetValue( roSimn.m_oCmdOPT.m_osTEMP ) ) bRtn = false; return( bRtn ); } //************************************************************************************************** // Save information to a simulation object. // (Prior to it being passed to a simulator object.) // // Argument List : // roSim - A simulation object // // Return Values : // true - Success // false - Failure bool PnlNgSpiceDC::bSave( SimnNgSpice & roSimn ) { m_osErrMsg.Empty( ); // Set the analysis type roSimn.m_oCmdPR.bSetAnaType( eCMD_DC ); // Set the sweep values roSimn.m_oCmdDC.m_osStart = m_oPnlStart.rosGetValue( ); roSimn.m_oCmdDC.m_osStop = m_oPnlStop .rosGetValue( ); roSimn.m_oCmdDC.m_osStep = m_oPnlStep .rosGetValue( ); // Set the sweep source (this is compulsory for a DC analysis) if( m_oChoSrcName.GetStringSelection( ) != wxT("None") ) { roSimn.m_oCmdDC.m_osSource = m_oChoSrcName.GetStringSelection( ); roSimn.m_oCpntSwpSrc = roSimn.roGetCpnt( roSimn.m_oCmdDC.m_osSource ); } else SetErrMsg( wxT("No sweep source component has been selected.") ); // Store the parameters to derive roSimn.m_oCmdPR.m_bParams[ ePARAM_VLT ] = m_oCbxVoltage.GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_CUR ] = m_oCbxCurrent.GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_PWR ] = m_oCbxPower .GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_RES ] = m_oCbxResist .GetValue( ); // Create the command strings roSimn.m_oCmdDC.bFormat( ); roSimn.m_oCmdPR.bFormat( ); // Check for errors if( ! roSimn.m_oCmdDC.bIsValid( ) ) SetErrMsg( roSimn.m_oCmdDC.rosGetErrMsg( ) ); if( ! roSimn.m_oCmdPR.bIsValid( ) ) SetErrMsg( roSimn.m_oCmdPR.rosGetErrMsg( ) ); return( bIsOk( ) ); } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // Source component choice box event handler. // // Argument List: // roEvtCmd - An object holding information about the event void PnlNgSpiceDC::OnSrcName( wxCommandEvent & roEvtCmd ) { // Execute the base class event handler first PnlAnaBase::OnSrcName( roEvtCmd ); // Initialize the sweep parameter units InitSwpUnits( ); } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/ngspice/panels/PnlNgSpiceDC.hpp0000644000000000000000000000476012461200367021451 0ustar rootroot//************************************************************************************************** // PnlNgSpiceDC.hpp * // ------------------ * // Description : This class derives from the PnlAnaBase base class and provides a GUI for a user * // to configure a DC Analysis for the NG-Spice electronic circuit simulation engine. * // Started : 2004-05-08 * // Last Update : 2015-01-25 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef PNLNGSPICEDC_HPP #define PNLNGSPICEDC_HPP // Application Includes #include "TypeDefs.hpp" #include "base/PnlAnaBase.hpp" #include "netlist/SimnNgSpice.hpp" //************************************************************************************************** class PnlNgSpiceDC : public PnlAnaBase { private : void Create ( void ); void CreateSigSrc ( void ); void InitSwpUnits( void ); public : PnlNgSpiceDC( wxWindow * poWin ); ~PnlNgSpiceDC( ); bool bClear( void ); bool bLoad( SimnNgSpice & roSimn ); bool bSave( SimnNgSpice & roSimn ); // Event handlers void OnSrcName( wxCommandEvent & roEvtCmd ); // Leave this as the last line as private access is envoked by macro wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // PNLNGSPICEDC_HPP gspiceui-1.1.00+dfsg/src/ngspice/NbkNgSpice.hpp0000644000000000000000000000614212454734027017744 0ustar rootroot//************************************************************************************************** // NbkNgSpice.hpp * // ---------------- * // Description : Provides a container class for the analysis configuration panels for the * // different analyses provided by NG-Spice electronic circuit simulator. * // Started : 2004-05-08 * // Last Update : 2015-01-12 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef NBKNGSPICE_HPP #define NBKNGSPICE_HPP // Application Includes #include "TypeDefs.hpp" #include "base/NbkSimEngBase.hpp" #include "ngspice/dialogs/DlgNgsCfgOPT.hpp" #include "ngspice/panels/PnlNgSpiceOP.hpp" #include "ngspice/panels/PnlNgSpiceDC.hpp" #include "ngspice/panels/PnlNgSpiceAC.hpp" #include "ngspice/panels/PnlNgSpiceTR.hpp" //************************************************************************************************** class NbkNgSpice : public NbkSimEngBase { private : // Analysis pages PnlNgSpiceOP * m_poPnlNgSpiceOP; PnlNgSpiceDC * m_poPnlNgSpiceDC; PnlNgSpiceAC * m_poPnlNgSpiceAC; PnlNgSpiceTR * m_poPnlNgSpiceTR; // PnlNgSpiceFO * m_poPnlNgSpiceFO; // OPTIONS line setup dialog DlgNgsCfgOPT m_oDlgCfgOPT; public : NbkNgSpice( wxWindow * poParent, wxWindowID oWinID ); ~NbkNgSpice( ); bool bClear( void ); bool bLoad( const SimnBase & roSimn ); bool bSave( SimnBase & roSimn ); bool bSetPage( eTypeCmd eAnalysis ); bool bSetPage( const wxString & rosAnalysis ); const wxString & rosGetPage( void ); eTypeCmd eGetPage( void ); // Event handlers void OnPageChangd( wxNotebookEvent & roEvtNbk ); void OnBtnOptions( wxCommandEvent & roEvtCmd ); // Leave this as the last line as private access is envoked by macro wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // NBKNGSPICE_HPP gspiceui-1.1.00+dfsg/src/Makefile0000644000000000000000000002514612505767464015275 0ustar rootroot#*************************************************************************************************** # Makefile * # ---------- * # Description : Build system for the GNU SPICE GUI project C++ source files. * # Started : 2003-03-18 * # Last update : 2015-03-29 * # Copyright : (C) 2003 by MSWaters * #*************************************************************************************************** #*************************************************************************************************** # * # This program is free software; you can redistribute it and/or modify it under the * # terms of the GNU General Public License as published by the Free Software Foundation; * # either version 3 of the License, or (at your option) any later version. * # * #*************************************************************************************************** #*************************************************************************************************** # Any or all of the values in this section may be set below or on the command line when envoking # make eg. : # # make GSPICEUI_DBG=1 GSPICEUI_WXLIB=2.8 # # Note : Values specified on the command line over-ride those specified below. #*************************************************************************************************** # Create bin file containing debug information (ie. for gdb) GSPICEUI_DBG = 0 # Specify the version of the wxWidgets library to compile against GSPICEUI_WXLIB = 3.0 # Specify the install directory DESTDIR = /usr/local/bin #*************************************************************************************************** # Specify string values #*************************************************************************************************** # Which compiler CXX = g++ # Application name PROG = gspiceui # wxWidgets configuration utility WXCFG = wx-config --unicode --version=$(GSPICEUI_WXLIB) # Dependency file DEPS = Makefile.deps # Directories # Long winded but unambiguous #ROOT := $(shell cd .. ; pwd) # Short form but possibly ambiguous ROOT = .. SRCDIR = $(ROOT)/src OBJDIR = obj BINDIR = $(ROOT)/bin # Compiler options : # -Wall Enable all optional warnings desirable for normal code # -Wextra Enable extra warning flags not enabled by "-Wall" # -pipe Use pipes rather than temp. files for comms. between various stages of compilation # -O0 Reduce compilation time but don't break debugging (this is the default) # -O1 Optimize # -O2 Optimize even more # -O3 Optimize yet more # -Ofast Optimize till it hurts : "-O3" + enable opts not valid for all standard-compliants # -Os Optimize for size # -Og Optimize debugging experience but don't break debugging ifeq ($(GSPICEUI_DBG),0) # Options for release (not using -Wall since it's GCC specific) CXXFLAGS := -O1 -pipe $(shell $(WXCFG) --cxxflags) else # Options for development CXXFLAGS := -g -Og -Wall -Wextra -pipe $(shell $(WXCFG) --cxxflags) endif # The following suppresses spurious warnings from gcc with wxWidgets v2.8.12 ifeq ($(GSPICEUI_WXLIB),2.8) CXXFLAGS += -Wno-unused-local-typedefs endif # Includes INCLUDES = -I/usr/include -I/usr/X11R6/include -I. # Libraries # (The pkg-config stuff was requested by a user, somehow pangox was missing) LIBS := $(shell $(WXCFG) --libs core,base,html) $(shell pkg-config --libs-only-l pangox) # Objects OBJS := $(wildcard *.cpp) $(wildcard */*.cpp) $(wildcard */*/*.cpp) OBJS := $(filter-out tests/%.cpp, $(OBJS)) OBJS := $(notdir $(OBJS)) OBJS := $(patsubst %.cpp, obj/%.o, $(OBJS)) # Specify list of directories that `make' should search for prerequisite files VPATH = $(BINDIR) # Set search paths for the specific file types vpath %.cpp base main netlist process utility tests \ ngspice ngspice/commands ngspice/dialogs ngspice/panels \ gnucap gnucap/commands gnucap/dialogs gnucap/panels vpath %.o obj vpath test_% $(BINDIR) #*************************************************************************************************** # Make these targets #*************************************************************************************************** all : banner $(OBJS) $(PROG) @echo @echo "********************** Build process completed **********************" @echo banner : @echo @echo "*********************** Build gSpiceUI binary ***********************" @echo # Compiler Rules : # $< is the name of the first dependency # $@ is the file name of the target # -c compile only, don't link, produces object file ie. .o files # -o place output file in $@ obj/%.o : %.cpp $(CXX) -c $(CXXFLAGS) $(INCLUDES) $< -o $@ @echo # Linker Rules : # -pipe use pipes rather temporary files for interprocess communications # -o specify the output file name $(BINDIR)/$(PROG) : $(OBJS) $(CXX) -pipe -o $(BINDIR)/$(PROG) obj/*.o $(LIBS) ifeq ($(ROOT)/GSpiceUI.app,$(wildcard $(ROOT)/GSpiceUI.app)) cp $(BINDIR)/$(PROG) $(ROOT)/GSpiceUI.app/Contents/MacOS/gspiceui endif #*************************************************************************************************** # Include the dependencies file #*************************************************************************************************** ifeq ($(DEPS),$(wildcard $(DEPS))) include $(DEPS) endif #*************************************************************************************************** # Create the dependencies file #*************************************************************************************************** deps : $(CXX) -MM -D wxCHECK_VERSION="" -I. *.cpp */*.cpp */*/*.cpp | \ gawk 'BEGIN {} { printf "%s%s\n", (index($$0," ")!=1 ? "$(OBJDIR)/" : ""), $$0 }' > $(DEPS) #*************************************************************************************************** # Build the test utilities #*************************************************************************************************** tests : test_Component test_NetList test_CnvtType test_CmdNgSpiceOPT test_CmdNgSpicePR \ test_CmdNgSpiceDC test_CmdNgSpiceAC test_CmdNgSpiceTR test_CmdGnuCapOPT test_CmdGnuCapPR \ test_CmdGnuCapOP test_CmdGnuCapDC test_CmdGnuCapAC test_CmdGnuCapTR test_CmdGnuCapFO \ test_CmdGnuCapGEN test_StrUtils test_AppPnlValue # Compiler options test_% : CXXFLAGS = -Wall -g -pipe $(shell $(WXCFG) --cxxflags) ifeq ($(GSPICEUI_WXLIB),2.8) # This suppresses spurious warnings from gcc with wxWidgets v2.8.12 test_% : CXXFLAGS += -Wno-unused-local-typedefs endif test_% : CXXFLAGS += -D $(shell echo $@ | tr "[:lower:]" "[:upper:]") # Libraries test_% : LIBS = $(shell $(WXCFG) --libs core,base) # Compiler Rules for test utilities : # $^ is the names of all the prerequisites # $@ is the file name of the target test_% : %.cpp @echo $(CXX) $(CXXFLAGS) $(INCLUDES) $^ -o $(BINDIR)/$@ $(LIBS) @echo test_StrUtils : StrUtils.cpp Component.cpp CnvtType.cpp test_CnvtType : CnvtType.cpp test_Component : Component.cpp CnvtType.cpp StrUtils.cpp test_NetList : NetList.cpp Component.cpp StrUtils.cpp TypeDefs.cpp CnvtType.cpp test_CmdNgSpiceOPT : CmdNgSpiceOPT.cpp CmdBase.cpp CnvtType.cpp test_CmdNgSpiceDC : CmdNgSpiceDC.cpp CmdBase.cpp CnvtType.cpp test_CmdNgSpiceAC : CmdNgSpiceAC.cpp CmdBase.cpp CnvtType.cpp test_CmdNgSpiceTR : CmdNgSpiceTR.cpp CmdBase.cpp CnvtType.cpp test_CmdNgSpicePR : CmdNgSpicePR.cpp CmdBase.cpp test_CmdGnuCapOPT : CmdGnuCapOPT.cpp CmdBase.cpp CnvtType.cpp test_CmdGnuCapOP : CmdGnuCapOP.cpp CmdBase.cpp CnvtType.cpp test_CmdGnuCapDC : CmdGnuCapDC.cpp CmdBase.cpp CnvtType.cpp test_CmdGnuCapAC : CmdGnuCapAC.cpp CmdBase.cpp CnvtType.cpp test_CmdGnuCapTR : CmdGnuCapTR.cpp CmdBase.cpp CnvtType.cpp test_CmdGnuCapFO : CmdGnuCapFO.cpp CmdBase.cpp CnvtType.cpp test_CmdGnuCapGEN : CmdGnuCapGEN.cpp CmdBase.cpp CnvtType.cpp test_CmdGnuCapPR : CmdGnuCapPR.cpp CmdBase.cpp CnvtType.cpp TypeDefs.cpp StrUtils.cpp \ Component.cpp NetList.cpp test_AppPnlValue : AppPnlValue.cpp PnlValue.cpp UnitsBase.cpp ChoUnits.cpp LblUnits.cpp \ PnlTxtSpn.cpp PnlLblTxt.cpp CnvtType.cpp #*************************************************************************************************** # Install the application #*************************************************************************************************** install : mkdir -p $(DESTDIR)/bin cp ../bin/$(PROG) $(DESTDIR)/bin #*************************************************************************************************** # Uninstall the application #*************************************************************************************************** uninstall : rm -f $(DESTDIR)/bin/$(PROG) # rmdir --ignore-fail-on-non-empty $(DESTDIR)/bin #*************************************************************************************************** # Remove old versions of the main application binary and object files #*************************************************************************************************** clean : rm -f $(BINDIR)/$(PROG) $(OBJDIR)/*.o #*************************************************************************************************** # Remove old versions of test application binaries #*************************************************************************************************** cleantests : rm -f $(BINDIR)/test_* #*************************************************************************************************** # Remove old versions of all application binaries #*************************************************************************************************** cleanall : clean cleantests #*************************************************************************************************** # Specify phony targets (ie. targets which are not files) #*************************************************************************************************** .PHONY : banner deps install uninstall clean cleantests #*************************************************************************************************** gspiceui-1.1.00+dfsg/src/gnucap/0000755000000000000000000000000012513452247015067 5ustar rootrootgspiceui-1.1.00+dfsg/src/gnucap/dialogs/0000755000000000000000000000000012463654156016520 5ustar rootrootgspiceui-1.1.00+dfsg/src/gnucap/dialogs/DlgGcpCfgOPT.cpp0000644000000000000000000011266612463654156021403 0ustar rootroot//************************************************************************************************** // DlgGcpCfgOPT.cpp * // ------------------ * // Started : 2006-09-14 * // Last Update : 2015-02-02 * // Copyright : (C) 2006 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "DlgGcpCfgOPT.hpp" //************************************************************************************************** // Implement an event table. wxBEGIN_EVENT_TABLE( DlgGcpCfgOPT, wxDialog ) EVT_BUTTON( DlgGcpCfgOPT::ID_BTN_OK , DlgGcpCfgOPT::OnBtnOk ) EVT_BUTTON( DlgGcpCfgOPT::ID_BTN_DEFAULTS, DlgGcpCfgOPT::OnBtnDefaults ) EVT_BUTTON( DlgGcpCfgOPT::ID_BTN_CANCEL , DlgGcpCfgOPT::OnBtnCancel ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. // // Argument List : // poWin - A pointer to the dialog parent window DlgGcpCfgOPT::DlgGcpCfgOPT( wxWindow * poWin ) : wxDialog( poWin, -1, wxT(""), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE, wxDialogNameStr ) { SetTitle( wxT(" GNU-Cap OPTIONS Command Setup") ); Initialize( ); bClear( ); } //************************************************************************************************** // Destructor. DlgGcpCfgOPT::~DlgGcpCfgOPT( ) { } //************************************************************************************************** // Initialize object attributes. void DlgGcpCfgOPT::Initialize( void ) { // Call all the initialization functions Create( ); ToolTips( ); // Layout the of the display objects DoLayout( ); } //************************************************************************************************** // Create the display objects. void DlgGcpCfgOPT::Create( void ) { wxPanel * poPnlLHS, * poPnlMID, * poPnlRHS, * poPnlRHS1, * poPnlBtns; wxSize oSizeCbx; int iWdName=85, iWdValue=95, iWdUnits=80; // Create the necessary panel objects poPnlLHS = new wxPanel( this ); poPnlMID = new wxPanel( this ); poPnlRHS = new wxPanel( this ); poPnlRHS1 = new wxPanel( poPnlRHS ); poPnlBtns = new wxPanel( poPnlRHS ); // Create the PnlValue controls m_oPnlABSTOL .bCreate( poPnlLHS ,ID_PNL_ABSTOL , iWdName, iWdValue, iWdUnits ); m_oPnlCHGTOL .bCreate( poPnlLHS ,ID_PNL_CHGTOL , iWdName, iWdValue, iWdUnits ); m_oPnlRELTOL .bCreate( poPnlLHS ,ID_PNL_RELTOL , iWdName, iWdValue, iWdUnits ); m_oPnlTRTOL .bCreate( poPnlLHS ,ID_PNL_TRTOL , iWdName, iWdValue, iWdUnits ); m_oPnlVNTOL .bCreate( poPnlLHS ,ID_PNL_VNTOL , iWdName, iWdValue, iWdUnits ); m_oPnlDAMPST .bCreate( poPnlLHS ,ID_PNL_DAMPST , iWdName, iWdValue, iWdUnits ); m_oPnlDAMPMAX .bCreate( poPnlLHS ,ID_PNL_DAMPMAX , iWdName, iWdValue, iWdUnits ); m_oPnlDAMPMIN .bCreate( poPnlLHS ,ID_PNL_DAMPMIN , iWdName, iWdValue, iWdUnits ); m_oPnlDEFL .bCreate( poPnlLHS ,ID_PNL_DEFL , iWdName, iWdValue, iWdUnits ); m_oPnlDEFW .bCreate( poPnlLHS ,ID_PNL_DEFW , iWdName, iWdValue, iWdUnits ); m_oPnlDEFAD .bCreate( poPnlLHS ,ID_PNL_DEFAD , iWdName, iWdValue, iWdUnits ); m_oPnlDEFAS .bCreate( poPnlLHS ,ID_PNL_DEFAS , iWdName, iWdValue, iWdUnits ); m_oPnlDTMIN .bCreate( poPnlLHS ,ID_PNL_DTMIN , iWdName, iWdValue, iWdUnits ); m_oPnlDTRATIO .bCreate( poPnlLHS ,ID_PNL_DTRATIO , iWdName, iWdValue, iWdUnits ); m_oPnlGMIN .bCreate( poPnlLHS ,ID_PNL_GMIN , iWdName, iWdValue, iWdUnits ); m_oPnlROUND .bCreate( poPnlLHS ,ID_PNL_ROUND , iWdName, iWdValue, iWdUnits ); m_oPnlSHORT .bCreate( poPnlLHS ,ID_PNL_SHORT , iWdName, iWdValue, iWdUnits ); m_oPnlTEMP .bCreate( poPnlMID ,ID_PNL_TEMP , iWdName, iWdValue, iWdUnits ); m_oPnlTNOM .bCreate( poPnlMID ,ID_PNL_TNOM , iWdName, iWdValue, iWdUnits ); m_oPnlTRREJECT.bCreate( poPnlMID ,ID_PNL_TRREJECT, iWdName, iWdValue, iWdUnits ); m_oPnlTRSTEPG .bCreate( poPnlMID ,ID_PNL_TRSTEPG , iWdName, iWdValue, iWdUnits ); m_oPnlTRSTEPH .bCreate( poPnlMID ,ID_PNL_TRSTEPH , iWdName, iWdValue, iWdUnits ); m_oPnlTRSTEPS .bCreate( poPnlMID ,ID_PNL_TRSTEPS , iWdName, iWdValue, iWdUnits ); m_oPnlFLOOR .bCreate( poPnlMID ,ID_PNL_FLOOR , iWdName, iWdValue, iWdUnits ); m_oPnlVFLOOR .bCreate( poPnlMID ,ID_PNL_VFLOOR , iWdName, iWdValue, iWdUnits ); m_oPnlVMAX .bCreate( poPnlMID ,ID_PNL_VMAX , iWdName, iWdValue, iWdUnits ); m_oPnlVMIN .bCreate( poPnlMID ,ID_PNL_VMIN , iWdName, iWdValue, iWdUnits ); m_oPnlITL1 .bCreate( poPnlMID ,ID_PNL_ITL1 , iWdName, iWdValue, iWdUnits ); m_oPnlITL3 .bCreate( poPnlMID ,ID_PNL_ITL3 , iWdName, iWdValue, iWdUnits ); m_oPnlITL4 .bCreate( poPnlMID ,ID_PNL_ITL4 , iWdName, iWdValue, iWdUnits ); m_oPnlITL7 .bCreate( poPnlMID ,ID_PNL_ITL7 , iWdName, iWdValue, iWdUnits ); m_oPnlITL8 .bCreate( poPnlMID ,ID_PNL_ITL8 , iWdName, iWdValue, iWdUnits ); m_oPnlITERMIN .bCreate( poPnlMID ,ID_PNL_ITERMIN , iWdName, iWdValue, iWdUnits ); m_oPnlHARMS .bCreate( poPnlMID ,ID_PNL_HARMS , iWdName, iWdValue, iWdUnits ); m_oPnlRECURS .bCreate( poPnlRHS1 ,ID_PNL_RECURS , iWdName, iWdValue, iWdUnits ); m_oPnlTRANSITS.bCreate( poPnlRHS1 ,ID_PNL_TRANSITS, iWdName, iWdValue, iWdUnits ); m_oPnlABSTOL .bSetName( wxT("ABSTOL") ); m_oPnlCHGTOL .bSetName( wxT("CHGTOL") ); m_oPnlDAMPMAX .bSetName( wxT("DAMPMAX") ); m_oPnlDAMPMIN .bSetName( wxT("DAMPMIN") ); m_oPnlDAMPST .bSetName( wxT("DAMPST") ); m_oPnlDEFL .bSetName( wxT("DEFL") ); m_oPnlDEFW .bSetName( wxT("DEFW") ); m_oPnlDEFAD .bSetName( wxT("DEFAD") ); m_oPnlDEFAS .bSetName( wxT("DEFAS") ); m_oPnlDTMIN .bSetName( wxT("DTMIN") ); m_oPnlDTRATIO .bSetName( wxT("DTRATIO") ); m_oPnlFLOOR .bSetName( wxT("FLOOR") ); m_oPnlGMIN .bSetName( wxT("GMIN") ); m_oPnlHARMS .bSetName( wxT("HARMONICS") ); m_oPnlITERMIN .bSetName( wxT("ITERMIN") ); m_oPnlITL1 .bSetName( wxT("ITL1") ); m_oPnlITL3 .bSetName( wxT("ITL3") ); m_oPnlITL4 .bSetName( wxT("ITL4") ); m_oPnlITL7 .bSetName( wxT("ITL7") ); m_oPnlITL8 .bSetName( wxT("ITL8") ); m_oPnlRECURS .bSetName( wxT("RECURS") ); m_oPnlRELTOL .bSetName( wxT("RELTOL") ); m_oPnlROUND .bSetName( wxT("ROUND") ); m_oPnlSHORT .bSetName( wxT("SHORT") ); m_oPnlTEMP .bSetName( wxT("TEMP") ); m_oPnlTNOM .bSetName( wxT("TNOM") ); m_oPnlTRANSITS.bSetName( wxT("TRANSITS") ); m_oPnlTRREJECT.bSetName( wxT("TRREJECT") ); m_oPnlTRSTEPG .bSetName( wxT("TRSTEPG") ); m_oPnlTRSTEPH .bSetName( wxT("TRSTEPH") ); m_oPnlTRSTEPS .bSetName( wxT("TRSTEPS") ); m_oPnlTRTOL .bSetName( wxT("TRTOL") ); m_oPnlVFLOOR .bSetName( wxT("VFLOOR") ); m_oPnlVMAX .bSetName( wxT("VMAX") ); m_oPnlVMIN .bSetName( wxT("VMIN") ); m_oPnlVNTOL .bSetName( wxT("VNTOL") ); m_oPnlABSTOL .bSetUnitsType( eUNITS_CURR ); m_oPnlCHGTOL .bSetUnitsType( eUNITS_CHRG ); m_oPnlDTMIN .bSetUnitsType( eUNITS_TIME ); m_oPnlDTRATIO .bSetUnitsType( eUNITS_EXP ); m_oPnlGMIN .bSetUnitsType( eUNITS_COND ); m_oPnlROUND .bSetUnitsType( eUNITS_EXP ); m_oPnlSHORT .bSetUnitsType( eUNITS_RES ); m_oPnlTEMP .bSetUnitsType( eUNITS_TMPC ); m_oPnlTNOM .bSetUnitsType( eUNITS_TMPC ); m_oPnlVFLOOR .bSetUnitsType( eUNITS_VOLT ); m_oPnlVMIN .bSetUnitsType( eUNITS_VOLT ); m_oPnlVMAX .bSetUnitsType( eUNITS_VOLT ); m_oPnlVNTOL .bSetUnitsType( eUNITS_VOLT ); m_oPnlDAMPMAX .bSetValueType( eVALUE_FLT ); m_oPnlDAMPMIN .bSetValueType( eVALUE_FLT ); m_oPnlDAMPST .bSetValueType( eVALUE_INT ); m_oPnlDEFL .bSetValueType( eVALUE_FLT ); m_oPnlDEFW .bSetValueType( eVALUE_FLT ); m_oPnlDEFAD .bSetValueType( eVALUE_SCI ); m_oPnlDEFAS .bSetValueType( eVALUE_SCI ); m_oPnlFLOOR .bSetValueType( eVALUE_SCI ); m_oPnlHARMS .bSetValueType( eVALUE_INT ); m_oPnlITERMIN .bSetValueType( eVALUE_INT ); m_oPnlITL1 .bSetValueType( eVALUE_INT ); m_oPnlITL3 .bSetValueType( eVALUE_INT ); m_oPnlITL4 .bSetValueType( eVALUE_INT ); m_oPnlITL7 .bSetValueType( eVALUE_INT ); m_oPnlITL8 .bSetValueType( eVALUE_INT ); m_oPnlRECURS .bSetValueType( eVALUE_INT ); m_oPnlRELTOL .bSetValueType( eVALUE_FLT ); m_oPnlTRANSITS.bSetValueType( eVALUE_INT ); m_oPnlTRREJECT.bSetValueType( eVALUE_FLT ); m_oPnlTRSTEPG .bSetValueType( eVALUE_SCI ); m_oPnlTRSTEPH .bSetValueType( eVALUE_SCI ); m_oPnlTRSTEPS .bSetValueType( eVALUE_FLT ); m_oPnlTRTOL .bSetValueType( eVALUE_FLT ); m_oPnlDAMPMAX .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlDAMPMIN .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlDAMPST .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlDEFL .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlDEFW .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlDEFAD .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlDEFAS .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlFLOOR .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlHARMS .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlITERMIN .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlITL1 .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlITL3 .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlITL4 .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlITL7 .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlITL8 .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlRECURS .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlRELTOL .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlTEMP .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlTNOM .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlTRANSITS.bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlTRREJECT.bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlTRSTEPG .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlTRSTEPH .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlTRSTEPS .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlTRTOL .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlDEFL .bSetUnits( wxT("uMetre") ); m_oPnlDEFW .bSetUnits( wxT("uMetre") ); m_oPnlDEFAD .bSetUnits( wxT("Metre²") ); m_oPnlDEFAS .bSetUnits( wxT("Metre²") ); m_oPnlRELTOL .bSetUnits( wxT("%") ); m_oPnlDEFAD .bSetSpnRange( 1.0E-12, 1.0E-06 ); m_oPnlDEFAS .bSetSpnRange( 1.0E-12, 1.0E-06 ); m_oPnlFLOOR .bSetSpnRange( 1.0E-23, 1.0E-18 ); m_oPnlTRSTEPG .bSetSpnRange( 1.0E+00, 1.0E+99 ); m_oPnlTRSTEPH .bSetSpnRange( 1.0E+00, 1.0E+99 ); m_oPnlDEFL .bSetSpnRange( 0.0 , 10000.0 ); m_oPnlDEFL .bSetSpnIncSz( 1.0 , 1000.0 ); m_oPnlDEFW .bSetSpnRange( 0.0 , 10000.0 ); m_oPnlDEFW .bSetSpnIncSz( 1.0 , 1000.0 ); m_oPnlTRREJECT.bSetSpnRange( 0.01, 100.0 ); m_oPnlTRREJECT.bSetSpnIncSz( 0.01, 10.0 ); m_oPnlTRSTEPS .bSetSpnRange( 0.01, 100.0 ); m_oPnlTRSTEPS .bSetSpnIncSz( 0.01, 10.0 ); m_oPnlDAMPMAX .bSetSpnRange( 0.0 , 1.0 ); m_oPnlDAMPMAX .bSetSpnIncSz( 0.01, 0.1 ); m_oPnlDAMPMIN .bSetSpnRange( 0.0 , 1.0 ); m_oPnlDAMPMIN .bSetSpnIncSz( 0.01, 0.1 ); m_oPnlRELTOL .bSetSpnRange( 0.01, 100.0 ); m_oPnlRELTOL .bSetSpnIncSz( 0.01, 10.0 ); m_oPnlTRTOL .bSetSpnRange( 0.01, 100.0 ); m_oPnlTRTOL .bSetSpnIncSz( 0.01, 10.0 ); m_oPnlDAMPST .bSetSpnRange( 0, 37 ); m_oPnlDAMPST .bSetSpnIncSz( 1, 1 ); m_oPnlHARMS .bSetSpnRange( 1, 100 ); m_oPnlHARMS .bSetSpnIncSz( 1, 10 ); m_oPnlITL1 .bSetSpnRange( 0, 1000 ); m_oPnlITL1 .bSetSpnIncSz( 1, 100 ); m_oPnlITL3 .bSetSpnRange( 0, 1000 ); m_oPnlITL3 .bSetSpnIncSz( 1, 100 ); m_oPnlITL4 .bSetSpnRange( 0, 1000 ); m_oPnlITL4 .bSetSpnIncSz( 1, 100 ); m_oPnlITL7 .bSetSpnRange( 0, 1000 ); m_oPnlITL7 .bSetSpnIncSz( 1, 100 ); m_oPnlITL8 .bSetSpnRange( 0, 1000 ); m_oPnlITL8 .bSetSpnIncSz( 1, 100 ); m_oPnlITERMIN .bSetSpnRange( 0, 1000 ); m_oPnlITERMIN .bSetSpnIncSz( 1, 100 ); m_oPnlRECURS .bSetSpnRange( 0, 1000 ); m_oPnlRECURS .bSetSpnIncSz( 1, 100 ); m_oPnlTRANSITS.bSetSpnRange( 1, 100 ); m_oPnlTRANSITS.bSetSpnIncSz( 1, 10 ); // Create the choice box controls m_oChoMETHOD.bCreate( poPnlRHS1, ID_CHO_METHOD, iWdName, iWdValue ); m_oChoMETHOD.m_oLblName.SetLabel( wxT("METHOD") ); m_oChoMETHOD.m_oChoice.Append( wxT("Euler") ); m_oChoMETHOD.m_oChoice.Append( wxT("EulerOnly") ); m_oChoMETHOD.m_oChoice.Append( wxT("Trap") ); m_oChoMETHOD.m_oChoice.Append( wxT("TrapOnly") ); m_oChoMODE .bCreate( poPnlRHS1, ID_CHO_MODE, iWdName, iWdValue ); m_oChoMODE .m_oLblName.SetLabel( wxT("MODE") ); m_oChoMODE .m_oChoice.Append( wxT("Analog") ); m_oChoMODE .m_oChoice.Append( wxT("Digital") ); m_oChoMODE .m_oChoice.Append( wxT("Mixed") ); m_oChoORDER .bCreate( poPnlRHS1, ID_CHO_ORDER, iWdName, iWdValue ); m_oChoORDER .m_oLblName.SetLabel( wxT("ORDER") ); m_oChoORDER .m_oChoice.Append( wxT("Forward") ); m_oChoORDER .m_oChoice.Append( wxT("Reverse") ); m_oChoORDER .m_oChoice.Append( wxT("Auto") ); // Set height of check box controls according to size of PnlValue object oSizeCbx.SetWidth ( 250 ); oSizeCbx.SetHeight( GUI_CTRL_HT+3 ); // Create the check box controls m_oCbxBYPASS .Create( poPnlRHS1, ID_CBX_BYPASS , wxT("BYPASS \t ") , wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); m_oCbxCSTRAY .Create( poPnlRHS1, ID_CBX_CSTRAY , wxT("CSTRAY \t\t "), wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); m_oCbxFBBYPASS.Create( poPnlRHS1, ID_CBX_FBBYPASS, wxT("FBBYPASS \t ") , wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); m_oCbxINCMODE .Create( poPnlRHS1, ID_CBX_INCMODE , wxT("INCMODE \t ") , wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); m_oCbxLUBYPASS.Create( poPnlRHS1, ID_CBX_LUBYPASS, wxT("LUBYPASS \t ") , wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); m_oCbxOPTS .Create( poPnlRHS1, ID_CBX_OPTS , wxT("OPTS \t\t "), wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); m_oCbxQUITCONV.Create( poPnlRHS1, ID_CBX_QUITCONV, wxT("QUITCONV \t ") , wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); m_oCbxRSTRAY .Create( poPnlRHS1, ID_CBX_RSTRAY , wxT("RSTRAY \t\t "), wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); m_oCbxTRACEL .Create( poPnlRHS1, ID_CBX_TRACEL , wxT("TRACEL \t\t "), wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); // Create the buttons m_oBtnOk .Create( poPnlBtns, ID_BTN_OK , wxT("OK") ); m_oBtnDefaults.Create( poPnlBtns, ID_BTN_DEFAULTS, wxT("Defaults") ); m_oBtnCancel .Create( poPnlBtns, ID_BTN_CANCEL , wxT("Cancel") ); } //************************************************************************************************** // Initialize the tool tips. void DlgGcpCfgOPT::ToolTips( void ) { // Define tool tips for each control m_oPnlABSTOL .SetToolTip( wxT(" Absolute current error tolerance ") ); m_oPnlCHGTOL .SetToolTip( wxT(" Charge tolerance ") ); m_oPnlDAMPMAX .SetToolTip( wxT(" Normal Newton damping factor (when all is well) ") ); m_oPnlDAMPMIN .SetToolTip( wxT(" Newton damping factor when there's a problem ") ); m_oPnlDAMPST .SetToolTip( wxT(" Damping strategy ") ); m_oPnlDEFL .SetToolTip( wxT(" MOSFET default channel length ") ); m_oPnlDEFW .SetToolTip( wxT(" MOSFET default channel width ") ); m_oPnlDEFAD .SetToolTip( wxT(" MOSFET default drain diffusion area ") ); m_oPnlDEFAS .SetToolTip( wxT(" MOSFET default source diffusion area ") ); m_oPnlDTMIN .SetToolTip( wxT(" Minimum time step ") ); m_oPnlDTRATIO .SetToolTip( wxT(" Ratio between the minimum and maximum time step ") ); m_oPnlFLOOR .SetToolTip( wxT(" Effective zero value ") ); m_oPnlGMIN .SetToolTip( wxT(" Minimum allowable conductance ") ); m_oPnlHARMS .SetToolTip( wxT(" Harmonics in Fourier analysis ") ); m_oPnlITERMIN .SetToolTip( wxT(" Number of extra iterations after convergence ") ); m_oPnlITL1 .SetToolTip( wxT(" DC iteration limit ") ); m_oPnlITL3 .SetToolTip( wxT(" Transient lower iteration limit ") ); m_oPnlITL4 .SetToolTip( wxT(" Transient upper iteration limit ") ); m_oPnlITL7 .SetToolTip( wxT(" Worst case analysis iteration limit ") ); m_oPnlITL8 .SetToolTip( wxT(" Convergence diagnostic iteration threshold ") ); m_oPnlRECURS .SetToolTip( wxT(" Limit recursion levels in expression evaluation ") ); m_oPnlRELTOL .SetToolTip( wxT(" Relative error tolerance ") ); m_oPnlROUND .SetToolTip( wxT(" Numeric rounding tolerance ") ); m_oPnlSHORT .SetToolTip( wxT(" Resistance of voltage source or short ") ); m_oPnlTEMP .SetToolTip( wxT(" Ambient temperature of the circuit ") ); m_oPnlTNOM .SetToolTip( wxT(" Nominal temperature at which device parameters are measured ") ); m_oPnlTRANSITS.SetToolTip( wxT(" Mixed mode transition count ") ); m_oPnlTRREJECT.SetToolTip( wxT(" Transient error rejection threshold ") ); m_oPnlTRSTEPG .SetToolTip( wxT(" Maximum internal step size growth in Transient analysis ") ); m_oPnlTRSTEPH .SetToolTip( wxT(" Maximum internal step size growth in TR analysis when iteration exceeds it13 but still converges ") ); m_oPnlTRSTEPS .SetToolTip( wxT(" Amount to shrink step size when convergence fails in TR anaylis ") ); m_oPnlTRTOL .SetToolTip( wxT(" Transient analysis error tolerance ") ); m_oPnlVFLOOR .SetToolTip( wxT(" Effective zero value for voltage probes ") ); m_oPnlVMAX .SetToolTip( wxT(" Positive node voltage limit ") ); m_oPnlVMIN .SetToolTip( wxT(" Negative node voltage limit ") ); m_oPnlVNTOL .SetToolTip( wxT(" Absolute voltage error tolerance ") ); m_oCbxBYPASS .SetToolTip( wxT(" Bypass model evaluation if appropriate ") ); m_oCbxCSTRAY .SetToolTip( wxT(" Include capacitance in device models ") ); m_oCbxFBBYPASS.SetToolTip( wxT(" Skip matrix solution the last iteration ") ); m_oCbxINCMODE .SetToolTip( wxT(" Incrementally update the matrix ") ); m_oCbxLUBYPASS.SetToolTip( wxT(" Bypass parts of LU decomposition if appropriate ") ); m_oCbxOPTS .SetToolTip( wxT(" Enable printing of option values ") ); m_oCbxQUITCONV.SetToolTip( wxT(" Quit on convergence failure in TR analysis ") ); m_oCbxRSTRAY .SetToolTip( wxT(" Include series resistance in device models ") ); m_oCbxTRACEL .SetToolTip( wxT(" Use a queue to only load changed elements to the matrix ") ); m_oChoMETHOD.GetParent( )->SetToolTip( wxT(" Numerical integration method ") ); m_oChoMODE .GetParent( )->SetToolTip( wxT(" Simulation mode selection ") ); m_oChoORDER .GetParent( )->SetToolTip( wxT(" Equation ordering ") ); } //************************************************************************************************** // Layout the dialog display objects. void DlgGcpCfgOPT::DoLayout( void ) { wxBoxSizer * poSzrDlg; wxPanel * poPnlLHS, * poPnlMID, * poPnlRHS, * poPnlRHS1, * poPnlBtns; wxBoxSizer * poSzrLHS, * poSzrMID, * poSzrRHS, * poSzrRHS1, * poSzrBtns; wxSizerFlags oFlags; // Get pointers to the various panels poPnlLHS = (wxPanel *) m_oPnlABSTOL.GetParent( ); poPnlMID = (wxPanel *) m_oPnlTEMP .GetParent( ); poPnlRHS1 = (wxPanel *) m_oCbxBYPASS.GetParent( ); poPnlBtns = (wxPanel *) m_oBtnOk .GetParent( ); poPnlRHS = (wxPanel *) poPnlBtns ->GetParent( ); // Create sizers to associate with the panels poSzrDlg = new wxBoxSizer ( wxHORIZONTAL ); poSzrLHS = new wxStaticBoxSizer( wxVERTICAL, poPnlLHS , wxT("") ); poSzrMID = new wxStaticBoxSizer( wxVERTICAL, poPnlMID , wxT("") ); poSzrRHS1 = new wxStaticBoxSizer( wxVERTICAL, poPnlRHS1, wxT("") ); poSzrBtns = new wxBoxSizer ( wxHORIZONTAL ); poSzrRHS = new wxBoxSizer ( wxVERTICAL ); // Set the sizers to the panels SetSizer( poSzrDlg ); poPnlLHS ->SetSizer( poSzrLHS ); poPnlMID ->SetSizer( poSzrMID ); poPnlRHS ->SetSizer( poSzrRHS ); poPnlRHS1->SetSizer( poSzrRHS1 ); poPnlBtns->SetSizer( poSzrBtns ); // Layout the left hand panel oFlags.Align( wxALIGN_LEFT ); oFlags.Border( wxTOP | wxLEFT | wxRIGHT, 10 ); poSzrLHS->Add( &m_oPnlABSTOL , oFlags ); oFlags.Border( wxLEFT , 10 ); poSzrLHS->Add( &m_oPnlCHGTOL , oFlags ); poSzrLHS->Add( &m_oPnlRELTOL , oFlags ); poSzrLHS->Add( &m_oPnlTRTOL , oFlags ); poSzrLHS->Add( &m_oPnlVNTOL , oFlags ); poSzrLHS->Add( &m_oPnlDAMPST , oFlags ); poSzrLHS->Add( &m_oPnlDAMPMAX , oFlags ); poSzrLHS->Add( &m_oPnlDAMPMIN , oFlags ); poSzrLHS->Add( &m_oPnlDEFL , oFlags ); poSzrLHS->Add( &m_oPnlDEFW , oFlags ); poSzrLHS->Add( &m_oPnlDEFAD , oFlags ); poSzrLHS->Add( &m_oPnlDEFAS , oFlags ); poSzrLHS->Add( &m_oPnlDTMIN , oFlags ); poSzrLHS->Add( &m_oPnlDTRATIO , oFlags ); poSzrLHS->Add( &m_oPnlGMIN , oFlags ); poSzrLHS->Add( &m_oPnlROUND , oFlags ); oFlags.Border( wxLEFT | wxBOTTOM , 10 ); poSzrLHS->Add( &m_oPnlSHORT , oFlags ); // Layout the middle panel oFlags.Border( wxTOP | wxLEFT | wxRIGHT, 10 ); poSzrMID->Add( &m_oPnlTEMP , oFlags ); oFlags.Border( wxLEFT , 10 ); poSzrMID->Add( &m_oPnlTNOM , oFlags ); poSzrMID->Add( &m_oPnlTRREJECT, oFlags ); poSzrMID->Add( &m_oPnlTRSTEPG , oFlags ); poSzrMID->Add( &m_oPnlTRSTEPH , oFlags ); poSzrMID->Add( &m_oPnlTRSTEPS , oFlags ); poSzrMID->Add( &m_oPnlFLOOR , oFlags ); poSzrMID->Add( &m_oPnlVFLOOR , oFlags ); poSzrMID->Add( &m_oPnlVMAX , oFlags ); poSzrMID->Add( &m_oPnlVMIN , oFlags ); poSzrMID->Add( &m_oPnlITL1 , oFlags ); poSzrMID->Add( &m_oPnlITL3 , oFlags ); poSzrMID->Add( &m_oPnlITL4 , oFlags ); poSzrMID->Add( &m_oPnlITL7 , oFlags ); poSzrMID->Add( &m_oPnlITL8 , oFlags ); poSzrMID->Add( &m_oPnlITERMIN , oFlags ); oFlags.Border( wxLEFT | wxBOTTOM , 10 ); poSzrMID->Add( &m_oPnlHARMS , oFlags ); // Layout the right hand options panel oFlags.Border( wxTOP | wxLEFT | wxRIGHT, 10 ); poSzrRHS1->Add( &m_oPnlRECURS , oFlags ); oFlags.Border( wxLEFT , 10 ); poSzrRHS1->Add( &m_oPnlTRANSITS, oFlags ); poSzrRHS1->Add( &m_oChoMETHOD , oFlags ); poSzrRHS1->Add( &m_oChoMODE , oFlags ); poSzrRHS1->Add( &m_oChoORDER , oFlags ); oFlags.Border( wxLEFT , 7 ); poSzrRHS1->Add( &m_oCbxBYPASS , oFlags ); poSzrRHS1->Add( &m_oCbxCSTRAY , oFlags ); poSzrRHS1->Add( &m_oCbxFBBYPASS, oFlags ); poSzrRHS1->Add( &m_oCbxINCMODE , oFlags ); poSzrRHS1->Add( &m_oCbxLUBYPASS, oFlags ); poSzrRHS1->Add( &m_oCbxOPTS , oFlags ); poSzrRHS1->Add( &m_oCbxQUITCONV, oFlags ); poSzrRHS1->Add( &m_oCbxRSTRAY , oFlags ); oFlags.Border( wxLEFT | wxBOTTOM , 7 ); poSzrRHS1->Add( &m_oCbxTRACEL , oFlags ); // Layout the buttons panel oFlags.Align( wxALIGN_RIGHT ); oFlags.Border( wxTOP | wxBOTTOM , 12 ); poSzrBtns->Add( &m_oBtnOk , oFlags ); poSzrBtns->AddSpacer( 10 ); oFlags.Align( wxALIGN_CENTER ); poSzrBtns->Add( &m_oBtnDefaults, oFlags ); poSzrBtns->AddSpacer( 10 ); oFlags.Align( wxALIGN_LEFT ); poSzrBtns->Add( &m_oBtnCancel , oFlags ); // Layout the right hand panel oFlags.Align( wxALIGN_CENTER ); oFlags.Border( wxALL , 0 ); poSzrRHS->Add( poPnlRHS1 , oFlags ); oFlags.Border( wxTOP , 35 ); poSzrRHS->Add( poPnlBtns , oFlags ); // Layout the overall dialog oFlags.Border( wxALL , 15 ); poSzrDlg->Add( poPnlLHS , oFlags ); oFlags.Border( wxTOP | wxBOTTOM , 15 ); poSzrDlg->Add( poPnlMID , oFlags ); oFlags.Border( wxALL , 15 ); poSzrDlg->Add( poPnlRHS , oFlags ); // Set dialogues minimum size and initial size as calculated by the sizer poSzrLHS ->SetSizeHints( poPnlLHS ); poSzrMID ->SetSizeHints( poPnlMID ); poSzrRHS1->SetSizeHints( poPnlRHS1 ); poSzrBtns->SetSizeHints( poPnlBtns ); poSzrRHS ->SetSizeHints( poPnlRHS ); poSzrDlg ->SetSizeHints( this ); } //************************************************************************************************** // Get a pointer to a value panel associated with a control ID number. // // Argument List : // iPnlID - The control ID number // // Return Values : // Success - A pointer to the value panel // Failure - NULL PnlValue * DlgGcpCfgOPT::poGetPanel( int iPnlID ) { switch( iPnlID ) { case ID_PNL_ABSTOL : return( &m_oPnlABSTOL ); case ID_PNL_CHGTOL : return( &m_oPnlCHGTOL ); case ID_PNL_DAMPMAX : return( &m_oPnlDAMPMAX ); case ID_PNL_DAMPMIN : return( &m_oPnlDAMPMIN ); case ID_PNL_DAMPST : return( &m_oPnlDAMPST ); case ID_PNL_DEFL : return( &m_oPnlDEFL ); case ID_PNL_DEFW : return( &m_oPnlDEFW ); case ID_PNL_DEFAD : return( &m_oPnlDEFAD ); case ID_PNL_DEFAS : return( &m_oPnlDEFAS ); case ID_PNL_DTMIN : return( &m_oPnlDTMIN ); case ID_PNL_DTRATIO : return( &m_oPnlDTRATIO ); case ID_PNL_FLOOR : return( &m_oPnlFLOOR ); case ID_PNL_GMIN : return( &m_oPnlGMIN ); case ID_PNL_HARMS : return( &m_oPnlHARMS ); case ID_PNL_ITERMIN : return( &m_oPnlITERMIN ); case ID_PNL_ITL1 : return( &m_oPnlITL1 ); case ID_PNL_ITL3 : return( &m_oPnlITL3 ); case ID_PNL_ITL4 : return( &m_oPnlITL4 ); case ID_PNL_ITL7 : return( &m_oPnlITL7 ); case ID_PNL_ITL8 : return( &m_oPnlITL8 ); case ID_PNL_RECURS : return( &m_oPnlRECURS ); case ID_PNL_RELTOL : return( &m_oPnlRELTOL ); case ID_PNL_ROUND : return( &m_oPnlROUND ); case ID_PNL_SHORT : return( &m_oPnlSHORT ); case ID_PNL_TEMP : return( &m_oPnlTEMP ); case ID_PNL_TNOM : return( &m_oPnlTNOM ); case ID_PNL_TRANSITS : return( &m_oPnlTRANSITS ); case ID_PNL_TRREJECT : return( &m_oPnlTRREJECT ); case ID_PNL_TRSTEPG : return( &m_oPnlTRSTEPG ); case ID_PNL_TRSTEPH : return( &m_oPnlTRSTEPH ); case ID_PNL_TRSTEPS : return( &m_oPnlTRSTEPS ); case ID_PNL_TRTOL : return( &m_oPnlTRTOL ); case ID_PNL_VFLOOR : return( &m_oPnlVFLOOR ); case ID_PNL_VMAX : return( &m_oPnlVMAX ); case ID_PNL_VMIN : return( &m_oPnlVMIN ); case ID_PNL_VNTOL : return( &m_oPnlVNTOL ); default : return( NULL ); } } //************************************************************************************************** // Set the values in the value panel controls. // // Argument List : // rosCmdOPT - A reference to an OPTION command object void DlgGcpCfgOPT::SetValues( CmdGnuCapOPT & roCmdOPT ) { wxString os1; uint ui1; SetEvtHandlerEnabled( false ); m_oPnlABSTOL .bSetValue( roCmdOPT.m_osABSTOL ); m_oPnlCHGTOL .bSetValue( roCmdOPT.m_osCHGTOL ); m_oPnlDAMPMAX .bSetValue( roCmdOPT.m_osDAMPMAX ); m_oPnlDAMPMIN .bSetValue( roCmdOPT.m_osDAMPMIN ); m_oPnlDAMPST .bSetValue( roCmdOPT.m_osDAMPST ); m_oPnlDEFL .bSetValue( roCmdOPT.m_osDEFL ); m_oPnlDEFW .bSetValue( roCmdOPT.m_osDEFW ); m_oPnlDEFAD .bSetValue( roCmdOPT.m_osDEFAD ); m_oPnlDEFAS .bSetValue( roCmdOPT.m_osDEFAS ); m_oPnlDTMIN .bSetValue( roCmdOPT.m_osDTMIN ); m_oPnlDTRATIO .bSetValue( roCmdOPT.m_osDTRATIO ); m_oPnlFLOOR .bSetValue( roCmdOPT.m_osFLOOR ); m_oPnlGMIN .bSetValue( roCmdOPT.m_osGMIN ); m_oPnlHARMS .bSetValue( roCmdOPT.m_osHARMS ); m_oPnlITERMIN .bSetValue( roCmdOPT.m_osITERMIN ); m_oPnlITL1 .bSetValue( roCmdOPT.m_osITL1 ); m_oPnlITL3 .bSetValue( roCmdOPT.m_osITL3 ); m_oPnlITL4 .bSetValue( roCmdOPT.m_osITL4 ); m_oPnlITL7 .bSetValue( roCmdOPT.m_osITL7 ); m_oPnlITL8 .bSetValue( roCmdOPT.m_osITL8 ); m_oPnlRECURS .bSetValue( roCmdOPT.m_osRECURS ); m_oPnlRELTOL .bSetValue( roCmdOPT.m_osRELTOL ); m_oPnlROUND .bSetValue( roCmdOPT.m_osROUND ); m_oPnlSHORT .bSetValue( roCmdOPT.m_osSHORT ); m_oPnlTEMP .bSetValue( roCmdOPT.m_osTEMP ); m_oPnlTNOM .bSetValue( roCmdOPT.m_osTNOM ); m_oPnlTRANSITS.bSetValue( roCmdOPT.m_osTRANSITS ); m_oPnlTRREJECT.bSetValue( roCmdOPT.m_osTRREJECT ); m_oPnlTRSTEPG .bSetValue( roCmdOPT.m_osTRSTEPG ); m_oPnlTRSTEPH .bSetValue( roCmdOPT.m_osTRSTEPH ); m_oPnlTRSTEPS .bSetValue( roCmdOPT.m_osTRSTEPS ); m_oPnlTRTOL .bSetValue( roCmdOPT.m_osTRTOL ); m_oPnlVFLOOR .bSetValue( roCmdOPT.m_osVFLOOR ); m_oPnlVMAX .bSetValue( roCmdOPT.m_osVMAX ); m_oPnlVMIN .bSetValue( roCmdOPT.m_osVMIN ); m_oPnlVNTOL .bSetValue( roCmdOPT.m_osVNTOL ); m_oCbxBYPASS . SetValue( roCmdOPT.m_bBYPASS ); m_oCbxCSTRAY . SetValue( roCmdOPT.m_bCSTRAY ); m_oCbxFBBYPASS. SetValue( roCmdOPT.m_bFBBYPASS ); m_oCbxINCMODE . SetValue( roCmdOPT.m_bINCMODE ); m_oCbxLUBYPASS. SetValue( roCmdOPT.m_bLUBYPASS ); m_oCbxOPTS . SetValue( roCmdOPT.m_bOPTS ); m_oCbxQUITCONV. SetValue( roCmdOPT.m_bQUITCONV ); m_oCbxRSTRAY . SetValue( roCmdOPT.m_bRSTRAY ); m_oCbxTRACEL . SetValue( roCmdOPT.m_bTRACEL ); for( ui1=0; ui1bSetValue( rosValue ) ) return( false ); // Create the OPTIONS command string m_oCmdOPT.bFormat( ); return( true ); } //************************************************************************************************** // Get a value panel control's value. // // Argument List : // iPnlID - Value panel control identifier // // Return Values : // Success - The panel value // Failure - 0.0 const wxString & DlgGcpCfgOPT::rosGetValue( int iPnlID ) { static wxString osEmpty; PnlValue * poPnlValue; poPnlValue = poGetPanel( iPnlID ); if( poPnlValue == NULL ) return( osEmpty ); return( poPnlValue->rosGetValue( ) ); } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // Ok button event handler. // // Argument List : // roEvtCmd - An object holding information about the event (not used) void DlgGcpCfgOPT::OnBtnOk( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { GetValues( m_oCmdOPT ); EndModal( wxID_OK ); } //************************************************************************************************** // Defaults button event handler. // // Argument List : // roEvtCmd - An object holding information about the event (not used) void DlgGcpCfgOPT::OnBtnDefaults( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { CmdGnuCapOPT oCmdOPT; oCmdOPT.bSetDefaults( ); SetValues( oCmdOPT ); } //************************************************************************************************** // Cancel button event handler. // // Argument List : // roEvtCmd - An object holding information about the event (not used) void DlgGcpCfgOPT::OnBtnCancel( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { SetValues( m_oCmdOPT ); EndModal( wxID_CANCEL ); } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/gnucap/dialogs/DlgGcpCfgGEN.cpp0000644000000000000000000003572012456735674021354 0ustar rootroot//************************************************************************************************** // DlgGcpCfgGEN.cpp * // ------------------ * // Started : 2004-02-27 * // Last Update : 2015-01-18 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "DlgGcpCfgGEN.hpp" //************************************************************************************************** // Implement an event table. wxBEGIN_EVENT_TABLE( DlgGcpCfgGEN, wxDialog ) EVT_BUTTON( ID_BTN_OK, DlgGcpCfgGEN::OnBtnOk ) EVT_BUTTON( ID_BTN_CLEAR, DlgGcpCfgGEN::OnBtnClear ) EVT_BUTTON( ID_BTN_CANCEL, DlgGcpCfgGEN::OnBtnCancel ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. // // Argument List : // poWin - A pointer to the dialog parent window DlgGcpCfgGEN::DlgGcpCfgGEN( wxWindow * poWin ) : wxDialog( poWin, -1, wxT(""), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE, wxDialogNameStr ) { SetTitle( wxT("Generator Setup") ); Initialize( ); bClear( ); } //************************************************************************************************** // Destructor. DlgGcpCfgGEN::~DlgGcpCfgGEN( ) { } //************************************************************************************************** // Initialize object attributes. void DlgGcpCfgGEN::Initialize( void ) { // Call all the initialization functions Create( ); ToolTips( ); // Layout the of the display objects DoLayout( ); } //************************************************************************************************** // Create the display objects. void DlgGcpCfgGEN::Create( void ) { wxPanel * poPnlOvrAll, * poPnlSine, * poPnlPulse, * poPnlBtns; int iWdName=115, iWdValue=95, iWdUnits=75; // Create the various underlying panel objects poPnlOvrAll = new wxPanel( this ); poPnlSine = new wxPanel( this ); poPnlPulse = new wxPanel( this ); poPnlBtns = new wxPanel( this ); // Create the overall panel and controls m_oPnlAmplitude.bCreate( poPnlOvrAll, ID_PNL_AMPLITUDE, iWdName, iWdValue, iWdUnits ); m_oPnlOffset .bCreate( poPnlOvrAll, ID_PNL_OFFSET, iWdName, iWdValue, iWdUnits ); m_oPnlAmplitude.bSetName( wxT("Amplitude") ); m_oPnlOffset .bSetName( wxT("DC Offset") ); m_oPnlAmplitude.bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlOffset .bSetUnitsType( eUNITS_VOLT ); // Create the sine wave panel and controls m_oPnlSinFreq .bCreate( poPnlSine, ID_PNL_SIN_FREQ, iWdName, iWdValue, iWdUnits ); m_oPnlSinPhase.bCreate( poPnlSine, ID_PNL_SIN_PHASE, iWdName, iWdValue, iWdUnits ); m_oPnlSinFreq .bSetName( wxT("Frequency") ); m_oPnlSinPhase.bSetName( wxT("Initial Phase") ); m_oPnlSinFreq .bSetUnitsType( eUNITS_FREQ ); m_oPnlSinPhase.bSetUnitsType( eUNITS_PHAD ); m_oPnlSinFreq .bSetSpnRange( 0.0, 1000.0 ); m_oPnlSinFreq .bSetUnits( wxT("Hz") ); m_oPnlSinPhase.bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlSinPhase.bSetUnits( wxT("Degree") ); // Create the pulse panel and controls m_oPnlPulInitial.bCreate( poPnlPulse, ID_PNL_PUL_INITIAL, iWdName, iWdValue, iWdUnits ); m_oPnlPulMin .bCreate( poPnlPulse, ID_PNL_PUL_MIN, iWdName, iWdValue, iWdUnits ); m_oPnlPulMax .bCreate( poPnlPulse, ID_PNL_PUL_MAX, iWdName, iWdValue, iWdUnits ); m_oPnlPulDelay .bCreate( poPnlPulse, ID_PNL_PUL_DELAY, iWdName, iWdValue, iWdUnits ); m_oPnlPulRise .bCreate( poPnlPulse, ID_PNL_PUL_RISE, iWdName, iWdValue, iWdUnits ); m_oPnlPulWidth .bCreate( poPnlPulse, ID_PNL_PUL_WIDTH, iWdName, iWdValue, iWdUnits ); m_oPnlPulFall .bCreate( poPnlPulse, ID_PNL_PUL_FALL, iWdName, iWdValue, iWdUnits ); m_oPnlPulPeriod .bCreate( poPnlPulse, ID_PNL_PUL_PERIOD, iWdName, iWdValue, iWdUnits ); m_oPnlPulInitial.bSetName( wxT("Initial Value") ); m_oPnlPulMin .bSetName( wxT("Min Level") ); m_oPnlPulMax .bSetName( wxT("Max Level") ); m_oPnlPulDelay .bSetName( wxT("Initial Delay") ); m_oPnlPulRise .bSetName( wxT("Rise Time") ); m_oPnlPulWidth .bSetName( wxT("Pulse Width") ); m_oPnlPulFall .bSetName( wxT("Fall Time") ); m_oPnlPulPeriod .bSetName( wxT("Period") ); m_oPnlPulInitial.bSetUnitsType( eUNITS_VOLT ); m_oPnlPulMin .bSetUnitsType( eUNITS_VOLT ); m_oPnlPulMax .bSetUnitsType( eUNITS_VOLT ); m_oPnlPulDelay .bSetUnitsType( eUNITS_TIME ); m_oPnlPulRise .bSetUnitsType( eUNITS_TIME ); m_oPnlPulWidth .bSetUnitsType( eUNITS_TIME ); m_oPnlPulFall .bSetUnitsType( eUNITS_TIME ); m_oPnlPulPeriod .bSetUnitsType( eUNITS_TIME ); // Create the buttons panel and the button controls m_oBtnOk .Create( poPnlBtns, ID_BTN_OK , wxT("OK") ); m_oBtnClear .Create( poPnlBtns, ID_BTN_CLEAR , wxT("Clear") ); m_oBtnCancel.Create( poPnlBtns, ID_BTN_CANCEL, wxT("Cancel") ); } //************************************************************************************************** // Initialize the tool tips. void DlgGcpCfgGEN::ToolTips( void ) { m_oPnlAmplitude .SetToolTip( wxT("The overall amplitude of the sine wave and the pulse train") ); m_oPnlOffset .SetToolTip( wxT("The DC offset applied to the entire signal") ); m_oPnlSinFreq .SetToolTip( wxT("The frequency of the sine wave generator for a Transient analysis") ); m_oPnlSinPhase .SetToolTip( wxT("The phase of the sine wave at startup") ); m_oPnlPulInitial.SetToolTip( wxT("The initial value of the source") ); m_oPnlPulMin .SetToolTip( wxT("The 'OFF' value for the pulse train") ); m_oPnlPulMax .SetToolTip( wxT("The 'ON' value for the pulse train") ); m_oPnlPulDelay .SetToolTip( wxT("The time until the first pulse") ); m_oPnlPulRise .SetToolTip( wxT("The time taken to go from 0 to the pulsed value") ); m_oPnlPulWidth .SetToolTip( wxT("The width of each pulse") ); m_oPnlPulFall .SetToolTip( wxT("The time taken to go from the pulsed value to 0") ); m_oPnlPulPeriod .SetToolTip( wxT("The period of the pulse train") ); } //************************************************************************************************** // Layout the dialog display objects. void DlgGcpCfgGEN::DoLayout( void ) { wxBoxSizer * poSzrDlg; wxPanel * poPnlOvrAll, * poPnlSine, * poPnlPulse, * poPnlBtns; wxBoxSizer * poSzrOvrAll, * poSzrSine, * poSzrPulse, * poSzrBtns; wxSizerFlags oFlags; // Get pointers to the various panels poPnlOvrAll = (wxPanel *) m_oPnlAmplitude .GetParent( ); poPnlSine = (wxPanel *) m_oPnlSinFreq .GetParent( ); poPnlPulse = (wxPanel *) m_oPnlPulInitial.GetParent( ); poPnlBtns = (wxPanel *) m_oBtnOk .GetParent( ); // Create sizers to associate with the panels poSzrDlg = new wxBoxSizer ( wxVERTICAL ); poSzrOvrAll = new wxStaticBoxSizer( wxVERTICAL, poPnlOvrAll, wxT(" Overall ") ); poSzrSine = new wxStaticBoxSizer( wxVERTICAL, poPnlSine , wxT(" Sinusoid ") ); poSzrPulse = new wxStaticBoxSizer( wxVERTICAL, poPnlPulse , wxT(" Pulse ") ); poSzrBtns = new wxBoxSizer ( wxHORIZONTAL ); // Set the sizers to the panels SetSizer( poSzrDlg ); poPnlOvrAll->SetSizer( poSzrOvrAll ); poPnlSine ->SetSizer( poSzrSine ); poPnlPulse ->SetSizer( poSzrPulse ); poPnlBtns ->SetSizer( poSzrBtns ); // Layout the Overall panel oFlags.Align( wxALIGN_LEFT ); oFlags.Border( wxTOP | wxLEFT | wxRIGHT, 10 ); poSzrOvrAll->Add( &m_oPnlAmplitude, oFlags ); oFlags.Border( wxLEFT | wxBOTTOM , 10 ); poSzrOvrAll->Add( &m_oPnlOffset , oFlags ); // Layout the Sinusoid panel oFlags.Border( wxTOP | wxLEFT | wxRIGHT, 10 ); poSzrSine->Add( &m_oPnlSinFreq , oFlags ); oFlags.Border( wxLEFT | wxBOTTOM , 10 ); poSzrSine->Add( &m_oPnlSinPhase, oFlags ); // Layout the Pulse panel oFlags.Border( wxTOP | wxLEFT | wxRIGHT, 10 ); poSzrPulse->Add( &m_oPnlPulInitial, oFlags ); oFlags.Border( wxLEFT | wxRIGHT , 10 ); poSzrPulse->Add( &m_oPnlPulMin , oFlags ); poSzrPulse->Add( &m_oPnlPulMax , oFlags ); poSzrPulse->Add( &m_oPnlPulDelay , oFlags ); poSzrPulse->Add( &m_oPnlPulRise , oFlags ); poSzrPulse->Add( &m_oPnlPulWidth , oFlags ); poSzrPulse->Add( &m_oPnlPulFall , oFlags ); oFlags.Border( wxLEFT | wxBOTTOM , 10 ); poSzrPulse->Add( &m_oPnlPulPeriod , oFlags ); // Layout the button panel oFlags.Align( wxALIGN_RIGHT ); oFlags.Border( wxTOP | wxBOTTOM, 10 ); poSzrBtns->Add( &m_oBtnOk , oFlags ); poSzrBtns->AddSpacer( 10 ); oFlags.Align( wxALIGN_CENTER ); poSzrBtns->Add( &m_oBtnClear , oFlags ); poSzrBtns->AddSpacer( 10 ); oFlags.Align( wxALIGN_LEFT ); poSzrBtns->Add( &m_oBtnCancel, oFlags ); // Layout the underlying dialog oFlags.Align( wxALIGN_CENTER ); oFlags.Border( wxTOP | wxLEFT | wxRIGHT, 15 ); poSzrDlg->Add( poPnlOvrAll, oFlags ); poSzrDlg->Add( poPnlSine , oFlags ); oFlags.Border( wxALL , 15 ); poSzrDlg->Add( poPnlPulse , oFlags ); oFlags.Border( wxBOTTOM , 15 ); poSzrDlg->Add( poPnlBtns , oFlags ); // Set dialogues minimum size and initial size as calculated by the sizer poSzrOvrAll->SetSizeHints( poPnlOvrAll ); poSzrSine ->SetSizeHints( poPnlSine ); poSzrPulse ->SetSizeHints( poPnlPulse ); poSzrBtns ->SetSizeHints( poPnlBtns ); poSzrDlg ->SetSizeHints( this ); } //************************************************************************************************** // Set the values in the value panel controls. // // Argument List : // roCmdGEN - A reference to a GENERATOR command object void DlgGcpCfgGEN::SetValues( CmdGnuCapGEN & roCmdGEN ) { SetEvtHandlerEnabled( false ); m_oPnlAmplitude .bSetValue( roCmdGEN.m_osAmplitude ); m_oPnlOffset .bSetValue( roCmdGEN.m_osOffset ); m_oPnlSinFreq .bSetValue( roCmdGEN.m_osSinFreq ); m_oPnlSinPhase .bSetValue( roCmdGEN.m_osSinPhase ); m_oPnlPulInitial.bSetValue( roCmdGEN.m_osPulInitial ); m_oPnlPulMin .bSetValue( roCmdGEN.m_osPulMin ); m_oPnlPulMax .bSetValue( roCmdGEN.m_osPulMax ); m_oPnlPulDelay .bSetValue( roCmdGEN.m_osPulDelay ); m_oPnlPulRise .bSetValue( roCmdGEN.m_osPulRise ); m_oPnlPulWidth .bSetValue( roCmdGEN.m_osPulWidth ); m_oPnlPulFall .bSetValue( roCmdGEN.m_osPulFall ); m_oPnlPulPeriod .bSetValue( roCmdGEN.m_osPulPeriod ); SetEvtHandlerEnabled( true ); } //************************************************************************************************** // Get the values from the value panel controls. // // Argument List : // roCmdGEN - A reference to a GENERATOR command object void DlgGcpCfgGEN::GetValues( CmdGnuCapGEN & roCmdGEN ) { SetEvtHandlerEnabled( false ); roCmdGEN.m_osAmplitude = m_oPnlAmplitude .rosGetValue( ); roCmdGEN.m_osOffset = m_oPnlOffset .rosGetValue( ); roCmdGEN.m_osSinFreq = m_oPnlSinFreq .rosGetValue( ); roCmdGEN.m_osSinPhase = m_oPnlSinPhase .rosGetValue( ); roCmdGEN.m_osPulInitial = m_oPnlPulInitial.rosGetValue( ); roCmdGEN.m_osPulMin = m_oPnlPulMin .rosGetValue( ); roCmdGEN.m_osPulMax = m_oPnlPulMax .rosGetValue( ); roCmdGEN.m_osPulDelay = m_oPnlPulDelay .rosGetValue( ); roCmdGEN.m_osPulRise = m_oPnlPulRise .rosGetValue( ); roCmdGEN.m_osPulWidth = m_oPnlPulWidth .rosGetValue( ); roCmdGEN.m_osPulFall = m_oPnlPulFall .rosGetValue( ); roCmdGEN.m_osPulPeriod = m_oPnlPulPeriod .rosGetValue( ); roCmdGEN.bFormat( ); SetEvtHandlerEnabled( true ); } //************************************************************************************************** // Reset all dialog settings to defaults. // // Return Values : // true - Success // false - Failure bool DlgGcpCfgGEN::bClear( void ) { m_oCmdGEN.bSetDefaults( ); SetValues( m_oCmdGEN ); return( true ); } //************************************************************************************************** // Set the values in the value panel controls. // // Argument List : // roCmdGEN - A reference to a GENERATOR command object // // Return Values : // true - Success // false - Failure bool DlgGcpCfgGEN::bSetValues( CmdGnuCapGEN & roCmdGEN ) { SetValues( roCmdGEN ); m_oCmdGEN = roCmdGEN; return( true ); } //************************************************************************************************** // Get the values from the value panel controls. // // Argument List : // roCmdGEN - A reference to a GENERATOR command object // // Return Values : // true - Success // false - Failure bool DlgGcpCfgGEN::bGetValues( CmdGnuCapGEN & roCmdGEN ) { GetValues( roCmdGEN ); return( true ); } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // OK button event handler. // // Argument List : // roEvtCmd - An object holding information about the event (not used) void DlgGcpCfgGEN::OnBtnOk( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { GetValues( m_oCmdGEN ); EndModal( wxID_OK ); } //************************************************************************************************** // Clear button event handler. // // Argument List : // roEvtCmd - An object holding information about the event (not used) void DlgGcpCfgGEN::OnBtnClear( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { CmdGnuCapGEN oCmdGEN; oCmdGEN.bSetDefaults( ); SetValues( oCmdGEN ); } //************************************************************************************************** // Cancel button event handler. // // Argument List : // roEvtCmd - An object holding information about the event (not used) void DlgGcpCfgGEN::OnBtnCancel( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { SetValues( m_oCmdGEN ); EndModal( wxID_CANCEL ); } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/gnucap/dialogs/DlgGcpCfgGEN.hpp0000644000000000000000000001027512452506021021331 0ustar rootroot//************************************************************************************************** // DlgGcpCfgGEN.hpp * // ------------------ * // Description : This dialogue is used to enter values associated with a GNU-Cap generator command * // line. It is used for Transient and Fourier analysis. * // Started : 2004-02-27 * // Last Update : 2015-01-05 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef DLGGCPCFGGEN_HPP #define DLGGCPCFGGEN_HPP // Application Includes #include "TypeDefs.hpp" #include "utility/PnlValue.hpp" #include "gnucap/commands/CmdGnuCapGEN.hpp" // wxWidgets Includes #include //************************************************************************************************** class DlgGcpCfgGEN : public wxDialog { private : // Value panel controls for overall source characteristics PnlValue m_oPnlAmplitude; PnlValue m_oPnlOffset; // Value panel controls for a sinusoidal source PnlValue m_oPnlSinFreq; PnlValue m_oPnlSinPhase; // Value panel controls for a pulse source PnlValue m_oPnlPulInitial; PnlValue m_oPnlPulMin; PnlValue m_oPnlPulMax; PnlValue m_oPnlPulDelay; PnlValue m_oPnlPulRise; PnlValue m_oPnlPulWidth; PnlValue m_oPnlPulFall; PnlValue m_oPnlPulPeriod; // Button controls wxButton m_oBtnOk; wxButton m_oBtnClear; wxButton m_oBtnCancel; // Generator command object CmdGnuCapGEN m_oCmdGEN; // Object initialization functions void Initialize( void ); void Create ( void ); void ToolTips ( void ); void DoLayout ( void ); void SetValues( CmdGnuCapGEN & roCmdGEN ); void GetValues( CmdGnuCapGEN & roCmdGEN ); public : DlgGcpCfgGEN( wxWindow * poWin ); ~DlgGcpCfgGEN( ); bool bClear( void ); bool bSetValues( CmdGnuCapGEN & roCmdGEN ); bool bGetValues( CmdGnuCapGEN & roCmdGEN ); // Event handlers void OnBtnOk ( wxCommandEvent & roEvtCmd ); void OnBtnClear ( wxCommandEvent & roEvtCmd ); void OnBtnCancel( wxCommandEvent & roEvtCmd ); // In order to be able to react to a menu command, it must be given a // unique identifier such as a const or an enum. enum eDlgItemID { ID_PNL_AMPLITUDE = 0, ID_PNL_OFFSET, ID_PNL_SIN_FREQ, ID_PNL_SIN_PHASE, ID_PNL_PUL_INITIAL, ID_PNL_PUL_MIN, ID_PNL_PUL_MAX, ID_PNL_PUL_DELAY, ID_PNL_PUL_RISE, ID_PNL_PUL_WIDTH, ID_PNL_PUL_FALL, ID_PNL_PUL_PERIOD, ID_BTN_OK, ID_BTN_CLEAR, ID_BTN_CANCEL, ID_UNUSED, // Assigned to controls for which events are not used ID_PNL_FST = ID_PNL_AMPLITUDE, ID_PNL_LST = ID_PNL_PUL_PERIOD, ID_FST = ID_PNL_AMPLITUDE, ID_LST = ID_BTN_CANCEL }; // Leave this as the last line as private access is envoked by macro wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // DLGGCPCFGGEN_HPP gspiceui-1.1.00+dfsg/src/gnucap/dialogs/DlgGcpCfgOPT.hpp0000644000000000000000000001452712463162426021377 0ustar rootroot//************************************************************************************************** // DlgGcpCfgOPT.hpp * // ------------------ * // Description : This dialogue is used to enter values associated with the GNU-Cap OPTIONS * // command. * // Started : 2006-09-14 * // Last Update : 2015-01-31 * // Copyright : (C) 2006 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef DLGGCPCFGOPT_HPP #define DLGGCPCFGOPT_HPP // Application Includes #include "TypeDefs.hpp" #include "utility/PnlValue.hpp" #include "utility/PnlLblCho.hpp" #include "gnucap/commands/CmdGnuCapOPT.hpp" #include "base/NbkSimEngBase.hpp" // wxWidgets Includes #include //************************************************************************************************** class DlgGcpCfgOPT : public wxDialog { private : // Value panel controls (for float values) PnlValue m_oPnlABSTOL; PnlValue m_oPnlCHGTOL; PnlValue m_oPnlDAMPMAX; PnlValue m_oPnlDAMPMIN; PnlValue m_oPnlDEFL; PnlValue m_oPnlDEFW; PnlValue m_oPnlDEFAD; PnlValue m_oPnlDEFAS; PnlValue m_oPnlDTMIN; PnlValue m_oPnlDTRATIO; PnlValue m_oPnlFLOOR; PnlValue m_oPnlGMIN; PnlValue m_oPnlRELTOL; PnlValue m_oPnlROUND; PnlValue m_oPnlSHORT; PnlValue m_oPnlTEMP; PnlValue m_oPnlTNOM; PnlValue m_oPnlTRREJECT; PnlValue m_oPnlTRSTEPG; PnlValue m_oPnlTRSTEPH; PnlValue m_oPnlTRSTEPS; PnlValue m_oPnlTRTOL; PnlValue m_oPnlVFLOOR; PnlValue m_oPnlVMAX; PnlValue m_oPnlVMIN; PnlValue m_oPnlVNTOL; // Value panel controls (for integer values) PnlValue m_oPnlDAMPST; PnlValue m_oPnlHARMS; PnlValue m_oPnlITL1; PnlValue m_oPnlITL3; PnlValue m_oPnlITL4; PnlValue m_oPnlITL7; PnlValue m_oPnlITL8; PnlValue m_oPnlITERMIN; PnlValue m_oPnlRECURS; PnlValue m_oPnlTRANSITS; // Value panel controls (for string values) PnlLblCho m_oChoMETHOD; PnlLblCho m_oChoMODE; PnlLblCho m_oChoORDER; // Value panel controls (for boolean values) wxCheckBox m_oCbxBYPASS; wxCheckBox m_oCbxCSTRAY; wxCheckBox m_oCbxFBBYPASS; wxCheckBox m_oCbxINCMODE; wxCheckBox m_oCbxLUBYPASS; wxCheckBox m_oCbxOPTS; wxCheckBox m_oCbxQUITCONV; wxCheckBox m_oCbxRSTRAY; wxCheckBox m_oCbxTRACEL; // Button controls wxButton m_oBtnOk; wxButton m_oBtnCancel; wxButton m_oBtnDefaults; // OPTIONS command object CmdGnuCapOPT m_oCmdOPT; // Object initialization functions void Initialize( void ); void Create ( void ); void ToolTips ( void ); void DoLayout ( void ); PnlValue * poGetPanel( int iPnlID ); void SetValues( CmdGnuCapOPT & roCmdOPT ); void GetValues( CmdGnuCapOPT & roCmdOPT ); public : DlgGcpCfgOPT( wxWindow * poWin ); ~DlgGcpCfgOPT( ); bool bClear( void ); bool bSetValues( CmdGnuCapOPT & roCmdOPT ); bool bGetValues( CmdGnuCapOPT & roCmdOPT ); bool bSetValue( int iPnlID, const wxString & rosValue ); const wxString & rosGetValue( int iPnlID ); // Event handlers void OnBtnOk ( wxCommandEvent & roEvtCmd ); void OnBtnDefaults( wxCommandEvent & roEvtCmd ); void OnBtnCancel ( wxCommandEvent & roEvtCmd ); // In order to be able to react to a menu command, it must be given a // unique identifier such as a const or an enum. enum eDlgItemID { ID_PNL_ABSTOL = 0, ID_PNL_CHGTOL , ID_PNL_DAMPMAX , ID_PNL_DAMPMIN , ID_PNL_DAMPST , ID_PNL_DEFL , ID_PNL_DEFW , ID_PNL_DEFAD , ID_PNL_DEFAS , ID_PNL_DTMIN , ID_PNL_DTRATIO , ID_PNL_FLOOR , ID_PNL_GMIN , ID_PNL_HARMS , ID_PNL_ITERMIN , ID_PNL_ITL1 , ID_PNL_ITL3 , ID_PNL_ITL4 , ID_PNL_ITL7 , ID_PNL_ITL8 , ID_PNL_RECURS , ID_PNL_RELTOL , ID_PNL_ROUND , ID_PNL_SHORT , ID_PNL_TEMP , ID_PNL_TNOM , ID_PNL_TRANSITS, ID_PNL_TRREJECT, ID_PNL_TRSTEPG , ID_PNL_TRSTEPH , ID_PNL_TRSTEPS , ID_PNL_TRTOL , ID_PNL_VFLOOR , ID_PNL_VMAX , ID_PNL_VMIN , ID_PNL_VNTOL , ID_CHO_METHOD , ID_CHO_MODE , ID_CHO_ORDER , ID_CBX_BYPASS , ID_CBX_CSTRAY , ID_CBX_FBBYPASS, ID_CBX_INCMODE , ID_CBX_LUBYPASS, ID_CBX_OPTS , ID_CBX_QUITCONV, ID_CBX_RSTRAY , ID_CBX_TRACEL , ID_BTN_OK , ID_BTN_DEFAULTS, ID_BTN_CANCEL , ID_UNUSED , // Assigned to controls for which events are not used ID_FST = ID_PNL_ABSTOL, ID_LST = ID_BTN_CANCEL }; // Leave this as the last line as private access is envoked by macro wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // DLGGCPCFGOPT_HPP gspiceui-1.1.00+dfsg/src/gnucap/NbkGnuCap.hpp0000644000000000000000000000616112513451563017414 0ustar rootroot//************************************************************************************************** // NbkGnuCap.hpp * // --------------- * // Description : Provides a container class for the analysis configuration panels for the * // different analyses provided by GNU-Cap electronic circuit simulator. * // Started : 2003-09-05 * // Last Update : 2015-04-15 * // Copyright : (C) 2003 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef NBKGNUCAP_HPP #define NBKGNUCAP_HPP // Application Includes #include "TypeDefs.hpp" #include "base/NbkSimEngBase.hpp" #include "gnucap/dialogs/DlgGcpCfgOPT.hpp" #include "gnucap/panels/PnlGnuCapOP.hpp" #include "gnucap/panels/PnlGnuCapDC.hpp" #include "gnucap/panels/PnlGnuCapAC.hpp" #include "gnucap/panels/PnlGnuCapTR.hpp" #include "gnucap/panels/PnlGnuCapFO.hpp" //************************************************************************************************** class NbkGnuCap : public NbkSimEngBase { private: // Analysis pages PnlGnuCapOP * m_poPnlGnuCapOP; PnlGnuCapDC * m_poPnlGnuCapDC; PnlGnuCapAC * m_poPnlGnuCapAC; PnlGnuCapTR * m_poPnlGnuCapTR; // PnlGnuCapFO * m_poPnlGnuCapFO; // OPTIONS line setup dialog DlgGcpCfgOPT m_oDlgCfgOPT; public: NbkGnuCap( wxWindow * poParent, wxWindowID oWinID ); ~NbkGnuCap( ); bool bClear( void ); bool bLoad( const SimnBase & roSimn ); bool bSave( SimnBase & roSimn ); bool bSetPage( eTypeCmd eAnalysis ); bool bSetPage( const wxString & rosAnalysis ); const wxString & rosGetPage( void ); eTypeCmd eGetPage( void ); // Event handlers void OnPageChangd( wxNotebookEvent & roEvtNbk ); void OnBtnOptions( wxCommandEvent & roEvtCmd ); // Leave this as the last line as private access is envoked by macro wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // NBKGNUCAP_HPP gspiceui-1.1.00+dfsg/src/gnucap/NbkGnuCap.cpp0000644000000000000000000003216212513452247017407 0ustar rootroot//************************************************************************************************** // NbkGnuCap.cpp * // --------------- * // Started : 2003-09-05 * // Last Update : 2015-04-15 * // Copyright : (C) 2003 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "NbkGnuCap.hpp" //************************************************************************************************** // Implement an event table. wxBEGIN_EVENT_TABLE( NbkGnuCap, NbkSimEngBase ) EVT_NOTEBOOK_PAGE_CHANGED( -1, NbkGnuCap::OnPageChangd ) EVT_BUTTON( PnlAnaBase::ID_BTN_OPTIONS, NbkGnuCap::OnBtnOptions ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. // // Arguments: // poParent - The parent window // oWinID - The display object ID // roPosn - The notebook position // roSize - The notebook size NbkGnuCap::NbkGnuCap( wxWindow * poParent, wxWindowID oWinID ) : NbkSimEngBase( poParent, oWinID ), m_oDlgCfgOPT( poParent ) { // Set the simulator engine type specifier m_eSimEng = eSIMR_GNUCAP; // Create the various display objects m_poPnlGnuCapOP = new PnlGnuCapOP( this ); m_poPnlGnuCapDC = new PnlGnuCapDC( this ); m_poPnlGnuCapAC = new PnlGnuCapAC( this ); m_poPnlGnuCapTR = new PnlGnuCapTR( this ); // m_poPnlGnuCapFO = new PnlGnuCapFO( this ); // Add the display objects to the note book AddPage( m_poPnlGnuCapOP, wxT( " Quiescent " ) ); AddPage( m_poPnlGnuCapDC, wxT( " DC " ) ); AddPage( m_poPnlGnuCapAC, wxT( " AC " ) ); AddPage( m_poPnlGnuCapTR, wxT( " Transient " ) ); // AddPage( m_poPnlGnuCapFO, wxT( " Fourier " ) ); // Specify the default page to be displayed SetSelection( 0 ); } //************************************************************************************************** // Destructor. NbkGnuCap::~NbkGnuCap( ) { } //************************************************************************************************** // Clear the object attributes. // // Return Values: // true - Success // false - Failure bool NbkGnuCap::bClear( void ) { bool bRtn=true; // Clear the base class if( ! NbkSimEngBase ::bClear( ) ) bRtn = false; if( ! m_poPnlGnuCapOP->bClear( ) ) bRtn = false; if( ! m_poPnlGnuCapDC->bClear( ) ) bRtn = false; if( ! m_poPnlGnuCapAC->bClear( ) ) bRtn = false; if( ! m_poPnlGnuCapTR->bClear( ) ) bRtn = false; // if( ! m_poPnlGnuCapFO->bClear( ) ) bRtn = false; if( ! m_oDlgCfgOPT .bClear( ) ) bRtn = false; return( bRtn ); } //************************************************************************************************** // Load information from a simulation object. // // Argument List: // roSimn - The simulation object // // Return Values: // true - Success // false - Failure bool NbkGnuCap::bLoad( const SimnBase & roSimn ) { bool bRtn=true; size_t sz1; if( roSimn.eGetSimEng( ) != eSIMR_GNUCAP ) return( false ); PnlAnaBase::m_oCpntSwpSrc = roSimn.m_oCpntSwpSrc; SimnGnuCap & roSimnGcp = (SimnGnuCap &) roSimn; if( ! bSetPage( roSimnGcp.eGetAnaType( ) ) ) bRtn = false; sz1 = 0; if( m_poPnlGnuCapOP->bLoad( roSimnGcp ) ) sz1++; if( m_poPnlGnuCapDC->bLoad( roSimnGcp ) ) sz1++; if( m_poPnlGnuCapAC->bLoad( roSimnGcp ) ) sz1++; if( m_poPnlGnuCapTR->bLoad( roSimnGcp ) ) sz1++; // if( m_poPnlGnuCapFO->bLoad( roSimnGcp ) ) sz1++; if( sz1 == 0 ) bRtn = false; if( ! m_oDlgCfgOPT.bSetValues( roSimnGcp.m_oCmdOPT ) ) bRtn = false; return( bRtn ); } //************************************************************************************************** // Save information to a simulation object. // // Argument List: // roSimn - The simulation object // // Return Values: // true - Success // false - Failure bool NbkGnuCap::bSave( SimnBase & roSimn ) { wxString os1; // Only proceed if this is an GNU-Cap simulation object if( roSimn.eGetSimEng( ) != eSIMR_GNUCAP ) return( false ); SimnGnuCap & roSimnGcp = (SimnGnuCap &) roSimn; // Clear the error string NbkSimEngBase::m_osErrMsg.Empty( ); // Create the analysis command/s switch( GetSelection( ) ) { case 0 : // OP analysis if( m_poPnlGnuCapOP->bSave( roSimnGcp ) ) os1.Empty( ); else SetErrMsg( m_poPnlGnuCapOP->rosGetErrMsg( ) ); break; case 1 : // DC analysis if( m_poPnlGnuCapDC->bSave( roSimnGcp ) ) os1 = roSimnGcp.m_oCmdDC.m_osTempC; else SetErrMsg( m_poPnlGnuCapDC->rosGetErrMsg( ) ); break; case 2 : // AC analysis if( m_poPnlGnuCapAC->bSave( roSimnGcp ) ) os1 = roSimnGcp.m_oCmdAC.m_osTempC; else SetErrMsg( m_poPnlGnuCapAC->rosGetErrMsg( ) ); break; case 3 : // TR analysis if( m_poPnlGnuCapTR->bSave( roSimnGcp ) ) os1 = roSimnGcp.m_oCmdTR.m_osTempC; else SetErrMsg( m_poPnlGnuCapTR->rosGetErrMsg( ) ); break; // case 4 : // FO analysis // if( m_poPnlGnuCapFO->bSave( roSimnGcp ) ) // os1 = roSimnGcp.m_oCmdFO.m_osTempC; // else SetErrMsg( m_poPnlGnuCapFO->rosGetErrMsg( ) ); // break; default: return( false ); } if( ! bIsOk( ) ) return( false ); // Create the OPTIONS command m_oDlgCfgOPT.bGetValues( roSimnGcp.m_oCmdOPT ); if( ! os1.IsEmpty( ) ) roSimnGcp.m_oCmdOPT.m_osTEMP = os1; roSimnGcp.m_oCmdOPT.bFormat( ); if( ! roSimnGcp.m_oCmdOPT.bIsValid( ) ) { os1 = wxT("OPTIONS command fault :\n\n "); SetErrMsg( os1 + roSimnGcp.m_oCmdOPT.rosGetErrMsg( ) ); return( false ); } return( true ); } //************************************************************************************************** // Set the page to be displayed. // // Argument List: // eCmdType - The enumerated analysis type specifier // // Return Values: // true - Success // false - Failure bool NbkGnuCap::bSetPage( eTypeCmd eAnalysis ) { int iPage; switch( eAnalysis ) { case eCMD_OP : iPage = 0; break; case eCMD_DC : iPage = 1; break; case eCMD_AC : iPage = 2; break; case eCMD_TR : iPage = 3; break; // case eCMD_FO : iPage = 4; break; default : return( false ); } SetSelection( iPage ); // Specify the page to be displayed return( true ); } //************************************************************************************************** // Set the page to be displayed. // // Argument List: // rosAnalysis - The two letter analysis type specifier (case ignored) // // Return Values: // true - Success // false - Failure bool NbkGnuCap::bSetPage( const wxString & rosAnalysis ) { eTypeCmd eAnalysis=eCMD_NONE; wxString os1; os1 = rosAnalysis.Upper( ); if( os1.Length( ) == 2 ) { if( os1 == wxT("OP") ) eAnalysis = eCMD_OP; else if( os1 == wxT("DC") ) eAnalysis = eCMD_DC; else if( os1 == wxT("AC") ) eAnalysis = eCMD_AC; else if( os1 == wxT("TR") ) eAnalysis = eCMD_TR; // else if( os1 == wxT("FO") ) eAnalysis = eCMD_FO; // else if( os1 == wxT("DI") ) eAnalysis = eCMD_DI; // else if( os1 == wxT("NO") ) eAnalysis = eCMD_NO; // else if( os1 == wxT("PZ") ) eAnalysis = eCMD_PZ; // else if( os1 == wxT("SE") ) eAnalysis = eCMD_SE; // else if( os1 == wxT("TF") ) eAnalysis = eCMD_TF; } return( bSetPage( eAnalysis ) ); } //************************************************************************************************** // Get the two letter page specifier. // // Return Values: // Success - The two letter analysis type specifier (lower case) // Failure - An empty string const wxString & NbkGnuCap::rosGetPage( void ) { static wxString osAnalysis; switch( eGetPage( ) ) { case eCMD_OP : osAnalysis = wxT("op"); break; case eCMD_DC : osAnalysis = wxT("dc"); break; case eCMD_AC : osAnalysis = wxT("ac"); break; case eCMD_TR : osAnalysis = wxT("tr"); break; // case eCMD_FO : osAnalysis = wxT("fo"); break; default : osAnalysis.Empty( ); } return( osAnalysis ); } //************************************************************************************************** // Get the enumerated page specifier. // // Return Values: // Success - The enumerated analysis specifier // Failure - eCMD_NONE eTypeCmd NbkGnuCap::eGetPage( void ) { eTypeCmd eAnalysis; switch( GetSelection( ) ) { case 0 : eAnalysis = eCMD_OP; break; case 1 : eAnalysis = eCMD_DC; break; case 2 : eAnalysis = eCMD_AC; break; case 3 : eAnalysis = eCMD_TR; break; // case 4 : eAnalysis = eCMD_FO; break; default : eAnalysis = eCMD_NONE; } return( eAnalysis ); } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // This event is generated when a notebook page has just changed. // // Argument List: // roEvtNbk - An object holding information about the event void NbkGnuCap::OnPageChangd( wxNotebookEvent & roEvtNbk ) { PnlAnaBase * poPnlAna; wxString os1; int i1; // Transfer the ambient temperature from the previous page to OPTIONS dialog i1 = roEvtNbk.GetOldSelection( ); if( i1 != -1 ) { poPnlAna = (PnlAnaBase *) GetPage( (size_t) i1 ); if( poPnlAna->m_oPnlTemp.GetParent( ) != NULL ) { os1 = poPnlAna->m_oPnlTemp.rosGetValue( ); m_oDlgCfgOPT.bSetValue( DlgGcpCfgOPT::ID_PNL_TEMP, os1 ); } } // Transfer the ambient temperature from the OPTIONS dialog to current page poPnlAna = (PnlAnaBase *) GetCurrentPage( ); if( poPnlAna->m_oPnlTemp.GetParent( ) != NULL ) { os1 = m_oDlgCfgOPT.rosGetValue( DlgGcpCfgOPT::ID_PNL_TEMP ); poPnlAna->m_oPnlTemp.bSetValue( os1 ); } // Synchronize the sweep sources between the different analysis pages if( m_bSyncSwpSrcs ) { os1 = poPnlAna->m_oCpntSwpSrc.rosGetName( ); if( poPnlAna->m_oChoSrcName.SetStringSelection( os1 ) ) { // Set the sweep source value if it's been defined if( poPnlAna->m_oPnlSrcLvl.GetParent( ) != NULL ) { poPnlAna->m_oPnlSrcLvl.bSetUnitsType( poPnlAna->m_oCpntSwpSrc.eGetUnitsType( ) ); poPnlAna->m_oPnlSrcLvl.bSetValue( poPnlAna->m_oCpntSwpSrc.rosGetValue ( ) ); } } else { // Couldn't set the sweep source name so clear it poPnlAna->m_oChoSrcName.SetSelection( 0 ); if( poPnlAna->m_oPnlSrcLvl.GetParent( ) != NULL ) { poPnlAna->m_oPnlSrcLvl.bSetUnitsType( eUNITS_NONE ); poPnlAna->m_oPnlSrcLvl.bSetValue( 0.0 ); } } // Update the sweep parameter units if( poPnlAna->eGetAnalysType( ) == eCMD_DC ) m_poPnlGnuCapDC->OnSrcName( (wxCommandEvent &) roEvtNbk ); } // Allow additional event handlers to be called roEvtNbk.Skip( ); } //************************************************************************************************** // Setup .OPTIONS command button event handler. // // Argument List: // roEvtCmd - An object holding information about the event void NbkGnuCap::OnBtnOptions( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { PnlAnaBase * poPnlAna; wxString os1; int i1; // Get a pointer to the currently displayed analysis page poPnlAna = (PnlAnaBase *) GetCurrentPage( ); if( poPnlAna == NULL ) return; // Set the temperature in the OPTIONS dialog if( poPnlAna->m_oPnlTemp.GetParent( ) != NULL ) { os1 = poPnlAna->m_oPnlTemp.rosGetValue( ); m_oDlgCfgOPT.bSetValue( DlgGcpCfgOPT::ID_PNL_TEMP, os1 ); } // Display the OPTIONS dialog m_oDlgCfgOPT.CenterOnParent( ); i1 = m_oDlgCfgOPT.ShowModal( ); if( i1 != wxID_OK ) return; // Set the temperature in the analysis panel if( poPnlAna->m_oPnlTemp.GetParent( ) != NULL ) { os1 = m_oDlgCfgOPT.rosGetValue( DlgGcpCfgOPT::ID_PNL_TEMP ); poPnlAna->m_oPnlTemp.bSetValue( os1 ); } } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/gnucap/commands/0000755000000000000000000000000012513707103016662 5ustar rootrootgspiceui-1.1.00+dfsg/src/gnucap/commands/CmdGnuCapFO.hpp0000644000000000000000000000516412476467417021452 0ustar rootroot//************************************************************************************************** // CmdGnuCapFO.hpp * // ----------------- * // Description : This class contains values associated with the GNU-Cap FOURIER command. It * // inherits from the class CmdBase. * // Started : 2008-03-11 * // Last Update : 2015-03-07 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef CMDGCPFO_HPP #define CMDGCPFO_HPP // Application Includes #include "TypeDefs.hpp" #include "base/CmdBase.hpp" #include "utility/CnvtType.hpp" // wxWidgets Includes #include //************************************************************************************************** class CmdGnuCapFO : public CmdBase { private : virtual bool bValidate( void ); public : wxString m_osStart; // The sweep start value wxString m_osStop; // The sweep stop value wxString m_osStep; // The sweep step value eTypeInitC m_eInitC; // The sweep scale type wxString m_osTempC; // The analysis temperature CmdGnuCapFO( void ); virtual ~CmdGnuCapFO( ); virtual bool bSetDefaults( void ); virtual bool bParse ( void ); virtual bool bFormat( void ); void Print( const wxString & rosPrefix=wxT(" ") ); }; //************************************************************************************************** #endif // CMDGCPFO_HPP gspiceui-1.1.00+dfsg/src/gnucap/commands/CmdGnuCapDC.cpp0000644000000000000000000002677112446255320021417 0ustar rootroot//************************************************************************************************** // CmdGnuCapDC.cpp * // ----------------- * // Started : 2008-01-29 * // Last Update : 2014-12-23 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "CmdGnuCapDC.hpp" //************************************************************************************************** // Constructor. CmdGnuCapDC::CmdGnuCapDC( void ) { bSetDefaults( ); } //************************************************************************************************** // Destructor. CmdGnuCapDC::~CmdGnuCapDC( ) { } //************************************************************************************************** // Check that the object attributes are valid. // // Return Values : // true - Success // false - Failure bool CmdGnuCapDC::bValidate( void ) { double df1, df2, df3; CmdBase::bValidate( ); // Check the sweep start and stop values if( ! CnvtType::bStrToFlt( m_osStart, &df1 ) ) SetErrMsg( wxT("Invalid sweep start value.") ); if( ! CnvtType::bStrToFlt( m_osStop, &df2 ) ) SetErrMsg( wxT("Invalid sweep stop value.") ); if( df2 < df1 ) SetErrMsg( wxT("Start value greater than stop value.") ); // Check the sweep step value and sweep scale if( ! CnvtType::bStrToFlt( m_osStep, &df3 ) ) SetErrMsg( wxT("Invalid sweep step value.") ); if( df3 <= 0.0 ) SetErrMsg( wxT("Step value less than or equal to zero.") ); switch( m_eScale ) { case eSCALE_LIN : if( df1!=df2 && df3>fabs( df2 - df1 ) ) SetErrMsg( wxT("Step value is greater than sweep range.") ); break; case eSCALE_LOG : if( df1!=df2 && df3==1.0 ) SetErrMsg( wxT("Invalid step multiplier, must be non-unity.") ); break; case eSCALE_DEC : break; default : SetErrMsg( wxT("Invalid step scale value.") ); } // Check the component to be used as the sweep source // (21/04/2011) ??? A sweep source isn't compulsory for a GNU-Cap DC sweep // if( m_osSource.IsEmpty( ) ) // SetErrMsg( wxT("No source component has been selected.") ); // Set the analysis temperature if( ! CnvtType::bStrToFlt( m_osTempC, &df3 ) ) SetErrMsg( wxT("Invalid analysis temperature value.") ); return( bIsValid( ) ); } //************************************************************************************************** // Set the object attributes to they're default values. // // Return Values : // true - Success // false - Failure bool CmdGnuCapDC::bSetDefaults( void ) { CmdBase::bSetDefaults( ); m_eSimEng = eSIMR_GNUCAP; m_eCmdType = eCMD_DC; m_osStart = wxT("0.0"); m_osStop = wxT("100.0"); m_osStep = wxT("10.0"); m_osSource = wxT("None"); m_eScale = eSCALE_LIN; m_osTempC = wxT("0.0"); return( true ); } //************************************************************************************************** // Parse the command string. // // Eg.s : .DC Vin 0.00 100.00m BY 10.00m TE 27.00 BASIC // .DC Vin 0.00 100.00m TI 1.01 TE 27.00 BASIC // .DC Vin 0.00 100.00m DE 100 TE 27.00 BASIC // // Return Values : // true - Success // false - Failure bool CmdGnuCapDC::bParse( void ) { wxStringTokenizer ostk1; wxString os1; double df1; int i1; // Clear the object attributes os1 = (wxString &) *this; bSetDefaults( ); assign( os1 ); // Tokenize the command string ostk1.SetString( *this ); i1 = ostk1.CountTokens( ); if( i1!=6 && i1!=9 ) return( bValidate( ) ); // Check command type os1 = ostk1.GetNextToken( ).Left( 3 ).Upper( ); if( os1 != wxT(".DC") ) return( bValidate( ) ); // Extract the sweep source label m_osSource = ostk1.GetNextToken( ); if( m_osSource.IsEmpty( ) ) return( bValidate( ) ); // Extract the start value os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osStart = os1; else return( bValidate( ) ); // Extract the stop voltage os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osStop = os1; else return( bValidate( ) ); // Extract the sweep type: linear, log or steps per decade os1 = ostk1.GetNextToken( ); os1.MakeUpper( ); if( os1 == wxT("BY") ) m_eScale = eSCALE_LIN; else if( os1 == wxT("TI") ) m_eScale = eSCALE_LOG; else if( os1 == wxT("DE") ) m_eScale = eSCALE_DEC; else return( bValidate( ) ); // Extract the step size/count os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osStep = os1; else return( bValidate( ) ); // Extract the analysis temperature os1 = ostk1.GetNextToken( ); if( os1.Upper( ) == wxT("TE") ) { os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osTempC = os1; else return( bValidate( ) ); } // Check that the last field is "BASIC" if( ostk1.GetNextToken( ).Upper( ) != wxT("BASIC") ) return( bValidate( ) ); return( bValidate( ) ); } //************************************************************************************************** // Format the command string. // // Return Values : // true - Success // false - Failure bool CmdGnuCapDC::bFormat( void ) { wxString osCmd, os1; // Set the command name osCmd = wxT(".DC"); // Set signal source osCmd << wxT(' ') << m_osSource; // Set sweep parameters osCmd << wxT(' ') << m_osStart; osCmd << wxT(' ') << m_osStop; switch( m_eScale ) { case eSCALE_LIN : osCmd << wxT(" BY"); break; case eSCALE_LOG : osCmd << wxT(" TI"); break; case eSCALE_DEC : osCmd << wxT(" DE"); break; default : break; } osCmd << wxT(' ') << m_osStep; // Set analysis temperature osCmd << wxT(" TE ") << m_osTempC; // Append format modifier osCmd << wxT(" BASIC"); assign( osCmd ); return( bValidate( ) ); } //************************************************************************************************** // Copy the contents of a CmdNgSpiceDC object. // // Argument List : // roCmdDC - A reference to a CmdNgSpiceDC object // // Return Values : // A reference to this object CmdGnuCapDC & CmdGnuCapDC::operator = ( const CmdNgSpiceDC & roCmdDC ) { (CmdBase &) *this = (CmdBase &) roCmdDC; m_osStart = roCmdDC.m_osStart; m_osStop = roCmdDC.m_osStop; m_osStep = roCmdDC.m_osStep; m_osSource = roCmdDC.m_osSource; bFormat( ); return( *this ); } //************************************************************************************************** // Print the object attributes. // // Argument List : // rosPrefix - A prefix to every line displayed (usually just spaces) void CmdGnuCapDC::Print( const wxString & rosPrefix ) { CmdBase::Print( rosPrefix + wxT("CmdBase::") ); std::cout << rosPrefix.mb_str( ) << "m_osStart : " << m_osStart .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osStop : " << m_osStop .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osStep : " << m_osStep .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osSource : " << m_osSource.mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_eScale : "; switch( m_eScale ) { case eSCALE_LIN : std::cout << "eSCALE_LIN\n"; break; case eSCALE_LOG : std::cout << "eSCALE_LOG\n"; break; case eSCALE_DEC : std::cout << "eSCALE_DEC\n"; break; case eSCALE_OCT : std::cout << "eSCALE_OCT\n"; break; case eSCALE_NONE : std::cout << "eSCALE_NONE\n"; break; default : std::cout << "Invalid\n"; break; } std::cout << rosPrefix.mb_str( ) << "m_osTempC : " << m_osTempC .mb_str( ) << '\n'; } //************************************************************************************************** // Test Utility * //************************************************************************************************** #ifdef TEST_CMDGNUCAPDC using namespace std; // Function prototypes void Usage( char * psAppName ); //************************************************************************************************** int main( int argc, char * argv[ ] ) { wxString osCmd; wxString os1; // Validate the argument count passed to the application if( argc > 2 ) { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } // Process the command line arguments os1 = wxConvLibc.cMB2WC( argv[ 1 ] ); if( argc > 1 ) { if( os1 == wxT("-h") ) { Usage( argv[ 0 ] ); exit( EXIT_SUCCESS ); } else { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } } // Display the utility banner cout << "\n Class CmdGnuCapDC Test Utility" << "\n Version 1.04 (12/08/2011)\n"; // Create a GNU-CAP DC command object CmdGnuCapDC tCmd_DC; // Use the following command example to check the formatter and the parser : osCmd = wxT(".DC Vin 0.00 100.00m TI 10.00m TE 27.00 BASIC"); // Set things up for a formatter test tCmd_DC.m_osStart = wxT("0.00"); tCmd_DC.m_osStop = wxT("100.00m"); tCmd_DC.m_osStep = wxT("10.00m"); tCmd_DC.m_osSource = wxT("Vin"); tCmd_DC.m_eScale = eSCALE_LOG; tCmd_DC.m_osTempC = wxT("27.00"); cout << "\nRun Formatter : " << ( tCmd_DC.bFormat( ) ? "OK" : "FAULT" ); cout << "\nTest Cmd Format : " << ( tCmd_DC == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\ntCmd_DC Contents : " << tCmd_DC.mb_str( ) << '\n'; // Set things up for a parser test tCmd_DC.bSetString( osCmd ); cout << "\nRun Parser : " << ( tCmd_DC.bParse( ) ? "OK" : "FAULT" ); tCmd_DC.bFormat( ); cout << "\nTest Cmd Format : " << ( tCmd_DC == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\ntCmd_DC Contents : " << tCmd_DC.mb_str( ) << '\n'; cout << '\n'; exit( EXIT_SUCCESS ); } //************************************************************************************************** void Usage( char * psAppName ) { cout << "\nUsage : " << psAppName << " [-OPTIONS]" << "\nOptions :" << "\n -h : Print usage (this message)\n"; } #endif // TEST_CMDGNUCAPDC //************************************************************************************************** gspiceui-1.1.00+dfsg/src/gnucap/commands/CmdGnuCapOP.hpp0000644000000000000000000000520212476466763021460 0ustar rootroot//************************************************************************************************** // CmdGnuCapOP.hpp * // ----------------- * // Description : This class contains values associated with the GNU-Cap OP (Operating Point) * // command. It inherits from the class CmdBase. * // Started : 2008-03-05 * // Last Update : 2015-03-07 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef CMDGCPOP_HPP #define CMDGCPOP_HPP // Application Includes #include "TypeDefs.hpp" #include "base/CmdBase.hpp" #include "ngspice/commands/CmdNgSpiceDC.hpp" #include "utility/CnvtType.hpp" class CmdNgSpiceDC; //************************************************************************************************** class CmdGnuCapOP : public CmdBase { private : virtual bool bValidate( void ); public : wxString m_osStart; // Sweep start value wxString m_osStop; // Sweep stop value wxString m_osStep; // Sweep step value eTypeScale m_eScale; // The sweep scale type CmdGnuCapOP( void ); virtual ~CmdGnuCapOP( ); virtual bool bSetDefaults( void ); virtual bool bParse ( void ); virtual bool bFormat( void ); CmdGnuCapOP & operator = ( const CmdNgSpiceDC & roCmdDC ); void Print( const wxString & rosPrefix=wxT(" ") ); }; //************************************************************************************************** #endif // CMDGCPOP_HPP gspiceui-1.1.00+dfsg/src/gnucap/commands/CmdGnuCapGEN.cpp0000644000000000000000000003371012446255320021531 0ustar rootroot//************************************************************************************************** // CmdGnuCapGEN.cpp * // ------------------ * // Started : 2008-03-11 * // Last Update : 2014-12-23 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "CmdGnuCapGEN.hpp" //************************************************************************************************** // Constructor. CmdGnuCapGEN::CmdGnuCapGEN( void ) { bSetDefaults( ); } //************************************************************************************************** // Destructor. CmdGnuCapGEN::~CmdGnuCapGEN( ) { } //************************************************************************************************** // Check that the object attributes are valid. // // Return Values : // true - Success // false - Failure bool CmdGnuCapGEN::bValidate( void ) { double df1, df2, df3, df4; CmdBase::bValidate( ); // Overall source characteristics if( ! CnvtType::bStrToFlt( m_osAmplitude, &df1 ) ) SetErrMsg( wxT("overall amplitude value is invalid") ); // if( df1 <= 0.0 ) ??? 05/10/2009 // SetErrMsg( wxT("overall amplitude value must be greater than zero") ); if( ! CnvtType::bStrToFlt( m_osOffset, &df1 ) ) SetErrMsg( wxT("overall offset value is invalid") ); // Sinusoidal source characteristics if( ! CnvtType::bStrToFlt( m_osSinFreq, &df1 ) ) SetErrMsg( wxT("sinusoid frequency value is invalid") ); if( ! CnvtType::bStrToFlt( m_osSinPhase, &df1 ) ) SetErrMsg( wxT("sinusoid phase value is invalid") ); // Check the pulse time values if( ! CnvtType::bStrToFlt( m_osPulRise, &df1 ) ) SetErrMsg( wxT("pulse rise time value is invalid") ); if( ! CnvtType::bStrToFlt( m_osPulWidth, &df2 ) ) SetErrMsg( wxT("pulse width value is invalid") ); if( ! CnvtType::bStrToFlt( m_osPulFall, &df3 ) ) SetErrMsg( wxT("pulse fall time value is invalid") ); if( ! CnvtType::bStrToFlt( m_osPulPeriod, &df4 ) ) SetErrMsg( wxT("pulse period value is invalid") ); if( df4 < df1 ) SetErrMsg( wxT("pulse rise time is greater than the pulse period") ); else if( df4 < df2 ) SetErrMsg( wxT("pulse width is greater than the pulse period") ); else if( df4 < df3 ) SetErrMsg( wxT("pulse fall time is greater than the pulse period") ); else if( df4 < df1+df2+df3 ) SetErrMsg( wxT("pulse period is less then the pulse width") ); // Check the pulse level values if( ! CnvtType::bStrToFlt( m_osPulInitial, &df1 ) ) SetErrMsg( wxT("initial pulse value is invalid") ); if( ! CnvtType::bStrToFlt( m_osPulMin, &df2 ) ) SetErrMsg( wxT("minimum pulse value is invalid") ); if( ! CnvtType::bStrToFlt( m_osPulMax, &df3 ) ) SetErrMsg( wxT("maximum pulse value is invalid") ); if( df1 < df2 ) SetErrMsg( wxT("initial pulse value is less than the minimum pulse value") ); else if( df1 > df3 ) SetErrMsg( wxT("initial pulse value is greater than the maximum pulse value") ); else if( df2 > df3 ) SetErrMsg( wxT("minimum pulse value is less than the maximum pulse value") ); // Check overall pulse source logic if( df4!=0.0 && (df2==0.0 && df3==0.0) ) SetErrMsg( wxT("pulse timing has been defined but no pulse levels") ); if( df4==0.0 && (df2!=0.0 || df3!=0.0) ) SetErrMsg( wxT("pulse levels have been defined but no pulse timing") ); return( true ); } //************************************************************************************************** // Set the object attributes to they're default values. // // Return Values : // true - Success // false - Failure bool CmdGnuCapGEN::bSetDefaults( void ) { CmdBase::bSetDefaults( ); m_eSimEng = eSIMR_GNUCAP; m_eCmdType = eCMD_GEN; m_osAmplitude = GCP_AMPLITUDE; m_osOffset = GCP_OFFSET; m_osSinFreq = GCP_SINFREQ; m_osSinPhase = GCP_SINPHASE; m_osPulInitial = GCP_PULINITIAL; m_osPulMin = GCP_PULMIN; m_osPulMax = GCP_PULMAX; m_osPulDelay = GCP_PULDELAY; m_osPulRise = GCP_PULRISE; m_osPulWidth = GCP_PULWIDTH; m_osPulFall = GCP_PULFALL; m_osPulPeriod = GCP_PULPERIOD; return( true ); } //************************************************************************************************** // Parse the command string. // // Eg.s : .GENERATOR AMP=2.00K OFFSET=1.00 FREQ=1.00K PHASE=50.00 INIT=5.00m // MIN=2.00m MAX=10.00m DELAY=4.00m RISE=2.00m WIDTH=8.00m // FALL=1.00m PERIOD=20.00m // // Return Values : // true - Success // false - Failure bool CmdGnuCapGEN::bParse( void ) { wxStringTokenizer ostk1; wxString os1, os2; size_t szt1; int i1; // Clear the object attributes os1 = (wxString &) *this; bSetDefaults( ); assign( os1 ); // Tokenize the command string ostk1.SetString( *this ); i1 = ostk1.CountTokens( ); if( i1<2 || i1>13 ) return( bValidate( ) ); // Check command type os1 = ostk1.GetNextToken( ).Left( 4 ).Upper( ); if( os1 != wxT(".GEN") ) return( bValidate( ) ); // Extract each parameter value while( ostk1.HasMoreTokens( ) ) { // Extract the field name and the associated value os1 = ostk1.GetNextToken( ); os2 = wxT(""); if( ( szt1=os1.find( wxT("=") ) ) != wxString::npos ) { os2 = os1.Right( os1.Length( )-szt1-1 ); os1 = os1.Left( szt1 ); } // Set the object attribute values if( os1 == wxT("AMP") ) m_osAmplitude = os2; else if( os1 == wxT("OFFSET") ) m_osOffset = os2; else if( os1 == wxT("FREQ") ) m_osSinFreq = os2; else if( os1 == wxT("PHASE") ) m_osSinPhase = os2; else if( os1 == wxT("INIT") ) m_osPulInitial = os2; else if( os1 == wxT("MIN") ) m_osPulMin = os2; else if( os1 == wxT("MAX") ) m_osPulMax = os2; else if( os1 == wxT("DELAY") ) m_osPulDelay = os2; else if( os1 == wxT("RISE") ) m_osPulRise = os2; else if( os1 == wxT("WIDTH") ) m_osPulWidth = os2; else if( os1 == wxT("FALL") ) m_osPulFall = os2; else if( os1 == wxT("PERIOD") ) m_osPulPeriod = os2; else return( bValidate( ) ); } return( bValidate( ) ); } //************************************************************************************************** // Format the command string. // // Return Values : // true - Success // false - Failure bool CmdGnuCapGEN::bFormat( void ) { wxString os1; float f1; bool b1; os1 = wxT(".GENERATOR"); if( ! m_osAmplitude .IsEmpty( ) ) os1 << wxT(" AMP=") << m_osAmplitude; if( ! m_osOffset .IsEmpty( ) ) os1 << wxT(" OFFSET=") << m_osOffset; f1 = 0.0; b1 = CnvtType::bStrToFlt( m_osSinFreq, &f1 ); if( b1==true && f1!=0.0 ) { os1 << wxT(" FREQ=") << m_osSinFreq; os1 << wxT(" PHASE=") << m_osSinPhase; } f1 = 0.0; b1 = CnvtType::bStrToFlt( m_osPulMax, &f1 ); if( b1==true && f1!=0.0 ) { os1 << wxT(" INIT=") << m_osPulInitial; os1 << wxT(" MIN=") << m_osPulMin; os1 << wxT(" MAX=") << m_osPulMax; os1 << wxT(" DELAY=") << m_osPulDelay; os1 << wxT(" RISE=") << m_osPulRise; os1 << wxT(" WIDTH=") << m_osPulWidth; os1 << wxT(" FALL=") << m_osPulFall; os1 << wxT(" PERIOD=") << m_osPulPeriod; } assign( os1 ); return( bValidate( ) ); } //************************************************************************************************** // Copy the contents of a CpntNgsIndSrc object. // // Argument List : // roIndSrc - A reference to a CpntNgsIndSrc object // // Return Values : // A reference to this object CmdGnuCapGEN & CmdGnuCapGEN::operator = ( const CpntNgsIndSrc & roIndSrc ) { double df1, df2; if( ! roIndSrc.m_osSinAmp.IsEmpty( ) ) m_osAmplitude = roIndSrc.m_osSinAmp; else m_osAmplitude = wxT("1.0"); m_osOffset = roIndSrc.m_osSinOffset; m_osSinFreq = roIndSrc.m_osSinFreq; if( CnvtType::bStrToFlt( roIndSrc.m_osSinFreq, &df1 ) && CnvtType::bStrToFlt( roIndSrc.m_osSinDelay, &df2 ) ) CnvtType::bFltToStr( 360.0 * df2 * df1, m_osSinPhase ); else m_osSinPhase = wxT("0.0"); m_osPulInitial = roIndSrc.m_osPulInitial; m_osPulMax = roIndSrc.m_osPulMax; m_osPulDelay = roIndSrc.m_osPulDelay; m_osPulRise = roIndSrc.m_osPulRise; m_osPulWidth = roIndSrc.m_osPulWidth; m_osPulFall = roIndSrc.m_osPulFall; m_osPulPeriod = roIndSrc.m_osPulPeriod; bFormat( ); return( *this ); } //************************************************************************************************** // Print the object attributes. // // Argument List : // rosPrefix - A prefix to every line displayed (usually just spaces) void CmdGnuCapGEN::Print( const wxString & rosPrefix ) { CmdBase::Print( rosPrefix + wxT("CmdBase::") ); std::cout << rosPrefix.mb_str( ) << "m_osAmplitude : " << m_osAmplitude .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osOffset : " << m_osOffset .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osSinFreq : " << m_osSinFreq .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osSinPhase : " << m_osSinPhase .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osPulInitial : " << m_osPulInitial.mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osPulMin : " << m_osPulMin .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osPulMax : " << m_osPulMax .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osPulDelay : " << m_osPulDelay .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osPulRise : " << m_osPulRise .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osPulWidth : " << m_osPulWidth .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osPulFall : " << m_osPulFall .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osPulPeriod : " << m_osPulPeriod .mb_str( ) << '\n'; } //************************************************************************************************** // Test Utility * //************************************************************************************************** #ifdef TEST_CMDGNUCAPGEN using namespace std; // Function prototypes void Usage( char * psAppName ); //************************************************************************************************** int main( int argc, char * argv[ ] ) { wxString osCmd; wxString os1; // Validate the argument count passed to the application if( argc > 2 ) { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } // Process the command line arguments os1 = wxConvLibc.cMB2WC( argv[ 1 ] ); if( argc > 1 ) { if( os1 == wxT("-h") ) { Usage( argv[ 0 ] ); exit( EXIT_SUCCESS ); } else { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } } // Display the utility banner cout << "\n Class CmdGnuCapGEN Test Utility" << "\n Version 1.04 (12/08/2011)\n"; // Create a GNU-CAP Transient command object CmdGnuCapGEN tCmd_GEN; // Use the following command example to check the formatter and the parser : osCmd << wxT(".GENERATOR AMP=2.00K OFFSET=1.00 FREQ=1.00K PHASE=50.00 ") << wxT("INIT=5.00m MIN=2.00m MAX=10.00m DELAY=4.00m RISE=2.00m ") << wxT("WIDTH=8.00m FALL=1.00m PERIOD=20.00m"); // Set things up for a formatter test tCmd_GEN.m_osAmplitude = wxT("2.00K"); tCmd_GEN.m_osOffset = wxT("1.00"); tCmd_GEN.m_osSinFreq = wxT("1.00K"); tCmd_GEN.m_osSinPhase = wxT("50.00"); tCmd_GEN.m_osPulInitial = wxT("5.00m"); tCmd_GEN.m_osPulMin = wxT("2.00m"); tCmd_GEN.m_osPulMax = wxT("10.00m"); tCmd_GEN.m_osPulDelay = wxT("4.00m"); tCmd_GEN.m_osPulRise = wxT("2.00m"); tCmd_GEN.m_osPulWidth = wxT("8.00m"); tCmd_GEN.m_osPulFall = wxT("1.00m"); tCmd_GEN.m_osPulPeriod = wxT("20.00m"); cout << "\nRun Formatter : " << ( tCmd_GEN.bFormat( ) ? "OK" : "FAULT" ); cout << "\nTest Cmd Format : " << ( tCmd_GEN == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\ntCmd_GEN Contents : " << tCmd_GEN.mb_str( ) << '\n'; // Set things up for a parser test tCmd_GEN.bSetString( osCmd ); cout << "\nRun Parser : " << ( tCmd_GEN.bParse( ) ? "OK" : "FAULT" ); tCmd_GEN.bFormat( ); cout << "\nTest Cmd Format : " << ( tCmd_GEN == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\ntCmd_GEN Contents : " << tCmd_GEN.mb_str( ) << '\n'; cout << '\n'; exit( EXIT_SUCCESS ); } //************************************************************************************************** void Usage( char * psAppName ) { cout << "\nUsage : " << psAppName << " [-OPTIONS]" << "\nOptions :" << "\n -h : Print usage (this message)\n"; } #endif // TEST_CMDGNUCAPGEN //************************************************************************************************** gspiceui-1.1.00+dfsg/src/gnucap/commands/CmdGnuCapOP.cpp0000644000000000000000000002503712446255320021441 0ustar rootroot//************************************************************************************************** // CmdGnuCapOP.cpp * // ----------------- * // Started : 2008-03-05 * // Last Update : 2014-12-23 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "CmdGnuCapOP.hpp" //************************************************************************************************** // Constructor. CmdGnuCapOP::CmdGnuCapOP( void ) { bSetDefaults( ); } //************************************************************************************************** // Destructor. CmdGnuCapOP::~CmdGnuCapOP( ) { } //************************************************************************************************** // Check that the object attributes are valid. // // Return Values : // true - Success // false - Failure bool CmdGnuCapOP::bValidate( void ) { double df1, df2, df3; CmdBase::bValidate( ); // Check the sweep start and stop values if( ! CnvtType::bStrToFlt( m_osStart, &df1 ) ) SetErrMsg( wxT("Invalid sweep start value.") ); if( ! CnvtType::bStrToFlt( m_osStop, &df2 ) ) SetErrMsg( wxT("Invalid sweep stop value.") ); if( df2 < df1 ) SetErrMsg( wxT("Start value greater than stop value.") ); // Check the sweep step value and sweep scale if( ! CnvtType::bStrToFlt( m_osStep, &df3 ) ) SetErrMsg( wxT("Invalid sweep step value.") ); if( df3 <= 0.0 ) SetErrMsg( wxT("Step value less than or equal to zero.") ); switch( m_eScale ) { case eSCALE_LIN : if( df1!=df2 && df3>fabs( df2 - df1 ) ) SetErrMsg( wxT("Step value is greater than sweep range.") ); break; case eSCALE_LOG : if( df1!=df2 && df3==1.0 ) SetErrMsg( wxT("Invalid step multiplier, must be non-unity.") ); break; case eSCALE_DEC : break; default : SetErrMsg( wxT("Invalid step scale value.") ); } return( bIsValid( ) ); } //************************************************************************************************** // Set the object attributes to they're default values. // // Return Values : // true - Success // false - Failure bool CmdGnuCapOP::bSetDefaults( void ) { CmdBase::bSetDefaults( ); m_eSimEng = eSIMR_GNUCAP; m_eCmdType = eCMD_OP; m_osStart = wxT("20.0"); m_osStop = wxT("30.0"); m_osStep = wxT("1.0"); m_eScale = eSCALE_LIN; return( true ); } //************************************************************************************************** // Parse the command string. // // Eg.s: .OP 27.0 BASIC // .OP 27.0 60.0 BY 1.0 BASIC // .OP 27.0 60.0 TI 1.01 BASIC // .OP 27.0 60.0 DE 10 BASIC // // Return Values : // true - Success // false - Failure bool CmdGnuCapOP::bParse( void ) { wxStringTokenizer ostk1; wxString os1; int i1; double df1; // Clear the object attributes os1 = (wxString &) *this; bSetDefaults( ); assign( os1 ); // Tokenize the command string ostk1.SetString( *this ); i1 = ostk1.CountTokens( ); if( i1!=3 && i1!=6 ) return( bValidate( ) ); // Check command type os1 = ostk1.GetNextToken( ).Left( 3 ).Upper( ); if( os1 != wxT(".OP") ) return( bValidate( ) ); // Extract the start temperature os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osStart = os1; else return( bValidate( ) ); if( ostk1.CountTokens( ) > 1 ) { // Extract the stop temperature os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osStop = os1; else return( bValidate( ) ); // Extract the sweep type os1 = ostk1.GetNextToken( ); os1.MakeUpper( ); if( os1 == wxT("BY") ) m_eScale = eSCALE_LIN; else if( os1 == wxT("TI") ) m_eScale = eSCALE_LOG; else if( os1 == wxT("DE") ) m_eScale = eSCALE_DEC; else return( bValidate( ) ); // Extract the step size os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osStep = os1; else return( bValidate( ) ); } else { // Use default values for the remaining parameters m_osStop = os1; m_osStep = wxT("1.0"); m_eScale = eSCALE_LIN; } // Check that the last field is "BASIC" if( ostk1.GetNextToken( ).Upper( ) != wxT("BASIC") ) return( bValidate( ) ); return( bValidate( ) ); } //************************************************************************************************** // Format the command string. // // Return Values : // true - Success // false - Failure bool CmdGnuCapOP::bFormat( void ) { wxString osCmd, os1; // Set the command name osCmd = wxT(".OP"); // Set sweep parameters osCmd << wxT(' ') << m_osStart; if( m_osStop != m_osStart ) { osCmd << wxT(' ') << m_osStop; switch( m_eScale ) { case eSCALE_LIN : osCmd << wxT(" BY"); break; case eSCALE_LOG : osCmd << wxT(" TI"); break; case eSCALE_DEC : osCmd << wxT(" DE"); break; default : break; } osCmd << wxT(' ') << m_osStep; } // Append format modifier osCmd << wxT(" BASIC"); assign( osCmd ); return( bValidate( ) ); } //************************************************************************************************** // Copy the contents of a CmdNgSpiceDC object. // // Argument List : // roCmdDC - A reference to a CmdNgSpiceDC object // // Return Values : // A reference to this object CmdGnuCapOP & CmdGnuCapOP::operator = ( const CmdNgSpiceDC & roCmdDC ) { (CmdBase &) *this = (CmdBase &) roCmdDC; m_osStart = roCmdDC.m_osStart; m_osStop = roCmdDC.m_osStop; m_osStep = roCmdDC.m_osStep; m_eScale = eSCALE_LIN; bFormat( ); return( *this ); } //************************************************************************************************** // Print the object attributes. // // Argument List : // rosPrefix - A prefix to every line displayed (usually just spaces) void CmdGnuCapOP::Print( const wxString & rosPrefix ) { CmdBase::Print( rosPrefix + wxT("CmdBase::") ); std::cout << rosPrefix.mb_str( ) << "m_osStart : " << m_osStart.mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osStop : " << m_osStop .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osStep : " << m_osStep .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_eScale : "; switch( m_eScale ) { case eSCALE_LIN : std::cout << "eSCALE_LIN\n"; break; case eSCALE_LOG : std::cout << "eSCALE_LOG\n"; break; case eSCALE_DEC : std::cout << "eSCALE_DEC\n"; break; case eSCALE_NONE : std::cout << "eSCALE_NONE\n"; break; default : std::cout << "Invalid\n"; break; } } //************************************************************************************************** // Test Utility * //************************************************************************************************** #ifdef TEST_CMDGNUCAPOP using namespace std; // Function prototypes void Usage( char * psAppName ); //************************************************************************************************** int main( int argc, char * argv[ ] ) { wxString osCmd; wxString os1; // Validate the argument count passed to the application if( argc > 2 ) { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } // Process the command line arguments os1 = wxConvLibc.cMB2WC( argv[ 1 ] ); if( argc > 1 ) { if( os1 == wxT("-h") ) { Usage( argv[ 0 ] ); exit( EXIT_SUCCESS ); } else { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } } // Display the utility banner cout << "\n Class CmdGnuCapOP Test Utility" << "\n Version 1.02 (12/08/2011)\n"; // Create a GNU-CAP OP command object CmdGnuCapOP tCmd_OP; // Use the following command example to check the formatter and the parser : osCmd = wxT(".OP 20.00 30.00 TI 1.01 BASIC"); // osCmd = wxT(".OP 20.00 BASIC"); // Set things up for a formatter test tCmd_OP.m_osStart = wxT("20.00"); tCmd_OP.m_osStop = wxT("30.00"); tCmd_OP.m_osStep = wxT("1.01"); tCmd_OP.m_eScale = eSCALE_LOG; // tCmd_OP.m_osStop = wxT("20.00"); // tCmd_OP.m_osStep = wxT("1.00"); // tCmd_OP.m_eScale = eSCALE_LIN; cout << "\nRun Formatter : " << ( tCmd_OP.bFormat( ) ? "OK" : "FAULT" ); cout << "\nTest Cmd Format : " << ( tCmd_OP == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\ntCmd_OP Contents : " << tCmd_OP.mb_str( ) << '\n'; // Set things up for a parser test tCmd_OP.bSetString( osCmd ); cout << "\nRun Parser : " << ( tCmd_OP.bParse( ) ? "OK" : "FAULT" ); tCmd_OP.bFormat( ); cout << "\nTest Cmd Format : " << ( tCmd_OP == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\ntCmd_OP Contents : " << tCmd_OP.mb_str( ) << '\n'; cout << '\n'; exit( EXIT_SUCCESS ); } //************************************************************************************************** void Usage( char * psAppName ) { cout << "\nUsage : " << psAppName << " [-OPTIONS]" << "\nOptions :" << "\n -h : Print usage (this message)\n"; } #endif // TEST_CMDGNUCAPOP //************************************************************************************************** gspiceui-1.1.00+dfsg/src/gnucap/commands/CmdGnuCapOPT.hpp0000644000000000000000000002601112476467343021600 0ustar rootroot//************************************************************************************************** // CmdGnuCapOPT.hpp * // ------------------ * // Description : This class contains values associated with the GNU-Cap OPTIONS command. It * // inherits from the class CmdBase. * // Started : 2006-09-11 * // Last Update : 2015-03-07 * // Copyright : (C) 2006 by MSWaters * //************************************************************************************************** // Note : The following defaults where generated by GNU-Cap on 2014-03-27 (run gnucap end enter * // options command without arguments) : * // * // * i/o * // .options noacct nolist clobber out=9999 ydivisions=4.0 phase=degrees harmonics=9 edit * // language=acs insensitive units=spice recursion=20 * // * accuracy, i/o * // .options numdgt=5 floor=1.E-21 vfloor=1.f roundofftol=100.f * // * accuracy, tolerances * // .options gmin= 1.0p short=10.0u reltol=0.001 abstol=1.0p vntol= 1.0u trtol=7.0 * // chgtol=10.0f pivtol=100.0f bypasstol=0.1 loadtol=0.1 * // * accuracy, algorithms * // .options method=trap bypass incmode lcbypass lubypass fbbypass traceload order=auto * // mode=mixed transits=2 noquitconvfail * // * iteration limiting and heuristics * // .options itl1=100 itl2=50 itl3=6 itl4=20 itl5=0 itl6=5000 itl7=1 itl8=99 itermin=1 * // vmax=5.0 vmin=-5.0 dampmax=1.0 dampmin=0.5 dampstrategy=0 * // * time step control * // .options dtmin=1.0p dtratio=1.0G trstepgrow=1.E+99 trstephold=1.E+99 trstepshrink=2.0 * // trreject=0.5 trsteporder=3 trstepcoef1=0.25 trstepcoef2=0.04166667 * // trstepcoef3=0.005208333 * // * circuit environment * // .options tnom= 27.0 temperature=27.0 rstray cstray defl=100.0u defw=100.0u defad=0.0 * // defas=0.0 * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef CMDGCPOPT_HPP #define CMDGCPOPT_HPP // Application Includes #include "TypeDefs.hpp" #include "base/CmdBase.hpp" #include "ngspice/commands/CmdNgSpiceOPT.hpp" #include "utility/CnvtType.hpp" class CmdNgSpiceOPT; // wxWidgets Includes #include // Local Macro and/or Constant Declarations #define GCP_ABSTOL wxT("1.0pA") // Absolute error tolerance #define GCP_CHGTOL wxT("10.0fC") // Charge error tolerance #define GCP_RELTOL wxT("0.001") // Relative error tolerance (0.001 = 0.1%) #define GCP_TRTOL wxT("7.0") // Transient error tolerance #define GCP_VNTOL wxT("1.0uV") // Voltage error tolerance (Volt) #define GCP_DEFL wxT("100.0um") // MOSFET default channel length (metre) #define GCP_DEFW wxT("100.0um") // MOSFET default channel width (metre) #define GCP_DEFAD wxT("0.0") // MOSFET default drain diffusion area (sq.m) #define GCP_DEFAS wxT("0.0") // MOSFET default source diffusion area (sq.m) #define GCP_GMIN wxT("1.0pS") // Minimum conductance to ground (Siemen) #define GCP_SHORT wxT("100.0nOhm") // Resistance of voltage source or short (Ohm) #define GCP_TEMP wxT("27.0Deg.C") // Ambient temperature of the circuit (Deg.C) #define GCP_TNOM wxT("27.0Deg.C") // Nominal temperature at which device parameters are measured (Deg.C) #define GCP_DAMPMAX wxT("1.0") // Newton damping factor in normal cases #define GCP_DAMPMIN wxT("0.5") // Newton damping factor in problem cases #define GCP_DTMIN wxT("1.0pSec") // Smallest internal time step in TR analysis #define GCP_DTRATIO wxT("1.0E9") // Ratio between min. and max. time step #define GCP_TRREJECT wxT("0.5") // Transient error rejection threshold #define GCP_TRSTEPG wxT("1.0E99") // Max. internal step size growth in TR analysis #define GCP_TRSTEPH wxT("1.0E99") // Max. internal step size growth in TR analysis when iteration exceeds it13 but still converges #define GCP_TRSTEPS wxT("2.0") // Amount to shrink step size when convergence fails in TR anaylis #define GCP_ROUND wxT("1.0E-13") // Numeric rounding tolerance #define GCP_FLOOR wxT("1.0E-21") // Effective zero value #define GCP_VFLOOR wxT("1.0fV") // Effective zero value for voltage probes #define GCP_VMAX wxT("5.0V") // Initial positive node voltage limit (Volt) #define GCP_VMIN wxT("-5.0V") // Initial negative node voltage limit (Volt) #define GCP_HARMS wxT("9") // Number of harmonics to display in FO analysis #define GCP_ITL1 wxT("100") // DC iteration limit #define GCP_ITL2 wxT("50") // DC transfer curve iteration limit (not used in GNU-Cap) #define GCP_ITL3 wxT("6") // Transient lower iteration limit #define GCP_ITL4 wxT("20") // Transient upper iteration limit #define GCP_ITL5 wxT("0") // Transient total iteration limit (not used in GNU-Cap) #define GCP_ITL6 wxT("5000") // Source stepping iteration limit (not used in GNU-Cap) #define GCP_ITL7 wxT("1") // Worst case analysis iteration limit #define GCP_ITL8 wxT("100") // Convergence diagnostic iteration threshold #define GCP_ITERMIN wxT("1") // Number of extra iterations after convergence #define GCP_NUMDGT wxT("5") // Precision : no. of digits after decimal point #define GCP_RECURS wxT("20") // Limit recursion levels in expression evaluation #define GCP_TRANSITS wxT("2") // Mixed mode transition count #define GCP_METHOD wxT("Trap") // Differentiation method (TRAPezoidal and/or EULER) #define GCP_MODE wxT("Mixed") // Simulation mode (analog, digital or mixed) #define GCP_ORDER wxT("Auto") // Equation ordering (forward, reverse or auto) #define GCP_PHASE wxT("Degrees") // Phase angle units : degrees or radians #define GCP_OPTS false // Enable printing of option values #define GCP_BYPASS true // Bypass model evaluation if appropriate #define GCP_FBBYPASS true // Skip matrix solution the last iteration #define GCP_LCBYPASS true // Bypass evaluation of linear ind. & cap. when possible #define GCP_LUBYPASS true // Bypass parts of LU decomposition if appropriate #define GCP_INCMODE true // Incrementally update the matrix #define GCP_TRACEL true // Only load changed elements to the matrix #define GCP_CSTRAY true // Include capacitance in device models #define GCP_RSTRAY false // Include series resistance in device models #define GCP_QUITCONV false // Quit on convergence failure in TR analysis #define GCP_DAMPST wxT("0x00") // Damping strategy flags : 0x01 | 0x02 | 0x04 | 0x10 | 0x20 ??? Not implemented correctly //************************************************************************************************** class CmdGnuCapOPT : public CmdBase { private : virtual bool bValidate( void ); public : // Options which are floating point values wxString m_osABSTOL; wxString m_osCHGTOL; wxString m_osDAMPMAX; wxString m_osDAMPMIN; wxString m_osDEFL; wxString m_osDEFW; wxString m_osDEFAD; wxString m_osDEFAS; wxString m_osDTMIN; wxString m_osDTRATIO; wxString m_osFLOOR; wxString m_osGMIN; wxString m_osRELTOL; wxString m_osROUND; wxString m_osSHORT; wxString m_osTEMP; wxString m_osTNOM; wxString m_osTRREJECT; wxString m_osTRSTEPG; wxString m_osTRSTEPH; wxString m_osTRSTEPS; wxString m_osTRTOL; wxString m_osVFLOOR; wxString m_osVMAX; wxString m_osVMIN; wxString m_osVNTOL; // Options which are integer values wxString m_osDAMPST; wxString m_osHARMS; wxString m_osITL1; wxString m_osITL2; wxString m_osITL3; wxString m_osITL4; wxString m_osITL5; wxString m_osITL6; wxString m_osITL7; wxString m_osITL8; wxString m_osITERMIN; wxString m_osNUMDGT; wxString m_osRECURS; wxString m_osTRANSITS; // Options which are string values wxString m_osMETHOD; wxString m_osMODE; wxString m_osORDER; wxString m_osPHASE; // Options which are boolean values bool m_bBYPASS; bool m_bCSTRAY; bool m_bFBBYPASS; bool m_bINCMODE; bool m_bLUBYPASS; bool m_bOPTS; bool m_bQUITCONV; bool m_bRSTRAY; bool m_bTRACEL; CmdGnuCapOPT( void ); virtual ~CmdGnuCapOPT( ); virtual bool bSetDefaults( void ); virtual bool bParse ( void ); virtual bool bFormat( void ); CmdGnuCapOPT & operator = ( const CmdNgSpiceOPT & roCmdOPT ); void Print( const wxString & rosPrefix=wxT(" ") ); }; //************************************************************************************************** #endif // CMDGCPOPT_HPP gspiceui-1.1.00+dfsg/src/gnucap/commands/CmdGnuCapTR.hpp0000644000000000000000000000536612476467557021504 0ustar rootroot//************************************************************************************************** // CmdGnuCapTR.hpp * // ----------------- * // Description : This class contains values associated with the GNU-Cap TRANSIENT command. It * // inherits from the class CmdBase. * // Started : 2008-03-07 * // Last Update : 2015-03-07 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef CMDGCPTR_HPP #define CMDGCPTR_HPP // Application Includes #include "TypeDefs.hpp" #include "base/CmdBase.hpp" #include "ngspice/commands/CmdNgSpiceTR.hpp" #include "utility/CnvtType.hpp" class CmdNgSpiceTR; // wxWidgets Includes #include //************************************************************************************************** class CmdGnuCapTR : public CmdBase { private : virtual bool bValidate( void ); public : wxString m_osStart; // The sweep start value wxString m_osStop; // The sweep stop value wxString m_osStep; // The sweep step value eTypeInitC m_eInitC; // The sweep scale type wxString m_osTempC; // The analysis temperature CmdGnuCapTR( void ); virtual ~CmdGnuCapTR( ); virtual bool bSetDefaults( void ); virtual bool bParse ( void ); virtual bool bFormat( void ); CmdGnuCapTR & operator = ( const CmdNgSpiceTR & roCmdTR ); void Print( const wxString & rosPrefix=wxT(" ") ); }; //************************************************************************************************** #endif // CMDGCPTR_HPP gspiceui-1.1.00+dfsg/src/gnucap/commands/CmdGnuCapGEN.hpp0000644000000000000000000000654312513707103021536 0ustar rootroot//************************************************************************************************** // CmdGnuCapGEN.hpp * // ------------------ * // Description : This class contains values associated with the GNU-Cap GENERATOR command. It * // inherits from the class CmdBase. * // Started : 2008-03-11 * // Last Update : 2015-04-16 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef CMDGCPGEN_HPP #define CMDGCPGEN_HPP // Application Includes #include "TypeDefs.hpp" #include "base/CmdBase.hpp" #include "utility/CnvtType.hpp" #include "netlist/CpntNgsIndSrc.hpp" class CpntNgsIndSrc; // Local Macro and/or Constant Declarations #define GCP_AMPLITUDE wxT("1.0") #define GCP_OFFSET wxT("0.0") #define GCP_SINFREQ wxT("1.0K") #define GCP_SINPHASE wxT("0.0") #define GCP_PULINITIAL wxT("0.0") #define GCP_PULMIN wxT("0.0") #define GCP_PULMAX wxT("0.0") #define GCP_PULDELAY wxT("0.0m") #define GCP_PULRISE wxT("0.0m") #define GCP_PULWIDTH wxT("0.0m") #define GCP_PULFALL wxT("0.0m") #define GCP_PULPERIOD wxT("0.0m") //************************************************************************************************** class CmdGnuCapGEN : public CmdBase { private : virtual bool bValidate( void ); public : // Overall source characteristics wxString m_osAmplitude; wxString m_osOffset; // Sinusoidal source characteristics wxString m_osSinFreq; wxString m_osSinPhase; // Pulse source characteristics wxString m_osPulInitial; wxString m_osPulMin; wxString m_osPulMax; wxString m_osPulDelay; wxString m_osPulRise; wxString m_osPulWidth; wxString m_osPulFall; wxString m_osPulPeriod; CmdGnuCapGEN( void ); virtual ~CmdGnuCapGEN( ); virtual bool bSetDefaults( void ); virtual bool bParse ( void ); virtual bool bFormat( void ); CmdGnuCapGEN & operator = ( const CpntNgsIndSrc & roIndSrc ); void Print( const wxString & rosPrefix=wxT(" ") ); }; //************************************************************************************************** #endif // CMDGCPGEN_HPP gspiceui-1.1.00+dfsg/src/gnucap/commands/CmdGnuCapTR.cpp0000644000000000000000000002530512446255320021446 0ustar rootroot//************************************************************************************************** // CmdGnuCapTR.cpp * // ----------------- * // Started : 2008-03-07 * // Last Update : 2014-12-23 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "CmdGnuCapTR.hpp" //************************************************************************************************** // Constructor. CmdGnuCapTR::CmdGnuCapTR( void ) { bSetDefaults( ); } //************************************************************************************************** // Destructor. CmdGnuCapTR::~CmdGnuCapTR( ) { } //************************************************************************************************** // Check that the object attributes are valid. // // Return Values : // true - Success // false - Failure bool CmdGnuCapTR::bValidate( void ) { double df1, df2, df3; CmdBase::bValidate( ); // Check the sweep start and stop values if( ! CnvtType::bStrToFlt( m_osStart, &df1 ) ) SetErrMsg( wxT("Invalid sweep start value.") ); if( ! CnvtType::bStrToFlt( m_osStop, &df2 ) ) SetErrMsg( wxT("Invalid sweep stop value.") ); if( df2 < df1 ) SetErrMsg( wxT("Start value greater than stop value.") ); // Check the sweep step value and initial conditions if( ! CnvtType::bStrToFlt( m_osStep, &df3 ) ) SetErrMsg( wxT("Invalid sweep step value.") ); if( df3 <= 0.0 ) SetErrMsg( wxT("Step value less than or equal to zero.") ); switch( m_eInitC ) { case eINITC_WARM : case eINITC_UICS : case eINITC_COLD : break; default : SetErrMsg( wxT("Invalid initial conditions value.") ); } // Set the analysis temperature if( ! CnvtType::bStrToFlt( m_osTempC, &df3 ) ) SetErrMsg( wxT("Invalid analysis temperature value.") ); return( bIsValid( ) ); } //************************************************************************************************** // Set the object attributes to they're default values. // // Return Values : // true - Success // false - Failure bool CmdGnuCapTR::bSetDefaults( void ) { CmdBase::bSetDefaults( ); m_eSimEng = eSIMR_GNUCAP; m_eCmdType = eCMD_TR; m_osStart = wxT("0.0m"); m_osStop = wxT("100.0m"); m_osStep = wxT("10.0m"); m_eInitC = eINITC_WARM; m_osTempC = wxT("27.0"); return( true ); } //************************************************************************************************** // Parse the command string. // // Eg.s : .TR 0.00 100.00m 10.00m TE 30.00 COLD BASIC // .TR 0.00 100.00m 10.00m TE 30.00 UIC BASIC // .TR 0.00 100.00m 10.00m TE 30.00 BASIC // // Return Values : // true - Success // false - Failure bool CmdGnuCapTR::bParse( void ) { wxStringTokenizer ostk1; wxString os1; double df1; int i1; // Clear the object attributes os1 = (wxString &) *this; bSetDefaults( ); assign( os1 ); // Tokenize the command string ostk1.SetString( *this ); i1 = ostk1.CountTokens( ); if( i1!=7 && i1!=8 ) return( bValidate( ) ); // Check command type os1 = ostk1.GetNextToken( ).Left( 3 ).Upper( ); if( os1 != wxT(".TR") ) return( bValidate( ) ); // Extract the start time os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osStart = os1; else return( bValidate( ) ); // Extract the stop time os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osStop = os1; else return( bValidate( ) ); // Extract the step increment os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osStep = os1; else return( bValidate( ) ); // Extract the analysis temperature os1 = ostk1.GetNextToken( ); if( os1.Upper( ) == wxT("TE") ) { os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osTempC = os1; else return( bValidate( ) ); } // Extract the initial conditions if( ostk1.CountTokens( ) > 1 ) { os1 = ostk1.GetNextToken( ); os1.MakeUpper( ); if( os1 == wxT("COLD") ) m_eInitC = eINITC_COLD; else if( os1 == wxT("UIC") ) m_eInitC = eINITC_UICS; else return( bValidate( ) ); } else m_eInitC = eINITC_WARM; // Check that the last field is "BASIC" if( ostk1.GetNextToken( ).Upper( ) != wxT("BASIC") ) return( bValidate( ) ); return( bValidate( ) ); } //************************************************************************************************** // Format the command string. // // Return Values : // true - Success // false - Failure bool CmdGnuCapTR::bFormat( void ) { wxString osCmd, os1; // Set the command name osCmd = wxT(".TR"); // Set sweep parameters osCmd << wxT(' ') << m_osStart; osCmd << wxT(' ') << m_osStop; osCmd << wxT(' ') << m_osStep; // Set analysis temperature osCmd << wxT(" TE ") << m_osTempC; // Set the initial conditions switch( m_eInitC ) { case eINITC_COLD : osCmd << wxT(" COLD"); break; case eINITC_UICS : osCmd << wxT(" UICS"); break; case eINITC_WARM : break; default : break; } // Append format modifier osCmd << wxT(" BASIC"); assign( osCmd ); return( bValidate( ) ); } //************************************************************************************************** // Copy the contents of a CmdNgSpiceTR object. // // Argument List : // roCmdTR - A reference to a CmdNgSpiceTR object // // Return Values : // A reference to this object CmdGnuCapTR & CmdGnuCapTR::operator = ( const CmdNgSpiceTR & roCmdTR ) { (CmdBase &) *this = (CmdBase &) roCmdTR; m_osStart = roCmdTR.m_osStart; m_osStop = roCmdTR.m_osStop; m_osStep = roCmdTR.m_osStep; m_eInitC = roCmdTR.m_eInitC; bFormat( ); return( *this ); } //************************************************************************************************** // Print the object attributes. // // Argument List : // rosPrefix - A prefix to every line displayed (usually just spaces) void CmdGnuCapTR::Print( const wxString & rosPrefix ) { CmdBase::Print( rosPrefix + wxT("CmdBase::") ); std::cout << rosPrefix.mb_str( ) << "m_osStart : " << m_osStart.mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osStop : " << m_osStop .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osStep : " << m_osStep .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_eInitC : "; switch( m_eInitC ) { case eINITC_WARM : std::cout << "eINITC_COLD\n"; break; case eINITC_UICS : std::cout << "eINITC_UICS\n"; break; case eINITC_COLD : std::cout << "eINITC_COLD\n"; break; case eINITC_NONE : std::cout << "eINITC_NONE\n"; break; default : std::cout << "Invalid\n"; break; } std::cout << rosPrefix.mb_str( ) << "m_osTempC : " << m_osTempC.mb_str( ) << '\n'; } //************************************************************************************************** // Test Utility * //************************************************************************************************** #ifdef TEST_CMDGNUCAPTR using namespace std; // Function prototypes void Usage( char * psAppName ); //************************************************************************************************** int main( int argc, char * argv[ ] ) { wxString osCmd; wxString os1; // Validate the argument count passed to the application if( argc > 2 ) { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } // Process the command line arguments os1 = wxConvLibc.cMB2WC( argv[ 1 ] ); if( argc > 1 ) { if( os1 == wxT("-h") ) { Usage( argv[ 0 ] ); exit( EXIT_SUCCESS ); } else { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } } // Display the utility banner cout << "\n Class CmdGnuCapTR Test Utility" << "\n Version 1.02 (12/08/2011)\n"; // Create a GNU-CAP Transient command object CmdGnuCapTR tCmd_TR; // Use the following command example to check the formatter and the parser : osCmd = wxT(".TR 0.00 100.00m 10.00m TE 30.00 COLD BASIC"); // Set things up for a formatter test tCmd_TR.m_osStart = wxT("0.00"); tCmd_TR.m_osStop = wxT("100.00m"); tCmd_TR.m_osStep = wxT("10.00m"); tCmd_TR.m_osTempC = wxT("30.00"); tCmd_TR.m_eInitC = eINITC_COLD; cout << "\nRun Formatter : " << ( tCmd_TR.bFormat( ) ? "OK" : "FAULT" ); cout << "\nTest Cmd Format : " << ( tCmd_TR == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\ntCmd_TR Contents : " << tCmd_TR.mb_str( ) << '\n'; // Set things up for a parser test tCmd_TR.bSetString( osCmd ); cout << "\nRun Parser : " << ( tCmd_TR.bParse( ) ? "OK" : "FAULT" ); tCmd_TR.bFormat( ); cout << "\nTest Cmd Format : " << ( tCmd_TR == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\ntCmd_TR Contents : " << tCmd_TR.mb_str( ) << '\n'; cout << '\n'; exit( EXIT_SUCCESS ); } //************************************************************************************************** void Usage( char * psAppName ) { cout << "\nUsage : " << psAppName << " [-OPTIONS]" << "\nOptions :" << "\n -h : Print usage (this message)\n"; } #endif // TEST_CMDGNUCAPTR //************************************************************************************************** gspiceui-1.1.00+dfsg/src/gnucap/commands/CmdGnuCapOPT.cpp0000644000000000000000000011117512452432621021562 0ustar rootroot//************************************************************************************************** // CmdGnuCapOPT.cpp * // ------------------ * // Started : 2006-09-11 * // Last Update : 2015-01-05 * // Copyright : (C) 2006 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "CmdGnuCapOPT.hpp" //************************************************************************************************** // Constructor. CmdGnuCapOPT::CmdGnuCapOPT( void ) { bSetDefaults( ); } //************************************************************************************************** // Destructor. CmdGnuCapOPT::~CmdGnuCapOPT( ) { } //************************************************************************************************** // Check that the object attributes are valid. // // Return Values : // true - Success // false - Failure bool CmdGnuCapOPT::bValidate( void ) { wxString os1=wxT("Invalid value for "); double df1; long li1; CmdBase::bValidate( ); if( ! CnvtType::bStrToFlt( m_osABSTOL , &df1 ) ) SetErrMsg( os1 + wxT("ABSTOL.") ); if( ! CnvtType::bStrToFlt( m_osCHGTOL , &df1 ) ) SetErrMsg( os1 + wxT("CHGTOL.") ); if( ! CnvtType::bStrToFlt( m_osDAMPMAX , &df1 ) ) SetErrMsg( os1 + wxT("DAMPMAX.") ); if( ! CnvtType::bStrToFlt( m_osDAMPMIN , &df1 ) ) SetErrMsg( os1 + wxT("DAMPMIN.") ); if( ! CnvtType::bStrToFlt( m_osDEFAD , &df1 ) ) SetErrMsg( os1 + wxT("DEFAD.") ); if( ! CnvtType::bStrToFlt( m_osDEFAS , &df1 ) ) SetErrMsg( os1 + wxT("DEFAS.") ); if( ! CnvtType::bStrToFlt( m_osDEFL , &df1 ) ) SetErrMsg( os1 + wxT("DEFL.") ); if( ! CnvtType::bStrToFlt( m_osDEFW , &df1 ) ) SetErrMsg( os1 + wxT("DEFW.") ); if( ! CnvtType::bStrToFlt( m_osDTMIN , &df1 ) ) SetErrMsg( os1 + wxT("DTMIN.") ); if( ! CnvtType::bStrToFlt( m_osDTRATIO , &df1 ) ) SetErrMsg( os1 + wxT("DTRATIO.") ); if( ! CnvtType::bStrToFlt( m_osFLOOR , &df1 ) ) SetErrMsg( os1 + wxT("FLOOR.") ); if( ! CnvtType::bStrToFlt( m_osGMIN , &df1 ) ) SetErrMsg( os1 + wxT("GMIN.") ); if( ! CnvtType::bStrToFlt( m_osRELTOL , &df1 ) ) SetErrMsg( os1 + wxT("RELTOL.") ); if( ! CnvtType::bStrToFlt( m_osROUND , &df1 ) ) SetErrMsg( os1 + wxT("ROUND.") ); if( ! CnvtType::bStrToFlt( m_osSHORT , &df1 ) ) SetErrMsg( os1 + wxT("SHORT.") ); if( ! CnvtType::bStrToFlt( m_osTEMP , &df1 ) ) SetErrMsg( os1 + wxT("TEMP.") ); if( ! CnvtType::bStrToFlt( m_osTNOM , &df1 ) ) SetErrMsg( os1 + wxT("TNOM.") ); if( ! CnvtType::bStrToFlt( m_osTRREJECT, &df1 ) ) SetErrMsg( os1 + wxT("TRREJECT.") ); if( ! CnvtType::bStrToFlt( m_osTRSTEPG , &df1 ) ) SetErrMsg( os1 + wxT("TRSTEPGROW.") ); if( ! CnvtType::bStrToFlt( m_osTRSTEPH , &df1 ) ) SetErrMsg( os1 + wxT("TRSTEPHOLD.") ); if( ! CnvtType::bStrToFlt( m_osTRSTEPS , &df1 ) ) SetErrMsg( os1 + wxT("TRSTEPSHRINK.") ); if( ! CnvtType::bStrToFlt( m_osTRTOL , &df1 ) ) SetErrMsg( os1 + wxT("TRTOL.") ); if( ! CnvtType::bStrToFlt( m_osVFLOOR , &df1 ) ) SetErrMsg( os1 + wxT("VFLOOR.") ); if( ! CnvtType::bStrToFlt( m_osVMAX , &df1 ) ) SetErrMsg( os1 + wxT("VMAX.") ); if( ! CnvtType::bStrToFlt( m_osVMIN , &df1 ) ) SetErrMsg( os1 + wxT("VMIN.") ); if( ! CnvtType::bStrToFlt( m_osVNTOL , &df1 ) ) SetErrMsg( os1 + wxT("VNTOL.") ); if( ! CnvtType::bStrToInt( m_osDAMPST , &li1 ) ) SetErrMsg( os1 + wxT("DAMPST.") ); if( ! CnvtType::bStrToInt( m_osHARMS , &li1 ) ) SetErrMsg( os1 + wxT("HARMONICS.") ); if( ! CnvtType::bStrToInt( m_osITERMIN , &li1 ) ) SetErrMsg( os1 + wxT("ITERMIN.") ); if( ! CnvtType::bStrToInt( m_osITL1 , &li1 ) ) SetErrMsg( os1 + wxT("ITL1.") ); if( ! CnvtType::bStrToInt( m_osITL2 , &li1 ) ) SetErrMsg( os1 + wxT("ITL2.") ); if( ! CnvtType::bStrToInt( m_osITL3 , &li1 ) ) SetErrMsg( os1 + wxT("ITL3.") ); if( ! CnvtType::bStrToInt( m_osITL4 , &li1 ) ) SetErrMsg( os1 + wxT("ITL4.") ); if( ! CnvtType::bStrToInt( m_osITL5 , &li1 ) ) SetErrMsg( os1 + wxT("ITL5.") ); if( ! CnvtType::bStrToInt( m_osITL6 , &li1 ) ) SetErrMsg( os1 + wxT("ITL6.") ); if( ! CnvtType::bStrToInt( m_osITL7 , &li1 ) ) SetErrMsg( os1 + wxT("ITL7.") ); if( ! CnvtType::bStrToInt( m_osITL8 , &li1 ) ) SetErrMsg( os1 + wxT("ITL8.") ); if( ! CnvtType::bStrToInt( m_osNUMDGT , &li1 ) ) SetErrMsg( os1 + wxT("NUMDGT.") ); if( ! CnvtType::bStrToInt( m_osRECURS , &li1 ) ) SetErrMsg( os1 + wxT("RECURS.") ); if( ! CnvtType::bStrToInt( m_osTRANSITS, &li1 ) ) SetErrMsg( os1 + wxT("TRANSITS.") ); if( m_osMETHOD.IsEmpty( ) ) SetErrMsg( os1 + wxT("METHOD.") ); if( m_osMODE .IsEmpty( ) ) SetErrMsg( os1 + wxT("MODE.") ); if( m_osORDER .IsEmpty( ) ) SetErrMsg( os1 + wxT("ORDER.") ); if( m_osPHASE .IsEmpty( ) ) SetErrMsg( os1 + wxT("PHASE.") ); return( bIsValid( ) ); } //************************************************************************************************** // Set the object attributes to they're default values. // // Return Values : // true - Success // false - Failure bool CmdGnuCapOPT::bSetDefaults( void ) { CmdBase::bSetDefaults( ); m_eSimEng = eSIMR_GNUCAP; m_eCmdType = eCMD_OPT; m_osABSTOL = GCP_ABSTOL; m_osCHGTOL = GCP_CHGTOL; m_osDAMPMAX = GCP_DAMPMAX; m_osDAMPMIN = GCP_DAMPMIN; m_osDAMPST = GCP_DAMPST; m_osDEFAD = GCP_DEFAD; m_osDEFAS = GCP_DEFAS; m_osDEFL = GCP_DEFL; m_osDEFW = GCP_DEFW; m_osDTMIN = GCP_DTMIN; m_osDTRATIO = GCP_DTRATIO; m_osFLOOR = GCP_FLOOR; m_osGMIN = GCP_GMIN; m_osRELTOL = GCP_RELTOL; m_osROUND = GCP_ROUND; m_osSHORT = GCP_SHORT; m_osTEMP = GCP_TEMP; m_osTNOM = GCP_TNOM; m_osTRREJECT = GCP_TRREJECT; m_osTRSTEPG = GCP_TRSTEPG; m_osTRSTEPH = GCP_TRSTEPH; m_osTRSTEPS = GCP_TRSTEPS; m_osTRTOL = GCP_TRTOL; m_osVFLOOR = GCP_VFLOOR; m_osVMAX = GCP_VMAX; m_osVMIN = GCP_VMIN; m_osVNTOL = GCP_VNTOL; m_osHARMS = GCP_HARMS; m_osITL1 = GCP_ITL1; m_osITL2 = GCP_ITL2; m_osITL3 = GCP_ITL3; m_osITL4 = GCP_ITL4; m_osITL5 = GCP_ITL5; m_osITL6 = GCP_ITL6; m_osITL7 = GCP_ITL7; m_osITL8 = GCP_ITL8; m_osITERMIN = GCP_ITERMIN; m_osNUMDGT = GCP_NUMDGT; m_osRECURS = GCP_RECURS; m_osTRANSITS = GCP_TRANSITS; m_osMETHOD = GCP_METHOD; m_osMODE = GCP_MODE; m_osORDER = GCP_ORDER; m_osPHASE = GCP_PHASE; m_bBYPASS = GCP_BYPASS; m_bCSTRAY = GCP_CSTRAY; m_bFBBYPASS = GCP_FBBYPASS; m_bINCMODE = GCP_INCMODE; m_bLUBYPASS = GCP_LUBYPASS; m_bOPTS = GCP_OPTS; m_bQUITCONV = GCP_QUITCONV; m_bRSTRAY = GCP_RSTRAY; m_bTRACEL = GCP_TRACEL; return( true ); } //************************************************************************************************** // Parse the OPTIONS command string. // // Eg.s : // .OPTIONS NOOPTS // .OPTIONS ABSTOL=1.20p CHGTOL=12.00f DAMPMAX=900.00m DAMPMIN=600.00m DEFAD=11.00f DEFAS=11.00f // DEFL=120.00u DEFW=120.00u DTMIN=1.10p DTRATIO=1.10Giga FLOOR=1.10E-21 GMIN=1.20p // RELTOL=3.00m ROUND=1.0E-10 SHORT=110.00n TEMP=30.00 TNOM=35.00 TRREJECT=600.00m // TRSTEPGROW=3.00 TRSTEPHOLD=100.00 TRSTEPSHRINK=9.00 TRTOL=9.00 VFLOOR=1.10f VMAX=40.00 // VMIN=-20.00 VNTOL=3.00u DAMPST=1 HARMONICS=10 ITL1=200 ITL2=70 ITL3=10 ITL4=30 ITL5=2 // ITL6=2 ITL7=2 ITL8=200 ITERMIN=2 NUMDGT=6 RECURS=10 TRANSITS=3 NOBYP NOCSTRAY NOFBBYP // NOINC NOLUBYP NOOPTS QUITCONV RSTRAY NOTRACEL METHOD=EULER MODE=ANALOG ORDER=FORWARD // PHASE=RADIANS // // Return Values : // true - Success // false - Failure bool CmdGnuCapOPT::bParse( void ) { wxStringTokenizer ostk1; wxString os1, os2; size_t szt1; // Clear the object attributes os1 = (wxString &) *this; bSetDefaults( ); assign( os1 ); // Tokenize the command string ostk1.SetString( *this ); if( ostk1.CountTokens( ) < 2 ) return( bValidate( ) ); // Check command type os1 = ostk1.GetNextToken( ).Left( 4 ).Upper( ); if( os1 != wxT(".OPT") ) return( bValidate( ) ); // Extract each parameter value while( ostk1.HasMoreTokens( ) ) { // Extract the field name and the associated value os1 = ostk1.GetNextToken( ); os2 = wxT(""); if( ( szt1=os1.find( wxT("=") ) ) != wxString::npos ) { os2 = os1.Right( os1.Length( )-szt1-1 ); os1 = os1.Left( szt1 ); } // Set the object attribute values if( os1.StartsWith( wxT("ABSTOL") ) ) m_osABSTOL = os2; else if( os1.StartsWith( wxT("CHGTOL") ) ) m_osCHGTOL = os2; else if( os1.StartsWith( wxT("DAMPMAX") ) ) m_osDAMPMAX = os2; else if( os1.StartsWith( wxT("DAMPMIN") ) ) m_osDAMPMIN = os2; else if( os1.StartsWith( wxT("DEFAD") ) ) m_osDEFAD = os2; else if( os1.StartsWith( wxT("DEFAS") ) ) m_osDEFAS = os2; else if( os1.StartsWith( wxT("DEFL") ) ) m_osDEFL = os2; else if( os1.StartsWith( wxT("DEFW") ) ) m_osDEFW = os2; else if( os1.StartsWith( wxT("DTMIN") ) ) m_osDTMIN = os2; else if( os1.StartsWith( wxT("DTRATIO") ) ) m_osDTRATIO = os2; else if( os1.StartsWith( wxT("FLOOR") ) ) m_osFLOOR = os2; else if( os1.StartsWith( wxT("GMIN") ) ) m_osGMIN = os2; else if( os1.StartsWith( wxT("RELTOL") ) ) m_osRELTOL = os2; else if( os1.StartsWith( wxT("ROUND") ) ) m_osROUND = os2; else if( os1.StartsWith( wxT("SHORT") ) ) m_osSHORT = os2; else if( os1.StartsWith( wxT("TEMP") ) ) m_osTEMP = os2; else if( os1.StartsWith( wxT("TNOM") ) ) m_osTNOM = os2; else if( os1.StartsWith( wxT("TRREJECT") ) ) m_osTRREJECT = os2; else if( os1.StartsWith( wxT("TRSTEPGR") ) ) m_osTRSTEPG = os2; else if( os1.StartsWith( wxT("TRSTEPHO") ) ) m_osTRSTEPH = os2; else if( os1.StartsWith( wxT("TRSTEPSH") ) ) m_osTRSTEPS = os2; else if( os1.StartsWith( wxT("TRTOL") ) ) m_osTRTOL = os2; else if( os1.StartsWith( wxT("VFLOOR") ) ) m_osVFLOOR = os2; else if( os1.StartsWith( wxT("VMAX") ) ) m_osVMAX = os2; else if( os1.StartsWith( wxT("VMIN") ) ) m_osVMIN = os2; else if( os1.StartsWith( wxT("VNTOL") ) ) m_osVNTOL = os2; else if( os1.StartsWith( wxT("DAMPST") ) ) m_osDAMPST = os2; else if( os1.StartsWith( wxT("HARMONIC") ) ) m_osHARMS = os2; else if( os1.StartsWith( wxT("ITL1") ) ) m_osITL1 = os2; else if( os1.StartsWith( wxT("ITL2") ) ) m_osITL2 = os2; else if( os1.StartsWith( wxT("ITL3") ) ) m_osITL3 = os2; else if( os1.StartsWith( wxT("ITL4") ) ) m_osITL4 = os2; else if( os1.StartsWith( wxT("ITL5") ) ) m_osITL5 = os2; else if( os1.StartsWith( wxT("ITL6") ) ) m_osITL6 = os2; else if( os1.StartsWith( wxT("ITL7") ) ) m_osITL7 = os2; else if( os1.StartsWith( wxT("ITL8") ) ) m_osITL8 = os2; else if( os1.StartsWith( wxT("ITERMIN") ) ) m_osITERMIN = os2; else if( os1.StartsWith( wxT("NUMDGT") ) ) m_osNUMDGT = os2; else if( os1.StartsWith( wxT("RECURS") ) ) m_osRECURS = os2; else if( os1.StartsWith( wxT("TRANSITS") ) ) m_osTRANSITS = os2; else if( os1.StartsWith( wxT("METHOD") ) ) m_osMETHOD = os2; else if( os1.StartsWith( wxT("MODE") ) ) m_osMODE = os2; else if( os1.StartsWith( wxT("ORDER") ) ) m_osORDER = os2; else if( os1.StartsWith( wxT("PHASE") ) ) m_osPHASE = os2; else if( os1.StartsWith( wxT("BYPASS") ) ) m_bBYPASS = true; else if( os1.StartsWith( wxT("NOBYP") ) ) m_bBYPASS = false; else if( os1.StartsWith( wxT("CSTRAY" ) ) ) m_bCSTRAY = true; else if( os1.StartsWith( wxT("NOCSTRAY") ) ) m_bCSTRAY = false; else if( os1.StartsWith( wxT("FBBYPASS") ) ) m_bFBBYPASS = true; else if( os1.StartsWith( wxT("NOFBBYP") ) ) m_bFBBYPASS = false; else if( os1.StartsWith( wxT("INCMODE") ) ) m_bINCMODE = true; else if( os1.StartsWith( wxT("NOINC") ) ) m_bINCMODE = false; else if( os1.StartsWith( wxT("LUBYPASS") ) ) m_bLUBYPASS = true; else if( os1.StartsWith( wxT("NOLUBYP") ) ) m_bLUBYPASS = false; else if( os1.StartsWith( wxT("OPTS") ) ) m_bOPTS = true; else if( os1.StartsWith( wxT("NOOPTS") ) ) m_bOPTS = false; else if( os1.StartsWith( wxT("QUITCONV") ) ) m_bQUITCONV = true; else if( os1.StartsWith( wxT("NOQUITCO") ) ) m_bQUITCONV = false; else if( os1.StartsWith( wxT("RSTRAY") ) ) m_bRSTRAY = true; else if( os1.StartsWith( wxT("NORSTRAY") ) ) m_bRSTRAY = false; else if( os1.StartsWith( wxT("TRACEL") ) ) m_bTRACEL = true; else if( os1.StartsWith( wxT("NOTRACEL") ) ) m_bTRACEL = false; } return( bValidate( ) ); } //************************************************************************************************** // Format the OPTIONS command string. // // Return Values : // true - Success // false - Failure bool CmdGnuCapOPT::bFormat( void ) { wxString os1, os2; double df1, df2; long li1, li2; os1 = wxT(".OPTIONS"); CnvtType::bStrToFlt( m_osABSTOL , &df1 ); CnvtType::bStrToFlt( GCP_ABSTOL , &df2 ); if( df1 != df2 ) os1 << wxT(" ABSTOL=") << m_osABSTOL; CnvtType::bStrToFlt( m_osCHGTOL , &df1 ); CnvtType::bStrToFlt( GCP_CHGTOL , &df2 ); if( df1 != df2 ) os1 << wxT(" CHGTOL=") << m_osCHGTOL; CnvtType::bStrToFlt( m_osDAMPMAX , &df1 ); CnvtType::bStrToFlt( GCP_DAMPMAX , &df2 ); if( df1 != df2 ) os1 << wxT(" DAMPMAX=") << m_osDAMPMAX; CnvtType::bStrToFlt( m_osDAMPMIN , &df1 ); CnvtType::bStrToFlt( GCP_DAMPMIN , &df2 ); if( df1 != df2 ) os1 << wxT(" DAMPMIN=") << m_osDAMPMIN; CnvtType::bStrToFlt( m_osDEFAD , &df1 ); CnvtType::bStrToFlt( GCP_DEFAD , &df2 ); if( df1 != df2 ) os1 << wxT(" DEFAD=") << m_osDEFAD; CnvtType::bStrToFlt( m_osDEFAS , &df1 ); CnvtType::bStrToFlt( GCP_DEFAS , &df2 ); if( df1 != df2 ) os1 << wxT(" DEFAS=") << m_osDEFAS; CnvtType::bStrToFlt( m_osDEFL , &df1 ); CnvtType::bStrToFlt( GCP_DEFL , &df2 ); if( df1 != df2 ) os1 << wxT(" DEFL=") << m_osDEFL; CnvtType::bStrToFlt( m_osDEFW , &df1 ); CnvtType::bStrToFlt( GCP_DEFW , &df2 ); if( df1 != df2 ) os1 << wxT(" DEFW=") << m_osDEFW; CnvtType::bStrToFlt( m_osDTMIN , &df1 ); CnvtType::bStrToFlt( GCP_DTMIN , &df2 ); if( df1 != df2 ) os1 << wxT(" DTMIN=") << m_osDTMIN; CnvtType::bStrToFlt( m_osDTRATIO , &df1 ); CnvtType::bStrToFlt( GCP_DTRATIO , &df2 ); if( df1 != df2 ) os1 << wxT(" DTRATIO=") << m_osDTRATIO; CnvtType::bStrToFlt( m_osFLOOR , &df1 ); CnvtType::bStrToFlt( GCP_FLOOR , &df2 ); if( df1 != df2 ) os1 << wxT(" FLOOR=") << m_osFLOOR; CnvtType::bStrToFlt( m_osGMIN , &df1 ); CnvtType::bStrToFlt( GCP_GMIN , &df2 ); if( df1 != df2 ) os1 << wxT(" GMIN=") << m_osGMIN; CnvtType::bStrToFlt( m_osRELTOL , &df1 ); CnvtType::bStrToFlt( GCP_RELTOL , &df2 ); if( df1 != df2 ) os1 << wxT(" RELTOL=") << m_osRELTOL; CnvtType::bStrToFlt( m_osROUND , &df1 ); CnvtType::bStrToFlt( GCP_ROUND , &df2 ); if( df1 != df2 ) os1 << wxT(" ROUND=") << m_osROUND; CnvtType::bStrToFlt( m_osSHORT , &df1 ); CnvtType::bStrToFlt( GCP_SHORT , &df2 ); if( df1 != df2 ) os1 << wxT(" SHORT=") << m_osSHORT; CnvtType::bStrToFlt( m_osTEMP , &df1 ); CnvtType::bStrToFlt( GCP_TEMP , &df2 ); if( df1 != df2 ) os1 << wxT(" TEMP=") << m_osTEMP; CnvtType::bStrToFlt( m_osTNOM , &df1 ); CnvtType::bStrToFlt( GCP_TNOM , &df2 ); if( df1 != df2 ) os1 << wxT(" TNOM=") << m_osTNOM; CnvtType::bStrToFlt( m_osTRREJECT, &df1 ); CnvtType::bStrToFlt( GCP_TRREJECT, &df2 ); if( df1 != df2 ) os1 << wxT(" TRREJECT=") << m_osTRREJECT; CnvtType::bStrToFlt( m_osTRSTEPG , &df1 ); CnvtType::bStrToFlt( GCP_TRSTEPG , &df2 ); if( df1 != df2 ) os1 << wxT(" TRSTEPGROW=") << m_osTRSTEPG; CnvtType::bStrToFlt( m_osTRSTEPH , &df1 ); CnvtType::bStrToFlt( GCP_TRSTEPH , &df2 ); if( df1 != df2 ) os1 << wxT(" TRSTEPHOLD=") << m_osTRSTEPH; CnvtType::bStrToFlt( m_osTRSTEPS , &df1 ); CnvtType::bStrToFlt( GCP_TRSTEPS , &df2 ); if( df1 != df2 ) os1 << wxT(" TRSTEPSHRINK=") << m_osTRSTEPS; CnvtType::bStrToFlt( m_osTRTOL , &df1 ); CnvtType::bStrToFlt( GCP_TRTOL , &df2 ); if( df1 != df2 ) os1 << wxT(" TRTOL=") << m_osTRTOL; CnvtType::bStrToFlt( m_osVFLOOR , &df1 ); CnvtType::bStrToFlt( GCP_VFLOOR , &df2 ); if( df1 != df2 ) os1 << wxT(" VFLOOR=") << m_osVFLOOR; CnvtType::bStrToFlt( m_osVMAX , &df1 ); CnvtType::bStrToFlt( GCP_VMAX , &df2 ); if( df1 != df2 ) os1 << wxT(" VMAX=") << m_osVMAX; CnvtType::bStrToFlt( m_osVMIN , &df1 ); CnvtType::bStrToFlt( GCP_VMIN , &df2 ); if( df1 != df2 ) os1 << wxT(" VMIN=") << m_osVMIN; CnvtType::bStrToFlt( m_osVNTOL , &df1 ); CnvtType::bStrToFlt( GCP_VNTOL , &df2 ); if( df1 != df2 ) os1 << wxT(" VNTOL=") << m_osVNTOL; CnvtType::bStrToInt( m_osDAMPST , &li1 ); CnvtType::bStrToInt( GCP_DAMPST , &li2 ); if( li1 != li2 ) os1 << wxT(" DAMPST=") << m_osDAMPST; CnvtType::bStrToInt( m_osHARMS , &li1 ); CnvtType::bStrToInt( GCP_HARMS , &li2 ); if( li1 != li2 ) os1 << wxT(" HARMONICS=") << m_osHARMS; CnvtType::bStrToInt( m_osITL1 , &li1 ); CnvtType::bStrToInt( GCP_ITL1 , &li2 ); if( li1 != li2 ) os1 << wxT(" ITL1=") << m_osITL1; CnvtType::bStrToInt( m_osITL2 , &li1 ); CnvtType::bStrToInt( GCP_ITL2 , &li2 ); if( li1 != li2 ) os1 << wxT(" ITL2=") << m_osITL2; CnvtType::bStrToInt( m_osITL3 , &li1 ); CnvtType::bStrToInt( GCP_ITL3 , &li2 ); if( li1 != li2 ) os1 << wxT(" ITL3=") << m_osITL3; CnvtType::bStrToInt( m_osITL4 , &li1 ); CnvtType::bStrToInt( GCP_ITL4 , &li2 ); if( li1 != li2 ) os1 << wxT(" ITL4=") << m_osITL4; CnvtType::bStrToInt( m_osITL5 , &li1 ); CnvtType::bStrToInt( GCP_ITL5 , &li2 ); if( li1 != li2 ) os1 << wxT(" ITL5=") << m_osITL5; CnvtType::bStrToInt( m_osITL6 , &li1 ); CnvtType::bStrToInt( GCP_ITL6 , &li2 ); if( li1 != li2 ) os1 << wxT(" ITL6=") << m_osITL6; CnvtType::bStrToInt( m_osITL7 , &li1 ); CnvtType::bStrToInt( GCP_ITL7 , &li2 ); if( li1 != li2 ) os1 << wxT(" ITL7=") << m_osITL7; CnvtType::bStrToInt( m_osITL8 , &li1 ); CnvtType::bStrToInt( GCP_ITL8 , &li2 ); if( li1 != li2 ) os1 << wxT(" ITL8=") << m_osITL8; CnvtType::bStrToInt( m_osITERMIN , &li1 ); CnvtType::bStrToInt( GCP_ITERMIN , &li2 ); if( li1 != li2 ) os1 << wxT(" ITERMIN=") << m_osITERMIN; CnvtType::bStrToInt( m_osNUMDGT , &li1 ); CnvtType::bStrToInt( GCP_NUMDGT , &li2 ); if( li1 != li2 ) os1 << wxT(" NUMDGT=") << m_osNUMDGT; CnvtType::bStrToInt( m_osRECURS , &li1 ); CnvtType::bStrToInt( GCP_RECURS , &li2 ); if( li1 != li2 ) os1 << wxT(" RECURS=") << m_osRECURS; CnvtType::bStrToInt( m_osTRANSITS, &li1 ); CnvtType::bStrToInt( GCP_TRANSITS, &li2 ); if( li1 != li2 ) os1 << wxT(" TRANSITS=") << m_osTRANSITS; os2 = m_osMETHOD.Upper( ); if( os2.CmpNoCase( GCP_METHOD ) ) os1 << wxT(" METHOD=") << os2; os2 = m_osMODE .Upper( ); if( os2.CmpNoCase( GCP_MODE ) ) os1 << wxT(" MODE=") << os2; os2 = m_osORDER .Upper( ); if( os2.CmpNoCase( GCP_ORDER ) ) os1 << wxT(" ORDER=") << os2; os2 = m_osPHASE .Upper( ); if( os2.CmpNoCase( GCP_PHASE ) ) os1 << wxT(" PHASE=") << os2; if( m_bBYPASS != GCP_BYPASS ) os1 << (m_bBYPASS ? wxT(" BYPASS") : wxT(" NOBYP") ); if( m_bCSTRAY != GCP_CSTRAY ) os1 << (m_bCSTRAY ? wxT(" CSTRAY") : wxT(" NOCSTRAY")); if( m_bFBBYPASS != GCP_FBBYPASS ) os1 << (m_bFBBYPASS ? wxT(" FBBYPASS") : wxT(" NOFBBYP") ); if( m_bINCMODE != GCP_INCMODE ) os1 << (m_bINCMODE ? wxT(" INCMODE") : wxT(" NOINC") ); if( m_bLUBYPASS != GCP_LUBYPASS ) os1 << (m_bLUBYPASS ? wxT(" LUBYP") : wxT(" NOLUBYP") ); if( m_bOPTS != GCP_OPTS ) os1 << (m_bOPTS ? wxT(" OPTS") : wxT(" NOOPTS") ); if( m_bQUITCONV != GCP_QUITCONV ) os1 << (m_bQUITCONV ? wxT(" QUITCONV") : wxT(" NOQUITCO")); if( m_bRSTRAY != GCP_RSTRAY ) os1 << (m_bRSTRAY ? wxT(" RSTRAY") : wxT(" NORSTRAY")); if( m_bTRACEL != GCP_TRACEL ) os1 << (m_bTRACEL ? wxT(" TRACEL") : wxT(" NOTRACEL")); assign( os1 ); return( bValidate( ) ); } //************************************************************************************************** // Copy the contents of a CmdNgSpiceOPT object. // // Argument List : // roCmdOPT - A reference to a CmdNgSpiceOPT object // // Return Values : // A reference to this object CmdGnuCapOPT & CmdGnuCapOPT::operator = ( const CmdNgSpiceOPT & roCmdOPT ) { (CmdBase &) *this = (CmdBase &) roCmdOPT; if( m_osABSTOL != GCP_ABSTOL ) m_osABSTOL = roCmdOPT.m_osABSTOL; if( m_osCHGTOL != GCP_CHGTOL ) m_osCHGTOL = roCmdOPT.m_osCHGTOL; //if( m_osDAMPMAX != GCP_DAMPMAX ) m_osDAMPMAX = roCmdOPT.m_osDAMPMAX; //if( m_osDAMPMIN != GCP_DAMPMIN ) m_osDAMPMIN = roCmdOPT.m_osDAMPMIN; //if( m_osDAMPST != GCP_DAMPST ) m_osDAMPST = roCmdOPT.m_osDAMPST; if( m_osDEFAD != GCP_DEFAD ) m_osDEFAD = roCmdOPT.m_osDEFAD; if( m_osDEFAS != GCP_DEFAS ) m_osDEFAS = roCmdOPT.m_osDEFAS; if( m_osDEFL != GCP_DEFL ) m_osDEFL = roCmdOPT.m_osDEFL; if( m_osDEFW != GCP_DEFW ) m_osDEFW = roCmdOPT.m_osDEFW; //if( m_osDTMIN != GCP_DTMIN ) m_osDTMIN = roCmdOPT.m_osDTMIN; //if( m_osDTRATIO != GCP_DTRATIO ) m_osDTRATIO = roCmdOPT.m_osDTRATIO; //if( m_osFLOOR != GCP_FLOOR ) m_osFLOOR = roCmdOPT.m_osFLOOR; if( m_osGMIN != GCP_GMIN ) m_osGMIN = roCmdOPT.m_osGMIN; if( m_osRELTOL != GCP_RELTOL ) m_osRELTOL = roCmdOPT.m_osRELTOL; //if( m_osROUND != GCP_ROUND ) m_osROUND = roCmdOPT.m_osROUND; //if( m_osSHORT != GCP_SHORT ) m_osSHORT = roCmdOPT.m_osSHORT; if( m_osTEMP != GCP_TEMP ) m_osTEMP = roCmdOPT.m_osTEMP; if( m_osTNOM != GCP_TNOM ) m_osTNOM = roCmdOPT.m_osTNOM; //if( m_osTRREJECT != GCP_TRREJECT ) m_osTRREJECT = roCmdOPT.m_osTRREJECT; //if( m_osTRSTEPG != GCP_TRSTEPG ) m_osTRSTEPG = roCmdOPT.m_osTRSTEPG; //if( m_osTRSTEPH != GCP_TRSTEPH ) m_osTRSTEPH = roCmdOPT.m_osTRSTEPH; //if( m_osTRSTEPS != GCP_TRSTEPS ) m_osTRSTEPS = roCmdOPT.m_osTRSTEPS; if( m_osTRTOL != GCP_TRTOL ) m_osTRTOL = roCmdOPT.m_osTRTOL; //if( m_osVFLOOR != GCP_VFLOOR ) m_osVFLOOR = roCmdOPT.m_osVFLOOR; //if( m_osVMAX != GCP_VMAX ) m_osVMAX = roCmdOPT.m_osVMAX; //if( m_osVMIN != GCP_VMIN ) m_osVMIN = roCmdOPT.m_osVMIN; if( m_osVNTOL != GCP_VNTOL ) m_osVNTOL = roCmdOPT.m_osVNTOL; //if( m_osHARMS != GCP_HARMS ) m_osHARMS = roCmdOPT.m_osHARMS; if( m_osITL1 != GCP_ITL1 ) m_osITL1 = roCmdOPT.m_osITL1; if( m_osITL2 != GCP_ITL2 ) m_osITL2 = roCmdOPT.m_osITL2; if( m_osITL3 != GCP_ITL3 ) m_osITL3 = roCmdOPT.m_osITL3; if( m_osITL4 != GCP_ITL4 ) m_osITL4 = roCmdOPT.m_osITL4; if( m_osITL5 != GCP_ITL5 ) m_osITL5 = roCmdOPT.m_osITL5; if( m_osITL6 != GCP_ITL6 ) m_osITL6 = roCmdOPT.m_osITL6; //if( m_osITL7 != GCP_ITL7 ) m_osITL7 = roCmdOPT.m_osITL7; //if( m_osITL8 != GCP_ITL8 ) m_osITL8 = roCmdOPT.m_osITL8; //if( m_osITERMIN != GCP_ITERMIN ) m_osITERMIN = roCmdOPT.m_osITERMIN; //if( m_osNUMDGT != GCP_NUMDGT ) m_osNUMDGT = roCmdOPT.m_osNUMDGT; //if( m_osRECURS != GCP_RECURS ) m_osRECURS = roCmdOPT.m_osRECURS; //if( m_osTRANSITS != GCP_TRANSITS ) m_osTRANSITS = roCmdOPT.m_osTRANSITS; if( m_osMETHOD != GCP_METHOD ) m_osMETHOD = roCmdOPT.m_osMETHOD; //if( m_osMODE != GCP_MODE ) m_osMODE = roCmdOPT.m_osMODE; //if( m_osORDER != GCP_ORDER ) m_osORDER = roCmdOPT.m_osORDER; //if( m_osPHASE != GCP_PHASE ) m_osPHASE = roCmdOPT.m_osPHASE; //if( m_bBYPASS != GCP_BYPASS ) m_bBYPASS = roCmdOPT.m_osBYPASS; //if( m_bCSTRAY != GCP_CSTRAY ) m_bCSTRAY = roCmdOPT.m_osCSTRAY; //if( m_bFBBYPASS != GCP_FBBYPASS ) m_bFBBYPASS = roCmdOPT.m_osFBBYPASS; //if( m_bINCMODE != GCP_INCMODE ) m_bINCMODE = roCmdOPT.m_osINCMODE; //if( m_bLUBYPASS != GCP_LUBYPASS ) m_bLUBYPASS = roCmdOPT.m_osLUBYPASS; //if( m_bOPTS != GCP_OPTS ) m_bOPTS = roCmdOPT.m_osOPTS; //if( m_bQUITCONV != GCP_QUITCONV ) m_bQUITCONV = roCmdOPT.m_osQUITCONV; //if( m_bRSTRAY != GCP_RSTRAY ) m_bRSTRAY = roCmdOPT.m_osRSTRAY; //if( m_bTRACEL != GCP_TRACEL ) m_bTRACEL = roCmdOPT.m_osTRACEL; bFormat( ); return( *this ); } //************************************************************************************************** // Print the object attributes. // // Argument List : // rosPrefix - A prefix to every line displayed (usually just spaces) void CmdGnuCapOPT::Print( const wxString & rosPrefix ) { CmdBase::Print( rosPrefix + wxT("CmdBase::") ); std::cout << rosPrefix.mb_str( ) << "m_osABSTOL : " << m_osABSTOL .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osCHGTOL : " << m_osCHGTOL .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osDAMPMAX : " << m_osDAMPMAX .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osDAMPMIN : " << m_osDAMPMIN .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osDEFAD : " << m_osDEFAD .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osDEFAS : " << m_osDEFAS .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osDEFL : " << m_osDEFL .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osDEFW : " << m_osDEFW .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osDTMIN : " << m_osDTMIN .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osDTRATIO : " << m_osDTRATIO .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osFLOOR : " << m_osFLOOR .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osGMIN : " << m_osGMIN .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osRELTOL : " << m_osRELTOL .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osROUND : " << m_osROUND .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osSHORT : " << m_osSHORT .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osTEMP : " << m_osTEMP .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osTNOM : " << m_osTNOM .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osTRREJECT : " << m_osTRREJECT.mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osTRSTEPG : " << m_osTRSTEPG .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osTRSTEPH : " << m_osTRSTEPH .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osTRSTEPS : " << m_osTRSTEPS .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osTRTOL : " << m_osTRTOL .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osVFLOOR : " << m_osVFLOOR .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osVMAX : " << m_osVMAX .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osVMIN : " << m_osVMIN .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osVNTOL : " << m_osVNTOL .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osDAMPST : " << m_osDAMPST .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osHARMS : " << m_osHARMS .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osITL1 : " << m_osITL1 .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osITL2 : " << m_osITL2 .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osITL3 : " << m_osITL3 .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osITL4 : " << m_osITL4 .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osITL5 : " << m_osITL5 .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osITL6 : " << m_osITL6 .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osITL7 : " << m_osITL7 .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osITL8 : " << m_osITL8 .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osITERMIN : " << m_osITERMIN .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osNUMDGT : " << m_osNUMDGT .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osRECURS : " << m_osRECURS .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osTRANSITS : " << m_osTRANSITS.mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osMETHOD : " << m_osMETHOD .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osMODE : " << m_osMODE .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osORDER : " << m_osORDER .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osPHASE : " << m_osPHASE .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_bBYPASS : " << (m_bBYPASS ? "true" : "false") << '\n'; std::cout << rosPrefix.mb_str( ) << "m_bCSTRAY : " << (m_bCSTRAY ? "true" : "false") << '\n'; std::cout << rosPrefix.mb_str( ) << "m_bFBBYPASS : " << (m_bFBBYPASS ? "true" : "false") << '\n'; std::cout << rosPrefix.mb_str( ) << "m_bINCMODE : " << (m_bINCMODE ? "true" : "false") << '\n'; std::cout << rosPrefix.mb_str( ) << "m_bLUBYPASS : " << (m_bLUBYPASS ? "true" : "false") << '\n'; std::cout << rosPrefix.mb_str( ) << "m_bOPTS : " << (m_bOPTS ? "true" : "false") << '\n'; std::cout << rosPrefix.mb_str( ) << "m_bQUITCONV : " << (m_bQUITCONV ? "true" : "false") << '\n'; std::cout << rosPrefix.mb_str( ) << "m_bRSTRAY : " << (m_bRSTRAY ? "true" : "false") << '\n'; std::cout << rosPrefix.mb_str( ) << "m_bTRACEL : " << (m_bTRACEL ? "true" : "false") << '\n'; } //************************************************************************************************** // Test Utility * //************************************************************************************************** #ifdef TEST_CMDGNUCAPOPT using namespace std; // Function prototypes void Usage( char * psAppName ); //************************************************************************************************** int main( int argc, char * argv[ ] ) { wxString osCmd; wxString os1; // Validate the argument count passed to the application if( argc > 2 ) { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } // Process the command line arguments os1 = wxConvLibc.cMB2WC( argv[ 1 ] ); if( argc > 1 ) { if( os1 == wxT("-h") ) { Usage( argv[ 0 ] ); exit( EXIT_SUCCESS ); } else { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } } // Display the utility banner cout << "\n Class CmdGnuCapOPT Test Utility" << "\n Version 1.05 (2015-01-03)\n"; // Create a NG-SPICE OPTIONS command object CmdGnuCapOPT oCmd_OPT; // Use the following command example to check the formatter and the parser : osCmd << wxT(".OPTIONS ABSTOL=1.20p CHGTOL=12.00f DAMPMAX=900.00m DAMPMIN=600.00m DEFL=120.00u ") << wxT("DEFW=120.00u DEFAD=11.00f DEFAS=11.00f DTMIN=1.10p DTRATIO=1.10G FLOOR=1.10E-21 ") << wxT("GMIN=1.20p RELTOL=3.00m ROUND=1.0E-10 SHORT=110.00n TEMP=30.00 TNOM=35.00 ") << wxT("TRREJECT=600.00m TRSTEPGROW=3.00 TRSTEPHOLD=100.00 TRSTEPSHRINK=9.00 TRTOL=9.00 ") << wxT("VFLOOR=1.10f VMAX=40.00 VMIN=-20.00 VNTOL=3.00u DAMPST=1 HARMONICS=10 ITL1=200 ") << wxT("ITL2=70 ITL3=10 ITL4=30 ITL5=2 ITL6=2 ITL7=2 ITL8=200 ITERMIN=2 NUMDGT=6 ") << wxT("RECURS=10 TRANSITS=3 NOBYP NOCSTRAY NOFBBYP NOINC NOLUBYP NOOPTS QUITCONV RSTRAY ") << wxT("NOTRACEL METHOD=EULER MODE=ANALOG ORDER=FORWARD PHASE=RADIANS"); // Set things up for a formatter test oCmd_OPT.m_osABSTOL = wxT("1.20p"); oCmd_OPT.m_osCHGTOL = wxT("12.00f"); oCmd_OPT.m_osDAMPMAX = wxT("900.00m"); oCmd_OPT.m_osDAMPMIN = wxT("600.00m"); oCmd_OPT.m_osDEFAD = wxT("11.00f"); oCmd_OPT.m_osDEFAS = wxT("11.00f"); oCmd_OPT.m_osDEFL = wxT("120.00u"); oCmd_OPT.m_osDEFW = wxT("120.00u"); oCmd_OPT.m_osDTMIN = wxT("1.10p"); oCmd_OPT.m_osDTRATIO = wxT("1.10Giga"); oCmd_OPT.m_osFLOOR = wxT("1.10E-21"); oCmd_OPT.m_osGMIN = wxT("1.20p"); oCmd_OPT.m_osRELTOL = wxT("3.00m"); oCmd_OPT.m_osROUND = wxT("1.0E-10"); oCmd_OPT.m_osSHORT = wxT("110.00n"); oCmd_OPT.m_osTEMP = wxT("30.00"); oCmd_OPT.m_osTNOM = wxT("35.00"); oCmd_OPT.m_osTRREJECT = wxT("600.00m"); oCmd_OPT.m_osTRSTEPG = wxT("3.00"); oCmd_OPT.m_osTRSTEPH = wxT("100.00"); oCmd_OPT.m_osTRSTEPS = wxT("9.00"); oCmd_OPT.m_osTRTOL = wxT("9.00"); oCmd_OPT.m_osVFLOOR = wxT("1.10f"); oCmd_OPT.m_osVMAX = wxT("40.00"); oCmd_OPT.m_osVMIN = wxT("-20.00"); oCmd_OPT.m_osVNTOL = wxT("3.00u"); oCmd_OPT.m_osDAMPST = wxT("1"); oCmd_OPT.m_osHARMS = wxT("10"); oCmd_OPT.m_osITL1 = wxT("200"); oCmd_OPT.m_osITL2 = wxT("70"); oCmd_OPT.m_osITL3 = wxT("10"); oCmd_OPT.m_osITL4 = wxT("30"); oCmd_OPT.m_osITL5 = wxT("2"); oCmd_OPT.m_osITL6 = wxT("2"); oCmd_OPT.m_osITL7 = wxT("2"); oCmd_OPT.m_osITL8 = wxT("200"); oCmd_OPT.m_osITERMIN = wxT("2"); oCmd_OPT.m_osNUMDGT = wxT("6"); oCmd_OPT.m_osRECURS = wxT("10"); oCmd_OPT.m_osTRANSITS = wxT("3"); oCmd_OPT.m_osMETHOD = wxT("EULER"); oCmd_OPT.m_osMODE = wxT("ANALOG"); oCmd_OPT.m_osORDER = wxT("FORWARD"); oCmd_OPT.m_osPHASE = wxT("RADIANS"); oCmd_OPT.m_bBYPASS = false; oCmd_OPT.m_bCSTRAY = false; oCmd_OPT.m_bFBBYPASS = false; oCmd_OPT.m_bINCMODE = false; oCmd_OPT.m_bLUBYPASS = false; oCmd_OPT.m_bOPTS = false; oCmd_OPT.m_bQUITCONV = true; oCmd_OPT.m_bRSTRAY = true; oCmd_OPT.m_bTRACEL = false; cout << "\nRun Formatter : " << ( oCmd_OPT.bFormat( ) ? "OK" : "FAULT" ); cout << "\nTest Cmd Format : " << ( oCmd_OPT == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\noCmd_OPT Contents : " << oCmd_OPT.mb_str( ) << '\n'; // Set things up for a parser test oCmd_OPT.bSetString( osCmd ); cout << "\nRun Parser : " << ( oCmd_OPT.bParse( ) ? "OK" : "FAULT" ); oCmd_OPT.bFormat( ); cout << "\nTest Cmd Format : " << ( oCmd_OPT == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\noCmd_OPT Contents : " << oCmd_OPT.mb_str( ) << '\n'; cout << '\n'; exit( EXIT_SUCCESS ); } //************************************************************************************************** void Usage( char * psAppName ) { cout << "\nUsage : " << psAppName << " [-OPTIONS]" << "\nOptions :" << "\n -h : Print usage (this message)\n"; } #endif // TEST_CMDGNUCAPOPT //************************************************************************************************** gspiceui-1.1.00+dfsg/src/gnucap/commands/CmdGnuCapPR.cpp0000644000000000000000000003477012503235101021435 0ustar rootroot//************************************************************************************************** // CmdGnuCapPR.cpp * // ----------------- * // Started : 2008-03-17 * // Last Update : 2015-03-21 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "CmdGnuCapPR.hpp" //************************************************************************************************** // Constructor. CmdGnuCapPR::CmdGnuCapPR( void ) { bSetDefaults( ); } //************************************************************************************************** // Destructor. CmdGnuCapPR::~CmdGnuCapPR( ) { } //************************************************************************************************** // Check that the object attributes are valid. // // Return Values : // true - Success // false - Failure bool CmdGnuCapPR::bValidate( void ) { size_t sz1; bool b1; CmdBase::bValidate( ); if( ( m_osaNodes.GetCount( ) + m_osaCpnts.GetCount( ) ) <= 0 ) SetErrMsg( wxT("No components or nodes have been selected.") ); for( sz1=(size_t)ePARAM_FST, b1=false; sz1<=(size_t)ePARAM_LST; sz1++ ) if( m_bParams[ sz1 ] ) b1 = true; if( ! b1 ) SetErrMsg( wxT("No parameters selected.") ); return( bIsValid( ) ); } //************************************************************************************************** // Set the object attributes to they're default values. // // Return Values : // true - Success // false - Failure bool CmdGnuCapPR::bSetDefaults( void ) { int i1; CmdBase::bSetDefaults( ); m_eSimEng = eSIMR_GNUCAP; m_eCmdType = eCMD_PR; m_eAnaType = eCMD_NONE; m_osaNodes.Empty( ); m_osaCpnts.Empty( ); for( i1=(int)ePARAM_FST; i1<=(int)ePARAM_LST; i1++ ) m_bParams[ i1 ] = false; for( i1=(int)eCPXPT_FST; i1<=(int)eCPXPT_LST; i1++ ) m_bCpxPts[ i1 ] = false; return( true ); } //************************************************************************************************** // Set the analysis. // // Argument List : // eAnaType - An analysis command type // // Return Values : // true - Success // false - Failure bool CmdGnuCapPR::bSetAnaType( eTypeCmd eAnaType ) { // Does anything actually need to be done? if( eAnaType == m_eAnaType ) return( true ); // Check that the desired analysis type is supported switch( eAnaType ) { case eCMD_OP : case eCMD_DC : case eCMD_AC : case eCMD_TR : case eCMD_FO : break; default : return( false ); } m_eAnaType = eAnaType; return( true ); } //************************************************************************************************** // Parse the command string. // // Eg.s : .PRINT AC VM(R1) VM(C1) VM(2) VP(C1) VP(R1) VP(2) // .PRINT AC VDB(2) // // Return Values : // true - Success // false - Failure bool CmdGnuCapPR::bParse( void ) { wxStringTokenizer ostk1; wxString os1; int i1, i2; // Clear the object attributes os1 = (wxString &) *this; bSetDefaults( ); assign( os1 ); // Tokenize the command string ostk1.SetString( *this ); if( ostk1.CountTokens( ) < 3 ) return( bValidate( ) ); // Check command type os1 = ostk1.GetNextToken( ).Left( 3 ).Upper( ); if( os1 != wxT(".PR") ) return( bValidate( ) ); // Extract the analysis type os1 = ostk1.GetNextToken( ).Left( 2 ).Upper( ); if( os1 == wxT("OP") ) m_eAnaType = eCMD_OP; else if( os1 == wxT("DC") ) m_eAnaType = eCMD_DC; else if( os1 == wxT("AC") ) m_eAnaType = eCMD_AC; else if( os1 == wxT("TR") ) m_eAnaType = eCMD_TR; else if( os1 == wxT("FO") ) m_eAnaType = eCMD_FO; else return( bValidate( ) ); // Extract the parameters to derive, any complex parts and the test component // and/or test node labels while( ostk1.HasMoreTokens( ) ) { // Extract the next field os1 = ostk1.GetNextToken( ); // Extract the parameter specifiers switch( (char) os1.GetChar( 0 ) ) { case wxT('V') : m_bParams[ ePARAM_VLT ] = true; break; case wxT('I') : m_bParams[ ePARAM_CUR ] = true; break; case wxT('P') : m_bParams[ ePARAM_PWR ] = true; break; case wxT('R') : m_bParams[ ePARAM_RES ] = true; break; default : return( bValidate( ) ); } // Extract the complex parts if the analysis type is AC if( m_eAnaType == eCMD_AC ) { switch( (char) os1.GetChar( 1 ) ) { case wxT('M') : m_bCpxPts[ eCPXPT_MAG ] = true; break; case wxT('P') : m_bCpxPts[ eCPXPT_PHASE ] = true; break; case wxT('R') : m_bCpxPts[ eCPXPT_REAL ] = true; break; case wxT('I') : m_bCpxPts[ eCPXPT_IMAG ] = true; break; case wxT('D') : if( os1.Mid( 1, 2 ).Upper( ) == wxT("DB") ) { m_bCpxPts[ eCPXPT_MAG ] = true; m_bCpxPts[ eCPXPT_MAGDB ] = true; break; } default : return( bValidate( ) ); } } // Extract the node or component label/s eg. V(1) or V(C1) i1 = os1.Index( wxT('(') ); i2 = os1.Index( wxT(')') ); if( i1!=-1 && i2!=-1 && i2>(i1+1) ) { // Get the label os1 = os1.Mid( (size_t) i1+1, (size_t) i2-i1-1 ); // Add the label to the node or component label lists if( wxIsdigit( os1.GetChar( 0 ) ) || Component::eGetType( os1 ) == eCPNT_NONE || NetList::m_osaNodeLbls.Index( os1 ) != wxNOT_FOUND ) { if( m_osaNodes.Index( os1 ) == wxNOT_FOUND ) m_osaNodes.Add( os1 ); } else { if( m_osaCpnts.Index( os1 ) == wxNOT_FOUND ) m_osaCpnts.Add( os1 ); } } else return( bValidate( ) ); } return( bValidate( ) ); } //************************************************************************************************** // Format the command string. // // Return Values : // true - Success // false - Failure bool CmdGnuCapPR::bFormat( void ) { wxString osCmd, osParam, osCpxPt, os1; wxStringTokenizer ostk1; int i1, i2, i3; // Set the command name osCmd = wxT(".PRINT "); // Append the analysis type switch( m_eAnaType ) { case eCMD_OP : osCmd << wxT("OP"); break; case eCMD_DC : osCmd << wxT("DC"); break; case eCMD_AC : osCmd << wxT("AC"); break; case eCMD_TR : osCmd << wxT("TR"); break; case eCMD_FO : osCmd << wxT("FO"); break; default : break; } // Sequence through the various parameter types osCmd << wxT(' '); for( i1=ePARAM_FST; i1<=ePARAM_LST; i1++ ) { if( ! m_bParams[ i1 ] ) continue; switch( (eTypeParam) i1 ) { case ePARAM_VLT : osParam = wxT('V'); break; case ePARAM_CUR : osParam = wxT('I'); break; case ePARAM_PWR : osParam = wxT('P'); break; case ePARAM_RES : osParam = wxT('R'); break; default : break; } // Sequence through the various complex parts for( i2=eCPXPT_FST; i2 2 ) { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } // Process the command line arguments os1 = wxConvLibc.cMB2WC( argv[ 1 ] ); if( argc > 1 ) { if( os1 == wxT("-h") ) { Usage( argv[ 0 ] ); exit( EXIT_SUCCESS ); } else { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } } // Display the utility banner cout << "\n Class CmdGnuCapPR Test Utility" << "\n Version 1.02 (04/04/2014)\n"; // Create a NG-SPICE PRINT command object CmdGnuCapPR oCmd_PR; // Use the following command example to check the formatter and the parser : osCmd = wxT(".PRINT AC VM(C1) VM(R1) VM(2) VP(C1) VP(R1) VP(2)"); // Set things up for a formatter test oCmd_PR.m_eAnaType = eCMD_AC; oCmd_PR.m_osaCpnts.Add( wxT("C1") ); oCmd_PR.m_osaCpnts.Add( wxT("R1") ); oCmd_PR.m_osaNodes.Add( wxT("2") ); oCmd_PR.m_bParams[ ePARAM_VLT ] = true; oCmd_PR.m_bCpxPts[ eCPXPT_MAG ] = true; oCmd_PR.m_bCpxPts[ eCPXPT_PHASE ] = true; cout << "\nRun Formatter : " << ( oCmd_PR.bFormat( ) ? "OK" : "FAULT" ); cout << "\nTest Cmd Format : " << ( oCmd_PR == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\noCmdPR Contents : " << oCmd_PR.mb_str( ) << '\n'; // Set things up for a parser test oCmd_PR.bSetString( osCmd ); cout << "\nRun Parser : " << ( oCmd_PR.bParse( ) ? "OK" : "FAULT" ); oCmd_PR.bFormat( ); cout << "\nTest Cmd Format : " << ( oCmd_PR == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\noCmdPR Contents : " << oCmd_PR.mb_str( ) << '\n'; cout << '\n'; exit( EXIT_SUCCESS ); } //************************************************************************************************** void Usage( char * psAppName ) { cout << "\nUsage : " << psAppName << " [-OPTIONS]" << "\nOptions :" << "\n -h : Print usage (this message)\n"; } #endif // TEST_CMDGNUCAPPR //************************************************************************************************** gspiceui-1.1.00+dfsg/src/gnucap/commands/CmdGnuCapPR.hpp0000644000000000000000000000542412476466307021463 0ustar rootroot//************************************************************************************************** // CmdGnuCapPR.hpp * // ----------------- * // Description : This class contains values associated with the GNU-Cap PRINT command. It inherits * // from the class CmdBase. * // Started : 2008-03-17 * // Last Update : 2015-03-07 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef CMDGCPPR_HPP #define CMDGCPPR_HPP // Application Includes #include "TypeDefs.hpp" #include "base/CmdBase.hpp" #include "netlist/Component.hpp" #include "netlist/NetList.hpp" #include "ngspice/commands/CmdNgSpicePR.hpp" class CmdNgSpicePR; //************************************************************************************************** class CmdGnuCapPR : public CmdBase { private : eTypeCmd m_eAnaType; virtual bool bValidate( void ); public : wxArrayString m_osaNodes; wxArrayString m_osaCpnts; bool m_bParams[ ePARAM_LST+1 ]; bool m_bCpxPts[ eCPXPT_LST+1 ]; CmdGnuCapPR( void ); virtual ~CmdGnuCapPR( ); virtual bool bSetDefaults( void ); bool bSetAnaType ( eTypeCmd eAnaType ); eTypeCmd eGetAnaType( void ) const { return( m_eAnaType ); } virtual bool bParse ( void ); virtual bool bFormat( void ); CmdGnuCapPR & operator = ( const CmdNgSpicePR & roCmdPR ); void Print( const wxString & rosPrefix=wxT(" ") ); }; //************************************************************************************************** #endif // CMDGCPPR_HPP gspiceui-1.1.00+dfsg/src/gnucap/commands/CmdGnuCapFO.cpp0000644000000000000000000002412012446255320021417 0ustar rootroot//************************************************************************************************** // CmdGnuCapFO.cpp * // ----------------- * // Started : 2008-03-11 * // Last Update : 2014-12-23 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "CmdGnuCapFO.hpp" //************************************************************************************************** // Constructor. CmdGnuCapFO::CmdGnuCapFO( void ) { bSetDefaults( ); } //************************************************************************************************** // Destructor. CmdGnuCapFO::~CmdGnuCapFO( ) { } //************************************************************************************************** // Check that the object attributes are valid. // // Return Values : // true - Success // false - Failure bool CmdGnuCapFO::bValidate( void ) { double df1, df2, df3; CmdBase::bValidate( ); // Check the sweep start and stop values if( ! CnvtType::bStrToFlt( m_osStart, &df1 ) ) SetErrMsg( wxT("Invalid sweep start value.") ); if( ! CnvtType::bStrToFlt( m_osStop, &df2 ) ) SetErrMsg( wxT("Invalid sweep stop value.") ); if( df2 < df1 ) SetErrMsg( wxT("Start value greater than stop value.") ); // Check the sweep step value and initial conditions if( ! CnvtType::bStrToFlt( m_osStep, &df3 ) ) SetErrMsg( wxT("Invalid sweep step value.") ); if( df3 <= 0.0 ) SetErrMsg( wxT("Step value less than or equal to zero.") ); switch( m_eInitC ) { case eINITC_WARM : case eINITC_UICS : case eINITC_COLD : break; default : SetErrMsg( wxT("Invalid initial conditions value.") ); } // Set the analysis temperature if( ! CnvtType::bStrToFlt( m_osTempC, &df3 ) ) SetErrMsg( wxT("Invalid analysis temperature value.") ); return( bIsValid( ) ); } //************************************************************************************************** // Set the object attributes to they're default values. // // Return Values : // true - Success // false - Failure bool CmdGnuCapFO::bSetDefaults( void ) { CmdBase::bSetDefaults( ); m_eSimEng = eSIMR_GNUCAP; m_eCmdType = eCMD_FO; m_osStart = wxT("1.0K"); m_osStop = wxT("100K"); m_osStep = wxT("10K"); m_eInitC = eINITC_WARM; m_osTempC = wxT("27.0"); return( true ); } //************************************************************************************************** // Parse the command string. // // Eg.s : .FO 1.00K 100.00K 10.00K TE 27.00 COLD BASIC // .FO 1.00K 100.00K 10.00K TE 27.00 BASIC // // Return Values : // true - Success // false - Failure bool CmdGnuCapFO::bParse( void ) { wxStringTokenizer ostk1; wxString os1; double df1; int i1; // Clear the object attributes os1 = (wxString &) *this; bSetDefaults( ); assign( os1 ); // Tokenize the command string ostk1.SetString( *this ); i1 = ostk1.CountTokens( ); if( i1!=7 && i1!=8 ) return( bValidate( ) ); // Check command type os1 = ostk1.GetNextToken( ).Left( 3 ).Upper( ); if( os1 != wxT(".FO") ) return( bValidate( ) ); // Extract the start time os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osStart = os1; else return( bValidate( ) ); // Extract the stop time os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osStop = os1; else return( bValidate( ) ); // Extract the step increment os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osStep = os1; else return( bValidate( ) ); // Extract the analysis temperature os1 = ostk1.GetNextToken( ); if( os1.Upper( ) == wxT("TE") ) { os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osTempC = os1; else return( bValidate( ) ); } // Extract the initial conditions if( ostk1.CountTokens( ) > 1 ) { os1 = ostk1.GetNextToken( ); os1.MakeUpper( ); if( os1 == wxT("COLD") ) m_eInitC = eINITC_COLD; else if( os1 == wxT("UIC") ) m_eInitC = eINITC_UICS; else return( bValidate( ) ); } else m_eInitC = eINITC_WARM; // Check that the last field is "BASIC" if( ostk1.GetNextToken( ).Upper( ) != wxT("BASIC") ) return( bValidate( ) ); return( bValidate( ) ); } //************************************************************************************************** // Format the command string. // // Return Values : // true - Success // false - Failure bool CmdGnuCapFO::bFormat( void ) { wxString osCmd, os1; // Set the command name osCmd = wxT(".FO"); // Set sweep parameters osCmd << wxT(' ') << m_osStart; osCmd << wxT(' ') << m_osStop; osCmd << wxT(' ') << m_osStep; // Set analysis temperature osCmd << wxT(" TE ") << m_osTempC; // Set the initial conditions switch( m_eInitC ) { case eINITC_COLD : osCmd << wxT(" COLD"); break; case eINITC_UICS : osCmd << wxT(" UICS"); break; case eINITC_WARM : break; default : break; } // Append format modifier osCmd << wxT(" BASIC"); assign( osCmd ); return( bValidate( ) ); } //************************************************************************************************** // Print the object attributes. // // Argument List : // rosPrefix - A prefix to every line displayed (usually just spaces) void CmdGnuCapFO::Print( const wxString & rosPrefix ) { CmdBase::Print( rosPrefix + wxT("CmdBase::") ); std::cout << rosPrefix.mb_str( ) << "m_osStart : " << m_osStart.mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osStop : " << m_osStop .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osStep : " << m_osStep .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_eInitC : "; switch( m_eInitC ) { case eINITC_WARM : std::cout << "eINITC_COLD\n"; break; case eINITC_UICS : std::cout << "eINITC_UICS\n"; break; case eINITC_COLD : std::cout << "eINITC_COLD\n"; break; case eINITC_NONE : std::cout << "eINITC_NONE\n"; break; default : std::cout << "Invalid\n"; break; } std::cout << rosPrefix.mb_str( ) << "m_osTempC : " << m_osTempC.mb_str( ) << '\n'; } //************************************************************************************************** // Test Utility * //************************************************************************************************** #ifdef TEST_CMDGNUCAPFO using namespace std; // Function prototypes void Usage( char * psAppName ); //************************************************************************************************** int main( int argc, char * argv[ ] ) { wxString osCmd; wxString os1; // Validate the argument count passed to the application if( argc > 2 ) { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } // Process the command line arguments os1 = wxConvLibc.cMB2WC( argv[ 1 ] ); if( argc > 1 ) { if( os1 == wxT("-h") ) { Usage( argv[ 0 ] ); exit( EXIT_SUCCESS ); } else { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } } // Display the utility banner cout << "\n Class CmdGnuCapFO Test Utility" << "\n Version 1.02 (12/08/2011)\n"; // Create a GNU-CAP Transient command object CmdGnuCapFO tCmd_FO; // Use the following command example to check the formatter and the parser : osCmd = wxT(".FO 1.00K 100.00K 10.00K TE 30.00 COLD BASIC"); // Set things up for a formatter test tCmd_FO.m_osStart = wxT("1.00K"); tCmd_FO.m_osStop = wxT("100.00K"); tCmd_FO.m_osStep = wxT("10.00K"); tCmd_FO.m_osTempC = wxT("30.00"); tCmd_FO.m_eInitC = eINITC_COLD; cout << "\nRun Formatter : " << ( tCmd_FO.bFormat( ) ? "OK" : "FAULT" ); cout << "\nTest Cmd Format : " << ( tCmd_FO == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\ntCmd_FO Contents : " << tCmd_FO.mb_str( ) << '\n'; // Set things up for a parser test tCmd_FO.bSetString( osCmd ); cout << "\nRun Parser : " << ( tCmd_FO.bParse( ) ? "OK" : "FAULT" ); tCmd_FO.bFormat( ); cout << "\nTest Cmd Format : " << ( tCmd_FO == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\ntCmd_FO Contents : " << tCmd_FO.mb_str( ) << '\n'; cout << '\n'; exit( EXIT_SUCCESS ); } //************************************************************************************************** void Usage( char * psAppName ) { cout << "\nUsage : " << psAppName << " [-OPTIONS]" << "\nOptions :" << "\n -h : Print usage (this message)\n"; } #endif // TEST_CMDGNUCAPFO //************************************************************************************************** gspiceui-1.1.00+dfsg/src/gnucap/commands/CmdGnuCapDC.hpp0000644000000000000000000000543112476467245021430 0ustar rootroot//************************************************************************************************** // CmdGnuCapDC.hpp * // ----------------- * // Description : This class contains values associated with the GNU-Cap DC command. It inherits * // from the class CmdBase. * // Started : 2008-01-29 * // Last Update : 2015-03-07 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef CMDGCPDC_HPP #define CMDGCPDC_HPP // Application Includes #include "TypeDefs.hpp" #include "base/CmdBase.hpp" #include "ngspice/commands/CmdNgSpiceDC.hpp" #include "utility/CnvtType.hpp" class CmdNgSpiceDC; // wxWidgets Includes #include //************************************************************************************************** class CmdGnuCapDC : public CmdBase { private : virtual bool bValidate( void ); public : wxString m_osStart; // Sweep start value wxString m_osStop; // Sweep stop value wxString m_osStep; // Sweep step value eTypeScale m_eScale; // Step scale wxString m_osSource; // Sweep source wxString m_osTempC; // Analysis temperature in Celcius CmdGnuCapDC( void ); virtual ~CmdGnuCapDC( ); virtual bool bSetDefaults( void ); virtual bool bParse ( void ); virtual bool bFormat( void ); CmdGnuCapDC & operator = ( const CmdNgSpiceDC & roCmdDC ); void Print( const wxString & rosPrefix=wxT(" ") ); }; //************************************************************************************************** #endif // CMDGCPDC_HPP gspiceui-1.1.00+dfsg/src/gnucap/commands/CmdGnuCapAC.hpp0000644000000000000000000000536612476467466021441 0ustar rootroot//************************************************************************************************** // CmdGnuCapAC.hpp * // ----------------- * // Description : This class contains values associated with the GNU-Cap AC command. It inherits * // from the class CmdBase. * // Started : 2008-02-21 * // Last Update : 2015-03-07 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef CMDGCPAC_HPP #define CMDGCPAC_HPP // Application Includes #include "TypeDefs.hpp" #include "base/CmdBase.hpp" #include "ngspice/commands/CmdNgSpiceAC.hpp" #include "utility/CnvtType.hpp" class CmdNgSpiceAC; // wxWidgets Includes #include //************************************************************************************************** class CmdGnuCapAC : public CmdBase { private : virtual bool bValidate( void ); public : wxString m_osStart; // The sweep start value wxString m_osStop; // The sweep stop value wxString m_osStep; // The sweep step value eTypeScale m_eScale; // The sweep scale type wxString m_osTempC; // The analysis temperature CmdGnuCapAC( void ); virtual ~CmdGnuCapAC( ); virtual bool bSetDefaults( void ); virtual bool bParse ( void ); virtual bool bFormat( void ); CmdGnuCapAC & operator = ( const CmdNgSpiceAC & roCmdAC ); void Print( const wxString & rosPrefix=wxT(" ") ); }; //************************************************************************************************** #endif // CMDGCPAC_HPP gspiceui-1.1.00+dfsg/src/gnucap/commands/CmdGnuCapAC.cpp0000644000000000000000000002631312446255320021404 0ustar rootroot//************************************************************************************************** // CmdGnuCapAC.cpp * // ----------------- * // Started : 2008-02-21 * // Last Update : 2014-12-23 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "CmdGnuCapAC.hpp" //************************************************************************************************** // Constructor. CmdGnuCapAC::CmdGnuCapAC( void ) { bSetDefaults( ); } //************************************************************************************************** // Destructor. CmdGnuCapAC::~CmdGnuCapAC( ) { } //************************************************************************************************** // Check that the object attributes are valid. // // Return Values : // true - Success // false - Failure bool CmdGnuCapAC::bValidate( void ) { double df1, df2, df3; CmdBase::bValidate( ); // Check the sweep start and stop values if( ! CnvtType::bStrToFlt( m_osStart, &df1 ) ) SetErrMsg( wxT("Invalid sweep start value.") ); if( ! CnvtType::bStrToFlt( m_osStop, &df2 ) ) SetErrMsg( wxT("Invalid sweep stop value.") ); if( df2 < df1 ) SetErrMsg( wxT("Start value greater than stop value.") ); // Check the sweep step value and sweep scale if( ! CnvtType::bStrToFlt( m_osStep, &df3 ) ) SetErrMsg( wxT("Invalid sweep step value.") ); if( df3 <= 0.0 ) SetErrMsg( wxT("Step value less than or equal to zero.") ); switch( m_eScale ) { case eSCALE_LIN : if( df1!=df2 && df3>fabs( df2 - df1 ) ) SetErrMsg( wxT("Step value is greater than sweep range.") ); break; case eSCALE_LOG : if( df1!=df2 && df3==1.0 ) SetErrMsg( wxT("Invalid step multiplier, must be non-unity.") ); break; case eSCALE_DEC : case eSCALE_OCT : break; default : SetErrMsg( wxT("Invalid step scale value.") ); } // Set the analysis temperature if( ! CnvtType::bStrToFlt( m_osTempC, &df3 ) ) SetErrMsg( wxT("Invalid analysis temperature value.") ); return( bIsValid( ) ); } //************************************************************************************************** // Set the object attributes to they're default values. // // Return Values : // true - Success // false - Failure bool CmdGnuCapAC::bSetDefaults( void ) { CmdBase::bSetDefaults( ); m_eSimEng = eSIMR_GNUCAP; m_eCmdType = eCMD_AC; m_osStart = wxT("1.0K"); m_osStop = wxT("100.0K"); m_osStep = wxT("10"); m_eScale = eSCALE_DEC; m_osTempC = wxT("27.0"); return( true ); } //************************************************************************************************** // Parse the command string. // // Eg.s : .AC 1.00K 100.00K BY 10.00K TE 27.00 BASIC // .AC 1.00K 100.00K TI 10.00 TE 27.00 BASIC // .AC 1.00K 100.00K DE 10 TE 27.00 BASIC // .AC 1.00K 100.00K OC 10 TE 27.00 BASIC // // Return Values : // true - Success // false - Failure bool CmdGnuCapAC::bParse( void ) { wxStringTokenizer ostk1; wxString os1; double df1, df2; // Clear the object attributes os1 = (wxString &) *this; bSetDefaults( ); assign( os1 ); // Tokenize the command string ostk1.SetString( *this ); if( ostk1.CountTokens( ) != 8 ) return( bValidate( ) ); // Check command type os1 = ostk1.GetNextToken( ).Left( 3 ).Upper( ); if( os1 != wxT(".AC") ) return( bValidate( ) ); // Extract the start value os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osStart = os1; else return( bValidate( ) ); // Is the next field a number? os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df2 ) ) { // Extract the stop value if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osStop = os1; else return( bValidate( ) ); // Extract the sweep type os1 = ostk1.GetNextToken( ).Upper( ); if( os1 == wxT("BY") ) m_eScale = eSCALE_LIN; else if( os1 == wxT("TI") ) m_eScale = eSCALE_LOG; else if( os1 == wxT("DE") ) m_eScale = eSCALE_DEC; else if( os1 == wxT("OC") ) m_eScale = eSCALE_OCT; else return( bValidate( ) ); // Extract the step size/count os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osStep = os1; else return( bValidate( ) ); os1 = ostk1.GetNextToken( ); } else { // Use default values for the remaining parameters m_osStop = os1; m_osStep = wxT("1.0"); m_eScale = eSCALE_LIN; } // Extract the analysis temperature if( os1.Upper( ) == wxT("TE") ) { os1 = ostk1.GetNextToken( ); if( CnvtType::bStrToFlt( os1, &df1 ) ) m_osTempC = os1; else return( bValidate( ) ); } // Check that the last field is "BASIC" if( ostk1.GetNextToken( ).Upper( ) != wxT("BASIC") ) return( bValidate( ) ); return( bValidate( ) ); } //************************************************************************************************** // Format the command string. // // Return Values : // true - Success // false - Failure bool CmdGnuCapAC::bFormat( void ) { wxString osCmd, os1; // Set the command name osCmd = wxT(".AC"); // Set sweep parameters osCmd << wxT(' ') << m_osStart; osCmd << wxT(' ') << m_osStop; switch( m_eScale ) { case eSCALE_LIN : osCmd << wxT(" BY"); break; case eSCALE_LOG : osCmd << wxT(" TI"); break; case eSCALE_DEC : osCmd << wxT(" DE"); break; case eSCALE_OCT : osCmd << wxT(" OC"); break; default : return( false ); } osCmd << wxT(' ') << m_osStep; // Set analysis temperature osCmd << wxT(" TE ") << m_osTempC; // Append format modifier osCmd << wxT(" BASIC"); assign( osCmd ); return( bValidate( ) ); } //************************************************************************************************** // Copy the contents of a CmdNgSpiceAC object. // // Argument List : // roCmdAC - A reference to a CmdNgSpiceAC object // // Return Values : // A reference to this object CmdGnuCapAC & CmdGnuCapAC::operator = ( const CmdNgSpiceAC & roCmdAC ) { (CmdBase &) *this = (CmdBase &) roCmdAC; m_osStart = roCmdAC.m_osStart; m_osStop = roCmdAC.m_osStop; m_osStep = roCmdAC.m_osStep; m_eScale = roCmdAC.m_eScale; bFormat( ); return( *this ); } //************************************************************************************************** // Print the object attributes. // // Argument List : // rosPrefix - A prefix to every line displayed (usually just spaces) void CmdGnuCapAC::Print( const wxString & rosPrefix ) { CmdBase::Print( rosPrefix + wxT("CmdBase::") ); std::cout << rosPrefix.mb_str( ) << "m_osStart : " << m_osStart.mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osStop : " << m_osStop .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_osStep : " << m_osStep .mb_str( ) << '\n'; std::cout << rosPrefix.mb_str( ) << "m_eScale : "; switch( m_eScale ) { case eSCALE_LIN : std::cout << "eSCALE_LIN\n"; break; case eSCALE_LOG : std::cout << "eSCALE_LOG\n"; break; case eSCALE_DEC : std::cout << "eSCALE_DEC\n"; break; case eSCALE_OCT : std::cout << "eSCALE_OCT\n"; break; case eSCALE_NONE : std::cout << "eSCALE_NONE\n"; break; default : std::cout << "Invalid\n"; break; } std::cout << rosPrefix.mb_str( ) << "m_osTempC : " << m_osTempC.mb_str( ) << '\n'; } //************************************************************************************************** // Test Utility * //************************************************************************************************** #ifdef TEST_CMDGNUCAPAC using namespace std; // Function prototypes void Usage( char * psAppName ); //************************************************************************************************** int main( int argc, char * argv[ ] ) { wxString osCmd; wxString os1; // Validate the argument count passed to the application if( argc > 2 ) { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } // Process the command line arguments os1 = wxConvLibc.cMB2WC( argv[ 1 ] ); if( argc > 1 ) { if( os1 == wxT("-h") ) { Usage( argv[ 0 ] ); exit( EXIT_SUCCESS ); } else { Usage( argv[ 0 ] ); exit( EXIT_FAILURE ); } } // Display the utility banner cout << "\n Class CmdGnuCapAC Test Utility" << "\n Version 1.02 (12/08/2011)\n"; // Create a GNU-CAP AC command object CmdGnuCapAC tCmd_AC; // Use the following command example to check the formatter and the parser : osCmd = wxT(".AC 1.00K 200.00K TI 1.01 TE 30.00 BASIC"); // Set things up for a formatter test tCmd_AC.m_osStart = wxT("1.00K"); tCmd_AC.m_osStop = wxT("200.00K"); tCmd_AC.m_osStep = wxT("1.01"); tCmd_AC.m_eScale = eSCALE_LOG; tCmd_AC.m_osTempC = wxT("30.00"); cout << "\nRun Formatter : " << ( tCmd_AC.bFormat( ) ? "OK" : "FAULT" ); cout << "\nTest Cmd Format : " << ( tCmd_AC == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\ntCmd_AC Contents : " << tCmd_AC.mb_str( ) << '\n'; // Set things up for a parser test tCmd_AC.bSetString( osCmd ); cout << "\nRun Parser : " << ( tCmd_AC.bParse( ) ? "OK" : "FAULT" ); tCmd_AC.bFormat( ); cout << "\nTest Cmd Format : " << ( tCmd_AC == osCmd ? "OK" : "FAULT" ); cout << "\nExample Command : " << osCmd .mb_str( ); cout << "\ntCmd_AC Contents : " << tCmd_AC.mb_str( ) << '\n'; cout << '\n'; exit( EXIT_SUCCESS ); } //************************************************************************************************** void Usage( char * psAppName ) { cout << "\nUsage : " << psAppName << " [-OPTIONS]" << "\nOptions :" << "\n -h : Print usage (this message)\n"; } #endif // TEST_CMDGNUCAPAC //************************************************************************************************** gspiceui-1.1.00+dfsg/src/gnucap/panels/0000755000000000000000000000000012513647114016350 5ustar rootrootgspiceui-1.1.00+dfsg/src/gnucap/panels/PnlGnuCapDC.cpp0000644000000000000000000003030612513647114021114 0ustar rootroot//************************************************************************************************** // PnlGnuCapDC.cpp * // ----------------- * // Started : 2003-08-18 * // Last Update : 2015-04-16 * // Copyright : (C) 2003 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "PnlGnuCapDC.hpp" //************************************************************************************************** // Implement an event table. wxBEGIN_EVENT_TABLE( PnlGnuCapDC, PnlAnaBase ) EVT_CHOICE ( PnlAnaBase::ID_CHO_SRCNAME, PnlGnuCapDC::OnSrcName ) EVT_RADIOBOX( PnlAnaBase::ID_RBX_SCALE , PnlGnuCapDC::OnScale ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. PnlGnuCapDC::PnlGnuCapDC( wxWindow * poWin ) : PnlAnaBase( poWin ) { bSetAnalysType( eCMD_DC ); Create( ); // Create the analysis panel InitSwpUnits( ); // Initialize the sweep units bClear( ); // Clear all object attributes } //************************************************************************************************** // Destructor. PnlGnuCapDC::~PnlGnuCapDC( ) { } //************************************************************************************************** // Create the display objects. void PnlGnuCapDC::Create( void ) { PnlAnaBase::CreateBase( ); // Create the base controls PnlAnaBase::CreateScale( ); // Create the scale controls PnlAnaBase::CreateTemp( ); // Create the analysis temperature controls CreateSigSrc( ); // Create input signal source PnlAnaBase::DoLayout( ); // Layout the panel's GUI objects // Set the sweep parameters labels m_oSbxSwpPars.SetLabel( wxT(" DC Sweep ") ); m_oPnlStart .bSetName( wxT("Start Value") ); m_oPnlStop .bSetName( wxT("Stop Value") ); // Create scale controls but disable the scale option GNU-Cap doesn't support m_oRbxSweep.Enable( eSCALE_OCT, false ); } //************************************************************************************************** // Create the scale display objects. void PnlGnuCapDC::CreateSigSrc( void ) { // Create and add signal source controls m_oSbxSigSrc .Create( this, ID_UNUSED, wxT(" Signal Source "), wxPoint( 6, 178 ), wxSize( 145, 60 ) ); m_oChoSrcName.Create( this, ID_CHO_SRCNAME, wxPoint( 18, 200 ), wxSize( 121, GUI_CTRL_HT ) ); // Set static box font m_oSbxSigSrc.SetOwnFont( FONT_SLANT ); } //************************************************************************************************** // Layout the panel display objects. void PnlGnuCapDC::DoLayout( void ) { #ifdef LAYOUT_MNGR wxWindow * poWin1, * poWin2; wxSizer * poSzr; wxSizerFlags oFlags; // Create and set the sizer for the signal source panel poWin1 = m_oLblSrcName.GetParent( ); poSzr = new wxBoxSizer( wxHORIZONTAL ); poWin1->SetSizer( poSzr ); // Layout the signal source panel oFlags.Align( wxALIGN_LEFT ); oFlags.Border( wxALL, 3 ); poSzr->Add( &m_oLblSrcName, oFlags ); poSzr->Add( &m_oChoSrcName, oFlags ); // Create and set the sizer for the signal source panel poWin2 = m_oPnlStart.GetParent( ); poSzr = poWin2->GetSizer( ); // Add the control to the sweep panel oFlags.Align( wxALIGN_LEFT ); oFlags.Border( wxALL & ~wxBOTTOM, 3 ); poSzr->Add( poWin1, oFlags ); #endif } //************************************************************************************************** // Initialize the sweep parameter units. void PnlGnuCapDC::InitSwpUnits( void ) { wxString os1; eTypeUnits eUnits; // Determine the sweep parameter units os1 = m_oChoSrcName.GetStringSelection( ); eUnits = Component::eGetUnitsType( os1 ); switch( eUnits ) { case eUNITS_VOLT : // Units of voltage os1 = wxT("Voltage"); break; case eUNITS_CURR : // Units of current os1 = wxT("Current"); break; case eUNITS_CAP : // Units of capacitance os1 = wxT("Capacitance"); break; case eUNITS_IND : // Units of inductance os1 = wxT("Inductance"); break; case eUNITS_RES : // Units of resistance os1 = wxT("Resistance"); break; default : // No units os1 = wxT("Value"); } // Set the sweep parameter units m_oPnlStart.bSetName( wxString( wxT("Start ") ) + os1 ); m_oPnlStop .bSetName( wxString( wxT("Stop ") ) + os1 ); m_oPnlStart.bSetUnitsType( eUnits ); m_oPnlStop .bSetUnitsType( eUnits ); m_oPnlStep .bSetUnitsType( eUnits ); } //************************************************************************************************** // Initialize the step scale. void PnlGnuCapDC::InitScale( void ) { switch( m_oRbxSweep.GetSelection( ) ) { case eSCALE_LIN : // Increment the step value by adding constant value m_oPnlStep.bSetName( wxT("Step Increment") ); m_oPnlStep.bSetValueType( eVALUE_FLT ); m_oPnlStep.bShowUnits( PnlValue::eSHOW_CHO ); m_oPnlStep.bSetSpnRange( 0.0 , 10000.0 ); m_oPnlStep.bSetSpnIncSz( 0.01, 1000.0 ); m_oPnlStep.bSetDefValue( 10.0 ); break; case eSCALE_LOG : // Increase the step by a constant multiplier m_oPnlStep.bSetName( wxT("Step Multiplier") ); m_oPnlStep.bSetValueType( eVALUE_FLT ); m_oPnlStep.bShowUnits( PnlValue::eSHOW_NONE ); m_oPnlStep.bSetSpnRange( 0.0 , 10000.0 ); m_oPnlStep.bSetSpnIncSz( 0.01, 1000.0 ); m_oPnlStep.bSetDefValue( 1.1 ); break; case eSCALE_DEC : // Specify a fixed number of steps per decade m_oPnlStep.bSetName( wxT("Steps / Decade") ); m_oPnlStep.bSetValueType( eVALUE_INT ); m_oPnlStep.bShowUnits( PnlValue::eSHOW_NONE ); m_oPnlStep.bSetSpnRange( 1, 10000 ); m_oPnlStep.bSetSpnIncSz( 1, 1000 ); m_oPnlStep.bSetDefValue( 10 ); break; default : break; } } //************************************************************************************************** // Clear the object attributes. // // Return Values : // true - Success // false - Failure bool PnlGnuCapDC::bClear( void ) { // Clear the base class PnlAnaBase::bClear( ); // Set default step scale type and sweep values m_oPnlStart.bSetValue( (float) 0.0 ); m_oPnlStop .bSetValue( (float) 100.0 ); m_oPnlStep .bSetValue( (float) 10.0 ); // Set default scale value bSetScale( eSCALE_LIN ); // Set input source default values m_oChoSrcName.Clear( ); m_oChoSrcName.Append( wxT("None") ); m_oChoSrcName.SetSelection( 0 ); // Set parameters check box default values m_oCbxVoltage.SetValue( true ); m_oCbxCurrent.SetValue( false ); m_oCbxPower .SetValue( false ); m_oCbxResist .SetValue( false ); // Set default temperature value m_oPnlTemp.bSetValue( 27.0 ); return( true ); } //************************************************************************************************** // Load information from a simulation object. // // Argument List : // roSimn - A simulation object // // Return Values : // true - Success // false - Failure bool PnlGnuCapDC::bLoad( SimnGnuCap & roSimn ) { bool bRtn=true; // Load the components into the signal source choice box PnlAnaBase::LoadSrcNames( roSimn.m_oaCpnts, wxT("VIRLC") ); // Go no further if the DC command isn't valid if( ! roSimn.m_oCmdDC.bIsValid( ) ) return( false ); // Set the source component label if( ! PnlAnaBase::bSetSrcCpnt( roSimn.m_oCpntSwpSrc ) ) bRtn = false; InitSwpUnits( ); // Set the step scale (do this before setting the sweep step) if( roSimn.m_oCmdDC.m_eScale != eSCALE_NONE ) { m_oRbxSweep.SetSelection( roSimn.m_oCmdDC.m_eScale ); InitScale( ); } // Set the sweep values if( ! m_oPnlStart.bSetValue( roSimn.m_oCmdDC.m_osStart ) ) bRtn = false; if( ! m_oPnlStop .bSetValue( roSimn.m_oCmdDC.m_osStop ) ) bRtn = false; if( ! m_oPnlStep .bSetValue( roSimn.m_oCmdDC.m_osStep ) ) bRtn = false; // Set the parameters to derive m_oCbxVoltage.SetValue( roSimn.m_oCmdPR.m_bParams[ ePARAM_VLT ] ); m_oCbxCurrent.SetValue( roSimn.m_oCmdPR.m_bParams[ ePARAM_CUR ] ); m_oCbxPower .SetValue( roSimn.m_oCmdPR.m_bParams[ ePARAM_PWR ] ); m_oCbxResist .SetValue( roSimn.m_oCmdPR.m_bParams[ ePARAM_RES ] ); // Set the analysis temperature if( ! m_oPnlTemp.bSetValue( roSimn.m_oCmdDC.m_osTempC ) ) bRtn = false; return( bRtn ); } //************************************************************************************************** // Save information to a simulation object. // // Argument List : // roSimn - A simulation object // // Return Values : // true - Success // false - Failure bool PnlGnuCapDC::bSave( SimnGnuCap & roSimn ) { m_osErrMsg.Empty( ); // Set the analysis type roSimn.m_oCmdPR.bSetAnaType( eCMD_DC ); // Set the sweep values roSimn.m_oCmdDC.m_osStart = m_oPnlStart.rosGetValue( ); roSimn.m_oCmdDC.m_osStop = m_oPnlStop .rosGetValue( ); roSimn.m_oCmdDC.m_osStep = m_oPnlStep .rosGetValue( ); // Set the step scale roSimn.m_oCmdDC.m_eScale = (eTypeScale) m_oRbxSweep.GetSelection( ); // Set the sweep source (this compulsory for a DC analysis) if( m_oChoSrcName.GetStringSelection( ) != wxT("None") ) { roSimn.m_oCmdDC.m_osSource = m_oChoSrcName.GetStringSelection( ); roSimn.m_oCpntSwpSrc = roSimn.roGetCpnt( roSimn.m_oCmdDC.m_osSource ); } else SetErrMsg( wxT("No sweep source component has been selected.") ); // Store the parameters to derive roSimn.m_oCmdPR.m_bParams[ ePARAM_VLT ] = m_oCbxVoltage.GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_CUR ] = m_oCbxCurrent.GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_PWR ] = m_oCbxPower .GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_RES ] = m_oCbxResist .GetValue( ); // Set the analysis temperature roSimn.m_oCmdDC.m_osTempC = m_oPnlTemp.rosGetValue( ); // Create the command strings roSimn.m_oCmdDC.bFormat( ); roSimn.m_oCmdPR.bFormat( ); // Check for errors if( ! roSimn.m_oCmdDC.bIsValid( ) ) SetErrMsg( roSimn.m_oCmdDC.rosGetErrMsg( ) ); if( ! roSimn.m_oCmdPR.bIsValid( ) ) SetErrMsg( roSimn.m_oCmdPR.rosGetErrMsg( ) ); return( bIsOk( ) ); } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // Step scale radio box event handler. // // Argument List : // roEvtCmd - An object holding information about the event void PnlGnuCapDC::OnScale( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { InitScale( ); } //************************************************************************************************** // Source component choice box event handler. // // Argument List : // roEvtCmd - An object holding information about the event void PnlGnuCapDC::OnSrcName( wxCommandEvent & roEvtCmd ) { // Execute the base class event handler first PnlAnaBase::OnSrcName( roEvtCmd ); // Initialize the sweep parameter units InitSwpUnits( ); } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/gnucap/panels/PnlGnuCapTR.hpp0000644000000000000000000000564412452505566021175 0ustar rootroot//************************************************************************************************** // PnlGnuCapTR.hpp * // ----------------- * // Description : This class derives from the Analysis Panel base class and provides a GUI for a * // user to configure a Transient Analysis for GNU-Cap electronic circuit simulator. * // Started : 2004-02-22 * // Last Update : 2015-01-05 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef PNLGNUCAPTR_HPP #define PNLGNUCAPTR_HPP // Application Includes #include "TypeDefs.hpp" #include "base/PnlAnaBase.hpp" #include "netlist/SimnGnuCap.hpp" #include "gnucap/dialogs/DlgGcpCfgGEN.hpp" //************************************************************************************************** class PnlGnuCapTR : public PnlAnaBase { private : // Generator configuration wxButton m_oBtnSetup; DlgGcpCfgGEN m_oDlgCfgGEN; void Create ( void ); void CreateSigSrc( void ); public : PnlGnuCapTR( wxWindow * poWin ); ~PnlGnuCapTR( ); bool bClear( void ); bool bLoad( SimnGnuCap & roSimn ); bool bSave( SimnGnuCap & roSimn ); // Event handlers void OnBtnSetup( wxCommandEvent & roEvtCmd ); // In order to be able to react to a menu command, it must be given a // unique identifier such as a const or an enum. enum ePnlItemID { ID_BTN_SETUP = PnlAnaBase::ID_LST+1, ID_UNUSED, // Assigned to controls for which events are not used ID_FST = ID_BTN_SETUP, ID_LST = ID_BTN_SETUP }; // Leave this as the last line as private access is envoked by macro wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // PNLGNUCAPTR_HPP gspiceui-1.1.00+dfsg/src/gnucap/panels/PnlGnuCapAC.hpp0000644000000000000000000000475612452505566021136 0ustar rootroot//************************************************************************************************** // PnlGnuCapAC.hpp * // ----------------- * // Description : This class derives from the Analysis Panel base class and provides a GUI for a * // user to configure a AC Analysis for GNU-Cap electronic circuit simulator. * // Started : 2003-08-18 * // Last Update : 2015-01-05 * // Copyright : (C) 2003 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef PNLGNUCAPAC_HPP #define PNLGNUCAPAC_HPP // Application Includes #include "TypeDefs.hpp" #include "base/PnlAnaBase.hpp" #include "netlist/SimnGnuCap.hpp" //************************************************************************************************** class PnlGnuCapAC : public PnlAnaBase { private : void Create( void ); void InitScale( void ); public : PnlGnuCapAC( wxWindow * poWin ); ~PnlGnuCapAC( ); bool bClear( void ); bool bLoad( SimnGnuCap & roSimn ); bool bSave( SimnGnuCap & roSimn ); // Event handlers void OnScale ( wxCommandEvent & roEvtCmd ); void OnSrcName( wxCommandEvent & roEvtCmd ); // Leave this as the last line as private access is envoked by macro wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // PNLGNUCAPAC_HPP gspiceui-1.1.00+dfsg/src/gnucap/panels/PnlGnuCapOP.cpp0000644000000000000000000002404412506223351021141 0ustar rootroot//************************************************************************************************** // PnlGnuCapOP.cpp * // ----------------- * // Started : 2003-11-06 * // Last Update : 2015-03-30 * // Copyright : (C) 2003 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "PnlGnuCapOP.hpp" //************************************************************************************************** // Implement an event table. wxBEGIN_EVENT_TABLE( PnlGnuCapOP, PnlAnaBase ) EVT_RADIOBOX( PnlAnaBase::ID_RBX_SCALE , PnlGnuCapOP::OnScale ) EVT_CHOICE ( PnlAnaBase::ID_CHO_SRCNAME, PnlGnuCapOP::OnSrcName ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. // // Argunebt List: // poWin - A pointer to the parent window PnlGnuCapOP::PnlGnuCapOP( wxWindow * poWin ) : PnlAnaBase( poWin ) { bSetAnalysType( eCMD_OP ); Create( ); bClear( ); } //************************************************************************************************** // Destructor. PnlGnuCapOP::~PnlGnuCapOP( ) { } //************************************************************************************************** // Create the display objects. void PnlGnuCapOP::Create( void ) { PnlAnaBase::CreateBase( ); // Create the base controls PnlAnaBase::CreateScale( ); // Create the scale controls PnlAnaBase::CreateSigSrc( ); // Create input signal source controls PnlAnaBase::DoLayout( ); // Layout the panel's GUI objects // Set the sweep parameter labels m_oSbxSwpPars.SetLabel( wxT(" Operating Point Sweep ") ); m_oPnlStart .bSetName( wxT("Start Temperature") ); m_oPnlStop .bSetName( wxT("Stop Temperature") ); // Display the PnlValue units as a label m_oPnlStart.bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlStop .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlStep .bShowUnits( PnlValue::eSHOW_LBL ); // Set sweep parameter units m_oPnlStart.bSetUnitsType( eUNITS_TMPC ); m_oPnlStop .bSetUnitsType( eUNITS_TMPC ); m_oPnlStep .bSetUnitsType( eUNITS_TMPC ); // Layout the PnlValue controls m_oPnlStart.Layout( ); m_oPnlStop .Layout( ); m_oPnlStep .Layout( ); // Create scale controls but disable the scale option GNU-Cap doesn't support m_oRbxSweep.Enable( eSCALE_OCT, false ); } //************************************************************************************************** // Initialize the step scale. void PnlGnuCapOP::InitScale( void ) { switch( m_oRbxSweep.GetSelection( ) ) { case eSCALE_LIN : m_oPnlStep.bSetName( wxT("Step Increment") ); m_oPnlStep.bSetValueType( eVALUE_FLT ); m_oPnlStep.bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlStep.bSetSpnRange( 0.0, 10000.0 ); m_oPnlStep.bSetSpnIncSz( 1.0, 1000.0 ); m_oPnlStep.bSetDefValue( 1.0 ); break; case eSCALE_LOG : m_oPnlStep.bSetName( wxT("Step Multiplier") ); m_oPnlStep.bSetValueType( eVALUE_FLT ); m_oPnlStep.bShowUnits( PnlValue::eSHOW_NONE ); m_oPnlStep.bSetSpnRange( 0.0 , 10000.0 ); m_oPnlStep.bSetSpnIncSz( 0.01, 1000.0 ); m_oPnlStep.bSetDefValue( 1.01 ); break; case eSCALE_DEC : m_oPnlStep.bSetName( wxT("Steps / Decade") ); m_oPnlStep.bSetValueType( eVALUE_INT ); m_oPnlStep.bShowUnits( PnlValue::eSHOW_NONE ); m_oPnlStep.bSetSpnRange( 1, 10000 ); m_oPnlStep.bSetSpnIncSz( 1, 1000 ); m_oPnlStep.bSetDefValue( 10 ); break; default : break; } } //************************************************************************************************** // Clear the object attributes. // // Return Values : // true - Success // false - Failure bool PnlGnuCapOP::bClear( void ) { // Clear the base class PnlAnaBase::bClear( ); // Set the step scale type and default sweep values m_oPnlStart.bSetValue( (float) 0.0 ); m_oPnlStop .bSetValue( (float) 100.0 ); m_oPnlStep .bSetValue( (float) 10.0 ); // Set default scale value bSetScale( eSCALE_LIN ); // Set input source default values m_oChoSrcName.Clear( ); m_oChoSrcName.Append( wxT("None") ); m_oChoSrcName.SetSelection( 0 ); m_oPnlSrcLvl.bSetValue( (float) 0.0 ); m_oPnlSrcLvl.bSetUnitsType( eUNITS_NONE ); // Set parameters check box default values m_oCbxVoltage.SetValue( true ); m_oCbxCurrent.SetValue( false ); m_oCbxPower .SetValue( false ); m_oCbxResist .SetValue( false ); return( true ); } //************************************************************************************************** // Load information from a simulation object. // // Argument List : // roSimn - A SimnGnuCap object // // Return Values : // true - Success // false - Failure bool PnlGnuCapOP::bLoad( SimnGnuCap & roSimn ) { bool bRtn=true; // Load the components into the signal source choice box PnlAnaBase::LoadSrcNames( roSimn.m_oaCpnts, wxT("VIRLC") ); // Go no further if the OP command isn't valid if( ! roSimn.m_oCmdOP.bIsValid( ) ) return( false ); // Set the source component (a sweep source is not mandatory for an OP analysis) PnlAnaBase::bSetSrcCpnt( roSimn.m_oCpntSwpSrc ); // Set the step scale (do this before setting the sweep step) if( roSimn.m_oCmdOP.m_eScale != eSCALE_NONE ) m_oRbxSweep.SetSelection( roSimn.m_oCmdOP.m_eScale ); // Set the sweep values if( ! m_oPnlStart.bSetValue( roSimn.m_oCmdOP.m_osStart ) ) bRtn = false; if( ! m_oPnlStop .bSetValue( roSimn.m_oCmdOP.m_osStop ) ) bRtn = false; if( ! m_oPnlStep .bSetValue( roSimn.m_oCmdOP.m_osStep ) ) bRtn = false; // Set the parameters to derive m_oCbxVoltage.SetValue( roSimn.m_oCmdPR.m_bParams[ ePARAM_VLT ] ); m_oCbxCurrent.SetValue( roSimn.m_oCmdPR.m_bParams[ ePARAM_CUR ] ); m_oCbxPower .SetValue( roSimn.m_oCmdPR.m_bParams[ ePARAM_PWR ] ); m_oCbxResist .SetValue( roSimn.m_oCmdPR.m_bParams[ ePARAM_RES ] ); return( bRtn ); } //************************************************************************************************** // Save information to a simulation object. // // Argument List : // roSimn - A SimnGnuCap object // // Return Values : // true - Success // false - Failure bool PnlGnuCapOP::bSave( SimnGnuCap & roSimn ) { wxString os1; m_osErrMsg.Empty( ); // Set the analysis type roSimn.m_oCmdPR.bSetAnaType( eCMD_OP ); // Set the sweep values roSimn.m_oCmdOP.m_osStart = m_oPnlStart.rosGetValue( ); roSimn.m_oCmdOP.m_osStop = m_oPnlStop .rosGetValue( ); roSimn.m_oCmdOP.m_osStep = m_oPnlStep .rosGetValue( ); // Set the step scale roSimn.m_oCmdOP.m_eScale = (eTypeScale) m_oRbxSweep.GetSelection( ); // Set the sweep source (a sweep source is not compulsory for a OP analysis) if( m_oChoSrcName.GetStringSelection( ) != wxT("None") ) { os1 = m_oChoSrcName.GetStringSelection( ); (Component &) roSimn.m_oCpntSwpSrc = roSimn.roGetCpnt( os1 ); roSimn.m_oCpntSwpSrc.bSetValue( m_oPnlSrcLvl.rosGetValue( ) ); } else roSimn.m_oCpntSwpSrc.bClear( ); // Store the parameters to derive roSimn.m_oCmdPR.m_bParams[ ePARAM_VLT ] = m_oCbxVoltage.GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_CUR ] = m_oCbxCurrent.GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_PWR ] = m_oCbxPower .GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_RES ] = m_oCbxResist .GetValue( ); // Create the command strings roSimn.m_oCmdOP.bFormat( ); roSimn.m_oCmdPR.bFormat( ); // Check for errors if( ! roSimn.m_oCmdOP.bIsValid( ) ) SetErrMsg( roSimn.m_oCmdOP.rosGetErrMsg( ) ); if( ! roSimn.m_oCmdPR.bIsValid( ) ) SetErrMsg( roSimn.m_oCmdPR.rosGetErrMsg( ) ); return( bIsOk( ) ); } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // Step scale radio box event handler. // // Argument List : // roEvtCmd - An object holding information about the event void PnlGnuCapOP::OnScale( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { InitScale( ); } //************************************************************************************************** // Source component choice box event handler. // // Argument List : // roEvtCmd - An object holding information about the event void PnlGnuCapOP::OnSrcName( wxCommandEvent & roEvtCmd ) { wxString os1; // Execute the base class event handler first PnlAnaBase::OnSrcName( roEvtCmd ); if( m_oChoSrcName.GetStringSelection( ) != wxT("None") ) { // Set the units type os1 = m_oChoSrcName.GetStringSelection( ); m_oPnlSrcLvl.bSetUnitsType( Component::eGetUnitsType( os1 ) ); // Set the source value if( m_oPnlSrcLvl.dfGetValue( ) == 0.0 ) m_oPnlSrcLvl.bSetValue( (double) 1.0 ); } else { m_oPnlSrcLvl.bSetUnitsType( eUNITS_NONE ); m_oPnlSrcLvl.bSetValue( (double) 0.0 ); } } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/gnucap/panels/PnlGnuCapAC.cpp0000644000000000000000000002753612506223351021117 0ustar rootroot//************************************************************************************************** // PnlGnuCapAC.cpp * // ----------------- * // Started : 2003-08-18 * // Last Update : 2015-03-30 * // Copyright : (C) 2003 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "PnlGnuCapAC.hpp" //************************************************************************************************** // Implement an event table. wxBEGIN_EVENT_TABLE( PnlGnuCapAC, PnlAnaBase ) EVT_RADIOBOX( PnlAnaBase::ID_RBX_SCALE , PnlGnuCapAC::OnScale ) EVT_CHOICE ( PnlAnaBase::ID_CHO_SRCNAME, PnlGnuCapAC::OnSrcName ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. PnlGnuCapAC::PnlGnuCapAC( wxWindow * poWin ) : PnlAnaBase( poWin ) { bSetAnalysType( eCMD_AC ); Create( ); // Create the analysis panel bClear( ); // Clear all object attributes } //************************************************************************************************** // Destructor. PnlGnuCapAC::~PnlGnuCapAC( ) { } //************************************************************************************************** // Create the display objects. void PnlGnuCapAC::Create( void ) { PnlAnaBase::CreateBase( ); // Create the base controls PnlAnaBase::CreateScale( ); // Create the scale controls PnlAnaBase::CreateCpxPrt( ); // Create the parameter complex part check boxes PnlAnaBase::CreateSigSrc( ); // Create the input signal source controls PnlAnaBase::CreateTemp( ); // Create the analysis temperature controls PnlAnaBase::DoLayout( ); // Layout the panel's GUI objects // Set the frequency sweep parameter labels m_oSbxSwpPars.SetLabel( wxT(" AC Sweep ") ); m_oPnlStart .bSetName( wxT("Start Frequency") ); m_oPnlStop .bSetName( wxT("Stop Frequency") ); // Set sweep parameter units m_oPnlStart.bSetUnitsType( eUNITS_FREQ ); m_oPnlStop .bSetUnitsType( eUNITS_FREQ ); m_oPnlStep .bSetUnitsType( eUNITS_FREQ ); } //************************************************************************************************** // Initialize the step scale. void PnlGnuCapAC::InitScale( void ) { switch( m_oRbxSweep.GetSelection( ) ) { case eSCALE_LIN : m_oPnlStep.bSetName( wxT("Step Increment") ); m_oPnlStep.bSetValueType( eVALUE_FLT ); m_oPnlStep.bShowUnits( PnlValue::eSHOW_CHO ); m_oPnlStep.bSetUnitsType( eUNITS_FREQ ); break; case eSCALE_LOG : m_oPnlStep.bSetName( wxT("Step Multiplier") ); m_oPnlStep.bSetValueType( eVALUE_FLT ); m_oPnlStep.bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlStep.bSetUnitsType( eUNITS_EXP ); m_oPnlStep.bSetSpnRange( 0.01, 10000.0 ); m_oPnlStep.bSetSpnIncSz( 0.1 , 1000.0 ); m_oPnlStep.bSetDefValue( 1.1 ); break; case eSCALE_DEC : m_oPnlStep.bSetName( wxT("Steps / Decade") ); m_oPnlStep.bSetValueType( eVALUE_INT ); m_oPnlStep.bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlStep.bSetUnitsType( eUNITS_EXP ); m_oPnlStep.bSetSpnRange( 1, 10000 ); m_oPnlStep.bSetSpnIncSz( 1, 1000 ); m_oPnlStep.bSetDefValue( 10 ); break; case eSCALE_OCT : m_oPnlStep.bSetName( wxT("Steps / Octave") ); m_oPnlStep.bSetValueType( eVALUE_INT ); m_oPnlStep.bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlStep.bSetUnitsType( eUNITS_EXP ); m_oPnlStep.bSetSpnRange( 1, 10000 ); m_oPnlStep.bSetSpnIncSz( 1, 1000 ); m_oPnlStep.bSetDefValue( 10 ); break; default : break; } } //************************************************************************************************** // Clear the object attributes. // // Return Values : // true - Success // false - Failure bool PnlGnuCapAC::bClear( void ) { // Clear the base class PnlAnaBase::bClear( ); // Set default step scale type and sweep values m_oPnlStart.bSetValue( (float) 1.0 ); m_oPnlStop .bSetValue( (float) 100.0 ); m_oPnlStep .bSetValue( (float) 10.0 ); m_oPnlStart.bSetUnits( wxT("kHz") ); m_oPnlStop .bSetUnits( wxT("kHz") ); m_oPnlStep .bSetUnits( wxT("kHz") ); // Set default scale value bSetScale( eSCALE_DEC ); // Set input source default values m_oChoSrcName.Clear( ); m_oChoSrcName.Append( wxT("None") ); m_oChoSrcName.SetSelection( 0 ); m_oPnlSrcLvl.bSetValue( (float) 0.0 ); m_oPnlSrcLvl.bSetUnitsType( eUNITS_NONE ); // Set parameters check box default values m_oCbxVoltage.SetValue( true ); m_oCbxCurrent.SetValue( false ); m_oCbxPower .SetValue( false ); m_oCbxResist .SetValue( false ); // Set the complex part check box default values m_oCbxMag .SetValue( true ); m_oCbxPhase.SetValue( false ); m_oCbxReal .SetValue( false ); m_oCbxImag .SetValue( false ); m_oCbxMagDb.SetValue( true ); // Set default temperature value m_oPnlTemp.bSetValue( 27.0 ); return( true ); } //************************************************************************************************** // Load information from a simulation object. // // Argument List : // roSimn - A simulation object // // Return Values : // true - Success // false - Failure bool PnlGnuCapAC::bLoad( SimnGnuCap & roSimn ) { bool bRtn=true; // Load the components into the signal source choice box PnlAnaBase::LoadSrcNames( roSimn.m_oaCpnts, wxT("VI") ); // Go no further if the AC command isn't valid if( ! roSimn.m_oCmdAC.bIsValid( ) ) return( false ); // Set the source component if( ! PnlAnaBase::bSetSrcCpnt( roSimn.m_oCpntSwpSrc ) ) bRtn = false; // Set the step scale (do this before setting the sweep step) if( roSimn.m_oCmdAC.m_eScale != eSCALE_NONE ) { m_oRbxSweep.SetSelection( roSimn.m_oCmdAC.m_eScale ); InitScale( ); } // Set the sweep values if( ! m_oPnlStart.bSetValue( roSimn.m_oCmdAC.m_osStart ) ) bRtn = false; if( ! m_oPnlStop .bSetValue( roSimn.m_oCmdAC.m_osStop ) ) bRtn = false; if( ! m_oPnlStep .bSetValue( roSimn.m_oCmdAC.m_osStep ) ) bRtn = false; // Set the parameters to derive m_oCbxVoltage.SetValue( roSimn.m_oCmdPR.m_bParams[ ePARAM_VLT ] ); m_oCbxCurrent.SetValue( roSimn.m_oCmdPR.m_bParams[ ePARAM_CUR ] ); m_oCbxPower .SetValue( roSimn.m_oCmdPR.m_bParams[ ePARAM_PWR ] ); m_oCbxResist .SetValue( roSimn.m_oCmdPR.m_bParams[ ePARAM_RES ] ); // Set the complex parts to derive m_oCbxMag .SetValue( roSimn.m_oCmdPR.m_bCpxPts[ eCPXPT_MAG ] ); m_oCbxPhase.SetValue( roSimn.m_oCmdPR.m_bCpxPts[ eCPXPT_PHASE ] ); m_oCbxReal .SetValue( roSimn.m_oCmdPR.m_bCpxPts[ eCPXPT_REAL ] ); m_oCbxImag .SetValue( roSimn.m_oCmdPR.m_bCpxPts[ eCPXPT_IMAG ] ); m_oCbxMagDb.SetValue( roSimn.m_oCmdPR.m_bCpxPts[ eCPXPT_MAGDB ] ); // Set the analysis temperature if( ! m_oPnlTemp.bSetValue( roSimn.m_oCmdAC.m_osTempC ) ) bRtn = false; return( bRtn ); } //************************************************************************************************** // Save information to a simulation object. // // Argument List : // roSimn - A simulation object // // Return Values : // true - Success // false - Failure bool PnlGnuCapAC::bSave( SimnGnuCap & roSimn ) { wxString os1; size_t sz1; bool b1; m_osErrMsg.Empty( ); // Set the analysis type roSimn.m_oCmdPR.bSetAnaType( eCMD_AC ); // Set the sweep values roSimn.m_oCmdAC.m_osStart = m_oPnlStart.rosGetValue( ); roSimn.m_oCmdAC.m_osStop = m_oPnlStop .rosGetValue( ); roSimn.m_oCmdAC.m_osStep = m_oPnlStep .rosGetValue( ); // Set the step scale roSimn.m_oCmdAC.m_eScale = (eTypeScale) m_oRbxSweep.GetSelection( ); // Set the component to be used as the sweep source if( m_oChoSrcName.GetStringSelection( ) == wxT("None") ) SetErrMsg( wxT("No sweep source component has been selected.") ); else if ( m_oPnlSrcLvl.dfGetValue( ) == 0.0 ) SetErrMsg( wxT("Sweep source component value of zero is not permitted.") ); else { os1 = m_oChoSrcName.GetStringSelection( ); roSimn.m_oCpntSwpSrc = roSimn.NetList::roGetCpnt( os1 ); roSimn.m_oCpntSwpSrc.bSetValue( wxT("GENERATOR(1) AC ") + m_oPnlSrcLvl.rosGetValue( ) ); } // Store the parameters to derive roSimn.m_oCmdPR.m_bParams[ ePARAM_VLT ] = m_oCbxVoltage.GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_CUR ] = m_oCbxCurrent.GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_PWR ] = m_oCbxPower .GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_RES ] = m_oCbxResist .GetValue( ); // Store the complex parts of the parameters to derive roSimn.m_oCmdPR.m_bCpxPts[ eCPXPT_MAG ] = m_oCbxMag .GetValue( ); roSimn.m_oCmdPR.m_bCpxPts[ eCPXPT_PHASE ] = m_oCbxPhase.GetValue( ); roSimn.m_oCmdPR.m_bCpxPts[ eCPXPT_REAL ] = m_oCbxReal .GetValue( ); roSimn.m_oCmdPR.m_bCpxPts[ eCPXPT_IMAG ] = m_oCbxImag .GetValue( ); roSimn.m_oCmdPR.m_bCpxPts[ eCPXPT_MAGDB ] = m_oCbxMagDb.GetValue( ); // Set the analysis temperature roSimn.m_oCmdAC.m_osTempC = m_oPnlTemp.rosGetValue( ); // Create the command strings roSimn.m_oCmdAC.bFormat( ); roSimn.m_oCmdPR.bFormat( ); // Check for errors if( ! roSimn.m_oCmdAC.bIsValid( ) ) SetErrMsg( roSimn.m_oCmdAC.rosGetErrMsg( ) ); if( ! roSimn.m_oCmdPR.bIsValid( ) ) SetErrMsg( roSimn.m_oCmdPR.rosGetErrMsg( ) ); for( sz1=eCPXPT_MAG, b1=false; sz1<=eCPXPT_IMAG; sz1++ ) if( roSimn.m_oCmdPR.m_bCpxPts[ sz1 ] ) b1 = true; if( ! b1 ) SetErrMsg( wxT("No complex parts have been selected.") ); return( bIsOk( ) ); } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // Step scale radio box event handler. // // Argument List : // roEvtCmd - An object holding information about the event void PnlGnuCapAC::OnScale( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { InitScale( ); } //************************************************************************************************** // Source component choice box event handler. // // Argument List : // roEvtCmd - An object holding information about the event void PnlGnuCapAC::OnSrcName( wxCommandEvent & roEvtCmd ) { wxString os1; // Execute the base class event handler first PnlAnaBase::OnSrcName( roEvtCmd ); if( m_oChoSrcName.GetStringSelection( ) != wxT("None") ) { // Set the units type os1 = m_oChoSrcName.GetStringSelection( ); m_oPnlSrcLvl.bSetUnitsType( Component::eGetUnitsType( os1 ) ); // Set the source value if( m_oPnlSrcLvl.dfGetValue( ) == 0.0 ) m_oPnlSrcLvl.bSetValue( (double) 1.0 ); } else { m_oPnlSrcLvl.bSetUnitsType( eUNITS_NONE ); m_oPnlSrcLvl.bSetValue( (double) 0.0 ); } } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/gnucap/panels/PnlGnuCapFO.hpp0000644000000000000000000000647612452505566021160 0ustar rootroot//************************************************************************************************** // PnlGnuCapFO.hpp * // ----------------- * // Description : This class derives from the Analysis Panel base class and provides a GUI for a * // user to configure a Fourier Analysis for GNU-Cap electronic circuit simulator. * // Started : 2004-04-26 * // Last Update : 2015-01-05 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef PNLGNUCAPFO_HPP #define PNLGNUCAPFO_HPP // Application Includes #include "TypeDefs.hpp" #include "base/PnlAnaBase.hpp" #include "netlist/SimnGnuCap.hpp" #include "gnucap/dialogs/DlgGcpCfgGEN.hpp" // wxWidgets Library Includes #include //************************************************************************************************** class PnlGnuCapFO : public PnlAnaBase { private : // Output Parameters wxStaticBox m_oSbxOutputs; wxCheckBox m_oCbxMag; wxCheckBox m_oCbxPhase; wxCheckBox m_oCbxMagDb; wxCheckBox m_oCbxMagRel; // Generator configuration wxButton m_oBtnSetup; DlgGcpCfgGEN m_oDlgCfgGEN; void Create ( void ); void CreateSigSrc ( void ); void CreateOutputs( void ); void GetConfig( void ); void SetConfig( void ); public : PnlGnuCapFO( wxWindow * poWin ); ~PnlGnuCapFO( ); bool bClear( void ); bool bLoad( SimnGnuCap & roSimn ); bool bSave( SimnGnuCap & roSimn ); // Event handlers void OnBtnSetup( wxCommandEvent & roEvtCmd ); // In order to be able to react to a menu command, it must be given a // unique identifier such as a const or an enum. enum ePnlItemID { ID_BTN_SETUP = PnlAnaBase::ID_LST+1, ID_CBX_MAG, ID_CBX_PHASE, ID_CBX_MAGDB, ID_CBX_MAGREL, ID_UNUSED, // Assigned to controls for which events are not used ID_FST = ID_BTN_SETUP, ID_LST = ID_CBX_MAGREL }; // Leave this as the last line as private access is envoked by macro wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // PNLGNUCAPFO_HPP gspiceui-1.1.00+dfsg/src/gnucap/panels/PnlGnuCapFO.cpp0000644000000000000000000002772612505765647021163 0ustar rootroot//************************************************************************************************** // PnlGnuCapFO.cpp * // ----------------- * // Started : 2004-04-26 * // Last Update : 2015-03-29 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "PnlGnuCapFO.hpp" //************************************************************************************************** // Implement an event table. wxBEGIN_EVENT_TABLE( PnlGnuCapFO, PnlAnaBase ) EVT_BUTTON( PnlGnuCapFO::ID_BTN_SETUP, PnlGnuCapFO::OnBtnSetup ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. PnlGnuCapFO::PnlGnuCapFO( wxWindow * poWin ) : PnlAnaBase( poWin ), m_oDlgCfgGEN( poWin ) { bSetAnalysType( eCMD_FO ); Create( ); // Create the analysis panel bClear( ); // Clear all object attributes } //************************************************************************************************** // Destructor. PnlGnuCapFO::~PnlGnuCapFO( ) { } //************************************************************************************************** // Create the display objects. void PnlGnuCapFO::Create( void ) { PnlAnaBase::CreateBase( ); // Create the base controls PnlAnaBase::CreateInitC( ); // Create and add the initial condtns controls PnlAnaBase::CreateTemp( ); // Create and add the analysis temp. controls CreateSigSrc( ); // Create and add generator controls CreateOutputs( ); // Create and add output parameters PnlAnaBase::DoLayout( ); // Layout the panel's GUI objects // Set the frequency sweep parameter labels m_oSbxSwpPars.SetLabel( wxT(" Frequency Sweep ") ); m_oPnlStart .bSetName( wxT("Start Frequency") ); m_oPnlStop .bSetName( wxT("Stop Frequency") ); m_oPnlStep .bSetName( wxT("Step Increment") ); // Set sweep parameter units m_oPnlStart.bSetUnitsType( eUNITS_FREQ ); m_oPnlStop .bSetUnitsType( eUNITS_FREQ ); m_oPnlStep .bSetUnitsType( eUNITS_FREQ ); } //************************************************************************************************** // Create the source component display objects. void PnlGnuCapFO::CreateSigSrc( void ) { // Create and add generator controls m_oSbxSigSrc .Create( this, ID_UNUSED , wxT(" Signal Source "), wxPoint( 6, 178 ), wxSize( 255, 60 ) ); m_oChoSrcName.Create( this, ID_CHO_SRCNAME, wxPoint( 18, 200 ), wxSize( 121, GUI_CTRL_HT ) ); m_oBtnSetup .Create( this, ID_BTN_SETUP, wxT("Setup ..."), wxPoint( 143, 200 ), wxSize( 105, GUI_CTRL_HT ) ); // Set static box font m_oSbxSigSrc.SetOwnFont( FONT_SLANT ); } //************************************************************************************************** void PnlGnuCapFO::GetConfig( void ) { wxConfig * poConfig; long li1; // Set the output parameters to be extracted poConfig = (wxConfig *) wxConfig::Get( ); if( poConfig == NULL ) return; poConfig->SetPath( wxT("/GNU-Cap") ); poConfig->Read( wxT("FO_Mag") , &li1, (long) 1 ); m_oCbxMag .SetValue( li1 != 0 ? true : false ); poConfig->Read( wxT("FO_Phase") , &li1, (long) 0 ); m_oCbxPhase .SetValue( li1 != 0 ? true : false ); poConfig->Read( wxT("FO_MagRel"), &li1, (long) 1 ); m_oCbxMagRel.SetValue( li1 != 0 ? true : false ); poConfig->Read( wxT("FO_MagDB") , &li1, (long) 0 ); m_oCbxMagDb .SetValue( li1 != 0 ? true : false ); } //************************************************************************************************** void PnlGnuCapFO::SetConfig( void ) { wxConfig * poConfig; poConfig = (wxConfig *) wxConfig::Get( ); if( poConfig == NULL ) return; poConfig->SetPath( wxT("/GNU-Cap") ); poConfig->Write( wxT("FO_Mag") , m_oCbxMag .GetValue( ) ); poConfig->Write( wxT("FO_Phase") , m_oCbxPhase .GetValue( ) ); poConfig->Write( wxT("FO_MagRel"), m_oCbxMagRel.GetValue( ) ); poConfig->Write( wxT("FO_MagDB") , m_oCbxMagDb .GetValue( ) ); } //************************************************************************************************** // Create the parameters to included in the results file output. void PnlGnuCapFO::CreateOutputs( void ) { // Create and add output parameters m_oSbxOutputs.Create( this, ID_UNUSED, wxT(" Outputs "), wxPoint( 455, 5 ), wxSize( 110, 122 ) ); m_oCbxMag .Create( this, ID_CBX_MAG, wxT("Magnitude"), wxPoint( 461, 24 ) ); m_oCbxPhase .Create( this, ID_CBX_PHASE, wxT("Phase"), wxPoint( 461, 49 ) ); m_oCbxMagDb .Create( this, ID_CBX_MAGDB, wxT("Mag. in dB"), wxPoint( 461, 74 ) ); m_oCbxMagRel .Create( this, ID_CBX_MAGREL, wxT("Mag. is Rel."), wxPoint( 461, 99 ) ); m_oSbxOutputs.SetOwnFont( FONT_SLANT ); } //************************************************************************************************** // Clear the object attributes. // // Return Values : // true - Success // false - Failure bool PnlGnuCapFO::bClear( void ) { // Clear the base class PnlAnaBase::bClear( ); // Set default sweep values m_oPnlStart.bSetValue( (float) 1.0 ); m_oPnlStop .bSetValue( (float) 100.0 ); m_oPnlStep .bSetValue( (float) 10.0 ); m_oPnlStart.bSetUnits( wxT("kHz") ); m_oPnlStop .bSetUnits( wxT("kHz") ); m_oPnlStep .bSetUnits( wxT("kHz") ); // Set default initial condition values bSetInitC( eINITC_WARM ); // Set input source default values m_oChoSrcName.Clear( ); m_oChoSrcName.Append( wxT("None") ); m_oChoSrcName.SetSelection( 0 ); // Clear the signal generator configuration dialog m_oDlgCfgGEN.bClear( ); // Set parameters check box default values m_oCbxVoltage.SetValue( true ); m_oCbxCurrent.SetValue( false ); m_oCbxPower .SetValue( false ); m_oCbxResist .SetValue( false ); // Set the output parameter check box default values m_oCbxMag .SetValue( true ); m_oCbxPhase .SetValue( false ); m_oCbxMagDb .SetValue( true ); m_oCbxMagRel.SetValue( false ); // Set default temperature value m_oPnlTemp.bSetValue( 27.0 ); return( true ); } //************************************************************************************************** // Load information from a simulation object. // // Argument List : // roSimn - A SimnGnuCap object // // Return Values : // true - Success // false - Failure bool PnlGnuCapFO::bLoad( SimnGnuCap & roSimn ) { bool bRtn=true; // Load the components into the signal source choice box PnlAnaBase::LoadSrcNames( roSimn.m_oaCpnts, wxT("VI") ); // Go no further if the FO command isn't valid if( ! roSimn.m_oCmdFO.bIsValid( ) ) return( false ); // Set the sweep source (a sweep source is not mandatory for a FO analysis) PnlAnaBase::bSetSrcCpnt( roSimn.m_oCpntSwpSrc ); // Set the sweep values if( ! m_oPnlStart.bSetValue( roSimn.m_oCmdFO.m_osStart ) ) bRtn = false; if( ! m_oPnlStop .bSetValue( roSimn.m_oCmdFO.m_osStop ) ) bRtn = false; if( ! m_oPnlStep .bSetValue( roSimn.m_oCmdFO.m_osStep ) ) bRtn = false; // Set the initial conditions if( roSimn.m_oCmdFO.m_eInitC != eINITC_NONE ) m_oRbxSweep.SetSelection( roSimn.m_oCmdFO.m_eInitC ); // Load the generator setup dialog if( ! m_oDlgCfgGEN.bSetValues( roSimn.m_oCmdGEN ) ) bRtn = false; // Set the parameters to derive m_oCbxVoltage.SetValue( roSimn.m_oCmdPR.m_bParams[ ePARAM_VLT ] ); m_oCbxCurrent.SetValue( roSimn.m_oCmdPR.m_bParams[ ePARAM_CUR ] ); m_oCbxPower .SetValue( roSimn.m_oCmdPR.m_bParams[ ePARAM_PWR ] ); m_oCbxResist .SetValue( roSimn.m_oCmdPR.m_bParams[ ePARAM_RES ] ); // Set the output parameters to be extracted GetConfig( ); // Set the analysis temperature if( ! m_oPnlTemp.bSetValue( roSimn.m_oCmdFO.m_osTempC ) ) bRtn = false; return( bRtn ); } //************************************************************************************************** // Save information to a simulation object. // // Argument List : // roSimn - A SimnGnuCap object // // Return Values : // true - Success // false - Failure bool PnlGnuCapFO::bSave( SimnGnuCap & roSimn ) { wxString os1; m_osErrMsg.Empty( ); // Set the analysis type roSimn.m_oCmdPR.bSetAnaType( eCMD_FO ); // Set the sweep values roSimn.m_oCmdFO.m_osStart = m_oPnlStart.rosGetValue( ); roSimn.m_oCmdFO.m_osStop = m_oPnlStop .rosGetValue( ); roSimn.m_oCmdFO.m_osStep = m_oPnlStep .rosGetValue( ); // Set the initial conditions roSimn.m_oCmdFO.m_eInitC = (eTypeInitC) m_oRbxSweep.GetSelection( ); // Set the component to be used as a signal source if( m_oChoSrcName.GetStringSelection( ) != wxT("None") ) { // Get the unmodified signal source component, set it as the signal source os1 = m_oChoSrcName.GetStringSelection( ); (Component &) roSimn.m_oCpntSwpSrc = roSimn.roGetCpnt( os1 ); roSimn.m_oCpntSwpSrc.bSetValue( wxT("GENERATOR(1)") ); // Get the GENERATOR command from the Generator Setup dialog m_oDlgCfgGEN.bGetValues( roSimn.m_oCmdGEN ); if( ! roSimn.m_oCmdGEN.bIsValid( ) ) { os1 = wxT("The signal source ") + roSimn.m_oCmdGEN.rosGetErrMsg( ) + wxT(". "); SetErrMsg( os1 ); } } else { roSimn.m_oCpntSwpSrc.bClear( ); roSimn.m_oCmdGEN .bSetDefaults( ); } // Store the parameters to derive roSimn.m_oCmdPR.m_bParams[ ePARAM_VLT ] = m_oCbxVoltage.GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_CUR ] = m_oCbxCurrent.GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_PWR ] = m_oCbxPower .GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_RES ] = m_oCbxResist .GetValue( ); // Store the output parameters to be extracted if( m_oCbxMag.IsChecked( ) || m_oCbxPhase.IsChecked( ) ) SetConfig( ); else SetErrMsg( wxT("An Outputs value hasn't been specified.") ); // Set the analysis temperature roSimn.m_oCmdFO.m_osTempC = m_oPnlTemp.rosGetValue( ); // Create the command strings roSimn.m_oCmdFO.bFormat( ); roSimn.m_oCmdPR.bFormat( ); // Check for errors if( ! roSimn.m_oCmdFO.bIsValid( ) ) SetErrMsg( roSimn.m_oCmdFO.rosGetErrMsg( ) ); if( ! roSimn.m_oCmdPR.bIsValid( ) ) SetErrMsg( roSimn.m_oCmdPR.rosGetErrMsg( ) ); return( bIsOk( ) ); } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // Generator component setup button control event handler. // // Argument List : // roEvtCmd - An object holding information about the event void PnlGnuCapFO::OnBtnSetup( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { m_oDlgCfgGEN.CenterOnParent( ); m_oDlgCfgGEN.ShowModal( ); } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/gnucap/panels/PnlGnuCapOP.hpp0000644000000000000000000000512312452505566021156 0ustar rootroot//************************************************************************************************** // PnlGnuCapOP.hpp * // ----------------- * // Description : This class derives from the Analysis Panel base class and provides a GUI for a * // user to configure a Operating Point Analysis for GNU-Cap electronic circuit * // simulator. * // Started : 2003-11-06 * // Last Update : 2015-01-05 * // Copyright : (C) 2003 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef PNLGNUCAPOP_HPP #define PNLGNUCAPOP_HPP // Application Includes #include "TypeDefs.hpp" #include "base/PnlAnaBase.hpp" #include "netlist/SimnGnuCap.hpp" //************************************************************************************************** class PnlGnuCapOP : public PnlAnaBase { private : void Create( void ); void InitScale( void ); public : PnlGnuCapOP( wxWindow * poWin ); ~PnlGnuCapOP( ); bool bClear( void ); bool bLoad( SimnGnuCap & roSimn ); bool bSave( SimnGnuCap & roSimn ); // Event handlers void OnScale ( wxCommandEvent & roEvtCmd ); void OnSrcName( wxCommandEvent & roEvtCmd ); // Leave this as the last line as private access is envoked by macro wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // PNLGNUCAPOP_HPP gspiceui-1.1.00+dfsg/src/gnucap/panels/PnlGnuCapTR.cpp0000644000000000000000000002251212505765647021170 0ustar rootroot//************************************************************************************************** // PnlGnuCapTR.cpp * // ----------------- * // Started : 2004-02-22 * // Last Update : 2015-03-29 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "PnlGnuCapTR.hpp" //************************************************************************************************** // Implement an event table. wxBEGIN_EVENT_TABLE( PnlGnuCapTR, PnlAnaBase ) EVT_BUTTON( PnlGnuCapTR::ID_BTN_SETUP, PnlGnuCapTR::OnBtnSetup ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. PnlGnuCapTR::PnlGnuCapTR( wxWindow * poWin ) : PnlAnaBase( poWin ), m_oDlgCfgGEN( poWin ) { bSetAnalysType( eCMD_TR ); Create( ); // Create the analysis panel bClear( ); // Clear all object attributes } //************************************************************************************************** // Destructor. PnlGnuCapTR::~PnlGnuCapTR( ) { } //************************************************************************************************** // Createe the display objects. void PnlGnuCapTR::Create( void ) { PnlAnaBase::CreateBase( ); // Create the base controls PnlAnaBase::CreateInitC( ); // Create and add the initial condtns controls PnlAnaBase::CreateTemp( ); // Create and add the analysis temp. controls CreateSigSrc( ); // Create and add generator controls PnlAnaBase::DoLayout( ); // Layout the panel's GUI objects // Set the time sweep parameter labels m_oSbxSwpPars.SetLabel( wxT(" Time Sweep ") ); m_oPnlStart .bSetName( wxT("Start Time") ); m_oPnlStop .bSetName( wxT("Stop Time") ); m_oPnlStep .bSetName( wxT("Step Increment") ); // Set sweep parameter units m_oPnlStart.bSetUnitsType( eUNITS_TIME ); m_oPnlStop .bSetUnitsType( eUNITS_TIME ); m_oPnlStep .bSetUnitsType( eUNITS_TIME ); } //************************************************************************************************** // Create the source component display objects. void PnlGnuCapTR::CreateSigSrc( void ) { // Create and add generator controls m_oSbxSigSrc .Create( this, ID_UNUSED , wxT(" Signal Source "), wxPoint( 6, 178 ), wxSize( 255, 60 ) ); m_oChoSrcName.Create( this, ID_CHO_SRCNAME, wxPoint( 18, 200 ), wxSize( 121, GUI_CTRL_HT ) ); m_oBtnSetup .Create( this, ID_BTN_SETUP, wxT("Setup ..."), wxPoint( 143, 200 ), wxSize( 105, GUI_CTRL_HT ) ); // Set static box font m_oSbxSigSrc.SetOwnFont( FONT_SLANT ); } //************************************************************************************************** // Clear the object attributes. // // Return Values : // true - Success // false - Failure bool PnlGnuCapTR::bClear( void ) { // Clear the base class PnlAnaBase::bClear( ); // Set the sweep parameters to their defaults m_oPnlStart.bSetValue( (float) 0.0 ); m_oPnlStop .bSetValue( (float) 100.0 ); m_oPnlStep .bSetValue( (float) 10.0 ); m_oPnlStart.bSetUnits( wxT("msec") ); m_oPnlStop .bSetUnits( wxT("msec") ); m_oPnlStep .bSetUnits( wxT("msec") ); // Set default initial condition values bSetInitC( eINITC_WARM ); // Set input source default values m_oChoSrcName.Clear( ); m_oChoSrcName.Append( wxT("None") ); m_oChoSrcName.SetSelection( 0 ); // Clear the signal generator configuration dialog m_oDlgCfgGEN.bClear( ); // Set parameters check box default values m_oCbxVoltage.SetValue( true ); m_oCbxCurrent.SetValue( false ); m_oCbxPower .SetValue( false ); m_oCbxResist .SetValue( false ); // Set default temperature value m_oPnlTemp.bSetValue( 27.0 ); return( true ); } //************************************************************************************************** // Load information from a simulation object. // // Argument List : // roSimn - A SimnGnuCap object // // Return Values : // true - Success // false - Failure bool PnlGnuCapTR::bLoad( SimnGnuCap & roSimn ) { bool bRtn=true; // Load the components into the signal source choice box PnlAnaBase::LoadSrcNames( roSimn.m_oaCpnts, wxT("VI") ); // Go no further if the TR command isn't valid if( ! roSimn.m_oCmdTR.bIsValid( ) ) return( false ); // Set the sweep source (a sweep source is not mandatory for a TR analysis) PnlAnaBase::bSetSrcCpnt( roSimn.m_oCpntSwpSrc ); // Set the sweep values if( ! m_oPnlStart.bSetValue( roSimn.m_oCmdTR.m_osStart ) ) bRtn = false; if( ! m_oPnlStop .bSetValue( roSimn.m_oCmdTR.m_osStop ) ) bRtn = false; if( ! m_oPnlStep .bSetValue( roSimn.m_oCmdTR.m_osStep ) ) bRtn = false; // Set the initial conditions if( roSimn.m_oCmdTR.m_eInitC != eINITC_NONE ) m_oRbxSweep.SetSelection( roSimn.m_oCmdTR.m_eInitC ); // Load the generator setup dialog if( ! m_oDlgCfgGEN.bSetValues( roSimn.m_oCmdGEN ) ) bRtn = false; // Set the parameters to derive m_oCbxVoltage.SetValue( roSimn.m_oCmdPR.m_bParams[ ePARAM_VLT ] ); m_oCbxCurrent.SetValue( roSimn.m_oCmdPR.m_bParams[ ePARAM_CUR ] ); m_oCbxPower .SetValue( roSimn.m_oCmdPR.m_bParams[ ePARAM_PWR ] ); m_oCbxResist .SetValue( roSimn.m_oCmdPR.m_bParams[ ePARAM_RES ] ); // Set the analysis temperature if( ! m_oPnlTemp.bSetValue( roSimn.m_oCmdTR.m_osTempC ) ) bRtn = false; return( bRtn ); } //************************************************************************************************** // Save information to a simulation object. // // Argument List : // roSimn - A SimnGnuCap object // // Return Values : // true - Success // false - Failure bool PnlGnuCapTR::bSave( SimnGnuCap & roSimn ) { wxString os1; m_osErrMsg.Empty( ); // Set the analysis type roSimn.m_oCmdPR.bSetAnaType( eCMD_TR ); // Set the sweep values roSimn.m_oCmdTR.m_osStart = m_oPnlStart.rosGetValue( ); roSimn.m_oCmdTR.m_osStop = m_oPnlStop .rosGetValue( ); roSimn.m_oCmdTR.m_osStep = m_oPnlStep .rosGetValue( ); // Set the initial conditions roSimn.m_oCmdTR.m_eInitC = (eTypeInitC) m_oRbxSweep.GetSelection( ); // Set the component to be used as a signal source if( m_oChoSrcName.GetStringSelection( ) != wxT("None") ) { // Get the unmodified signal source component, set it as the signal source os1 = m_oChoSrcName.GetStringSelection( ); (Component &) roSimn.m_oCpntSwpSrc = roSimn.roGetCpnt( os1 ); roSimn.m_oCpntSwpSrc.bSetValue( wxT("GENERATOR(1)") ); // Get the GENERATOR command from the Generator Setup dialog m_oDlgCfgGEN.bGetValues( roSimn.m_oCmdGEN ); if( ! roSimn.m_oCmdGEN.bIsValid( ) ) { os1 = wxT("The signal source ") + roSimn.m_oCmdGEN.rosGetErrMsg( ) + wxT(". "); SetErrMsg( os1 ); } } else { roSimn.m_oCpntSwpSrc.bClear( ); roSimn.m_oCmdGEN .bSetDefaults( ); } // Store the parameters to derive roSimn.m_oCmdPR.m_bParams[ ePARAM_VLT ] = m_oCbxVoltage.GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_CUR ] = m_oCbxCurrent.GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_PWR ] = m_oCbxPower .GetValue( ); roSimn.m_oCmdPR.m_bParams[ ePARAM_RES ] = m_oCbxResist .GetValue( ); // Set the analysis temperature roSimn.m_oCmdTR.m_osTempC = m_oPnlTemp.rosGetValue( ); // Create the command strings roSimn.m_oCmdTR.bFormat( ); roSimn.m_oCmdPR.bFormat( ); // Check for errors if( ! roSimn.m_oCmdTR.bIsValid( ) ) SetErrMsg( roSimn.m_oCmdTR.rosGetErrMsg( ) ); if( ! roSimn.m_oCmdPR.bIsValid( ) ) SetErrMsg( roSimn.m_oCmdPR.rosGetErrMsg( ) ); return( bIsOk( ) ); } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // Generator component setup button control event handler. // // Argument List : // roEvtCmd - An object holding information about the event void PnlGnuCapTR::OnBtnSetup( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { m_oDlgCfgGEN.CenterOnParent( ); m_oDlgCfgGEN.ShowModal( ); } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/gnucap/panels/PnlGnuCapDC.hpp0000644000000000000000000000521512452505566021130 0ustar rootroot//************************************************************************************************** // PnlGnuCapDC.hpp * // ----------------- * // Description : This class derives from the Analysis Panel base class and provides a GUI for a * // user to configure a DC Analysis for GNU-Cap electronic circuit simulator. * // Started : 2003-08-18 * // Last Update : 2015-01-05 * // Copyright : (C) 2003 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef PNLGNUCAPDC_HPP #define PNLGNUCAPDC_HPP // Application Includes #include "TypeDefs.hpp" #include "base/PnlAnaBase.hpp" #include "netlist/SimnGnuCap.hpp" //************************************************************************************************** class PnlGnuCapDC : public PnlAnaBase { private : // Functions to create the display objects void Create ( void ); void CreateSigSrc( void ); void DoLayout( void ); void InitSwpUnits( void ); void InitScale ( void ); public : PnlGnuCapDC( wxWindow * poWin ); ~PnlGnuCapDC( ); bool bClear( void ); bool bLoad( SimnGnuCap & roSimn ); bool bSave( SimnGnuCap & roSimn ); // Event handlers void OnScale ( wxCommandEvent & roEvtCmd ); void OnSrcName( wxCommandEvent & roEvtCmd ); // Leave this as the last line as private access is envoked by macro wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // PNLGNUCAPDC_HPP gspiceui-1.1.00+dfsg/src/tests/0000755000000000000000000000000012460575734014764 5ustar rootrootgspiceui-1.1.00+dfsg/src/tests/AppPnlValue.hpp0000644000000000000000000000636412452500333017655 0ustar rootroot//************************************************************************************************** // AppPnlValue.hpp * // ----------------- * // Description : This is a wxWidgets application designed to test and debug the class PnlValue. * // Started : 2014-11-17 * // Last Update : 2015-01-05 * // Copyright : (C) 2014 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** // System Includes #include // Application Includes #include "TypeDefs.hpp" #include "utility/PnlLblTxt.hpp" #include "utility/PnlValue.hpp" //************************************************************************************************** // Class App_PnlValue //************************************************************************************************** class AppPnlValue : public wxApp { public : virtual bool OnInit( ); }; //************************************************************************************************** // Class FrmMain //************************************************************************************************** class FrmMain : public wxFrame { private : PnlLblTxt m_oTxtInput; PnlValue m_oPnlValue; PnlLblTxt m_oTxtOutput; wxButton m_oBtnNext; wxButton m_oBtnRead; wxButton m_oBtnQuit; std::vector oVecTests; public : FrmMain( const wxString & osTitle, const wxPoint & oPosn, const wxSize & oSize ); private : void Create ( void ); void DoLayout( void ); // Event handlers void OnNext ( wxCommandEvent & roEvent ); void OnRead ( wxCommandEvent & roEvent ); void OnAbout( wxCommandEvent & roEvent ); void OnExit ( wxCommandEvent & roEvent ); // In order to be able to react to a menu command, it must be given a unique identifier such as // a const or an enum. enum eDlgItemID { ID_TXT_INPUT = 1, ID_VAL_TEST , ID_TXT_OUTPUT, ID_BTN_NEXT, ID_BTN_READ, ID_BTN_QUIT }; wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** gspiceui-1.1.00+dfsg/src/tests/AppPnlValue.cpp0000644000000000000000000002276212460575734017670 0ustar rootroot//************************************************************************************************** // AppPnlValue.cpp * // ----------------- * // Started : 2014-11-17 * // Last Update : 2015-01-24 * // Copyright : (C) 2014 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "AppPnlValue.hpp" //************************************************************************************************** wxIMPLEMENT_APP( AppPnlValue ); wxBEGIN_EVENT_TABLE( FrmMain, wxFrame ) EVT_MENU ( FrmMain::ID_BTN_NEXT, FrmMain::OnNext ) EVT_MENU ( wxID_EXIT , FrmMain::OnExit ) EVT_MENU ( wxID_ABOUT , FrmMain::OnAbout ) EVT_BUTTON( FrmMain::ID_BTN_NEXT, FrmMain::OnNext ) EVT_BUTTON( FrmMain::ID_BTN_READ, FrmMain::OnRead ) EVT_BUTTON( FrmMain::ID_BTN_QUIT, FrmMain::OnExit ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Class AppPnlValue //************************************************************************************************** bool AppPnlValue::OnInit( ) { FrmMain * poFrmMain = new FrmMain( wxT("test_AppPnlValue"), wxPoint( 83, 83 ), wxDefaultSize ); poFrmMain->Show( true ); return( true ); } //************************************************************************************************** // Class FrmMain //************************************************************************************************** FrmMain::FrmMain( const wxString & osTitle, const wxPoint & oPosn, const wxSize & oSize ) : wxFrame( NULL, wxID_ANY, osTitle, oPosn, oSize ) { wxCommandEvent oNonEvent; // Create the GUI Create( ); DoLayout( ); // Load test values oVecTests.push_back( wxT("10.0E-12F") ); // Working 2015-01-24 oVecTests.push_back( wxT("1.0V") ); // Working 2015-01-24 oVecTests.push_back( wxT("1000.0mV") ); // Working 2015-01-24 oVecTests.push_back( wxT("1.0fV") ); // Working 2015-01-24 oVecTests.push_back( wxT("0.0mV") ); // Working 2015-01-24 oVecTests.push_back( wxT("140mV") ); // Working 2015-01-24 oVecTests.push_back( wxT("1.0pA") ); // Working 2015-01-24 oVecTests.push_back( wxT("1.0E-12A") ); // Working 2015-01-24 oVecTests.push_back( wxT("1000GOhm") ); // Working 2015-01-24 oVecTests.push_back( wxT("1000Ohm") ); // Working 2015-01-24 oVecTests.push_back( wxT("10.0fC") ); // Working 2015-01-24 oVecTests.push_back( wxT("1234") ); // Working 2015-01-24 oVecTests.push_back( wxT("1.235") ); // Working 2015-01-24 oVecTests.push_back( wxT("1.0E-12") ); // Working 2015-01-24 // Load the first test value OnNext( oNonEvent ); } //************************************************************************************************** void FrmMain::Create( void ) { wxMenuBar * poMenuBar = new wxMenuBar; wxMenu * poMenuFile = new wxMenu; wxMenu * poMenuHelp = new wxMenu; wxPanel * poPnlMain = new wxPanel( this ); wxPanel * poPnlCtls = new wxPanel( poPnlMain ); wxPanel * poPnlBtns = new wxPanel( poPnlMain ); // Create the menu items poMenuFile->Append( ID_BTN_NEXT, wxT("&Next...\tCtrl-N") ); poMenuFile->AppendSeparator( ); poMenuFile->Append( wxID_EXIT ); poMenuHelp->Append( wxID_ABOUT ); // Create the menu bar poMenuBar->Append( poMenuFile, wxT("&File") ); poMenuBar->Append( poMenuHelp, wxT("&Help") ); SetMenuBar( poMenuBar ); // Create the text control to contain the value written to the PnlValue test control m_oTxtInput.bCreate( poPnlCtls, ID_TXT_INPUT , 150, 163 ); m_oTxtInput.bSetName( wxT("PnlValue input value") ); // Create the PnlValue test control m_oPnlValue.bCreate( poPnlCtls, ID_VAL_TEST , 150, 90, 70 ); m_oPnlValue.bSetName( wxT("PnlValue test control") ); // Create the text control to contain the value read from the PnlValue test control m_oTxtOutput.bCreate( poPnlCtls, ID_TXT_OUTPUT, 150, 163 ); m_oTxtOutput.bSetName( wxT("PnlValue output value") ); // Create the button control m_oBtnNext.Create( poPnlBtns, ID_BTN_NEXT, wxT("Next") ); m_oBtnRead.Create( poPnlBtns, ID_BTN_READ, wxT("Read") ); m_oBtnQuit.Create( poPnlBtns, ID_BTN_QUIT, wxT("Quit") ); } //************************************************************************************************** void FrmMain::DoLayout( void ) { wxPanel * poPnlCtls = (wxPanel *) m_oPnlValue.GetParent( ); wxPanel * poPnlBtns = (wxPanel *) m_oBtnNext .GetParent( ); wxPanel * poPnlMain = (wxPanel *) poPnlCtls ->GetParent( ); wxBoxSizer * poSzrMain = new wxBoxSizer ( wxVERTICAL ); wxBoxSizer * poSzrCtls = new wxStaticBoxSizer( wxVERTICAL, poPnlCtls ); wxBoxSizer * poSzrBtns = new wxBoxSizer ( wxHORIZONTAL ); wxSizerFlags oFlags; // Set the sizer poPnlMain->SetSizer( poSzrMain ); poPnlCtls->SetSizer( poSzrCtls ); poPnlBtns->SetSizer( poSzrBtns ); // Layout the controls oFlags.Align( wxALIGN_LEFT ); oFlags.Border( wxLEFT | wxRIGHT | wxTOP , 10 ); poSzrCtls->Add( &m_oTxtInput , oFlags ); oFlags.Border( wxLEFT | wxRIGHT , 10 ); poSzrCtls->Add( &m_oPnlValue , oFlags ); oFlags.Border( wxLEFT | wxRIGHT | wxBOTTOM, 10 ); poSzrCtls->Add( &m_oTxtOutput, oFlags ); // Layout the buttons oFlags.Border( wxTOP, 15 ); oFlags.Align( wxALIGN_RIGHT ); poSzrBtns->Add( &m_oBtnNext, oFlags ); poSzrBtns->AddSpacer( 15 ); oFlags.Align( wxALIGN_CENTER ); poSzrBtns->Add( &m_oBtnRead, oFlags ); poSzrBtns->AddSpacer( 15 ); oFlags.Align( wxALIGN_LEFT ); poSzrBtns->Add( &m_oBtnQuit, oFlags ); // Layout the main frame oFlags.Border( wxLEFT | wxRIGHT | wxTOP, 15 ); poSzrMain->Add( poPnlCtls, oFlags ); oFlags.Border( wxBOTTOM , 15 ); oFlags.Align( wxALIGN_CENTER ); poSzrMain->Add( poPnlBtns, oFlags ); // Set minimum size and initial size as calculated by the sizer poSzrMain->SetSizeHints( this ); } //************************************************************************************************** // Event Handlers * //************************************************************************************************** void FrmMain::OnNext( wxCommandEvent & roEvent ) { static size_t sz1=oVecTests.size( ); eTypeUnits eUType; wxString os1; double df1; // Increment the index to the next PnlValue value if( ++sz1 >= oVecTests.size( ) ) sz1 = 0; // Get the PnlValue value os1 = oVecTests[ sz1 ]; // Set the new PnlValue contents m_oTxtInput.bSetText( os1 ); // Decide how the PnlValue should configured to display this value m_oPnlValue.bClear( ); if( UnitsBase::bGetUnitsType( os1, &eUType ) ) { // Display a units choice box m_oPnlValue.bShowUnits( PnlValue::eSHOW_CHO ); m_oPnlValue.bSetUnitsType( eUType ); } else { // Display a units label m_oPnlValue.bShowUnits( PnlValue::eSHOW_LBL ); if( CnvtType::bIsInteger( os1 ) ) { // Display the value as an integer m_oPnlValue.bSetValueType( eVALUE_INT ); m_oPnlValue.bSetSpnRange( 0, 10000 ); m_oPnlValue.bSetSpnIncSz( 1, 1000 ); } else if( CnvtType::bIsFloat( os1 ) ) { // Display the value as a float CnvtType::bStrToFlt( os1, &df1 ); if( (df1>0.1 && df1<1000.0) || df1==0.0 ) m_oPnlValue.bSetValueType( eVALUE_FLT ); else m_oPnlValue.bSetValueType( eVALUE_SCI ); } } // Display the value m_oPnlValue.bSetValue( os1 ); } //************************************************************************************************** void FrmMain::OnRead( wxCommandEvent & roEvent ) { m_oTxtOutput.bSetText( m_oPnlValue.rosGetValue( ) + m_oPnlValue.rosGetUnits( ) ); } //************************************************************************************************** void FrmMain::OnAbout( wxCommandEvent & roEvent ) { wxString os1; os1 << wxT("Test Application for : \n\n") << wxT("C++ class PnlValue and all \n") << wxT("classes it makes use of.\n\n") << wxT("Version 1.07 (2015-01-19)"); wxMessageBox( os1, wxT("About"), wxOK | wxICON_INFORMATION ); } //************************************************************************************************** void FrmMain::OnExit( wxCommandEvent & roEvent ) { Close( true ); } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/tests/obj/0000755000000000000000000000000012432632665015532 5ustar rootrootgspiceui-1.1.00+dfsg/src/tests/obj/App_PnlValue.o0000644000000000000000000430161012432632667020247 0ustar rootrootELF>pS @@œ™SUVXZ\]aceghjlnpqstvxy{}ƒ…‡‰Š‹ŒŽ’”–—™›ž ¡£¥¦¨©«¬­®¯±³µ·¸¹º»½¾ÀÁÂÃÄÆÇÈÉÊËÍÏÐÑÒÓÔÖØÚÛÝÞßàâäåæèéêëìíïðñòóôõö÷øùúüýþ    !#$%&')+-/13579;=?@ABCDEFGHIJKMNOPQRSUVWXZ[]_acefhikmnpqrstuvwy{}~€‚…‡‰‹‘“•–˜šœž ¢¤¦§¨ª¬®¯°±³µ·¹»½¾ÀÂÄÆÈÊÌÎÐÑÒÓÕ×ÙÛÝßàáâäæèéêìíïñóõöøúüþ   !#%&()+,-/13579;=?ACEGIKMOQSTVXY[\]_abceghjkmoqsuwy{}ƒ„…†‡UH‰åH‰}ø¸]ÃUH‰åH‰}ø¸]ÃUH‰åHƒì‰}üH‰uðH‹UðHEüH‰ÖH‰ÇèÉÃUH‰åè]ÃUH‰åATS¾¿è¿@èH‰ÃH‰ßèH‰ØëI‰ÄH‰ßèL‰àH‰Çè[A\]ÃUH‰åAVAUATSHƒìPH‰}˜HE ¾H‰ÇèLe HEÀº2¾2H‰ÇèLmÀHEкT¾ÂH‰ÇèLuпXèH‰ÃL‰ñL‰êL‰æH‰ßèH‰]ØHE H‰ÇèH‹EØH‹HÀH‹H‹UؾH‰×ÿиë*I‰ÄH‰ßèL‰ãëH‰ÃHE H‰ÇèH‰ØH‰ÇèHƒÄP[A\A]A^]ÃUH‰åATSHì€H‰½ˆþÿÿH‰µ€þÿÿH‰•xþÿÿH‰pþÿÿH…þÿÿ¾H‰ÇèH‹…ˆþÿÿH‹½pþÿÿH‹µxþÿÿH‹•€þÿÿHþÿÿQh@@ I‰ùI‰ðH‰Ñºÿÿÿÿ¾H‰ÇèHƒÄH…þÿÿH‰ÇèH‹…ˆþÿÿHÇ¿hèH‰ÃH‰ßèH‰]è¿ÐèH‰Ã¾H‰ßèH‰]à¿ÐèH‰Ã¾H‰ßèH‰]ØH…°þÿÿ¾H‰ÇèL¥°þÿÿ¿`èH‰ÃH‹…ˆþÿÿHƒìATA¹(A¸¹ºÿÿÿÿH‰ÆH‰ßèHƒÄH‰]ÐH…°þÿÿH‰ÇèH‹H…ÐþÿÿH‰ÖH‰ÇèH…ðþÿÿ¾H‰ÇèH‹EàHÐþÿÿH•ðþÿÿA¸¾H‰ÇèH…ðþÿÿH‰ÇèH…ÐþÿÿH‰ÇèH‹EàH‰ÇèH‹H…ÿÿÿH‰ÖH‰ÇèH‹H…0ÿÿÿH‰ÖH‰ÇèH‹EàHÿÿÿH•0ÿÿÿA¸¾ŽH‰ÇèH…0ÿÿÿH‰ÇèH…ÿÿÿH‰ÇèH‹H…PÿÿÿH‰ÖH‰ÇèH‹H…pÿÿÿH‰ÖH‰ÇèH‹EØHPÿÿÿH•pÿÿÿA¸¾–H‰ÇèH…pÿÿÿH‰ÇèH…PÿÿÿH‰ÇèH‹EèH‹HH‹HE¾H‰ÇèHUH‹MàH‹EèH‰ÎH‰ÇÿÓHEH‰ÇèH‹EèH‹HH‹HE°¾H‰ÇèHU°H‹MØH‹EèH‰ÎH‰ÇÿÓHE°H‰ÇèH‹…ˆþÿÿH‹UèH‰ÖH‰Çèé4H‰ÃH…þÿÿH‰ÇèH‰ØH‰ÇèI‰ÄH‰ßèL‰ãéêI‰ÄH‰ßèL‰ãé×I‰ÄH‰ßèL‰ãéÄI‰ÄH‰ßèL‰ãëH‰ÃH…°þÿÿH‰ÇèéH‰ÃH…ðþÿÿH‰ÇèëH‰ÃH…ÐþÿÿH‰ÇèëuH‰ÃH…0ÿÿÿH‰ÇèëH‰ÃH…ÿÿÿH‰ÇèëMH‰ÃH…pÿÿÿH‰ÇèëH‰ÃH…PÿÿÿH‰Çèë%H‰ÃHEH‰ÇèëH‰ÃHE°H‰ÇèëH‰ÃH‹…ˆþÿÿH‰ÇèH‰ØH‰ÇèHeð[A\]ÃUH‰åHƒìH‰}øH‰uðH‹Eø¾H‰ÇèÉÃUH‰åSHƒìXH‰}¨H‰u HE°¾H‰ÇèHEоH‰ÇèHu°HEÐA¹ÿÿÿÿA¸ÿÿÿÿ¹ºH‰ÇèHEÐH‰ÇèHE°H‰Çèë+H‰ÃHEÐH‰ÇèëH‰ÃHE°H‰ÇèH‰ØH‰ÇèHƒÄX[]ÃUH‰åATSHìÀH‰½8ÿÿÿH‰µ0ÿÿÿÆEïë}H…@ÿÿÿ¾H‰ÇèH‹H…pÿÿÿI‰ÑA¸¹Tº¾H‰ÇèH•@ÿÿÿH…pÿÿÿH‰ÖH‰ÇèH…pÿÿÿH‰ÇèH…@ÿÿÿH‰ÇèÆEï»¶Eïƒð„Àt8H‹HEÐH‰ÖH‰Çè»HEÐH‰Æ¿è„ÀtA¼ëA¼„Ût HEÐH‰ÇèE„ä…ÿÿÿëSH‰ÃH…pÿÿÿH‰ÇèëH‰ÃH…@ÿÿÿH‰ÇèH‰ØH‰ÇèI‰Ä„ÛtHEÐH‰ÇèëL‰àH‰ÇèHÄÀ[A\]ÃUH‰åSHƒìH‰}è»HûtHƒë H‰ßèëéHƒÄ[]ÃUH‰åAWAVAUATSHƒì(‰}̉uȃ}Ì…}Èÿÿ… ¿èº¾¿è¾¿èº¾¿èHÇEÀ»HÇE°HÇE¸H‹E°H‹U¸H‰ÆH‰×H‰ñH‰ÐH‰ÎH‰Â¿èH‰E°¿èA¹L‹E°¹ÿÿÿÿºH‰ÆH‹}ÀèH‹EÀHƒÀ H‰E°HƒëA¾A¿L‰öL‰ÿL‰ðL‰úH‰ñH‰ÐH‰ÎH‰Â¿èI‰Æ¿èA¹M‰ð¹ÿÿÿÿºŽH‰ÆH‹}°èL‹u°IƒÆ HƒëA¼A½L‰æL‰ïL‰àL‰êH‰ñH‰ÐH‰ÎH‰Â¿èI‰Ä¿èA¹M‰à¹ÿÿÿÿº–H‰ÆL‰÷èIF HƒëA¹A¸¹º¾H‰Ç躾¿è¾¿èë upper boundidLast == wxID_ANY || winid <= idLast/usr/include/wx-3.0/wx/event.hshouldn't be called twice!m_winParent/usr/include/wx-3.0/wx/containr.hyour program3.0 (wchar_t,compiler with C++ ABI 1002,STL containers,compatible with 2.8)test_PnlValue&Hello... Ctrl-H&File&HelpAboutPnlValue test applicationHello world from wxWidgets!App_PnlValue.cpphandlers defined in non-wxEvtHandler-derived classes must be connected with a valid sink objecthandler || this->IsEvtHandler()ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿinvalid event handlerrealHandlerSetContainerWindowOnHellowxEventFunctorMethodoperator()wxEventTableEntryBaseUH‰åH‰}øHƒ}øtH‹Eøë¸]ÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åSHƒì8H‰}ØH‰uÐH‰UÈH‹HEàH‹MÈH‹uÐH‰ÇèHUàH‹EØH‰ÖH‰ÇèHEàH‰ÇèëH‰ÃHEàH‰ÇèH‰ØH‰ÇèH‹EØHƒÄ8[]Ãÿÿ+>QJfUH‰åHƒìH‰}øH‹EøHƒÀH‰ÇèH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèH‹EøHƒÀH‰ÇèÉÃUH‰åHƒìH‰}øH‰uðH‹UðH‹EøH‰ÖH‰ÇèH‹EøHƒÀH‰ÇèÉÃUH‰åSHƒì8H‰}ÈH‰uÀHEßH‰ÇèèH‰ÂHEàH‹MÀH‰ÎH‰ÇèHEàH‰ÇèH‰ÁH‹EÈHUßH‰ÎH‰ÇèHEàH‰ÇèHEßH‰ÇèH‹EÈHƒÀH‰Çèë+H‰ÃHEàH‰ÇèëH‰ÃHEßH‰ÇèH‰ØH‰ÇèHƒÄ8[]Ãÿÿ•?„a•ªUH‰åSHƒì(H‰}ØH‰uÐHEïH‰ÇèH‹EÐH‰ÇèH‰ÁH‹EØHUïH‰ÎH‰ÇèHEïH‰ÇèH‹EØHƒÀH‰ÇèëH‰ÃHEïH‰ÇèH‰ØH‰ÇèHƒÄ([]Ãÿÿ:]rUH‰åHƒìH‰}øH‰uðH‹EøH;EðtH‹UðH‹EøH‰ÖH‰ÇèH‹EøÉÃUH‰åSHƒìH‰}èH‹EèHƒÀH‰ÇèH‹EèHƒÀH‰ÇèH‹EèH‰Çèë/H‰ÃH‹EèHƒÀH‰ÇèëH‰ÃH‹EèH‰ÇèH‰ØH‰ÇèHƒÄ[]Ãÿÿ;(P4eUH‰åHƒìH‰}øH‰uðH‹EøH;EðtH‹UðH‹EøH‰ÖH‰ÇèH‹EøÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‰uðH‹EøH‹UðH‰H‹EøH‹H‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‹H‰ÇèÉÃUH‰åH‹H…ÀtèH‹H9Ðu¸ë¸]ÃUH‰åH‰}ø]ÃUH‰åH‰}ø]ÃUH‰åH‰}ø]ÃUH‰åSHƒì(H‰}ØH‹EØH‹@ H‹HƒÀH‹H‹UØH‹R H‰×ÿÐH‰EèH‹EØH‹@ HPHEàH‰ÖH‰ÇèH‹EØH‹@ ‹@…ÀuH‹EØH‹@ HÇ@H‹]èHEàH‰ÇèH‰ØHƒÄ([]ÃUH‰åHƒì0H‰}øH‰uð‰UìH‰MàL‰EØH‹EøH‹UðH‰H‹EøH‹UàH‰PH‹Eø‹Uì‰PH‹EøH‹UØH‰P¿èH‹UøH‰B èH‹UøH‰B(H‹EøHÇ@0ÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åSHƒìH‰}èH‹EèHƒÀ0H‰ÇèH‹EèH‰ÇèëH‰ÃH‹EèH‰ÇèH‰ØH‰ÇèHƒÄ[]Ãÿÿ +$@UH‰åSHƒìH‰}èH‹EèH‹X0H…ÛtH‰ßèH‰ßèHƒÄ[]ÃUH‰åèƒð„Àtèë¶]ÃUH‰åATSHƒì0H‰}ÈH‰uÀ»è„Àt2H‹UÀHEÐH‰ÖH‰Çè»HEÐH‰ÇèH;EÈrA¼ëA¼„Ût HEÐH‰ÇèD‰àëI‰Ä„Ût HEÐH‰ÇèL‰àH‰ÇèHƒÄ0[A\]Ãÿÿ -nd‡UH‰åSHƒì8H‰}èH‰uàH‰U؉MÔL‰EÈL‰MÀH‹EèH‹UàH‰H‹EèHxH‹uÀH‹MÈ‹UÔH‹EØI‰ðH‰ÆèH‹EèHƒÀ@H‰ÇèëH‰ÃH‹EèHƒÀH‰ÇèH‰ØH‰ÇèHƒÄ8[]Ãÿÿ HX_xUH‰åHƒìH‰}øH‰uðH‹EðH‰ÇèH‰ÂH‹EøH‰ÖH‰Ç¸èÉÃUH‰åSHìH‰½øþÿÿH‰•PÿÿÿH‰XÿÿÿL‰…`ÿÿÿL‰hÿÿÿ„Àt#)…pÿÿÿ)M€)U)] )e°)mÀ)uÐ)}àH‰µðþÿÿÇ…ÿÿÿÇ… ÿÿÿ0HEH‰…ÿÿÿH…@ÿÿÿH‰…ÿÿÿH‹•ðþÿÿH… ÿÿÿH‰ÖH‰ÇèH•ÿÿÿH ÿÿÿH‹…øþÿÿH‰ÎH‰ÇèH… ÿÿÿH‰ÇèëH‰ÃH… ÿÿÿH‰ÇèH‰ØH‰ÇèHÄ[]Ãÿÿž¾ÔÍìUH‰åSHƒìHH‰}ÈH‰uÀH‰U¸H‰M°H‹EÈHXHEÐH‹U°H‹M¸H‰ÎH‰ÇèHMÐH‹EÀH‰ÚH‰ÎH‰ÇèHEÐH‰ÇèëH‰ÃHEÐH‰ÇèH‰ØH‰ÇèHƒÄH[]Ãÿÿ3I\UqUH‰åHƒì H‰}øH‰uðH‰UèH‹EøH‹0H‹MèH‹UðH‹EøH‰ÇèÉÃUH‰åH‰}ø‰uô‰UðH‹Eø‹Uô‰H‹Eø‹Uð‰P]ÃUH‰åH‰}ø‰uô‰UðH‹Eø‹Uô‰H‹Eø‹Uð‰P]ÃUH‰åH‰}øH‹EøH‹@¶<*uH‹EøH‹@HƒÀëH‹EøH‹@]ÃUH‰åH‰}øH‰uðH‹EøH‹UðH‰]ÃUH‰åHƒìH‰}øH‰uðH‹EðH‹H‹EøH‹H‰ÖH‰Çè…À”ÀÉÃUH‰åHƒìH‰}øH‰uðH‹EðH‹H‹EøH‹H‰ÖH‰Çè…À•ÀÉÃUH‰åH‰}øH‹EøHÇ]ÃUH‰åHƒì0H‰}ØH‰uÐH‹EØH‹HƒèH‹H‰ÇèH‰ÂHEàH‰ÖH‰ÇèH‹EÐH‹HƒèH‹H‰ÇèH‰ÂHEðH‰ÖH‰ÇèHUàHEðH‰ÖH‰Çè„Àt|H‹EÐH‰EøH‹EØH‹PH‹EøH‹@H9Âu"H‹EØH‹PH‹EøH‹@H9ÂtH‹EØH‹@H…Àt H‹EøH‹@H…Àu)H‹EØH‹PH‹EøH‹@H9Ât H‹EøH‹@H…Àu¸ë ¸ë¸ÉÃUH‰åH‰}øH‹EøH‹@]ÃUH‰åH‰}øH‹EøH‹PH‹@]ÃUH‰åH‰}øH‹Eø‹@]ÃUH‰åH‰}øH‹EøH‹@H]ÃUH‰åHƒì H‰}ø‰uô‰UðH‰MèL‰EàH‹Eø‹Uô‰H‹Eø‹Uð‰PH‹EøH‹UèH‰PH‹EøH‹UàH‰PH‹H…Àt?ƒ}ðÿt9‹Eô;Eð~1A¸¹º¾U ¿è¶„Àt¸ë¸„Àt ÆèÉÃUH‰åHƒìH‰}øH‹EøH‹@H…ÀtH‹EøH‹@H‹HƒÀH‹H‹UøH‹RH‰×ÿÐÉÃUH‰åHƒì0H‰}øH‰uð‰Uì‰MèL‰EàL‰MØH‹EøH‹}ØH‹Mà‹Uè‹uìI‰øH‰ÇèH‹EøH‹UðH‰PÉÃUH‰åH‰}øH‰uðH‹EøH‹UðH‰P]ÃUH‰åH‰}øH‰uðH‹EøH‹UðH‰P ]ÃUH‰åSHƒìH‰}èH‰uàH‹EèH‹HƒÀ@H‹H‹EàH‹HƒÀ(H‹H‹UàH‰×ÿÐH‰ÂH‹EèH‰ÖH‰ÇÿÓHƒÄ[]ÃUH‰åH‰}øH‰uð¸]ÃUH‰åHƒìH‰}øH‰uðH‹UðH‹EøH‰ÖH‰ÇèÉÃUH‰åHƒì0H‰}èH‰uàH‰UØH‹EèH‹@H…Àt H‹EèH‹@ëH‹EàH‰EøH‹EèH‹@ƒàH…Àu H‹EèH‹@ë'H‹EèH‹@H‰ÂH‹EøHÐH‹H‹EèH‹@HƒèHÐH‹H‹UèH‹RH‰ÑH‹UøHÑH‹UØH‰ÖH‰ÏÿÐÉÃUH‰åHƒìH‰}øH‹EøH‹H¸H‹H‹UøH‰×ÿÐÉÃUH‰åH‰}øH‰uð]ÃUH‰åH‰}øH‰uð]ÃUH‰åH‰}ø]ÃUH‰åH‰}øH‹EøH‰]ÃUH‰åH‹]ÃUH‰åH‰}ø¸]ÃUH‰åH‰}øH‹Eø¶€.]ÃUH‰åH‰}øH‰uð¸]ÃUH‰åH‰}ø‰uô]ÃUH‰åH‰}ø¸]ÃUH‰åHƒìH‰}øH‰uðH‹EðH‰ÇèÉÃUH‰åHƒìH‰}øH‰uðH‹EøHHH‹EðH‰ÆH‰×èÉÃUH‰åHƒìH‰}øH‰uðH‹EðHHH‹EøH‰ÖH‰ÇèH‹EøÉÃUH‰åH‰}øH‹Eø‹€]ÃUH‰åHƒì0H‰}ØH‹EØH‹H H‹HUèHuìH‹MØH‰ÏÿЋUè‹MìHEð‰ÎH‰ÇèH‹EðÉÃUH‰åHƒì H‰}ø‰uô‰Uð‰MìD‰EèD‰MäH‹EøH‹HXH‹HƒìD‹MäD‹Uè‹Mì‹Uð‹uôH‹}øD‹EAPE‰ÐÿÐHƒÄÉÃUH‰åSHƒì(H‰}ØH‰uÐH‹EØH‹H8H‹H‹EØH‹HH‹H‹MÐH‹UØH‰ÎH‰×ÿÐH‰EàHUàH‹EØH‰ÖH‰ÇÿÓHƒÄ([]ÃUH‰åSHƒì(H‰}ØH‰uÐH‹EØH‹H@H‹H‹EØH‹HH‹H‹MÐH‹UØH‰ÎH‰×ÿÐH‰EàHUàH‹EØH‰ÖH‰ÇÿÓHƒÄ([]ÃUH‰åHƒì H‰}èH‹Eè‹P|H‹Eè‹HxHEð‰ÎH‰ÇèH‹EðÉÃUH‰åHƒì H‰}èH‹Eè‹„H‹E苈€HEð‰ÎH‰ÇèH‹EðÉÃUH‰åSHƒì(H‰}ØH‹EØH‹HH‹H‹EØH‹HXH‹H‹UØH‰×ÿÐH‰EàHUàH‹EØH‰ÖH‰ÇÿÓHƒÄ([]ÃUH‰åSHƒì(H‰}ØH‹EØH‹HH‹H‹EØH‹H`H‹H‹UØH‰×ÿÐH‰EàHUàH‹EØH‰ÖH‰ÇÿÓHƒÄ([]ÃUH‰åSHƒìHH‰}¸H‹E¸H‰ÇèH‰EÐH‹E¸H‰ÇèH‰EÀ‹UÄ‹EÔ‰Ö‰Çè‰Ã‹UÀ‹EЉ։Çè‰ÁHEà‰Ú‰ÎH‰ÇèH‹EàHƒÄH[]ÃUH‰åH‰}øH¸ð?H‰EðòEð]ÃUH‰åH‰}ø¸]ÃUH‰åH‰}ø]ÃUH‰åHƒìH‰}øH‹EøH‹HÀH‹H‹Uø¾H‰×ÿÐÉÃUH‰åHƒìH‰}ø‰uô‰UðH‹EøH‹HÀH‹H‹Uø¾H‰×ÿÐÉÃUH‰åHƒìH‰}ø‰uô‰UðH‹EøH‰ÇèÉÃUH‰åH‰}øH‹Eø¶€0Ðèƒà]ÃUH‰åH‰}øH‰uðH‹EøH‹UðH‰8]ÃUH‰åH‰}øH‹EøH‹€8]ÃUH‰åH‰}ø‰uôH‹EøH‹8‹EôH˜H!ÐH…À•À]ÃUH‰åH‰}øH‰uðH‹EøH‹UðH‰@]ÃUH‰åH‰}ø‰ðˆEôH‹Eø¶Uôˆ`]ÃUH‰åH‰}øH‹Eø¶€`]ÃUH‰åHƒìH‰}øH‹EøH‹H(H‹H‹UøH‰×ÿÐÉÃUH‰åH‰}ø¸]ÃUH‰åHƒìH‰}øH‹EøH‹H@H‹H‹UøH‰×ÿÐÉÃUH‰åHƒìH‰}øH‹EøH‹H@H‹H‹UøH‰×ÿÐÉÃUH‰åHƒìH‰}øH‹EøH‹HàH‹H‹UøH‰×ÿЄÀtH‹EøH‰Çè„Àt¸ë¸ÉÃUH‰åH‰}øH‰uð¸]ÃUH‰åH‰}øH‹EøH‹€ˆ]ÃUH‰åHƒìH‰}øH‰uðH‹EøH‰ÇèH‹UðH‰ÖH‰ÇèÉÃUH‰åH‰}øH‹EøH‹€]ÃUH‰åHƒìH‰}øH‰uðH‹UðH‹EøH‰ÖH‰ÇèH‹EøÉÃUH‰åHƒìH‰}øH‰uðH‹EøHøH‹EðH‰ÆH‰×èÉÃUH‰åHƒìH‰}øèH;Eø”ÀÉÃUH‰åH‰}øH‰uð]ÃUH‰åHƒìH‰}øH‰uðH‹EðH‰Çè‰ÂH‹Eø‰ÖH‰ÇèH‹EøÉÃUH‰åH‰}ø¸]ÃUH‰åH‰}ø¸]ÃUH‰åH‰}ø‰ñ‰ÐˆMôˆEð]ÃUH‰åH‰}ø‰uô¸]ÃUH‰åH‰}øH‹EøH‹€˜]ÃUH‰åH‰}ø‰ðˆEô¸]ÃUH‰åH‰}ø¸]ÃUH‰åH‰}øH‰uð]ÃUH‰åH‰}ø]ÃUH‰åH‰}ø¸]ÃUH‰åH‰}ø¸]ÃUH‰åH‰}ø¸]ÃUH‰åH‰}øH‹Eø]ÃUH‰åH‰}ø¸]ÃUH‰åH‰}ø¸]ÃUH‰åH‰}øH‹]ÃUH‰åH‰}ø‰uô¸ÿÿÿÿ]ÃUH‰åH‰}ø‰uô¸ÿÿÿÿ]ÃUH‰åHƒìH‰}øH‰uðH‹UðH‹EøH‰ÖH‰ÇèÉÃUH‰åHƒìH‰}øH‰uðH‹EøHÐH‹EðH‰ÆH‰×èÉÃUH‰åHƒìH‰}øH‰uðH‹EðHÐH‹EøH‰ÖH‰ÇèH‹EøÉÃUH‰åH‰}øH‹EøH‹€À]ÃUH‰åH‰}ø¸]ÃUH‰åH‰}ø¸]ÃUH‰åHƒìH‰}øH‹EøH‹HhH‹H‹UøH‰×ÿЃðÉÃUH‰åH‰}øH‹EøHÇH‹EøHÇ@H‹EøÆ@H‹EøÆ@H‹EøÆ@H‹EøHÇ@]ÃUH‰åHƒìH‰}øH‹EøHǸ…Àt H‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‰uðH‹H…Àt>H‹EøH‹@H…Àt1A¸¹º¾9¿è¶„Àt¸ë¸„Àt ÆèH‹EøH‹UðH‰PÉÃUH‰åHƒìH‰}øH‹EøH‰Çè„ÀuH‹Eø¶@„ÀtH‹EøH‰Çè„Àt¸ë¸ÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøHÇH‹EøH@H‰ÇèH‹EøH‰Ç踅Àt H‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèH‹EøHÇÉÃUH‰åHƒìH‰}øH‹EøHÇH‹EøH‰Ç踅Àt H‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèH‹EøH‰ÇèÉÃUH‰åSHƒì8H‰}èH‰uà‰UÜH‰MÐL‰EÈL‰MÀH‹EèH‰ÇèH‹EèHÇH‹EèHƒìL‹EÀH‹}ÈH‹MЋUÜH‹uàÿuM‰ÁI‰øH‰ÇèHƒÄëH‰ÃH‹EèH‰ÇèH‰ØH‰ÇèH‹]øÉÃÿÿ '^i~UH‰åH‰}øH‰uðH‰Uè‰Mä]ÃUH‰åH‰}ø]ÃUH‰åH‰}ø¸]ÃUH‰åH‰}ø¸]ÃUH‰åH‰}ø¸]ÃUH‰åHƒìH‰}øH‹EøH‹HàH‹H‹UøH‰×ÿÐÉÃUH‰åH‰}ø‰ðˆEôH‹Eø¶Uôˆˆ]ÃUH‰åH‰}øH‹Eø¶€ˆ]ÃUH‰åH‰}øH‰uð]ÃUH‰åHƒì H‰}øH‰uðH‰UèH‹EøH‹HH‹H‹MøH‹UèH‹uðH‰ÏÿÐÉÃUH‰åH‰}øH‹Eø¶€˜]ÃUH‰åHƒìH‰}øH‰uðH‹EðHØH‹EøH‰ÖH‰ÇèH‹EøÉÃUH‰åHƒìH‰}øH‰uðH‹EøH‹HxH‹H‹MðH‹UøH‰ÎH‰×ÿÐÉÃUH‰åHƒìH‰}øH‰uðH‹EðH‹H€H‹H‹UøH‹MðH‰ÎH‰×ÿÐH‹EøÉÃUH‰åH‰}øH‹Eø¶€ý]ÃUH‰åH‰}øH‹EøH‹€]ÃUH‰åH‰}øH‹EøH‹€8]ÃUH‰åH‰}øH‹EøH‹€H]ÃUH‰åHƒìH‰}øH‰uðH‹EøH‹HØH‹H‹MðH‹UøH‰ÎH‰×ÿЃð„ÀtH‹EøH‹UðH‰ÖH‰Çè„Àt¸ë¸ÉÃUH‰åH‰}ø]ÃUH‰åH‰}ø]ÃUH‰åH‰}ø]ÃUH‰åSHƒì8H‰}èH‰uà‰UÜH‰MÐL‰EÈL‰MÀH‹EèH‰ÇèH‹EèHÇH‹EèH‰ÇèL‹EÀH‹}ÈH‹MЋUÜH‹uàH‹EèÿuÿuM‰ÁI‰øH‰ÇèHƒÄëH‰ÃH‹EèH‰ÇèH‰ØH‰ÇèH‹]øÉÃÿÿ '>0t‰UH‰åHƒì H‰}èHEðº¾H‰ÇèH‹EðÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèH‹EøÆ@ÉÃUH‰åSHƒìH‰}èH‹Eè¶@„Àt+H‹EèH‰ÇèH‰ÃH‹EèH‰ÇèºH‰ÞH‰ÇèH‹EèH‰ÇèHƒÄ[]ÃUH‰åSHƒìH‰}èH‹EèH‰ÇèH‹EèH‰ÇèëH‰ÃH‹EèH‰ÇèH‰ØH‰ÇèHƒÄ[]Ãÿÿ ' <UH‰åSHƒìH‰}èH‰uàH‹EèH‰ÇèH‹EèHÇH‹EèHƒÀhH‰ÇèH‹EèHƒè€H‰ÇèH‹UàH‹EèH‰ÖH‰ÇèëDH‰ÃH‹EèHƒè€H‰ÇèëH‰ÃH‹EèHƒÀhH‰ÇèëH‰ÃH‹EèH‰ÇèH‰ØH‰ÇèHƒÄ[]Ãÿÿ3‡CrV]œUH‰åSHƒì(H‰}è‰uäH‰UØH‰MÐD‰EàH‹EèH‹HàH‹‹}àH‹MÐH‹UØ‹uäH‹EèA¹A‰øH‰ÇèH‰ÂH‹EèH‰ÖH‰ÇÿÓHƒÄ([]ÃUH‰åSHƒìXH‰}¨H‹HE°H‰ÖH‰ÇèH‹HEÐH‰ÖH‰ÇèHM°HUÐH‹E¨A¸¾þÿÿÿH‰ÇèH‰ÃHEÐH‰ÇèHE°H‰ÇèH‰Øë+H‰ÃHEÐH‰ÇèëH‰ÃHE°H‰ÇèH‰ØH‰ÇèHƒÄX[]Ãÿÿ4‰Sxb‰nžUH‰åSHƒìH‰}èH‰uàH‹EèH‹UàH‰ÖH‰ÇèH‹EèHÇH‹EèH‰ÇèëH‰ÃH‹EèH‰ÇèH‰ØH‰ÇèHƒÄ[]Ãÿÿ 6=RUH‰åH‰}øH‹EøH‹€`]ÃUH‰åH‰}øH‰uðH‹EøH‹UðH‰`]ÃUH‰åHƒìH‰}øH‰uðH‹EøH‹€hH;EðtDH‹EøH‹€hH…Àt%H‹EøH‹€hH‹HƒÀH‹H‹UøH‹’hH‰×ÿÐH‹EøH‹UðH‰hÉÃUH‰åH‰}ø]ÃUH‰åH‰}ø‰uô]ÃUH‰åH‰}ø]ÃUH‰åHƒìH‰}øH‹EøH‰ÇèH‹EøHÇÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèH‹EøHÇÉÃUH‰åATSHƒìH‰}è¿@èH‰ÃH‰ßèH‰ØëI‰ÄH‰ßèL‰àH‰ÇèHƒÄ[A\]Ãÿÿ ):UH‰åSHƒì(H‰}ØH‰uÐH‹EÐH‰Çè‰Ã¿è‹9ÃtH‹EÐH‰Çè‰Ã¿è‹9Ãu¸ë¸„À„ƒH‹EØH‹HH‹H‹UØH‰×ÿÐH‰EèHƒ}èt_H‹EÐH‰ÇèH‰EàHƒ}àtH‹EàH‹UèH‰ÖH‰Çèƒð„Àt¸ë¸„ÀtH‹EèH‹UÐH‰ÖH‰Çè„Àt¸ëH‹EØH‹UÐH‰ÖH‰ÇèHƒÄ([]ÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèH‹EøHÇH‹EøHÇ@XÉÃÿÿ &0Aÿÿa¿u¯…#Ôÿÿ´9}è¨ÿ³…Áÿјßÿ難ÿ˜Îɾàÿù²åÁùÐ*ÿŽ¡³Â¡ÑÿƒÉ¨µ·ÉÆ&ÿþ݇&ÿ¿îÈÿ€— ÿÿ.„Ts`„l™ÿÿ /(Hÿÿ.1_x‰‡–Àºùµ×ÿÿ 3Dm‚ÿÿ$Jcÿÿ$Jcÿÿ +$@ÿÿ KRyÿÿ'<ÿÿ %CM^ÿÿ ž,Öëÿÿ2avÿÿ2avÿÿ3(«­ý´UH‰åSHƒìH‰}èH‹EèHƒÀ@H‰ÇèH‹EèHƒÀH‰ÇèëH‰ÃH‹EèHƒÀH‰ÇèH‰ØH‰ÇèHƒÄ[]ÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åSHƒì(H‰}èH‰uàH‰UØHƒ}ØÿuH‹EàH‰ÇèH‰EØH‹EèH‰ÇèHƒ}àt,¿èH‰ÃH‹UØH‹Eà¹H‰ÆH‰ßèH‹EèH‰ëH‰ÃH‹EèH‰ÇèH‰ØH‰ÇèH‹EèHƒÄ([]ÃUH‰åHƒìH‰}øèH‹UøH‰ÉÃUH‰åHƒìH‰}øèH‹UøH‰ÉÃUH‰åHƒìH‰}øH‰uðH‹EðH‹H‹EøH‰H‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‹H‰ÇèÉÃUH‰åH‰}øH‹EøHÇ]ÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‹H‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åSHƒìH‰}èH‹EèH‰ÇèH‹EèH‹PH‹EèH‹HH‹EèH‰ÎH‰ÇèH‹EèHƒÀH‰ÇèëH‰ÃH‹EèHƒÀH‰ÇèH‰ØH‰ÇèHƒÄ[]ÃUH‰åSHƒìH‰}èH‹EèH‰ÇèH‹EèH‹PH‹EèH‹HH‹EèH‰ÎH‰ÇèH‹EèHƒÀH‰ÇèëH‰ÃH‹EèHƒÀH‰ÇèH‰ØH‰ÇèHƒÄ[]ÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åSHƒìH‰}èH‹EèHƒÀH‰ÇèH‹EèH‰ÇèëH‰ÃH‹EèH‰ÇèH‰ØH‰ÇèHƒÄ[]ÃUH‰åH‰}øH‹Eø]ÃUH‰å‰}ü‰uø‹Eü;Eø~‹Eüë‹Eø]ÃUH‰åHƒìH‰}øH‹EøH‰ÇèH‹EøHÇÉÃUH‰åSHƒìH‰}èH‹EèH‰ÇèH‹EèHÇH‹EèH@H‰ÇèH‹EèH‹UèHÂ@H‰ÆH‰×èë,H‰ÃH‹EèH@H‰ÇèH‹EèH‰ÇèH‰ØH‰ÇèHƒÄ[]ÃUH‰åHƒì H‰}èH‹UèHEðH‰ÖH‰ÇèH‹EðÉÃUH‰åH‰}øH‰uðH‹EøH‹H‹EðH‹H9•À]ÃUH‰åH‰}øH‹EøH‹HƒÀ]ÃUH‰åH‰}øH‹EøH‹H‹H‹EøH‰H‹Eø]ÃUH‰åHƒì H‰}èH‹EèH‹HEðH‰ÖH‰ÇèH‹EðÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åSHƒìH‰}èH‹EèH‰ÇèH‹EèH‰ÇèëH‰ÃH‹EèH‰ÇèH‰ØH‰ÇèHƒÄ[]ÃUH‰åHƒì H‰}ðH‰uàH‰Uèë$HEðH‰ÇèH‹H‹EèH‰×ÿÐHEðH‰ÇèHUàHEðH‰ÖH‰Çè„ÀuÅH‹EèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèH‹EøH‰ÇèÉÃUH‰åH‰}øH‹Eø]ÃUH‰åATSHƒì H‰}èH‰ðH‰ÑH‰ÊH‰EÐH‰UØ¿ èH‰ÃH‹UÐH‹EعH‰ÖH‰ÂH‰ßèH‰ØëI‰ÄH‰ßèL‰àH‰ÇèHƒÄ [A\]ÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åSHƒìH‰}èH‹EèH‹èH9ÔÀ„ÀtëHH‹EèH‹·Pƒêf‰P·@f…À”À„ÀtH‹EèH‹H…ÛtH‰ßèH‰ßèèH‹UèH‰HƒÄ[]ÃUH‰åHƒì H‰}øH‰uðH‰Uè‰MäH‹Eø‹MäH‹UèH‹uðH‰ÇèÉÃUH‰åè]ÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åSHƒìH‰}èH‹EèH‹èH9ÔÀ„ÀtëHH‹EèH‹·Pƒêf‰P·@f…À”À„ÀtH‹EèH‹H…ÛtH‰ßèH‰ßèèH‹UèH‰HƒÄ[]ÃUH‰åè]ÃUH‰åSHƒìH‰}èH‹EèH‹èH9ÔÀ„ÀtëH‹EèH‹·PƒÂf‰PHƒÄ[]ÃUH‰åH‰}øH‹EøH‹]ÃUH‰åH‰}ø]ÃUH‰åH‰}ø]ÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‹PH‹EøH‹HH‹EøH‰ÎH‰ÇèH‹EøHÇ@ÉÃUH‰åHƒì0H‰}èH‰uàH‰UØH‹EèHPHEÿH‰ÖH‰ÇèH‹EØHPH‹MàHEÿH‰ÎH‰ÇèHEÿH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‹PH‹EøH‹HH‹EøH‰ÎH‰ÇèH‹EøHÇ@ÉÃUH‰åHƒì0H‰}èH‰uàH‰UØH‹EèHPHEÿH‰ÖH‰ÇèH‹EØHPH‹MàHEÿH‰ÎH‰ÇèHEÿH‰ÇèÉÃUH‰åH‰}ø]ÃUH‰åH‰}ø]ÃUH‰åH‰}øH‰uðH‹EøH‹UðH‰]ÃUH‰åHƒìH‰}øH‹EøH‰ÇèH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åSHƒì8H‰}ÈH‹EÈH‹H‰EèëgH‹EèH‰EàH‹EèH‹H‰EèH‹EàHƒÀH‰ÇèH‰ÃHEßH‹UÈH‰ÖH‰ÇèHEßH‰ÞH‰ÇèHEßH‰ÇèH‹UàH‹EÈH‰ÖH‰ÇèH‹EÈH;EèuHƒÄ8[]ÃUH‰åH‰}øH‹UøH‹EøH‰H‹UøH‹EøH‰P]ÃUH‰åH‰}ø]ÃUH‰åSHƒì(H‰}èH‰ðH‰ÖH‰òH‰EÐH‰UØH‰MàH‹EèH‰ÇèH‹EèH‰ÇèH‹EèHÇH‹EèH‹UàH‰PH‹MèH‹EÐH‹UØH‰AH‰QH‹H…ÀtDHƒ}àu=èƒð„Àt1A¸¹º¾¿è¶„Àt¸ë¸„Àt Æè¿èëH‰ÃH‹EèH‰ÇèH‰ØH‰ÇèHƒÄ([]ÃUH‰åH‰}ø]ÃUH‰åHƒì@H‰}ØH‰uÐH‰UÈHÇEøëiH‹EøHÅH‹EÐHÐH‹H‰Eðë'H‹EðH‰EèH‹EðH‹@0H‰EðH‹UèH‹EØH‰ÖH‰ÇèHƒ}ðuÒH‹EøHÅH‹EÐHÐHÇHƒEøH‹EøH;EÈrÉÃUH‰åHƒìH‰}øH‰uðH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åHƒì H‰}øH‰uðH‰UèH‹EðH‰ÇèÉÃUH‰åH‰}ø]ÃUH‰åHƒì@H‰}ØH‰uÐH‰UÈHÇEøëiH‹EøHÅH‹EÐHÐH‹H‰Eðë'H‹EðH‰EèH‹EðH‹@ H‰EðH‹UèH‹EØH‰ÖH‰ÇèHƒ}ðuÒH‹EøHÅH‹EÐHÐHÇHƒEøH‹EøH;EÈrÉÃUH‰åHƒìH‰}øH‰uðH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åHƒì H‰}øH‰uðH‰UèH‹EðH‰ÇèÉÃUH‰åSHƒì(H‰}ØH‰uÐH‹]ÐHEïH‹UØH‰ÖH‰ÇèHEïH‰ÞH‰ÇèHEïH‰ÇèH‹EØHHH‹EкH‰ÆH‰ÏèëH‰ÃHEïH‰ÇèH‰ØH‰ÇèHƒÄ([]ÃUH‰åSHƒì(H‰}ØH‰uÐH‹]ÐHEïH‹UØH‰ÖH‰ÇèHEïH‰ÞH‰ÇèHEïH‰ÇèH‹EØHHH‹EкH‰ÆH‰ÏèëH‰ÃHEïH‰ÇèH‰ØH‰ÇèHƒÄ([]ÃUH‰åHƒìH‰}øH‰uðH‹EðHPH‹EøH‰ÖH‰ÇèH‹EøÉÃUH‰åHƒì H‰}øH‰uðH‰UèH‹EðH‰ÇèÉÃUH‰åHƒìH‰}øH‰uðH‹EðHPH‹EøH‰ÖH‰ÇèH‹EøÉÃUH‰åHƒì H‰}øH‰uðH‰UèH‹EðH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèH‹EøHÇH‹EøHÇ@ÉÃUH‰åH‰}ø]ÃUH‰åHƒìH‰}øH‰uðH‹EðH‰ÇèH‰ÂH‹EøH‰ÖH‰ÇèH‹EøÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åH‰}øH‹Eø]ÃUH‰åH‰}øH‰uð]ÃUH‰åHƒìH‰}øH‰uðH‹EøH‹MðºH‰ÎH‰ÇèÉÃUH‰å¸]ÃUH‰åH‰}ø]ÃUH‰åH‰}ø]ÃUH‰åH‰}ø]ÃUH‰åH‰}ø]ÃUH‰åH‰}ø]ÃUH‰åHƒìH‰}øH‰uðH‹EðH‰ÇèÉÃUH‰åHƒìH‰}øH‰uðH‹EðH‰ÇèÉÃUH‰åHƒìH‰}øH‰uðH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‰uðH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèÉÃUH‰åH‰}øH‹Eø]ÃUH‰åHƒìH‰}øH‰uðH‹EøH‰ÇèÉÃUH‰åH‰}ø]ÃUH‰åHƒì H‰}øH‰uðH‰UèH‹EðH‰ÇèÉÃUH‰åH‰}ø]ÃUH‰åH‰}ø]èÿÿÿÿÿÿÿUH‰åHƒìH‰}øH‹EøHÇH‹EøHÇ@XH‹EøH‰Ç踅Àt H‹EøH‰ÇèÉÃHƒïXéUH‰åHƒìH‰}øH‹EøH‰ÇèH‹EøH‰ÇèÉÃHƒïXëÔUH‰åHƒìH‰}øH‹EøHÇH‹EøH‰Ç踅Àt H‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøHÇH‹EøH‰Ç踅Àt H‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøHÇH‹EøH‰Ç踅Àt H‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèH‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøHÇH‹EøH‰Ç踅Àt H‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèH‹EøH‰ÇèÉÃ20wxEventFunctorMethodI14wxEventTypeTagI14wxCommandEventE12wxEvtHandler7wxEventS3_E7FrmMain12App_PnlValue21wxMDIClientWindowBase20wxMDIParentFrameBase19wxNavigationEnabledI8wxWindowE20wxObjectEventFunctor20wxThreadHelperThreadUH‰åHƒìH‰}øH‹EøHÇH‹EøH‰Ç踅Àt H‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‰ÇèH‹EøH‰ÇèÉÃUH‰åHƒì0H‰}èH‰uàH‰UØH‹EèH‹@H‰EøHƒ}øukH‹EàH‰ÇèH‰EøHƒ}øuTH‹H…Àt1A¸¹º¾¿è¶„Àt¸ë¸„Àt Æèë_H‹EèH‹@ƒàH…Àu H‹EèH‹@ë'H‹EèH‹@H‰ÂH‹EøHÐH‹H‹EèH‹@HƒèHÐH‹H‹UèH‹RH‰ÑH‹UøHÑH‹UØH‰ÖH‰ÏÿÐÉÃUH‰åHƒì0H‰}ØH‰uÐH‹EØH‹HƒèH‹H‰ÇèH‰ÂHEàH‰ÖH‰ÇèH‹EÐH‹HƒèH‹H‰ÇèH‰ÂHEðH‰ÖH‰ÇèHUàHEðH‰ÖH‰Çè„Àt¸ëzH‹EÐH‰EøH‹EØH‹PH‹EøH‹@H9Âu"H‹EØH‹PH‹EøH‹@H9ÂtH‹EØH‹@H…Àt H‹EøH‹@H…Àu)H‹EØH‹PH‹EøH‹@H9Ât H‹EøH‹@H…Àu¸ë¸ÉÃUH‰åHƒìH‰}øH‹EøH‹@H‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH‹PH‹@H‰×H‰ÆèÉÃUH‰åHƒìH‰}øH‹EøH@H‰Çèƒð„Àt H‹EøH‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH@H‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH@H‰ÇèÉÃUH‰åHƒìH‰}øH‹EøH@H‰ÇèÉÃUH‰åHƒìH‰}øH‰uðH‹EøH‹UðH‰ÖH‰ÇèH‹EøH@H‰Çè„Àt)H‹Eø¾H‰Çèƒð„ÀtH‹Eø¾H‰ÇèÉÃUH‰åHƒìH‰}øH‰uðH‹EøH‹UðH‰ÖH‰ÇèH‹EøH@H‰ÇèÉÃUH‰åH‰}øH‹Eø]ÃUH‰åH‰}øH‹Eø]ÃUH‰åH‰øH‰ñH‰ÊH‰EðH‰UøH‹EðH‹Uø]ÃN9wxPrivate11HandlerImplI12wxEvtHandler7wxEventLb1EEERŸ+“;+ÔMØ,õÔ,ö®,ûnU,ünU,ýnU,þnU ,ÿnU(,nU0,nU8,nU@,nUH,nUP,nUX,\`, !\h, ®p,®t,MUx,Ë€,êT‚,'\ƒ,7\ˆ,%XU,.E˜,/E ,0E¨,1E°,2B¸,4®À,6=\Ä-@T.(êúú/>/>/>/E/E  +a> 0S— 0V~ 0X> 0\—0T®0]_§§úint0^S0jµØ®ã§1œó1Ðó2N55®555;@‰ÚTD ¿Ž[0Ba§²ãsBésËÑïsésêðïsM ïs®M-8ïs®ésQ\ïs0ésu€ïs0t™¤ãsõs_½Èãsõs_áìãsõs_ãsõs_)4ãsõs_MXãsõs_q|ãsõs[”šãs«±ïsÂÍïsõs æìïs Mãs0M)4ãs0_MXãsûs_q|ãsûs_• ãsûs_¹Äãsûs_Ýèãsûs_ ãsûs'ïs[3ïst[MN#‰ 'ËŽ'\'0'Q'‚¨³tB'tÌÒt'tëñt'N t®'N.9t®'tR]t0'tvt0'uš¥tûs'_¾Étûs'_âítûs'_  tûs'_* 5 tûs'_N Y tûs'_r } tûs'\• › t*¬ ² t+à Πtûs,ß ê tõs.‚ t1N" - t03NF Q t0=a l t\>x tPs\; ¤ = Å œ f ¶ nU· B  ü  $t¡   $t®¤ _5 @ $tB± ×dX ^ *t T§Å !“0t’ öPê Å  ºž ©í «H"len¬B®Õ å zt»sB TH »ù ©` «b"len¬B®0 @ €tŸjB#M X €t® Tb4Bz `zcMšˆ hkÀ Æ žtl× â žtˆ mó þ žt¤tpˆ   ªtr¢ 6 < ªts¢ U ` ªtBu°ty  žtwz ˜ £ žt®y°t¼  žt{z Û æ žt®z ÿ ªt0z #.ªt0ƒz GRžt0…z kvžt0ˆ>šªt¤t‹_³¾ªt¤t_×âªt¤t_ûªt¤t’_*ªt¤t”_CNªt¤t–_grªt¤t TMž‡`‡cNš•h‚kÍÓ†tläï†t•m †tŒtp•$*’tr¯CI’ts¯bm’tBu˜t†Œ†tw‡¥°†t®y˜tÉφt{‡èó†t®‡ ’t0‡0;’t0ƒ‡T_†t0…‡xƒ†t0ˆ>œ§’tŒt‹_ÀË’tŒt_äï’tŒt_’tŒt’_,7’tŒt”_P[’tŒt–_t’tŒt TN5tŸªt®£ºÅt®$Íí éÝB;t$×HH$Ù""HB’ $ÛûaFÝ;t$Þí jÝB;t$ðB„B%ñ©BBKtKt$ôBÃB$õBÝBBMötBCN%PsBQ0>IPsûs$£Nc:g$»@}QtÁŽ”tÄ¥°t5ÇÁÑtQBÉâòtBQËtBaBÍ$4tBBaÏEUt§BÑfvtB§Ó‡—tóBÕ¨¸tBóÙÉÔtÝÛåõtÝ;tÝtÝBß'<tÝ;tBæMXtØsèiytØs;tꊚtØsBì«ÀtØs;tBóÑÜtHõíýtH;t÷tHBù/DtH;tBüU`tgsþq|trs˜t:g ©¹t:gBÊÚt5B%ëötªs/t¤s;ªs+1PsSÁÇJPPs_ÁÇioPs`ªsˆŽPsh@§­PspNÆÌPsqMåët&endsN Ps&endtM#)twzBHPsym agt|z€†Ps~m Ÿ¥tžB¾ÄPs¡` ÝãPs¢` üPs¤_!Ps§` :@Ps'¨U`tB'ªu…tBQÊ@ž®PsBB&LenÓBÇÍPsÕ_æìPs×_ PsÙ5t$/tB'ÛDJt'Ý_etá_~„Psã_£Pså_¼ÂPs&atéQÚåPsBëQþ PsB&atîBa!,tBðBaEPtB'óeutBQ÷QŽ”PsþBa­³tQÌ×Ps® QðûPs; QPsBQ8CPs>Ba\gt®Ba€‹t;Ba¤¯tBBaÈÓt>JEgìòPsKEg PsNEg*0Psa@gIOPse™shnPsjl‡’Ps;tl¯l«±Ps(@ÑÝB(Ž@ìÝ(@§ms &Ps(›@AØs(@aØsB(Î@ÝB(Ð@¡ÝB×msºÀPsömsÙßPs(ú@ÿÝB(ý@ Ýÿms3 9 Ps#msR ] Ps;t)”sv | Ps,H• › Ps2t´ ¿ Ps;t6msØ Þ PsMH÷ ý PsU5t!!!t5a5t:!E!t:gd5t^!i!tQq5t‚!!tBas5t¦!±!t§u5tÊ!Õ!týTw5tî!ù!tó|5t""t݈5t6"A"tH§5tZ"e"tØs«5t~"‰"trs®5t¢"­"tgs¹5tÆ"Ñ"t5Ä5tê"õ"tÝÆ5t##tHÈ5t2#=#t:gË5tV#a#tQÌ5tz#…#tBaÍ5tž#©#t§Î5tÂ#Í#týTÏ5tæ#ñ#tóÒ5t $$trsÔ5t.$9$tgsØ5tR$]$t5á5tv$$tÝã5tš$¥$tHå5t¾$É$t:gç5tâ$í$tgsé5t%%trsë5t*%:%tÝBí5tS%c%tHBï5t|%Œ%t:gBñ5t¥%µ%tgsBó5tÎ%Þ%trsBö5t÷%&tQBø5t &0&tBaBú5tI&Y&t§Bü5tr&‚&týTBþ5t›&«&tóB5tÄ&Ï&t55tè&ó&t®5t ''t> 5t0';'t;#5tT'_'tM'5tx'ƒ't4U,5tœ'§'t;U25tÀ'Ë't›U55tä'ï't¢U&Cmp:®((PsÝ&Cmp<®,(7(PsH&Cmp>®P([(Ps5&Cmp@®t((Ps:g&CmpB®˜(£(Psgs&CmpD®¼(Ç(PsrsG®à(ë(Ps5K_))Ps5_T_-)=)PsÝ_V_V)f)PsH_Y_))Ps:g_[_¨)¸)Psgs_]_Ñ)á)Psrs_`_ú) *PsQ_b_#*3*PsBa_d_L*\*Ps§_f_u*…*PsýT_h_ž*®*Psó_j_Ç*×*Ps®_&Midp@ð*+PsBBs@+)+PsBBy_B+R+Ps5t}_k+{+Ps5t€@”+Ÿ+PsB‚@¸+Ã+PsB†@Ü+ì+PsQtŠ@,,PsQt@.,9,PsQ@R,],PsQ“@v,,PsQ”@š,¥,PsQ˜5t¾,Ä,tš@Ý,ã,Psœ5tü,-tž@-!-Ps¡5t:-@-t¤@Y-_-Ps¨5tx-ƒ-t_&Padª5tœ-±-tBQ_®®Ê-Ú-PsQ_¯®ó-.PsBa_±®.,.Ps§_³®E.U.PsýT_µ®n.~.Psó_¸®—.¢.Ps5½®».Æ.PsÝ®ß.ê.PsHÈ®//Ps:gÊ®'/2/PsgsÌ®K/V/PsrsÑBo/„/t55_Ö_/¨/Ps5Þ_Á/Ñ/Ps\t®à_ê/ú/Psbt®ã_0#0Psht®å_<0L0Psnt®è_e0p0Psttì_‰0™0Ps\t®î_²0Â0Psbt®ð_Û0æ0Pstt(õ@1¢U®(÷@&1¢U®þ®?1J1tŽs ®c1s1t5ÙI( @Ž1Žs(! @®15ÙI& _Ç1Ò1tB) _ë1ñ1t8 @ 22PsBBC ®32>2tŽsS ®W2g2Pst‰ W B€2†2PsY ®Ÿ2ª2PsQ'[ ¿2Å2t'] Ú2à2t_ @ù23Ps¤ b B3(3Pstc BA3L3PsQe 5te3p3tBf 5t‰3”3tBh 5t­3½3tBBl ®Ö3á3PsQm ®ú34PsBan ®4)4Ps§o ®B4M4PsýTp ®f4q4Psóq ®Š4•4Ps5r ®®4¹4PsQs _Ò4Ý4Ps5v _ö4ü4Ps{  5"5t5BB~ 35C5tNNƒ T5d5tÝ݈ u5…5tHHŽ –5¦5t:g:g™ 5t¿5Ô5t5BB£ 5tí5ø5t5¬ 5t66tÝ´ 5t56@6tH¼ 5tY6i6tÝBÄ 5t‚6’6tHBÍ 5t«6¶6t:gÏ 5tÏ6Ú6tgsÑ 5tó6þ6trsÓ 5t7'7t:gBÕ 5t@7P7tgsB× 5ti7y7trsBÛ 5t’7¢7tBQï 5t»7Ë7tBBañ 5tä7ô7tB§ó 5t 88tBýTõ 5t68F8tBóù 5t_8o8tNN 5tˆ8˜8tÝÝ 5t±8Á8tHH 5tÚ8ê8t:g:g 5t99t5 5t'979t5B) 5tP9e9t5BB7 5t~9‰9tÝ@ 5t¢9­9tHI 5tÆ9Ö9tÝBS 5tï9ÿ9tHB] 5t:#:t:g_ 5t<:G:tgsa 5t`:k:trsc 5t„:”:t:gBe 5t­:½:tgsBg 5tÖ:æ:trsBk 5tÿ:;tBQy 5t(;8;tBBa{ 5tQ;a;tB§} 5tz;Š;tBýT 5t£;³;tBóƒ 5tÌ;Ü;tNNŒ 5tõ;<tÝÝŽ 5t<.<tHH 5tG<W<t:g:g• ®p<{<Ps5– ®”<Ÿ<PsÝ— ®¸<Ã<PsH˜ ®Ü<ç<Ps:gš ®= =Psgsœ ®$=/=PsrsŸ ®H=]=PsBB5¡ ®v=•=PsBB5BB¤ ®®=È=PsBBÝB¦ ®á=û=PsBBHBª 5t>$>tB5­ 5t=>W>tB5BB¹ 5tp>€>tBÝ 5t™>©>tBHÉ 5tÂ>×>tBÝBÓ 5tð>?tBHBÞ 5t?3?tBBQë ML?\?tMQ'û q?†?tMNN' ›?°?tMÝÝ' Å?Ú?tMHH' ï?@tM:g:g' @.@tM` Q 5tG@W@t` ` $ Mp@€@tMM+ M™@¤@tM'3 ¹@¿@t> 5tØ@í@tBBÝI 5tAAtBBHU 5t4AIAtBB5a 5tbA|AtBBBQr 5t•A´AtBB5BBƒ 5tÍAçAtBBÝB’ 5tBBtBBHB¡ 5t3BMBtBB5B­ 5tfB{BtMMݶ 5t”B©BtMMH¿ 5tÂBÜBtMMÝ` É 5tõBCtMMH` Ó 5t(C=CtMM5Ü 5tVCpCtMM` Që 5t‰C£CtMMNNõ 5t¼CÖCtMMÝÝø 5tïC DtMMHH'ý D)Dt5t BBDRDPs5B BkD€DPsÝBB B™D®DPsHBB BÇDÜDPsgsBB BõD EPsrsBB B#E8EPs:gBB! BQEaEPsQB- BzEŠEPsBaB/ B£E³EPs§B1 BÌEÜEPsýTB3 BõEFPsóB9 BF.FPs5B= BGF\FPsÝBBB BuFŠFPsHBBG B£F¸FPsgsBBI BÑFæFPsrsBBK BÿFGPs:gBBN B-G=GPsQBY BVGfGPsBaB[ BGGPs§B] B¨G¸GPsýTB_ BÑGáGPsóBg BúG HPs5Bi B#H3HPsÝBk BLH\HPsHBm BuHŠHPsÝBBo B£H¸HPsHBBq BÑHáHPsQBt BúH IPs5Bv B#I3IPsÝBx BLI\IPsHBz BuIŠIPsÝBB| B£I¸IPsHBB~ BÑIáIPsQB BúI JPs5Bƒ B#J3JPsÝB… BLJ\JPsHB‡ BuJŠJPsÝBB‰ B£J¸JPsHBB‹ BÑJáJPsQBŽ BúJ KPs5B B#K3KPsÝB’ BLK\KPsHB” BuKŠKPsÝBB– B£K¸KPsHBB˜ BÑKáKPsQBß BúK LPsBaBá B#L3LPs§Bã BLL\LPsýTBå BuL…LPsóBç BžL®LPsBaBé BÇL×LPs§Bë BðLMPsýTBí BM)MPsóBï BBMRMPsBaBñ BkM{MPs§Bó B”M¤MPsýTBõ B½MÍMPsóB÷ BæMöMPsBaBù BNNPs§Bû B8NHNPsýTBý BaNqNPsóB BŠNšNPs:gB B³NÃNPsgsB BÜNìNPsrsB BOOPs:gBB B3OHOPsgsBB BaOvOPsrsBB BOŸOPs:gB B¸OÈOPsgsB BáOñOPsrsB B PPPs:gBB B8PMPPsgsBB BfP{PPsrsBB B”P¤PPs:gB B½PÍPPsgsB BæPöPPsrsB! BQ$QPs:gBB# B=QRQPsgsBB% BkQ€QPsrsBB( B™Q©QPs:gB* BÂQÒQPsgsB, BëQûQPsrsB. BR)RPs:gBB0 BBRWRPsgsBB2 BpR…RPsrsBB6 5tžR©Rt5> 5tÂRÍRtÝE 5tæRñRtHL 5t SSt:gS 5t.S9StgsU 5tRS]StrsX 5tvSStQd 5tšS¥StBae 5t¾SÉSt®f 5tâSíSt§g 5tTTtýTh 5t*T5Ttóƒ ®MTYTtt)$„ @tTt)Æ ÝŒT—TPs;tÉ +_¯TºTPs;t‡z *ÎTt®+3sêT 3‚ýT 3ƒñT 3ä® 3å> 3‚4U4(®4ƒ;4„;4‹;§5KcU§Uú 3ÚM,3NÏU  ,3Z-V À€À€À€ ðð,3ªV€€€€€€€€€€€€ €€€À€€€€€€€€€€€ù,36­V,3B”ZÀûB°p}~‡'ˆ'‰'Š'‹'Œ''Ž'''‘'’'“'”'•'–'—'˜'™'š'›'œ''ž'¦'§'¨'©'ª'«'¬'­'®'¯'°'±'²'³'´'µ'¶'·'¸'¹'º'»'¼'½'¾'¿'À'Á'Â'Ã'ì'í'î'ï'ð'ñ'ò'ó'ô'õ'ö'÷'ø'ù'ú'û'ü'ý'þ'ÿ'€((‚(ƒ(„(…(†(‡(ˆ(‰(Š(‹(Œ((Ž(((‘(’(“(”(•(–(—(˜(™(š(›(œ((ž(Ÿ( (¡(¢(£(¤(¥(¦(Ð(Ñ(Ò(Ó(Ô(Õ(Ö(î(î(ï(ð(ñ(ò(ó(ó(‚)‚)ƒ)„)„)Œ.¾.ï.6®,3 ÑZ,3 ñZ,3· w[      3W ƒ[‰[-®[[[£[. 35 °[¶[// 3M Ì[/ 3Y Ý[À[0,š, \,¡\,¢!\,¦®ê[T§7\úã[§M\ú-Oß 7b}\7c®1rem7d®7eX\ 7j­\7k;1rem7l;7mˆ\ 7vÝ\7w4U1rem7x4U7y¸\ 7æƒ[84M8º ]]BU2tm85…¥]5‡®5ˆ®5‰®5Š® 5‹®5Œ®5®5Ž®5® 5’;(5“Ý03_@^4 Õ]/E0B3Ë5_5&^)^%_EB¼]6)4^%_®91s^79395®8®8® A_9 C_$ E[ðª^[ð$ G[ðÄ^[ð$ IðÞ^$ð#ë^ñ^ÿƒ Tað APò: - /# Tí"°]ñ6_;Bûa<¤Î_=°]5¦d_y_ËdâdB¼]>Get«âd_–_œ#?Set¬©_¹_ËdâdB@Â_Ëd®AîËdBE§CG÷_ý_ÑdDP×d`ÜdBÛ_D_×d@`âdBCkP`[`ÑdèdEqîds`~`ÑdèdC}Ž`™`Ñd®E…âd±`·`ôdF–Ë`Ñ`ÑdE›âdé`ï`ÑdEœÜda aôdEÜd%a+aôdEžÛ_CaNaôdBE BfalaôdG´ËdF¹a–aÑdFÀªa°aÑdFËÄaÏaÑdèdDåâdîaÜdBB_ T§òb;BËd<¤žb=°]5¦4bIb‚j™jB¼]>Get«™j`bfb¢#?Set¬yb‰b‚j™jB@’b‚j®Aî‚jBEóCGÇbÍbˆjDPŽjìb“jB«bD_Žjc™jBCk c+cˆjŸjEq¥jCcNcˆjŸjC}^cicˆj®E…™jc‡c«jF–›c¡cˆjE›™j¹c¿cˆjEœ“j×cÝc«jE“jõcûc«jEž«bdd«jBE B6d_f"fJfB'Y7fBfJfB T§úd9e\fúdúdh(gHúdkúdl6_n¦f±f(g.g{fpÇfÒf(g4gˆfsèfóf(gPftgg(gBIvg(g:ggf±fÒf@gEg;™‚jòPsùBû_5„g™gÒsPsB_C£©g´gÒsnUC¤ÄgÏgÒsÝGC¥ßgêgÒs:gC§úghÒs®E²Hh#h[sE³H;hAh[sEµÝYh_h[sE¶Øswh}h[sE¸Ý•h›h[sE¹Øs³h¹h[sE»[Ñh×h[sE¾msïhõh[sEÃxs ii[sEÈ@+i1i[sEÌ™sIiOi[sEÏQgiri[sBEÐQŠi•i[s®EÑQ­i¸i[s;EÓQÐiÛi[s>EÛEgóiþi[s®EÝEgj!j[s;EßEg9jDj[sBEåEg\jgj[s0JîQ{j[sbbbìb«bŽjbŽj;÷lHbBýóCÿàjðjllBÄj kklB!"k-kl l$lFkQkll-ljkukl l3†k‘klŸj8lªkµklŸj>_ÎkÙklB'YîkùklB Tó±jðjl±j±j  *l¯lHúd’Û_”\lgl¶tèdšxlƒl¶t¼t>lÂt¡l§l¶t T§ ¡»l@mH±j’«b”ílølÈtŸjš mmÈtÎtÏlÔt2m8mÈt TóK4:Øo      !"#$%&'()*+,-./0123456789:;<=>?ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚ1Ø.00('Lstd/ÏÉ;™ûoM;›;ÇpM;ÉN;Õ;ã3pM;å;êKpM;ì;epO;;spO;u;ˆ¤pP;Ššp _Tp¢UNébt>ë§>ì®T>òÖr}NƒN¦rUeq>ö_ørƒNƒNUlt>ú_sƒNƒN$>®9s‰N‰Nbt$>btSs‰N$> ‰Nws‰NbtƒN$>N›sN‰Nbt$>N¿sN‰Nbt$>NãsNbt¦r$>¦rýs•N±r$> ±rtƒN$>$_;t•N•NVeof>(±rW>,±r•N?¼M>4;v >6ó >7G%>=­t›N¡NztXeq>A_Ðt¡N¡NXlt>E_ît¡N¡N$>I®u§N§Nbt$>Mbt,u§N$>Q§NPu§Nbt¡N$>U­Ntu­N§Nbt$>Y­N˜u­N§Nbt$>]­N¼u­Nbtzt$>aztÖu³N†t$>e†tõu¡N$>i_v³N³NVeof>m†tW>q†t³NN@c?½;;"\wHÊB"_btB"anUB"bÝB"c¹NB"d¿NC"q­v³v×NC"sÃvÎv×NÝNC"yÞvév×N®Y"h"iNv8§Nv;"\wHœËB"_btB"cãNB"déNC"qTwZwOC"sjwuwOOZ"ywO® wRA5 ORA6:PRA7TP;BpŽBðw=NvBnUBßwuPnUÝNBByav!B xðwB!³wBBxNvBB{…vBB|‘vBBtÍBByÍBB‚ŽBBƒŽB” xB–ðwB—ðwB˜ePB›Tz=ox[C2 x[C7ã[CBŸP\BµP]B¿_ùxÿxªP]BÃ_yyªP^BÇ/y5y‡P^BËHyNy‡P^BÏayly‡Pðw]BÞnUƒy‰y‡P]BânU y°y‡PÝNÝN$C!‡PÔyðwðwÝN^Bíçyòy‡PÝN_C¼zz‡PÝNBnU)z/z‡P`ConUCz‡PÝNðwB$nUlzrz{PB(nUŠz•zPnUB,‡P­z³z{PB2?xËzÑz{PB6?xézïz{P_B:{ {PBAðw!{1{{PðwÝ_BKE{Z{{PðwðwÝBSðwr{‚{{PðwðwB[_š{¥{{PÝ%BdÅ{nUÝðw%Bmå{nUÝðw%Bv|nUðw§%BŠ%|nU?x?x%BŽE|nUKxKx%B“e|nUnUnU%B—…|nUÝÝ$Bœ®¤|ðwðw_CÔ¸|Í|Pðwðwðw_CÆá|ç|P9B¯PBº}}PaC±})}PÝNCC©9}D}P“PCC·T}i}P“PðwðwCCÁy}“}P“PðwðwÝNCCÍ£}¸}PÝðwÝNCCÔÈ}Ø}PÝÝNCCÛè}ý}Pðw§ÝNB"~~P®B*™P2~=~P“PB2™PV~a~PÝB=™Pz~…~P§Bf?xž~¤~PBqKx½~Ã~{P&endBy?xÜ~â~P&endB„Kxû~{PBcx PB–Wx9?{PBŸcxX^PB¨Wxw}{PBÔðw–œ{PBÚðwµ»{PBßðwÔÚ{P'CïÿPðw§'Bú€€PðwBðw8€>€{P'CõS€^€Pðw'B-s€y€PB5_’€˜€{PBD3x±€¼€{PðwBU'xÕ€à€Pðw&atBk3xø€{Pðw&atB'x&PðwBµ™P?JP“PB¾™PcnPÝBÇ™P‡’P§CD™P«¶P“PCU™PÏäP“PðwðwC)™Pý ‚PÝðwBÿ™P&‚1‚PÝC™PJ‚Z‚Pðw§'B-o‚z‚P§ECò™P’‚‚P“PB^™P¶‚Ë‚P“PðwðwC™Pä‚ô‚PÝðwBz™P ƒƒPÝBŠ™P1ƒAƒPðw§'B³VƒkƒP?xðw§Bã™P„ƒ”ƒPðw“PBù™P­ƒÇƒPðw“PðwðwCg™PàƒõƒPðwÝðwB"™P„„PðwÝB9™P7„L„Pðwðw§BK?xe„u„P?x§Bd™PŽ„ž„PðwðwBt?x·„„P?xC†?xÛ„ë„P?x?xB§™P……Pðwðw“PB½™P2…Q…Pðwðw“PðwðwC™Pj…„…PðwðwÝðwBê™P…²…PðwðwÝB™PË…å…Pðwðwðw§B™Pþ…†P?x?x“PB'™P,†F†P?x?xÝðwB<™P_†t†P?x?xÝBQ™P†§†P?x?xðw§Bv™PÀ†Ú†P?x?xnUnUB€™Pó† ‡P?x?xÝÝB‹™P&‡@‡P?x?x?x?xB•™PY‡s‡P?x?xKxKxC›™P‹‡¥‡Pðwðwðw§C¨™P½‡×‡PðwðwÝðw$BÜnUû‡ðw§ÝNbC˜nUˆðw§ÝNCÒðw7ˆLˆ{PnUðwðw'CaˆlˆP™PBÝ…ˆ‹ˆ{PB%ݤˆªˆ{PB,xÈɈ{PCàðwâˆ÷ˆ{PÝðwðwBIðw‰ ‰{P“PðwBXðw9‰I‰{PÝðwC÷ðwb‰r‰{P§ðwBvðw‹‰›‰{P“PðwC ðw´‰É‰{PÝðwðwB”ðwâ‰ò‰{PÝðwCðw ŠŠ{P§ðwB³ðw4ŠDŠ{P“PðwC/ðw]ŠrŠ{PÝðwðwBÑðw‹Š›Š{PÝðwBäðw´ŠÄŠ{P§ðwBóðwÝŠíŠ{P“PðwC>ðw‹‹{PÝðwðwBðw4‹D‹{PÝðwB$ðw]‹m‹{P§ðwB2ðw†‹–‹{P“PðwCSðw¯‹Ä‹{PÝðwðwBQðwÝ‹í‹{PÝðwC_ðwŒŒ{P§ðwBqðw/Œ?Œ{P“PðwCjðwXŒmŒ{PÝðwðwBðw†Œ–Œ{PÝðwCðw¯Œ¿Œ{P§ðwB±§wØŒèŒ{PðwðwBÄ® {P“PC“®%:{Pðwðw“PC¢®Sr{Pðwðw“PðwðwC´®‹–{PÝCî¯Ä{PðwðwÝCÓ®Ý÷{PðwðwÝðw x8§cšrcNvKK§w;Bp˜¤BpŽ= wBÝGB_ްPÝGOBBy w!B‰ŽpŽB!3ŽBBx wBB{,wBB|8wBB~ÍBBÏBB‚˜¤BBƒ¤B” B–pŽB—pŽB˜ePB›Ô=ïŽ[C2‰Ž[C7H[CBŸP\BµÈP]B¿_yÚP]BÃ_–œÚP^BǯµÂP^BËÈÎÂP^BÏáìÂPpŽ]BÞÝG ÂP]BâÝG 0ÂPOO$C!ÂPTpŽpŽO^BígrÂPO_C¼†‘ÂPOBÝG©¯ÂP`CoÝGÃÂPOpŽB$ÝGìò¶PB(ÝG ‘‘¼PÝGB,ÂP-‘3‘¶PB2¿ŽK‘Q‘¶PB6¿Ži‘o‘¶P_B:ƒ‘‰‘¼PBApŽ¡‘±‘¶PpŽÝ_BKőڑ¶PpŽpŽÝBSpŽò‘’¶PpŽpŽB[_’%’¶PH%BdE’ÝGHpŽ%Bme’ÝGHpŽ%Bv…’ÝGpŽó%BŠ¥’ÝG¿Ž¿Ž%BŽÅ’ÝGËŽËŽ%B“å’ÝGÝGÝG%B—“ÝGHH$Bœ®$“pŽpŽ_CÔ8“M“¼PpŽpŽpŽ_CÆa“g“¼P9B¯ÈPBºˆ“Ž“¼PaC±ž“©“¼POCC©¹“Ä“¼PÎPCC·Ô“铼PÎPpŽpŽCCÁù“”¼PÎPpŽpŽOCCÍ#”8”¼PHpŽOCCÔH”X”¼PHOCCÛh”}”¼PpŽóOB"Ž”™”¼P®B*ÔP²”½”¼PÎPB2ÔP֔ᔼPHB=ÔPú”•¼PóBf¿Ž•$•¼PBqËŽ=•C•¶P&endBy¿Ž\•b•¼P&endB„ËŽ{••¶PB㎚• •¼PB–׎¹•¿•¶PBŸãŽؕޕ¼PB¨׎÷•ý•¶PBÔpŽ––¶PBÚpŽ5–;–¶PBßpŽT–Z–¶P'Co––¼PpŽó'Bú”–Ÿ–¼PpŽBpޏ–¾–¶P'CõÓ–Þ–¼PpŽ'B-ó–ù–¼PB5_——¶PBD³Ž1—<—¶PpŽBU§ŽU—`—¼PpŽ&atBk³Žx—ƒ—¶PpŽ&atB§Ž›—¦—¼PpŽBµÔP¿—Ê—¼PÎPB¾ÔPã—î—¼PHBÇÔP˜˜¼PóCDÔP+˜6˜¼PÎPCUÔPO˜d˜¼PÎPpŽpŽC)ÔP}˜˜¼PHpŽBÿÔP¦˜±˜¼PHCÔPʘژ¼PpŽó'B-ï˜ú˜¼PóECòÔP™™¼PÎPB^ÔP6™K™¼PÎPpŽpŽCÔPd™t™¼PHpŽBzÔP™˜™¼PHBŠÔP±™Á™¼PpŽó'B³Ö™ë™¼P¿ŽpŽóBãÔPšš¼PpŽÎPBùÔP-šGš¼PpŽÎPpŽpŽCgÔP`šuš¼PpŽHpŽB"ÔPŽšžš¼PpŽHB9ÔP·šÌš¼PpŽpŽóBK¿Žåšõš¼P¿ŽóBdÔP››¼PpŽpŽBt¿Ž7›B›¼P¿ŽC†¿Ž[›k›¼P¿Ž¿ŽB§ÔP„›™›¼PpŽpŽÎPB½ÔP²›Ñ›¼PpŽpŽÎPpŽpŽCÔPꛜ¼PpŽpŽHpŽBêÔPœ2œ¼PpŽpŽHBÔPKœeœ¼PpŽpŽpŽóBÔP~œ“œ¼P¿Ž¿ŽÎPB'ÔP¬œÆœ¼P¿Ž¿ŽHpŽB<ÔPßœôœ¼P¿Ž¿ŽHBQÔP '¼P¿Ž¿ŽpŽóBvÔP@Z¼P¿Ž¿ŽÝGÝGB€ÔPs¼P¿Ž¿ŽHHB‹ÔP¦À¼P¿Ž¿Ž¿Ž¿ŽB•ÔPÙó¼P¿Ž¿ŽËŽËŽC›ÔP ž%ž¼PpŽpŽpŽóC¨ÔP=žWž¼PpŽpŽHpŽ$BÜÝG{žpŽóObC˜ÝGžžpŽóOCÒpŽ·žÌž¶PÝGpŽpŽ'Cážìž¼PÔPBHŸ Ÿ¶PB%H$Ÿ*Ÿ¶PB,›ŽCŸIŸ¶PCàpŽbŸwŸ¶PHpŽpŽBIpŽŸ Ÿ¶PÎPpŽBXp޹ŸÉŸ¶PHpŽC÷pŽâŸòŸ¶PópŽBvpŽ   ¶PÎPpŽC pŽ4 I ¶PHpŽpŽB”pŽb r ¶PHpŽCpŽ‹ › ¶PópŽB³pŽ´ Ä ¶PÎPpŽC/pŽÝ ò ¶PHpŽpŽBÑpŽ ¡¡¶PHpŽBäpŽ4¡D¡¶PópŽBópŽ]¡m¡¶PÎPpŽC>pކ¡›¡¶PHpŽpŽBpŽ´¡Ä¡¶PHpŽB$pŽÝ¡í¡¶PópŽB2pŽ¢¢¶PÎPpŽCSpŽ/¢D¢¶PHpŽpŽBQpŽ]¢m¢¶PHpŽC_pކ¢–¢¶PópŽBqpޝ¢¿¢¶PÎPpŽCjpŽØ¢í¢¶PHpŽpŽBpŽ££¶PHpŽCpŽ/£?£¶PópŽB±'ŽX£h£¶PpŽpŽBÄ®£Œ£¶PÎPC“®¥£º£¶PpŽpŽÎPC¢®Ó£ò£¶PpŽpŽÎPpŽpŽC´® ¤¤¶PHCî/¤D¤¶PpŽpŽHCÓ®]¤w¤¶PpŽpŽHpŽ 8ócmtc wKK'ŽDD'Ž<¯é¤<³Cv<´ÝG<µãN8ÝGLtr1E'¼ÇEG¥[EIpP _Tp_d__v_EGJ¥[EIpP _Tp_d__v_3F$S³Fi«¥ Fkbt Flbt Fmbt`Fpz¥š¥õ‰b¥n¥U¥eFyF}–¦F˜›UF™›UFšbtFý¥¦û‰›UFƒ›U ¦&¦ŠFˆbt>¦I¦ŠbtFŒbta¦l¦Šbt`F“=6€¦Šbtbtbt¹¥Fø¦F ›UÀ¦Æ¦ÕŒ_F'Ú¦å¦ÛŒ›U8¹¥8Ù´›¦F©fFÄÁCfFÅD‹fFÆŠfFÇU¥ FŠFœbtF“B§s§y§ÿŒF—Ч©§ Œ>‹FŸN§§ͧÿŒ5F£btæ§û§ÿŒ5N§btF¨bt¨$¨ÿŒbtF­_=¨R¨ÿŒ5N§#'F²g¨w¨ÿŒ#N§'F¶Œ¨œ¨ÿŒ#'F»±¨¼¨)8@8 C8ÁC8D‹ _H1Š _H2U¥8°¥g_ý¦°¥©8FPM©FR CFS#08 Cg_Fü¸© Fþ8CF/~©‰©558@8 C _ExÁCg_8Ù´//Fÿت=² F" F VFü©ª¥•Fª"ª¥•#•hF2ª=ª¥••Fà©Uª[ª«•FÔ©sªyª«•F"±•‘ª—ª¥•F)©¯ªºª¥•®8 Cg_g_F2 ¬=² F6; F7ùŒF;««•F>)«9«•#•hFCI«T«••FFd«o«•“•FL÷ª‡««™•FP몥«««™•FTŸ•ëɫ•F[تá«ì«•®8 Cg_g_Fg¬F ›U/¬5¬#’_F'I¬T¬)’›U8¹¥8W¾ ¬Fu®fFÄÍFfFÅD‹fFÆŠfFÇU¥ FŠFœbtF“±¬â¬è¬M’F—ù¬­S’Y’Œ>‹FŸ½¬1­<­M’5F£btU­j­M’5½¬btF¨btƒ­“­M’_’btF­_¬­Á­M’5½¬e’'F²Ö­æ­M’e’½¬'F¶û­ ®M’e’_’'F» ®+®S’k’8@8F8ÍF8D‹ _H1Š _H2U¥8°¥g_l¬®(FP·®FRFFSe’ 8Fg_Fü"¯ FþDFFq’è®ó®w’58@8F _ExÍFg_8W¾//FÿB°=t± Fº F îFf¯l¯o•F|¯Œ¯o•e’K•hFœ¯§¯o•K•FJ¯¿¯Å¯u•F>¯Ý¯ã¯u•F"{•û¯°o•F),¯°$°o•®8Fg_g_F2t±=t± F6}’ F7G’F;}°ƒ°W•F>“°£°W•e’K•hFC³°¾°W•K•FFΰٰW•]•FLa°ñ°÷°c•FPU°±±c•FTi•-±3±W•F[B°K±V±W•®8Fg_g_FÎý±Fße’FàK•5FЧ±·±Q•e’K•^FÕʱбQ•^Fçã±é±Q•8Fg_,¯B°FβFß#Fà•5FÐ:²J²‡•#•^FÕ]²c²‡•^Fçv²|²‡•8 Cg_©ت(FPÒ²FR!IFSj™ 8!Ig_(FP ³FRŒIFSv™ 8ŒIg_ FPB³FR—‹FS,8—‹g_iFŸP;0´´HнB»½B¼©½B½µ½B¾Á½aÁ¦³À³Ýf³ãéïr³~³гjݳè³Ý®8@ _Tp@8Š8D‹c.D;0´Ù´HòÆB»ÇB¼ ÇB½ÇB¾%ÇaÁi´ƒ´“)´“%“+“5´A´M´j ´«´“®8@ _TpM8Š8D‹c:G;0#lo½H›¦Hý¦HM©#¥¦D#¬ú´#£©#­‰B#ˆAD#®(µ#¯(µ#°¹¥ B#.DB#‚ CB#ƒ@B#„D‹B#¸©B#”½©B#˜Â©B#œØª#§ÈD#ªêD #Z&#©òµýµ•›dµ_#À¶!¶•_#Í5¶E¶•‰(µ#å‰]¶h¶•(µ_#ø|¶Œ¶•‰(µ#¶Æ¶•(µ>‹Œ ¡Xµ#Eܶç¶•§#o­· ·•§#|·'·•®'#‰<·G·•­E#Ú µ_·e·•E#㬵}·ƒ·³kend#ì µ›·¡·•kend#𬵹·¿·³E#ô(µ×·Ý·³E#ø_õ·û·³E#üXµ¸¸³#õ2¸8¸³#(µQ¸W¸³# |µp¸v¸³#(µ¸•¸³#(µ®¸´¸³#(µ͸ظ³(µ#(µñ¸ü¸³¹pµ##ˆµ¹%¹•(µ&end#'ˆµ>¹I¹•(µ#+”µb¹m¹³(µ&end#/”µ†¹‘¹³(µ#3›Uª¹°¹³#=¿ɹϹ³'#£ä¹ï¹•¿#´ µºº•¹#Ŭµ,º7º³¹#Ö(µPº[º³¹#ï Ftºº•¹#F˜º£º³¹#8»ºÐº³¹N§#K µèºýº•›(µN§#wF»%»•›t½#Œ µ=»M»•›½_#´a»q»•‰#vεŠ»•»•›#{ µ®»¾»• µ›#¬µ×»ç»•¬µ›#æ µ¼ ¼• µ#÷¬µ$¼/¼•¬µ#(µH¼S¼•¹#? µl¼|¼• µ µ#O¬µ•¼¥¼•¬µ¬µ'#]º¼À¼•'#jռ༕(µ_#xô¼ÿ¼•(µ8@8 C8.D8ÁC8D‹ _H1Š _H2U¥8°¥8¹¥g_g_g_Ù´EO¥ERô¤;0+W¾HÙ´B<(µB=B§B>|µB?XµaBݽ÷½Å½ËÑש½µ½Á½j¾¾Å®8@ _Tp@8Š8D‹8.Dg_;0#líÆH ¬Hl¬H·®#¥²G#¬x¾#£®#­Ë’B#ˆMG#®¦¾#¯¦¾#°¹¥ B#:GB#‚FB#ƒ@B#„D‹B#"¯B#”'¯B#˜,¯B#œB°#§ÔG#ªöG #Z†#©Ñ’p¿{¿×’Ý’â¾_#À”¿Ÿ¿×’Ñ’_#ͳ¿Ã¿×’Ë’¦¾#åË’Û¿æ¿×’¦¾_#øú¿ À×’Ë’¦¾#ÀDÀ×’¦¾>‹ŒY’ã’Ö¾#EZÀeÀ×’é’#oï’~À‰À×’é’#|šÀ¥À×’®'#‰ºÀÅÀ×’ï’E#Ú¿ÝÀãÀ×’E#ã*¿ûÀÁõ’kend#ì¿ÁÁ×’kend#ð*¿7Á=Áõ’E#ô¦¾UÁ[Áõ’E#ø_sÁyÁõ’E#üÖ¾‘Á—Áõ’#A¿°Á¶Áõ’#¦¾ÏÁÕÁõ’# ú¾îÁôÁõ’#¦¾ ÂÂõ’#¦¾,Â2Âõ’#¦¾KÂVÂõ’¦¾#¦¾oÂzÂõ’û’î¾##¿˜Â£Â×’¦¾&end#'¿¼ÂÇÂ×’¦¾#+¿àÂëÂõ’¦¾&end#/¿ÃÃõ’¦¾#3›U(Ã.Ãõ’#=¿GÃMÃõ’'#£bÃmÃ×’¿#´¿†Ã‘Ã×’û’#Å*¿ªÃµÃõ’û’#Ö¦¾ÎÃÙÃõ’û’#ïIòÃýÃ×’û’#IÄ!Äõ’û’#8Ñ’9ÄNÄõ’Ñ’û’½¬#K¿fÄ{Ä×’Ý’¦¾½¬#wI“Ä£Ä×’Ý’t½#Œ¿»ÄËÄ×’Ý’½_#´ßÄïÄ×’Ñ’Ë’#vL¿ÅÅ×’Ý’#{¿,Å<Å×’¿Ý’#*¿UÅeÅ×’*¿Ý’#æ¿~ʼnÅ×’¿#÷*¿¢Å­Å×’*¿#¦¾ÆÅÑÅ×’û’#?¿êÅúÅ×’¿¿#O*¿Æ#Æ×’*¿*¿'#]8Æ>Æ×’'#jSÆ^Æ×’¦¾_#xrÆ}Æ×’¦¾8@8F8:G8ÍF8D‹ _H1Š _H2U¥8°¥8¹¥g_g_g_W¾l0+HW¾B<¦¾B=±¬B>ú¾B?Ö¾aBAÇ[ǓǓ ““ ÇÇ%ÇjxǃÇ“®8@ _TpM8Š8D‹8:Gg_ÁÇD>§w<ºÈ<¾Cv<¿H<ÀéN8H;hÈM;jRGv}\RGw­\RG{þzRG{RG‚1{RGƒF{RG„[{RG†…{RG‰¡{RG‹·{RGŽÒ{RGí{RG |RG’-|RG˜O|RGš[|RG›n|RGœˆ|RG§|RGžÆ|RG Ü|RG¡ü|RGñÝ\RGö9ÒRG÷}RGù2}RGú…}RGûG}RGüf}RGýŸ};"\§ÉHWÒB"_btB"a¹}B"b¿}B"cÊ}B"dÐ}C"qLÉRÉè}C"sbÉmÉè}î}C"y}ɈÉè}®Y"h"iíÈ8[íÈHHâËHO8Ê=íÈHR8ÊHS8ÊHT8Ê5HVýÉÊú}5HZÊÊú}~mHe,Êú}~HMùÓHÊHKßÔH¤¸ÉHníÈ]Hq ~ʇÊ~]Hu~žÊ¤Ê~]Hy_Ê»ÊÁÊ~5H|ÐÊÖÊ~5HåÊðÊ~~_Ê5H‚ËË~bt5H†Ë.Ë~bt~5HŸ=ËHË~®]H§8Ê_ËjË~bt^H®}ËË~8ÊbtFH·¡Ë¬Ë~btRHÖHËRHÖjËRHÖSÊRHÖ‡ÊRHÖ¤Ê _Tp[8íȬÉ;HÖÔÒH¬ÉBHâ[BHã8ÊBHäÔBHåÔBHæÔBHçþÔBHé×BHêÔÒBHëÕBHìbtBHîíÈCHýŽÌ”Ì$~nH¥Ì°Ì$~*~rÌnH/ÆÌÛÌ$~fÌ0~*~úËH>ñÌüÌ$~6~H§ ÍÍ$~®EI§<~0Í;Í$~6~'HèPÍ`Í$~fÌ0~H#6ÌyÍÍ$~H,B̘͞ÍB~&endH56̷ͽÍ$~&endH>BÌÖÍÜÍB~HGZÌõÍûÍ$~HPNÌÎÎB~HYZÌ3Î9Î$~HbNÌRÎXÎB~HŽfÌqÎwÎB~H“fÌΖÎB~'HɫλÎ$~fÌúËHÞfÌÔÎÚÎB~Hç_óÎùÎB~FIA ÏÏ$~fÌH Ì1Ï<Ï$~fÌH*ÌUÏ`ÏB~fÌ'H uÏ€ÏB~fÌ&atH6̘ϣÏ$~fÌ&atHH*Ì»ÏÆÏB~fÌHSÌßÏåÏ$~H[*ÌþÏÐB~HcÌÐ#Ð$~Hk*Ì<ÐBÐB~HzÌ[ÐaÐ$~H‚ÌzЀÐB~'H‘•РÐ$~0~'HµµÐ»Ð$~EIk6ÌÓÐãÐ$~6Ì0~'H0øÐ Ñ$~6ÌfÌ0~H}6Ì&Ñ1Ñ$~6ÌHœ6ÌJÑZÑ$~6Ì6Ì'HªoÑzÑ$~<~'H»Ñ•Ñ$~'HªÑºÑ$~fÌ0~FIáÎÑÞÑ$~bt0~'IÁóÑÒ$~6ÌfÌ0~'IFÒ-Ò$~6ÌÐ}HŽfÌFÒVÒB~fÌÝ'HœkÒvÒ$~ÌEI6ÌŽÒ™Ò$~6ÌEI™6̱ÒÁÒ$~6Ì6Ì _Tp[cíÈ;JaÕHÕAJi×BJn×BJoTÕBJp_ÕBJqjÕCJy4Ó:Óe~aJJÓUÓe~ôÒCJ„eÓpÓe~k~EJ“ôÒˆÓŽÓq~EJ¡Ó¦Ó¬Óq~EJ­ ÓÄÓÊÓq~EJ¶w~âÓèÓe~EJÂÔÒÔ Ôe~®EJÏw~#Ô)Ôe~EJÛÔÒAÔLÔe~®EJèÔÒdÔoÔq~ÓEJòw~‡Ô’Ôe~ÓEJþÔÒªÔµÔq~ÓJw~ÎÔÙÔe~ÓJÓòÔýÔq~Ó8×KçË<ºHÕ<¾Cv<¿¿}<ÀÐ}8¿}<£Õ<§8×<¨R×<©E×8×RÙ]ÙÊ~Ü~H§nÙyÙÊ~®EI§â~‘ÙœÙÊ~Ü~'Hè±ÙÁÙÊ~ÇØÖ~H#—ØÚÙàÙÊ~H,£ØùÙÿÙè~&endH5—ØÚÚÊ~&endH>£Ø7Ú=Úè~HG»ØVÚ\ÚÊ~HP¯ØuÚ{Úè~HY»Ø”ÚšÚÊ~Hb¯Ø³Ú¹Úè~HŽÇØÒÚØÚè~H“ÇØñÚ÷Úè~'HÉ ÛÛÊ~ÇØ[ØHÞÇØ5Û;Ûè~Hç_TÛZÛè~FIAnÛyÛÊ~ÇØH Ø’ÛÛÊ~ÇØH‹Ø¶ÛÁÛè~ÇØ'H ÖÛáÛè~ÇØ&atH6ØùÛÜÊ~ÇØ&atHH‹ØÜ'Üè~ÇØHSØ@ÜFÜÊ~H[‹Ø_ÜeÜè~HcØ~Ü„ÜÊ~Hk‹ØÜ£Üè~HzgؼÜÂÜÊ~H‚sØÛÜáÜè~'H‘öÜÝÊ~Ö~'HµÝÝÊ~EIk—Ø4ÝDÝÊ~—ØÖ~'H0YÝnÝÊ~—ØÇØÖ~H}—؇ݒÝÊ~—ØHœ—ثݻÝÊ~—Ø—Ø'HªÐÝÛÝÊ~â~'H»ðÝöÝÊ~'H ÞÞÊ~ÇØÖ~FIá/Þ?ÞÊ~btÖ~'IÁTÞiÞÊ~—ØÇØÖ~'IF~ÞŽÞÊ~—Ø¿NHŽÇا޷Þè~ÇØÝ'HœÌÞ×ÞÊ~gØEI—ØïÞúÞÊ~—ØEI™—Øß"ßÊ~—Ø—Ø _Tp§cNv;JaháHàáAJivÜBJnvÜBJoµáBJpÀáBJqËáCJy•ß›ß aJ«ß¶ß UßCJ„ÆßÑß EJ“UßéßïßEJ¡yßà àEJ­mß%à+àEJ¶CàIà EJÂ5ßaàlà ®EJÏ„àŠà EJÛ5ߢà­à ®EJè5ßÅàÐàaßEJòèàóà aßEJþ5ß ááaßJ/á:á aßJyßSá^áaß8vÜKHØ<º©á<¾Cv<¿Ý<À¿N8Ý<£àá<§‘Ü<¨«Ü<©žÜ8vÜræ}櫽H§Žæ™æ«®EI§Ã±æ¼æ«½'HèÑæáæ«çå·H#·åúæç«H,ÃåççÉ&endH5·å8ç>ç«&endH>ÃåWç]çÉHGÛåvç|ç«HPÏå•ç›çÉHYÛå´çºç«HbÏåÓçÙçÉHŽçåòçøçÉH“çåèèÉ'HÉ,è<è«çå{åHÞçåUè[èÉHç_tèzèÉFIAŽè™è«çåH Ÿå²è½è«çåH«åÖèáèÉçå'H öèéÉçå&atH6Ÿåé$é«çå&atHH«å<éGéÉçåHSŸå`éfé«H[«åé…éÉHcŸåžé¤é«Hk«å½éÃéÉHz‡åÜéâé«H‚“åûéêÉ'H‘ê!ê«·'Hµ6ê<ê«EIk·åTêdê«·å·'H0yêŽê«·åçå·H}·å§ê²ê«·åHœ·åËêÛê«·å·å'Hªðêûê«Ã'H»ëë«'H+ë;ë«çå·FIáOë_ë«bt·'IÁtë‰ë«·åçå·'IFžë®ë«·åWHŽçåÇë×ëÉçåÝ'Hœìë÷뫇åEI·åìì«·åEI™·å2ìBì«·å·å _Tp)cnâ;JaˆîHïAJieãBJneãBJoÕîBJpàîBJqëîCJyµì»ììaJËìÖììuìCJ„æìñììòEJ“uì ííøEJ¡™ì'í-íøEJ­ìEíKíøEJ¶þcíiíìEJÂUìíŒíì®EJÏþ¤íªíìEJÛUìÂíÍíì®EJèUìåíðíøìEJòþîîììEJþUì+î6îøìJþOîZîììJ™ìsî~îøì8eãKhå<ºÉî<¾Cv<¿F<ÀW8F<£ï<§€ã<¨šã<©ã8eã’ó󀓀H§®ó¹ó€®EI§™€ÑóÜ󀓀'Hèñóô€ó€H#×òô ô€H,ãò9ô?ôŸ€&endH5×òXô^ô€&endH>ãòwô}ôŸ€HGûò–ôœô€HPïòµô»ôŸ€HYûòÔôÚô€HbïòóôùôŸ€HŽóõõŸ€H“ó1õ7õŸ€'HÉLõ\õ€ó›òHÞóuõ{õŸ€Hç_”õšõŸ€FIA®õ¹õ€óH ¿òÒõÝõ€óHËòöõöŸ€ó'H ö!öŸ€ó&atH6¿ò9öDö€ó&atHHËò\ögöŸ€óHS¿ò€ö†ö€H[ËòŸö¥öŸ€Hc¿ò¾öÄö€HkËòÝöãöŸ€Hz§òüö÷€H‚³ò÷!÷Ÿ€'H‘6÷A÷€€'HµV÷\÷€EIk×òt÷„÷€×ò€'H0™÷®÷€×òó€H}×òÇ÷Ò÷€×òHœ×òë÷û÷€×ò×ò'Hªøø€™€'H»0ø6ø€'HKø[ø€ó€FIáoøø€bt€'IÁ”ø©ø€×òó€'IF¾øÎø€×ò-€HŽóçø÷øŸ€óÝ'Hœ ùù€§òEI×ò/ù:ù€×òEI™×òRùbù€×ò×ò _Tp®cŽï;Ja¨ûH üAJiTêBJnTêBJoõûBJpüBJq üCJyÕùÛù€aJëùöù€•ùCJ„úú€È€EJ“•ù)ú/ú΀EJ¡¹ùGúMú΀EJ­­ùeúkú΀EJ¶Ô€ƒú‰ú€EJÂuù¡ú¬ú€®EJÏÔ€ÄúÊú€EJÛuùâúíú€®EJèuùûû΀¡ùEJòÔ€(û3û€¡ùEJþuùKûVû΀¡ùJÔ€oûzû€¡ùJ¹ù“ûžû΀¡ù8TêKˆò<ºéû<¾Cv<¿Ò<À-€8Ò<£ ü<§oê<¨‰ê<©|ê8TêýIý®Y"h"i®ü8;®üHH£ÿHOùý=®üHRùýHSùýHTùý5HV¾ýÄý-5HZÓýÞý-3mHeíý-9HMî þHKïH¤yýHn®ü]Hq?BþHþE]Hu3_þeþK]Hy þ|þ‚þK5H|‘þ—þE5H¦þ±þEQ þ5H‚ÅþÐþEbt5H†ßþïþEbtQ5HŸþþ ÿE®]H§ùý ÿ+ÿEbt^H®>ÿNÿEùýbtFH·bÿmÿEbtRHÖ ÿRHÖ+ÿRHÖþRHÖHþRHÖeþ _Tp;8®ümý;HÖ•HmýBHâ;BHãùýBHä*îBHå5îBHæ@îBHç$ïBHéCñBHê•BHëÈBHìbtBHî®üCHýOUWnHfqW]3nH/‡œW'c]»ÿH>²½WiH§ÎÙW®EI§oñüWi'Hè!W'cH#÷ÿ:@WH,Y_u&endH5÷ÿx~W&endH>—uHG¶¼WHPÕÛuHYôúWHbuHŽ'28uH“'QWu'HÉl|W'»ÿHÞ'•›uHç_´ºuFIAÎÙW'H ßÿòýW'Hëÿ!u''H 6Au'&atH6ßÿYdW'&atHHëÿ|‡u'HSßÿ ¦WH[ëÿ¿ÅuHcßÿÞäWHkëÿýuHzÇÿ"WH‚Óÿ;Au'H‘VaWc'Hµv|WEIk÷ÿ”¤W÷ÿc'H0¹ÎW÷ÿ'cH}÷ÿçòW÷ÿHœ÷ÿ W÷ÿ÷ÿ'Hª0;Wo'H»PVW'Hk{W'cFIáŸWbtc'IÁ´ÉW÷ÿ'c'IFÞîW÷ÿHŽ'u'Ý'Hœ,7WÇÿEI÷ÿOZW÷ÿEI™÷ÿr‚W÷ÿ÷ÿ _Tp;c®ü;JaÈH@ AJiCñBJnCñBJo BJp BJq+ CJyõû˜aJ ˜µCJ„&1˜žEJ“µIO¤EJ¡Ùgm¤EJ­Í…‹¤EJ¶ª£©˜EJ•Á̘®EJϪäê˜EJÛ• ˜®EJè•%0¤ÁEJòªHS˜ÁEJþ•kv¤ÁJªš˜ÁJÙ³¾¤Á8CñK¨ÿ<º <¾Cv<¿÷€<À8÷€<£@ <§^ñ<¨xñ<©kñ8CñÒ Ý -‚?‚H§î ù -‚®EI§E‚-‚?‚'Hè1A-‚G 9‚H# Z`-‚H,# yK‚&endH5 ˜ž-‚&endH># ·½K‚HG; ÖÜ-‚HP/ õûK‚HY; -‚Hb/ 39K‚HŽG RXK‚H“G qwK‚'HÉŒœ-‚G Û HÞG µ»K‚Hç_ÔÚK‚FIAîù-‚G H ÿ -‚G H 6AK‚G 'H VaK‚G &atH6ÿ y„-‚G &atHH œ§K‚G HSÿ ÀÆ-‚H[ ßåK‚Hcÿ þ-‚Hk #K‚Hzç <B-‚H‚ó [aK‚'H‘v-‚9‚'Hµ–œ-‚EIk ´Ä-‚ 9‚'H0Ùî-‚ G 9‚H} -‚ Hœ +;-‚  'HªP[-‚E‚'H»pv-‚'H‹›-‚G 9‚FI᯿-‚bt9‚'IÁÔé-‚ G 9‚'IFþ-‚ ÙHŽG '7K‚G Ý'HœLW-‚ç EI oz-‚ EI™ ’¢-‚   _TpMcÎ ;JaèH`AJi2øBJn2øBJo5BJp@BJqKCJyn‚aJ+6n‚ÕCJ„FQn‚t‚EJ“Õioz‚EJ¡ù‡z‚EJ­í¥«z‚EJ¶€‚ÃÉn‚EJµáìn‚®EJÏ€‚ n‚EJÛµ"-n‚®EJèµEPz‚áEJò€‚hsn‚áEJþµ‹–z‚áJ€‚¯ºn‚áJùÓÞz‚á82øKÈ <º)<¾Cv<¿Í<ÀÙ8Í<£`<§Mø<¨gø<©Zø82øIö‚®]H§9`kö‚bt^H®~Žö‚9btFH·¢­ö‚btRHÖIRHÖkRHÖTRHÖˆRHÖ¥ _Tp¢U8î­;HÖÕ H­BHâ¢UBHã9BHäüBHåüBHæüBHçýBHé!ÿBHêÕ BHë#BHìbtBHîîCHý•ƒnH¦±ƒƒsnH/Ç܃gƒƒûH>òýƒƒH§ƒ®EI§ ƒ1<ƒƒ'HèQaƒgƒH#7z€ƒH,C™Ÿ&ƒ&endH57¸¾ƒ&endH>C×Ý&ƒHG[öüƒHPO&ƒHY[4:ƒHbOSY&ƒHŽgrx&ƒH“g‘—&ƒ'Hɬ¼ƒgûHÞgÕÛ&ƒHç_ôú&ƒFIAƒgH 2=ƒgH+Va&ƒg'H v&ƒg&atH6™¤ƒg&atHH+¼Ç&ƒgHSàæƒH[+ÿ&ƒHc$ƒHk+=C&ƒHz\bƒH‚{&ƒ'H‘–¡ƒƒ'Hµ¶¼ƒEIk7Ôäƒ7ƒ'H0ùƒ7gƒH}7'2ƒ7Hœ7K[ƒ77'Hªp{ƒ ƒ'H»–ƒ'H«»ƒgƒFIáÏ߃btƒ'IÁô ƒ7gƒ'IF . ƒ7´‚HŽgG W &ƒgÝ'Hœl w ƒEI7 š ƒ7EI™7²  ƒ77 _Tp¢Ucî;Ja#H€#AJi!ÿBJn!ÿBJoU#BJp`#BJqk#CJy5!;!IƒaJK!V!Iƒõ CJ„f!q!IƒOƒEJ“õ ‰!!UƒEJ¡!§!­!UƒEJ­ !Å!Ë!UƒEJ¶[ƒã!é!IƒEJÂÕ " "Iƒ®EJÏ[ƒ$"*"IƒEJÛÕ B"M"Iƒ®EJèÕ e"p"Uƒ!EJò[ƒˆ"“"Iƒ!EJþÕ «"¶"Uƒ!J[ƒÏ"Ú"Iƒ!J!ó"þ"Uƒ!8!ÿKè<ºI#<¾Cv<¿£‚<À´‚8£‚<£€#<§<ÿ<¨Vÿ<©Iÿ8!ÿ%¿ƒŃmHeM%¿ƒ˃HMìi%HKÒH¤Ù$Hn$]Hqу¢%¨%׃]HuŃ¿%Å%݃]Hy€%Ü%â%݃5H|ñ%÷%׃5H&&׃ダ%5H‚%&0&׃bt5H†?&O&׃btãƒ5HŸ^&i&׃®]H§Y%€&‹&׃bt^H®ž&®&׃Y%btFH·Â&Í&׃btRHÖi&RHÖ‹&RHÖt%RHÖ¨%RHÖÅ% _TpE8$Í$;HÖõ-HÍ$BHâEBHãY%BHä÷BHåBHæ BHçñBHéBHêõ-BHë(0BHìbtBHî$CHý¯'µ'éƒnHÆ'Ñ'éƒïƒ“'nH/ç'ü'郇'õƒïƒ'H>((éƒûƒH§.(9(郮EI§„Q(\(éƒûƒ'Hèq((郇'õƒH#W'š( (éƒH,c'¹(¿(„&endH5W'Ø(Þ(éƒ&endH>c'÷(ý(„HG{'))éƒHPo'5);)„HY{'T)Z)éƒHbo's)y)„Hއ'’)˜)„H“‡'±)·)„'HÉÌ)Ü)郇''HÞ‡'õ)û)„Hç_**„FIA.*9*郇'H ?'R*]*郇'HK'v**„‡''H –*¡*„‡'&atH6?'¹*Ä*郇'&atHHK'Ü*ç*„‡'HS?'++éƒH[K'+%+„Hc?'>+D+éƒHkK']+c+„Hz''|+‚+éƒH‚3'›+¡+„'H‘¶+Á+éƒõƒ'HµÖ+Ü+éƒEIkW'ô+,éƒW'õƒ'H0,.,éƒW'‡'õƒH}W'G,R,éƒW'HœW'k,{,éƒW'W''Hª,›,郄'H»°,¶,éƒ'HË,Û,郇'õƒFIáï,ÿ,éƒbtõƒ'IÁ-)-éƒW'‡'õƒ'IF>-N-éƒW'•ƒHއ'g-w-„‡'Ý'HœŒ-—-éƒ''EIW'¯-º-éƒW'EI™W'Ò-â-éƒW'W' _TpEc$;Ja(0H 0AJiBJnBJou0BJp€0BJq‹0CJyU.[.D„aJk.v.D„.CJ„†.‘.D„J„EJ“.©.¯.P„EJ¡9.Ç.Í.P„EJ­-.å.ë.P„EJ¶V„/ /D„EJÂõ-!/,/D„®EJÏV„D/J/D„EJÛõ-b/m/D„®EJèõ-…//P„!.EJòV„¨/³/D„!.EJþõ-Ë/Ö/P„!.JV„ï/ú/D„!.J9.00P„!.8K'<ºi0<¾Cv<¿„ƒ<À•ƒ8„ƒ<£ 0<§+<¨E<©885D5Ý„^]W5b5݄݄m`q5Ý„Ê4;"\86HÿB"_btB"atB"bPsB"c5tB"d5C"qÝ5ã5 …C"só5þ5 ……C"y66 …®Y"h"i~58@~5$`¨6$e_$fM5$lp6v6Š5$p…6•6Š ŠÙ _T1_ _T2MHHÞ8HO47=~5HR47HS47HT475HVù6ÿ6:Œ5HZ77:Œ@ŒmHe(7:ŒFŒHM¡ D7HK‡ H¤´6Hn~5]HqLŒ}7ƒ7RŒ]Hu@Œš7 7XŒ]Hy[7·7½7XŒ5H|Ì7Ò7RŒ5Há7ì7RŒ^Œ[75H‚8 8RŒbt5H†8*8RŒbt^Œ5HŸ98D8RŒ®]H§47[8f8RŒbt^H®y8‰8RŒ47btFH·8¨8RŒbtRHÖD8RHÖf8RHÖO7RHÖƒ7RHÖ 7 _Tp@8~5¨6;HÖÐ?H¨6BHâ@BHã47BHä¬ BHå· BHæÂ BHç¦ BHéÅ BHêÐ?BHëBBHìbtBHî~5CHýŠ99dŒnH¡9¬9dŒjŒn9nH/Â9×9dŒb9pŒjŒö8H>í9ø9dŒvŒH§ ::dŒ®EI§|Œ,:7:dŒvŒ'HèL:\:dŒb9pŒH#29u:{:dŒH,>9”:š:‚Œ&endH529³:¹:dŒ&endH>>9Ò:Ø:‚ŒHGV9ñ:÷:dŒHPJ9;;‚ŒHYV9/;5;dŒHbJ9N;T;‚ŒHŽb9m;s;‚ŒH“b9Œ;’;‚Œ'Hɧ;·;dŒb9ö8HÞb9Ð;Ö;‚ŒHç_ï;õ;‚ŒFIA <<dŒb9H 9-<8<dŒb9H&9Q<\<‚Œb9'H q<|<‚Œb9&atH69”<Ÿ<dŒb9&atHH&9·<Â<‚Œb9HS9Û<á<dŒH[&9ú<=‚ŒHc9==dŒHk&98=>=‚ŒHz9W=]=dŒH‚9v=|=‚Œ'H‘‘=œ=dŒpŒ'Hµ±=·=dŒEIk29Ï=ß=dŒ29pŒ'H0ô= >dŒ29b9pŒH}29">->dŒ29Hœ29F>V>dŒ2929'Hªk>v>dŒ|Œ'H»‹>‘>dŒ'H¦>¶>dŒb9pŒFIáÊ>Ú>dŒbtpŒ'IÁï>?dŒ29b9pŒ'IF?)?dŒ295HŽb9B?R?‚Œb9Ý'Hœg?r?dŒ9EI29Š?•?dŒ29EI™29­?½?dŒ2929 _Tp@c~5;JaBH{BAJiÅ BJnÅ BJoPBBJp[BBJqfBCJy0@6@ ŒaJF@Q@ Œð?CJ„a@l@ Œ¦ŒEJ“ð?„@Š@¬ŒEJ¡@¢@¨@¬ŒEJ­@À@Æ@¬ŒEJ¶²ŒÞ@ä@ ŒEJÂÐ?ü@A Œ®EJϲŒA%A ŒEJÛÐ?=AHA Œ®EJèÐ?`AkA¬Œü?EJò²ŒƒAŽA Œü?EJþÐ?¦A±A¬Œü?J²ŒÊAÕA Œü?J@îAùA¬Œü?8Å Kã8<ºDB<¾Cv<¿Ps<À58Ps<£{B<§à <¨ú <©í 8Å ûMNòèéH§N"Nòè®EI§ é:NENòèé'HèZNjNòèpMþèH#@MƒN‰NòèH,LM¢N¨Né&endH5@MÁNÇNòè&endH>LMàNæNéHGdMÿNOòèHPXMO$OéHYdM=OCOòèHbXM\ObOéHŽpM{OOéH“pMšO Oé'HɵOÅOòèpMMHÞpMÞOäOéHç_ýOPéFIAP"PòèpMH (M;PFPòèpMH4M_PjPépM'H PŠPépM&atH6(M¢P­PòèpM&atHH4MÅPÐPépMHS(MéPïPòèH[4MQQéHc(M'Q-QòèHk4MFQLQéHzMeQkQòèH‚M„QŠQé'H‘ŸQªQòèþè'Hµ¿QÅQòèEIk@MÝQíQòè@Mþè'H0RRòè@MpMþèH}@M0R;Ròè@MHœ@MTRdRòè@M@M'HªyR„Ròè é'H»™RŸRòè'H´RÄRòèpMþèFIáØRèRòèbtþè'IÁýRSòè@MpMþè'IF'S7Sòè@MžèHŽpMPS`SépMÝ'HœuS€SòèMEI@M˜S£Sòè@MEI™@M»SËSòè@M@M _Tp|èc÷I;JaVH‰VAJiDBJnDBJo^VBJpiVBJqtVCJy>TDT3éaJTT_T3éþSCJ„oTzT3é9éEJ“þS’T˜T?éEJ¡"T°T¶T?éEJ­TÎTÔT?éEJ¶EéìTòT3éEJÂÞS UU3é®EJÏEé-U3U3éEJÛÞSKUVU3é®EJèÞSnUyU?é TEJòEé‘UœU3é TEJþÞS´U¿U?é TJEéØUãU3é TJ"TüUV?é T8DKñL<ºRV<¾Cv<¿è<Àžè8è<£‰V<§_<¨y<©l8D[&[ÌÞH§7[B[Ì®EI§äZ[e[ÌÞ'Hèz[Š[ÌZØH#`Z£[©[ÌH,lZÂ[È[ê&endH5`Zá[ç[Ì&endH>lZ\\êHG„Z\%\ÌHPxZ>\D\êHY„Z]\c\ÌHbxZ|\‚\êHŽZ›\¡\êH“Zº\À\ê'HÉÕ\å\ÌZ$ZHÞZþ\]êHç_]#]êFIA7]B]ÌZH HZ[]f]ÌZHTZ]Š]êZ'H Ÿ]ª]êZ&atH6HZÂ]Í]ÌZ&atHHTZå]ð]êZHSHZ ^^ÌH[TZ(^.^êHcHZG^M^ÌHkTZf^l^êHz0Z…^‹^ÌH‚;hFhM_H§WhbhM®EI§ezh…hM_'HèšhªhM°gYH#€gÃhÉhMH,Œgâhèhk&endH5€giiM&endH>Œg i&ikHG¤g?iEiMHP˜g^idikHY¤g}iƒiMHb˜gœi¢ikHްg»iÁikH“°gÚiàik'HÉõijM°gDgHÞ°gj$jkHç_=jCjkFIAWjbjM°gH hg{j†jM°gHtgŸjªjk°g'H ¿jÊjk°g&atH6hgâjíjM°g&atHHtgkkk°gHShg)k/kMH[tgHkNkkHchggkmkMHktg†kŒkkHzPg¥k«kMH‚\gÄkÊkk'H‘ßkêkMY'HµÿklMEIk€gl-lM€gY'H0BlWlM€g°gYH}€gpl{lM€gHœ€g”l¤lM€g€g'Hª¹lÄlMe'H»ÙlßlM'HôlmM°gYFIám(mMbtY'IÁ=mRmM€g°gY'IFgmwmM€gùHްgm mk°gÝ'HœµmÀmMPgEI€gØmãmM€gEI™€gûm nM€g€g _Tp[ðc7d;JaQpHÉpAJi"*BJn"*BJožpBJp©pBJq´pCJy~n„nŽaJ”nŸnŽ>nCJ„¯nºnŽ”EJ“>nÒnØnšEJ¡bnðnönšEJ­VnoošEJ¶ ,o2oŽEJÂnJoUoŽ®EJÏ mosoŽEJÛn‹o–oŽ®EJèn®o¹ošJnEJò ÑoÜoŽJnEJþnôoÿošJnJ p#pŽJnJbn{HrBHâùyBHã¢rBHäø-BHå.BHæ.BHçò.BHé1BHê>{BHëq}BHìbtBHîWqCHýøtþtí nHuuí ó ÜtnH/0uEuí Ðtù ó dtH>[ufuí ÿ H§wu‚uí ®EI§ šu¥uí ÿ 'HèºuÊuí Ðtù H# tãuéuí H,¬tvv &endH5 t!v'ví &endH>¬t@vFv HGÄt_veví HP¸t~v„v HYÄtv£ví Hb¸t¼vÂv HŽÐtÛváv H“Ðtúvw 'HÉw%wí ÐtdtHÞÐt>wDw Hç_]wcw FIAww‚wí ÐtH ˆt›w¦wí ÐtH”t¿wÊw Ðt'H ßwêw Ðt&atH6ˆtx xí Ðt&atHH”t%x0x ÐtHSˆtIxOxí H[”thxnx Hcˆt‡xxí Hk”t¦x¬x HzptÅxËxí H‚|täxêx 'H‘ÿx yí ù 'Hµy%yí EIk t=yMyí  tù 'H0bywyí  tÐtù H} ty›yí  tHœ t´yÄyí  t t'HªÙyäyí  'H»ùyÿyí 'Hz$zí Ðtù FIá8zHzí btù 'IÁ]zrzí  tÐtù 'IF‡z—zí  t™ HŽÐt°zÀz ÐtÝ'HœÕzàzí ptEI tøz{í  tEI™ t{+{í  t t _TpùycWq;Jaq}Hé}AJi1BJn1BJo¾}BJpÉ}BJqÔ}CJyž{¤{. aJ´{¿{. ^{CJ„Ï{Ú{. 4 EJ“^{ò{ø{: EJ¡‚{||: EJ­v{.|4|: EJ¶@ L|R|. EJÂ>{j|u|. ®EJÏ@ |“|. EJÛ>{«|¶|. ®EJè>{Î|Ù|: j{EJò@ ñ|ü|. j{EJþ>{}}: j{J@ 8}C}. j{J‚{\}g}: j{81KQt<º²}<¾Cv<¿ˆ <À™ 8ˆ <£é}<§,1<¨F1<©9181{;h@~M;j<¯w~<³Cv<´‚ <µ“ 8‚ ;"\1H:3B"_btB"aÄB"bÐB"cÛB"dáC"qÖ~Ü~ùC"sì~÷~ùÿC"yù®Y"h"iw~8Êw~HHlHOÂ=w~HRÂHSÂHTÂ5HV‡ 5HZœ§ mHe¶ HMÜ4ÒHKÂ5H¤BHnw~]Hq €€#]Hu(€.€)]HyéE€K€)5H|Z€`€#5Ho€z€#/é5H‚Ž€™€#bt5H†¨€¸€#bt/5HŸÇ€Ò€#®]H§Âé€ô€#bt^H®#ÂbtFH·+6#btRHÖÒ€RHÖô€RHÖÝRHÖ€RHÖ.€ _TpÊ8w~6;HÖ^ˆH6BHâÊBHãÂBHäç4BHåò4BHæý4BHçá5BHé8BHê^ˆBH둊BHìbtBHîw~CHý‚‚5nH/‚:‚5;ünH/P‚e‚5ðA;„H>{‚†‚5GH§—‚¢‚5®EI§Mº‚Å‚5G'HèÚ‚ê‚5ðAH#Àƒ ƒ5H,Ì"ƒ(ƒS&endH5ÀAƒGƒ5&endH>Ì`ƒfƒSHG䃅ƒ5HPØžƒ¤ƒSHY佃Ã5HbØ܃âƒSHŽðûƒ„SH“ð„ „S'HÉ5„E„5ð„HÞð^„d„SHç_}„ƒ„SFIA—„¢„5ðH ¨»„Æ„5ðH´ß„ê„Sð'H ÿ„ …Sð&atH6¨"…-…5ð&atHH´E…P…SðHS¨i…o…5H[´ˆ…Ž…SHc¨§…­…5Hk´Æ…Ì…SHzå…ë…5H‚œ† †S'H‘†*†5A'Hµ?†E†5EIkÀ]†m†5ÀA'H0‚†—†5ÀðAH}À°†»†5ÀHœÀÔ†ä†5ÀÀ'Hªù†‡5M'H»‡‡5'H4‡D‡5ðAFIáX‡h‡5btA'IÁ}‡’‡5ÀðA'IF§‡·‡5ÀáHŽðЇà‡SðÝ'Hœõ‡ˆ5EIÀˆ#ˆ5ÀEI™À;ˆKˆ5ÀÀ _TpÊcw~;Ja‘ŠH ‹AJi8BJn8BJoÞŠBJpéŠBJqôŠCJy¾ˆĈvaJÔˆ߈v~ˆCJ„ïˆúˆv|EJ“~ˆ‰‰‚EJ¡¢ˆ0‰6‰‚EJ­–ˆN‰T‰‚EJ¶ˆl‰r‰vEJÂ^ˆЉ•‰v®EJψ­‰³‰vEJÛ^ˆˉÖ‰v®EJè^ˆî‰ù‰‚ŠˆEJòˆŠŠvŠˆEJþ^ˆ4Š?Š‚ŠˆJˆXŠcŠvŠˆJ¢ˆ|Š‡Š‚Šˆ88Kq<ºÒŠ<¾Cv<¿Ð<Àá8Ð<£ ‹<§8<¨58<©(888’ßqŒå'ˆS’h’ß=Œ=Œ=Œ'Ž}’’ß=Œå'Ÿ¢’­’ß=Œ'­Â’Í’ß÷jÛ’æ’ß® _Tpm cù’;"\Õ“H):B"c[B"daC"q4“:“yC"sJ“U“yC"ye“p“y®<"h’“"iÚ“86”<"h´“"iù’8m Z"wÉ“86”yµù’;"\6”H¿;C"qý“”¯C"s””¯µZ"y*”¯®j^”=Ê4mm  _Tpm 6”Ú“*–t?Ü”=Ú“BÊ4D¦”¬”»H¼”Ç”»Á@Д»®á”;}“fSu”=Ÿ“^ù’V…/•5•Ç'ZJ•U•Ç…aÍn•t•ÇeÁ•“•Óiü”¬•²•Óm •˕ѕÓpâ•è•Çtù•–ÇÁ‚– –Ç®F(A4–:–Ç'‰O–U–ÇS¿î”S¿5•S¿•S¿“•S¿t• _Tpm 8ù’h”}0˜ÃÝ„•–€6”…J†[5ˆè–î–uŒý–—Ý„]­–—%— ]•Ζ<—B— ]™Ã–Y—_— ]v—|—]¤­–“—ž—®]¬µ—»—]³­–Ò—Ý—®]»_ô—ÿ— ­–]¿_˜&˜  _Tpm Ìï™ó„Î0˜Е–ÕPÖa5Ø„˜Š˜¾#uÜ™˜¤˜¾#ó„5೘¾˜¾#Ä#T˜]äT˜Ú˜à˜Ê#]êj˜÷˜ý˜Ê#]î_˜™™Ê#]òÐ#1™7™¾#]ùI˜N™Y™¾#®Ð#q™w™¾#I˜™š™¾#®_²™½™Ê#Ö#I˜_Ú™å™Ê#Ö# _Tpm KKŒ•–;"\½šHU=B"_btB"a8!B"b>!B"cI!B"dO!C"qbšhšg!C"sxšƒšg!m!C"y“šžšg!®Y"h"iš8-!šHHøœHON›=šHRN›HSN›HTN›5HV››y!5HZ(›3›y!!mHeB›y!…!HM÷>^›HKÝ?H¤ÎšHnš]Hq‹!—››‘!]Hu!´›º›—!]Hyu›Ñ›×›—!5H|æ›ì›‘!5Hû›œ‘!!u›5H‚œ%œ‘!bt5H†4œDœ‘!bt!5HŸSœ^œ‘!®]H§N›uœ€œ‘!bt^H®“œ£œ‘!N›btFH··œœ‘!btRHÖ^œRHÖ€œRHÖi›RHÖ›RHÖº› _Tp-!8šš;HÖê£HšBHâ-!BHãN›BHä?BHå ?BHæ?BHçü?BHéBBHêê£BHë¦BHìbtBHîšCHý¤ª£!nH»Æ£!©!ˆnH/Üñ£!|¯!©!H>žž£!µ!H§#ž.ž£!®EI§»!FžQž£!µ!'Hèfžvž£!|¯!H#Lž•ž£!H,X®ž´žÁ!&endH5LÍžÓž£!&endH>XìžòžÁ!HGp ŸŸ£!HPd*Ÿ0ŸÁ!HYpIŸOŸ£!HbdhŸnŸÁ!HŽ|‡ŸŸÁ!H“|¦Ÿ¬ŸÁ!'HÉÁŸÑŸ£!|HÞ|êŸðŸÁ!Hç_   Á!FIA# . £!|H 4G R £!|H@k v Á!|'H ‹ – Á!|&atH64® ¹ £!|&atHH@Ñ Ü Á!|HS4õ û £!H[@¡¡Á!Hc43¡9¡£!Hk@R¡X¡Á!Hzq¡w¡£!H‚(¡–¡Á!'H‘«¡¶¡£!¯!'HµË¡Ñ¡£!EIkLé¡ù¡£!L¯!'H0¢#¢£!L|¯!H}L<¢G¢£!LHœL`¢p¢£!LL'Hª…¢¢£!»!'H»¥¢«¢£!'HÀ¢Т£!|¯!FIáä¢ô¢£!bt¯!'IÁ £££!L|¯!'IF3£C££!LO!HŽ|\£l£Á!|Ý'Hœ£Œ££!EIL¤£¯££!LEI™LÇ£×££!LL _Tp-!cš;Ja¦H•¦AJiBBJnBBJoj¦BJpu¦BJq€¦CJyJ¤P¤ä!aJ`¤k¤ä! ¤CJ„{¤†¤ä!ê!EJ“ ¤ž¤¤¤ð!EJ¡.¤¼¤¤ð!EJ­"¤Ú¤à¤ð!EJ¶ö!ø¤þ¤ä!EJÂ꣥!¥ä!®EJÏö!9¥?¥ä!EJÛê£W¥b¥ä!®EJèê£z¥…¥ð!¤EJòö!¥¨¥ä!¤EJþê£À¥Ë¥ð!¤Jö!ä¥ï¥ä!¤J.¤¦¦ð!¤8BKýœ<º^¦<¾Cv<¿>!<ÀO!8>!<£•¦<§6B<¨PB<©CB8B!8O!ê£;hì¦M;j<¯#§<³Cv<´8!<µI!88!Nˆ‡4;"E§ _Tp®;\§ _Tp®;`{§ _Spp _TpE§;E˜§=\§ _Tp®;`ƧP;b³§ _Sp{§ _Tp.§0˜EH;‹ü§+;ò§ _Tp¹};3#¨+;5¨ _Tp¹};lJ¨+;n@¨ _Tp[;)q¨+;+g¨ _Tp[;˜¨+;ލ _Tp[;ˆ½¨P;г¨ _Tp[;`ë¨P;bب _Sp˜¨ _Tpq¨;E©=½¨ _Tp[;`6©P;b#© _Spë¨ _TpJ¨;‹]©+;S© _TpþÔ;‹„©+;z© _TpnU;3«©+;5¡© _TpnU;"Ò©+;$È© _Tp§;ù©+;ï© _Tp§;`'ªP;bª _Spão _TpÒ©;EDª=ù© _Tp§;`rªP;b_ª _Sp'ª _Tp«©;‹™ª+;ª _TpWÚ;‹Àª+;¶ª _Tp@;3çª+;5ݪ _Tp@;l«+;n« _Tp);"5«+;$+« _Tp);\«+;R« _Tp);`Š«P;bw« _Spûo _Tp5«;E§«=\« _Tp);`Õ«P;b« _SpŠ« _Tp«;‹ü«+;ò« _TpFá;3#¬+;5¬ _Tp!€;lJ¬+;n@¬ _Tp®;‹q¬+;g¬ _Tp5è;‹˜¬+;ެ _Tp\t;3¿¬+;5µ¬ _Tp\t;læ¬+;nܬ _Tp;;" ­+;$­ _Tp;;4­+;*­ _Tp;;`b­P;bO­ _Spp _Tp ­;E­=4­ _Tp;;`­­P;bš­ _Spb­ _Tpæ¬;‹Ô­+;Ê­ _Tp$ï;‹û­+;ñ­ _Tpbt;l"®+;n® _TpM;"I®+;$?® _TpM;p®+;f® _TpM;`ž®P;b‹® _Sp3p _TpI®;E»®=p® _TpM;`é®P;bÖ® _Spž® _Tp"®;‹¯+;¯ _Tpö;‹7¯+;-¯ _Tptt;3^¯+;5T¯ _Tptt;l…¯+;n{¯ _Tp¢U;"¬¯+;$¢¯ _Tp¢U;`Ú¯P;bǯ _Spp _TpKp;E÷¯=¬¯ _Tp¢U;`%°P;b° _SpÚ¯ _Tp…¯;‹L°+;B° _Tpý;‹s°+;i° _Tp~ƒ;3š°+;5° _Tp~ƒ;lÁ°+;n·° _TpE;)è°+;+Þ° _TpE;±+;± _TpE;ˆ4±P;Š*± _TpE;`b±P;bO± _Sp± _Tpè°;E±=4± _TpE;`­±P;bš± _Spb± _TpÁ°;‹Ô±+;ʱ _Tpñ;3û±+;5ñ± _Tpt;l"²+;n² _Tp@;"I²+;$?² _Tp@;p²+;f² _Tp@;ˆ•²P;Š‹² _Tp@;`òP;b°² _Spp² _TpI²;Eà²=•² _Tp@;`³P;bû² _Spò _Tp"²;‹5³+;+³ _Tp¦ ;:\³+;=R³ _TpÅ ;:ƒ³+;=y³ _Tp¦ ;3ª³+;5 ³ _TpK•;lѳ+;ndz _Tpe’;)ø³+;+î³ _Tpe’;´+;´ _Tpe’;ˆD´P;Š:´ _Tpe’;`r´P;b_´ _Sp´ _Tpø³;E´=D´ _Tpe’;`½´P;bª´ _Spr´ _Tpѳ;3ä´+;5Ú´ _Tp•;l µ+;nµ _Tp#;)2µ+;+(µ _Tp#;Yµ+;Oµ _Tp#;ˆ~µP;Štµ _Tp#;`¬µP;b™µ _SpYµ _Tp2µ;Eɵ=~µ _Tp#;`÷µP;bäµ _Sp¬µ _Tp µ;‹¶+;¶ _Tp‡è;3E¶+;5;¶ _Tp‡è;ll¶+;nb¶ _Tp|è;)“¶+;+‰¶ _Tp|è;º¶+;°¶ _Tp|è;ˆß¶P;ŠÕ¶ _Tp|è;` ·P;bú¶ _Spº¶ _Tp“¶;E*·=ß¶ _Tp|è;`X·P;bE· _Sp · _Tpl¶;‹·+;u· _Tp%;‹¦·+;œ· _Tpa;3Í·+;5÷ _Tpa;lô·+;nê· _TpO;)¸+;+¸ _TpO;B¸+;8¸ _TpO;ˆg¸P;Š]¸ _TpO;`•¸P;b‚¸ _SpB¸ _Tp¸;E²¸=g¸ _TpO;`à¸P;b͸ _Sp•¸ _Tpô·;‹¹+;ý¸ _Tp!;‹.¹+;$¹ _Tpç;3U¹+;5K¹ _Tpç;l|¹+;nr¹ _Tp[ð;)£¹+;+™¹ _Tp[ð;ʹ+;À¹ _Tp[ð;ˆï¹P;Šå¹ _Tp[ð;`ºP;b º _Spʹ _Tp£¹;E:º=ï¹ _Tp[ð;`hºP;bUº _Spº _Tp|¹;‹º+;…º _Tp(;‹¶º+;¬º _Tp‚ ;3ݺ+;5Óº _Tp‚ ;l»+;núº _Tpùy;)+»+;+!» _Tpùy;R»+;H» _Tpùy;ˆw»P;Šm» _Tpùy;`¥»P;b’» _SpR» _Tp+»;E»=w» _Tpùy;`ð»P;bÝ» _Sp¥» _Tp»;‹¼+; ¼ _Tpò.;‹>¼+;4¼ _TpÄ;3e¼+;5[¼ _TpÄ;lŒ¼+;n‚¼ _TpÊ;)³¼+;+©¼ _TpÊ;Ú¼+;м _TpÊ;ˆÿ¼P;Šõ¼ _TpÊ;`-½P;b½ _SpÚ¼ _Tp³¼;EJ½=ÿ¼ _TpÊ;`x½P;be½ _Sp-½ _TpŒ¼;‹Ÿ½+;•½ _Tpá5;‹ƽ+;¼½ _Tp8!;3í½+;5ã½ _Tp8!;l¾+;n ¾ _Tp-!;);¾+;+1¾ _Tp-!;b¾+;X¾ _Tp-!;ˆ‡¾P;Š}¾ _Tp-!;`µ¾P;b¢¾ _Spb¾ _Tp;¾;EÒ¾=‡¾ _Tp-!;`¿P;bí¾ _Spµ¾ _Tp¾;‹'¿+;¿ _Tpü?;:N¿+;=D¿ _TpTê;:u¿+;=k¿ _Tp5è;:œ¿+;=’¿ _TpþÔ;:ÿ+;=¹¿ _TpWÚ;:ê¿+;=à¿ _TpFá;:À+;=À _Tp$ï;:8À+;=.À _Tpö;:_À+;=UÀ _Tpý;:†À+;=|À _Tpñ;:­À+;=£À _Tp%;:ÔÀ+;=ÊÀ _Tp!;:ûÀ+;=ñÀ _Tp(;:"Á+;=Á _Tpò.;:IÁ+;=?Á _Tpá5;:pÁ+;=fÁ _Tpü?;‹—Á+;Á _Tp×;‹¾Á+;´Á _TpvÜ;‹åÁ+;ÛÁ _Tpeã;‹ Â+; _TpCñ;‹3Â+;) _Tp2ø;‹ZÂ+;P _Tp!ÿ;‹Â+;w _Tp;3¨Â+;5žÂ _Tp|™;lÏÂ+;nÅ _Tpj™;)öÂ+;+ì _Tpj™;Ã+;à _Tpj™;ˆBÃP;Š8à _Tpj™;`pÃP;b]à _Spà _TpöÂ;EÃ=Bà _Tpj™;`»ÃP;b¨Ã _Sppà _TpÏÂ;3âÃ+;5ØÃ _Tp‚™;l Ä+;nÿà _Tpv™;)0Ä+;+&Ä _Tpv™;WÄ+;MÄ _Tpv™;ˆ|ÄP;ŠrÄ _Tpv™;`ªÄP;b—Ä _SpWÄ _Tp0Ä;EÇÄ=|Ä _Tpv™;`õÄP;bâÄ _SpªÄ _Tp Ä;‹Å+;Å _TpD;‹CÅ+;9Å _Tp3#;‹jÅ+;`Å _Tp"*;‹‘Å+;‡Å _Tp1;‹¸Å+;®Å _Tp8;3ßÅ+;5ÕÅ _TpF$;lÆ+;nüÅ _Tp,;)-Æ+;+#Æ _Tp,;TÆ+;JÆ _Tp,;ˆyÆP;ŠoÆ _Tp,;`§ÆP;b”Æ _SpTÆ _Tp-Æ;EÄÆ=yÆ _Tp,;`òÆP;b߯ _Sp§Æ _TpÆ;‹Ç+;Ç _TpB;:@Ç+;=6Ç _Tp×;:gÇ+;=]Ç _TpvÜ;:ŽÇ+;=„Ç _Tpeã;:µÇ+;=«Ç _TpCñ;:ÜÇ+;=ÒÇ _Tp2ø;:È+;=ùÇ _Tp!ÿ;:*È+;= È _Tp;:QÈ+;=GÈ _TpD;:xÈ+;=nÈ _Tp3#;:ŸÈ+;=•È _Tp"*;:ÆÈ+;=¼È _Tp1;:íÈ+;=ãÈ _Tp8;:É+;= É _TpBN…£4oCÉJ cÝ<É?DÉ$&¥Ô{~É8•–8Ô{•–•–Ô{b)/J É _Tpm [v@e¯É;vv*=#§w*JS23;EqGQP$R=ø"NS==NS=]NR',btR'-Cv;':—ËB'=btB'?nUB'@ÝB'A¹NB'B¿NC'O^ÊdÊÅNC'QtÊÊÅNËNC'VÊšÊÅN®E'YʲʽÊÑN6ÊE']*ÊÕÊàÊÑNBÊE'cÊøÊËÅNÊ[F'mË,ËÅNÊÊE'qÊDËJËÑNF'^ËnËÅNÊ¿NF'…‚ËËÅNÊ _Tp§Ê;':-ÍB'=btB'?ÝGB'@HB'AãNB'BéNC'OôËúËïNC'Q ÌÌïNõNC'V%Ì0ÌïN®E'Y´ËHÌSÌûNÌËE']ÀËkÌvÌûNØËE'c´ËŽÌžÌïN¨Ë[F'm²ÌÂÌïN´Ë¨ËE'q¨ËÚÌàÌûNF'ôÌÍïN´ËéNF'…Í#ÍïN´Ë _TpóœËQ7tÍ[Q:Ø[Q;Ø[Q?pP[Q@Ø8®KKJÅÏfJÈÝGJо¤JÑÔ¤JÒɤJÔÑÍ×ÍùpnJØèÍóÍùpÿpJå¦Í ÎÎ qJé³Í+Î1Î qJíqJÎPÎùpJô~ÍiÎtÎùp®JùqΓÎùpJ~ͬηÎùp®J¦ÍÐÎÛÎ q™ÍJ qôÎÿÎùp™ÍJ ~ÍÏ#Ï q™ÍJq<ÏGÏùp™ÍJ~Í`ÏkÏ q™ÍJÿp„ÏŠÏ q8ÝG8'ŽJżÑfJÈHJÐØÇJÑîÇJÒãÇJÔðÏöϵsnJØÐеs»sJåÅÏ+Ð1ÐÆsJéÒÏJÐPÐÆsJíÌsiÐoеsJôψГеs®JùÌs¬Ð²ÐµsJÏËÐÖеs®JÅÏïÐúÐÆs¸ÏJ ÌsÑѵs¸ÏJ Ï7ÑBÑÆs¸ÏJÌs[Ñfѵs¸ÏJÏÑŠÑÆs¸ÏJ»s£Ñ©ÑÆs8H8'Ž~ÍÏQ7Ò[Q:ùz[Q;ùz[Q?pP[Q@Ø8;RGÉÝ\RGÙ}RGä2}RGåG}RGæf}RGè…}RGéŸ}UdivGÖÝ\WÒ4U4U;':èÓB'=btB'?¹}B'@¿}B'AÊ}B'BÐ}C'O¯ÒµÒÖ}C'QÅÒÐÒÖ}Ü}C'VàÒëÒÖ}®E'YoÒÓÓâ}‡ÒE']{Ò&Ó1Óâ}“ÒE'coÒIÓYÓÖ}cÒ[F'mmÓ}ÓÖ}oÒcÒE'qcÒ•Ó›Óâ}F'¯Ó¿ÓÖ}oÒÐ}F'…ÓÓÞÓÖ}oÒ _Tp[WÒR_þÔR¬ ÉR­ÉR¯$ÉR°0ÉR±ÉbRµùÓNÔô}%ÔTR¸mÔô}ùÓ%ÔTR¿‡Ôô}ùÓbRÂ%Ô Ôî}bRÅî}¹Ôî}TRÇÓÔô}ô}RÏôÔRÐ‘É _Tp[8íÈJÅ×fJȹ}JÐâÕJÑøÕJÒíÕJÔQÕWÕ}~nJØhÕsÕ}~ƒ~Jå&ՌՒՎ~Jé3Õ«Õ±ÕŽ~Jí”~ÊÕÐÕ}~JôþÔéÕôÕ}~®Jù”~ ÖÖ}~JþÔ,Ö7Ö}~®J&ÕPÖ[ÖŽ~ÕJ ”~tÖÖ}~ÕJ þÔ˜Ö£ÖŽ~ÕJ”~¼ÖÇÖ}~ÕJþÔàÖëÖŽ~ÕJƒ~× ×Ž~8¹}8çËJÅ<ÙfJÈ¿}JÐÕJÑ3ÕJÒ(ÕJÔp×v×H~nJ؇ג×H~N~JåE׫ױ×Y~JéR×Ê×Ð×Y~Jí_~é×ï×H~JôרØH~®Jù_~,Ø2ØH~J×KØVØH~®JE×oØzØY~8×J _~“ØžØH~8×J ×·ØÂØY~8×J_~ÛØæØH~8×J×ÿØ ÙY~8×JN~#Ù)ÙY~8¿}8çË×þÔR_WÚR¬mvR­yvR¯…vR°‘vR±avbRµRÙ§Ùš~~ÙTR¸ÆÙš~RÙ~ÙTR¿àÙš~RÙbRÂ~ÙùÙÝNbRÅÝNÚÝNTRÇ,Úš~š~RÏMÚRÐòv _Tp§8NvJÅvÜfJÈnUJÐCâJÑYâJÒNâJÔªÚ°Ú#nJØÁÚÌÚ#)JåÚåÚëÚ4JéŒÚÛ Û4Jí:#Û)Û#JôWÚBÛMÛ#®Jù:fÛlÛ#JWÚ…ÛÛ#®JÚ©Û´Û4rÚJ :ÍÛØÛ#rÚJ WÚñÛüÛ4rÚJ:Ü Ü#rÚJWÚ9ÜDÜ4rÚJ)]ÜcÜ48nU8HØJÅ•ÞfJÈÝJÐ~áJÑ”áJÒ‰áJÔÉÜÏÜî~nJØàÜëÜî~ô~JåžÜÝ Ýÿ~Jé«Ü#Ý)Ýÿ~JíBÝHÝî~JôvÜaÝlÝî~®Jù…Ý‹Ýî~JvܤݯÝî~®JžÜÈÝÓÝÿ~‘ÜJ ìÝ÷Ýî~‘ÜJ vÜÞÞÿ~‘ÜJ4Þ?Þî~‘ÜJvÜXÞcÞÿ~‘ÜJô~|Þ‚Þÿ~8Ý8HØvÜWÚ;':0àB'=btB'?@B'@FB'AQB'BWC'O÷ÞýÞ]C'Q ßß]cC'V(ß3ß]®E'Y·ÞKßVßiÏÞE']ÃÞnßyßiÛÞE'c·Þ‘ß¡ß]«Þ[F'mµßÅß]·Þ«ÞE'q«ÞÝßãßiF'÷ßà]·ÞWF'…à&à]·Þ _Tp)ŸÞR_FáR¬âR­™âR¯¥âR°±âR±âbRµAà–à{màTR¸µà{AàmàTR¿Ïà{AàbRÂmàèàubRÅuáuTRÇá{{RÏ<áRÐã _Tp)8nâJÅeãfJÈ@JÐcïJÑyïJÒnïJÔ™áŸá€nJذá»á€ €JånáÔáÚá€Jé{áóáùá€Jí€ââ€JôFá1â<‮Jù€Uâ[â€JFátâ‮Jná˜â£â€aáJ €¼âÇâ€aáJ Fáàâëâ€aáJ€ãã€aáJFá(ã3ã€aáJ €LãRã€8@8håJÅ„åfJÈFJОîJÑ´îJÒ©îJÔ¸ã¾ãÏnJØÏãÚãÏÕJåãóãùãàJéšãääàJíæ1ä7äÏJôeãPä[äÏ®JùætäzäÏJeã“äžäÏ®Jã·äÂäà€ãJ æÛäæäÏ€ãJ eãÿä åà€ãJæ#å.åÏ€ãJeãGåRåà€ãJÕkåqåà8F8håeãFá;':çB'=btB'?!€B'@ÒB'A'€B'B-€C'Oæåìå3€C'Qüåæ3€9€C'Væ"æ3€®E'Y¦å:æEæ?€¾åE']²å]æhæ?€ÊåE'c¦å€ææ3€šå[F'm¤æ´æ3€¦åšåE'qšåÌæÒæ?€F'ææöæ3€¦å-€F'… çç3€¦å _Tp®ŽåR_5èR¬­ïR­¹ïR¯ÅïR°ÑïR±¡ïbRµ0ç…çQ€\çTR¸¤çQ€0ç\çTR¿¾çQ€0çbRÂ\ç×çK€bRÅK€ðçK€TRÇ èQ€Q€RÏ+èRÐ2ð _Tp®8ŽïJÅTêfJÈ!€JЃüJÑ™üJÒŽüJÔˆèŽèÚ€nJØŸèªèÚ€à€Jå]èÃèÉèë€Jéjèâèèèë€Jíñ€ééÚ€Jô5è é+éÚ€®Jùñ€DéJéÚ€J5ècénéÚ€®J]è‡é’éë€PèJ ñ€«é¶éÚ€PèJ 5èÏéÚéë€PèJñ€óéþéÚ€PèJ5èê"êë€PèJà€;êAêë€8!€8ˆòJÅsìfJÈÒJоûJÑÔûJÒÉûJÔ§ê­ê¥€nJؾêÉꥀ«€Jå|êâêèê¶€Jé‰êëë¶€Jí¼€ ë&륀JôTê?ëJ륀®Jù¼€cëi륀JTê‚ë륀®J|ê¦ë±ë¶€oêJ ¼€ÊëÕ륀oêJ Têîëùë¶€oêJ¼€ì쥀oêJTê6ìAì¶€oêJ«€Zì`ì¶€8Ò8ˆòTê5è;':îB'=btB'?\tB'@÷€B'Aý€B'BC'OÕìÛì C'Qëìöì C'Víí ®E'Y•ì)í4í­ìE']¡ìLíWí¹ìE'c•ìoíí ‰ì[F'm“í£í •ì‰ìE'q‰ì»íÁíF'Õíåí •ìF'…ùíî •ì _Tp;}ìR_$ïR¬ÍüR­ÙüR¯åüR°ñüR±ÁübRµîtî'KîTR¸“î'îKîTR¿­î'îbRÂKîÆî!bRÅ!ßî!TRÇùî''RÏïRÐRý _Tp;8®üJÅCñfJÈ\tJУ Jѹ JÒ® JÔwï}ï°nJØŽï™ï°¶JåLï²ï¸ïÁJéYïÑï×ïÁJíÇðïöï°Jô$ïðð°®JùÇ3ð9ð°J$ïRð]ð°®JLïvððÁ?ïJ Çšð¥ð°?ïJ $ï¾ðÉðÁ?ïJÇâðíð°?ïJ$ïññÁ?ïJ¶*ñ0ñÁ8\t8¨ÿJÅbófJÈ÷€JÐÞJÑôJÒéJÔ–ñœñ{nJØ­ñ¸ñ{JåkñÑñ×ñŒJéxñðñöñŒJí’òò{JôCñ.ò9ò{®Jù’RòXò{JCñqò|ò{®Jkñ•ò òŒ^ñJ ’¹òÄò{^ñJ CñÝòèòŒ^ñJ’ó ó{^ñJCñ%ó0óŒ^ñJIóOóŒ8÷€8¨ÿCñ$ï;':ýôB'=btB'?btB'@ÍB'AÓB'BÙC'OÄóÊóßC'QÚóåóßåC'Võóôß®E'Y„óô#ôëœóE']ó;ôFôë¨óE'c„ó^ônôßxó[F'm‚ô’ôß„óxóE'qxóªô°ôëF'ÄôÔôß„óÙF'…èôóôß„ó _TpMlóR_öR¬í R­ù R¯ R° R±á bRµõcõý:õTR¸‚õýõ:õTR¿œõýõbRÂ:õµõ÷bRÅ÷Îõ÷TRÇèõýýRÏ öRÐr  _TpM8Î JÅ2øfJÈbtJÐÃJÑÙJÒÎJÔfölö†‚nJØ}öˆö†‚Œ‚Jå;ö¡ö§ö—‚JéHöÀöÆö—‚Jí‚ßöåö†‚Jôöþö ÷†‚®Jù‚"÷(÷†‚JöA÷L÷†‚®J;öe÷p÷—‚.öJ ‚‰÷”÷†‚.öJ ö­÷¸÷—‚.öJ‚Ñ÷Ü÷†‚.öJöõ÷ø—‚.öJŒ‚øø—‚8bt8È JÅQúfJÈÍJÐþJÑJÒ JÔ…ø‹øQ‚nJØœø§øQ‚W‚JåZøÀøÆøb‚Jégøßøåøb‚Jíh‚þøùQ‚Jô2øù(ùQ‚®Jùh‚AùGùQ‚J2ø`ùkùQ‚®JZø„ùùb‚MøJ h‚¨ù³ùQ‚MøJ 2øÌù×ùb‚MøJh‚ðùûùQ‚MøJ2øúúb‚MøJW‚8ú>úb‚8Í8È 2øö;':ìûB'=btB'?ttB'@£‚B'A®‚B'B´‚C'O³ú¹úº‚C'QÉúÔúº‚À‚C'Väúïúº‚®E'YsúûûÆ‚‹úE']ú*û5ûÆ‚—úE'csúMû]ûº‚gú[F'mqûûº‚súgúE'qgú™ûŸûÆ‚F'³ûÃûº‚sú´‚F'…×ûâûº‚sú _Tp¢U[úR_ýR¬ R­R¯%R°1R±bRµýûRüØ‚)üTR¸qüØ‚ýû)üTR¿‹üØ‚ýûbRÂ)ü¤üÒ‚bRÅÒ‚½üÒ‚TRÇ×ü؂؂RÏøüRÐ’ _Tp¢U8îJÅ!ÿfJÈttJÐã#JÑù#JÒî#JÔUý[ýaƒnJØlýwýaƒgƒJå*ýý–ýrƒJé7ý¯ýµýrƒJíxƒÎýÔýaƒJôýíýøýaƒ®JùxƒþþaƒJý0þ;þaƒ®J*ýTþ_þrƒýJ xƒxþƒþaƒýJ ýœþ§þrƒýJxƒÀþËþaƒýJýäþïþrƒýJgƒÿÿrƒ8tt8èJÅ@fJÈ£‚JÐ#JÑ4#JÒ)#JÔtÿzÿ,ƒnJØ‹ÿ–ÿ,ƒ2ƒJåIÿ¯ÿµÿ=ƒJéVÿÎÿÔÿ=ƒJíCƒíÿóÿ,ƒJô!ÿ ,ƒ®JùCƒ06,ƒJ!ÿOZ,ƒ®JIÿs~=ƒ<ÿJ Cƒ—¢,ƒ<ÿJ !ÿ»Æ=ƒ<ÿJCƒßê,ƒ<ÿJ!ÿ=ƒ<ÿJ2ƒ'-=ƒ8£‚8è!ÿý;':ÛB'=btB'?~ƒB'@„ƒB'AƒB'B•ƒC'O¢¨›ƒC'Q¸Ã›ƒ¡ƒC'VÓÞ›ƒ®E'Ybö§ƒzE']n$§ƒ†E'cb<L›ƒV[F'm`p›ƒbVE'qVˆŽ§ƒF'¢²›ƒb•ƒF'…ÆÑ›ƒb _TpEJR_ñR¬-$R­9$R¯E$R°Q$R±!$bRµìA¹ƒTR¸`¹ƒìTR¿z¹ƒìbR“³ƒbRųƒ¬³ƒTRÇÆ¹ƒ¹ƒRÏçRв$ _TpE8$JÅfJÈ~ƒJÐ1JÑ1JÒ1JÔDJ\„nJØ[f\„b„Jå…m„Jé&ž¤m„Jís„½Ã\„JôñÜç\„®Jùs„\„Jñ*\„®JCNm„ J s„gr\„ J ñ‹–m„ Js„¯º\„ JñÓÞm„ Jb„÷ým„8~ƒ8'JÅ/fJÈ„ƒJÐ>0JÑT0JÒI0JÔci'„nJØz…'„-„Jå8ž¤8„JéE½Ã8„Jí>„Üâ'„Jôû'„®Jù>„%'„J>I'„®J8bm8„+J >„†‘'„+J ªµ8„+J>„ÎÙ'„+Jòý8„+J-„8„8„ƒ8'ñQ7{[Q:(q[Q;(q[Q?pP[Q@Ø8MQ7½[Q:ã[Q;ã[Q?pP[Q@Ø8§Q7ÿ[Q:L[Q;L[Q?pP[Q@Ø8);': B'=btB'?tB'@PsB'A5tB'B5C'OW ] ù„C'Qm x ù„ÿ„C'Vˆ “ ù„®E'Y « ¶ …/ E']# Î Ù …; E'c ñ  ù„ [F'm % ù„  E'q = C …F'W g ù„ 5F'…{ † ù„  _Tp@ÿR_¦ R¬5R­©5R¯µ5R°Á5R±‘5bRµ¡ ö 4ŒÍ TR¸ 4Œ¡ Í TR¿/ 4Œ¡ bRÂÍ H …bRÅ…a …TRÇ{ 4Œ4ŒRÏœ RÐ"6 _Tp@8~5JÅÅ fJÈtJÐÞBJÑôBJÒéBJÔù ÿ ¸ŒnJØ  ¸Œ¾ŒJåÎ 4 : ÉŒJéÛ S Y ÉŒJíÏŒr x ¸ŒJô¦ ‘ œ ¸Œ®JùÏŒµ » ¸ŒJ¦ Ô ß ¸Œ®JÎ ø  ÉŒÁ J ÏŒ ' ¸ŒÁ J ¦ @ K ÉŒÁ JÏŒd o ¸ŒÁ J¦ ˆ “ ÉŒÁ J¾Œ¬ ² ÉŒ8t8ã8JÅäfJÈPsJÐBJÑ/BJÒ$BJÔˆŒnJØ/:ˆŒŽŒJåí SY”ŒJéú rx”ŒJ회‘—ˆŒJôÅ °»ˆŒ®JùšŒÔÚˆŒJÅ óþˆŒ®Jí "”Œà J šŒ;FˆŒà J Å _j”Œà JšŒƒŽˆŒà JÅ §²”Œà JŽŒËÑ”Œ8Ps8ã8Å ¦ ;':B'=btB'?áŒB'@;B'AóŒB'BùŒC'OFLAC'Q\gAGC'Vw‚A®E'Yš¥ME']½ÈM*E'càðAú[F'mAúE'qú,2MF'FVAùŒF'…juA _Tp Cî;':B'=btB'?#B'@B'A_B'BeC'OÜâkC'QòýkqC'V k®E'Yœ0;w´E']¨S^wÀE'cœv†k[F'mšªkœE'qÂÈwF'ÜìkœeF'… kœ _Tp©„S5NS6Fg_8F8©;':ßB'=btB'?/’B'@}’B'AA’B'BG’C'O¦¬ƒ’C'Q¼Çƒ’‰’C'V×⃒®E'Yfú’~E']r(’ŠE'cf@Pƒ’Z[F'mdtƒ’fZE'qZŒ’’F'¦¶ƒ’fG’F'…ÊÕƒ’f _TpFN;':uB'=btB'?e’B'@_’B'A¡’B'B§’C'O<B­’C'QR]­’³’C'Vmx­’®E'Yü›¹’E']³¾¹’ E'cüÖæ­’ð[F'mú ­’üðE'qð"(¹’F'<L­’ü§’F'…`k­’ü _Tp®äS5®S6Ig_8I8,¯S9âS:/’g_8}’8/’S9S:A’g_8G’8A’S9JS:áŒg_8;8áŒS9~S:óŒg_8ùŒ8óŒ;':B'=btB'?‡èB'@èB'A˜èB'BžèC'OÖܤèC'Qì÷¤èªèC'V¤è®E'Y–*5°è®E']¢MX°èºE'c–p€¤èŠ[F'm”¤¤è–ŠE'qŠ¼Â°èF'Öæ¤è–žèF'…ú¤è– _Tp|è~R_%R¬JR­"JR¯.JR°:JR± JbRµ uÂèLTR¸”Âè LTR¿®Âè bRÂLǼèbRżèà¼èTRÇúÂèÂèRÏRЛJ _Tp|è8÷IJÅDfJȇèJÐìVJÑWJÒ÷VJÔx~KénJØšKéQéJåM³¹\éJéZÒØ\éJíbéñ÷KéJô%Ké®Jùbé4:KéJ%S^Ké®JMw‚\é@J b雦Ké@J %¿Ê\é@JbéãîKé@J%\é@JQé+1\é8‡è8ñLJÅcfJÈèJÐ'VJÑ=VJÒ2VJÔ—énJØ®¹ééJålÒØ'éJéyñ÷'éJí-ééJôD/:é®Jù-éSYéJDr}é®Jl–¡'é_J -éºÅé_J DÞé'é_J-é é_JD&1'é_JéJP'é8è8ñLD%;':þB'=btB'?aB'@gB'ArB'BxC'OÅË~C'QÛæ~„C'Vö~®E'Y…$ŠE']‘<GŠ©E'c…_o~y[F'mƒ“~…yE'qy«±ŠF'ÅÕ~…xF'…éô~… _TpOmR_!R¬6WR­BWR¯NWR°ZWR±*WbRµ d œ; TR¸ƒ œ ; TR¿ œ bRÂ; ¶ –bRÅ–Ï –TRÇé œœRÏ !RлW _TpO8WJÅ3#fJÈaJÐ dJÑ"dJÒdJÔg!m!ÍnJØ~!‰!ÍÓJå7Ÿü5J ¥W7b7Žü5J á5{7†7Ÿü5J¥Ÿ7ª7Žü5Já5Ã7Î7Ÿü5J”ç7í7Ÿ8Ä8qJÅ:fJÈÐJЧŠJѽŠJÒ²ŠJÔS8Y8YnJØj8u8Y_Jå(8Ž8”8jJé58­8³8jJípÌ8Ò8YJô8ë8ö8Y®Jùp99YJ8.999Y®J(8R9]9j8J pv99Y8J 8š9¥9j8Jp¾9É9Y8J8â9í9j8J_: :j8Ð8q8á5;':º;B'=btB'?JB'@PB'A[B'BaC'O:‡:gC'Q—:¢:gmC'V²:½:g®E'YA:Õ:à:sY:E']M:ø:;se:E'cA:;+;g5:[F'm?;O;gA:5:E'q5:g;m;sF';‘;gA:aF'…¥;°;gA: _Tpm ):;':P=B'=btB'?…B'@‹B'A‘B'B—C'O<<C'Q-<8<£C'VH<S<®E'Y×;k<v<©ï;E']ã;Ž<™<©û;E'c×;±<Á<Ë;[F'mÕ<å<×;Ë;E'qË;ý<=©F'='=×;—F'…;=F=×; _Tp6”¿;;':æ>B'=btB'?8!B'@>!B'AI!B'BO!C'O­=³=U!C'QÃ=Î=U![!C'VÞ=é=U!®E'Ym=> >a!…=E']y=$>/>a!‘=E'cm=G>W>U!a=[F'mk>{>U!m=a=E'qa=“>™>a!F'­>½>U!m=O!F'…Ñ>Ü>U!m= _Tp-!U=R_ü?R¬"šR­.šR¯:šR°FšR±šbRµ÷>L?s!#?TR¸k?s!÷>#?TR¿…?s!÷>bRÂ#?ž?m!bRÅm!·?m!TRÇÑ?s!s!RÏò?RЧš _Tp-!8šJÅBfJÈ8!JÐø¦JѧJÒ§JÔO@U@ü!nJØf@q@ü!"Jå$@Š@@ "Jé1@©@¯@ "Jí"È@Î@ü!Jôü?ç@ò@ü!®Jù" AAü!Jü?*A5Aü!®J$@NAYA "@J "rA}Aü!@J ü?–A¡A "@J"ºAÅAü!@Jü?ÞAéA "@J"BB "88!8ýœJÅ:DfJÈ>!JÐ3¦JÑI¦JÒ>¦JÔnBtBÇ!nJØ…BBÇ!Í!JåCB©B¯BØ!JéPBÈBÎBØ!JíÞ!çBíBÇ!JôBCCÇ!®JùÞ!*C0CÇ!JBICTCÇ!®JCBmCxCØ!6BJ Þ!‘CœCÇ!6BJ BµCÀCØ!6BJÞ!ÙCäCÇ!6BJBýCDØ!6BJÍ!!D'DØ!8>!8ýœBü?;':ÕEB'=btB'?•B'@Ü#B'Aç#B'Bí#C'OœD¢Dó#C'Q²D½Dó#ù#C'VÍDØDó#®E'Y\DðDûDÿ#tDE']hDEEÿ#€DE'c\D6EFEó#PD[F'mZEjEó#\DPDE'qPD‚EˆEÿ#F'œE¬Eó#\Dí#F'…ÀEËEó#\D _Tp#DD;':kGB'=btB'?K•B'@$B'A$B'B"$C'O2F8F($C'QHFSF($.$C'VcFnF($®E'YòE†F‘F4$ FE']þE©F´F4$FE'còEÌFÜF($æE[F'mðFG($òEæEE'qæEGG4$F'2GBG($òE"$F'…VGaG($òE _Tpe’ÚE3O7‹GxO8åpy0aG¡G®y0éG·G·GÔy0ÝGÝGÝG®·Góy0÷GþGó·Gy0 ®HH·GHóy0K®?H·G®y0R®[H·GH)y0{®wH·GH)y0êGH·Gz0ðGy0xB¹HÝB¹HÀy0mBäHÝGÝB¹Hy0i®úHúHIÀy0˜B*IÝG*IB¹HÝy0øGKIó·Gy0þGaIóy0\®‚IÝGBH)y0…®žIHH)y0G¹IG·Gy0d®ÙI·GHÙIy0±®ÿI·GHÙIy0q®$JÝGBHÙIy0½®DJHHÙIy0l®_JHÙIy0¹®zJHÙIy0rBšJnUó¹H{0›ÝG´JÝGH{0£®ÎJHH{0À®èJHH{0“ÝGKÝGH{0üBKHHy0WBAKÝGBHAKGK]y0BbKH{0žÝGKÝGHB{0¦® KHHB{0–ÝG¿KÝGHBy0žBäKnUäKB¹HHy0BLHHy0¢U LH LÝGy0É›UALH Ly0ÝGaLÝGH Ly0Ô;LH L®y0ÙM¡LH L®{0ÄBÀLÝGHBy0e®ÖLGy0E®öLHHBy0IÝGMÝGHBy0NÝG6MÝGHBy0RÝGVMÝGóBy0Y®mMH)y0‚®„MH)b0àH¢MHó$0HÁMHHb0êHßMHó$0HþMHH$0<H"NHóBy0ËqG=NH Ly0ã4U]NH L®y0ê;U}NH L®¦rÖrÖr¦rýszt­t­tztÖu§ãÊ—Ë—ËNvwóHœË-Í-Í ww`T5:PT9nUT:nUT@nUTFnUTGnU THnU(TInU0TJnU8TKnU@TLnUHTM§PTN§QTP§RTR§STT§TTV§UT]§VT^§WTa§XTc§YTe§ZTg§[Tn§\To§]{T|nUTP®Ý|T_P OU ®_³w"ާw x x"ާwMªP}÷3Ž¢¤'Ž  ¢¤'Žw¤VF§¤VLàPVaëP;W1aBWUW® QCW5Q;Q1aCW"KQVQ1a§CW#fQqQ1aýTCW'QŒQ1a)CW'œQ§Q1aËCW'·QÂQ1a®CW'ÒQÝQ1a>CW'íQøQ1a;CW'RR1aMCW'#R.R1a4UCW'>RIR1a;UCW'YRdR1aóCW*tRR1a7aEW- Q—RRâpEW=_µR»RâpEWB_ÓRÞRâpnUEWW§öRüRâpEWXýTSSâpEW\)2S8SâpEW\ËPSVSâpEW\®nStSâpEW\>ŒS’SâpEW\;ªS°SâpEW\MÈSÎSâpEW\4UæSìSâpEW\;UT TâpEW\ó"T(TâpEWd_@TFTâpEWe_^TdTâpEWi_|T‡Tâp_EWlípŸTªT1aópEWmípÂTÍT1a7aEWnípåTðT1a§EWoípUU1aýTEWsíp+U6U1a)EWsípNUYU1aËEWsípqU|U1a®EWsíp”UŸU1a>EWsíp·UÂU1a;EWsípÚUåU1aMEWsípýUV1a4UEWsíp V+V1a;UEWsípCVNV1aóEW_fVqVâpópEW_‰V”Vâp§EW_¬V·VâpýTEW_ÏVÚVâp)EW_òVýVâpËEW_W Wâp®EW_8WCWâp>EW_[WfWâp;EW_~W‰WâpMEW_¡W¬Wâp4UEW_ÄWÏWâp;UEW_çWòWâpóEW_ XXâpópEW_-X8Xâp§EW_PX[XâpýTEW_sX~Xâp)EW_–X¡XâpËEW_¹XÄXâp®EW_ÜXçXâp>EW_ÿX Yâp;EW_"Y-YâpMEW_EYPYâp4UEW_hYsYâp;UEW_‹Y–YâpóEW_®Y¹YâpópEW_ÑYÜYâp§EW_ôYÿYâpýTEW_Z"Zâp)EW_:ZEZâpËEW_]ZhZâp®EW_€Z‹Zâp>EW_£Z®Zâp;EW_ÆZÑZâpMEW_éZôZâp4UEW_ [[âp;UEW_/[:[âpóEW_R[][âpópEW_u[€[âp§EW_˜[£[âpýTEW_»[Æ[âp)EW_Þ[é[âpËEW_\ \âp®EW_$\/\âp>EW_G\R\âp;EW_j\u\âpMEW_\˜\âp4UEW_°\»\âp;UEW_Ó\Þ\âpóEW_ö\]âpópEW_]$]âp§EW_<]G]âpýTEW__]j]âp)EW_‚]]âpËEW_¥]°]âp®EW_È]Ó]âp>EW_ë]ö]âp;EW_^^âpMEW_1^<^âp4UEW_T^_^âp;UEW_w^‚^âpóEW_š^¥^âpópEW_½^È^âp§EW_à^ë^âpýTEW___âp)EW_&_1_âpËEW_I_T_âp®EW_l_w_âp>EW__š_âp;EW_²_½_âpMEW_Õ_à_âp4UEW_ø_`âp;UEW_`&`âpóEW‡®>`I`âpópEWˆ®a`l`âp§EW‰®„``âpýTEWŠ®§`²`âpóbW QË`§bWœ§ä` QbW© Qý`§bWª§a Q~W«_ QnUQ=aBa;W¶âpW¹¿ŽWNa5W¿ua€aqNaDWÌBašaNaEWÐ Q²a¸aqEWÖ_ÐaÖaqEW×_îaùaqnUEWÝ"qbbqópEWà"q4b?bq7aEWå"qWbbbq§EWå"qzb…bqýTEWå"qb¨bq)EWå"qÀbËbqËEWå"qãbîbq®EWå"qccq>EWå"q)c4cq;EWå"qLcWcqMEWå"qoczcq4UEWå"q’ccq;UEWå"qµcÀcqóEWë§ØcÞcqEWëýTöcücqEWë)ddqEWëË2d8dqEWë®PdVdqEWë>ndtdqEWë;Œd’dqEWëMªd°dqEWë4UÈdÎdqEWë;UædìdqEWëóe eqEWï_"e(eqEWð_@eFeqEWñ_^eieq_EWü_eŒeq7aEWü_¤e¯eqópEWü_ÇeÒeq§EWü_êeõeqýTEWü_ ffq)EWü_0f;fqËEWü_Sf^fq®EWü_vffq>EWü_™f¤fq;EWü_¼fÇfqMEWü_ßfêfq4UEWü_g gq;UEWü_%g0gqóEWü_HgSgq7aEWü_kgvgqópEWü_Žg™gq§EWü_±g¼gqýTEWü_Ôgßgq)EWü_÷ghqËEWü_h%hq®EWü_=hHhq>EWü_`hkhq;EWü_ƒhŽhqMEWü_¦h±hq4UEWü_ÉhÔhq;UEWü_ìh÷hqóEWü_iiq7aEWü_2i=iqópEWü_Ui`iq§EWü_xiƒiqýTEWü_›i¦iq)EWü_¾iÉiqËEWü_áiìiq®EWü_jjq>EWü_'j2jq;EWü_JjUjqMEWü_mjxjq4UEWü_j›jq;UEWü_³j¾jqóEWü_Öjájq7aEWü_ùjkqópEWü_k'kq§EWü_?kJkqýTEWü_bkmkq)EWü_…kkqËEWü_¨k³kq®EWü_ËkÖkq>EWü_îkùkq;EWü_llqMEWü_4l?lq4UEWü_Wlblq;UEWü_zl…lqóEWü_l¨lq7aEWü_ÀlËlqópEWü_ãlîlq§EWü_mmqýTEWü_)m4mq)EWü_LmWmqËEWü_omzmq®EWü_’mmq>EWü_µmÀmq;EWü_ØmãmqMEWü_ûmnq4UEWü_n)nq;UEWü_AnLnqóEWü_dnonq7aEWü_‡n’nqópEWü_ªnµnq§EWü_ÍnØnqýTEWü_ðnûnq)EWü_ooqËEWü_6oAoq®EWü_Yodoq>EWü_|o‡oq;EWü_ŸoªoqMEWü_ÂoÍoq4UEWü_åoðoq;UEWü_ppqóW®,p7pq7aW®Pp[pqópW®tppq§W®˜p£pqýTW®¼pÇpqó`W QÛpqèpQQèp~ÍqÝG¼Ñ~ÍBa=aBaM;(ˆKsœœq À€€€€€€àûaä+_åûaêKsëVs C‹èqóqasÝCrrasHCr)ras5C‘9rDras:gC“Tr_rasgsC•orzrasrsEÆ9q’rr}s>EÊ@µr»r}sEÛHÓrÙr}s]ÞHðröras]ßH ssas]íˆs*s5sasŽs*?sas®Ps;[s@g-qms+_xsûaƒs-q-qƒsgfŸsú¼Ç°sàPÏÁsHÁÑÏEgÞsýTDMMDI@ tèINNÅ f B@AtFtKBWtöP;M4U;U¢Už ù ‡ºTºT‡z ¿T¿Tz *lƒl>l»lmÏlnUX'ëtuou€r%;u"u+;"uñt;0X)y‚X^\vX^yAX^ÅyAX^ÐyBX^ÖyBX^4uCX^uŸuáyÅyÐyCX^¯uµuáyEX^guÍuÓuçyEX^íyëuñuáyEX^v vváy®suEX^_1vþv wùy®EX@"u!w'wÖyEXB_?wEwÖyEXDt]wcwÖyEXEt{wwÖyEXGt™wŸwÖyEXIÖy·w½wÖyEXJÖyÕwÛwÖyEXK®ówùwÖyEXMàtxxÖyGXOÖyEXPÖy?xExÖyDXQùy_x5EXV_wx‚xÖyÖyGX^4uGX^4uFXt¶x¼xùyFXuÐxÖxùy5XwåxðxùyÿyƒXwzyùyÿy; YŸÅyH;…CY£3yHyä‰;E͉CY¦Xymyä‰5E͉EYª"u…y‹yê‰FY¬Ÿyªyä‰"uJY¯ä‰¾yê‰BuKËyÜy(u4u\vsuv(uÜy(u„ñ zùz… ,®CôEzKz6Eö®cziz6Fø}zƒz6Fù—zz6†þ z³z¾z6®ÎzÙz6"6`(6íz6"6;y7®{{{‡{7¢U1{Ý{7“®F{Ý{7–;[{Ýy7óE…{[[BBè\ˆdiv7}\¡{®®y74nU·{Ýy7­\Ò{;;y7_®í{ÝBy7jB |ÝGÝBy7b®-|ÝGÝB‰7ýO|EBBè\z7v®‰7xn|>{7¤¢Uˆ|ÝÚt{7·;§|ÝÚt®{7»MÆ|ÝÚt®y7Í®Ü|Ýy7mBü|nUHBy7f®}nUóy7Ý\2}4U4U{74UG}Ý{7Ñ4Uf}ÝÚt®{7Ö;U…}ÝÚt®{7¬›UŸ}ÝÚt{7¯qG¹}ÝÚt[Å}[[Å}WÒèÓèÓíȧÉíȸÉCʸÉHʬÉâËðÊç˰ÌÛÌ ÕçË Õ×T~¿}<Ù×ÔÒ¹Õ¹ÕÔÒþÔ‰~¹}AÙþÔNvÖ¤ÖÖ©Ö ÖCØQ×HØÙ<ÙmáHØmávÜú~Ý•ÞvÜ5ßââ5ßWÚ/nUšÞWÚ)L))LŸÞ0à0ànâ(ãnâ9ãÄã9ãÉã-ãcåqähå1æ\æîhåîeãÛF„åeãUì:ï:ïUìFá€@‰åFᮮ؎åççŽïHðŽïYðäðYðéðMðƒò‘ñˆòQó|ó­ûˆò­ûTê±€ÒsìTêuùZüZüuù5èæ€!€xì5èùz;ùz}ìîî®ühý®üyýþyý þmý£ÿ±þ¨ÿqœÍ¨ÿÍCñ‡÷€bóCñ•z z •$ï¼\tgó$ï(qM(qlóýôýôÎ ˆ Î ™ $ ™ )  à Ñ È ‘ ¼ íÈ í2ø]‚ÍQú2øµššµö’‚btVúö©‚¢U¢U©‚[úìûìûî¨î¹D¹I­ãñè±Ü #è #!ÿ8ƒ£‚@!ÿÕ º#º#Õ ýmƒttEýEŠƒEEŠƒJÛÛ$È$$Ù$d%Ù$i%Í$'&'Ñ'ü'-0'-0„-®'„EE3„„ƒ/õ-Ú0Ú0õ-ñh„~ƒ4ñS2{8¯®™„Gô\{8ÝG³„Gÿ\{8Úÿ\È„Ý{8«ô\Ý„ÝÊ4Ê4"uñtx5ÿ  ~586ŠY!;… Y#; Y$t; Y+†AYA†AYD…AYGEAYN͉Y.;…CY0–…«…†;E͉CY2»…Ð…†5E͉CY4à…ë…†®EY6;† †Ó‰EY75!†'†Ó‰EY9E?†E†Ó‰FY:Y†d††EJY=Þ‰x†Ó‰;…„(YQ…†͉… ,AY‰BAYŒBBYX;…AYî5AY’V AY•_$CYZÿ†‡͉†Y[…†‡&‡͉®FY]:‡J‡͉VBFY_^‡d‡͉FY`x‡~‡͉EYbB–‡œ‡ú5EYcB´‡º‡ú5FYe·Ù‡͉_DYg;ó‡5FYjˆˆ͉;;EFYk0ˆEˆ͉5;EEYlE]ˆmˆú5;;EYmE…ˆ•ˆú55;EYnE­ˆ½ˆ͉;;EYoEÕˆåˆ͉5;^Ytøˆ‰͉†^Yy‰!‰͉†^Y|4‰D‰͉B†^Y€W‰l‰͉B††‹Y……†ˆ‰“‰͉†5Y˜¢‰­‰͉6ƒY˜ 6Á‰͉6…†Ù‰;…{…yð‰y«¥¹¥–¦=6pPZM'‹ZO0Š6Š'‹ZPMNŠYŠ-‹5ZRMqŠ|Š-‹HZTM”ŠŸŠ-‹Ý$ZXM¹Št$Z[MÓŠÝ$Z`MíŠH$ZaM‹Ý`Zc8‹‹'‹>‹Š3‹ŠŠ3‹Zfÿ‹Zha‹g‹ÿ‹Zi_‹‹Œ55Zk_§‹·‹ŒttZn_ϋߋŒÝÝ`ZrŒó‹ÿ‹ŒD‹ ŒD‹D‹ Œ ZíS³ Zð´~5´6?7´6D7¨6Þ8ì7ã8¬9×9Bã8BÅ KsäÅ Ð?µBµBÐ?¦ ÄŒté¦ ø¦›¦ C-C$D C)D©ý¦$D«¥ ©©©ý¦Z©M©)Dî.D E©©„%EFµÙ´ýµƶo½Ù´o½ü¸–¦н÷½ü½¾S³À³ųʳ M $M4BŽ49sŽ4CŒŽ4I«Ž4pÄŽ;‰èA®íCíŽøŽó«ŽC“ó®E–_+1ùE  ŽIOóE¤ ŽgróME¨ ŽŠóE« ލ®ó5²½Èóƒ² ÜóKèÄŽÿÄŽÿÄŽ4ç);ò‘ÄŽCöR]‘C÷mx‘®FùŒ’‘Eü_ª°‘FÿÄÊ‘Úå‘ ‘`‘ù‘ ‘)‘))-©‘<©‘0G‘R‘®‘‘6c‘n‘®‘®>~‘‰‘®‘´‘`>¿‘‘®‘´‘‘‘º‘‘‘ ËM4 k#’äÎg¬ ¬F9F0GF5Gu®l¬0Gz®®l¬Ä®·®5GNßß:G,H®z®äuu1H IÑ’¾W¾{¿DÀíÆW¾íÆzÂòÆ[Ç`ÇeÇ´ƒ´ˆ´´;8 "•` y“ (Œ Œ0@m“"•®A ÅÝA Æ®A ÊÝA ÎÝA ÑtU A ÕÅ‘( "•0C ‘ä“ê“(•C ˜ú“”(•Ý®ÝÝC ¬$”/”(•.•E ±9•G”R”(•.•C ½b”m”(•®F Ü”‘”(•5UF 䥔µ”(•55E ï_͔ݔ?•5E•E ý_õ”•?•5tŒ •(•.•=“1“4•1“1“4•Ue’t±B°ý±²B°,¯ý±,¯#²ت²•²ت©²©X v=™ í=™ î1“ ð@@ zü•–B™õÝ®ÝÝ ‘H™4–D–B™5U' ŸY–i–B™5ÙI' ©~–“–B™;5ÙI' °¨–½–B™E5ÙI' ·Ò–ç–B™55ÙILog Èý–—B™ŽsLog Ó—.—B™;ŽsLog ßD—T—B™"uŽs' êi—y—B™õŽs' ôŽ—ž—B™5Žs' ü³—×B™ŽŽs_ Y×—ã—B™t)_ a÷—˜B™;t)_ k˜-˜B™Et)_ uA˜R˜B™õt)_ €f˜w˜B™5t)_ Ž‹˜œ˜B™Žt)_ â°˜ŘB™õ5ÙI_ çÙ˜é˜B™5ÙI òù˜™B™N™ òH™™'™B™N™*1™B™®õ·•·•T™·•!Ie™ „š²ŒIÒ²j™v™4 /sš        2; ú1ŸŽx þ®Žy þ® ¨š®š1Ÿ ¿šÏš1Ÿ®® 7Ÿèšóš1Ÿ=Ÿ 7Ÿ ››1Ÿ=Ÿ 7Ÿ0›;›1Ÿ® 7ŸT›_›1Ÿ® 7Ÿx›ƒ›1Ÿ> 7Ÿœ›§›1Ÿ> 7ŸÀ›Ë›1Ÿ; 7Ÿä›ï›1Ÿ; 7Ÿœœ1ŸM 7Ÿ,œ7œ1ŸM 7ŸPœ[œ1Ÿ¢U 7Ÿtœœ1Ÿ¢U' ”œŸœ1Ÿ=Ÿ' ´œ¿œ1Ÿ=Ÿ' Ԝߜ1Ÿ=Ÿ' ôœ1Ÿ®®' $1ŸHŸ' !9D1Ÿ=Ÿ' "Yd1Ÿ®' $y‰1Ÿ®®' %ž©1ŸHŸ' &¾É1Ÿ=Ÿ' 'Þé1Ÿ® *7Ÿžž1Ÿ›U›USet .(ž8ž1Ÿ®®' /MžXž1Ÿ®' 0mžxž1Ÿ® 2®‘ž—ž›  3®°ž¶ž›  5_ÏžÕž› ' 9êžõž1Ÿ=Ÿ B®ŸŸ› € C®*Ÿ› sšsšCŸsšNŸSŸ › x ®y ® !‹Ÿ‘ŸÁ¡ "¢Ÿ²ŸÁ¡®® #ßΟÁ¡¶¡ (Ç¡çŸòŸÁ¡HŸ )Ç¡   Á¡HŸ +Ç¡/ : Á¡=Ÿ ,Ç¡S ^ Á¡=Ÿ /_w } Í¡ 2 Á¡HŸCŸ ¦ª¡x ©¢Uy ª¢U ¬Ù ß ª¡ ­ð ¡ª¡¢U¢U ®¡¡ª¡HŸ ³°¡5¡@¡ª¡¶¡ ´°¡Y¡d¡ª¡¶¡ ¶°¡}¡ˆ¡ª¡=Ÿ€ ·°¡ž¡ª¡=Ÿ¡ ¡ ¼¡¡ SŸSŸNŸÁ¡KP[H†§      !"#$%&'()*+,-./0123456789:;<<=>?ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇëìíîïðñòóôõö÷ø4\ñ«§4]v8¨€€À €€À ¶ÿ^ZC¨;^j"±^S4UC^ol¨r¨‰¹C^q‚¨¨‰¹4UC^s¨­¨‰¹UUE^„¹ŨШ‰¹4UE^†¹è¨ó¨‰¹;UE^‰¹ ©©‰¹•¹E^й.©9©‰¹®E^Œ¹Q©\©‰¹;E^޹t©©‰¹>E^¹—©¢©‰¹ME^›¹º©Å©‰¹¢UE^¢Uݩ㩠¹E^¥Uû©ª ¹kAbs^©C¨ªª ¹kAbs^ª¹7ª=ª‰¹E^­4UUª[ª ¹E^°;sªyª ¹E^¹¢U‘ª—ª ¹E^ÁC¨¯ªºª ¹«¹E^ùÒªݪ‰¹«¹E^ÆC¨õª« ¹4UE^ȹ«#«‰¹4UE^̹;«A«‰¹E^ÐC¨Y«d«‰¹®E^ÔC¨|«‚« ¹E^ֹ𫠫‰¹E^ÙC¨¸«ë ¹«¹E^۹۫櫉¹«¹E^ÞC¨þ« ¬ ¹4UE^à¹!¬,¬‰¹4UE^ä¹D¬J¬‰¹E^èC¨b¬m¬‰¹®E^íC¨…¬¬ ¹®E^﹨¬³¬‰¹®E^óC¨ˬÖ¬ ¹®E^õ¹î¬ù¬‰¹®E^ùC¨­­ ¹«¹E^û¹4­?­‰¹«¹E^þC¨W­b­ ¹«¹^¹{­†­‰¹«¹^C¨Ÿ­ª­ ¹«¹^¹íέ‰¹«¹^ C¨ç­ò­ ¹«¹^ C¨ ®® ¹;^ ¹/®:®‰¹«¹^¹S®^®‰¹;^C¨w®‚® ¹«¹^C¨›®¦® ¹;^¹¿®Ê®‰¹«¹^¹ã®î®‰¹;^C¨¯¯ ¹«¹^C¨+¯6¯ ¹;^!_O¯Z¯ ¹«¹^#_s¯~¯ ¹;^%_—¯¢¯ ¹«¹^'_»¯Ư ¹;^)_߯ꯠ¹«¹^+_°° ¹;^-_'°2° ¹«¹^/_K°V° ¹;^1_o°z° ¹«¹^3_“°ž° ¹;^5_·°° ¹«¹^7_Û°æ° ¹;^=@ÿ°± ¹€^@E± ¹^W‰¹^7;U^\M±S±±¹^^d±o±±¹;U^`€±±±¹UU^r·¹©±´±±¹;U^t·¹ͱر±¹4U^w·¹ñ±ü±±¹®^y·¹² ²±¹;^{·¹9²D²±¹>^}·¹]²h²±¹M^·¹²Œ²±¹«¹^ŠU¥²«²½¹^UIJʲ½¹^‘;Uã²é²½¹^”M³³½¹^¥¢U!³'³½¹^ª"±@³K³½¹•¹^¬·¹d³o³±¹•¹^¯"±ˆ³“³½¹;U^±·¹¬³·³±¹;U^µ·¹гÖ³±¹^¹"±ï³ú³±¹®^½"±´´½¹•¹^¿·¹7´B´±¹•¹^Â"±[´f´½¹;U^Ä·¹´Š´±¹;U^È·¹£´©´±¹^Ì"±´Í´±¹®^Ñ"±æ´ñ´½¹®^Ó·¹ µµ±¹®^×"±.µ9µ½¹®^Ù·¹Rµ]µ±¹®^Ý"±vµµ½¹•¹^ß·¹šµ¥µ±¹•¹^â"±¾µɵ½¹•¹^ä·¹âµíµ±¹•¹^ç"±¶¶½¹•¹^é·¹*¶5¶±¹•¹^í"±N¶Y¶½¹•¹^ï"±r¶}¶½¹M^ñ·¹–¶¡¶±¹•¹^󷹺¶Ŷ±¹M^ö"±Þ¶é¶½¹•¹^ø"±· ·½¹M^ú·¹&·1·±¹•¹^ü·¹J·U·±¹M^ÿ"±n·y·½¹•¹^"±’··½¹M^_¶·Á·½¹•¹^_Ú·å·½¹M^ _þ· ¸½¹•¹^ _"¸-¸½¹M^ _F¸Q¸½¹•¹^_j¸u¸½¹M^_ޏ™¸½¹•¹^_²¸½¸½¹M^_ָḽ¹•¹^_ú¸¹½¹M^_¹)¹½¹•¹^_B¹M¹½¹M^!@f¹l¹½¹€^$E‚¹½¹C¨C¨›¹"±¦¹C¨¦¹"±"±›¹×¹o̺‘}×¹ý¹ºѹ5’~@×¹)º/º) ’ƒÑ[Œ×¹QºWº) ’Í_¸×¹yºº) ’ó_½×¹¡º§º) “²_À×¹ź) ;_%­»A_W¼F_(ùº»•¼¼F_.»#»•¼¼E_<¼;»A»›¼C_BQ»W»•¼C_Fg»r»•¼¦¼E_G¬¼Š»•»•¼¦¼Z_L¡»•¼®„_­»¼… ,_¼jä»ï»¼3”!3¼¼¼3C_!¼'¼¼†_­»=¼H¼¼®‘_­»e¼k¼¼•_v1­»ˆ¼¼­»̺¡¼̺¡¼̺; ?(½ QÝC BÚ¼å¼(½ÝE G_ý¼½(½.½J L_½(½.½²¼4½²¼Š`¢½Š` €½ `#(U `%qG `&{ `'¢½ `(F½ `*E `+བ/Ľ`'Ú½`';—νÔ½Ô½9½ĽýTð½ú„`3𽿅 ,j¾&¾¿3C`:6¾<¾¿†`Að½R¾]¾¿®’`H_ð½~¾‰¾÷ï÷ï‘`N𽦾±¾÷ï¨#‘`Zð½ξÞ¾÷ï®#¨#•`a_ð½û¾÷ï®#¿¨#ð½;a Àa„Ksa…ICa%K¿Q¿ ÀCa,a¿q¿ À5ûsEa=_‰¿¿ÀEaA_§¿­¿ÀEaFÝſ˿ÀEabHã¿é¿Àƒa‡Àý¿ À À¿À¿¿À;b„ÀܘTZb•›Á     ™WET ™CET™EET™MSK™MSD™AST ™ADT ™EST™EDT ™CST™CDT™MST™MDT™PST™PDT™HST™UTC bصÁbë™UK™USAbi™Jan™Feb™Mar™Apr™May™Jun™Jul™Aug™Sep™Oct ™Nov ™Dec  b¯Â™Sun™Mon™Tue™Wed™Thu™Fri™SatbÊÂbëÂb&vÃb9;b)Ã"ÃÀÜ2Àb,3Ã>ÃÀÜ;(b.ëÂYÃ;€b5;oÃÆÜëšTm(bCÖÄbEÖÄ"secbEÖÄ"minbEÖÄbEÖÄbFÖÄbGÖÄ "monbH bI®fbhëÂfbmÖÄ ›TmbLÄ#ÄÌÜ›TmbO3ÄCÄÌÜÒÜØÜbR_[ÄaÄÞÜbUiÂyÄÄÌÜ_b^“ÄžÄÌÜ®_ba²Ä½ÄÌÜ®beÏÄÌÜBbË{ÃpbƒµÁpbˆùzb‘8¨œbt$ŵÁbvµÁ(bz_QŵÁ(b}®lÅ›Á(bƒ®‡Å®(b†Â¢Å›Á(b‰_ÂÅ®›Á(bŒ®ÝÅ®(bÖÄýÅ®›Á(b”ÖÄ"ÆÂ®›Á(b›@BÆÂ¯Â(bŸ@bÆÂ¯Â(b¤@‚Æi¯Â(b¨@¢Æi¯œb¬¿Ætt(b¯_߯®µÁ(bµ&ÀÿÆ®µÁ(bº&ÀÇ®µÁžNowb¾&ÀbÂ&ÀbÆ&ÀbÎfÇlÇäÜbÓ}LjÇäÜtUb֙ǤÇäÜÒÜbصÇÀÇäÜêÜbÛÑÇÜÇäÜ¢UbÞíÇÈäÜÖÄÖÄÖÄÖÄbãÈAÈäÜÖÄ®ÖÄÖÄÖÄÖÄbûðÜZÈ`ÈäÜ&SetbðÜyÈ„ÈäÜtU&SetbðÜȨÈäÜÒÜ&SetbðÜÁÈÌÈäÜêÜ&Setb ðÜåÈðÈäÜ¢U&Setb ðÜ É#ÉäÜÖÄÖÄÖÄÖÄ&SetbðÜ<ÉeÉäÜÖÄ®ÖÄÖÄÖÄÖÄbðÜ~É„ÉäÜb!&ÀÉ£ÉöÜb'ðܼÉÇÉäÜ®b)ðÜàÉëÉäÜÂb+ðÜÊÊäÜÖÄb-ðÜ(Ê3ÊäÜÖÄb/ðÜLÊWÊäÜÖÄb1ðÜpÊ{ÊäÜÖÄb3ðܔʟÊäÜÖÄb6ðܸÊÃÊäÜtUb9ðÜÜÊçÊäÜÒÜb<ðÜË ËäÜêÜbFðÜ$Ë4ËäÜiÂÊÂbH&ÀMË]ËöÜiÂÊÂbLðÜvËËäÜiÂbM&ÀšË¥ËöÜiÂbPðܾËÉËäÜiÂbQ&ÀâËíËöÜiÂbW_Ì ÌäÜi®®b[&À9ÌSÌöÜi®®ba_lÌÌäÜi®bd&ÀšÌ¯ÌäÜi®(by&ÀÔÌ®ÖÄiÂbðÜíÌýÌäÜ®b&ÀÍ&ÍöÜ®b…ðÜ?ÍJÍäÜÖÄb†&ÀcÍnÍöÜÖÄb ¢U‡ÍÍöÜb¡¢U¦Í¬ÍöÜb¦¢UÅÍËÍöÜb§¢UäÍêÍöÜbª¢UÎ ÎöÜb½&À"Î2ÎöÜØÜ_b¾ðÜKÎ[ÎäÜØÜ_bÂ&Àt΄ÎöÜØÜ_bÃðÜέÎäÜØÜ_bÆ&ÀÆÎÑÎöÜ_bÇðÜêÎõÎäÜ_bÉ&ÀÏÏöÜ_bÊðÜ2Ï=ÏäÜ_bÌ&ÀVÏaÏöÜ_bÎðÜzÏ…ÏäÜ_bÖ®žÏ©ÏöܵÁbá_ÂÏÈÏöÜbè{ÃáÏìÏöÜØÜbìtUÐ ÐöÜbï®$Ð/ÐöÜØÜbò®HÐSÐöÜØÜbõÂlÐwÐöÜØÜbøÖÄЛÐöÜØÜbûi´пÐöÜØÜbþÖÄØÐãÐöÜØÜbÖÄüÐÑöÜØÜbÖÄ Ñ+ÑöÜØÜbÖÄDÑOÑöÜØÜb ÖÄhÑsÑöÜØÜbÖČќÑöÜÊÂØÜbÖĵÑÅÑöÜÊÂØÜb_ÞÑéÑöܵÁbðÜÒ ÒäÜMb M&Ò,ÒöÜb4_EÒPÒöÜÝb7_iÒtÒöÜÝb:_Ò˜ÒöÜÝb=_±ÒÁÒöÜÝÝbA_ÚÒêÒöÜÝÝbD_ÓÓöÜÝbG_'Ó2ÓöÜÝbJ_KÓ[ÓöÜÝÝbL_tÓÓöÜÝbR_˜Ó£ÓöÜÝbX_¼ÓÇÓöÜÝb^_àÓëÓöÜÝbd_ÔÔöÜÝbj_(Ô3ÔöÜÝ&Addbt&ÀLÔWÔöÜÝ&AddbvðÜpÔ{ÔäÜÝbxðܔԟÔäÜÝby&À¸ÔÃÔöÜÝb&ÀÜÔçÔöÜÝbƒðÜÕ ÕäÜÝb…ðÜ$Õ/ÕäÜÝb†&ÀHÕSÕöÜÝ&AddbŽ&ÀlÕwÕöÜã&AddbðÜÕ›ÕäÜãb’ðÜ´Õ¿ÕäÜãb“&ÀØÕãÕöÜãb›&ÀüÕÖöÜãbðÜ Ö+ÖäÜãbŸðÜDÖOÖäÜãb &ÀhÖsÖöÜãb¨ÝŒÖ—ÖöÜÝb©Ý°Ö»ÖöÜÝb«ŠãÔÖßÖöÜÝb¸_øÖ×äÜ5tb¿_!×;×äÜ55ÝtbÄ_T×i×äÜ55tbË_‚×’×äÜ5tbÕ_«×¶×äÜ5bÛ_Ï×Ú×äÜ5bá_óרäÜ5§bê_Ø,ØäÜ5tbï_EØUØäÜ5tbó_nØ~ØäÜ5tbû@—اØöÜ5ØÜbþ@ÀØÆØöÜb@ߨåØöÜb@þØÙöÜb@Ù#ÙöÜb @<ÙGÙöܧb¿`ÙkÙäÜ5b¿„Ù™ÙäÜ55Ýb&¿²Ù½ÙäÜ5b-¿ÖÙáÙäÜ5b4¿úÙÚäÜ5'bIÚ%ÚäÜ:gbKÝ>ÚIÚäÜÝbLHbÚmÚäÜH'bN‚Ú—ÚäÜ:g5ÝbRݰÚÅÚäÜÝ5ÝbUHÞÚóÚäÜH5Ý'bYÛÛäÜ:gb[Ý,Û7ÛäÜÝb\HPÛ[ÛäÜH'b^pÛ{ÛäÜ:gb`ݔ۟ÛäÜÝbaH¸ÛÃÛäÜH'bcØÛãÛäÜ:gbeÝüÛÜäÜÝbfH Ü+ÜäÜHbm<ÜGÜäÜGèbp8¨`ÜfÜöÜbstUbvRè(b}Rè¥ÜRè`bŒ_¹ÜöÜëÂvÃ{ÃGKvÃâÄ&ÀâÄ&ÀüÜ&ÀüÜ ÝÝbšãbV8¨(b¡ÝGÝ8¨b¢Ý(b¥ÝtÝ8¨b¦Ý(b©Ý¡Ý;bªÝ(b­ÝÎÝ;b®Ý(b±ÝûÝ;žDayb²Ý(bµÝ(Þ;b¶Ýb¹KÞQÞXèb¾bÞ|ÞXè;;8¨8¨&AddbËݕޠÞ^èÝ&AddbÍdè¹ÞÄÞXèÝbÏdèÝÞèÞXèÝbÐÝß ß^èÝbÖÝ%ß0ß^èÝbØdèIßTßXèÝbÚdèmßxßXèÝbÛݑߜßXèÝbáݵßÀß^è®bãdèÙßäßXè®bådèýßàXè®bæÝ!à,à^è®bìÝEàKà^è&NegbîdèdàjàXèbðdèƒà‰àXè&AbsbôÝ¢à¨à^èbý_ÁàÇà^èbÿ_ààæà^èb_ÿàá^èb_á$á^èb_=áHá^èÝb _aálá^èÝb_…áá^èÝb_©á´á^èÝb_ÍáØá^èÝb_ñáüá^èÝb!_â â^èÝb&_9âDâ^èÝb+_]âhâ^èÝb4®â‡â^èb6® â¦â^èb8®¿âÅâ^èb:®Þâäâ^èb<8¨ýâã^èb>8¨ã"ã^èbI@;ãFã^è5bOWãbãXèGè€bR8¨xã^è…ãŠãb|Gèb÷®bø®bù®bú® bƒÜãöãjè®®®®(bŒŠã䮞DaybŠã(bŠã>ä®b‘Šã(b”Šãkä®b•Šã(b˜Šã˜ä®b™Šãb£pèÃäÎäjè®b¥pèçäòäjè®b§pè ååjè®b©pè/å:åjè®b¬®SåYåvèb®®råxåvèb°®‘å—åvèb²®°å¶åvèb´®ÏåÕåvèb¶®îåôåvè&Addb¼Šã æævèã&Addb¾pè1æ<æjèãbÀpèUæ`æjèãbÁŠãyæ„ævèãbÊŠãæ¨ævèãbÌpèÁæÌæjèãbÎpèåæðæjèãbÏŠã ççvèãbØŠã-ç3çvè&NegbÚpèLçRçjèbÜpèkçqçjèbߊãŠç•çvè®bápè®ç¹çjè®bãpèÒçÝçjè®bäŠãöçèvè®bê_è%èvèã€bñ_;èvèãMè8¨]Ý ÝÝŠãŠã…ã‚èK|è“è|è|è“è~÷I±J÷IÂJMKÂJRK¶JìLúKñLºMåMVñLVD"éècDÞSÃVÃVÞS%Wé‡èh%néKné„c8 z@ëH zCc< é¦é@ëŸEqc?_xéÆéÑéù23’cB_xéòéýéù2“"’cD_xéê)êù25t’cF_xéJêUê@ë 3’cH_xévêê@ë5t’cJ@xé¢ê¨êù2’cLùyxéÉêÏê@ë’cP@ë xéðêöêù2’cT_ xéë"ëù2ëï c[xé4ë@ë®xéLëQë `Ûëï`=9½`>¿`á‰ëëëï`é ë«ëëï®`ú¼ëÇëëïÝ`ÿØëãëëïH`ôëÿëëïFë` ììëïñï`/÷ï4ì:ìð`8_Sì^ìðFë`@_wì}ìð'`H’ì˜ìëï`[ð±ì¼ìëïFë`cðÕìàìëïñï`kðùìíëïÝ`pðí(íëïH`z_AíLíð5`‚_eípíðÝ`„_‰í”íðH`Š_­í¸íðêT`Š_ÑíÜíðýT`‹_õíîð)`‹_î$îðË`Œ_=îHîð®`Œ_aîlîð>`_…îîð;`_©î´îðM`_ÍîØîð4U`_ñîüîð;U`”_ï ïð›U`ž_9ïDïð¢U`ª_]ïhïð_&As`Ù@€ï‹ïðt`_¤ï¯ïðhé_`ÃïÎïëïFëŒ`ßïëïñïQëséýïð½LëQë Q® ²$ð–/F𠲕ò ²;—Pð[ð[ðJòaðoJò¡  _aðŒð—ð[ðJòR¦jð 0 _·ðÂð[ðJòR¦žð L _âðíð[ðWR¦Éð ! _ ññ[ðJòR¦ôð' F 4ñ:ñ[ðR¦ñ¢ ;  að_ñjñ[ðWR¦Añ¢ 7 aðñšñ[ðbR¦qñ¢ ý að¿ñÊñ[ð[ð¢ þ aðèñóñ[ð[ð¡ b_ aðò ò[ðJò£ e_að>ò[ðJòPòo•ò £ðròxòwF€ Þ[ðŽòwFFð »ð[ð, ×Åò; žó ¬ðC ¤íòøò5óðE ©;óóóFó Tóo5ó! ü«òÅòAóðLóÅò; žªó ¬ðC ¤yó„ó¯óðE ©;óœó¢óµó TªóKQó»óQó; žô ¬ðC ¤èóóóªôðE ©;ó ôô°ô Tô¤X .ñtªôHPò 1CôNôè2"u 7_ôjôè2î2¢ <ôˆôŽôè2¥ôžôè2®Àó¶ôÀó; žõ ¬ðC ¤ãôîôõðE ©;óõ õõ TõK»ô%õ»ô; žƒõ ¬ðC ¤Rõ]õˆõðE ©;óuõ{õŽõ TƒõK*õ”õ*õ; žòõ ¬ðC ¤ÁõÌõ÷õðE ©;óäõêõýõ TòõK™õö™õ; žaö ¬ðC ¤0ö;öföðE ©;óSöYölö TaöKöröö; žÐö ¬ðC ¤ŸöªöÕöðE ©;óÂöÈöÛö TÐöKwöáöwö; ž?÷ ¬ðC ¤÷÷D÷ðE ©;ó1÷7÷J÷ T?÷KæöP÷æö; ž®÷ ¬ðC ¤}÷ˆ÷³÷ðE ©;ó ÷¦÷¹÷ T®÷KU÷¿÷U÷; žø ¬ðC ¤ì÷÷÷"øðE ©;óøø(ø TøKÄ÷.øÄ÷; žŒø ¬ðC ¤[øfø‘øðE ©;ó~ø„ø—ø TŒøK3øø3ø; žûø ¬ðC ¤ÊøÕøùðE ©;óíøóøù TûøK¢ø ù¢ø; žjù ¬ðC ¤9ùDùoùðE ©;ó\ùbùuù TjùKù{ùù; žÙù ¬ðC ¤¨ù³ùÞùðE ©;óËùÑùäù TÙùK€ùêù€ù; žHú ¬ðC ¤ú"úMúðE ©;ó:ú@úSú THúKïùYúïù; ž·ú ¬ðC ¤†ú‘ú¼úðE ©;ó©ú¯úÂú T·úK^úÈú^ú, a çú; ž@û ¬ðC ¤ûûdûðE ©;ó2û8ûjû T@ûodû! · ;! ¸ Íúçúpûçú; žÎû ¬ðC ¤û¨ûÓûðE ©;óÀûÆûÙû TÎûKuûßûuû; ž=ü ¬ðC ¤ üüBüðE ©;ó/ü5üHü T=üKäûNüäû; ž¬ü ¬ðC ¤{ü†ü±üðE ©;óžü¤ü·ü T¬üKSü½üSü; žý ¬ðC ¤êüõü ýðE ©;ó ýý&ý TýKÂü,ýÂü; žŠý ¬ðC ¤YýdýýðE ©;ó|ý‚ý•ý TŠýK1ý›ý1ý; žùý ¬ðC ¤ÈýÓýþýðE ©;óëýñýþ TùýK ý þ ýK; žmþ ¬ðC ¤<þGþmþðE ©;ó_þeþsþ Tþþyþþ K Aÿ n ® o ® r [ÿ u "u M Ïþéþaÿ®®[ÿ"u X ùþÿaÿgÿ g ÿÿaÿ®€ x rÿ5ÿaÿgÿo[ÿ*Tÿ[ÿAÿ~þmÿ~þ~þ | =~þ Š  ~ ¨ÿÇÿ-€®®[ÿ"u àÿëÿ@ôÿ®-€xÿxÿxÿ ¦ D ¨ D © OJ ° OOmOOmmþþWÑWWâWmXâWrXÖW ZYZÚZ[6cZ6c;dV_BdY_1m_fd_üCd[$/yüEd\_GWyxx TOe-®yaað ° HZ ° ü ° ±· ° ÈÓZ ° äôZTZ' °  ' ° $*' ° ?JB' ° _e ° B~„‡' ° ™©BU ° _Âȇ ° Báç‡ ° ’ ‡B ° ’$*‡ ° ®CS‡U_ ° ®l|‡U“ ° B•¥‡U“Add ° »ËUB&Add ° BäôU“' °  UBB' ° 3>U' ° ScBB ° u“U3#¤gR%3#þ`ãcãcþ`!ÙaW%!0 ² ¹ ¶  ¸ ð ¹ f ß ¹f à _f â B » Äf ã Ê! å Ðf æ Ð f ç Ð(  ¨Ð¾ Ä ¹ÄЮ È _ÝíÐJò[ð' Ë Ð' Õ #Ð' × 8CÐ' Ù XcÐB' Ü x~Ð é Ž™ÐÖ` é á­ÐÖ¾J÷IêÜêê[ð¦ò[ð¦ò\%í&í&7dñd7deee’eöd,g:f1gúg%hVp1gVp"*}íA,"*nqqn(²çF,( Ï–/ó  ;—ý[ðKó0$/K5*oç¡I_1;fl¡L¡P_8;Ž”¡L¡n_;;¶Á MM¦y<;Û M®  I  ç; žl  ¬ðC ¤; F q ðE ©;ó^ d w  Tl K }  ùyŽ ùyùyŽ K,Ü-Ü-WqrWq"r­r"r²rrLtZsQtuEuv}Qtv}1 ˆ 031>{#~#~>{ò.R ‚ 53ò.KKh 0Y¤ \c _Ø¡cØ¡ 4hÏ 4v$    ѹ/ ×¹oL‘Ð4 Z e Q5’Ñ@4 † Œ xNEÖ¤ ¤ ª xNEsšà É xN¢·%4 ç  Q®®®®®®¢Ò)4 ) 4 Q=Ÿ¢Ô*4 R ] Q=Ÿ¡Úsš+4  … xN¡Ûsš,4 § ­ xN¡Þsš-4 Ï Õ xN¡àsš.4 ÷ ý xN¡sš14  % xN¡¢U24 G M xN¡>_64 o u Q¢?74 “ ™ Qc_² ¸ Q¡j_94 Ú ê QÏ >¡p_:4  QÏ >¡z_<4 >DxN¢‘>4 bmQ;¡’;?4 •xN™_®¹xN®¢¢A4 ×âQ;¢¯C4  Q_¡°_D4 -3xN¢ºF4 QWQ¡Í_H4 yxN¡Ó_I4 ¡§xN¡Ø_J4 ÉÏxN¡á_K4 ñ÷xN¡1_Q4 $xN) G[ð=CxNd_\gQJò¡•¸US4 ‰Q¢¨X4 ­¸Q V¡Ü_Z4 ÚàxN¢ý^4 þ Q¡"s b4 +1xN¡N_f4 SYQ¡Æ_n4 {xN¢ïx4 Ÿ¯Q__¡ö_y4 ÑÜxN®¡@!X|4 þxN¡‘_ˆ4 '2QU¡’_‰4 U[Q¢­4 z…QÑ[¢¯Ž4 ¤ªQ¡Ë_4 ÍÓxN¡Ï_‘4 öüxN¡Ó_’4 %xN¡Øѹ“4 HNQ¡á_”4 qwxN¡-V™4 š xN¡Ësš¦4 ÃÉxN¡Ð®§4 ì÷xN®¡Ò®¨4 %xN®¦Iš4 @Q=ŸQ4 ]PòPò9Aœ9ET^g_8®8®e[Äeet T1® T2®Ê»[ÖÊÊÖ:3Ë4Ë4w~1w~BÍBÒ6lz€q:‚e‚–Šq–Š8eÐ:8^ˆC‹C‹^ˆá5šÄ$:á54f=Ü;fµAf¹MAfºMZf¸Ü—‹'Ü ³Ko’9_Î7bh§d’F@Ð7Чd‘H7­¸e5’I@7Ùß§d•S_Þ7ý§d4g•äåæçèéêëìîïðñòóôïô4häêëìîïðñòóôïôKK$oEZH9;m Vm m V):º;º;ù’Õ“6”^”6”^”¿;P=P=Ú“c”u”Ü”h”á”–‹ŒŒ¼ŒôŒù™Œù™•–þ™­–ÿ—;%‚%%=Œ%5%C%hn%C%~Ž%5C%ž®%+5E%%ÆÌ%E%6äê6E%_ 6<E%_%06<E%_HN6E%_fl6E%m „Š6F%ž©%m E%'ÁÇ6E%'ßå6J%®ù6'HŒ%_C%(.E%'FQ+BE%_io+E%B‡+E%®¥«+E%'ÃÎ+BE%m æñ+BE%' +E%''-+E%_EP+m kNth%'hs+®E%®‹–+m E%'®¹m E%'ÑÜm E%'ô<m E%',Bm F%@K_E%_ci+F%}ˆ<E%_ «<E%_ÃÎm F%âèF%üw[Z%®'1Hh ;i!iJñZBi¤[iKeCi“!Ci£®!ñZCi¾É!eCiÙä!5Ciôÿ!ÝCi!HCi*5!:gEi!MX!!Ei(!p{!eEi,_“ž'!eEi._¶Á'!eEi0_Ùä'!ñZEi2_ü '!ñZEi8e % '!Ei9e= C '!Fi;W b !eEi?@z € '!Fi@” Ÿ !5EiCñZ· ½ '!FiDÑ Ü !ñZ^iHï ú !5miM !!MM"!M"!3!K-!D!-!-!D!U=æ>æ>š½ššΚY›Κ^›šøœœýœÆñ"¦ýœ"¦BÓ!>!:DBê£ϦϦê£ü?"8!?Dü?j0;; ž}" ¬ðC ¤L"W"‚"ðE ©;óo"u"ˆ" T}"K$"Ž"$"#§4k¸"Pl*í" €€; žR# ¬ðB ¢C ¤!#,#R#ðE ©;óD#J#X# Tí"^#í"P!r#mœ#Pm# Dað Baðîa¾d9½´#9½) 0˜¾˜ƧI˜½™â###â#DDÕEÕEE˧$e’e’$ÚEkGkGHЧ,§@!ñtÕ$HÕ$js$~$%%jŒ$’$%’ !_L$³$¹$%¥L$É$%®o%•8E@Õ$û$›ML$%L$¤ iAÿ®&HAÿ=s^ ®[ð ¯$ð w _jg%r%®&´&% sˆ%b z™%©%®&$ð[𢠇%Ç%×%®&[ðJò¡ ˜_%ù%&¿&Å&¡ §[ð%&&,&¿&¡ ªð%N&T&¿& ²d&j&®&¨%~&‰&®&®8í"8að8Pò8að%º&%º&Ë&Aÿ§X!'ñt(H([ v(© J© êj'''†(Œ(C -7'L'†(5HŸ=Ÿ^ R_'j'†(^ H}'ˆ'†(^ M›'¦'†(’ DÐ&Ç'Í'—(’ áÐ&î'ô'—(¥Ð&(†(®ov(C)(R(Zhѹ”Z5HŸ=Ÿ;5•5SŸ(o(Uixÿ†(úÐ&’(Ð&’(§pñtõ*H(ª…‹+Xª†–+`ªŠhjñ(ü(œ+¢+C" ))œ+†9(()3)œ+®’C–+ò(U)[)­+‘Eó(y)„)œ+–+EJ‹+œ)¢)­+ESº)À)­+‘Xô(Þ)é)œ+‘fõ(* *œ+‘gö(+*6*œ+©U‘h÷(T*Z*œ+‘iø(x*~*œ+‘jù(œ*¢*œ+¡rÏ+ú(Å*Ë*œ+£w_ (é*œ+Jò«@=ñt‹+H×¹j+(+‹+Õ+j6+<+‹+¡G_Âõ*_+o+‹+à+;¥õ*+‹+®õ*K‘+(¨+(¨+oÏ+ZÈ+Ï+³+Û+õ*æ+KKë+Kö+-® ,),¬,oW,Z2,!`ѹ”ZHŸ=Ÿ;5\,oq,[n[_oª,jˆ,Ž,/y¥q,ž,/y®§@ñtM.H×¹jÑ,Ü,M.S.jê,ð,M.”^.--M.S.E_*-5-M.E0_M-X-M.d.‘@±ª,v-‹-t.'€'€®‘Gª,©-¯-M.’O_ª,Ñ-×-M.’T_ê,ù-.M.’Z_Ī,&.1.M.d.¥ª,A.M.®ª,Y.ª,ª,j.o.KY.§`¶ñt 0H×¹­q,@C»³.¹. 0’Ë_Hz.Ú.à.&0’Ð_Iz.//&0’Õ_Jz.(/./&0‘ÚOz.K/V/ 0Q‘çPz.s/~/ 0Q‘ôEz.›/¡/ 0Fúµ/»/ 0Ë/Ö/ 01070î/ù/ 010¨z. 00 0® W×¹z.,0z.,0z.¤( ·­»v1H­» Ø[ð Ù[ð Ú®  ºŽ0”0v1 »¥0µ0v1[ð[ð¢ Â=0Ó0Ù0v1¡ Év1=0û01v1' Ë11v1' Ì1171v1 Þ|1O1Z1v1‚1¥=0j1v1®=0=0ˆ1=0„ ÛAÿÑ2HAÿ ÿ[ð ðjÌ1×1Ñ2×2C Þç1÷1Ñ2›ò[𢠩12%2Ñ2[ðJò’ ä_1F2Q2â2Å&’ ø[ð1r2x2â2’ ûð1™2Ÿ2â2 ¯2µ2Ñ2¥1Å2Ñ2®1Ý21Ý2ôô2ôÿ2xéxéÉýï3­»­»¤(–ð3ð3Hð3¥µ5 ›^3n3À5º5sŽ¡ýE'33–3À5¨¦3±3À5Æ5©Ñ5É3Ô3À5Æ5¥'3ä3À5®oƒ4á_¢rð3)4/4×5¢vð3M4S4×5®€ð3p4v4×5p‡Å‘¤ ²ƒ4µ5… ,fð×5fñsŽfò)_µß4å4Ý5Êö45Ý5sŽ¯Îƒ45#5Ý5®øBŽ<5G5Ý5>ÖBŽ`5p5Ý5sŽ>¡ãEƒ4’5˜5Ý5€æ×5®5ã5º5ƒ4'3Ì5'3'3ð3ƒ4é5ƒ4ô5¼†6…†6…† z6 z6 zFt°›B(œj6±s›Ý‘h²^y6¨6³¨6´str&E´len&Bµ&¼]%_¶j6DœÑ6ö6·y6‘h·ƒ6‘`·6‘X·›6‘T²)^77³¨6³Ø¸ö6)œ>7H7·7‘h¹@k7%œFt²Øq€7—7³—7´str‹Ýas¸q7›œÀ7Ó7·€7‘X·Š7‘Pº»rœó78»8‘h}s¼éœ38±str×H‘h½@ ©E8Z8³Z8³Ø€t¸38œƒ88·E8‘h¾'vœË8±strÛÝ‘@¿ÜË8‘¸;t½ÄT‰â8÷8³ÄŒ³Ø¸Ð8*œ9%9·â8‘h²}49?9³ÄŒ¸%9*œc9m9·49‘h²”|9”9³ÄŒÀÄ”95¸m95œ½9Ð9·|9‘h·†9‘`²¸ß9÷9³ÄŒÁpszÙݸÐ9¶œ:0:·ß9‘¸·é9‘°²À?:W:³ÄŒÁpwzóH¸0:~œ{:Ž:·?:‘H·I:‘@ºý 3œ®:Ì:»ÄŒ‘h¿UÌ:‘`5Â5sˆâ:÷:³—7³Ø¸Ñ:qœ;%;·â:‘Xñtút3œQ;o;»é„‘h¿ro;‘`+;¾+…;š;³š;³ØÅ¸t;œÃ;Í;·…;‘hÂϳ´Þ;ó;³ó;³ØÝ¸Í;œ<&<·Þ;‘hÃx#œH<V<»V<‘h‘ð%œ}<‹<»V<‘h²6‘š<±<³±<Ács0¶<®‘‘¸‹<,œß<ò<·š<‘h·¤<‘`²R‘==³±<³Ø¸ò<œ:=D=·=‘hÄù3/œÅ 4 œ|=Š=»Š=‘h×5Å/4 œ¯=½=»Š=‘hÅS4 œÝ=ë=»Š=‘hºn3„œ >L>»L>‘HÆpÇÿŠƒ‘XÇ‘‘PÀ5²ê“`>›>³›>µ ˜Ýµ ™®µ šÝµ ›Ý(•¸Q>uœÄ>ò>·`>‘h·j>‘`·v>‘\·‚>‘P·Ž>‘HÂjÇ+??³?³Ø“¸ò>œA?K?·?‘hÂ’´´\?q?³q?³Ø“¸K?œš?¤?·\?‘h½d“ ¶?Ë?³Ë?³Ø"•¸¤?Lœô?þ?·¶?‘X²R” @"@³›>³Ø¸þ?1œF@P@· @‘Xoà@ i_( –_‹@õ@p §_p ª_p ¬_p ®õp °Bp ´@p ·ŽÄY@ œ¾k@•œ8A¿ –õ‘¸¿ –@‘°²ë•GA“A³“AÀ zõÀ {ÝÀ |®À }ÝÀ ~ÝB™¸8A„œ¼AõA·GA‘X·QA‘P·^A‘H·kA‘D·xA‘¸·…A‘°ºç–5œB2B»“A‘h±f1 È2B‘`Žsº×ûœWBœB»“A‘è}¿ Yt‘à})Æ”Ç [M\‘ø}ºœ˜}œ¼BþB»“A‘¸¿ âõ‘°¿ âþB‘¨¿ âÙI‘ 5ºŘ1œ#CQC»“A‘h¿ çQC‘`¿ çÙI‘X5²®šeCˆC³ˆCÁxx ®Áyy ®1Ÿ¶VC#œ±CÍC·eC‘h·oC‘d·{C‘`²‘ŸÜCÿC³Ó¡Áxx "®Áyy "®¶ÍC#œ#D?D·ÜC‘h·æC‘d·òC‘`CÉÅ(É/œeDsD»sD‘h?D²ʼ‡DžD³žDµ BÝ(½¶xDœÇDÚD·‡D‘h·‘D‘`ºå¼0œúDE»žD‘hÈ GE‘`.½º½0œ‘`ºê  œˆR¨R»L‘hÍÏ ‘dÍ>‘`ÅœÈRÖR»±N‘hÅDœöRS»L‘h¿‘;‘`Åmœ4SBS»±N‘hÅ•&œbS€S»±N‘h¿™®‘dŹœ S¾S»L‘h¿¢;‘`ÅâœÞSüS»L‘h¿¯_‘dÅ œT*T»±N‘hº3'œJTXT»L‘hÅWœxT†T»±N‘hº'œ¦T´T»±N‘hº§'œÔTâT»±N‘hºÏGœUU»±N‘hÅ÷œ0UGU»±N‘hÍ) ‘`Å$œgUuU»±N‘hºC-œ•U³U»L‘h¿d³U‘`Jò\,ÅgœÞUìU»L‘hoVÐVVV VìUìU&VìUÑõU)œMVdV»dV‘hÍiV‘`V Vº,œŽV¬V»L‘h¿¨¬V‘` Vº¸œÑVßV»±N‘hÅàœÿVW»L‘hÍW‘`º 2œ;WIW»±N‘`Å1œiWwW»L‘hÅYœ—W¥W»±N‘hÅœÅWåW»L‘hÍ_‘dÍ_‘`ůœXX»±N‘hÍ®‘dKXÅÜœGXUX»±N‘hÅœuXŒX»L‘hÍU‘dÅ2œ¬XºX»L‘hÅ[œÚXñX»L‘hÍÑ[‘`Å… œYY»L‘hŪœ?YMY»±N‘hÅÓœmY{Y»±N‘hÅüœ›Y©Y»±N‘hÅ%œÉY×Y»L‘hÅNœ÷YZ»±N‘hÅwœ%Z3Z»±N‘hÅ œSZaZ»±N‘hÅÉœZ˜Z»±N‘hÍ®‘dÅ÷œ¸ZÏZ»±N‘hÍ®‘dº%%œïZ [»L‘h¿I [‘`=Ÿºà¹,œ2[O[»$ ‘hÈ}O[‘`5ºº0œt[‚[»¹#‘`Å/ºœ¢[°[»¹#‘hÅWºœÐ[Þ[»¹#‘hźœþ[ \»¹#‘hº§º*œ,\:\»¹#‘hoÒ\C(S\Y\Ò\†5:\o\z\Ò\®F7Ž\™\Ò\ѹEQ_±\·\^JV_Ë\^:\²C\ç\ò\³ò\Ò\¶Ø\Eœ]%]·ç\‘h²Y\4]I]³ò\³Ø¸%].œm]w]·4]‘h¸%]&œ›]¥]·4]‘hºz\}œÅ] ^»ò\‘hÈ7ѹ‘`ÆkË^ §^ú ^$^:\º™\FœI^W^»W^‘h^º·\œ|^Š^»W^‘hÂù/¶›^°^³°^³Ø 0¸Š^LœÙ^ã^·›^‘h¸Š^&œ__·›^‘hoL_C!*_0_L_¥_@_L_®_²_a_l_³l_L_¸R_%œ•_Ÿ_·a_‘hÂ0_°_Å_³l_³Ø¸Ÿ_:œé_ó_·°_‘h¸Ÿ_&œ`!`·°_‘h,²&,6`‰`³‰`µѹµ”Z´posŽ`µ“`µ;µ˜`!`HŸ=Ÿ5¸'`‰œÁ`a·6`‘X·@`‘P·L`‘L·X`‘@·d`‘¸·p`‘°·|`‘ÅX-œ#aLa»La‘hÍQa‘`ÍVa‘XÍ®‘Tt.'€'€Å‹- œ{a‰a»‰a‘hM.oâb’é_ÔŽa¹a¿aâb¡_MŽaáaçaâb¡_”Ža bbâb¡_ÕŽa3b9bâb¢+׎aXbcbªc_¡,_ØŽa†bŒbâb¢.ÙŽa«b¶bªc5¦B¢ŽaÑbâb!€!€èbŽaÅ—aœ cc»c‘hâbÅ¿aœ@cNc»c‘hÅçaœnc|c»c‘hºb'œœcªc»c‘hŽaÅ9bœÐcîc»îc‘h¿+_‘dªcÅcbœd!d»c‘hÅŒbœAdXd»îc‘hÍXd‘`5º¶b7œ}d§d»c‘h±xB!€‘`±yB!€‘X­d7Å@œÒdàd»àd‘h§dºh0œee»àd‘`7º2œ9eVe»Ve‘hÈH[e‘`e5º¸6œ€eŽe»àd‘`Åßœ®e¼e»àd‘hoãf’Rèfà¼eçeíeîf’tð+ä¼effîf’’û+ê¼e7f=fîf’³_Q¼e^fifîf) ‘Åí¼e‡ffÅg‘áð¼e«f±fÅg‘ññ¼eÏfÕfÅg©÷JKãfôf¼eÅÅeœg'g»'g‘hîfÅíeœLgZg»'g‘hÅfœzgˆg»'g‘hº=f\œ¨gÅg»'g‘hȳ) ‘`¼eÅif œëgùg»ùg‘hÅgÅf œh,h»ùg‘hűf œLhZh»ùg‘h(²(ohÍh³Íhµѹ´id”ZµÒh´pos×hµÜhµ;µáhZh5HŸ=Ÿ5¸`h”œ iUi·oh‘X·yh‘P·…h‘L·h‘@·œh‘¸·¨h‘°·´h‘·Àh‘[i(ºR((œ€iŽi»Ži‘XUi½Í’¿¥iºi³ºi³Øß¸“iœãiíi·¥i‘h²üij³j¸íi"œ0j:j·üi‘hºÎWœZjhj»j‘X²wjŒj³j³Ø¸hjHœ°jºj·wj‘Xom öjk®‘TÈ?l‘HÈ@l‘@ÈAŸZ‘P55ºkªœ8lGl»hk‘˜²-Vlml³EµH;¸Gl^œ‘l¤l·Vl‘X·`l‘PÅ3)œÄlÒl»Òl‘h­+Å[)œ÷lm»m‘hÈE–+‘`œ+ºÀ)gœ9mVm»m‘hÈX‘`Åé) œvm„m»m‘hÅ * œ¤m»m»m‘hÍ©U‘dÅ6* œÛmém»m‘h½(+=ûmn³n‹+¸ém%œ/n9n·ûm‘h²¼+HnSn³SnÏ+¸9n%œ|n†n·Hn‘hº¢*Hœ¦n´n»m‘XºË*þœÔn8o»m‘H¿w8o‘@ƃÇ~=o‘XÆ_Ç„$ ‘PJò–+Ŧ'œbopo»po‘h—(ÅÍ'œ•o£o»po‘h½ëÿ | µoÊo³wH³Ø¸£oœîoøo·µo‘hÒ ®$œ9pÈ ®‘lÈ Út‘`Ó [p œL$Â~$!rp}p³}p%¸ap1œ¦p°p·rp‘hÓ 5Kœº’$æœòp#q»}p‘ˆÆÆÉ #†(‘H²''2q”q³”qµ -™qµ -žqµ -£qÊÔ 0èfÔ 1Ô 2Ô 3!`†(5HŸ=Ÿ¸#q¥œÌq r·2q‘ø|·œæ~ô~»t‘XÅIbœ"»"‘h¢#²66A³AA¶' œjt·6‘h²gƒ˜³A³Ø¶t œ¼Æ·ƒ‘h²iEÕê³ê³Ø}¸Æœ€€·Õ‘hº¥¼9œ=€K€»w‘hºh¶Tœk€¼€»w‘X±__p#ú‰‘P±__n#ú(µ‘HÆ>Ç#ü¸µ‘o²uHË€à€³à€³Ø¿’¸¼€œ ·Ë€‘hº#Æ9œ3A»]w‘hºæ¿Tœa²»]w‘X±__p#úË’‘P±__n#ú¦¾‘HÆ>Ç#ü6¿‘o²–Á̳̃’¶² œõÿ·Á‘h²Ç‚#‚³Ì³Ø¶ÿ œG‚Q‚·‚‘h²î–`‚w‚³z´__xŒÝ„¶Q‚œ›‚®‚·`‚‘h·j‚‘`²Ñ•½‚È‚³–{¸®‚&œì‚ö‚·½‚‘h²”ƒƒ³ƒ³Ø¯¸ö‚œCƒMƒ·ƒ‘hº –’œmƒу»–{‘¸Æ~(D6”É(E§ƒ‘XƒÆgÉ(H§ƒ‘PÅ:–!œñƒÿƒ»–{‘hs^½Þ^ A„"„³"„ÿƒ¶„ œK„U„·„‘h²ˆ%d„ „³ „À z$ðÀ z[ðÊ˵„ ®&§µ„ú¥„¸U„÷œÞ„…·d„‘X·n„‘@·{„‘PÆÎÌŠ„²ý&…;…³;…³Øk¶… œd…n…·&…‘hº!¶“œŽ…&†»w‘H¿#ω‘@±__n#Ï(µ‘¸Æ}Ï__i#Ñ(µ‘hÆdÏ__p#Ó‘`Æ'Ç#Ö‘X²àE>†N†8©³N†S†$ƒ¸&†œ…†˜†8©·>†‘h·H†‘`²ÅE§†¼†³N†³Ø¸˜†œà†ê†·§†‘hºFE"œ ‡0‡»0‡‘h×__p'm\D‘`ÍPD‘Xó#²]D‡Y‡³Y‡³Ø­’¶5‡ œ‚‡Œ‡·D‡‘hºŸ¿“œ¬‡Dˆ»]w‘H¿#ÏË’‘@±__n#Ϧ¾‘¸Æ}Ï__i#Ѧ¾‘hÆdÏ__p#ÓÑ’‘`Æ'Ç#ÖÑ’‘X²ìH\ˆlˆ8®³lˆqˆ:$Å’¸Dˆœ£ˆ¶ˆ8®·\ˆ‘h·fˆ‘`²ÑHňÚˆ³lˆ³Ø¸¶ˆœþˆ‰·ň‘hºÜF"œ(‰N‰»N‰‘h×__p'mòE‘`ÍæE‘X($º€¿‚œs‰‘‰»]w‘H±__n#ÂÑ’‘@º¶‚œ±‰ω»w‘H±__n#‘@º—Á-œï‰ý‰»ý‰‘`õ’ºæ"œ"ŠHŠ»Y‡‘h×__p'mü‘`Íð‘Xº¸-œhŠvŠ»vŠ‘`³º†"œ›ŠÁŠ»;…‘h×__p'mœ‘`Í‘X²–”ЊÛг?{¸ÁŠ1œÿŠ ‹·Њ‘h²8<‹-‹³-‹³Ø¶ ‹ œV‹`‹·‹‘hº“•4œ€‹Ž‹»Ž‹‘`Ó²U“¢‹·‹³·‹³Øy¸“‹œà‹ê‹·¢‹‘h¼~ÉœŒ _Tpm ×__r)/Œ‘h[Å‘;œDŒaŒ»aŒ‘h×__p'…A:‘`gº5•*œ†Œ¤Œ»–{‘h±__pZ…‘`΀^ œ¼r% œâŒÍb‘h²ŒDñŒüŒ³0‡¶âŒ œ *·ñŒ‘h²½D9N³0‡³Ø¶* œr|·9‘h²"F‹–³N‰¶| œºÄ·‹‘h²SFÓè³N‰³Ø¶Ä œ ŽŽ·Ó‘hº¶œ6ŽSŽ»Ì‘h×__p'…f‘`ºVœsŽŽ»A‘h×__p'…‘`² H¨Ž¸Ž8®³´w¸ŽÅ’¸ŽœêŽýŽ8®·¨Ž‘h·²Ž‘`²ÿD%8©³¯v%ƒ¸ýŽœWj8©·‘h·‘`²í“y„³ƒ¸jœ¨²·y‘hÅt•œÒ໎‹‘h²´“ø86”³·‹µ¸àœ:M86”·ø‘h·‘`²¢:\q³aŒ³Ø¶M œ•Ÿ·\‘hºÁ<"œ¿å»-‹‘h×__p'm×;‘`ÍË;‘X²<ôÿ³-‹¶å œ#‘-‘·ô‘h²q:<‘G‘³aŒ¶-‘ œk‘u‘·<‘‘h¹$!†‘›‘³}p³Ø¸u‘Fœ¿‘É‘·†‘‘h¸u‘&œí‘÷‘·†‘‘h½j& i ’’³ „³Ø¸÷‘:œB’L’· ’‘h¸÷‘&œp’z’· ’‘hÂô'!'‹’ ’³”q³Ø¸z’:œÄ’Î’·‹’‘h¸z’&œò’ü’·‹’‘hµ2 Û “"“³‹J³Ø¸ü’:œF“P“· “‘h¸ü’&œt“~“· “‘h½Ô3–“¥“³L>³Ø¸~“:œÉ“Ó“·“‘h¸~“&œ÷“”·“‘hÛ0œ'”ÍE‘XÛHœd”È U®‘¼È U®‘¸ÂŽ,ˆu”Š”³Qy³Ø¸d”:œ®”¸”·u”‘h¸d”&œÜ”æ”·u”‘hº©%óœ•}•» „‘X¿ ‡[ð‘P¿ ‡}•‘HÆÝË’• Ç ‰[ð‘hÚkJò§’•ú ‚•º×%úœ·•–»–‘H¿ ˜–‘@Æè ž%Ç ¡–‘h– –æ•¿&Å&º&œ>–L–»–‘hº,&%œl–z–»–‘hº~/3œš–¨–»°^‘hº¹. œÈ–Ö–»Ö–‘h&0ºà. œû– —»Ö–‘hº/ œ)—7—»Ö–‘hº./dœW—t—»°^‘hÈÚQ‘`ºV/7œ”—±—»°^‘hÈçQ‘`¼^œÜ—±p E[ð‘h¼ª^œ˜±p G[ð‘h¼Ä^œ2˜±f I$ð‘`ÜœÝ2XÞ2 _Ý-ª!\Þ@.6KÞDŽ˜|˜KÞG¦˜”˜ÞJ¹˜@mÞT.6Þ[.6Þ^Ž˜ÝV,tÝ _ÝÞ (2Þ .c Þ /Ø¡§0™}Ý%™Ýo#CŸÝo$NŸÇ]$Ø Ýbm%™Ýbn%™ÝboüÜÞ`§¿Þ pAóÞ ¥^#Þ µ»óÞ ¶¶ôÞ ¹%õÞ º%õÞ »%õÞ ¼%õÞ ½%õÞ ¾%õÞ ¿%õÞ À%õÞ Á%õÞ Â%õÞ Ã%õÞ Ä%õÞ É%õÞ Ê%õÞ Ë%õÞ Ì%õÞ Í%õÞ Î%õÞ ÒöÞ ÓyþÞ Þ”õÞ röÞ áöÞ  ùÞ {ùÞ êùÞ YúÞ NüÞ ½üÞ P÷Þ .øÞ ¿÷Þ ßûÞ ,ýÞ  þÞ ›ýÞ ÈúÞ ÈúÞ ÈúÞ !ÈúÞ #øÞ $LóÞ %pûÞ &röÞ 'áöß ç Ép,Ø Ýq&} Ér+Þs Ér,Þs ÝnaW,ÉfOÞs ÉfPÞs ÉfQÞs Ý%™Ýs%™Ýt%™Ý%™Ýo"%™Ýu%™ÝvB%™KÞv†1Ýw%™Ýx^N!Ýy+%™Ýz %™Ý{%™Ý|%™Ý}%™Ý~%™Ý%™Ý€%™Ý#%™Ýj6%™Éj:á "Éj;á Þj&Ž"Ý‚1%™Ýƒ+%™Ý„%™Ý„%™Ý…%™Ý†%™Ý†%™ÝlB%™ÝlC%™Ý‡%™Ýˆ%™àEáÃÉ â>Í€€€€xãIÍÿÿÿâÒÑ€€€€€€€€€äÝÑÿÿÿÿÿÿÿåf@å’âÉ€€~æÔÿçé& çô& ç' % U$ > : ; I : ;  : ; I8  : ;I8 I!I/  : ;I  : ; n  : ;  : ; I$ >  I&II I : ; : ;2 : ;I2 .?: ;nI2 <dI4.?: ;nI<d.?: ;2 <d.?: ;<d.?: ;<d : ;2 (  : ; /I! : ;I?2 <" : ;I8 #.?4<d$.?: ;nI<%.?: ;n<&.?: ;nI2 <d'.?: ;n2 <d(.?: ;nI2 <)*.?42 <d+ : ;, : ;-I.&/<0: ; 1 : ; I8 2 : ; 39: ; 4 : ; 5.?: ; <d6.?: ; <d7 : ; 8/I9.?: ;nI<: : ;; : ; < : ; 2 =I8 >.?: ; nI<d?.?: ; n<d@.?4<dA : ; I8 2 B: ; I2 C.?: ; 2 <dD.?: ; nI2 <E.?: ; nI2 <dF.?: ; n2 <dG.?: ; nI2 <HI8 2 I.?: ;2 <dJ.?: ; nI2 <dK<L9: ; M : ; N : ; O : ;P : ; Q9: ; R: ; S: ;T.?: ; n<U.?: ; nI<V.?: ;nI<W.?: ;nI<X.?: ;nI<Y : ; 2 Z.?: ; 2 <d[ : ; I?<\.?: ; nI<].?: ; nI<d^.?: ; n<d_.?: ;n<d`.?: ;nI<da.?: ; 2 <cdb.?: ; nI<c/Id0I e : ;f : ;I8 2 g0I h.?: ;<cdi4: ;nI?<j.?42 <dk.?: ; nI2 <dl : ; m.?: ; n<dn.?: ;2 <cdo<p : ;I?<q : ;I?2 < r : ;I?2 < s : ;I?2 <t : ;2 u.?: ; <cdv4: ; nI?<w4: ; I<x:: ; y.?: ;I<z.?: ;I<{.?: ; I<|.?: ; I<}!~.?: ; nI< : ; 2 €.?: ;nI2 <dI‚ : ; 2 ƒ.?: ; nI<d„ : ; … I8 42 †.?: ; L 2 <d‡ˆ.?: ;I<‰.?: ;<Š : ; ‹.?: ; nL M<dŒ.?: ;n<d.?: ;n2 <dŽ : ; I8 2  : ;I8 2 .?: ;n2 <d‘.?: ; nL M2 <d’.?: ; nIL M2 <d“.?: ;nIL M<d”.?nI42 <d•.?: ; nIL M2 <d– : ; —d˜ : ; 2 ™( š : ;2 ›.?: ;<dœ.?: ;n2 <.?: ;nI2 <ž.?: ;nI2 <Ÿ.?: ; nIL M2 <d .?: ; L 2 <d¡.?: ;nIL M2 <d¢.?: ;nL M2 <d£.?: ;nIL M2 <d¤ : ;¥.?L 42 <d¦.?: ;nL M2 <d§ : ; ¨.?L 42 <d© : ; I?2 <ª : ; I82 « : ;¬ I­ : ;I82 ®.?: ;nL M<d¯.?: ;L 2 <d°.?: ;nI@–B±: ;I².G d³I4´: ; Iµ: ; I¶.1n@d—B·1¸.1n@d–B¹.?: ;nI@–Bº.G@d–B»I4¼.G@—B½.G: ; d¾.G@–B¿: ;IÀ: ;IÁ: ;IÂ.G: ; dÃ.G;@d–BÄ.G@–BÅ.G@d—BÆ Ç4: ;IÈ: ; IÉ4: ; IÊ Ë4I4Ì41ÍIÎ.G@—BÏ4: ;IÐ.?nI42 <dÑ.G: ; @d–BÒ.?: ; I@–BÓ.?: ; nI@–BÔ4: ; IÕ UÖ41×: ; IØ4: ; IÙ.?: ; nI@—BÚ Û.4@–BÜ.4@–BÝ4: ; I?<Þ4: ;I?<ß4: ; I?à4I?4<á4Gâ4Gn ã4Gnä4Gnå4Gn æ4Gnç4Gnå (D)%›v**5¶~3q3,/ „uL1 •„5û}1##/00ú§:IL%”'   ,0GW\\.4QQj ,2 &'''G-),2 %,0*E.&}FL&%:&‰ '7026\ ”("WH¨eª^g %%Hþ1T’,ooL%…%"(HW&lt0 t > 9T9T &’! ÷ “" “"‚‚-"-"1 4*  " F &:&:&:&:&:&óú%3 d7Â,®û /usr/include/wx-3.0/wx/usr/include/c++/4.9.0/tr1/usr/include/c++/4.9.0/usr/include/wx-3.0/wx/gtk/usr/include/wx-3.0/wx/generic/usr/include/c++/4.9.0/bits/usr/include/c++/4.9.0/ext/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/usr/include/usr/include/bits/usr/include/wx-3.0/wx/meta/usr/include/c++/4.9.0/x86_64-unknown-linux-gnu/bits/usr/include/c++/4.9.0/debugwxcrtbase.hbuffer.hstrconv.hstrvararg.hstring.hobject.hunordered_map.hthread.hlog.hgdicmn.htypeinfotypeinfo.hevent.happ.happ.hwindow.haccel.hwindow.hcontainr.hpanel.hpanelg.hnonownedwnd.htoplevel.htoplevel.hframe.hframe.hstl_list.hmenu.hmenu.hmdi.hmdi.hApp_PnlValue.cppApp_PnlValue.hppallocator.hhashtable.hstl_pair.hutils.hstl_algo.hnew_allocator.hlist.tccmove.hiostreamstddef.hlibio.h stdio.h stdarg.hwchar.h chartype.hdebug.hdefs.htypes.h time.h windowid.hstdlib.h wctype.h if.h fontenc.hcpp_type_traits.hstl_iterator_base_types.hcwcharchar_traits.hc++config.h newclocalebasic_string.hbasic_string.tccstringfwd.htype_traitshashtable_policy.hcstdlibstl_vector.hvector.tccstl_iterator.hios_base.hcwctypestl_function.hiosfwddebug.h predefined_ops.hnumeric_traits.halloc_traits.htype_traits.hlocale.h atomic_word.h stringimpl.hunichar.hrtti.hhash.hhashmap.hconfname.h fcntl-linux.h filefn.hlonglong.htracker.hany.hanystr.hdatetime.hvariant.hdynarray.himplicitconversion.h image.hpen.hbrush.hdataform.htextctrl.hscrolwin.hfiledlg.hconvertible.h validate.htbarbase.hstream.htimer.hcolour.hcontrol.hstatusbr.hbutton.hdialog.hmsgdlg.hdataobj.hcheckbox.hlistbox.hchoice.hscrolbar.hstattext.hstatbmp.hstatbox.hradiobox.hradiobut.hslider.hgauge.hdirdlg.hcombobox.htextdlgg.hfilectrl.hfilectrl.h šºtÖX %/1 (¼»å ¿Jºº  Š*òºJf Ú» ÖƒtfX ¨º ÚLa ˆº À º à ò% Ø ‚zºþ‚."ºòf ò .ò Ôô¢1K ‡ÈòòJf ñô 0K *º ³º ¢º ¤º ¯ó®å µ¼å àLºtY ñ‚ õ‚ ÿ‚ ýÉ#¤åô/ —£­»Ÿ¼#Ë» *º ³º •Èò ¼ÊÈó èM»wu •0Ö. f ‚ fJº‚Jg  ùê=V  Çò% Ø]-9<’  á „5g æ >Ÿ Ö ¡Ö âƒäÖ‚ Á¼­ ÆôÉ ËôÉ ½‚  ãôgŠJJÈÉñY Ç Y-Y1Y ÷ƒ  úƒ ¢‚  Ý‚  Ì•+ºf‚*t X J¼ æ¼È× ýË) üº ýº º4 Ạäò ©=ÈžJLòž'É Üº ðº øº …‚ ­ƒ  ¶J  È‚ Ï‚  íº ø¬ 7‚ ó Ïò Ðò  Õ‚  Ľôu ¶½: ÑK ÓK Ùº" Úº( ÝÉD ßÉD ‡Êóô6 ‘ƒ ½‚ ¾‚ ⺠ é#É ï#» ù‚ º ‘‚  ˜¬ ¡º ®È ¯‚  ¹º Ì‚ Òº ׺ ຺òtX °» Æ‚  ãó ”‚  ò §ó Û» üº ¡ô­ Í‚ Å ‚ î # õ ®Y ¿ ‚   È ‘ ‚ ¬ º ® ‚ Ê ‚ Î ‚ Ò ‚ × ƒ à ‚ Œ ‚ Ê ‚  Ï ­ Ñ ­ Éó/ üò ýò  ‚‚  Ì‚ ò‚ ±º 'ƒ­½…„ƒ» 4º<º 4º 6ôºÈ*tX J¼» лò»ñtY Õº µº2º µº  º ºäº º êg5h ?3 Ƈ è‚ ”‚ •‚ –º ªÈ «‚  ­º Á>ó 8‚  Åò  Çò" Èò& Ò‚  Ñ‚  ó‚  ‘‚  ²ô'ftY Ä‚ à‚ ð‚ ëg¼4j 4º ¾º $º $Ⱥ+ $Ⱥ 3'ò.Jf =±B ÆÈ,.<f ÇM ƒ  Ä» ×ôò%æ å‚ æ¬ ç‚ ¼º Œº òåJ‚/  ÷ÉJtX…»yóttXLgy/ ‚‚‚|äJJtt$‚‡/gôÊš'Í*yž¬KÉÉ<Bi‚<%ä廂‚%äæ‚‚%äæò<»ò<¼[l‚¼///òi<><><>q¥ó?"&ºg…­fB‚ä. ò X‚fJÈÖ<º×@ºÈXÖÀtfž*uÈ KÈ#ÄBäï;Ö¸;Èz+Dœº:JäJ ûº! º% õÈòJ" ü¼» ü¼» ÏMuô»u,­  Ƽ» Ƽ» êô×»  » Ÿ‚  œº ›º" øº# ûÌ»×7# ûÌ»×7" øº$ ߺ$ ßÈò ¨‚% À¤‚X= ‡º ºÉ) sX ) ”» ¾» ”ƒ  œ„K ‚» ”¾ ¾º ɺ& ¤A/sºhK • ¼»» ¨‚ ãç(‚/  £º ¿ÊY/åºó» ¥gh ³LY £º ¿ÊY/åºó» ³LY ¸ÊY/! ª‚ ' ΂' Õ‚" øº# ܾ׻# ÷@g'" øº# ܾ׻# ÷@g'' ΂' Õ‚ ‹»  ï»»" øº( ÀÌ­0ƒ°Aw. ž ˆ„­» À‚ ù"CºtºÖ¬ t X JÁwä f' Õ‚# Ì@ ‘0ƒ»*zwX ž" öò" øº' ì=' Õ‚# Ì@ ‘0ƒ»*zwX ž" öò" øº' ì=# ¿&»ñh# ¿&»ñh# ÿó' ì=# ÿó' ì= û#' Õ‚ èó$" øº) .…K' „º Ùó ÂK ò‚' ΂' Õ‚' ΂' Õ‚' „ò' „ò" öò" öò" ðº äƒ" öò' Õ‚' ì=' ΂' ΂! º,º!  ! º èºäº èº! &ºäº! &º Úºäº Úº •ºäº •º ‡ºäº ‡º †>»võ tº*tXJº4òž'É —ôgz„óWóWƒWƒX J È tY ¦» ©» 󼃻 ʼ! ϼ! Ô¼! Ùô0\u æø2! ă ƃ ÈL _ZN10wxDateTime2Tm7AddDaysEi_ZNSt6vectorIsSaIsEE6assignEmRKs__is_pointer_ZNSt4listIP10wxMenuItemSaIS1_EE6resizeEmS1__S_appparent_ZN10wxDateTime9ParseTimeERK10wxCStrDatavector >_ZN9__gnu_cxx13new_allocatorIPK17wxEventTableEntryE10deallocateEPS3_m__rehash_policy_ZNK10wxDateTime8SubtractERKS__ZN14wxFormatString12InputAsWCharEv_ZNKSt6vectorIP9wxToolTipSaIS1_EE5beginEv_ZNKSt9type_info4nameEv_ZNK10wxTimeSpan8GetHoursEv_ZNKSt6vectorIP12wxEvtHandlerSaIS1_EE8max_sizeEv_ZNSt6vectorIsSaIsEE6resizeEmswxCreateApp_Pairm_diff~new_allocator_ZN9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEEmIEl_ZNKSt6vectorIPKvSaIS1_EE2atEm_ZNKSt12_Vector_baseIlSaIlEE13get_allocatorEv_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS4_SaIS4_EEEEEdeEvpair_ZNK12wxStringHashclEPKcwxToolTipload_factor_ZN16wxHashTable_Node7SetDataEP8wxObjectwxUP_M_hook_ZNK9wxUniCharcvsEv_ZNSt6vectorIdSaIdEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPdS1_EE_ZNK10wxDateTime7GetHourERKNS_8TimeZoneE_ZNK17wxULongLongNativeleERKS__ZNK8wxString8iteratorltERKS0_eofbit_ZNK20wxHashTableBase_Node13GetKeyIntegerEvoperator unsigned char const*_ZNSt3tr18__detail9_Map_baseI8wxStringSt4pairIKS2_S2_ESt10_Select1stIS5_ELb1ENS_10_HashtableIS2_S5_SaIS5_ES7_13wxStringEqual12wxStringHashNS0_18_Mod_range_hashingENS0_20_Default_ranged_hashENS0_20_Prime_rehash_policyELb0ELb0ELb1EEEEixERS4_new_allocator, false>*>_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEmRKS1_GetNumValue_ZN9__gnu_cxx14__alloc_traitsISaIiEE10deallocateERS1_PimTryValidatorbool_ZNK9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEdeEv__is_move_iterator__conditional_type*, std::pair*>_Distance_SC_ASYNCHRONOUS_IO_ZN12wxWindowBase18SetInitialBestSizeERK6wxSize_S_ateLogVTrace__traitor, std::__is_floating >wxUPDATE_UI_PROCESS_ALLSetDefaults_ZNK10wxTimeSpan8SubtractERKS__SC_AIO_PRIO_DELTA_MAXistream_ZNSt6vectorImSaImEE6assignEmRKm_ZN10wxDateTime11MakeFromUTCEbwxID_DEFAULT_ZNK9__gnu_cxx17__normal_iteratorIPP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEEdeEvDiffAsDateSpan_ZNSt6vectorIdSaIdEEaSERKS1_wxClassInfo_M_transferSetLabelCanApplyThemeBorderwxShowEffectLength_ZNKSt6vectorI8wxStringSaIS0_EE14_M_range_checkEm_SC_XOPEN_XCU_VERSION_ZNK9__gnu_cxx17__normal_iteratorIPP11wxClassInfoSt6vectorIS2_SaIS2_EEEptEvwxID_SORT_ASCENDINGiterator_traits_ZNSs6assignERKSsmmHasMultiplePages_ZNSt14_List_iteratorIP10wxMenuItemEC2EPNSt8__detail15_List_node_baseE_ZN9__gnu_cxx14__alloc_traitsISaIPvEE7destroyERS2_PS1_wxID_HELP_COMMANDSMakeGMT_SC_THREAD_SAFE_FUNCTIONS_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEEEEpLElwxID_CDROM_ZN9__gnu_cxx13new_allocatorIdE8allocateEmPKv_ZNKSt6vectorIdSaIdEE4backEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS2_SaIS2_EEEEEppEvn_cs_precedesiterator_traits_M_end_of_storagewxEVT_JOY_BUTTON_DOWN_ZN14wxThreadHelper6CreateEj_ZN9__gnu_cxx14__alloc_traitsISaIlEE10deallocateERS1_Plm_ZNK17wxULongLongNative5GetHiEv_ZNKSs17find_first_not_ofEPKcmm__is_normal_iterator<__gnu_cxx::__normal_iterator > > >_ZNK9__gnu_cxx13new_allocatorIP9wxToolTipE7addressERS2__ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE15_M_erase_at_endEPS1__ZNSt6vectorIPKvSaIS1_EE4backEv__traitor, std::__is_floating >_ZNSt6vectorIP12_GdkDrawableSaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDoSetPathShape_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE4backEvwxMUTEX_DEFAULTtm_secboth_ZN10wxDateTime15ConvertYearToBCEi_ZN10wxDateSpanmIERKS_NameFlags_Hash_node, false>_SC_LEVEL1_DCACHE_ASSOC_Ios_Iostateatol_ZNK17wxULongLongNativermERKS__ZNSt12_Vector_baseIiSaIiEE12_Vector_impl12_M_swap_dataERS2_~wxAsyncMethodCallEvent_ZNK9__gnu_cxx13new_allocatorISt10_List_nodeIP10wxMenuItemEE8max_sizeEvTruncatereverse_iterator<__gnu_cxx::__normal_iterator > > >__are_samepop_backwxBRUSHSTYLE_HORIZONTAL_HATCHOnObjectDestroy_ZNSt6vectorIlSaIlEE18_M_fill_initializeEmRKl_ZN8wxString21reverse_iterator_implINS_14const_iteratorEEppEivector >IsStrictlyBetween_ZN8wxString12From8BitDataEPKc_ZN8wxString21reverse_iterator_implINS_14const_iteratorEEppEv_ZN8wxStringlsERK22wxScopedCharTypeBufferIwE_ZN14wxMenuItemList22compatibility_iteratorptEvwxVariantDatawxTHREAD_NO_RESOURCEwxArray_SortFunction_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS2_SaIS2_EEEEEmmEi_ZNK9__gnu_cxx13new_allocatorIiE7addressERi_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS2_SaIS2_EEEEEmmEv_ZNSt12_Vector_baseIP9wxToolTipSaIS1_EE19_M_get_Tp_allocatorEv_ZNK12wxUniCharRefneERK9wxUniCharimplmax_sizewxFONTENCODING_MACICELANDIC_ZNKSt6vectorIP12wxEvtHandlerSaIS1_EE6rbeginEv_ZNK20wxMDIParentFrameBase14GetActiveChildEv_ZNKSbIwSt11char_traitsIwESaIwEE13get_allocatorEv_ZN16wxAppInitializerC2EPFP12wxAppConsolevE_ZNK20wxEventFunctorMethodI14wxEventTypeTagI14wxCommandEventE12wxEvtHandler7wxEventS3_E12GetEvtMethodEv_ZNSs9_M_assignEPcmc_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5emptyEvreverse_iterator<__gnu_cxx::__normal_iterator > > >wxTHREAD_WAIT_YIELD_Hashtable, std::allocator >, std::_Select1st >, wxStringEqual, wxStringHash, std::tr1::__detail::_Mod_range_hashing, std::tr1::__detail::_Default_ranged_hash, std::tr1::__detail::_Prime_rehash_policy, false, false, true>wxMaximizeEvent_ZN9__gnu_cxx14__alloc_traitsISaIP12wxEvtHandlerEE17_S_select_on_copyERKS3_wxFONTENCODING_MACBURMESE_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEvYears_ZN9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS2_SaIS2_EEEmmEi_ZNK8wxString5rfindEPKcmm_ZNKSt6vectorI8wxStringSaIS0_EE2atEm_ZN9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS2_SaIS2_EEEmmEv_ZN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEmIElwxPaintEvent__is_move_iterator<__gnu_cxx::__normal_iterator > > >~pair_ZNK14wxEventTypeTagI15wxMaximizeEventEcvRKiEvFindClass_ZN9wxUniCharaSERK12wxUniCharRef_ZNK12wxUniCharRefeqERK9wxUniChar_ZNKSt6vectorIPK17wxEventTableEntrySaIS2_EE4rendEv_ZNSt6vectorIiSaIiEE5eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EES5__ZN9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS1_SaIS1_EEEppEi_ZNK12wxWindowBase22CanBeOutsideClientAreaEv_M_incr_SC_TRACE_INHERIT_ZN9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS1_SaIS1_EEEppEvGetFirstPosToImplwxID_REVERT_TO_SAVED_SC_SSIZE_MAX_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5eraseERS3__ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEEdeEv_ZNK12wxWindowBase10GetMaxSizeEv_ZN9__gnu_cxx13new_allocatorIPvE10deallocateEPS1_m_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEEmmEi_ZNK10wxDateSpaneqERKS__ZNKSt6vectorIlSaIlEE6rbeginEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEEmmEv_ZNK8wxString6wc_strERK8wxMBConv_ZN12wxEvtHandler14SetNextHandlerEPS_wxDefaultCoord_ZN12wxDataFormat5SetIdEP8_GdkAtomOnKill_ZNK8wxString4LeftEm_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS2_SaIS2_EEEEEixEl_ZN12wxUniCharRefaSEl_ZNK8wxString7ToULongEPmi__traitor, std::__is_floating >_ZNKSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE5beginEv__is_move_iterator<__gnu_cxx::__normal_iterator > > >FromHi8bitaddress_ZNKSt6vectorIP9wxToolTipSaIS1_EE4rendEvGetEndDSTlist_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEEdeEv_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_fputwc_SC_V6_LPBIG_OFFBIG_ZN8wxString6assignENS_14const_iteratorES0__ZNK16wxLongLongNative3AbsEv_ZNK10wxDateTime14GetMillisecondERKNS_8TimeZoneEfputwsRemoveLast_ZN22wxScopedCharTypeBufferIwE4Data3SetEPwmeventType_Hash_node, false>Find_ZN20wxArray_SortFunctionIPK17wxEventTableEntryEclERKS2_S5_new_allocator, false>*>wxID_HOME_ZN8wxStringpLERKS__ZN15wxLogRecordInfo4CopyERKS__ZN10wxTimeSpan5WeeksEl~wxHashTableBase_NodeArg_ShortIntPtrto_char_type_ZNKSt6vectorImSaImEE5emptyEv_ZN9__gnu_cxx14__alloc_traitsISaImEE8max_sizeERKS1_IsEarlierThan_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2_mmGetSecond_ZN16wxAppConsoleBase10CallOnInitEv_ZN10wxDateTime8SubtractERK10wxTimeSpan_ZN7wxPoint11SetDefaultsERKS__ZNK14wxMenuItemList7IsEmptyEv_ZNSt6vectorImSaImEE14_M_fill_assignEmRKm_ZN20wxTopLevelWindowBase14OSXSetModifiedEb_ZN29wxEventTableEntryPointerArray6InsertEPK17wxEventTableEntrymm__are_samewxID_MDI_WINDOW_LASTAfterID_HelloShouldPreventAppExit_M_init~wxCriticalSection_ZNSt6vectorIdSaIdEE5clearEv_ZNKSt6vectorIiSaIiEE8capacityEv_ZNK9__gnu_cxx17__normal_iteratorIPKwSbIwSt11char_traitsIwESaIwEEEdeEv_ZN10wxDateTime14GetLastWeekDayENS_7WeekDayENS_5MonthEiwxWESTSetMinClientSize_ZNK12wxDataFormat7GetTypeEv_ZN8wxString7ImplStrEPKcmRK8wxMBConv_ZNSt4listIP10wxMenuItemSaIS1_EE6uniqueEv_ZNSt4listIP10wxMenuItemSaIS1_EE7reverseEv_ZNK8wxString3CmpERK22wxScopedCharTypeBufferIcE_ZNK12wxUniCharRefgtEcShowWithEffect_ZNK12wxUniCharRefgtEh_ZNK12wxUniCharRefgtEi_ZNK12wxUniCharRefgtEj_ZNK12wxUniCharRefgtEl_ZNK12wxUniCharRefgtEm_ZNK12wxUniCharRefgtEs_ZNK12wxUniCharRefgtEtnew_allocator_ZNK12wxUniCharRefgtEwhasher_ZNK12wxUniCharRefgtEy__traitor, false>*>, std::__is_floating, false>*> >_ZN10wxTimeSpan7MinutesElsm_classTableIsWord_ZN10wxDateTime13ParseDateTimeERK8wxStringPNS0_14const_iteratorE_ZN22wxScopedCharTypeBufferIcE14CreateNonOwnedEPKcm__is_integer, false>*>_ZNK16wxLongLongNativegeEloperator wchar_tmove_ZN10wxTimeSpanmLEiwxFONTENCODING_MACCHINESESIMPwxCriticalSectionTypewxEmptyString_ZN8wxString6appendEmc_ZN8wxString6appendEmhwxITEM_NORMAL_ZNK9wxUniCharcvlEv_S_scientific_ZN20wxEventFunctorMethodI14wxEventTypeTagI14wxCommandEventE12wxEvtHandler7wxEventS3_ED2Ev_ZN8wxString6appendEmw_SC_LEVEL1_DCACHE_SIZEGetAmPmStringswxPOSIX_GROUP_READ_ZN12App_PnlValueC2Ev_ZNK9wxUniChargtERKS__ZNSt6vectorIiSaIiEE4backEv_ZN17wxULongLongNativerSEi_ZNSt6vectorIP11wxClassInfoSaIS1_EE6rbeginEv__normal_iterator, std::allocator > >_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE5beginEv~wxMenuItemListoPosn__is_normal_iterator<__gnu_cxx::__normal_iterator > > >SetFocus_ZN12wxWindowBase14ShowWithEffectE12wxShowEffectjm_deleteContents__is_byte<_GdkDrawable*>_ZNK9__gnu_cxx17__normal_iteratorIPsSt6vectorIsSaIsEEEdeEv_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS3_SaIS3_EEEEEptEvInputAsStringGetMillisecond_ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2_mmwxBRUSHSTYLE_FIRST_HATCH_ZNSt4listIP10wxMenuItemSaIS1_EE25_M_check_equal_allocatorsERS3_wxStatusBar__addressof_ZNSt6vectorIlSaIlEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPlS1_EERKl_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS2_SaIS2_EEEEEpLEl_ZNSt12_Vector_baseIPKvSaIS1_EE19_M_get_Tp_allocatorEvline_ZNK10wxDateTime6FormatERK8wxStringRKNS_8TimeZoneE__typeconst_iteratorwxID_FILE1wxID_FILE2wxID_FILE3wxID_FILE4wxID_FILE5wxID_FILE6wxID_FILE7wxID_FILE8wxID_FILE9_ZNK9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS2_SaIS2_EEEptEvCountry_Unknown_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEEEEmIEl__is_floatingLastwxFONTENCODING_MACBENGALIwxBITMAP_TYPE_PICT_ZNSt6vectorIiSaIiEE6assignEmRKi__is_move_iterator<__gnu_cxx::__normal_iterator > > >_ZNKSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE14_M_range_checkEmCreateOwnedwxEventTypeTagShrinklocal_iterator_ZNK11wxClassInfo17GetBaseClassName1Ev_ZNK12wxUniCharRefgtEx_ZNKSt6vectorIPK17wxEventTableEntrySaIS2_EE5beginEv_ZN9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS2_SaIS2_EEEpLEl__is_move_iteratorDoInsertNode_ZN16wxLongLongNativepLERKS__ZNSs12_S_constructEmcRKSaIcE_ZNK16wxLongLongNativedvERKS__ZNKSt6vectorIcSaIcEE12_M_check_lenEmPKc_ZNK9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEE4baseEvDoGetBestClientSize_SC_PII_OSI_S_construct_ZNSt6vectorIPvSaIS0_EE9push_backERKS0_GetClientSizewxScrollBarNameStr_ZNSt6vectorIP9wxToolTipSaIS1_EE9push_backERKS1__ZNK8wxString17find_first_not_ofEcm_ZNSt6vectorIPKvSaIS1_EE2atEm_ZN8wxStringlsE12wxUniCharRef__is_integer_ZN22wxScopedCharTypeBufferIcED2EvIsBetween_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS3_SaIS3_EEEEEplEl_vptr.wxThreadHelper_SC_PASS_MAXwxIDLE_PROCESS_ALLrbeginwxToolBarNameStrm_nxtallocate_ZNKSt3tr18__detail15_Hash_code_baseI8wxStringSt4pairIKS2_mESt10_Select1stIS5_E13wxStringEqual12wxStringHashNS0_18_Mod_range_hashingENS0_20_Default_ranged_hashELb0EE10_M_compareERS4_mPNS0_10_Hash_nodeIS5_Lb0EEE_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEEpLEl_ZNSt6vectorIdSaIdEE7reserveEm_ZNK10wxDateSpan8SubtractERKS__ZNKSt6vectorIiSaIiEE5beginEv~wxControlContainer_ZNK9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS2_SaIS2_EEEdeEv_SC_POLL_ZN8wxString21reverse_iterator_implINS_14const_iteratorEEmmEi_ZNK10wxDateTime15GetLastMonthDayENS_5MonthEi_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEEptEv__unique_keys_ZN8wxString21reverse_iterator_implINS_14const_iteratorEEmmEv_ZNSt6vectorIPvSaIS0_EE4backEv_lock_ZN17wxMDIClientWindowC2Ev_ZNK8wxString8IsSameAsERK22wxScopedCharTypeBufferIcEbNativeFormatwxEVT_AUX1_DOWNgetwc_ZNK8wxString8ToCULongEPmi_ZNK9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS1_SaIS1_EEE4baseEvm_classNamediv_tchar_traits_ZN7wxPointmIERK6wxSize_ZNK12wxWindowBase18GetWindowStyleFlagEv_ZNK9__gnu_cxx13new_allocatorIlE7addressERl_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE12_M_find_nodeEPNSA_10_Hash_nodeIS4_Lb0EEERS3_mwxCHK_UNCHECKED__curSetMaxClientSize_ZN9__gnu_cxx17__normal_iteratorIPPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEEppEi_ZNSt6vectorIcSaIcEE5frontEv_ZNKSt6vectorIP11wxClassInfoSaIS1_EE3endEv_ZN9__gnu_cxx17__normal_iteratorIPPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEEppEvwxEventTableEntryGetDropTargetconst_pointer~wxEventFunctorMethod_ZNK8wxString21reverse_iterator_implINS_8iteratorEEdeEvwxEventConnectionRefwxEVT_AUX1_DCLICK_ZNKSt6vectorIlSaIlEE4dataEv_ZN14wxMenuItemList6InsertERKNS_22compatibility_iteratorEP10wxMenuItemallocator__traitor, std::__is_pointer >vswprintfm_keytm_wday__normal_iterator > >_ZNSt6vectorIiSaIiEE15_M_erase_at_endEPi__is_arithmeticwxID_ZOOM_INiterator_traitsreverse_iterator<__gnu_cxx::__normal_iterator > > >back_ZNK10wxDateSpan6NegateEv_ZN9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS1_SaIS1_EEEmmEi_ZNKSt6vectorIPK17wxEventTableEntrySaIS2_EE6rbeginEv_ZN9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS1_SaIS1_EEEmmEv_ZNK14wxMenuItemListixEmlength_ZN8wxString9FromAsciiEPKc_SC_RAW_SOCKETSint_n_sep_by_space_ZN8wxString9FromAsciiEPKh_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmPKwmwxStrlen_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE16_M_allocate_nodeERKS4__ZNSs7replaceEmmmc_ZNK8wxString17find_first_not_ofEhm_ZNK8wxString7ToCLongEPliAlloc_ZNSt3tr115__unordered_mapI8wxStringm12wxStringHash13wxStringEqualSaISt4pairIKS1_mEELb0EED2Ev_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE6rbeginEv_ZN7wxMutex7TryLockEv_ZNK14wxMenuItemList17GetDeleteContentsEv_SC_AVPHYS_PAGESms_suspendCount_ZN8wxStringaSE9wxUniChar_M_dispose_SC_RE_DUP_MAX_ZN9__gnu_cxx14__alloc_traitsISaIP9wxToolTipEE10deallocateERS3_PS2_m_ZN9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEEppEi_ZN9__gnu_cxx17__normal_iteratorIP8wxStringSt6vectorIS1_SaIS1_EEEppEileading_ZNSs4_Rep10_M_refcopyEv__traitor, std::__is_floating >__is_move_iterator<__gnu_cxx::__normal_iterator<_GdkDrawable**, std::vector<_GdkDrawable*, std::allocator<_GdkDrawable*> > > >_ZN9__gnu_cxx17__normal_iteratorIP8wxStringSt6vectorIS1_SaIS1_EEEppEv__is_move_iterator<__gnu_cxx::__normal_iterator > > >_ZNKSt6vectorIPvSaIS0_EE5beginEvwxID_INFO_ZNKSt6vectorIlSaIlEE14_M_range_checkEm_ZNK8wxString4sizeEvIsPositive__is_floating<_GdkDrawable*>_M_assign_ZNK9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS2_SaIS2_EEE4baseEv_ZNK10wxDateTime13FormatISOTimeEvoperator!_ZNKSt6vectorIP9wxToolTipSaIS1_EE6rbeginEvoperator%operator&operator*operator+operator-operator/operator<operator=operator>_ZNK9__gnu_cxx13new_allocatorImE7addressERKm_ZNK9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEE7addressERKS9__ZN10wxDateTime14SetMillisecondEtend_classinfooperator^HideWithEffect_ZNK12wxUniCharRef7UniCharEvIsNegativefirst_type_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcm_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE3endEvArg_IntPtriterator_traits<__gnu_cxx::__normal_iterator > > >operator|_ZN18wxControlContainerC2EvwxMDIParentFrame_Traits_ZNSt6vectorIPKvSaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE_ZNK10wxTimeSpan3AddERKS__ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEEEEixEl_ZNK14wxEventTypeTagI14wxTextUrlEventEcvRKiEvwxEVT_AUX2_DCLICK_SC_TRACE_EVENT_FILTERpoMenuFileiterator__is_move_iterator_ZNK11wxClassInfo7GetSizeEv_Select1st >_ZNSt6vectorIP12_GdkDrawableSaIS1_EEixEmPrepareFormatswxID_VIEW_SORTNAMEwxPOSIX_OTHERS_EXECUTEName_FullConvertToEvtHandlerwcstoull_ZN9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS2_SaIS2_EEEppEi_ZN9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS2_SaIS2_EEEppEv_ZNKSs4rendEv__is_byte_ZN9__gnu_cxx13new_allocatorIP9wxToolTipE7destroyEPS2__Map_base, std::_Select1st >, true, std::tr1::_Hashtable, std::allocator >, std::_Select1st >, wxStringEqual, wxStringHash, std::tr1::__detail::_Mod_range_hashing, std::tr1::__detail::_Default_ranged_hash, std::tr1::__detail::_Prime_rehash_policy, false, false, true> >reverse_iterator >_SC_NL_LANGMAX_ZNSt8__detail15_List_node_base10_M_reverseEvItemwxID_MDI_WINDOW_PREV_ZNK7wxMutex4IsOkEv__is_pointer, false>*>DoRemoveNode_ZNK9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEE4baseEvwxEventTypeTag_ZNK8wxString12find_last_ofEPKcmm_Ios_SeekdirchildCountry_M_unhook_ZN8wxString6insertENS_8iteratorENS_14const_iteratorES1_fmtflagsm_eventType_ZN14wxMenuItemList4SortEPFiPKvS1_E_ZN9__gnu_cxx13new_allocatorISt10_List_nodeIP10wxMenuItemEED2Evsecond_argument_type_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE9push_backERKS1_GetCurrentMonthFrance_ZN8wxString6AppendERKS__ZN8wxString15MakeCapitalizedEv_ZN16wxLongLongNativerSEi_ZNK9__gnu_cxx13new_allocatorIcE8max_sizeEvSubstrBufFromType >wxCharTypeBufferBase_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE3endEv_M_mutate_ZNK16wxLongLongNativemiERKS__ZNK9__gnu_cxx17__normal_iteratorIP8wxStringSt6vectorIS1_SaIS1_EEEixEl__is_floating, false>*>_ZN10wxDateTime8GetTmNowEvwxFD_FILE_MUST_EXIST_ZN9__gnu_cxx13new_allocatorIP12wxEvtHandlerE8allocateEmPKv_ZNSaIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEED2Ev_ZNKSt6vectorIiSaIiEE4dataEvwxID_CLOSE_ZNK8wxString3CmpERK22wxScopedCharTypeBufferIwEmbstate_tGMT_9HasCapturewxFONTENCODING_MACKHMER_ZN16wxLongLongNativeaSERK17wxULongLongNativembstowcswxDirDialogNameStrwxDF_PENDATA_ZN9__gnu_cxx14__alloc_traitsISaIPKvEE7destroyERS3_PS2__ZN12wxEvtHandler12TryValidatorER7wxEventwxDF_TIFF__detail_ZNK9wxUniCharmiEc_SC_THREAD_DESTRUCTOR_ITERATIONS_ZNK9wxUniCharmiEh_ZN8wxThread6IsMainEv_ZNSt6vectorIdSaIdEE5eraseEN9__gnu_cxx17__normal_iteratorIPdS1_EE_SC_LEVEL2_CACHE_SIZE_ZN9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS2_SaIS2_EEEppEi_SC_JOB_CONTROL_ZNK10wxDateTime10IsSameTimeERKS__ZNK9wxUniCharmiEw_ZN9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS2_SaIS2_EEEppEv_M_nodem_objectConstructorwxConvUTF8Ptrrebind_ZNKSs13find_first_ofEPKcm_ZN17wxEventTableEntryaSERKS___traitor, false>*>, std::__is_floating, false>*> >__is_pointer_ZN8wxString21reverse_iterator_implINS_14const_iteratorEEpLEl_ZN9__gnu_cxx13new_allocatorI8wxStringE8allocateEmPKv_ZN16wxAppConsoleBase22SetInitializerFunctionEPFP12wxAppConsolevE_ZN22wxScopedCharTypeBufferIwEaSERKS0__ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS2_SaIS2_EEEEEmIEl_S_eofbit_ZNKSt6vectorIP12_GdkDrawableSaIS1_EE6rbeginEvwxFONTENCODING_UTF32BE_M_copy_ZN10wxDateTime10SetCountryENS_7CountryEoverflow_arg_area_ZNK10wxTimeSpan10IsPositiveEvIsWestEuropeanCountry_ZNSt6vectorIPvSaIS0_EE2atEmGetYearSetYearToStdWstringCountry_Default_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE6insertENSA_25_Hashtable_const_iteratorIS4_Lb0ELb0EEERKS4__ZNK10wxCStrDatacvPKcEv_ZN9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEE7destroyEPS9__ZN8wxString7PrintfVERKS_P13__va_list_tagEmptyputwcharTryBefore_ZN9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS2_SaIS2_EEEmIElstrtoul_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEE4baseEv_ZNSt6vectorIP11wxClassInfoSaIS1_EE6resizeEmS1__ZNSs4_Rep26_M_set_length_and_sharableEmallocator_type__numeric_traits_integerAddPendingEventwxMenuBase_SC_THREAD_PRIO_INHERITwctype_t__alloc_traits >_ZN10wxTimeSpanpLERKS__ZNKSt6vectorIP9wxToolTipSaIS1_EE8capacityEvwxBITMAP_TYPE_PICT_RESOURCE_ZN9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS1_SaIS1_EEEpLEl_SC_ADVISORY_INFOwxScopedCharTypeBuffer_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS3_SaIS3_EEEEEmiEl_ZNSt6vectorIP11wxClassInfoSaIS1_EE4backEv_SC_TIMEOUTSMillisecondcaseCompareUNow_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEEmIEl_ZN8wxStringC2Ev__is_normal_iteratorConvertValueToTimezone_ZN9__gnu_cxx24__numeric_traits_integerIlE5__minE_SC_2_C_VERSIONwxEVT_SET_CURSORwxPENSTYLE_STIPPLE_M_swapwxLOG_Infosort_ZNSt10_List_baseIP10wxMenuItemSaIS1_EE10_List_implD2Ev_ZNK8wxString17find_first_not_ofEwm_SC_SCHAR_MAX_ZN9__gnu_cxx14__alloc_traitsISaIPK17wxEventTableEntryEE7destroyERS4_PS3_filenamebase_Atomic_word_ZNKSt6vectorIPvSaIS0_EE12_M_check_lenEmPKc_ZN8wxLogger3LogElRK14wxFormatString_ZNKSt6vectorIlSaIlEE4rendEvNumber_ZN9__gnu_cxx17__normal_iteratorIPPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEEmmEi_ZNK5wxAny6IsNullEv_M_refdata_ZN9__gnu_cxx13new_allocatorINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS5_ELb0EEEED2Ev_ZN9__gnu_cxx14__alloc_traitsISaImEE10_S_on_swapERS1_S3__ZNKSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE4dataEv_next_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE13get_allocatorEv_SC_UINT_MAX_ZNK8wxString21reverse_iterator_implINS_8iteratorEEmiERKS2_Hours_ZNSt4listIP10wxMenuItemSaIS1_EE4sortEvmainn_sign_posn_ZN16wxCharTypeBufferIcEaSERKS0_ToAscii_ZNSt12_Vector_baseIcSaIcEE12_Vector_impl12_M_swap_dataERS2__ZN8wxLogger3LogERK14wxFormatStringwxORIENTATION_MASK_ZN10wxDateTime9SetSecondEt_ZN12wxWindowBase16DissociateHandleEv_ZNK16wxLongLongNativegtEl_ZNSt6vectorIdSaIdEE5beginEv_S_copy_chars_ZN10wxDateTime11ParseFormatERK8wxStringS2_RKS_PNS0_14const_iteratorE_ZNSt12_Vector_baseIdSaIdEE12_Vector_impl12_M_swap_dataERS2_InitHashTable_SC_CHARCLASS_NAME_MAXMatches_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE6resizeEmS1__ZNSt14_List_iteratorIP10wxMenuItemEppEi_ZNSt12_Vector_baseIP12_GdkDrawableSaIS1_EE19_M_get_Tp_allocatorEvwxMUTEX_MISC_ERROR_ZNSt6vectorIiSaIiEE6insertEN9__gnu_cxx17__normal_iteratorIPiS1_EEmRKi_ZNSt14_List_iteratorIP10wxMenuItemEppEv_ZNK5wxAny7GetTypeEvm_lastIdwxDF_BITMAP_ZNK9__gnu_cxx17__normal_iteratorIPPvSt6vectorIS1_SaIS1_EEEplElconst_local_iteratorwxID_REVERT__traitor, std::__is_floating >wxID_DELETESetFromDOSevTypeiterator_traits<__gnu_cxx::__normal_iterator<_GdkDrawable* const*, std::vector<_GdkDrawable*, std::allocator<_GdkDrawable*> > > >_ZN10wxTimeSpan4DaysElFormat_ZNKSt6vectorIPK17wxEventTableEntrySaIS2_EE4sizeEv_ZN9__gnu_cxx17__normal_iteratorIP8wxStringSt6vectorIS1_SaIS1_EEEmmEi_ZN9__gnu_cxx17__normal_iteratorIP8wxStringSt6vectorIS1_SaIS1_EEEmmEv_ZNKSt6vectorIP11wxClassInfoSaIS1_EE4dataEv_ZN14wxEventFunctorC2Ev_ZN9__gnu_cxx13new_allocatorISt4pairIK8wxStringS2_EED2Evshrink_ZNKSt6vectorIPKvSaIS1_EE5frontEv_ZNK10wxDateTime10ToTimezoneERKNS_8TimeZoneEb~wxAnywxFONTENCODING_MACARMENIAN__normal_iterator > >wxEVT_NC_PAINTGregoriansize_type_ZN9__gnu_cxx14__alloc_traitsISaIdEE17_S_select_on_copyERKS1__ZNK8wxString4FindERK22wxScopedCharTypeBufferIcEMultiply_ZNK10wxDateTimeeqERKS__ZNK16wxLongLongNativemlEl_ZN22wxScopedCharTypeBufferIwE14CreateNonOwnedEPKwm_ZN8wxLogger12DoLogWithPtrEPvPKwz_ZNKSt6vectorIPK17wxEventTableEntrySaIS2_EEixEmnew_allocatorwxIMAGE_QUALITY_NORMAL_ZN10wxDateTime7MakeUTCEbwxFONTENCODING_UTF32LEToStdString_Iftrue_ZN9__gnu_cxx14__alloc_traitsISaIP12_GdkDrawableEE10deallocateERS3_PS2_m_ZN9__gnu_cxx14__alloc_traitsISaIcEE10_S_on_swapERS1_S3__ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE14_M_fill_assignEmRKS2__ZNK12wxWindowBase21GetContentScaleFactorEv_ZNKSt6vectorIP9wxToolTipSaIS1_EE4sizeEv_ZNK10wxTimeSpangeERKS__ZNK9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEixEl_ZN29wxEventTableEntryPointerArray6RemoveEPK17wxEventTableEntry_SC_MAPPED_FILESequal_rangeDeleteValuewxEventFunctorMethod, wxEvtHandler, wxEvent, wxEvtHandler>_ZNK8wxString7MatchesERKS__ZNK9wxUniChar7IsAsciiEvDecToIfSpecifiedms_locked_ZNKSbIwSt11char_traitsIwESaIwEE4findERKS2_m__is_pointerStrip_ZN9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS2_SaIS2_EEEmmEiwxPOSIX_USER_EXECUTE_SC_LEVEL1_ICACHE_ASSOC_ZN9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS2_SaIS2_EEEmmEv_ZNK11wxFrameBase12GetStatusBarEv_M_fill_assign_ZN10wxTimeSpan12MillisecondsE16wxLongLongNative_ZNSt6vectorIP11wxClassInfoSaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEmRKS1__ZNK12wxWindowBase16GetMaxClientSizeEvTo8bit_ZNK8wxString12find_last_ofERK22wxScopedCharTypeBufferIwEmm_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE8pop_backEvoperator char_SC_SCHAR_MINrebind, false> >wxEVT_DISPLAY_CHANGED_ZN10wxDateTime15ParseRfc822DateERK8wxStringwxFONTENCODING_MACDINGBATSintegral_constant_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIS3_S2_EES6_GetNext_ZNK8wxString5FirstE9wxUniChar_ZNK10wxDateTime3AddERK10wxTimeSpanGetEnglishWeekDayNamewxFONTENCODING_MACETHIOPICexStyle_SC_SEMAPHORESIsValid_ZN8wxString10FromDoubleEdi_ZN16wxTypeIdentifierneERKS__ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEEixEl_ZNK12wxWindowBase18GetBestVirtualSizeEv_List_node_base~_List_impl_ZNK8wxString8iteratorgtERKS0__ZNK9wxUniChargeEyTimeZoneClone_S_beg_ZN9__gnu_cxx13new_allocatorIP26wxDateTimeHolidayAuthorityE10deallocateEPS2_m_ZNKSs4findEPKcmmiterator_ZNSs9_M_mutateEmmmnew_allocatorCreateConstIterator_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEwxID_VIEW_SORTSIZE_ZNSt3tr18__detail12_Rehash_baseINS0_20_Prime_rehash_policyENS_10_HashtableI8wxStringSt4pairIKS4_mESaIS7_ESt10_Select1stIS7_E13wxStringEqual12wxStringHashNS0_18_Mod_range_hashingENS0_20_Default_ranged_hashES2_Lb0ELb0ELb1EEEE15max_load_factorEf_ZN9__gnu_cxx14__alloc_traitsISaIdEE7destroyERS1_Pd_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EEixEmwxBITMAP_TYPE_ICON_RESOURCE_ZNKSbIwSt11char_traitsIwESaIwEE5emptyEv__normal_iterator > >GetWindowMenu_SC_ARG_MAX_M_bucketswxID_RESET__is_pointer_ZNSt6vectorImSaImEE5frontEv_ZNSbIwSt11char_traitsIwESaIwEE7_M_dataEPw_ZN9__gnu_cxx14__alloc_traitsISaIdEE8max_sizeERKS1__ZN12wxDataFormat7SetTypeE14wxDataFormatId_ZNK17wxULongLongNative8GetValueEvwxBITMAP_TYPE_GIF_ZNK8wxString8iteratorgtERKNS_14const_iteratorEsm_eventTablewxScopedCharBuffer_ZNK9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEdeEv_ZNK9__gnu_cxx13new_allocatorIsE8max_sizeEv_ZNK9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEixEl_ZNK8wxString8IsSameAsE9wxUniCharb_ZN10wxTimeSpan7SecondsE16wxLongLongNative_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEE4baseEv_SC_FILE_ATTRIBUTES_ZNK8wxString16find_last_not_ofE12wxUniCharRefmwxIfImpl_ZN9__gnu_cxx13new_allocatorISt4pairIK8wxStringmEEC2EvwxHashTable_Nodeoperator short unsigned int_ZNK8wxString5RightEm_ZNSt6vectorIsSaIsEE7reserveEm_ZN9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS2_SaIS2_EEEmmEi_M_check_len_ZN9__gnu_cxx13new_allocatorISt4pairIK8wxStringmEE8allocateEmPKv_ZN9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS2_SaIS2_EEEmmEv_ZNSt6vectorIPvSaIS0_EE5frontEvwxID_COPYm_count_ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwmmwxNavigationEnabledwxDateTime_t_ZNK8wxString5FirstERKS_forward_iterator_tagutf8_striterator_traits_SC_2_UPE_ZNSt6vectorIsSaIsEE6rbeginEv_ZNSt12_Vector_baseIP26wxDateTimeHolidayAuthoritySaIS1_EE12_Vector_impl12_M_swap_dataERS4_adjustfieldhour_ZN8wxString21reverse_iterator_implINS_14const_iteratorEEmIElConvertedBuffer_S_bin_ZNKSt20_List_const_iteratorIP10wxMenuItemEptEv_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE11load_factorEvwxSetCursorEvent_ZNSt12_Vector_baseIP26wxDateTimeHolidayAuthoritySaIS1_EE19_M_get_Tp_allocatorEvindexConvertFromEvtHandler_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEmc_ZN19wxNavigationEnabledI8wxWindowE11RemoveChildEP12wxWindowBase~wxEventHashTable_ZNK29wxEventTableEntryPointerArray14IndexForInsertEPK17wxEventTableEntryPFiPS2_S3_E_ZN9__gnu_cxx17__normal_iteratorIPPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEEpLEldifference_type_ZNSt6vectorIlSaIlEE4swapERS1__ZN12wxRefCounter6DecRefEv_ZNK8wxWindow31GTKNeedsToFilterSameWindowFocusEv_ZN9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEE10deallocateEPS9_m_ZN12wxEvtHandler20ProcessPendingEventsEv__traitor, false>*>, std::__is_pointer, false>*> >_ZN22wxScopedCharTypeBufferIcE7StrCopyEPKcmSubstrBufFromType_ZNKSt6vectorIP12_GdkDrawableSaIS1_EE4rendEv_ZNSbIwSt11char_traitsIwESaIwEE6resizeEmiterator_traits<__gnu_cxx::__normal_iterator > > >_ZNSt11char_traitsIcE4moveEPcPKcmwxTHREAD_DETACHED_ZNKSt6vectorIP12wxEvtHandlerSaIS1_EE12_M_check_lenEmPKc_ZN16wxTypeIdentifierC2EPKc_SC_LONG_BIT_ZNK17wxULongLongNativeeqEm_ZNK8wxString7compareERKS_int_type__alloc_traits >maxH_ZNSt6vectorIPvSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0__ZN9__gnu_cxx13new_allocatorINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS5_ELb0EEEE9constructEPS8_RKS8__ZNK8wxString17find_first_not_ofEPKwmm_ZNSt6vectorIcSaIcEE6insertEN9__gnu_cxx17__normal_iteratorIPcS1_EERKc_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS3_SaIS3_EEEEE4baseEvmaxWsm_updateMode_ZNK10wxDateTime3AddERK10wxDateSpan_ZNSt11char_traitsIcE12to_char_typeERKi_ZN9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS1_SaIS1_EEEmIElFromAscii_ZN6wxSize5IncByEi_ZN16wxLongLongNative6AssignEd_M_fill_initialize_ZNKSt6vectorIlSaIlEE4sizeEvArrangeIcons_ZN9__gnu_cxx13new_allocatorI8wxStringE7destroyEPS1__ZNSt6vectorIP9wxToolTipSaIS1_EEaSERKS3__ZN9__gnu_cxx14__alloc_traitsISaI8wxStringEE10deallocateERS2_PS1_m_ZNK6wxSize16IsFullySpecifiedEv_S_comparewxEventFunctionincH_SC_V7_LPBIG_OFFBIG_ZN7FrmMain17sm_eventHashTableEGtkWidgetwxLog__lastOnAbout_ZN9__gnu_cxx17__normal_iteratorIP8wxStringSt6vectorIS1_SaIS1_EEEpLEl_ZNSt6vectorIsSaIsEE3endEv_ZNK9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS1_SaIS1_EEEixEl_ZNSt6vectorIiSaIiEE5eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EErebind, false>*>_SC_NPROCESSORS_ONLN_ZNK9__gnu_cxx17__normal_iteratorIPP12wxEvtHandlerSt6vectorIS2_SaIS2_EEEdeEvwxPOSIX_OTHERS_WRITE_ZNSt6vectorIPKvSaIS1_EE7reserveEm_Alloc_ZNK8wxString17find_first_not_ofERK22wxScopedCharTypeBufferIcEmm_ZN14wxThreadHelper5EntryEv_ZN8wxStringaSEc_ZN8wxStringaSEh_ZN8wxStringaSEiSetToYearDaywxSizeEvent_ZNSt6vectorIP9wxToolTipSaIS1_EE18_M_fill_initializeEmRKS1_wxIf_ZNK5wxAnyeqEPKc_ZN8wxStringaSEwwxStdWideString_ZNSt12_Vector_baseIdSaIdEE19_M_get_Tp_allocatorEvGMT_10GMT_11GMT_12_ZNK9__gnu_cxx17__normal_iteratorIPP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEEmiEl_ZNK5wxAnyeqEPKw_SC_BARRIERS_ZNK8wxString21reverse_iterator_implINS_14const_iteratorEE4baseEvbsearchDoFormatWchar_ZNK8wxString14const_iteratorneERKS0_wxEventTypeTag_SC_NL_NMAXwxEVT_SHOW_ZNK8wxString4findERKS_m_M_set_length_and_sharable__is_byte_ZNKSt6vectorIPvSaIS0_EE4rendEv_ZN10wxDateTime13ParseDateTimeERK8wxString_ZNK8wxWindow9GetHandleEvwxAnyNullValueType_ZNSt4listIP10wxMenuItemSaIS1_EE6rbeginEv~wxLogRecordInfo_ZNK17wxULongLongNativeneEm_ZNSt11char_traitsIcE4findEPKcmRS1__ZNSt14_List_iteratorIP10wxMenuItemEmmEi_ZNKSt6vectorIPK17wxEventTableEntrySaIS2_EE2atEm_ZNSt3tr18__detail15_Hash_code_baseI8wxStringSt4pairIKS2_mESt10_Select1stIS5_E13wxStringEqual12wxStringHashNS0_18_Mod_range_hashingENS0_20_Default_ranged_hashELb0EE7_M_swapERSC__SC_MEMORY_PROTECTIONAsUnsignedChar__is_floating_ZNSt14_List_iteratorIP10wxMenuItemEmmEv_ZN9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS2_SaIS2_EEEpLEl_ZNSt12_Vector_baseIP12wxEvtHandlerSaIS1_EE11_M_allocateEm~wxThreadHelper_ZNSt12_Vector_baseIPK17wxEventTableEntrySaIS2_EE17_M_create_storageEmm_callbackUserDatawxImageResizeQualitywxALPHA_OPAQUEwxID_NONE_ZNK9__gnu_cxx17__normal_iteratorIPPvSt6vectorIS1_SaIS1_EEEmiEl_ZNK8wxString4LastEv_ZN14wxMenuItemListC2Ev_ZNSt6vectorIiSaIiEE8pop_backEvJulianwxEraseEvent_ZNKSs8capacityEvunordered_map_SC_BC_BASE_MAX_ZNSt6vectorIsSaIsEE5eraseEN9__gnu_cxx17__normal_iteratorIPsS1_EE_ZN10wxDateSpan8SetWeeksEi__is_move_iterator_ZN8wxString6assignERKS__ZNK9wxUniCharcvtEv__traitor, false>*>, std::__is_floating, false>*> >_ZNSt10_List_baseIP10wxMenuItemSaIS1_EED2EvGetDaywxObject_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE4swapERS4_~FrmMain_ZNSbIwSt11char_traitsIwESaIwEEpLEPKw_ZN14wxMenuItemList22compatibility_iterator7SetDataEP10wxMenuItem_ZNK9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEE4baseEviterator_ZNKSt6vectorIsSaIsEE12_M_check_lenEmPKc_ZNSt6vectorIP9wxToolTipSaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEmRKS1_internalDefault_FirstasArray_ZNK8wxString10CapitalizeEv_ZNK12wxUniCharRefltERK9wxUniChar_ZNKSt12_Vector_baseIP26wxDateTimeHolidayAuthoritySaIS1_EE19_M_get_Tp_allocatorEv_ZN8wxString7SetCharEm9wxUniChar__is_byte_ZNSt11char_traitsIwE6lengthEPKw_ZNK20wxTopLevelWindowBase13OSXIsModifiedEv_ZNSt6vectorIP12_GdkDrawableSaIS1_EE4swapERS3__ZNSt11char_traitsIwE4moveEPwPKwm_ZN5wxAnyaSERK9wxVariantwxTextCoordInputAsWChar_ZN12wxWindowBase15AssociateHandleEP10_GtkWidget__is_arithmeticwxEventTypeTag_ZNSspLERKSs_ZN20wxMDIParentFrameBase4TileE13wxOrientation_ZNSt3tr115__unordered_mapI8wxStringS1_12wxStringHash13wxStringEqualSaISt4pairIKS1_S1_EELb0EED2Ev_ZNSt11char_traitsIcE6lengthEPKc_ZNK8wxString4FindERK22wxScopedCharTypeBufferIwETryLock_ZNK9wxUniCharltERKS__M_finish_ZNK10wxDateTime20GetWeekDayInSameWeekENS_7WeekDayENS_9WeekFlagsE_ZN10wxDateTime10GetCenturyEi_ZN8wxStringpLERK22wxScopedCharTypeBufferIcE__traitor, std::__is_floating >tm_zonems_timestamp_ZN9__gnu_cxx13new_allocatorISt4pairIK8wxStringS2_EE10deallocateEPS4_m_ZNK8wxString16find_last_not_ofEwm_ZN9__gnu_cxx13new_allocatorIP12wxEvtHandlerE9constructEPS2_RKS2__ZNK20wxTopLevelWindowBase20ShouldPreventAppExitEv~wxAnyValueTypeiterator_traits<__gnu_cxx::__normal_iterator > > >new_allocator_ZNK17wxULongLongNativemiERKS__ZNKSt6vectorIP11wxClassInfoSaIS1_EE6rbeginEv_ZNKSt6vectorIP12wxEvtHandlerSaIS1_EE5beginEv_ZN9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS2_SaIS2_EEEpLElwxID_OSX_MENU_FIRST_SC_XOPEN_SHM~list_ZNSt12_Vector_baseIP11wxClassInfoSaIS1_EE12_Vector_impl12_M_swap_dataERS4__ZN9__gnu_cxx17__normal_iteratorIPP9wxToolTipSt6vectorIS2_SaIS2_EEEppEiNegatewxCharBuffer_ZNSt6vectorIlSaIlEEixEm_ZN9__gnu_cxx17__normal_iteratorIPP9wxToolTipSt6vectorIS2_SaIS2_EEEppEvwxFONTENCODING_ISO2022_JP_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEEppEi_ZNKSs4sizeEvFromImplinput_iterator_tag_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEEppEvreg_save_area_Vector_base >_ZNSs6insertEmPKcm_ZN8wxString6assignEPKwS1_iterator_traits_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS3_SaIS3_EEEEEptEvwxEVT_ERASE_BACKGROUND__is_floating_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE6key_eqEvreverse_iterator<__gnu_cxx::__normal_iterator > > >from_ZNSs6appendEmc_M_erase_at_end_ZNKSt3tr18__detail20_Prime_rehash_policy11_M_next_bktEmlist >wxCheckBoxNameStrSecond_ZNKSt12_Vector_baseIP12_GdkDrawableSaIS1_EE13get_allocatorEv_ZNK9__gnu_cxx13new_allocatorIiE8max_sizeEv_ZNSt6vectorI8wxStringSaIS0_EE5frontEv_ZNSt6vectorIP9wxToolTipSaIS1_EE5clearEvConvertStr__in_chrgwxFONTENCODING_MAXwxPENSTYLE_INVALID_ArgwxAnyStrPtr_ZNK8wxString4FindERKS_format__are_same_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEmRKS1_wxID_SAVElong double_SC_CHAR_BIT_ZN10wxMenuBaseC2El_ZN10wxDateTime14GetWeekDayNameENS_7WeekDayENS_9NameFlagsE_ZNSt11char_traitsIwE7compareEPKwS2_m_ZN8wxString6appendEm12wxUniCharRefswap_ZNK9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEdeEv_ZNK8wxString8iterator4implEv_ZNSt6vectorIdSaIdEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPdS1_EES5_wxLOG_Warning_ZN8wxString6appendEPKcm__conditional_type&, std::pair&>_ZNK8wxString5AfterE9wxUniCharm_type_ZN9__gnu_cxx17__normal_iteratorIPP11wxClassInfoSt6vectorIS2_SaIS2_EEEppEi_vtable_offset_ZN16wxEventHashTable19AllocEventTypeTableEmm_currentChild_ZNSt6vectorIcSaIcEE14_M_fill_assignEmRKc_ZNKSs12find_last_ofERKSsm_ZN20wxThreadHelperThreadD0Ev_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS2_SaIS2_EEEEEplEl_ZNSt6vectorIP12_GdkDrawableSaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE_ZNKSt6vectorIP12_GdkDrawableSaIS1_EE5beginEv_ZNK9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS2_SaIS2_EEEixEl_ZNK11wxFrameBase10GetMenuBarEvwc_str_ZNK10wxDateTime17IsStrictlyBetweenERKS_S1__ZNK8wxString14const_iteratorleERKS0_wxID_YESTOALL_ZN10wxDateTime11ParseFormatERK8wxStringPNS0_14const_iteratorE_SC_DEVICE_SPECIFIC_RwxEVT_LEFT_DOWN_ZN8wxString6assignERKS_mmwxFONTENCODING_MACARABICEXT_ZN9__gnu_cxx17__normal_iteratorIPPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEEmIElwxTOPconst_reference_ZNK16wxLongLongNativermEl_ZNK20wxObjectEventFunctor10IsMatchingERK14wxEventFunctor_ZNKSt6vectorIPKvSaIS1_EE8capacityEvwxEventTypeTagrelease_ZNSt6vectorIsSaIsEE9push_backERKs_ZN8wxString8FromImplERKSbIwSt11char_traitsIwESaIwEE_ZNK12wxUniCharRef8GetValueEvwxEventTypeTagwxDisplayChangedEvent__is_integer, false>*>_ZN20wxThreadHelperThread5EntryEv_ZNKSt6vectorIP9wxToolTipSaIS1_EE5emptyEv_ZN9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS5_ELb0EEEE8allocateEmPKv_ZN20wxEventConnectionRef15OnObjectDestroyEv_ZNK12wxUniCharRefcvhEv_ZN11wxFrameBase15PositionToolBarEv__is_normal_iterator<__gnu_cxx::__normal_iterator > > >__normal_iterator > >__is_move_iterator<__gnu_cxx::__normal_iterator > > >_ZN10wxDateTime17SetToLastMonthDayENS_5MonthEi__is_normal_iterator<__gnu_cxx::__normal_iterator > > >OnCreateClient_ZNSt6vectorIP9wxToolTipSaIS1_EE14_M_fill_assignEmRKS1__ZNSt6vectorIP9wxToolTipSaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEmRKS1__M_eq_ZNKSs11_M_disjunctEPKcwxITEM_CHECK_ZNKSt6vectorImSaImEE4rendEv_ZN9__gnu_cxx17__normal_iteratorIP8wxStringSt6vectorIS1_SaIS1_EEEmIElWEST__normal_iterator > >_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS4_SaIS4_EEEEEplEl_ZNKSt6vectorIPvSaIS0_EE4sizeEvwxKEY_NONE_ZNKSt6vectorIiSaIiEEixEm_ZNSbIwSt11char_traitsIwESaIwEEixEm_ZN8wxString13DoPrintfWcharEPKwzwxPENSTYLE_STIPPLE_MASK_ZN16wxLongLongNativemLERKS__ZN10wxDateTime9ParseTimeEPKw_ZNK8wxString8EndsWithERKS_PS__ZNKSt6vectorIPvSaIS0_EEixEm_ZNK14wxEventTypeTagI10wxKeyEventEcvRKiEvwxBITMAP_TYPE_TIFF_RESOURCE_ZN10wxDateTimeaSERKNS_2TmEwxBRUSHSTYLE_VERTICAL_HATCHGetJulianDayNumber_ZN20wxNonOwnedWindowBase14DoSetPathShapeERK14wxGraphicsPath_ZNKSt6vectorIPKvSaIS1_EE4rendEv__debug_ZNK9__gnu_cxx17__normal_iteratorIPwSbIwSt11char_traitsIwESaIwEEEdeEvIsEqualTo_ZNKSt14_List_iteratorIP10wxMenuItemEdeEvwxEVT_RIGHT_DCLICK_S_basefieldIsLongerThan_M_h1_M_h2_ZNK9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEplElhandler_M_put_node_ZN7wxMutex6UnlockEvboolalpha_ZNK12wxWindowBase10HasCaptureEv_ZNSt4listIP10wxMenuItemSaIS1_EE5eraseESt14_List_iteratorIS1_E_ZNK14wxEventTypeTagI11wxMoveEventEcvRKiEv_ZN9__gnu_cxx13new_allocatorIP9wxToolTipE10deallocateEPS2_m_ZNK9__gnu_cxx17__normal_iteratorIPP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEEplEl_ZNK8wxString4findERK22wxScopedCharTypeBufferIcEmm_ZNK22wxScopedCharTypeBufferIwEixEmwxNullColour_ZN9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS2_SaIS2_EEEmIEl_ZNK8wxString3CmpEPKcvector >_ZNSbIwSt11char_traitsIwESaIwEE5eraseEmmIsEvtHandler_ZN9__gnu_cxx14__alloc_traitsISaIPvEE8allocateERS2_m_ZNSaIP10wxMenuItemEC2ISt10_List_nodeIS0_EEERKSaIT_EwxID_YES_ZNK8wxString3CmpEPKwfrac_digitswxID_SELECT_FONTwxGraphicsPath_ZN8wxStringaSE12wxUniCharRefiterator_traits__normal_iterator > >__traitor, std::__is_pointer >_ZNSt6vectorI8wxStringSaIS0_EE2atEm_ZNK16wxLongLongNative8ToDoubleEvwxID_ZOOM_OUT_ZNKSt6vectorIlSaIlEE5beginEvCharTypelong unsigned int_ZNK8wxString5StripENS_9stripTypeEwxFileCtrlNameStr_ZNSbIwSt11char_traitsIwESaIwEEaSERKS2__ZN8wxString15ConvertedBufferIcED2EvGetHours__time_tGetFormatIdF_OWNER_GID_ZNKSt6vectorIdSaIdEE6rbeginEv__alloc_traits >_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE4swapERSE__ZNSt6vectorI8wxStringSaIS0_EE8pop_backEv_ZNK10wxDateTime9IsWorkDayENS_7CountryEiterator_traits_ZN10wxTimeSpan6MinuteEvwxEAST_ZNK9wxUniCharcvmEvrebindwcscollm_previous_ZNSt6vectorIPvSaIS0_EE7reserveEm_ZNSt6vectorIP9wxToolTipSaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZNKSt12_Vector_baseIPK17wxEventTableEntrySaIS2_EE13get_allocatorEv_ZN12wxWindowBase17CanSetTransparentEv_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE16_M_insert_bucketERKS4_mm_ZNK12wxWindowBase15GetThemeEnabledEv_ZNSt6vectorIcSaIcEE4dataEv_ZN9__gnu_cxx3divExx_ZNK22wxScopedCharTypeBufferIwE7releaseEvOnHelloIsDynamic_List_const_iterator_ZNSt6vectorIP12wxEvtHandlerSaIS1_EEixEmwxEVT_MAXIMIZE_ZN10wxDateTime3AddERK10wxTimeSpan_ZNSs7replaceEmmRKSs_ZNSt4listIP10wxMenuItemSaIS1_EE14_M_fill_assignEmRKS1__ZNSt6vectorIPKvSaIS1_EE6resizeEmS1__ZNSs3endEvGetLast_ZN9__gnu_cxx17__normal_iteratorIPP12wxEvtHandlerSt6vectorIS2_SaIS2_EEEmmEv_ZNSt6vectorI8wxStringSaIS0_EE4dataEv__is_normal_iterator<__gnu_cxx::__normal_iterator<_GdkDrawable**, std::vector<_GdkDrawable*, std::allocator<_GdkDrawable*> > > >Arg_Unknown_SC_XBS5_LP64_OFF64_ZNK9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEEixEl_ZNK8wxString14const_iteratorixEm_ZNK9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEE4baseEv__unique_ZN9__gnu_cxx17__normal_iteratorIPP9wxToolTipSt6vectorIS2_SaIS2_EEEmmEiatoll_ZN9__gnu_cxx17__normal_iteratorIPP9wxToolTipSt6vectorIS2_SaIS2_EEEmmEv~_List_base_ZN15wxHashTableBase13DoDestroyNodeEP20wxHashTableBase_Node_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEEmmEi_ZN8wxString4swapERS__ZN8wxStringpLERK22wxScopedCharTypeBufferIwE_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEEmmEviterator_traits_SC_USER_GROUPS_Rbegin_classinfo_ZNK11wxClassInfo17GetBaseClassName2Evconv_shortbufwxCharrebind__is_normal_iterator_ZN10wxMenuBase6AppendEiRK8wxStringS2_10wxItemKind_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEplElFromCDouble_ZNSbIwSt11char_traitsIwESaIwEE12_S_constructEmwRKS1___is_move_iterator<__gnu_cxx::__normal_iterator > > >DoLogwxSHOW_EFFECT_BLENDfirst_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS3_SaIS3_EEEEEdeEviterator_traits_ZNK8wxString12find_last_ofERK10wxCStrDatammwxSliderNameStr_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEEdeEvqsort_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE4sizeEv_ZNK15wxHashTableBase7GetSizeEv_ZNSsaSEc_ZNK9__gnu_cxx13new_allocatorIlE8max_sizeEvDoLogAtLevel_ZN9__gnu_cxx13new_allocatorIPK17wxEventTableEntryE7destroyEPS3_wxPosixPermissionspositive_sign_ZN9__gnu_cxx13new_allocatorIPK17wxEventTableEntryE9constructEPS3_RKS3_copy_ZNSt12_Vector_baseIP11wxClassInfoSaIS1_EE19_M_get_Tp_allocatorEv_ZN8wxString6assignERK10wxCStrDataS2_wxID_CUTrfind_ZNSt6vectorImSaImEE6resizeEmmallocator__is_byte_ZNKSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE5emptyEv_ZN7FrmMainD2EvAlwaysShowScrollbars__is_arithmeticSetMilliseconderasewxID_SAVEAS_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5beginEmGetValueClassInfooperator>>=_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5beginEv_ZNK8wxString8IsSameAsERKS_b_SC_T_IOV_MAX_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS2_SaIS2_EEEEEmiEl_ZN9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEEpLEl~UntypedBufferData_ZNK8wxString8iteratorplEl_ZN20wxMDIParentFrameBase14OnCreateClientEv_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEEplEl_Vector_base >_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE22_M_get_Value_allocatorEv_ZN12wxStringHash16wxCharStringHashEPKwIsNull_ZN10wxDateTime12SetToYearDayEt_ZNKSt12_Vector_baseIiSaIiEE19_M_get_Tp_allocatorEv_ZN8wxString6appendEPKwmrandom_access_iterator_tag_SC_COLL_WEIGHTS_MAX_ZNKSt4listIP10wxMenuItemSaIS1_EE4rendEvwxPENSTYLE_STIPPLE_MASK_OPAQUEwxMutex_ZNK9__gnu_cxx17__normal_iteratorIPPvSt6vectorIS1_SaIS1_EEEptEv_ZN12wxWindowBase18SetWindowStyleFlagEl_ZNK11wxClassInfo13GetBaseClass1EvallocatorGetClientAreaOrigin_ZNKSbIwSt11char_traitsIwESaIwEE5c_strEvwxTextCtrlNameStr__is_normal_iterator<__gnu_cxx::__normal_iterator > > >__is_move_iterator<__gnu_cxx::__normal_iterator > > >wctrans_t_ZNKSbIwSt11char_traitsIwESaIwEE4copyEPwmm_ZNKSt3tr18__detail15_Hash_code_baseI8wxStringSt4pairIKS2_S2_ESt10_Select1stIS5_E13wxStringEqual12wxStringHashNS0_18_Mod_range_hashingENS0_20_Default_ranged_hashELb0EE12_M_copy_codeEPNS0_10_Hash_nodeIS5_Lb0EEEPKSE__ZN9__gnu_cxx24__numeric_traits_integerImE8__digitsE_ZN8wxString6AppendEcm_ZN16wxLongLongNativemLEl_IO_save_end_ZN5wxAnyaSEPKc_ZNKSt6vectorIdSaIdEE5frontEv__normal_iterator > >_ZNKSt6vectorImSaImEE4sizeEv_ZN20wxHashTableBase_Node7SetDataEPv_ZN12wxStringHash10stringHashEPKw_M_grabwxFONTENCODING_SYSTEM_Bucket_allocator_typechar_ZNKSt6vectorIdSaIdEE12_M_check_lenEmPKc_ZNSt6vectorIP12_GdkDrawableSaIS1_EE4rendEv_ZN8wxString6ShrinkEvwxID_VIEW_LARGEICONSfn_str_SC_SPAWN_ZN17wxULongLongNativepLERKS__ZNK9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEEixEl_ZNKSt6vectorIP12_GdkDrawableSaIS1_EE4sizeEv_ZNK16wxLongLongNativeeqEl_ZNK17wxULongLongNative8ToStringEvminH_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_AllocEventTypeTableminWImplStr_ZNK10wxTimeSpan10GetMinutesEvGetYearDay_ZNK13wxStringEqualclEPKwS1__ZNK9__gnu_cxx17__normal_iteratorIPKwSbIwSt11char_traitsIwESaIwEEEplEl_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5emptyEv_ZNK6wxSize4GetXEv_ZNK8wxString5IndexEPKw_ZNKSt3tr18__detail25_Hashtable_const_iteratorISt4pairIK8wxStringS3_ELb0ELb0EEptEv_ZNKSs5beginEv_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS3_SaIS3_EEEEEmiElrealHandlerClass_ZNSbIwSt11char_traitsIwESaIwEE18_S_construct_aux_2EmwRKS1__ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS4_SaIS4_EEEEEmiEl_ZN20wxNonOwnedWindowBase12DoClearShapeEv_ZNK8wxString7compareERK22wxScopedCharTypeBufferIcEIsDSTApplicablewxTimeSpan_ZNSbIwSt11char_traitsIwESaIwEE5clearEv_ZN15wxHashTableBase8DoDeleteEll_ZN9__gnu_cxx13new_allocatorIP10wxMenuItemE9constructEPS2_RKS2__ZN14wxMenuItemList10DeleteNodeERKNS_22compatibility_iteratorE_ZN10wxDateTime10IsLeapYearEiNS_8CalendarEwxUPDATE_UI_PROCESS_SPECIFIED_ZN11wxClassInfo10UnregisterEv_ZNK9__gnu_cxx13new_allocatorISt10_List_nodeIP10wxMenuItemEE7addressERKS4_secondfgetwcwxID_UNINDENT_ZN9__gnu_cxx13new_allocatorIP10wxMenuItemEC2Ev_ZNK12wxUniCharRef9GetAsCharEPcfgetws_ZN7wxPointpLERKS__ZN8wxStringD2Ev_ZN7FrmMain6OnExitER14wxCommandEvent_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE18_M_deallocate_nodeEPNSA_10_Hash_nodeIS4_Lb0EEE__is_byte_ZNK9__gnu_cxx13new_allocatorIPKvE7addressERS2_GetClientWindow_ZN10wxDateTime12SetToCurrentEv_ZNKSt6vectorIdSaIdEE14_M_range_checkEm_ZN8wxString6appendERK10wxCStrDatacurrency_symbol_ZNK9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEmiEl_ZNK8wxString2atEm_ZNSt6vectorIsSaIsEEixEm_ZNKSs7compareEmmPKcm_ZNK10wxTimeSpanleERKS_rebind >vector_ZNKSt6vectorIPvSaIS0_EE8capacityEvGetLabelwxMUTEX_RECURSIVE_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE9_M_rehashEm_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZNKSt6vectorI8wxStringSaIS0_EE5frontEv_ZN8wxString6AppendEhm_M_allocate_node_ZN16wxCharTypeBufferIcE6extendEmwxEventTypeTag_ZNK8wxString21reverse_iterator_implINS_14const_iteratorEEmiERKS2__ZNSt6vectorIdSaIdEE6insertEN9__gnu_cxx17__normal_iteratorIPdS1_EERKdToString_ZNK8wxStringntEv_ZNSs15_M_replace_safeEmmPKcm_ZNSbIwSt11char_traitsIwESaIwEE6rbeginEvMakeCapitalized_ZN9__gnu_cxx14__alloc_traitsISaI8wxStringEE7destroyERS2_PS1_wxInvalidOffset_ZNK9__gnu_cxx17__normal_iteratorIPsSt6vectorIsSaIsEEEplElwxEventFunctorMethod__is_normal_iterator_ZN29wxEventTableEntryPointerArray5EmptyEv6ldiv_t_ZNK10wxDateTime10GetCenturyERKNS_8TimeZoneEIsWorkDay_ZNKSt6vectorIiSaIiEE8max_sizeEv__normal_iterator<_GdkDrawable**, std::vector<_GdkDrawable*, std::allocator<_GdkDrawable*> > >_ZNK9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEixEliterator_traits_ZNKSt6vectorIP12_GdkDrawableSaIS1_EE14_M_range_checkEm_ZNK8wxString5FirstE12wxUniCharRef__initialize_p_ZNK9__gnu_cxx17__normal_iteratorIPwSbIwSt11char_traitsIwESaIwEEE4baseEv_ZNSt6vectorIPvSaIS0_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EES6_tm_mon_SC_C_LANG_SUPPORT_R_ZN16wxEventHashTable8AddEntryERK17wxEventTableEntry_ZNK8wxString5rfindEcm_SC_MESSAGE_PASSING_ZN9__gnu_cxx17__normal_iteratorIPP9wxToolTipSt6vectorIS2_SaIS2_EEEpLElGetLastWeekDay_ZNSt6vectorIP9wxToolTipSaIS1_EE5beginEv_ZNSt6vectorIcSaIcEE3endEvMakeLower_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEEpLEl_ZNKSt6vectorIPvSaIS0_EE3endEv_ZNKSt6vectorIPK17wxEventTableEntrySaIS2_EE5emptyEv_ZNSt6vectorIP12_GdkDrawableSaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7_AsCharBuf_ZNKSbIwSt11char_traitsIwESaIwEE4findEwm_ZNK9wxUniChar8GetValueEvargcwxTHREAD_MISC_ERROR_ZNKSs5rfindEcm_ZN9__gnu_cxx13new_allocatorISt4pairIK8wxStringS2_EE9constructEPS4_RKS4__ZNK9__gnu_cxx13new_allocatorINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS5_ELb0EEEE8max_sizeEvshowposMakewxEVT_MOUSE_CAPTURE_LOST~wxTrackerNode_ZNK8wxString3endEvEventTagargv_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE4dataEvm_cstr_S_ios_seekdir_endrebind >_ZNSt12_Vector_baseIPKvSaIS1_EE17_M_create_storageEm_ZNK8wxString16find_last_not_ofERK10wxCStrDatamInsertwxID_JUSTIFY_FILLGetMainWindowOfCompositeControl_ZNSt6vectorIP11wxClassInfoSaIS1_EE7reserveEm~wxEventTableEntryiterator_traits_ZNSs4_Rep13_M_set_leakedEv__is_move_iteratorwxFONTENCODING_MACTELUGU_ZNK9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS1_SaIS1_EEEixElsystem_ZNKSt6vectorIiSaIiEE5emptyEv_SC_XOPEN_XPG2_SC_XOPEN_XPG3_SC_XOPEN_XPG4_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE6insertENSA_19_Hashtable_iteratorIS4_Lb0ELb0EEERKS4_iterator_ZNSt6vectorIP9wxToolTipSaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEiterator_traits_ZNSt11char_traitsIwE4copyEPwPKwm_ZN8wxString7replaceEmmRKS_mProcessWindowEventLocally_Hash_code_base, std::_Select1st >, wxStringEqual, wxStringHash, std::tr1::__detail::_Mod_range_hashing, std::tr1::__detail::_Default_ranged_hash, false>_ZNK12wxUniCharRefcvwEvToCLongwxDateSpanGetTicks_ZN10wxDateSpanngEv_ZNK9__gnu_cxx13new_allocatorIP12_GdkDrawableE7addressERKS2___traitor, std::__is_pointer >tm_mdayGetMaxSize_ZNSt6vectorIP11wxClassInfoSaIS1_EE3endEv_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE6rehashEm_ZNK8wxString16find_last_not_ofERKS_m_ZNK12wxDataFormatneEP8_GdkAtom_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS3_SaIS3_EEEEEixElms_bVerbose_ZNK8wxString8IsSameAsE12wxUniCharRefbGetHeight_ZNK8wxString21reverse_iterator_implINS_14const_iteratorEEdeEv_ZN8wxString6insertEmPKcmwxFD_OPEN_ZNK9__gnu_cxx17__normal_iteratorIPP9wxToolTipSt6vectorIS2_SaIS2_EEEdeEv_ZNK9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS2_SaIS2_EEEplEl_ZNKSt6vectorIlSaIlEE12_M_check_lenEmPKcpair, false, false>, std::tr1::__detail::_Hashtable_const_iterator, false, false> >__is_normal_iterator, false>**>_ZNK8wxString5rfindEhmwxShowEventwxID_VIEW_DETAILS_ZNK8wxString21reverse_iterator_implINS_8iteratorEEplEl__cachewxMDIChildFramefirst_argument_type_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEmiEl_ZNK10wxDateTime14DiffAsDateSpanERKS__ZNSt6vectorIP12wxEvtHandlerSaIS1_EE15_M_erase_at_endEPS1__ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS2_SaIS2_EEEEEppEi__is_pointer~__unordered_mapwxFONTENCODING_MACLAOTIANwxFONTENCODING_MACMONGOLIANnew_allocator__is_normal_iteratorwxTextUrlEventwxID_CONVERT_ZNSaINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEED2Ev_ZN12App_PnlValueD2Ev_ZN9__gnu_cxx14__alloc_traitsISaIP12wxEvtHandlerEE10deallocateERS3_PS2_mInv_Month_ZNKSt6vectorIP12wxEvtHandlerSaIS1_EE14_M_range_checkEmwxDF_SYLK_ZNSt12_Vector_baseIPKvSaIS1_EE13_M_deallocateEPS1_mwxWritableCharBufferGetMinutes_ZNSt6vectorIiSaIiEE2atEm_ZN9__gnu_cxx17__normal_iteratorIPsSt6vectorIsSaIsEEEpLEl_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS3_SaIS3_EEEEEppEiwxID_OSX_MENU_LAST_ZNSt4listIP10wxMenuItemSaIS1_EE4backEv_ZNKSt6vectorIPvSaIS0_EE5emptyEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS3_SaIS3_EEEEEppEv_ZNK14wxMenuItemList7GetLastEvwcsrtombs_ZNSt3tr18__detail12_Rehash_baseINS0_20_Prime_rehash_policyENS_10_HashtableI8wxStringSt4pairIKS4_S4_ESaIS7_ESt10_Select1stIS7_E13wxStringEqual12wxStringHashNS0_18_Mod_range_hashingENS0_20_Default_ranged_hashES2_Lb0ELb0ELb1EEEE15max_load_factorEf_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS3_SaIS3_EEEEEdeEvwxEventTypeTag_markerscomponent_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofERKS2_mwxIMAGE_ALPHA_OPAQUE_ZNK6wxSize8GetWidthEv_ZN20wxMDIParentFrameBase7CascadeEv_ZNK8wxString8IsSameAsEcb_ZNK22wxControlContainerBase24AcceptsFocusFromKeyboardEv_ZN10wxDateSpan5MonthEv_M_replace_aux_ZN8wxString7ImplStrEPKwwxFONTENCODING_CP850_ZN10wxDateTime3NowEv_ZNK8wxString8iteratormiElwxFONTENCODING_CP855__is_normal_iterator_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEEmiEl_ZNK12wxUniCharRefmiERK9wxUniChar_ZN15wxHashTableBase6CreateE9wxKeyTypemwxHashKeyValueBeforeOnDeletewxUniChar_ZNKSsixEmnew_allocator, false> >_ZNKSt6vectorIlSaIlEE2atEmwxEVT_JOY_ZMOVEwxFONTENCODING_CP866_ZNSt6vectorIlSaIlEE15_M_erase_at_endEPl_Vector_base >__is_normal_iterator<__gnu_cxx::__normal_iterator > > >_SC_XOPEN_STREAMS_ZN10wxDateTime16ParseISOCombinedERK8wxStringcwxID_AUTO_HIGHEST_ZN9__gnu_cxx14__alloc_traitsISaIP12wxEvtHandlerEE8allocateERS3_m_ZNK9__gnu_cxx17__normal_iteratorIPP12_GdkDrawableSt6vectorIS2_SaIS2_EEE4baseEvwxFONTENCODING_CP874_ZN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEppEiwmemchr_ZN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEppEv_ZN22wxScopedCharTypeBufferIwE4dataEv__traitor, std::__is_floating >_ZN6wxSize3SetEii_ZN10wxDateTime9SetMinuteEtwxCommandEvent_ZN10wxDateTime9ParseTimeEPKcwxChoiceNameStr_ZNKSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE6rbeginEvActivateNext_ZN6wxSize5IncByERK7wxPoint__is_normal_iterator_ZN20wxEventConnectionRef6DecRefEvnew_allocator_SC_CLK_TCK_ZN10wxDateTime12SetToWeekDayENS_7WeekDayEiNS_5MonthEi_ZN5wxLog9IsEnabledEv_ZNSt6vectorIP12_GdkDrawableSaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7__ZNK20wxEventFunctorMethodI14wxEventTypeTagI14wxCommandEventE12wxEvtHandler7wxEventS3_E13GetEvtHandlerEv_ZN8wxString6AppendEwmwxEventTypeTag_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmRKS2__ZNSt4listIP10wxMenuItemSaIS1_EE5frontEv_ZNK9__gnu_cxx17__normal_iteratorIPKwSbIwSt11char_traitsIwESaIwEEEmiEl_SC_PIPE_ZNK9__gnu_cxx13new_allocatorI8wxStringE7addressERKS1_m_internal_ZNK8wxString8IsSameAsEhb_mode_ZN9__gnu_cxx17__normal_iteratorIPP12wxEvtHandlerSt6vectorIS2_SaIS2_EEEpLElwxHORIZONTAL_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEppEi_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE5frontEv_ZNK9__gnu_cxx13new_allocatorIP11wxClassInfoE7addressERKS2__ZNK14wxMenuItemList22compatibility_iteratorntEv_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEppEv_ZN9__gnu_cxx13new_allocatorISt4pairIK8wxStringS2_EE8allocateEmPKvwxCharTypeBuffer_SC_SEM_VALUE_MAX_ZNK8wxString8IsSameAsEib_ZNSt6vectorI8wxStringSaIS0_EE14_M_fill_assignEmRKS0__SC_THREAD_PROCESS_SHAREDwxMDIClientWindowBase_ZNK8wxString7GetCharEm_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE19_M_deallocate_nodesEPPNSA_10_Hash_nodeIS4_Lb0EEEm_ZN10wxTimeSpanmIERKS__ZN9__gnu_cxx13new_allocatorISt4pairIK8wxStringS2_EEC2Ev_ZNK12wxUniCharRefgeERK9wxUniChar_Tp_alloc_type_SC_TIMERSwxKEY_STRINGwxJoystickEventParseISODate_ZNK8wxString7compareERK22wxScopedCharTypeBufferIwEm_windowMenuwxEVT_TIMER_ZNK12wxUniCharRefneERKS__M_deallocate_nodes_ZNK10wxDateTime6GetJDNEvAcceptsFocusRecursivelywxID_VIEW_SORTDATEiterator_traits_ZN9__gnu_cxx14__alloc_traitsISaImEE17_S_select_on_copyERKS1_FormatDatewmemcmp_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmmw_ZNK8wxString13find_first_ofERKS_mFreqwxEVT_ICONIZE_ZN8wxString5eraseEmm_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE4swapERS3_wxID_MDI_WINDOW_FIRST_ZNK12wxUniCharRefcvjEvwxMouseEvent_SC_V6_ILP32_OFFBIG_ZN8wxString5eraseENS_8iteratorE_ZNK14wxMenuItemList8GetFirstEv_M_cur_bucket_ZNK9__gnu_cxx17__normal_iteratorIPsSt6vectorIsSaIsEEEmiEl_ZNK9__gnu_cxx13new_allocatorISt4pairIK8wxStringS2_EE7addressERKS4__ZNSt12_Vector_baseIPK17wxEventTableEntrySaIS2_EE12_Vector_impl12_M_swap_dataERS5_wxFrameBaseIsVisible__traitor, std::__is_pointer >_ZNSbIwSt11char_traitsIwESaIwEE5eraseEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_bucket_size_ZNK10wxCStrData10AsInternalEv_ZN11wxClassInfo14const_iteratorppEi_ZNK8wxString16find_last_not_ofERK22wxScopedCharTypeBufferIwEmm_ZN11wxClassInfo14const_iteratorppEv_ZN8wxString19CreateConstIteratorERK10wxCStrData_ZN9__gnu_cxx17__normal_iteratorIPP9wxToolTipSt6vectorIS2_SaIS2_EEEmIEl__is_pointer, false>*>_ZNK16wxLongLongNativeeqERKS_new_allocator__alloc_traits >_SC_OPEN_MAX_ZNK10wxDateTime12IsInStdRangeEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEEmIEllocaleconvIsDSTwxFONTENCODING_MACROMANIAN~App_PnlValue_ZN6wxSizedVEi_ZN18wxControlContainerD2Ev_ZN12wxUniCharRefaSERK9wxUniCharSortTryEnterwmemcpywxMBConv_ZN10wxDateTime9ParseDateEPKciterator_traits_ZNSt12_Vector_baseIPvSaIS0_EE11_M_allocateEm_List_impl_ZN10wxDateTime9ParseDateEPKw_ZNSt6vectorIdSaIdEE4dataEv_IO_lock_t_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS2_SaIS2_EEEEEptEv_ZNK8wxString5rfindEwm_ZN8wxString6assignERK22wxScopedCharTypeBufferIwEm_ZNSt6vectorIcSaIcEE2atEmPrepareDC_ZNK9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS2_SaIS2_EEEdeEvoperator intRight_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE4swapERSE__ZNK8wxString4FindEcbwxID_FLOPPYwxPOSIX_OTHERS_READ_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5eraseENSA_25_Hashtable_const_iteratorIS4_Lb0ELb0EEE_SC_SHELLGetTmNow_ZN10wxDateTime15ParseRfc822DateEPKc_SC_2_CHAR_TERM_ZNSt6vectorIP9wxToolTipSaIS1_EE7reserveEm_ZNK20wxNonOwnedWindowBase27AdjustForParentClientOriginERiS0_i_ZNKSt6vectorI8wxStringSaIS0_EE4backEv_ZN10wxDateTime15ParseRfc822DateEPKwLowerCase_ZN9__gnu_cxx13new_allocatorIiE8allocateEmPKv_SC_REALTIME_SIGNALS_M_max_load_factorAssociateHandle_ZN8wxString5AllocEm_ZNSbIwSt11char_traitsIwESaIwEE4rendEvvector >rebind, false> >InitwxDataFormat__are_same<_GdkDrawable* const*, _GdkDrawable**>_ZNSaINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS3_ELb0EEEED2Ev_ZNK10wxDateTimegtERKS__ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE11bucket_sizeEm_ZNK12wxUniCharRefeqEc_ZNKSt10_List_baseIP10wxMenuItemSaIS1_EE21_M_get_Node_allocatorEv_ZNK12wxUniCharRefeqEh_ZNK12wxUniCharRefeqEi_ZNK12wxUniCharRefeqEj__conditional_type, false, false>, bool>, std::tr1::__detail::_Hashtable_iterator, false, false> >_ZNK12wxUniCharRefeqEl_ZNK22wxScopedCharTypeBufferIcEcvPKcEv_ZNK12wxUniCharRefeqEs_ZNK12wxUniCharRefeqEt_ZNK9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS2_SaIS2_EEEmiEl_ZN22wxScopedCharTypeBufferIwE11GetNullDataEv_ZNK12wxUniCharRefeqEw_ZNK12wxUniCharRefeqEx_ZNK12wxUniCharRefeqEy_ZNSt12_Vector_baseImSaImEE17_M_create_storageEm__alloc_traits >_ZNK8wxString21reverse_iterator_implINS_8iteratorEEmiEl_ZNK8wxString4FindE9wxUniCharbwxFileSelectorPromptStr_ZN22wxScopedCharTypeBufferIwE7StrCopyEPKwm_ZNK9__gnu_cxx17__normal_iteratorIPPKvSt6vectorIS2_SaIS2_EEEdeEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS2_SaIS2_EEEEEmmEiwinid_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS2_SaIS2_EEEEEmmEv_ZNSt12_Vector_baseIiSaIiEE13_M_deallocateEPimSubString_ZNSt6vectorIPvSaIS0_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EES6__ZNK10wxTimeSpan10IsNegativeEv_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS3_SaIS3_EEEEEptEv_SC_2_PBS_CHECKPOINT_ZNSt6vectorIP11wxClassInfoSaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZNKSt6vectorIP12wxEvtHandlerSaIS1_EE4rendEv_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS4_SaIS4_EEEEEptEv_ZN8wxString6insertEmPKwmIsMain_ZNKSt6vectorIP9wxToolTipSaIS1_EE8max_sizeEvexact__is_normal_iterator<__gnu_cxx::__normal_iterator<_GdkDrawable* const*, std::vector<_GdkDrawable*, std::allocator<_GdkDrawable*> > > >_ZN12wxUniCharRefaSERKS__ZNK19wxTopLevelWindowGTK9IsGrabbedEvms_logLevelwxDialogNameStr_ZN8wxString6appendEPKcS1__ZNSbIwSt11char_traitsIwESaIwEE5beginEvwxTrackable_ZNK8wxString17find_first_not_ofERK10wxCStrDatam_SC_BC_SCALE_MAX_ZN9__gnu_cxx17__normal_iteratorIPsSt6vectorIsSaIsEEEppEi_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwPKwS5__M_length_ZNK8wxString4FindEhb_ZN9__gnu_cxx17__normal_iteratorIPsSt6vectorIsSaIsEEEppEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS3_SaIS3_EEEEEmmEireverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt6vectorI8wxStringSaIS0_EE6resizeEmS0__ZNSt6vectorImSaImEE7reserveEmmon_grouping_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS3_SaIS3_EEEEEmmEv_ZNKSbIwSt11char_traitsIwESaIwEE4_Rep12_M_is_sharedEvoperator wxWritableCharTypeBuffer::CharType*IsEmpty_ZNK8wxString13find_first_ofERK10wxCStrDatamIsLaterThan_ZNK10wxDateTime12GetDayOfYearERKNS_8TimeZoneEincWwxCloseEventwxID_UNDO_ZNK9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEptEv_ZNK9__gnu_cxx17__normal_iteratorIPsSt6vectorIsSaIsEEE4baseEv_ZNK8wxString14const_iteratorgeERKS0__ZNSs6appendEPKcm_ZN10wxDateSpan5YearsEi_ZN8wxString8iteratorppEi_ZN14wxFormatStringC2EPKc_ZN8wxString8iteratorppEvA_ESTwxEVT_LEAVE_WINDOW_ZNK8wxString4FindEPKw_M_ibegin_List_iterator_ZN12wxUniCharRef15CreateForStringEN9__gnu_cxx17__normal_iteratorIPwSbIwSt11char_traitsIwESaIwEEEEm_mutexGetEvtMethodwxOutOfRangeTextCoordParseISOTime_ZNSt11char_traitsIwE6assignERwRKwOnEventLoopExit_ZNK12wxUniCharRefneEc_ZNK9__gnu_cxx17__normal_iteratorIPP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEEptEv_ZNK12wxUniCharRefneEh_ZNK12wxUniCharRefneEi_ZNK12wxUniCharRefneEj_ZNK12wxUniCharRefneEl_ZNK9__gnu_cxx17__normal_iteratorIPP11wxClassInfoSt6vectorIS2_SaIS2_EEEixElinsert_ZNK12wxUniCharRefneEs_ZNK12wxUniCharRefneEt_ZNSt6vectorIsSaIsEE4rendEv_ZNK12wxUniCharRefneEx_ZNK12wxUniCharRefneEy_ZNK8wxString9AsCharBufERK8wxMBConvFormatTime_ZN10wxDateTime15SetToWeekOfYearEitNS_7WeekDayE_ZNSt6vectorIcSaIcEE5eraseEN9__gnu_cxx17__normal_iteratorIPcS1_EE_ZNK8wxString8IsSameAsEwb_Vector_base >Extend_ZN9__gnu_cxx14__alloc_traitsISaIP9wxToolTipEE17_S_select_on_copyERKS3_wxEventTypeTag_Vector_base >_ZNK12wxWindowBase23AcceptsFocusRecursivelyEv_ZN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEmmEi_ZNSt6vectorIP9wxToolTipSaIS1_EE6rbeginEv_ZN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEmmEv_ZNKSt4listIP10wxMenuItemSaIS1_EE4sizeEvSubstrBufFromTypembc_str__is_floating, false>*>m_methodmax_bucket_count_ZN8wxString6assignERK22wxScopedCharTypeBufferIwEstyle_ZNSt6vectorIPvSaIS0_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EEmRKS0__SC_LEVEL1_ICACHE_SIZEwxThreadIdType_ZN8wxString6insertEmRKS_mm_ZNKSt6vectorIP9wxToolTipSaIS1_EE4dataEv_ZNK8wxStringcvRKSbIwSt11char_traitsIwESaIwEEEviterator_traitsLockTimeoutWXWidget~_Vector_base_ZNSt12_Vector_baseI8wxStringSaIS0_EE12_Vector_impl12_M_swap_dataERS3_wxID_HELP_CONTEXT_ZNK13wxVariantData5CloneEvwxWindowBase_ZNK10wxTimeSpanntEvwxLOG_Status_ZNKSt6vectorIsSaIsEE5emptyEvwxUpdateUIMode_S_in_ZNK12wxWindowBase15GetEventHandlerEv_SC_TRACE_LOG_ZN9__gnu_cxx14__alloc_traitsISaIP12wxEvtHandlerEE8max_sizeERKS3__ZNSt3tr113unordered_mapI8wxStringm12wxStringHash13wxStringEqualSaISt4pairIKS1_mEEED2Ev__count_ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEmmPKc_ZNK8wxString4dataEv_ZN29wxEventTableEntryPointerArray8SetCountEmPK17wxEventTableEntryrebind, false>*>iterator__traitor, std::__is_pointer >wxID_RETRY_ZNSt6vectorI8wxStringSaIS0_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0__ZN9__gnu_cxx13new_allocatorIwE7destroyEPwwxFONTENCODING_MACDEVANAGARIsecond_type_ZN9__gnu_cxx13new_allocatorIPKvE10deallocateEPS2_mAfterLast_ZN9__gnu_cxx14__alloc_traitsISaIPK17wxEventTableEntryEE10deallocateERS4_PS3_m_ZN22wxScopedCharTypeBufferIcE5resetEvDestroym_levelGetCentury_ZN8wxString21reverse_iterator_implINS_8iteratorEEppEi_ZN8wxString6appendERKS_mm_ZN8wxString21reverse_iterator_implINS_8iteratorEEppEv_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S1_S1__ZN16wxEventHashTableaSERKS_wxComboBoxNameStr_ZN8wxString8FromUTF8EPKcm_S_cur_ZN10wxDateTimepLERK10wxTimeSpanwxMUTEX_BUSY_ZN8wxStringpLERK10wxCStrDataUpperCase_ZN8wxString6rbeginEvbucket_ZNK10wxDateTimeplERK10wxTimeSpan_ZNKSt6vectorIP12_GdkDrawableSaIS1_EE8capacityEv_ZNKSs5rfindERKSsm_ZN22wxScopedCharTypeBufferIcE4DataC2EPcmN9wxPrivate17UntypedBufferData4KindESetToWeekDayIsAscii~SubstrBufFromType_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEptEv_ZNSt12_Vector_baseIPK17wxEventTableEntrySaIS2_EE13_M_deallocateEPS2_m_ZN8wxString6insertENS_8iteratorEm9wxUniChar_M_bucket_count_SC_XBS5_LPBIG_OFFBIG_ZNSt6vectorIdSaIdEE6assignEmRKdGetMJDwxLOG_Error_ZNKSt12_Vector_baseI8wxStringSaIS0_EE13get_allocatorEvshort int_ZNKSt6vectorIP12_GdkDrawableSaIS1_EE2atEmwcsrchr_ZNK9__gnu_cxx13new_allocatorISt4pairIK8wxStringS2_EE8max_sizeEvwxFONTENCODING_UTF16LE_ZNK10wxTimeSpanneERKS_RemoveNodewday_ZNSt6vectorIlSaIlEE9push_backERKlsize_ZN9wxPrivate11HandlerImplI12wxEvtHandler7wxEventLb1EE19ConvertToEvtHandlerEPS1_wxEventTypeTagDoGetBestClientHeight_ZN5wxAny9AssignAnyERKS_wxEventTypeTag_ZNK10wxDateTime13IsEarlierThanERKS__SC_PII_XTI_ZN8wxString6assignERK22wxScopedCharTypeBufferIcE_ZNSaIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS3_ELb0EEEEC2IS6_EERKSaIT_Efor_each, void (*)(wxMenuItem*)>_ZNKSt14_List_iteratorIP10wxMenuItemEneERKS2_namepoMenuBarwxCriticalSectionLocker_ZN10wxMenuBase15AppendSeparatorEv_ZNSt6vectorIsSaIsEE6insertEN9__gnu_cxx17__normal_iteratorIPsS1_EERKs_ZN21wxEventTableEntryBaseaSERKS_WeekFlags_ZNSt12_Vector_baseImSaImEE19_M_get_Tp_allocatorEv__are_same_M_get_Tp_allocator__normal_iterator, std::allocator > >_ZN9__gnu_cxx13new_allocatorImE8allocateEmPKv_ZN8wxString7ImplStrEPKwm_ZNSt6vectorIP12_GdkDrawableSaIS1_EE5beginEv_ZNK10wxDateSpanmlEi_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS2_SaIS2_EEEEEpLElwxFONTENCODING_MACKANNADA_S_ios_openmode_end_ZNK12wxWindowBase12CanBeFocusedEv_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIS_SsEES2__ZN10wxDateTime16SetToPrevWeekDayENS_7WeekDayE_ZNK9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEEplEl_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE9_M_insertERKS4_NS_17integral_constantIbLb0EEEwxGetPasswordFromUserPromptStr_ZN24wxWritableCharTypeBufferIwEcvPwEv_M_range_checkmblen_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEEptEv_ZN15wxHashTableBase7MakeKeyERK8wxString_ZNK15wxHashTableBase5DoGetERK8wxStringlfloatwxFONTENCODING_UNICODE_ZNK10wxTimeSpan8MultiplyEiiterator_ZNSt12_Vector_baseIPKvSaIS1_EE12_Vector_impl12_M_swap_dataERS4__ZN20wxEventConnectionRefaSERKS_rebind_ZNK9__gnu_cxx13new_allocatorIP12wxEvtHandlerE7addressERKS2__ZNK8wxString14const_iteratoreqERKS0__ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS3_SaIS3_EEEEEpLEl_SC_SPORADIC_SERVER_ZN9__gnu_cxx17__normal_iteratorIPPvSt6vectorIS1_SaIS1_EEEppEi_ZN9__gnu_cxx17__normal_iteratorIPPvSt6vectorIS1_SaIS1_EEEppEvwxPanelBase~wxObjectEventFunctor_ZNSt6vectorIsSaIsEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPsS1_EERKs_ZN8wxString5ClearEv_ZNK9__gnu_cxx17__normal_iteratorIPP12wxEvtHandlerSt6vectorIS2_SaIS2_EEEplEl_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_NS4_IPKwS2_EES9___is_normal_iterator_ZNK9__gnu_cxx17__normal_iteratorIPPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEEixEl_ZNK8wxString4FindEwb_ZNSs6assignERKSs_SC_SELECT_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEEppEi_SC_PAGESIZE_ZN13wxTrackerNodeaSERKS_GetAsHi8bit_ZNK8wxString14const_iterator4implEvva_listvector >wxFONTENCODING_MACGEORGIAN__is_arithmetic__is_normal_iterator<__gnu_cxx::__normal_iterator > > >wxArray_SortFunction_ZN10wxDateTime22SetToWeekDayInSameWeekENS_7WeekDayENS_9WeekFlagsE_ZNSt12_Vector_baseIsSaIsEE11_M_allocateEmwxID_APPLYNonOwned_SC_PRIORITY_SCHEDULING_ZNSt6vectorIcSaIcEE15_M_erase_at_endEPc_ZNK8wxString13find_first_ofERK22wxScopedCharTypeBufferIwEmm_ZN10wxDateTimepLERK10wxDateSpan_ZNK16wxLongLongNativeanERKS_thisResetTimereverse_iterator_implwxID_HARDDISK_ZNK10wxDateTimeplERK10wxDateSpan_ZNK12wxRefCounter11GetRefCountEvmon_decimal_point_ZNSt12_Vector_baseIP26wxDateTimeHolidayAuthoritySaIS1_EE17_M_create_storageEm_ZNK10wxDateTime10FormatDateEv_ZNSt10_List_baseIP10wxMenuItemSaIS1_EE7_M_initEvshowbase_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE16max_bucket_countEv_Vector_base >_ZNK9__gnu_cxx17__normal_iteratorIPKwSbIwSt11char_traitsIwESaIwEEEptEvCountry_EECwxBORDER_RAISEDflagwxThreadHelperreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZN9__gnu_cxx17__normal_iteratorIPsSt6vectorIsSaIsEEEmIEl_ZNK11wxClassInfo7GetNextEv_SC_LEVEL3_CACHE_SIZE_ZNSt6vectorIiSaIiEE5frontEv_ZNK12wxUniCharRefcviEv_ZN8wxString6assignERKS_m_ZN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEpLEl_ZN10wxDateTime9ParseDateERK8wxStringCond_ZNSs7_M_moveEPcPKcm_ZN9__gnu_cxx17__normal_iteratorIPsSt6vectorIsSaIsEEEmmEiSetInitialBestSizeGetMonthsSetToLastWeekDay_ZN9__gnu_cxx17__normal_iteratorIPsSt6vectorIsSaIsEEEmmEv_ZNSt10_List_baseIP10wxMenuItemSaIS1_EE21_M_get_Node_allocatorEvRussia_M_bkt_for_elements_ZNK12wxUniCharRefgeERKS__ZNK13wxVariantData5WriteER8wxStringm_kindwxBITMAP_TYPE_ANIIsSameDateNode_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS3_SaIS3_EEEEEdeEv_ZN9wxPrivate17UntypedBufferDataD2Ev_ZNK9__gnu_cxx13new_allocatorIdE7addressERdGetStatusBarwxBITMAP_TYPE_ANY_ZNK8wxString6lengthEv_ZNSt6vectorIlSaIlEE4backEvint_p_sep_by_spaceCountry_WesternEurope_Start_ZNK8wxString8iteratorneERKNS_14const_iteratorE_ZN8wxString8iteratormmEi_List_const_iterator_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEmRKS2_iteratorwxPOSIX_GROUP_WRITE_ZN8wxString8iteratormmEv__normal_iterator > >_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE6insertERKS4_operator wxCStrDatawcstold_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS3_SaIS3_EEEEEixElwcstoll_S_empty_rep_storageCopywxDirSelectorPromptStrreverse_iterator<__gnu_cxx::__normal_iterator > > >_Vector_base >_ZNK9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS2_SaIS2_EEE4baseEv_ZNSt4listIP10wxMenuItemSaIS1_EE9pop_frontEv_ZNK11wxClassInfo14GetConstructorEv_ZNK9__gnu_cxx17__normal_iteratorIPsSt6vectorIsSaIsEEEptEv_ZNSt6vectorIlSaIlEE3endEvGetDeleteContentswxGetTextFromUserPromptStr_ZNK10wxDateTime5ToUTCEb_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEEdeEvwxID_MAXIMIZE_FRAMEwxIMAGE_QUALITY_HIGH_ZNK9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS2_SaIS2_EEEixEl_Ios_Fmtflagsbidirectional_iterator_tag_ZN7wxFrameC2EP8wxWindowiRK8wxStringRK7wxPointRK6wxSizelS4_m_postimestamp_ZNKSt6vectorIcSaIcEE4rendEv_ZNSt12_Vector_baseIP26wxDateTimeHolidayAuthoritySaIS1_EE13_M_deallocateEPS1_m_ZNK11wxClassInfo12GetClassNameEv~wxMDIParentFrameBase_ZN9__gnu_cxx14__alloc_traitsISaIP9wxToolTipEE8allocateERS3_mfind_last_of_ZN9__gnu_cxx24__numeric_traits_integerIsE5__maxEGetPrevious_ZN20wxEventConnectionRef6IncRefEv_ZNKSt6vectorIP12wxEvtHandlerSaIS1_EE5emptyEvoperator short int_ZNK10wxTimeSpan3AbsEvsm_eventTableEntries_ZNKSbIwSt11char_traitsIwESaIwEE3endEv_ZNSt6vectorIcSaIcEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPcS1_EERKcwxPaletteChangedEvent_ZN8wxLogger5DoLogEPKwz_ZNK10wxTimeSpan6IsNullEvwxID_REPLACE_ZNSt3tr18__detail24_Hashtable_iterator_baseISt4pairIK8wxStringS3_ELb0EE7_M_incrEv_ZNK9__gnu_cxx13new_allocatorIPvE7addressERKS1__ZNKSs8max_sizeEvnothrowOnExit_ZNKSbIwSt11char_traitsIwESaIwEE4rendEv_ZNSt6vectorIP9wxToolTipSaIS1_EE6resizeEmS1__ZNK14wxEventTypeTagI23wxMouseCaptureLostEventEcvRKiEvsize_t_ZN12wxWindowBase24EndRepositioningChildrenEv_ZNSt6vectorIcSaIcEEaSERKS1__ZN8wxString6insertENS_8iteratorERK10wxCStrDataS3___is_integer, false>*>_ZN9__gnu_cxx13new_allocatorIP26wxDateTimeHolidayAuthorityE8allocateEmPKv_ZNK9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEEdeEv_ZN8wxString3endEv_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEEixEl_ZNK9__gnu_cxx13new_allocatorINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS5_ELb0EEEE7addressERS8__ZNKSt6vectorI8wxStringSaIS0_EE8capacityEv_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS3_SaIS3_EEEEE4baseEv_ZNSs13_S_copy_charsEPcS_S__ZNKSt6vectorIPK17wxEventTableEntrySaIS2_EE8capacityEv__is_arithmetic__gnuc_va_listreverse_iterator<__gnu_cxx::__normal_iterator > > >wxSizewxID_DOWN_ZNK9__gnu_cxx13new_allocatorI8wxStringE8max_sizeEv_ZNSbIwSt11char_traitsIwESaIwEE4_Rep8_M_cloneERKS1_m_ZN8wxString5eraseENS_8iteratorES0__ZNK9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS2_SaIS2_EEE4baseEv_ZN20wxNonOwnedWindowBase8SetShapeERK14wxGraphicsPath_ZN8wxString21reverse_iterator_implINS_8iteratorEEmmEi_offset_ZNKSs4dataEv_ZNSt6vectorIiSaIiEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EES5__ZN8wxString21reverse_iterator_implINS_8iteratorEEmmEv__is_pointer__traitor, std::__is_pointer >_ZNK17wxULongLongNativeeqERKS__S_goodbitParseTime_ZNKSt6vectorIsSaIsEE4backEv_M_is_sharedwxSHOW_EFFECT_SLIDE_TO_RIGHT_ZNK9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEmiEl_ZNSt6vectorIiSaIiEE6resizeEmim_ptrwxCharTypeBuffer_ZNSt6vectorIcSaIcEEixEm_ZNK10wxDateTime14GetNextWeekDayENS_7WeekDayEMakeUpper_ZNK9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS2_SaIS2_EEEptEv_ZNK22wxScopedCharTypeBufferIcE6lengthEvtowctrans_ZN9__gnu_cxx13new_allocatorIPvE7destroyEPS1_reverse_iterator<__gnu_cxx::__normal_iterator > > >_ZN29wxEventTableEntryPointerArray4SortEPFiPPK17wxEventTableEntryS3_E_ZN8wxString7replaceEmmPKcm_ZN20wxMDIParentFrameBase12ActivateNextEv_Pred_ZN14wxMenuItemListD2Ev_ZNK8wxString7IsEmptyEv_ZNKSt6vectorIP12_GdkDrawableSaIS1_EE5emptyEvGMT0_ZNKSt6vectorIlSaIlEE8capacityEvGMT2push_back_ZN9__gnu_cxx13new_allocatorIdE9constructEPdRKdGMT5GMT6GMT7GMT8GMT9wxFD_OVERWRITE_PROMPTwxDefaultDateTimeFormat_ZNK9wxUniChareqElldiv_ZNK9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEplElGetPrevWeekDaywxFONTENCODING_MACGUJARATICheckHandlerArgument_M_leak_hard_ZNK9wxUniChareqEx_ZNSt6vectorImSaImEE5eraseEN9__gnu_cxx17__normal_iteratorIPmS1_EE_ZN9__gnu_cxx13new_allocatorIlE10deallocateEPlm_ZNKSt6vectorIP11wxClassInfoSaIS1_EE5frontEv_ZNK8wxString12find_last_ofEPKcmwxEVT_CLOSE_WINDOWCanSetTransparent_ZN10wxDateTime9ParseTimeERK8wxString_ZNKSt12_Vector_baseIP12_GdkDrawableSaIS1_EE19_M_get_Tp_allocatorEv_IO_read_end_ZNSbIwSt11char_traitsIwESaIwEE6insertEmRKS2_wxFONTENCODING_ISO8859_1wxFONTENCODING_ISO8859_2wxFONTENCODING_ISO8859_3wxFONTENCODING_ISO8859_4wxFONTENCODING_ISO8859_5wxFONTENCODING_ISO8859_6wxFONTENCODING_ISO8859_7wxFONTENCODING_ISO8859_8wxFONTENCODING_ISO8859_9wxThreadEvent_ZNK9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS2_SaIS2_EEE4baseEv_ZNK9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEEdeEvwxEVT_MIDDLE_DOWN_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS2_SaIS2_EEEEEmIEl_List_base_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EED2Ev_S_failbitoperator wchar_t const*GetEvtHandler__is_integer_ZNK8wxString6IsNullEv_ZNK16wxLongLongNativeneElwxSHOW_SB_DEFAULTIsSameTime_ZNKSt4listIP10wxMenuItemSaIS1_EE5beginEv_ZNKSs13get_allocatorEv_ZNSt6vectorImSaImEEaSERKS1__ZN9__gnu_cxx13new_allocatorINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEE10deallocateEPS8_mSetToWeekOfYear__normal_iterator<_GdkDrawable* const*, std::vector<_GdkDrawable*, std::allocator<_GdkDrawable*> > >_Vector_base >__traitor, false>*>, std::__is_floating, false>*> >_ZNKSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE8capacityEv__conditional_type*, std::pair*>vector >_Allocator_M_set_leakedwxBITMAP_TYPE_XPM_DATAwxFONTENCODING_EUC_JP_ZNSbIwSt11char_traitsIwESaIwEE4_Rep9_S_createEmmRKS1__S_showpoint_ZNK12wxUniCharRefaaEb_ZN9__gnu_cxx13new_allocatorISt4pairIK8wxStringS2_EE7destroyEPS4__ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS3_SaIS3_EEEEEmIEl_ZNSt6vectorIlSaIlEE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPlS1_EEmRKl_ZN9__gnu_cxx17__normal_iteratorIPPvSt6vectorIS1_SaIS1_EEEmmEi_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE18_M_fill_initializeEmRKS2__ZNK14wxEventTypeTagI21wxPaletteChangedEventEcvRKiEv_ZNSbIwSt11char_traitsIwESaIwEE6resizeEmw_ZN9__gnu_cxx17__normal_iteratorIPPvSt6vectorIS1_SaIS1_EEEmmEv_ZNSt6vectorImSaImEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPmS1_EE__is_move_iterator<_GdkDrawable**>_ZNSbIwSt11char_traitsIwESaIwEE6insertEmPKw_ZNK9__gnu_cxx17__normal_iteratorIPP11wxClassInfoSt6vectorIS2_SaIS2_EEE4baseEv_IIterempty_ZN14wxThreadHelper12CreateThreadE12wxThreadKindj_ZN8wxStringaSERK22wxScopedCharTypeBufferIcEDeleteContentswxFONTENCODING_EUC_KR_ZNK9__gnu_cxx17__normal_iteratorIPP12wxEvtHandlerSt6vectorIS2_SaIS2_EEEmiEl_ZN8wxString7replaceENS_8iteratorES0_PKwS2_wxWritableCharTypeBufferwxIMAGE_QUALITY_BOX_AVERAGE_ZNK5wxAny5GetAsEP9wxVariantswscanf_ZN8wxString8iteratorpLEl__is_byteCmpNoCaseReplace_ZNK11wxClassInfo13GetBaseClass2Evresult_type__numeric_traits_integer__are_sameGNU C++ 4.9.0 20140507 (prerelease) -mtune=generic -march=x86-64 -g_ZN9__gnu_cxx14__alloc_traitsISaIP26wxDateTimeHolidayAuthorityEE7destroyERS3_PS2__SC_TZNAME_MAXArg_IntSetAcceleratorTable_ZNK9__gnu_cxx17__normal_iteratorIPwSbIwSt11char_traitsIwESaIwEEEplEl_ZN10wxDateSpanmLEi_ZNKSt6vectorIPKvSaIS1_EE8max_sizeEv_ZNKSt6vectorIsSaIsEE8capacityEv_ZN14wxMenuItemList6AppendEP10wxMenuItem__is_integer__is_pointer_ZNK8wxString13find_first_ofE9wxUniCharm_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE12_M_find_nodeEPNSA_10_Hash_nodeIS4_Lb0EEERS3_m_ZNKSs13find_first_ofEPKcmm_ZN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEppEiIndexOf_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE3endEmwxPENSTYLE_CROSSDIAG_HATCH_ZN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEppEvGetWeekDayNamereverse_iterator_impl_M_leakwxBITMAP_TYPE_PCXmax_load_factor~wxMDIClientWindowBase__pid_type_ZN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEmIEl_ZNKSt12_Vector_baseIdSaIdEE13get_allocatorEv_ZNKSt6vectorIPvSaIS0_EE8max_sizeEvOnInitnew_allocator >_IO_write_end_SC_LEVEL2_CACHE_ASSOC_ZNK12wxWindowBase13GetDropTargetEv_ZNK22wxScopedCharTypeBufferIwE6lengthEvwxEventTypeTag_ZNKSs7compareEmmRKSsmm_ZNSt6vectorIPKvSaIS1_EE14_M_fill_assignEmRKS1__ZNK6wxSize4GetYEv_ZNSt6vectorIsSaIsEE5eraseEN9__gnu_cxx17__normal_iteratorIPsS1_EES5__ZNSt11char_traitsIwE2eqERKwS2_unique_ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmRKS2_mmint_p_sign_posn_ZNKSt6vectorIP12wxEvtHandlerSaIS1_EE4sizeEv_SC_FD_MGMT_ZNK10wxDateTime11IsLaterThanERKS__ZNKSt6vectorIPKvSaIS1_EEixEm_ZNK12wxUniCharRefcvbEvwxEventTable_ZNK9__gnu_cxx17__normal_iteratorIPPKvSt6vectorIS2_SaIS2_EEE4baseEvSetSecondwxTHREAD_JOINABLEreverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >_ZN15wxLogRecordInfo10StoreValueERK8wxStringmallocator, false> >GetDefaultAttributes_ZN7FrmMain13sm_eventTableEwctrans_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE2atEm_ZNKSt6vectorIiSaIiEE6rbeginEv_ZNK22wxScopedCharTypeBufferIwE4Data3GetEv_ZN8wxString7FormatVERKS_P13__va_list_tag_ZNK8wxString4findE12wxUniCharRefm_ZNSt6vectorIcSaIcEE5clearEv_ZNSt6vectorIPvSaIS0_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EE_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEmIElArg_LongInt_ZN9__gnu_cxx14__alloc_traitsISaIPK17wxEventTableEntryEE10_S_on_swapERS4_S6__ZNSt6vectorIP9wxToolTipSaIS1_EE4rendEvRemoveAtDoPrintfWchar_ZNK12wxDataFormateqEP8_GdkAtomParseFormatwxSHOW_EFFECT_EXPANDwxFONTENCODING_CP1250wxFONTENCODING_CP1251wxFONTENCODING_CP1252_ZN8wxString6RemoveEmwxFONTENCODING_CP1254wxFONTENCODING_CP1255wxFONTENCODING_CP1256wxFONTENCODING_CP1257wxFONTENCODING_CP1258wxTHREAD_NO_ERROR_ZN8wxString21reverse_iterator_implINS_8iteratorEEpLEl__is_arithmetic_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE4backEv_ZN21wxEventTableEntryBaseC2EiiP14wxEventFunctorP8wxObjectwxMax_ZNSt6vectorIP12_GdkDrawableSaIS1_EE6assignEmRKS1__ZNK10wxDateTime18GetJulianDayNumberEv__is_pointer, false>*>wxQueryNewPaletteEvent__constant_iteratorsnposwxEVT_WINDOW_MODAL_DIALOG_CLOSED_ZNK9wxUniCharleEc_ZNK9wxUniCharneEs_ZNK9wxUniCharleEh_ZNK9wxUniCharleEi_ZNK9wxUniCharleEj_ZNK9wxUniCharleEl_ZNK9wxUniCharneEwfind_first_not_of_ZNK9wxUniCharleEs_ZNK9wxUniCharleEt_ZNK9wxUniCharleEw_ZNK9wxUniCharleEx_ZNK9wxUniCharleEy_ZN13wxVariantData4ReadER8wxString_ZNSt6vectorIdSaIdEE3endEv_ZNKSs6lengthEvidLast_ZNSt6vectorIPvSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EEmRKS0__ZN10wxDateTime8GetTmNowEP2tm_M_clearmbrtowc_ZN9__gnu_cxx14__alloc_traitsISaIP9wxToolTipEE8max_sizeERKS3_m_funcPtr_ZNK9__gnu_cxx13new_allocatorISt10_List_nodeIP10wxMenuItemEE7addressERS4_vector >wxPENSTYLE_DOTwxEVT_ENTER_WINDOW_SC_CHILD_MAX_ZNSt12_Vector_baseIP12_GdkDrawableSaIS1_EE12_Vector_impl12_M_swap_dataERS4__ZNSt6vectorIsSaIsEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPsS1_EES5__ZN13wxTrackerNode15OnObjectDestroyEv_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEmRKS1__ZNSt6vectorIPKvSaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7___normal_iterator > >_ZN9__gnu_cxx13new_allocatorINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEED2Ev_ZN9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS2_SaIS2_EEEppEi_ZNSt6vectorIsSaIsEE14_M_fill_assignEmRKsAsInternal_ZN9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS2_SaIS2_EEEppEv__is_floatingreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE4rendEv_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EEmRKS2__ZNKSt12_Vector_baseIdSaIdEE19_M_get_Tp_allocatorEviterator_traits<__gnu_cxx::__normal_iterator > > >_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE11equal_rangeERS3___is_normal_iterator<__gnu_cxx::__normal_iterator > > >GetWeekDayiterator_traitswxWindowIDFormatISOCombinedwxPrivate_ZNK7wxEvent12GetEventTypeEv_M_dataHasTransparentBackground_ZNK12wxUniCharRefcvxEv_ZNK9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEmiEl_ZN8wxString6insertENS_8iteratorEPKwS2__ZNK8wxString6IsWordEvdoubleIsTopLevel_ZNSt6vectorIP12_GdkDrawableSaIS1_EE6rbeginEv_ZN12wxWindowBase15SetFocusFromKbdEv_ZN9wxAppBase14SetDisplayModeERK11wxVideoMode_ZNK8wxString12find_last_ofERK10wxCStrDatam_ZNK9__gnu_cxx13new_allocatorIPK17wxEventTableEntryE7addressERKS3__ZNSt6vectorImSaImEE5clearEvSetDay_SC_2_C_BINDGetBestVirtualSize_ZNK9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS5_ELb0EEEE8max_sizeEv_ZN20wxTopLevelWindowBase22SetRepresentedFilenameERK8wxString_ZNSt6vectorIsSaIsEE5frontEv__traitor, std::__is_pointer >__is_normal_iterator<__gnu_cxx::__normal_iterator > > >NZDT_ZN9__gnu_cxx17__normal_iteratorIPPvSt6vectorIS1_SaIS1_EEEpLEl_ZN9__gnu_cxx14__alloc_traitsISaIP26wxDateTimeHolidayAuthorityEE8allocateERS3_m_ZNK8wxString11ToStdStringEvwxBITMAP_TYPE_PNG_ZNSt11char_traitsIcE7compareEPKcS2_mresetwxEventTypeTag_ZN11wxRealPointpLERKS__ZNK10wxDateTimeltERKS__ZNK19wxTopLevelWindowGTK8GetTitleEv_M_create_storageGetToolBar_ZN8wxString7replaceEmmPKwm_ZNSs5clearEvwxFONTENCODING_MACJAPANESEwxBITMAP_TYPE_CUR_RESOURCE_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_refcopyEvComputeWeekDay_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE6bucketERS3_m_days_ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2__ZNSt12_Vector_baseIP12_GdkDrawableSaIS1_EE13_M_deallocateEPS1_m_ZNKSt12_Vector_baseIPvSaIS0_EE19_M_get_Tp_allocatorEv_ZNKSbIwSt11char_traitsIwESaIwEEixEm_M_create_nodereverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNK10wxDateTime9IsBetweenERKS_S1___is_normal_iterator__unordered_map >, false>_ZN10wxDateTime15GetNumberOfDaysEiNS_8CalendarEallocator, false>*>_ZNK10wxTimeSpan12IsLongerThanERKS__ZNK9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEEmiElwxID_UNDERLINE_ZNKSt12_Vector_baseI8wxStringSaIS0_EE19_M_get_Tp_allocatorEv_SC_SHRT_MINwxUIntPtr_ZN5wxApp14GetXVisualInfoEvwxFONTENCODING_CP932wxFONTENCODING_CP936argptrwxID_OSX_HIDEOTHERS_ZNSt6vectorIdSaIdEE5eraseEN9__gnu_cxx17__normal_iteratorIPdS1_EES5__ZNK8wxString12find_last_ofEPKwm_ZNSt6vectorI8wxStringSaIS0_EE3endEvGetCurrentYear_ZN8wxString9UpperCaseEv_ZN8wxLogger4LogVEPvRK8wxStringP13__va_list_tag_ZNK17wxULongLongNativeanERKS__ZN6wxSizemIERKS__ZNK10wxCStrData7AsWCharEvwxFONTENCODING_CP949_ZNSbIwSt11char_traitsIwESaIwEE6assignERKS2_mm_ZN9__gnu_cxx13new_allocatorIlE9constructEPlRKl_ZN10wxDateTime9ParseDateERK8wxStringPNS0_14const_iteratorEallocator_ZNKSs5emptyEv_ZNK14wxEventTypeTagI21wxDisplayChangedEventEcvRKiEv_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE6assignEmRKS2__ZNSsaSEPKc_ZNSt6vectorI8wxStringSaIS0_EEaSERKS2_wxFONTENCODING_CP950_S_right_ZN6wxSize9SetHeightEi_ZN9__gnu_cxx13new_allocatorIlE8allocateEmPKv_ZNKSt6vectorIsSaIsEE2atEmLocalSetFocusIgnoringChildren_ZNK29wxEventTableEntryPointerArray4LastEvwxID_OSX_SHOWALLwxMutexInternal_ZNKSt10_Select1stISt4pairIK8wxStringmEEclERS3_wxTHREAD_RUNNING_ZN8wxString8iteratormIEl_ZNKSt6vectorIP12_GdkDrawableSaIS1_EE4dataEv_ZNK8wxString17find_first_not_ofE9wxUniCharm__tmp_Node_const_iterator, false, false>_ZNKSs16find_last_not_ofERKSsmwxEVT_AUX1_UPGetHourwxCRITSEC_NON_RECURSIVESetHourAppendSeparator_ZNKSt6vectorIP9wxToolTipSaIS1_EE2atEmwxByte_ZN9__gnu_cxx14__alloc_traitsISaIP26wxDateTimeHolidayAuthorityEE17_S_select_on_copyERKS3__ZNSt11char_traitsIcE2ltERKcS2__ZNK9__gnu_cxx17__normal_iteratorIPwSbIwSt11char_traitsIwESaIwEEEmiElRegister_ZNK13wxVariantData8GetAsAnyEP5wxAnyOSXIsModified_ZN10wxTimeSpan3DayEvDissociateHandle__traitor, std::__is_floating<_GdkDrawable*> >~ConvertedBuffer_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc_ZNKSt12_Vector_baseIP9wxToolTipSaIS1_EE19_M_get_Tp_allocatorEv_ZN8wxStringaSERK22wxScopedCharTypeBufferIwE_ZNKSt6vectorIP9wxToolTipSaIS1_EEixEm_ZNSbIwSt11char_traitsIwESaIwEE6insertEmPKwm__is_floatingwxFONTENCODING_MACKOREAN_ZN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEmmEv_SC_PII_INTERNET_DGRAMStrCopy_ZN9__gnu_cxx13new_allocatorIiE10deallocateEPim_ZN9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEE8allocateEmPKv_ZN9__gnu_cxx13new_allocatorIcE7destroyEPcvector >_ZN6wxSize11SetDefaultsERKS_wxLOG_FatalError_Node_const_iterator, false, false>wxWritableCharTypeBuffer~Init_ZNK9__gnu_cxx13new_allocatorIP12_GdkDrawableE7addressERS2_time_t_ZNSt6vectorImSaImEE4backEv_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7__Rep_base_ZN9__gnu_cxx14__alloc_traitsISaIlEE8allocateERS1_mwxUniCharRef_M_erase_node__is_floating, false>*>wxBITMAP_TYPE_ICOungetwcHide_ZNSt6vectorIPvSaIS0_EEaSERKS2__ZNSt6vectorIdSaIdEE4swapERS1___off_t_ZNK22wxScopedCharTypeBufferIcEixEmm_table_ZNK9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEptEv_ZN12wxWindowBase25ProcessWindowEventLocallyER7wxEvent_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEmRKS1__ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS3_SaIS3_EEEEE4baseEv_Node_iterator, false, false>__are_samewxDefaultPosition_ZNKSs15_M_check_lengthEmmPKciterator_traits<__gnu_cxx::__normal_iterator > > >_ZN9wxUniChar8ToHi8bitEj_ZNK9__gnu_cxx13new_allocatorIiE7addressERKi_SC_NL_SETMAX_ZNKSt6vectorIPvSaIS0_EE4dataEv_ZNSt6vectorIP11wxClassInfoSaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE__normal_iterator > >_ZNSt4listIP10wxMenuItemSaIS1_EE6removeERKS1__SC_FIFO_ZNK7wxEvent17GetPropagatedFromEv_ZNKSt6vectorIdSaIdEE4rendEv_ZNK14wxMenuItemList6MemberEP10wxMenuItem_SC_SIGQUEUE_MAX_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEEEE4baseEv__is_pointer_ZNSbIwSt11char_traitsIwESaIwEE6assignEPKwmwxEVT_SYS_COLOUR_CHANGED_ZN8wxString21reverse_iterator_implINS_8iteratorEEmIElDeleteObject_ZNKSs6substrEmmwxBITMAP_TYPE_IFF_ZN8wxString13DoFormatWcharEPKwz__mbstate_t_ZNK8wxString17find_first_not_ofEPKcmm_M_rep_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE4rendEv_ZNKSt10_List_baseIP10wxMenuItemSaIS1_EE19_M_get_Tp_allocatorEvitemid_ZNSs5beginEviterator_traitsAddNode__alloc_traits >allocator_ZN22wxControlContainerBaseD0Ev_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEEppEiskipws_ZN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEppEi_ZNSs10_S_compareEmm_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEEppEv_S_decEventClass__is_byte_Z8wxGetAppv_ZN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEppEv_ZNK8wxString5rfindE12wxUniCharRefm_ZN9__gnu_cxx24__numeric_traits_integerIsE5__minE__max_ZNKSt6vectorIcSaIcEE4sizeEvGetActiveChildbasic_string, std::allocator >wxButtonNameStrsm_updateInterval_ZNK14wxMenuItemList6NumberEvwxWINDOW_VARIANT_NORMAL_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE__is_normal_iterator<__gnu_cxx::__normal_iterator > > >wxULongLongNative_ZNK12wxWindowBase21DoGetBestClientHeightEism_eventHashTable_ZNK8wxString21reverse_iterator_implINS_14const_iteratorEEplEl_ZN20wxMDIParentFrameBase12ArrangeIconsEv_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEdeEv__is_move_iterator_ZNK16wxLongLongNativeeoERKS__ZNK9__gnu_cxx17__normal_iteratorIPP9wxToolTipSt6vectorIS2_SaIS2_EEEplElcapacity_vptr.wxAnyValueType_ZNKSt3tr18__detail15_Hash_code_baseI8wxStringSt4pairIKS2_mESt10_Select1stIS5_E13wxStringEqual12wxStringHashNS0_18_Mod_range_hashingENS0_20_Default_ranged_hashELb0EE13_M_store_codeEPNS0_10_Hash_nodeIS5_Lb0EEEm_ZN20wxNonOwnedWindowBase16DoSetRegionShapeERK8wxRegion_ZN9__gnu_cxx13new_allocatorIP10wxMenuItemED2Evm_handler_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE7reserveEm_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE19_M_allocate_bucketsEmm_convertedToChar_ZNSt3tr18__detail9_Map_baseI8wxStringSt4pairIKS2_mESt10_Select1stIS5_ELb1ENS_10_HashtableIS2_S5_SaIS5_ES7_13wxStringEqual12wxStringHashNS0_18_Mod_range_hashingENS0_20_Default_ranged_hashENS0_20_Prime_rehash_policyELb0ELb0ELb1EEEEixERS4__ZN9__gnu_cxx14__alloc_traitsISaIiEE8allocateERS1_m_ZN9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS2_SaIS2_EEEmmEiSetDisplayModeopenmode_ZN7wxMutex11LockTimeoutEm_ZNK14wxEventTypeTagI12wxTimerEventEcvRKiEv_ZN9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS2_SaIS2_EEEmmEv_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5eraseENSA_19_Hashtable_iteratorIS4_Lb0ELb0EEESG__ZNKSbIwSt11char_traitsIwESaIwEE4sizeEv_ZNK9__gnu_cxx13new_allocatorINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEE8max_sizeEv_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS3_SaIS3_EEEEEmiElwxMDIClientWindow_ZNK8wxString16find_last_not_ofERK22wxScopedCharTypeBufferIwEm_ZNSt6vectorIsSaIsEE8pop_backEv_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEEmiEl_SC_EQUIV_CLASS_MAX_ZNK9__gnu_cxx17__normal_iteratorIPP12wxEvtHandlerSt6vectorIS2_SaIS2_EEEptEv_ZNK16wxLongLongNativemlERKS_wxLOG_Debug_SC_REGEX_VERSION_ZNK8wxString5beginEviterator_type__normal_iterator > >wxBITMAP_TYPE_PNM_ZNSt6vectorIiSaIiEE7reserveEm_M_allocateint_p_cs_precedes_ZNSt12_Vector_baseI8wxStringSaIS0_EE17_M_create_storageEm~wxRefCounter_ZN9__gnu_cxx14__alloc_traitsISaIPvEE8max_sizeERKS2__ZNSs9push_backEcwxTheAssertHandlerm_clientWindow_ZNSbIwSt11char_traitsIwESaIwEE4_Rep7_M_grabERKS1_S5__ZNSt6vectorI8wxStringSaIS0_EE5clearEv_ZNKSt6vectorImSaImEE2atEm_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS4_SaIS4_EEEEEppEi_ZNKSt6vectorIPKvSaIS1_EE3endEv_ZNSt12_Vector_baseIP12_GdkDrawableSaIS1_EE17_M_create_storageEm_ZN9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS5_ELb0EEEED2EvSetSizeHints_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS4_SaIS4_EEEEEppEv_ZN9__gnu_cxx17__normal_iteratorIPPvSt6vectorIS1_SaIS1_EEEmIElwxPENSTYLE_CROSS_HATCHToLongLong_ZNKSt3tr18__detail19_Hashtable_iteratorISt4pairIK8wxStringS3_ELb0ELb0EEdeEvFrmMain_ZNSaISt4pairIK8wxStringS0_EEC2INSt3tr18__detail10_Hash_nodeIS2_Lb0EEEEERKSaIT_E_ZNK12wxWindowBase21IsTopNavigationDomainEvwxPENSTYLE_DOT_DASH__is_integer<_GdkDrawable*>_SC_TRACE_NAME_MAX~wxVariantData_ZNK16wxLongLongNative5GetHiEvwxMUTEX_NO_ERROR_SC_XOPEN_UNIXwxSHOW_EFFECT_SLIDE_TO_LEFT_ZNSt6vectorIsSaIsEE4swapERS1__ZN9__gnu_cxx14__alloc_traitsISaIPvEE17_S_select_on_copyERKS2__ZNK5wxAnyeqEa_ZNK5wxAnyeqEb_ZNK5wxAnyeqEd_ZNK5wxAnyeqEf_ZNK5wxAnyeqEh_ZNK5wxAnyeqEi_ZNK5wxAnyeqEj_ZNK5wxAnyeqEl_ZNK5wxAnyeqEm_ZNKSt6vectorIPK17wxEventTableEntrySaIS2_EE3endEv_ZNK5wxAnyeqEs_ZNK5wxAnyeqEtsizetypeaccel_ZNSt6vectorImSaImEE3endEv_ZNK5wxAnyeqEx_ZNK5wxAnyeqEy_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEwm_ZN12wxStringHashaSERKS_SetCountry_ZN18wxAcceleratorTableaSERKS__ZN22wxAsyncMethodCallEvent7ExecuteEv_ZNSs6insertEmPKc_SC_AIO_MAX_SC_PII_OSI_CLTSSeconds_ZNSt6vectorIP11wxClassInfoSaIS1_EE5frontEv_ZNK8wxString21reverse_iterator_implINS_8iteratorEEneERKS2__ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEE4baseEv_ZNK8wxString6BeforeE9wxUniCharm_months_ZN13wxTrackerNode17ToEventConnectionEv_ZN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEpLEl_ZNK10wxTimeSpan15GetMillisecondsEvwxDefaultValidator_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_RKSswxID_FORWARD__min__is_move_iterator<__gnu_cxx::__normal_iterator > > >_ZN9__gnu_cxx14__alloc_traitsISaIcEE10deallocateERS1_Pcm_ZN16wxLongLongNativeoRERKS_FromDouble__is_normal_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt6vectorIcSaIcEE5beginEvwxConvFileName_ZNK12wxUniCharRefleERKS__ZNK9wxUniCharltEc_ZNK11wxClassInfo12CreateObjectEv_ZNK9wxUniCharltEh_ZNK9wxUniCharltEi_ZNK9wxUniCharltEj_ZNK9wxUniCharltEl_ZNK9wxUniCharltEmnegative_sign_ZNK9wxUniCharltEt_ZNK9wxUniCharltEw_ZNK9wxUniCharltEx_ZNK9wxUniCharltEy_ZNKSt6vectorIPKvSaIS1_EE5beginEv_ZNSbIwSt11char_traitsIwESaIwEE7reserveEm_ZNK16wxLongLongNativegtERKS__ZN16wxCharTypeBufferIcEaSERK22wxScopedCharTypeBufferIcEallocator >_ZNSt6vectorIPvSaIS0_EE5clearEv_SC_2_PBSwxEVT_JOY_BUTTON_UPcout_ZNSt6vectorIPvSaIS0_EE14_M_fill_assignEmRKS0__ZNSt6vectorIsSaIsEE18_M_fill_initializeEmRKs_ZNKSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EEixEm_ZNSt10_List_baseIP10wxMenuItemSaIS1_EE11_M_get_nodeEv_ZNK9__gnu_cxx17__normal_iteratorIPP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEEixEl_ZNSt8__detail15_List_node_base11_M_transferEPS0_S1__ZNKSt6vectorI8wxStringSaIS0_EEixEm_ZNKSs5c_strEv_ZNKSt6vectorIPvSaIS0_EE6rbeginEv_ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwm_ZN8wxLoggeraSERKS__ZN10wxTimeSpan6SecondEv~allocator_ZNSt6vectorI8wxStringSaIS0_EE6assignEmRKS0__ZNK9__gnu_cxx13new_allocatorIP11wxClassInfoE7addressERS2__ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5eraseENSA_25_Hashtable_const_iteratorIS4_Lb0ELb0EEESG_wxID_PAGE_SETUPDoGetScreenPosition_ZNK9__gnu_cxx13new_allocatorISt4pairIK8wxStringmEE7addressERS4__ZNSt10_List_baseIP10wxMenuItemSaIS1_EE8_M_clearEvm_valuecolBgwxFileSelectorDefaultWildcardStrallocator_ZNK8wxString8iteratormiERKS0__ZN17wxULongLongNativeoRERKS_false_type_ZN8wxString6PrintfERK14wxFormatString_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS3_SaIS3_EEEEEixElwxPanelNameStrDecBy_ZNKSbIwSt11char_traitsIwESaIwEE6substrEmm_ZNKSbIwSt11char_traitsIwESaIwEE9_M_ibeginEvConvertToEvtMethod__is_integer_ZNK9wxUniCharneERKS__ZN8wxString12From8BitDataEPKcm_ZNK8wxString12find_last_ofERK22wxScopedCharTypeBufferIwEmint_n_sign_posn_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5eraseERS3__ZNKSt6vectorImSaImEE4dataEvwxEventTypeTag_ZNK14wxMenuItemList22compatibility_iterator7GetDataEv_ZNSt6vectorIP11wxClassInfoSaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZNSt6vectorIiSaIiEE4rendEv_ZN9__gnu_cxx14__alloc_traitsISaImEE10deallocateERS1_Pmmm_offsetIsShorterThan_ZNSs6appendEPKc__is_floatingsetlocale_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofERKS2_m_ZNK9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEE4baseEv_ZNK9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEplEl_ZN8wxString9PosToImplEm_ZNSt12_Vector_baseIiSaIiEE11_M_allocateEm_ZNKSt6vectorIPKvSaIS1_EE4dataEv_SC_MQ_PRIO_MAXwxFONTENCODING_MACARABIC_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEwm_ZNSt6vectorIdSaIdEE2atEm_ZN8wxString17SubstrBufFromTypeI22wxScopedCharTypeBufferIwEED2Evtm_isdstcolFg_M_need_rehash_ZNK9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEptEv__normal_iterator > >__are_sameGetClassName_ZNK10wxDateTime14GetWeekOfMonthENS_9WeekFlagsERKNS_8TimeZoneE_ZNKSt6vectorIsSaIsEE14_M_range_checkEmwxEVT_JOY_MOVE__is_normal_iterator<__gnu_cxx::__normal_iterator > > >wxCHK_CHECKEDm_eventTypeTablems_country_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE8max_sizeEv_ZNK8wxString5rfindERK22wxScopedCharTypeBufferIwEmm_Select1st >_ZNK9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEEixElwxConvLibcPtr__is_integer_ZNK9__gnu_cxx13new_allocatorIP12_GdkDrawableE8max_sizeEv_ZN9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS2_SaIS2_EEEpLEl_ZNSt6vectorIcSaIcEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPcS1_EE_ZNKSt6vectorIiSaIiEE3endEv_ZNK8wxString14const_iteratorltERKS0__M_insert_bucket_ZNSt12_Vector_baseIP12wxEvtHandlerSaIS1_EE19_M_get_Tp_allocatorEv_ZNK14wxEventTypeTagI26wxMouseCaptureChangedEventEcvRKiEv_ZNK20wxTopLevelWindowBase10IsTopLevelEv_ZNK10wxDateTimemiERK10wxDateSpan_ZN8wxThread8OnDeleteEvArg_Char~wxScopedCharTypeBufferGetEventTypepair, false, false>, std::tr1::__detail::_Hashtable_iterator, false, false> >_IO_read_baseMonthswxObjectConstructorFnSetShapewxTopLevelWindowGTKHasFlagGetKeyIntegerwxTHREAD_KILLEDwstring_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEGdkAtom_ZNK14wxEventTypeTagI12wxMouseEventEcvRKiEv_ZN5wxAny13AssignVariantERK9wxVariantfront_ZNSt4listIP10wxMenuItemSaIS1_EE6spliceESt14_List_iteratorIS1_ERS3_S5__ZNSt6vectorIlSaIlEE5frontEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEEmmEiiterator_traits_ZNSt6vectorIlSaIlEE8pop_backEv_ZN14wxFormatStringD2Evreverse_iterator >_ZN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEmmEi_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEEmmEvwmemset_ZNSt6vectorIcSaIcEE6rbeginEv_ZN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEmmEv_ZNSbIwSt11char_traitsIwESaIwEEpLEwGMT13_SC_USHRT_MAXEventTypeTablePointerwxTimerEvent_ZNK14wxAnyValueType12ConvertValueERK16wxAnyValueBufferPS_RS0_wxID_HELP_INDEX_Referencefloatfield_ZNKSs9_M_ibeginEv_ZNK8wxString11BeforeFirstE9wxUniCharPS__ZNK10wxCStrData6AsCharEv_ZN9__gnu_cxx13new_allocatorIP9wxToolTipE9constructEPS2_RKS2__ZNK8wxString7compareEmmPKcm__is_integer_ZNSt6vectorIPvSaIS0_EE4rendEvm_iter__traitor, false>*>, std::__is_pointer, false>*> >_ZNK8wxString21reverse_iterator_implINS_14const_iteratorEEmiElMaybeStore_ZNK9__gnu_cxx17__normal_iteratorIPP9wxToolTipSt6vectorIS2_SaIS2_EEEmiEl_ZNK10wxTimeSpan8GetValueEv~wxEventConnectionRef__tcf_0_ZNSt12_Vector_baseIcSaIcEE17_M_create_storageEm_ZNK12wxWindowBase19CanApplyThemeBorderEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEEpLElwxCRITSEC_DEFAULTtm_yday_ZNK9__gnu_cxx13new_allocatorIcE7addressERc_ZN15wxLogRecordInfoD2EvwxObjectEventFunction_ZN9__gnu_cxx13new_allocatorINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS5_ELb0EEEE10deallocateEPS8_m_GLOBAL__sub_I__ZN7FrmMain13sm_eventTableE_ZN9wxUniCharaSERKS__ZN9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS1_SaIS1_EEEppEi_ZNKSs4findEcm_ZNK12wxWindowBase24AcceptsFocusFromKeyboardEv_ZN12wxWindowBase14HideWithEffectE12wxShowEffectj_ZN6wxSize16DecToIfSpecifiedERKS__ZNKSt3tr18__detail15_Hash_code_baseI8wxStringSt4pairIKS2_mESt10_Select1stIS5_E13wxStringEqual12wxStringHashNS0_18_Mod_range_hashingENS0_20_Default_ranged_hashELb0EE15_M_bucket_indexEPKNS0_10_Hash_nodeIS5_Lb0EEEm_ZNKSs4copyEPcmmclassName_ZNK10wxDateSpanplERKS_WeekDay_ZNK9wxUniChargeEc_ZNK9wxUniChargeEh_ZNK9wxUniChargeEi_ZNK9wxUniChargeEj_ZNK9wxUniChargeEl_ZNK9wxUniChargeEmwxID_CANCEL_ZNK9wxUniChargeEs_ZNK9wxUniChargeEt_ZNK9wxUniChargeEw_ZNK9wxUniChargeEx_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE18_M_fill_initializeEmRKS1_wxID_HELP_SEARCHvector >_ZN17wxCriticalSection8TryEnterEv__is_arithmetic_SC_THREADS_ZN20wxThreadHelperThreadD2Ev_ZN12wxWindowBase26BeginRepositioningChildrenEv_ZNK8wxString12find_last_ofERK22wxScopedCharTypeBufferIcEmm_ZNK9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEE4baseEv_M_startwxLOG_Progress_ZNK9__gnu_cxx17__normal_iteratorIPwSbIwSt11char_traitsIwESaIwEEEptEv_ZNKSt10_List_baseIP10wxMenuItemSaIS1_EE13get_allocatorEvwxBITMAP_TYPE_XBM_ZN11wxFrameBase15PositionMenuBarEv_ZNKSt14_List_iteratorIP10wxMenuItemEptEv_ZNK12wxWindowBase26GetDefaultBorderForControlEvArg_String_ZN16wxAppConsoleBase11GetInstanceEvProcessPendingEvents_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS4_SaIS4_EEEEEmmEi_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS3_SaIS3_EEEEEppEi_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS4_SaIS4_EEEEEmmEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS3_SaIS3_EEEEEppEvwxFONTENCODING_MACCHINESETRAD_ZN14wxMenuItemList6InsertEP10wxMenuItem__is_move_iterator<__gnu_cxx::__normal_iterator > > >_ZNKSt4listIP10wxMenuItemSaIS1_EE13get_allocatorEv_SC_IOV_MAXpair, false, false>, std::tr1::__detail::_Hashtable_const_iterator, false, false> >_ZN16wxCharTypeBufferIwE6extendEm_Hashtable_iterator, false, false>wxRegion_ZNK10wxDateTime8SubtractERK10wxDateSpan_ZNK8wxString8ContainsERKS__ZNK9__gnu_cxx13new_allocatorIP10wxMenuItemE7addressERKS2__ZNSs4_Rep10_M_refdataEv_SC_THREAD_ATTR_STACKSIZE_IO_backup_base_ZN8wxString6resizeEm9wxUniCharGetEventHashTable_ZN12wxDataFormataSERKS__ZN9__gnu_cxx13new_allocatorIP11wxClassInfoE7destroyEPS2_DoDeleteContents_ZNK9__gnu_cxx13new_allocatorIdE8max_sizeEv_ZNSt6vectorIP11wxClassInfoSaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7__ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmRKS2_wxEOFwxOrientation_ZNK14wxMenuItemList22compatibility_iterator11GetPreviousEv_ZNK29wxEventTableEntryPointerArray5CountEv_ZN10wxDateTime9ParseDateERK10wxCStrData_Alloc_hiderms_doLog_ZN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEmIElShouldInheritColourswxID_OPEN_ZN10wxTimeSpan3AddERKS_iterator_traits_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5eraseENSA_19_Hashtable_iteratorIS4_Lb0ELb0EEE_ZNKSt6vectorIP11wxClassInfoSaIS1_EE4backEvallocator_ZNK8wxString5rfindERKS_m_ZNK10wxDateTime10GetRataDieEv_SC_READER_WRITER_LOCKSmb_str_ZNK16wxLongLongNative7asArrayEv__normal_iterator > >reverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNK22wxScopedCharTypeBufferIcE4Data3GetEv_ZNK9__gnu_cxx13new_allocatorIPK17wxEventTableEntryE8max_sizeEvn_sep_by_space_ZN21wxEventTableEntryBaseD2EvGetMonthName__is_arithmetic_ZNSt6vectorIPKvSaIS1_EE15_M_erase_at_endEPS1__ZNK8wxString4FreqE9wxUniCharwxImageHistogramEntryrebind<_GdkDrawable*>_ZN12wxDataFormat14PrepareFormatsEv_ZN9__gnu_cxx14__alloc_traitsISaI8wxStringEE8max_sizeERKS2__ZN12wxDataFormat5SetIdERK8wxStringvwprintfEventArg_ZNSt4listIP10wxMenuItemSaIS1_EE8pop_backEv_ZN23wxCriticalSectionLockerD2Ev_ZN20wxNonOwnedWindowBase17InheritAttributesEv_ZNSbIwSt11char_traitsIwESaIwEE6assignEmw_ZNSaISt10_List_nodeIP10wxMenuItemEEC2Ev_SC_NL_ARGMAX_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE16_M_insert_bucketERKS4_mm_ZNK12wxWindowBase20GetDefaultAttributesEv_ZN12wxEvtHandler19ProcessEventLocallyER7wxEventwxID_CLOSE_ALLwchar_str_ZNK10wxDateTime7GetYearERKNS_8TimeZoneEoperator const wxStdWideString&DecTowxBITMAP_TYPE_ICO_RESOURCEiterator_ZNKSt14_List_iteratorIP10wxMenuItemEeqERKS2_wxListBoxNameStriterator_traitsToUTF8__normal_iterator_Ios_Openmode_ZNK9__gnu_cxx17__normal_iteratorIPPvSt6vectorIS1_SaIS1_EEE4baseEvwxCheckBoxState_ZNK10wxCStrData9AsCharBufEv__is_byte, false>*>_ZN8wxString7replaceENS_8iteratorES0_m9wxUniChar_ZN10wxDateSpan4WeekEvMilliseconds_ZN9__gnu_cxx14__alloc_traitsISaIP11wxClassInfoEE17_S_select_on_copyERKS3__ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEEpLEl_ZNK8wxString7compareERK10wxCStrData_ZN9__gnu_cxx13new_allocatorIiE7destroyEPiGetCharSetChar_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEEplEl_ZN8wxLogger10LogAtLevelEmRK14wxFormatString_M_hash_code_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS3_SaIS3_EEEEEptEv_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEEptEvSetToWeekDayInSameWeek_ZNK9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEmiEl_ZNK10wxTimeSpan8GetWeeksEvDoLogWithNum_ZNK9__gnu_cxx13new_allocatorIPvE7addressERS1___is_move_iterator<__gnu_cxx::__normal_iterator > > >_flags_ZN8wxString6AppendERK22wxScopedCharTypeBufferIwEm_SC_LINE_MAXstrtodstrtofm_owned_ZN10wxDateTimeaSERK2tmstrtolwxCharTypeBuffer_ZN10wxDateTime10SetFromDOSEmm_owner_ZN11wxTrackable10RemoveNodeEP13wxTrackerNodeGetIterForNthCharwxLOG_Max_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS3_SaIS3_EEEEEdeEv_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_S5_S5__ZNK8wxString4findEPKwmm_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEES2__ZNK22wxScopedCharTypeBufferIcE7releaseEv_ZNK22wxScopedCharTypeBufferIcE4dataEvGetArgumentType_ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwm_ZNSt6vectorI8wxStringSaIS0_EE5beginEv_SC_XOPEN_CRYPT_ZN8wxStringaSEPKc_ZN8wxStringaSEPKhGetMinClientSize_ZNK8wxString16find_last_not_ofEcmright_ZN8wxStringaSEPKw_Rep_ZN20wxObjectEventFunctorD0Ev_ZNSt4listIP10wxMenuItemSaIS1_EEaSERKS3__ZNK9__gnu_cxx17__normal_iteratorIPPvSt6vectorIS1_SaIS1_EEEixEloperator unsigned charGetHandle_ZNK14wxMenuItemList22compatibility_iteratorcvbEv_ZN8wxString17FromUTF8UncheckedEPKcm_Hashtable_const_iterator_ZN10wxDateTime9ParseTimeERK8wxStringPNS0_14const_iteratorE_ZNK8wxString13find_first_ofEPKcm_ZN13wxStringEqualaSERKS__ZNSt6vectorIPKvSaIS1_EE4swapERS3__Hash_node, false>_ZNSs6assignEPKc_ZNKSt6vectorIdSaIdEE4sizeEv_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EEaSERKS3__ZNK9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS2_SaIS2_EEEplElwxBITMAP_TYPE_MACCURSOR_SC_XBS5_ILP32_OFF32wxFONTENCODING_MACSINHALESE_ZNSbIwSt11char_traitsIwESaIwEE2atEm_ZN9__gnu_cxx14__alloc_traitsISaIcEE8allocateERS1_m_ZNSt6vectorIcSaIcEE5eraseEN9__gnu_cxx17__normal_iteratorIPcS1_EES5_wxBRUSHSTYLE_STIPPLE_MASK_ZNSt6vectorIP11wxClassInfoSaIS1_EE4rendEvwxBITMAP_TYPE_XPMvswscanfwxDF_PALETTE_ZN17wxULongLongNativemIEy__is_floating, false>*>_ZNK9wxUniCharntEvGTKNeedsToFilterSameWindowFocuseventEntryTableHour_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS4_SaIS4_EEEEEpLEl_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEmmEi_ZNKSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE3endEv_ZNK9__gnu_cxx13new_allocatorIsE7addressERKs_ZNKSt6vectorIiSaIiEE4backEv_ZNSt4pairIK8wxStringmED2Ev_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEmmEvwxUpdateUIEvent_ZNK17wxULongLongNativeplEywxMDIParentFrameBase_ZNSt6vectorImSaImEE5beginEvdata_ZNK8wxString4FindERK10wxCStrData__is_normal_iterator<__gnu_cxx::__normal_iterator > > >_ZN8wxString4rendEv_ZN10wxDateTime11ParseFormatEPKcRK8wxStringRKS__ZNK10wxCStrDatadeEv_ZN12wxStringHash14charStringHashEPKc_ZN5wxAnyaSEPKw_ZNK5wxAny11HasSameTypeERKS__ZNK10wxTimeSpan6FormatERK8wxString_ZN22wxScopedCharTypeBufferIwE6IncRefEv_ZNK9__gnu_cxx13new_allocatorIP26wxDateTimeHolidayAuthorityE7addressERS2_wxLongLongNative__is_normal_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEEmIEl_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE11equal_rangeERS3__ZNK9__gnu_cxx17__normal_iteratorIPPKvSt6vectorIS2_SaIS2_EEEmiElbasic_stringGetRataDie_ZNK8wxString7compareEmmPKwm_ZNKSt6vectorIcSaIcEE8capacityEvwxBORDER_STATIC_ZNSt6vectorIPvSaIS0_EE5beginEv_ZNK12wxWindowBase13GetClientSizeEviteratorwxSHOW_EFFECT_SLIDE_TO_TOPwxEVT_NAVIGATION_KEY_ZNK8wxString16find_last_not_ofEhmevent_S_skipwsSetWindowStyleFlag_ZN6wxSizemLEl_Insert_Return_Type_ZN9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS5_ELb0EEEEC2Ev_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE3endEv_vptr.wxRefCounterwxMBConvStrictUTF8wxDateTime_SC_SHRT_MAX_ZNK9wxUniChargeERKS_wxID_VIEW_SORTTYPE_ZNKSs7compareEmmPKcwxPENSTYLE_BDIAGONAL_HATCH_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS3_SaIS3_EEEEEplEl__is_integer_ZN10wxDateTime12GetMonthNameENS_5MonthENS_9NameFlagsE_ZN9__gnu_cxx14__alloc_traitsISaIiEE10_S_on_swapERS1_S3_~wxControlContainerBaseGetModifiedJulianDayNumber_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS3_SaIS3_EEEEEmmEiiterator_traits_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS3_SaIS3_EEEEEmmEvwxFONTENCODING_UTF16BE_ZNK8wxString21reverse_iterator_implINS_8iteratorEEleERKS2__SC_XOPEN_LEGACYpair_ZN8wxString6assignEPKcS1_wxPENSTYLE_FDIAGONAL_HATCH_ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEPKwmm_ZN15wxHashTableBase5DoPutEllPvconstruct_ZN15wxHashTableBase12DoRemoveNodeEP20wxHashTableBase_NodewxBRUSHSTYLE_STIPPLE_ZN9__gnu_cxx14__alloc_traitsISaIP12_GdkDrawableEE17_S_select_on_copyERKS3__ZNKSbIwSt11char_traitsIwESaIwEE5rfindEwm_M_element_count_ZNKSs17find_first_not_ofERKSsm_Hashtable_iterator_base, false>wxID_HELP_CONTENTS_ZNK8wxString5UpperEv_ZNKSt6vectorIP11wxClassInfoSaIS1_EEixEm_SC_PRIORITIZED_IOAddChild_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEEplEl_ZNK17wxULongLongNative7ToULongEv_SC_EXPR_NEST_MAX_ZNK17wxULongLongNativegtERKS__M_compare_SC_XOPEN_ENH_I18N_ZNK9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEE7addressERS9__ZN9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS2_SaIS2_EEEppEi_ZNSt12_Vector_baseIdSaIdEE11_M_allocateEmtm_gmtoff__is_arithmetic, false>*>_ZN9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS2_SaIS2_EEEppEv_ZNSt6vectorIiSaIiEE14_M_fill_assignEmRKirebind_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE9_M_insertERKS4_NS_17integral_constantIbLb1EEEwxBITMAP_TYPE_MACCURSOR_RESOURCEAlignmentvector<_GdkDrawable*, std::allocator<_GdkDrawable*> >iterator_traits_SC_LEVEL4_CACHE_SIZE_ZNK14wxAnyValueType10CopyBufferERK16wxAnyValueBufferRS0__ZNK9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS2_SaIS2_EEEplElGetMaxClientSizewxFONTENCODING_UTF7wxFONTENCODING_UTF8_ZNSt6vectorI8wxStringSaIS0_EE7reserveEm_ZNK14wxEventTypeTagI16wxSetCursorEventEcvRKiEvwxFONTENCODING_BIG5_ZN8wxString7PrependERKS__ZNK16wxLongLongNative8GetValueEv_ZNKSs7compareERKSs__is_floatingFromTimezoneoperator!=_ZNKSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE4backEvwxRIGHT_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKwS8__ZNK12wxUniCharRefcvcEv_ZNSt3tr18__detail24_Hashtable_iterator_baseISt4pairIK8wxStringmELb0EE7_M_incrEvreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZN10wxTimeSpan4HourEv_Rehash_base, std::allocator >, std::_Select1st >, wxStringEqual, wxStringHash, std::tr1::__detail::_Mod_range_hashing, std::tr1::__detail::_Default_ranged_hash, std::tr1::__detail::_Prime_rehash_policy, false, false, true> >_ZNK8wxString9AfterLastE9wxUniChar_M_destroy_ZNK9__gnu_cxx13new_allocatorINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS5_ELb0EEEE7addressERKS8__ZNSt4listIP10wxMenuItemSaIS1_EE8_M_eraseESt14_List_iteratorIS1_Ereverse_iterator<__gnu_cxx::__normal_iterator > > >wxApp_ZN9__gnu_cxx13new_allocatorIdE7destroyEPd_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7__ZN11wxClassInfo8RegisterEv_ZNK17wxULongLongNativersEiwxFONTENCODING_ISO8859_10wxFONTENCODING_ISO8859_11wxFONTENCODING_ISO8859_12wxFONTENCODING_ISO8859_13wxFONTENCODING_ISO8859_14wxFONTENCODING_ISO8859_15_ZNSt6vectorIlSaIlEE4dataEv_ZNSt6vectorIlSaIlEEaSERKS1__ZN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEppEi_ZNK9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEEplEloperator void const*_ZN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEppEv_ZNK9__gnu_cxx13new_allocatorINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEE7addressERS8_IsActivewxID_REDO_M_next_bkt_ZNKSt12_Vector_baseIP12wxEvtHandlerSaIS1_EE13get_allocatorEvwxS_IRUSRwcstoul_ZNK10wxDateTime10GetWeekDayERKNS_8TimeZoneEiterator_traits<__gnu_cxx::__normal_iterator > > >_ZN10wxDateSpan6MonthsEi_ZN8wxLogger3LogEP8wxObjectRK14wxFormatString_ZNSt4listIP10wxMenuItemSaIS1_EE5clearEvDoGet_ZNSt12_Vector_baseIcSaIcEE13_M_deallocateEPcm_ZNSs4_Rep15_M_set_sharableEvswprintfwxID_BACKWARDmbsinit_ZNSs6insertEmRKSs__is_integer_ZN9__gnu_cxx14__alloc_traitsISaIP9wxToolTipEE7destroyERS3_PS2__ZNK14wxEventTypeTagI14wxCommandEventEcvRKiEvAdjustForParentClientOrigin_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE5clearEvm_weekswxFONTENCODING_CP1361_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS3_SaIS3_EEEEEppEv_ZNSt12_Vector_baseIP9wxToolTipSaIS1_EE11_M_allocateEm_IO_save_base_ZNSt12_Vector_baseIPvSaIS0_EE12_Vector_impl12_M_swap_dataERS3_GetXVisualInfo_ZN8wxStringlsERKS__ZNK9wxUniChargtEh_ZNK9wxUniChargtEi_ZNK9wxUniChargtEj_ZNK9wxUniChargtEl_ZNK9wxUniChargtEm_ZNK9__gnu_cxx17__normal_iteratorIPP9wxToolTipSt6vectorIS2_SaIS2_EEEptEv_ZNSt6vectorIdSaIdEE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPdS1_EEmRKd_ZNK9wxUniChargtEs_ZNK9wxUniChargtEt_ZNK9wxUniChargtEw_ZNK9wxUniChargtEx_ZNK9wxUniChargtEywxFD_CHANGE_DIRwinParentCountToCULong_ZNK8wxString12find_last_ofEwmoperator&&__is_move_iterator<__gnu_cxx::__normal_iterator > > >wxID_STATIC_ZNSt11char_traitsIwE11to_int_typeERKw_ZN9__gnu_cxx13new_allocatorIP12_GdkDrawableE7destroyEPS2__ZN20wxNonOwnedWindowBaseaSERKS_operator&=__is_arithmetic, false>*>_ZNK8wxString17find_first_not_ofERK10wxCStrDatamm_ZN8wxString9FromAsciiEPKcm_M_deallocate_nodem_impl_ZN9__gnu_cxx14__alloc_traitsISaIsEE10_S_on_swapERS1_S3__ZN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEmIEl_ZNSt6vectorIP11wxClassInfoSaIS1_EE9push_backERKS1__ZN22wxScopedCharTypeBufferIcE6IncRefEvToUTCCEST_ZN9__gnu_cxx13new_allocatorIlE7destroyEPl_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE4findERS3_wctombwxBITMAP_TYPE_XBM_DATA_ZN15wxHashTableBase8DoDeleteERK8wxStringl_ZN8wxString6appendERKS__S_refcount_ZNK12wxUniCharRefeqEm_ZNK16wxLongLongNativeleEl_ZN9__gnu_cxx17__normal_iteratorIPKwSbIwSt11char_traitsIwESaIwEEEmmEvwxGet_wxConvLibc_ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofERKS2_m_ZNKSs4findEPKcm_ZNKSt6vectorI8wxStringSaIS0_EE8max_sizeEvmon_thousands_sep_ZN17wxCriticalSection5EnterEv_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE13_M_erase_nodeEPNSA_10_Hash_nodeIS4_Lb0EEEPSH__ZNKSt6vectorIPK17wxEventTableEntrySaIS2_EE8max_sizeEvGetWritableChar_Z11wxCreateAppv_ZNKSt6vectorIPvSaIS0_EE2atEmoperator()IsFullScreenwxFONTENCODING_MACCYRILLIC_ZNK10wxDateTime10GetWeekDayENS_7WeekDayEiNS_5MonthEi_ZNK8wxString12find_last_ofERKS_mwxObjectEventFunctor_Z5wxMaxIiiEN24wxImplicitConversionTypeIT_T0_E5valueES1_S2__ZNSt3tr18__detail25_Hashtable_const_iteratorISt4pairIK8wxStringS3_ELb0ELb0EEppEv_ZN19wxNavigationEnabledI8wxWindowEaSERKS1__SC_DELAYTIMER_MAX_IO_FILE_SC_2_PBS_ACCOUNTING_S_adjustfield_ZNK9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEEplEl_ZNSt6vectorIP12_GdkDrawableSaIS1_EE2atEmrebind >_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8__ZNK9wxUniCharcvhEv_ZNSt11char_traitsIcE6assignERcRKc_ZNK12wxUniCharRefcvyEv_ZN10wxTimeSpan8SubtractERKS__ZNSt6vectorIP12_GdkDrawableSaIS1_EE6resizeEmS1_wxPENSTYLE_HORIZONTAL_HATCH_ZN14wxMenuItemList14DeleteContentsEb_ZN10wxDateSpan3DayEv_ZN10wxDateTime15ParseRfc822DateERK8wxStringPNS0_14const_iteratorE_ZNK10wxDateTime9GetMinuteERKNS_8TimeZoneE_ZN10wxDateTime3SetEtNS_5MonthEittttwxID_PREFERENCES__traitor, std::__is_floating >_ZNSt11char_traitsIcE7not_eofERKireverse_iterator<__gnu_cxx::__normal_iterator > > >_ZN9__gnu_cxx14__alloc_traitsISaIPvEE10deallocateERS2_PS1_m_ZNKSt3tr18__detail12_Rehash_baseINS0_20_Prime_rehash_policyENS_10_HashtableI8wxStringSt4pairIKS4_mESaIS7_ESt10_Select1stIS7_E13wxStringEqual12wxStringHashNS0_18_Mod_range_hashingENS0_20_Default_ranged_hashES2_Lb0ELb0ELb1EEEE15max_load_factorEvoperator*=__traitor, std::__is_floating >wxStringToStringHashMap__is_arithmetic__normal_iterator > >_ZNKSt6vectorIlSaIlEE8max_sizeEv_ZNK12wxWindowBase19DoGetBestClientSizeEv_ZNK11wxTrackable8GetFirstEv_ZNK8wxString16find_last_not_ofERK10wxCStrDatamm_ZNK10wxDateTime11IsEqualUpToERKS_RK10wxTimeSpan_ZNK9__gnu_cxx17__normal_iteratorIPP9wxToolTipSt6vectorIS2_SaIS2_EEE4baseEv_ZNKSt3tr18__detail25_Hashtable_const_iteratorISt4pairIK8wxStringmELb0ELb0EEdeEv_SC_USER_GROUPSrebind_ZN9__gnu_cxx14__alloc_traitsISaIcEE17_S_select_on_copyERKS1_operator++_Key_SC_NETWORKINGm_list__unordered_map >, false>operator+=_ZN8wxString9FromAsciiEPKhmfwide_ZNK10wxCStrData14AsUnsignedCharEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS4_SaIS4_EEEEEmIEl_ZN9__gnu_cxx13new_allocatorIP12wxEvtHandlerE7destroyEPS2__ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS3_SaIS3_EEEEEpLElios_base_ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmPKw_ZN10wxDateTime11ParseFormatERK10wxCStrDataRK8wxStringRKS__ZNK8wxString13find_first_ofEPKwm_ZNK17wxULongLongNativemiEy_ZNK10wxDateTime14GetPrevWeekDayENS_7WeekDayE_ZN8wxString7replaceEmmPKw_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE2atEm_ZNK12wxWindowBase20DoGetBestClientWidthEi_ZNSt4listIP10wxMenuItemSaIS1_EE9push_backERKS1_wxStringImpl__is_arithmeticFrom8bit_SC_ULONG_MAX_ZNSt6vectorIP12_GdkDrawableSaIS1_EE3endEvwxDF_PRIVATEwxID_PROPERTIESrebind_ZNK8wxString17find_first_not_ofEPKcmoperator--_SC_CLOCK_SELECTION_SC_2_LOCALEDEFwxEventTypeTagoperator-=operator->_ZNK10wxDateSpan3AddERKS___is_byte_ZNKSt6vectorIdSaIdEE5beginEv_ZNSt6vectorIiSaIiEE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPiS1_EEmRKi_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS2_SaIS2_EEEEEdeEv_ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEwm_ZN9__gnu_cxx14__alloc_traitsISaIdEE10_S_on_swapERS1_S3__ZN8wxString6assignEm12wxUniCharRefkey_eqwxID_MDI_WINDOW_TILE_HORZwxWindowVariant_ZNSt6vectorI8wxStringSaIS0_EE9push_backERKS0_GetAsDOS_ZNK9__gnu_cxx17__normal_iteratorIPP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEE4baseEv_ZNK17wxULongLongNativemlERKS_wxEventHashTable_ZNKSs4_Rep12_M_is_leakedEvoperator wxDataFormat::NativeFormat_ZNK8wxString10ToLongLongEPxiatofatoi_ZNK9__gnu_cxx17__normal_iteratorIPPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEEdeEv_ZNSt6vectorIPvSaIS0_EE4swapERS2__SC_SYSTEM_DATABASE_ZNK10wxDateSpanneERKS_GetWidthrebindIsTopNavigationDomainoperator/=_ZN10wxDateTime11ParseFormatEPKwRK8wxStringRKS__Hash_node, false>_ZNK17wxULongLongNativeeoERKS__ZNKSt6vectorIcSaIcEE5frontEv_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS3_SaIS3_EEEEEmiElwxControlNameStr__is_move_iterator<__gnu_cxx::__normal_iterator > > >_ZN10wxDateTime11ParseFormatERK8wxStringS2_RKS_wxFONTENCODING_JOHAB_ZNK16wxLongLongNativeltERKS_m_wchar__is_arithmeticwxBORDER_DOUBLE_ZN12wxWindowBase14SetTransparentEhwxID_TOP_ZNSt3tr18__detail24_Hashtable_iterator_baseISt4pairIK8wxStringS3_ELb0EE14_M_incr_bucketEv_ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwmm_ZNK10wxDateSpan12GetTotalDaysEvm_thread_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS3_SaIS3_EEEEEppEiwprintfwxLOG_Traceiterator_traits<__gnu_cxx::__normal_iterator > > >_RehashPolicy_ZNKSs13find_first_ofEcm_M_const_cast_ZNKSt6vectorIsSaIsEE8max_sizeEvGetMinSizewxEVT_ASYNC_METHOD_CALL__wchb_ZN20wxThreadHelperThreadaSERKS__ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEEmiElreverse_iterator<__gnu_cxx::__normal_iterator<_GdkDrawable* const*, std::vector<_GdkDrawable*, std::allocator<_GdkDrawable*> > > >_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE14_M_fill_assignEmRKS1__ZNSt6vectorIcSaIcEE6resizeEmc_ZN9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS2_SaIS2_EEEmmEiHasSameType_ZNK9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEptEv_ZN9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS2_SaIS2_EEEmmEv~wxThreadHelperThread_ZNK11wxClassInfo8IsKindOfEPKS__ZNSt4listIP10wxMenuItemSaIS1_EE4rendEvreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNKSt12_Vector_baseImSaImEE19_M_get_Tp_allocatorEvwxEVT_PALETTE_CHANGED_ZN8wxString6assignERK22wxScopedCharTypeBufferIcEmwxID_PRINTGetMilliseconds_ZNK9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS2_SaIS2_EEEmiElwxVideoMode_Z22wxNewEventTableFunctorI14wxEventTypeTagI14wxCommandEventE12wxEvtHandler7wxEventEP20wxEventFunctorMethodIT_T0_T1_S7_ERKS6_MS7_FvRS8_Eiterator_SC_LOGIN_NAME_MAXresult_ZNSt6vectorIiSaIiEE9push_backERKi_ZNSt6vectorIlSaIlEE6rbeginEv_ZN9__gnu_cxx14__alloc_traitsISaIP12wxEvtHandlerEE10_S_on_swapERS3_S5_wxStringEqual_ZNSt6vectorIiSaIiEEaSERKS1__ZNSt6vectorIlSaIlEE5eraseEN9__gnu_cxx17__normal_iteratorIPlS1_EErebind_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS2_SaIS2_EEEEEixEl_ZNK12wxUniCharRefneEm_ZNK8wxString21reverse_iterator_implINS_14const_iteratorEEneERKS2__ZNK8wxStringclEmmreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE9_M_rehashEm_ZNK12wxUniCharRefneEw_ZN9__gnu_cxx13new_allocatorIP11wxClassInfoE9constructEPS2_RKS2_new_allocator_ZNK22wxScopedCharTypeBufferIwEcvPKwEv__normal_iterator > >__is_move_iterator<__gnu_cxx::__normal_iterator > > >__is_normal_iterator<__gnu_cxx::__normal_iterator > > >_M_fill_insertGetEnglishMonthName_ZN14wxFormatString7AsWCharEv__is_floatingwxToolBar_ZN17wxULongLongNativemLEmwxEVT_SIZEwxSysColourChangedEvent_ZN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEmmEi_ZN8wxString7sprintfERK14wxFormatString_ZNK9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEEmiEl_ZN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEmmEvwxStatusBarNameStr_ZNK12wxUniCharRefleERK9wxUniCharwxBITMAP_TYPE_JPEG_RESOURCE_ZN8wxString6RemoveEmm_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEpLElLogAtLevel_ZN14wxMenuItemList5EraseERKNS_22compatibility_iteratorE_ZNSt6vectorIcSaIcEE4backEviterator_traits<__gnu_cxx::__normal_iterator > > >_ZNK8wxString7ToAsciiEvGetTotalDays_ZN9__gnu_cxx13new_allocatorIPKvE9constructEPS2_RKS2_wxBITMAP_TYPE_PCX_RESOURCE_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE11load_factorEv__traitor, false>*>, std::__is_pointer, false>*> >_M_copy_codewxDF_HTMLallocator__is_arithmetic_ZNK8wxString4LastE9wxUniChar_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwS3_S3___normal_iterator > >_M_cur_node_ZNK14wxEventTypeTagI12wxEraseEventEcvRKiEv_SC_MB_LEN_MAX_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE5frontEv_ZNK8wxString5LowerEv_ZN8wxString6AppendEPKc__are_samewxVisualAttributes_wxArraywxEventTableEntryPointerArray_ZN8wxString6AppendEPKwwxEventTypeTag_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE15__rehash_policyERKSD___is_floating_ZNK20wxTopLevelWindowBase21IsTopNavigationDomainEv_ZNSt6vectorI8wxStringSaIS0_EEixEm_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS3_SaIS3_EEEEEixEl_ZNSt6vectorIP11wxClassInfoSaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE_ZNK7wxFrame19GetClientAreaOriginEv__is_floating_ZNK10wxTimeSpaneqERKS_wxInt32_ZNK9__gnu_cxx17__normal_iteratorIPPKvSt6vectorIS2_SaIS2_EEEptEv_ZN9__gnu_cxx17__normal_iteratorIPP12wxEvtHandlerSt6vectorIS2_SaIS2_EEEppEi_GtkWidget_ZNKSt6vectorImSaImEE14_M_range_checkEm_ZN9__gnu_cxx17__normal_iteratorIPP12wxEvtHandlerSt6vectorIS2_SaIS2_EEEppEv_ZNK9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS2_SaIS2_EEEixEl_ZN9__gnu_cxx17__normal_iteratorIPP11wxClassInfoSt6vectorIS2_SaIS2_EEEmmEi_ZNSt6vectorIP11wxClassInfoSaIS1_EE8pop_backEv_ZNK13wxStringEqualclEPKcS1__ZN9__gnu_cxx17__normal_iteratorIPP11wxClassInfoSt6vectorIS2_SaIS2_EEEmmEv__are_sameTo8BitDataIsEqualUpTo_SC_XOPEN_REALTIME_THREADSToULongLongwxFileDialogNameStrName_Abbr_ZNK20wxMDIParentFrameBase13GetWindowMenuEvSetToLastMonthDay_ZN8wxString7ImplStrEPKcRK8wxMBConvAddEntrybtowcIsSameType_ZN8wxString7replaceEmmm9wxUniChar_ZNK9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEixElstringSrcc_strUnlock_ZNK8wxString14const_iteratorgtERKS0_ostreamwxTypeIdentifiervector >rendInitFromString_M_reversewxFONTENCODING_BULGARIAN_ZNK9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEEmiEl__is_arithmetic_ZNKSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE2atEm__normal_iterator > >wxInt64_ZNSs4rendEv_Self_ZNK9__gnu_cxx13new_allocatorIP12wxEvtHandlerE8max_sizeEv_ZNK10wxDateTime8GetMonthERKNS_8TimeZoneE_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_mc_ZN9__gnu_cxx14__alloc_traitsISaIP12_GdkDrawableEE8allocateERS3_m_ZNK20wxMDIParentFrameBase15GetClientWindowEvSetHeight11__mbstate_t__normal_iterator > >GetSecondsline__ExtractKeywxFormatString_CharToperator<<operator<=__is_byte, false>*>Capitalize_ZN19wxNavigationEnabledI8wxWindowED0Ev_ZN17wxULongLongNativeppEi_SC_C_LANG_SUPPORT_ZN17wxULongLongNativeppEv_ZNKSt6vectorIPvSaIS0_EE14_M_range_checkEm__are_same_ZN10wxTimeSpan5HoursEl_ZNK8wxString9CmpNoCaseERKS_int_frac_digitsoperator==iterator_traits<__gnu_cxx::__normal_iterator > > >_ZN10wxDateTime3AddERK10wxDateSpanwcsncat__normal_iterator > >_Equal_ZN8wxString6assignERK10wxCStrData_ZN6wxSizedVEd_ZN10wxDateSpan4YearEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS3_SaIS3_EEEEEmIEl_ZN6wxSizedVEj_ZN6wxSizedVEl_ZN6wxSizedVEm_ZNK8wxString21reverse_iterator_implINS_8iteratorEEgeERKS2_key_typewscanf_ZN8wxString7replaceEmmRKS_mm_fileno__is_pointerreverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >_SC_LEVEL1_DCACHE_LINESIZEoperator>=operator>>_ZNKSt4listIP10wxMenuItemSaIS1_EE5emptyEv_ZNSt6vectorIPKvSaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_splice__delta__alloc_traits >_Cond_ZN9__gnu_cxx13new_allocatorISt4pairIK8wxStringmEE10deallocateEPS4_m__is_move_iteratorbasic_ostream >_ZNSt6vectorIiSaIiEEixEmGetName_SC_THREAD_SPORADIC_SERVERSetNamewxWindow_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_destroyERKS1_wxGetApp_ZN8wxString15ConvertedBufferIcE6ExtendEm_M_allocate_bucketsm_cur_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE15__rehash_policyEv_ZN8wxStringlsEc_ZN8wxStringlsEd_ZNSs4swapERSs_ZN8wxStringlsEf_ZNSt6vectorIiSaIiEE6insertEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi_ZN8wxStringlsEh_ZN8wxStringlsEi_ZN8wxStringlsEj_ZN8wxStringlsEl_ZN8wxStringlsEm_ZN9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS2_SaIS2_EEEpLEl_ZN8wxStringlsEw_ZN8wxStringlsEx_ZN8wxStringlsEy_Node_SC_INT_MAXParseRfc822Date_SC_THREAD_ROBUST_PRIO_PROTECT_ZNK8wxString21reverse_iterator_implINS_14const_iteratorEEleERKS2_quotwxFONTENCODING_MACGREEK_ZN9__gnu_cxx14__alloc_traitsISaIPKvEE8allocateERS3_m_S_end_ZN9__gnu_cxx14__alloc_traitsISaIP9wxToolTipEE10_S_on_swapERS3_S5__ZNK8wxString10AfterFirstE9wxUniChar_ZNKSt20_List_const_iteratorIP10wxMenuItemEneERKS2_ParseDate_SC_UIO_MAXIOVGetMinute_ZNK8wxString6ToLongEPli_ZNK10wxDateSpan14GetTotalMonthsEv_ZNK8wxString17find_first_not_ofEPKwm_ZNKSs7compareEmmRKSs_ZNK8wxString6AsCharERK8wxMBConv_ZNSs6insertEmRKSsmm_ZNSt4listIP10wxMenuItemSaIS1_EE5beginEvArg_PointerSetPrintMode_ZNSt6vectorIiSaIiEE5clearEvGetWindowVariant_ZNSs6insertEmmc_ZN11wxTrackable7AddNodeEP13wxTrackerNode_SC_MQ_OPEN_MAX_ZNK8wxString6substrEmm_ZNK8wxString16find_last_not_ofEPKwmm_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEixEl_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEEEEdeEvwxSHOW_EFFECT_ROLL_TO_TOP_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE5beginEv__static_initialization_and_destruction_0_ZN9__gnu_cxx13new_allocatorIcE10deallocateEPcmwxEventTypeTag_ZN7FrmMain7OnAboutER14wxCommandEvent_ZN9__gnu_cxx17__normal_iteratorIPKwSbIwSt11char_traitsIwESaIwEEEppEi_ZNSt6vectorIP11wxClassInfoSaIS1_EE4swapERS3__ZN9__gnu_cxx17__normal_iteratorIPPKvSt6vectorIS2_SaIS2_EEEppEi_ZN9__gnu_cxx17__normal_iteratorIPKwSbIwSt11char_traitsIwESaIwEEEppEvallocator_ZNKSs2atEm__is_move_iteratorwxID_SYSTEM_MENU_ZN9__gnu_cxx17__normal_iteratorIPPKvSt6vectorIS2_SaIS2_EEEppEv_ZNK8wxString9wchar_strEvwxID_DUPLICATE_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS3_SaIS3_EEEEEmmEv_ZN22wxControlContainerBaseC2Ev_ZN11wxClassInfo15begin_classinfoEvwxBOTH_ZN20wxEventConnectionRef17ToEventConnectionEv_ZN8wxString6appendEm9wxUniChar_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE18_M_deallocate_nodeEPNSA_10_Hash_nodeIS4_Lb0EEE_ZN8wxString17GetIterForNthCharEm_SC_V6_ILP32_OFF32_ZNK12wxUniCharRefmiERKS__ZN9__gnu_cxx13new_allocatorIPvE8allocateEmPKv_ZNK12wxDataFormateqE14wxDataFormatIdwxALL_Hash_ZNKSbIwSt11char_traitsIwESaIwEE4findEPKwm_ZN8wxString6AppendERK10wxCStrDatamsm_firstSetTransparentreverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >_ZNSt6vectorImSaImEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPmS1_EES5__GdkDrawable_ZNK9wxUniCharcvwEvwxID_SORT_DESCENDINGSetFocusFromKbd_ZNSs6resizeEmwxPENSTYLE_TRANSPARENT_ZNK9__gnu_cxx13new_allocatorImE8max_sizeEv_ZNSt12_Vector_baseImSaImEE11_M_allocateEm_ZN9__gnu_cxx14__alloc_traitsISaIP26wxDateTimeHolidayAuthorityEE10deallocateERS3_PS2_m_ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwmm_ZNK8wxString8iteratorixEm_ZN8wxStringlsEPKc_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE6resizeEmS1__ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEEEixEl_ZN8wxThread6OnExitEv_ZN12wxWindowBase12GetValidatorEv_ZN8wxStringlsEPKw_ZNKSt6vectorIPK17wxEventTableEntrySaIS2_EE14_M_range_checkEm_ZN9__gnu_cxx24__numeric_traits_integerIiE5__maxEnew_allocator<_GdkDrawable*>iterator_ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEm~ExtraData_ZN17wxULongLongNativedVERKS__ZNK9__gnu_cxx13new_allocatorIPK17wxEventTableEntryE7addressERS3__ZN10wxDateTimeaSEl_ZN8wxString8iteratordeEv_ZNKSs7_M_iendEv_ZNSt10_List_baseIP10wxMenuItemSaIS1_EE11_M_put_nodeEPSt10_List_nodeIS1_E_ZNKSt6vectorIP12wxEvtHandlerSaIS1_EE4dataEv_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEplEl_ZN9__gnu_cxx17__normal_iteratorIPPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEEmmEvmsec_ZNK9__gnu_cxx17__normal_iteratorIP8wxStringSt6vectorIS1_SaIS1_EEEdeEvwxEVT_AUX2_UP_ZNSt6vectorI8wxStringSaIS0_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EEmRKS0_RemovewxFONTENCODING_MACGURMUKHI_ZNSt6vectorIP12_GdkDrawableSaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZN8wxLoggerC2EmPKciS1_S1__ZN9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS5_ELb0EEEE7destroyEPS9__ZN8wxString6appendERK10wxCStrDatamenableThemeToGMT_ZNKSt6vectorIcSaIcEE4dataEvwxIMAGE_QUALITY_BILINEAR_ZNKSt6vectorI8wxStringSaIS0_EE5beginEv_SC_INT_MINIsLevelEnabled_ZNSt6vectorIsSaIsEE4dataEvwxID_CONTEXT_HELPwxITEM_RADIO_ZN8wxString6insertEmRKS__ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEEptEvSetId_ZNK8wxString5emptyEv_ZNKSt12_Vector_baseIP11wxClassInfoSaIS1_EE13get_allocatorEv_ZNSbIwSt11char_traitsIwESaIwEE6appendEPKw_ZNSt6vectorIP9wxToolTipSaIS1_EE15_M_erase_at_endEPS1__ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEmmGetEventTablewcsncmpfunc_ZNSbIwSt11char_traitsIwESaIwEE4_Rep12_S_empty_repEv_ZNK9__gnu_cxx17__normal_iteratorIPKwSbIwSt11char_traitsIwESaIwEEEixElnumValueswxTHREAD_WAIT_BLOCKrebindwxTopLevelWindowBase_ZNK13wxVariantData5WriteERSo~unordered_map_ZN9__gnu_cxx17__normal_iteratorIPP12wxEvtHandlerSt6vectorIS2_SaIS2_EEEmmEiwxEVT_MIDDLE_UPwxID_AUTO_LOWESTMemberwxFD_MULTIPLE_Iterator_ZNK12wxWindowBase16GetMinClientSizeEv_ZN10wxDateTime5TodayEvm_ref_S_ios_iostate_end_ZNK16wxLongLongNative8ToStringEv_ZN8wxString6AppendERK22wxScopedCharTypeBufferIcEm__is_normal_iterator, false>**>find_last_not_of_ZN9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS5_ELb0EEEE9constructEPS9_RKS9__ZNSt12_Vector_baseIcSaIcEE19_M_get_Tp_allocatorEv_ZN8wxString5EmptyEvtm_yearto_int_type_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5countERS3_wxPoint_ZNK8wxString8ToDoubleEPd_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS3_SaIS3_EEEEE4baseEv_ZNKSt6vectorImSaImEE5frontEvDeleteNode_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE4findERS3_getwcharwcsncpywxEventTypeTag_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS3_SaIS3_EEEEEptEv_ZNSt6vectorI8wxStringSaIS0_EE4backEv_ZNSt6vectorIcSaIcEE6assignEmRKc_ZNSt6vectorIcSaIcEE8pop_backEvTTrue_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS3_SaIS3_EEEEEplEl__value__dso_handle_ZNK9__gnu_cxx17__normal_iteratorIPP12_GdkDrawableSt6vectorIS2_SaIS2_EEEplElGetCount_ZNK9__gnu_cxx17__normal_iteratorIPsSt6vectorIsSaIsEEEixEl_ZN9__gnu_cxx13new_allocatorIsE10deallocateEPsmallocator >_ZN9__gnu_cxx13new_allocatorIP26wxDateTimeHolidayAuthorityE7destroyEPS2__ZNK8wxString13find_first_ofEPKwmm__alloc_traits >_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS2_SaIS2_EEEEE4baseEv_ZN10wxDateSpan7SetDaysEi_ZN16wxCharTypeBufferIwEaSEPKwwxLongLongLeftwxHashTableBase_Node_ZNK14wxFormatStringcvPKwEv_ZNK14wxEventTypeTagI12wxCloseEventEcvRKiEv_ZNKSs3endEv_ZNK17wxULongLongNative5GetLoEv_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEEptEv_ZN17wxULongLongNativemmEi_ZNK9wxUniCharleERKS__ZNSt6vectorIPKvSaIS1_EE4rendEv_ZNK8wxString5rfindE9wxUniCharm_ZN17wxULongLongNativemmEvwxDIRECTION_MASK_ZN20wxObjectEventFunctorclEP12wxEvtHandlerR7wxEvent_ZN6wxSizeC2Eii_ZNK9__gnu_cxx13new_allocatorINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEE7addressERKS8__ZNKSs4findERKSsmwxBRUSHSTYLE_STIPPLE_MASK_OPAQUE_SC_TIMER_MAXIsMatching_ZNK8wxString16find_last_not_ofERK22wxScopedCharTypeBufferIcEmmA_CST_ZNSt6vectorIsSaIsEEaSERKS1__ZNSt6vectorImSaImEE9push_backERKm_ZN9__gnu_cxx13new_allocatorISt4pairIK8wxStringmEE7destroyEPS4_new_allocator_Hash_node, false>_ZNKSt6vectorIP11wxClassInfoSaIS1_EE2atEmToday__numeric_traits_integerKillThread_ZN12wxRefCounteraSERKS_gp_offset_ZNK10wxDateTime11GetDateOnlyEvwxBRUSHSTYLE_CROSSDIAG_HATCH_ZNK15wxHashTableBase5DoGetEll_ZN9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEEC2Ev_ZNK8wxString7GetDataEv_ZNK10wxDateTime5IsDSTENS_7CountryE_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS3_SaIS3_EEEEEpLEl_SC_BASEm_first_ZNKSt6vectorIP12_GdkDrawableSaIS1_EE12_M_check_lenEmPKc_ZN9wxUniChar11GetAsHi8bitEjPc_ZN8wxStringlsERK10wxCStrData_ZN8wxString6appendENS_14const_iteratorES0__ZNK17wxULongLongNativeltERKS__ZN10wxDateTime3SetEtttt_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5clearEvrebind_ZN8wxString6AppendERK22wxScopedCharTypeBufferIcEnew_allocator_Category_ZNSt12_Vector_baseI8wxStringSaIS0_EE19_M_get_Tp_allocatorEv_ZN9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS2_SaIS2_EEEmIEl_ZN22wxScopedCharTypeBufferIcEaSERKS0__ZNSt6vectorIPKvSaIS1_EE5frontEvwxDF_INVALIDAssignVariantInheritAttributes_ZNSt6vectorIdSaIdEE9push_backERKd_ZNK9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEEptEv_ZN6wxMenuC2ElSetMonthToLong_ZNSt12_Vector_baseIsSaIsEE17_M_create_storageEmstrValuesData_ZNSt4listIP10wxMenuItemSaIS1_EE11_M_transferESt14_List_iteratorIS1_ES5_S5_reverse_iterator<__gnu_cxx::__normal_iterator > > >_M_insert_ZNSt6vectorIdSaIdEE14_M_fill_assignEmRKd__is_normal_iterator<__gnu_cxx::__normal_iterator > > >GetInstance_ZNSs6resizeEmc_ZNSt20_List_const_iteratorIP10wxMenuItemEppEi_ZNK9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS2_SaIS2_EEEixEl_ZNSt20_List_const_iteratorIP10wxMenuItemEppEv_ZN7wxPanelC2EP8wxWindowiRK7wxPointRK6wxSizelRK8wxStringGetSize_ZNK8wxString21reverse_iterator_implINS_8iteratorEEixEm_ZNK10wxDateTime10GetYearDayEt_ZNK8wxString4findERK10wxCStrDatamm_ZNKSbIwSt11char_traitsIwESaIwEE7_M_iendEv__is_pointer<_GdkDrawable*>_ZN10wxDateTime3SetEd_ZNSt6vectorI8wxStringSaIS0_EE6rbeginEv_ZN10wxDateTime3SetEl_ZNKSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE12_M_check_lenEmPKc_ZNK9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEdeEv_ZNK9__gnu_cxx17__normal_iteratorIPP12_GdkDrawableSt6vectorIS2_SaIS2_EEEdeEv_M_erase_ZNKSt6vectorI8wxStringSaIS0_EE6rbeginEv_ZN16wxEventHashTable5ClearEv_Z16wxGet_wxConvLibcv_ZN9__gnu_cxx17__normal_iteratorIPKwSbIwSt11char_traitsIwESaIwEEEmmEi_ZNSbIwSt11char_traitsIwESaIwEE15_M_replace_safeEmmPKwm_ZN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEmIEl_ZNSt6vectorIP11wxClassInfoSaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7__ZN9__gnu_cxx17__normal_iteratorIPPKvSt6vectorIS2_SaIS2_EEEmmEi_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE6insertENSA_19_Hashtable_iteratorIS4_Lb0ELb0EEERKS4__SC_V6_LP64_OFF64_ZN9__gnu_cxx17__normal_iteratorIPPKvSt6vectorIS2_SaIS2_EEEmmEv_ZNK10wxDateTimeneERKS__Hash_code_type_ZNSt6vectorIP9wxToolTipSaIS1_EE4swapERS3_allocator_S_floatfield_ZN9wxUniCharaSEc_ZN9wxUniCharaSEh_ZN9wxUniCharaSEi_ZN9wxUniCharaSEjiterator_ZN9wxUniCharaSEl_ZN9wxUniCharaSEmlconvDecRef_ZN9wxUniCharaSEs_ZN9wxUniCharaSEt_ZN9wxUniCharaSEw_ZN9wxUniCharaSEx_ZN9wxUniCharaSEy_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE8pop_backEv_ZNK8wxString8utf8_strEv_ZNSt6vectorIcSaIcEE7reserveEm_ZNK13wxStringEqualclERK8wxStringS2___is_normal_iterator<__gnu_cxx::__normal_iterator > > >wxID_UNDELETEGetWeekOfYear_ZNK9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS2_SaIS2_EEEptEv_ZNSt6vectorIPvSaIS0_EE15_M_erase_at_endEPS0__ZN14wxThreadHelper10KillThreadEvwxTraceMasknew_allocator >_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EEaSERKSE_wxDataFormatIdwxITEM_DROPDOWN__is_byte_ZN12wxWindowBase4HideEv_ZN8wxWindow8SetLabelERK8wxString_M_disjunctSetData_ZN5wxAny8MakeNullEvFormatVDayswxCommandEventFunction_ZNK9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEEptEv_ZN8wxString7reserveEm_ZN7FrmMainC2ERK8wxStringRK7wxPointRK6wxSize_ZNK12wxWindowBase16HasMultiplePagesEv_posSetWindowMenu_ZNSt6vectorIPvSaIS0_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0__ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEEppEv_ZN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEmmEiWeek_ZN9__gnu_cxx17__normal_iteratorIPP11wxClassInfoSt6vectorIS2_SaIS2_EEEmIEl_ZNSt6vectorImSaImEE4swapERS1__ZN10wxDateSpanpLERKS_basefield_ZNK17wxULongLongNativegeEm~_Hashtable_ZNSt11char_traitsIcE11eq_int_typeERKiS2_m_years_ZNSt6vectorIP9wxToolTipSaIS1_EE4dataEv_ZNSs4_Rep7_M_grabERKSaIcES2__ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmiEl_ZNK14wxEventTypeTagI11wxIdleEventEcvRKiEvwxMUTEX_TIMEOUT_ZN16wxLongLongNativedVERKS_allocatorwxBITMAP_TYPE_CUR_ZNSt6vectorIdSaIdEE4backEvwxInvalidTextCoord_ZNK9__gnu_cxx17__normal_iteratorIPPKvSt6vectorIS2_SaIS2_EEEplEl_ZNK9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEdeEvwxTrapInAssertpair, false, false>, std::tr1::__detail::_Hashtable_iterator, false, false> >_ZNK10wxDateTime6GetDayERKNS_8TimeZoneESubtract_ZNSt6vectorI8wxStringSaIS0_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EEvwscanfiterator_traits_ZNKSt6vectorIPK17wxEventTableEntrySaIS2_EE12_M_check_lenEmPKc_S_truncThisFunctor_ZNK14wxMenuItemList4ItemEm_SC_STREAM_MAX_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEE4baseEvwxConvISO8859_1Ptr_ZNK8wxString13find_first_ofEcm_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5eraseENSA_19_Hashtable_iteratorIS4_Lb0ELb0EEESG_new_allocator >_ZN12wxWindowBase13SetExtraStyleEl_M_rehash_policy_sbuf_ZNSt6vectorIP12_GdkDrawableSaIS1_EE14_M_fill_assignEmRKS1_operator[]wxFONTENCODING_UTF16ToHi8bit_ZNK10wxDateTime7FromUTCEb_ZNK8wxString5c_strEv_SC_XOPEN_VERSIONwxIdleEvent_ZNSt11char_traitsIwE6assignEPwmwwxID_ABORT_ZN9__gnu_cxx14__alloc_traitsISaI8wxStringEE8allocateERS2_mintegral_constant~wxHashTableBase_ZN17wxULongLongNativepLEyDoCallOnLog_ZNSs5eraseEmmwxEventTableEntryPointerArraywxBitmapwxFONTENCODING_MACVIATNAMESEdecimal_pointoperator unsigned int_ZNK9__gnu_cxx13new_allocatorIP9wxToolTipE8max_sizeEvwxFONTENCODING_MACROMAN__traitor, std::__is_floating >F_OWNER_PGRP__is_pointer, false>*>_SC_PII_OSI_Mreverse_iterator<__gnu_cxx::__normal_iterator > > >_SC_RTSIG_MAXwxID_PREVIEWRemoveChildTileGermany_SC_THREAD_PRIORITY_SCHEDULINGwxFONTENCODING_UTF32_ZNSt12_Vector_baseIP12_GdkDrawableSaIS1_EE11_M_allocateEm_ZNKSt12_Vector_baseIsSaIsEE13get_allocatorEv_ZN9__gnu_cxx14__alloc_traitsISaIPvEE10_S_on_swapERS2_S4__ZNSt6vectorIsSaIsEE5clearEv_ZNK16wxLongLongNativeltElwxPENSTYLE_USER_DASH_ZN10wxDateSpan4DaysEi_ZNK7wxPoint16IsFullySpecifiedEvoperator^=_ZNK16wxLongLongNativengEv_ZN16wxCharTypeBufferIwEaSERKS0_m_int64allocator >_ZNSs6appendERKSs_ZNSt3tr18__detail19_Hashtable_iteratorISt4pairIK8wxStringmELb0ELb0EEppEi_ZN9__gnu_cxx13new_allocatorIP10wxMenuItemE7destroyEPS2__ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S2_S2___is_move_iterator_ZNSt3tr18__detail19_Hashtable_iteratorISt4pairIK8wxStringmELb0ELb0EEppEv_SC_BC_DIM_MAXwcscatwxFrameNameStr_ZNSt6vectorIiSaIiEE5beginEvwxID_ABOUT_ZN9wxAppBase12SetPrintModeEi_ZNKSbIwSt11char_traitsIwESaIwEE4dataEv_ZN8wxString7replaceENS_8iteratorES0_PKcwxID_SETUP_ZNSt12_Vector_baseIsSaIsEE13_M_deallocateEPsmm_infom_char_M_growth_factor_ZN8wxString7replaceENS_8iteratorES0_PKw__is_normal_iterator<__gnu_cxx::__normal_iterator > > >_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_disposeERKS1_wxFONTENCODING_MACCELTICwxPENSTYLE_LONG_DASH_ZNK9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS1_SaIS1_EEEdeEv_ZNKSt6vectorIsSaIsEE3endEv_ZN14wxMenuItemList5ClearEv_ZNK8wxString13find_first_ofEhmCompareToiterator_traits_ZNK8wxString21reverse_iterator_implINS_8iteratorEEeqERKS2__M_refcountGetWindowStyleFlagwxEVT_SIZING_ZN9__gnu_cxx14__alloc_traitsISaIsEE8allocateERS1_mremove_M_deallocate_bucketsallocator<_GdkDrawable*>__is_normal_iterator_ZNSt4listIP10wxMenuItemSaIS1_EE5mergeERS3__ZNK8wxString17GetIterForNthCharEmwxBORDER_SIMPLE_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEppEi_ZNSbIwSt11char_traitsIwESaIwEE6insertEmRKS2_mm_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEppEvMakeKeydeallocate_ZNK14wxMenuItemList22compatibility_iteratorptEv_ZNKSs17find_first_not_ofEPKcmwxWINDOW_VARIANT_MAX_ZN8wxString9FromAsciiEc_ZNSaISt4pairIK8wxStringmEED2Ev__int32_tAsWCharBuf_ZNK10wxDateTime7IsValidEvSetMonths_ZNK8wxString8iteratorleERKNS_14const_iteratorEwxValidator_ZN9__gnu_cxx17__normal_iteratorIPKwSbIwSt11char_traitsIwESaIwEEEpLEl_ZN20wxMDIParentFrameBase14SetActiveChildEP15wxMDIChildFrame_ZN8wxLogger8LogTraceEmRK14wxFormatString_ZNK9wxUniCharleEm_ZNSt11char_traitsIcE4copyEPcPKcm_ZN9__gnu_cxx17__normal_iteratorIPPKvSt6vectorIS2_SaIS2_EEEpLElUsesEventLoop_ZNK19wxTopLevelWindowGTK12IsFullScreenEv_ZNK8wxString3MidEmm_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS3_SaIS3_EEEEEmIElCascade_SC_SIGNALS_ZN8wxString4LastEv_M_currentwxDF_UNICODETEXToperator|=wxAppConsoleBase_S_uppercase_ZNSt4listIP10wxMenuItemSaIS1_EE4swapERS3_wxID_PRINT_SETUP_ZN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEpLEl_ZNK8wxString10BeforeLastE9wxUniCharPS__ZNKSt6vectorIP9wxToolTipSaIS1_EE14_M_range_checkEm_SC_SINGLE_PROCESS_ZNSt3tr18__detail25_Hashtable_const_iteratorISt4pairIK8wxStringmELb0ELb0EEppEiwxBITMAP_TYPE_BMP_RESOURCE__is_normal_iterator<__gnu_cxx::__normal_iterator > > >_old_offset_ZNSt3tr18__detail25_Hashtable_const_iteratorISt4pairIK8wxStringmELb0ELb0EEppEvignoreCasereverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt6vectorIPvSaIS0_EE18_M_fill_initializeEmRKS0_true_type_ZN15wxHashTableBase12DoUnlinkNodeEmP20wxHashTableBase_NodeS1_wxEVT_MENU_ZN9__gnu_cxx13new_allocatorIP12_GdkDrawableE10deallocateEPS2_mwxS_IWUSR_ZNK10wxDateTime8TimeZone9GetOffsetEv__is_signed_ZN9__gnu_cxx14__alloc_traitsISaIP12_GdkDrawableEE8max_sizeERKS3_GetYears_M_get_Value_allocator_ZN8wxString6AppendERK22wxScopedCharTypeBufferIwE_ZNSt20_List_const_iteratorIP10wxMenuItemEmmEi_ZNSt20_List_const_iteratorIP10wxMenuItemEmmEvwcschrPositionToolBarwxEventTypeTagDoLogTrace_ZNK8wxString4findEcm_ZNSt6vectorIP11wxClassInfoSaIS1_EEaSERKS3__M_check_ZN8wxString12PosLenToImplEmmPmS0__ZNSt6vectorIPKvSaIS1_EE8pop_backEvvfwprintfoperator<<=wxAny__traitor, std::__is_pointer<_GdkDrawable*> >wxPOSIX_USER_WRITEContains_ZN12wxWindowBase12SetSizeHintsEiiiiii_ZN17wxEventTableEntryC2ERKiiiP14wxEventFunctorP8wxObjectpoPnlm_alignment_ZNK8wxString13find_first_ofERK22wxScopedCharTypeBufferIcEmm_ZN22wxScopedCharTypeBufferIwE11CreateOwnedEPwmiterator_traits<__gnu_cxx::__normal_iterator > > >AsString_cur_columnnew_allocator__unordered_mapsrand_SC_SYSTEM_DATABASE_R_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEc_ZNK14wxFormatString15GetArgumentTypeEj_ZNSbIwSt11char_traitsIwESaIwEE3endEv_M_refcopy_S_empty_repwxEVT_UPDATE_UIwxMouseCaptureLostEvent_ZN7wxPointmIERKS__ZNKSbIwSt11char_traitsIwESaIwEE5rfindEPKwmMinutes_ZN6wxSize5IncByEii_ZN19wxNavigationEnabledI8wxWindowEC2Ev_ZN10wxDateTime9ResetTimeEv_ZNSt6vectorI8wxStringSaIS0_EE18_M_fill_initializeEmRKS0_wxBRUSHSTYLE_LAST_HATCHLower_ZNSbIwSt11char_traitsIwESaIwEEaSEw_ZN14wxMenuItemList12DeleteObjectEP10wxMenuItem_ZN17wxULongLongNativemIERKS_wxMenu_ZNSbIwSt11char_traitsIwESaIwEEaSEPKw_ZNKSt12_Vector_baseIiSaIiEE13get_allocatorEv_ZNK9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEE4baseEv_ZN9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS5_ELb0EEEE10deallocateEPS9_m_ZNSbIwSt11char_traitsIwESaIwEE14_M_replace_auxEmmmw_ZNSt6vectorIsSaIsEE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPsS1_EEmRKs_ZN9__gnu_cxx13new_allocatorImE10deallocateEPmm_ZN9wxUniChar6To8bitEj_ZNK17wxULongLongNativedvEm_ZN10wxDateTime19GetEnglishMonthNameENS_5MonthENS_9NameFlagsE_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEEmmEi_ZNKSt6vectorI8wxStringSaIS0_EE4rendEv_ZN9__gnu_cxx17__normal_iteratorIPP12wxEvtHandlerSt6vectorIS2_SaIS2_EEEmIEl_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5eraseENSA_25_Hashtable_const_iteratorIS4_Lb0ELb0EEESG__ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEEmmEvwxEventTypeTag_ZNK12wxUniCharRefntEvwxIMAGE_ALPHA_TRANSPARENT__is_pointer_ZNKSt6vectorIP11wxClassInfoSaIS1_EE5beginEv__is_move_iterator<__gnu_cxx::__normal_iterator > > >_ZN9__gnu_cxx13new_allocatorI8wxStringE10deallocateEPS1_mwcscmp~vectorEndRepositioningChildren_ZNK8wxString4findEhm_SC_TRACE_ZN8wxString6assignEmc_ZN8wxString6assignEmh_ZNK10wxCStrDataplEi_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS3_SaIS3_EEEEE4baseEv_ZNK10wxCStrDataplEl_ZNK10wxCStrDataplEmSetWidth__normal_iterator, std::allocator > >_ZN9__gnu_cxx24__numeric_traits_integerIiE5__minE_ZNK10wxDateTime2Tm7IsValidEv_ZN8wxString6assignEmw_ZNSbIwSt11char_traitsIwESaIwEE7_M_leakEvEndsWith_ZNKSbIwSt11char_traitsIwESaIwEE6lengthEviterator_traits<__gnu_cxx::__normal_iterator > > >typedef __va_list_tag __va_list_tag_ZNK9wxUniCharcviEv_ZN16wxTypeIdentifiereqERKS__ZNSt6vectorIP12wxEvtHandlerSaIS1_EE4dataEvToCDouble_ZN8wxString6appendERK22wxScopedCharTypeBufferIwEmwxEventTypeTag_ZN9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS1_SaIS1_EEEmIEl_ZN12wxWindowBase16SetMinClientSizeERK6wxSize_ZN8wxString6AppendERK10wxCStrData_Z8wxStrlenPKc_ZNKSt6vectorIsSaIsEE6rbeginEv_Hashtable_const_iterator, false, false>CMPFUNCwxPenStyleGetNumberOfDayshash_function_ZNKSt3tr18__detail15_Hash_code_baseI8wxStringSt4pairIKS2_S2_ESt10_Select1stIS5_E13wxStringEqual12wxStringHashNS0_18_Mod_range_hashingENS0_20_Default_ranged_hashELb0EE15_M_bucket_indexERS4_mmGMT1GMT3GMT4__is_integer_ZN8wxString7replaceENS_8iteratorES0_PKcm_SC_LEVEL2_CACHE_LINESIZE__is_move_iterator_ZNK9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS2_SaIS2_EEEdeEv__int128 unsigned_ZNK12wxUniCharRefmiEc_ZNK12wxUniCharRefmiEhMakeNull_ZNKSt3tr18__detail15_Hash_code_baseI8wxStringSt4pairIKS2_mESt10_Select1stIS5_E13wxStringEqual12wxStringHashNS0_18_Mod_range_hashingENS0_20_Default_ranged_hashELb0EE12_M_hash_codeERS4_wcscpy_ZNSt11char_traitsIwE3eofEv_ZNK12wxUniCharRefmiEw_ZN22wxScopedCharTypeBufferIwED2Ev_ZNSt12_Vector_baseIdSaIdEE13_M_deallocateEPdm_Hashtable_iterator_base, false>_ZN29wxEventTableEntryPointerArray3AddEPK17wxEventTableEntrym_ZN9__gnu_cxx13new_allocatorIP12wxEvtHandlerE10deallocateEPS2_mm_length_ZNKSbIwSt11char_traitsIwESaIwEE8_M_checkEmPKc_ZN16wxCharTypeBufferIcE6shrinkEmreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNKSt3tr18__detail15_Hash_code_baseI8wxStringSt4pairIKS2_mESt10_Select1stIS5_E13wxStringEqual12wxStringHashNS0_18_Mod_range_hashingENS0_20_Default_ranged_hashELb0EE15_M_bucket_indexERS4_mm_ZNSs6rbeginEv_Funct_ZN8wxString15GetWritableCharEm_ZNK14wxEventTypeTagI17wxInitDialogEventEcvRKiEvwxAnyValueType_ZNK12wxDataFormat5GetIdEv_ZN29wxEventTableEntryPointerArray6ShrinkEv_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5beginEm_ZNK8wxString13find_first_ofEwm_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5beginEv~wxCStrData_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE22_M_get_Value_allocatorEvwxItemKind_ZN9__gnu_cxx13new_allocatorIP10wxMenuItemE8allocateEmPKv_ZNK9__gnu_cxx13new_allocatorIP11wxClassInfoE8max_sizeEv_SC_TRACE_USER_EVENT_MAXoperator char const*operator long long intcompare_ZNK14wxEventTypeTagI11wxSizeEventEcvRKiEvwxFONTENCODING_MACCENTRALEUR__digits_ZNK10wxTimeSpan10GetSecondsEvwxSHOW_SB_NEVER_ZNKSt3tr18__detail19_Hashtable_iteratorISt4pairIK8wxStringmELb0ELb0EEptEv_List_iteratorwxS_IRGRP_S_max_sizewxDropTarget_ZNK13wxVariantData7GetTypeEv_ZNKSs12find_last_ofEcm_ZNK9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEixElGetConstructor_ZNKSt10_Select1stISt4pairIK8wxStringS1_EEclERKS3__ZN15wxHashTableBaseaSERKS__ZNK9__gnu_cxx13new_allocatorIP26wxDateTimeHolidayAuthorityE8max_sizeEvwxEVT_LEFT_UPwxNewEventTableFunctor, wxEvtHandler, wxEvent>operator long unsigned int_ZNK15wxHashTableBase8GetCountEvbasic_istream >_ZNKSt6vectorIcSaIcEE8max_sizeEv_ZNSt6vectorIdSaIdEE6insertEN9__gnu_cxx17__normal_iteratorIPdS1_EEmRKdbestGetMenuBartypedestroy_ZN23wxCriticalSectionLockerC2ER17wxCriticalSectionProcessEventLocally_ZN29wxEventTableEntryPointerArray8RemoveAtEmm_ZN22wxScopedCharTypeBufferIwE4DataD2Evpairconst_reverse_iteratorIncRefwxHashTableunordered_map > >_ZNSt6vectorIP11wxClassInfoSaIS1_EE5clearEvbegin_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8__SC_MULTI_PROCESS_SC_UCHAR_MAX_ZNK9__gnu_cxx13new_allocatorIPvE8max_sizeEv_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZNSs4_Rep10_M_disposeERKSaIcE__is_move_iterator<__gnu_cxx::__normal_iterator<_GdkDrawable* const*, std::vector<_GdkDrawable*, std::allocator<_GdkDrawable*> > > >_SC_CHAR_MAX_ZNK9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS2_SaIS2_EEE4baseEv_ZNSt6vectorIP12_GdkDrawableSaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEmRKS1__ZNK8wxStringcv10wxCStrDataEv_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmmEiwxIdleMode_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmmEv_ZNSt6vectorIP12_GdkDrawableSaIS1_EE4dataEvGetDateOnlypoFrmMainGetDefaultBorderForControl_ZNKSt12_Vector_baseIP12wxEvtHandlerSaIS1_EE19_M_get_Tp_allocatorEvpair_ZN19wxTopLevelWindowGTK8SetLabelERK8wxString_ZN10wxDateSpan9SetMonthsEi_SC_THREAD_KEYS_MAXallocator, false> >_ZN9__gnu_cxx17__normal_iteratorIPKwSbIwSt11char_traitsIwESaIwEEEmIEl_ZNKSt4listIP10wxMenuItemSaIS1_EE5frontEv_ZN9__gnu_cxx17__normal_iteratorIPPKvSt6vectorIS2_SaIS2_EEEmIElreverse_iterator<__gnu_cxx::__normal_iterator > > >__is_arithmetic, false>*>_ZNSt6vectorIdSaIdEEixEm_ZNSt6vectorIP12_GdkDrawableSaIS1_EE5frontEv_ZNSaISt4pairIK8wxStringS0_EED2EvwxConvertibleTolabel_ZNK8wxString21reverse_iterator_implINS_14const_iteratorEEgeERKS2__SC_VERSION_M_get_node_ZNK8wxString16find_last_not_ofERK22wxScopedCharTypeBufferIcEmfunctor_ZNKSs8_M_checkEmPKc_ZNSs18_S_construct_aux_2EmcRKSaIcE_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEptEvwxID_IGNORE_ZNK8wxString10StartsWithERKS_PS_wxControlContainer_ZNKSt6vectorIPKvSaIS1_EE4sizeEv_ZNSt10_List_baseIP10wxMenuItemSaIS1_EE10_List_implC2Ev_ZN9__gnu_cxx13new_allocatorISt4pairIK8wxStringmEED2Ev_ZNKSt6vectorIPK17wxEventTableEntrySaIS2_EE4backEv_ZNSbIwSt11char_traitsIwESaIwEE6appendERKS2__ZNK9__gnu_cxx17__normal_iteratorIPP12wxEvtHandlerSt6vectorIS2_SaIS2_EEEixElydayGTKNeedsParent_ZNK16wxLongLongNativeplERKS_IsShown_ZNSt6vectorIP11wxClassInfoSaIS1_EE6assignEmRKS1__ZNK9__gnu_cxx17__normal_iteratorIPKwSbIwSt11char_traitsIwESaIwEEE4baseEvmenu__conditional_type&, std::pair&>_ZN16wxLongLongNative3AbsEv_ZN16wxCharTypeBufferIwE6shrinkEm_ZN8wxString7replaceENS_8iteratorES0_PKcS2__ZN8wxString7replaceEmmRKS__ZNSt6vectorImSaImEE6insertEN9__gnu_cxx17__normal_iteratorIPmS1_EEmRKm_ZN9__gnu_cxx13new_allocatorISt4pairIK8wxStringmEE9constructEPS4_RKS4__ZNK16wxLongLongNativeplExlong long unsigned intDoSetRegionShape_ZNSt6vectorIlSaIlEE14_M_fill_assignEmRKl_SC_LEVEL3_CACHE_LINESIZESubstrBufFromMB_ZNK9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS5_ELb0EEEE7addressERKS9_wxPanelreverse_iterator<__gnu_cxx::__normal_iterator > > >Scalem_node_ZN10wxDateTime15GetNumberOfDaysENS_5MonthEiNS_8CalendarEwxBITMAP_TYPE_INVALIDPositionMenuBar_SC_NGROUPS_MAX_ZN8wxString5clearEvwxNullFont_ZNKSt6vectorIP9wxToolTipSaIS1_EE4backEv__is_pointer, false>*>wxAnyValueBuffer_ZNKSt12_Vector_baseIPKvSaIS1_EE19_M_get_Tp_allocatorEv__traitor, std::__is_pointer >wxID_HELPFormatISODate_ZN10wxDateTime8SetMonthENS_5MonthE_ZNK8wxString4findEwm_ZNKSt3tr18__detail19_Hashtable_iteratorISt4pairIK8wxStringS3_ELb0ELb0EEptEvwxSHOW_EFFECT_MAX_ZNK9__gnu_cxx13new_allocatorIP26wxDateTimeHolidayAuthorityE7addressERKS2__ZN22wxControlContainerBaseD2Ev_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwmm_ZNSt6vectorIiSaIiEE4dataEv_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EED2Ev_ZNKSt6vectorI8wxStringSaIS0_EE4sizeEv_ZNK8wxString14const_iteratordeEvvector >_ZN10wxDateTime11GetBeginDSTEiNS_7CountryE_unused2_ZNSt11char_traitsIcE11to_int_typeERKcMinutewxAppConsole_SC_CHAR_MIN_ZNK8wxString17find_first_not_ofE12wxUniCharRefm_ZNK8wxString5FirstEc_ZNK8wxString5FirstEh_ZNSt6vectorIsSaIsEE5beginEvRead_SC_DEVICE_IO_ZN22wxScopedCharTypeBufferIwEC2Ev_ZNK8wxString5FirstEw_ZNK8wxString13find_first_ofERK22wxScopedCharTypeBufferIwEm__compar_fn_t_Default_ranged_hash_ZNK8wxString13find_first_ofE12wxUniCharRefm_ZN9__gnu_cxx14__alloc_traitsISaIPKvEE10deallocateERS3_PS2_m_ZNSt4listIP10wxMenuItemSaIS1_EE3endEv_ZN16wxAppConsoleBase15OnEventLoopExitEP15wxEventLoopBasewxBITMAP_TYPE_BMP_ZNK9__gnu_cxx17__normal_iteratorIPP12_GdkDrawableSt6vectorIS2_SaIS2_EEEptEv_ZNKSbIwSt11char_traitsIwESaIwEE16find_last_not_ofEPKwmwxThreadHelperThreadwxID_OSX_HIDE_ZNSt6vectorIdSaIdEE6rbeginEv_ZNSt6vectorIlSaIlEE5clearEvwxFONTENCODING_MACTIBETANwxID_NEW_ZNK10wxCStrDatamiEl_ZNK10wxDateTime17FormatISOCombinedEcIncBy_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS4_SaIS4_EEEEEixEl__is_byte, false>*>_ZNK12wxStringHashclERK8wxString_SC_XOPEN_REALTIME_ZNSt6vectorIP11wxClassInfoSaIS1_EE14_M_fill_assignEmRKS1__ZN22wxScopedCharTypeBufferIcE4DataD2EvGetOffset_ZNSt4listIP10wxMenuItemSaIS1_EEC2Ev_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEmmmallocator, false>*>_ZNSt12_Vector_baseIcSaIcEE11_M_allocateEmwxDF_LOCALEwxStdString/home/msw/projects/gspiceui/test_SC_THREAD_ROBUST_PRIO_INHERIT_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS2_SaIS2_EEEEEplEliterator_traitsmerge_ZNK8wxString12find_last_ofERK22wxScopedCharTypeBufferIcEmwxThreadKindpop_frontAddDays_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_RKS2__ZNK10wxTimeSpan6NegateEv_ZNK9wxUniCharcvbEvCreateThread_ZNK11wxClassInfo9IsDynamicEv_ZNK9__gnu_cxx17__normal_iteratorIPPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEEplEl_ZNK12wxUniCharRefcvsEv_List_node_ZNK20wxTopLevelWindowBase19DoGetScreenPositionEPiS0_iterator_traitswxID_CLEAR_ZN16wxAppConsoleBase16OnFatalExceptionEvwxID_MOVE_FRAME_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE6insertEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2__ZNKSt6vectorIdSaIdEE4dataEvIsEnabled__FUNCTION__unsigned intwxMoveEvent_ZN9__gnu_cxx13new_allocatorIPvE9constructEPS1_RKS1__M_bucket_index_ZNK10wxDateSpan9GetMonthsEvHandleEvent_ZN8wxStringixEi_ZN8wxStringixEj_ZN8wxStringixEl_ZN8wxStringixEm_ZNSt12_Vector_baseIlSaIlEE13_M_deallocateEPlm5div_t_ZNK9__gnu_cxx13new_allocatorIP10wxMenuItemE7addressERS2_QueueEvent_ZNK14wxEventTypeTagI22wxQueryNewPaletteEventEcvRKiEv_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEpLEl_ZN8wxString7replaceENS_8iteratorES0_PKwmwxRadioButtonNameStr_ZNK8wxString13find_first_ofERK10wxCStrDatamm_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE4swapERS3_wxDefaultDateTimewchar_t_ZNSt6vectorIlSaIlEE4rendEviterator_ZNK29wxEventTableEntryPointerArray5IndexEPK17wxEventTableEntryPFiPS2_S3_E_ZN8wxString3PadEm9wxUniCharbIsNumberwxID_INDENTnew_allocator~wxTrackableBeforeFirst_ZNSt6vectorIP9wxToolTipSaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZNK8wxString21reverse_iterator_implINS_14const_iteratorEEeqERKS2_wxCHK_UNDETERMINEDreverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt8__detail15_List_node_base4swapERS0_S1_unordered_map > >wxALPHA_TRANSPARENTSubstrBufFromWC_ZN9__gnu_cxx14__alloc_traitsISaImEE8allocateERS1_m_ZN22wxScopedCharTypeBufferIwE15MakeOwnedCopyOfERKS0__ZNK9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEEdeEv_ZNK9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEixElwxStringHash_ZNK9__gnu_cxx13new_allocatorIlE7addressERKl_ZN10wxDateTime6SetDayEtGetXGetYGetCountryunary_function, const wxString>GetWeekDayInSameWeekiterator_traitswxFONTENCODING_CP437new_allocator_ZN8wxString6insertENS_8iteratorEPKcS2_wxFONTENCODING_MACTURKISH__traitor, std::__is_pointer >__traitor, std::__is_pointer >_S_ios_fmtflags_end__is_move_iterator<__gnu_cxx::__normal_iterator > > >_ZNK11wxAnyStrPtrcvPKwEv_ZNSt6vectorIP9wxToolTipSaIS1_EE2atEmwxFD_PREVIEW_ZN9__gnu_cxx13new_allocatorISt10_List_nodeIP10wxMenuItemEE10deallocateEPS4_m_ZNSt3tr113unordered_mapI8wxStringS1_12wxStringHash13wxStringEqualSaISt4pairIKS1_S1_EEED2EvSetYears_ZN8wxLogger12DoLogAtLevelEmPKwz_ZN9__gnu_cxx13new_allocatorINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEE9constructEPS8_RKS8__SC_PIIwxFONTENCODING_MACTAMIL_ZNK12wxUniCharRef7IsAsciiEvFormatISOTimewxWINDOW_VARIANT_LARGE_ZN9__gnu_cxx14__alloc_traitsISaIlEE17_S_select_on_copyERKS1__M_incr_bucket_M_dataplus_ZNKSt10_Select1stISt4pairIK8wxStringS1_EEclERS3__ZN16wxLongLongNativeppEip_sep_by_space_ZNKSt3tr18__detail20_Prime_rehash_policy15max_load_factorEv_ZN16wxLongLongNativeppEv_Node_allocator_typereverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >_ZNK11wxAnyStrPtrcvbEv_ZNK10wxDateTimegeERKS__IffalsewxConvCurrent_ZNK17wxULongLongNativelsEi_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE6rbeginEv_ZN10wxDateTime21IsWestEuropeanCountryENS_7CountryEallocator_ZN9__gnu_cxx14__alloc_traitsISaIlEE7destroyERS1_Pl_ZN9__gnu_cxx14__alloc_traitsISaIPK17wxEventTableEntryEE17_S_select_on_copyERKS4__Prime_rehash_policywxStaticBitmapNameStr_ZNK12wxWindowBase22IsScrollbarAlwaysShownEi_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE4sizeEv_ZNSt6vectorIPKvSaIS1_EE3endEv_ZNK9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEdeEv_ZNKSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE8max_sizeEv_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEE4baseEv_ZNK8wxString8IsNumberEvProcessEvent_SC_2_FORT_RUN_ZNK10wxDateTime5GetTmERKNS_8TimeZoneE_ZNKSt6vectorIsSaIsEE4rendEvSetWeeks_ZN9__gnu_cxx14__alloc_traitsISaIlEE8max_sizeERKS1__ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofEwm_ZN15wxHashTableBase5ClearEv_ZNK9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS1_SaIS1_EEEplEl_ZNK10wxDateSpan8MultiplyEiApp_PnlValue_ZNKSt6vectorIcSaIcEE3endEv_ZNK8wxString9ToCDoubleEPdwxPENSTYLE_FIRST_HATCHkey_equal_ZNK10wxCStrDatacvPKvEv_ZN6wxSize5DecByEiPositionStatusBar_SC_MONOTONIC_CLOCK__ops_ZN9__gnu_cxx14__alloc_traitsISaIP11wxClassInfoEE7destroyERS3_PS2_wxFONTENCODING_MACORIYAwxS_IXUSRSetContainerWindow_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEEmIElwxID_RESTORE_FRAME__is_move_iterator<__gnu_cxx::__normal_iterator > > >__normal_iterator > >_ZNK9__gnu_cxx17__normal_iteratorIPwSbIwSt11char_traitsIwESaIwEEEixEl_ZNK9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEE4baseEv_ZNSt11char_traitsIcE6assignEPcmc_ZNK16wxLongLongNativemiExwxWritableCharTypeBuffer__normal_iterator > >DoGetBestClientWidthstringHashwxDF_WAVEreversewxEVT_THREAD_ZNK20wxHashTableBase_Node7GetDataEvother_ZNSt6vectorIP9wxToolTipSaIS1_EE3endEv_ZNSs6assignEmc_ZN10wxDateSpan3AddERKS_wxDF_TEXT_ZN15wxLogRecordInfo10StoreValueERK8wxStringS2_GetStrValuewxSortCompareFunction_ZNK9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS1_SaIS1_EEEdeEv_ZNK19wxNavigationEnabledI8wxWindowE12AcceptsFocusEv_ZNKSt6vectorIP9wxToolTipSaIS1_EE5frontEvwxS_IWGRPwxLOG_User_ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEw_ZNK8wxString11ToULongLongEPyiwxKeyEvent_ZN9__gnu_cxx14__alloc_traitsISaIlEE10_S_on_swapERS1_S3_reverse_iterator<__gnu_cxx::__normal_iterator > > >_ZN9__gnu_cxx14__alloc_traitsISaIP26wxDateTimeHolidayAuthorityEE8max_sizeERKS3___is_normal_iterator<__gnu_cxx::__normal_iterator > > >_ZN20wxMDIParentFrameBase16ActivatePreviousEvwxPOSIX_USER_READ_ZNK12wxWindowBase10GetMinSizeEvreplace_ZNK9__gnu_cxx13new_allocatorImE7addressERm~Data_ZNKSs12find_last_ofEPKcmmwxWINDOW_VARIANT_SMALLchar_traits_SC_CPUTIMEwmemmove_ZNSs12_S_empty_repEv_SC_FILE_SYSTEM_ZNK8wxWindow8GetLabelEvunderlying_iterator_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE6insertENSA_25_Hashtable_const_iteratorIS4_Lb0ELb0EEERKS4___is_move_iterator<__gnu_cxx::__normal_iterator > > >_ZNK8wxString6wx_strEvGetAs_ZNK8wxString5t_strEv_ZN9__gnu_cxx14__alloc_traitsISaIiEE7destroyERS1_Pi_ZNKSt3tr18__detail15_Hash_code_baseI8wxStringSt4pairIKS2_mESt10_Select1stIS5_E13wxStringEqual12wxStringHashNS0_18_Mod_range_hashingENS0_20_Default_ranged_hashELb0EE13hash_functionEv_SC_LEVEL3_CACHE_ASSOC_vptr.wxTrackerNodewxID_FILECTRL__is_byte, false>*>_ZNSspLEPKc_SC_WORD_BIT_ZNKSt12_Vector_baseIP26wxDateTimeHolidayAuthoritySaIS1_EE13get_allocatorEvwxUint32_ZNK8wxString6mb_strERK8wxMBConvwxWINDOW_VARIANT_MINI_ZNSt6vectorIPvSaIS0_EE3endEv_ZNKSbIwSt11char_traitsIwESaIwEE17find_first_not_ofEPKwmwxBITMAP_TYPE_PNM_RESOURCE_ZNK11wxClassInfo14const_iteratorneERKS0__ZNK14wxEventTypeTagI13wxThreadEventEcvRKiEvgetenv_SC_SAVED_IDS_ZNKSt6vectorIiSaIiEE2atEmwxBITMAP_TYPE_TIF_RESOURCE_ZNSt11char_traitsIwE7not_eofERKj__is_arithmetic_ZNK8wxString7compareEmmRKS_mm_ZNKSt20_List_const_iteratorIP10wxMenuItemEeqERKS2__ZNSt4listIP10wxMenuItemSaIS1_EE6insertESt14_List_iteratorIS1_ERKS1__ZN9__gnu_cxx14__alloc_traitsISaIsEE17_S_select_on_copyERKS1_OnFatalException_ZNSt12_Vector_baseIPKvSaIS1_EE11_M_allocateEm__is_byte_ZN10wxDateTime14GetAmPmStringsEP8wxStringS1_wxEVT_RIGHT_DOWN_ZN9__gnu_cxx13new_allocatorIsE8allocateEmPKv_ZN11wxPanelBaseD0Ev_ZN17wxCriticalSection5LeaveEventries~wxPanelBasesubstrwxFONTENCODING_MACHEBREW_S_showposwxID_EXITosTitle_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE21_M_deallocate_bucketsEPPNSA_10_Hash_nodeIS4_Lb0EEEm_ZNK9wxUniChareqEc_ZNK9wxUniChareqEh_ZNK9wxUniChareqEi_ZNK9wxUniChareqEj_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS2_SaIS2_EEEEEmiEl_ZNK9wxUniChareqEm_ZNSt6vectorIP11wxClassInfoSaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEmRKS1__ZNK9wxUniChareqEs_ZNK9wxUniChareqEt_ZNK9wxUniChareqEw_ZNSt6vectorIP11wxClassInfoSaIS1_EE4dataEv_ZNK9wxUniChareqEym_optKeywxBRUSHSTYLE_BDIAGONAL_HATCHwxID_MDI_WINDOW_TILE_VERT__is_floating_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEEppEiwxITEM_SEPARATORwxFONTENCODING_MACGAELIC_ZNK9__gnu_cxx17__normal_iteratorIPPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEEmiEl_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEEppEvwxSHOW_EFFECT_ROLL_TO_RIGHTwxImplicitConversionType_ZN12wxEvtHandler18SetPreviousHandlerEPS___is_integer_ZN10wxDateTime16SetToLastWeekDayENS_7WeekDayENS_5MonthEi_ZNSt6vectorIP9wxToolTipSaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7_wxSHOW_EFFECT_SLIDE_TO_BOTTOM_ZN9wxPrivate11HandlerImplI12wxEvtHandler7wxEventLb1EE18ConvertToEvtMethodEMS1_FvRS2_E_ZNK9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEplEl_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEEEEplElIsLeapYear_ZN14wxFormatStringaSERKS_SetActiveChild_ZNSt12_Vector_baseIP11wxClassInfoSaIS1_EE11_M_allocateEm_ZNSt6vectorIPvSaIS0_EE6assignEmRKS0__ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS3_SaIS3_EEEEEppEvwxLOG_Message_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmIEl_ZNKSt6vectorIdSaIdEE5emptyEvwxString_ZNK20wxHashTableBase_Node7GetNextEvatexit_ZNK12wxUniCharRefcvlEvProcessThreadEvent_ZN8wxLogger11DoCallOnLogERK8wxStringP13__va_list_tagActivatePrevious_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS3_SaIS3_EEEEEixEl__normal_iterator > >_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEEixElwxEventTypeTagallocatorGetHi__is_normal_iteratorwxLogger~wxClassInfo_ZNK8wxString16find_last_not_ofE9wxUniCharmGetDataUniCharwxKEY_INTEGER__cache_hash_code_ZNK8wxString4findEPKcmm_ZNSt6vectorIlSaIlEE2atEm_ZNK14wxMenuItemList7IndexOfEP10wxMenuItemwxEventFunctor_ZNSt6vectorIdSaIdEE18_M_fill_initializeEmRKd_S_synced_with_stdio_ZNK9wxUniCharmiERKS__ZNSt6vectorIP11wxClassInfoSaIS1_EE18_M_fill_initializeEmRKS1_Clearreverse_iteratorGetId_ZN8wxStringpLE12wxUniCharRef_ZNK8wxString8iteratorneERKS0__ZN6wxSize5DecByERK7wxPoint_ZNSt6vectorIPvSaIS0_EE4dataEv_ZNK10wxDateTime10IsSameDateERKS_wxEventType_ZNK9wxUniCharneEc_ZNK9wxUniCharneEh_ZNK9wxUniCharneEi_ZNK9wxUniCharneEj_ZNKSt6vectorIPvSaIS0_EE5frontEv_ZNK9wxUniCharneEl_ZNK9wxUniCharneEm_ZNKSt6vectorIPKvSaIS1_EE14_M_range_checkEm_ZNKSs7compareEPKc_ZNK9wxUniCharneEt_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE4rendEvint_n_cs_precedes_ZNK9wxUniCharneEx_ZNK9wxUniCharneEyEventClassOf >_ZNK9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS2_SaIS2_EEEdeEv_ZN21wxMDIClientWindowBaseC2Ev_SC_NPROCESSORS_CONFvector >__is_integer, false>*>_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEE4baseEv_ZNK10wxDateTime8SubtractERK10wxTimeSpanwxIMAGE_QUALITY_BICUBIC_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwm_ZNSt6vectorIiSaIiEE4swapERS1_iterator_ZN9__gnu_cxx13new_allocatorINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS5_ELb0EEEE8allocateEmPKvGetTimeNow_ZNKSt4listIP10wxMenuItemSaIS1_EE3endEv__alloc_traits >_ZNK9__gnu_cxx17__normal_iteratorIP8wxStringSt6vectorIS1_SaIS1_EEEplEl_ZNKSt6vectorI8wxStringSaIS0_EE5emptyEv_ZNSt12_Vector_baseIlSaIlEE19_M_get_Tp_allocatorEv_ZNK12wxUniCharRefeqERKS__Rehash_base, std::allocator >, std::_Select1st >, wxStringEqual, wxStringHash, std::tr1::__detail::_Mod_range_hashing, std::tr1::__detail::_Default_ranged_hash, std::tr1::__detail::_Prime_rehash_policy, false, false, true> >LogTraceGetLo_ZN23wxCriticalSectionLockeraSERKS__ZN16wxLongLongNativemmEi__is_move_iterator<__gnu_cxx::__normal_iterator > > >_ZNK17wxULongLongNativeplERKS__ZN22wxScopedCharTypeBufferIcE4dataEvinteger_ZN16wxLongLongNativemmEv_ZNSt4listIP10wxMenuItemSaIS1_EE18_M_fill_initializeEmRKS1_lldiv_ZNK9__gnu_cxx13new_allocatorI8wxStringE7addressERS1__ZNKSt6vectorIsSaIsEE4sizeEv_ZN9__gnu_cxx14__alloc_traitsISaIP11wxClassInfoEE10deallocateERS3_PS2_mm_buffer_ZSt7nothrow_SC_LEVEL4_CACHE_LINESIZE_ZNSt6vectorIlSaIlEE6resizeEmlSetRepresentedFilename_ZNKSt6vectorIlSaIlEE4backEvgrouping_ZN9wxPrivate11HandlerImplI12wxEvtHandler7wxEventLb1EE12IsEvtHandlerEv_ZNK14wxEventTypeTagI14wxNcPaintEventEcvRKiEv_M_deallocatem_refCount__are_same_ZNK9__gnu_cxx13new_allocatorISt4pairIK8wxStringmEE8max_sizeEveq_int_type_ZNKSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE5frontEv_ZNK9wxUniCharltEswxFont_ZNKSs8_M_limitEmm_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE6rbeginEv__conditional_type, false, false>, bool>, std::tr1::__detail::_Hashtable_iterator, false, false> >GetDaysSetDayswxMBConvUTF7_ZNK9__gnu_cxx17__normal_iteratorIPP9wxToolTipSt6vectorIS2_SaIS2_EEEixElDoLogWithPtrIsClientAreaChild_S_on_swapm_src_ZNSt6vectorIlSaIlEE5beginEv_ZN8wxLogger4LogVERK8wxStringP13__va_list_tag_ZNSt12_Vector_baseIP26wxDateTimeHolidayAuthoritySaIS1_EE11_M_allocateEm_ZNK10wxDateTime8GetAsDOSEv_SC_2_C_DEVshort unsigned int_ZN9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEEppEim_format_ZN6wxSize5ScaleEff_ZN9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEEppEv_ZNK14wxMenuItemList22compatibility_iterator7IndexOfEv_Node_alloc_type_ZNSs4_Rep12_S_empty_repEv_ZNK8wxString8char_strERK8wxMBConv_ZNKSt6vectorIcSaIcEE2atEmlong long int_ZNK12wxWindowBase7IsShownEvUpperwxScopedCharTypeBufferwxID_VIEW_LISTm_strhelp_ZNK14wxMenuItemList3NthEiwxMUTEX_DEAD_LOCK_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZNSt11char_traitsIwE2ltERKwS2__ZN20wxObjectEventFunctorD2Ev_ZNK8wxString17find_first_not_ofERK22wxScopedCharTypeBufferIwEmrebind_ZNSbIwSt11char_traitsIwESaIwEE4swapERS2__ZNK8wxString21reverse_iterator_implINS_8iteratorEEltERKS2_count_ZNSt6vectorImSaImEE5eraseEN9__gnu_cxx17__normal_iteratorIPmS1_EES5_wxEVT_MOVINGreverse_iterator<__gnu_cxx::__normal_iterator > > >p_cs_precedes_ZNSsixEm_ZNSs7_M_dataEPcWeeks~wxNavigationEnabled_ZNSbIwSt11char_traitsIwESaIwEE6appendEPKwm_ZN12wxEvtHandler18SafelyProcessEventER7wxEventlldiv_t_ZNK10wxDateTime8GetTicksEvallocatorTIME_T_FACTOR_ZN9__gnu_cxx13new_allocatorIdE10deallocateEPdm_ZNKSt3tr18__detail20_Prime_rehash_policy19_M_bkt_for_elementsEm__first_SC_SS_REPL_MAX_ZN10wxDateSpan5WeeksEiwxDateTimeHolidayAuthority_Vector_implA_WST_ZN9__gnu_cxx14__alloc_traitsISaI8wxStringEE17_S_select_on_copyERKS2_wxTHREAD_NOT_RUNNING__vtbl_ptr_typewcscspn_ZNK10wxDateSpan7GetDaysEv_ZN14wxMenuItemList6InsertEmP10wxMenuItem_ZN9__gnu_cxx14__alloc_traitsISaIP11wxClassInfoEE8allocateERS3_m_ZNK8wxString12ToStdWstringEv_SC_2_FORT_DEVwxID_SEPARATOR_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7__ZNKSt12_Vector_baseIP9wxToolTipSaIS1_EE13get_allocatorEvGetTmfontiterator_traits<_GdkDrawable* const*>_ZN8wxString10RemoveLastEmwxBORDER_MASK_ZN10wxDateTime12ParseISODateERK8wxString__traitor, std::__is_floating >wxEVT_IDLEreserve_ZN9__gnu_cxx13new_allocatorINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEE8allocateEmPKvstrtoldwxKeyTypestrtoll_ZNK9__gnu_cxx13new_allocatorIcE7addressERKc_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE5frontEv_ZNK8wxString8capacityEv_ZNK8wxString8IsSameAsEPKcbm_len_ZNK22wxControlContainerBase23AcceptsFocusRecursivelyEv_ZNK8wxString5rfindERK22wxScopedCharTypeBufferIcEmm_ZNSt12_Vector_baseIP12wxEvtHandlerSaIS1_EE12_Vector_impl12_M_swap_dataERS4__SC_SYNCHRONIZED_IOMonthunitbuf_ZNK10wxDateSpan8GetYearsEvfwprintf_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE4findERS3__ZN19wxNavigationEnabledI8wxWindowE8SetFocusEv_ZNK8wxString8iteratorleERKS0__ZNSt6vectorI8wxStringSaIS0_EE15_M_erase_at_endEPS0__ZN8wxString6AppendEPKcm_M_check_length_ZNKSt3tr18__detail20_Prime_rehash_policy14_M_need_rehashEmmm_ZN8wxStringaSERK10wxCStrData_ZNSt12_Vector_baseIsSaIsEE19_M_get_Tp_allocatorEv_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EEaSERKS4__ZN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEpLEl_ZNK9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEEptEv_ZN6wxSize5IncByERKS__ZN8wxStringC2EPKc_ZNSt3tr18__detail25_Hashtable_const_iteratorISt4pairIK8wxStringS3_ELb0ELb0EEppEi_ZNK10wxDateTimeleERKS__ZN8wxStringC2EPKw_ZNK5wxAny2AsEP8wxString_ZN9__gnu_cxx14__alloc_traitsISaIP12wxEvtHandlerEE7destroyERS3_PS2_GetKeyStringwxID_STOP_Value_allocator_type_ZNSt12_Vector_baseIiSaIiEE17_M_create_storageEmmethod_GdkAtom_ZNKSs7_M_dataEv_ZN11wxTrackableaSERKS__ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEEmmEiSafelyProcessEvent_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEEmmEv_ZN8wxLogger4LogVElRK8wxStringP13__va_list_tag_ZNKSt6vectorIPK17wxEventTableEntrySaIS2_EE5frontEv_ZNK8wxString21reverse_iterator_implINS_14const_iteratorEEixEm_ZNSt6vectorIPKvSaIS1_EE18_M_fill_initializeEmRKS1__ZN9__gnu_cxx14__alloc_traitsISaIiEE8max_sizeERKS1__ZNKSt20_List_const_iteratorIP10wxMenuItemE13_M_const_castEvwxBRUSHSTYLE_SOLIDwxFONTENCODING_CP1253_ZNK9__gnu_cxx17__normal_iteratorIPP11wxClassInfoSt6vectorIS2_SaIS2_EEEdeEv_ZN15wxLogRecordInfo9ExtraDataD2EvAssignAny_ZNKSt6vectorIcSaIcEE14_M_range_checkEmBeginRepositioningChildrenwxThread_ZNSt6vectorImSaImEE4rendEv_M_clone_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEEEEmiEl_ZNKSbIwSt11char_traitsIwESaIwEE7compareEPKw_List_base >_ZN8wxString4TrimEb_ZNK9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEplEl~wxNonOwnedWindowBase_ZNSt6vectorIP11wxClassInfoSaIS1_EE5beginEv_ZN5wxLog14IsLevelEnabledEm8wxString_ZNSt6vectorIlSaIlEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPlS1_EEDoPut_ZN9wxPrivate17UntypedBufferDataC2EPvmNS0_4KindE_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE21_M_deallocate_bucketsEPPNSA_10_Hash_nodeIS4_Lb0EEEmCreateEventTypeTablewctob__is_byte_ZN16wxLongLongNativepLEx_ZNKSt6vectorIiSaIiEE5frontEvwxID_REPLACE_ALLnothrow_t_Hashtable_const_iterator, false, false>_ZNK19wxNavigationEnabledI8wxWindowE23AcceptsFocusRecursivelyEvlong intshowpoint__array_Tp1wxBRUSHSTYLE_CROSS_HATCH_ZNK12wxWindowBase17IsClientAreaChildEPK8wxWindowwxGaugeNameStrfind_first_of_Vector_base >pairGetNullData_M_next_ZNK19wxTopLevelWindowGTK8GetLabelEv_ZNK9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEdeEvoperator std::string_ZNKSt6vectorIP12_GdkDrawableSaIS1_EE4backEvwxBRUSHSTYLE_FDIAGONAL_HATCHoperator wxWritableCharTypeBuffer::CharType*__numeric_traits_integer_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEEplEl_ZN9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEE9constructEPS9_RKS9__SC_V7_ILP32_OFFBIGwxMenuBar_ZN22wxScopedCharTypeBufferIcE11CreateOwnedEPcmwxEVT_TEXT_URL_ZN21wxMDIClientWindowBase12CreateClientEP16wxMDIParentFramelwxEventTypeTagToEventConnectionTryParent_ZNKSbIwSt11char_traitsIwESaIwEE8_M_limitEmm_ZNSt6vectorIlSaIlEE6insertEN9__gnu_cxx17__normal_iteratorIPlS1_EEmRKl_ZNSt6vectorImSaImEE6rbeginEv_ZN17wxEventTableEntryD2EvcharStringHashoperator long long unsigned int_ZNSt4listIP10wxMenuItemSaIS1_EE9_M_insertESt14_List_iteratorIS1_ERKS1__ZN10wxDateTime14GetCurrentYearENS_8CalendarEGetDayOfYear_ZNKSt6vectorIP11wxClassInfoSaIS1_EE12_M_check_lenEmPKc_SC_PII_SOCKET_flags2_ZN10wxDateTime7SetHourEt_ZN11wxClassInfoaSERKS__ZNSt6vectorIP12_GdkDrawableSaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZNK9__gnu_cxx17__normal_iteratorIP8wxStringSt6vectorIS1_SaIS1_EEEmiElwxFONTENCODING_DEFAULTwxUint8_ZNSt4listIP10wxMenuItemSaIS1_EE5eraseESt14_List_iteratorIS1_ES5_DoClearShapeGetAsChar_ZNK12wxWindowBase7HasFlagEi_ZN9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEED2Ev_ZNKSt6vectorIdSaIdEE8max_sizeEvwxLogLevellocker_ZNK12wxStringHashclEPKw_SC_V7_LP64_OFF64_ZNK14wxEventTypeTagI11wxShowEventEcvRKiEv_ZNK9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEplEl_ZN22wxScopedCharTypeBufferIcE11GetNullDataEv_ZNSt12_Vector_baseIPK17wxEventTableEntrySaIS2_EE11_M_allocateEm_SC_STREAMS_ZNK9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEE4baseEvwxIDLE_PROCESS_SPECIFIED_M_p_M_vmbtowc_ZNK8wxString7compareEmmRKS__ZNKSt3tr18__detail25_Hashtable_const_iteratorISt4pairIK8wxStringmELb0ELb0EEptEv_ZN12wxDataFormataSEP8_GdkAtom_ZN10wxDateTimemIERK10wxTimeSpan_S_internal_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE19_M_allocate_bucketsEm_ZN7wxPointpLERK6wxSizewxID_JUSTIFY_LEFT_ZNK10wxDateTimemiERK10wxTimeSpan__traitor, std::__is_pointer >wxFONTENCODING_MACTHAIF_OWNER_PIDwxFONTENCODING_MACCROATIAN_ZNK6wxSize9GetHeightEv__wchFromUTC_chainptrdiff_tunsigned char_ZNKSt6vectorI8wxStringSaIS0_EE3endEv_ZNK9__gnu_cxx13new_allocatorIP9wxToolTipE7addressERKS2__ZN8wxString6assignEm9wxUniChar_S_select_on_copy_ZN8wxString5beginEviterator_traits_ZN10wxDateTime12ParseISOTimeERK8wxStringrehash_ZNKSt6vectorIPvSaIS0_EE4backEv_ZNK8wxString5rfindEPKwmm_ZN17wxULongLongNativedVEm_ZNK14wxThreadHelper9GetThreadEv_SC_SEM_NSEMS_MAX_ZNSt6vectorIlSaIlEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPlS1_EES5__SC_SYMLOOP_MAX_ZN10wxDateTime16SetToNextWeekDayENS_7WeekDayE_ZNK10wxDateTime13FormatISODateEv_ZN9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEEmmEi_ZNKSt6vectorIsSaIsEE5frontEvwxID_FILEDLGG_ZN9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEEmmEvwxFONTENCODING_MACSYMBOL_ZNKSt6vectorImSaImEE8capacityEvwxID_MDI_WINDOW_CASCADE_ZNSt3tr18__detail15_Hash_code_baseI8wxStringSt4pairIKS2_S2_ESt10_Select1stIS5_E13wxStringEqual12wxStringHashNS0_18_Mod_range_hashingENS0_20_Default_ranged_hashELb0EE7_M_swapERSC__ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE5clearEvwxMenuItemList_ZN10wxDateSpan8SubtractERKS_Result_ZNK7FrmMain17GetEventHashTableEv_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS2_SaIS2_EEEEEptEvwxITEM_MAX__ioinitwxDF_DIBwxDF_DIF__is_move_iterator_ZNK17wxULongLongNativeleEm_M_set_sharablewxLOG_COMPONENTtrailing_M_impl_ZNK9wxUniCharcvjEv_ZN20wxEventFunctorMethodI14wxEventTypeTagI14wxCommandEventE12wxEvtHandler7wxEventS3_ED0Ev_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKw_ZNK10wxTimeSpan9IsEqualToERKS__ZNK9__gnu_cxx17__normal_iteratorIPPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEEptEv_ZN10wxDateTime8SubtractERK10wxDateSpanCalendar_ZN9__gnu_cxx14__alloc_traitsISaIP12_GdkDrawableEE7destroyERS3_PS2__ZN9__gnu_cxx14__alloc_traitsISaIcEE7destroyERS1_PcwxID_PASTE_ZNK29wxEventTableEntryPointerArray7IsEmptyEv_ZNK14wxMenuItemList8GetCountEvConvertedBuffer_ZNKSs16find_last_not_ofEPKcm_ZN15wxHashTableBase16DoDeleteContentsEP20wxHashTableBase_NodewxCharStringHash_ZN8wxStringlsE9wxUniCharwxScopedCharTypeBufferBase_ZN9__gnu_cxx13new_allocatorIP11wxClassInfoE10deallocateEPS2_mwxThreadWait_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwmm_ZNK10wxCStrDatacvPKhEv_ZNSt12_Vector_baseI8wxStringSaIS0_EE13_M_deallocateEPS0_m_ZNK9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS1_SaIS1_EEEplEl_ZN10wxTimeSpan8MultiplyEiGetThemeEnablediterator_traits_ZNSt6vectorI8wxStringSaIS0_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EEiterator_traits<__gnu_cxx::__normal_iterator > > >_ZNKSt3tr18__detail12_Rehash_baseINS0_20_Prime_rehash_policyENS_10_HashtableI8wxStringSt4pairIKS4_S4_ESaIS7_ESt10_Select1stIS7_E13wxStringEqual12wxStringHashNS0_18_Mod_range_hashingENS0_20_Default_ranged_hashES2_Lb0ELb0ELb1EEEE15max_load_factorEv_ZNK9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEixEliterator_ZNSt4listIP10wxMenuItemSaIS1_EE14_M_create_nodeERKS1_NZST_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEEpLEl_ZNK14wxMenuItemList22compatibility_iterator7GetNextEv_ZNK8wxString5rfindERK10wxCStrDatamm_ZN8wxLoggerD2Evm_sink_ZNK16wxLongLongNativeneERKS_wxID_ICONIZE_FRAMEwxPOSIX_GROUP_EXECUTE_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE6rehashEm__are_same_ZNSt6vectorI8wxStringSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EERKS0__ZNSbIwSt11char_traitsIwESaIwEE4_Rep13_M_set_leakedEv_ZNK9wxAppBase8IsActiveEv_ZNSbIwSt11char_traitsIwESaIwEE9push_backEw_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE16max_bucket_countEv_ZNKSt6vectorIlSaIlEEixEm_Hashtablecurrent_SC_TYPED_MEMORY_OBJECTSArg_LongLongInt_ZNK9wxUniCharaaEb_ZN8wxString9LowerCaseEv_ZNSbIwSt11char_traitsIwESaIwEE4_Rep10_M_refdataEv_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_S6_S6__ZNSbIwSt11char_traitsIwESaIwEE12_S_empty_repEvGetMonthiterator_traits_ZN9__gnu_cxx14__alloc_traitsISaIP11wxClassInfoEE8max_sizeERKS3_wxCStrData_ZNKSt12_Vector_baseIPvSaIS0_EE13get_allocatorEv__normal_iterator > >wxEVT_LEFT_DCLICK__traitor, false>*>, std::__is_pointer, false>*> >_ZNK14wxEventTypeTagI15wxJoystickEventEcvRKiEv_ZNK8wxString5CloneEv_ZNK14wxEventTypeTagI15wxUpdateUIEventEcvRKiEvwxConvLocalPtr_ZNK8wxString8IsSameAsEPKwb_ZNK10wxTimeSpanltERKS_IsScrollbarAlwaysShown_ZN17wxULongLongNativeaSEi_ZNK8wxString4findE9wxUniCharm_ZNK8wxString4FindE12wxUniCharRefb_ZNK8wxString8IsSameAsERK10wxCStrDatab_ZNK9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEE4baseEv_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE4dataEv_ZN8wxString6AppendE9wxUniCharm_SC_2_PBS_LOCATE_ZN16wxAppConsoleBase16OnEventLoopEnterEP15wxEventLoopBase_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS3_SaIS3_EEEEEppEi_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS3_SaIS3_EEEEEdeEv_ZNSt4listIP10wxMenuItemSaIS1_EE6spliceESt14_List_iteratorIS1_ERS3__ZN8wxString6AppendEPKwm_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS3_SaIS3_EEEEEppEvGetTotalMonths_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS3_SaIS3_EEEEEmmEi_ZNKSbIwSt11char_traitsIwESaIwEE7compareEmmPKwm_ZNSaISt10_List_nodeIP10wxMenuItemEED2EvBeforeLastwxEventTypeTagwxRadioBoxNameStr_ZNK8wxString8iteratorltERKNS_14const_iteratorE_ZNKSt6vectorIlSaIlEE3endEv_ZNKSs12find_last_ofEPKcmwxVERTICAL_ZN11wxRealPointmIERKS_IsKindOf_ZNK9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS2_SaIS2_EEEdeEv_ZNK9__gnu_cxx17__normal_iteratorIPPKvSt6vectorIS2_SaIS2_EEEixEl_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE6assignEmRKS1__M_get_Node_allocator__traitor, false>*>, std::__is_floating, false>*> >_ZNK9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEmiEl_ZNSt6vectorIcSaIcEE6insertEN9__gnu_cxx17__normal_iteratorIPcS1_EEmRKcwxID_JUSTIFY_RIGHT_ZN10wxDateTime4UNowEv__is_pointer_ZN22wxScopedCharTypeBufferIwE5resetEv_ZNKSt12_Vector_baseIcSaIcEE19_M_get_Tp_allocatorEv_ZN8wxString6insertEmm9wxUniChar_ZNSt12_Vector_baseIP9wxToolTipSaIS1_EE12_Vector_impl12_M_swap_dataERS4_Enter_ZNSt6vectorIP11wxClassInfoSaIS1_EE2atEm_ZN10wxDateTime15IsDSTApplicableEiNS_7CountryE_Vector_base >_ZNSs4_Rep10_M_destroyERKSaIcE_ZNK9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS1_SaIS1_EEE4baseEv_ZN12wxWindowBase24HasTransparentBackgroundEv_ZNK8wxString12find_last_ofEcm_ZNSt12_Vector_baseIlSaIlEE11_M_allocateEm_ZNSt6vectorIP11wxClassInfoSaIS1_EEixEm_ZNSs7_M_copyEPcPKcmwxBITMAP_TYPE_TIFFwxPENSTYLE_SOLID_ZNSt6vectorImSaImEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPmS1_EERKmyearwxAssertHandler_t_ZNSt6vectorIlSaIlEE6insertEN9__gnu_cxx17__normal_iteratorIPlS1_EERKl_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEEmiEl_ZNK19wxNavigationEnabledI8wxWindowE24AcceptsFocusFromKeyboardEv_ZNSt3tr18__detail19_Hashtable_iteratorISt4pairIK8wxStringS3_ELb0ELb0EEppEi_ZNSt3tr18__detail19_Hashtable_iteratorISt4pairIK8wxStringS3_ELb0ELb0EEppEv_ZN12wxDataFormat14InitFromStringERK8wxString_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEEdeEv_ZN20wxEventFunctorMethodI14wxEventTypeTagI14wxCommandEventE12wxEvtHandler7wxEventS3_EC2EMS3_FvRS4_EPS3_char_str__is_integer_ZN9__gnu_cxx14__alloc_traitsISaIPKvEE8max_sizeERKS3__ZN9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEEpLEl_ZNSt6vectorIPvSaIS0_EEixEm_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE__is_normal_iterator<_GdkDrawable**>_ZNKSbIwSt11char_traitsIwESaIwEE8capacityEv_ZN8wxString6insertEmPKc_ZNSt6vectorIdSaIdEE5frontEv_ZNK9wxAppBase13UsesEventLoopEvwxFONTENCODING_ISO8859_MAX_ZN7FrmMain20sm_eventTableEntriesE_ZN8wxString6insertEmPKw_M_limit__numeric_traits_integer_ZNSs4_Rep9_S_createEmmRKSaIcE_ZN9wxPrivate11HandlerImplI12wxEvtHandler7wxEventLb1EEC2EvwxID_REFRESH_SC_NL_TEXTMAX_S_boolalpha_ZNSt6vectorIPKvSaIS1_EEaSERKS3__ZN8wxString6appendEPKc_ZN11wxPanelBaseC2Ev_ZNK14wxEventTypeTagI22wxAsyncMethodCallEventEcvRKiEv_ZNK14wxMenuItemList4FindEPK10wxMenuItem_ZN8wxString6appendEPKw_ZN16wxLongLongNativeaNERKS__S_unitbufwxS_IWOTH_ZNKSt6vectorImSaImEE4backEv~wxString_ZNKSs13find_first_ofERKSsm_ZNK9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEmiEl_ZN10wxTimeSpan11MillisecondEv_ZN9__gnu_cxx17__normal_iteratorIPP12_GdkDrawableSt6vectorIS2_SaIS2_EEEppEi_ZNK8wxString8IsSameAsERK22wxScopedCharTypeBufferIwEboperator long inttm_min7lldiv_t_ZN12wxRefCounter6IncRefEv_ZN9__gnu_cxx17__normal_iteratorIPP12_GdkDrawableSt6vectorIS2_SaIS2_EEEppEv__is_move_iterator<__gnu_cxx::__normal_iterator > > >_ZNK8wxString21reverse_iterator_implINS_8iteratorEEgtERKS2_wxEVT_MOTION~wxLoggerfp_offset_ZNSt6vectorIlSaIlEE7reserveEm__traitor, false>*>, std::__is_pointer, false>*> >_ZN16wxLongLongNative6NegateEv_ZNK14wxAnyValueType10IsSameTypeEPKS__M_insert_aux_ZNSs7reserveEm_ZNKSt6vectorIPKvSaIS1_EE4backEv_ZN8wxString11FromCDoubleEdi_SC_NL_MSGMAX_ZNK8wxString12find_last_ofE12wxUniCharRefm_ZNK8wxString12find_last_ofEhmm_size_ZN8wxString6appendERK22wxScopedCharTypeBufferIcE_ZNK9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS2_SaIS2_EEEplEl_ZNSt6vectorIlSaIlEE6assignEmRKl_ZNK10wxDateTime26GetModifiedJulianDayNumberEv_ZN12wxEvtHandler12ProcessEventER7wxEvent_ZN9__gnu_cxx14__alloc_traitsISaIPKvEE10_S_on_swapERS3_S5_wxBITMAP_TYPE_RESOURCE_ZN17wxULongLongNativeaSEj_ZN17wxULongLongNativeaSEl_ZN17wxULongLongNativeaSEmwcspbrk_ZN17wxULongLongNativeaSEx_ZN17wxULongLongNativeaSEy_ZN20wxNonOwnedWindowBase8SetShapeERK8wxRegion_ZNK9__gnu_cxx13new_allocatorISt4pairIK8wxStringS2_EE7addressERS4__ZN17wxULongLongNativeaNERKS__ZNSt6vectorIcSaIcEE18_M_fill_initializeEmRKc_ZNK8wxString21reverse_iterator_implINS_14const_iteratorEEltERKS2__ZNK11wxAnyStrPtrntEv_ZN10wxDateTime7SetYearEi_Vector_base >GrowEventTypeTablem_keyType_ZNK8wxString17find_first_not_ofERKS_m_ZN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEppEiArg_Size_t_ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EEmw_ZNSt6vectorI8wxStringSaIS0_EE4swapERS2__Container_ZN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEppEvwxStatusLineNameStr_ZN12wxWindowBase7SetNameERK8wxString_ZNK8wxString16find_last_not_ofEPKcmm_ZNSs6appendERKSsmmwxID_JUSTIFY_CENTERwxAppInitializerFunction_ZN9__gnu_cxx14__alloc_traitsISaIdEE8allocateERS1_mLeave_ZN8wxString6assignEPKcmwxEventTableEntryBase_ZN12wxEvtHandler18ProcessThreadEventERK7wxEvent_ZN10wxDateSpan8MultiplyEiwxFONTENCODING_CP852__is_integer_ZN9__gnu_cxx14__alloc_traitsISaIdEE10deallocateERS1_Pdm__is_floating__is_integer_M_replace_safe_ZNSt3tr18__detail12__prime_listE_ZNK8wxString6fn_strEv_ZNSt12_Vector_baseIdSaIdEE17_M_create_storageEm_ZN9__gnu_cxx13new_allocatorImE7destroyEPmoSize__traitor, std::__is_pointer >_ZN10wxDateTime16MakeFromTimezoneERKNS_8TimeZoneEbAppend_ZNKSs6_M_repEvOnEventLoopEnter_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7__ZN12wxWindowBase19SetAcceleratorTableERK18wxAcceleratorTable__traitor, std::__is_floating >_ZNKSt12_Vector_baseImSaImEE13get_allocatorEvwxID_CLOSE_FRAME_ZN19wxNavigationEnabledI8wxWindowED2Ev_Hashtable, std::allocator >, std::_Select1st >, wxStringEqual, wxStringHash, std::tr1::__detail::_Mod_range_hashing, std::tr1::__detail::_Default_ranged_hash, std::tr1::__detail::_Prime_rehash_policy, false, false, true>_ZNK14wxEventTypeTagI14wxIconizeEventEcvRKiEvreference_ZN9__gnu_cxx13new_allocatorIwE10deallocateEPwm_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEEEEptEv__pfn_ZNK8wxString17find_first_not_ofERK22wxScopedCharTypeBufferIwEmm__are_same_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5eraseENSA_19_Hashtable_iteratorIS4_Lb0ELb0EEEGetThreadwxRealPoint_ZNSt6vectorIPKvSaIS1_EE6assignEmRKS1_AsWChar_ZNK9wxUniCharcvcEv__is_move_iterator<__gnu_cxx::__normal_iterator > > >_ZNK12wxUniCharRefcvtEv_ZN9__gnu_cxx13new_allocatorIPKvE7destroyEPS2__ZNK9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS1_SaIS1_EEEmiElWrite_ZNSaIP10wxMenuItemED2Ev_ZN9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS2_SaIS2_EEEmIEl_ZNSt12_Vector_baseIP9wxToolTipSaIS1_EE17_M_create_storageEm_Vector_base_ZNKSt6vectorIPKvSaIS1_EE5emptyEv_ZNK9__gnu_cxx13new_allocatorISt4pairIK8wxStringmEE7addressERKS4___traitor, std::__is_pointer >__prime_list_ZNKSt6vectorIcSaIcEE5beginEv_ZNKSt6vectorIP11wxClassInfoSaIS1_EE4rendEvArg_LongDoublepush_front_ZNKSt3tr18__detail15_Hash_code_baseI8wxStringSt4pairIKS2_S2_ESt10_Select1stIS5_E13wxStringEqual12wxStringHashNS0_18_Mod_range_hashingENS0_20_Default_ranged_hashELb0EE15_M_bucket_indexEPKNS0_10_Hash_nodeIS5_Lb0EEEm_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEEmIEl_ZNSt6vectorIP9wxToolTipSaIS1_EE6assignEmRKS1__SC_LEVEL1_ICACHE_LINESIZE_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS3_SaIS3_EEEEEppEi_ZN12wxEvtHandler9TryParentER7wxEventGetAsAny_ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_mwwxAsyncMethodCallEvent_SC_PII_OSI_COTS_M_iend_ZNKSbIwSt11char_traitsIwESaIwEE2atEm__is_integer_ZNK8wxString12find_last_ofE9wxUniCharmwxFONTENCODING_MACMALAJALAM_ZN10wxDateSpan3NegEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS3_SaIS3_EEEEEppEi_ZNSt6vectorIP12_GdkDrawableSaIS1_EE7reserveEmGetNextWeekDay__is_move_iterator<__gnu_cxx::__normal_iterator > > >GetValue_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS3_SaIS3_EEEEEppEv_S_construct_aux_2sm_idleModefunc__ZNKSt12_Vector_baseIPK17wxEventTableEntrySaIS2_EE19_M_get_Tp_allocatorEv_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE11equal_rangeERS3_GetBeginDST_ZNK17wxULongLongNative8ToDoubleEvwxID_LOWEST_ZNKSt14_List_iteratorIP10wxMenuItemE13_M_const_castEv_ZN22wxScopedCharTypeBufferIcE6DecRefEvwxID_VIEW_SMALLICONS_ZNK8wxString12find_last_ofEPKwmm_ZNSbIwSt11char_traitsIwESaIwEE7replaceEmmPKwGetBaseClassName1GetBaseClassName2wxFrame_ZN12wxWindowBase16SetMaxClientSizeERK6wxSizem_fnstrtoull_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE11bucket_sizeEm_ZN9__gnu_cxx14__alloc_traitsISaIcEE8max_sizeERKS1__SC_TRACE_EVENT_NAME_MAX_ZNKSt3tr18__detail15_Hash_code_baseI8wxStringSt4pairIKS2_mESt10_Select1stIS5_E13wxStringEqual12wxStringHashNS0_18_Mod_range_hashingENS0_20_Default_ranged_hashELb0EE12_M_copy_codeEPNS0_10_Hash_nodeIS5_Lb0EEEPKSE__ZNK9__gnu_cxx17__normal_iteratorIPP12wxEvtHandlerSt6vectorIS2_SaIS2_EEE4baseEv_ZNSt6vectorI8wxStringSaIS0_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EES6__ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi_ZNKSbIwSt11char_traitsIwESaIwEE7_M_dataEv_ZN9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEEmmEv_ZNSs2atEmAcceptsFocusFromKeyboard_ZNK9__gnu_cxx17__normal_iteratorIP8wxStringSt6vectorIS1_SaIS1_EEEptEv_ZN8wxString11PosFromImplEm_ZNSt8__detail15_List_node_base7_M_hookEPS0__ZNKSt6vectorIiSaIiEE12_M_check_lenEmPKc_ZNKSt6vectorIP11wxClassInfoSaIS1_EE8capacityEvwxColourwxStandardID_ZNK10wxCStrData8AsStringEv__is_normal_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS3_SaIS3_EEEEEmmEi_IO_buf_end_ZNK10wxTimeSpangtERKS__ZNK16wxLongLongNativedvEl_ZNSaIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEEC2IS6_EERKSaIT_E_ZNSt12_Vector_baseIP9wxToolTipSaIS1_EE13_M_deallocateEPS1_m_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS3_SaIS3_EEEEEmmEv_ZN10wxDateTimemIERK10wxDateSpanwcsxfrm_ZN6wxSizemLEd_ZNSt6vectorIPKvSaIS1_EE5clearEv_Vector_base >_ZN6wxSizemLEi_ZN6wxSizemLEj_Mod_range_hashing_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE15__rehash_policyEv_ZN6wxSizemLEm_ZNSt6vectorIP9wxToolTipSaIS1_EE8pop_backEv_SC_MEMLOCK_ZNK8wxString6rbeginEviostateAsScopedBufferm_idOwnedwxDF_FILENAMESetThemeEnabled_ZNSt6vectorImSaImEE8pop_backEv_ZN15wxLogRecordInfoaSERKS_iswctype_ZN9__gnu_cxx14__alloc_traitsISaI8wxStringEE10_S_on_swapERS2_S4__ZN9__gnu_cxx17__normal_iteratorIPP11wxClassInfoSt6vectorIS2_SaIS2_EEEppEv_ZNKSs6rbeginEv_ZN17wxULongLongNativelSEi_ZNK17wxULongLongNativeltEmwxID_REMOVEwxThreadError_ZN8wxLogger14DoLogTraceMaskEmPKwz_ZNSt11char_traitsIwE4findEPKwmRS1__ZNK8wxString16find_last_not_ofEPKcm_ZNKSs5rfindEPKcmm_ZNK9wxUniCharcvyEv_ZN10wxTimeSpanmiERKS__ZNKSt3tr18__detail19_Hashtable_iteratorISt4pairIK8wxStringmELb0ELb0EEdeEv_ZNK8wxWindow24GTKIsTransparentForMouseEv_ZNKSt6vectorIP12wxEvtHandlerSaIS1_EE8capacityEvcompatibility_iterator_ZN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEppEi_ZN9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS2_SaIS2_EEEmIEl_SC_DEVICE_SPECIFIC_ZN8wxStringC2ERKS__ZN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEppEv_ZNSt6vectorIP11wxClassInfoSaIS1_EE15_M_erase_at_endEPS1__ZN16wxEventHashTable13InitHashTableEv_ZN8wxLogger9LogVTraceERK8wxStringS2_P13__va_list_tag_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIPKwS2_EES8__ZNKSt4listIP10wxMenuItemSaIS1_EE4backEv_ZN16wxEventHashTable11HandleEventER7wxEventP12wxEvtHandler~wxCriticalSectionLocker_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE5beginEv_ZNKSt6vectorIdSaIdEE3endEv_ZNK8wxString14const_iteratorplEl_ZNSt6vectorIdSaIdEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPdS1_EERKd_ZNSt6vectorI8wxStringSaIS0_EE6insertEN9__gnu_cxx17__normal_iteratorIPS0_S2_EEmRKS0__ZNK8wxString14const_iteratormiERKS0__SC_FILE_LOCKING_vptr.wxHashTableBasewcsspn_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS3_SaIS3_EEEEEixEl_ZNK10wxCStrDatacvPKwEv_ZNSt6vectorIlSaIlEE5eraseEN9__gnu_cxx17__normal_iteratorIPlS1_EES5_m_ll_ZNK8wxString13find_first_ofEPKcmm_ZN9__gnu_cxx13new_allocatorIiE9constructEPiRKitype_info_ZNKSt6vectorIlSaIlEE5frontEv_ZN9__gnu_cxx14__alloc_traitsISaIP11wxClassInfoEE10_S_on_swapERS3_S5__ZN8wxString7replaceENS_8iteratorES0_NS_14const_iteratorES1__SC_THREAD_ATTR_STACKADDRTrimwxBitmapType_ZNK8wxStringcvSsEv_ZNSt6vectorIPvSaIS0_EE6resizeEmS0__ZNK9__gnu_cxx13new_allocatorIPKvE8max_sizeEvIsSameAsstderr_ZN9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEEmIEl_ZNK12wxDataFormat11GetFormatIdEv_ZNSt6vectorIP12_GdkDrawableSaIS1_EE4backEv_ZNSt6vectorImSaImEE6insertEN9__gnu_cxx17__normal_iteratorIPmS1_EERKm_ZNKSt12_Vector_baseIcSaIcEE13get_allocatorEv_ZN6wxSize8SetWidthEi_ZN11wxFrameBase17PositionStatusBarEv_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE16_M_allocate_nodeERKS4_wxBORDER_NONEwxIMAGE_QUALITY_NEAREST_ZNK9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEE8max_sizeEv_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEEixEl_ZNSt6vectorIiSaIiEE6rbeginEv_ZNKSt6vectorIP12wxEvtHandlerSaIS1_EE2atEmwxID_EXECUTE_ZNSt12_Vector_baseI8wxStringSaIS0_EE11_M_allocateEmwxID_INDEX_ZNK29wxEventTableEntryPointerArray4ItemEm_ZNKSt6vectorIiSaIiEE4rendEv_ZNK16wxLongLongNativegeERKS___is_byte__is_normal_iterator_ZNKSt6vectorIdSaIdEEixEm_ZN8wxStringpLEPKcwxNORTH_SC_BC_STRING_MAX_ZN8wxStringpLEPKw_SC_2_PBS_MESSAGEwctype_ZNK9__gnu_cxx17__normal_iteratorIPKP9wxToolTipSt6vectorIS2_SaIS2_EEEixEl_ZN9__gnu_cxx17__normal_iteratorIPP12_GdkDrawableSt6vectorIS2_SaIS2_EEEmmEi_ZNSt6vectorIPKvSaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEmRKS1___is_normal_iterator_ZN22wxScopedCharTypeBufferIwE6DecRefEv_ZN9__gnu_cxx17__normal_iteratorIPP12_GdkDrawableSt6vectorIS2_SaIS2_EEEmmEvwxAcceleratorTablewxIMAGE_ALPHA_THRESHOLDkind_S_terminal__normal_iterator, std::allocator > >__alloc_traits >seekdir_ZN5wxAnyaSERKS_ldiv_tApp_PnlValue.cpp_SC_2_VERSION_ZSt11__addressofIP10wxMenuItemEPT_RS2_wcsstr_M_node_allocator_ZNKSt6vectorIP11wxClassInfoSaIS1_EE5emptyEvGetBaseClass1GetBaseClass2get_allocator_ZN12wxWindowBase20AlwaysShowScrollbarsEbb_ZN9__gnu_cxx14__alloc_traitsISaIPKvEE17_S_select_on_copyERKS3__ZNK9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS2_SaIS2_EEEmiElParseISOCombinedfailbitbadbitwxDF_RIFF_M_extract_ZNKSt6vectorIPK17wxEventTableEntrySaIS2_EE4dataEv_ZNK8wxStringixEi_ZNK8wxStringixEj_ZNK8wxStringixEl_ZNK8wxStringixEm_ZN9__gnu_cxx13new_allocatorIcE9constructEPcRKc_M_capacity_ZNK9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEEixElMakeOwnedCopyOfwxDF_METAFILEwxDF_OEMTEXT_ZNK9__gnu_cxx13new_allocatorIdE7addressERKd_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE3endEvwxID_FILEint_curr_symbol_ZN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEmmEipair, false, false>, bool>_ZN8wxString6appendERK22wxScopedCharTypeBufferIwE_ZN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEmmEv_ZN15wxHashTableBase7DestroyEvDoDelete_ZNK10wxDateTime8GetValueEv__is_normal_iterator<__gnu_cxx::__normal_iterator > > >FromUTF8wxFormatInvalidpair, false, false>, bool>_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE3endEv_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE3endEm_ZN9__gnu_cxx13new_allocatorIPK17wxEventTableEntryE8allocateEmPKv_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE3endEv__is_normal_iterator<__gnu_cxx::__normal_iterator > > >new_allocatorStartsWith_SC_2_SW_DEV_ZN9__gnu_cxx14__alloc_traitsISaIPK17wxEventTableEntryEE8max_sizeERKS4__ZN10wxTimeSpan3NegEv_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE12bucket_countEv_ZNSt4listIP10wxMenuItemSaIS1_EE6assignEmRKS1__ZNKSt6vectorIP12wxEvtHandlerSaIS1_EE5frontEv_ZNK17wxULongLongNativeneERKS__ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE19_M_deallocate_nodesEPPNSA_10_Hash_nodeIS4_Lb0EEEm_ZNSbIwSt11char_traitsIwESaIwEE5eraseEN9__gnu_cxx17__normal_iteratorIPwS2_EE__alloc_traits >_ZNK9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEEplElwxID_FIND_ZNSt6vectorIP12_GdkDrawableSaIS1_EE15_M_erase_at_endEPS1_EventHandlerwxFONTENCODING_CP12_MAX_ValuewxScopedWCharBuffer_ZNKSt3tr18__detail15_Hash_code_baseI8wxStringSt4pairIKS2_S2_ESt10_Select1stIS5_E13wxStringEqual12wxStringHashNS0_18_Mod_range_hashingENS0_20_Default_ranged_hashELb0EE12_M_hash_codeERS4__ZNKSt4listIP10wxMenuItemSaIS1_EE8max_sizeEv_ZNSt6vectorImSaImEE18_M_fill_initializeEmRKmwxEVT_MOUSE_CAPTURE_CHANGEDm_tzwxSOUTH_ZN8wxString6assignEPKwm_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS3_SaIS3_EEEEE4baseEv_ZNK9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEptEv__is_move_iterator<__gnu_cxx::__normal_iterator > > >wcslen__is_normal_iterator, false>**>_ZNKSbIwSt11char_traitsIwESaIwEE13find_first_ofERKS2_mSetNextHandlerArg_DoubleSetPreviousHandler_ZNKSt6vectorIsSaIsEE5beginEv_IO_read_ptr_ZNK9__gnu_cxx13new_allocatorIwE7addressERw__is_normal_iterator, false>**>_ZN17wxULongLongNativeaSERK16wxLongLongNative_ZNSt6vectorIcSaIcEE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPcS1_EEmRKc_ZN9__gnu_cxx17__normal_iteratorIPP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEEppEi_ZNSs7replaceEmmPKcm_ZN12wxWindowBase31GetMainWindowOfCompositeControlEv_ZN9__gnu_cxx17__normal_iteratorIPP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEEppEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS3_SaIS3_EEEEEpLEl_ZN9__gnu_cxx13new_allocatorIP12_GdkDrawableE9constructEPS2_RKS2_wcstombs_ZNK20wxHashTableBase_Node12GetKeyStringEvvfwscanf_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZNKSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE4rendEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS3_SaIS3_EEEEEmmEireverse_iterator_impl_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS3_SaIS3_EEEEEmmEv_ZNKSt3tr18__detail15_Hash_code_baseI8wxStringSt4pairIKS2_S2_ESt10_Select1stIS5_E13wxStringEqual12wxStringHashNS0_18_Mod_range_hashingENS0_20_Default_ranged_hashELb0EE13hash_functionEv_ZNK12wxUniCharRefcvmEv__is_pointer__is_move_iterator<__gnu_cxx::__normal_iterator > > >_SC_PHYS_PAGES_ZN7wxPointC2Eii_ZN8wxString6insertENS_8iteratorE9wxUniChartm_hour_S_fixedwxSHOW_EFFECT_NONE_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS3_SaIS3_EEEEEmmEiCanBeFocused_ZNK8wxString8iteratorgeERKS0__ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS3_SaIS3_EEEEEmmEv_ZNK8wxString4findERK22wxScopedCharTypeBufferIwEmm_ZN9__gnu_cxx13new_allocatorImE9constructEPmRKmSetMinuteIterOffsetInMBStr_ZNKSt6vectorIP12_GdkDrawableSaIS1_EE3endEv_ZN6wxSize5DecByERKS__ZNKSt6vectorIiSaIiEE14_M_range_checkEmnew_allocator_ZNSt4listIP10wxMenuItemSaIS1_EED2Ev_ZNSt12_Vector_baseIsSaIsEE12_Vector_impl12_M_swap_dataERS2_Assign_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE7reserveEm_ZN8wxStringaSERKS__ZNK10wxDateSpanmiERKS_Execute_ZN9__gnu_cxx17__normal_iteratorIPwSbIwSt11char_traitsIwESaIwEEEppEi_ZNKSt6vectorIP12_GdkDrawableSaIS1_EE5frontEv_ZNK9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEplEl_ZN13wxVariantData4ReadERSi_ZN9__gnu_cxx17__normal_iteratorIPwSbIwSt11char_traitsIwESaIwEEEppEv__alloc~wxFormatStringGetContentScaleFactor_ZN17wxCriticalSectionaSERKS__ZN9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEEppEi_ZNKSt6vectorIP12_GdkDrawableSaIS1_EEixEmwxPENSTYLE_SHORT_DASH__is_normal_iterator<__gnu_cxx::__normal_iterator > > >_ZNSs14_M_replace_auxEmmmc_ZN9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEEppEv_ZNK9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEptEv_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5beginEm_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5beginEvEEST__alloc_traits >m_containermbsrtowcs_ZNKSt20_List_const_iteratorIP10wxMenuItemEdeEvCreateObject_ZNKSt6vectorIP9wxToolTipSaIS1_EE12_M_check_lenEmPKcwxStaticBoxNameStr_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE8max_sizeEvallocator_ZNK14wxMenuItemList22compatibility_iteratorneERKS0_ExtraData_ZN9wxUniChar10FromHi8bitEc_ZN15wxLogRecordInfoC2EPKciS1_S1_appendnew_allocator_ZN8wxObjectaSERKS__IO_write_ptr_ZNK8wxString6ToUTF8Ev_ZNKSt3tr18__detail15_Hash_code_baseI8wxStringSt4pairIKS2_S2_ESt10_Select1stIS5_E13wxStringEqual12wxStringHashNS0_18_Mod_range_hashingENS0_20_Default_ranged_hashELb0EE10_M_compareERS4_mPNS0_10_Hash_nodeIS5_Lb0EEEbasic_string, std::allocator >_ZNSbIwSt11char_traitsIwESaIwEE4_Rep15_M_set_sharableEvCreateNonOwnedpairwxID_LAST_SC_FSYNC_ZN12wxEvtHandler15AddPendingEventERK7wxEventwxEventLoopBase_Hashtable_iteratorGetJDN_ZN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEmmEi_ZNSt6vectorIPKvSaIS1_EE4dataEv_ZN9__gnu_cxx17__normal_iteratorIPP12_GdkDrawableSt6vectorIS2_SaIS2_EEEpLEl_ZN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEmmEv_SC_2_PBS_TRACKm_destroyCanBeOutsideClientArea_ZNSt6vectorI8wxStringSaIS0_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EES6__ZNKSt6vectorIP12wxEvtHandlerSaIS1_EE3endEv_ZNK16wxLongLongNativeorERKS__ZNK17wxULongLongNative7asArrayEvwxBITMAP_TYPE_PNG_RESOURCEwxEvent_ZNK11wxClassInfo14const_iteratoreqERKS0__ZN8wxString7ReplaceERKS_S1_bwxPENSTYLE_LAST_HATCH_ZN9__gnu_cxx14__alloc_traitsISaIsEE10deallocateERS1_Psm_ZNK8wxString14const_iteratormiEl_M_prevHandlerImpl_ZNK20wxObjectEventFunctor12GetEvtMethodEv_ZNSt6vectorIPKvSaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEwcsftime_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS3_SaIS3_EEEEEplEl_ZNK8wxString16find_last_not_ofEPKwm_ZN10wxDateTime3SetERK2tmGMT10GMT11GMT12value_type_ZN10wxTimeSpanngEv_ZNKSt6vectorIdSaIdEE8capacityEv_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE13get_allocatorEv_ZNKSt6vectorIiSaIiEE4sizeEv_ZNSt6vectorIsSaIsEE15_M_erase_at_endEPswxFONTENCODING_ALTERNATIVE_ZNK12wxUniCharRefgtERK9wxUniCharwxControlContainerBase_ZN22wxScopedCharTypeBufferIwEC2ERKS0_From8BitData_ZN10wxDateTime15ParseRfc822DateERK10wxCStrData_ZNSt6vectorIPKvSaIS1_EE6insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1__ZN6wxSize5IncToERKS__ZNK10wxDateTime5ToGMTEb_ZN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEpLElwxlogcheck84_ZNK9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS1_SaIS1_EEEptEv_ZNKSt6vectorImSaImEE5beginEv_ZN22wxScopedCharTypeBufferIcEC2Ev__priorityGetValidator_ZNK8wxString3CmpERKS__ZN22wxControlContainerBase18SetContainerWindowEP8wxWindow__traitor, std::__is_pointer >_ZNSt3tr18__detail24_Hashtable_iterator_baseISt4pairIK8wxStringmELb0EE14_M_incr_bucketEv_ZNSt6vectorIsSaIsEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPsS1_EE__is_pointer_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE3endEm_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE3endEv_ZN19wxNavigationEnabledI8wxWindowE8AddChildEP12wxWindowBasenew_allocator_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE6assignEmRKS1_sprintfgoodbit_ZNKSs4_Rep12_M_is_sharedEv_ZNK14wxFormatString13InputAsStringEvArgumentType_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEESetExtraStyleMonday_First_ZNKSt6vectorI8wxStringSaIS0_EE4dataEv_ZN12wxWindowBase15SetThemeEnabledEb_ZN12wxUniCharRefaSEc_ZNSaIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS3_ELb0EEEED2Ev_ZN12wxUniCharRefaSEh_ZN12wxUniCharRefaSEi_ZN12wxUniCharRefaSEj_ZNK10wxDateTime9GetSecondERKNS_8TimeZoneE_ZNSt8__detail15_List_node_base9_M_unhookEv_ZN12wxUniCharRefaSEmwxMutexError_ZN12wxUniCharRefaSEs_ZN12wxUniCharRefaSEt_ZN12wxUniCharRefaSEw_ZN12wxUniCharRefaSEx_ZN12wxUniCharRefaSEy_ZNK8wxString17IterOffsetInMBStrERKNS_14const_iteratorEwxEventTypeTag__is_normal_iterator<__gnu_cxx::__normal_iterator > > >wxSHOW_SB_ALWAYS_ZN20wxMDIParentFrameBase9TryBeforeER7wxEventIndexnot_eof_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPK17wxEventTableEntrySt6vectorIS4_SaIS4_EEEEE4baseEvwxNavigationEnabled_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS3_SaIS3_EEEEEplEl_ZN11wxRealPointpLERK6wxSizethousands_sepwxCriticalSectionPosFromImplwxS_IROTH_ZNKSt6vectorImSaImEE3endEv_ZNK12wxUniCharRefgtERKS__ZN12wxWindowBase9PrepareDCER4wxDC_M_swap_data_ZN10wxDateTime3SetERKNS_2TmE_ZNSt6vectorImSaImEE2atEm_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS3_SaIS3_EEEEEpLElAsCharms_isSilent_ZN16wxLongLongNativemIERKS___is_normal_iterator<__gnu_cxx::__normal_iterator > > >_ZN8wxString7replaceEmmPKc_ZN9__gnu_cxx13new_allocatorIP26wxDateTimeHolidayAuthorityE9constructEPS2_RKS2_wxEventTypeTag__FILEwxVariant_ZN10wxDateTime7MakeGMTEb_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS3_SaIS3_EEEEEpLEl_ZN8wxThread6OnKillEv_ZN8wxString10ConvertStrEPKcmRK8wxMBConvwxID_NOTOALL_ZNSs7_M_leakEvwxS_IXGRP_ZNK16wxLongLongNativelsEiputwc_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE6key_eqEvextendstripTypeConvertYearToBC_ZNKSt6vectorIsSaIsEEixEm_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE13_M_erase_nodeEPNSA_10_Hash_nodeIS4_Lb0EEEPSH__ZN9__gnu_cxx24__numeric_traits_integerIlE5__maxE_ZNK20wxTopLevelWindowBase9IsVisibleEv_ZNK9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEEmiEl_ZNSt6vectorIPKvSaIS1_EE5beginEv_ZN9__gnu_cxx13new_allocatorIsE7destroyEPs_Hashtable_iterator, false, false>_ZNSt6vectorIP12_GdkDrawableSaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEmRKS1_scientific_ZNSt12_Vector_baseIlSaIlEE17_M_create_storageEm_ZNKSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE4sizeEv__alloc_traits >wxID_ADD_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE15_M_erase_at_endEPS2__ZNK9wxUniChargtEcwx_str_ZN10wxDateTime11ParseFormatERK8wxStringS2_PNS0_14const_iteratorEvector >__is_bytewxFONTENCODING_KOI8_U_ZN9__gnu_cxx13new_allocatorIwE8allocateEmPKv_ZN11wxClassInfo13end_classinfoEv_ZNSs13_S_copy_charsEPcPKcS1__ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE_ZNK7FrmMain13GetEventTableEvOSXSetModified_M_store_code_S_createwxID_NETWORKGetTitle_ZN8wxString6assignEPKc_ZN9__gnu_cxx17__normal_iteratorIPP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEEmmEi__normal_iterator > >_ZN7wxMutex4LockEv_ZN9__gnu_cxx13new_allocatorIsE9constructEPsRKswxID_HIGHEST_ZN9__gnu_cxx17__normal_iteratorIPP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEEmmEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS3_SaIS3_EEEEEmIEl_ZN8wxString6assignEPKw_ZNSbIwSt11char_traitsIwESaIwEE6assignEPKw_ZNSt12_Vector_baseIPvSaIS0_EE13_M_deallocateEPS0_mtitleallocator_ZSt4coutms_ulTraceMaskwxStringCharType_ZNKSt6vectorImSaImEEixEm_ZNK9__gnu_cxx13new_allocatorIP12wxEvtHandlerE7addressERS2__SC_LEVEL4_CACHE_ASSOC_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS3_SaIS3_EEEEEdeEv_ZNSt6vectorIcSaIcEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPcS1_EES5_m_longDouble_ZNK9wxUniChareqERKS_wxScopedCharTypeBuffer_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE8pop_backEv_ZN10wxDateTime15GetCurrentMonthENS_8CalendarE_ZN10wxDateTime8TimeZone4MakeElwxFONTENCODING_SHIFT_JIS_ZNKSt6vectorIP11wxClassInfoSaIS1_EE4sizeEv_ZNK11wxClassInfo14const_iteratordeEv_ZNK16wxLongLongNative6ToLongEvpoMenuHelp_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE9push_backERKS2_CreateClient_ZNK12wxWindowBase20ShouldInheritColoursEvoperator const wxEventType&_ZNK9wxUniChar9GetAsCharEPcGetWeeks_ZN8wxLogger11DoCallOnLogEmRK8wxStringP13__va_list_tag_ZNSt12_Vector_baseIP11wxClassInfoSaIS1_EE17_M_create_storageEmiterator_traits<__gnu_cxx::__normal_iterator > > >_ZN8wxString2atEm_ZN8wxString6appendERK22wxScopedCharTypeBufferIcEmIsOk_ZN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEpLElwxEVT_MIDDLE_DCLICK_S_oct_Vector_base >_ZNSt6vectorIcSaIcEE4rendEv_ZNK14wxEventTypeTagI12wxPaintEventEcvRKiEv_ZNKSt6vectorIP11wxClassInfoSaIS1_EE14_M_range_checkEm_ZN9__gnu_cxx17__normal_iteratorIPwSbIwSt11char_traitsIwESaIwEEEmmEi_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5eraseENSA_25_Hashtable_const_iteratorIS4_Lb0ELb0EEE_ZNK9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEmiEl_ZN9__gnu_cxx17__normal_iteratorIPwSbIwSt11char_traitsIwESaIwEEEmmEv_ZNK10wxCStrData10AsWCharBufEv_ZNKSt6vectorIdSaIdEE2atEm_ZNSt6vectorIPKvSaIS1_EEixEm_ZN9__gnu_cxx13new_allocatorISt10_List_nodeIP10wxMenuItemEEC2Ev_ZNK10wxDateTime9IsEqualToERKS__ZN17wxULongLongNativeeOERKS__ZN22wxScopedCharTypeBufferIcE4Data3SetEPcm_ZN9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEEmmEi_ZN9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEEppEvArg_LongIntPtr_ZN9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEEmmEv_IO_buf_basewxDefaultTimeSpanFormat_ZNSt6vectorI8wxStringSaIS0_EE4rendEvAfterFirst_ZNKSt6vectorIP12wxEvtHandlerSaIS1_EE4backEv_ZN11wxAnyStrPtraSERKS_wxBITMAP_TYPE_TGA_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE15__rehash_policyERKSD__ZNK10wxDateSpan8GetWeeksEv_ZN8wxString14const_iteratorppEilevelwxEVT_CHAR_HOOK_ZN8wxString6FormatERK14wxFormatString_ZN8wxString14const_iteratorppEv_ZNSt6vectorIsSaIsEE2atEm_ZN8wxString9MakeUpperEvwxEVT_INIT_DIALOG_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5clearEv_ZN12wxStringHash10stringHashEPKc_ZNSs4_Rep8_M_cloneERKSaIcEm_ZNK11wxFrameBase17IsClientAreaChildEPK8wxWindow_ZN9__gnu_cxx13new_allocatorIP12_GdkDrawableE8allocateEmPKv_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS2_SaIS2_EEEEE4baseEv_ZNKSs17find_first_not_ofEcm_SC_HOST_NAME_MAX_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE6bucketERS3_wxEventTypeTagiterator_traits<__gnu_cxx::__normal_iterator > > >_ZNKSt6vectorI8wxStringSaIS0_EE12_M_check_lenEmPKc__gnu_debugresize_ZNK9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS2_SaIS2_EEEptEv_ZNK8wxString6LengthEvIsFullySpecified_ZN10wxDateTime2Tm14ComputeWeekDayEvwxTHREAD_WAIT_DEFAULTrebind_ZNK9__gnu_cxx13new_allocatorIsE7addressERs_ZN9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEEppEiwxBITMAP_TYPE_TIF_ZNK9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS1_SaIS1_EEEmiEl_ZN9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEEppEvwxConvUTF7Ptr_ZN24wxWritableCharTypeBufferIcEcvPcEvGetRefCount_ZN9__gnu_cxx24__numeric_traits_integerIcE5__maxE_ZNKSbIwSt11char_traitsIwESaIwEE4_Rep12_M_is_leakedEv~wxEventTableEntryBase_ZN9__gnu_cxx17__normal_iteratorIPP12_GdkDrawableSt6vectorIS2_SaIS2_EEEmIEl_ZNK14wxAnyValueType11DeleteValueER16wxAnyValueBuffer_ZNK9__gnu_cxx17__normal_iteratorIP8wxStringSt6vectorIS1_SaIS1_EEE4baseEv_Vector_base<_GdkDrawable*, std::allocator<_GdkDrawable*> >wxID_FIRST_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE12bucket_countEv_ZNSt6vectorIsSaIsEE4backEv_ZNSs7replaceEmmRKSsmmUnregister_ZNSt12_Vector_baseIP11wxClassInfoSaIS1_EE13_M_deallocateEPS1_m_ZNK12wxWindowBase16GetWindowVariantEv_ZNK10wxDateTime12FromTimezoneERKNS_8TimeZoneEb__is_floating_ZNK17wxULongLongNativegeERKS__ZNSt4listIP10wxMenuItemSaIS1_EE10push_frontERKS1___traitor, std::__is_floating >allocatorwxNonOwnedWindowBase_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS3_SaIS3_EEEEEmiEl_ZNK12wxUniCharRefleEc_ZNK12wxUniCharRefleEh_ZNK12wxUniCharRefleEi_ZNK12wxUniCharRefleEj_ZNSbIwSt11char_traitsIwESaIwEE6appendEmw_ZNK12wxUniCharRefleEl_ZNK12wxUniCharRefleEmSetToNextWeekDay__is_arithmetic, false>*>_ZNK12wxUniCharRefleEs_ZNK12wxUniCharRefleEt_ZNK12wxUniCharRefleEw_ZNK12wxUniCharRefleEx_ZNK12wxUniCharRefleEywxID_ANY_ZNK9__gnu_cxx13new_allocatorIwE7addressERKw__are_same_M_check_equal_allocators_ZNK17wxULongLongNativegtEm__is_arithmetic<_GdkDrawable*>wxID_SELECTALL_ZNK8wxString9CompareToEPKwNS_11caseCompareEms_idMainThreadm_critSection_ZN29wxEventTableEntryPointerArray5AllocEm_ZNSt12_Vector_baseIPK17wxEventTableEntrySaIS2_EE19_M_get_Tp_allocatorEv_ZNK9__gnu_cxx13new_allocatorIP10wxMenuItemE8max_sizeEv_SC_MEMLOCK_RANGE_ZN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEmIElassign_ZN8wxString6assignERK10wxCStrDatamGetEventHandlerwxBRUSHSTYLE_TRANSPARENT_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EEaSERKSE__ZNKSt6vectorIlSaIlEE5emptyEv_SC_AIO_LISTIO_MAX_ZN9__gnu_cxx13new_allocatorIwE9constructEPwRKw_M_is_leaked_ZNSt11char_traitsIwE12to_char_typeERKjwxSHOW_EFFECT_ROLL_TO_BOTTOM__is_arithmetic, false>*>_ZN10wxDateTime9GetEndDSTEiNS_7CountryEGTKIsTransparentForMousewxBITMAP_TYPE_JPEG_ZNSt6vectorImSaImEE15_M_erase_at_endEPm_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE4findERS3_filename__SC_THREAD_THREADS_MAX_ZN11wxClassInfo8GetFirstEv_ZN20wxEventFunctorMethodI14wxEventTypeTagI14wxCommandEventE12wxEvtHandler7wxEventS3_E20CheckHandlerArgumentEPS4__SC_V7_ILP32_OFF32_ZNKSbIwSt11char_traitsIwESaIwEE5rfindERKS2_m_ZN9__gnu_cxx13new_allocatorINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEE7destroyEPS8__Vector_base >_ZNSt6vectorIP9wxToolTipSaIS1_EE5frontEvwxEvtHandlermodifiedIsGrabbedwxAppBase_ZNK17wxULongLongNativemlEm_ZNSt6vectorIcSaIcEE4swapERS1_TFalse_ZNKSs5rfindEPKcm_ZNK8wxString21reverse_iterator_implINS_14const_iteratorEEgtERKS2__ZNKSs16find_last_not_ofEPKcmm_ZNSt6vectorIP12_GdkDrawableSaIS1_EE18_M_fill_initializeEmRKS1__ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE18_M_fill_initializeEmRKS1__ZSt8for_eachISt14_List_iteratorIP10wxMenuItemEPFvS2_EET0_T_S7_S6_Sunday_First_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEixEl_ZNK12wxWindowBase7GetNameEv_ZNK9__gnu_cxx17__normal_iteratorIPP11wxClassInfoSt6vectorIS2_SaIS2_EEEplEl__is_normal_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt6vectorIP12_GdkDrawableSaIS1_EE8pop_backEv_ZN9__gnu_cxx17__normal_iteratorIPP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEEpLElwxID_HELP_PROCEDURESAKDTfwscanf_ZNSt4listIP10wxMenuItemSaIS1_EE6spliceESt14_List_iteratorIS1_ERS3_S5_S5_operator bool_ZN9wxPrivate11HandlerImplI12wxEvtHandler7wxEventLb1EE21ConvertFromEvtHandlerEPS1_GetWeekOfMonth_ZNK29wxEventTableEntryPointerArray5IndexEPK17wxEventTableEntryb_ZNSt6vectorIPKvSaIS1_EE6rbeginEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12_GdkDrawableSt6vectorIS3_SaIS3_EEEEEmIEl_Hash_code_base, std::_Select1st >, wxStringEqual, wxStringHash, std::tr1::__detail::_Mod_range_hashing, std::tr1::__detail::_Default_ranged_hash, false>IncTo_ZN16wxLongLongNativedVEl_SC_TTY_NAME_MAXm_objectSizereverse_iterator<__gnu_cxx::__normal_iterator > > >_ZNK8wxString8max_sizeEv__normal_iterator > >_ZNK5wxAnyeqERK8wxStringfind_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS3_SaIS3_EEEEEmIEl_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EEixEmclient_ZNK8wxString6wc_strEvSetCount_ZN22wxScopedCharTypeBufferIcE15MakeOwnedCopyOfERKS0_wxSHOW_EFFECT_ROLL_TO_LEFT_ZN9__gnu_cxx14__alloc_traitsISaIsEE7destroyERS1_Ps_ZN16wxCharTypeBufferIcEaSEPKcwxID_ZOOM_FITtext_ZN7FrmMainD0Evleft_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE14_M_fill_assignEmRKS1__ZN10wxDateTime12MakeTimezoneERKNS_8TimeZoneEb_S_badbitm_hashPtr_ZN9__gnu_cxx17__normal_iteratorIPwSbIwSt11char_traitsIwESaIwEEEpLEl_S_showbase_ZNKSt6vectorIP9wxToolTipSaIS1_EE3endEv_ZN9__gnu_cxx14__alloc_traitsISaIsEE8max_sizeERKS1__ZN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEppEi_ZN10wxDateTime10GetCountryEv_ZN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEppEv__is_move_iterator_ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwmwxDirection_ZNK9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS2_SaIS2_EEEmiEl__is_pointerwxBORDER_THEME_ZN9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEEpLEl_ZNK8wxString8iteratoreqERKS0__ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE11equal_rangeERS3__ZNSsaSERKSs_ZNK8wxString13find_first_ofERK22wxScopedCharTypeBufferIcEm_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE3endEmreverse_iterator<__gnu_cxx::__normal_iterator<_GdkDrawable**, std::vector<_GdkDrawable*, std::allocator<_GdkDrawable*> > > >_ZNSt6vectorIPKvSaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7__ZN8wxLogger10MaybeStoreERK8wxStringmGetPropagatedFromwxDOWN_ZNSt6vectorIP9wxToolTipSaIS1_EEixEm_ZNSt6vectorIiSaIiEE18_M_fill_initializeEmRKiwxBITMAP_TYPE_MAX_ZNSt6vectorIP9wxToolTipSaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEwxStaticTextNameStr_SC_ATEXIT_MAX_ZNK9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEEptEv__is_normal_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE9_M_insertERKS4_NS_17integral_constantIbLb0EEE_ZN9__gnu_cxx14__alloc_traitsISaIP26wxDateTimeHolidayAuthorityEE10_S_on_swapERS3_S5_CreateForString_ZN13wxVariantData17GetValueClassInfoEv_SC_IPV6_ZNK14wxMenuItemList22compatibility_iteratoreqERKS0__SC_TRACE_SYS_MAX_ZNSt6vectorIcSaIcEE9push_backERKc_ZNK12wxDataFormatneE14wxDataFormatId_ZN8wxLogger8LogTraceERK8wxStringRK14wxFormatString_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE9_M_insertERKS4_NS_17integral_constantIbLb1EEE_ZN19wxNavigationEnabledI8wxWindowE24SetFocusIgnoringChildrenEv_ZNK9__gnu_cxx17__normal_iteratorIPP12_GdkDrawableSt6vectorIS2_SaIS2_EEEixElwxBOTTOMGetLastMonthDaywxID_BOLD_ZNK8wxString3LenEv_ZNSt6vectorIiSaIiEE3endEv_ZNK8wxString9SubStringEmm_ZNSt6vectorIPvSaIS0_EE6rbeginEv_ZN9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS1_SaIS1_EEEppEv_S_out_ZN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEmIEl_ZNK10wxTimeSpanplERKS_wxRefCounter_ZN9__gnu_cxx13new_allocatorISt10_List_nodeIP10wxMenuItemEE9constructEPS4_RKS4__ZNSbIwSt11char_traitsIwESaIwEE7replaceEN9__gnu_cxx17__normal_iteratorIPwS2_EES6_PKwmt_strwxBorderwxFONTENCODING_MACKEYBOARDwxID_SELECT_COLOR_ZNSt6vectorIdSaIdEE15_M_erase_at_endEPdwxID_STRIKETHROUGHm_nextwxAppInitializer_ZN10wxDateTime10GetTimeNowEv_ZN9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEEmmEi_ZN8wxStringpLEcwxInitDialogEvent_ZN12App_PnlValue6OnInitEvms_bRepetCounting_ZN8wxStringpLEh_ZN8wxStringpLEi__normal_iterator > >_ZN9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEEmmEv_ZN8wxStringpLEwiterator_traits<_GdkDrawable**>_ZN16wxLongLongNativeeOERKS__ZNSs12_M_leak_hardEv_ZNK17wxULongLongNativeorERKS__ZN8wxString14const_iteratormmEi_ZNK10wxDateTimemiERKS_ms_appInitFn_ZN8wxString14const_iteratormmEv~basic_stringwint_tm_data_ZNSt12_Vector_baseImSaImEE13_M_deallocateEPmmiterator__is_floating, false>*>_ZNSt12_Vector_baseImSaImEE12_Vector_impl12_M_swap_dataERS2_A_ESSTwxNcPaintEventoperator const CharType*signed char_ZNK9__gnu_cxx17__normal_iteratorIPPvSt6vectorIS1_SaIS1_EEEdeEv_ZNK16wxLongLongNativeleERKS_Lock_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKc_Hashtable_iterator_base_ZNSt6vectorIPvSaIS0_EE8pop_backEv_ZN9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEEmmEi_S_hex_M_move_ZNK8wxString7IsAsciiEv_ZNK8wxString5IndexE9wxUniChar_ZNKSt6vectorIcSaIcEE6rbeginEvwxMessageBoxCaptionStrwxBORDER_SUNKEN_ZN9__gnu_cxx14__alloc_traitsISaIPK17wxEventTableEntryEE8allocateERS4_m_ZNKSt6vectorIsSaIsEE4dataEvm_rebuildHash_ZN8wxStringpLE9wxUniChar_ZNK12wxUniCharRefgeEh__alloc_traits >wxEVT_MOVE_ZNSt11char_traitsIwE11eq_int_typeERKjS2__ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmwwxFD_SAVEMakeFromTimezonewxEventTypeTagwxEVT_AUX2_DOWNGetTypeSetTypeMakeFromUTC_Result_ZNK10wxDateTime6GetMJDEvwxBRUSHSTYLE_INVALIDDoUnlinkNode_ZNKSt6vectorIcSaIcEE4backEv_ZNK20wxObjectEventFunctor13GetEvtHandlerEv_ZN12wxEvtHandler10QueueEventEP7wxEvent__pad1__pad2__pad3__pad4__pad5_ZN9__gnu_cxx13new_allocatorISt10_List_nodeIP10wxMenuItemEE8allocateEmPKv_ZNKSt6vectorImSaImEE8max_sizeEv_ZN17wxULongLongNativemLERKS_wxFontEncoding_ZNK11wxAnyStrPtrcvPKcEv__normal_iterator > >__off64_t_ZNKSt3tr18__detail25_Hashtable_const_iteratorISt4pairIK8wxStringS3_ELb0ELb0EEdeEvwxLogLevelValuesPrintfVLogV_ZNK10wxTimeSpan7GetDaysEv__is_normal_iterator, false>**>wxID_JUMP_TO_ZNK8wxString4FindEPKcwxEVT_QUERY_NEW_PALETTE_ZN8wxString6appendEPKwS1__ZN6wxSizepLERKS___is_normal_iteratorunary_function, const wxString>wxMUTEX_INVALIDFirst_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_NS0_IPKcSsEES5__ZNSt12_Vector_baseIP12wxEvtHandlerSaIS1_EE13_M_deallocateEPS1_m_ZNK8wxString8iteratorgeERKNS_14const_iteratorEwxFONTENCODING_GB2312_ZNSs7replaceEmmPKcAKSTMakeUTC_ZNK17wxULongLongNativedvERKS__ZN8wxString9MakeLowerEvstringmbrlen_ZNKSt12_Vector_baseIlSaIlEE19_M_get_Tp_allocatorEv_ZN9__gnu_cxx13new_allocatorIcE8allocateEmPKv_ZN10wxDateTime21GetEnglishWeekDayNameENS_7WeekDayENS_9NameFlagsEwxMutexTypebaseTable_ZNK8wxString15ConvertedBufferIcE14AsScopedBufferEv_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEEEEppEi_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEEEEppEv_ZN9__gnu_cxx13new_allocatorIP10wxMenuItemE10deallocateEPS2_mSetToCurrent_SC_THREAD_CPUTIMEErase__is_floating_ZN16wxEventHashTable18GrowEventTypeTableEv_ZN16wxLongLongNativemIExwxBITMAP_TYPE_GIF_RESOURCEwxDF_ENHMETAFILEwxCSConv_Pointer_SC_PII_INTERNET_ZNK10wxTimeSpan13IsShorterThanERKS__ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS3_SaIS3_EEEEEplEl__gnu_cxx_ZN8wxString9LenToImplEm_ZN10wxTimeSpan4WeekEvIsInStdRange_ZNK15wxLogRecordInfo11GetNumValueERK8wxStringPm_ZNKSbIwSt11char_traitsIwESaIwEE5beginEv_ZNSt4pairIK8wxStringS0_ED2Ev_M_find_node_ZNK9__gnu_cxx17__normal_iteratorIPP11wxClassInfoSt6vectorIS2_SaIS2_EEEmiEl_ZN9__gnu_cxx17__normal_iteratorIPP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEEmIEl_ZN29wxEventTableEntryPointerArray3AddEPK17wxEventTableEntryPFiPS2_S3_EYearKind_IO_marker_Map_base, std::_Select1st >, true, std::tr1::_Hashtable, std::allocator >, std::_Select1st >, wxStringEqual, wxStringHash, std::tr1::__detail::_Mod_range_hashing, std::tr1::__detail::_Default_ranged_hash, std::tr1::__detail::_Prime_rehash_policy, false, false, true> >_ZN16wxCharTypeBufferIwEaSERK22wxScopedCharTypeBufferIwE_ZNK9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEptEv_ZNK9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS2_SaIS2_EEEplEl_ZNSt4listIP10wxMenuItemSaIS1_EE6insertESt14_List_iteratorIS1_EmRKS1__ZN16wxLongLongNativeaSEi_ZN16wxLongLongNativeaSEj_ZN16wxLongLongNativeaSEl_ZN16wxLongLongNativeaSEmwxMenuItemParseDateTimem_critsectchar_type_ZN16wxLongLongNativeaSEx_ZN16wxLongLongNativeaSEywxScrollbarVisibility__is_integer, false>*>wxBORDER_DEFAULT_ZN12App_PnlValueD0Ev_ZNSt6vectorIPK17wxEventTableEntrySaIS2_EE6resizeEmS2__ZN9__gnu_cxx17__normal_iteratorIPP11wxClassInfoSt6vectorIS2_SaIS2_EEEpLEl_ZNK8wxString3CmpERK10wxCStrData_ZN8wxString8TruncateEm_ZNK9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEEdeEv__is_move_iterator<__gnu_cxx::__normal_iterator > > >_ZNK8wxWindow14GTKNeedsParentEv_SC_XBS5_ILP32_OFFBIGms_appInstance_ZNK9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEE4baseEv_ZNSt6vectorIP12_GdkDrawableSaIS1_EE9push_backERKS1__ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEE4baseEv_ZNK10wxDateTime13GetWeekOfYearENS_9WeekFlagsERKNS_8TimeZoneE_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5beginEm_ZNSt10_List_baseIP10wxMenuItemSaIS1_EEC2EvwxNullBitmap_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5beginEv_ZN9__gnu_cxx14__alloc_traitsISaIiEE17_S_select_on_copyERKS1_wxID_SPELL_CHECKwxFONTENCODING_VIETNAMESE_ZNKSt3tr18__detail15_Hash_code_baseI8wxStringSt4pairIKS2_S2_ESt10_Select1stIS5_E13wxStringEqual12wxStringHashNS0_18_Mod_range_hashingENS0_20_Default_ranged_hashELb0EE13_M_store_codeEPNS0_10_Hash_nodeIS5_Lb0EEEm__is_byte_ZNK16wxLongLongNative5GetLoEvwxEventTypeTag_ZN9__gnu_cxx17__normal_iteratorIPwSbIwSt11char_traitsIwESaIwEEEmIElm_time_ZNK10wxDateTime10FormatTimeEvwxTrackerNode_ZNK15wxLogRecordInfo11GetStrValueERK8wxStringPS0__ZN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEmmEi_SC_SHARED_MEMORY_OBJECTS_ZN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEmmEv_ZNKSt6vectorIPKvSaIS1_EE12_M_check_lenEmPKc_ZN11wxRealPointmIERK6wxSize_ZNSt6vectorIP12wxEvtHandlerSaIS1_EEaSERKS3_wxID_BOTTOM_ZNK9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS1_SaIS1_EEEptEv_ZN9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS2_SaIS2_EEEmIEl_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEEplEl_ZNSt6vectorIiSaIiEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EE_ZNK12wxUniCharRefltEcwxFONTENCODING_KOI8_ZNK12wxUniCharRefltEh_ZNK12wxUniCharRefltEi_ZNK12wxUniCharRefltEj_ZN10wxDateTime13ParseDateTimeEPKc_ZNK12wxUniCharRefltEl_ZNK12wxUniCharRefltEm_ZNK12wxUniCharRefltEs_ZNK12wxUniCharRefltEt_ZNK12wxUniCharRefltEw_ZNK12wxUniCharRefltEx_ZNK12wxUniCharRefltEy_ZNK9wxUniCharcvxEv_ZN10wxDateTime13ParseDateTimeEPKw_ZNK8wxString7compareEPKcGMT_1GMT_2GMT_3GMT_4GMT_5GMT_6GMT_7GMT_8HandlerImpl_ZN8wxString14const_iteratorpLElF_OWNER_TID_ZNK8wxString7mbc_strEv_ZNK8wxString7compareEPKw_SC_THREAD_PRIO_PROTECTwxNavigationKeyEvent_ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5countERS3__ZN7wxMutexaSERKS__ZNSs6assignEPKcm_ZNKSbIwSt11char_traitsIwESaIwEE7compareERKS2_clearwxID_MOREpair_ZN9__gnu_cxx13new_allocatorIPKvE8allocateEmS2__ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS3_SaIS3_EEEEEptEv_ZNKSt6vectorImSaImEE6rbeginEvwxS_DIR_DEFAULTwxID_MDI_WINDOW_NEXT_ZNSt12_Vector_baseIPvSaIS0_EE17_M_create_storageEmwcstod_ZN9__gnu_cxx13new_allocatorINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS5_ELb0EEEE7destroyEPS8_wcstofwcstokwcstol_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE7reserveEm_ZNSaISt4pairIK8wxStringmEEC2INSt3tr18__detail10_Hash_nodeIS2_Lb0EEEEERKSaIT_E__are_same_ZNK14wxEventTypeTagI23wxSysColourChangedEventEcvRKiEv_ZNSt6vectorIdSaIdEE4rendEvwxBITMAP_TYPE_ICON_ZN9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEEpLElwxEVT_PAINTPosLenToImpl_ZN9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS1_SaIS1_EEEmmEirebind_ZN9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS1_SaIS1_EEEmmEv_ZNK11wxFrameBase10GetToolBarEvwxID_EDITStoreValue_ZNK14wxEventTypeTagI20wxNavigationKeyEventEcvRKiEvwxMUTEX_UNLOCKED_ZN9__gnu_cxx13new_allocatorI8wxStringE9constructEPS1_RKS1__ZNKSs16find_last_not_ofEcm_ZNKSt12_Vector_baseIsSaIsEE19_M_get_Tp_allocatorEvwxIconizeEvent_ZN20wxEventFunctorMethodI14wxEventTypeTagI14wxCommandEventE12wxEvtHandler7wxEventS3_EclEPS3_RS4__ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEvm_mFuncPtrwxDC_ZNSt6vectorIdSaIdEE8pop_backEv_IO_write_base_SC_REGEXP_M_rehash_ZN8wxString6appendERK10wxCStrDataS2__ZNK17wxULongLongNativermEm_ZNKSt6vectorIP12wxEvtHandlerSaIS1_EEixEm_ZNK9__gnu_cxx13new_allocatorIPKvE7addressERKS2__ZNKSbIwSt11char_traitsIwESaIwEE8max_sizeEv_ZN8wxString7replaceENS_8iteratorES0_RKS__ZNSt6vectorIP12_GdkDrawableSaIS1_EEaSERKS3__ZNSt6vectorIsSaIsEE6insertEN9__gnu_cxx17__normal_iteratorIPsS1_EEmRKs_ZNKSt10_Select1stISt4pairIK8wxStringmEEclERKS3__ZNK9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS5_ELb0EEEE7addressERS9_SetToPrevWeekDay_ZNSt6vectorImSaImEE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPmS1_EEmRKm_ZNK8wxString8iteratoreqERKNS_14const_iteratorE_ZNSbIwSt11char_traitsIwESaIwEE6insertEmmw_ZNK22wxScopedCharTypeBufferIwE4dataEv_ZNKSt4listIP10wxMenuItemSaIS1_EE6rbeginEv_SC_SPIN_LOCKS__normal_iterator > >_SC_GETPW_R_SIZE_MAX_ZNK16wxLongLongNativermERKS__ZN7FrmMain7OnHelloER14wxCommandEvent_ZNSt12_Vector_baseIiSaIiEE19_M_get_Tp_allocatorEv_ZNSt6vectorIPKvSaIS1_EE9push_backERKS1___is_byte, false>*>_SC_PII_INTERNET_STREAMwxEVT_RIGHT_UPToDouble_ZNKSt6vectorIPKvSaIS1_EE6rbeginEv_ZN16wxLongLongNativelSEi_ZNSt6vectorIP9wxToolTipSaIS1_EE4backEv_ZN10wxDateTime13ParseDateTimeERK10wxCStrDatacomponent__ZNKSt12_Vector_baseIPKvSaIS1_EE13get_allocatorEv_ZNK8wxString21reverse_iterator_implINS_8iteratorEE4baseEv_ZNKSt6vectorIcSaIcEE5emptyEvwxID_RESIZE_FRAME_ZNKSt12_Vector_baseIP11wxClassInfoSaIS1_EE19_M_get_Tp_allocatorEvwxTheAppInitializer_ZNSt12_Vector_baseIlSaIlEE12_Vector_impl12_M_swap_dataERS2__ZN20wxMDIParentFrameBase13SetWindowMenuEP6wxMenuwxFONTENCODING_MACMAX_ZNSt12_Vector_baseIP12wxEvtHandlerSaIS1_EE17_M_create_storageEm_SC_NZERO_ZN6wxSize5DecToERKS_AcceptsFocusitor_ZN8wxStringlsERK22wxScopedCharTypeBufferIcE_ZNK20wxEventFunctorMethodI14wxEventTypeTagI14wxCommandEventE12wxEvtHandler7wxEventS3_E10IsMatchingERK14wxEventFunctor_S_left__alloc_traits >mapped_type_ZN18wxControlContainerD0Evvalue_ZNK12wxUniCharRefltERKS_wxLogRecordInfo_ZNKSbIwSt11char_traitsIwESaIwEE6_M_repEv_ZN8wxLogger12DoLogWithNumElPKwz_ZNK16wxHashTable_Node7GetDataEv_ZNK8wxString10To8BitDataEvwxID_NOPrintfwxMouseCaptureChangedEvent_ZN10wxDateTime2Tm10GetWeekDayEvthreadId_ZN11wxPanelBaseD2Ev__traitor, std::__is_floating >Country_WesternEurope_End_ZNSt6vectorIdSaIdEE6resizeEmdMakeTimezoneAddMonthswxS_IXOTHSetInitializerFunction_ZNK9__gnu_cxx13new_allocatorIwE8max_sizeEv_ZNKSt6vectorIP12_GdkDrawableSaIS1_EE8max_sizeEvreverse_iterator<__gnu_cxx::__normal_iterator > > >p_sign_posn_ZNK9__gnu_cxx17__normal_iteratorIPKPKvSt6vectorIS2_SaIS2_EEEptEv_ZNSt6vectorIP9wxToolTipSaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EES7_CopyBuffer_ZNKSt3tr18__detail18_Mod_range_hashingclEmmwxID_OK_ZNSt6vectorIPKvSaIS1_EE14_M_fill_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EEmRKS1_rand_ZNSt11char_traitsIcE2eqERKcS2___is_move_iterator<__gnu_cxx::__normal_iterator > > >_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS2_SaIS2_EEEEEppEi_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKPvSt6vectorIS2_SaIS2_EEEEEppEvm_convertedWChar_ZN15wxHashTableBase12DoInsertNodeEmP20wxHashTableBase_NodewxID_MDI_WINDOW_ARRANGE_ICONS_SC_GETGR_R_SIZE_MAXfixedwxStringToNumHashMap_ZNK12wxUniCharRefgeEc_ZNK16wxLongLongNativersEi_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEEEEmmEi_ZNK12wxUniCharRefgeEi_ZNK12wxUniCharRefgeEj_ZNK12wxUniCharRefgeEl_ZNK12wxUniCharRefgeEm_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE5clearEv_ZNSt11char_traitsIcE3eofEv_ZNK12wxUniCharRefgeEs_ZNK12wxUniCharRefgeEt_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEEEEmmEv_ZNK12wxUniCharRefgeEw_ZNK12wxUniCharRefgeEx_ZNK12wxUniCharRefgeEynew_allocator, false> >ToULong~wxMutexwxDefaultSize_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE4backEv_ZN8wxLogger10DoLogTraceERK8wxStringPKwz_ZN9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS2_SaIS2_EEEppEiDoDestroyNode_ZN9__gnu_cxx17__normal_iteratorIPKP11wxClassInfoSt6vectorIS2_SaIS2_EEEppEvwxDF_MAX_ZN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEpLEl_ZN9__gnu_cxx13new_allocatorIP11wxClassInfoE8allocateEmPKv_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKP26wxDateTimeHolidayAuthoritySt6vectorIS3_SaIS3_EEEEEmiEl_ZN15wxHashTableBase5DoPutERK8wxStringlPvrebind_ZN10wxDateSpan8SetYearsEi_SC_THREAD_STACK_MIN_ZNK29wxEventTableEntryPointerArray8GetCountEv_ZN29wxEventTableEntryPointerArray5ClearEvEntry_ZN9__gnu_cxx14__alloc_traitsISaImEE7destroyERS1_Pm_ZNK10wxCStrDataixEi_ZNK10wxCStrDataixEj_ZNK10wxCStrDataixEl_ZNK10wxCStrDataixEm_ZNSt12_Vector_baseIPvSaIS0_EE19_M_get_Tp_allocatorEvwxID_ZOOM_100_ZN9__gnu_cxx13new_allocatorIP9wxToolTipE8allocateEmPKvwcrtomb_ZNK8wxString4rendEvwxPENSTYLE_VERTICAL_HATCHwxLEFT_ZNSt6vectorIP26wxDateTimeHolidayAuthoritySaIS1_EE9push_backERKS1__ZNK9__gnu_cxx17__normal_iteratorIPKP12wxEvtHandlerSt6vectorIS2_SaIS2_EEEmiElpointerFromUTF8Unchecked_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEEppEi_ZNSt6vectorImSaImEEixEm_ZNSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEEppEv_ZNSspLEcPrepend_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcS4_wxEVT_NULL_ZN9__gnu_cxx14__alloc_traitsISaIP12_GdkDrawableEE10_S_on_swapERS3_S5_UntypedBufferDatauppercase_ZN8wxString6AppendE12wxUniCharRefm_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIPKcSsEES4_wxWritableWCharBuffer_ZNK8wxString17find_first_not_ofERK22wxScopedCharTypeBufferIcEm_ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE6insertERKS4_bucket_count_Hash_code_base_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS2_SaIS2_EEEEEdeEv_ZNKSt6vectorIcSaIcEEixEm_ZN9__gnu_cxx17__normal_iteratorIPK8wxStringSt6vectorIS1_SaIS1_EEEpLEl_ZN9__gnu_cxx13new_allocatorISt10_List_nodeIP10wxMenuItemEE7destroyEPS4_vector >wxFONTENCODING_MACMINwxBrushStylemday_ZNKSt6vectorIP11wxClassInfoSaIS1_EE8max_sizeEv_ZN9wxUniChar8From8bitEc_M_next_resize_ZN11wxClassInfo9FindClassERK8wxStringm_baseInfo1m_baseInfo2_ZN8wxString15ConvertedBufferIcEC2EvwxID_UPDoLogTraceMask_ZN6wxSize5DecByEiiInv_WeekDay__int128_ZNSt6vectorIP12_GdkDrawableSaIS1_EE5clearEv_ZN15wxHashTableBase14DeleteContentsEb_ZNK9__gnu_cxx17__normal_iteratorIPP12_GdkDrawableSt6vectorIS2_SaIS2_EEEmiElwxID_ITALIC_ZNSt6vectorImSaImEE4dataEv_ZNK13wxVariantData2EqERS_LenToImpl_ZNK12wxWindowBase12AcceptsFocusEvCallOnInit_ZN10wxDateTime2Tm9AddMonthsEi_ZN9__gnu_cxx17__normal_iteratorIPKsSt6vectorIsSaIsEEEmIEl_ZNKSt16reverse_iteratorIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEEmiEl_ZNKSbIwSt11char_traitsIwESaIwEE6rbeginEv_ZNSbIwSt11char_traitsIwESaIwEEpLERKS2__ZNK9__gnu_cxx17__normal_iteratorIPPK17wxEventTableEntrySt6vectorIS3_SaIS3_EEE4baseEvIndexForInsertwxHashTableBase_ZNSt6vectorIP12wxEvtHandlerSaIS1_EE2atEm_ZNK10wxTimeSpanmlEi_Node_iterator, false, false>_ZNK12wxDataFormatcvP8_GdkAtomEv__is_move_iterator<__gnu_cxx::__normal_iterator > > >wxS_DEFAULT_ZNSt6vectorIPvSaIS0_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS0_S2_EE_ZNK16wxHashTable_Node7GetNextEv_ZN8wxString14const_iteratormIElGCC: (GNU) 4.9.0 20140507 (prerelease)zRx (A†C c <DA†C  \)A†C d |%A†C ` zPLRx $$›A†C Eƒ‘ äA†C U A†C W $A†C U $¬vA†C Eƒl l*A†C e Œ*A†C e ¬5A†C p $4¶A†C Eƒ¬ $\~A†C Eƒt 3A†C n $¤qA†C Eƒg d3A†C n „A†C U ¤A†C U ÄA†C U äA†C U ,A†C g $A†C X D/A†C j d A†C E „ A†C E ¤ A†C E  Ä„A†C Eƒz èuA†C p A†C U (A†C U $°LA†C EƒB p1A†C Eƒg  A†C [ $•A†C GŒƒ‰ $@„A†C Eƒz 5A†C p $ˆûA†C Hƒî $°}A†C Eƒs p1A†C l #A†C ^ °#A†C ^ Ð/A†C j ðA†C T 0A†C k 00A†C k PA†C P púA†C õ A†C M °A†C Q ÐA†C L ðA†C M §A†C ¢ 0:A†C u PIA†C D pA†C U A†C U  °LA†C EƒB ÔA†C N ô%A†C ` ”A†C  4'A†C b TA†C I tA†C I ” A†C E ´A†C P Ô A†C H ôA†C J  A†C P 4 A†C N T A†C H t A†C J ” A†C Y ´ ,A†C g Ô 0A†C k ô A†C O  GA†C B 4 WA†C R  T \A†C EƒR  x \A†C EƒR œ .A†C i ¼ 4A†C o  Ü QA†C EƒG  QA†C EƒG  $ jA†C Eƒ` H A†C X h A†C J ˆ A†C E ¨ ,A†C g È 2A†C m è A†C [  A†C U ( A†C X H A†C P h &A†C a ˆ A†C X ¨ A†C X È A†C P è 'A†C b  A†C J ( 'A†C b H 'A†C b h GA†C B ˆ A†C N ¨ A†C P È -A†C h è A†C P )A†C d (,A†C g HA†C U hA†C I ˆ2A†C m ¨A†C J ÈA†C J èA†C O A†C M (A†C P HA†C O hA†C J ˆA†C I ¨ A†C E ÈA†C J èA†C J A†C J (A†C I HA†C J hA†C J ˆA†C L ¨A†C M ÈA†C M è%A†C ` ,A†C g (0A†C k HA†C P hA†C J ˆA†C J ¨*A†C e ÈEA†C @ è.A†C i &A†C a (}A†C x HFA†C A hA†C U ˆLA†C G ¨&A†C a È%A†C ` è:A†C u &A†C a $‰A†C EƒU.j PA†C P p A†C E A†C J °A†C J ÐA†C J ð'A†C b A†C X 0A†C P PA†C I p7A†C r A†C P °0A†C k Ð2A†C m ð6A†C q A†C P 0A†C P PA†C P pA†C P \A†C W ° A†C E Ð A†C E ð A†C E $x”A†C Eƒ`.j 8(A†C c XA†C U x"A†C ]  ˜WA†C EƒM  $HA†C Eƒ~ $H¨A†C Eƒž  eA†C Eƒ[ $”ªA†C Eƒ  $¼^A†C EƒT |A†C P œA†C X ¼gA†C b Ü A†C E ü A†C H  A†C E <%A†C ` \%A†C ` $äHA†C GŒƒ|  ¤þA†C Eƒô ÈA†C J èA†C J A†C U ($A†C _ H A†C F h1A†C l $ðKA†C CŒƒC (æA†C KŽŒƒÖ 4D¥A†C JŒƒo.k.¡.W.D #A†C ^ $œ¥A†C Eƒ› $ÄTA†C EƒJ $ìhA†C JŒƒY ¬A†C U ÌA†C U $T’A†C Eƒˆ A†C U 4A†C U T,A†C g tA†C X ”A†C P ´A†C U ÔA†C X ôA†C U $|oA†C Eƒe $¤oA†C Eƒe dA†C U „A†C U $ LA†C EƒB ÌA†C I ìA†C W  %A†C ` $”…A†C Eƒ{ T%A†C ` t"A†C ] ”A†C P ´A†C Z Ô(A†C c ôA†C U A†C U  œHA†C Eƒ~ XWA†C R x&A†C a ˜A†C I $ lA†C GŒƒ` àA†C U  tA†C Eƒj $0A†C k D A†C F dA†C U  „tA†C Eƒj ¨ A†C F È>A†C Eƒt èA†C L  A†C E ( A†C E H A†C U h 9A†C t ˆ TA†C O ¨ A†C U È 9A†C t è TA†C O ! A†C E (! A†C E H!A†C T h!&A†C a ˆ!A†C U  ¨!’A†C Eƒˆ Ì!!A†C \ ì! A†C E $t!÷A†C Eƒí 4" A†C E T"“A†C Ž t"A†C Y ”"A†C U ´""A†C ] Ô" A†C E ô"“A†C Ž #A†C Y 4#A†C U T#"A†C ] $Ü"‚A†C Eƒx $#‚A†C Eƒx Ä#-A†C h ä#"A†C ] $-A†C h $$"A†C ] D$1A†C l d$ A†C E „$4A†C o ¤$A†C U Ä$A†C I ä$A†C I %*A†C e $% A†C F D% A†C E d% A†C E „% A†C E ¤% A†C E Ä% A†C E ä%A†C Y &A†C Y $&A†C Y D&A†C Y d&A†C U „&A†C I ¤&A†C Y Ä& A†C E ä&"A†C ] ' A†C E $' A†C E D'FA†C A d' x'&A†C a ˜'¬':A†C u Ì'&A†C a ì':A†C u  (&A†C a ,(:A†C u L(&A†C a l(:A†C u Œ(&A†C a ¬(0A†C Eƒf ,4(HA†C MŽŒƒ6 ü(:A†C u )&A†C a <)óA†C î \)úA†C õ |)A†C Y œ)%A†C ` ¼)3A†C n Ü) A†C [ ü) A†C [ * A†C [ <*dA†C _ \*7A†C r |*A†C I œ*A†C I ¼*A†C Z Ü*A†C P .symtab.strtab.shstrtab.rela.text.data.bss.rela.text._Z8wxStrlenPKc.text._ZN9wxPrivate17UntypedBufferDataC2EPvmNS0_4KindE.rela.text._ZN9wxPrivate17UntypedBufferDataD2Ev.rela.text._Z16wxGet_wxConvLibcv.rela.text._ZN14wxFormatStringC2EPKc.gcc_except_table._ZN14wxFormatStringC2EPKc.rela.text._ZNK14wxFormatStringcvPKwEv.rela.rodata.rela.text._ZN8wxString7ImplStrEPKw.rela.text._ZN8wxString17SubstrBufFromTypeI22wxScopedCharTypeBufferIwEED2Ev.rela.text._ZN8wxString7ImplStrEPKcRK8wxMBConv.gcc_except_table._ZN8wxString7ImplStrEPKcRK8wxMBConv.rela.text._ZN8wxStringD2Ev.rela.text._ZN8wxStringC2Ev.rela.text._ZN8wxStringC2ERKS_.rela.text._ZN8wxStringC2EPKc.gcc_except_table._ZN8wxStringC2EPKc.rela.text._ZN8wxStringC2EPKw.gcc_except_table._ZN8wxStringC2EPKw.rela.text._ZN8wxStringaSERKS_.rela.text._ZN14wxFormatStringD2Ev.gcc_except_table._ZN14wxFormatStringD2Ev.rela.text._ZN8wxObjectaSERKS_.rela.text._ZNSt3tr115__unordered_mapI8wxStringS1_12wxStringHash13wxStringEqualSaISt4pairIKS1_S1_EELb0EED2Ev.rela.text._ZNSt3tr113unordered_mapI8wxStringS1_12wxStringHash13wxStringEqualSaISt4pairIKS1_S1_EEED2Ev.rela.text._ZN17wxCriticalSection5EnterEv.rela.text._ZN17wxCriticalSection5LeaveEv.rela.text._ZN23wxCriticalSectionLockerC2ER17wxCriticalSection.rela.text._ZN23wxCriticalSectionLockerD2Ev.rela.text._ZN8wxThread6IsMainEv.text._ZN8wxThread8OnDeleteEv.text._ZN8wxThread6OnKillEv.text._ZN8wxThread6OnExitEv.rela.text._ZN20wxThreadHelperThread5EntryEv.rela.text._ZN15wxLogRecordInfoC2EPKciS1_S1_.rela.text._ZNSt3tr115__unordered_mapI8wxStringm12wxStringHash13wxStringEqualSaISt4pairIKS1_mEELb0EED2Ev.rela.text._ZNSt3tr113unordered_mapI8wxStringm12wxStringHash13wxStringEqualSaISt4pairIKS1_mEEED2Ev.rela.text._ZN15wxLogRecordInfo9ExtraDataD2Ev.gcc_except_table._ZN15wxLogRecordInfo9ExtraDataD2Ev.rela.text._ZN15wxLogRecordInfoD2Ev.rela.text._ZN5wxLog9IsEnabledEv.rela.text._ZN5wxLog14IsLevelEnabledEm8wxString.gcc_except_table._ZN5wxLog14IsLevelEnabledEm8wxString.rela.text._ZN8wxLoggerC2EmPKciS1_S1_.gcc_except_table._ZN8wxLoggerC2EmPKciS1_S1_.rela.text._ZN8wxLogger3LogERK14wxFormatString.rela.text._ZN8wxLogger5DoLogEPKwz.gcc_except_table._ZN8wxLogger5DoLogEPKwz.rela.text._ZN8wxLogger11DoCallOnLogEmRK8wxStringP13__va_list_tag.gcc_except_table._ZN8wxLogger11DoCallOnLogEmRK8wxStringP13__va_list_tag.rela.text._ZN8wxLogger11DoCallOnLogERK8wxStringP13__va_list_tag.text._ZN6wxSizeC2Eii.text._ZN7wxPointC2Eii.text._ZNKSt9type_info4nameEv.text._ZN16wxTypeIdentifierC2EPKc.rela.text._ZN16wxTypeIdentifiereqERKS_.rela.text._ZN16wxTypeIdentifierneERKS_.rela.text._ZN14wxEventFunctorC2Ev.rela.text._ZNK20wxObjectEventFunctor10IsMatchingERK14wxEventFunctor.text._ZNK20wxObjectEventFunctor13GetEvtHandlerEv.text._ZNK20wxObjectEventFunctor12GetEvtMethodEv.text._ZNK7wxEvent12GetEventTypeEv.text._ZNK7wxEvent17GetPropagatedFromEv.rela.text._ZN21wxEventTableEntryBaseC2EiiP14wxEventFunctorP8wxObject.text._ZN21wxEventTableEntryBaseD2Ev.rela.text._ZN17wxEventTableEntryC2ERKiiiP14wxEventFunctorP8wxObject.text._ZN12wxEvtHandler14SetNextHandlerEPS_.text._ZN12wxEvtHandler18SetPreviousHandlerEPS_.text._ZN12wxEvtHandler15AddPendingEventERK7wxEvent.text._ZN12wxEvtHandler12TryValidatorER7wxEvent.rela.text._ZN12wxEvtHandler9TryParentER7wxEvent.text._ZN20wxObjectEventFunctorclEP12wxEvtHandlerR7wxEvent.text._ZN16wxAppConsoleBase10CallOnInitEv.text._ZN16wxAppConsoleBase16OnEventLoopEnterEP15wxEventLoopBase.text._ZN16wxAppConsoleBase15OnEventLoopExitEP15wxEventLoopBase.text._ZN16wxAppConsoleBase16OnFatalExceptionEv.rela.text._ZN16wxAppConsoleBase22SetInitializerFunctionEPFP12wxAppConsolevE.rela.text._ZN16wxAppConsoleBase11GetInstanceEv.text._ZNK9wxAppBase13UsesEventLoopEv.text._ZNK9wxAppBase8IsActiveEv.text._ZN9wxAppBase14SetDisplayModeERK11wxVideoMode.text._ZN9wxAppBase12SetPrintModeEi.text._ZN5wxApp14GetXVisualInfoEv.rela.text._ZN16wxAppInitializerC2EPFP12wxAppConsolevE.rela.text._ZN12wxWindowBase7SetNameERK8wxString.rela.text._ZNK12wxWindowBase7GetNameEv.text._ZNK12wxWindowBase16GetWindowVariantEv.rela.text._ZNK12wxWindowBase13GetClientSizeEv.text._ZN12wxWindowBase12SetSizeHintsEiiiiii.text._ZN12wxWindowBase16SetMinClientSizeERK6wxSize.text._ZN12wxWindowBase16SetMaxClientSizeERK6wxSize.rela.text._ZNK12wxWindowBase10GetMinSizeEv.rela.text._ZNK12wxWindowBase10GetMaxSizeEv.text._ZNK12wxWindowBase16GetMinClientSizeEv.text._ZNK12wxWindowBase16GetMaxClientSizeEv.rela.text._ZNK12wxWindowBase18GetBestVirtualSizeEv.text._ZNK12wxWindowBase21GetContentScaleFactorEv.text._ZN12wxWindowBase26BeginRepositioningChildrenEv.text._ZN12wxWindowBase24EndRepositioningChildrenEv.text._ZN12wxWindowBase4HideEv.text._ZN12wxWindowBase14ShowWithEffectE12wxShowEffectj.rela.text._ZN12wxWindowBase14HideWithEffectE12wxShowEffectj.text._ZNK12wxWindowBase7IsShownEv.text._ZN12wxWindowBase18SetWindowStyleFlagEl.text._ZNK12wxWindowBase18GetWindowStyleFlagEv.text._ZNK12wxWindowBase7HasFlagEi.text._ZN12wxWindowBase13SetExtraStyleEl.text._ZN12wxWindowBase15SetThemeEnabledEb.text._ZNK12wxWindowBase15GetThemeEnabledEv.text._ZN12wxWindowBase15SetFocusFromKbdEv.text._ZNK12wxWindowBase12AcceptsFocusEv.text._ZNK12wxWindowBase23AcceptsFocusRecursivelyEv.text._ZNK12wxWindowBase24AcceptsFocusFromKeyboardEv.rela.text._ZNK12wxWindowBase12CanBeFocusedEv.text._ZNK12wxWindowBase17IsClientAreaChildEPK8wxWindow.text._ZNK12wxWindowBase15GetEventHandlerEv.rela.text._ZN12wxWindowBase25ProcessWindowEventLocallyER7wxEvent.text._ZN12wxWindowBase12GetValidatorEv.rela.text._ZN18wxAcceleratorTableaSERKS_.rela.text._ZN12wxWindowBase19SetAcceleratorTableERK18wxAcceleratorTable.rela.text._ZNK12wxWindowBase10HasCaptureEv.text._ZN12wxWindowBase9PrepareDCER4wxDC.rela.text._ZNK12wxWindowBase20GetDefaultAttributesEv.text._ZN12wxWindowBase24HasTransparentBackgroundEv.text._ZNK12wxWindowBase16HasMultiplePagesEv.text._ZN12wxWindowBase20AlwaysShowScrollbarsEbb.text._ZNK12wxWindowBase22IsScrollbarAlwaysShownEi.text._ZNK12wxWindowBase13GetDropTargetEv.text._ZN12wxWindowBase14SetTransparentEh.text._ZN12wxWindowBase17CanSetTransparentEv.text._ZN12wxWindowBase15AssociateHandleEP10_GtkWidget.text._ZN12wxWindowBase16DissociateHandleEv.text._ZNK12wxWindowBase20ShouldInheritColoursEv.text._ZNK12wxWindowBase22CanBeOutsideClientAreaEv.text._ZNK12wxWindowBase19CanApplyThemeBorderEv.text._ZN12wxWindowBase31GetMainWindowOfCompositeControlEv.text._ZNK12wxWindowBase21IsTopNavigationDomainEv.text._ZNK12wxWindowBase26GetDefaultBorderForControlEv.rela.text._ZNK12wxWindowBase19DoGetBestClientSizeEv.text._ZNK12wxWindowBase21DoGetBestClientHeightEi.text._ZNK12wxWindowBase20DoGetBestClientWidthEi.rela.text._ZN12wxWindowBase18SetInitialBestSizeERK6wxSize.rela.text._ZN8wxWindow8SetLabelERK8wxString.rela.text._ZNK8wxWindow8GetLabelEv.text._ZNK8wxWindow9GetHandleEv.text._ZNK8wxWindow31GTKNeedsToFilterSameWindowFocusEv.text._ZNK8wxWindow24GTKIsTransparentForMouseEv.text._ZNK8wxWindow14GTKNeedsParentEv.rela.text._ZN22wxControlContainerBaseC2Ev.rela.text._ZN22wxControlContainerBaseD2Ev.rela.text._ZN22wxControlContainerBaseD0Ev.rela.text._ZN22wxControlContainerBase18SetContainerWindowEP8wxWindow.rela.text._ZNK22wxControlContainerBase23AcceptsFocusRecursivelyEv.rela.text._ZNK22wxControlContainerBase24AcceptsFocusFromKeyboardEv.rela.text._ZN19wxNavigationEnabledI8wxWindowED2Ev.rela.text._ZN19wxNavigationEnabledI8wxWindowED0Ev.rela.text._ZN11wxPanelBaseC2Ev.rela.text._ZN11wxPanelBaseD2Ev.rela.text._ZN11wxPanelBaseD0Ev.rela.text._ZN7wxPanelC2EP8wxWindowiRK7wxPointRK6wxSizelRK8wxString.gcc_except_table._ZN7wxPanelC2EP8wxWindowiRK7wxPointRK6wxSizelRK8wxString.text._ZNK20wxNonOwnedWindowBase27AdjustForParentClientOriginERiS0_i.text._ZN20wxNonOwnedWindowBase17InheritAttributesEv.text._ZNK20wxTopLevelWindowBase20ShouldPreventAppExitEv.text._ZNK20wxTopLevelWindowBase10IsTopLevelEv.text._ZNK20wxTopLevelWindowBase21IsTopNavigationDomainEv.text._ZNK20wxTopLevelWindowBase9IsVisibleEv.text._ZN20wxTopLevelWindowBase14OSXSetModifiedEb.text._ZNK20wxTopLevelWindowBase13OSXIsModifiedEv.text._ZN20wxTopLevelWindowBase22SetRepresentedFilenameERK8wxString.text._ZNK20wxTopLevelWindowBase19DoGetScreenPositionEPiS0_.text._ZNK19wxTopLevelWindowGTK12IsFullScreenEv.rela.text._ZNK19wxTopLevelWindowGTK8GetTitleEv.text._ZN19wxTopLevelWindowGTK8SetLabelERK8wxString.text._ZNK19wxTopLevelWindowGTK8GetLabelEv.text._ZNK19wxTopLevelWindowGTK9IsGrabbedEv.text._ZNK11wxFrameBase10GetMenuBarEv.text._ZNK11wxFrameBase12GetStatusBarEv.text._ZNK11wxFrameBase10GetToolBarEv.rela.text._ZNK11wxFrameBase17IsClientAreaChildEPK8wxWindow.text._ZN11wxFrameBase15PositionMenuBarEv.text._ZN11wxFrameBase17PositionStatusBarEv.text._ZN11wxFrameBase15PositionToolBarEv.rela.text._ZN7wxFrameC2EP8wxWindowiRK8wxStringRK7wxPointRK6wxSizelS4_.gcc_except_table._ZN7wxFrameC2EP8wxWindowiRK8wxStringRK7wxPointRK6wxSizelS4_.rela.text._ZNK7wxFrame19GetClientAreaOriginEv.rela.text._ZNSt4listIP10wxMenuItemSaIS1_EED2Ev.rela.text._ZN14wxMenuItemListC2Ev.rela.text._ZN14wxMenuItemList5ClearEv.rela.text._ZN14wxMenuItemListD2Ev.gcc_except_table._ZN14wxMenuItemListD2Ev.rela.text._ZN10wxMenuBaseC2El.gcc_except_table._ZN10wxMenuBaseC2El.rela.text._ZN10wxMenuBase6AppendEiRK8wxStringS2_10wxItemKind.rela.text._ZN10wxMenuBase15AppendSeparatorEv.gcc_except_table._ZN10wxMenuBase15AppendSeparatorEv.rela.text._ZN6wxMenuC2El.gcc_except_table._ZN6wxMenuC2El.text._ZNK20wxMDIParentFrameBase14GetActiveChildEv.text._ZN20wxMDIParentFrameBase14SetActiveChildEP15wxMDIChildFrame.text._ZN20wxMDIParentFrameBase13SetWindowMenuEP6wxMenu.text._ZN20wxMDIParentFrameBase7CascadeEv.text._ZN20wxMDIParentFrameBase4TileE13wxOrientation.text._ZN20wxMDIParentFrameBase12ArrangeIconsEv.rela.text._ZN21wxMDIClientWindowBaseC2Ev.rela.text._ZN17wxMDIClientWindowC2Ev.rela.text._ZN20wxMDIParentFrameBase14OnCreateClientEv.gcc_except_table._ZN20wxMDIParentFrameBase14OnCreateClientEv.rela.text._ZN20wxMDIParentFrameBase9TryBeforeER7wxEvent.rela.text._ZN17wxEventTableEntryD2Ev.rela.text._ZN12App_PnlValueC2Ev.gcc_except_table.rela.text._ZN8wxLoggerD2Ev.rela.text._ZN22wxScopedCharTypeBufferIcED2Ev.rela.text._ZN22wxScopedCharTypeBufferIwED2Ev.rela.text._ZN22wxScopedCharTypeBufferIcE14CreateNonOwnedEPKcm.rela.text._ZN22wxScopedCharTypeBufferIwEC2Ev.rela.text._ZN22wxScopedCharTypeBufferIcEC2Ev.rela.text._ZN22wxScopedCharTypeBufferIwEC2ERKS0_.rela.text._ZN8wxString15ConvertedBufferIcED2Ev.text._ZN8wxString15ConvertedBufferIcEC2Ev.rela.text._ZNK22wxScopedCharTypeBufferIwEcvPKwEv.rela.text._ZNK22wxScopedCharTypeBufferIwE4dataEv.rela.text._ZNSaISt4pairIK8wxStringS0_EED2Ev.rela.text._ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EED2Ev.rela.text._ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EED2Ev.rela.text._ZNSaISt4pairIK8wxStringmEED2Ev.rela.text._ZNSt4pairIK8wxStringmED2Ev.rela.text._ZNSt4pairIK8wxStringS0_ED2Ev.text._ZNK14wxEventTypeTagI15wxUpdateUIEventEcvRKiEv.text._Z5wxMaxIiiEN24wxImplicitConversionTypeIT_T0_E5valueES1_S2_.rela.text._ZN18wxControlContainerC2Ev.rela.text._ZN19wxNavigationEnabledI8wxWindowEC2Ev.rela.text._ZNSt4listIP10wxMenuItemSaIS1_EE3endEv.text._ZNKSt14_List_iteratorIP10wxMenuItemEneERKS2_.text._ZNKSt14_List_iteratorIP10wxMenuItemEdeEv.text._ZNSt14_List_iteratorIP10wxMenuItemEppEv.rela.text._ZNSt4listIP10wxMenuItemSaIS1_EE5beginEv.rela.text._ZNSt4listIP10wxMenuItemSaIS1_EEC2Ev.rela.text._ZNSt10_List_baseIP10wxMenuItemSaIS1_EE10_List_implD2Ev.rela.text._ZNSt10_List_baseIP10wxMenuItemSaIS1_EED2Ev.rela.text._ZSt8for_eachISt14_List_iteratorIP10wxMenuItemEPFvS2_EET0_T_S7_S6_.rela.text._ZNSt4listIP10wxMenuItemSaIS1_EE5clearEv.text._ZNK14wxEventTypeTagI14wxCommandEventEcvRKiEv.rela.text._Z22wxNewEventTableFunctorI14wxEventTypeTagI14wxCommandEventE12wxEvtHandler7wxEventEP20wxEventFunctorMethodIT_T0_T1_S7_ERKS6_MS7_FvRS8_E.rela.text._ZN22wxScopedCharTypeBufferIcE4DataD2Ev.rela.text._ZN22wxScopedCharTypeBufferIcE6DecRefEv.rela.text._ZN22wxScopedCharTypeBufferIcE4DataC2EPcmN9wxPrivate17UntypedBufferData4KindE.rela.text._ZN22wxScopedCharTypeBufferIcE11GetNullDataEv.rela.text._ZN22wxScopedCharTypeBufferIwE4DataD2Ev.rela.text._ZN22wxScopedCharTypeBufferIwE6DecRefEv.rela.text._ZN22wxScopedCharTypeBufferIwE11GetNullDataEv.rela.text._ZN22wxScopedCharTypeBufferIwE6IncRefEv.text._ZNK22wxScopedCharTypeBufferIwE4Data3GetEv.text._ZN9__gnu_cxx13new_allocatorISt4pairIK8wxStringS2_EEC2Ev.text._ZN9__gnu_cxx13new_allocatorISt4pairIK8wxStringS2_EED2Ev.rela.text._ZNSaINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS3_ELb0EEEED2Ev.rela.text._ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5clearEv.rela.text._ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE21_M_deallocate_bucketsEPPNSA_10_Hash_nodeIS4_Lb0EEEm.rela.text._ZNSaINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEED2Ev.rela.text._ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE5clearEv.rela.text._ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE21_M_deallocate_bucketsEPPNSA_10_Hash_nodeIS4_Lb0EEEm.text._ZN9__gnu_cxx13new_allocatorISt4pairIK8wxStringmEEC2Ev.text._ZN9__gnu_cxx13new_allocatorISt4pairIK8wxStringmEED2Ev.text._ZNSt14_List_iteratorIP10wxMenuItemEC2EPNSt8__detail15_List_node_baseE.rela.text._ZNSt10_List_baseIP10wxMenuItemSaIS1_EEC2Ev.rela.text._ZNSaISt10_List_nodeIP10wxMenuItemEED2Ev.rela.text._ZNSt10_List_baseIP10wxMenuItemSaIS1_EE8_M_clearEv.text._ZNSt10_List_baseIP10wxMenuItemSaIS1_EE7_M_initEv.text._ZN9wxPrivate11HandlerImplI12wxEvtHandler7wxEventLb1EEC2Ev.rela.text._ZN20wxEventFunctorMethodI14wxEventTypeTagI14wxCommandEventE12wxEvtHandler7wxEventS3_EC2EMS3_FvRS4_EPS3_.text._ZN9__gnu_cxx13new_allocatorINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS5_ELb0EEEED2Ev.rela.text._ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE19_M_deallocate_nodesEPPNSA_10_Hash_nodeIS4_Lb0EEEm.rela.text._ZNSaIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS3_ELb0EEEEC2IS6_EERKSaIT_E.rela.text._ZNSaIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS3_ELb0EEEED2Ev.rela.text._ZN9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS5_ELb0EEEE10deallocateEPS9_m.text._ZN9__gnu_cxx13new_allocatorINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEED2Ev.rela.text._ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE19_M_deallocate_nodesEPPNSA_10_Hash_nodeIS4_Lb0EEEm.rela.text._ZNSaIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEEC2IS6_EERKSaIT_E.rela.text._ZNSaIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEED2Ev.rela.text._ZN9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEE10deallocateEPS9_m.rela.text._ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE18_M_deallocate_nodeEPNSA_10_Hash_nodeIS4_Lb0EEE.rela.text._ZNSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE18_M_deallocate_nodeEPNSA_10_Hash_nodeIS4_Lb0EEE.rela.text._ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_mESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE22_M_get_Value_allocatorEv.rela.text._ZN9__gnu_cxx13new_allocatorINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEE10deallocateEPS8_m.rela.text._ZNKSt3tr110_HashtableI8wxStringSt4pairIKS1_S1_ESaIS4_ESt10_Select1stIS4_E13wxStringEqual12wxStringHashNS_8__detail18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyELb0ELb0ELb1EE22_M_get_Value_allocatorEv.rela.text._ZN9__gnu_cxx13new_allocatorINSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS5_ELb0EEEE10deallocateEPS8_m.rela.text._ZNSt10_List_baseIP10wxMenuItemSaIS1_EE10_List_implC2Ev.text._ZN9__gnu_cxx13new_allocatorISt10_List_nodeIP10wxMenuItemEED2Ev.rela.text._ZNKSt10_List_baseIP10wxMenuItemSaIS1_EE19_M_get_Tp_allocatorEv.rela.text._ZNSaIP10wxMenuItemED2Ev.text._ZSt11__addressofIP10wxMenuItemEPT_RS2_.text._ZN9__gnu_cxx13new_allocatorIP10wxMenuItemE7destroyEPS2_.rela.text._ZNSt10_List_baseIP10wxMenuItemSaIS1_EE11_M_put_nodeEPSt10_List_nodeIS1_E.text._ZN9wxPrivate11HandlerImplI12wxEvtHandler7wxEventLb1EE12IsEvtHandlerEv.text._ZN20wxEventFunctorMethodI14wxEventTypeTagI14wxCommandEventE12wxEvtHandler7wxEventS3_E20CheckHandlerArgumentEPS4_.text._ZN9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS5_ELb0EEEEC2Ev.text._ZN9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringS5_ELb0EEEED2Ev.text._ZN9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEEC2Ev.text._ZN9__gnu_cxx13new_allocatorIPNSt3tr18__detail10_Hash_nodeISt4pairIK8wxStringmELb0EEEED2Ev.rela.text._ZN9__gnu_cxx13new_allocatorISt4pairIK8wxStringmEE7destroyEPS4_.rela.text._ZN9__gnu_cxx13new_allocatorISt4pairIK8wxStringS2_EE7destroyEPS4_.rela.text._ZNSaISt4pairIK8wxStringmEEC2INSt3tr18__detail10_Hash_nodeIS2_Lb0EEEEERKSaIT_E.rela.text._ZNSaISt4pairIK8wxStringS0_EEC2INSt3tr18__detail10_Hash_nodeIS2_Lb0EEEEERKSaIT_E.rela.text._ZNSaISt10_List_nodeIP10wxMenuItemEEC2Ev.text._ZNKSt10_List_baseIP10wxMenuItemSaIS1_EE21_M_get_Node_allocatorEv.rela.text._ZNSaIP10wxMenuItemEC2ISt10_List_nodeIS0_EEERKSaIT_E.text._ZN9__gnu_cxx13new_allocatorIP10wxMenuItemED2Ev.rela.text._ZN9__gnu_cxx13new_allocatorISt10_List_nodeIP10wxMenuItemEE10deallocateEPS4_m.text._ZN9__gnu_cxx13new_allocatorISt10_List_nodeIP10wxMenuItemEEC2Ev.text._ZN9__gnu_cxx13new_allocatorIP10wxMenuItemEC2Ev.rela.rodata._ZTV12App_PnlValue.rela.text._ZN12App_PnlValueD2Ev.rela.text._ZN12App_PnlValueD1Ev.rela.text._ZN12App_PnlValueD0Ev.rela.rodata._ZTV20wxEventFunctorMethodI14wxEventTypeTagI14wxCommandEventE12wxEvtHandler7wxEventS3_E.rela.text._ZN20wxEventFunctorMethodI14wxEventTypeTagI14wxCommandEventE12wxEvtHandler7wxEventS3_ED2Ev.rela.text._ZN20wxEventFunctorMethodI14wxEventTypeTagI14wxCommandEventE12wxEvtHandler7wxEventS3_ED0Ev.rela.rodata._ZTV7FrmMain.rela.text._ZN7FrmMainD2Ev.rela.text._ZN7FrmMainD0Ev.rela.rodata._ZTV20wxMDIParentFrameBase.rela.rodata._ZTV21wxMDIClientWindowBase.rela.rodata._ZTV19wxNavigationEnabledI8wxWindowE.rela.rodata._ZTV20wxObjectEventFunctor.rela.text._ZN20wxObjectEventFunctorD2Ev.rela.text._ZN20wxObjectEventFunctorD0Ev.rela.rodata._ZTV20wxThreadHelperThread.rela.text._ZN20wxThreadHelperThreadD2Ev.rela.text._ZN20wxThreadHelperThreadD0Ev.rodata._ZTS20wxEventFunctorMethodI14wxEventTypeTagI14wxCommandEventE12wxEvtHandler7wxEventS3_E.rela.rodata._ZTI20wxEventFunctorMethodI14wxEventTypeTagI14wxCommandEventE12wxEvtHandler7wxEventS3_E.rela.rodata._ZTI7FrmMain.rodata._ZTS7FrmMain.rela.rodata._ZTI12App_PnlValue.rodata._ZTS12App_PnlValue.rodata._ZTS21wxMDIClientWindowBase.rela.rodata._ZTI21wxMDIClientWindowBase.rela.rodata._ZTI20wxMDIParentFrameBase.rodata._ZTS20wxMDIParentFrameBase.rodata._ZTS19wxNavigationEnabledI8wxWindowE.rela.rodata._ZTI19wxNavigationEnabledI8wxWindowE.rela.rodata._ZTI20wxObjectEventFunctor.rodata._ZTS20wxObjectEventFunctor.rela.rodata._ZTI20wxThreadHelperThread.rodata._ZTS20wxThreadHelperThread.rela.text._ZN18wxControlContainerD2Ev.rela.text._ZN18wxControlContainerD0Ev.rela.text._ZN20wxEventFunctorMethodI14wxEventTypeTagI14wxCommandEventE12wxEvtHandler7wxEventS3_EclEPS3_RS4_.rela.text._ZNK20wxEventFunctorMethodI14wxEventTypeTagI14wxCommandEventE12wxEvtHandler7wxEventS3_E10IsMatchingERK14wxEventFunctor.rela.text._ZNK20wxEventFunctorMethodI14wxEventTypeTagI14wxCommandEventE12wxEvtHandler7wxEventS3_E13GetEvtHandlerEv.rela.text._ZNK20wxEventFunctorMethodI14wxEventTypeTagI14wxCommandEventE12wxEvtHandler7wxEventS3_E12GetEvtMethodEv.rela.text._ZN19wxNavigationEnabledI8wxWindowE8SetFocusEv.rela.text._ZNK19wxNavigationEnabledI8wxWindowE12AcceptsFocusEv.rela.text._ZNK19wxNavigationEnabledI8wxWindowE23AcceptsFocusRecursivelyEv.rela.text._ZNK19wxNavigationEnabledI8wxWindowE24AcceptsFocusFromKeyboardEv.rela.text._ZN19wxNavigationEnabledI8wxWindowE8AddChildEP12wxWindowBase.rela.text._ZN19wxNavigationEnabledI8wxWindowE11RemoveChildEP12wxWindowBase.text._ZN9wxPrivate11HandlerImplI12wxEvtHandler7wxEventLb1EE21ConvertFromEvtHandlerEPS1_.text._ZN9wxPrivate11HandlerImplI12wxEvtHandler7wxEventLb1EE19ConvertToEvtHandlerEPS1_.text._ZN9wxPrivate11HandlerImplI12wxEvtHandler7wxEventLb1EE18ConvertToEvtMethodEMS1_FvRS2_E.rodata._ZTSN9wxPrivate11HandlerImplI12wxEvtHandler7wxEventLb1EEE.rela.rodata._ZTIN9wxPrivate11HandlerImplI12wxEvtHandler7wxEventLb1EEE.rela.init_array.rela.debug_info.debug_abbrev.rela.debug_aranges.rela.debug_ranges.rela.debug_line.debug_str.comment.note.GNU-stack.rela.eh_frame.groupV@šBVHšŒVPšVXšIV` šŽVlšTVtšVV|šV„ šYVšV˜š‘V š’V¨ š“V´ š”VÀšpVÈ š•VÔštVÜš–Väš—Vìš{Vôš}Vüš˜Vš™V šƒVš†Vš‡V$šˆV,š‰V4ššV<š›VDšœVL šVXšžV`š—Vh ššVt šŸV€šžVˆ šŸV” š¡V š V¨š V°š¡V¸š¨VÀš¢VÈš«VК­VØš£Vàš±Vèš²Vðš³Vøš´VšµVš¤Vš¥Vš¦V šÀV(šÁV0šÂV8šÃV@šÄVHšÆVPšÇVXšÈV`šÉVhšÊVpšËVxšÍV€šÏVˆšÐVšÑV˜šÒV šÓV¨š§V°šÖV¸š×VÀšØVÈšÙVКÚVØšÛVàšÜVèšÝVðšÞVøšßVšàVšáVšäVšåV šæV(šçV0šèV8šéV@šêVHšëVPšìVXšíV`šîVhšïVpšðVxšñV€šòVˆšóVšôV˜šõV š÷V¨šøV°šùV¸šûVÀšüVÈšýVКþVØšVàšVèšVðšVøšVšVšVšVš V š V(š V0š V8š V@šVHšVPšVXšV`šVhšVpšVxšV€šVˆšVšV˜šV šV¨šV°š¨V¸ š©VÄš$VÌš&VÔš)VÜ šªVèš«V𠚬Vü š­Vš;Vš<Vš=V š>V(š?V0š@V8šAV@šBVHšCVPšDVXšEV`šFVhšGVpšHVxšIV€šJVˆšKVšLV˜šMV šNV¨šOV°šPV¸ š®VÄšXVÌš¯VÔš°VÜš_Vä š±Vð š²VüšmV šoV š³VšvV$šwV,šxV4šyV<šzVDš{VLš´VTšµV\ šƒVhš…Vpš¶Vxš·V€š¸Vˆš¹VšºV˜šOV š»V¨š¼V°š½V¸š¾VÀš¿VÈšjVК¾VØšÀVàšÁVèšÂVðšÃVøšÄVšÅVš‰VšãVšÆV šÇV(š`V0š×V8šØV@šÙVHšaVPšÈVXšÉV`šÊVhšcVpšdVxš‡V€šâVˆšËVš±V˜šÌV š¹V¨šÍV°š³V¸š·VÀš»VÈš¿VКÎVØšÏVàšÐVèšÃVðšÄVøšÑVšÇVšÈVšÒVšÓV šÔV(šÕV0šÖV8šßV@šáVHš×VPšØVXšÙV`šïVhšÚVpšÛVxšñV€šÜVˆšõVšÝV˜šÞV š÷V¨šV°šV¸šVÀšVÈšVКVØšßVàšàVèšVðšáVøšV šV šV š V š V šâV( šãV0 šäV8 šåV@ šVH šVP šæVX šçV` šèVh š$Vp šéVx šêV€ š(Vˆ šëV šìV˜ š™V  šíV° š V¸ šîVÄ š¡VÌ šïVØ šVà š~Vè š+Vð š9Vø šðV š>V šñV šEV šnV( švV0 šJV8 š6V@ šLVH šNVP šVX šV` šPVh šQVp š2Vx š:V€ šRVˆ š?V šSV˜ šòV¤ šqV¬ šrV´ šsV¼ štVÄ š3VÌ š4VÔ š5VÜ š6Vä š7Vì š8Vô š^Vü š_V š`V šdV šH  å ¨u èšO&,@Â@6@(1„ šSKhD‡¬)‚¨„ šV·Õ%²À„ `šXØú›Ó … šZø•)ª$°… š]PÐ6KÈ… Hš_]X† ša"|(† šcÍ<vÈ@† še÷²2Æ*-І 0šhNð*I‡ 0šjj5e0‡ 0šl‰P¶„`‡ šn¢Ì~Çhˆ ¨šqåœ ¨3 ‰ št.Üq)(‰ švLM{b3v¸‰ šyš–•Љ š{°è‰ š}nÊiŠ š˜ä“Š šÂþ,½0Š šƒ*üHŠ š…-G/(`Š Hš‡Iv g€ ƒŠ ¤”„Ÿ¨Š 0šŒÑ uÌØŠ 0šŽþŽ ù‹ šg¨ b ‹ š’Ê LÅ8‹ `š”ó!-!1(˜‹ 0š—QO! LÈ‹ Hš™ro!•mŒ š›"Ù"„Ô Œ `šžúš",ª"5' 0š¡[à"ûV0 xš£yÛ#¨ô#}£¨ xš¦åq$3 †$1.  Ž š©o ¸$#… Ü$#œ %/º 0%á J%0Ü 8Ž š¯ z%0 PŽ š±1 ª%, hŽ š³T À%úO €Ž xšµ” º&Æ Ì&÷ â& ô&G '§B øŽ Øš»ˆ ®':² è'I­ Ð š¾ò 2( L(N f(L‚ ²(· Æ(%² è šÄã ì(” €)'H ¨)‰ ¶)É Ä) þ Î)ù  šËKã) F šÍvð)œ*¼*ð** 8*;H*60 šÔrf*,mH šÖ£’*0ž` šØÆÂ*øÖ*Góx šÛ"+WOv+\ƒÒ+\¼.,.· šàè\,4㨠šâ,Q<â,Qn4-jiÀ xšæž-ϼ-Ì- 9Ö-,X.2•4. 8‘ šíÍT.ðn.Œ.M¢.&pÈ.™æ.Ä/ð/'B/DR/'xz/'²¢/G­P‘ šúÛê/þ/D0-?h‘ 0šþB0®X0)©˜‘ šØ‚0,Ó°‘ š!®0È‘ šHÈ0vÖ02qà‘ 0š§1Û1(19<1lN1–d1Àx1íˆ1$–1 P 1°1´À1äÐ1Þ1Qî1þ1ˆ’ š½2ï"2%42% (’ š`Z2,[@’ š†20ˆX’ š!¬¶2ÌÌ2Ü23ì2*^3EYp’ š'‰\3.„ˆ’ 0š)´Š3&¯¸’ 0š+ß°3}Úè’ Øš-%.4F À“ 0š/ht4cð“ š1¬Ž4L§” `š3ßÚ4&Úh” 0š55% ˜” 0š72&5:-È” Hš9R`5&M• 0š;r†5‰m@• xš=±6ü 6A66 v@6¯P6Þ`6p6'E˜6w¶6©Ì6íÚ67) 7^ (70Y ¸• šK‰ X72½ Š76è À7!Ö7:!ì7b!8!8\ˆ!Е šSÄ!t8 î!~8 "ˆ8 I"’8”D"è• šX‹"&9Þ"89(Ù"x– š[ #`9#– š]=#z9"8#¨– š_`#œ9W[#À– xša‡#ô9H‚#8— `šc¥#<:Ô#L:¨Ï#˜— Øšfî#ô:$;e$p˜ šiW$t;ªR$ˆ˜ ðšk€$<º$><^µ$x™ xšnÏ$œ<ð$¬<#%Â<f%à<gž%H= È%R= ý%`= 2&j=%-&ð™ 0šw\&=%W& š 0šy‚&¶=H}&Pš `š{´&þ=÷&>þò&°š ðš~0' ?+' › š€V'&?1Q'¸› Hš‚r'W?æ‰'>AT„'œ `š…¥'’A '`œ š‡Ó'¬AÎ'xœ š‰(ÆA’ü'œ š‹@(XB;( šn(rBi(8 šœ(ŒB,—(P š‘Î(¸BÉ(h š“ù(ÖB))ìB$)€ š–[)CV)˜ š˜)$Cˆ)° ššº)>Coµ)È xšœ”*®Co*@ž xšžl+Dg+¸ž š —+8D’+О š¢¾+RDL¹+èž `š¤â+žD,¬D^,ÈD%Y,HŸ 0š¨…,îD…€,xŸ ¨šª¸,tE%³,   š¬å,šE"-¼EI-ÒE}-òE(x-8  š±±-F¬-P  š³á-4FÜ-h  šµ$.NFH.€  `š·[.–FWV.à  Hš¹©.îF&¤.(¡ 0š»Ø.G/"Gl /X¡ `š¾¥/ŽG /¸¡ šÀØ/¨GtÓ/С `šÂ 0H000¢ šÄd0LH _0H¢ šÆ0XH˜0`¢ šÈÐ0rHtË0x¢ `šÊ1æH þ0Ø¢ šÌ<1òH>71𢠚Îj10I›1BI Ú1LI 2VI2£ šÓn2pI9i2 £ šÕL3ªITG38£ Hš×W4þIR4€£ šÙ¥4J9 4˜£ šÛ5RJT|5°£ HšÝ…6¦J Â6°J ÿ6ºJQ7ÔJ&L7ø£ 0šâˆ7úJƒ7(¤ šä¼7K’·7@¤ xšæõ7¦K!-8ÈK s8ÒK÷n8¸¤ €šêâ8ÊL I9ÔL“D98¦ šíR:hMM:P¦ šï¯:†Mª:h¦ šñ; M"û:€¦ šóq;ÂM Ö;ÌM“Ñ;˜¦ šöÝ<`NØ<°¦ šø8=~N3=Ȧ šú‡=˜N"‚=ঠšüû=ºN‚ö=ø¦ šþÿ>ˆ§ š@¾O-@¨ šô@ìO"ï@0¨ šgAP-bAH¨ šXBL@l @9LÐò HšEpL€r@@kL ¨šG˜LÀr:“LÀ HšIÁLúr&¼L 0šKêL@sH@åL8 ÀšMMˆs: Mø HšO;MÂs&6M@ 0šQ_MtT@ÄM`t8 ¿Mp `šT)N t$NÐ HšV>N¸t XNÐtSN HšYsNètŽNu·N u²N` Hš]àN@uÛN¨ Hš_O`u&O€u! XO°uSOð HšcŠOÐu…O8 Hše­OðuÕOvÐO€ HšhøO0v PHv:PÈ HškGP‚v&BP 0šmnP¨vóiP@ ðšoÛPœwúÖP0 xšq]Q–xXQ¨ šsÑQ´x%ÌQÀ šuDRÚx3?RØ 0šw~Ry yR šy¾R.y ¹R š{ SNy S8 š}USnydPSP `šSÒy7˜S° 0šäS z=Tz”T%zñT`z6 8U z3Uà 0š‡U°zzU š‰U¸zVŸ‹U( ˜Ûš‹œUs¯U) ªUÀ蚎ÃU¡=@¾UØ`<šÖUáQÆ,ÑU8Cèš’âU0§~…SíU0,Ò(öUTÒ VXÒø*V ah"š—PýVp: ¨™›B Ô Š¡ñÿOQRSUVXZ\]_aceghjlnpqstvxy{}ƒ…‡‰Š‹ŒŽ’”–—™›ž ¡£¥¦¨©«¬­®¯±³µ·¸¹º»_ ½¾ÀÁÂÃÄÆÇÈÉÊËÍÏÐÑÒÓÔÖØÚÛÝÞßàâäåæèéêëìíïðñòóôõö÷øùúüýþ    !#$%&')+-]_à/13579;=?@ABCDEFGHIJKMNOPQRSUVWXZ[]_acefhikmnp¨RÁqrstuvwy{}~€‚„…·_󇉋‘“•–˜šœž ¢¤¦§¨ª¬®¯°±³µ·¹»½¾ÀÂÄÆÈÊÌÎÐÑÒÓÕ×ÙÛÝßàáâäæèéêí_ìíïñóõöøúüþ   !#%&()+,-/13579;=?ACEGIKMOQSTVXY[\]_abceghjfOX0nOˆHkmž_ˆ³_Œ½_Ö_‘ê_’ _“&_”@_˜[_ os_ qsuwy{}ƒ„…†‡åOÐ ‰_Ð‹Ž’”–—Ar—±ò   ( ;NfÈ$Xy›ùQ t!$¨)¸*É,å/ý586W7‘I½ŠÝ‹ý%:‘O’ˆ©Ä«é¬ ® ¯- ²< ¹[ ºv ½‘ ¾§ ¿¸ ÀÛ Áþ Ã! ÄD Åk Æ Çµ Ê× Ë¦ Ìs Í“ ί ÏÍ Òé Ó Ù6 Ún Ûš à âä8éqêªëïî2ñiò óçôõ<øwùàú<üŽýÔÿ.~ ú : S° hÃcŒÁñ 1!a#w%Ò'â,.?•      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN:"S(IP"UD"UD²"V)×Ü"V)"X%%>"Z›Xm""‹’Ä"‡ç"‰ "Z›3"]Om"a†"cÇ"c"ev,?h"‘,"h* "“Åé"h*ú"j* /"•T"j*e"l5y¡"l5µ"n¶ÈÕ"–ü'4"n¶G"q~Z"q~m"t3©"vqÁ"vqÙ"y3í"{e"œo4"{–"}ò"}N"m€"Ÿ´"ƒ,è"ƒ, "…= "…^ "‡/t “ ° "‰ È "Š Þ "‹ ô "Œ„!"Žu8!=!"Žu_!"½!"žoŠ""è""’@#"’˜#"”L»#"”LÞ#"—1÷#þ#"—1$"™ -$Q$e$"›•Š$±$"ž„Ì$"ž„ç$"¡5 %"£û#%"©1Y%"¦}%º%ê%"«#ú%"«# &"¬#&"¬#,&"­/D&"®`&"®|&"¯0™& &"±0½&"³Õ&ê&"³'"µú<'"·h'"¸“'"¹°'"ºÒ'"»§ ( (<(K(V("»§‘("½:°("½:Ï("¾I )"¾IC)"Ài)"Á“)"ÂLÁ)"Ãë)"Ä%*6*"Æ”k*"Ç'*"ÈÊ*"É+"Ê .+"Ëp+•+"Í º+á+"Ï,"Ð,"ÑI,"Ò g,"Óƒ,"Ô¯,"ÔÛ,"Ö,-"Ø0-"ÚE-"ÛGi-"ÝW-"Þ\¾-"ß\ì-"à. ."â4.."äQU."åQ|."æj¥.Ç."§/"è//"é_/"ê /"ë,¦/"ì2Ø/"í 0"ï'0"ðO0"ñx0"ò&•0"ó¸0"ôÝ0"õ1"ö'(1"÷K1"ø'y1"ù'¨1"úGË1ê1"ü2"ýB2"þ-y2ª2"Ì2")ë2",)3"J3j3"3"2¸3÷3" %4" L4" w4" ¤4"È4"ì4"5"D5" j5"•5"Â5"ì5"!6"M6"~6"¨6¶6"â6" 7"%=7i7",‹7"!0¤7"#¾7"$ï7"%8"&*98"'EY8v8"'E–8").¶8").Ö8"+&ö8"-}19M9"/F…9²9ï9"1(:"3LP:!E u:"k:‘:¢:"3LÊ:"5&ò:"7%;"ª…/;A;"7%V;"9:k;"9:€;";&•;"=‰Î;Û;<"=‰W<"@–<"A Å<"Bø<"C!="DU="E'|="F¨="GÔ="H>"I7H>"Jr>"K0—>"M2Å>"N6ê>"O?"P0?"QR?"Rr?"S\£?"U Ç?"V í?"W @"X”M@b@o@‚@Ã@Ø@"X”A"[(8A"]]A"·H‰A"]®A"_"ÆA"³ëA"_"B"aWB"¬%FB"±(oB±B"¹WôB"»&C"cH5C"cHMC"f¨aCwCˆCŸCµC"f¨ÉC"ieüC;D"kª^DlD"n^{D‡D™D­D"n^¼D"qéD"r&E"sgXE"t |E"u «E"v ÕE"w%ôEF!C(!F"w%@F"y%[FsF"y%ŽF"{HºFÀF"~þîFùF"½'G7G"¦fG‹G±G_ ÍGîGR@€HO/HR0OHOqH"€ŒH"€§HO$¬H¼HOC ÉH"‚1ßHíH!-@I"‚1IONK'IWIRÀkIOšæ†IO€¥³IÂI!; ÏIáIðIJ+J;JO€¥hJO&#J§JOJ¥ÍJùJ"…T K"…TKOðhAKQK"‡tK"ÂtœK"‰¿K"ÊtçK" L"Ä0XL"{L"Ì ©L"ÌL"Æ úL"‘,!M"Î>IM"“nM"•“M"˜ºM"ÐåM"šN"Ò @N"šbN"Õ95O"×T5P"ÓzP"œoIQ"Û9R"ÝTS"Ù[S"žo(T" HT"à T" ŸT"¢»T"¢×T"¤LõT"¤LU"¨%/UHU"¨%dU"ª…ŒU"áÓU"®"V"¯+V"°TV"â&€V"³¥V"µÝV"äW"µ>W"æ’qW"·HW"è!ÏW"¾lXX"ê÷ÁX"ÀéX"ÀY"Ä0_YƒY"È«Y"ÈÓY"Ñ Z"Ñ EZ"Ò ~Z"ÓÃZ"ì ["í“\"ïo\"ó"Ú\"ñ ]"Ùc]"õ ½]"ö“¹^"ø _"ü"r_"ú¶_"ß í_"ß $`"à [`"á¢`" 1Ú`"â&a"  Fa"äoa"—a" 4×a"b")b"*sb"é ®b"é éb"ê÷Rc!5@ªc" ñc" cd{d"ì ×d"‚Òe"ï$f" f"ñÇf" $g"õ ~g"þ‚wh"øÇh" "i"úfi" Ái"-¥j"åj""Mk"-3l"ul""ßl".m"!m" 1·m"#àm"  n"%bn"&—n"°n"( àn")".o" ‹o" èo" Cp" žp"íp"!>q"+ ~q"#§q"&Üq", r"( ˆC‰üÿÿÿÿÿÿÿµüÿÿÿÿÿÿÿ«ŠüÿÿÿÿÿÿÿÕùüÿÿÿÿÿÿÿó‹üÿÿÿÿÿÿÿ¼üÿÿÿÿÿÿÿ˜üÿÿÿÿÿÿÿ ™+ ™(`üÿÿÿÿÿÿÿ)–üÿÿÿÿÿÿÿ>–üÿÿÿÿÿÿÿIRüÿÿÿÿÿÿÿ±üÿÿÿÿÿÿÿ³üÿÿÿÿÿÿÿ$Büÿÿÿÿÿÿÿ4´üÿÿÿÿÿÿÿE„üÿÿÿÿÿÿÿ`µüÿÿÿÿÿÿÿxPüÿÿÿÿÿÿÿƒRüÿÿÿÿÿÿÿ ·üÿÿÿÿÿÿÿ ¹üÿÿÿÿÿÿÿ&»üÿÿÿÿÿÿÿGüÿÿÿÿÿÿÿ¾üÿÿÿÿÿÿÿ¿üÿÿÿÿÿÿÿÁüÿÿÿÿÿÿÿÃüÿÿÿÿÿÿÿ4ÄüÿÿÿÿÿÿÿDÅüÿÿÿÿÿÿÿYÅüÿÿÿÿÿÿÿdRüÿÿÿÿÿÿÿÇüÿÿÿÿÿÿÿ4ÈüÿÿÿÿÿÿÿDÉüÿÿÿÿÿÿÿYÉüÿÿÿÿÿÿÿdRüÿÿÿÿÿÿÿÌüÿÿÿÿÿÿÿ`üÿÿÿÿÿÿÿ`üÿÿÿÿÿÿÿ%`üÿÿÿÿÿÿÿ6`üÿÿÿÿÿÿÿARüÿÿÿÿÿÿÿüÿÿÿÿÿÿÿ Ó}üÿÿÿÿÿÿÿ +2ÔüÿÿÿÿÿÿÿL$üÿÿÿÿÿÿÿc,üÿÿÿÿÿÿÿo-üÿÿÿÿÿÿÿzRüÿÿÿÿÿÿÿÖüÿÿÿÿÿÿÿÖüÿÿÿÿÿÿÿÚüÿÿÿÿÿÿÿÝüÿÿÿÿÿÿÿßüÿÿÿÿÿÿÿ!Þüÿÿÿÿÿÿÿ2Þüÿÿÿÿÿÿÿ=RüÿÿÿÿÿÿÿØüÿÿÿÿÿÿÿ6ÙüÿÿÿÿÿÿÿI×üÿÿÿÿÿÿÿßüÿÿÿÿÿÿÿ áüÿÿÿÿÿÿÿ&„üÿÿÿÿÿÿÿDãüÿÿÿÿÿÿÿT•üÿÿÿÿÿÿÿ_RüÿÿÿÿÿÿÿFüÿÿÿÿÿÿÿ¹üÿÿÿÿÿÿÿUåüÿÿÿÿÿÿÿ]•üÿÿÿÿÿÿÿb¹üÿÿÿÿÿÿÿ*DüÿÿÿÿÿÿÿçüÿÿÿÿÿÿÿFüÿÿÿÿÿÿÿ·üÿÿÿÿÿÿÿUéüÿÿÿÿÿÿÿ]•üÿÿÿÿÿÿÿb·üÿÿÿÿÿÿÿçüÿÿÿÿÿÿÿ·üÿÿÿÿÿÿÿîüÿÿÿÿÿÿÿ'ïüÿÿÿÿÿÿÿ'ðüÿÿÿÿÿÿÿBñüÿÿÿÿÿÿÿNòüÿÿÿÿÿÿÿôüÿÿÿÿÿÿÿ'õüÿÿÿÿÿÿÿ'öüÿÿÿÿÿÿÿB÷üÿÿÿÿÿÿÿNøüÿÿÿÿÿÿÿýüÿÿÿÿÿÿÿ áüÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿ9üÿÿÿÿÿÿÿOüÿÿÿÿÿÿÿ^üÿÿÿÿÿÿÿjüÿÿÿÿÿÿÿ}üÿÿÿÿÿÿÿ*®üÿÿÿÿÿÿÿ6üÿÿÿÿÿÿÿA h·üÿÿÿÿÿÿÿy üÿÿÿÿÿÿÿ† ‹ h š `Ÿ¸üÿÿÿÿÿÿÿ¦¹üÿÿÿÿÿÿÿÀ¹ûÿÿÿÿÿÿÿƺüÿÿÿÿÿÿÿÐ üÿÿÿÿÿÿÿá üÿÿÿÿÿÿÿìRüÿÿÿÿÿÿÿ]üÿÿÿÿÿÿÿüÿÿÿÿÿÿÿüÿÿÿÿÿÿÿ•üÿÿÿÿÿÿÿ]üÿÿÿÿÿÿÿüÿÿÿÿÿÿÿüÿÿÿÿÿÿÿ•üÿÿÿÿÿÿÿ$üÿÿÿÿÿÿÿ3üÿÿÿÿÿÿÿ?Íüÿÿÿÿÿÿÿ[üÿÿÿÿÿÿÿlÍüÿÿÿÿÿÿÿwRüÿÿÿÿÿÿÿ$üÿÿÿÿÿÿÿ3üÿÿÿÿÿÿÿ?Âüÿÿÿÿÿÿÿ[üÿÿÿÿÿÿÿlÂüÿÿÿÿÿÿÿwRüÿÿÿÿÿÿÿ#üÿÿÿÿÿÿÿ•üÿÿÿÿÿÿÿ# üÿÿÿÿÿÿÿ•üÿÿÿÿÿÿÿ"üÿÿÿÿÿÿÿ$üÿÿÿÿÿÿÿ*%üÿÿÿÿÿÿÿ'üÿÿÿÿÿÿÿ$(üÿÿÿÿÿÿÿÏüÿÿÿÿÿÿÿÑüÿÿÿÿÿÿÿùüÿÿÿÿÿÿÿêüÿÿÿÿÿÿÿ/üÿÿÿÿÿÿÿ2üÿÿÿÿÿÿÿ•üÿÿÿÿÿÿÿ678 9(:0;8À@ÁH<P=XÂ`>h?p@xÀĈAB˜C D¨E°F¸GÀÇÈžÐHØIàÈèJðÉøKÊLMN O(P0Q8R@SHTPUXV`WhXpYxZ€[ˆ\]˜Ï ^¨_°`¸aÀbÈcÐÐØdàeèÑðÒøfghÓ 6(i0j8k ™ ™(+müÿÿÿÿÿÿÿ@•üÿÿÿÿÿÿÿBüÿÿÿÿÿÿÿ8üÿÿÿÿÿÿÿ •üÿÿÿÿÿÿÿnop q(r0s8t  üÿÿÿÿÿÿÿ4•üÿÿÿÿÿÿÿoüÿÿÿÿÿÿÿ •üÿÿÿÿÿÿÿvwx y(:0;8z@{H<P=XÂ`>h‹p|xÀĈ‘˜C D¨E°F¸}ÀGÈHÐÖØ×à~èð€ø‚Xƒ„ …(†0‡8Ú@ˆH‰PŠXÛ`ÜhÝpÞxß€àˆ‹Œ˜á ä¨°Ž¸ÀåÈæÐØèàéè‘ðêø’“ì”î •(ï0ð8–@ñH—PòXó`ôhõp˜x>€™ˆš›˜M œ¨û°¸žÀŸÈ ÐýØ¡àþè¢ð£ø¤¥¦§ (¨0©8ª@H«P¬X­`®h¯p°x±€ˆ²³˜´ µ¨¶°·¸¸À¹ÈºÐØà»è¼ðø½¾¿ÀÁ Â(Ã0Ä8Å@ÆHÇPÈXÉ`ÊhËpx € ˆ< ˜  ¨°?¸ÌÀÍÈÎÐÏØàèÐðÑøÒÓÔÕÖ D(×0Ø8Ù@HPXÚ`ÛhÜpÝxހ߈àá˜; â¨ã°ä¸åÀæÈçÐØèàéèêðëøìíî ï(ð0ñ8ò@óHôPõXö`÷høpùxú€EˆûF˜ü ý¨þ°=¸@ÀÿÈAÐBØCàèðøI¥J (0K8@H P X `Lh p xN€ˆO˜P ¡¦üÿÿÿÿÿÿÿ4•üÿÿÿÿÿÿÿxüÿÿÿÿÿÿÿ •üÿÿÿÿÿÿÿw(:0;8z@{H<P=XÂ`>h…p|xÀĈ˜C D¨E°F¸}ÀGÈHÐÖØ×à~èð€ø‚Xƒ„ …(†0‡8Ú@ˆH‰PŠXÛ`ÜhÝpÞxß€àˆ‹Œ˜á ä¨°Ž¸ÀåÈæÐØèàéè‘ðêø’“ì”î •(ï0ð8–@ñH—PòXó`ôhõp˜x>€™ˆš›˜M œ¨û°¸žÀŸÈ ÐýØ¡àþè¢ð£ø¤¥¦§ (¨0©8ª@H«P¬X­`®h¯p°x±€ˆ²³˜´ µ¨¶°·¸¸À¹ÈºÐØà»è¼ðø½¾¿ÀÁ Â(Ã0Ä8Å@ÆHÇPÈXÉ`ÊhËpx € ˆ< ˜  ¨°?¸ÌÀÍÈÎÐÏØàèÐðÑøÒÓÔÕÖ D(×0Ø8Ù@HPXÚ`ÛhÜpÝxހ߈àá˜; â¨ã°ä¸åÀæÈçÐØèàéèêðëøìíî ï(ð0ñ8ò@óHôPõXö`÷høpùxú€EˆûF˜ü ý¨þ°=¸@ÀÿÈAÐBØCàèðøI¥J (0K8@H P X `Lh p xN€ˆO˜P v¨w°x¸yÀzÈ{ÐØàƒ(:0;8z@{H<P=XÂ`>h‹p|xÀĈ˜C D¨E°F¸ÀÈÐÖØ×à~èð€ø‚ƒ„ …(†0‡8Ú@ˆHPXÛ`ÜhÝpÞxß€àˆ‹Œ˜á ä¨°Ž¸ÀåÈæÐØèàéè‘ðêø’ëì”î •(ï0ð8–@ñH—PòXó`ôhõp˜x €™ˆš›˜÷ œ¨û°¸žÀŸÈ ÐýØ¡àþè!ð£ø¤¥¦§ (¨0©8ª@H«P¬X­`®h¯p"x#€ˆ²³˜´ µ¨¶°·¸¸À¹ÈºÐØà»è¼ðø½¾¿ÀÁ Â(Ã0Ä8Å@ÆHÇPX `$h%px € ˆ& ˜  ¨°¸ÌÀÍÈÎÐÏØàèÐð'ø(ÓÔÕÖ )(×0*8Ù@HPX+`,h-pÝx.€/ˆàá˜0 â¨ã°ä¸åÀæÈ1ÐØèàéèêðëøìíî 2. /(:0;8z@{H<P=XÂ`>h‹p|xÀĈ˜C D¨E°F¸ÀÈÐÖØ×à~èð€ø‚ƒ„ …(†0‡8Ú@ˆHPXÛ`ÜhÝpÞxß€àˆ‹Œ˜á ä¨°Ž¸ÀåÈæÐØèàéè‘ðêø’ëì”î •(ï0ð83@ñH—P4X5`6hõp˜x €™ˆ78˜÷ œ¨û°¸žÀŸÈ ÐýØ¡àþè!ð£ø¤¥¦§ (¨0©8ª@H«P¬X­`®h¯p"x#€ˆ²³˜´ µ¨¶°·¸¸À¹ÈºÐØà»è¼ðø½¾¿ÀÁ Â(Ã0Ä8Å@ÆHÇPX `$h%px € ˆ& ˜  ¨°¸ÌÀÍÈÎÐÏØàèÐð'ø(ÓÔÕÖ )(×0*8Ù@HPX+`,h-pÝx.€/ˆàá˜0 â¨ã°ä¸åÀæÈ1ÐØèàéèêðëøìíî:;< Æ(±0²8³ 9 üÿÿÿÿÿÿÿ4•üÿÿÿÿÿÿÿ;üÿÿÿÿÿÿÿ •üÿÿÿÿÿÿÿ?@A B(‰0†8‡@ˆ >Düÿÿÿÿÿÿÿ4•üÿÿÿÿÿÿÿAüÿÿÿÿÿÿÿ •üÿÿÿÿÿÿÿFEG(HIJKILMINOIPKIQOIRGIST Ó!üÿÿÿÿÿÿÿ4•üÿÿÿÿÿÿÿ,üÿÿÿÿÿÿÿ •üÿÿÿÿÿÿÿ/^üÿÿÿÿÿÿÿA·üÿÿÿÿÿÿÿL ¨Q ¾V ` `e¸üÿÿÿÿÿÿÿl¹üÿÿÿÿÿÿÿ†¹ûÿÿÿÿÿÿÿŒºüÿÿÿÿÿÿÿ"¨üÿÿÿÿÿÿÿ4ªüÿÿÿÿÿÿÿJ¨üÿÿÿÿÿÿÿ\ªüÿÿÿÿÿÿÿo­üÿÿÿÿÿÿÿ_üÿÿÿÿÿÿÿ`üÿÿÿÿÿÿÿaüÿÿÿÿÿÿÿ-–üÿÿÿÿÿÿÿ'üÿÿÿÿÿÿÿ&üÿÿÿÿÿÿÿ)üÿÿÿÿÿÿÿšüÿÿÿÿÿÿÿ1büÿÿÿÿÿÿÿFíüÿÿÿÿÿÿÿ^cüÿÿÿÿÿÿÿ›üÿÿÿÿÿÿÿ1büÿÿÿÿÿÿÿedÐ  … ‰Ùn ‰²— ‰’Þ ‡0% ˆ, ‰þ41 ‰‡>> ‰3C ‰VP ‰!¼U ‰Æ a ‰ðm ‰Y¨y ‰$b… ‰–Α ‰¥4 ‰¯¸© ‰–t¶ ‰šàà ‰q„Ð ‰rÝ ‰áê ‰êÔ÷ ‰û ‰€> ‰ÑT ‰€8+ ‰!¦8 ‰¡«E ‰{ªR ‰Æ_ ‰•;l ‰3[y ‰º† ‰Á“ ‰È  ‰Ï­ ‰Öº ‰ÒÇ ‰žØÕ ‰MÍà ‰fYý ‰ô¶ ‰i¶ ‰&{ ‰~e& ‰)^2 ‰/£A ‰âH ‰£W ‰qPh ‰r>s ‰U5 ‰2.‹ ‰Ùtª ‰Ö¶ ‰¢Á ‰nXÎ ‰ é ‰)Æö ‰}äû ‰\× ‰§\A ‰ N ‰à\ ‰!üh ‰ÙWu ‰û…‚ ‰kr ‰Ÿ•– ‰¥e³ ‰c(º ‰%Ò ‰¤,Ù ‰æLñ ‰c(ø ‰ë$ ‰¤, ‰ñK9 ‰)@ ‰n] ‰ü,d ‰Ö” ‰Jˆ ‰ôÁ¥ ‰R¬ ‰<É ‰a Ð ‰í ‰Jô ‰} ‰+J ‰Öx5 ‰Q< ‰¿(Y ‰žU` ‰¯} ‰Ö„ ‰ÿ¨› ‰à² ‰àÎ ‰ïIÕ ‰Rhí ‰ùIô ‰¶Î ‰J ‰Úü5 ‰R< ‰)7Y ‰a ` ‰ÁK} ‰J„ ‰³V¡ ‰+J¨ ‰ÿ}Å ‰QÌ ‰ê¡é ‰žUð ‰]  ‰à( ‰àO ‰`2] ‰!üi ‰ÙWv ‰û…ƒ ‰kr ‰Ÿ•— ‰qô ‰c(» ‰¡âÓ ‰¤,Ú ‰tò ‰c(ù ‰Câ ‰¤, ‰.: ‰)A ‰C-^ ‰ü,e ‰dS‚ ‰J‰ ‰â¦ ‰R­ ‰>Ê ‰a Ñ ‰ÿ‘î ‰Jõ ‰Ì ‰+J ‰—M6 ‰Q= ‰®¬Z ‰žUa ‰›$~ ‰Ö… ‰.Bœ ‰`2³ ‰`2Ï ‰`2ë ‰ïIò ‰)Ø ‰ùI ‰. ‰J5 ‰a½R ‰`2m ‰`2Š ‰„c˜ ‰ž ‰}¦¥ ‰=ϳ ‰¶F¹ ‰D¿ ‰§Æ ‰(ƒÓ ‰ßà ‰¶&í ‰`F ‰ž— ‰ë(% ‰›WA ‰¡‡H ‰Äl ‰h}y ‰h† ‰Ū“ ‰…çŸ ‰r*¬ ‰múÆ ‰ˆî ‰,Óú ‰„U ‰mú! ‰ˆA ‰ª3a ‰on ‰Ñ{ ‰ŽD‰ ‰U°– ‰ÙW£ ‰kr° ‰C¬Ç ‰C¬ã ‰C¬ÿ ‰ie ‰;: ‰ïI% ‰O?= ‰Ÿ•D ‰ï‚a ‰c(h ‰©1€ ‰c(‡ ‰W1¤ ‰¤,« ‰‘[à ‰¤,Ê ‰üZç ‰ùIî ‰Ýô  ‰J ‰/ ‰)6 ‰°{S ‰ü,Z ‰Š¡w ‰J~ ‰!h› ‰R¢ ‰Ÿ¿ ‰a Æ ‰>¸ã ‰Jê ‰E  ‰+J ‰+e+ ‰Q2 ‰ O ‰žUV ‰gT{ ‰\ƈ ‰Is– ‰U°£ ‰ÙW° ‰kr½ ‰C¬Ô ‰C¬ð ‰C¬  ‰ie ‰§‘+ ‰ïI2 ‰=òJ ‰Ÿ•Q ‰*-n ‰c(u ‰¬ ‰c(” ‰± ‰¤,¸ ‰8;Ð ‰¤,× ‰j:ô ‰ùIû ‰ § ‰J ‰¬Ô< ‰)C ‰s\` ‰ü,g ‰ê‚„ ‰J‹ ‰R⨠‰R¯ ‰æÌ ‰a Ó ‰<ð ‰J÷ ‰:j ‰+J ‰½ö8 ‰Q? ‰NZ\ ‰žUc ‰Ö͈ ‰!J ‰8« ‰ Æ ‰õ¦Í ‰òÍê ‰â×ñ ‰–ü ‰â×  ‰ƒ9( ‰â×/ ‰ãLG ‰â×N ‰N(k ‰ôr ‰æÆ… ‰&2Œ ‰ƒ©ª ‰4P± ‰MÄ ‰ÇÊË ‰ÂÞ ‰~ñå ‰yb ‰~ñ  ‰( & ‰ð¯- ‰^ÈJ ‰&zQ ‰à d ‰À¢k ‰¦®~ ‰ • ‰ ± ‰ Ò ‰ ó ‰  ‰ 5 ‰ V ‰ w ‰ ˜ ‰ ¹ ‰ Õ ‰ ö ‰  ‰ = ‰ Y ‰ z ‰ › ‰ Á ‰ Ý ‰ þ ‰  ‰ E ‰ a ‰ } ‰ ™ ‰ º ‰ Û ‰ ÷ ‰  ‰^ ‰ê#2 ‰q9 ‰ÚŠQ ‰‘4X ‰$p ‰òêw ‰!, ‰y– ‰R® ‰:ǵ ‰?°Í ‰:ÇÔ ‰0?ó ‰Íé ‰šW* ‰Z81 ‰‚‡I ‰Z8P ‰Ä2h ‰No ‰éH‡ ‰NŽ ‰ û¦ ‰ÿB­ ‰_KÅ ‰Þ5Ì ‰ìHä ‰Ûë ‰<ý ‰Âl  ‰œl" ‰R¨) ‰&A ‰¡%H ‰’a ‰ªæh ‰‘ᆠ‰^ ‰]¶ ‰ú Î ‰•#Õ ‰1_í ‰¦Iô ‰äâ  ‰  ‰õ"0 ‰c`7 ‰ìpK ‰ËR ‰+@f ‰¢3m ‰ë… ‰dåŒ ‰ò¤ ‰+« ‰i‡É ‰»ßæ ‰îí ‰< ‰Û- ‰4 ‰¾Q ‰!îX ‰Z›v ‰œ3} ‰f–• ‰œ3œ ‰¤´ ‰Ÿ•» ‰‰™Ø ‰Ÿ•ß ‰­™ü ‰Ÿ• ‰¿™  ‰Ÿ•' ‰›™D ‰Ÿ•K ‰ âh ‰Ÿ•o ‰Â⌠‰Ÿ•“ ‰Óâ° ‰Ÿ•· ‰±âÔ ‰ŠMÛ ‰ã•ó ‰múú ‰r. ‰IN ‰§É1 ‰– 8 ‰ç{P ‰ÓW ‰¹ýo ‰_v ‰D“ ‰¿êš ‰V`² ‰,Œ¹ ‰9Ò ‰,ŒÙ ‰Cí ‰,Œô ‰w¡ ‰½h ‰C' ‰,Œ. ‰DCB ‰,ŒI ‰)b ‰·i ‰L2‚ ‰¸I‰ ‰Åô¢ ‰2‚© ‰ë‰Á ‰èëÈ ‰½¸à ‰©Àç ‰jà ‰©À ‰ ‰IL" ‰=: ‰»åA ‰âÿ^ ‰”*e ‰p-} ‰{¬„ ‰tþœ ‰{¬£ ‰|À ‰‡ÖÇ ‰@nß ‰¹ æ ‰Öýþ ‰!J! ‰"±"! ‰!J)! ‰z)F! ‰!JM! ‰¼Ej! ‰!Jq! ‰úŽ! ‰!J•! ‰²! ‰!J¹! ‰'Ö! ‰!JÝ! ‰Åú! ‰!J" ‰só" ‰!J%" ‰ÓóB" ‰!JI" ‰†óf" ‰!Jm" ‰˜Š" ‰!J‘" ‰úl®" ‰üPµ" ‰ÏÒ" ‰üPÙ" ‰Àeö" ‰üPý" ‰f# ‰üP!# ‰ñ|># ‰üPE# ‰ÞFb# ‰üPi# ‰l7†# ‰üP# ‰¼Xª# ‰üP±# ‰DYÎ# ‰üPÕ# ‰ÚYò# ‰üPù# ‰ê$ ‰üP$ ‰õ;:$ ‰ZoA$ ‰U^$ ‰Zoe$ ‰ÏF‚$ ‰Zo‰$ ‰GG¦$ ‰Zo­$ ‰»·Ê$ ‰ZoÑ$ ‰Y~î$ ‰Zoõ$ ‰g¨% ‰Zo% ‰);% ‰ZoB% ‰/Ud% ‰Zok% ‰Tc% ‰Zo”% ‰o¶% ‰Zo½% ‰¤ðß% ‰Zoæ% ‰²S& ‰Zo& ‰FK1& ‰Zo8& ‰¹ÔZ& ‰Zoa& ‰èáƒ& ‰ZoŠ& ‰‘¬& ‰“J³& ‰ì Ð& ‰üP×& ‰UYô& ‰üPû& ‰fY' ‰üP' ‰wY<' ‰üPC' ‰ˆY`' ‰üPg' ‰ëY„' ‰üP‹' ‰üY¨' ‰üP¯' ‰íXÌ' ‰üPÓ' ‰ÍX÷' ‰–¹( ‰º?( ‰KÂc( ‰Ô"‡( ‰È(«( ‰>XÈ( ‰RnÏ( ‰cRì( ‰Šó( ‰ÝÍ) ‰Š) ‰š&>) ‰ŠE) ‰kRg) ‰Šn) ‰S) ‰Š—) ‰¶;¹) ‰ŠÀ) ‰ácâ) ‰Šé) ‰ó~ * ‰Š* ‰ ò4* ‰Š;* ‰ü]* ‰Šd* ‰¸†* ‰Š* ‰—(¯* ‰Š¶* ‰¼ß* ‰€£+ ‰Y+ ‰I<*+ ‰ð 1+ ‰øÎS+ ‰ɵZ+ ‰rµ|+ ‰wƒ+ ‰ü + ‰!§+ ‰P€Ä+ ‰åË+ ‰ÙÒí+ ‰nVô+ ‰Þ¤, ‰åà, ‰.[:, ‰¼0A, ‰ƒ^, ‰çýe, ‰¸¸‚, ‰'‰, ‰ ª¦, ‰`]­, ‰ÜâÅ, ‰­Ì, ‰dä, ‰nçë, ‰ã- ‰Ÿ­ - ‰¹F"- ‰=ã)- ‰UA- ‰QH- ‰Êš`- ‰g- ‰Ø/‹- ‰Få²- ‰Ñ#¹- ‰VÛ- ‰Ñ#â- ‰ðR. ‰Ñ# . ‰ú-. ‰Ñ#4. ‰!V. ‰Ñ#]. ‰uA. ‰Ñ#†. ‰A§£. ‰Ñ#ª. ‰Ç. ‰Ñ#Î. ‰R%ë. ‰Ñ#ò. ‰rú/ ‰Ñ#/ ‰Ço3/ ‰Ñ#:/ ‰˜W/ ‰\n^/ ‰ô¼…/ ‰ijŒ/ ‰[s©/ ‰-€°/ ‰ª[Ò/ ‰ôDÙ/ ‰€ û/ ‰5´0 ‰Í/$0 ‰{L+0 ‰(ùM0 ‰b9T0 ‰ôqq0 ‰Œïx0 ‰¯Dš0 ‰Z¡0 ‰<Ã0 ‰ê¶Ê0 ‰›óç0 ‰¾ºî0 ‰x1 ‰ÑÆ1 ‰%g'1 ‰±=.1 ‰<ÂK1 ‰[R1 ‰9`t1 ‰!m{1 ‰zâ1 ‰–1 ‰y¯1 ‰ÉD¶1 ‰Ó1 ‰Å4Ú1 ‰\Öò1 ‰íù1 ‰) 2 ‰àÅ"2 ‰´@?2 ‰ÜžF2 ‰«ïh2 ‰ o2 ‰þæ‡2 ‰‡ Ž2 ‰´ç«2 ‰-²2 ‰k(7 ‰|¸/7 ‰“ÛQ7 ‰|¸X7 ‰ô¶z7 ‰|¸7 ‰^a£7 ‰|¸ª7 ‰š¨Ì7 ‰|¸Ó7 ‰ˆ,õ7 ‰|¸ü7 ‰Ÿ,8 ‰|¸%8 ‰A-G8 ‰|¸N8 ‰}p8 ‰|¸w8 ‰ ™8 ‰|¸ 8 ‰/Â8 ‰|¸É8 ‰É4ë8 ‰îðò8 ‰‚—9 ‰îð9 ‰’H89 ‰îð?9 ‰G­f9 ‰îðm9 ‰ºÔŠ9 ‰îð‘9 ‰¯Ö®9 ‰îðµ9 ‰ùl×9 ‰îðÞ9 ‰C¦: ‰îð: ‰S$: ‰îð+: ‰Ó6H: ‰îðO: ‰'+l: ‰îðs: ‰õð•: ‰îðœ: ‰¬8¾: ‰îðÅ: ‰oç: ‰îðî: ‰þ>; ‰îð; ‰r.9; ‰îð@; ‰é³b; ‰îði; ‰´‹; ‰îð’; ‰ˆµ´; ‰îð»; ‰Â"Ý; ‰îðä; ‰v< ‰îð < ‰‚£/< ‰îð6< ‰ÿÊX< ‰8Â_< ‰®‰|< ‰8ƒ< ‰Ð, < ‰8§< ‰ˆ-Ä< ‰8ÂË< ‰Éíè< ‰8Âï< ‰!Û = ‰8Â= ‰ 0= ‰8Â7= ‰ô;^= ‰8Âe= ‰k–= ‰8Â= ‰ZÓÉ= ‰8ÂÐ= ‰aþü= ‰w'> ‰(l%> ‰w',> ‰Ü+X> ‰w'_> ‰›`> ‰w'ˆ> ‰/aª> ‰w'±> ‰|òØ> ‰w'ß> ‰Í? ‰w' ? ‰Z4? ‰w';? ‰?®]? ‰w'd? ‰òS‡? ‰w'Ž? ‰œé±? ‰w'¸? ‰A‡Û? ‰w'â? ‰jV@ ‰w' @ ‰?4/@ ‰ Ì6@ ‰š X@ ‰ Ì_@ ‰]Z@ ‰ ̈@ ‰< ¥@ ‰ø.¬@ ‰ÔÀ@ ‰LûÇ@ ‰»Ìî@ ‰Lûõ@ ‰=+A ‰Lû#A ‰ûÑJA ‰LûQA ‰!M}A ‰Lû„A ‰³TµA ‰Lû¼A ‰Í^èA ‰LûïA ‰Í‹B ‰Lû"B ‰QîNB ‰LûUB ‰¥œ|B ‰LûƒB ‰'ªB ‰Lû±B ‰r¹ÝB ‰LûäB ‰ÏãC ‰LûC ‰’5>C ‰LûEC ‰ÖìqC ‰LûxC ‰»¤C ‰Lû«C ‰ÏÑ×C ‰LûÞC ‰™m D ‰¾¨D ‰$Å*D ‰Íý1D ‰Y’SD ‰ÍýZD ‰Æ D ‰ÍýˆD ‰Xò¯D ‰Íý¶D ‰é¸ÝD ‰ÍýäD ‰ƒ¯ E ‰ÍýE ‰Fƒ9E ‰Íý@E ‰ÑRbE ‰ÍýiE ‰>y‹E ‰Íý’E ‰8©´E ‰Íý»E ‰ɳÝE ‰ÍýäE ‰ÖF ‰.Ë F ‰jå/F ‰.Ë6F ‰ê]F ‰.ËdF ‰Ä?‹F ‰.Ë’F ‰ô&¹F ‰.ËÀF ‰»ÊçF ‰.ËîF ‰žKG ‰.ËG ‰Nx>G ‰.ËEG ‰ȤgG ‰.ËnG ‰¨æG ‰.Ë—G ‰¨ô¹G ‰.ËÀG ‰XâG ‰˜3éG ‰d  H ‰˜3H ‰@õ4H ‰˜3;H ‰Ñ*]H ‰˜3dH ‰úŽ‹H ‰˜3’H ‰!v¹H ‰˜3ÀH ‰‘pâH ‰CSéH ‰Â I ‰CSI ‰ta4I ‰CS;I ‰L‘]I ‰CSdI ‰«S‹I ‰CS’I ‰Q~¹I ‰CSÀI ‰ƒzâI ‰~éI ‰ôj J ‰~J ‰~,4J ‰~;J ‰æ[]J ‰~dJ ‰¢‹J ‰~’J ‰»Š¹J ‰~ÀJ ‰•âJ ‰;péJ ‰Tñ K ‰;pK ‰R‰4K ‰;p;K ‰|¾]K ‰;pdK ‰Xl‹K ‰;p’K ‰+]¹K ‰;pÀK ‰j âK ‰˜3éK ‰Ú L ‰˜3L ‰â“4L ‰˜3;L ‰¼ž]L ‰˜3dL ‰’¿†L ‰CSL ‰Pg¯L ‰CS¶L ‰©[ØL ‰CSßL ‰|gM ‰CSM ‰c*M ‰~1M ‰ïØSM ‰~ZM ‰*7|M ‰~ƒM ‰‹D¥M ‰~¬M ‰ädÎM ‰;pÕM ‰¬÷M ‰;pþM ‰ªó N ‰;p'N ‰wÿIN ‰;pPN ‰&ŸrN ‰˜3yN ‰#›N ‰˜3¢N ‰DÄN ‰˜3ËN ‰µÙíN ‰˜3ôN ‰äO ‰˜3"O ‰ǪIO ‰˜3PO ‰DwO ‰CS~O ‰ˆ O ‰CS§O ‰RßÉO ‰CSÐO ‰ŠÃòO ‰CSùO ‰CÈ P ‰CS'P ‰ýÚNP ‰CSUP ‰§u|P ‰~ƒP ‰R ¥P ‰~¬P ‰ÁKÎP ‰~ÕP ‰Å÷P ‰~þP ‰%Q ‰~,Q ‰¹SQ ‰~ZQ ‰ÿrQ ‰;pˆQ ‰¦êªQ ‰;p±Q ‰1ÎÓQ ‰;pÚQ ‰ï®üQ ‰;pR ‰õ&*R ‰;p1R ‰yXR ‰;p_R ‰{ †R ‰)R ‰€$ªR ‰)±R ‰ó”ÎR ‰)ÕR ‰ •òR ‰)ùR ‰œ2S ‰)S ‰Qž:S ‰)AS ‰:Å^S ‰)eS ‰Û‚S ‰)‰S ‰è¦S ‰)­S ‰ÊS ‰)ÑS ‰¢ îS ‰)õS ‰ò T ‰)T ‰«6T ‰‰z=T ‰þ´ZT ‰ñ‘aT ‰ñ¡uT ‰àË|T ‰"\˜T ‰uèŸT ‰ö'ÅT ‰cäT ‰ÃíT ‰½òT ‰r9U ‰‘>U ‰$–U ‰òIU ‰Ùÿ)U ‰?O7U ‰‚>U ‰ÀÒCU ‰°¡NU ‰ŠœYU ‰ídU ‰¾¼uU ‰òšU ‰œžU ‰4=¥U ‰€‡ªU ‰àâ·U ‰$½U ‰WÃU ‰(aÉU ‰&iÐU ‰pÝU ‰IãU ‰§ éU ‰ÏðU ‰Q÷U ‰ЭþU ‰× V ‰• V ‰;¦V ‰(V ‰…¾V ‰c&V ‰‰x.V ‰¿ ;V ‰+"AV ‰Î’JV ‰ŸþSV ‰K \V ‰JGeV ‰XoV ‰3yV ‰ÒƒV ‰%ŽV ‰&›V ‰µ´¡V ‰¦ §V ‰Ü®V ‰nƒ»V ‰ånÃV ‰¨ÿÊV ‰–ÐV ‰$ÖV ‰àîÜV ‰Ñ}ãV ‰äãêV ‰3XñV ‰îÛøV ‰¨ÿV ‰ÌW ‰l W ‰‰W ‰$W ‰Ã"W ‰ÄÕ)W ‰ß80W ‰’¤7W ‰Á>W ‰Ò˜EW ‰TœLW ‰QSW ‰ ÒZW ‰9ÚaW ‰y hW ‰ÓùoW ‰Ô,vW ‰°ê}W ‰„#„W ‰î2‹W ‰%Ë’W ‰™W ‰F W ‰@á§W ‰¤®W ‰p`µW ‰œï¼W ‰jlÃW ‰ÛTÊW ‰m2ÑW ‰Z,ØW ‰ËôßW ‰rÖæW ‰<~íW ‰ÐôW ‰³ ûW ‰æNX ‰Žz X ‰¼X ‰’›X ‰o2X ‰z2%X ‰…2,X ‰23X ‰›2:X ‰¦2AX ‰±2HX ‰¼2OX ‰Ç2VX ‰c@]X ‰¡ÙdX ‰®CkX ‰xºrX ‰©=yX ‰€X ‰µ¹‡X ‰°ŽX ‰6 •X ‰þ.œX ‰Μ£X ‰ñ|ªX ‰ l±X ‰Ô¬¸X ‰Î¿X ‰9–ÆX ‰Í/ÍX ‰ìÎÔX ‰¥ÒÛX ‰ñˆâX ‰OéX ‰êYðX ‰v$÷X ‰×aþX ‰„+Y ‰6” Y ‰ð Y ‰ñOY ‰’l!Y ‰Ýê(Y ‰sY/Y ‰¦=6Y ‰B=Y ‰måDY ‰ùÜKY ‰›HRY ‰8ÿYY ‰4A`Y ‰ì»gY ‰·ŠnY ‰þuY ‰ |Y ‰ôöƒY ‰ô“ŠY ‰‘Y ‰¸D˜Y ‰$*ŸY ‰6ê¦Y ‰gº­Y ‰63´Y ‰ºH»Y ‰óÂY ‰¤ÔÉY ‰ã ÐY ‰£º×Y ‰§ ÞY ‰dåY ‰ 'ìY ‰ óY ‰`úY ‰•pZ ‰uáZ ‰”:Z ‰uQZ ‰ùKZ ‰ùô$Z ‰í +Z ‰áA2Z ‰.9Z ‰J@Z ‰[BGZ ‰¥RNZ ‰ù/UZ ‰'\Z ‰¡cZ ‰‹ÛjZ ‰óqZ ‰t”xZ ‰ ùZ ‰FA†Z ‰ÿZ ‰ïÕ•Z ‰ˆ† Z ‰uÁ­Z ‰Ò³Z ‰¶,¹Z ‰m³¿Z ‰lÅZ ‰ŒËZ ‰™CÒZ ‰RìßZ ‰ø=åZ ‰ºÉëZ ‰JæòZ ‰€ŒÿZ ‰i[ ‰È÷ [ ‰½k[ ‰yš[ ‰å÷[ ‰¶C#[ ‰ZY)[ ‰‡š/[ ‰­C5[ ‰Å÷;[ ‰ëXA[ ‰A™G[ ‰.÷M[ ‰-¤S[ ‰vY[ ‰»‡_[ ‰zÞe[ ‰M,k[ ‰DEq[ ‰Fx[ ‰ø¥[ ‰cÏ·[ ‰Ü+¼[ ‰^dÁ[ ‰ºÍ[ ‰‡JÒ[ ‰v,ä[ ‰íë[ ‰÷[ ‰1g\ ‰]•\ ‰ýN\ ‰SB\\ ‰ãe\ ‰‘Z~\ ‰z<Œ\ ‰2ä•\ ‰‘Z®\ ‰«—¼\ ‰0dÅ\ ‰‘ZÞ\ ‰á!é\ ‰ñÙõ\ ‰æa] ‰xÓ!] ‰ -] ‰)d9] ‰k®E] ‰EðQ] ‰Wæ]] ‰qi] ‰‰@u] ‰9Ö] ‰È] ‰U™] ‰Êž¦] ‰¥†±] ‰*K½] ‰É] ‰µ‡Ï] ‰¹CÖ] ‰ßâ] ‰s¼î] ‰Toú] ‰òð^ ‰*K*^ ‰£ÎA^ ‰ÜM^ ‰ CU^ ‰ñ<`^ ‰mti^ ‰¤öt^ ‰-^ ‰ºˆ^ ‰3‘^ ‰¶„˜^ ‰Mú«^ ‰O²^ ‰ã5Å^ ‰*ÃÌ^ ‰Îß^ ‰‹½_ ‰Ý _ ‰‘Å!_ ‰ü,_ ‰=~7_ ‰³C_ ‰o€V_ ‰o€€_ ‰Èæ_ ‰nߺ_ ‰€ûÏ_ ‰ªÜ_ ‰¼è_ ‰Ïbþ_ ‰#º` ‰]+"` ‰œ4(` ‰"6A` ‰Ïb\` ‰!Jb` ‰!` ‰¡Íš` ‰{® ` ‰¦ò¸` ‰/‹¾` ‰1Ò` ‰múØ` ‰‚ð` ‰múö` ‰Ðòa ‰¤a ‰­,a ‰Ÿ•2a ‰’œOa ‰ÿBUa ‰¸]ma ‰4sa ‰;}a ‰sƃa ‰—a ‰T‰a ‰~±a ‰iš·a ‰”þÐa ‰™Öa ‰é‡üa ‰ð¤b ‰ŸØb ‰o€&b ‰o€Pb ‰éxmb ‰N#Šb ‰€ûŸb ‰ª¬b ‰¼¸b ‰ÏbÎb ‰#ºÔb ‰4pòb ‰œ4øb ‰«c ‰Ïb,c ‰!J2c ‰)]Oc ‰¡Íjc ‰{®pc ‰ãÀˆc ‰/‹Žc ‰¶Y¢c ‰mú¨c ‰ßÀc ‰múÆc ‰„7Þc ‰¤äc ‰>üc ‰Ÿ•d ‰¹d ‰ÿB%d ‰ßt=d ‰4Cd ‰PMd ‰sÆSd ‰Üûgd ‰T‰md ‰U–d ‰iš‡d ‰Éç d ‰™¦d ‰ûd ‰]e ‰¼e ‰ñ?e ‰ñ[e ‰ñwe ‰!J~e ‰ÿ›e ‰!J¢e ‰œh¿e ‰ñÛe ‰!Jâe ‰ß¼ÿe ‰6Ïf ‰â#f ‰dn*f ‰«¼hf ‰ס|f ‰¸U‰f ‰øF–f ‰ס·f ‰סØf ‰סôf ‰סg ‰סFg ‰PRg ‰ß^g ‰ÏÅjg ‰òðvg ‰Pšg ‰Pµg ‰PÐg ‰Pëg ‰…Àh ‰—t h ‰’$h ‰Ee*h ‰˜ŽBh ‰àËHh ‰Ó`h ‰¶”fh ‰4)~h ‰ „h ‰½_œh ‰Ï¢h ‰”Gºh ‰Àh ‰×óØh ‰uèÞh ‰bìöh ‰º¡üh ‰™Þi ‰˜«i ‰{ƒ2i ‰Ü‚8i ‰7 Pi ‰Ÿ•Vi ‰PHsi ‰Ÿ•yi ‰H–i ‰Ÿ•œi ‰;H¹i ‰Ÿ•¿i ‰&HÜi ‰ùIâi ‰´ÿi ‰ùIj ‰£´"j ‰ùI(j ‰¸´Ej ‰JKj ‰÷Ûhj ‰ïInj ‰Pû²j ‰Åj ‰¼Ñj ‰ñöj ‰ñk ‰ñ.k ‰!J5k ‰ðvRk ‰!JYk ‰zšvk ‰ñ’k ‰!J™k ‰è¶k ‰6Ͻk ‰SàÚk ‰dnák ‰­Ñl ‰$ø+l ‰‘š?l ‰¼Ll ‰Åmhl ‰Åm‰l ‰b#l ‰|è°l ‰«K¼l ‰öÐl ‰¼Ýl ‰Åmùl ‰Åmm ‰ð4!m ‰R<Am ‰ÉFm ‰fRm ‰ÕÕXm ‰[9^m ‰_bdm ‰xbjm ‰‘bpm ‰ªbvm ‰Ãb|m ‰Üb‚m ‰õbˆm ‰cŽm ‰'c”m ‰ššm ‰´ m ‰Î¦m ‰è¬m ‰²m ‰¸m ‰ñ`¾m ‰|+Äm ‰ÓÊm ‰.ÀÐm ‰%NÖm ‰_éÜm ‰¯üâm ‰tmèm ‰õüîm ‰›þôm ‰Lúm ‰Ân ‰×n ‰6’ n ‰¬“n ‰Øzn ‰îzn ‰{$n ‰!.*n ‰0{0n ‰F{6n ‰\{:ßn ‰«zæn ‰«öín ‰Côn ‰‰Xûn ‰>o ‰_ö o ‰‡Bo ‰Âno ‰F,o ‰ÔÛ%o ‰yö,o ‰Êw3o ‰kÂ:o ‰ —Ao ‰b­Ho ‰§AOo ‰ÔvVo ‰Äé]o ‰?>do ‰äko ‰¬ro ‰žyo ‰ã€o ‰È ‡o ‰E¢Žo ‰ §•o ‰,N›o ‰l;¢o ‰ª•¨o ‰™®o ‰:=´o ‰ºo ‰Ø Ào ‰>ÙÆo ‰6mÌo ‰­2Òo ‰1'äo ‰pzôo ‰Ùtüo ‰öm p ‰Ùtp ‰ap ‰=Ã,p ‰Ùt4p ‰ _Dp ‰ÙtLp ‰˜˜^p ‰Ùtfp ‰qÓxp ‰Ùt€p ‰ ”p ‰Ùt¥p ‰É¢­p ‰‚Àp ‰úQÓp ‰Ñæp ‰¶›r ‰€<§r ‰}!²r ‰ɉ½r ‰îðÃr ‰"ár ‰È@þr ‰…–s ‰8Âs ‰ ‹:s ‰ÿBAs ‰wTs ‰Íý[s ‰p“xs ‰-,s ‰üˆœs ‰¸Ê£s ‰æ¢Às ‰îðÇs ‰Döäs ‰ñ$ës ‰Ä‹t ‰ q t ‰§Øt ‰-$t ‰ªCt ‰·CLt ‰šÉSt ‰Ñ#ct ‰Vnt ‰¸û{t ‰}!‡t ‰ɉ“t ‰îðšt ‰*&¹t ‰Ðu×t ‰‡ït ‰8Âöt ‰t¨u ‰ÿBu ‰›-u ‰Íý4u ‰.‰Qu ‰-,Xu ‰ œuu ‰¸Ê|u ‰/î™u ‰îð u ‰–½u ‰ñ$Äu ‰òÜu ‰ qãu ‰öu ‰-ýu ‰>v ‰+»%v ‰šÉ,v ‰-Ov ‰Ë_bv ‰onv ‰°Izv ‰+?†v ‰kr’v ‰Ö­žv ‰& ´v ‰& Ïv ‰¡¿êv ‰z2óv ‰r÷þv ‰93w ‰Zï!w ‰o-w ‰kr9w ‰Ö­Ew ‰& [w ‰& vw ‰¡¿¨w ‰©¹´w ‰ãÇw ‰ã;Ôw ‰ãñw ‰oýw ‰h}x ‰)íx ‰€a(x ‰kr4x ‰Ö­@x ‰àLx ‰`2Xx ‰\Ædx ‰Ñpx ‰o›|x ‰!ˆx ‰š”x ‰CŸ¡x ‰æó³x ‰$þx ‰ù–Éx ‰áNÔx ‰y¬Úx ‰)ãx ‰tòéx ‰/y ‰x\y ‰ðÅy ‰i#y ‰vë6y ‰öC~ ‰!JE~ ‰y“b~ ‰!Ji~ ‰ËɆ~ ‰:Ç~ ‰¿¢¥~ ‰:Ǭ~ ‰ÈÙË~ ‰Âê~ ‰|w ‰Z8  ‰¾! ‰Z8( ‰ªˆ@ ‰NG ‰GO_ ‰Nf ‰ÉO~ ‰Þ5… ‰²¢ ‰ÿB¤ ‰Â~¼ ‰Ûà ‰kUÛ ‰ªæâ ‰ò€ ‰ªæ€ ‰¤d € ‰R¨'€ ‰Ç–?€ ‰¡%F€ ‰ôf_€ ‰ø.f€ ‰é‹z€ ‰Âl€ ‰ü’™€ ‰Ÿ• € ‰þ½€ ‰Ÿ•Ä€ ‰O!ç€ ‰Û_ ‰X‚' ‰). ‰ÙœK ‰)R ‰tÿo ‰)v ‰‰J“ ‰|¸š ‰Óš· ‰|¸¾ ‰~lå ‰|¸ì ‰Á$‚ ‰|¸‚ ‰æÅ2‚ ‰|¸9‚ ‰™¥[‚ ‰¢_b‚ ‰’±{‚ ‰îð‚ ‰‹Až‚ ‰î𥂠‰Ö Ì‚ ‰îðÓ‚ ‰·.õ‚ ‰îðü‚ ‰Óõƒ ‰îð ƒ ‰Ÿ÷Bƒ ‰w'Iƒ ‰Ì„lƒ ‰w'sƒ ‰Æ•ƒ ‰w'œƒ ‰C\ȃ ‰w'σ ‰o£öƒ ‰w'ýƒ ‰Û·„ ‰w'&„ ‰È\M„ ‰w'T„ ‰ì«v„ ‰ Ì}„ ‰×–Ÿ„ ‰ ̦„ ‰?ÆÄ ‰ ÌÊ„ ‰qòì„ ‰Lûó„ ‰œÁ… ‰Lû!… ‰9ëR… ‰LûY… ‰Í©…… ‰LûŒ… ‰£³… ‰Lûº… ‰xDæ… ‰Lûí… ‰z¹† ‰Lû† ‰DKG† ‰LûN† ‰,u† ‰Lû|† ‰¾O¨† ‰Lû¯† ‰à1Û† ‰Lû↠‰›J‡ ‰Lû‡ ‰h›A‡ ‰LûH‡ ‰Öt‡ ‰‡ü{‡ ‰¿³¦‡ ‰n­‡ ‰öâØ‡ ‰V|߇ ‰Îü‡ ‰£6ˆ ‰ß5ˆ ‰¸Ê&ˆ ‰ôØMˆ ‰¾¨Tˆ ‰ÞXmˆ ‰ŠMtˆ ‰¿Œˆ ‰mú“ˆ ‰;[«ˆ ‰[˜²ˆ ‰fʈ ‰Íýш ‰lyøˆ ‰Íýÿˆ ‰Dy!‰ ‰Íý(‰ ‰|J‰ ‰ÍýQ‰ ‰×s‰ ‰.Ëz‰ ‰43œ‰ ‰.Ë£‰ ‰w‰ʉ ‰.Ëщ ‰«öó‰ ‰.Ëú‰ ‰ÛèŠ ‰˜3#Š ‰cEŠ ‰˜3LŠ ‰µqsŠ ‰˜3zŠ ‰:[œŠ ‰˜3£Š ‰ê4ÅŠ ‰CSÌŠ ‰ðªîŠ ‰CSõŠ ‰†û‹ ‰CS#‹ ‰ÿVE‹ ‰CSL‹ ‰[Ãn‹ ‰~u‹ ‰ã—‹ ‰~ž‹ ‰‚ Å‹ ‰~Ì‹ ‰C¡î‹ ‰~õ‹ ‰àäŒ ‰;pŒ ‰˜•@Œ ‰;pGŒ ‰÷nŒ ‰;puŒ ‰pF—Œ ‰;pžŒ ‰„3ÀŒ ‰^ÇŒ ‰ΡéŒ ‰8ÂðŒ ‰(  ‰8 ‰ \; ‰8ÂB ‰0us ‰8Âz ‰M— ‰8ž ‰ÏÅ ‰8ÂÌ ‰çßý ‰õPŽ ‰žLŽ ‰²Ž ‰cŽ ‰U(Ž ‰P¥4Ž ‰ãGŽ ‰ã;TŽ ‰ãqŽ ‰o}Ž ‰h}Ž ‰)휎 ‰€a¨Ž ‰kr´Ž ‰Ö­ÀŽ ‰àÌŽ ‰`2ØŽ ‰\ÆäŽ ‰ÑðŽ ‰o›üŽ ‰! ‰š ‰CŸ! ‰æó3 ‰$Ã> ‰ù–I ‰áNT ‰y¬Z ‰›mc ‰tòi ‰áè€ ‰x\† ‰,# ‰i£ ‰yM¶ ‰öC¼ ‰ë¹Ï ‰r’Õ ‰gí ‰Vfó ‰UO ‰ÍÕ ‰Ʊ1 ‰šÔ8 ‰UiU ‰ÖE[ ‰×s ‰¦z ‰[W’ ‰n¬™ ‰-Œ° ‰/· ‰(ZÕ ‰̆Ü ‰óó ‰̆ú ‰@}‘ ‰E¢‘ ‰!=4‘ ‰i%;‘ ‰ýÂR‘ ‰BzY‘ ‰jƒp‘ ‰ysw‘ ‰ŸµŠ‘ ‰z©‘‘ ‰|¼²‘ ‰,)¹‘ ‰:.Û‘ ‰Haâ‘ ‰Ú6’ ‰ñŒ ’ ‰ß¶&’ ‰ø]-’ ‰E¿F’ ‰ãM’ ‰Af’ ‰)Im’ ‰h†’ ‰³i’ ‰ w¦’ ‰³i­’ ‰ô‹Æ’ ‰³iÍ’ ‰±Eæ’ ‰³ií’ ‰Î “ ‰f “ ‰Qm%“ ‰ŸV,“ ‰ÊÝN“ ‰µ`U“ ‰E4h“ ‰y¬o“ ‰àOx“ ‰Iþ“ ‰Iþª“ ‰IþÅ“ ‰Iþê“ ‰Iþ” ‰Iþ9” ‰IþY” ‰Iþ~” ‰•š” ‰!J¡” ‰h¼¾” ‰!JÅ” ‰®â” ‰!Jé” ‰¥­• ‰:Ç • ‰ %• ‰:Ç,• ‰»K• ‰H¬j• ‰T‚• ‰Z8‰• ‰ã¡• ‰Z8¨• ‰QÀ• ‰NÇ• ‰²ß• ‰Næ• ‰ŒUþ• ‰Þ5– ‰î­– ‰ÿB$– ‰Òµ<– ‰ÛC– ‰f5[– ‰ªæb– ‰ok€– ‰ªæ‡– ‰Tˆ – ‰R¨§– ‰o`¿– ‰¡%Æ– ‰—¼ß– ‰ø.æ– ‰pÛú– ‰Âl— ‰|— ‰Ÿ• — ‰ñ=— ‰Ÿ•D— ‰Ú´g— ‰JzŠ— ‰Çö§— ‰)®— ‰DQË— ‰)Ò— ‰!™ï— ‰)ö— ‰Ò˜ ‰|¸˜ ‰ðÏ7˜ ‰|¸>˜ ‰–0e˜ ‰|¸l˜ ‰…!Ž˜ ‰|¸•˜ ‰ïl²˜ ‰|¸¹˜ ‰§íÛ˜ ‰¢_☠‰ÉMû˜ ‰îð™ ‰L™ ‰îð%™ ‰K’L™ ‰îðS™ ‰E¡u™ ‰îð|™ ‰ÇÖ™™ ‰îð ™ ‰é™ ‰w'É™ ‰`kì™ ‰w'ó™ ‰1bš ‰w'𠉕 Hš ‰w'Oš ‰k˜vš ‰w'}š ‰@lŸš ‰w'¦š ‰Y7Íš ‰w'Ôš ‰Ùøöš ‰ Ìýš ‰ع› ‰ Ì&› ‰º£C› ‰ ÌJ› ‰Û l› ‰Lûs› ‰Íš› ‰Lû¡› ‰^%Ò› ‰LûÙ› ‰_Cœ ‰Lû œ ‰s~3œ ‰Lû:œ ‰7 fœ ‰Lûmœ ‰¬ß”œ ‰Lû›œ ‰c Çœ ‰LûΜ ‰–Dõœ ‰Lûüœ ‰Æy( ‰Lû/ ‰ò[ ‰Lûb ‰¯ Ž ‰Lû• ‰ˆOÁ ‰LûÈ ‰@ô ‰‡üû ‰¯&ž ‰n-ž ‰€…Xž ‰V|_ž ‰OÚ|ž ‰£6‚ž ‰ÝÆŸž ‰¸Ê¦ž ‰‚ÓÍž ‰¾¨Ôž ‰ íž ‰ŠMôž ‰CÒ Ÿ ‰múŸ ‰}œ+Ÿ ‰[˜2Ÿ ‰\JŸ ‰ÍýQŸ ‰š3xŸ ‰ÍýŸ ‰ªs¡Ÿ ‰Íý¨Ÿ ‰)cÊŸ ‰ÍýÑŸ ‰èóŸ ‰.ËúŸ ‰Aõ  ‰.Ë#  ‰xeJ  ‰.ËQ  ‰Á¬s  ‰.Ëz  ‰¨œ  ‰˜3£  ‰×§Å  ‰˜3Ì  ‰¬ó  ‰˜3ú  ‰ó¡ ‰˜3#¡ ‰ÅòE¡ ‰CSL¡ ‰Æn¡ ‰CSu¡ ‰_Gœ¡ ‰CS£¡ ‰ºÅ¡ ‰CSÌ¡ ‰tÇî¡ ‰~õ¡ ‰A¢ ‰~¢ ‰ŸE¢ ‰~L¢ ‰7n¢ ‰~u¢ ‰.—¢ ‰;pž¢ ‰’ûÀ¢ ‰;pÇ¢ ‰àÖî¢ ‰;põ¢ ‰>Û£ ‰;p£ ‰<·@£ ‰^G£ ‰ÒÂi£ ‰8Âp£ ‰É.£ ‰8”£ ‰©â»£ ‰8£ ‰÷uó£ ‰8Âú£ ‰u/¤ ‰8¤ ‰g*E¤ ‰8ÂL¤ ‰V}¤ ‰õP†¤ ‰žL¤ ‰²™¤ ‰9wž¤ ‰üí¨¤ ‰Ï³¤ ‰)È¿¤ ‰û…ʤ ‰°IÕ¤ ‰krठ‰ oõ¤ ‰€–¥ ‰ñ< ¥ ‰ïv,¥ ‰ñ<K¥ ‰dYV¥ ‰I†c¥ ‰-õo¥ ‰¤T{¥ ‰‡n‡¥ ‰YŽ¥ ‰6@±¥ ‰ÿÙº¥ ‰óïÇ¥ ‰zÔ¥ ‰ᥠ‰Nî¥ ‰óï ¦ ‰“s¦ ‰í'¦ ‰Í.¦ ‰¹¥J¦ ‰JQ¦ ‰R"m¦ ‰Èt¦ ‰<)œ¦ ‰ì ©¦ ‰“s°¦ ‰6IǦ ‰“sΦ ‰úæ¦ ‰Ü4ï¦ ‰íNþ¦ ‰ˆî § ‰K™§ ‰O³'§ ‰L·5§ ‰R·C§ ‰ñ)O§ ‰õ‡\§ ‰|¸c§ ‰¾¬z§ ‰äLª§ ‰ªî±§ ‰¥Χ ‰gâÕ§ ‰Џü§ ‰g⨠‰¾w%¨ ‰f,¨ ‰Ô¸S¨ ‰ŒÔZ¨ ‰K'x¨ ‰7E¨ ‰­Ó¨ ‰”d¤¨ ‰ùA½¨ ‰n(ƨ ‰é¤Ϩ ‰ÚPب ‰‰Só¨ ‰#cü¨ ‰´ © ‰ð"© ‰è;.© ‰(4:© ‰é¤C© ‰´ N© ‰[© ‰É<g© ‰Ÿ•n© ‰íŠ© ‰n(“© ‰é¤¥© ‰êï© ‰íN¹© ‰ö¾© ‰P•é ‰IÑÕ© ‰°Iá© ‰krí© ‰¹ºª ‰¹º#ª ‰¹º>ª ‰ïIEª ‰@´\ª ‰-cª ‰Özª ‰c(ª ‰à]˜ª ‰c(Ÿª ‰”]»ª ‰é¤Ī ‰S}Ϊ ‰õÙª ‰ ¸ìª ‰°Iøª ‰kr« ‰êô« ‰êô:« ‰êôU« ‰êôp« ‰ïIw« ‰÷Ž« ‰-•« ‰uÙ¬« ‰c(³« ‰5 Ê« ‰c(Ñ« ‰*í« ‰é¤ö« ‰S}¬ ‰õ ¬ ‰å¬ ‰“s¬ ‰$6¬ ‰“s=¬ ‰¡zU¬ ‰Ü4^¬ ‰íNm¬ ‰wûz¬ ‰K™ˆ¬ ‰O³–¬ ‰L·¤¬ ‰R·²¬ ‰ñ)¾¬ ‰õ‡ˬ ‰|¸Ò¬ ‰ þé¬ ‰äL­ ‰ªî ­ ‰kº=­ ‰gâD­ ‰D½k­ ‰gâr­ ‰Ø”­ ‰f›­ ‰8­ ‰ŒÔÉ­ ‰p¨ç­ ‰7Eî­ ‰/€ ® ‰”d® ‰î“,® ‰n(5® ‰é¤>® ‰ÚPG® ‰‰Sb® ‰#ck® ‰´ €® ‰1Œ® ‰è;˜® ‰(4¤® ‰é¤­® ‰´ ¸® ‰&PÅ® ‰É<Ñ® ‰Ÿ•Ø® ‰תô® ‰n(ý® ‰é¤¯ ‰êï ‰íN#¯ ‰ R(¯ ‰@š-¯ ‰uà?¯ ‰°IK¯ ‰krW¯ ‰¹ºm¯ ‰¹º¯ ‰¹º¨¯ ‰ïI¯¯ ‰µ‰Ư ‰-ͯ ‰ÀÂä¯ ‰c(ë¯ ‰È›° ‰c( ° ‰åš%° ‰é¤.° ‰S}8° ‰õC° ‰ˆ2V° ‰°Ib° ‰krn° ‰êô„° ‰êô¤° ‰êô¿° ‰êôÚ° ‰ïIá° ‰£'ø° ‰-ÿ° ‰<± ‰c(± ‰-¦4± ‰c(;± ‰M¥W± ‰é¤`± ‰S}j± ‰õu± ‰± ‰?F± ‰} ™± ‰f¸± ‰‘¾± ‰ ѱ ‰í×± ‰÷Âê± ‰é¤ó± ‰õ² ‰°»² ‰?F ² ‰} ,² ‰fK² ‰‘Q² ‰èTd² ‰íj² ‰?3}² ‰é¤†² ‰õ›² ‰pz§² ‰è;³² ‰(4¿² ‰é¤Ȳ ‰´ Ó² ‰Ÿõß² ‰è;ë² ‰(4÷² ‰é¤³ ‰´  ³ ‰„#³ ‰è;#³ ‰(4/³ ‰é¤8³ ‰´ C³ ‰MwJ³ ‰nT³ ‰ûæg³ ‰os³ ‰ñ)³ ‰Íó‹³ ‰€a—³ ‰ٖг ‰zné³ ‰n(û³ ‰#c´ ‰_ ´ ‰²´ ‰†Æ*´ ‰o6´ ‰ñ)B´ ‰ÍóN´ ‰€aZ´ ‰Ù–“´ ‰zn¬´ ‰n(¾´ ‰#cÇ´ ‰_д ‰²Ú´ ‰“û´ ‰çíµ ‰˜µ ‰ Zµ ‰æ|)µ ‰o5µ ‰l4Aµ ‰ÒMµ ‰L•Yµ ‰€aeµ ‰;qµ ‰£T}µ ‰Íó‰µ ‰Ì4•µ ‰ l¡µ ‰à­µ ‰`2¹µ ‰ëÕĵ ‰Ž+ϵ ‰ÌÿÛµ ‰ÿáâµ ‰ë‘¶ ‰U ¶ ‰~a"¶ ‰m )¶ ‰¼¢F¶ ‰ÅWM¶ ‰ã©i¶ ‰ªŸp¶ ‰›¶ ‰íN̶ ‰íNè¶ ‰!Jï¶ ‰­‹ · ‰ž(· ‰¾¨/· ‰(½H· ‰:ÇN· ‰²¿f· ‰:Çl· ‰EµŠ· ‰Áš¨· ‰ÍUÀ· ‰Þ5Æ· ‰KðÞ· ‰Âlä· ‰7ü· ‰[˜¸ ‰7g¸ ‰P¨!¸ ‰…Ï9¸ ‰Û@¸ ‰äÉX¸ ‰–._¸ ‰K¤w¸ ‰×L~¸ ‰Aê–¸ ‰+¸ ‰ÅEµ¸ ‰+ ¼¸ ‰(Ù¸ ‰Ú2ภ‰å¹ ‰:Ç ¹ ‰¿¾-¹ ‰€J¹ ‰:ÇQ¹ ‰q´u¹ ‰r’¹ ‰š™¹ ‰ŽC±¹ ‰3¸¹ ‰\†й ‰3×¹ ‰{Gð¹ ‰Íý÷¹ ‰uº ‰Íýº ‰©ó8º ‰ ?º ‰q\º ‰ércº ‰Å|€º ‰ér‡º ‰…¤º ‰«º ‰ºpѺ ‰§Ìغ ‰§¿þº ‰=» ‰0&» ‰=-» ‰:;N» ‰º›U» ‰ér» ‰w'y» ‰qM–» ‰w'» ‰Œ†¿» ‰w'Æ» ‰5üè» ‰ Ìï» ‰as ¼ ‰ ̼ ‰00¼ ‰ Ì7¼ ‰!T¼ ‰ Ì[¼ ‰ò¬}¼ ‰ Ì„¼ ‰À¦¼ ‰ø.­¼ ‰s}Á¼ ‰?ȼ ‰"Lá¼ ‰¿4è¼ ‰འ‰n( ½ ‰é¤½ ‰i½ ‰ÚP$½ ‰‰S?½ ‰#cH½ ‰Ü4Q½ ‰´ [½ ‰S}e½ ‰*;u½ ‰5§€½ ‰1‹½ ‰‰(ž½ ‰oª½ ‰ñ)¶½ ‰Íó½ ‰€aν ‰À«¾ ‰Nö ¾ ‰n(2¾ ‰#c;¾ ‰_D¾ ‰²M¾ ‰´ X¾ ‰Îpy¾ ‰ç턾 ‰˜¾ ‰ Z›¾ ‰æ|§¾ ‰o³¾ ‰l4¿¾ ‰Ò˾ ‰L•×¾ ‰€aã¾ ‰;ï¾ ‰£Tû¾ ‰Íó¿ ‰Ì4¿ ‰ l¿ ‰à+¿ ‰`27¿ ‰ëÕB¿ ‰Ž+M¿ ‰ÌÿY¿ ‰ÿá`¿ ‰—C¿ ‰Uˆ¿ ‰§Ý ¿ ‰m §¿ ‰TÄ¿ ‰ÅWË¿ ‰®<ç¿ ‰ªŸî¿ ‰ 1 À ‰íNJÀ ‰íNfÀ ‰!JmÀ ‰BñŠÀ ‰ž¦À ‰¾¨­À ‰'ÆÀ ‰:ÇÌÀ ‰&äÀ ‰:ÇêÀ ‰ ÍÁ ‰€Ä&Á ‰‚Ÿ>Á ‰Þ5DÁ ‰ÚÈ\Á ‰ÂlbÁ ‰xØzÁ ‰[˜€Á ‰ ¿˜Á ‰P¨ŸÁ ‰‘À·Á ‰Û¾Á ‰·ÖÁ ‰–.ÝÁ ‰cÎõÁ ‰×LüÁ ‰f¡ ‰+ ‰õM3 ‰+ : ‰ W ‰Ú2^ ‰oŒ€Â ‰:LJ ‰%«Â ‰±ÃÈ ‰:ÇÏ ‰Ìó ‰pžà ‰šà ‰uƒ/à ‰36à ‰ßWNà ‰3Uà ‰Gánà ‰Íýuà ‰Ÿr’à ‰Íý™Ã ‰¼'¶Ã ‰ ½Ã ‰Ï-Úà ‰éráà ‰-ýþà ‰érÄ ‰["Ä ‰)Ä ‰ÿ<OÄ ‰§ÌVÄ ‰qé|Ä ‰=ƒÄ ‰S ¤Ä ‰=«Ä ‰ÌÄ ‰º›ÓÄ ‰qÏðÄ ‰w'÷Ä ‰LÅ ‰w'Å ‰Xì=Å ‰w'DÅ ‰º^fÅ ‰ ÌmÅ ‰#äŠÅ ‰ ̑ЉÝ®Å ‰ ̵ЉÕÃÒÅ ‰ ÌÙÅ ‰”ûÅ ‰ ÌÆ ‰±$Æ ‰ø.+Æ ‰ã?Æ ‰?FÆ ‰‚ð_Æ ‰¿4fÆ ‰Ó<~Æ ‰n(‡Æ ‰é¤Æ ‰i™Æ ‰ÚP¢Æ ‰‰S½Æ ‰#cÆÆ ‰Ü4ÏÆ ‰´ ÙÆ ‰S}ãÆ ‰*;óÆ ‰ÂŽÇ ‰oÇ ‰ñ)Ç ‰Íó&Ç ‰€a2Ç ‰À«kÇ ‰Nö„Ç ‰n(–Ç ‰#cŸÇ ‰_¨Ç ‰²±Ç ‰´ ÂÇ ‰üÍÇ ‰Ä ÙÇ ‰û…äÇ ‰°IïÇ ‰krúÇ ‰ oÈ ‰&RÈ ‰ÙtîÈ ‰ÝÁÉ ‰o É ‰°IÉ ‰+?%É ‰kr1É ‰Ö­=É ‰& SÉ ‰& nÉ ‰¡¿‰É ‰j,’É ‰r÷É ‰93­É ‰ÙZ¹É ‰Þ"ËÉ ‰xÛ×É ‰çãÉ ‰ä ïÉ ‰Þ"Ê ‰Þ"Ê ‰6Ë$Ê ‰Ü=9Ê ‰°IIÊ ‰ÂTÊ ‰D`Ê ‰€akÊ ‰Ó8qÊ ‰ê1ˆÊ ‰Ó8ŽÊ ‰NÕ¥Ê ‰[˜«Ê ‰ :ÂÊ ‰”v×Ê ‰”vöÊ ‰”vË ‰”v/Ë ‰,IË ‰ö°OË ‰RkË ‰¨qË ‰ï÷ŽË ‰°‹”Ë ‰qêÙË ‰²èË ‰à™ûË ‰;Ì ‰°IÌ ‰+?Ì ‰kr+Ì ‰Ö­7Ì ‰àCÌ ‰`2OÌ ‰\Æ[Ì ‰ÑgÌ ‰osÌ ‰€aÌ ‰;à•Ì ‰;à¶Ì ‰;àáÌ ‰;àýÌ ‰¨³Í ‰!JÍ ‰b<Í ‰îðCÍ ‰ptaÍ ‰:ÇhÍ ‰ýÐ€Í ‰:Ç‡Í ‰u¼¦Í ‰ñÅÍ ‰©²ÝÍ ‰Z8äÍ ‰ðúüÍ ‰Z8Î ‰k9Î ‰N"Î ‰.x:Î ‰NAÎ ‰|¶YÎ ‰Þ5`Î ‰-ÏxÎ ‰ÛÎ ‰ôo—Î ‰ªæžÎ ‰éÁ¼Î ‰R¨ÃÎ ‰;®ÛÎ ‰ÂlâÎ ‰¡vúÎ ‰¡%Ï ‰Ï ‰Ÿ• Ï ‰ÓÞ=Ï ‰Ÿ•DÏ ‰–vaÏ ‰y<hÏ ‰!‡Ï ‰N7ªÏ ‰–ÇÏ ‰½ÏÎÏ ‰HæÏ ‰½ÏíÏ ‰knÐ ‰B Ð ‰›$Ð ‰B+Ð ‰gCÐ ‰múJÐ ‰»bÐ ‰múiÐ ‰*ÇÐ ‰¢_ˆÐ ‰¾8¡Ð ‰´¨Ð ‰¦©¼Ð ‰w'ÂÐ ‰æÀäÐ ‰w'ëÐ ‰â•Ñ ‰ ÌÑ ‰¦L2Ñ ‰ Ì9Ñ ‰Î[Ñ ‰¾¨bÑ ‰|õ{Ñ ‰ø.‚Ñ ‰Î…–Ñ ‰hŒÑ ‰i-»Ñ ‰ÖtÁÑ ‰HußÑ ‰Å?æÑ ‰k@ Ò ‰æfÒ ‰ÞU.Ò ‰Ò€5Ò ‰­)WÒ ‰©¥^Ò ‰…çwÒ ‰Ô„}Ò ‰½šÒ ‰Ô„ Ò ‰mËÒ ‰²ÕÒ ‰å7èÒ ‰øNõÒ ‰U°Ó ‰û… Ó ‰°IÓ ‰kr%Ó ‰Ñ;Ó ‰ÑVÓ ‰ÑqÓ ‰iewÓ ‰™Ó ‰ïI•Ó ‰Ú×­Ó ‰-³Ó ‰À£ËÓ ‰c(ÑÓ ‰HUéÓ ‰c(ïÓ ‰T Ô ‰¤,Ô ‰=…*Ô ‰¤,0Ô ‰„MÔ ‰ùISÔ ‰Ë7pÔ ‰)vÔ ‰qª“Ô ‰J™Ô ‰æb¶Ô ‰ü,½Ô ‰VÖÚÔ ‰Ÿ•áÔ ‰cÂþÔ ‰ oÕ ‰ͼÕ ‰áºÕ ‰û…)Õ ‰°I4Õ ‰kr?Õ ‰ oIÕ ‰”„UÕ ‰û…`Õ ‰°IkÕ ‰krvÕ ‰ o€Õ ‰¾MŒÕ ‰™~žÕ ‰Ý§Õ ‰°Õ ‰°Ò¿Õ ‰ÁÏÕ ‰Ùt×Õ ‰wãÕ ‰û…îÕ ‰°IùÕ ‰krÖ ‰ oÖ ‰­jÖ ‰Þ",Ö ‰xÛ8Ö ‰çDÖ ‰ä PÖ ‰Þ"eÖ ‰Þ"Ö ‰6Ë…Ö ‰ÅhšÖ ‰°IªÖ ‰ÂµÖ ‰DÁÖ ‰€aÌÖ ‰Ó8ÒÖ ‰¹péÖ ‰Ó8ïÖ ‰ÝY× ‰[˜ × ‰‘#× ‰”v8× ‰”vW× ‰”vq× ‰”v× ‰,ª× ‰ö°°× ‰OÞÌ× ‰¨Ò× ‰Zï× ‰°‹õ× ‰yÕ:Ø ‰²IØ ‰W\Ø ‰;hØ ‰°ItØ ‰+?€Ø ‰krŒØ ‰Ö­˜Ø ‰à¤Ø ‰`2°Ø ‰\Æ¼Ø ‰ÑÈØ ‰oÔØ ‰€aàØ ‰;àöØ ‰;àÙ ‰;àBÙ ‰;à^Ù ‰¨³zÙ ‰!J€Ù ‰MVÙ ‰îð¤Ù ‰,tÂÙ ‰:ÇÉÙ ‰A»áÙ ‰:ÇèÙ ‰ZwÚ ‰Sç&Ú ‰ó>Ú ‰Z8EÚ ‰­Ñ]Ú ‰Z8dÚ ‰"|Ú ‰NƒÚ ‰WÜ›Ú ‰N¢Ú ‰aRºÚ ‰Þ5ÁÚ ‰$¥ÙÚ ‰ÛàÚ ‰ÅøÚ ‰ªæÿÚ ‰ž6Û ‰R¨$Û ‰~þ<Û ‰ÂlCÛ ‰v:[Û ‰¡%aÛ ‰ŠzÛ ‰Ÿ•Û ‰]žÛ ‰Ÿ•¥Û ‰TMÂÛ ‰y<ÉÛ ‰°.èÛ ‰¢ Ü ‰g(Ü ‰½Ï/Ü ‰q>GÜ ‰½ÏNÜ ‰s1fÜ ‰BmÜ ‰YB…Ü ‰BŒÜ ‰I¤Ü ‰mú«Ü ‰²ÀÃÜ ‰múÊÜ ‰tkâÜ ‰¢_éÜ ‰ÖÝ ‰´ Ý ‰MtÝ ‰w'#Ý ‰âŠEÝ ‰w'LÝ ‰,YoÝ ‰ ÌvÝ ‰U(“Ý ‰ ÌšÝ ‰ ÷¼Ý ‰¾¨ÃÝ ‰…öÜÝ ‰ø.ãÝ ‰ay÷Ý ‰hŒþÝ ‰ jÞ ‰Öt"Þ ‰ƪ@Þ ‰Å?GÞ ‰#©jÞ ‰æfqÞ ‰ETÞ ‰Ò€–Þ ‰6¸Þ ‰©¥¿Þ ‰ÚCØÞ ‰Ô„ÞÞ ‰ ÌûÞ ‰Ô„ß ‰4Ø,ß ‰²6ß ‰Ù Iß ‰øNVß ‰U°bß ‰û…nß ‰°Izß ‰kr†ß ‰Ñœß ‰Ñ·ß ‰ÑÒß ‰ieØß ‰¸ñðß ‰ïIöß ‰Z^à ‰-à ‰Ö:,à ‰c(2à ‰Ü¢Jà ‰c(Pà ‰_¢mà ‰¤,sà ‰gÅ‹à ‰¤,‘à ‰ÑÄ®à ‰ùI´à ‰Ì*Ñà ‰)×à ‰xçôà ‰Júà ‰ÆPá ‰ü,á ‰H;á ‰Ÿ•Bá ‰­W_á ‰ oiá ‰(?sá ‰k†á ‰û…Šá ‰°I•á ‰kr á ‰ oªá ‰æ¶á ‰û…Áá ‰°IÌá ‰kr×á ‰ oáá ‰óþíá ‰™~ÿá ‰Ý⠉⠉°Ò â ‰*L0â ‰Ùt8â ‰ºÅDâ ‰û…Oâ ‰°IZâ ‰kreâ ‰ ooâ ‰@‚â ‰oŽâ ‰°Išâ ‰+?¦â ‰kr²â ‰Ö­¾â ‰& Ôâ ‰& ïâ ‰¡¿ ã ‰5nã ‰r÷ã ‰93.ã ‰QÏ:ã ‰Þ"Lã ‰xÛXã ‰çdã ‰ä pã ‰Þ"…ã ‰Þ"Ÿã ‰6˥㠉©°ºã ‰°IÊã ‰ÂÕã ‰Dáã ‰€aìã ‰Ó8òã ‰˜) ä ‰Ó8ä ‰ 3&ä ‰[˜,ä ‰g™Cä ‰”vXä ‰”vwä ‰”v‘ä ‰”v°ä ‰,Êä ‰ö°Ðä ‰ƒCìä ‰¨òä ‰Ùœå ‰°‹å ‰4€Zå ‰²iå ‰þM|å ‰;ˆå ‰°I”å ‰+? å ‰kr¬å ‰Ö­¸å ‰àÄå ‰`2Ðå ‰\ÆÜå ‰Ñèå ‰oôå ‰€aæ ‰;àæ ‰;à7æ ‰;àbæ ‰;à~æ ‰¨³šæ ‰!J æ ‰Öy½æ ‰îðÄæ ‰âæ ‰:Çéæ ‰LÙç ‰:Çç ‰;¨'ç ‰ŽFç ‰„ž^ç ‰Z8eç ‰`‚}ç ‰Z8„ç ‰í·œç ‰N£ç ‰¬'»ç ‰NÂç ‰kòÚç ‰Þ5áç ‰Bùç ‰Ûè ‰5è ‰ªæè ‰=è ‰R¨Dè ‰p\è ‰Âlcè ‰1-{è ‰¡%è ‰f€šè ‰Ÿ•¡è ‰Îß¾è ‰Ÿ•Åè ‰WÏâè ‰y<éè ‰ Éé ‰Ââ+é ‰”Hé ‰½ÏOé ‰i‰gé ‰½Ïné ‰(A†é ‰Bé ‰ë¥é ‰B¬é ‰[\Äé ‰múËé ‰íkãé ‰múêé ‰°ê ‰¢_ ê ‰ƒ®"ê ‰´)ê ‰.¯=ê ‰w'Cê ‰8eê ‰w'lê ‰é5ê ‰ Ì–ê ‰÷–³ê ‰ Ìºê ‰‹uÜê ‰¾¨ãê ‰¿µüê ‰ø.ë ‰Ï™ë ‰hŒë ‰ý<ë ‰ÖtBë ‰²‚`ë ‰Å?gë ‰Q¯Šë ‰æf‘ë ‰Ý?¯ë ‰Ò€¶ë ‰+šØë ‰©¥ßë ‰Àøë ‰Ô„þë ‰PÃì ‰Ô„!ì ‰›€Lì ‰²Vì ‰\<iì ‰øNvì ‰U°‚ì ‰û…Žì ‰°Išì ‰kr¦ì ‰Ñ¼ì ‰Ñ×ì ‰Ñòì ‰ieøì ‰Ó í ‰ïIí ‰Œ].í ‰-4í ‰¥rLí ‰c(Rí ‰Kjí ‰c(pí ‰øí ‰¤,“í ‰D«í ‰¤,±í ‰ÛBÎí ‰ùIÔí ‰a ñí ‰)÷í ‰® î ‰Jî ‰!/7î ‰ü,>î ‰03[î ‰Ÿ•bî ‰Mî ‰ o‰î ‰]æ“î ‰Š Ÿî ‰û…ªî ‰°Iµî ‰krÀî ‰ oÊî ‰ÀHÖî ‰û…áî ‰°Iìî ‰kr÷î ‰ oï ‰È™ ï ‰™~ï ‰Ý(ï ‰1ï ‰°Ò@ï ‰«ÈPï ‰ÙtXï ‰ädï ‰û…oï ‰°Izï ‰kr…ï ‰ oï ‰"¢ï ‰o®ï ‰°Iºï ‰+?Æï ‰krÒï ‰Ö­Þï ‰& ôï ‰& 𠉡¿*ð ‰$3ð ‰r÷>ð ‰93Nð ‰ÙþZð ‰Þ"lð ‰xÛxð ‰ç„ð ‰ä ð ‰Þ"¥ð ‰Þ"¿ð ‰6ËÅð ‰pÚð ‰°Iêð ‰Âõð ‰Dñ ‰€a ñ ‰Ó8ñ ‰‹8)ñ ‰Ó8/ñ ‰ºÐFñ ‰[˜Lñ ‰D®cñ ‰”vxñ ‰”v—ñ ‰”v±ñ ‰”vÐñ ‰,êñ ‰ö°ðñ ‰ÿÆ ò ‰¨ò ‰¾/ò ‰°‹5ò ‰¤+zò ‰²‰ò ‰JÚœò ‰;¨ò ‰°I´ò ‰+?Àò ‰krÌò ‰Ö­Øò ‰àäò ‰`2ðò ‰\Æüò ‰Ñó ‰oó ‰€a ó ‰;à6ó ‰;àWó ‰;à‚ó ‰;àžó ‰¨³ºó ‰!JÀó ‰";Ýó ‰îðäó ‰Î3ô ‰:Ç ô ‰7œ!ô ‰:Ç(ô ‰å9Gô ‰ fô ‰eÌ~ô ‰Z8…ô ‰«“ô ‰Z8¤ô ‰Êx¼ô ‰NÃô ‰zÅÛô ‰Nâô ‰l”úô ‰Þ5õ ‰è¿õ ‰Û õ ‰qä8õ ‰ªæ?õ ‰Ý\]õ ‰R¨dõ ‰y'|õ ‰Âlƒõ ‰ ì›õ ‰¡%¡õ ‰×°ºõ ‰Ÿ•Áõ ‰WÞõ ‰Ÿ•åõ ‰À´ö ‰y< ö ‰D°(ö ‰DøKö ‰÷hö ‰½Ïoö ‰]H‡ö ‰½ÏŽö ‰O2¦ö ‰B­ö ‰½-Åö ‰BÌö ‰œùäö ‰múëö ‰×÷ ‰mú ÷ ‰X"÷ ‰¢_)÷ ‰Œ:B÷ ‰´I÷ ‰“–]÷ ‰w'c÷ ‰þX…÷ ‰w'Œ÷ ‰/k¯÷ ‰ ̶÷ ‰‚ŽÓ÷ ‰ ÌÚ÷ ‰ßü÷ ‰¾¨ø ‰îø ‰ø.#ø ‰š\7ø ‰hŒ>ø ‰}\ø ‰Ötbø ‰ú€ø ‰Å?‡ø ‰Y-ªø ‰æf±ø ‰¥Ïø ‰Ò€Öø ‰ ƒøø ‰©¥ÿø ‰á@ù ‰Ô„ù ‰ +;ù ‰Ô„Aù ‰I[lù ‰²vù ‰‰ù ‰øN–ù ‰U°¢ù ‰û…®ù ‰°Iºù ‰krÆù ‰ÑÜù ‰Ñ÷ù ‰Ñú ‰ieú ‰r$0ú ‰ïI6ú ‰!QNú ‰-Tú ‰©wlú ‰c(rú ‰OŠú ‰c(ú ‰­ú ‰¤,³ú ‰t,Ëú ‰¤,Ñú ‰,îú ‰ùIôú ‰¿û ‰)û ‰K4û ‰J:û ‰}5Wû ‰ü,^û ‰•x{û ‰Ÿ•‚û ‰W“Ÿû ‰ o©û ‰%޳û ‰^¿û ‰û…Êû ‰°IÕû ‰kràû ‰ oêû ‰4«öû ‰û…ü ‰°I ü ‰krü ‰ o!ü ‰L-ü ‰™~?ü ‰ÝHü ‰Qü ‰°Ò`ü ‰¶8pü ‰Ùtxü ‰Òë„ü ‰û…ü ‰°Išü ‰kr¥ü ‰ o¯ü ‰0ˆÂü ‰oÎü ‰°IÚü ‰+?æü ‰kròü ‰Ö­þü ‰& ý ‰& /ý ‰¡¿Jý ‰ ¾Sý ‰r÷^ý ‰93ný ‰=£zý ‰Þ"Œý ‰xÛ˜ý ‰ç¤ý ‰ä °ý ‰Þ"Åý ‰Þ"ßý ‰6Ëåý ‰ý:úý ‰°I þ ‰Âþ ‰D!þ ‰€a,þ ‰Ó82þ ‰˜Iþ ‰Ó8Oþ ‰ fþ ‰[˜lþ ‰µƒþ ‰”v˜þ ‰”v·þ ‰”vÑþ ‰”vðþ ‰, ÿ ‰ö°ÿ ‰È[,ÿ ‰¨2ÿ ‰äâOÿ ‰°‹Uÿ ‰ÿÑšÿ ‰²©ÿ ‰¬¹¼ÿ ‰;Èÿ ‰°IÔÿ ‰+?àÿ ‰krìÿ ‰Ö­øÿ ‰à ‰`2 ‰\Æ ‰Ñ( ‰o4 ‰€a@ ‰;àV ‰;àw ‰;ࢠ‰;ྠ‰¨³Ú ‰!Jà ‰Rý ‰îð ‰!h" ‰:Ç) ‰OA ‰:ÇH ‰ú»g ‰ÀP† ‰ãVž ‰Z8¥ ‰¯:½ ‰Z8Ä ‰ Ü ‰Nã ‰…äû ‰N ‰Ìe ‰Þ5! ‰{Œ9 ‰Û@ ‰&X ‰ªæ_ ‰×} ‰R¨„ ‰|_œ ‰Âl£ ‰ò» ‰¡%Á ‰ˆeÚ ‰Ÿ•á ‰ä¡þ ‰Ÿ• ‰ÓN" ‰y<) ‰ÄHH ‰ß k ‰pþˆ ‰½Ï ‰ Ч ‰½Ï® ‰WÆ ‰BÍ ‰vKå ‰Bì ‰  ‰mú  ‰6# ‰mú* ‰®?B ‰¢_I ‰»5b ‰´i ‰«Ð} ‰w'ƒ ‰¹\¥ ‰w'¬ ‰7Ï ‰ ÌÖ ‰?;ó ‰ Ìú ‰°Ž ‰¾¨# ‰ †< ‰ø.C ‰·ÛW ‰hŒ^ ‰ë| ‰Öt‚ ‰èÒ  ‰Å?§ ‰ejÊ ‰æfÑ ‰D1ï ‰Ò€ö ‰7ó ‰©¥ ‰°þ8 ‰Ô„> ‰Ž0[ ‰Ô„a ‰,@Œ ‰²– ‰ ¥© ‰øN¶ ‰U°Â ‰û…Î ‰°IÚ ‰kræ ‰Ñü ‰Ñ ‰Ñ2 ‰ie8 ‰Ð`P ‰ïIV ‰÷n ‰-t ‰BlŒ ‰c(’ ‰6Jª ‰c(° ‰ÊIÍ ‰¤,Ó ‰)ë ‰¤,ñ ‰Ÿ ‰ùI ‰E51 ‰)7 ‰T9T ‰JZ ‰ÿ\w ‰ü,~ ‰•c› ‰Ÿ•¢ ‰=x¿ ‰ oÉ ‰^Ó ‰+ßß ‰û…ê ‰°Iõ ‰kr  ‰ o  ‰i4  ‰û…!  ‰°I,  ‰kr7  ‰ oA  ‰0gM  ‰™~_  ‰Ýh  ‰q  ‰°Ò€  ‰çF  ‰Ùt˜  ‰;‚¤  ‰û…¯  ‰°Iº  ‰krÅ  ‰ oÏ  ‰Òâ  ‰oî  ‰°Iú  ‰+?  ‰kr  ‰Ö­  ‰& 4  ‰& O  ‰¡¿j  ‰açs  ‰r÷~  ‰93Ž  ‰Òõš  ‰Þ"¬  ‰xÛ¸  ‰çÄ  ‰ä Ð  ‰Þ"å  ‰Þ"ÿ  ‰6Ë  ‰Q  ‰°I*  ‰Â5  ‰DA  ‰€aL  ‰Ó8R  ‰ƒ8i  ‰Ó8o  ‰b8†  ‰[˜Œ  ‰gp£  ‰”v¸  ‰”v×  ‰”vñ  ‰”v  ‰,*  ‰ö°0  ‰ödL  ‰¨R  ‰±o  ‰°‹u  ‰Ãº  ‰²É  ‰Ü  ‰;è  ‰°Iô  ‰+?  ‰kr  ‰Ö­  ‰à$  ‰`20  ‰\Æ<  ‰ÑH  ‰oT  ‰€a`  ‰;àv  ‰;à—  ‰;à  ‰;àÞ  ‰¨³ú  ‰!J ‰&f ‰îð$ ‰öB ‰:ÇI ‰Púa ‰:Çh ‰òÁ‡ ‰·¦ ‰Ýʾ ‰Z8Å ‰N7Ý ‰Z8ä ‰Ê/ü ‰N ‰ü. ‰N" ‰z³: ‰Þ5A ‰iÕY ‰Û` ‰'x ‰ªæ ‰4Ë ‰R¨¤ ‰ÀA¼ ‰Âlà ‰þ$Û ‰¡%á ‰"ú ‰Ÿ• ‰J ‰Ÿ•% ‰m×B ‰y<I ‰’Jh ‰aË‹ ‰#²¨ ‰½Ï¯ ‰#}Ç ‰½ÏÎ ‰vræ ‰Bí ‰ùš ‰B  ‰÷b$ ‰mú+ ‰ýOC ‰múJ ‰©Äb ‰¢_i ‰óy‚ ‰´‰ ‰Ù‡ ‰w'£ ‰;‘Å ‰w'Ì ‰Òï ‰ Ìö ‰Õ` ‰ Ì ‰‡ < ‰¾¨C ‰B\ ‰ø.c ‰‚ˆw ‰hŒ~ ‰ì¥œ ‰Öt¢ ‰#&À ‰Å?Ç ‰Ù6ê ‰æfñ ‰T\ ‰Ò€ ‰¯—8 ‰©¥? ‰€óX ‰Ô„^ ‰Øk{ ‰Ô„ ‰d¬ ‰²¶ ‰Ó!É ‰øNÖ ‰U°â ‰û…î ‰°Iú ‰kr ‰Ñ ‰Ñ7 ‰ÑR ‰ieX ‰Ap ‰ïIv ‰ñ!Ž ‰-” ‰Ž<¬ ‰c(² ‰þ£Ê ‰c(Ð ‰T£í ‰¤,ó ‰RÑ  ‰¤, ‰'Ð. ‰ùI4 ‰ýÎQ ‰)W ‰vít ‰Jz ‰:ý— ‰ü,ž ‰Úü» ‰Ÿ• ‰fß ‰ oé ‰³üó ‰-åÿ ‰û…  ‰°I ‰kr  ‰ o* ‰V6 ‰û…A ‰°IL ‰krW ‰ oa ‰~ym ‰™~ ‰Ýˆ ‰‘ ‰°Ò  ‰{° ‰Ùt¸ ‰AAÄ ‰û…Ï ‰°IÚ ‰krå ‰ oï ‰SË ‰o ‰°I ‰+?& ‰kr2 ‰Ö­> ‰& T ‰& o ‰¡¿Š ‰+[“ ‰r÷ž ‰93® ‰¶Oº ‰Þ"Ì ‰xÛØ ‰çä ‰ä ð ‰Þ" ‰Þ" ‰6Ë% ‰j: ‰°IJ ‰ÂU ‰Da ‰€al ‰Ó8r ‰æ‰ ‰Ó8 ‰`„¦ ‰[˜¬ ‰tà ‰”vØ ‰”v÷ ‰”v ‰”v0 ‰,J ‰ö°P ‰*l ‰¨r ‰» ‰°‹• ‰WnÚ ‰²é ‰KØü ‰; ‰°I ‰+?  ‰kr, ‰Ö­8 ‰àD ‰`2P ‰\Æ\ ‰Ñh ‰ot ‰€a€ ‰;à– ‰;à· ‰;àâ ‰;àþ ‰¨³ ‰!J  ‰­ = ‰îðD ‰’4b ‰:Çi ‰–i ‰:Lj ‰;-§ ‰§~Æ ‰Þ ‰Z8å ‰™Ûý ‰Z8 ‰ß¼ ‰N# ‰±1; ‰NB ‰{ Z ‰Þ5a ‰äõy ‰Û€ ‰K:˜ ‰ªæŸ ‰t>½ ‰R¨Ä ‰ì¾Ü ‰Âlã ‰÷ û ‰¡% ‰§9 ‰Ÿ•! ‰<Í> ‰Ÿ•E ‰Ù”b ‰y<i ‰$߈ ‰¦Ç« ‰¸ÞÈ ‰½ÏÏ ‰´`ç ‰½Ïî ‰Õ ‰B  ‰Û% ‰B, ‰: D ‰múK ‰Ñc ‰múj ‰åá‚ ‰¢_‰ ‰–¢ ‰´© ‰…4½ ‰w'à ‰•âå ‰w'ì ‰:Å ‰ Ì ‰ÊY3 ‰ Ì: ‰‘\ ‰¾¨c ‰kœ| ‰ø.ƒ ‰\'— ‰hŒž ‰3¼ ‰Öt ‰Gà ‰Å?ç ‰‹  ‰æf  ‰?/  ‰Ò€6  ‰ÖX  ‰©¥_  ‰õ x  ‰Ô„~  ‰ð›  ‰Ô„¡  ‰©Ì  ‰²Ö  ‰uYé  ‰øNö  ‰U°! ‰û…! ‰°I! ‰kr&! ‰ÑƒÜ1 ‰^-â1 ‰¬ è1 ‰Q“î1 ‰X:÷1 ‰?2 ‰F\ 2 ‰Ëÿ2 ‰¨]2 ‰:e2 ‰Zo$2 ‰ÍS02 ‰y62 ‰g2<2 ‰äZB2 ‰(êK2 ‰^*T2 ‰ˆb2 ‰¬n2 ‰az2 ‰ˆ‘2 ‰°šª2 ‰+T¶2 ‰½·×2 ‰ŽBó2 ‰«š3 ‰[ÿ3 ‰Íó+3 ‰ôÑ:3 ‰¼EI3 ‰'3X3 ‰˜ég3 ‰§£v3 ‰'…3 ‰6 ‰þ3J6 ‰¾ÇV6 ‰ëÜb6 ‰åÊw6 ‰åÊ©6 ‰I)µ6 ‰Þ"Ç6 ‰xÛÓ6 ‰çß6 ‰ä ë6 ‰Þ"7 ‰Þ"7 ‰6Ë 7 ‰,57 ‰°IE7 ‰ÂP7 ‰D\7 ‰€ag7 ‰Ó8m7 ‰£~„7 ‰Ó8Š7 ‰Q¡7 ‰[˜§7 ‰Æ4¾7 ‰”vÓ7 ‰”vò7 ‰”v 8 ‰”v+8 ‰,E8 ‰ö°K8 ‰”g8 ‰¨m8 ‰¬GŠ8 ‰°‹8 ‰±Õ8 ‰²ä8 ‰[B÷8 ‰;9 ‰°I9 ‰+?9 ‰kr'9 ‰Ö­39 ‰à?9 ‰`2K9 ‰\ÆW9 ‰Ñc9 ‰oo9 ‰€a{9 ‰;à‘9 ‰;à²9 ‰;àÝ9 ‰;àù9 ‰¨³: ‰!J: ‰…“8: ‰îð?: ‰¬¿]: ‰:Çd: ‰<ó|: ‰:ǃ: ‰ªk¢: ‰m‘Á: ‰Ÿ>Ù: ‰Z8à: ‰ǃø: ‰Z8ÿ: ‰Ý„; ‰N; ‰¿à6; ‰N=; ‰•°U; ‰Þ5\; ‰Øt; ‰Û{; ‰“; ‰ªæš; ‰b"¸; ‰R¨¿; ‰gX×; ‰ÂlÞ; ‰pö; ‰¡%ü; ‰ < ‰Ÿ•< ‰²H9< ‰Ÿ•@< ‰ð¾]< ‰y<d< ‰ ƒ< ‰¦»¦< ‰Ã< ‰½ÏÊ< ‰¥¦â< ‰½Ïé< ‰Àá= ‰B= ‰t = ‰B'= ‰á?= ‰múF= ‰nÂ^= ‰múe= ‰ŒÆ}= ‰¢_„= ‰Ç.= ‰´¤= ‰ý½¸= ‰w'¾= ‰%Mà= ‰w'ç= ‰ > ‰ Ì> ‰rH.> ‰ Ì5> ‰TW> ‰¾¨^> ‰°kw> ‰ø.~> ‰ü±’> ‰hŒ™> ‰M­·> ‰Öt½> ‰ÖÛ> ‰Å?â> ‰Ûi? ‰æf ? ‰Ø/*? ‰Ò€1? ‰kæS? ‰©¥Z? ‰Þ(s? ‰Ô„y? ‰…’–? ‰Ô„œ? ‰ç»Ç? ‰²Ñ? ‰ ä? ‰øNñ? ‰U°ý? ‰û… @ ‰°I@ ‰kr!@ ‰Ñ7@ ‰ÑR@ ‰Ñm@ ‰ies@ ‰sv‹@ ‰ïI‘@ ‰ôL©@ ‰-¯@ ‰øÇ@ ‰c(Í@ ‰W å@ ‰c(ë@ ‰ÝõA ‰¤,A ‰_&A ‰¤,,A ‰úIA ‰ùIOA ‰)«lA ‰)rA ‰ß9A ‰J•A ‰βA ‰ü,¹A ‰dÖA ‰Ÿ•ÝA ‰;úA ‰ oB ‰ó#B ‰æžB ‰û…%B ‰°I0B ‰kr;B ‰ oEB ‰žQB ‰û…\B ‰°IgB ‰krrB ‰ o|B ‰3ëˆB ‰™~šB ‰Ý£B ‰¬B ‰°Ò»B ‰8žËB ‰ÙtÓB ‰» ßB ‰û…êB ‰°IõB ‰krC ‰ o C ‰=ÆC ‰¾Ç"C ‰ëÜ.C ‰9K9C ‰|0DC ‰åÊYC ‰åÊxC ‰*£C ‰|¯C ‰0§¸C ‰ÂC ‰ïÊÕC ‰YÜC ‰5íøC ‰YÿC ‰½ÃD ‰@/D ‰£šBD ‰oND ‰& dD ‰& D ‰¡¿šD ‰=v§D ‰r÷²D ‰93¼D ‰ÄŽÉD ‰r÷ÔD ‰93ÞD ‰q!ëD ‰r÷öD ‰93E ‰HË E ‰93&E ‰HË9E ‰& OE ‰& jE ‰¡¿‚E ‰øÝ•E ‰& «E ‰& ÆE ‰¡¿áE ‰HËíE ‰93F ‰Ð F ‰–‘F ‰‰ßF ‰O"F ‰¾Ç.F ‰ëÜ:F ‰9KEF ‰|0PF ‰åÊeF ‰åÊ„F ‰*¯F ‰Þè»F ‰0§ÄF ‰ÎF ‰tNáF ‰YèF ‰•”G ‰Y G ‰06'G ‰@;G ‰½NG ‰oZG ‰& pG ‰& ‹G ‰¡¿¦G ‰+³G ‰r÷¾G ‰93ÈG ‰Ê.ÕG ‰r÷àG ‰93êG ‰;ê÷G ‰r÷H ‰93 H ‰ùwH ‰932H ‰ùwEH ‰& [H ‰& vH ‰¡¿ŽH ‰‚¡H ‰& ·H ‰& ÒH ‰¡¿íH ‰ùwùH ‰93I ‰æ›I ‰ÆÍI ‰`ó"I ‰/.I ‰¾Ç:I ‰ëÜFI ‰åÊ[I ‰åÊI ‰Z™I ‰¾Ç¥I ‰ëܱI ‰åÊÆI ‰åÊøI ‰©ì J ‰oJ ‰°I#J ‰+?/J ‰kr;J ‰Ö­GJ ‰& ]J ‰& xJ ‰¡¿“J ‰Ÿ0œJ ‰r÷§J ‰93·J ‰¦3ÃJ ‰Þ"ÕJ ‰xÛáJ ‰çíJ ‰ä ùJ ‰Þ"K ‰Þ"(K ‰6Ë.K ‰~‚CK ‰°ISK ‰Â^K ‰DjK ‰€auK ‰Ó8{K ‰_„’K ‰Ó8˜K ‰›¯K ‰[˜µK ‰ÿÌK ‰”váK ‰”vL ‰”vL ‰”v9L ‰,SL ‰ö°YL ‰šuL ‰¨{L ‰~R˜L ‰°‹žL ‰EãL ‰²òL ‰ÙM ‰;M ‰°IM ‰+?)M ‰kr5M ‰Ö­AM ‰àMM ‰`2YM ‰\ÆeM ‰ÑqM ‰o}M ‰€a‰M ‰;àŸM ‰;àÀM ‰;àëM ‰;àN ‰¨³#N ‰!J)N ‰öFN ‰îðMN ‰ÔWkN ‰:ÇrN ‰ú]ŠN ‰:Ç‘N ‰!°N ‰7žÏN ‰5ùçN ‰Z8îN ‰êîO ‰Z8 O ‰¶%O ‰N,O ‰¼ƒDO ‰NKO ‰£«cO ‰Þ5jO ‰0Ò‚O ‰Û‰O ‰yñ¡O ‰ªæ¨O ‰qjÆO ‰R¨ÍO ‰håO ‰ÂlìO ‰zËP ‰¡% P ‰Ã0#P ‰Ÿ•*P ‰6þGP ‰Ÿ•NP ‰ñ½kP ‰y<rP ‰V4‘P ‰’x´P ‰°NÑP ‰½ÏØP ‰kðP ‰½Ï÷P ‰9Q ‰BQ ‰E.Q ‰B5Q ‰l MQ ‰múTQ ‰xSlQ ‰músQ ‰öf‹Q ‰¢_’Q ‰I«Q ‰´²Q ‰ãuÆQ ‰w'ÌQ ‰XáîQ ‰w'õQ ‰0R ‰ ÌR ‰ó¥U ‰J£U ‰›FÀU ‰ü,ÇU ‰òiäU ‰Ÿ•ëU ‰eNV ‰ oV ‰‹ùV ‰Þ’(V ‰û…3V ‰°I>V ‰krIV ‰ oSV ‰»K_V ‰û…jV ‰°IuV ‰kr€V ‰ oŠV ‰Ù9–V ‰™~¨V ‰Ý±V ‰ºV ‰°ÒÉV ‰»&ÙV ‰ÙtáV ‰E?íV ‰û…øV ‰°IW ‰krW ‰ oW ‰Få+W ‰o7W ‰°ICW ‰+?OW ‰kr[W ‰Ö­gW ‰& }W ‰& ˜W ‰¡¿³W ‰(¼W ‰r÷ÇW ‰93×W ‰¥FãW ‰Þ"õW ‰xÛX ‰ç X ‰ä X ‰Þ".X ‰Þ"HX ‰6ËNX ‰ cX ‰°IsX ‰Â~X ‰DŠX ‰€a•X ‰Ó8›X ‰!ð²X ‰Ó8¸X ‰{|ÏX ‰[˜ÕX ‰<¿ìX ‰”vY ‰”v Y ‰”v:Y ‰”vYY ‰,sY ‰ö°yY ‰>;•Y ‰¨›Y ‰ø3¸Y ‰°‹¾Y ‰ž•Z ‰²Z ‰Ãh%Z ‰;1Z ‰°I=Z ‰+?IZ ‰krUZ ‰Ö­aZ ‰àmZ ‰`2yZ ‰\Æ…Z ‰Ñ‘Z ‰oZ ‰€a©Z ‰;à¿Z ‰;ààZ ‰;à [ ‰;à'[ ‰¨³C[ ‰!JI[ ‰Ë)f[ ‰îðm[ ‰@“‹[ ‰:Ç’[ ‰ÎŒª[ ‰:DZ[ ‰5Ð[ ‰Kï[ ‰¤¶\ ‰Z8\ ‰¢&\ ‰Z8-\ ‰qBE\ ‰NL\ ‰sd\ ‰Nk\ ‰¬ƒ\ ‰Þ5Š\ ‰(m¢\ ‰Û©\ ‰ãÁ\ ‰ªæÈ\ ‰R"æ\ ‰R¨í\ ‰Y] ‰Âl ] ‰êç$] ‰¡%*] ‰í°C] ‰Ÿ•J] ‰É{g] ‰Ÿ•n] ‰Šp‹] ‰y<’] ‰£f±] ‰X+Ô] ‰½“ñ] ‰½Ïø] ‰†F^ ‰½Ï^ ‰ö,/^ ‰B6^ ‰|N^ ‰BU^ ‰½Ïm^ ‰mút^ ‰ïéŒ^ ‰mú“^ ‰V™«^ ‰¢_²^ ‰ÔÙË^ ‰´Ò^ ‰µ‰æ^ ‰w'ì^ ‰…á_ ‰w'_ ‰ L8_ ‰ Ì?_ ‰Ô\_ ‰ Ìc_ ‰ž!…_ ‰¾¨Œ_ ‰㘥_ ‰ø.¬_ ‰­BÀ_ ‰hŒÇ_ ‰ôjå_ ‰Ötë_ ‰®q ` ‰Å?` ‰öƒ3` ‰æf:` ‰a×X` ‰Ò€_` ‰“` ‰©¥ˆ` ‰®Ò¡` ‰Ô„§` ‰íÇÄ` ‰Ô„Ê` ‰@Çõ` ‰²ÿ` ‰Oa ‰øNa ‰U°+a ‰û…7a ‰°ICa ‰krOa ‰Ñea ‰Ñ€a ‰Ñ›a ‰ie¡a ‰¢É¹a ‰ïI¿a ‰ã×a ‰-Ýa ‰aõa ‰c(ûa ‰t³b ‰c(b ‰>²6b ‰¤,>üq ‰r÷r ‰93r ‰±(#r ‰Þ"5r ‰xÛAr ‰çMr ‰ä Yr ‰Þ"nr ‰Þ"ˆr ‰6ËŽr ‰<¡£r ‰°I³r ‰Â¾r ‰DÊr ‰€aÕr ‰Ó8Ûr ‰½Êòr ‰Ó8ør ‰¦:s ‰[˜s ‰²l,s ‰”vAs ‰”v`s ‰”vzs ‰”v™s ‰,³s ‰ö°¹s ‰ê Õs ‰¨Ûs ‰[ëøs ‰°‹þs ‰¿ÚCt ‰²Rt ‰¹et ‰;qt ‰°I}t ‰+?‰t ‰kr•t ‰Ö­¡t ‰à­t ‰`2¹t ‰\ÆÅt ‰ÑÑt ‰oÝt ‰€aét ‰;àÿt ‰;à u ‰;àKu ‰;àgu ‰¨³ƒu ‰!J‰u ‰N©¦u ‰îð­u ‰¤ÐËu ‰:ÇÒu ‰=0êu ‰:Çñu ‰Á²v ‰Xð/v ‰Ž>Gv ‰Z8Nv ‰ô-fv ‰Z8mv ‰k …v ‰NŒv ‰÷¤v ‰N«v ‰xwÃv ‰Þ5Êv ‰WÙâv ‰Ûév ‰TNw ‰ªæw ‰'a&w ‰R¨-w ‰5ƒEw ‰ÂlLw ‰˜dw ‰¡%jw ‰ëƒw ‰Ÿ•Šw ‰ó[§w ‰Ÿ•®w ‰zËw ‰y<Òw ‰ŸÜñw ‰Zx ‰´z1x ‰½Ï8x ‰¸Px ‰½ÏWx ‰Gaox ‰Bvx ‰@cŽx ‰B•x ‰å­x ‰mú´x ‰æÌx ‰múÓx ‰çmëx ‰¢_òx ‰ã y ‰´y ‰“K&y ‰w',y ‰ÛNy ‰w'Uy ‰Sxy ‰ Ìy ‰;Iœy ‰ Ì£y ‰SâÅy ‰¾¨Ìy ‰_åy ‰ø.ìy ‰Çz ‰hŒz ‰Œ%z ‰Öt+z ‰8ÝIz ‰Å?Pz ‰usz ‰æfzz ‰Å˜z ‰Ò€Ÿz ‰98Áz ‰©¥Èz ‰]‹áz ‰Ô„çz ‰vŸ{ ‰Ô„ { ‰ó…5{ ‰²?{ ‰ZR{ ‰øN_{ ‰U°k{ ‰û…w{ ‰°Iƒ{ ‰kr{ ‰Ñ¥{ ‰ÑÀ{ ‰ÑÛ{ ‰ieá{ ‰rù{ ‰ïIÿ{ ‰ÄÇ| ‰-| ‰·î5| ‰c(;| ‰ò{S| ‰c(Y| ‰Ýzv| ‰¤,|| ‰¯”| ‰¤,š| ‰®·| ‰ùI½| ‰%ÊÚ| ‰)à| ‰xÍý| ‰J} ‰x® } ‰ü,'} ‰ÒýD} ‰Ÿ•K} ‰¼ h} ‰ or} ‰OÌ|} ‰Pˆ} ‰û…“} ‰°Iž} ‰kr©} ‰ o³} ‰}ˆ¿} ‰û…Ê} ‰°IÕ} ‰krà} ‰ oê} ‰Uíö} ‰™~~ ‰Ý~ ‰~ ‰°Ò)~ ‰öL9~ ‰ÙtA~ ‰@éM~ ‰û…X~ ‰°Ic~ ‰krn~ ‰ ox~ ‰ÀŸ‹~ ‰o—~ ‰°I£~ ‰+?¯~ ‰kr»~ ‰Ö­Ç~ ‰& Ý~ ‰& ø~ ‰¡¿ ‰èç ‰r÷' ‰937 ‰úéC ‰Þ"U ‰xÛa ‰çm ‰ä y ‰Þ"Ž ‰Þ"¨ ‰6Ë® ‰N€Ã ‰°IÓ ‰ÂÞ ‰Dê ‰€aõ ‰Ó8û ‰Ùj€ ‰Ó8€ ‰àa/€ ‰[˜5€ ‰;¦L€ ‰”va€ ‰”v€€ ‰”vš€ ‰”v¹€ ‰,Ó€ ‰ö°Ù€ ‰,™õ€ ‰¨û€ ‰y ‰°‹ ‰ɲc ‰²r ‰T … ‰;‘ ‰°I ‰+?© ‰krµ ‰Ö­Á ‰àÍ ‰`2Ù ‰\Æå ‰Ññ ‰oý ‰€a ‚ ‰;à‚ ‰;à@‚ ‰;àk‚ ‰;à‡‚ ‰¨³£‚ ‰!J©‚ ‰¼5Æ‚ ‰îðÍ‚ ‰|ë‚ ‰:Çò‚ ‰9 ƒ ‰:ǃ ‰à«0ƒ ‰",Oƒ ‰°gƒ ‰Z8nƒ ‰’‡†ƒ ‰Z8ƒ ‰²]¥ƒ ‰N¬ƒ ‰0Öă ‰N˃ ‰'ˆãƒ ‰Þ5êƒ ‰ñÖ„ ‰Û „ ‰÷>!„ ‰ªæ(„ ‰h"F„ ‰R¨M„ ‰3e„ ‰Âll„ ‰I_„„ ‰¡%Š„ ‰A{£„ ‰Ÿ•ª„ ‰®NÇ„ ‰Ÿ•΄ ‰ ³ë„ ‰y<ò„ ‰Wå… ‰G!4… ‰5Q… ‰½ÏX… ‰UÍp… ‰½Ïw… ‰›±… ‰B–… ‰‘®… ‰Bµ… ‰¦4Í… ‰múÔ… ‰DÊì… ‰múó… ‰ð” † ‰¢_† ‰=$+† ‰´2† ‰IùF† ‰w'L† ‰º8n† ‰w'u† ‰Lɘ† ‰ ÌŸ† ‰¼† ‰ ÌÆ ‰èå† ‰¾¨ì† ‰Ü›‡ ‰ø. ‡ ‰PO ‡ ‰hŒ'‡ ‰÷E‡ ‰ÖtK‡ ‰c•i‡ ‰Å?p‡ ‰Ñ“‡ ‰æfš‡ ‰[j¸‡ ‰Ò€¿‡ ‰™|ᇠ‰©¥è‡ ‰‰¤ˆ ‰Ô„ˆ ‰‰«$ˆ ‰Ô„*ˆ ‰ÎUˆ ‰²_ˆ ‰Ñ5rˆ ‰øNˆ ‰U°‹ˆ ‰û…—ˆ ‰°I£ˆ ‰kr¯ˆ ‰Ñň ‰Ñàˆ ‰Ñûˆ ‰ie‰ ‰’X‰ ‰ïI‰ ‰ùú7‰ ‰-=‰ ‰`U‰ ‰c([‰ ‰Ös‰ ‰c(y‰ ‰2y–‰ ‰¤,œ‰ ‰Y¬´‰ ‰¤,º‰ ‰Þ«׉ ‰ùI݉ ‰stú‰ ‰)Š ‰{ËŠ ‰J#Š ‰×Ù@Š ‰ü,GŠ ‰ûdŠ ‰Ÿ•kŠ ‰ÕHˆŠ ‰ o’Š ‰QœŠ ‰Ó$¨Š ‰û…³Š ‰°I¾Š ‰krÉŠ ‰ oÓŠ ‰ˆlߊ ‰û…êŠ ‰°IõŠ ‰kr‹ ‰ o ‹ ‰iJ‹ ‰™~(‹ ‰Ý1‹ ‰:‹ ‰°ÒI‹ ‰šY‹ ‰Ùta‹ ‰¼m‹ ‰û…x‹ ‰°Iƒ‹ ‰krŽ‹ ‰ o˜‹ ‰2º¤‹ ‰¾Ç°‹ ‰ëܼ‹ ‰åÊÑ‹ ‰åÊŒ ‰ò¥Œ ‰;$Œ ‰kr1Œ ‰Ö­>Œ ‰àKŒ ‰`2XŒ ‰\ÆeŒ ‰ÑrŒ ‰oŒ ‰€aŒŒ ‰ Z™Œ ‰Ž Œ ‰ØJÂŒ ‰ì!ÙŒ ‰ì!úŒ ‰ì!  ‰ì!< ‰!JB ‰ ô_ ‰îðf ‰@¢„ ‰[˜‹ ‰Jߣ ‰:Ǫ ‰X\ ‰:ÇÉ ‰äeè ‰~ÚŽ ‰ÕŽ ‰Z8&Ž ‰“>Ž ‰Z8EŽ ‰«7]Ž ‰NdŽ ‰½7|Ž ‰NƒŽ ‰7Ñ›Ž ‰Âl¢Ž ‰´UºŽ ‰Þ5ÁŽ ‰I*ÙŽ ‰ÛàŽ ‰¿¥øŽ ‰ªæþŽ ‰U ‰½Ï# ‰ý; ‰½ÏB ‰åËZ ‰Ba ‰ùy ‰B€ ‰PŒ˜ ‰³wŸ ‰&ì¸ ‰šß¿ ‰4PÓ ‰¢_Ú ‰³+ó ‰´ú ‰”è ‰w' ‰¾6 ‰w'= ‰« ` ‰ Ìf ‰è·ƒ ‰ ÌŠ ‰z9¬ ‰¾¨³ ‰g¤Ì ‰ø.Ó ‰+ç ‰4Vî ‰ëT ‘ ‰4V‘ ‰ÃÏ6‘ ‰4V=‘ ‰õùe‘ ‰£Ÿl‘ ‰" …‘ ‰ðuŒ‘ ‰s( ‘ ‰Lß§‘ ‰üŸÀ‘ ‰8÷Ç‘ ‰(Û‘ ‰§dâ‘ ‰chö‘ ‰hŒý‘ ‰Ê’ ‰Öt!’ ‰±Á?’ ‰Ö F’ ‰t€i’ ‰=p’ ‰¶7Ž’ ‰Ô„•’ ‰®’ ‰Gïµ’ ‰Þ0Î’ ‰6¡ð’ ‰²ú’ ‰,× “ ‰kr“ ‰Ö­%“ ‰& ;“ ‰& V“ ‰¡¿q“ ‰à~“ ‰r÷‰“ ‰93““ ‰9G “ ‰r÷«“ ‰93µ“ ‰¯uÁ“ ‰93Û“ ‰¯uî“ ‰& ” ‰& ” ‰¡¿7” ‰ÇàI” ‰̆i” ‰¢/v” ‰¨Š” ‰[—” ‰¨­” ‰¨È” ‰Êxâ” ‰ï” ‰Dý” ‰Â • ‰€a• ‰%Ε ‰)¾6• ‰œ·=• ‰}hV• ‰X]• ‰ÉIu• ‰X|• ‰”• ‰Ó8›• ‰x¢³• ‰[˜º• ‰ÖÛÒ• ‰`dé• ‰`d– ‰‰Ä!– ‰E'– ‰{Á;– ‰A'B– ‰ŠE‡– ‰²–– ‰s%¢– ‰[®– ‰TO¹– ‰ ZÄ– ‰°IÏ– ‰krÚ– ‰ Ãï– ‰ à — ‰5— ‰Ý}&— ‰ïI,— ‰õ¶C— ‰-I— ‰FÜ`— ‰c(f— ‰vk}— ‰c(ƒ— ‰°jŸ— ‰¤,¥— ‰ᔼ— ‰¤,— ‰”“Þ— ‰Rä— ‰“ë˜ ‰a  ˜ ‰™71˜ ‰Á=˜ ‰[J˜ ‰TOU˜ ‰à`˜ ‰°Ik˜ ‰krv˜ ‰ L‹˜ ‰ L¥˜ ‰ LĘ ‰5ʘ ‰Ñ-ᘠ‰ïIç˜ ‰Z¶þ˜ ‰-™ ‰Eƒ™ ‰c(!™ ‰‚8™ ‰c(>™ ‰‚Z™ ‰¤,a™ ‰Ȩx™ ‰¤,™ ‰™¨›™ ‰R¢™ ‰ŠÙ ‰a Ê™ ‰S[ð™ ‰)Rõ™ ‰ãК ‰æ’š ‰o#š ‰°I/š ‰+?;š ‰krGš ‰Ö­Sš ‰& iš ‰& „𠉡¿Ÿš ‰F~¨š ‰r÷³š ‰93Ú ‰!ÜÏš ‰Þ"áš ‰xÛíš ‰çùš ‰ä › ‰Þ"› ‰Þ"4› ‰6Ë:› ‰2ZO› ‰°I_› ‰Âj› ‰Dv› ‰€a› ‰Ó8‡› ‰už› ‰Ó8¤› ‰Ø—»› ‰[˜Á› ‰Ž$Ø› ‰”ví› ‰”v œ ‰”v&œ ‰”vEœ ‰,_œ ‰ö°eœ ‰;œ ‰¨‡œ ‰…¤œ ‰°‹ªœ ‰Wvïœ ‰²þœ ‰ÖM ‰; ‰°I) ‰+?5 ‰krA ‰Ö­M ‰àY ‰`2e ‰\Æq ‰Ñ} ‰o‰ ‰€a• ‰;à« ‰;àÌ ‰;à÷ ‰;àž ‰¨³/ž ‰!J5ž ‰ÚŒRž ‰îðYž ‰èxwž ‰:Ç~ž ‰*ç–ž ‰:Çž ‰†¼ž ‰x÷Ûž ‰0óž ‰Z8úž ‰ä)Ÿ ‰Z8Ÿ ‰°I1Ÿ ‰N8Ÿ ‰XzPŸ ‰NWŸ ‰¹!oŸ ‰Þ5vŸ ‰rŽŸ ‰Û•Ÿ ‰î­Ÿ ‰ªæ´Ÿ ‰´UÒŸ ‰R¨ÙŸ ‰4bñŸ ‰ÂløŸ ‰´¯  ‰¡%  ‰w/  ‰Ÿ•6  ‰XS  ‰Ÿ•Z  ‰E˜w  ‰y<~  ‰¥  ‰ ëÀ  ‰ý•Ý  ‰½Ïä  ‰öü  ‰½Ï¡ ‰šø¡ ‰B"¡ ‰¨9:¡ ‰BA¡ ‰½ÔY¡ ‰mú`¡ ‰Üx¡ ‰mú¡ ‰ø+—¡ ‰¢_ž¡ ‰ù6·¡ ‰´¾¡ ‰J‡Ò¡ ‰w'Ø¡ ‰æ¾ú¡ ‰w'¢ ‰Tš$¢ ‰ Ì+¢ ‰ÁíH¢ ‰ ÌO¢ ‰Ø?q¢ ‰¾¨x¢ ‰ˆ‘¢ ‰ø.˜¢ ‰̦¬¢ ‰hŒ³¢ ‰bÑ¢ ‰Öt×¢ ‰·²õ¢ ‰Å?ü¢ ‰ï²£ ‰æf&£ ‰©åD£ ‰Ò€K£ ‰—¶m£ ‰©¥t£ ‰m£ ‰Ô„“£ ‰½°£ ‰Ô„¶£ ‰Zᣠ‰²ë£ ‰ˆ¦þ£ ‰øN ¤ ‰U°¤ ‰û…#¤ ‰°I/¤ ‰kr;¤ ‰ÑQ¤ ‰Ñl¤ ‰Ñ‡¤ ‰ie¤ ‰(‹¥¤ ‰ïI«¤ ‰Jä ‰-ɤ ‰¤sᤠ‰c(ç¤ ‰Þÿ¤ ‰c(¥ ‰QÝ"¥ ‰¤,(¥ ‰•@¥ ‰¤,F¥ ‰c¥ ‰ùIi¥ ‰ÿ†¥ ‰)Œ¥ ‰ý)©¥ ‰J¯¥ ‰‘1Ì¥ ‰ü,Ó¥ ‰ÙS𥠉Ÿ•÷¥ ‰6ަ ‰ o¦ ‰¬Ó(¦ ‰£4¦ ‰û…?¦ ‰°IJ¦ ‰krU¦ ‰ o_¦ ‰›Rk¦ ‰û…v¦ ‰°I¦ ‰krŒ¦ ‰ o–¦ ‰'/¢¦ ‰™~´¦ ‰Ý½¦ ‰Ʀ ‰°ÒÕ¦ ‰O1å¦ ‰Ùtí¦ ‰O¾ù¦ ‰û…§ ‰°I§ ‰kr§ ‰ o$§ ‰½M/§ ‰<öF§ ‰]§ ‰•#|§ ‰ŽÚ™§ ‰†Õ­§ ‰ÙtÖ§ ‰ ì§ ‰Ùtý§ ‰ÙŸ¨ ‰Ùt$¨ ‰ŸŒ:¨ ‰ÙtK¨ ‰Y\a¨ ‰Ùtr¨ ‰dˆ¨ ‰Ùt™¨ ‰Ù­¨ ‰Ùt¾¨ ‰~žÒ¨ ‰Ùtì¨ ‰¢B © ‰†‰© ‰Ùt7© ‰î²M© ‰Ùt^© ‰’ët© ‰Ùt…© ‰ë㛩 ‰Ùt¬© ‰~p© ‰ÙtÓ© ‰÷Åé© ‰Ùtú© ‰œ—ª ‰Ùt(ª ‰&Eª ‰/Yª ‰Ùtsª ‰B!‰ª ‰Ùtšª ‰¶¹°ª ‰ÙtÁª ‰ת ‰Ùtèª ‰eËþª ‰Ùt« ‰×s%« ‰Ùt6« ‰ƒ3L« ‰Ùt]« ‰>q« ‰Ùt‹« ‰ç{¨« ‰Ý[¼« ‰ÙtÖ« ‰ õì« ‰Ùtý« ‰§Ž¬ ‰Ùt$¬ ‰,-:¬ ‰ÙtK¬ ‰ŒRa¬ ‰Ùtr¬ ‰ç_ˆ¬ ‰Ùt™¬ ‰\¯¬ ‰ÙtÀ¬ ‰’Ö¬ ‰Ùtç¬ ‰ª²ý¬ ‰Ùt­ ‰< $­ ‰Ùt5­ ‰»I­ ‰Ùtc­ ‰ñ+€­ ‰^»”­ ‰Ùt®­ ‰¯­Ä­ ‰ÙtÕ­ ‰ħë­ ‰Ùtü­ ‰c¤® ‰Ùt#® ‰­9® ‰ÙtJ® ‰]H`® ‰Ùtq® ‰<…® ‰ÙtŸ® ‰œ¼® ‰ÂЮ ‰Ùtê® ‰ d¯ ‰Ùt¯ ‰™5'¯ ‰Ùt8¯ ‰6 N¯ ‰Ùt_¯ ‰§”u¯ ‰Ùt†¯ ‰È[œ¯ ‰Ùt­¯ ‰%pÁ¯ ‰ÙtÛ¯ ‰NYø¯ ‰.ê ° ‰Ùt&° ‰†ê<° ‰ÙtM° ‰¿Cc° ‰Ùtt° ‰ùcа ‰Ùt›° ‰$2±° ‰Ùt° ‰¾ذ ‰Ùté° ‰òëÿ° ‰Ùt± ‰Š7$± ‰Ùt5± ‰*lI± ‰Ùtc± ‰n瀱 ‰Ú=”± ‰Ùt®± ‰ï3ı ‰ÙtÕ± ‰¹”ë± ‰Ùtü± ‰{›² ‰Ùt#² ‰>9² ‰ÙtJ² ‰Þm`² ‰Ùtq² ‰‚Ë…² ‰Ùt–² ‰ª² ‰ÙtIJ ‰è2á² ‰wõ² ‰Ùt³ ‰I#%³ ‰Ùt6³ ‰ɺL³ ‰Ùt]³ ‰M³s³ ‰Ùt„³ ‰<ôš³ ‰Ùt«³ ‰¤ÜÁ³ ‰ÙtÒ³ ‰Ù|è³ ‰Ùtù³ ‰È›´ ‰Ùt ´ ‰¿4´ ‰ÙtE´ ‰*Y´ ‰Ùts´ ‰Æò´ ‰ ‡¤´ ‰Ùt¾´ ‰’¨Ô´ ‰Ùtå´ ‰ìû´ ‰Ùt µ ‰Y"µ ‰Ùt3µ ‰í÷Iµ ‰ÙtZµ ‰Ñ!nµ ‰Ùtµ ‰Lg“µ ‰Ùt­µ ‰îʵ ‰iDÞµ ‰Ùtøµ ‰'N¶ ‰Ùt¶ ‰ï@5¶ ‰ÙtF¶ ‰\¶ ‰Ùtm¶ ‰ÙTƒ¶ ‰Ùt”¶ ‰@ª¶ ‰Ùt»¶ ‰ke϶ ‰Ùtà¶ ‰š ô¶ ‰Ùt· ‰fE+· ‰¹n?· ‰ÙtY· ‰³to· ‰Ùt€· ‰T—–· ‰Ùt§· ‰ ý½· ‰Ùtη ‰ Þä· ‰Ùtõ· ‰ü| ¸ ‰Ùt¸ ‰²I2¸ ‰ÙtC¸ ‰wÓW¸ ‰Ùth¸ ‰%|¸ ‰Ùt–¸ ‰ A³¸ ‰s Ǹ ‰ÙtḠ‰ȹ÷¸ ‰Ùt¹ ‰¥›¹ ‰Ùt/¹ ‰ÀöE¹ ‰ÙtV¹ ‰9nl¹ ‰Ùt}¹ ‰•Ó¹ ‰Ùt¤¹ ‰4ƒº¹ ‰Ùt˹ ‰‰mß¹ ‰Ùtð¹ ‰Yìº ‰Ùtº ‰ÛË;º ‰'@Oº ‰Ùtiº ‰äº ‰Ùtº ‰=¦º ‰Ùt·º ‰1–ͺ ‰ÙtÞº ‰×Oôº ‰Ùt» ‰*¡» ‰Ùt,» ‰Å”B» ‰ÙtS» ‰cpg» ‰Ùtx» ‰×FŒ» ‰Ùt¦» ‰’Nû ‰Þé×» ‰Ùtñ» ‰üÒ¼ ‰Ùt¼ ‰l.¼ ‰Ùt?¼ ‰J`U¼ ‰Ùtf¼ ‰±/|¼ ‰Ùt¼ ‰•ƒ£¼ ‰Ùt´¼ ‰ Iʼ ‰ÙtÛ¼ ‰&µï¼ ‰Ùt½ ‰N—½ ‰Ùt.½ ‰}ïK½ ‰æ©_½ ‰Ùty½ ‰%G½ ‰Ùt ½ ‰ÁV¶½ ‰Ùtǽ ‰AÆÝ½ ‰Ùtî½ ‰(¾ ‰Ùt¾ ‰Y+¾ ‰Ùt<¾ ‰1¤R¾ ‰Ùtc¾ ‰Y¹w¾ ‰Ùtˆ¾ ‰L%œ¾ ‰Ùt¶¾ ‰OÓ¾ ‰ùïç¾ ‰Ùt¿ ‰¿ ‰Ùt(¿ ‰‚ú>¿ ‰ÙtO¿ ‰WÉe¿ ‰Ùtv¿ ‰_üŒ¿ ‰Ùt¿ ‰ÿ³¿ ‰ÙtÄ¿ ‰qÚ¿ ‰Ùtë¿ ‰Ô‰À ‰ÙtÀ ‰Ø.(À ‰Ùt9À ‰<²OÀ ‰Ùt`À ‰¸¥vÀ ‰Ùt‡À ‰ÌÀ ‰Ùt®À ‰³ÈÄÀ ‰ÙtÕÀ ‰R ëÀ ‰ÙtüÀ ‰~ÒÁ ‰Ùt#Á ‰”Â9Á ‰ÙtJÁ ‰¢ `Á ‰ÙtqÁ ‰:ý‡Á ‰Ùt˜Á ‰{®Á ‰Ùt¿Á ‰2ÕÁ ‰ÙtæÁ ‰è@üÁ ‰Ùt  ‰Ç# ‰Ùt4 ‰§J ‰Ùt[ ‰½q ‰Ùt‚ ‰ƒ˜Â ‰Ùt©Â ‰ÿ¿Â ‰ÙtР‰ç—æÂ ‰Ùt÷ ‰é à ‰Ùtà ‰+¯2à ‰ÙtCà ‰s[Wà ‰Ùtqà ‰ŽÃ ‰ÄӢà ‰Ùt¼Ã ‰w§Òà ‰Ùtãà ‰ç8ùà ‰Ùt Ä ‰æÔ Ä ‰Ùt1Ä ‰WGÄ ‰ÙtXÄ ‰VlÄ ‰Ùt}Ä ‰+X‘Ä ‰Ùt«Ä ‰_ÈÄ ‰ QÜÄ ‰ÙtöÄ ‰êG Å ‰ÙtÅ ‰›>3Å ‰ÙtDÅ ‰ÅÞZÅ ‰ÙtkÅ ‰ðÅ ‰Ùt’Å ‰iȨЉÙt¹Å ‰ÂoÏÅ ‰ÙtàÅ ‰QöÅ ‰ÙtÆ ‰ÎRÆ ‰Ùt.Æ ‰œ*DÆ ‰ÙtUÆ ‰‘+iÆ ‰ÙtzÆ ‰¯—ŽÆ ‰Ùt¨Æ ‰ÉÌÅÆ ‰§eÙÆ ‰ÙtóÆ ‰‘± Ç ‰ÙtÇ ‰—ƒ0Ç ‰ÙtAÇ ‰¿BWÇ ‰ÙthÇ ‰U¦~Ç ‰ÙtÇ ‰”ú¥Ç ‰Ùt¶Ç ‰oÌÇ ‰ÙtÝÇ ‰î…óÇ ‰ÙtÈ ‰HŠÈ ‰Ùt+È ‰AÈ ‰ÙtRÈ ‰¡øhÈ ‰ÙtyÈ ‰PÈ ‰Ùt È ‰A?¶È ‰ÙtÇÈ ‰!ÝÈ ‰ÙtîÈ ‰®°É ‰ÙtÉ ‰î É ‰M)É ‰Ç7/É ‰°IÉ ‰W7PÉ ‰­÷]É ‰»lfÉ ‰¾É ‰+1…É ‰Ñ—¡É ‰}U§É ‰°µÉ ‰½»É ‰C×ÄÉ ‰¤CÐÉ ‰CÛÉ ‰(ôÊ ‰8 Ê ‰oÊ ‰°I+Ê ‰+?7Ê ‰krCÊ ‰Ö­OÊ ‰‹~eÊ ‰‹~€Ê ‰M›Ê ‰±!¡Ê ‰AÖ¾Ê ‰±!ÄÊ ‰'&áÊ ‰x8çÊ ‰> Ë ‰¡Ë ‰_^-Ë ‰Û3Ë ‰XUKË ‰QË ‰Ñ™oË ‰–ÅuË ‰µ™Ë ‰yå©Ë ‰oµË ‰°IÁË ‰+?ÍË ‰krÙË ‰Ö­åË ‰‹~ûË ‰‹~Ì ‰M1Ì ‰±!7Ì ‰f¨TÌ ‰±!ZÌ ‰éîwÌ ‰x8}Ì ‰—ÓŸÌ ‰¡¥Ì ‰urÃÌ ‰ÛÉÌ ‰Ë>áÌ ‰çÌ ‰DòÍ ‰–Å Í ‰403Í ‰äz?Í ‰¹JÍ ‰¥UÍ ‰ù§`Í ‰ˆÂkÍ ‰é¤uÍ ‰Ö´zÍ ‰—Í ‰ç8ŒÍ ‰"¤šÍ ‰û…§Í ‰kr´Í ‰°IÁÍ ‰ïëØÍ ‰ïëôÍ ‰ïIûÍ ‰¥¶Î ‰-Î ‰Û2Î ‰c(9Î ‰!²QÎ ‰c(XÎ ‰V±uÎ ‰¤,|Î ‰TޔΠ‰¤,›Î ‰ÖܸΠ‰Ÿ•¿Î ‰ÀõÜÎ ‰)ãÎ ‰ßÿÏ ‰ùIÏ ‰šo$Ï ‰ü,+Ï ‰q(HÏ ‰JOÏ ‰¥–lÏ ‰iesÏ ‰Áå‹Ï ‰ o”Ï ‰ÙkžÏ ‰!.«Ï ‰"¤¹Ï ‰û…ÆÏ ‰krÓÏ ‰°IàÏ ‰ïë÷Ï ‰ïëÐ ‰ïIÐ ‰š'2Ð ‰-9Ð ‰÷FQÐ ‰c(XÐ ‰…_pÐ ‰c(wÐ ‰Ñ^”Ð ‰¤,›Ð ‰ê³Ð ‰¤,ºÐ ‰:…×Ð ‰Ÿ•ÞÐ ‰ÐmûÐ ‰)Ñ ‰&¢Ñ ‰ùI&Ñ ‰1ØCÑ ‰ü,JÑ ‰ŸËgÑ ‰JnÑ ‰&‹Ñ ‰ie’Ñ ‰ÖÐªÑ ‰ o³Ñ ‰ÙkÇÑ ‰“nÓÑ ‰¹ÞÑ ‰¥éÑ ‰ù§ôÑ ‰ˆÂÿÑ ‰é¤@Ò ‰ÎÀXÒ ‰¿)dÒ ‰opÒ ‰°I|Ò ‰+?ˆÒ ‰kr”Ò ‰Ö­ Ò ‰‹~¶Ò ‰‹~ÑÒ ‰MìÒ ‰±!òÒ ‰ÄÞÓ ‰±!Ó ‰552Ó ‰x88Ó ‰4/ZÓ ‰¡`Ó ‰ˆ0~Ó ‰Û„Ó ‰\œÓ ‰¢Ó ‰=CÀÓ ‰–ÅÆÓ ‰tuîÓ ‰íúÓ ‰°IÔ ‰+?Ô ‰krÔ ‰Ö­&Ô ‰o1Ô ‰x87Ô ‰®ZOÔ ‰¡UÔ ‰AÚnÔ ‰–ÅtÔ ‰øXˆÔ ‰ÛŽÔ ‰@_¡Ô ‰?§Ô ‰”˜ºÔ ‰>ÀÔ ‰›hÔÔ ‰j,àÔ ‰r÷õÔ ‰²ÿÔ ‰» Õ ‰"¤Õ ‰û…'Õ ‰kr4Õ ‰°IAÕ ‰ïëXÕ ‰ïëtÕ ‰ïI{Õ ‰¹“Õ ‰-šÕ ‰úI²Õ ‰c(¹Õ ‰`ÑÕ ‰c(ØÕ ‰E_õÕ ‰¤,üÕ ‰‡Ö ‰¤,Ö ‰L†8Ö ‰Ÿ•?Ö ‰“W\Ö ‰)cÖ ‰£€Ö ‰ùI‡Ö ‰ ‘¤Ö ‰ü,«Ö ‰ÌÈÖ ‰JÏÖ ‰þìÖ ‰ieóÖ ‰Ùv × ‰ o× ‰Ùk× ‰Ž+× ‰"¤9× ‰û…F× ‰krS× ‰°I`× ‰ïëw× ‰ïë“× ‰ïIš× ‰ ²× ‰-¹× ‰–?Ñ× ‰c(Ø× ‰¹ð× ‰c(÷× ‰éØ ‰¤,Ø ‰F73Ø ‰¤,:Ø ‰½6WØ ‰Ÿ•^Ø ‰K{Ø ‰)‚Ø ‰™YŸØ ‰ùI¦Ø ‰<öÃØ ‰ü,ÊØ ‰à~çØ ‰JîØ ‰| Ù ‰ieÙ ‰Z*Ù ‰ o3Ù ‰ÙkGÙ ‰¶SÙ ‰°I^Ù ‰+?iÙ ‰krtÙ ‰Ö­Ù ‰oŠÙ ‰x8Ù ‰ìö¨Ù ‰¡®Ù ‰hºÇÙ ‰–ÅÍÙ ‰ÓEáÙ ‰ÛçÙ ‰âúÙ ‰?Ú ‰%(Ú ‰>Ú ‰uq-Ú ‰z29Ú ‰r÷NÚ ‰²XÚ ‰%ÕeÚ ‰"¤sÚ ‰û…€Ú ‰krÚ ‰°IšÚ ‰ïë±Ú ‰ïëÍÚ ‰ïIÔÚ ‰]ìÚ ‰-óÚ ‰½3 Û ‰c(Û ‰*Û ‰c(1Û ‰1NÛ ‰¤,UÛ ‰ÕùmÛ ‰¤,tÛ ‰ûø‘Û ‰Ÿ•˜Û ‰Q]µÛ ‰)¼Û ‰ÛAÙÛ ‰ùIàÛ ‰–ÆýÛ ‰ü,Ü ‰Åy!Ü ‰J(Ü ‰AõEÜ ‰ieLÜ ‰z¸dÜ ‰ omÜ ‰ÙkwÜ ‰P„Ü ‰"¤’Ü ‰û…ŸÜ ‰kr¬Ü ‰°I¹Ü ‰ïëÐÜ ‰ïëìÜ ‰ïIóÜ ‰K‘ Ý ‰-Ý ‰5´*Ý ‰c(1Ý ‰"‹IÝ ‰c(PÝ ‰rŠmÝ ‰¤,tÝ ‰{»ŒÝ ‰¤,“Ý ‰Ôº°Ý ‰Ÿ•·Ý ‰·~ÔÝ ‰)ÛÝ ‰ËÛøÝ ‰ùIÿÝ ‰Ô:Þ ‰ü,#Þ ‰³ @Þ ‰JGÞ ‰:cdÞ ‰iekÞ ‰‹;ƒÞ ‰ oŒÞ ‰Ùk Þ ‰ z¬Þ ‰o¸Þ ‰°IÄÞ ‰+?ÐÞ ‰krÜÞ ‰Ö­èÞ ‰‹~þÞ ‰‹~ß ‰M4ß ‰±!:ß ‰{çWß ‰±!]ß ‰oùzß ‰x8€ß ‰ç¢ß ‰¡¨ß ‰uÆß ‰ÛÌß ‰‹~äß ‰êß ‰¿Õà ‰–Åà ‰Ñ6à ‰Ò‰Bà ‰°IMà ‰+?Xà ‰krcà ‰Ö­nà ‰oyà ‰x8à ‰oŸ—à ‰¡à ‰(½¶à ‰–Å¼à ‰åþÐà ‰ÛÖà ‰Xéà ‰?ïà ‰á ‰>á ‰oá ‰5n(á ‰r÷=á ‰²Gá ‰»PTá ‰"¤bá ‰û…oá ‰kr|á ‰°I‰á ‰ïë á ‰ïë¼á ‰ïIÃá ‰Ê/Ûá ‰-âá ‰…Púá ‰c(â ‰&!â ‰c( â ‰” =â ‰¤,Dâ ‰I\â ‰¤,câ ‰'I€â ‰Ÿ•‡â ‰Du¤â ‰)«â ‰^øÈâ ‰ùIÏâ ‰›ãìâ ‰ü,óâ ‰ñGã ‰Jã ‰‹ 4ã ‰ie;ã ‰]$Sã ‰ o\ã ‰Ùkfã ‰B>sã ‰"¤ã ‰û…Žã ‰kr›ã ‰°I¨ã ‰ïë¿ã ‰ïëÛã ‰ïIâã ‰ #úã ‰-ä ‰3ä ‰c( ä ‰õß8ä ‰c(?ä ‰5F\ä ‰¤,cä ‰p{ä ‰¤,‚ä ‰g Ÿä ‰Ÿ•¦ä ‰5ÃÃä ‰)Êä ‰hÎçä ‰ùIîä ‰þ: å ‰ü,å ‰‹P/å ‰J6å ‰Så ‰ieZå ‰r®rå ‰ o{å ‰Ùkå ‰­«›å ‰o§å ‰°I³å ‰+?¿å ‰krËå ‰Ö­×å ‰‹~íå ‰‹~æ ‰M#æ ‰±!)æ ‰ñFæ ‰±!Læ ‰Ÿiæ ‰x8oæ ‰7‘æ ‰¡—æ ‰ ™µæ ‰Û»æ ‰y¦Óæ ‰Ùæ ‰÷æ ‰–Åýæ ‰îí%ç ‰m—1ç ‰°I<ç ‰+?Gç ‰krRç ‰Ö­]ç ‰ohç ‰x8nç ‰Å«†ç ‰¡Œç ‰¶¥ç ‰–Å«ç ‰ìý¿ç ‰ÛÅç ‰-Øç ‰?Þç ‰â&ñç ‰>÷ç ‰ª è ‰$è ‰r÷,è ‰²6è ‰õCè ‰"¤Qè ‰û…^è ‰krkè ‰°Ixè ‰ïëè ‰ïë«è ‰ïI²è ‰‰§Êè ‰-Ñè ‰±Îéè ‰c(ðè ‰Å é ‰c(é ‰[ ,é ‰¤,3é ‰ ÊKé ‰¤,Ré ‰ÅÉoé ‰Ÿ•vé ‰ý÷“é ‰)šé ‰•ã·é ‰ùI¾é ‰ôhÛé ‰ü,âé ‰½ ÿé ‰Jê ‰"#ê ‰ie*ê ‰‘“Bê ‰ oKê ‰ÙkUê ‰ãåbê ‰"¤pê ‰û…}ê ‰krŠê ‰°I—ê ‰ïë®ê ‰ïëÊê ‰ïIÑê ‰éê ‰-ðê ‰!$ë ‰c(ë ‰¤'ë ‰c(.ë ‰aKë ‰¤,Rë ‰*jë ‰¤,që ‰©)Žë ‰Ÿ••ë ‰DM²ë ‰)¹ë ‰¬HÖë ‰ùIÝë ‰X·úë ‰ü,ì ‰Åsì ‰J%ì ‰ßBì ‰ieIì ‰þ#aì ‰ ojì ‰Ùk~ì ‰l°Šì ‰o–ì ‰°I¢ì ‰+?®ì ‰krºì ‰Ö­Æì ‰‹~Üì ‰‹~÷ì ‰Mí ‰±!í ‰Ó<5í ‰±!;í ‰ƒèXí ‰x8^í ‰á“€í ‰¡†í ‰a¤í ‰Ûªí ‰ÕÉÂí ‰Èí ‰z’æí ‰–Åìí ‰Jî ‰þ¼ î ‰°I+î ‰+?6î ‰krAî ‰Ö­Lî ‰oWî ‰x8]î ‰y›uî ‰¡{î ‰) ”î ‰–Åšî ‰mï®î ‰Û´î ‰‘òÇî ‰?Íî ‰Üìàî ‰>æî ‰Rùúî ‰ ¾ï ‰r÷ï ‰²%ï ‰‘@2ï ‰"¤@ï ‰û…Mï ‰krZï ‰°Igï ‰ïë~ï ‰ïëšï ‰ïI¡ï ‰P~¹ï ‰-Àï ‰¾œØï ‰c(ßï ‰s÷ï ‰c(þï ‰Ñq𠉤,"ð ‰ǘ:𠉤,A𠉸Ž^𠉟•eð ‰sÂð ‰)‰ð ‰ ¹¦ð ‰ùI­ð ‰;`Êð ‰ü,Ñ𠉕ãîð ‰Jõ𠉢\ñ ‰ieñ ‰ö1ñ ‰ o:ñ ‰ÙkDñ ‰éNQñ ‰"¤_ñ ‰û…lñ ‰kryñ ‰°I†ñ ‰ïëñ ‰ïë¹ñ ‰ïIÀñ ‰=ñØñ ‰-ßñ ‰! ÷ñ ‰c(þñ ‰åò ‰c(ò ‰Œ:ò ‰¤,Aò ‰r)Yò ‰¤,`ò ‰)}ò ‰Ÿ•„ò ‰ñä¡ò ‰)¨ò ‰%FÅò ‰ùIÌò ‰ɱéò ‰ü,ðò ‰u ó ‰Jó ‰Þ1ó ‰ie8ó ‰D6Pó ‰ oYó ‰Ùkmó ‰ŒÅyó ‰o…ó ‰°I‘ó ‰+?ó ‰kr©ó ‰Ö­µó ‰‹~Ëó ‰‹~æó ‰Mô ‰±!ô ‰Tû$ô ‰±!*ô ‰5JGô ‰x8Mô ‰U9oô ‰¡uô ‰¡¯“ô ‰Û™ô ‰Êd±ô ‰·ô ‰¶¯Õô ‰–ÅÛô ‰ˆnõ ‰CVõ ‰°Iõ ‰+?%õ ‰kr0õ ‰Ö­;õ ‰oFõ ‰x8Lõ ‰•çdõ ‰¡jõ ‰–Ńõ ‰–ʼnõ ‰ÝGõ ‰Û£õ ‰%¶õ ‰?¼õ ‰æ Ïõ ‰>Õõ ‰½féõ ‰açõõ ‰r÷ ö ‰²ö ‰£ö!ö ‰"¤/ö ‰û…<ö ‰krIö ‰°IVö ‰ïëmö ‰ïë‰ö ‰ïIö ‰ÿç¨ö ‰-¯ö ‰9*Çö ‰c(Îö ‰4èæö ‰c(íö ‰§ç ÷ ‰¤,÷ ‰‚)÷ ‰¤,0÷ ‰¢M÷ ‰Ÿ•T÷ ‰¶Öq÷ ‰)x÷ ‰à1•÷ ‰ùIœ÷ ‰D¤¹÷ ‰ü,À÷ ‰\Ý÷ ‰Jä÷ ‰ÂÐø ‰ieø ‰KS ø ‰ o)ø ‰Ùk3ø ‰M@ø ‰"¤Nø ‰û…[ø ‰krhø ‰°Iuø ‰ïëŒø ‰ïë¨ø ‰ïI¯ø ‰U4Çø ‰-Îø ‰ 7æø ‰c(íø ‰ù ‰c( ù ‰o)ù ‰¤,0ù ‰8AHù ‰¤,Où ‰y@lù ‰Ÿ•sù ‰-Jù ‰)—ù ‰þ)´ù ‰ùI»ù ‰ªÆØù ‰ü,ßù ‰¸…üù ‰Jú ‰‡ï ú ‰ie'ú ‰9Û?ú ‰ oHú ‰Ùk\ú ‰ºphú ‰otú ‰°I€ú ‰+?Œú ‰kr˜ú ‰Ö­¤ú ‰‹~ºú ‰‹~Õú ‰Mðú ‰±!öú ‰Kû ‰±!û ‰”š6û ‰x8<û ‰ ^û ‰¡dû ‰""‚û ‰Ûˆû ‰'â û ‰¦û ‰¬_Äû ‰–ÅÊû ‰àòû ‰¡<þû ‰°I ü ‰+?ü ‰krü ‰Ö­*ü ‰o5ü ‰x8;ü ‰¿lSü ‰¡Yü ‰¥mrü ‰–Åxü ‰•{Œü ‰Û’ü ‰k}¥ü ‰?«ü ‰‰o¾ü ‰>Äü ‰9.Øü ‰+[äü ‰r÷ùü ‰²ý ‰?Sý ‰"¤ý ‰û…+ý ‰kr8ý ‰°IEý ‰ïë\ý ‰ïëxý ‰ïIý ‰L„—ý ‰-žý ‰Ŧ¶ý ‰c(½ý ‰äkÕý ‰c(Üý ‰kùý ‰¤,þ ‰ˆœþ ‰¤,þ ‰¬›<þ ‰Ÿ•Cþ ‰]r`þ ‰)gþ ‰cÁ„þ ‰ùI‹þ ‰ì/¨þ ‰ü,¯þ ‰´ðÌþ ‰JÓþ ‰ñXðþ ‰ie÷þ ‰:Sÿ ‰ oÿ ‰Ùk"ÿ ‰[È/ÿ ‰"¤=ÿ ‰û…Jÿ ‰krWÿ ‰°Idÿ ‰ïë{ÿ ‰ïë—ÿ ‰ïIžÿ ‰è¶ÿ ‰-½ÿ ‰ÈÕÿ ‰c(Üÿ ‰¤ôÿ ‰c(ûÿ ‰®£ ‰¤, ‰ËÑ7 ‰¤,> ‰Ñ[ ‰Ÿ•b ‰:è ‰)† ‰£¤£ ‰ùIª ‰% Ç ‰ü,Î ‰¨ë ‰Jò ‰‡ ‰ie ‰‰™. ‰ o7 ‰ÙkK ‰`W ‰oc ‰°Io ‰+?{ ‰kr‡ ‰Ö­“ ‰‹~© ‰‹~Ä ‰Mß ‰±!å ‰ìï ‰±! ‰;U% ‰x8+ ‰ÈbM ‰¡S ‰lq ‰Ûw ‰ÀÇ ‰• ‰2â³ ‰–Ź ‰ë]á ‰ í ‰°Iø ‰+? ‰kr ‰Ö­ ‰o$ ‰x8* ‰ºB ‰¡H ‰a$a ‰–Åg ‰B { ‰Û ‰]±” ‰?š ‰Þµ­ ‰>³ ‰•™Ç ‰;Ó ‰r÷è ‰²ò ‰â³ÿ ‰"¤  ‰û… ‰kr' ‰°I4 ‰ïëK ‰ïëg ‰ïIn ‰É† ‰- ‰‡Ñ¥ ‰c(¬ ‰|?Ä ‰c(Ë ‰=?è ‰¤,ï ‰™k ‰¤, ‰µj+ ‰Ÿ•2 ‰2ôO ‰)V ‰KŠs ‰ùIz ‰Ék— ‰ü,ž ‰ß³» ‰J ‰&–ß ‰ieæ ‰ìþ ‰ o ‰Ùk ‰å7 ‰"¤, ‰û…9 ‰krF ‰°IS ‰ïëj ‰ïë† ‰ïI ‰$ø¥ ‰-¬ ‰0*Ä ‰c(Ë ‰«ã ‰c(ê ‰$ ‰¤, ‰¦B& ‰¤,- ‰1BJ ‰Ÿ•Q ‰Åën ‰)u ‰}b’ ‰ùI™ ‰ó¶ ‰ü,½ ‰ì‹Ú ‰Já ‰óçþ ‰ie ‰*< ‰ o& ‰Ùk: ‰QaF ‰¹Q ‰¥\ ‰ù§g ‰ˆÂr ‰é¤| ‰&5ˆ ‰¹“ ‰¥ž ‰ù§© ‰ˆÂ´ ‰é¤¾ ‰aÊ ‰¹Õ ‰¥à ‰ù§ë ‰ˆÂö ‰é¤  ‰ƒ¸  ‰o  ‰°I$  ‰+?0  ‰kr<  ‰Ö­H  ‰‹~^  ‰‹~y  ‰M”  ‰±!š  ‰ ·  ‰±!½  ‰vÚ  ‰x8à  ‰±\  ‰¡  ‰g³&  ‰Û,  ‰ôYD  ‰J  ‰H3h  ‰–Ån  ‰¥Œ–  ‰ô¢  ‰°I­  ‰+?¸  ‰krà  ‰Ö­Î  ‰oÙ  ‰x8ß  ‰D–÷  ‰¡ý  ‰  ‰–Å  ‰Mã0  ‰Û6  ‰"èI  ‰?O  ‰ñ"b  ‰>h  ‰ˆ|  ‰0ƈ  ‰r÷  ‰²§  ‰»´  ‰"¤  ‰û…Ï  ‰krÜ  ‰°Ié  ‰ïë  ‰ïë  ‰ïI#  ‰†i;  ‰-B  ‰|‚Z  ‰c(a  ‰¤Gy  ‰c(€  ‰pF  ‰¤,¤  ‰¡m¼  ‰¤,à  ‰[mà  ‰Ÿ•ç  ‰ÇV  ‰)  ‰Ù(  ‰ùI/  ‰)L  ‰ü,S  ‰—³p  ‰Jw  ‰9”  ‰ie›  ‰°é³  ‰ o¼  ‰ÙkÆ  ‰ÌŸÓ  ‰"¤á  ‰û…î  ‰krû  ‰°I ‰ïë ‰ïë; ‰ïIB ‰<žZ ‰-a ‰ªÁy ‰c(€ ‰e ˜ ‰c(Ÿ ‰F×¼ ‰¤,à ‰‡2Û ‰¤,â ‰32ÿ ‰Ÿ• ‰:Ž# ‰)* ‰nMG ‰ùIN ‰çGk ‰ü,r ‰F· ‰J– ‰£u³ ‰ieº ‰0[Ò ‰ oÛ ‰Ùkï ‰y‹û ‰o ‰°I ‰+? ‰kr+ ‰Ö­7 ‰‹~M ‰‹~h ‰Mƒ ‰±!‰ ‰«i¦ ‰±!¬ ‰Æ É ‰x8Ï ‰Mñ ‰¡÷ ‰ßž ‰Û ‰;53 ‰9 ‰ëèW ‰–Å] ‰°i… ‰™D‘ ‰o ‰°I© ‰+?µ ‰krÁ ‰Ö­Í ‰‹~ã ‰‹~þ ‰M ‰±! ‰X< ‰±!B ‰±_ ‰x8e ‰d‡ ‰¡ ‰œÖ« ‰Û± ‰4éÉ ‰Ï ‰OŠí ‰–Åó ‰I0 ‰Ö' ‰Y22 ‰vV< ‰$qE ‰·îO ‰Yt[ ‰og ‰°Is ‰+? ‰kr‹ ‰Ö­— ‰‹~­ ‰‹~È ‰Mã ‰±!é ‰:Á ‰±!  ‰Ãv) ‰x8/ ‰߀Q ‰¡W ‰|Vu ‰Û{ ‰î“ ‰™ ‰^Ò· ‰–Ž ‰zå ‰ þñ ‰oý ‰°I  ‰+? ‰kr! ‰Ö­- ‰‹~C ‰‹~^ ‰My ‰±! ‰Vœ ‰±!¢ ‰ßx¿ ‰x8Å ‰©%ç ‰¡í ‰Cf  ‰Û ‰®) ‰/ ‰ìM ‰–ÅS ‰oõ{ ‰¡‡ ‰Y2’ ‰vVœ ‰$q¥ ‰·î¯ ‰_» ‰Y2Æ ‰vVÐ ‰$qÙ ‰·îã ‰Œ©ï ‰Y2ú ‰vV ‰$q  ‰·î ‰Wh# ‰Y2. ‰vV8 ‰$qA ‰·îK ‰%ÑW ‰Y2b ‰vVl ‰$qu ‰·î ‰•ö‹ ‰o— ‰°I£ ‰+?¯ ‰kr» ‰Ö­Ç ‰‹~Ý ‰‹~ø ‰M ‰±! ‰ü6 ‰±!< ‰uÖY ‰x8_ ‰ôV ‰¡‡ ‰y¥ ‰Û« ‰ Äà ‰É ‰ÖÌç ‰–Åí ‰Øu ‰¤! ‰°I, ‰+?7 ‰krB ‰Ö­M ‰oX ‰x8^ ‰ŠŠv ‰¡| ‰!e• ‰–Å› ‰o¯ ‰Ûµ ‰2úÈ ‰?Î ‰+–á ‰>ç ‰ùû ‰Ÿ0 ‰r÷ ‰²& ‰Ýn3 ‰"¤A ‰û…N ‰kr[ ‰°Ih ‰ïë ‰ïë› ‰ïI¢ ‰C º ‰-Á ‰t&Ù ‰c(à ‰ªø ‰c(ÿ ‰s© ‰¤,# ‰üÕ; ‰¤,B ‰ÒÔ_ ‰Ÿ•f ‰`¾ƒ ‰)Š ‰yù§ ‰ùI® ‰ޏË ‰ü,Ò ‰[ï ‰Jö ‰.‘ ‰ie ‰ÿ.2 ‰ o; ‰ÙkE ‰=|R ‰"¤` ‰û…m ‰krz ‰°I‡ ‰ïëž ‰ïëº ‰ïIÁ ‰>WÙ ‰-à ‰¹ø ‰c(ÿ ‰Ú³ ‰c( ‰²²; ‰¤,B ‰?àZ ‰¤,a ‰šß~ ‰Ÿ•… ‰ 𢠉)© ‰áÆ ‰ùIÍ ‰ªê ‰ü,ñ ‰q* ‰J ‰Ü@2 ‰ie9 ‰KÆQ ‰ oZ ‰Ùkn ‰téz ‰o† ‰°I’ ‰+?ž ‰krª ‰Ö­¶ ‰‹~Ì ‰‹~ç ‰M ‰±! ‰üg% ‰±!+ ‰?ˆH ‰x8N ‰@Ÿp ‰¡v ‰í” ‰Ûš ‰óæ² ‰¸ ‰pÊÖ ‰–ÅÜ ‰Ê  ‰kÒ  ‰°I  ‰+?&  ‰kr1  ‰Ö­<  ‰oG  ‰x8M  ‰he  ‰¡k  ‰Æ0„  ‰–ÅŠ  ‰ež  ‰Û¤  ‰¡·  ‰?½  ‰¡ïÐ  ‰>Ö  ‰ zê  ‰(ö  ‰r÷ ! ‰²! ‰,Õ"! ‰"¤0! ‰û…=! ‰krJ! ‰°IW! ‰ïën! ‰ïëŠ! ‰ïI‘! ‰õ/©! ‰-°! ‰ EÈ! ‰c(Ï! ‰¹>ç! ‰c(î! ‰> " ‰¤," ‰/i*" ‰¤,1" ‰ðeN" ‰Ÿ•U" ‰"Ar" ‰)y" ‰©…–" ‰ùI" ‰\àº" ‰ü,Á" ‰~­Þ" ‰Jå" ‰ü# ‰ie # ‰lQ!# ‰ o*# ‰Ùk4# ‰! A# ‰"¤O# ‰û…\# ‰kri# ‰°Iv# ‰ïë# ‰ïë©# ‰ïI°# ‰›cÈ# ‰-Ï# ‰>ç# ‰c(î# ‰Ž$ ‰c( $ ‰*$ ‰¤,1$ ‰TAI$ ‰¤,P$ ‰Õ@m$ ‰Ÿ•t$ ‰ Ë‘$ ‰)˜$ ‰v_µ$ ‰ùI¼$ ‰ó Ù$ ‰ü,à$ ‰šý$ ‰J% ‰>N!% ‰ie(% ‰“Ã@% ‰ oI% ‰Ùk]% ‰Ó i% ‰ou% ‰°I% ‰+?% ‰kr™% ‰Ö­¥% ‰‹~»% ‰‹~Ö% ‰Mñ% ‰±!÷% ‰‡×& ‰±!& ‰S>7& ‰x8=& ‰–W_& ‰¡e& ‰3¼ƒ& ‰Û‰& ‰ZO¡& ‰§& ‰IŸÅ& ‰–ÅË& ‰Â)ó& ‰Dvÿ& ‰°I ' ‰+?' ‰kr ' ‰Ö­+' ‰o6' ‰x8<' ‰ºÿT' ‰¡Z' ‰Z÷s' ‰–Åy' ‰3+' ‰Û“' ‰˜-¦' ‰?¬' ‰÷¿' ‰>Å' ‰Í:Ù' ‰ å' ‰r÷ú' ‰²( ‰Uý( ‰"¤( ‰û…,( ‰kr9( ‰°IF( ‰ïë]( ‰ïëy( ‰ïI€( ‰-˜( ‰-Ÿ( ‰¶¯·( ‰c(¾( ‰ºJÖ( ‰c(Ý( ‰;Jú( ‰¤,) ‰"Â) ‰¤, ) ‰‰n=) ‰Ÿ•D) ‰Ða) ‰)h) ‰Ø…) ‰ùIŒ) ‰@@©) ‰ü,°) ‰¼°Í) ‰JÔ) ‰Lmñ) ‰ieø) ‰* ‰ o* ‰Ùk#* ‰,±0* ‰"¤>* ‰û…K* ‰krX* ‰°Ie* ‰ïë|* ‰ïë˜* ‰ïIŸ* ‰EW·* ‰-¾* ‰Ò2Ö* ‰c(Ý* ‰´Zõ* ‰c(ü* ‰"Z+ ‰¤, + ‰ 8+ ‰¤,?+ ‰…€\+ ‰Ÿ•c+ ‰žQ€+ ‰)‡+ ‰Ç ¤+ ‰ùI«+ ‰] È+ ‰ü,Ï+ ‰­Šì+ ‰Jó+ ‰bI, ‰ie, ‰ûÈ/, ‰ o8, ‰ÙkL, ‰ÑX, ‰od, ‰°Ip, ‰+?|, ‰krˆ, ‰Ö­”, ‰‹~ª, ‰‹~Å, ‰Mà, ‰±!æ, ‰Ù¿- ‰±! - ‰¦&- ‰x8,- ‰`FN- ‰¡T- ‰Gr- ‰Ûx- ‰ºÁ- ‰–- ‰¿=´- ‰–ź- ‰Üáâ- ‰ïaî- ‰°Iù- ‰+?. ‰kr. ‰Ö­. ‰o%. ‰x8+. ‰©#C. ‰¡I. ‰_b. ‰–Åh. ‰.ô|. ‰Û‚. ‰>P•. ‰?›. ‰+í®. ‰>´. ‰uÈ. ‰>>Ô. ‰r÷é. ‰²ó. ‰/ ‰"¤/ ‰û…/ ‰kr(/ ‰°I5/ ‰ïëL/ ‰ïëh/ ‰ïIo/ ‰7.‡/ ‰-Ž/ ‰[ ¦/ ‰c(­/ ‰_ˆÅ/ ‰c(Ì/ ‰0ªé/ ‰¤,ð/ ‰ßK0 ‰¤,0 ‰HK,0 ‰Ÿ•30 ‰+'P0 ‰)W0 ‰‰"t0 ‰ùI{0 ‰Uø˜0 ‰ü,Ÿ0 ‰÷޼0 ‰JÃ0 ‰à0 ‰ieç0 ‰llÿ0 ‰ o1 ‰Ùk1 ‰c°1 ‰"¤-1 ‰û…:1 ‰krG1 ‰°IT1 ‰ïëk1 ‰ïë‡1 ‰ïIŽ1 ‰Õ¹¦1 ‰-­1 ‰±æÅ1 ‰c(Ì1 ‰ÐEä1 ‰c(ë1 ‰vE2 ‰¤,2 ‰)'2 ‰¤,.2 ‰žK2 ‰Ÿ•R2 ‰¬o2 ‰)v2 ‰M5“2 ‰ùIš2 ‰Ôg·2 ‰ü,¾2 ‰|`Û2 ‰Jâ2 ‰Ô˜ÿ2 ‰ie3 ‰äO3 ‰ o'3 ‰Ùk;3 ‰gG3 ‰oS3 ‰°I_3 ‰+?k3 ‰krw3 ‰Ö­ƒ3 ‰‹~™3 ‰‹~´3 ‰MÏ3 ‰±!Õ3 ‰¶šò3 ‰±!ø3 ‰¼ï4 ‰x84 ‰Hä=4 ‰¡C4 ‰‰§a4 ‰Ûg4 ‰™Ë4 ‰…4 ‰ʪ£4 ‰–Å©4 ‰6Ñ4 ‰ô¢Ý4 ‰°Iè4 ‰+?ó4 ‰krþ4 ‰Ö­ 5 ‰o5 ‰x85 ‰÷O25 ‰¡85 ‰,qQ5 ‰–ÅW5 ‰Ek5 ‰Ûq5 ‰¨„5 ‰?Š5 ‰\5 ‰>£5 ‰ãJ·5 ‰èçÃ5 ‰r÷Ø5 ‰²â5 ‰’äï5 ‰"¤ý5 ‰û… 6 ‰kr6 ‰°I$6 ‰ïë;6 ‰ïëW6 ‰ïI^6 ‰‡„v6 ‰-}6 ‰ñÚ•6 ‰c(œ6 ‰Td´6 ‰c(»6 ‰•cØ6 ‰¤,ß6 ‰}–÷6 ‰¤,þ6 ‰–•7 ‰Ÿ•"7 ‰Š ?7 ‰)F7 ‰/»c7 ‰ùIj7 ‰ît‡7 ‰ü,Ž7 ‰.é«7 ‰J²7 ‰¤OÏ7 ‰ieÖ7 ‰üÿî7 ‰ o÷7 ‰Ùk8 ‰»f8 ‰"¤8 ‰û…)8 ‰kr68 ‰°IC8 ‰ïëZ8 ‰ïëv8 ‰ïI}8 ‰Æ•8 ‰-œ8 ‰j]´8 ‰c(»8 ‰ç‚Ó8 ‰c(Ú8 ‰e‚÷8 ‰¤,þ8 ‰¥¬9 ‰¤,9 ‰ù«:9 ‰Ÿ•A9 ‰1‚^9 ‰)e9 ‰ÓË‚9 ‰ùI‰9 ‰éò¦9 ‰ü,­9 ‰ vÊ9 ‰JÑ9 ‰î9 ‰ieõ9 ‰3I : ‰ o: ‰Ùk*: ‰>6: ‰oB: ‰°IN: ‰+?Z: ‰krf: ‰Ö­r: ‰‹~ˆ: ‰‹~£: ‰M¾: ‰±!Ä: ‰ãá: ‰±!ç: ‰á; ‰x8 ; ‰€Á,; ‰¡2; ‰žP; ‰ÛV; ‰jðn; ‰t; ‰¹Û’; ‰–Ř; ‰/›À; ‰ü”Ì; ‰oØ; ‰°Iä; ‰+?ð; ‰krü; ‰Ö­< ‰‹~< ‰‹~9< ‰MT< ‰±!Z< ‰žw< ‰±!}< ‰ Üš< ‰x8 < ‰ÝÂ< ‰¡È< ‰<ëæ< ‰Ûì< ‰Å= ‰ = ‰ (= ‰–Å.= ‰µMV= ‰Vzb= ‰on= ‰°Iz= ‰+?†= ‰kr’= ‰Ö­ž= ‰‹~´= ‰‹~Ï= ‰Mê= ‰±!ð= ‰ > ‰±!> ‰Å>0> ‰x86> ‰©HX> ‰¡^> ‰R¸|> ‰Û‚> ‰N—š> ‰ > ‰Ó¾> ‰–ÅÄ> ‰ïOì> ‰ýø> ‰°I? ‰+?? ‰kr? ‰Ö­$? ‰o/? ‰x85? ‰SM? ‰¡S? ‰ðEl? ‰–År? ‰ó†? ‰ÛŒ? ‰VŸ? ‰?¥? ‰ò(¸? ‰>¾? ‰ëZÒ? ‰F~Þ? ‰r÷ó? ‰²ý? ‰éE @ ‰"¤@ ‰û…%@ ‰kr2@ ‰°I?@ ‰ïëV@ ‰ïër@ ‰ïIy@ ‰ ò‘@ ‰-˜@ ‰B°@ ‰c(·@ ‰ý¡Ï@ ‰c(Ö@ ‰ˆ¡ó@ ‰¤,ú@ ‰AÄA ‰¤,A ‰óÃ6A ‰Ÿ•=A ‰ÖZA ‰)aA ‰Óæ~A ‰ùI…A ‰ ¨¢A ‰ü,©A ‰ÆA ‰JÍA ‰öÔêA ‰ieñA ‰W' B ‰ oB ‰ÙkB ‰1&)B ‰"¤7B ‰û…DB ‰krQB ‰°I^B ‰ïëuB ‰ïë‘B ‰ïI˜B ‰:°B ‰-·B ‰ÓŠÏB ‰c(ÖB ‰€OîB ‰c(õB ‰7OC ‰¤,C ‰kt1C ‰¤,8C ‰õsUC ‰Ÿ•\C ‰L•yC ‰)€C ‰ •C ‰ùI¤C ‰ü ÁC ‰ü,ÈC ‰M¹åC ‰JìC ‰ú8 D ‰ieD ‰Nc(D ‰ o1D ‰ÙkED ‰ÝQD ‰o]D ‰°IiD ‰+?uD ‰krD ‰Ö­D ‰‹~£D ‰‹~¾D ‰MÙD ‰±!ßD ‰a6üD ‰±!E ‰<ÓE ‰x8%E ‰Þ¯GE ‰¡ME ‰±®kE ‰ÛqE ‰ƈ‰E ‰E ‰Lp­E ‰–ųE ‰ØjÛE ‰$çE ‰oóE ‰°IÿE ‰+? F ‰krF ‰Ö­#F ‰‹~9F ‰‹~TF ‰MoF ‰±!uF ‰„’F ‰±!˜F ‰bJµF ‰x8»F ‰P™ÝF ‰¡ãF ‰v†G ‰ÛG ‰ô’G ‰%G ‰™5CG ‰–ÅIG ‰Õ_tG ‰ ¨yG ‰žæŒG ‰M¢G ‰òܾG ‰WÝäG ‰§"ÿG ‰<#%H ‰.)@H ‰³'\H ‰íùxH ‰ <ŽH ‰rsšH ‰ÀH ‰NåH ‰¾I ‰P¶1I ‰]ÎLI ‰i`bI ‰§ƒI ‰nŸI ‰>œºI ‰Ê©àI ‰@«J ‰y@%J ‰¼÷EJ ‰‚è`J ‰Ö’{J ‰áH›J ‰!œµJ ‰¡³ÏJ ‰±¾éJ ‰$»K ‰\#K ‰ ¾MK ‰p§cK ‰7S‚K ‰Žm¡K ‰{sÀK ‰ùùëK ‰/ŽL ‰B0'L ‰®0BL ‰µ0bL ‰¼0‚L ‰!¢L ‰·…ÁL ‰2×L ‰/ ÷L ‰/M ‰Ùû7M ‰¥ÑWM ‰U4nM ‰¬T…M ‰÷¨‹M ‰÷¨£M ‰>iªM ‰>iÂM ‰35ÈM ‰35àM ‰ù—çM ‰ù—ÿM ‰œN ‰œ#N ‰]N>N ‰ÙN^N ‰.OO ‰N‰O ‰*—&O ‰§Ê2O ‰*>O ‰œ›JO ‰oßVO ‰ EbO ‰¸nO ‰¬"zO ‰bʆO ‰¼’O ‰€RžO ‰—ºªO ‰A!¶O ‰íÂO ‰¶ ÎO ‰3çÚO ‰Š?æO ‰hòO ‰±þO ‰’K P ‰¥P ‰1C"P ‰*v.P ‰ÅÃ;P ‰ ÆUP ‰›fP ‰neáP ‰ÖìP ‰†Þ÷P ‰ä+Q ‰÷ýQ ‰;Q ‰®Á&Q ‰÷ý¸þ` ‰¿•a ‰Ÿa ‰"Ba ‰Ò|Ca ‰­›Oa ‰àZa ‰QRga ‰­›a ‰N‡a ‰%›a ‰é{¡a ‰Û®¹a ‰¢3¿a ‰šì×a ‰É9Ýa ‰7Ýúa ‰!Jb ‰b ‰!J#b ‰¨@b ‰!JFb ‰ØÆcb ‰!Jib ‰4džb ‰!JŒb ‰ðÇ©b ‰!J¯b ‰ÈÌb ‰!JÒb ‰JÇïb ‰!Jõb ‰`Çc ‰!Jc ‰j 5c ‰!J;c ‰ÍÇXc ‰!J^c ‰2È{c ‰!Jc ‰HÈžc ‰!J¤c ‰ÈÁc ‰!vÇc ‰ ßc ‰rôåc ‰r°ýc ‰ßSd ‰¯àd ‰4€!d ‰\u9d ‰?d ‰zHWd ‰8—]d ‰ ud ‰d{d ‰J “d ‰°Ä™d ‰w­±d ‰!·d ‰í†Ïd ‰–7Õd ‰2"íd ‰,ód ‰tï e ‰?úe ‰´v)e ‰¦I/e ‰y²Ge ‰‚Me ‰™ije ‰Rpe ‰Ëe ‰R“e ‰Š°e ‰R¶e ‰Óe ‰RÙe ‰\öe ‰Rüe ‰Ôf ‰Rf ‰ëi ‰žUDi ‰©Bai ‰žUgi ‰õ„i ‰žUŠi ‰ÓC§i ‰žU­i ‰êCÊi ‰žUÐi ‰.Cíi ‰žUói ‰ECj ‰žUj ‰\C3j ‰žU9j ‰sCVj ‰žU\j ‰kDyj ‰žUj ‰‚Dœj ‰žU¢j ‰TD¿j ‰QÅj ‰m»âj ‰Qèj ‰†Ak ‰Q k ‰Kí(k ‰Q.k ‰bíKk ‰QQk ‰mînk ‰Qtk ‰„î‘k ‰Q—k ‰yí´k ‰Qºk ‰í×k ‰QÝk ‰Ñíúk ‰Ql ‰èíl ‰Q#l ‰²î@l ‰QFl ‰Éîcl ‰Qil ‰›î†l ‰+JŒl ‰ùÊ©l ‰+J¯l ‰IÀÌl ‰+JÒl ‰ø(ïl ‰+Jõl ‰)m ‰+Jm ‰‘)5m ‰+J;m ‰¨)Xm ‰+J^m ‰5){m ‰+Jm ‰L)žm ‰+J¤m ‰c)Ám ‰+JÇm ‰z)äm ‰+Jêm ‰5n ‰+J n ‰ø)*n ‰+J0n ‰Ú)Mn ‰JSn ‰÷<pn ‰Jvn ‰æš“n ‰J™n ‰e+¶n ‰J¼n ‰+Ùn ‰Jßn ‰&,ün ‰Jo ‰=,o ‰J%o ‰§+Bo ‰JHo ‰¾+eo ‰Jko ‰ø+ˆo ‰JŽo ‰,«o ‰J±o ‰k,Îo ‰JÔo ‰‚,ño ‰J÷o ‰T,p ‰Jp ‰®b8p ‰J?p ‰Žý\p ‰Jcp ‰4º€p ‰J‡p ‰Kº¤p ‰J«p ‰G»Èp ‰ž Ïp ‰K.q ‰æP:q ‰2ÆGq ‰˜ÍMq ‰\Sq ‰¡ÜYq ‰~o_q ‰ÿyeq ‰Okq ‰¨rq ‰¤wyq ‰Ukq ‰°K†q ‰á$q ‰0à”q ‰Ãq ‰B©q ‰µq ‰à2Áq ‰ßÍq ‰!êÙq ‰æPôq ‰æPr ‰æP*r ‰æPEr ‰æP`r ‰æP{r ‰÷òr ‰ ¬žr ‰y0¤r ‰ Ƽr ‰EeÂr ‰4wÚr ‰Rœàr ‰b÷r ‰—týr ‰è?s ‰!Js ‰À 6s ‰n²Gt ‰7át ‰«Îòt ‰Ú˜üt ‰!Ju ‰›¸)u ‰Ê 6u ‰`2Cu ‰ˆJNu ‰&Ô[u ‰¶œhu ‰;tu ‰ð;€u ‰`2 u ‰`2¶u ‰ïI¼u ‰ƒÙÔu ‰c(Úu ‰» òu ‰c(øu ‰V v ‰a  v ‰‹=v ‰RCv ‰ʼbv ‰n<nv ‰¦üzv ‰ [†v ‰ÓN’v ‰ßNžv ‰xc©v ‰1 µv ‰+Àv ‰Ê ïv ‰]  w ‰жw ‰š»(w ‰Á.w ‰>àFw ‰ÔÈLw ‰ÍRdw ‰¡~jw ‰Û4‚w ‰³~ˆw ‰óÅ w ‰?˜¦w ‰ïѾw ‰M˜Äw ‰dnÜw ‰ç‚âw ‰XNúw ‰®Ãx ‰aPx ‰ëx ‰ ô(x ‰iw.x ‰+HFx ‰_Lx ‰¬N`x ‰Sìˆ ‰ ‰ ‰ÂE ‰ ‰•Ä"‰ ‰µ5(‰ ‰BE‰ ‰<K‰ ‰?§n‰ ‰ât‰ ‰ŽF”‰ ‰ÑQ¯‰ ‰!Jµ‰ ‰ðÊ ‰vè!Š ‰vè7Š ‰Y>Š ‰ÝZŠ ‰YaŠ ‰~:}Š ‰Y„Š ‰w Š ‰ÍF§Š ‰kкŠ ‰‡7ÁŠ ‰eûÔŠ ‰#÷ÛŠ ‰«ÕîŠ ‰#÷õŠ ‰Øã‹ ‰!J‹ ‰r·E‹ ‰;R‹ ‰;h‹ ‰Yo‹ ‰#Š‹ ‰Y—‹ ‰ظ‹ ‰Y¿‹ ‰ÂKà‹ ‰!Jç‹ ‰bõŒ ‰&)Œ ‰”Bö ‰l:Ž ‰m‹ Ž ‰ãÇŽ ‰ƒµŽ ‰À$Ž ‰*Ž ‰20Ž ‰736Ž ‰ˆ<Ž ‰kCŽ ‰ýˆOŽ ‰ž{UŽ ‰U[Ž ‰Å”aŽ ‰7#gŽ ‰ôÎmŽ ‰ÇètŽ ‰ß€Ž ‰‰†Ž ‰'wŽ ‰RG™Ž ‰!nŸŽ ‰¥Ž ‰K笎 ‰®¸Ž ‰¾Ž ‰oàÅŽ ‰ÑÑŽ ‰­ÞŽ ‰ÑùŽ ‰üD ‰ÆÛ ‰ºR2 ‰'8 ‰¬ÕP ‰j,V ‰^¬s ‰Éy ‰[E‘ ‰M— ‰¨·¯ ‰ÑÊ ‰!JÐ ‰¤.é ‰…” ‰d, ‰'Ö# ‰Í•* ‰µÊ6 ‰ò%C ‰µÊ^ ‰I'y ‰{Z ‰Ê“ ‰&™ ‰lÚ± ‰ól· ‰*Ë ‰µÊæ ‰!Jí ‰”²‘ ‰Ö7*‘ ‰r!7‘ ‰Ö7S‘ ‰µŒo‘ ‰Ö7Š‘ ‰!J‘‘ ‰¦Æ‘ ‰Í+Ò‘ ‰JÞ‘ ‰/šä‘ ‰º4ê‘ ‰e©ð‘ ‰¯ ö‘ ‰$-ü‘ ‰œd’ ‰!°’ ‰]4’ ‰Û’ ‰Îø’ ‰ñ2“ ‰=>“ ‰4¸K“ ‰nX“ ‰e€e“ ‰Ógz“ ‰`e‡“ ‰!2”“ ‰–m¡“ ‰ˆû®“ ‰WR»“ ‰ô=È“ ‰ªÕ“ ‰=ë“ ‰=” ‰=0” ‰!J6” ‰ù‡S” ‰C“n” ‰ø2t” ‰Ëw’” ‰ø2˜” ‰Ò÷¶” ‰ª¼” ‰ŠÞ” ‰øä” ‰ê(• ‰öN• ‰”$¸• ‰T Å• ‰D1Ò• ‰ß• ‰$ì• ‰T – ‰ëÔ#– ‰E– ‰cL– ‰lj– ‰cq– ‰Ç,”– ‰c›– ‰º‘¾– ‰2Å– ‰¾‹ð– ‰i— ‰§e7— ‰ýU— ‰B\— ‰}îz— ‰—— ‰ Ÿ— ‰—¦— ‰©¢Ä— ‰¤ÇË— ‰©Tä— ‰ßïë— ‰K= ˜ ‰˜ ‰hp.˜ ‰Ê5˜ ‰ïëS˜ ‰-©Z˜ ‰MEx˜ ‰O˜ ‰ ‰˜ ‰Ë–¤˜ ‰ˆÚƘ ‰Ë–͘ ‰u ê˜ ‰T ™ ‰!J ™ ‰t¿(™ ‰te‰™ ‰•™ ‰gÔ›™ ‰ßÚ¡™ ‰¥§™ ‰Öh­™ ‰,œ³™ ‰ë¹™ ‰É¿™ ‰ŒÅ™ ‰ÜË™ ‰QÑ™ ‰ª÷×™ ‰(iÝ™ ‰0\ã™ ‰áçé™ ‰صï™ ‰õ™ ‰í}û™ ‰[š ‰÷Šš ‰§¼ š ‰móš ‰¨Aš ‰Űš ‰p%š ‰s+š ‰sC1𠉻37š ‰ab=š ‰Í1Cš ‰ø{Iš ‰kJOš ‰ß¡Uš ‰5á[š ‰~öaš ‰) g𠉫mš ‰MKtš ‰ãY˜š ‰ãY¯š ‰ãYК ‰)ך ‰Jôš ‰ü,ûš ‰ ’› ‰Ù0› ‰Õ<› ‰’%C› ‰+†`› ‰Ù0g› ‰:T„› ‰’%‹› ‰:†¨› ‰Ù0¯› ‰ITÌ› ‰’%Ó› ‰½ÿð› ‰Ù0÷› ‰XTœ ‰’%œ ‰;‡8œ ‰Ù0?œ ‰³S\œ ‰’%cœ ‰¿…€œ ‰uü‡œ ‰4Á œ ‰ë§œ ‰Í;Àœ ‰sÇœ ‰ý×àœ ‰2Üçœ ‰õ¬ ‰2Ü  ‰% ‰2Ü, ‰t*E ‰2ÜL ‰6Œe ‰ÌÂl ‰'OŠ ‰Ì‘ ‰%ª ‰Ì± ‰.°Ê ‰ÌÂÑ ‰ïóê ‰ Ôñ ‰zž ‰K9ž ‰Í´@ž ‰¯‘Yž ‰gP`ž ‰Ê“yž ‰–0€ž ‰áû˜ž ‰3òŸž ‰Z>·ž ‰ç¾ž ‰FÖž ‰¬Ýž ‰šöž ‰Éèýž ‰JÙŸ ‰ÎèŸ ‰xuTŸ ‰ìq{Ÿ ‰ìq’Ÿ ‰ìq³Ÿ ‰ìqÏŸ ‰)ÖŸ ‰^ÝóŸ ‰ü,úŸ ‰®¬  ‰)  ‰Ž=;  ‰ü,B  ‰’<_  ‰çf  ‰3š  ‰¬†  ‰æ%¢  ‰dtÉ  ‰dtà  ‰dt¡ ‰dt¡ ‰)$¡ ‰[‹A¡ ‰ü,H¡ ‰$We¡ ‰)l¡ ‰ŠÊŠ¡ ‰ü,‘¡ ‰Ú)Ù¡ ‰eƒæ¡ ‰Ú|ì¡ ‰@€ò¡ ‰uø¡ ‰Ôþ¡ ‰¢ ‰‚“ ¢ ‰oo¢ ‰oZ¢ ‰é¢ ‰e"¢ ‰ÂC(¢ ‰Ñ.¢ ‰ç4¢ ‰£:¢ ‰u'@¢ ‰qºF¢ ‰ØrL¢ ‰v‡R¢ ‰¢ðX¢ ‰ ”^¢ ‰¿æd¢ ‰íwj¢ ‰X)p¢ ‰1òv¢ ‰í·|¢ ‰×‚¢ ‰³ ˆ¢ ‰]Ž¢ ‰KÇ”¢ ‰Î𢠉ûA ¢ ‰Ę¦¢ ‰@¬¢ ‰ª²¢ ‰ ¸¢ ‰wy¾¢ ‰ç–Ä¢ ‰œÊ¢ ‰ƒ Т ‰•Ö¢ ‰"ÑÜ¢ ‰¢¯â¢ ‰5è¢ ‰×ðî¢ ‰áEô¢ ‰Rjú¢ ‰×£ ‰¦ˆ£ ‰ÿ £ ‰$£ ‰5ò£ ‰û £ ‰Ã,$£ ‰zì*£ ‰Ç60£ ‰q86£ ‰™<£ ‰—6B£ ‰a:H£ ‰AN£ ‰‘[T£ ‰}ßZ£ ‰;9`£ ‰™f£ ‰1zl£ ‰ù·s£ ‰N˜z£ ‰úÍ£ ‰£Úˆ£ ‰” £ ‰yB–£ ‰28£ ‰r:¤£ ‰•ü«£ ‰€Y²£ ‰4˹£ ‰hGÀ£ ‰‰ôÇ£ ‰øΣ ‰gáÕ£ ‰ø˜Ü£ ‰Îa㣠‰¢-ê£ ‰ ñ£ ‰lø£ ‰ÿ£ ‰®¤ ‰›E ¤ ‰$¤ ‰:8¤ ‰ù•"¤ ‰E )¤ ‰”µ0¤ ‰có7¤ ‰q>¤ ‰(¡E¤ ‰gL¤ ‰`dS¤ ‰V‚Z¤ ‰+ìa¤ ‰:ìh¤ ‰Iìo¤ ‰¨v¤ ‰îÈ}¤ ‰âØ„¤ ‰Z‹¤ ‰Òk’¤ ‰…‰™¤ ‰€ÿ ¤ ‰wF§¤ ‰Ã;®¤ ‰µ¤ ‰e¼¤ ‰/vä ‰™ʤ ‰Ѥ ‰²Çؤ ‰hߤ ‰,æ¤ ‰0Òí¤ ‰céô¤ ‰cRû¤ ‰Bg¥ ‰B’ ¥ ‰HŸ¥ ‰äa¥ ‰–ö¥ ‰Ù#%¥ ‰!Ã,¥ ‰|43¥ ‰I:¥ ‰%ÝA¥ ‰`LH¥ ‰½bO¥ ‰š‘V¥ ‰ˆ|]¥ ‰ÍQd¥ ‰^æk¥ ‰¯,r¥ ‰Íûy¥ ‰é€¥ ‰nÙ‡¥ ‰úŠŽ¥ ‰!­•¥ ‰gvœ¥ ‰P £¥ ‰mª¥ ‰˜±¥ ‰Ž¸¥ ‰øû¿¥ ‰ôÆ¥ ‰ ÇÍ¥ ‰:¥Ô¥ ‰s(Û¥ ‰£å⥠‰Ö7é¥ ‰´4𥠉-°÷¥ ‰/þ¥ ‰¤¦ ‰ŽÖ ¦ ‰)?¦ ‰/W¦ ‰j0!¦ ‰Ö«(¦ ‰kc/¦ ‰O6¦ ‰ô'=¦ ‰ÑÅD¦ ‰q½K¦ ‰Ï R¦ ‰ÒSY¦ ‰3•`¦ ‰¶»g¦ ‰t@n¦ ‰;u¦ ‰Æ|¦ ‰›bƒ¦ ‰( Ц ‰‹‡‘¦ ‰®"˜¦ ‰ý䟦 ‰ß³¦¦ ‰œM­¦ ‰™´¦ ‰Š-»¦ ‰¶+¦ ‰Stɦ ‰yЦ ‰X-צ ‰'Þ¦ ‰ƒUå¦ ‰ Zì¦ ‰¤tó¦ ‰œ¹ú¦ ‰GH§ ‰×þ§ ‰Ó§ ‰¬ § ‰Ã×§ ‰½$§ ‰†+§ ‰!C2§ ‰.õ9§ ‰6@§ ‰—:G§ ‰†N§ ‰›"U§ ‰€\§ ‰Bµc§ ‰Äj§ ‰óÁq§ ‰gÿx§ ‰³Þ§ ‰/Z‡§ ‰ºs“§ ‰d-™§ ‰3>Ÿ§ ‰Ú—¥§ ‰Ó¼¬§ ‰Oʸ§ ‰¿§ ‰ɧƧ ‰‰ôͧ ‰ÃÓ§ ‰ÄøÙ§ ‰8Îß§ ‰ÓÊå§ ‰íbë§ ‰ª>ñ§ ‰ûø§ ‰8ªÿ§ ‰>t¨ ‰~- ¨ ‰ÒL¨ ‰ L¨ ‰¨ ‰z$¨ ‰ùN*¨ ‰íR1¨ ‰é/9¨ ‰wD¨ ‰NüP¨ ‰õŽ]¨ ‰Nüs¨ ‰Nüލ ‰Nü®¨ ‰!J´¨ ‰‡!Ѩ ‰!Jר ‰¡!ô¨ ‰!Jú¨ ‰¡X© ‰!J© ‰ñ :© ‰!J@© ‰%!]© ‰!Jc© ‰ !€© ‰!J†© ‰?!£© ‰æ°©© ‰IŒÆ© ‰0 Ì© ‰dµä© ‰ ê© ‰5(ª ‰î"&ª ‰‘Ñ>ª ‰é{Dª ‰ \ª ‰-€bª ‰©Ùzª ‰b9€ª ‰Ê»˜ª ‰ùIžª ‰~лª ‰)Áª ‰Â5Þª ‰ùIäª ‰¥Ò« ‰)« ‰52$« ‰c(*« ‰ÍíB« ‰c(H« ‰gíe« ‰Jk« ‰_šƒ« ‰С‰« ‰¡f¡« ‰J§« ‰©VÄ« ‰ü,Ê« ‰óËç« ‰Jí« ‰fö ¬ ‰ü,¬ ‰A-¬ ‰¤,3¬ ‰°K¬ ‰¤,Q¬ ‰Ên¬ ‰üPt¬ ‰BΑ¬ ‰Ô©—¬ ‰Ž9´¬ ‰©Uº¬ ‰ÀB׬ ‰ÿÌݬ ‰>Uú¬ ‰åI­ ‰aD­ ‰’#­ ‰Åb@­ ‰gLF­ ‰g¼c­ ‰>¤j­ ‰¡º‡­ ‰øJŽ­ ‰ë§«­ ‰Tš²­ ‰ÜÏ­ ‰ïIÖ­ ‰°ó­ ‰ïIú­ ‰p® ‰’%® ‰7µ;® ‰’%B® ‰ÐÔ_® ‰ Jf® ‰ý5ƒ® ‰ JŠ® ‰•„§® ‰Ù0®® ‰˜Ë® ‰Ù0Ò® ‰{üï® ‰ÛIö® ‰G8¯ ‰ÛI¯ ‰æ­7¯ ‰R>¯ ‰³[¯ ‰Rb¯ ‰×¯ ‰a †¯ ‰ÛK£¯ ‰a ª¯ ‰¬eǯ ‰Jί ‰Â2ë¯ ‰Jò¯ ‰ì™° ‰+J° ‰Á¼3° ‰+J:° ‰{iW° ‰Q^° ‰ {° ‰Q‚° ‰ÏŸ° ‰žU¦° ‰‰”𠉞Uʰ ‰,ç° ‰Ûâî° ‰mo± ‰š± ‰Âå#± ‰Ц0± ‰õŽ=± ‰ЦT± ‰Цp± ‰Ц‘± ‰!J˜± ‰aiµ± ‰!J¼± ‰FiÙ± ‰!Jà± ‰¶Rý± ‰!J² ‰i!² ‰!J(² ‰íhE² ‰!JL² ‰#ii² ‰!Jp² ‰õ¨² ‰0 ”² ‰b ¬² ‰ ³² ‰‰w˲ ‰é{Ò² ‰Ê}ê² ‰ôDñ² ‰ ³ ‰b9³ ‰®}(³ ‰ùI/³ ‰cL³ ‰)S³ ‰˜Öp³ ‰ùIw³ ‰ú”³ ‰)›³ ‰°–¸³ ‰c(¿³ ‰àQ׳ ‰c(Þ³ ‰²Qû³ ‰J´ ‰L ´ ‰ü,&´ ‰ù­C´ ‰JJ´ ‰ó*g´ ‰ü,n´ ‰Ò÷‹´ ‰¤,’´ ‰nxª´ ‰¤,±´ ‰ýwδ ‰üPÕ´ ‰Îîò´ ‰Ô©ù´ ‰ºˆµ ‰©Uµ ‰~:µ ‰ÿÌAµ ‰Ù-^µ ‰åIeµ ‰ê‘‚µ ‰’‰µ ‰îi¦µ ‰gL­µ ‰ʵ ‰>¤ѵ ‰Âîµ ‰øJõµ ‰T1¶ ‰Tš¶ ‰Pß6¶ ‰ïI=¶ ‰]/Z¶ ‰ïIa¶ ‰iö~¶ ‰’%…¶ ‰H¢¶ ‰’%©¶ ‰;@ƶ ‰ JͶ ‰Äê¶ ‰ Jñ¶ ‰è¯· ‰Ù0· ‰Þg2· ‰Ù09· ‰Þ?V· ‰ÛI]· ‰Qz· ‰ÛI· ‰ï4ž· ‰R¥· ‰'\· ‰RÉ· ‰’‰æ· ‰a í· ‰¢ ¸ ‰a ¸ ‰T“.¸ ‰J5¸ ‰;}R¸ ‰JY¸ ‰Õˆv¸ ‰+J}¸ ‰Gš¸ ‰+J¡¸ ‰aᄌ ‰QŸ ‰^⸠‰Qé¸ ‰ÚC¹ ‰žU ¹ ‰ì*¹ ‰žU1¹ ‰‚N¹ ‰ÛâU¹ ‰9×n¹ ‰šu¹ ‰…¼ƹ ‰GO͹ ‰"ºع ‰RWâ¹ ‰â è¹ ‰ÏŒ º ‰fຠ‰ü1º ‰‰ô7º ‰ì’Yº ‰[ø_º ‰E†º ‰Tó‡º ‰Š©º ‰oаº ‰¹#ͺ ‰F Ùº ‰‘|æº ‰ì¢ìº ‰Ù\» ‰«5 » ‰Pñ$» ‰ë*» ‰Ø&B» ‰F X» ‰F s» ‰!Jy» ‰ö+–» ‰å¯» ‰Ü(À» ‰îþË» ‰r8×» ‰Ü(ñ» ‰!Jõ» ‰B¼ ‰Ü()¼ ‰¾éJ¼ ‰ÛP¼ ‰ã€m¼ ‰¾6s¼ ‰á¸³¼ ‰ÅM¿¼ ‰n<˼ ‰ÅMæ¼ ‰Rì¼ ‰¡¶ ½ ‰a ½ ‰ x;½ ‰=ÕH½ ‰J T½ ‰›š_½ ‰|Øj½ ‰”u½ ‰u4½ ‰»ªŒ½ ‰ü\—½ ‰§¬½ ‰ùr¸½ ‰;Vò½ ‰i¾¾ ‰[¨¾ ‰i¾'¾ ‰i¾>¾ ‰¾Ÿ_¾ ‰Me¾ ‰Àf‹¾ ‰õr‘¾ ‰zé³¾ ‰+@¹¾ ‰ à¾ ‰dæ¾ ‰aÒ¿ ‰5§$¿ ‰ß0¿ ‰½Ó<¿ ‰5§R¿ ‰5§r¿ ‰?úx¿ ‰ˆî¿ ‰¦I–¿ ‰}j®¿ ‰ ´¿ ‰uÌ¿ ‰EeÒ¿ ‰ðêë¿ ‰!Jñ¿ ‰á'À ‰Ž@À ‰*”FÀ ‰'‘LÀ ‰ ‘RÀ ‰‘XÀ ‰xX^À ‰-dÀ ‰-jÀ ‰-pÀ ‰-vÀ ‰ü,|À ‰ö,‚À ‰ð,ˆÀ ‰ê,ŽÀ ‰w_”À ‰J¹šÀ ‰_ À ‰O¹¦À ‰T¹¬À ‰Ü_²À ‰á_¸À ‰æ_¾À ‰ë_ÄÀ ‰ð_ÊÀ ‰»¾ÐÀ ‰Á¾ÖÀ ‰ǾÜÀ ‰*ÒéÀ ‰ݳöÀ ‰EÁ ‰¶dÁ ‰·jÁ ‰èùpÁ ‰ë"vÁ ‰Ðy|Á ‰9%‚Á ‰ŽˆÁ ‰KŽÁ ‰FŠœÁ ‰†E©Á ‰uo¯Á ‰³–¶Á ‰àSÃÁ ‰ 3ÉÁ ‰ª^ÏÁ ‰¥KÕÁ ‰>GÛÁ ‰þTáÁ ‰ð˜íÁ ‰Z>óÁ ‰ J ‰‰'c ‰£÷j ‰'Ù©Â ‰;O°Â ‰æ¾Â ‰OÄ ‰›LË ‰y8Ù ‰´šß ‰Æå ‰ð÷ì ‰yú ‰ÏÅà ‰y#à ‰y?à ‰ éFà ‰Ù[à ‰›Ýbà ‰Ó§ŠÃ ‰i±Ã ‰傾à ‰ONËà ‰jÐåà ‰¢\òà ‰6¦Ä ‰¶5DÄ ‰üwKÄ ‰jµbÄ ‰`†iÄ ‰Ó=€Ä ‰ >‡Ä ‰lPŸÄ ‰¤ß¦Ä ‰¿Ä ‰`ŒÆÄ ‰&ç×Ä ‰÷èÄ ‰ÙÉôÄ ‰"Å ‰¶(Å ‰‹·Å ‰^&Å ‰Óè-Å ‰Ç7Å ‰Z^>Å ‰&ïRÅ ‰’‘YÅ ‰þ7mÅ ‰GÏtÅ ‰¬ˆÅ ‰îTÅ ‰ïأЉµ ªÅ ‰8ÜÃÅ ‰L1ÊÅ ‰3žÞÅ ‰l¸åÅ ‰RþÅ ‰l¸Æ ‰-Ô#Æ ‰aç*Æ ‰sCÆ ‰Ô?JÆ ‰°cÆ ‰:sjÆ ‰9¨ƒÆ ‰´wŠÆ ‰l¤Æ ‰o-«Æ ‰¨ÀÆ ‰UÛÇÆ ‰ªZàÆ ‰¢}çÆ ‰sØÇ ‰â!Ç ‰,ó(Ç ‰Äü3Ç ‰c:Ç ‰†YEÇ ‰ÞzLÇ ‰hÄÊ ‰!JËÊ ‰úðèÊ ‰!JïÊ ‰ôµ Ë ‰pïË ‰@C5Ë ‰+é<Ë ‰ñ^Ë ‰ÿíeË ‰„@‚Ë ‰p{‰Ë ‰2]¦Ë ‰È6­Ë ‰Ï:ÊË ‰v`ÑË ‰+îË ‰•3õË ‰!Ì ‰`†(Ì ‰ŒTÌ ‰~I[Ì ‰ ‚Ì ‰ç‰Ì ‰á'°Ì ‰«f·Ì ‰%(ÕÌ ‰ÑLÜÌ ‰ ²þÌ ‰à Í ‰¨:'Í ‰I.Í ‰šÐKÍ ‰ ØRÍ ‰'ƒoÍ ‰,¶vÍ ‰²|ŽÍ ‰ͺ•Í ‰ ­Í ‰û´Í ‰BhÌÍ ‰³4ÓÍ ‰ ëÍ ‰VþòÍ ‰„å Î ‰#dÎ ‰n3Î ‰“>:Î ‰œÿ\Î ‰T cÎ ‰Âë…Î ‰¡ŒÎ ‰'o®Î ‰?µÎ ‰QÒÎ ‰¼ÙÎ ‰çpöÎ ‰nkýÎ ‰JÁÏ ‰Œ !Ï ‰^Í>Ï ‰x>EÏ ‰È•bÏ ‰ùiÏ ‰ †Ï ‰¦Ï ‰ÿ{ªÏ ‰üw±Ï ‰Å¡ÉÏ ‰È$ÐÏ ‰DòíÏ ‰ŸïôÏ ‰é! Ð ‰L1Ð ‰:ä0Ð ‰^7Ð ‰ÉêTÐ ‰P[Ð ‰”OxÐ ‰Ó˜Ð ‰T’œÐ ‰`†£Ð ‰)ÀÐ ‰Å•ÇÐ ‰5äÐ ‰ [ëÐ ‰4#Ñ ‰%Ñ ‰vÇ,Ñ ‰‡03Ñ ‰ #PÑ ‰,8WÑ ‰Ö#tÑ ‰ÅŠ{Ñ ‰É$Ñ ‰ ú¤Ñ ‰áÈÆÑ ‰gäÍÑ ‰'¾êÑ ‰vlñÑ ‰*ñÒ ‰ö.Ò ‰ã-Ò ‰ë¶4Ò ‰0ßQÒ ‰P%XÒ ‰¢6uÒ ‰Ê#|Ò ‰sv™Ò ‰{ Ò ‰‚¬ÂÒ ‰Á7ÉÒ ‰„ŽëÒ ‰}JòÒ ‰`Ó ‰ÙeÓ ‰Z3Ó ‰TL:Ó ‰&'\Ó ‰JcÓ ‰s‹€Ó ‰Q‡Ó ‰ï*¤Ó ‰+J«Ó ‰ÈÓ ‰žUÏÓ ‰ŸîìÓ ‰RóÓ ‰pÔ ‰a Ô ‰݇;Ô ‰w_Ô ‰yÁ|Ô ‰)ƒÔ ‰n2 Ô ‰ùI§Ô ‰á2ÄÔ ‰|’ËÔ ‰yèÔ ‰|’ïÔ ‰¾% Õ ‰ü,Õ ‰<0Õ ‰J7Õ ‰¸=[Õ ‰ ‹Õ ‰SœÕ ‰)£Õ ‰@DÀÕ ‰ùIÇÕ ‰ÆDäÕ ‰|’ëÕ ‰ÎàÖ ‰|’Ö ‰^E,Ö ‰ü,3Ö ‰–…PÖ ‰JWÖ ‰^ÍtÖ ‰|’{Ö ‰C˜Ö ‰JŸÖ ‰O¼Ö ‰ž ÃÖ ‰|õàÖ ‰ZçÖ ‰ñ" × ‰·z× ‰Ái<× ‰·zC× ‰ Ój× ‰·zq× ‰⬓× ‰ùš× ‰"%·× ‰&¾× ‰s?Û× ‰!™â× ‰yÿØ ‰d! Ø ‰+-Ø ‰‡[4Ø ‰ª’VØ ‰Q\]Ø ‰õØ ‰!m†Ø ‰&2¨Ø ‰$ ¯Ø ‰kEÇØ ‰(ÎØ ‰½(æØ ‰ÎÕíØ ‰³@Ù ‰·ì Ù ‰„I$Ù ‰“†+Ù ‰ ÜHÙ ‰ZOÙ ‰§vlÙ ‰·zsÙ ‰}2šÙ ‰d!¡Ù ‰Á’¾Ù ‰‡[ÅÙ ‰çHâÙ ‰Q\éÙ ‰ºaÚ ‰Z Ú ‰¶À&Ú ‰Z-Ú ‰BJÚ ‰ZQÚ ‰nÚ ‰·zuÚ ‰–*˜Ú ‰·zŸÚ ‰ ûÆÚ ‰·zÍÚ ‰ä0ôÚ ‰d!ûÚ ‰Ð9Û ‰d!Û ‰Õ+8Û ‰d!?Û ‰­,\Û ‰‡[cÛ ‰Vã|Û ‰‡[ƒÛ ‰@ Û ‰‡[§Û ‰³ÄÛ ‰Q\ËÛ ‰äÛ ‰Q\ëÛ ‰ˆÜ ‰Q\Ü ‰Tµ,Ü ‰ŽHÜ ‰é{OÜ ‰êœhÜ ‰ÊoÜ ‰I zÜ ‰9Ü ‰fW‹Ü ‰9’Ü ‰'¦Ü ‰}­Ü ‰'Ý ‰eÛ Ý ‰F-Ý ‰í4Ý ‰åtIÝ ‰xcPÝ ‰vcZÝ ‰ ¸aÝ ‰vÝ ‰4¦}Ý ‰ˆ¿‡Ý ‰í¬ŽÝ ‰í*£Ý ‰ÎØªÝ ‰l¾´Ý ‰]h»Ý ‰KRÐÝ ‰‹ø×Ý ‰Õ áÝ ‰"èÝ ‰ mÞ ‰'—Þ ‰j!Þ ‰³$*Þ ‰òŽ1Þ ‰f;Þ ‰eÛRÞ ‰eÛ„Þ ‰îL¨Þ ‰îãÅÞ ‰)ÌÞ ‰béÞ ‰ùIðÞ ‰î  ß ‰|’ß ‰¸1ß ‰|’8ß ‰J"Uß ‰ü,\ß ‰Pyß ‰J€ß ‰ž‰ß ‰øo¤ß ‰Q=Áß ‰øoÈß ‰/Håß ‰’%ìß ‰2, à ‰ïIà ‰ R-à ‰С4à ‰àSà ‰P¡kà ‰Jrà ‰ؾ‘à ‰òS©à ‰“аà ‰ÁTÈà ‰¦IÏà ‰-çà ‰Iîà ‰;^á ‰.K á ‰A%á ‰ë¶,á ‰ëDIá ‰?·Pá ‰âmá ‰ØÅtá ‰ª‘á ‰J˜á ‰‡Rµá ‰Q¼á ‰ýßÙá ‰+Jàá ‰}„ýá ‰žUâ ‰Er!â ‰R(â ‰ÚIEâ ‰a Lâ ‰“5iâ ‰Úpâ ‰Ãïˆâ ‰¹â ‰h§â ‰µ¼®â ‰ÈÆâ ‰9øÍâ ‰ê×åâ ‰ÉPìâ ‰‘Âã ‰ê8 ã ‰C¹#ã ‰!m*ã ‰¸ûGã ‰eÛdã ‰é{kã ‰?Õ‹ã ‰”ï˜ã ‰Ô¥ã ‰ظ²ã ‰¸¿ã ‰EÌã ‰”ï÷ã ‰"þã ‰šä ‰Û"$ä ‰j!+ä ‰«"@ä ‰òŽGä ‰íQä ‰¤ÎXä ‰ämä ‰‰'tä ‰oü~ä ‰˜…ä ‰Ó$šä ‰ý¡ä ‰ÂS«ä ‰æë²ä ‰MGÏä ‰à¡Öä ‰Ëóä ‰ˆòúä ‰9—å ‰Áå ‰Öv;å ‰G¨Bå ‰—'Zå ‰tIaå ‰wâyå ‰¡U€å ‰Ã[˜å ‰ÚŸå ‰'â·å ‰¹¾å ‰d#Öå ‰0CÝå ‰Æ3üå ‰- æ ‰¯÷=æ ‰)Dæ ‰aaæ ‰ùIhæ ‰Ù…æ ‰|’Œæ ‰Æ9©æ ‰|’°æ ‰ïBÍæ ‰ü,Ôæ ‰Ïñæ ‰Jøæ ‰6±ç ‰Сç ‰B;ç ‰ÇzSç ‰JZç ‰¨ïrç ‰øoyç ‰Vó–ç ‰øoç ‰Ymºç ‰’%Áç ‰àoÞç ‰ïIåç ‰Ê9è ‰R è ‰ò'è ‰a .è ‰~0ƒè ‰Ã"oé ‰TÍzé ‰G‘é ‰G­é ‰PÓé ‰ëuÙé ‰\nÿé ‰ëuê ‰?J+ê ‰iÙ1ê ‰²Wê ‰iÙ]ê ‰„~ƒê ‰é‰ê ‰=Ãªê ‰ḭ́ê ‰^Ñê ‰y×ê ‰æ,øê ‰½yþê ‰ô–$ë ‰UµRë ‰à©_ë ‰§lë ‰)ªyë ‰à©ë ‰»n¬ë ‰à©Èë ‰à©äë ‰à©ì ‰à©ì ‰é#ì ‰Ÿk;ì ‰þ6Bì ‰›û_ì ‰“Ðfì ‰Bf~ì ‰bº…ì ‰™ì ‰!J ì ‰š—½ì ‰!JÄì ‰-œáì ‰!Jèì ‰÷Ôí ‰!J í ‰‹û)í ‰R0í ‰´ýMí ‰RTí ‰´qí ‰Rxí ‰‰‘•í ‰Rœí ‰¶¹í ‰RÀí ‰Y¶Ýí ‰Räí ‰Ö¶î ‰Rî ‰å¶%î ‰R,î ‰h¶Iî ‰RPî ‰w¶mî ‰Rtî ‰†¶‘î ‰R˜î ‰•¶µî ‰R¼î ‰·Ùî ‰Ràî ‰-·ýî ‰Rï ‰J¶!ï ‰R(ï ‰;¶Eï ‰RLï ‰,¶oï ‰+Œï ‰Ðý“ï ‰úm°ï ‰¦.·ï ‰i6Ðï ‰v×ï ‰—Ï𠉂ð ‰q.ð ‰ùr:ð ‰;Vbð ‰?ölð ‰(òsð ‰qhŸð ‰ÒŦð ‰êÊð ‰b Ñð ‰(mõð ‰a,ü𠉱! ñ ‰ÑÜ'ñ ‰߆Cñ ‰³aJñ ‰{ºsñ ‰Tãzñ ‰’£ñ ‰¨ªñ ‰Ìñ ‰(¨Óñ ‰áõñ ‰ïüñ ‰0Y"ò ‰Ð6)ò ‰—yQò ‰¼Zò ‰¹Íaò ‰¯†zò ‰?ò ‰Y œò ‰†Ö¬ò ‰ÿɹò ‰G8¿ò ‰Ê;Æò ‰ù®Òò ‰)ªÞò ‰:)ùò ‰GÚÿò ‰]ó ‰ –(ó ‰i|Ró ‰[²^ó ‰)ªjó ‰:)…ó ‰GÚ‹ó ‰µ«ó ‰@cÁó ‰²Íó ‰)ªÙó ‰:)ôó ‰GÚúó ‰Nbô ‰z3ô ‰zOô ‰zlô ‰N±sô ‰µ·ô ‰­¼ô ‰%’Èô ‰)ªÔô ‰:)ïô ‰GÚõô ‰kÏõ ‰ +õ ‰ƒs7õ ‰)ªCõ ‰:)^õ ‰GÚdõ ‰¨ „õ ‰N„šõ ‰`®¦õ ‰)ª²õ ‰:)Íõ ‰GÚÓõ ‰®µóõ ‰Gù ö ‰^ö ‰)ª!ö ‰:)<ö ‰GÚBö ‰@Âbö ‰Vxö ‰ÆÄ„ö ‰)ªö ‰:)«ö ‰GÚ±ö ‰'¸Ñö ‰&âçö ‰–Èóö ‰)ªÿö ‰:)÷ ‰GÚ ÷ ‰sÜ@÷ ‰°V÷ ‰46b÷ ‰)ªn÷ ‰:)‰÷ ‰GÚ÷ ‰z¯÷ ‰•Å÷ ‰T(Ñ÷ ‰)ªÝ÷ ‰:)ø÷ ‰GÚþ÷ ‰KFø ‰º–4ø ‰‰S@ø ‰)ªLø ‰:)gø ‰GÚmø ‰8¾ø ‰³ £ø ‰¨4¯ø ‰)ª»ø ‰:)Öø ‰GÚÜø ‰Pwüø ‰ $ù ‰_Gù ‰)ª*ù ‰:)Eù ‰GÚKù ‰©:kù ‰¿ôù ‰Ÿ6ù ‰)ª™ù ‰:)´ù ‰GÚºù ‰=rÚù ‰Ô3ðù ‰_ûüù ‰)ªú ‰:)#ú ‰GÚ)ú ‰0Iú ‰ç_ú ‰2âkú ‰)ªwú ‰:)’ú ‰GÚ˜ú ‰èQ¸ú ‰éÎú ‰O-Ûú ‰”áú ‰cÜèú ‰‚6ôú ‰)ªû ‰:)û ‰GÚ!û ‰-RAû ‰úJû ‰«¥Wû ‰’‹vû ‰u‚û ‰)ªŽû ‰:)©û ‰GÚ¯û ‰z1Ïû ‰a@åû ‰û ñû ‰)ªýû ‰:)ü ‰GÚü ‰ûÌ>ü ‰¸=Tü ‰yV`ü ‰)ªlü ‰:)‡ü ‰GÚü ‰áU­ü ‰–¬Ãü ‰5‹Ïü ‰)ªÛü ‰:)öü ‰GÚüü ‰ “ý ‰¯2ý ‰³œ>ý ‰)ªJý ‰:)eý ‰GÚký ‰:k‹ý ‰“T¡ý ‰&Í­ý ‰)ª¹ý ‰:)Ôý ‰GÚÚý ‰_ãúý ‰<}þ ‰º-þ ‰¨!þ ‰)ª-þ ‰:)Hþ ‰GÚNþ ‰3þ ‰mŒþ ‰°‡™þ ‰´k¦þ ‰û~³þ ‰å•Àþ ‰mêþ ‰mÿ ‰é!ÿ ‰!J(ÿ ‰W8Bÿ ‰$Kÿ ‰$yÿ ‰ ?Œÿ ‰4T™ÿ ‰ ?Èÿ ‰!JÏÿ ‰U[ìÿ ‰=ë ‰Ìv* ‰º7 ‰IV ‰!Gñ ‰jý ‰Y¸ ‰+C0 ‰Y6 ‰Ö#€ ‰æ–” ‰Y¸¡ ‰æ–¸ ‰æ–Ô ‰æ–õ ‰c`ü ‰ä ‰Ë ‰¬G+ ‰ÉD2 ‰öïK ‰Å4R ‰“¾f ‰;um ‰}G… ‰‹þŒ ‰‡.ª ‰•#± ‰FÉ ‰TÐ ‰*ãè ‰ Rï ‰A”  ‰œ3 ‰I”+ ‰”É2 ‰¯úT ‰”É[ ‰ûä} ‰ÂQ„ ‰T…® ‰õ»Ó ‰µõ ‰Öêü ‰y& ‰9j& ‰˜r? ‰€zF ‰æÅe ‰!l ‰‡^ë ‰|/ø ‰2 ‰z# ‰{ø  ‰¶œ. ‰Í< ‰›gJ ‰>ÒV ‰ÈÉd ‰xcq ‰¹¾ ‰1  ‰|/© ‰B…Å ‰”âÌ ‰yŒî ‰Ëõ ‰…  ‰Dj ‰—‹$ ‰M+ ‰sæD ‰É×K ‰Šªd ‰×jk ‰ ‰|/š ‰!J¡ ‰2Ä ‰'Ù ‰ùræ ‰;V ‰y ‰¦l+ ‰ÕØ< ‰_öF ‰H£M ‰Ñ`n ‰ºu ‰¯M– ‰F¬ ‰å‡Ã ‰\Ê ‰_œè ‰8 õ ‰8   ‰çå  ‰)ª,  ‰:)G  ‰GÚM  ‰y¬m  ‰TÒd  ‰ˆi  ‰Y!t  ‰G€  ‰Î$Œ  ‰ Ș  ‰¶Á¥  ‰·.±  ‰Û¥·  ‰¡û½  ‰à  ‰ÅìÉ  ‰b¡Ð  ‰ÿ Ü  ‰|®â  ‰Êþè  ‰¢î  ‰à]ô  ‰©òú  ‰£µ  ‰…\  ‰Gÿ  ‰°  ‰ªÇ  ‰Ãz  ‰cÖ5  ‰-?  ‰JWE  ‰2lg  ‰'Wm  ‰8ø  ‰·\“  ‰›ë«  ‰Ø6²  ‰ÏþË  ‰g³Ò  ‰Tª  ‰ (  ‰·6  ‰>=  ‰Í~_  ‰25f  ‰+û‡  ‰MðŽ  ‰K¯  ‰™ó¶  ‰o×  ‰F Þ  ‰yuÿ  ‰³ˆ  ‰‘x'  ‰~².  ‰ðqO  ‰Ø.V  ‰ÍÚw  ‰°³~  ‰Vš  ‰Fœ¡  ‰¶Œº  ‰)Á  ‰n/ì  ‰Kó  ‰Ë× ‰œÐ% ‰F ‰ªÿM ‰ÇÑo ‰OŸv ‰ª<– ‰ÞÎ ‰Ó9» ‰qÆÂ ‰)•ä ‰ɇë ‰³Æ  ‰JH ‰ŒÀ5 ‰”d< ‰À‡Y ‰ã;` ‰>P ‰› ˆ ‰{)© ‰c‚° ‰œ×Ñ ‰ó®Ø ‰l:ù ‰, ‰W3% ‰ñ, ‰d-D ‰nîK ‰ùœi ‰>Âp ‰nf‘ ‰†o˜ ‰çoº ‰~XÁ ‰Ç·â ‰¼é ‰Ë  ‰Yx ‰Tê3 ‰Ô†: ‰{[[ ‰ê b ‰Öƒ ‰ÆËŠ ‰i˜± ‰ŸR¸ ‰ðÞ ‰?å ‰»t ‰c  ‰34 ‰¨a; ‰€¿] ‰d ‰_œ‡ ‰=—Ž ‰Ui¬ ‰Ïã³ ‰ÚÕ ‰лÜ ‰dþ ‰ë  ‰ªÕ' ‰ïê. ‰â©P ‰Ã0W ‰æ´y ‰†Ê€ ‰pÜ¢ ‰ƒ6© ‰®&Ë ‰S6Ò ‰â¦ù ‰÷ ‰ˆ+' ‰aI. ‰ûi ‰žu ‰ñ<€ ‰ IŠ ‰mt“ ‰¤ö ‰¾© ‰ñ<¬ ‰ø•¸ ‰Ü’¾ ‰‘kÄ ‰¢Ê ‰ÞmÐ ‰ÐpÖ ‰‰QÝ ‰Òçé ‰°„ö ‰ñ< ‰Òç3 ‰—8 ‰ÊÎB ‰dH ‰V£j ‰±Ôp ‰‹‹’ ‰â ˜ ‰êʺ ‰fàÀ ‰04á ‰Uöç ‰Á ‰a¸ ‰§ ‰C\ ‰€% ‰'ž, ‰7³3 ‰µ: ‰šA ‰³dH ‰`ÑO ‰µV ‰d] ‰äd ‰årk ‰‘r ‰´y ‰™"€ ‰þH‡ ‰¶óŽ ‰½– ‰BN¢ ‰'¨ ‰.¯ ‰)ñ¶ ‰Vy½ ‰e÷Ä ‰GË ‰-Ò ‰P{Ù ‰Ó4à ‰>3ç ‰½î ‰¶õ ‰Å0ü ‰‡­ ‰€4 ‰Åà% ‰®. ‰® ‰àB) ‰[Š6 ‰àA ‰½ÓM ‰‚(Y ‰[Šo ‰[Š ‰[Н ‰-µ ‰Í ‰-Ó ‰¡ë ‰Rñ ‰ ‰a  ‰ÿ·1 ‰?ú7 ‰“ôO ‰¦IU ‰âm ‰– s ‰âÄ‹ ‰ýŒ‘ ‰G™ª ‰iw° ‰gKÈ ‰‚SÎ ‰îâæ ‰ rì ‰á  ‰Æ» ‰àB/ ‰Ñ#5 ‰„bR ‰•#X ‰&p ‰;uv ‰@FŽ ‰ée” ‰½¥¬ ‰ R² ‰f“Ï ‰Ÿ•Õ ‰æBò ‰ëø ‰]  ‰Â ‰Úù. ‰ön4 ‰˜ W ‰êt ‰ rz ‰ù — ‰Zo ‰:pº ‰ÖêÀ ‰œÞÝ ‰Öêã ‰Ë? ‰Öê  ‰#- ‰'m3 ‰µ"L ‰ÛPR ‰qEj ‰üp ‰ B‰ ‰”r ‰ùÛ¬ ‰Á¡² ‰É­Ï ‰ËÕ ‰ žé ‰!ï ‰@T ‰Â.N ‰Z ‰)ªf ‰ì;r ‰q~ ‰” ‰¯ ‰Ê ‰å ‰ ‰ ‰6 ‰!J< ‰ÃáY ‰!J_ ‰b<| ‰R‚ ‰—zŸ ‰a ¥ ‰zñ ‰RÈ ‰÷bå ‰a ë ‰ù  ‰Ǽ  ‰í&  ‰©/,  ‰kRD  ‰–lJ  ‰Òc  ‰âi  ‰x¾  ‰–l‡  ‰^è   ‰é¦  ‰1(¾  ‰ñÄ  ‰Ÿ}Ý  ‰ Nã  ‰,^û  ‰×N! ‰þç4! ‰" ‰Fœ%" ‰©1" ‰)ª=" ‰:)X" ‰GÚ^" ‰\M~" ‰åöš" ‰»!¦" ‰°Â¬" ‰Çe²" ‰UÉÁ" ‰–òÇ" ‰—Í" ‰õ_Ó" ‰WÙ" ‰ýnß" ‰:æ" ‰/ëî" ‰'·ú" ‰)ª# ‰X¤# ‰:)-# ‰GÚ3# ‰3l# ‰#'s# ‰¤Í‡# ‰ñ<N$ ‰róf$ ‰ró$ ‰ró”$ ‰Rtš$ ‰Å »$ ‰ÇÖ$ ‰Úà$ ‰Àæ$ ‰¦% ‰s3% ‰ª©@% ‰ +M% ‰X¤Z% ‰Öãs% ‰ `z% ‰¼ô‰% ‰Öã«% ‰Y²% ‰ã3Ù% ‰…yà% ‰"<& ‰]e & ‰(.& ‰ú%5& ‰ºU& ‰Öãl& ‰9?Š& ‰áé“& ‰IÚœ& ‰‹è¥& ‰ĤÒ& ‰´ê& ‰ Tö& ‰/~' ‰§' ‰´(' ‰´M' ‰ ÁS' ‰e8k' ‰…Uq' ‰‚݉' ‰Ñ' ‰«^¨' ‰€m®' ‰_ÔÏ' ‰±áÕ' ‰Cö' ‰™( ‰Å~( ‰Å~T( ‰/ÒZ( ‰ŽIŸ( ‰;ú¸( ‰·±Ç( ‰·ªÖ( ‰: ä( ‰;úý( ‰;ú) ‰ïR5) ‰A¥;) ‰/]) ‰Û c) ‰l¢…) ‰ôÞ‹) ‰9P£) ‰Ì|©) ‰¥LÂ) ‰ŽÈ) ‰:;ë) ‰ú£ñ) ‰øû* ‰ë˜* ‰æœ8* ‰˜Œ>* ‰_§\* ‰ób* ‰é^€* ‰« †* ‰ëú¤* ‰¨²«* ‰ÑÎÍ* ‰r`Ô* ‰fÉ÷* ‰&+ ‰&)+ ‰&>+ ‰ÚE+ ‰a6q+ ‰£s’+ ‰õ´+ ‰Ý®½+ ‰Ý®ç+ ‰Lì+ ‰1÷+ ‰1@, ‰L#, ‰¤Ó', ‰¤Ó], ‰¢f, ‰çËr, ‰Ï{, ‰Ï, ‰:¬, ‰ÐìÄ, ‰ÐìÝ, ‰Ðìò, ‰!Jö, ‰q- ‰ÁÎ- ‰|i6- ‰ÁÎ<- ‰ÆZZ- ‰a`- ‰¢- ‰„“- ‰áè±- ‰¼9·- ‰÷ÚÙ- ‰×Òß- ‰B©. ‰U . ‰?¶3. ‰'0p. ‰´º|. ‰Ù•. ‰D¶¤. ‰Ê». ‰ã;Á. ‰eøâ. ‰› è. ‰Þ2 / ‰c‚/ ‰S]0/ ‰¶6/ ‰OÅX/ ‰ߘ^/ ‰…€/ ‰e/†/ ‰(¢/ ‰0”¨/ ‰J ¼/ ‰Ê×/ ‰!JÞ/ ‰‡ û/ ‰p!?0 ‰‡?W0 ‰Id0 ‰ÔKq0 ‰¶~0 ‰‡?•0 ‰‡?·0 ‰Û¾0 ‰E°Û0 ‰¾6â0 ‰/a1 ‰sÆ 1 ‰ŽS1 ‰T‰$1 ‰=81 ‰!J?1 ‰>\1 ‰[Õ1 ‰ä¦1 ‰ª©²1 ‰ +¿1 ‰äØ1 ‰äù1 ‰Y2 ‰šx'2 ‰…y-2 ‰®S2 ‰]eY2 ‰fz2 ‰ú%€2 ‰—½ 2 ‰ä·2 ‰Ç?)3 ‰vÛA3 ‰HñN3 ‰vÛp3 ‰×Gw3 ‰’¯—3 ‰vÛ²3 ‰!J¹3 ‰\5Ö3 ‰‡7ñ3 ‰ó.û3 ‰ç4 ‰´Y 4 ‰îý4 ‰€Í14 ‰õ84 ‰ÜÍU4 ‰…U\4 ‰Xfw4 ‰Øï…4 ‰_G—4 ‰%8¢4 ‰ç3°4 ‰dJ¾4 ‰èïÌ4 ‰{Ó4 ‰K‹æ4 ‰_G5 ‰Ž•$5 ‰2+5 ‰ H5 ‰1àO5 ‰Èlr5 ‰×Gy5 ‰úš5 ‰Zt¡5 ‰ù?66 ‰ŽC=6 ‰Þ·E6{6 ‰D6 ‰ô–³6 ‰Ù0·67 ‰D7 ‰§ 7 ‰ïJ$7J7 ‰0Q7 ‰$…Y7‚7 ‰D¢7 ‰%¦7 Ù7 õ7 ‰D 8 G8 ‰DQ8 ‰§e8 ‰ÀÇi8“8»8 ‰Æä8 ‰Dî8 ‰§ý8 ‰qÝ969 ‰DE9 ‰ècI9~9 ‰Dˆ9 ‰€MŸ9 ‰‹£9á9 ‰Dý9 ‰Š*:A: ‰D]: ‰+a:”:°: ‰D½: ‰€Mä: ‰Dî: ‰§ý: ‰ËÐ;7;S; ‰D`; ‰r÷‡; ‰D‘; ‰§¥; ‰©;à; ‰Dê; ‰§þ; ‰Šë<.<J< ‰Dc<< ‰Dœ< ‰DÁ< ‰žÅÅ< = ‰D = ‰§= ‰Àè =!J="b=#~= ‰D•=$±= ‰DÃ=%ß= ‰Dñ=& > ‰D>& ,> ‰…:<> ‰w:b> ‰Dl> ‰ôx> ‰ÔP„> ‰u|> ‰þ9¦> ‰Z¸ª>'? ‰D? ‰§#? ‰ÏD'?(^? ‰Dh? ‰§|? ‰Ú-€?)¸? ‰DÂ? ‰§Ö? ‰ƒ.Ú?*@ ‰D@ ‰§(@ ‰mÖ,@,Q@ ‰Ä[@ ‰âb@ ‰¸l@ ‰Þks@ ‰i0Œ@ ‰à ˜@ ‰Œã¤@ ‰ò°@ ‰ç¼@ ‰¬EÈ@ ‰ÒžÔ@ ‰M׿@-þ@.A ‰dâ'A ‰ˆûIA ‰DSA ‰dâ`A ‰`emA ‰!2zA ‰–m‡A ‰ˆûžA ‰½j¢A0ûA2B ‰D=B3YB ‰DgB ‰Y§yB3]‹B ‰ì¢B5¾B ‰DÌB ‰dâÝB ‰Y§îB ‰ì C7%C ‰D2C ‰Y§BC ‰ìgC ‰D“C ‰Ïx—C8ÞC ‰DD ‰.® D9KD:gD ‰D‰D ‰D“D ‰Ù©D ‰i‰­D;àD<üD ‰D E ‰r÷"E=>E ‰DKE ‰r÷qE ‰D…E ‰n‰E>³E?ÏE ‰DÜE ‰pÎëE?wýE ‰r÷!F@=F ‰DOFAkF ‰DƒFBŸF ‰D¶FCÒF ‰DïF ‰DùF ‰YG ‰Ò~G ‰mú.G ‰ â8G bG ‰4|fGD¯GDÅG ‰mÜG ‰DæG ‰§õG ‰BçùGF.H ‰D8H ‰lEH ‰YRH ‰Ò~kH ‰mú‡H ‰{ª‹HGâHHþH ‰D I ‰”· IIAK ‰ç\RK ‰æYK ‰¬ÜcK ‰gpK ‰ï#‰KN¥K ‰D½K ‰©ºÇKOãK ‰DþKPL ‰D5LQQL ‰DcLRLS²LTÎL ‰DåLUM ‰DM ‰D9)MVEM ‰DjMW†M ‰D§MXÃM ‰DåM ‰DN ‰Ž NYq ‰“Jq ‰Ò.Vq ‰³ndq ‰Ì7pq ‰³M|q ‰ÉÙˆq ‰µª®q ‰©²q€öq ‡&r&Br ‰DOr ‰šÿhrJ„r ‰D’r ‰šÿºr ‰DÄr ‰§Ór ‰ÃK×rÜsðs ‰D+s ‰šÿ;s Ms ‰ âWs óas ss ‰Ážs ‰D¨s ‰§¼s ‰ž7ÀsÞõs ‰Dÿs ‰§t ‰^»tßAtàwtàªt ‰D¹t ‰|Ù½táòt ‰Du ‰Âuâ:u ‰DZu ‰‚À^uãœu ‰D¦u ‰§ºu ‰¼¾uäóu ‰Dv ‰ëNvå0væLv ‰Dcvçv ‰Dœv ‰D¦v ‰§ºv ‰‚;vèóv ‰Dýv ‰§w ‰kdwéJw ‰DTw ‰§hw ‰5×lwê¡w ‰D«w ‰§¿w ‰¡Ãwëúw ‰Dx ‰§x ‰¹ùxìSx ‰D]x ‰§qx ‰äuxíŸxî»x ‰DÎx ‰o|Ôx ‰ùÜxïyï Hy ‰D\y ‰qL`yð•y ‰D¤y ‰ ­¨yñÒyòîy ‰Dzóz ‰DGzôcz ‰Duzõ‘z ‰D¨zöÄz ‰Dáz ‰Dðz ‰¥Ýôz÷,{ ‰D6{ ‰§J{ ‰¬dN{øƒ{ ‰D{ ‰§¡{ ‰§˜¥{ùà{ú÷{ ‰»l| ‰¾ | ‰“"| ‰Ê?|û[| ‰Dm|ü‰| ‰Dœ| ‰bÄ£| ‰P9«|ýÂ| ‰áéË| ‰IÚÔ| ‰‹èç| ‰Õ+} ‰D} ‰§2} ‰sÝ6}þ`}ÿ|} ‰D™} ‰D»} ‰ô–Ì} ‰G3Ð}~:~ ‰DD~ ‰§X~ ‰Æ\~†~¢~ ‰D´~Ì~è~ ‰Dú~ ‰D8 ‰DL ‰gP… ‰D ‰§ž ‰+n¢× ‰Dá ‰§õ ‰Ëù #€ ?€ ‰DQ€ m€ ‰Dš€ ¬€ ‰f²Í€ ‰D×€ ‰§ë€ ‰÷ï€  5 ‰DGc ‰D¢ ‰f²Ã ‰D× ‰ìÛ‚ ‰D‚ ‰§)‚ ‰†Ï-‚b‚ ‰D}‚ ‰û ‚¿‚ ‰D΂ ‰Ø%Ò‚ƒ ‰Dƒ ‰§%ƒ ‰EV)ƒSƒoƒ ‰D}ƒ Žƒ ‰ Zšƒ ‰>¯ƒÁƒ ‰J•׃óƒ ‰D„ ‰D-„ ‰œa1„f„ ‰Dp„ ‰Õ+}„ ‰”·Œ„ ‰ â–„ À„ ‰®^Ä„û„"… ‰Öã(… ‰D2… ‰§F… ‰afJ…t…… ‰D… ‰13¾…à…†:† ‰J•6† ‰93@† ‰D^† ‰7b†}† ‰93©† ‰D³† ‰§Â† ‰îÆƆð† ‡ ‰DF‡ ‰DP‡ ‰§d‡ ‰ ‚h‡’‡®‡ ‰D»‡ ‰13܇þ‡ ˆ:2ˆ ‰J•Tˆ ‰93^ˆ ‰D|ˆ ‰°„€ˆ ›ˆ ‰93Lj ‰Dш ‰§àˆ ‰ÒWäˆ!‰"*‰ ‰DY‰#u‰ ‰D—‰$³‰ ‰DÕ‰%ñ‰ ‰DŠ&$Š ‰DNŠ'jŠ ‰DŠ(Š ‰DÒŠ ‰Dአ‰NÏåŠ)‹ ‰D$‹ ‰§8‹ ‰dT<‹*f‹+‚‹ ‰D¤‹ ‰D®‹ ‰§Â‹ ‰ñuÆ‹,ð‹-*Œ.FŒ ‰DlŒ/ˆŒ ‰DªŒ0ÂŒ1óŒ ‰D ‰àÿ2; ‰DE ‰§T ‰ ³X3 ‰Dœ ‰Œ{ 4Õ ‰Dß ‰§î ‰ð9ò5Ž68Ž ‰DYŽ7uŽ ‰D Ž ‰93ªŽ ‰DÃŽ ‰1ÇŽ8⎠‰93  ‰93 ‰D0 ‰•´49O ‰93{ ‰DŠ ‰:éŽ:¸;Ô ‰Dð ‰93ú ‰D ‰Cº<2 ‰93^ ‰Dh ‰§w ‰z©{=¥>Á ‰Dö ‰D‘ ‰ðÞ ‘?>‘ ‰DM‘ ‰ÝQ‘@ˆ‘ ‰D’‘ ‰§¡‘ ‰D÷¥‘BÏ‘ ‰<"Ó‘D ’ ‰D’ ‰§$’ ‰æ,(’FR’ ‰;DV’G’ ‰D—’ ‰§¦’ ‰¶Ëª’IÔ’ ‰KÿØ’J“ ‰D“ ‰§(“ ‰§,“OV“ ‰ëóZ“P’“ ‰Dœ“ ‰§«“ ‰¯Ú¯“RÙ“ ‰ «Ý“S” ‰qÕ”X)” ‰5^-”ˆE” ‰²åU” ‰3Âw” ‰D” ‰§” ‰ä””f¾” ‰Õ<”gì”q• ‰D• ‰”·%• ‰šÿ5•qG• ‰ âQ• [• ‰=Úk•q'•s¹• ‰DÆ• ‰pÎÖ•sç• ‰Z“ô• ‰r÷$–t@– ‰DR–un– ‰D€–vœ– ‰D®–wÊ– ‰Dá–xý– ‰D—y+— ‰D=—zY— ‰Df— ‰ÚSz—{–— ‰D£— ‰ÚS·—|â—} ˜~4˜ ‰×8˜Ð L˜ ‰¤±X˜ ‰‡‘e˜ ‰“q˜ ‰tË}˜ ‰‡ƒ˜ ‰Ï“•˜ ‰{›˜ ‰[®˜ ‰nèÁ˜ ‰^»Θ ‰ÀîÛ˜ ‰\Rè˜ ‰z,ô˜ ‰D™ ‰& ™ ‰²Ô™ ‰@¹2™ ‰½Â>™ ‰EJ™ ‰_žV™ ‰‹ãc™ ˆm™ ‰ `y™ ‰§à…™ ‰kä‘™ ‰“ž™ ‰ØJ«™ ‰~§¸™ ‰@÷Å™ ‰=5Ò™ ‰7­ß™ ‰TÄì™ ‰ïcù™ ‰Õnš ‰Öš ‰S9 š ‰ge-š ‰-€:š ‰?%Gš ‰QTš ‰Üaš ‰·nš ‰ù;{š ‰·•ˆš ‰œ?•š ‰Ù¢š ‰Íi¯š ‰ŠM¼š ‰jâÉš ‰bÿÖš ‰pdãš ‰V@ðš ‰3ý𠉕a › ‰N’› ‰Œ $› ‰jÁ1› ‰¦>› ‰¥éK› ‰2X› ‰¤e› ‰for› ‰q¡› ‰‘vŒ› ‰™› ‰–8¦› ‰ö ³› ‰{½À› ‰HÉÍ› ‰‹þÚ› ‰õâç› ‰–%ô› ‰†¬œ ‰bŸœ ‰Ì œ ‰é:'œ1œ ‰Úâ=œ ŒGœ ‰G Sœ ‰qç_œ iœ ‰ –uœ ‘œ ‰g¹‹œ ‰²—œ ’¡œ ‰Ü–­œ “·œ ‰ÌûÜ ”Íœ ‰(œÙœ ‰ó1åœ ‰sAñœ ‰lýœ ‰a8  ‰›¥ ‰ó  ‰Ó,& ‰m}8 ‰AD ‰ÀU ‰"¦a ‰Áëm ‰¦y ‰æ6… ‰‘ ‰ð ‰̶© ‰¡Vµ ‰ùãÁ ‰lÒÍ ‰&Ù ˜è ‰÷ô  þ ‰R6 ž ‰pÈž ‰‰3#ž ‰ØX/ž ‰ûN;ž ‰:2Gž ‰íPSž ‰3<_ž ‰‡Lkž ‰uwž ‰¼Áƒž ‰V¼ž ‰átŸžÁ­ž ‰8µ¼ž ‰áfÊž ‰.dÞž ‰iÐðž ‰„Ôûž ‰¯èŸ ‰ì¤Ÿ ‰PSŸ ‰ a%ŸŽ3Ÿ ‰nx9ŸŒGŸ ‰šMŸ „ 0@P` p €  °ÀÐàð 0@P`p €!" #°$À%Ð&à'ð()* ,0-@.P0`2p3€57 8°9À:Ð;à<ð=>? @0A@BPC`DpF€GH I°JÀKÐLàMðNOP Q0R@SPT`UpV€WX Y°ZÀ[Ð\à]ð^_` a0b@cPd`epf€gh i°jÀkÐlàmðnop q0r@sPt`upv€wx y°zÀ{Ð|à}ð~€ 0‚@ƒP„`…p†€‡ˆ ‰°ŠÀ‹ÐŒàðŽ ‘0’@“P”`•p–€—˜ ™°šÀ›Ðœà🠠 ¡ ¢0 £@ ¤P ¥` ¦p ¨€ © ª  «° ¬À ­Ð ®à ¯ð ° ± ² ³0 ´@ µP ¶` ·p ¸€ ¹ º  »° ¼À ½Ð ¾à Àð Á  à Ä0 Æ@ ÈP É` Ëp ΀ Ï Р Ѱ ÒÀ ÓÐ Ôà Õð Ö Ø Ù Ú0 Ü@ ÞP ß` àp ဠâ ã  ä° åÀ æÐ çà èð é ê ë ì0 í@ îP ï` ðp ñ€ ò ó  ô° õÀ öÐ ÷à øð ùúû ü0ý@þPÿ`p€ °ÀÐàð     0 @P`p€ °ÀÐàð 0@P `!p"€#$ %°&À'Ð(à)ð*+, -0.@/P0`1p2€34 5°6À7Ð8à9ð:;< =0>@?P@`BpC€DD& F°GÀIÐJàOðPRS f0g@qPs`tpu€vw x°yÀzÐ{à|ð}~#ã08å @H(PXD`h)px%€ ˆ › ˜   ¨ °¸ÀÈvÐØ*àè*ðø5¶~ (308q@H3PX`hpx€ˆ ˜ , !¨!°"¸"/À#È# Ð$Ø$ à%è% ð&ø&„''u(( )()0*8*L@,H,1P-X- `.h.•p0x0„€2ˆ253˜3û 5¨5}°7¸71À8È8#Ð9Ø9#à:è:/ð;ø;<<0==0 >(>0?8?ú@@H@PAXA`BhBpCxC€DˆD§F˜F: G¨GI°H¸HÀIÈIÐJØJLàKèKðLøL%MM”NN' O(O0P8P@QHQ PRXR`ShS pTxT€UˆUV˜V W¨W °X¸XÀYÈYÐZØZ,à[è[0ð\ø\]]G^^W _(_\0`8`\@aHa.PbXb4`chcQpdxdQ€eˆejf˜f g¨g°h¸h ÀiÈi,ÐjØj2àkèk ðlølmmnn o(o&0p8p@qHqPrXr`shs'ptxt€uˆu'v˜v' w¨wG°x¸xÀyÈyÐzØz-à{è{ð|ø|)}},~~ (0€8€2@HP‚X‚`ƒhƒp„x„€…ˆ…†˜† ‡¨‡°ˆ¸ˆÀ‰È‰ Њ؊à‹è‹ðŒøŒŽŽ (08@‘H‘P’X’`“h“%p”x”,€•ˆ•0–˜– —¨—°˜¸˜À™È™*КؚEà›è›.ðœøœ&  } Ÿ ŸF  (  0 ¡8 ¡L@ ¢H ¢&P £X £%` ¤h ¤:p ¥x ¥&€ ¦ˆ ¦‰ ¨˜ ¨  ©¨ © ° ª¸ ªÀ «È «Ð ¬Ø ¬à ­è ­'ð ®ø ® ¯ ¯ ° ° ±( ±70 ²8 ²@ ³H ³0P ´X ´2` µh µ6p ¶x ¶€ ·ˆ · ¸˜ ¸  ¹¨ ¹° º¸ º\À »È » Ð ¼Ø ¼ à ½è ½ ð ¾ø ¾” À À( Á Á Â( Â"0 Ã8 ÃW@ ÄH ÄHP ÆX ƨ` Èh Èep Éx ɪ€ ˈ Ë^ Θ Î  Ϩ ϰ и ÐgÀ ÑÈ Ñ Ð ÒØ Ò à Óè Ó ð Ôø Ô% Õ Õ% Ö ÖH Ø( Øþ0 Ù8 Ù@ ÚH Ú1P ÜX ÜT` Þh Þp ßx ߀ àˆ à’ ᘠá  ⨠â° 㸠ã,À äÈ äÐ åØ åà æè æð çø ç è è é éo ê( êo0 ë8 ë@ ìH ìP íX íL` îh îp ïx ï€ ðˆ ð% ñ˜ ñ…  ò¨ ò%° ó¸ ó"À ôÈ ôÐ õØ õà öè ö(ð ÷ø ÷øøùùH ú(úW0û8û&@üHüPýXýl`þhþpÿxÿt€ˆ0˜  ¨°¸tÀÈ ÐØ>àèðø      ( 90 8 T@ H P X 9`hTpx €ˆ ˜ ¨&°¸ÀÈ’ÐØ!àè ðø÷ “ (08@H"PX `h“p x €!ˆ!"˜"" #¨#‚°$¸$‚À%È%-Ð&Ø&"à'è'-ð(ø("))1** +(+40,8,@-H-P.X.`/h/*p0x0 €1ˆ1 2˜2  3¨3 °4¸4 À5È5 Ð6Ø6à7è7ð8ø899:: ;(;0<8<@=H= P>X>"`?h? p@x@ €BˆBFC˜C  D¨D&°D&¸D,ÀFÈF:ÐGØG&àIèI:ðJøJ&OO:PP& R(R:0S8S&@fHf:PgXg&`qhqópsxsú€tˆtu˜u% v¨v3°w¸w ÀxÈx ÐyØy àzèzdð{ø{7||}} ~(~»âù 3  b  y    · Ï æ ý  Q s Ž º Õ ë   0  I !a " #¦ $½ %Ô &ô ' (* )A *` , -™ .à 0þ 2 3> 5c 7} 8” 9« :Ò ;ê <=>3?‚@™A°BÇCÞD!FAG\HsIŠJ¥K¼LÓMN1OHP_QvRS¤T»UÒVéWXY-ZD[[\r]^¥_½`Õaìbcd1eMfdg{h’i©jÃkÜlóm n o7pMqdr{s’t©uÀv×wxy2zI{`|v}~¤»€Ô낃„2…I†`‡wˆŽ‰¥м‹ÓŒêŽ/F‘]’t“”¤•»–җ阙š3›Qœg¡ŸÍ ä¡¢£1¤O¥e¦ƒ¨š©±ªÈ«ß¬ö­ ®$¯;°R±l²‚³™´°µÇ¶Þ·õ¸ ¹#ºS»j¼½˜¾·ÀÍÁäÂúÃÄ;ÆoȉɹËÑÎèÏþÐ"Ñ9ÒPÓgÔ~Õ•Ö·ØDÙ[ÚqÜÞ¨ßÀàááùâ ã* ä@ åW æn ç„ è› éµ êÏ ëæ ìý í!î3!ï[!ðr!ñ˜!ò¯!óÆ!ôÝ!õ÷!ö"÷%"ø<"ù["úˆ"û¡"ü¸"ýÜ"þó"ÿ#2#J#a#†#ž#º#Ñ#è#ÿ# $ 0$ M$ d$ ~$›$²$É$à$ø$%4%M%d%³%Ê%&&/&G&^&•& ¬&!Ã&"Û&#'$/'%F'&^''u'(')§'*¾'+Õ',ì'-(.(/1(0H(1_(2v(3(4¤(5»(6Ò(7é(8)9):.);E)<\)=s)>‹)?¢)@¹)BØ)Cí)D*F$*G;*IY*Jo*OŽ*P¥*RÄ*SÛ*fú*g+qe+s¸+tÏ+uæ+v,w,x2,yK,zj,{…,|œ,}³,~ @`€« MÀ É è  (HQ p°ÐÙ ø  @I hˆ¨Èè (!H"h#ˆ$¨%È&ì' (,)L*U +t,”-´.½ /Ü0å 12$3- 4L5U 6t7”8´9Ô:ô;<4=T>t?”@´AÔBôCD4FTGtH”I´JØKøLM8NXOxP˜Q¸RØSøT U8 VX Wx X˜ Y¸ ZØ [ø \ ]8 ^X _| `  aÀ bà c d( eL fl gŒ h¬ iÌ jì k l, mL nl oŒ p¬ qÌ rì s t, uL vl wŒ x¬ yÌ zì { |,}L~lŒ€¬Ì‚ìƒ „,…L†l‡Œˆ¬‰ÌŠì‹ Œ,LŽlŒ¬‘Ì’ì“ ”,•L–l—Œ˜¬™Ìšì› œ,LŸl Œ¡¬¢Ì£ì¤ ¥,¦5 §T¨t©”ª´«Ô¬ô­®4¯T°t±”²´³Ô´ôµ¶4·T¸t¹”º´»Ô¼ô½¾ ¿<À\Á|œÃÀÄÉ ÅäÆí Ç È0É9 ÊXËa Ì€ΠÏÀÐàÑÒ Ó@Ô`Õ€Ö‰ רØÌì Ù,LClÚŒN• Û´š½ Ûà€é Û,&8JA Ûå`Üi Ûˆð‘ Û°ÞÐßðàù ÛFá8âXãxä˜å¸æØçøèé! ÛW@êI Ûchëˆì¨í± ÛoÐîðïð0ñ9 ÛXòxó˜ô¸õØöø÷ø8ùA Û\ú|ûœü¼ýÅ Û›äþÿ(Hhˆ¬Ìì , L  l  Œ  ¬  Ì  ì  !,!L!l!Œ!¬!Ð!ð!"" Û«8"X"x"˜"¸"Ø"ø"# 8#!X#"x### Ûº #$©# ÛÆÈ#%è#&$'($(H$)h$*ˆ$+¨$,È$-è$.%/(%0H%1h%2ˆ%3¨%4È%5è%6&7(&8H&9h&:ˆ&;¨&<È&=è&>'?('@H'Bh'C|'Dœ'D&°'FÐ'Gð'I(J0(OP(Pp(R(S°(XÐ(ˆÙ( ÛÒ)f )g@)q`)s€)t )uÀ)và)w*x *y@*z`*{€*| *}À*~à*Ð gspiceui-1.1.00+dfsg/src/base/0000755000000000000000000000000012511365141014516 5ustar rootrootgspiceui-1.1.00+dfsg/src/base/PrcBase.cpp0000644000000000000000000003224412452742015016551 0ustar rootroot//************************************************************************************************** // PrcBase.cpp * // ------------- * // Started : 2004-01-29 * // Last Update : 2015-01-06 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "PrcBase.hpp" //************************************************************************************************** // Constructor. PrcBase::PrcBase( int iFlags ) : wxProcess( iFlags ) { m_iPid = -1; // Clear the process ID number m_iExitCode = 0; // Clear the process exit code m_ofnLog = DEF_LOG_FILE; // Set the default log file path and name m_osErrMsg = wxT(""); // Clear the error message } //************************************************************************************************** // Destructor. PrcBase::~PrcBase( ) { // Delete the process log file bDelLogFile( ); } //************************************************************************************************** // Find a binary using the user's PATH environment variable given the binary name. // // Argument List : // ofnBin - The binary name without the path // // Return Values : // true - Success (path prepended to oFnBinary) // false - Failure bool PrcBase::bFindBinary( wxFileName & rofnBinary ) { wxPathList opl1; wxFileName ofn1; wxString os1, os2, os3; m_osErrMsg = wxT(""); // Initial checks if( ! rofnBinary.IsOk( ) ) return( false ); // Search environment variable PATH for the first occurrence of the binary opl1.AddEnvList( wxT("PATH") ); ofn1 = opl1.FindAbsoluteValidPath( rofnBinary.GetFullName( ) ); // Check whether the binary was successfully found if( !ofn1.IsOk( ) || !ofn1.FileExists( ) ) { os1 << wxT("Can't find the binary : ") << m_ofnBinary.GetFullName( ); wxGetEnv( wxT("PATH"), &os2 ); os2.Prepend( wxT("$PATH = \n") ); // Set the object error message os3 = os1 + wxT("\n\n") + os2; SetErrMsg( os3 ); // If debug mode is enabled send the error message to the console if( g_bDebug ) { os3 = os1 + wxT(" (") + os2 + wxT(")."); std::cerr << "DEBUG : " << rosStrToLine( os3 ).mb_str( ) << "\n\n"; } return( false ); } m_ofnBinary = ofn1; return( true ); } //************************************************************************************************** // Get the console output after a process has been initiated and record it in the log file. // // Return Values : // true - Success // false - Failure bool PrcBase::bLogOutput( void ) { wxOutputStream * poStdOut; wxInputStream * poStdIn; wxInputStream * poStdErr; wxString os1, os2; wxChar oc1; // Check that the log file name is valid if( ! m_ofnLog.IsOk( ) ) return( false ); // Open the file wxTextFile oFileLog( m_ofnLog.GetFullPath( ) ); if( oFileLog.Exists( ) ) { if( ! oFileLog.Open( ) ) return( false ); } else { if( ! oFileLog.Create( ) ) return( false ); } // Clear the file if it contains lines oFileLog.Clear( ); // Get pointers to the input streams poStdOut = GetOutputStream( ); poStdIn = GetInputStream( ); poStdErr = GetErrorStream( ); // Read the console input while( bIsExec( ) || poStdIn->IsOk( ) || poStdErr->IsOk( ) ) { // Get a line of data from stdout while( poStdIn->CanRead( ) ) { oc1 = poStdIn->GetC( ); if( oc1==wxT('\t') || (oc1>31 && oc1!=127) ) os1 << oc1; if( oc1 == wxT('\n') ) { oFileLog.AddLine( os1 ); os1 = wxT(""); } } // Get a line of data from stderr while( poStdErr->CanRead( ) ) { oc1 = poStdErr->GetC( ); if( oc1==wxT('\t') || (oc1>31 && oc1!=127) ) os2 << oc1; if( oc1 == wxT('\n') ) { oFileLog.AddLine( os2 ); os2 = wxT(""); } } wxYield( ); // Yield CPU to other processes } // Delete the stream objects delete poStdOut; delete poStdIn; delete poStdErr; SetPipeStreams( NULL, NULL, NULL ); if( ! os1.IsEmpty( ) ) oFileLog.AddLine( os1 ); if( ! os2.IsEmpty( ) ) oFileLog.AddLine( os2 ); oFileLog.Write( ); // Save the changes to disk oFileLog.Close( ); // Close the log file return( true ); } //************************************************************************************************** // Does the binary exist? // // Return Values : // true - The binary does exist // false - The binary doesn't exist bool PrcBase::bBinExists( void ) { if( !m_ofnBinary.IsOk( ) || !m_ofnBinary.FileExists( ) ) return( false ); return( true ); } //************************************************************************************************** // Set the file name of the binary to be executed. // // Argument List : // rosFName - A string containing the binary file name // // Return Values : // true - Success // false - Failure bool PrcBase::bSetBinary( const wxString & rosFName ) { if( rosFName.IsEmpty( ) ) return( false ); m_ofnBinary = rosFName; if( ! bFindBinary( m_ofnBinary ) ) return( false ); return( true ); } //************************************************************************************************** // Set the argument list to be appended to the binary name. // // Argument List : // rosArgLst - A string containing the argument list // // Return Values : // true - Success // false - Failure bool PrcBase::bSetArgLst( const wxString & rosArgLst ) { if( rosArgLst.IsEmpty( ) ) return( false ); m_osArgLst = rosArgLst; return( true ); } //************************************************************************************************** // Set the process log file name. // (If set all process output can be captured to this file.) // // Argument List : // rosFName - A string containing the full path and file name // // Return Values : // true - Success // false - Failure bool PrcBase::bSetLogFile( const wxString & rosFName ) { wxFileName ofn1; ofn1 = rosFName; if( ! ofn1.IsOk( ) ) return( false ); if( ofn1.GetPath( ).IsEmpty( ) ) ofn1.SetPath( wxT(".") ); m_ofnLog = ofn1; return( true ); } //************************************************************************************************** // Execute a process asynchronously. // (Ie. Return as soon as the process has been launched). // // Return Values : // true - Success // false - Failure bool PrcBase::bExecAsync( void ) { wxString os1, os2; // Only execute simulation if it isn't already running if( bIsExec( ) ) return( false ); // Clear error attributes m_osErrMsg = wxT(""); // Check that the binary exists if( ! bBinExists( ) ) if( ! bFindBinary( m_ofnBinary ) ) return( false ); // Construct the command line to be executed os1 = roGetBinary( ).GetFullPath( ); if( ! rosGetArgLst( ).IsEmpty( ) ) os1 << wxT(' ') << rosGetArgLst( ); // Attempt to execute the simulation m_iPid = (int) wxExecute( os1, wxEXEC_ASYNC, this ); if( m_iPid <= 0 ) { os2.Empty( ); os2 << wxT("Couldn't start process : ") << os1; SetErrMsg( os2 ); return( false ); } return( true ); } //************************************************************************************************** // Execute a process synchronously. // (Ie. wait for the process to terminate before returning). // // Return Values : // true - Success // false - Failure bool PrcBase::bExecSync( void ) { // Not yet implemented ??? 12/03/2010 return( false ); // long liRtn; // wxEnableTopLevelWindows( false ); // liRtn = wxExecute( rosCmd, wxEXEC_SYNC ); // wxEnableTopLevelWindows( true ); // if( liRtn != 0 ) return( false ); // return( true ); // This is how I'd like to do it but it doesn't work 20/11/2003 ??? // wxEnableTopLevelWindows( false ); // int iRtn = (int) wxExecute( osCmd, wxEXEC_SYNC ); // wxEnableTopLevelWindows( true ); // wxProcess oProcess( wxPROCESS_DEFAULT ); // iPid = (int) wxExecute( osCmd, wxEXEC_SYNC ); // if( iPid == 0 ) // { // Error gnetlist could not be executed // cerr << "The command:\n " << osCmd << "\ncould not be executed."; // return( false ); // } // for( ui1=0; ui1<300; ui1++ ) // { // Wait up to 30 seconds for the process to complete //cerr << iPid << '\n'; // wxUsleep( 100 ); // Sleep for 100msec // if( ! oProcess.Exists( iPid ) ) break; // } // if( oProcess.Exists( iPid ) ) // { // Error gnetlist had to be terminated prematurely // oProcess.Kill( iPid ); // cerr << "The command:\n " << osCmd << "\ntook more than 30 sec. to " // << "execute and so was terminated prematurely."; // return( false ); // } } //************************************************************************************************** // Stop the simulation currently in progress. // // Return Values : // true - Success // false - Failure bool PrcBase::bKill( void ) { if( ! bIsExec( ) ) return( true ); if( ! Exists( m_iPid ) ) return( true ); if( Kill( m_iPid, wxSIGTERM ) != wxKILL_OK ) return( false ); m_iPid = -1; m_iExitCode = 0; return( true ); } //************************************************************************************************** // Remove the log file. // // Return Values : // Success - true // Failure - false bool PrcBase::bDelLogFile( void ) { if( m_ofnLog.GetFullPath( ).IsEmpty( ) ) return( true ); if( ! ::wxFileExists( m_ofnLog.GetFullPath( ) ) ) return( true ); return( ::wxRemoveFile( m_ofnLog.GetFullPath( ) ) ); } //************************************************************************************************** // Collect the output from the simulator and print to a text control. // // Argument List : // roTxtCtl - The text control to contain the simulator output void PrcBase::Print( TextCtrl & roTxtCtl ) { roTxtCtl.bClear( ); // Clear the text control PrintCmd( roTxtCtl ); // Print the process command PrintRsp( roTxtCtl ); // Print the process command response } //************************************************************************************************** // Print the command envoking the process to a text control. // // Argument List : // roTxtCtl - The text control to contain process input void PrcBase::PrintCmd( TextCtrl & roTxtCtl ) { wxString os1; // Print the process command os1.Empty( ); os1 << wxT(" ") << wxT("*************** PROCESS COMMAND ***************"); roTxtCtl.bAppendLine( os1 ); os1.Empty( ); roTxtCtl.bAppendLine( os1 ); os1 << roGetBinary( ).GetFullPath( ); if( ! rosGetArgLst( ).IsEmpty( ) ) os1 << wxT(' ') << rosGetArgLst( ); roTxtCtl.bAppendLine( os1 ); os1.Empty( ); roTxtCtl.bAppendLine( os1 ); } //************************************************************************************************** // Collect the output from the process and print it to a text control. // // Argument List : // roTxtCtl - The text control to contain the simulator output void PrcBase::PrintRsp( TextCtrl & roTxtCtl ) { wxString os1; // Print the process command response if( ! m_ofnLog.GetFullPath( ).IsEmpty( ) ) { os1.Empty( ); os1 << wxT(" ") << wxT("*************** PROCESS RESPONSE **************"); roTxtCtl.bAppendLine( os1 ); os1.Empty( ); roTxtCtl.bAppendLine( os1 ); if( m_ofnLog.IsOk( ) && m_ofnLog.FileExists( ) ) roTxtCtl.bAppendFile( m_ofnLog.GetFullPath( ) ); else { os1 << wxT("Couldn't load the file containing the process ouput : ") << m_ofnLog.GetFullPath( ); roTxtCtl.bAppendLine( os1 ); } } } //************************************************************************************************** // Call-back function called when the process terminates. // (WARNING : Be careful of this function definition, if it is incorrect the // application can segment fault.) // // Argument List : // iPid - The PID of the process which just terminated // iStatus - The exit code of the process void PrcBase::OnTerminate( int iPid, int iStatus ) { if( iPid == m_iPid ) { m_iPid = -1; m_iExitCode = iStatus; } } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/base/PrcBase.hpp0000644000000000000000000000775612452504325016570 0ustar rootroot//************************************************************************************************** // PrcBase.hpp * // ------------- * // Description : Provides a wrapper for the wxProcess class adding a bit of extra desirable * // functionality. * // Started : 2004-01-29 * // Last Update : 2015-01-05 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef PRCBASE_HPP #define PRCBASE_HPP // Application Includes #include "TypeDefs.hpp" #include "utility/TextCtrl.hpp" #include "utility/StrUtils.hpp" // wxWidgets Includes #include #include #include // Local Constant Declarations #define DEF_LOG_FILE wxT("./prcbase.log") // Default log file path and name //************************************************************************************************** class PrcBase : protected wxProcess { protected : wxFileName m_ofnBinary; // The file name of the binary to be executed wxString m_osArgLst; // The argument list appended to the binary name int m_iPid; // The process ID number int m_iExitCode; // The process exit code wxFileName m_ofnLog; // The file name of the simulation log wxString m_osErrMsg; // Error message bool bFindBinary( wxFileName & rofnBinary ); bool bLogOutput ( void ); public : PrcBase( int iFlags=wxPROCESS_REDIRECT ); ~PrcBase( ); bool bBinExists( void ); bool bIsExec( void ) { return( m_iPid>0 ? true : false ); } bool bIsOk ( void ) { return( m_iExitCode==0 && m_osErrMsg.IsEmpty( ) ); } bool bSetBinary ( const wxString & rosFName ); bool bSetArgLst ( const wxString & rosArgLst ); bool bSetLogFile( const wxString & rosFName ); void SetErrMsg ( const wxString & rosErrMsg ) { if( bIsOk( ) ) m_osErrMsg = rosErrMsg; } const wxFileName & roGetBinary ( void ) { return( m_ofnBinary ); } const wxString & rosGetArgLst ( void ) { return( m_osArgLst ); } const wxFileName & roGetLogFile( void ) { return( m_ofnLog ); } const wxString & rosGetErrMsg ( void ) { return( m_osErrMsg ); } virtual bool bExecAsync( void ); virtual bool bExecSync ( void ); virtual bool bKill ( void ); bool bDelLogFile( void ); void Print ( TextCtrl & roTxtCtl ); void PrintCmd( TextCtrl & roTxtCtl ); void PrintRsp( TextCtrl & roTxtCtl ); // Event handlers void OnTerminate( int iPid, int iStatus ); }; //************************************************************************************************** #endif // PRCBASE_HPP gspiceui-1.1.00+dfsg/src/base/PnlAnaBase.cpp0000644000000000000000000004667412505764656017230 0ustar rootroot//************************************************************************************************** // PnlAnaBase.cpp * // ---------------- * // Started : 2004-04-26 * // Last Update : 2015-03-29 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "PnlAnaBase.hpp" //************************************************************************************************** // Allocate storage for static data members. Component PnlAnaBase::m_oCpntSwpSrc; //************************************************************************************************** // Implement an event table. wxBEGIN_EVENT_TABLE( PnlAnaBase, wxPanel ) EVT_CHOICE( PnlAnaBase::ID_CHO_SRCNAME, PnlAnaBase::OnSrcName ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. // // Argument List : // poWin - A pointer to the parent window PnlAnaBase::PnlAnaBase( wxWindow * poWin ) : wxPanel( poWin ) { m_eAnaType = eCMD_NONE; bClear( ); } //************************************************************************************************** // Destructor. PnlAnaBase::~PnlAnaBase( ) { } //************************************************************************************************** // Clear the object attributes back to it's initial state. // // Return Values : // true - Success // false - Failure bool PnlAnaBase::bClear( void ) { m_osErrMsg.Empty( ); // Clear the error string return( true ); } //************************************************************************************************** // Create the basic display objects. void PnlAnaBase::CreateBase( void ) { wxPanel * poPnl; // Create the sweep panel and controls #ifdef LAYOUT_MNGR poPnl = new wxPanel( this ); #else poPnl = this; #endif // LAYOUT_MNGR // Create and add sweep parameter labels #ifdef LAYOUT_MNGR m_oPnlStart.bCreate( poPnl, ID_PNL_START, 120 ); m_oPnlStop .bCreate( poPnl, ID_PNL_STOP, 120 ); m_oPnlStep .bCreate( poPnl, ID_PNL_STEP, 120 ); #else m_oSbxSwpPars.Create( poPnl, ID_UNUSED, wxT(" Sweep Parameters "), wxPoint( 6, 5 ), wxSize( 330, 167 ) ); m_oPnlStart.bCreate( poPnl, ID_PNL_START, 123, 95, 82, wxPoint( 22, 26 ) ); m_oPnlStop .bCreate( poPnl, ID_PNL_STOP, 123, 95, 82, wxPoint( 22, 56 ) ); m_oPnlStep .bCreate( poPnl, ID_PNL_STEP, 123, 95, 82, wxPoint( 22, 86 ) ); #endif // LAYOUT_MNGR m_oPnlStart.bSetName( wxT("Start Value") ); m_oPnlStop .bSetName( wxT("Stop Value") ); m_oPnlStep .bSetName( wxT("Step Increment") ); m_oSbxSwpPars.SetOwnFont( FONT_SLANT ); // Create the parameter (probe) panel and controls #ifdef LAYOUT_MNGR poPnl = new wxPanel( this ); #else poPnl = this; #endif // LAYOUT_MNGR // Create and add simulation parameter check boxes #ifdef LAYOUT_MNGR m_oCbxVoltage .Create( poPnl, ID_CBX_VOLT, wxT("Voltage") ); m_oCbxCurrent .Create( poPnl, ID_CBX_CURR, wxT("Current") ); m_oCbxPower .Create( poPnl, ID_CBX_PWR, wxT("Power") ); m_oCbxResist .Create( poPnl, ID_CBX_RES, wxT("Resistance") ); #else m_oSbxCalcPars.Create( poPnl, ID_UNUSED , wxT(" Parameters "), wxPoint( 343, 5 ), wxSize( 105, 122 ) ); m_oCbxVoltage .Create( poPnl, ID_CBX_VOLT, wxT("Voltage"), wxPoint( 349, 25 ) ); m_oCbxCurrent .Create( poPnl, ID_CBX_CURR, wxT("Current"), wxPoint( 349, 50 ) ); m_oCbxPower .Create( poPnl, ID_CBX_PWR, wxT("Power"), wxPoint( 349, 75 ) ); m_oCbxResist .Create( poPnl, ID_CBX_RES, wxT("Resistance"), wxPoint( 349, 100 ) ); #endif // LAYOUT_MNGR m_oSbxCalcPars.SetOwnFont( FONT_SLANT ); // Create and add .OPTIONS configuration dialog button #ifdef LAYOUT_MNGR m_oBtnOPTIONS.Create( this, ID_BTN_OPTIONS, wxT(".OPTIONS ...") ); #else m_oBtnOPTIONS.Create( this, ID_BTN_OPTIONS, wxT(".OPTIONS ..."), wxPoint( 343, 135 ), wxSize( 105, -1 ) ); #endif // LAYOUT_MNGR } //************************************************************************************************** // Create the scale display objects. void PnlAnaBase::CreateScale( void ) { wxPanel * poPnl; wxString osScale[]={ wxT("Lin "), wxT("Log "), wxT("Dec "), wxT("Oct ") }; // Create and add the scale radio buttons poPnl = (wxPanel *) m_oPnlStart.GetParent( ); m_oRbxSweep.Create( poPnl, ID_RBX_SCALE, wxT(" Step Scale "), wxPoint( 13, 123 ), wxSize( -1, 41 ), 4, osScale, 4 ); m_oRbxSweep.SetSelection( eSCALE_LIN ); } //************************************************************************************************** // Create the initial conditions display objects. void PnlAnaBase::CreateInitC( void ) { wxPanel * poPnl; wxString osInitC[]={ wxT("Warm "), wxT("Use ICs"), wxT("Cold ") }; // Create and add the initial conditions radio buttons poPnl = (wxPanel *) m_oPnlStart.GetParent( ); m_oRbxSweep.Create( poPnl, ID_UNUSED, wxT(" Initial Conditions "), wxPoint( 13, 123 ), wxSize( -1, 41 ), 3, osInitC, 3 ); m_oRbxSweep.SetSelection( eINITC_WARM ); } //************************************************************************************************** // Create the source component display objects. void PnlAnaBase::CreateSigSrc( void ) { wxPanel * poPnl; // Create the input source panel and controls #ifdef LAYOUT_MNGR poPnl = new wxPanel( this ); #else poPnl = this; #endif // LAYOUT_MNGR // Create and add input source #ifdef LAYOUT_MNGR m_oChoSrcName.Create( poPnl, ID_CHO_SRCNAME ); m_oPnlSrcLvl.bCreate( poPnl, ID_PNL_SRCLVL ); #else m_oSbxSigSrc .Create( poPnl, ID_UNUSED, wxT(" Signal Source "), wxPoint( 6, 178 ), wxSize( 330, 60 ) ); m_oChoSrcName.Create( poPnl, ID_CHO_SRCNAME, wxPoint( 18, 200 ), wxSize( 121, GUI_CTRL_HT ) ); m_oPnlSrcLvl.bCreate( poPnl, ID_PNL_SRCLVL, -1, 95, 82, wxPoint( 142, 200 ) ); #endif // LAYOUT_MNGR // Set static box font m_oSbxSigSrc.SetOwnFont( FONT_SLANT ); } //************************************************************************************************** // Create the simulation parameter complex part display objects. void PnlAnaBase::CreateCpxPrt( void ) { wxPanel * poPnl; // Create the parameter (probe) complex part panel and controls #ifdef LAYOUT_MNGR poPnl = new wxPanel( this ); #else poPnl = this; #endif // LAYOUT_MNGR // Create and add simulation parameter complex part check boxes #ifdef LAYOUT_MNGR m_oCbxMag .Create( poPnl, ID_CBX_MAG , wxT("Magnitude") ); m_oCbxPhase .Create( poPnl, ID_CBX_PHASE, wxT("Phase") ); m_oCbxReal .Create( poPnl, ID_CBX_REAL , wxT("Real Part") ); m_oCbxImag .Create( poPnl, ID_CBX_IMAG , wxT("Imag. Part") ); m_oCbxMagDb .Create( poPnl, ID_CBX_MAGDB, wxT("Mag. in dB") ); #else m_oSbxCpxPrt.Create( poPnl, ID_UNUSED, wxT(" Complex Parts "), wxPoint( 455, 5 ), wxSize( 110, 146 ) ); m_oCbxMag .Create( poPnl, ID_CBX_MAG, wxT("Magnitude"), wxPoint( 461, 24 ) ); m_oCbxPhase .Create( poPnl, ID_CBX_PHASE, wxT("Phase"), wxPoint( 461, 49 ) ); m_oCbxReal .Create( poPnl, ID_CBX_REAL, wxT("Real Part"), wxPoint( 461, 74 ) ); m_oCbxImag .Create( poPnl, ID_CBX_IMAG, wxT("Imag. Part"), wxPoint( 461, 99 ) ); m_oCbxMagDb .Create( poPnl, ID_CBX_MAGDB, wxT("Mag. in dB"), wxPoint( 461, 124 ) ); #endif // LAYOUT_MNGR // Set static box font m_oSbxCpxPrt.SetOwnFont( FONT_SLANT ); } //************************************************************************************************** // Create the analysis temperature display objects. void PnlAnaBase::CreateTemp( void ) { wxPanel * poPnl; // Create the temperature panel and controls #ifdef LAYOUT_MNGR poPnl = new wxPanel( this ); #else poPnl = this; #endif // LAYOUT_MNGR // Create and add analysis temperature #ifdef LAYOUT_MNGR m_oPnlTemp.bCreate( poPnl, ID_PNL_TEMP ); #else m_oSbxTemp. Create( poPnl, ID_UNUSED, wxT(" Temperature "), wxPoint( 343, 178 ), wxSize( 156, 60 ) ); m_oPnlTemp.bCreate( poPnl, ID_PNL_TEMP, 0, 95, 40, wxPoint( 353, 200 ) ); #endif // LAYOUT_MNGR // Set static box font m_oSbxTemp.SetOwnFont( FONT_SLANT ); // Set PnlValue parameters m_oPnlTemp.bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlTemp.bSetUnitsType( eUNITS_TMPC ); m_oPnlTemp.Layout( ); } //************************************************************************************************** // Layout the panel display objects. void PnlAnaBase::DoLayout( void ) { #ifndef LAYOUT_MNGR return; #endif wxWindow * poWin; wxSizer * poSzr; wxGridBagSizer * poSzrGB; wxSizerFlags oFlags; wxGBPosition oGBPosn; wxGBSpan oGBSpan; int iFlags; int iBorder; //--------------------------------------------------------------------------- // Create and set the sizer for the sweep panel poWin = m_oPnlStart.GetParent( ); poSzr = new wxStaticBoxSizer( wxVERTICAL, poWin, wxT(" Sweep Parameters ") ); poWin->SetSizer( poSzr ); // Layout the sweep panel oFlags.Align( wxALIGN_LEFT ); oFlags.Border( wxALL & ~wxBOTTOM, 3 ); poSzr->Add( &m_oPnlStart, oFlags ); poSzr->Add( &m_oPnlStop , oFlags ); poSzr->Add( &m_oPnlStep , oFlags ); poSzr->AddSpacer( 3 ); poSzr->Add( &m_oRbxSweep, oFlags ); //--------------------------------------------------------------------------- // If required create the signal source panel poWin = m_oChoSrcName.GetParent( ); if( poWin != NULL ) { // Create and set the sizer for the signal source panel poSzr = new wxStaticBoxSizer( wxHORIZONTAL, poWin, wxT(" Signal Source ") ); poWin->SetSizer( poSzr ); // Layout the signal source panel oFlags.Align( wxALIGN_LEFT ); oFlags.Border( wxALL, 3 ); poSzr->Add( &m_oChoSrcName, oFlags ); poSzr->Add( &m_oPnlSrcLvl , oFlags ); } //--------------------------------------------------------------------------- // Create and set the sizer for the parameter (probe) panel poWin = m_oCbxVoltage.GetParent( ); poSzr = new wxStaticBoxSizer( wxVERTICAL, poWin, wxT(" Parameters ") ); poWin->SetSizer( poSzr ); // Layout the parameter (probe) panel oFlags.Align( wxALIGN_LEFT ); oFlags.Border( wxALL & ~wxBOTTOM, 3 ); poSzr->Add( &m_oCbxVoltage, oFlags ); poSzr->Add( &m_oCbxCurrent, oFlags ); poSzr->Add( &m_oCbxPower , oFlags ); poSzr->Add( &m_oCbxResist , oFlags ); poSzr->AddSpacer( 3 ); //--------------------------------------------------------------------------- // If required create the complex parts panel poWin = m_oCbxMag.GetParent( ); if( poWin != NULL ) { // Create and set the sizer for the complex part panel poSzr = new wxStaticBoxSizer( wxVERTICAL, poWin, wxT(" Complex Parts ") ); poWin->SetSizer( poSzr ); // Layout the complex part panel oFlags.Align( wxALIGN_LEFT ); oFlags.Border( wxALL & ~wxBOTTOM, 3 ); poSzr->Add( &m_oCbxMag , oFlags ); poSzr->Add( &m_oCbxPhase, oFlags ); poSzr->Add( &m_oCbxReal , oFlags ); poSzr->Add( &m_oCbxImag , oFlags ); poSzr->Add( &m_oCbxMagDb, oFlags ); poSzr->AddSpacer( 3 ); } //--------------------------------------------------------------------------- // If required create the analysis temperature panel poWin = m_oPnlTemp.GetParent( ); if( poWin != NULL ) { // Create and set the sizer for the analysis temperature panel poSzr = new wxStaticBoxSizer( wxVERTICAL, poWin, wxT(" Temperature ") ); poWin->SetSizer( poSzr ); // Layout the complex part panel oFlags.Align( wxALIGN_LEFT ); oFlags.Border( wxALL, 3 ); poSzr->Add( &m_oPnlTemp, oFlags ); } //--------------------------------------------------------------------------- // Create and set the underlying panel's sizer poSzrGB = new wxGridBagSizer( 1, 1 ); SetSizer( poSzrGB ); // Add the sweep panel poWin = m_oPnlStart.GetParent( ); oGBPosn.SetCol( 0 ); oGBPosn.SetRow( 0 ); oGBSpan.SetColspan( 3 ); oGBSpan.SetRowspan( 4 ); iFlags = wxALL | wxALIGN_CENTER; iBorder = 5; poSzrGB->Add( poWin, oGBPosn, oGBSpan, iFlags, iBorder ); poWin = m_oChoSrcName.GetParent( ); if( poWin != NULL ) { // Add the signal source panel oGBPosn.SetCol( 0 ); oGBPosn.SetRow( 4 ); oGBSpan.SetColspan( 3 ); oGBSpan.SetRowspan( 1 ); iFlags = wxALL | wxALIGN_LEFT; poSzrGB->Add( poWin, oGBPosn, oGBSpan, iFlags, iBorder ); } // Add the parameter (probe) panel poWin = m_oCbxVoltage.GetParent( ); oGBPosn.SetCol( 3 ); oGBPosn.SetRow( 0 ); oGBSpan.SetColspan( 1 ); oGBSpan.SetRowspan( 3 ); poSzrGB->Add( poWin, oGBPosn, oGBSpan, iFlags, iBorder ); // Add the options button oGBPosn.SetCol( 3 ); oGBPosn.SetRow( 3 ); oGBSpan.SetColspan( 1 ); oGBSpan.SetRowspan( 1 ); iFlags = wxALL | wxALIGN_CENTER; poSzrGB->Add( &m_oBtnOPTIONS, oGBPosn, oGBSpan, iFlags, iBorder ); poWin = m_oCbxMag.GetParent( ); if( poWin != NULL ) { // Add the complex parts panel oGBPosn.SetCol( 4 ); oGBPosn.SetRow( 0 ); oGBSpan.SetColspan( 1 ); oGBSpan.SetRowspan( 4 ); poSzrGB->Add( poWin, oGBPosn, oGBSpan, iFlags, iBorder ); } poWin = m_oPnlTemp.GetParent( ); if( poWin != NULL ) { // Add the temperature panel oGBPosn.SetCol( 3 ); oGBPosn.SetRow( 4 ); oGBSpan.SetColspan( 2 ); oGBSpan.SetRowspan( 1 ); poSzrGB->Add( poWin, oGBPosn, oGBSpan, iFlags, iBorder ); } } //************************************************************************************************** // Set the state of the step scale radio box. // // Argument List : // eScale - The enumerated scale specifier // // Return Values : // Success - true // Failure - false bool PnlAnaBase::bSetScale( eTypeScale eScale ) { if( eScaleeSCALE_LST ) return( false ); #if wxCHECK_VERSION( 2,8,0 ) if( m_oRbxSweep.GetCount( ) < (uint) eScale + 1 ) return( false ); #else if( m_oRbxSweep.GetCount( ) < (int) eScale + 1 ) return( false ); #endif m_oRbxSweep.SetSelection( (int) eScale ); InitScale( ); return( true ); } //************************************************************************************************** // Set the state of the initial conditions radio box. // // Argument List : // eInitC - The enumerated initial conditions specifier // // Return Values : // Success - true // Failure - false bool PnlAnaBase::bSetInitC( eTypeInitC eInitC ) { if( eInitCeINITC_LST ) return( false ); #if wxCHECK_VERSION( 2,8,0 ) if( m_oRbxSweep.GetCount( ) < (uint) eInitC + 1 ) return( false ); #else if( m_oRbxSweep.GetCount( ) < (int) eInitC + 1 ) return( false ); #endif m_oRbxSweep.SetSelection( (int) eInitC ); return( true ); } //************************************************************************************************** // Load the source choice box with the components names which may be chosen as // a source. // // Argument List : // roSimn - A reference to an array on Component objects // osPrefix - A string containing the first letter of the desired components void PnlAnaBase::LoadSrcNames( ArrayComponent & roaCpnts, wxString osPrefixes ) { wxArrayString oasSrcs; wxString osTmpSrc; wxString os1; wxChar oc1; uint ui1; // Temporarily record the current selection osTmpSrc = m_oChoSrcName.GetStringSelection( ); // Clear the signal source choice box m_oChoSrcName.Clear( ); m_oChoSrcName.Append( wxT("None") ); // Load selected components into string array, sort and put them in the signal source choice box for( ui1=0; ui1eCMD_ANA_LST ) return( false ); m_eAnaType = eAnaType; return( true ); } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // Source component choice box event handler. // // Argument List : // roEvtCmd - An object holding information about the event void PnlAnaBase::OnSrcName( wxCommandEvent & WXUNUSED( roEvtCmd ) ) { // Set the sweep source component if( m_oChoSrcName.GetSelection( ) > 0 ) m_oCpntSwpSrc.bSetName( m_oChoSrcName.GetStringSelection( ) ); else m_oCpntSwpSrc.bClear( ); } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/base/PnlAnaBase.hpp0000644000000000000000000001376412463163254017215 0ustar rootroot//************************************************************************************************** // PnlAnaBase.hpp * // ---------------- * // Description : This class derives from the wxPanel class and provides a base class for all * // analysis panel classes. * // Started : 2004-04-26 * // Last Update : 2015-01-31 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef PNLANABASE_HPP #define PNLANABASE_HPP // Application Includes #include "TypeDefs.hpp" #include "netlist/Component.hpp" #include "utility/PnlValue.hpp" #include "utility/StrUtils.hpp" // wxWidgets Library Includes #include // Local Constant Declarations // It's bad not using a layout manager but it's how it's done at present. I've invented the // pre-processor flag "LAYOUT_MNGR" to help transition to full use of layout managers. The idea is // to switch between layout manager and hard coded layout. Ie. keep the hard coded layout code until // I'm sure the new layout manager code works. //#define LAYOUT_MNGR //************************************************************************************************** class PnlAnaBase : public wxPanel { protected : // The analysis type of the panel eTypeCmd m_eAnaType; // An array containing the signal source components ArrayComponent m_oaCpntSrcs; // Error message wxString m_osErrMsg; // Sweep settings wxStaticBox m_oSbxSwpPars; PnlValue m_oPnlStart; PnlValue m_oPnlStop; PnlValue m_oPnlStep; // Radio control used for various purposes depending on the analysis type wxRadioBox m_oRbxSweep; // Parameters to be calculated wxStaticBox m_oSbxCalcPars; wxCheckBox m_oCbxVoltage; wxCheckBox m_oCbxCurrent; wxCheckBox m_oCbxPower; wxCheckBox m_oCbxResist; // Complex Parts wxStaticBox m_oSbxCpxPrt; wxCheckBox m_oCbxMag; wxCheckBox m_oCbxPhase; wxCheckBox m_oCbxReal; wxCheckBox m_oCbxImag; wxCheckBox m_oCbxMagDb; // Input signal source, value and units wxStaticBox m_oSbxSigSrc; wxChoice m_oChoSrcName; PnlValue m_oPnlSrcLvl; // .OPTIONS configuration dialog button wxButton m_oBtnOPTIONS; // Analysis temperature wxStaticBox m_oSbxTemp; PnlValue m_oPnlTemp; // Functions to create the display objects virtual void CreateBase ( void ); virtual void CreateScale ( void ); virtual void CreateInitC ( void ); virtual void CreateSigSrc( void ); virtual void CreateCpxPrt( void ); virtual void CreateTemp ( void ); virtual void DoLayout( void ); virtual void InitScale( void ) { } virtual bool bSetScale( eTypeScale eScale ); bool bSetInitC ( eTypeInitC eInitC ); void LoadSrcNames( ArrayComponent & roaCpnts, wxString osPrefixes ); bool bSetSrcCpnt ( Component & roCpnt ); void ToolTips ( void ); // ??? Not yet implemented public : // The last sweep source selected by the user static Component m_oCpntSwpSrc; PnlAnaBase( wxWindow * poWin ); ~PnlAnaBase( ); virtual bool bClear( void ); bool bIsOk( void ) { return( m_osErrMsg.IsEmpty( ) ); } bool bSetAnalysType( eTypeCmd eAnaType ); eTypeCmd eGetAnalysType( void ) { return( m_eAnaType ); } // Get or set the error message const wxString & rosGetErrMsg( void ) { return( m_osErrMsg ); } void SetErrMsg( const wxString & rosErrMsg ) { if( bIsOk( ) ) m_osErrMsg = rosErrMsg; } // Event handlers void OnSrcName( wxCommandEvent & roEvtCmd ); friend class NbkSimrBase; friend class NbkGnuCap; friend class NbkNgSpice; // In order to be able to react to a menu command, it must be given a // unique identifier such as a const or an enum. enum ePnlItemID { ID_PNL_START = 1, ID_PNL_STOP, ID_PNL_STEP, ID_RBX_SWEEP, ID_RBX_SCALE, ID_RBX_INITC, ID_CHO_SRCNAME, ID_PNL_SRCLVL, ID_CBX_MAG, ID_CBX_PHASE, ID_CBX_REAL, ID_CBX_IMAG, ID_CBX_MAGDB, ID_CBX_VOLT, ID_CBX_CURR, ID_CBX_PWR, ID_CBX_RES, ID_BTN_OPTIONS, ID_PNL_TEMP, ID_UNUSED, // Assigned to controls for which events are not used ID_FST = ID_PNL_START, ID_LST = ID_PNL_TEMP }; // Leave this as the last line as private access is envoked by macro wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // PNLANABASE_HPP gspiceui-1.1.00+dfsg/src/base/UnitsBase.hpp0000644000000000000000000000525512456733455017152 0ustar rootroot//************************************************************************************************** // UnitsBase.hpp * // --------------- * // * // Description : This is the base class for controls which display units. * // Started : 2014-03-08 * // Last Update : 2015-01-18 * // Copyright : (C) 2014 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef UNITSBASE_HPP #define UNITSBASE_HPP // Application Includes #include "TypeDefs.hpp" #include "utility/CnvtType.hpp" //************************************************************************************************** class UnitsBase { protected : UnitsBase( void ); ~UnitsBase( ); public : virtual bool bIsCreated( void ) = 0; virtual const wxString & rosGetUnits( void ) = 0; virtual int iGetUnits( void ) = 0; // Take a value and return it combined with the currently selected units long liGetValue( double dfValue ); double dfGetValue( double dfValue ); const wxString & rosGetValue( double dfValue, int iRes=2 ); // Static helper functions (may be called without instantiating the class) static bool bGetUnitsType( eTypeUnits eUType, wxString & rosUnits ); static bool bGetUnitsType( const wxString & rosUnits, eTypeUnits * peUType ); }; //************************************************************************************************** #endif // UNITSBASE_HPP gspiceui-1.1.00+dfsg/src/base/NbkSimEngBase.cpp0000644000000000000000000001131412463545455017650 0ustar rootroot//************************************************************************************************** // NbkSimEngBase.cpp * // ------------------- * // Started : 2004-05-05 * // Last Update : 2015-02-02 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "NbkSimEngBase.hpp" //************************************************************************************************** // Allocate storage for static data members. // eTypeUnits NbkSimEngBase::m_eUnitsTemp = eUNITS_TMPC; // ??? MSW 2015-02-02 eTypeUnits NbkSimEngBase::m_eUnitsPhase = eUNITS_PHAD; bool NbkSimEngBase::m_bSyncSwpSrcs = false; //************************************************************************************************** // Implement an event table. wxBEGIN_EVENT_TABLE( NbkSimEngBase, wxNotebook ) EVT_NOTEBOOK_PAGE_CHANGED( -1, NbkSimEngBase::OnPageChangd ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. // // Arguments: // poParent - The parent window // oWinID - The display object ID // roPosn - The notebook position // roSize - The notebook size NbkSimEngBase::NbkSimEngBase( wxWindow * poParent, wxWindowID oWinID ) : wxNotebook( poParent, oWinID ) { // Set the simulator engine type specifier m_eSimEng = eSIMR_NONE; } //************************************************************************************************** // Default constructor. // (Used for two stage creation ie. must call Create( ) method. NbkSimEngBase::NbkSimEngBase( void ) : wxNotebook( ) { m_eSimEng = eSIMR_NONE; } //************************************************************************************************** // Destructor. NbkSimEngBase::~NbkSimEngBase( ) { } //************************************************************************************************** // Clear the object attributes. // // Return Values : // true - Success // false - Failure bool NbkSimEngBase::bClear( void ) { m_osErrMsg.Empty( ); // Clear the error string return( true ); } //************************************************************************************************** // Set the temperature units to be used. // // Argument List : // eUnits - The temperature units // // Return Values : // true - Success // false - Failure /* ??? MSW 2015-02-02 bool NbkSimEngBase::bSetUnitsTemp( eTypeUnits eUnits ) { if( eUnits!=eUNITS_TMPC && eUnits!=eUNITS_TMPF ) return( false ); m_eUnitsTemp = eUnits; return( true ); } */ //************************************************************************************************** // Set the phase angle units to be used. // // Argument List : // eUnits - The phase angle units // // Return Values : // true - Success // false - Failure bool NbkSimEngBase::bSetUnitsPhase( eTypeUnits eUnits ) { if( eUnits!=eUNITS_PHAD && eUnits!=eUNITS_PHAR ) return( false ); m_eUnitsPhase = eUnits; return( true ); } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // This event is generated when a notebook page has just changed. // // Argument List: // roEvtNbk - An object holding information about the event void NbkSimEngBase::OnPageChangd( wxNotebookEvent & WXUNUSED( roEvtNbk ) ) { } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/base/PrcSimEngBase.cpp0000644000000000000000000001652612444033055017657 0ustar rootroot//************************************************************************************************** // PrcSimEngBase.cpp * // ------------------- * // Started : 2004-04-25 * // Last Update : 2014-12-17 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "PrcSimEngBase.hpp" //************************************************************************************************** // Constructor. PrcSimEngBase::PrcSimEngBase( void ) : PrcBase( wxPROCESS_REDIRECT ) { m_eSimEng = eSIMR_NONE; } //************************************************************************************************** // Destructor. PrcSimEngBase::~PrcSimEngBase( ) { } //************************************************************************************************** // Set the simulation results file name. // // Argument List : // rosFName - A string containing the full path and file name // // Return Values : // true - Success // false - Failure bool PrcSimEngBase::bSetResultsFile( const wxString & rosFName ) { wxFileName ofn1; ofn1 = rosFName; if( ofn1.GetPath( ).IsEmpty( ) ) ofn1.SetPath( wxT(".") ); if( ! ofn1.IsOk( ) ) return( false ); m_ofnResults = ofn1; return( true ); } //************************************************************************************************** // Save the console output to file. // // Argument List : // rosFName - The save file name // // Return Values : // true - Success // false - Failure bool PrcSimEngBase::bSaveOutput( const wxString & rosFName ) { wxOutputStream * poStdOut; wxInputStream * poStdIn; wxInputStream * poStdErr; wxFileName ofn1; wxString os1, os2; wxChar oc1; // Check the validity of the save file name if( rosFName.IsEmpty( ) ) return( false ); ofn1 = rosFName; if( ! ofn1.IsOk( ) ) return( false ); // Open the file wxTextFile oFileCct( ofn1.GetFullPath( ) ); if( oFileCct.Exists( ) ) { if( ! oFileCct.Open( ) ) return( false ); } else { if( ! oFileCct.Create( ) ) return( false ); } // Clear the file if it contains lines oFileCct.Clear( ); wxMicroSleep( 100 ); // 23/03/2011 ??? What's this for? // Get input stream objects to standard out and standard error poStdOut = GetOutputStream( ); poStdIn = GetInputStream( ); poStdErr = GetErrorStream( ); // Save the simulator output to file while( bIsExec( ) || poStdIn->CanRead( ) || poStdErr->CanRead( ) ) { // Input characters from stdout while( poStdIn->CanRead( ) ) { // Get a character from the input stream oc1 = poStdIn->GetC( ); // Build each string if( oc1==wxT('\t') || (oc1>31 && oc1!=127) ) os1 << oc1; // Append completed strings to the log file if( oc1 == wxT('\n') ) { oFileCct.AddLine( os1 ); os1 = wxT(""); } } // Input characters from stderr while( poStdErr->CanRead( ) ) { // Get a character from the input stream oc1 = poStdErr->GetC( ); // Build each string if( oc1==wxT('\t') || (oc1>31 && oc1!=127) ) os2 << oc1; // Append completed strings to the log file if( oc1 == wxT('\n') ) { oFileCct.AddLine( os2 ); os2 = wxT(""); } } // Release the processor for other tasks wxTheApp->Yield( ); } // Delete the stream objects delete poStdOut; delete poStdIn; delete poStdErr; SetPipeStreams( NULL, NULL, NULL ); // Save any unterminated strings if( os1.Length( ) > 0 ) oFileCct.AddLine( os1 ); if( os2.Length( ) > 0 ) oFileCct.AddLine( os2 ); oFileCct.AddLine( wxT("") ); oFileCct.Write( ); // Save the changes to disk oFileCct.Close( ); // Close the results file return( true ); } //************************************************************************************************** // Make the process argument list based on the contents of a simulation object. // // Argument List : // roSimn - The simulation object // // Return Values : // true - Success // false - Failure bool PrcSimEngBase::bMakeArgLst( SimnBase & roSimn ) { wxString os1; int i1; // Clear error attributes m_osErrMsg.Empty( ); // Only proceed if the simulator isn't already running if( bIsExec( ) ) { SetErrMsg( wxT("Simulator already running") ); return( false ); } // Create the results file name os1 = roSimn.roGetLoadFile( ).GetPath( ) + wxT('/') + roSimn.roGetLoadFile( ).GetName( ); i1 = os1.Find( wxT(".gspiceui") ); if( i1 > 0 ) os1 = os1.Truncate( (size_t) i1 ); os1 << wxT('.') << roGetBinary( ).GetName( ); switch( roSimn.eGetAnaType( ) ) { case eCMD_OP : os1 << wxT(".op"); break; case eCMD_DC : os1 << wxT(".dc"); break; case eCMD_AC : os1 << wxT(".ac"); break; case eCMD_TR : os1 << wxT(".tr"); break; case eCMD_FO : os1 << wxT(".fo"); break; case eCMD_DI : os1 << wxT(".di"); break; case eCMD_NO : os1 << wxT(".no"); break; case eCMD_PZ : os1 << wxT(".pz"); break; case eCMD_SE : os1 << wxT(".se"); break; case eCMD_TF : os1 << wxT(".tf"); break; default : return( false ); } // Set the results file name if( ! PrcSimEngBase::bSetResultsFile( os1 ) ) { SetErrMsg( wxT("Couldn't set results file name") ); return( false ); } // Construct the default argument list os1 = roSimn.roGetSaveFile( ).GetFullPath( ); if( ! bSetArgLst( os1 ) ) { SetErrMsg( wxT("Couldn't set argument list") ); return( false ); } return( true ); } //************************************************************************************************** // Execute a simulation. // // Argument List : // roSimn - The simulation object // // Return Values : // true - Success // false - Failure bool PrcSimEngBase::bExec( void ) { wxString os1, os2; // Execute the simulation if( ! PrcBase::bExecAsync( ) ) return( false ); // Save the simulation results to the log file os1 = roGetLogFile( ).GetFullPath( ); if( ! bSaveOutput( os1 ) ) return( false ); // Copy the log file to the results file os2 = roGetResultsFile( ).GetFullPath( ); if( ! wxCopyFile( os1, os2 ) ) return( false ); return( true ); } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/base/SimnBase.cpp0000644000000000000000000002077512511360366016742 0ustar rootroot//************************************************************************************************** // SimnBase.cpp * // -------------- * // Started : 2008-05-01 * // Last Update : 2015-04-08 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "SimnBase.hpp" //************************************************************************************************** // Constructor. SimnBase::SimnBase( void ) { m_eSimEng = eSIMR_NONE; // Initialize all object attributes bClear( ); } //************************************************************************************************** // Destructor. SimnBase::~SimnBase( ) { } //************************************************************************************************** // Extract the source component. // // Several tasks are performed here : // - Search for a component which is being used as a signal source. // - Extract the source component's original definition. // - Set the attribute m_oCpntSwpSrc to the source component definition. // - Set the component in m_oaCpnts to it's original definition. // // Return Values : // true - Success // false - Failure bool SimnBase::bLoadSigSrc( void ) { Component oCpnt; wxString os1; size_t sz1; // Scan the circuit description for a source component for( sz1=0; sz1eSIMR_FST ) { SetErrMsg( wxT("No simulation engine has been specified.") ); return( false ); } if( eGetAnaType( )eCMD_ANA_LST ) { SetErrMsg( wxT("No analysis type has been specified.") ); return( false ); } // Have any test components or test nodes been specified? if( rosaGetTstNodes( ).GetCount( )<=0 || rosaGetTstCpnts( ).GetCount( )<=0 ) { SetErrMsg( wxT("No nodes or components have been selected.") ); return( false ); } return( true ); } //************************************************************************************************** // Load the simulation information from the netlist string array into the object attributes. // // Return Values : // true - Success // false - Failure bool SimnBase::bLoad( void ) { // Envoke the base class load operations if( ! NetList::bLoad( ) ) return( false ); // Check for a simulator signifier if( ! bLoadSimEng( ) ) return( false ); // Extract the simulator instructions bLoadSimCmds( ); bLoadSigSrc ( ); return( true ); } //************************************************************************************************** // Save the simulation information to the netlist string array from the object attributes. // // Return Values : // true - Success // false - Failure bool SimnBase::bSave( void ) { // Envoke the base class save operations if( ! NetList::bSave( ) ) return( false ); // Save the signal source to the simulation file if( ! bSaveSigSrc( ) ) return( false ); return( true ); } //************************************************************************************************** // Copy the contents of a SimnBase object. // // Argument List : // roSimn - A reference to a SimnBase object // // Return Values : // A reference to this object SimnBase & SimnBase::operator = ( const SimnBase & roSimn ) { m_oCpntSwpSrc = roSimn.m_oCpntSwpSrc; return( *this ); } //************************************************************************************************** // Print the object attributes. // // Argument List : // rosPrefix - A prefix to every line displayed (usually just spaces) void SimnBase::Print( const wxString & rosPrefix ) { NetList::Print( rosPrefix + wxT("NetList::") ); std::cout << rosPrefix.mb_str( ) << "m_eSimEng : "; switch( m_eSimEng ) { case eSIMR_GNUCAP : std::cout << "eSIMR_GNUCAP"; break; case eSIMR_NGSPICE : std::cout << "eSIMR_NGSPICE"; break; case eSIMR_NONE : std::cout << "eSIMR_NONE"; break; } std::cout << '\n'; std::cout << rosPrefix .mb_str( ) << "m_osErrMsg : " << m_osErrMsg.mb_str( ) << '\n'; m_oCpntSwpSrc.Print( rosPrefix + wxT("m_oCpntSwpSrc::") ); } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/base/CmdBase.hpp0000644000000000000000000000600612502513767016540 0ustar rootroot//************************************************************************************************** // CmdBase.hpp * // ------------- * // Description : This is the base class for all command classes. It has some characteristics of * // structure in that some attributes have public access; this simplifies the class * // interface. * // Started : 2006-08-31 * // Last Update : 2015-03-19 * // Copyright : (C) 2006 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef CMDBASE_HPP #define CMDBASE_HPP // Application Includes #include "TypeDefs.hpp" //************************************************************************************************** class CmdBase : public wxString { protected : eTypeSimEng m_eSimEng; eTypeCmd m_eCmdType; wxString m_osErrMsg; virtual bool bValidate( void ); public : CmdBase( void ); virtual ~CmdBase( ); virtual bool bSetDefaults( void ); bool bIsValid ( void ) { return( m_osErrMsg.IsEmpty( ) ); } virtual bool bParse ( void ) = 0; virtual bool bFormat( void ) = 0; bool bSetString( wxString & ros ); eTypeSimEng eGetSimEng ( void ) { return( m_eSimEng ); } eTypeCmd eGetCmdType( void ) { return( m_eCmdType ); } const wxString & rosGetErrMsg ( void ) { return( m_osErrMsg ); } void SetErrMsg( const wxString & rosErrMsg ) { if( bIsValid( ) ) m_osErrMsg = rosErrMsg; } virtual CmdBase & operator = ( const CmdBase & roCmd ); virtual void Print( const wxString & rosPrefix=wxT("") ); }; //************************************************************************************************** #endif // CMDBASE_HPP gspiceui-1.1.00+dfsg/src/base/UnitsBase.cpp0000644000000000000000000002401212456735600017127 0ustar rootroot//************************************************************************************************** // UnitsBase.cpp * // --------------- * // Started : 2014-03-08 * // Last Update : 2015-01-18 * // Copyright : (C) 2014 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "UnitsBase.hpp" //************************************************************************************************** // Constructor. UnitsBase::UnitsBase( void ) { } //************************************************************************************************** // Destructor. UnitsBase::~UnitsBase( ) { } //************************************************************************************************** // Combine a value with it's units to produce the equivalent long value. // // Argument List : // dfValue - The float value // // Return Values : // Success - The value combined with the units as a long // Failure - NOVAL_LONG long UnitsBase::liGetValue( double dfValue ) { double df1; long li1; df1 = dfGetValue( dfValue ); if( df1 == NOVAL_DBL ) return( NOVAL_LNG ); if( df1<(double)-LONG_MAX || df1>(double)LONG_MAX ) return( NOVAL_LNG ); li1 = lround( df1 ); return( li1 ); } //************************************************************************************************** // Combine a value with it's units to produce a single value. // // Argument List : // dfValue - The float value // // Return Values : // Success - The value combined with the units as a double // Failure - NOVAL_DBL double UnitsBase::dfGetValue( double dfValue ) { wxString os1; double df1; int i1; if( ! bIsCreated( ) ) return( NOVAL_DBL ); if( dfValue == 0.0 ) return( 0.0 ); i1 = iGetUnits( ); if( i1 == NOVAL_INT ) return( NOVAL_DBL ); df1 = dfValue; if( i1 != 0 ) df1 *= EXP10( (double) i1 ); return( df1 ); } //************************************************************************************************** // Combine a value with it's units to produce the equivalent string value. // // Argument List : // dfValue - The float value // iRes - The resolution (ie. how many digits after the decimal point) // // Return Values : // Success - The string containing the engineering format // Failure - An empty string const wxString & UnitsBase::rosGetValue( double dfValue, int iRes ) { static wxString osValue; wxString osFmt, os1; wxChar oc1; int i1; osValue.Empty( ); if( ! bIsCreated( ) ) return( osValue ); // Create the format string and convert fValue to a string osFmt = wxString::Format( wxT("%%#.%if"), iRes ); if( os1.Printf( osFmt, dfValue ) < 0 ) return( osValue ); osValue = os1; // Add the units to the float value os1 = rosGetUnits( ); if( ! os1.IsEmpty( ) ) { oc1 = os1.GetChar( 0 ); os1.MakeLower( ); if( os1.StartsWith( wxT("micro") ) ) osValue << wxT('u'); else if( os1.StartsWith( wxT("x 1") ) ) { i1 = iGetUnits( ); if( CnvtType::bUnitExpToPfx( i1, &oc1 ) ) osValue << oc1; } else if( os1.StartsWith( wxT("metre") ) ) ; // Do nothing else { if( CnvtType::bUnitPfxToExp( oc1, &i1 ) ) osValue << oc1; if( oc1 == wxT('M') ) osValue << wxT("EG"); } } return( osValue ); } //************************************************************************************************** // Return the units string associated with a units enumerated type specifier. // // (Eg. eUNITS_RES returns "Ohm".) // // Argument List : // eUType - the units enumerated type // rosUnits - the units string // // Return Values : // true - Success // false - Failure bool UnitsBase::bGetUnitsType( eTypeUnits eUType, wxString & rosUnits ) { switch( eUType ) { case eUNITS_CAP : // Capacitance rosUnits = wxT("F"); break; case eUNITS_IND : // Inductance rosUnits = wxT("H"); break; case eUNITS_RES : // Resistance rosUnits = wxT("Ohm"); break; case eUNITS_COND : // Conductance rosUnits = wxT("S"); break; case eUNITS_VOLT : // Voltage rosUnits = wxT("V"); break; case eUNITS_CURR : // Current rosUnits = wxT("A"); break; case eUNITS_TIME : // Time rosUnits = wxT("Sec"); break; case eUNITS_FREQ : // Frequency rosUnits = wxT("Hz"); break; case eUNITS_CHRG : // Charge rosUnits = wxT("C"); break; case eUNITS_PHAD : // Phase / angle in Degree rosUnits = wxT("Degree"); break; case eUNITS_PHAR : // Phase / angle in Radian rosUnits = wxT("Radian"); break; case eUNITS_TMPC : // Temperature in Celcius rosUnits = wxT("Deg.C"); break; case eUNITS_TMPF : // Temperature in Fahrenheit rosUnits = wxT("Deg.F"); break; case eUNITS_EXP : // Dimensionless (append an exponent) case eUNITS_NONE : // No units specified rosUnits = wxT(""); break; default : // No associated units return( false ); } return( true ); } //************************************************************************************************** // Attempt to determine the units type from a string. // // Eg. 34.0mVolt produces the units type of eUNITS_VOLT. // // Note : This function will not cope multi-character units prefixes eg. milliVolt would fail. // // Argument List : // rosUnits - the string containing a units specifier // peUType - the returned enumerated units type // // Return Values : // true - Success // false - Failure bool UnitsBase::bGetUnitsType( const wxString & rosUnits, eTypeUnits * peUType ) { wxString os1, os2; wxChar oc1, oc2; size_t sz1; int i1; // Set the default units type value *peUType = eUNITS_NONE; // Extract everything after the numeric value including any units prefix sz1 = rosUnits.find_first_not_of( wxT(" .-+0123456789Ee") ); if( sz1 == std::string::npos ) return( false ); if( CnvtType::bUnitPfxToExp( rosUnits[ sz1 ], &i1 ) ) sz1++; if( sz1 >= rosUnits.length( ) ) return( false ); os1 = rosUnits.Mid( sz1 ).Upper( ); // Now attempt to determine the units type switch( (char) os1.GetChar( 0 ) ) { case wxT('A') : if( os1.length( ) > 1 ) if( ! os1.StartsWith( wxT("AMP") ) ) return( false ); *peUType = eUNITS_CURR; // Current (A or Amp) break; case wxT('C') : if( os1.length( ) > 1 ) if( ! os1.StartsWith( wxT("COULOMB") ) ) return( false ); *peUType = eUNITS_CHRG; // Current (A or Amp) break; case wxT('D') : if( ! os1.StartsWith( wxT("DEG") ) ) return( false ); oc1 = oc2 = 0; if( os1.length( ) >= 4 ) oc1 = os1.GetChar( 3 ); if( os1.length( ) >= 5 ) oc2 = os1.GetChar( 4 ); if( oc1==wxT('C') || oc2==wxT('C') ) *peUType = eUNITS_TMPC; // Temperature (DegC or Deg C or Deg.C) else if( oc1==wxT('F') || oc2==wxT('F') ) *peUType = eUNITS_TMPF; // Temperature (DegF or Deg F or Deg.F) else *peUType = eUNITS_PHAD; // Phase / angle (Deg) break; case wxT('F') : if( os1.length( ) > 1 ) if( ! os1.StartsWith( wxT("FARAD") ) ) return( false ); *peUType = eUNITS_CAP; // Capacitance (F or Farad) break; case wxT('H') : // Inductance (H or Henry) or Frequency (Hz or Hertz) if( os1.length( )==1 || os1.StartsWith( wxT("HENRY") ) ) *peUType = eUNITS_IND; else if( os1.GetChar( 1 )==wxT('Z') || os1.StartsWith( wxT("HERTZ") ) ) *peUType = eUNITS_FREQ; else return( false ); break; case wxT('O') : if( os1.StartsWith( wxT("OHM") ) ) *peUType = eUNITS_RES; // Resistance (Ohm) else return( false ); break; case wxT('S') : // Conductance (S or Siemen) or Time (s or Sec) if( os1.length( ) == 1 ) { if( rosUnits.GetChar( sz1 ) == wxT('s') ) *peUType = eUNITS_TIME; else *peUType = eUNITS_COND; } else if( os1.StartsWith( wxT("SEC") ) ) *peUType = eUNITS_TIME; else if( os1.StartsWith( wxT("SIEMEN") ) ) *peUType = eUNITS_COND; else return( false ); break; case wxT('R') : if( ! os1.StartsWith( wxT("RAD") ) ) return( false ); *peUType = eUNITS_PHAR; // Phase / angle (Rad) case wxT('V') : if( os1.length( ) > 1 ) if( ! os1.StartsWith( wxT("VOLT") ) ) return( false ); *peUType = eUNITS_VOLT; // Voltage (V or Volt) break; default : return( false ); } return( true ); } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/base/PrcSimEngBase.hpp0000644000000000000000000000571012452504325017657 0ustar rootroot//************************************************************************************************** // PrcSimEngBase.hpp * // ------------------- * // Description : This is the base class for classes which provide the interface to the SPICE * // circuit simulator. * // Started : 2004-04-25 * // Last Update : 2015-01-05 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef PRCSIMENGBASE_HPP #define PRCSIMENGBASE_HPP // Application Includes #include "TypeDefs.hpp" #include "base/PrcBase.hpp" #include "base/SimnBase.hpp" #include "netlist/NetList.hpp" //************************************************************************************************** class PrcSimEngBase : public PrcBase { protected : eTypeSimEng m_eSimEng; // Simulation engine specifier wxFileName m_ofnResults; // The file name of the process output wxTextFile m_oFileResults; // A text file object for the above // Save the console output to file bool bSaveOutput( const wxString & rosFName ); bool bErrorCheck( const wxString & rosFName ); public : PrcSimEngBase( void ); ~PrcSimEngBase( ); bool bSetResultsFile( const wxString & rosFName ); eTypeSimEng eGetSimEng ( void ) { return( m_eSimEng ); } const wxFileName & roGetResultsFile( void ) { return( m_ofnResults ); } // Create the process argument list virtual bool bMakeArgLst( SimnBase & roSimn ); // Execute the simulation virtual bool bExec( void ); // Format the results file virtual bool bFmtResults( void ) = 0; }; //************************************************************************************************** #endif // PRCSIMENGBASE_HPP gspiceui-1.1.00+dfsg/src/base/SimnBase.hpp0000644000000000000000000000724312511365141016736 0ustar rootroot//************************************************************************************************** // SimnBase.hpp * // -------------- * // Description : This class is the base class for all simulation classes. * // Started : 2008-05-01 * // Last Update : 2015-04-09 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef SIMNBASE_HPP #define SIMNBASE_HPP // Application Includes #include "TypeDefs.hpp" #include "CmdBase.hpp" #include "netlist/NetList.hpp" #include "utility/CnvtType.hpp" //************************************************************************************************** class SimnBase : public NetList { protected : // Attribute to identify the simulation engine type eTypeSimEng m_eSimEng; // Error message generated by bValidate( ) wxString m_osErrMsg; // Function to extract information from the circuit description virtual bool bLoadSimEng ( void ) = 0; virtual bool bLoadSimCmds( void ) = 0; virtual bool bLoadSigSrc ( void ); // Functions to save the circuit description to file bool bSaveSigSrc ( void ); public : // The signal source component Component m_oCpntSwpSrc; SimnBase( void ); virtual ~SimnBase( ); virtual bool bClear ( void ); virtual bool bClrCmds ( void ) = 0; virtual bool bClrTstPts ( void ) = 0; virtual bool bValidate ( void ); virtual bool bIsValid ( void ) { return( NetList::bIsValid( ) && m_osErrMsg.IsEmpty( ) ); } virtual bool bLoad ( void ); virtual bool bSave ( void ); virtual bool bSetAnaType( eTypeCmd eAnaType ) = 0; void SetErrMsg ( const wxString & rosErrMsg ) { if(bIsValid()) m_osErrMsg=rosErrMsg;} virtual bool bAddTstNode( const wxString & rosNode ) = 0; virtual bool bAddTstCpnt( const wxString & rosCpnt ) = 0; eTypeSimEng eGetSimEng ( void ) const { return( m_eSimEng ); } virtual eTypeCmd eGetAnaType ( void ) const = 0; virtual const wxArrayString & rosaGetTstNodes( void ) const = 0; virtual const wxArrayString & rosaGetTstCpnts( void ) const = 0; const wxString & rosGetErrMsg ( void ) const { return( m_osErrMsg ); } SimnBase & operator = ( const SimnBase & roSimn ); virtual void Print( const wxString & rosPrefix=wxT(" ") ); }; //************************************************************************************************** #endif // SIMNBASE_HPP gspiceui-1.1.00+dfsg/src/base/CmdBase.cpp0000644000000000000000000001367012475502632016536 0ustar rootroot//************************************************************************************************** // CmdBase.cpp * // ------------- * // Started : 2006-08-31 * // Last Update : 2015-03-04 * // Copyright : (C) 2006 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "CmdBase.hpp" //************************************************************************************************** // Constructor. CmdBase::CmdBase( void ) : wxString( wxT("") ) { bSetDefaults( ); } //************************************************************************************************** // Destructor. CmdBase::~CmdBase( ) { } //************************************************************************************************** // Set the object attributes to their default values. // // Return Values : // true - Success // false - Failure bool CmdBase::bSetDefaults( void ) { wxString::Empty( ); m_osErrMsg = wxT("Invalid"); m_eSimEng = eSIMR_NONE; m_eCmdType = eCMD_NONE; return( true ); } //************************************************************************************************** // Check that the object attributes are valid. // // Return Values : // true - Success // false - Failure bool CmdBase::bValidate( void ) { m_osErrMsg.Empty( ); if( IsEmpty( ) ) SetErrMsg( wxT("The command is empty") ); if( m_eSimEng == eSIMR_NONE ) SetErrMsg( wxT("The command has no simulator engine") ); if( m_eCmdType == eCMD_NONE ) SetErrMsg( wxT("The command has no type") ); return( bIsValid( ) ); } //************************************************************************************************** // Set the command based on a complete command string. // // Argument List : // rosCmd - A reference to a wxString object // // Return Values : // true - Success // false - Failure bool CmdBase::bSetString( wxString & ros ) { bSetDefaults( ); assign( ros ); bParse( ); return( true ); } //************************************************************************************************** // Copy the contents of another CmdBase object. // // Argument List : // roCmd - A reference to a CmdBase object // // Return Values : // A reference to this object CmdBase & CmdBase::operator = ( const CmdBase & roCmd ) { // Copy the command string (wxString &) *this = (wxString &) roCmd; // Once these attributes are set they won't change if( m_eSimEng == eSIMR_NONE ) m_eSimEng = roCmd.m_eSimEng; if( m_eCmdType == eCMD_NONE ) m_eCmdType = roCmd.m_eCmdType; // Copy the any error message m_osErrMsg = roCmd.m_osErrMsg; return( *this ); } //************************************************************************************************** // Print the object attributes. // // Argument List : // rosPrefix - A prefix to every line displayed (usually just spaces) void CmdBase::Print( const wxString & rosPrefix ) { std::cout << rosPrefix .mb_str( ) << "wxString : \"" << this ->mb_str( ) << "\"\n"; std::cout << rosPrefix .mb_str( ) << "m_osErrMsg : \"" << m_osErrMsg.mb_str( ) << "\"\n"; std::cout << rosPrefix .mb_str( ) << "m_eSimEng : "; switch( m_eSimEng ) { case eSIMR_GNUCAP : std::cout << "eSIMR_GNUCAP"; break; case eSIMR_NGSPICE : std::cout << "eSIMR_NGSPICE"; break; case eSIMR_NONE : std::cout << "eSIMR_NONE"; break; default : std::cout << "Invalid"; break; } std::cout << '\n'; std::cout << rosPrefix .mb_str( ) << "m_eCmdType : "; switch( m_eCmdType ) { case eCMD_OP : std::cout << "eANA_OP"; break; // Operating point analysis case eCMD_DC : std::cout << "eANA_DC"; break; // DC analysis case eCMD_AC : std::cout << "eANA_AC"; break; // AC analysis case eCMD_TR : std::cout << "eANA_TR"; break; // Transient analysis case eCMD_FO : std::cout << "eANA_FO"; break; // Fourier analysis case eCMD_DI : std::cout << "eANA_DI"; break; // Distortion analysis case eCMD_NO : std::cout << "eANA_NO"; break; // Noise analysis case eCMD_PZ : std::cout << "eANA_PZ"; break; // Pole-zero analysis case eCMD_SE : std::cout << "eANA_SE"; break; // Sensitivity analysis case eCMD_TF : std::cout << "eANA_TF"; break; // Transfer function analysis case eCMD_OPT : std::cout << "eCMD_OPT"; break; // Options command case eCMD_IC : std::cout << "eCMD_IC"; break; // Initial conditions command case eCMD_PR : std::cout << "eCMD_PR"; break; // Print command case eCMD_GEN : std::cout << "eCMD_GEN"; break; // Generator command case eCMD_NONE : std::cout << "eANA_NONE"; break; // Command type not set default : std::cout << "Invalid"; break; // Command type is invalid } std::cout << '\n'; } //************************************************************************************************** gspiceui-1.1.00+dfsg/src/base/NbkSimEngBase.hpp0000644000000000000000000001036212463545524017654 0ustar rootroot//************************************************************************************************** // NbkSimEngBase.hpp * // ------------------- * // Description : Base class for all simulator notebooks. These notebook are intended to contain * // the individual analysis panels. * // Started : 2004-05-05 * // Last Update : 2015-02-02 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef NBKSIMENGBASE_HPP #define NBKSIMENGBASE_HPP // Application Includes #include "TypeDefs.hpp" #include "netlist/NetList.hpp" #include "base/SimnBase.hpp" #include "base/PnlAnaBase.hpp" // wxWidgets Includes #include // Local Constant Declarations #define NBKSIMENG_WIDTH 572 #define NBKSIMENG_HEIGHT 272 //************************************************************************************************** class NbkSimEngBase : public wxNotebook { protected : // Error message wxString m_osErrMsg; // Attribute to identify the simulation engine type eTypeSimEng m_eSimEng; // Enumerated type specifying the default temperature and phase units // static eTypeUnits m_eUnitsTemp; // ??? MSW 2015-02-02 static eTypeUnits m_eUnitsPhase; // Flag to enable or disable sweep source synchronization static bool m_bSyncSwpSrcs; public : NbkSimEngBase( wxWindow * poParent, wxWindowID oWinID ); NbkSimEngBase( void ); ~NbkSimEngBase( ); virtual bool bClear( void ); bool bIsOk ( void ) { return( m_osErrMsg.IsEmpty( ) ); } virtual bool bLoad( const SimnBase & roSimn ) = 0; virtual bool bSave( SimnBase & roSimn ) = 0; virtual bool bSetPage( eTypeCmd eAnalysis ) = 0; virtual bool bSetPage( const wxString & rosAnalysis ) = 0; virtual const wxString & rosGetPage( void ) = 0; virtual eTypeCmd eGetPage( void ) = 0; // static bool bSetUnitsTemp ( eTypeUnits eUnits ); // ??? MSW 2015-02-02 static bool bSetUnitsPhase ( eTypeUnits eUnits ); static void SetSyncSwpSrcs( bool bSync ) { m_bSyncSwpSrcs = bSync; } eTypeSimEng eGetSimEng ( void ) { return( m_eSimEng ); } // static eTypeUnits eGetUnitsTemp ( void ) { return( m_eUnitsTemp ); } // ??? MSW 2015-02-02 static eTypeUnits eGetUnitsPhase ( void ) { return( m_eUnitsPhase ); } static bool bGetSyncSwpSrcs( void ) { return( m_bSyncSwpSrcs ); } const wxString & rosGetErrMsg( void ) { return( m_osErrMsg ); } void SetErrMsg( const wxString & rosErrMsg ) { if( bIsOk( ) ) m_osErrMsg = rosErrMsg; } // Event handlers void OnPageChangd( wxNotebookEvent & roEvtNbk ); // Leave this as the last line as private access is envoked by macro wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // NBKSIMENGBASE_HPP gspiceui-1.1.00+dfsg/src/icons/0000755000000000000000000000000012311330750014713 5ustar rootrootgspiceui-1.1.00+dfsg/src/icons/file-open.xpm0000644000000000000000000001167512124473156017343 0ustar rootroot/* XPM */ static const char * file_open_xpm[ ] = { "24 24 205 2", " c None", ". c #000000", "+ c #26190E", "@ c #271C11", "# c #271A0F", "$ c #3B2714", "% c #F4AD6A", "& c #FEC280", "* c #FEC27F", "= c #FDB773", "- c #E5A566", "; c #FECB93", "> c #FED39A", ", c #FECE93", "' c #FEC88B", ") c #F6B675", "! c #150F09", "~ c #FEC385", "{ c #FED59C", "] c #FECE92", "^ c #FCB269", "/ c #F9AC62", "( c #F8AC62", "_ c #3D2815", ": c #FEC888", "< c #FED199", "[ c #FEC282", "} c #EEA059", "| c #80532C", "1 c #4B3119", "2 c #4A3019", "3 c #452C17", "4 c #402915", "5 c #3C2714", "6 c #372312", "7 c #322011", "8 c #2E1D0F", "9 c #291A0E", "0 c #25170C", "a c #46301B", "b c #FECA8F", "c c #FDB56E", "d c #A86F3C", "e c #53504D", "f c #FFFFFF", "g c #F7F7F7", "h c #F5F5F5", "i c #F1F1F1", "j c #EAEAEA", "k c #E3E3E3", "l c #DDDDDC", "m c #D6D6D5", "n c #D0D0CE", "o c #C8C8C7", "p c #C2C2C1", "q c #BBBBBA", "r c #B4B4B3", "s c #AFAFAF", "t c #AEAEAE", "u c #343434", "v c #563D25", "w c #FEC685", "x c #FEC182", "y c #F2A55C", "z c #E7E7E7", "A c #E4E4E4", "B c #E1E1E1", "C c #D9D9D8", "D c #D1D1D0", "E c #C7C7C6", "F c #C0C0BF", "G c #B8B8B7", "H c #B0B0AF", "I c #A7A7A6", "J c #9E9E9D", "K c #959595", "L c #8B8B89", "M c #818180", "N c #5E5E5D", "O c #191919", "P c #5F452A", "Q c #FEC283", "R c #FBB269", "S c #C38954", "T c #58534E", "U c #F2F2F2", "V c #E2E2E1", "W c #EAEAE9", "X c #EBEBEA", "Y c #DDDDDB", "Z c #D3D3D1", "` c #CACAC9", " . c #C1C1C0", ".. c #AFAFAD", "+. c #A5A5A3", "@. c #9B9B9A", "#. c #8E8E8D", "$. c #7B7B79", "%. c #363635", "&. c #785A3A", "*. c #FEB972", "=. c #EA9E58", "-. c #6F4F2F", ";. c #8F8E8C", ">. c #D4D4D3", ",. c #E1E1E0", "'. c #E9E9E8", "). c #E7E7E6", "!. c #E5E5E3", "~. c #DEDEDD", "{. c #D5D5D4", "]. c #CDCDCC", "^. c #C4C4C2", "/. c #BABAB9", "(. c #B1B1B0", "_. c #9E9E9C", ":. c #8C8C8B", "<. c #6D6D6C", "[. c #694D31", "}. c #FEB469", "|. c #BE8550", "1. c #5D564F", "2. c #E4E4E3", "3. c #E0E0DF", "4. c #E5E5E4", "5. c #D8D8D6", "6. c #CFCFCE", "7. c #C0C0BE", "8. c #B7B7B6", "9. c #AEAEAD", "0. c #A4A4A3", "a. c #979796", "b. c #282827", "c. c #594027", "d. c #F3A45B", "e. c #684A2D", "f. c #888888", "g. c #DCDCDB", "h. c #D0D0CF", "i. c #C9C9C8", "j. c #B9B9B8", "k. c #B2B2B1", "l. c #A9A9A8", "m. c #A0A09E", "n. c #90908F", "o. c #5E5E5C", "p. c #151514", "q. c #46301A", "r. c #B57740", "s. c #55504C", "t. c #CACACA", "u. c #D2D2D1", "v. c #CDCDCB", "w. c #B3B3B2", "x. c #ACACAB", "y. c #A3A3A2", "z. c #9A9A98", "A. c #818181", "B. c #442C17", "C. c #919191", "D. c #BDBDBB", "E. c #C3C3C1", "F. c #C7C7C5", "G. c #C8C8C6", "H. c #C6C6C5", "I. c #C3C3C2", "J. c #BFBFBE", "K. c #B9B9B7", "L. c #A5A5A4", "M. c #9D9D9B", "N. c #8D8D8C", "O. c #676766", "P. c #0B0704", "Q. c #6D6864", "R. c #ADADAC", "S. c #B6B6B5", "T. c #A9A9A7", "U. c #A2A2A1", "V. c #9D9D9C", "W. c #919190", "X. c #7F7F7E", "Y. c #2C2C2B", "Z. c #171716", "`. c #9A9A9A", " + c #999998", ".+ c #9C9C9B", "++ c #9F9F9D", "@+ c #9A9A99", "#+ c #939393", "$+ c #8B8B8A", "%+ c #8A8A88", "&+ c #7D7D7C", "*+ c #5A5A58", "=+ c #141413", "-+ c #131313", ";+ c #323232", ">+ c #2B2B2B", ",+ c #2D2D2C", "'+ c #2D2D2D", ")+ c #2A2A2A", "!+ c #282828", "~+ c #272727", "{+ c #262625", "]+ c #252524", "^+ c #101010", " ", " . . . . . ", " . . . . . . . . . . ", " . . . . . . ", " . . . . ", " . . . . ", " + @ @ # ", " $ % & * = $ ", " $ - ; > , ' ) $ ! ! ! ! ! ! ! ! ", " $ ~ { ] & ^ / ( ( ( ( ( ( ( ( ( $ ", " _ : < [ } | 1 2 2 2 3 4 5 6 7 8 9 0 . . . . ", " a : b c d e f g h i j k l m n o p q r s t u ", " v w x y 2 o z A B C D E F G H I J K L M N O ", " P Q R S T U V W X k Y Z ` .G ..+.@.#.$.%. ", "$ &.*.=.-.;.>.,.'.).!.~.{.].^./.(.I _.:.<.. ", " [.}.|.1.2.{.3.4.V l 5.6.o 7.8.9.0.a.M b. ", " c.d.e.f.` >.l g.C {.h.i.p j.k.l.m.n.o.p. ", " q.r.s.l t.6.>.u.h.v.o .q w.x.y.z.A.%.. ", " $ B.C.8.D.E.F.G.H.I.J.K.w.x.L.M.N.O.. ", " P.Q.o R.w.S.K.q /.S.w.9.T.U.V.W.X.Y. ", " Z.C.`. +.+++++++M.@+a.#+n.$+%+&+*+=+ ", " -+;+>+Y.,+'+'+'+,+Y.>+)+!+~+{+]+^+ ", " ", " " }; gspiceui-1.1.00+dfsg/src/icons/html-close.xpm0000644000000000000000000000341512124473156017525 0ustar rootroot/* XPM */ static const char * html_close_xpm[] = { "22 22 78 1", " c None", ". c #464646", "+ c #434343", "@ c #3F3F3F", "# c #393939", "$ c #313131", "% c #292929", "& c #4F4F4F", "* c #515151", "= c #767676", "- c #727272", "; c #6B6B6B", "> c #616161", ", c #565656", "' c #484848", ") c #282828", "! c #232323", "~ c #555555", "{ c #838383", "] c #898989", "^ c #888888", "/ c #848484", "( c #7A7A7A", "_ c #6F6F6F", ": c #626262", "< c #535353", "[ c #363636", "} c #1F1F1F", "| c #949494", "1 c #9A9A9A", "2 c #939393", "3 c #7B7B7B", "4 c #6C6C6C", "5 c #5C5C5C", "6 c #4B4B4B", "7 c #3A3A3A", "8 c #303030", "9 c #1C1C1C", "0 c #A3A3A3", "a c #999999", "b c #989898", "c c #A1A1A1", "d c #737373", "e c #575757", "f c #474747", "g c #323232", "h c #2A2A2A", "i c #161616", "j c #FFFFFF", "k c #9B9B9B", "l c #3B3B3B", "m c #171717", "n c #8B8B8B", "o c #212121", "p c #111111", "q c #404040", "r c #202020", "s c #101010", "t c #4C4C4C", "u c #2E2E2E", "v c #272727", "w c #1E1E1E", "x c #0F0F0F", "y c #454545", "z c #343434", "A c #2B2B2B", "B c #242424", "C c #0D0D0D", "D c #2F2F2F", "E c #191919", "F c #0B0B0B", "G c #252525", "H c #151515", "I c #090909", "J c #3D3D3D", "K c #181818", "L c #131313", "M c #080808", " ", " ", " .+@#$% ", " &*=-;>,')! ", " ~{]^/(_:<+[} ", " ~]|112]3456789 ", " &{|0abc|/def@ghi ", " *]1ajjbk];jjlghm ", " .=^1bjjjn3jjjlghop ", " +-/2cbjjjjjj'q8%rs ", " @;(]|knjjjj_3/]3jjjj6yzAB9C ", " $,:4d;jjjjjjzD)rEF ", " %'<5ejjj<6jjjG!9HI ", " )+6fjj'+JzjjowKF ", " ![7@llqlzDGo}ELM ", " }8ggg8uA)!wELI ", " 9hhh%vBr9KLI ", " imorw9EHFM ", " psxCFI ", " ", " "}; gspiceui-1.1.00+dfsg/src/icons/file-save.xpm0000644000000000000000000000567612124473156017344 0ustar rootroot/* XPM */ static const char * filesave_xpm[] = { "22 22 118 2", " c None", ". c #6B6B6B", "+ c #000000", "@ c #C1C1C1", "# c #3F3F3F", "$ c #4A4A4A", "% c #717171", "& c #6D6D6D", "* c #8A8A8A", "= c #5C5C5C", "- c #636363", "; c #505050", "> c #747474", ", c #434343", "' c #565656", ") c #FFFFFF", "! c #DFDFDF", "~ c #464646", "{ c #6C6C6C", "] c #040404", "^ c #E0E0E0", "/ c #616161", "( c #545454", "_ c #9B9B9B", ": c #FEFEFE", "< c #5E5E5E", "[ c #777777", "} c #5B5B5B", "| c #4D4D4D", "1 c #D8E6E6", "2 c #767676", "3 c #C4C4C4", "4 c #151515", "5 c #B3B3B3", "6 c #7B7B7B", "7 c #BABABA", "8 c #494949", "9 c #828282", "0 c #EFF0F0", "a c #F9F9F9", "b c #797979", "c c #060606", "d c #989898", "e c #9A9A9A", "f c #3D3D3D", "g c #FCFCFC", "h c #CBCBCB", "i c #0C0C0C", "j c #919191", "k c #949494", "l c #929292", "m c #7C7C7C", "n c #888888", "o c #787878", "p c #737373", "q c #474747", "r c #757575", "s c #8E8E8E", "t c #909090", "u c #8D8D8D", "v c #8B8B8B", "w c #535353", "x c #BBBBBB", "y c #424242", "z c #848484", "A c #838383", "B c #454545", "C c #3A3A3A", "D c #858585", "E c #585858", "F c #404040", "G c #CACACA", "H c #2F2F2F", "I c #6E6E6E", "J c #EAEAEA", "K c #969696", "L c #4C4C4C", "M c #5F5F5F", "N c #7A7A7A", "O c #707070", "P c #BEBEBE", "Q c #4E4E4E", "R c #6A6A6A", "S c #4F4F4F", "T c #9C9C9C", "U c #F1F1F1", "V c #EFEFEF", "W c #D6D6D6", "X c #444444", "Y c #6F6F6F", "Z c #2B2B2B", "` c #676767", " . c #F4F4F4", ".. c #DADADA", "+. c #E3E3E3", "@. c #EDEDED", "#. c #808080", "$. c #515151", "%. c #3B3B3B", "&. c #656565", "*. c #F2F2F2", "=. c #CECECE", "-. c #C5C5C5", ";. c #BCBCBC", ">. c #818181", ",. c #606060", "'. c #5A5A5A", "). c #010101", "!. c #A7A7A7", "~. c #B8B8B8", "{. c #8C8C8C", "]. c #A8A8A8", "^. c #898989", "/. c #414141", "(. c #555555", "_. c #C9C9C9", ":. c #353535", "<. c #383838", " . + ", " + @ # $ % ", " & * @ = - = # ; > ", " , @ @ ' ) ! = & = # ~ { ", " ] @ ' ^ ) ) ) ) ! = / = # ( > ", " { _ @ # : ) ) ) ) ) ) ) ! = < [ + } ", " | @ @ ' ) ) ) ) ) ) ) ) : 1 ' 2 3 + ", " 4 5 ' ^ ) ) ) ) ) ) ) ) ) ' 6 > 7 8 ", " . 9 5 # 0 ) ) ) ) ) ) ) ) a # b 7 c ", " | d e f { g ) ) ) ) ) ) ) ! ' 2 h f ", " i j k l m ( # n ) ) ) ) ) ' o p 7 q ", " { r * s t u v l > w # * ) ^ # > x + ", " y z A B C ' v n D n z & E F r [ G H ", " c m I o J K ~ L M b 9 N o > O . P Q ", ". R p S T ) U V W A X ~ 2 % Y . 7 ] ", "Z & ` ~ .J ..+.@.^ #.$.%.X = ` h y ", "= + &.# *.W W =.-.;.( D >.%.,.,.x '. ", " . ~ ).~ !.3 ;.~.* ~ m {.w w x + ", " . ~ + ~ ].~ D ^./.(.w _.:. ", " . ~ + ~ K <.w w 7 8 ", " . ~ + ~ (.] ", " . + } "}; gspiceui-1.1.00+dfsg/src/icons/html-back.xpm0000644000000000000000000000110312124473156017310 0ustar rootroot/* XPM */ static const char * html_back_xpm[ ] = { /* columns rows colors chars-per-pixel */ "18 17 3 1", " c black", ". c black", "X c None", /* pixels */ "XXXXXXXXXXXXXXXX..", "XXXXXXXXXXXXXX....", "XXXXXXXXXXXX......", "XXXXXXXXXX........", "XXXXXXXX..........", "XXXXXX............", "XXXX..............", "XX................", "..................", "XX................", "XXXX..............", "XXXXXX............", "XXXXXXXX..........", "XXXXXXXXXX........", "XXXXXXXXXXXX......", "XXXXXXXXXXXXXX....", "XXXXXXXXXXXXXXXX.." }; gspiceui-1.1.00+dfsg/src/icons/setup.xpm0000644000000000000000000000775512124473156016631 0ustar rootroot/* XPM */ static const char * setup_xpm[ ] = { "24 23 154 2", " c None", ". c #414142", "+ c #606060", "@ c #7D7D7D", "# c #A6A6A6", "$ c #BABABA", "% c #9C9C9C", "& c #6A6A6A", "* c #090808", "= c #FBFBFB", "- c #C6C6C6", "; c #828282", "> c #4D4D4D", ", c #3E3C3E", "' c #676464", ") c #717171", "! c #636362", "~ c #333336", "{ c #A2A2A2", "] c #C0C0C0", "^ c #464647", "/ c #163C3D", "( c #5B8587", "_ c #295151", ": c #797979", "< c #AEAEAE", "[ c #C9C9C9", "} c #878786", "| c #525252", "1 c #323235", "2 c #464648", "3 c #E8F2F2", "4 c #5DADAC", "5 c #939393", "6 c #CFCFCF", "7 c #FFFFFF", "8 c #F6F6F6", "9 c #A6A7AA", "0 c #494B52", "a c #4B4D53", "b c #56A09E", "c c #10393A", "d c #1A3A38", "e c #F1F1F2", "f c #9C9DA0", "g c #3F3F40", "h c #8C7A2C", "i c #655E33", "j c #A9E7E4", "k c #174545", "l c #ADF4F3", "m c #21403F", "n c #808080", "o c #A0A0A0", "p c #A5A6AA", "q c #AC993F", "r c #635920", "s c #54380F", "t c #AAE7E7", "u c #85CAC9", "v c #2D5252", "w c #4FA2A2", "x c #122C2C", "y c #666666", "z c #626262", "A c #535354", "B c #C3AA4D", "C c #D3BF7A", "D c #153B3C", "E c #86D1D0", "F c #6FBCB9", "G c #90DDDA", "H c #9EE5E5", "I c #61ACAD", "J c #194F4F", "K c #757575", "L c #E1E1E1", "M c #CCCCCC", "N c #A7A7A6", "O c #545456", "P c #42434C", "Q c #815B20", "R c #CBAC7A", "S c #886F2D", "T c #81D1D8", "U c #40908F", "V c #225D5D", "W c #1C4C4C", "X c #1F5251", "Y c #041C1D", "Z c #868686", "` c #F7F7F7", " . c #959595", ".. c #4C4C4D", "+. c #B48D59", "@. c #F0E0C8", "#. c #C2A36C", "$. c #53380F", "%. c #20676B", "&. c #050E10", "*. c #838383", "=. c #CACACA", "-. c #646465", ";. c #474749", ">. c #322109", ",. c #B48D5B", "'. c #CCA475", "). c #866E2C", "!. c #656565", "~. c #545455", "{. c #CDAB7F", "]. c #856C2C", "^. c #553910", "/. c #8CDDE2", "(. c #3A6F6E", "_. c #BFA075", ":. c #8DD7DA", "<. c #53A4A7", "[. c #174F51", "}. c #020000", "|. c #BB9F6A", "1. c #7CC5C4", "2. c #459596", "3. c #286A6A", "4. c #010406", "5. c #312008", "6. c #E9CDA8", "7. c #C19F70", "8. c #85D0D0", "9. c #469595", "0. c #225D5E", "a. c #081314", "b. c #EACDA6", "c. c #C7A972", "d. c #2C2F32", "e. c #90D9DC", "f. c #479697", "g. c #286969", "h. c #050E11", "i. c #EDD0AB", "j. c #BA985D", "k. c #243034", "l. c #B6FFFF", "m. c #4D9F9F", "n. c #225F5E", "o. c #061315", "p. c #BF9A60", "q. c #573E16", "r. c #22353A", "s. c #102C2C", "t. c #081619", "u. c #916B34", "v. c #53360B", "w. c #332007", " . . + . ", " . @ # $ % & * ", " . = - ; > , ' ", " ) ! ~ { ] ^ . / ( _ ", " : < [ } | 1 2 / 3 4 / ", " 5 6 7 8 9 0 a / 3 b c / d ", " + [ e f g h i / j k / l m ", " n o p g 7 q r s / t u v / 3 w x ", " + + y ~ z A r B 7 C r s D 3 E F G H I J ", "K L M N O ~ P r C Q R S s T U V W X Y ", "+ Z ` ...~ r +.@.#.S $.%.&. ", " + *.=.-.;. >.,.@.'.).$. ", " !.~ ~. / 3 >.,.@.{.].^. ", " / 3 /.(.>.,.@._.S ^. ", " / 3 :.<.[.}.>.,.@.|.S ^. ", " / 3 1.2.3.4. 5.,.6.7.S ^. ", " / 3 8.9.0.a. 5.,.b.c.S ^. ", " d.3 e.f.g.h. 5.,.i.j.S ^. ", " k.l.m.n.o. >.,.p.q.>. ", " r.s.t. >.u.v.>. ", " w.>. ", " ", " " }; gspiceui-1.1.00+dfsg/src/icons/file-import.xpm0000644000000000000000000001136112124473156017704 0ustar rootroot/* XPM */ static const char * file_import_xpm[] = { "24 24 221 2", " c None", ". c #000000", "+ c #26190E", "@ c #271C11", "# c #271A0F", "$ c #3B2714", "% c #F4AD6A", "& c #FEC280", "* c #FEC27F", "= c #FDB773", "- c #E5A566", "; c #FECB93", "> c #FED39A", ", c #FECE93", "' c #FEC88B", ") c #F6B675", "! c #150F09", "~ c #FEC385", "{ c #FED59C", "] c #FECE92", "^ c #FCB269", "/ c #F9AC62", "( c #F8AC62", "_ c #3D2815", ": c #FEC888", "< c #FED199", "[ c #FEC282", "} c #EEA059", "| c #80532C", "1 c #4B3119", "2 c #4A3019", "3 c #452C17", "4 c #402915", "5 c #3C2714", "6 c #372312", "7 c #322011", "8 c #2E1D0F", "9 c #291A0E", "0 c #25170C", "a c #46301B", "b c #FECA8F", "c c #FDB56E", "d c #A86F3C", "e c #53504D", "f c #FFFFFF", "g c #F7F7F7", "h c #F5F5F5", "i c #F1F1F1", "j c #EAEAEA", "k c #E3E3E3", "l c #DDDDDC", "m c #D6D6D5", "n c #D0D0CE", "o c #C8C8C7", "p c #C2C2C1", "q c #BBBBBA", "r c #B4B4B3", "s c #AFAFAF", "t c #AEAEAE", "u c #343434", "v c #563D25", "w c #FEC685", "x c #FEC182", "y c #F2A55C", "z c #E7E7E7", "A c #E4E4E4", "B c #E1E1E1", "C c #D9D9D8", "D c #D1D1D0", "E c #C7C7C6", "F c #A7A7A7", "G c #898989", "H c #B0B0AF", "I c #929291", "J c #3E3E3E", "K c #2B2B2B", "L c #797977", "M c #818180", "N c #464645", "O c #151515", "P c #5F452A", "Q c #FEC283", "R c #FBB269", "S c #C38954", "T c #58534E", "U c #F2F2F2", "V c #E2E2E1", "W c #EAEAE9", "X c #EBEBEA", "Y c #DDDDDB", "Z c #B8B8B6", "` c #606060", " . c #838383", ".. c #5C5C5B", "+. c #ECECEC", "@. c #4C4C4C", "#. c #232323", "$. c #3D3D3C", "%. c #7A7A7A", "&. c #212121", "*. c #785A3A", "=. c #FEB972", "-. c #EA9E58", ";. c #6F4F2F", ">. c #8F8E8C", ",. c #D4D4D3", "'. c #E1E1E0", "). c #E9E9E8", "!. c #E7E7E6", "~. c #E5E5E3", "{. c #DEDEDD", "]. c #9F9F9E", "^. c #3C3C3C", "/. c #D1D1D1", "(. c #6E6E6E", "_. c #B5B5B5", ":. c #959595", "<. c #848484", "[. c #CFCFCF", "}. c #E9E9E9", "|. c #333333", "1. c #694D31", "2. c #FEB469", "3. c #BE8550", "4. c #5D564F", "5. c #E4E4E3", "6. c #D5D5D4", "7. c #E0E0DF", "8. c #E5E5E4", "9. c #D8D8D6", "0. c #CFCFCE", "a. c #636363", "b. c #5C5C5C", "c. c #B8B8B8", "d. c #B3B3B3", "e. c #AAAAAA", "f. c #C3C3C3", "g. c #D2D2D2", "h. c #525252", "i. c #594027", "j. c #F3A45B", "k. c #684A2D", "l. c #888888", "m. c #CACAC9", "n. c #DCDCDB", "o. c #D0D0CF", "p. c #AFAFAE", "q. c #303030", "r. c #717171", "s. c #B7B7B7", "t. c #9B9B9B", "u. c #5B5B5B", "v. c #EEEEEE", "w. c #D5D5D5", "x. c #9A9A9A", "y. c #46301A", "z. c #B57740", "A. c #55504C", "B. c #CACACA", "C. c #D2D2D1", "D. c #CDCDCB", "E. c #444444", "F. c #A9A9A9", "G. c #565655", "H. c #4A4A4A", "I. c #8E8E8E", "J. c #DADADA", "K. c #282828", "L. c #442C17", "M. c #919191", "N. c #B7B7B6", "O. c #BDBDBB", "P. c #C3C3C1", "Q. c #C7C7C5", "R. c #C8C8C6", "S. c #C6C6C5", "T. c #C3C3C2", "U. c #BFBFBE", "V. c #323231", "W. c #8B8B8B", "X. c #595959", "Y. c #515151", "Z. c #3A3A3A", "`. c #8A8A8A", " + c #929292", ".+ c #4B4B4B", "++ c #131313", "@+ c #0B0704", "#+ c #6D6864", "$+ c #ADADAC", "%+ c #B3B3B2", "&+ c #B6B6B5", "*+ c #B9B9B7", "=+ c #BABAB9", "-+ c #989897", ";+ c #2A2A29", ">+ c #C6C6C6", ",+ c #D9D9D9", "'+ c #757575", ")+ c #171716", "!+ c #999998", "~+ c #9C9C9B", "{+ c #9F9F9D", "]+ c #9D9D9B", "^+ c #9A9A99", "/+ c #979796", "(+ c #939393", "_+ c #474747", ":+ c #C7C7C7", "<+ c #D0D0D0", "[+ c #B4B4B4", "}+ c #323232", "|+ c #2C2C2B", "1+ c #2D2D2C", "2+ c #2D2D2D", "3+ c #1F1F1F", "4+ c #5E5E5E", "5+ c #C8C8C8", "6+ c #DFDFDF", "7+ c #666666", "8+ c #262626", " ", " . . . . . ", " . . . . . . . . . . ", " . . . . . . ", " . . . . ", " . . . . ", " + @ @ # ", " $ % & * = $ ", " $ - ; > , ' ) $ ! ! ! ! ! ! ! ! ", " $ ~ { ] & ^ / ( ( ( ( ( ( ( ( ( $ ", " _ : < [ } | 1 2 2 2 3 4 5 6 7 8 9 0 . . . . ", " a : b c d e f g h i j k l m n o p q r s t u ", " v w x y 2 o z A B C D E F G H I J K L M N O ", " P Q R S T U V W X k Y Z ` ...K +.@.#.$.%.&. ", "$ *.=.-.;.>.,.'.).!.~.{.].^.+./.(._.:.<.[.}.|. ", " 1.2.3.4.5.6.7.8.V l 9.0.a.b.c.d.e._.f.g.h.. ", " i.j.k.l.m.,.l n.C 6.o.p.q.r.s.t.q.u.v.w.x.. ", " y.z.A.l B.0.,.C.o.D.o E.+./.F.q.G.H.I.J./.j K.", " $ L.M.N.O.P.Q.R.S.T.U.V.@.W.s.X.Y.Z.`.[. +.+++", " @+#+o $+%+&+*+q =+&+%+-+;+` >+v.I.`.,+c.'+. ", " )+M.x.!+~+{+{+{+]+^+/+(+_+:+w.w.J.<+[+c.Y.. ", " ++}+K |+1+2+2+2+1+|+K 3+%.}.h.x./.G 4+5+6+u ", " &.|.. . j @.. . 7+8+ ", " K.++ "}; gspiceui-1.1.00+dfsg/src/icons/file-saveas.xpm0000644000000000000000000000642112124473156017655 0ustar rootroot/* XPM */ static const char * file_saveas_xpm[] = { "22 22 139 2", " c None", ". c #FDD7A6", "+ c #E08F4D", "@ c #9A6234", "# c #6B6B6B", "$ c #000000", "% c #FD8504", "& c #F6E0AB", "* c #C1C1C1", "= c #3F3F3F", "- c #4A4A4A", "; c #717171", "> c #DD6F04", ", c #B6B6B6", "' c #5A5A5A", ") c #636363", "! c #5C5C5C", "~ c #505050", "{ c #747474", "] c #F1F1F1", "^ c #DCDCDC", "/ c #6D6D6D", "( c #464646", "_ c #6C6C6C", ": c #E6E6E6", "< c #FCFCFC", "[ c #FFFFFF", "} c #DFDFDF", "| c #616161", "1 c #545454", "2 c #DE6935", "3 c #F9BEA1", "4 c #E1A183", "5 c #5E5E5E", "6 c #777777", "7 c #5B5B5B", "8 c #363636", "9 c #D06517", "0 c #C37B5A", "a c #FEFEFE", "b c #D8E6E6", "c c #565656", "d c #767676", "e c #C4C4C4", "f c #131313", "g c #9F9F9F", "h c #3D3D3D", "i c #454038", "j c #774F34", "k c #945935", "l c #7B7B7B", "m c #BABABA", "n c #494949", "o c #828282", "p c #B1B1B1", "q c #3B3B3B", "r c #D4D5D5", "s c #ABABAB", "t c #AAAAAA", "u c #ADADAD", "v c #C3C3C3", "w c #F4F4F4", "x c #F9F9F9", "y c #797979", "z c #060606", "A c #4D4D4D", "B c #989898", "C c #9A9A9A", "D c #EEEEEE", "E c #EFEFEF", "F c #CBCBCB", "G c #0C0C0C", "H c #919191", "I c #949494", "J c #929292", "K c #7C7C7C", "L c #888888", "M c #787878", "N c #737373", "O c #757575", "P c #8A8A8A", "Q c #8E8E8E", "R c #909090", "S c #8D8D8D", "T c #8B8B8B", "U c #535353", "V c #E0E0E0", "W c #BBBBBB", "X c #424242", "Y c #848484", "Z c #838383", "` c #454545", " . c #3A3A3A", ".. c #858585", "+. c #585858", "@. c #404040", "#. c #CACACA", "$. c #2F2F2F", "%. c #6E6E6E", "&. c #EAEAEA", "*. c #969696", "=. c #4C4C4C", "-. c #5F5F5F", ";. c #7A7A7A", ">. c #707070", ",. c #BEBEBE", "'. c #4E4E4E", "). c #6A6A6A", "!. c #4F4F4F", "~. c #9C9C9C", "{. c #D6D6D6", "]. c #444444", "^. c #6F6F6F", "/. c #040404", "(. c #2B2B2B", "_. c #676767", ":. c #DADADA", "<. c #E3E3E3", "[. c #EDEDED", "}. c #808080", "|. c #515151", "1. c #656565", "2. c #F2F2F2", "3. c #CECECE", "4. c #C5C5C5", "5. c #BCBCBC", "6. c #818181", "7. c #606060", "8. c #010101", "9. c #A7A7A7", "0. c #B8B8B8", "a. c #8C8C8C", "b. c #A8A8A8", "c. c #898989", "d. c #414141", "e. c #555555", "f. c #C9C9C9", "g. c #353535", "h. c #383838", ". + @ # $ ", "% & . + @ $ * = - ; ", "> % % & . + @ , ' ) ! = ~ { ", "$ > > % % & . + @ ] ^ ! / ! = ( _ ", " $ $ > > % % & . + : < [ } ! | ! = 1 { ", " $ $ > > % 2 3 4 : < [ [ [ } ! 5 6 $ 7 ", " 8 $ $ 9 0 0 4 4 : < [ [ a b c d e $ ", " f g h $ i j j k $ : < [ [ c l { m n ", " # o p q r , s t t u v w [ x = y m z ", " A B C h # D E D D D ] < [ } c d F h ", " G H I J K 1 = L [ [ [ [ [ c M N m - ", " _ O P Q R S T J { U = P [ V = { W $ ", " X Y Z ` .c T L ..L Y / +.@.O 6 #.$. ", " z K %.M &.*.( =.-.y o ;.M { >.# ,.'. ", " # ).N !.~.[ ] E {.Z ].( d ; ^.# m /. ", " (./ _.( w &.:.<.[.V }.|.q ].! _.F X ", " ! $ 1.= 2.{.{.3.4.5.1 ..6.q 7.7.W ' ", " # ( 8.( 9.e 5.0.P ( K a.U U W $ ", " # ( $ ( b.( ..c.d.e.U f.g. ", " # ( $ ( *.h.U U m n ", " # ( $ ( e./. ", " # $ 7 "}; gspiceui-1.1.00+dfsg/src/icons/gspiceui-48x48.xpm0000644000000000000000000000533712311330750020056 0ustar rootroot/* XPM */ static const char * gspiceui48x48_xpm[ ] = { "48 48 7 1", "d c #0058c0", "a c #303030", "e c #58a8ff", "b c #808080", "c c #c00000", ". c #c000c0", "# c #c0ffc0", "................................................", ".##############################################.", ".##############################################.", ".##############################################.", ".###########aaaaaaaaaaaaaa#####################.", ".###########a############a#####################.", ".##bab######a############a################bab##.", ".##a#aaaaaaaa############aaaaaaaaaaaaaaaaaa#a##.", ".##bab######a############a########a#######bab##.", ".###########a############a########a############.", ".###########aaaaaaaaaaaaaa########a############.", ".#################################a############.", ".############################aaaaaaaaaaa#######.", ".########c#####################################.", ".########c#####################################.", ".########c###################aaaaaaaaaaa#######.", ".########c########################a############.", ".########c########################a############.", ".########c########################a############.", ".########c####dddd################a############.", ".########c###ddeedd###########aaaaaaaaa########.", ".########c##dd####dd###########################.", ".########c#dde####ede###########aaaaa##########.", ".########cede######dd##########################.", ".########cdd########de############a############.", ".########ed#########dd#########################.", ".########dd#########ed#########################.", ".########de##########de########################.", ".#######dd###########dd########################.", ".#######de############de#######################.", ".######ddc############dd#######################.", ".######dec############ed##############eee######.", ".#####dd#c#############de############ddddd#####.", ".#####de#c#############dd###########ed###de####.", ".####ed##c#############ed###########d####ed####.", ".####dd##c##############de#########dd#####ed###.", ".###edccccccccccccccccccddccccccccedcccccccc###.", ".###ed###c##############ed########dd###########.", ".###d####c###############de######ede###########.", ".########c###############dde#####dd############.", ".########c################dd####ede############.", ".########c################ede##edd#############.", ".########c#################ddeedd##############.", ".########c##################dddd###############.", ".##############################################.", ".##############################################.", ".##############################################.", "................................................" }; gspiceui-1.1.00+dfsg/src/icons/file-reload.xpm0000644000000000000000000000247512124473156017646 0ustar rootroot/* XPM */ static const char * file_reload_xpm[] = { "22 22 47 1", " c None", ". c #346C30", "+ c #387532", "@ c #356E32", "# c #356D31", "$ c #356B2F", "% c #4A7F43", "& c #9DD199", "* c #98CE92", "= c #8AC781", "- c #73BA6B", "; c #62AA5C", "> c #5F9159", ", c #367332", "' c #73BA67", ") c #7FA37A", "! c #377532", "~ c #3B7C34", "{ c #3E8637", "] c #76BD6D", "^ c #59A151", "/ c #397934", "( c #489C41", "_ c #69B662", ": c #5EAA58", "< c #65AA5A", "[ c #65AD5B", "} c #5CA454", "| c #78BF6F", "1 c #E9F4E8", "2 c #FCFCFC", "3 c #5AA252", "4 c #8CC983", "5 c #EBF5E9", "6 c #366E32", "7 c #66B05E", "8 c #79BF72", "9 c #63AB5B", "0 c #3E8639", "a c #4BA145", "b c #418D3C", "c c #3C8637", "d c #387633", "e c #3C7D35", "f c #6CB865", "g c #82C279", "h c #50A246", " ", " ", " ", " .++@#$.#% ", " #&&&*=-;> ", " ,&'''''') ", " !&' ", " ~&' ", " {&] ^ ", " $#/(&_::< #[' ", " !}|*12' $345' ", " $^=5' 678*12' ", " $9' 000a&'''' ", " [ b&' ", " b&' ", " c&' ", " .6decb&' ", " ,fg4*&&' ", " h''''''' ", " ", " ", " "}; gspiceui-1.1.00+dfsg/src/icons/file-close.xpm0000644000000000000000000000341512124473156017500 0ustar rootroot/* XPM */ static const char * file_close_xpm[] = { "22 22 78 1", " c None", ". c #464646", "+ c #434343", "@ c #3F3F3F", "# c #393939", "$ c #313131", "% c #292929", "& c #4F4F4F", "* c #515151", "= c #767676", "- c #727272", "; c #6B6B6B", "> c #616161", ", c #565656", "' c #484848", ") c #282828", "! c #232323", "~ c #555555", "{ c #838383", "] c #898989", "^ c #888888", "/ c #848484", "( c #7A7A7A", "_ c #6F6F6F", ": c #626262", "< c #535353", "[ c #363636", "} c #1F1F1F", "| c #949494", "1 c #9A9A9A", "2 c #939393", "3 c #7B7B7B", "4 c #6C6C6C", "5 c #5C5C5C", "6 c #4B4B4B", "7 c #3A3A3A", "8 c #303030", "9 c #1C1C1C", "0 c #A3A3A3", "a c #999999", "b c #989898", "c c #A1A1A1", "d c #737373", "e c #575757", "f c #474747", "g c #323232", "h c #2A2A2A", "i c #161616", "j c #FFFFFF", "k c #9B9B9B", "l c #3B3B3B", "m c #171717", "n c #8B8B8B", "o c #212121", "p c #111111", "q c #404040", "r c #202020", "s c #101010", "t c #4C4C4C", "u c #2E2E2E", "v c #272727", "w c #1E1E1E", "x c #0F0F0F", "y c #454545", "z c #343434", "A c #2B2B2B", "B c #242424", "C c #0D0D0D", "D c #2F2F2F", "E c #191919", "F c #0B0B0B", "G c #252525", "H c #151515", "I c #090909", "J c #3D3D3D", "K c #181818", "L c #131313", "M c #080808", " ", " ", " .+@#$% ", " &*=-;>,')! ", " ~{]^/(_:<+[} ", " ~]|112]3456789 ", " &{|0abc|/def@ghi ", " *]1ajjbk];jjlghm ", " .=^1bjjjn3jjjlghop ", " +-/2cbjjjjjj'q8%rs ", " @;(]|knjjjj_3/]3jjjj6yzAB9C ", " $,:4d;jjjjjjzD)rEF ", " %'<5ejjj<6jjjG!9HI ", " )+6fjj'+JzjjowKF ", " ![7@llqlzDGo}ELM ", " }8ggg8uA)!wELI ", " 9hhh%vBr9KLI ", " imorw9EHFM ", " psxCFI ", " ", " "}; gspiceui-1.1.00+dfsg/src/icons/sim-stop.xpm0000644000000000000000000000366712124473156017242 0ustar rootroot/* XPM */ static const char * sim_stop_xpm[ ] = { "24 24 70 1", " c None", ". c #630000", "+ c #660000", "@ c #6A0100", "# c #E45447", "$ c #DB4B3E", "% c #D44438", "& c #D9493D", "* c #E05043", "= c #E55548", "- c #EA5A4D", "; c #DE4E41", "> c #CD2000", ", c #BB1900", "' c #380202", ") c #360600", "! c #C01A00", "~ c #DB2700", "{ c #CE2000", "] c #C11B00", "^ c #B41500", "/ c #FFFFFF", "( c #DB2600", "_ c #CE2100", ": c #845A5A", "< c #D52400", "[ c #C21C00", "} c #CF2100", "| c #BC1800", "1 c #B81700", "2 c #C71D00", "3 c #CB1F00", "4 c #C91F00", "5 c #AD1300", "6 c #B31500", "7 c #BC1900", "8 c #C51D00", "9 c #C31C00", "0 c #A40E00", "a c #AF1300", "b c #BA1800", "c c #BD1A00", "d c #B01400", "e c #B41600", "f c #B71700", "g c #AC1200", "h c #B11400", "i c #A81000", "j c #A91000", "k c #AB1200", "l c #A40F00", "m c #A71000", "n c #A50F00", "o c #A00D00", "p c #A10D00", "q c #9F0D00", "r c #9C0B00", "s c #9D0C00", "t c #990A00", "u c #DB5341", "v c #940700", "w c #930700", "x c #8D0500", "y c #8F0600", "z c #870200", "A c #8B0300", "B c #650000", "C c #820100", "D c #840100", "E c #810000", " ", " .+@@+.. ", " ..#$%&*=-.. ", " .#;>,')!>~#-. ", " .#{]^'//'^]{(-. ", " .-_,''://:'',_~~. ", " .-<['//://://'[<<<. ", " .-}|'//://://'1223. ", " .-441'//://://'56678. ", " .-99^'//://://'0''ab. ", " .-ccd'//://://''//'e. ", " .-ffg'//:::://'///'h. ", " .-hhi'/:////:////'ja. ", " .-kkl'///////////'mk. ", " .-nno'////://///'p0n. ", " .-qr'///://////'sq. ", " .-tt'///://///'ttt. ", " .uv'///:////'vww. ", " .xy'//////'yxx. ", " .zA''''''Azz. ", " .BCDDDDCE.. ", " ....... ", " ", " " }; gspiceui-1.1.00+dfsg/src/icons/sim-plot.xpm0000644000000000000000000000375012124473156017224 0ustar rootroot/* XPM */ static const char * sim_plot_xpm[ ] = { "22 22 79 1", " c None", ". c #000000", "+ c #F0F0F0", "@ c #F3F3F3", "# c #F4F4F4", "$ c #ECECEC", "% c #E8E8E7", "& c #E3E3E3", "* c #DADAD9", "= c #D5D5D4", "- c #D0D0CF", "; c #CBCBCA", "> c #C6C6C5", ", c #C1C1C0", "' c #BCBCBB", ") c #B7B7B5", "! c #F7F7F7", "~ c #F9F9F9", "{ c #EFEFEE", "] c #EAEAE9", "^ c #E5E5E4", "/ c #DBDBDA", "( c #D6D6D5", "_ c #00007F", ": c #C7C7C5", "< c #C2C2C0", "[ c #BDBDBB", "} c #B8B8B6", "| c #FFFFFF", "1 c #EFEFEF", "2 c #EAEAEA", "3 c #E5E5E5", "4 c #D1D1D0", "5 c #CCCCCB", "6 c #E9E9E9", "7 c #E1E1E0", "8 c #D3D3D2", "9 c #CFCFCD", "0 c #CACAC9", "a c #C5C5C4", "b c #BBBBBA", "c c #B6B6B5", "d c #E2E2E1", "e c #DEDEDD", "f c #CDCDCC", "g c #C8C8C7", "h c #C3C3C2", "i c #BFBFBD", "j c #B5B5B3", "k c #DFDFDE", "l c #E0E0DF", "m c #DDDDDC", "n c #D7D7D6", "o c #C4C4C2", "p c #BFBFBE", "q c #BBBBB9", "r c #B2B2B0", "s c #D8D8D7", "t c #CDCDCB", "u c #C9C9C8", "v c #C1C1BF", "w c #B8B8B7", "x c #B4B4B2", "y c #BEBEBC", "z c #BABAB8", "A c #B6B6B4", "B c #B1B1B0", "C c #CBCBC9", "D c #BEBEBD", "E c #B3B3B1", "F c #AFAFAD", "G c #AAAAA8", "H c #B3B3B2", "I c #B0B0AE", "J c #ACACAA", "K c #A8A8A7", "L c #C7C7C6", "M c #C0C0BF", "N c #A9A9A7", " ", " ", " ", " ................. ", " .+@#@+$%&.*=-;>,'). ", " .@!~!@{]^./(__:<[}. ", " .#~|~#123./_45_<[}. ", " .@!~!@{]^./_45_<[}. ", " ._@#@+$%&._=-;>_'). ", " ._{1{$637._890a_bc. ", " .%_2]%3de_(4fghi_j. ", " .._......_......_.. ", " .k_llkm*n_-5gopq_r. ", " .*/_/*s(_.tuav[wx_. ", " .=(_(=84_.ua.vyq)HIJK. ", " .>:L:__h,.[z)HIJKK. ", " .,<<<,Mi[.wAEIJNKK. ", " ................. ", " ", " " }; gspiceui-1.1.00+dfsg/src/icons/gspiceui-32x32.xpm0000644000000000000000000000255712311330727020045 0ustar rootroot/* XPM */ static const char * gspiceui32x32_xpm[ ] = { "32 32 6 1", "b c #000000", "e c #0000ff", "f c #58a8ff", "d c #c00000", ". c #c000c0", "# c #c0ffc0", "................................", ".##############################.", ".##############################.", ".######bbbbbbbbb###############.", ".######b#######b###############.", ".##bbbbb#######bbbbbbbbbbbbbb##.", ".######b#######b#####b#########.", ".######bbbbbbbbb#####b#########.", ".####################b#########.", ".#################bbbbbbb######.", ".#####d########################.", ".#####d########################.", ".#####d###########bbbbbbb######.", ".#####d##############b#########.", ".#####d##ee##########b#########.", ".#####d#effe#######bbbbb#######.", ".#####dee##ee##################.", ".#####de####ef######bbb########.", ".#####ef####fe#################.", ".####fe######ef######b#########.", ".####ed######fe##########ee####.", ".###fed#######ef########effe###.", ".###efd#######fe#######ef##fe##.", ".##feddddddddddefdddddfeddddd##.", ".##e##d########fe#####ef#######.", ".#####d#########ef###fe########.", ".#####d#########fe###ef########.", ".#####d##########fefef#########.", ".#####d###########eee##########.", ".##############################.", ".##############################.", "................................" }; gspiceui-1.1.00+dfsg/src/icons/calculator.xpm0000644000000000000000000000244412311234111017570 0ustar rootroot/* XPM */ static char * calculator_xpm[] = { "32 32 5 1", " c #FFFFFFFFFFFF", ". c #000000000000", "X c #BFBFBFBFBFBF", "o c #5A5A5A5A5A5A", "O c #0000FFFF0000", " ......................... ", " . X. ", " . XXXXXXXXXXXXXXXXXXXXXo. ", " . ooooooooooooooooooooXo. ", " . o................... o. ", " . o..O.OO.O.OOO.O.O.O. o. ", " . o.OO..O.O.O.O.OOO.O. o. ", " . o................... o. ", " . X o. ", " . XXXXXXXXXXXXXXXXXXXXXo. ", " . X XXX XXX XXo. ", " . X XXXoXX XXXoXX XXXoXo. ", " . X XXXoXX XXXoXX XXXoXo. ", " . XXooooXXXooooXXXooooXo. ", " . XXXXXXXXXXXXXXXXXXXXXo. ", " . X XXX XXX XXo. ", " . X XXXoXX XXXoXX XXXoXo. ", " . X XXXoXX XXXoXX XXXoXo. ", " . XXooooXXXooooXXXooooXo. ", " . XXXXXXXXXXXXXXXXXXXXXo. ", " . X XXX XXX XXo. ", " . X XXXoXX XXXoXX XXXoXo. ", " . X XXXoXX XXXoXX XXXoXo. ", " . XXooooXXXooooXXXooooXo. ", " . XXXXXXXXXXXXXXXXXXXXXo. ", " . X XXX XXX XXo. ", " . X XXXoXX XXXoXX XXXoXo. ", " . X XXXoXX XXXoXX XXXoXo. ", " . XXooooXXXooooXXXooooXo. ", " . XXXXXXXXXXXXXXXXXXXXXo. ", " .Xoooooooooooooooooooooo. ", " ......................... "}; gspiceui-1.1.00+dfsg/src/icons/sim-edit.xpm0000644000000000000000000000157512124473156017176 0ustar rootroot/* XPM */ static const char * sim_edit_xpm[ ] = { "24 24 5 1", " c None", ". c #00008B8B0000", "X c #000050500000", "o c #000000000000", "O c #757573737373", " ", " ", " ", " ", " ", " ", " ", " ........ ", " X. . ", " ooooo. . ", " OOOOOX. . ", " X. .ooooo ", " X. .OOOO ", " ooooo. . ", " OOOOOX. .X ", " X........X ", " XXXXXXXXX ", " ", " ", " ", " ", " ", " ", " " }; gspiceui-1.1.00+dfsg/src/icons/sim-create.xpm0000644000000000000000000001234012124473156017504 0ustar rootroot/* XPM */ static const char * sim_create_xpm[ ] = { "22 22 232 2", " c None", ". c #8F7F6E", "+ c #8B7C6B", "@ c #887969", "# c #857666", "$ c #817364", "% c #7E7062", "& c #7B6D5F", "* c #776B5D", "= c #74685A", "- c #8A7B6A", "; c #FFFFFF", "> c #73675A", ", c #898989", "' c #6A6054", ") c #867767", "! c #6F6357", "~ c #C9C9C9", "{ c #827464", "] c #828282", "^ c #C6C6C6", "/ c #5D544A", "( c #7E7061", "_ c #665C51", ": c #63594E", "< c #60564C", "[ c #5C5449", "} c #595147", "| c #494214", "1 c #796C5E", "2 c #5C5B5B", "3 c #FEFCFB", "4 c #A4A4A4", "5 c #747474", "6 c #554D44", "7 c #FEF9D9", "8 c #FEF9D4", "9 c #75695B", "0 c #CC0606", "a c #FDFBF9", "b c #FCF7F3", "c c #FAF4EE", "d c #F0EAE6", "e c #C1BAB3", "f c #504941", "g c #FEFBE4", "h c #FEFADF", "i c #FEF9DA", "j c #FEF9D5", "k c #FEF8CF", "l c #716558", "m c #5A5552", "n c #7E7873", "o c #9F958D", "p c #7D746E", "q c #D8D0C8", "r c #4C463E", "s c #FEFCEF", "t c #FEFBEA", "u c #FEFBE5", "v c #FEFAE0", "w c #FBF5F0", "x c #F9F1EA", "y c #F8EEE5", "z c #F7EADF", "A c #F5E7DA", "B c #D6CABF", "C c #48423B", "D c #FEFDFB", "E c #FEFDF5", "F c #FEFCF0", "G c #FEFBEB", "H c #FEFBE6", "I c #FEFADC", "J c #FEF9D6", "K c #FEF8D1", "L c #685E52", "M c #807C79", "N c #5A5653", "O c #C0B5AC", "P c #998778", "Q c #7B6F65", "R c #7A6D62", "S c #D3C3B4", "T c #443F38", "U c #F8EEC3", "V c #F7EBC0", "W c #FEFCF1", "X c #FEFCEC", "Y c #FEFAE2", "Z c #FEF9D7", "` c #FEF8D2", " . c #645A4F", ".. c #FAF2EC", "+. c #F9EFE7", "@. c #F7EBE1", "#. c #F6E8DC", "$. c #F4E4D6", "%. c #F3E0D0", "&. c #F2DDCB", "*. c #D1BCAA", "=. c #3F3B35", "-. c #F6EABD", ";. c #F4E8B9", ">. c #F2E6B5", ",. c #F0E4B1", "'. c #FEFADD", "). c #FEF9D8", "!. c #FEF8D3", "~. c #60574C", "{. c #7F7A76", "]. c #595551", "^. c #7B6F64", "/. c #564C45", "(. c #786A5C", "_. c #CEB6A0", ":. c #3B3732", "<. c #F3E7B7", "[. c #F1E4B3", "}. c #EFE2AF", "|. c #EEE0AB", "1. c #ECDEA7", "2. c #FEFADE", "3. c #C3AE59", "4. c #5C5349", "5. c #F8EDE3", "6. c #F6E9DD", "7. c #F5E5D8", "8. c #F3E2D2", "9. c #F2DECD", "0. c #F1DAC7", "a. c #EFD7C2", "b. c #EED3BC", "c. c #CCAF97", "d. c #37342F", "e. c #F0E3B1", "f. c #EEE1AD", "g. c #EDDFA9", "h. c #EBDDA5", "i. c #E9DAA1", "j. c #E7D89D", "k. c #E6D699", "l. c #C6B05B", "m. c #BCA954", "n. c #574F46", "o. c #D7CCC1", "p. c #D5C7BA", "q. c #D3C2B3", "r. c #D1BEAC", "s. c #CFB9A5", "t. c #CEB49F", "u. c #CCB097", "v. c #CAAB90", "w. c #C9A88C", "x. c #33302C", "y. c #EDE0AA", "z. c #ECDEA6", "A. c #EADBA2", "B. c #E8D99E", "C. c #E6D79A", "D. c #E5D596", "E. c #E3D392", "F. c #BFAB56", "G. c #B6A34F", "H. c #534C43", "I. c #504940", "J. c #49433C", "K. c #464039", "L. c #423E37", "M. c #3F3B34", "N. c #3C3832", "O. c #383530", "P. c #35322D", "Q. c #322F2B", "R. c #2F2D29", "S. c #EBDCA4", "T. c #E9DAA0", "U. c #E7D89C", "V. c #E5D698", "W. c #E4D494", "X. c #E2D190", "Y. c #E0CF8C", "Z. c #B9A551", "`. c #AF9D4A", " + c #A69643", ".+ c #9D8E3C", "++ c #948636", "@+ c #8B7E2F", "#+ c #827628", "$+ c #E4D596", "%+ c #E2D292", "&+ c #E1D08E", "*+ c #DFCE8A", "=+ c #DDCC86", "-+ c #B2A04C", ";+ c #A99845", ">+ c #A0903E", ",+ c #978837", "'+ c #8E8031", ")+ c #85782A", "!+ c #7C7123", "~+ c #E5D598", "{+ c #E3D394", "]+ c #E1D190", "^+ c #DECD88", "/+ c #DCCB84", "(+ c #DAC880", "_+ c #AC9A47", ":+ c #A29240", "<+ c #998A39", "[+ c #908333", "}+ c #877B2C", "|+ c #7E7325", "1+ c #756B1E", "2+ c #DFCE89", "3+ c #DDCC85", "4+ c #DBC981", "5+ c #D9C77D", "6+ c #D8C579", "7+ c #A59442", "8+ c #9C8D3B", "9+ c #938535", "0+ c #8A7D2E", "a+ c #817527", "b+ c #D8C67B", "c+ c #D7C477", "d+ c #D5C273", "e+ c #9F8F3D", "f+ c #968737", "g+ c #8C7F30", "h+ c #D2BE6D", "i+ c #988938", " . + @ # $ % & * = ", " - ; ; ; ; ; ; > , ' ", " ) ; ; ; ; ; ; ! ; ~ ' ", " { ; ] ~ ] ^ ; ' ~ ; , / ", " ( ; ; ; ; ; ; _ : < [ } ", " | | 1 ; ] 2 ~ ] ~ 3 ^ 4 5 6 ", " | | 7 8 | 9 ; 0 ; ; ; a b c d e f ", " | | g h i j k l ; 0 0 ^ ] m n o p q r ", " | | s t u v 0 0 0 0 0 0 0 0 w x y z A B C ", "| D E F G H 0 I J K L ; 0 0 M N O P Q R S T ", "| U V W X 0 Y I Z ` .; 0 ..+.@.#.$.%.&.*.=.", "| -.;.>.,.0 Y '.).!.~.; {.].O P ^./.P (._.:.", "| <.[.}.|.1.0 2.7 3.4.; 5.6.7.8.9.0.a.b.c.d.", "| e.f.g.h.i.j.k.l.m.n.q o.p.q.r.s.t.u.v.w.x.", "| y.z.A.B.C.D.E.F.G.H.I.r J.K.L.M.N.O.P.Q.R.", "| S.T.U.V.W.X.Y.Z.`. +.+++@+#+| ", "| B.C.$+%+&+*+=+-+;+>+,+'+)+!+| ", "| ~+{+]+Y.^+/+(+_+:+<+[+}+|+1+| ", " | | 2+3+4+5+6+7+8+9+0+a+| | ", " | | b+c+d+e+f+g+| | ", " | | h+i+| | ", " | | " }; gspiceui-1.1.00+dfsg/src/icons/help.xpm0000644000000000000000000000260412124473156016405 0ustar rootroot/* XPM */ static const char * help_xpm[ ] = { "32 32 8 1", " c None", ". c #800080", "X c #000000", "o c #808080", "O c #808000", "+ c #FFFF00", "@ c #C0C0C0", "# c #FFFFFF", " ", " ", " ", " ", " ", " ..X ", " .o..XX ", " .o.....XX ", " .o........XX ", " .o....O++O...XX ", " .o....++++++....XX ", " .o......O..++O....X ", " .o.........O++O...X ", " .o.......O++++O...XX ", " .o.......O++OO....XoX ", " .o.........OO.....Xo@X ", " .XXX.....O+O......Xo@@X ", " .XooXX...O+O.....Xo@@@XX ", " .X@@ooXX........Xo@@@o.X ", " .X@###ooXX.....Xo@@@o.X ", " .X@#####ooXX..Xo@@@o.X ", " ...oo#####ooXXo@@@o.X ", " XX..oo#####oo@@@o.X ", " XX..oo#####@@o.X ", " XX..oo###@o.X ", " XX..oo#o.X ", " XX..o.X ", " XX.X ", " X ", " ", " ", " " }; gspiceui-1.1.00+dfsg/src/icons/sim-run.xpm0000644000000000000000000001134512124473156017051 0ustar rootroot/* XPM */ static const char * sim_run_xpm[ ] = { "22 22 204 2", " c None", ". c #0C0C0A", "+ c #242421", "@ c #DCDEDC", "# c #DCDDDC", "$ c #242321", "% c #000000", "& c #171715", "* c #393837", "= c #F3F3F6", "- c #F2F3F8", "; c #383736", "> c #191918", ", c #B4B4B4", "' c #DFDEE7", ") c #3A3831", "! c #B5B7B6", "~ c #C5C9C9", "{ c #C6C8C9", "] c #B9BBB7", "^ c #F3F4F8", "/ c #BEBFBE", "( c #11100E", "_ c #D5D3D1", ": c #CACED2", "< c #9A9A94", "[ c #8C826B", "} c #8E7A57", "| c #8D7A56", "1 c #8F846F", "2 c #9E9E98", "3 c #DADEE1", "4 c #E0E0DE", "5 c #E6E8EE", "6 c #D2D3D2", "7 c #0C0B09", "8 c #403F37", "9 c #C7C7C2", "0 c #A9ACAE", "a c #6C5F47", "b c #BB883C", "c c #E1A647", "d c #E7AD50", "e c #EAB052", "f c #E3AB4B", "g c #B98C43", "h c #695F46", "i c #B9BCBE", "j c #D1D1CD", "k c #2B2A29", "l c #BFC2CA", "m c #7A6B50", "n c #E2A348", "o c #E5A44A", "p c #E6AD53", "q c #ECB65A", "r c #F0BA64", "s c #EBB96C", "t c #F9C57C", "u c #E6AF61", "v c #7E6E52", "w c #D5D8DF", "x c #2C2B29", "y c #20201E", "z c #B0B1AF", "A c #847152", "B c #C79742", "C c #E1A650", "D c #E6AF5B", "E c #A5824E", "F c #A78552", "G c #F2C488", "H c #F8D09F", "I c #FFD49C", "J c #CE9B53", "K c #C4C6C6", "L c #21201F", "M c #161612", "N c #C5C5C4", "O c #FDFEFF", "P c #D9D7D5", "Q c #C0C2C5", "R c #A89A84", "S c #DBA343", "T c #D8A348", "U c #EEB35C", "V c #7E5E2F", "W c #110E0A", "X c #100B02", "Y c #927148", "Z c #FFE4B1", "` c #FBD8A8", " . c #F2C084", ".. c #A29884", "+. c #D7DAD9", "@. c #DFDFDC", "#. c #FFFFFF", "$. c #D2D3D6", "%. c #11110D", "&. c #979592", "*. c #D5D4D6", "=. c #BFBDB8", "-. c #B9BBBE", ";. c #BFAF94", ">. c #D79D43", ",. c #DAA34D", "'. c #EEB660", "). c #544025", "!. c #FFEBB5", "~. c #FCE1AE", "{. c #F5CC96", "]. c #C2B5A1", "^. c #D3D4D0", "/. c #C1C0BB", "(. c #DADAD8", "_. c #9E9D9C", ":. c #191814", "<. c #9B9C99", "[. c #D9CAB4", "}. c #D79F48", "|. c #E5AC54", "1. c #ECB972", "2. c #FFD59A", "3. c #FFFABF", "4. c #FBF1BD", "5. c #FFECB7", "6. c #E8C591", "7. c #E7DDD2", "8. c #B8B8B4", "9. c #181712", "0. c #080705", "a. c #58554C", "b. c #BEBBB5", "c. c #F2E5D5", "d. c #DFA448", "e. c #ECB870", "f. c #FAD0A2", "g. c #FFF1BC", "h. c #FEF7C1", "i. c #FCF4BF", "j. c #FFF6BE", "k. c #F1D39E", "l. c #E1D3C1", "m. c #F1F3F1", "n. c #060603", "o. c #86847B", "p. c #BBBEBD", "q. c #E9B771", "r. c #EEBA79", "s. c #F5CC99", "t. c #F8D9A4", "u. c #FADEA8", "v. c #FAD8A6", "w. c #E9EBE6", "x. c #9F9D91", "y. c #E9E7E3", "z. c #BFBEBB", "A. c #807C74", "B. c #AEB0B0", "C. c #E4DFDC", "D. c #F8EDE1", "E. c #FEEDD0", "F. c #FFEBC6", "G. c #FDF3E0", "H. c #FFFDF3", "I. c #D4D5D2", "J. c #9D9A8F", "K. c #D9D9D5", "L. c #FBFBFB", "M. c #090807", "N. c #BDBBB5", "O. c #E2E1DD", "P. c #CECCC7", "Q. c #616058", "R. c #6D6C65", "S. c #9C9E9B", "T. c #B1B4B1", "U. c #B2B5B1", "V. c #A3A49D", "W. c #76756D", "X. c #E7E6E7", "Y. c #F8FAFE", "Z. c #CFD1CF", "`. c #080805", " + c #9C9A90", ".+ c #1E1D18", "++ c #201E17", "@+ c #92918E", "#+ c #D0CECB", "$+ c #1B1A12", "%+ c #1C1B16", "&+ c #A8A7A2", "*+ c #282721", "=+ c #3F3C33", "-+ c #F8F7F8", ";+ c #27261F", ">+ c #2D2C28", ",+ c #BFBEB6", "'+ c #C2C0BB", ")+ c #2E2D2A", "!+ c #0F0E0D", "~+ c #0E0E0B", "{+ c #040403", "]+ c #050403", " ", " . . ", " + @ # $ ", " % & * = - ; > % ", " % , ' % ) ) ! ~ { ] ) ) % ^ / % ", " ( ' ' _ : < [ } | 1 2 3 4 5 6 7 ", " 8 9 0 a b c d e f g h i j ) ", " k l m n o p q r s t u v w x ", " y ) ) z A B o C D E F G H I J A K ) ) L ", "M N O P Q R S T U V W X Y Z ` ...+.@.#.$.% ", "%.&.*.=.-.;.>.,.'.). ).!.~.{.].^./.(._.% ", " :.% ) <.[.}.|.1.2.).).3.4.5.6.7.8.) % 9. ", " 0.a.b.c.d.e.f.g.h.i.j.k.l.m.a.n. ", " % o.p.c.q.r.s.t.u.v.c.w.x.% ", " % y.z.A.B.C.D.E.F.G.H.I.J.K.L.% ", " M.N.O.P.Q.) R.S.T.U.V.W.) Q.X.Y.Z.`. ", " % Q. +a..+) ++@+#+#+@+$+) %+a.&+Q.% ", " % *+) =+-+#.=+ ) ;+% ", " >+,+'+)+ ", " !+a.a.~+ ", " {+]+ ", " " }; gspiceui-1.1.00+dfsg/src/icons/html-forward.xpm0000644000000000000000000000110612124473156020057 0ustar rootroot/* XPM */ static const char * html_forward_xpm[ ] = { /* columns rows colors chars-per-pixel */ "18 17 3 1", " c black", ". c black", "X c None", /* pixels */ "..XXXXXXXXXXXXXXXX", "....XXXXXXXXXXXXXX", "......XXXXXXXXXXXX", "........XXXXXXXXXX", "..........XXXXXXXX", "............XXXXXX", "..............XXXX", "................XX", "..................", "................XX", "..............XXXX", "............XXXXXX", "..........XXXXXXXX", "........XXXXXXXXXX", "......XXXXXXXXXXXX", "....XXXXXXXXXXXXXX", "..XXXXXXXXXXXXXXXX" }; gspiceui-1.1.00+dfsg/src/Version.hpp0000644000000000000000000001513312520123431015737 0ustar rootroot//************************************************************************************************** // Version.hpp * // ------------- * // Description : Version specifier for the GNU Spice GUI application. * // Started : 2003-08-15 * // Last Update : Refer below * // Copyright : (C) 2003 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef VERSION_HPP #define VERSION_HPP #define APP_NAME wxT("gSpiceUI") #define APP_VERSION wxT("1.1.00") #define APP_DATE wxT("2015-04-29") #define APP_COPYRIGHT wxT("Copyright (C) MSWaters 2003") #endif // VERSION_HPP //************************************************************************************************** // THINGS TO DO : (Refer also to the ToDo file) // // 2015-04-24 Allow .PARAM and other SPICE commands thro. to the simulation file. // 2015-04-17 If GNU-Cap binary crashes (eg. it can't load library libgnucap.so) gSpiceUI crashes. // 2015-04-17 GNU-Cap DC analysis results headers contain part of the results file name instead of // the column labels. This happens when gnucap crashes (eg. it can't load library // libgnucap.so). // 2015-04-16 When signal source sync'ing is enable the level is lost when switching between panels. // 2015-04-16 The signal source in the simulation file should specify DC and/or AC volts. Eg. for an // OP analysis DC volts are intended and for an AC analysis AC volts are intended. // 2015-04-15 Executing a GNU-Cap FO analysis on demos/bjt-amp-ce-2.sch crashes gSpiceUI. The // broken-ness is in PrcGnuCap::bFmtResultsFO( ). // 2015-02-09 Preference to use Degrees or Radian doesn't work for NG-Spice. // 2015-02-20 All the schematics in sch/demos should work, many don't. // 2015-02-12 Create a MOSFET demo. using the ARF446. // 2015-02-10 Close all bug reports. // 2010-04-15 Still need to check if the locale stuff works. //************************************************************************************************** // NG-Spice : // // 2010-03-31 NG-Spice seems to be broken for JFETs. // 2009-10-06 NUMDGT should set the number digits to print when printing tables of data. Doesn't // work in batch mode. // 2007-05-11 PRINT statement parser is broken. Eg. PRINT TRAN V(0,1) V(0,2) is interpreted as one // parameter -V(1)-V(2) instead of two; in contrast PRINT TRAN V(1,0) V(2,0) is // interpreted correctly. In addition eg. PRINT AC VDB(0,1) won't run at all. // Notes : The .PRINT statement parsing starts in the function fixem( char * ) // (src/frontend/dotcards.c) which calls gettoks( char * ) which calls // gettok( char ** ) (src/misc/string.c). I think the bug is in gettok( char ** ) // or how it is used by gettoks( char * ). //************************************************************************************************** // GNU-Cap : // // 2010-03-22 GNU-Cap seems to be broken for JFETs. // 2009-08-21 For GNU-Cap AC analysis where a NPN BJT is used, get an error message before each line // of the results (eg. "open circuit: internal node 2"). // 2005-04-21 At times the first result line from a DC analysis is clearly incorrect. // 2005-04-20 In the AC analysis the following source line is not interpreted correctly : // "Vin 2 3 GENERATOR(1) AC 100.00m". The AC magnitude "100.00m" is not interpreted as // "0.1"; replace it with "0.1" and everything works OK. // 2004-03-29 The PRINT command doesn't produce a label for the independent parameter ie. // temperature for OP, voltage for DC. //************************************************************************************************** // gnetlist : // // 2005-07-19 If a relative model file path specified in schematic file the path is regarded as // relative to the CWD not the schematic file path which would be more logical. // 2005-04-12 When schematic file imported via command line "gnetlist.log" left in gspiceui bin // directory. When schematic file imported via GUI "gnetlist.log" left in schematic // directory. //************************************************************************************************** // Gaw : // //************************************************************************************************** // Gwave : // // 2014-04-15 Gwave appears to be dead. Hasn't been updated since 2009. // 2014-04-15 Can no longer compile the sources owing to Guile dependencies. // 2004-03-29 GWave can't handle the banner that GNU-Cap includes in it's output. //************************************************************************************************** // wxWidgets Library Bugs : // // 2007-09-07 v2.8.5 Cannot set the font in the choice control in the PnlValue class when no file // loaded at startup. It should inherit the font from it's parent; every other // control does. This seems to be bug in wxWidgets v2.8.5 and v2.6.3. // 2004-08-13 v2.4.2 In class wxFileDialog styles can only be set in the constructor. The method // SetStyle( ) does nothing. // 2003-11-17 v2.4.1 In class wxFileDialog wildcards can only be set in the constructor. The // method SetWildcard( ) is not properly implemented. See constructor in // src/generic/filedlgg.cpp and set method in include/wx/generic/filedlgg.h. //************************************************************************************************** gspiceui-1.1.00+dfsg/src/CmdLinePcr.hpp0000644000000000000000000000751412453731012016303 0ustar rootroot//************************************************************************************************** // CmdLinePcr.hpp * // ---------------- * // Description : This class does the command line processing. * // Started : 2005-02-22 * // Last Update : 2015-01-09 * // Copyright : (C) 2005 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef CMDLINEPCR_HPP #define CMDLINEPCR_HPP // System includes //#include // Application includes #include "Version.hpp" #include "TypeDefs.hpp" #include "process/PrcGNetList.hpp" // wxWidgets includes #include #include #include // Local constant declarations #define CLP_NGSPICE wxT("NG-Spice") #define CLP_GNUCAP wxT("GNU-Cap") #define CLP_GAW wxT("Gaw") #define CLP_GWAVE wxT("Gwave") //************************************************************************************************** class CmdLinePcr : wxCmdLineParser { private : int m_iArgC; wxChar ** m_ppsArgV; wxString m_osSimrType; wxString m_osAnaType; wxString m_osGuileProc; wxString m_osViewer; wxString m_osConfigFile; wxString m_osNetLstFile; wxArrayString m_osaSchemFiles; bool m_bCleanCfgFile; bool bProcOption_a( int * piArg ); // Analysis page specifier bool bProcOption_c( int * piArg ); // Rebuild/clean configuration file bool bProcOption_d( int * piArg ); // Print debug info. to console bool bProcOption_g( int * piArg ); // Specify Guile procedure for importing schematic file/s bool bProcOption_h( int * piArg ); // Display usage and exit bool bProcOption_r( int * piArg ); // Specify a configuration file bool bProcOption_s( int * piArg ); // Simulator engine specifier bool bProcOption_v( int * piArg ); // Display app. version and exit bool bProcOption_w( int * piArg ); // Specify the waveform viewer to use bool bCheckFiles ( int * piArg ); // Check that file names are correct bool bProcSchems ( int * piArg ); // Schematic file name/s bool bProcNetList ( int * piArg ); // Netlist file name void Usage( void ); void Version( void ); void SetConfig( void ); void CleanCfgFile( void ); public : CmdLinePcr( void ); ~CmdLinePcr( ); bool bClear( void ); bool bSetCmdLine( int iArgC, wxChar ** ppsArgV ); bool bProcArgs( void ); const wxString & rosGetConfigFile( void ) { return( m_osConfigFile ); } void Print( const wxString & rosPrefix=wxT(" ") ); }; //************************************************************************************************** #endif // CMDLINEPCR_HPP gspiceui-1.1.00+dfsg/src/TypeDefs.hpp0000644000000000000000000002561712510457667016071 0ustar rootroot//************************************************************************************************** // TypeDefs.hpp * // -------------- * // Description : This header file mostly contains enumerated type definitions which may be used * // anywhere in the application. * // Started : 2007-09-06 * // Last Update : 2015-04-06 * // Copyright : (C) 2007 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef TYPEDEFS_HPP #define TYPEDEFS_HPP // System Includes #include #include #include #include // wxWidgets Includes #include #include // External Variables extern bool g_bDebug; // Declared in App_gSpiceUI.hpp //************************************************************************************************** // Temporary macro definitions to facilitate transition from wxWidgets library version 2.x to 3.x #ifndef wxIMPLEMENT_APP #define wxIMPLEMENT_APP(X) IMPLEMENT_APP(X) #endif #ifndef wxBEGIN_EVENT_TABLE #define wxBEGIN_EVENT_TABLE(X,Y) BEGIN_EVENT_TABLE(X,Y) #endif #ifndef wxEND_EVENT_TABLE #define wxEND_EVENT_TABLE( ) END_EVENT_TABLE( ) #endif #ifndef wxDECLARE_EVENT_TABLE #define wxDECLARE_EVENT_TABLE( ) DECLARE_EVENT_TABLE( ) #endif //************************************************************************************************** // Type definitions //typedef unsigned long ulong; //typedef unsigned int uint; //typedef unsigned char uchar; typedef wxStaticText wxLabel; //************************************************************************************************** // Operating System specific macro declarations #ifdef __WXOSX__ #define EXP10(X) pow(10.0,X) #define EXP10F(X) powf(10.0,X) #else #define EXP10(X) exp10(X) #define EXP10F(X) exp10f(X) #endif //************************************************************************************************** // Useful #defines #define GUI_CTRL_HT 26 // The height of the PnlValue control in pixels // The following #define values where determined using the test utility test_CnvtType #define NOVAL_UINT UINT_MAX // UINT_MAX = 4294967295 #define NOVAL_ULNG ULONG_MAX // ULONG_MAX = 18446744073709551615 #define NOVAL_INT INT_MIN // INT_MIN = -2147483648 // INT_MAX = 2147483647 #define NOVAL_LNG LONG_MIN // LONG_MIN = -9223372036854775808 // LONG_MAX = 9223372036854775807 #define NOVAL_FLT FLT_MIN // FLT_MIN = 1.17549e-38 // FLT_MAX = 3.40282e+38 #define NOVAL_DBL DBL_MIN // DBL_MIN = 2.22507e-308 // DBL_MAX = 1.79769e+308 //************************************************************************************************** // Fonts #define FONT_NORM wxFont( 9, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL ) #define FONT_BOLD wxFont( 9, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD ) #define FONT_SLANT wxFont( 9, wxFONTFAMILY_SWISS, wxFONTSTYLE_SLANT, wxFONTWEIGHT_LIGHT ) #define FONT_MONO wxFont( 8, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL ) //************************************************************************************************** // Binary file names #define BIN_GNETLIST wxT("gnetlist") #define BIN_GSCHEM wxT("gschem") #define BIN_GWAVE wxT("gwave2") #define BIN_GAW wxT("gaw") #define BIN_GNUCAP wxT("gnucap") #define BIN_NGSPICE wxT("ngspice") //************************************************************************************************** // Enumerated types // Enumerated type for the various simulator engine types enum eTypeSimEng { eSIMR_GNUCAP, // GNU-Cap eSIMR_NGSPICE, // NG-Spice eSIMR_NONE, // No simulation engine specified eSIMR_FST = eSIMR_GNUCAP, eSIMR_LST = eSIMR_NGSPICE }; // Enumerated type for the various waveform viewers types enum eTypeView { eVIEW_GWAVE, // GWave eVIEW_GAW, // Gaw eVIEW_NONE, // No waveform viewer specified eVIEW_FST = eVIEW_GWAVE, eVIEW_LST = eVIEW_GAW }; // Enumerated type for the various command types which may be performed enum eTypeCmd { eCMD_OP, // Quiescent operating point analysis eCMD_DC, // DC analysis eCMD_AC, // AC analysis eCMD_TR, // Transient analysis eCMD_FO, // Fourier analysis eCMD_DI, // Distortion analysis eCMD_NO, // Noise analysis eCMD_PZ, // Pole-zero analysis eCMD_SE, // Sensitivity analysis eCMD_TF, // Transfer function analysis eCMD_OPT, // OPTIONS command eCMD_IC, // Initial conditions command eCMD_PR, // PRINT command eCMD_GEN, // GENERATOR command (GNU-Cap only) eCMD_NONE, // No analysis specified eCMD_FST = eCMD_OP, eCMD_LST = eCMD_GEN, eCMD_ANA_FST = eCMD_OP, eCMD_ANA_LST = eCMD_TF }; // Enumerated type for the various components enum eTypeCpnt { eCPNT_CAP, // Capacitor eCPNT_RES, // Resistor eCPNT_IND, // Inductor eCPNT_CIND, // Coupled (Mutual) Inductors eCPNT_DIODE, // Diode eCPNT_BJT, // BJT (Bipolar Junction Transistor) eCPNT_JFET, // JFET (Junction Field-Effect Transistor) eCPNT_MOSFET, // MOSFET (Metal-Oxide Semiconductor Field-Effect Transistor) eCPNT_MESFET, // MESFET (Metal–Semiconductor Field Effect Transistor) eCPNT_VCVS, // Voltage Controlled Voltage Source eCPNT_CCCS, // Current Controlled Current Source eCPNT_VCCS, // Voltage Controlled Current Source eCPNT_CCVS, // Current Controlled Voltage Source eCPNT_TLINE, // Lossless Transmission Line eCPNT_LTRA, // Lossy Transmission Line (LTRA) eCPNT_URC, // Uniform Distributed RC Transmission Line (URC) eCPNT_TXL, // Single Lossy Transmission Line (TXL) eCPNT_CPL, // Coupled Multi-conductor Transmission Line (CPL) eCPNT_ICS, // Independent Current Source eCPNT_IVS, // Independent Voltage Source eCPNT_NLDS, // Non-Linear Dependent Source eCPNT_NLDCS, // Non-Linear Dependent Current Source eCPNT_NLDVS, // Non-Linear Dependent Voltage Source eCPNT_CCSW, // Current Controlled Switch eCPNT_VCSW, // Voltage Controlled Switch eCPNT_SUBCKT, // Sub-circuit eCPNT_LOGIC, // Logic Device eCPNT_STJ, // Super-conducting Tunnel Junction eCPNT_NONE, // No component specified eCPNT_FST = eCPNT_CAP, eCPNT_LST = eCPNT_STJ }; // The various variable types enum eTypeValue { eVALUE_BIN, // Binary eVALUE_OCT, // Octal eVALUE_HEX, // Hexadecimal eVALUE_INT, // Integer eVALUE_FLT, // Floating point eVALUE_SCI, // Floating point (scientific notation) eVALUE_ENG, // Floating point (engineering notation) eVALUE_NONE, // No value type specified eVALUE_FST = eVALUE_BIN, eVALUE_LST = eVALUE_ENG }; // Enumerated type for the various types of units enum eTypeUnits { eUNITS_CAP, // Capacitance eUNITS_IND, // Inductance eUNITS_RES, // Resistance eUNITS_COND, // Conductance eUNITS_VOLT, // Voltage eUNITS_CURR, // Current eUNITS_TIME, // Time eUNITS_FREQ, // Frequency eUNITS_CHRG, // Charge eUNITS_PHAD, // Phase / angle in Degree eUNITS_PHAR, // Phase / angle in Radian eUNITS_TMPC, // Temperature in Celcius eUNITS_TMPF, // Temperature in Fahrenheit eUNITS_PCT, // Percentage eUNITS_EXP, // Dimensionless (append an exponent) eUNITS_NONE, // No units specified eUNITS_FST = eUNITS_CAP, eUNITS_LST = eUNITS_EXP }; // Enumerated type for the various parameters which may be determined by analysis enum eTypeParam { ePARAM_VLT, // Node or component voltage ePARAM_CUR, // Node or component current ePARAM_PWR, // Node or component power ePARAM_RES, // Input and output resistance ePARAM_NONE, // No parameter specified ePARAM_FST = ePARAM_VLT, ePARAM_LST = ePARAM_RES }; // Enumerated type for the various sub-parameters which may be determined (AC analysis only) enum eTypeCpxPt { eCPXPT_MAG, // Magnitude of the complex node or component parameter eCPXPT_PHASE, // Phase of the complex node or component parameter eCPXPT_REAL, // Real part of the complex node or component parameter eCPXPT_IMAG, // Imaginary part of the complex node or component parameter eCPXPT_MAGDB, // Convert the magnitude to dBV eCPXPT_NONE, // No sub-parameter specified eCPXPT_FST = eCPXPT_MAG, eCPXPT_LST = eCPXPT_MAGDB }; // Enumerated type for the various step scale types enum eTypeScale { eSCALE_LIN, // Linear eSCALE_LOG, // Logarithmic eSCALE_DEC, // Decimal eSCALE_OCT, // Octal eSCALE_NONE, // No step scale specified eSCALE_FST = eSCALE_LIN, eSCALE_LST = eSCALE_OCT }; // Enumerated type for the initial conditions for a transient analysis enum eTypeInitC { eINITC_WARM, // Warm start eINITC_UICS, // Use initial conditions eINITC_COLD, // Cold start eINITC_NONE, // No initial conditions specified eINITC_FST = eINITC_WARM, eINITC_LST = eINITC_COLD }; // Enumerated type for the temporary file management strategy enum eTypeTmpFileMgt { eTFM_DELETE, // Automatically delete temporary files eTFM_PROMPT, // Prompt the user before deleting temporary files eTFM_KEEP, // Don't delete temporary files eTFM_NONE, // No temporary file management strategy specified eTFM_FST = eTFM_DELETE, eTFM_LST = eTFM_KEEP }; //************************************************************************************************** // Declare new array types (which are based on wxWidgets types) WX_DECLARE_OBJARRAY( wxFileName, ArrayFileName ); //************************************************************************************************** #endif // TYPEDEFS_HPP gspiceui-1.1.00+dfsg/src/App_gSpiceUI.hpp0000644000000000000000000000527112452501216016571 0ustar rootroot//************************************************************************************************** // App_gSpiceUI.hpp * // ------------------ * // Description : The main application class. It all begins here. * // Started : 2003-08-15 * // Last Update : 2015-01-05 * // Copyright : (C) 2003 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef APP_GSPICEUI_HPP #define APP_GSPICEUI_HPP // System includes //#include // In the following include using instead of at the request of a user running // Solaris 9 on a Ultra SPARC and Sun's C++ compiler. //#include ??? // Application includes #include "CmdLinePcr.hpp" #include "main/FrmMain.hpp" // wxWidgets includes #include // This flag indicates debug mode, if it's enabled gspiceui will produce lots of lovely console spew bool g_bDebug; //************************************************************************************************** class App_gSpiceUI : public wxApp { private : wxLocale m_oLocale; CmdLinePcr m_oCmdLnPcr; FrmMain * m_poFrmMain; public : App_gSpiceUI( void ); ~App_gSpiceUI( ); // Event handlers virtual bool OnInit ( void ); // virtual int OnRun ( void ); // virtual int MainLoop( void ); virtual int OnExit ( void ); // Leave this as the last line as private access is envoked by this macro // wxDECLARE_EVENT_TABLE( ); }; //************************************************************************************************** #endif // APP_GSPICEUI_HPP gspiceui-1.1.00+dfsg/src/process/0000755000000000000000000000000012513453663015273 5ustar rootrootgspiceui-1.1.00+dfsg/src/process/PrcGNetList.hpp0000644000000000000000000000707112470372523020144 0ustar rootroot//************************************************************************************************** // PrcGNetList.hpp * // ----------------- * // Description : Provides a programatic interface to the utility gnetlist which is used to * // generate netlist file from various schematic editor formats. * // Started : 2004-01-29 * // Last Update : 2015-02-16 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef PRCGNETLIST_HPP #define PRCGNETLIST_HPP // Application Includes #include "TypeDefs.hpp" #include "base/PrcBase.hpp" // wxWidgets Includes #include #include #include // Local Constant Declarations #define GNETLST_LOG_FILE wxT("gspiceui.log") // Default log file name #define GNETLST_GUILE_PROC wxT("spice-sdb") // Default Guile procedure #define GNETLST_USE_SCHEM wxT("use-schem-name") // Use schem. name for netlist #define GNETLST_CUR_PROC 100 // A value greater than the no. of Guile proc's //************************************************************************************************** class PrcGNetList : public PrcBase { private : size_t m_szGuileProc; // The Guile procedure specifier wxArrayString m_osaGuileProcs; // Array of all possible Guile procedures ArrayFileName m_ofnaSchemFiles; // The full names of the schematic file/s wxFileName m_ofnNetLstFile; // The full name of the list file void InitGuileProcs( void ); public : PrcGNetList( void ); ~PrcGNetList( ); bool bClear( void ); bool bSetGuileProc ( const wxString & rosGProc=GNETLST_GUILE_PROC ); bool bSetSchemFiles( const wxString & rosFNames ); bool bSetSchemFiles( const wxArrayString & rosaFNames ); bool bSetNetLstFile( const wxString & rosFName=GNETLST_USE_SCHEM ); const wxArrayString & rosaGetGuileProcs( void ) { return( m_osaGuileProcs ); } const wxString & rosGetGuileProc ( size_t szIndex=GNETLST_CUR_PROC ); const ArrayFileName & roaGetSchemFiles( void ) { return( m_ofnaSchemFiles ); } const wxFileName & rofnGetSchemFile ( size_t szIndex=0 ); const wxFileName & rofnGetNetLstFile( void ) { return( m_ofnNetLstFile ); } virtual bool bExec( void ); }; //************************************************************************************************** #endif // PRCGNETLIST_HPP gspiceui-1.1.00+dfsg/src/process/PrcNgSpice.hpp0000644000000000000000000000613612452502740020000 0ustar rootroot//************************************************************************************************** // PrcNgSpice.hpp * // ---------------- * // Description : This class provides the interface to the NG-Spice circuit simulator. * // Started : 2004-05-07 * // Last Update : 2015-01-05 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef PRCNGSPICE_HPP #define PRCNGSPICE_HPP // Application Includes #include "TypeDefs.hpp" #include "base/PrcSimEngBase.hpp" #include "netlist/SimnGnuCap.hpp" #include "ngspice/commands/CmdNgSpiceDC.hpp" #include "ngspice/commands/CmdNgSpiceAC.hpp" #include "ngspice/commands/CmdNgSpiceTR.hpp" #include "ngspice/commands/CmdNgSpicePR.hpp" #include "utility/CnvtType.hpp" // Local Constant Declarations #define NGSPICE_COL_WD 14 // Width of columns of data in results files //************************************************************************************************** class PrcNgSpice : public PrcSimEngBase { private : // Storage for the result file column labels wxString m_osColLbls; // Function to match a component to a set of node labels bool bMatchCpnt( SimnNgSpice & roSimn, wxString & rosToNodes ); // Functions to create the simulator commands void Convert2Nodes( wxArrayString & rosaCpnts, SimnNgSpice & roSimn ); // Create the WIDTH command wxString & rosMakeCmdWIDTH( wxString & rosCmdPR ); // Format the results file bool bFmtCommon ( void ); bool bFmtColLabels( void ); bool bFmtDataLines( void ); bool bFmtPhaseData( void ); // ??? (02/02/2006) Not yet implemented public : PrcNgSpice( void ); ~PrcNgSpice( ); // Create the process argument list virtual bool bMakeArgLst( SimnBase & roSimn ); // Format the results file virtual bool bFmtResults( void ); }; //************************************************************************************************** #endif // PRCNGSPICE_HPP gspiceui-1.1.00+dfsg/src/process/PrcNgSpice.cpp0000644000000000000000000003107312503014204017757 0ustar rootroot//************************************************************************************************** // PrcNgSpice.cpp * // ---------------- * // Started : 2004-05-07 * // Last Update : 2015-03-20 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "PrcNgSpice.hpp" //************************************************************************************************** // Constructor. PrcNgSpice::PrcNgSpice( void ) : PrcSimEngBase( ) { // Set the simulation engine type m_eSimEng = eSIMR_NGSPICE; // Set the simulator binary file name if it can be found bSetBinary( BIN_NGSPICE ); } //************************************************************************************************** // Destructor. PrcNgSpice::~PrcNgSpice( ) { } //************************************************************************************************** // Match a component to a set of node labels. // // Component voltages cannot be specified using the component label in the NG-Spice print statement. // The two node labels connected to the component must be specified. When parsing the print // statement the component label must be derived from the node labels. This may not work where // components are connected in parallel. The nodes are specified in the form "," // eg. "1,2". // // Argument List : // roSimn - The simulation object // rosToNodes - The nodes to match, also used to return the component label // // Return Values : // true - Success (a component with the specified nodes was found) // false - Failure bool PrcNgSpice::bMatchCpnt( SimnNgSpice & roSimn, wxString & rosToNodes ) { wxArrayString osaNodes; Component tCpnt; wxString os1; size_t sz1; // Argument validity checks if( rosToNodes.IsEmpty( ) ) return( false ); if( roSimn.m_oaCpnts.GetCount( ) <= 0 ) return( false ); if( rosToNodes.Freq( wxT(',') ) != 1 ) return( false ); // Extract the node labels osaNodes.Add( rosToNodes.BeforeFirst( wxT(',') ) ); osaNodes.Add( rosToNodes.AfterLast( wxT(',') ) ); // Attempt to match the nodes with a component for( sz1=0; sz1 80 ) osCmdWIDTH << wxT(".WIDTH OUT=") << i1; } return( osCmdWIDTH ); } //************************************************************************************************** // This function is a generic results file formatter which works in most circumstance. // // Return Values : // true - Success // false - Failure bool PrcNgSpice::bFmtCommon( void ) { wxString os1; size_t sz1, sz2; // This function requires the results file to be open if( ! m_oFileResults.IsOpened( ) ) return( false ); // Find the beginning of the data area (ie. the 1st line starting with "Index") for( sz1=0; sz1= (m_oFileResults.GetLineCount( )-1) ) { SetErrMsg( wxT("Couldn't find the data section in the results file.") ); return( false ); } // Delete everything before the data area sz2 = sz1; for( sz1=0; sz1 0 ) m_oFileResults.RemoveLine( 1 ); // Format the column header line bFmtColLabels( ); // Delete lines other than data lines for( sz1=1; sz1 2 ) { // Pad the column with spaces to the required width i1 = NGSPICE_COL_WD - (osLine.Length( ) % NGSPICE_COL_WD) + 1; if( i1 >= NGSPICE_COL_WD ) i1 = 1; osLine.Append( wxT(' '), i1 ); } // Add the next label to the line osLine << ostk1.GetNextToken( ); } osLine.Trim( ); // Remove trailing space characters m_oFileResults.GetFirstLine( ) = osLine; return( true ); } //************************************************************************************************** // Format a data lines in the results file. // // Return Values : // true - Success // false - Failure bool PrcNgSpice::bFmtDataLines( void ) { wxStringTokenizer ostk1; wxString osLine, os1; size_t sz1; double df1; int i1; // This function requires the results file to be open if( ! m_oFileResults.IsOpened( ) ) return( false ); for( sz1=1; sz1 //************************************************************************************************** class PrcGWave : public PrcBase { private : wxFileName m_ofnResults; // The full simulator results file name // Functions for filtering the results file for input to the viewer bool bFilterFile( void ); public : PrcGWave( void ); ~PrcGWave( ); bool bSetResults( const wxString & rosFileName ); const wxFileName & roGetResults( void ) { return( m_ofnResults ); } virtual bool bExec( void ); }; //************************************************************************************************** #endif // PRCGWAVE_HPP gspiceui-1.1.00+dfsg/src/process/PrcGaw.hpp0000644000000000000000000000477712452502740017177 0ustar rootroot//************************************************************************************************** // PrcGaw.hpp * // ------------ * // Description : Provides an interface to the utility gaw which is a waveform viewer. The user can * // view the raw simulation data or envoke this utility which plots the data * // graphically. * // Started : 2008-01-10 * // Last Update : 2015-01-05 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #ifndef PRCGAW_HPP #define PRCGAW_HPP // Application Includes #include "TypeDefs.hpp" #include "base/PrcBase.hpp" // wxWidgets Includes #include //************************************************************************************************** class PrcGaw : public PrcBase { private : wxFileName m_ofnResults; // The full simulator results file name // Functions for reformatting the results file for input to the viewer bool bFilterFile( void ); public : PrcGaw( void ); ~PrcGaw( ); bool bSetResults( const wxString & rosFileName ); const wxFileName & roGetResults( void ) { return( m_ofnResults ); } virtual bool bExec( void ); }; //************************************************************************************************** #endif // PRCGAW_HPP gspiceui-1.1.00+dfsg/src/process/PrcGSchem.cpp0000644000000000000000000001221212450537312017602 0ustar rootroot//************************************************************************************************** // PrcGSchem.cpp * // --------------- * // Started : 2008-02-18 * // Last Update : 2014-12-30 * // Copyright : (C) 2004 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "PrcGSchem.hpp" //************************************************************************************************** // Constructor. PrcGSchem::PrcGSchem( void ) : PrcBase( wxPROCESS_REDIRECT ) { // Initialize the object attributes m_oafnSchems.Clear( ); m_ofnLog .Clear( ); // Attempt to set and find the appropriate binary bSetBinary( BIN_GSCHEM ); } //************************************************************************************************** // Destructor. PrcGSchem::~PrcGSchem( ) { } //************************************************************************************************** // Set the schematic file name/s. // // Argument List: // rosFileNames - A string containing the full path and file name/s // // Return Values: // true - Success // false - Failure bool PrcGSchem::bSetSchems( const wxString & rosFileNames ) { wxStringTokenizer ostk1; wxArrayString oas1; ostk1.SetString( rosFileNames ); while( ostk1.HasMoreTokens( ) ) oas1.Add( ostk1.GetNextToken( ) ); return( bSetSchems( oas1 ) ); } //************************************************************************************************** // Set the schematic file name/s. // // Argument List: // roasFileNames - A string array containing the full path and file name/s // // Return Values: // true - Success // false - Failure bool PrcGSchem::bSetSchems( const wxArrayString & roasFileNames ) { wxFileName ofn1; size_t szt1; // Clear the current list of schematic files m_oafnSchems.Clear( ); // Check the argument is empty if( roasFileNames.IsEmpty( ) ) return( true ); // Add the new schematic file name/s to the list for( szt1=0; szt1 // Local Constant Declarations #define GNUCAP_COL_WD 14 // Width of columns of data in results files //************************************************************************************************** class PrcGnuCap : public PrcSimEngBase { private: // The label for the X axis variable (missing in GNU-Cap OP & DC analysis) wxString m_osSwpSrcName; // Functions to check / format the circuit description lines // bool bFmtCpnts( ArrayComponent & roaCpnts ); ??? 17/08/2009 // Format the results file bool bFmtCommon ( void ); bool bFmtColLabels( void ); bool bFmtDataLines( void ); bool bFmtResultsFO( void ); public: PrcGnuCap( void ); ~PrcGnuCap( ); // Create the process argument list virtual bool bMakeArgLst( SimnBase & roSimn ); // Format the results file virtual bool bFmtResults( void ); }; //************************************************************************************************** #endif // PRCGNUCAP_HPP gspiceui-1.1.00+dfsg/src/process/PrcGaw.cpp0000644000000000000000000001743112450537312017162 0ustar rootroot//************************************************************************************************** // PrcGaw.cpp * // ------------ * // Started : 2008-01-10 * // Last Update : 2014-12-30 * // Copyright : (C) 2008 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "PrcGaw.hpp" //************************************************************************************************** // Constructor. PrcGaw::PrcGaw( void ) : PrcBase( wxPROCESS_REDIRECT ) { // Initialize the object attributes m_ofnResults.Clear( ); m_ofnLog .Clear( ); // Attempt to set and find the Gaw binary bSetBinary( BIN_GAW ); } //************************************************************************************************** // Destructor. PrcGaw::~PrcGaw( ) { } //************************************************************************************************** // Set the simulation results file name. // // Argument List: // psFileName - a string containing the full path and file name // // Return Values: // true - Success // false - Failure bool PrcGaw::bSetResults( const wxString & rosFileName ) { wxFileName ofn1; ofn1 = rosFileName; if( ofn1.GetPath( ).IsEmpty( ) ) ofn1.SetPath( wxT(".") ); if( ! ofn1.IsOk( ) ) return( false ); if( ! ofn1.FileExists( ) ) return( false ); m_ofnResults = ofn1; return( true ); } //************************************************************************************************** // Filter the results file so that the data viewer utility is happy with it. // // There are several things that a data viewer can object to : // - gwave doesn't like the GNU-Cap banner at the start to the results file, so it's removed here. // - gwave doesn't like error messages interspersed with the lines of data, so they are removed // here. // - For good measure lines and fields are also formatted. // // Return Values: // true - Success // false - Failure bool PrcGaw::bFilterFile( void ) { wxString os1; size_t szt1, szt2; wxChar oc1; bool bRtn=true; // Attempt to open the results file wxTextFile oFileCct( m_ofnResults.GetFullPath( ) ); if( ! oFileCct.Exists( ) ) return( false ); if( ! oFileCct.Open( ) ) return( false ); // Has this file been formatted already? if( oFileCct.GetFirstLine( ).GetChar( 0 ) == wxT('#') ) return( true ); // Find the beginning of the data area (ie. the last line beginning with '#') for( szt1=szt2=0; szt1 //************************************************************************************************** class PrcGSchem : public PrcBase { private : ArrayFileName m_oafnSchems; // The full names of the schematic file/s public : PrcGSchem( void ); ~PrcGSchem( ); bool bSetSchems( const wxString & rosFileNames ); bool bSetSchems( const wxArrayString & roasFileNames ); const wxString & rosGetSchems( void ); const ArrayFileName & roaGetSchems( void ) { return( m_oafnSchems ); } virtual bool bExec( void ); }; //************************************************************************************************** #endif // PRCGSCHEM_HPP gspiceui-1.1.00+dfsg/src/process/PrcGnuCap.cpp0000644000000000000000000003462412513453663017632 0ustar rootroot//************************************************************************************************** // PrcGnuCap.cpp * // --------------- * // Started : 2003-09-01 * // Last Update : 2015-03-30 * // Copyright : (C) 2003 by MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "PrcGnuCap.hpp" //************************************************************************************************** // Constructor. PrcGnuCap::PrcGnuCap( void ) : PrcSimEngBase( ) { // Set the simulation engine type m_eSimEng = eSIMR_GNUCAP; // Set the simulator binary file name if it can be found bSetBinary( BIN_GNUCAP ); } //************************************************************************************************** // Destructor. PrcGnuCap::~PrcGnuCap( ) { } //************************************************************************************************** // Check / format the component lines in the simulation object so that they are // compatible with GNU-Cap. Ie. add the substrate node to BJT components which // are missing it, the substrate node is assumed to be connected to the // collector. Eg. "Q1 nc nb ne BC109" would become "Q1 nc nb ne nc BC109". // // Argument List : // roaCpnts - An array of ArrayComponent objects // // Return Values : // true - Success // false - Failure /* ??? 17/08/2009 bool PrcGnuCap::bFmtCpnts( ArrayComponent & roaCpnts ) { wxString os1; size_t sz1; for( sz1=0; sz1SetPath( wxT("/GNU-Cap") ); // Delete unwanted columns of data for( ostk1=m_oFileResults.GetFirstLine(); !m_oFileResults.Eof(); ostk1=m_oFileResults.GetNextLine() ) { if( ostk1.CountTokens( ) != 7 ) continue; // Get the operator field ie. frequency os1 = ostk1.GetNextToken( ); // Do we want actual or relative magnitude? poConfig->Read( wxT("FO_MagRel"), &b1, false ); if( b1 ) for( sz1=0; sz1<3; sz1++ ) ostk1.GetNextToken( ); // Do we want dB magnitude? poConfig->Read( wxT("FO_MagDB"), &b1, false ); if( b1 ) { ostk1.GetNextToken( ); os1 << wxT(' ') << ostk1.GetNextToken( ); } else { os1 << wxT(' ') << ostk1.GetNextToken( ); ostk1.GetNextToken( ); } // Do we want phase? poConfig->Read( wxT("FO_Phase"), &b1, false ); if( b1 ) os1 << wxT(' ') << ostk1.GetNextToken( ); // Record the data m_oFileResults[ m_oFileResults.GetCurrentLine( ) ] = os1; } // Construct the data column headers os1 = wxT("#Freq"); for( ostk1=m_oFileResults.GetFirstLine( ); !m_oFileResults.Eof( ); ostk1=m_oFileResults.GetNextLine( ) ) { // Look for header lines if( ostk1.GetNextToken( ) != wxT("#") ) continue; os2 = ostk1.GetNextToken( ); // Do we want dB magnitude? os3 = os2; poConfig->Read( wxT("FO_MagDB"), &b1, false ); if( b1 ) os3.insert( 1, wxT("DB") ); os1 << wxT(' ') << os3; // Do we want phase? poConfig->Read( wxT("FO_Phase"), &b1, false ); if( b1 ) { os3 = os2; os3.insert( 1, wxT("P") ); os1 << wxT(' ') << os3; } // Remove the unwanted header lines if( m_oFileResults.GetCurrentLine( ) > 0 ) m_oFileResults.RemoveLine( m_oFileResults.GetCurrentLine( ) ); } m_oFileResults[ 0 ] = os1; // Determine the number of unique data lines ostk1 = m_oFileResults.GetFirstLine( ); ostk1 = m_oFileResults.GetNextLine( ); os1 = ostk1.GetNextToken( ); for( ostk1=m_oFileResults.GetNextLine( ), sz1=1; !m_oFileResults.Eof( ); ostk1=m_oFileResults.GetNextLine( ), sz1++ ) { if( os1 == ostk1.GetNextToken( ) ) break; } // Concatinate data lines according to frequency for( sz2=1; sz2<=sz1; sz2++ ) { m_oFileResults.GoToLine( sz2-1 ); ostk1=m_oFileResults.GetNextLine( ); os1 = ostk1.GetNextToken( ); for( ostk1=m_oFileResults.GetNextLine( ); !m_oFileResults.Eof( ); ostk1=m_oFileResults.GetNextLine( ) ) { if( os1 == ostk1.GetNextToken( ) ) m_oFileResults[ sz2 ] << wxT(' ') << ostk1.GetString( ); } } // Delete data lines which are no longer needed m_oFileResults.GoToLine( sz1+1 ); while( ! m_oFileResults.Eof( ) ) m_oFileResults.RemoveLine( m_oFileResults.GetCurrentLine( ) ); // Format the header line and data lines bFmtColLabels( ); bFmtDataLines( ); std::cerr << "PrcGnuCap::bFmtResultsFO( ) - 2\n"; // ??? return( true ); } //************************************************************************************************** // Format the data lines in the results file. // // Return Values : // true - Success // false - Failure bool PrcGnuCap::bFmtDataLines( void ) { wxStringTokenizer ostk1; wxString osLine, os1; size_t sz1; double df1; int i1; // This function requires the result file to have been opened if( ! m_oFileResults.IsOpened( ) ) return( false ); for( sz1=1; sz1= m_ofnaSchemFiles.GetCount( ) ) return( oFnEmpty ); return( m_ofnaSchemFiles[ szIndex ] ); } //************************************************************************************************** // Get a Guile procedure from the list of procedure names. // // Argument List : // szIndex - A zero based index to the procedure name // (If szIndex = CUR_SEL_PROC return currently selected procedure) // // Return Values : // Success - The procedure name // Failure - An empty string const wxString & PrcGNetList::rosGetGuileProc( size_t szIndex ) { static wxString osEmpty; if( szIndex == GNETLST_CUR_PROC ) szIndex = m_szGuileProc; if( szIndex >= m_osaGuileProcs.GetCount( ) ) return( osEmpty ); return( m_osaGuileProcs[ szIndex ] ); } //************************************************************************************************** // Make a netlist file from a schematic file. // // (Eg. using the following: gnetlist -v -g spice-sdb -o test.ckt test.sch) // // Return Values : // true - Success // false - Failure bool PrcGNetList::bExec( void ) { wxString osArgLst; wxString os1; size_t sz1; // Test file names needed by this function if( ! bBinExists( ) ) return( false ); if( m_ofnaSchemFiles.IsEmpty( ) ) return( false ); if( ! m_ofnNetLstFile.IsOk( ) ) if( ! bSetNetLstFile( ) ) return( false ); // Enable GNetList verbose mode osArgLst = wxT("-v"); // Specify the guile procedure name to be used osArgLst << wxT(" -g "); os1 = m_osaGuileProcs.Item( m_szGuileProc ); if( os1.IsEmpty( ) ) os1 = GNETLST_GUILE_PROC; osArgLst << os1; // Append input and output file names osArgLst << wxT(" -o ") << m_ofnNetLstFile.GetFullPath( ); for( sz1=0; sz150KHz oscillator frequencies are significantly under estimated. C 45500 41600 1 0 0 spice-model-1.sym { T 45600 42300 5 10 0 1 0 0 1 device=model T 45600 42200 5 10 1 1 0 0 1 refdes=A1 T 46800 41900 5 10 1 1 0 0 1 model-name=LM555 T 46000 41700 5 10 1 1 0 0 1 file=../../lib/models/lm555.mod } gspiceui-1.1.00+dfsg/sch/demos/bjt-diff-amp.sch0000644000000000000000000001336012516333373017652 0ustar rootrootv 20130925 2 C 40000 40000 0 0 0 title-A3.sym C 52000 43950 1 0 1 vdc-1.sym { T 51300 44500 5 10 0 1 0 6 1 refdes=V1 T 51300 44450 5 10 1 1 0 6 1 value=DC +70V } C 51400 43450 1 180 1 vdc-1.sym { T 51000 42950 5 10 0 1 180 6 1 refdes=V2 T 50600 42900 5 10 1 1 180 6 1 value=DC -70V } C 51125 43500 1 0 0 gnd-1.sym { T 51125 43500 5 10 0 0 0 0 1 netname=GND } T 49400 40900 9 14 1 0 0 0 1 BJT Differential Amplifier T 49600 40400 9 10 1 0 0 0 1 bjt-diff-amp.sch T 50400 40100 9 10 1 0 0 0 1 1 T 51100 40100 9 10 1 0 0 0 1 1 T 53500 40400 9 10 1 0 0 0 1 2015 - 04 - 24 T 53500 40100 9 10 1 0 0 0 1 Mike Waters C 51900 42250 1 180 0 vee-1.sym { T 51900 42250 5 10 0 0 0 0 1 netname=Vee } C 51500 45150 1 0 0 vcc-1.sym { T 51500 45150 5 10 0 0 0 0 1 netname=Vcc } N 51700 43950 51700 43450 4 N 51700 43800 51225 43800 4 T 63500 50200 8 10 0 0 270 0 1 device=INDUCTOR T 63700 50200 8 10 0 0 270 0 1 symversion=0.1 C 53000 41800 1 0 0 spice-model-1.sym { T 53100 42400 5 10 1 1 0 0 1 refdes=A7 T 54300 42100 5 10 1 1 0 0 1 model-name=1N4148 T 53500 41900 5 10 1 1 0 0 1 file=../../lib/models/1n4148.mod } C 44100 50400 1 90 1 voltage-1.sym { T 43600 49900 5 10 1 1 0 6 1 refdes=Vin T 43300 50350 5 10 0 1 180 6 1 value=DC 30.0 } C 44700 41900 1 180 0 vee-1.sym { T 44700 41900 5 10 0 0 180 0 1 netname=Vee } C 45100 49400 1 0 0 vcc-1.sym { T 45100 49400 5 10 0 0 0 0 1 netname=Vcc } C 43700 44700 1 270 0 diode-1.sym { T 44200 44100 5 10 1 1 0 0 1 refdes=D1 T 43950 43900 5 10 1 1 0 0 1 value=1N4148 } C 43700 43800 1 270 0 diode-1.sym { T 44200 43200 5 10 1 1 0 0 1 refdes=D2 T 43950 43000 5 10 1 1 0 0 1 value=1N4148 } C 43700 42900 1 270 0 diode-1.sym { T 44200 42300 5 10 1 1 0 0 1 refdes=D3 T 43950 42100 5 10 1 1 0 0 1 value=1N4148 } C 44000 45800 1 90 1 resistor-2.sym { T 44050 45400 5 10 1 1 0 0 1 refdes=R8 T 44050 45200 5 10 1 1 0 0 1 value=10K } N 43900 46200 43900 45800 4 N 43900 44900 43900 44700 4 C 45400 43700 1 90 1 resistor-2.sym { T 45550 43300 5 10 1 1 0 0 1 refdes=R9 T 45550 43100 5 10 1 1 0 0 1 value=390 } N 45300 44200 45300 43700 4 N 44800 44700 43900 44700 4 N 45300 42800 45300 41900 4 N 45300 45100 45300 45800 4 C 44700 46700 1 90 1 resistor-2.sym { T 44750 46300 5 10 1 1 0 0 1 refdes=R6 T 44750 46100 5 10 1 1 0 0 1 value=150 } C 45900 46700 1 270 0 resistor-2.sym { T 45850 46300 5 10 1 1 0 6 1 refdes=R7 T 45850 46100 5 10 1 1 0 6 1 value=150 } N 44600 45800 46000 45800 4 C 43800 49000 1 270 0 resistor-2.sym { T 43750 48600 5 10 1 1 0 6 1 refdes=R2 T 43750 48400 5 10 1 1 0 6 1 value=220 } N 43900 47200 44100 47200 4 C 44700 49100 1 90 1 resistor-2.sym { T 44750 48700 5 10 1 1 0 0 1 refdes=R4 T 44750 48500 5 10 1 1 0 0 1 value=6.8K } C 45900 49100 1 270 0 resistor-2.sym { T 45850 48700 5 10 1 1 0 6 1 refdes=R5 T 45850 48500 5 10 1 1 0 6 1 value=6.8K } N 44600 48200 44600 47600 4 N 46000 47600 46000 48200 4 C 46800 49000 1 90 1 resistor-2.sym { T 46850 48600 5 10 1 1 0 0 1 refdes=R3 T 46850 48400 5 10 1 1 0 0 1 value=220 } N 46500 47200 46700 47200 4 N 44600 49400 46000 49400 4 C 44100 46700 1 0 0 spice-npn-2.sym { T 45000 47400 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 44700 47300 5 10 1 1 0 0 1 refdes=Q1 T 44450 47100 5 10 1 1 0 0 1 value=BF471 } C 44800 44200 1 0 0 spice-npn-2.sym { T 45700 44900 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 45400 44800 5 10 1 1 0 0 1 refdes=Q10 T 45150 44600 5 10 1 1 0 0 1 value=BF471 } C 46500 46700 1 0 1 spice-npn-2.sym { T 45600 47400 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 45900 47300 5 10 1 1 0 6 1 refdes=Q2 T 46150 47100 5 10 1 1 0 6 1 value=BF471 } N 43900 41900 45300 41900 4 N 44800 50400 46700 50400 4 N 46700 50400 46700 49000 4 C 43900 50300 1 0 0 resistor-2.sym { T 44200 50700 5 10 1 1 180 6 1 refdes=Rin T 44200 50100 5 10 1 1 0 0 1 value=100 } C 53000 43800 1 0 0 spice-model-1.sym { T 53100 44400 5 10 1 1 0 0 1 refdes=A5 T 54300 44100 5 10 1 1 0 0 1 model-name=BF471 T 53500 43900 5 10 1 1 0 0 1 file=../../lib/models/bf471.mod } C 53000 42800 1 0 0 spice-model-1.sym { T 53100 43400 5 10 1 1 0 0 1 refdes=A6 T 54300 43100 5 10 1 1 0 0 1 model-name=BF472 T 53500 42900 5 10 1 1 0 0 1 file=../../lib/models/bf472.mod } N 46000 47700 47400 47700 4 { T 46000 47700 5 10 0 0 0 0 1 netname=Output } C 43200 45800 1 0 0 gnd-1.sym { T 43200 45800 5 10 0 0 0 0 1 netname=GND } T 50400 50000 9 10 1 0 0 0 6 Transient Analysis : Set signal soure : 1kHz, 10mV, -5.75 DC offset MOS_Drv quiescent = approx. 0.8V Gain = 3130.6 = 69.9 dBV At signal source amplitudes greater than 10mV the output waveform becomes distorted (Vout = 31V amplitude). T 50400 48900 9 10 1 0 0 0 4 AC Analysis : Gain = 81.3 dBV 3dB Band = DC to 2.0 KHz @ with C7 and C8 3dB Band = DC to 47.9 KHz @ without C7 and C8 N 43300 46100 43900 46100 4 T 53000 45400 9 10 1 0 0 0 3 This schematic can be simulated using NG-Spice but not GNU-Cap (last tested 2011-02-04) C 47400 47600 1 0 0 output-2.sym { T 47600 48300 5 10 0 0 0 0 1 device=none T 47500 47900 5 10 1 1 0 0 1 netname=Output } T 50400 48200 9 10 1 0 0 0 2 Current source formed by Q9 is approx. 5mA Current source formed by Q10 is approx. 5mA T 51600 46700 9 10 1 0 0 0 4 Suggest a value for R21, R22, R31 and R32 of 22kOhm which increases the input impedance from 24.3kOhm to 46.3kOhm but only reduces the gain from 75.6dBV to 70.0dBV. N 44600 49100 44600 49400 4 N 46000 49100 46000 49400 4 N 43900 49500 43900 49000 4 N 43900 42000 43900 41900 4 N 43900 48100 43900 47100 4 N 46700 48100 46700 47100 4 C 43800 46200 1 270 1 resistor-2.sym { T 43750 46800 5 10 1 1 180 0 1 refdes=R1 T 43750 46600 5 10 1 1 180 0 1 value=10K } C 46800 46200 1 90 0 resistor-2.sym { T 46850 46800 5 10 1 1 180 6 1 refdes=R10 T 46850 46600 5 10 1 1 180 6 1 value=10K } C 46600 45800 1 0 0 gnd-1.sym { T 46600 45800 5 10 0 0 0 0 1 netname=GND } N 46700 46100 46700 46200 4 gspiceui-1.1.00+dfsg/sch/demos/diode-varactor-1.sch0000644000000000000000000000242012467303201020436 0ustar rootrootv 20130925 2 C 40000 40000 0 0 0 title-A4.sym C 45900 44900 1 0 0 output-2.sym { T 46100 45600 5 10 0 0 0 0 1 device=none T 46800 44900 5 10 1 1 0 0 1 netname=Output } C 45400 46500 1 0 1 vcc-1.sym { T 45400 46500 5 10 0 0 0 6 1 netname=Vcc T 45400 46500 5 10 0 0 0 0 1 value=24V } N 45200 43800 45200 43600 4 C 42100 42000 1 0 0 vcc-1.sym C 42100 42000 1 270 0 voltage-3.sym { T 42800 41800 5 8 0 0 270 0 1 device=VOLTAGE_SOURCE T 42600 41500 5 10 0 1 0 0 1 refdes=Vcc T 41300 41500 5 10 1 1 0 0 1 value=DC 12V } C 42200 40800 1 0 0 gnd-1.sym N 45200 46500 45200 46300 4 C 45100 46300 1 270 0 resistor-2.sym { T 45450 45900 5 10 0 0 270 0 1 device=RESISTOR T 44900 45900 5 10 1 1 0 6 1 refdes=R1 T 45000 45700 5 10 1 1 180 0 1 value=10K } C 45100 43300 1 0 0 gnd-1.sym N 45200 45400 45200 44700 4 N 45900 45000 45200 45000 4 T 46400 40900 9 14 1 0 0 0 1 Diode Model Test Circuit T 44700 40400 9 10 1 0 0 0 1 zener-diode-1.sch T 45500 40100 9 10 1 0 0 0 1 1 T 46200 40100 9 10 1 0 0 0 1 1 T 48600 40400 9 10 1 0 0 0 1 2015 - 02 - 13 T 48600 40100 9 10 1 0 0 0 1 Mike Waters C 45400 43800 1 90 0 zener-1.sym { T 44800 44200 5 10 0 0 90 0 1 device=ZENER_DIODE T 44900 44300 5 10 1 1 180 0 1 refdes=D1 T 45400 43800 5 10 0 1 0 0 1 file=../../lib/1n751.mod T 45400 43800 5 10 1 1 0 0 1 value=1N751 } gspiceui-1.1.00+dfsg/sch/Makefile0000644000000000000000000001034012453745334015243 0ustar rootroot#*************************************************************************************************** # Makefile * # ---------- * # Description : House-keeping for the GNU Spice GUI Project example schematic files. * # Started : 2004-01-20 * # Last update : 2015-01-09 * # Copyright : (C) 2004 by MSWaters * #*************************************************************************************************** #*************************************************************************************************** # * # This program is free software; you can redistribute it and/or modify it under the * # terms of the GNU General Public License as published by the Free Software Foundation; * # either version 3 of the License, or (at your option) any later version. * # * #*************************************************************************************************** #*************************************************************************************************** # Any or all of the values in this section may be set below or on the command line when envoking # make eg. : # # make DESTDIR=/new/dest/dir install # make DESTDIR=/new/dest/dir uninstall # # Note : Values specified on the command line over-ride those specified below. #*************************************************************************************************** # Destination (install) directory DESTDIR = /usr/local #*************************************************************************************************** # Specify string values #*************************************************************************************************** # Root directory ROOT := $(shell pwd) # Objects OBJS := $(patsubst %.sch, %.ckt, $(wildcard */*.sch)) #*************************************************************************************************** # Make these targets #*************************************************************************************************** all : $(OBJS) # Schematic to netlist conversion rules : # -v verbose mode (gives as much feedback to the user as possible) # -q quiet mode (turns off all warnings / notes / messages) # -g the guile procedure executed to create the netlist # -o place output file in $@ # $< is the name of the first dependency # $@ is the file name of the target %.ckt : %.sch @cd $(dir $<) ; gnetlist -g spice-sdb -o $(notdir $@) $(notdir $<) @echo #*************************************************************************************************** # Perform installation tasks #*************************************************************************************************** install : cp -r $(ROOT) $(DESTDIR)/share/gspiceui #*************************************************************************************************** # Perform uninstall tasks #*************************************************************************************************** uninstall : rm -fr $(DESTDIR)/share/gspiceui/sch ##************************************************************************************************** # Remove temporary files and backup files #*************************************************************************************************** clean : rm -f Makefile~ */*.gnucap.?? */*.ngspice.?? */*.ckt */*.sim */*.log */*.sch~ #*************************************************************************************************** # Specify phony targets #*************************************************************************************************** .PHONY : install uninstall clean #*************************************************************************************************** gspiceui-1.1.00+dfsg/sch/ph-shftr/0000755000000000000000000000000012525200532015322 5ustar rootrootgspiceui-1.1.00+dfsg/sch/ph-shftr/ps-pas-1p-rc.sch0000644000000000000000000000140312124473171020150 0ustar rootrootv 20110115 2 C 2800 1500 1 270 1 capacitor-1.sym { T 3100 2100 5 10 1 1 0 0 1 refdes=C1 T 3100 1700 5 10 1 1 0 0 1 value=1.0n } C 1900 2300 1 0 0 resistor-2.sym { T 2250 2600 5 10 1 1 0 0 1 refdes=R1 T 2200 2100 5 10 1 1 0 0 1 value=10k } N 2800 2400 3000 2400 4 { T 3000 2500 5 10 1 1 0 0 1 netname=Vout } N 1900 2400 1700 2400 4 C 2300 1200 1 0 0 gnd-1.sym N 1700 1500 3000 1500 4 T 2300 3050 9 10 1 0 0 4 1 Last Updated : 27/09/2011 T 900 200 9 10 1 0 0 0 4 The half power (3dB) point : - Calculated = 1/6.28RC = 15.92 KHz - NG-Spice = 15.92 KHz - GNU-Cap = 15.92 KHz C 1900 1500 1 90 0 voltage-1.sym { T 1400 1600 5 10 0 0 90 0 1 device=VOLTAGE_SOURCE T 1400 2000 5 10 1 1 180 0 1 refdes=Vin } T 2350 3300 9 14 1 0 0 4 1 Single Pole Passive RC Phase Shifter gspiceui-1.1.00+dfsg/sch/ph-shftr/ps-act-1p-rc.sch0000644000000000000000000000322712124473171020142 0ustar rootrootv 20110115 2 C 1500 1700 1 0 0 resistor-2.sym { T 1850 1950 5 10 1 1 0 0 1 refdes=R1 T 1750 1500 5 10 1 1 0 0 1 value=100K } C 1500 2500 1 0 0 resistor-2.sym { T 1850 2750 5 10 1 1 0 0 1 refdes=R2 T 1850 2300 5 10 1 1 0 0 1 value=1K } C 3800 2500 1 0 0 resistor-2.sym { T 4150 2750 5 10 1 1 0 0 1 refdes=R3 T 4150 2300 5 10 1 1 0 0 1 value=1K } C 2800 600 1 90 0 capacitor-1.sym { T 2350 1200 5 10 1 1 0 0 1 refdes=C1 T 2350 800 5 10 1 1 0 0 1 value=1n } N 2400 2600 3800 2600 4 N 4600 1500 5100 1500 4 N 4700 2600 4800 2600 4 N 4800 2600 4800 1500 4 N 2400 1800 3200 1800 4 N 2600 1500 2600 1800 4 N 3200 1200 3000 1200 4 N 3000 1200 3000 2600 4 N 1500 1800 1100 1800 4 N 1100 600 5100 600 4 N 1500 2600 1400 2600 4 N 1400 2600 1400 1800 4 N 3900 1000 3900 600 4 N 3900 2000 3900 2300 4 N 3900 2300 3600 2300 4 N 3600 2300 3600 2900 4 C 3500 300 1 0 0 gnd-1.sym C 800 600 1 0 0 vac-1.sym { T 700 1300 5 10 1 1 180 0 1 refdes=Vin T 1600 800 5 10 0 1 90 0 1 value=dc 0 ac 1 } C 5000 1500 1 270 0 resistor-2.sym { T 5250 1100 5 10 1 1 0 0 1 refdes=Rout T 5250 850 5 10 1 1 0 0 1 value=100K } T 3150 4700 9 14 1 0 0 4 1 Single Pole Active RC Phase Shifter C 5300 2400 1 0 0 vdc-1.sym { T 6000 3050 5 10 1 1 0 0 1 refdes=Vcc T 6050 2850 5 10 1 1 0 0 1 value=5V } C 5500 2100 1 0 0 gnd-1.sym T 3000 4450 9 10 1 0 0 4 1 Last Update : 13/09/2011 C 3200 900 1 0 0 spice-opamp-2.sym { T 4200 1775 5 10 1 1 0 0 1 refdes=XU1 T 4200 1100 5 10 1 1 0 0 1 value=LM358 } C 3400 2900 1 0 0 vcc-1.sym C 5400 3600 1 0 0 vcc-1.sym C 300 3200 1 0 0 spice-model-1.sym { T 400 3800 5 10 1 1 0 0 1 refdes=A1 T 1600 3500 5 10 1 1 0 0 1 model-name=LM358 T 800 3300 5 10 1 1 0 0 1 file=../../lib/opamp/lm358.mod } gspiceui-1.1.00+dfsg/sch/ph-shftr/ps-act-1p-rc-ideal.sch0000644000000000000000000000346712124473171021224 0ustar rootrootv 20050313 1 C 3700 750 1 90 0 resistor-2.sym { T 3450 1400 5 10 1 1 180 0 1 refdes=R1 T 3500 1150 5 10 1 1 180 0 1 value=100 } C 2550 2500 1 0 0 resistor-2.sym { T 2900 2750 5 10 1 1 0 0 1 refdes=R2 T 2900 2300 5 10 1 1 0 0 1 value=1K } C 4850 2500 1 0 0 resistor-2.sym { T 5200 2750 5 10 1 1 0 0 1 refdes=R3 T 5200 2300 5 10 1 1 0 0 1 value=1K } C 3450 2000 1 180 0 capacitor-1.sym { T 2700 1900 5 10 1 1 0 0 1 refdes=C1 T 3300 2000 5 10 1 1 180 0 1 value=1p } N 3450 2600 4850 2600 4 N 5750 1800 6250 1800 4 N 5750 2600 5900 2600 4 N 5900 2600 5900 1800 4 N 3450 1800 4250 1800 4 N 3600 1650 3600 1800 4 N 4250 1200 4050 1200 4 N 4050 1200 4050 2600 4 N 2550 1800 2300 1800 4 N 900 600 6250 600 4 N 2550 2600 2450 2600 4 N 2450 2600 2450 1800 4 N 5750 1200 5750 600 4 C 4500 300 1 0 0 gnd-1.sym N 3600 750 3600 600 4 C 1100 2100 1 270 0 vac-1.sym { T 1600 2200 5 10 1 1 0 0 1 refdes=Vin T 1300 1300 5 10 0 1 0 0 1 value=dc 0 ac 1 } C 6150 1650 1 270 0 resistor-2.sym { T 6450 1250 5 10 1 1 0 0 1 refdes=Rout T 6900 1100 5 10 1 1 180 0 1 value=100K } T 3600 4700 9 14 1 0 0 4 1 Ideal Single Pole Active RC Phase Shifter C 600 600 1 0 0 vdc-1.sym { T 1300 1200 5 10 1 1 0 0 1 refdes=Vbias T 1350 1000 5 10 1 1 0 0 1 value=2.5V } N 900 1800 1100 1800 4 T 3550 4350 9 10 1 0 0 4 1 Last Updated on 05/08/2005 C 4250 1100 1 0 0 vcvs-1.sym { T 4850 2000 5 12 1 1 0 0 1 refdes=E1 T 4250 1100 5 10 0 0 0 0 1 value=10000 } N 6250 1800 6250 1650 4 N 6250 750 6250 600 4 T 3650 3600 9 8 1 0 0 4 5 For R1 = 1K Ohm and Vin(freq) = 10.0 GHz phase at Rout = 1.8 Degree For R1 = 100 Ohm and Vin(freq) = 10.0 GHz phase at Rout = 18.1 Degree For R1 = 50 Ohm and Vin(freq) = 10.0 GHz phase at Rout = 35.3 Degree For R1 = 10 Ohm and Vin(freq) = 10.0 GHz phase at Rout = 115.7 Degree For R1 = 1 Ohm and Vin(freq) = 10.0 GHz phase at Rout = 172.8 Degree gspiceui-1.1.00+dfsg/sch/ph-shftr/ps-bdg-1.sch0000644000000000000000000000172512124473171017346 0ustar rootrootv 20040111 1 C 2100 3250 1 90 0 capacitor-4.sym { T 1700 3750 5 10 1 1 180 0 1 refdes=C1 T 1450 3400 5 10 1 1 0 0 1 value=10pF } C 3400 4250 1 90 0 capacitor-4.sym { T 3700 4750 5 10 1 1 180 0 1 refdes=C2 T 3300 4400 5 10 1 1 0 0 1 value=10pF } C 2000 4150 1 90 0 resistor-2.sym { T 1750 4800 5 10 1 1 180 0 1 refdes=R1 T 1300 4450 5 10 1 1 0 0 1 value=100K } C 3300 3250 1 90 0 resistor-2.sym { T 3700 3900 5 10 1 1 180 0 1 refdes=R2 T 3400 3550 5 10 1 1 0 0 1 value=100K } C 1200 3700 1 90 0 voltage-1.sym { T 750 4200 5 10 1 1 180 0 1 refdes=Vin T 300 3750 5 10 1 1 0 0 1 value=100mV } C 2000 2950 1 0 0 gnd-1.sym T 1050 5400 9 10 1 0 0 0 1 Phase Shifter - Bridge N 1000 4600 1000 5050 4 N 1000 5050 3200 5050 4 N 1000 3700 1000 3250 4 N 1000 3250 3200 3250 4 N 3200 4250 3200 4150 4 N 1900 4150 1900 4050 4 C 3000 4250 1 180 0 resistor-2.sym { T 2350 4300 5 10 1 1 0 0 1 refdes=Rout T 2850 4000 5 10 1 1 180 0 1 value=10Meg } N 1900 4150 2100 4150 4 N 3000 4150 3200 4150 4 gspiceui-1.1.00+dfsg/sch/ph-shftr/ps-act-2p-steffan-ideal.sch0000644000000000000000000000435312124473171022242 0ustar rootrootv 20110115 2 C 3300 700 1 90 0 resistor-2.sym { T 2750 1250 5 10 1 1 0 0 1 refdes=R2 T 2700 1000 5 10 1 1 0 0 1 value=100 } C 2750 3300 1 0 0 resistor-2.sym { T 2850 3550 5 10 1 1 0 0 1 refdes=R4 T 3300 3550 5 10 1 1 0 0 1 value=10K } C 4750 3300 1 0 0 resistor-2.sym { T 4850 3550 5 10 1 1 0 0 1 refdes=R5 T 5300 3550 5 10 1 1 0 0 1 value=10K } C 3750 2500 1 270 0 capacitor-1.sym { T 3900 2350 5 10 1 1 180 0 1 refdes=C2 T 3550 1800 5 10 1 1 0 0 1 value=1.0p } N 3650 3400 4750 3400 4 N 5950 2700 6550 2700 4 N 5650 3400 5950 3400 4 N 5950 3400 5950 2700 4 N 3650 2700 4450 2700 4 N 4450 2100 4300 2100 4 N 4300 2100 4300 3400 4 N 2450 2700 2100 2700 4 N 900 700 6550 700 4 N 2750 3400 2450 3400 4 N 2450 3400 2450 2500 4 N 5950 2100 5950 700 4 C 4400 400 1 0 0 gnd-1.sym C 900 3000 1 270 0 vac-1.sym { T 1400 3100 5 10 1 1 0 0 1 refdes=Vin T 1100 2200 5 10 0 1 0 0 1 value=dc 0 ac 1 } C 6450 2550 1 270 0 resistor-2.sym { T 6750 2150 5 10 1 1 0 0 1 refdes=Rout T 7200 2000 5 10 1 1 180 0 1 value=100K } T 3700 5750 9 14 1 0 0 4 1 Ideal Two Pole Steffan RC Phase Shifter C 600 1150 1 0 0 vdc-1.sym { T 1300 1750 5 10 1 1 0 0 1 refdes=Vbias T 1350 1550 5 10 1 1 0 0 1 value=2.5V } N 900 2350 900 2700 4 T 3650 5400 9 10 1 0 0 4 1 Last Updated on 08/08/2005 C 4450 2000 1 0 0 vcvs-1.sym { T 5050 2900 5 12 1 1 0 0 1 refdes=E1 T 4450 2000 5 10 0 0 0 0 1 value=10000 } N 6550 2700 6550 2550 4 N 6550 1650 6550 700 4 T 3750 4500 9 8 1 0 0 4 5 For R1 = 1K Ohm and Vin(freq) = 10.0 GHz phase at Rout = 1.8 Degree For R1 = 100 Ohm and Vin(freq) = 10.0 GHz phase at Rout = 18.5 Degree For R1 = 50 Ohm and Vin(freq) = 10.0 GHz phase at Rout = 32.6 Degree For R1 = 10 Ohm and Vin(freq) = 10.0 GHz phase at Rout = -31.7 Degree For R1 = 1 Ohm and Vin(freq) = 10.0 GHz phase at Rout = -7.0 Degree C 2650 2500 1 90 1 capacitor-1.sym { T 2550 2350 5 10 1 1 180 6 1 refdes=C1 T 2900 1800 5 10 1 1 0 6 1 value=1.0p } C 3650 2800 1 180 0 resistor-2.sym { T 2850 2850 5 10 1 1 0 0 1 refdes=R1 T 3300 2850 5 10 1 1 0 0 1 value=100 } C 5500 1700 1 180 0 resistor-2.sym { T 4700 1300 5 10 1 1 0 0 1 refdes=R3 T 5150 1300 5 10 1 1 0 0 1 value=100 } N 900 1150 900 700 4 N 2450 1600 4600 1600 4 N 5500 1600 6200 1600 4 N 6200 1600 6200 2700 4 N 2450 2700 2750 2700 4 N 3950 2500 3950 2700 4 gspiceui-1.1.00+dfsg/sch/op-amp/0000755000000000000000000000000012525200532014760 5ustar rootrootgspiceui-1.1.00+dfsg/sch/op-amp/opamp-lmx358-2.sch0000644000000000000000000000266012124473171020002 0ustar rootrootv 20110115 2 C 6000 2850 1 90 0 vdc-1.sym { T 5500 3900 5 10 1 1 180 0 1 refdes=Vcc T 5700 3700 5 10 1 1 180 0 1 value=DC 6V } C 1750 2100 1 270 0 vac-1.sym { T 2250 2150 5 10 1 1 0 0 1 refdes=Vin T 1950 1300 5 10 1 1 0 0 1 value=AC 100m } N 5500 2100 6600 2100 4 N 6100 2100 6100 1000 4 N 5100 1000 4000 1000 4 N 4000 1000 4000 1800 4 N 3850 1800 4100 1800 4 N 4800 2600 4800 3150 4 N 4800 1600 4800 600 4 C 4700 300 1 0 0 gnd-1.sym C 6300 3050 1 90 0 gnd-1.sym C 1350 300 1 0 0 gnd-1.sym C 6500 300 1 0 0 gnd-1.sym C 6500 1800 1 270 0 resistor-2.sym { T 6800 1400 5 10 1 1 0 0 1 refdes=Rout T 7200 1300 5 10 1 1 180 0 1 value=10K } T 2300 4250 9 12 1 0 0 0 1 OP AMP Voltage Follower C 450 2750 1 0 0 spice-model-1.sym { T 550 3350 5 10 1 1 0 0 1 refdes=A1 T 1750 3050 5 10 1 1 0 0 1 model-name=LMX358 T 950 2850 5 10 1 1 0 0 1 file=../../lib/opamp/lmx358.mod } C 1150 600 1 0 0 vdc-1.sym { T 1000 1400 5 10 1 1 180 0 1 refdes=Vbias T 1100 1100 5 10 1 1 180 0 1 value=DC 3.0 } N 1450 1800 1750 1800 4 C 2950 1700 1 0 0 resistor-2.sym { T 3300 2000 5 10 1 1 0 0 1 refdes=R1 T 3300 1500 5 10 1 1 0 0 1 value=1K } C 5100 900 1 0 0 resistor-2.sym { T 5450 1200 5 10 1 1 0 0 1 refdes=R2 T 5400 700 5 10 1 1 0 0 1 value=10K } N 4100 2400 1450 2400 4 N 1450 2400 1450 1800 4 N 6600 2100 6600 1800 4 N 6600 900 6600 600 4 N 6000 1000 6100 1000 4 C 4100 1500 1 0 0 spice-opamp-2.sym { T 5100 2425 5 10 1 1 0 0 1 refdes=U1 T 5100 1800 5 10 1 1 0 0 1 value=LMX358 } gspiceui-1.1.00+dfsg/sch/op-amp/opamp-lm358-2.sch0000644000000000000000000000276312124473171017616 0ustar rootrootv 20110115 2 C 6000 2900 1 90 0 vdc-1.sym { T 5600 3950 5 10 1 1 180 0 1 refdes=Vcc T 5750 3700 5 10 1 1 180 0 1 value=DC 6V } C 1750 2100 1 270 0 vac-1.sym { T 2250 2150 5 10 1 1 0 0 1 refdes=Vin T 1950 1300 5 10 1 1 0 0 1 value=AC 100m } N 5500 2100 6600 2100 4 N 6000 2100 6000 1000 4 N 5100 1000 4000 1000 4 N 4000 1000 4000 1800 4 N 3850 1800 4100 1800 4 N 4800 2600 4800 3200 4 N 4800 1600 4800 600 4 C 4700 300 1 0 0 gnd-1.sym C 6300 3100 1 90 0 gnd-1.sym C 1350 300 1 0 0 gnd-1.sym C 6500 300 1 0 0 gnd-1.sym C 6500 1800 1 270 0 resistor-2.sym { T 6800 1400 5 10 1 1 0 0 1 refdes=Rout T 7200 1300 5 10 1 1 180 0 1 value=10K } T 1200 3900 9 12 1 0 0 0 1 OP AMP Voltage Follower C 1150 600 1 0 0 vdc-1.sym { T 1000 1400 5 10 1 1 180 0 1 refdes=Vbias T 1100 1100 5 10 1 1 180 0 1 value=DC 3.0 } N 1450 1800 1750 1800 4 C 2950 1700 1 0 0 resistor-2.sym { T 3300 2000 5 10 1 1 0 0 1 refdes=R1 T 3300 1500 5 10 1 1 0 0 1 value=1K } C 5100 900 1 0 0 resistor-2.sym { T 5450 1200 5 10 1 1 0 0 1 refdes=R2 T 5400 700 5 10 1 1 0 0 1 value=10K } N 4100 2400 1450 2400 4 N 1450 2400 1450 1800 4 N 6600 2100 6600 1800 4 N 6600 900 6600 600 4 T 2450 3700 9 10 1 0 0 4 1 Last Updated on 30/06/2011 C 550 2550 1 0 0 spice-model-1.sym { T 650 3250 5 10 0 1 0 0 1 device=model T 650 3150 5 10 1 1 0 0 1 refdes=A1 T 1850 2850 5 10 1 1 0 0 1 model-name=LM358 T 1050 2650 5 10 1 1 0 0 1 file=../../lib/opamp/lm358.mod } C 4100 1500 1 0 0 spice-opamp-2.sym { T 5100 2425 5 10 1 1 0 0 1 refdes=U1 T 5100 1800 5 10 1 1 0 0 1 value=LM358 } gspiceui-1.1.00+dfsg/sch/op-amp/opamp-lm741.sch0000644000000000000000000000447512124473171017455 0ustar rootrootv 20091004 2 C 39250 67400 1 0 0 capacitor-1.sym { T 39600 67900 5 10 1 1 0 0 1 refdes=C1 T 39500 67200 5 10 1 1 0 0 1 value=150nF T 39250 67400 5 10 0 1 0 0 1 footprint=AXIAL_LAY 300 } N 41050 67600 41900 67600 4 N 39250 67600 39250 67150 4 { T 39100 67700 5 10 0 1 0 0 1 netname= } C 40150 67500 1 0 0 resistor-1.sym { T 40250 67800 5 10 1 1 0 0 1 refdes=R1 T 40600 67800 5 10 1 1 0 0 1 value=10K T 40150 67500 5 10 0 1 0 0 1 footprint=R025 } C 41300 65200 1 0 0 gnd-1.sym C 38950 65950 1 0 0 vac-1.sym { T 39650 66400 5 10 1 1 0 0 1 refdes=Vin T 39500 66150 5 10 1 1 0 0 1 value=dc 0 ac 1 } N 39250 65950 39250 65500 4 N 39250 65500 43450 65500 4 C 41800 69200 1 0 0 capacitor-1.sym { T 41850 69500 5 10 1 1 0 0 1 refdes=C2 T 42400 69500 5 10 1 1 0 0 1 value=330pF T 41800 69200 5 10 0 1 0 0 1 footprint=AXIAL_LAY 300 } C 41800 68600 1 0 0 resistor-1.sym { T 41900 68900 5 10 1 1 0 0 1 refdes=R2 T 42300 68900 5 10 1 1 0 0 1 value=100K T 41800 68600 5 10 0 1 0 0 1 footprint=R025 } N 41200 68700 41800 68700 4 N 41800 69400 41200 69400 4 N 41200 67600 41200 69400 4 N 42700 68700 43450 68700 4 N 42700 69400 43450 69400 4 N 43450 67150 43450 69400 4 C 43550 66250 1 90 0 resistor-1.sym { T 43900 66900 5 10 1 1 180 0 1 refdes=R3 T 43950 66600 5 10 1 1 180 0 1 value=15K T 43550 66250 5 10 0 1 90 0 1 footprint=R025 } N 43450 65500 43450 66250 4 C 42100 65600 1 0 0 vdc-1.sym { T 42850 66050 5 10 1 1 0 0 1 refdes=V1 T 42700 65800 5 10 1 1 0 0 1 value=DC 10V } N 42900 67400 43450 67400 4 N 41900 67200 40450 67200 4 N 40450 67200 40450 65500 4 N 42400 65600 42400 65500 4 N 42400 67000 42400 66800 4 { T 42500 66850 5 10 0 1 0 0 1 netname= } C 41800 66800 1 180 0 vdc-1.sym { T 41100 66150 5 10 1 1 180 0 1 refdes=V2 T 41300 65900 5 10 1 1 180 0 1 value=DC 10V } N 41500 65600 41500 65500 4 N 41500 66800 41500 68300 4 N 41500 68300 42400 68300 4 N 42400 68300 42400 67800 4 { T 42500 67900 5 10 0 1 0 0 1 netname= } C 41900 67000 1 0 0 aop-spice-1.sym { T 41850 66800 5 10 1 1 0 0 1 refdes=XU1 T 41800 67900 5 10 1 1 0 0 1 value=LM741 T 41900 67000 5 10 0 1 0 0 1 footprint=DIL 8 300 T 42950 67000 5 10 0 1 0 0 1 model-name=LM741 } C 38300 68300 1 0 0 spice-model-1.sym { T 38400 69000 5 10 0 1 0 0 1 device=model T 38400 68900 5 10 1 1 0 0 1 refdes=A1 T 39600 68600 5 10 1 1 0 0 1 model-name=LM741 T 38800 68400 5 10 1 1 0 0 1 file=../../lib/opamp/lm741.mod } gspiceui-1.1.00+dfsg/sch/op-amp/opamp-lmx358-1.sch0000644000000000000000000000216212124473171017776 0ustar rootrootv 20110115 2 C 5900 2400 1 90 0 vdc-1.sym { T 5400 3450 5 10 1 1 180 0 1 refdes=Vcc T 5600 3250 5 10 1 1 180 0 1 value=DC 6V } C 1800 2100 1 270 0 vac-1.sym { T 1750 1950 5 10 1 1 0 0 1 refdes=Vin T 2800 1950 5 10 1 1 0 0 1 value=AC 100m } N 5400 1500 6350 1500 4 N 5900 1500 5900 700 4 N 5900 700 3800 700 4 N 3800 700 3800 1200 4 N 3800 1200 4000 1200 4 N 4700 2000 4700 2700 4 N 4700 1000 4700 600 4 C 4600 300 1 0 0 gnd-1.sym C 6200 2600 1 90 0 gnd-1.sym C 1350 300 1 0 0 gnd-1.sym N 3000 1800 4000 1800 4 C 6250 300 1 0 0 gnd-1.sym C 6250 1500 1 270 0 resistor-2.sym { T 6550 1100 5 10 1 1 0 0 1 refdes=Rout T 6950 1000 5 10 1 1 180 0 1 value=10K } T 2300 4000 9 12 1 0 0 0 1 OP AMP Voltage Follower C 400 2600 1 0 0 spice-model-1.sym { T 500 3200 5 10 1 1 0 0 1 refdes=A1 T 1700 2900 5 10 1 1 0 0 1 model-name=LMX358 T 900 2700 5 10 1 1 0 0 1 file=../../lib/opamp/lmx358.mod } C 1150 600 1 0 0 vdc-1.sym { T 1000 1400 5 10 1 1 180 0 1 refdes=Vbias T 1100 1100 5 10 1 1 180 0 1 value=DC 3.0 } N 1450 1800 1800 1800 4 C 4000 900 1 0 0 spice-opamp-2.sym { T 5000 1825 5 10 1 1 0 0 1 refdes=U1 T 5000 1200 5 10 1 1 0 0 1 value=LMX358 } gspiceui-1.1.00+dfsg/sch/op-amp/opamp-lm358-1.sch0000644000000000000000000000254412124473171017612 0ustar rootrootv 20110115 2 C 5500 88300 1 0 0 vdc-1.sym { T 5100 88900 5 10 1 1 0 0 1 refdes=Vcc T 4950 88600 5 10 1 1 0 0 1 value=DC 6V } C 1850 88300 1 270 0 vac-1.sym { T 2350 88400 5 10 1 1 0 0 1 refdes=Vin T 2200 87500 5 10 1 1 0 0 1 value=AC 1V } N 4600 87700 5500 87700 4 N 4900 87700 4900 86900 4 N 4900 86900 3200 86900 4 N 3200 86900 3200 87400 4 C 3300 86100 1 0 0 gnd-1.sym C 5700 88000 1 0 0 gnd-1.sym N 3050 88000 3200 88000 4 C 5400 87500 1 270 0 resistor-2.sym { T 5700 87100 5 10 1 1 0 0 1 refdes=Rout T 6100 87000 5 10 1 1 180 0 1 value=10K } T 1900 90250 9 12 1 0 0 0 1 Op. Amp. Voltage Follower C 1200 86600 1 0 0 vdc-1.sym { T 1050 87400 5 10 1 1 180 0 1 refdes=Vbias T 1150 87100 5 10 1 1 180 0 1 value=DC 3V } N 1500 88000 1850 88000 4 T 3250 90000 9 10 1 0 0 4 1 Last Updated on 30/06/2011 N 3900 87200 3900 86400 4 C 500 88700 1 0 0 spice-model-1.sym { T 600 89400 5 10 0 1 0 0 1 device=model T 600 89300 5 10 1 1 0 0 1 refdes=A1 T 1800 89000 5 10 1 1 0 0 1 model-name=LM358 T 1000 88800 5 10 1 1 0 0 1 file=../../lib/opamp/lm358.mod } N 1500 86400 5500 86400 4 N 5500 87700 5500 87500 4 N 5500 86600 5500 86400 4 N 1500 86400 1500 86600 4 N 1500 87800 1500 88000 4 C 5600 89500 1 0 0 vcc-1.sym C 3700 88900 1 0 0 vcc-1.sym N 3900 88200 3900 88900 4 C 3200 87100 1 0 0 spice-opamp-2.sym { T 4200 88025 5 10 1 1 0 0 1 refdes=U1 T 4300 87400 5 10 1 1 0 0 1 value=LM358 } gspiceui-1.1.00+dfsg/sch/op-amp/opamp-ua741.sch0000644000000000000000000000462012124473171017442 0ustar rootrootv 20091004 2 C 39250 67400 1 0 0 capacitor-1.sym { T 39600 67900 5 10 1 1 0 0 1 refdes=C1 T 39500 67200 5 10 1 1 0 0 1 value=150nF T 39250 67400 5 10 0 1 0 0 1 footprint=AXIAL_LAY 300 } N 41050 67600 41900 67600 4 N 39250 67600 39250 67150 4 { T 39100 67700 5 10 1 1 0 0 1 netname=input } C 40150 67500 1 0 0 resistor-1.sym { T 40250 67800 5 10 1 1 0 0 1 refdes=R1 T 40600 67800 5 10 1 1 0 0 1 value=10K T 40150 67500 5 10 0 1 0 0 1 footprint=R025 } C 41300 65200 1 0 0 gnd-1.sym C 38950 65950 1 0 0 vac-1.sym { T 39650 66400 5 10 1 1 0 0 1 refdes=Vin T 39500 66150 5 10 1 1 0 0 1 value=dc 0 ac 1 } N 39250 65950 39250 65500 4 N 39250 65500 43450 65500 4 C 41800 69200 1 0 0 capacitor-1.sym { T 41850 69500 5 10 1 1 0 0 1 refdes=C2 T 42400 69500 5 10 1 1 0 0 1 value=330pF T 41800 69200 5 10 0 1 0 0 1 footprint=AXIAL_LAY 300 } C 41800 68600 1 0 0 resistor-1.sym { T 41900 68900 5 10 1 1 0 0 1 refdes=R2 T 42300 68900 5 10 1 1 0 0 1 value=100K T 41800 68600 5 10 0 1 0 0 1 footprint=R025 } N 41200 68700 41800 68700 4 N 41800 69400 41200 69400 4 N 41200 67600 41200 69400 4 N 42700 68700 43450 68700 4 N 42700 69400 43450 69400 4 N 43450 67150 43450 69400 4 C 43550 66250 1 90 0 resistor-1.sym { T 43900 66900 5 10 1 1 180 0 1 refdes=R3 T 43950 66600 5 10 1 1 180 0 1 value=15K T 43550 66250 5 10 0 1 90 0 1 footprint=R025 } N 43450 65500 43450 66250 4 C 42100 65600 1 0 0 vdc-1.sym { T 42850 66050 5 10 1 1 0 0 1 refdes=V1 T 42700 65800 5 10 1 1 0 0 1 value=DC 10V } N 42900 67400 43450 67400 4 N 43450 67400 44100 67400 4 { T 43600 67500 5 10 1 1 0 0 1 netname=Vout } N 41900 67200 40450 67200 4 N 40450 67200 40450 65500 4 N 42400 65600 42400 65500 4 N 42400 67000 42400 66800 4 { T 42500 66850 5 10 1 1 0 0 1 netname=V+ } C 41800 66800 1 180 0 vdc-1.sym { T 41100 66150 5 10 1 1 180 0 1 refdes=V2 T 41300 65900 5 10 1 1 180 0 1 value=DC 10V } N 41500 65600 41500 65500 4 N 41500 66800 41500 68300 4 N 41500 68300 42400 68300 4 N 42400 68300 42400 67800 4 { T 42500 67900 5 10 1 1 0 0 1 netname=V- } C 41900 67000 1 0 0 aop-spice-1.sym { T 41850 66800 5 10 1 1 0 0 1 refdes=XU1 T 41800 67900 5 10 1 1 0 0 1 value=uA741 T 41900 67000 5 10 0 1 0 0 1 footprint=DIL 8 300 T 42950 67000 5 10 0 1 0 0 1 model-name=uA741 } C 38450 68250 1 0 0 spice-model-1.sym { T 38550 68950 5 10 0 1 0 0 1 device=model T 38550 68850 5 10 1 1 0 0 1 refdes=A1 T 39750 68550 5 10 1 1 0 0 1 model-name=uA358 T 38950 68350 5 10 1 1 0 0 1 file=../../lib/opamp/ua741.mod } gspiceui-1.1.00+dfsg/sch/audio/0000755000000000000000000000000012525200532014670 5ustar rootrootgspiceui-1.1.00+dfsg/sch/audio/aem-6000-output-stage.sch0000644000000000000000000002075112511652365021172 0ustar rootrootv 20130925 2 C 40000 40000 0 0 0 title-A3.sym C 40900 47000 1 270 0 voltage-1.sym { T 40850 46650 5 10 1 1 180 0 1 refdes=Vin T 41700 46950 5 10 0 1 180 0 1 value=DC 0.0 } C 52000 43800 1 0 1 vdc-1.sym { T 51300 44350 5 10 0 1 0 6 1 refdes=V1 T 51300 44300 5 10 1 1 0 6 1 value=DC +70V } C 51400 43500 1 180 1 vdc-1.sym { T 51000 43000 5 10 0 1 180 6 1 refdes=V2 T 50600 42950 5 10 1 1 180 6 1 value=DC -70V } C 51125 43500 1 0 0 gnd-1.sym { T 51125 43500 5 10 0 0 0 0 1 netname=GND } C 53300 44600 1 0 0 spice-model-1.sym { T 53400 45200 5 10 1 1 0 0 1 refdes=A7 T 54600 44900 5 10 1 1 0 0 1 model-name=1N914 T 53800 44700 5 10 1 1 0 0 1 file=../../lib/diode/1n914.mod } T 49400 40900 9 14 1 0 0 0 1 AEM Audio Power Amplifier - Series 6000 - Output Stage T 49600 40400 9 10 1 0 0 0 1 aem-6000-output-stage.sch T 50400 40100 9 10 1 0 0 0 1 1 T 51100 40100 9 10 1 0 0 0 1 1 T 53800 40400 9 10 1 0 0 0 1 2015 - 04 - 10 T 53800 40100 9 10 1 0 0 0 1 Mike Waters C 51900 42300 1 180 0 vee-1.sym { T 51900 42300 5 10 0 0 0 0 1 netname=Vee } C 45600 42300 1 180 0 vee-1.sym { T 45600 42300 5 10 0 0 180 0 1 netname=Vee } C 45200 50700 1 0 0 vcc-1.sym { T 45200 50700 5 10 0 0 0 0 1 netname=Vcc } C 51500 45000 1 0 0 vcc-1.sym { T 51500 45000 5 10 0 0 0 0 1 netname=Vcc } N 51700 43800 51700 43500 4 N 51700 43800 51225 43800 4 N 44400 42300 46500 42300 4 N 44400 50700 46500 50700 4 C 42600 47000 1 90 1 resistor-2.sym { T 42650 46600 5 10 1 1 0 0 1 refdes=R35 T 42650 46350 5 10 1 1 0 0 1 value=100 } N 41100 47000 42500 47000 4 C 43300 48500 1 90 1 diode-1.sym { T 42800 47900 5 10 1 1 0 6 1 refdes=D7 T 43050 47650 5 10 1 1 0 6 1 value=1N914 } C 45400 48500 1 90 1 diode-1.sym { T 44900 47900 5 10 1 1 0 6 1 refdes=D9 T 45150 47650 5 10 1 1 0 6 1 value=1N914 } C 43300 45400 1 90 1 diode-1.sym { T 42800 44800 5 10 1 1 0 6 1 refdes=D8 T 43050 44550 5 10 1 1 0 6 1 value=1N914 } C 45400 45400 1 90 1 diode-1.sym { T 44950 44800 5 10 1 1 0 6 1 refdes=D10 T 45150 44550 5 10 1 1 0 6 1 value=1N914 } C 43500 48900 1 270 0 capacitor-1.sym { T 44200 48700 5 10 0 0 270 0 1 device=CAPACITOR T 43800 48600 5 10 1 1 0 0 1 refdes=C9 T 44400 48700 5 10 0 0 270 0 1 symversion=0.1 T 43800 48150 5 10 1 1 0 0 1 value=330p } C 45600 48900 1 270 0 capacitor-1.sym { T 46300 48700 5 10 0 0 270 0 1 device=CAPACITOR T 45900 48600 5 10 1 1 0 0 1 refdes=C10 T 46500 48700 5 10 0 0 270 0 1 symversion=0.1 T 45900 48150 5 10 1 1 0 0 1 value=330p } C 43500 45400 1 270 0 capacitor-1.sym { T 44200 45200 5 10 0 0 270 0 1 device=CAPACITOR T 43800 45100 5 10 1 1 0 0 1 refdes=C11 T 44400 45200 5 10 0 0 270 0 1 symversion=0.1 T 43800 44650 5 10 1 1 0 0 1 value=33p } C 45600 45400 1 270 0 capacitor-1.sym { T 46300 45200 5 10 0 0 270 0 1 device=CAPACITOR T 45900 45100 5 10 1 1 0 0 1 refdes=C12 T 46500 45200 5 10 0 0 270 0 1 symversion=0.1 T 45900 44650 5 10 1 1 0 0 1 value=33p } C 42900 48500 1 270 1 zener-1.sym { T 43500 48900 5 10 0 0 90 2 1 device=ZENER_DIODE T 42500 49000 5 10 1 1 0 0 1 refdes=DZ2 T 42500 48800 5 10 0 1 0 0 1 value=1N759 T 42500 48750 5 10 1 1 0 0 1 description=12V } C 45000 48500 1 270 1 zener-1.sym { T 45600 48900 5 10 0 0 90 2 1 device=ZENER_DIODE T 44600 49000 5 10 1 1 0 0 1 refdes=DZ3 T 44600 48800 5 10 0 1 0 0 1 value=1N759 T 44600 48750 5 10 1 1 0 0 1 description=12V } C 42900 43600 1 270 1 zener-1.sym { T 43500 44000 5 10 0 0 90 2 1 device=ZENER_DIODE T 42500 44100 5 10 1 1 0 0 1 refdes=DZ4 T 42500 43900 5 10 0 1 0 0 1 value=1N759 T 42500 43850 5 10 1 1 0 0 1 description=12V } C 45000 43600 1 270 1 zener-1.sym { T 45600 44000 5 10 0 0 90 2 1 device=ZENER_DIODE T 44600 44100 5 10 1 1 0 0 1 refdes=DZ5 T 44600 43900 5 10 0 1 0 0 1 value=1N759 T 44600 43850 5 10 1 1 0 0 1 description=12V } C 43800 44500 1 90 1 resistor-2.sym { T 43850 44100 5 10 1 1 0 0 1 refdes=R44 T 43850 43850 5 10 1 1 0 0 1 value=22 } C 45900 44500 1 90 1 resistor-2.sym { T 45950 44100 5 10 1 1 0 0 1 refdes=R45 T 45950 43850 5 10 1 1 0 0 1 value=22 } N 43100 45400 44400 45400 4 N 43100 43600 43900 43600 4 N 45200 45400 46500 45400 4 N 45200 43600 46000 43600 4 N 43700 47600 43700 48000 4 N 43100 49400 43900 49400 4 N 43700 49400 43700 48900 4 N 45200 49400 46000 49400 4 N 45800 49400 45800 48900 4 N 45200 47600 46500 47600 4 N 45800 47600 45800 48000 4 C 43000 50300 1 270 0 resistor-2.sym { T 42900 49900 5 10 1 1 0 6 1 refdes=R36 T 42900 49600 5 10 1 1 0 6 1 value=270 } C 45100 50300 1 270 0 resistor-2.sym { T 45000 49900 5 10 1 1 0 6 1 refdes=R38 T 45000 49600 5 10 1 1 0 6 1 value=270 } C 43000 43600 1 270 0 resistor-2.sym { T 42950 43200 5 10 1 1 0 6 1 refdes=R37 T 42950 42950 5 10 1 1 0 6 1 value=270 } C 45100 43600 1 270 0 resistor-2.sym { T 45050 43200 5 10 1 1 0 6 1 refdes=R39 T 45050 42950 5 10 1 1 0 6 1 value=270 } C 44500 47600 1 90 1 resistor-2.sym { T 44250 47200 5 10 1 1 0 6 1 refdes=R40 T 44250 46950 5 10 1 1 0 6 1 value=0.22 } C 44500 46300 1 90 1 resistor-2.sym { T 44250 45900 5 10 1 1 0 6 1 refdes=R42 T 44250 45650 5 10 1 1 0 6 1 value=0.22 } C 46400 47600 1 270 0 resistor-2.sym { T 46350 47200 5 10 1 1 0 6 1 refdes=R41 T 46350 46950 5 10 1 1 0 6 1 value=0.22 } C 46400 46300 1 270 0 resistor-2.sym { T 46350 45900 5 10 1 1 0 6 1 refdes=R43 T 46350 45650 5 10 1 1 0 6 1 value=0.22 } N 42300 47000 42300 50300 4 N 42300 50300 45200 50300 4 N 42300 46100 42300 42700 4 N 42300 42700 45200 42700 4 N 44400 46700 44400 46300 4 N 46500 46700 46500 46300 4 N 44400 47600 43100 47600 4 N 44400 50000 44400 50700 4 N 46500 50000 46500 50700 4 N 44400 43000 44400 42300 4 N 46500 43000 46500 42300 4 N 46500 43800 46500 45400 4 N 46500 47600 46500 49200 4 N 44400 46600 46500 46600 4 { T 45200 46700 5 10 1 1 0 0 1 netname=Vout } N 46500 46400 48000 46400 4 C 47200 46400 1 90 1 resistor-2.sym { T 47200 46800 5 10 1 1 0 6 1 refdes=R46 T 47150 46550 5 10 1 1 0 6 1 value=22 } C 47600 46400 1 90 1 resistor-2.sym { T 47400 46800 5 10 1 1 0 0 1 refdes=R47 T 47450 46550 5 10 1 1 0 0 1 value=22 } C 47500 45500 1 90 1 capacitor-1.sym { T 46800 45300 5 10 0 0 270 2 1 device=CAPACITOR T 47200 45200 5 10 1 1 0 6 1 refdes=C14 T 46600 45300 5 10 0 0 270 2 1 symversion=0.1 T 47200 44750 5 10 1 1 0 6 1 value=22n } C 47200 44300 1 0 0 gnd-1.sym { T 47200 44300 5 10 0 0 0 0 1 netname=GND } N 47100 45500 47500 45500 4 N 44400 49200 44400 47600 4 N 44400 45400 44400 43800 4 C 47900 44300 1 0 0 gnd-1.sym { T 47900 44300 5 10 0 0 0 0 1 netname=GND } N 48000 46400 48000 45700 4 N 48000 45300 48000 44600 4 C 53300 43700 1 0 0 spice-model-1.sym { T 53400 44300 5 10 1 1 0 0 1 refdes=A8 T 54600 44000 5 10 1 1 0 0 1 model-name=1N759 T 53800 43800 5 10 1 1 0 0 1 file=../../lib/diode/1n759.mod } C 53300 42700 1 0 0 spice-model-1.sym { T 53400 43300 5 10 1 1 0 0 1 refdes=A10 T 54600 43000 5 10 1 1 0 0 1 model-name=2SK1058 T 53800 42800 5 10 1 1 0 0 1 file=../../lib/mosfet/2sk1058.ckt } C 53300 41800 1 0 0 spice-model-1.sym { T 53400 42400 5 10 1 1 0 0 1 refdes=A11 T 54600 42100 5 10 1 1 0 0 1 model-name=2SJ162 T 53800 41900 5 10 1 1 0 0 1 file=../../lib/mosfet/2sj162.ckt } C 42000 47000 1 270 0 resistor-2.sym { T 41900 46600 5 10 1 1 0 6 1 refdes=RV2 T 41900 46350 5 10 1 1 0 6 1 value=100 } N 42100 46100 42500 46100 4 T 63500 50200 8 10 0 0 270 0 1 device=INDUCTOR T 63700 50200 8 10 0 0 270 0 1 symversion=0.1 B 49050 45300 150 400 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 L 49200 45700 49500 46200 3 0 0 0 -1 -1 L 49500 46200 49500 44800 3 0 0 0 -1 -1 L 49500 44800 49200 45300 3 0 0 0 -1 -1 N 48900 45300 48900 45700 4 C 48000 45800 1 180 1 resistor-2.sym { T 48150 45900 5 10 1 1 0 0 1 refdes=Rspkr T 48900 46050 5 10 1 1 180 0 1 value=8 } C 48900 45200 1 0 1 inductor-1.sym { T 48150 45050 5 10 1 1 180 8 1 refdes=Lspkr T 48750 45050 5 10 1 1 0 0 1 value=1mH T 48700 45700 5 10 0 0 180 2 1 device=INDUCTOR T 48700 45900 5 10 0 0 180 2 1 symversion=0.1 } A 49100 45500 224 297 126 3 0 0 0 -1 -1 C 46000 49200 1 0 0 spice-nmos-2.sym { T 46600 49700 5 10 0 0 0 0 1 device=SUBCKT T 45700 49700 5 10 1 1 0 0 1 refdes=X20 T 45600 49950 5 10 1 1 0 0 1 value=2SK1058 } C 46000 43800 1 180 1 spice-pmos-2.sym { T 46600 43300 5 10 0 0 180 6 1 device=SUBCKT T 45700 43300 5 10 1 1 180 6 1 refdes=X22 T 45700 43050 5 10 1 1 180 6 1 value=2SJ162 } C 43900 49200 1 0 0 spice-nmos-2.sym { T 44500 49700 5 10 0 0 0 0 1 device=SUBCKT T 43600 49700 5 10 1 1 0 0 1 refdes=X19 T 43500 49950 5 10 1 1 0 0 1 value=2SK1058 } C 43900 43800 1 180 1 spice-pmos-2.sym { T 44500 43300 5 10 0 0 180 6 1 device=SUBCKT T 43600 43300 5 10 1 1 180 6 1 refdes=X21 T 43600 43050 5 10 1 1 180 6 1 value=2SJ162 } C 41000 45800 1 0 0 gnd-1.sym { T 41000 45800 5 10 0 0 0 0 1 netname=GND } T 40500 40500 9 10 1 0 0 0 3 This schematic can be simulated using NG-Spice but not GNU-Cap (last tested 2011-02-04) gspiceui-1.1.00+dfsg/sch/audio/aem-6010-input-stage.sch0000644000000000000000000002371312517177274021002 0ustar rootrootv 20130925 2 C 40000 40000 0 0 0 title-A3.sym C 44800 43600 1 270 0 resistor-2.sym { T 44750 43200 5 10 1 1 0 6 1 refdes=R12 T 44750 42950 5 10 1 1 0 6 1 value=3.9K } C 43000 45300 1 180 0 resistor-2.sym { T 42400 45350 5 10 1 1 0 0 1 refdes=R3 T 42400 44900 5 10 1 1 0 0 1 value=1K } C 44200 44600 1 0 0 resistor-2.sym { T 44900 45000 5 10 1 1 180 0 1 refdes=RV1a T 44500 44400 5 10 1 1 0 0 1 value=10K } C 41200 44300 1 90 0 voltage-1.sym { T 40750 44850 5 10 1 1 180 0 1 refdes=Vin T 40400 44350 5 10 0 1 0 0 1 value=DC 0.0 } C 48500 42300 1 0 1 vdc-1.sym { T 47800 42850 5 10 0 1 0 6 1 refdes=V1 T 47800 42850 5 10 1 1 0 6 1 value=DC +70V } C 47900 42000 1 180 1 vdc-1.sym { T 47500 41500 5 10 0 1 180 6 1 refdes=V2 T 47800 41350 5 10 1 1 0 6 1 value=DC -70V } C 46500 44700 1 270 0 resistor-2.sym { T 46450 44200 5 10 1 1 0 6 1 refdes=R5 T 46450 44000 5 10 1 1 0 6 1 value=330 } C 41900 45200 1 270 0 resistor-2.sym { T 41800 44700 5 10 1 1 0 6 1 refdes=R1 T 41800 44500 5 10 1 1 0 6 1 value=100K } C 42500 44000 1 0 0 gnd-1.sym { T 42500 44000 5 10 0 0 0 0 1 netname=GND } N 41000 44300 43300 44300 4 C 53200 42700 1 0 0 spice-model-1.sym { T 53300 43300 5 10 1 1 0 0 1 refdes=A5 T 54500 43000 5 10 1 1 0 0 1 model-name=SST404 T 53700 42800 5 10 1 1 0 0 1 file=../../lib/models/sst404.mod } T 49700 40900 9 14 1 0 0 0 1 Audio Power Amplifier - Series 6010 - Input Stage T 49600 40400 9 10 1 0 0 0 1 series-6010-input-stage.sch T 50400 40100 9 10 1 0 0 0 1 1 T 51100 40100 9 10 1 0 0 0 1 1 T 53500 40400 9 10 1 0 0 0 1 2015 - 04 - 26 T 53500 40100 9 10 1 0 0 0 1 Mike Waters C 48400 40800 1 180 0 vee-1.sym { T 48400 40800 5 10 0 0 0 0 1 netname=Vee } C 42100 40900 1 180 0 vee-1.sym { T 42100 40900 5 10 0 0 180 0 1 netname=Vee } C 41700 50200 1 0 0 vcc-1.sym { T 41700 50200 5 10 0 0 0 0 1 netname=Vcc } C 48000 43500 1 0 0 vcc-1.sym { T 48000 43500 5 10 0 0 0 0 1 netname=Vcc } N 48200 42300 48200 42000 4 N 48200 42200 47700 42200 4 C 41000 45000 1 0 0 capacitor-1.sym { T 41200 45700 5 10 0 0 0 0 1 device=CAPACITOR T 41300 45300 5 10 1 1 0 6 1 refdes=C1 T 41200 45900 5 10 0 0 0 0 1 symversion=0.1 T 41600 45300 5 10 1 1 0 0 1 value=470n } N 41900 45200 42100 45200 4 C 43100 44300 1 270 1 capacitor-1.sym { T 43800 44500 5 10 0 0 90 2 1 device=CAPACITOR T 43000 45000 5 10 1 1 180 6 1 refdes=C2 T 44000 44500 5 10 0 0 90 2 1 symversion=0.1 T 42900 44500 5 10 1 1 0 0 1 value=1nF } N 43000 45200 43400 45200 4 C 45400 44600 1 0 0 resistor-2.sym { T 46100 45000 5 10 1 1 180 0 1 refdes=RV1b T 45700 44400 5 10 1 1 0 0 1 value=10K } C 45100 45000 1 270 1 zener-1.sym { T 45700 45400 5 10 0 0 90 2 1 device=ZENER_DIODE T 45200 45800 5 10 1 1 0 6 1 refdes=DZ1 T 44700 45300 5 10 0 1 0 0 1 value=1N759 T 45400 45800 5 10 1 1 0 0 1 description=12V } N 44400 46200 46100 46200 4 C 43800 44700 1 270 0 resistor-2.sym { T 44050 44200 5 10 1 1 0 0 1 refdes=R4 T 44050 44000 5 10 1 1 0 0 1 value=330 } N 43900 43800 46600 43800 4 N 46600 45000 46600 44700 4 N 43900 45000 43900 44700 4 N 45100 44700 45400 44700 4 N 45400 42300 45600 42300 4 N 44900 41800 45100 41800 4 C 44800 41800 1 270 0 resistor-2.sym { T 44700 41400 5 10 1 1 0 6 1 refdes=R13 T 44700 41150 5 10 1 1 0 6 1 value=120 } C 45500 43200 1 270 0 resistor-2.sym { T 45750 42800 5 10 1 1 0 0 1 refdes=R14 T 45750 42550 5 10 1 1 0 0 1 value=10K } C 45700 43500 1 180 0 gnd-1.sym { T 45700 43500 5 10 0 0 0 0 1 netname=GND } N 45600 41300 45600 40900 4 N 45600 40900 43300 40900 4 C 44000 48300 1 90 1 resistor-2.sym { T 44050 47900 5 10 1 1 0 0 1 refdes=R6 T 44050 47700 5 10 1 1 0 0 1 value=27K } C 46500 48300 1 270 0 resistor-2.sym { T 46450 47900 5 10 1 1 0 6 1 refdes=R7 T 46450 47700 5 10 1 1 0 6 1 value=27K } N 44900 49300 45100 49300 4 N 45400 48800 45600 48800 4 C 44800 48400 1 270 0 resistor-2.sym { T 45050 48000 5 10 1 1 0 0 1 refdes=R9 T 45050 47800 5 10 1 1 0 0 1 value=4.7K } C 45000 50200 1 90 1 resistor-2.sym { T 44750 49800 5 10 1 1 0 6 1 refdes=R8 T 44750 49600 5 10 1 1 0 6 1 value=180 } C 45500 48800 1 270 0 resistor-2.sym { T 45800 48500 5 10 1 1 0 0 1 refdes=R10 T 45800 48300 5 10 1 1 0 0 1 value=10K } C 45500 47600 1 0 0 gnd-1.sym { T 45500 47600 5 10 0 0 0 0 1 netname=GND } N 43300 50200 46600 50200 4 N 45600 49800 45600 50200 4 N 44900 46200 44900 47500 4 N 43900 48300 43900 50200 4 N 46600 48300 46600 50200 4 N 46600 47400 46600 46600 4 N 43900 47400 43900 46600 4 N 45300 43800 45300 45000 4 N 47100 45200 47500 45200 4 C 47600 44300 1 90 0 resistor-2.sym { T 47300 44700 5 10 1 1 0 6 1 refdes=R49 T 47300 44500 5 10 1 1 0 6 1 value=1K } C 47400 44000 1 0 0 gnd-1.sym { T 47400 44000 5 10 0 0 0 0 1 netname=GND } C 53200 41700 1 0 0 spice-model-1.sym { T 53300 42300 5 10 1 1 0 0 1 refdes=A6 T 54500 42000 5 10 1 1 0 0 1 model-name=1N759 T 53700 41800 5 10 1 1 0 0 1 file=../../lib/models/1n759.mod } T 63500 50200 8 10 0 0 270 0 1 device=INDUCTOR T 63700 50200 8 10 0 0 270 0 1 symversion=0.1 C 43400 45000 1 0 0 spice-njfet-1.sym { T 44200 45400 5 10 0 0 0 0 1 device=FET_TRANSISTOR T 44100 45500 5 10 1 1 0 0 1 refdes=J1 T 43900 45250 5 10 1 1 0 0 1 value=SST404 } C 47100 45000 1 0 1 spice-njfet-1.sym { T 46300 45400 5 10 0 0 0 6 1 device=FET_TRANSISTOR T 46400 45500 5 10 1 1 0 6 1 refdes=J2 T 46600 45250 5 10 1 1 0 6 1 value=SST404 } C 44400 45700 1 0 1 spice-npn-2.sym { T 43500 46400 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 43800 46300 5 10 1 1 0 6 1 refdes=Q3 T 43900 46100 5 10 1 1 0 6 1 value=MMBTA06 } C 46100 45700 1 0 0 spice-npn-2.sym { T 47000 46400 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 46700 46300 5 10 1 1 0 0 1 refdes=Q4 T 46600 46100 5 10 1 1 0 0 1 value=MMBTA06 } C 45400 41800 1 0 1 spice-npn-2.sym { T 44500 42500 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 44800 42400 5 10 1 1 0 6 1 refdes=Q7 T 44950 42200 5 10 1 1 0 6 1 value=MMBTA06 } N 44900 43600 44900 43800 4 C 45100 41300 1 0 0 spice-npn-2.sym { T 46000 42000 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 45700 41900 5 10 1 1 0 0 1 refdes=Q8 T 45550 41700 5 10 1 1 0 0 1 value=MMBTA06 } N 45600 42200 45600 42300 4 C 45400 49300 1 180 0 spice-pnp-2.sym { T 44500 48600 5 8 0 0 180 0 1 device=PNP_TRANSISTOR T 44800 48900 5 10 1 1 0 6 1 refdes=Q5 T 45000 48700 5 10 1 1 0 6 1 value=MMBTA56 } C 45100 49800 1 180 1 spice-pnp-2.sym { T 46000 49100 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 45700 49400 5 10 1 1 0 0 1 refdes=Q6 T 45500 49200 5 10 1 1 0 0 1 value=MMBTA56 } N 45600 48900 45600 48800 4 N 43900 44700 44200 44700 4 N 46300 44700 46600 44700 4 N 46600 47200 47000 47200 4 N 43900 47200 43500 47200 4 T 48000 50100 9 10 1 0 0 0 5 Rload represents the load presented by the next stage AC analysis : Gain (without Rload) = 31.5 dBV (3db BW = 3.4Hz to 68kHz) AC analysis : Gain (with Rload) = 24.1 dBV (3db BW = 3.4Hz to 111kHz) Transient analysis : Gain (without Rload) = ??? @ Vin = 1 KHz & 100 mV Transient analysis : Gain (with Rload) = ??? @ Vin = 1 KHz & 100 mV N 43500 47200 43500 50700 4 N 43500 50700 44700 50700 4 C 44700 50800 1 180 1 resistor-2.sym { T 44900 51000 5 10 1 1 180 6 1 refdes=Rload T 45000 50400 5 10 1 1 0 0 1 value=40K } N 47000 47200 47000 50700 4 T 48000 47500 9 10 1 0 0 0 6 There are several equivalents for the dual n-channel JFET ECG461 : 1. SST404 2. 2N5545 3. NTE461 4. EXR461 T 40400 42800 9 10 1 0 0 0 3 This schematic can be simulated using NG-Spice but not GNU-Cap (last tested 2011-02-04) N 42600 44300 42000 44300 4 C 42400 50100 1 0 0 resistor-2.sym { T 42500 50500 5 10 1 1 180 6 1 refdes=R15 T 43000 50500 5 10 1 1 180 6 1 value=22 } C 42100 48900 1 0 0 gnd-1.sym { T 42100 48900 5 10 0 0 0 0 1 netname=GND } N 42200 50200 42200 50100 4 C 42400 50100 1 90 1 capacitor-4.sym { T 41300 49900 5 10 0 0 270 2 1 device=POLARIZED_CAPACITOR T 41700 49900 5 10 0 0 270 2 1 symversion=0.1 T 42500 49500 5 10 1 1 0 0 1 refdes=C4 T 42300 49300 5 10 1 1 0 0 1 value=220uF } C 43300 41000 1 180 0 resistor-2.sym { T 42500 40600 5 10 1 1 0 0 1 refdes=R16 T 43000 40600 5 10 1 1 0 0 1 value=22 } C 42300 42200 1 180 0 gnd-1.sym { T 42300 42200 5 10 0 0 0 0 1 netname=GND } N 42200 41000 42200 40900 4 C 42400 41900 1 90 1 capacitor-4.sym { T 41300 41700 5 10 0 0 270 2 1 device=POLARIZED_CAPACITOR T 41700 41700 5 10 0 0 270 2 1 symversion=0.1 T 42500 41400 5 10 1 1 0 0 1 refdes=C5 T 42300 41600 5 10 1 1 0 0 1 value=220uF } N 41900 50200 42400 50200 4 N 41900 40900 42400 40900 4 N 45600 50700 47000 50700 4 T 51900 48400 9 10 1 0 0 0 2 Suggested values for C3 and R11 to increase BW of differential input stage 22pF and 560Ohm. N 45300 46200 45300 45900 4 C 49700 41800 1 0 1 gnd-2.sym C 49600 42000 1 0 0 resistor-2.sym { T 50000 42350 5 10 0 0 0 0 1 device=RESISTOR T 49700 42300 5 10 1 1 0 0 1 refdes=R2 T 50400 42300 5 10 1 1 0 0 1 value=1 } C 50400 41800 1 0 0 gnd-1.sym { T 50400 41800 5 10 0 0 0 0 1 netname=GND } C 47800 41900 1 0 1 gnd-2.sym T 48000 49000 9 10 1 0 0 0 4 It is desirable that the JFET current be less than 1mA : Current source formed by Q5 and Q6 delivers 3.78 mA Current source formed by Q7 and Q8 delivers 5.67 mA => JFET channel current = 0.945mA C 45500 46800 1 0 0 resistor-2.sym { T 46100 47200 5 10 1 1 180 0 1 refdes=R11 T 45800 46600 5 10 1 1 0 0 1 value=1K } C 45100 47100 1 180 0 capacitor-1.sym { T 44900 46400 5 10 0 0 180 0 1 device=CAPACITOR T 44900 46200 5 10 0 0 180 0 1 symversion=0.1 T 44500 47000 5 10 1 1 0 6 1 refdes=C3 T 44500 46800 5 10 1 1 180 0 1 value=33pF } N 45100 46900 45500 46900 4 N 46400 46900 46600 46900 4 N 43900 46900 44200 46900 4 C 53200 45700 1 0 0 spice-model-1.sym { T 53300 46300 5 10 1 1 0 0 1 refdes=A2 T 54500 46000 5 10 1 1 0 0 1 model-name=BC547 T 53700 45800 5 10 1 1 0 0 1 file=../../lib/models/bc547.mod } C 53200 44700 1 0 0 spice-model-1.sym { T 53300 45300 5 10 1 1 0 0 1 refdes=A3 T 54500 45000 5 10 1 1 0 0 1 model-name=BC640 T 53700 44800 5 10 1 1 0 0 1 file=../../lib/models/bc640.mod } C 53200 46700 1 0 0 spice-model-1.sym { T 53300 47300 5 10 1 1 0 0 1 refdes=A1 T 54500 47000 5 10 1 1 0 0 1 model-name=BC639 T 53700 46800 5 10 1 1 0 0 1 file=../../lib/models/bc639.mod } C 53200 43700 1 0 0 spice-model-1.sym { T 53300 44300 5 10 1 1 0 0 1 refdes=A4 T 54500 44000 5 10 1 1 0 0 1 model-name=BC557 T 53700 43800 5 10 1 1 0 0 1 file=../../lib/models/bc557.mod } gspiceui-1.1.00+dfsg/sch/audio/aem-6001-filter-feedback.sch0000644000000000000000000000266012512223747021537 0ustar rootrootv 20130925 2 C 40000 40000 0 0 0 title-A4.sym T 44800 40900 9 16 1 0 0 0 1 AEM 6001 Power Amplifier - Feedback Filter T 44600 40400 9 10 1 0 0 0 1 aem-6001-filter-feedback.sch T 45400 40100 9 10 1 0 0 0 1 1 T 46300 40100 9 10 1 0 0 0 1 1 T 48700 40400 9 10 1 0 0 0 1 2015 - 04 - 11 T 48700 40100 9 10 1 0 0 0 1 Mike Waters C 45400 45300 1 180 1 resistor-2.sym { T 45400 45500 5 10 1 1 180 6 1 refdes=R48 T 46300 45500 5 10 1 1 180 0 1 value=6.2K } C 44700 44200 1 270 1 resistor-2.sym { T 44600 44700 5 10 1 1 0 6 1 refdes=R49 T 44600 44400 5 10 1 1 0 6 1 value=1K } C 46300 44900 1 180 0 capacitor-1.sym { T 46100 44200 5 10 0 0 180 0 1 device=CAPACITOR T 46100 44000 5 10 0 0 180 0 1 symversion=0.1 T 45700 44500 5 10 1 1 0 6 1 refdes=C6 T 46000 44500 5 10 1 1 0 0 1 value=15p } C 44700 43800 1 0 0 gnd-1.sym { T 44700 43800 5 10 0 0 0 0 1 netname=GND } N 46400 45200 46400 44700 4 N 45300 44700 45300 45200 4 C 46700 45100 1 270 0 voltage-1.sym { T 47500 45050 5 10 0 1 180 0 1 value=DC 0.0 T 47200 44600 5 10 1 1 0 0 1 refdes=Vout } N 46900 44100 44800 44100 4 N 46900 45200 46300 45200 4 N 45400 45200 44400 45200 4 C 44400 45300 1 180 0 output-1.sym { T 44300 45000 5 10 0 0 180 0 1 device=OUTPUT T 43800 45400 5 10 1 1 0 0 1 netname=Vfb } N 44800 44200 44800 44100 4 N 44800 45100 44800 45200 4 N 46900 44100 46900 44200 4 N 46900 45100 46900 45200 4 N 45400 44700 45300 44700 4 N 46300 44700 46400 44700 4 T 45100 43200 9 10 1 0 0 0 1 fo = 1.71MHz gspiceui-1.1.00+dfsg/sch/audio/aura-drv-20w.sch0000644000000000000000000000563012124473163017531 0ustar rootrootv 20110115 2 C 6700 2500 1 90 0 resistor-2.sym { T 7000 3050 5 10 1 1 180 0 1 refdes=R1 T 6750 2700 5 10 1 1 0 0 1 value=4.7 } C 6300 1700 1 0 0 resistor-2.sym { T 6450 1500 5 10 1 1 0 0 1 refdes=R3 T 6850 1500 5 10 1 1 0 0 1 value=47 } C 7200 1000 1 0 0 resistor-2.sym { T 7350 800 5 10 1 1 0 0 1 refdes=R5 T 7750 800 5 10 1 1 0 0 1 value=1K } C 7200 4600 1 0 0 resistor-2.sym { T 7350 4850 5 10 1 1 0 0 1 refdes=R4 T 7750 4850 5 10 1 1 0 0 1 value=1K } C 6300 3900 1 0 0 resistor-2.sym { T 6450 4150 5 10 1 1 0 0 1 refdes=R2 T 6850 4150 5 10 1 1 0 0 1 value=47 } C 6950 3200 1 0 0 capacitor-4.sym { T 7000 3200 5 10 1 1 0 0 1 refdes=C1 T 7550 3200 5 10 1 1 0 0 1 value=4.7p } C 4500 3000 1 0 0 npn-3.sym { T 5400 3550 5 10 1 1 0 0 1 refdes=Q1 T 5400 3300 5 10 1 1 0 0 1 value=BC548 } C 7500 1300 1 0 0 npn-3.sym { T 8400 1850 5 10 1 1 0 0 1 refdes=Q3 T 8400 1600 5 10 1 1 0 0 1 value=TIP41 } C 4500 2800 1 180 1 pnp-3.sym { T 5400 2450 5 10 1 1 180 6 1 refdes=Q2 T 5400 2050 5 10 1 1 0 0 1 value=BC558 } C 7500 4500 1 180 1 pnp-3.sym { T 8400 4150 5 10 1 1 180 6 1 refdes=Q4 T 8400 3750 5 10 1 1 0 0 1 value=TIP42 } C 6500 2200 1 0 0 gnd-1.sym C 3600 1700 1 0 0 gnd-1.sym C 3900 2000 1 90 0 voltage-1.sym { T 3650 2850 5 10 1 1 180 0 1 refdes=Vin T 3000 2950 5 10 1 1 0 0 1 value=DC 0V AC 0V } N 4500 3500 4300 3500 4 N 4300 3500 4300 2300 4 N 4300 2300 4500 2300 4 N 5100 3000 5100 2800 4 N 5100 4000 6300 4000 4 N 5100 1800 6300 1800 4 N 7200 4000 7500 4000 4 N 7200 4700 7200 4000 4 N 7200 1800 7500 1800 4 N 7200 1100 7200 1800 4 N 8100 1300 8100 500 4 N 8100 3500 8100 2300 4 N 8100 5300 8100 4500 4 N 7850 3400 8100 3400 4 N 6950 3400 6200 3400 4 N 6200 3400 6200 2900 4 N 6200 2900 5100 2900 4 N 3700 2900 4300 2900 4 T 2100 4400 9 16 1 0 0 4 1 Aura Drive Stage - 20Watt C 200 3100 1 0 0 spice-model-1.sym { T 300 3700 5 10 1 1 0 0 1 refdes=A1 T 1500 3400 5 10 1 1 0 0 1 model-name=BC548 T 700 3200 5 10 1 1 0 0 1 file=../../lib/bjt/bc548.mod } C 200 2100 1 0 0 spice-model-1.sym { T 300 2700 5 10 1 1 0 0 1 refdes=A2 T 1500 2400 5 10 1 1 0 0 1 model-name=BC558 T 700 2200 5 10 1 1 0 0 1 file=../../lib/bjt/bc558.mod } C 200 1100 1 0 0 spice-model-1.sym { T 300 1700 5 10 1 1 0 0 1 refdes=A3 T 1500 1400 5 10 1 1 0 0 1 model-name=TIP41 T 700 1200 5 10 1 1 0 0 1 file=../../lib/bjt/tip41.mod } C 200 100 1 0 0 spice-model-1.sym { T 300 700 5 10 1 1 0 0 1 refdes=A4 T 1500 400 5 10 1 1 0 0 1 model-name=TIP42 T 700 200 5 10 1 1 0 0 1 file=../../lib/bjt/tip42.mod } C 8600 2500 1 90 0 resistor-2.sym { T 9050 3150 5 10 1 1 180 0 1 refdes=Rout T 8700 2750 5 10 1 1 0 0 1 value=4 } N 8100 3400 8500 3400 4 C 8400 2200 1 0 0 gnd-1.sym C 4200 5600 1 270 0 vdc-1.sym { T 4650 4600 5 10 1 1 0 0 1 refdes=Vcc T 4500 4800 5 10 1 1 0 0 1 value=DC 15V } C 4200 800 1 270 0 vdc-1.sym { T 4650 1050 5 10 1 1 0 0 1 refdes=Vee T 4450 850 5 10 1 1 0 0 1 value=DC -15V } N 5400 5300 8100 5300 4 N 8100 500 5400 500 4 C 3900 5400 1 270 0 gnd-1.sym C 3900 600 1 270 0 gnd-1.sym gspiceui-1.1.00+dfsg/sch/audio/aem-6000-input-stage.sch0000644000000000000000000002107312517177312020767 0ustar rootrootv 20130925 2 C 40000 40000 0 0 0 title-A3.sym C 44700 43600 1 270 0 resistor-2.sym { T 44650 43200 5 10 1 1 0 6 1 refdes=R12 T 44650 42950 5 10 1 1 0 6 1 value=2.7K } C 43000 45300 1 180 0 resistor-2.sym { T 42400 45350 5 10 1 1 0 0 1 refdes=R3 T 42400 44900 5 10 1 1 0 0 1 value=1K } C 44100 44600 1 0 0 resistor-2.sym { T 44350 44850 5 10 1 1 0 0 1 refdes=RV1a T 44400 44400 5 10 1 1 0 0 1 value=10K } C 41200 44300 1 90 0 voltage-1.sym { T 40750 44850 5 10 1 1 180 0 1 refdes=Vin T 40400 44350 5 10 0 1 0 0 1 value=DC 0.0 } C 50700 42700 1 0 0 spice-model-1.sym { T 50800 43300 5 10 1 1 0 0 1 refdes=A2 T 52000 43000 5 10 1 1 0 0 1 model-name=BC547 T 51200 42800 5 10 1 1 0 0 1 file=../../lib/bjt/bc547.mod } C 50700 41700 1 0 0 spice-model-1.sym { T 50800 42300 5 10 1 1 0 0 1 refdes=A3 T 52000 42000 5 10 1 1 0 0 1 model-name=BC640 T 51200 41800 5 10 1 1 0 0 1 file=../../lib/bjt/bc640.mod } C 50000 43750 1 0 1 vdc-1.sym { T 49300 44300 5 10 0 1 0 6 1 refdes=V1 T 49300 44250 5 10 1 1 0 6 1 value=DC +70V } C 49400 43450 1 180 1 vdc-1.sym { T 49000 42950 5 10 0 1 180 6 1 refdes=V2 T 48600 42900 5 10 1 1 180 6 1 value=DC -70V } C 49125 43450 1 0 0 gnd-1.sym { T 49125 43450 5 10 0 0 0 0 1 netname=GND } C 46100 44700 1 270 0 resistor-2.sym { T 46350 44300 5 10 1 1 0 0 1 refdes=R5 T 46350 44050 5 10 1 1 0 0 1 value=220 } C 41900 45200 1 270 0 resistor-2.sym { T 41600 44700 5 10 1 1 0 0 1 refdes=R1 T 41400 44500 5 10 1 1 0 0 1 value=100K } C 41900 44000 1 0 0 gnd-1.sym { T 41900 44000 5 10 0 0 0 0 1 netname=GND } N 41000 44300 43100 44300 4 C 50700 43700 1 0 0 spice-model-1.sym { T 50800 44300 5 10 1 1 0 0 1 refdes=A1 T 52000 44000 5 10 1 1 0 0 1 model-name=BC639 T 51200 43800 5 10 1 1 0 0 1 file=../../lib/bjt/bc639.mod } T 49500 40900 9 14 1 0 0 0 1 AEM Audio Power Amplifier - Series 6000 - Input Stage T 49500 40400 9 10 1 0 0 0 1 aem-6000-input-stage.sch T 50500 40100 9 10 1 0 0 0 1 1 T 51000 40100 9 10 1 0 0 0 1 1 T 53400 40400 9 10 1 0 0 0 1 2015 - 04 - 24 T 53400 40100 9 10 1 0 0 0 1 Mike Waters C 49900 42250 1 180 0 vee-1.sym { T 49900 42250 5 10 0 0 0 0 1 netname=Vee } C 45400 40900 1 180 0 vee-1.sym { T 45400 40900 5 10 0 0 180 0 1 netname=Vee } C 44900 50300 1 0 0 vcc-1.sym { T 44900 50300 5 10 0 0 0 0 1 netname=Vcc } C 49500 44950 1 0 0 vcc-1.sym { T 49500 44950 5 10 0 0 0 0 1 netname=Vcc } N 49700 43750 49700 43450 4 N 49700 43750 49225 43750 4 C 41000 45000 1 0 0 capacitor-1.sym { T 41200 45700 5 10 0 0 0 0 1 device=CAPACITOR T 41100 45300 5 10 1 1 0 0 1 refdes=C1 T 41200 45900 5 10 0 0 0 0 1 symversion=0.1 T 41600 45300 5 10 1 1 0 0 1 value=470n } N 41900 45200 42100 45200 4 C 43300 44300 1 90 0 capacitor-1.sym { T 42600 44500 5 10 0 0 90 0 1 device=CAPACITOR T 43150 44850 5 10 1 1 0 0 1 refdes=C2 T 42400 44500 5 10 0 0 90 0 1 symversion=0.1 T 43150 44500 5 10 1 1 0 0 1 value=1n } N 43000 45200 43500 45200 4 C 45200 44600 1 0 0 resistor-2.sym { T 45450 44850 5 10 1 1 0 0 1 refdes=RV1b T 45450 44400 5 10 1 1 0 0 1 value=10K } C 44900 45400 1 270 1 zener-1.sym { T 45500 45800 5 10 0 0 90 2 1 device=ZENER_DIODE T 44500 45800 5 10 1 1 0 0 1 refdes=DZ1 T 44500 45700 5 10 0 1 0 0 1 value=1N759 T 45350 45800 5 10 1 1 0 0 1 description=12V } N 44500 46300 45700 46300 4 C 43900 44700 1 270 0 resistor-2.sym { T 43850 44300 5 10 1 1 0 6 1 refdes=R4 T 43850 44050 5 10 1 1 0 6 1 value=220 } N 44000 43800 46200 43800 4 N 46200 45000 46200 44700 4 N 44000 45000 44000 44700 4 N 45000 44700 45200 44700 4 N 45300 42300 45600 42300 4 N 44800 41800 45100 41800 4 C 44700 41800 1 270 0 resistor-2.sym { T 44600 41400 5 10 1 1 0 6 1 refdes=R13 T 44600 41150 5 10 1 1 0 6 1 value=120 } C 45500 43200 1 270 0 resistor-2.sym { T 45750 42800 5 10 1 1 0 0 1 refdes=R14 T 45750 42550 5 10 1 1 0 0 1 value=10K } C 45700 43500 1 180 0 gnd-1.sym { T 45700 43500 5 10 0 0 0 0 1 netname=GND } N 45600 41300 45600 40900 4 N 45600 40900 44800 40900 4 C 45000 47200 1 180 0 capacitor-1.sym { T 44800 46500 5 10 0 0 180 0 1 device=CAPACITOR T 44200 47050 5 10 1 1 0 0 1 refdes=C3 T 44800 46300 5 10 0 0 180 0 1 symversion=0.1 T 44450 46800 5 10 1 1 0 6 1 value=47p } C 43900 48300 1 270 0 resistor-2.sym { T 43800 47900 5 10 1 1 0 6 1 refdes=R6 T 43800 47650 5 10 1 1 0 6 1 value=33K } C 46300 48300 1 90 1 resistor-2.sym { T 46600 47850 5 10 1 1 0 6 1 refdes=R7 T 46700 47600 5 10 1 1 0 6 1 value=33K } N 44700 49400 45000 49400 4 N 45200 48900 45500 48900 4 N 45000 47000 45300 47000 4 C 44800 48500 1 90 1 resistor-2.sym { T 44850 48100 5 10 1 1 0 0 1 refdes=R9 T 44850 47900 5 10 1 1 0 0 1 value=3.3K } C 44800 50300 1 90 1 resistor-2.sym { T 44550 49900 5 10 1 1 0 6 1 refdes=R8 T 44550 49700 5 10 1 1 0 6 1 value=180 } C 45400 48900 1 270 0 resistor-2.sym { T 45650 48500 5 10 1 1 0 0 1 refdes=R10 T 45650 48300 5 10 1 1 0 0 1 value=10K } C 45400 47700 1 0 0 gnd-1.sym { T 45400 47700 5 10 0 0 0 0 1 netname=GND } N 44000 50300 46200 50300 4 N 45500 49900 45500 50300 4 N 44700 47500 44800 47500 4 N 44800 47500 44800 46300 4 N 44000 48300 44000 50300 4 N 46200 48300 46200 50300 4 N 46200 47400 46200 46700 4 N 44000 47400 44000 46700 4 N 44700 47600 44700 47500 4 N 45100 43800 45100 45400 4 N 46700 45200 47100 45200 4 C 47200 44300 1 90 0 resistor-2.sym { T 47600 44800 5 10 1 1 0 6 1 refdes=R49 T 47500 44600 5 10 1 1 0 6 1 value=1K } C 47000 44000 1 0 0 gnd-1.sym { T 47000 44000 5 10 0 0 0 0 1 netname=GND } C 53400 43700 1 0 0 spice-model-1.sym { T 53500 44300 5 10 1 1 0 0 1 refdes=A4 T 54700 44000 5 10 1 1 0 0 1 model-name=BC557 T 53900 43800 5 10 1 1 0 0 1 file=../../lib/bjt/bc557.mod } C 53400 42700 1 0 0 spice-model-1.sym { T 53500 43300 5 10 1 1 0 0 1 refdes=A8 T 54700 43000 5 10 1 1 0 0 1 model-name=1N759 T 53900 42800 5 10 1 1 0 0 1 file=../../lib/diode/1n759.mod } C 53400 41700 1 0 0 spice-model-1.sym { T 53500 42300 5 10 1 1 0 0 1 refdes=A9 T 54700 42000 5 10 1 1 0 0 1 model-name=ECG461 T 53900 41800 5 10 1 1 0 0 1 file=../../lib/jfet/ecg461.mod } T 63500 50200 8 10 0 0 270 0 1 device=INDUCTOR T 63700 50200 8 10 0 0 270 0 1 symversion=0.1 N 44000 45800 44000 45700 4 N 46200 45800 46200 45700 4 C 43500 45000 1 0 0 spice-njfet-1.sym { T 44300 45400 5 10 0 0 0 0 1 device=FET_TRANSISTOR T 44200 45500 5 10 1 1 0 0 1 refdes=J1 T 44000 45250 5 10 1 1 0 0 1 value=ECG461 } C 46700 45000 1 0 1 spice-njfet-1.sym { T 45900 45400 5 10 0 0 0 6 1 device=FET_TRANSISTOR T 46000 45500 5 10 1 1 0 6 1 refdes=J2 T 46200 45250 5 10 1 1 0 6 1 value=ECG461 } C 44500 45800 1 0 1 spice-npn-2.sym { T 43600 46500 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 43900 46400 5 10 1 1 0 6 1 refdes=Q3 T 44000 46200 5 10 1 1 0 6 1 value=BC639 } C 45700 45800 1 0 0 spice-npn-2.sym { T 46600 46500 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 46300 46400 5 10 1 1 0 0 1 refdes=Q4 T 46200 46200 5 10 1 1 0 0 1 value=BC639 } C 45300 41800 1 0 1 spice-npn-2.sym { T 44400 42500 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 44700 42400 5 10 1 1 0 6 1 refdes=Q7 T 44850 42200 5 10 1 1 0 6 1 value=BC639 } N 44800 43600 44800 43800 4 C 45100 41300 1 0 0 spice-npn-2.sym { T 46000 42000 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 45700 41900 5 10 1 1 0 0 1 refdes=Q8 T 45550 41700 5 10 1 1 0 0 1 value=BC547 } N 45600 42200 45600 42300 4 C 45200 49400 1 180 0 spice-pnp-2.sym { T 44300 48700 5 8 0 0 180 0 1 device=PNP_TRANSISTOR T 44600 49200 5 10 1 1 180 0 1 refdes=Q5 T 44750 48950 5 10 1 1 180 0 1 value=BC640 } C 45000 49900 1 180 1 spice-pnp-2.sym { T 45900 49200 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 45600 49700 5 10 1 1 180 6 1 refdes=Q6 T 45450 49450 5 10 1 1 180 6 1 value=BC557 } N 45500 49000 45500 48900 4 N 44000 44700 44100 44700 4 N 46100 44700 46200 44700 4 C 46200 47100 1 180 0 resistor-2.sym { T 45600 47150 5 10 1 1 0 0 1 refdes=R11 T 45600 46700 5 10 1 1 0 0 1 value=1K } N 46200 47200 46900 47200 4 N 44000 47200 43200 47200 4 T 48900 49400 9 10 1 0 0 0 8 Differential input stage : Rload represents the load presented by the next stage Current source formed by Q5 delivers 3.95mA Current source formed by Q7 delivers 5.85mA AC analysis : Gain (without Rload) = 25.5 = 28.1 dB AC analysis : Gain (with Rload) = 4.7 = 13.4 dB Transient analysis : Gain (without Rload) = 25.5 @ Vin = 1 KHz & 100 mV Transient analysis : Gain (with Rload) = 5.0 @ Vin = 1 KHz & 100 mV N 43200 47200 43200 51000 4 N 43200 51000 46900 51000 4 N 46900 51000 46900 49400 4 C 47000 49400 1 90 1 resistor-2.sym { T 47050 49000 5 10 1 1 0 0 1 refdes=Rload T 47050 48800 5 10 1 1 0 0 1 value=16.14K } N 46900 47200 46900 48500 4 T 48900 47900 9 10 1 0 0 0 6 There are several equivalents for the dual n-channel JFET ECG461 : 1. SST404 2. 2N5545 3. NTE461 4. EXR461 T 40500 40500 9 10 1 0 0 0 3 This schematic can be simulated using NG-Spice but not GNU-Cap (last tested 2011-02-04) N 44000 47000 44100 47000 4 gspiceui-1.1.00+dfsg/sch/audio/amp-18w-1.sch0000644000000000000000000001100012124473163016716 0ustar rootrootv 20110115 2 C 8350 2900 1 90 0 resistor-2.sym { T 8050 3550 5 10 1 1 180 0 1 refdes=R6 T 7850 3150 5 10 1 1 0 0 1 value=10 } C 4650 5000 1 270 0 resistor-2.sym { T 5000 4600 5 10 1 1 0 0 1 refdes=R2 T 4950 4300 5 10 1 1 0 0 1 value=4.7K } C 4650 1700 1 270 0 resistor-2.sym { T 5000 1300 5 10 1 1 0 0 1 refdes=R4 T 4950 1000 5 10 1 1 0 0 1 value=4.7K } C 3000 5500 1 0 0 resistor-2.sym { T 3150 5750 5 10 1 1 0 0 1 refdes=R5 T 3550 5750 5 10 1 1 0 0 1 value=82K } C 4650 2900 1 270 0 resistor-2.sym { T 4950 2550 5 10 1 1 0 0 1 refdes=R3 T 4950 2250 5 10 1 1 0 0 1 value=1K } C 8450 2900 1 90 1 capacitor-4.sym { T 8550 2600 5 10 1 1 0 6 1 refdes=C6 T 8700 2100 5 10 1 1 0 6 1 value=100n } C 5750 3300 1 0 0 npn-3.sym { T 6650 3850 5 10 1 1 0 0 1 refdes=Q1 T 6650 3600 5 10 1 1 0 0 1 value=BC548 } C 6950 700 1 0 0 npn-3.sym { T 7850 1250 5 10 1 1 0 0 1 refdes=Q3 T 7850 1000 5 10 1 1 0 0 1 value=TIP41 } C 5750 2500 1 180 1 pnp-3.sym { T 6650 2150 5 10 1 1 180 6 1 refdes=Q2 T 6650 1750 5 10 1 1 0 0 1 value=BC558 } C 6950 5100 1 180 1 pnp-3.sym { T 7850 4750 5 10 1 1 180 6 1 refdes=Q4 T 7850 4350 5 10 1 1 0 0 1 value=TIP42 } C 8150 1700 1 0 0 gnd-1.sym C 900 3100 1 90 0 voltage-1.sym { T 550 3250 5 10 1 1 180 0 1 refdes=Vin T 300 2850 5 10 1 1 0 0 1 value=DC 0V AC 0V } N 6350 4600 6950 4600 4 N 6350 4600 6350 4300 4 N 6350 1200 6950 1200 4 N 6350 1200 6350 1500 4 N 7550 700 7550 500 4 N 7550 4100 7550 1700 4 N 7550 5300 7550 5100 4 N 6350 2900 7550 2900 4 N 6350 3300 6350 2500 4 N 700 4000 700 4100 4 T 6600 6400 9 18 1 0 0 4 1 Audio Amplifier - 18Watt C 10600 4200 1 0 0 spice-model-1.sym { T 10700 4800 5 10 1 1 0 0 1 refdes=A2 T 11900 4500 5 10 1 1 0 0 1 model-name=BC548 T 11100 4300 5 10 1 1 0 0 1 file=../../lib/bjt/bc548.mod } C 10600 3200 1 0 0 spice-model-1.sym { T 10700 3800 5 10 1 1 0 0 1 refdes=A3 T 11900 3500 5 10 1 1 0 0 1 model-name=BC558 T 11100 3300 5 10 1 1 0 0 1 file=../../lib/bjt/bc558.mod } C 10600 2200 1 0 0 spice-model-1.sym { T 10700 2800 5 10 1 1 0 0 1 refdes=A4 T 11900 2500 5 10 1 1 0 0 1 model-name=TIP41 T 11100 2300 5 10 1 1 0 0 1 file=../../lib/bjt/tip41.mod } C 10600 1200 1 0 0 spice-model-1.sym { T 10700 1800 5 10 1 1 0 0 1 refdes=A5 T 11900 1500 5 10 1 1 0 0 1 model-name=TIP42 T 11100 1300 5 10 1 1 0 0 1 file=../../lib/bjt/tip42.mod } C 9650 3500 1 270 0 resistor-2.sym { T 9200 2850 5 10 1 1 0 0 1 refdes=Rout T 9550 3250 5 10 1 1 180 0 1 value=4 } N 7550 3800 8650 3800 4 C 9650 2300 1 0 0 gnd-1.sym C 9950 5600 1 90 1 vdc-1.sym { T 9500 4600 5 10 1 1 0 6 1 refdes=Vcc T 9650 4800 5 10 1 1 0 6 1 value=DC 15V } C 9950 800 1 90 1 vdc-1.sym { T 9500 1050 5 10 1 1 0 6 1 refdes=Vee T 9750 850 5 10 1 1 0 6 1 value=DC -15V } N 3400 5300 8750 5300 4 N 3400 500 8750 500 4 C 10250 5200 1 90 0 gnd-1.sym C 10250 400 1 90 0 gnd-1.sym C 5850 2500 1 90 0 capacitor-4.sym { T 6150 3000 5 10 1 1 180 0 1 refdes=C5 T 5750 2600 5 10 1 1 0 0 1 value=100u } C 4550 3800 1 270 0 diode-1.sym { T 5050 3300 5 10 1 1 0 0 1 refdes=D1 T 4850 3000 5 10 1 1 0 0 1 value=1N914 } C 2600 2400 1 90 0 resistor-2.sym { T 2900 3000 5 10 1 1 180 0 1 refdes=R1 T 2700 2600 5 10 1 1 0 0 1 value=1K } C 8650 3700 1 0 0 resistor-2.sym { T 8950 4000 5 10 1 1 0 0 1 refdes=R7 T 8950 3500 5 10 1 1 0 0 1 value=22 } N 4750 5300 4750 5000 4 N 4750 4100 4750 3800 4 N 4750 2000 4750 1700 4 N 4750 800 4750 500 4 N 4100 3800 5750 3800 4 N 5750 2000 4750 2000 4 N 5650 3800 5650 3400 4 N 9550 3800 9750 3800 4 N 9750 3800 9750 3500 4 N 3400 4300 3400 5300 4 N 3400 3300 3400 500 4 N 8650 3800 8650 5600 4 N 8650 5600 3900 5600 4 N 3000 5600 2500 5600 4 C 900 3900 1 0 0 capacitor-4.sym { T 1000 4200 5 10 1 1 0 0 1 refdes=C1 T 1500 4200 5 10 1 1 0 0 1 value=470n } N 2700 3500 2500 3500 4 N 2500 3300 2500 5600 4 C 2300 2400 1 270 0 capacitor-4.sym { T 2200 2100 5 10 1 1 0 0 1 refdes=C2 T 2050 1650 5 10 1 1 0 0 1 value=100u } C 2400 1200 1 0 0 gnd-1.sym C 1800 4100 1 270 0 resistor-2.sym { T 1500 3600 5 10 1 1 0 0 1 refdes=R9 T 1400 3400 5 10 1 1 0 0 1 value=22K } C 1800 2800 1 0 0 gnd-1.sym N 1800 4100 2700 4100 4 N 700 3100 1900 3100 4 N 5650 2500 5650 2000 4 C 10600 5200 1 0 0 spice-model-1.sym { T 10700 5800 5 10 1 1 0 0 1 refdes=A1 T 11900 5500 5 10 1 1 0 0 1 model-name=LM358 T 11100 5300 5 10 1 1 0 0 1 file=../../lib/opamp/lm358.mod } C 10600 200 1 0 0 spice-model-1.sym { T 10700 800 5 10 1 1 0 0 1 refdes=A6 T 11900 500 5 10 1 1 0 0 1 model-name=1N914 T 11100 300 5 10 1 1 0 0 1 file=../../lib/diode/1n914.mod } N 1900 3200 1900 3100 4 N 900 4100 700 4100 4 C 2700 3200 1 0 0 spice-opamp-2.sym { T 3700 4125 5 10 1 1 0 0 1 refdes=U1 T 3600 3400 5 10 1 1 0 0 1 value=LM358 } gspiceui-1.1.00+dfsg/sch/audio/aem-6000-filter-input.sch0000644000000000000000000000306112512221241021130 0ustar rootrootv 20130925 2 C 40000 40000 0 0 0 title-A4.sym T 45100 40900 9 16 1 0 0 0 1 AEM 6000 Power Amplifier - Input Filter T 44800 40400 9 10 1 0 0 0 1 aem-6000-filter-input.sch T 45400 40100 9 10 1 0 0 0 1 1 T 46300 40100 9 10 1 0 0 0 1 1 T 48700 40400 9 10 1 0 0 0 1 2015 - 04 - 11 T 48700 40100 9 10 1 0 0 0 1 Mike Waters C 46800 45200 1 180 0 resistor-2.sym { T 46200 45300 5 10 1 1 0 0 1 refdes=R3 T 46200 44800 5 10 1 1 0 0 1 value=1K } C 43900 45100 1 270 0 voltage-1.sym { T 44700 45050 5 10 0 1 180 0 1 value=DC 0.0 T 43800 44600 5 10 1 1 0 6 1 refdes=Vin } C 45500 45100 1 270 0 resistor-2.sym { T 45400 44700 5 10 1 1 0 6 1 refdes=R1 T 45400 44400 5 10 1 1 0 6 1 value=100K } C 44900 43900 1 0 0 gnd-1.sym { T 44900 43900 5 10 0 0 0 0 1 netname=GND } N 44100 44200 47000 44200 4 C 44300 44900 1 0 0 capacitor-1.sym { T 44500 45600 5 10 0 0 0 0 1 device=CAPACITOR T 44500 45800 5 10 0 0 0 0 1 symversion=0.1 T 44600 45200 5 10 1 1 0 6 1 refdes=C1 T 44900 45200 5 10 1 1 0 0 1 value=470n } N 45200 45100 45900 45100 4 C 47200 44200 1 90 0 capacitor-1.sym { T 46500 44400 5 10 0 0 90 0 1 device=CAPACITOR T 46300 44400 5 10 0 0 90 0 1 symversion=0.1 T 47100 44800 5 10 1 1 0 0 1 refdes=C2 T 47100 44400 5 10 1 1 0 0 1 value=1n } N 46800 45100 47300 45100 4 { T 46800 45100 5 10 0 0 0 0 1 netname=Output } C 47300 45000 1 0 0 output-1.sym { T 47400 45300 5 10 0 0 0 0 1 device=OUTPUT T 47500 45300 5 10 1 1 0 0 1 netname=Output } N 44100 45100 44300 45100 4 N 45600 44200 45000 44200 4 T 42400 43000 9 10 1 0 0 0 1 The 3dB band of the input filter is : 3.4Hz to 159kHz (using NG-Spice) gspiceui-1.1.00+dfsg/sch/audio/aem-6000-amp.sch0000644000000000000000000006347612517177306017324 0ustar rootrootv 20130925 2 C 40000 40000 0 0 0 title-A2.sym C 45400 45300 1 90 1 resistor-2.sym { T 45150 44950 5 10 1 1 0 6 1 refdes=R12 T 45150 44750 5 10 1 1 0 6 1 value=2.7K } C 43400 47100 1 180 0 resistor-2.sym { T 42800 47150 5 10 1 1 0 0 1 refdes=R3 T 42800 46700 5 10 1 1 0 0 1 value=1K } C 44400 46400 1 0 0 resistor-2.sym { T 44650 46650 5 10 1 1 0 0 1 refdes=RV1a T 44600 46200 5 10 1 1 0 0 1 value=10511 } C 41000 47000 1 270 0 voltage-1.sym { T 40950 46650 5 10 1 1 180 0 1 refdes=Vin T 41800 46950 5 10 0 1 180 0 1 value=DC 0.0 } C 40400 50900 1 0 0 spice-model-1.sym { T 40500 51500 5 10 1 1 0 0 1 refdes=A2 T 41700 51200 5 10 1 1 0 0 1 model-name=BC547 T 40900 51000 5 10 1 1 0 0 1 file=../../lib/models/bc547.mod } C 40400 50000 1 0 0 spice-model-1.sym { T 40500 50600 5 10 1 1 0 0 1 refdes=A3 T 41700 50300 5 10 1 1 0 0 1 model-name=BC640 T 40900 50100 5 10 1 1 0 0 1 file=../../lib/models/bc640.mod } C 40400 48200 1 0 0 spice-model-1.sym { T 40500 48800 5 10 1 1 0 0 1 refdes=A5 T 41700 48500 5 10 1 1 0 0 1 model-name=MJE340 T 40900 48300 5 10 1 1 0 0 1 file=../../lib/models/mje340.mod } C 40400 43900 1 0 0 spice-model-1.sym { T 40500 44500 5 10 1 1 0 0 1 refdes=A6 T 41700 44200 5 10 1 1 0 0 1 model-name=MJE350 T 40900 44000 5 10 1 1 0 0 1 file=../../lib/models/mje350.mod } C 62900 50800 1 0 1 vdc-1.sym { T 62200 51350 5 10 0 1 0 6 1 refdes=V1 T 61400 51450 5 10 1 1 180 6 1 value=DC +70V } C 62300 50400 1 180 1 vdc-1.sym { T 61900 49900 5 10 0 1 180 6 1 refdes=V2 T 61400 49850 5 10 1 1 180 6 1 value=DC -70V } C 48400 52000 1 270 0 diode-1.sym { T 48900 51400 5 10 1 1 0 0 1 refdes=D1 T 48650 51150 5 10 1 1 0 0 1 value=1N914 } C 46800 46400 1 90 1 resistor-2.sym { T 46550 45900 5 10 1 1 0 6 1 refdes=R5 T 46550 45650 5 10 1 1 0 6 1 value=220 } C 42300 47000 1 270 0 resistor-2.sym { T 42000 46500 5 10 1 1 0 0 1 refdes=R1 T 41800 46300 5 10 1 1 0 0 1 value=100K } C 42300 45800 1 0 0 gnd-1.sym { T 42300 45800 5 10 0 0 0 0 1 netname=GND } N 41200 46100 43600 46100 4 C 40400 51800 1 0 0 spice-model-1.sym { T 40500 52400 5 10 1 1 0 0 1 refdes=A1 T 41700 52100 5 10 1 1 0 0 1 model-name=BC639 T 40900 51900 5 10 1 1 0 0 1 file=../../lib/models/bc639.mod } C 40400 43000 1 0 0 spice-model-1.sym { T 40500 43600 5 10 1 1 0 0 1 refdes=A7 T 41700 43300 5 10 1 1 0 0 1 model-name=1N914 T 40900 43100 5 10 1 1 0 0 1 file=../../lib/models/1n914.mod } T 57000 40900 9 14 1 0 0 0 1 AEM Audio Power Amplifier - Series 6000 T 56400 40400 9 10 1 0 0 0 1 aem-6000-amp.sch T 57100 40100 9 10 1 0 0 0 1 1 T 58000 40100 9 10 1 0 0 0 1 1 T 60300 40400 9 10 1 0 0 0 1 2015 - 04 - 19 T 60300 40100 9 10 1 0 0 0 1 Mike Waters C 62800 49200 1 180 0 vee-1.sym { T 62800 49200 5 10 0 0 0 0 1 netname=Vee } C 56000 42600 1 180 0 vee-1.sym { T 56000 42600 5 10 0 0 180 0 1 netname=Vee } C 55600 52000 1 0 0 vcc-1.sym { T 55600 52000 5 10 0 0 0 0 1 netname=Vcc } C 62400 52000 1 0 0 vcc-1.sym { T 62400 52000 5 10 0 0 0 0 1 netname=Vcc } N 62600 50800 62600 50400 4 N 62600 50600 62100 50600 4 C 41200 46800 1 0 0 capacitor-1.sym { T 41400 47500 5 10 0 0 0 0 1 device=CAPACITOR T 41300 47100 5 10 1 1 0 0 1 refdes=C1 T 41400 47700 5 10 0 0 0 0 1 symversion=0.1 T 41800 47100 5 10 1 1 0 0 1 value=470n } N 42100 47000 42500 47000 4 C 43400 46100 1 270 1 capacitor-1.sym { T 44100 46300 5 10 0 0 90 2 1 device=CAPACITOR T 43550 46650 5 10 1 1 0 6 1 refdes=C2 T 44300 46300 5 10 0 0 90 2 1 symversion=0.1 T 43550 46300 5 10 1 1 0 6 1 value=1nF } N 43400 47000 43800 47000 4 C 45700 46400 1 0 0 resistor-2.sym { T 45950 46650 5 10 1 1 0 0 1 refdes=RV1b T 45950 46200 5 10 1 1 0 0 1 value=9489 } C 45300 46700 1 270 1 zener-1.sym { T 45900 47100 5 10 0 0 90 2 1 device=ZENER_DIODE T 45400 47500 5 10 1 1 0 6 1 refdes=DZ1 T 44900 47000 5 10 0 1 0 0 1 value=1N759 T 45600 47500 5 10 1 1 0 0 1 description=12V } N 44800 48000 46200 48000 4 C 44400 46400 1 90 1 resistor-2.sym { T 44450 45900 5 10 1 1 0 0 1 refdes=R4 T 44450 45650 5 10 1 1 0 0 1 value=220 } N 44300 45500 46700 45500 4 N 46700 46800 46700 46400 4 N 44300 46800 44300 46400 4 N 45500 46700 45500 45500 4 N 45300 46500 45700 46500 4 N 45800 44000 46000 44000 4 N 45300 43500 45500 43500 4 C 45200 43500 1 270 0 resistor-2.sym { T 45150 43100 5 10 1 1 0 6 1 refdes=R13 T 45150 42850 5 10 1 1 0 6 1 value=120 } C 45900 44900 1 270 0 resistor-2.sym { T 46150 44400 5 10 1 1 0 0 1 refdes=R14 T 46150 44200 5 10 1 1 0 0 1 value=10K } C 46100 45200 1 180 0 gnd-1.sym { T 46100 45200 5 10 0 0 0 0 1 netname=GND } N 46000 43000 46000 42600 4 N 47000 42600 45300 42600 4 C 45600 48600 1 0 0 resistor-2.sym { T 46200 49000 5 10 1 1 180 0 1 refdes=R11 T 45900 48400 5 10 1 1 0 0 1 value=1K } C 45500 48900 1 180 0 capacitor-1.sym { T 45300 48200 5 10 0 0 180 0 1 device=CAPACITOR T 44900 48800 5 10 1 1 0 6 1 refdes=C3 T 45300 48000 5 10 0 0 180 0 1 symversion=0.1 T 44900 48600 5 10 1 1 180 0 1 value=47pF } C 44200 50600 1 270 0 resistor-2.sym { T 44100 50200 5 10 1 1 0 6 1 refdes=R6 T 44100 50000 5 10 1 1 0 6 1 value=33K } C 46800 50600 1 90 1 resistor-2.sym { T 46900 50200 5 10 1 1 0 0 1 refdes=R7 T 46900 50000 5 10 1 1 0 0 1 value=33K } N 45100 51100 45300 51100 4 N 45600 50600 45800 50600 4 N 45500 48700 45600 48700 4 C 45000 50200 1 270 0 resistor-2.sym { T 44900 49700 5 10 1 1 0 6 1 refdes=R9 T 44900 49500 5 10 1 1 0 6 1 value=3.3K } C 45000 52000 1 270 0 resistor-2.sym { T 44900 51600 5 10 1 1 0 6 1 refdes=R8 T 44900 51400 5 10 1 1 0 6 1 value=180 } C 45900 50600 1 90 1 resistor-2.sym { T 46000 50200 5 10 1 1 0 0 1 refdes=R10 T 46000 50000 5 10 1 1 0 0 1 value=10K } C 45700 49400 1 0 0 gnd-1.sym { T 45700 49400 5 10 0 0 0 0 1 netname=GND } N 44300 52000 47300 52000 4 N 45800 51600 45800 52000 4 N 45100 49200 45300 49200 4 N 45300 49200 45300 48000 4 N 44300 50600 44300 52000 4 N 46700 50600 46700 52000 4 N 46700 49700 46700 48400 4 N 44300 49700 44300 48400 4 C 48400 51100 1 270 0 diode-1.sym { T 48900 50500 5 10 1 1 0 0 1 refdes=D2 T 48650 50250 5 10 1 1 0 0 1 value=1N914 } C 48400 50200 1 270 0 diode-1.sym { T 48900 49600 5 10 1 1 0 0 1 refdes=D3 T 48650 49350 5 10 1 1 0 0 1 value=1N914 } C 47300 51900 1 0 0 resistor-2.sym { T 47350 52150 5 10 1 1 0 0 1 refdes=R15 T 47850 52150 5 10 1 1 0 0 1 value=10 } C 48400 45300 1 270 0 diode-1.sym { T 48900 44700 5 10 1 1 0 0 1 refdes=D4 T 48650 44450 5 10 1 1 0 0 1 value=1N914 } C 48400 44400 1 270 0 diode-1.sym { T 48900 43800 5 10 1 1 0 0 1 refdes=D5 T 48650 43550 5 10 1 1 0 0 1 value=1N914 } C 47000 42500 1 0 0 resistor-2.sym { T 47100 42300 5 10 1 1 0 0 1 refdes=R16 T 47600 42300 5 10 1 1 0 0 1 value=10 } C 48400 43500 1 270 0 diode-1.sym { T 48900 42900 5 10 1 1 0 0 1 refdes=D6 T 48650 42650 5 10 1 1 0 0 1 value=1N914 } C 47000 44000 1 180 0 gnd-1.sym { T 47000 44000 5 10 0 0 0 0 1 netname=GND } C 47100 50700 1 0 0 gnd-1.sym { T 47100 50700 5 10 0 0 0 0 1 netname=GND } C 48700 49100 1 90 1 resistor-2.sym { T 49100 48700 5 10 1 1 0 6 1 refdes=R17 T 49100 48450 5 10 1 1 0 6 1 value=10K } C 48700 46400 1 90 1 resistor-2.sym { T 49100 46000 5 10 1 1 0 6 1 refdes=R18 T 49100 45750 5 10 1 1 0 6 1 value=10K } N 48600 48200 48600 46400 4 N 48600 45500 48600 45300 4 N 48600 49300 48600 49100 4 N 47200 47000 48100 47000 4 N 48100 41900 48100 47000 4 N 47900 42600 59600 42600 4 N 46700 48500 48100 48500 4 N 48100 48500 48100 47300 4 N 48100 47300 50400 47300 4 C 48900 46600 1 0 0 gnd-1.sym { T 48900 46600 5 10 0 0 0 0 1 netname=GND } N 49000 46900 48600 46900 4 N 46900 42800 46900 42600 4 N 47200 52000 47200 51900 4 N 48200 52000 59600 52000 4 C 49800 51200 1 90 1 resistor-2.sym { T 49850 50800 5 10 1 1 0 0 1 refdes=R19 T 49850 50550 5 10 1 1 0 0 1 value=150 } C 49800 44300 1 90 1 resistor-2.sym { T 49850 43900 5 10 1 1 0 0 1 refdes=R20 T 49850 43650 5 10 1 1 0 0 1 value=150 } N 49200 49200 48600 49200 4 N 49700 49700 49700 50300 4 N 49700 44900 49700 44300 4 N 49200 45400 48600 45400 4 N 49700 43400 49700 42600 4 N 49700 45800 49700 47100 4 N 49700 48800 49700 47500 4 N 49700 51200 49700 52000 4 C 51000 48400 1 90 1 resistor-2.sym { T 51050 48000 5 10 1 1 0 0 1 refdes=R23 T 51050 47750 5 10 1 1 0 0 1 value=100 } C 52000 48400 1 270 0 resistor-2.sym { T 51950 48000 5 10 1 1 0 6 1 refdes=R24 T 51950 47750 5 10 1 1 0 6 1 value=100 } C 51000 47100 1 90 1 resistor-2.sym { T 51050 46700 5 10 1 1 0 0 1 refdes=R25 T 51050 46450 5 10 1 1 0 0 1 value=100 } C 52200 47100 1 90 1 resistor-2.sym { T 51950 46700 5 10 1 1 0 6 1 refdes=R26 T 51950 46450 5 10 1 1 0 6 1 value=100 } N 50900 47500 52100 47500 4 N 50900 47100 52100 47100 4 N 50900 47500 50600 47100 4 N 50600 47100 49700 47100 4 N 50900 47100 50600 47500 4 N 50600 47500 49700 47500 4 C 50300 48600 1 270 0 resistor-2.sym { T 50250 48200 5 10 1 1 0 6 1 refdes=R22 T 50250 47950 5 10 1 1 0 6 1 value=100 } C 50300 46900 1 270 0 resistor-2.sym { T 50250 46500 5 10 1 1 0 6 1 refdes=R21 T 50250 46250 5 10 1 1 0 6 1 value=100 } N 50400 48600 50400 48900 4 N 50400 46000 50400 45700 4 N 50400 47700 50400 46900 4 C 51000 50800 1 90 1 resistor-2.sym { T 51050 50400 5 10 1 1 0 0 1 refdes=R27 T 51050 50150 5 10 1 1 0 0 1 value=680 } C 52000 50800 1 270 0 resistor-2.sym { T 51950 50400 5 10 1 1 0 6 1 refdes=R28 T 51950 50150 5 10 1 1 0 6 1 value=680 } C 51000 44700 1 90 1 resistor-2.sym { T 51050 44300 5 10 1 1 0 0 1 refdes=R29 T 51050 44050 5 10 1 1 0 0 1 value=680 } C 52000 44700 1 270 0 resistor-2.sym { T 51950 44300 5 10 1 1 0 6 1 refdes=R30 T 51950 44050 5 10 1 1 0 6 1 value=680 } N 50900 49900 50900 49300 4 N 52100 49300 52100 49900 4 N 50900 45300 50900 44700 4 N 52100 45300 52100 44700 4 C 53100 42000 1 180 1 resistor-2.sym { T 53100 42050 5 10 1 1 0 0 1 refdes=R48 T 53700 42050 5 10 1 1 0 0 1 value=47K } C 52600 41000 1 270 1 resistor-2.sym { T 52200 41500 5 10 1 1 0 0 1 refdes=R49 T 52300 41300 5 10 1 1 0 0 1 value=1K } C 54000 41600 1 180 0 capacitor-1.sym { T 53800 40900 5 10 0 0 180 0 1 device=CAPACITOR T 53200 41200 5 10 1 1 0 0 1 refdes=C6 T 53800 40700 5 10 0 0 180 0 1 symversion=0.1 T 53650 41200 5 10 1 1 0 0 1 value=15pF } N 51500 50800 51500 52000 4 N 51500 43800 51500 42600 4 C 52600 40700 1 0 0 gnd-1.sym { T 52600 40700 5 10 0 0 0 0 1 netname=GND } N 48100 41900 53100 41900 4 N 54000 41900 60000 41900 4 C 52500 48600 1 270 0 resistor-2.sym { T 52750 48200 5 10 1 1 0 0 1 refdes=R31 T 52750 47950 5 10 1 1 0 0 1 value=100 } C 52700 46900 1 90 1 resistor-2.sym { T 52750 46500 5 10 1 1 0 0 1 refdes=R32 T 52750 46250 5 10 1 1 0 0 1 value=100 } N 52600 47700 52600 46900 4 N 52600 48900 52600 48600 4 N 52600 45700 52600 46000 4 N 52600 47300 53200 47300 4 N 52800 48900 52800 52600 4 N 52800 52600 43500 52600 4 N 43500 52600 43500 49200 4 N 43500 49200 44300 49200 4 C 54200 52000 1 90 1 resistor-2.sym { T 54300 51600 5 10 1 1 0 0 1 refdes=R33 T 54300 51300 5 10 1 1 0 0 1 value=33 } C 54200 43500 1 90 1 resistor-2.sym { T 54250 43100 5 10 1 1 0 0 1 refdes=R34 T 54250 42850 5 10 1 1 0 0 1 value=33 } C 53600 51100 1 90 1 resistor-2.sym { T 53650 50700 5 10 1 1 0 0 1 refdes=R51 T 53650 50450 5 10 1 1 0 0 1 value=10 } C 54600 51100 1 270 0 resistor-2.sym { T 54550 50700 5 10 1 1 0 6 1 refdes=R52 T 54550 50450 5 10 1 1 0 6 1 value=10 } C 53600 44400 1 90 1 resistor-2.sym { T 53650 44000 5 10 1 1 0 0 1 refdes=R53 T 53650 43750 5 10 1 1 0 0 1 value=10 } C 54600 44400 1 270 0 resistor-2.sym { T 54550 44000 5 10 1 1 0 6 1 refdes=R54 T 54550 43750 5 10 1 1 0 6 1 value=10 } N 53500 51100 54700 51100 4 N 53500 43500 54700 43500 4 N 53500 45300 53500 49300 4 N 52100 49700 53000 49700 4 N 50900 49500 53000 49500 4 N 53000 49500 53000 49100 4 N 53000 49100 55200 49100 4 N 53000 44900 52100 44900 4 N 50900 45100 53000 45100 4 N 53000 45100 53000 45500 4 N 53000 45500 55200 45500 4 C 55400 47800 1 90 1 resistor-2.sym { T 55450 47400 5 10 1 1 0 0 1 refdes=R35 T 55450 47150 5 10 1 1 0 0 1 value=100 } N 54000 41900 54000 41400 4 C 54400 49100 1 90 1 capacitor-1.sym { T 53700 48900 5 10 0 0 270 2 1 device=CAPACITOR T 54100 48800 5 10 1 1 0 6 1 refdes=C7 T 53500 48900 5 10 0 0 270 2 1 symversion=0.1 T 54100 48350 5 10 1 1 0 6 1 value=18pF } C 54400 46400 1 90 1 capacitor-1.sym { T 53700 46200 5 10 0 0 270 2 1 device=CAPACITOR T 54100 46100 5 10 1 1 0 6 1 refdes=C8 T 53500 46200 5 10 0 0 270 2 1 symversion=0.1 T 54100 45650 5 10 1 1 0 6 1 value=18pF } N 55200 49700 55200 49100 4 N 55200 44900 55200 45500 4 N 54200 48200 55400 48200 4 { T 55600 48000 5 10 1 1 0 0 1 netname=MOS_Drv } C 56400 49500 1 90 1 diode-1.sym { T 55900 48900 5 10 1 1 0 6 1 refdes=D7 T 56150 48650 5 10 1 1 0 6 1 value=1N914 } C 58500 49500 1 90 1 diode-1.sym { T 58000 48900 5 10 1 1 0 6 1 refdes=D9 T 58250 48650 5 10 1 1 0 6 1 value=1N914 } C 56400 46000 1 90 1 diode-1.sym { T 55900 45400 5 10 1 1 0 6 1 refdes=D8 T 56150 45150 5 10 1 1 0 6 1 value=1N914 } C 58500 46000 1 90 1 diode-1.sym { T 58050 45400 5 10 1 1 0 6 1 refdes=D10 T 58250 45150 5 10 1 1 0 6 1 value=1N914 } C 56500 49900 1 270 0 capacitor-1.sym { T 57200 49700 5 10 0 0 270 0 1 device=CAPACITOR T 56800 49600 5 10 1 1 0 0 1 refdes=C9 T 57400 49700 5 10 0 0 270 0 1 symversion=0.1 T 56800 49150 5 10 1 1 0 0 1 value=330pF } C 58600 49900 1 270 0 capacitor-1.sym { T 59300 49700 5 10 0 0 270 0 1 device=CAPACITOR T 58900 49600 5 10 1 1 0 0 1 refdes=C10 T 59500 49700 5 10 0 0 270 0 1 symversion=0.1 T 58900 49150 5 10 1 1 0 0 1 value=330pF } C 56600 46000 1 270 0 capacitor-1.sym { T 57300 45800 5 10 0 0 270 0 1 device=CAPACITOR T 56900 45700 5 10 1 1 0 0 1 refdes=C11 T 57500 45800 5 10 0 0 270 0 1 symversion=0.1 T 56900 45250 5 10 1 1 0 0 1 value=33pF } C 58700 46000 1 270 0 capacitor-1.sym { T 59400 45800 5 10 0 0 270 0 1 device=CAPACITOR T 59000 45700 5 10 1 1 0 0 1 refdes=C12 T 59600 45800 5 10 0 0 270 0 1 symversion=0.1 T 59000 45250 5 10 1 1 0 0 1 value=33pF } C 56000 49500 1 270 1 zener-1.sym { T 56600 49900 5 10 0 0 90 2 1 device=ZENER_DIODE T 55600 50000 5 10 1 1 0 0 1 refdes=DZ2 T 55600 49800 5 10 0 1 0 0 1 value=1N759 T 55600 49750 5 10 1 1 0 0 1 description=12V } C 58100 49500 1 270 1 zener-1.sym { T 58700 49900 5 10 0 0 90 2 1 device=ZENER_DIODE T 57700 50000 5 10 1 1 0 0 1 refdes=DZ3 T 57700 49800 5 10 0 1 0 0 1 value=1N759 T 57700 49750 5 10 1 1 0 0 1 description=12V } C 56000 44200 1 270 1 zener-1.sym { T 56600 44600 5 10 0 0 90 2 1 device=ZENER_DIODE T 55600 44700 5 10 1 1 0 0 1 refdes=DZ4 T 55600 44500 5 10 0 1 0 0 1 value=1N759 T 55600 44450 5 10 1 1 0 0 1 description=12V } C 58100 44200 1 270 1 zener-1.sym { T 58700 44600 5 10 0 0 90 2 1 device=ZENER_DIODE T 57700 44700 5 10 1 1 0 0 1 refdes=DZ5 T 57700 44500 5 10 0 1 0 0 1 value=1N759 T 57700 44450 5 10 1 1 0 0 1 description=12V } C 56900 45100 1 90 1 resistor-2.sym { T 56950 44700 5 10 1 1 0 0 1 refdes=R44 T 56950 44450 5 10 1 1 0 0 1 value=22 } C 59000 45100 1 90 1 resistor-2.sym { T 59050 44700 5 10 1 1 0 0 1 refdes=R45 T 59050 44450 5 10 1 1 0 0 1 value=22 } N 56200 46000 57500 46000 4 N 56200 44100 57000 44100 4 N 58300 46000 59600 46000 4 N 58300 44100 59100 44100 4 N 56700 48600 56700 49000 4 N 56200 50500 57000 50500 4 N 56700 50500 56700 49900 4 N 58300 50500 59100 50500 4 N 58800 50500 58800 49900 4 N 58300 48600 59600 48600 4 N 58800 48600 58800 49000 4 C 56100 51500 1 270 0 resistor-2.sym { T 56000 51100 5 10 1 1 0 6 1 refdes=R36 T 56000 50800 5 10 1 1 0 6 1 value=270 } C 58200 51500 1 270 0 resistor-2.sym { T 58100 51100 5 10 1 1 0 6 1 refdes=R38 T 58100 50800 5 10 1 1 0 6 1 value=270 } C 56100 44000 1 270 0 resistor-2.sym { T 56050 43600 5 10 1 1 0 6 1 refdes=R37 T 56050 43350 5 10 1 1 0 6 1 value=270 } C 58200 44000 1 270 0 resistor-2.sym { T 58150 43600 5 10 1 1 0 6 1 refdes=R39 T 58150 43350 5 10 1 1 0 6 1 value=270 } C 57600 48500 1 90 1 resistor-2.sym { T 57350 48100 5 10 1 1 0 6 1 refdes=R40 T 57350 47850 5 10 1 1 0 6 1 value=0.22 } C 57600 47000 1 90 1 resistor-2.sym { T 57350 46600 5 10 1 1 0 6 1 refdes=R42 T 57350 46350 5 10 1 1 0 6 1 value=0.22 } C 59500 48500 1 270 0 resistor-2.sym { T 59450 48100 5 10 1 1 0 6 1 refdes=R41 T 59450 47850 5 10 1 1 0 6 1 value=0.22 } C 59500 47000 1 270 0 resistor-2.sym { T 59450 46600 5 10 1 1 0 6 1 refdes=R43 T 59450 46350 5 10 1 1 0 6 1 value=0.22 } N 55400 48200 55400 51600 4 N 55400 51600 58300 51600 4 N 55400 46400 55400 43000 4 N 55400 43000 58300 43000 4 N 57500 47600 57500 47000 4 N 59600 47600 59600 47000 4 N 57500 48600 56200 48600 4 N 57500 51100 57500 52000 4 N 59600 51100 59600 52000 4 N 57500 43500 57500 42600 4 N 59600 43500 59600 42600 4 N 59600 44300 59600 46100 4 N 59600 48500 59600 50300 4 N 57500 47400 59600 47400 4 { T 58300 47500 5 10 1 1 0 0 1 netname=Vout } N 59600 47200 61800 47200 4 C 60600 47200 1 90 1 resistor-2.sym { T 60600 47600 5 10 1 1 0 6 1 refdes=R46 T 60550 47350 5 10 1 1 0 6 1 value=22 } C 61000 47200 1 90 1 resistor-2.sym { T 60800 47600 5 10 1 1 0 0 1 refdes=R47 T 60850 47350 5 10 1 1 0 0 1 value=22 } C 60900 46300 1 90 1 capacitor-1.sym { T 60200 46100 5 10 0 0 270 2 1 device=CAPACITOR T 60600 46000 5 10 1 1 0 6 1 refdes=C13 T 60000 46100 5 10 0 0 270 2 1 symversion=0.1 T 60600 45550 5 10 1 1 0 6 1 value=22nF } N 60000 47200 60000 41900 4 N 60500 46300 60900 46300 4 N 57500 50300 57500 48500 4 N 57500 46100 57500 44300 4 N 61300 47200 61300 46400 4 N 61300 46000 61300 45300 4 C 40400 49100 1 0 0 spice-model-1.sym { T 40500 49700 5 10 1 1 0 0 1 refdes=A4 T 41700 49400 5 10 1 1 0 0 1 model-name=BC557 T 40900 49200 5 10 1 1 0 0 1 file=../../lib/models/bc557.mod } C 40400 42100 1 0 0 spice-model-1.sym { T 40500 42700 5 10 1 1 0 0 1 refdes=A8 T 41700 42400 5 10 1 1 0 0 1 model-name=1N759 T 40900 42200 5 10 1 1 0 0 1 file=../../lib/models/1n759.mod } C 40400 41200 1 0 0 spice-model-1.sym { T 40500 41800 5 10 1 1 0 0 1 refdes=A9 T 41700 41500 5 10 1 1 0 0 1 model-name=ECG461 T 40900 41300 5 10 1 1 0 0 1 file=../../lib/models/ecg461.mod } C 40400 40300 1 0 0 spice-model-1.sym { T 40500 40900 5 10 1 1 0 0 1 refdes=A10 T 41700 40600 5 10 1 1 0 0 1 model-name=2SK1058 T 40900 40400 5 10 1 1 0 0 1 file=../../lib/models/2sk1058.ckt } C 43900 40300 1 0 0 spice-model-1.sym { T 44000 40900 5 10 1 1 0 0 1 refdes=A11 T 45200 40600 5 10 1 1 0 0 1 model-name=2SJ162 T 44400 40400 5 10 1 1 0 0 1 file=../../lib/models/2sj162.ckt } C 54800 47800 1 270 0 resistor-2.sym { T 54700 47400 5 10 1 1 0 6 1 refdes=RV2 T 54700 47150 5 10 1 1 0 6 1 value=100 } N 54200 46400 55400 46400 4 N 52100 50800 50900 50800 4 N 50900 43800 52100 43800 4 T 63500 50200 8 10 0 0 270 0 1 device=INDUCTOR T 63700 50200 8 10 0 0 270 0 1 symversion=0.1 N 54700 49300 54700 48200 4 N 54700 46400 54700 45300 4 N 54900 48200 54900 47800 4 N 55300 47800 55300 48200 4 N 54900 46900 54900 46400 4 N 55300 46400 55300 46900 4 C 43800 46800 1 0 0 spice-njfet-1.sym { T 44600 47200 5 10 0 0 0 0 1 device=FET_TRANSISTOR T 44400 47300 5 10 1 1 0 0 1 refdes=J1a T 44200 47050 5 10 1 1 0 0 1 value=ECG461 } C 47200 46800 1 0 1 spice-njfet-1.sym { T 46400 47200 5 10 0 0 0 6 1 device=FET_TRANSISTOR T 46600 47300 5 10 1 1 0 6 1 refdes=J1b T 46800 47050 5 10 1 1 0 6 1 value=ECG461 } C 44800 47500 1 0 1 spice-npn-2.sym { T 43900 48200 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 44200 48100 5 10 1 1 0 6 1 refdes=Q3 T 44450 47900 5 10 1 1 0 6 1 value=BC639 } C 46200 47500 1 0 0 spice-npn-2.sym { T 47100 48200 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 46800 48100 5 10 1 1 0 0 1 refdes=Q4 T 46550 47900 5 10 1 1 0 0 1 value=BC639 } C 45800 43500 1 0 1 spice-npn-2.sym { T 44900 44200 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 45200 44100 5 10 1 1 0 6 1 refdes=Q7 T 45450 43900 5 10 1 1 0 6 1 value=BC639 } C 45500 43000 1 0 0 spice-npn-2.sym { T 46400 43700 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 46100 43600 5 10 1 1 0 0 1 refdes=Q8 T 45850 43400 5 10 1 1 0 0 1 value=BC547 } N 46000 43900 46000 44000 4 C 49200 49700 1 180 1 spice-pnp-2.sym { T 50100 49000 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 49800 49300 5 10 1 1 0 0 1 refdes=Q9 T 49550 49100 5 10 1 1 0 0 1 value=MJE350 } C 45600 51100 1 180 0 spice-pnp-2.sym { T 44700 50400 5 8 0 0 180 0 1 device=PNP_TRANSISTOR T 45000 50750 5 10 1 1 0 6 1 refdes=Q5 T 45250 50500 5 10 1 1 0 6 1 value=BC640 } C 45300 51600 1 180 1 spice-pnp-2.sym { T 46200 50900 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 45900 51250 5 10 1 1 0 0 1 refdes=Q6 T 45650 51000 5 10 1 1 0 0 1 value=BC557 } N 45800 50700 45800 50600 4 C 52600 46200 1 180 0 spice-pnp-2.sym { T 51700 45500 5 8 0 0 180 0 1 device=PNP_TRANSISTOR T 52000 46000 5 10 1 1 180 0 1 refdes=Q14 T 52250 45750 5 10 1 1 180 0 1 value=MJE350 } C 50400 46200 1 180 1 spice-pnp-2.sym { T 51300 45500 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 51000 46000 5 10 1 1 180 6 1 refdes=Q13 T 50750 45750 5 10 1 1 180 6 1 value=MJE350 } C 53000 50200 1 180 1 spice-pnp-2.sym { T 53900 49500 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 53600 50000 5 10 1 1 180 6 1 refdes=Q15 T 53350 49750 5 10 1 1 180 6 1 value=MJE350 } C 55200 50200 1 180 0 spice-pnp-2.sym { T 54300 49500 5 8 0 0 180 0 1 device=PNP_TRANSISTOR T 54600 50000 5 10 1 1 180 0 1 refdes=Q16 T 54850 49750 5 10 1 1 180 0 1 value=MJE350 } C 55200 44400 1 0 1 spice-npn-2.sym { T 54300 45100 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 54600 45000 5 10 1 1 0 6 1 refdes=Q18 T 54800 44800 5 10 1 1 0 6 1 value=MJE340 } C 53000 44400 1 0 0 spice-npn-2.sym { T 53900 45100 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 53600 45000 5 10 1 1 0 0 1 refdes=Q17 T 53350 44800 5 10 1 1 0 0 1 value=MJE340 } C 50400 48400 1 0 0 spice-npn-2.sym { T 51300 49100 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 51000 49000 5 10 1 1 0 0 1 refdes=Q11 T 50750 48800 5 10 1 1 0 0 1 value=MJE340 } C 49200 44900 1 0 0 spice-npn-2.sym { T 50100 45600 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 49800 45100 5 10 1 1 0 0 1 refdes=Q10 T 49550 45300 5 10 1 1 0 0 1 value=MJE340 } C 52600 48400 1 0 1 spice-npn-2.sym { T 51700 49100 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 52000 49000 5 10 1 1 0 6 1 refdes=Q12 T 52250 48800 5 10 1 1 0 6 1 value=MJE340 } N 44300 46500 44400 46500 4 N 46600 46500 46700 46500 4 N 46500 48700 46700 48700 4 N 45300 45300 45300 45500 4 N 45500 48000 45500 47600 4 N 53900 46900 53500 46900 4 N 53200 47300 53200 48900 4 N 53200 48900 52800 48900 4 N 53100 41400 53100 41900 4 B 62400 46000 200 400 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 L 62600 46400 62900 46900 3 0 0 0 -1 -1 L 62900 46900 62900 45500 3 0 0 0 -1 -1 L 62900 45500 62600 46000 3 0 0 0 -1 -1 N 62300 46000 62300 46400 4 C 61400 46500 1 180 1 resistor-2.sym { T 61500 46600 5 10 1 1 0 0 1 refdes=Rspkr T 62200 46600 5 10 1 1 0 0 1 value=8 } C 62300 45900 1 0 1 inductor-1.sym { T 61500 45750 5 10 1 1 180 8 1 refdes=Lspkr T 62100 45750 5 10 1 1 0 0 1 value=1mH T 62100 46400 5 10 0 0 180 2 1 device=INDUCTOR T 62100 46600 5 10 0 0 180 2 1 symversion=0.1 } A 62500 46200 224 297 126 3 0 0 0 -1 -1 T 57600 52600 9 10 1 0 0 0 17 NG-Spice DC Analysis : Vin range : -4.2 to 3.0 mV Corresponding V(NMOS_Drv) : -65.2 to 66.9 V Open loop max gain : 32800 = 90.3 dBV Note : The DC gain characteristic is non-linear, The gain drops of as the input level increases. AC Analysis : Open loop max gain : 33474 = 90.5 dBV @ 2188 Hz Open loop -6dB points : 2.00 Hz, 29.4 KHz Closed loop -6dB points : 1.95 Hz, 186.5 KHz Transient Analysis : Sweep start, stop, step : 0, 2msec, 5usec Signal source : Vin, 2188 Hz, 100 uVp-p amplitude Open loop gain : 33440 = 90.5 dBV Note : Distortion is easily detectable owing to the non-linear gain characteristic. T 40400 54000 9 10 1 0 0 0 10 Differential input stage : The input stage is significantly loaded down by the second stage. AC analysis : Gain (unloaded) = 25.5 = 28.1 dB AC analysis : Gain ( loaded) = 4.7 = 13.4 dB Transient analysis : Gain (unloaded) = 25.5 @ Vin = 1 KHz & 100 mVp-p Transient analysis : Gain ( loaded) = 5.0 @ Vin = 1 KHz & 100 mVp-p Current source formed by Q5 delivers 3.95mA Current source formed by Q7 delivers 5.85mA C 59100 50300 1 0 0 spice-nmos-2.sym { T 59700 50800 5 10 0 0 0 0 1 device=SUBCKT T 58800 50900 5 10 1 1 0 0 1 refdes=X20 T 58700 51150 5 10 1 1 0 0 1 value=2SK1058 } C 59100 44300 1 180 1 spice-pmos-2.sym { T 59700 43800 5 10 0 0 180 6 1 device=SUBCKT T 58800 43700 5 10 1 1 180 6 1 refdes=X22 T 58800 43450 5 10 1 1 180 6 1 value=2SJ162 } C 57000 50300 1 0 0 spice-nmos-2.sym { T 57600 50800 5 10 0 0 0 0 1 device=SUBCKT T 56700 50900 5 10 1 1 0 0 1 refdes=X19 T 56600 51150 5 10 1 1 0 0 1 value=2SK1058 } C 57000 44300 1 180 1 spice-pmos-2.sym { T 57600 43800 5 10 0 0 180 6 1 device=SUBCKT T 56700 43700 5 10 1 1 180 6 1 refdes=X21 T 56700 43450 5 10 1 1 180 6 1 value=2SJ162 } T 49100 53800 9 10 1 0 0 0 11 Problems with this design : 1. Some of the components can no longer be obtained ie. ECG461, 2SK176, 2SJ56 (can't even get SPICE models for them). 2. The input stage is significantly loaded down by the following stage (more than was intended I'm guessing). 3. The component count is high. 4. The open loop gain characteristic is non-linear (corrected by the feedback however). 5. When constructed the actual modules displayed a 2Vp-p oscillation at the output with no input. C 47400 51900 1 90 1 capacitor-4.sym { T 46300 51700 5 10 0 0 270 2 1 device=POLARIZED_CAPACITOR T 47700 51300 5 10 1 1 0 6 1 refdes=C5 T 46700 51700 5 10 0 0 270 2 1 symversion=0.1 T 47800 51100 5 10 1 1 0 6 1 value=100uF } C 47100 43700 1 90 1 capacitor-4.sym { T 46000 43500 5 10 0 0 270 2 1 device=POLARIZED_CAPACITOR T 47400 43200 5 10 1 1 0 6 1 refdes=C4 T 46400 43500 5 10 0 0 270 2 1 symversion=0.1 T 47500 43400 5 10 1 1 0 6 1 value=100uF } T 47900 40400 9 10 1 0 0 0 3 This schematic can be simulated using NG-Spice but not GNU-Cap (last tested 2011-02-04) N 61300 46400 61400 46400 4 N 61300 46000 61400 46000 4 N 56200 51500 56200 51600 4 N 58300 51500 58300 51600 4 N 56200 43100 56200 43000 4 N 58300 43000 58300 43100 4 N 56200 44000 56200 44200 4 N 58300 44000 58300 44200 4 N 56200 50600 56200 50400 4 N 58300 50600 58300 50400 4 N 56800 44200 56800 44100 4 N 58900 44200 58900 44100 4 T 40400 53400 9 10 1 0 0 0 1 The AEM 6000 was designed by David Tilbrook. N 44300 48700 44600 48700 4 N 45100 49300 45100 49200 4 C 62000 43700 1 0 1 gnd-2.sym C 61900 43900 1 0 0 resistor-2.sym { T 62300 44250 5 10 0 0 0 0 1 device=RESISTOR T 62000 44200 5 10 1 1 0 0 1 refdes=R2 T 62700 44200 5 10 1 1 0 0 1 value=1 } C 62700 43700 1 0 0 gnd-1.sym { T 62700 43700 5 10 0 0 0 0 1 netname=GND } C 53800 46600 1 0 0 gnd-2.sym C 62200 50300 1 0 1 gnd-2.sym C 61200 45000 1 0 0 gnd-2.sym C 60800 45000 1 0 1 gnd-2.sym N 60700 45300 60700 45400 4 gspiceui-1.1.00+dfsg/sch/audio/aem-6000-gain-stage.sch0000644000000000000000000002360212511652441020541 0ustar rootrootv 20130925 2 C 40000 40000 0 0 0 title-A3.sym C 52000 43950 1 0 1 vdc-1.sym { T 51300 44500 5 10 0 1 0 6 1 refdes=V1 T 51300 44450 5 10 1 1 0 6 1 value=DC +70V } C 51400 43450 1 180 1 vdc-1.sym { T 51000 42950 5 10 0 1 180 6 1 refdes=V2 T 50600 42900 5 10 1 1 180 6 1 value=DC -70V } C 51125 43500 1 0 0 gnd-1.sym { T 51125 43500 5 10 0 0 0 0 1 netname=GND } T 49600 40900 9 14 1 0 0 0 1 AEM Audio Power Amplifier - Series 6000 - Gain Stage T 49700 40400 9 10 1 0 0 0 1 aem-6000-gain-stage.sch T 50300 40100 9 10 1 0 0 0 1 1 T 51100 40100 9 10 1 0 0 0 1 1 T 53600 40400 9 10 1 0 0 0 1 2015 - 04 - 10 T 53600 40100 9 10 1 0 0 0 1 Mike Waters C 51900 42250 1 180 0 vee-1.sym { T 51900 42250 5 10 0 0 0 0 1 netname=Vee } C 51500 45150 1 0 0 vcc-1.sym { T 51500 45150 5 10 0 0 0 0 1 netname=Vcc } N 51700 43950 51700 43450 4 N 51700 43800 51225 43800 4 T 63500 50200 8 10 0 0 270 0 1 device=INDUCTOR T 63700 50200 8 10 0 0 270 0 1 symversion=0.1 C 53300 41800 1 0 0 spice-model-1.sym { T 53400 42400 5 10 1 1 0 0 1 refdes=A7 T 54600 42100 5 10 1 1 0 0 1 model-name=1N914 T 53800 41900 5 10 1 1 0 0 1 file=../../lib/diode/1n914.mod } C 41000 46700 1 90 1 voltage-1.sym { T 40550 46150 5 10 1 1 0 6 1 refdes=Vin T 40200 46650 5 10 0 1 180 6 1 value=DC 30.0 } N 44500 48000 46700 48000 4 C 44100 41100 1 180 0 vee-1.sym { T 44100 41100 5 10 0 0 180 0 1 netname=Vee } C 43600 50500 1 0 0 vcc-1.sym { T 43600 50500 5 10 0 0 0 0 1 netname=Vcc } N 41700 46700 41700 51100 4 C 41900 50500 1 270 0 diode-1.sym { T 42400 49900 5 10 1 1 0 0 1 refdes=D1 T 42150 49650 5 10 1 1 0 0 1 value=1N914 } C 41900 49600 1 270 0 diode-1.sym { T 42400 49000 5 10 1 1 0 0 1 refdes=D2 T 42150 48750 5 10 1 1 0 0 1 value=1N914 } C 41900 48700 1 270 0 diode-1.sym { T 42400 48100 5 10 1 1 0 0 1 refdes=D3 T 42150 47850 5 10 1 1 0 0 1 value=1N914 } C 41900 43800 1 270 0 diode-1.sym { T 42400 43200 5 10 1 1 0 0 1 refdes=D4 T 42150 42950 5 10 1 1 0 0 1 value=1N914 } C 41900 42900 1 270 0 diode-1.sym { T 42400 42300 5 10 1 1 0 0 1 refdes=D5 T 42150 42050 5 10 1 1 0 0 1 value=1N914 } C 41900 42000 1 270 0 diode-1.sym { T 42400 41400 5 10 1 1 0 0 1 refdes=D6 T 42150 41150 5 10 1 1 0 0 1 value=1N914 } C 42200 47600 1 90 1 resistor-2.sym { T 42600 47200 5 10 1 1 0 6 1 refdes=R17 T 42600 46950 5 10 1 1 0 6 1 value=10K } C 42200 44900 1 90 1 resistor-2.sym { T 42600 44500 5 10 1 1 0 6 1 refdes=R18 T 42600 44250 5 10 1 1 0 6 1 value=10K } N 42100 46700 42100 44900 4 N 42100 44000 42100 43800 4 N 42100 47800 42100 47600 4 C 43300 49600 1 90 1 resistor-2.sym { T 43350 49200 5 10 1 1 0 0 1 refdes=R19 T 43350 48950 5 10 1 1 0 0 1 value=150 } C 43300 42900 1 90 1 resistor-2.sym { T 43350 42500 5 10 1 1 0 0 1 refdes=R20 T 43350 42250 5 10 1 1 0 0 1 value=150 } N 42700 47700 42100 47700 4 N 43200 48200 43200 48700 4 N 43200 43400 43200 42900 4 N 42700 43900 42100 43900 4 N 43200 42000 43200 41100 4 N 43200 44300 43200 45600 4 N 43200 47300 43200 46000 4 N 43200 49600 43200 50500 4 C 44600 46900 1 90 1 resistor-2.sym { T 44650 46500 5 10 1 1 0 0 1 refdes=R23 T 44650 46250 5 10 1 1 0 0 1 value=100 } C 45600 46900 1 270 0 resistor-2.sym { T 45550 46500 5 10 1 1 0 6 1 refdes=R24 T 45550 46250 5 10 1 1 0 6 1 value=100 } C 44600 45600 1 90 1 resistor-2.sym { T 44650 45200 5 10 1 1 0 0 1 refdes=R25 T 44650 44950 5 10 1 1 0 0 1 value=100 } C 45800 45600 1 90 1 resistor-2.sym { T 45550 45200 5 10 1 1 0 6 1 refdes=R26 T 45550 44950 5 10 1 1 0 6 1 value=100 } N 44500 46000 45700 46000 4 N 44500 45600 45700 45600 4 N 44500 46000 44200 45600 4 N 44200 45600 43200 45600 4 N 44500 45600 44200 46000 4 N 44200 46000 43200 46000 4 C 43900 47100 1 270 0 resistor-2.sym { T 43850 46700 5 10 1 1 0 6 1 refdes=R22 T 43850 46450 5 10 1 1 0 6 1 value=100 } C 43900 45400 1 270 0 resistor-2.sym { T 43850 45000 5 10 1 1 0 6 1 refdes=R21 T 43800 44750 5 10 1 1 0 6 1 value=100 } N 44000 47100 44000 47400 4 N 44000 44500 44000 44200 4 N 44000 46200 44000 45400 4 C 44600 49600 1 90 1 resistor-2.sym { T 44650 49200 5 10 1 1 0 0 1 refdes=R27 T 44650 48950 5 10 1 1 0 0 1 value=680 } C 45800 49600 1 90 1 resistor-2.sym { T 45850 49200 5 10 1 1 0 0 1 refdes=R28 T 45850 48950 5 10 1 1 0 0 1 value=680 } C 44600 42900 1 90 1 resistor-2.sym { T 44650 42500 5 10 1 1 0 0 1 refdes=R29 T 44650 42250 5 10 1 1 0 0 1 value=680 } C 45800 42900 1 90 1 resistor-2.sym { T 45850 42500 5 10 1 1 0 0 1 refdes=R30 T 45850 42250 5 10 1 1 0 0 1 value=680 } N 44500 48700 44500 47800 4 N 45700 47800 45700 48700 4 N 44500 43800 44500 42900 4 N 45700 43800 45700 42900 4 N 45100 49600 45100 50500 4 N 45100 42000 45100 41100 4 C 46300 47100 1 90 1 resistor-2.sym { T 46350 46700 5 10 1 1 0 0 1 refdes=R31 T 46350 46450 5 10 1 1 0 0 1 value=100 } C 46100 45400 1 270 0 resistor-2.sym { T 46350 45000 5 10 1 1 0 0 1 refdes=R32 T 46350 44750 5 10 1 1 0 0 1 value=100 } N 46200 46200 46200 45400 4 N 46200 47400 46200 47100 4 N 46200 44200 46200 44500 4 N 45700 43400 47000 43400 4 N 44500 43600 46700 43600 4 N 45700 49600 44500 49600 4 N 44500 42000 45700 42000 4 C 42700 48200 1 180 1 spice-pnp-2.sym { T 43600 47500 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 43300 47950 5 10 1 1 180 6 1 refdes=Q9 T 43050 47750 5 10 1 1 180 6 1 value=MJE350 } C 46200 44700 1 180 0 spice-pnp-2.sym { T 45300 44000 5 8 0 0 180 0 1 device=PNP_TRANSISTOR T 45600 44500 5 10 1 1 180 0 1 refdes=Q14 T 45850 44250 5 10 1 1 180 0 1 value=MJE350 } C 44000 44700 1 180 1 spice-pnp-2.sym { T 44900 44000 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 44600 44500 5 10 1 1 180 6 1 refdes=Q13 T 44350 44250 5 10 1 1 180 6 1 value=MJE350 } C 44000 46900 1 0 0 spice-npn-2.sym { T 44900 47600 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 44600 47500 5 10 1 1 0 0 1 refdes=Q11 T 44350 47300 5 10 1 1 0 0 1 value=MJE340 } C 42700 43400 1 0 0 spice-npn-2.sym { T 43600 44100 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 43300 44000 5 10 1 1 0 0 1 refdes=Q10 T 43050 43800 5 10 1 1 0 0 1 value=MJE340 } C 46200 46900 1 0 1 spice-npn-2.sym { T 45300 47600 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 45600 47500 5 10 1 1 0 6 1 refdes=Q12 T 45850 47300 5 10 1 1 0 6 1 value=MJE340 } N 42100 50500 48100 50500 4 N 42100 41100 48100 41100 4 N 40800 45800 44000 45800 4 N 41700 51100 46900 51100 4 N 46900 51100 46900 45800 4 N 46900 45800 46200 45800 4 N 45700 48200 47000 48200 4 C 40800 46600 1 0 0 resistor-2.sym { T 41150 47000 5 10 1 1 180 6 1 refdes=Rin T 41150 46550 5 10 1 1 180 6 1 value=100 } C 53300 43800 1 0 0 spice-model-1.sym { T 53400 44400 5 10 1 1 0 0 1 refdes=A5 T 54600 44100 5 10 1 1 0 0 1 model-name=MJE340 T 53800 43900 5 10 1 1 0 0 1 file=../../lib/bjt/mje340.mod } C 53300 42800 1 0 0 spice-model-1.sym { T 53400 43400 5 10 1 1 0 0 1 refdes=A6 T 54600 43100 5 10 1 1 0 0 1 model-name=MJE350 T 53800 42900 5 10 1 1 0 0 1 file=../../lib/bjt/mje350.mod } C 48200 50500 1 90 1 resistor-2.sym { T 48300 50100 5 10 1 1 0 0 1 refdes=R33 T 48300 49800 5 10 1 1 0 0 1 value=33 } C 48200 42000 1 90 1 resistor-2.sym { T 48250 41600 5 10 1 1 0 0 1 refdes=R34 T 48250 41350 5 10 1 1 0 0 1 value=33 } C 47600 49600 1 90 1 resistor-2.sym { T 47650 49200 5 10 1 1 0 0 1 refdes=R51 T 47650 48950 5 10 1 1 0 0 1 value=10 } C 48800 49600 1 90 1 resistor-2.sym { T 48850 49200 5 10 1 1 0 0 1 refdes=R52 T 48850 48950 5 10 1 1 0 0 1 value=10 } C 47600 42900 1 90 1 resistor-2.sym { T 47650 42500 5 10 1 1 0 0 1 refdes=R53 T 47650 42250 5 10 1 1 0 0 1 value=10 } C 48800 42900 1 90 1 resistor-2.sym { T 48850 42500 5 10 1 1 0 0 1 refdes=R54 T 48850 42250 5 10 1 1 0 0 1 value=10 } N 47500 49600 48700 49600 4 N 47500 42000 48700 42000 4 N 47500 43800 47500 47800 4 N 46700 48000 46700 47600 4 N 46700 47600 49200 47600 4 N 46700 43600 46700 44000 4 N 46700 44000 49200 44000 4 C 49100 46300 1 90 1 resistor-2.sym { T 49150 45900 5 10 1 1 0 0 1 refdes=R35 T 49150 45650 5 10 1 1 0 0 1 value=100 } C 48400 47600 1 90 1 capacitor-1.sym { T 47700 47400 5 10 0 0 270 2 1 device=CAPACITOR T 48100 47300 5 10 1 1 0 6 1 refdes=C7 T 47500 47400 5 10 0 0 270 2 1 symversion=0.1 T 48100 46850 5 10 1 1 0 6 1 value=18p } C 48400 44900 1 90 1 capacitor-1.sym { T 47700 44700 5 10 0 0 270 2 1 device=CAPACITOR T 48100 44600 5 10 1 1 0 6 1 refdes=C8 T 47500 44700 5 10 0 0 270 2 1 symversion=0.1 T 48100 44150 5 10 1 1 0 6 1 value=18p } N 49200 48200 49200 47600 4 N 49200 43400 49200 44000 4 N 48200 46700 49000 46700 4 C 48300 46300 1 270 0 resistor-2.sym { T 48200 45900 5 10 1 1 0 6 1 refdes=RV2 T 48200 45650 5 10 1 1 0 6 1 value=100 } N 48200 44900 49000 44900 4 N 48700 47800 48700 46700 4 N 48700 44900 48700 43800 4 N 48400 46700 48400 46300 4 N 49000 46300 49000 46700 4 { T 49200 46600 5 10 1 1 0 0 1 netname=MOS_Drv } N 48400 45400 48400 44900 4 N 49000 44900 49000 45400 4 C 47000 48700 1 180 1 spice-pnp-2.sym { T 47900 48000 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 47600 48500 5 10 1 1 180 6 1 refdes=Q15 T 47350 48250 5 10 1 1 180 6 1 value=MJE350 } C 49200 48700 1 180 0 spice-pnp-2.sym { T 48300 48000 5 8 0 0 180 0 1 device=PNP_TRANSISTOR T 48600 48500 5 10 1 1 180 0 1 refdes=Q16 T 48850 48250 5 10 1 1 180 0 1 value=MJE350 } C 49200 42900 1 0 1 spice-npn-2.sym { T 48300 43600 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 48600 43500 5 10 1 1 0 6 1 refdes=Q18 T 48800 43300 5 10 1 1 0 6 1 value=MJE340 } C 47000 42900 1 0 0 spice-npn-2.sym { T 47900 43600 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 47600 43500 5 10 1 1 0 0 1 refdes=Q17 T 47350 43300 5 10 1 1 0 0 1 value=MJE340 } C 47000 45200 1 0 0 gnd-1.sym { T 47000 45200 5 10 0 0 0 0 1 netname=GND } N 47100 45500 47500 45500 4 C 41600 45200 1 0 0 gnd-1.sym { T 41600 45200 5 10 0 0 0 0 1 netname=GND } T 50500 49900 9 10 1 0 0 0 6 Transient Analysis : Set signal soure : 1kHz, 10mV, -5.75 DC offset MOSFET_Drv quiescent = approx. 0.8V Gain = 3130.6 = 69.9 dBV At signal source amplitudes greater than 10mV the output waveform becomes distorted (Vout = 31V amplitude). T 50500 48900 9 10 1 0 0 0 3 AC Analysis : Gain = 3324.9 = 70 dBV 3dB point = 18.3 KHz N 41700 45500 42100 45500 4 T 53200 45100 9 10 1 0 0 0 3 This schematic can be simulated using NG-Spice but not GNU-Cap (last tested 2011-02-04) gspiceui-1.1.00+dfsg/sch/audio/aem-6001-output-stage.sch0000644000000000000000000002404212515212273021162 0ustar rootrootv 20130925 2 C 40000 40000 0 0 0 title-A3.sym C 40800 46400 1 270 0 voltage-1.sym { T 40750 46050 5 10 1 1 180 0 1 refdes=Vin T 41600 46350 5 10 0 1 180 0 1 value=DC 0.0 } C 41100 49400 1 0 1 vdc-1.sym { T 40400 49950 5 10 0 1 0 6 1 refdes=V1 T 41200 49950 5 10 1 1 0 0 1 value=DC +70V } C 41100 49100 1 180 0 vdc-1.sym { T 41500 48600 5 10 0 1 180 0 1 refdes=V2 T 41200 48450 5 10 1 1 0 0 1 value=DC -70V } C 41125 49000 1 0 0 gnd-1.sym { T 41125 49000 5 10 0 0 0 0 1 netname=GND } C 53000 44600 1 0 0 spice-model-1.sym { T 53100 45200 5 10 1 1 0 0 1 refdes=A1 T 54300 44900 5 10 1 1 0 0 1 model-name=LL4148 T 53500 44700 5 10 1 1 0 0 1 file=../../lib/models/ll4148.mod } T 49200 40900 9 14 1 0 0 0 1 AEM Audio Power Amplifier - Series 6001 - Output Stage T 49600 40400 9 10 1 0 0 0 1 aem-6001-output-stage.sch T 50400 40100 9 10 1 0 0 0 1 1 T 51100 40100 9 10 1 0 0 0 1 1 T 53500 40400 9 10 1 0 0 0 1 2015 - 04 - 20 T 53500 40100 9 10 1 0 0 0 1 Mike Waters C 41000 47900 1 180 0 vee-1.sym { T 41000 47900 5 10 0 0 0 0 1 netname=Vee } C 40600 50600 1 0 0 vcc-1.sym { T 40600 50600 5 10 0 0 0 0 1 netname=Vcc } N 40800 49400 40800 49100 4 N 40800 49300 41225 49300 4 C 43200 46400 1 90 1 resistor-2.sym { T 43250 45900 5 10 1 1 0 0 1 refdes=R35 T 43250 45700 5 10 1 1 0 0 1 value=220 } N 42100 46400 43100 46400 4 N 42900 46400 42900 49700 4 N 42900 45500 42900 42100 4 C 53000 43700 1 0 0 spice-model-1.sym { T 53100 44300 5 10 1 1 0 0 1 refdes=A2 T 54300 44000 5 10 1 1 0 0 1 model-name=1N759 T 53500 43800 5 10 1 1 0 0 1 file=../../lib/models/1n759.mod } C 53000 42700 1 0 0 spice-model-1.sym { T 53100 43300 5 10 1 1 0 0 1 refdes=A3 T 54300 43000 5 10 1 1 0 0 1 model-name=2SK1058 T 53500 42800 5 10 1 1 0 0 1 file=../../lib/models/2sk1058.ckt } C 53000 41800 1 0 0 spice-model-1.sym { T 53100 42400 5 10 1 1 0 0 1 refdes=A4 T 54300 42100 5 10 1 1 0 0 1 model-name=2SJ162 T 53500 41900 5 10 1 1 0 0 1 file=../../lib/models/2sj162.ckt } C 42600 46400 1 270 0 resistor-2.sym { T 42550 45900 5 10 1 1 0 6 1 refdes=RV2 T 42550 45700 5 10 1 1 0 6 1 value=200 } N 42700 45500 43100 45500 4 T 63500 50200 8 10 0 0 270 0 1 device=INDUCTOR T 63700 50200 8 10 0 0 270 0 1 symversion=0.1 C 40900 45200 1 0 0 gnd-1.sym { T 40900 45200 5 10 0 0 0 0 1 netname=GND } T 40500 40500 9 10 1 0 0 0 3 This schematic can be simulated using NG-Spice but not GNU-Cap (last tested 2011-02-04) C 41200 46300 1 0 0 resistor-2.sym { T 41600 46650 5 10 0 0 0 0 1 device=RESISTOR T 41500 46700 5 10 1 1 180 6 1 refdes=Rin T 41500 46100 5 10 1 1 0 0 1 value=100 } N 41000 46400 41200 46400 4 C 47000 41200 1 180 0 vee-1.sym { T 47000 41200 5 10 0 0 180 0 1 netname=Vee } C 46600 50600 1 0 0 vcc-1.sym { T 46600 50600 5 10 0 0 0 0 1 netname=Vcc } C 44000 47900 1 90 1 diode-1.sym { T 43500 47300 5 10 1 1 0 6 1 refdes=D7 T 43750 47050 5 10 1 1 0 6 1 value=LL4148 } C 46300 47900 1 90 1 diode-1.sym { T 45800 47300 5 10 1 1 0 6 1 refdes=D8 T 45950 47050 5 10 1 1 0 6 1 value=LL4148 } C 44000 44800 1 90 1 diode-1.sym { T 43500 44200 5 10 1 1 0 6 1 refdes=D9 T 43750 43950 5 10 1 1 0 6 1 value=LL4148 } C 46300 44800 1 90 1 diode-1.sym { T 45800 44200 5 10 1 1 0 6 1 refdes=D10 T 45950 43950 5 10 1 1 0 6 1 value=LL4148 } C 44200 48300 1 270 0 capacitor-1.sym { T 44900 48100 5 10 0 0 270 0 1 device=CAPACITOR T 45100 48100 5 10 0 0 270 0 1 symversion=0.1 T 44500 48000 5 10 1 1 0 0 1 refdes=C9 T 44500 47550 5 10 1 1 0 0 1 value=120pF } C 46500 48300 1 270 0 capacitor-1.sym { T 47200 48100 5 10 0 0 270 0 1 device=CAPACITOR T 47400 48100 5 10 0 0 270 0 1 symversion=0.1 T 46800 48000 5 10 1 1 0 0 1 refdes=C10 T 46800 47550 5 10 1 1 0 0 1 value=120pF } C 44200 44800 1 270 0 capacitor-1.sym { T 44900 44600 5 10 0 0 270 0 1 device=CAPACITOR T 45100 44600 5 10 0 0 270 0 1 symversion=0.1 T 44500 44500 5 10 1 1 0 0 1 refdes=C11 T 44500 44050 5 10 1 1 0 0 1 value=18pF } C 46500 44800 1 270 0 capacitor-1.sym { T 47200 44600 5 10 0 0 270 0 1 device=CAPACITOR T 47400 44600 5 10 0 0 270 0 1 symversion=0.1 T 46800 44500 5 10 1 1 0 0 1 refdes=C12 T 46800 44050 5 10 1 1 0 0 1 value=18pF } C 43600 47900 1 270 1 zener-1.sym { T 44200 48300 5 10 0 0 90 2 1 device=ZENER_DIODE T 43200 48200 5 10 0 1 0 0 1 value=1N759 T 43500 48400 5 10 1 1 0 6 1 refdes=DZ2 T 43500 48150 5 10 1 1 0 6 1 description=12V } C 45900 47900 1 270 1 zener-1.sym { T 46500 48300 5 10 0 0 90 2 1 device=ZENER_DIODE T 45500 48200 5 10 0 1 0 0 1 value=1N759 T 45800 48400 5 10 1 1 0 6 1 refdes=DZ3 T 45800 48150 5 10 1 1 0 6 1 description=12V } C 43600 43000 1 270 1 zener-1.sym { T 44200 43400 5 10 0 0 90 2 1 device=ZENER_DIODE T 43200 43300 5 10 0 1 0 0 1 value=1N759 T 43500 43500 5 10 1 1 0 6 1 refdes=DZ4 T 43500 43250 5 10 1 1 0 6 1 description=12V } C 45900 43000 1 270 1 zener-1.sym { T 46500 43400 5 10 0 0 90 2 1 device=ZENER_DIODE T 45500 43300 5 10 0 1 0 0 1 value=1N759 T 45800 43500 5 10 1 1 0 6 1 refdes=DZ5 T 45800 43250 5 10 1 1 0 6 1 description=12V } C 44500 43900 1 90 1 resistor-2.sym { T 44550 43500 5 10 1 1 0 0 1 refdes=R44 T 44550 43250 5 10 1 1 0 0 1 value=22 } C 46800 43900 1 90 1 resistor-2.sym { T 46850 43500 5 10 1 1 0 0 1 refdes=R45 T 46850 43250 5 10 1 1 0 0 1 value=22 } N 43800 44800 45100 44800 4 N 43800 43000 44600 43000 4 N 46100 44800 47400 44800 4 N 46100 43000 46900 43000 4 N 44400 47000 44400 47400 4 N 43800 48800 44600 48800 4 N 44400 48800 44400 48300 4 N 46100 48800 46900 48800 4 N 46700 48800 46700 48300 4 N 46100 47000 47400 47000 4 N 46700 47000 46700 47400 4 C 43700 49700 1 270 0 resistor-2.sym { T 43600 49300 5 10 1 1 0 6 1 refdes=R36 T 43600 49000 5 10 1 1 0 6 1 value=680 } C 46000 49700 1 270 0 resistor-2.sym { T 45900 49300 5 10 1 1 0 6 1 refdes=R38 T 45900 49000 5 10 1 1 0 6 1 value=680 } C 43700 43000 1 270 0 resistor-2.sym { T 43650 42600 5 10 1 1 0 6 1 refdes=R37 T 43650 42350 5 10 1 1 0 6 1 value=470 } C 46000 43000 1 270 0 resistor-2.sym { T 45950 42600 5 10 1 1 0 6 1 refdes=R39 T 45950 42350 5 10 1 1 0 6 1 value=470 } C 45200 47000 1 90 1 resistor-2.sym { T 44950 46600 5 10 1 1 0 6 1 refdes=R40 T 44950 46350 5 10 1 1 0 6 1 value=0.22 } C 45200 45700 1 90 1 resistor-2.sym { T 44950 45300 5 10 1 1 0 6 1 refdes=R42 T 44950 45050 5 10 1 1 0 6 1 value=0.22 } C 47300 47000 1 270 0 resistor-2.sym { T 47250 46600 5 10 1 1 0 6 1 refdes=R41 T 47250 46350 5 10 1 1 0 6 1 value=0.22 } C 47300 45700 1 270 0 resistor-2.sym { T 47250 45300 5 10 1 1 0 6 1 refdes=R43 T 47250 45100 5 10 1 1 0 6 1 value=0.22 } N 42900 49700 46100 49700 4 N 42900 42100 46100 42100 4 N 45100 46100 45100 45700 4 N 47400 46100 47400 45700 4 N 45100 47000 43800 47000 4 N 45100 49400 45100 50600 4 N 47400 49400 47400 50600 4 N 45100 42400 45100 41200 4 N 47400 42400 47400 41200 4 N 47400 43200 47400 44800 4 N 47400 47000 47400 48600 4 N 45100 46000 47400 46000 4 { T 49400 46600 5 10 1 1 0 0 1 netname=Vout } C 48400 45800 1 90 1 resistor-2.sym { T 48150 45400 5 10 1 1 0 6 1 refdes=R46 T 48150 45200 5 10 1 1 0 6 1 value=12 } C 48500 44900 1 90 1 capacitor-1.sym { T 47800 44700 5 10 0 0 270 2 1 device=CAPACITOR T 47600 44700 5 10 0 0 270 2 1 symversion=0.1 T 48250 44600 5 10 1 1 0 6 1 refdes=C14 T 48200 44300 5 10 1 1 180 0 1 value=22nF } C 48200 43700 1 0 0 gnd-1.sym { T 48200 43700 5 10 0 0 0 0 1 netname=GND } N 45100 48600 45100 47000 4 N 45100 44800 45100 43200 4 N 48800 45800 48800 45000 4 N 48800 44600 48800 44000 4 C 46900 48600 1 0 0 spice-nmos-2.sym { T 47500 49100 5 10 0 0 0 0 1 device=SUBCKT T 46600 49100 5 10 1 1 0 0 1 refdes=X20 T 46400 49350 5 10 1 1 0 0 1 value=2SK1058 } C 46900 43200 1 180 1 spice-pmos-2.sym { T 47500 42700 5 10 0 0 180 6 1 device=SUBCKT T 46600 42800 5 10 1 1 180 6 1 refdes=X22 T 46400 42550 5 10 1 1 180 6 1 value=2SJ162 } C 44600 48600 1 0 0 spice-nmos-2.sym { T 45200 49100 5 10 0 0 0 0 1 device=SUBCKT T 44300 49100 5 10 1 1 0 0 1 refdes=X19 T 44100 49350 5 10 1 1 0 0 1 value=2SK1058 } C 44600 43200 1 180 1 spice-pmos-2.sym { T 45200 42700 5 10 0 0 180 6 1 device=SUBCKT T 44300 42800 5 10 1 1 180 6 1 refdes=X21 T 44100 42550 5 10 1 1 180 6 1 value=2SJ162 } C 46100 50000 1 0 0 capacitor-1.sym { T 46300 50700 5 10 0 0 0 0 1 device=CAPACITOR T 46300 50900 5 10 0 0 0 0 1 symversion=0.1 T 46400 50300 5 10 1 1 0 6 1 refdes=C24 T 46700 50300 5 10 1 1 0 0 1 value=100nF } C 43800 50000 1 0 0 capacitor-1.sym { T 44000 50700 5 10 0 0 0 0 1 device=CAPACITOR T 44000 50900 5 10 0 0 0 0 1 symversion=0.1 T 44100 50300 5 10 1 1 0 6 1 refdes=C23 T 44400 50300 5 10 1 1 0 0 1 value=100nF } C 43800 41500 1 0 0 capacitor-1.sym { T 44000 42200 5 10 0 0 0 0 1 device=CAPACITOR T 44000 42400 5 10 0 0 0 0 1 symversion=0.1 T 44100 41800 5 10 1 1 0 6 1 refdes=C25 T 44400 41800 5 10 1 1 0 0 1 value=100nF } C 46100 41500 1 0 0 capacitor-1.sym { T 46300 42200 5 10 0 0 0 0 1 device=CAPACITOR T 46300 42400 5 10 0 0 0 0 1 symversion=0.1 T 46100 41800 5 10 1 1 0 0 1 refdes=C26 T 46700 41800 5 10 1 1 0 0 1 value=100nF } C 43700 41400 1 0 0 gnd-1.sym C 46000 41400 1 0 0 gnd-1.sym C 46000 49900 1 0 0 gnd-1.sym C 43700 49900 1 0 0 gnd-1.sym N 44700 50200 45100 50200 4 N 47000 50200 47400 50200 4 N 47000 41700 47400 41700 4 N 44700 41700 45100 41700 4 N 47400 45800 49300 45800 4 C 48700 43700 1 0 0 gnd-1.sym { T 48700 43700 5 10 0 0 0 0 1 netname=GND } B 49900 44600 200 400 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 L 50100 45000 50400 45500 3 0 0 0 -1 -1 L 50400 45500 50400 44100 3 0 0 0 -1 -1 L 50400 44100 50100 44600 3 0 0 0 -1 -1 N 49800 44600 49800 45000 4 C 48900 45100 1 180 1 resistor-2.sym { T 49000 45200 5 10 1 1 0 0 1 refdes=Rspkr T 49700 45200 5 10 1 1 0 0 1 value=8 } C 49800 44500 1 0 1 inductor-1.sym { T 49600 45000 5 10 0 0 180 2 1 device=INDUCTOR T 49600 45200 5 10 0 0 180 2 1 symversion=0.1 T 49000 44350 5 10 1 1 180 8 1 refdes=Lspkr T 49600 44350 5 10 1 1 0 0 1 value=1mH } A 50000 44800 224 297 126 3 0 0 0 -1 -1 C 49100 45500 1 0 0 spice-subcircuit-IO-1.sym { T 50000 45900 5 10 0 1 0 0 1 device=spice-IO T 49950 45750 5 10 1 1 0 0 1 refdes=P1 } C 49000 43700 1 0 0 spice-subcircuit-IO-1.sym { T 49900 44100 5 10 0 1 0 0 1 device=spice-IO T 49850 43950 5 10 1 1 0 0 1 refdes=P2 } N 49200 44000 48800 44000 4 N 48800 45000 48900 45000 4 N 48800 44600 48900 44600 4 C 49100 46300 1 0 0 output-1.sym { T 49200 46600 5 10 0 0 0 0 1 device=OUTPUT } N 49100 46400 49100 45800 4 N 45100 50600 47400 50600 4 N 45100 41200 47400 41200 4 gspiceui-1.1.00+dfsg/sch/audio/le-pacific-mc-pre.sch0000644000000000000000000000376612124473163020567 0ustar rootrootv 20110115 2 C 2350 86900 1 90 0 capacitor-1.sym { T 1850 87450 5 10 1 1 0 0 1 refdes=C1 T 2100 87250 5 10 1 1 180 0 1 value=1n } C 3250 86400 1 0 0 gnd-1.sym C 1250 87800 1 270 0 voltage-2.sym { T 800 87400 5 10 1 1 0 0 1 refdes=Vin T 1200 87300 5 10 1 1 180 0 1 value=AC 1V } T 650 90300 9 16 1 0 0 0 1 Le Pacific MC RIAA Pre-amplifier T 2700 90050 9 10 1 0 0 4 1 Last Updated : 30 / 06 / 2010 C 3050 86900 1 90 0 resistor-2.sym { T 2750 87550 5 10 1 1 180 0 1 refdes=R1 T 2800 87300 5 10 1 1 180 0 1 value=100 } C 3950 88400 1 0 0 capacitor-1.sym { T 4300 88800 5 10 1 1 180 0 1 refdes=C2 T 4500 88650 5 10 1 1 0 0 1 value=0.47u } C 200 88500 1 0 0 spice-model-1.sym { T 300 89200 5 10 0 1 0 0 1 device=model T 300 89100 5 10 1 1 0 0 1 refdes=A1 T 1500 88800 5 10 1 1 0 0 1 model-name=2SK170 T 700 88600 5 10 1 1 0 0 1 file=../../lib/jfet/2sk170.mod } C 3750 89500 1 90 1 resistor-2.sym { T 3450 89200 5 10 1 1 0 6 1 refdes=R2 T 3500 89000 5 10 1 1 0 6 1 value=2.2K } C 3750 87600 1 90 1 resistor-2.sym { T 3500 87250 5 10 1 1 0 6 1 refdes=R3 T 3500 87000 5 10 1 1 0 6 1 value=47 } C 5100 87000 1 90 0 resistor-2.sym { T 4800 87650 5 10 1 1 180 0 1 refdes=R4 T 4850 87400 5 10 1 1 180 0 1 value=100K } N 1450 87950 3150 87950 4 N 3650 88600 3950 88600 4 N 5000 88600 5000 87900 4 N 5000 87000 5000 86700 4 N 5000 86700 1450 86700 4 N 1450 86700 1450 86900 4 N 1450 87800 1450 87950 4 N 2150 87800 2150 87950 4 N 2950 87800 2950 87950 4 N 2950 86900 2950 86700 4 N 2150 86900 2150 86700 4 C 5000 89800 1 90 1 vdc-1.sym { T 4050 89600 5 10 1 1 0 6 1 refdes=Vcc T 4150 89100 5 10 0 0 270 2 1 device=VOLTAGE_SOURCE T 3950 89100 5 10 0 0 270 2 1 footprint=none T 4750 89000 5 10 1 1 0 6 1 value=DC 12V } C 4900 89200 1 0 0 gnd-1.sym N 3650 89500 3800 89500 4 N 4850 88600 5000 88600 4 T 5100 88050 9 10 1 0 0 0 1 Vout C 3150 87750 1 0 0 spice-njfet-1.sym { T 3950 88150 5 10 0 0 0 0 1 device=FET_TRANSISTOR T 3750 88200 5 10 1 1 0 0 1 refdes=J1 T 3700 88000 5 10 1 1 0 0 1 value=2SK170 } N 3650 88600 3650 88450 4 N 3650 87750 3650 87600 4 gspiceui-1.1.00+dfsg/sch/audio/aem-6010-amp.sch0000644000000000000000000006413312517177263017316 0ustar rootrootv 20130925 2 C 40000 40000 0 0 0 title-A2.sym C 45400 45300 1 90 1 resistor-2.sym { T 45150 44950 5 10 1 1 0 6 1 refdes=R12 T 45150 44750 5 10 1 1 0 6 1 value=3.9K } C 43400 47100 1 180 0 resistor-2.sym { T 42800 47150 5 10 1 1 0 0 1 refdes=R3 T 42800 46700 5 10 1 1 0 0 1 value=1K } C 44400 46400 1 0 0 resistor-2.sym { T 44650 46650 5 10 1 1 0 0 1 refdes=RV1a T 44600 46200 5 10 1 1 0 0 1 value=10511 } C 41000 47000 1 270 0 voltage-1.sym { T 40950 46650 5 10 1 1 180 0 1 refdes=Vin T 41800 46950 5 10 0 1 180 0 1 value=DC 0.0 } C 40400 50900 1 0 0 spice-model-1.sym { T 40500 51500 5 10 1 1 0 0 1 refdes=A2 T 41700 51200 5 10 1 1 0 0 1 model-name=BC547 T 40900 51000 5 10 1 1 0 0 1 file=../../lib/models/bc547.mod } C 40400 50000 1 0 0 spice-model-1.sym { T 40500 50600 5 10 1 1 0 0 1 refdes=A3 T 41700 50300 5 10 1 1 0 0 1 model-name=BC640 T 40900 50100 5 10 1 1 0 0 1 file=../../lib/models/bc640.mod } C 40400 48200 1 0 0 spice-model-1.sym { T 40500 48800 5 10 1 1 0 0 1 refdes=A5 T 41700 48500 5 10 1 1 0 0 1 model-name=MJE340 T 40900 48300 5 10 1 1 0 0 1 file=../../lib/models/mje340.mod } C 40400 43900 1 0 0 spice-model-1.sym { T 40500 44500 5 10 1 1 0 0 1 refdes=A6 T 41700 44200 5 10 1 1 0 0 1 model-name=MJE350 T 40900 44000 5 10 1 1 0 0 1 file=../../lib/models/mje350.mod } C 62900 50750 1 0 1 vdc-1.sym { T 62200 51300 5 10 0 1 0 6 1 refdes=V1 T 62200 51250 5 10 1 1 0 6 1 value=DC +70V } C 62300 50450 1 180 1 vdc-1.sym { T 61900 49950 5 10 0 1 180 6 1 refdes=V2 T 61500 49900 5 10 1 1 180 6 1 value=DC -70V } C 62025 50450 1 0 0 gnd-1.sym { T 62025 50450 5 10 0 0 0 0 1 netname=GND } C 48400 52000 1 270 0 diode-1.sym { T 48900 51400 5 10 1 1 0 0 1 refdes=D1 T 48650 51150 5 10 1 1 0 0 1 value=1N914 } C 46800 46400 1 90 1 resistor-2.sym { T 46550 45900 5 10 1 1 0 6 1 refdes=R5 T 46550 45650 5 10 1 1 0 6 1 value=330 } C 42300 47000 1 270 0 resistor-2.sym { T 42000 46500 5 10 1 1 0 0 1 refdes=R1 T 41800 46300 5 10 1 1 0 0 1 value=100K } C 42300 45800 1 0 0 gnd-1.sym { T 42300 45800 5 10 0 0 0 0 1 netname=GND } N 41200 46100 43600 46100 4 C 40400 51800 1 0 0 spice-model-1.sym { T 40500 52400 5 10 1 1 0 0 1 refdes=A1 T 41700 52100 5 10 1 1 0 0 1 model-name=BC639 T 40900 51900 5 10 1 1 0 0 1 file=../../lib/models/bc639.mod } C 40400 43000 1 0 0 spice-model-1.sym { T 40500 43600 5 10 1 1 0 0 1 refdes=A7 T 41700 43300 5 10 1 1 0 0 1 model-name=1N914 T 40900 43100 5 10 1 1 0 0 1 file=../../lib/models/1n914.mod } T 57000 40900 9 14 1 0 0 0 1 Audio Power Amplifier - Series 6010 T 56400 40400 9 10 1 0 0 0 1 series-6010-amp.sch T 57100 40100 9 10 1 0 0 0 1 1 T 58000 40100 9 10 1 0 0 0 1 1 T 60300 40400 9 10 1 0 0 0 1 2015 - 04 - 26 T 60300 40100 9 10 1 0 0 0 1 Mike Waters C 62800 49250 1 180 0 vee-1.sym { T 62800 49250 5 10 0 0 0 0 1 netname=Vee } C 56000 42600 1 180 0 vee-1.sym { T 56000 42600 5 10 0 0 180 0 1 netname=Vee } C 55600 52000 1 0 0 vcc-1.sym { T 55600 52000 5 10 0 0 0 0 1 netname=Vcc } C 62400 51950 1 0 0 vcc-1.sym { T 62400 51950 5 10 0 0 0 0 1 netname=Vcc } N 62600 50750 62600 50450 4 N 62600 50750 62125 50750 4 C 41200 46800 1 0 0 capacitor-1.sym { T 41400 47500 5 10 0 0 0 0 1 device=CAPACITOR T 41300 47100 5 10 1 1 0 0 1 refdes=C1 T 41400 47700 5 10 0 0 0 0 1 symversion=0.1 T 41800 47100 5 10 1 1 0 0 1 value=470n } N 42100 47000 42500 47000 4 C 43400 46100 1 270 1 capacitor-1.sym { T 44100 46300 5 10 0 0 90 2 1 device=CAPACITOR T 43550 46650 5 10 1 1 0 6 1 refdes=C2 T 44300 46300 5 10 0 0 90 2 1 symversion=0.1 T 43550 46300 5 10 1 1 0 6 1 value=1nF } N 43400 47000 43800 47000 4 C 45700 46400 1 0 0 resistor-2.sym { T 45950 46650 5 10 1 1 0 0 1 refdes=RV1b T 45950 46200 5 10 1 1 0 0 1 value=9489 } C 45300 46700 1 270 1 zener-1.sym { T 45900 47100 5 10 0 0 90 2 1 device=ZENER_DIODE T 45400 47500 5 10 1 1 0 6 1 refdes=DZ1 T 44900 47000 5 10 0 1 0 0 1 value=1N759 T 45600 47500 5 10 1 1 0 0 1 description=12V } N 44800 48000 46200 48000 4 C 44400 46400 1 90 1 resistor-2.sym { T 44450 45900 5 10 1 1 0 0 1 refdes=R4 T 44450 45650 5 10 1 1 0 0 1 value=330 } N 44300 45500 46700 45500 4 N 46700 46800 46700 46400 4 N 44300 46800 44300 46400 4 N 45500 46700 45500 45500 4 N 45300 46500 45700 46500 4 N 45800 44000 46000 44000 4 N 45300 43500 45500 43500 4 C 45200 43500 1 270 0 resistor-2.sym { T 45150 43100 5 10 1 1 0 6 1 refdes=R13 T 45150 42850 5 10 1 1 0 6 1 value=120 } C 45900 44900 1 270 0 resistor-2.sym { T 46150 44400 5 10 1 1 0 0 1 refdes=R14 T 46150 44200 5 10 1 1 0 0 1 value=10K } C 46100 45200 1 180 0 gnd-1.sym { T 46100 45200 5 10 0 0 0 0 1 netname=GND } N 46000 43000 46000 42600 4 N 47000 42600 45300 42600 4 C 45600 48600 1 0 0 resistor-2.sym { T 46200 49000 5 10 1 1 180 0 1 refdes=R11 T 45900 48400 5 10 1 1 0 0 1 value=1K } C 45500 48900 1 180 0 capacitor-1.sym { T 45300 48200 5 10 0 0 180 0 1 device=CAPACITOR T 44900 48800 5 10 1 1 0 6 1 refdes=C3 T 45300 48000 5 10 0 0 180 0 1 symversion=0.1 T 44900 48600 5 10 1 1 180 0 1 value=47pF } C 44200 50600 1 270 0 resistor-2.sym { T 44100 50200 5 10 1 1 0 6 1 refdes=R6 T 44100 50000 5 10 1 1 0 6 1 value=27K } C 46800 50600 1 90 1 resistor-2.sym { T 46900 50200 5 10 1 1 0 0 1 refdes=R7 T 46900 50000 5 10 1 1 0 0 1 value=27K } N 45100 51100 45300 51100 4 N 45600 50600 45800 50600 4 N 45500 48700 45600 48700 4 C 45000 50200 1 270 0 resistor-2.sym { T 44900 49700 5 10 1 1 0 6 1 refdes=R9 T 44900 49500 5 10 1 1 0 6 1 value=4.7K } C 45000 52000 1 270 0 resistor-2.sym { T 44900 51600 5 10 1 1 0 6 1 refdes=R8 T 44900 51400 5 10 1 1 0 6 1 value=180 } C 45900 50600 1 90 1 resistor-2.sym { T 46000 50200 5 10 1 1 0 0 1 refdes=R10 T 46000 50000 5 10 1 1 0 0 1 value=10K } C 45700 49400 1 0 0 gnd-1.sym { T 45700 49400 5 10 0 0 0 0 1 netname=GND } N 44300 52000 47300 52000 4 N 45800 51600 45800 52000 4 N 45100 49200 45300 49200 4 N 45300 49200 45300 48000 4 N 44300 50600 44300 52000 4 N 46700 50600 46700 52000 4 N 46700 49700 46700 48400 4 N 44300 49700 44300 48400 4 C 48400 51100 1 270 0 diode-1.sym { T 48900 50500 5 10 1 1 0 0 1 refdes=D2 T 48650 50250 5 10 1 1 0 0 1 value=1N914 } C 48400 50200 1 270 0 diode-1.sym { T 48900 49600 5 10 1 1 0 0 1 refdes=D3 T 48650 49350 5 10 1 1 0 0 1 value=1N914 } C 47300 51900 1 0 0 resistor-2.sym { T 47350 52150 5 10 1 1 0 0 1 refdes=R15 T 47850 52150 5 10 1 1 0 0 1 value=10 } C 48400 45400 1 270 0 diode-1.sym { T 48900 44800 5 10 1 1 0 0 1 refdes=D4 T 48650 44550 5 10 1 1 0 0 1 value=1N914 } C 48400 44500 1 270 0 diode-1.sym { T 48900 43900 5 10 1 1 0 0 1 refdes=D5 T 48650 43650 5 10 1 1 0 0 1 value=1N914 } C 47000 42500 1 0 0 resistor-2.sym { T 47100 42300 5 10 1 1 0 0 1 refdes=R16 T 47600 42300 5 10 1 1 0 0 1 value=10 } C 48400 43600 1 270 0 diode-1.sym { T 48900 43000 5 10 1 1 0 0 1 refdes=D6 T 48650 42750 5 10 1 1 0 0 1 value=1N914 } C 47000 44000 1 180 0 gnd-1.sym { T 47000 44000 5 10 0 0 0 0 1 netname=GND } C 47100 50700 1 0 0 gnd-1.sym { T 47100 50700 5 10 0 0 0 0 1 netname=GND } C 48700 48900 1 90 1 resistor-2.sym { T 49100 48500 5 10 1 1 0 6 1 refdes=R17 T 49100 48250 5 10 1 1 0 6 1 value=22K } C 48700 46400 1 90 1 resistor-2.sym { T 49100 46000 5 10 1 1 0 6 1 refdes=R18 T 49100 45750 5 10 1 1 0 6 1 value=22K } N 48600 48000 48600 46400 4 N 48600 45500 48600 45400 4 N 48600 49300 48600 48900 4 N 47200 47000 48100 47000 4 N 48100 41900 48100 47000 4 N 47900 42600 59600 42600 4 N 46700 48500 48100 48500 4 N 48100 48500 48100 47300 4 N 48100 47300 50300 47300 4 C 48900 46600 1 0 0 gnd-1.sym { T 48900 46600 5 10 0 0 0 0 1 netname=GND } N 49000 46900 48600 46900 4 N 46900 42800 46900 42600 4 N 47200 52000 47200 51900 4 N 48200 52000 59600 52000 4 C 49600 51200 1 90 1 resistor-2.sym { T 49650 50800 5 10 1 1 0 0 1 refdes=R19 T 49650 50550 5 10 1 1 0 0 1 value=150 } C 49600 44300 1 90 1 resistor-2.sym { T 49650 43900 5 10 1 1 0 0 1 refdes=R20 T 49650 43650 5 10 1 1 0 0 1 value=150 } N 49000 49000 48600 49000 4 N 49500 49500 49500 50300 4 N 49500 44900 49500 44300 4 N 49000 45400 48600 45400 4 N 49500 43400 49500 42600 4 N 49500 45800 49500 47100 4 N 49500 48600 49500 47500 4 N 49500 51200 49500 52000 4 C 50900 48400 1 90 1 resistor-2.sym { T 50950 48000 5 10 1 1 0 0 1 refdes=R23 T 50950 47750 5 10 1 1 0 0 1 value=120 } C 52000 48400 1 270 0 resistor-2.sym { T 51950 48000 5 10 1 1 0 6 1 refdes=R24 T 51950 47750 5 10 1 1 0 6 1 value=120 } C 50900 47100 1 90 1 resistor-2.sym { T 50950 46700 5 10 1 1 0 0 1 refdes=R25 T 50950 46450 5 10 1 1 0 0 1 value=120 } C 52200 47100 1 90 1 resistor-2.sym { T 51950 46700 5 10 1 1 0 6 1 refdes=R26 T 51950 46450 5 10 1 1 0 6 1 value=120 } N 50800 47500 52100 47500 4 N 50800 47100 52100 47100 4 N 50800 47500 50500 47100 4 N 50500 47100 49500 47100 4 N 50800 47100 50500 47500 4 N 50500 47500 49500 47500 4 C 50200 48600 1 270 0 resistor-2.sym { T 50150 48200 5 10 1 1 0 6 1 refdes=R22 T 50150 47950 5 10 1 1 0 6 1 value=22K } C 50200 46900 1 270 0 resistor-2.sym { T 50150 46500 5 10 1 1 0 6 1 refdes=R21 T 50150 46250 5 10 1 1 0 6 1 value=22K } N 50300 48600 50300 48900 4 N 50300 46000 50300 45700 4 N 50300 47700 50300 46900 4 C 50900 50800 1 90 1 resistor-2.sym { T 50950 50400 5 10 1 1 0 0 1 refdes=R27 T 50950 50150 5 10 1 1 0 0 1 value=6.8K } C 52000 50800 1 270 0 resistor-2.sym { T 51950 50400 5 10 1 1 0 6 1 refdes=R28 T 51950 50150 5 10 1 1 0 6 1 value=6.8K } C 50900 44700 1 90 1 resistor-2.sym { T 50950 44300 5 10 1 1 0 0 1 refdes=R29 T 50950 44050 5 10 1 1 0 0 1 value=6.8K } C 52000 44700 1 270 0 resistor-2.sym { T 51950 44300 5 10 1 1 0 6 1 refdes=R30 T 51950 44050 5 10 1 1 0 6 1 value=6.8K } N 50800 49900 50800 49300 4 N 52100 49300 52100 49900 4 N 50800 45300 50800 44700 4 N 52100 45300 52100 44700 4 C 53100 42000 1 180 1 resistor-2.sym { T 53100 42050 5 10 1 1 0 0 1 refdes=R48 T 53700 42050 5 10 1 1 0 0 1 value=47K } C 52600 41000 1 270 1 resistor-2.sym { T 52200 41500 5 10 1 1 0 0 1 refdes=R49 T 52300 41300 5 10 1 1 0 0 1 value=1K } C 54000 41600 1 180 0 capacitor-1.sym { T 53800 40900 5 10 0 0 180 0 1 device=CAPACITOR T 53200 41200 5 10 1 1 0 0 1 refdes=C6 T 53800 40700 5 10 0 0 180 0 1 symversion=0.1 T 53650 41200 5 10 1 1 0 0 1 value=15pF } N 51450 50800 51450 52000 4 N 51450 43800 51450 42600 4 C 52600 40700 1 0 0 gnd-1.sym { T 52600 40700 5 10 0 0 0 0 1 netname=GND } N 48100 41900 53100 41900 4 N 54000 41900 60000 41900 4 C 52500 48600 1 270 0 resistor-2.sym { T 52750 48200 5 10 1 1 0 0 1 refdes=R31 T 52750 47950 5 10 1 1 0 0 1 value=22K } C 52700 46900 1 90 1 resistor-2.sym { T 52750 46500 5 10 1 1 0 0 1 refdes=R32 T 52750 46250 5 10 1 1 0 0 1 value=22K } N 52600 47700 52600 46900 4 N 52600 48900 52600 48600 4 N 52600 45700 52600 46000 4 N 52600 47300 53300 47300 4 N 52800 48900 52800 52600 4 N 52800 52600 43500 52600 4 N 43500 52600 43500 49200 4 N 43500 49200 44300 49200 4 C 54200 52000 1 90 1 resistor-2.sym { T 54300 51600 5 10 1 1 0 0 1 refdes=R33 T 54300 51300 5 10 1 1 0 0 1 value=33 } C 54200 43500 1 90 1 resistor-2.sym { T 54250 43100 5 10 1 1 0 0 1 refdes=R34 T 54250 42850 5 10 1 1 0 0 1 value=33 } C 53600 51100 1 90 1 resistor-2.sym { T 53650 50700 5 10 1 1 0 0 1 refdes=R51 T 53650 50450 5 10 1 1 0 0 1 value=10 } C 54600 51100 1 270 0 resistor-2.sym { T 54550 50700 5 10 1 1 0 6 1 refdes=R52 T 54550 50450 5 10 1 1 0 6 1 value=10 } C 53600 44400 1 90 1 resistor-2.sym { T 53650 44000 5 10 1 1 0 0 1 refdes=R53 T 53650 43750 5 10 1 1 0 0 1 value=10 } C 54600 44400 1 270 0 resistor-2.sym { T 54550 44000 5 10 1 1 0 6 1 refdes=R54 T 54550 43750 5 10 1 1 0 6 1 value=10 } N 53500 51100 54700 51100 4 N 53500 43500 54700 43500 4 N 53500 45300 53500 49300 4 N 52100 49700 53000 49700 4 N 50800 49500 53000 49500 4 N 53000 49500 53000 49100 4 N 53000 49100 55200 49100 4 N 53000 44900 52100 44900 4 N 50800 45100 53000 45100 4 N 53000 45100 53000 45500 4 N 53000 45500 55200 45500 4 C 55000 47800 1 90 1 resistor-2.sym { T 55050 47400 5 10 1 1 0 0 1 refdes=R35 T 55050 47150 5 10 1 1 0 0 1 value=220 } N 54000 41900 54000 41400 4 C 54400 49100 1 90 1 capacitor-1.sym { T 53700 48900 5 10 0 0 270 2 1 device=CAPACITOR T 54100 48800 5 10 1 1 0 6 1 refdes=C7 T 53500 48900 5 10 0 0 270 2 1 symversion=0.1 T 54100 48350 5 10 1 1 0 6 1 value=18pF } C 54400 46400 1 90 1 capacitor-1.sym { T 53700 46200 5 10 0 0 270 2 1 device=CAPACITOR T 54100 46100 5 10 1 1 0 6 1 refdes=C8 T 53500 46200 5 10 0 0 270 2 1 symversion=0.1 T 54100 45650 5 10 1 1 0 6 1 value=18pF } N 55200 49700 55200 49100 4 N 55200 44900 55200 45500 4 N 54200 48200 55400 48200 4 { T 55200 47900 5 10 1 1 0 0 1 netname=MOS_Drv } C 56400 49500 1 90 1 diode-1.sym { T 55900 48900 5 10 1 1 0 6 1 refdes=D7 T 56150 48650 5 10 1 1 0 6 1 value=1N914 } C 58500 49500 1 90 1 diode-1.sym { T 58000 48900 5 10 1 1 0 6 1 refdes=D9 T 58250 48650 5 10 1 1 0 6 1 value=1N914 } C 56400 46000 1 90 1 diode-1.sym { T 55900 45400 5 10 1 1 0 6 1 refdes=D8 T 56150 45150 5 10 1 1 0 6 1 value=1N914 } C 58500 46000 1 90 1 diode-1.sym { T 58050 45400 5 10 1 1 0 6 1 refdes=D10 T 58250 45150 5 10 1 1 0 6 1 value=1N914 } C 56500 49900 1 270 0 capacitor-1.sym { T 57200 49700 5 10 0 0 270 0 1 device=CAPACITOR T 56800 49600 5 10 1 1 0 0 1 refdes=C9 T 57400 49700 5 10 0 0 270 0 1 symversion=0.1 T 56800 49150 5 10 1 1 0 0 1 value=330pF } C 58600 49900 1 270 0 capacitor-1.sym { T 59300 49700 5 10 0 0 270 0 1 device=CAPACITOR T 58900 49600 5 10 1 1 0 0 1 refdes=C10 T 59500 49700 5 10 0 0 270 0 1 symversion=0.1 T 58900 49150 5 10 1 1 0 0 1 value=330pF } C 56600 46000 1 270 0 capacitor-1.sym { T 57300 45800 5 10 0 0 270 0 1 device=CAPACITOR T 56900 45700 5 10 1 1 0 0 1 refdes=C11 T 57500 45800 5 10 0 0 270 0 1 symversion=0.1 T 56900 45250 5 10 1 1 0 0 1 value=33pF } C 58700 46000 1 270 0 capacitor-1.sym { T 59400 45800 5 10 0 0 270 0 1 device=CAPACITOR T 59000 45700 5 10 1 1 0 0 1 refdes=C12 T 59600 45800 5 10 0 0 270 0 1 symversion=0.1 T 59000 45250 5 10 1 1 0 0 1 value=33pF } C 56000 49500 1 270 1 zener-1.sym { T 56600 49900 5 10 0 0 90 2 1 device=ZENER_DIODE T 55600 50000 5 10 1 1 0 0 1 refdes=DZ2 T 55600 49800 5 10 0 1 0 0 1 value=1N759 T 55600 49750 5 10 1 1 0 0 1 description=12V } C 58100 49500 1 270 1 zener-1.sym { T 58700 49900 5 10 0 0 90 2 1 device=ZENER_DIODE T 57700 50000 5 10 1 1 0 0 1 refdes=DZ3 T 57700 49800 5 10 0 1 0 0 1 value=1N759 T 57700 49750 5 10 1 1 0 0 1 description=12V } C 56000 44200 1 270 1 zener-1.sym { T 56600 44600 5 10 0 0 90 2 1 device=ZENER_DIODE T 55600 44700 5 10 1 1 0 0 1 refdes=DZ4 T 55600 44500 5 10 0 1 0 0 1 value=1N759 T 55600 44450 5 10 1 1 0 0 1 description=12V } C 58100 44200 1 270 1 zener-1.sym { T 58700 44600 5 10 0 0 90 2 1 device=ZENER_DIODE T 57700 44700 5 10 1 1 0 0 1 refdes=DZ5 T 57700 44500 5 10 0 1 0 0 1 value=1N759 T 57700 44450 5 10 1 1 0 0 1 description=12V } C 56900 45100 1 90 1 resistor-2.sym { T 56950 44700 5 10 1 1 0 0 1 refdes=R44 T 56950 44450 5 10 1 1 0 0 1 value=22 } C 59000 45100 1 90 1 resistor-2.sym { T 59050 44700 5 10 1 1 0 0 1 refdes=R45 T 59050 44450 5 10 1 1 0 0 1 value=22 } N 56200 46000 57500 46000 4 N 56200 44100 57000 44100 4 N 58300 46000 59600 46000 4 N 58300 44100 59100 44100 4 N 56700 48600 56700 49000 4 N 56200 50500 57000 50500 4 N 56700 50500 56700 49900 4 N 58300 50500 59100 50500 4 N 58800 50500 58800 49900 4 N 58300 48600 59600 48600 4 N 58800 48600 58800 49000 4 C 56100 51500 1 270 0 resistor-2.sym { T 56000 51100 5 10 1 1 0 6 1 refdes=R36 T 56000 50800 5 10 1 1 0 6 1 value=680 } C 58200 51500 1 270 0 resistor-2.sym { T 58100 51100 5 10 1 1 0 6 1 refdes=R38 T 58100 50800 5 10 1 1 0 6 1 value=680 } C 56100 44000 1 270 0 resistor-2.sym { T 56050 43600 5 10 1 1 0 6 1 refdes=R37 T 56050 43350 5 10 1 1 0 6 1 value=470 } C 58200 44000 1 270 0 resistor-2.sym { T 58150 43600 5 10 1 1 0 6 1 refdes=R39 T 58150 43350 5 10 1 1 0 6 1 value=470 } C 57600 48500 1 90 1 resistor-2.sym { T 57350 48100 5 10 1 1 0 6 1 refdes=R40 T 57350 47850 5 10 1 1 0 6 1 value=0.22 } C 57600 47000 1 90 1 resistor-2.sym { T 57350 46600 5 10 1 1 0 6 1 refdes=R42 T 57350 46350 5 10 1 1 0 6 1 value=0.22 } C 59500 48500 1 270 0 resistor-2.sym { T 59450 48100 5 10 1 1 0 6 1 refdes=R41 T 59450 47850 5 10 1 1 0 6 1 value=0.22 } C 59500 47000 1 270 0 resistor-2.sym { T 59450 46600 5 10 1 1 0 6 1 refdes=R43 T 59450 46350 5 10 1 1 0 6 1 value=0.22 } N 55400 48200 55400 51600 4 N 55400 51600 58300 51600 4 N 55400 46400 55400 43000 4 N 55400 43000 58300 43000 4 N 57500 47600 57500 47000 4 N 59600 47600 59600 47000 4 N 57500 48600 56200 48600 4 N 57500 51100 57500 52000 4 N 59600 51100 59600 52000 4 N 57500 43500 57500 42600 4 N 59600 43500 59600 42600 4 N 59600 44300 59600 46100 4 N 59600 48500 59600 50300 4 N 57500 47400 59600 47400 4 { T 58300 47500 5 10 1 1 0 0 1 netname=Vout } N 59600 47200 61800 47200 4 C 60600 47200 1 90 1 resistor-2.sym { T 60600 47600 5 10 1 1 0 6 1 refdes=R46 T 60550 47350 5 10 1 1 0 6 1 value=22 } C 61000 47200 1 90 1 resistor-2.sym { T 60800 47600 5 10 1 1 0 0 1 refdes=R47 T 60850 47350 5 10 1 1 0 0 1 value=22 } C 60900 46300 1 90 1 capacitor-1.sym { T 60200 46100 5 10 0 0 270 2 1 device=CAPACITOR T 60600 46000 5 10 1 1 0 6 1 refdes=C13 T 60000 46100 5 10 0 0 270 2 1 symversion=0.1 T 60600 45550 5 10 1 1 0 6 1 value=22nF } C 60600 45100 1 0 0 gnd-1.sym { T 60600 45100 5 10 0 0 0 0 1 netname=GND } N 60000 47200 60000 41900 4 N 60500 46300 60900 46300 4 N 57500 50300 57500 48500 4 N 57500 46100 57500 44300 4 C 61200 45100 1 0 0 gnd-1.sym { T 61200 45100 5 10 0 0 0 0 1 netname=GND } N 61300 47200 61300 46400 4 N 61300 46000 61300 45400 4 C 40400 49100 1 0 0 spice-model-1.sym { T 40500 49700 5 10 1 1 0 0 1 refdes=A4 T 41700 49400 5 10 1 1 0 0 1 model-name=BC557 T 40900 49200 5 10 1 1 0 0 1 file=../../lib/models/bc557.mod } C 40400 42100 1 0 0 spice-model-1.sym { T 40500 42700 5 10 1 1 0 0 1 refdes=A8 T 41700 42400 5 10 1 1 0 0 1 model-name=1N759 T 40900 42200 5 10 1 1 0 0 1 file=../../lib/models/1n759.mod } C 40400 41200 1 0 0 spice-model-1.sym { T 40500 41800 5 10 1 1 0 0 1 refdes=A9 T 41700 41500 5 10 1 1 0 0 1 model-name=ECG461 T 40900 41300 5 10 1 1 0 0 1 file=../../lib/models/sst404.mod } C 40400 40300 1 0 0 spice-model-1.sym { T 40500 40900 5 10 1 1 0 0 1 refdes=A10 T 41700 40600 5 10 1 1 0 0 1 model-name=2SK1058 T 40900 40400 5 10 1 1 0 0 1 file=../../lib/models/2sk1058.ckt } C 43900 40300 1 0 0 spice-model-1.sym { T 44000 40900 5 10 1 1 0 0 1 refdes=A11 T 45200 40600 5 10 1 1 0 0 1 model-name=2SJ162 T 44400 40400 5 10 1 1 0 0 1 file=../../lib/models/2sj162.ckt } C 54400 47800 1 270 0 resistor-2.sym { T 54300 47400 5 10 1 1 0 6 1 refdes=RV2 T 54300 47150 5 10 1 1 0 6 1 value=200 } N 54200 46400 55400 46400 4 N 52100 50800 50800 50800 4 N 50800 43800 52100 43800 4 T 63500 50200 8 10 0 0 270 0 1 device=INDUCTOR T 63700 50200 8 10 0 0 270 0 1 symversion=0.1 N 54700 49300 54700 48200 4 N 54700 46400 54700 45300 4 N 54500 48200 54500 47800 4 N 54900 47800 54900 48200 4 N 54500 46900 54500 46400 4 N 54900 46400 54900 46900 4 C 43800 46800 1 0 0 spice-njfet-1.sym { T 44600 47200 5 10 0 0 0 0 1 device=FET_TRANSISTOR T 44400 47300 5 10 1 1 0 0 1 refdes=J1a T 44200 47050 5 10 1 1 0 0 1 value=SST404 } C 47200 46800 1 0 1 spice-njfet-1.sym { T 46400 47200 5 10 0 0 0 6 1 device=FET_TRANSISTOR T 46600 47300 5 10 1 1 0 6 1 refdes=J1b T 46800 47050 5 10 1 1 0 6 1 value=SST404 } C 44800 47500 1 0 1 spice-npn-2.sym { T 43900 48200 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 44200 48100 5 10 1 1 0 6 1 refdes=Q3 T 44450 47900 5 10 1 1 0 6 1 value=BC639 } C 46200 47500 1 0 0 spice-npn-2.sym { T 47100 48200 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 46800 48100 5 10 1 1 0 0 1 refdes=Q4 T 46550 47900 5 10 1 1 0 0 1 value=BC639 } C 45800 43500 1 0 1 spice-npn-2.sym { T 44900 44200 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 45200 44100 5 10 1 1 0 6 1 refdes=Q7 T 45450 43900 5 10 1 1 0 6 1 value=BC639 } C 45500 43000 1 0 0 spice-npn-2.sym { T 46400 43700 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 46100 43600 5 10 1 1 0 0 1 refdes=Q8 T 45850 43400 5 10 1 1 0 0 1 value=BC547 } N 46000 43900 46000 44000 4 C 49000 49500 1 180 1 spice-pnp-2.sym { T 49900 48800 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 49600 49100 5 10 1 1 0 0 1 refdes=Q9 T 49350 48900 5 10 1 1 0 0 1 value=MJE350 } C 45600 51100 1 180 0 spice-pnp-2.sym { T 44700 50400 5 8 0 0 180 0 1 device=PNP_TRANSISTOR T 45000 50750 5 10 1 1 0 6 1 refdes=Q5 T 45250 50500 5 10 1 1 0 6 1 value=BC640 } C 45300 51600 1 180 1 spice-pnp-2.sym { T 46200 50900 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 45900 51250 5 10 1 1 0 0 1 refdes=Q6 T 45650 51000 5 10 1 1 0 0 1 value=BC557 } N 45800 50700 45800 50600 4 C 52600 46200 1 180 0 spice-pnp-2.sym { T 51700 45500 5 8 0 0 180 0 1 device=PNP_TRANSISTOR T 52000 46000 5 10 1 1 180 0 1 refdes=Q14 T 52250 45750 5 10 1 1 180 0 1 value=MJE350 } C 50300 46200 1 180 1 spice-pnp-2.sym { T 51200 45500 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 50900 46000 5 10 1 1 180 6 1 refdes=Q13 T 50650 45750 5 10 1 1 180 6 1 value=MJE350 } C 53000 50200 1 180 1 spice-pnp-2.sym { T 53900 49500 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 53600 50000 5 10 1 1 180 6 1 refdes=Q15 T 53350 49750 5 10 1 1 180 6 1 value=MJE350 } C 55200 50200 1 180 0 spice-pnp-2.sym { T 54300 49500 5 8 0 0 180 0 1 device=PNP_TRANSISTOR T 54600 50000 5 10 1 1 180 0 1 refdes=Q16 T 54850 49750 5 10 1 1 180 0 1 value=MJE350 } C 55200 44400 1 0 1 spice-npn-2.sym { T 54300 45100 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 54600 45000 5 10 1 1 0 6 1 refdes=Q18 T 54800 44800 5 10 1 1 0 6 1 value=MJE340 } C 53000 44400 1 0 0 spice-npn-2.sym { T 53900 45100 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 53600 45000 5 10 1 1 0 0 1 refdes=Q17 T 53350 44800 5 10 1 1 0 0 1 value=MJE340 } C 50300 48400 1 0 0 spice-npn-2.sym { T 51200 49100 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 50900 49000 5 10 1 1 0 0 1 refdes=Q11 T 50650 48800 5 10 1 1 0 0 1 value=MJE340 } C 49000 44900 1 0 0 spice-npn-2.sym { T 49900 45600 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 49600 45100 5 10 1 1 0 0 1 refdes=Q10 T 49350 45300 5 10 1 1 0 0 1 value=MJE340 } C 52600 48400 1 0 1 spice-npn-2.sym { T 51700 49100 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 52000 49000 5 10 1 1 0 6 1 refdes=Q12 T 52250 48800 5 10 1 1 0 6 1 value=MJE340 } N 44300 46500 44400 46500 4 N 46600 46500 46700 46500 4 N 46500 48700 46700 48700 4 N 45300 45300 45300 45500 4 N 45500 48000 45500 47600 4 N 53800 46900 53500 46900 4 N 53300 47300 53300 48900 4 N 53300 48900 52800 48900 4 N 53100 41400 53100 41900 4 B 62400 46000 200 400 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 L 62600 46400 62900 46900 3 0 0 0 -1 -1 L 62900 46900 62900 45500 3 0 0 0 -1 -1 L 62900 45500 62600 46000 3 0 0 0 -1 -1 N 62300 46000 62300 46400 4 C 61400 46500 1 180 1 resistor-2.sym { T 61500 46600 5 10 1 1 0 0 1 refdes=Rspkr T 62200 46600 5 10 1 1 0 0 1 value=8 } C 62300 45900 1 0 1 inductor-1.sym { T 61500 45750 5 10 1 1 180 8 1 refdes=Lspkr T 62100 45750 5 10 1 1 0 0 1 value=1mH T 62100 46400 5 10 0 0 180 2 1 device=INDUCTOR T 62100 46600 5 10 0 0 180 2 1 symversion=0.1 } A 62500 46200 224 297 126 3 0 0 0 -1 -1 T 57600 52600 9 10 1 0 0 0 17 NG-Spice DC Analysis : Vin range : -4.2 to 3.0 mV Corresponding V(NMOS_Drv) : -65.2 to 66.9 V Open loop max gain : 32800 = 90.3 dBV Note : The DC gain characteristic is non-linear, The gain drops of as the input level increases. AC Analysis : Open loop max gain : 33474 = 90.5 dBV @ 2188 Hz Open loop -6dB points : 2.00 Hz, 29.4 KHz Closed loop -6dB points : 1.95 Hz, 186.5 KHz Transient Analysis : Sweep start, stop, step : 0, 2msec, 5usec Signal source : Vin, 2188 Hz, 100 uVp-p amplitude Open loop gain : 33440 = 90.5 dBV Note : Distortion is easily detectable owing to the non-linear gain characteristic. T 40400 54000 9 10 1 0 0 0 10 Differential input stage : The input stage is significantly loaded down by the second stage. AC analysis : Gain (unloaded) = 25.5 = 28.1 dB AC analysis : Gain ( loaded) = 4.7 = 13.4 dB Transient analysis : Gain (unloaded) = 25.5 @ Vin = 1 KHz & 100 mVp-p Transient analysis : Gain ( loaded) = 5.0 @ Vin = 1 KHz & 100 mVp-p Current source formed by Q5 delivers 3.95mA Current source formed by Q7 delivers 5.85mA C 59100 50300 1 0 0 spice-nmos-2.sym { T 59700 50800 5 10 0 0 0 0 1 device=SUBCKT T 58800 50900 5 10 1 1 0 0 1 refdes=X20 T 58700 51150 5 10 1 1 0 0 1 value=2SK1058 } C 59100 44300 1 180 1 spice-pmos-2.sym { T 59700 43800 5 10 0 0 180 6 1 device=SUBCKT T 58800 43700 5 10 1 1 180 6 1 refdes=X22 T 58800 43450 5 10 1 1 180 6 1 value=2SJ162 } C 57000 50300 1 0 0 spice-nmos-2.sym { T 57600 50800 5 10 0 0 0 0 1 device=SUBCKT T 56700 50900 5 10 1 1 0 0 1 refdes=X19 T 56600 51150 5 10 1 1 0 0 1 value=2SK1058 } C 57000 44300 1 180 1 spice-pmos-2.sym { T 57600 43800 5 10 0 0 180 6 1 device=SUBCKT T 56700 43700 5 10 1 1 180 6 1 refdes=X21 T 56700 43450 5 10 1 1 180 6 1 value=2SJ162 } T 49100 53800 9 10 1 0 0 0 11 Problems with this design : 1. Some of the components can no longer be obtained ie. ECG461, 2SK176, 2SJ56 (can't even get SPICE models for them). 2. The input stage is significantly loaded down by the following stage (more than was intended I'm guessing). 3. The component count is high. 4. The open loop gain characteristic is non-linear (corrected by the feedback however). 5. When constructed the actual modules displayed a 2Vp-p oscillation at the output with no input. C 47400 51900 1 90 1 capacitor-4.sym { T 46300 51700 5 10 0 0 270 2 1 device=POLARIZED_CAPACITOR T 47700 51300 5 10 1 1 0 6 1 refdes=C5 T 46700 51700 5 10 0 0 270 2 1 symversion=0.1 T 47800 51100 5 10 1 1 0 6 1 value=100uF } C 47100 43700 1 90 1 capacitor-4.sym { T 46000 43500 5 10 0 0 270 2 1 device=POLARIZED_CAPACITOR T 47400 43200 5 10 1 1 0 6 1 refdes=C4 T 46400 43500 5 10 0 0 270 2 1 symversion=0.1 T 47500 43400 5 10 1 1 0 6 1 value=100uF } T 47900 40400 9 10 1 0 0 0 3 This schematic can be simulated using NG-Spice but not GNU-Cap (last tested 2011-02-04) N 61300 46400 61400 46400 4 N 61300 46000 61400 46000 4 N 56200 51500 56200 51600 4 N 58300 51500 58300 51600 4 N 56200 43100 56200 43000 4 N 58300 43000 58300 43100 4 N 56200 44000 56200 44200 4 N 58300 44000 58300 44200 4 N 56200 50600 56200 50400 4 N 58300 50600 58300 50400 4 N 56800 44200 56800 44100 4 N 58900 44200 58900 44100 4 T 40400 53400 9 10 1 0 0 0 1 The AEM 6000 was designed by David Tilbrook. N 44300 48700 44600 48700 4 N 45100 49300 45100 49200 4 C 61900 43400 1 0 1 gnd-2.sym C 61800 43600 1 0 0 resistor-2.sym { T 62200 43950 5 10 0 0 0 0 1 device=RESISTOR T 61900 43900 5 10 1 1 0 0 1 refdes=R2 T 62600 43900 5 10 1 1 0 0 1 value=1 } C 62600 43400 1 0 0 gnd-1.sym { T 62600 43400 5 10 0 0 0 0 1 netname=GND } C 53700 46600 1 0 0 gnd-2.sym C 61900 42000 1 0 1 gnd-2.sym C 63000 42500 1 0 1 gnd-2.sym C 63100 41800 1 0 1 gnd-2.sym C 61600 41500 1 0 1 gnd-2.sym C 63300 41200 1 0 1 gnd-2.sym N 48600 42700 48600 42600 4 gspiceui-1.1.00+dfsg/sch/audio/le-pacific-mm-pre.sch0000644000000000000000000000524612124473163020574 0ustar rootrootv 20110115 2 C 4800 87050 1 90 0 capacitor-1.sym { T 4300 87600 5 10 1 1 0 0 1 refdes=C2 T 4550 87400 5 10 1 1 180 0 1 value=1n } C 3950 86750 1 0 0 gnd-1.sym C 800 88100 1 270 0 voltage-2.sym { T 350 87700 5 10 1 1 0 0 1 refdes=Vin T 750 87600 5 10 1 1 180 0 1 value=AC 1V } T 1700 90350 9 16 1 0 0 0 1 Le Pacific MM RIAA Pre-amplifier T 3750 90100 9 10 1 0 0 4 1 Last Updated : 30 / 06 / 2010 C 1900 87200 1 90 0 resistor-2.sym { T 1600 87850 5 10 1 1 180 0 1 refdes=R4 T 1650 87600 5 10 1 1 180 0 1 value=100 } C 2500 88650 1 0 0 capacitor-1.sym { T 3350 89050 5 10 1 1 180 0 1 refdes=C1 T 3050 88650 5 10 1 1 0 0 1 value=470n } C 1000 86000 1 0 0 spice-model-1.sym { T 1100 86700 5 10 0 1 0 0 1 device=model T 1100 86600 5 10 1 1 0 0 1 refdes=A1 T 2300 86300 5 10 1 1 0 0 1 model-name=2SK170 T 1500 86100 5 10 1 1 0 0 1 file=../../lib/jfet/2sk170.mod } C 2600 89750 1 90 1 resistor-2.sym { T 2300 89350 5 10 1 1 0 6 1 refdes=R5 T 2350 89100 5 10 1 1 0 6 1 value=2.4K } C 3550 88950 1 180 1 resistor-2.sym { T 3900 89150 5 10 1 1 180 6 1 refdes=R1 T 3850 88700 5 10 1 1 180 6 1 value=27K } C 4500 87950 1 270 1 resistor-2.sym { T 4200 88450 5 10 1 1 180 6 1 refdes=R2 T 4750 88450 5 10 1 1 180 6 1 value=3K } N 1000 88200 2000 88200 4 N 3550 88850 3400 88850 4 N 4450 88850 5200 88850 4 N 6700 87050 1000 87050 4 N 1000 87050 1000 87200 4 N 1000 88100 1000 88200 4 N 1800 88100 1800 88200 4 N 1800 87200 1800 87050 4 C 800 88550 1 0 1 vdc-1.sym { T 1200 89100 5 10 1 1 0 6 1 refdes=Vcc T 100 89400 5 10 0 0 180 2 1 device=VOLTAGE_SOURCE T 100 89600 5 10 0 0 180 2 1 footprint=none T 1450 88850 5 10 1 1 0 6 1 value=DC 24V } C 400 88250 1 0 0 gnd-1.sym N 500 89750 6700 89750 4 C 5000 87050 1 270 1 capacitor-1.sym { T 5500 87600 5 10 1 1 0 6 1 refdes=C3 T 5250 87400 5 10 1 1 180 6 1 value=1n } N 5200 88850 5200 87950 4 C 5750 87200 1 270 1 resistor-2.sym { T 6050 87850 5 10 1 1 180 6 1 refdes=R6 T 6000 87600 5 10 1 1 180 6 1 value=100 } N 2500 88000 2500 87050 4 C 6800 89750 1 90 1 resistor-2.sym { T 6500 89350 5 10 1 1 0 6 1 refdes=R7 T 6550 89100 5 10 1 1 0 6 1 value=2.4K } N 6200 88200 5200 88200 4 N 5850 88200 5850 88100 4 N 5850 87200 5850 87050 4 N 6700 88000 6700 87050 4 C 6950 88750 1 0 0 output-1.sym { T 7050 89050 5 10 0 0 0 0 1 device=OUTPUT T 7200 88750 5 10 1 1 0 0 1 refdes=Vout } N 6950 88850 6700 88850 4 C 2000 88000 1 0 0 spice-njfet-1.sym { T 2800 88400 5 10 0 0 0 0 1 device=FET_TRANSISTOR T 2600 88400 5 10 1 1 0 0 1 refdes=J1 T 2550 88200 5 10 1 1 0 0 1 value=2SK170 } C 6200 88000 1 0 0 spice-njfet-1.sym { T 7000 88400 5 10 0 0 0 0 1 device=FET_TRANSISTOR T 6800 88400 5 10 1 1 0 0 1 refdes=J2 T 6750 88200 5 10 1 1 0 0 1 value=2SK170 } N 2500 88850 2500 88700 4 N 6700 88850 6700 88700 4 gspiceui-1.1.00+dfsg/sch/audio/aem-6001-input-stage.sch0000644000000000000000000002247612514743345021002 0ustar rootrootv 20130925 2 C 40000 40000 0 0 0 title-A3.sym C 44800 43600 1 270 0 resistor-2.sym { T 44750 43200 5 10 1 1 0 6 1 refdes=R12 T 44750 42950 5 10 1 1 0 6 1 value=3.9K } C 43000 45300 1 180 0 resistor-2.sym { T 42400 45350 5 10 1 1 0 0 1 refdes=R3 T 42400 44900 5 10 1 1 0 0 1 value=1K } C 44200 44600 1 0 0 resistor-2.sym { T 44900 45000 5 10 1 1 180 0 1 refdes=RV1a T 44500 44400 5 10 1 1 0 0 1 value=10K } C 41200 44300 1 90 0 voltage-1.sym { T 40750 44850 5 10 1 1 180 0 1 refdes=Vin T 40400 44350 5 10 0 1 0 0 1 value=DC 0.0 } C 52900 43900 1 0 0 spice-model-1.sym { T 53000 44500 5 10 1 1 0 0 1 refdes=A2 T 54200 44200 5 10 1 1 0 0 1 model-name=MMBTA06 T 53400 44000 5 10 1 1 0 0 1 file=../../lib/models/mmbta06.mod } C 52900 42900 1 0 0 spice-model-1.sym { T 53000 43500 5 10 1 1 0 0 1 refdes=A3 T 54200 43200 5 10 1 1 0 0 1 model-name=MMBTA56 T 53400 43000 5 10 1 1 0 0 1 file=../../lib/models/mmbta56.mod } C 49900 43750 1 0 1 vdc-1.sym { T 49200 44300 5 10 0 1 0 6 1 refdes=V1 T 49200 44300 5 10 1 1 0 6 1 value=DC +70V } C 49300 43450 1 180 1 vdc-1.sym { T 48900 42950 5 10 0 1 180 6 1 refdes=V2 T 49200 42800 5 10 1 1 0 6 1 value=DC -70V } C 49025 43450 1 0 0 gnd-1.sym { T 49025 43450 5 10 0 0 0 0 1 netname=GND } C 46500 44700 1 270 0 resistor-2.sym { T 46450 44200 5 10 1 1 0 6 1 refdes=R5 T 46450 44000 5 10 1 1 0 6 1 value=330 } C 41900 45200 1 270 0 resistor-2.sym { T 41800 44700 5 10 1 1 0 6 1 refdes=R1 T 41800 44500 5 10 1 1 0 6 1 value=100K } C 42500 44000 1 0 0 gnd-1.sym { T 42500 44000 5 10 0 0 0 0 1 netname=GND } N 41000 44300 43300 44300 4 C 52900 44900 1 0 0 spice-model-1.sym { T 53000 45500 5 10 1 1 0 0 1 refdes=A1 T 54200 45200 5 10 1 1 0 0 1 model-name=SST404 T 53400 45000 5 10 1 1 0 0 1 file=../../lib/models/sst404.mod } T 49400 40900 9 14 1 0 0 0 1 AEM Audio Power Amplifier - Series 6001 - Input Stage T 49600 40400 9 10 1 0 0 0 1 aem-6001-input-stage.sch T 50400 40100 9 10 1 0 0 0 1 1 T 51100 40100 9 10 1 0 0 0 1 1 T 53500 40400 9 10 1 0 0 0 1 2015 - 04 - 19 T 53500 40100 9 10 1 0 0 0 1 Mike Waters C 49800 42250 1 180 0 vee-1.sym { T 49800 42250 5 10 0 0 0 0 1 netname=Vee } C 42100 40900 1 180 0 vee-1.sym { T 42100 40900 5 10 0 0 180 0 1 netname=Vee } C 41700 50200 1 0 0 vcc-1.sym { T 41700 50200 5 10 0 0 0 0 1 netname=Vcc } C 49400 44950 1 0 0 vcc-1.sym { T 49400 44950 5 10 0 0 0 0 1 netname=Vcc } N 49600 43750 49600 43450 4 N 49600 43750 49125 43750 4 C 41000 45000 1 0 0 capacitor-1.sym { T 41200 45700 5 10 0 0 0 0 1 device=CAPACITOR T 41300 45300 5 10 1 1 0 6 1 refdes=C1 T 41200 45900 5 10 0 0 0 0 1 symversion=0.1 T 41600 45300 5 10 1 1 0 0 1 value=470n } N 41900 45200 42100 45200 4 C 43100 44300 1 270 1 capacitor-1.sym { T 43800 44500 5 10 0 0 90 2 1 device=CAPACITOR T 43000 45000 5 10 1 1 180 6 1 refdes=C2 T 44000 44500 5 10 0 0 90 2 1 symversion=0.1 T 42900 44500 5 10 1 1 0 0 1 value=1nF } N 43000 45200 43400 45200 4 C 45400 44600 1 0 0 resistor-2.sym { T 46100 45000 5 10 1 1 180 0 1 refdes=RV1b T 45700 44400 5 10 1 1 0 0 1 value=10K } C 45100 45000 1 270 1 zener-1.sym { T 45700 45400 5 10 0 0 90 2 1 device=ZENER_DIODE T 45200 45800 5 10 1 1 0 6 1 refdes=DZ1 T 44700 45300 5 10 0 1 0 0 1 value=1N759 T 45400 45800 5 10 1 1 0 0 1 description=12V } N 44400 46200 46100 46200 4 C 43800 44700 1 270 0 resistor-2.sym { T 44050 44200 5 10 1 1 0 0 1 refdes=R4 T 44050 44000 5 10 1 1 0 0 1 value=330 } N 43900 43800 46600 43800 4 N 46600 45000 46600 44700 4 N 43900 45000 43900 44700 4 N 45100 44700 45400 44700 4 N 45400 42300 45600 42300 4 N 44900 41800 45100 41800 4 C 44800 41800 1 270 0 resistor-2.sym { T 44700 41400 5 10 1 1 0 6 1 refdes=R13 T 44700 41150 5 10 1 1 0 6 1 value=120 } C 45500 43200 1 270 0 resistor-2.sym { T 45750 42800 5 10 1 1 0 0 1 refdes=R14 T 45750 42550 5 10 1 1 0 0 1 value=10K } C 45700 43500 1 180 0 gnd-1.sym { T 45700 43500 5 10 0 0 0 0 1 netname=GND } N 45600 41300 45600 40900 4 N 45600 40900 43300 40900 4 C 45100 47100 1 180 0 capacitor-1.sym { T 44900 46400 5 10 0 0 180 0 1 device=CAPACITOR T 44500 47100 5 10 1 1 180 0 1 refdes=C3 T 44900 46200 5 10 0 0 180 0 1 symversion=0.1 T 44500 46800 5 10 1 1 180 0 1 value=47pF } C 44000 48300 1 90 1 resistor-2.sym { T 44050 47900 5 10 1 1 0 0 1 refdes=R6 T 44050 47700 5 10 1 1 0 0 1 value=27K } C 46500 48300 1 270 0 resistor-2.sym { T 46450 47900 5 10 1 1 0 6 1 refdes=R7 T 46450 47700 5 10 1 1 0 6 1 value=27K } N 44900 49300 45100 49300 4 N 45400 48800 45600 48800 4 N 45100 46900 45400 46900 4 C 44800 48400 1 270 0 resistor-2.sym { T 45050 48000 5 10 1 1 0 0 1 refdes=R9 T 45050 47800 5 10 1 1 0 0 1 value=4.7K } C 45000 50200 1 90 1 resistor-2.sym { T 44750 49800 5 10 1 1 0 6 1 refdes=R8 T 44750 49600 5 10 1 1 0 6 1 value=180 } C 45500 48800 1 270 0 resistor-2.sym { T 45800 48500 5 10 1 1 0 0 1 refdes=R10 T 45800 48300 5 10 1 1 0 0 1 value=10K } C 45500 47600 1 0 0 gnd-1.sym { T 45500 47600 5 10 0 0 0 0 1 netname=GND } N 43300 50200 46600 50200 4 N 45600 49800 45600 50200 4 N 44900 46200 44900 47500 4 N 43900 48300 43900 50200 4 N 46600 48300 46600 50200 4 N 46600 47400 46600 46600 4 N 43900 47400 43900 46600 4 N 45300 43800 45300 45000 4 N 47100 45200 47500 45200 4 C 47600 44300 1 90 0 resistor-2.sym { T 47300 44700 5 10 1 1 0 6 1 refdes=R49 T 47300 44500 5 10 1 1 0 6 1 value=1K } C 47400 44000 1 0 0 gnd-1.sym { T 47400 44000 5 10 0 0 0 0 1 netname=GND } C 52900 41900 1 0 0 spice-model-1.sym { T 53000 42500 5 10 1 1 0 0 1 refdes=A4 T 54200 42200 5 10 1 1 0 0 1 model-name=1N759 T 53400 42000 5 10 1 1 0 0 1 file=../../lib/models/1n759.mod } T 63500 50200 8 10 0 0 270 0 1 device=INDUCTOR T 63700 50200 8 10 0 0 270 0 1 symversion=0.1 C 43400 45000 1 0 0 spice-njfet-1.sym { T 44200 45400 5 10 0 0 0 0 1 device=FET_TRANSISTOR T 44100 45500 5 10 1 1 0 0 1 refdes=J1 T 43900 45250 5 10 1 1 0 0 1 value=SST404 } C 47100 45000 1 0 1 spice-njfet-1.sym { T 46300 45400 5 10 0 0 0 6 1 device=FET_TRANSISTOR T 46400 45500 5 10 1 1 0 6 1 refdes=J2 T 46600 45250 5 10 1 1 0 6 1 value=SST404 } C 44400 45700 1 0 1 spice-npn-2.sym { T 43500 46400 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 43800 46300 5 10 1 1 0 6 1 refdes=Q3 T 43900 46100 5 10 1 1 0 6 1 value=MMBTA06 } C 46100 45700 1 0 0 spice-npn-2.sym { T 47000 46400 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 46700 46300 5 10 1 1 0 0 1 refdes=Q4 T 46600 46100 5 10 1 1 0 0 1 value=MMBTA06 } C 45400 41800 1 0 1 spice-npn-2.sym { T 44500 42500 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 44800 42400 5 10 1 1 0 6 1 refdes=Q7 T 44950 42200 5 10 1 1 0 6 1 value=MMBTA06 } N 44900 43600 44900 43800 4 C 45100 41300 1 0 0 spice-npn-2.sym { T 46000 42000 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 45700 41900 5 10 1 1 0 0 1 refdes=Q8 T 45550 41700 5 10 1 1 0 0 1 value=MMBTA06 } N 45600 42200 45600 42300 4 C 45400 49300 1 180 0 spice-pnp-2.sym { T 44500 48600 5 8 0 0 180 0 1 device=PNP_TRANSISTOR T 44800 48900 5 10 1 1 0 6 1 refdes=Q5 T 45000 48700 5 10 1 1 0 6 1 value=MMBTA56 } C 45100 49800 1 180 1 spice-pnp-2.sym { T 46000 49100 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 45700 49400 5 10 1 1 0 0 1 refdes=Q6 T 45500 49200 5 10 1 1 0 0 1 value=MMBTA56 } N 45600 48900 45600 48800 4 N 43900 44700 44200 44700 4 N 46300 44700 46600 44700 4 C 46300 47000 1 180 0 resistor-2.sym { T 45700 47200 5 10 1 1 180 6 1 refdes=R11 T 45700 46600 5 10 1 1 0 0 1 value=680 } N 46600 47200 47000 47200 4 N 43900 47200 43500 47200 4 T 48400 49400 9 10 1 0 0 0 8 Differential input stage : Rload represents the load presented by the next stage Current source formed by Q5 and Q6 delivers 3.7 mA Current source formed by Q7 and Q8 delivers 5.6 mA AC analysis : Gain (without Rload) = 31.1 dBV (3db BW is 3.4Hz to 55kHz) AC analysis : Gain (with Rload) = 21.4 dBV (3db BW is 3.4Hz to 111kHz) Transient analysis : Gain (without Rload) = ??? @ Vin = 1 KHz & 100 mV Transient analysis : Gain (with Rload) = ??? @ Vin = 1 KHz & 100 mV N 43500 47200 43500 50700 4 N 43500 50700 44700 50700 4 C 44700 50800 1 180 1 resistor-2.sym { T 44900 51000 5 10 1 1 180 6 1 refdes=Rload T 44800 50400 5 10 1 1 0 0 1 value=24.33K } N 47000 47200 47000 50700 4 T 48400 47800 9 10 1 0 0 0 6 There are several equivalents for the dual n-channel JFET ECG461 : 1. SST404 2. 2N5545 3. NTE461 4. EXR461 T 52900 46500 9 10 1 0 0 0 3 This schematic can be simulated using NG-Spice but not GNU-Cap (last tested 2011-02-04) N 43900 46900 44200 46900 4 N 46300 46900 46600 46900 4 N 42600 44300 42000 44300 4 C 42400 50100 1 0 0 resistor-2.sym { T 42500 50500 5 10 1 1 180 6 1 refdes=R15 T 43000 50500 5 10 1 1 180 6 1 value=22 } C 42100 48900 1 0 0 gnd-1.sym { T 42100 48900 5 10 0 0 0 0 1 netname=GND } N 42200 50200 42200 50100 4 C 42400 50100 1 90 1 capacitor-4.sym { T 41300 49900 5 10 0 0 270 2 1 device=POLARIZED_CAPACITOR T 41700 49900 5 10 0 0 270 2 1 symversion=0.1 T 42500 49500 5 10 1 1 0 0 1 refdes=C4 T 42300 49300 5 10 1 1 0 0 1 value=220uF } C 43300 41000 1 180 0 resistor-2.sym { T 42500 40600 5 10 1 1 0 0 1 refdes=R16 T 43000 40600 5 10 1 1 0 0 1 value=22 } C 42300 42200 1 180 0 gnd-1.sym { T 42300 42200 5 10 0 0 0 0 1 netname=GND } N 42200 41000 42200 40900 4 C 42400 41900 1 90 1 capacitor-4.sym { T 41300 41700 5 10 0 0 270 2 1 device=POLARIZED_CAPACITOR T 41700 41700 5 10 0 0 270 2 1 symversion=0.1 T 42500 41400 5 10 1 1 0 0 1 refdes=C5 T 42300 41600 5 10 1 1 0 0 1 value=220uF } N 41900 50200 42400 50200 4 N 41900 40900 42400 40900 4 N 45600 50700 47000 50700 4 T 51900 48700 9 10 1 0 0 0 2 Suggested values for C3 and R11 to increase BW of differential input stage 22pF and 560Ohm. N 45300 46200 45300 45900 4 gspiceui-1.1.00+dfsg/sch/audio/aem-6000-filter-feedback.sch0000644000000000000000000000265112512223757021537 0ustar rootrootv 20130925 2 C 40000 40000 0 0 0 title-A4.sym T 44900 40900 9 16 1 0 0 0 1 AEM 6000 Power Amplifier - Feedback Filter T 44700 40400 9 10 1 0 0 0 1 aem-6000-filter-feedback.sch T 45400 40100 9 10 1 0 0 0 1 1 T 46300 40100 9 10 1 0 0 0 1 1 T 48700 40400 9 10 1 0 0 0 1 2015 - 04 - 10 T 48700 40100 9 10 1 0 0 0 1 Mike Waters C 45400 45300 1 180 1 resistor-2.sym { T 45400 45350 5 10 1 1 0 0 1 refdes=R48 T 46000 45350 5 10 1 1 0 0 1 value=47K } C 44800 44200 1 270 1 resistor-2.sym { T 44400 44700 5 10 1 1 0 0 1 refdes=R49 T 44500 44500 5 10 1 1 0 0 1 value=1K } C 46300 44900 1 180 0 capacitor-1.sym { T 46100 44200 5 10 0 0 180 0 1 device=CAPACITOR T 46100 44000 5 10 0 0 180 0 1 symversion=0.1 T 45500 44500 5 10 1 1 0 0 1 refdes=C6 T 45950 44500 5 10 1 1 0 0 1 value=15p } C 45800 43800 1 0 0 gnd-1.sym { T 45800 43800 5 10 0 0 0 0 1 netname=GND } N 46300 45200 46300 44700 4 N 45400 44700 45400 45200 4 C 46700 45100 1 270 0 voltage-1.sym { T 47500 45050 5 10 0 1 180 0 1 value=DC 0.0 T 47200 44600 5 10 1 1 0 0 1 refdes=Vout } N 44900 44100 46900 44100 4 N 46900 45200 46300 45200 4 N 45400 45200 44600 45200 4 { T 45400 45200 5 10 0 0 0 0 1 netname=Feedback } N 44900 45200 44900 45100 4 N 44900 44200 44900 44100 4 N 46900 44100 46900 44200 4 N 46900 45100 46900 45200 4 C 44600 45300 1 180 0 output-1.sym { T 44500 45000 5 10 0 0 180 0 1 device=OUTPUT T 43700 45400 5 10 1 1 0 0 1 netname=Feedback } T 45300 43000 9 10 1 0 0 0 1 fo = 226kHz gspiceui-1.1.00+dfsg/sch/audio/amp-drv-18w.sch0000644000000000000000000000656212124473163017372 0ustar rootrootv 20110115 2 C 8350 2900 1 90 0 resistor-2.sym { T 8050 3550 5 10 1 1 180 0 1 refdes=R6 T 7850 3150 5 10 1 1 0 0 1 value=10 } C 4650 5000 1 270 0 resistor-2.sym { T 5000 4600 5 10 1 1 0 0 1 refdes=R2 T 4950 4300 5 10 1 1 0 0 1 value=4.7K } C 4650 1700 1 270 0 resistor-2.sym { T 5000 1300 5 10 1 1 0 0 1 refdes=R4 T 4950 1000 5 10 1 1 0 0 1 value=4.7K } C 4650 2900 1 270 0 resistor-2.sym { T 4950 2550 5 10 1 1 0 0 1 refdes=R3 T 4950 2250 5 10 1 1 0 0 1 value=1K } C 8450 2100 1 90 0 capacitor-4.sym { T 8050 2600 5 10 1 1 180 0 1 refdes=C6 T 8150 2350 5 10 1 1 180 0 1 value=100n } C 5750 3300 1 0 0 npn-3.sym { T 6650 3850 5 10 1 1 0 0 1 refdes=Q1 T 6650 3600 5 10 1 1 0 0 1 value=BC548 } C 6950 700 1 0 0 npn-3.sym { T 7850 1250 5 10 1 1 0 0 1 refdes=Q3 T 7850 1000 5 10 1 1 0 0 1 value=TIP41 } C 5750 2500 1 180 1 pnp-3.sym { T 6650 2150 5 10 1 1 180 6 1 refdes=Q2 T 6650 1750 5 10 1 1 0 0 1 value=BC558 } C 6950 5100 1 180 1 pnp-3.sym { T 7850 4750 5 10 1 1 180 6 1 refdes=Q4 T 7850 4350 5 10 1 1 0 0 1 value=TIP42 } C 8150 1800 1 0 0 gnd-1.sym C 3950 2900 1 90 0 voltage-1.sym { T 3450 3350 5 10 1 1 180 0 1 refdes=Vin T 2600 2950 5 10 1 1 0 0 1 value=DC 0V AC 0V } N 6350 4600 6950 4600 4 N 6350 4600 6350 4300 4 N 6350 1200 6950 1200 4 N 6350 1200 6350 1500 4 N 7550 700 7550 500 4 N 7550 4100 7550 1700 4 N 7550 5300 7550 5100 4 N 6350 2900 7550 2900 4 N 6350 3300 6350 2500 4 T 6600 6400 9 18 1 0 0 4 1 Audio Amplifier - 18Watt C 10600 4200 1 0 0 spice-model-1.sym { T 10700 4800 5 10 1 1 0 0 1 refdes=A2 T 11900 4500 5 10 1 1 0 0 1 model-name=BC548 T 11100 4300 5 10 1 1 0 0 1 file=../../lib/bjt/bc548.mod } C 10600 3200 1 0 0 spice-model-1.sym { T 10700 3800 5 10 1 1 0 0 1 refdes=A3 T 11900 3500 5 10 1 1 0 0 1 model-name=BC558 T 11100 3300 5 10 1 1 0 0 1 file=../../lib/bjt/bc558.mod } C 10600 2200 1 0 0 spice-model-1.sym { T 10700 2800 5 10 1 1 0 0 1 refdes=A4 T 11900 2500 5 10 1 1 0 0 1 model-name=TIP41 T 11100 2300 5 10 1 1 0 0 1 file=../../lib/bjt/tip41.mod } C 10600 1200 1 0 0 spice-model-1.sym { T 10700 1800 5 10 1 1 0 0 1 refdes=A5 T 11900 1500 5 10 1 1 0 0 1 model-name=TIP42 T 11100 1300 5 10 1 1 0 0 1 file=../../lib/bjt/tip42.mod } C 9650 3500 1 270 0 resistor-2.sym { T 9200 2850 5 10 1 1 0 0 1 refdes=Rout T 9550 3250 5 10 1 1 180 0 1 value=4 } N 7550 3800 8650 3800 4 C 9650 2300 1 0 0 gnd-1.sym C 9950 5600 1 90 1 vdc-1.sym { T 9500 4600 5 10 1 1 0 6 1 refdes=Vcc T 9650 4800 5 10 1 1 0 6 1 value=DC 15V } C 9950 800 1 90 1 vdc-1.sym { T 9500 1050 5 10 1 1 0 6 1 refdes=Vee T 9750 850 5 10 1 1 0 6 1 value=DC -15V } N 4750 5300 8750 5300 4 N 4750 500 8750 500 4 C 10250 5200 1 90 0 gnd-1.sym C 10250 400 1 90 0 gnd-1.sym C 5850 3400 1 90 1 capacitor-4.sym { T 6000 3150 5 10 1 1 0 6 1 refdes=C5 T 5700 2750 5 10 1 1 180 6 1 value=100u } C 4550 3800 1 270 0 diode-1.sym { T 4250 3250 5 10 1 1 0 0 1 refdes=D1 T 4150 3000 5 10 1 1 0 0 1 value=1N914 } C 8650 3700 1 0 0 resistor-2.sym { T 8950 4000 5 10 1 1 0 0 1 refdes=R7 T 8950 3500 5 10 1 1 0 0 1 value=22 } N 4750 5300 4750 5000 4 N 4750 4100 4750 3800 4 N 4750 2000 4750 1700 4 N 4750 800 4750 500 4 N 3750 3800 5750 3800 4 N 5750 2000 4750 2000 4 N 5650 3800 5650 3400 4 N 9550 3800 9750 3800 4 N 9750 3800 9750 3500 4 C 3650 2600 1 0 0 gnd-1.sym N 5650 2500 5650 2000 4 C 10600 200 1 0 0 spice-model-1.sym { T 10700 800 5 10 1 1 0 0 1 refdes=A6 T 11900 500 5 10 1 1 0 0 1 model-name=1N914 T 11100 300 5 10 1 1 0 0 1 file=../../lib/diode/1n914.mod } gspiceui-1.1.00+dfsg/sch/audio/aem-6001-gain-stage.sch0000644000000000000000000002515212515215575020553 0ustar rootrootv 20130925 2 C 40000 40000 0 0 0 title-A3.sym C 52000 43950 1 0 1 vdc-1.sym { T 51300 44500 5 10 0 1 0 6 1 refdes=V1 T 51300 44450 5 10 1 1 0 6 1 value=DC +70V } C 51400 43450 1 180 1 vdc-1.sym { T 51000 42950 5 10 0 1 180 6 1 refdes=V2 T 50600 42900 5 10 1 1 180 6 1 value=DC -70V } C 51125 43500 1 0 0 gnd-1.sym { T 51125 43500 5 10 0 0 0 0 1 netname=GND } T 49400 40900 9 14 1 0 0 0 1 AEM Audio Power Amplifier - Series 6001 - Gain Stage T 49600 40400 9 10 1 0 0 0 1 aem-6001-gain-stage.sch T 50400 40100 9 10 1 0 0 0 1 1 T 51100 40100 9 10 1 0 0 0 1 1 T 53500 40400 9 10 1 0 0 0 1 2015 - 04 - 20 T 53500 40100 9 10 1 0 0 0 1 Mike Waters C 51900 42250 1 180 0 vee-1.sym { T 51900 42250 5 10 0 0 0 0 1 netname=Vee } C 51500 45150 1 0 0 vcc-1.sym { T 51500 45150 5 10 0 0 0 0 1 netname=Vcc } N 51700 43950 51700 43450 4 N 51700 43800 51225 43800 4 T 63500 50200 8 10 0 0 270 0 1 device=INDUCTOR T 63700 50200 8 10 0 0 270 0 1 symversion=0.1 C 53000 41800 1 0 0 spice-model-1.sym { T 53100 42400 5 10 1 1 0 0 1 refdes=A7 T 54300 42100 5 10 1 1 0 0 1 model-name=LL4148 T 53500 41900 5 10 1 1 0 0 1 file=../../lib/models/ll4148.mod } C 41200 47000 1 90 1 voltage-1.sym { T 40700 46500 5 10 1 1 0 6 1 refdes=Vin T 40400 46950 5 10 0 1 180 6 1 value=DC 30.0 } N 44700 48300 46900 48300 4 C 48000 41400 1 180 0 vee-1.sym { T 48000 41400 5 10 0 0 180 0 1 netname=Vee } C 47600 50800 1 0 0 vcc-1.sym { T 47600 50800 5 10 0 0 0 0 1 netname=Vcc } N 41900 47000 41900 51100 4 C 42100 50800 1 270 0 diode-1.sym { T 42600 50200 5 10 1 1 0 0 1 refdes=D1 T 42350 50000 5 10 1 1 0 0 1 value=LL4148 } C 42100 49900 1 270 0 diode-1.sym { T 42600 49300 5 10 1 1 0 0 1 refdes=D2 T 42350 49100 5 10 1 1 0 0 1 value=LL4148 } C 42100 49000 1 270 0 diode-1.sym { T 42600 48400 5 10 1 1 0 0 1 refdes=D3 T 42350 48200 5 10 1 1 0 0 1 value=LL4148 } C 42100 44100 1 270 0 diode-1.sym { T 42600 43500 5 10 1 1 0 0 1 refdes=D4 T 42350 43300 5 10 1 1 0 0 1 value=LL4148 } C 42100 43200 1 270 0 diode-1.sym { T 42600 42600 5 10 1 1 0 0 1 refdes=D5 T 42350 42400 5 10 1 1 0 0 1 value=LL4148 } C 42100 42300 1 270 0 diode-1.sym { T 42600 41700 5 10 1 1 0 0 1 refdes=D6 T 42350 41500 5 10 1 1 0 0 1 value=LL4148 } C 42400 47600 1 90 1 resistor-2.sym { T 42800 47200 5 10 1 1 0 6 1 refdes=R17 T 42800 47000 5 10 1 1 0 6 1 value=10K } C 42400 45400 1 90 1 resistor-2.sym { T 42800 45000 5 10 1 1 0 6 1 refdes=R18 T 42800 44800 5 10 1 1 0 6 1 value=10K } N 42300 46700 42300 45400 4 N 42300 44500 42300 44100 4 N 42300 48100 42300 47600 4 C 43500 49900 1 90 1 resistor-2.sym { T 43550 49500 5 10 1 1 0 0 1 refdes=R19 T 43550 49300 5 10 1 1 0 0 1 value=390 } C 43500 43200 1 90 1 resistor-2.sym { T 43550 42800 5 10 1 1 0 0 1 refdes=R20 T 43550 42600 5 10 1 1 0 0 1 value=390 } N 42900 47800 42300 47800 4 N 43400 48300 43400 49000 4 N 43400 43800 43400 43200 4 N 42900 44300 42300 44300 4 N 43400 42300 43400 41400 4 N 43400 44700 43400 45900 4 N 43400 47400 43400 46300 4 N 43400 49900 43400 50800 4 C 44800 47200 1 90 1 resistor-2.sym { T 44850 46800 5 10 1 1 0 0 1 refdes=R23 T 44850 46600 5 10 1 1 0 0 1 value=150 } C 45800 47200 1 270 0 resistor-2.sym { T 45750 46800 5 10 1 1 0 6 1 refdes=R24 T 45750 46600 5 10 1 1 0 6 1 value=150 } C 44800 45900 1 90 1 resistor-2.sym { T 44850 45500 5 10 1 1 0 0 1 refdes=R25 T 44850 45300 5 10 1 1 0 0 1 value=150 } C 46000 45900 1 90 1 resistor-2.sym { T 45750 45500 5 10 1 1 0 6 1 refdes=R26 T 45750 45300 5 10 1 1 0 6 1 value=150 } N 44700 46300 45900 46300 4 N 44700 45900 45900 45900 4 N 44700 46300 44400 45900 4 N 44400 45900 43400 45900 4 N 44700 45900 44400 46300 4 N 44400 46300 43400 46300 4 C 44100 47400 1 270 0 resistor-2.sym { T 44050 47000 5 10 1 1 0 6 1 refdes=R22 T 44050 46800 5 10 1 1 0 6 1 value=220 } C 44100 45700 1 270 0 resistor-2.sym { T 44050 45300 5 10 1 1 0 6 1 refdes=R21 T 44050 45100 5 10 1 1 0 6 1 value=220 } N 44200 47400 44200 47700 4 N 44200 44800 44200 44500 4 N 44200 46500 44200 45700 4 C 44800 49900 1 90 1 resistor-2.sym { T 44850 49500 5 10 1 1 0 0 1 refdes=R27 T 44850 49300 5 10 1 1 0 0 1 value=680 } C 46000 49900 1 90 1 resistor-2.sym { T 46050 49500 5 10 1 1 0 0 1 refdes=R28 T 46050 49300 5 10 1 1 0 0 1 value=680 } C 44800 43200 1 90 1 resistor-2.sym { T 44850 42800 5 10 1 1 0 0 1 refdes=R29 T 44850 42600 5 10 1 1 0 0 1 value=680 } C 46000 43200 1 90 1 resistor-2.sym { T 46050 42800 5 10 1 1 0 0 1 refdes=R30 T 46050 42600 5 10 1 1 0 0 1 value=680 } N 44700 49000 44700 48100 4 N 45900 48100 45900 49000 4 N 44700 44100 44700 43200 4 N 45900 44100 45900 43200 4 N 45300 49900 45300 50800 4 N 45300 42300 45300 41400 4 C 46500 47400 1 90 1 resistor-2.sym { T 46550 47000 5 10 1 1 0 0 1 refdes=R31 T 46550 46800 5 10 1 1 0 0 1 value=220 } C 46300 45700 1 270 0 resistor-2.sym { T 46550 45300 5 10 1 1 0 0 1 refdes=R32 T 46550 45100 5 10 1 1 0 0 1 value=220 } N 46400 46500 46400 45700 4 N 46400 47700 46400 47400 4 N 46400 44500 46400 44800 4 N 45900 43700 47200 43700 4 N 44700 43900 46900 43900 4 N 45900 49900 44700 49900 4 N 44700 42300 45900 42300 4 C 42900 48300 1 180 1 spice-pnp-2.sym { T 43800 47600 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 43500 48050 5 10 1 1 180 6 1 refdes=Q9 T 43250 47850 5 10 1 1 180 6 1 value=MJE350 } C 46400 45000 1 180 0 spice-pnp-2.sym { T 45500 44300 5 8 0 0 180 0 1 device=PNP_TRANSISTOR T 45800 44800 5 10 1 1 180 0 1 refdes=Q14 T 46050 44550 5 10 1 1 180 0 1 value=MJE350 } C 44200 45000 1 180 1 spice-pnp-2.sym { T 45100 44300 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 44800 44800 5 10 1 1 180 6 1 refdes=Q13 T 44550 44550 5 10 1 1 180 6 1 value=MJE350 } C 44200 47200 1 0 0 spice-npn-2.sym { T 45100 47900 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 44800 47800 5 10 1 1 0 0 1 refdes=Q11 T 44550 47600 5 10 1 1 0 0 1 value=MJE340 } C 42900 43800 1 0 0 spice-npn-2.sym { T 43800 44500 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 43500 44400 5 10 1 1 0 0 1 refdes=Q10 T 43250 44200 5 10 1 1 0 0 1 value=MJE340 } C 46400 47200 1 0 1 spice-npn-2.sym { T 45500 47900 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 45800 47800 5 10 1 1 0 6 1 refdes=Q12 T 46050 47600 5 10 1 1 0 6 1 value=MJE340 } N 42300 50800 48300 50800 4 N 42300 41400 48300 41400 4 N 41000 46100 44200 46100 4 N 41900 51100 47100 51100 4 N 47100 51100 47100 46100 4 N 47100 46100 46400 46100 4 N 45900 48500 47200 48500 4 C 41000 46900 1 0 0 resistor-2.sym { T 41300 47300 5 10 1 1 180 6 1 refdes=Rin T 41300 46700 5 10 1 1 0 0 1 value=100 } C 53000 43800 1 0 0 spice-model-1.sym { T 53100 44400 5 10 1 1 0 0 1 refdes=A5 T 54300 44100 5 10 1 1 0 0 1 model-name=MJE340 T 53500 43900 5 10 1 1 0 0 1 file=../../lib/models/mje340.mod } C 53000 42800 1 0 0 spice-model-1.sym { T 53100 43400 5 10 1 1 0 0 1 refdes=A6 T 54300 43100 5 10 1 1 0 0 1 model-name=MJE350 T 53500 42900 5 10 1 1 0 0 1 file=../../lib/models/mje350.mod } C 48400 50800 1 90 1 resistor-2.sym { T 48500 50400 5 10 1 1 0 0 1 refdes=R33 T 48500 50100 5 10 1 1 0 0 1 value=39 } C 48400 42300 1 90 1 resistor-2.sym { T 48450 41900 5 10 1 1 0 0 1 refdes=R34 T 48450 41650 5 10 1 1 0 0 1 value=39 } C 47800 49900 1 90 1 resistor-2.sym { T 47850 49500 5 10 1 1 0 0 1 refdes=R51 T 47850 49250 5 10 1 1 0 0 1 value=15 } C 49000 49900 1 90 1 resistor-2.sym { T 49050 49500 5 10 1 1 0 0 1 refdes=R52 T 49050 49250 5 10 1 1 0 0 1 value=15 } C 47800 43200 1 90 1 resistor-2.sym { T 47850 42800 5 10 1 1 0 0 1 refdes=R53 T 47850 42550 5 10 1 1 0 0 1 value=15 } C 49000 43200 1 90 1 resistor-2.sym { T 49050 42800 5 10 1 1 0 0 1 refdes=R54 T 49050 42550 5 10 1 1 0 0 1 value=15 } N 47700 49900 48900 49900 4 N 47700 42300 48900 42300 4 N 47700 44100 47700 48100 4 N 46900 48300 46900 47900 4 N 46900 47900 49400 47900 4 N 46900 43900 46900 44300 4 N 46900 44300 49400 44300 4 C 49300 46600 1 90 1 resistor-2.sym { T 49350 46200 5 10 1 1 0 0 1 refdes=R35 T 49350 45950 5 10 1 1 0 0 1 value=220 } C 48600 47900 1 90 1 capacitor-1.sym { T 47900 47700 5 10 0 0 270 2 1 device=CAPACITOR T 48300 47600 5 10 1 1 0 6 1 refdes=C7 T 47700 47700 5 10 0 0 270 2 1 symversion=0.1 T 48300 47150 5 10 1 1 0 6 1 value=30p } C 48600 45200 1 90 1 capacitor-1.sym { T 47900 45000 5 10 0 0 270 2 1 device=CAPACITOR T 48300 44900 5 10 1 1 0 6 1 refdes=C8 T 47700 45000 5 10 0 0 270 2 1 symversion=0.1 T 48300 44450 5 10 1 1 0 6 1 value=30p } N 49400 48500 49400 47900 4 N 49400 43700 49400 44300 4 N 48400 47000 49400 47000 4 { T 48400 47000 5 10 0 0 0 0 1 netname=MOS_Drv } C 48500 46600 1 270 0 resistor-2.sym { T 48400 46200 5 10 1 1 0 6 1 refdes=RV2 T 48400 45950 5 10 1 1 0 6 1 value=200 } N 48400 45200 49200 45200 4 N 48900 48100 48900 47000 4 N 48900 45200 48900 44100 4 N 48600 47000 48600 46600 4 N 49200 46600 49200 47000 4 N 48600 45700 48600 45200 4 N 49200 45200 49200 45700 4 C 47200 49000 1 180 1 spice-pnp-2.sym { T 48100 48300 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 47800 48800 5 10 1 1 180 6 1 refdes=Q15 T 47550 48550 5 10 1 1 180 6 1 value=MJE350 } C 49400 49000 1 180 0 spice-pnp-2.sym { T 48500 48300 5 8 0 0 180 0 1 device=PNP_TRANSISTOR T 48800 48800 5 10 1 1 180 0 1 refdes=Q16 T 49050 48550 5 10 1 1 180 0 1 value=MJE350 } C 49400 43200 1 0 1 spice-npn-2.sym { T 48500 43900 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 48800 43800 5 10 1 1 0 6 1 refdes=Q18 T 49000 43600 5 10 1 1 0 6 1 value=MJE340 } C 47200 43200 1 0 0 spice-npn-2.sym { T 48100 43900 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 47800 43800 5 10 1 1 0 0 1 refdes=Q17 T 47550 43600 5 10 1 1 0 0 1 value=MJE340 } N 47400 45900 47700 45900 4 C 41800 45600 1 0 0 gnd-1.sym { T 41800 45600 5 10 0 0 0 0 1 netname=GND } T 50400 50000 9 10 1 0 0 0 6 Transient Analysis : Set signal soure : 1kHz, 10mV, -5.75 DC offset MOS_Drv quiescent = approx. 0.8V Gain = 3130.6 = 69.9 dBV At signal source amplitudes greater than 10mV the output waveform becomes distorted (Vout = 31V amplitude). T 50400 48900 9 10 1 0 0 0 4 AC Analysis : Gain = 75.6 dBV 3dB Band = DC to 3.8 KHz @ with C7 and C8 3dB Band = DC to 56.1 KHz @ without C7 and C8 N 41900 45900 42300 45900 4 T 53000 45400 9 10 1 0 0 0 3 This schematic can be simulated using NG-Spice but not GNU-Cap (last tested 2011-02-04) C 49400 46900 1 0 0 output-2.sym { T 49600 47600 5 10 0 0 0 0 1 device=none T 49500 47200 5 10 1 1 0 0 1 netname=MOS_Drv } T 50400 48200 9 10 1 0 0 0 2 Current source formed by Q9 is approx. 5mA Current source formed by Q10 is approx. 5mA T 51600 46700 9 10 1 0 0 0 4 Suggest a value for R21, R22, R31 and R32 of 22kOhm which increases the input impedance from 24.3kOhm to 46.3kOhm but only reduces the gain from 75.6dBV to 70.0dBV. C 45200 40400 1 0 1 gnd-2.sym C 47500 45600 1 0 1 gnd-2.sym C 45100 40600 1 0 0 resistor-2.sym { T 45500 40950 5 10 0 0 0 0 1 device=RESISTOR T 45200 40900 5 10 1 1 0 0 1 refdes=R2 T 45800 40900 5 10 1 1 0 0 1 value=1 } C 45900 40400 1 0 0 gnd-1.sym { T 45900 40400 5 10 0 0 0 0 1 netname=GND } gspiceui-1.1.00+dfsg/sch/audio/aem-6010-output-stage.sch0000644000000000000000000002423412517177302021172 0ustar rootrootv 20130925 2 C 40000 40000 0 0 0 title-A3.sym C 40800 46400 1 270 0 voltage-1.sym { T 40750 46050 5 10 1 1 180 0 1 refdes=Vin T 41600 46350 5 10 0 1 180 0 1 value=DC 0.0 } C 41500 49600 1 0 0 vdc-1.sym { T 42200 50150 5 10 0 1 0 0 1 refdes=V1 T 41400 50150 5 10 1 1 0 6 1 value=DC +70V } C 41500 49300 1 180 1 vdc-1.sym { T 41100 48800 5 10 0 1 180 6 1 refdes=V2 T 41400 48650 5 10 1 1 0 6 1 value=DC -70V } C 53000 44600 1 0 0 spice-model-1.sym { T 53100 45200 5 10 1 1 0 0 1 refdes=A1 T 54300 44900 5 10 1 1 0 0 1 model-name=LL4148 T 53500 44700 5 10 1 1 0 0 1 file=../../lib/models/1n4148.mod } T 49200 40900 9 14 1 0 0 0 1 Audio Power Amplifier - Series 6010 - Output Stage T 49600 40400 9 10 1 0 0 0 1 aem-6010-output-stage.sch T 50400 40100 9 10 1 0 0 0 1 1 T 51100 40100 9 10 1 0 0 0 1 1 T 53500 40400 9 10 1 0 0 0 1 2015 - 04 - 26 T 53500 40100 9 10 1 0 0 0 1 Mike Waters C 41600 48100 1 180 1 vee-1.sym { T 41600 48100 5 10 0 0 0 6 1 netname=Vee } C 42000 50800 1 0 1 vcc-1.sym { T 42000 50800 5 10 0 0 0 6 1 netname=Vcc } N 41800 49600 41800 49300 4 N 41800 49500 41300 49500 4 C 43200 46400 1 90 1 resistor-2.sym { T 43250 45900 5 10 1 1 0 0 1 refdes=R35 T 43250 45700 5 10 1 1 0 0 1 value=220 } N 42100 46400 43100 46400 4 N 42900 46400 42900 49700 4 N 42900 45500 42900 42100 4 C 53000 43700 1 0 0 spice-model-1.sym { T 53100 44300 5 10 1 1 0 0 1 refdes=A2 T 54300 44000 5 10 1 1 0 0 1 model-name=1N759 T 53500 43800 5 10 1 1 0 0 1 file=../../lib/models/1n759.mod } C 53000 42700 1 0 0 spice-model-1.sym { T 53100 43300 5 10 1 1 0 0 1 refdes=A3 T 54300 43000 5 10 1 1 0 0 1 model-name=2SK1058 T 53500 42800 5 10 1 1 0 0 1 file=../../lib/models/2sk1058.ckt } C 53000 41800 1 0 0 spice-model-1.sym { T 53100 42400 5 10 1 1 0 0 1 refdes=A4 T 54300 42100 5 10 1 1 0 0 1 model-name=2SJ162 T 53500 41900 5 10 1 1 0 0 1 file=../../lib/models/2sj162.ckt } C 42600 46400 1 270 0 resistor-2.sym { T 42550 45900 5 10 1 1 0 6 1 refdes=RV2 T 42550 45700 5 10 1 1 0 6 1 value=200 } N 42700 45500 43100 45500 4 T 63500 50200 8 10 0 0 270 0 1 device=INDUCTOR T 63700 50200 8 10 0 0 270 0 1 symversion=0.1 C 40900 45200 1 0 0 gnd-1.sym { T 40900 45200 5 10 0 0 0 0 1 netname=GND } T 40500 40500 9 10 1 0 0 0 3 This schematic can be simulated using NG-Spice but not GNU-Cap (last tested 2011-02-04) C 41200 46300 1 0 0 resistor-2.sym { T 41600 46650 5 10 0 0 0 0 1 device=RESISTOR T 41500 46700 5 10 1 1 180 6 1 refdes=Rin T 41500 46100 5 10 1 1 0 0 1 value=100 } N 41000 46400 41200 46400 4 C 47000 40900 1 180 0 vee-1.sym { T 47000 40900 5 10 0 0 180 0 1 netname=Vee } C 46600 50800 1 0 0 vcc-1.sym { T 46600 50800 5 10 0 0 0 0 1 netname=Vcc } C 44000 47900 1 90 1 diode-1.sym { T 43500 47300 5 10 1 1 0 6 1 refdes=D7 T 43750 47050 5 10 1 1 0 6 1 value=1N914 } C 46300 47900 1 90 1 diode-1.sym { T 45800 47300 5 10 1 1 0 6 1 refdes=D8 T 45950 47050 5 10 1 1 0 6 1 value=1N914 } C 44000 44800 1 90 1 diode-1.sym { T 43500 44200 5 10 1 1 0 6 1 refdes=D9 T 43750 43950 5 10 1 1 0 6 1 value=1N914 } C 46300 44800 1 90 1 diode-1.sym { T 45800 44200 5 10 1 1 0 6 1 refdes=D10 T 45950 43950 5 10 1 1 0 6 1 value=1N914 } C 44200 48300 1 270 0 capacitor-1.sym { T 44900 48100 5 10 0 0 270 0 1 device=CAPACITOR T 45100 48100 5 10 0 0 270 0 1 symversion=0.1 T 44500 48000 5 10 1 1 0 0 1 refdes=C9 T 44500 47550 5 10 1 1 0 0 1 value=120pF } C 46500 48300 1 270 0 capacitor-1.sym { T 47200 48100 5 10 0 0 270 0 1 device=CAPACITOR T 47400 48100 5 10 0 0 270 0 1 symversion=0.1 T 46800 48000 5 10 1 1 0 0 1 refdes=C10 T 46800 47550 5 10 1 1 0 0 1 value=120pF } C 44200 44800 1 270 0 capacitor-1.sym { T 44900 44600 5 10 0 0 270 0 1 device=CAPACITOR T 45100 44600 5 10 0 0 270 0 1 symversion=0.1 T 44500 44500 5 10 1 1 0 0 1 refdes=C11 T 44500 44050 5 10 1 1 0 0 1 value=18pF } C 46500 44800 1 270 0 capacitor-1.sym { T 47200 44600 5 10 0 0 270 0 1 device=CAPACITOR T 47400 44600 5 10 0 0 270 0 1 symversion=0.1 T 46800 44500 5 10 1 1 0 0 1 refdes=C12 T 46800 44050 5 10 1 1 0 0 1 value=18pF } C 43600 47900 1 270 1 zener-1.sym { T 44200 48300 5 10 0 0 90 2 1 device=ZENER_DIODE T 43200 48200 5 10 0 1 0 0 1 value=1N759 T 43500 48400 5 10 1 1 0 6 1 refdes=DZ2 T 43500 48150 5 10 1 1 0 6 1 description=12V } C 45900 47900 1 270 1 zener-1.sym { T 46500 48300 5 10 0 0 90 2 1 device=ZENER_DIODE T 45500 48200 5 10 0 1 0 0 1 value=1N759 T 45800 48400 5 10 1 1 0 6 1 refdes=DZ3 T 45800 48150 5 10 1 1 0 6 1 description=12V } C 43600 43000 1 270 1 zener-1.sym { T 44200 43400 5 10 0 0 90 2 1 device=ZENER_DIODE T 43200 43300 5 10 0 1 0 0 1 value=1N759 T 43500 43500 5 10 1 1 0 6 1 refdes=DZ4 T 43500 43250 5 10 1 1 0 6 1 description=12V } C 45900 43000 1 270 1 zener-1.sym { T 46500 43400 5 10 0 0 90 2 1 device=ZENER_DIODE T 45500 43300 5 10 0 1 0 0 1 value=1N759 T 45800 43500 5 10 1 1 0 6 1 refdes=DZ5 T 45800 43250 5 10 1 1 0 6 1 description=12V } C 44500 43900 1 90 1 resistor-2.sym { T 44550 43500 5 10 1 1 0 0 1 refdes=R44 T 44550 43250 5 10 1 1 0 0 1 value=22 } C 46800 43900 1 90 1 resistor-2.sym { T 46850 43500 5 10 1 1 0 0 1 refdes=R45 T 46850 43250 5 10 1 1 0 0 1 value=22 } N 43800 44800 45100 44800 4 N 43800 43000 44600 43000 4 N 46100 44800 47400 44800 4 N 46100 43000 46900 43000 4 N 44400 47000 44400 47400 4 N 43800 48800 44600 48800 4 N 44400 48800 44400 48300 4 N 46100 48800 46900 48800 4 N 46700 48800 46700 48300 4 N 46100 47000 47400 47000 4 N 46700 47000 46700 47400 4 C 43700 49700 1 270 0 resistor-2.sym { T 43600 49300 5 10 1 1 0 6 1 refdes=R36 T 43600 49000 5 10 1 1 0 6 1 value=680 } C 46000 49700 1 270 0 resistor-2.sym { T 45900 49300 5 10 1 1 0 6 1 refdes=R38 T 45900 49000 5 10 1 1 0 6 1 value=680 } C 43700 43000 1 270 0 resistor-2.sym { T 43650 42600 5 10 1 1 0 6 1 refdes=R37 T 43650 42350 5 10 1 1 0 6 1 value=470 } C 46000 43000 1 270 0 resistor-2.sym { T 45950 42600 5 10 1 1 0 6 1 refdes=R39 T 45950 42350 5 10 1 1 0 6 1 value=470 } C 45200 47000 1 90 1 resistor-2.sym { T 44950 46600 5 10 1 1 0 6 1 refdes=R40 T 44950 46350 5 10 1 1 0 6 1 value=0.22 } C 45200 45700 1 90 1 resistor-2.sym { T 44950 45300 5 10 1 1 0 6 1 refdes=R42 T 44950 45050 5 10 1 1 0 6 1 value=0.22 } C 47300 47000 1 270 0 resistor-2.sym { T 47250 46600 5 10 1 1 0 6 1 refdes=R41 T 47250 46350 5 10 1 1 0 6 1 value=0.22 } C 47300 45700 1 270 0 resistor-2.sym { T 47250 45300 5 10 1 1 0 6 1 refdes=R43 T 47250 45100 5 10 1 1 0 6 1 value=0.22 } N 42900 49700 46100 49700 4 N 42900 42100 46100 42100 4 N 45100 46100 45100 45700 4 N 47400 46100 47400 45700 4 N 45100 47000 43800 47000 4 N 45100 49400 45100 50800 4 N 47400 49400 47400 50800 4 N 45100 42400 45100 40900 4 N 47400 42400 47400 40900 4 N 47400 43200 47400 44800 4 N 47400 47000 47400 48600 4 N 45100 46000 47400 46000 4 { T 49800 46300 5 10 1 1 0 0 1 netname=Vout } C 48400 45800 1 90 1 resistor-2.sym { T 48150 45400 5 10 1 1 0 6 1 refdes=R46 T 48150 45200 5 10 1 1 0 6 1 value=12 } C 48500 44900 1 90 1 capacitor-1.sym { T 47800 44700 5 10 0 0 270 2 1 device=CAPACITOR T 47600 44700 5 10 0 0 270 2 1 symversion=0.1 T 48250 44600 5 10 1 1 0 6 1 refdes=C14 T 48200 44300 5 10 1 1 180 0 1 value=22nF } N 45100 48600 45100 47000 4 N 45100 44800 45100 43200 4 N 48900 45800 48900 45000 4 N 48900 44600 48900 44000 4 C 46900 48600 1 0 0 spice-nmos-2.sym { T 47500 49100 5 10 0 0 0 0 1 device=SUBCKT T 46600 49100 5 10 1 1 0 0 1 refdes=X20 T 46400 49350 5 10 1 1 0 0 1 value=2SK1058 } C 46900 43200 1 180 1 spice-pmos-2.sym { T 47500 42700 5 10 0 0 180 6 1 device=SUBCKT T 46600 42800 5 10 1 1 180 6 1 refdes=X22 T 46400 42550 5 10 1 1 180 6 1 value=2SJ162 } C 44600 48600 1 0 0 spice-nmos-2.sym { T 45200 49100 5 10 0 0 0 0 1 device=SUBCKT T 44300 49100 5 10 1 1 0 0 1 refdes=X19 T 44100 49350 5 10 1 1 0 0 1 value=2SK1058 } C 44600 43200 1 180 1 spice-pmos-2.sym { T 45200 42700 5 10 0 0 180 6 1 device=SUBCKT T 44300 42800 5 10 1 1 180 6 1 refdes=X21 T 44100 42550 5 10 1 1 180 6 1 value=2SJ162 } C 46100 50100 1 0 0 capacitor-1.sym { T 46300 50800 5 10 0 0 0 0 1 device=CAPACITOR T 46300 51000 5 10 0 0 0 0 1 symversion=0.1 T 46400 50400 5 10 1 1 0 6 1 refdes=C24 T 46700 50400 5 10 1 1 0 0 1 value=100nF } C 43800 50100 1 0 0 capacitor-1.sym { T 44000 50800 5 10 0 0 0 0 1 device=CAPACITOR T 44000 51000 5 10 0 0 0 0 1 symversion=0.1 T 44100 50400 5 10 1 1 0 6 1 refdes=C23 T 44400 50400 5 10 1 1 0 0 1 value=100nF } C 43800 41300 1 0 0 capacitor-1.sym { T 44000 42000 5 10 0 0 0 0 1 device=CAPACITOR T 44000 42200 5 10 0 0 0 0 1 symversion=0.1 T 44100 41600 5 10 1 1 0 6 1 refdes=C25 T 44400 41600 5 10 1 1 0 0 1 value=100nF } C 46100 41300 1 0 0 capacitor-1.sym { T 46300 42000 5 10 0 0 0 0 1 device=CAPACITOR T 46300 42200 5 10 0 0 0 0 1 symversion=0.1 T 46100 41600 5 10 1 1 0 0 1 refdes=C26 T 46700 41600 5 10 1 1 0 0 1 value=100nF } N 44700 50300 45100 50300 4 N 47000 50300 47400 50300 4 N 47000 41500 47400 41500 4 N 44700 41500 45100 41500 4 N 47400 45800 49500 45800 4 B 50000 44600 200 400 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 L 50200 45000 50500 45500 3 0 0 0 -1 -1 L 50500 45500 50500 44100 3 0 0 0 -1 -1 L 50500 44100 50200 44600 3 0 0 0 -1 -1 N 49900 44600 49900 45000 4 C 49000 45100 1 180 1 resistor-2.sym { T 49100 45200 5 10 1 1 0 0 1 refdes=Rspkr T 49800 45200 5 10 1 1 0 0 1 value=8 } C 49900 44500 1 0 1 inductor-1.sym { T 49700 45000 5 10 0 0 180 2 1 device=INDUCTOR T 49700 45200 5 10 0 0 180 2 1 symversion=0.1 T 49100 44350 5 10 1 1 180 8 1 refdes=Lspkr T 49700 44350 5 10 1 1 0 0 1 value=1mH } A 50100 44800 224 297 126 3 0 0 0 -1 -1 N 48300 44000 48900 44000 4 N 48900 45000 49000 45000 4 N 48900 44600 49000 44600 4 C 49500 46000 1 0 0 output-1.sym { T 49600 46300 5 10 0 0 0 0 1 device=OUTPUT } N 49500 46100 49500 45800 4 N 45100 50800 47400 50800 4 N 45100 40900 47400 40900 4 C 41300 43900 1 0 1 gnd-2.sym C 41200 44100 1 0 0 resistor-2.sym { T 41600 44450 5 10 0 0 0 0 1 device=RESISTOR T 41300 44400 5 10 1 1 0 0 1 refdes=R2 T 42000 44400 5 10 1 1 0 0 1 value=1 } C 42000 43900 1 0 0 gnd-1.sym { T 42000 43900 5 10 0 0 0 0 1 netname=GND } C 41400 49200 1 0 1 gnd-2.sym C 43900 41200 1 0 1 gnd-2.sym C 46200 41200 1 0 1 gnd-2.sym C 46200 50000 1 0 1 gnd-2.sym C 43900 50000 1 0 1 gnd-2.sym C 48700 43500 1 0 1 gnd-2.sym N 48600 43800 48600 44000 4 T 49500 50400 9 10 1 0 0 0 3 With a purely resistive load or no load this stage seems to behave very well. When some inductance is added to the load the frequency response is a little variable. T 49500 49800 9 10 1 0 0 0 1 3dB BW = DC to 2.4 MHz @ 0.5dB drop at 586 kHz gspiceui-1.1.00+dfsg/sch/audio/aem-6001-amp.sch0000644000000000000000000006564512515222570017315 0ustar rootrootv 20130925 2 C 40000 40000 0 0 0 title-A2.sym C 45800 45200 1 270 0 resistor-2.sym { T 45700 44800 5 10 1 1 0 6 1 refdes=R12 T 45700 44600 5 10 1 1 0 6 1 value=3.9K } C 43900 47000 1 180 0 resistor-2.sym { T 43100 47200 5 10 1 1 180 6 1 refdes=R3 T 43800 47200 5 10 1 1 180 0 1 value=1K } C 45000 46300 1 0 0 resistor-2.sym { T 45200 46700 5 10 1 1 180 6 1 refdes=RV1a T 45200 46100 5 10 1 1 0 0 1 value=10511 } C 41300 46900 1 270 0 voltage-1.sym { T 41250 46550 5 10 1 1 180 0 1 refdes=Vin T 42100 46850 5 10 0 1 180 0 1 value=DC 0.0 } C 40400 42100 1 0 0 spice-model-1.sym { T 40500 42700 5 10 1 1 0 0 1 refdes=A7 T 41700 42400 5 10 1 1 0 0 1 model-name=MMBTA56 T 40900 42200 5 10 1 1 0 0 1 file=../../lib/models/mmbta56.mod } C 40400 50800 1 0 0 spice-model-1.sym { T 40500 51400 5 10 1 1 0 0 1 refdes=A2 T 41700 51100 5 10 1 1 0 0 1 model-name=MJE340 T 40900 50900 5 10 1 1 0 0 1 file=../../lib/models/mje340.mod } C 40400 49900 1 0 0 spice-model-1.sym { T 40500 50500 5 10 1 1 0 0 1 refdes=A3 T 41700 50200 5 10 1 1 0 0 1 model-name=MJE350 T 40900 50000 5 10 1 1 0 0 1 file=../../lib/models/mje350.mod } C 62900 50800 1 0 1 vdc-1.sym { T 62200 51350 5 10 0 1 0 6 1 refdes=V1 T 62200 51300 5 10 1 1 0 6 1 value=DC +70V } C 62300 50450 1 180 1 vdc-1.sym { T 61900 49950 5 10 0 1 180 6 1 refdes=V2 T 61500 49900 5 10 1 1 180 6 1 value=DC -70V } C 62025 50350 1 0 0 gnd-1.sym { T 62025 50350 5 10 0 0 0 0 1 netname=GND } C 48300 51900 1 270 0 diode-1.sym { T 48800 51300 5 10 1 1 0 0 1 refdes=D1 T 48550 51050 5 10 1 1 0 0 1 value=LL4148 } C 47400 46300 1 90 1 resistor-2.sym { T 47100 45800 5 10 1 1 0 6 1 refdes=R5 T 47100 45600 5 10 1 1 0 6 1 value=330 } C 42700 46900 1 270 0 resistor-2.sym { T 42600 46400 5 10 1 1 0 6 1 refdes=R1 T 42600 46200 5 10 1 1 0 6 1 value=100K } C 42000 45700 1 0 0 gnd-1.sym { T 42000 45700 5 10 0 0 0 0 1 netname=GND } N 41500 46000 44100 46000 4 C 40400 43000 1 0 0 spice-model-1.sym { T 40500 43600 5 10 1 1 0 0 1 refdes=A6 T 41700 43300 5 10 1 1 0 0 1 model-name=MMBTA06 T 40900 43100 5 10 1 1 0 0 1 file=../../lib/models/mmbta06.mod } C 40400 49000 1 0 0 spice-model-1.sym { T 40500 49600 5 10 1 1 0 0 1 refdes=A4 T 41700 49300 5 10 1 1 0 0 1 model-name=LL4148 T 40900 49100 5 10 1 1 0 0 1 file=../../lib/models/ll4148.mod } T 57300 40900 9 14 1 0 0 0 1 AEM Audio Power Amplifier - Series 6001 T 56400 40400 9 10 1 0 0 0 1 aem-6001-amp.sch T 57100 40100 9 10 1 0 0 0 1 1 T 58000 40100 9 10 1 0 0 0 1 1 T 60300 40400 9 10 1 0 0 0 1 2015 - 04 - 20 T 60300 40100 9 10 1 0 0 0 1 Mike Waters C 62800 49250 1 180 0 vee-1.sym { T 62800 49250 5 10 0 0 0 0 1 netname=Vee } C 55600 42500 1 180 0 vee-1.sym { T 55600 42500 5 10 0 0 180 0 1 netname=Vee } C 55200 51900 1 0 0 vcc-1.sym { T 55200 51900 5 10 0 0 0 0 1 netname=Vcc } C 62400 51950 1 0 0 vcc-1.sym { T 62400 51950 5 10 0 0 0 0 1 netname=Vcc } N 62600 50800 62600 50450 4 N 62600 50650 62125 50650 4 C 41500 46700 1 0 0 capacitor-1.sym { T 41700 47400 5 10 0 0 0 0 1 device=CAPACITOR T 41800 47000 5 10 1 1 0 6 1 refdes=C1 T 41700 47600 5 10 0 0 0 0 1 symversion=0.1 T 42100 47000 5 10 1 1 0 0 1 value=470nF } N 42400 46900 43000 46900 4 C 43900 46000 1 270 1 capacitor-1.sym { T 44600 46200 5 10 0 0 90 2 1 device=CAPACITOR T 44000 46700 5 10 1 1 180 0 1 refdes=C2 T 44800 46200 5 10 0 0 90 2 1 symversion=0.1 T 44000 46200 5 10 1 1 0 6 1 value=1nF } N 43900 46900 44300 46900 4 C 46200 46300 1 0 0 resistor-2.sym { T 46400 46700 5 10 1 1 180 6 1 refdes=RV1b T 46400 46100 5 10 1 1 0 0 1 value=9489 } C 46300 46900 1 90 0 zener-1.sym { T 45700 47300 5 10 0 0 90 0 1 device=ZENER_DIODE T 45900 47550 5 10 1 1 0 6 1 refdes=DZ1 T 46700 47200 5 10 0 1 0 6 1 value=1N759 T 45500 47250 5 10 1 1 0 0 1 description=12V } N 45300 47900 46800 47900 4 C 44900 46300 1 90 1 resistor-2.sym { T 45000 45800 5 10 1 1 0 0 1 refdes=R4 T 45000 45600 5 10 1 1 0 0 1 value=330 } N 44800 45400 47300 45400 4 N 47300 46700 47300 46300 4 N 44800 46700 44800 46300 4 N 46100 46900 46100 45400 4 N 45900 46400 46200 46400 4 N 46400 43900 46600 43900 4 N 45900 43400 46100 43400 4 C 46000 43400 1 90 1 resistor-2.sym { T 45700 43000 5 10 1 1 0 6 1 refdes=R13 T 45700 42800 5 10 1 1 0 6 1 value=120 } C 46700 44800 1 90 1 resistor-2.sym { T 46800 44400 5 10 1 1 0 0 1 refdes=R14 T 46800 44200 5 10 1 1 0 0 1 value=10K } C 46700 45100 1 180 0 gnd-1.sym { T 46700 45100 5 10 0 0 0 0 1 netname=GND } N 46600 42900 46600 42500 4 N 46800 42500 44800 42500 4 C 46050 48600 1 0 0 resistor-2.sym { T 46700 49000 5 10 1 1 180 0 1 refdes=R11 T 46300 48400 5 10 1 1 0 0 1 value=680 } C 46000 48900 1 180 0 capacitor-1.sym { T 45800 48200 5 10 0 0 180 0 1 device=CAPACITOR T 45400 48800 5 10 1 1 0 6 1 refdes=C3 T 45800 48000 5 10 0 0 180 0 1 symversion=0.1 T 45400 48600 5 10 1 1 180 0 1 value=47pF } C 44700 50200 1 270 0 resistor-2.sym { T 44600 49800 5 10 1 1 0 6 1 refdes=R6 T 44600 49600 5 10 1 1 0 6 1 value=27K } C 47400 50200 1 90 1 resistor-2.sym { T 47500 49800 5 10 1 1 0 0 1 refdes=R7 T 47500 49600 5 10 1 1 0 0 1 value=27K } N 45700 51000 45900 51000 4 N 46200 50500 46400 50500 4 N 46000 48700 46050 48700 4 C 45800 50100 1 90 1 resistor-2.sym { T 45500 49700 5 10 1 1 0 6 1 refdes=R9 T 45100 49500 5 10 1 1 0 0 1 value=4.7K } C 45800 51900 1 90 1 resistor-2.sym { T 45500 51500 5 10 1 1 0 6 1 refdes=R8 T 45500 51300 5 10 1 1 0 6 1 value=180 } C 46300 50500 1 270 0 resistor-2.sym { T 46600 50100 5 10 1 1 0 0 1 refdes=R10 T 46600 49900 5 10 1 1 0 0 1 value=10K } C 46300 49300 1 0 0 gnd-1.sym { T 46300 49300 5 10 0 0 0 0 1 netname=GND } N 44300 51900 47400 51900 4 N 46400 51500 46400 51900 4 N 45900 49100 45900 47900 4 N 44800 50200 44800 51900 4 N 47300 50200 47300 51900 4 N 47300 49300 47300 48300 4 N 44800 49300 44800 48300 4 C 48300 51000 1 270 0 diode-1.sym { T 48800 50400 5 10 1 1 0 0 1 refdes=D2 T 48550 50150 5 10 1 1 0 0 1 value=LL4148 } C 48300 50100 1 270 0 diode-1.sym { T 48800 49500 5 10 1 1 0 0 1 refdes=D3 T 48550 49250 5 10 1 1 0 0 1 value=LL4148 } C 47400 51800 1 0 0 resistor-2.sym { T 47450 52050 5 10 1 1 0 0 1 refdes=R15 T 47950 52050 5 10 1 1 0 0 1 value=22 } C 48300 45400 1 270 0 diode-1.sym { T 48800 44800 5 10 1 1 0 0 1 refdes=D4 T 48550 44550 5 10 1 1 0 0 1 value=LL4148 } C 48300 44500 1 270 0 diode-1.sym { T 48800 43900 5 10 1 1 0 0 1 refdes=D5 T 48550 43650 5 10 1 1 0 0 1 value=LL4148 } C 46800 42400 1 0 0 resistor-2.sym { T 46900 42200 5 10 1 1 0 0 1 refdes=R16 T 47400 42200 5 10 1 1 0 0 1 value=22 } C 48300 43600 1 270 0 diode-1.sym { T 48800 43000 5 10 1 1 0 0 1 refdes=D6 T 48550 42750 5 10 1 1 0 0 1 value=LL4148 } C 44700 43800 1 180 1 gnd-1.sym { T 44700 43800 5 10 0 0 0 6 1 netname=GND } C 44200 50600 1 0 0 gnd-1.sym { T 44200 50600 5 10 0 0 0 0 1 netname=GND } C 48600 48500 1 90 1 resistor-2.sym { T 49000 48100 5 10 1 1 0 6 1 refdes=R17 T 49000 47850 5 10 1 1 0 6 1 value=10K } C 48600 46700 1 90 1 resistor-2.sym { T 49000 46300 5 10 1 1 0 6 1 refdes=R18 T 49000 46050 5 10 1 1 0 6 1 value=10K } N 48500 47600 48500 46700 4 N 48500 45800 48500 45400 4 N 48500 49200 48500 48500 4 N 47800 46900 48000 46900 4 N 48000 41900 48000 46900 4 N 47700 42500 59700 42500 4 N 47300 48400 48200 48400 4 N 48200 48400 48200 47200 4 N 48200 47200 50100 47200 4 C 48800 46700 1 0 0 gnd-1.sym { T 48800 46700 5 10 0 0 0 0 1 netname=GND } N 48900 47000 48500 47000 4 N 44800 42600 44800 42500 4 N 44300 51900 44300 51800 4 N 48300 51900 59700 51900 4 C 49500 51100 1 90 1 resistor-2.sym { T 49550 50700 5 10 1 1 0 0 1 refdes=R19 T 49550 50450 5 10 1 1 0 0 1 value=390 } C 49500 44200 1 90 1 resistor-2.sym { T 49550 43800 5 10 1 1 0 0 1 refdes=R20 T 49550 43550 5 10 1 1 0 0 1 value=390 } N 48900 48700 48500 48700 4 N 49400 49200 49400 50200 4 N 49400 45100 49400 44200 4 N 48900 45600 48500 45600 4 N 49400 43300 49400 42500 4 N 49400 46000 49400 47000 4 N 49400 48300 49400 47400 4 N 49400 51100 49400 51900 4 C 50800 48300 1 90 1 resistor-2.sym { T 50850 47900 5 10 1 1 0 0 1 refdes=R23 T 50850 47650 5 10 1 1 0 0 1 value=150 } C 51800 48300 1 270 0 resistor-2.sym { T 51750 47900 5 10 1 1 0 6 1 refdes=R24 T 51750 47650 5 10 1 1 0 6 1 value=150 } C 50800 47000 1 90 1 resistor-2.sym { T 50850 46600 5 10 1 1 0 0 1 refdes=R25 T 50850 46350 5 10 1 1 0 0 1 value=150 } C 52000 47000 1 90 1 resistor-2.sym { T 51750 46600 5 10 1 1 0 6 1 refdes=R26 T 51750 46350 5 10 1 1 0 6 1 value=150 } N 50700 47400 51900 47400 4 N 50700 47000 51900 47000 4 N 50700 47400 50400 47000 4 N 50400 47000 49400 47000 4 N 50700 47000 50400 47400 4 N 50400 47400 49400 47400 4 C 50000 48500 1 270 0 resistor-2.sym { T 49950 48100 5 10 1 1 0 6 1 refdes=R22 T 49950 47850 5 10 1 1 0 6 1 value=220 } C 50000 46800 1 270 0 resistor-2.sym { T 49950 46400 5 10 1 1 0 6 1 refdes=R21 T 49950 46150 5 10 1 1 0 6 1 value=220 } N 50100 48500 50100 48800 4 N 50100 45900 50100 45600 4 N 50100 47600 50100 46800 4 C 50800 50600 1 90 1 resistor-2.sym { T 50850 50200 5 10 1 1 0 0 1 refdes=R27 T 50850 49950 5 10 1 1 0 0 1 value=680 } C 51800 50600 1 270 0 resistor-2.sym { T 51750 50200 5 10 1 1 0 6 1 refdes=R28 T 51750 49950 5 10 1 1 0 6 1 value=680 } C 50800 44700 1 90 1 resistor-2.sym { T 50850 44300 5 10 1 1 0 0 1 refdes=R29 T 50850 44050 5 10 1 1 0 0 1 value=680 } C 51800 44700 1 270 0 resistor-2.sym { T 51750 44300 5 10 1 1 0 6 1 refdes=R30 T 51750 44050 5 10 1 1 0 6 1 value=680 } N 50700 49700 50700 49200 4 N 51900 49200 51900 49700 4 N 50700 45200 50700 44700 4 N 51900 45200 51900 44700 4 C 53300 42000 1 180 1 resistor-2.sym { T 53300 42050 5 10 1 1 0 0 1 refdes=R48 T 53900 42050 5 10 1 1 0 0 1 value=15K } C 52800 40900 1 270 1 resistor-2.sym { T 52400 41400 5 10 1 1 0 0 1 refdes=R49 T 52500 41200 5 10 1 1 0 0 1 value=1K } C 54200 41600 1 180 0 capacitor-1.sym { T 54000 40900 5 10 0 0 180 0 1 device=CAPACITOR T 53600 41200 5 10 1 1 0 6 1 refdes=C6 T 54000 40700 5 10 0 0 180 0 1 symversion=0.1 T 53900 41200 5 10 1 1 0 0 1 value=15pF } N 51300 50600 51300 51900 4 N 51300 43800 51300 42500 4 C 52800 40600 1 0 0 gnd-1.sym { T 52800 40600 5 10 0 0 0 0 1 netname=GND } N 48000 41900 53300 41900 4 N 54200 41900 60100 41900 4 C 52400 48500 1 270 0 resistor-2.sym { T 52650 48100 5 10 1 1 0 0 1 refdes=R31 T 52650 47850 5 10 1 1 0 0 1 value=220 } C 52600 46800 1 90 1 resistor-2.sym { T 52700 46400 5 10 1 1 0 0 1 refdes=R32 T 52700 46200 5 10 1 1 0 0 1 value=220 } N 52500 47600 52500 46800 4 N 52500 48800 52500 48500 4 N 52500 45600 52500 45900 4 N 52500 47200 53100 47200 4 N 52700 48800 52700 52400 4 N 52700 52400 43800 52400 4 N 43800 52400 43800 49100 4 N 43800 49100 44800 49100 4 C 54000 51900 1 90 1 resistor-2.sym { T 54100 51500 5 10 1 1 0 0 1 refdes=R33 T 54100 51200 5 10 1 1 0 0 1 value=39 } C 54000 43400 1 90 1 resistor-2.sym { T 54050 43000 5 10 1 1 0 0 1 refdes=R34 T 54050 42750 5 10 1 1 0 0 1 value=39 } C 53400 51000 1 90 1 resistor-2.sym { T 53450 50600 5 10 1 1 0 0 1 refdes=R51 T 53450 50350 5 10 1 1 0 0 1 value=15 } C 54400 51000 1 270 0 resistor-2.sym { T 54350 50600 5 10 1 1 0 6 1 refdes=R52 T 54350 50350 5 10 1 1 0 6 1 value=15 } C 53400 44300 1 90 1 resistor-2.sym { T 53450 43900 5 10 1 1 0 0 1 refdes=R53 T 53450 43650 5 10 1 1 0 0 1 value=15 } C 54400 44300 1 270 0 resistor-2.sym { T 54350 43900 5 10 1 1 0 6 1 refdes=R54 T 54350 43650 5 10 1 1 0 6 1 value=15 } N 53300 51000 54500 51000 4 N 53300 43400 54500 43400 4 N 53300 45200 53300 49200 4 N 51900 49600 52800 49600 4 N 50700 49400 52900 49400 4 N 52900 49400 52900 49000 4 N 52900 49000 55000 49000 4 N 52800 44800 51900 44800 4 N 50700 45000 52900 45000 4 N 52900 45000 52900 45400 4 N 52900 45400 55000 45400 4 C 54800 47700 1 90 1 resistor-2.sym { T 55200 47300 5 10 1 1 0 6 1 refdes=R35 T 55200 47100 5 10 1 1 0 6 1 value=220 } N 54200 41900 54200 41400 4 C 54300 49000 1 90 1 capacitor-1.sym { T 53600 48800 5 10 0 0 270 2 1 device=CAPACITOR T 53800 48800 5 10 1 1 180 6 1 refdes=C7 T 53400 48800 5 10 0 0 270 2 1 symversion=0.1 T 53600 48300 5 10 1 1 0 0 1 value=30pF } C 54300 46300 1 90 1 capacitor-1.sym { T 53600 46100 5 10 0 0 270 2 1 device=CAPACITOR T 53800 46100 5 10 1 1 180 6 1 refdes=C8 T 53400 46100 5 10 0 0 270 2 1 symversion=0.1 T 53600 45600 5 10 1 1 0 0 1 value=30pF } N 55000 49600 55000 49000 4 N 55000 44800 55000 45400 4 N 54100 48100 55200 48100 4 { T 55500 47500 5 10 1 1 0 0 1 netname=MOS_Drv } C 56300 49200 1 90 1 diode-1.sym { T 55800 48600 5 10 1 1 0 6 1 refdes=D7 T 56050 48350 5 10 1 1 0 6 1 value=LL4148 } C 58600 49200 1 90 1 diode-1.sym { T 58100 48600 5 10 1 1 0 6 1 refdes=D8 T 58250 48350 5 10 1 1 0 6 1 value=LL4148 } C 56300 46100 1 90 1 diode-1.sym { T 55800 45500 5 10 1 1 0 6 1 refdes=D9 T 56050 45250 5 10 1 1 0 6 1 value=LL4148 } C 58600 46100 1 90 1 diode-1.sym { T 58100 45500 5 10 1 1 0 6 1 refdes=D10 T 58250 45250 5 10 1 1 0 6 1 value=LL4148 } C 56500 49600 1 270 0 capacitor-1.sym { T 57200 49400 5 10 0 0 270 0 1 device=CAPACITOR T 56800 49300 5 10 1 1 0 0 1 refdes=C9 T 57400 49400 5 10 0 0 270 0 1 symversion=0.1 T 57300 49000 5 10 1 1 180 0 1 value=120pF } C 58800 49600 1 270 0 capacitor-1.sym { T 59500 49400 5 10 0 0 270 0 1 device=CAPACITOR T 59100 49300 5 10 1 1 0 0 1 refdes=C10 T 59700 49400 5 10 0 0 270 0 1 symversion=0.1 T 59600 49000 5 10 1 1 180 0 1 value=120pF } C 56500 46100 1 270 0 capacitor-1.sym { T 57200 45900 5 10 0 0 270 0 1 device=CAPACITOR T 56800 45800 5 10 1 1 0 0 1 refdes=C11 T 57400 45900 5 10 0 0 270 0 1 symversion=0.1 T 56800 45350 5 10 1 1 0 0 1 value=18pF } C 58800 46100 1 270 0 capacitor-1.sym { T 59500 45900 5 10 0 0 270 0 1 device=CAPACITOR T 59100 45800 5 10 1 1 0 0 1 refdes=C12 T 59700 45900 5 10 0 0 270 0 1 symversion=0.1 T 59100 45350 5 10 1 1 0 0 1 value=18pF } C 55900 49200 1 270 1 zener-1.sym { T 56500 49600 5 10 0 0 90 2 1 device=ZENER_DIODE T 55800 49700 5 10 1 1 0 6 1 refdes=DZ2 T 55500 49500 5 10 0 1 0 0 1 value=1N759 T 55800 49450 5 10 1 1 0 6 1 description=12V } C 58200 49200 1 270 1 zener-1.sym { T 58800 49600 5 10 0 0 90 2 1 device=ZENER_DIODE T 58100 49700 5 10 1 1 0 6 1 refdes=DZ3 T 57800 49500 5 10 0 1 0 0 1 value=1N759 T 58100 49450 5 10 1 1 0 6 1 description=12V } C 55900 44300 1 270 1 zener-1.sym { T 56500 44700 5 10 0 0 90 2 1 device=ZENER_DIODE T 55800 44800 5 10 1 1 0 6 1 refdes=DZ4 T 55500 44600 5 10 0 1 0 0 1 value=1N759 T 55800 44550 5 10 1 1 0 6 1 description=12V } C 58200 44300 1 270 1 zener-1.sym { T 58800 44700 5 10 0 0 90 2 1 device=ZENER_DIODE T 58100 44800 5 10 1 1 0 6 1 refdes=DZ5 T 57800 44600 5 10 0 1 0 0 1 value=1N759 T 58100 44550 5 10 1 1 0 6 1 description=12V } C 56800 45200 1 90 1 resistor-2.sym { T 56850 44800 5 10 1 1 0 0 1 refdes=R44 T 56850 44550 5 10 1 1 0 0 1 value=22 } C 59100 45200 1 90 1 resistor-2.sym { T 59150 44800 5 10 1 1 0 0 1 refdes=R45 T 59150 44550 5 10 1 1 0 0 1 value=22 } N 56100 46100 57400 46100 4 N 56100 44300 56900 44300 4 N 58400 46100 59700 46100 4 N 58400 44300 59200 44300 4 N 56700 48300 56700 48700 4 N 56100 50100 56900 50100 4 N 56700 50100 56700 49600 4 N 58400 50100 59200 50100 4 N 59000 50100 59000 49600 4 N 58400 48300 59700 48300 4 N 59000 48300 59000 48700 4 C 56000 51000 1 270 0 resistor-2.sym { T 55900 50600 5 10 1 1 0 6 1 refdes=R36 T 55900 50300 5 10 1 1 0 6 1 value=680 } C 58300 51000 1 270 0 resistor-2.sym { T 58200 50600 5 10 1 1 0 6 1 refdes=R38 T 58200 50300 5 10 1 1 0 6 1 value=680 } C 56000 44300 1 270 0 resistor-2.sym { T 55950 43900 5 10 1 1 0 6 1 refdes=R37 T 55950 43650 5 10 1 1 0 6 1 value=470 } C 58300 44300 1 270 0 resistor-2.sym { T 58250 43900 5 10 1 1 0 6 1 refdes=R39 T 58250 43650 5 10 1 1 0 6 1 value=470 } C 57500 48300 1 90 1 resistor-2.sym { T 57250 47900 5 10 1 1 0 6 1 refdes=R40 T 57250 47650 5 10 1 1 0 6 1 value=0.22 } C 57500 47000 1 90 1 resistor-2.sym { T 57250 46600 5 10 1 1 0 6 1 refdes=R42 T 57250 46350 5 10 1 1 0 6 1 value=0.22 } C 59600 48300 1 270 0 resistor-2.sym { T 59550 47900 5 10 1 1 0 6 1 refdes=R41 T 59550 47650 5 10 1 1 0 6 1 value=0.22 } C 59600 47000 1 270 0 resistor-2.sym { T 59550 46600 5 10 1 1 0 6 1 refdes=R43 T 59550 46350 5 10 1 1 0 6 1 value=0.22 } N 55200 47800 55200 51000 4 N 55200 51000 58400 51000 4 N 55200 46300 55200 43400 4 N 55200 43400 58400 43400 4 N 57400 47400 57400 47000 4 N 59700 47400 59700 47000 4 N 57400 48300 56100 48300 4 N 57400 50700 57400 51900 4 N 59700 50700 59700 51900 4 N 57400 43700 57400 42500 4 N 59700 43700 59700 42500 4 N 59700 44500 59700 46100 4 N 59700 48300 59700 49900 4 N 57400 47300 59700 47300 4 { T 61900 47300 5 10 1 1 0 0 1 netname=Vout } N 59700 47100 61600 47100 4 { T 59700 47100 5 10 0 0 0 0 1 netname=Vout } C 60900 47100 1 90 1 resistor-2.sym { T 60600 46700 5 10 1 1 0 6 1 refdes=R46 T 60600 46500 5 10 1 1 0 6 1 value=12 } C 61000 46200 1 90 1 capacitor-1.sym { T 60300 46000 5 10 0 0 270 2 1 device=CAPACITOR T 60700 45900 5 10 1 1 0 6 1 refdes=C14 T 60100 46000 5 10 0 0 270 2 1 symversion=0.1 T 60700 45500 5 10 1 1 0 6 1 value=22nF } N 60100 47100 60100 41900 4 N 57400 49900 57400 48300 4 N 57400 46100 57400 44500 4 N 61300 47100 61300 46300 4 N 61300 45900 61300 45300 4 C 40400 43900 1 0 0 spice-model-1.sym { T 40500 44500 5 10 1 1 0 0 1 refdes=A5 T 41700 44200 5 10 1 1 0 0 1 model-name=1N759 T 40900 44000 5 10 1 1 0 0 1 file=../../lib/models/1n759.mod } C 40400 51700 1 0 0 spice-model-1.sym { T 40500 52300 5 10 1 1 0 0 1 refdes=A1 T 41700 52000 5 10 1 1 0 0 1 model-name=SST404 T 40900 51800 5 10 1 1 0 0 1 file=../../lib/models/sst404.mod } C 40400 41200 1 0 0 spice-model-1.sym { T 40500 41800 5 10 1 1 0 0 1 refdes=A8 T 41700 41500 5 10 1 1 0 0 1 model-name=2SK1058 T 40900 41300 5 10 1 1 0 0 1 file=../../lib/models/2sk1058.ckt } C 40400 40300 1 0 0 spice-model-1.sym { T 40500 40900 5 10 1 1 0 0 1 refdes=A9 T 41700 40600 5 10 1 1 0 0 1 model-name=2SJ162 T 40900 40400 5 10 1 1 0 0 1 file=../../lib/models/2sj162.ckt } C 54200 47700 1 270 0 resistor-2.sym { T 53800 47300 5 10 1 1 0 0 1 refdes=RV2 T 53800 47100 5 10 1 1 0 0 1 value=200 } N 54100 46300 55200 46300 4 N 51900 50600 50700 50600 4 N 50700 43800 51900 43800 4 T 63500 50200 8 10 0 0 270 0 1 device=INDUCTOR T 63700 50200 8 10 0 0 270 0 1 symversion=0.1 N 54500 49200 54500 48100 4 N 54500 46300 54500 45200 4 N 54300 48100 54300 47700 4 N 54700 47700 54700 48100 4 N 54300 46800 54300 46300 4 N 54700 46300 54700 46800 4 C 44300 46700 1 0 0 spice-njfet-1.sym { T 45100 47100 5 10 0 0 0 0 1 device=FET_TRANSISTOR T 44900 47200 5 10 1 1 0 0 1 refdes=J1 T 44700 46950 5 10 1 1 0 0 1 value=SST404 } C 47800 46700 1 0 1 spice-njfet-1.sym { T 47000 47100 5 10 0 0 0 6 1 device=FET_TRANSISTOR T 47200 47200 5 10 1 1 0 6 1 refdes=J2 T 47400 46950 5 10 1 1 0 6 1 value=SST404 } C 45300 47400 1 0 1 spice-npn-2.sym { T 44400 48100 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 44700 48000 5 10 1 1 0 6 1 refdes=Q3 T 44950 47800 5 10 1 1 0 6 1 value=MMBTA06 } C 46800 47400 1 0 0 spice-npn-2.sym { T 47700 48100 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 47400 48000 5 10 1 1 0 0 1 refdes=Q4 T 47150 47800 5 10 1 1 0 0 1 value=MMBTA06 } C 46400 43400 1 0 1 spice-npn-2.sym { T 45500 44100 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 45800 44200 5 10 1 1 180 0 1 refdes=Q7 T 46050 43800 5 10 1 1 0 6 1 value=MMBTA06 } C 46100 42900 1 0 0 spice-npn-2.sym { T 47000 43600 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 47000 43700 5 10 1 1 180 0 1 refdes=Q8 T 46450 43300 5 10 1 1 0 0 1 value=MMBTA06 } N 46600 43800 46600 43900 4 C 48900 49200 1 180 1 spice-pnp-2.sym { T 49800 48500 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 49500 48800 5 10 1 1 0 0 1 refdes=Q9 T 49250 48600 5 10 1 1 0 0 1 value=MJE350 } C 46200 51000 1 180 0 spice-pnp-2.sym { T 45300 50300 5 8 0 0 180 0 1 device=PNP_TRANSISTOR T 45600 50650 5 10 1 1 0 6 1 refdes=Q5 T 45850 50400 5 10 1 1 0 6 1 value=MMBTA56 } C 45900 51500 1 180 1 spice-pnp-2.sym { T 46800 50800 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 46500 51150 5 10 1 1 0 0 1 refdes=Q6 T 46250 50900 5 10 1 1 0 0 1 value=MMBTA56 } N 46400 50600 46400 50500 4 C 52400 46100 1 180 0 spice-pnp-2.sym { T 51500 45400 5 8 0 0 180 0 1 device=PNP_TRANSISTOR T 51800 45900 5 10 1 1 180 0 1 refdes=Q14 T 52050 45650 5 10 1 1 180 0 1 value=MJE350 } C 50200 46100 1 180 1 spice-pnp-2.sym { T 51100 45400 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 50800 45900 5 10 1 1 180 6 1 refdes=Q13 T 50550 45650 5 10 1 1 180 6 1 value=MJE350 } C 52800 50100 1 180 1 spice-pnp-2.sym { T 53700 49400 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 53400 49900 5 10 1 1 180 6 1 refdes=Q15 T 53150 49650 5 10 1 1 180 6 1 value=MJE350 } C 55000 50100 1 180 0 spice-pnp-2.sym { T 54100 49400 5 8 0 0 180 0 1 device=PNP_TRANSISTOR T 54400 49900 5 10 1 1 180 0 1 refdes=Q16 T 54650 49650 5 10 1 1 180 0 1 value=MJE350 } C 55000 44300 1 0 1 spice-npn-2.sym { T 54100 45000 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 54400 44900 5 10 1 1 0 6 1 refdes=Q18 T 54650 44700 5 10 1 1 0 6 1 value=MJE340 } C 52800 44300 1 0 0 spice-npn-2.sym { T 53700 45000 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 53400 44900 5 10 1 1 0 0 1 refdes=Q17 T 53150 44700 5 10 1 1 0 0 1 value=MJE340 } C 50200 48300 1 0 0 spice-npn-2.sym { T 51100 49000 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 50800 48900 5 10 1 1 0 0 1 refdes=Q11 T 50550 48700 5 10 1 1 0 0 1 value=MJE340 } C 48900 45100 1 0 0 spice-npn-2.sym { T 49800 45800 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 49500 45700 5 10 1 1 0 0 1 refdes=Q10 T 49250 45500 5 10 1 1 0 0 1 value=MJE340 } C 52400 48300 1 0 1 spice-npn-2.sym { T 51500 49000 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 51800 48900 5 10 1 1 0 6 1 refdes=Q12 T 52050 48700 5 10 1 1 0 6 1 value=MJE340 } N 44800 46400 45000 46400 4 N 47100 46400 47300 46400 4 N 46950 48700 47300 48700 4 N 45900 45200 45900 45400 4 N 46100 47900 46100 47800 4 N 53500 46700 53300 46700 4 N 53100 47200 53100 48800 4 N 53100 48800 52700 48800 4 N 53300 41400 53300 41900 4 B 62400 45900 200 400 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 L 62600 46300 62900 46800 3 0 0 0 -1 -1 L 62900 46800 62900 45400 3 0 0 0 -1 -1 L 62900 45400 62600 45900 3 0 0 0 -1 -1 N 62300 45900 62300 46300 4 C 61400 46400 1 180 1 resistor-2.sym { T 61500 46500 5 10 1 1 0 0 1 refdes=Rspkr T 62200 46500 5 10 1 1 0 0 1 value=8 } C 62300 45800 1 0 1 inductor-1.sym { T 61500 45650 5 10 1 1 180 8 1 refdes=Lspkr T 62100 45650 5 10 1 1 0 0 1 value=1mH T 62100 46300 5 10 0 0 180 2 1 device=INDUCTOR T 62100 46500 5 10 0 0 180 2 1 symversion=0.1 } A 62500 46100 224 297 126 3 0 0 0 -1 -1 T 57500 52300 9 10 1 0 0 0 20 NG-Spice DC Analysis : Vin range : -4.2 to 3.0 mV Corresponding V( MOS_Drv ) : -65.2 to 66.9 V Open loop max gain : 32800 = 90.3 dBV Note : The DC gain characteristic is non-linear, The gain drops of as the input level increases. AC Analysis : Open loop max gain : 63096 = 96 dBV Open loop -3dB points : 3.4 Hz and 3.3 KHz Closed loop max gain : 16 = 24.1 dBV Closed loop -3dB points : 3.4 Hz and 155 KHz Transient Analysis : Sweep start, stop, step : 0, 2msec, 5usec Signal source : Vin, 2188 Hz, 100 uVp-p amplitude Open loop gain : 33440 = 90.5 dBV Note : Distortion is easily detectable owing to the non-linear gain characteristic. T 40500 54000 9 10 1 0 0 0 10 Differential input stage : The input stage is significantly loaded down by the second stage. AC analysis : Gain (unloaded) = 25.5 = 28.1 dB AC analysis : Gain ( loaded) = 4.7 = 13.4 dB Transient analysis : Gain (unloaded) = 25.5 @ Vin = 1 KHz & 100 mVp-p Transient analysis : Gain ( loaded) = 5.0 @ Vin = 1 KHz & 100 mVp-p Current source formed by Q5 and Q6 delivers 3.95mA Current source formed by Q7 and Q8 delivers 5.85mA C 59200 49900 1 0 0 spice-nmos-2.sym { T 59800 50400 5 10 0 0 0 0 1 device=SUBCKT T 58900 50400 5 10 1 1 0 0 1 refdes=X20 T 58700 50650 5 10 1 1 0 0 1 value=2SK1058 } C 59200 44500 1 180 1 spice-pmos-2.sym { T 59800 44000 5 10 0 0 180 6 1 device=SUBCKT T 58900 44100 5 10 1 1 180 6 1 refdes=X22 T 58700 43850 5 10 1 1 180 6 1 value=2SJ162 } C 56900 49900 1 0 0 spice-nmos-2.sym { T 57500 50400 5 10 0 0 0 0 1 device=SUBCKT T 56600 50400 5 10 1 1 0 0 1 refdes=X19 T 56400 50650 5 10 1 1 0 0 1 value=2SK1058 } C 56900 44500 1 180 1 spice-pmos-2.sym { T 57500 44000 5 10 0 0 180 6 1 device=SUBCKT T 56600 44100 5 10 1 1 180 6 1 refdes=X21 T 56400 43850 5 10 1 1 180 6 1 value=2SJ162 } T 49100 53800 9 10 1 0 0 0 11 Problems with this design : 1. Some of the components can no longer be obtained ie. ECG461, 2SK176, 2SJ56 (can't even get SPICE models for them). 2. The input stage is significantly loaded down by the following stage (more than was intended I'm guessing). 3. The component count is high. 4. The open loop gain characteristic is non-linear (corrected by the feedback however). 5. When constructed the actual modules displayed a 2Vp-p oscillation at the output with no input. C 44500 51800 1 90 1 capacitor-4.sym { T 43400 51600 5 10 0 0 270 2 1 device=POLARIZED_CAPACITOR T 44400 51600 5 10 1 1 0 0 1 refdes=C4 T 43800 51600 5 10 0 0 270 2 1 symversion=0.1 T 44100 52000 5 10 1 1 0 0 1 value=220uF } C 45000 43500 1 90 1 capacitor-4.sym { T 43900 43300 5 10 0 0 270 2 1 device=POLARIZED_CAPACITOR T 44900 42800 5 10 1 1 180 6 1 refdes=C5 T 44300 43300 5 10 0 0 270 2 1 symversion=0.1 T 44600 42400 5 10 1 1 180 6 1 value=220uF } T 46300 40400 9 10 1 0 0 0 3 This schematic can be simulated using NG-Spice but not GNU-Cap (last tested 2011-02-04) N 61300 46300 61400 46300 4 N 61300 45900 61400 45900 4 T 40500 53200 9 10 1 0 0 0 3 The original AEM 6000 was designed by David Tilbrook. The design was later modified and updated by Suzy Jackson and I've designated it here the AEM 6001. N 44800 48700 45100 48700 4 C 55300 47700 1 0 0 output-1.sym { T 55400 48000 5 10 0 0 0 0 1 device=OUTPUT } C 61600 47000 1 0 0 output-1.sym { T 61700 47300 5 10 0 0 0 0 1 device=OUTPUT } N 62600 52000 62600 51950 4 C 58400 51300 1 0 0 capacitor-1.sym { T 58600 52000 5 10 0 0 0 0 1 device=CAPACITOR T 58700 51600 5 10 1 1 0 6 1 refdes=C24 T 58600 52200 5 10 0 0 0 0 1 symversion=0.1 T 59000 51600 5 10 1 1 0 0 1 value=100nF } C 56100 51300 1 0 0 capacitor-1.sym { T 56300 52000 5 10 0 0 0 0 1 device=CAPACITOR T 56400 51600 5 10 1 1 0 6 1 refdes=C23 T 56300 52200 5 10 0 0 0 0 1 symversion=0.1 T 56700 51600 5 10 1 1 0 0 1 value=100nF } C 56100 42800 1 0 0 capacitor-1.sym { T 56300 43500 5 10 0 0 0 0 1 device=CAPACITOR T 56400 43100 5 10 1 1 0 6 1 refdes=C25 T 56300 43700 5 10 0 0 0 0 1 symversion=0.1 T 56700 43100 5 10 1 1 0 0 1 value=100nF } C 58400 42800 1 0 0 capacitor-1.sym { T 58600 43500 5 10 0 0 0 0 1 device=CAPACITOR T 58400 43100 5 10 1 1 0 0 1 refdes=C26 T 58600 43700 5 10 0 0 0 0 1 symversion=0.1 T 59000 43100 5 10 1 1 0 0 1 value=100nF } N 57000 51500 57400 51500 4 N 59300 51500 59700 51500 4 N 59300 43000 59700 43000 4 N 57000 43000 57400 43000 4 N 52900 41800 52900 41900 4 N 55300 47800 55200 47800 4 N 48500 42700 48500 42500 4 N 50100 48800 50200 48800 4 N 52400 48800 52500 48800 4 N 52500 45600 52400 45600 4 N 50100 45600 50200 45600 4 N 42100 46000 42800 46000 4 N 45700 49100 45900 49100 4 N 45700 49200 45700 49100 4 C 51600 41600 1 0 0 gnd-1.sym { T 51600 41600 5 10 0 0 0 0 1 netname=GND } C 61800 43500 1 0 0 gnd-2.sym C 53400 46400 1 0 0 gnd-2.sym C 56200 51200 1 0 1 gnd-2.sym C 60700 44800 1 0 0 gnd-2.sym C 56200 42700 1 0 1 gnd-2.sym C 58500 42700 1 0 1 gnd-2.sym C 61900 43900 1 180 0 resistor-2.sym { T 61400 44000 5 10 1 1 0 6 1 refdes=R2 T 61600 44000 5 10 1 1 0 0 1 value=1 } C 60900 43500 1 0 0 gnd-1.sym { T 60900 43500 5 10 0 0 0 0 1 netname=GND } N 60800 45100 60800 45300 4 N 61300 45300 60800 45300 4 C 58500 51200 1 0 1 gnd-2.sym T 52400 53000 9 10 1 0 0 0 2 Pole Positions in transfer function : 3.4Hz, 3.5kHz, 17.7kHz, 73kHz and 167kHz gspiceui-1.1.00+dfsg/sch/audio/tda2005m.sch0000644000000000000000000001326712124473163016643 0ustar rootrootv 20060123 1 C 6000 6400 1 90 0 tda2005m.sym { T 2250 9950 5 10 1 1 180 6 1 refdes=U1 T 6000 6400 5 10 1 1 0 0 1 description=TDA2005M } N 4300 6400 4300 6300 4 N 4900 6400 4900 5800 4 N 5500 6400 5500 3950 4 C 7100 2050 1 0 0 speaker-1.sym { T 7700 4050 5 10 1 1 0 0 1 refdes=SPK1 T 7100 2050 5 10 0 1 0 0 1 description=speaker } N 7100 2750 5100 2750 4 C 2100 6300 1 180 0 capacitor-2.sym { T 1750 6500 5 10 1 1 180 0 1 refdes=C1 T 1900 5400 5 10 0 1 180 0 1 symversion=0.1 T 2100 6300 5 10 1 1 0 0 1 value=2.2u T 2100 6300 5 10 0 1 0 0 1 description=capacitor T 2100 6300 5 10 0 1 0 0 1 footprint=RADIAL_CAN 200 } C 2100 5000 1 180 0 capacitor-2.sym { T 1500 5100 5 10 1 1 0 0 1 refdes=C2 T 1900 4100 5 10 0 1 180 0 1 symversion=0.1 T 2100 5000 5 10 1 1 0 0 1 value=2.2u T 2100 5000 5 10 0 1 0 0 1 description=capacitor T 2100 5000 5 10 0 1 0 0 1 footprint=RADIAL_CAN 200 } C 1500 2400 1 270 0 capacitor-2.sym { T 1400 2100 5 10 1 1 0 0 1 refdes=C4 T 2400 2200 5 10 0 1 270 0 1 symversion=0.1 T 1500 2400 5 10 1 1 0 0 1 value=10u T 1500 2400 5 10 0 1 0 0 1 description=capacitor T 1500 2400 5 10 0 1 0 0 1 footprint=RADIAL_CAN 200 } C 6700 5200 1 270 0 capacitor-2.sym { T 6600 4900 5 10 1 1 0 0 1 refdes=C5 T 7600 5000 5 10 0 1 270 0 1 symversion=0.1 T 6700 5200 5 10 1 1 0 0 1 value=100u T 6700 5200 5 10 0 1 0 0 1 description=capacitor T 6700 5200 5 10 0 1 0 0 1 footprint=RADIAL_CAN 200 } C 2900 5100 1 270 0 capacitor-2.sym { T 2800 4800 5 10 1 1 0 0 1 refdes=C6 T 3800 4900 5 10 0 1 270 0 1 symversion=0.1 T 2900 5100 5 10 1 1 0 0 1 value=220u T 2900 5100 5 10 0 1 0 0 1 description=capacitor T 2900 5100 5 10 0 1 0 0 1 footprint=RADIAL_CAN 200 } C 5900 5200 1 270 0 capacitor-2.sym { T 5800 4900 5 10 1 1 0 0 1 refdes=C7 T 6800 5200 5 10 0 1 270 0 1 symversion=0.1 T 5900 5200 5 10 1 1 0 0 1 value=100u T 5900 5200 5 10 0 1 0 0 1 description=capacitor T 5900 5200 5 10 0 1 0 0 1 footprint=RADIAL_CAN 200 } C 3900 5100 1 270 0 capacitor-2.sym { T 3800 4800 5 10 1 1 0 0 1 refdes=C8 T 4800 4900 5 10 0 1 270 0 1 symversion=0.1 T 3900 5100 5 10 1 1 0 0 1 value=220u T 3900 5100 5 10 0 1 0 0 1 description=capacitor T 3900 5100 5 10 0 1 0 0 1 footprint=RADIAL_CAN 200 } C 7500 5200 1 270 1 capacitor-1.sym { T 7750 5950 5 10 1 1 180 6 1 refdes=C3 T 8400 5400 5 10 0 1 90 2 1 symversion=0.1 T 7500 5200 5 10 1 1 0 0 1 value=0.1u T 7500 5200 5 10 0 1 0 0 1 description=capacitor T 7500 5200 5 10 0 1 0 0 1 footprint=RADIAL_CAN 200 } C 6700 1700 1 270 1 capacitor-1.sym { T 6600 2450 5 10 1 1 180 6 1 refdes=C9 T 7600 1900 5 10 0 1 90 2 1 symversion=0.1 T 6700 1700 5 10 1 1 0 0 1 value=0.1u T 6700 1700 5 10 0 1 0 0 1 description=capacitor T 6700 1700 5 10 0 1 0 0 1 footprint=RADIAL_CAN 200 } C 6300 1700 1 90 0 capacitor-1.sym { T 6050 2450 5 10 1 1 180 0 1 refdes=C10 T 5400 1900 5 10 0 1 90 0 1 symversion=0.1 T 7100 1100 5 10 1 1 0 0 1 value=0.1u T 4550 1750 5 10 0 1 0 0 1 description=capacitor T 4000 2050 5 10 0 1 0 0 1 footprint=RADIAL_CAN 200 } C 700 5600 1 0 0 BNC-1.sym { T 550 6400 5 10 1 1 0 0 1 refdes=CONN1 T 700 5600 5 10 0 1 0 0 1 description=connector } C 700 5300 1 0 0 gnd-1.sym C 7900 6400 1 0 1 vcc-1.sym C 1800 3700 1 90 1 resistor-2.sym { T 1350 3450 5 10 1 1 180 6 1 refdes=R1 T 1800 3700 5 10 1 1 0 0 1 value=120k T 1800 3700 5 10 0 1 0 0 1 description=resistor T 1800 3700 5 10 0 1 0 0 1 footprint=AXIAL_LAY 400 } C 4200 3850 1 0 0 resistor-2.sym { T 4400 4150 5 10 1 1 0 0 1 refdes=R2 T 4200 3850 5 10 1 1 0 0 1 value=1k T 4200 3850 5 10 0 1 0 0 1 description=resistor T 4200 3850 5 10 0 1 0 0 1 footprint=AXIAL_LAY 400 } C 4200 2650 1 0 0 resistor-2.sym { T 4400 2950 5 10 1 1 0 0 1 refdes=R3 T 4200 2650 5 10 1 1 0 0 1 value=2k T 4200 2650 5 10 0 1 0 0 1 description=resistor T 4200 2650 5 10 0 1 0 0 1 footprint=AXIAL_LAY 400 } C 3100 2650 1 0 0 resistor-2.sym { T 3300 2950 5 10 1 1 0 0 1 refdes=R4 T 3100 2650 5 10 1 1 0 0 1 value=12 T 3100 2650 5 10 0 1 0 0 1 description=resistor T 3100 2650 5 10 0 1 0 0 1 footprint=AXIAL_LAY 400 } C 3000 2400 1 270 0 resistor-2.sym { T 2950 2150 5 10 1 1 180 0 1 refdes=R5 T 3000 2400 5 10 1 1 0 0 1 value=12 T 3000 2400 5 10 0 1 0 0 1 description=resistor T 3000 2400 5 10 0 1 0 0 1 footprint=AXIAL_LAY 400 } C 7000 800 1 90 0 resistor-2.sym { T 6750 1500 5 10 1 1 180 0 1 refdes=R6 T 7000 800 5 10 1 1 0 0 1 value=1 T 7000 800 5 10 0 1 0 0 1 description=resistor T 7000 800 5 10 0 1 0 0 1 footprint=AXIAL_LAY 400 } C 6200 800 1 90 0 resistor-2.sym { T 5950 1500 5 10 1 1 180 0 1 refdes=R7 T 6200 800 5 10 1 1 0 0 1 value=1 T 6200 800 5 10 0 1 0 0 1 description=resistor T 6200 800 5 10 0 1 0 0 1 footprint=AXIAL_LAY 400 } N 2800 6400 2800 6100 4 N 2800 6100 2100 6100 4 C 7800 4900 1 0 1 gnd-1.sym N 7700 6100 7700 6400 4 N 5100 3950 7100 3950 4 N 5800 5800 6900 5800 4 C 4200 6000 1 0 0 gnd-1.sym N 4600 6400 4600 5500 4 N 4600 5500 6100 5500 4 C 700 4150 1 0 0 gnd-1.sym N 4000 6400 4000 5500 4 N 2100 5500 4000 5500 4 N 6100 2750 6100 2600 4 N 6900 3950 6900 2600 4 C 6800 500 1 0 0 gnd-1.sym C 6000 500 1 0 0 gnd-1.sym N 3100 5100 3100 6400 4 N 2100 5500 2100 4800 4 N 3100 3950 4200 3950 4 N 6100 5500 6100 5200 4 N 3100 2400 3100 4200 4 N 4100 5100 4100 5200 4 N 4000 2750 4200 2750 4 N 3700 6400 3700 5200 4 C 3000 1200 1 0 0 gnd-1.sym N 4900 5800 5200 5800 4 N 5200 5800 5200 2750 4 N 800 4800 1200 4800 4 N 5800 6400 5800 5800 4 N 6900 4300 6900 3950 4 N 6100 4300 6100 2750 4 N 6900 5800 6900 5200 4 N 5200 6400 5200 6100 4 N 5200 6100 7700 6100 4 C 1900 3700 1 0 1 vcc-1.sym C 1800 1200 1 0 1 gnd-1.sym N 3400 6400 3400 5800 4 N 3400 5800 2400 5800 4 N 2400 2600 2400 5800 4 N 1700 2600 2400 2600 4 N 1700 2800 1700 2400 4 T 4750 10950 9 18 1 0 0 4 1 Richard's 20 Watt Audio Amplifier - Version 0.8.10 T 3300 10400 9 12 1 0 0 0 1 Last Update : 11/04/2006 N 3700 5200 4100 5200 4 N 4100 4200 4100 2750 4 N 800 4800 800 4450 4 gspiceui-1.1.00+dfsg/sch/audio/aem-6010-gain-stage.sch0000644000000000000000000003066212517177277020565 0ustar rootrootv 20130925 2 C 40000 40000 0 0 0 title-A3.sym C 52500 44950 1 0 1 vdc-1.sym { T 51800 45500 5 10 0 1 0 6 1 refdes=V1 T 51800 45450 5 10 1 1 0 6 1 value=DC +70V } C 51900 44450 1 180 1 vdc-1.sym { T 51500 43950 5 10 0 1 180 6 1 refdes=V2 T 51000 43900 5 10 1 1 180 6 1 value=DC -70V } T 49400 40900 9 14 1 0 0 0 1 AEM Audio Power Amplifier - Series 6010 - Gain Stage T 49600 40400 9 10 1 0 0 0 1 aem-6010-gain-stage.sch T 50400 40100 9 10 1 0 0 0 1 1 T 51100 40100 9 10 1 0 0 0 1 1 T 53500 40400 9 10 1 0 0 0 1 2015 - 04 - 26 T 53500 40100 9 10 1 0 0 0 1 Mike Waters C 52400 43250 1 180 0 vee-1.sym { T 52400 43250 5 10 0 0 0 0 1 netname=Vee } C 52000 46150 1 0 0 vcc-1.sym { T 52000 46150 5 10 0 0 0 0 1 netname=Vcc } N 52200 44950 52200 44450 4 N 52200 44700 51700 44700 4 T 63500 50200 8 10 0 0 270 0 1 device=INDUCTOR T 63700 50200 8 10 0 0 270 0 1 symversion=0.1 C 53000 41700 1 0 0 spice-model-1.sym { T 53100 42300 5 10 1 1 0 0 1 refdes=A7 T 54300 42000 5 10 1 1 0 0 1 model-name=1N914 T 53500 41800 5 10 1 1 0 0 1 file=../../lib/models/1n914.mod } C 41000 47100 1 270 0 voltage-1.sym { T 40900 46600 5 10 1 1 0 6 1 refdes=Vin T 41800 47050 5 10 0 1 180 0 1 value=DC 30.0 } N 44200 48300 46500 48300 4 C 47600 41500 1 180 0 vee-1.sym { T 47600 41500 5 10 0 0 180 0 1 netname=Vee } C 47200 50900 1 0 0 vcc-1.sym { T 47200 50900 5 10 0 0 0 0 1 netname=Vcc } N 41200 48000 41200 51200 4 C 41600 50900 1 270 0 diode-1.sym { T 42100 50300 5 10 1 1 0 0 1 refdes=D1 T 41850 50100 5 10 1 1 0 0 1 value=1N914 } C 41600 50000 1 270 0 diode-1.sym { T 42100 49400 5 10 1 1 0 0 1 refdes=D2 T 41850 49200 5 10 1 1 0 0 1 value=1N914 } C 41600 49100 1 270 0 diode-1.sym { T 42100 48500 5 10 1 1 0 0 1 refdes=D3 T 41850 48300 5 10 1 1 0 0 1 value=1N914 } C 41600 44200 1 270 0 diode-1.sym { T 42100 43600 5 10 1 1 0 0 1 refdes=D4 T 41850 43400 5 10 1 1 0 0 1 value=1N914 } C 41600 43300 1 270 0 diode-1.sym { T 42100 42700 5 10 1 1 0 0 1 refdes=D5 T 41850 42500 5 10 1 1 0 0 1 value=1N914 } C 41600 42400 1 270 0 diode-1.sym { T 42100 41800 5 10 1 1 0 0 1 refdes=D6 T 41850 41600 5 10 1 1 0 0 1 value=1N914 } C 41900 47700 1 90 1 resistor-2.sym { T 41950 47300 5 10 1 1 0 0 1 refdes=R17 T 41950 47100 5 10 1 1 0 0 1 value=22K } C 41900 45500 1 90 1 resistor-2.sym { T 41950 45100 5 10 1 1 0 0 1 refdes=R18 T 41950 44900 5 10 1 1 0 0 1 value=22K } N 41800 46800 41800 45500 4 N 41800 44600 41800 44200 4 N 41800 48200 41800 47700 4 C 43000 50000 1 90 1 resistor-2.sym { T 43050 49600 5 10 1 1 0 0 1 refdes=R19 T 43050 49400 5 10 1 1 0 0 1 value=150 } C 43000 43300 1 90 1 resistor-2.sym { T 43050 42900 5 10 1 1 0 0 1 refdes=R20 T 43050 42700 5 10 1 1 0 0 1 value=150 } N 42400 47900 41800 47900 4 N 42900 48400 42900 49100 4 N 42900 43900 42900 43300 4 N 42400 44400 41800 44400 4 N 42900 42400 42900 41500 4 N 42900 44800 42900 46000 4 N 42900 47500 42900 46400 4 N 42900 50000 42900 50900 4 C 44300 47300 1 90 1 resistor-2.sym { T 44350 46900 5 10 1 1 0 0 1 refdes=R23 T 44350 46700 5 10 1 1 0 0 1 value=120 } C 45400 47300 1 270 0 resistor-2.sym { T 45350 46900 5 10 1 1 0 6 1 refdes=R24 T 45350 46700 5 10 1 1 0 6 1 value=120 } C 44300 46000 1 90 1 resistor-2.sym { T 44350 45600 5 10 1 1 0 0 1 refdes=R25 T 44350 45400 5 10 1 1 0 0 1 value=120 } C 45600 46000 1 90 1 resistor-2.sym { T 45350 45600 5 10 1 1 0 6 1 refdes=R26 T 45350 45400 5 10 1 1 0 6 1 value=120 } N 44200 46400 45500 46400 4 N 44200 46000 45500 46000 4 N 44200 46400 43900 46000 4 N 43900 46000 42900 46000 4 N 44200 46000 43900 46400 4 N 43900 46400 42900 46400 4 C 43600 47500 1 270 0 resistor-2.sym { T 43550 47100 5 10 1 1 0 6 1 refdes=R22 T 43550 46900 5 10 1 1 0 6 1 value=22K } C 43600 45800 1 270 0 resistor-2.sym { T 43550 45400 5 10 1 1 0 6 1 refdes=R21 T 43550 45200 5 10 1 1 0 6 1 value=22K } N 43700 47500 43700 47800 4 N 43700 44900 43700 44600 4 N 43700 46600 43700 45800 4 C 44300 50200 1 90 1 resistor-2.sym { T 44350 49800 5 10 1 1 0 0 1 refdes=R27 T 44350 49600 5 10 1 1 0 0 1 value=6.8K } C 45400 50200 1 270 0 resistor-2.sym { T 45350 49800 5 10 1 1 0 6 1 refdes=R28 T 45350 49600 5 10 1 1 0 6 1 value=6.8K } C 44300 43100 1 90 1 resistor-2.sym { T 44350 42700 5 10 1 1 0 0 1 refdes=R29 T 44350 42500 5 10 1 1 0 0 1 value=6.8K } C 45400 43100 1 270 0 resistor-2.sym { T 45350 42700 5 10 1 1 0 6 1 refdes=R30 T 45350 42500 5 10 1 1 0 6 1 value=6.8K } N 44200 49300 44200 48200 4 N 45500 48200 45500 49300 4 N 44200 44200 44200 43100 4 N 45500 44200 45500 43100 4 N 44900 50200 44900 50900 4 N 44900 42200 44900 41500 4 C 46100 47500 1 90 1 resistor-2.sym { T 46150 47100 5 10 1 1 0 0 1 refdes=R31 T 46150 46900 5 10 1 1 0 0 1 value=22K } C 45900 45800 1 270 0 resistor-2.sym { T 46150 45400 5 10 1 1 0 0 1 refdes=R32 T 46150 45200 5 10 1 1 0 0 1 value=22K } N 46000 46600 46000 45800 4 N 46000 47800 46000 47500 4 N 46000 44600 46000 44900 4 N 45500 43800 46800 43800 4 N 44200 44100 46500 44100 4 N 45500 50200 44200 50200 4 N 44200 42200 45500 42200 4 C 42400 48400 1 180 1 spice-pnp-2.sym { T 43300 47700 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 43000 48150 5 10 1 1 180 6 1 refdes=Q9 T 42750 47950 5 10 1 1 180 6 1 value=BF472 } C 46000 45100 1 180 0 spice-pnp-2.sym { T 45100 44400 5 8 0 0 180 0 1 device=PNP_TRANSISTOR T 45400 44900 5 10 1 1 180 0 1 refdes=Q14 T 45650 44650 5 10 1 1 180 0 1 value=BF472 } C 43700 45100 1 180 1 spice-pnp-2.sym { T 44600 44400 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 44300 44900 5 10 1 1 180 6 1 refdes=Q13 T 44050 44650 5 10 1 1 180 6 1 value=BF472 } C 43700 47300 1 0 0 spice-npn-2.sym { T 44600 48000 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 44300 47900 5 10 1 1 0 0 1 refdes=Q11 T 44050 47700 5 10 1 1 0 0 1 value=BF471 } C 42400 43900 1 0 0 spice-npn-2.sym { T 43300 44600 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 43000 44500 5 10 1 1 0 0 1 refdes=Q10 T 42750 44300 5 10 1 1 0 0 1 value=BF471 } C 46000 47300 1 0 1 spice-npn-2.sym { T 45100 48000 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 45400 47900 5 10 1 1 0 6 1 refdes=Q12 T 45650 47700 5 10 1 1 0 6 1 value=BF471 } N 41800 50900 47900 50900 4 N 41800 41500 47900 41500 4 N 40500 46200 43700 46200 4 N 41200 51200 46700 51200 4 N 46700 51200 46700 46200 4 N 46700 46200 46000 46200 4 N 45500 48600 46800 48600 4 C 41100 47100 1 270 1 resistor-2.sym { T 41000 47600 5 10 1 1 0 6 1 refdes=Rin T 41000 47300 5 10 1 1 0 6 1 value=100 } C 53000 43700 1 0 0 spice-model-1.sym { T 53100 44300 5 10 1 1 0 0 1 refdes=A5 T 54300 44000 5 10 1 1 0 0 1 model-name=BF471 T 53500 43800 5 10 1 1 0 0 1 file=../../lib/models/bf471.mod } C 53000 42700 1 0 0 spice-model-1.sym { T 53100 43300 5 10 1 1 0 0 1 refdes=A6 T 54300 43000 5 10 1 1 0 0 1 model-name=BF472 T 53500 42800 5 10 1 1 0 0 1 file=../../lib/models/bf472.mod } C 48000 50900 1 90 1 resistor-2.sym { T 48050 50500 5 10 1 1 0 0 1 refdes=R33 T 48050 50200 5 10 1 1 0 0 1 value=470 } C 48000 42400 1 90 1 resistor-2.sym { T 48050 42000 5 10 1 1 0 0 1 refdes=R34 T 48050 41750 5 10 1 1 0 0 1 value=470 } C 47400 50000 1 90 1 resistor-2.sym { T 47450 49600 5 10 1 1 0 0 1 refdes=R51 T 47450 49350 5 10 1 1 0 0 1 value=180 } C 48400 50000 1 270 0 resistor-2.sym { T 48350 49600 5 10 1 1 0 6 1 refdes=R52 T 48350 49350 5 10 1 1 0 6 1 value=180 } C 47400 43300 1 90 1 resistor-2.sym { T 47450 42900 5 10 1 1 0 0 1 refdes=R53 T 47450 42650 5 10 1 1 0 0 1 value=180 } C 48400 43300 1 270 0 resistor-2.sym { T 48350 42900 5 10 1 1 0 6 1 refdes=R54 T 48350 42650 5 10 1 1 0 6 1 value=180 } N 47300 50000 48500 50000 4 N 47300 42400 48500 42400 4 N 47300 44200 47300 48200 4 N 46500 48300 46500 48100 4 N 46500 48100 49000 48100 4 N 46500 44100 46500 44300 4 N 46500 44300 49000 44300 4 C 48800 46650 1 90 1 resistor-2.sym { T 48850 46250 5 10 1 1 0 0 1 refdes=R35 T 48850 46000 5 10 1 1 0 0 1 value=220 } C 48200 47900 1 90 1 capacitor-1.sym { T 47500 47700 5 10 0 0 270 2 1 device=CAPACITOR T 47900 47600 5 10 1 1 0 6 1 refdes=C7 T 47300 47700 5 10 0 0 270 2 1 symversion=0.1 T 47900 47150 5 10 1 1 0 6 1 value=15p } C 48200 45400 1 90 1 capacitor-1.sym { T 47500 45200 5 10 0 0 270 2 1 device=CAPACITOR T 47900 45100 5 10 1 1 0 6 1 refdes=C8 T 47300 45200 5 10 0 0 270 2 1 symversion=0.1 T 47900 44650 5 10 1 1 0 6 1 value=15p } N 49000 48600 49000 48100 4 N 49000 43800 49000 44300 4 N 48000 46850 49500 46850 4 { T 48000 46850 5 10 0 0 0 0 1 netname=MOS_Drv } C 48200 46650 1 270 0 resistor-2.sym { T 48100 46250 5 10 1 1 0 6 1 refdes=RV2 T 48100 46000 5 10 1 1 0 6 1 value=200 } N 48000 45550 48700 45550 4 N 48500 48200 48500 46850 4 N 48500 45550 48500 44200 4 N 48300 46850 48300 46650 4 N 48700 46650 48700 46850 4 N 48300 45750 48300 45550 4 C 46800 49100 1 180 1 spice-pnp-2.sym { T 47700 48400 5 8 0 0 180 6 1 device=PNP_TRANSISTOR T 47400 48900 5 10 1 1 180 6 1 refdes=Q15 T 47150 48650 5 10 1 1 180 6 1 value=BF472 } C 49000 49100 1 180 0 spice-pnp-2.sym { T 48100 48400 5 8 0 0 180 0 1 device=PNP_TRANSISTOR T 48400 48900 5 10 1 1 180 0 1 refdes=Q16 T 48650 48650 5 10 1 1 180 0 1 value=BF472 } C 49000 43300 1 0 1 spice-npn-2.sym { T 48100 44000 5 8 0 0 0 6 1 device=NPN_TRANSISTOR T 48400 43900 5 10 1 1 0 6 1 refdes=Q18 T 48600 43700 5 10 1 1 0 6 1 value=BF471 } C 46800 43300 1 0 0 spice-npn-2.sym { T 47700 44000 5 8 0 0 0 0 1 device=NPN_TRANSISTOR T 47400 43900 5 10 1 1 0 0 1 refdes=Q17 T 47150 43700 5 10 1 1 0 0 1 value=BF471 } N 47000 45900 47300 45900 4 C 42000 45600 1 0 0 gnd-1.sym { T 42000 45600 5 10 0 0 0 0 1 netname=GND } T 50400 50000 9 10 1 0 0 0 6 Transient Analysis : Set signal soure : 1kHz, 10mV, -5.75 DC offset MOS_Drv quiescent = approx. 0.8V Gain = 3130.6 = 69.9 dBV At signal source amplitudes greater than 10mV the output waveform becomes distorted (Vout = 31V amplitude). T 50400 48700 9 10 1 0 0 0 5 AC Analysis : C7 & C8 = 30pF : Gain = 61.8 dBV, 3dB BW = DC to 9.2 KHz C7 & C8 = 15pF : Gain = 64.7 dBV, 3dB BW = DC to 17.5 KHz C7 & C8 = 0pF : Gain = 64.7 dBV, 3dB BW = DC to 147 KHz Input Impedance Magnitude = 40KOhm N 42100 45900 41800 45900 4 T 53000 45000 9 10 1 0 0 0 3 This schematic can be simulated using NG-Spice but not GNU-Cap (last tested 2011-02-04) C 49600 46300 1 0 0 output-2.sym { T 49800 47000 5 10 0 0 0 0 1 device=none T 49700 46100 5 10 1 1 0 0 1 netname=MOS_Drv } T 50400 48000 9 10 1 0 0 0 2 Current source formed by Q9 is approx. 5mA Current source formed by Q10 is approx. 5mA C 51600 41800 1 0 1 gnd-2.sym C 47100 45600 1 0 1 gnd-2.sym C 51500 42000 1 0 0 resistor-2.sym { T 51900 42350 5 10 0 0 0 0 1 device=RESISTOR T 51600 42300 5 10 1 1 0 0 1 refdes=R2 T 52300 42300 5 10 1 1 0 0 1 value=1 } C 52300 41800 1 0 0 gnd-1.sym { T 52300 41800 5 10 0 0 0 0 1 netname=GND } C 44400 48800 1 0 0 resistor-2.sym { T 44800 49150 5 10 0 0 0 0 1 device=RESISTOR T 45200 49200 5 10 1 1 180 0 1 refdes=Rprobe1 T 44500 48600 5 10 1 1 0 0 1 value=10Meg } C 44400 43400 1 0 0 resistor-2.sym { T 44800 43750 5 10 0 0 0 0 1 device=RESISTOR T 45200 43800 5 10 1 1 180 0 1 refdes=Rprobe2 T 44500 43200 5 10 1 1 0 0 1 value=10Meg } N 44200 48900 44400 48900 4 N 45300 48900 45500 48900 4 N 44200 43500 44400 43500 4 N 45300 43500 45500 43500 4 N 48000 48100 48000 47900 4 N 48000 47000 48000 46850 4 N 48000 45550 48000 45400 4 N 48000 44500 48000 44300 4 N 48700 45750 48700 45550 4 C 51800 44400 1 0 1 gnd-2.sym C 40400 40300 1 0 0 spice-directive-1.sym { T 40500 40600 5 10 0 1 0 0 1 device=directive T 40500 40700 5 10 1 1 0 0 1 refdes=A1 T 40500 40400 5 10 1 1 0 0 1 value=.PARAM RC1=10K RB1=220 RE1=150 } C 44400 40300 1 0 0 spice-directive-1.sym { T 44500 40600 5 10 0 1 0 0 1 device=directive T 44500 40700 5 10 1 1 0 0 1 refdes=A2 T 44500 40400 5 10 1 1 0 0 1 value=.PARAM RE2=15 } C 40600 48300 1 90 0 resistor-2.sym { T 40250 48700 5 10 0 0 90 0 1 device=RESISTOR T 40650 48800 5 10 1 1 0 0 1 refdes=Rin2 T 40650 48500 5 10 1 1 0 0 1 value=180K } C 40600 45300 1 90 0 resistor-2.sym { T 40250 45700 5 10 0 0 90 0 1 device=RESISTOR T 40650 45800 5 10 1 1 0 0 1 refdes=Rin1 T 40650 45500 5 10 1 1 0 0 1 value=180K } C 40400 45000 1 0 0 gnd-1.sym { T 40400 45000 5 10 0 0 0 0 1 netname=GND } C 40400 48000 1 0 0 gnd-1.sym { T 40400 48000 5 10 0 0 0 0 1 netname=GND } N 41200 49200 40500 49200 4 C 48700 47400 1 0 0 resistor-2.sym { T 49100 47750 5 10 0 0 0 0 1 device=RESISTOR T 48900 47700 5 10 1 1 0 0 1 refdes=Rout1 T 49000 47200 5 10 1 1 0 0 1 value=20K } C 48700 44800 1 0 0 resistor-2.sym { T 49100 45150 5 10 0 0 0 0 1 device=RESISTOR T 48900 45100 5 10 1 1 0 0 1 refdes=Rout2 T 49000 44600 5 10 1 1 0 0 1 value=20K } N 49500 46850 49500 46400 4 N 49500 46400 49600 46400 4 C 49700 47200 1 0 0 gnd-2.sym C 49700 44600 1 0 0 gnd-2.sym N 48500 47500 48700 47500 4 N 49600 47500 49800 47500 4 N 48500 44900 48700 44900 4 N 49600 44900 49800 44900 4 gspiceui-1.1.00+dfsg/sch/laser/0000755000000000000000000000000012525200532014675 5ustar rootrootgspiceui-1.1.00+dfsg/sch/laser/synrad-rf-driver.sch0000644000000000000000000001562112471640722020610 0ustar rootrootv 20130925 2 C 40000 40000 0 0 0 title-A3.sym C 43800 48000 1 0 0 resistor-2.sym { T 44200 48350 5 10 0 0 0 0 1 device=RESISTOR T 44100 48300 5 10 1 1 0 0 1 refdes=R2 T 44000 47700 5 10 1 1 0 0 1 value=309 } C 46300 48000 1 0 0 resistor-2.sym { T 46700 48350 5 10 0 0 0 0 1 device=RESISTOR T 46600 48300 5 10 1 1 0 0 1 refdes=R4 T 46600 47700 5 10 1 1 0 0 1 value=9.1 } C 45100 47600 1 270 0 resistor-2.sym { T 45450 47200 5 10 0 0 270 0 1 device=RESISTOR T 44700 47200 5 10 1 1 0 0 1 refdes=R3 T 44600 46900 5 10 1 1 0 0 1 value=500 T 44600 45600 5 10 1 1 0 0 1 comment=0-1000 Ohm T 45000 45900 5 10 1 1 0 0 1 documentation=Bias } C 42100 48000 1 0 0 resistor-2.sym { T 42500 48350 5 10 0 0 0 0 1 device=RESISTOR T 42500 48500 5 10 1 1 180 0 1 refdes=R1 T 42900 48500 5 10 1 1 180 0 1 value=1K } C 49100 47200 1 0 0 inductor-1.sym { T 49300 47700 5 10 0 0 0 0 1 device=INDUCTOR T 49100 47000 5 10 1 1 0 0 1 refdes=L2 T 49300 47900 5 10 0 0 0 0 1 symversion=0.1 T 49500 47000 5 10 1 1 0 0 1 value=50nH } C 48700 50400 1 270 0 inductor-1.sym { T 49200 50200 5 10 0 0 270 0 1 device=INDUCTOR T 49000 50000 5 10 1 1 0 0 1 refdes=L1 T 49400 50200 5 10 0 0 270 0 1 symversion=0.1 T 49000 49700 5 10 1 1 0 0 1 value=90nH } C 48300 49500 1 90 0 capacitor-1.sym { T 47600 49700 5 10 0 0 90 0 1 device=CAPACITOR T 48000 50300 5 10 1 1 180 0 1 refdes=C2 T 47400 49700 5 10 0 0 90 0 1 symversion=0.1 T 47300 49600 5 10 1 1 0 0 1 value=1500pF } C 52000 46300 1 90 0 capacitor-1.sym { T 51300 46500 5 10 0 0 90 0 1 device=CAPACITOR T 52200 47100 5 10 1 1 180 0 1 refdes=C6 T 51100 46500 5 10 0 0 90 0 1 symversion=0.1 T 51900 46400 5 10 1 1 0 0 1 value=150pF } C 52000 47600 1 90 0 capacitor-1.sym { T 51300 47800 5 10 0 0 90 0 1 device=CAPACITOR T 52300 48300 5 10 1 1 180 0 1 refdes=C4 T 51100 47800 5 10 0 0 90 0 1 symversion=0.1 T 52000 47700 5 10 1 1 0 0 1 value=3pF } C 46200 46700 1 90 0 capacitor-1.sym { T 45500 46900 5 10 0 0 90 0 1 device=CAPACITOR T 46400 47500 5 10 1 1 180 0 1 refdes=C1 T 45300 46900 5 10 0 0 90 0 1 symversion=0.1 T 46100 46800 5 10 1 1 0 0 1 value=1uF } C 50800 46300 1 90 0 capacitor-1.sym { T 50100 46500 5 10 0 0 90 0 1 device=CAPACITOR T 51000 47100 5 10 1 1 180 0 1 refdes=C5 T 49900 46500 5 10 0 0 90 0 1 symversion=0.1 T 50700 46400 5 10 1 1 0 0 1 value=80pF T 50200 45600 5 10 1 1 0 0 1 comment=15-150pF T 50300 45900 5 10 1 1 0 0 1 documentation=Tuning } C 52000 48700 1 0 0 capacitor-1.sym { T 52200 49400 5 10 0 0 0 0 1 device=CAPACITOR T 52600 49000 5 10 1 1 0 0 1 refdes=C3 T 52200 49600 5 10 0 0 0 0 1 symversion=0.1 T 52600 48600 5 10 1 1 0 0 1 value=1000pF } C 48300 47900 1 0 0 nmos-3.sym { T 48900 48400 5 10 0 0 0 0 1 device=SUB_CIRCUIT T 48900 48300 5 10 1 1 0 0 1 refdes=XQ1 T 48900 48000 5 10 0 1 0 0 1 value=ARF446 T 48900 48000 5 10 1 1 0 0 1 comment=MRF150 } C 43600 46700 1 90 0 zener-1.sym { T 43000 47100 5 10 0 0 90 0 1 device=ZENER_DIODE T 42900 47500 5 10 1 1 180 0 1 refdes=D1 T 42600 46700 5 10 0 1 0 0 1 value=1N751 T 42600 47000 5 10 1 1 0 0 1 comment=5.1V T 42600 46700 5 10 1 1 0 0 1 description=1N751A } C 41200 46400 1 0 0 vdc-1.sym { T 40700 46850 5 10 1 1 0 0 1 refdes=Vsw T 41900 47250 5 10 0 0 0 0 1 device=VOLTAGE_SOURCE T 41900 47450 5 10 0 0 0 0 1 footprint=none T 40500 46550 5 10 1 1 0 0 1 value=DC 30V } C 41200 49000 1 0 0 vdc-1.sym { T 40600 49450 5 10 1 1 0 0 1 refdes=Vosc T 41900 49850 5 10 0 0 0 0 1 device=VOLTAGE_SOURCE T 41900 50050 5 10 0 0 0 0 1 footprint=none T 40500 49150 5 10 1 1 0 0 1 value=DC 30V } C 50100 48800 1 0 0 txline4-1.sym { T 50200 48700 5 10 0 1 0 0 1 device=TLIN T 50300 48500 5 10 1 1 0 0 1 refdes=TL1 T 49500 49100 5 10 0 1 0 0 1 documentation=1/4 wave transformer T 50100 49100 5 10 1 1 0 0 1 comment=Zo = 26.7 T 50100 48800 5 10 0 0 0 0 1 value=Z0=26.7 F=50MEG NL=0.25 } C 49900 48500 1 0 0 gnd-1.sym C 50900 48500 1 0 0 gnd-1.sym C 48000 45700 1 0 0 gnd-1.sym C 48000 49200 1 0 0 gnd-1.sym C 48700 47600 1 0 0 gnd-1.sym N 47200 48100 48300 48100 4 N 48100 48100 48100 47300 4 N 48100 47300 49100 47300 4 N 50000 47300 51800 47300 4 N 51800 47600 51800 47200 4 N 50900 48900 52000 48900 4 N 51800 48500 51800 48900 4 N 48800 49500 48800 48700 4 N 48800 48900 50100 48900 4 N 44700 48100 46300 48100 4 N 46000 47600 46000 48100 4 N 45200 47600 45200 48100 4 N 43400 47600 43400 48100 4 N 43800 48100 43000 48100 4 N 41500 50500 48800 50500 4 N 48800 50400 48800 50500 4 N 48100 50400 48100 50500 4 N 51800 46200 43400 46200 4 N 43400 46700 43400 46200 4 N 45200 46700 45200 46200 4 N 46000 46700 46000 46200 4 N 41500 48100 42100 48100 4 N 41500 50500 41500 50200 4 C 41400 48700 1 0 0 gnd-1.sym C 41400 46100 1 0 0 gnd-1.sym N 52900 48900 53800 48900 4 N 53800 48900 53800 48400 4 T 47400 48300 9 10 1 0 0 0 2 Ferrit Bead B 47500 48000 300 200 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 C 53700 48400 1 270 0 resistor-2.sym { T 54050 48000 5 10 0 0 270 0 1 device=RESISTOR T 53100 48000 5 10 1 1 0 0 1 refdes=Rload T 53300 47700 5 10 1 1 0 0 1 value=50 } C 53700 47200 1 0 0 gnd-1.sym N 41500 48100 41500 47600 4 T 50800 40900 9 18 1 0 0 0 1 Synrad CO2 Laser - RF Driver IV T 50500 40100 9 10 1 0 0 0 1 1 T 52100 40100 9 10 1 0 0 0 1 1 T 50500 40400 9 10 1 0 0 0 1 synrad-rf-driver.sch T 54000 40400 9 10 1 0 0 0 1 2015 - 02 - 08 T 54000 40100 9 10 1 0 0 0 1 M.S.Waters C 43000 49200 1 0 0 spice-model-1.sym { T 43100 49900 5 10 0 1 0 0 1 device=model T 43100 49800 5 10 1 1 0 0 1 refdes=A1 T 44300 49500 5 10 1 1 0 0 1 model-name=1N751A T 43600 49300 5 10 1 1 0 0 1 file=../../lib/diode/1n751.mod } C 53100 45900 1 0 0 spice-model-1.sym { T 53200 46600 5 10 0 1 0 0 1 device=model T 53200 46500 5 10 1 1 0 0 1 refdes=A2 T 54400 46200 5 10 1 1 0 0 1 model-name=MRF150 T 53700 46000 5 10 1 1 0 0 1 file=../../lib/mosfet/arf446.mod } N 50600 47300 50600 47200 4 N 50600 46300 50600 46200 4 N 51800 46300 51800 46200 4 T 50000 49700 9 10 1 0 0 0 4 It seems that there are no good SPICE models for an RF power MOSFET such as the MRF150. So I've had to analyse this circuit by disecting it eg. isolating and analysing the feedback path. And by using MOSFET models that can be modeled ie. for the DC operating point. T 40500 40500 9 10 1 0 0 0 11 The feedback path incorporates a first order bandpass notch filter. The center frequency, Fo is set using C5. At the center frequency the pole/zero pair cancel and so the phase change is zero. The table to the right contains simulation results where C5 has been varied and the notch filter center frequency (Fo) has been determined. The relationship between C5 and Fo is approximately linear. T 44400 40600 9 10 1 0 0 0 10 C5 (pF) ---------- 10 20 40 60 80 100 120 150 T 45500 40400 9 10 1 0 0 0 11 Fo (MHz) ------------ 56.45 54.19 51.68 48.63 46.81 44.86 43.17 40.91 N 51000 48800 50800 48800 4 N 50000 48800 50200 48800 4 T 54500 47100 9 10 1 0 0 0 10 Synrad calls TL1 a 1/4 wave transformer. I think this means it's a 90 deg. phase shifter. Positive feedback is required to generate the oscillator action. (TL1 would need to be 1.5m long at 50MHz.) N 48100 46000 48100 46200 4 gspiceui-1.1.00+dfsg/sch/laser/synrad-rf-driver-fb.sch0000644000000000000000000001275312471640714021201 0ustar rootrootv 20130925 2 C 40000 40000 0 0 0 title-A3.sym C 44400 45900 1 0 0 resistor-2.sym { T 44800 46250 5 10 0 0 0 0 1 device=RESISTOR T 44700 46200 5 10 1 1 0 0 1 refdes=R2 T 44700 45600 5 10 1 1 0 0 1 value=309 } C 47100 45900 1 0 0 resistor-2.sym { T 47500 46250 5 10 0 0 0 0 1 device=RESISTOR T 47400 46200 5 10 1 1 0 0 1 refdes=R4 T 47400 45600 5 10 1 1 0 0 1 value=9.1 } C 45800 45500 1 270 0 resistor-2.sym { T 46150 45100 5 10 0 0 270 0 1 device=RESISTOR T 45400 45100 5 10 1 1 0 0 1 refdes=R3 T 45300 44800 5 10 1 1 0 0 1 value=500 T 45300 43500 5 10 1 1 0 0 1 comment=0-1000 Ohm T 45700 43800 5 10 1 1 0 0 1 documentation=Bias } C 42800 45900 1 0 0 resistor-2.sym { T 43200 46250 5 10 0 0 0 0 1 device=RESISTOR T 43200 46400 5 10 1 1 180 0 1 refdes=R1 T 43600 46400 5 10 1 1 180 0 1 value=1K } C 49900 45100 1 0 0 inductor-1.sym { T 50100 45600 5 10 0 0 0 0 1 device=INDUCTOR T 50000 44900 5 10 1 1 0 0 1 refdes=L2 T 50100 45800 5 10 0 0 0 0 1 symversion=0.1 T 50400 44900 5 10 1 1 0 0 1 value=50nH } C 49400 48500 1 270 0 inductor-1.sym { T 49900 48300 5 10 0 0 270 0 1 device=INDUCTOR T 49700 48100 5 10 1 1 0 0 1 refdes=L1 T 50100 48300 5 10 0 0 270 0 1 symversion=0.1 T 49700 47800 5 10 1 1 0 0 1 value=90nH } C 48900 47600 1 90 0 capacitor-1.sym { T 48200 47800 5 10 0 0 90 0 1 device=CAPACITOR T 48400 48300 5 10 1 1 180 0 1 refdes=C2 T 48000 47800 5 10 0 0 90 0 1 symversion=0.1 T 47900 47700 5 10 1 1 0 0 1 value=1500pF } C 53100 44200 1 90 0 capacitor-1.sym { T 52400 44400 5 10 0 0 90 0 1 device=CAPACITOR T 53400 44900 5 10 1 1 180 0 1 refdes=C6 T 52200 44400 5 10 0 0 90 0 1 symversion=0.1 T 53100 44300 5 10 1 1 0 0 1 value=150pF } C 53100 45500 1 90 0 capacitor-1.sym { T 52400 45700 5 10 0 0 90 0 1 device=CAPACITOR T 53400 46200 5 10 1 1 180 0 1 refdes=C4 T 52200 45700 5 10 0 0 90 0 1 symversion=0.1 T 53100 45600 5 10 1 1 0 0 1 value=3pF } C 47000 44600 1 90 0 capacitor-1.sym { T 46300 44800 5 10 0 0 90 0 1 device=CAPACITOR T 47300 45300 5 10 1 1 180 0 1 refdes=C1 T 46100 44800 5 10 0 0 90 0 1 symversion=0.1 T 47000 44700 5 10 1 1 0 0 1 value=1uF } C 51700 44200 1 90 0 capacitor-1.sym { T 51000 44400 5 10 0 0 90 0 1 device=CAPACITOR T 52000 44900 5 10 1 1 180 0 1 refdes=C5 T 50800 44400 5 10 0 0 90 0 1 symversion=0.1 T 51700 44300 5 10 1 1 0 0 1 value=80pF T 51100 43500 5 10 1 1 0 0 1 comment=15-150pF T 51200 43800 5 10 1 1 0 0 1 documentation=Tuning } C 53100 46600 1 0 0 capacitor-1.sym { T 53300 47300 5 10 0 0 0 0 1 device=CAPACITOR T 53700 46900 5 10 1 1 0 0 1 refdes=C3 T 53300 47500 5 10 0 0 0 0 1 symversion=0.1 T 53700 46500 5 10 1 1 0 0 1 value=1000pF } C 49000 45800 1 0 0 nmos-3.sym { T 49600 46300 5 10 0 0 0 0 1 device=NMOS_TRANSISTOR T 49600 46200 5 10 1 1 0 0 1 refdes=Q1 T 49600 45900 5 10 1 1 0 0 1 value=MRF150 } C 44200 44600 1 90 0 zener-1.sym { T 43600 45000 5 10 0 0 90 0 1 device=ZENER_DIODE T 43700 45400 5 10 1 1 180 0 1 refdes=ZD1 T 43100 44600 5 10 1 1 0 0 1 value=1N751A T 43200 44900 5 10 1 1 0 0 1 comment=5.1V } C 41700 44300 1 0 0 vdc-1.sym { T 41200 44750 5 10 1 1 0 0 1 refdes=Vsw T 42400 45150 5 10 0 0 0 0 1 device=VOLTAGE_SOURCE T 42400 45350 5 10 0 0 0 0 1 footprint=none T 41000 44450 5 10 1 1 0 0 1 value=DC 30V } C 41700 47100 1 0 0 vdc-1.sym { T 41100 47550 5 10 1 1 0 0 1 refdes=Vosc T 42400 47950 5 10 0 0 0 0 1 device=VOLTAGE_SOURCE T 42400 48150 5 10 0 0 0 0 1 footprint=none T 41000 47250 5 10 1 1 0 0 1 value=DC 30V } C 51100 46700 1 0 0 txline4-1.sym { T 51200 46600 5 10 0 1 0 0 1 device=TLIN T 51300 47200 5 10 1 1 0 0 1 refdes=TL1 T 50500 47000 5 10 1 1 0 0 1 documentation=1/4 wave transformer T 51100 46100 5 10 1 1 0 0 1 comment=Zo = 26.7 } C 51100 46400 1 0 0 gnd-1.sym C 51700 46400 1 0 0 gnd-1.sym C 48700 43800 1 0 0 gnd-1.sym C 48600 47300 1 0 0 gnd-1.sym C 49400 45500 1 0 0 gnd-1.sym N 48000 46000 49000 46000 4 N 48800 46000 48800 45200 4 N 48800 45200 49900 45200 4 N 50800 45200 52900 45200 4 N 52900 45500 52900 45100 4 N 51900 46800 53100 46800 4 N 52900 46400 52900 46800 4 N 49500 47600 49500 46600 4 N 49500 46800 51100 46800 4 N 45300 46000 47100 46000 4 N 46800 45500 46800 46000 4 N 45900 45500 45900 46000 4 N 44000 45500 44000 46000 4 N 44400 46000 43700 46000 4 N 42000 48700 49500 48700 4 N 49500 48500 49500 48700 4 N 48700 48500 48700 48700 4 N 52900 44100 44000 44100 4 N 44000 44600 44000 44100 4 N 45900 44600 45900 44100 4 N 46800 44600 46800 44100 4 N 42000 46000 42800 46000 4 N 42000 48700 42000 48300 4 C 41900 46800 1 0 0 gnd-1.sym C 41900 44000 1 0 0 gnd-1.sym N 54000 46800 55100 46800 4 N 55100 46800 55100 46400 4 T 48100 46200 9 10 1 0 0 0 2 Ferrit Bead B 48200 45900 300 200 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 C 55000 46400 1 270 0 resistor-2.sym { T 55350 46000 5 10 0 0 270 0 1 device=RESISTOR T 55300 46000 5 10 1 1 0 0 1 refdes=Rload T 55400 45700 5 10 1 1 0 0 1 value=50 } C 55000 45200 1 0 0 gnd-1.sym N 42000 46000 42000 45500 4 T 51700 40900 9 18 1 0 0 0 1 Synrad RF Driver IV T 50500 40100 9 10 1 0 0 0 1 1 T 52100 40100 9 10 1 0 0 0 1 1 T 50500 40400 9 10 1 0 0 0 1 synrad-rf-driver.sch T 54000 40400 9 10 1 0 0 0 1 2015 - 02 - 05 T 54000 40100 9 10 1 0 0 0 1 M.S.Waters C 41000 41700 1 0 0 spice-model-1.sym { T 41100 42400 5 10 0 1 0 0 1 device=model T 41100 42300 5 10 1 1 0 0 1 refdes=A1 T 42300 42000 5 10 1 1 0 0 1 model-name=1N751A T 41500 41800 5 10 1 1 0 0 1 file=unknown } C 44500 41700 1 0 0 spice-model-1.sym { T 44600 42400 5 10 0 1 0 0 1 device=model T 44600 42300 5 10 1 1 0 0 1 refdes=A1 T 45800 42000 5 10 1 1 0 0 1 model-name=MRF150 T 45000 41800 5 10 1 1 0 0 1 file=unknown } N 51500 45200 51500 45100 4 N 51500 44200 51500 44100 4 N 52900 44200 52900 44100 4 gspiceui-1.1.00+dfsg/Authors0000644000000000000000000000160712440261100014360 0ustar rootroot Authors --------- Start Date : 2004-04-04 Last Update : 2014-12-05 Author : Mike Waters Email : mwaters517_AT_gmail_DOT_com ==================================================================================================== gSpiceUI - A Graphical User Interface (GUI) to various freely available electronic circuit simulation engines. ---------------------------------------------------------------------------------------------------- Author : Mike Waters Email : mwaters517_AT_gmail_DOT_com This application depends significantly on software written by others. Credit should be attributed to the authors of : wxWidgets NG-Spice GNU-Cap gschem gnetList Gwave Gaw ==================================================================================================== gspiceui-1.1.00+dfsg/gspiceui.lsm0000644000000000000000000000104612267646556015367 0ustar rootrootBegin3 Title: gSpiceUI Version: 1.0.04 Entered-date: 15/08/2003 Description: Provides a GUI for various freely available electronic circuit simulation engines : GNU-Cap and NG-Spice. Keywords: SPICE GUI electronic circuit simulation Author: Mike Waters Maintained-by: Mike Waters Primary-site: Home-page: http://users.tpg.com.au/micksw012/ Original-site: Platforms: Linux and other Unices Copying-policy: GNU Public License End gspiceui-1.1.00+dfsg/release-notes-v1.1.00.txt0000644000000000000000000002107412520120604017222 0ustar rootrootThis release of gSpiceUI has some significant updates to the code and so has been designated as version 1.1.00. The major changes in this release are : - An Operating Point panel has been introduced for NG-Spice. - Major re-work of the class PnlValue and related classes. Functionality is the same but the architecture is better and many subtle bugs have been addressed. - There are now two options for the main window layout in the Preferences dialogue. - The PnlValue class spin control repeat rate can now be set in the Preferences dialogue. - gSpiceUI can now be built against the latest version of wxWidgets ie. v3.0.02. - Show or disable tool tips now works. - Refinements of the OPTIONS dialogues (mostly more parameters are now supported). - All temperature values are now in Celcius (support for Kelvin and Fahrenheit has been dropped). - GNU-Cap FO analysis panel temporarily disabled. The new NG-Spice Operating Point panel has been introduced for to mirror that in GNU-Cap. It is implemented using the NG-Spice DC analysis command so the functionality provided by this command is now spread across two analysis panels. gSpiceUI can now be compiled against wxWidgets v3.0.x and development effort will now be focused on this version of the library. The reason for the change is due to requests from users, it seems that support for older versions of wxWidgets is being dropped by some Linux distributions. gSpiceUI can still be compiled against wxWidgets v2.8.12 but may look prettier with wxWidgets v3.0.x. The GNU-Cap Fourier analysis panel has temporarily been disabled. It's never really been properly tested and now has some new bugs associated with it. In the interests of releasing v1.1.00 of gSpiceUI I've decided to disable it rather than delay any further. I'm planning on providing the same functionality for NG-Spice so both may appear together some time in the future. I've decided to drop support for temperature values in Degrees Kelvin and Fahrenheit; it has never really worked in gSpiceUI as far as I can recall anyway. Both NG-Spice & GNU-Cap only support Deg.C and the data-sheets for various electronic components I've checked only mention Deg.C. I've investigated the implications of supporting Deg.K & Deg.F properly in gSpiceUI and concluded it would require significant effort and would add complexity to code which is already difficult to follow. I don't think the effort required is justified given the maginal benefit to be gained. Let me know if you disagree and why. The following is an extract from the ChangeLog file associated with this release : * BugFix : In the NetList class the load file and load attributes operations have been separated to prevent redundant disk activity. SimnBase class has been modified in simpathy. * BugFix : In the Component class the type is determined based on the first character in the name eg. D1 is assumed to be a diode. If the component type couldn't be identified it was deemed invalid. This was a bit too harsh so now the component is assumed to be valid even if it's type can't be determined. * BugFix : The PnlValue control could be tripped up under certain circumstances if a value was manually entered (eg. enter 1.0V and decrement to 0.0V instead of 1000.0mV). * If a netlist loaded by gSpiceUI is found to be a valid simulation file it is now loaded into the Simulation console as well as the NetList console. Changes to FrmMain::bSimnLoad( ). * BugFix : In the simulation file an incorrect reference to schematic file/s could be included. This could occur if a .ckt wasn't derived from a .sch file. * gSpiceUI can now be compiled against wxWidgets v3.0.x or v2.8.12. Hence forth development will be based around wxWidgets v3.0.x so gSpiceUI may look prettier with this version of the library. * The delay between successive spin button control updates can now be set using the Preferences dialogue and the "Spin control period" parameter. Allowable values range from 20 to 400 mSec. * BugFix : Henry reported on 2010-10-04 that the command line option -g for importing schematic file/s was broken. This bug has now been rectified. * BugFix : If a PnlValue value outside the allowable range was manually entered, the spin buttons ceased to work. The event handlers now know what to do in this case. * Further development and testing of OPTIONS dialogue. * Comparison of floating point numbers isn't easy when the values are similar. Two new functions have been added to class CnvtType which compare floats ie. CnvtType::bIsEqual( ). * Significant upgrades to class PnlValue bSetValue( ) functions. This is due to testing done using the test application test_AppPnlValue. * It's not good practise to declare "using namespace" with global scope so all such declaration have been removed. * BugFix : The CnvtType class bParseFlt( ) functions could fail at certain boundary conditions around mantissa values of 1.0 and 10.0. * Added a test application directory src/tests. The first test application is test_AppPnlValue which is used to test the display control class PnlValue and all the classes it uses. It's getting too difficult to test GUI components inside gSpiceUI. * Support for temperature values in Degrees Kelvin and Fahrenheit has been dropped. Both NG-Spice and GNU-Cap only support Deg.C and the data-sheets for various electronic components I've checked only mention Deg.C. Supporting Deg.K & Deg.F properly in gSpiceUI would require significant effort which isn't justified given the maginal benefit to be gained. * Phase angle units are now set via the Preferences dialogue. * The preferences dialogue now includes an option to alter the main frame layout. Either the probes (nodes and components) lists extend the full height of the frame or (as normal) the text controls can expand to cover the full width of the frame at the expense of probe lists height. * BugFix : When setting a PnlValue the units where being ignored if the value to be set was zero. The function PnlValue::bSetValue( wxString & ) has been completely rewritten. * BugFix : If Source sychronization was enabled the sweep parameter units where not being updated for the DC analysis panels. * BugFix : In the class NbkNgSpice the result file width was not being calculated correctly meaning results could be lost. * In the classes CmdGnuCapOPT and DlgGcpCfgOPT have removed options which are no longer supported and included new options. * In Settings menu place Preferences item at the top. * Created a new class UnitsBase as a base class to ChoUnits and LblUnits. * Tidied up the layout of all configuration dialogues. * Created a new class LblUnits to be used as an attribute in the class PnlValue as the units label. * The layout of the analysis panels for both NG-Spice and GNU-Cap were showing a some bit rot. These panels have been updated. * Created a new class PnlLblTxt to replace some instances of the wxTextCtrl class. It provides much of the functionality of wxTextCtrl and adds a parameter name string displayed to the left of the wxTextCtrl control. * Created a new class PnlLblCho to replace some instances of the wxChoice class. It provides the functionality of wxChoice and adds a parameter name string displayed to the left of the wxChoice control. * Updates to the build system to suppress warnings when building with gcc and wxWidgets v2.8.12. * Convert all bool values to lower case "true" or "false" instead of upper case "TRUE" and "FALSE". There seems to be no reason to use upper case values hence the change. * BugFix : The class CnvtType was failing one test utility check. The method bIsFloat( ) was not detecting that a string like "123E-4" represents a float. * Updates to the build system for the test utilities (ie. in src/Makefile). * Change from the drawing package Xfig (and FIG drawing files converted to JPEG image files) to Inkscape (and SVG drawing files converted to PNG image files). * BugFix : Contributor "dcb" ran cppcheck on the gSpiceUI sources. Two non-sensical test expressions inside two if( ) statements were found in the file CmdGnuCapGEN.cpp. Both bugs have now been rectified. The rest of the sources passed the cppcheck tests OK. * Update to GPL license version 3. * Changed email address references. * gSpiceUI now responds appropriately if a binary file can't be found eg. gschem or gnetlist. * Major update of ConvertType class including a name change to CnvtType. * HTML documentation updates. * Many minor updates and bug fixes. gspiceui-1.1.00+dfsg/License0000644000000000000000000010451312124475171014333 0ustar rootroot GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . gspiceui-1.1.00+dfsg/Install0000644000000000000000000002131512507637514014363 0ustar rootroot Install --------- Start Date : 2004-04-04 Last Update : 2015-04-04 Author : Mike Waters Email : mwaters517_AT_gmail_DOT_com ==================================================================================================== Table of Contents 1. Introduction. 2. Requirements. 3. wxWidgets Library. 4. Build System. 5. Installation. 6. Usage. 7. Examples. 8. Files. ---------------------------------------------------------------------------------------------------- 1. Introduction. These instructions provide information required to compile and install gSpiceUI and basic instructions on envoking gSpiceUI. For a more detailed description refer to the HTML user manual in html/gSpiceUI.html. ---------------------------------------------------------------------------------------------------- 2. Requirements. There is one essential requirement for compiling gSpiceUI, three desirable requirements for running gSpiceUI meaningfully and two optional requirement. These are listed below : * Compilation (Essential) : The wxWidgets library. * Run time (Desirable) : GNU-Cap electronic circuit simulation engine. * Run time (Desirable) : NG-Spice electronic circuit simulation engine. * Run time (Optional) : Gaw analogue waveform viewer. * Run time (Optional) : gwave analogue waveform viewer. * Schematic (Optional) : gnetlist schematic importing tool. * Schematic (Optional) : gschem schematic generation/viewing tool. Note : As a minimum NG-Spice should be compiled with XSpice enhancements enabled. One feature this provides is the POLY() function which is used in many operational amplifier models. XSpice enhancements are enabled via the NG-Spice configure script prior to compiling the sources ie. : ./configure --enable-xspice ---------------------------------------------------------------------------------------------------- 3. wxWidgets Library. gSpiceUI is written in C++ and is based on the wxWidgets library. wxWidgets offers the possibility of compiling the same source code under Linux/UNIX, MS Windows, OSX and various other platforms. This library must be installed before gSpiceUI can be compiled. Many systems now come with a version of wxWidgets pre-installed. The wxWidgets home page is : http://www.wxWidgets.org/ The recommended version of the wxWidgets library is v2.8.x however v2.6.x may still work. (Note : wxWidgets v2.6.x may generate some console spew on standard error which may be ignored eg. "gspiceui 2>/dev/null".) The archive file for a Linux based system is : wxGTK-2.8.x.tar.bz2 Untar the wxWidgets archive as follows : tar -jxvf wxGTK-2.8.x.tar.bz2 Installation of wxWidgets is based around autoconf and automake, so it should be straight forward. If necessary refer to the installation instructions provided with the wxWidgets sources (in the docs directory). Do the following in the wxWidgets base directory : mkdir my-build cd my-build ./configure --enable-unicode --without-subdirs --disable-compat26 --disable-xrc make su Password: <-- enter root password make install Note : Options which may be added to the ./configure command include : --enable-unicode (Compile wxString with Unicode support) --without-subdirs (Don't generate makefiles for samples/demos/...) --disable-compat26 (Disable wxWidgets 2.6 compatibility) --enable-debug_flag (Set the __WXDEBUG__ flag) --enable-debug_info (Create code with debugging information) --enable-debug_gdb (Create code with extra GDB debugging info.) --disable-xrc (Don't build XRC resources sub-library) ---------------------------------------------------------------------------------------------------- 4. Build System. Assuming the wxWidgets library has been installed, go to the gSpiceUI root directory and enter the following : make OR gmake (for FreeBSD) Note 1 : MAC users, enter the following before entering the above : make maccfg this creates some directories and copies some files, it only needs to be performed once per installation. Note 2 : To compile against mwxWidgets v2.6.x use : make GSPICEUI_WXLIB=2.6 If all goes well a binary named gspiceui should have been generated in the /bin directory. ---------------------------------------------------------------------------------------------------- 5. Installation. The application may be installed into /usr/local/ by entering the following command as root : make install OR gmake install (for FreeBSD) The application binary is intalled in /usr/local/bin/. The documentation and any other support files are installed in /usr/local/share/gspiceui/. The application may be uninstalled by entering the following command as root : make uninstall OR gmake uninstall (for FreeBSD) An alternative install path may be specified by manually changing the make variable INSTALLDIR (or DESTDIR) in the main Makefile or by specifying it on the command-line as the following example illustrates : make install INSTALLDIR=/alternative/install/directory This applies equally for the uninstall operation : make uninstall INSTALLDIR=/alternative/install/directory ---------------------------------------------------------------------------------------------------- 6. Usage. Change to the gspiceui/bin directory and execute the binary gspiceui in situ. Usage information is listed below : Analyse a electronic circuit using a GUI to a numerical simulation engine USAGE : gspiceui [-OPTION [ARG]] [FILE/S] OPTIONS : -h : Print usage (this message) -v : Print version information -d : Enable debug mode (generates console spew on standard error) -r RCFILE : Specify a configuration file RCFILE = ~/.gspiceui.conf (default) -c : Rebuild/clean the configuration file -s SIMENG : Specify the simulation engine to be used SIMENG = gnucap (default) or ngspice -a ANA : Specify the analysis page to be displayed ANA = op, dc (default), ac, tr, fo, di, no, pz, se or tf -g [PROC] : Guile procedure for importing a schematic file with gnetlist PROC = spice-sdb (default), pcb, protelii, verilog, etc. -w VIEWER : Specify the waveform viewer to be used VIEWER = gaw (default), gwave or gwave2 ARGS : FILE/S : Import schematic file/s or load a circuit description file NOTES : Option -s should come before -a if both are specified ---------------------------------------------------------------------------------------------------- 7. Examples. The directory gspice/sch contains some example schematic files (with the file extension .sch) which can be loaded using the Import command under the File menu. (These schematic files have been generated using gschem the gEDA schematic capture application and are converted to net list format using gnetlist.) Note : The schematic examples which contain an operational amplifier require a symbol file which is not currently part of the gschem symbol library. gnetlist uses the symbol pin sequence to generate it's component pin sequence which itself must match the associated model pin sequence. Consequently, to use these examples the symbol file opamp-3.sym must be copied to your gschem symbol library. As root enter a copy command of the form shown below : cp /gspiceui/lib/sym/opamp-3.sym /usr/share/gEDA/sym/local/ ---------------------------------------------------------------------------------------------------- 8. Files. It's worth noting that gSpiceUI can create many disk files during it's operation. For a brief explaination of the various file types and their purposes refer to the User Manual provided in the HTML documentation directory ie. "/html/gSpiceUI.html". As gSpiceUI is developed the format of the configuration file evolves (ie. ~/.gspiceui.conf). Over time it can become cluttered with superseded variable names and/or group names. The configuration file may be partially rebuilt using the command line option : "-c". At present the only way to ensure that you have a pristeen configuration file is to delete it manually and allow gSpiceUI to create a new one. Although this should not be essential, rebuilding the configuration file will at least help with human readability. ==================================================================================================== gspiceui-1.1.00+dfsg/gspiceui.10000644000000000000000000000367312267646214014733 0ustar rootroot.TH "gspiceui" "22" "January 2014" "Mike Waters" "User Commands" .SH "NAME" gspiceui \- GUI frontend for various electronic circuit simulation engines .SH "SYNOPSIS" \fBgspiceui\fR [\-v] [\-h] [\-r RCFILE] [\-c] [\-s SIMENG] [\-a ANA] [\-g [PROC]] [\-w VIEWER] [FILE/S] .SH "DESCRIPTION" GNU SPICE GUI is intended to provide a GUI for various freely available electronic circuit simulation engines ie. GNU\-Cap and NG\-Spice. It uses gnetlist to convert schematic files to net list files and gWave or Gaw to display simulation results. gSchem is the preferred schematic capture tool. .SH "OPTIONS" \fIgspiceui\fP accepts the following options : .TP 12 \fB\-v\fR Print version information. .TP 12 \fB\-h\fR Print usage information. .TP 12 \fB\-d\fR Enable debug mode (generates console spew on standard error). .TP 12 \fB\-r RCFILE\fR Specify a configuration file. .TP 12 \fB\-c\fR Rebuild/clean the configuration file. .TP 12 \fB\-s SIMENG\fR Specify the simulation engine to be used. .TP 12 \fB\-a ANA\fR Specify the analysis page to be displayed. .TP 12 \fB\-g [PROC]\fR Specify the guile procedure which is executed to create the netlist. .TP 12 \fB\-w VIEWER\fR Specify the waveform viewer to be used. .TP 12 \fBFILE/S\fR Specify a circuit description file to load or schematic file/s to import. If multiple schematics files are specified they are read sequentially and parsed with the assumption that they are all part of the same design. Any file/s must be specified at the end of the command line. .TP 12 NOTE : Option -s should come before -a if both are specified. .SH "REPORTING BUGS" Report bugs to . .SH "AUTHOR" Written by Mike Waters .SH "SEE ALSO" \fBgschem\fR (1), \fBgnetlist\fR (1), \fBngspice\fR (1), \fBgnucap\fR (1), \fBgwave\fR (1), \fBgaw\fR (1) .SH "COPYRIGHT" Copyright \(co 2003\-2014 Mike Waters This document can be freely redistributed according to the terms of the GNU General Public License version 3 gspiceui-1.1.00+dfsg/ReadMe0000644000000000000000000000630612507637026014113 0ustar rootroot ReadMe -------- Start Date : 2004-04-03 Last Update : 2015-04-03 Author : Mike Waters Email : mwaters517_AT_gmail_DOT_com ==================================================================================================== Table of Contents 1. Introduction. 2. Installation. 3. Documentation. 4. Examples. 5. Bugs / Things To Do. ---------------------------------------------------------------------------------------------------- 1. Introduction. GNU Spice GUI is intended to provide a GUI to freely available electronic circuit simulation engine eg. GNU-Cap, NG-Spice. It uses gnetlist to convert schematic files to net list files and gwave to display simulation results. gschem is used as the schematic capture tool. The version numbering scheme uses the format : vA.B.CD A is the major release number (rarely updated). B is the minor release number (infrequently updated). CD is the modification number (incremented as a result of almost any change). For example version 1.0 would be designated v1.0.00, any version with a major release number of 0 is pre-version 1.0. Until version 1.0.00 is released the version number will represent a percentage of the development completed towards version 1.0.00. Eg. v0.5.60 would signify that roughly %56 of the development effort has been completed towards version 1.0.00. ---------------------------------------------------------------------------------------------------- 2. Installation. Refer to the Install file. ---------------------------------------------------------------------------------------------------- 3. Documentation. Refer to the HTML User Manual in /html/User-Manual.html or while running gSpiceUI refer to the in application documentation (which are the same). ---------------------------------------------------------------------------------------------------- 4. Examples. The directory /sch contains various schematic files which may be used to experiment with gSpiceUI. These examples show how to prepare a schematic for simulation, which is not always a trivial task. It should be noted however that not all schematics are guaranteed to work. The directory /sch/demos contains various small example schematic files which are intended to illustrate the simulation of specific circuit elements eg. a diode. The intention is that these schematics should all work when simulated using gSpiceUI. The remaining schematics files in /sch are not guaranteed to behave properly when simulated. These files are a collection of things that have taken my interest over the years, some work and some don't. ---------------------------------------------------------------------------------------------------- 5. Bugs / Things To Do. Refer to the ToDo file for a list of known bugs and features which could be added in the future. If you have the sources the file /src/Version.hpp contains a list of bugs which need addressing in the short term. ====================================================================================================