ࡱ>    @ (bjbjFF 2% ,,$$$$lll@L,@uoĻ"$. d 6oooooooqRsol???o$$ /o?$lo?omIl 0?_t \eEo0uo:euveu6@@$$$$eulDxR <%+T81Yoo@@DTk-ÑL@@kRelational Database (RDBMS via ODBC) Interface to the PI System Version 3.11.0.0 Rev A How to Contact Us Phone(510) 297-5800 (main number) (510) 297-5828 (technical support)Fax(510) 357-8136Internet HYPERLINK mailto:techsupport@osisoft.com techsupport@osisoft.comWorld Wide Web HYPERLINK http://www.osisoft.com http://www.osisoft.comBulletin Board(510) 895-9423 Telebit WorldBlazer modem (Hayes, MNP, or PEP compatible) 8 data bits, 1 stop bit, no parity, up to 14400 bps download protocols: Xmodem, Ymodem, Zmodem, KermitMailOSI Software, Inc. P.O. Box 727 San Leandro, CA 94577-0427 USA OSI Software GmbH Hauptstra(e 30 D-63674 Altenstadt 1 Deutschland OSI Software, Ltd P. O. Box 8256 Level One, 6-8 Nugent Street Auckland 3, New ZealandUnpublished -- rights reserved under the copyright laws of the United States. RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure by the Government is subject to restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in Technical Data and Computer Software clause at DFARS 252.227-7013 Trademark statementPI is a registered trademark of OSI Software, Inc. Microsoft Windows, Microsoft Windows for Workgroups, and Microsoft NT are registered trademarks of Microsoft Corporation. Solaris is a registered trademark of Sun Microsystems. HPUX is a registered trademark of Hewlett Packard Corp.. IBM AIX RS/6000 is a registered trademark of the IBM Corporation. DUX, DEC VAX and DEC Alpha are registered trademarks of the Digital Equipment Corporation. pi_rdbmspi.doc ( 2003 OSI Software, Inc. All rights reserved 777 Davis Street, Suite 250, San Leandro, CA 9457 Table of Contents  TOC \o "1-3" Introduction  PAGEREF _Toc39027836 \h 1 Reference Manuals  PAGEREF _Toc39027837 \h 1 Supported Features  PAGEREF _Toc39027838 \h 2 Configuration Diagram  PAGEREF _Toc39027839 \h 4 Functionality  PAGEREF _Toc39027840 \h 5 Concept of Data Input from Relational Database to PI  PAGEREF _Toc39027841 \h 6 Concept of Data Output from PI to Relational Database  PAGEREF _Toc39027842 \h 8 SQL Statements  PAGEREF _Toc39027843 \h 9 Prepared Execution  PAGEREF _Toc39027844 \h 9 Direct Execution  PAGEREF _Toc39027845 \h 9 Language Requirements  PAGEREF _Toc39027846 \h 10 SQL Placeholders  PAGEREF _Toc39027847 \h 10 Timestamp Format  PAGEREF _Toc39027848 \h 16 Interface Node Clock  PAGEREF _Toc39027849 \h 18 Time Synchronization with PI Server  PAGEREF _Toc39027850 \h 19 Inputs to PI via SELECT Clause  PAGEREF _Toc39027851 \h 19 Data Acquisition Strategies  PAGEREF _Toc39027852 \h 20 SQL SELECT Statement for Single PI Tag  PAGEREF _Toc39027853 \h 20 SQL SELECT Statement for Tag Groups  PAGEREF _Toc39027854 \h 21 SQL SELECT Statement for Tag Distribution  PAGEREF _Toc39027855 \h 22 SQL SELECT Statement for RxC Distribution  PAGEREF _Toc39027856 \h 25 Event-based Input  PAGEREF _Toc39027857 \h 25 Mapping of Value and Status Data Input  PAGEREF _Toc39027858 \h 25 Multi-statement SQL Clause  PAGEREF _Toc39027859 \h 29 Explicit Transactions  PAGEREF _Toc39027860 \h 30 Stored Procedures  PAGEREF _Toc39027861 \h 30 Output from PI  PAGEREF _Toc39027862 \h 31 Mapping of Value and Status Data Output  PAGEREF _Toc39027863 \h 31 Global Variables  PAGEREF _Toc39027864 \h 32 Recording of PI Point Database Changes  PAGEREF _Toc39027865 \h 33 Short Form Configuration  PAGEREF _Toc39027866 \h 33 Long Form Configuration  PAGEREF _Toc39027867 \h 34 PI Batch Database Output  PAGEREF _Toc39027868 \h 35 PI Batch Database Replication without Module Database  PAGEREF _Toc39027869 \h 35 PI Batch Database Replication with Module Database  PAGEREF _Toc39027870 \h 36 PI Batch Database Replication Details  PAGEREF _Toc39027871 \h 37 Interface in Replication Mode  PAGEREF _Toc39027872 \h 41 Automatic Re-connection  PAGEREF _Toc39027873 \h 43 ODBC Connection Loss  PAGEREF _Toc39027874 \h 43 PI Connection Loss  PAGEREF _Toc39027875 \h 44 Database Specifics  PAGEREF _Toc39027876 \h 45 Oracle 7.0; Oracle 8.0; Oracle9i; Oracle RDB  PAGEREF _Toc39027877 \h 45 dBase III, dBase IV  PAGEREF _Toc39027878 \h 46 MS Access  PAGEREF _Toc39027879 \h 47 MS SQL Server 6.5, 7.0, 2000  PAGEREF _Toc39027880 \h 48 CA Ingres II  PAGEREF _Toc39027881 \h 48 IBM DB2 (NT)  PAGEREF _Toc39027882 \h 49 Informix (NT)  PAGEREF _Toc39027883 \h 49 Sybase ASE 12.0 (NT)  PAGEREF _Toc39027884 \h 49 Paradox  PAGEREF _Toc39027885 \h 49 MS Visual FoxPro 6.0  PAGEREF _Toc39027886 \h 50 More Examples  PAGEREF _Toc39027887 \h 51 Insert or Update  PAGEREF _Toc39027888 \h 51 PI Point Configuration  PAGEREF _Toc39027889 \h 53 Tag  PAGEREF _Toc39027890 \h 53 Extended Descriptor  PAGEREF _Toc39027891 \h 53 PointSource  PAGEREF _Toc39027892 \h 55 PointType  PAGEREF _Toc39027893 \h 55 Scan  PAGEREF _Toc39027894 \h 56 InstrumentTag  PAGEREF _Toc39027895 \h 56 SourceTag  PAGEREF _Toc39027896 \h 57 Location1  PAGEREF _Toc39027897 \h 57 Location2  PAGEREF _Toc39027898 \h 57 Location3  PAGEREF _Toc39027899 \h 58 Location4  PAGEREF _Toc39027900 \h 59 Location5  PAGEREF _Toc39027901 \h 59 Shutdown  PAGEREF _Toc39027902 \h 60 Unused Attributes  PAGEREF _Toc39027903 \h 60 Time Zone and Daylight Savings  PAGEREF _Toc39027904 \h 61 Startup Command File  PAGEREF _Toc39027905 \h 63 PI-Interface Configuration Utility on NT  PAGEREF _Toc39027906 \h 63 PI-ICU RDBODBC Control on NT  PAGEREF _Toc39027907 \h 64 Command-Line Parameters  PAGEREF _Toc39027908 \h 67 Detailed Description of the Command Line Parameters  PAGEREF _Toc39027909 \h 70 Sample RDBMSPI.bat File  PAGEREF _Toc39027910 \h 78 Security  PAGEREF _Toc39027911 \h 79 Performance Point Configuration  PAGEREF _Toc39027912 \h 81 I/O Rate Tag Configuration  PAGEREF _Toc39027913 \h 83 For Users of Previous Interface Versions  PAGEREF _Toc39027914 \h 85 Read Before Update  PAGEREF _Toc39027915 \h 85 Updating the Interface from a Previous Version  PAGEREF _Toc39027916 \h 85 Interface Installation on NT  PAGEREF _Toc39027917 \h 87 Naming Conventions and Requirements  PAGEREF _Toc39027918 \h 87 Microsoft DLLs  PAGEREF _Toc39027919 \h 88 Interface Directories  PAGEREF _Toc39027920 \h 88 The PIHOME Directory Tree  PAGEREF _Toc39027921 \h 88 Interface Installation Directory  PAGEREF _Toc39027922 \h 88 Interface Installation Procedure  PAGEREF _Toc39027923 \h 88 Installing the Interface as an NT Service  PAGEREF _Toc39027924 \h 89 What is Meant by "Running an ODBC Application as a Service"?  PAGEREF _Toc39027925 \h 89 Buffering  PAGEREF _Toc39027926 \h 91 PILOGIN.INI  PAGEREF _Toc39027927 \h 93 Example of (minimum) PILOGIN.INI File  PAGEREF _Toc39027928 \h 94 Shutdown  PAGEREF _Toc39027929 \h 95 Control Program  PAGEREF _Toc39027930 \h 97 CPPI Text Commands  PAGEREF _Toc39027931 \h 97 CPPI/RDBMSPI Functionality Accessed via MMC  PAGEREF _Toc39027932 \h 98 Appendix A: Examples  PAGEREF _Toc39027933 \h 105 Appendix B: Error and Informational Messages  PAGEREF _Toc39027934 \h 129 Appendix C: Hints for the PI System Manager  PAGEREF _Toc39027935 \h 131 Appendix D: Interface Test Environment  PAGEREF _Toc39027936 \h 133 Interface Version 1.28  PAGEREF _Toc39027937 \h 133 Interface Version 2.0  PAGEREF _Toc39027938 \h 133 Interface Version 3.08, 3.11.0.0  PAGEREF _Toc39027939 \h 134 Revision History  PAGEREF _Toc39027940 \h 135  Introduction The interface allows bi-directional transfer of data between the PI System and any relational database management system (RDBMS) that supports Open Database Connectivity (ODBC) drivers. The interface runs on Microsoft Windows (NT/2000) operating systems, and is able to connect to any PI Server node available in the network. This version only supports one ODBC connection per running copy but multiple interface instances are possible. SQL statements are generated by the end user either in the form of ordinary ASCII files, or are defined in the Extended Descriptor of a PI tag. These SQL statements are the source of data for one or more tags data input, and similarly, PI tags provide values for RDB data output. The interface makes internal use of the PI-API-NT and PI-SDK in order to keep a standard way of interfacing from a client node to the PI Server Node. Note: Databases and ODBC drivers not yet tested with the interface may require additional onsite testing, which will translate to additional charges. Please refer to the section entitled  REF _Ref529752778 \h  \* MERGEFORMAT Appendix D: Interface Test Environment for a list of databases and ODBC drivers that the interface is known to work with. Even if your database and/or ODBC driver is not shown, the interface still may work. However, if problems are experienced, the interface will have to be enhanced to support your environment. Please contact your OSI sales representative. Reference Manuals OSIsoft UniInt End User Document PI Data Archive Manual PI-API,PI-SDK Installation Instructions Vendor Vendor specific ODBC Driver Manual Microsoft ODBC Programmers Reference Supported Features FeatureSupportOrder CodePI-IN-OS-RELDB-NTIInterface Platforms supportedWindows NT 4/2000/XP (Intel)PI Point TypesFloat16 / Float32 / Float64 / Int16 / Int32 / Digital / StringSub-Second TimestampsYesSub-Second Scan ClassesYesAutomatically Incorporates PI Point Attribute ChangesYesException Reporting YesPI Interface Node Support YesUses PI-SDKYesInputs to PIScan-based / Unsolicited / Event TagsOutputs from PIEvent basedText TransferYesConfiguration DataOutputMaximum Point CountUnlimited* Source of TimestampsRDBMS or PI server* History RecoveryYesFailoverNo* UniInt-BasedYes* Vendor Software RequiredYesVendor Hardware RequiredNo* Additional PI Software Included with interfaceYes* Device Point TypesSee below* See below for more information. Source of Timestamps The interface can accept timestamps from the RDBMS or it can provide PI server synchronized timestamps. History Recovery For output tags the interface goes back in time, and uses values stored in the PI Archive. See the section  REF _Ref517598667 \h  \* MERGEFORMAT /recovery later on. This option is only available at interface startup (or for a single tag after a tag edit) but NOT for RDBMS connection problems. These are covered by the re-connection mechanism (see  REF _Ref23223413 \h  \* MERGEFORMAT Automatic Re-connection). For input tags, history recovery depends on the WHERE condition of a SELECT query. See section  REF _Ref529755081 \h  \* MERGEFORMAT Inputs to PI via SELECT Clause for more details. UniInt-Based UniInt-based UniInt stands for Universal Interface. UniInt is not a separate product or file; it is an OSIsoft-developed template used by our developers, and is integrated into many interfaces, such as the RDBMSPI Interface. The purpose of UniInt is to keep a consistent feature set and behavior across as many of our interfaces as possible. It also allows for the very rapid development of new interfaces. In any UniInt-based interface, the interface uses some of the UniIntsupplied configuration parameters and some interface-specific parameters. UniInt is constantly being upgraded with new options and features. The UniInt End User Document is available at  HYPERLINK "http://interfaces.osisoft.com/Uniint3x End User.doc" http://interfaces.osisoft.com/Uniint3x End User.doc Vendor Software Required The ODBC Driver Manager comes with Microsoft Data Access Components (MDAC). It is recommended to use the latest MDAC available at  HYPERLINK "http://www.microsoft.com/data" http://www.microsoft.com/data. The particular, RDBMS specific ODBC driver must be installed, and configured on the interface node. Additional PI Software Included with Interface The Control Program (CPPI) is a tool that assists in troubleshooting the interface. For more details see the section  REF _Ref517856497 \h  \* MERGEFORMAT Control Program. Device Point Types For full description of the ODBC supported data types see the ODBC Programmers Reference available on  HYPERLINK "http://msdn.microsoft.com" http://msdn.microsoft.com . The interface does some internal consideration in terms of mapping the RDBMS data types to PI data types and vice versa. For more info on this topic see section  REF _Ref517600853 \h  \* MERGEFORMAT Mapping of SQL (ODBC) Data Types to PI Point Types Data Input and  REF _Ref517600973 \h  \* MERGEFORMAT Mapping of Value and Status Data Output. Configuration Diagram In the following picture there is the basic configuration of the hardware and software components in a typical scenario used with the RDBMSPI Interface installation:   Functionality Interface runs on Windows NT 4/2000/XP operation system as a console application or as Service. It uses the extended PI-API-NT and PI-SDK to connect to the PI Server node, and the relational database connection is made via the corresponding ODBC driver. The Data Source Name (DSN) is created by the ODBC Administrator (Data Sources ODBC icon in Control Panel), and this DSN name is passed in the start-up arguments of the interface (e.g. /DSN=Oracle8). SQL queries are provided by the user in form of either ASCII files, or via direct definition in the points Extended Descriptor. Queries are executed according to the scan class type (cyclic or event driven) of a PI point holding the query definition. When data is read from a relational database, the interface tries to convert the result- set of a SELECT query into the PI concept of: [timestamp], value, status. The opposite direction - writing data out of the PI system, storing it to RDBMS tables utilizes the placeholders approach (see corresponding section later on). General Features Supported by the Current Version Query Timestamp, Value, Status in RDBMS Tables (including Strings) Support of String tags and millisecond timestamps Query data (input) for single tag Query data (input) for multiple tags (Tag Group) Query data (input) via TagName Key (Tag Distribution) Query data (input) via multiple TagName Key (RxC Strategy) Scan or Event based (input) SELECT queries Event based UPDATE, DELETE and INSERT queries Support of multiple statements (multiple SQL queries per tag) Statements in SQL file can be one single transaction Support of stored procedures Support of runtime placeholders Timestamp (Scan Time, Snapshot Time,...), Value, Status Support of all classic point attribute placeholders Support of placeholders for Value, Status, Timestamp of a Foreign Tag - a tag outside the interface point source Support of batch placeholders for Batch replication Support for new batch system (batches and unit batches) Storage of point attribute changes (all point types) in RDBMS Recovery option for output points Interface can run in a different Timezone/DST setting than PI Server RDBMS timestamps can optionally be in UTC independent on interface Timezone/DST setting Concept of Data Input from Relational Database to PI The SELECT query is generally expected to provide a result-set consisting of the following columns: [timestamp], value, status. The interface then internally transforms the result-set according to the selected distribution strategy. See  REF _Ref497020822 \h  \* MERGEFORMAT SQL SELECT Statement for Tag Groups and  REF _Ref497020823 \h  \* MERGEFORMAT SQL SELECT Statement for Tag Distribution. These configurations reduce the number of ODBC calls and thereby increase performance. Query for Single Tag One Value per Scan There are DCS systems that keep current values in relational database tables. Via scan-based SELECT queries the interface can read the data in the timely manner, and emulate the behavior of a standard DCS interface. An example is getting data from an ABB IMS station. More detailed description - see section  REF bkmkSingle \h  \* MERGEFORMAT SQL SELECT Statement for Single PI Tag The disadvantage of this kind of data retrieval is low performance and accuracy that is limited to scan frequency. ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_1.1__single tag query:" Example 1.1 single tag query Query for Single Tag Multiple Values per Scan A good strategy for high data throughput is to have low scan rates (e.g. 1 minute) instead of doing one query every second. In other words getting the same amount of data in one call is faster than getting it in many calls. This assumes that we are not scanning updated records (UPDATE statement overwrites existing rows), but we scan a table that is populated by an INSERT. A typical high throughput query is given below. In this example we get all data since Snapshot time. Note: Supported SQL syntax and parameter description (Pn) is given later in the manual. ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_1.2__query data array for " Example 1.2 query data array for a single tag Note: A typical low throughput query is: SELECT Timestamp, Value, Status FROM Table WHERE Name= ?; Extended Descriptor: P1=AT.TAG, Location2: 0 Here the interface only gets one row (first row in the returned result-set). The interface works similarly to an online DCS interface. Tag Groups Another way of improving performance (compared to reading value(s) for a single tag) is grouping tags together. The RDBMS table should be structured in a way that multiple values are stored in the same record (in more columns), e.g. transferring LAB data, where one data sample is stored in the same row. Querying Tag Groups can also be combined with getting complete time series per scan (Location2 = 1). Only one timestamp is allowed in a result set, and is used for time stamping of all tags in a group. Note: The group is created out of points that have the same Instrument Tag attribute => Group member Tags share the same ASCII SQL file. More detailed description - see section  REF _Ref497020853 \h  \* MERGEFORMAT SQL SELECT Statement for Tag Groups. ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_1.3__three PI points formi" Example 1.3 three PI points forming a GROUP Tag Distribution Compared to Tag Groups where grouping happens in the form of multiple value, status columns in a result-set, Tag Distribution means multiple records per query. Each record can contain data for a different tag. To achieve this, an additional field must be provided - containing the tag name, or the alias telling the interface to which target point a particular row should be distributed. More detailed description - see section  REF _Ref497020876 \h  \* MERGEFORMAT SQL SELECT Statement for Tag Distribution. The Distributor Tag defines the SQL statement. This point does not receive any actual (selected) data from the result set. Instead, it gets the number of all rows successfully delivered to target points (points mapped to by the additional column in a result-set) and this number is time stamped by the current time. Such information is useful for administration purposes. Target points are found either according to their tag name (value retrieved in PI_TAGNAME column should match the tag name of the point), or according to /ALIAS=alias_key definition found in the Extended Descriptor of the particular target point. Note: Target points have to be of the same scan class as the DistributorTag. Target points do not have an SQL Query assigned (InstrumentTag is empty). Note: It is required that the Distributor Tag is of point type numeric. ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_1.4__Tag Distribution" Example 1.4 Tag Distribution RxC Distribution (combination of Group and Distribution) Some laboratory data in RDBMS tables have a common structure that looks like: SAMPLETIME, TANK, LEVEL,LEVEL_STATUS, TEMPERATURE, TEMPERATURE_STATUS, DENSITY, DENSITY_STATUS, To transform this kind of result-set to PI tags the interface implements a strategy that accepts data being structured as follows: [PI_TIMESTAMP1],PI_TAGNAME1, PI_VALUE1, [PI_STATUS1], [PI_TIMESTAMP2],PI_TAGNAME2, PI_VALUE2, [PI_STATUS2], ... [PI_TIMESTAMPn],PI_TAGNAMEn, PI_VALUEn, [PI_STATUSn], ... Note: RxC only works with ALIASed column names (i.e. column list in the SELECT statement is ALIASed)! If tag names do not correspond to names returned in PI_TAGNAMEn columns, use the /ALIAS keyword in Extended Descriptor. This works similarly to TagDistribution. Note: Target points have to be of the same scan class as the Distributor Tag. Target points do not have an SQL Query assigned (InstrumentTag is empty). See also info in section  REF _Ref16040571 \h  \* MERGEFORMAT SQL SELECT Statement for RxC . ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_1.5__RxC Distribution" Example 1.5 RxC Distribution Concept of Data Output from PI to Relational Database Transferring data from PI to a relational database works similarly to the RDBMS reading. I.e. SQL query (mostly INSERT) is prepared, and then executed - either event driven (sign-up for snapshot), or on a periodical bases. The relational database can receive Snapshot values of any PI point as well as any value of a PI point attribute addressable by placeholders; see section  REF bkmkPlaceholders \h  \* MERGEFORMAT SQL Placeholders. For copying data from PI to a relational database, event based output points are used most often. In this case the source tag should be provided, and the output point itself gets the copy of the exported data to verify the output operation. If the output operation reports a failure (ODBC SQLExecute() function fails), the output point gets the status BadOutput. Note: Writing data to RDBMS is normally configured via output tags (event based output). Nevertheless, input points can also be used to write data to RDBMS on a periodical basis. I.e. they execute e.g. INSERT statement instead of an ordinary SELECT. ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_2.1__insert 2 different si" Example 2.1 insert 2 different sinusoid values into table SQL Statements SQL statements are defined in ASCII files, or can be specified directly within the Extended Descriptor. ASCII files are located in the directory pointed to by the /SQL=path keyword (found among the interface start-up parameters). Names of these files are arbitrary; the recommended form is filename.SQL. The ASCII SQL file is bound to a given point via the Instrument Tag attribute. In case the Instrument Tag field is empty, the interface looks for an SQL statement definition in the Extended Descriptor; searching for the keyword /SQL. If no statement definition is found, the point is accepted, but marked inactive. Such a tag would only receive data via TagDistribution or RxC Distribution. Example SQL statement definition via Extended Descriptor: /SQL= "SELECT Timestamp,Value,0 FROM Table WHERE Timestamp>?;" P1=TS Note: The entire statement(s) definition text in the Extended Descriptor has to be surrounded by double-quotes ( ) and the semicolon ; marking the end of a particular query is mandatory. The same SQL statement defined in an ASCII file: SELECT Timestamp,Value,0 FROM Table WHERE Timestamp>?; Extended Descriptor: P1=TS Note: Both ASCII file and Extended Descriptor definitions can contain a sequence of SQL commands separated by ;. When transactions are not supported (default setting), each SQL statement gets committed immediately after the execution (ODBC AUTOCOMMIT Mode). Transaction can be enforced by the /TRANSACT keyword in the ExtendedDescriptor. See section  REF _Ref516882952 \h  \* MERGEFORMAT Explicit Transactions later on. Prepared Execution Once SQL statement(s) have been accepted by the interface (during the interface startup or after a point creation/edit), the ODBC statement handles are internally allocated and prepared. These prepared statements are then executed whenever the related tag gets scanned (time based or event based). This setup is most efficient when statements are executed repeatedly with only different parameter values supplied. On the other hand, some ODBC drivers are limited on the number of concurrently prepared statements. See the section  REF _Ref517754382 \h  \* MERGEFORMAT Database specifics. Note: Prepared Execution is the default behavior. It was the only option in previous versions of this interface (prior to version 3.0.6) Direct Execution The interface allows for setting the Direct ODBC Execution (using the SQLExecDirect() function) by specifying the start-up parameter /EXECDIRECT. In this mode the interface allocates, binds, executes and frees the ODBC statement(s) each time the given tag is examined. It has the advantage of not running into the concurrently prepared statement limitation for some ODBC drivers. Another situation where direct execution is useful, is complex stored procedures. Direct execution then allows dynamic binding and effectively examining different result-sets these stored procedures can generate. A disadvantage is the increased CPU consumption. Language Requirements The level of API conformance of the ODBC driver used is checked on interface startup. The interface requires the ODBC driver to be at least of Level 1 API conformance (SQL_ODBC_API_CONFORMANCE) and SQL statements should comply with the MINIMUM Grammar conformance (SQL_ODBC_SQL_CONFORMANCE). The information about the supported conformance level (both API and Grammar) is written into the interface specific log-file (debug level 1, section ODBC General Info :). If the API conformance of some ODBC driver is less then Level 1, the interface stops. The following Data Manipulation Language (DML) statements are supported: SELECT INSERT UPDATE DELETE Additionally it allows calling stored procedures: {CALL StoredProcedureName( [parameter list])} If the syntax of a particular SQL statement is invalid, or the semantics does not comply with any of the interface specific rules (e.g. appropriate SELECT statement construction is not recognized for an input point), the tag gets refused immediately before first statement execution. The related error message is written into the log-file, and the statements are not processed. Note: It is highly recommended to test a new query for the interface with the MSQuery tool (such a query is then more likely to be accepted by the interface). Current versions of MS Query also support placeholders (?), so even complex queries can be graphically produced and tested before handed over to the RDBMSPI Interface. SQL Placeholders The concept of placeholders allows for passing runtime values onto places marked by ? in SQL statements. Question marks can be used e.g. in a WHERE clause of SELECT or UPDATE statements, in an argument list of a stored procedure etc. Placeholders are defined in the tags Extended Descriptor. The assignment of a placeholder definition to a given question mark, found in an SQL statement is sequential. This means that the first placeholder definition (P1=) in the Extended Descriptor refers to the first question mark found in the SQL statement, second question mark to the second definition and so on. Individual definitions are separated by spaces. Syntax of the supported placeholder definitions is shown in the following table: Placeholder Keywords for Extended DescriptorMeaning / Substitution in SQL QueryRemarkSnapshot PlaceholdersPn=TSTimestamp taken from the interface internal Snapshot Detailed description see section  REF _Ref497032019 \h  \* MERGEFORMAT Timestamp FormatPn=LSTLast Scan TimePn=STScan Time Input: Start of new scan for a scan class Output: Time of output eventPn=LETLast Execution Time Execution Time = time when query finished execution. Since queries can be time consuming, this time difference (LST vs. LET) should not be underestimated.Pn=VLCurrent valuePn=SS_ICurrent status integer representationPn=SS_CCurrent status digital code stringMax. 12 charactersPn=tagname/VLCurrent value of the tag tagname Tag name can contain spacesPn=tagname/SS_I Current status of the tag tagname integer representation Max. 80 characters Tag name can contain spacesPn=tagname/SS_CCurrent status of the tag tagname string representationMax. 80 characters Tag name can contain spacesPn=tagname/TSTimestamp taken from the PI Snapshot for the tag tagnameTag name can contain spaces PI Point Database PlaceholdersPn=AT.TAGTag name of the current tagMax. 80 charactersPn=AT.DESCRIPTORDescriptor of the current tagMax. 1024 charactersPn=AT.EXDESCExtended Descriptor of the current tagMax. 1024 charactersPn=AT.ENGUNITSEngineering units for the current tagMax. 80 charactersPn=AT.ZEROZero of the current tagPn=AT.SPANSpan of the current tagPn=AT.TYPICALVALUETypical value of the current tagPn=AT.DIGSTARTCODEDigital start code of the current tagPn=AT.DIGNUMBERNumber of digital states of the current tagPn=AT.POINTTYPEPoint type of the current tagMax. 1 characterPn=AT.POINTSOURCEPoint source of the current tagMax. 1 characterPn=AT.LOCATION1Location1 of the current tagPn=AT.LOCATION2Location2 of the current tagPn=AT.LOCATION3Location3 of the current tagPn=AT.LOCATION4Location4 of the current tagPn=AT.LOCATION5Location5 of the current tagPn=AT.SQUAREROOTSquare root of the current tagPn=AT.SCANScan flag of the current tagPn=AT.EXCDEVException deviation of the current tagPn=AT.EXCMINException minimum time of the current tagPn=AT.EXCMAXException maximum time of the current tagPn=AT.ARCHIVINGArchiving flag of the current tagPn=AT.COMPRESSINGCompression flag of the current tagPn=AT.FILTERCODEFilter code of the current tagPn=AT.RESResolution code of the current tagPI2Pn=AT.COMPDEVCompression deviation of the current tagPn=AT.COMPMINCompression minimum time of the current tagPn=AT.COMPMAXCompression maximum of the current tagPn=AT.TOTALCODETotal code of the current tagPn=AT.CONVERSConversion factor of the current tagPn=AT.CREATIONDATECreation date of the current tagPn=AT.CHANGEDATEChange date of the current tagPn=AT.CREATORCreator of the current tagMax. 80 charactersPn=AT.CHANGERChanger of the current tagMax. 80 charactersPn=AT.RECORDTYPERecord type of the current tagPn=AT.POINTNUMBERPoint ID of the current tagPn=AT.DISPLAYDIGITSDisplay digits after decimal point of the current tagPn=AT.SOURCETAGSource tag of the current tagMax. 80 charactersPn=AT.INSTRUMENTTAGInstrument tag of the current tagMax. 32 charactersPn=AT.USERINT1,2Userint1,Userint2Pn=AT.USERREAL1,2Userreal1,Userreal2 PI Point Change PlaceholdersPn=AT.ATTRIBUTEChanged attributeMax. 32 charactersPn=AT.NEWVALUENew value Max. 80 charactersPn=AT.OLDVALUEOld valueMax. 80 characters PI Batch Database Placeholders Useable only beginning with PI Server 3.3 and PI-SDK 1.1+Pn=BA.IDBatch identificationMax. 1024 charactersPn=BA.PRODIDBatch product identificationMax. 1024 charactersPn=BA.RECIDBatch recipe identificationMax. 1024 charactersPn=BA.GUIDBatch GUID16 charactersPn=UB.BAIDPIUnitBatch identificationMax. 1024 charactersPn=UB.MODIDPI Module identification Max. 1024 charactersPn=UB.PRODIDPIUnitBatch product identificationMax. 1024 charactersPn=UB. PROCIDPIUnitBatch procedure identificationMax. 1024 charactersPn=UB.GUIDPIUnitBatch GUID16 charactersPn=UB.MODGUIDPI Module GUID (IsPIUnit = true)16 charactersPn=UB. STARTPIUnitBatch start timePn=UB. ENDPIUnitBatch end timePn=SB.IDPISubBatch identificationMax. 1024 charactersPn=SB.GUIDPISubBatch GUID16 charactersPn=SB.HEADIDPISubBatch HeadingMax. 1024 charactersPn=SB.STARTPISubBatch start timePn=SB.ENDPISubBatch end time PI Batch Database Placeholders Useable all PI ServersPn=BA.BAIDBatch unit identificationMax. 256 charactersPn=BA.UNITUnitMax. 256 charactersPn=BA.PRIDBatch product identificationMax. 256 charactersPn=BA.STARTBatch start timePn=BA.ENDBatch end time MiscellaneousPn=any-stringDouble quoted string Max. 1024 characters Note: Pn denotes Placeholder number (n). These numbers have to be consecutive, and in ascending order. Example of an Extended Descriptor referring to a SQL statement using 3 placeholders: P1=TS P2=SS_I P3=AT.TAG Note: Placeholders defined in the global variable file (/GLOBAL=full_path start-up parameter) start with character G P1=G1 Pn=Gm, see section  REF bkmkGlobal \h  \* MERGEFORMAT Global Variables. If the same placeholder definition is used multiple times in a query, it is possible to shorten the definition string, using a back reference. Example: P1=TS P2=VL P3=Temperature P4=SS_I P5=P3 Note: Placeholders like SS_I or SS_C can also be used in SELECT statements, e.g. to serve as index. One should know that for tags of type real or integer that contain valid data (value is not in error and therefore is not a digital state), SS_C will contain O.K. Binding of Placeholders to SQL (ODBC) Data Types In order to assist database administrators in setting-up correct tables, following description shows the assignment of the possible placeholders to SQL data types. When testing against different databases and ODBC drivers, we found that it is helpful to automatically support more than one data-type. For example integer fields in dBase appear as data type SQL_DOUBLE while most of the databases use SQL_INTEGER. The interface therefore has a fallback data type. Placeholder and PI Data TypeRDB Data TypeSnapshot PlaceholdersVL for real tagsSQL_REAL If error ( SQL_FLOATVL for integer tagsSQL_INTEGER If error ( SQL_FLOATVL for digital tagsSQL_VARCHARVL for string tagsSQL_VARCHARSS_I for all PI data types pointsSQL_INTEGER If error ( SQL_FLOATSS_C for all PI data types pointsSQL_VARCHARTS, ST, LET, LST for all PI data types pointsSQL_TIMESTAMP PI Point Database PlaceholdersAT.TAG, AT.DESCRIPTOR, AT.EXDESC, AT.ENGUNITS, AT.POINTTYPE , AT.POINTSOURCE, AT.CREATOR , AT.CHANGER, AT.SOURCETAG, AT.INSTRUMENTTAG, AT.ATTRIBUTE, AT.NEWVALUE, AT.OLDVALUE, any_stringSQL_VARCHARAT.DIGSTARTCODE, AT.DIGNUMBER, AT.LOCATION1, AT.LOCATION2, AT.LOCATION3, AT_LOCATION4, AT.LOCATION5, AT.SQUAREROOT, AT.SCAN, AT.EXCMIN, AT.EXCMAX, AT.ARCHIVING, AT.COMPRESSING, AT.FILTERCODE, AT.RES, AT.COMPMIN, AT.COMPMAX, AT.TOTALCODE, AT.RECORDTYPE, AT.POINTNUMBER, AT.DISPLAYDIGITS, AT.USERINT1,AT.USERINT2SQL_INTEGER If error ( SQL_FLOAT If error ( SQL_DOUBLEAT_TYPICALVALUE, AT_ZERO, AT_SPAN, AT_EXCDEV, AT_COMPDEV, AT_CONVERS AT.USERREAL1,AT.USERREAL2SQL_REAL If error ( SQL_FLOAT PI Batch Database PlaceholdersBA.ID,BA. BAID, BA.UNIT, BA.PRODID, BA_GUID, BA_PRODID, BA_RECID, UB_BAID, UB_GUID, UB_MODID, UB_MODGUID, UB_PRODID, UB_PROCID, SB_ID, SB_GUID, SB_HEADIDSQL_VARCHARBA.START, BA.END, UB.START, UB.END, SB.START, SB.ENDSQL_TIMESTAMP Note: The If Error means - when ODBC function SQLBindParameter() fails using one data type the second one is used. Note: If the ODBC driver complies to Level 2 ODBC API conformance, or more precisely, ODBC driver supports the Level 2 - SQLDescribeParam() function, the interface binds relevant variables to the appropriate data types, based on the info returned by the SQLDescribeParam() function. Otherwise the binding is hard-coded according to the above stated table. Timestamp Format The timestamp implementation is not consistent in relational databases. Fortunately ODBC drivers are responsible for the underlying data type conversion. Note: The interface expects the full timestamp (date+time) to be read from the relational database. The interface offers following time related placeholders: KeywordTime UsedInput:TSTime Stamp (PI snapshot time) Example: Scans relational database for newly arrived values - rows. The amount of selected rows is INDEPENDENT of the scan frequency. SELECT Time,Value,0 WHERE Time > ? ORDER BY Time ASC; P1=TS Relevant note for input points: Due to the exception reporting mechanism this time placeholder does not always correspond to the visible PI Snapshot. In reality it is the latest value of a tag arrived from a query. This time is kept by the interface internally. Example: Current snapshot time: 20-Oct-2000 08:00:00 SQL statement for the input point: SELECT Tstamp,Value,0 FROM Table WHERE Tstamp >?; P1=TS Latest timestamp in result set: 20-Oct-2000 08:01:10 Placeholder P1 is populated with: 20-Oct-2000 08:01:10 Since PI accepts only snapshot times that are no further than 10 min ahead of the PI Server time one should be aware of a situation that time retrieved from RDBMS can violate this limitation. The interface keeps this future timestamp as its internal snapshot even if the actual writing to the snapshot fails. This might cause unwanted consequences ending up with data loss. The solution can be to construct a query with a safeguard, filtering out the future data: SELECT Tstamp,Value,0 FROM Table WHERE Tstamp > ? AND Tstamp < sysdate+10*60/86400; P1=TS in the above query - sysdate is Oracles current time + 10 min. For other RDBMS the query will look different and, of course the prerequisite is having PI Server and RDBMS times more or less synchronized.LSTLast Scan Time Can be used to limit the amount of data obtained by executing the SELECT query to only newly inserted rows since the last scan. The amount of selected rows is therefore DEPENDENT on the scan frequency (allows longer scan periods at the cost of potentially bigger result-sets). Example: SELECT Time,Value,0 WHERE Time > ? ORDER BY Time ASC; P1=LST STScan Time. Time when a given scan class is scheduled. A good example is to use this time for transfer of future data from a table LETLast Execution Time Time when the previous tag execution has finished. Queries can take some time to execute and LET differs from LST. When there are more statements defined (i.e. a batch of SQL statements is executed), this is the time when the last statement has finished execution. KeywordTime UsedOutput:TSSnapshot Time Stamp of a source tag (for an output tag), or any foreign tag pointed to by its name (tag name/TS) Example: INSERT INTO Table (Time,Value) VALUES (?,?); P1=TS P2=VLSTAt interface startup: ST=Snapshot Time From that time on: ST=event time Note: The interface offers execution time for input points that is used when a relational database does not have the timestamp column available, and the interface has to provide the timestamp for PI. SELECT Value,0 FROM Table WHERE ; Other alternative is using the ODBC function {Fn NOW()}, or the possible database specific built in function: SELECT {Fn NOW()},Value,0 FROM Table WHERE ; Note: On interface startup all timestamp placeholders are preset with PI snapshot timestamps. Note: For Input Tags - TS will be taken from the internal interface snapshot. This is not the same as the PI Snapshot since exception reporting runs on the interface side. If for example the value is stable for a long time, the PI snapshot will not be updated with scanned data as long as no exception occurs. Not using the PI Server Snapshot timestamp but the interface internal snapshot timestamp will avoid querying for the same data (from unchanged PI Server snapshot timestamp) multiple times as it would be for queries of type SELECT WHERE Time > ?; P1=TS Interface Node Clock The correct settings for time and time zone should be set in the Date/Time control panel. If local time participates in Daylight Savings, from the control panel, configure the time to be automatically adjusted for Daylight Savings Time. The correct local settings should be used even if the interface node runs in a different time zone than the PI Server node. Make sure that the TZ environment variable is not defined. The currently defined environment variables can be listed by going to Start | Settings | Control Panel, double clicking on the system icon, and selecting the environment tab on the resulting dialog box. Also, make sure that the TZ variable is not defined in an autoexec.bat file. When the TZ variable is defined in an autoexec.bat file, the TZ variable may not appear as being defined in the System control panel even though the variable is defined. Admittedly, autoexec.bat files are not typically used on NT, but this does not prevent a user from creating such a file and defining the TZ variable unbeknownst to the System Administrator. Time Synchronization with PI Server The interface time is synchronized with the PI server time. It finds out the time difference (between the PI Server node and the local node) and adds this difference to all time stamps it provides. This time difference is also independent on the TZ/DST settings of the PI Server. Note: Time difference between the local node and PI server node must not be greater than 30 minutes. Inputs to PI via SELECT Clause For passing values in direction to PI, it is necessary to use a SELECT query. Data obtained by ODBC API calls is then fetched and sent to the corresponding PI points according to the specified distribution strategy see  REF bkmkStrategy \h  \* MERGEFORMAT Data acquisition strategies later in this section. Handling of NULL Values The SELECT statement can return NULL values for any column. The interface uses the following algorithm when dealing with NULLs: If timestamp is NULL, the execution time is used. If status is NULL and the value is not NULL, the value is valid. When both value and status are NULL (or just value is NULL) the No Data digital state is used to convey the information that the expected value is absent. For further details see section  REF _Ref497012660 \h  \* MERGEFORMAT Evaluation of STATUS Field Data Input. Bulk Data Input Location2Bulk Option0Only the first record is valid1The interface fetches and sends all rows in the selected result-set to PI Note: In the situation of Location2 = 1 (bulk read), it is required to sort the result-set by timestamp column in ascending order. Only then the PI System can support exception reporting and compression mechanism. The following example shows a suitable query: SELECT ORDER BY Timestamp ASC; An example for Location2 = 0 might be using the first row containing the maximum or minimum value of ORDER BY value ASC; ORDER BY value DESC; Data Acquisition Strategies To interpret records obtained by a SELECT statement in a flexible way, different data acquisition strategies are defined. An individual strategy is recognized by the Location3 attribute of a given tag. Location3Data Acquisition Strategy0SQL query populates a Single PI Tag> 0Selects the Tag Group mode Location3 points to the column number of a multiple field query, where the indexed column contains data for this particular group tag-1Selects the Tag Distribution mode The SQL statement must return a key to denote the particular point-2Selects the RxC Distribution mode SELECT must return a resultset fitting to the following frame: [PI_TIMESTAMP], PI_TAGNAME, PI_VALUE, [PI_STATUS], PI_TAGNAME, PI_VALUE, [PI_STATUS] ...SQL SELECT Statement for Single PI Tag Option1: Fixed Position of Fields in a SELECT Statement To properly recognize the meaning of values read from a relational database the following column sequence has to be kept: SELECT [Timestamp,] Value, Status FROM Table ...; If provided, the interface always expects the Timestamp field to be in the first position followed by the Value and Status columns. The interface detects the Timestamp field by checking the field-data-type against SQL_TIMESTAMP ODBC data-type marker. If a database does not support timestamps (e.g. dBase IV), and the time format available is in a string form (e.g. SQL_CHAR), the query has to use the CONVERT() scalar function to get the required timestamp data type. See section  REF _Ref497991542 \h  \* MERGEFORMAT  Syntax and Usage of ODBCs CONVERT() Scalar Function. SELECT CONVERT('Time-Column-in-String Form',SQL_TIMESTAMP), Value, 0 FROM Table; Note: In case the Timestamp column is not provided, the interface supplies the execution time. See the  REF _Ref497032019 \h  \* MERGEFORMAT Timestamp Format section. Valid combinations of Timestamp, Value and Status in a SELECT statement are: SELECT Timestamp, Value, Status FROM Table... SELECT Value, Status FROM Table... Note: The mandatory STATUS column can be provided in the form of a constant expression (zero) if the database stores only the value information: E.g. SELECT Value,0 FROM Table Option 2: Arbitrary Position of Fields in a SELECT Statement - Aliases If the ODBC driver supports aliases, the interface offers keywords that are recognized and translated to the PI concept of Timestamp-Value-Status. In this case there is no need to keep fixed positions of columns (like described in previous section). The interface known keywords are: PI_TIMESTAMP, PI_VALUE, PI_STATUS E.g. the following query: SELECT Timestamp AS PI_TIMESTAMP, Value AS PI_VALUE, Status AS PI_STATUS FROM is equivalent to SELECT Value AS PI_VALUE, Status AS PI_STATUS ,Timestamp AS PI_TIMESTAMP FROM Note: In debug mode, the interface prints out the alias support information to the log file (whether the ODBC driver supports aliasing or not). (Debug level 1 ( /deb=1) Note: Since interface version 3.11.0.0 the status column is optional when aliases are used. Therefore the following statement is accepted: SELECT {Fn rand()}*100 AS PI_VALUE FROM Table; ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_3.1__field name Aliases" Example 3.1 field name Aliases Note: Single input tags can share one SQL statement file. SQL SELECT Statement for Tag Groups One SELECT statement can be a source of data for multiple PI Tags a group. The filename that is stated in the Instrument Tag attribute is considered to be an unambiguous key that forms the group. This means that each member of the group points to the same SQL query file. Only one tag executes the SQL statement(s), the MasterTag. This tag has Location3 attribute set to 1 or 2 and, additionally, holds all the placeholder definitions (P1= in the Extended Descriptor). It is not required that the other group members have those placeholders defined, but their Location3 must be greater than zero to mark the group-member position (index) in a group. Note: Single input tags can also share one SQL statement file (same Instrument Tag attribute), but they do not form a group because their Location3 = 0. Option 1: Fixed Position of Fields in SELECT Statement All the tags in a group should be numbered (Location3) according to the sequence of field names used in the SELECT command. Furthermore, the Master tag has to have Location3 parameter set to either 1 or 2, depending on whether the optional timestamp field is available or not. ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_3.2__fixed column position" Example 3.2 fixed column positions Note: If the SELECT statement contains the optional timestamp field, Location3 sequence is 2, 4, 6 otherwise it would be 1, 3, 5 Location3 of a group member tag therefore reflects the real column position in the SELECT column list. Points in a group can be of different (PI) data type. E.g. Tag1 is Float32; Tag2 is String. Master Tag and Group Members TagInstrument TagExtended DescriptorLocation2Location3CommentMaster tagFilename.SQLP1=0 First row only 1 Bulk read1 If no timestamp field used 2 If the first field is timestamp Group member(s)Filename.SQLNot evaluatedField number of the value field All tags refer to same SQL statement Note: PI points that have SQL statements defined in the Extended Descriptor (Instrument Tag attribute is empty) cannot form a group. Option 2: Arbitrary Position of Fields in SELECT Statement - Aliases The real column names in the RDBMS table are re-named (aliased) to the interface known keywords PI_TIMESTAMP, PI_VALUEn, PI_STATUSn: ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_3.3__arbitrary column posi" Example 3.3 arbitrary column position - Aliases Numbers used in column names (PI_VALUE1, PI_STATUS1) correspond to the numbers stated in Location3. The main difference to the numbering scheme used in the fixed position strategy is that Value and Status are of the same number. This number therefore does not correspond to a position of a column in the SELECT statement. The Master Tag (point that actually gets executed) is recognized by having Location3 = 1. SQL SELECT Statement for Tag Distribution Option 1: Fixed Position of Fields in SELECT Statement Second possibility (next to Tag Grouping) to get data for multiple PI points out of one result set, is to have one field configured as an unambiguous key (e.g. the name of a point). Constructing the SELECT statement as follows: SELECT [Timestamp], Tagname, Value, Status FROM Table WHERE Timestamp>?; will produce a result-set like: [timestamp1,] tagname1, value1, status1 ... [timestampX,] tagnameX, valueX, statusX ... The query execution is controlled by one PI tag that carries the SQL command called Distributor Tag. The Distributor Tag and the Target Tags must relate to the same interface - Location1, be of the same scan class - Location4, and of the same -PointSource, otherwise the interface will drop the data. Note: When the Distributor Tag is EVENT based, Location4 of the Target Tags has to be 0. Distributor Tag and Target Tag Attributes TagInstrument TagExtended DescriptorLocation2Location3Location4Distributor tagFilename.SQLP1=Not evaluated-1nTarget tagNot evaluatedNot evaluated nNot evaluatedNot evaluatedn Note: The difference between a Master Tag for Tag Groups and a Distributor Tag for Tag Distribution is that the second one is a management tag only (does not get any data from the query) while the Master Tag for Tag Groups is at the same time management tag, and first member of the group. Note: The name of the Distributor Tag should not be listed (appear) in the result set. It is populated by the number of rows retrieved (and successfully distributed to target points) from the relational database after each execution, and timestamped with current time (for administration purposes). This reading strategy therefore behaves differently than a SELECT query providing data for a single tag in relation to the TS placeholder. The TS placeholder represents the most recent snapshot time of a Distributor Tag, and it DOES NOT represent the most recent snapshot time of each individual target point! To construct a query that behaves similarly to the Single Tag Reading and TS evaluation, it is advisable to use a UNION of that many SELECTs as there are target points. Each SELECT in a UNION will have a placeholder pointing to a timestamp of the corresponding target point. I.e.: SELECT pi_time, pi_tagname, pi_value,0 FROM Table WHERE pi_tagname LIKE target1 AND pi_time>? UNION ALL SELECT pi_time, pi_tagname, pi_value,0 FROM Table WHERE pi_tagname LIKE target2 AND pi_time>?; P1=target1/TS P2=target2/TS Note that tag name/TS takes the timestamp from the PI Snapshot. If tag name is collected by the interface, a more recent timestamp might be already read but is not available this way. An interface enhancement is planned to take the internal snapshot for tags out of the same scan class. ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_3.4a__Tag Distribution, se" Example 3.4a Tag Distribution, search according to real tag name Note: String comparison of data in the tag name column against PI tag names is case INSENSITIVE. /ALIAS Since names of variables in RDBMS might not exactly correspond to PI tag names, the optional keyword /ALIAS is supported. This allows mapping of PI points to rows retrieved from the relational database where there is no direct match between the PI tag name and a value obtained from a table. Please note that this switch causes case SENSITIVE comparison. ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_3.4b__Tag Distribution, se" Example 3.4b Tag Distribution, search according to tags ALIAS name Note: String comparison of the tag name column containing the value that is compared to the /ALIAS definition in the Extended Descriptor of a target tag is case SENSITIVE. PI2 Tag Name Matching Rules PI2 tag names are always upper case. If using PI2 short names, they are internally evaluated in their delimited form e.g. XX:YYYYYY.ZZ => spaces are preserved - 'XX:YYYY .ZZ' PI3 Tag Name Matching Rules PI3 tag names preserve the case. Note: If the tag name column in RDBMS is of a fixed length string data type, the interface tries to automatically strip the possible trailing spaces for the comparison. To avoid this, just convert the tag name column via the CONVERT() scalar function to SQL_VARCHAR. SELECT Time, CONVERT(PI_TagName, SQL_VARCHAR), Option 2: Arbitrary Position of Fields in SELECT Statement - Aliases Using Aliases in a SELECT statement containing the tag name column is also possible. SELECT Time AS PI_TIMESTAMP, Name AS PI_TAGNAME The interface then recognizes the column meaning by the following known keywords: PI_TIMESTAMP, PI_TAGNAME, PI_VALUE, PI_STATUS Note: Do not mismatch the column name aliases (SELECT original_name AS other_name) with the /ALIAS keyword used in the Extended Descriptor. Note: Since the interface version 3.11.0.0 the status column is optional when aliases are used. Therefore the following statement is accepted: SELECT {Fn rand()}*100 AS PI_VALUE FROM Table; ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_3.5__Tag Distribution with" Example 3.5 Tag Distribution with aliases in column names SQL SELECT Statement for RxC Distribution The Tag Distribution can be extended to provide data for multiple tags in one row. We will call this RxC Distribution because the record-set look like a matrix. Only ALIASed columns are accepted; supported keywords are: PI_TIMESTAMPn, PI_TAGNAMEn, PI_VALUEn, PI_STATUSn PI_STATUSn column is optional Location3 = -2 /ALIAS keyword in Extended Descriptor works the same as in Tag Distribution - see the above section. ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_3.6__RxC Distribution" Example 3.6 RxC Distribution Event-based Input Input points can be scan based as well as they can be event based (whenever the Snapshot value of a trigger tag changes, an event is generated). To achieve this, the keywords /EVENT=tag name or /TRIG=tag name have to be found in the input tags Extended Descriptor. The statement (usually SELECT ) is then processed each time the Event Tag snapshot changes. ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_3.7__event based input" Example 3.7 event based input Note: The /EVENT=tag name keyword should be separated from the next keyword definition by comma , like: /EVENT=sinusoid, /SQL=SELECT ; Note: If no timestamp field is provided in the query, retrieved data will be stored in PI using the event timestamp rather than the query execution time. As of RDBMSPI 3.11.0.0, conditions can be placed on trigger events. Event conditions are specified in the extended descriptor as follows: /EVENT=tagname condition The trigger tag name must be in single quotes. For example, /EVENT=Sinuoid Anychange will trigger on any event coming from tag sinusoid# as long as the next event is different than the last event. The initial event is read from the snapshot. For a list of available keywords see  HYPERLINK \l "_Extended_Descriptor" Extended Descriptor definition in chapter  HYPERLINK \l "_PI_Point_Configuration" PI Point Configuration. Mapping of Value and Status Data Input A single PI tag can only historize value or status, but never both together in only one tag. Therefore we need to provide a method of mapping a given value / status pair into one type of information. PI System interfaces mostly apply the rule: If the status of a value is good, store the value. If the status of a value is other than good, store the status instead. Note: Any requirement that goes beyond that needs more than one tag. In the previous section we have learned that the interface requires the value and the status to be present in the SELECT field list. The following section will explain how these two fields provide data for various PI point types. Mapping of SQL (ODBC) Data Types to PI Point Types Data Input In general four interpretations of a SELECT field are possible: TIMESTAMP TAGNAME (see section  REF _Ref496669757 \h  \* MERGEFORMAT SQL SELECT Statement for Tag Distribution) VALUE STATUS To be able to process those fields, the interface makes some considerations for their data types. The following table shows what combinations of PI point types and SQL column data types (used in SELECT queries) are valid. Tags that do not match those criteria are rejected by the interface. This does not mean that those tags cannot be serviced at all. It only means that additional explicit conversion might be required. Input Field SQL Data TypePI Point TypeTimestampSQL_TIMESTAMPAll PI point typesTag nameSQL_CHAR, SQL_VARCHAR, SQL_LONGVARCHARAll PI point typesReal (R) Integer(I)Digital(D)String(S)ValueApproximate (floating points) data types SQL_NUMERIC, SQL_DECIMAL, SQL_REAL , SQL_FLOAT, SQL_DOUBLECast to the particular floating-point type.Cast to long integer Cast to integer and interpreted as pointer to Digital State SetConverted from floating-point to string.Exact (integer) data types SQL_TINYINT, SQL_SMALLINT, SQL_INTEGER, SQL_BIGINT, SQL_BITCast to the particular floating-point type.Cast to the particular integer typeInterpreted as pointer to Digital State SetConverted from integer to string.Character data types SQL_CHAR, SQL_VARCHAR , SQL_LONGVARCHARConverted from string to double. (The double number is after that cast to the particular floating-point PI type.)Converted from string to long integer and cast to integer PI data type.Checked against Digital State Set.Retrieved number of bytes copied.StatusSee section  REF _Ref497012660 \h  \* MERGEFORMAT Evaluation of STATUS Field Data Input  Note: The full conversion of all possible data types supported in SQL to PI data types goes beyond the ability of this interface. To allow additional conversions, use the CONVERT() function described below. Syntax and Usage of ODBCs CONVERT() Scalar Function Explicit data type conversion can be specified via the CONVERT (value_exp, data_type) function. Where value_exp is a column name, the result of another scalar function or a literal value, and data_type is a keyword that matches a valid SQL data type identifier. Examples: { fn CONVERT( { fn CURDATE() }, SQL_CHAR) } converts the output of the CURDATE() scalar function to a character string. { fn CONVERT( ?, SQL_CHAR) } converts a parameter (?) to a character string. Note: Because ODBC does not mandate a data type for return values from scalar functions (the scalar functions are often data sourcespecific), applications should use the CONVERT() function whenever possible to force the appropriate data type conversion. More information about the CONVERT() function can be gained from the ODBC.CHM file, which comes with the MSDN Library or from the documentation of a certain ODBC driver. Evaluation of STATUS Field Data Input In this version of the interface the existence of a status field (in a SELECT query) is mandatory for all position based strategies (column names are not of type PI_...). The status field can be provided in either numeric, or string form. For a numeric field, the tag value is Bad Input for status values greater than zero, and the interface interprets the status value as absolute Digital State for values lower than zero. For a string field, the verification is more complex, and in order to evaluate the status value, two areas in the System Digital Set table can be defined. One selects the success states range, and the second one defines the bad state range. Those ranges are referenced via the following interface start-up parameters: /SUCC1, /SUCC2, /BAD, /BAD2). The following tables provide more details and show the evaluation criteria: SQL data types denoted by String and Numeric terms: StringSQL_CHAR, SQL_VARCHAR, SQL_LONGVARCHARNumericSQL_NUMERIC, SQL_DECIMAL, SQL_REAL , SQL_FLOAT, SQL_DOUBLE, SQL_TINYINT, SQL_SMALLINT, SQL_INTEGER, SQL_BIGINT, SQL_BIT Status field evaluation: SQL Data Type of Status FieldSuccessBadNot FoundResult for TagString Status string is found between /succ1 and /succ2Go and evaluate Value FieldStatus string is found between /bad1 and /bad2 (the one which was found)String was not found in defined areasBad InputNumeric Status Tested Against ZeroNumeric > 0Bad Input< 0Interpret the status in System Digital Set0Go and evaluate Value FieldHandling of the Status Field Containing NULLString, NumericNULL Go and evaluate Value Field Note: String comparisons in /succ and /bad areas are case INSENSITIVE! For a Digital PI tag any other numeric status but zero means Bad Input. Multi-statement SQL Clause The interface can handle execution of more than one SQL statement. Semicolons (;) are used to separate the individual statements. Note: Every single statement is automatically committed immediately after the execution (AUTO-COMMIT is the default ODBC setting). In case of any run-time error [occurring for one statement], the interface continues execution with the following one. Explicit transaction control can change this behavior by setting the /TRANSACT keyword. See next section -  REF _Ref516882931 \h  \* MERGEFORMAT Explicit Transactions. Note: There can be multiple statements per tag, but only one SELECT is allowed in such a batch. Note: Only statements containing one of the supported keywords (SELECT, INSERT, UPDATE, DELETE, CALL) are allowed Proprietary language constructions (T-SQL, PL/SQL,) are not guarantied to work with ODBC drivers in general. E.g. the MS SQL Servers T-SQL is allowed with the MS SQL ODBC driver, but similar construction fails with Oracles ODBC. Example: if(?<>0) SELECT pi_time,pi_value,0 FROM table1 else SELECT pi_value,0 FROM table1; The preferred way is to use a store procedure call. In the example the most recent value of the Sinusoid tag is kept in the relational database. The Snapshot value is inserted into a table, and all the previously inserted records are deleted afterwards. Output is event based. ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_3.8__multi statement query" Example 3.8 multi statement query Explicit Transactions Transaction control is configurable on a per tag basis, specifying the /TRANSACT keyword in the Extended Descriptor. The interface switches off the AUTOCOMMIT mode, and explicitly COMMITs or ROLLBACKs the transaction. The ROLLBACK is used whenever a runtime error is encountered. In case of multiple SQL statement definitions per tag, the batch execution is interrupted after the first runtime error, and ROLLed BACK. Stored Procedures The interface offers the possibility of executing stored procedures. Stored procedure calls can use placeholders (input parameters) in their argument lists, and they behave the same way as standard queries do. The syntax for a procedure invocation conforms to the rules of SQL extensions defined by ODBC: {CALL procedure-name[([parameter][,[parameter]]...)]} A procedure can have zero or more input parameters. The output parameters are not supported. Stored procedures are therefore mainly used for execution of more complex actions that cannot be expressed by the limited SQL syntax the interface supports. Note: Some RDBMSs like MS SQL Server or IBM DB2 7.01 allow for having the SELECT statement inside a procedure body. The execution of such a procedure then returns a standard result-set, as if it were generated via the simple SELECT. In this sense a stored procedure can also be used to read data out of the relational database into PI. How to construct a stored procedure on Oracle, so that it behaves similarly (in terms of returning a result-set) as stored procedures on MS SQL Server or DB2, refer to section  REF _Ref20212696 \h  \* MERGEFORMAT Oracle 7.0; Oracle 8.0; Oracle9i; Oracle RDB ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_3.9__stored procedure call" Example 3.9 Stored Procedure call Output from PI Output of data towards a relational database is either internally handled via exceptions generated by the source tag, or alternatively, also input tags can be used to achieve output to RDBMS. Writing data from PI to a relational database is accomplished by using INSERT, UPDATE or CALL SQL statements and using runtime placeholders (see also section  REF bkmkPlaceholders \h  \* MERGEFORMAT SQL Placeholders). The example updates one record in the relational database with the snapshot value of sinusoid. ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_3.10__event based output" Example 3.10 event based output Note: To update a row in a relational database - some record(s) that match the WHERE condition should be present in the updated table. In other words if a table is empty, the UPDATE statement returns success, but the table remains empty. For alternatives, please check the INSERT or UPDATE example in section  REF _Ref517762913 \h  \* MERGEFORMAT More Examples. Note: The output point itself is populated with a copy of the Source Tag data if the output operation was successful. Otherwise the output tag will receive a digital state of BadOutput. Mapping of Value and Status Data Output For output of data in direction of RDBMS, no fixed table structure is required. Corresponding placeholders are used for the intended data output. Although the placeholders VL, SS_I, SS_C apply to similar rules as value and status columns for data input, some variations do exist between individual PI point types. DIGITAL Tags Digital output tag values are mapped only to string SQL data types. This means that the corresponding field data type in the table must be string, otherwise explicit conversion is required (CONVERT(value_exp, data_type)). The following table shows the assignment of value placeholders (VL, SS_I, SS_C) for a Digital tag: PI ValueVL Field Type StringSS_I Field Type Integer or FloatSS_C Field Type StringDigital state is NOT in the error range defined by  REF _Ref496940470 \h  \* MERGEFORMAT /bad1  REF _Ref496940482 \h  \* MERGEFORMAT /bad2 start-up parameters0O.K.Digital state IS in the error range defined by  REF _Ref496940470 \h  \* MERGEFORMAT /bad1  REF _Ref496940482 \h  \* MERGEFORMAT /bad2 start-up parameters1Bad Value Note: More data type conversions are supported for ODBC drivers with Level 2 API conformance. ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_3.11__Output triggered by " Example 3.11 output triggered by Sinusoid, values taken from TagDig FLOAT, INTEGER and STRING Tags PI ValueVL Field Type Numeric or StringSS_I Field Type NumericSS_C Field Type StringValue NOT in error0O.K.Digital State Note: More data type conversions are supported for ODBC drivers with Level 2 API conformance. E.g. it is possible to write integer values as ASCII representation into a string column using the CONVERT() function. Global Variables A file containing definitions of global variables allows for pre-definition of placeholders that are either used many times or are large in size. The file is referenced via the /GLOBAL=full_path start-up parameter. The syntax of global variables is the same as for placeholders Pn, but starting with character G, see section  REF bkmkPlaceholders \h  \* MERGEFORMAT SQL Placeholders. Syntax used in a global variable file is shown in an example: ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_3.12__global variables" Example 3.12 global variables Recording of PI Point Database Changes The interface can record changes made to the PI Point Database. The concept is similar to the regular output point handling. The difference is that the Managing Tag is not triggered by a snapshot event, but by a point attribute modification. Note: Managing point is recognized by having Location4 = -1 or Location4 = -2. Short Form Configuration Having Location4 set to 1, the interface expects a limited subset of the AT.* placeholders definitions. The following attributes can be stored in a RDB table using the short form scenario: Example of the RDB Table Structure for the PIPOINT Changes RecordingPlaceholderTAG_NAME (SQL_CHAR)AT.TAGATTRIBUTE_NAME (SQL_CHAR)AT.ATTRIBUTECHANGE_DATETIME (SQL_TIMESTAMP)AT.CHANGEDATECHANGER (SQL_CHAR)AT.CHANGERNEW_VALUE (SQL_CHAR)AT.NEWVALUEOLD_VALUE (SQL_CHAR)AT.OLDVALUE ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_4.1__PI Point database cha" Example 4.1 PI Point Database changes short form configuration Note: The interface stores the number of executed queries into the Managing Tag. For the Short Form - nothing is stored when a point was edited, but no real attribute change has been made. Note: By default the interface checks for attribute changes in 2 minute intervals. It can therefore happen that when an attribute is e.g. changed twice within 2 minutes and finally ending up with the original value, the interface will not reflect such a change. Since RDBMSPI 3.11.0.0, the 2 minute interval can be changed by specifying the start-up parameter /UPDATEINTERVAL Long Form Configuration Having Location4 set to 2, all AT.* placeholders can be used. See section  REF bkmkPlaceholders \h  \* MERGEFORMAT SQL Placeholders. This mode allows execution of any SQL statement triggered by a PIPOINT database change. ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_4.2__PI Point database cha" Example 4.2 PI Point Database changes long form configuration (only change date and tag name recorded) Note: The interface stores the number of executed queries into the Managing Tag. PI Batch Database Output The interface allows for replication of the PI Batch Database to RDBMS tables. The PI Batch database is scanned in a timely manner. The managing tags (tags that hold and execute the INSERT statements) should therefore be configured as input tags. Data from the PI Batch database is inserted into the RDBMS table(s) by executing INSERT statement(s) as many times, as there were newly arrived records in the PI Batch Database since the last scan. The PI Batch Database replication management tags are recognized by the presence of any of the PI Batch database placeholders, see section  REF bkmkPlaceholders \h  \* MERGEFORMAT SQL Placeholders, and are handled differently than any other standard input tag. PI Batch Database Replication without Module Database The interface allows for replication of batch records in a form similar to the structure of the pibatch table visible via PI ODBC or PI OLEDB. The following list shows placeholders that can be used independently of the presence of the ModuleDatabase: PropertyPlaceholderRDB data typeBatch IDBA.BAIDCharacter string up to 256 bytesUnitBA.UNITCharacter string up to 256 bytesProductBA.PRODUCTCharacter string up to 256Start TimeBA.STARTTimestampEnd TimeBA.ENDTimestamp The next example demonstrates how to replicate the whole PI Batch database using a standard input point carrying a simple INSERT statement. The interface asks for new batches since the previous scan. Only closed batches (batches with non zero endtime) are stored. Note: The optional /RECOVERY_TIME=*-1d start-up parameter applies here in terms of going back into the PI Batch database for the specified time period. Note: The input point carrying the INSERT statement receives the number of inserted batches after each scan. It is therefore advisable to define this point as numeric. ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_5.1__Batch export (not req" Example 5.1 Batch export (not requiring Module Database) PI Batch Database Replication with Module Database PI-SDK divides the Batch Database into several object collections. The simplified object model is shown in the following picture:         More detailed description of each object can be found in the PI-SDK Manual. The RDBMSPI Interface currently replicates these objects from the three main collections found in the PI Batch Database. The collections are: PIBatchDB stores PIBatch objects PIUnitBatches stores PIUnitBatch objects PISubBatches stores PISubBatch objects Each object in the above stated collections has a different set of properties, and can reference its parent object (object from the superior collection) via the GUID (Global Unique Identifier) 16 byte unique number. This GUID can be used as a key in RDBMS tables to relate PIUnitBatch records to their parent PIBatch and PISubBatches to a particular PIUnitBatch. The structure of RDBMS tables is determined by the available properties on a given object. In the following tables, a description of the properties of each object is given and the corresponding data type that can be used in RDBMS table design. The third column defines the corresponding placeholder used in the INSERT statement: PI Batch Object PropertyRDB Data TypePlaceholderBatch IDCharacter string up to 1024 bytesBA.IDProductCharacter string up to 1024 bytesBA.PRODIDRecipeCharacter string up to 1024 bytesBA.RECIDUnique IDCharacter string 16 bytesBA.GUIDStart TimeTimestampBA.STARTEnd TimeTimestampBA.ENDPIUnitBatch Object PropertyRDB Data TypePlaceholderBatch IDCharacter string up to 1024 bytesUB.IDProductCharacter string up to 1024 bytesUB.PRODIDProcedure NameCharacter string up to 1024 bytesUB.PROCIDUnique IDCharacter string 16 bytesUB.GUIDPI UnitCharacter string up to 1024 bytesUB.MODIDPI Unit Unique IDCharacter string 16 bytesUB.MODGUIDStart TimeTimestampUB.STARTEnd TimeTimestampUB.END PISubBatch Object PropertyRDB Data TypePlaceholderNameCharacter string up to 1024 bytesSB.IDPI HeadingCharacter string up to 1024 bytesSB.HEADIDUnique IDCharacter string 16 bytesSB.GUIDStart TimeTimestampSB.STARTEnd TimeTimestampSB.ENDPI Batch Database Replication Details As stated above, the interface scans the PI Batch database in timely manner. It keeps the internal list of already inserted items in memory allowing for avoiding the duplication of identical rows. Basically a separate PI tag, called Managing Tag, is required to execute an individual INSERT statement. After each insert operation, the number of inserted rows is written to the Managing Tag. The interface therefore knows at what time it stored the last row into a given table, and will NOT insert rows with an End Time (object property) that is older than the control tags timestamp. This allows for a safe restart of the interface without duplication of rows (PIBatches, PIUnits and PISubBatches). PI-SDK provides two search functions for filtering of the PI Batch Database. These two functions can be seen as an analogy to SELECT statements used in SQL queries. The interface provides several keywords that specify the filter condition (analogy with a WHERE clause in a SELECT statement). The keywords have the same syntax as the corresponding placeholders, but are prefixed with the / character. The summary of all Batch related keywords can be found in the section  REF _Ref517858794 \h  \* MERGEFORMAT PI Point Configuration later on. This manual contains an example that replicates all Batches during the last 10 days, all PIUnitBatches plus their PISubBatches over the same period of time. Note: Both, PIBatch and PIUnitBatch objects must be closed i.e. they must have the End Time property populated with a valid timestamp. The interface will not store open Batches and PIUnitBatches. Exceptions to this rule are PISubBatches. They are stored at the time when the PIUnitBatch (parent) object is closed regardless if the (child) PISubBatch objects do have a valid End Time property or not. Three tables are required for the data extracted from the PI Batch database. Table Structure for PIBatch ObjectsTable Structure for PIUnitBatch ObjectsBA_START (SQL_TIMESTAMP)UB_START (SQL_TIMESTAMP)BA_END (SQL_TIMESTAMP)UB_END (SQL_TIMESTAMP)BA_ID (SQL_VARCHAR)UB_ID (SQL_VARCHAR)BA_PRODUCT (SQL_VARCHAR)UB_PRODUCT (SQL_VARCHAR)BA_RECIPE (SQL_VARCHAR)UB_PROCEDURE (SQL_VARCHAR)BA_GUID (SQL_CHAR[37])BA_GUID (SQL_CHAR[37])UB_MODULE (SQL_VARCHAR)UB_GUID (SQL_CHAR[37])Table Structure for PISubBatch ObjectsSB_START (SQL_TIMESTAMP)SB_HEAD (SQL_VARCHAR)SB_END (SQL_TIMESTAMP)UB_GUID (SQL_CHAR[37])SB_ID (SQL_VARCHAR)SB_GUID (SQL_CHAR[37]) The blue arrows show the keys that form the relationship between these three tables. PISubBatches can form their own tree structure allowing for a PISubBatch object to contain the collection of another PISubBatch. To express this hierarchy in one table, the interface constructs the PISubBatch name in a way that it contains the above positioned PISubBatches divided by a backslash \ (analogy with the file and directory structure). In our case the SB_ID column will contain items like: PIUnitBatch_01\SB_01\SB_101\SB_102 PIUnitBatch_01\SB_01\SB_101\SB_103 PIUnitBatch_01\SB_01\SB_101 As the PISubBatches relate to their parent object (PIUnitBatch) but have different properties, an independent INSERT is needed for the PISubBatch table. The interface therefore looks for the special keyword /SB_TAG =subbatch_managing_tag in the Extended Descriptor of the managing tag of a PIUnitBatch. If this keyword is found, the particular INSERT statement is executed to store the PISubBatches. ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_5.2a__Batch export (Module" Example 5.2a Batch export ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_5.2b__UnitBatch export (Mo" Example 5.2b UnitBatch export ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_5.2c__SubBatch export (Mod" Example 5.2c SubBatch export Selecting e.g. all PISubBatches that relate to a particular PIUnitBatch record can be achieved like: SELECT SB.SB_ID, SB.SB_START, SB.SB_END, UB.UB_ID FROM PI_SUBBATCH SB, PI_UNITBATCH UB WHERE UB.UB_GUID = SB.UB_GUID AND UB.UB_ID Like 'XYZ3'  Interface in Replication Mode The interface can be configured in a way that the output points are not triggered by the source tags snapshot events. Instead the interface processes compressed data from the PI Archive. If the interface finds the start-up parameter /RECOVERY_TIME containing both, the start and end times (divided by comma), all output points are processed for the defined time interval, and then the interface stops execution (exits). Tags other than output points are not processed at all. The output point replication works in conjunction with the /RECOVERY start-up specification. If both start-up keywords are used (/RECOVERY and /RECOVERY_TIME), the /RECOVERY= setting influences the /RECOVERY_TIMEs start-time. If the tags snapshot time is more recent than the start-time specified by /RECOVERY_TIME, replication starts from the tags snapshot. This approach can be used for letting the interface being started using the Windows scheduling service (AT), and thus replicate the compressed data to RDBMS in a batch manner. For more info about both parameters see the description in section  REF _Ref15965515 \h  \* MERGEFORMAT Startup Command File. Automatic Re-connection ODBC Connection Loss The interface automatically tries to re-connect to the RDBMS, in cases when the relational database is not reachable. Because the ODBC API does not provide any direct function to find out whether the communication line is in a healthy state, the interface uses the following mechanism to determine a connection loss: Any connection related error (ODBC returns error statuses starting with 08xxx) means closing all prepared SQL statements, and entering the re-connection loop. (Before regarding the situation as a connection loss, one additional verification execution is made that finally decides about the re-connection action.) According to the ODBC spec. ODBC drivers have to 'stamp' the errors consistently, and communication related problems have to be marked with a proper error state. As different ODBC drivers can return thousands of error codes, it is unlikely that each is properly sorted to the corresponding error class. Since version 3.11.0.0 the interface implements a new start-up switch /ERC=n. This optional switch activates a mechanism, which counts consecutive occurred runtime errors, and decides for the re-connection action when the number of such errors equals the specified number (n). This scenario helps to decide about a re-connection action when the interface communicates to an ODBC driver that does not return proper error codes. Note: If the connection error appears during an output operation (output tag), the output operation fails (the value(s) get lost) and the output tag gets a Bad Output digital state. However, further output events are buffered in the output queue until reconnection, queue timeout or queue overflow. Having the RDBMS system disconnected, and the PI connection working, it might happen that the event queue for output tags is not emptied for a longer time period the pisn_evmexception() PI API function is not called because the interface ends up in a loop trying to re-establish the ODBC connection - and events in the event queue may overflow and be lost. If the PI system remains available (potentially the PI connection can also be a problem, because of a possible network failure), the interface writes I/OTimeout to all input points. It then tries to re-open the ODBC connection every minute. If the connection is successfully re-established all SQL statements are newly allocated and prepared for execution. The interface continues working normally afterwards. PI Connection Loss On a PI-API or PI-SDK connection loss, neither Snapshot placeholders (TS, VL, SS_I,) nor Attribute placeholders (AT.xxx) can be refreshed. Corresponding error messages are sent to the interface log-file. The interface will try to re-login to PI in one minute intervals whenever it finds out that the PI Server is not available. The PI Server availability check is made before each scan class processing. Note: In case the interface runs as a console application, the login dialogue pops up waiting for the user to re-enter the authentication information. Database Specifics Although ODBC is de-facto a standard for accessing data stored in relational databases, there are ODBC driver implementation differences. Also the underlying relational databases differ in functionality, supported data-types, SQL syntax and so on. The following section describes some of the interface relevant limits or differences, but this list is by far not complete. Oracle 7.0; Oracle 8.0; Oracle9i; Oracle RDB Statement Limitation There is a limitation on the number of statements that can be open concurrently. Although it is possible to increase this limit via the keyword OPEN_CURSORS configured in the file INIT.ORA, it was not possible (running against the Oracle version 7.2 on Open VMS) to get more than 100 statements to work. The INIT.ORA is located at the server side of the ORACLE database. ODBC drivers used: Oracle 7.2 (Open VMS) driver 1.13.0500 Visegenic 32-bit Oracle driver 2.00.0000 It is possible to increase the OPEN_CURSORS parameter via the Instance Manager ->Initialisation Parameters->Basic Tuning for Oracle 8.0 (NT) ODBC driver used: Oracle 8.0 (08.00.5000, NT) 8.0.5.0.0; 08.01.73.0 Since the interface normally uses one SQL statement per tag, not more than the specified number (open_cursors) of tags per interface process can be serviced. One way to serve more tags is to make use of Tag Groups, Tag Distribution, or run multiple instances of the interface (different Location1). The other (new) way is to use the interface option /EXECDIRECT. Note: The ODBC Error message describing the above-mentioned situation is as follows: [S][HY000]: [Oracle][ODBC][Ora]ORA-01000: maximum open cursors exceeded TOP 10 If it is required to limit the number of returned rows (e.g. to reduce CPU load), there is a possibility to formulate the SQL query with the number representing the maximum rows that will be returned. This option is database specific. Oracle RDB SELECT timestamp,value,status FROM Table LIMIT TO 10 ROWS; SELECT timestamp,value,status FROM Table LIMIT TO 10 ROWS WHERE Timestamp > ?; Note: Having P1=TS, then such a query allows for smooth history recovery after the interface being down for some time. Oracle 8.0 (NT) Similar to the example for Oracle RDB (see above), the statement to select a maximum of 10 records looks as follows: SELECT timestamp,value,status FROM Table WHERE ROWNUM<11; Oracle 8.0, 8i, 9i How to construct a stored procedure that returns a result-set: Two database objects have to be created a PACKAGE and the PROCEDURE: 1) CREATE OR REPLACE PACKAGE myPackage IS TYPE gen_cursor IS REF CURSOR; END myPackage; 2) stored procedure that takes for example the date argument as an input parameter: CREATE OR REPLACE PROCEDURE (cur OUT myPackage.gen_cursor, ts IN date) IS res test.gen_cursor; BEGIN OPEN res FOR SELECT pi_time,pi_value,0 FROM pi_test1 WHERE pi_time > ts; cur := res; END testproc; The interface then executes the tag that defines the query like: {CALL TESTPROC(?)}; P1=TS Note: the above example works only with Oracles ODBC drivers. We have tested it with Oracle9i and ODBC driver 9.00.11.00 dBase III, dBase IV Date and Time Data Type dBase does not have the data type DATETIME (like e.g. MS SQL Server). If sending PI timestamps to dBase, the interface and the ODBC driver will automatically convert the timestamp placeholder from SQL_TIMESTAMP into SQL_VARCHAR (the dBase target column has to be TEXT(20)). The other way around is not that simple. Actually it is not possible to read a timestamp from a TEXT field because the required ODBC function CONVERT does not support SQL_VARCHAR into SQL_TIMESTAMP. However a workaround is possible: Use the dBase database as linked table from within MS Access. Now we can use the MS Access ODBC driver which unfortunately also does not support CONVERT from SQL_VARCHAR into SQL_TIMESTAMP, but has a function available called CDATE(). The following query works for string columns e.g. TEXT(20) in dBase with the format DD-MMM-YY hh:mm:ss : SELECT CDATE(Timestamp), Value, Status FROM Table WHERE CDATE(Timestamp) > ?; P1=TS ODBC drivers used: Microsoft dBase Driver 4.00.4403.02 Microsoft Access Driver 4.00.4403.02 Login dBase works without Username and Password. In order to get access from the interface a dummy username and password must to be used in the startup line. /user_odbc=dummy /pass_odbc=dummy Multi-User Access The Microsoft dBase ODBC driver seems to lock the dBase tables. That means no other application can access the table at the same time. We did not look for workarounds, other than the MS Access linked table. MS Access Login MS Access can also be configured without Username and Password. In order to get access from the interface a dummy username and password have to be used in the startup line. /user_odbc=dummy /pass_odbc=dummy Slowdown in statement preparation for more than 50 tags ODBC drivers used: MS Access ODBC driver 4.00.5303.01 The ODBC driver shows a decrease in performance that depends on the number of open statements. Using the prepared execution (default setting), this is equivalent to the number of tags that hold a SQL query. For more than (roughly) 50 ODBC statements concurrently prepared we see a significant slowdown in speed during preparation of additional statements. The slowdown continues till the interface virtually stops. The solution is using the /EXECDIRECT start-up parameter forcing the interface to free the statements after the execution. An alternative way is to use OLE DB for Jet 4.0 and an ODBC driver for OLE DB (e.g. Attunity Connect) on top. TOP 10 The statement for selecting a maximum of 10 records looks as follows: SELECT TOP 10 timestamp,value,status FROM Table; MS SQL Server 6.5, 7.0, 2000 DATETIME Data Type Only the DATETIME data type represents the date and time implementation. The slightly misleading name TIMESTAMP, another MS SQL Server supported data type, is a database-wide unique number that cannot be bound to the interface time related placeholders (TS, ST,). TOP 10 The statement for selecting a maximum of 10 records looks as follows: SELECT TOP 10 timestamp,value,status FROM Table; SET NOCOUNT ON Should the stored procedure on MS SQL Server contain more complex T-SQL code, containing e.g. a combination of INSERT and SELECT statements, the SET NOCOUNT ON setting is preferable. The DML statements (INSERT,UPDATE,DELETE) then do NOT return the number of affected rows as a result set that in combination with the result set from a SELECT statement confuse the interface: CREATE PROCEDURE sp_RDBMSPI1( @name varchar(30), -- tag name @TS datetime -- timestamp ) AS SET NOCOUNT ON INSERT pi_rdbms VALUES(@name,@TS) SELECT pi_time,pi_value,0 FROM pi_table1 WHERE pi_tagname = @name and pi_time > @TS CA Ingres II Software Development Kit The ODBC driver which comes with the Ingres II Software Development Kit does not work for this interface. This is due to the fact that the ODBC driver expects the statements being re-prepared before getting executed even if the ODBC driver reports SQL_CB_CLOSE when checking SQL_CURSOR_COMMIT_BEHAVIOR. That means that the ODBC driver is inconsistent with the ODBC specification. Other ODBC drivers for Ingres II may still work. Alternatively it is possible to set the /EXECDIRECT start-up switch. IBM DB2 (NT) Statement Limitation There is a limitation on the number of statements that can be open concurrently (prepared ODBC execution) for the version 7.1. The limitation only allowed 100 concurrently prepared ODBC statements after the DB2/NT installation. It is nevertheless possible to increase this value via a corresponding DB2 database parameter (applheapsz via the DB2 Control Center: Configure (right clicking the particular database instance) (Performance(Application heap size) ODBC drivers used: IBM DB2 (NT) 07.01.0000 ODBC Driver 06.01.0000 To overcome this limitation use Tag Groups or Tag Distribution strategies, or run multiple instances of the interface. The other (new) way is to use the interface option /EXECDIRECT. Note: The ODBC Error message describing the situation is as follows: [S][57011]: [IBM][CLI Driver][DB2/NT] SQL0954C Not enough storage is available in the application heap to process the statement. SQLSTATE=57011 Informix (NT) ODBC drivers used: Informix 07.31.0000 TC5 (NT) 02.80.0008 2.20 TC1 Error while ODBC Re-Connection An access violation in the Informix ODBC driver DLL was experienced when the Informix RDBMS was shut down during the interface operation. Sybase ASE 12.0 (NT) ODBC drivers used: Sybase ASE 12.0 (NT) 12.00.0000 ODBC Driver 3.50.00011 Paradox ODBC drivers used: Paradox, 5.x ODBC Driver 4.00.5303.01 BDE (Borland Database Engine) 5.0 Error when ALIASES used in WHERE clause Following query returns runtime errors: SELECT Timestamp AS PI_TIMESTAMP,Value,0 FROM Table WHERE PI_TIMESTAMP > ?; P1=TS [S][07002]: [Microsoft][ODBC Paradox Driver] Too few parameters. Expected 2. We recommend not using aliases. MS Visual FoxPro 6.0 ODBC drivers used: MS Visual FoxPro 6.01.8629.01 More Examples Insert or Update A usual request is to keep a copy of current snapshot values in a relational table. The problem is that the query must decide between INSERT and UPDATE. If the tag already has a record in the table, UPDATE is required. If there is no record for this tag yet, INSERT has to be used. Unfortunately the SQL language does not provide any ifthen mechanisms and the usual solution is to write a stored procedure. But there is also a SQL solution to this problem: Use a second table with the same fields as the target table. This dummy table has to have exactly one record that will be updated. To do an INSERT or UPDATE, use the RIGHT JOIN between two tables: Table1 has 2 fields, V1 and P1 Table2 has 2 fields, V1 and P1 Table2 has exactly one data record UPDATE Table1 RIGHT JOIN Table2 ON Table1.P1=Table2.P2 SET Table1.P1=Table2.P1, Table1.V1=Table2.V1 How does it work? The trick itself lies in the RIGHT JOIN. RIGHT JOIN means include all records from the table on the right-hand side (Table2) and those rows from the left-hand table (Table1) where the JOIN condition is met. If the RIGHT JOIN is used with the UPDATE statement, it either writes back a new record (internal INSERT), or the ordinary UPDATE is performed. For use with the RDBMSPI Interface, it is necessary to configure two queries: UPDATE Table2 SET P1=?,V1=?; UPDATE Table1 RIGHT JOIN Table2 ON Table1.P1=Table2.P1 SET Table1.P1=Table2.P1, Table1.V1=Table2.V1; The following example inserts a new record into the PI_INSERT_UPDATE table only if the sinusoid event arrives in a minute that has no related record yet. If all (60) samples are inserted in the PI_INSERT_UPDATE table, only updates occur (overwrites existing rows). Thus and if sinusoid has at least one event per minute, the PI_INSERT_UPDATE table holds sinusoid events from the last 60 minutes only. ( Example available in  HYPERLINK \l "_Appendix_A_Examples" Appendix A Examples,  HYPERLINK \l "_Example_6.1__last one hour of Sin" Example 6.1 last one hour of Sinusoid PI Point Configuration A PI point corresponds to a single parameter in the interfaced system. For example, a counter, a set point, a process variable, and the high and low control limits would each serve as a separate point in the PI System database. Each of these points must be defined and configured individually using PIDIFF, PICONFIG or the PI-SMT Excel Add-In. For more information regarding point configuration, see the Data Archive (DA) section of the PI System Manual. The following point attributes are relevant to configure tags used with the RDBMS to PI Interface. Tag A tag is a label or name for a point. Any tag name can be used in accordance to the normal PI point naming conventions. Extended Descriptor For a PI 3 Server, the extended descriptor is limited to 1024 characters (UNIINT/interface limitation, not PI3 limitation). The RDBMSPI Interface stores SQL query definition, defines placeholders and various keywords there. The following table summarizes all the possibilities: KeywordExampleRemark/ALIAS/ALIAS=Level321_in or /ALIAS=Tag123 Alias (support for white spaces)Used for DISTRIBUTOR strategy. This allows having different point names in RDBMS and in PI./EXD/EXD=D:\PIPC\...\PLCHLD1.DEFAllows getting over the 80-character limit (PI2) of the Extended Descriptor. (Suitable for tags with more placeholders.)/SQL/SQL=SELECT TIMESTAMP, VALUE, STATUS FROM TABLE WHERE TIMESTAMP >?; P1=TSSuitable for short SQL statements. Allows the on-line statement changes (sign-up-for-updates) to be immediately reflected. The actual statement should be double-quoted and the ending semicolon is mandatory./TRANSACT/TRANSACTEach transaction is explicitly committed or rolled back. It switches off the AUTOCOMMIT mode for this statement./EVENT or /TRIG/EVENT=sinusoid /EVENT=tag name with spaces /EVENT=tag name, /SQL=SELECT; special: /EVENT=sinusoid conditionUsed for event driven input points. Each time the particular event point changes the actual point is processed. Comma is used to divide the /EVENT keyword and possible following definition. An optional condition keyword can be specified in order to filter input events (trigger conditions). The keywords in the following table can be used to specify trigger conditions. Event ConditionDescriptionAnychangeTrigger on any change as long as the value of the current event is different than the value of the previous event. System digital states also trigger events. For example, an event will be triggered on a value change from 0 to Bad Input, and an event will be triggered on a value change from Bad Input to 0. IncrementTrigger on any increase in value. System digital states do not trigger events. For example, an event will be triggered on a value change from 0 to 1, but an event will not be triggered on a value change from Pt Created to 0. Likewise, an event will not be triggered on a value change from 0 to Bad Input.DecrementTrigger on any decrease in value. System digital states do not trigger events. For example, an event will be triggered on a value change from 1 to 0, but an event will not be triggered on a value change from Pt Created to 0. Likewise, an event will not be triggered on a value change from 0 to Bad Input.NonzeroTrigger on any non-zero value. Events are not triggered when a system digital state is written to the trigger tag. For example, an event is triggered on a value change from Pt Created to 1, but an event is not triggered on a value change from 1 to Bad Input. PI Batch Subsystem related placeholders: KeywordExampleRemark/BA.ID /BA.ID=Batch1Wildcard string of PIBatchID to match; defaults to "*"./BA.GUID/BA.GUID=16-bytes GUIDExact Unique ID of PIBatch object/BA.PRODID/BA.PRODID=Product1Wildcard string of Product to match; defaults to "*"./BA.RECID/BA.RECID=Recipe1Wildcard string of Recipe name to match; defaults to "*"./BA.START/BA.START=*-3dSearch start time in PI time format./BA.END/BA.END=*Search end time in PI time format./UB.BAID/UB.BAID=Batch1Wildcard string of PIBatchID (Unit Batches) to match. Defaults to *./UB.GUID/UB.GUID=16-bytes GUIDUnique id of PIUnitBatch/UB.MODID/UB.MODID=Module1Wildcard string of a PIModule name to match. Defaults to *./UB.MODGUID/UB.MODGUID=16- bytes GUIDUnique id of PIModule/UB.PRODID/UB.PRODID=Product1Wildcard string of Product to match. Defaults to *./UB.PROCID/UB.PROCID=Procedure1Wildcard string of ProcedureName to match. Defaults to *./SB.ID/SB.ID=SubBatch1Wildcard string of PISubBatch name to match. Defaults to *./UB.START/UB.START=*-10dSearch start time in PI time format./UB.END/UB.END=*Search end time in PI time format./SB_TAG/SB_TAG=TagnameControl tag for PISubBatch INSERTPointSource The Point Source is a single, unique character that is used to identify the PI point as a point that belongs to a particular interface. For additional information, see the  REF _Ref517771623 \h  \* MERGEFORMAT /ps=Scommand-line argument. Note: See in addition Location1 parameter interface instance number. PointType Typically, device point types do not need to correspond to PI point types. For example, integer values from a device can be sent to floating-point or digital PI tags. Similarly, a floating-point value from the device can be sent to integer or digital PI tags, although the values will be truncated. The interface supports the following PI point types: PointTypeHow It Is UsedDigitalUsed for points whose value can only be one of several discrete states. These states are predefined in a particular state set (PI 3.x).Int1615-bit unsigned integers (0-32767)Int3232-bit signed integers (-2147450880 2147483647)Float16Scaled floating-point values. The accuracy is one part in 32767Float32Single-precision floating point values.Float64Double-precision floating point values. StringStores string data of up to 1000 characters.For more information on the individual point types, see PIDataArchiveforNT and UNIX. Scan By default, the Scan attribute has a value of 1, which means that scanning is turned on for the point. Setting the scan attribute to 0 turns scanning off. If the scan attribute is 0 when the interface starts, SCAN OFF will be written to the PI point. If the scan attribute is changed from 1 to 0 while the interface is running, SCANOFF will also be written to the PI point after the point edit is detected by the interface. There is one other situation, which is independent of the Scan attribute, where the interface will write SCAN OFF to a PI point. If a point that is currently loaded by the interface is edited so that the point is no longer valid for the interface, the point will be removed from the interface, and SCAN OFF will be written to the point. For example, if the Point Source of a PI point that is currently loaded by the interface is changed, the point will be removed from the interface and SCAN OFF will be written to the point. InstrumentTag This is the filename containing the SQL statement(s). The file location is defined in a start-up parameter by the /SQL= directory path. The file is only evaluated when the pertinent tag gets executed for the first time, and after each point attribute change event. If the SQL statement(s) needs to be changed during the interface operation, we recommend editing any of the PI point attributes. It forces the interface to re-evaluate the tag in terms of closing the opened SQL statement(s) and re-preparing the new statement(s) again. The InstrumentTag attribute can be up to 1024 character long. SourceTag Output points control the flow of data from the PI Data Archive to any destination that is external to the PI Data Archive, such as a PLC or a third-party database. For example, to write a value to a register in a PLC, one would use an output point. Each interface has its own rules for determining whether a given point is an input point or an output point. There is no de facto PI point attribute that distinguishes a point as an input point or an output point. Outputs are triggered for UniInt-based interfaces. That is, outputs are typically not scheduled to occur on a periodic basis. For RDBMSPI a separate trigger point must be configured. The output point must have the same point source as the interface. The trigger point can be associated with any point source, including the point source of the interface. Also, the point type of the trigger point does not need to be the same as the point type of the output point. The output point is associated with the trigger point by setting the Source Tag attribute of the output point equal to the tag name of the trigger point. An output is triggered when a new value is sent to the Snapshot of the trigger point. The new value does not need to be different than the previous value that was sent to the Snapshot to trigger an output, but the timestamp of the new value must be more recent than the previous value. If no error is indicated, then the value that was sent to the trigger point is also written to the output point. If the output is unsuccessful, then an appropriate digital state that is indicative of the failure is usually written to the output point. If an error is not indicated, the output still may not have succeeded because the interface may not be able to tell with certainty that an output has failed. Note: In case of an ODBC call failure the output tag will receive the status BadOutput. Location1 This is the number of the interface process that collects data for this tag. The interface can run multiple times and therefore distribute the CPU power evenly. In other words it allows further division of points within one Point Source. The Location1 parameter should match the parameter /IN in the startup file. Note: It is possible to start multiple interface processes on different PI Nodes. But then a separate Software License for the interface is required per PI Node. Location2 The second location parameter specifies if all rows of data returned by a SELECT statement should be written into the PI database, or if only the first row is sent. The rest skipped. Note: For Tag Groups, the master tag will define this option for all tags in a group. It is not possible to read only the first record for one group member and all records for another one. Note: For Tag Distribution, the interface examines the whole result-set regardless of the Location2 value. Location2Data Acquisition Strategy0Only the first record is valid (except for the Tag Distribution Strategy)1The interface fetches and sends all data in the result-set to PINote: It is recommended to provide a timestamp field when trying to send all retrieved rows from RDBMS to PI. If not provided, the interface fills in the execution time. The data ends up with the same timestamp then. Location3 The third location parameter specifies the Distribution Strategy - how the selected data will be interpreted and sent to PI: Location3Data Acquisition Strategy0SQL query populates a Single Tag> 0Location3 represents the column number of a multiple field query Tag Groups-1Tag Distribution (Tag name or Tag Alias name must be part of the result set)-2RxC Distribution (multiple tag names or tag aliases name must be part of the result set)Location4 Scan-based Inputs For interfaces that support scan-based collection of data, Location4 defines the scan class for the PI point. The scan class determines the frequency at which input points are scanned for new values. See  REF _Ref497095733 \h  \* MERGEFORMAT /f=SS description for more details. Trigger-based Inputs, Unsolicited-inputs, and Output Points Location 4 should be set to zero for these points. Location4Type of EvaluationPositive numberIndex to the position of /f= startup parameter keyword (scan class number)0Event based output and event based input-1Specifies the managing tag for recording of PIPOINT changes in the short form. See section  REF _Ref517773349 \h  \* MERGEFORMAT Recording of PI POINT Database Changes for more details.-2Specifies the managing tag for recording of PIPOINT changes in the full form. See section  REF _Ref517773349 \h  \* MERGEFORMAT Recording of PI POINT Database Changes for more details.Location5 Input Tags If Location5 = 1 the interface bypasses the exception reporting, for sending data to PI it then uses the pisn_putsnapshot() function. Out-of-order data always goes directly to the archive, calling the function piar_putarcvaluex(ARCREPLACE). Out-of-order data means newvalue.timestamp < prevvalue.timestamp. Output Tags Location5 is not evaluated. Location5Behavior0The interface does the Exception Reporting in the standard way. Out of order data is supported but existing archive values cannot be replaced. For PI points of type String and Blob, Exception Deviation>0 means sending only changes to PI (assuming ExcMax!=0).1The interface gives up the Exception Reporting. Each retrieved value is sent to PI ; Existing archive values (same timestamp) are replaced (piar_putarcvaluex(ARCREPLACE)). For PI3.3+ servers also the existing Snapshot data (the current value of a tag) is replaced. For PI2 and PI3.2 (or earlier) systems Snapshot values cannot be replaced. In this case the new value is added and the old remains. Typical usage for Lab Data Note: When there are more events in the archive at the same timestamp, and the piar_putarcvaluex(ARCREPLACE) is used (for out-of-order-data), only one event is overwritten the first one entered!Shutdown For information on configuring shutdown events, see PI Data Archive Manual I. Unused Attributes The interface does not use the following tag attributes Conversion factor Filter code Square root code Total code UserInt1,2 UserReal1,2 Time Zone and Daylight Savings The interface supports a PI Server being in a different Time Zone and/or different DST setting than RDBMS and PI interface Node. This assumes that the timestamps located in the RDBMS tables have the same Time Zone and/or DST meaning as the settings of the operating system tell. ODBC has no standard way of telling about the Time Zone and/or DST setting of the connected RDBMS. Therefore no timestamp conversion can be applied via ODBC. The standard method is to use the same settings for the interface node as for the RDBMS system. For various reasons many RDBMS systems are running without DST setting. A valid scenario could then be to set the interface node also to DST off, while the PI Server and other PI Clients can use their own independent setting. The PI interface node running the interface will take care on the timestamp conversion means finally that the PI Archive gets UTC timestamps. Another scenario we found at customer sites is to declare (by definition) the RDBMS timestamps as UTC timestamps independent of the local operating system settings for Time Zone and/or DST. The interface supports this scenario by a special startup switch /utc. Timestamps that cross the interface are calculated to UTC back and forth. Note: Because of required new Extended PI-API functions that do time zone calculations automatically, the interface requires PI-API version 1.3.x or above! Note: Parameters and Fields affected by interface specific timestamp transformation are also affected. For example AT.CHANGEDATE, AT.CREATIONDATE, BA.START, BA.END. Startup Command File PI-Interface Configuration Utility on NT The PI-Interface Configuration & Management Utility is an application that aids in PI System management by consolidating the setup and configuration options required for new and existing PI interfaces. Any new or existing PI interface can be configured and maintained using PI-ICU. PI-ICU uses the PI-Module Database on the PI Server as a host for its interface startup information, so PI 3.3 is required on the host PI server. In order to access the interface startup information stored in the Module Database, PI-SDK 1.1 must be installed on the machine where the interface/PI-ICU run. Version Requirements PI Host Server (PI Home Node) PI 3.3.361.43 or greater PI-ICU/interface Node Windows NT 4/2000/XP PI-SDK 1.1.0.142 or greater (installed by the PI-ICU setup) Functions PI-ICU includes a series of concise dialogs and tab sheets that allow the user to: Set all interface parameters Start and stop the interface interactively or as a service View and configure interface service dependencies Configure and run PI-Buffer Server application Configure and run PI-Log Server application Options PI-ICU also includes an assortment of tools and options that allow the user to: Manage multiple PI interfaces Quickly find and view the PIPC log files Execute interface configuration diagnostics Run BufUtil Buffering utility (Not recommended for this interface.) PI-ICU RDBODBC Control on NT The PI-ICU for the rdbmspi interface is a graphical interface utility that assists the user in creating the interface startup file, amongst other things.  The rdbodbc control for PI-ICU has several sections. Yellow indicates that an invalid value has been entered, or that a required value has not been entered. Scan Class Rate Tags Scan class: Select your scan class that you want a rate tag for. I/O Rate Tag Select the rate tag for this scan class. Recovery Recovery Select your output recovery mode, possible options are: NO_REC, TS, and SHUTDOWN. Recovery_TIme Maximum length of time to recover. The interaction of these 2 options is best described in the following table: /recovery=BehaviorSHUTDOWNIf Shutdown or I/O Timeout digital states are encountered, the interface goes back into the PI archive either starting at /recovery_time (when Shutdown or I/O Timeout timestamp is older than /recovery_time ) or starts the recovery at the time of the last event (Shutdown or I/O Timeout). Note: If no Shutdown or I/O Timeout event is encountered, no recovery activity occurs.TSStarts the recovery from /recovery_time=reltime time or from the last snapshot of the output point if this is later.NO_RECDefault value. No recovery takes place. The /recovery_time keyword is ignored.File Locations Global SQL Full path to the global SQL variable file Log Full path to the interface specific log file Sql Directory of the SQL statement files DSN Settings DSN Data Source Name Username Username for access to the DSN Password Password for access to the DSN Successful Status Range Select the range of Successful status strings from the system digital state table. Bad Input Status Range Select the range of Bad Input status strings from the system digital state table. Times are UTC If this is specified, the interface expects the incoming timestamp values (from RDBMS) in UTC and outgoing timestamps are converted to UTC - all the timestamp related placeholders (TS, ST, LST, LET) are transformed. To do a correct transformation it is required that Time Zone and DST settings of the interface node are valid. No Input errors Suppresses writing the BAD_INPUT, IO_TIMEOUT digital states when a runtime error occurs Direct SQL Execution This argument forces the direct SQL statement execution. All SQL statements are prepared, bound and executed each time they are scheduled for execution. The default is to prepare and bind once, execute many. Debug Level The interface prints additional information into the interface specific log file, depending on the debug level used. The amount of log information increases with the debug number as follows: Debug levelOutput0Normal interface operation, print out important error messages (e.g. data loss) and relevant information. Examples: connection loss, tag rejected due to wrong configuration,1Additional information about interface operation Examples: ODBC related info, ODBC environment and connection attribute settings2Information about errors that are handled by the interface and will not cause any data loss Examples: protocol errors which were recovered by retry function3Prints out the original data (raw values received by ODBC fetch calls per tag and scan).This helps to trace a data type conversion or other inconsistencies.4Prints out the actual values before sending them to PI (values used in pisn_sendexceptions function per tag and scan).5Prints out relevant subroutine markers, the program runs through. Only for onsite test purposes! Potentially huge print out! Additional Arguments The Additional Arguments section is provided for any flags that may be required in the future. For NT, the startup command file names have a .bat extension. The NT continuation character (^) allows one to use multiple lines for the startup command. The maximum length of each line is 1024 characters (1 kilobyte). The number of flags is unlimited, and the maximum length of each flag is 1024 characters. Command-line arguments can begin with a /. Command-Line Parameters Mandatory Command Line Switches - Summary ParameterMeaningRemark/dsn=dsn_nameData Source Name/f=SS /f=SS,SS /f=HH:MM:SS /f=HH:MM:SS,hh:mm:ssScan Class FrequencyAt least one /f= must be defined/output=d:\\rdbmspi.loginterface specific log file name and locationIf the path contains spaces the argument has to be quoted: /output=d:\program files\rdbmspi.log/ps=SPoint Source/user_odbc=username_odbcUsername for RDBMS access Case sensitive evaluation Optional Command Line Switches - Summary ParameterMeaningRemark/bad1=121Index pointing to the beginning of the range (in the system digital state table) that contains Bad Input status stringsDefault - 0 /bad2=130Index pointing to the end of the range (in the system digital state table) that contains Bad Input status stringsDefault - 0/deb=1Debug LevelDefault - 0/ec=21Event Counter. /erc=10Number of consecutive occurring errors that causes the interface tries to de-allocate all ODBC statements and attempts to re-connect the RDBMS.Default (not specified) interface uses the ODBC error codes for finding out if a runtime error is connection specific, and re-connects, if it is./execdirectDirect SQL statement execution (using SQLExecDirect())/global=c:\\glb.datFull path to the global variable file/h, /?Prints a summary of command line options./host=host:portPI Home NodeDefault default PI server specified for the PI-SDK/in=1 or /id=1interface number (Location1)Default 1/no_input_errorSuppresses writing the BAD_INPUT, IO_TIMEOUT digital states when a runtime error occursDefault writes BAD_INPUT, IO_TIMEOUT in case of any runtime error/pass_odbc=passw_odbcPassword for RDBMS access Case sensitive evaluation/pass_pi=password_piPassword for PI Server access Case sensitive evaluation/perf=8Specifies the interval between output of performance summary information in hours. If zero is specified, no performance summaries will be done./recovery=ShutdownRecovery flag. Possibilities are SHUTDOWN and TSDefault No Recovery/recovery_time=*-8 h or /recovery_time=*-1d or /recovery_time=*-1h,* or /recovery_time= 01-Jan-02 15:00:00, 31-Jan-02 15:00:00In conjunction with the recovery flag it determines the maximum amount of time for going back into the archive. The time syntax is in PI Time Format. (See the Data Archive Manual for more information on the PI time string format.) If the pattern is: /recovery_time=start time ,end time all output points are processed for the given interval. Events are taken from the PI archive. After processing all output points the interface exits.Default No Recovery/snOverrides exception reporting with snapshot reporting. Use the snapshot call instead of the pisendexceptions call to send values to the PI database.Effects Location5=0 tags/sql=d:\\datLocation of the SQL statement files/stopstat or /stopatat=digstate If the /stopstat flag is present on the startup command line, then the digital state IntfShut will be written to each PI Point when the interface is stopped. If /stopstat=digstate is present on the command line, then the digital state digstate will be written to each PI Point when the interface is stopped. Default IO Timeout/succ1=100Index pointing to the beginning of the range (in the system digital state table) that contains Success status stringsDefault - 0 /succ2=120Index pointing to the end of the range (in the system digital state table) that contains Success status stringsDefault - 0 /tf=tagnameQuery rate tag per scan Similar to EventCounter, but counts the number of executed queries./updateinterval=10Adjust the minimum interval (in seconds) with which the interface checks for point updates.The default interval is 120 seconds, the minimum interval is 1 second, and the maximum interval is 300 seconds/user_pi=username_piAccount for PI access (case sensitive evaluation)Default piadmin Since version 3.1 when this flag is NOT present, the interface does not log in, and relies on entries in the PI trust table./utcExpects the incoming RDBMS timestamp in UTC (input points) as well as timestamp values read from PI are forwarded in UTC (placeholder concept)Default no UTC transformation/vPrint the versions of PI-API and UNIINT.Detailed Description of the Command Line Parameters /bad1 Defines the start of bad value area filled with strings representing the BAD statuses. See section  REF _Ref497012660 \h  \* MERGEFORMAT Evaluation of STATUS Field Data Input. /bad2 Defines the end of bad value area filled with strings representing the BAD statuses. See section  REF _Ref497012660 \h  \* MERGEFORMAT Evaluation of STATUS Field Data Input. /deb=0 The interface prints additional information into the interface specific log file, depending on the debug level used. The amount of log information increases with the debug number as follows: Debug LevelOutput0Normal interface operation, print out important error messages (e.g. data loss) and relevant information. Examples: connection loss, tag rejected due to wrong configuration,1Additional information about interface operation Examples: ODBC related info, ODBC environment and connection attribute settings2Information about errors that are handled by the interface and will not cause any data loss Examples: protocol errors which were recovered by retry function3Prints out the original data (raw values received by ODBC fetch calls per tag and scan).This helps to trace a data type conversion or other inconsistencies.4Prints out the actual values before sending them to PI (values used in pisn_sendexceptions function per tag and scan).5Prints out relevant subroutine markers, the program runs through. Only for onsite test purposes! Potentially huge print out! Note: The interface has an internal limitation on the length of the print out debug information. The limitation is 1400 characters. Use the /deb=n cautiously! Once you are confident with your configuration and query execution, go back to /deb=0. /dsn=Oracle8 Data source name created via ODBC administrator utility, found on the Windows Control Panel. We do only support Machine Data-sources and preferably System Data-sources. If the interface is installed as Service, only System Data-sources will work! For more information on how to setup a DSN, please see your 32bit ODBC Administrator Help file (Control Panel) or the documentation of your ODBC driver. /ec = 21 The first instance of the /ec flag on the command line is used to specify a counter number, x, for an I/O Rate point. If x is not specified, then the default event counter is 1. Also, if the /ec flag is not specified at all, there is still a default event counter of 1 associated with the interface. If there is an I/O Rate point that is associated with an event counter of 1, each copy of the interface that is running without /ec=x explicitly defined will write to the same I/O Rate point. This means that one should either explicitly define an event counter other than 1 for each copy of the interface or one should not associate any I/O Rate points with event counter 1. For additional configuration information regarding IORates, see the section entitled  REF _Ref510415720 \h  \* MERGEFORMAT I/O Rate Tag Configuration. /erc=10 Defines the number of consecutive errors that, if exceeded, causes the interface to reconnect to the RDBMS independent on the return code of the ODBC function. This start-up switch was implemented because of indeterminate behavior of some ODBC drivers, when the communication line was disconnected. /execdirect This argument forces the direct SQL statement execution. All SQL statements are prepared, bound and executed each time they are scheduled for execution. The default is prepare and bind once, execute many. /f=SS /f=SS,ss /f=HH:MM:SS /f=HH:MM:SS,hh:mm:ss The /f flag defines the time period between scans in terms of hours (HH), minutes (MM), and seconds (SS). The scans can be scheduled to occur at discrete moments in time with an optional time offset specified in terms of hours (hh), minutes (mm), and seconds (ss). If HH and MM are omitted, then the time period that is specified is assumed to be in seconds. Each instance of the /f flag on the command line defines a scan class for the interface. There is no limit to the number of scan classes that can be defined. The first occurrence of the /f flag on the command line defines the first scan class of the interface, the second occurrence defines the second scan class, and so on. PI Points are associated with a particular scan class via the Location4 PI Point attribute. For example, all PI Points that have Location4 set to 1 will receive input values at the frequency defined by the first scan class. Similarly, all points that have Location4 set to 2 will receive input values at the frequency specified by the second scan class, and so on. Two scan classes are defined in the following example: /f=00:01:00,00:00:05 /f=00:00:07 or, equivalently: /f=60,5 /f=7 The first scan class has a scanning frequency of 1 minute with an offset of 5seconds, and the second scan class has a scanning frequency of 7seconds. When an offset is specified, the scans occur at discrete moments in time according to the formula: scan times = (reference time) + n(frequency) + offset where n is an integer and the reference time is midnight on the day that the interface was started. In the above example, frequency is 60seconds and offset is 5 seconds for the first scan class. This means that if the interface was started at 05:06:06, the first scan would be at 05:06:10, the second scan would be at 05:07:10, and so on. Since no offset is specified for the second scan class, the absolute scan times are undefined. The definition of a scan class does not guarantee that the associated points will be scanned at the given frequency. If the interface is under a large load, then some scans may occur late or be skipped entirely. See the section called Performance Point Configuration for more information on skipped or missed scans. Sub-second Scan Classes One can also specify sub-second scan classes on the command line such as /f=0.5 /f=0.1 where the scanning frequency associated with the first scan class is 0.5seconds and the scanning frequency associated with the second scan class is 0.1 seconds. Similarly, sub-second scan classes with sub-second offsets can be defined, such as /f=0.5,0.2 /f=1,0 Wall Clock Scheduling Scan classes that strictly adhere to wall clock scheduling are now possible. This feature is available for interfaces that run on NT and/or UNIX. Previously, wall clock scheduling was possible, but not across daylight savings time. For example, /f=24:00:00,08:00:00 corresponds to 1 scan a day starting at 8 AM. However, after a Daylight Savings Time change, the scan would occur either at 7 AM or 9 AM, depending upon the direction of the time shift. To schedule a scan once a day at 8 AM (even across daylight savings time), one should use /f=24:00:00,00:08:00,L. The ,L at the end of the scan class tells UniInt to use the new wall clock scheduling algorithm. /global = c:\pipc\interfaces\rdbmspi\sql\globals.dat Points to the filename that contains the definition of global variables. See section  REF bkmkGlobal \h  \* MERGEFORMAT Global Variables. /host = host:port The /host flag is used to specify the PI Home node. host is the IP address of the PI Sever node or the domain name of the PI Server node. port is the port number for TCP/IP communication. The port is always 5450 for a PI3Server and 545 for a PI 2 Server. It is recommended to explicitly define the host and port on the command line with the /host flag. Nevertheless, if either the host or port is not specified, the interface will attempt to use defaults. Defaults: The default port name and server name is specified in the pilogin.ini or piclient.ini file. The piclient.ini file is ignored if a pilogin.ini file is found. Refer to the PIAPIInstallation Instructions manual for more information on the piclient.ini and pilogin.inifiles. Examples: The interface is running on a PI interface node, the domain name of the PI3home node is Marvin, and the IP address of Marvin is 206.79.198.30. Valid /host flags would be: /host=marvin /host=marvin:5450 /host=206.79.198.30 /host=206.79.198.30:5450  CAUTION The configuration of using the PI-ODBC driver as data source (DSN) is NOT ALLOWED. PI-API will finally only talk to one server (the one PI-ODBC is connected to). /in = 1 (or /id=1) interface number. It corresponds to the Location1 of a tag. Tags that match the point source (e.g. /ps=S) and do not have a match in Location1 are NOT serviced by this instance of the interface. /no_input_error This suppresses writing IO_TIMEOUT and BAD_INPUT on scan based input tags, event based input tags and orphan input tags (distributed tags, getting data from master tag), when any runtime error occurs or ODBC connection is lost. Background: Example: SELECT time,value,0 WHERE time>?; P1=TS ? will be updated during run-time with the latest timestamp already read. Now if the interface runs into a communication problem, it normally writes "I/O Timeout" to all tags. The latest timestamp will be now the one of "I/O Timeout" (Problem!). The next query will miss all values between the last real data timestamp and the "I/O Timeout" timestamp. /output = c:\pipc\interfaces\rdbmspi\sql\rdbmspi.log The interface generates output messages into the given log-file. In order to NOT overwrite a previous log-file after restart, the interface renames the previous log-file to log-file.log;n, where n is a consecutive number. Note: System administrator should delete old log-files to conserve disk space. /pass_odbc Password for the ODBC connection. If this parameter is omitted, the standard ODBC connect dialogue prompts the user for the user name and password. This will avoid the situation having the password stored in a startup BAT file (readable by everyone). The password has to be entered only once. On all future startups the interface will remember the password from an encrypted file. This encrypted file has the name of the log-file (defined by /output=full_path) and the file extension is ODBC_PWD. The file is stored in the same directory as the output file. Example of relevant start-up arguments: /in=2 /output=c:\pipc\interfaces\rdbmspi\logs\rdbmspi.log Encrypted password is stored in: c:\pipc\interfaces\rdbmspi\logs\rdbmspi.ODBC_PWD If the interface runs as a service, it has to be called at least once in the interactive mode, in order to specify the password and let the interface create the encrypted file. The file can be deleted any time and the interface will prompt for a new password after next interactive startup. Note: The interface fails to start as a service if it does not find a valid password-file (and not having the /pass_odbc= password specified in the start-up file). Databases like MS Access or dBase may not always have security set up. In this case a dummy username and password must be used, e.g /pass_odbc=dummy. /pass_pi The password for piadmin account (default) or for the account set by /user_pi parameter. As an alternative, you can wait for the logon prompt and enter the password when it runs in console mode. This will avoid the situation to have a password stored in a startup BAT file. The password has to be entered only once. In the course of all future startups, the interface will remember the password from an encrypted file. This encrypted file has the name of the log-file file (defined by /output=full_path) and the file extension is PI_PWD. The file is stored in the same directory as the output log-file. Example: /in=2 /output=c:\pipc\interfaces\rdbmspi\logs\rdbmspi.log The encrypted password is stored in: c:\pipc\interfaces\rdbmspi\logs\rdbmspi.PI_PWD If the interface runs as a service, it has to be called at least once in the interactive mode in order to specify the password and let the interface create the encrypted file. The file can be deleted any time and the interface will prompt for a new password after next interactive startup. Note: In order to achieve a connection with the PI Server, the file PILOGIN.INI must contain a reference to that PI Server. The interface automatically adds a new server to the local list of servers (in PILOGIN.INI) supported by the pilogin DLL. Since this version of the interface is also based on PI-SDK, make sure that the requested PI Server is also defined in the PI-SDK server list. /ps=S Specifies the point source of the tags the interface will operate with. /recovery This start-up flag determines how to handle output points during the start-up. According to this parameter setting, the interface goes into the PI archive to reprocess events of the SourceTag. SQL statement(s) is then executed for each event retrieved from PI archive. Note: A tag edit of an output tag will also trigger recovery, but for this tag only. /recovery=BehaviorSHUTDOWNIf Shutdown or I/O Timeout digital states are encountered, the interface goes back into the PI archive either starting at /recovery_time (when Shutdown or I/O Timeout timestamp is older than /recovery_time ) or starts the recovery at the time of the last event (Shutdown or I/O Timeout). Note: If no Shutdown nor I/O Timeout event is encountered, no recovery activity occurs.TSStarts the recovery from /recovery_time=reltime time, or from the last snapshot of the output point if this is later.NO_RECDefault value. No recovery takes place. The /recovery_time keyword is ignored. !!! When the /recovery_time definition contains the start time, end time (and there is no /recovery flag, or /recovery flag=NO_REC in start-up parameters), then the interface DOES the recovery, retrieving the compressed data on the defined interval, and sending it into RDBMS REGARLESS of the snapshot timestamp of the output point.  Note: Remember, the output point contains a copy of all data successfully downloaded from the source point. The current snapshot of the output point therefore marks the last downloaded value. /recovery_time Is used in conjunction with the /recovery flag, and sets the maximum time to go back into PI archive. Example: /recovery_time=*-1d If the end time is specified: /recovery_time=*-2h,*-1h the interface only processes the output points for the specified period and stops. In this case is the /recovery flag taken into account as well. See the table above for more detailed description. /sql=c:\pipc\Interfaces\rdbmspi\sql Points to the destination where the SQL ASCII files reside. /stopstat If the /stopstat flag is present on the startup command line, then the digitalstate I/O Timeout will be written to each PI Point when the interface is stopped. If /stopstat=digstate is present on the command line, then the digital state, digstate, will be written to each PI Point when the interface is stopped. For a PI 3 Server, digstate must be in the system digital state table. For a PI2Server, where there is only one digital state table available, digstate must simply be somewhere in the table. UniInt uses the first occurrence in the table. If neither /stopstat nor /stopstat=digstate is specified on the command line, then no digital states will be written when the interface is shut down. Examples: /stopstat=Intf shut The entire parameter is enclosed within double quotes when there is a space in digstate. /succ1 Defines the start of successful area filled with strings representing the OK statuses. See section  REF _Ref497012660 \h  \* MERGEFORMAT Evaluation of STATUS Field Data Input /succ2 Defines the end of successful area filled with strings representing the OK statuses. See section  REF _Ref497012660 \h  \* MERGEFORMAT Evaluation of STATUS Field Data Input /tf=tagname Each scan class can get its own query rate tag. The order in the startup line will lay down the tag name to the related scan class (same as the /f=hh:mm:ss /f=hh:mm:ss do) After each scan, the number of successfully executed queries will be stored into the related /tf =tagname.;l Example: 2 scan frequencies and corresponding two query rate tags: . . . /f=00:00:03 /f=00:00:05 /tf=tagname1 /tf=tagname2 Scan class 1 will service the query rate tag tagname1 and scan class 2 will service the tag tagname2. /updateinterval Adjusts the minimum interval at which Uniint checks for point updates. The default interval is 120 seconds, the minimum interval is 1 second, and the maximum interval is 300 seconds. Example: . . . /updateinterval=60 /user_odbc ODBC connection user name. This parameter is required. Databases like MS Access or dBase may not always have usernames set up. In this case a dummy username must be used, e.g. /USER_ODBC=dummy. /user_pi PI connection user name. PI interfaces usually log in as piadmin. This switch allows logging in as different PI user. When this switch is not present, the interface relies on the trust (proxy) entry being defined, and does not log in. Note: Since version 3.11.0.0 - when this flag is NOT present, the interface does not log in, and relies on entries in the PI trust table.  CAUTION Users of PI-API 1.3.8 should configure a trust/proxy for the interface. The reason is a bug in the PI API that causes the interface not to regain its user credentials after an automatic re-connect to the PI Server executed by PI-API. Without having a trust/proxy configured data may get lost (error -10401). /utc If this start-up flag is specified, the interface expects the incoming timestamp values (from RDBMS) in UTC and outgoing timestamps are converted to UTC. All the timestamp related placeholders (TS, ST, LST, LET) are also transformed. To do a correct transformation it is required that Time Zone and DST settings of the interface node are valid. Sample RDBMSPI.bat File RDBMSPI.exe /ps=S ^ /in=1 ^ /f=00:00:05 ^ /f=00:00:10 ^ /f=00:00:15 ^ /TF=XTF1 ^ /TF=XTF2 ^ /TF=XTF3 ^ /USER_PI=piadmin ^ /PASS_PI= ^ /USER_ODBC=system ^ /PASS_ODBC= ^ /DSN=Oracle8 ^ /host=PI_SERVER ^ /deb=1 ^ /OUTPUT=d:\pipc\interfaces\rdbmspi\logs\rdbmspi.out^ /SQL=d:\pipc\interfaces\rdbmspi\SQL\ ^ /GLOBAL=d:\pipc\interfaces\rdbmspi\SQL\global.dat ^ /succ1=311 /succ2=312 /bad1=313 /bad2=314 ^ /RECOVERY=TS ^ /RECOVERY_TIME=*-5min ^ /stopstat=shutdown Security If the home node is a PI 3 Server, the PI Firewall Database and the PI Proxy Database must be configured so that the interface is allowed to write data to the PI Data Archive. See Modifying the Firewall Database and Modifying the Proxy Database sections in the PIData Archive Manual. If the home node is a PI 2 Server, the read/write permissions should be set appropriately in the pisysdat:piserver.dat file on the PI 2 home node. For more information on setting permissions on PI 2, see the pibuild:piserver.txt file on the PI 2 home node. If the interface cannot write data to a PI 3 Server because it has insufficient privileges, a 10401 error will be reported in the pipc.log file. If the interface cannot send data to a PI2 Serve, it writes a 999 error. See the section Appendix A: Error and Informational Messages for additional information on error messaging. Performance Point Configuration One can configure performance points to monitor the amount of time in seconds that an interface takes to complete a scan for a particular scan class. The closer the scan completion time is to 0 seconds, the better the performance. The scan completion time is recorded to millisecond resolution Performance point configuration is the same on all operating system platforms. Performance points are configured as follows. Set the extended descriptor to: PERFORMANCE_POINT or to: PERFORMANCE_POINT=interface_id where interface_id corresponds to the identifier that is specified with the /INflag on the startup command line of the interface. The character string PERFORMANCE_POINT is case insenstive. The interface_id does not need to be specified if there is only one copy of an interface that is associated with a particular point source. Set Location4 to correspond to the scan class whose performance is to be monitored. For example, to monitor scan class 2, set Location4 to 2. See the /f flag for a description of scan classes. Set the PointSource attribute to correspond to the /ps flag on the startup command line of the interface. Set the PointType attribute to float32. Details UniInt monitors interface performance by keeping track of the number of scans that are hit, missed, and/or skipped for scan-based input points. Scans that occur on time are considered hit. If a scan occurs more than 1 second after its scheduled time, the scan is considered missed. If a scan occurs 1 scan period or more after its scheduled time, then 1 or more scans are considered skipped. Say that a particular scan class has a period of 2 seconds. If a scan for this class occurs 1.1 seconds after its scheduled time, then 1 scan has been missed. However, no scans have been skipped because the next scan still has the opportunity to occur at its scheduled time, which happens to be 0.9 seconds after the last scan in this case. For scans that have periods of 1 second or less, the above definition of a missed scan does not make sense. In these cases, scans are considered either hit or skipped. Since every skipped scan is also considered to be a missed scan, the scan performance summary should indicate the same percentage of skipped and missed scans for scan classes with periods of 1 second or less. By default, UniInt prints out a performance summary XE "performance summary"  to the message log every 8 hours if the hit ratio (hit ratio = hits / (hits + misses)) drops below 0.95. The performance summary shows the percentage of scans that are missed and skipped for every scan class. The frequency at which performance summaries are printed out can be adjusted using the /perf command-line argument. For interfaces that use unsolicited input points, performance summaries should be inactivated by setting /perf=0 because performance summaries are meaningless for unsolicited inputs. I/O Rate Tag Configuration An I/O Rate point can be configured to receive 10-minute averages of the total number of exceptions per minute that are sent to PI by the interface. An exception is a value that has passed the exception specifications for a given PI point. Since 10-minute averages are taken, the first average is not written to PI until 10 minutes after the interface has started. One I/O Rate tag can be configured for each copy of the interface that is in use. PI Point configuration on the PI Server It is assumed that the name of the PI tag is rdbmspi-io-rate Create an I/O Rate Tag with the following point attribute values. AttributeValuePointSourceLPointTypefloat32Compressing0ExcDev0 The default settings can be used for the remaining PI Point attributes. When Compressing is set to Zero the I/O Rate Tag acts like a heartbeat tag for the interface, which can be examined easily in ProcessBook with markers turned on. If a value is not written to the I/O Rate Tag every 10 minutes, then there is a problem with the interface communication. IORATES.DAT Configuration on Interface Node Edit/Create a file called iorates.dat in the PIHOME\dat directory. The PIHOME directory is defined either by the PIPCSHARE entry or the PHOME entry in the pipc.ini file, which is located in the System Root directory. If both are specified, the PIPCSHARE entry takes precedence. Since the PIHOME directory is typically C: \PIPC, the full name of the iorates.dat file will typically be C:\PIPC\dat\iorates.dat. Add a line in the iorates.dat file of the form: rdbmspi-io-rate, x where rdbmspi-io-rate is the name of the I/O Rate Tag and x corresponds to the first instance of the /ec=x flag in the startup command file. x can be any number between 1 and 34 or between 51 and 200, inclusive. However, it is best to use an event counter, x, that is not equal to 1 because 1 is the default event counter for Uniint-based interfaces. To specify additional rate counters for additional copies of the interface, create additional I/O Rate tags and additional entries in the iorates.dat file. The event counter, /ec=x, should be unique for each copy of the interface. Set the /ec=x flag on the startup command file of the interface to match the event counter in the iorates.dat file. The interface must be stopped and restarted in order for the I/O Rate tag to take effect. I/O Rates will not be written to the tag until 10 minutes after the interface is started. The 10-minute rate averages (in events/minute) can be monitored with a client application such as ProcessBook. For Users of Previous Interface Versions Read Before Update Version 3.0 of the RDBMSPI Interface is a major rewrite (as Version 2.0 was for Version 1.x). Therefore many enhancements could be done that did not fit into the design of the previous versions. On the other hand dropping interface limitations had the following trade of: Interface Version 3.x is not available for ALPHA NT The interface requires the PI-SDK being installed A few changes have been applied that do not affect compatibility to a previous installation: The /test mode has been dropped. Instead the CPPI utility is provided. The /sr switch to set the Sign-Up-For-Updates scan period has been removed. The interface has now a fixed algorithm. Every 2 minutes the interface checks for point changes and then processes 25 every 10 seconds. In average a bulk load of 1000 tags will take 1000 seconds to be recorded in a RDBMS table. Note: Since 3.11.0.0, there is the /updateinterval flag that allows for setting the sign-up-for-update rate. The /skip_time switch has been removed. See chapter  HYPERLINK \l "_Performance_Point_Configuration" Performance Point Configuration for details about delayed scans. !!! The following minor changes may affect compatibility to a previous configuration: Location5=1 for String and Blob Input Tags changed behavior! In previous versions (2.x) this setting caused the interface to only send changes to these tags. Now the behavior is aligned with all other data types, means no Exception Reporting on Location5=1. Updating the Interface from a Previous Version For an update of the RDBMS to PI Interface make a backup of all interface files at PIPC/interfaces/RDBMSPI directory. For example: c:> md /PIPC/interfaces/RDBMSPI/RDBMSPI_old c:> copy /PIPC/interfaces/RDBMSPI/*.* /PIPC/interfaces/RDBMSPI/RDBMSPI _old/*.* If the interface was installed as service, also remove the service using rdbmspiremove. Remove the interface via Add/Remove Programs on the Control Panel or just delete the interface files if the interface was not installed with a Setup Kit. If not already installed, update your PI-API to the current release of PI-SDK (includes latest PI-API as well).  CAUTION Users of PI-API 1.3.8 should configure a trust/proxy for the interface. The reason is a bug in the PI API that causes the interface not to regain its user credentials after an automatic re-connect to the PI Server executed by PI-API. Without having a trust/proxy configured data may get lost (error -10401). Now proceed with running the setup program as described in chapter  HYPERLINK \l "_Interface_Installation_on_NT" Interface Installation on NT. Perform all configuration steps (see following sections) and optionally use your existing configuration files from the backup. Interface Installation on NT OSIsoft recommends that interfaces be installed on PI interface nodes instead of directly on the PIServer node. A PI interface node is any node other than the PI Server node where the PIApplication Programming Interface (PI-API) has been installed (see the PIAPIInstallation Instructions manual). With this approach, the PI Server need not compete with interfaces for the machines resources. The primary function of the PIServer is to archive data and to service clients that request data. In most cases, interfaces on PI interface nodes should be installed as automatic services. Services keep running after the user logs off. Automatic services automatically restart when the computer is restarted, which is useful in the event of a power failure. The guidelines are different if an interface is installed on the PI Server node. In this case, the typical procedure is to install the PI Server as an automatic service and interfaces as manual services that are launched by site-specific command files when the PI Server is started. interfaces that are started as manual services are also stopped in conjunction with the PI Server by site-specific command files. Bufserv can be enabled on the PI Server node so that interfaces on the PI Server node do not need to be started and stopped in conjunction with PI, but it is not standard practice to enable buffering on the PI Server node. See the UniInt End User Document for special procedural information. Naming Conventions and Requirements In the installation procedure below, it is assumed that the name of the interface executable is rdbmspi.exe and that the startup command file is called rdbmspi.bat. It is customary for the user to rename the executable and the startup command file when multiple copies of the interface are run. For example, one would typically use rdbmspi.exe and rdbmspi.bat for interface number 1, rdbmspi2.exe and rdbmspi2.bat for interface number 2, and so on. When an interface is run as a service, the executable and the command file must have the same root name because the service looks for its command-line arguments in a file that has the same root name. Microsoft DLLs The following Microsoft DLLs are distributed: MSVCIRT.DLLMSVCRT.DLLMSVCP60.DLL Interface Directories The PIHOME Directory Tree The PIHOME directory tree is defined by the PIHOME entry in the pipc.iniconfiguration file. This pipc.ini file is an ASCII text file, which is located in the WinNT directory. A typical pipc.ini file contains the following lines: [PIPC] PIHOME=c:\pipc The above lines define the \pipc directory as the root of the PIHOME directory tree on the C: drive. OSIsoft recommends using \pipc as the root directory name. The PIHOMEdirectory does not need to be on the C: drive. Interface Installation Directory Place all copies of the interface into a single directory. The suggested directory is: PIHOME\interfaces\rdbmspi\ Replace PIHOME with the corresponding entry in the pipc.ini file. Interface Installation Procedure In the installation procedure below, assume that interface number 1 is being installed and that all copies of the interface will be installed in the same directory. Run rdbmspi_310.exe (copy the interface files from the installation media to PIHOME\interfaces\rdbmspi\). Create the directory if necessary. If necessary, rename the command file so that it has the same root name of the executable. Alter the command-line arguments in the .bat file as discussed in this manual. Try to start the interface interactively with the command: rdbmspi.bat If the interface cannot be started interactively, one will not be able to run the interface as a service. It is easier to debug interactively started processes because error messages are echoed directly to the screen. Once the interface is successfully running interactively, try to run it as a service by following the instructions below. Installing the Interface as an NT Service You can get help for installing the interface as a service at any time with the command: rdbmspi.exe help Change to the directory where the rdbmspi.exe executable is located. Then, consult the following table to determine the appropriate service installation command. NT Service Installation Commands on a PI interface node or a PI Server node with Bufserv implementedManual servicerdbmspi.exe install depend tcpip bufservAutomatic servicerdbmspi.exe install auto depend tcpip bufservNT Service Installation Commands on a PI interface node or a PI Server node without Bufserv implementedManual servicerdbmspi.exe install depend tcpipAutomatic servicerdbmspi.exe install auto depend tcpip When the interface is installed as a service on the PI Server node and when Bufserv is not implemented, a dependency on the PI network manager is not necessary because the interface will repeatedly attempt to connect to the PI Server until it is successful. Note: Interfaces are typically not installed as automatic services when the interface is installed on the PI Server node. Check the Microsoft Windows services control panel to verify that the service was added successfully. You can use the services control panel at any time to change the interface from an automatic service to a manual service or vice versa. What is Meant by "Running an ODBC Application as a Service"? In the case of ODBC applications configured to run as NT Service and querying databases, the machine setup must be configured in a particular manner to make the connections to the database via the ODBC connection work without error. In the following section there are a few issues useful to check: The interface MUST be capable of connecting to RDBMS as a console application before attempting to run it as a service. Including this step is vitally important, because running an application as a service adds another level of complexity that can mask other issues that have nothing to do with the fact that the application is running as a service. Once you have verified that the application can run successfully as a stand-alone application, you can assume that any problems that arise when running the application as a service have something to do with your system configuration. The ODBC driver/client and any necessary database client software MUST be on the system PATH. On Windows NT 4/2000/XP machines, there is a distinction made between system environment variables and user environment variables. System environment variables are used whenever the operating system is in use, no matter whether there is a particular user-id logged in or not. This is important, because if your ODBC driver/client (and database client software, if needed) is listed on the PATH environment variable as user environment variables, these values will only be valid as long as the particular user-id for whom they are set is logged in, and not at system boot-up. If using an ODBC data source to establish the connection, the data source MUST be a System DSN. The reasons for this are similar to the first situation - User DSNs can only be accessed by someone logged into the machine with a particular user-id, and not at system boot-up. System DSNs are available at boot-up and by any application running under any account. To check this, open your ODBC Data Source Administrator and make sure that your data source appears on the list on the "System DSN" tab. If it is not there, create one and add it to this list, and make sure that your application points to it. You MUST be using the latest version of MDAC. There has been at least one occasion where a customer was able to resolve his issue running his application as a service with his database by installing the latest MDAC. As of the authoring of this document, MDAC 2.7 is the latest version. Buffering Note: If there are queries configured that use run-time placeholders, API Buffering has nearly no effect. To fill in the requested run-time placeholder (VL, SS_I, tag name/TS,) the interface has to wait until the PI Server is available again. Other tags that potentially could get data because their query does not contain run-time placeholders do not get executed in that time. In most cases this behavior is sufficient because the RDBMS keeps the data until they are retrieved. In scenarios where the RDBMS tables contain data that are scanned without any runtime placeholder, e.g. SELECT pi_time,pi_value,0 FROM table where pi_tagname=Key1; data could get lost because such tables usually only contain current values. It is therefore recommended to group all tags not working on run-time placeholders into a second instance of the RDBMS Interface where they would not be stopped from other queries and can unload their results to the API Buffer. But dont forget, the trust/proxy entry for the interface node has to be configured. See the PI System manuals for more details. For complete information on buffering, please refer to the PI API Installation Instructions. PI interface node buffering consists of a buffering process which runs continuously on the local node, a PI-API library whose calls can send data to this buffering process, and a utility program for examining the state of buffering and controlling the buffering process. Buffering is enabled through the use of a configuration file, piclient.ini. Unless this file is modified to explicitly enable buffering, the PI-API will not buffer data, sending data directly to the home node. There are no additional steps needed to install buffering after installing the PI-API. The delivered PI-API library supports both buffered and un-buffered calls. Note: When buffering is configured to be on, the bufserv process must be started before other programs using the PI-API, so that these programs can access the shared buffering resources. Any program that makes a connection to a PI Server has this requirement even if it does not write to PI. It is also desirable to run the bufserv process in the same NT account as the interface in case of NT service configuration. E.g. .\Administrator. Configuration of buffering is achieved through entries in the piclient.ini file. The file is found in the dat subdirectory of the PIHOME directory (typically c:\pipc\dat). This file follows the conventions of Microsoft Windows initialization files with sections, keywords within sections, and values for keywords. All buffering settings are entered in a section called [APIBUFFER]. To modify settings, simply edit the piclient.inifile in a text editor (Notepad on Windows) to the desired values. The following settings are available for buffering configuration: KeywordsValuesDefaultDescriptionBUFFERING0,10Turn off/on buffering. OFF = 0, ON = 1, PAUSERATE0 - 2,000,0002When buffers are empty the buffering process will wait for this long before attempting to send more data to the home node (seconds)RETRYRATE0 - 2,000,000120When the buffering process discovers the home node is unavailable it will wait this long before attempting to reconnect (seconds)MAXFILESIZE1 - 2,000,000100,000Maximum buffer file size before buffering fails and discards events. (Kbytes)MAXTRANSFEROBJS1 - 2,000,000500Maximum number of events to send between each SENDRATE pause.BUF1SIZE64 - 2,000,00032768Primary memory buffer size. (bytes)BUF2SIZE64 - 2,000,00032768Secondary memory buffer size. (bytes)SENDRATE0 - 2,000,000100The time to wait between sending up to MAXTRANSFEROBJS to the server (milliseconds) In addition to the [APIBUFFER] section, the [PISERVER] section may be used to define the default PI server and an optional time offset change that may occur between the client and server. KeywordsValuesDefaultDescriptionPIHOMENODEstringnoneWindows default server is in pilogin.iniDSTMISMATCH0 - 2,000,0000The time that the server and client local time offset is allowed to jump. Typically, 3600 if the nodes are in time zones whose DST rules differ (seconds) On Windows NT 4/2000/XP the default server information is stored in the pilogin.ini file so the piclient.ini would only have the [APIBUFFER] section. The BUFFERING=1 indicates that buffering is on. The MAXFILESIZE entry in Kbytes of 100000 allows up to 100 Megabytes of data storage. Do not use commas or other separators in the numeric entries. The retry rate is set to 600 seconds meaning wait 10 minutes after losing a connection before retrying. On NT a piclient.ini file might look like: [APIBUFFER] BUFFERING=1 MAXFILESIZE=100000 ; The PI-API connection routines have a 1 minute default timeout. RETRYRATE=600 PILOGIN.INI The PILOGIN.INI file contains configuration and preference settings for the PI Server connections with PI-Client Software (e.g. ProcessBook or interfaces). The file generally resides in the PIPC\DAT directory. ProcessBook SETUP.EXE creates this file with default settings. As you use PIProcessBook and the Connections feature, this file is modified. The interface automatically adds the PI Server into the PILOGIN.INI file it will communicate with. (The file will also automatically be created and configured on condition the PIPC\DAT directory exists.) The settings used in the following examples are samples and not necessarily the default values. The Services section of the PILOGIN.INI identifies the server type: PI1=PI The Defaults section specifies the default server and user ID: PIServer=tomato PI1USER=DLeod The PINodeIdentifiers section of PILogin.ini maps the PI Server names to codes which are stored in the ProcessBook files. ProcessBook uses these codes instead of the actual node names in order to save space and facilitate changing server names. You usually make changes to this section through the Connections command under the PIProcessBook File menu. Here is an example of this section: [PINodeIdentifiers] ;PI#=Servername, NodeID, Port# PI1=casaba,11111,545 PI2=orange,85776,545 PI3=localhost,62085,5450 PI4=olive,2153,5450 PI5=206.79.198.232,41369,5450 The first parameter after the equal sign is the PI Server name. This is usually a TCP/IP node name, but it can also be a TCP/IP address as shown on the last line. The second parameter is the node identifier, which is stored with each tag name used in a ProcessBook file. This parameter is relevant for ProcessBook but not for the RDBMSPI Interface. The third parameter is the TCP port number. Port 545 is used for PI Servers on OpenVMS. Port 5450 is used for PI Servers on Windows NT 4/2000 and UNIX. Example of (minimum) PILOGIN.INI File [Services] PI1=PI [PINODEIDENTIFIERS] PI1=alpha1,48872,5450 [DEFAULTS] PIServer=alpha1 PI1USER=piadmin Shutdown You can manually stop the interface by pressing Ctrl^C or Ctrl^Break, when used in interactive mode. When the interface runs as service, you can stop it via the Control Panel or by entering the command: rdbmspi -stop On a Windows NT 4/2000 PI3 Home Node, include the interface stop procedure in pisrvsitestop.bat. It should look like this: echo Stopping Site Specific PI System Services... net stop rmp_sk net stop random net stop rdbmspi :theend Control Program The RDBMSPI Interface ships with a Control Program (CPPI), providing the administrators with a debugging and trouble-shooting tool. For example it is possible to control the SQL queries execution in terms of pausing the i/f before/after a given tag is scheduled for processing and see the values of placeholders and result-sets in the form before they were modified according to various reading strategies. The CPPI functionality is accessible via the Microsoft Management Console (MMC), or programmatically using the CPPI.DLL COM server. A set of text commands available to communicate with the interface is described in the next section. CPPI Text Commands The RDBMSPI Interface understands the following CPPI commands: CommandNumber of ParametersDescriptionMONITOR0Returns the two-dimensional array of status information.GETDEBUG0Returns the current debug level (/deb=n)SETDEBUG1Sets the debug level to the passed new-debug-levelGETTAGS0Returns the two-dimensional array of tags served by the instance of the interface. The tags are divided according to the scan classes.GETSQL3Returns the SQL statement(s) for the particular tag including the possible runtime placeholders values. The arguments are: scan class number scan class type (I/E/O) tag nameGETRESULTSET3Returns the selected rows result-set coming from the SELECT statement execution. The arguments are: scan class number scan class type (I/E/O) tag nameSTOPON4Forces the interface to stop execution (sets the breakpoint) on the given scan class/tag. The arguments are: scan class number scan class type (I/E/O) tag name breakpoint position (A/B) A-After execution B-Before executionGETTRACESTATUS0Returns the execution status depending on the breakpoints set.NEXT0Forces the program execution to run until the next breakpoint is encountered.CONTINUE0Clears all breakpoints and continues normal execution.SHUTDOWN0Regularly shuts down the interface.HELP0Provides a description of each command. Note: How to communicate from an application via Text Commands with RDBMSPI is described in a separate CPPI manual (for development purposes only). CPPI/RDBMSPI Functionality Accessed via MMC To use this functionality Microsoft Management Console (MMC) 1.2 or higher is required. When accessing the CPPI/RDBMSPI functionality from within the MMC it is possible to make use of the graphical front-end, that provides simplified handling of the text commands. The MMC Snap-In is installed with the interface installation kit (Custom Installation). To simply run the tool, a shortcut file is provided in a subdirectory of the RDBMSPI Interface location, called \MMC. ( Run RDBMSPI.msc REM: double clicking on the pre-installed RDBMSPI.msc will only connect to the running interface instance on a local computer that has instance number equal one (/id=1). Right-clicking at the items in the scope pane MMC part you can remove the pre-installed entry and add one that fits your configuration. Following are screen shots that show how to connect and communicate with the interface: Run the MMC.EXE and go to Console->Add/Remove Snap-In Select the CPPI Snap-In and press Add.  Add the RDBMSPI interface to the CPPI folder: - right click the CPPI folder, and select Add Interface - the following dialogue appears:  Computer - Windows Node name of the computer the interface is running on. Dot . denotes the local node. Interface - Interface name. (Name of the interface .exe file.) Interface ID - Instance number. Corresponds to the /IN=n start-up parameter, Note: when connecting to a computer in a different domain, please use the windows Explorer and connect to a drive on such a computer first. This should allow you to bypass the authentication problems by accessing the remote pipe. 3) Monitor provides run-time statistics for the RDBMSPI Interface: DataCommentInterface run timeElapsed time since the interface starts.Number of executed queriesNumber of queries executed in all scan classes.Bytes received via ODBC callsTotal number of bytes fetched from SELECT queries.Prepared ODBC statementsTotal number of SQL statements prepared for execution.ODBC statement errors occurredAll errors occurred (at the ODBC statement level) since the interface starts.Information that is ODBC driver specific follows: - ODBC Environment - Connection handle settings and several selected items regarding the ODBC driver used - ODBC driver manager - Actual data source the interface is connected to  4) Data item in MMC Scope Pane:  The Status Edit Box shows the actual program flow status in relation to the possible break point definitions. The content of the Edit Box is refreshed whenever the Get Status button is pressed. Two Combo Boxes Scan Class and Tag contain all the (active) interface tags divided into three scan class types: I standard (time based) input, E event based input; O event based output. Both combo boxes are filled immediately after CPPI connects to the interface. The Stop button defines break points. It is not possible to define break points for more than one tag at once. It is only possible to set one or two break points for the particular point showed in the Tag combo box. The Stop button is grayed after the break-setting dialog was closed, and the Next and Continue buttons are subsequently allowed. Pressing the Get Status button reflects the situation in the Status edit box. Depending on the break point(s) defined, the Status changes from RUNNING to BREAKEPOINTSET or STOPPED. The BREAKEPOINTSET status says that the break point(s) was successfully set, and the interface continues normal operation until the corresponding tag will be scheduled for ODBC execution. The status STOPPED indicates that the interface entered a waiting loop (break point) immediately before or after the ODBC SQLExecute() function call. No tags are processed in the STOPPED state and the interface continues execution only after either the Next or Continue buttons are pressed. The Next button forces the interface to continue running, until it encounters a subsequent break point. The following situations can occur: Break Point(s) DefinedTag Has More SQL StatementsPressing Next Means:Before ExecutionYesExecution stops before the SQLExecute() call for the following statement in the batch of SQL statements defined for the given Tag. Stepping through all statements in a batch, the subsequent tag from the same scan class follows.NoExecution stops before the SQLExecute() function call for the subsequent tag in the same scan class. Point name is shown in the Tag edit boxAfter ExecutionYesExecution stops immediately after the SQLExecute() function call for the following statement in a batch. Stepping through all statements in a batch, the subsequent tag from the same scan class follows. NoExecution stops immediately after the SQLExecute() function call for the subsequent tag in the same scan class. Point name is shown in the Tag edit boxBefore and After ExecutionYesCombination of the above.NoCombination of the above. The Continue button deletes all break points and the interface continues normal operation. The Status edit box then shows the state RUNNING and the Stop button changes its grayed state to normal. The data is shown in the result set part of the front-end. It is possible to see the SQL statement(s) for a particular (selected) tag when pressing the Get SQL button, and see the rows obtained by a SELECT query via the Get resultset button. Note: An open connection through CPPI causes the interface to store the relevant information in memory for each tag serviced. I.e. it keeps the latest result sets (for input tags) as well as placeholders run-time values. Disconnection causes this information to be released and memory freed. Appendix A: Examples Example 1.1 single tag query SQL Statement (file PI_REAL1.SQL)SELECT PI_TIMESTAMP, PI_VALUE, PI_STATUS FROM PI_REAL1 WHERE PI_KEY_VALUE = ?;Relevant PI Point AttributesExtended DescriptorLocation1Location2Location3Location4Location5P1=Key_123410010InstrumentTagPoint TypePoint SourcePI_REAL1.SQLFloat32SRDBMS Table DesignPI_TIMESTAMPPI_VALUEPI_STATUSPI_KEY_VALUEDatetime (MS SQL Server) Date/Time (MS Access)Real (MS SQL Server) Number-Single Precision (MS Access)Smallint (MS SQL Server) Number-Whole Number (MS Access)Varchar(50) (MS SQL Server) Text(50) (MS Access) Example 1.2 query data array for a single tag SQL Statement (file PI_STRING1.SQL)SELECT PI_TIMESTAMP, PI_VALUE, 0 FROM PI_STRING1 WHERE PI_TIMESTAMP > ? ORDER BY PI_TIMESTAMP ASC;Relevant PI Point AttributesExtended DescriptorLocation1Location2Location3Location4Location5P1=TS11010InstrumenttagPoint TypePoint SourcePI_STRING1.SQLStringSRDBMS Table DesignPI_TIMESTAMPPI_VALUEDatetime (MS SQL Server) Date/Time (MS Access)Varchar(1000) (MS SQL Server) Text(255) (MS Access) Note: The STATUS column, which is mandatory, is represented by the constant expression 0. See  REF bkmkSingle \h  \* MERGEFORMAT SQL SELECT Statement for Single PI Tag. Example 1.3 three PI points forming a GROUP SQL Statement (file PI_INT_GROUP1.SQL)SELECT PI_TIMESTAMP, PI_VALUE1, 0 ,PI_VALUE2, 0, PI_VALUE3, 0 FROM PI_INT_GROUP1 WHERE PI_TIMESTAMP > ? ORDER BY PI_TIMESTAMP ASC;Relevant PI Point AttributesExtended Descriptor (Master Tag)Location1 (All points)Location2 (All points)Location3 Location4 (All points)Location5 (All points)P1=TS11Target_Point1 2 Target_Point2 4 Target_Point3 610Instrumenttag (All Points)Point TypePoint Source (All Points)PI_INT_ GROUP1.SQLInt32SRDB Table DesignPI_TIMESTAMPPI_VALUEnDatetime (MS SQL Server) Date/Time (MS Access)Smallint (MS SQL Server) Number (Whole Number) (MS Access) Example of an appropriate result-set: PI_TIMESTAMP PI_VALUE1 PI_VALUE2 PI_VALUE3 20-Oct-2000 08:10:00 10 20 30 20-Oct-2000 08:20:00 11 21 31 20-Oct-2000 08:30:00 12 22 32 Target_Point1 gets 10, 11, 12, Target_Point2 gets 20, 21, 22, Target_Point3 gets 30, 31, 32, Example 1.4 Tag Distribution SQL Statement (file PI_REAL_DISTR1.SQL)SELECT PI_TIMESTAMP, PI_TAGNAME, PI_VALUE, PI_STATUS FROM T1_4 WHERE PI_TAGNAME LIKE Tag%AND PI_TIMESTAMP > ? ;Relevant PI Point AttributesExtended Descriptor (Distributor)Location1 (All points)Location2 (All points)Location3Location4 All pointsLocation5 All pointsP1=TS 10Distributor -1 Target points 010Instrumenttag (Distributor)Point Type (Distributor)Point Source (All Points)PI_REAL_DISTR1.SQLFloat32SRDB Table DesignPI_TIMESTAMPPI_VALUEPI_STATUSPI_TAGNAMEDatetime (MS SQL Server) Date/Time (MS Access)Real (MS SQL Server) Number (Single) Prec.(MS Access)Varchar(12) (MS SQL Server) Text(12) (MS Access)Varchar(80) (MS SQL Server) Text(80) (MS Access) Example of an appropriate result-set: PI_TIMESTAMP PI_TAGNAME PI_VALUE PI_STATUS 20-Oct-2000 08:10:00 Tag_1 10 NULL 20-Oct-2000 08:10:00 Tag_2 20 NULL 20-Oct-2000 08:10:00 Tag_3 30 NULL 10 goes to Tag_1; 20 to Tag_2; 30 to Tag_3 Example 1.5 RxC Distribution SQL Statement (file PI_REAL_DISTR1.SQL)SELECT sampletime AS PI_TIMESTAMP1, 'Tag1' AS PI_TAGNAME1, [level] AS PI_VALUE1, sampletime AS PI_TIMESTAMP2, 'Tag2' AS PI_TAGNAME2, temperature AS PI_VALUE2, temperature_status AS PI_STATUS2, sampletime AS PI_TIMESTAMP3,'Tag3' AS PI_TAGNAME3, density AS PI_VALUE3, density_status AS PI_STATUS3 FROM RxC WHERE sampletime > ? AND tank = 'Tank1'Relevant PI Point AttributesExtended Descriptor (RxC Distributor)Location1 (All points)Location2 (All points)Location3Location4 (All points)Location5 (All points)P1=TS 10RxC Distributor -2 Target points 010Instrumenttag (Distributor)Point Type (All points)Point Source (All Points)PI_REAL_DISTR_RxC.SQLFloat32SRDB Table DesignSAMPLETIMELEVEL, TEMPERATURE, DENSITYLEVEL_STATUS, TEMPERAURE_ STATUS, DENSITY_STATUSTANKDatetime (MS SQL Server) Date/Time (MS Access)Real (MS SQL Server) Number (Single) Prec.(MS Access)Varchar(12) (MS SQL Server) Text(12) (MS Access)Varchar(80) (MS SQL Server) Text(80) (MS Access) Example of an appropriate result-set: PI_TIMESTAMP1 PI_TAGNAME1 PI_VALUE1 20-Jul-2002 08:10:00 Tag1 1 PI_TIMESTAMP2 PI_TAGNAME2 PI_VALUE2 PI_STATUS2 20-Jul-2002 08:10:00 Tag2 10 NULL PI_TIMESTAMP3 PI_TAGNAME3 PI_VALUE3 PI_STATUS3 20-Jul-2002 08:10:00 Tag3 100 NULL 1 goes to Tag1; 10 to Tag2; 100 to Tag3 Example 2.1 insert 2 different sinusoid values into table SQL Statement (file PI_SIN_VALUES_OUT.SQL)INSERT INTO PI_SIN_VALUES_OUT (PI_TAGNAME1, PI_TIMESTAMP1, PI_VALUE1, PI_STATUS1, PI_TAGNAME2, PI_VALUE2, PI_STATUS2) VALUES (?,?,?,?,?,?,?);Relevant PI Point AttributesExtended DescriptorLocation1 Location2Location3Location4Location5/EXD=path\ pi_sin_values_out.plh Content of the above stated file: P1=AT.TAG P2=TS P3=VL P4=SS_I P5='SINUSOIDU'/AT.TAG P6='SINUSOIDU'/VL P7='SINUSOIDU'/SS_I10000InstrumenttagPoint TypeSource TagPoint SourcePI_SIN_VALUES_ OUT.SQLFloat16SINUSOIDSRDBMS Table DesignPI_TIMESTAMPnPI_VALUEnPI_STATUSnPI_TAGNAMEnDatetime (MS SQL Server) Date/Time (MS Access)Real (MS SQL Server) Single Precision (MS Access)Smallint (MS SQL Server) Whole Number (MS Access)Varchar(80) (MS SQL Server) Text(80) (MS Access) Example 3.1 Field Name Aliases SQL Statement (file PI_STRING2.SQL)SELECT VALIDITY AS PI_STATUS, SCAN_TIME AS PI_TIMESTAMP, VOLUME AS PI_VALUE FROM T3_1 WHERE KEY_VALUE = ?;Relevant PI Point AttributesExtended DescriptorLocation1 Location2 Location3Location4Location5P1=Key_123410010InstrumenttagPoint TypePoint SourcePI_STRING2.SQLStringSRDB Table DesignSCAN_TIMEVOLUMEVALIDITYKEY_VALUEDatetime (MS SQL Server) Date/Time (MS Access)Varchar(1000) (MS SQL Server) Text(255) (MS Access)Smallint (MS SQL Server) Whole Number (MS Access)Varchar(50) (MS SQL Server) Text(50) (MS Access) Example 3.2 Fixed Column Positions SQL Statement (file PI_GR1.SQL)SELECT Time0, VALUE1, 0, VALUE2, 0 FROM T3_2 WHERE Time0 > ?;Relevant PI Point AttributesTagInstrumentTagExtended DescriptorLocation1Location2Location3Location4Tag1PI_GR1.SQLP1=TS1121Tag2PI_GR1.SQL1141RDB Table DataTime0Value1Value220-Oct-2000 08:10:001.123String120-Oct-2000 08:10:102.124String220-Oct-2000 08:10:203.125String320-Oct-2000 08:10:304.126String4 Values selected in column Value1 go to Tag1 Values selected in column Value2 go to Tag2 Example 3.3 Arbitrary Column Position - Aliases SQL Statement (file PI_GR2.SQL)SELECT PI_TIMESTAMP, PI_VALUE1, PI_VALUE2, PI_STATUS1=0, PI_STATUS2=0 FROM T3_3 WHERE PI_TIMESTAMP > ? ORDER BY PI_TIMESTAMP ASC; or SELECT TIME0 AS PI_TIMESTAMP, VALUE1 AS PI_VALUE1, VALUE2 AS PI_VALUE2, 0 AS PI_STATUS1, 0 AS PI_STATUS2 FROM T3_3 WHERE PI_TIMESTAMP > ? ORDER BY PI_TIMESTAMP ASC;Relevant PI Point AttributesTagInstrument tagExtended DescriptorLocation1Location2Location3Location4Tag1PI_GR2.SQLP1=TS1111Tag2PI_GR2.SQL1121RDB Table DataPI_TIMESTAMPPI_VALUE1PI_VALUE220-Oct-2000 08:10:001.1234.56720-Oct-2000 08:10:102.1245.56820-Oct-2000 08:10:203.1256.56920-Oct-2000 08:10:304.1267.570 Values selected in column PI_VALUE1 go to Tag1 Values selected in column PI_VALUE2 go to Tag2 Example 3.4a Tag Distribution, Search According to Real Tag Name SQL Statement (file PI_DIST1.SQL)SELECT TIME, PI_TAGNAME, VALUE, 0 FROM T3_4 WHERE TIME > ?;Relevant PI Point AttributesTagInstrument tagExtended DescriptorLocation1Location2Location3Location4Tag1PI_DIST1.SQLP1=TS1-11Tag211Tag311Tag411RDB Table DataTimePI_TagNameValue20-Oct-2000 08:10:00Tag24.56720-Oct-2000 08:10:10Tag35.56820-Oct-2000 08:10:20Tag46.569 Example 3.4b Tag Distribution, Search According to Tags ALIAS Name SQL Statement (file PI_DIST2.SQL)SELECT TIME, PI_ALIAS, VALUE,0 FROM T3_4 WHERE TIME > ?;RDB Table DataTagInstrument tagExtended DescriptorLocation1Location3Location4Tag1PI_DIST2.SQLP1=TS1-11Tag2/ALIAS=Valve111Tag3/ALIAS=Valve211Tag4/ALIAS=Valve311RDB Table DataTimePI_AliasValue20-Oct-2000 08:10:00Valve1Open20-Oct-2000 08:10:00Valve2Closed20-Oct-2000 08:10:00Valve3N/A Example 3.5 Tag Distribution with Aliases in Column Names SQL Statement (file PI_DIST3.SQL)SELECT NAME AS PI_TAGNAME, VALUE AS PI_VALUE , STATUS AS PI_STATUS, DATE_TIME AS PI_TIMESTAMP FROM T3_5 WHERE NAME LIKE ?;Relevant PI Point AttributesExtended DescriptorLocation1 All pointsLocation2 All pointsLocation3 Location4 All pointsLocation5 All pointsDistributor P1=Key_1234 Target points - /ALIAS=value retrieved from NAME column1Not evaluated -1 Not evaluated10InstrumenttagPoint Type (Distributor)Point Source SPI_DIST3.SQLFloat32RDB Table DesignDATE_TIMENAMEVALUESTATUSDatetime (MS SQL Server) Date/Time (MS Access)Char(80) (MS SQL Server) Text(80) (MS Access)Real (MS SQL Server) Text(255) (MS Access)Real (MS SQL Server) Text(12) (MS Access) Example 3.6 RxC Distribution SQL Statement (file PI_DIST4.SQL)SELECT sampletime AS PI_TIMESTAMP1, name1 AS PI_TAGNAME1, value1 AS PI_VALUE1, sampletime AS PI_TIMESTAMP2, name2 AS PI_TAGNAME2, value2 AS PI_VALUE2, status2 AS PI_STATUS2, sampletime AS PI_TIMESTAMP3,name3 AS PI_TAGNAME3, value3 AS PI_VALUE3, status3 AS PI_STATUS3 FROM RxC1 WHERE sampletime > ?Relevant PI Point AttributesExtended DescriptorLocation1 All pointsLocation2 All pointsLocation3 Location4 All pointsLocation5 All pointsRxC Distributor: P1=TS Targets: 1Not evaluated -2 Not evaluated10InstrumentTagPointType (Distributor)PointSource SPI_DIST4. SQLFloat32RDB Table DesignSAMPLETIMENAMEnVALUEnSTATUSnDatetime (MS SQL Server) Date/Time (MS Access)Char(80) (MS SQL Server) Text(80) (MS Access)Real (MS SQL Server) Number (MS Access)Real (MS SQL Server) Number (MS Access) Example 3.7 Even-based Input SQL Statement (file PI_EVENT.SQL)SELECT PI_TIMESTAMP, PI_VALUE, PI_STATUS FROM T3_7;Relevant PI Point AttributesExtended DescriptorLocation1 Location2 Location3Location4Location5/EVENT=sinusoid100Not evaluated0InstrumenttagPoint TypePoint SourcePI_EVENT.SQLStringSRDB Table DesignPI_TIMESTAMPPI_VALUEPI_STATUSDatetime (MS SQL Server) Date/Time (MS Access)Varchar(1000) (MS SQL Server) Text(255) (MS Access)Smallint (MS SQL Server) Byte (MS Access) Example 3.8 Multi-statement Query SQL Statement (file PI_MULTI.SQL)INSERT INTO T3_8 (PI_TIMESTAMP, PI_VALUE, PI_STATUS) VALUES (?, ?, ?); DELETE FROM T3_8 WHERE PI_TIMESTAMP < ?;Relevant PI Point AttributesExtended DescriptorLocation1 Location2 Location3Location4Location5P1=TS P2=VL P3=SS_I P4=TS10000InstrumenttagPoint TypeSource TagPoint SourcePI_MULTI.SQLFloat32SINUSOIDSRDB Table DesignPI_TIMESTAMPPI_VALUEPI_STATUSDatetime (MS SQL Server) Date/Time (MS Access)SmallInt (MS SQL Server) Number-Whole Number (MS Access)Smallint (MS SQL Server) Number Single Precision (MS Access) Example 3.9 Stored Procedure Call SQL Statement{CALL SP_T3_9(?,?)};Stored procedure definitionCREATE PROCEDURE SP_T3_9 @Start_Time DateTime, @End_Time DateTime AS SELECT PI_TIMESTAMP,PI_VALUE,PI_STATUS FROM PI_T3_9 WHERE PI_TIMESTAMP BETWEEN @Start_Time AND @End_TimeRelevant PI Point AttributesExtended DescriptorLocation1Location2Location3Location4Location5/SQL="{CALL SP_T3_9(?,?)}; P1=LST P2=TS11010InstrumenttagPoint TypePoint SourceFloat16SRDB Table DesignPI_TIMESTAMPPI_VALUEPI_STATUSDatetime (MS SQL Server)Real (MS SQL Server)Smallint (MS SQL Server) Example 3.10 Event-based Output SQL Statement (file PI_EVOUT1.SQL)UPDATE PI_T3_10 SET PI_TIMESTAMP=?, PI_VALUE=?, PI_STATUS=? WHERE PI_KEY LIKE Key123;Relevant PI Point AttributesExtended DescriptorLocation1 Location2 Location3Location4Location5P1=TS P2=VL P3=SS_I10000InstrumenttagPoint TypeSource TagPoint SourcePI_EVOUT1.SQLFloat16SINUSOIDSRDB Table DesignPI_TIMESTAMPPI_VALUEPI_STATUSDatetime (MS SQL Server) Date/Time (MS Access)Real (MS SQL Server) Byte (MS Access)Smallint (MS SQL Server) Number Whole Number (MS Access) Example 3.11 Output Triggered by Sinusoid, Values Taken from TagDig SQL Statement (file PI_EVOUT2.SQL)UPDATE T3_11 SET PI_TIMESTAMP=?, PI_VALUE=?, PI_STATUS_I=?, PI_STATUS_STR=?;Relevant PI Point AttributesExtended DescriptorLocation1Location2Location3Location4Location5P1=TagDig/TS P2=TagDig/VL P3=TagDig/SS_I P4=TagDig/SS_C10000InstrumenttagPoint TypeSource TagPoint SourcePI_EVOUT2.SQLFloat16SINUSOIDSRDB Table DesignPI_TIMESTAMPPI_VALUEPI_STATUS_IPI_STATUS_STRDatetime (MS SQL Server) Date/Time (MS Access)Char(12) (MS SQL Server) Text(12) (MS Access)Smallint (MS SQL Server) Number Single Precision (MS Access)Varchar(20) (MS SQL Server) Text(12) (MS Access) Example 3.12 Global Variables SQL Statement (file PI_G1.SQL)UPDATE T3_12 SET PI_TIMESTAMP=?, PI_TAGNAME=?, PI_VALUE=?, PI_STATUS=?; Relevant PI Point AttributesExtended DescriptorLocation1 Location2 Location3Location4Location5P1=G1 P2=G4 P3=G5 P4=G610010InstrumentTagPointTypePointSourcePI_G1.SQLInt16SRDB Table DesignPI_TIMESTAMPPI_TAGNAMEPI_VALUEPI_STATUSDatetime (MS SQL Server) Date/Time (MS Access)Char(50) (MS SQL Server) Text(50) (MS Access)Real (MS SQL Server) Number Single Precision (MS Access)Char(12) (MS SQL Server) Text(12) (MS Access)Content of the global variables fileG1=sinusoid/TS G2="any_string1" G3=any_string2 G4='sinusoid'/AT.TAG G5='sinusoid'/VL G6='sinusoid'/SS_C  Example 4.1 PI Point Database Changes Short Form Configuration SQL Statement (file PI_TAGCHG1.SQL)INSERT INTO T4_1 (TAG_NAME, ATTRIBUTE_NAME, CHANGE_DATETIME, CHANGER, NEW_VALUE, OLD_VALUE) VALUES (?, ?, ?, ?, ?, ?);Relevant PI Point AttributesExtended DescriptorLocation1Location2Location3Location4Location5P1= AT.TAG P2= AT.ATTRIBUTE P3= AT.CHANGEDATE P4=AT.CHANGER P5=AT.NEWVALUE P6=AT.OLDVALU100-1 (Marks the tag as managing point for point changes)0InstrumentTagPointTypePointSourcePI_TAGCHG1.SQLInt32SRDB Table DesignTAG_NAMEATTRIBUTE_NAMECHANGE_DATETIMECHANGERVarchar(80) (MS SQL Server) Text(80) (MS Access)Varchar(80) (MS SQL Server) Text(80) (MS Access)Datetime (MS SQL Server) Date/Time (MS Access)Varchar(80) (MS SQL Server) Text(80) (MS Access)NEW_VALUEOLD_VALUEVarchar(80) (MS SQL Server) Text(80) (MS Access)Varchar(80) (MS SQL Server) Text(80) (MS Access) Example 4.2 PI Point Database Changes Long Form Configuration (only changedate and tag name recorded) SQL Statement (file PI_TAGCHG2.SQL)INSERT INTO T4_2 (TSTAMP_EXEC, TSTAMP_CHANGEDATE, TAG) VALUES ({Fn NOW()}, ?, ?);Relevant PI Point AttributesExtended DescriptorLocation1Location2Location3Location4Location4P1= AT.CHANGEDATE P2= AT.TAG 100-2 (Marks the tag as managing point for point changes)0InstrumentTagPointTypePointSourcePI_TAGCHG2.SQLInt32SRDB Table DesignTSTAMP_EXECTSTAMP_CHANGEDATETAGDatetime (MS SQL Server) Date/Time (MS Access)Datetime (MS SQL Server) Date/Time (MS Access)Varchar(1024) (MS SQL Server) Text(255) (MS Access) Example 5.1 Batch Export (not requiring Module Database) SQL Statement (file PI_BA1.SQL)INSERT INTO TBATCH5_1 (BA_ID,BA_UNITID,BA_PRODUCT,BA_START,BA_END) VALUES (?,?,?,?,?);Relevant PI Point AttributesExtended DescriptorLocation1Location2Location3Location4Location5P1=BA.BAID P2=BA.UNIT P3=BA.PRID P4=BA.START P5=BA.END10010Point TypeInstrumentTag Point SourceFloat32PI_BA1.SQLSRDB Table DesignBA_ID BA_UNITID BA_PRODUCT BA_START BA_ENDVarchar(1024) (MS SQL Server) Text(255) (MS Access)Datetime (MS SQL Server) Date/Time (MS Access) Example 5.2a Batch Export (Module Database required) SQL Statement (file PI_BA2a.SQL)INSERT INTO TBATCH5_2 (BA_START, BA_END, BA_ID, BA_PRODUCT, BA_RECIPE, BA_GUID) VALUES (?, ?, ?, ?, ?, ?);Relevant PI Point AttributesExtended DescriptorLocation1Location2 Location3 Location4Location5/BA.START=*-10d P1=BA.START P2=BA.END P3=BA.ID P4=BA.PRODID P5=BA.RECID P6=BA.GUID10010PointTypeInstrumentTagPointSource Float32PI_BA2a.SQLSRDB Table DesignBA_ID BA_PRODUCT BA_RECIPE BA_GUIDBA_START BA_ENDVarchar(1024) (MS SQL Server) Text(255) (MS Access)Datetime (MS SQL Server) Date/Time (MS Access) Example 5.2b UnitBatch Export (Module Database required) SQL Statement (file PI_BA2b.SQL)INSERT INTO UNITBATCH5_2 (UB_START,UB_END, UB_ID, UB_PRODUCT,UB_PRICEDURE,BA_GUID,UB_GUID) VALUES (?,?,?,?,?,?,?);Relevant PI Point AttributesExtended DescriptorLocation1Location3Location4Location5/UB.START=*-10d /SB_TAG=SBTag P1=UB.START P2=UB.END P3=UB.ID P4=UB.PRODID P5=UB.PROCID P6=BA.GUID P7=UB.GUID1010Point TypeInstrumentTagPoint SourceFloat32PI_BA2b.SQLSRDB Table DesignUB_ID UB_PRODUCT UB_PROCEDURE UB_GUID BA_GUIDBA_START BA_ENDVarchar(1024) (MS SQL Server) Text(255) (MS Access)Datetime (MS SQL Server) Date/Time (MS Access) Example 5.2c SubBatch Export (Module Database required) SQL Statement (file PI_BA2c.SQL)INSERT INTO TSUBBATCH5_2 (SB_START, SB_END, SB_ID, SB_HEAD, SB_GUID, UB_GUID) VALUES (?, ?, ?, ?, ?, ?);Relevant PI Point AttributesExtended DescriptorLocation1Location3Location4Location5P1=SB.START P2=SB.END P3=SB.ID P4=SB.HEADID P5=SB.GUID P6=UB.GUID1010PointTypeInstrumentTagPointSourceFloat32PI_BA2c.SQLSRDB Table DesignSB_ID SB_HEAD SB_GUID UB_GUIDSB_START SB_ENDVarchar(1024) (MS SQL Server) Text(255) (MS Access)Datetime (MS SQL Server) Date/Time (MS Access) Example 6.1 Last Hour of Sinusoid SQL Statement (file PI_IU1.SQL)UPDATE PI_INSERT_UPDATE_1ROW SET PI_TSTAMP=?, PI_VALUE=?, PI_STATUS=?; UPDATE PI_INSERT_UPDATE RIGHT JOIN PI_INSERT_UPDATE_1ROW ON {Fn MINUTE(PI_INSERT_UPDATE_1ROW.PI_TSTAMP)}={Fn MINUTE(PI_INSERT_UPDATE.PI_TSTAMP)} SET PI_INSERT_UPDATE.PI_TSTAMP = PI_INSERT_UPDATE_1ROW.PI_TSTAMP, PI_INSERT_UPDATE.PI_VALUE = PI_INSERT_UPDATE_1ROW.PI_VALUE, PI_INSERT_UPDATE.PI_STATUS = PI_INSERT_UPDATE_1ROW.PI_STATUS;Relevant PI Point AttributesExtended DescriptorLocation1 Location2 Location3Location4Location5P1=TS P2=VL P3=SS_I10000InstrumentTagPointTypeSourceTagPointSourcePI_IU1.SQLFloat16SINUSOIDSRDB Table DesignPI_TSTAMP (PK)PI_VALUEPI_STATUSDate/Time (MS Access)Number Single Precision (MS Access)Number Whole Number (MS Access) Appendix B: Error and Informational Messages A string RDBMSPIID is prefixed to error messages written to the message log. RDBMSPI is a non-configurable identifier. ID is a configurable identifier that is no longer than 9 characters and is specified using the /in flag on the startup command line. General information messages are written to the pipc.log file. Additionally all PI-API errors (pilg_putlog() function) are directed there. The location of the pipc.log file is determined by the PIHOME entry in the pipc.ini file. The pipc.ini file should always be in the WinNT directory. For example, if the PIHOME entry is C:\PIPC then the pipc.log file will be located in the c:\PIPC\dat directory. Messages are written to PIHOME\dat\pipc.log at the following times. When the interface starts, many messages are written to the log. These include the version of the interface, the version of UniInt, the commandline parameters used, and the number of points. As the interface retrieves points, messages are sent to the log if there are any problems with the configuration of the points. If the /db is used on the command line, then various messages are written to the log file. Note: For PI-API version 1.3 and greater, a process called pilogsrvxe "pilogsrv"xe "pilogsrv:Installation"xe "Log Files:Purging" may be installed to run as a service. After the pipc.log file exceeds a user-defined maximum size, the pilogsrvxe "pilogsrv"xe "pilogsrv:Installation"xe "Log Files:Purging" process renames the pipc.log file to pipcxxxx.log , where xxxx ranges from 0000 to the maximum number of allowed log files. Both the maximum file size and the maximum number of allowed log files are configured in the pipc.ini file. Configuration of the pilogsrvxe "pilogsrv"xe "pilogsrv:Installation"xe "Log Files:Purging" process is discussed in detail in the PI-API Installation Instructions manual. Interface-specific Output File The file pointed to via the start-up argument /OUTPUT=filename, stores relevant operational information. During normal operation (/deb=0) error logging is sufficient just to detect problems. A problem can then be drilled down with modified debug level. The amount of extra information is depending on the debug level: /deb=1-5. Note: The debug level can be changed online via CPPI (right clicking on the Debug Level folder in the MMC CPPI Snap-In overwrites the current /deb= setting) without restarting the interface. Note: Errors related to tag values will also be reported in giving the tag a BadInput or BadOutput state. This happens, if the status of a RDBMS value is BAD or the output operation failed. Points can also get a status of I/O Timeout if the interface detects connection problems. Appendix C: Hints for the PI System Manager ORDER BY TIMESTAMP When using the option to query a complete time series for a tag, the query must solve the problem that the value/timestamp pairs arrive ordered by timestamp. Otherwise the interface cannot perform exception reporting and the PI Server cannot do compression. Reconnect to RDBMS Reconnect attempts are modified to be more general. In the past we have learned that only a few ODBC drivers report detailed error codes for networking problems. This was required for RDBMSPI Version 1.28 to reconnect (codes 08xxx (network problems) and xxTxx (timeout) were required). As a result, the interface reported an error (typically S1000) but did not reconnect (because S1000 is a general error). Now, on any serious error we test the connection with the RDBMS and do a reconnect if necessary. Suppress I/O Timeout A common problem was that for backup reasons the RDBMS was shutdown periodically. Since the interface then reports a connection problem (I/O Timeout gets written to all interface tags), queries with reference to previous timestamps being read only queried back in time to the shutdown event. As a result data was missing. In such a situation the startup flag /NO_INPUT_ERROR can help. Field Size (1) If the field size is less than required for the current value to be passed, the interface prints an error message into the log file but continues to try on the next event with the value valid at that time. E.g. if the field length of a character field is 2 and the interface tries to store ON and OFF values, ON will work, OFF will generate an error. Uppercase for Constant String If the query contains a constant in the SELECT column list, and the constant is a string, some ODBC drivers transform this string to capital letters. E.g. SELECT timestamp,0,No Sample WHERE the NO SAMPLE arrives in the PI part of the interface. Searches in the Bad and Good area are now case insensitive to address this problem. Repeated Error Messages Some error messages in the pipc log file are only displayed on first occurrence. To avoid log files with many same messages, we report only when the error is resolved. In the interface specific log file (/output=if_logfile) this feature is not implemented => e.g. ODBC runtime errors coming up in every scan may cause the log file growing infinitely. Field Size (2) The minimum field size for digital state output is 12 characters. Some ODBC drivers also require one additional character for the string termination byte (NULL). In this case we need a minimum field size of 13 characters. No Data SELECT statements using LST or LET may not get any data if the clocks of PI System computer and RDBMS System are not synchronized. That is because LST and LET are filled from the interface but compared to RDBMS timestamps. Login to PI To avoid login problems (changed password, API 1.3.8 bug,...) we recommend to setup trust/proxy for the interface. The interface was changed to not require an explicit login anymore (/user_pi now optional). Appendix D: Interface Test Environment Interface Version 1.28 The interface version 1.28 was tested using the following software versions: Intel Platform OnlyOperating SystemWindows NT 4.0 Workstation and Server, SP1 and SP3C-CompilerMS Visual C/C++ 5.0 PIPI 3.1 on NT (Intel), Build 2.71 and 2.81 PI-API 1.2.3.4 UNIINT 2.23, 2.25, 2.31 RDBMSODBC DriverRDB Oracle 6.1 (Open VMS) 2.10.11002.10.1100MS SQL Server 6.52.65.0240Oracle 7.2 (Open VMS)2.00.00.6325dBase III, dBase IV3.50.360200 (MS Access)MS Access 95, MS Access 973.50.360200Interface Version 2.0 The interface version 2.0 was tested using the following software versions: Intel Platform OnlyOperating SystemWindows NT 4.0 Workstation SP4 C-CompilerMS Visual C/C++ 6.0 SP2PI3.2 - SR1 Build 357.8 PI-API 1.2.3.4 and PI-API 1.3.0.0 RDBMSODBC DriverMS SQL 6.50.201 (ROBUSTNESS tests only)3.60.03.19MS SQL 7.00.6233.70.06.23ORACLE 8.0.5.0.0 (NT)8.00.06.00Interface Version 3.08, 3.11.0.0 The Interface Version 3.0.8, 3.11.0.0 was tested using the following software versions: Intel Platform OnlyOperating SystemWindows NT 4.0 Workstation SP6 Windows 2000 SP2 C-CompilerMS Visual C/C++ 6.0 SP5PI3.2 SR1 Build 357.8 3.3 Build 361.43 3.3 Build 361.96 PI-API 1.3.4, 1.3.8 PI-SDK 1.1.0.142, 1.2.0.168, 1.2.0.171 UNIINT 3.4.8; 3.5.0 RDBMSODBC DriverORACLE 8.00.5000 (NT) ORACLE 9i 9.0.1.1.1 (NT) Oracle 8.0.5.0.0 Oracle 8.01.73.0 Oracle 9.00.11.00 MS ODBC Driver for Oracle 2.573.6526.00SQL Server 07.00.069903.70.0820SQL Server 20002000.80.194.00IBM DB2 07.01.0000 (NT)06.01.0000Informix 07.31.0000 TC5 (NT)02.80.0008 2.20 TC1Sybase 12 ASE3.50.00.10MS Access 20004.00.5303.01Paradox Microsoft 4.00.5303.01 BDE 5.0 installed Revision History DateAuthorComments24-Jan-1997BB, MF50 % draft20-Mar-1997BB, MFPreliminary Manual10-Dec-1997BBRelease Manual Version 1.2118-Sep-1998BBMore details added related to RDBMS Interface Version 1.2706-Nov-1998BBRelease Manual Version 1.2829-Nov-1998MF50 % draft of Version 225-Feb-1999MH,MFExamples tested and corrected04-Jun-1999BBRelease Version 2.0824-Mar-2000MFTestplan 2.14 (SQL Server 7.0,Oracle8, DB2 Ver.5)16-May-2000BBManual Update for Release 2.1415-Sep-2000BBManual Update for Release 2.1510-Jan-2001BBManual Update for Release 2.1616-May-2001BBManual Update for Release 2.1728-Oct-2000MFVersion3 Draft17-Jul-2001MFVersion3.0.6; Skeleton Version 1.0905-Oct-2001BBReview for Release30-Oct-2001DARAdded ICU information02-Nov-2001BB/id is equivalent to /in09-Nov-2001MF, BBLocation5 evaluation against PI3.3+27-May-2002BBEdit /UTC text for better understanding04-Jun-2002BBMMC correction26-Jun-2002MFCPPI chapter reviewed01-Jul-02MFAdded a Note to Tag Distribution chapter and Oracle9i tests.11-Jul-02MFAdded Chapter Output Points Replication02-Sep-02CGChanged title; fixed headers & footers30-Sep-02BBremoved section break in note on first page chapter 115-Nov-02MFAdded Chapters about the RxC reading strategy; added comments into section Multi-statement SQL Clause; minor text modifications related to version 3.1 and Uniint 3.5.1.27-Feb-03BBmanual review, examples moved to appendix, several text changes04-Apr-03BBPI API node changed to PI interface node, interface supported on Windows NT 4/2000/XP24-Apr-03CGFormatting; Fixed TOC; Fixed headers & footers Introduction  PAGE iii PAGE i  PAGE ii Table of Contents  PAGE 136  RDBMSPI Relational Database (RDBMS via ODBC) Interface to the PI System  PAGE 77 Relational Database (RDBMS via ODBC) Interface to the PI System  PAGE 97 Introduction Functionality SQL Statements Recording PI Point Database Changes PI Batch Database Output PI Batch Database Output Automatic Re-connection Database Specifics More Examples PI Point Configuration Startup Command File Startup Command File I/O Rate Tag Configuration For Users of Previous Interface Versions PAGE 89 RDBMSPI Relational Database (RDBMS via ODBC) Interface to the PI System  PAGE 89 Interface Installation Buffering PAGE 127 Relational Database (RDBMS via ODBC) Interface to the PI System  PAGE 127 PILOGIN.INI Control Program Appendix A: Examples Relational Database (RDBMS via ODBC) Interface to the PI System  PAGE 135 Appendix B: Error and Informational Messages Appendix C: Hints for the PI System Manager Appendix D: Interface Test Environment Revision History PIBatchDB PIBatch PIUnitBatches B PIUnitBatch PISubBatches PISubBatch RDBMSPI Interface RDBMS MS SQL Server / ORACLE / ODBC Driver Manager RDBMS Specific ODBC Driver PI-API Node PI Home Node PI Home Node (NT,Unix or Open VMS) WinNT/Win2000 -OR- @AKLMPQRWXYZ[m ͼ͚}ugXTgTgBg#jhO]SCJOJQJU^JaJhO]ShO]S:CJOJQJ^JaJhO]SCJOJQJ^JaJhO]SB*phh6c h6ch6ch6chO]SCJh6ch6cCJ!h6c5B*CJmH nH phu!h"#5B*CJmH nH phu!hb5B*CJmH nH phu!h'ZJ5B*CJmH nH phu!hO]S5B*CJmH nH phuh+~*OJQJmH nH uhd0ARXYZ[msnssnssEkd$$Ifl0*p 6$F4 la$If$If @&^`gd6c9gd6cgd6c #'(  - j nsv:gnsv:Ekd$$Ifl0*p 6$F4 la$If$IfEkdr$$Ifl0*p 6$F4 la       - . P Q R h i j k * + 0   !%սսս~miaZRhO]SmHsH jhO]ShO]SB*phhB| hXhO]SCJOJQJ^JaJ jbhO]SCJOJQJ^JaJ"hO]SCJOJQJ^JaJmHsH/jh0oh0oCJOJQJU^JaJhO]ShO]SCJOJQJ^JaJhO]S0JB*ph#jhO]SCJOJQJU^JaJ/jh0oh0oCJOJQJU^JaJj k z * + 0  nssgns -b * sEkd$$Ifl0*p 6$F4 la$If$IfEkd$$Ifl0*p 6$F4 la  B 2g=k$PS$PS$$s$s$s$s$s$s$s$s$s$s$s @&^`Xkd$$IflF*p 46$F      4 la%&:-./012HIb˸æ~hWh jhasUmHnHu*hasB*CJOJQJaJmHnHphu jhasUmHnHujhasUmHnHuhasmHnHu"has5B*CJOJQJaJphjhasUjhasUhashasB*phjhasB*UphhO]SB*phhO]ShO]SmHsHhB|mHsH"bcdefguv89:;<=LMfghijk~¾؈w¾ljohasU jhasUmHnHu jyhasUmHnHu"has5B*CJOJQJaJphjhasUjhasUhas*hasB*CJOJQJaJmHnHphuhasmHnHujhasUmHnHu jhasUmHnHu(./0234EF_`acdez{رؠ؏~m jQ hasUmHnHu j hasUmHnHu j[ hasUmHnHu jhasUmHnHu jehasUmHnHu*hasB*CJOJQJaJmHnHphuhasmHnHujhasUmHnHu jhasUmHnHu*4eY.x.d@1 ^$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s(9:STUWXYro j hasUmHnHu j= hasUmHnHuh[has>*mHnHu j hasUmHnHu jG hasUmHnHu j hasUmHnHu*hasB*CJOJQJaJmHnHphujhasUmHnHuhasmHnHu+ ()*,-.GWXYrstvwx(ssh2SuhasmHnHsH u jhasUmHnHu j)hasUmHnHu j hasUmHnHu j3 hasUmHnHuh[has>*mHnHu*hasB*CJOJQJaJmHnHphuhasmHnHujhasUmHnHu+()*,-.DE^_`bcdvw  ӧḞឍwfwU j hasUmHnHu jhasUmHnHu*hasB*CJOJQJaJmHnHphu jhasUmHnHuhasmHnHu jhasUmHnHu4h2SuhasB*CJOJQJaJmHnHphsH uh2SuhasmHnHsH ujhasUmHnHu jhasUmHnHu!    !:;<>?@gh+,-/ӾwӾljrhasU jhasUmHnHu j|hasUmHnHu"has5B*CJOJQJaJphjhasUjhasUhas jhasUmHnHu*hasB*CJOJQJaJmHnHphuhasmHnHujhasUmHnHu*/01gh =>?XYZ\]^uvwܽΧܖΧ܅Χzvvkvzvvj^hasUhash[hasB*ph jhasUmHnHu jhhasUmHnHu*hasB*CJOJQJaJmHnHphu jhasUmHnHujhasUmHnHuhasmHnHu"has5B*CJOJQJaJphjhasU'+,-/01^_xyz|}ͿͮͿͿ͇Ϳ|qͿ`Ϳ jhasUmHnHujJhasUh[hasB*ph jhasUmHnHu*hasB*CJOJQJaJmHnHphu jThasUmHnHujhasUmHnHuhasmHnHu"has5B*CJOJQJaJphhasjhasUjhasU%1~Fs3a!MwHr!`$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s(}~&'@ABDEFSTmnoqrs~ j,hasUmHnHu jhasUmHnHu j6hasUmHnHu jhasUmHnHu j@hasUmHnHujhasUmHnHuhasmHnHu*hasB*CJOJQJaJmHnHphu,-./123AB[\]_`arsرؠ؏‹xf"has5B*CJOJQJaJphjhasUjhasUhas jhasUmHnHu jhasUmHnHu j"hasUmHnHu*hasB*CJOJQJaJmHnHphuhasmHnHujhasUmHnHu jhasUmHnHu( !-.GHI·}l[ jhasUmHnHu jhasUmHnHu jhasUmHnHu"has5B*CJOJQJaJphjhasUjhasUhash[hasB*ph*hasB*CJOJQJaJmHnHphuhasmHnHujhasUmHnHu jhasUmHnHu#IKLMWXqrsuvw|}ґ葀e4h2SuhasB*CJOJQJaJmHnHphsH u j hasUmHnHuh2SuhasmHnHsH u jk hasUmHnHu jhasUmHnHu juhasUmHnHu*hasB*CJOJQJaJmHnHphujhasUmHnHuhasmHnHu&()BCDFGHRSlmnpqr|}ӧӖӅ||k| jM#hasUmHnHuhasmHnHu j"hasUmHnHu jW"hasUmHnHu j!hasUmHnHu4h2SuhasB*CJOJQJaJmHnHphsH uh2SuhasmHnHsH ujhasUmHnHu ja!hasUmHnHu$ !@AZ[\^_`uvꭥ}l j%hasUmHnHuj9%hasU"has5B*CJOJQJaJphj$hasUjhasUhas jC$hasUmHnHu j#hasUmHnHujhasUmHnHuhasmHnHu*hasB*CJOJQJaJmHnHphu*`SHN 4!n!!!:""""3#\### $A$$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s(34MNOQRS(‹xf"has5B*CJOJQJaJphj(hasUjhasUhas j'hasUmHnHu j%'hasUmHnHu j&hasUmHnHu*hasB*CJOJQJaJmHnHphu j/&hasUmHnHuhasmHnHujhasUmHnHu(()BCDFGHcd}~. / H I J L M N ֬wfw j*hasUmHnHu*hasB*CJOJQJaJmHnHphu j*hasUmHnHujhasUmHnHuhasmHnHuj)hasUh[hasB*phj)hasU"has5B*CJOJQJaJphj(hasUhasjhasU(N k l !!.!/!0!2!3!4!N!O!h!i!j!l!m!n!ίΈwf j,hasUmHnHu jn,hasUmHnHu j+hasUmHnHu*hasB*CJOJQJaJmHnHphu jx+hasUmHnHujhasUmHnHuhasmHnHu"has5B*CJOJQJaJphj*hasUjhasUhas(n!!!!!!!!!!!!!!!!!""4"5"6"8"9":"w"x""""""""""""""wjP/hasUjhasUhas j.hasUmHnHu jZ.hasUmHnHu j-hasUmHnHu*hasB*CJOJQJaJmHnHphu jd-hasUmHnHujhasUmHnHuhasmHnHu'""""""""""##-#.#/#1#2#3#<#=#V#W#X#Z#[#\#l#m#################$ίr j1hasUmHnHuj<1hasUj0hasU*hasB*CJOJQJaJmHnHphu jF0hasUmHnHujhasUmHnHuhasmHnHuj/hasUjhasUhas"has5B*CJOJQJaJph,$$$ $ $ $ $!$:$;$<$?$@$A$n$o$$$$$$$$$$$$$$$$$$%¾xkZ!h[hasB*mHnHphsH h[hasmHnHsH j3hasUh[hasB*phj(3hasU"has5B*CJOJQJaJphj2hasUjhasUhas*hasB*CJOJQJaJmHnHphuhasmHnHujhasUmHnHu j22hasUmHnHu!A$$$$%\%%%& &&'(})9**+++,,?,F,i,,,,$s$s$s$s$s$s$s$$s$s$s$/$v:$Oj $$s$$$$s$$$ $$$Ifa$gd+~*gd+~*gd+~*%%%%%%"%#%$%:%;%<%U%V%W%Z%[%\%r%s%%%%%%ŷoffUf j5hasUmHnHuhasmHnHu4hashasB*CJOJQJaJmHnHphsH u j4hasUmHnHujhasUmHnHuhashasmHnHsH uh[hasmHnHsH u4hashas5B*CJOJQJaJmHnHphsH j4hasUjhasUhashasmHnHsH %%%%%%%%%%%%&&&&&&&&#&&&'':(M(((((((|)}))))꾶}}}voo}vgc_h.[h+~*h+~*h+~*5 hO]S6] hO]S5\h)QhO]S'jhasB*CJUmHnHphu"has5B*CJOJQJaJphj 6hasUjhasUhas j5hasUmHnHujhasUmHnHuhasmHnHu*hasB*CJOJQJaJmHnHphu%))8*9*:*P*Q*a*b*l*m******+"+^+g++++++,$,?,F,,,,,,,,,ƾ䳫wmw]hd05B*CJOJQJphh+~*h+~*<\h+~*hd0<CJ\aJh+~*hd0\ hd06]hd0 h/6] hO]S6] *hO]Sh+~*B*phhkhkB*phh.[B*ph$j6h.[hUBB*Uphh.[h.[B*phjh.[h.[B*UphhO]Sh.[h)Q$,,,,,|q v:qB v: $$Ifgd+~*tkd7$$Ifl40Hb  04 la f4 $$$Ifa$gd+~*,,,,----[-----.(.).N....... /// /[/]///////////e0p0u0~00000000000 1 1X1Z1h1k11׾hkhkB*phj_FhO]SB*UphhO]SB*phjhO]SB*UphhShShO]S5hO]Sh+~*h+~*6h)Qh+~* hd0hhfjhd0mH sH hd0;,,, - v:B v: $$Ifgd+~*tkd7$$Ifl40Hb  04 la f4 ---\- v:B v: $$Ifgd+~*tkdX8$$Ifl40Hb  04 la f4\-]-s-w- v:B v:$$Iftkd9$$Ifl40Hb  04 la f4w-x--- v:B v:$$Iftkd9$$Ifl40Hb  04 la f4---- v:B v:$$IftkdY:$$Ifl40Hb  04 la f4---- v:B v:$$Iftkd;$$Ifl40Hb  04 la f4--. . v:B v:$$Iftkd;$$Ifl40Hb  04 la f4 . ... v:B v:$$IftkdZ<$$Ifl40Hb  04 la f4..).O. v:B v:$$Iftkd=$$Ifl40Hb  04 la f4O.P.`.l. v:B v:$$Iftkd=$$Ifl40Hb  04 la f4l.m.{.. v:B v:$$Iftkd[>$$Ifl40Hb  04 la f4.... v:B v:$$Iftkd?$$Ifl40Hb  04 la f4.... v:B v:$$Iftkd?$$Ifl40Hb  04 la f4.... v:B v:$$Iftkd\@$$Ifl40Hb  04 la f4.... v:B v:$$IftkdA$$Ifl40Hb  04 la f4../ / v:B v:$$IftkdA$$Ifl40Hb  04 la f4 / /// v:B v:$$Iftkd]B$$Ifl40Hb  04 la f4//9/=/ v:B v:$$IftkdC$$Ifl40Hb  04 la f4=/>/W/Z/ v:B v:$$IftkdC$$Ifl40Hb  04 la f4Z/[/// v:B v:$$Iftkd^D$$Ifl40Hb  04 la f4//// v:B v:$$Iftkd E$$Ifl40Hb  04 la f4////P0a022255556)7$s$s$s$s|$s|$sw$s$s$s$s$s$sgdFgd+~*1gd+~*tkdE$$Ifl40Hb  04 la f4 11111112222222d2e2{2|22222222295Q5U5a5b5c5췳umie^ZVZh[hS hO]S6]hFhUBhUBB*ph$jWGhUBhUBB*UphhUBhUBB*phjhUBhUBB*UphhfihShL`5hL`h+~*hO]ShkhkB*phhXB*ph$jFhXhXB*UphhXhXB*phjhXhXB*UphhXc5d5p5555555w6x6666667"77777777788888888888j9k9̻ԷԷԪ|̻ԷljhkhO]SB*UphjIh0oUhkhkB*phjZIhO]SB*UphhO]SB*phjhO]SB*Uphh)Q hO]S0JjHhO]SUjhO]SUhO]ShXdh[0JjGh0oU h[h[h[jh[U&)7X788-:D::::;;;;;; ; ; ; ; ;;;;;;<$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$$$  & F p^gd gd k999999999999::*:+:-:.::::;;;;;;;;E;;;_<p<<<<<<<ѾƩzvrkrga hO]S0J h)Q hO]S6]hyhfj h h jhO]SCJUmHnHuhO]Sh jJhO]SB*UphjhO]SB*UphhO]SB*phhO]SB*phhkhkB*phjhkhO]SB*Uph$j~JhkhO]SB*UphhkhO]SB*ph&<I=Q=R=f=====>>h>i>j>|>~>>>>>>>>>>>??%?(?Y?Z????@ @!@.@3@V@W@X@@@@ A*AAAkBtBC4D7DADMDTDUDVDWDDDDDDDDDEEjhO]SB*Uphh~hk h)Qh h"h h}h hO]Shh hO]S6]h)Q hO]S5\hfihO]SF<=(?Z????"@X@@@@+A`A}AABBBB/CQCCC$W$ $s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s & F h^gd} & F h^gd  & F p^C#DF8FEGG/HH IJ@KLL*LdLLM$M OO#PPPxRRfU$$s$s$s$s$s$s$s$s$G$d$s$G$v:$v:$d$s$s$5L$s$s$s$s$s$s ^`gdO^gdkE'E(E8E9E\E]E^EaEbEcEyEzEEEEEEF/F0F8FFFmGnGGGGGGGG/H0HFH˷tϏid hr<h jhr<hr<h!jrLhO]SB*UhphhO]SB*hphjhO]SB*Uhph h)Qh hO]Shh/B*phhO]SB*phhkjKhO]SB*UphhO]ShkhkB*phjhO]SB*UphjxKhO]SB*UphhO]SB*ph#FHGHmHnHoHHHHHHHHHHH I IJJ@KAKBKIKJKWKXK~KKKKKKKKKKKKLºrbjNhr<h|UhjNhr<hr<Uhh" hr<hhr<5\h jhr<hr<5\hhO]S hO]S5\ hO]ShhO]SB*hphhO]SB*ph h0ohjtMhr<h|Uhhr<hr<0JhjLhr<h|Uh hr<hjhr<Uh&LLL)L*L1LILOLTL[L_LyLLLLLLLLLLLLLLLLLLMMMM$MMMMMMNNNNNNNNNNNNNNN O O$O]OgOº¶²§®œ®®§§hj hO]S6]h | hO]S5\hB|hvghOhO]SB*phhO]S h)Qh hvgh hOhhvghO]S6hhO]S6]h h h hO]ShhO]S5\h hOhO:gOhOkOOOOOOOOOOOOOOOOO P!P#P$P%P,P-P:P;PaPbPcPvPwPyPzPPѲçљzjz`zzhr<h+I0JhjOhr<h+IUhjh+IUh h+Ihh" h+Ihh+I5\h jhr<h+I5\hhkhkB*ph!jMOhO]SB*UhphjhO]SB*UhphhO]SB*hphhO]SB*hph hO]ShhB|hO]S hO]S5\ h%5\#PPPPPPP%Q)Q:QGQQQQQQQQQRRwRxRRRRRRRRRRRRR SSSSSS5ToTpTƻƷƷƲ~vrƷnƷhZh |hO]SB*phhkhkB*ph!jQhO]SB*UhphjhO]SB*UhphhO]SB*hph hO]ShhIn2 hO]S6]h5D hO]ShO]SB*phh+IB*hphh+Ih+I0Jhjh+IUhjUPh+Ih|Uh+pTTTTTTTTTTTTTTTTT UUUU2UEUXU_UeUfUkUUUUUUUUVV VV+V.V0VAVJVKVTVaVbVVVVj}QhQh|Uh hQhjhQUh h+IhhQh+Ih jhQh+Ih hO]S5\ hSihSihSih |h5D h5D 5 hO]S5hZhZhO]S6 h6hh5D hO]S2fUUVJVV-W{WW`XXY YZZZZ[[[$5L$s$\C$s$s$s$.j$s$.j$.j$.j$ $s$5L$s$s$s$gdm$gd $gd $LT^L`Tgd d7$8$H$^gd Yv1gd Yv ^`gd YvgdQ &dPgdSigd5D VVVVVVVVVVVVW-WTWVWzW{WWWWWWWWWWWWCXIXUXVXXX^X`XmXnXXXXܽܵ{u{lf h:!0J3hmhOj0J3 hOj0J3hmh Yv0J3 h Yv0J3h Yvh Yv0J3 h.0J3h5D hgh YvhsB*phh YvB*phhQh+Ihh1h10JhjRh1h1Uh h1hjh1Uh hQhjhQUhhQhQ0Jh(XXXXXXXX YYYYY%Y*Y,Y9Y?Y@YOYSYcYnYoYpYqYrYxYyYYYYZZZZZZZZZZZZҾҪΘx!jhE/hE/B*Uhph hE/h h^v5h h|*h hSihh5D hSi5 hmh&h hm0J35OJQJmH nH uhh hf hZhSih|*hmh5D hm5 h:!0J3hmh Yv0J3 hOj0J3hmhOj0J3+ZZZZZ [[[[[[[*[+[Q[R[S[f[g[i[j[[[[[Ĺդrh^YI^?h1h10JhjSh1h1Uh h1hjh1UhhQhQ0Jhj$ShQhQUhjhQUh hQhhQhQh jhQhQhhmB*phhkhk>*B*phhkhkB*ph!jhE/hE/B*UhphhE/B*hph'jRhE/h?B*UhphhE/hE/B*hph[[[L\\\e]l]m]n]]]]]]]]]]]]^^"^#^(^)^-^_____!_T_U_[_^___`_a_s_t_v_____````ȸЭꢛꖑꉍh2c^h( h%5 hO]S5 hO]S5\ h5\h&-hkhkB*phjPThO]SB*UphhO]SB*phjhO]SB*Uph hO]ShhSihQzohO]ShQhQhjh1Uh3[_``````cc9dd)eaeve|e)ghO]ShO]SB*phhkhkB*phjhO]SB*Uph@ll m m#m$mNnOnnnoooo(p)pqq9q=qtquqqqqqqqqqqqqrrss t tit|tttwuuuuuuuuvvFvGv]vhO]SB*phjhO]SB*Uphh@wh h \ h \h hO]S\hDh)QhO]S56\]hlx hO]S5\h#_ hO]S6]h 5zhnhO]Sh 7BoKoTo]oooo9qrr%u&uwuuuu$s$s$s$s$s$s$s$ $$s$s$sp @9 @9Z@9 $$Ifa$gd @&uuuuuvjp @9` v:`Zv: $If] $$Ifa$gd kdW$$Ifl44F>p#H l 20    4 laf4uuu%vvztp v:j v:jZv: $If]$IfkdW$$IflF>p#H l 20    4 la]v^vnvovvv0x3x;x@xZxaxgxhxxxxxxxxxyy yy/y6yfygyyyyyyyyyyyyyyy z zz{{}}vwĹ̲̮Ĺ̲̮Ĺ̲̮Ĺ̲̮̪̍̉̕̕hSXhO]SmH sH hO]SmHsH h \h hO]S\hh hO]S6]hO]S6]mHsHhO]SmHsHhO]ShkhkB*phjhO]SB*UphhO]SB*phjXhO]SB*Uph5vvvvvwqp v:q v:g $If]$IfkdX$$Ifl4F>p#H l `20    4 laf4vvvvvvwqp v:q v:q v:g $If]$IfkdY$$Ifl4F>p#H l  20    4 laf4vvvwwwwqp v:q v:q v:g $If]$IfkdZ$$Ifl4F>p#H l  20    4 laf4wwwwwwqp v:q v:qZv:$IfkdQ[$$Ifl4F>p#H l  20    4 laf4wwwwwztp v:t v:tZv:$Ifkd\$$IflF>p#H l 20    4 lawwwx/xztp v:t v:tZv:$Ifkd\$$IflF>p#H l 20    4 la/x0x@xdxxztp v:t v:tZv:$Ifkd]$$IflF>p#H l 20    4 laxxxxxxyztp v:t v:t v:tZv:tZv:$IfkdH^$$IflF>p#H l 20    4 layyyPycyyztp v:t v:tZv:tZv:$Ifkd_$$IflF>p#H l 20    4 layyyyyztp v:t v:tZv:$Ifkd_$$IflF>p#H l 20    4 layyyz z zzx$slp @9l @9lZ@9 $$Ifa$gd kdy`$$IflF>p#H l 20    4 la z zz1zDzvpp v:p v:pZv:$Ifkd4a$$Ifl44F>p#H l 20    4 laf4DzEzVztzzztp v:t v:tZv:$Ifkda$$IflF>p#H l 20    4 lazzzzzztp v:t v:tZv:$Ifkdb$$IflF>p#H l 20    4 lazzz {{ztp v:t v:tZv:$Ifkdnc$$IflF>p#H l 20    4 la{{({@{A{ztp v:t v:tZv:$Ifkd)d$$IflF>p#H l 20    4 laA{B{M{e{f{ztp v:t v:tZv:$Ifkdd$$IflF>p#H l 20    4 laf{g{z{{{ztp v:t v:tZv:$Ifkde$$IflF>p#H l 20    4 la{{{{{ztp v:t v:tZv:$IfkdZf$$IflF>p#H l 20    4 la{{{||ztp v:t v:tZv:$Ifkdg$$IflF>p#H l 20    4 la||&|D|U|ztp v:t v:tZv:$Ifkdg$$IflF>p#H l 20    4 laU|V|h|||ztp v:t v:tZv:$Ifkdh$$IflF>p#H l 20    4 la|||||ztp v:t v:tZv:$IfkdFi$$IflF>p#H l 20    4 la|||||ztp v:t v:tZv:$Ifkdj$$IflF>p#H l 20    4 la||}%}&}ztp v:t v:tZv:$Ifkdj$$IflF>p#H l 20    4 la&}'}7}T}U}ztp v:t v:tZv:$Ifkdwk$$IflF>p#H l 20    4 laU}V}f}}}ztp v:t v:tZv:$Ifkd2l$$IflF>p#H l 20    4 la}}}}}ztp v:t v:tZv:$Ifkdl$$IflF>p#H l 20    4 la}}}}}ztp v:t v:tZv:$Ifkdm$$IflF>p#H l 20    4 la}}}~~ztp v:t v:tZv:$Ifkdcn$$IflF>p#H l 20    4 la~~$~N~O~ztp v:t v:tZv:$Ifkdo$$IflF>p#H l 20    4 laO~P~]~~~ztp v:t v:tZv:$Ifkdo$$IflF>p#H l 20    4 la~~~~~ztp v:t v:tZv:$Ifkdp$$IflF>p#H l 20    4 la~~~~~ztp v:t v:tZv:$IfkdOq$$IflF>p#H l 20    4 la~~%&ztp v:t v:tZv:$Ifkd r$$IflF>p#H l 20    4 la&'1TXztp v:t v:tZv:$Ifkdr$$IflF>p#H l 20    4 laXYgztp v:t v:tZv:$Ifkds$$IflF>p#H l 20    4 laztp v:t v:tZv:$Ifkd;t$$IflF>p#H l 20    4 laztp v:t v:tZv:$Ifkdt$$IflF>p#H l 20    4 la34ztp v:t v:tZv:$Ifkdu$$IflF>p#H l 20    4 la45Chiztp v:t v:tZv:$Ifkdlv$$IflF>p#H l 20    4 laij}ztp v:t v:tZv:$Ifkd'w$$IflF>p#H l 20    4 laЀрztp v:t v:tZv:$Ifkdw$$IflF>p#H l 20    4 laрҀztp v:t v:tZv:$Ifkdx$$IflF>p#H l 20    4 la8Kztp v:t v:tZv:$IfkdXy$$IflF>p#H l 20    4 laKL]|}ztp v:t v:tZv:$Ifkdz$$IflF>p#H l 20    4 la}~ztp v:t v:tZv:$Ifkdz$$IflF>p#H l 20    4 laztp v:t v:tZv:$Ifkd{$$IflF>p#H l 20    4 la (;ztp v:t v:tZv:$IfkdD|$$IflF>p#H l 20    4 la;<Prztp v:t v:tZv:$Ifkd|$$IflF>p#H l 20    4 laztp v:t v:tZv:$Ifkd}$$IflF>p#H l 20    4 laт҂ztp v:t v:tZv:$Ifkdu~$$IflF>p#H l 20    4 laӂԂׂ؂݂ނ˄̈́8EK҅ԅ<=?`ac5?AUVYZ_`hiveft{񰨰hs Rhs R\hs RhO]S\hO]SmHsHhh&-hs Rhs R5\hs RhO]S5\hO]SmHsH h \h hO]S\hs RhO]S hO]S5\?҂ӂԂzx$slp @9l @9lZ@9 $$Ifa$gd kd0$$IflF>p#H l 20    4 la*ztp v:t v:tZv:$Ifkd$$IflF>p#H l 20    4 la*+:EXztp v:t v:tZv:$Ifkd$$IflF>p#H l 20    4 laXYhrztp v:t v:tZv:$Ifkda$$IflF>p#H l 20    4 lazx$slp v:f v:fZv:$If $$Ifa$gds Rkd$$IflF>p#H l 20    4 lavpp v:p v:pZv:$Ifkdׂ$$Ifl44F>p#H l 20    4 laf4&CXxrp v:r v:rZv:$Ifkd$$IflF>p#H l 20    4 laXYeztp v:t v:tZv:$IfkdZ$$IflF>p#H l 20    4 laztp v:t v:tZv:$Ifkd$$IflF>p#H l 20    4 laztp v:t v:tZv:$IfkdЅ$$IflF>p#H l 20    4 la˄ztp v:t v:tZv:$Ifkd$$IflF>p#H l 20    4 la"7ztp v:t v:tZv:$IfkdF$$IflF>p#H l 20    4 la78Eh}ztp v:t v:tZv:$Ifkd$$IflF>p#H l 20    4 la}~ƅztp v:t v:tZv:$Ifkd$$IflF>p#H l 20    4 laƅDž҅ztp v:t v:tZv:$Ifkdw$$IflF>p#H l 20    4 la!/ztp v:t v:tZv:$Ifkd2$$IflF>p#H l 20    4 la/0=TUztp v:t v:tZv:$Ifkd$$IflF>p#H l 20    4 laUVavwztp v:t v:tZv:$Ifkd$$IflF>p#H l 20    4 lawxztp v:t v:tZv:$Ifkdc$$IflF>p#H l 20    4 lăچztp v:t v:tZv:$Ifkd$$IflF>p#H l 20    4 laچۆztp v:t v:tZv:$Ifkdٍ$$IflF>p#H l 20    4 la34ztp v:t v:tZv:$Ifkd$$IflF>p#H l 20    4 la45?STztp v:t v:tZv:$IfkdO$$IflF>p#H l 20    4 laTUVvwzx$slp @9f v:fZv:$If $$Ifa$gds Rkd $$IflF>p#H l 20    4 laȇztp v:t v:tZv:$IfkdŐ$$IflF>p#H l 20    4 laȇɇԇهztp v:t v:tZv:$Ifkd$$IflF>p#H l 20    4 la*ztp v:t v:tZv:$Ifkd;$$IflF>p#H l 20    4 la*+7HIztp v:t v:tZv:$Ifkd$$IflF>p#H l 20    4 laIJTcdztp v:t v:tZv:$Ifkd$$IflF>p#H l 20    4 ladeftuvzx$slp @9f v:fZv:$If $$Ifa$gds Rkdl$$IflF>p#H l 20    4 lavwztp v:t v:tZv:$Ifkd'$$IflF>p#H l 20    4 la{)<pÉɉʉӉ12BCSTU &QR[\ijlÎĎЎºŸº}} jhO]SmHnHu hs R\hs RhO]S\ hO]S5hlxhkhkB*phjhO]SB*UphhO]SB*phjhO]SB*Uph hlx0J hEyHhO]S\ hEyHhO]S hO]S0J h hO]S5\hO]S hO]S6]1VW&W&zx$sv$x$sv$dv$x$st$st$sv$r$st$skd$$IflF>p#H l 20    4 la &CQRhi@9@9}@9@9vkd$$Ifl440P!nX 04 laf4 $$Ifa$gds Rij{v:v:$$Ifqkd—$$Ifl0P!nX 04 laώv:v:$$Ifqkdg$$Ifl0P!nX 04 laώЎv:v:$$Ifqkd $$Ifl0P!nX 04 laЎҎHIUYŏՏ !”$05;<Җږûû鱭ϭ˖ûh  hO]S5h)Q hlxhlx hO]S6]hlxhlxhlx5\hs Rhs R\hs RhO]S\hs R hlx5\ jhO]SmHnHu hO]S5\hO]ShO]SmHsHhO]S5\mHsH9v:v:$$Ifqkd$$Ifl0P!nX 04 la3Tv:v:$$IfqkdV$$Ifl0P!nX 04 laTUwv:v:$$Ifqkd$$Ifl0P!nX 04 lav:v:$$Ifqkd$$Ifl0P!nX 04 la$s@9@9 $$Ifa$gds RqkdE$$Ifl0P!nX 04 lav:v:$$Ifqkd$$Ifl0P!nX 04 la v:v:v:$$Ifqkd$$Ifl0P!nX 04 lazv:v:$$Ifqkd4$$Ifl0P!nX 04 la$s@9@9 $$Ifa$gds Rqkdٞ$$Ifl0P!nX 04 laUav:v:$$Ifqkd~$$Ifl0P!nX 04 laabv:v:$$Ifqkd#$$Ifl0P!nX 04 la0$s$5L$s{$ v$j$se$5L\$s  & F^gds R  & F^gds R & Fgdlxgdlx`qkdȠ$$Ifl0P!nX 04 la Җږ$sv@9N@9mv@9N@9vkdm$$Ifl440 #N&0t4 laf4 $$$Ifa$gds R $ & F^gds RKNӗŘƘ3kęƙڙۙ{}`c ל؜ݜޜĝ¾¾¾¬¾¢hU hs Rh.hs R h.0J "hs RhO]S5OJQJmHnHuhz=h.h  hs R0J h 5\ h#_5\ hO]S0J h#_h hO]S5\hO]Shs RhO]S\;ӗۘ3kۙ|vv:|Nv:|Nv:|Nv:|N1|Nv:|Nv:|Nv:|N d|Nv:|N1|N d|Nv:$ & F$Ifgds Rtkd$$Ifl40 #N&0t4 laf4 ؜ٜݜ JN1Nv:zpvv:pNv:pNv:pNv:pN1  & F$IfvkdƢ$$Ifl40 #N&0t4 laf4$ & F$Ifgds R JNOST֞מ۞ܞ  #$%W^}Πՠޠ")֡ߡ :>CD{ ƿhx&hz=hh)Q h6] hO]S6] hO]S5 hO]S\hs Rhs R\hs Rhx~h4 hO]S0J hO]S5\hO]Sh EJKNYўvv:Nv:Nv:  & F$Iftkdu$$Ifl40 #N&0t4 laf4ўҞ֞^vv:Nv:Nv:Nv:  & F$Iftkd $$Ifl40 #N&0t4 laf4$s|v@9|N@9 $$Ifa$gd~&Ptkdˤ$$Ifl40 #N&0t4 laf4 vv:Nv:  & F$Ifqkdv$$Ifl0 #N&0t4 laΠvv:Nv:Nv:N1  & F$Ifqkd$$Ifl0 #N&0t4 laΠϠҠvv:Nv:  & F$Ifqkd$$Ifl0 #N&0t4 la { =Sw$s$/$1$v:$t$s$5L$s$|$$s$$@&@&qkde$$Ifl0 #N&0t4 la $Drs<>@§5AŨѨsx-.>?Z[\ˬ̬@CIZ_qvȥ h>6]h> hO]S6]h )hkhkB*phj hO]SB*UphhO]SB*phjhO]SB*Uphh^yh hO]S5\h)QhO]SCJOJQJ hO]S0J hhO]S89s @$s$5L$$s$s$s$$$7$s$s@9@9 $$Ifa$gds R & Fgd> & F^ íʭ?@VWghۮܮ)-DMNQ&/O_hijkʱٱɹѮޖޖhs R hO]S0J h )h ) h )5\h ) hs R\hs RhO]S\hkhkB*phjhO]SB*UphhO]SB*phjhO]SB*Uph hO]S5\ h>] h>6]h>hO]S hO]S6]4ڮv:v: $ & F$Ifqkd$$Ifl440 $}04 laf4ڮۮݮ'v:v: $ & F$Iflkd$$Ifl0 $}04 la'()PʱԱ$s$ $ x$$sv@9v@9 $$Ifa$gds Rgd  & F^lkdU$$Ifl0 $}04 laٱڱ&/5>Ͳݲ޲'6:FG E([`ekyz$ҶӶ۶yhO]SB*phjhO]SB*Uph hO]S6]h ) hO]S0J hO]SB*ph hhO]ShhO]S>*h^yh^yOJQJ^J h^y5\ h )5>*h^yh^y5>*h^y hO]S5\hO]S5>*\hO]Shs RhO]S\ hs R\.v:v:  & F$Ifvkd$$Ifl440 $}}04 laf4v:v:  & F$Ifqkd$$Ifl0 $}}04 la&v:v:  & F$IfqkdM$$Ifl0 $}}04 la&'*v:v:zv: $Ifgd^y  & F$Ifqkd$$Ifl0 $}}04 la E53$$s}$sr$PSm$sk$sk$PSi$5Lk$sd$ & Fgdk  & F@&^  & F^gdqkd$$Ifl0 $}}04 la #235DE_`()*IdԸظ޸MQRWkϹٹJ`Ⱥͺ¹¹²ȫȧȫ²ȒȎȫȆȧȫȧȂhUhO]SB*phh hO]S>*jhO]SB*Uphh ) hO]S6] hO]S5\hehe0J hO]S0J hO]ShkhkhkB*phjhO]SB*UphhO]SB*phj<hO]SB*Uph1ԸϹ(wٻ?'Kw|k$$$s$s$s$s$PS$s$PS$5L$s$0~$s$$$s$5L$s$s$s$Oj gdQ@l  & F^gdgdgd2*gdQgdU  & F^  & F^gdU & Fͺֺ (wٻ޻ 8?WX^az{Լ>?@IVW}~rhhQhQ0Jhj6hQhQUhjhQUh hQhhQhQh jhQhQh hhUhh0J3hhMcIh'ZJ hU5 jhO]SmHnHuhUh)h ) hO]S5 hO]S0J hO]S hUh hU5\hUh)Q(ɽʽ˽'@JžǾɾ\]Ŀſɿʿ%",.0h}h) hO]S6] hO]S5\h2*h2*5h2*hO]S5 h2*5 hO]S5hhUhhO]S>*hO]Sh2* h2*5\hLhL0JhjhLhLUh hLhjhLUh hQhjhQUh1hqwU^wx|}TUVz{| δĪΠ}v hy?5\h)hLhL0JhjhLhLUh hLhjhLUhhQhQ@l0JhjfhQhQ@lUhjhQ@lUh hQ@lhhQhQ@lh jhQhQ@lh hO]S6]hO]SB*phhO]S hO]S5\.k  ($$s$s&@9@9@9@9'@9'@9 $$Ifa$gdy? $ & F^  & F^ ( $Xknxz|",4Lpqr{žرukf hLhjhLUhhQhw!0JhjrhQhw!Uhjhw!Uh hw!hhQhw!h jhQhw!h hO]ShhVh h)hO]ShO]SB*phh$ h2*5\ hO]S5\hy?hO]S\hy?\mHsHhy?hO]S\mHsHhO]S$()4AFeB7&v:7v:7v:7v:7'v: $ & F$Ifkd$$Ifl44ֈ ,#04 laf4'v:'v:;&v:v:v:kd$$Iflֈ ,#04 la $ & F$If v:'v:'v:;2$s  & F^kd$$Iflֈ ,#04 la $ & F$If q36di$5L$s$s$s$s$$s$s$PS$s$s$s$s$s$s$5L$s@9@9`@9@9 @9 $$Ifa$gdQ8  & F@&^gdgdw!  & F^^  & F^123f}6[`d},4ϿϿϺϢ~wwwr h1h hO]S6] h_)0J hO]S0J h)hhO]SB*phhhO]S>*hO]ShVhO]S5hhVhV5h hVhhO]S6]hhO]S5\h hO]ShhQhw!hhLhL0JhjhLUhjhLhLUh+4CDos?Hiux`ebc ;Xmκβؐ، h7h h)hhSX hO]S5hQ8hO]S\hQ8\mHsHhQ8hO]S\mHsHhO]SB*phhQ8B*hphh1B*hphhO]SB*hphhO]S hO]S5\ hSXh h1h hO]Sh h15h hO]S5h3 @96)v:)v: $ & F$Ifa$kd$$Ifl44ֈj ,d "804 laf4 $$Ifa$gdQ8 `v:v: v: v:9v:kd$$Iflֈj ,d "804 la $ & F$Ifa$*9;<v:`v:v: v: v:9kd$$Iflֈj ,d "804 la $ & F$Ifa$<>?@N\^v:v:`v:v: v: v: $ & F$Ifa$^_`FD$sB$ D$sB$B$kd~$$Iflֈj ,d "804 laNWXz{|}?@9<?W~67'(jhw!Uh hw!hhQhw!h jhQhw!hh@whO]S56hh56hh@wh@w56h h@w0J ht20J hE0J hb0J hVxhh7h7h h7h hSXh hO]Sh hHh h_)h2(NOPcdfg )/7BDLxnopǷ̭̥wmhc hDh hCShhEyHhO]S\hhEyHh<(hhO]SB*hph hh h<(h h#"h hO]ShhO]S5\hhQhw!hhLhL0JhjhLhLUh hLhjhLUhhQhw!0Jhjhw!UhjmhQhw!Uh hw!h&DL3O>{HTU 5E$s$5L$s$s$s$5L$s$s$s$s$ $s$s$PS$s$5L$s$0~$s$$s$7$$ & FBgd'RhgdL1rgdgd+ gd+   & F^gdw!p=>?ޱޝ~vqlqqdhEyHhO]Sh hh h#"hhO]S5\hhLhL0Jhj.hLhLUh hLhjhLUhhQhw!0JhjhQhw!Uhjhw!UhhQhw!h jhQhw!h hw!hh<(h<(hh<(h<(5h h<(h hO]Sh#(1378:;NO >BLMOPQTq Kcfz{ٻ鶮鶮鋅 hE0J hO]S0J h<(hhO]S6]hh#"6]hh6]hhE6]h h#"hhO]S>*B*CJaJphhB*phhQ8B*phhO]SB*phhO]S5\h hO]ShhEyHhO]ShhEyHhO]S\h3GHLM| $*?RTUZyz{|~*+Qتخjhw!Uh hw!hhQhw!h jhQhw!hhhs20J3h'ZJh h5h+ hO]S5\ h#"5\ h<(5\h<(hHh#" h'0J \ hO]S0J \h' h6] hO]S6]hO]S-QRSfgij  Wjkȸͮͦ}upf_f hL1r5>*h'Rhh'Rh5>* h'Rh5h'Rhh'Rh5h:!hc hL1rhL1rhL1r h'Rh>* hL1r>*hh'Rh>*h'RhhQhw!hhLhL0JhjdhLhLUh hLhjhLUh hw!hhQhw!0Jhjhw!UhjٻhQhw!Uh"234RSTZ!"'*/0348Zջ˱էڄxqg`gqxqY`Y hO]S6] h6]hEyHhO]S6] hEyHhO]ShEyHhO]S\hO]ShIhLhL0JhjhLhLUh hLhjhLUhhQhw!0JhjhQhw!Uhjhw!Uh hw!hhQhw!h jhQhw!hh'Rhh'Rhhh'Rh h'Rhh'Rh"ETf| /JB* U$7$s$$s$s$ x$s$5L$s$s$.j$s$.j$s$s$$s$s$s$$s$sgdpgdpgdpgd\gdfh  & F^gdgdw! & FBgd'RhZ\]p#$&'YZ[z{| /ٿϵ٫~vrjrfbfbfh'ZJh\hfhhfh5hfhhEyHhO]S5hEyHhO]S0J 5hhLhL0JhjƾhLhLUh hLhjhLUhhQhw!0Jhj;hQhw!Uhjhw!Uh hw!hhQhw!h jhQhw!h hO]S5\hO]Shc&/7>@IJBghKL'-38NS\bhm,1нȴЩȴȥԡ hp6] hp5\h<{hp6hjhphIjhUh h 0JjihUjh Uh h-2h\0J35\h\h\0J356\]h\0J36] h\0J351:@J\ijsyz9@SP޻m&j$hpB*OJQJUphhpB*OJQJph jhpB*OJQJUphh0&hpOJQJ hb \hb hp\h)QhkhkB*phjhpB*UphhpB*phjhpB*Uphhp56\] hp6]hp* JTs$s$s$s$s$s$s$s@94@9@9 $$$Ifa$gdb $gdb gdpgdp tiv:i4@9iv: $$Ifgdb kd$$IfF44F #n 0    4 Faf4 zov:o4@9ov: $$Ifgdb kd$$IfFF #n 0    4 Fa $/9zo @9c@9c@9c@9c@9 $$Ifa$gdb $$Ifgdb kd$$IfFF #n 0    4 Fa9:@i(ODv:D4@9D4@9Dv:Dv:Dv: $$Ifgd/kd[$$IfF4r:@#. 04 Faf4(QRSnv:14@94@9kd9$$IfF4ֈ :@#`n04 Faf4 $$Ifgd/,NOv:v:v:v:1kd2$$IfF4ֈ :@# 04 Faf4 $$Ifgd/OPfHk4@94@9 v:v:v:v: $$Ifgd/<1v:1?@9 $$Ifgd/kd+$$IfF4ֈ :@# 04 Faf4mv;Oaj 7W]t}#*29abjǾǺdzdzdz­ǭǦǾdzdzǦǾǾǞdzdzǖǖDžh-2hpB*CJ]hphhb hp\hEyHhp\ hp5\ hp0J hp6]hb h)Q hp5hphpOJQJhkhkB*OJQJph jhpB*OJQJUphhpB*OJQJph42[ 7$sz$u$sp$sp$sp$sp$sp$PSp$sp$PSp$sgdpgdpgdp`gdpvkd$$IfF40 #n04 Faf4 |29abj$p$s $s$s@9jb@9jnkdY$$Ifl0S !064 la d<<$If^gd/ $$Ifa$gdb gdpgdpgdp $(2A$s$sz)@9z@9z@9z@9zn@9$$ & F$Ifa$gd/$gdpnkd$$Ifl0S !064 la ABIJ{|}UD)v:D)v:Dv:Dv:Dv:Dnv:$$ & F$Ifa$gd/kd$$Ifl44r V !Z[pF04 la f4VEEv:Ev:Ev:Env:$$ & F$Ifa$gd/kd$$Ifl4r V !`Z[pF04 la f4!*,-LQ_h#<=AFGJ59PQRV!6:NOckp߼߸߫jhO]SB*UphhHhGh$2 hO]S5\hRhAihh)Qh~hO]Sh-2 hb 5\ hp5\ hp6]hp@!+VEEv:Ev:Ev:Env:$$ & F$Ifa$gd/kd$$Ifl4r V ! FZ[pF04 la f4+,-PQVE"v:ETv:Env:$$ & F$Ifa$gd/kd}$$Ifl4r V ! FZ[pF04 la f4QRZ[_i|k)v:k)v:kMv:knv:$$ & F$Ifa$gd/kdo$$Ifl4F  !,F0    4 la f4ijko|kkMv:knv:$$ & F$Ifa$gd/kd0$$Ifl4F  !`%F0    4 la f4|kkMv:knv:$$ & F$Ifa$gd/kd$$Ifl4F  ! F%F0    4 la f4|kv:$$ & F$Ifa$gd/kd$$Ifl4F  ! F%F0    4 la f4)v:Mv:nv:$$ & F$Ifa$gd/\kd$$Ifl4 !l04 la f4R\]|w$sr$5Lm$d$sb$ ]$sX$5L]$sX$;gdwgd)  & F^ & Fgdpgdpkd$$Ifl4F  !%F0    4 la f4 RS[\]bcd<=>qx IJYvȰ{whN3h&,@ hwhkhhhbhw6 hw5hbhRqh. hw hN35hN3hN35h)hkhkhk5 h)h)hkhkB*phjhO]SB*UphjhO]SB*UphhO]SB*ph.J.k l  /  .  LM3mz$v:$;$s$s$$s$$s$PS$s$$s$s$$s$s$s$ $s$$$s$s$sgdpgdAsO  & F^ & Fgdw!$gdwvw./8EFlmn!/X`akqrR\jҸȮҤׁ}vvrn}hAihH hO]S5\h<{hO]ShLhL0JhjhLhLUh hLhjhLUhhQhw!0JhjUhQhw!Uhjhw!Uh hw!hhQhw!h jhQhw!hhN3 h&,@5\ hN35\h&,@)"#b   * + ; < h i j l m v       ̼̩~t~dtZhQhw!0JhjhQhw!Uhjhw!Uh hw!hhQhw!h jhQhw!hhkhkB*phhB*ph$jhhB*UphjhhB*UphhhB*phhEwhh7 hO]S5\h)Q hO]S0J h&,@hO]Sh0&#                    \ `            " # $ + , . / yryg jhQhAsOh hO]S5\ h&,@5\hkhkB*phj<hO]SB*UphhO]SB*phjhO]SB*Uphh&,@hkh<{hO]ShQhw!hhLhL0JhjhLhLUh hLhjhLUh hw!hjhw!Uh'/ 8 E F l m n            w x   *+;<IJKMQdkĿĥ}m}b}hkhkB*phjhO]SB*UphhO]SB*phjhO]SB*UphhY^h hO]S hO]S5\hLhL0JhjJhLhLUh hLhjhLUhhQhAsO0JhjhQhAsOUhjhAsOUh hAsOhhQhAsOh$SU  JKabrsxyz{&'78=>?@VļġļļġļļġļļjhO]SB*UphjhO]SB*UphhkhkB*phjHhO]SB*UphhO]SB*phjhO]SB*Uphh=7 hO]S6] h<{6]h&,@ h&,@5\hO]S hO]S5\ h0&5\0@9@9@9@9UGv:Gv:Gv:$$ & F$Ifa$kdn$$Ifl44\J $04 laf4$$ & F$Ifa$v:Yv:v:v:v:kdB$$Ifl\J $04 la$$ & F$Ifa$VWghmn  FGH[\^_̹̮̾}sn^sTshLhL0JhjihLhLUh hLhjhLUhhQhAsO0JhjhQhAsOUhjhAsOUh hAsOhhQhAsOh jhQhAsOh hO]Sh hO]S5\ hO]S6]hO]ShkhkB*phjhO]SB*UphhO]SB*phjhO]SB*Uph ,Ege$sc$5L^$sY$sL@9L@9L@9 $ & F$Ifa$gd=7gdAsOkd $$Ifl\J $04 la!"rw{(5Z[abk  ,-PenoxxpkakjhF:Uh hF:hhQhF:h jhQhF:hhF:hkhkB*phjhO]SB*UphhO]SB*phjhO]SB*Uphh~hO]S\ h~hO]Sh&,@$h=7hO]SB*CJOJQJ\ph h=75\ hO]S5\ hO]S6]h=7hO]S h=7h%E]^qy{@9VIv:Iv:Iv:Iv: $ & F$Ifa$kd$$Ifl44\K $04 la f4 $ & F$Ifa$gZv:Zv:Zv:Zv: $ & F$Ifa$kd$$Ifl\K $04 la 0ng[$sQ$L$C$sC$s>$sgdF:  & F^ & F $dN  & F^gd=7kd$$Ifl\K $04 la &2HI7;=>az{ȸͮͦמ{ttlglglgl h0|\h0|hO]S\ hO]S5\h-9hO]S5h-9h-95h-9hO]Shas h0|hO]ShO]SB*phhQhF:hhLhL0JhjhLhLUh hLhjhLUh hF:hhQhF:0JhjhF:UhjhQhF:Uh'D7a$s$$s$$$s@9F @9jskdA$$Ifl0r$064 la  $$Ifa$gd0|gd0|  & F^ PSF PSPSF PSskd$$Ifl0r$064 la  $$If^%PSF PS $$If^skd$$Ifl0r$064 la %&9DPSF PS $$If^skd9$$Ifl0r$064 la DEZfPSF PS $$If^skd$$Ifl0r$064 la fg|PSF PS $$If^skd$$Ifl0r$064 la ]_  !!$s$s~$s|$p$sk$ f$`$s`$s|$$gd gd gd]  & F^gd  & F^gdskd1$$Ifl0r$064 la  [\]^_cjk $'3]_hּ󲭝xpxllelll h]5\h]h-9hO]S5h-9h-95h-9 hO]S5\hO]ShhLhL0JhjdhLhLUh hLhjhLUhhQh0JhjhQhUhjhUhhQhh jhQhh hh hO]SCJh'hr'*+789;=@HKX  ' ( 8 9       ˻˨䊂}s}jhUh hhhQhh jhQhhhkhkB*phhXB*ph$jhXhO]SB*UphjhXhO]SB*UphhXhO]SB*ph hXhO]S hO]S5\hO]Sh'ZJh)hhj%h]h-9*       !!"!#!q!r!!!!!!!!!!!!!" "F$G$`$a$q$r$ȸͮ͟yuh`P`hjhO]SB*UphhO]SB*phjhO]SB*Uphh)Q h hO]ShDohO]S5hDoh-95h-9hO]S hO]S5\hQhh h`0JhhLhL0JhjhLhLUh hLhjhLUh hhhQh0JhjhUhjhQhUh!!!!$$%& &&&$$s$$s@9E @9 @9dkdK$$IflFq W$  06    4 la $Ifgd 1^1 r$$$$%%0%&&&&x'y'''((((5)6)?)L)M)s)t)u))))))))))***ºrhdh hLhL0JhjhLhLUh hLhjhLUhhQh0Jhj\hQhUhjhUh hhhQhh jhQhh hO]S6] hO]S5\h0&hDohO]SjhO]SB*UphhkhkB*ph&&%&-&N&O&T&\&}&v:E v: v:uv:E v: v:kd$$IflFq W$  06    4 la $If}&~&&&&{uv:uE v:u v:$Ifkd$$IflFq W$  06    4 la &&&&&ysv:sE v:s v:$IfkdL$$IflFq W$  06    4 la &&&&&ysv:sE v:s v:$Ifkd$$IflFq W$  06    4 la &&&'((5)*4*****yw$sw$su$5Lw$su$5Lp$snw$sw$sw$sh$s^gdkd$$IflFq W$  06    4 la  ****************++++++,,,,,-.-P-R-\-^-c-y-{--.......// ///////00000$0%0)0*0:0@0A00000 11A1B1F1G1M1N1|1}11111 h \h hO]S\h h0& hO]S6]h\xhO]SjhO]SUmHnHuQ*********+++,..../$s$s$s$s$s$s$s$s$s$s$s$s $s$s@9 @9@9 $$Ifa$gd gd  & F^^// /./4/{uv:u v:uv:$Ifkd$$IflF@ J 06    4 la 4/5/=/_/i/{uv:u v:uv:$Ifkd=$$IflF@ J 06    4 la i/j/q///{uv:u v:uv:$Ifkd$$IflF@ J 06    4 la /////{uv:u v:uv:$Ifkd$$IflF@ J 06    4 la /////ysv:s v:sv:$Ifkd>$$IflF@ J 06    4 la ////0ysv:s v:sv:$Ifkd$$IflF@ J 06    4 la 000 0.0:0yt$sh@9h @9h@9 $$Ifa$gd gd kd$$IflF@ J 06    4 la :0;0D0f0l0{sv:s v:sv:$$IfkdN$$IflFv Jq c06    4 la l0m0u000{sv:s v:sv:$$Ifkd$$IflFv Jq c06    4 la 00000{sv:s v:sv:$$Ifkd$$IflFv Jq c06    4 la 0001 1{sv:s v:sv:$$IfkdO$$IflFv Jq c06    4 la  1 1151>1yqv:q v:qv:$$Ifkd$$IflFv Jq c06    4 la >1?1Q1k1v1yqv:q v:qv:$$Ifkd$$IflFv Jq c06    4 la v1w1111yqv:q v:qv:$$IfkdZ$$IflFv Jq c06    4 la 11111yqv:q v:qv:$$Ifkd $$IflFv Jq c06    4 la 1111111ys$sn$sb@9b @9b@9 $$Ifa$gd gd ^kd$$IflFv Jq c06    4 la 111111122T2U2222222223333444(4D4Q4X4Y4a4b4d4k4l444O5X55555E6F6t7u7777777778ǿǿhkhkB*phj{hO]SB*UphhO]SB*phjhO]SB*UphhC hO]S5hC hC 5hC hkh`(h`(5h`(h)Qh}2%h0& h \h hO]S\hO]S811122{uv:u v:uv:$Ifkdj$$IflFq Js f06    4 la 22!2C2M2{uv:u v:uv:$Ifkd$$IflFq Js f06    4 la M2N2X2r2z2{uv:u v:uv:$Ifkd$$IflFq Js f06    4 la z2{2222ysv:s v:sv:$Ifkdk$$IflFq Js f06    4 la 22222ysv:s v:sv:$Ifkd$$IflFq Js f06    4 la 2225\89;:_::yw$u $su$ss$ n$sb@9b@9 $$Ifa$gd 1gd kd$$IflFq Js f06    4 la 88881838R8Z8\8`8i8k8u8w8888899=9?9p9r99999;:A:B:W:X:e:f::::::::;;,;6;F;^;j;z;{;;;;;;;;;;;;;;<<<!<)<6<7<O<P<W< h 5\jhO]SUmHnHuhO]SmHsH hO]Sh h \h hO]S\ hO]S5\hC h0&hO]Sh}2%I::::v:v:$Ifnkd$$Ifl0$xx064 la ::::v:v:$Ifnkd$$Ifl0$xx064 la :::;v:v:$Ifnkd,$$Ifl0$xx064 la ;;,;E;v:v:$Ifnkd$$Ifl0$xx064 la E;F;^;y;v:v:$Ifnkd`$$Ifl0$xx064 la y;z;;;v:v:$Ifnkd$$Ifl0$xx064 la ;;;;v:v:$Ifnkd$$Ifl0$xx064 la ;;;;v:v:$Ifnkd.$$Ifl0$xx064 la ;;<<!<7<v:-v:v:^kdb$$Ifl4$064 la f4$Ifnkd$$Ifl0$xx064 la 7<8<O<g<v:v:$Ifnkd$$Ifl0$xx064 la W<f<g<|<<<<<<<)=+=`=b=======>>>>n?p??????? @ @g@j@k@m@y@z@@@@@@@@@@@Aû hLhjhLUhhQh0JhjhQhUhjhUh hhhQhh jhQhh hkh hO]S6]hO]S6]h h)Qh hO]S0J hC h h0&h hO]ShhO]S2g<h<|<<v:v:$Ifnkd$$Ifl0$xx064 la <<<<>>>>y@%AABByC{C|C$s$s$s$PS$PS$PS$s$s$s$s$s$PSgdnkd.$$Ifl0$xx064 la AAA#A$A%A&A/A*hhO]SB*ph h h h B*phhzhz5hzhU/h h}2% hO]S5\hO]ShQ hQhQh%h ~>?XXYDZZZ[[[\\\\]O]P]c]]]]^:^L^^^^$s$s$G$$s$s$s$PS$PS$5L$s$s$s$1$s$s$s$s$s$1$1$1$s$1$11gdn 7^`gdA 7^`YYYDZnZoZZ[[\\g\p\\\\\\J]K]L]M]P]c]]] ^^^^:^=^A^J^K^L^N^^m/hnhn0J35B*OJQJmH nH phu)hA0J35B*OJQJmH nH phuhn0J35B*phhAhA0J35B*phhA0J35B*phhA hA5\h%9Mhik h%9M5\h)Q hO]S0J hO]SCJaJhO]S0J0^J hO]S5\hO]S%^^^^^)_0_1_9_{_~______R`S`g```````hamabb c8c9c:c=c@ccccc(d;dddѵ{wrwwwm hO]S>* hO]S5h Y hO]S6] hO]S5\hO]SB*phhO]S hhrhKhhr hhr5hhrhhr5hhKhA0J35B*phh4)hn0J35B*phhA)hA0J35B*OJQJmH nH phu)hn0J35B*OJQJmH nH phu*^ __^_k_~___S`g``ac(ddd#eFeXe'f1f7ffgg@g$1$1$1$1$1$s$s$5L$$s$s $s$1$s$s$s$PS$s$s$$s$s$PS$PS$s 7^`gdhr7gdA 7^`gdAdddddd#eFeXefekeee1f7f`fhfmfuffffffg@gSghi[idijjjjjjjjkkkkkkl5l(m)m_m`mcmmmmmmmnnnnnnnnnnnnnӾ hE0J3 hNz0J3hNzhNz0J3hh0&hNzhEw hO]S>*hO]SB*ph hO]S0J hO]S6]h)QhO]S hO]S5\F@gwgFhiijjMj~jjjkkl5lDlmnnnCpppprrs$s$s$s$s$s$s$s$1$$s$s$s$s$PS$s$s $.j$$s$s$s$$s$s$s$sgdNzgdEwgdEw 7^`nnnoop%psppppqqr rr)rGrQrrrrrrrrYsbsssttttculuuuuu=vevvv,w;w=wBwJwKwLwawtwwwyyKy}yDzJzYz[z`zbzcziz hO]S5h# h &>*hhTh: hKp hO]S0J h)Q hO]S>* jhO]S6] hO]S6] hO]S5\h*h1obhxxhO]SB*phhO]SBss|ttttxuuuu=vevvv,wLwawwwwwwKy}yDzczzz$G$d$$s$s$s$$s$$s$s$s$PS$s$s$$s$$$s$s$s$s$s$sgdhTgdhTizxzzzzzz {{{{{{|N}}}~!~"~(~X~~~~~~~~~ !"5689opqֹ֩֕vrhhLhL0JhjXhLhLUh hLhjhLUhhQh0JhjhQhUhjhUhhQhh jhQhh hhhO]S6]h hO]Sh hO]S5\ hO]S0J hO]S6]hO]S+z {{~||N}O}~~`t$PS$s$s$s$PS$s$s$s$s$s$$s$$s$$s@9X @9 @9 $$Ifa$gdj4  & F^gd3 & Fgd   tł΂Ńރ&/͆ֆنچކׇ@BЍ󻳻󻞻󻞻󚒚hj4hj4h \h h`6] hO]S5\ hEw6]hEwhO]S] hO]S6]hj4hO]S\h)QB*phh B*phhIrB*phhO]SmHnHuh3h:LhO]ShO]SB*ph8Mvlv:lX v:l v:  & F$Ifkd$$Ifl44F F$0  0    4 laf4MNSpukv:kX v:k v:  & F$Ifkd$$Ifl4FF F$0  0    4 laf4; ukv:kX v:k v:  & F$Ifkd$$Ifl4FF F$0  0    4 laf4  ukv:kX v:k v:  & F$IfkdQ$$Ifl4FF F$0  0    4 laf4φAukv:kX v:kX v:k X v:k v:  & F$Ifkd$$Ifl4GF F$0  0    4 laf4ABCus$sn$sb@9b@9 $$Ifa$gdj4gd kd$$Ifl4GF F$0  0    4 laf4v:v: $$Ifgdukd$$Ifl0 $|064 la9v:v: $$Ifgdskd>$$Ifl0 $|064 la9:D|v:v: $$Ifgdskd$$Ifl0 $|064 la|}v:v: $$Ifgdskdr$$Ifl0 $|064 laɍЍ$s$s~@9~ @9~ @9 $$Ifa$gdj4skd $$Ifl0 $|064 laЍэ؍ٍ!yososo so   & F$Ifkd$$Ifl44Fn a$  06    4 la f4!5BDf~Ԏێݎ+13Xm/ELNÐː̐$<FHݑ 4WXipr')MhO]SmHnHuh`hO]S6]mHsHhO]SmHsHhO]S5CJ\ h:LCJ hO]SCJhO]S hO]S6]L!"+Df{qsq sq   & F$Ifkd_$$Ifl4Fn a$  06    4 la f4fgr{qsq sq   & F$Ifkd$$Ifl4Fn a$  06    4 la f4Ɏݎ{qsq sq   & F$Ifkd$$Ifl4Fn a$  06    4 la f4"3X{qsq sq   & F$Ifkd $$Ifl4Fn a$  06    4 la f4XYam{qsq sq   & F$Ifkd7 $$Ifl4Fn a$  06    4 la f4{qsq sq   & F$Ifkd $$Ifl4Fn a$  06    4 la f4/{qsq sq   & F$Ifkd $$Ifl4Fn a$  06    4 la f4/0:N{qsq sq   & F$IfkdY $$Ifl4Fn a$  06    4 la f4̐{qsq sq   & F$Ifkd $$Ifl4Fn a$  06    4 la f4̐͐ؐ${qsq sq   & F$Ifkd $$Ifl4Fn a$  06    4 la f4$%0H{qsq sq   & F$Ifkd{$$Ifl4Fn a$  06    4 la f4ݑ{qsq sq   & F$Ifkd1$$Ifl4Fn a$  06    4 la f4ݑޑ{qsq sq   & F$Ifkd$$Ifl4Fn a$  06    4 la f4 (4W{qsq sq   & F$Ifkd$$Ifl4Fn a$  06    4 la f4WX`r{qsq sq   & F$IfkdS$$Ifl4Fn a$  06    4 la f4ܓHRa{y$p$sg$y$e$sp$sY@9Y,@9 $$Ifa$gdj4  & F^  & F^kd $$Ifl4Fn a$  06    4 la f4 MNdeuv{|ʓܓ HMaoLVś˛̛t+3+̸̡̡̩̥̝̩̽̽Ŗ̏̽ hv5\ h`5\hQhQTh` hO]S6]hj4hO]S\ hj4\hj4h)Q hO]S5\hO]ShkhkB*phjhO]SB*UphhO]SB*phjhO]SB*Uph8abj}v:},v:  & F$Ifxkd<$$Ifl44H0 $\04 laf4v:,v:  & F$Ifskd$$IflH0 $\04 la#Uv:,v:  & F$Ifskd$$IflH0 $\04 laUV^v:,v:  & F$Ifskd@$$IflH0 $\04 laϖv:,v:  & F$Ifskd$$IflH0 $\04 laϖЖؖv:,v:  & F$Ifskd$$IflH0 $\04 la 6v:,v:  & F$Ifskd;$$IflH0 $\04 la67>LZY$s$~$s~$s$u$su$s$~$s~$s~ $ss$5L  & F^  & F^skd$$IflH0 $\04 la Knoۨ$$s$s$$$s$$s$5L@9@9 $$Ifa$gdj4^ $ & F^a$ & F&dP^  & F^ +4bk 35KOs|˦ԦyzgkotʨӨۨT]<klt  ĿĿh;hv hv\hvhO]S\hB hj4\hj4hO]S\ hO]S5hhj4 h`5\ hO]S5\hO]Sh)QHMv:v:  & F$Ifvkd$$Ifl440 !04 laf4MNPv:v:  & F$Ifqkd;$$Ifl0 !04 lalv$$y$sm@9m@9 $$Ifa$gdv  & F^  & F^qkd$$Ifl0 !04 la=v:v:  & F$Ifvkd$$Ifl440 !04 laf4=>Bv:v:  & F$Ifqkd3$$Ifl0 !04 lav:v:  & F$IfgdBjqkd$$Ifl0 !04 la=v:v:  & F$Ifqkd}$$Ifl0 !04 la;<>FHN&'=>NOTUVt}:;LMR`lǯȯدٯ-ߛߋj^!hO]SB*Uphj< hO]SB*Uphh4{YhO]S5h4{Y hv\hvhO]S\hkhkB*phjhO]SB*UphhO]SB*phjhO]SB*Uphhvh;hO]S4=>HZt$$su$s$so$sa@9a@9 $$$Ifa$gdv$gdv $ & F^gdvgdvgdvqkd"$$Ifl0 !04 la\{v:{v:$ & F$IfgdvvkdD$$Ifl440\ !k04 laf4\]_v:v:$ & F$Ifgdvqkd$$Ifl0\ !k04 laNv:v:$ & F$Ifgdvqkd$$Ifl0\ !k04 laNORv:v: $ & F$Ifqkd $$Ifl0\ !k04 la*`l$$s$s$s$s{@9{@9 $$Ifa$gdvqkd!$$Ifl0\ !k04 la-7?HijkðʰղֲQRTeko34JOTswRjl~ ,5ͽh`hfjhO]SB*phhv hO]S6]hD hD hD 5hBhhXh@UhpLhvhO]S\hFh?Th`hth)QhO]S hO]S5\>v:v:  & F$Ifvkd"$$Ifl440\ !k04 laf4Ov:v:  & F$Ifqkd #$$Ifl0\ !k04 lal~ȵԵ$$s${$sv$v$v$v$v$v$m  & F^ & F  & F^gdvqkd#$$Ifl0\ !k04 la  (@>ABCXMо2G$$s$s$s$s$5L$s$$$$s$s$s$s$s$$s$$$s$s$s=1 & F@1gdO]S^1gd+&0lvpqͺκBChiABC?Hdmþ#,2<>CFMV2;py_` ,NOh}2%jN$hM^U hO]ShO]Sh+h|w h)Q5hO]ShO]S5 h+h+hIKhBh:L hO]S5h`h!`hfjh)QhO]SB:l>h.CO-P$s$s$s$s$s$s$s$s$s$s$$s$H+$s$s$s$s$s$s$s$s$s$s$s$sgd+$gd+gd+1^=5@9e@9tv:tev:ee5L$$If^gd+ $$Ifgd+qkd$$IfF0 %0z4 Fa $$$Ifa$gd+7EMUYd}Tbi!")7@PSUW[+4DHIkn{CLXYamhO]SmHnHu hO]S0J hIKh+h|ht;h!` hO]S6]h)Q hO]S5\hO]Sh+hO]S\K569v:ev: $$Ifgd+qkd;$$IfF0 %0z4 Fav:ev:$Ifqkd$$IfF0 %0z4 Fa!KO|$s$s$s$s$s$s$s$s$s$s$s$s$s$s^qkd$$IfF0 %0z4 Fa0EU^jq$s$s$s$s$s$s$s$s$s$s$s$s@9@9$If^qrt#v:v:v:$IfqkdE$$Ifl440 !n04 laf4#$&Wv:v:v:$Iflkd$$Ifl0 !n04 laHv:v:v:$Iflkd$$Ifl0 !n04 laHIKv:v:$Iflkd=$$Ifl0 !n04 labv:v:$Iflkd$$Ifl0 !n04 labcev:v:v:$Iflkd$$Ifl0 !n04 laXY$s$s$s$s$ $p$$s|v @9|@9|@9 $$Ifa$gd+^lkd,$$Ifl0 !n04 la 46%9GHSTh"#,LMn{OPSTVW}9Bnoz hO]S\hQhvhg4 hv6 hg4hg4hVhg46 h6]hh)Q hO]S0J 5OJQJmH nH u hO]S6]h+hO]S\h+mHnHu hO]S0J hO]SmHnHuhO]S8&78vpv v:pv:pv:$Ifkd$$Ifl44FP!N x p06    4 laf489i~ztv v:tv:tv:$Ifkd$$IflFP!N x p06    4 la#Mztv v:tv:tv:tv:$IfkdP$$IflFP!N x p06    4 laMNTabztv v:tv:tv:$Ifkd $$IflFP!N x p06    4 labc|ztv v:tv:tv:$Ifkd$$IflFP!N x p06    4 lazx$sv$sjb@9j @9j@9 $$Ifa$gd+kd$$IflFP!N x p06    4 lazvpbv:p v:pv:pv:$Ifkd<$$Ifl44FP!:  p06    4 laf4ztbv:t v:tv:$Ifkd$$IflFP!:  p06    4 la(5ztbv:t v:tv:$Ifkd$$IflFP!:  p06    4 la56=MNztbv:t v:tv:$Ifkdv$$IflFP!:  p06    4 laNOW|zqbv:q v:qv: $IfgdI!kd1$$IflFP!:  p06    4 la|}ztbv:t v:tv:$Ifkd$$IflFP!:  p06    4 laztbv:t v:tv:$Ifkd$$IflFP!:  p06    4 la12ztbv:t v:tv:$Ifkdb$$IflFP!:  p06    4 la23CPzrbv:r v:rv:$$Ifkd$$IflFP!:  p06    4 laztbv:t v:tv:$Ifkd$$IflFP!:  p06    4 la)nztbv:t v:tv:$Ifkd$$IflFP!:  p06    4 lanoztbv:t v:tv:$IfkdN$$IflFP!:  p06    4 la ztbv:t v:tv:$Ifkd $$IflFP!:  p06    4 la <G).2@GKY%8UXlm: PXIQ|EH5HIdq(nhI0h1`hUhO]S6]mHsHhO]SmHsHh)Q h:L6h0Qh0Q6h(hbhKo hKo6]h0Q h0Q6]h:Lhv hO]S6]hO]S>  ztbv:t v:tv:$Ifkd$$IflFP!:  p06    4 laztbv:t v:tv:$Ifkd$$IflFP!:  p06    4 la:Pxr bv:r v:rv:$Ifkd:$$IflFP!:  p06    4 laPQUxrbv:rr$Ifkd$$IflFP!:  p06    4 la78xrbv:r v:rv:$Ifkd$$IflFP!:  p06    4 la89YZxrbv:rbv:r v:r v:rv:$Ifkdw$$IflFP!:  p06    4 la/<=ztbv:t v:tv:tv:$Ifkd6$$IflFP!:  p06    4 la=>Iztbv:t v:tv:tv:$Ifkd$$IflFP!:  p06    4 la4ztbv:t v:tv:$Ifkd$$IflFP!:  p06    4 la45Hztbv:k v:kv: $IfgdU$Ifkdg$$IflFP!:  p06    4 la)]ztbv:t v:tv:$Ifkd"$$IflFP!:  p06    4 lan st12HIYZJR^hq09IS]۸Ө۸hl hO]S5\h+hO]S\ h+\h)QjhO]SB*UphhkhkB*phjhO]SB*UphhO]SB*phjhO]SB*UphhO]SB*phhO]Sh?h*UUhS.6ztbv:t v:tv:$Ifkd$$IflFP!:  p06    4 laztbv:t v:tv:$Ifkd$$IflFP!:  p06    4 la JW^zx$v$st$sv$st$sv$st$sh@9h@9 $$Ifa$gd+kdS$$IflFP!:  p06    4 la ^_av:v:v:$Ifqkd$$Ifl440 !n04 laf4Dv:v:v:$Iflkd$$Ifl0 !n04 la5v:v:v:$Iflkd[$$Ifl0 !n04 la568v:v:$Iflkd$$Ifl0 !n04 laOv:v:$Iflkd$$Ifl0 !n04 laOPRv:v:v:$IflkdJ$$Ifl0 !n04 lafo$s$$s$s$s$s$}$sx$s$s$s$sgdFlgdFl ^`lkd$$Ifl0 !n04 la ]dfo.2 gh~  4;V\ko02>ŵͪşhFlhg4B*phht*hu1hFlhFlB*phhNOhFlB*phhkhkB*phjhO]SB*UphhO]SB*phjhO]SB*UphhO]S0J 6] hO]S0J h)QhO]SB*phhO]S hO]S6]2Sxa+fp3G $s$s$s$ $$$s$s$s$s$s$PS$s$s$PS$s$y$s$s$s$};$s$zT $$$s$$s:^>@PRhj =^p} *+56IJ`befhiNObcsthkhkB*phjhO]SB*UphhO]SB*phjhO]SB*UphhB*mHphsHhO]SB*mHphsHhO]SCJOJQJhO]SB*CJph h:L5 hO]S5hO]S hO]S0J 7%*:^koz#(92:FGPoxƽƲ󠜠 hO]S5\h)QhQB*phh+h:Lhl hO]SCJjhO]SUhO]S0J 5OJQJhfj5OJQJhO]S5OJQJ hO]S6hO]SmHnHu hO]S6]hO]S0J 6] hO]S0J hO]ShO]SB*ph4NTT] + K   `             )     > N P Q Z k r   ?P#Q\e.7w{ hO]Sh hO]S0J hl hO]S5 hO]S6]hB*phhO]SB*phhmjh)QhO]S hO]S5\L< 9     Q Z TwLVe$s$s$s$s$s$$s$ q$/$y$s$5L$/$s$ q$y$y$s$ 6$s$s$s$s$$s@9 $$Ifa$gd+ ^`/8LV ej"Ucksw s%&'*,4B[\abghklpqɺɺͮͮha&ha&5h:L h3lh3lh3lh3l5h3lha& hO]S6]h+hO]S\ hO]S5 hO]S5\h;hO]SB*phh)QhO]SDTe@9v:ev:ve5L $If^$Iflkda$$IfF0 %0z4 Fa $$Ifa$gd+TUXv:ev:$Iflkd$$IfF0 %0z4 Fawv:ev:$Iflkd$$IfF0 %0z4 Fa  !"+.uvz<JktZnwx-7>Gξ괄|߄v hO]S0J h:nB*phhO]SB*ph h[0J hbefh[0J h[ ha&0J h:n0J hbefh:n0J h:n hbef0J hbefhbef0J hbef5\hbefhbefB*ph hO]S5hO]S h3lh3lh3lha&ha&ha&6 ha&5.wxz<K-7aq$s$$s$| $i $s$s$s$/$ $/$y$/1gdbefgdbeflkdk$$IfF0 %0z4 FaG'/| luzgoqx/018  !!!!Y!ȥȥhz/jhO]SB*UphhkhkB*phjhO]SB*UphhO]SB*phjhO]SB*UphhO]SB*ph hO]S6]hO]SmHnHuhO]S0J 6] hO]S0J hO]S5qx18 !Y!!!""""##$/%0%o&p&u&'$s$s$s$s$s$/$/$s$1$s$s$s$y$s$$s$s$5L$s$N$s$s$sgdt;:^gdlgdlgdI!gd1`gd1`^ ^`Y!!!!!!"""%"("""""""2#;#?#D###############/$$$$$$$µ휖~zrznjh'ZJhxhI!hI!5hI!hEyHh)Q hO]S5\hO]S0J 5\ hS.0J hO]S0J h:LhO]SB*ph h1`h$h$0J \mHnHsHh$h$0J \mHnHsHhlh$h1`h1`B*ph hO]S6]hO]ShO]S0J 5\mHnHsH)$$$.%/%0%1%2%9%:%C%J%h%n%:&@&n&o&p&u&&&&&'''')))))*******+ +n+++++++Ǽ𳬥|| hO]S0J hO]S] hO]S6 hO]S6]hO]SCJOJQJhO]SB*ph hO]S5\ hO]S0J \hO]S0J 5\ ht;6]h)Qht; hlhlhlB*phhu1h hlCJjhlUhO]Shxh'ZJhl0'''(('(8(F(T(b(x(((((((u))))))$$1$1$1$1$1$1$1$1$1$1$1$1$1$1$1$1$1$1$1$PS$ & F ^ `gd+$ & F ]^ `gd+$ & F^`gd+gd+))) +,Y-Z-z-./01122z68888:: ;N;X;^;$$s$5 $$s$s$6$$/$s$s $s$$s$s$s$s @9Z @9$If@& & F$  & F+m,s,,,,,y-z-=/O/U/V/h/u/{///// 0070C000U1W1\111111124353666617377777 88y8888ʸ hO]S0J3 hO]SjhO]SUhO]SCJOJQJ hO]S5CJOJQJmHnHu#hEyHhEyH0J 5CJOJQJaJ#hEyHhO]S0J 5CJOJQJaJhO]S0J 6]hO]SmHnHuhO]SB*ph hO]S0J hO]S5888X:Y:: ; ;;; < <<<G=R=======>>>>>>> ??!?6?7?q?w?@@@AA$A`AeAAA B B(B)B*B+BBBCC C!CC DvDDEEEEyF~FFFh'ZJhm hm hm 5h)Qhk8[hk8[B*phhO]SB*phh:L hO]S0J h:L6 hO]S6 hO]S5 hO]S6]hjPhO]SE^;_;k;m; v:Z v:$Iflkd $$Ifl0 2 04 latm;n;x;; v:Z v:$Iflkd $$Ifl0 2 04 lat;;;; v:Z v:$Iflkd $$Ifl0 2 04 lat;;;; v:Z v:$Iflkd $$Ifl0 2 04 lat;;;=-=F>>> ?XAAB$s$s$s$sz$st$st$PSz$sf$sf$s & F ^h`h^ & F ^lkdH$$Ifl0 2 04 lat BBBBC.C>DrDDDEIEyFFFGGGHIIIJyJKK$s$$$s$$$s$s$$ $5L$s$7$s$s$ $$s$Z $7$7$W & F> & F?gdm gdm  & F< & F= & FFFFFFFFFFGGOGPGQGpGqGGG>HDH IIyJJJJJJ;KBK[KcKKKKKKLLL M M:M;MQRRRRRgSiSqSS2T=TjTuTxTTTU*U/U;USU_UdUpUUUVVW"W0W8WKWMWRWZWWWWWWWWWWWWX X+X1XPXRXkXpXXXXX!YǼǼhO]S5CJOJQJ hO]S5CJOJQJmHnHu hO]S0J hO]S6]h)QhfjhO]SCJOJQJ hO]S6hO]SJVVVVVVVV v: v:EC$sA$?$Ykd$$Ifl 04 lafYkd$$Ifl 04 laf$IfVXX?YZYYYdZZM[[8]b]]p^^^$:$$s$1$/$$s$/$s$p$$$y$/&@9&@9$If & F h^$!Y#YcYiYYYdZhZmZoZqZsZZZu[z[[[L\N\\\]]]]^^n^o^^^^^__$_%_'_(_W_X_f________ ` `2a4a5a:aWb`bbbbbbbbhk8[h)Q hO]S5\hO]SOJQJhO]SOJQJ hO]S5hO]SOJQJh5hfj hO]S5CJOJQJmHnHuh|e hO]S0J hO]ShO]SCJOJQJ@^^^__%_v:v:/v:lkd$$Ifl0%p04 la $If\kd$$Ifl4%04 la f4%_X_Y___v:&@9&@9$Iflkd$$Ifl0%p04 la $If_____`v:v:/v:lkd$$Ifl0%p04 la $If\kdB$$Ifl4%04 la f4`0`1`2`5aabbddRffhRi\jv:$s$s$5L$s$$s$s$s$s$s$s$sgdk8[lkd`$$Ifl0%p04 la $Ifbbbb ddAe]effffffffggggEiKiVlWlolplqlrl|lll#m$mqmrmn`nantnnnnoo$o)o.o/o0o7oSoToUoVo[oeo9p:p=pKpOphuNj h560J3huNjh560J3h56 h56h56 h56h`W h`W5h:L h`Wh`Wh!h!5 h!5h4 hBjhmj hO]S6]h|wh)QhO]Shk8[<\jPkkplqlrl|lpprsSuEwwwwww$s$s$s$$)v%$s$ q$s$A$%e$s@9@9@9@9 $$$Ifa$gd~&P$gd~&Px  gd!gdk8[OpUpiprpppppppqq&qerqrssssttuuBuRuuuuuuuuvvvwww{ {{&{{{||||}})}5}J}V}c}n}}}~~BM&ՀMUhmjh~&PhO]S\h|wh)Q hO]S5 hO]S0J hO]S6]hO]Sh56 hlhlhfjhuNjh`WKwwwwwwk`v:`v:`v:`v: $$Ifgd~&Pkd$$Ifl\9&}s0 !64 la wwwwxxk`v:`v:`v:`v: $$Ifgd~&Pkd$$Ifl\9&}s0 !64 la xxxxx#yk`v:`v:`v:`v: $$Ifgd~&Pkd$$Ifl\9&}s0 !64 la #y$y0y>yFyyk`v:`v:`v:`v: $$Ifgd~&PkdI$$Ifl\9&}s0 !64 la yyyyyyk`v:`v:`v:`v: $$Ifgd~&Pkd$$Ifl\9&}s0 !64 la yyyzz8zk`v:`v:`v:`v: $$Ifgd~&Pkd$$Ifl\9&}s0 !64 la 8z9zBzQzWz}zk`v:`v:`v:`v: $$Ifgd~&Pkd$$Ifl\9&}s0 !64 la }z~zzzzzkev:ev:ev:ev:$Ifkda$$Ifl\9&}s0 !64 la zzz{{{{{ki$si$]@9]@9]@9]@9 $$Ifa$gd~&Pkd'$$Ifl\9&}s0 !64 la {{{{{|d^v:^v:^v:^ d$Ifkd$$Ifl4\(&~|0!4 la f4|||+|-||d^v:^v:^v:^v:$Ifkd $$Ifl4\(&~|0!4 la f4|||~~~~~#12db$sb$};b$p`$1`$1`$1`$1`^kd!$$Ifl4\(&~|0!4 la f4 2>iTdr +@UnC%&/$$ $ $$PS$s$PS$PS$s$PS$PS$PS$PS$PS$PS$PS$s$s$s$$$s$sgd~&Pgd~&ṔՁ!Trv+Un%&  $:;BEWXuvщډ߉̊ "8BdvɋʋЋ׋؋ًh G`hhehahh=hK hO]S5h~&Ph|wh!`hO]S0J mHnHsHhO]S0J mHnHsH hO]S0J hO]S5\hO]S@ً $$s$s$$s@9@9@9_Yv:$IfkdH"$$Ifl44F H#06    4 la f4 $$Ifa$gd~&P & F ًryӍԍ|}&'89PQYZtuYktycl֒ߒ;<ĔŔ󼸼󩥩h~&PhOlhwg. jhO]ShYhPIhn f hO]S5\hQhs h!`hO]ShO]SmHsH hbefhO]Sh ch)Q hO]S0J hO]Sh~&PhO]S\?  FGPR{v:v:pv:v: dkd#$$Ifl4F H#06    4 la f4$If{|vpv:pv:pv:$Ifkd#$$Ifl4F H#06    4 la f4ŌnjNvpv:pv:pv:$Ifkdm$$$Ifl4F H#06    4 la f4NOVXvpv:pv:pv:$Ifkd#%$$Ifl4F H#06    4 la f4jvpv:pv:pv:pv:$Ifkd%$$Ifl4F H#06    4 la f4vpv:pv:pv:pv:$Ifkd&$$Ifl4F H#06    4 la f4vpv:pv:pv:$IfkdE'$$Ifl4F H#06    4 la f4Avpv:pv:pv:$Ifkd'$$Ifl4F H#06    4 la f4ABKMvpv:pv:pv:$Ifkd($$Ifl4F H#06    4 la f4vpv:pv:pv:$Ifkdg)$$Ifl4F H#06    4 la f4vpv:pv:pv:$Ifkd*$$Ifl4F H#06    4 la f4{Ŕ|~ vt$sr$5Lp$t$st $sj$s`$sj$$Ot$s`$s $ & FAgd~&P$gd~&Pkd*$$Ifl4F H#06    4 la f4 ŔOP`ijl{|}~ʕ˕   ?Hwz=J^gu~h=h~&PhO]S\hh6 h6 hhhhPI hjhjh chj hj5hjhj5 hOH5\h)QhOHjhF}Uh<hF}hO]Sj+hF}Uh:LhOlhY4  Ö<=BJ$N$s$s$s$s$$s$s$s@9*@9 $$Ifa$gd~&PgdjgdOH  ^ `gdOHgdF}$gd~&P JK^v:*v:$$Ifskdi$$Ifl0%` 0b64 laӘv:*v:$$Ifskd$$Ifl0%` 0b64 laӘԘ%v:*v:$$Ifskd$$Ifl0%` 0b64 laҙ͚ۙΚϚҚ֚śϛԛ؛Ȝ̜*5Z`ŞɞҞ֞(1BIXaΠנB]^abkl h~&P\h~&Ph\j,hU h6]hh jh Uh)QhPIhO]Sh=M%&?vv:*v:$$Ifskd7$$Ifl0%` 0b64 lavwv:*v:$$Ifskdѽ$$Ifl0%` 0b64 la˚̚v:!ckd$$Ifl4%b0b64 laf4$$Ifskdk$$Ifl0%` 0b64 la͚̚ϚĜBYv$s$N$s$$O$s$W$ $e.!$7H@9|@9 @9 $$Ifa$gd~&P & F7gdgd$gd~&P1 $,CN  $-NTil̥ͥҥӥ֥KRxy٦rţͧΧا٧"h0oh0o>*B*CJ\hphhvc>*B*CJ\hphh~&Ph0ohO]Shj}h/_ h5 h6]h h:L6]h<h)Q h6]hPIhh~&Ph\9vmHv:m|v:m v: $Ifgd=kdq}$$Ifl4Fr$ T06    4 lajf4vmHv:m|v:m v: $Ifgd=kd'~$$Ifl4Fr$ T06    4 lajf4(,vmHv:m|v:m v: $Ifgd=kd~$$Ifl4Fr$ T06    4 lajf4vmHv:m|v:m v: $Ifgd=kd$$Ifl4Fr$ T06    4 lajf4ΤvmHv:m|v:m v: $Ifgd=kdI$$Ifl4Fr$ T06    4 lajf4ΤϤФӤvmHv:m|v:m v: $Ifgd=kd$$Ifl4Fr$ T06    4 lajf4Χvq$si$s]$sXS$N$PSgd0ogd0ogd/_  & F gd & Fgdgdkd$$Ifl4Fr$ T06    4 lajf4#$%uvwxݨ'34BCI\]efghwxµµµ¬”܌vdv"hr<hr<>*B*CJ\hphhvc>*B*CJ\hph h$h$hvcB*phh0oB*CJhphh0o5\hmHsHh0ohmHsHh`5B*CJhphh0o5B*CJhphh0oB*CJ]hph h0ohh0o5CJ\aJhh0o5\hh0o5CJ\h'$%uvPSxvj$d<<$1$If^gd0o\kdk$$IfF4$04 Faf4$$$1$If^a$gd0ouvwxvs5\kd$$IfF4$04 Faf4$$1$If^gd0o\kd $$IfF4$04 Faf4xȨҨܨvPSu8v:uv:u`v:uv:u`v:uv:$$d<<$1$If^a$gd0o\kdE$$IfF4$04 Faf4$$$1$If^a$gd0oܨݨA.8s.s.`s.s$$$1$If^a$gd0okd$$IfF4ֈN $F04 Faf4`ss.8sskd$$IfF4ֈN $F04 Faf4$$$1$If^a$gd0o`ss`ss.kd$$IfF4ֈN $F04 Faf4$$$1$If^a$gd0o #$%&8v:v:`v:v:`v:v:$$d<<$1$If^a$gd0o&'4<>?A.8s.s.`s.s$$$1$If^a$gd0okd$$IfF4ֈN $F04 Faf4?@ABCD`ss.8sskd#$$IfF4ֈN $F04 Faf4$$$1$If^a$gd0oDEFGHI`ss`ss.kd3$$IfF4ֈN $F04 Faf4$$$1$If^a$gd0oI\]js}vPSuv:u0v:u|v:uv:$$d<<$1$If^a$gd0o\kdC$$IfF4$04 Faf4$$$1$If^a$gd0oҩ2OgMv:Mv:M0v:M0v:M|v:M|v:Mv:$$d<<$1$If^a$gd0okd$$IfF4\ rz$,04 Faf4Oefghv:MH$sC$s=$PS$gdvcgd$gd0okdŌ$$IfF4\ rz$,04 Faf4$$d<<$1$If^a$gd0o!"#$AB˫٫ګ%+{˾˱˱бxtmibi h)h6]h)h h)h5\hr<hr<B*CJhphhr<5CJ\hmHsHhr<CJhmHsHh`5B*CJhph hr<CJhhr<5B*CJhphhr<B*CJ]hph hr<hhr<5\hhr<5CJ\aJhhr<5CJ\h"hr<hr<>*B*CJ\hph&!zPSszj$$d<<$If^gdvcakd$$IfF4$04 Faf4$$$$If^a$gdvc!"#$Azs(zPSakd$$IfF4$04 Faf4$$$$If^a$gdvcakdG$$IfF4$04 Faf4ABV`jt~v:Vv:`v:v:`v:v:$$$d<<$If^a$gdvcakd$$IfF4$04 Faf4<)PS)VPS)`PS$$$$If^a$gdvckd!$$IfF4ֈ $(04 Faf4PS`PSPS)kd1$$IfF4ֈ $(04 Faf4$$$$If^a$gdvcsVs`ss`ss$$$$If^a$gdvc<"v:"Vv:$$$d<<$If^a$gdvckdA$$IfF4ֈ $(04 Faf4ǫȫɫʫ`v:v:`v:v:$$$d<<$If^a$gdvcʫ˫ګ<)PS)VPS)`PS$$$$If^a$gdvckdQ$$IfF4ֈ $(04 Faf4PS`PSPS)kda$$IfF4ֈ $(04 Faf4$$$$If^a$gdvcsVs`ss`ss$$$$If^a$gdvc<)zPS$$$$If^a$gdvckdq$$IfF4ֈ $(04 Faf4v:Fv:$$$d<<$If^a$gdvcckd$$IfF4$04 Faf43Jnv:nv:nFv:nFv:$$$d<<$If^a$gdvcvkd#$$IfF40$404 Faf4ʭ˭ ~$v:y$5Lt$so$PS\zPS$$$1$If^a$gd|gd+Igd+Igd)h $gdr<vkdۗ$$IfF40$404 Faf4{|íǭȭʭ˭٭ !ĮŮڮ󿺨{naRFah+IB*CJhphhh+IB*CJhphh+I5B*CJhphh+IB*CJ]hphh+I5CJ\aJhh+I5\hh+I5CJ\hhvc>*B*CJ\hph"h+Ih+I>*B*CJ\hph h+Ihh)hhkhk>*B*phhkhkB*phjh)hB*Uphh)hB*phjh)hB*Uph !zj*_kd$$IfF4$04 Faf4$d<<$1$If^gd|_kd $$IfF4$04 Faf4ĮŮzszPS._kd՚$$IfF4$04 Faf4_kd<$$IfF4$04 Faf4$$$1$If^a$gd|Ů)6@Mv:v:v:`v:`v:v:v:v:v:v:v:$$d<<$1$If^a$gd| )*456@AKLMNɯʯ˯կ֯ׯۯ+$ؾ˴"h+Ih+I>*B*CJ\hphh+IB*phh+Ih+I0J 5\h+Ih+I5CJ\hh`5B*CJhph h+Ihh+I5\hh+I5B*CJhphhh+IB*CJhphh+IB*CJhph0MNTVX?%v:%v:%`v:$$d<<$1$If^a$gd|kdn$$IfF4ֈ ,l$T04 Faf4Xv:v:v:%kds$$IfF4ֈ ,l$T04 Faf4$$d<<$1$If^a$gd|ss`ssss$$$1$If^a$gd|?%v:%v:%v:$$d<<$1$If^a$gd|kdx$$IfF4ֈ ,l$T04 Faf4ʯׯدٯگ`v:`v:v:v:v:$$d<<$1$If^a$gd|گۯ?%v:%v:%`v:$$d<<$1$If^a$gd|kd}$$IfF4ֈ ,l$T04 Faf4v:v:v:%kd$$IfF4ֈ ,l$T04 Faf4$$d<<$1$If^a$gd|ss`ssss$$$1$If^a$gd|?,zPS$$$1$If^a$gd|kd$$IfF4ֈ ,l$T04 Faf4 * v:v:$$d<<$1$If^a$gd|akd$$IfF4$04 Faf4*+E\n v:n v:nv:nv:$$d<<$1$If^a$gd|vkd)$$IfF40 $04 Faf4$O4\$s$sv$1v$1v$1$sq$PS^vy$$$1$If^a$gd|gd+I 7^`gd+Igd+Ivkd$$IfF40 $04 Faf4 '034B[\]ӲԲղ,6CLMWblxijҳܳݳ *+1oȼȷȷȷȷssȷoh+Ih`5B*CJhphh+I5B*CJhphh+IB*CJhph h+ICJhh+I5CJ\hh+IB*CJ]hph h+Ihh+I5CJ\aJhh+I5\h"h+Ih+I>*B*CJ\hphh$>*B*CJ\hphh>*B*CJ\hph+\]ҲӲvj$akd7$$IfF4$04 Faf4$d<<$1$If^gd|akd$$IfF4$04 Faf4ӲԲղvsvs(akds$$IfF4$04 Faf4akdդ$$IfF4$04 Faf4$$$1$If^a$gd|,6CMWblwhPShPS:PS:PSPSPS PSPSPSPSPS$$$1$If^a$gd| wx~<"hv:"hv:$$d<<$1$If^a$gd|kd$$IfF4ֈ~ DXL $^@04 Faf4:v:v: v: v:v:v:$$d<<$1$If^a$gd|<)hs):s)s$$$1$If^a$gd|kd!$$IfF4ֈ~ DXL $^@04 Faf4 sss)kd1$$IfF4ֈ~ DXL $^@04 Faf4$$$1$If^a$gd|ijҳݳhv:hv::v::v:v:v: sss$$$1$If^a$gd|$$d<<$1$If^a$gd|  $<"hv:":v:$$d<<$1$If^a$gd|kdA$$IfF4ֈ~ DXL $^@04 Faf4$&'()v: v:v:v:$$d<<$1$If^a$gd|)*+,-<)hs):s)s$$$1$If^a$gd|kdQ$$IfF4ֈ~ DXL $^@04 Faf4-./01 sss)kda$$IfF4ֈ~ DXL $^@04 Faf4$$$1$If^a$gd|1BCPYcnvv:4v:5v:4v:5v:ckdq$$IfF4$04 Faf4$$d<<$1$If^a$gd|noδEobH4v:H4v:H5v:H5v:H4v:H4v:H5v:$$d<<$1$If^a$gd|kd$$IfF4\J $04 Faf4o 5v:HC$sC$s6$16$1 7^`gd+Igd+Ikd$$IfF4\J $04 Faf4$$d<<$1$If^a$gd|  23WXζ϶ж)*+,IJ^pzɸ׸(6ŽzmzhQ5B*CJhphhQB*CJhph hQCJhhQ5CJ\hhQB*CJ]hphhhQh hQhhQ5CJ\aJhhQ5\h"hQhQ>*B*CJ\hphh>*B*CJ\hphhQB*phh~&P0J 5\h+I0J 5\% 3XZ϶ж)$1$1$1$1$s$PSvysjvv: $Ifgd|akdۮ$$IfF4$04 Faf4$$$1$If^a$gd|gdQgd+I 7^`gd+I )*+,Ivs(vsakd$$IfF4$04 Faf4$$$1$If^a$gd|akdy$$IfF4$04 Faf4IJ^pzɸָhPShPS:PS:PSPSPS PSPSPSPSPS$$$1$If^a$gd|akd$$IfF4$04 Faf4 ָ׸ݸ޸<"hv:"hv:$$d<<$1$If^a$gd|kdS$$IfF4ֈ~ DXL $^@04 Faf4޸:v:v: v: v:v:v:$$d<<$1$If^a$gd|<)hs):s)s$$$1$If^a$gd|kdc$$IfF4ֈ~ DXL $^@04 Faf4 sss)kds$$IfF4ֈ~ DXL $^@04 Faf4$$$1$If^a$gd|(6AN[hijkhv:hv::v::v:v:v: sss$$$1$If^a$gd|$$d<<$1$If^a$gd| 6@ANZ[hl-TkѼҼӼbƽȽvw}ȿԅԗԗԗԗԗ~u~ulh`5CJhhQ5CJh hQCJhhQCJ]hhQ5CJh hQ5hh$>*B*CJ\hph"hQhQ>*B*CJ\hphhQ0J 5\hQhQ5\h hQhhQB*CJhphhQ5B*CJhphh`5B*CJhph'kl<"hv:":v:$$d<<$1$If^a$gd|kd$$IfF4ֈ~ DXL $^@04 Faf4v: v:v:v:$$d<<$1$If^a$gd|<)hs):s)s$$$1$If^a$gd|kd$$IfF4ֈ~ DXL $^@04 Faf4 sss)kd$$IfF4ֈ~ DXL $^@04 Faf4$$$1$If^a$gd|йvv:4v:5v:4v:5v:ckd$$IfF4$04 Faf4$$d<<$1$If^a$gd|!8fݺbH4v:H4v:H5v:H5v:H4v:H4v:H5v:$$d<<$1$If^a$gd|kdU$$IfF4\J $04 Faf4,-.T5v:HC$sC$s6$1 7^`gdQgdQkd9$$IfF4\J $04 Faf4$$d<<$1$If^a$gd|ǻCkҼӼ$1$1$1$1$PS$PSyYakd$$IfF4%04 Faf4$$$1$If^a$gd|gdQgdQ 7^`gdQ 7^`gdQ 7^`gdQӼabPS{s$$$1$If^a$gd|akd$$IfF4%04 Faf4$$If^gd|ǽsss sss$$1$If^gd|akd=$$IfF4%04 Faf4ǽȽ k<-PS-PS-PS$$If^gd|kdͻ$$IfF4ֈLV %d ^^Dt04 Faf4kmoqsuPSPS PSPSPS$$$1$If^a$gd|uvwxy<)PS)PS)PS$$$1$If^a$gd|kd$$IfF4ֈLV %d ^^Dt04 Faf4yz{|} PSPSPS)kd$$IfF4ֈLV %d ^^Dt04 Faf4$$$1$If^a$gd|}PSPSPS PSPSPS$$$1$If^a$gd|ǾȾ޾߾)MNP\]bcgmno|}۾umamTmuhQB*CJ]hphhQ5CJ\aJhhQ5\hhQ5CJ\hhM~>*B*CJ\hphh*>*B*CJ\hphh$>*B*CJ\hph"hQhQ>*B*CJ\hphh0ohQ5CJhmHsH hQh hQ5h hQCJhhQ5CJhh`5CJhh][VhQ5CJh Ⱦоپ<)PS)PS)PS$$$1$If^a$gd|kd$$IfF4ֈLV %d ^^Dt04 Faf4پ۾ܾݾ޾ PSPSPS)kd$$IfF4ֈLV %d ^^Dt04 Faf4$$$1$If^a$gd|޾߾sss sss$$$1$If^a$gd|<)PS$$$1$If^a$gd|kd$$IfF4ֈLV %d ^^Dt04 Faf4(4PS5PS4PSPS$$$1$If^a$gd|ckd$$IfF4%04 Faf4()RyĿbP4PSP4PSP5PS=5PSP4PS$$$1$If^a$gd|$$$If^a$gd|kd$$IfF4\J %C04 Faf47LMNo4PSPSPSPK$sF$PSgd*gdQkd$$IfF4\J %C04 Faf4$$$If^a$gd|ovPSyvj$d<<$If^gd*\kd$$IfF4$04 Faf4$$$1$If^a$gd*vs2vPS\kd$$IfF4$04 Faf4$$$1$If^a$gd*\kdc$$IfF4$04 Faf4 4>?IJT^hPS7PS7PStPStPSPS7PS7PS$$$1$If^a$gd*\kd$$IfF4$04 Faf4  >?IJST]^g =>?@JNOTU[\desοΨ~hw!5B*CJhphhw!B*CJ]hphhw!hw!5CJ\aJhhw!5\hh*>*B*CJ\hphh$>*B*CJ\hph"hw!hw!>*B*CJ\hphhQh`5CJ\hhQ5CJ\h hQCJh-hiwyA/PS7PS$$$1$If^a$gd*$$$If^a$gd*kd=$$IfF4ֈ $304 Faf4y{}tPSPS7PS7PS.kd?$$IfF4ֈ $304 Faf4$$$1$If^a$gd*PS7PStPSPS7PS7PS$$$1$If^a$gd*A.PS.7PS.tPS.PS$$$1$If^a$gd*kdA$$IfF4ֈ $304 Faf47PS7PS.PS7PSkdC$$IfF4ֈ $304 Faf4$$$1$If^a$gd*tPSPS7PS7PS.kdE$$IfF4ֈ $304 Faf4$$$1$If^a$gd*PS7PStPSPS7PS7PS$$$1$If^a$gd*A.vPS$$$1$If^a$gd*kdG$$IfF4ֈ $304 Faf4 4PS5PS{4PS5PS$$$If^a$gd*$$$1$If^a$gd*^kdI$$IfF4$04 Faf4  '>ngT4PST4PSD5PST5PSD4PSD4PS$$If^a$gd|$$$1$If^a$gd|kd$$IfF4\J $04 Faf4>?@e5PS5PSWR$sM$PS:y$$$1$If^a$gd|gdw!gdQkd$$IfF4\J $04 Faf4$$If^a$gd|j/^kdK$$Ifl4$064 la f4d<<$If^gd|^kd$$Ifl4$064 la f4stv:$$d<<$1$If^a$gd|^kd$$Ifl4$064 la f4$$$1$If^a$gd|  *4PSPSPSPStXPStXPStPS$ & F$Ifa$gd| $If^gd|$$If^a$gd|^kd$$Ifl4$064 la f4  *4en~+FLSXrx&9uvi°~qhw!B*CJ]hphhw!5CJ\aJhhw!5\hh$>*B*CJ\hphh*>*B*CJ\hph"hw!hw!>*B*CJ\hph hw!5\hw!hw!5B*CJhphhw!CJmHsH hw!CJhw!5CJ\hw!5CJ\mHsH,45:E/PSPS$ & F$Ifa$gd|kd$$Ifl4֞eDt $o064 la f4EKMOQSPSPSXPSXPSPS$ & F$Ifa$gd|STYd/PSPS$ & F$Ifa$gd|kd;$$Ifl4֞eDt $o064 la f4degikmPSPSXPSXPSPS$ & F$Ifa$gd|mn}/v:$$d<<$1$If^a$gd|kd]$$Ifl4֞eDt $o064 la f4}~A PS PS PS$ & F$Ifa$gd|^kd$$Ifl4$064 la f4{kA PSk PSk PS$ & F$Ifa$gd|kd$$Ifl4Fm$4   06    4 la f4yiA PSi PSi PS$ & F$Ifa$gd|kd$$Ifl4YFm$4   06    4 la f4yiA PSi PSi PS$ & F$Ifa$gd|kd$$Ifl4XFm$4   06    4 la f4 *yiA PSi PSi PS$ & F$Ifa$gd|kd}$$Ifl4XFm$4   06    4 la f4*+,ym$sm$sh$PSXy$ & F$Ifa$gd|gdw!  & F^gdw!kdK$$Ifl4XFm$4   06    4 la f4[^jjj-^kd$$Ifl44$N064 laf4$d<<$If^gd|^kd$$Ifl44$N064 laf4%stv:$$d<<$1$If^a$gd|^kdU$$Ifl44$N064 laf4$$$1$If^a$gd|%&*9MWakuYPSPSPSXPSXPSXPSPS$ & F$Ifa$gd|$$If^a$gd|^kd$$Ifl44$N064 laf4uv{/YPSPS$ & F$Ifa$gd|kd$$Ifl4֞4eu$<'064 laf4PSXPSXPSXPSPS$ & F$Ifa$gd|/YPSPS$ & F$Ifa$gd|kd$$Ifl4֞4eu$<'064 laf4PSXPSXPSXPSPS$ & F$Ifa$gd|/v:$$d<<$1$If^a$gd|kd$$Ifl4֞4eu$<'064 laf4C PSO PS PS$ & F$Ifa$gd|^kdI$$Ifl44$N064 laf4{kC PSkO PSk PS$ & F$Ifa$gd|kd$$Ifl4F4Ov$   06    4 laf4$yiC PSiO PSi PS$ & F$Ifa$gd|kd$$Ifl4YF4Ov$   06    4 laf4$%:@FyiC PSiO PSi PS$ & F$Ifa$gd|kdY$$Ifl4XF4Ov$   06    4 laf4FG\bhyiC PSiO PSi PS$ & F$Ifa$gd|kd$$Ifl4XF4Ov$   06    4 laf4hij .yq$se$s`$PSOy$$ & F$Ifa$gd*gd*  & F^gdw! & Fgdw!kd$$Ifl4XF4Ov$   06    4 laf4  -./nop)PԶԶԶ㮢{rlbllhw!CJmHsH hw!CJhw!5CJ\hw!5CJ\mHsHhw!5B*CJhphhw!B*CJ]hphhw!5CJ\aJhhw!5\hh*>*B*CJ\hphhM~>*B*CJ\hphh$>*B*CJ\hph"hw!hw!>*B*CJ\hphhw! hw!5\&./mnj-^kd1$$Ifl4$\064 la f4$d<<$If^gd*^kd$$Ifl4$\064 la f4nopstv:$$d<<$1$If^a$gd*^kd$$Ifl4$\064 la f4$$$1$If^a$gd*PSPSPSPSoPSoPSPS$$ & F$Ifa$gd*$$If^gd*$$$If^a$gd*^kda$$Ifl4$\064 la f4/PSPS$$ & F$Ifa$gd*kd$$Ifl4֞T`j $064 la f4PSPSPSPSPS$$ & F$Ifa$gd*/PSPS$$ & F$Ifa$gd*kd7$$Ifl4֞T`j $064 la f4   PSPSPSPSPS$$ & F$Ifa$gd*  /PSPS$$ & F$Ifa$gd*kdg$$Ifl4֞T`j $064 la f4PSPSPSPSPS$$ & F$Ifa$gd* !/PSPS$$ & F$Ifa$gd*kd$$Ifl4֞T`j $064 la f4!"$%&(PSPSPSPSPS$$ & F$Ifa$gd*()8/v:$$d<<$1$If^a$gd*kd$$Ifl4֞T`j $064 la f489>IOv:ev: v:$$d<<$1$If^a$gd*^kd$$Ifl4$\064 la f4OPejp{jPSjePSj PS$$ & F$Ifa$gd*kd$$Ifl4F#`$~ ? 06    4 la f4pqyhPShePSh PS$$ & F$Ifa$gd*kd[$$Ifl4YF#`$~ ? 06    4 la f4yiPSiePSi PS$ & F$Ifa$gd|kd)$$Ifl4XF#`$~ ? 06    4 la f4YZ[k~ ˼˼ڣ{naXNhw!CJmH sH hw!5CJ\hw!5CJ\mHsHhw!5B*CJhphhw!B*CJ]hph hw!5\hw!5CJ\aJhhw!5\hhw!5CJ\hh*>*B*CJ\hphh$>*B*CJ\hphhM~>*B*CJ\hph"hw!hw!>*B*CJ\hphhw! hw!CJhw!CJmHsHyt$so$PS_PS$ & F$Ifa$gd|gdw!gdQkd$$Ifl4XF#`$~ ? 06    4 la f4XYj#ckdc$$Ifl4$064 la f4$d<<$If^gd|ckd$$Ifl4$064 la f4YZ[jsov:$$d<<$1$If^a$gd|ckd$$Ifl4$064 la f4$$$1$If^a$gd|jko~PSPSPSPS|PSPS$ & F$Ifa$gd|$$If^a$gd|ckd$$Ifl4$064 la f4?/PS/PS/PS/PS$ & F$Ifa$gd|kd+$$Ifl4ֈ< $064 la f4PSPS/PSPSkdj$$Ifl4ֈ< $064 la f4$ & F$Ifa$gd|PSPSPSPS/kd$$Ifl4ֈ< $064 la f4$ & F$Ifa$gd|PSPSPSPSPSPS$ & F$Ifa$gd|  ?/PS/PS/PS/PS$ & F$Ifa$gd|kd$$Ifl4ֈ< $064 la f4PSPS/kd$$Ifl4ֈ< $064 la f4$ & F$Ifa$gd| /D OUѿѰ~q~jjjjj`h`5CJ\h hw!CJhhw!B*CJ]hph hw!hhw!5CJ\aJhhw!5\hhw!5CJ\hh*>*B*CJ\hphh$>*B*CJ\hph"hw!hw!>*B*CJ\hphhM~>*B*CJ\hphhw!hw!5CJ\hw!5B*CJhph hw!CJ%./4=Cv:v:0v:&v:ckd0$$Ifl4$064 la f4$$d<<$1$If^a$gd|CDY`gvfPSf0PSf&PS$ & F$Ifa$gd|kd$$Ifl4F$ 06    4 la f4gh}tdPSd0PSd&PS$ & F$Ifa$gd|kd$$Ifl4YF$ 06    4 la f4tdPSd0PSd&PS$ & F$Ifa$gd|kdf$$Ifl4XF$ 06    4 la f4to$sj$PSW PS$$$1$If^a$gd|gdw!gdQkd4$$Ifl4XF$ 06    4 la f4 j%akd$$IfF4#04 Faf4$d<<$If^gd|akd$$IfF4#04 Faf4 sp v:$$d<<$1$If^a$gd|akd>$$IfF4#04 Faf4$$$1$If^a$gd| "PSPSPS:PS:PSz:PSz:PSPSPS5PS5PS$$If^a$gd|$$$1$If^a$gd|akd$$IfF4#04 Faf4 "#?y</PS/PS $If^gd|kdz$$IfF4ֈ @^#$04 Faf4y{PS:PS:PS:PS:PSPS5PS$$$1$If^a$gd|<)PS)PS)PS$$$1$If^a$gd|kd$$IfF4ֈ @^#$04 Faf4 &<Zeozƹth`Sƹhw!B*CJ]hphh; hw!hhw!5CJ\aJhhM~5CJ\aJhhw!5\h"hw!hw!>*B*CJ\hphhM~>*B*CJ\hphhw!hw!B*CJhphhw!5B*CJhph hw!hhw!5CJ\hmHsHhw!CJhmHsHh`5CJ\h hw!CJhhw!5CJ\h :PS:PS:PSPS5PS$$$1$If^a$gd|<)PS)PS):PS$$$1$If^a$gd|kd$$IfF4ֈ @^#$04 Faf4:PSPS5PS)kd$$IfF4ֈ @^#$04 Faf4$$$1$If^a$gd| PSn v:$$d<<$1$If^a$gd|ckd$$IfF4#04 Faf4$$$1$If^a$gd| %4v:v:Ov::v:$$d<<$1$If^a$gd|ckd\$$IfF4#04 Faf4%&ZKbR4PSR4PSRPS?PSROPSROPS$$$1$If^a$gd|$$If^a$gd|kd$$IfF4\J ~Y#404 Faf4K~:PS:PSRM$sH$PS5 PS$$$1$If^a$gd*gd*gdQkd$$IfF4\J ~Y#404 Faf4$$If^a$gd| v:0akdd$$IfF4#04 Faf4 $$Ifgd*akd$$IfF4#04 Faf4; sp v:$$d<<$1$If^a$gd*akd$$IfF4#04 Faf4$$$1$If^a$gd*;<PZeozPSPSPS:PS:PSx:PSx:PSPSPS5PS5PS$$$If^a$gd*$$$1$If^a$gd*akd$$IfF4#04 Faf4  $*+189>?MN`ko#$1мxiZixh*>*B*CJ\hphh$>*B*CJ\hph"hw!hw!>*B*CJ\hphhw!hw!B*CJhphh; hw!5B*CJhphhw!5B*CJhph hw!hhh#hw!5CJ\h hM~CJhhh#hw!CJhh`5CJ\hh*5CJ\h hw!CJhhw!5CJ\h <-PS-PS-PS$$If^gd*kd>$$IfF4ֈ @^#$04 Faf4PS:PS:PS:PS:PSPS5PS$$$1$If^a$gd*<)PS)PS)PS$$$1$If^a$gd*kdN $$IfF4ֈ @^#$04 Faf4+-./0:PS:PS:PSPS5PS$$$1$If^a$gd*01?GH<)PS)PS):PS$$$1$If^a$gd*kd^ $$IfF4ֈ @^#$04 Faf4HIJKL:PSPS5PS)kdn $$IfF4ֈ @^#$04 Faf4$$$1$If^a$gd*LMN_ PSn v:$$d<<$1$If^a$gd*ckd~ $$IfF4#04 Faf4$$$1$If^a$gd*_`kqx4v:v:Ov::v:$$d<<$1$If^a$gd*ckd $$IfF4#04 Faf4BwbR4PSR4PSRPS?PSROPSROPS$$$1$If^a$gd|$$If^a$gd|kd $$IfF4\J ~Y#404 Faf4$F:PS:PSRM$sH$PS5,PS$$$1$If^a$gd*gd*gdQkd$$IfF4\J ~Y#404 Faf4$$If^a$gd|12EFG|}~  !+,89WX^p|}%&4:>EIJWXklmn»»»»»»±»»̻»»»}h$>*B*CJ\hphh*>*B*CJ\hph"hw!hw!>*B*CJ\hphhw!h`5CJ\h hw!CJhhw!5CJ\hhw!5B*CJhphhw!B*CJ]hph hw!hhw!5CJ\aJhhw!5\h1FG{|,j$akd($$IfF4B#04 Faf4$d<<$1$If^gd*akd$$IfF4B#04 Faf4|}~,sp,v:$$d<<$1$If^a$gd*akd$$IfF4B#04 Faf4$$$1$If^a$gd*PS*PS*PSPSPSPSPSPS$$$1$If^a$gd*akdd$$IfF4B#04 Faf4 <*PS$$$If^a$gd*kd$$IfF4ֈ HB#vHjH04 Faf4  *PSPSPSPSPS$$$1$If^a$gd*   <)PS)*PS)PS$$$1$If^a$gd*kd $$IfF4ֈ HB#vHjH04 Faf4PSPSPS)kd>$$IfF4ֈ HB#vHjH04 Faf4$$$1$If^a$gd*!,9:;<PS*PSPSPSPSPS$$$1$If^a$gd*<=J<*PS$$$If^a$gd*kd\$$IfF4ֈ HB#vHjH04 Faf4JQSTUV*PSPSPSPSPS$$$1$If^a$gd*VWXYZ<)PS)*PS)PS$$$1$If^a$gd*kdz$$IfF4ֈ HB#vHjH04 Faf4Z[\]^PSPSPS)kd$$IfF4ֈ HB#vHjH04 Faf4$$$1$If^a$gd*^op},v:n PSn PS\&PS$$$If^a$gd*$$$1$If^a$gd*ckd$$IfF4B#04 Faf4$$d<<$1$If^a$gd*$ue PSe PSe PSR PSe&PSe&PS$$$1$If^a$gd|$$If^a$gd|kdX$$IfF4FB#`  0    4 Faf4$%&Jlup$sk$PSXuPS$$$1$If^a$gd*gd*gdQkd&$$IfF4FB#`  0    4 Faf4lmnouPS(akd$$IfF4#04 Faf4$$$1$If^a$gd*akd$$IfF4#04 Faf4no)*34=>Gq[\g{|vwxνǽνǹh*>*B*CJ\hphh$>*B*CJ\hph"hw!hw!>*B*CJ\hphhw!h`5CJ\h hw!CJhhw!5CJ\hhw!5B*CJhphhw!5\hhw!B*CJ]hph hw!h6oujsus$$$1$If^a$gd*akd0$$IfF4#04 Faf4$d<<$1$If^gd*uv:!akdl$$IfF4#04 Faf4$$d<<$1$If^a$gd*akd$$IfF4#04 Faf4)*4>HPSPSPS PS PSWPSPSbPS$$$1$If^a$gd*HIf<-PS$$If^gd*kd $$IfF4ֈ rU#4H04 Faf4fhjlnpPS PSWPSPSbPS$$$1$If^a$gd*pq<)PS)PS) PS$$$1$If^a$gd*kd($$IfF4ֈ rU#4H04 Faf4WPSPSbPS)kdF $$IfF4ֈ rU#4H04 Faf4$$$1$If^a$gd*PSPS PSWPSPSbPS$$$1$If^a$gd*$$$If^a$gd*<)uPS$$$1$If^a$gd*kdd!$$IfF4ֈ rU#4H04 Faf4uv:ckd$#$$IfF4#04 Faf4$$d<<$1$If^a$gd*ckd"$$IfF4#04 Faf4<v PSHPSK PSP> PS> PS>HPS$$$If^a$gd|kd#$$IfF4F#V  0    4 Faf4$$$If^a$gd*$$$1$If^a$gd*&Z[\HPSK PSK PSc^$sY$PSF~PS$$$1$If^a$gd*gd*gdQkd$$$IfF4F#V  0    4 Faf4$$$If^a$gd|~j$akd&$$IfF4% 0 4 Faf4$d<<$1$If^gd*akdb%$$IfF4% 0 4 Faf4u~v:l~jl~j$d<<$1$If^gd*akd&$$IfF4% 0 4 Faf4$$d<<$1$If^a$gd*uvwx~PS(akd'$$IfF4% 0 4 Faf4$$$1$If^a$gd*akd<'$$IfF4% 0 4 Faf4x~v:pj PSpxPSp PSpPSpPSpjPS$$$1$If^a$gd*akdx($$IfF4% 0 4 Faf4$$d<<$1$If^a$gd*<-j PS$$If^gd*kd)$$IfF4ֈ0x!% H&0 4 Faf4)*67J^jkst}ukcWcR hAsOhhAsO5CJ\aJhhAsO5\hhAsO5CJ\hh$>*B*CJ\hphh*>*B*CJ\hph"hAsOhAsO>*B*CJ\hphhw!hw!5B*CJhphhw!5CJ\hh`5CJ\hhw!5CJ\hmHsHhw!CJhmHsH)hw!CJOJQJ^JhmHnHsHtH hw!CJh  xPS PSPSPSjPS$$$1$If^a$gd**7<)j PS)xPS) PS$$$1$If^a$gd*kd4*$$IfF4ֈ0x!% H&0 4 Faf4789:;PSPSjPS)kdR+$$IfF4ֈ0x!% H&0 4 Faf4$$$1$If^a$gd*;<DFGHIj PSxPS PSPSPSjPS$$$1$If^a$gd*$$$If^a$gd*IJK<"~v:$$d<<$1$If^a$gd*kdp,$$IfF4ֈ0x!% H&0 4 Faf4KL]^~v:ckd0.$$IfF4% 0 4 Faf4$$d<<$1$If^a$gd*ckd-$$IfF4% 0 4 Faf4^kt~j PS PS PSP>j PS> PS> PS$$$If^a$gd|kd.$$IfF4F% s  0     4 Faf4$$$If^a$gd*$$$1$If^a$gd*up$sk$PSXBPS$$$1$If^a$gd*gd*gdQkd/$$IfF4F% s  0     4 Faf4jkBj%akd 1$$IfF4X#04 Faf4$d<<$If^gd*akdn0$$IfF4X#04 Faf4klm*+Tfrs{|  12?@νǽνǹzh$>*B*CJ\hphhM~>*B*CJ\hphh*>*B*CJ\hph"hAsOhAsO>*B*CJ\hphhw!h`5CJ\h hAsOCJhhAsO5CJ\hhAsO5B*CJhph hAsOhhAsO5\hhAsOB*CJ]hph-klmBspBv:$$d<<$1$If^a$gd*akd1$$IfF4X#04 Faf4$$$1$If^a$gd*HPSPSPS PS PSWPSPS]PS$$$1$If^a$gd*akdH2$$IfF4X#04 Faf4 <-HPS$$If^gd*kd2$$IfF4ֈ^ D'oX#PH04 Faf4PS PSWPSPS]PS$$$1$If^a$gd*<)HPS)PS) PS$$$1$If^a$gd*kd4$$IfF4ֈ^ D'oX#PH04 Faf4WPSPS]PS)kd"5$$IfF4ֈ^ D'oX#PH04 Faf4$$$1$If^a$gd*+,-HPSPS PSWPSPS]PS$$$1$If^a$gd*-.<D<*HPS*PS$$$If^a$gd*kd@6$$IfF4ֈ^ D'oX#PH04 Faf4DMOPQ PSWPSPS]PS$$$1$If^a$gd*QRS<)BPS$$$1$If^a$gd*kd^7$$IfF4ֈ^ D'oX#PH04 Faf4STefBv:ckd9$$IfF4X#04 Faf4$$d<<$1$If^a$gd*ckd|8$$IfF4X#04 Faf4fs|6j PSGPSy PSP>j PS>j PS>GPS$$$If^a$gd|kd9$$IfF4FSX#  0    4 Faf4$$$If^a$gd*$$$1$If^a$gd*6q2UGPSy PSy PSc^$sY$PSFPS$$$1$If^a$gd*gd*gdQkd:$$IfF4FSX#  0    4 Faf4$$$If^a$gd|@TUV XY_mwxkl{»»»»»»±±»̻»»»»zhF:5\hhF:5CJ\hh*>*B*CJ\hph"hF:hF:>*B*CJ\hphhAsOh`5CJ\h hAsOCJhhAsO5CJ\hhAsO5B*CJhphhAsOB*CJ]hph hAsOhhAsO5\hhAsO5CJ\aJh+UVj%akd;$$IfF4+$04 Faf4$d<<$If^gd*akd\;$$IfF4+$04 Faf4spv:$$d<<$1$If^a$gd*akd<$$IfF4+$04 Faf4$$$1$If^a$gd* PSPS PSWPSPSPS$$$1$If^a$gd*akd6=$$IfF4+$04 Faf4  M<-PS$$If^gd*kd=$$IfF4ֈ w+$,HHl04 Faf4MOQSUWPS PSWPSPSPS$$$1$If^a$gd*WXYZ[<)PS)PS) PS$$$1$If^a$gd*kd>$$IfF4ֈ w+$,HHl04 Faf4[\]^_WPSPSPS)kd@$$IfF4ֈ w+$,HHl04 Faf4$$$1$If^a$gd*_mxPSPS PSWPSPSPS$$$1$If^a$gd*<*PS*PS$$$If^a$gd*kd.A$$IfF4ֈ w+$,HHl04 Faf4 PSWPSPSPS$$$1$If^a$gd*<"v:$$d<<$1$If^a$gd*kdLB$$IfF4ֈ w+$,HHl04 Faf4v:ckd D$$IfF4+$04 Faf4$$d<<$1$If^a$gd*ckdjC$$IfF4+$04 Faf44PSPSPS PS=kdD$$IfF4\J +$i\ 04 Faf4$$$If^a$gd*$$$1$If^a$gd*/\:jk4PS4PSPSPSPSPS PS PSRkdE$$IfF4\J +$i\ 04 Faf4$$If^a$gd| kl$s$PSPSjj$d<<$If^gd*akdvF$$IfF4 & 0 4 Faf4$$$1$If^a$gd*gd*gdQ45?@IJST]wxy&»»»»»»±§»̐»m"hh>*B*CJ\hphhAsOhEhF:5CJ\hhEhF:5CJhhF:CJhmHsHh`5CJ\hh?V5CJ\h hF:CJhhF:5CJ\hhF:5B*CJhphhF:B*CJ]hph hF:hhF:5\hhF:5CJ\aJh*s(akdG$$IfF4 & 0 4 Faf4$$$1$If^a$gd*akdG$$IfF4 & 0 4 Faf4*45?@JT^v:pPSpPSpPSp6PSp6PSpPSpPSpPS$$$1$If^a$gd*akdPH$$IfF4 & 0 4 Faf4$$d<<$1$If^a$gd* ^_w<-PS$$If^gd*kdH$$IfF4ֈ Yu &4Z\:0 4 Faf4wy{}PS6PSPSPSPS$$$1$If^a$gd*<)PS)PS)6PS$$$1$If^a$gd*kd J$$IfF4ֈ Yu &4Z\:0 4 Faf4PSPSPS)kd*K$$IfF4ֈ Yu &4Z\:0 4 Faf4$$$1$If^a$gd*PSPS6PSPSPSPS$$$1$If^a$gd*<*PS*PS$$$If^a$gd*kdHL$$IfF4ֈ Yu &4Z\:0 4 Faf46PSPSPSPS$$$1$If^a$gd*<)PS$$$1$If^a$gd*kdfM$$IfF4ֈ Yu &4Z\:0 4 Faf4v:ckd&O$$IfF4 & 0 4 Faf4$$d<<$1$If^a$gd*ckdN$$IfF4 & 0 4 Faf4<4PSPS"PS PSP>4PS>4PS$$$If^a$gd|kdO$$IfF4\J u &} 0 4 Faf4$$$If^a$gd*GavwxPSPS"PS"PS PS PSPskdP$$IfF4\J u &} 0 4 Faf4$$$If^a$gd|xyv:ckd2R$$IfF4 & 0 4 Faf4$$d<<$1$If^a$gd|ckdQ$$IfF4 & 0 4 Faf4 Rvj$s{$PSh'PS$$$1$If^a$gd?Vgd?VgdQckdR$$IfF4 & 0 4 Faf4$d<<$If^gd|&'/09:?@DER_`uvwV  &/1CƾyyoyoƌdƓhCJhmHsHh`5CJ\hh?V5CJ\hhCJaJh hCJhh5B*CJhphhB*CJ]hph hhh5CJ\aJhh5\hh5CJ\hh?V>*B*CJ\hph"hh>*B*CJ\hphhS >*B*CJ\hph%vw'j%akdT$$IfF4=%04 Faf4$d<<$If^gd?VakdvS$$IfF4=%04 Faf4'sp'v:$$d<<$1$If^a$gd?VakdT$$IfF4=%04 Faf4$$$1$If^a$gd?V#-7AKUv:v:\v:v:.v:v:$$d<<$1$If^a$gd?VakdPU$$IfF4=%04 Faf4UV<-PS$$If^gd?VkdU$$IfF4ֈ =% HHk04 Faf4PS\PSPS. PS$$$If^a$gd?V$$d$If^a$gd?V$$$1$If^a$gd?V <)PS)PS) PS$$$1$If^a$gd?VkdW$$IfF4ֈ =% HHk04 Faf4&,.ucPScPSP PS$$$1$If^a$gd?V$$$If^a$gd?Vkd0X$$IfF4F=% 0 m 0    4 Faf4./0ub'PS$$$1$If^a$gd?VkdX$$IfF4F=% 0 m 0    4 Faf401BC'v:ckdnZ$$IfF4=%04 Faf4$$d<<$1$If^a$gd?VckdY$$IfF4=%04 Faf4CL[kst4v:=v:Av:v:H64PS$$$If^a$gd?Vkd[$$IfF4\J =%]04 Faf4$$d<<$1$If^a$gd?VCt  #$%z{| >BLMPUYZ_eg׹׹ׯ|s|f|fY|fY|h`5B*CJhphh?V5B*CJhphhCJaJhh5B*CJhphhB*CJ]hph hhh5CJ\aJhh5\hh5CJ\hh?V>*B*CJ\hphhS >*B*CJ\hph"hh>*B*CJ\hphhF: hCJhhB*CJhph".`4PS=PS=PSAPSAPSPSPSPkd[$$IfF4\J =%]04 Faf4$$$If^a$gd?V  84v:=v:Av:v:H64PS$$$If^a$gd|kd\$$IfF4\J =%]04 Faf4$$d<<$1$If^a$gd?V8N|4PS=PS=PSAPSPSPK$sF$PSgd?VgdQkd]$$IfF4\J =%]04 Faf4$$$If^a$gd|$%yPStj$d<<$If^gd?Vakd^$$IfF4%< 0< 4 Faf4$$$1$If^a$gd?Vyz{|s(akd_$$IfF4%< 0< 4 Faf4$$$1$If^a$gd?Vakd>_$$IfF4%< 0< 4 Faf4|v: v:[v:v:\v:v:qPS$$$If^a$gd?Vakdz`$$IfF4%< 0< 4 Faf4$$d<<$1$If^a$gd?V<- PS- PS$$If^gd?Vkda$$IfF4ֈ" P8!% GGG0< 4 Faf4?A[PSPS\PS PS$$$If^a$gd?V$$d$If^a$gd?V$$$1$If^a$gd?VABPZ<" v:"v:$$d<<$1$If^a$gd?Vkd(b$$IfF4ֈ" P8!% GGG0< 4 Faf4Zfgv|~ v:[ v:v: v:kd8c$$IfF4F"P% . v 0<     4 Faf4$$d<<$1$If^a$gd?V~u[v:$$d<<$1$If^a$gd?Vkdd$$IfF4F"P% . v 0<     4 Faf4 v: v:n v:$$d<<$1$If^a$gd?Vckdd$$IfF4%< 0< 4 Faf4SThipKL%&34FGHӲ{{nn{{{{jӲhh`5B*CJhph hCJhhB*CJ]hph hhh5CJ\aJhh5\hh5CJ\h"hh>*B*CJ\hphh?V>*B*CJ\hphh$>*B*CJ\hphhAsOhB*CJhphh5B*CJhph)Ru[ v:[ v:[n v:$$d<<$1$If^a$gd|kdve$$IfF4F"%   0<     4 Faf4RSTup$sk$PSXPS$$$1$If^a$gd?Vgd?VgdQkdDf$$IfF4F"%   0<     4 Faf4j%akdg$$IfF4% 0 4 Faf4$d<<$If^gd?Vakdg$$IfF4% 0 4 Faf4  'v:v:akdNh$$IfF4% 0 4 Faf4$$d<<$1$If^a$gd?V'(=GQ[eov:v: v:v:v:9v:$$d<<$1$If^a$gd?Vakdh$$IfF4% 0 4 Faf4op<,PS$$1$If^gd?Vkdi$$IfF4ֈ ` %,H0 4 Faf4PS PSPSPS9PS$$$1$If^a$gd?V<"v:"v:$$d<<$1$If^a$gd?Vkdj$$IfF4ֈ ` %,H0 4 Faf4PS PSv:v:9v:$$d<<$1$If^a$gd?V$$$1$If^a$gd?V<)PS)PS) PS$$$1$If^a$gd?Vkd l$$IfF4ֈ ` %,H0 4 Faf4PSPS9PS)kdFm$$IfF4ֈ ` %,H0 4 Faf4$$$1$If^a$gd?VLv:tPStc PS$$If^gd?Vakdn$$IfF4% 0 4 Faf4$$d<<$1$If^a$gd?VxPSxPSxc PSec PS$$$1$If^a$gd|$$If^a$gd|vkd,o$$IfF40% 0 4 Faf4&G$s~$PSk PS$$$1$If^a$gd?Vgd?VgdQvkdo$$IfF40% 0 4 Faf4GH j%akd:q$$IfF4&!0!4 Faf4$d<<$If^gd?Vakdp$$IfF4&!0!4 Faf4 sp v:$$d<<$1$If^a$gd?Vakdq$$IfF4&!0!4 Faf4$$$1$If^a$gd?V v:v:@v:p@PSv:pPSv:v:$$$1$If^a$gd?V$$d<<$1$If^a$gd?Vakdvr$$IfF4&!0!4 Faf4  wx)+DEefstYºº¶zmhB*CJ]hphh5CJ\aJhh$>*B*CJ\hphh?V>*B*CJ\hph"hh>*B*CJ\hphhh5\h hhh`5B*CJhphh?V5B*CJhphh5CJ\h hCJhh5B*CJhph*x<,PS$$1$If^gd?Vkds$$IfF4ֈ  "&,sx0!4 Faf4xz|~PS@PSPSPSPS$$$1$If^a$gd?V<"v:"v:$$d<<$1$If^a$gd?Vkd\t$$IfF4ֈ  "&,sx0!4 Faf4@v:@PSPSv:v:$$$1$If^a$gd?V$$d<<$1$If^a$gd?V<)PS)PS)@PS$$$1$If^a$gd?Vkdu$$IfF4ֈ  "&,sx0!4 Faf4PSPSPS)kdv$$IfF4ֈ  "&,sx0!4 Faf4$$$1$If^a$gd?V v:tsts$$If^gd?Vakdx$$IfF4&!0!4 Faf4$$d<<$1$If^a$gd?V(vsvsvscs$$$1$If^a$gd|$$$If^a$gd|vkdx$$IfF40&~0!4 Faf4()*+f$s$s~$PSkzPS$$$1$If^a$gd?Vgd?VgdQvkdny$$IfF40&~0!4 Faf4zj+_kdz$$IfF4$04 Faf4$d<<$If^gd?V_kd&z$$IfF4$04 Faf4zsszv:$$d<<$1$If^a$gd?V_kdX{$$IfF4$04 Faf4$$$1$If^a$gd?V0:DNXv:|v:v:v:v:$$d<<$1$If^a$gd?V_kd{$$IfF4$04 Faf4XYO? PS,|PS,PS$$$1$If^a$gd?V$$1$If^gd?Vkd|$$IfF4r J$,FFF04 Faf4PSPS<kdh}$$IfF4r J$,FFF04 Faf4$$$1$If^a$gd?Vv:|v:v:v:v:5kdF~$$IfF4r J$,FFF04 Faf4$$d<<$1$If^a$gd?V PS|PSPSPSPS<kd$$$IfF4r J$,FFF04 Faf4$$$1$If^a$gd?V-HJz{| ).2AFLPi{"#\^ôâ֚|obobh`5B*CJhphh?V5B*CJhphhB*CJ]hph hhh5CJ\aJhh5\h"hh>*B*CJ\hphh?V>*B*CJ\hphh$>*B*CJ\hphhh5CJ\hh5B*CJhph hCJhhCJhmHsH&,-Izv:wPSwPS$$If^gd?V_kd$$IfF4$04 Faf4$$d<<$1$If^a$gd?VIJj{PS{PS{PShPS$$$1$If^a$gd|$$If^a$gd|tkd$$IfF40 $04 Faf4$s$PSnzPS$$$1$If^a$gd?Vgd?VgdQtkdF$$IfF40 $04 Faf4yzzj+_kd$$IfF4$04 Faf4$d<<$If^gd?V_kd$$IfF4$04 Faf4z{|zsszv:$$d<<$1$If^a$gd?V_kd#$$IfF4$04 Faf4$$$1$If^a$gd?VFv:"v:v:v:v:$$d<<$1$If^a$gd?V_kd$$IfF4$04 Faf4 "$O?FPS,"PS,PS$$$1$If^a$gd?V$$1$If^gd?VkdU$$IfF4r\ P$F04 Faf4$&()PSPS<kdA$$IfF4r\ P$F04 Faf4$$$1$If^a$gd?V)3AMNOPFv:"v:v:v:v:5kd-$$IfF4r\ P$F04 Faf4$$d<<$1$If^a$gd?VPXdfghiFPS"PSPSPSPS<kd$$IfF4r\ P$F04 Faf4$$$1$If^a$gd?Viz{#]zv:wPSwPS$$If^gd?V_kd$$IfF4$04 Faf4$$d<<$1$If^a$gd?V]^~{PS{PS{PShPS$$$1$If^a$gd|$$If^a$gd|tkd$$IfF40 $04 Faf4$s$PSnuPS$$$1$If^a$gd?Vgd?VgdQtkdI$$IfF40 $04 Faf4 ./5?@CHLMSVW\bf۽۽곫yll_l_l_yyh`5B*CJhphh55B*CJhph hCJhh5B*CJhphhB*CJ]hph hhh5CJ\aJhh5\hh5CJ\hhS >*B*CJ\hphh?V>*B*CJ\hphh$>*B*CJ\hph"hh>*B*CJ\hphh%uj%akd$$IfF4#04 Faf4$d<<$If^gd?Vakd$$IfF4#04 Faf4uv:uv:akd0$$IfF4#04 Faf4$$d<<$1$If^a$gd?Vv:v:v: v: v:Wv:v:pPS$$$1$If^a$gd?V$$d<<$1$If^a$gd?Vakd΋$$IfF4#04 Faf4 #<-PS$$If^gd?Vkdl$$IfF4ֈ Z#4Hp04 Faf4#%')+-PS PSWPSPSPS$$$1$If^a$gd?V-./01<)s)s) s$$$1$If^a$gd?Vkd$$IfF4ֈ Z#4Hp04 Faf412345Wsss)kd$$IfF4ֈ Z#4Hp04 Faf4$$$1$If^a$gd?V5CMWcdev:v: v:Wv:v:v:$$d<<$1$If^a$gd?Vefqy<*PS*PS$$$If^a$gd?VkdƏ$$IfF4ֈ Z#4Hp04 Faf4y PSWPSPSPS$$$1$If^a$gd?V<)s)s) s$$$1$If^a$gd?Vkd$$IfF4ֈ Z#4Hp04 Faf4Wsss)kd$$IfF4ֈ Z#4Hp04 Faf4$$$1$If^a$gd?Vuv:n PSn PS\PS$$$If^a$gd?V$$$1$If^a$gd?Vckd $$IfF4#04 Faf4$$d<<$1$If^a$gd?V}#%'(JR Wj"Yabfnoζ氪昋{hO]S0J 5 hO]S5jhO]S0J 5U hO]S0J 5 hO]S5\h3 hQ0J hO]S0J hO]S6hO]SCJOJQJh30J 6]hO]S0J 6] hO]S0J ]hash5hO]Sh0oh5CJ\h hCJh0J|uc PSc PScPS$$$If^a$gd|kd“$$IfF4F6#V V U 0    4 Faf4|}~?Cusss$q$pq$sn$1q$sq$pl$Wl$7l$V@&kd$$IfF4F6#V V U 0    4 Faf4 oqu~ "#%)2?AEOWXYmu~3;X`aemnpt}@A٬٠hEyHhO]S5h5hO]S5OJQJ hO]S0J hO]SjhO]S0J U hO]S0J 5 hO]S6hO]S hO]S5hO]S0J 5 hO]S5jhO]S0J 5U:\8 9 e x z    +vckJV%$s$s$ $$s$$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$s$sgdj^$ABHIQR|9PQY[\` !ktx   B C D E O S e ; ǿ|t|hasB*phhO]SB*phh5h0ohYK hYK5h`hY hO]S5 hO]S6] hO]S0J hehmjhVhO]ShEyHhO]S5&hEyHhO]S0J 56CJOJQJaJ#hEyHhEyH0J 5CJOJQJaJ#hEyHhO]S0J 5CJOJQJaJ-; ] $ /      27:;\ftu\]fiuJ%&/012Mdirs·ͨh5hO]S\hashO]SB*mH phsH hash5mH sH hash0omH sH hashO]SmH sH hjhV^h`hrOih5hVhV^hO]S5hO]She=%&Md $$$s@9fv:Zv:$IfakdB$$Ifl4 "p04 laf4 $$Ifa$gd51gd5gd5 .CD^stykvw}~ +DFKLOPU[-@Loz{ÿ˿׮hx]8hJ hJ\hJhO]S\hk hVh'ZJh`hjh5 hO]S5\h5h5\hO]SmH sH hO]Sh5hO]S\ h5\A  -fv:Zv:$Ifqkdו$$Ifl0 "> 204 la-.1fv:Zv:$Ifqkd|$$Ifl0 "> 204 la$s{g@9{Y@9 $$Ifa$gd5^qkd!$$Ifl0 "> 204 lagv:Yv:$IfqkdƗ$$Ifl0 "? 104 lagv:Yv:$Ifqkdk$$Ifl0 "? 104 lagv:Yv:$Ifqkd$$Ifl0 "? 104 la4gv:Yv:$Ifqkd$$Ifl0 "? 104 la45Q]gv:Yv:$IfqkdZ$$Ifl0 "? 104 la]^t$$sw@9 $$Ifa$gd51gd5gd5qkd$$Ifl0 "? 104 lafv:Zv:%qkd9$$Ifl0 "> 204 la$Ifakd$$Ifl4 "p04 laf4,-0hfv:Zv:fv:Zv:qkdޜ$$Ifl0 "> 204 la$Ifhikq}$s{g@9{Y@9 $$Ifa$gd5^qkd$$Ifl0 "> 204 la}~gv:Yv:$Ifqkd($$Ifl0 "? 104 lagv:Yv:$Ifskd͞$$Ifl0 "? 104 la gv:Yv:$Ifqkdv$$Ifl0 "? 104 la  +$$sw@9 $$Ifa$gd51gd5gd5qkd$$Ifl0 "? 104 lafv:Zv:%qkdU$$Ifl0 "> 204 la$Ifakd$$Ifl4 "p04 laf4fv:Zv:fv:Zv:qkd$$Ifl0 "> 204 la$If$s{f@9{Z@9 $$Ifa$gdJ^qkd$$Ifl0 "> 204 la 4fv:fv:Zv:Zv:$IfqkdD$$Ifl0 "> 204 la FHjkrt24YZacǿ׷ׯר hQhQhQmHsHhmHsHh!`mH sH hO]SmH sH h!`mHsHhO]SmHsHh!` hx]8hx]8hO]Shx]8 hoChO]S hoChx]8?45NYfv:Zv:$Ifqkd$$Ifl0 "> 204 laYZm|fv:Zv:$Ifqkd$$Ifl0 "> 204 la|}fv:Zv:$Ifqkd3$$Ifl0 "> 204 lafv:Zv:$Ifqkdإ$$Ifl0 "> 204 lafv:Zv:$Ifqkd}$$Ifl0 "> 204 la&fv:Zv:$Ifqkd"$$Ifl0 "> 204 la&'0Yfv:Zv:$Ifqkdǧ$$Ifl0 "> 204 laYZ[lqx$ @9@9 @9$Ifqkdl$$Ifl0 "> 204 lays v:sv:s v:$Ifkd$$Ifl4F|` < "0    4 lazt v:tv:t v:$Ifkdϩ$$IflF|` < "0    4 lazt v:tv:t v:$Ifkd$$IflF|` < "0    4 la>zt v:tv:t v:$IfkdE$$IflF|` < "0    4 la>?KNjzt v:tv:t v:$Ifkd$$IflF|` < "0    4 lajkwzzt v:tv:t v:$Ifkd$$IflF|` < "0    4 lazt v:tv:t v:$Ifkdv$$IflF|` < "0    4 lazt v:tv:t v:$Ifkd1$$IflF|` < "0    4 la*zt v:tv:t v:$Ifkd$$IflF|` < "0    4 la*+7:Yzt v:tv:t v:$Ifkd$$IflF|` < "0    4 laYZfizt v:tv:t v:$Ifkdb$$IflF|` < "0    4 lazt v:tv:t v:$Ifkd$$IflF|` < "0    4 lazt v:tv:t v:$Ifkdر$$IflF|` < "0    4 lazt v:tv:t v:$Ifkd$$IflF|` < "0    4 la9zt v:tv:t v:$IfkdN$$IflF|` < "0    4 la9:FI\zt v:tv:t v:$Ifkd $$IflF|` < "0    4 la\]imzt v:tv:t v:$IfkdĴ$$IflF|` < "0    4 lazt v:tv:t v:$Ifkd$$IflF|` < "0    4 lazq v:qv:q v: $IfgdpLkd:$$IflF|` < "0    4 la  ( ) + , : ; < a b        !!_!`!!!""d"e"g"h"k"Ǽ}y}rngncnhN hQhnfUhnfU hQhhash hQhwjhwj hQh.h hCh. hQhx]8hx]8 hQhh hQh+h+ h!`h+hn f hQh!`h!`h!`mHsH hQhXhXhFmHsHhXmHsH hQhO]S& zq v:qv:q v: $Ifgd!`kd$$IflF|` < "0    4 la  ) , ; zq v:qv:q v: $IfgdpLkd$$IflF|` < "0    4 la; < H K a zq v:qv:q v: $IfgdpLkdk$$IflF|` < "0    4 laa b l o  zq v:qv:q v: $IfgdpLkd&$$IflF|` < "0    4 la     zq v:qv:q v: $IfgdpLkd$$IflF|` < "0    4 la    !zq v:qv:q v: $Ifgdwjkd$$IflF|` < "0    4 la!!&!)!_!zq v:qv:q v: $IfgdwjkdW$$IflF|` < "0    4 la_!`!j!m!"zq v:qv:q v: $Ifgd1kd$$IflF|` < "0    4 la""!"$"d"zq v:qv:q v: $IfgdnfUkdͼ$$IflF|` < "0    4 lad"e"o"r""zq v:qv:q v: $IfgdNkd$$IflF|` < "0    4 lak"m"n"o"q"r""""###### ###$#&#'#-#.#/#0#1#2#6#7#=#>#@#A#B#Y#Z#`#a#d#e#f#g#p#q#######$ſŹſſŹſע׉ׂע hd0hasjhasU hZ0J'5hhas0J'5jhhas0J'5UjhasU hZ0J' has0J'jhas0J'UjhasUhas hQh hQh'h' hQhNhnfUhhN1""""#zq v:qv:q v: $IfgdNkdC$$IflF|` < "0    4 la#######%#&#1#zukikigi^&`#$ !$dNgdwjkd$$IflF|` < "0    4 la 1#3#4#5#6#B#C#D#V#W#X#Y#h#i##### K%$$dN]^ K%$$dN]^ !$dN! K%$$dN! K%$&`#$! !$ K%$a$$$$$ $ $D$g$k$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%&&&&&&&\&]&c&d&g&h&i&&&&&&&&*'V'ý÷ýܰܤघý÷ýܤघܤघ has5 has0J'5jhas0J'5U hd0has hZ0J' has0J'jhas0J'U has6]hasB*phhas hZ0J'5h-r<has0J'5jh-r<has0J'5U<# $ $$$$$+$,$-$.$/$0$?$@$A$B$C$D$h$i$j$! K%$$dN !$dN!! K%.$dN K%$$dN]^j$k$$$$$$$$$$$$$$$$$$$$$$$$$%! !$dN! K%$$dN%%%%%%%%%%2%3%4%5%6%7%8%9%:%;%V%W%X%Y%%%%! K%$$dN! !$dN%%%%%%%%&&&&&&&&i&j&k&l&x&y&z&{&! K%$$dN! K%$ K%$$dN]^&`#${&|&}&&&&&&&&&&&&&&&''(')'*'V'W'! K%$$dNgd6 K%$$dN]^! K%$$dN! K%$W'X'Y'''''''''''''''''''''''''$a$! K%$$dN! K%$V'Y''''''''((( hQhhO]ShZ has6]h6hasB*phhasB*phhas ''''((.(/(J(K(W(X(e(f(g(t(((((((((((gdwj$;$a$5 000&P1GP/ =!"#$%4 0 000&PP/ =!"#$%6 0 000&PP:pEI,/ =!"#$%3 0 00&PP:pEI,/ =!"#$%* 0 0&PP/ =!"#$%* 0 0&PP/ =!"#$%* 0 0&PP/ =!"#$%& 0 0&P/ =!"#$%* 0 0&PP/ =!"#$%* 0 0&PP/ =!"#$%* 0 0&PP/ =!"#$%* 0 0&PP/ =!"#$%* 0 0&PP/ =!"#$%* 0 0&PP/ =!"#$%* 0 0&PP/ =!"#$%. 0 0&P/R / =!"#$%. 0 0&P/R / =!"#$%* 0 0&PP/ =!"#$%. 0 0&P/R / =!"#$%. 0 0&P/R / =!"#$%* 0 0&PP/ =!"#$%* 0 0&PP/ =!"#$%* 0 0&PP/ =!"#$%* 0 0&PP/ =!"#$%* 0 0&PP/ =!"#$%* 0 0&PP/ =!"#$%* 0 0&P1G/ =!"#$%* 0 0&P1G/ =!"#$%* 0 0&P1G/ =!"#$%p$$If!vh5F5#vF#v:V l5F5/ 4ap$$If!vh5F5#vF#v:V l5F5/ 4aDyK yK >mailto:techsupport@osisoft.comp$$If!vh5F5#vF#v:V l5F5/ 4aDyK yK 0http://www.osisoft.com/p$$If!vh5F5#vF#v:V l5F5/ 4ap$$If!vh5F5#vF#v:V l5F5/ 4a$$If!vh5F5 5 #vF#v #v :V l5F5 5 / 4a{DyK  _Toc39027836{DyK  _Toc39027837{DyK  _Toc39027838{DyK  _Toc39027839{DyK  _Toc39027840{DyK  _Toc39027841{DyK  _Toc39027842{DyK  _Toc39027843{DyK  _Toc39027844{DyK  _Toc39027845{DyK  _Toc39027846{DyK  _Toc39027847{DyK  _Toc39027848{DyK  _Toc39027849{DyK  _Toc39027850{DyK  _Toc39027851{DyK  _Toc39027852{DyK  _Toc39027853{DyK  _Toc39027854{DyK  _Toc39027855{DyK  _Toc39027856{DyK  _Toc39027857{DyK  _Toc39027858{DyK  _Toc39027859{DyK  _Toc39027860{DyK  _Toc39027861{DyK  _Toc39027862{DyK  _Toc39027863{DyK  _Toc39027864{DyK  _Toc39027865{DyK  _Toc39027866{DyK  _Toc39027867{DyK  _Toc39027868{DyK  _Toc39027869{DyK  _Toc39027870{DyK  _Toc39027871{DyK  _Toc39027872{DyK  _Toc39027873{DyK  _Toc39027874{DyK  _Toc39027875{DyK  _Toc39027876{DyK  _Toc39027877{DyK  _Toc39027878{DyK  _Toc39027879{DyK  _Toc39027880{DyK  _Toc39027881{DyK  _Toc39027882{DyK  _Toc39027883{DyK  _Toc39027884{DyK  _Toc39027885{DyK  _Toc39027886{DyK  _Toc39027887{DyK  _Toc39027888{DyK  _Toc39027889{DyK  _Toc39027890{DyK  _Toc39027891{DyK  _Toc39027892{DyK  _Toc39027893{DyK  _Toc39027894{DyK  _Toc39027895{DyK  _Toc39027896{DyK  _Toc39027897{DyK  _Toc39027898{DyK  _Toc39027899{DyK  _Toc39027900{DyK  _Toc39027901{DyK  _Toc39027902{DyK  _Toc39027903{DyK  _Toc39027904{DyK  _Toc39027905{DyK  _Toc39027906{DyK  _Toc39027907{DyK  _Toc39027908{DyK  _Toc39027909{DyK  _Toc39027910{DyK  _Toc39027911{DyK  _Toc39027912{DyK  _Toc39027913{DyK  _Toc39027914{DyK  _Toc39027915{DyK  _Toc39027916{DyK  _Toc39027917{DyK  _Toc39027918{DyK  _Toc39027919{DyK  _Toc39027920{DyK  _Toc39027921{DyK  _Toc39027922{DyK  _Toc39027923{DyK  _Toc39027924{DyK  _Toc39027925{DyK  _Toc39027926{DyK  _Toc39027927{DyK  _Toc39027928{DyK  _Toc39027929{DyK  _Toc39027930{DyK  _Toc39027931{DyK  _Toc39027932{DyK  _Toc39027933{DyK  _Toc39027934{DyK  _Toc39027935{DyK  _Toc39027936{DyK  _Toc39027937{DyK  _Toc39027938{DyK  _Toc39027939{DyK  _Toc39027940}DyK _Ref529752778$$If !vh5 5 #v #v :V l405 5 / 4a f4$$If !vh5 5 #v #v :V l405 5 / 4a f4$$If !vh5 5 #v #v :V l405 5 / 4a f4$$If !vh5 5 #v #v :V l405 5 / 4a f4$$If !vh5 5 #v #v :V l405 5 / 4a f4$$If !vh5 5 #v #v :V l405 5 / 4a f4$$If !vh5 5 #v #v :V l405 5 / 4a f4$$If !vh5 5 #v #v :V l405 5 / 4a f4$$If !vh5 5 #v #v :V l405 5 / 4a f4$$If !vh5 5 #v #v :V l405 5 / 4a f4$$If !vh5 5 #v #v :V l405 5 / 4a f4$$If !vh5 5 #v #v :V l405 5 / 4a f4$$If !vh5 5 #v #v :V l405 5 / 4a f4$$If !vh5 5 #v #v :V l405 5 / 4a f4$$If !vh5 5 #v #v :V l405 5 / 4a f4$$If !vh5 5 #v #v :V l405 5 / 4a f4$$If !vh5 5 #v #v :V l405 5 / 4a f4$$If !vh5 5 #v #v :V l405 5 / 4a f4$$If !vh5 5 #v #v :V l405 5 / 4a f4$$If !vh5 5 #v #v :V l405 5 / 4a f4$$If !vh5 5 #v #v :V l405 5 / 4a f4$$If !vh5 5 #v #v :V l405 5 / 4a f4$$If !vh5 5 #v #v :V l405 5 / 4a f4}DyK _Ref517598667{DyK  _Ref23223413}DyK _Ref529755081DyK yK hhttp://interfaces.osisoft.com/Uniint3x End User.docDyK yK <http://www.microsoft.com/data}DyK _Ref517856497DyK yK 6http://msdn.microsoft.com/}DyK _Ref517600853}DyK _Ref517600973}DyK _Ref497020822}DyK _Ref497020823wDyK  bkmkSingleDyK _Appendix_A_ExamplesDyK !_Example_1.1_ _single tag query:DyK _Appendix_A_ExamplesDyK %_Example_1.2_ _query data array for }DyK _Ref497020853DyK _Appendix_A_ExamplesDyK %_Example_1.3_ _three PI points formi}DyK _Ref497020876DyK _Appendix_A_ExamplesDyK  _Example_1.4_ _Tag Distribution{DyK  _Ref16040571DyK _Appendix_A_ExamplesDyK  _Example_1.5_ _RxC DistributionDyK bkmkPlaceholdersDyK _Appendix_A_ExamplesDyK %_Example_2.1_ _insert 2 different si}DyK _Ref516882952}DyK _Ref517754382$$If!vh5H 5l 52#vH #vl #v2:V l4405H 5l 52/ 4af4$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a}DyK _Ref497032019$$If!vh5H 5l 52#vH #vl #v2:V l40+5H 5l 52/ 4af4$$If!vh5H 5l 52#vH #vl #v2:V l40+5H 5l 52/ 4af4$$If!vh5H 5l 52#vH #vl #v2:V l40+5H 5l 52/ 4af4$$If!vh5H 5l 52#vH #vl #v2:V l40+5H 5l 52/ 4af4$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l4405H 5l 52/ 4af4$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l4405H 5l 52/ 4af4$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4a$$If!vh5H 5l 52#vH #vl #v2:V l05H 5l 52/ 4awDyK  bkmkGlobal$$If!vh5n5X #vn#vX :V l4405n5X / 4af4$$If!vh5n5X #vn#vX :V l05n5X / 4a$$If!vh5n5X #vn#vX :V l05n5X / 4a$$If!vh5n5X #vn#vX :V l05n5X / 4a$$If!vh5n5X #vn#vX :V l05n5X / 4a$$If!vh5n5X #vn#vX :V l05n5X / 4a$$If!vh5n5X #vn#vX :V l05n5X / 4a$$If!vh5n5X #vn#vX :V l05n5X / 4a$$If!vh5n5X #vn#vX :V l05n5X / 4a$$If!vh5n5X #vn#vX :V l05n5X / 4a$$If!vh5n5X #vn#vX :V l05n5X / 4a$$If!vh5n5X #vn#vX :V l05n5X / 4a$$If!vh5n5X #vn#vX :V l05n5X / 4a$$If!vh5n5X #vn#vX :V l05n5X / 4a$$If!vh5n5X #vn#vX :V l05n5X / 4a$$If!vh5n5X #vn#vX :V l05n5X / 4a$$If!vh5N5&#vN#v&:V l440t5N5&/ 4af4$$If!vh5N5&#vN#v&:V l40t5N5&/ 4af4$$If!vh5N5&#vN#v&:V l40t5N5&/ 4af4$$If!vh5N5&#vN#v&:V l40t5N5&/ 4af4$$If!vh5N5&#vN#v&:V l40t5N5&/ 4af4$$If!vh5N5&#vN#v&:V l40t5N5&/ 4af4$$If!vh5N5&#vN#v&:V l0t5N5&/ 4a$$If!vh5N5&#vN#v&:V l0t5N5&/ 4a$$If!vh5N5&#vN#v&:V l0t5N5&/ 4a$$If!vh5N5&#vN#v&:V l0t5N5&/ 4a{DyK  bkmkStrategy}DyK _Ref497012660$$If!vh55}#v#v}:V l44055}/ 4af4$$If!vh55}#v#v}:V l055}/ 4a$$If!vh55}#v#v}:V l055}/ 4a$$If!vh5}5}#v}#v}:V l4405}5}/ 4af4$$If!vh5}5}#v}#v}:V l05}5}/ 4a$$If!vh5}5}#v}#v}:V l05}5}/ 4a$$If!vh5}5}#v}#v}:V l05}5}/ 4a$$If!vh5}5}#v}#v}:V l05}5}/ 4a}DyK _Ref497991542}DyK _Ref497032019DyK _Appendix_A_ExamplesDyK "_Example_3.1_ _field name AliasesDyK _Appendix_A_ExamplesDyK %_Example_3.2_ _fixed column position$$If!vh555555#v#v#v#v#v:V l44055555/ 4af4$$If!vh555555#v#v#v#v#v:V l055555/ 4a$$If!vh555555#v#v#v#v#v:V l055555/ 4aDyK _Appendix_A_ExamplesDyK %_Example_3.3_ _arbitrary column posi$$If!vh5558555#v#v#v8#v#v:V l440555855/ 4af4$$If!vh5558555#v#v#v8#v#v:V l0555855/ 4a$$If!vh5558555#v#v#v8#v#v:V l0555855/ 4a$$If!vh5558555#v#v#v8#v#v:V l0555855/ 4aDyK _Appendix_A_ExamplesDyK %_Example_3.4a_ _Tag Distribution, seDyK _Appendix_A_ExamplesDyK %_Example_3.4b_ _Tag Distribution, seDyK _Appendix_A_ExamplesDyK %_Example_3.5_ _Tag Distribution withDyK _Appendix_A_ExamplesDyK  _Example_3.6_ _RxC DistributionDyK _Appendix_A_ExamplesDyK !_Example_3.7_ _event based inputDyK _Extended_DescriptorDyK _PI_Point_Configuration}DyK _Ref496669757$$If!vh5n55 #vn#v#v :V F4405n55 / 44 Faf4$$If!vh5n55 #vn#v#v :V F05n55 / 44 Fa$$If!vh5n55 #vn#v#v :V F05n55 / 44 Fa$$If!vh5. 5555#v. #v#v:V F405. 55/ 44 Faf4$$If!vh5n55555#vn#v#v#v:V F40+5n555/ 44 Faf4$$If!vh5n55555#vn#v#v#v:V F40+5555/ 44 Faf4$$If!vh5n55555#vn#v#v#v:V F40+5555/ 44 Faf4}DyK _Ref497012660$$If!vh5n5#vn#v:V F405n5/ 44 Faf4$$If !vh55#v#v:V l0655/ 4a $$If !vh55#v#v:V l0655/ 4a $$If !vh55Z5[5p5F#v#vZ#v[#vp#vF:V l44055Z5[5p5F/ 4a f4$$If !vh55Z5[5p5F#v#vZ#v[#vp#vF:V l40+55Z5[5p5F/ 4a f4$$If !vh55Z5[5p5F#v#vZ#v[#vp#vF:V l40+5F5Z5[5p5F/ 4a f4$$If !vh55Z5[5p5F#v#vZ#v[#vp#vF:V l40+5F5Z5[5p5F/ 4a f4$$If !vh55,5F#v#v,#vF:V l4055,5F/ 4a f4$$If !vh55%5F#v#v%#vF:V l40+55%5F/ 4a f4$$If !vh55%5F#v#v%#vF:V l40+5F5%5F/ 4a f4$$If !vh55%5F#v#v%#vF:V l40+5F5%5F/ 4a f4$$If !vh5l#vl:V l405l/ 4a f4$$If !vh55%5F#v#v%#vF:V l4055%5F/ 4a f4}DyK _Ref516882931DyK _Appendix_A_ExamplesDyK %_Example_3.8_ _multi statement query{DyK  _Ref20212696DyK _Appendix_A_ExamplesDyK %_Example_3.9_ _stored procedure callDyK bkmkPlaceholdersDyK _Appendix_A_ExamplesDyK #_Example_3.10_ _event based output}DyK _Ref517762913$$If!vh5555#v#v#v#v:V l4405555/ 4af4}DyK _Ref496940470}DyK _Ref496940482$$If!vh5555#v#v#v#v:V l05555/ 4a}DyK _Ref496940470}DyK _Ref496940482$$If!vh5555#v#v#v#v:V l05555/ 4aDyK _Appendix_A_ExamplesDyK %_Example_3.11_ _Output triggered by $$If !vh5555#v#v#v#v:V l4405555/ 4a f4$$If !vh5555#v#v#v#v:V l05555/ 4a $$If !vh5555#v#v#v#v:V l05555/ 4a DyK bkmkPlaceholdersDyK _Appendix_A_ExamplesDyK !_Example_3.12_ _global variables$$If !vh55#v#v:V l0655/ 4a $$If !vh55#v#v:V l0655/ 4a $$If !vh55#v#v:V l0655/ 4a $$If !vh55#v#v:V l0655/ 4a $$If !vh55#v#v:V l0655/ 4a $$If !vh55#v#v:V l0655/ 4a $$If !vh55#v#v:V l0655/ 4a DyK _Appendix_A_ExamplesDyK %_Example_4.1_ _PI Point database chaDyK bkmkPlaceholdersDyK _Appendix_A_ExamplesDyK %_Example_4.2_ _PI Point database chaDyK bkmkPlaceholders$$If !vh55 5 #v#v #v :V l0655 5 4a $$If !vh55 5 #v#v #v :V l0655 5 4a $$If !vh55 5 #v#v #v :V l0655 5 4a $$If !vh55 5 #v#v #v :V l0655 5 4a $$If !vh55 5 #v#v #v :V l0655 5 4a $$If !vh55 5 #v#v #v :V l0655 5 4a DyK _Appendix_A_ExamplesDyK %_Example_5.1_ _Batch export (not req$$If !vh55 5#v#v #v:V l0655 54a $$If !vh55 5#v#v #v:V l0655 54a $$If !vh55 5#v#v #v:V l0655 54a $$If !vh55 5#v#v #v:V l0655 54a $$If !vh55 5#v#v #v:V l0655 54a $$If !vh55 5#v#v #v:V l0655 54a $$If !vh55 5#v#v #v:V l0655 54a $$If !vh55q 5c#v#vq #vc:V l0655q 5c4a $$If !vh55q 5c#v#vq #vc:V l0655q 5c4a $$If !vh55q 5c#v#vq #vc:V l0655q 5c4a $$If !vh55q 5c#v#vq #vc:V l0655q 5c4a $$If !vh55q 5c#v#vq #vc:V l0655q 5c4a $$If !vh55q 5c#v#vq #vc:V l0655q 5c4a $$If !vh55q 5c#v#vq #vc:V l0655q 5c4a $$If !vh55q 5c#v#vq #vc:V l0655q 5c4a $$If !vh55q 5c#v#vq #vc:V l0655q 5c4a $$If !vh55s 5f#v#vs #vf:V l0655s 5f4a $$If !vh55s 5f#v#vs #vf:V l0655s 5f4a $$If !vh55s 5f#v#vs #vf:V l0655s 5f4a $$If !vh55s 5f#v#vs #vf:V l0655s 5f4a $$If !vh55s 5f#v#vs #vf:V l0655s 5f4a $$If !vh55s 5f#v#vs #vf:V l0655s 5f4a }DyK _Ref517858794$$If !vh5x5x#vx:V l065x/ 4a $$If !vh5x5x#vx:V l065x/ 4a $$If !vh5x5x#vx:V l065x/ 4a $$If !vh5x5x#vx:V l065x/ 4a $$If !vh5x5x#vx:V l065x/ 4a $$If !vh5x5x#vx:V l065x/ 4a $$If !vh5x5x#vx:V l065x/ 4a $$If !vh5x5x#vx:V l065x/ 4a $$If !vh5x5x#vx:V l065x/ 4a $$If !vh5#v:V l4065/ 4a f4$$If !vh5x5x#vx:V l065x/ 4a $$If !vh5x5x#vx:V l065x/ 4a $$If !vh5x5x#vx:V l065x/ 4a DyK _Appendix_A_ExamplesDyK %_Example_5.2a_ _Batch export (ModuleDyK _Appendix_A_ExamplesDyK %_Example_5.2b_ _UnitBatch export (MoDyK _Appendix_A_ExamplesDyK %_Example_5.2c_ _SubBatch export (ModDd H  C $A batchRLj⠖( F j⠖JFIF``C     C    " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?k_>8G5PhicO6J\7?VOW6sbu+~F j澖b [xC2_]](ӯ%!)Եrs[9覭pA;J|]@ԴVWky!$bCi?}1!K),vKұx\ʴU|QJnQN)&׭(Z~Gߩ~Ӿ&WmCzƓ˽rY?'Hw4y0c:i鿲'ߊחk KVs lD(;`kg{|=>[ ڞihzΝ(-w&%3,)Cs'N3^# IbO\AմW!L1[iVȒ@~餙3J~U1YTiZ^X۶ֽ,Ts j>E+9'ѼGխ64_c9]ޖ"a$Mh @G_?k%. jq,bF{a3(L5?kχB k,4Wj/s{.lKr݂w`U|ލƙţU~q[X`+Ix*vGr_˸c C/n|Qc!."H>H_ |-<3xF{N>۫Mik堒O2URc)k~?h{o?Ct_hEKpuSc)') [I82 1W ®5\.&CsW{nxW$[ywxřc]?{ه,{ |ghC5On&@szVhEƨdpט) [DW_xTWTA xI ". u|ލƙţU~q[X`+Ix*xEC/ˣ'#I,~ҨVumHbwepJU3B^.l5ώf|2noi![K]V[w ְp 1#~]>w-wQG?4٥3j7߳;ps6U߳>My{Wmj,ZQ|X̶=6ƅRf%N\t߶OX].Eq[sB7@|yFYߔsRݴ[oײ E?~&D|=Śs4]QȈUpx SK;7ROl{{K)`U# }}x3^&cyvX96H`Hf\ԢS"3+lj0 @]cKЛMm"/n"x)>F C/n|Qc!."H>H_ _ǁ> ݦj~;7!v{Zo{*JY,/69.11v$(MS}׼ÚVQ閑\Y >i崒5ܙd|5֦3.J7Iio][\|g/j]5k -le{+yI@IV&H$+ -o<qyW^_ǥOEjonbfuFY-Rl9!`X|1]5yotxHS0mq4 8"Ecy)88׊k^]c T3C4K%=5K")`F*N*AB6&~ @0I_?a[j&.i4fE{0Y|5h|UtK6,Mi5a0]Kd7bv13F`C)JhTw|_%9%%VzQ^!EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPnjeٿ^ 'Y[i5[u`s|cL|0;9mt/-֙ T1uݐ5}oV5 rJg|9zs5>%F3YIj\ͬ,T$G=wtpU_g}d$=gt%BWUor(exD'KmSHђT8W*=2ҽoև:|sq.}2=LaQ"$>sѺcct3 %̗Tbu1`8 )<0V*mwRg B |'#~ǿssma;l[krG&ZoGl 71,αJD$F2iDlcAcdy4 eckO=ƳypƠ;P$?hڿ}g?|Iqu]۝}+տh_ _YJ%mbL_j61^=*{DkV/$`EBl'Ò{>Qxv]N-ekfdر3xM5·0/}ǫoI>Mw7|=s(uk@lf`,k$Pm倄i5ُO$;#_- N)'ٵ$EwUULG稪ǿέ.lY&vfM>POan 'џ\7o/ʞkDb%ٌ25jv_'OoHaxS׵62˪iqdm ʼb;dvFl'Ò|+*zaς_%VW;|BUtf=j[M4ᾏN,mmkhWWƱ0;>sŚ{V֭}Oȳ#UG}>m(PD9rC8aς_%VW/ٿ^ơ%!|A}FwQ=̋!KKB3,=kΫ ~ԧִj>͖Im㹸Xhmi|ƍ#S 3&TُO$;#Ks _U|+*z{׊4'ftmþ$v+{)Ykk=5H|Xn/n uWQu ]wz 7]Am Е[=^{Ok3;P񖛯iAUueiⲷI#! .# ُO$;#~G 6w{K_;n7l.n\[w[#W<' K<6rH 8 }D7oʼ6̺>gizdYmBZ%ө)- G?/HvD/ϱ7xvt??7],ھ[#J08aς_%VWůe>xnji'E:u8{Ke3` {}C|ek/-O៶ /mlif%ۿ=D?Ƞ D9rC-|+*z~G 6w{K_;n7l.n\_KW2>|nu7V:t,u{#IHB ,%Dn?/HvG3s ג-YV@!DF@j0/}ǫ{Qtyyuq/PiQ5pG#2hTnV?fxO6:e4{.{ k~ӯK6-%L C.!D9rC4-.5xN(u$quGerOcßJʭ7H⸼O3 OždfY C-V4+dh;|/ӵJ_Y xnVktdTEzĬ]QcAauطFN+Xyn55݌* $ G>Ο>K'vvlg^BbΧWxGjWi+MAwi3ZdM=2@n&yI>cT+9LgcAaw0/}Ǩ%BWUorO6SRu;{{i:my#ϷMeGG_x⾯\ig 7ح2[l29X,l3{jC[1r0dm|+*z߱o_O77Q,\7G4l+ e Ua-$7cĊ tu{=HZi$4[^e׌o/x61EK%;cJ0˲VkcKv9C[1r0dm|+*z~ſ/gp5 om#`SЊ:΋mNAi[z$vNPHA_<i1Et?/HvFϺ=͵ln.qEsHA*/V|+*z5fokvX,^H>X!Ղ9]M%Q>9U_~.xFxfW/N1 .ap- y̑8H ?/HvGEm 'Vom+YwXͫr972Yk+ |(V̑h"9! 9K?> Е[=]\M׳UYjfҼEoh$y7 'Ѫm9ur}l'Ò?ßJʭs _UQD9rC<'s _U|+*zڊ?/HvG|+*zaς_%VWQGcAaaς_%VQ 9Kj("9! 9K?> Е[=^EُO$;#> Е[=G0/}ǫݨ[1r0dxO0/}Ǩ%BWUo{kf??_ %BWUoßJʭvl'Ò?ßJʭs _UQD9rC <[+~Ko<U[1 izhڥj^%ŭǢsƳBऊC 0 \Ův_^Xn]z( 1Wh-]CT<U/9%e*$GlzcQu]g@/Z x?B4˹ehsِD&Vflqn0u;oi3r^Co6a{5 mI3FA$V?i>$ק0yAǃ捤C%IQqWx?_2Aép#aƬ, 3϶ilJ,S6V7b^Q^߃5lo +7N:Kv-Y58x`1yqilC?vogA5w~iIyQ7nDmV19J=#@UoVQ$ڗ(!9Rt3\$ק0oս\M<- F Exa3;J)DӚ1$SI 2f c`|+OkF·:U΍aO, n$p+:y킫,J_2CWⶫ'fGKXZ VU3b+o|'7᷀|g'?BW./mRo!m:Ζ9V)Jr*Z)%8\+|63l]M$_8~_micF𽞹OMoC񯁼5uvSSe`ȭZYL!F_]GOß2Jg{m,i6Ѵ.U/,B\(:V>24?f xwHӤsG֊ovm"º]vcvU'x_$6(֦O-^3/߀H nP 3y?g_T+ #<#5ՂE;c@G@~xZA|6lZW"cm6M3Z{iზinu86 0c2O4{"3ৈR![k .M[DKF˫TeUlc5 $4nu`M,rMb L-n6 !tQEW$~&Oku8u h6eqr,EgXPJ E.<mcWׄd]im{GPfޓ"A~J3cpeIc߳M3ᦇ#̿kߊ`7nZX)uqa6I8m2v<>F^񅥕*[ѼG0uXyBK`tۂ-Y3w<}s"mZNu{jWZޏ]r;mDwhR-H+JDY$Q{aQe^Y~&xcIM~!MYݵij331$zׅtO]k{i7:ְu&9&1imn&xf]\UojuzkOmq9mGDVGSA MñxSXcA^ M̚fubo\GEoZW3CǤ_As Rn.l.lM$h``eBQO^1Lkʵek4r*M,ZȌFXTP-H:/I$/|7g6"yZ̃ѢeIr&[*+-}XmK]Sǒ[fuG$h2WyS%ƞ3_I<:ul& r@XOO/xK:UԚ';oc}KÛ5 >T[;kx__{7M$,6ye4J5HC:ecp-&?/Mp_ÏFc=D: Jex[,o ֗-X!u,wQ7yr 8ufp3WeZM^ ~'@g|ne&Mɚ{9R, 0iOP> ?& ֱ{]Ez(o!ߔĭohCt 4afB?x)koIkoj &~)ڲVSH^_ů$ڇ_ů$ڇ7ߊV]|,ޣ\gO xx~"$axdt2]~I!Rinl=o:i1k^y &HcABK-(;[T*8=Y> xெOA,z<٘>>sb,NwnIs+׾Ě߈k߃$[ŬOwj F0H&mg_|Ahڏ˫XJzv`y$qeTAM5QFfuv$E塞XzcA_3  _x|372h=dD4ۧ`o+{_6Zͥ=EF4EIӬem6d̒ CUe*|,ޣ\e.?g_G - }Ť&iR5>U._)eSљW$t`׭#~An.LIYm:iPkĐtAP W7Q4\OIѰ*uH$x -g_ le&^5Y 6(fQY|~ܾ?uVq{cW㿊Fmaav% ky5UF Z'čWư鶷V3iַod3Ae͛c7͙Q"l&GJYC bfIjɳw˷)=}t>c1ǖ|S%gGzn6⏉^ 燯/kyD:~-WI#y/ϻ1lZ6 zo ?tFĞ8e&ӯ,F FIgLnݴ3[~Qx}boZo}iF})Ykl\э)]ǖ__xoú0n3mZ7/|-iSW\\*4[mɉ<<}}߉ω j}B-$YRVdS=+k6zo,(&n[Ꮔ;s.6l^OL&@.ʔA`QHxʆDP7_ BFNNƧ5/k>߇m=TӒiR+oV\\]I {Q1˲ູhc*e&[*+O> >&.:oo%GMɶ_@G,ot s#,~sCE4?"zDžlnWЁ~5c8S#_@ɶ_@^? x⟆us ua>zsIynTI%h7LXJsy xII{1>noC{;DsC-4M.jwjƭ?n645XӅ :C9w?>.:oM ?\:?dЯ uC4S x 7Q s#?dЯ uCM ?\:@9w?>.:oM ?\:?dЯ uC49??H'mּ@[ JS]"AhI ƈ8UEo%GM7 ž=Kյۀk71Mc9pɶ_@@)φK+_ kkw}piӼ#aL[1Rrz &W|soihd :d,Xdr:息|!? ?nD\隇pb]f79ܶ?goWⷋ_)g ?x*(d*mDˌF؍Ct&kxP6!ռ/QYƐ]X%.p$0 *x·_Oh|sh~h_ u}=) QROb@hw?࿅|Q࿀5OKf|`SUi\%⑫ |̿xgt>߀uZgt][}iV;]rv9#\a'ůItOZZxC0e <_XY%7fួgi vyQ,q4 c!# 9C3 9Qm}lt[<^LBc3:Fw0_ <|U _-CMon=R-D!۲ʏ3.]QacjzKOM?SK^OVkZ .Z nf凗V?M\~8%/,mu/xVK[+qDaCs Cc̾{ - <:-,ML-a((6*1t-+VßFÞ"C=y-x. U`<6feEG?\k;7f}ݨCcm_T׾#qCl{6>œmDHbS x 7Q &mW:!)φK+S]k𽄭5B(hTP ?dЯ uCo῎HT6W^\NȾYmɊh݃o%GMœmDHbY6+smB??N|6]$t1^ Qw-> \Q,6g9uV[)|ɶ_@X/ֻFEZhՠq5X-G\2 )4<Ǻ=Ο8ƺL =dG4W0(-%J6J0݇'~<Ү|(H|WXGaY"@Ve r\~ xg9!.n~ZZbc;vܳ}f0ixfWi{|K_udoXCo "9.@@_Wo?^&.XImgo2J^v },1ˁQq~ ,[:k6S4e72JMK>" ÍF;!=%+mV94k~MP<'k{ZC$n:V?,P@׬x+I]Wᗋ.ՓGOھh%29dhYA N0|ab D> miI=NѢ+g*lPOx+M:W]W(ψ|YwbE? Ka!8L3KFGcWb s#?N|6]$t1G,otɶ_@@h>.:oo%GMɶ_@G,ot'ù  u<׈Ks{ [jkQ- !R8G œmDHb8]#P]xSǩr;"[pmf##&)lg#v:OY6+s9w?>.:oM ?\:?dЯ uC4< |oQO $6_F6ួyi4wPyR,>a *3i9+ _zIy n"`YV@?g3'jiVj^[DF^$n݇? !6xoL7۵*Xm> o0`QYqt< |uxW]s|>,fO"ʛB7rIQUU>[~՟"?|.꺊ݭ\BH48}wFm4x3ź/M7ŘL~f`Xc3 +oK){Ix?3׆> w7xCM{ڬТdN+|м0_: ~!Ӯsx6$!%_'q6< j,6m '5=rHXkȴ# qyM7PiZ>ş ~\{:{z/m-ƞX'D 7FɹJS x 7W  ^gψ|-5}7OWX5kRX`] &œmDHbS x 7Q &mW:!)φK+՝-#bQnd  bfdЯ uC?>$xm?njׯ^7vRU 8`g?fo e`5B5̌Y,r?8.4? !.+ jI[6ɘ=݌wO#-7 (mᇌ4/_.=٬5}r:Z3Ml^IE4rhk(- -5M/@Z}^^]̷-lf3:YZ(yYJ@k#1u?h,m&-̑I̴cм/Zt koo h̖E`LV#iM?|=s‘sJsuZ6.' >d|_qWQWGeT366嗷SrdCtɶ%6;Bf1i_!6w|W>g{؇VV[gm>S};Cʕl|޻M^^?O5h"m2uŷQ4<\[sf6&BdS9t>v#|_UWyxz({OSI j@]}m+fy%yּ';f z5_$o0VQ]3גH_Ѭυ? :ukdžt廚U[6.1J]ph -OO}^VMJۍ4ڛkr%GE$*`u̜  x{Xmƫڭzuƿ1ntX 7WK2|S,LRX|AOi_>C-[j6{Ւ6[YZF/3|zV%sxv^{ٓM}]E^IPڂ/^qMɑs?Eh<3N}%mmJmv-T$ 4b-BlO>" GOh4/[Ew6)4}*AvmNl02ܗs޻M^^?O5h"m2uŷQ4<\[sf6&BdxjY\-ڕbZIYoj$_,Mh*U< 7;^]K6+![t{aѕuơfΓ=ČR|.Osx_o1_Q54 ]_j!_CFҵɆ;L nfV]x[x?éKIYF$ќ_1X+elVacE Go_֞gxG_Ѽ5emQ}O.]V"sܒ qZ/IoK{ AGƷ h 4KUpy"6xo|}OW- izZ΂islVy ZW4V_{s ?j>:[i'],k?c^xǚe yooJ@4 46C}GRN%'>:wω4N[4"kJpvV4y#NfD0HHQYhg|,?9!tVg54}Y 3@tVg54}Y 3@tVg54}Y 3@tVg54}Y 3@uNJ?fo ׺}Y 3^2:U$7RTm  | hGڿ~M̬{Z梓|O-̊B]42yPysE+އʚOWqOEt~39Hþ.񯉴sRuiZtZ. Eum[KwrdmV 3!)LZ_ @R׼Cצ.t(|?L QڥTA9wzOx;R->S]"vY KiV) MFF+.cY6TK#a}_C>lϗ}yZyj|ӷdܮ_Kxnk3ŷZEƯiuxN $ZY[?ɷ3ķE>D24JxST>(L:T~.Ѭ/5Gnl'Yby'N,ZhRC2+v:דomZk{H-m"3]\L&T $geE. (fGP^íHӞ(tR kkn#gݤm2}'˖*>xoğc'⎞4-zEuեa K {I$Ini!xDae7Axj:gklo+5y.Fd]nT |i}'ǿ<]o.u[y|?+,Br$c$/A*,#|6,ЦѼUu<7Vtkw+m7;Cwe m<jҭvAjpDQ,\Z`Vp$ 5ǵk$֩{XR闚Vvx[kVgdHػ+\j p[2i>.!Y_x i[HĤi2aT"|D.x" t:<3Z"X5rnėV@]otwE'm'dچEӬ-<Y_-_-4싯 j싯 j_x[WĞ2mNԼ+Ssbh0FD:*_ <ߌzGS&ҵ-}uwO}Tqقdaʼ)Ƈˏ+xRRINH-;IkZEPK; Fv5f^?k]DX渊Kv$uO _~TȺ;Vį&HJgG߃yuJsm~2d˿CњO%ۘŅ3u>G6KI,ֵM %S}aa8 x 2 jI7s֟4?O ^ji_i'QmbGnRW,"77W˓T7~.IuHX,`*H ⇸IlKoWhO'].23̬g$$TTvʺ6ݲ w];֮t_|4}?PbEn4 jg<'9bd;.u;#ƺouZΝank < L-,Aixg&ll%;?2֫1w^Ymn>Ŏfľ<&o|=3j%͝w"02HHO2(Sׁ~jgcߴ>M;J|Im;c?2h!\wIYA(?uk}CC_5}&4";ZM Pu#\(c^5Y$=;X.M xTZot+B yuk-L.DI\N$"35>O_[m[Z[B a&kHe%|H@~": }_ھ#5;Lmⰳ$J`y#cG}<ߌzGS&ҵ-}uwO}Tqقdaʼ)Ƈˏ=3xik^Sjؕ^)T,Dw+6ňE&x4=LiW iN6;칌fDBH$YT7~.IuHX,`*H ⇸IlK~ ~";O;ڬWlv[a۔$3|QӾ jOGU F.V@0səy_cF* vOm MIw ?fFybY,ѹWT۶U'~>xl ga+x̂15a]זd[l[ϱcO;.u;#ƺouZΝank < L-,Ÿ؟ P? ŏZiUKhwA HrxSlj_QOh}U;KDgfx$U'UX㎝xH&<]Mk7}Q&]"$ cs.'xl{H|x්O_[m[Z[B a&kHe%qg}vú{xK3c#yr6;'_&Y8 @:xÚGu~mzoCmsoF]8Rc% 疓mVҾ|nԼy}B~tUݎ9gkY6+U%޲Imq~]kiaeӍ& .$2+G 1!X#;2i-N<]{kYKxH-\\LAL%R,O\`=ȺoƨȺoƩorX3OQ׮m,sjRp w/!d<+4F+7ȗ|_W)KtiHs˙- Ald&c9"]?/?Ţ-oki+wVgsb$i wMq ((ӿqº׾/?cȴV<;n~#n#v'ƟOTHuxFźmRCnƊEBb~W_Y4? $.Xw1?mI,43'P{[5y`Kkݏ<iWɭie2{:WEݍ}-Viݶ-Ҵd [SP߉t+-/Y-u+PO.gI H̳1e\|/5}{Ԇ̻AHv~,WEԴGǩkR"hA%Ng}5c|0/>N ~"Aѵ_Ū]jW3jG\Y4![mi"<+!UiR)|S?u Zk4OVN0t:86{;YvY,~h}~(uw7,w6H)5Ԃs*,IİF ~:!ϊ\}[hVG }[HA7ca8)3  < KS.'ԴOWG/.e%mc+3Z]"%eϛh?1~w/kVY\ee[w[Idcș?_j:W5] Z5׈`|7%I#$wIz?/Q $uOCds-ؾ%ﴹ-{uw;"[idbJΟgr&Mis:ׯ< oi:.t&ֵ-)Vʼbo*/Gi~$'umsYاmvP/#iGWqxjͧ*m%C iOV1^+$oO?<+?a_Y".nԍfoZHn$ݮCK*<%>yMf/-G%VWIЛ1=T6hV|5|`}FmN2}bDimQ(ȖGm>~ /íOZ~ѭt_`5YSI Ι>0jچidM'KxfKY"H$j?u>n=qmg5ռ Uyq$1<؏>|>v}cT<3-B?xl~9oI#uy[h7[@6'ƻ\wmto\vi.$mՂAog\*F96 8I|Tii4qtZ%lC]Yg6@b8 4yx_ ̓V+ɥNd;(Ś[uo,4+[+Pu]g~_-/nә23+4rQxho<''4D}*XWBdCtkX5`PZkRA&e֙{-F-e1Ʋe8b@zߋ<5Z|IYt[awwg{6TqMJbJA Xmkº7/-=/n8Id]ﮒF7dxL Cpw@|E_#e_k^&i`Tm^$t9i|ͪ=W5~WM4[*mIH'rUL yT'./_<7i$7Lо#̯+,:4kI`v2#5|s]þ7,¸ѯu}z)%.YvL`+]lZ)7d uxY>Xv T}G I#0jچidM'KxfKY"H$j)Ŗ1um7>8_'٬omƭ_X!1OF~gWkUv}cT<3-B?xl~9oI#uy[h7[@6';3 xxmy|'2OZF&m9G;Dzl[imռҼ=q]%O6{ahNH@]\;Ֆxnd [ fK Q,xhns~ @jWb}z?Oº?ҵ U~ݧ@,`"M9C,2O1XZ(EmŞׄuDƭ{Ὲ$,-ͰZK*Co1Y%L 6~x!x+ķ|Yu^gkD?cѼAhfYa`nLq=<{YN3 k"/S~2/ bPӴK6/t\Kf  ? 2cķxP %v[KiF%+Ǖ2. . [mc߳BkW:%=h|5؝d*I(a`lGx_ EtAV7\Wz\ɥwZ{&ߟ?b(d,u(ccAmM?tZcK夁cPYTMbJ3yj;go\x~ /&_&')/jDKh2VFܙhfxG |#<3'5&HT=p.&QgZI9[k,y-}uEf/"(_FE'RI|O֗go-^P.`i2-'g**2\,'9Oh.>Q"'1H'[ )|;jw:W۷_ <i$w1$<4nKS W#(y3[?v|~ۿYe[O4LͰ]7]:hnvlF6+rqSd^2] ᾿kS-vQ|DЩ1\a†eC"n "[\znj>_Iie8̱} 睘Ej$&f2]_|:cx?Z(eq1;m ex">G4FHT@O} HF@O} @tVg"7,??EoX2iYd ?ѿaEf/"(_FE'P|C5d ĐxT4XKUQš*'!|R5|3[$F]RăgT?dЯ uC@Gڿ~M̪(i>Ѿ?:$Δ'/#Ҥn୷p {ĭ"l_gt_ʸwص {/F7faΕ_h?q闗ve6skyi+E4IԂ  EX,<]6u=K6΁c[xŧWiQmj(2H.e K|'t/NJ>v_diIDԮT&,6 3C|HkZt7VVB+=JꚅZ[7~y:nBZ"|#KHW)nu}s_{#W}`cefn4}m%%>bּkR]xv7T&-MAaԴ56HfPc[Vu߀>=ė% 0|iv\^@ٞGG1vYQdEWG=7ᏊtzӬ䵲m/Ѵ{HxMWLMk1]3D_<,C[%՛YK/f,@C]JRVޓĶm0{]DGZnP#E~|0*ټ% Kgw>o{_~:/~#j%dӴ.ou=NY$Eu|giL*mu),p#ɥ#1u?h,m&-̑I̴cZ)ψM~C|A= [P;6_0<Emo]&׮/U-?fo>>pg>npog `_/[z& i ]̺,I;[}>qi$mVm~˱bΑkFlj{] (4F6jJ$()m "W/+NB3?"W/(y_:(|emxᾯx]yu MQt}&E2D-[|=f֧a_$ދ/_EE60 !{dGd8@'[X|>T׮<3-ٴp6n0]ZU*̏u x{Xmƫڭzuƿ1ntX 7WK2|S,LRXc5;;:O֏+(t=Nj]iPjcVHddCl߿'|=ܿFk[+h|V0s)ArmXۀ+xCޭ };_OK@o xJh<)8k{3%2ֱB-rqghE}j>!5]NBV1P~CxW]KYRM:m\1'<(L(=tOj,/;sqhͨ{uxEHu92]#s1|=״߅OO3I~~ wZ׺Г 9h,.MWuc/_!־%Au?o-me~m<8{n 1d>j7!78 Png׭~$ҘL;lp8M,Tw_cxL\A=2JOዙZ+BfӈEyS0 72 }_~+^ ּ=ZOǩ$d5 M. >nbw̳<@33+_"O[j^.oo|-^]HT]&$_k/,xL|r$~fttzuq嵍muMz:Lr^-Alf եRWP6{?Nľ|I+O^HKl`Bzȏcp 'Nr;;:O֏+(t=Nj]iPjcVHddCl߿'k";X|_cU5N=f8-΋f[Ϛ[Jei\²"<+<_>)m3V]^k#ho己kmFzXFk+Hڥ&tc/mf_pN*ѼcϤ[XڬnVP ]ǟ>.]v{ h/LO|ݗ),W#X#a[W?(m{hE&H# IYےx}C[|)]x)ZVZJ"gulL_|=΁״ۯ uMG@}R0ZMLG)s$,&r\$^7xBEƓ^ Nfj;qx̺ulЋ\\lhl{ m+>Fk[+h|V0s)ArmX۸+O׋|OGu?|I2k3^$3k3uj6lhh=ᖈ Wơ>jcUlt+;O5mm`m!i\ yWV>`CxWf}ۛEm@3۫*C̀ῈZ5,{Ե$Ӭ5̭syrrČFƆ>Wޱ_^U_O꺟j7¿h=l~X2Pv,%x}&QKգefԶ Nıȓ@apmuh?<-_?]i`yy[#XI"1 L,B:Six߈?4o i:`|F5,luvktj!LW7\0=wEEi3uA"BծMy,,Zq¤U@=F'y6v:NW]N8LZjZYBO =9ܸ敄%y /όx_[>u s=;h^$_-&HyNX1c _Z+Ek<_qVyKohUhWX'=^7Y ^y,O ,X/ak/ |S݆^8ѧ[.$NKA|:hWb!Lsq/k7^./ۭ y,KHLPC'[ӿ*sCk+ k8OH,ٶef !8Q9ίY_?:M򬴿x2RKK2q퀑a˫"#d</޳{osLG6 eʌg)Fi=|&O>7$ԼO|JD=<7cJ,8⌢yF#|JJOe|Zw|#qE燴˹p~tڍOpfKyA E+4P"W/(y_:)y_+_" H ??"W/+Ny_+_" H ??"W/+Ny_ o(`u+T)tOKSx%X/ri%(!?eۆSM}v?CxFi:-DL"6-L%26+pLaG%t?4 KWšQSW:eԳ4wC%ĨΑ#/"d Mž:4m<MCѬĐ1I'E26.<)xsA@?Ŀ_/EWO5lAZ47+||mfQ * 0KǠY5XUkFiK(_0MmeE]3Zk[Cuԯ˹孌yWy؋+E+3"A)Tk[[#[Ov=PzPGe )HdIxO,T|0߉>)džO=W-n~Ӡ{;Y672<* 2#ǍTv+x@?Yqo?M͆xz!_=W%I| D}5:]MwQS]Mh]faH\Ldu; xvOmf5m~7 ʸS|m+cxűxOlP6զ#=ىipL1B|}Ax@ɢxG|Mf>}\ilfHgM'ھ@H}{g|,?9h׊ʾǤ|N>!xBm+_YtnuGN+IM<6bQh|JmvVux>Ctɶ%6;Bf1i_!6w|W>g{؇VV[gm>S};Cʕl|C|??S|=m<-}R"x[p+#*eqS~sM+υ _.Fi>h ?nc7-mΈ^^ ޣxS5&6tV$fRs~ߍZß 7J5@2@.rAFcs_|YjJq($e%` >n[>&i~@fҿ{fӴO( ŤܤlXDnn%Uq 񥽅φoakmb#[QpfB%XSI%#"X;UcXG|QӾ jOGU F.V@0səy_cF* vO^BShΏⶆ ;(M)P4,ыH |!w;T ~_]g]Cxz;}:;`'4r)iDq>1LħǷ&{xZ:ŭEڶ%x6WG U>><|W>g{؇VV[gm>S};Cʕl|mo NׯRͯHg2tetqg90ٳr#0=;W_4>-~+oh~oN=_/H,M8Xq~լn|c1^[⏋5SBITXXNbd> <9XxjOKmģP \ #* D-$_ "Ɩ>An.G'i `5Dm67s֟4?O ^ji_i'QmbGnRW,"77WϋGWN 5>_ OT-oQ[š(cg$r&f }i>Gm<N3Iru|I64^Ȳ<%sXV1T`xFKuY6:.-?Qqt~$n.a`.d )̍z?x;?QkvMhDw>'%ҵ@VGQ*jHyT]&VmU5-W·uΒsC,`VL;Rke(P`.8~éSh:'&ax}:NO";kw`+: ^E|3c h[bO7˘+(I.kIn$/|L'[CgqpS(Z(Fg%tI_6c|8kyokxV1u*2s:ֳC m3,W֫Kdk?ahF>f#'ڵe\hh^k r'X[w(g hB|S ׉q!hhm8TԜKO|th:iD?/'Y):i,F ̉a@W |:_.xR j\m8SȶHWr,Qk? ??aĚ՜+}6%s4Kx/,554}Y 3ZtRg|,?9h֝g|,?9h֝g|,?9h֝g|,?9h֝g|,?9xO˟ETKQwp2=+3j7iqËE&[΄1`iugY= K:qevE[ּ5>j([Akid7"i&(;*)p]C0?O|R𮿤^#u}g\HR6Os}j"۶źVp_>$\j7R["[e:jiԥԖ 53|If < [mQ<]]m54c}^9L7(ࠓL)tU6~"wſ|E?,,:G/F|Ow/\ͫMqgllm5U* ?eHO.< ke0|Q>[;eX'XQfHgpz?S~-i2]6͢su,Oy [1싯 jg|ic|QH\L1W}efkKdR$̹mwU?xOr}3Jӵ +t,knyI5lp50G'^%HRL⳴Z ;"EnZ#P]ˀ8|/Iv BP_i[MŚߴ3ӴGu;)"M>Spe["PzXݰ8ƨ|Qt,]X^k:r=07OrNY]Famf.5}՚Emt'Y& gYjxwMi~$]:Q3jfͅK;c LTA |D|K/K<PYEu=Cat],ؔ,qȑJѕ3V~x/^u P:5[B?fX|4i'̑1WU>!FW%&Y򤏚)lu@ d]nTd]nUE!_-_-i@5χ<)}$$WSG5̭rѢd ]#@KG/ܮcxPs\EyWH[%;YdIee X6#v?jQ)(v}ᶱ{ ?-ka%.%Fy|,^gI` ^Ose6ZƗj3kr#h*4`CP,(΃LzO ~\~ j_jM2 .L<^vC2y~߇uMCP5/y p3ьkk|;>j{?xGSyoCCuiv| ;XNg̬V=#FgN< xH.&ֵJоii]Zt.ˑCm= ֥=vh d>|3' O_~,G)4mC։cJ]kHt) Wec2"A *̀duNEƧf qcwYR@l=pMb\4e;_xO[jf[!4.tY1-g#'UÿZxš-ׇ- _|"{f =b$8Ǒ>oWhO'].23̬g$$TTvʺ6ݲ<6kafMSLK; [v~dV6c 'b}χßϬj|e^O-'7WI$sn+mF hfdxVO< /I+H^ͧ2HhM]b-W|)/A'[Lھsgmu}i*Ȍ%LA<* gN< xH.&ֵJоii]Zt.ˑCm= +[+Pu]g~_-/nә23+4rQvY xGTO\j׾Oˢ ;ٵ04;jVT #`@|xV'M-hv_-W-i- 0pKy 2X;t{ڇc+BBY,$L-(MBñRIDt+xBS4En-cqK(Wʐ$7{H^Q5O xoC궶(|E]MqeC 1ymGnFXk'-k:mG6Iӭ}d$)m}Hہk}:ue.i Ӈ#PEqsm3e3lHA?erdq?\𮿴u-?>Տ37۟+ۻݫ^4u=|5cWfs7 ?LyIʤ #,qo|S}i6ˣOx;T{:df nm B=bT<*9eCv ]Fؚ-h|?}SIfW~ZiKˡZ7be}n4:wF+,|WyV?5:r'HIxld;e' :7§gBX҄s`T ၯ~ZC힗?ΓWnoyhݟ~60BY 1>)`q-{6_Cvj 뛙wFd3!]u$> Yei>+S-׼?sg 5֥oD/KX4k#_|'t/NJ>v_diIDԮT&,6 3C|HkZt7VVB+=JꚅZ[7~y:nBZ"> Ɓ=ė% 0|iv\^@ٞGG1vYQdEWG=7ᏊtzӬ䵲m/Ѵ{HxMWLMk1ڎ|o~GW~u&_ upi^O tE.s]SPYac/ u;.K}-]bHY"X2FܣɓnWï[[A7 q|^?|7+EmWĺlv%6>H)S%Y#1ۣwU||b^i):sYY 6KkեYRK2.Ud ߂|!x[:r\P> \Ce_f`#=ztFCO#\~|+jgg!Դcgۛ}6 Ʒ$V́QL"$f4h6 yMf/-G%VWIЛ1=__|@B&jv-}N4;i{XD0$NS:0x#sYo4+m}>I.`Op@O|A"xWе}NOîqGr9kvGpI8#iVA(iIYY_ìV7DVX,df3\4qX'UCf__\a\I!pړEʸ/qyu|mx.|1s4aujwN%Ao:.uEX-.G?ك#kR?Yx~c'~c i}Eh6{"7,??EoX2Z+Ek<_qP-C} G"7,??H ??"W/( NfÒK /CmmmZܵ#,FTXD7 D_|ixOMo6隄V#LYV %VFYGvT$ӧR+xRw}_D{mZ@7W"YycMd<[9#7##{?Nľ|I+O^HKl`Bzȏcp 'NA_~::y?ZK~ѵ/GmאM݆3 FF-vHᶗn/ÿ h"Co?q65֕ V;d8ivFD6by] Z7u5yS@kxUі\5c+p8uwKN_kҭ%M]H- [ݴ&#Qi:]X νxoj:ꑂj`:9K%yfi7+$;~6Gx%9Jujmf4mZH9u i]D,7ѩ^Ǩ|6MW@LOk S^0tEK-̗. edЍ3;@ѽ];Em/O]*MkȴjItXHab֍M[ O x?lty? xYhU+FfbaC*Hy 5:bGdFJ'[N,㸋I3+}v_E0Eoѿa ,W<xLҼ`bVP%Qff|.9̿CEk<_qP@OfÒK /CmmmZܵ#,FTXD7 D^+_"O[j^.oo|-^]HT]&$_k/,xL|r$~fttyO#}myfo?%L"bʰY-ڲ2Ϫ=ڤ &:!XrPZxg:_X5iruǖmVWimŚ#Z|?Wz.,}?,,O(:xwwuWQ^zݍ&&ҡxG .ȆٿO(54'RTv,ymc,+Di᡺o5,z(-_݉> {σ<3iŷ^=Ꚏ#<`RI^YM,I!oV'%7%45wtX١VЀt,/eҵ" Ŵ3,7&8Y|=I5x)t?xZׅ|Iiw% .wGyZ_3j2qX'|C-Lj͎sgi歭,1Q 9 +c/* ZL>=tOj,/;sqhͨ{uxEHu92]#s1 ~!Q]7@`-ޗ2il֞IwrE79ox]zI{@֊C$?G?znn"L}8hhp5 |F^Zsoi~+3}/Xx' i6 54,8a<V#6$D&_K_ t֛E 4?|Gx^y-DLoQ'ۦ@ O>g~#i~&t ]6ʲAI-.ʳ]bGE.ȋ O0z8_"x:zύu2}Px*5S*3fs kGI@O} G$VEZ+ P_FE'Q@O+_"H ?P_FE'Q@O+_"H ?P_FE'Q@O+_"H ?P_FE'Q@O+_"H ?P_FE'W$:q]J08vZ+>#MRE `J\}4TGxFm_&fWKSUgg$Y۹~Z\]r,_Jկˍ;RQ Ss$AVV@"k.i~mg@ԭeӫ_?65 know$QߝtϏ,ϭKf\Z_iLpE2NF9|KL~ ߵ{i$ndUA ,&Gc░w)}SFkMi", ۨK)J|Ixmσn45mOLM+Z<éikmԑglQ-gY/'M?K3xOΠoQHo%m\+mALgX$m$HcIX|i+ǾmΛ#}F]:. Csjn,Ćx% -)(FLb\k!;z}r7ZjD:e3RH.1C5%6mn NMӼ-p5+ 5Kjv5Qqs)inU8ɝ}}xCNH-f?3{.g|K4v ;k ֟iFoC{-\68Ďk%#Fk aL|1 )x3FV9lӒ ʟ-*. >%4? \A9ۥεsunYXE1t0۬q #n"@4W7M7MXVg^e 5Q 5Q`=6/]?ɯ]?ɯ‹[X|>T׮<3-ٴp6n0]ZU*̏u x{Xmƫڭzuƿ1ntX 7WK2|S,LRX潡]%&5,wBI"2Je`r\'&Nm4C7usD$Xđ-Q3@$FP |Sogĭcĺ+FobڍdVKL{zG]u^Io>u> p&qI}C[|)]x)ZVZJ"gulL~=S YHݵ4>dk~+\c l,\fmOH ֮d0 6& %4qϹ& |A<mÚ'~ţhP6ni<"AiԳaT $M 3>CxW]KYRM:m\1'<(L(7/.ti4Y3{{\(p]cMivRi~'wYԛ:Ԣ,bH@yEG(YA<>#xZMhL֮lLh[t/ GQ [Ԭ&,?ƲKڗլ!Njn +ĺԮeSKpvL,w}c_4x{6x6 MKdy^=D#+,wk3J_t& ,g|>T׮<3-ٴp6n0]ZU*̏uPo+OoJÚqwx욬S$ ]&d*FcLj#h>5_>lCӮ5FY sYR`f*0 |mLxWvmZQެ6||lju> p&qIg=R3Ku\cmq(a5lMKhYϟs:Mł̓sx_o1_Q54 ]_j!_CFҵɆ;L nfV]x[x?éKIYF$ќ_1X+elVacE Gx74OFmy0D8sf¨bI$= {xp\-}zU"$$U5\b(X,λ;z!ho`[ORtNd2sO%-*O1 ^zǁ~x_WVC|K>/iZ˯ xp6@c]`Cx/7.[ @Tcsqs}M{wu)U_2{3H4R8aQ@'ᣡ?-u-skwmyq4O41wu&?lT 2MF?GEqxkI14Wcc۴s\HU ߚgmEq&5ڮ-?W:%ңo-f=ٔ.j02Z~ |#/eΠ4evk{J$[ri. |& {)4M,M\Q 1$K{@TL <ѣ,bVgς_4O<~ZG7fe;el Y^5g]NԼ5a<[uue_\^%֥w$,\[df8vX۰ԧzlE=zfsdcE۠xJ=TRƥd|7e^x{6x6 MKdy^=D#+,wk3J\YKQ^e 5Q 5QaYG m5웯 ]UIdZYuS|ld';K` 7L6G͜GcſjS__&2lS;a@ُ\ɵy\χ.M5/Q3Oc XҴ58(Dш _-xȻc]8T0x{OV{xĖ7vwze׿k_m[h 3!3%ܩH(vi5}"&]FU$qL"Kˉ^8f]3tPs=v^l_nKSMkx}é2n͆2f^߃+?Nc1 \Ko4BC5#2D|7^m:("_^us*`2eb--4RE!F.MQX> Ng߈"tqF\[;,h%ʣ1..5v?ڗ6ZեS̞V̱*3Xg[c-{gmڻY_exađ I؈c{ڟ5ᶴҼ7d;U˷{t<22:ct+3{~%5Էwѽ$iq>aw1ۆ%;ԼMW6YhtEX-JɠEwYTPщXۙ%d_W[᫿ Y|Ok[༊r\t'IKK|lټݝa3Zf|TXMFKK5ߘ4G.I !vt=O(о7xĽ/xz5+?[մ=gSl̈4L[3xyёʹtmQX> Ng߈"tqF\[;,h%ʣ1/D"nc0߉gU2[G {r$u+gj6Js{3WS%saj76V %<ȐJ0F;a~(?vqƭ6eq5,L [[Kq 9A"dݪZY[oaviH9~xSF𕯅 j d F8A6L,bYy+DK5 ܲNe^M+b\3n''>ubOH}Wlw36CH}Ǵ@SOv%<7OcohQ7bkyx[*AdA |*m][Zܳ\^ gV$:/nAFb^ap@pM@HO 7nugjzdWimwq ev5OVFA';ߍI]YYiQYi?Gޡuv lveLHyp$sd=e,6mjrAs,* -)tʼnWb;-~ >G:\Ggakd=G߹$wITmmەHwAS|wMw:^wct]N O/$ݰmzhkG߄,ӵkM?GU֞inf"q[J!mE܏)2ЮdCÿJxEjAIn׶1򭤵 )6P?7|7oKI>uLM4oqh,3Z$CSCkj7?csl[TFBiU_&"1S@ ~$/RCu];̚=ȐD--c%fUY]CwㆶtPqWK[-W,ЅKbu) ͱH; ݴⴵ KmFy$'C$4Q0(3'ni┫,HŤ}о "]Y+"B ѦfK8dXzr`<_Vu fB tI^5n.O3Wz:w$j/\N䚷E]Rнq;h5?cM[S^4y 1ӿ&E`ԩj/\N<_VjT5?cMfB tItQu5*y 1ӿ&3Wz:w$պ(<_Gнq;j]v JfB tI .jmZwLQ0 #8#8&+,oBV-y"w?uQZt;bIBCNÐ:T?PӍ?PӍK3]DƱxH{6WZdsZ(:=-ӴY5Ha+foѼ=iis;F9˶X-e9d1l, _0u_z5K˵)Y}{}CϵKۙ5c.l-06ĔTg[:,%0h꒛kii[٬䴳w?ho+ y+#Dve;2%5ъWR\}B5^2fc:0eW c$G菥T:W\yK<3G4|(UgWCo?'u%HS,.g$5TW; W1/#ӴC[nX!kiiqi7amn$.L@-S.y>xm%7{s]:푙$O-KXmS$]¯ GhZ?,i&M(hD/m&|Y7G&f6 #t.oQ?hZG`ҼI ]ڔvwSiڤ:Nta-1)nTE<#uA BKZKKҩ=J֫j4@ƥE>jSCWrh0.nNiAڰ[3- {)-pg 9|Η,| NS6#>ՖiW<6{Am:5;ڴ9ԥy$ld/J^Ov_IxZ}ke"dݪZY[oaviH9gis&-u+=1Y>m[e[{gQlad#=BMu NSTMJX𮋣:n&y^ *ܫM}2IX] 7lG)\}KNPkOmLo,h؅ulnFҥW% EꝒl]7k-o!Vi}?ف jV&HGѸRX4 ֥jvwl5.݋4YӃNȖO!IVICȑ:mn >9t<|Yw-I>üLd%vc )?hO&:,Kͣ\[>e 4QdX6fĞ k. d+HICeV+ADGҴ(d0#V6c& y:/o{hcYֵ>{.ubD[h-rh4M˙B|xgRРŒjem~e&kĠ,BU8WqaLZ ]#[hge+W1GkV,1%*U xr_KWe#_yO?yVc >OeO&e}DHD4Q {go NTtgнq;j'TqG2нq;h5?cMPß6?*N<9A/c̿j/\N<_T?8 K>A/ 1ӿ&3Wz:w$N<9A/cf7YbT`ʋ$n!рe`{ ;Ywn$dP}> x7!+t?7`m?Ib^O$ ZFќG_.}CN7Th_.}CN7Th_.}CN7Th_.}CN7UZx! 25?3R@cڭ@~ѐFUnR'AmF]Of|g%\cbY OuދfoXZ6搷ȶ6y0m͝jzu-[?,-ƟIg9xXeEY̓)sD\ Iai?t]U֣{ۋ{DYZb#yQRmb]?iۏjYZռ?ךWZ@p~O_s[[^}ec"Mua nm"sO+o[ͥ߆ӡ2zڐn7f <. ⵯmU |o[Om4< s\'f"w Yx_?%5}6-Aqf7Kwvy]ȅL$P#]z+K?8 * LJ??lUxs_Qf6X3xNkφ4SE[&lrH嶠$gG}JѮ,| .cAo Kpg&>J3`G&%[)iWgoC'b =Io0Ox_x] %nla׬ЭWWRIt_0HK0Dlb{khwaq+7mttbE$oxGWGº:2)yel`nn4.)a{kUE*w3M]Naῃ?Q=֎mkŵ$V6Vb#HYB[E$Yd("'e _#O xx6^otCeiщE2EsU^tFH#I`5|񇊦4Z}7z{ºM8OlG:}ŷ$2&|]@6πYl=$&=J_ueK{-V[r4R8u;r-://j~ƇqY[b+_hֺyF1ܶGgso]UMk{xKIau*Kv2Y_cb*=,i?4mz ?x?6ngM<_7^Ey3& '||>(Ïx[Ѯ6P2.v7Z]%sONx包a rppA+2by?x>x7xw][AsKnQ"*Wp#??)^'ً_߆4N|k;pvNK1$3ı$k5JVM14?7`m?Ib^O$ ^CȯiKz% 5J%$<𾓮?.l-<ZA1$Ґi FW *k{{M2 'Q)lF$35ߒ`(NᆇhE*kE[~Z7hvYۃx$rY%f%$^oRn赹? <v}?h:~1.uM21kjBu$(,2ֽgO $Ǘ/ҽV'=,i?4mzgM<_7G3& @<gO Ck(?{YD!t=,i (4m ?x?6ns?ckk{[蔣\D~^%+>t/KSm6wZ>wKb_oۻc<~I4*sITةȯiK?PӍ6QȻc]8U>] aSI/\mê0 6(QFrI'qs)7|Cyxk Km!!"Q$T%3ZBc-A*lҺ{s /?vK.?# j\zZ^IZTv[UԎY5,/NwKմ]V)ߴ,d_1+pq֗4YLYmvWt78)f"zǓj[ʼܮ>|!𽶸 <&\adyfU5e2Y6vߚQ}?}h0Q EVj?쵛k _᷂:Η"^ /2HVtp;_ ?x?6n+][֋C _mekƫ{YD!t=,i9_pr_mekƫ'q>y&[f[fbrI&NI53& gOc晾f'R)`x 9cv>Wtb5 P `_gM<_7\׵JiQf&" ,U x7!+t?7`m?Ib^O$ W إ7|A5Eø ן3\/ۦ/?C{ƨto{u ן3^3?WS4&,1wQxNI$$>7|A5Gۦ/?C{ƨ8ٿgOW7|A5Eø ן3\/ۦ/?C{ƨto{u ן3G,;^pn !T^a,;^?ya5o7jM@_QyjWi}uqƨ͸dgy4εqwe7KmxKFAv6d F~7|A5Gۦ/?C{ƪm.7^E|M2]ۦ/?C{ƨto?{_ 'YR.,J)<&f>]ETton i> E OXп]nm:{ BKktd*񸵈`yAiYϣ$S^aѮByEXt G4ڻbgs7ӛ9I#vѢʱٕ #6Y[|[|?|?[TSs\pZj"g$z?Z7g :Rc+^ ;}NH:a4=٠Mԇ@TYdo>y $^],oBUCv)l!п]n8uWkm?X$xֺEіF(:FTᔎPjM E Evg5}qgiz՞EWRiw/C0b1^v*zدH/Oj5'VkV/#U05O:nI-5 ]"\aȇQ;3n'yl,x'3kkZχ.Q+kR${;2 ݞNs|XK۟kWVYZ!j D) 0.c8ujVo P-<1 V6io;hZk) /YXm;Yl.8Iqw6Iii&N,4OE)<;Y3h+2ۈ[5M Wp9?f4 [J% MsO4n䵧Gu-6]B±$U g_n]_PѵiEvՌW]Zžw$QgvKq4eKYk>ִoKuiiglE]yg1̷Fo% ]HxrмOkδt)``;_/.Yd53#u? xXק6yi0IL[+&\18+5=QӬdѵh%K8[f H$pIi`3OtosռzivVk hs9cP2I'Z_xs_Qo /o7jM@_UN<9A/cß6?*._ton xs_Q LJ??lU] >7|A5T?8 K,!T}o7jqG'TYvۦ/?C{ƨtoPß6?*N<9A/c⨲M@_Q  LJ??lUxs_Qe n !UCK?8 ˰7|A5Gۦ/?C{ƪnHNCA --Rۦ/?C{ƨto[Rۦ/?C{ƪͭgt70qct:Wwuy5k}SXMR+gԵx93%0Ъ2UX ?:+tyWgϛvݳ((=sᇉ}{zt[_++=2.MP k*o9 _cF ~#Լ+ex?#U_[ImOiڅ麌ZLF۰R<8OV/uKnK?}I+$]1e$?ݢ9MxxE4ZTieoKrmN&@+D̡RE\O0%qtQ|}_<}=oOP'mM}oa*q"%Qa jcvv!]NO~?SKOj,mm$9⾕Z[jFt̪۸Ʉnùx+iESZA1<_Gнq;koS²ชHa%$Q"9I++)AR";ZηWhu $k"WO$ ^CȯiKz% 5J6x[]jڎw};jyvl'h[%jy>#x^/?dTҴ_еA @HmKIC9~5#mGU>.GamZ]:USZG6xz OKxb]Ã]s.K NIfWZm)dk* Gq$I ǂhzET(|'OU}\—Ċ؅ Hf8}k?G8o[?&uֵY:iӯ5=Ke}tb8Q?[E? "p'Ï'5G(O-ko"j("=;#MmV׵J+??)_^ }boekMyYw\Dgֆ׵Jt/KSm6w_,WI4⻟ k;o{hf/v7y{m1kiu>?7`m?Ib^O$ ^CȯiKz% 5J9l!п]nп]nп]nп]n'ԵзEsk:fiZu֡kuqD}kyfUcbG˂q-x~&񟇭7{)XTlbN'oCPQYO4{gfe'.]nfIryo685@Q@Sw<#5{M?VP%5&g`kFvacE:'$ܯ17~/%^kѵe)q\H-PΤc'־S kA&IkJ>D{/Z?}h0V'(O-ko"Q?[E~=/IQ;_mekƨo+_5X? ?G8o[nC:]ѷ EVj_Z/ 62U ? Ï'5GF'D?_mekƨo+_5X? ?G8o[nC:]ѷ EVj_Z/ 62U ? Ï'5GF'D?_mekƨo+_5X? ?G8o[nC:]ѷ EVj_Z/ 62U ? Ï'5GF'D?_mekƨo+_5X? ?G8o[nC:]~=NX`]AB`!9n/ Hۨ>0 mќgld6׵Jk0ĶHeQ=sL5-x,g6e5)&TҢakMuiA as*+SO6E,Ͷ D^YvU;>mr{}]k^`Xl>в}Nf9&KOHែ}= [ԥ[Z CgS=+*h+o^Ig gC_*K<`k?7frCȻc]8QȻc]8QȻc]8QȻc]8VOkP|3xcY~/M}3PV庐kڐO ad?J14,={Ty[i[[ }FF;\ܕ je*ǘfxZYt!iS4@5QK?Ԣƨ޶ ?X}~gO\D~^%*J/1 8 ?>F[}'Ki+7FfDE@϶ sg[?۞k wK?_nҞSOomGOִ|7}j~5m3Uk7 ?&d}Jdu?4}f9$Q?7`m?IbguxFi 6Y@ ʤH*9mE OX]Bvq["%}V7;;>oټ7ϙWSȻc]8UOq?M:{V'YcR\S:7*(TW1db?~Gִ?(hZv.]Ϙ+336(xoY:Sm %b1K]ܩhʳ$ΌJ| VhT$y$nn%Kku]Ffauq4KnP(gܙ4$[`naOq-̱FyRUc)nb@@OyR0(w|XxN/m|[sg ū^[*B-(HeE93u]I$Ǘ/ҵc/P_G1_(u/Hj 7KB%P‡R(пCE _?Կ"_c/P_G1_(u/Hj5?wZ5ޛ2%w2:v?]i.nf59%g,9%I$IC_*?g?$o~?]q]" ,UO@п]n>M׋/oo|G^iVzoEhNkqz٢Y$VN',!hBvq^ ,t 4%/弚❮kܮHJ xM~v߂e2ԭkkrVOx!_N_4JZOrC\6KͮKGKClF]Y>fhv|ۚ9N7gj;ʏW#Sq1%A -֑S5I ,b.`aStQmypzu_گD޲%g %CkoaO-#joDeL>f펛jOO,<_}um VfeXn-b%&(W{i–zvN/m-nYtD %$VЂ_qu5Ool, PfWvc bfbԴ NGQYX>OzC]&'/$"9D"1lΧr|!=wچ.V?u[X~гf@^1~WĮGZ"=hۮ|eCZۛ$3@2jPF䅥d >7|A5\-|[{o  詪Zjݘkmqqq&ǺM3+Yx/ W'/_>!]>=GIMԤ$-d[ )yq\2؞ko7jM@_WiYٿ\R3=Ԑ-z,"vkf[%B3f^W*Rܸ & yrīm57^^;d=!Us ,Oq&ˬ\a>P'^Ix(|EC_4Vǣ;MFOehkYЪ\L яy}W5 EK©iU چW`m;2cZ+IW?o|Xſ5KYhm},Z2nEmi@r|1 {tZiͯFtx=*糹I<}M>7A ^ox ;oj{2j3\^aA&gb&kQ6@ֿjF]8Y-O_66 [nHĎefZ1]R 2&d9XO wG-y$ƾI_[s}WñXT-,_k Y{kor6v١.2<UG=WDAMu̗q:GN8כ^ Nh7Aj/\N<_G3G ^ox ; w\нq;h5?cMϰY-y$ƏZ+IpfB tI^4s>dwW??k@'{5y 1ӿ&3Wz:w$sU4o(MXW8t=?+wF4 ls3""gg[nv8c'o,,ݬ7qHE 3Tu Ll$!!FY'Va*U_3ο4ЩtkhSG g>!jxsLVGæ8mK3If!$o"5+RׯG^-_ZE#=H#i/_̵7KbWa|x6:6jSHl[y2fRp$]i=ZC%:Mr2xZ < ^]&ibkiW=9[HMiv;we[$+Ҿi:ti4{n;khm<@93gsԽv=Ėv{4˗_E!2u9/ nyJ=K_0]k~uus%'`Dg,-Ab?>,xIxWN{9]FA{ ŖuVcT$)ڻV }?Suxj)u|^%?mg~fi'#oc/\_ޟdxoƇ7m{{,V4Y>|E i|Ʉin~E= }?Su?%sJ484-Vi6BD@gKePHWgsE[xFQ?Oⰰind:1Xy0u"F̩䅢sӿ/ n S7_nǿ v+5+WM}G+F˫Ak1v"y t^I➯5/hW'] 7kfE1fD|Yw~fB tI # J?yC<|A?3Wz:w$j/\NwY/(珈?]'"W3xNcbAq6t@'Sy 1ӿ&3Wz:w$w{Y?/ n S7_n 1ӿ&3Wz:w$w(_c<5O?/ n_5?cMfB tIq:4^"u)$ZMr# uYHA؊τK<`k?兕#0BIȠ}k,oBVݙdy"w?uF"w?uF"w?uF"w?uYhk:0Oė c`#}8tdWȡn>|#uZKBӔ%!XfظM|:Lc㋛SkHdp Eqld/~-/~̲}ݯk=R?-Zo0ClHʒcC̎c1I3-晴Gw mٞVV#n]EQ#ֵ7/!Ś\D-6(`Y2g 1 V4e5*UK_ *RobKou4iMuր#9wJba(&?]il5)in2º7H,/-B}HFKa* 6f K~ay~]i3&KYkvz Γ JP;*6q{w{i}5~ޝJ!"cUg1EtYJ1gEo _h:c鷱G m:;Hl)/F*0);c&=jy9.)&fslm^wgvv0L"K]38A# |y| _&<;k㷴k#)6 ּ EZڲK9[S|>^im)XΣ=Dr.)LL%V̞b'Tq[Zw;noZz__M, g{z Γ JP;*N<9A/cß6?*F߳U czu(!feU9e*5t牬;/x^[RN> J n-úM9ʞ9qG'U ?x?6nǚWiÿ<Oy/rfOf[*4m ?x?6ngǂx>)雷mOF79Η_ KƗemqkZڨ%H"cI@#UF!#EgM<_7G3& 1Vo \o?7.R%$4&c܇hh>)YF{E/aK+fZDKl Llk'||>(Ïx[Ѯ6P2.v7Z|&okȗܢEfUpF go2z?:ӴHCmۯ#&tݾWifgfc#[sf {oG=ݔ]^ ķ6̳č4SҡWxȡGwoR] >"u[+H5H%gk&'l2M$?4ENpLs_i[SɦjBQ[y%Fr%ݼ~ʸuO.G: 30'v$E8KXLd}ڼ6 3No♏.lb M]"i0wXf๞؟?L `Tפ.Sv'ܬ{B.xs_W]C|ּUxoMKZ4Vi?1t#+3Lٸ#4m_]<K?8 X{YD!t=,i=9xs_Q LJ??lUz3& gOsO LJ??lUxs_W=,ioi_~ɧ8Gi oe "hppHjW:N<9A/cf7YbT`ʋ$n!рe`{  EZ'}#TWMn !7ieVYv,F-rcq,`4}Myom>O;[xoM4ɺD>o,8aSI/\mê0 6(QFrI'qTՈftMau cڠr5j`5Z?.(BBuKK6SŲYMR얓>Y$'x#WHBaazhq"O66!^kip<y>e}P\[Imuu+M8vIUc< 6T|)IլE"`X"::jc KU%_6[]??ya4ø"^]=N.zw<[%/i3%RN"}׊9et$& z'›_/I aN}>.-;] 1GY⅚?Xw޼?azhVgKYž$Z^)+V+㣦V;hn@y^)UeX܎i-#\߇t[Ko [C97Q\<g?Qe"Xw޼?azhVz}|>9xJž+^sml = <.A" +Ve> ן3^3?WS4&,1wQxNI$$IKh0x3Dy1kޛiomgn]If$fbY$M{׵J)gOWyGEwx'F𖫣6`P<{y(UM9q_68c<u8oamRMNm:j"g$z?Xw޼MXVz}?ya4øVz}?ya4ø"+?azhqD9Yxc㗄|)6L P.N efS<|< oMH47ɶj.I$K31,KI&|2I5ffbrI%$3~Ο "x$NYķ0<FEd}s?ckV+cĂ8Tf@T 2p3Ҫl5Mt&PCq6Unjbo)7 xJ -_I޹ۇUV`#mDPNԉ+Wt_qto j3jV e ͧ TәwUa?`0q??f'Ey,;^?ya4{H+=>Xw޼?azhVz}|>9xJž+^sml = <.A" +Ve> ן3^3?WS4&,1wQxNI$$IKh0x3Dy1kޛiomgn]If$fbY$M{׵J)gOW7|A5Gۦ/?C{ƫÞ9&c7|A5Gۦ/?C{ƪh>7|A5Gۦ/?C{ƪh>7|A5Gۦ/?C{ƪh>7|A5Gۦ/?C{ƪh>7|A5Gۦ/?C{ƪh>7|A5Gۦ/?C{ƫl/>o?k<yk9;I"Ik]{Ejz:-Id@OHIr|2vڦK?Zt]FQ屒+?Q# ;Ston [O}#7Ѕaw2vO6nBy+j翂_{漍8)%yoQ. v'Vhuɧ`Կ >7|A5Y/s:.Cslc0>~)QCW|?=^K-LM/M}|m6gįkh4/M70˧k ΧrBG:D4``C#Ah,'%ئ9>*f'XRv{أd|Cxڽn5i෎;)\WfdJ`0bTOgoW$SvEOE?*I2Y]I}\>$}ND4'K)bl71 b3?᝾&_OJo? 9$ϊo-xP|[hrh͑ns La]! &6-Y/#jn >IM.NvPyd#-単ϻ;|M"G3+)TrH9ßWn>z]}^_X%z Dz O+!S*!$ڟ|xK]^fZYWWך=hasȆBH#|vvEOE?*goW$Ss#t?x:UzZQM^Y%kT[o)q<)`A$Gx}5}"Wg@摎ZIgw=1OrNM3o? ?᝾&_OJ]Ù з?_?[_7I 7UH%Q>xEo%ta-no? ?᝾&_OJ}/B߇Kk[ m'3+)T;|M"G,_=зOgoW$SvEOE?*Y ǰz/ ~-Eo%tH%Q 7Ua_?[_7GB߇Kk?᝾&_OJo? 9g/a-n=;|M"G3+)Trϸ^=[ mz/ ~-vEOE?*goW$Sp{ з?_?[_7I 7UH%Q>xEo%ta-no? /~|JDm+g )%OԖwOa-n=3_j2\ .8|,*!s(8$q]w5>/e3jԛBBp wJ6W|'YY脯!W%{?D%k CȻc]8V?j͌~dcYݑ 0HFCZ?PӍsמ*y2^:BK..+w$L_$GTGЧvX]A P_[M+\#YXei|?to_{ۻ:kh_Mܿh$8<$}@//ܚV}5F`^$\@n2NO%C/fi=S]Ӣ=$I1ePFwx7~x~/_}*{xuA/Lj3x~ sF;_YFOә%I~s +n 'p '3mljX?хYnӭngNhG(e6d,f\ ՊMUME OXTW%#W6dYW*Fg 1ݲy}vO%ָ[iTzy~i=+g4?7`m?Ib^O$ ^CȯiKz% 5Je"ⰸq*ín/đ D.|1Q~c_mv_64|W$VZ֑/5le@0wlW_ 7Uh<i]˧Z-3E$dB@bHh,U?goW$SN] öu5uD"EE.#($˃ԮAU4?7`m?IbuSC_*ooWNWUU⿱LJUӕ{UvQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@pײl|GhZ0ok2A$O, ઑ:W uj}_Yta{;y. M߾+mC$$ `E>سehW%{?D%y" ,U x7!+Hnɖ E]O"_|l"Wbif寑7~y"w?uV[S}oKcJ5h[ŵY |o ȡӾ2OxN6w[mB3{g-e;x&Kaѭ}'E0t+}:=#K*Y_g !$[vy7m>AC jO[Ke*UЮN[%_5OyTǛ`H_,|ڽ߉5m_\E>Ko: VQKC1$Ig3D{+(xN Y?Ή 7쟲dkG|y_l7|+ًIO}?Ϗd?|&h^æhw68YLkp LVvbՑNA^C? 'ҙ5mk|Y:\_BY_n` RFpÿzQZuSC_*YUͶ[ɢxf,_+ӶDg dqM {wŧ_xuGq}3۽ʒ,yڤRD83Wn[;ton y؎UySn[;ton ]w=ryEۖ+7|A5Gۦ/?C{ƨ`]yܷw7G)oM@_Q 99Ws-MQo7|A5I@]N_~*k5P[=ڝl 3 qx;@<+:6jZmmsm&7G"nV\8=_M@_Q {Zi4?7`m?Ib^O$ ^OZOahVPmsc̅^7  ׬|'YY脭!"[#ƴ,kgƒ) 0r!{7|A5E{4>7|A5Gۦ/?C{ƨfۦ/?C{ƨtoQston =vn !TQGA!T}o7j(h9}o7jM@_QE;M@_Q (٠a >7|A5E{4>7|A5Gۦ/?C{ƨfۦ/?C{ƨtoQston =vn !TQGA!T}o7j(h9}o7jM@_QE;M@_Q (٠a >7|A5E{4>7|A5Gۦ/?C{ƨfۦ/?C{ƨtoQston =vn !TQGA!T}o7j(h9}o7jM@_QE;M@_Q (٠a >7|A5E{4>7|A5^{KktHd*VAh1QM٬$$If!vh55#v#v:V F0z55/ 44 Fa$$If!vh55#v#v:V F0z55/ 44 Fa$$If!vh55#v#v:V F0z55/ 44 Fa$$If!vh55#v#v:V F0z55/ 44 Fa$$If!vh5n5#vn#v:V l4405n5/ 4af4$$If!vh5n5#vn#v:V l05n5/ 4a$$If!vh5n5#vn#v:V l05n5/ 4a$$If!vh5n5#vn#v:V l05n5/ 4a$$If!vh5n5#vn#v:V l05n5/ 4a$$If!vh5n5#vn#v:V l05n5/ 4a$$If!vh5n5#vn#v:V l05n5/ 4a$$If!vh5N 5x 5p#vN #vx #vp:V l44065N 5x 5p/ 4af4$$If!vh5N 5x 5p#vN #vx #vp:V l065N 5x 5p/ 4a$$If!vh5N 5x 5p#vN #vx #vp:V l065N 5x 5p/ 4a$$If!vh5N 5x 5p#vN #vx #vp:V l065N 5x 5p/ 4a$$If!vh5N 5x 5p#vN #vx #vp:V l065N 5x 5p/ 4a$$If!vh5N 5x 5p#vN #vx #vp:V l065N 5x 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l44065: 5 5p/ 4af4$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a$$If!vh5: 5 5p#v: #v #vp:V l065: 5 5p/ 4a}DyK _Ref497012660}DyK _Ref497012660$$If!vh5n5#vn#v:V l4405n5/ 4af4$$If!vh5n5#vn#v:V l05n5/ 4a$$If!vh5n5#vn#v:V l05n5/ 4a$$If!vh5n5#vn#v:V l05n5/ 4a$$If!vh5n5#vn#v:V l05n5/ 4a$$If!vh5n5#vn#v:V l05n5/ 4a$$If!vh5n5#vn#v:V l05n5/ 4a}DyK _Ref510415720wDyK  bkmkGlobalDdXH  C $A WA_CAb=#\|,Ds n#\|,Ds PNG  IHDR(APLTE unE u[ xiQ Q ..''"")zbKGDH cmPPJCmp0712HsIDAT8OZ!`<_YZeY-gߓfF~sx0ᏻ@1P!-%2/X6Kè2RrSkePxNI"HL8^\YW.hk*/%,G1qk'!Y3 w#O͜G6 @Е+8k$SeN@J.,g^%,g8g3zeб܍d0]@ҳrCN:ؠәWm W,t'=dA>IENDB`$$If!vh55#v#v:V F0z55/ 44 Fa$$If!vh55#v#v:V F0z55/ 44 Fa$$If!vh55#v#v:V F0z55/ 44 Fa$$If!vh55#v#v:V F0z55/ 44 Fa}DyK _Ref497012660}DyK _Ref497012660DdXH  C $A WA_CAb=#\|,Ds Wn#\|,Ds PNG  IHDR(APLTE unE u[ xiQ Q ..''"")zbKGDH cmPPJCmp0712HsIDAT8OZ!`<_YZeY-gߓfF~sx0ᏻ@1P!-%2/X6Kè2RrSkePxNI"HL8^\YW.hk*/%,G1qk'!Y3 w#O͜G6 @Е+8k$SeN@J.,g^%,g8g3zeб܍d0]@ҳrCN:ؠәWm W,t'=dA>IENDB`$$Ift!vh5 52 #v #v2 :V l05 52 4at$$Ift!vh5 52 #v #v2 :V l05 52 4at$$Ift!vh5 52 #v #v2 :V l05 52 4at$$Ift!vh5 52 #v #v2 :V l05 52 4at$$Ift!vh5 52 #v #v2 :V l05 52 4atDyK !_Performance_Point_ConfigurationDdXH  C $A WA_CAb=#\|,Ds n#\|,Ds PNG  IHDR(APLTE unE u[ xiQ Q ..''"")zbKGDH cmPPJCmp0712HsIDAT8OZ!`<_YZeY-gߓfF~sx0ᏻ@1P!-%2/X6Kè2RrSkePxNI"HL8^\YW.hk*/%,G1qk'!Y3 w#O͜G6 @Е+8k$SeN@J.,g^%,g8g3zeб܍d0]@ҳrCN:ؠәWm W,t'=dA>IENDB`DyK _Interface_Installation_on_NT$$Iff!vh5 #v :V l0,5 4af$$Iff!vh5 #v :V l0,5 4af$$Iff!vh5 #v :V l0,5 4af$$If !vh5#v:V l4054a f4$$If !vh5p5#vp#v:V l05p54a $$If !vh5p5#vp#v:V l05p54a $$If !vh5#v:V l4054a f4$$If !vh5p5#vp#v:V l05p54a $$If !vh5p5#vp#v:V l05p54a $$If !vh5}555s#v}#v#v#vs:V l0 !65}555s4a $$If !vh5}555s#v}#v#v#vs:V l0 !65}555s4a $$If !vh5}555s#v}#v#v#vs:V l0 !65}555s4a $$If !vh5}555s#v}#v#v#vs:V l0 !65}555s4a $$If !vh5}555s#v}#v#v#vs:V l0 !65}555s4a $$If !vh5}555s#v}#v#v#vs:V l0 !65}555s4a $$If !vh5}555s#v}#v#v#vs:V l0 !65}555s4a $$If !vh5}555s#v}#v#v#vs:V l0 !65}555s4a $$If !vh5}555s#v}#v#v#vs:V l0 !65}555s4a $$If !vh5~5|55#v~#v|#v#v:V l40!5~5|554a f4$$If !vh5~5|55#v~#v|#v#v:V l40!5~5|554a f4$$If !vh5~5|55#v~#v|#v#v:V l40!5~5|554a f4$$If !vh555#v#v#v:V l44065554a f4$$If !vh555#v#v#v:V l4065554a f4$$If !vh555#v#v#v:V l4065554a f4$$If !vh555#v#v#v:V l4065554a f4$$If !vh555#v#v#v:V l4065554a f4$$If !vh555#v#v#v:V l4065554a f4$$If !vh555#v#v#v:V l4065554a f4$$If !vh555#v#v#v:V l4065554a f4$$If !vh555#v#v#v:V l4065554a f4$$If !vh555#v#v#v:V l4065554a f4$$If !vh555#v#v#v:V l4065554a f4$$If !vh555#v#v#v:V l4065554a f4$$If !vh555#v#v#v:V l4065554a f4-WDd>  C AbV +=`tgwV+noV +=`tgPNG  IHDR bv(sRGB pHYs+VIDATx^y.IVabh ̨̢#Ym`7Vh:`#>:w`f@iDqwCqy˗KU֒U+n'ONV:YUYw>= 0@gs}@.//OF V ? 4 4GYVܹb 1tv[ MďѢ.hR7J @;\cHKS"I;~'O*?x{nyظwUڵh)7 gggF͒9 CCCFd8a PQxcNIP1TfJƒhP # ۥ $ xK_9ժ* !%D0w ]ySOʖ~ɧXc2O}VUjg|]>u6=]O{'MT({PO wʇgu|_ %&mB'l`$ThTha-i?y$3J@5"N|;e[%h3䟺ghQwݼ_6ͫ_^^JÃ_{" lnY;u%lG I)eEbnʼnש*bzNK)4%f||6Yv϶V2't緽e3t{S~/}'w^_d;nLS^i[3l">eN7(T W- pȄ n.9n27e-M6)(qB| aoznGS ^hlп[%%be': hXJD*s^n1 J@7LX<Vǽ= ZJ\5^uxKN| 샀a "sݧKC>'7J(NF7W ^GbDP-~lJwJ^"|.LٚiD, ()"KYY%%2TTL\[FuCK%%dTa8=%e]ƋU40T檄WU.,\*Bو"%p Ljums,EDJ*⡢2P.ʈ"уf :<2L$T^mr*y7GS>u/L% X,}iZ~*P?:~P R#D yAH^{␒aVaˏrOnE#GGu8%JN [Ʉd%pӬmlbmIgh& {L>BȘPVqKTv*vL} YC: L}1;^ha 51G,Jd5zLP! e&$Jxک5G9R Q{){&4*յc WwﺠʓH7լo(rw[NlOllk:q.ks@(%pJogrnh)1qBE9g$!BJ\hE=@ʯU6W! ˞߲K  ij% ƷW, YEabG뜣`鵊q|9P-N6 GPr˄,hY|(&N[7 dS$CrB@wYI|M@`tP]bA2!D-;#^гO?TVL(ؒyFD' V,uՇZCjmřj!cw@e[8Z}WC֮CG+ ,S f"(kz;q*}Pe-_;P1P}ZE_y.*wьV1*>]O⭗ԉRvhKEG[2w*cάxbk:dô-辞IwRd6pxi@+P!l ֆ0L_*MvJ{h1 Nj*ت+";Պi4c*WzoVga ̍*y<"%*tbDKL@myD-: $qd1C]pb8 %DpU'tz(I\ Y=;DIbѢk+BBBwQZwQd&vKd'C?ʌjAX" nWFwN<ٸLC  T:M}\H%K cQa*j @`,BXr pwkBO,%Tw0Y>;a0ݻ}_k@J߭}Ps@}HBEI`V @X:UB/a- *VN"@_X @`P!/Vm^E Ў@F;ҍf!8+e ҅4Vgb{8j^DoH`sB{(S*=pa3VG𣁹\|/oΔJW,h`yG\pck@ ,Г5Ͼ[=&MqMM5=UBIC;Cdڛµ-!=.mȫSnxԉ%lUE<2ao?-څԘ(%V$jsAmrh/aϏZ#[dU I3 sT-1U*jMo%i͵Df %6!.f&!/cm#a:!E`s*Q2snG[EIuX@Q@82Pqd@@ TE @PA ish4) @@ ނ|SOyPQ6I *6ijFm-x1b@x๝"| wb@kW*G@b^ f%(^D8.&6޽{r\ *YdxPq}}V^'TT'\i#p~~ОxfErw>Top*Џ=, CX5VKW&xY hI 7 g%TLgқe%NHlp?^X%,F@<|E;4N<+{G {\f}{D̔U@99nNXס» Cy'/*xJTٙ+OIZrl|7p%Oƥ9S86.]U:Hg!{t ٪oʳٿs{U!O@y״v[v?@Wx)!#G5-(і,jKĐG[r2*D b]~;޽;{^4?ACNڶQ6$4mUMIY4=#f"=U-BxVa~h>/EŬBy@P+Yumo J׫u5ʪ[RP'/DnwVʆ~iaCEU ЄEJHʏe$0=N͖UnAV[įUNw֝vU$:\e=ՔD'U5R}yfWtB>YBBvNdULl g"`ݾ~*$*hpsSMC8rv[XYVgƵRI@\)_"b '2F5qr*HBMjr"j+Nwb1uhAvQB~PrY݃^@LU ^:wP @`?%-z!+_˷]EDJ5aBh%duW~q,I*3D  NUݢ<i:?3\T缟뇾|˽L=~q}--={|3m5M_7:lE []4>zQf% 63UJ lZI)DG?{^xU#?__+'~lB}lLGOwt\Kn.Z~w~ o{~}۳}~lV/'}O4l"7}~wfE<-{=~{l=_n-x_Iw([lӪߢEUqM!T6oOR*ȟ?EXMN '~< (_`/{ixOi47 ZyWAߟyªkN?wO&_^x۩.|>>-'K>ͧt祟~g:5핿+/;;wݧ_+M[տ/ʗO _Wdۿhk1*Gs/wDXg4'/M{BwW|f#*{U(Ѭ"9X(}JL@_fӍAz'`'Jkv^yǮU$U~$"ULhV>Oӡ*VE Uk˕l &Lq,F;1#.n b4fzZU}]ze\&䲶_뿪NTA`VMM٪[5P1ۼ~9].k?CuɮUemGYeJf'~'f2%;P?絧zY[S\B3OQl*dJ~kzY; (N@emK0MJ_Ő Vf@‡{lG;\h81%e|(zz0g_d<ѕ"²\LjR,X@[$ 1dL/)⾨U*Z,CV<=( @X:ݰ໳C^h 'dhjnxVͰ4b%̼ &hAP]?iJ!epvmUkT>1uCG +WVnzCz7ƨ-RHb{,adU`aaS\!!FÂ%faZS4XeEIc&UW2FO͌ƾ*RgjUZEڡلm@"@X|^w Iܔbxgӹ6e>R BE]bhv^Ւٕδh);V&ff 0\Ukj4) 3(D03 c s>~x[z}}}uu%/z+T j+k^Ke{;j܉ZG(0uj\wҲd@c@Q)NۅhBP#J bޥm T4@{&Pz(`Q˨ yT5"T,;BܠqTFX3ֆc.5sD޽{-9d8Er~YBE9$GljSu޵ P_bg8=vS rDX8A?%W5pU8:ƸR{v*>yce-X  *=CU 3@=JMMpJsSmv&ZbeY7He "My{+jX|SlfLmhV1 ǼTxz..6T/:%Ս y:D*J(NF# ܹs84&}YE]FpY9ҹJ|&Bxqv{}ssv}ݓ LPџ8! LC%fZ>"0]fz-lWm^[m 'q:ӥsY а*KnPף8qq}qq!7؝$}:;Ow_<" T45ׂYMMg9Za!j5sg!QP\ /.\ "-Fl+qB\w1gQ< 'M8P.%yp7 Cܽhn!B{"Ж eOP4_*\pV*W;ۢpb 5?mg@EXV4hC]Ҡh = SY%$dU`~d??r I,͡&HXy;7(?JF뵂nsO0mR0-:jXt`-ن-ɫ.MKϿU ׻1Yk$@=H p?$nn///ﺡ"Gc(F!QI=ˣ]y2Fy͞,ܛƛ7 [[7BbVtv}檐8!C.UqŅM=6g*_XnG֜:4*:p r) N{W.]\? kƩPQ$w%D2n)*QE'4{Ht0`9D+Ÿ<\ٲn{G8Ѻ^/Y BW]fd[h%h{w5jwttGCSǪn١dQQ\Ǩ*NܦwRWxzb &ڊЭ.:aޝUW!ﰐpqAs!ᶼ={M1t] * !=zz#]dFY¶=uYO\%*NNzȗ Qe.z! *vն9!'BE~,7썷R4_) I@/>5b6h0t[{ܟEۋ}8 +!/^֞b"i\y/#*)d(   Tt7YÜl)џ\m,UŝIVdT@&U^֖ss{϶ymE; G>VKp/2hVB T+, BJ@?J]hgڃ@'8ꡙO\\]"R<ЙG1= T%Fݻ+|/nYc0G٤zv}&x͍G~6ƞ6LXT(&}uk\h!= P1_-T<;OWxxk{d ۙPb$0ڎǢ!ʽ|u _$BźKko24ǡ^!sT$TAN\w^Jq{//8:N )O{ [UԞg& :=+ΖmPVzؙ=4> *œQҵT %Nܿ.KBjvemwV*Ls7Cu :ydŏy9Z6o[C?yN{Cg96+.OQУ#8r&T>f'QAV[߿J~9U0BHxhڼpe&amɺrNOt!nMM"T480 g)TE]h{H/kqOKٹ t4 s }vrIs%fA"c {m g~FUTáN=+ݠӳumϮ,"TNI \_n_,гx=:.GuwF凈=Zʝpɹjn!7el#^mӑhanOv*@\@L.wE$ 5N;*L:{^A6$.M n:=sD^w'@ wZPсdt"qށ#1 T:=f`%f#lhO E9 = TEfYY'ކYCd 6`( 'BE7~{DGX8-`g7P@+>%Ņu}Yu9vKd]ޅIZ{UZ ѭYPK=-nOGM&-*;D;LM$fMwnnݞu dQZ7d5J듅ݸ^WmnBBbU$An?Vl5?%@ZEJLFxJlUk|Y[F=ԵԳ8!ez (4ȞG*nw o&٠?j*TfTqWӛMn0 5*ٰ*BbWsJ/^-dTjZ~Ƭd("GnsK(Y&u}dGE"n?PHa>},x{$Gu+*±#ZDg|X$gzҳNv O&:t]zԉ#^@VqHKѫ:1%q"O< (>iI gfzR^q!YUnh+۟[F׭YdQ=ϛ^E=FͻYEsS(B7r6w:) n Utm.g:-!{N@ O0hB`ݕIg8v-[C84} ؗ?Wj\HVj!6*p< rbcAm@*zڱ24}+{!ЂYE !KI%YENDy|.e=>a`>yUzL,cdkI@q:["k߭e3ݨv4D{]f,GMVQ ɹ{ hx.OOӻMmNZTBet 9R{t("LH(-7.ʳ陑hWm]-$ŶRў/ =F$Fz3=>5xIlhHEgVBS~I3ߕ ӽ!RyЪ=n6.jp*;N(3IJW K\ GswU4Gz8r;lⅻCp_<4ʆx8vTQ"c'%UU-eQ'+<~b- {®j0w/B&jŕ PC' \ry8)8Kj %#O,29+HjX;(bf@hkx*5[!ٹKK)<=D鳻3P 'N,_] 2=֕ph2ƭi&=D/-d^zD-C=ǀt tUAp:Y.E^o;w ipI1@ ᡾cFaδҴ#lVqaQ-o*kF(З%uK,kpPq/c- TE Y2HeTKI|_Hj&$&VW^PQΪqc֭ p7a/ U,|DC 84^~޽{meO(6Bb# 1o|+{<# mxw|OvO ނ MޘWRM}q*L-tU4yPU_Ko/s7Ar$m|AYHr [%P>w !| h )ԓUtm>Eol@bJs7}Q\-n~JpZܔplIU,I{uy*$ZMo|&r+,Ո-JVI@'!; *.4S;Q^NvNaOnYEeD[X:ܬa]:*3=hVߏ|FD)B蠯QA~ĢLtj { YECUUUȜW ]FܽLM W#j]8YF5|YE&񺛛rfW ̖ֈ@ful503B1 *qyџ,9L8dZN$XN—;L@̀9mR$ئ_zʻI) dzݭ&a+ 8 z,,f ^:N&^p(َ???ϪE2ڬ̼0uN6gT7fi3J!p*xajO}PℤwH 詩 C*DX uܹtfzQMbmrY¶sO#榚dg9lLLҁGUBR[t!0G£!}״$khf1d嬐@v&vQئ'dEg7i/n?CFptpr%US+)P1t.uOD;aڡvfMu;9҃*+qB.pb*LE\cM [PA7KD*'07Ee˺QyT/rd嬐 o@xPTN,Pa3+ZVh)5\^]V0Ch{$8tHwh {Z]ʽi:X?.FR /ݍ{j$dx?;5ew6&3G'[^ǡrlO 8zh;dw*Eb-;vqm<-RO-vlq`*V{azAm^p(qOF}O=E'.Oz%P-%C*mq݅/•JP5k/ؖ .Q-9X@UpgҦ*wzDC&  .NO0~|*Hq\O%}o=Ԝ'==ǽz6i<@ګ-R ^ZI"vZ:V?n }7FbCi+ً3ݣ\8'?԰ _UUqbBE)*6Hxh1Ԟ1VNwc c.44H>ɥݳE$Z\G:;r1#{+jʸ;6O5'ݺe\ڤOM Q j_XK aMp~X *p!$ a8$&n gYW &s/[,4!I8֘6.UN ;^K.3Dg4 OJPÇĬgj YEVQQL,wZCr -+.MM%\'.ڳCOlbRQ!#revovK(Y+WV1TVf:5#*J:2e$Z ) )ŃbqguVhQlࣷZOHUa֘zL Lj/aDt]lߘ ,^* ߑ\ܗn0cГh1yxlɋW}xpŐÓ!~'J!ͪHT7dbGQG4tf6(dzez?Es K]a0t[(r3}TqM}xEiaB'X欉)+p^PsK{K_i[E(L dMiR)`rBgm<=z' CH[({P!qXfa'ٰ%;mD82f,B.t{n[N (o_\n{&OWЅc2<1F!UB+p^YVn%n*3gҭ,& HC4Zuj9h{}2VQٮ-3QtPj0*SݻrW>65,UѪē'rl7#0h#ϑE;XV"*Pֹ*?]yx&D17 ꪵ77]njL?!K8%*J(!!6p=mCHMefĐgsnߐcd;fhN@]\\Ʉ쑁Z~ mu[jC3x~+*p= Qn-쁣a9Yn>\g--9~KkvO\/F~Ay9vNĢdUPQjeIq쌘"/֏*Be*oI܍tf'ieos~RG{(utþvtuaO {x{grdm*>:/CP **ZqoOi]TayIa bԹ'cy%~O.xʫQ)<(ӏ*,HgvXt #J(~^P̺q -$YɍxlbZU<\q} r½~8 %ћAs˸IuC??evZCwʟS2BWrTUݸm׆f]z"l]o_p[NBZWY&~tgZEHӱ[?C'U% rj^F %Qm w0^7VΑzlg~|҄ Xsb3a *ܹ6[c;_VuTҭݓօCaH,BwGR8Wn)ѱÍ + i&bn_/cRMeh6C@#ĺqP4DNIX v'{l?gA 0{h m6IPIu6ӇQ Y@֦Dm5r}M|4`Mc 0ڲ`vXKmqBE-5Hh8fzvFbI@{ ?K:=rkKB}#GRqj+%^ԓ]#! )%ûwײ]\WIĖ > dO 90T0,J`zZV}]6CPW`  Tl3@`3q@*BV=]6CPW`  Tl3@`3q@*BV=]6CPW`  Tl3I^W֪0*+@[#@ؚGJjz ~K 4%@hs e S' BEN21=_U&:e?P2a@biO.B.ˎdv~4K>@k/BNX+ eb$*x÷;I+6%y5I@ߝ̫vP1J ]4٤9B=G =/Upb{ί n:;(֩J{#@g ewQP lTh)vC]v {"|~rw/ D&JF5ںĊ>@UR<[0L @A`*oK TpCW,7YBhYwZÝ^4ΰ79vzvz[C-C%gl{Dk` ݻsovaS} GKi7'jԄ7  OWɧ QbC Ki/ѸG_Cvyydn*V`55Ԅ/ݬ UC `jaTw"'kY7&u hٶcbW=#U6ИqxRfǩL8BERt94ϖJ {hgV CPC؜4 MM ۅX\gKU.koދ eP߰vT XA`Su`vjpmD@@}nBQ(M%v@PaKy› o{߁;i 9* N@t*YOC@ǡVқmxu~@:CK?:,_h5 CE퉮OJ*W8 0DPS!@`e8S  *:vCXb@c!*6y_thJ,uB<[B_^mԯyM}K^Q<B((WWWM1F*-˵BtA8.Bq}O! TB q *{Z@bKPq\r@ p\C($@(  T@!BE!( ⸾ * A!@Z.BWP IVm=b+6 EN) T4!@@*p[!BE!( ,B*@ *h? ,BENPq@!d * pt@ KPE  T~@Y," =ChT&@ %p~~‡ޟ?T@He 蚉 kV% ] Tнb-IJg\XuT @~|V"@X Y%fkm]VOCVp PRΆ{SO*6=Fإw*.q/(R$T,F\]]^QB$m"T(g :%{_Bg#!p۫ŸKm]k*p! @}@X95B`WD8 L&Y*vulР(Yԝf=FVBEa7@ +Z&s BE/N@?^^1~ϔLϧ&{  pPޝ=NzNh{=?W|&O@;hD_v$ Z{x-X@8䅃fbS} BE -d!nj*jh! @t; PC}5`rZMy ZWo[vpE̻ u`BŢl,M@BŎA~av * !@? P@PQ @&@8i= H@86BűO! T@B *Z@"M,!O/Z%A]ꪐ. B(DF޽{m@%BE%0+ x.=VY¬k+!lb>B@+ T } !LP *#, 2Bz@'@ؾ{ZO=9TU/z+NlQ6ԀPAW٩i#*@hZ2V-@`bk2,BεJBa J L@-1 *! :B.@['@غ lb>@ T  u{ NP 0 *! :B.@['@غ lb>@ T  u{ N[u[8,} F:ݡ׏x3 @`;4T0`  sqqQ0 6@@;ggg @`?)4:~i^IENDB`8Dd>  C Ab!8Gp?|b_y\7n7Gp?|b_y\PNG  IHDRxnsRGB pHYsod7IDATx^k&IZoaY#4 XaNB"xAO7H4(+uΜ{مW{jx z|N?=OɬKVeUVfԛ=̬<{C| @zQy J Nׯ_?99~0AB=@@%po!2!2Ap24x2t=͓}o&-]>j t-dZClbQHB %qwzK˥KxRzm֢ܾŐZ\|Y*uZ&"AAAj2lZhCL-"3!QIM-f D-\#id"^H @S \xb6DNHfӏoZɫWd,wYIK_gȾno{&>-_-h_zFӇ .+\zW6@UPq]v }4%][fH>![|cJU6O=`ĻҭWdoϥ aO>(<^nv+#`^l ۲ɎƨxMvD!S_MQ$@ 31ګP#j!p=^GxIR}TM``~97i: Ynщ Ynѹ v+@:\orGB*(#QgY% 2!ɋ*ypތN*}SZ׵J=R:Wٸ_ڷ ymN@z{Zcz}vSzNjaMBw刍/o^֤o1p%rvFy(UU#Eя4hJ7WnLP0 ҆ծַ^1IH @!ܻ %@X)}VW1B!@ YHV o\VQ D@nW r S 5KtyuԾM!@@ Ï<&G!Tk Hd'9Էt_7oѾI(hm {lRUQwmǽpy$rI]|@ ;lxU]2.,Xᣥ_6>RΏIo>{CO*I-ky }OXP?8;LJ@x[QVcTIj!kHҭH\0o.K[G4.}Xs<`Ige9h0,$p&*w)Z3 UP=BI}-R۸HI1 ڼ Uub {}36-x znz ZZ'72i(J[WRLk٘fZ<#Y5΢]dw|Rj32uDo=jba1} iUl"܉aؗ=&p2=;ڞ*335t#z3kc~-RF +*SnaEMYO{d@`ig} ,&̀_+-l4HTdgP?6 (!>Wr2Zn<<9'U7ǝ0C B eӒaG [ď˹ⱤE{Gz/>Wraijj~}zfӭe**hUL5)R@'j7oq2Jz|r\ڣΎOiPR1H,gD^;5=r!1MXXfY~D+})=+:ʗU5)'jF=Q˨E1DO2@ 3j1laaTu>{rU𩧟Y5Sk{LP* V%0U-V5&g9"_SZ /36>Cm ';-ZxE@es{Z&[!@R2+q~e%Ť` @&Сv @`U -f#  0o\q@ y }#@ C6j;>\~fOxabU*O]) /"0@ˮǘ>[Nȕb}{=,Ta[pw@`=Q I5u4nq_S#Oe㑥E&[HHAPa%-TUkbRT8u*I Ԣe8;~(uFbtlr}T<,A0֦Qx%[) ѶZd&Y_AZsY"-[&A/.&U6,TH-g~=~YέZvu-hّK#蚺HqNck;+p{uY"׷8==M_ogJĻL"T']pwf'{T ]9Qζ![닜,vf?!Ž~wJ;|I!D,u)bJXR-/yWdef.F]xfUXV+uc95Pcg#u/ġS1VH6躞fqL OZ42[BjF3J/2;~E dU muV۽RnY5}vԣN20S iӇbjsJ{xR1:ow6ߗ/_v׷FD;=l2T~QON@`1pŠyZ6Fk;3cd<˵|4l2@@Şs$fK-F1o-k'Ӽy w$J4jѾ"~zbj!#er_|^aM) ց[cD^K[R{ TH z/W*ԞtRN`Ы a<'tIV〃VXul>;G`H nUeI 7[A6o!儂1o1hvpBrGAgLF,a;hGA|w.|DչSkw<8ĸ꙽ƐTT0>ꯝp֍p^ odjvIC̝|˨]z;1a@XeCK=ezCOr܆ό>M[;޸JL^ \;<ٵGPҪyZo%Յ۵ŏzk?" -d [,nbX* :,@HV1d}X/ӷ @>>zt8lbuVż o2ز*=ז$4LY;}Ϋ O-x: 㩧Y?@jQK`K`\-ܕ|f s @"mKfF3`ष  @9j!2ں5ޑCi3ݠkA!֠J؜LpE'X 4&Z6Vukm_V:yLp 3: ak2A 5nGU{>P]-HwL q3 o  %L4>=A|=˽ES' >j6v-ogRKRVΤh蘶! Xp}On^6}^M*l@a%Tf/)H b")a[3 aHkz<3;L =3EEg#bnMi1۝ߩEyt)Gued(B-N.@FȆ TLyy^ӭ/%.UygonhU.~yydzՐPφX;/y!P>RΓ^ˇ![8= oEgk߁;b`V%ŹYxb~ tf=i(ݗJd\3egBSvv T0Dd[̶ڎ{oa4@c1/㤾k*r_O0u^tDVOuᝅ3i|d&oKN9[I =ݛCb<';)„ H!J"SgDI޽O6#>~|0e_\쓐+@@`mu u52Fv P[K  Lx`U!  TD* B،XYj $C5 j:h>p j߷`%N:@;#0A-""ފi23@`7zUNPο2RX]&- G/;>#&6E9Ec 6 wК)^GA64xܭp}D͕#k|@0^rU*w > LPQ[uIz hQ$ DN;JI9tFx(@`]_}+N`LqߓgvtbG"lHoҥK+n3G@2@XëP޸JS, W l^C`X;hO^)7)!#0tތB;Dk"j Ίtތ,</;Ob!P&9OMdi>gʓJ 0>ϼIʁ #Q} * P#Qx% |#QKYL9 j95BjQ_̰@~E~@>E}1b@ S#  !'ZgN#Z3, j95BjQ_̰@~E~@>E}1b@ S#  !'ZgN#Z3, j95BjQ_̰@~E~@>E}1b@ S#  !'ZgN#Z3, j95BjQ_̰@~E~@>E}1b@ S#  !'ZgN#Z3, j95BjQ_̰@~E~@>E}1b@ S#  !'ZgN#Z3, j95BjQ_̰@~E~@>E}1b@ ܽsG{H=q~;1' 7 DV]i%V/]nЀ2W{}.OKGؤ$# O&@%Zp>ta(Zw25-^>W_޻/|3z¿_|~|?>,E-jpB +/h\-板DVi.ַ4p @`croMgMRA#]o d p[pB@8b) @ q8#R@j9@PqF Ԃs HE֖²xKF9K|؆ AojDD`$ $Ԣɰ/tt#Hze^KNy@,*KjO*(o }=(ͷ7v[/^i۞B/GGGVַȆFB kA۰}WQd*}NJ&[qjQy 3X eŨE<LRotPÔBX3< fǬ^tM-;ҁ&#jƦ,Y]2@`j1FVݬ׃nwĒtF m v@u@-VBؖj-j PԢ8a% m v@uuiY+S[֒Jkm"ߍ&8999>>.!pذ*^o5nG/ЛސW  HŮ9"T.LxSț?S< 9(OoL3V@-vʬgMe(jQ@0@PCTdVSaOX\7Vm] %Z, h@@-6Apy`:!Z4eƢ`z I"XuWTE3@f"Z"zy 5}pp@ $Z,Ij'pzzZ +X@"Z*8@`%J`)vޮ [dQ'^DW{2VC=g5lp# hZ8[>C-ש^S5 tC4 `s H@ @-P @'Z3" ,w[Q 9 x:pxy)d?7xG ^GbZjq||\}\Y1 γ W!,HYaR @-vKH4/~,YA/Wܷe,RBJ!PA F$;'Ksm;}; _щbύ C-?p2Lt!L ؎jk֞|] ޟt_+++~rxŬ(uXI6kuɎ?ɯ6y-M+<(;soС' ׏ǩu`L#PFm׷` S΂[U1iB XPaR9oS0n2k7"wRXj):B#\Yܽ ~AP7Q@n}} 7 sGҌ :yQw-v4_bGN; f.W9j3`"T:p%7r!lP-h(O]*eH(0(@8Eq! x[y ln3@`mڄwXG/&z^`Ȏm ȟIjQE12F$;uI -ƀU > (!N'|z!@VJ8@?X2@H @- Zn값{ELv   C A blU,!D$k;#lӿnlU,!D$k;#PNG  IHDRxnsRGB pHYsodl.IDATx^{nYUXGFѝHңLjDB{PJYC UP{yC% >@ExU%*Z&:zta?owA ng01Wr$'?}d7{?y>}A>;_z9?(xD??\Gx]/7.|K~k~KQl8,Е? ?Q'^e'|+տڟpX{@m&}%joz?o.7=/|?sU̿K^&^Pv{[NùzW;W'}|^6S_{O?:jlʙLمQ[8WA zb?lY"kb rN>'%_U~ +_qbxj /?:K/'']@_o}~ߝ%sAzr']\~ox{\+~g|9OO|۝zܝr~g|NDr?w!wݟ+DC?*_v86MW>w[$W***8Jrw䮷dd( ~?\\EVWA\IV'&:RRd(7|ϩcO4onsܯau՗- o_:7߾.}sk!_~?veG4K[+ozzC{>*S]z3'W+-|*};O?ٻ}/ Ua^7Un \`ooY'Uˡ~w'Ͽ}/E׻or/|>'~_1q* ~O|cB=WTw-]\úED}[y?׏GxDrnlx z7? *xs|b08p{gw\" KӠ*V<-^t;/_~d|Rp [?D%>.pRlPl(RXPXu:}XUz/XPlaPlPL[0iBC3WҺEpiѢKCO1WQ)IAu-\2Q(H(xLT㧡#kj #t&%ˆm^L9L3Q.L"oם@(/xŕ?=yE*D3Qڹ4T,Uʭp{~xr>[▫ܹ2Oʏ=IWs*eaY({и4D6<2Q;͙('7D2;b{-c[wj҅[vߴ͙Ⰳ} ZL5i;g8pr/;*zrnֺi;q+LL^OP܏x!LTbPu>>zV݊vn]-]Un%Er?W3h[y}[ԍ|WvruZV?) /WvCIW>갃 uc45[Z+)w9-(PGH.h;L;}o} wʍ"QI2D1I*x=uw \aLKPZ|br;ݿ|p`8Uz>oqqzI\y-&Byt­^nZvm[ƍ-B[Hy$-h>ˇNȢ jΉbqUlTccō]l6[[[3Qė3~+Y6(!oR y ȤD[c-~wYGGlH@ p[H O @"roղ  }[7 F@ r;o^rM!>@"6PMx ˕ G5 VN`!Zrgׁ>@DCn~JFW] ns4ə-]_mir]iJZ]p^ Fi,zv\gL,H! A56xO^c^WPۥKܙYs84+TrP6tN;X>3Fk J V _?28iIo eY]i .\8/a4B c}u$:>FXjEmSD={-2WbpW9!!Y+5Do#$X)':'gw 0?"-lc¤?( yKZEn+S 4]!s z#-z39lJ4d=օ-W!Y2k "09 (3Dj@t۽ւڶn@] NYKZ=D@[h >6U0q[d W  @[`ݢ7T@[P `D nAb  6{f[`/UZ`L?jт( 1hZ} g1á)Ts~"`=~5,L"si7-V[' ɱc;HtiWgvSIbo,Vb՜ h@ Ec`\ki07um*#ov B37]"OcAT|m8mxr7^L7ݎp[jAou[ j`1>4a+\pޏf&S . wC TFl4Ϋ7LRL%ZZ\"[$8 U$slaAhZ08kd xpqoDT"[KP2;ZoW4UMrR?-)y5r/#u/\yel2(FVR3DE h-\*2ȐBܼTcB IWgt{!--i1^(b_)T4U b%,IÐ␌83=K"Q(~~o"&I_oA#5-gʊ 47LEj%+6JbJ5\Tq}YhapTq*JaU{/~(P#Y2`V ];A~\ne]*Nm_c>y s9)rePh̞+͢XNe4[I dHω\ClA+C;4T8b Kɕp?5Y`W$ p1y 1qXЛ+5V*pת tEuZ_\Htl W&h$x[`LE;6Ba˒nh eT&H gAx*E,hÐKS D&5+*?-ҞOILW^M )–#NQ 0mE Pӡ"ubBATk03TI?EE͸qYjWx1)ܓè-x҂6G5Y-h21\_8%~8'`*hnPf_}ЧT }v_%+pc'UarQ2 "ϝQ}ah-xb.Q{Yawm^:UWsks*cs4;n-) n|ϔ"f`-+c à]c{ϷU[x2-VԜ,t/PYD z \Vp^0!zME ֈb1k{ xBf 0|p-D@&zJɲW!dnOVޢ 莓rzauwLKW{ V1Bn{nDkN-r+ q|;]݌69E]/IJJ٬"8%BsЪ}Z@@ojDO(#(G0xkr*-6?Zo!u3ţ ZX TZ+gTr5 yI&?E,J-佤| hr('T Zk{H=.6C&7.ܶvVoaՐCoÚkRzCjEHn5CxK2ۉHTйg}s@CxvGUbq,ߪ[+f;?CVF8 2A /@lʕ_JEl1E @`D{ɩ^I Tm#Ώ -~ۭW$N\[Wm̀ Xu-^qQ'g5&kӏompv!#fr0e.]2X>K i]Ub,ivAx3XLhH .TZϡRW}ADD+ṽIP&|b%FH趑ɷ#<5dyw^E~:t쭫Xe M?|m^5( TLBJ#cD# 'njފ1CDyV4KO?fy G|bds6z}"=ԑ'''F@u[Èy 4Ea\+X·32_0 .iO&w×[4476R8BUi5I{EXI:$/+c/WL KBMEjuC~a[5X7'puC%R(ì並%' I&G~4˦ 9at W2]j>>gt5wJMz '.˗7Ȫzu#=^.yW$@&oJC%MV7¥&PĦMw0'eVUEM{\!aoAţk׮+QGCKɪm"N/bwKp9ᚔNaohJ҂Ibb.g eBe%l3[\xYS} 6CU"Xs5w:9W 7q2Z|& ʬӉm0kũ?ct\E|a*'D-SzQy ׮]s!kI/WJ"=g?2q2Ob1 %T/ Ԗ% v֩ȧ JeI>'OD cMkkJԲ;L”iu̮*| ~DQrc4gdG,x\8And-JCVE-94פZ38 `X `aRXόu`-PTE^ejZ`*`=YB-ch^Hڕ*UlU}?sZpZfF8´UEd92ޤOx' ά d3Cy~T+QCGgy7q+g{c7v Yf?j%!A=O?[r@4?[t2 7 #c4RܶZiq>rJA1R/Ug-8ô_oesRysׂ+E ,G!_W%YX^XR z_$+s;P6lȋRtB%5kgcPA+ FC -\"av%4n$b[8 ׺m!Mi8 ]I-dGI_ /([@AFMGDuFkNxt ̗.ޝWƠU B@#nYd&:6 \7Xh!&:6Wedx Ѽy0\;_[F3cvo4nW|2=k10$@&G6V0x^D&kM]Qed*$qD 苃in!'F94$ҔP H6YEc2[7 ?ռF)1Oy0;VHVcV2'?z FnC̸$*`\cC?-(y!J@`VfEƺx(ͫ8Z; 8<P~ Xzҙj:ǾQGGG>v*zAeD,A 8|{w,4=\y _TuN 1oQV1MMR8r~byzQmqbP<8=#3[4߳{\2pA2I9U*w5~A0l:aM// ?>L{#ib +fOՖEWr3whkT}TlVt՟~*D`[H?rqݻ(ͩ_ ܉JNb͸43ZH6Fh"kI:iȬ9_3$h-d*I=S6kG@56nF5 fBx5uܖ,QHOqby}O vf:ce=6FO1rM0J~jLB]#sxqbV>r~.A~w2R/ZX|.RXnA 4@8]mZJQ8[J3KK)t!/\ta2P7C,h;e $JC<Rqr;vH!&~&1U=`D,nPL, hPrinͫ[G|1" g<[ )?yKgql+iZzt;D=JQm(x1*,Z@PgԵfO'Nʂ-X En>eʫ?'-= Y挳؟6)!HNPSdA`hoa$Pk]lPcdF..lW6m49H[>Vj#V-HZ#[D<D ib~ Udt\-nT%n[\Z.rB?rdLz^cSczB;$*BZZ2H9f-.Hr.j]pu9<9!g?I^Qb~I">h[-dgXү9ۃ;%q4+߬b OVBj"1% "R -Kv݀2RgЄ@NT!@% saǧCڏEn@dDcC{ {l[,ee:6vG;ePDƜMX2{8$,.Wh=C{ clAȏb=|\Q>3q ҴUi(Su*t`k <b>;n?|-8h g c&pҝ-NNNry\&;nX!XXnYP'?Fĉ4?A?6M"Ȋ<; 0+X|E.p(#ڞZDFy'PcՒ[eYIzO `^\z0{6މZӀ:B$;C{-(pŋ!QQvD@A+GX.Wn+8;0>FUĠ "/hɚJA-ibU6e6!4 r@C{ cl1>{اAH1a(a -Eic jX:IC)p{*]ڰVbM~VA[oBPg,,: _PdN< ~@+MPIZ43$j' -#sUǶXq'6@z؂\z•΁-('[NĴ8=ʌs"pY]eG@`vqbB(yˉt Uo-lW4ƹ׮0ن?ܾv˹+ȭ.?8 =۵.Wj8 G`Y(r$vdèo<` >`ZZAv-za -oG}l !T]|f./vv-N?`Ebu rE.2 T/`{wYW.>i_"VbYb@8&0SfD-H؂o?/nZD!3`[2VxdT%LI4AilKVdT:OD,薨bG`hoa-/p/vg n3>Ҁ/v7L /jMг*>O4dy[)` #`-fAb #0[;%# J+Zrn|. C{ cl!oL;/k? T*O?T IםT\gaY -,E L9Dj몥#ɡ $Q"SjՕO>DJM7cY[Nc$]{Q%| d%RxYUX%ZT؎[ [c b 08C{ cl[w2X^ ]q`T l }b-A #K0]ʼn-4﷐]M^ U[5fƻiL!UX [\scAJ>8C FnTmxz@WJlcA>\x㼅CFƓ1MccG P*`Vrm`o`ANߕv=(>'J'sV~-Ւm<ȁ9*2(deTmsV#1*VXࡽ"G4fSU O QܘwQV}SsMh&H੦DgW -y?KZC ]*ȪۊؒU*w̒y ϺvԘ-5\]S7/F2j2E%)5@S~~, r\g5֝' ֨5df6-Z[YiФZ>>ҩ-hv LD3,TkŇpUi=A=hY-oc^_yHerey\c*E5JbIõ.eQ݃|T5OPUZz# M5"IW-~=?I0)|Bs9,X܀? 5꽅Msw]m&BY2)$VχKd&2ջIED @%o3"n4*Qy3a K9ĬjWj A6+5PѰɶVتe@%-\/X:A` ?|)V.N,_ $.N,=X8!CCIapb& @nҮW߯Yq4?[B)YEhr|0!yz0]r2C؃бӹM6a2c?|hmr-ʱC~GȄF1Ę i e b j-VmLJp6i&d'υ1:Vr!]=L6%e ('@y0m2k&֬d?E];2ڨi,G*ꑗg + oR !di`R4=\( e&u{M~apy#&$VXLTp),^`oǎ9{Žئ۴lZqZ-W4r1U'4C+A*=aCF h8|ƅj@-8-cqÉc%K6qb,8|atk'wv7qbnL E@-XEp{v:\]?g\%{ș+êe;W/"oNK7aۄI6E=L#u‰ pX x w1*s#gV՘nmw1(hGq E`T!<#LL5p+>I' yx 2A`Q튪[X#G8ON˲C/l dNf9]2K.&Ewр6jQᚺ,j[E]xUiP!'9p$ !XZbLʹaafo! -8_7bPJb5]pD\_$:(7fL"n! _dXCB\|VwYY='WL o4DZ$#7Px8 >T@'oŒ{X5'oղ-#upQjh+KsN<)0I[ߊ:=x[J+1|!9xBޢ;oi-@ˤMZf& cO^Y-O,%F [+2Dm@G.2,s'5XJjZD1.+JNoeNFNH\MQcb8P%ҘJJ{9 5r>اݛi̳+ j4s4MYsQ-$)÷921P @ǨB?Gpa?UR*+ Y SS\3 /&T EXT!j12&(5#/v`;Ah` FM;4%*$O9` F= g'T̝ە"9V jT $ƟԴƔ*jQ*ĸ%ĖNIx}OU@!o9Ψ/)7C_HCgX2$zك &(+WsE %*ǗAؤGnRҤi0xA 1C#o1yz YmoX>˷l]lrN‰8<T+1bрX`b,{N&J 0gd& %C-X b Bne4d-vhf*$﬑'7dM +El zvzP@YJzH"o,h{2,jeX(SHTZ xŠpñK03 6B˓$-8|6rؘAU81&fUU2$_S9|/\KCnŒHHJ~[ 8k9&@m3*ib~++zcijZD"'K"e y L W1q b>wRVNH3QXZ,6@o+Q&rSNL_] k݀\0Pg3L"T9lEA&g!}#&Jn#o -'PH4(, 3:~C3%JZi8*(Zt /Tӌ#?$iE+$ e-lI?<@,N,_ 9ʼns63t8| ;F XSe 3N,G@-@,rʶN֚$p[nV>ebb!V.ZdɂEl4Dޢ!{d['c}IDEJ~yRKz}՞Z;0U˧Xʖv-,(A YsE+E=,hˤ*5hˆ(Y5U%"`ÞS1YzZXiAgO"EZyg%:;~J&dDzaҹ!'ovV$ yn> ˑ]AjK4v A9A͆N5?1%f\+H܉hɷMz.Ig'b “BPd1/.kwHx9BbHU#;pKs֝'wĨTYR|ԍ҂ M`38x80g1YBbXFDb{[KKD`~,Vk],ł௾icbGzš*DYN]-P_'-W0M~Bv | l}]^\@oDL٥X +1T1X@̊N,É32H8|8-N,>rP @((δ`|؂ajgqE 3}B5xUi\!6)I'|nK+a2,%Otx&0 p!kO@n"nЮ1 6LEjSCόj:L(?}n W&$2 (4,€|@F:?c, V cɍN Y@@q RZTF 6[[҂Cs-C/c0@"\I3bD?b6Qg|2@`9[l˖%*𵝬>3@tcWN]w4p Txm +ǔJFô]IJIr*ر AR-VjM+}xLQ%FW7͗M^T)SzT b=K8] +8C[҂C'-: PI(!(~LN,[.gӲ >7'搸 >@b=N4  0c~QXVSM@+pby+$GG d"{um1qbbwn'wxqb @nr m--s*n)xql>Ih?,t &>"2@܉m$KUKYav-F–eGՌJbߔ(p4A_O&KCE)WTA,%ߢQq6 * x|iuy@4LZ̜PLq R&ZAϧgc2ИHkU,%A{N #9/#jX!hl=#'|cst>K4=iFT9 Eb_XSJ>eCZN*68 4Eu۸UqKv!=VF"A&2 {Cboo/ _`~]LtP𧴣M(}GeE*\=VLcT$`|&;EI& 0*SGn9)FdG_bEjIbNŪ0R䷔?'PKv54K[ րMƙO, X A 18|h'N,&m$‰mp3XgCw -F@߂rU%Y,AFb̀ o @z./O0!bnӰZ664L@UbfV{@bV^RGE&E9 "[,;B&"FrjϿ4~U2!&iVi&Rl%\ U_,*8"U$1&S@|d)%sAOYn0$xBvWRBdJ-*D<b .T#4eSk.ĔAQeb-C!P.C2&1svd-x> &2*3HeՍepL3I`nTd@ x\@ _`B-&їLyT+WZԜDC%zS ,*pi]-Vaq fWb)rZrO__ +'IKn&!"j HW B\tb!Y `F p{NNN1-vݍ)唏dIׄCn~0jd\Yqby.bCn8 AAM-74‰[npbyP`[!l8|). ,W-f3;wy*J+w)IXA4ݺei{qu[lظPm8bl~F,p@[@Igh̢O( ezk[Xj-qYAd>_cu[4-yiI^̐77~Z߮<ƭ&Á*IJ4릔* 8Ff9lit=$)3nIs;!#w,S^rh;75"6,=baM#dj3*-32,LRHXΡ4bKD-ex|(jkl7IMe{# !5dtp eIR6dPZZX9䣐BUL60щ4R5&Kؽ4>E- ց@l8|PfkhY{,f.Ȳ:b'٨}k-PjSS-*Epb ݀ ˗/g9 5xMs]r(Y)ҸlC+Ebp2C;rw(N,ߨa8C C |.S־^QeOR^2ӯ+ ,kPqsc.-Θdib1Vj4oMI$ ey1 ğ3`'Xd Rf!-ZP(Ûm[y1VbzvDЀ^Hm'Wx5QUAjECbhr[[ e[lٺkэ&i"3P*)SҹF׮:moi1Mɲ1 5EQ1~jq*d̖ې/.TcU S2|ƧO#XA[> Lm,GDsL.6ZNˌ;:Y- .lڬ[F&c_MAָ}?|p%mo}qde}˄HI!!EufD4͍[rP2jĐ+kj"@V-q/8*&eap eI~8̕Ra o5aO,h7'''ӡֹA }ݻV!*B +8Dea5bX5B !*p-zP/w7+JH cDŽk6kM%RI"v(}9c `3f ^|sP1[n 5(J^qIB덎/,r*L4J啚IcqcdHqwknJ, o1TDl1- `u}L0bsҮFeMk->e&]k!h)!;znMs#@}HSaNfs+vn9c-ҨE0;MɈqB@b4,t> ~}kŚS3oFڊ$H%? ߐb`UnJƴ Xfܵ!y[lĐV#=dRjKnH%h.YEM[f 2ͻk!b9F[adj;dC\TXS)bbn<Ģ ܄EGܸ93Y^)Al1"=.3/%*&=DJy;4mI,(%iЈL $YqC.?g7s#،)7Hl3kl QNC}:)5Nآ7»ۚYM- ­ꃀ0b A;MKc @`ms/xMè|ǎ" 1!*Rd v:! op MʼnM3 0"X*;)0]po}[Q׍1XdI“A[öƵcHpI-҆hVd~vr0~IĔMr7gPeMKI!+cE?ߪO47n=Zpm+7&ͺbZAjr^1R}DoPg @oDrv]N+ao @}Bex 3♛S 7_\6a.פڋxŲ]2ԥS,ߕ9ck2 #P^g ae]DT4}`yCFx)V_%:d5ؠ3[7,Lm"w^Vz)$/8bvi9M vQ fVPآ7oB Dfeap/%*&[rH,E9BD͙Iи17d/Tq-va ( *5ְYܸvQLbo;N,oe>#5MՠƆUk,Z8|v N,l4Enu-5p$c::"W{*DYd%砷Yo'o͢xd A vrz]e`cJ/ۃJMCBl)zN}ΩD<\Ep?n'(Q1A9%d>za' ؉fKG5l@-Ҵm.w^`j[|;R(vKY F}>CpL܎-(b}},id .E'|U-YZF9!&&'YQX= DEOtی@0@|i!T_+V"O6$"%3+vQ}}ͶN@lSC= ;tlb'nm͂p-p6i˷l]ls<MdܷsQy W4.۷Юt>t=>C;TAw(N,ߨa8C C |\?j(%7yJ2S _#{Ci4r%a16_J8ϸ1$'gB"IAV ȅ&\]28%/b*K۴Tǩ7yP!z\yxOU,OJ(Egq::(c oÞ5&bcJG5KɆ,+UU7bF'YG'l$1С"@`G ؑUf[i"$M(RS&s A4W Mb.:Q}9hCl1í@ìnqө&MnH 1?DA t_rFcX=K%|zQ[e z dVHz/(Uf\q.a$ bI@MrPPʹ Ǵ5n=td,]bRr-8" S<[Tn9yڶ;ԗ,6KLaP4AH{_*U^p@M5:ڻb 0.jL$ HexipaP LtIqRwTi qChJY⃬pu'Cj hGc$˕EAGM匉; 7[CFG(vlqTs:g[5Ẉ-w& X,Mfk(h"_9[,cĭb X2b[sFrx6{Sioqrr+1j[@׽ aB,Qs[,̷F˷fQ<\ΠE{؊R-*RC„~CJD[J>V>&\b)BCKcܭbn 7EYsP[Xaui'>}0' y- \TiRIc=1nLڵcxkb/36᎚IXXg@cR cFڒ!h' @`ɐvEiӧ V4RO,N̈jԔEb Shmue1oآ`nW5u%ҭh]|qq'Ce ( C28-hۉs4v#O5-ܸ .dAwCFVk;[CNQծK?ʕw՘w&bNmr݂j1CNBF3sJ' bIΉ%VrQǸHWE," Vw+ QY(KW 5>k$՗1B*vm21nh՘[,>@lg4UK?[C[ō;Hw0#ˀWo!P<3襐_VΠ].N,eF+063hozotF}ttJi\o]l2>Dgc8@C[y*8t83`G8ϸwڟM}Bڕ3;ܖ[P\ؤH&_cˤ 6ZƪgJ{b-8ϦiJLZl6<7ed\% YJCWШb #P [ !r귘;k̸;iu[b=ˑ2rIjLn]4F2?V`VmLklOVmV88-z# 0*_,oޓB _`"eHi&1 1$Nvh.آ`=!+_(K,UMz~'FX*ephLeO84!0A9I~,fY}5[T3!'l; 4[CjUNX岝ٸ=Lكg.[Fxqby[3)v:iP:ЃmC *Y<8%։ݚ0'[6έU ޅ Q!dY(GC,̷F˷fQ<\ΠE@a~A:T됤0EHD^Ȓ<ہr ,4%MCŤElݺyPr^Mr7gСilZJd o cnBabiotK ĞlN`p-jٵj1ͭ*2Jai1D}'?9fLX7՜LpXHهt44LOS`Ai,NY/ִԈQܨL?O&V$ȒeQ6z-fHOgad\⩈&um1Ω5r@lFK`ʄNqO`0 !qs*ժ-rCm(#t0J9Ģ|Lp]ڕy;E\ɲZ̐hUs)LcB\X$Tz1˦}71] AV$9ኚ)[ h= P#0 V Y$9!r'H7G"j Cb? 0r,.O[D.Ad|[p;6ʩq9Ɂ>lFsy!آ 7:N,!ܿ7$llVΠp' 'oٺ p g9 5xbMèiJV4.۷ЮI}8z|64ۿw6Q*XQB- p-@ mps}#T+Ƥ0SAu_~_ !T$Ds:F1ѨѲ#+ [+4=@Le,b]nT;/9-ƕe!ែиxp}"aI 2[ lЬhȨbp^}" wUxM]֎˶o.5-8|-Z*j2ӎ겭J˻»0sX<oO o%rgR>^z{^<bcv!-NNNr[>>>Cs+~8w!BTiG@aD1 e P  $  @q.R R-04 }}5lU}4!l.Abێ7jxrޢוO<0,󅼖\N6^UPؖn &A赪1$c49\WoRV4F,;q-Mҍ".h7W*@oٽU4!ЀBr.&M)#TSf fYRB) &mmih.f(-6ce${\%RJ0}9zKdzF[El=ӷшN06~9?6arE++ȊiX=(U0ɤF{.]'W;_<>=-rk\r`D0Xkվݼ;'t^7zyĦE71q]=͗`,A317~\ɺsݝ͂r# -c} I1sd]Sv|Nv,`,vBfR}5--hV-PewL;emZPf{6-(ǹY7I\Ѝ8H~́:8-f[Ϛ+肽e zhzQ7[eif /aC4d53hΎ@A VoU{_eAEM`ZEgR`FC Ǻ&oWc(肽#Ю]@A {߿"4t":!P`FC 7fs Bt1g[@a{Nxf40=;-dRsnA\*]#9@A [a0OA\*>x.@A Ezk4tRR@nYTrV}| -6Dסh޹MPh0蹃y^7@ yrV=6pb9v7ن:yFuI$BwqmN2D%;_A#- 79b'ք[ OcP6!Ɔ@0y=FEn.H[ @`4RYR66%o%v@[vNaߝXj-6V@ >@ D@  pe0vnV0 *hMB] P\QĝXd;7 C& LGbz@&[4LGbz@&[4LGbz@&[4LGbz@&[4LGbz@&[4LGbz@&[4LGbz@&[4LGbz@&{w{E`@<܉e5ssk5 6`DC&99B@ ZP1IENDB`PDd>   C A bOʸgap+G-5O+-nOʸgap+G-5PNG  IHDR [ssRGB pHYs+O`IDATx^ygYU߻Gb4& jVC7*t+H vQF湚.hbh^= (IPAA+nV#3a%ous=w>Ϗ_}g|>sy 8z!/P *;;;{{{qA  %pͷ`@R\aJse l9 쫛?(L?(%(ϫ1`Xa*dV4\k^ ؝$3DtïBusb9aTr,O'wNz~|{ϿgR|ek&o5@}-cZE 5H!ڰ-Sb|q1wFU .+8Qt8rnOyj\nQ'[[[>sZ&35d?Hp~fx~`$yCC"қ`t0$%LE$N8!᪅={tm'% \rU1*D2d: ,ǿ黏Uy1п7~_>?x6n=ןJm?|~3':|Bw¸_8)>o;}'''_0NzǞyĩr ?gE9n%oǿS;}{AO|w?Q>;'k[o{o~{a~@ƛwةGG<G_3zX|5\?^u[Σ+.9wglf㏹}/{}o*_:P=O:>7|?]a3ۧB}M?=u{ i)5ϼ{ ޶yD o'ދ.z~P y/}k7eKܔ3p~ׇ5" # >qs5D"D'e ax7}3LSŷ]vZLܨZckG6B/ܖH~S/X+{D-U-?m[y|s{;+|»wKE!O%'r^*~vrT\^up 5Z>"oJϾ򖃿zr#їT-ߔ_ITxO{&~>Z_p$ŵݽu-Fx[$oIʧ{Qnxj' ~n4C&ԏh \Q'PKCX替ڿ='oG:ei%ϖ_Z?n 75+qy?x~?_rJ___VQsgN_ᄉWR8 na {r|PX"i͏XGu` 5 ̪6T?}Ϳk}dHUmv|Og-_Z |D)j!Rz|ñoԱZ< +֏|^/\ 5GؐOo{;6+;)y;YT-n|_ߗ|2IP.f6(ٳO <`N՝RJ9 0^^X!//o}I_Q‹Fm)i$ȸ^XјW+/1)D0sSgϼIE0Zɷ%fzL`{]G>#~WCRG[Fk^|s&LΨ/oO/wE" 2R$M!ƶ yYyo֜rC3Í$C:$UCFK# yw\" /4^ (a@$#GEd#Aw^-XhQ'0zƣl-_0Ԣ%k!Q:$U(0_a\:$UCh$aZ<3j<$%烉V %pr\DƣtH}IaCR^ؐ_~g#w?|B|}`k/m;-CR^ؐTxTՐTIoKw?_V9~Oӿʌ;fƸ?N~ 'VIo.?W;%id<j[믻I I]R-Rm d0ƛNԌF67[1d[>uۆ#myCR:{3:$/ケx!)0IɗCRw:!ݍlln|ʼN}w%!)CR'_p'7&M8eCR5:uM.zC֏\wG6u[f/Sf2dBLNcȤgaՌ_yޯldC{=7J7O_*V+7:QO9 o_%N|B>{bs^R# :vjb[ͧ IE#W=-ZOwHJ1d[>eHJ>Jp a4Z7V#a!uIm*!2!m>{VdJ铩o\M[p1d!hYRu8Hϐ1\kac1x`zYUӧ6k 5%%K$D&LSzI D@%۶ZK/Snv"Y.LT^K-XxFu嵢ȃ*!_,:#a)!{ם{_BO>fm;PP}kU-T]RpXSSTtwN1l KBۢ&McLH3$Bb9x5勔Ӿw+y\aءyB<):/w@/1ա5;M[ڡF@`1l*E+O}j_ J)siܑzy[՗N0$#R ݻpK^T]4^ԣqB]nsShRBr_P7 В#ge!XS%17Gڎi;ttB%"$ӷV٧DmYDcp;YSeM%إ-7W+d d@ZfMYMnm̬J`"l&mNC˧ȗnA%b `m[3f-ʋb 3֊-''p^'>FUIԒfJr0&o0jP$ȽMwqG+e_og%}-2JAvh=Zy 58-cыKS!WeO[&C)kno>1oG8W#z=~JeZDr5&*8QnaElLYNd@`Cբ%J{MMF0h7$-EV7ȪΆ\aFvb ,PiH!0j5&-D!c#S^KIlkqؿ{\cZeW{O#*LL6+'0HlQ(CRVn-)uc/YVJ>}OO9.5]R4ɭ kS=i3}HUd_kI\HJ/a᠖f5Z5kIɺ yY<5K+kIJokIu%5`D[D$'A0ꍜOh OcG FZ(G@ LV1Y:TbZ_wOJe`"Y 4vڌIm0=xG`U4ݢwI`@k&am *3u=d*B7_D+ ,CD0r@`0Y sk:m BnCH)4 lM`pOk؏ՔV؏*%1i P kI$LPt¡vag_h4+C (rBt9@]RM) X(#oQR:muiX{6;4$ݧRB33:2fG`H;_L;=.T-.H:Er"YAӡ 8AԤC-O9U[pЎ쪖0jAnkƓ\X0KИsÒx5vi` 5ߣ[B@Ӵ0scJTȒn1/dN`H{6k4LV9 k7 B3A(w=|Fw$Ξݶ$÷a8HҮjh\n'Z*cV[huj|)\K2b^6*Ūi\zR*ofjЌH'0Zt:E$d m{%fYє#=B1,E2b>5~aŁ)1Իi"¹[[[nƾ$\#2mj!߳ (p)e,`AJsʟnkN:HD3&\wzbMy&Y +GӼFWtO-/m00YG}B-ڞ!`! IjU}1W^$lqCU";{u[HFL-A0B,DR(Eb!N0U=Wmu5>EM\)6R WYɻvBxm Ǧ"GuLgC!q@`FFU=&`&V٠s6E{k1B8axO]86q#ԌA" 5L0vv$з>N&v/{If FmGyefwM~门C\58!y<$##=*F02 y kؕxzcPS(kCu0boUv쓖h`&RHKq{xId]DpjX87 'd"b? B`U,¸+E R>F6lXeUil*~PHc6W]Fˋ%P)2b-nTG-Wڨ(I!0a&G0"!0j;'2j 07{n{r!`A V~`X'a  H@i#1`@!bJC K!)j쁩rբKEA#9 U; f4\1N:iu|{lݜ3N#+0@.yߴ0gIȓ'Lz$Ke=v;bC@J4CH@v#^ne=tkHYCXRB7)ap>]UM?ADqA@',Ƀ\vx6f$*ZUӨmß@_p{vsGCUm(K(@R=`ΞP\ũyP4.7:lrg܌PA B@i5U(2`E_nViJwKmˣ2]=tM({sw}`峰,=YK*Ih*8ڢF0z!zO:?H8g#J01 ([ FH AH@R  :=-ԱDUwHTv- a%M(Q274w ySӸXGOCq9@̃@K*A͟"-iƻlk)9xSVM]{mq)EH,@ݤaijY i Y01 v* P 0x<؝`HHB`0XliCd #~p Doli]8.п4vsH\-cggӟĺI?C5ˣU,!T F夷 c6P C .o9grD{|Z%`׊yS;& Pa>|z2+ľCE Zmko,y؆,4]Jxv‚9XuxgSWH9CgΜ3n9Ϟ{M[ege&Uq=mj.ft2TBN0Bx}SV5Wk71ҸцYYvу)aJ+KJʲkMN09P3Dc/ TE*+Ek,Y+Mwjr6@F[;6^ƪ81>hL0͔ 0:?$ok" աB:JƐ@( n)qo'PUV6tH*]-"Dק #I4d}S)3)IvCHjW.wi@`XGޏ!&YߛwE6,J@]Oޤ,ѡchF3iaNصUM”AFb6o ŝp-lrǝZ(-ѻr*r ^<Z],!'N47,b diwi:{azU) ?Vڜ4H\0Fٍ2L`T%&E Q0*9sz!@`J7%m P0>Q0L s[60dꫮ\i [pZ(y5I!KզTK)M`/a^P;r# ݂gRwHl[ܪ4U??CJ yDw^U ͓$}[=­mO\-1C`C*3LyL!,U;']~w~GGmּGzUy"M/6_M@2H2w*£51lBj&Bu h_PK{'6kb-$L@;J2*ˆ^ ǩ#T MT sUkvx֌{4j4ZyΓa-uȣ K0$z%\/WHE NGG<;=+3L {IjwH#Qމ G,׳ syx%x;iuف\YePV`gWjx!f %LIrLr,vHCɝ_nbet1a]H/ֵq^&MTY=h\9Q(2m>#,&k;ܶAƸg^ciQE}ʶzwEE &ۋ{LfC2) rnT)V ROcS}T0^P)]IԕF/A* a.,ecu44&>H7ʃUes!D'r#S yjŮK6bj_L YiKj,[)j ^[kʝpGm,Js)%vīES۾{D5n5J`W`S~AaFEG/LSdf\pbUi f*:et^j0A;^F5~Jvi0WbC$"0-0eCG{'@# /H˭-GTu% #֚=)р{B ~a>8D  n^)btoӚ&Y[0 #obiHNU*q,[ʹ?}-}^/^_H^8x-؊}#ݸVպ1nE6@Y4W0f֨ #1nX^st/'7hzhXVm|jiÎ{ꟸ~DVMox{\aFxzYصl?~vGie<(21qn?a-@0si^f4qW]dU'(A/3ȹb mp{C BNb^fS&HxSo{( d-Ç1[\]|]_,\)<z>'{k>i; 0#%8Й3gD>Ytc^ ,@ւa?FEWqsi,G\uq*񢙚BPF@ւaxsfutu@c1HLRHMpی4Ga0jCr5)T]0eNe3 $Z0m360psS&.@@^zKy[\wfBivw]_ÃҸ [vk&N3-iYOIb iaiJ[7C^ړDE:F}gG""+!lh j-KTN\u ac1C芄UA38+og'Ew^W5cݾ۬iJ%+-M얓>w̠@ èoGmbרMVCOH&&`$> ǃdxl)Ȅ@ւF&41 d-Ƃݳ]r^Cc6黢f2yNU5~Z0# om'.Yf! ;oU\Ï(ͭ{] mt,dOl{rghI[1 /U0# l&;-1c[mn[CJYymg)>`?Kv wj1CrUo.VA3LG)݃^!s53G oꔖ&s537kHm#Ll´88sK40j.:`aep^Q܂ VAk5D&p)ߣNz:-]c,u'pU2M{KJè CwȨB]c<+yg,n7ˆ6Vtc ߡyd-}W7Pvj_ Ml~aQ:3$`ޗ M7)ڐZ#0҉@#0 u?fCH'P]RM%K`ػ%E3kʽ_]RY ƹ[f/]^q%N (GCxɰ~9OWfovv.gIZүqP0DJ@, |CN/L I@AjKڧn6E@`Y Fz,>xƋ9epln<,7H@Cǖ j7cB@ 7Y Fcas5{K]o]=q=K5# 6Y FJ =#Q'N#ݯ:ݚ1dRB(@ւ7} qNrr)|RB(@ւFͧ u%W{jPlbz ?N@ikkKeÖxEhTaRkx;S !a 趏[6MY Fb5C5êp7Zpu7PTTDx(' *zFZR7S ` u؟Zd(PE`8 |(//sP$)ȊגұWV@e(.b- z;qc]a! % I<^aaeș@CR)?Zȓ'31cΎ6@Z0R" U oys9~jN kH diOLCnu_L7hHϽCzf &@QY FJqUs띸'Yҍm+߭(ɕ.);CF@d-4fAJwŽr?y-5z2Fˏ:aJZa@ #=h$?w#0WxD;w7>z6  Ї@֓މ FR|6l孹˥=M?q+v&2#Fv$OݴJޑ1L@ $woj NqZ D ,pHʮpN@@gKx2B@:#)!jx@tV jƪO!Xm%څqȑӧNR]@w[-SeXZ58<Z%yGDQ`w~No01=kD0^iHgM |p/?X@`^Si>X*c]#pW?jlm"ȅNXk#6+Z`QxDMJ/CM뜱dY$cnͷQzmn.,^Pl s[n}% +?fn~.sA}^Rڕ1)f:=&c;vp5E'ݿüzdnZ|/iu07y&/ ΁I uzx<y LZk^ppk jHaS2 j8aݠ&.>سn "rX|p ^^`pfzqva4=kI%SJ0$GLw"׾ժc;sSM@0CWiRCC#`,*He}/.6fJIL3YKɭq{ggg9dgǽP lZF7rXXF7k1SUS.l eqʤӧNΤígLB0r< (4Z!  pJ @*EBX"c^MF `"!,D&@#@0FJHXWi  #@H@K$`,ѫ R$ %@09vWՌZ*~sN@ mGM܃E]HH3RZMbdK5Ƣ٥z!Dh"ߧ%XU82n.7eXR*Q-!,L :,ty;4Fx%?EG4WZW7ɲ<|:O6v5Ua*%Ce@0Ǭ[j<':=aSMRK=qGǏ C=JKzz25i IX[n;:C@:n+GBhROFHTX͔L͔ C{N,]wf~oӧNFnooK>FR LLS":bK!`,œS< @0I@`dLz 8)\[]@*-ޤ7Jsa ja|hVE@to#: *;`p76'!&ǎ' sK  F@w!ec0PPV:=jLVe ! qFUEF+\$n& },q]g4v^U)Ϟ=m쬽UMH-~UUfx61׵*]r{@;x+Lhej2)ľ*&q׎ڐaͨvUTL418R < P 0QfgK$oKNĢHQ Q>Ȯ16ZoG F0&mp1dV@& ˴qYv;ԅyzPFo?P0iY>POyD!T,v/ӳ>-%/ :G3D$[9{M f +8_&lbyg.a*-PL˷m Jꫮu<סFhd$a]M$xwy a2)s\dz^[\œSDkU&F0:@#KpŽɴӌm\ۘRS%^b/eJM!&WA(QIqS r !LJ7A(QIqS r !LJ"++ܷQtnlJ0MJ&dE2{q" %#K`  dYh5+jJƾS/4wCƦ&{CU񈪅&SsZXi5+ӳs nI G*2\UQB޼F>ofv72Fo:XSiFb X|'1|F≯;S JRfmJ#cr Ek^&vܛ2U@tW<;B(Q0<yS+ 0]ˆ1xIne(t ^ޤ71fyXۛ5T"pI d\0vww9qٳgf$pT;rq z263G q+Tw&Lzgu`  | ˦$gc/5%JHB#C`  9z dH)4:w@d{4 ۸W[Pkѫ@S`LM2!kV5 /v=e3UU SD0gNYgO٬1g{M>Ȼ4)4'kZӠ|KE0 F`[c4d? Dn24, MNʞ)ʓ!esq&1JR== Єu.UC^JwX˫i[~sOEg(yMjR4G0gN$Ec,>(k5L쐱mEO!;R(M&ɼWE [b`Y)'Y|8\0:!-caqKhM E0h Qwx(Q09S7  9 S!I>uC(Q09S7  9 S!I>uC(Q09S7  9 S!I>uC(Q09S7  9 S!I>uC(Q09S7  9 S!I>uC(Q09S7  9 S!I>uC(Q09S7  9 S!I>uC(Q09S7  9 S!I>uC(Q09S7  9 S!I>uC(Q09S7  9 S!I>uC(Q09S7  9 S!Ib>}bBC *֋/;n7|.O@a\hM)k>,pP: p0P3F[QYO5Tm3 54cܑhz@cT?R8g 6A@4=  DHD"@@08 @ D pH/MXt-{{{pY<\h֓$|_B`qOş+rR4  X{{7bp8qٳ[C@up\DIcF՘U0RhqȮ#+LIN /#_`db6#ܷdMι!LWϙ!@Yדw6e{{@jgqj[ @@{70eB;ʤɓ`L #AwSX¢9 0?Q&1b$᎑, !]݊c!,#OG!y dG% gr F^ sڡMv5FMVkG槐ӻ#gm{0n]6|Y1]7mvӴ7Zrz-s8`˟!C͋qհH]|Cƶ>H4Y)qUW,>`L*\0#/c pwsya0$*i H%PR^\^ʄHDP$k& QKwsr"` C^F" b$ 1;Gżv,@`3:[Z2" EFu0hFB@0 Ta" P⃲Pb+tŒqF2"֒┃ %S˰)ʊ,%VH "W_uRq.{~H9C ^B!.07Tb"~1>!1l5@ wI-ÛI+@m~,#rwXpdN>J@# _b# MS IMpQ `c9%F%`!,_@@0FKCX/i  Q p@!`,ǗQR8 @0KZ@`Tƨx)r %- 0*cT@`9@1*^  r|IK JdnjQ+p@]w& %fr|}EvI@Y`ǽ܁1r'bܽ}&whkkkn3 蟺IENDB`$$Ifj!vh5 5T5#v #vT#v:V l4065 5T54ajf4$$Ifj!vh5 5T5#v #vT#v:V l4065 5T54ajf4$$Ifj!vh5 5T5#v #vT#v:V l4065 5T54ajf4$$Ifj!vh5 5T5#v #vT#v:V l4065 5T54ajf4$$Ifj!vh5 5T5#v #vT#v:V l4065 5T54ajf4$$Ifj!vh5 5T5#v #vT#v:V l4065 5T54ajf4$$Ifj!vh5 5T5#v #vT#v:V l4065 5T54ajf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh55F5555#v#vF#v#v#v#v:V F4055F5555/ 44 Faf4$$If!vh55F5555#v#vF#v#v#v#v:V F4055F5555/ 44 Faf4$$If!vh55F5555#v#vF#v#v#v#v:V F4055F5555/ 44 Faf4$$If!vh55F5555#v#vF#v#v#v#v:V F4055F5555/ 44 Faf4$$If!vh55F5555#v#vF#v#v#v#v:V F4055F5555/ 44 Faf4$$If!vh55F5555#v#vF#v#v#v#v:V F4055F5555/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5,555#v,#v#v#v:V F405,555/ 44 Faf4$$If!vh5,555#v,#v#v#v:V F405,555/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5(55555#v(#v#v#v#v#v:V F405(55555/ 44 Faf4$$If!vh5(55555#v(#v#v#v#v#v:V F405(55555/ 44 Faf4$$If!vh5(55555#v(#v#v#v#v#v:V F405(55555/ 44 Faf4$$If!vh5(55555#v(#v#v#v#v#v:V F405(55555/ 44 Faf4$$If!vh5(55555#v(#v#v#v#v#v:V F405(55555/ 44 Faf4$$If!vh5(55555#v(#v#v#v#v#v:V F405(55555/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh545#v4#v:V F40545/ 44 Faf4$$If!vh545#v4#v:V F40545/ 44 Faf4wDyK  bkmkSingle$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5555T55#v#v#v#vT#v:V F405555T55/ 44 Faf4$$If!vh5555T55#v#v#v#vT#v:V F405555T55/ 44 Faf4$$If!vh5555T55#v#v#v#vT#v:V F405555T55/ 44 Faf4$$If!vh5555T55#v#v#v#vT#v:V F405555T55/ 44 Faf4$$If!vh5555T55#v#v#v#vT#v:V F405555T55/ 44 Faf4$$If!vh5555T55#v#v#v#vT#v:V F405555T55/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh55#v#v:V F4055/ 44 Faf4$$If!vh55#v#v:V F4055/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh55555^5@#v#v#v#v#v^#v@:V F4055555^5@/ 44 Faf4$$If!vh55555^5@#v#v#v#v#v^#v@:V F4055555^5@/ 44 Faf4$$If!vh55555^5@#v#v#v#v#v^#v@:V F4055555^5@/ 44 Faf4$$If!vh55555^5@#v#v#v#v#v^#v@:V F4055555^5@/ 44 Faf4$$If!vh55555^5@#v#v#v#v#v^#v@:V F4055555^5@/ 44 Faf4$$If!vh55555^5@#v#v#v#v#v^#v@:V F4055555^5@/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5555#v#v#v#v:V F405555/ 44 Faf4$$If!vh5555#v#v#v#v:V F405555/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh55555^5@#v#v#v#v#v^#v@:V F4055555^5@/ 44 Faf4$$If!vh55555^5@#v#v#v#v#v^#v@:V F4055555^5@/ 44 Faf4$$If!vh55555^5@#v#v#v#v#v^#v@:V F4055555^5@/ 44 Faf4$$If!vh55555^5@#v#v#v#v#v^#v@:V F4055555^5@/ 44 Faf4$$If!vh55555^5@#v#v#v#v#v^#v@:V F4055555^5@/ 44 Faf4$$If!vh55555^5@#v#v#v#v#v^#v@:V F4055555^5@/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5555#v#v#v#v:V F405555/ 44 Faf4$$If!vh5555#v#v#v#v:V F405555/ 44 Faf4$$If!vh5#v:V F40544 Faf4$$If!vh5#v:V F40544 Faf4$$If!vh5#v:V F40544 Faf4$$If!vh5d 5^5^55D5t#vd #v^#v#vD#vt:V F405d 5^55D5t44 Faf4$$If!vh5d 5^5^55D5t#vd #v^#v#vD#vt:V F405d 5^55D5t44 Faf4$$If!vh5d 5^5^55D5t#vd #v^#v#vD#vt:V F405d 5^55D5t44 Faf4$$If!vh5d 5^5^55D5t#vd #v^#v#vD#vt:V F405d 5^55D5t44 Faf4$$If!vh5d 5^5^55D5t#vd #v^#v#vD#vt:V F405d 5^55D5t44 Faf4$$If!vh5d 5^5^55D5t#vd #v^#v#vD#vt:V F405d 5^55D5t44 Faf4$$If!vh5#v:V F40544 Faf4$$If!vh5555C#v#v#v#vC:V F405555C44 Faf4$$If!vh5555C#v#v#v#vC:V F405555C44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5355555#v3#v#v#v#v:V F40535555/ 44 Faf4$$If!vh5355555#v3#v#v#v#v:V F40535555/ 44 Faf4$$If!vh5355555#v3#v#v#v#v:V F40535555/ 44 Faf4$$If!vh5355555#v3#v#v#v#v:V F40535555/ 44 Faf4$$If!vh5355555#v3#v#v#v#v:V F40535555/ 44 Faf4$$If!vh5355555#v3#v#v#v#v:V F40535555/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5555#v#v#v#v:V F405555/ 44 Faf4$$If!vh5555#v#v#v#v:V F405555/ 44 Faf4$$If !vh5\#v\:V l4065/ 4a f4$$If !vh5\#v\:V l406,5/ 4a f4$$If !vh5\#v\:V l4065/ 4a f4$$If !vh5\#v\:V l4065/ 4a f4 $$If !vh55a5550505#v#va#v#v#v0#v:V l406,55o5555/ /  4a f4 $$If !vh55a5550505#v#va#v#v#v0#v:V l406,55o5555/ /  4a f4 $$If !vh55a5550505#v#va#v#v#v0#v:V l406,55o5555/ / 4a f4$$If !vh5\#v\:V l4065/ 4a f4$$If !vh5 5 5 #v #v #v :V l406,54 5 5 / 4a f4$$If !vh5 5 5 #v #v #v :V l4Y06,54 5 5 / 4a f4$$If !vh5 5 5 #v #v #v :V l4X06,54 5 5 / 4a f4$$If !vh5 5 5 #v #v #v :V l4X06,54 5 5 / 4a f4$$If !vh5 5 5 #v #v #v :V l4X06,54 5 5 / 4a f4$$If!vh5#v:V l406,5N/ 4af4$$If!vh5#v:V l406,5N/ 4af4$$If!vh5#v:V l4065N/ 4af4$$If!vh5#v:V l4065N/ 4af4D$$If!vh5155g5050505#v1#v#vg#v0#v:V l406,5<55'555/ / / / / 4af46$$If!vh5155g5050505#v1#v#vg#v0#v:V l406,5<55'555/ / / / 4af4D$$If!vh5155g5050505#v1#v#vg#v0#v:V l406,5<55'555/ / / / / 4af4$$If!vh5#v:V l4065N/ 4af4$$If!vh5 5' 5 #v #v' #v :V l406,5 / 4af4$$If!vh5 5' 5 #v #v' #v :V l4Y06,5 / 4af4$$If!vh5 5' 5 #v #v' #v :V l4X06,5 / 4af4$$If!vh5 5' 5 #v #v' #v :V l4X06,5 / 4af4$$If!vh5 5' 5 #v #v' #v :V l4X06,5 / 4af4$$If !vh5\#v\:V l406,5\/ 4a f4$$If !vh5\#v\:V l4065\/ 4a f4$$If !vh5\#v\:V l4065\/ 4a f4$$If !vh5\#v\:V l4065\/ 4a f4<$$If !vh5555555#v#v#v#v#v:V l406,55555/ / / / / 4a f4.$$If !vh5555555#v#v#v#v#v:V l406,55555/ / / / 4a f4.$$If !vh5555555#v#v#v#v#v:V l406,55555/ / / / 4a f4($$If !vh5555555#v#v#v#v#v:V l40655555/ / / / 4a f46$$If !vh5555555#v#v#v#v#v:V l40655555/ / / / / 4a f4$$If !vh5\#v\:V l4065\/ 4a f4$$If !vh5 5=5 #v #v=#v :V l406,5~ 5?5 / 4a f4$$If !vh5 5=5 #v #v=#v :V l4Y06,5~ 5?5 / 4a f4$$If !vh5 5=5 #v #v=#v :V l4X06,5~ 5?5 / 4a f4$$If !vh5 5=5 #v #v=#v :V l4X06,5~ 5?5 / 4a f4$$If !vh5#v:V l406,5/ 4a f4$$If !vh5#v:V l4065/ 4a f4$$If !vh5#v:V l4065/ 4a f4$$If !vh5#v:V l4065/ 4a f4=$$If !vh5555~55#v#v#v#v~#v#v:V l406,555555/ / / / / 4a f4/$$If !vh5555~55#v#v#v#v~#v#v:V l406,555555/ / / / 4a f4/$$If !vh5555~55#v#v#v#v~#v#v:V l406,555555/ / / / 4a f4)$$If !vh5555~55#v#v#v#v~#v#v:V l406555555/ / / / 4a f47$$If !vh5555~55#v#v#v#v~#v#v:V l406555555/ / / / / 4a f4$$If !vh5#v:V l406,5/ 4a f4$$If !vh55 5#v#v #v:V l406,55 5/ 4a f4$$If !vh55 5#v#v #v:V l4Y06,55 5/ 4a f4$$If !vh55 5#v#v #v:V l4X06,55 5/ 4a f4$$If !vh55 5#v#v #v:V l4X06,55 5/ 4a f4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5$55555#v$#v#v#v#v:V F405$5555/ /  44 Faf4$$If!vh5$55555#v$#v#v#v#v:V F405$5555/ /  44 Faf4$$If!vh5$55555#v$#v#v#v#v:V F405$5555/ /  44 Faf4$$If!vh5$55555#v$#v#v#v#v:V F405$5555/ / 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh55455#v#v4#v#v:V F4055455/ 44 Faf4$$If!vh55455#v#v4#v#v:V F4055455/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5$55555#v$#v#v#v#v:V F405$5555/ /  44 Faf4$$If!vh5$55555#v$#v#v#v#v:V F405$5555/ /  44 Faf4$$If!vh5$55555#v$#v#v#v#v:V F405$5555/ /  44 Faf4$$If!vh5$55555#v$#v#v#v#v:V F405$5555/ / 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh55455#v#v4#v#v:V F4055455/ 44 Faf4$$If!vh55455#v#v4#v#v:V F4055455/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5v555H5j5H#vv#v#v#vH#vj#vH:V F405v555H5j5H/ /  44 Faf4$$If!vh5v555H5j5H#vv#v#v#vH#vj#vH:V F405v555H5j5H/ /  44 Faf4$$If!vh5v555H5j5H#vv#v#v#vH#vj#vH:V F405v555H5j5H/ /  44 Faf4$$If!vh5v555H5j5H#vv#v#v#vH#vj#vH:V F405v555H5j5H/ /  44 Faf4$$If!vh5v555H5j5H#vv#v#v#vH#vj#vH:V F405v555H5j5H/ /  44 Faf4$$If!vh5v555H5j5H#vv#v#v#vH#vj#vH:V F405v555H5j5H/ / 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5` 5 5#v` #v #v:V F405` 5 5/ 44 Faf4$$If!vh5` 5 5#v` #v #v:V F405` 5 5/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh545555H5#v4#v#v#v#vH#v:V F40545555H5/ /  44 Faf4$$If!vh545555H5#v4#v#v#v#vH#v:V F40545555H5/ /  44 Faf4$$If!vh545555H5#v4#v#v#v#vH#v:V F40545555H5/ /  44 Faf4$$If!vh545555H5#v4#v#v#v#vH#v:V F40545555H5/ /  44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5V 55 #vV #v#v :V F405V 55 / 44 Faf4$$If!vh5V 55 #vV #v#v :V F405V 55 / 44 Faf4$$If!vh5 #v :V F40 5 / 44 Faf4$$If!vh5 #v :V F40 5 / 44 Faf4$$If!vh5 #v :V F40 5 / 44 Faf4$$If!vh5 #v :V F40 5 / 44 Faf4$$If!vh5 #v :V F40 5 / 44 Faf4$$If!vh5 #v :V F40 5 / 44 Faf4$$If!vh5 555H5&5#v #v#v#vH#v&#v:V F40 5 555H5&5/ /  44 Faf4$$If!vh5 555H5&5#v #v#v#vH#v&#v:V F40 5 555H5&5/ /  44 Faf4$$If!vh5 555H5&5#v #v#v#vH#v&#v:V F40 5 555H5&5/ /  44 Faf4$$If!vh5 555H5&5#v #v#v#vH#v&#v:V F40 5 555H5&5/ / 44 Faf4$$If!vh5 #v :V F40 5 / 44 Faf4$$If!vh5 #v :V F40 5 / 44 Faf4$$If!vh5 5s 5 #v #vs #v :V F40 5 5s 5 / 44 Faf4$$If!vh5 5s 5 #v #vs #v :V F40 5 5s 5 / 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh55P555H5#v#vP#v#v#vH#v:V F4055P555H5/ /  44 Faf4$$If!vh55P555H5#v#vP#v#v#vH#v:V F4055P555H5/ /  44 Faf4$$If!vh55P555H5#v#vP#v#v#vH#v:V F4055P555H5/ /  44 Faf4$$If!vh55P555H5#v#vP#v#v#vH#v:V F4055P555H5/ /  44 Faf4$$If!vh55P555H5#v#vP#v#v#vH#v:V F4055P555H5/ / 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5 55 #v #v#v :V F405 55 / 44 Faf4$$If!vh5 55 #v #v#v :V F405 55 / 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5,5H555H5l#v,#vH#v#v#vH#vl:V F405,5H555H5l/ /  44 Faf4$$If!vh5,5H555H5l#v,#vH#v#v#vH#vl:V F405,5H555H5l/ /  44 Faf4$$If!vh5,5H555H5l#v,#vH#v#v#vH#vl:V F405,5H555H5l/ /  44 Faf4$$If!vh5,5H555H5l#v,#vH#v#v#vH#vl:V F405,5H555H5l/ /  44 Faf4$$If!vh5,5H555H5l#v,#vH#v#v#vH#vl:V F405,5H555H5l/ / 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh55i5\5 #v#vi#v\#v :V F4055i5\5 / 44 Faf4$$If!vh55i5\5 #v#vi#v\#v :V F4055i5\5 / 44 Faf4$$If!vh5 #v :V F40 5 / 44 Faf4$$If!vh5 #v :V F40 5 / 44 Faf4$$If!vh5 #v :V F40 5 / 44 Faf4$$If!vh5 #v :V F40 5 / 44 Faf4$$If!vh54555Z5\5:#v4#v#v#vZ#v\#v::V F40 54555Z5\5:/ /  44 Faf4$$If!vh54555Z5\5:#v4#v#v#vZ#v\#v::V F40 54555Z5\5:/ /  44 Faf4$$If!vh54555Z5\5:#v4#v#v#vZ#v\#v::V F40 54555Z5\5:/ /  44 Faf4$$If!vh54555Z5\5:#v4#v#v#vZ#v\#v::V F40 54555Z5\5:/ /  44 Faf4$$If!vh54555Z5\5:#v4#v#v#vZ#v\#v::V F40 54555Z5\5:/ / 44 Faf4$$If!vh5 #v :V F40 5 / 44 Faf4$$If!vh5 #v :V F40 5 / 44 Faf4$$If!vh55}55 #v#v}#v#v :V F40 55}55 / 44 Faf4$$If!vh55}55 #v#v}#v#v :V F40 55}55 / 44 Faf4$$If!vh5 #v :V F40 5 / 44 Faf4$$If!vh5 #v :V F40 5 / 44 Faf4$$If!vh5 #v :V F40 5 / 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F40,5/ 44 Faf4$$If!vh5 5H55H55k#v #vH#v#vH#v#vk:V F405 5H55H55k/ /  44 Faf4$$If!vh5 5H55H55k#v #vH#v#vH#v#vk:V F405 5H55H55k/ / 44 Faf4$$If!vh5 50 5m #v #v0 #vm :V F405 50 5m / 44 Faf4$$If!vh5 50 5m #v #v0 #vm :V F405 50 5m / 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5555]#v#v#v#v]:V F405555]/ 44 Faf4$$If!vh5555]#v#v#v#v]:V F405555]/ 44 Faf4$$If!vh5555]#v#v#v#v]:V F405555]/ 44 Faf4$$If!vh5555]#v#v#v#v]:V F405555]/ 44 Faf4$$If!vh5< #v< :V F40< 5< / 44 Faf4$$If!vh5< #v< :V F40< 5< / 44 Faf4$$If!vh5< #v< :V F40< 5< / 44 Faf4$$If!vh5< #v< :V F40< 5< / 44 Faf4$$If!vh5 55G55G5G#v #v#vG#v#vG:V F40< 5 55G55G/ /  44 Faf4$$If!vh5 55G55G5G#v #v#vG#v#vG:V F40< 5 55G55G/ / 44 Faf4$$If!vh5 5. 5v #v #v. #vv :V F40< 5 5. 5v / 44 Faf4$$If!vh5 5. 5v #v #v. #vv :V F40< 5 5. 5v / 44 Faf4$$If!vh5< #v< :V F40< 5< / 44 Faf4$$If!vh5 5 5 #v #v #v :V F40< 5 5 5 / 44 Faf4$$If!vh5 5 5 #v #v #v :V F40< 5 5 5 / 44 Faf4$$If!vh5 #v :V F40 5 / 44 Faf4$$If!vh5 #v :V F40 5 / 44 Faf4$$If!vh5 #v :V F40 5 / 44 Faf4$$If!vh5 #v :V F40 5 / 44 Faf4F$$If!vh5,5555H5#v,#v#v#v#vH#v:V F40 5,5555H5/ / / / / 44 Faf48$$If!vh5,5555H5#v,#v#v#v#vH#v:V F40 5,5555H5/ / / / 44 Faf48$$If!vh5,5555H5#v,#v#v#v#vH#v:V F40 5,5555H5/ / / / 44 Faf4F$$If!vh5,5555H5#v,#v#v#v#vH#v:V F40 5,5555H5/ / / / / 44 Faf4$$If!vh5 #v :V F40 5 / 44 Faf4$$If!vh55 #v#v :V F40 55 / 44 Faf4$$If!vh55 #v#v :V F40 55 / 44 Faf4$$If!vh5!#v!:V F40!5!/ 44 Faf4$$If!vh5!#v!:V F40!5!/ 44 Faf4$$If!vh5!#v!:V F40!5!/ 44 Faf4$$If!vh5!#v!:V F40!5!/ 44 Faf4F$$If!vh5555,5s5x#v#v#v#v,#vs#vx:V F40!5555,5s5x/ / / / / 44 Faf48$$If!vh5555,5s5x#v#v#v#v,#vs#vx:V F40!5555,5s5x/ / / / 44 Faf48$$If!vh5555,5s5x#v#v#v#v,#vs#vx:V F40!5555,5s5x/ / / / 44 Faf4F$$If!vh5555,5s5x#v#v#v#v,#vs#vx:V F40!5555,5s5x/ / / / / 44 Faf4$$If!vh5!#v!:V F40!5!/ 44 Faf4$$If!vh5~5#v~#v:V F40!5~5/ 44 Faf4$$If!vh5~5#v~#v:V F40!5~5/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5,55F5F5F#v,#v#vF:V F405,55F/ 44 Faf4$$If!vh5,55F5F5F#v,#v#vF:V F405,55F/ 44 Faf4$$If!vh5,55F5F5F#v,#v#vF:V F405,55F/ 44 Faf4$$If!vh5,55F5F5F#v,#v#vF:V F405,55F/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh55#v#v:V F405/ 44 Faf4$$If!vh55#v#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh555F55#v#v#vF#v:V F40555F5/ 44 Faf4$$If!vh555F55#v#v#vF#v:V F40555F5/ 44 Faf4$$If!vh555F55#v#v#vF#v:V F40555F5/ 44 Faf4$$If!vh555F55#v#v#vF#v:V F40555F5/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh55#v#v:V F405/ 44 Faf4$$If!vh55#v#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh545555H5p#v4#v#v#v#vH#vp:V F40545555H5p/ / 44 Faf4$$If!vh545555H5p#v4#v#v#v#vH#vp:V F40545555H5p/ / 44 Faf4$$If!vh545555H5p#v4#v#v#v#vH#vp:V F40545555H5p/ / 44 Faf4$$If!vh545555H5p#v4#v#v#v#vH#vp:V F40545555H5p/ / 44 Faf4$$If!vh545555H5p#v4#v#v#v#vH#vp:V F40545555H5p/ / 44 Faf4$$If!vh545555H5p#v4#v#v#v#vH#vp:V F40545555H5p/ / 44 Faf4$$If!vh5#v:V F405/ 44 Faf4$$If!vh5V 5V 5U #vV #vU :V F405V 5U / 44 Faf4$$If!vh5V 5V 5U #vV #vU :V F405V 5U / 44 Faf4$$If!vh5p#vp:V l405p/ 4af4$$If!vh5> 52#v> #v2:V l05> 52/ 4a$$If!vh5> 52#v> #v2:V l05> 52/ 4a$$If!vh5> 52#v> #v2:V l05> 52/ 4a$$If!vh5? 51#v? #v1:V l05? 51/ 4a$$If!vh5? 51#v? #v1:V l05? 51/ 4a$$If!vh5? 51#v? #v1:V l05? 51/ 4a$$If!vh5? 51#v? #v1:V l05? 51/ 4a$$If!vh5? 51#v? #v1:V l05? 51/ 4a$$If!vh5? 51#v? #v1:V l05? 51/ 4a$$If!vh5p#vp:V l405p/ 4af4$$If!vh5> 52#v> #v2:V l05> 52/ 4a$$If!vh5> 52#v> #v2:V l05> 52/ 4a$$If!vh5> 52#v> #v2:V l05> 52/ 4a$$If!vh5? 51#v? #v1:V l05? 51/ 4a$$If!vh5? 51#v? #v1:V l05? 51/ 4a$$If!vh5? 51#v? #v1:V l05? 51/ 4a$$If!vh5? 51#v? #v1:V l05? 51/ 4a$$If!vh5p#vp:V l405p/ 4af4$$If!vh5> 52#v> #v2:V l05> 52/ 4a$$If!vh5> 52#v> #v2:V l05> 52/ 4a$$If!vh5> 52#v> #v2:V l05> 52/ 4a$$If!vh5> 52#v> #v2:V l05> 52/ 4a$$If!vh5> 52#v> #v2:V l05> 52/ 4a$$If!vh5> 52#v> #v2:V l05> 52/ 4a$$If!vh5> 52#v> #v2:V l05> 52/ 4a$$If!vh5> 52#v> #v2:V l05> 52/ 4a$$If!vh5> 52#v> #v2:V l05> 52/ 4a$$If!vh5> 52#v> #v2:V l05> 52/ 4a$$If!vh5> 52#v> #v2:V l05> 52/ 4a$$If!vh5> 52#v> #v2:V l05> 52/ 4a$$If!vh555#v#v#v:V l40555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a$$If!vh555#v#v#v:V l0555/ 4a25Dd5%\ |  C XA@osisoft_logotype_with_pisymbol bb4wrn4n64wrnT d@&`&M rT"N5L*6{#b;d& @]n]jPthX~3X-  ` ڕL/뚾V7/ <ʷ|j kz>s <5֘R~5-giz0̳rvz={2_7"=6RXgծ܃"/@9~ٸ@]dI=ram2C*-Ե+g:Hc_(6SLkAv)Q˽\1 9n`}=՗@؋yF)1(ֻSH(RlD!@dq#Ś^u XzIܐ`mhx=D&v"^@`q)rL)j<"7-GCx|54mǒ/"~Oa3=Ћz9|O͠XM!h": 'WB$s6Giq ^?>ڝ"Dmh;)`oVl*3p;#T4{RTTwbSr 3b7_$hX#؋z䒞#+ 6p=P2_*. 4ֽOy\HBOK H@ѠFv8;eӱA-셇^bƗܼW5.8|<tz{%.g {l! @)Qy:븊`TQ >iBMV#+k`/F&@%ijXE_k$z叽=":X1"c7_jhU_Gy 1^ >_ 釽!f* ؝ L{W}"b7_Ikl=oUlsOU%³-xcOQ}r̐@P' 2vOԕb ~.+v޾|ZLW mfH]x`oxSArh3Si{,|qPc/ꢲ R {şI\1Pcm-9C6Ҽ{9nHV\!PboOߠdW{P{> {Æ"ladj']YKxX0žY}kg-0fC84{;K&T*eM[e˙Էؤ4{C4;}&ik0}Xʊ6`G\TRU XyF/F=z]$4{6!Tf& GgajRȰqթTd{H;|&ڦ'K=}KAŦK@ 55n)ze4^Rʻ7Rƌ DވYJ+X&ki} aBRep>ʖSP3+wMVKEPVIJA*Np]vR?3ls]..=Cۀz su102J)Bh}eҙ́f|X*5t: {մ< =MWVτjMQYgQP(xd:"9qbowN/?a>ktSk"}%}9}Ydx7bOg]K"󮫵ӧF_:~$ I}(M)o0 úA>ۧOd%nR(gvj'vnΟǫ_XU42"ue [H zRJn*מƽ[co$ߺPA Q&|Y&~^cOOnɔ\7ބ{{|טC;)/IfH NzO7p`LI.2_q*Uaoȗ)۾Gӻ=t>ث"^b< T#d: l_Vzd}*J{sOMHzܗ "|kWqPWδI{C~Ʋ|=<R7l.hzpߣwhgqG}~# ZUxĽxEk`mcCP4zmmw&yx yqE/#ܜ7[$ӷH2GiVS[1v jQ~c㵿Lלu?,d [#>ktW2G9 >@ vRb/^*?oy=w<'~_n L$roГ`1g: _doH|$|T(>˖{Ws>Icgc@Su1W{n/oGDy$h؛|3N ""~+*6mvv :>ҷbx `h& gM >Y/o`(  "',~U.-{2ﯳԭM q7'zĹ>RlрדhրuG*=OYV힩.yTl:W7|WDAF]z׌fOF,^lkijVytէI eA쭅y-_ޘa+# ©Y׎AZBn]Wʃi;2zy6ugV?Z vG@|9/Û={}^ř i|`e6{b/vRgNÎ>d*t{Ӹ- ^zXIgoK >O^ɓ{J%wHk荼lot<ƞ O# _[*σO Zď3\d2A/zVTVXWʠ[fec~[uv ީ7PYirԽ~־hۣ4u}z.+w{b(NYAw8S2*$~q!3*KF >53@\=B TRݛW-F &,Ykg]fK$ξ$~Bfi$ʍ[ȋHd'0ڑQRGyHB.*+ ||'h r̬oS?E?c jIs@8AK=㟿ʹǠw/GOW9aդ`.XB9SzyCJ <Ǐeq&wdqNA)?."w- Q9D;xHʾ##m)( GX@˺Oc} Y-}5%NHz1ڞWAFčb?\/,+W9j=OKJaذ~~'ž%w OsЫՆ,sμk"w$ǞC^bƚUCB`Tcw Ķ[W9q$=w- qZ)Mh(8ȟ 0)x=#}C?FA}%%A}TqI߁ L*~÷G*ƏgqOJ'8:kE6}E ];$?xFni$q*|JʪXAD?PLb}~٣wŌسZ:xagߢxZ wmPȜREe.gäG{jCsFyK }wR>}_H/Ag%!R@<,m| ܾZ^aP6z 4ru7Sî gY' A ^S|5|{EFT'O>LT bb5a\2ԝ0nV{ޒO%V@Zn{V@j>M]D++# 6c9E^;{7e׶ XxW@$Bum#S(8N5k"a'\l Jv*|PvבmAV] }gZ}ƕDⵦnf(VnڻkKxXL|0 TErGv(l܍cykE⣶[gSunipWjbo Wc?L 3`HKj7;neToyMU;~M6 Axs1N&%#oYsB8z 9Ks凉̘aCE5K WDo}ոhv'@よ/^Vnu} /Z–"K}RNƑDc3˼Lpadj9m-L~ J>2)|$`kPn@tA|ڸ_NG%~uVn_Yd$ӒDG!8i툋d8[ "cSl~—jCM-5v0C%4A.SeZ_s6 3\,, "&_8ZUYg۱]ZEbײ%vry? vB1oR >N:sQV^\H2hcvt2F.B UmYmB=!lyzmz=rE' "K7fiӯgx_eg~joeBl_lQpR[3$cc\~Hb1KW<EZp])J6HU[m$ܠnÒB{=jcyo DZ~8uUcuF• KVu6˖;'S,K%{.h#/3>tLؑǑVb4b4lbZmya Ŝb0ڊgoSRU[տi{oy@ُg7E|L׺؞2񕠬a~W)\@;kO}KE's [dpSW?&bﺌ ID,ht1%_*i׍O|kWv,47OmoVƲpʼn˾қ s2 Px6u+y%jwM]eT%~U;`WG?*}0Z:塳G~U}bd%[ R{TГ\ثz9X'^}(PpZI\EJ%e;q^Pǟ۟V?=o cShW!t[*to]+H/yd!K0Ţ^F}ߨS6W5Gݡ#.pA_hU;n' k=(\ػڮr[׉խ&bt(K`o_E͌փEU5EI&OZա { mgXU_?NjDߟSWCߤ#:սHC4K.ݐݶy:cjog6ޒc`QT.~>ɫabS]!6͹aź=ǭW3%u'PzQI{Ӧ˷z7B/M,-zY `ˣtD4ZjgM[j2S^Mr'L=$o-a}\t͋qH0dY@QYu biXMӞd/`:޶7hl*ժdDZkj=½H1 Oe,\Үu3F7F?usOBZ:5dtiO~FJWnuy3j٢;s29l |oԢIZBg z/f4acmp8:s`xYuk \SZ@Ɨ']I}9r nv+> 4NgxdyN͑/3`#GQE5ʍ >F>ZfmyƓLnǴh&*L>$)?zEooUB q?E(JLh:R99x>f“Ls~[-c> [:<|q |Co%%]!%T)!j+Ky?q~{.fFfj+z=6З0>a;=~7#A`?S= ՆI*^mcֻdѡp@ƬF:[F؜%[Puc;"fe5bd9^J\c8yJYok s ҡN5[0n%WFE֬ =o':PEJ }7w5fô#ɏ[~,l |WcC^o_Fb;Cgcm )3$s/)æY}'~8o ]%ȵ_~nֳ-Ĭd۵4fYE!@dm~:_?6gplp7v*d'4[WXAG[ݻ[=)l=1tIG|{ZZ);e{?ӉCj,om):vї-4pɁ&Ls&&PfE{ \6g rz;ཎ2^Xqs! p|LNz˲Kk۰C-F 8O/sk^dسKtY?6Bѷ9X =zaPFUǸ;Wz*YQuժ*>=G5Xto9DQl]p|t՘ ~ oo ?nl . |}+t֤H!T_V̓uS-eGБntqFb,%Llw -u@xdLhs"US%X釀 ~k6{Ճ9+y!zK% ч>[`1w&-[-K% 2tFSٺ岤d:!'F#κzGF SJ ye@}RkiiAo6yС`ͭ,bHE+\aTI|- x`VZ.(;RT؉}Wh{ЦMdĨ3^Kcy蕢3DAWM2T or9#{Zޤ"A}Df\7d¸S pFpk(SE|ekGkmW[~/"uˉ>H p`oH%(n}DC|6KÆ6z>ğY@%Ѹ6K?k< :Vu!nڨ^y;)Z2ְ҂^=~?ę:C'"<~N-Jz:B Sb 4V bAP$pC%,/HMeČ]d1]M@`GFNGx{s;*U ?/,un _P軽Yo&91dZw5 K#X_-GAOCji^/3<6K?@ uer@R F}$3!;$0 oyJлb8>g2쁶{P|6zPrO?{}#C6XA⺮'ⶣ΍?ѱ >ęDŽJ:~DIK!\@}W(6X#? [9r}{ yW6au[;9D:3K}61i2o-VCYUr 0yznR>T":& 6TՉsO=2}fw"OԸn[Bp"? ><,ubyW8&W\/ P{i&f`d]X~| ,F+ /BN\Vsxg0UT)xs#+' Zu;~:<һ%VdyXL@8s#w-C_-7+JO-4[9dn3exlp\ceU ^ث~Js0Y ?{w,}p)O#Cわ&kWıor^%&&,&%Uw7Ccq$pn)^l;7)Cc9=pw2̦vkջnmf)k]AMR7EutݧJQ5sȥxo쁉z~WvqXt.bcҦr[Qܩ (wvr4/cJ8=0>$_ml\}gk^dD|E6v~b?jm mSl[Jwbr|H&L5>!S Cȑ\'*V \! %mRFdE imO? _HD pL Y2 x8 >uhVcl.`LkAoG``D gGϮuO\/5ZoOYQGK4!0"œ+ jyXƭ7{v*gqcmP1މgDE)jn3aTSq'&Г{̚_P7"e]Wǟmדqۍ.s[њ/1r)avFX1N /hIx{:b$`7/ tA#; HfaM$+{_'~@M>f|s(Ԣ[bW˷csZ6Kߋ`BlpxMšzq{`l zg=9$0 wwiwc7_59 opB>f}|W{$ @zORfj*ĄYxxÉΖl_ &'nPq e:IL/G߸^Ld=@%_f\&-)h!eᣮ<̠ HH H:iҭ]K$>ء 10{PFƮc]s:x-Es9ص|̲k.1S[7Ǭ,אW0r9r+=NY΁@t~(Dfo *ܚM'*N^b{8PO!3_V}3.={`Wmp̙5wvKw=1#7}\ݗ6=|ӦצMoim3s2)]VIENDB` Dd 9**   C \A Dosisoft_logotype_without_pisymbolb ȔvO6 /n ȔvO6PNG  IHDR7(MPLTEU$$U$$IIUIImmUmmUUU۪U$$U$$$$$$U$$$$$I$IU$I$I$m$mU$m$m$$U$$$$U$$$$U$۪$$$U$$IIUIII$I$UI$I$IIIIUIIIIImImUImImIIUIIIIUIIIIUI۪IIIUIImmUmmm$m$Um$m$mImIUmImImmmmUmmmmmmUmmmmUmmmmUm۪mmmUmmU$$U$$IIUIImmUmmUUU۪UU$$U$$IIUIImmUmmUUU۪UU$$U$$IIUIImmUmmےےUےے۶۶U۶۶U۪UU$$U$$IIUIImmUmmUUU۪Un.bKGDH cmPPJCmp0712HsRIDAThC[( M1I/bz{ ۋ%Y! }~Ι3!\tu1{Dמ~ ]ϖG)m+}ώnu_֞٠ĉez Ffj7ѾwXݮFgv;Acݷ4khp66WcMO`On6VGt>趕Q~ QeOzbT0<&]Xb`gJ`0@" ճLXXD,Yq]iF]Hd rTfq_3"5 5EH^aJh S zjN;+.,6kavXð ku\>8;')+XeҌNk{udrfXrr+?K+}ϜG)z..Pۍf[&gJhUwfYW۰xcRV@M.Wk{.8򱂢%2 FW&_@nj\3q|A KîFGP[ bi /-Iӫr3^rq(."ű#pcM1 Z|}T$L)p$4:QccvI Te?RB&u)]r_~+'FX0jSQ _ۣ+W/Zl?͛3͘bX1e*GVF  X4e ;8}y'UU ОUF1;i,{| Q8i wd::79kW--v %Z g0 f>is[?+yl-XVW*.6{RVobbUv 6YEne h;p  kq1'sԑZOekf3XUGo.(@ 2.omNc8^~.$*6wa&A̬ٞdHeV!ְxBەJ+!XoQ~17:lgXj*eD|TVs`+չMz>b;c=Ꙫ?(` w5 7pîz'-(i ` s00 6.8y:0Iac5N֬a0iQi[B IJ Sq+8sdWJSIculLJOM+:*]LZ%@ۀy+ꅫ~G ЛhC%8i>'%R 2|_u) $N&T8S׸yLzzv%3g Uʤ:(Y.vf&K:'c PȠ&KMQ)8{O,, i7?@{L8_$JOzmWi\i\R|`$W`%JnoQ_JWr,ҦDw`JiXY_sf.g$Y9]5[$$9˛YmU`zk.`zvgHH*)P#Sri{=țHTV8δ;LUZiLN ı~h5_kc"Nі!>wD|Dϸ=Sc=mmwՎѡBzu181M[~/i?L,6BJ?uWyɃ^k΅QS1;I ZLsֈwftpqm"Ŧ:NDow?8{R䜂>}KU7ku>{2jTr|gpvk svY ܗ?pkиӺ~@05-xh>ރw[IENDB`@P@P Normal dxB*CJ_HmH phsH tH V@V Heading 1$d1$@&5CJ$OJQJZ@Z Heading 2$dx@&5B*CJ OJQJphb@b Heading 3$xx@&&5CJOJQJ_HmHnHsH tH uff Heading 4$xx@&)56CJOJQJ_HmHnHsH tH uL@L Heading 5$x@&^ 5OJQJ^^ Heading 6$$d@&5B*CJ0OJQJph`` Heading 7,Append,appendix & F!@&5H!H Heading 8,Appendix @&@ 1@Heading 9,append @&DA@D Default Paragraph FontVi@V  Table Normal :V 44 la (k(No List 4O4 BodyText ^0U@0 Hyperlink>*B*hOhTitleDoc$$8a$)56CJ<OJQJ_HmHnHsH tH uNON TOCHeading $h(h@& ^h`XOX TableHead$d<<5B*CJOJQJphNOBN TableText$d<< B*CJphDORD Copyright $a$ CJOJQJ@OQb@ CopyrightAddressCJl@lTOC 1 ! dxx/5B*CJOJQJ_HmHnHphsH tH u8@q8 TOC 2^5uZZ TOC 4 "" dx^B*CJaJmH phsH tOt ?Note:d<<$d&dNP^B*CJOJQJ\phB'B Comment ReferenceCJaJb @bFooter K%%%]%^%"5OJQJ_HmHnHsH tH ulOl>CompTxt*$ hd<1$^`5CJOJQJmHnHuXOX ListBullet & F d^ B*phPP File name%6CJOJQJ]^JaJmHnHuZOZ CompTxtInline'5B*CJOJQJkHmHnHphuF@F Header! K%d 5OJQJF"F TitleFooter"$a$5CJ0\aJ0\2\  Comment Text#dxB*CJaJmH phsH 6@B6  Footnote Text$@&Q@ Footnote ReferenceH*NYbN  Document Map&-DM OJQJ>)@q> Page Number5CJOJQJ.@. TOC 3 (^.. TOC 5 ) ^ .. TOC 6 *^.. TOC 7 +^.. TOC 8 ,x^x.. TOC 9 -@^@FVF FollowedHyperlink >*B* phDCD Body Text Indent /^.X@. Emphasis6]VB@V Body Text1dx^B*CJmH phsH R^"R Normal (Web)2dd[$\$CJaJmH sH RO1RComp InlineTxt5B*OJQJkHmHnHu>> Picture4$d^a$R ListNum5 & Fd<<>Th.Tf^` B*ph@b@ BodyTextIndent 6^>Or> CompTxtIndent 7p^pRqR Appendix18$ & Fd1$ 5B*ph@O@ Version9$a$6CJOJQJO CautionR:$d%d&d'dNOPQ^5CJ8P@8 Body Text 2;$a$FF Note CharOJQJ\_HmH sH tH ROR ListBulletIndent= & F# h^\\bef CompTxt Char+5B*OJQJ_HmHnHphsH tH uHH [ Note Char1OJQJ\_HmH sH tH  %2@L_g /78?@.10- %2@L_g     [ 3X|;@ Low C!Z%0:Erd2w&Ο9& [  7 m   ! 2! ^! ! ! !  " 6" b" " " " # F# v# # # # *$ V$ $ $ $ % ARXYZ[ms-jkz*+0B 2g=k 4 e  Y . x . d  @ 1 ^1~Fs3a!MwHr!`SHN4n:3\ A$\  }!9""###$$?$F$i$$$$$$$$$$ %%%\%]%s%w%x%%%%%%%%%%& & &&&&)&O&P&`&l&m&{&&&&&&&&&&&&&&&' ' ''''9'='>'W'Z'['''''''''P(a(***5---.)/X/00-2D2222333333 3 3 3 3 33333345(7Z7777"8X8888+9`9}99::::/;Q;;;#<>8>E??/@@ AB@CDD*DdDDE$E GG#HHHxJJfMMNJNN-O{OO`PPQ QRRRRSSSWXXXXXX[[9\\)]a]v]|])_<_ab'bddf9gBgKgTg]gggg9ijj%m&mwmmmmmmmmmm%nnnnnnnnnnnnnooooooooooooop/p0p@pdpppppppqqqPqcqqqqqqqqr r r rr1rDrErVrtrrrrrrrr sss(s@sAsBsMsesfsgszsssssssssttt&tDtUtVthttttttttttttu%u&u'u7uTuUuVufuuuuuuuuuuuuuvvv$vNvOvPv]vvvvvvvvvvvvw%w&w'w1wTwXwYwgwwwwwwwwwxxxx3x4x5xCxhxixjx}xxxxxxxxxxyyy8yKyLy]y|y}y~yyyyyyyyy z(z;z?@N\^_`DL3O>{HTU 5ETf| /JB* U JTs $/9:@i(QRSn,NOPfHk2[ 7|29abj$(2ABIJ{|}!+,-PQRZ[_ijkoR\]J.kl /.LM3mz                     , E ] ^ q y {         0nD7a%&9DEZfg|]_  %-NOT\}~  5!"4"""""""""""""###$&&&&'' '.'4'5'='_'i'j'q''''''''''''''((( (.(:(;(D(f(l(m(u((((((((() ) ))5)>)?)Q)k)v)w))))))))))))))))***!*C*M*N*X*r*z*{**********-\01;2_222222222233,3E3F3^3y3z333333333344!47484O4g4h4|444446666y8%99::y;{;|;;=@1@F@ABE.HIItK L L L LMMMJOOO?PPQDRRRSSSTTTTUOUPUcUUUUV:VLVVVV WW^WkW~WWWSXgXXY[(\\\#]F]X]'^1^7^^__@_w_F`aabbMb~bbbccd5dDdefffChhhhjjkk|llllxmmmm=nennn,oLoaooooooKq}qDrcrrr ss~ttNuOuvvwwwwwyy`ztz{{{{{{{M|N|S|p||||;} ~ ~~~~~~~~ABC9:D|}ɅЅх؅م!"+DfgrɆ݆"3XYam/0:N͈̈؈$%0H݉މ (4WX`r܋HRabj#UV^ώЎ؎ 67>LZYKno۠MNPlv=>B=>HZt\]_NOR*`lOl~ȭԭ (@>ABCXMж2G:lǸϸ>hع.COĻͻ-P޽569!KO|ǿп0EU^jqrt#$&WHIKbceXY&789i~#MNTabc|z(56=MNOW|}123CP)no  :PQU789YZ/<=>I45H)] JW^_aD568OPRfoSxa+fp3G < 9QZTw   L V e        TUXwxz<K-7aqx18Y/0opu  ' 8 F T b x       u!!!!!!!! #$Y%Z%z%&'())**z.000022 3N3X3^3_3k3m3n3x33333333335-5F666 7X99::::;.;><r<<<=I=y>>>???@AIAByBCCDD[EEEEGHKK\NkNNNNNNNNNNNPP?QZQQQdRRMSS8UbUUpVVVVVWW%WXWYWWWWWWWX0X1X2X5YYZZ\\R^^`Ra\bPccpdqdrd|dhhjkSmEoooooooooooooopppppp#q$q0q>qFqqqqqqqqqrr8r9rBrQrWr}r~rrrrrrrsssssssssttt+t-ttttvvvvv#w1w2w>wxiyzzTzdzrz{ |+|@|U|n|||C}}~~%&/ك  FGPR{|ńDŽNOVXjABKM{Ō|~  Î<=BJK^ӐԐ%&?vw˒̒͒ϒĔBYv(,ΜϜМӜΟ$%uvwxȠҠܠݠ #$%&'4<>?@ABCDEFGHI\]js}ҡ2Oefgh!"#$ABV`jt~ǣȣɣʣˣڣ3Jʥ˥ !ĦŦ)6@MNTVXʧקا٧ڧۧ *+E\$O4\]ҪӪԪժ,6CMWblwx~īҫݫ $&'()*+,-./01BCPYcnoάEo 3XZϮЮ)*+,IJ^pzɰְװݰް(6AN[hijklб!8fݲ,-.TdzCkҴӴabǵȵ kmoqsuvwxyz{|}ȶжٶ۶ܶݶ޶߶()Ryķ7LMNo 4>?IJT^hiwy{}¹ɹ˹̹͹ιϹйѹҹӹԹչֹ  '>nʺ>?@eŻƻǻȻ  *45:EKMOQSTYdegikmn}~μԼ޼߼ *+,ֽ׽[^%&*9MWakuv{ֿ̿$%:@FG\bhij ./mnop     !"$%&()89>IOPejpqXYZ[jko~  ./4=CDY`gh} "#?y{ %&ZK~;<PZeoz+-./01?GHIJKLMN_`kqxBw$FG{|}~    !,9:;<=JQSTUVWXYZ[\]^op}$%&Jlmno)*4>HIfhjlnpq<v&Z[\uvwx  *789:;<DFGHIJKL]^kt~jklm+,-.<DMOPQRSTefs|6q2UV  MOQSUWXYZ[\]^_mx/\:jkl*45?@JT^_wy{}<Gavwxy Rvw#-7AKUV &,./01BCL[kst.`  8N|$%yz{|?ABPZfgv|~RST  '(=GQ[eopL&GH xz|~()*+f0:DNXY ,-IJjyz{| "$&()3AMNOPXdfghiz{#]^~#%')+-./012345CMWcdefqyJ|}~?C\89exz+ v  c k J V % & M d       -.145Q]^t,-0hikq}~  + 45NYZm|}&'0YZ[lqx>?KNjkwz*+7:YZfi9:FI\]im),;<HKablo&)_`jm!$deor%&13456BCDVWXYhi  +,-./0?@ABCDhijk23456789:;VWXYijklxyz{|}'()*VWXY  . / J K W X e f g t          009000000R0R 0R 0R 0R 0R 0R 0R 0R 0R 0R 0R 0R 0R 0R 0R 0R 0R 0R 0R0R0R00000000000000(0(00(0(0(0(0(0(0(00000(00000000(0000000000000000000(0(0(0(0(0(0(0(0(0(0(0(0(0(0000(00000000(0(00000(0(000(0000P000000000000000000000H0 0 0 0H0 0 0008!08!0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 10H00H000H000H000H00H0000000000000000000000 0 0 0H0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 000H00000H000000000H00000H00000000H01010100000000000000000S000000000000000000000000000000008 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 0808 08 0< 08 0808 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 0808 0808 0< 08 08 0808 0< 08 08 08 0< 008 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 008 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 008 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 008 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 008 08 08 0< 08 08 08 0< 000000000H0008 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 008 08 0< 08 08 0< 08 0808 0< 08 08 0< 008 08 0< 08 08 0< 08 08 0< 0000 0 00 0 00 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 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 000000000(000(00000H00 0 0 00H00 0 0 0 0 0 0 0 0 000(0 00 0 0 0 0 0 0 0 0 0 0 0 0 00 0 (0H0 0 000000 0 000H0 0 0 0 0 000000(0 00H0 0000 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0H0 000(0H0 0 0 0 0 0 0 000H00 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 0000000H0 000H00H000H0 0 0 00000(00B 0B 0B 0B 00(0000 000000000(0000000H00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00H0000000000H0000 0 0 0 0 0 00 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 0 0 ,0 0 0 0 ,0 0 0 0 0 0 0 0 0 0 00 0 000000000000 0 0 0 00000 0 00000(00H00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 000H0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 00 0 000000008 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 00 00 0000001010000008 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 00000000000000000000 0 0 00H008 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< H008 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 0H008 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< (00001008 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 0< 08 08 0< 08 08 0< 08 08 0< 00000000000000+000000000000000pL000H000000000H000000000700000070707010707070707070700000H000700H000H000H0000H000000H00700H00H000H0000H0000H00000000H000000H0000000000000000000000000000 0 0 0(00(0008 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 08 08 0< 0008 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 0008 08 08 0< 08 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< (0 0 0(00 008 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 0(000(0 0 0(00000(0 0 0 0(0 000008 08 0< 08 08 0< 08 08 0< 0(0 008 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< (0H0 0H0008 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< (0H00H0008 08 0< 08 08 0< 08 08 08 0< (00(0 0 0 0 0 0 0 000000000000000101010H010@ 1010@ 10@ 10H010# =0# =0# =0# =0# =0H010# =0# =0# =0# =0(0000H0H00H00H0H00H0000 0 0 0 00 0 0 0 0 0 0 0 H0H00H00H00H0H00H00H00H00H00H00H00H00H0008 08 0< 08 0808 0< 08 0808 0< 08 0808 0< 08 08 0< 08 08 0< 08 0808 0< 0H000000008 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 0808 0< 08 08 08 0< 08 08 08 0< 000 0 0 0 08 08 0808 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00 0 0 0 0 00 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0H00H00H000 0 0 0 00 0 0 00 0 0 00 0 0 0 0 0 0 0 0 00 0 00H000H00H00H00H0H0H0H000000000000000H00H0000H0:0H00H0000H000H0000000H000000H00H000008 08 0< 08 0808 0< 08 08 0< 08 08 0< 00H000H00H0000100H00H00H000000H000H00H0000:00H000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 000 00000 0 0000 0 0 0 0H00000w*0h0H0000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00H0 00000 0 000 00(00= 0= 000< 0< 000< 000? 0(00> 0> 0> 0> 0:00000000000000 0 0 0 0 0 00(00(000000 0 0 0 000000 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0000(00H00H00H000H0000c000000000 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 0 0 0 0 0 0 0 0 0 0 0 0 000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 000000000000000000000000000000000000 0000000 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 00 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 000000A 000A 000000000008 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 0< 10100007 07 07 07 008 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 08 08 0< 0 0 000H008 0< 08 0< 08 0< 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 0< 08 08 08 08 0< 0808 0808 0808 0808 0< H00H008 0< 08 0< 08 0< 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 0< 08 08 0< 0808 0808 0< 000H00 0 0 0 0 0 0 0 0 00 00 00 00 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00 0 007070700H00 0 0 0 0 0 0 0 00 00 00 0 00 00 0 00 0 0 00 0 0 0 0 0 0 0 0 0 0 00 00 00 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 00 00 00 00 0 007070707070700H00 0 0 0 0 0 0 0 00 00 00 0 00 00 0 00 0 0 00 0 0 0 0 0 0 0 0 0 0 00 00 00 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 00 00 00 00 0 0070707070700H008 0< 08 0< 08 0< 08 08 08 08 08 08 0< 080808 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 0< 08 08 08 08 0< 0808 0808 0808 0808 0< 0H00 0 0 0 0 0 0 0 0 00 00 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00 00 00 0 0H00 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0H0 0 0 000 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0H0 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 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 0 0 0H0 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 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 0H008 0< 08 0< 08 0< 08 0< 08 0808 0808 0808 0808 0808 0< 0808 08 0808 0808 08 08 0< 08 0808 0808 08 08 08 0< 08 08 08 08 08 08 0< 08 0< 08 0< 08 08 08 08 0< 0808 0808 0808 0808 0< 0H008 0< 08 0< 08 0< 08 0< 08 0808 0808 0808 0808 0808 0< 080808 08 0808 0808 08 08 0< 08 0808 0808 08 08 08 0< 08 08 08 08 08 08 0< 08 0< 08 0< 08 08 08 08 0< 0808 0808 0808 0808 0< 0H008 0< 08 0< 08 0< 08 0< 08 0808 0808 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 0< 08 08 08 0< 0808 0808 0808 0< 0H00 0 0 0 0 0 0 0 0 0 0 00 00 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 0 00 00 00 0 0H00 0 0 0 0 0 00 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0H00 0 0 0 0 0 0 0 0 00 00 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 0 0 0 0 0 0 0 0 0808 0808 0808 0< 0H008 0< 08 0< 08 0< 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 0< 08 0< 08 08 08 08 0< 0808 0808 0808 0808 0< 0H008 0< 08 0< 08 0< 08 0< 08 0808 0808 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 0< 08 0< 08 08 08 08 0< 0808 0808 0808 0808 0< 08 0< 08 0< 08 0< 0H008 0< 08 0< 08 0< 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 0< 08 0< 08 08 08 08 0< 0808 0808 0808 0808 0< 08 08 08 08 0< 0808 0808 08 08 0< 0H008 0< 08 0< 08 0< 08 0< 08 08 08 08 08 08 0< 0808 08 08 08 08 08 0< 08 08 08 0< 08 08 08 0< 08 0< 08 08 08 0< 08 08 08 0< 0H008 0< 08 0< 08 0< 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 0808 08 08 08 08 0< 08 08 08 08 08 08 0< 08 0< 08 08 0< 0808 0808 0< 0H008 0< 08 0< 08 0< 08 0< 08 08 0808 0808 08 08 0< 08 08 08 08 08 08 0< 08 08 0808 08 08 08 0< 08 08 08 08 08 08 0< 08 0< 08 08 0< 0808 0808 0< 00H008 0< 08 0< 08 0< 08 0< 08 08 08 08 08 0< 08 08 08 08 08 0< 08 08 08 08 08 0< 08 08 08 08 08 0< 08 0< 08 08 0< 0808 0808 0< 0H008 0< 08 0< 08 0< 08 0< 08 08 08 08 08 0< 08 08 08 08 08 0< 08 08 08 08 08 0< 08 08 08 08 08 0< 08 0< 08 08 0< 0808 0808 0< 0H008 0< 08 0< 08 0< 08 0< 08 0808 0808 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 08 08 08 08 08 0< 08 0< 08 08 08 0< 08 08 08 0< 00000000 0 0 000H000000U0H00H00H00H00H00H00H00H00H000x001008 0< 08 08 0< 08 08 0< 08 08 0< 008 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 01008 0< 08 08 0< 08 08 0< 08 08 0< 008 08 0< 08 08 0< 08 08 0< 08 08 0< 01008 0< 08 08 0< 08 08 0< 08 08 0< 008 08 0< 0808 0808 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 08 08 0< 000 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 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 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 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@0@0@0@!0@0@!0@0@0@!0@0@!0@!0@!0@0@0@0@0@0@!0<{00 h2@0@0@!0@0@!0@0@!0<{00 x@!0<{0!0 H3@!0<{0#0 3@!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 8@!0<{0/0 8@!0<{010 p@!0@!0@0@!0<{010 p@!0@0@!0<{030 @!0@!0@0@!0@0@!0<{070 @!0<{090 P@!0<{0;0 @!0@0@!0<{0;0 @!0@0@!0<{0=0 @!0@0@!0@0@0@0@0@!0@0@!0<{0N0 @!0<{0P0 Ԉ@!0<{0R0 @!0@0@0@0@0@!0<{0S0 (@!0@0@!0<{0X0 @!0<{0X0 @!0@0@!0<{0Z0 w@!0<{0\0 w@!0<{0Z0 w@!0<{0\0 w@!0<{0^0 x@0@0@!0<{0\0 w@!0<{0^0 x@!0@0@!0<{0_0 ,x@!0<{0`0 Hx@!0<{0b0 x@!0<{0_0 ,x@!0<{00 ވ0ԙ{0H00000000000000000;0000000000000000H$0000 0ARXYZ[ms-jkz*+0B   }!9""###$$?$F$i$$$$$$$$$$ %%%\%]%s%w%x%%%%%%%%%%& & &&&&)&O&P&`&l&m&{&&&&&&&&&&&&&&&' ' ''''9'='>'W'Z'['''''''''P(a(***5---.)/X/00-2D2222333333 3 3 3 3 33333345(7Z7777"8X8888+9`9}99::::/;Q;;;#<>8>E??/@@ AB@CDD*DdDDE$E GG#HHHxJJfMMNJNN-O{OO`PPQ QRRRRSSSWXXXXXX[[9\\)]a]v]|])_<_ab'bddf9gBgKgTg]gggg9ijj%m&mwmmmmmmmmmm%nnnnnnnnnnnnnooooooooooooop/p0p@pdpppppppqqqPqcqqqqqqqqr r r rr1rDrErVrtrrrrrrrr sss(s@sAsBsMsesfsgszsssssssssttt&tDtUtVthttttttttttttu%u&u'u7uTuUuVufuuuuuuuuuuuuuvvv$vNvOvPv]vvvvvvvvvvvvw%w&w'w1wTwXwYwgwwwwwwwwwxxxx3x4x5xCxhxixjx}xxxxxxxxxxyyy8yKyLy]y|y}y~yyyyyyyyy z(z;z?@N\^_`DL3O>{HTU 5ETf| /JB* U JTs $/9:@i(QRSn,NOPfHk2[ 7|29abj$(2ABIJ{|}!+,-PQRZ[_ijkoR\]J.kl /.LM3mz                     , E ] ^ q y {         0nD7a%&9DEZfg|]_  %-NOT\}~  5!"4"""""""""""""###$&&&&'' '.'4'5'='_'i'j'q''''''''''''''((( (.(:(;(D(f(l(m(u((((((((() ) ))5)>)?)Q)k)v)w))))))))))))))))***!*C*M*N*X*r*z*{**********-\01;2_222222222233,3E3F3^3y3z333333333344!47484O4g4h4|444446666y8%99::y;{;|;;=@1@F@ABE.HIItK L L L LMMMJOOO?PPQDRRRSSSTTTTUOUPUcUUUUV:VLVVVV WW^WkW~WWWSXgXXY[(\\\#]F]X]'^1^7^^__@_w_F`aabbMb~bbbccd5dDdefffChhhhjjkk|llllxmmmm=nennn,oLoaooooooKq}qDrcrrr ss~ttNuOuvvwwwwwyy`ztz{{{{{{{M|N|S|p||||;} ~ ~~~~~~~~ABC9:D|}ɅЅх؅م!"+DfgrɆ݆"3XYam/0:N͈̈؈$%0H݉މ (4WX`r܋HRabj#UV^ώЎ؎ 67>LZYKno۠MNPlv=>B=>HZt\]_NOR*`lOl~ȭԭ (@>ABCXMж2G:lǸϸ>hع.COĻͻ-P޽569!KO|ǿп0EU^jqrt#$&WHIKbceX&789i~#MNTabc|z(56=MNOW|}123CP)no  :PQU789YZ/<=>I45H)] JW^_aD568OPRfoSxa+fp3G < 9QZTw   L V e        TUXwxz<K-7aqx18Y/0opu  ' 8 F T b x       u!!!!!!!! #$Y%Z%z%&'())**z.000022 3N3X3^3_3k3m3n3x33333333335-5F666 7X99::::;.;><r<<<=I=y>>>???@AIAByBCCDD[EEEGHKK\NkNNNNNNNNNNNPP?QZQQQdRRMSS8UbUUpVVVVVWW%WXWYWWWWWWWX0X1X2X5YYZZ\\R^^`Ra\bPccqdrd|dhhjkSmEoooooooooooooopppppp#q$q0q>qFqqqqqqqqqrr8r9rBrQrWr}r~rrrrrrrsssssssssttt+t-ttttvvvvv#w1w2w>wxiyzzTzdzrz{ |+|@|U|n|||C}}~~%/ك  FGPR{|ńDŽNOVXjABKM{Ō|~  Î<=BJK^ӐԐ%&?vw˒̒͒ϒĔBYv(,ΜϜМӜΟ$%uvwxȠҠܠݠ #$%&'4<>?@ABCDEFGHI\]js}ҡ2Oefgh!"#$ABV`jt~ǣȣɣʣˣڣ3Jʥ˥ !ĦŦ)6@MNTVXʧקا٧ڧۧ *+E\$O4\]ҪӪԪժ,6CMWblwx~īҫݫ $&'()*+,-./01BCPYcnoάEoZϮЮ)*+,IJ^pzɰְװݰް(6AN[hijklб!8fݲ,-.TdzCkҴӴabǵȵ kmoqsuvwxyz{|}ȶжٶ۶ܶݶ޶߶()Ryķ7LMNo 4>?IJT^hiwy{}¹ɹ˹̹͹ιϹйѹҹӹԹչֹ  '>nʺ>?@eŻƻǻȻ  *45:EKMOQSTYdegikmn}~μԼ޼߼ *+,ֽ׽[^%&*9MWakuv{ֿ̿$%:@FG\bhij ./mnop     !"$%&()89>IOPejpqXYZ[jko~  ./4=CDY`gh} "#?y{ %&ZK~;<PZeoz+-./01?GHIJKLMN_`kqxBw$FG{|}~    !,9:;<=JQSTUVWXYZ[\]^op}$%&Jlmno)*4>HIfhjlnpq<v&Z[\uvwx  *789:;<DFGHIJKL]^kt~jklm+,-.<DMOPQRSTefs|6q2UV  MOQSUWXYZ[\]^_mx/\:jkl*45?@JT^_wy{}<Gavwxy Rvw#-7AKUV &,./01BCL[kst.`  8N|$%yz{|?ABPZfgv|~RST  '(=GQ[eopL&GH xz|~()*+f0:DNXY ,-IJjyz{| "$&()3AMNOPXdfghiz{#]^~#%')+-./012345CMWcdefqyJ|}~?C\89exz+ v  c k J V % d     -.45]^,-hi}~  + 45NYZm|}&'0YZ[lqx>?KNjkwz*+7:YZfi9:FI\]im),;<HKablo&)_`jm!$deoi 9Wij 0000000 00R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R 0 0 00#0#0#0#0#0#0#J0" 0" 0" 0"J0" 0Y# 0Y#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# 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#$0# 0# 0#$0# 0# 0#$10# J0# 0& J0# 0j' 0j' J0# 0) 0) J0# 0, 0, J0# 0C. J0# 0"/ 0# 0G1 0G1 0G1 0G1 0G1 0G1 0G1 0G1 0G1 0G1 0G1 0G1 0G1 0G1 0G1 0G1 0G1  0  0  0+2  0+2  0+2 J0+2  0B6  0B6  0B6  0B6  0B6  0B6  0B6  0B6  0B6  0 B6  0 B6  0 B6  0 B6  0 B6  0B6  0B6  0B6  0B6  0B6  0B60+20;J0;0(=0(=0(=0(=J0;0?0?0?0?0?0?0?0?J0;03D03D03D03DJ0;0G0G0G0G0G0G0GJ0;10N10N10N0N0N0N0N0N0N0N0N0N0+20R0R0R0R0R0R 00X0X 0 00S[ 0 0 00\0\0C^0C^0\00a0\0c0c0c0c0c 0 0 0 00f0f0f0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i0i 0i0i0i0i0i 0i0i0i0i0i 0i 0i0i0i 0i 0i0i0i 0i 0i0i0i 0i 0i0i0i 0i 0i0i0i 0i 0i 0i 0i0i0i 0i 0i 0i0i0i 0i 0i0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i 0i 0i 0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i(0i(0i(0i0i00i00i00i00i0i00i00i00i0i00i00i00i0i00i00i00i0i00i00i00i0i00i00i00i0i00i00i00i00i0i00i00i00i0i00i00i00i00i00i00i00i00i0J0i00@00@00@00@0@00@00@0@00@00@0@00@00@0@00@00@0@00@00@0@00@00@0@00@00@0@00@00@0@00@00@00@0@00@00@0@00@00@00@0@00@00@0@00@00@00@0@00@00@0@00@00@0@@0@@0@@0@@ 0f@ 0@0@ 0@ 00 0 0 00(0 0( 0( 0( 0( 0( 0( 0( 0( 0( 0( 0( 0( 0( 0( 0(0 00 00 00 00 000 00 00 000 0  0 0 0 0 00 0 0  0  0 0  0  0 0 0 0  0  0 0 000000 0 00"*0"0W0W0*0"000000"0040J04000 00 00 0000J04000000 00 000 00 000 000000*040 0000000 08 080 0( 0(0 0( 0(0 0( 0(0(0*04J0 0& 00٫0٫(0٫(0٫(0٫( 0٫( 0٫(0٫(0٫(J0٫( 0( 0( 0( 0( 000000*0٫ 0A0AJ0A 000808 08 080808080808080 08 08 08 08 08 08 080 08 08 08 08 08 080 0 0J0A 000*0٫J0 0 0 0 0~ 0~ 0~ 0~0~0~J0~0000000 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 000000000J0~ 0^0^0^ J0~ 0MJ0~00J0~ 0 0 00000*0~0B 0B 0B 0B 00*0~0n0n0n 0n0n0n0n0n0n0n0n0n*0~000000J000000000000000000000000000000000 00000000 0000000000000J0000000000J00000000000 0 0 0 0 00 0 0 0 0 0 00,0 0 0 0 00,0 0 0 0 00 0 0 00 0 0 0 00,0 0 00,0 0 00 00 0 0 0000 0~ 00000000000~0 0~ 0 0 00000~ 0: 0:0:0:0:0:*0:0"J0"0 0 0 0 00 0 0 0 00 0 0 0 00000J0" 0  0  0  0 0  0  0  0  0 0  0  0  0  0 0  0 0  0~ 0  0 0  0  0  0 0070707000000000000000000000000 00 00070001010 007070000000000000000000000000000000070T!0T!0T!0T!0T!0T!0T!0T!0T!0T!0T!0T!0T! 0T! 0T! 0T!0T!J0T!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#&J0T!0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'0X'J0T!0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)*0T!0 *0 *0 *10 *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 *0 *0 *0 *0 *0 *0 *0 *0 *0 *0 *0 *0 *0 *0 *0 *0 *0 *0 *0 *0 * 00:0: 00m?0?0?0?0?0?0m?0I0I 00_K 00aK0aKJ0L0M0M0M0M0M0M0M0MJ0L0Q0Q0Q0Q0Q0Q0Q0Q70Q0Q0Q0Q0Q0Q70Q70Q70Q10Q70Q70Q70Q70Q70Q70Q70Q0Q0Q0Q0aKJ0W0W0W70W0WJ0W0[0[J0W0\0aKJ0{]0]0]0]J0{]0\^0\^0\^0\^0\^J0{]0Ta70Ta0aKJ0a0aJ0a0 c0 cJ0a0c0c0aKJ0e0f0f0aKJ0 h0h0h0h0h0h0aK0kJ0k0#l0aK0l0aK0-mJ0-m0m0m0m0m0aK0n0n 0 00n0n0n0n0n0n0n0n0n0n0n0n0n0n0n0n0n 0n  0  0  0v *0v 08y *0v 0y 0y 0y 0y 0y 0y  0y  0y 0y 0y  0y  0y 0y 0y  0y  0y 0y 0y  0y  0y 0y 0y  0y  0y  0y  0y 0y0y 0y 0y 0y 0y0y 0y 0y0y 0y 0y0y 0y 0y0y 0y 0y0y 0y 0y 0y 0y 0y 0y  0y  0y  0y 0y 0y  0y  0y 0y 0y  0y  0y 0y 0y  0y  0y 0y 0y  0y  0y 0y 0y  0y  0y 0y 0y  0y  0y 0y 0y  0y  0y 0y 0y  0y  0y 0y 0y  0y  0y 0y 0y  0y  0y 0y 0y  0y  0y 0y 0y  0y  0y 0y 0y  0y  0y 0y 0y  0y  0y 0y 0y  0y  0y 0y*0v  0  0 *0v 00  00 00 00 00 00  00 00 00( 00(00 00( 00(00 00( 00(00 00( 00(00 00( 00(00 00( 00(00 00(*0v(0(0(*0v( 0( 0(*0v(0(0(0(0(*0v( 0[( 0[( 0[(*0v( 0B(0B(0B(0B(0B(0B(0B 0B( 0B(0B 0B( 0B(0B 0B(*0v( 0(0(0(0 0( 0(0 0( 0(0 0 00 0( 0(0*0v(J0( 0(J0(0Ȥ(0Ȥ(0Ȥ(0Ȥ 0Ȥ( 0Ȥ(0Ȥ 0Ȥ( 0Ȥ(0Ȥ 0Ȥ( 0Ȥ(0Ȥ 0Ȥ( 0Ȥ(0Ȥ*0vJ0h0rJ0h0000 0 00 0 0 00*0v(0i(*0v( 0( 0( 0( 0( 0( 0 ( 0 (0( 0( 0(0](0](0](0](0](0](0]( 0(0( 0(0(10(10(10(J0(10$(@ 10$(10$(@ 10$(@ 10$(J0(10׶(# =0׶(# =0׶(# =0׶(# =0׶(# =0׶(J0(10(# =0(# =0(# =0(# =0(*0(0,(0,(0,(J0,(J0,(0(J0,(0غ(J0,(J0,(0(J0,(0s(0s(0s(0s(0s0s(0s(0s(0s0s(0s(0s0s(0s(0sJ0,xJ0,x0jxJ0,x0xJ0,x0оxJ0,xJ0,x0xJ0,x0xJ0,x0CxJ0,x0lxJ0,x0ٿJ0,0DJ0,0J0,0J0,000(000(0(000(0(000(0(0000000000000000J0,08080800000000000000000000000000000000000000 0 0 0 0000000000000000000000000000000000000000000000000000000000000000000000000000000000 0 0 0 0 0 0 0 00 00 0 0 0 0 00 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0J0&0[J0&0J0&00 0 0 0 00 0 0 00 0 0 00 0 0 0 0 0 0 0 0 00 0 00J0&00J0&0J0&0J0&06J0&J0&J0&J0&0*0*0*0*0*0*0*0*0*0*0*0*0*0*J0&0J0&000J0&:0J0&0J0&0_0_0_J0&00J0&0T0T0T0T0T0TJ0&00000J0&0U J0&0 0 0 0  0  0  0  0 0  0  0  0  0  0  0  0  0 0 J0&00J0&0#J0& 0 0 0100J0&0J0&0J0&0G0G0G0G0GJ0&0O0OJ0&08J0&000:00J0&00` 0' 0' 0' 0' 0' 0' 0' 0' 0' 0' 0' 0' 0' 0' 0' 0' 0' 0' 0'0' 0' 0 00;!0;!0;! 0 00$0$ 0$ 0$ 0$ 0$J0$0k)0k)0k)0k) 00!0J0!001 00c2 0c2 0c2 0c2 0c2 0c2 0c2 0c2 0c2 0c2 0c2 0c2 0c2 0c2 0c2 0c20c2J0c2 0Z40Z40Z40Z40Z4 0Z4 0Z40Z40Z4 0 0*0K:0t:= 0t:= 0t:0t:0t:< 0t:< 0t:0t:0t:< 0t:0t:0t:? 0t:*0K:0G@> 0G@> 0G@> 0G@> 0G@:0G@0G@0G@0G@ 004E04E04E04E0K04E0M0M 0M 0M 0M 0M 0M 0M04E*0N00N*0N0!P0!P0!P04E0P 0P 0P 0P 0P04E0T0T0T0T 0T 0T 0T 0T 0T 0T 0T 0T0T 0T 0T 0T 0T 0T 0T 0T 0T0T0T0T*0T0Y0Y0Y 0Y0Y0Y0Y0Y0Y0Y0Y 00c0c0c0c0c0c0c0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c0c0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c 0c0c0c0c0c0c0c0c 0 00v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v 0v 00~0~0~0~ 00L0L0L00 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 00 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 000L0و0و0وA 0و0و0وA 0و0000000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 101000`07 07 07 07 00 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 00 0J00 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00 00 00 0 J00J00 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00 0 000J00 0 0 0 0 0 0 0 0 00 00 00 00 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00 0 007070700J00 0 0 0 0 0 0 0 00 00 00 0 00 00 0 00 0 0 00 0 0 0 0 0 0 0 0 0 0 00 00 00 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 00 00 00 00 0 007070700J00 0 0 0 0 0 0 0 00 00 00 0 00 00 0 00 0 0 00 0 0 0 0 0 0 0 0 0 0 00 00 00 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 00 00 00 00 0 0070707070700 J00 0 0 0 0 0 0 0 0 0 0 0 0 000 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 0 0 0 0 0 0 0 0 0 00 00 00 00 0 0J00 0 0 0 0 0 0 0 0 00 00 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00 00 00 0 0J00 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 0  0  0  0 0  0  0  0 0  0  0  0 0  0  0  0 0  0  0  0 0  0 0 J0 0 0 000 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  0  0 0  0  0  0 0  0  0  0 0  0  0  0 0  0  0  0 0  0 0J0 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  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  0 0 0J0 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  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 0J0 0 0 0 0 0 0 0 0 0 00 00 00 00 00 0 00 0 00 00 0 0 0 0 00 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00 00 00 0 0J00 0 0 0 0 0 0 0 0 00 00 00 00 00 0 000 0 00 00 0 0 0 0 00 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00 00 00 0 0J00 0 0 0 0 0 0 0 0 00 00 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 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00 00 0 0J00 0 0 0 0 0 0 0 0 0 0 00 00 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 0 00 00 00 0 0J00 0 0 0 0 0 00 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0J00 0 0 0 0 0 0 0 0 00 00 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 0 0 0 0 0 0 0 0 00 00 00 0 0J00 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00 00 00 0 0J00 0 0 0 0 0 0 0 0 00 00 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 0 0 0 0 0 0 0 0 0 00 00 00 00 0 0 0 0 0 0 0 0J00 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 0 0 0 0 0 0 00 00 00 00 0 0 0 0 0 0 00 00 0 0 0 0J00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0J00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00 0 0J00 0 0 0 0 0 0 0 0 0 00 00 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00 0 00J00 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 0 0 0 0 00 00 0 0J00 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 0 0 0 0 00 00 0 0J00 0 0 0 0 0 0 0 0 00 00 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  0Oy00 000 000 0 0 000J00000;0;04;04;04;04;04;04;04;04;04;04;04;04;04;04;04;04;04;04;04;04;04 @0̂ ;04 ܞ@0̂ ;04 @0̂ ;04 L@0̂ ;04 @0̂ ;04 @0̂ ;04 @0̂ ;04 ,@0̂ ;04 d@0̂ ;04 @0̂ ;04 Ԡ@0̂ ;04 @0̂ ;04 D@0̂ ;04 |@0̂ ;04 @0̂ ;04 @0̂ ;04 $@0̂ ;04 \@0 00100 0 0 0 0 0 0 0 0 0 0 00 0 0 00 00 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 5 ;0 5 ;0 5 0 ;05 ;05 ;05 0 ;05 ;05 ;05 0 ;05 ;05 ;05 0 ;05 ;05 ;05 0 ;05 ;05 ;05 0 ;05 ;05 ;05 0 ;05 ;05 ;05 0 ;05 ;05 ;05 0 ;05 ;05 ;05 0 ;0 5 ;0 5 ;0 5 0 ;0"5 ;0"5 ;0"5 0 ;0$5 ;0$5 ;0$5 0 ;0&5 ;0&5 ;0&5 0 ;0(5 ;0(5 ;0(5 0 ;0*5 ;0*5 ;0*5 0 ;0,5 ;0,5 ;0,5 0 O900 O900 O900 0 O900 O900 O900 0 Oy00 Oy00 Oy00 0 Oy00 Oy00 Oy00 @0 ;065 ;065 ;065 @0 ;085 ;085 ;085 @0 ;0:5 ;0:5 ;0:5 @0 ;0<5 ;0<5 ;0<5 @0 @0 @0 @0 M900 O900O900O900LC0(A@\Ƽ Oy00 Oy00 Oy00 @0 Oy00 Oy00 Oy00 @0 Oy00 Oy00 f0lˇ >;0U+{Rl  0s Oy00xOy00Oy00xT Oy00Oy00xOy00xOy00xOy00xOy00Oy00Oy00xOy00x-Oy00EҦ5ҦӦ4ӦOy00x4.Oy00x-EҦ5ҦӦ4ӦX 0 {-----/=PRb%'''))9;;;==bbbbdd~,...00000022222244PPPPRR|~~ceerrrrttttttvv!!!!##PPPPRRzzzz|| %b( /}I(N n!"$%%),1c5k9<EFHLgOPpTVXZ[`jbgl]v{Ў ٱͺh4(pQZ/1v / Vh r$*18W<ABEHNY^dnizM+-n]>GY!$+8FwN!YbOpًŔ{6 1n@&CoA; k"$V'(?ESV^`djlmnpuv|} (/47CWcnpqrtxz|} &5O`kw#1?BDEG\xj  `A$,, -\-w---- ..O.l...... //=/Z///)7<CfU[Bouuvvvwww/xxyyy zDzzz{A{f{{{|U||||&}U}}}}~O~~~~&X4iрK};҂*XX7}ƅ/Uwچ4Tȇ*Idv&iώTaJўΠڮ'&k( <^E 9(OA+QiE%Df!&}&&&&*/4/i////0:0l000 1>1v11112M2z222:::;E;y;;;;7<g<<|C?X^@gszM A9|Ѝ!fX/̐$ݑWaUϖ6M==\N5q#Hb8Mb5N|2n P8=4^5OTwq')^;m;;;;BKVV^%__`\jwwx#yyy8z}zz{||2 {NA JӘ%v̚Τuxܨ&?DIO!Aʫ ŮMXگ*\Ӳw$)-1no )Iָ޸kӼǽkuy}پ޾(ohy 4ESdm}*%u$Fh.n !(8OpYjCg"y%K;0HL_F| <JVZ^$loHfpux7;IK^k-DQSf6U MW[_k^wxvU.0C8y|AZ~R'oGx(XIz$)Pi]#-15ey|% -4]h} 4Y|&Y>j*Y9\ ; a   !_!"d""#1##j$%%{&W''(      !"#$%&'()*+,-./0123456789:;<=>@ABCDFGHIJKLMNOPQRTUWXYZ[\]_abcefghikoqrstwxyz{~     !"#$%&')*+,-.01235689:;<=>?@ABDEFGHIJKLMNOPQRSTUVXYZ[\]^_`abdefghijklmosuvwy{~     !"#$%'()*+,-./012346789:;<=>?@ABCDEFGHIJKLMNPQRSTUVWXYZ[\]^_abcdefghijlmnopqrstuvxyz{|}~      !"$%&'()*+,-./023456789:;<=>@ACFHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwyz{|}~(-Qh.0Hceu9;Lgi~  / 2 E ` c z   9 T W  ) , X s v  ) , D _ b v ; > g ,/g>Y\v,/^y|&ADSnq.1A\_r-HKWru|(CFRmp|@[^u3NQ(CFc~.ILk/2Nil58w.1<WZl  ;?n";VZr9"a""((())*d***c---w...//0000j11112*2=8=\=b===m???F@n@@@@@WCCCCCCGG H:HbHvHyHHHJJJaNNNNNNRRS*SRSfSiSSSmUUU3X[XoXrXXX^__NavaaFnnnnBS>Z?gҮ2(V~ʵ޺UzĿǿ1'Ocf>*Rfi3R#&ZzgiEm;hEm;IJ r x z    7 = ? g m  G [ ^   ,['8"FqL!t!!!!!t///88889#9<9d9x9{9999:(:+:c::?@@v!w5w8wpwwMu{&NT:اs1YgNs/?P?p? E;EXE{ǥ XX %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXtXX&(/69RY]~U\`!!!!!!!!!!!t  @A,b$12{ :B 8'L@H 0(   $@ (  H  #  H  #  H  #  H  #  H  #  H  #  HB  C DHB   C DHB   C DHB   C DHB   C DZB  s *D1TB  c $D 1NB  S D!1TB @ c $D"1H - # - H . # .  T / C / H 0 # 0 H 1 # 1  TB 2 c $DNB 3 S DNB 4 S DNB 5 S DNB 6@ S DH2 7 # 7 H2 8 # 8   HB 9 C D HB : C D HB ; C DHB < C DNB = S DNB >@ S D T ? C  ?   T @ C  @  B S  ?22222222222222222233"""""""""""z333O4 - B, t0B t2 CCt14t.'t@jt=SjS t6{t5{{t? mt:V pt9u t>' S t8 'Bt7 ' t<  t;' 't/mt4 t3  t5t3t5Rt t,5t et5t 5t^5t  t 5tM t\ t t\ tl _Toc372095446 _Toc373116082 _Toc306695088 _Toc306695181 _Ref307134182 _Ref307134260 _Toc307301483 _Toc319482416 _Toc319482520 _Toc319832625 _Toc335816074 _Toc335816484 _Toc335816939 _Toc335817188 _Toc339792494 _Toc339794239 _Toc342463582 _Toc342463607 _Ref517603869 bkmkStart _Toc39027836 _Toc515163362 _Toc39027837 _Toc18831259 _Toc39027838 _Toc306695089 _Toc306695182 _Ref307134328 _Toc307301484 _Toc319482417 _Toc319482521 _Toc319832626 _Toc335816075 _Toc335816485 _Toc335816940 _Toc335817189 _Toc339792495 _Toc339794240 _Toc342463583 _Toc342463608 _Toc508607078 _Hlt19692744 _Hlt525033039 _Toc39027839 _Toc39027840 _Toc39027841 _Hlt34119434 _Ref15962448 _Toc39027842 _Toc399555506 _Toc39027843 _Toc39027844 _Toc39027845 _Toc39027846bkmkPlaceholders _Toc39027847 _Toc434996022bkmkPlaceholderMapping _Ref438396779 _Ref497032019 _Toc39027848 _Toc515163394 _Toc39027849 _Toc39027850 bkmkInput _Ref529755081 _Toc39027851 bkmkStrategy _Toc39027852 bkmkSingle _Toc39027853 _Ref14254050 _Ref497029586 bkmkTagGroup _Ref497020822 _Ref497020853 _Toc39027854 _Ref496924620 _Ref496927091 _Ref496669757 _Ref497020823 _Ref497020876 _Hlt519663571 _Toc39027855 bkmkMulti _Ref16040571 _Toc39027856 _Toc39027857 _Toc39027858 _Toc434996023 _Ref517600853 _Ref497991542 _Ref438177675 _Ref438179474 _Ref438362272 _Ref497012660 _Toc39027859 _Ref516882931 _Ref516882952 _Toc39027860 _Toc39027861 bkmkOutput _Toc39027862 _Ref517600973 _Toc39027863 bkmkGlobal _Toc39027864 _Ref497038884 bkmkSpecifics _Ref517773349 _Toc39027865 _Toc39027866 _Toc39027867 _Toc39027868 _Toc39027869 _Toc39027870 _Toc39027871 _Ref438394620_Automatic_Re-connection _Toc39027872 _Ref23223413 _Toc39027873 _Toc39027874 _Toc39027875 _Ref497810824 _Ref517754382 _Toc39027876 _Ref20212696 _Toc39027877 _Toc39027878 _Toc39027879 _Toc39027880 _Toc514831182 _Toc39027881 _Toc39027882 _Toc39027883 _Toc39027884 _Toc39027885 _Toc39027886bkmkMore _Ref517762913 _Toc39027887 _Toc39027888 _Ref517858794_PI_Point_Configuration _Toc39027889 _Toc39027890 _Ref516715992 _Ref529928385_Extended_Descriptor _Toc39027891 _Toc39027892 _Toc39027893 _Toc39027894 _Toc39027895 _Toc39027896 _Toc39027897 _Toc39027898 _Toc39027899 _Toc39027900 _Toc39027901 _Toc39027902 _Toc39027903 _Toc307301489 _Toc319482423 _Toc319482527 _Toc319832632 _Toc335816080 _Toc335816490 _Toc335816945 _Toc335817194 _Toc339792500 _Toc339794246 _Toc342463589 _Toc342463614 _Ref487518011 _Ref487518699 _Toc515163391 _Toc514831189 _Toc39027904 _Ref15965515 _Toc39027905 _Toc508178425 _Toc508689626 _Toc526654983 _Toc39027906 _Toc526654984 _Toc39027907 _Toc515163392 _Ref14244773 _Toc39027908 _Toc373044752 _Ref438394023 _Toc39027909 _Ref496940470 _Ref496940482 _Ref497179798 _Ref497095733 _Ref517771623 _Ref517598667 _Ref19692374 _Ref496940445 _Toc515163393 _Toc39027910 _Toc434665377 _Toc434996052 _Ref441852290 _Toc505996771 _Ref497191130 _Toc505996770 _Toc515163386 _Toc515163398 _Toc39027911 _Hlt443805254 _Performance_Point_Configuration _Toc39027912 _Ref506703432 _Ref517837554 _Hlt443805079 _Ref510415720 _Toc515163387 _Toc39027913 _Hlt443805068 _Hlt443805072 _Hlt442781205 _Toc307301486 _Toc319482420 _Toc319482524 _Toc319832629 _Toc335816077 _Toc335816487 _Toc335816942 _Toc335817191 _Toc339792497 _Toc339794243 _Toc342463586 _Toc342463611 _Toc307301492 _Toc319482426 _Toc319482530 _Toc319832635 _Toc335816083 _Toc335816492 _Toc335816947 _Toc335817196 _Toc339792502 _Toc339794248 _Toc342463591 _Toc342463616 _Toc434996061 _Toc505996772 _Toc515163367 _Toc39027914 _Toc39027915 _Toc39027916_Interface_Installation_on_NT _Toc39027917 _Toc487009954 _Toc494879613 _Toc515163368 _Toc39027918 _Toc487009955 _Toc494879614 _Toc515163369 _Toc39027919 _Toc487009956 _Toc494879615 _Toc515163370 _Toc39027920 _Toc39027921 _Toc39027922 _Toc487009959 _Toc494879618 _Toc515163371 _Toc39027923 _Toc487009960 _Toc494879619 _Toc515163372 _Toc39027924 _Toc39027925 _Toc515163411 _Ref15965751 _Toc39027926 _Toc39027927 _Toc39027928 _Toc505996773 _Ref517666911 _Toc307301490 _Toc319482424 _Toc319482528 _Toc319832633 _Toc335816081 _Toc335816491 _Toc335816946 _Toc335817195 _Toc339792501 _Toc339794247 _Toc342463590 _Toc342463615 _Toc514831198 _Toc39027929 _Ref517856497 _Toc39027930 _Toc39027931 _Toc503773023 _Toc39027932 _Ref509624486 _Toc515163413_Appendix_A_Examples _Toc39027933 _Example_1.1_ _single tag query:$_Example_1.2_ _query data array for $_Example_1.3_ _three PI points formi$_Example_1.4_ _Distributor strategy:_Example_1.4_ _Tag Distribution_Example_1.5_ _RxC strategy:_Example_1.5_ _RxC Distribution$_Example_2.1_ _inserts 2 different s$_Example_2.1_ _insert 2 different si#_Example_3.1_ _field name keywords:!_Example_3.1_ _field name Aliases$_Example_3.2_ _fixed column position$_Example_3.3_ _arbitrary column posi$_Example_3.4a_ _ Tag Distribution  $_Example_3.4a_ _Tag Distribution, se$_Example_3.4b_ _ Tag Distribution $_Example_3.4b_ _Tag Distribution, se$_Example_3.5_ _ Distributor strategy$_Example_3.5_ _Tag Distribution with_Example_3.6_ _ RxC strategy :_Example_3.6_ _RxC Distribution!_Example_3.7_ _event based input: _Example_3.7_ _event based input$_Example_3.8_ _multi statement query$_Example_3.9_ _stored procedure call#_Example_3.10_ _event based output:"_Example_3.10_ _event based output$_Example_3.11_ _Output triggered by _Example_3.12_ _global variables$_Example_4.1_ _PI Point database cha$_Example_4.2_ _PI Point database cha_Example_5.1_ _Batch Export:$_Example_5.1_ _Batch export (not req_Example_5.2a_ _Batch Export:$_Example_5.2a_ _Batch export (Module!_Example_5.2b_ _UnitBatch Export:$_Example_5.2b_ _UnitBatch export (Mo _Example_5.2c_ _SubBatch Export:$_Example_5.2c_ _SubBatch export (Mod$_Example_6.1_ _last one hour of sinu$_Example_6.1_ _last one hour of  Sin _Toc39027934 _Ref497433241 _Ref517598210 _Ref517604251 _Ref506703546 _Ref517665957 _Toc39027935 _Ref529752778 _Toc39027936 _Toc39027937 _Toc39027938 _Toc39027939 _Toc39027940@@ ##$$''''''''''''''''-0.23;CNSXX)_bdjjPP==w ''''w{T||||  "*{;|;|;@@1@IJ L LMMSX'^~bffh|lxmmLooooowwwyy`z`z`z܋Ll>l     CCXXXXعع L <q!!!!!!!!!%Z%Z%z%z%V)000r7b9c9::::::::::::::::::::::::::::;@EEKKKK\N\N\N\NNNNNNPQQQQ8U8U8U8UZrdrdrd2w~%%%%%%%%%%%%%%%&{{ΟΟΟΟh˥kkNN@&\lTT++999% & M ^ [  @@@ !"#$%&'()*+,-./0123456789:;<=>?ABC@@DPEFGHIJKLMNOQRSTUVWXYZ[\o]^_`abcdkefghijlmnpqrstuvwxyz{|}~     1+ !"#$%&'()*,-./0]^23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\_c`adebfghijkll##$$'-0C23"<C,OSXX;_&bdjjVWQQ888 CαIJJJe( ..11CCC3"*|;;0@0@E@ILLLL LMMfX0^bffhlmm`ooooowwwwwwwwwwwwwwwwwwy`zszszszYuG}            ''WWWWW  U Jw!!!!%Z%y%y%W)000000000s7c9d9::::::::::::;-;AEEEKKKKjNjNjNjNNNNNNPQQQQaUaUaUaUZ{d{d{d=w=w=w~%%%%%%%%%%%%..............ΟΟh˥kkNN@&\lTT++99dL L L L L c s*k ]]]]]\]]]]\]]]]\]]]]\]]] ] ]t!]!]"]$#^#^#^<$^|$^$^$^<%^|%^% ^% ^<& ^|& ^& ^&^<'^|'^'^'^<(^|(^(^(^<)^|)^)^)^<*^|*^*^*^<+^|+ ^+!^+"^<,#^|,$^,%^,&^<-'^|-(^-)^-*^<.+^|.,^.-^..^^5?^|6@^$7A^7B^D8C^8D^|9E^ :F^L:G^:H^l;I^;J^<<K^|<L^ =M^=N^,>O^>P^L?Q^?R^@S^AT^AU^4BV^BW^TCX^CY^tDZ^E[^E\^$F]^F^^DG_^G`^dHa^Hb^Ic^Jd^Je^4Kf^Kg^TLh^Li^tMj^Nk^Nl^$Om^On^LPo^Pp^lQq^Qr^Rs^St^Su^ ƑՑ³Z338XX`''/l               ;?@ABDCEFGHJIKOLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~3t]]y*ivzz?!6+?ёڑijij_7::_ee.44t               CDLf gnnnةT)//eny5b^V $ 5 4K1Zcz!>Gҳ۳'0ļͼ09R[[d|OXs|Jv6e(Gk%i n      "!#%$&(')+*,-.0/132465798:<;=>?@ABDCEFGHJIKMNOLPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 9*urn:schemas-microsoft-com:office:smarttagsplace=*urn:schemas-microsoft-com:office:smarttags PlaceName=*urn:schemas-microsoft-com:office:smarttags PlaceType8*urn:schemas-microsoft-com:office:smarttagsdate;*urn:schemas-microsoft-com:office:smarttagsaddress>*urn:schemas-microsoft-com:office:smarttags PersonName8*urn:schemas-microsoft-com:office:smarttagstime8*urn:schemas-microsoft-com:office:smarttagsCityB*urn:schemas-microsoft-com:office:smarttagscountry-region9*urn:schemas-microsoft-com:office:smarttagsState:*urn:schemas-microsoft-com:office:smarttagsStreet &0110111213151617181997199819992202000200120022003242627282933031456789DayHourMinuteMonthYear%!$#"%!$#"%!$#"%!$#"%!$#"#"#"#"#"#"#"#"#" #"#"#"#"%!$#"%!$#"%!$#"%!$#"%!$#"%!$#"%!$#"%!$#"%!$#"%!$#"%!$#"%!$#"%!$#"%!$#"%!$#"%!$#"%!$#"%!$#"%!$#"%!$#"%!$#"%!$#"% !$% !$% ! $ % !$% !$% !$%!$%!$%!$ %!$%!$%!$%!$$!%$!%%! $ $ !%$!%$ !%$!%$!% !0"&':1Hfu<Lj~  3 E d z  9 X  - X w  - D c v  ? g 0g>]v0^}&ESr2A`r -LWv|(GRq| @_u3R(Gc.Mk3Nm9w2<[l  @n#;[r(()*d**c--/0j111+298@8x8888r;z;;;=]=b==m??F@@C CG!HJJMMMMaNNNNNNQQ%Q,QgQnQQQRSiSSmUUVVrXXZ(Z[[^_Naaob|bggmmFnnnnnnnnoooooo0p@pppqqqq rrErGrrrrrssBsDsgsisssssttVtXttttttt'u)uVuXuuuuuuuvvPvRvvvvvvv'w)wYw[wwwwwxx5x7xjxlxxxxxyyLyNy~yyyyyyzzzzzz{+{-{Y{[{{{||Y|[|||||||8}E}~}}}}}}~~0~2~V~X~x~z~~~~~5?+-JLwyʁӁTІ҆ӆ׋-cl&[ ?69ajҮ3)}{4@ǽZceoǿ2mtf inq !S&{gDMi;DFOaj=A#iJ@ I K T J y z   > ? n ^  bk-\F[b!!##v----t//F3^377@>O>?@oGGPJVJOOPPPP_RbR[[aaffffZh`hj(j8wwȇ[h!()4Y`apM|686HK^2C,8E~Tabi|2E%Wh@KOQdmn{PS~9Bpyz )3@LYRT GOPX IQ6D(gns12^aELgN  :=RYkra h   V c   s5B=J0qt2 3G5R5a5d566667!78999N=P=>>>>AAAAgBnBWWIWNWWW*X/Xaa bbmmvzz_eisWh߁Ƌ ƙR\",'329ˣ٣!JQ{ȥ )+3\dëowެEL׮!+oگ_b'lvzݲյ}  ')1ķ̷ >E *45STd&9v>Hk~4<&.@J kpqwx q~v~Yclt  qy*0 &/5@F_l%&t{.6 NU!uz  JQ^e bdqs%'AC~acpr    & . A L  9:\]$&06AYe \hu |   0ms":x1Hfu<Lj~  3 E d z  9 X  - X w  - D c v  ? g 0g>]v0^}&ESr2A`r -LWv|(GRq| @_u3R(Gc.Mk3Nm9w2<[l  @n#;[rl"m"""(()*d**c--/0j111+2=]=b==m??F@@CC_DcDhGvGG!HlHmHaIdIJJaNNNNRS\S]SiSSmUUVVWWeXfXrXX\\]]^_Naaob}bccggFnn0p?pppqqqq rrssz{8}D}5>T/7 ІÊ׋ +9[?Ү3)Ͳwy{ anǿ2dhYZf (\]iS&{gi2Z7?~wx>GiwxJ8 @ J y z   > ? n Q R ^  -\:=F~!!!!t//F3]388n9o9::>>?@tGG0J2J[O\OOPPPWRYROVUVWWSXXXXXYYyZzZ][c[[[9\:\\\Q_R_ccjjjckkkllmmmmnn o+oroso+w,w8ww '(3X_`qM|@˶ζ-OMTuz "28~s1 *gUMWx|bh@EN78GP  >B +_bZT[ls0Yqt;'<'34 7777>>IAMAKDUDJJOOSSUU,e.e=mRmyy+|?|@|T|U|m|s|Ž֖ ǙR]"-؟ٟGS'3ˣ٣{ȥAFP_ *359:DEJKSTXYc"̾&)*8vz{OV9;kno}8?V`%\d  gj}1>|CD[]  8:EFHI[]hilm$&06AYe \hw |   3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333AQRz+01Hfu<Lj~  3 E d z  9 X  - X w  - D c v  ? g 0g>]v0^}&EFSrs2A`r !-LMWvw|(GRq| @_u3R(Gc.Mk3Nmn9w2<[l  @n#;[r#$$%]%)&P&['''((( ))*d**c--//00j111+2338+9`9}9/;Q;=]=b==m??/@F@@@G!HJJJNaNNNNNRSSiSSSmUUrXX^^_)_>aNaaammFnnnnnno@pppqqqqqr1rVrtrrrr s(sBsMsgszssssst&tDthttttttu'u7uVufuuuuuuuv$vPv]vvvvvvw'w1wTwgwwwwwxx5xCxjx}xxxxxxy8y]y~yyyyy z(zPzrz{{~!~T&C{ІwUbҎٔݔKNҖ֖ϘҘ[?ۦݦʩ'*Ү3)3Ǻ{|ȼF׽qǿ23`fiEST&{gis@P2jJ!-Ro.iJ  J y z     > ? n   ^    ^  -n\_F-O\~!!#$& '.'='_'q''D(f(u(((()5))*!*C**t//2344?@8wwT{{N|S||| ~~~~:D}"Dg݆3YmN{Hs̉ 4XrM|Hj^Ў؎ ۠NP>B]_ORl(G>h69^t$&IKce9i~NzW}3Po:U9Z/I5H)gs%1Ja68PRgAN  UX01&'N335-56F6NNRRpVVW%WWWWXoooppp$qFqqqqr9rWr~rrsst-tك GR|DŽXBM =^&?wYv,lΟxw{ȥ˥X+4ժolбӴbȵk)No @eȻ,jp[#y&$~&JIf\xm MlVt |? pLxY-J| {#^#   1t-0k~+5?o)`m$erDU *0>Dgk1;U lw}Y  - / I K V X e g t    (()*d**c--/0j111+2=]=b==m??F@@G!HJJaNNNNRSiSSmUUrXX^_NaaFnnT[?Ү3){ǿ2fiS&{giiJJ y z   > ? n ^  -\F!!t//?@8wwM|s1gN0{ȥ ?jylmh8Fj fe* +)I'6 L x{U +)dRP"r +)B~ zy >zEv;#s.$AlK*@7R>*c.,J*c7dp7[SQ;RRJ<:XbL@l:bB&@pCK@ +)g9@PA4u "iG7H +)hIS$SJXQ"rJiLCr:RSH*U +)t8V +)}fWNOXo@3X K/yZ~>@_ +)'Qa kdB:dRWd /Dze +)\,ehzw(iTZ>ipf|95 j:N-l +)Al @n +)KVNvpvƧgM{w\I|^q| d~PkHd @ &56B*CJ OJQJ^JaJ o(ph Chapter @OJQJ^Jo(B*CJaJph*hh^h`.@^`OJQJ^Jo(^`.^`.pLp^p`L.@ @ ^@ `.^`.L^`L.^`.^`.PLP^P`L.hpp^p`.h@ @ ^@ `.hL^`L.h^`.h^`.hL^`L.hPP^P`.h  ^ `.hL^`L.@h^`.hh^h`CJOJQJ^JaJo(q^`.^`.pLp^p`L.@ @ ^@ `.^`.L^`L.^`.^`.PLP^P`L.@h^`.h88^8`.h^`.h L ^ `L.h  ^ `.hxx^x`.hHLH^H`L.h^`.h^`.hL^`L.@h^`. hh^h`OJQJo(hpp^p`.h@ @ ^@ `.hL^`L.h^`.h^`.hL^`L.hPP^P`.h  ^ `.hL^`L.^`5CJOJQJo(.h^`.h^`.hL^`L.he e ^e `.h5 5 ^5 `.hL^`L.h^`.h^`.huLu^u`L.h  ^ `.h  ^ `.hL^`L.h^`.hWW^W`.h'L'^'`L.h^`.h^`.h!L!^!`L. hh^h`OJQJo( h8^h` Appendix ^`)8^8`)^`()^`()pp^p`()  ^ `.@ @ ^@ `.  ^ `.h88^8`.h^`.h L ^ `L.h  ^ `.hxx^x`.hHLH^H`L.h^`.h^`.hL^`L.^`CJOJQJo(^`.pp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(h^`OJQJo(hHh  ^ `OJQJ^Jo(hHoh  ^ `OJQJo(hHhxx^x`OJQJo(hHhHH^H`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hH pp^p`OJQJo(^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.h88^8`.h^`.h L ^ `L.h  ^ `.hxx^x`.hHLH^H`L.h^`.h^`.hL^`L.^`o(.^`.pLp^p`L.@ @ ^@ `.^`.L^`L.^`.^`.PLP^P`L.hpp^p`.h@ @ ^@ `.hL^`L.h^`.h^`.hL^`L.hPP^P`.h  ^ `.hL^`L.@h^`.hpp^p`.h@ @ ^@ `.hL^`L.h^`.h^`.hL^`L.hPP^P`.h  ^ `.hL^`L.^`o()   ^ `hH.  L ^ `LhH. xx^x`hH. HH^H`hH. L^`LhH. ^`hH. ^`hH. L^`LhH.h^`OJQJo(hHh  ^ `OJQJ^Jo(hHoh  ^ `OJQJo(hHhxx^x`OJQJo(hHhHH^H`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hH@h^`.h^`.h^`.hL^`L.he e ^e `.h5 5 ^5 `.hL^`L.h^`.h^`.huLu^u`L.h]]^]`.h--^-`.hL^`L.h  ^ `.h  ^ `.hmLm^m`L.h==^=`.h  ^ `.hL^`L.h pp^p`OJQJo(h @ @ ^@ `OJQJo(oh ^`OJQJo(h ^`OJQJo(h ^`OJQJo(oh ^`OJQJo(h PP^P`OJQJo(h   ^ `OJQJo(oh ^`OJQJo(h^`.h^`.hL^`L.he e ^e `.h5 5 ^5 `.hL^`L.h^`.h^`.huLu^u`L.h^`OJQJo(hHh  ^ `OJQJ^Jo(hHoh  ^ `OJQJo(hHhxx^x`OJQJo(hHhHH^H`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hHhpp^p`.h@ @ ^@ `.hL^`L.h^`.h^`.hL^`L.hPP^P`.h  ^ `.hL^`L.@h^`.hh^h`.hpp^p`.h@ @ ^@ `.hL^`L.h^`.h^`.hL^`L.hPP^P`.h  ^ `.hL^`L.@h^`.hh^h`.h^`OJQJo(hHh  ^ `OJQJ^Jo(hHoh  ^ `OJQJo(hHhxx^x`OJQJo(hHhHH^H`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hH@h^`.hh^h`CJOJQJ^JaJo(qhpp^p`OJQJ^Jo(h@ @ ^@ `OJQJ^Jo(oh^`OJQJ^Jo(h^`OJQJ^Jo(h^`OJQJ^Jo(oh^`OJQJ^Jo(hPP^P`OJQJ^Jo(h  ^ `OJQJ^Jo(oh^`OJQJ^Jo(^`.^`.pLp^p`L.@ @ ^@ `.^`.L^`L.^`.^`.PLP^P`L.hh^h`.@h^`.h^`.h^`.hL^`L.he e ^e `.h5 5 ^5 `.hL^`L.h^`.h^`.huLu^u`L.^`CJOJQJo(^`.pp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(@^`.h^`OJQJo(hHh  ^ `OJQJ^Jo(hHoh  ^ `OJQJo(hHhxx^x`OJQJo(hHhHH^H`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hH@h^`.^`.@h^`.h pp^p`OJQJo(h@ @ ^@ `.hL^`L.h^`.h^`.hL^`L.hPP^P`.h  ^ `.hL^`L.^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`.^`.pLp^p`L.@ @ ^@ `.^`.L^`L.^`.^`.PLP^P`L.^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(hh^h`. hh^h`OJQJo( ^`OJQJo( @ @ ^@ `OJQJo(o ^`OJQJo( ^`OJQJo( ^`OJQJo(o ^`OJQJo( PP^P`OJQJo(   ^ `OJQJo(o ^`OJQJo(Btܥi'QaDdq|mI'6s.$kdSbB&@g9@j L@:dh83XAlzy<dRPc.,M{L }fWd~BK*7R>*OXjyt8VU*U/Dzee*CK@:N-lSQ; @nkrH>@_SQ;hI\,ehiLzEvSJKVNv\I|c7vw(i"iGK/yZ95 jr:RrJPAp7 @^`OJQJ^Jo( @h^`OJQJ^Jo(P @^`OJQJ^Jo(??                                                                        c@8Tw.^|Inl wP27A:a                                                      {                                                                                                                    Vvvl .r¯v@=<=ˮNt                  xvp,4]Z bR^0DVJcP-BA^         viNT1|W4nJXP         @ @ @ @ @8%T4;[ nvgJy ; k z . C : " 5D S I!oCQUBwh:nKDU0|"#*NOOjW=~j IKR&GD I!c=n+ _N b =!w!#h#$}2%0&a&x&'' ( ))4)+~*c+EI,&-"-:-.S.wg.t.*//z/I0u1-2In2s2t23N3^v5656~7x]8-9F:yW:Qj;t;<D<-r<=Q)=So=z=?&,@{C5CwGEyH+IPIMcIJ'ZJKK6KYKpL%9MAsO~&PZPjP)QwQs RD4RCSO]SLThT*UUnfU][V[wWSX YYLY4{YZG8[k8[V^Y^2c^Fw^`L`1` G`ab1ob c6c=cvcden f f,fbef{fpg)h'RhdhrOifi jfjuNjmjk@kiklQ@lFlTlw$]sx2*>YgNz+QB|&Q8Ai0oX3l5(v Q<(r<Vx@b|},wjs(45~7p Yt*k;)c%L#"lqaj(g9"e-vMo_x~y?M^mb ~Cg+F} !U/QvM~`z4@Ucj%#_)H\Bj_)R?Tbm w'E/%<UjO&Li|*QvaB:LOl\x j4A$2V4 5SiX:!ENd0D]~ #/Ir=7LN4 OZ`(5i"#3[Fc4`W*S(  &nnQ"eFkOHf `:U5/_hF.[bQ5CH |%q1bO'%Xg*3QT|efhCbe}~1+,g4]$s.?kND!`>~`p&$0Q?.?VjV[ms-jkz*+0$$$$$$$$ %%%\%]%s%w%x%%%%%%%%%%& & &&&&)&O&P&`&l&m&{&&&&&&&&&&&&&&&' ' ''''9'='>'W'Z'['''''''&mwmmmmmmmmmm%nnnnnnnnnnnnoooooooooooop/p0p@pdpppppqqqPqqqqqqqqr r r rr1rDrErVrtrrrrrrrr sss(s@sAsBsMsesfsgszsssssssssttt&tDtUtVthttttttttttttu%u&u'u7uTuUuVufuuuuuuuuuuuuuvvv$vNvOvPv]vvvvvvvvvvvvw%w&w'w1wTwXwYwgwwwwwwwwwxxxx3x4x5xCxhxixjx}xxxxxxxxxxyyy8yKyLy]y|y}y~yyyyyyyyy z(z;z?@N\^_s $/9:@(QRS,NOPHk29abj$(2ABJ{|}!+,-PQR[_ijko                  , E ] ^ q y {        a%&9DEZfg| %-NOT\}~&&&'' '.'4'5'='_'i'j'q''''''''''''''((( (.(:(;(D(f(l(m(u((((((((() ) ))5)>)?)Q)k)v)w))))))))))))))))***!*C*M*N*X*r*z*{*********0;2_222222222233,3E3F3^3y3z333333333344!47484O4g4h4|44466mmn,ovw{{{{{{{M|N|S|p||||;} ~ ~~~~~~AB9:D|}ɅЅхم!"+DfgrɆ݆"3XYam/0:N͈̈؈$%0H݉މ (4WX`rHRabj#UV^ώЎ؎ 67LK۠MNPv=>B=>\]_NOR*`569^jqrt#$&HIKbce&789i~MNTabc|z(56=MNOW|}123CP)no  :PQU789Z/=>I45H)]gJW^_a568OPRe       TUXwxN3X3^3_3k3m3n3x3333333336;?EHK\NkNNNNNNNNpVVVVWW%WXWYWWWWWWX0X1XEoooooooooooooopppppp#q$q0q>qFqqqqqqqqqrr8r9rBrQrWr}r~rrrrrrrsssssssssttt+t-tttك  FGPR{|ńDŽNOVXABKMÎ=BJK^ӐԐ%&?vw˒̒BYv(,ΜϜМӜ$%uvwxȠҠܠݠ #$%&'4<>?@ABCDEFGHI\]js}2ef!"#$ABV`jt~ǣȣɣʣˣڣJʥ !ĦŦ6MNTVXקا٧ڧۧ *+\4\]ҪӪԪժ,CMbwxҫ $&'()*+,-./01BCPYcnoEϮЮ)*+,IJpְװް6Nhijklб8ݲ,-ҴӴabǵȵkmoqsuvwxyz{|}ȶжٶ۶ܶݶ޶߶()yķLMo 4?JT^hiwy{}¹ɹ˹̹͹ιϹйѹҹӹԹչֹ  >>?eŻƻǻȻ  *45:EKMOQSTYdegikmn}~μԼ޼߼ *+ֽ׽%&*9MWakuv{ֿ̿$%:@FG\bhi ./mnop     !"$%&()89>IOPejpqXYZ[jko~  ./4=CDY`gh} "#y{ %&K;<Pez-./01?GHIJKLMN_`kqxB$FG{|}~    !,9:;<=JQSTUVWXYZ[\]^op}$%Jlmno*4>HIfhjlnpqvZ[uvwx  *789:;<DFGHIJKL]^kt~jklm+,-.<DMOPQRSTefs|q2UV  MOQSUWXYZ[\]^_mx\jk*5@JT^_wy{}Gvwxy Rvw#-7AKUV &,./01BCL[kst.  N$%yz{|?ABPZfgv|~RS  '(=GQ[eopL&GH xz|~()f0:DNXY ,-IJyz{| "$&()3AMNOPXdfghiz{#]^#%')+-./012345CMWcdefqyJ|}      -.145Q]^,-0hikq}~  45NYZm|}&'0YZlqx>?KNjkwz*+7:YZfi9:FI\]im),;<HKablo&)_`jm!$deorD 29:jk') 0!B"""3B!B@ @@Unknown Gz Times New Roman5Symbol3& z Arial1" HelvA& Arial Narrow;Wingdings?5 z Courier New71 Courier5& z!Tahoma#@"tzכZ#v^v^aG4dqqc 3QH?O]SGD:\pipc\interfaces\manual_templates\interface_manual_skeleton_85x11.dot?Relational Database (RDBMS via ODBC) Interface to the PI systemInterface DocumentationMF, BB Administrator?                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > Oh+'0$0\ t    @Relational Database (RDBMS via ODBC) Interface to the PI systemInterface DocumentationMF, BBcF, F, $interface_manual_skeleton_85x11.dotAdministratoral35iMicrosoft Word 10.0@:@:?X@< @>v^՜.+,D՜.+,|8 hp  OSI Software, Inc.q @Relational Database (RDBMS via ODBC) Interface to the PI system TitleHXh _PID_HLINKS Part NumberApplication TypeRelease VersionDocument Type Is CurrentAxn.8_Interface_Installation_on_NT*|!_Performance_Point_Configurationb ; [%_Example_6.1_ _last one hour of  Sin&X_Appendix_A_Examples0 SR%_Example_5.2c_ _SubBatch export (Mod&O_Appendix_A_Examplesn L%_Example_5.2b_ _UnitBatch export (Mo&I_Appendix_A_Examplesy F%_Example_5.2a_ _Batch export (Module&C_Appendix_A_Examples& =%_Example_5.1_ _Batch export (not req&:_Appendix_A_Exampless 4%_Example_4.2_ _PI Point database cha&1_Appendix_A_Examplesp +%_Example_4.1_ _PI Point database cha&(_Appendix_A_Examples0 %!_Example_3.12_ _global variables&"_Appendix_A_Examplesw L%_Example_3.11_ _Output triggered by &_Appendix_A_Examples ~#_Example_3.10_ _event based output&_Appendix_A_ExamplesP{ %_Example_3.9_ _stored procedure call&_Appendix_A_ExamplesRj %_Example_3.8_ _multi statement query&_Appendix_A_ExamplesBv_PI_Point_Configuration8,_Extended_DescriptorPj !_Example_3.7_ _event based input&_Appendix_A_Examplesg  _Example_3.6_ _RxC Distribution&_Appendix_A_Examples* %_Example_3.5_ _Tag Distribution with&_Appendix_A_Examplesv %_Example_3.4b_ _Tag Distribution, se&_Appendix_A_Examplesu %_Example_3.4a_ _Tag Distribution, se&_Appendix_A_Examples) %_Example_3.3_ _arbitrary column posi&_Appendix_A_Examples: %_Example_3.2_ _fixed column position&_Appendix_A_Examples , "_Example_3.1_ _field name Aliases&_Appendix_A_Examples3 %_Example_2.1_ _insert 2 different si&_Appendix_A_Examplesg  _Example_1.5_ _RxC Distribution&_Appendix_A_Examples~  _Example_1.4_ _Tag Distribution&_Appendix_A_Examples\< }%_Example_1.3_ _three PI points formi&z_Appendix_A_Examples t%_Example_1.2_ _query data array for &q_Appendix_A_ExamplesB/ n!_Example_1.1_ _single tag query:&k_Appendix_A_Examples`lYhttp://msdn.microsoft.com/QOShttp://www.microsoft.com/data-=P4http://interfaces.osisoft.com/Uniint3x End User.docw8http://www.osisoft.com/W~mailto:techsupport@osisoft.com330 Interface 3.11.0.0 User Manual0  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ 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 c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ 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 c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ 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 c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                     Root Entry F%/ Data 1TablemvWordDocument2% SummaryInformation( DocumentSummaryInformation8 HCompObjjMsoDataStore й%/%/   FMicrosoft Word Document MSWordDocWord.Document.89q repoint/v3/contenttype/forms">DocumentLibraryFHKLEWX3HK==2 й%/%/Item  PropertiesYDESVUHZ==2 й%/%/Item  Properties X0RKQ0NWXWA==2й%/%/Item  %PropertiesDocumentLibraryFormDocumentLibraryFormDocumentLibraryForm This value indicates the number of saves or revisions. The application is responsible for updating this value after each revision.