diff --git a/text_2_sql/data_dictionary/README.md b/text_2_sql/data_dictionary/README.md index bf85eda..f17a1d2 100644 --- a/text_2_sql/data_dictionary/README.md +++ b/text_2_sql/data_dictionary/README.md @@ -1,6 +1,6 @@ # Data Dictionary -## entities.json +## Schema Store JSON To power the knowledge of the LLM, a data dictionary containing all the SQL views / table metadata is used. Whilst the LLM could query the database at runtime to find out the schemas for the database, storing them in a text file reduces the overall latency of the system and allows the metadata for each table to be adjusted in a form of prompt engineering. @@ -8,65 +8,154 @@ Below is a sample entry for a view / table that we which to expose to the LLM. T ```json { - "Entity": "SalesLT.SalesOrderDetail", - "Definition": "The SalesLT.SalesOrderDetail entity contains detailed information about individual items within sales orders. This entity includes data on the sales order ID, the specific details of each order item such as quantity, product ID, unit price, and any discounts applied. It also includes calculated fields such as the line total for each order item. This entity can be used to answer questions related to the specifics of sales transactions, such as which products were purchased in each order, the quantity of each product ordered, and the total price of each order item.", - "EntityName": "Sales Line Items Information", - "Database": "AdventureWorksLT", - "Warehouse": null, + "Entity": "SalesOrderDetail", + "Definition": null, + "Schema": "SalesLT", + "EntityName": null, + "Database": "text2sql-adventure-works", "EntityRelationships": [ { - "ForeignEntity": "SalesLT.Product", + "ForeignEntity": "Product", + "ForeignSchema": "SalesLT", "ForeignKeys": [ { "Column": "ProductID", "ForeignColumn": "ProductID" } - ] + ], + "ForeignDatabase": "text2sql-adventure-works", + "FQN": "text2sql-adventure-works.SalesLT.SalesOrderDetail", + "ForeignFQN": "text2sql-adventure-works.SalesLT.Product" }, { - "ForeignEntity": "SalesLT.SalesOrderHeader", + "ForeignEntity": "SalesOrderHeader", + "ForeignSchema": "SalesLT", "ForeignKeys": [ { "Column": "SalesOrderID", "ForeignColumn": "SalesOrderID" } - ] + ], + "ForeignDatabase": "text2sql-adventure-works", + "FQN": "text2sql-adventure-works.SalesLT.SalesOrderDetail", + "ForeignFQN": "text2sql-adventure-works.SalesLT.SalesOrderHeader" } ], "CompleteEntityRelationshipsGraph": [ - "SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductCategory", - "SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", - "SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer", - "SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address" + "text2sql-adventure-works.SalesLT.SalesOrderDetail -> text2sql-adventure-works.SalesLT.Product -> text2sql-adventure-works.SalesLT.ProductCategory -> Product", + "text2sql-adventure-works.SalesLT.SalesOrderDetail -> text2sql-adventure-works.SalesLT.Product -> text2sql-adventure-works.SalesLT.ProductModel -> Product", + "text2sql-adventure-works.SalesLT.SalesOrderDetail -> text2sql-adventure-works.SalesLT.Product -> text2sql-adventure-works.SalesLT.ProductModel -> text2sql-adventure-works.SalesLT.ProductModelProductDescription -> text2sql-adventure-works.SalesLT.ProductDescription -> ProductModelProductDescription", + "text2sql-adventure-works.SalesLT.SalesOrderDetail -> text2sql-adventure-works.SalesLT.SalesOrderHeader -> SalesOrderDetail", + "text2sql-adventure-works.SalesLT.SalesOrderDetail -> text2sql-adventure-works.SalesLT.SalesOrderHeader -> text2sql-adventure-works.SalesLT.Address -> CustomerAddress", + "text2sql-adventure-works.SalesLT.SalesOrderDetail -> text2sql-adventure-works.SalesLT.SalesOrderHeader -> text2sql-adventure-works.SalesLT.Customer -> CustomerAddress" ], "Columns": [ { "Name": "SalesOrderID", "DataType": "int", - "Definition": "The SalesOrderID column in the SalesLT.SalesOrderDetail entity contains unique numerical identifiers for each sales order. Each value represents a specific sales order, ensuring that each order can be individually referenced and tracked. The values are in a sequential numeric format, indicating the progression and uniqueness of each sales transaction within the database.", - "AllowedValues": null, + "Definition": null, "SampleValues": [ - 71938, - 71784, - 71935, - 71923, + 71898, + 71831, + 71899, + 71796, 71946 ] }, { "Name": "SalesOrderDetailID", "DataType": "int", - "Definition": "The SalesOrderDetailID column in the SalesLT.SalesOrderDetail entity contains unique identifier values for each sales order detail record. The values are numeric and are used to distinguish each order detail entry within the database. These identifiers are essential for maintaining data integrity and enabling efficient querying and data manipulation within the sales order system.", - "AllowedValues": null, + "Definition": null, + "SampleValues": [ + 110691, + 113288, + 112940, + 112979, + 111078 + ] + }, + { + "Name": "OrderQty", + "DataType": "smallint", + "Definition": null, + "SampleValues": [ + 15, + 23, + 16, + 7, + 5 + ] + }, + { + "Name": "ProductID", + "DataType": "int", + "Definition": null, + "SampleValues": [ + 889, + 780, + 793, + 795, + 974 + ] + }, + { + "Name": "UnitPrice", + "DataType": "money", + "Definition": null, "SampleValues": [ - 110735, - 113231, - 110686, - 113257, - 113307 + "602.3460", + "32.9940", + "323.9940", + "149.8740", + "20.2942" + ] + }, + { + "Name": "UnitPriceDiscount", + "DataType": "money", + "Definition": null, + "SampleValues": [ + "0.4000", + "0.1000", + "0.0500", + "0.0200", + "0.0000" + ] + }, + { + "Name": "LineTotal", + "DataType": "numeric", + "Definition": null, + "SampleValues": [ + "66.428908", + "2041.188000", + "64.788000", + "1427.592000", + "5102.970000" + ] + }, + { + "Name": "rowguid", + "DataType": "uniqueidentifier", + "Definition": null, + "SampleValues": [ + "09E7A695-3260-483E-91F8-A980441B9DD6", + "C9FCF326-D1B9-44A4-B29D-2D1888F6B0FD", + "5CA4F84A-BAFE-485C-B7AD-897F741F76CE", + "E11CF974-4DCC-4A5C-98C3-2DE92DD2A15D", + "E7C11996-8D83-4515-BFBD-7E380CDB6252" + ] + }, + { + "Name": "ModifiedDate", + "DataType": "datetime", + "Definition": null, + "SampleValues": [ + "2008-06-01 00:00:00" ] } - ] + ], + "FQN": "text2sql-adventure-works.SalesLT.SalesOrderDetail" } ``` @@ -85,6 +174,32 @@ Below is a sample entry for a view / table that we which to expose to the LLM. T A full data dictionary must be built for all the views / tables you which to expose to the LLM. The metadata provide directly influences the accuracy of the Text2SQL component. +## Column Value Store JSONL + +To aid LLM understand, the dimension tables within a star schema are indexed if they contain 'string' based values. This allows the LLM to use search to understand the context of the question asked. e.g. If a user asks 'What are the total sales on VE-C304-S', we can use search to determine that 'VE-C304-S' is in fact a Product Number and which entity it belongs to. + +This avoids having to index the fact tables, saving storage, and allows us to still use the SQL queries to slice and dice the data accordingly. + +```json +{"Entity": "Product", "Schema": "SalesLT", "Database": "text2sql-adventure-works", "FQN": "text2sql-adventure-works.SalesLT.Product.ProductNumber", "Column": "ProductNumber", "Value": "WB-H098", "Synonyms": []} +{"Entity": "Product", "Schema": "SalesLT", "Database": "text2sql-adventure-works", "FQN": "text2sql-adventure-works.SalesLT.Product.ProductNumber", "Column": "ProductNumber", "Value": "VE-C304-S", "Synonyms": []} +{"Entity": "Product", "Schema": "SalesLT", "Database": "text2sql-adventure-works", "FQN": "text2sql-adventure-works.SalesLT.Product.ProductNumber", "Column": "ProductNumber", "Value": "VE-C304-M", "Synonyms": []} +{"Entity": "Product", "Schema": "SalesLT", "Database": "text2sql-adventure-works", "FQN": "text2sql-adventure-works.SalesLT.Product.ProductNumber", "Column": "ProductNumber", "Value": "VE-C304-L", "Synonyms": []} +{"Entity": "Product", "Schema": "SalesLT", "Database": "text2sql-adventure-works", "FQN": "text2sql-adventure-works.SalesLT.Product.ProductNumber", "Column": "ProductNumber", "Value": "TT-T092", "Synonyms": []} +{"Entity": "Product", "Schema": "SalesLT", "Database": "text2sql-adventure-works", "FQN": "text2sql-adventure-works.SalesLT.Product.ProductNumber", "Column": "ProductNumber", "Value": "TT-R982", "Synonyms": []} +{"Entity": "Product", "Schema": "SalesLT", "Database": "text2sql-adventure-works", "FQN": "text2sql-adventure-works.SalesLT.Product.ProductNumber", "Column": "ProductNumber", "Value": "TT-M928", "Synonyms": []} +{"Entity": "Product", "Schema": "SalesLT", "Database": "text2sql-adventure-works", "FQN": "text2sql-adventure-works.SalesLT.Product.ProductNumber", "Column": "ProductNumber", "Value": "TI-T723", "Synonyms": []} +{"Entity": "Product", "Schema": "SalesLT", "Database": "text2sql-adventure-works", "FQN": "text2sql-adventure-works.SalesLT.Product.ProductNumber", "Column": "ProductNumber", "Value": "TI-R982", "Synonyms": []} +{"Entity": "Product", "Schema": "SalesLT", "Database": "text2sql-adventure-works", "FQN": "text2sql-adventure-works.SalesLT.Product.ProductNumber", "Column": "ProductNumber", "Value": "TI-R628", "Synonyms": []} +{"Entity": "Product", "Schema": "SalesLT", "Database": "text2sql-adventure-works", "FQN": "text2sql-adventure-works.SalesLT.Product.ProductNumber", "Column": "ProductNumber", "Value": "TI-R092", "Synonyms": []} +{"Entity": "Product", "Schema": "SalesLT", "Database": "text2sql-adventure-works", "FQN": "text2sql-adventure-works.SalesLT.Product.ProductNumber", "Column": "ProductNumber", "Value": "TI-M823", "Synonyms": []} +{"Entity": "Product", "Schema": "SalesLT", "Database": "text2sql-adventure-works", "FQN": "text2sql-adventure-works.SalesLT.Product.ProductNumber", "Column": "ProductNumber", "Value": "TI-M602", "Synonyms": []} +{"Entity": "Product", "Schema": "SalesLT", "Database": "text2sql-adventure-works", "FQN": "text2sql-adventure-works.SalesLT.Product.ProductNumber", "Column": "ProductNumber", "Value": "TI-M267", "Synonyms": []} +{"Entity": "Product", "Schema": "SalesLT", "Database": "text2sql-adventure-works", "FQN": "text2sql-adventure-works.SalesLT.Product.ProductNumber", "Column": "ProductNumber", "Value": "TG-W091-S", "Synonyms": []} +{"Entity": "Product", "Schema": "SalesLT", "Database": "text2sql-adventure-works", "FQN": "text2sql-adventure-works.SalesLT.Product.ProductNumber", "Column": "ProductNumber", "Value": "TG-W091-M", "Synonyms": []} +{"Entity": "Product", "Schema": "SalesLT", "Database": "text2sql-adventure-works", "FQN": "text2sql-adventure-works.SalesLT.Product.ProductNumber", "Column": "ProductNumber", "Value": "TG-W091-L", "Synonyms": []} +{"Entity": "Product", "Schema": "SalesLT", "Database": "text2sql-adventure-works", "FQN": "text2sql-adventure-works.SalesLT.Product.ProductNumber", "Column": "ProductNumber", "Value": "ST-1401", "Synonyms": []} +``` ## Indexing @@ -122,6 +237,13 @@ You can pass the following command line arguements: - `-- output_directory` or `-o`: Optional directory that the script will write the output files to. - `-- single_file` or `-s`: Optional flag that writes all schemas to a single file. +- `-- generate_definitions` or `-gen`: Optional flag that uses OpenAI to generate descriptions. + +If you need control over the following, run the file directly: + +- `entities`: A list of entities to extract. Defaults to None. +- `excluded_entities`: A list of entities to exclude. +- `excluded_schemas`: A list of schemas to exclude. > [!IMPORTANT] > diff --git a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.Address.json b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.Address.json index bcdb20b..309a52b 100644 --- a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.Address.json +++ b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.Address.json @@ -2,67 +2,67 @@ "Columns": [ { "DataType": "int", - "Definition": "The AddressID column in the Address entity contains unique identifier codes for each address entry. These values are numeric and increment as new addresses are added to the database. The primary purpose of this column is to provide a distinct ID for each address to facilitate accurate referencing and data management. This column ensures that each address can be uniquely identified within the Address entity.", + "Definition": null, "Name": "AddressID", "SampleValues": [ - 477, - 473, - 866, - 1053, - 1073 + 1036, + 626, + 1072, + 833, + 1060 ] }, { "DataType": "nvarchar", - "Definition": "The AddressLine1 column in the Address entity contains the primary address information for various locations. This information may include street addresses, building names, suite numbers, and sometimes business names. The values in this column have diverse formats and often include a combination of numeric and textual elements, reflecting different types of addresses such as residential, business, or commercial locations. The variety in the format suggests that it accommodates a wide range of address conventions and structures.", + "Definition": null, "Name": "AddressLine1", "SampleValues": [ - "Sports Stores @ Tuscola", - "Butterfield Hse, 7-251 Chapel St", - "25900-700-9th Ave S.W.", - "30025 Wayburne Drive, Suite 275", - "Oxnard Outlet" + "The Citadel Commerce Plaza", + "4255 East Lies Road", + "25575 The Queensway", + "6388 Lake City Way", + "2564 S. Redwood Rd." ] }, { "DataType": "nvarchar", - "Definition": "The AddressLine2 column in the Address entity contains additional address information that complements the primary street address. This column typically includes suite numbers, PO Box numbers, building names, or other specific location identifiers. The values do not follow a strict format and can vary widely in structure to provide detailed locational data essential for accurate mail delivery or identification within buildings.", + "Definition": null, "Name": "AddressLine2", "SampleValues": [ - "Ste 1071", + "Raven House, Kingsgate", "PO Box 4023", "Stanford House", - "Raven House, Kingsgate", - "Box 8033" + "Floor 7", + "19th Floor" ] }, { "DataType": "nvarchar", - "Definition": "The City column in the Address entity contains the names of various cities. The values indicate specific locations and can be names of cities from different countries or regions. The city names might include a combination of commonly known cities and less familiar ones, reflecting a diverse geographical distribution. The data in this column can be used to identify and filter addresses based on city names.", + "Definition": null, "Name": "City", "SampleValues": [ - "Woodinville", - "Milwaukie", - "West Sussex", - "Brampton", - "Seattle" + "El Segundo", + "Victoria", + "Upland", + "Dorval", + "Weston" ] }, { "DataType": "nvarchar", - "Definition": "The StateProvince column in the Address entity contains the names of states, provinces, or regions associated with addresses. The values include a mix of U.S. states, Canadian provinces, and regions from other countries. This column features geographical subdivisions that vary by country and is intended to specify the specific state or province within the address. The data does not follow any specific code format but rather uses the full names of the states, provinces, or regions.", + "Definition": null, "Name": "StateProvince", "SampleValues": [ - "Minnesota", - "Utah", - "British Columbia", - "Manitoba", - "England" + "England", + "Wisconsin", + "Arizona", + "Nevada", + "Brunswick" ] }, { "DataType": "nvarchar", - "Definition": "The CountryRegion column in the Address entity contains the names of countries or regions associated with an address. The values are in plain text and represent the full name of the country or region. This column is used to identify the geographic area for which the address is recorded.", + "Definition": null, "Name": "CountryRegion", "SampleValues": [ "United States", @@ -72,47 +72,82 @@ }, { "DataType": "nvarchar", - "Definition": "The PostalCode column in the Address entity contains a variety of postal codes in different formats. The values include numerical codes typically found in US addresses as well as alphanumeric codes that are common in Canadian addresses. This suggests that the postal codes are designed to handle a diverse range of geographic areas and could follow different national postal systems. The column does not adhere to a single format and can contain purely numeric or alphanumeric codes.", + "Definition": null, "Name": "PostalCode", "SampleValues": [ - "78664", - "85225", - "92335", - "J1G 2R3", - "L4N" + "98632", + "92614", + "55125", + "60120", + "WA1 4SY" ] }, { "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the Address entity contains a list of unique identifier values in the GUID (Globally Unique Identifier) format. Each value is a 36-character alphanumeric string that includes hyphens and follows the conventional pattern of 8-4-4-4-12 characters. This column is used to uniquely identify each record in the Address entity, ensuring that each entry can be individually referenced and differentiated from others.", + "Definition": null, "Name": "rowguid", "SampleValues": [ - "1A398C1B-2085-4F6D-A6EB-56493855C5D1", - "A9B5A261-2463-4489-9951-EACFA29A8231", - "F79532D7-38E9-42EC-8EA4-C9D7E1C13C12", - "8CAF52B2-D3E2-4A5F-A704-874768007F38", - "CB1392F5-FCB9-4CF5-B4C9-33FAFB876C3D" + "8D9B75CC-90C4-4E15-B69C-891126386BA6", + "1A6A1A7B-E208-473D-A8F4-14A89D06FAD2", + "C2D04D48-EF2B-4349-877B-EA6DF9895079", + "CE585616-C47C-4BD4-8D71-1755B6417770", + "48865E15-033A-40FF-8327-18723D4A8846" ] }, { "DataType": "datetime", - "Definition": "The ModifiedDate column in the Address entity contains timestamps indicating when the address record was last updated. The values in this column follow the 'YYYY-MM-DD HH:MM:SS' format, representing year, month, day, hours, minutes, and seconds. This column helps track changes to the address information over time for auditing and historical purposes. Each record in the address table will have a corresponding ModifiedDate value to indicate the most recent modification.", + "Definition": null, "Name": "ModifiedDate", "SampleValues": [ - "2007-03-01 00:00:00", - "2005-12-01 00:00:00", - "2006-03-01 00:00:00", - "2006-09-01 00:00:00", - "2006-07-01 00:00:00" + "2005-10-01 00:00:00", + "2006-08-01 00:00:00", + "2006-06-01 00:00:00", + "2005-07-01 00:00:00", + "2006-12-01 00:00:00" ] } ], - "CompleteEntityRelationshipsGraph": [], + "CompleteEntityRelationshipsGraph": [ + "text2sql-adventure-works.SalesLT.Address -> CustomerAddress", + "text2sql-adventure-works.SalesLT.Address -> text2sql-adventure-works.SalesLT.SalesOrderHeader -> SalesOrderDetail", + "text2sql-adventure-works.SalesLT.Address -> text2sql-adventure-works.SalesLT.SalesOrderHeader -> text2sql-adventure-works.SalesLT.Customer -> CustomerAddress" + ], "Database": "text2sql-adventure-works", - "Definition": "The Address entity stores detailed location information such as address lines, city, state or province, country or region, and postal code. It is used to uniquely identify and manage specific physical locations. This entity can answer questions related to where customers, employees, or facilities are located, and it can facilitate geographic analysis, shipping logistics, and regional planning. Additionally, it tracks modifications to address records, ensuring data accuracy over time.", + "Definition": null, "Entity": "Address", - "EntityName": "Location Information", - "EntityRelationships": [], + "EntityName": null, + "EntityRelationships": [ + { + "FQN": "text2sql-adventure-works.SalesLT.Address", + "ForeignDatabase": "text2sql-adventure-works", + "ForeignEntity": "CustomerAddress", + "ForeignFQN": "text2sql-adventure-works.SalesLT.CustomerAddress", + "ForeignKeys": [ + { + "Column": "AddressID", + "ForeignColumn": "AddressID" + } + ], + "ForeignSchema": "SalesLT" + }, + { + "FQN": "text2sql-adventure-works.SalesLT.Address", + "ForeignDatabase": "text2sql-adventure-works", + "ForeignEntity": "SalesOrderHeader", + "ForeignFQN": "text2sql-adventure-works.SalesLT.SalesOrderHeader", + "ForeignKeys": [ + { + "Column": "AddressID", + "ForeignColumn": "BillToAddressID" + }, + { + "Column": "AddressID", + "ForeignColumn": "ShipToAddressID" + } + ], + "ForeignSchema": "SalesLT" + } + ], "FQN": "text2sql-adventure-works.SalesLT.Address", "Schema": "SalesLT" } diff --git a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.Customer.json b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.Customer.json index 2e8144d..0ce1752 100644 --- a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.Customer.json +++ b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.Customer.json @@ -2,19 +2,19 @@ "Columns": [ { "DataType": "int", - "Definition": "The CustomerID column contains unique numeric identifiers assigned to each customer. These identifiers are used to distinguish and reference customers within the database. The values are integer numbers and do not follow a specific incremental pattern, allowing for a unique identification of each customer.", + "Definition": null, "Name": "CustomerID", "SampleValues": [ - 29668, - 30106, - 29582, - 621, - 29629 + 511, + 29627, + 30090, + 264, + 5 ] }, { "DataType": "bit", - "Definition": "The NameStyle column in the Customer entity contains boolean values indicating a specific style or format for names. The values are represented as 'True' or 'False,' signifying whether a particular naming convention or styling rule is applied. For example, 'False' indicates that no special naming conventions are used. This column helps in distinguishing customers based on different naming styles.", + "Definition": null, "Name": "NameStyle", "SampleValues": [ false @@ -22,7 +22,7 @@ }, { "DataType": "nvarchar", - "Definition": "The Title column in the Customer entity contains honorifics or titles used before a customer's name. These titles indicate the gender or marital status of the customer and are commonly abbreviated forms. Sample values include commonly used titles like 'Mr.' for men, 'Ms.' for women, 'Sr.' for senior men, and 'Sra.' for senior women. These abbreviations are culturally specific and may vary by region.", + "Definition": null, "Name": "Title", "SampleValues": [ "Sra.", @@ -33,43 +33,43 @@ }, { "DataType": "nvarchar", - "Definition": "The FirstName column in the Customer entity contains the first names of individuals. These values are typically given names used to personally identify each customer. The names can vary widely and may include common, traditional, or culturally specific names. This column helps in personalizing records and identifying customers on a personal level.", + "Definition": null, "Name": "FirstName", "SampleValues": [ - "Mark", - "Keith", - "Deepak", - "Rosmarie", - "Amy" + "Yuping", + "Cornelius", + "Janaina Barreiro Gambaro", + "Kevin", + "Fran\u00e7ois" ] }, { "DataType": "nvarchar", - "Definition": "The MiddleName column in the Customer entity contains the middle names or initials of customers. The values can be full middle names or single-letter initials, and they sometimes include a period after the initial. This column helps to differentiate customers who might have the same first and last names by including their middle names or initials.", + "Definition": null, "Name": "MiddleName", "SampleValues": [ - "L.", + "R.", "T", - "Yuan", - "R", - "C." + "A.", + "I.", + "O" ] }, { "DataType": "nvarchar", - "Definition": "The column contains the last names of customers. The values in this column represent the family or surname of individuals and can vary in length and format. Some last names are single words, while others include spaces or multiple words indicating compound surnames. This column is essential for identifying and differentiating customers within the database.", + "Definition": null, "Name": "LastName", "SampleValues": [ - "Booth", - "Mew", - "Trent", - "De Matos Miranda Filho", - "Ferrier" + "Diaz", + "Stern", + "Meyer", + "Sunkammurali", + "Colvin" ] }, { "DataType": "nvarchar", - "Definition": "The Suffix column in the Customer entity contains suffixes that are appended to individuals' names to denote generational titles or academic/professional designations. Common suffixes observed include generational markers like 'Jr.', 'Sr.', 'II', 'III', and 'IV', as well as educational or occupational titles such as 'PhD'. These values help provide additional identification or honorific information about the customer.", + "Definition": null, "Name": "Suffix", "SampleValues": [ "Sr.", @@ -81,107 +81,138 @@ }, { "DataType": "nvarchar", - "Definition": "The CompanyName column in the Customer entity contains the names of various companies or businesses. The values in this column are represented as full company names, often indicating the industry or nature of the business, such as parts corporations, processing companies, sporting goods stores, showrooms, and bike stores. Each entry is a descriptive and unique identifier for a company that the customer entity interacts with or records. This column is likely used for identifying and differentiating between business entities in a database.", + "Definition": null, "Name": "CompanyName", "SampleValues": [ - "Separate Parts Corporation", - "Metal Processing Company", - "Our Sporting Goods Store", - "Exhibition Showroom", - "Big-Time Bike Store" + "Unique Bikes", + "Nonskid Tire Company", + "All Seasons Sports Supply", + "Wholesale Parts", + "Mercantile Outlet" ] }, { "DataType": "nvarchar", - "Definition": "The SalesPerson column in the Customer entity contains usernames of sales representatives formatted as 'adventure-works\\username'. Each value consists of a domain 'adventure-works' followed by a backslash and a unique username. The usernames typically include either a first name followed by a numeric digit or variations of the representative's name. This column allows identifying and linking customers to specific sales representatives within the Adventure Works organization.", + "Definition": null, "Name": "SalesPerson", "SampleValues": [ - "adventure-works\\jae0", - "adventure-works\\pamela0", - "adventure-works\\jillian0", "adventure-works\\michael9", + "adventure-works\\jos\u00e91", + "adventure-works\\shu0", + "adventure-works\\linda3", "adventure-works\\david8" ] }, { "DataType": "nvarchar", - "Definition": "The EmailAddress column in the Customer entity contains email addresses of the customers. Each value in this column follows the format of a username followed by the domain \"adventure-works.com\". The usernames may include both alphabetic characters and numbers. This column stores unique identifiers that are used to contact and identify customers through their email addresses.", + "Definition": null, "Name": "EmailAddress", "SampleValues": [ - "julie1@adventure-works.com", - "sharon2@adventure-works.com", - "paulo0@adventure-works.com", - "paul2@adventure-works.com", - "thierry1@adventure-works.com" + "jo2@adventure-works.com", + "janet2@adventure-works.com", + "douglas2@adventure-works.com", + "bob2@adventure-works.com", + "james12@adventure-works.com" ] }, { "DataType": "nvarchar", - "Definition": "The Phone column in the Customer entity contains a list of customer phone numbers. The phone numbers are formatted with a three-digit area code followed by a three-digit central office code and a four-digit station number, separated by hyphens. The format used is consistent with the North American Numbering Plan (NANP).", + "Definition": null, "Name": "Phone", "SampleValues": [ - "512-555-0122", - "128-555-0148", - "112-555-0176", - "426-555-0181", - "525-555-0174" + "652-555-0189", + "818-555-0171", + "280-555-0124", + "582-555-0113", + "910-555-0116" ] }, { "DataType": "varchar", - "Definition": "The PasswordHash column in the Customer entity contains hashed representations of customer passwords. Each value is a string of alphanumeric characters and symbols, typically resulting from a hashing algorithm used to securely store passwords. The hashed values ensure that the actual passwords are not stored directly in the database, enhancing security. The values appear to be of a consistent length, indicating a uniform hashing process.", + "Definition": null, "Name": "PasswordHash", "SampleValues": [ - "FnBp23EtjoS2hj7nCcr9a76vZjNvQ+/WT/5vyYyKG5o=", - "8/5CuOyL4qEu4tD2KEd4x1h5OahPfcmZg9L7+F0ATDI=", - "7Rt3EiYjLXevQHTKMCMAavZEDngeIlBpAJZwplBW0G0=", - "B2RR480ridZSqURXY3APlxFk13GITW6LDFutGbpSUIs=", - "xYJSzxUQxGXkjj+EUMGu3jCaA5aPco7WAdw+VZtUbUM=" + "BEePqLIHwU7zsFCJQcHQ8OGm8nkvUlj8YPFAT/teYOc=", + "AI+KoUdA4XQcOZdVLM5fW573x+opUHDHSXxhPuylCL4=", + "SqD2biQr39fo9zJnjNrYH0b9Ww+jQyq4h+t6vSz0/4M=", + "KQnTVrF88pDtzAwfV+7dDpsvf4FFaBRltsryZggImmI=", + "PSKz4q56IqL3q9GPJjYwAKKz2sFtFqkN9n9dfiu1q+0=" ] }, { "DataType": "varchar", - "Definition": "The PasswordSalt column in the Customer entity contains a salt value that is used in conjunction with hashing algorithms to securely store customer passwords. The salt is typically a random string of characters that is added to the password before hashing, ensuring that even if two users have the same password, their hashed values will be different. The sample values provided suggest that the salts are encoded in a base64 format. This column is essential for enhancing the security of password storage by protecting against rainbow table attacks.", + "Definition": null, "Name": "PasswordSalt", "SampleValues": [ - "2t9hMlk=", - "6ansEQA=", - "GR7idhc=", - "Em3q8s4=", - "af0s25U=" + "QS6UTS4=", + "k6zgROU=", + "Uifpoxw=", + "CGYtmQ4=", + "br8PN50=" ] }, { "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the Customer entity contains unique identifiers in the GUID (Globally Unique Identifier) format. Each value in this column is a 128-bit number often represented as a 36-character string, including hyphens, in the format 8-4-4-4-12 (e.g., XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX). These identifiers are used to ensure uniqueness among records in the Customer entity, making it possible to distinguish each customer uniquely across different systems and databases. This column is essential for maintaining data integrity and facilitating synchronization and replication processes.", + "Definition": null, "Name": "rowguid", "SampleValues": [ - "BC98B78E-3068-475A-8EAD-FBA537DDE9B9", - "9D1A7488-6CD7-4866-A0A4-DD3A8A850ED0", - "8E01F170-64D3-4B74-82E1-D1691AE9F37C", - "6E7EB054-AB8E-4F7B-9B94-36010B817829", - "1FFA0236-84EE-415A-BE61-94CE863715EA" + "5A341978-F3D1-4812-BF75-EB00CA9682E3", + "4EE55CA2-F2AC-4E5B-BCEC-B23C09FB345B", + "CDB6698D-2FF1-4FBA-8F22-60AD1D11DABD", + "05B8FB77-FC67-4279-AEBD-4162D21B9A11", + "881137FC-AE6A-4FBD-B71A-4AF9C2F65914" ] }, { "DataType": "datetime", - "Definition": "The ModifiedDate column in the Customer entity contains timestamps indicating the last date and time when a customer's information was modified. The values follow the 'YYYY-MM-DD HH:MM:SS' format. This column is useful for tracking changes and updates to customer records over time. The format suggests that it captures precise moments down to the second.", + "Definition": null, "Name": "ModifiedDate", "SampleValues": [ + "2006-07-01 00:00:00", "2005-10-01 00:00:00", - "2006-03-01 00:00:00", - "2005-08-01 00:00:00", - "2008-02-01 00:00:00", - "2006-12-01 00:00:00" + "2006-12-01 00:00:00", + "2007-02-01 00:00:00", + "2006-03-01 00:00:00" ] } ], - "CompleteEntityRelationshipsGraph": [], + "CompleteEntityRelationshipsGraph": [ + "text2sql-adventure-works.SalesLT.Customer -> CustomerAddress", + "text2sql-adventure-works.SalesLT.Customer -> text2sql-adventure-works.SalesLT.SalesOrderHeader -> SalesOrderDetail", + "text2sql-adventure-works.SalesLT.Customer -> text2sql-adventure-works.SalesLT.SalesOrderHeader -> text2sql-adventure-works.SalesLT.Address -> CustomerAddress" + ], "Database": "text2sql-adventure-works", - "Definition": "The Customer entity contains detailed information about individuals or companies who purchase goods or services. It includes personal and contact information such as names, email addresses, phone numbers, and company affiliations. The entity also stores data related to sales interactions and account security. This entity can be used to answer questions regarding customer identification, contact information, sales assignments, and customer account management.", + "Definition": null, "Entity": "Customer", - "EntityName": "Customer Information", - "EntityRelationships": [], + "EntityName": null, + "EntityRelationships": [ + { + "FQN": "text2sql-adventure-works.SalesLT.Customer", + "ForeignDatabase": "text2sql-adventure-works", + "ForeignEntity": "CustomerAddress", + "ForeignFQN": "text2sql-adventure-works.SalesLT.CustomerAddress", + "ForeignKeys": [ + { + "Column": "CustomerID", + "ForeignColumn": "CustomerID" + } + ], + "ForeignSchema": "SalesLT" + }, + { + "FQN": "text2sql-adventure-works.SalesLT.Customer", + "ForeignDatabase": "text2sql-adventure-works", + "ForeignEntity": "SalesOrderHeader", + "ForeignFQN": "text2sql-adventure-works.SalesLT.SalesOrderHeader", + "ForeignKeys": [ + { + "Column": "CustomerID", + "ForeignColumn": "CustomerID" + } + ], + "ForeignSchema": "SalesLT" + } + ], "FQN": "text2sql-adventure-works.SalesLT.Customer", "Schema": "SalesLT" } diff --git a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.CustomerAddress.json b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.CustomerAddress.json index 583a868..dd1d49a 100644 --- a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.CustomerAddress.json +++ b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.CustomerAddress.json @@ -2,31 +2,31 @@ "Columns": [ { "DataType": "int", - "Definition": "The CustomerID column in the CustomerAddress entity contains unique numeric identifiers assigned to each customer. These identifiers are used to link customer records with their corresponding addresses. The values in this column are integers and do not follow a specific standardized format. They are primarily used internally within the database to ensure each customer can be individually distinguished and referenced.", + "Definition": null, "Name": "CustomerID", "SampleValues": [ - 29645, - 29872, - 29877, - 29641, - 29508 + 29864, + 29907, + 29554, + 29949, + 30018 ] }, { "DataType": "int", - "Definition": "The AddressID column in the CustomerAddress entity contains unique numerical identifiers for each address associated with a customer. Each value in this column is a distinct integer that serves as a primary key, ensuring that every address entry can be uniquely identified and referenced within the table. The numbers do not follow a sequential pattern in the context of the sample values provided, indicating general uniqueness within the dataset.", + "Definition": null, "Name": "AddressID", "SampleValues": [ - 664, - 635, - 884, - 560, - 185 + 1006, + 658, + 594, + 483, + 464 ] }, { "DataType": "nvarchar", - "Definition": "The AddressType column in the CustomerAddress entity specifies the category or purpose of an address associated with a customer. The values are descriptive terms that indicate whether the address is used as a shipping address, a main office address, or any other specified type. This helps in organizing and distinguishing the various addresses linked to customers based on their usage or role.", + "Definition": null, "Name": "AddressType", "SampleValues": [ "Shipping", @@ -35,47 +35,61 @@ }, { "DataType": "uniqueidentifier", - "Definition": "The column rowguid in the CustomerAddress entity contains unique identifier values for each record in the form of GUIDs (Globally Unique Identifiers). These values are 36-character alphanumeric strings, formatted with hyphens separating specific character groupings. This ensures that each record can be uniquely identified across databases and systems without the risk of duplication. The format and structure of these GUIDs follow the standard representation of UUIDs (Universally Unique Identifier).", + "Definition": null, "Name": "rowguid", "SampleValues": [ - "1CAE94D5-5527-4EAC-A1EE-61B828784DD1", - "6075EE51-F2EE-4E6D-97BB-6C0732A4C53F", - "BE9052DE-38C3-4055-88C4-D1CBF9E4A7F2", - "A0DF5593-0A1D-4670-AF3E-FFF343EC50B3", - "535EBA9B-7944-444E-82D3-2DA2C930340D" + "B392D956-6455-40C6-9B4F-36173CDF49D2", + "A303B277-ECC4-49D1-AA81-C39D5193D035", + "B76A7FB2-C021-4DDF-85FE-92639A1F2BB2", + "1F91C474-7799-4E5A-AD5C-7D094041867C", + "1419EA0F-F8EE-4D5B-9E5F-90FC3A9999CA" ] }, { "DataType": "datetime", - "Definition": "The ModifiedDate column in the CustomerAddress entity contains timestamps indicating the last date and time when a record was modified. The values follow the format 'YYYY-MM-DD HH:MM:SS', representing the exact date and time of the modification. This column is used for tracking and auditing changes made to customer address records. The timestamps provide a historical record of when updates were made to ensure data integrity and for possible rollback purposes.", + "Definition": null, "Name": "ModifiedDate", "SampleValues": [ "2007-02-01 00:00:00", - "2006-01-01 00:00:00", - "2005-09-01 00:00:00", - "2006-12-01 00:00:00", - "2005-08-01 00:00:00" + "2008-06-01 00:00:00", + "2008-02-01 00:00:00", + "2006-08-01 00:00:00", + "2007-06-01 00:00:00" ] } ], "CompleteEntityRelationshipsGraph": [ - "text2sql-adventure-works.SalesLT.CustomerAddress -> text2sql-adventure-works.SalesLT.CustomerAddress" + "text2sql-adventure-works.SalesLT.CustomerAddress -> text2sql-adventure-works.SalesLT.Address -> CustomerAddress", + "text2sql-adventure-works.SalesLT.CustomerAddress -> text2sql-adventure-works.SalesLT.Address -> text2sql-adventure-works.SalesLT.SalesOrderHeader -> SalesOrderDetail", + "text2sql-adventure-works.SalesLT.CustomerAddress -> text2sql-adventure-works.SalesLT.Address -> text2sql-adventure-works.SalesLT.SalesOrderHeader -> text2sql-adventure-works.SalesLT.Customer -> CustomerAddress", + "text2sql-adventure-works.SalesLT.CustomerAddress -> text2sql-adventure-works.SalesLT.Customer -> CustomerAddress", + "text2sql-adventure-works.SalesLT.CustomerAddress -> text2sql-adventure-works.SalesLT.Customer -> text2sql-adventure-works.SalesLT.SalesOrderHeader -> SalesOrderDetail", + "text2sql-adventure-works.SalesLT.CustomerAddress -> text2sql-adventure-works.SalesLT.Customer -> text2sql-adventure-works.SalesLT.SalesOrderHeader -> text2sql-adventure-works.SalesLT.Address -> CustomerAddress" ], "Database": "text2sql-adventure-works", - "Definition": "The CustomerAddress entity contains information linking customers to their addresses, including the type of address (e.g., billing, shipping). It captures which addresses are associated with specific customers and includes unique identifiers and modification timestamps. This entity can answer questions about where customers reside or receive their shipments, the different types of addresses associated with each customer, and when address information was last updated for accuracy.", + "Definition": null, "Entity": "CustomerAddress", - "EntityName": "Customer Address Information", + "EntityName": null, "EntityRelationships": [ { "FQN": "text2sql-adventure-works.SalesLT.CustomerAddress", "ForeignDatabase": "text2sql-adventure-works", "ForeignEntity": "Address", - "ForeignFQN": "text2sql-adventure-works.SalesLT.CustomerAddress", + "ForeignFQN": "text2sql-adventure-works.SalesLT.Address", "ForeignKeys": [ { "Column": "AddressID", "ForeignColumn": "AddressID" - }, + } + ], + "ForeignSchema": "SalesLT" + }, + { + "FQN": "text2sql-adventure-works.SalesLT.CustomerAddress", + "ForeignDatabase": "text2sql-adventure-works", + "ForeignEntity": "Customer", + "ForeignFQN": "text2sql-adventure-works.SalesLT.Customer", + "ForeignKeys": [ { "Column": "CustomerID", "ForeignColumn": "CustomerID" diff --git a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.Product.json b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.Product.json index 8b0ca46..f283548 100644 --- a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.Product.json +++ b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.Product.json @@ -2,127 +2,127 @@ "Columns": [ { "DataType": "int", - "Definition": "The ProductID column in the Product entity contains unique identifier numbers for each product. The values are numeric and do not follow a sequential order, indicating that they are likely assigned at random or based on another non-sequential system. This column is used as a primary key to uniquely distinguish each product in the database.", + "Definition": null, "Name": "ProductID", "SampleValues": [ - 756, - 726, - 963, - 934, - 896 + 880, + 781, + 872, + 842, + 833 ] }, { "DataType": "nvarchar", - "Definition": "The Name column in the Product entity contains the names of various products available. The names are descriptive and can include details such as the type of product, specific features, size, and other relevant attributes. The names are designed to be clear and informative to help distinguish between different products.", + "Definition": null, "Name": "Name", "SampleValues": [ - "Headlights - Weatherproof", - "Long-Sleeve Logo Jersey, M", - "Mountain-100 Silver, 42", - "Mountain Tire Tube", - "HL Mountain Pedal" + "ML Mountain Frame - Black, 48", + "LL Mountain Frame - Silver, 48", + "Mountain-100 Black, 38", + "Mountain-500 Black, 44", + "Road-250 Red, 58" ] }, { "DataType": "nvarchar", - "Definition": "The ProductNumber column in the Product entity contains alphanumeric codes that uniquely identify each product. These codes often consist of a combination of letters and numbers and may include hyphens. The format appears to follow a pattern where the first two characters denote a category code, followed by other characters that may represent specific attributes such as color, size, or model number. This structure helps in categorizing and distinguishing products within the database.", + "Definition": null, "Name": "ProductNumber", "SampleValues": [ - "BK-M82B-48", - "BK-M38S-38", - "FR-R72Y-42", - "HB-R956", - "FR-M94S-42" + "FR-R38B-58", + "SH-W890-M", + "BK-R50B-52", + "FR-M94B-44", + "SJ-0194-L" ] }, { "DataType": "nvarchar", - "Definition": "The Color column in the Product entity contains descriptions of the colors of the products. The values are typically names of colors or color combinations such as \"White,\" \"Silver/Black,\" \"Yellow,\" \"Grey,\" and \"Silver.\" These values don't seem to follow a specific coding standard but are straightforward color descriptions used for identifying the visual attributes of the products. This column helps categorize and filter products based on their color.", + "Definition": null, "Name": "Color", "SampleValues": [ - "White", - "Silver/Black", + "Multi", "Yellow", - "Grey", - "Silver" + "Red", + "Silver", + "White" ] }, { "DataType": "money", - "Definition": "The StandardCost column in the Product entity contains the standard cost of each product, represented as a decimal value. This cost is typically measured in the default currency of the database and indicates the fixed cost associated with the production or procurement of the product. It includes precise decimal places to capture detailed cost information. The values reflect the internal costs before any markup or profit is added, useful for accounting and pricing strategies.", + "Definition": null, "Name": "StandardCost", "SampleValues": [ - "199.8519", - "179.8156", - "40.6216", - "747.2002", - "1481.9379" + "352.1394", + "8.2205", + "146.5466", + "3.3623", + "27.4925" ] }, { "DataType": "money", - "Definition": "The ListPrice column in the Product entity contains the retail price for each product. The values are represented as decimal numbers with four decimal places, indicating the price in a specific currency. This column is used to store the standard selling price before any discounts or promotions are applied. The prices can vary widely depending on the product's value and category.", + "Definition": null, "Name": "ListPrice", "SampleValues": [ - "62.0900", - "249.7900", - "63.5000", - "364.0900", - "121.4600" + "44.5400", + "32.6000", + "49.9900", + "1214.8500", + "102.2900" ] }, { "DataType": "nvarchar", - "Definition": "The Size column in the Product entity contains various size measurements and designations for products. The values include numeric sizes, which likely correspond to specific dimensions or standardized sizing, as well as alphanumeric sizes such as 'L' which represent general size categories (e.g., Large). This column is used to specify the physical size or fitting category of each product.", + "Definition": null, "Name": "Size", "SampleValues": [ - "60", + "70", + "48", "46", - "56", - "50", - "L" + "S", + "54" ] }, { "DataType": "decimal", - "Definition": "The Weight column in the Product entity contains numeric values representing the weight of various products. The weights are recorded in decimal format, suggesting precise measurements. The values indicate a wide range of weights, accommodating both lightweight and heavyweight products. This column is essential for inventory management, shipping calculations, and product categorization based on weight.", + "Definition": null, "Name": "Weight", "SampleValues": [ - "12655.16", - "1451.49", - "1043.26", - "12759.49", - "6803.85" + "10945.13", + "8060.29", + "11747.98", + "1133.98", + "1292.73" ] }, { "DataType": "int", - "Definition": "The ProductCategoryID column in the Product entity contains numerical identifiers that represent different product categories. Each unique ProductCategoryID corresponds to a specific category that products are grouped into. The values are integers that are used to classify products within an inventory or product database. The identifiers themselves do not carry inherent meaning but are used to link products to their respective categories for organizational and retrieval purposes.", + "Definition": null, "Name": "ProductCategoryID", "SampleValues": [ - 8, - 16, - 21, - 41, - 36 + 15, + 19, + 32, + 36, + 31 ] }, { "DataType": "int", - "Definition": "The ProductModelID column in the Product entity contains numeric identifiers that uniquely represent different product models. Each value corresponds to a specific product model within the product catalog. The numerical IDs help in linking and referencing product models across various tables and records in the database, ensuring accurate data retrieval and management. The values are integers and do not follow a specific sequential order.", + "Definition": null, "Name": "ProductModelID", "SampleValues": [ - 48, - 85, - 100, - 26, - 111 + 109, + 92, + 1, + 19, + 126 ] }, { "DataType": "datetime", - "Definition": "The SellStartDate column in the Product entity contains the date and time when a product was first available for sale. The values are in the format 'YYYY-MM-DD HH:MM:SS', with the time portion typically set to midnight. This column helps in tracking the launch date of products and can be used to analyze sales performance from the start date. The dates are precise and include both the date and time components.", + "Definition": null, "Name": "SellStartDate", "SampleValues": [ "2007-07-01 00:00:00", @@ -133,7 +133,7 @@ }, { "DataType": "datetime", - "Definition": "The SellEndDate column in the Product entity contains the date and time values indicating when the sale of a particular product ended. The values are stored in the format 'YYYY-MM-DD HH:MM:SS'. This column helps in identifying products that are no longer available for sale after the specified end date.", + "Definition": null, "Name": "SellEndDate", "SampleValues": [ "2007-06-30 00:00:00", @@ -142,49 +142,49 @@ }, { "DataType": "datetime", - "Definition": "The DiscontinuedDate column in the Product entity contains the date on which a particular product was discontinued and is no longer available for sale or production. This column stores date values and can be used to filter products that are no longer active. If the column is null, it indicates that the product is still active and has not been discontinued. This information is useful for querying products based on their availability status.", + "Definition": null, "Name": "DiscontinuedDate", "SampleValues": [] }, { "DataType": "varbinary", - "Definition": "The ThumbNailPhoto column in the Product entity contains binary data representing the small thumbnail image of the product. The images are stored in binary format, typically as byte streams that can be converted to image formats such as GIF, JPEG, or PNG. These thumbnail images are used to provide a quick visual reference for the product in user interfaces or reports. The binary data must be interpreted correctly by the application to display the corresponding images.", + "Definition": null, "Name": "ThumbNailPhoto", "SampleValues": [ - "b'GIF89aP\\x002\\x00\\xf7\\xff\\x00\\xd8\\xc4\\xba\\xc4\\xa6\\x98\\xcd\\x0e\\x08\\xbaeM\\xf8\\x88h\\xadZEeE;\\xfb\\'\\x16\\xfa\\xf9\\xf9\\x94\\x0f\\x07\\xf9\\x9a{\\xe5\\xd4\\xca\\xd6\\xd5\\xd5\\xc9\\xb3\\xa8\\xb4\\xb4\\xb4\\xd4\\xb6\\xa9\\xf9\\xf5\\xf3\\xec\\xe3\\xdc\\xa4\\xa4\\xa3\\xf8:$\\xe2\\xb9\\xa6\\x9f\\x9f\\x9f\\xb2\\xa2\\x9b\\xf5\\xf5\\xf5\\xcf&\\x17\\xa9\\x84w\\xb8\\x97\\x87{nj\\xed\\xed\\xed\\xfaU:\\x90J:\\xf3\\xed\\xe9\\xc5yd\\xe6\\xe6\\xe6\\xde\\xde\\xde\\xb2\\x88wl%\\x1b\\xca\\xb9\\xb1\\xf0\\xf0\\xf0\\xea|_\\xa4wf\\xf2\\xea\\xe5\\xab2#\\xe8\\xe8\\xe8\\xf9\\xa5\\x87\\xe5vZ\\xbe\\xbe\\xbe\\xc7YI\\x93i[\\xe7\\x87j\\x8ccU\\xdd\\xcb\\xc1\\xea]CvTJ\\xfe\\x01\\x01\\xfbB*\\xf9\\xb5\\x9b\\xfc\\xfa\\xf8\\x84#\\x18\\xd8\\xaa\\x96\\xfb\\x16\\x0c\\xaf\\xaf\\xaf\\xa4\\x9b\\x96\\xe3\\xce\\xc5\\xe7\\xd9\\xd0\\xe7\\x9c\\x82\\xa4F3\\xfc\\xfc\\xfb\\xa5!\\x16\\xc8\\x99\\x86\\xe6fI\\xc77$\\xb2\\x11\\x0b\\xf6\\xf1\\xeeN\"\\x1c\\x994(\\xe4\\xde\\xda\\x9awh\\xebC+5\\x03\\x05\\xfbkL\\x83WL\\xfbrT\\xea\\xe5\\xe2\\xb9\\xb9\\xb9\\xd7M4\\xc8\\x88w\\xdd\\xd1\\xca\\xfaK0\\xd5\\xbe\\xb2\\xe2\\x04\\x02\\xec(\\x18\\x9b\\x83z\\x87\\x86\\x86\\xaa\\xaa\\xaa\\xd8x]\\xb8\\xac\\xa6\\xf9\\xf7\\xf6\\xf93\\x1fE*#i\\t\\x06\\xdc\\x82f\\x876)\\x84lc\\xee\\xe8\\xe4x4*\\xfb\\x1e\\x12\\x9aVH\\xe8\\x8dr\\xb2I5\\xdb\\xd6\\xd3\\x8btjw\\\\S6/,\\xfe\\xfd\\xfc\\xe6\\x94z\\x99}q\\xd5\\x93z\\xb5ze\\xfd\\xfc\\xfbsKB\\xf9\\xc1\\xaa\\xe7S;8#\\x1e\\xc4r]\\xa7\\x95\\x8dl>3\\xca\\xca\\xca\\xe2\\xe2\\xe2\\xe9\\xdd\\xd5\\xda\\xda\\xda\\x85\\\\PH\\x05\\x03\\xb9\\xb7\\xb5\\xd1\\xd1\\xd1\\xe9\\xaa\\x92\\xfa}\\\\Y;3\\xfb`BZ\\' \\xf5\\xf2\\xf1T6-I\\x1a\\x14\\xb7U?\\xc3kR\\xce\\xce\\xce\\x83NC\\xdd\\x8ds\\xc7\\x81iW\\x06\\x03\\xa7\\x8b\\x80\\xc2\\xc2\\xc2\\xe9nT\\xf2sT\\xe3\\xc4\\xb4W\\x1c\\x15b4*\\xfb\\xad\\x91%\\x17\\x13\\x93\\x93\\x93\\x96\\x87\\x80\\xc9R3\\x0c\\x00\\x00\\xf4_A\\xc9\\xac\\x9e\\x98?1\\xeb\\xea\\xea\\xf2}^h\\x1a\\x16\\x9d\\x91\\x8c\\xe28#\\xf3\\x01\\x00\\xcd\\x94}\\x86>4\\xc6\\xc6\\xc6\\xce\\xcb\\xc9l\\x11\\x0c\\xf6\\xf3\\xf2\\x8a, D\\x11\\x0e\\xcbcJc+#x+\"tA6\\xd8eK\\xc6\\xbf\\xbb9\\x0e\\x0b\\xc5\\xc3\\xc2\\xac>-z\\x1b\\x11\\xdf\\x14\\x0bT\\x11\\x0c\\xdeH/\\xdcX>\\xbd\\xba\\xb9\\x98o`\\x91[Q\\xd5\\xd3\\xd2N/(\\xf2lM\\xe0\\xd9\\xd5\\xe4\\xe4\\xe4\\xfbgI\\xa3O?\\xf0\\xec\\xe9\\xfb,\\x1b\\xcd\\xc9\\xc6\\xe6 \\x12\\xf3\\n\\x05\\x99.!\\xad\\xa5\\xa0\\xe6\\xe1\\xde\\xc1\\xbd\\xba\\xca\\xc4\\xc0\\xa9\\x80o\\xa1bO\\x8a\\x7fz\\xa8\\xa7\\xa7\\xfb\\x81`\\xf3fG\\xfe\\xfe\\xfe\\xfe\\xfe\\xfd\\xd1\\xa4\\x91\\xfd\\xcf\\xbb\\xf5pQ\\xc1\\xa0\\x90\\xd0=\\'\\xb1\\xab\\xa7\\xad\\xac\\xac\\xd6\\xa0\\x9c\\xb3\\x8f~mVN\\xb6oZ\\xdfqU\\xef\\x8bz\\xba\\x9f\\x92\\xfa\\x90q\\xb0C10\\x11\\x0e.\\r\\n\\xe0\\xbc\\xb3\\xbf\\xbf\\xbf\\xff\\xff\\xff\\xff\\xff\\xff!\\xf9\\x04\\x01\\x00\\x00\\xff\\x00,\\x00\\x00\\x00\\x00P\\x002\\x00\\x00\\x08\\xff\\x00+\\xf4\\x1bH\\xb0\\xa0\\xc1\\x83\\x07](\\\\\\xc8p\\xa13\\x17T\\x9cQ\\x998\\xb1\\x90E\\x07\\x18\\x1d\\xf4\\xd8\\x08\\xcf\\x8b\\x97r\\x12$T\\x18Y\\xe1\\x93\\xc9O]Rv!\\xb7\\xa1\\x9f\\xbf\\x970c\\xca\\x9c)\\x13\\x9d\\xcd\\x9b\\xe8\\xe4\\xe8\\x943\\xa4gO\\x04@\\xc3\\x08\\xbd@\\x94\\x91\\x89\\xa3\\x1c8\\xc8Z\\x11\\xa2\\x1a \\x11\"\\x041``\\xe8\\xcf\\x1f]\\x97 j,7\\xd2%\\xcd\\xaf`\\xfd\\xe1\\xbc\\xb9\\x93\\xa7\\xcf!@\\x11\\x08\\rC\\xf4\\x82Q\\xa4J\\x99:\\x85*5\\x9a\\xa1HW\\xb3R\\xd1\\xe8E\\xa4\\xd7\\xb0\\x80a\\xe6,\\xabsH\\xe1\\xb3i\\xd7\\xb6}k\"\\xe9\\xd2\\xa6O\\xa3N\\xbd\\x9bWk\\x8f\\xbe\\x02\\x03\\xd3\\xb4\\x99\\x8e\\xf0\\x9d\\xcf\\xa0\\xef\\x9c\\xcd\\x81\\x16m\\xd0\\xa1E\\x8f6\\x8e\\x0b\\x99.\\x03\\xbbx\\xb1Z\\xc6\\xfcW\\xf3`\\x9d\\x9fs\\xe8V\\xbb\\xb6\\xf7\\xda\\xb4j\\x83\\xa3v\\xab\\xda\\xb1\\xdc\\xc8R\\xa9\\xc6\\xd6\\xcb\\xd7\\xaf\\xed\\x9d\\xb9\\xc3@\\x80\\xd0+I\\x92\\x0f\\x1fRh\\xd7\\x8e\\x1d\\xbb\\xf5^\\x10\\x14_\\xff`\\xbb\\xb88\\xeb\\xb9\\x92aW\\xde{\\xd9y\\xd8\\xc1\\x9f\\x11@\\xe0W\\x8a\\xcf\\x8b\\x17G\\xf2\\xbb\\xcb\\x7f\\xa4\\xd5}\\x10\\xa5\\xf0\\x13H\\x04\\x11\\xa0\\x91\\x026\\x1f\\xf4\\xd2K[\\xe5\\xc1\\xf5\\x18z\\xc9Q&\\x1b{\\xb4\\x81\\xd5\\x99\\x1cw\\x84\\xf1\\x83\\x15\\x8f``\\x8b\\x13\\x1d(\\xa2\\x885P@!\\xc5\\x89PX\\xa3H\\x07\\x1d8q\\x04\\x06\\x8fX\\x01\\xc0\\x02@\\x0c\\x88\\x066&0\\xa2\\xa3\\x8e\\xe6=\\x88\\xdck\\x122\\xd7^f3\\xc1\\x97B<\\xad(\\xb3\\x85\\x187`\\x11\\xa25\\'\"\"\\xa59R\\x9e\\xa8b\\x07X\\xdc0\\xc1\\x16\\x02\\xb4Q\\x04\\x00?,\\xc0D\\x818\\xe6\\xd8\\xe3q\\xae)\\xb7^sD\\xc64\\x18\\x02V\\x08\\xa0\\x8c\\x1a\\xd90\\xe9\\xa4\"&\"b\\x0e\\x01|\\xe2\\xc3\\'\\x95R@\\xb1b\\x96\\x13\\x1c\\xa0\\x86\\x00D\\x94\\x92\\x05\\x00W\\x00\\xf1\\xcd\\x8dH\\xad\\xe6\\xa3k\\xeaM\\xc8fmba\\xf8\\x83\\n\\xb7\\xb0\\xc2\\x83\\x1abLp\\xa7\\x89{\\xe2\\xa3\\xc0\\xa9\\xa7\\xe2\\xe3\\xa79\\x81\\x0e:A6j\\xf0\\xff`\\x83\\x00\\xc8\\xb4\\xf3@\\x16\\x8d>\\x9a\\xd4\\xae\\x93J\\xa6\\xa6\\xa5C\\xd6\\x96\\xd3\\x1d\\xf1\\x08`\\x83\\r\\xac\\xa8q\\xc0\\x04M\\xe2)E\\xa9\\n\\xb0\\xc0B\\'\\x9dH\\xab\\xc0\\xaaR\\xa8\\x98\\xa5\\x18\\x86\\xb2b\\xc3-D\\x88\\x13@\\x03321\\x85,J\\x9d\\xf7c\\xa5BV\\x08\\x93N\\xf1hq\\xac\\r\\x9ff#j\\x07\\xd6\\xb0\\x83\\x08\\x01\\xa6N\\x8b\\xc3\\xbf8T{-\\x01\\x88H\\xe1*\\xac\\xde\\x1e\\x8b\\x04\\n\\x1a\\xc0\\x82\\xab\\xb9\\xb2D\\xdck\\x84\\xcb\\xcd\\xe6^\\xa6?\\x18;/\\x0f\\x07\\xd8y\\xc3\\r\\xd6\\xccB@\\xb4\\x9d\\xe0\\x90\\xc7\\xc9y\\x04\\xcc\\xc2\\xb5\\xe6t *\\x16\\x13\\x88\\x11k\\xc26\\x84+O\\x00Y\\xcc`\\xee\\n\\x11\\xa3\\x99^\\x90\\x16\\xb7\\x89\\xe1\\x0b\\xb7\\xcc\\xebi\\xc7\\x13p\\x9c\\r\\x0f\\x1d\\x8c\\xcc\\x82\\xc98\\x9cx2\\x0e+\\x13`(\\xac\\xcb\\x8a\\xb1\\x05\\x0f\\xdc\\xcc\\xab\\x85\\x07M\\xdc\\\\\\xc2\\x15;\\xaf\\xe03\\xc5k\\x06\\xfb\\x12:w\\xa0\\xa1\\xf1\\xb1\\xc9.\\xcb\\xc3\\r\\xcfv\\xa0\\xc6\\tl\\x04q\\x08\\x0ej4\\xff)F\\xca\\x87(\\xd0\\xc1\\x01\\xd6\\x98\\x03E6[l\\xb1\\r\\xd7E\\x1fK\\x84\\x0ca\\xe3|\\xc57S\\x98\\xdd\\xda\\xcf\\x15S\\xe8\\x1e\\x86\\xfc\\xc8k4\\x9dI[\\x83\\xc3:\\x04\\x88AC\\x19s\\xacb\\x8f\\x18At2\\x81=\\x87\\x04\\xa1@6X(\\xb0\\x0e\\x0b\\x1dl\\xa3\\xb82\\xdc4>k\\r20\\x0c\\x0b\\x00\\xd4|\\xc3\\xd4\\xe5h\\x03\\xeb\\xae\\x1c\\x08t>/\\xb2\\xa0\\xf3\\xa0H\\'y\\x98\\x93M3_\\x94a\\x8a=[\\xf0\\x9b\\xcd\\x1cA\\xcc\\xc1\\x06\\x93\\n\\xe4\\xa1\\x00\\x16\\xdb`\\xb0\\r\\xef\\xb74.\\x80(Q\\xc0 \\xce=c3\\x11\\xc2\\xfd\\x10\\x02\\x99\\xf9\\xa5be\\xf8\\xc0\\xdb\\xd0[\\x16\\xa8\\xa0\\x84\\x85-\\x00\\x03\\x12_\\x98\\xc4*\\xf4@\\'L\\x98b\\x121(\\x03\\r\\xd4\\xd0\\x01\\x83\\xa9\\x01\\x03\\x18P\\x862\\xb4\\xa0\\x85\\xc6%\\xc0\\x00x\\x18\\xc43\\xe41\\xc6\\xe1\\x8fq\\xe8B4\\x18 \\x88B\\xd6\\x05h\\x9a\\xcbL:\\xee\\x90\\x84\\x08\\xac\\xe1\\x1a\\x9e\\xa3\\xd7\\x01\\xec5F2\\x86\"\\x14\\xc0Hc\\x19&1\\x879\\xb4\\xf1\\x8dF\\xa0\\x81\\x1e\\x98\\xe1\\x0e%2\\xd1\\x89H\\x88\\xc2\"\\x0c\\xe0\\x8aV\\xba\\xb2\\x95\\xf3(\\x048\\xc2\\xb1\\x0bCD\\x036\\xfbS\\xdb\"{\\x11\\x01zd \\x16\\x9e\\x9b\\xa1\\x13\\xc6X\\xc6P4\\x03\\x18\\xf5(\\x03\\x1b\\x96\\x19\\xc1\\x16\\xd4\\x03\\x8e4h\\x063lQGe4Q\\x0bH\\x90\\x84\\x1f\\xf4\\xb1\\x0f}8\\xc2\\x11\\x9b\\xe0\\x858+A\\x0baD\\xc1\\x12`(D1\\xc2\\xa1\\x8d]X\\xe5\\x18,\\xcc\\x0c:r\\x00\\x81\\x08\\xcc@\\x08\\x96X\\x03\\x12:\\xa5\\xff\\xb4\\tT\\xb2\\n\\xcdh\\x061\\xeaq\\x82\\x18\\xb0!\\x0618A\\x0b0\\x81\\x89P\\xaab\\x9a\\xd4\\xd4 \\x07\\x890\\x088,c\\x0f\\xdf\\xdc\\x04\\t\\x84a\\x06!\\x08\\xa1\\r\\xc8\\xe8\\x86\\x0ex\\x91\\x0cI\\xf4\\xc1\\x02\\xa4pF1\\x8eq\\x8c~\\x04\\xcd%.D\\xc3\\x0f\\xda\\x11\\x0b.(\\xa1\\x89\\x1f\\xe0\\xe2\\x11\\x86F\\x05\\x19~q\\x8a1\\x18\\xe0\\x0c\\xb5\\xa8\\xc0\\xc5^\\x82l\\x08| \\x02\\x92~@\\x89\\xe5!\\x8e&\\x80\\xd9\\x03d\\xa8\\xf6\\x13\\x08\\xc1\\x0bl\\x07\\x83\\x13~0F\\xaa\\tQ\\t^\\xa4a\\x1c#\\xb0C\\x01\\xba\\x91\\x80k\\x8c@\\x1d\\x0f\\xe0\\xc7\\x0ez\\x9d\\x0f\\x10P@\\x13u\\xff\\x80\\xb7g\\xe5\\xfd\\x0bO\\xec\\xa1\\x11p\\x00\\x85\\xbe\\x8d\\xfd\\x12\\x9d\\xe4 \\x0cI\\xd8\\xf2\\x02f\\xd0\\xecvh`\\x04\\x05\\xf7\\x80\\x0ePAV^\\x90\\xc1\\xe8\\tp\\x84\\x12\\x16\\x01q<\\xfc\\x82\\xe2\\x95\\xa8\\xc4\\xd1u`\\x063\\xf8\\xc2\\x0ck\\x80\\xee\\x08\\x8a\\xa0\\x0eu\\xe0\\x82\\x0f\\x1e\\x15B,\\xba1\\n\\x1aW\\x82\\x10\\x9e8\\x854\\xe61\\xec\\xae\\xd0\\xa43w\\xa0gv\\x02\\x01\\x04f\\x0b\\xbc\\x1d\\x04?\\xb1\\x0e\\x84\\xb1\\x08%\\x9c\\xe2\\x9b\\xa3P\\x02\\xc4%\\x11\\x85`\\xfc\"\\xeaR\\'\\xe9F\\xcd\\x90\\x0b\\x0f@C\\xc1\\x0c\\xc6\\x05%\\xe8Q\\x80X\\x98A\\x07\\xc90\\xba\\x8c\\xa3\\xder\\xb5\\xcf\\x03\\x14>p\\xfbfpC\\xcf\\xebD \\x10;\\xef\\xf9\\x08\\x9e\\x11\\x85\\\\p\"\\x18}_D0\\x82\\xe1\\x07I\\xc8\\xe0\\x190\\x18\\x06!f<\\x8ad\\xe8\\xe0\\xea\\x8d\\xcf:=\\xec ]\\x10\\x0c\\xe0\\x1a\\xb1\\xf0\\x05\\xe65_\\x89\\'\\xf4Q\\x1f/\\x8f\\xf9\\xcc1%\\x93\\x0b\\xc5\\x9d:\\x1f@\\x03\\xc0\\x99\\x1d\\x80\\x11\\xa0\\x00\\x1a\\x92\\x18\\x86\\xff\\x1f\\xc6\\xef\\x07<\\xc4O\\x1c#\\xc8\\x00\\x0c8Aq\\xa2\\xfb\\xfe\\xea\\xb1\\xf0\\xc05\\n\\x00]]C\\xa2\\x00\\xd7X\\x82\\xf2\\x93!\\xef\\xe6\\xf71\\xed\\xf6\\x86o\\xd3\\x07\\x18\\xe8`}9 \\x1f9\\x17\\x01\\x0b\\xd0l\\x1a\\xf0e2\\x00\\rQ\\x00\\r2\\x00\\x03(0\\x02\\x1a\\x10\\x00\\x01`\\t2\\xd0c\\x15\\x97\\x00:\\xd0\\r\\xdd\\x10\\x0bB0\\x7f\\x030\\x00\\x99\\xa5YB\\x80]:0\\n\\xcb@\\x08\\xfa\\x90vi\\xb7\\x07\\x89\\xc0v\\xc4\\xb6o\\xef\\x01\\x1d7\\xd7H@\\x00\\x00\\x0f\\x80w@\\'\\x0e\\xe2\\x90\\x01\\xf2p\\x81\\xb7\\x02\\x00\\r`\\t\\x83`\\x00J\\xb0\\x0c\\xb4@\\x02:\\xa0\\x03K\\x80\\x0cm\\xf0UT\\xe8d\\xdd\\xe0\\x0b\\xc2@\\x02\\x9b@o\\xa7\\xd0\\x85\\xf5\\xd6\\x085PeXF}\\x04\\x88!\\x19\\x92s\\xcb\\xc6\\x83\\xb0\\x80\\x81\\xb0\\x00\\x0b\\r\\xf0\\x00`\\x02\\x04\\xb3v\\x842`\\x00\\x8d\\x00N\\x8bP{\\x92 \\t\\xd0\\xd0\\x87}\\x18\\x05Q0\\x08~\\xb0\\x08\\xa7\\xb0\\x07^X\\x88\\xd2\\x10l\\x1a\\xe6\\rWf\\x83\\x9a\\xff\\x91)w\\x10b\\xff\\x86z?0\\x03\\x96\\xf8\\x03a\\x02\\x04\\x05\\x92\\x02h@\\r%\\xa0\\x01\\xcfP\\x03\\x89 \\rc\\x80Q\\xa2\\x96\\x08R$\\n\\xa3h\\x88{\\xd0\\x8a\\x85\\xd8\\x8ac\\xd0\\x08\\x18F\\x0e}P\\x0e\\xef\\xe0a4\\xf7\\x88\\x99\\x82Z\\x10p\\x1dh\\xa0}\\x04R h\\xe0\\x1d\\n\\x92\\x02L\\x00\\x00\\xf7`Wx\\x90\\x08\\x8d0\\x06\\xceX\\x8a\\xad\\x18\\x8d\\xd2\\xb8\\x07\\xd9f\\x00a\\x08z\\xef\\xa0\\x11\\xa6\\xa5\\x8bnbs7\\xd7\\x8b\\xd6\\x11\\x8e\\xe0\\xe1\\x1bI0\\x05W\\xd0\\x00\\x1a`W\\x9a\\x96\\x08\\xa38j\\xa4\\xe8\\x8c\\xeeXjR\\x94a\\xdf\\x15^\\xceP\\x08m\\xc5\\x8d5a\\x86\\xbaq\\x80\\x07\\x08\\x1c\\x08@\\x1aj\\x91\\x04\\xb2\\xc0\\x04\\x93v\\x0f\\x96pi\\x83P\\x03x\\xb0i\\x06\\xf0\\x90\\x9bV\\x035\\x90\\no@\\x07\\x96`\\x01\\xe9\\x04\\x0e\\xe0\\xf0R\\xfa\\x08\\x16l#\\x1a\\x9fq\\x18g\\x81\\x16lA\\x90\\xdfp\\x05Fh\\x01\\x1a`\\t\\x19@\\x07t\\xd0\\x040\\xe9\\x92\\x96`\\t\\'\\x95N+\\xc5R\\xf1\\x86D\\x86\\x1d)\\x16cq\\x1bf\\xe1\\x13A\\xe1\\x16\\xd80\\x05L\\xb0\\x00\\xbb\\x00\\x00%P\\x02\\r\\xd0\\x00\\xa4\\xc0\\x94\\rP\\x02\\xeb\\xd4N\\xbb\\xe0N[\\xe4\\x88;\\xc9\\x93cQ\\x16#\\x99\\x18la\\x14\\xd8\\x80\\x06S\\xf0\\rL \\x08\\xd4\\xe0\\x06fy\\x96f\\xa9?UY\\x01=\\x80\\x10n\\xf9\\x96p\\xd9\\x10\\x0c\\xf1\\x10tI\\x11T\\x80\\x8f\\xf8\\xd8\\x03\\xda\\xb8\\x11=\\xd0a\\x1e\\xd1\\x88\"A\\x12\\'\\xf1\\t\\xffP\\x98\\x86y\\x98\\x88\\x99\\x98\\x8a\\xb9\\x98\\x8c\\xd9\\x98\\x8e\\xf9\\x98\\x85\\x19\\x10\\x00;'", - "b'GIF89aP\\x001\\x00\\xf7\\x00\\x00\\xdc\\xdd\\xe1\\xb9\\xc5\\xd0\\xd3\\xd4\\xdb=ANijr\\xf1\\xf0\\xf9\\xe3\\xe2\\xf2\\x9a\\x9b\\xa1\\xee\\xf0\\xf5y{\\x84\\xba\\xbc\\xc1^bj\\xbb\\xbb\\xbc\\xa5\\xb3\\xc4\\xf5\\xf5\\xf6\\xcb\\xcc\\xd2\\xb2\\xb4\\xbb\\xf0\\xf0\\xf0\\xee\\xee\\xef\\x95\\x97\\x9e\\xe0\\xe1\\xe2\\xea\\xea\\xe9w\\x82\\x94\\xd8\\xd9\\xd9\\xee\\xee\\xf8\\xe9\\xe9\\xf5\\xab\\xb1\\xb7\\xc3\\xc5\\xcaDIS\\xf6\\xf5\\xfdQT^\\xe5\\xe5\\xe6\\xce\\xd2\\xd6\\xdf\\xdd\\xea\\xf1\\xf2\\xf4MQ\\\\\\x96\\xac\\xc2\\xd4\\xd8\\xdbqu}\\xdd\\xde\\xde\\xa2\\xa5\\xab\\xfb\\xfb\\xfb\\x82\\x83\\x8a\\xf5\\xf4\\xfaNSd\\x9c\\xa5\\xb3\\xdd\\xe0\\xe3\\xfe\\xfe\\xfe\\xaa\\xac\\xae\\xed\\xed\\xf6AEM\\xf0\\xee\\xf4bfp\\xd5\\xd6\\xd7\\xb1\\xb2\\xb6TYd\\xd0\\xd1\\xd1\\xda\\xdb\\xdbRVampx\\xfa\\xfa\\xfaAES\\xc2\\xc8\\xce\\xcd\\xd4\\xdb\\xb1\\xba\\xc2\\x9c\\xa0\\xa6\\x8c\\x8b\\x93\\xbc\\xc5\\xcc\\xf0\\xe8\\xe3\\xd5\\xdd\\xe3\\x7f[b\\xfc\\xfc\\xffl\\x89\\xaa\\xbd\\xbe\\xc9HLT\\xe7\\xe9\\xecJMZ\\xf7\\xf0\\xe6\\xa2\\xa3\\xa6\\xe1\\xe2\\xe3\\xea\\xe8\\xec\\x8c\\x92\\x98\\xe9\\xe8\\xf2\\xd2\\xd2\\xd4\\xe7\\xe6\\xea\\xdd\\xe6\\xf6\\xd2\\xd4\\xe3\\xf8\\xf8\\xf8\\xbb\\xbf\\xc4\\xf7\\xf7\\xfb\\xc4\\xcd\\xd5\\xcd\\xce\\xcf\\\\[b\\xea\\xea\\xf7\\xf6\\xf8\\xfb\\xed\\xee\\xf2\\xb6\\xcb\\xdf\\xda\\xe3\\xed\\xf1\\xf1\\xfc=>F\\xb9\\xb8\\xd2:>H\\x86\\x8b\\x91\\x9b\\x98\\xb6\\xfc\\xfc\\xfc\\xb0\\xb0\\xb2\\xe8\\xe7\\xe8\\x92\\x95\\xa3\\xa6\\xa9\\xad\\xc9\\xca\\xcaFJY\\xe8\\xe6\\xf2J1a*-:\\xd2\\xd4\\xd5\\xc3\\xc3\\xd3\\xcf\\xcd\\xd1[^h\\xc2\\xc4\\xc6\\xec\\xeb\\xf5\\xc6\\xc7\\xc8\\xe7\\xdd\\xd8\\xb8\\xc0\\xcf\\xde\\xdd\\xf3\\xd5\\xe2\\xee35A\\xfa\\xfa\\xfe\\xb4\\xb6\\xc1\\xb5\\xb7\\xb9\\xd7\\xdc\\xed\\xc0\\xc1\\xc1\\xe0\\xde\\xe6\\xf8\\xf8\\xff\\xe5\\xe4\\xf7Hc\\x8a\\xc5\\xc1\\xc5\\xe1\\xe0\\xea\\xa9\\xaa\\xb2\\xeb\\xeb\\xec\\xf8\\xf9\\xfb\\x80\\xa0\\xca\\xab\\xa9\\xc4\\xc9\\xc9\\xd0\\xcb\\xcc\\xcdJNb\\xf4\\xf3\\xfe\\xbf\\xc2\\xc5\\xfc\\xfc\\xf9\\xd8\\xdc\\xdf~u\\x93\\xc1\\xd1\\xdd\\xce\\xcd\\xd9\\xb3\\xbe\\xc7\\xa7\\xaa\\xbc\\xf9\\xf8\\xfc\\xe9\\xe3\\xe6\\xfe\\xff\\xfdZHQ\\x84\\x83\\xac\\xd6\\xd5\\xea\\x9e\\xab\\xb8\\xe3\\xe5\\xe7U\\\\f\\xe5\\xe3\\xe5\\x8c~\\x9c\\xe6\\xe5\\xee\\xf0\\xf4\\xfa7:@\\xfc\\xff\\xff\\xec\\xec\\xed\\x85\\x86\\x8e\\x9f\\x9d\\xa2\\xd8\\xd7\\xda@EX\\xf3\\xf3\\xfa\\xa8\\xa6\\xaa\\xb9\\xb4\\xbbn]\\x84\\xdd\\xda\\xdf\\xe3\\xe2\\xe9\\xe3\\xe3\\xe3\\x8d\\x8d\\x98HFRRWi\\xee\\xee\\xfb\\xfd\\xfd\\xfd\\xf7\\xfa\\xff\\xfb\\xfb\\xf9\\xf9\\xf9\\xfd\\xf3\\xf3\\xf4\\xe7\\xe8\\xe87:IYV`\\xa5\\xa5\\xaf\\xfd\\xfc\\xfd\\xf9\\xfa\\xfb\\xf3\\xf4\\xf6\\xdc\\xdc\\xdb;>P82@\\xfd\\xfe\\xfd\\xf9\\xf9\\xfa\\xa6\\xa6\\xbf\\xfa\\xfb\\xfc\\xb0\\xc1\\xce\\\\U~\\xe7\\xe7\\xf6\\xeb\\xec\\xf0r\\x9c\\xc0\\xa8\\xa2\\xbfNJp\\xc3\\xc3\\xc350i5+]\\xeb\\xec\\xf5\\x7f\\x89\\x9a\\xa0\\x92\\x95\\xeb\\xea\\xf2\\xbe\\xbe\\xbf\\xfb\\xfb\\xff]\\x7f\\xa7\\xa9\\xa7\\xb677E\\xfa\\xf8\\xfe\\xda\\xd8\\xe5\\xc7\\xc8\\xd9\\xbf\\xc6\\xd9\\xf7\\xf7\\xf7\\xba\\xb8\\xc0\\xb1\\xb2\\xc7\\x94\\x84\\xa1\\x84\\x9b\\xb0\\xca\\xda\\xe9\\xca\\xcb\\xe2\\xc6\\xc6\\xcf\\xe5\\xe5\\xe4\\xae\\xc6\\xd9\\xac\\xa9\\xa8\\xf5\\xf4\\xf4\\xed\\xe9\\xec\\xe9\\xe8\\xf9Z_o\\xb0\\xae\\xba\\xe5\\xe2\\xed\\xdf\\xdf\\xe0\\xe2\\xe6\\xe9\\xf2\\xf2\\xf2\\xde\\xdf\\xed\\xed\\xeb\\xfc\\xec\\xec\\xf8\\xeb\\xec\\xfb\\xeb\\xeb\\xfd\\xf8\\xf9\\xf9\\x90\\xa5\\xbato\\x97\\xff\\xff\\xff!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x001\\x00\\x00\\x08\\xff\\x00\\xff\\t\\x1cH\\xb0\\xa0\\xc1\\x83\\x02s\\xa9\\x19\\x87\\xb0\\xa1\\xc3\\x87\\x10#F\\xfcp`\\x01\\x1e\\x89\\x183j\\x84\\xd8k\\x15\\r`NRl\\x1cI\\x12c2A\\\\N\\xc9\\xb0Q\\xb2\\xa5K\\x84\\xebV\\x01\\x1bs\\xea\\xd5\\xcb\\x9b7\\xed\\xa5!\\xa0r\\x81*48\\x83\\x8e|\\xf1oY\\x14\\x0f4j\\t]\\xba\\xb1\\x17\\x98\\x06*$0\\x9d*\\x91\\x16\\x00\\r80\\xd2R\\xa1\\xea\\x80\\x8d-\\x00\\x9e\\x84\\x82\"\\xe1\\n\\xd5\\x8c\"\\x00\\xc8\\x81Q\\xa2^\\xae\\x88S\\x0e$\\xa0\\xc1\\xa4N\\x02!f\\xa2DI0\\xe5\\xac\\xc4\"\\x14\\x18L\\xf3u\\xa1\\x84\\x08\\x8c\\xa9\\xc8\\x11\\xe0\\xc2e\\xcc\\x18[\\xc7\\x0e\\xf8\\x85h\\xea\\xc7\\t\\x18\\x17\\x1c\\xd5\\xf8\\xe0b\\tP\\x89\\t\\x8e\\x118p(X\"_\\x93\\x1f\\xa2\\x031\\x8d\\xc1\\x05\\x1f\\x8fpP\\xa0G)BD53/\\xa6\\x8eh\\x8a\\xdd\\xa3v\\xd3pl\\xb9\\xb0\\xa5\\xcd\\x94\\'\\'\\x9e\\xf0\\xf8\\x87\\x8c\\x13B!\\xde\\x12\\xec\\x8eX\\xe0L%\\x05\\xd7\\xfa\\xa5y$\\x87\\x82\\xf0-9\\x90K\\xffE\\xd8\\x08\\x92\\x12Z\\xd3\\x1ff!\\xe3\\x8fT30\\xa8$\\xc1x\\x94\\xc3\\x97\\x1c98p|x\\xb2ny.d\\x03]\\xd2\\x0c5\\xaa\\xa4\\x07\\x91\\'\\xfe\\x98\\x13\\xcd\\x1b\\xff\\xa0\\x02\\x08\\x0c8\\xb8\\xa0\\xc6\\x16\\x02\\\\\\x80Cx\\xf4\\xd8CP\\x08\\xb1T#\\x8d2f\\x19\\x88\\x10\\'\\xf2\\xc4\\xe2\\x0f\\x19\\x9a\\x08\\x84\\x06\\x04i\\\\H\\x81\\x1d\\xf4\\xb12Er\\xbe\\x88\\xf4\\x8f8\\xb1\\xc0q\\xc6\\x17\"6\\x94C\\t-\\x90\\xe2\\x0cA\\xcb\\xd8`\\x03\\x0e5\\x00\\xa0\\x00\\x03[\\x9cpA\\r\\x14\\xd0\\xe2\\x8e\\x08\\xcc4\\xe0\\t\"\"\\xe6\"\\x01r\\x14H\\xf0\\xd9\\x075\\xfcp\\x0e\\x1f\\x069\\x00\\x03 [\\xb0\\x02\\x00k\\x0c\\xd4@\\x0f+9\\xac\\x03\\x02\\x16\\xcc\\x98\\xf2\\xd0\\x0b\\xe3(\\xf2A(\\x12$S\\x12\\x1ar\\x1c\\xb0\\x83(:\\xe8\\xe0A\\x1d&L\\xf0H\\rO\\xf8\\x00\\x8a.\\x07\\xf5r&x9\\xa4\\xf2\\x816\\x82\\xe4\\xe0$=%\\x00\\xe0\\x90/\\x80\\x98a\\x02\\r\\xa4\\xee`B\\x14\\x92\\xd8\\x86Q.\\xda\\xec\\xc0\\x84-J\\xd8\\xff\\xd2C\\x0f\\x03\\xc0:F\\x10K\\xb8\\x80E\\x12\\x079\\x17\\x01\\x1b\\x0c\\xe0@\\xcf\\x14\\x12\\xbcp\\x01\\x03x\\x9cp\\x02=\\xebT\\xb0\\\\A\\x14\\x98\\xa1\\xc3\\x08,x\\x00\\x8c\\xa1\\x1e\\xdc0\\xc2\\x084\\x041\\xdeC\\xbe\\x98P\\x86\\xb5\\xb6\\xfc\\xe2M\\x19\\x03\\x0c0F\\x1f\\xc0PB\\x81\\x0bl\\x1c\\xe2\\x90\"N0 \\x07=[h8\\xce\\x16\\x0c\\xf0\\x8eM\\xc8\\xe2\\x10\\xe4\\xd0\\xc6#\\x86 \\x8e$\\xfc!\\x8f\\xf3t\\x863\\n\\xc0\\x8b\\x070aZ8@\\x86\\t\\xfe\\xf7\\xc7q\\xb8#\\x02\\x19\\x00\\x87#\\xd8\\x90\\x06\\x05\\xc8\\xa3\\x05N\\xa0\\xc4\\x06d!\\x01(P\\x81\\x16\\x15\\x80@\\x198 \\n\\x965\\xe4\\x05C\\x00\\xc1\\x13H&\\x84N0\\x83\\x06;\\x90C\\x0e\\x04\\x10\\x86@\\x04\\xe2\\x1eVH\\xc2+\\xc8\\x01\\x84\\x00h\\xa1\\x16\\xf20\\xc0>\\\\\\x99\\x85\\x15lC\\x11\\x0bPB\\x0f\\x001\\x8e\\x05\\x8c\\x80\\x03\\x89\\x10C\\x06bP\\x001\\xe4#\\x10\\n\\xf0\\x01\\tH\\xd0\\x00\\xb7NC\\r\\x03q\\x0e+\\x06\\xc0\\x01\\x1d\\xa4\\xe2!\\x94\\xc0\\x04\\x08Lp\\x8cZl\\xa0\\x1f\\xe7X\\x07%\\xc4Z\\x82\\x1f\\xfc@\\x00 \\x90\\x83\\x16\\xb4\\xa0H-<\\xa0\\x11V\\xe8\\xc0\\x11b`\\x80.\\xff`\\xc0\\x1a4\\xe8#\\n\\xf8A\\x17\\x0e\\xfc\\x8e \\x1fPG1\\x18q\\x86\\x13X\"\\x08\\xf2@\\xc4\\x1d0\\x10\\x83\\x0c\\xe4\\xc3\\x11\\xe8\\xb2\\xecCR\\xe0\\x03 \\\\\\xc3\\x10-\\xf0\\xc1\\x12`p\\r\\x0b4 \\x0ca\\xa0\\x07\\x00\\x8a\\xc0\\x07KX\\x02\\x13@\\x10\\x073\\x02P\\x8eA\\x1c\\xc1\\x0f\\xf0\\xdd\\xc6\\x11\\xb2\\x90[\\x198\\xe1\\x1f\\x04\\x90\\x01\\xd2\\n\\x90\\x01)\\xbc!\\x03\\x06\\xd8\\xc3\\x1c\\x86\\x80\\x89?l\\xa1\\x01(\\xe8\\xc6\\'J1\\x03Wd\\xe1\\x1f\\x92\\xf8\\x05U\\xad\\x8a\\x10\\xa2\\x0c\\x83\\x12\\xab@\\x026\\xe8\\x90\\x023\\xf4\\xa1\\x15\\xd2AC2\\x1c\\x80\\x80*\\xe8!\\x13\\x7f`\\x06\\x08,\\x91\\x89r\\xbc\\x01\\xbe^X\\xc1\\n\\xb2\\xa0\\x08\\xba\\xf8\\xf1\\x1f*x\\x8c*r1\\x8c\\xba\\xe2b\\x0f{\\xb8\\x04 \\x92\\x80Rm\\xc8A\\r\\x83(\\xc4\\x1e2p\\x87\\x0e\\xc4\\x8d\\x03;xKD\\xe8p\\r#\\x10\\xc1\\x01i\\xa8C\\x1d\\xe5\\xd2\\xce\\xcb_^\\xc6\\xc8\\xc8\\xb0\\xd5\\xee\\xc5\\xc4\\xc6\\xf9\\xf7\\xf5\\xe92\\x0f\\xe1E-\\x86\\x85\\x85onr\\xfd\\xe2\\xde\\x84\\x8a\\xa9\\x1c=Q\\x1aDm\\xed\\xb9\\xbb\\xd6\\x89{\\xa0OB\\xe8\\xe5\\xe6\\x81U`\\x84\\x97\\xc0@G^\\xd7\\xd7\\xef\\x9c\\x9e\\x9c\\xd6\\xd6\\xf8\\x94\\xb9\\xcc\\xce\\xa2\\xa0\\xde\\xdf\\xe09`{\\xc1\\xc1\\xd7\\xff\\xff\\xff\\xfc\\xfe\\xfe!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x001\\x00\\x00\\x08\\xff\\x00\\xff\\t\\x1cHp .\\x7f\\x08\\x13\"\\xc4u\\x0b\\xa1\\x92c\\xfen\\x15\\x9cH\\xb1\\xa2\\xc5\\x8b\\x18)\\x1eT\\xa8\\xf0\\x18\\xb2o\\t4@\\xeb\"1\\xa3\\xc9\\x93(5rD\\xd8\\x90\\x11\\x97\\x1e\\x18\\xa8\\xe4\\xf9\\xe0/\\xa5\\xcd\\x9b\\x187r\\xbc\\xd5\\xeb\\xca\\x06u\\x03\\x12\\x08\\xa8\\x99\\x12\\x17.\\x83\\xff\\x8c*]j\\x14\\xa7E\\x9d+\\x11\\xa6:\\xc5iDI\\x94\\r\\xa3j%\\xeat\"\\xd4\\x95\\r\\xf5\\\\\\xf8\\xe6\\xef\\xd7I\\x86\\x08M\\xd5\\xa8a\\xca\\x94\\x9aO\\x9f\\x82\\x90\\xe4\\xd8U\\xe5V\\x84\\xb3\\xa8h\\xb8u5\\'\\xc2|n\\xecHzB\\xa70\\x9d\\'O\\x1e\\xd0\\xad\\xeb\\x95\\xe9R\\x7f#\\x90PY\\xc2\\xd5\\xe4\\xadk\\x80j\\xf83\\xf7b@\\xbb\\xcfs\\xf0tY\\xcc\\xf8\\xa4\\xbf\\x16\\x0c4\\xe8\\xeak\\xf2k\\x86\\'\\x08\\xe6|\\x8aZ\\xfadC\\x05d\\x9c\\xb0\\xccu\\x16\\xc6\\xc0\\x86\\x02\\xa04\\xdbZ\\x1bc\\xaf^\\xb7x! \\x93\\xa3\\x0c\\x80u\\xbbs\\x1e\\x15\\xe8o\\xd2\\x97\\x17\\x0b\\x93&\\xe4[\\xfcb\\x9d^\\xfe\\x04\\x10\\xff\\x16\\'\\x8b\\x03\\t6\\x83\\xa0G\\xbc5\\xdd+\\xf5\\x12\\xd0\\x90\\xa8\\x88(Pg\\xfb\\xee\\x16\\xfdeh7\\xcf\\x00\\x8cQl\\x90`\\x1e\\x1b.D\\xb0\\xdd}\\x04\\xf9\\x13\\r+\\x18\\x8c\\x80\\x10~6\\xf9\\x13\\xc4`M\\x80sCD\\x11\\x0c\\xe2\\x05\\x07\\xe0\\x88\\x11B\\x81\\xdb\\x19t\\xd0\\x08\\xcba\\xf7 \\x84\\xb6\\xad\\x81\\xcc\\x00\\xa7\\xe4\\xe2\\x02\\x07\\x06d\\xe5\\xcf;\\x1cl\\x02\\x0e\\x07\\x1e\\x8ebCT\\x91\\xb8\\x83\\xc0$\\t\\xa1h\\xd2/\\xfe\\x98\\x80\\x00\\x15\\xba\\xf9\\xf3b\\x8c\\x08\\xe5\\x12\\x02\\x187\\xdc \\x06\\x078\\x1a\\xd0\\xc8\\x8e\\x08i\"I;zT&\\xe4E\\r\\xc9sJ;N\\x94\\xe0\\xcf.\\xfe\\x0c\\xc2\\xc1\\x85\\x08\\x95\\xb2G+\\xb9\\xf8\\xd2H\\x08\\xe5uh\\x807\\xfe\\xe8\\xd0\\x07+Ix\\xf9\\xa5\\x8c\\ni2\\x02-t,p\"B\\x83l\\x02\\x00B\\xd5\\xc0\\x03\\x86\\x0bY\\xd9\\xe0B\\x80\\x1cz\\xd1J\\x0c4\\xbc\\xe2%\\xa0;\\xe1\\x84P/\\x02\\xc8\\xb0\\xc2\\t\\'\\xbc\\xd0\\x8d\\x16\\xe9\\x08RA\\x07\\\\\\xd5\\x81\\xd0\\r\\x8a\\x02\\xff\\xb7\\x87\\x18\\xa1\\xdc\\xb2\\x1a_\\xeb\\x00\\xe0\\x85\\x80@\\xa0\\xd2\\xea\\xa7\\xaf\\xc8`\\xcb=Y\\xdc\\x83\\xca\\x07kdgZx\\'PQK2=\\x18#m\\x0f\\\\\\xa8c\\xc2\\x13\\r\\x15\\xd4\\x10\\xac\\x00\\xdc\\x92\\x0b!\\x8f^\\x95\\x0b_\\xb7\\x0c\\xb2\\x07\\x01\\x9a\\n\\xd4\\xd0\\x1a3\\xa8\\x93\\xc7\\x01\\x0c,\\x92L\\x18\\x0c\\x1c\\x80A \\x99\\\\\\xe1\\x0f\\x82\\x14\\xf9s\\x07,\\x030\\x10\\xc6\"\\x07\\xe4\\x91\\xc7\\x00\\x03\\xd4\\x92\\x07\\x12v<\\x11H,\\x95\\xb9\\xea\\xcf\\r\\x1c,z\\x08:\\xb2XUP.\\x06\\xb0`\\x825Y\\x8d\\x80\\n\\x17\\x8b\\x84\\x91\\x0c\\x03\\x03\\x18\\x9cG-\\x02\\'3\\x80:\\x94\\xb1FPC2`P\\xef\\x00ze\\xf1\\xc2\\x17\\xce02\\xcd\\x00Y|\\x83\\x811\\x03tC\\xdf?2\\x1aP\\xb1?\\xfa\\x801\\xc8U\\xbd\\xe4b\\x0e\\t\\xf3\\x9c\\x92\\x84+>\\x88\\xa2\\xc1\\x01a\\x1c\\xc0\\x05\\x14\\xcft#A9\\x12\\xac\"\\x08\\x0eq\\xb0\\\\\\x8b\\x16\\x0eR\\xd4\\x10\\x08\\x03\\x1c0\\xc04\\'\\x94`\\x84&]\\xa8\\xe2\\x8f\\x12\\xd3`\\xff\\xc0\\xc8\\t\\t\\xd4\\xd2\\x03\\x03\\xd8\\xed\\x82tB\\xd4\\x84\\xb0\\x89\\x0b\\xc5\\xc4 \\x8b9W\\xdd\\xd2\\xc8%\\x94\\xfc1\\r\\x12b\\x1d\\x00\\xd3\\t\\x1f\\x04\\xf0\\x83??`\\xc3\\x87?L\\xa8P\\x02$\\x18\\xc0\\x0b\\x85&^\\xa2\\xf9E-\\xf6:\\xd1\\x8d\\nu\\xfc\\x80\\xc5\\x08\\r\\xf8\\x93\\xc2\\x0c\\xe9\\xa8Sw q$\\x93\\x0cv\\xbf!\\xe4K\\x08\\xe0\\x8c\\xb2\\x85\\xd3\\xe2\\xb2\\xc1B0\\xc0\\xccqA-a\\xc4q\\x80\\x02h\\xfc`\\x01\\n\\xbb\\xf0q\\r\\n\\xdf\\xfb\\x03\\x81+\\xab@q\\xc0\\x01\\xd3\\xa8Q\\x99?2\\x04L\\xc5\\x17>\\x8c\\xd1\\xc5+\\x10\\xa0\\x80\\xfb.\\r\\xc4\\x02L=K\\x8c\\xa1D\\x16\\\\`\\x00\\x03\\x8cV\\x07u!\\xa4\\x13l\\x00G\\x15\\xc4A\\x02\\xc8!\\xc7\\x06$pD78A\\x89G\\xf0Cn\\xc0\\x08\\x06\\x0f(\\xf0\\x83B\\xfc\\x83\\x0fc@\\x81\\x10\\xf8p\\x05\\x14\\xf8c\\x02\\x12\\xd0\\x02\\xec`\\xe1\\x0f\\xde\\xfc\\xc3\\x1fo\\xc0@-\\xa8\\xb0\\x82\\xf9\\xa0\\xc0\\x02w\\xb8\\x03\\n\\xd4\\xf0\\x83^\\xfc\\xe0\\r\\x8a\\x88F\\x00\\xffr7\\x0b\\x00&#\\x0fo\\xe0J\\xa4\\xca@\\x02q\\x80\\x01\\x00\\xb9\\xa8\\xc3-\\\\p\\t\\x1c\\xbcB\\x08\\x94@\\xc0\\x05\\xdcp\\x01*D\\xe3\\x01\\xd8p\\x80\\x03,\\x00B\\x14`\\xe1\\x077\\x14\\xc2\\x0fF@\\x84@\\x9cO\\x06D\\xf1\\x07\\x12\\x14f\\x8b%\\xf0\\xc1\\x02#@A\\x1bb\\x11\\x004P\\xc0\\x1a\\xaa(@\\x14D\\xa0\\n\\\\\\xecb\\x0cF\\xc8B\\x1e\\xc2\\x80\\x04%&\\xc4\\x06e@\\xc79H`\\x03o\\x95\\x81\\x05\\xba\\x19G=H\\xf1\\x87}\\x14\\x00\\x01\\x90\\xf0\\xc1! \\x80\\x0f\\x08`\\xe2\\n|\\xf8\\xc1\\x19\\xb0\\x00\\x01\\np\\xa3\\x01\\x01\\xe8F\\x02\\x16\\xc1\\x05\\xab\\xf8c\\x1fi\\x83\\x84\\xd1\\xba0\\xc6\\x11\\x8e\\xc0\\x15\\x98\\xb8c\\x03\\x80\\x11\\x85!\\x9c\\xa9\\x01?\\x80\\x81\\x04\\x02\\xc1\\x80Z\\x0c\\xa5x\\x08\\x89@\\x19b\\xf0\\xc4[D\\x80\\x049\\x90B\\'h\\xc0\\x80aD\\x01\\x10\\xfex\\x800.\\xa0\\x80C\\xa0\\x00\\x13\\x14\\x18\\x03\\x1f\\x1c\\x80\\t\\x08\\xfc\\x00\\x17\\x14\\xa0\\xc0i^\\xf0,3\\xf9\\xe3\\x1b\\xb5\\xc0\\x004Rp\\xff\\xc7P\\x14\\x02\\x02Xh\\xc0\\x1aR@\\x816\\x88\\x80\\x14\\x19\\xf0\\xc4?~\\xc0\\xd0\\x1f\\xaca\\x05\\x18\\x08\\x03Y\\xa0\\x89\\x90ux\\x01\\x1c$\\x08\\xc5 .\\x91\\x03+\\xc4\\xc0\\nV\\x88\\xc7\\x11\\x8e\\xc0\\x03\\x7fl\\x83\\x1cn8\\x85\\n\\n\\xc1\\x87[8\\xe0\\x0c\\xd9\\xdb\\x05\\x05\\x1a\\xb0\\x8bD\\xa4A\\x06\\xea\\xe8\\xc14 \\x138\\r\\xc0Q\\x08(\\xe0\\x83\\x100\\xa1\\n4@\\xa0\\x05\\x01\\xf0\\x07=(\\xc1\\xaaxR\\x00\\x02\\xbbh\\x03\\x114\\xb0\\x88\\x04pG]h\\xf1\\xc7:Z\\xf1\\xc4\\x10\\xc4c\\x01xH\\x00\\x03\\xe0\\x10\\x0f\\x16Xa\\x07\\xd2\\x08A\\x15\\xcc\\xb0\\x80\\x0bpB\\x04\\xaf8\\xc3\\x19T!\\xd3\\x06\\x04!\\x16~\\xb8\\xe5\\tP\\xf6\\x06Q` \\x0f\\'P\\x82.B\\x81\\x8d\\xfa\\x15\\x01\\x05hh\\xc0\\x06\\x8c\\xe0\\x8a(\\xfc\\xa1\\x05\\r\\xe0C\\x03\\xdc\\xa9\\r&(\\xe1\\x04\\xb5\\x18\\x00\\xc4&\\xa2\\x0b\\x84\\xe8`\\x19@\\xd0\\x00\\x14\\x04\\xb1\\x81\\x05T\\x80\\x0b\\x05\\xc0\\x83\\x07*\\x01\\x84\\x1c\\x98u\\x07;\\x98\\xc7\\x02\\xf4 \\x02L\\xff\\xf8\\x83\\x02\\x98\\x18\\xc2\\x10\\x12\\xfb\\x83\\x00$!\\x0f\\x0c\\x90\\x01*\\xf2\\x80\\x81\\x15\\x0cA\\x08\\x00\\x85\\x00\\x04\\nq\\x06C8`\\nD`\\xc7#81\\x05\\x07h\\xe3\\xba\\x13\\x08\\x027\\x9aa\\x8b\\xd4\\xd1\\xa4_\\xfe\\xf0\\xc0\\x05h\\xa0\\x01\\x1a\\xd0`\\x062D\\x82\\x12T\\xb0\\x8f\\x07D\\x02\\x10\\x05P@ \\x1cA\\x05\\x02\\xd8A\\x01\\xe5\\xe0\\x81\\x08*\\xab\\\\!\\x8c\\xe1\\n%\\xe0B\\x18\\xae\\x13\\x07*\\xcc \\xaf\\xd8Hp\\x1b\\xda`\\x014\\x18\\xa2\\x1f\\x18@\\x80\"\\x92p\\x06m\\xa4\\xe1\\x0e\\xc7\\xc8\\xb02b\\x01\\r\\xb1\\x1a\\xad_\\x1f\\xa0B\\x02h\\x00\\tTh\\xe1\\x148HF9\\xb1\\x80\\x06VB\\xa0\\xc1\\xa1\\x12\\x04\\x01\\xdc\\xa0\\x00Zt@\\x14\\xc3\\xe1H&\\x12\\xd0\\x03-h!(\\xabh1\\x16\\xb0\\xa0\\nU\\xb0\\x12\\x0b<\\xf8\\x06\\x03\\xe8`\\x02\"\\xb4S\\xb9P\\x86@\\x03\\x92\\xa0\\x8ed\\xcc\\xc0O\\r\\x81\\x05,\\xbep\\x01.\\\\@\\x03Y8\\x1f\\x08\\x8a\\x00\\x01U4\\xe0\\xcc\\x93E\\x81\\x11\\xf4\\xa0\\x85\\'H\\x02\\xff\\x15C\\x18\\x1f&\\x1a\\xfa\\x83\\x06\\x10!\\xa7H\\xc8B-\\x12\\x00\\x8dC\\xd0\\xb9\\x08\\x98\\x08\\x00\\x0f\\xec!\\x07\\x02`\\x80\\x16\\x13p\\xc0L_\\x8c\\r\\x84ta\\x06\\t\\x08\\xc3*\\xb0\\xfc\\x0fH\\x04B\\x03\\xe3\\xc5\\xc17L @[\\xb0N\\x170@H\\x1b\\x02`\\x0f#\\xcc\\xe0\\x05!!\\x82=\\x0e\\xe1\\x87dac\\xc1\\xba\\x18\\x07\\x8f\\xb5\\xf0\\x0c\\xaf\\xad \\x11\\xfe\\xe8\\x85\\x05 P\\x84\\x140\\x01\\x0bL\\x90\\x83\\x0f\\x8c\\xc0\\x83\\x00\\x08A\\x1bE\\x08(C!0\\x04hp!\\x19\\x99\\xc0\\xb2?\\x14\\x90\\x85\\x90\\xd0\\xc0\\x04+\\xd8\\x1a\\x03\\xee\\x91\\xac+\\xec\\x9a\\tS\\xb0G!\\xb4\\x81\\x84t\\x10\\xe0\\x19\\x1bp@\\nx\\xe0\\x8a\\x1f\\x08\\x01<#\\x08\\xb01\\xbe\\xf0\\x01\\x85\\xbd@\\t\\xee\\xc4\\xc2\\x04\\x04\\x10\\x04\\x0b \\x9b\\x07\\xda\\xb0G\\n\\x02P\\x04k\\x9c\\xa1\\x10hP\\x83\\x1a,\\xa0\\x84\\x17\\xac,]\\x139M\\x02\\x9c\\xa0\\x00\\'h@\\x03\\x90\\x884$\\x94\\x10\\x00&`b\\ng\\x10\\x82*\\xc6\\xb0\\x8a/\\xdc\\xc3XE\\xff\\xb8\\x05\\nT \\x00W\\x04@\\x1b\\x98H\\x01\\x08\\x16\\xb9\\x045p\\xe1\\x00\\xb00\\xda\\x15R\\x91\\n\\\\\\xc0\\xd2\\x02\\xfb\\xe0A\\x03\\na\\x84IL\\xa1\\x01\\xfe\\xc4\\xc4\\x9c\\xfd1\\x0eA0\\x80\\x0bW\\x8d\\xf8\\x0cN\\xf1\\x05H\\xe0@\\x10j\\xc8B\\x0f\\x12\\xf0\\x01\\x0b`\\xc1s\\xbb\\xf8\\x01\\x04\\xc6 ZT\\xd0\\xe2\\x1b\\x81 \\xc2+\\n\\x81\\r?\\xbcA\\r\\xd8\\xf0A\\x16\\x8e\\xa8>fTu\\x06\\x1b\\x90\\x87&n\\xc1\\x04m\\x84b\\x16\\xa2\\xf08\\x05\\\\\\xf1\\x8a\\x11\\xd8\\x03\\x02yTn\\n\\x92@\\x80\\x1e\\x9c\\xc0O\\xc5\\xf3\\x80\\x02N\\xe0\\x81W\\xe0\\xe2\\x03\\xcd\\\\A\\n\\na\\x01\\\\\\xb8[\\xecZXB(\\xfc1\\x85~l\\xa0\\x01\\xd6(D(\\xba\\x10\\x8bD\\x94 \\x01\\xc6h\\xa4?Dq\\x80Z\\x9c`\\xd2\\x16 8.f\\xf1\\x8a!4\\x00\\x13\\r\\xd0\\x86\\n\\xe4b\\x0f\\x0b\\x94p\\x0c\\xe5\\xf8B\\xdc\\x9eY\\x91[\\x8c@\\x0f\\xa2\\xf0\\x875\\x9a!\\x80\\rh \\x0e&\\xf8\\xc0\\x08zA\\x01\\x0b\\x9cy\\x168\\xe8\\xc0\\xff\\x08|>\\xc6:[\\x03\\x05\\xa3/\\xc77\\x0e\\x90\\x8c\\x16\\xb4\\xd0\\x1f\\x04\\xa8\\xea\\n>P\\x08M\\xecb\\x03k\\x98E\\x9d\\x7f\\x8d\\x897l\\xe0\\n50\\x05\\xe0a\\x04\\xd0\\x90S\\x81\\x00y\\x03\\xe1\\x0f\\x1d\\xe0\\x01\\x930.\\x11\\xc1>\\n\\xf3\\r<\\xe0\\x00*\\x10\\x00\\x01P\\rZ\\x07\\x05\\xe3\\xa7Xg\\x80\\r?\\xa0\\nB@\\x01*0\\x03\\\\`\\x0c\\x04@\\x1f\\xb7\\x940P\\xf0\\x05C\\xb1\\x01~\\x90\\x08~ vL\\xe0Nw\\xb0\\x06\\x9a2\\x04\\xda \\x00\\xc8\\x80\\x04(3\\x1c\\xcdw\\x05\\x02@\\x00\\n\\xa0\\x0b3\\x03\\x7fa\\x90\\x07I\\xb0\\x01?\\xc0\\x07A\\x10*Z\\x80\\x0ck\\xc0\\x0b\\x02\\x15\\x00|\\x90\\r\\x98`\\x01\\x02\\xe0\\x01\\x04\\x10\\x06\\xce\\xc4\\x15\\xfe\\x00\\r\\x8b0\\x00H\\xb0\\x02K0\\x02j\\xb0\\x01\\xbd BL`\\x01\\x14\\xe0\\x07~P\\x83\\xfe\\x90\\tz0Ga\\x00G\\x16\\xd1\\x10*\\x84\\x01\\x10G\\x1d\\xb3\\x10\\x07O\\xb7\\nJ !08\\x02~\\xd0\\x05W\\xf0\\x03\\xad\\xe6\\x00\\x10\\xe0\\x0f\\x04\\x18\\x08\\xf2\\xffb&\\x04\\xc1\\x0b\\xfe\\xc0\\x0c\\\\\\x08\\x05/P\\x0e\\x020\\x02m TLp~#\\x90\\x06\\xb7T\\x02/\\x10\\x08\\x82C\\x16233] \\x00k\\xc0\\x13\\x04\\xe1*J\\xc02\\\\@\\x86-\\x80\\ri\\xd0\\x0b\\xcd\\xd0\\x05#\\xf0\\x03]p\\x07m0\\x05\\xe3\\xf0\\x058 0_p4\\xc5C\\x89\\x07@\\x05Z`\\x0b2\\xd0\\x02\\x98\\xa0F0\\xc0\\x07\\xdc\\xf0\\x01%\\xf0\\x05Z V\\x8b\\x80\\x1d\\xa7\\xa8-\\'R\\x10\\xae\\xf2\\x01ypDP\\x00\\r\\x1f@\\x0c\\xe60\\x0b#0\\x02L\\x10\\x04\\xa5\\x10\\x0e\\xc8\\x00\\tq00+@\\x8cE\\x08\\r\\x0c\\xe02\\t\\x80\\x04\\xf7\\x00\\x02 \\x90\\x04\\xa0\\x80\\x08\\x88\\xf0\\rH\\x108=P\\x0bp\\x94\\x8d(\\xc1\\x0b\\xae\\xb2\\x01\\x91\\xc6\\x00q@\\x00\\'\\x80\\x08\\xa0\\xb0\\x04\\xb4\\xf0\\x05\\x96\\xc0\\x08\\xd7\\x97\\x0c\\xc6\\x10\\x07\\xe3 \\x8f\\x05q\\x10A\\xc8\\x00\\x83\\x13\\x07\\t\\x80\\x03\\x1a@\\x008@\\x05q\\xb0\\x08\\xc6\\xb0\\x08\\xe9p\\x07\\xfb\\xd2\\x1d\\xfe\\x10\\n3\\xf0\\x8e\\xf4R\\x0bq\\xc0\\x05\\x18_\\x80\\x01q\\x13-\\xb5 \\x08ye\\x12\\x08!\\n\\xe90\\x00a\\xd0\\x03=`2\\xc2c/Z0\\x14\\xeb\\xc1\\x18=\\xa1/\\t\\xa1\\x06%\\xf03\\xd0\"-\\xc6\\xc0\\x85\\t`\\x0b.\\xc9/w\\x88\\x10# \\n\\xcf\\xc0\\x0c\\xcc\\xe0c+\\xd0\\x02\\xa3\\xb7\\x1eQW\\x17u\\x80&\\x1c\\xa1\\t\\x1f0*\\'\\x00\\rK\\xe0\\x92\\t\\xd1\\x0b\\x14\\x11\\x10\\x00;'", - "b'GIF89aP\\x002\\x00\\xf7\\x00\\x00\\xab\\xb3\\xc6\\xb7\\xbd\\xd2\\xb4\\xb4\\xb4\\xa4\\xa4\\xa4\\x8a\\x8f\\xad\\xc2\\xbe\\xc6hu\\x98\\xbb\\xbd\\xce\\xdb\\xe1\\xee\\xb9\\xb9\\xb9\\xc2\\xcd\\xe3\\xaf\\xbd\\xd9\\x96\\x92\\x9az~\\x93\\xcc\\xce\\xda\\xf2\\xf2\\xf2i\\x84\\x8f\\x9f\\x9f\\x9f\\xbe\\xca\\xe1Zf\\x86w\\x88\\xa3Rgz\\xc9\\xd3\\xe7lq\\x8c\\xb3\\xc1\\xdc\\x9b\\xa2\\xbe\\xe2\\xe2\\xe2\\xcc\\xd1\\xe0\\xd2\\xd5\\xe0\\xaf\\xaf\\xaf\\x99\\x95\\x9d\\xaa\\xaa\\xaa\\xb2\\xb3\\xc5KTx\\xe2\\xe0\\xe4\\xba\\xb6\\xbe\\xa3\\x9d\\xa7\\x9b\\xaa\\xca\\xa4\\xb4\\xd4\\x92\\x8e\\x95\\x9e\\x99\\xa3\\xb4\\xb6\\xc8\\xba\\xc6\\xdf\\xc0\\xc2\\xd1\\xbe\\xba\\xc2\\xa9\\xad\\xc4\\xef\\xee\\xf1\\xb8\\xd6\\xd6\\x86\\x9c\\xc4\\xe4\\xe2\\xe5\\xe8\\xe8\\xe8Z[w\\xd9\\xdf\\xed\\x92\\x9c\\xbc\\xb6\\xb2\\xba\\xfa\\xfa\\xfa\\xa8\\xa4\\xad\\xe4\\xe4\\xea\\xa1\\xa1\\xb5\\xaa\\xb9\\xd8\\xd1\\xd9\\xeb\\x93\\x91\\x96\\xc6\\xc2\\xc9\\x88\\x83\\x8d\\x8b\\x8b\\x9d\\xe4\\xe8\\xf2\\x8f\\x8b\\x92\\x89\\x95\\xaa}y\\x81\\xad\\xa9\\xb2\\x81|\\x85z\\x8b\\xb3\\xfc\\xfd\\xfd\\xd1\\xce\\xd3\\xed\\xf0\\xf6\\x89\\x93\\xb5\\xa2\\xa5\\xbb\\xc1\\xc0\\xce\\xa3\\xaa\\xc4\\xcd\\xd6\\xe8\\xb1\\xb1\\xb1\\xd5\\xdc\\xec\\xc9\\xc8\\xd5\\xd5\\xd4\\xdd\\xa4\\x9f\\xa9\\xbf\\xc3\\xd5oo\\x85\\x84\\x96\\xbc\\xc9\\xc5\\xcd\\x92\\xa2\\xc5\\xde\\xdc\\xe0\\x9c\\x97\\xa0\\xe0\\xe2\\xeaYq\\x80\\xa4\\xaa\\xbe\\xc4\\xc5\\xd2\\x8d\\x89\\x90>Ek\\xf2\\xf0\\xf2_`|\\x7f\\x97\\xa2o|\\x9f\\xd4\\xd8\\xe5\\xb7\\xb9\\xcc\\xd8\\xd8\\xe1\\xda\\xd9\\xdc\\xa1\\xae\\xcc\\xe1\\xe6\\xf1\\x82\\x8d\\xaf\\x84\\x91\\xb4\\x99\\xa5\\xc5\\xdc\\xda\\xde\\x8c\\x9b\\xbe\\xf0\\xee\\xf0\\x85\\x7f\\x8a\\xe0\\xde\\xe2\\xa9\\xab\\xc0\\xb1\\xac\\xb5\\x9c\\x9e\\xb4\\xbc\\xbc\\xbc\\xd3\\xd0\\xd5\\x93\\xa5\\xb3\\xe6\\xe5\\xe7\\xc1\\xc4\\xd1\\xe2\\xe5\\xed\\xd1\\xd2\\xdc\\xc6\\xd0\\xe4\\x9f\\xb1\\xd4\\xcd\\xca\\xd0\\xcc\\xc9\\xce\\x81\\x83\\x9b\\xf6\\xf4\\xf6\\x9e\\x9d\\xae\\xee\\xec\\xee\\x98\\xac\\xd1\\xf3\\xf3\\xf8\\x9a\\xb5\\xbaut\\x89\\xcf\\xcc\\xd2\\xd6\\xd4\\xd9\\x84\\x81\\x94T`\\x85\\xde\\xdf\\xe5ur\\x85\\xea\\xe9\\xeb\\xc2\\xc5\\xd5\\x91\\x90\\xa1\\x99\\x99\\x99\\xd4\\xd2\\xd6\\xcf\\xd0\\xdb\\xde\\xe3\\xf06=a\\xdb\\xdc\\xe5\\xf3\\xf3\\xf3\\xb7\\xb6\\xc7\\xab\\xb6\\xd2^w\\x85\\xc7\\xc9\\xd6\\xf8\\xf7\\xf9\\xab\\xa7\\xb0\\xc6\\xc7\\xd4\\xbf\\xc1\\xcf\\x8b\\x85\\x90\\x91\\x95\\xb1\\x9d\\xa9\\xc7\\xf1\\xf0\\xf2\\xe9\\xe8\\xea\\xe8\\xe7\\xe9\\xf4\\xf4\\xf4\\xbe\\xbe\\xbe\\xf1\\xf1\\xf1\\xf7\\xf7\\xf7\\xf0\\xf0\\xf0\\xea\\xea\\xea\\xd7\\xd7\\xd7\\xdf\\xdf\\xdf\\xdd\\xdd\\xdd\\xca\\xca\\xca\\xef\\xef\\xef\\xed\\xed\\xed\\xd4\\xd4\\xd4\\xd1\\xd1\\xd1\\xce\\xce\\xce\\xe6\\xe6\\xe6\\xec\\xec\\xec\\xc6\\xc6\\xc6\\xc2\\xc2\\xc2\\xda\\xda\\xda\\xe4\\xe4\\xe4\\xf5\\xf5\\xf5\\xf6\\xf6\\xf6\\xf8\\xf8\\xf8\\xf9\\xf9\\xf9\\xf7\\xf6\\xf7\\xf5\\xf4\\xf5\\xc7\\xc4\\xcb\\xf9\\xf8\\xf8\\xf4\\xf4\\xf5\\xf3\\xf2\\xf3\\xcb\\xc8\\xce\\xf1\\xf0\\xf1\\xf9\\xf8\\xf9\\x85\\x81\\x88\\xcd\\xcd\\xd8\\xfa\\xf9\\xfa\\xf9\\xf9\\xfa\\xd6\\xd6\\xdf\\xd6\\xd3\\xd9\\xf8\\xf8\\xf9mo\\x89\\xd4\\xe5\\xe5\\xcd\\xd8\\xe7\\xca\\xcb\\xd8wy\\x90cl\\x8f\\x97\\x99\\xb3hh\\x80`f\\x89\\xd9\\xdc\\xe9\\xea\\xed\\xf5\\xea\\xeb\\xf2\\xe7\\xeb\\xf4\\xeb\\xed\\xf3\\xeb\\xea\\xed\\xc3\\xc2\\xd0\\xc8\\xc7\\xd4\\x8d\\x9f\\xae\\xc2\\xc7\\xd8\\x8d\\xa3\\xb2\\xa0\\xa6\\xbf\\xe7\\xe7\\xec\\xf2\\xf0\\xf1\\x92\\x94\\xaa\\xef\\xf6\\xf6\\x92\\xa8\\xce\\x92\\xa5\\xc8\\xec\\xeb\\xed\\x87\\x87\\x9c\\xed\\xec\\xeddm\\x90\\xef\\xef\\xf3\\xa8\\xa7\\xb8|x\\x80sx\\x90\\xfb\\xfc\\xfb\\x97\\xaf\\xbc\\xee\\xed\\xef\\xda\\xda\\xe1\\xfb\\xfb\\xfc\\xd8\\xd6\\xda\\xbf\\xbf\\xbf\\xfe\\xfe\\xfe\\xfc\\xfc\\xfc\\xfb\\xfb\\xfb\\xfd\\xfd\\xfd\\xff\\xff\\xff!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x002\\x00\\x00\\x08\\xff\\x00\\xf5\\xfd\\x1bH\\xb0\\xa0\\xc1\\x83\\x06\\xf7)\\\\\\xb8\\xcf\\x9fC\\x7f\\xfc\"\\xf6\\xebw\\xe3\\x06\\xb0_\\xabV\\xf9\\xea\\x85*\\x93*V\\xb2f\\xe1j%\\xe3\\x16/\\r\\xaf`\\xedrE\\xab\\x96\\xadX\\xb9t\\xa5J \\xa0\\xc3\\x87\\x01\\x11\\x04\"\\xdc\\xc9\\xf3\\x1f\\xc3\\x85\\x0f!J\\xa4h\\x11\\xa3F\\x8e\\x1eA\\x8a$i\\x12\\xa5J\\x96.a\\xca\\xa4i\\x13\\xa7\\xce\\x9e<\\x81\\xfe\\x04\\xfa0\"\\xbf\\x89\\x15/f\\xdc\\xd8\\xf1c\\xc8\\x91%O\\xa6\\\\\\xd9\\xf2e\\xcc\\x995o\\xe6\\xc4\\x9a\\xd5\\x1f\\x92\\x89\\xfc \\xfac\\x18\\xd4+\\xd8\\xa2c\\x91\\x9a]\\x9a\\xd6)\\xdb\\xa8o\\xa9\\xca\\xbdJ\\xb7\\xe0>4\\x00\\xbc Cf,XD\\xbe]\\x87\\x865J6\\xe9Y\\xa6j\\x9f\\xb6\\x95\\n\\xb7\\xea\\xdc\\xc6\\x8e\\xfdI\\xa97D\\xc4+=\\xf6z\\xe5\\xe5\\xea\\xd0/Q\\xb1G\\xcb*E\\xdbt-T\\xb7S\\xe3ZE\\x9d\\xfa\\xcb\\x0br\\xc7\\xb0\\xe0\\x11\\x11\\xe7\\x06?\\xdaB\\xbf\\xde\\xe6,x7h\\xc3\\xbfI+\\x1eN|\\xa0\\xbff\\xa1^\\x88\\xff\\xb3a\\xa3\\xc0\"S\\x83\\xf0A\\xb7\\xbd9\\xb0\\xee\\xcf\\x85}\\x8fN,\\xfc4\\xea\\x86SB\\r1p\\xa1\\x01\\x83:X\\xcc\\xa1\\xca/\\xb3\\xf5\\xa5\\x19`\\xb9yFXo\\xa2!\\x16\\x9ci\\x8ca\\xb5O\\x0e\\xa0x\\x01\\x808\\x14p\\xd2\\xc5\\x18\\xf3\\xa0\\xa0H\\x0cb$\\x93\\x97\\x81\\xd2\\xb5\\x97\\xe0`\\xbc\\x85v\\x18p\\xa5-F\\xdc>\\xd4\\xa4#\\xcd\\x0b\\x88\\x90\\x01\\x81\\x86\\x10T3B\\x121\\xc4!\"\\x89\\x7f\\xe1\\xd6\\x19\\x8a\\xd7\\xc9\\xe7`\\x8b\\xdc5\\x86D8{\\x00\\x90\\x87\\x8d]TPA\\x17\\xd8\\xa0`\\x03 1\\x18\\xe3\\\\f%\"8\\xa4u\\xf15\\xc8\\xe2v\\xf6I\\xe8B\\x06G\\x94\\x91M\\x08a\\\\\\xe2\\xe6%a<\\xb2\\x85\\rx@\\xf2\\xcb\\r\\\\\\x06I\\xdd{\\x0b\\xaa\\x98\\x1d}\\x10\\xa2\\xa6\\xda\\x0e\\xa4,Q\\xc6;\\x8d\\x84\\xc0\\xa6\\xa23\\xc8AE\\x01sh9\"{^V\\x07\\x1f\\x83+jW_\\x84<\\xf9\\xf3\\xc5\\x02j\\xd4\\xc0\\xc6\\xa1\\x134bj#3\\x10\\xc1\\x80\\r\\x8b\\xd8\\xc3\\xcc\\xa4\\x12Y\\xfft\\xd1\\x9e\\n\\xa6\\x88\\xdd|\\x0f\\xbaH\\xd7>H\\x80\\x83\\xc1&\\xa4\\xc0\\xc1\\x06\\x05e\\x94a\\xc0\\xb1c\\x18qB\\x1d\\x8a\\xd8\\xd9Om\\x11\\xf5\\x01\\x002\\x0f\\xf8B+\\x91af\\n\\xa8\\xae\\x12\\xf2\\x03\\x8e\\n\\xbf\\xaa\\x91\\x05\\x1cW\\xb4q\\xc4\\xb9\\xd1\\xfc\\xc0@\\x11\\xc7\\xe8\\x11\\xcc\\xb3B\\xf5\\x93\\x02\\x05\\xf9h\\xe1\\x8e/\\xee\\xd5Z\\xa4\\x98\\x9a\\x06\\xbak?\\xe0H\\x00\\xee\\x0e&\\xa8Q\\xc2:Y\\xc0\\x00\\xc3\\x05Bx\\xf0\\x89\\x0f1\\xf4\\x02oD\\xd0\\x1c@\\x8e\\r,\\xbcbL\\xbe\\xd8b\\xfag\\xaeI\\xf6\\xb4O?M\\xf8!0\\x06\\x0b\\x10\\xfc\\x87!\\xea\\\\\\x11M\\x0f\\x0c\\xe0P\\x80\\x08\\xc2L\\xccA;eT\\x10\\x02#\\x05@\\x82\\x8a/_^\\xea\\'\\xaeH\\x96\\x99\\x15\\xc9\\x16\\x98\\x0cn\\xca&\\xac|D\\x03\\'\\xc4\\xd5) \\x03\\x18X\\xc2\\x12\\xea\\'\\x07\\x0fX\\xefY\\xfd8\\x80\\x05\\xf8\\xd7:8\\x80\\x0f\\x05\\x80\\x90\\x05\\x01;64\\xb2\\x15\\xee_MX\\xc3\\x02\\xddg\\x81\\x00lB\\r\\x19`\\x83\\x15\\xe4Q\\xc1\\x0bb\\xef\\x00<\\xd8\\xe0\\xf6\\x96\\x90\\rel!\\x84#\\x04\\x93\\xc7\\xff\\x0exB\\t\\x91,\\x08k@\\x00\\x03\\x15\\x00\\x00\\x15\\\\\\x83\\x14\\x04\\x98\\xe1\\xfdl\\x98\\xc1\\xd4m\\x90\\x14l\\x98\\x87\\x11\\xe8\\xe0\\x00g\\x00B\\xf8\\x08jP0\\x121\\x94\\xeb;\\x04\\x07Rp\\x8fJ\\xa4\\x00\\x04\\x07\\x88i\\x00\\x18!\\x04\\x06d\\x14\\x9f\\x9ap\\x80\\x08\\xe8 \\x85/D\\x02\\x1d\\xf5\\xa4DA\\x85\\xd9GP\\x9e\\xf3t$\\xfb\\x823rp\\x8f\\x03h\\xe2\\x0b{X\\xc1\\n\\xc6\\xd1\\x8e\\x138\\xec\\x9e\\x18\\xfc\\x8294\\xe1\\x8ce8\\x80\\x03v\\x08\\xeaP\\xf9XB\\xa3\\xaa\\x0f\\xa9M\\xf0\\x04\\xbe\\x8f?\\x82\\xc1\\x8e9<\\x03\\x10X\\x18\\x86\\x98\\x87\\x81\\x85@\\xe0\\xe1\\r\\xa7\\x10\\x03\\x8es<\\x9d\\x1d{\\x92\\x88\\xc4Y\\x16\\x94?\\x88a\\x8cB\\x98B\\x0f1\\xc8s\\x9e\\xf5\\x00\\t\\x17\\x08c\\xcdl6Q\\xd0\\xc8\\x89\\xe5\\x84\\xbe\\x08\"7 \\x86\\'\\x82\\xc1\\xe8F\\x13\\xc39#\\xcaS\\x9bO\\xc4c\\x05\\x97\\xb8;>i\\xc8V\\xec\\x12\\x91\\xbd4D\\xd2\\x82\\xbe2B\\xc5\\x88\\xe9\\xb3m\\x1a\\xd4\\x95\"\\xae\\xa5K\\xd7\\x01}\\xb8\\xfa\\xd5\\xb0\\x8e\\xb5\\xacg-\\xebT\\xd8\\xfa\\xd6w\\xc8\\xb5\\xaeu\\x9d\\x80^\\xfbZ\\x00\\xc0\\x066\\x14:@l\\x9b|\\xe0&\\x03\\xc0I\\x04\"0\\x89I0\\xa0\\x07\\'\\x08\\x08\\x00;'", - "b'GIF89a3\\x002\\x00\\xf7\\x00\\x00\\x9d\\x9e\\x9e\\xfe\\xfc\\xfc\\xf275\\xfe\\xec\\xec\\xebgi\\xfa\\xbc\\xbc\\xf9\\xac\\xb1\\xff\\xf2\\xf5\\xfe\\xdf\\xe3\\xfe\\xe5\\xeb\\xfa\\xb3\\xb4\\xff\\xf9\\xfd\\xe3\\x00\\x00\\xeezz\\xff\\xf5\\xfa\\xfe\\xfe\\xfe\\xf5xy\\xb4\\xa3\\xa5\\x94\\x94\\x94\\xf3if\\xf6dZ\\xee\\xd4\\xd8\\xf7\\x9c\\xa2\\xd8()\\xf2\\x93\\x93\\xff\\xfc\\xfa\\xdd\\x02\\x02\\xff\\xf0\\xee\\xf1IJ\\xfb\\xc3\\xc4\\xc6\\xa6\\xaa\\xff\\xee\\xf3\\xfc\\xa9\\xac\\xfc\\xbc\\xc3\\xf1)&\\xb8\\xb8\\xb8\\xeb\\n\\x0b\\xf6[b\\xff\\xf9\\xf5\\xb4\\x94\\x98\\xec>@\\x9a\\xa1\\xa3\\xe3\\t\\x0b\\xdc\\t\\n\\xed+-\\xed##\\xdc\\xdb\\xdb\\xce\\x00\\x00\\xfe\\xd5\\xd3\\xd3\\xd3\\xd3\\xf7\\xac\\xab\\xff\\xfe\\xfb\\xff\\xea\\xed\\xfe\\xe2\\xe2\\xea\\x11\\x13\\xfd\\xd4\\xd8\\xf2\\x8a\\x8c\\xab\\xaa\\xab\\xdc\\x1a\\x1b\\xf0B=\\xb5\\x8a\\x8c\\xdb\\x13\\x14\\xec\\x1d\"\\xd1\\x00\\x00\\xecJO\\xe3\\xe3\\xe3\\xfa\\xb9\\xb6\\xa3\\xa1\\xa3\\xfc\\xcc\\xce\\xfe\\xe7\\xe8\\xc9\\xb5\\xb8\\xfe\\xf4\\xf2\\xe9\\x01\\x02\\xebCC\\xfd\\xcf\\xd7\\xe5,2\\xff\\xfc\\xfe\\xfb\\xc5\\xc9\\xec\\xec\\xec\\xe2:;\\xd4\\x00\\x00\\xfe\\xdc\\xdd\\xeb\\x1c\\x1b\\xe5AC\\xed32\\xe9NQ\\xd8\\xc9\\xcb\\xfe\\xe5\\xe5\\xf5\\xf5\\xf5\\xf4\\xa2\\x9e\\xfe\\xee\\xea\\xd7\\x9c\\xa3\\xe5\\r\\x0f\\xfe\\xd9\\xd9\\xf4\\x9b\\x9c\\xff\\xfa\\xf8\\xfe\\xde\\xd9\\xcdpr\\xf2TR\\xc2\\xc2\\xc2\\xe5II\\xfe\\xe4\\xe4\\xea^`\\xfe\\xe1\\xe6\\xa3\\x99\\x9b\\xf0;8\\xe20.\\xff\\xf8\\xfc\\xfe\\xeb\\xea\\xff\\xf0\\xf3\\xff\\xda\\xdf\\xd6\\x0c\\x0b\\xf3PJ\\xac\\x97\\x9a\\xf7\\x98\\x97\\xe5\\xae\\xb4\\xff\\xf4\\xee\\xff\\xf4\\xf7\\xf6\\x95\\x9e\\xd8\\x15\\x15\\xe366\\xee\\x16\\x16\\xff\\xf9\\xf3\\xf8\\xb5\\xb8\\xfc\\xb2\\xc1\\xfe\\xec\\xee\\xe8PP\\xff\\xea\\xe4\\xefDH\\xff\\xf7\\xf5\\xfe\\xd4\\xcd\\xa4\\x91\\x93\\xee95\\xf4lr\\xde67\\xfb\\x84\\x83\\x9a\\x97\\x9b\\xf3[W\\xf1_Z\\xfa\\xff\\xff\\xc6\\x96\\x9b\\xed&)\\xd2\\x05\\x05\\xd6\\x04\\x05\\x8d\\x8e\\x8e\\xfe\\xe9\\xe9\\xff\\xf2\\xef\\xe9\\x06\\x08\\xfe\\xe7\\xe4\\x9b\\x9d\\xa1\\xfe\\xe4\\xe6\\xff\\xe4\\xe2\\xdd! \\xf11/\\xfe\\xe4\\xdd\\xec\\x16\\x1a\\xd4\\x07\\t\\xe0&)\\xff\\xf9\\xf9\\xff\\xf8\\xf8\\xfe\\xf6\\xf6\\xff\\xf7\\xf7\\xfe\\xf3\\xf3\\xfe\\xf0\\xf0\\xfe\\xf4\\xf4\\xfe\\xef\\xef\\xfe\\xf8\\xf8\\xfe\\xee\\xee\\xff\\xf6\\xf6\\xfe\\xf7\\xf7\\xfe\\xf2\\xf2\\xfe\\xf1\\xf1\\xfe\\xf5\\xf5\\xfe\\xf9\\xf9\\xfe\\xfb\\xfb\\xff\\xf5\\xf5\\xfe\\xfa\\xfa\\xff\\xf4\\xf4\\xff\\xf2\\xf2\\xff\\xfb\\xfa\\xff\\xf1\\xf1\\xff\\xfa\\xfb\\xff\\xf3\\xf4\\xff\\xf8\\xf9\\xff\\xf0\\xf0\\xff\\xf6\\xf7\\xff\\xef\\xef\\xff\\xed\\xee\\xfe\\xfb\\xfa\\xfe\\xf6\\xf7\\xff\\xf1\\xf0\\xfe\\xf8\\xf9\\xfe\\xf0\\xf1\\x90\\x90\\x90\\xf1TY\\xc1\\x81\\x83\\xa0\\x97\\x9a\\xf5\\xd1\\xd1\\xa9\\x95\\x94\\xfe\\xf1\\xf0\\xf2\\x12\\x10\\xf5\\x84\\x81\\xdd\\xb8\\xbd\\xf6\\x89\\x85\\xfe\\xff\\xff\\xfe\\xee\\xef\\x97\\x96\\x96\\xff\\xef\\xee\\xf8\\xbf\\xc2\\xf3\\xd7\\xd9\\xee\\xf0\\xf0\\xff\\xfc\\xef\\xe8TV\\xe7SX\\xfe\\xfd\\xfd\\xe1YX\\xdd\\x0b\\x0f\\xf0\\x04\\x07\\xf8\\xa7\\xa9\\xef\\\\U\\xeb\\xde\\xdf\\xff\\xf3\\xf5\\xfe\\xf4\\xf5\\xfd\\xcf\\xc6\\xe7\\xe8\\xe8\\xfa\\xed\\xef\\xfa\\xc3\\xbd\\xe7KG\\xf7\\x95\\x94\\xa3\\x89\\x88\\xff\\xfc\\xf6\\xda\\x1e!\\xac\\x98\\x9a\\xfe\\xef\\xed\\xf08>\\xeaPK\\x99\\x9a\\x9b\\xff\\xf9\\xf8\\xeb\\xb3\\xb5\\xf7\\xb6\\xbe\\xeb\\x0f\\x0f\\xf7\\x9f\\x98\\xd3\\x02\\x03\\xff\\xf2\\xf3\\xfe\\xf2\\xf3\\xf5od\\xf3\\xc3\\xc6\\xf0\\x1b\\x18\\xee\\xc6\\xcb\\xe8\\x1a\\x1e\\xff\\xfa\\xfa\\xff\\xfb\\xfb\\xff\\xfd\\xfd\\xff\\xfc\\xfc\\xff\\xfe\\xfe\\xff\\xff\\xff!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x003\\x002\\x00\\x00\\x08\\xff\\x00\\xfd\\t\\x1cH\\xb0\\xa0?&\\xff\\x12\\xd6\\x02S@\\x816m2\\x84\\xdch\\xf3o\\xd1\"n\\xe5\\x8cEx\\xf0/\\x06$\\x00\\x00\\xc6$\\xfc\\xc71\\xa1A\\x83\\xff\\xfc\\x8dtc\\x81\\x00\\x1e\\x1d\\x1abj`\\xa0\\xa1\\x87\\x1a3\\x04\\x84H\\x1b\\x13\\xc1JBkc\\x82\\x81\\x8c1r\\xe4\\xc9\\x82\\x9e\\xfe\\xb5SPe\\xc5\\x0f(+\\xb0q\\xf1\\x91O\\x05\\x17\\x15\\x9c^0@\\xc2\\x85\\xcc\\xa1b\\xcc\\x1edH8\\xe2#\\x00\\xa2&\\x8f\\xaa\\x14\\xf8\\x8f\\x89\\x01\\x90\\xddb\\xc6\\x0b\\x1a \\x01\\x8f\\x1c\\xfc\\xfc\\xf3\\xc9(\\x07\\x08\\xa4\\x0f(\\xfb\\xf4\\x93\\xca\\x17\\xdc\\xa9\\x82\\xc0\\x16h\\x0c\\x02\\r\\rB4B\\xd3\\x0fd\\xd0\\x90\\x904\\x00\\x088\\x84\\x13\\xdb}\\x12\\n?\\x04\\xbc\\xb0\\x02\\x12\\x84|\\xb3@B\\xfb\\x80r\\x8aJ\\xa8\\x90\\xd2\\xcf>\\xa9\\xf4\\x93\\x10\\rJ\\x9c\\xc0\\x8e\\x074\\xf4\\xf2\\x8f&b \\xa1\\xc1\\x0bSP\\xf4\\x8f\\x13\\xec\\x08\\x98\\xc3v\\x885\\xb0[6\\x1c<\\xe3\\x0f\\x1d\\xfbp\\xb7\\xcf*\\xa1\\xf8\\xd3J*\\xfb\\xe8SJ\\x99\\xff\\xd00\\x07\\x1a\\xceT\\xd0\\x8d\\x1e\\xa6\\xfcs\\x04\\x054\\xbd`\\x06B\\xff\\x04\\xe1\\x8c3\\x00\\x10\\xf4\\x8f\\x0c6\"\\xc1\\x81\\x03\\x03\\xa9\\xa2\\x8fJ\\xfd8\\nK\\x91\\x91\\x1a\\xe9\\x8f\\x1b\\x8c\\xa4\\x10\\xc1<\\x9f\\xf4\\xc3O.t0Q\\xc2\\x89\\xd4%\\xe4\\x82\\x04\\xcelW\\x83\\x0e\\xf2\\x90@\\x05\\x02&\\xe8\\xff!\\x9c*\\x11\\xfa3\\n*\\xfb\\xecb\\x1b*#A\\x13\\x07\"V\\xf8\\xb3\\xcf\\'>\\xf6b\\xcd\\x1ab\\xec\\xc7\\t\\x11)\\xfd\\xe3B0\\x02\\x19\\xb9 \\x176\\x08\\xf2\\x8f\\x16G\\xf8\\xd3\\x8f?\\xa9|\\xc2\\xdd+\\xab\\xfcC\\xcam\\xab\\xf4\\xd3\\xcf\\x1a[\\x0cAL8\\xfa\\xf4c\\xca*\\xad0\\xc1\\xa1$-0\\xf0\\x83!\\xdd\\x8cD\\x94\\x91\\xd0\\xfcp#9\\xff\\x0cyJ,F\\xf2\\x93\\n(\\xec\\x8d\\xb2\\xcf+\\xfb\\xc0\"\\x8a+\\x97\\xf2P\\x89\\x11L\\xe4\\xe2\\x89*\\x19fx\\xc4\\x06\\nH\\xf9\\x83\\x1dEq\\xe7\\x0f\\x19?\\xf8\\x16H\\x1d\\xb3\\x08{\\n*\\x02\\xf1C\\x8a\\'\\xfd\\x90\"J,\\xfa\\x98b\\xcaX\\xee\\xfc\\xca\\r\\x13\\xf4\\x1c\\xe1\\x89+\\xe6\\xb2QD\\xbe\\x13\\xec\\xd7\\t-)7\\xdb\\x81<\\\\Lb@\\x06\\xdb\\n\\xb4O)\\xa0\\xb4\\x1b\\xf3>\\xfc\\xacB\\x8a)3\\xcf\\xd0\\x8f\\x07CDp@\\x1d\\xf4\\xe8\\xe3\\x8a>\\xa2\\x14q\\x8a\\'*\\x9d\\x01\\x0f\\x03/\\x80L\\xdb?\\x04\\xfc`\\x03\\n\\xda\\xf6\\xd2\\x8a?\\xb6\\xb5\\xffr\\n(\\xfd\\x04p\\xf1\\xb0\\x91\\xa8B\\n)\\xfe pB%V\\xdcR\\x8a)\\x01\\xe8\\xb3\\xcb.\\x9f\\x9c\\xad\\xd2?EC\\xf1\\x04B*\\xe9\\x02\\x13\\x12\\x16$\\xc4\\x8f)\\x18\\xf2\\xc3\\xed(\\xa1l\\x1b\\n)\\xfa\\xb0!\\x8a){\\xcf1\\xc4\\x10\\t\\xe0b\\x8a>\\xaa\\xb0\\xc1\\xab\\xb6|\\x7f\"I\\x07$h\\xe0\\x88\\x12\\xc5\\xfdS\\xc0\\x0b*lr\\xc6\\xe5\\xb6\\xa5b\\xb5>\\xab\\xb0\\x92a\\xf4\\xab\\xbf\\xc2\\xcb.\\x99\\x1a\\x91\\xc0>\\xac\\xec\\xb2\\xb6\\xe8\\x01|R\\xca.td\\x80\\x02\\x12?P\\xd7Z\\x03%sP\\x8b\\x1eL\\x98\\xce7,\\xa0|\\xb2\\xf0\\x003\\xeeS\\x04(e\\xb0\\xf2\\x8f=\\xe8\\x00@\\x05>\\xd0\\x0c\\xd7\\xf5\\xc3\\x15<\\x1a\\xc5(\\xbce\\x0e\\x7f$\\x03\\tP\\xa8\\xc2?\\x02\\xc0\\x0f2<\\x82\\x048\\xf0G,HQ\\nZ\\xbc\\xe2\\x15\\x9e\\xe0\\x07(L\\xd1\\x0fO\\x94\\x02\\x15\\xfd\\x88\\x85\\xd0\\xba\\xe1\\x80tE\\x00\\x01\\x91\\xa0\\x87+L\\xd7\\x1dQ8\\xca\\x1a\\x11\\x9a\\x01?\\x9a\\x00\\x0f\\r\\x9cc\\x03\\x01@\\xc5\\x05\\xffV@\\x82&0!~\\xfd\\xd0G*tq\\x8a\\x01\\xecB\\x14\\xa2@\\x85\\'v\\xc1\\n\\x7f\\xac\"\\n\\x1f\\xb0D\\x04*\\xa1\\x0c\\x04\\x80\\xc2\\x138\\xd4\\x87\\xcc`\\xc6\\x8f\\x07\\x14\\xc7\\x1b\\xdd \\x82\\rT\\xb0\\x020\\xf0#\\nw\\xe0B\\x1e\\x10\\x80D~\\xd8Q%\\xfb\\x08\\x05+FQ\\x86\\x01\\xd0\\x82\\r\\xc0\\xc8\\x00\\x0c\\x10\\x80\\x8f!\\x0c\\xe2\\x1d\\x89\\xf1\\x87\\'D\\xc1\\x8a\\x82\\xe5Q\\x16\\xb8p\\xa2-6@\\x08\\x1b@A\\x08\\xc6s\\x84\\nXp\\x00\\xdb\\xec\\xe3\\x93\\x19\\xbacJ\\xe8\\xb7\\x8a\\x01XB\\x0b\\x9a\\x00\\x81\\x07R`\\x84\\x1a\\xfc#\\x8f\\xb7\\xe3\\xda\\x00JQ\\x8a\\x81\\x81bo\\t\\x01\\x84\\r~ \\x83\\x7f\\xec\\x81i,\\x88D$N\\xa1\\xc0Q\\x94\\xe2e2\\n\\x05*\\xba\\x05\\x8aR\\x14\\x81\\x122\\x10\\xc05\\x86\\x11\\x8d?\\\\\\xe1\\n\\x91\\x18\\xc0\\x15\\xd4\\x16\\x0bO@f F\\xfa\\x07\\x076\\x01\\x85,\\xf8\\x92iT0\\nA\\xec\\xc8N;n\\xeb\\x13E\\x80\\x00\\x0b\\xeeQ\\x82\\x10(\\xa0\\tn\\x88\\x04+B\\xe1\\xff\\nX\\xd8,\\x156\\xfb\\x84\\x8c\\x10\\xc3\\x01\\x1f\\x94\\xf3\\x1fBp\\x04\\x17\\xa8\\xb0\\x96\\xed\\x84\\xcc\\x9dm\\x8a\\x04\\x02@@\\x08\\x0e\\x80\\xe0\\x0c\\xfc\\xf8E,\\x0c\\x97:m\\xb1\\xc7\\x13\\xe2;E)\\xae\\x90\\x00u4\\xe2\\xa0Dx\\x83\\nZ\\xf0\\x01ay\\xea\\x93\\xfa\\xf0\\x84)B\\x11\\x8aX\\x88\\xa2\\x15\\xa2\\x88\\xc4.j\\x10\\x05!\\xc0 \\n\\x08\\xd0\\x07?fa\\x9bW\\xa8B\\x15\\xa1\\x80L?`q\\xb9\\x84$\\x81\\x05P\\xe8\\xe5.0\\xa1\\x02x\\x10\\xe1\\x16\\xc08\\x82(Ja\\x8b[\\xc6tH\\xfa\\xf8\\x84\\xf7j\\x90\\n[t\\xa1\\x0f\\xbb\\x80A\\x11ng\\x92~|\\x82\\x14\\xa3`$\\x9cT\\xd2\\x0eB\\xb0\\xe0\\x07!\\x90\\x90!V\\x00\\x0f\\x03\\xdc\"\\x17\\x9f\\x0c\\x80\\xa7h\\xa8H6\\x8c\\xc2\\x13W`\\xd8(\\xa2\\xd0\\x8cZl\\xf3o0\\x1b\\xac\\xa7^\\x81\\x0bZ\\x88\\xc2\\x13\\x08\\xa9A#\\x96\\xc0\\x893$\\xc4\\x0cP \\x01\\x04\\xfc1\\x8b\\x94(5\\xa6\\xa0 \\xc5.V\\x11\\x80]\\xc8\\x82[E\\xe8\\x82\\xcdJ\\xb1\\x8a\\'\\xff\\xa6B\\x16\\xa2\\xe8\\x94+(\\xc8\\x9dO\\xa0\\xa2\\r\\x9eP\\x00\\x0b0\\x81\\tT \\xc4\\x0b?\\x80\\x87:f\\x80\\x18ay\"\\x14\\xddb\\xc5\\x00P\\xc1\\x8fQ\\xecBX\\xab`C\\x17\\xa4\\xf8\\t6\\x80\\xe2\\n\\xa9pE+d\\xf6\\t~\\x843!_X\\x83\"\\xd4\\xf1\\x88j\\xfc\\xc30]x\\x84\\rlp\\x03~\\x10\\x0b\\xa0\\xadp\\xc5+v\\x018Q\\\\\\xc1\\\\\\xaa\\xe8^\\x11\\x1a\\xe9\\x8fS\\x98\\xc2\\x98\\xa2\\xe0\\xe7\\xea^f\\xdem\\xe9\\xe3\\x00T\\x00\\x04\\x14\\xbc\\x100\\xee\\x06\\x00\\x0bX\\x1c\\x0eA\\xa8\\xc0\\xf2\\x1a\\xfe\\xb1\\x8c\\x16\\x00\\xe1\\x05|\\x1eK\\xcb\\x92\\xe2\\x85\\x17\\xb0\\x00\\x19\\xa1\\xfbB\\x06\\xf6\\x11\\x89\\x10\\xf6\\xa3\\x15\\xe5\\xfa\\xc7)d!>\\xfbz+\\x003\\x86E?\\xd6\\xe6\\xa9P\\xd0\\x80\\tM\\xb0\\x81\\x18~P\\x8d~\\x10\\x07\\x9cl\\x1b\\xd9\\x0f\\x04\\x90\\x87\\xd5d \\x12\\xab\\x88\\xd6Q=u\\x05}\\xb0\\xa2\\x14\\xec1\\x855\\xf6\\x91k\\\\\\x9f\"\\x00\\x07b\\x02\\x11Z \\x86s\\xdc\\x01\\xa3\\xe9.\\xc8\\x1b\\xef\\x80\\x8d4\\xb4\\xe0\\x06\\x92\\x18\\x00\\x82T]\\x8av}\\xd7\\x1f\\xa1\\xb8\\xae\\x08M\\xf7\\x8f\\x05\\xb6k\\x14B\\xfa\\x87/\\xa8\\xa0\\x8e\\'\\xf0\\xd2@\\x05\\xff\\t\\xc5?\\xa0\\xf1\\x86\\x1e\\xf0\\x85\\x0f\\xff\\xf8\\x82\\xe9f\\x0c\\x99\\x01\\x9c\\xe2\\x1f\\xa0\\xb8\\xae?.\\x9b\\x90\\x8d~r\\x16E\\xf8G\\x11\\xd2\\x90\\x86)\\xbc\\x80:i:\\x8a\\xa7\\x0e\\xf5\\x08L\\xc0\\xc1\\x07\\xa1\\xfbG\\x1d\\x80\\xc17~\\x14\\x81m\\xa8\\xb8n?@\\xc1\\xab\\x7f\\x98\\xf0\\x0b\\xa8X\\x83?\\x0c\\xc0\\x02\\x0e\\x18\\xbd\\x01)\\x91\\xdfQ*,\\x83\\x96\\'B\\x04%\\xb8A\\xa8\\x12\\x02O\\xba\\x0f\\xc0\\xbc\\x9e\\xf0\\xcfAJ\\xc1\\xa1\\x01@@\\n\\x890\\xc4\\x0b\\xd0n)\\xb5\\xe0\\xb1\\x15+\\xc7\\x84<\\xb6\\x01\\x07\\x11L\\xe0\\x06\\ti\\x060R\\x82\\x8a\\xbb\\xbb\\xe2\\x17ToV\\x02\\xc8A\\xf2\\t\\xdcA\\x1er\\x08\\xd87\\ro\\xa82P\\x03\\n\\x9d(\\xc4\\x0eXP\\x88\\x10\\xdc \\x9c\\xfe\\x90\\xc4Hr\\xe1\\x8fn\\x8c\\x86\\x05\\x02\\x98\\x80\\xd1/\\xd0\\x01\\x94\\x93~ M\\xce@\\x160\\x01\\x055\\xd4\\xa3\\x1e\\xabGA!\\xb4\\xa1\\x00>\\x84\\xc0\\x00\\x16\\x98@\\x15X\\xd0\\x88\\x1dL \\t?pD\\x03hq\\x18\\xb5\\xff~ \\xb6\\x19\\x8bn/0@|\\x1d\\xacC\\x11\\xf5\\xa0\\x80^\\xf6\\xd2\\x824\\xec@\\x0c\\xc2\\x00B\\'\\xa0\\xf0\\x06\\x02t\\x81G\\xdf_{QN!\\x03?\\xf4\\x00*:\\xa0\\x06(\\x90\\x04I\\x80\\x02O\\x80\\to\\xf0\\x03\\x8f\\xf0\\x04\\x18\\x10\\x05)\\x01R\\xde\\x91\\x7fj1:\\x9e\\x10\\x08\\x1b \\x08\\xe4\\xa0\\x08/q\\x07=p\\x07w\\x10\\x80\\xe3\\xd0\\x00B\\x00\\x06Z\\xb0\\x0b\\x91\\xa0\\x0b\\xb8\\x10\\x0b\\xad\\xc0Tj\\x11\\x10\\x00;'" + "b'GIF89aP\\x002\\x00\\xf7\\x00\\x00\\xf7\\xf7\\xf7\\xbe\\xbe\\xbe\\xb9\\xb9\\xb9\\xa4\\xa4\\xa4\\xaa\\xaa\\xaa\\xaf\\xaf\\xaf\\xd1\\xd1\\xd1\\xec\\xec\\xec\\x9f\\x9f\\x9f\\xda\\xda\\xda\\xdf\\xdf\\xdf\\xef\\xef\\xef\\xe6\\xe6\\xe6\\xb4\\xb4\\xb4\\xe8\\xe8\\xe8\\xed\\xed\\xed\\xdd\\xdd\\xdd\\xc6\\xc6\\xc6\\xc2\\xc2\\xc2\\xca\\xca\\xca\\xd7\\xd7\\xd7\\xe2\\xe2\\xe2\\xce\\xce\\xce\\xd4\\xd4\\xd4\\xea\\xea\\xea\\xe4\\xe4\\xe4\\xf0\\xf0\\xf0\\xf1\\xf1\\xf1\\xf3\\xf3\\xf3\\xf5\\xf5\\xf5\\xf4\\xf4\\xf4\\xf6\\xf6\\xf6\\xfb\\xfb\\xfb\\xf8\\xf8\\xf8\\xba\\xb9\\xb8\\xc8\\xc8\\xd4\\xc7\\xc7\\xd4ee\\x8a2Ye\\xfa\\xfa\\xfa\\x97\\x97\\xb0\\xc9\\xc9\\xd5dd\\x89\\xf9\\xf9\\xf9\\x7f\\x7f\\x8c\\xbc\\xbc\\xbc32Xuu\\x92\\x7f\\x7f\\x99\\xa5\\xa5\\xb3\\xc9\\xc9\\xd6\\x96\\x96\\xaf\\xca\\xca\\xd7\\xb0\\xb0\\xc2\\xca\\xca\\xd6\\xbd\\xbd\\xbd\\xe2\\xe2\\xe8\\xc6\\xc6\\xd2\\x9c\\x9c\\xac\\xb0\\xb0\\xb0\\x95\\x95\\xae322FFk\\x89\\x89\\x9c\\xb3\\xb3\\xb3\\xbb\\xbb\\xbbqq\\x94\\xd5\\xd5\\xdf\\xad\\xad\\xc0\\xb6\\xb6\\xb6\\xc5\\xc5\\xd1\\xc4\\xc4\\xd1\\x95\\x95\\x95\\xa2\\xa2\\xb8YYmKKw\\xa7\\xa7\\xa7\\xdf\\xdf\\xe6\\xab\\xab\\xab\\x8f\\x8f\\x8fvu\\x812Ve||\\x98\\xb8\\xb8\\xb8\\xa2\\xa8\\xb8\\xc3\\xc3\\xd0\\xa3\\xa3\\xa3\\xc7\\xc7\\xd3\\xc3\\xc3\\xcf\\xc2\\xc2\\xce\\xe8\\xe8\\xebdd\\x8a\\x98\\x97\\xa3{{\\x9b\\xec\\xec\\xef??dHYr\\xb1\\xb1\\xc4\\xad\\xad\\xadpp\\x92\\x9a\\x9a\\x9a\\x9e\\x9e\\x9e\\x9c\\x9c\\x9c\\xbb\\xbb\\xcb\\x89\\x89\\xa2\\x89\\x89\\xa5}}\\x9a\\xb5\\xb5\\xb5\\x88\\x88\\xa4\\xcb\\xcb\\xd7\\xce\\xce\\xd7XX\\x81\\xe9\\xe9\\xecKXw\\xc6\\xc6\\xd3\\x92\\x92\\x92\\xd1\\xd1\\xda\\xa3\\xa3\\xb9\\xb7\\xb7\\xb7\\xb4\\xb3\\xbf\\x98\\x98\\x98zz\\x9a\\x8b\\x8b\\xa5\\xaa\\xaa\\xbc\\xbc\\xbc\\xccm~\\x90\\xae\\xae\\xc1\\xa1\\xa1\\xa1\\xae\\xae\\xae\\xf0\\xf0\\xf3\\xa8\\xa8\\xa8pp\\x8c\\x94\\x9e\\xae32K\\xba\\xba\\xbaKbw??[\\xe4\\xe4\\xea\\xd8\\xd8\\xdexx\\x978?x?\\\\o\\xb2\\xb2\\xb2~~\\x9d\\xdf\\xdf\\xe5\\xbf\\xbf\\xbf\\xfc\\xfc\\xfc\\xfd\\xfd\\xfd\\xfe\\xfe\\xfe\\xff\\xff\\xff\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x002\\x00\\x00\\x08\\xff\\x00#U\\x1aH\\xb0\\xa0\\xc1\\x83\\x06))\\\\Hi\\x92\\xc3I\\x92\"\\x82\\x00q\\xe2\\xc4\\x8a\\x10\\x00\\x00|\\xe8\\xe0\\x81\\xc3\\x06\\r\\x0b\\x1e\\x1c\\xc0\\xe0\\x80A\\x86\\n\\n $\\xa0p\\xc1\\x80\\x85\\t\\x11$\\x04\\x10\\xd0\\xa0\\x00\\x81\\x01\\x08\\x04\"\\xdc\\xc9\\xb3\\x12\\xc3\\x85\\x0f!J\\xa4h\\x11\\xa3F\\x8e\\x1eA\\x8a$i\\x12\\xa5J\\x96.a\\xca\\xa4i\\x13\\xa7\\xce\\x9eX\\t\\xfeT\\x184\\xa2\\xa4\\x89\\x15/f\\xdc\\xd8\\xf1c\\xc8\\x91%O\\xa6\\\\\\xd9\\xf2e\\xcc\\x995o\\xe6\\xccJ\\xd7\\xe7\\xd6\\xaeC\\xc3\\x1a%\\x9b\\xf4,S\\xb5O\\xdbJ\\x85[un]\\xac[\\x1b>\\xf4\\n\\xb6\\xe8X\\xa4f\\x97\\xa6u\\xca6\\xea[\\xaar\\xaf\\x1e\\xde\\x99\\x18\\xefW\\xa2b\\x8f\\x96U\\x8a\\xb6\\xe9Z\\xa8n\\xa7\\xc6\\xb5\\xba\\xb9g\\xe7\\xc5y\\x1d\\x8b\\xee+\\xd9t`\\xcb\\xaa\\x0bkn\\x9d\\xf0.\\xec\\xcfn\\xeex\\xd9\\x0b\\x99\\xf4_\\xca\\xa8\\x07cf\\xcd\\x1b\\xe1\\xd6D\\x8dLH\\x9f.\\x1d\\x8c\\x92(\\xd4\\xa9\\xf7\\xf1;\\xf9\\xb4\\xe0\\xcb\\xab\\r7\\xff\\xef\\xfd\\xb3\\r\\x8d\\xf36d\\xc8H\\xc1\\xa7P\\x8f/~\\xe4\\xe40r\\xa4\\n\\x96,\\x8a\\xb8\\xdb\\xae\\x9c\\x9ap\\xe6\\xf1\\x07\\xbd\\xe6\\x10cu \\xd2\\xc3 *<6\\x9a~\\x80\\xf1\\xa7\\\\x\\xbb\\x01(\\xa0P_\\x95p\\x06\\x17$l\\x01\\xc9l\\x91\\x95\\xd6`r\\xe0\\xe9\\x06 y\\x0cy\\x06\\xc2\\x1b#\\x88@B\\x12Dph\\\\w\\xb7\\xf5\\xb7\\x9cx#\\xda\\xf5\\x93gC<\\x92\"\\tW\\xf0\\xe0\"\\x83\\xc8}\\x97\\xdb\\x7f5\\x0e4\\xa1W)\\xa0\\xb0c\\x13c\\xfcX\\xdb\\x87B\\xfa\\xc7\\\\\\x91GF\\x84B\\r;\\x86\\x90 _\\x1d\\x1e\\xe7\\x1dnR\\xd28b\\x95\\x92\\xa0\\x90B\\x96K8\\xe9a\\x90`\\xce\\x18\\xe1xd\\x9a\\x99\\xe5\\x96\\xc5\\x01\\xf9\\xa5\\x8c\\x10\\x16i\\xa4o\\x03Zy\\xa6\\x8aZ\\xaa\\xe9e\\x8c\\x0f\\x8a\\xa8g\\x9c\\x7f\\x92\\x10(\\x97/\\xee\\x07\\xe2\\x90S\\xd6\\x88\\xe8\\x9c\\x82\\xc2\\xe8`\\x88DR\\xc9\\'\\x85r\\x02J\\xe7\\x82O\\xb2\\x89\\xa7\\xa1\\x9a\\xde\\xf8[\\xa7\\x8a~J\\xdb\\x9aw\\x16\\x9a\\xa9\\xa4\\x9bz\\xff\\x85\\xea\\xa2u\\x86\\xda*\\xa6\\x91\\x8e\\x19\\xab\\x9f)\\xa6AE\\x1c\\x84\\xc0Q+\\xab\\x84\\xe2*\\xa6\\x84\\xbbJ\"\\x04\\x0e)2r\\x88tt\\x0c;\\xe8\\xa5\\x90\\x1e\\x0bg\\xb2%\\x80\\x90\\xa5\\x82\\xabN\\xfbh\\x98o6Gf\\xb6\\xdbV\\xeah\\x94n\\xeaic\\x89\\xbf\\x91\\x0b(\\xb7]Z\\xfam\\xba\\x87b\\xab\\xed\\xbb\\xe6B\\xd9f\\x9e\\xf5\\x9a\\xda\\xa7$\\xee*\\no\\xa3\\xfa\\x8e\\xfa\\xaa\\xae\\xfeR\\x180q\\xa0\\x12K-\\xb8\\xea\\x8e{\\xaf\\xc0\\xf9\\x8a\\xeaj\\xae\\xc8&\\xec\\xd5\\xc2\\x03\\xdbYl\\xb5\\xe1\\xf2&q\\xb9\\x8cz\\xfc0\\xbd\\xa5\\xb2\\xfb/\\xc7\\x15\\xdf\\nr\\xc4\\xf6\\x92,\\xad\\xbc\\xe8\\xf2\\x9b2P\\xedN\\xccp\\xb74\\xefK*\\xac\\x1aG\\xc4r\\xc9\\xb6~\\x0cq\\xbf*+\\xacs\\xc7E\\x9fl3\\xd0Io\\xbct\\xcbF\\xa3\\x0c5\\xce+OM\\xb4\\xc3\\xf3>\\x8dp\\xd4\\x11-+s\\xc3\\xde\\xd6\\xfc\\xf3\\xd7Xs\\x8a%\\xbe[\\x97\\xed\\xf3\\xc1\\x19\\x83-\\xc9\\x10%\\x8c\\xcd\\xf3\\xb9oc|\\xed\\x8da\\xb0\\x91\\xa1\\x87\\x140\\xbc\\xe0\\x83\\x0b.@A\\xb8\\x0f/\\xc0\\xa0\\x06\\x1ay\\xecA\\xb0\\xc5\\xc6\\x86\\xdcZg]$\\x1eC\\x0c:\\xfc\\xc0\\xc2\\xe6\\x9b\\xff\\xa0\\xc3\\xe5\\x81/\\xf2\\xb8\\xcbG\\xdf\\xcc\\x95C\\x81\\xa4\\'C\\r(\\xcc\\xe0:\\x0fD\\xccw\\x84\\x16w\\x17|\\xb1\\xb5\\xe2&\\xdbXhm\\xf7l0N\\x05D\"\\xfc\\xf0\\xc4\\x17o\\xfc\\xf1\\xc6\\x07\\xa0\\xfc\\xf27\\xdc\\xd0\\xc2\\xf3\\xcf\\x07\\x11\\x84!\\x02T?\\x85\\x1dE\\x14\\xb1\\x06\\x10@8\\xb2\\xc3\\x0e\\x80\\x88\\xe1\\x04\\x01\\x8201\\x80\\x15\\x7f\\x94a\\x06\\x19x 1\\xc7\\x13\\x01\\x01\\x00;'", + "b'GIF89aP\\x001\\x00\\xf7\\x00\\x00\\xc6\\x00\\x00\\xce\\x00\\x00\\xd6\\x00\\x00\\xde\\x00\\x00\\xce\\x08\\x00\\xd6\\x08\\x00\\xde\\x08\\x00\\xc6\\x08\\x08\\xce\\x08\\x08\\xd6\\x08\\x08\\xde\\x08\\x08\\xde\\x10\\x00\\xd6\\x10\\x08\\xc6\\x10\\x10\\xce\\x10\\x10\\xd6\\x10\\x10\\xde\\x10\\x10\\xd6\\x18\\x08\\xd6\\x18\\x10\\xde\\x18\\x10\\xce\\x18\\x18\\xd6\\x18\\x18\\xde\\x18\\x18\\xd6!\\x18\\xde!\\x18\\xd6!!\\xde!!\\xbd)!\\xde)!\\xc6))\\xd6))\\xde))\\xa599\\xadRR\\xb5BB\\xbd11\\xbdJJ\\xbdRR\\xc699\\xc69B\\xde1\\x18\\xde1)\\xce11\\xd611\\xce99\\xc6BB\\xceBB\\xcbLL\\xde11\\xde9)\\xde91\\xde99\\xdeB9\\xdeBB\\xdeJ9\\xdeJB\\xdeJJ\\xdeRJ\\xe7B\\x18\\xe7B)\\xe7BB\\xe7JB\\xe7JJ\\xe7RJ{{\\x84\\x84{\\x84\\x84\\x84\\x84\\x84\\x84\\x8c\\xadZZ\\xa9ko\\x9c{{\\xa5\\x84\\x84\\x84\\x8c\\x94\\x8c\\x84\\x8c\\x8c\\x8c\\x8c\\x8c\\x8c\\x94\\x94\\x8c\\x8c\\x9c\\x88\\x8c\\xa5\\x84\\x8c\\xa5\\x8c\\x8c\\x94\\x8c\\x94\\x8c\\x94\\x94\\x94\\x94\\x94\\x9c\\x94\\x94\\xa5\\x94\\x94\\xad\\x94\\x94\\x8c\\x94\\x9c\\x94\\x94\\x9c\\x9c\\x94\\x9c\\xad\\x94\\x9c\\x9c\\x9c\\x94\\x94\\x9c\\x9c\\x9c\\x9c\\x9c\\xa5\\x9c\\x9c\\xa5\\x9c\\xa5\\xa5\\xa5\\xa5\\xb5ZZ\\xc8ec\\xdaRR\\xdahh\\xe7ZB\\xe7RR\\xe7ZR\\xe7^Z\\xe7cc\\xe7kc\\xe7kk\\xefkk\\xefsc\\xe7sk\\xe7ss\\xec~k\\xbd\\x84\\x84\\xaf\\x99\\x96\\xb5\\x9c\\x9c\\xad\\xa5\\xa5\\xe7{{\\xdc\\x8c\\x8a\\xef{{\\xef\\x84\\x7f\\xef\\x8c{\\xef\\x8c\\x84\\xef\\x8c\\x8c\\xef\\x94\\x8c\\xef\\x94\\x94\\xef\\x9c\\x94\\xef\\x9c\\x9c\\xef\\xa5\\x9c\\xa5\\xa5\\xad\\xa5\\xb5\\xb5\\xad\\xa5\\xad\\xad\\xad\\xa5\\xad\\xad\\xad\\xad\\xb5\\xb5\\xad\\xb5\\xbd\\xb5\\xad\\xad\\xb5\\xad\\xb5\\xb5\\xb5\\xb5\\xb5\\xb5\\xbd\\xb5\\xbd\\xbd\\xb5\\xbd\\xc6\\xb5\\xce\\xce\\xbd\\xa5\\xa5\\xbd\\xad\\xb5\\xbd\\xb5\\xb5\\xbd\\xb5\\xbd\\xbd\\xbd\\xb5\\xbd\\xbd\\xbd\\xbd\\xbd\\xc6\\xbd\\xc6\\xce\\xbd\\xce\\xce\\xc6\\xb5\\xb5\\xc6\\xbd\\xbd\\xc6\\xbd\\xc6\\xc6\\xc6\\xc6\\xce\\xad\\xad\\xce\\xb5\\xb5\\xce\\xbd\\xbd\\xce\\xc6\\xc6\\xce\\xce\\xc6\\xde\\xa5\\xa5\\xe7\\xa5\\xa5\\xef\\xa5\\xa5\\xef\\xad\\x8c\\xef\\xad\\xa5\\xf7\\xad\\xa5\\xde\\xad\\xad\\xef\\xad\\xad\\xf7\\xad\\xad\\xf7\\xb5\\x9c\\xf7\\xb5\\xad\\xef\\xb5\\xb5\\xf7\\xb5\\xb5\\xd6\\xb5\\xbd\\xf7\\xbd\\x9c\\xf7\\xbd\\xa5\\xfc\\xd3\\x97\\xf7\\xbd\\xb5\\xf7\\xce\\xb5\\xde\\xbd\\xbd\\xe7\\xbd\\xbd\\xef\\xc6\\xbd\\xf7\\xbd\\xbd\\xf7\\xc6\\xbd\\xd6\\xc6\\xc6\\xde\\xbd\\xc6\\xde\\xc6\\xc6\\xe7\\xc6\\xc6\\xf7\\xc6\\xc6\\xf7\\xce\\xc6\\xf7\\xde\\xc6\\xff\\xef\\xc6\\xc6\\xc6\\xce\\xc6\\xce\\xce\\xce\\xc6\\xce\\xce\\xce\\xce\\xd6\\xce\\xce\\xd6\\xd6\\xce\\xde\\xd6\\xce\\xe7\\xce\\xce\\xf7\\xce\\xce\\xf7\\xde\\xce\\xff\\xef\\xce\\xc6\\xd6\\xd6\\xce\\xd6\\xd6\\xd6\\xce\\xd6\\xd6\\xd6\\xd6\\xde\\xd6\\xd6\\xde\\xde\\xd6\\xf7\\xd6\\xd6\\xf7\\xde\\xd6\\xff\\xd6\\xd6\\xff\\xde\\xd6\\xce\\xde\\xde\\xd6\\xd6\\xde\\xd6\\xde\\xde\\xde\\xd6\\xde\\xde\\xde\\xde\\xe7\\xde\\xde\\xf7\\xe7\\xde\\xff\\xde\\xde\\xff\\xe7\\xde\\xff\\xff\\xde\\xce\\xe7\\xe7\\xd6\\xe7\\xe7\\xde\\xde\\xe7\\xde\\xe7\\xe7\\xe7\\xde\\xe7\\xe7\\xe7\\xe7\\xef\\xde\\xe7\\xef\\xe7\\xe7\\xf7\\xe7\\xe7\\xff\\xe7\\xe7\\xff\\xef\\xe7\\xff\\xff\\xe7\\xde\\xe7\\xef\\xde\\xef\\xef\\xe7\\xef\\xef\\xef\\xe7\\xef\\xef\\xef\\xef\\xf7\\xef\\xef\\xf7\\xf7\\xef\\xff\\xef\\xef\\xff\\xf7\\xef\\xff\\xff\\xef\\xe7\\xf7\\xf7\\xef\\xef\\xf7\\xef\\xf7\\xf7\\xf7\\xef\\xf7\\xf7\\xf7\\xf7\\xff\\xf7\\xf7\\xff\\xff\\xf7\\xef\\xff\\xff\\xf7\\xff\\xff\\xff\\xf7\\xff\\xff\\xff\\xff,\\x00\\x00\\x00\\x00P\\x001\\x00\\x00\\x08\\xfe\\x00\\xff\\xbd\\x93\"\\x04\\xd3\\xbf}\\xfa\\xf6\\xed;\\xb8\\xf0W\\x01\\x00\\x01\\\\\\xfd\\x9b8Q\\xe1\\xbf\\x84\\t\\x11*\\xd4\\xb81\\xa3B\\x8f\\x1c\\xf7\\xe5\\xdb\\x87m\\xd80o\\xde\\xd4]\\xfc\\xb81$\\xc7\\x7f\\xf9\\xa0$\\xd1\\xc4\\xd0\\x1f\\xc5\\x85\\xb0\\x02\\x04 \\x10\\x8b\\xa2\\xcf\\x83@Y\\xb6\\x04It\\xe8\\xbe~\\xcd\\x86=\\xd3XQ\\xa8\\xd1\\x8d\\x13\\xa5$\\x99\\xd3\\xef\\'\\xc57\\x00\\x04\\x08\\x98\\xa1F\\x0f\\xb2\\x85>m\\xfatZ\\xb4%\\xd3\\x7f\\xf1\\x86i\"g\\xf5\\xe9\\xd3\\x89\\x93\\x82(\\x19f\\xf5\\x1f=\\x19\\x10\\x05\\xe8L0\\xe3\\x8c\\x9eU\\xdb\\xea6]\\xb8\\xb0\\xec\\xd0\\x89\\xe4\\x84i\\xcaW\\xd7p\\xc7\\x89\\xee\\xa2\\x04\\xc1\\x02\\xcd\\xaa2\\x02:3k\\xe6 \\xe6\\xce*d\\xf3~\"\\x14-\\x14$Xg\\x8a\\x84\\t\\xae\\xe8\\x98\\xe20)A\\xa08{\\x97\\x8fq\\xbfT\\x10\\x03D\\x88q\\xc1\\x81^\\xcd\\x04j\\xd09\\x85\\xec\\x9c\\xbe\\xd5\\xfd\\xc8\\xb2\\xec\\x07\\xe9K\\xb6\\xd5M\\xcb\\xfa|-$\\t\\xa1I\\xcf\\x88\\xbdk\\x93W\\x07\\xacWth\\xfeTp\\xa09\\xb3\\x075\\xa4\\xa2\\x9d\\x9b\\'\\xf6_r\\xf7\\xa47\\xbe\\xe3\\xd2\\xe5\\x1d\\xf4\\xc1\\t\\x9b\\xde\\xdc\\x97\\xedK\\x92 B4a\\x04\\';\\xe8$\\x00\\x03\\xa9T\\x95\\xcf-n\\xd0\\xc0@\\x00Z\\xfd\\x06Q\\x06f\\xf4\\x91L>\\xc7M\\xf4^c\\xffd\\x03\\xc5\\x17`M\\xd4^|\\xfb\\x8d\\xe5\\x8f=\\xc5\\x10\\x82\\x85\\x11F\\xccrAf\\x02T\\xc0\\xcbD\\xfa\\xc4\\xb3M-w\\xdc\\xf0\\x00\\x84<\\n\\x80\\x80\\x03\\x15\\xe0\\x90\\x07/!B\\xa7\\x89\\x12\\x8f\\xdc\\xb7\\xdah7\\xfd\\xa3\\x8e:\\xef\\x98\\xe3\\xcc3\\xd8\\x88\\xa0\\x15\\x84\\x02x\\x10\\x98O\\xf0H\\xc3\\x0b\\x1ffT\\xf0\\x9b^zI\\xe0A\\rn\\xac\\x92\\x8e`\\xfd\\xe4C\\xc8\\\\\\xa2)\\xd9\\xe4O\\xf4\\x14\\xe9I\\x13-\\xf4(@\\r\\xe7\\x00\\xf5S9\\xb7\\xf0\\x81\\xc6\\n\\xbfa\\x19@\\x02\\x19\\xd4\\x90\\x86\\x1f\\xd1Xe\\x0e\\x17P\\xb0\\xb5_\\x86J\\x16)\\x98\\x1c_\\xe09f\\x00b\\xc8\\xe3\\xa7U\\xf0\\xd8\\x12J\\x1a5\\x88I\\xe6o\\x15\\xd0\\x80\\x06\\x1f\\xb5\\xc03\\xd17\\xfeQ|A)CL*\\t\\x8d3\\xb8f\\x93\\r9\\xb4\\xe5\\xf3\\xce;O\\xc8\\xc1\\x8568\\xc0\\x18\\x80\\x1a\\xa1\\xc1\\xb7Z4\\xa2\\xa8QC\\x06\\x11F\\xa8S\\n~\\xad\\xe2\\x08\\x12\\x95\\xcc\\xc9\\xd0O\\xfa\\xbcC\\x0e\\xae\\xb86\\xe3\\x8c\\x16S@\\x81\\xc5\\x14[`A\\x88&\\x9aLYE\\x16\\x97\\xfc#\\xcd\\x0c\\x06\\xeau\\x07c`\\xcdj\\xd59\\xa7\\xb8Q\\x03\\x07\\x0fD\\x8b\\xea\\x08!\\x18\\x03\\x96\\xa5\\x13\\xe5\\xf3m&\\x85`!\\x05\\x13JD\\x0c\\x85\\x17_|\\xd1\\x05\\x17X(\\x91\\xc4\\x87\\x898\"\\x07\\x15\\xdaL\\x84\\x8c\\x07\\xc6\\xf6q\\xdcG\\x9f\\n\\x96O-t<\\x1b\\xb0\\xc0\\x01\\xb0\\xc1XE>\\xe53\\xce$^(1\\x04\\x13Rp\\xc1\\x85\\x17>c\\x11\\t&\\x97$\\x02I\"\\x88Hr\\x08!P\\x1cQE\\x1c\\xb5Md\\x8boY\\xf9hKr\\x19\\xe5\\xb7\\xcf\\x88)\\xef\\xc3K\\x1e5H\\x90\\xc0\\x00d\\x16pJ\\x91\\xfdt;\\tAR\\x10\\xe2\\xc90\\xc4x\\x82\\xc9\\xdcsg\\xa3\\x8d9\\xe4d\\xf3\\x8c\\xfe\\xdc\\x89\\x08\\xc2\\x05\\x15OtA\\x8834\\xfe\\x01\\xa3\\x00\\x19H\\xc3\\x90i\\xf7\\xe9\\xa3\\x0f<\\xbd\\xf0QC\\xbd\\x144\\xea\\x131\\\\\\x0c\\xd1\\x05%\\xc4h\\xe2\\t1\\xcfh\\xa3M\\x94\\xe6h3R\\xdam\\xe6\\xa3\\r!\\xc2\\xc4\\x11\\x87\\x13\\\\D\\x1c\\tc\\xf1\\xe4q8\\x9f\\xb4f\\xbd\\x91?!\\x12\\xe6g>\\xc5\\x1a:C\\x9f\\xfb\\xb8\\x83\\x88\\x12WL\\xa2\\t&\\xc4d\\xe3N<\\xb5\\x1d\\xc5\\xfb\\xccV\\xcd&G\\x1cG`,\\xc5\\x10s\\xb0\\x05\\x8f\\x1b\\xc6\\x8aq\\xb2rNi\\x94\\xe1<\\x19\\xe8T@f9\\xc8S\\xcf$S\\x08\"I\\'\\xc4\\x98C\\xdbXu\\xcd\\x0c\\x169r4\\xf1\\xc8\\'\\x93\\xe8\\xc2\\x15\\x84\\xe0\\x85\\x90\\xc1\\x03\\r\\xf5:\\x16a:\\xf2\\x14\\xc6\\xfd\\xa3\\x16\\x991C\\x0e2\\x83\\x06@\\x04\"\\x11\\x9e\\x1b\\x9dUx\\xd7\\x0f\\x9b\\x84\\x88zU\\xd1D\\x17\\x98`\\x8e\\x7f\\x90C\\x13\\x82\\xd0B\\x10\\xb8\\x10\\x8e\\x7f\\xa4c\\x82\\x06\\n\\xc0\\x1d\\xaab\\x1a\\xd3\\x84d\"t\\xc8\\xcc*\\xe6\\x95\\x19\\x10,B\\x13\\xfe\\xc2\\x08\\x99O\\xd2\\xa6\\xa1\\x9fP/a\\xf9H!!(\\xa2\\x8fa\\xa8H\\x08X`\\xcb9\\xe8e(>\\xe4\\xce,6\\xcc\\xd0\\x0c \\x92\\x80m\\xf8\\x03\\x19\\xe9\\x83\\xd0\\x18\\x86\\xd1\\x8e\\x9aQ\\x84\\x88V9b\\x87\\xba \\x05\\xc2\\xf9\\xa3*\\xff\\x18\\xc6\\x1c\\xb8\\x10\\x84/0F\\x1a$\\xeb\\xd1)\\xae\\x88\\xc5\\x96L\\xe4\\x1c;\\n\\xc0\\n4\\x04\\x87\\x03\\x18h\\x14\\xf48#\\xa5h\\xd88M\\xf8\\x0c\\x1f~\\xaa\\x8a\\'0V\\x90\\xaa\\xdc\\xe2EXz@/x\\xc7\\xc0>\\x82\\xc5\\x16\\x99i\\x83{&\\x81\\x840 @\\'\\x0c\\x18\\xc5Q\\x0e\\xd2\\xc1HV\\xa4=\\xd4s\\x13\\x16\\x12A\\x11\\x0e^d\\x12\\\\\\x90\\n[\\xf4A\\x8a\\x07ai\\x05\\x81\\xa9\\xa1Y\\xc0r\\x87\\xcc\\x88\\xe2\\x1f\\xe3@\\xde\"\\xc2\\xf0\\x1b\\x14\\xf8b!\\xb6\\xf4 \\xfe\\xac\\xd2\\x1f)X\\xa3\"\\x1d\\\\\\xe5;\\x9e(\\x88\\x84\\xed\\xe17d\\xc3Ah\\xcaw\\xc3\\x7f\\xdc \\x00\\x00H\\x80\\xe2\\xe6 \\x04B\\x14\\xa2\\x1cm@g\\x00n\\x10K\\r\\xcd\\n\\x8e0\\xfe\\xa1\\x88&\\x80F=}\\xc0q!\\xd8\\xc8\\xa5\\x10\\x9a1\\x91y\\xe4\\xd0Pg\\xc0\\xcf0\\xab\\x02\\x8f\\n\\xe8\\xc4\\x03\\xffp\\x06\\x01\\x0fA\\xb8s\\x9c\\x01\\x00\\x10q\\x03\\x1c\\xfd\\xb95e!\\x0c&\\x82\\x90\\xc2$\\xfea\\x93\\x7f\\xda\\x841\\xb8T\\x02\\x16f&\\x0f5\\xa0\\xf3Jn\\x18\\x8cK&\\x02A\\x9d\\xa8\\xa1\\x1fSP\\x82\"\\xfa`\\xac2\\xfc\\x95Ib\\x80\\x90\\x03h\\xb1\\x84.D\\xa2\\x84\\xab$i,\\xc1\\xa7\\x93\\x1a\\xc4cC\\xf9\\x9cY\\x7f\\xb0\\x10\\x8f7\\xfa3\\x8d7a\\x0e \\x84@\\xb8\\x9f\\xc4\\xe3\\x0e\\xb9\\xd1\\x8b\\x1a&\\x92\\xc8\\x7f\\xc8#\\x8c0x\\x86u\\x16cb\\xf7\\x0c\\x98\"\\xe7HCn\\xd2\\x80\\xcf\\xa8\\xcd\\x0c\\x97\\x88p\\x8f\\xbe\\xeaI\\x11a\\xbci\\xa4\\\\\\x9b\\x07wb8C\\x8a\\xf0\"3j`\\x86\\x10\\x101\\xd5\\x9a\\xa0\\xce\\x1f\\xa7\\xfb\\x87E1*C~P\\x16C\\x02!\\x04\\xfe\\x17Z\\xbcQ\\xf8\\xe8\\xab*\\xcf \\x84\\x14\\xbaY\\x17y\\\\\\xd4@\\x08\\xe8\\x03E\\xf4\\x90\\x1bT\\x10B\\x08\\x89\\xa0\\xaf`2\\x84\\x8e\\xe0!\\x00\\x14\\xfchSB\\x18\\xd3\\x1f/\\xd8G\\xae\\x19\\x9a\\xebQ\\xf4a\\x13m\\x1c\\xc2g\\xbc\\xabK:\\xce\\x99\\x95\\x00 \\xe0\\x14\\xfd\\xe8\\xc79\\x0f5\\x8b+H\\x01\\x12\\xe4\\xa8\\x8d\\xaa\\x8d\\xcc\\x18U\\xf7c\\x1b*\\x98\\xed%\\xc4\\xc1\\xab\\xecNb\\x96\\xd8\\xe4\\xdd\\x1bi\\x94\\x1c0\\xc3\\xe7\\x1d\\x89\\x00\\x04\\x14\\x88\\n\\x94m\\xc8@3\\x12h\\x051\\x1e\\x80^\\x0f\\x14\\x02\\x10sH\\x04\\xde\\xbc\\xc5+o\\xc1\\xa3\\xdaQ\"\\x079\\xf8\\x81\\x8b0\\x8e@\\x10\\xed\\xda\\x87=\\xb4\\x01U\\xb6D\\xf3(\\xad.\\xa2X\\xe2\\x81\\x887\\xb9\\x8a\\x89?\\x89F\\x18\\xb5B\\x810$@//`\\x84\"&\\x81\\x89_\\xfd\\xca~Q\\xf2\\x969\\xee\\xc1+m\\xbf\\x83\\x1f\\xab8\\xa5\\x00H\\xa0\\x08H\\xe4#\\x1b\\xcd\\x98\\xc4$\\x9a\\x8a:\\xc6\\x9c\\xf8\"gL\\x18\\xd2\\x94\\xb0[\\xfd\\xd4\\xd2\\x16\\x0c\\x90V\\xc8\\xfeuB\\x84Jh\"\\x11\\xb8\\xb8\\'t\\xf4\\xb1\\x8dU8T/D(D>\\x9c\\x81\\x89Id#\\x1f\\xf8\\xa8\\r\\x07=\\x08Gi*\\xe8hI\\xd8m\\xd6\\x8cX\\x87\\xc3\\x15@+U\\x18F$\\xe4v\\x0f\\xe8l\\x03\\x19\\xa2\\xc8\\x03\\x1aj\\xe0\\x01\\x87\\x1a\\x88\\x02\\\\x8\">\\xf1\\x0e\\x7fz\\x9d\\xad<\\xff\\xba>\\xf0\\x91\\x88D\\x04}qP\\xa1\\xc8;&\\x11\\x82+\\xe9\\xa5\\x00\\x0e\\x08\\x043\\xb6\\xd0\\x88j\\x98y\"\\xf0h\\xb9\\x1f\\xe8\\x80\\x06\\x1c\\xac\\xc0\\x03\\x19p@\\x02\\xca\\xa3\\x15\\x13d\\xfd\\x1d\\xd9\\xa0\\xcd?Ij\\xd4\\xf12\\xfe(\\xf0\\xd8\\xf8n\\x8d\\xc2\\xf8a\\x88\\x03\\x10%(\\xd4\\x02\\x0e\\xd0\\x04qp\\xa1\\n\\x9b\\x00\\x05\\x1f\\xe8p\\x06\\x1c\\xcc\\xa0\\xea\\xa7\\xcc/:1J\\x00\\n\\x98\\xe0\\x04%\\x00C\\x15\"aT\\x0c\\xb1\\xd5\\xad\\xd8\\xf5\\xc9; Q\\x88ak\\x95#\\x19z\\xc7b\\x98\\xf1\\x88\\x08Ch}\\x1b\\x18\\x83\\x0b:P\\xf5\\xc1\\xaf^\\x9e{\\xc9\\xc0\\x0cr \\x861\\x84\\xc2\\x14\\x9cx\\xc4\\x16\\xac\\xdeP\\x08\\xba\\xb4\\xe9\"\\xf9\\xc8=\\x13{\\xeb\\x13mL\\xe2\\x0bX\\x90)P\\x8eC\\x0eO\\xe4\\xed\\x1a\\xce\\x98\\xa0\\x00\\xd6\\x073y\\n\\x80\\x00\\x12H\\xc1\\xf4\\xdd\\xc0\\x87S\\xf4\\x02\\x1e\\xf5`f\\xfd\\xf0\\r\\x81\\xf0\\x05?D8\\xb6\\x17b\\xf6d\\x15^\\x07\\x1f\\xcf\\x80KK\\x04\\x1d\\xd8\\xe0\\x0cy\\x93\\x0f\\xd5\\x80\\x0b\\xf4\"\\x00|\\xe5#\\x0f\\x90\\x01gB\\x06o\\xb0\\x07\\xb2\\xb0\\r\\x1f5\\x11\\xcd!\\x0c\\xbfB\\x17\\xe1\\x97!\\xe9\\x86Y?\\xc1H\\x9e\\xa0\\tP \\\\\\xd34\\x11\\xd8\\x00\\r\\xbe\\xf2\\x0e\\xd8\\xb0\\x0c\\xb9\\x90\\x01\\x08\\xf0\\x00@\\xe2\\x01,P\\x02\\x9e!\\r dF<\\xb7{\\xd9\\xa0\\t\\xc5@\\x0e#\\x95\\x80n\\xc5d\\xf9\\x03\\t\\x9a\\x90\\x04-V\\x176\\x01\\r\\xd8\\x90\\x83\\xbcr\\r\\x8e \\x06t\\x10\\n\\xbbp\\x0c\\x89\\x10\\x0c\\xe2p{n\\x95\\x86\\t\\xa3\\t_@\\x08\\x99\\xa0\\t\\xc4\\x10\\x10\\x00\\x00;'", + "b'GIF89aP\\x001\\x00\\xf7\\x00\\x00\\x9a\\x9c\\xa3\\xbe\\xc2\\xc7\\x9d\\xa3\\xac\\xf1\\xf0\\xf9efiMSd|\\x84\\x94\\xe1\\xdd\\xe4MQ\\\\AEMDIS\\xb2\\xb2\\xbb\\xf6\\xf5\\xfd\\xee\\xf0\\xf5\\xf5\\xf5\\xf5\\xee\\xee\\xee\\xc2\\xc2\\xc4\\xee\\xee\\xf8\\xd5\\xd3\\xd9\\x0b\\x18*\\x97\\x99\\x9e\\xd1\\xd1\\xd4\\xe9\\xe8\\xf4PT^=CR]aj\\xf0\\xe7\\xe0\\xcb\\xcb\\xd3\\xf5\\xf5\\xfa\\xdf\\xdc\\xea\\x83\\x84\\x8a\\x00\\x02\\x04\\xf0\\xee\\xf8\\xf0\\xf0\\xf0\\xfe\\xfe\\xfe\\xed\\xed\\xf6\\xfc\\xfc\\xfc\\xdb\\xda\\xe3\\xea\\xea\\xe9\\x14#4=@Jkqypsz\\xa4\\xa5\\xab\\xab\\xb0\\xb6SVb\\xf2\\xf2\\xf4TXc\\x8b\\x8a\\x92\\xbb\\xbd\\xc0\\xcb\\xcb\\xcdAFS\\xaa\\xb3\\xc1\\xa9\\xab\\xae\\xf7\\xf7\\xfb\\xbc\\xbb\\xbclmr\\x89\\x87\\xa4IKT\\xf4\\xf0\\xea\\xfc\\xfc\\xff\\xfa\\xfa\\xfa\\xc4\\xc4\\xc7ju\\x82\\\\gs\\xe5\\xe5\\xe5z|\\x84\\x8d\\x97\\xa4\\xea\\xe9\\xecC5\\\\IMY\\xe1\\xe2\\xe5[[b\\xed\\xee\\xf1\\x01%C\\xf1\\xf1\\xfc\\xe1\\xe1\\xe2\\xe8\\xe8\\xeb\\xb3\\xbc\\xc5\\xf8\\xf8\\xf9<P\\xb5\\xb7\\xbbUKU\\xe1\\xe0\\xf246A\\xa3\\xad\\xb9\\xcf\\xd2\\xd7\\xfe\\xfe\\xfd[h\\x82\\xf9\\xf8\\xfc\\xe5\\xe3\\xe57:CBFX\\xf3\\xf2\\xf2\\xec\\xee\\xee\\x9e\\xa9\\xb7\\xc6\\xc8\\xca\\xe2\\xe6\\xed\\x9e\\x9f\\xa4\\xfb\\xfb\\xf9\\xae\\xae\\xba\\xf3\\xf3\\xf9\\xf3\\xf4\\xf5\\xf5\\xf3\\xfa\\x13\\x13\\x19\\xed\\xed\\xfc 8SRWijfr\\xe4\\xe3\\xf25)I\\xa6\\xab\\xae\\xe7\\xe5\\xee\\xe1\\xe6\\xea\\xe3\\xe2\\xe9\\xfd\\xfc\\xfd\\xfb\\xfb\\xfb?Rf\\xbc\\xb8\\xd3wv\\x81\\xfa\\xf9\\xfd\\xb9\\xba\\xcc\\xce\\xce\\xd1\\x04\\x0e\\x1c\\xfd\\xfe\\xfe\\xfd\\xfd\\xfdtx\\x7f\\xf3\\xf3\\xf4HEQ\\xa8\\xa7\\xa9\\xe3\\xe3\\xe5cgw\\xfb\\xfb\\xff\\xf9\\xfa\\xfb\\x8d\\x8e\\x99\\xf9\\xf9\\xfa\\xf9\\xf9\\xfe_]iot\\x8b{w\\x81\\x8a\\x9e\\xb1\\x8bfm\\xe3\\xe1\\xf3\\xe8\\xe8\\xf6RJs\\xa6\\xa6\\xbf\\xa5\\xa5\\xaellz\\xfa\\xf8\\xfe\\xa3\\xb9\\xd550i\\xdd\\xdb\\xde\\xab\\xaa\\xc8n~\\x9329H<6H92@\\xf4\\xf4\\xf4\\xcd\\xcd\\xe2\\xc5\\xc8\\xda5+]\\xba\\xc2\\xdaud\\x8c\\xd7\\xd6\\xdamk\\x8aZVb\\xf8\\xf8\\xf7t\\x97\\xb4WT\\x86\\xf7\\xf7\\xf7\\xeb\\xe4\\xe3\\xfd\\xfd\\xfc\\xef\\xe8\\xe9\\xec\\xec\\xec\\xd6\\xd7\\xd8\\xe7\\xe9\\xe8\\xd1\\xd9\\xea\\xe9\\xe8\\xf9\\xd5\\xd4\\xe8\\xab\\x9c\\x9f\\x86\\x85\\x98\\xd9\\xd7\\xe6\\xbe\\xc0\\xc3\\xe5\\xe2\\xed\\xeb\\xea\\xf2\\xec\\xec\\xf5\\xdf\\xe0\\xec\\x96\\x89\\x93\\xb0\\xbf\\xcc\\xb6\\xb6\\xce\\xb9\\xb8\\xc6\\xf8\\xf9\\xf9Y_o\\xe5\\xe0\\xe2\\xdd\\xe2\\xee\\xc9\\xc8\\xcfNJp\\xec\\xec\\xf8\\xff\\xff\\xff!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x001\\x00\\x00\\x08\\xff\\x00\\xff\\t\\x1cH\\xb0\\xa0\\xc1\\x83\\x02m}\\x11\\x87\\xb0\\xa1\\xc3\\x87\\x10#F\\x0cB\\x81\\x80\\x0f\\x89\\x183j\\x84\\x88\\x0b\\x00\\x01$^Zm\\x1cI\\x12#0\\x08H(%\\xa8R\\xb2\\xa5K\\x84A6\\xb5@!G\\xd7\\xcb\\x9b7-\\xa1\\xc1\\x01EA\\x06\\x18$p\\n\\x1d)\\xe2\\xdf\\x19i:\\x02Q\\x19\\xcat\\xe3\\xa3\\x13\\'\\x84XjJU\\xa2\\xb4+\\xa3b`\\xdc\\xb5\\xc7\\x0c\\x80*\\xb3\\xf8\\x1c\\tB\\xe4\\xc1\\x93\\xaa\\x19\\x8f\\x9c\\xf8@k\\x02\\x00\\x89\\x15\\x00\\x10+\\xb5\\xa8\\x8d\\x10\\x18[\\xa8P\\xd9S\\x01\\xadD3\\x1f\\xae\\xd0\\xfa\\xf0\\xc1\\x08\\x1f\\x8c~n\\xe0@\\x82\\x04\\n\\x94\\\\\\xd5\\xde\\xfa}\\xf8\\t\\xcf\\x87\\tW\\x08\\x7f\\x08E!#\\xb1j\\xa5(@Xf\\xa5\\xc9\\xe4\\x87\\x02\\x02\\x0b\\xce\\xac9\\x81\\x8c\\x88l\\xbc\\xa1\\xc8tZ\\xe2\\x9d.\\x81i\\xb1\\xd6\\x1c\\x18\\xc7TH\\raP\\x12R;\"\\x83\\x1c\\xa1\\xae\\x84\\xc2@k0o\\xc2dn4\\x8cVF\\xc7\\xae\\xe2\\x0fm\\xbcJv\\xeaT\\xbd\\x7f?t\\x07\\xff~\\xfe!P\\x88\\x7f\\xb6j\\r,\\x14\\xeeY;\\xec\\x10s\\x9c*\\x92\\x03\\x84@ \\x98\\t\\xef\\x86\\x0e\\x81\\xa0\\x9am\\xd9\\xf4\\xa3\\xccY\\xf0!dN%\\x13\\x14\\xf1J,\\x02\\x9d!\\x88n\\x99\\xedG\\x98\\nS\\xfd\\xb3\\xc7|z$Q`C\\x04\\x04\\x96G\\x14\\x04\\xf5Q\\xc0\\x15$~`\\x07\\x19\\xcf\\xe1\\xe1\\x03\\x1f\\x99u3F\\x81\\xb6\\x88\\xa1\\x17\\xc0\\xd8\\x05\\x16\\x060\\x82\\x7f$\\xda\\x16\\x9a|\\xc1\\x1bF\\xfb\\x90\\x1e\\xdc\\xc0\\x07\\x14\\xa8\\x01\\x17\\x04\\xf2\\x0b\\x0c\\x14 \\x1fL8\\x04\\x86\\x93\\x90\\x8aU\\x94 .k\\xe0\\x83\\x14\\xec\\x03\\x87\\x06D,\\x063\\xb8\\x00\\n~W\\x94\\x1b4B`\\x9dA\\x86-\\x80\\x11\\x05\\x17 b\\x00\\xc1X\\xd2\\x01\\xd8\\xc0\\x80(\\x04e\\x01\\xa1\\xcd\\x02*0\\x12\\x14\\x12\\xb4\\xa2(\\xff@D\\x16\\xcaP\\x003H\\xa2\\x8a \\xe0D\\x07\\x1a\\xe0\\x87\\'\\xc4\\xa3\\t\\xea\\xc30\\x1cl\\x10\\x02\\xb5\\xcd\\xa0\\r\\x0e\\xf8\\x07\\xb4U\\x90\\x80\\x0b(`\\x19\\xffh\\x052\\xee\\xc0\\x84 \\xec\\xb7\\x07~x\\xc0$\\x1ep\\x07\\x06T\\x80t-H\\x01\\xa5IB\\x01O\\x93b\\x05\\xcd8\\x04\\t\\x82@\\x08q\\xf8\\xe1\\x1f#\\x08\\x01\\x1f\\x801\\x02OT\\x11\\x073(@\\x17~\\x87\\x9e\\xef2A\\x01;K\\x80\\x17\\x9el\\x82\\xb2p`\\x00\\xe4\\xff0\\x87%\\x1e`\\x0eV\\xf8\\x00K\\xa4\\xb8@\\x07[\\x82\\x8b7\\xb8\\x96\\x14\\x00`E\\x12\\\\\\x10\\x01\\x07\\x98#f\\xd6h\\x82\\x1fD`f\\x1cL\\x03\\x01\\xd3\\xf0^\\xc7\\xbf\\x9b\\tJ\\xb8\\x94\\x12\\xb7\\x90\\x80\\x1fZ\\x11\\x82;\\x0c\\x00\\x126\\n\\x01\\x11`\\x80\\x00,e\\x14\\'X@@%\\n@\\n!T \\xb0\\xdd\\xe4\\xc1\\x00\\x1c\\x0e\\x8cV\\xf8\\xc0\\x08\\x18h\\xc142\\xb0R\\x11\\xd8] \\xefH@#\\x84K\\tXT\\xe1\\x1cMHE+\\xb8\\x01\\x01\\x0f`)\\x03\\x05h\\xdbP*p\\x81\\xb1\\x17\\xe0\\x05\\x1e\\xf0\\x01\\x13\\xac\\xc1\\x03O\\x00\\x83\\x1b\\x83\\xe0E\\x17\\xa8=\\x8d7\\x04\\xc1!\\xe7h\\x83\\x1d\\xba^8\\x04\\xbc\\x00\\t\\xc1\\xedq\\x1b\\x84\\xe1\\x93\\x99\\xdf\\x048L\\x08D\"\\xca\\xc0\\xb6,\\\\\\xe0\\x16\\x1ex\\xc3\\x0b00\\r#\\xe4\\xa3\\x00\\x89\\x10\\xc2J\\x1b\\xe2\\x00\\x00\\\\\\xa0\\x11\\xb9\\xc8E\\xa7\\n7\\x03\\x1d\\xe8 \\x0b\\x82\\xa0\\x80\\t\\xaa\\x82\\x8f_\\xcd\\xa0\\xc7\\x82H\\xfc\\x0c\\x10 \\x08NU\"\\x03\\x8a \\xc7\\x88A\\xecn\\x0b[\\xb4\\x02\\x18A1A\\rp\\xa0\\xba\\x1a:\\x1f\\x01\\x81X\\x01\\x13\\xd0\\xd3\\x83V|\\xf7%\\xe6\\xef\\x010\\x10\\xb7\\x0b\\x00d\\xe0O\\x7f\\xa2a\\x18`\\x04)\\xc0\\x02.\\xf0\\x0f\\xb5`\\x0b\\xd06\\x10\\xe4g\\x0b$\\xa0\\x7fO\\xc0\\n\\xff\\x80\\x0f\\xe8\\x90\\t7P\\x035\\x10\\x03\\x88@E\\xac\\x00\\x0cmg\\x7f\\x0b8~v\\x17\\x82\\x06!\\x02\\xe6\\x07\\x0c\\xe2\\xf0\\t\\x1cp\\x06I\\xf0\\x08\\xa8@\\x05f`\\x06TP\\x05t\\xf0\\tg\\x10\\x068\\xd8\\x07=@\\x02\\n\\xf8\\x0f\\x01\\x01\\x00;'", + "b'GIF89aP\\x001\\x00\\xf7\\x00\\x00\\x00\\x00\\x00\\x80\\x00\\x00\\x00\\x80\\x00\\x80\\x80\\x00\\x00\\x00\\x80\\x80\\x00\\x80\\x00\\x80\\x80\\x80\\x80\\x80\\xc0\\xc0\\xc0\\xff\\x00\\x00\\x00\\xff\\x00\\xff\\xff\\x00\\x00\\x00\\xff\\xff\\x00\\xff\\x00\\xff\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x003\\x00\\x00f\\x00\\x00\\x99\\x00\\x00\\xcc\\x00\\x00\\xff\\x003\\x00\\x0033\\x003f\\x003\\x99\\x003\\xcc\\x003\\xff\\x00f\\x00\\x00f3\\x00ff\\x00f\\x99\\x00f\\xcc\\x00f\\xff\\x00\\x99\\x00\\x00\\x993\\x00\\x99f\\x00\\x99\\x99\\x00\\x99\\xcc\\x00\\x99\\xff\\x00\\xcc\\x00\\x00\\xcc3\\x00\\xccf\\x00\\xcc\\x99\\x00\\xcc\\xcc\\x00\\xcc\\xff\\x00\\xff\\x00\\x00\\xff3\\x00\\xfff\\x00\\xff\\x99\\x00\\xff\\xcc\\x00\\xff\\xff3\\x00\\x003\\x0033\\x00f3\\x00\\x993\\x00\\xcc3\\x00\\xff33\\x0033333f33\\x9933\\xcc33\\xff3f\\x003f33ff3f\\x993f\\xcc3f\\xff3\\x99\\x003\\x9933\\x99f3\\x99\\x993\\x99\\xcc3\\x99\\xff3\\xcc\\x003\\xcc33\\xccf3\\xcc\\x993\\xcc\\xcc3\\xcc\\xff3\\xff\\x003\\xff33\\xfff3\\xff\\x993\\xff\\xcc3\\xff\\xfff\\x00\\x00f\\x003f\\x00ff\\x00\\x99f\\x00\\xccf\\x00\\xfff3\\x00f33f3ff3\\x99f3\\xccf3\\xffff\\x00ff3fffff\\x99ff\\xccff\\xfff\\x99\\x00f\\x993f\\x99ff\\x99\\x99f\\x99\\xccf\\x99\\xfff\\xcc\\x00f\\xcc3f\\xccff\\xcc\\x99f\\xcc\\xccf\\xcc\\xfff\\xff\\x00f\\xff3f\\xffff\\xff\\x99f\\xff\\xccf\\xff\\xff\\x99\\x00\\x00\\x99\\x003\\x99\\x00f\\x99\\x00\\x99\\x99\\x00\\xcc\\x99\\x00\\xff\\x993\\x00\\x9933\\x993f\\x993\\x99\\x993\\xcc\\x993\\xff\\x99f\\x00\\x99f3\\x99ff\\x99f\\x99\\x99f\\xcc\\x99f\\xff\\x99\\x99\\x00\\x99\\x993\\x99\\x99f\\x99\\x99\\x99\\x99\\x99\\xcc\\x99\\x99\\xff\\x99\\xcc\\x00\\x99\\xcc3\\x99\\xccf\\x99\\xcc\\x99\\x99\\xcc\\xcc\\x99\\xcc\\xff\\x99\\xff\\x00\\x99\\xff3\\x99\\xfff\\x99\\xff\\x99\\x99\\xff\\xcc\\x99\\xff\\xff\\xcc\\x00\\x00\\xcc\\x003\\xcc\\x00f\\xcc\\x00\\x99\\xcc\\x00\\xcc\\xcc\\x00\\xff\\xcc3\\x00\\xcc33\\xcc3f\\xcc3\\x99\\xcc3\\xcc\\xcc3\\xff\\xccf\\x00\\xccf3\\xccff\\xccf\\x99\\xccf\\xcc\\xccf\\xff\\xcc\\x99\\x00\\xcc\\x993\\xcc\\x99f\\xcc\\x99\\x99\\xcc\\x99\\xcc\\xcc\\x99\\xff\\xcc\\xcc\\x00\\xcc\\xcc3\\xcc\\xccf\\xcc\\xcc\\x99\\xcc\\xcc\\xcc\\xcc\\xcc\\xff\\xcc\\xff\\x00\\xcc\\xff3\\xcc\\xfff\\xcc\\xff\\x99\\xcc\\xff\\xcc\\xcc\\xff\\xff\\xff\\x00\\x00\\xff\\x003\\xff\\x00f\\xff\\x00\\x99\\xff\\x00\\xcc\\xff\\x00\\xff\\xff3\\x00\\xff33\\xff3f\\xff3\\x99\\xff3\\xcc\\xff3\\xff\\xfff\\x00\\xfff3\\xffff\\xfff\\x99\\xfff\\xcc\\xfff\\xff\\xff\\x99\\x00\\xff\\x993\\xff\\x99f\\xff\\x99\\x99\\xff\\x99\\xcc\\xff\\x99\\xff\\xff\\xcc\\x00\\xff\\xcc3\\xff\\xccf\\xff\\xcc\\x99\\xff\\xcc\\xcc\\xff\\xcc\\xff\\xff\\xff\\x00\\xff\\xff3\\xff\\xfff\\xff\\xff\\x99\\xff\\xff\\xcc\\xff\\xff\\xff!\\xf9\\x04\\x01\\x00\\x00\\x10\\x00,\\x00\\x00\\x00\\x00P\\x001\\x00\\x00\\x08\\xff\\x00\\xff\\t\\x1cH\\xb0\\xa0\\xc1\\x83\\x08\\x13*\\\\\\xc8\\xb0\\xa1\\xc3\\x87\\x10#J\\x9cH\\xb1\\xa2\\xc5\\x8b\\x183j\\xdc\\xc8\\xb1\\xa3\\xc7\\x8f C\\x8a\\x1cI\\xb2\\xa4\\xc9\\x93(S\\xaa\\\\\\x99\\x11\\x05\\x8a\\x81.\\x17\\xc6d\\xf9\\xd0\\xe5\\xcb\\x7f3\\x13\\xe6\\xa4\\xc9\\xd0\\xa6\\xc0\\x996o\\xc2|\\x19\\xd3g\\xce\\xa0Cq\\xdeD\\xca\\x11i\\xd1\\xa5B\\x95*%\\xfa\\x14g\\xd2\\xa7T\\x7fF\\xc5XT*\\xd0\\xa8U\\xa5\\x8a\\x9d\\x9a\\xd5+\\xd4\\xa6T\\xc3\\xeeT{\\xd6\\xacX\\xac>7~-\\xbb\\x96\\xee\\xd9\\xafo\\xcbz\\x9c\\x9b\\x97 [\\xad}\\xb1\\xf6\\x95+t\\xee\\xd6\\xbfy\\xe3\\xb2\\xdd\\xc9Sb\\xe1\\xad\\x8d/2\\x8dL\\xb9\\xb2\\xe5\\xcb\\x981\\xc7u\\x18\\xd6 c\\xc6\"7C\\x04\\r\\xd8/d\\x90U\\x8f\\xa6\\xbd\\x0b\\x15/^\\xb2\\xa8\\xb3\\xaa~\\xec\\x96\\xb6Q\\xd9m;\\xfe\\x9d\\x8d{\\xe8n\\xbb\\x1f\\x7f\\x03N\\xcd:\\xf0j\\xd2\\x92\\x83\\x127\\xee\\xb6\\xf9\\xf2\\x90\\xaa\\xb5\\xb6]\\xee\\x9azn\\xc2I\\xa7\\xfa~\\xae\\xdcy\\xeb\\xd3\\x99\\xc3\\x8b\\x12\\x1fO\\xbe\\xbc\\xf9\\xf3\\xe8\\xd3\\xab_\\xcf\\xbe\\xbd\\xfb\\xf7\\xef\\x03\\x02\\x00;'", + "b'GIF89aP\\x001\\x00\\xf7\\x00\\x00\\xa7\\x9a\\x9a\\x8c\\x8b\\x8c\\x9c\\x9b\\x9c\\xf6\\xf6\\xf5\\xcd\\xc4\\xc3\\xe4\\xe3\\xdd\\xfa\\xfa\\xfa\\xac\\xa9\\xaa\\xda\\xeb\\xe8\\xf1\\xf0\\xf0\\xb4\\xb2\\xb2\\xec\\xe4\\xe2\\xab\\xc3\\xbe\\x95\\xa9\\xa9\\xc6\\xd2\\xd1\\xd1\\xcc\\xcc\\xc3\\xbb\\xbc\\xff\\xfe\\xfc\\xb3\\xac\\xac\\xac\\xa6\\x9a\\xb5\\xc9\\xc8\\xb9\\xb2\\xb3\\xa1\\xb9\\xb6\\xf8\\xf8\\xf8\\xda\\xd4\\xd3\\xf8\\xf4\\xf5\\xf0\\xee\\xed\\xe6\\xd6\\xc8\\xe3\\xde\\xdb\\xd0\\xd1\\xc8\\x84\\x82\\x83\\xed\\xec\\xed\\xe9\\xe9\\xe9\\xe1\\xe0\\xe1\\xf5\\xf0\\xee\\xaa\\xa3\\xa4\\xde\\xdc\\xdd\\xa7\\xc8\\xc8\\xd9\\xd9\\xda\\xff\\xfe\\xfa\\xb6\\x94\\x94\\xe4\\xd0\\xb3\\x92\\x8a\\x8d\\xf4\\xe5\\xcb\\xd9\\xd7\\xd8\\xa1\\xa1\\xa1\\xe6\\xe5\\xe6\\xfa\\xf6\\xde\\xd6\\xd5\\xd6\\xf9\\xf9\\xf6\\xc4\\xbe\\xc0\\xf1\\xeb\\xe3\\xc2\\xc0\\xc1\\x91\\x92\\x91\\xc8\\xc9\\xc9\\xfc\\xfb\\xfa\\xbb\\xbc\\x9c\\xc5\\xe2\\xdc\\xb1\\xb1\\xa3\\xee\\xed\\xf0\\xeb\\xf3\\xec\\xfd\\xfe\\xfe\\xf9\\xff\\xfd\\xc9\\xc7\\xbb\\xa6\\xa5\\xa6\\xe0\\xde\\xdf\\xf4\\xec\\xd6\\xd1\\xcf\\xcf\\xaa\\xa6\\xa8\\xf3\\xf2\\xf1\\x96\\x95\\x96\\xcd\\xcc\\xcd\\xc9\\xc6\\xc7\\xe8\\xe6\\xe7\\xc1\\xb5\\xb6\\xd2\\xd1\\xd0\\xd5\\xd3\\xd4\\xc4\\xaa\\xa9\\xbf\\xbc\\xbe\\xd3\\xbe\\xb7\\xfe\\xfd\\xf4\\x9d\\xc9\\xc9\\xc7\\xd0\\xc4\\xa4\\x94\\x94\\xcc\\xc8\\xca\\xb3\\xa1\\xa1\\xfe\\xfc\\xfe\\xe2\\xda\\xd5\\xf6\\xf6\\xf8\\xfc\\xfb\\xfc\\xc9\\xbc\\xbc\\xb3\\xae\\xb0\\xc1\\xcd\\xca\\xba\\xb8\\xb9\\xff\\xfd\\xed\\xde\\xc0\\xba\\xcf\\xcb\\xc0\\xb8\\xac\\xad\\xa1\\x9e\\x9f\\x92\\x8e\\x91\\xbf\\xb9\\xb9\\xfe\\xfd\\xfc\\xc6\\xc4\\xc5\\xec\\xea\\xea\\x88\\x84\\x87\\xb9\\xb6\\xb6\\xd1\\xdb\\xd9\\x91\\x8f\\x8e\\xfc\\xfc\\xfb\\xd5\\xd1\\xd1\\xa5\\xa0\\xa1\\xe4\\xcb\\xc6\\xd8\\xcb\\xcb\\xf3\\xf2\\xf3\\xeb\\xe8\\xe7\\xf8\\xf6\\xf7\\xfd\\xf9\\xe2\\xda\\xca\\xa9\\xa5\\x88\\x89\\xdb\\xcc\\xc4\\x99\\x96\\x98\\xc9\\xc1\\xc2\\xcc\\xca\\xcb\\xec\\xe5\\xb2\\xfa\\xf8\\xf8\\xdd\\xd8\\xd9\\xff\\xfe\\xf7\\x82~\\x81\\xcb\\xb6\\xb6\\xc5\\xc3\\xc4\\xd5\\xc4\\xc4\\xa9\\xd2\\xd1\\xdc\\xd9\\xd3\\xc1\\xaf\\xb1\\xe5\\xe1\\xdf\\xf5\\xf8\\xfa\\xe5\\xe3\\xce\\xf7\\xf8\\xf5\\xbd\\xbb\\xbc\\x93\\x9d\\x95\\xfe\\xfb\\xfa\\xfc\\xfd\\xfc\\x8b\\x87\\x89\\x95\\x91\\x90\\xeb\\xde\\xdd\\xf8\\xec\\xec\\xed\\xeb\\xed\\xa7\\xaf\\xae\\xf6\\xf3\\xf3\\xff\\xfe\\xf2\\xe7\\xe4\\xe8\\xfc\\xfc\\xfd\\xb9\\xb9\\xb5\\xae\\xac\\xae\\x95\\xbf\\xbe\\x9e\\x9f\\x9e\\x8e\\x8e\\x8e\\xa3\\xa4\\xa4\\xfa\\xfb\\xfc\\xf4\\xf0\\xe5\\x91\\x94\\x93\\x91\\x95\\x95\\xcb\\xbb\\xb7\\xe3\\xeb\\xeb~yz\\xe5\\xd5\\xd4\\xf4\\xf6\\xef\\xa5\\xa3\\xa4\\xdb\\xdb\\xdc\\xdb\\xda\\xdc\\x95\\x94\\x94\\xe4\\xf1\\xf0\\xfc\\xfa\\xf6\\xcf\\xcc\\xcc\\xc7\\xc4\\xc6\\xe3\\xe1\\xe3\\xfe\\xfc\\xf8\\xcf\\xce\\xd0\\xbb\\xb9\\xbc\\xe4\\xe2\\xe4\\xeb\\xed\\xee\\xa6\\xa3\\xa8\\xe6\\xe4\\xe4\\xb5\\xa7\\xa7\\xc9\\xce\\xcd\\xf9\\xf9\\xf9\\x8c\\x88\\x87\\xc3\\xc2\\xc3\\xbb\\xbc\\xbc\\xa2\\xa3\\xa3\\x97\\x93\\x94\\xfb\\xfb\\xfb\\xfb\\xf9\\xf9\\xf9\\xfa\\xfa\\xf8\\xfa\\xf9\\xf9\\xf8\\xf9\\x8f\\x90\\x90\\xd7\\xe1\\xe0\\x9c\\x98\\x98\\xd2\\xd4\\xd4\\xfe\\xfd\\xf9\\xf3\\xf5\\xf6\\xeb\\xe9\\xeb\\xd8\\xd4\\xd7\\xc0\\xc5\\xc3\\xff\\xff\\xfd\\xfe\\xff\\xff\\xfe\\xfe\\xff\\xff\\xfe\\xfe\\xff\\xfe\\xff\\xfe\\xff\\xfe\\xf4\\xf3\\xf3\\xc3\\xca\\xc8\\xc8\\xc3\\xc1\\xfa\\xf8\\xf1\\xf8\\xf0\\xcf\\xfc\\xfb\\xef\\xba\\xd0\\xcf\\xc6\\xb5\\xb2\\xa4\\xa8\\xa7\\xba\\xbc\\xb6\\xd1\\xb1\\xaa\\x85\\x85\\x86\\xdf\\xed\\xea\\xbe\\xc0\\xbf\\xef\\xf0\\xd8\\xc1\\xc4\\xa5\\xbf\\xdf\\xde\\xef\\xe7\\xe8\\xcd\\x9e\\x8f\\xfd\\xff\\xfb\\xd5\\xa3\\x96\\xcc\\xd6\\xd0\\xb0\\xb9\\xb7\\xcb\\xcd\\xca\\xd3\\xd2\\xd3\\xbb\\xa8\\xab\\xb0\\xa8\\xaa\\xd8\\xc3\\xc9\\x89\\x89\\x89\\x93\\x93\\x93\\xd0\\xc9\\xca\\xf3\\xd9\\xd0\\xe1\\xdc\\xdb\\xaf\\xaf\\xb0\\xb8\\xb9\\xbb\\xfe\\xf4\\xef\\xdb\\xdc\\xdf\\xe3\\xe3\\xe3\\x98\\x98\\x98\\xc8\\xb7\\xbb\\xfc\\xfc\\xfc\\xfd\\xfd\\xfd\\xff\\xfe\\xf8\\xfe\\xfe\\xfe\\xff\\xff\\xff!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x001\\x00\\x00\\x08\\xff\\x00\\xe9\\xd0\\x0b\\x00\\x0f\\x9e\\x80\\x16\\xf9L\\xfc[\\xc8\\xf0\\x9f\\xbf\\x7ff\\x88q26\\xed\\xdf\\x1c<\\x7f\\xf0\\xe4\\xa9@)\\x1a\\xbf\\x1e\\xfeB:\\xf4\\xc7\\xef\\x17?~e\\xfc\\xb1\\xb9\\xd0\\xcc\\x1f\\xb2fY.\\xfdC\\xc2\\t\\x9e*bn\\x0cQ\\n&\\xacG.~\\x03R6\\xe4\\xe7\\xcf\\x8b\\x17\\x7f\\xcd\\\\\\x08 VC\\xd5&\\x01D\\x8a4dXf\\x0b\\xb1wb~\\xfd\\xa3\\xe4\\xeb\\x8f\\x18\\x19J\\x80\\xfd\\x93\\xd6C\\x9a\\xc3\\x91DC\\xfa\\xdb\\xb7\\xef\\xd7\\x85}$\\xf9e)3-\\xd3\\x1aP\\xa0\\xe0)X0`\\xda%O\\x03\\x064\\x8b\\x10\\xa1\\xa1\\xb4J\\x11\\xf8\\x9d\\xf8g\\x02^\\x8d\\x1aF6\\xe5\\xa3g`\\xea\\xbf\\x04b8\\t\\xb0\\xc1\"A\\x10\\x0f\\xa4\\x88\\x90!\\xd0\\xccY\\xda\\x87#S\\xab=\\xf9\\xd3\\xdf%h\\xfb\\xfe\\r\\x00\\xc2\\t\\xef\\x1a\\x05\\xf3(\\x19\\xc8\\x92\\xecBH?\\x0cC\\xf23\\x90\\xab_a=\\x9c\\x1eG\\x06\\xc5\\x8b\\xa1\\x0f\\x04\\x0e\\xb6\\xe5S\\x15&\\x12\\x9cIU\\xecL\\xd9\\xd2\\x04\\x8e\\xe5\\xef\\xdf\\xfd\\xe5\\xff\\x1aF\\x9c\\x0f\\xb4\\x0fn\\xd6\\xd4\\x08e,L\\xa1xLJ\\xb1\\n\\xce/\\x97\\xfd\\\\\\xfb\\xf8\\xf5[\\xec\\x8fW\\xf2\\x1a\\xf0\\x84\\xc2\\x89\\x19\\x06, \\x83&%\\xec\\xa2H&\\xe9\\xa0\\xe2@:\\xc5h0\\xc4\\x08\\x15 Q\\xc0(\\xe8\\x14\\xb0\\x80-,h0\\xc0\\x1cs\\x0c\\x90A\\x88\\x94P\\x92\\xc8!\\xc9\\xccQD\\x02\\x03P\\xa2\\x81\\x0b\\x1ap\\xb0\\x8d/(\\xd8\\xf0@!\\xbb\\x04\\xd2\\xc4\\x1b\\xfe\\x18\\xc0\\x96[\\xbf\\xc0\\xb5P?\\xcd,d@&\\x01<\\xc6T\\x18\\x1f|\\x90\\x06\\x00H\\x08\\xd2F\\x06L\\x13B\\x17\\t\\xfc3-\\xc3\\xff\\xc0\"\\xc51\\xf6\\x12\\xf6\"\\x85:\\xbb\\t\\xfb\\x1ea\\x0cU<\\x82By\\xd8\\x82\\x19ZA\\x84\\xf0iK\\x01\\xda\\x80\\xc4\\x11\\x12\\x90\\x80\\x18\\xb0\\x02Z\\xb9\\x98\\xc6\\x07\\xf6QD~<\\x83\\x15\\x10\\x18A\\xdf\\x82p\\x8b[8\\xc1\\x17Tt\\x02=H\\x80\\x844\\x10#\\x13\\xff\\x80A \\x8c@\\x03\\x18\\xac\\xc3\\x15N\\xd8\\xc2\\x086\\xb1\\x89\\x12\\xaaPg5\\x80\\xdb\\x1a\\x8c\\xd0\\x0bz(\\xa2\\x15}\\xb0\\x05\\r\\x8c\\x01\\x81$\\x14\\xa1\\x084H\\x85+j\\x81\\x07<(\\x00\\x1dU\\xf8\\xc2 \\x07\\x90\\x80\\x0b\\xe4\\x828\\x17\\xd8E\\x02\\n\\xf3\\x10\\x11\\x80\\x83\\x02\\t\\xb0\\x04\\x13\\x08\\x10\\x8f\\x0c\\x90\\x80\\x1e\\x02\\x80\\xc7&^A\\x04_\\xa6b\\x1f\\x8aP@8\\x89@\\x051\\x18\\x03}\\x92\\x01\\x85D\\xd6\\xa0\\n\\xa8\\xa4\\x01\\t\\x180D\\x06^v\\x03\\xb1\\xdc@\\x0e\\xf7j\\xc4?>\\xe0\\xff\\x04\\x12(\\xc0\\x17,`\\xc4.F\\xd0\\x05W\\xc4\\xe1\\x1f\\xc6\\xdc\\xc7[B`\\x02B\\x9eE\\x0e\\xcc\\xc0\\x05\\t\\x8e\\xa0\\x87\\\\\\x90\\xa0\\x157\\x90D\\x17\\x88\\x10\\x88T\\x8c@\\x17\\x07\\xa0\\xc1\\x01\\xdeq\\x8aV\\x88!\\x00G\\xe8D\\x00\\xd8\\xb7\\x86\\x1an\\x81\\x06\\xb5\\xa2\\xc4\\x1c\\xb6\\xb7\\x90\\x08\\x18\\x00\\x187\\xc8\\xde\\x05*\\xe3\\x0fg\\xf4\\xe0\\x1f\\xebp\\xc21,@\\x86\\x14\\\\!\\x04H\\x08\\x04\\t\\x162\\x87{\\xfd#\\x04E\\x98F!\\xff\\xf1\\x8an|\\xe1\\x10\\x96\\x18b\\x10\\xd2\\xa0\\x80\\x12\\xed@\\x12\\xafh\\xc5#\\x02 \\x864\\xd0\\x03\\x02\\xad\\x18\\x83.h\\x90\\x06\\xd1<\\xc0\\x10\\x1f\\x98\\xc6\\rJ\\xd6\\x8c\\xec\\xf1\\xe3\\x12\\x1f\\xf9\\xc5/\\xf4\\t\\x8dKd\\x81lg\\x19\\xc6\\x10\\x821\\x8e\\x06\\x9c\\xc2\\x04 pA\\x11\\xcc\\xb0\\x84\\x95\\xf5\\xcd\\x05\\xbbp\\x08\\xe7~\\x8a\\x81\\n\\\\!\\x88\\xca\\xf8\\x07*\\\\\\xd0\\xd630\\x94\\x04I\\x98\\xc5<\\x0cQ\\x04\\x12T\\x81\\x0cD\\x90@\\x1e\\x12@S\\x86\\x0c\\xc7\\x00A\\xca\\x8fC\\xd82\\x12\\xb6\\xff\\xa0\\x065}\\x00\\xc4\\x0c\\xb2Q\\x0f\\xa2\\xfd\\x03d4\\xc8\\x05jz\\x80\\x0fTh`Z\\'\\xf0G\\x0f\\x9c\\xa1\\x81\\', \\x1aI\\x90D&ga\\x80\\x03\\xc0\\xe0\\x15a\\x08\\xc3$A\\x0b\\xf18\\x00\\x12\\xa8\\x00\\x82F\\x18\\x80\\x0f\\xb0\\xd5k~Pc4\\xd9\\x12\\xa5-\"\\xf1\\xdf\\x03 \\xf0\\x04\\x16,\\xa1\\x05$\\xb8\\x00\\x13\\x80`\\x02~\\x84 \\x04\\t\\xb0\\x01\\x0cX\\x12\\x92\\xe4\\xfet\\x01\\xd50D\\x10y\\xf8\\xdf}\\xb2\\xc0\\x06a\\xd0\\x862\\xe4\\xc0\\x076P\"\\x17CpE\\x17\\xaa\\xb1\\x0c\\x0e\\x0c@\\x18\\x06H\\xcb\\xca\\x1e\\xb2\\x96\\xd3\\xfc\\xc3\\xb6jyHlB\\xa0\\r\\ntB\\x0c@pB\\x1a\\x9cp\\x04\\r|@\\x0f\\xa8\\x98A8~\\xe1\\x8f\\xb7,J\\xb9\\xff\\xb8\\x83&\\xfap\\x19|\\x04\\x91\\t\\x06p\\xc1=\\xeaA\\x04\\x12\\x04!\\x01A\\xd3\\xc3\\x00\\xce \\x8b4\\xb4\\x82\\tp`\\x844\\xcc\\x12\\x9cC\\t\\t-\\xb1Q\\xd4Z\\xd8\\xd2\\x03\\x02,\\xe1\\x16(\\x08A\\x10\\x98\\x00\\x839\\x18\\xa0\\xffD%;J4\\xd80\\x00~p\\xce\\x19\\xff\\x10B6\\x1e0\\r,\\x98`\\x18\\xbf\\xd0\\xc3\\x93w\\xb0\\x8bL\\x14\\x01\\x1f\\x94\\xf8\\xc7\\x10\\x86x\\x06\\xc2\\x99\\x00\\tc\\xa0\\x843\\x1a\\xd1(\\x15\\x9b\\xe4\\xb6\\xede\\xaf\\x8acs\\xcc$\\x0cA\\x0b\\x04\\x98\\x87?`6\\x87\\x1b\\xdc\\xeb!\\xcf\\x18u\\x04\\xf61\\x87\\x85\\x19\\x11\\x1bH\\xd0B\\x1f\\x82p\\x04\\x12xf\\t\\x1a\\xd8\\x81\\x1el\\xd0\\x8c\\x04L#\\x82\\xff0@\\x08\\xb6\\x10\\x00\\x18\\x80C\\x17Dn\\x84\\xff\\xe0\\xeb\\xdaL7\\xdb\\xb6\\x08\\xbd\\xc0/,\\xa1\\x00\\n\\x84@\\x03b1\\xc0\\x00~2\\xadg4\\xe4\\x17\\x8cZ\\x885&P\\x058\\x1c\\xc3\\x04C\\xa8\\x80\\x16X\\x90\\x8a$\\xd0\\xc0\\x04\\x89p\\x01\\x0bX0\\x8c\\x7f\\x84\\xd6\\t\\x9c\\x80\\x81\\r\\xdc\\x90\\x87hX\\xe1\\x04\\x11\\x80\\x02+d\"\\x92\\x84\\t\\t)\\xb0(\"\\x1b$+\\x82i\\xe4\\xc2J\\x93\\xc0\\xc5<\\xc0f\\x11\\xdf$\\xcao\\x0b\\x018\\xcb\\xa4\\xe0\\x8b/\\xfcc\\x18,\\xb8E\\x1e\\xe6\\x80\\x0fK\\x98!\\x08H\\xff`\\xc2+\\xea]\\x04\\xeb\\xa1\"\\x13Lp\\x85\\x0c\\x0e\\x80\\xb0\\xba\\xb2!a\\x0eI\\xd4\\xa5\\x1b\\xe2\\x0f\\x1e\\xab\\x05\\xcaq\\xc8\\x84,\\xc4@\\x8f@\\x0c!6\\xfb\\x18\\x80pP\\xb62\\x8dOk\\x06\\xe0\\xd0\\xc6\\x0c\\xfe\\xa1\\x01-\\xc4b\\x0eXH\\x85\\x1e\\x12p\\x868\\xc4\\x82\\x04 `\\x812\\x9e\\xe1g\\'\\x9c\\x82\\tb\\x88\\xc7?\\x1aqqM\\xd3\\xf6\\xb6kQK\\xb0\\x8b\\x86\\x85L\\xc8X\\x00\\xae\\xb0\\x85\\x01B2\\x80\\xd8\\xac\\x85\\xe7Dj\\x88!\\x98q\\x07F\\xf8\\xc3\\x0548\\x822b\\xb1\\x8e\\x0c\\xe2\\xa3]T\\x18\\xc24\\xa6\\xf1\\x8ae\\xd4\\xe2\\x0fz\\xa0\\x871\\x8a@\\x14g@#a\\xd3b\\x8b4\\x9eA\\xfaT\\x0b\\xe9\\x19xNF\\x16\\x9aA\\x87\\x1f\\xb0c\\n\\xbdX\\x00C\\x9a\\xa1\\xed\\xd5,\\xe4\\x19\\xcd0NCX\\xa1\\x06\\x0cl\\xe0\\x1fqH\\x02\\t\\x96\\x81\\x84\\x10(c\\x08z(\\x04\\x01@ D\\x16\\x98\\x80\\tc\\xf8\\x03\\x11Z\\xe1\\x886\\xfc\\xa3\\x07\\xd0x\\x06HBr\\x83_D\\xc3\\x88\\x969A\\xff%\\xe8`\\x0f9t@\\x1c8\\x10B)nA\\x039\\xb0\\x02e@\\xf1\\xf9IX\\xb6\\x9f\\xd9\\xff\\xe3\\x0c-\\xb8\\xc5\\x06\\\\0\\x8b90a\\x17\\xb4\\xc0\\x02G\\xd0as\\xb0\\x10I\\xb0\\x0e \\x90\\x0b\\x99\\xf0\\x07*p\\x04b\\xa0\\x00l\\xe0\\x0c\\x12\\xf8\\x0c\\xd1\\xf0\\x0c\\x97 \\x13\\xff\\x00\\r\\xcdp\\x02\\xac0\\x00<\\x80\\x00\\xe3@\\x08)P\\x07u`\\x08\\x93\\xf0:\\x1c \\x07\\x0b\\x90\\x00\\xd0p\\x03\\x89\\xd2#\\xc2\\xf5^(\\xd3\\x0f\\xbaW2\\xd3\\xc2\\x01\\xdc\\xb0\\x0e\\x9e\\xa6\\x0c\\xa9`\\x03q\\x90\\x00\\x92\\xb0\\x03\\x87\\x02\\x020\\x90\\x04}c\\x02\\xde\\xf0\\x07\\x99@\\x00# {=0-e@\\x07^\\x00\\x0b30\\ns\\x80\\x08)\\xb0\\x01G\\xb0\\x0b\\xa1\\xa0\\x03\\x9f@\\x08\\x84\\xb0\\x01\\x0b\\xf0\\x0b1\\x10\\x03\\x0bw{GDb\\xbf\\xe0#j!$4\\x18n\\xfe\\x83\\x08?p6wp\\x05\\xf7\\x80\\x05$\\xd0f\\xb9\\xf0\\x01A`\\x02;\\x00\\x05~\\xe0\\x057\\x00\\x00\\xa40\\x06{B\\x01\\x05\\xc0\\x01l\\xb6\\x02\\x88@\\x01\\x0c\\xff\\xc0-`\\xd0\\t\\x98P\\x00L\\x80\\x08{\\xb0\\x02P\\x80\\x0ce\\xd0\\x03\\x9e\\xb0\\x10w\\x15\\r-\\xf1}\\t\\xd3s\\xfcp\\x01/8-4\\x18x\\r\\x11\\x01+\\xf0\\x03\\xe9\\x00\\x00\\xe7\\xb0\\x01\\x1b\\xa0\\x04\\xf1\\x80\\x01\\xb68\\x0f\\x9fp\\r{P\\x003\\xa0\\x01\\xe5\\x80\\x02y@\\x01%0\\x08\\x0e\\xc0\\x00%\\x90\\r\\xa6\\xf0\\t:\\x80\\x0e\\xdfp\\rB\\x00\\x02\\xd8P\\tS\\xf1\\x13\\xc1\\xa0\\x15\\'\\x16f\\x84q\\x12t%\\x13\\xd2v\\x16\\xfc\\xb0\\x0f\\xa9\\x18n\\r\\xd1\\x0c\\x890\\x04\\xf4\\xa0\\r6\\xc0\\x05\\xf1P\\x05M \\n\\xcc\\xc0\\x00\\x0c\\xd0\\x01\\x1b\\x80\\x0bD\\xd0\\t\\x93\\x10\\x08]\\xa0\\x00K@\\r\\xbcP\\x0c\\xdf`\\n\\'\\x80\\x0c\\xc80\\x15\\xa4\\x17\\x1c\\xbfp/\\xa6\\xe8e\\xcd\\xe0\\x07D\\xa2\\x8d\\x87B\\x12}\\xb3t\\xa9X\\x7f\\x0c\\x01\\x12\\xff\\x00\\x0c!\\x10\\x0b6P\\x0c\\t\\xa0\\x00\\xdb\\xd0\\x0bR\\x90\\x039\\xb0\\n\\xceP\\x04\\xbb\\x86\\n}\\x80\\x06\\x1e\\x00\\x04\\x0b \\x01\\xee\\xd0\\x89!!\\r\\xa81\\x7fbf\\x8a\\xfe\\xa0t\\n\\xff\\xd9(\\x17wbD\\x01[\\xa91\\x91\\xfb\\xd1(\\x93\\xf6q\\xb3\\x10\\x02 \\x90\\x00\\xb4\\x97\\x00 \\x802-1\\x14\\x0b\\xe8\\x01\\xe3E\\x04\\x90\\xf0\\x0f\\xce\\xb0ex\\x16\\x17+c$Z\\xf1\\x0b\\x05\\xe8e\\r![\\x9e\\xe8w\\xbeAb@Y\\x83>\\xe5\\x0cs`\\x02\\x1f m\\xf3\\xe2\\x0cER$\\x12(\\x81\\xfb4\\x06\\x1ePl2\\xc0\\x0e\\xef\\xf2\\x84\\xc2Ab\\x0c\\xa1P\\x0fa\\x1f}\\x89s\\xff\\x10$\\xb7\\x15f\\x06\\xb0w\\x0fQ\\x965\\xf8\\x10\\x1f\\x00\\x03\\xbe\\xb6\\x93\\xf0\\xf2\\x10G\\xe0\\x01\\x1e\\x10{iP\\x08\"\\xe0\\x0c\\x97\\x80\\x95g\\x11\\x12>\\x86P\\xd6\\xc8\\x93\\x8aB\\x98+\\x13f=\\x96(\\x8a\\xb9\\x1f\\xd0@\\x12\\xaf\\xd0\\x19\\xd3\\xd0\\x94\\xf0\\xd2\\x10V\\xf0\\x94]p\\x06\\x99\\x00\\x01\\xc8pD8\\xa7\\x8dkx\\x16u\\xc6\\x10&1\\x9a\"\\xd6s\\xa8\\x01\\x98\\xff\\x90\\x9a\\xfd\\x003X\\x80\\nI\\xe0k&\\x13\\x9b\\x0c!\\x13E\\xe0\\x0b\\xe5\\xa2\\x0e\\x050\\x02o\\x00\\x0c\\xca\\xc6\\x97$!-*6\\x00\\x8a\\x12b\\xdf\\xff&b\\xc1\\xf6\\x82\\xd2r\\x9c\\x8aY\\x1a\\xfb\\xb4\\x04\\xa9\\xf0\\x01\\xb9\\xb0\\x81\\xf0b2-\\xc1\\x0fV\\xf0\\x0f$\\xa0\\x02Rt\\x0c\\x18p\\x0b\\xfa \\x02\\xff\\xe0m\"\\x91\\x0bZ\\xf1\\x97\\xe0Y\\x9cL\\xc7\\x93\\xfe\\x13b\"q\\x98\\xe8\\t\\x94\\xf3\\x02\\x03l\\x05\\x03T\\x89g\\xe0\\xf1\\x9cS\\xf1\\x00*\\xa9\\x02$\\xc0\\x01n\\xa0\\x04\\xfei\\x05e\\xd0\\x0870\\x0c\\xce\\xa0\\x16\\xc7\\xa4(@\\x84\\x1a;\\x17\\x12A2b\\xa6X\\x96\\x8ba\\x00J\\x89\\x04N \\x0bH\\xe0\\x02g`\\x84\\xd09\\x14\\xff\\xb0\\x0b\\x94\\x19\\x00\\xa8\\xb0\\x00[\\xd0\\x0eL \\x0cV\\x10\\rX\\xb0\\x0f29->\\x86\\x1a@\\xd4\\x97\\xf1ub\\xa1\\x19l\\x17\\x00\\xa3\\xc1\\xa6\\x01m \\x06\\xa7p\\x00#\\x80\\x04g@\\t0\\xb3\\xa3\\x9e\\xb8\\x10N\\xe0\\x01\\xde\\x10\\x00L \\x02\\x15\\xe0\\x0b]p\\x01\\x9ep\\x082\\xf9\\x10@!w\\xe2\\xc1^\\x08\\x1a\\x1c<\\xa5\\x16U\\n\\x94\\x8c\\xe2\\x0f `\\x0b\\xeb\\xa0.]\\xf0d\\x951\\x18b\\xba^\\xfe\\xe0\\x04\\x7f\\x80\\x06\\x93\\xff\\xa3\\x01i\\xe0\\x0b\\x12\\x00\\tE\\xb2\\x9a\\x83Y\\xa0$V\\x19\\xa9![\\xb7\\x85\\x98\\x8a\\xa2\\x98\\x8cb2\\xe6`\\n\\x1aP\\x11\\xe6 /\\'\\x10\\x94\\xf2)\\x9fSA\\x12+c\\x06*\\xe9\\r[`\\x0b\\x0f \\x01U \\x08\\x19\\xc0\\x10\\xb90\\x07\\xcd\\x00\\r\\xd0\\xf0}{g4H\\xa1\\xa9\\xab\\xe9\\x0f|p\\xa4\\x0b\\x11\\r\\xcb\\x80\\x9c\\'\\xb0\\xac\\x0b\\x13\\x01\\xcb\\xba\\xac|J\\x18\\xaa\\n/\\xeb@\\x0c\\x94\\x89\\x07\\xcbp\\x06\\xd5\\xe0\\x06\\xec\\x80\\x01\\xb7\\xea\\t7`\\x0e=\\xf0\\x84=\\x10\\x0cd\\xc1\\x0f\\xe6`\\x0e\\x97\\xb0\\x0fe\\xe1\\x0fV\\x00\\r1\\xe0\\x03\\xff\\x90\\x05} \\x06\\xa4\\x80\\x9c\\xf8\\xca\\xa7\\xcf*\\x8e\\x96\\x91(JA\\x99h\\xa0\\x00!\\xb0\\x0bn \\x06\\xed\\x90\\x07\\x18\\x10\\x9a \\xca\\x07!\\x91\\xae\\xd2 \\xa2@\\xb6\\x10\\x17@\\x0e\\x0f`\\x0c\\xa4\\xa0\\x0b\\x04\\x90\\xaf\\x1a\\x1b\\x8e\\xcb\\x8a4\\xc1!\\x12\\x03\\xd0\\x05\\x01\\xe0\\rh0\\x06]\\xc0\\x02\\x0f\\xa0\\x00b\\x80\\x07\\x07\\x10j\\x1a\\xc0\\x06\\x97p\\x01\\xce\\xe0\\x03\\xe3\\xfa\\x0cn\\x13\\xe1\\x0fe0\\x00\\xf8` text2sql-adventure-works.SalesLT.Product" + "text2sql-adventure-works.SalesLT.Product -> text2sql-adventure-works.SalesLT.ProductCategory -> Product", + "text2sql-adventure-works.SalesLT.Product -> text2sql-adventure-works.SalesLT.ProductModel -> Product", + "text2sql-adventure-works.SalesLT.Product -> text2sql-adventure-works.SalesLT.ProductModel -> text2sql-adventure-works.SalesLT.ProductModelProductDescription -> text2sql-adventure-works.SalesLT.ProductDescription -> ProductModelProductDescription", + "text2sql-adventure-works.SalesLT.Product -> text2sql-adventure-works.SalesLT.SalesOrderDetail -> text2sql-adventure-works.SalesLT.SalesOrderHeader -> SalesOrderDetail", + "text2sql-adventure-works.SalesLT.Product -> text2sql-adventure-works.SalesLT.SalesOrderDetail -> text2sql-adventure-works.SalesLT.SalesOrderHeader -> text2sql-adventure-works.SalesLT.Address -> CustomerAddress", + "text2sql-adventure-works.SalesLT.Product -> text2sql-adventure-works.SalesLT.SalesOrderDetail -> text2sql-adventure-works.SalesLT.SalesOrderHeader -> text2sql-adventure-works.SalesLT.Customer -> CustomerAddress" ], "Database": "text2sql-adventure-works", - "Definition": "The Product entity contains detailed information about each product offered by the company. It includes key identifiers like ProductID and ProductNumber, as well as descriptive attributes such as Name, Color, Size, and Weight. Pricing information is provided through StandardCost and ListPrice, and sales information is tracked with SellStartDate, SellEndDate, and DiscontinuedDate. Additional details include category and model identifiers, as well as thumbnail images. Questions that can be answered using this entity include querying product prices, availability status, and product characteristics.", + "Definition": null, "Entity": "Product", - "EntityName": "Product Information", + "EntityName": null, "EntityRelationships": [ { "FQN": "text2sql-adventure-works.SalesLT.Product", "ForeignDatabase": "text2sql-adventure-works", "ForeignEntity": "ProductCategory", - "ForeignFQN": "text2sql-adventure-works.SalesLT.Product", + "ForeignFQN": "text2sql-adventure-works.SalesLT.ProductCategory", "ForeignKeys": [ { "Column": "ProductCategoryID", "ForeignColumn": "ProductCategoryID" - }, + } + ], + "ForeignSchema": "SalesLT" + }, + { + "FQN": "text2sql-adventure-works.SalesLT.Product", + "ForeignDatabase": "text2sql-adventure-works", + "ForeignEntity": "ProductModel", + "ForeignFQN": "text2sql-adventure-works.SalesLT.ProductModel", + "ForeignKeys": [ { "Column": "ProductModelID", "ForeignColumn": "ProductModelID" } ], "ForeignSchema": "SalesLT" + }, + { + "FQN": "text2sql-adventure-works.SalesLT.Product", + "ForeignDatabase": "text2sql-adventure-works", + "ForeignEntity": "SalesOrderDetail", + "ForeignFQN": "text2sql-adventure-works.SalesLT.SalesOrderDetail", + "ForeignKeys": [ + { + "Column": "ProductID", + "ForeignColumn": "ProductID" + } + ], + "ForeignSchema": "SalesLT" } ], "FQN": "text2sql-adventure-works.SalesLT.Product", diff --git a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.ProductCategory.json b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.ProductCategory.json index 2510cf8..dc9856b 100644 --- a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.ProductCategory.json +++ b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.ProductCategory.json @@ -2,19 +2,19 @@ "Columns": [ { "DataType": "int", - "Definition": "The ProductCategoryID column in the ProductCategory entity contains numeric identifiers that uniquely represent different product categories within a database. Each value in the column corresponds to a specific category, allowing for the organization and categorization of products. The values are integer numbers with no apparent sequential order, indicating that they are likely assigned based on the creation or addition of different categories.", + "Definition": null, "Name": "ProductCategoryID", "SampleValues": [ - 38, - 27, + 23, 6, - 10, - 25 + 40, + 36, + 22 ] }, { "DataType": "int", - "Definition": "The ParentProductCategoryID column in the ProductCategory entity contains numeric identifiers that represent the parent category of a given product category. These values are used to establish hierarchical relationships between product categories, where a category can have a parent category, indicating a level of organization or grouping. Each integer value corresponds to a specific parent category ID in the database. The column helps in organizing and structuring the product categories into a hierarchy for better management and categorization of products.", + "Definition": null, "Name": "ParentProductCategoryID", "SampleValues": [ 4, @@ -25,31 +25,31 @@ }, { "DataType": "nvarchar", - "Definition": "The Name column in the ProductCategory entity contains the names of different product categories available in the inventory. These names represent the various types of products or groups of related products that the store offers. The values in this column are typically descriptive words or phrases that provide insight into the nature of the products within each category.", + "Definition": null, "Name": "Name", "SampleValues": [ - "Wheels", - "Bike Racks", - "Pumps", - "Touring Bikes", - "Socks" + "Touring Frames", + "Helmets", + "Pedals", + "Clothing", + "Bikes" ] }, { "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the ProductCategory entity contains globally unique identifier (GUID) values. These values follow the standard GUID format, which is a 128-bit integer used to uniquely identify information. Each value is comprised of a sequence of hexadecimal digits in groups separated by hyphens. The GUIDs ensure that each row in the ProductCategory entity can be uniquely identified across different tables and databases.", + "Definition": null, "Name": "rowguid", "SampleValues": [ - "9AD3BCF0-244D-4EC4-A6A0-FB701351C6A3", - "5515F857-075B-4F9A-87B7-43B4997077B3", - "000310C0-BCC8-42C4-B0C3-45AE611AF06B", "B5F9BA42-B69B-4FDD-B2EC-57FB7B42E3CF", - "049FFFA3-9D30-46DF-82F7-F20730EC02B3" + "10A7C342-CA82-48D4-8A38-46A2EB089B74", + "C657828D-D808-4ABA-91A3-AF2CE02300E9", + "19646983-3FA0-4773-9A0C-F34C49DF9BC8", + "646A8906-FC87-4267-A443-9C6D791E6693" ] }, { "DataType": "datetime", - "Definition": "The ModifiedDate column in the ProductCategory entity stores the date and time when the record was last updated. The values are in the format of YYYY-MM-DD HH:MM:SS, representing a timestamp. This column is used to track changes and updates to the product category information over time.", + "Definition": null, "Name": "ModifiedDate", "SampleValues": [ "2002-06-01 00:00:00" @@ -57,13 +57,27 @@ } ], "CompleteEntityRelationshipsGraph": [ - "text2sql-adventure-works.SalesLT.ProductCategory -> text2sql-adventure-works.SalesLT.ProductCategory" + "text2sql-adventure-works.SalesLT.ProductCategory -> text2sql-adventure-works.SalesLT.ProductCategory", + "text2sql-adventure-works.SalesLT.ProductCategory -> Product" ], "Database": "text2sql-adventure-works", - "Definition": "The ProductCategory entity contains information about the various categories of products within a database. It includes details such as the unique identifier for each product category, the identifier of the parent category to support hierarchical relationships, the name of the product category, and metadata like a unique row identifier and the date of the last modification. This entity can be used to answer questions related to the organization of product categories, their hierarchical structure, and updates to category details.", + "Definition": null, "Entity": "ProductCategory", - "EntityName": "Product Category Information", + "EntityName": null, "EntityRelationships": [ + { + "FQN": "text2sql-adventure-works.SalesLT.ProductCategory", + "ForeignDatabase": "text2sql-adventure-works", + "ForeignEntity": "Product", + "ForeignFQN": "text2sql-adventure-works.SalesLT.Product", + "ForeignKeys": [ + { + "Column": "ProductCategoryID", + "ForeignColumn": "ProductCategoryID" + } + ], + "ForeignSchema": "SalesLT" + }, { "FQN": "text2sql-adventure-works.SalesLT.ProductCategory", "ForeignDatabase": "text2sql-adventure-works", diff --git a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.ProductDescription.json b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.ProductDescription.json index 06f606f..501f3eb 100644 --- a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.ProductDescription.json +++ b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.ProductDescription.json @@ -2,43 +2,43 @@ "Columns": [ { "DataType": "int", - "Definition": "The ProductDescriptionID column in the ProductDescription entity contains unique integer identifiers assigned to each product description. These IDs are used to distinguish and reference specific product descriptions within the database. The values in this column are sequentially generated numbers and serve as primary keys for the product descriptions.", + "Definition": null, "Name": "ProductDescriptionID", "SampleValues": [ - 1989, - 1636, - 1473, - 1591, - 1401 + 1545, + 1718, + 1592, + 1678, + 1799 ] }, { "DataType": "nvarchar", - "Definition": "The Description column in the ProductDescription entity contains textual information providing details about various products. It includes a mix of languages such as Hebrew, Arabic, English, and French, suggesting it supports multiple languages to describe the products. The descriptions often provide technical details, materials used, and product features, such as design, performance, and usage. This column helps customers understand the unique aspects and benefits of the products.", + "Definition": null, "Name": "Description", "SampleValues": [ - "\u05de\u05e1\u05d2\u05e8\u05ea \u05e7\u05dc\u05ea \u05de\u05e9\u05e7\u05dc \u05de\u05d0\u05dc\u05d5\u05de\u05d9\u05e0\u05d9\u05d5\u05dd \u05d7\u05e8\u05d5\u05e5 \u05de\u05e1\u05e4\u05e7\u05ea \u05ea\u05e0\u05d5\u05d7\u05ea \u05e8\u05db\u05d9\u05d1\u05d4 \u05d6\u05e7\u05d5\u05e4\u05d4 \u05d9\u05d5\u05ea\u05e8 \u05dc\u05e0\u05e1\u05d9\u05e2\u05d5\u05ea \u05d1\u05ea\u05d5\u05da \u05d4\u05e2\u05d9\u05e8. \u05d4\u05e2\u05d9\u05e6\u05d5\u05d1 \u05d4\u05d7\u05d3\u05e9\u05e0\u05d9 \u05e9\u05dc\u05e0\u05d5 \u05de\u05e1\u05e4\u05e7 \u05e0\u05d5\u05d7\u05d5\u05ea \u05de\u05e8\u05d1\u05d9\u05ea.", - "\u0634\u0648\u0643\u0629 \u0637\u0631\u064a\u0642 \u0645\u0627\u0633\u0643\u0629 \u0644\u0644\u0639\u062c\u0644\u0629 \u0627\u0644\u0623\u0645\u0627\u0645\u064a\u0629 \u0645\u0646 \u0627\u0644\u0643\u0631\u0628\u0648\u0646 \u0639\u0627\u0644\u064a\u0629 \u0627\u0644\u0623\u062f\u0627\u0621 \u0630\u0627\u062a \u0634\u0639\u0628\u062a\u064a\u0646 \u0645\u0642\u0648\u0633\u064a\u0646.", - "Aluminum alloy cups and a hollow axle.", - "Unisex long-sleeve AWC logo microfiber cycling jersey", - "Cuvettes en alliage d'aluminium et axe creux." + "\u5408\u6210\u6750\u8d28\u624b\u638c\u3001\u7075\u6d3b\u7684\u6307\u5173\u8282\u3001\u4e0a\u90e8\u5e26\u6709\u900f\u6c14\u578b\u7f51\u773c\u3002AWC\u8f66\u961f\u8d5b\u624b\u4e13\u7528\u3002", + "\u0e08\u0e31\u0e01\u0e23\u0e22\u0e32\u0e19\u0e23\u0e38\u0e48\u0e19\u0e19\u0e35\u0e49\u0e21\u0e35\u0e1b\u0e23\u0e30\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e20\u0e32\u0e1e\u0e2a\u0e39\u0e07 \u0e43\u0e19\u0e23\u0e32\u0e04\u0e32\u0e1b\u0e23\u0e30\u0e2b\u0e22\u0e31\u0e14 \u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21\u0e07\u0e48\u0e32\u0e22 \u0e17\u0e31\u0e19\u0e43\u0e08 \u0e41\u0e25\u0e30\u0e43\u0e2b\u0e49\u0e04\u0e27\u0e32\u0e21\u0e21\u0e31\u0e48\u0e19\u0e43\u0e08\u0e40\u0e1b\u0e35\u0e48\u0e22\u0e21\u0e25\u0e49\u0e19\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e02\u0e35\u0e48\u0e41\u0e1a\u0e1a\u0e2d\u0e2d\u0e1f\u0e42\u0e23\u0e14", + "\u0e04\u0e31\u0e19\u0e16\u0e35\u0e1a\u0e19\u0e49\u0e33\u0e2b\u0e19\u0e31\u0e01\u0e40\u0e1a\u0e32 \u0e17\u0e19\u0e17\u0e32\u0e19 \u0e44\u0e21\u0e48\u0e21\u0e35\u0e04\u0e25\u0e34\u0e1b \u0e41\u0e25\u0e30\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e1b\u0e23\u0e31\u0e1a\u0e04\u0e27\u0e32\u0e21\u0e15\u0e36\u0e07\u0e44\u0e14\u0e49", + "\u05e4\u05e9\u05d5\u05d8 \u05d5\u05e7\u05dc-\u05de\u05e9\u05e7\u05dc. \u05d8\u05dc\u05d0\u05d9 \u05d7\u05d9\u05e8\u05d5\u05dd \u05de\u05d0\u05d5\u05d7\u05e1\u05e0\u05d9\u05dd \u05d1\u05d9\u05d3\u05d9\u05ea.", + "Heavy duty, abrasion-resistant shorts feature seamless, lycra inner shorts with anti-bacterial chamois for comfort." ] }, { "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the ProductDescription entity contains unique identifier values in the form of UUIDs (Universally Unique Identifiers). These values are 128-bit numbers represented as hexadecimal strings in the standard 8-4-4-4-12 format, such as 690C4CB1-B9FA-48C1-8DF0-7F8644A72EDF. The purpose of this column is to ensure that each record in the ProductDescription entity can be uniquely identified across different systems.", + "Definition": null, "Name": "rowguid", "SampleValues": [ - "690C4CB1-B9FA-48C1-8DF0-7F8644A72EDF", - "DCBC8264-C4D7-4B04-9531-92AB4C868C10", - "9AC02C25-2DC2-410A-85E5-D65CE41126B4", - "BAF38C0E-69BF-4F6C-805A-C7C1C6E9056A", - "32FDCA7F-17DD-40B8-8984-6D6EBAE9759D" + "1FA72BD6-06F7-4242-8EA0-B66348BD6DAF", + "C0F0238E-5FF9-4DE8-9AA2-D395DC0134B2", + "C1445984-76F7-4365-85AA-B7CC431325BC", + "303F7483-4FE6-4666-84FC-F62BE59082FD", + "03ACBB19-749A-48A1-B77E-5D2A48E8DC3A" ] }, { "DataType": "datetime", - "Definition": "The ModifiedDate column in the ProductDescription entity contains timestamps indicating the date and time when the product description was last updated. The values follow the standard SQL datetime format 'YYYY-MM-DD HH:MM:SS.SSSSSS'. This information is used to track changes and updates to product description records over time.", + "Definition": null, "Name": "ModifiedDate", "SampleValues": [ "2008-03-11 10:32:17.973000", @@ -46,12 +46,28 @@ ] } ], - "CompleteEntityRelationshipsGraph": [], + "CompleteEntityRelationshipsGraph": [ + "text2sql-adventure-works.SalesLT.ProductDescription -> ProductModelProductDescription" + ], "Database": "text2sql-adventure-works", - "Definition": "The ProductDescription entity contains detailed descriptions of products. It includes unique identifiers for each product description, a textual description, a globally unique identifier, and the date when the description was last modified. This entity is useful for answering questions related to product details, tracking modifications to product descriptions, and uniquely identifying each product description for reference purposes.", + "Definition": null, "Entity": "ProductDescription", - "EntityName": "'Product Descriptions'", - "EntityRelationships": [], + "EntityName": null, + "EntityRelationships": [ + { + "FQN": "text2sql-adventure-works.SalesLT.ProductDescription", + "ForeignDatabase": "text2sql-adventure-works", + "ForeignEntity": "ProductModelProductDescription", + "ForeignFQN": "text2sql-adventure-works.SalesLT.ProductModelProductDescription", + "ForeignKeys": [ + { + "Column": "ProductDescriptionID", + "ForeignColumn": "ProductDescriptionID" + } + ], + "ForeignSchema": "SalesLT" + } + ], "FQN": "text2sql-adventure-works.SalesLT.ProductDescription", "Schema": "SalesLT" } diff --git a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.ProductModel.json b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.ProductModel.json index 7110d5e..9fd189d 100644 --- a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.ProductModel.json +++ b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.ProductModel.json @@ -2,65 +2,95 @@ "Columns": [ { "DataType": "int", - "Definition": "The column ProductModelID contains unique numerical identifiers for each product model in the ProductModel entity. The values are integers and serve as primary keys to distinguish different product models within the database. These identifiers are essential for database operations such as querying and joining tables that involve product model information.", + "Definition": null, "Name": "ProductModelID", "SampleValues": [ - 72, + 60, + 84, + 70, 87, - 30, - 119, - 38 + 71 ] }, { "DataType": "nvarchar", - "Definition": "The Name column in the ProductModel entity contains the names of various products. These names are descriptive and often indicate the type or category of the product, such as \"Racing Socks\" or \"Touring Pedal\". The product names vary widely and include items related to cycling gear and accessories, as evidenced by examples like \"Road-650\" and \"Women's Mountain Shorts\". The names may also include additional feature details such as \"Headlights - Weatherproof\".", + "Definition": null, "Name": "Name", "SampleValues": [ - "Racing Socks", - "Road-650", - "Touring Pedal", - "Headlights - Weatherproof", - "Women's Mountain Shorts" + "LL Bottom Bracket", + "Road-350", + "HL Bottom Bracket", + "ML Mountain Frame-W", + "HL Road Tire" ] }, { "DataType": "xml", - "Definition": "The CatalogDescription column in the ProductModel entity contains descriptive text about the product model in a catalog format. This text includes detailed information about the product's features, specifications, and any other relevant details that help identify and differentiate the product model. The content is typically intended for use in product catalogs to assist customers in understanding the product better.", + "Definition": null, "Name": "CatalogDescription", "SampleValues": null }, { "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the ProductModel entity contains unique identifier values in the UUID (Universally Unique Identifier) format. Each value is a 128-bit number used to uniquely identify records within the ProductModel entity. This ensures that each entry in the ProductModel table can be distinctly referenced. The format and structure of the values follow the standard UUID representation, which includes hexadecimal digits separated by hyphens.", + "Definition": null, "Name": "rowguid", "SampleValues": [ - "2489DDC5-1C89-4DEC-AF22-B0112CCEC467", - "3770C5E3-8DC9-43C7-B735-7AFF21645D96", - "2771D2D2-2E35-4C12-966E-CE9070DF6D53", - "F06999A1-3AA7-4E85-B8CB-049EB2C391FA", - "98726F80-E9B9-4141-9CF5-BD2EF07DCE25" + "1099A23A-C9ED-41B1-8CC1-E2C1C54A10C8", + "CE1B1064-6679-4212-8F56-2B2617EC56A5", + "10E0C8FD-CA13-437B-8E22-51853AE160A7", + "AA977B32-ACD8-4C53-A560-88A02AC1954D", + "3BCC63D6-9340-4B93-B5F2-73FA90758BF5" ] }, { "DataType": "datetime", - "Definition": "The ModifiedDate column in the ProductModel entity contains datetime values that represent the date and time when a record in the ProductModel table was last updated. The values follow the standard SQL datetime format, which includes the year, month, day, hour, minute, second, and fractional seconds. This column is used to track changes and modifications to the records, ensuring that the most recent update is recorded accurately. The datetime values are typically used for auditing and synchronization purposes.", + "Definition": null, "Name": "ModifiedDate", "SampleValues": [ + "2002-05-02 00:00:00", + "2009-05-16 16:34:28.997000", + "2009-05-16 16:34:29.027000", "2006-06-01 00:00:00", - "2005-06-01 00:00:00", - "2009-05-16 16:34:29.010000", - "2009-05-16 16:34:29.043000", - "2009-05-16 16:34:28.997000" + "2009-05-16 16:34:29.010000" ] } ], - "CompleteEntityRelationshipsGraph": [], + "CompleteEntityRelationshipsGraph": [ + "text2sql-adventure-works.SalesLT.ProductModel -> Product", + "text2sql-adventure-works.SalesLT.ProductModel -> text2sql-adventure-works.SalesLT.ProductModelProductDescription -> text2sql-adventure-works.SalesLT.ProductDescription -> ProductModelProductDescription" + ], "Database": "text2sql-adventure-works", - "Definition": "The ProductModel entity contains information about different product models in an organization. It includes unique identifiers, names, and catalog descriptions for various product models, along with metadata such as a globally unique identifier (rowguid) and the date when the record was last modified. This entity is useful for answering questions related to the identification and documentation of product models, tracking changes over time, and integrating catalog information within broader product databases.", + "Definition": null, "Entity": "ProductModel", - "EntityName": "Product Model Information", - "EntityRelationships": [], + "EntityName": null, + "EntityRelationships": [ + { + "FQN": "text2sql-adventure-works.SalesLT.ProductModel", + "ForeignDatabase": "text2sql-adventure-works", + "ForeignEntity": "Product", + "ForeignFQN": "text2sql-adventure-works.SalesLT.Product", + "ForeignKeys": [ + { + "Column": "ProductModelID", + "ForeignColumn": "ProductModelID" + } + ], + "ForeignSchema": "SalesLT" + }, + { + "FQN": "text2sql-adventure-works.SalesLT.ProductModel", + "ForeignDatabase": "text2sql-adventure-works", + "ForeignEntity": "ProductModelProductDescription", + "ForeignFQN": "text2sql-adventure-works.SalesLT.ProductModelProductDescription", + "ForeignKeys": [ + { + "Column": "ProductModelID", + "ForeignColumn": "ProductModelID" + } + ], + "ForeignSchema": "SalesLT" + } + ], "FQN": "text2sql-adventure-works.SalesLT.ProductModel", "Schema": "SalesLT" } diff --git a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.ProductModelProductDescription.json b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.ProductModelProductDescription.json index 81910b7..85dad14 100644 --- a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.ProductModelProductDescription.json +++ b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.ProductModelProductDescription.json @@ -2,55 +2,55 @@ "Columns": [ { "DataType": "int", - "Definition": "The ProductModelID column in the ProductModelProductDescription entity contains unique numeric identifiers for different product models. These IDs help to establish relationships between product models and their descriptions. The values are integers and appear to be sequential but not necessarily continuous. This column is used to link the product model data with corresponding description data in the database.", + "Definition": null, "Name": "ProductModelID", "SampleValues": [ - 6, - 118, - 23, - 55, - 3 + 87, + 10, + 121, + 36, + 29 ] }, { "DataType": "int", - "Definition": "The ProductDescriptionID column in the ProductModelProductDescription entity contains unique identifier values for each product description. These values are numeric and serve as primary keys to link the product model with its corresponding description. The IDs are used to ensure each product description can be uniquely and accurately referenced within the database.", + "Definition": null, "Name": "ProductDescriptionID", "SampleValues": [ - 1855, - 1906, - 1391, - 1778, - 1718 + 1183, + 1360, + 1515, + 637, + 1920 ] }, { "DataType": "nchar", - "Definition": "The Culture column in the ProductModelProductDescription entity contains codes representing different language and regional cultures. These codes are typically in two-letter ISO 639-1 format for language identification, such as 'en' for English or 'fr' for French, and sometimes include additional information for specific regional or script variations, such as 'zh-cht' for Traditional Chinese. The column is used to specify the cultural context of the product descriptions.", + "Definition": null, "Name": "Culture", "SampleValues": [ - "en ", - "he ", - "fr ", + "th ", + "ar ", "zh-cht", - "ar " + "en ", + "fr " ] }, { "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the ProductModelProductDescription entity contains unique identifier values for each row in a GUID (Globally Unique Identifier) format. This format consists of hexadecimal digits separated by hyphens, ensuring each value is unique across tables, databases, and servers. The column serves as a primary key or as a unique constraint to identify records distinctly within the table. This helps in maintaining data integrity and consistency, especially during data synchronization and replication.", + "Definition": null, "Name": "rowguid", "SampleValues": [ - "56981E78-1FF2-43A2-926B-A8EA7F84A431", - "4BA2292E-5D33-4106-8032-AA6B5EF78D28", - "D551D929-4E57-4F6B-96DF-986D417D2673", - "42A2ACB5-6DC4-4A22-8B49-1BDE15867327", - "60C7A0E4-3649-4318-B5DD-7FA717F47D9C" + "AE95A64A-26CE-4D5B-94C3-767D9F939D80", + "2E7D6629-DBB1-4EFF-81DB-B1FB6EE63058", + "D8EDAE56-2612-4A96-89B4-AF565798774E", + "F5610668-5932-4EE7-8B12-D6F8B6F1B1EB", + "59A7D851-5BF2-4266-A47A-0E6619F5FD5D" ] }, { "DataType": "datetime", - "Definition": "The ModifiedDate column in the ProductModelProductDescription entity contains timestamps indicating when the record was last updated. The values are stored in a datetime format and typically include both the date and time components. This information is crucial for tracking changes and maintaining data integrity within the entity.", + "Definition": null, "Name": "ModifiedDate", "SampleValues": [ "2007-06-01 00:00:00" @@ -58,23 +58,33 @@ } ], "CompleteEntityRelationshipsGraph": [ - "text2sql-adventure-works.SalesLT.ProductModelProductDescription -> text2sql-adventure-works.SalesLT.ProductModelProductDescription" + "text2sql-adventure-works.SalesLT.ProductModelProductDescription -> text2sql-adventure-works.SalesLT.ProductDescription -> ProductModelProductDescription", + "text2sql-adventure-works.SalesLT.ProductModelProductDescription -> text2sql-adventure-works.SalesLT.ProductModel -> Product" ], "Database": "text2sql-adventure-works", - "Definition": "The ProductModelProductDescription entity represents the relationship between product models and their descriptions within a specific culture or language. It contains information that links product models to their respective descriptions and assigns a specific cultural context, facilitating localization and internationalization of product information. This entity can be used to answer questions about which descriptions are associated with a given product model and how these descriptions vary across different cultures. Additionally, it can provide insights into the most recent modifications made to product descriptions.", + "Definition": null, "Entity": "ProductModelProductDescription", - "EntityName": "Product Model and Description Information", + "EntityName": null, "EntityRelationships": [ { "FQN": "text2sql-adventure-works.SalesLT.ProductModelProductDescription", "ForeignDatabase": "text2sql-adventure-works", "ForeignEntity": "ProductDescription", - "ForeignFQN": "text2sql-adventure-works.SalesLT.ProductModelProductDescription", + "ForeignFQN": "text2sql-adventure-works.SalesLT.ProductDescription", "ForeignKeys": [ { "Column": "ProductDescriptionID", "ForeignColumn": "ProductDescriptionID" - }, + } + ], + "ForeignSchema": "SalesLT" + }, + { + "FQN": "text2sql-adventure-works.SalesLT.ProductModelProductDescription", + "ForeignDatabase": "text2sql-adventure-works", + "ForeignEntity": "ProductModel", + "ForeignFQN": "text2sql-adventure-works.SalesLT.ProductModel", + "ForeignKeys": [ { "Column": "ProductModelID", "ForeignColumn": "ProductModelID" diff --git a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.SalesOrderDetail.json b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.SalesOrderDetail.json index 88f61a7..07d88cc 100644 --- a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.SalesOrderDetail.json +++ b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.SalesOrderDetail.json @@ -2,67 +2,67 @@ "Columns": [ { "DataType": "int", - "Definition": "The SalesOrderID column in the SalesOrderDetail entity contains unique identifier numbers for each sales order. Each value in this column represents a specific sales order and is used to link sales order details to the corresponding sales order. The values are in a numerical format and are likely sequential, ensuring each sales order can be easily referenced and tracked.", + "Definition": null, "Name": "SalesOrderID", "SampleValues": [ - 71815, - 71783, - 71776, - 71816, - 71774 + 71898, + 71831, + 71899, + 71796, + 71946 ] }, { "DataType": "int", - "Definition": "The SalesOrderDetailID column in the SalesOrderDetail entity contains unique identifiers for each sales order detail record. The values in this column are numeric and likely auto-incremented to ensure each entry is distinct. This column is used to uniquely identify and reference individual sales order detail entries within the database. The presence of large numeric values suggests it is used for indexing and linking sales order details to broader sales transactions.", + "Definition": null, "Name": "SalesOrderDetailID", "SampleValues": [ - 113220, - 110694, - 111024, - 110708, - 113234 + 110691, + 113288, + 112940, + 112979, + 111078 ] }, { "DataType": "smallint", - "Definition": "The OrderQty column in the SalesOrderDetail entity contains the quantity of items ordered in a sales transaction. The values in this column represent the number of units of a product that a customer has ordered. The sample values suggest that the column stores integer values indicating different quantities, typically positive whole numbers. This column is essential for tracking the volume of products included in each order.", + "Definition": null, "Name": "OrderQty", "SampleValues": [ - 5, - 25, - 14, - 2, - 15 + 15, + 23, + 16, + 7, + 5 ] }, { "DataType": "int", - "Definition": "The ProductID column in the SalesOrderDetail entity contains unique numerical identifiers for each product associated with a sales order. Each value in this column corresponds to a specific product in the inventory or product catalog. The values are integers and do not follow a specific pattern, indicating they are likely sequential or randomly assigned unique identifiers. This column is used to link sales order details with the corresponding products.", + "Definition": null, "Name": "ProductID", "SampleValues": [ - 999, - 797, - 891, - 876, - 935 + 889, + 780, + 793, + 795, + 974 ] }, { "DataType": "money", - "Definition": "The UnitPrice column in the SalesOrderDetail entity contains the unit prices for items sold, represented as decimal values. These values indicate the cost per individual item in a sales order and are likely recorded in a currency format, including dollar and cent precision. The values are expected to vary significantly depending on the item being sold, as seen by the sample values that range from lower to higher price points.", + "Definition": null, "Name": "UnitPrice", "SampleValues": [ - "34.9250", - "24.2940", - "1376.9940", - "818.7000", - "26.7240" + "602.3460", + "32.9940", + "323.9940", + "149.8740", + "20.2942" ] }, { "DataType": "money", - "Definition": "The UnitPriceDiscount column in the SalesOrderDetail entity contains decimal values that represent the discount applied to the unit price of a product in an order. The values in this column are typically expressed as decimal fractions, where 0.4000 represents a 40% discount, 0.1000 represents a 10% discount, and so on. The absence of a discount is indicated by a value of 0.0000. These values are used to calculate the final price after applying the discount to the original unit price of the product.", + "Definition": null, "Name": "UnitPriceDiscount", "SampleValues": [ "0.4000", @@ -74,31 +74,31 @@ }, { "DataType": "numeric", - "Definition": "The LineTotal column in the SalesOrderDetail entity contains the total monetary amount for each line item in a sales order. The values represent currency amounts with up to six decimal places. Each value is the result of multiplying the unit price of an item by the quantity ordered, including any applicable discounts. This column is used to calculate the total cost for each line within an order.", + "Definition": null, "Name": "LineTotal", "SampleValues": [ - "5102.970000", - "161.970000", "66.428908", - "14.694000", - "2783.988000" + "2041.188000", + "64.788000", + "1427.592000", + "5102.970000" ] }, { "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the SalesOrderDetail entity contains unique identifier values for each row in the form of globally unique identifiers (GUIDs). These values are in the standard UUID/GUID format, which is a 128-bit number used to identify information in computer systems. This ensures that each entry in the SalesOrderDetail table has a distinct and unique reference, helping to maintain data integrity and consistency across the database. The format typically appears as a series of hexadecimal digits separated by hyphens.", + "Definition": null, "Name": "rowguid", "SampleValues": [ - "3C97F6BD-91EC-4C84-9636-E088B415EE51", - "DCF6C95D-A0E4-4272-BFF8-6B06B7F9574F", - "720691A3-F983-4C72-BCA1-BAABF1D24914", - "9D987E75-E96D-4903-BE36-0CE579A6F47B", - "24D90386-E9B3-40C4-8D04-EF0E2ACD30BB" + "09E7A695-3260-483E-91F8-A980441B9DD6", + "C9FCF326-D1B9-44A4-B29D-2D1888F6B0FD", + "5CA4F84A-BAFE-485C-B7AD-897F741F76CE", + "E11CF974-4DCC-4A5C-98C3-2DE92DD2A15D", + "E7C11996-8D83-4515-BFBD-7E380CDB6252" ] }, { "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesOrderDetail entity contains the date and time when a particular sales order detail record was last modified. The values are stored in a datetime format with the pattern 'YYYY-MM-DD HH:MI:SS'. This column is used to track changes and updates to the sales order details, ensuring that any modifications are accurately recorded with a timestamp.", + "Definition": null, "Name": "ModifiedDate", "SampleValues": [ "2008-06-01 00:00:00" @@ -106,23 +106,37 @@ } ], "CompleteEntityRelationshipsGraph": [ - "text2sql-adventure-works.SalesLT.SalesOrderDetail -> text2sql-adventure-works.SalesLT.SalesOrderDetail" + "text2sql-adventure-works.SalesLT.SalesOrderDetail -> text2sql-adventure-works.SalesLT.Product -> text2sql-adventure-works.SalesLT.ProductCategory -> Product", + "text2sql-adventure-works.SalesLT.SalesOrderDetail -> text2sql-adventure-works.SalesLT.Product -> text2sql-adventure-works.SalesLT.ProductModel -> Product", + "text2sql-adventure-works.SalesLT.SalesOrderDetail -> text2sql-adventure-works.SalesLT.Product -> text2sql-adventure-works.SalesLT.ProductModel -> text2sql-adventure-works.SalesLT.ProductModelProductDescription -> text2sql-adventure-works.SalesLT.ProductDescription -> ProductModelProductDescription", + "text2sql-adventure-works.SalesLT.SalesOrderDetail -> text2sql-adventure-works.SalesLT.SalesOrderHeader -> SalesOrderDetail", + "text2sql-adventure-works.SalesLT.SalesOrderDetail -> text2sql-adventure-works.SalesLT.SalesOrderHeader -> text2sql-adventure-works.SalesLT.Address -> CustomerAddress", + "text2sql-adventure-works.SalesLT.SalesOrderDetail -> text2sql-adventure-works.SalesLT.SalesOrderHeader -> text2sql-adventure-works.SalesLT.Customer -> CustomerAddress" ], "Database": "text2sql-adventure-works", - "Definition": "The SalesOrderDetail entity stores detailed information about individual items within a specific sales order. It includes data on the quantity ordered, unit price, any applicable discounts, and the total price for each line item in the order. This entity is crucial for analyzing order compositions, calculating total sales, and understanding product-specific sales performance. Questions about individual items within orders, price adjustments, and modifications to the sales details over time can be answered using this entity.", + "Definition": null, "Entity": "SalesOrderDetail", - "EntityName": "Sales Order Details", + "EntityName": null, "EntityRelationships": [ { "FQN": "text2sql-adventure-works.SalesLT.SalesOrderDetail", "ForeignDatabase": "text2sql-adventure-works", "ForeignEntity": "Product", - "ForeignFQN": "text2sql-adventure-works.SalesLT.SalesOrderDetail", + "ForeignFQN": "text2sql-adventure-works.SalesLT.Product", "ForeignKeys": [ { "Column": "ProductID", "ForeignColumn": "ProductID" - }, + } + ], + "ForeignSchema": "SalesLT" + }, + { + "FQN": "text2sql-adventure-works.SalesLT.SalesOrderDetail", + "ForeignDatabase": "text2sql-adventure-works", + "ForeignEntity": "SalesOrderHeader", + "ForeignFQN": "text2sql-adventure-works.SalesLT.SalesOrderHeader", + "ForeignKeys": [ { "Column": "SalesOrderID", "ForeignColumn": "SalesOrderID" diff --git a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.SalesOrderHeader.json b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.SalesOrderHeader.json index dacb3be..c625a17 100644 --- a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.SalesOrderHeader.json +++ b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.SalesOrderHeader.json @@ -2,19 +2,19 @@ "Columns": [ { "DataType": "int", - "Definition": "The SalesOrderID column in the SalesOrderHeader entity contains unique identifiers for each sales order. The values are integers and typically follow a sequential pattern, which helps in distinguishing and referencing individual orders within the sales system. Each SalesOrderID is unique to a specific sales transaction, ensuring that no two orders share the same identifier.", + "Definition": null, "Name": "SalesOrderID", "SampleValues": [ - 71923, 71946, - 71902, - 71774, - 71797 + 71831, + 71899, + 71845, + 71846 ] }, { "DataType": "tinyint", - "Definition": "The RevisionNumber column in the SalesOrderHeader entity contains numeric values indicating the number of times a sales order has been revised. The values represent the current revision level of the sales order, with higher numbers indicating more revisions. The column typically contains whole numbers and is used for tracking changes and updates made to sales orders over time.", + "Definition": null, "Name": "RevisionNumber", "SampleValues": [ 2 @@ -22,7 +22,7 @@ }, { "DataType": "datetime", - "Definition": "The OrderDate column in the SalesOrderHeader entity contains the date and time when an order was placed. The values in this column are in the format 'YYYY-MM-DD HH:MM:SS', indicating both the date and the specific time of the order. This information is essential for tracking the timing of sales transactions, managing inventory, and analyzing sales patterns over time.", + "Definition": null, "Name": "OrderDate", "SampleValues": [ "2008-06-01 00:00:00" @@ -30,7 +30,7 @@ }, { "DataType": "datetime", - "Definition": "The DueDate column in the SalesOrderHeader entity contains the dates and times by which sales orders are expected to be completed or fulfilled. The values in this column follow the standard datetime format (YYYY-MM-DD HH:MM:SS), representing the due date and time for each sales order. This information is crucial for tracking order deadlines and ensuring timely delivery of products or services.", + "Definition": null, "Name": "DueDate", "SampleValues": [ "2008-06-13 00:00:00" @@ -38,7 +38,7 @@ }, { "DataType": "datetime", - "Definition": "The ShipDate column in the SalesOrderHeader entity contains the dates and times when orders were shipped. The values follow the standard datetime format 'YYYY-MM-DD HH:MI:SS'. This column is used to track the exact shipment date and time of each sales order, providing critical information for order processing and delivery tracking.", + "Definition": null, "Name": "ShipDate", "SampleValues": [ "2008-06-08 00:00:00" @@ -46,7 +46,7 @@ }, { "DataType": "tinyint", - "Definition": "The Status column in the SalesOrderHeader entity represents the current state or stage of a sales order. The values in this column are numeric codes that likely correspond to different statuses such as pending, approved, shipped, or completed. The specific numeric values can be mapped to human-readable status descriptions in the business logic of the application. The value '5' indicates one of these status stages.", + "Definition": null, "Name": "Status", "SampleValues": [ 5 @@ -54,7 +54,7 @@ }, { "DataType": "bit", - "Definition": "The OnlineOrderFlag column in the SalesOrderHeader entity indicates whether a sales order was placed online. The values in this column are boolean, with 'True' representing orders placed online and 'False' representing orders placed through other sales channels. This column helps to differentiate between online and offline sales orders.", + "Definition": null, "Name": "OnlineOrderFlag", "SampleValues": [ false @@ -62,79 +62,79 @@ }, { "DataType": "nvarchar", - "Definition": "The SalesOrderNumber column in the SalesOrderHeader entity contains unique identifiers for each sales order. The values follow a specific alphanumeric format starting with 'SO' followed by a series of numbers. This pattern helps in easily distinguishing and referencing individual sales orders within the database.", + "Definition": null, "Name": "SalesOrderNumber", "SampleValues": [ - "SO71797", - "SO71784", - "SO71899", - "SO71776", - "SO71917" + "SO71938", + "SO71863", + "SO71946", + "SO71935", + "SO71831" ] }, { "DataType": "nvarchar", - "Definition": "The PurchaseOrderNumber column in the SalesOrderHeader entity contains unique identifiers for purchase orders. The values typically start with the prefix 'PO' followed by a series of digits, varying in length. These identifiers are used to track and reference specific purchase orders within the sales order system. The format suggests an alphanumeric code that ensures each purchase order can be distinctly recognized.", + "Definition": null, "Name": "PurchaseOrderNumber", "SampleValues": [ - "PO16153112278", - "PO5713190501", - "PO174173096", - "PO29111718", - "PO7946145876" + "PO16501134889", + "PO19604173239", + "PO13050111529", + "PO19372114749", + "PO16153112278" ] }, { "DataType": "nvarchar", - "Definition": "The AccountNumber column in the SalesOrderHeader entity contains unique alphanumeric identifiers for customer accounts involved in sales transactions. Each account number follows a specific format with a pattern of two digits, a dash, four digits, another dash, and a six-digit sequence. This structured format helps in organizing and referencing customer accounts systematically within the sales database.", + "Definition": null, "Name": "AccountNumber", "SampleValues": [ - "10-4020-000268", - "10-4020-000106", - "10-4020-000420", + "10-4020-000024", + "10-4020-000438", "10-4020-000052", - "10-4020-000276" + "10-4020-000277", + "10-4020-000186" ] }, { "DataType": "int", - "Definition": "The CustomerID column in the SalesOrderHeader entity contains unique numerical identifiers assigned to customers in the database. These identifiers are used to link sales orders to specific customers. Each CustomerID is a distinct integer value representing a different customer.", + "Definition": null, "Name": "CustomerID", "SampleValues": [ - 30027, - 29938, - 29929, - 29932, - 29741 + 29847, + 29660, + 29736, + 29975, + 29531 ] }, { "DataType": "int", - "Definition": "The ShipToAddressID column in the SalesOrderHeader entity contains unique identifiers for shipping addresses associated with each sales order. The values in this column are numeric and represent specific address records in the related address table. Each identifier is used to link a sales order to the address where the order should be delivered.", + "Definition": null, "Name": "ShipToAddressID", "SampleValues": [ - 989, - 637, - 1034, 1092, - 993 + 1102, + 635, + 659, + 1019 ] }, { "DataType": "int", - "Definition": "The BillToAddressID column in the SalesOrderHeader entity contains a list of unique identifiers for the billing addresses associated with sales orders. These values are numeric and are used to link each sales order to a specific billing address in the database. The identifiers ensure accurate and efficient referencing of billing address details for each transaction.", + "Definition": null, "Name": "BillToAddressID", "SampleValues": [ - 1058, - 643, - 1035, - 640, - 642 + 635, + 669, + 1019, + 1061, + 659 ] }, { "DataType": "nvarchar", - "Definition": "The ShipMethod column in the SalesOrderHeader entity contains the names of different shipping methods used for delivering orders. The values are descriptive labels indicating the type of shipping service, such as specific carriers or shipping options. The sample value 'CARGO TRANSPORT 5' suggests a format that includes the name of the carrier followed by a service level or specific route number. The column is likely used to identify and categorize how each order is shipped.", + "Definition": null, "Name": "ShipMethod", "SampleValues": [ "CARGO TRANSPORT 5" @@ -142,79 +142,79 @@ }, { "DataType": "varchar", - "Definition": "The CreditCardApprovalCode column in the SalesOrderHeader entity contains the approval code provided by the credit card company when a sales order is processed. This code is typically a string of alphanumeric characters that validates the authorization of the credit card transaction. It is used to verify that the payment has been approved and is required for completing the sales order. The data in this column ensures that only authorized transactions are recorded and processed in the system.", + "Definition": null, "Name": "CreditCardApprovalCode", "SampleValues": [] }, { "DataType": "money", - "Definition": "The SubTotal column in the SalesOrderHeader entity contains the total amount of sales for a particular order before including tax, shipping, or any other additional charges. The values in this column are represented as decimal numbers and can vary widely, reflecting the total sales amount summed up from individual items in the order. This column is key for financial calculations and reports, providing a clear view of the core sales figures.", + "Definition": null, "Name": "SubTotal", "SampleValues": [ + "880.3484", "3398.1659", - "6634.2961", - "39785.3304", + "2453.7645", "78.8100", - "602.1946" + "1141.5782" ] }, { "DataType": "money", - "Definition": "The TaxAmt column in the SalesOrderHeader entity contains the tax amounts applied to sales orders. The values in this column are represented as floating-point numbers indicating the total tax in monetary units for each sales order. The tax amounts vary widely, reflecting the differing tax rates and order totals applied to individual sales transactions.", + "Definition": null, "Name": "TaxAmt", "SampleValues": [ - "84.7448", - "530.7437", - "1014.8712", - "3073.4952", - "4610.7707" + "1105.8967", + "6708.6741", + "161.3073", + "5118.4791", + "8.5233" ] }, { "DataType": "money", - "Definition": "The Freight column in the SalesOrderHeader entity contains the shipping costs associated with each sales order. The values in this column are represented as decimal numbers, indicating the cost of freight in monetary units. The values can vary significantly, suggesting that the shipping costs are dependent on factors such as the size, weight, or destination of the shipment. This column is crucial for understanding the overall expenses related to shipping in sales transactions.", + "Definition": null, "Name": "Freight", "SampleValues": [ - "61.3441", - "1040.5513", - "6.1685", - "26.4828", - "894.3803" + "74.5198", + "1440.8659", + "2220.3216", + "2096.4607", + "1851.4702" ] }, { "DataType": "money", - "Definition": "The TotalDue column in the SalesOrderHeader entity contains the total amount due for a sales order. The values in this column are represented in decimal format, indicating the precise monetary amount associated with each order. These values can range significantly, reflecting the varying sizes and types of orders processed. This column is essential for financial calculations and reporting within the sales and accounting departments.", + "Definition": null, "Name": "TotalDue", "SampleValues": [ - "3293.7761", - "117.7276", - "3754.9733", - "45992.3665", - "119960.8240" + "86222.8072", + "2669.3183", + "42452.6519", + "14017.9083", + "39531.6085" ] }, { "DataType": "nvarchar", - "Definition": "The Comment column in the SalesOrderHeader entity contains textual notes or remarks related to a specific sales order. These comments may include special instructions, customer requests, or any other additional information pertinent to the sales order. The content in this column is typically entered by sales or customer service representatives to provide context or clarification regarding the order. This column helps in enhancing communication and understanding of the sales order details.", + "Definition": null, "Name": "Comment", "SampleValues": [] }, { "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the SalesOrderHeader entity contains unique identifier values in the form of Globally Unique Identifiers (GUIDs). These GUIDs are represented in a standard format of 32 hexadecimal digits, displayed in five groups separated by hyphens in an 8-4-4-4-12 format. The values are used to uniquely identify each row in the SalesOrderHeader table, ensuring there are no duplicate entries. This column is commonly used for replication and ensuring consistency across distributed databases.", + "Definition": null, "Name": "rowguid", "SampleValues": [ - "119DB56A-A97E-414D-B41C-64886FC50AB7", - "8A3448C5-E677-4158-A29B-DD33069BE0B0", - "A36EE74A-CF0D-4024-A1CE-4EAFFD1F85F0", - "3ED03B56-A4BF-4872-9471-BC6C7893EAB7", + "29743C1B-D3AF-4CFE-BD2E-6DE436E3398F", + "5EF091E1-A0AF-437D-85ED-0B557C7923F7", + "917EF5BA-F32D-4563-8588-66DB0BCDC846", + "137850D6-EFDF-4DE1-920F-5757A86CDAAF", "6E903EA3-1B9E-4232-94C3-81C15669F830" ] }, { "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesOrderHeader entity contains the date and time when a particular sales order record was last modified. The values in this column follow the datetime format 'YYYY-MM-DD HH:MM:SS'. This information is useful for tracking changes and updates made to sales orders over time.", + "Definition": null, "Name": "ModifiedDate", "SampleValues": [ "2008-06-08 00:00:00" @@ -222,35 +222,51 @@ } ], "CompleteEntityRelationshipsGraph": [ - "text2sql-adventure-works.SalesLT.SalesOrderHeader -> text2sql-adventure-works.SalesLT.SalesOrderHeader" + "text2sql-adventure-works.SalesLT.SalesOrderHeader -> SalesOrderDetail", + "text2sql-adventure-works.SalesLT.SalesOrderHeader -> text2sql-adventure-works.SalesLT.Address -> CustomerAddress", + "text2sql-adventure-works.SalesLT.SalesOrderHeader -> text2sql-adventure-works.SalesLT.Customer -> CustomerAddress" ], "Database": "text2sql-adventure-works", - "Definition": "The SalesOrderHeader entity contains information about individual sales orders, including key details such as the order dates (OrderDate, DueDate, ShipDate), status of the order, and the associated sales order identification numbers. It also includes customer-related information (CustomerID, AccountNumber), shipping and billing addresses, and payment details. This entity can be used to answer questions regarding the timing, status, and financial aspects of sales orders, as well as to track orders made online versus offline, and to identify customer purchasing behavior.", + "Definition": null, "Entity": "SalesOrderHeader", - "EntityName": "Sales Order Details", + "EntityName": null, "EntityRelationships": [ + { + "FQN": "text2sql-adventure-works.SalesLT.SalesOrderHeader", + "ForeignDatabase": "text2sql-adventure-works", + "ForeignEntity": "SalesOrderDetail", + "ForeignFQN": "text2sql-adventure-works.SalesLT.SalesOrderDetail", + "ForeignKeys": [ + { + "Column": "SalesOrderID", + "ForeignColumn": "SalesOrderID" + } + ], + "ForeignSchema": "SalesLT" + }, { "FQN": "text2sql-adventure-works.SalesLT.SalesOrderHeader", "ForeignDatabase": "text2sql-adventure-works", "ForeignEntity": "Address", - "ForeignFQN": "text2sql-adventure-works.SalesLT.SalesOrderHeader", + "ForeignFQN": "text2sql-adventure-works.SalesLT.Address", "ForeignKeys": [ { "Column": "BillToAddressID", "ForeignColumn": "AddressID" }, - { - "Column": "AddressID", - "ForeignColumn": "BillToAddressID" - }, { "Column": "ShipToAddressID", "ForeignColumn": "AddressID" - }, - { - "Column": "AddressID", - "ForeignColumn": "ShipToAddressID" - }, + } + ], + "ForeignSchema": "SalesLT" + }, + { + "FQN": "text2sql-adventure-works.SalesLT.SalesOrderHeader", + "ForeignDatabase": "text2sql-adventure-works", + "ForeignEntity": "Customer", + "ForeignFQN": "text2sql-adventure-works.SalesLT.Customer", + "ForeignKeys": [ { "Column": "CustomerID", "ForeignColumn": "CustomerID" diff --git a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.vGetAllCategories.json b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.vGetAllCategories.json index e16bf7b..be1deb6 100644 --- a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.vGetAllCategories.json +++ b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.vGetAllCategories.json @@ -2,7 +2,7 @@ "Columns": [ { "DataType": "nvarchar", - "Definition": "The ParentProductCategoryName column contains the names of the main product categories in the product hierarchy. Each value represents a broad category under which more specific product categories are grouped. This column helps in organizing products into high-level classifications such as Components, Clothing, Bikes, and Accessories. These names are used to distinguish major sections of the product inventory for analysis and reporting purposes.", + "Definition": null, "Name": "ParentProductCategoryName", "SampleValues": [ "Components", @@ -13,34 +13,34 @@ }, { "DataType": "nvarchar", - "Definition": "The ProductCategoryName column in the vGetAllCategories entity contains the names of different product categories available. These names are typically descriptive labels for various types of products, such as \"Mountain Frames\" or \"Helmets\". This column is used to categorize products into specific groups based on their type or intended use. The values are in plain text and provide a clear indication of the kind of products included within each category.", + "Definition": null, "Name": "ProductCategoryName", "SampleValues": [ - "Mountain Frames", - "Road Frames", - "Gloves", - "Caps", - "Helmets" + "Cranksets", + "Handlebars", + "Cleaners", + "Tights", + "Bib-Shorts" ] }, { "DataType": "int", - "Definition": "The ProductCategoryID column in the vGetAllCategories entity contains numeric identifiers for product categories. Each identifier is unique to a specific product category within the database. The values follow a numerical pattern, typically as positive integers, used to differentiate between various categories of products. These identifiers are essential for categorization and query operations related to product information.", + "Definition": null, "Name": "ProductCategoryID", "SampleValues": [ - 10, - 28, - 36, - 32, - 19 + 13, + 14, + 8, + 40, + 36 ] } ], "CompleteEntityRelationshipsGraph": [], "Database": "text2sql-adventure-works", - "Definition": "The vGetAllCategories entity provides a hierarchical view of product categories, detailing both parent and sub-category relationships within a product catalog. It includes information on the names of the parent product categories, the names and IDs of the sub-categories. This entity can be used to answer questions regarding the structure and organization of product categories, such as identifying all sub-categories under a specific parent category or retrieving the complete category hierarchy for products.", + "Definition": null, "Entity": "vGetAllCategories", - "EntityName": "Category Information", + "EntityName": null, "EntityRelationships": [], "FQN": "text2sql-adventure-works.SalesLT.vGetAllCategories", "Schema": "SalesLT" diff --git a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.vProductAndDescription.json b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.vProductAndDescription.json index dc9deec..07354de 100644 --- a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.vProductAndDescription.json +++ b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.vProductAndDescription.json @@ -2,70 +2,70 @@ "Columns": [ { "DataType": "int", - "Definition": "The ProductID column contains unique numeric identifiers for products. Each value in this column represents a distinct product within the vProductAndDescription entity. The values are integers and do not follow a specific sequential order. This column is used to uniquely distinguish one product from another in the dataset.", + "Definition": null, "Name": "ProductID", "SampleValues": [ - 966, - 813, - 716, - 890, - 848 + 981, + 923, + 971, + 771, + 724 ] }, { "DataType": "nvarchar", - "Definition": "The Name column in the vProductAndDescription entity contains the product names and descriptions in a retail or inventory database. The values include various product categories such as apparel, accessories, and bicycle components. The naming convention often includes the item type, color, and size. This column helps identify and differentiate products within the inventory by providing a concise, descriptive name for each item.", + "Definition": null, "Name": "Name", "SampleValues": [ - "Racing Socks, M", - "Road-650 Black, 48", - "HL Road Frame - Black, 62", - "Long-Sleeve Logo Jersey, L", - "ML Bottom Bracket" + "LL Road Front Wheel", + "HL Road Frame - Red, 48", + "ML Road Frame - Red, 52", + "Mountain-300 Black, 48", + "ML Mountain Rear Wheel" ] }, { "DataType": "nvarchar", - "Definition": "The ProductModel column in the vProductAndDescription entity contains the names of various product models. The values typically include a series of letters followed by descriptive terms related to specific parts of a product, such as \"Seat/Saddle,\" \"Frame,\" \"Rear Wheel,\" and \"Handlebars.\" The prefixes like ML, HL, and LL seem to indicate a categorization or coding system pertaining to the product model types. These descriptive product model names are used for identification and differentiation of the various components and configurations within the product catalog.", + "Definition": null, "Name": "ProductModel", "SampleValues": [ - "ML Mountain Seat/Saddle 2", - "HL Mountain Frame", - "LL Mountain Rear Wheel", - "HL Mountain Handlebars", - "LL Touring Seat/Saddle" + "Road-150", + "HL Road Rear Wheel", + "Road-650", + "ML Mountain Frame-W", + "Touring-1000" ] }, { "DataType": "nchar", - "Definition": "The Culture column in the vProductAndDescription entity contains language and locale codes that are used to define the cultural context for product descriptions. These codes typically follow the IETF language tag format, which can include a language subtag followed by a region subtag. Examples from the provided values include 'zh-cht' for Chinese (Traditional), 'ar' for Arabic, 'th' for Thai, 'he' for Hebrew, and 'en' for English. This column helps in identifying the appropriate language and locale for displaying product information to users from different cultural backgrounds.", + "Definition": null, "Name": "Culture", "SampleValues": [ + "fr ", + "he ", "zh-cht", - "ar ", "th ", - "he ", "en " ] }, { "DataType": "nvarchar", - "Definition": "The Description column in the vProductAndDescription entity contains detailed textual descriptions of various products. These descriptions are multilingual, featuring content in languages such as Hebrew, Arabic, Chinese, French, and English. The descriptions often include details about the materials, design, and performance features of the products, providing comprehensive information aimed at potential customers. The content reflects varied levels of technical detail and marketing language to describe product attributes and benefits.", + "Definition": null, "Name": "Description", "SampleValues": [ - "\u05db\u05d9\u05e1\u05d5\u05d9\u05d9\u05dd \u05de\u05e1\u05d2\u05e1\u05d5\u05d2\u05ea \u05d0\u05dc\u05d5\u05de\u05d9\u05e0\u05d9\u05d5\u05dd \u05d5\u05e6\u05d9\u05e8 \u05d7\u05dc\u05d5\u05dc.", - "\u064a\u0648\u0641\u0631 \u0647\u064a\u0643\u0644 \u0627\u0644\u0623\u0644\u0648\u0645\u0646\u064a\u0648\u0645 \u0633\u0645\u064a\u0643 \u0627\u0644\u0623\u0637\u0631\u0627\u0641 \u062e\u0641\u064a\u0641 \u0627\u0644\u0648\u0632\u0646 \u0648\u0636\u0639 \u0642\u064a\u0627\u062f\u0629 \u0623\u0643\u062b\u0631 \u0627\u0646\u062a\u0635\u0627\u0628\u064b\u0627 \u0623\u062b\u0646\u0627\u0621 \u0627\u0644\u0642\u064a\u0627\u0645 \u0628\u0631\u062d\u0644\u0627\u062a \u0641\u064a \u0623\u0631\u062c\u0627\u0621 \u0627\u0644\u0628\u0644\u062f\u0629. \u064a\u0648\u0641\u0631 \u062a\u0635\u0645\u064a\u0645\u0646\u0627 \u0627\u0644\u0627\u0628\u062a\u0643\u0627\u0631\u064a \u0623\u0639\u0644\u0649 \u062f\u0631\u062c\u0627\u062a \u0627\u0644\u0631\u0627\u062d\u0629.", - "\u9002\u7528\u4e8e\u4e00\u822c\u548c\u9ad8\u7ea7\u9a91\u4e58\u8005\u7684\u5907\u7528\u5c71\u5730\u8f66\u8f6e\u3002", - "Notre cadre en aluminium plus l\u00e9ger et de qualit\u00e9 sup\u00e9rieure fabriqu\u00e9 \u00e0 partir du tout dernier alliage\u00a0; cadre soud\u00e9 et trait\u00e9 \u00e0 chaud pour une meilleure r\u00e9sistance. Le r\u00e9sultat d'une conception innovante pour un confort et des performances maximum.", - "High-performance mountain replacement wheel." + "Stout design absorbs shock and offers more precise steering.", + "\u9002\u7528\u4e8e\u771f\u6b63\u7684\u8d8a\u91ce\u8f66\u8ff7\u3002\u6b64\u81ea\u884c\u8f66\u6781\u5176\u8010\u7528\uff0c\u65e0\u8bba\u8eab\u5904\u4f55\u5730\uff0c\u5730\u5f62\u5982\u4f55\u590d\u6742\uff0c\u4e00\u5207\u5747\u5728\u638c\u63a7\u4e4b\u4e2d\uff0c\u771f\u6b63\u7269\u8d85\u6240\u503c!", + "Simple and light-weight. Emergency patches stored in handle.", + "\u4e2d\u6027\u957f\u8896\u5e26\u6709 AWC \u5fbd\u6807\u7684\u5fae\u7ea4\u7ef4\u8d5b\u8f66\u7528\u8fd0\u52a8\u886b", + "\u591a\u7528\u9014 70 \u76ce\u53f8\u6c34\u888b\u7684\u7a7a\u95f4\u66f4\u5927\uff0c\u6613\u4e8e\u88c5\u586b\u5e76\u914d\u6709\u8170\u5e26\u3002" ] } ], "CompleteEntityRelationshipsGraph": [], "Database": "text2sql-adventure-works", - "Definition": "The vProductAndDescription entity provides a comprehensive view of products along with their descriptions in various cultures. It includes information on product IDs, names, associated product models, and descriptions tailored to different cultural contexts. This entity is useful for answering questions related to product identification, multilingual product information, and the relationship between products and their models. It is particularly helpful for understanding how products are described across different market segments.", + "Definition": null, "Entity": "vProductAndDescription", - "EntityName": "Product Information and Descriptions", + "EntityName": null, "EntityRelationships": [], "FQN": "text2sql-adventure-works.SalesLT.vProductAndDescription", "Schema": "SalesLT" diff --git a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.vProductModelCatalogDescription.json b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.vProductModelCatalogDescription.json index 13db913..f3258f1 100644 --- a/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.vProductModelCatalogDescription.json +++ b/text_2_sql/data_dictionary/generated_samples/schema_store/text2sql-adventure-works.SalesLT.vProductModelCatalogDescription.json @@ -2,43 +2,43 @@ "Columns": [ { "DataType": "int", - "Definition": "The ProductModelID column in the vProductModelCatalogDescription entity contains unique numerical identifiers assigned to different product models. Each integer value corresponds to a specific product model within the catalog, ensuring distinct identification and association with descriptive information for each model. The values in this column are used to link and reference product models within the broader product database system.", + "Definition": null, "Name": "ProductModelID", "SampleValues": [ - 28, + 25, + 23, 34, - 35, 19, - 23 + 28 ] }, { "DataType": "nvarchar", - "Definition": "The Name column in the vProductModelCatalogDescription entity contains the names of different product models. The values typically follow a pattern consisting of a type descriptor followed by a numeric identifier, which indicates different models or versions of the products. The type descriptors may include terms like \"Road,\" \"Mountain,\" and \"Touring,\" while the numeric part differentiates the specific products within those categories. This column is used to uniquely identify and describe each product model in the catalog.", + "Definition": null, "Name": "Name", "SampleValues": [ + "Touring-2000", + "Touring-1000", "Road-450", "Mountain-100", - "Mountain-500", - "Road-150", - "Touring-2000" + "Road-150" ] }, { "DataType": "nvarchar", - "Definition": "The Summary column in the vProductModelCatalogDescription entity contains brief descriptions of various bicycle models. Each summary highlights key features, such as comfort, stability, design, and performance. Descriptions may include details about materials, construction, gear range, handling, and suitability for different types of riding (e.g., competition, touring, or multi-sport). The summaries are concise and emphasize the unique selling points of each bike model, written in a promotional and appealing manner.", + "Definition": null, "Name": "Summary", "SampleValues": [ + "A true multi-sport bike that offers streamlined riding and a revolutionary design. Aerodynamic design lets you ride with the pros, and the gearing will conquer hilly roads. ", "The plush custom saddle keeps you riding all day, and there's plenty of space to add panniers and bike bags to the newly-redesigned carrier.This bike has great stability when fully-loaded. ", + "Suitable for any type of riding, on or off-road.Fits any budget. Smooth-shifting with a comfortable ride. ", "Travel in style and comfort. Designed for maximum comfort and safety.Wide gear range takes on all hills. High-tech aluminum alloy construction provides durability without added weight. ", - "Our top-of-the-line competition mountain bike. Performance-enhancing options include the innovative HL Frame,super-smooth front suspension, and traction for all terrain. ", - "This bike is ridden by race winners. Developed with theAdventure Works Cycles professional race team, it has a extremely lightheat-treated aluminum frame, and steering that allows precision control. ", - "A true multi-sport bike that offers streamlined riding and a revolutionary design. Aerodynamic design lets you ride with the pros, and the gearing will conquer hilly roads. " + "This bike is ridden by race winners. Developed with theAdventure Works Cycles professional race team, it has a extremely lightheat-treated aluminum frame, and steering that allows precision control. " ] }, { "DataType": "nvarchar", - "Definition": "The Manufacturer column in the vProductModelCatalogDescription entity contains the names of the companies that produce or assemble the products listed in the catalog. Given the sample value \"AdventureWorks,\" it is indicative of manufacturer names likely being proper nouns and possibly representing specific brands or corporate entities. The data in this column helps identify the source or producer of each product in the catalog.", + "Definition": null, "Name": "Manufacturer", "SampleValues": [ "AdventureWorks" @@ -46,7 +46,7 @@ }, { "DataType": "nvarchar", - "Definition": "The Copyright column in the vProductModelCatalogDescription entity contains the copyright year for the product model descriptions. The values in this column are formatted as four-digit years, such as 2002. This column indicates the year the copyright was registered or last updated.", + "Definition": null, "Name": "Copyright", "SampleValues": [ "2002" @@ -54,7 +54,7 @@ }, { "DataType": "nvarchar", - "Definition": "The ProductURL column in the vProductModelCatalogDescription entity contains the URLs of product pages listed on the Adventure Works website. The URLs follow a common format where the protocol is HTTP and the domain is www.Adventure-works.com. The purpose of this column is to provide direct links to product information and descriptions available online.", + "Definition": null, "Name": "ProductURL", "SampleValues": [ "HTTP://www.Adventure-works.com" @@ -62,7 +62,7 @@ }, { "DataType": "nvarchar", - "Definition": "The WarrantyPeriod column in the vProductModelCatalogDescription entity contains information on the duration of warranty coverage for different products. The values typically follow a pattern indicating the number of years of warranty, such as \"4 years,\" \"3 years,\" or \"1 year.\" This column helps to understand the length of time for which the product is covered under warranty from the date of purchase.", + "Definition": null, "Name": "WarrantyPeriod", "SampleValues": [ "4 years", @@ -72,7 +72,7 @@ }, { "DataType": "nvarchar", - "Definition": "The WarrantyDescription column in the vProductModelCatalogDescription entity contains descriptions of the warranty coverage provided for the products. This column includes details on what aspects of the products are covered under the warranty, such as parts, labor, or both. The descriptions can vary to cover different aspects of the warranty, ensuring customers understand the extent of protection offered for the products.", + "Definition": null, "Name": "WarrantyDescription", "SampleValues": [ "parts and labor" @@ -80,7 +80,7 @@ }, { "DataType": "nvarchar", - "Definition": "The NoOfYears column in the vProductModelCatalogDescription entity contains the duration in years that a product model has been available or relevant in the catalog. The values are represented as a number followed by the word \"years,\" indicating the total number of years. This column helps provide insight into the longevity and established presence of a product model in the catalog.", + "Definition": null, "Name": "NoOfYears", "SampleValues": [ "7 years", @@ -91,7 +91,7 @@ }, { "DataType": "nvarchar", - "Definition": "The MaintenanceDescription column in the vProductModelCatalogDescription entity contains descriptive text about the availability and options for maintenance contracts for products. The descriptions typically mention the maintenance services offered, where they can be procured, such as through dealers or retail stores linked to AdventureWorks. This column helps provide after-sales service information to customers in a detailed manner.", + "Definition": null, "Name": "MaintenanceDescription", "SampleValues": [ "maintenance contract available through your dealer or any AdventureWorks retail store.", @@ -101,7 +101,7 @@ }, { "DataType": "nvarchar", - "Definition": "The Wheel column in the vProductModelCatalogDescription entity contains descriptions of different types of bicycle wheels. These descriptions highlight features such as the material of the rims and spokes, durability, performance, and suitability for various riders. The descriptions provide details that emphasize the quality and specific attributes of the wheels, indicating their intended use and benefits.", + "Definition": null, "Name": "Wheel", "SampleValues": [ "Strong wheels with double-walled rims.", @@ -113,19 +113,19 @@ }, { "DataType": "nvarchar", - "Definition": "The Saddle column in the vProductModelCatalogDescription entity contains descriptive text related to the features and benefits of bicycle saddles. The descriptions emphasize comfort, durability, and design aspects such as material, shape, and special features to enhance the riding experience. These descriptions provide detailed information to help potential buyers understand the unique selling points of each saddle model.", + "Definition": null, "Name": "Saddle", "SampleValues": [ - "Lightweight kevlar racing saddle.", - "Cut-out shell for a more comfortable ride.", "Anatomic design and made from durable leather for a full-day of riding in comfort.", + "Cut-out shell for a more comfortable ride.", + "Lightweight kevlar racing saddle.", "Comfortable saddle with bump absorping rubber bumpers.", - "New design relieves pressure for long rides." + "Made from synthetic leather and features gel padding for increased comfort." ] }, { "DataType": "nvarchar", - "Definition": "The Pedal column in the vProductModelCatalogDescription entity contains textual descriptions of bicycle pedals. These descriptions highlight features and benefits of the pedals, such as adjustable tension, expanded platforms, and stability for all-day riding. The descriptions are typically detailed and focus on the functionality and advantages of each type of pedal. The text is primarily aimed at informing potential customers about the product specifications and benefits.", + "Definition": null, "Name": "Pedal", "SampleValues": [ "Top-of-the-line clipless pedals with adjustable tension.", @@ -135,7 +135,7 @@ }, { "DataType": "nvarchar", - "Definition": "The BikeFrame column in the vProductModelCatalogDescription entity contains descriptions of bike frames, detailing the materials, construction methods, and design features. The descriptions often emphasize the use of aluminum or aluminum alloy and highlight qualities such as strength, light weight, and innovative design. They may also include information on manufacturing processes like welding and heat treatment, as well as specific attributes intended to enhance performance and comfort.", + "Definition": null, "Name": "BikeFrame", "SampleValues": [ "The aluminum frame is custom-shaped for both good looks and strength;it will withstand the most rigorous challenges of daily riding.", @@ -147,7 +147,7 @@ }, { "DataType": "nvarchar", - "Definition": "The Crankset column in the vProductModelCatalogDescription entity contains textual descriptions of the crankset features for different bike models. These descriptions highlight specific attributes of the crankset, such as material, strength, performance, and other notable qualities. The descriptions may vary in length and detail, emphasizing aspects like rigidity, material composition (e.g., aluminum), and performance capabilities such as shifting quality. This column provides important marketing and technical information about the crankset component of the bike models.", + "Definition": null, "Name": "Crankset", "SampleValues": [ " Triple crankset; alumunim crank arm; flawless shifting. ", @@ -157,7 +157,7 @@ }, { "DataType": "nvarchar", - "Definition": "The PictureAngle column in the vProductModelCatalogDescription entity contains descriptions of the angle from which a product picture is taken. This column likely includes values that describe perspectives such as 'front', 'side', 'back', 'top', etc. The values help to identify the orientation of the product image displayed in the catalog. In this context, the term 'front' indicates that the picture shows the front view of the product.", + "Definition": null, "Name": "PictureAngle", "SampleValues": [ "front" @@ -165,7 +165,7 @@ }, { "DataType": "nvarchar", - "Definition": "The PictureSize column in the vProductModelCatalogDescription entity contains textual descriptors for the size of pictures associated with product models in a catalog. The values are likely standardized size labels such as 'small', 'medium', or 'large', indicating the dimensions or resolution of the pictures. The provided sample value 'small' suggests one possible label describing the picture size. This column helps in categorizing and displaying product images appropriately based on their size specifications.", + "Definition": null, "Name": "PictureSize", "SampleValues": [ "small" @@ -173,7 +173,7 @@ }, { "DataType": "nvarchar", - "Definition": "The ProductPhotoID column in the vProductModelCatalogDescription entity contains numerical identifiers for product photos. Each value in this column represents a unique ID associated with a specific product photo. This column is used to link product models to their corresponding images in the catalog. The IDs are integers and do not follow a specific sequential order.", + "Definition": null, "Name": "ProductPhotoID", "SampleValues": [ "87", @@ -185,7 +185,7 @@ }, { "DataType": "nvarchar", - "Definition": "The Material column in the vProductModelCatalogDescription entity contains the types of materials used in the product models listed in the catalog. Common materials include different types of metals, such as various aluminum alloys. The values in this column are likely descriptive terms indicating the composition or specific type of material utilized in the products. There may be some variations or alternative spellings in the material descriptions.", + "Definition": null, "Name": "Material", "SampleValues": [ "Aluminum Alloy", @@ -195,7 +195,7 @@ }, { "DataType": "nvarchar", - "Definition": "The Color column in the vProductModelCatalogDescription entity contains text descriptions of the color availability for different product models. These descriptions generally indicate whether the product is available in a wide range of colors, all colors, or all colors except specific types like metallic. The descriptions are written in a sentence format, providing detailed information on color options for the products.\n", + "Definition": null, "Name": "Color", "SampleValues": [ "Available in most colors.", @@ -206,7 +206,7 @@ }, { "DataType": "nvarchar", - "Definition": "The ProductLine column in the vProductModelCatalogDescription entity contains descriptions of different categories of bicycles available in the product catalog. The values indicate the type of bike, such as Touring bike, Road bike, or Mountain bike, providing a brief classification of the product model. These descriptions help to categorize and identify the specific segment of bicycles offered.", + "Definition": null, "Name": "ProductLine", "SampleValues": [ "Touring bike", @@ -216,7 +216,7 @@ }, { "DataType": "nvarchar", - "Definition": "The Style column in the vProductModelCatalogDescription entity contains textual descriptions representing the gender or category for which the product is intended. Common values include terms like 'Unisex' and 'Men's, indicating whether a product is suitable for all genders or specifically for men. This column helps categorize products based on their intended user group.", + "Definition": null, "Name": "Style", "SampleValues": [ "Unisex", @@ -225,7 +225,7 @@ }, { "DataType": "nvarchar", - "Definition": "The RiderExperience column in the vProductModelCatalogDescription entity contains descriptions of the skill levels suitable for using certain products. The values indicate the range of rider experience that the product caters to, ranging from novice to professional levels. Each value typically specifies a starting level and an ending level, reflecting the minimum and maximum proficiency required or recommended for the product.", + "Definition": null, "Name": "RiderExperience", "SampleValues": [ "Novice to Intermediate riders", @@ -237,19 +237,19 @@ }, { "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the vProductModelCatalogDescription entity contains universally unique identifiers (UUIDs) for each row in the table. These UUIDs are in the standard 36-character format, which includes hyphens separating specific groups of hexadecimal digits. The rowguid column ensures that each entry in the table can be uniquely identified across different systems and databases.", + "Definition": null, "Name": "rowguid", "SampleValues": [ + "52E7F2C1-DBFF-4518-927D-C7D46F9ED32E", + "8456BB94-B4DD-4A47-A76B-D0E54AB4285D", "FCA0665B-B956-489A-A5EC-6F0B4AA14D02", - "866DBAD3-5999-4329-BEAC-D826D959D9A1", "94FFB702-0CBC-4E3F-B840-C51F0D11C8F6", - "52E7F2C1-DBFF-4518-927D-C7D46F9ED32E", - "8456BB94-B4DD-4A47-A76B-D0E54AB4285D" + "AA10D9E6-E33F-4DA8-ACE1-992FCD6BB171" ] }, { "DataType": "datetime", - "Definition": "The ModifiedDate column in the vProductModelCatalogDescription entity contains timestamps indicating the date and time when the respective record was last updated. The values follow the datetime format including both date and time components. This column is useful for tracking changes and ensuring data is up to date. The sample values show a pattern of recording precise moments down to fractions of a second.", + "Definition": null, "Name": "ModifiedDate", "SampleValues": [ "2006-11-20 09:56:38.273000", @@ -259,9 +259,9 @@ ], "CompleteEntityRelationshipsGraph": [], "Database": "text2sql-adventure-works", - "Definition": "The vProductModelCatalogDescription entity provides detailed descriptions of product models, including key attributes such as manufacturer information, warranty details, and product specifications. It includes visual and descriptive elements that help in identifying and understanding the product, such as images, material, color, and style. This entity can be used to answer questions related to the features and specifications of different product models, the manufacturer's information, and warranty conditions. It is useful for generating catalog descriptions and providing comprehensive product information to customers.", + "Definition": null, "Entity": "vProductModelCatalogDescription", - "EntityName": "Product Model Catalog Description", + "EntityName": null, "EntityRelationships": [], "FQN": "text2sql-adventure-works.SalesLT.vProductModelCatalogDescription", "Schema": "SalesLT" diff --git a/text_2_sql/text_2_sql_core/src/text_2_sql_core/data_dictionary/cli.py b/text_2_sql/text_2_sql_core/src/text_2_sql_core/data_dictionary/cli.py index 1a5a174..67897a1 100644 --- a/text_2_sql/text_2_sql_core/src/text_2_sql_core/data_dictionary/cli.py +++ b/text_2_sql/text_2_sql_core/src/text_2_sql_core/data_dictionary/cli.py @@ -37,6 +37,14 @@ def create( help="Optional flag that writes all schemas to a single file.", ), ] = False, + generate_definitions: Annotated[ + bool, + typer.Option( + "--generate_definitions", + "-gen", + help="Optional flag that will use OpenAI to generate descriptions.", + ), + ] = False, ) -> None: """Execute a Text2SQL Data Dictionary Creator YAML file. @@ -50,6 +58,12 @@ def create( """ + kwargs = { + "output_directory": output_directory, + "single_file": single_file, + "generate_definitions": generate_definitions, + } + try: if engine == DatabaseEngine.DATABRICKS: from text_2_sql_core.data_dictionary.databricks_data_dictionary_creator import ( @@ -57,7 +71,7 @@ def create( ) data_dictionary_creator = DatabricksDataDictionaryCreator( - single_file=single_file, output_directory=output_directory + **kwargs, ) elif engine == DatabaseEngine.SNOWFLAKE: from text_2_sql_core.data_dictionary.snowflake_data_dictionary_creator import ( @@ -65,7 +79,7 @@ def create( ) data_dictionary_creator = SnowflakeDataDictionaryCreator( - single_file=single_file, output_directory=output_directory + **kwargs, ) elif engine == DatabaseEngine.TSQL: from text_2_sql_core.data_dictionary.tsql_data_dictionary_creator import ( @@ -73,7 +87,7 @@ def create( ) data_dictionary_creator = TSQLDataDictionaryCreator( - single_file=single_file, output_directory=output_directory + **kwargs, ) except ImportError: detailed_error = f"""Failed to import { @@ -82,6 +96,7 @@ def create( rich_print(detailed_error) raise typer.Exit(code=1) + try: asyncio.run(data_dictionary_creator.create_data_dictionary()) except Exception as e: diff --git a/text_2_sql/text_2_sql_core/src/text_2_sql_core/data_dictionary/data_dictionary_creator.py b/text_2_sql/text_2_sql_core/src/text_2_sql_core/data_dictionary/data_dictionary_creator.py index 2550040..93adb34 100644 --- a/text_2_sql/text_2_sql_core/src/text_2_sql_core/data_dictionary/data_dictionary_creator.py +++ b/text_2_sql/text_2_sql_core/src/text_2_sql_core/data_dictionary/data_dictionary_creator.py @@ -96,11 +96,11 @@ def fqn(self) -> str: @property def foreign_fqn(self) -> str: identifiers = [ - self.warehouse, - self.catalog, - self.database, - self.entity_schema, - self.entity, + self.foreign_warehouse, + self.foreign_catalog, + self.foreign_database, + self.foreign_entity_schema, + self.foreign_entity, ] non_null_identifiers = [x for x in identifiers if x is not None] @@ -237,7 +237,7 @@ def __init__( excluded_entities: list[str] = None, excluded_schemas: list[str] = None, single_file: bool = False, - generate_definitions: bool = True, + generate_definitions: bool = False, output_directory: str = None, ): """A method to initialize the DataDictionaryCreator class. @@ -250,6 +250,11 @@ def __init__( generate_definitions (bool, optional): A flag to indicate if definitions should be generated. Defaults to True. """ + if entities is not None and excluded_entities is not None: + raise ValueError( + "Cannot pass both entities and excluded_entities. Please pass only one." + ) + if excluded_entities is None: excluded_entities = [] @@ -346,6 +351,8 @@ async def extract_entity_relationships(self) -> list[EntityRelationship]: self.extract_entity_relationships_sql_query, cast_to=EntityRelationship ) + logging.info(f"Extracted {len(relationships)} relationships") + for relationship in relationships: relationship.warehouse = self.warehouse relationship.database = self.database @@ -367,7 +374,7 @@ async def extract_entity_relationships(self) -> list[EntityRelationship]: relationship.foreign_fqn not in self.entity_relationships[relationship.fqn] ): - self.entity_relationships[relationship.entity][ + self.entity_relationships[relationship.fqn][ relationship.foreign_fqn ] = relationship @@ -726,7 +733,12 @@ async def generate_entity_definition(self, entity: EntityItem): logging.info(f"definition for {entity.entity}: {definition}") entity.definition = definition - async def write_entity_to_file(self, entity): + async def write_entity_to_file(self, entity: EntityItem): + """A method to write an entity to a file. + + Args: + entity (EntityItem): The entity to write to file. + """ logging.info(f"Saving data dictionary for {entity.entity}") # Ensure the intermediate directories exist