{ From user Lonnie, Model Reading_data_from_th at Thu, Aug 27, 2009 11:11 AM} Softwareversion 4.2.0 { System Variables with non-default values: } Usetable := 0 Typechecking := 1 Checking := 1 Saveoptions := 2 Savevalues := 0 {!40000|Att_contlinestyle Graph_primary_valdim: 1} {!40000|Att_catlinestyle Graph_primary_valdim: 9} Model Reading_data_from_th Title: Reading Data from the Web Description: Analytica User Group Webinar~ Presented: 27 Aug 2009~ ~ Requires: Analytica Enterprise or better~ ~ The Analytica 4.2 built-in function, ReadFromUrl, can be used to read data (and images) from websites, such as HTTP web pages, FTP pages, or even web services like SOAP. In this webinar, I'll demonstrate the use of this function in several ways, including reading live stock and stock option price data, posting data to a web form, retrieving a text file from an FTP site, supplying user and password credentials for a web site or ftp service, downloading and displaying images including customized map and terrain images, and querying a SOAP web service. Author: Lonnie Chrisman, Ph.D.~ Lumina Decision Systems Date: Wed, Aug 26, 2009 3:48 PM Saveauthor: Lonnie Savedate: Thu, Aug 27, 2009 11:11 AM Defaultsize: 48,24 Diagstate: 1,17,15,626,483,17 Windstate: 2,35,29,496,371 Fontstyle: Arial, 15 Fileinfo: 0,Model Reading_data_from_th,2,2,0,0,W:\Training\User Group Webinars\Reading Data From the Web.ana Module Soap_web_svc_calls Title: SOAP Web Svc Calls Description: Uses a SOAP-based web service to convert from one currency to another. Demonstrates the use of a SOAP service from within an Analytica model. Author: Lonnie Chrisman, Ph.D.~ Lumina Decision Systems Date: Mon, Aug 24, 2009 9:32 AM Saveauthor: Lonnie Savedate: Wed, Aug 26, 2009 12:44 PM Defaultsize: 48,24 Nodelocation: 360,128,0 Nodesize: 56,28 Nodeinfo: 1,1,1,1,1,1,0,0,0,0 Diagstate: 1,373,67,597,456,17 Windstate: 2,422,551,476,224 Fontstyle: Arial, 15 Formnode From_currency1 Title: From currency Definition: 0 Nodelocation: 244,29,1 Nodesize: 196,13 Nodeinfo: 1,0,0,1,0,0,0,239,0,1 Original: From_currency Formnode To_currency1 Title: To currency Definition: 0 Nodelocation: 244,61,1 Nodesize: 196,13 Nodeinfo: 1,0,0,1,0,0,0,239,0,1 Original: To_currency Formnode Conversion_rate1 Title: Conversion rate Definition: 1 Nodelocation: 204,96,1 Nodesize: 156,16 Nodeinfo: 1,0,0,1,0,0,0,158,0,1 Original: Conversion_rate Formnode Last_updated1 Title: Last updated Definition: 1 Nodelocation: 236,132,1 Nodesize: 188,12 Nodeinfo: 1,0,0,1,0,0,0,198,0,1 Original: Last_updated Button Update_currency_list Title: Update Currency List Nodelocation: 128,164,1 Nodesize: 80,12 Script: Read_currencies( ) Module Currency_list_update Title: Currency List Update Description: Obtains a list of available currencies supported by the currency converter Author: Lonnie Date: Wed, Aug 26, 2009 12:40 PM Defaultsize: 48,24 Nodelocation: 112,232,1 Nodesize: 56,24 Diagstate: 1,10,178,595,300,21 Windstate: 2,472,456,476,224 Constant Currency_converter_u Title: Currency Converter URL Definition: "http://webservice.webserviceshare.com/currencyconverter/rates.asmx" Nodelocation: 96,128,1 Nodesize: 48,31 Aliases: Alias Currency_converter_1 Variable Getsupportedcurrenci Title: Get Supported Currencies XML Definition: "~ ~ ~ ~ ~ ~ " Nodelocation: 96,48,1 Nodesize: 60,28 Variable Supported_currencies Title: Supported Currencies Definition: ReadFromUrl(Currency_converter_u, method:"POST",~ httpHeaders:"Content-Type: text/xml; charset=utf-8" & chr(13)&chr(10) & "SOAPAction:http://websevriceshare.com/GetSupportedCurrencies",~ httpContent: Getsupportedcurrenci ) Nodelocation: 232,96,1 Nodesize: 48,24 Valuestate: 2,353,237,635,317,0,MIDM Variable Currency_symbol Title: Currency Symbol Definition: Table(Currency)(~ 'DZD','XAL','ARS','AWG','AUD','BSD','BHD','BDT','BBD','BYR','BZD','BMD','BTN','BOB','BWP','BRL','GBP','BND','BGN','BIF','CAD','KYD','XOF','CLP','CNY','COP','KMF','XCP','CRC','HRK','CUP','CYP','CZK','DKK','DOP','XCD','ECS','EGP','SVC','EEK','ETB','EUR','FJD','GMD','GHC','XAU','GTQ','GNF','HTG','HNL','HKD','HUF','ISK','INR','IDR','IRR','IQD','ILS','JMD','JPY','JOD','KZT','KES','KRW','KWD','LVL','LBP','LSL','LTL','MOP','MKD','MWK','MYR','MVR','MTL','MRO','MUR','MXN','MDL','MNT','MAD','NAD','NPR','ANG','TRY','NZD','NIO','NGN','NOK','OMR','XPF','PKR','XPD','PAB','PGK','PYG','PEN','PHP','XPT','PLN','QAR','RON','RUB','RWF','WST','STD','SAR','SCR','SLL','XAG','SGD','SKK','SIT','SBD','ZAR','LKR','SDD','SZL','SEK','CHF','TWD','TZS','THB','TOP','TTD','TND','USD','AED','UGX','UAH','UYU','VUV','VEB','VND','YER','ZMK','ZWD','ALL','XAF') Nodelocation: 392,104,1 Nodesize: 48,24 Valuestate: 2,90,94,412,456,0,MIDM Displayinputs: Function Read_currencies Index Currency Title: Currency Definition: ['Algerian Dinar','Aluminium Ounces','Argentine Peso','Aruba Florin','Australian Dollar','Bahamian Dollar','Bahraini Dinar','Bangladesh Taka','Barbados Dollar','Belarus Ruble','Belize Dollar','Bermuda Dollar','Bhutan Ngultrum','Bolivian Boliviano','Botswana Pula','Brazilian Real','British Pound','Brunei Dollar','Bulgarian Lev','Burundi Franc','Canadian Dollar','Cayman Islands Dollar','CFA Franc','Chilean Peso','Chinese Yuan','Colombian Peso','Comoros Franc','Copper Pounds','Costa Rica Colon','Croatian Kuna','Cuban Peso','Cyprus Pound','Czech Koruna','Danish Krone','Dominican Peso','East Caribbean Dollar','Ecuador Sucre','Egyptian Pound','El Salvador Colon','Estonian Kroon','Ethiopian Birr','Euro','Fiji Dollar','Gambian Dalasi','Ghanian Cedi','Gold Ounces','Guatemala Quetzal','Guinea Franc','Haiti Gourde','Honduras Lempira','Hong Kong Dollar','Hungarian Forint','Iceland Krona','Indian Rupee','Indonesian Rupiah','Iran Rial','Iraqi Dinar','Israeli Shekel','Jamaican Dollar','Japanese Yen','Jordanian Dinar','Kazakhstan Tenge','Kenyan Shilling','Korean Won','Kuwaiti Dinar','Latvian Lat','Lebanese Pound','Lesotho Loti','Lithuanian Lita','Macau Pataca','Macedonian Denar','Malawi Kwacha','Malaysian Ringgit','Maldives Rufiyaa','Maltese Lira','Mauritania Ougulya','Mauritius Rupee','Mexican Peso','Moldovan Leu','Mongolian Tugrik','Moroccan Dirham','Namibian Dollar','Nepalese Rupee','Neth Antilles Guilder','New Turkish Lira','New Zealand Dollar','Nicaragua Cordoba','Nigerian Naira','Norwegian Krone','Omani Rial','Pacific Franc','Pakistani Rupee','Palladium Ounces','Panama Balboa','Papua New Guinea Kina','Paraguayan Guarani','Peruvian Nuevo Sol','Philippine Peso','Platinum Ounces','Polish Zloty','Qatar Rial','Romanian New Leu','Russian Rouble','Rwanda Franc','Samoa Tala','Sao Tome Dobra','Saudi Arabian Riyal','Seychelles Rupee','Sierra Leone Leone','Silver Ounces','Singapore Dollar','Slovak Koruna','Slovenian Tolar','Solomon Islands Dollar','South African Rand','Sri Lanka Rupee','Sudanese Dinar','Swaziland Lilageni','Swedish Krona','Swiss Franc','Taiwan Dollar','Tanzanian Shilling','Thai Baht','Tonga Pa''anga','Trinidad&Tobago Dollar','Tunisian Dinar','U.S. Dollar','UAE Dirham','Ugandan Shilling','Ukraine Hryvnia','Uruguayan New Peso','Vanuatu Vatu','Venezuelan Bolivar','Vietnam Dong','Yemen Riyal','Zambian Kwacha','Zimbabwe Dollar','Albanian Lek','CFA Franc'] Nodelocation: 392,192,1 Nodesize: 48,24 {!40000|Att_previndexvalue: ['Algerian Dinar','Aluminium Ounces','Argentine Peso','Aruba Florin','Australian Dollar','Bahamian Dollar','Bahraini Dinar','Bangladesh Taka','Barbados Dollar','Belarus Ruble','Belize Dollar','Bermuda Dollar','Bhutan Ngultrum','Bolivian Boliviano','Botswana Pula','Brazilian Real','British Pound','Brunei Dollar','Bulgarian Lev','Burundi Franc','Canadian Dollar','Cayman Islands Dollar','CFA Franc','Chilean Peso','Chinese Yuan','Colombian Peso','Comoros Franc','Copper Pounds','Costa Rica Colon','Croatian Kuna','Cuban Peso','Cyprus Pound','Czech Koruna','Danish Krone','Dominican Peso','East Caribbean Dollar','Ecuador Sucre','Egyptian Pound','El Salvador Colon','Estonian Kroon','Ethiopian Birr','Euro','Fiji Dollar','Gambian Dalasi','Ghanian Cedi','Gold Ounces','Guatemala Quetzal','Guinea Franc','Haiti Gourde','Honduras Lempira','Hong Kong Dollar','Hungarian Forint','Iceland Krona','Indian Rupee','Indonesian Rupiah','Iran Rial','Iraqi Dinar','Israeli Shekel','Jamaican Dollar','Japanese Yen','Jordanian Dinar','Kazakhstan Tenge','Kenyan Shilling','Korean Won','Kuwaiti Dinar','Latvian Lat','Lebanese Pound','Lesotho Loti','Lithuanian Lita','Macau Pataca','Macedonian Denar','Malawi Kwacha','Malaysian Ringgit','Maldives Rufiyaa','Maltese Lira','Mauritania Ougulya','Mauritius Rupee','Mexican Peso','Moldovan Leu','Mongolian Tugrik','Moroccan Dirham','Namibian Dollar','Nepalese Rupee','Neth Antilles Guilder','New Turkish Lira','New Zealand Dollar','Nicaragua Cordoba','Nigerian Naira','Norwegian Krone','Omani Rial','Pacific Franc','Pakistani Rupee','Palladium Ounces','Panama Balboa','Papua New Guinea Kina','Paraguayan Guarani','Peruvian Nuevo Sol','Philippine Peso','Platinum Ounces','Polish Zloty','Qatar Rial','Romanian New Leu','Russian Rouble','Rwanda Franc','Samoa Tala','Sao Tome Dobra','Saudi Arabian Riyal','Seychelles Rupee','Sierra Leone Leone','Silver Ounces','Singapore Dollar','Slovak Koruna','Slovenian Tolar','Solomon Islands Dollar','South African Rand','Sri Lanka Rupee','Sudanese Dinar','Swaziland Lilageni','Swedish Krona','Swiss Franc','Taiwan Dollar','Tanzanian Shilling','Thai Baht','Tonga Pa''anga','Trinidad&Tobago Dollar','Tunisian Dinar','U.S. Dollar','UAE Dirham','Ugandan Shilling','Ukraine Hryvnia','Uruguayan New Peso','Vanuatu Vatu','Venezuelan Bolivar','Vietnam Dong','Yemen Riyal','Zambian Kwacha','Zimbabwe Dollar','Albanian Lek','CFA Franc']} Function Read_currencies( ) Title: Read Currencies Definition: var n := FindInText("(?.+?)\s*(?.+?)", Supported_currencies, subPattern:"name", return:"S", repeatSubpattern:"Sym");~ Currency := copyIndex(n);~ Currency_Symbol := n.Sym[@.Sym=@Currency] Nodelocation: 232,168,1 Nodesize: 48,24 Windstate: 2,151,512,852,273 Paramnames: Displayoutputs: Variable Currency_symbol Close Currency_list_update Module Rate_lookup Title: Rate Lookup Description: Uses the web service to lookup the conversion rates for the currencies. Author: Lonnie Date: Wed, Aug 26, 2009 12:40 PM Defaultsize: 48,24 Nodelocation: 248,232,1 Nodesize: 48,24 Diagstate: 1,47,34,710,344,17 Windstate: 2,387,557,476,224 Variable Getrates_template Title: GetRates template Definition: '~ ~ ~ ~ '&key&'~ %from%~ %to%~ ~ ~ ' Nodelocation: 264,56,1 Nodesize: 48,24 Valuestate: 2,22,43,533,273,0,MIDM Constant Key Title: key Definition: "7933e560-25fb-42e9-ba11-be8fe900fb63" Nodelocation: 96,56,1 Nodesize: 48,24 Decision From_currency Title: From currency Definition: Choice(Currency,127,False,result:Currency_symbol) Nodelocation: 96,120,1 Nodesize: 48,24 Aliases: Formnode From_currency1 Script: Mid(conversion_rate)~ last_updated {!40200|Att_choiceindexes: Index Currency} Decision To_currency Title: To currency Definition: Choice(Currency,121,False,result:Currency_symbol) Nodelocation: 96,184,1 Nodesize: 48,24 Windstate: 2,102,90,476,224 Aliases: Formnode To_currency1 Script: Mid(Conversion_rate)~ last_updated {!40200|Att_choiceindexes: Index Currency} Variable Getrates_xml Title: GetRates XML Definition: TextReplace(TextReplace(Getrates_template,"%from%",From_currency),"%to%",To_currency) Nodelocation: 264,144,1 Nodesize: 48,24 Valuestate: 2,88,98,636,304,0,MIDM Variable Get_rates_response Title: Get Rates Response Definition: ReadFromUrl(Currency_converter_u, ~ method:"POST",~ httpHeaders:Soap1_1_headers,~ httpContent: Getrates_xml ) Nodelocation: 400,144,1 Nodesize: 48,24 Valuestate: 2,63,71,895,339,0,MIDM Objective Conversion_rate Title: Conversion rate Description: Number of "To" currency that 1 unit of "From" currency yields. Definition: FindInText(".*(?.*?).*", Get_rates_response, return:"S", subPattern:"Amount") Nodelocation: 552,88,1 Nodesize: 48,24 Aliases: Formnode Conversion_rate1 Objective Last_updated Title: Last updated Definition: FindInText(".*(?.*?).*", Get_rates_response, return:"S", subPattern:"updated") Nodelocation: 552,168,1 Nodesize: 48,24 Aliases: Formnode Last_updated1 Alias Currency_converter_1 Title: Currency Converter URL Definition: 1 Nodelocation: 400,56,1 Nodesize: 48,31 Original: Currency_converter_u Constant Soap1_1_headers Title: Soap1.1 headers Definition: "Content-Type: text/xml; charset=utf-8~ SOAPAction:http://websevriceshare.com/GetRates" Nodelocation: 400,216,1 Nodesize: 48,24 Variable Va3 Definition: textreplace( Get_rates_response, "><", ">"&chr(13)&"<", all:true) Nodelocation: 256,224,1 Nodesize: 48,24 Valuestate: 2,356,129,624,477,0,MIDM Close Rate_lookup Close Soap_web_svc_calls Module Download_option_data Title: Download Option Data Author: Lonnie Date: Sun, Aug 16, 2009 12:44 PM Saveauthor: Lonnie Savedate: Mon, Aug 17, 2009 8:46 PM Defaultsize: 48,24 Nodelocation: 88,128,0 Nodesize: 56,28 Nodeinfo: 1,1,1,1,1,1,0,0,0,0 Diagstate: 1,10,14,677,484,17 Fontstyle: Arial, 15 Decision Stock_sym Title: Stock sym Definition: ['AAPL','INTC','MSFT','JNJ','PG','F','QQQQ','SPY','DIA'] Nodelocation: 72,64,1 Nodesize: 48,24 Windstate: 2,102,90,400,298 Variable Option_chain_html Title: Option chain html Definition: var url[] := Option_price_url;~ if istext(url) then ReadFromURL(url) else null Nodelocation: 192,128,1 Nodesize: 48,24 Valuestate: 2,40,50,805,505,0,MIDM Reformval: [Expiry_group,Stock_sym] Variable Expiration_date Title: Expiration Date Definition: ParseDate( ~ FindInText(~ 'Expire at close\s*\w+,\s(\w\w\w\s\d\d,\s\d\d\d\d)',~ Option_chain_html,~ return:"S", subpattern:1, re:1)~ ) Nodelocation: 320,128,1 Nodesize: 48,24 Valuestate: 2,181,63,791,295,0,MIDM Reformval: [Expiry_group,Stock_sym] Numberformat: 2,DD,2,2,0,0,4,0,$,0,"ABBREV",0 Variable Option_data_table Title: Option data table Definition: var leader := "" & TextUpperCase(Call_put) & " OPTIONS";~ FindInText(~ leader & '.*?(]+class="yfnc_datamodoutline1".*?)',~ Option_chain_html, re:1, return:"S", subpattern:1 ) Nodelocation: 192,200,1 Nodesize: 48,24 Valuestate: 2,163,48,741,303,0,MIDM Reformval: [Expiry_group,Stock_sym] {!40000|Att_resultslicestate: [Call_put,2,Stock_sym,1,Expiry_group,1]} Constant Table_row_reg_exp Title: Table Row Reg Exp Definition: var fieldRe := '(?<' & All_option_fields & '>.*?)\s*';~ Join(fieldRe,All_option_fields) Nodelocation: 72,272,1 Nodesize: 48,24 Valuestate: 2,264,274,762,321,0,MIDM Index All_option_fields Title: All option fields Definition: ['Strike','Symbol','Last','Chg','Bid','Ask','Vol','Open_Int'] Nodelocation: 496,96,1 Nodesize: 48,24 Variable Option_quote_0 Title: Option quote 0 Definition: var cells := FindInText(Table_row_reg_exp, Option_data_table,re:1, return:"S", subpattern:All_option_fields, repeatIndex:chain0)[chain0=chain,All_option_fields=Option_field];~ var x := FindInText(Clean_cell_regexp, cells, re:1, return:'S', subPattern:1 );~ x := parsenumber(x,x);~ if x='N/A' then null else x Nodelocation: 192,272,1 Nodesize: 48,24 Valuestate: 2,387,96,571,518,0,MIDM Reformval: [Option_field,Chain] {!40000|Att_resultslicestate: [Expiry_group,1,Stock_sym,4,Call_put,1,Chain,1,Option_field,1]} Index Chain Title: Chain Definition: 1..20 Nodelocation: 496,152,1 Nodesize: 48,24 Index Chain0 Title: Chain0 Definition: 0..20 Nodelocation: 592,152,1 Nodesize: 48,24 Index Option_field Title: Option field Definition: ['Strike','Symbol','Last','Bid','Ask','Vol','Open_Int'] Nodelocation: 592,96,1 Nodesize: 48,24 Variable Real_time_html Title: Real time html Definition: reset ; ReadFromUrl('http://finance.yahoo.com/q/ecn?s=' & Stock_sym) Nodelocation: 192,336,1 Nodesize: 48,24 Constant Real_time_price_rege Title: Real-time price RegExp Definition: 'Last Trade:.*?(?.*?).*?Bid:.*?(?.*?).*?Ask:.*?(?.*?)' Nodelocation: 72,408,1 Nodesize: 48,31 Objective Stock_quote Title: Stock quote Definition: var cells := FindInText(Real_time_price_rege, Real_time_html, re:1, subPattern:Stock_fields, return:'S');~ cells := FindInText(Clean_cell_regexp, cells, re:1, return:'S', subPattern:1 );~ if cells='N/A' or cells='Null' then null else ParseNumber(cells,cells) Nodelocation: 192,408,1 Nodesize: 48,24 Valuestate: 2,651,27,312,265,0,MIDM Reformval: [Stock_fields,Stock_sym] Numberformat: 2,F,4,3,1,1,4,0,$,0,"ABBREV",0 Index Stock_fields Title: Stock Fields Definition: ['Bid','Ask','Last'] Nodelocation: 496,208,1 Nodesize: 48,24 Constant Clean_cell_regexp Title: clean cell regexp Definition: '(?:<.*?>)*([^<]*)' Nodelocation: 72,336,1 Nodesize: 48,24 Variable Option_price_url Title: Option Price URL Definition: reset;~ var url0 := "http://finance.yahoo.com/q/op?s="&Stock_sym;~ var html := ReadFromURL(url0);~ var m := findintext( '',~ html, subPattern:"expiry", return:"S", re:1, repeatIndex:Expiry_group );~ if @Expiry_group=1 then url0 else url0 & "&m=" & IgnoreWarnings(Slice(m,Expiry_group,@Expiry_group-1)) Nodelocation: 192,56,1 Nodesize: 48,24 Windstate: 2,102,90,567,414 Valuestate: 2,41,149,1024,284,0,MIDM Reformval: [Expiry_group,Stock_sym] Index Expiry_group Title: Expiry group Definition: 1..10 Nodelocation: 592,40,1 Nodesize: 48,24 Index Call_put Title: Call_Put Definition: ['Call','Put'] Nodelocation: 496,40,1 Nodesize: 48,24 Variable Reset Title: reset Definition: 4 Nodelocation: 72,128,1 Nodesize: 48,24 Objective Option_quote Title: Option quote Definition: if Option_field1='Expiration' then Date_to_text(Expiration_date) else Option_quote_0[option_field=option_field1] Nodelocation: 320,272,1 Nodesize: 48,24 Valuestate: 2,152,59,684,496,0,MIDM Reformval: [Option_field1,Chain] {!40000|Att_resultslicestate: [Expiry_group,1,Stock_sym,7,Call_put,1,Chain,5,Option_field1,1]} Index Option_field1 Title: Option field Definition: ['Strike','Expiration', 'Symbol','Last','Bid','Ask','Vol','Open_Int'] Nodelocation: 592,208,1 Nodesize: 48,24 Function Date_to_text(date) Title: Date to text Definition: if isnumber(date) then "" & date else date Nodelocation: 496,288,1 Nodesize: 48,24 Paramnames: date Numberformat: 2,DD,2,2,0,0,4,0,$,0,"ABBREV",0 Button Refresh Title: Refresh Nodelocation: 72,200,1 Nodesize: 48,24 Script: (reset := reset + 1) Close Download_option_data Module Download_population_ Title: Download population data Description: Downloads population data for all counties in the United States from the US Census Dept. web pages. This involves parsing an HTML page to determine the location of each of 51 data files for each state (and DC). Then downloading each of those as CSV files and parsing them.~ ~ The parsing portion was covered in the webinar on regular expressions, using this example. Author: Lonnie Chrisman, Ph.D.~ Lumina Decision Systems Date: Tue, Jun 30, 2009 2:07 PM Defaultsize: 48,24 Nodelocation: 88,56,1 Nodesize: 56,28 Diagstate: 1,135,33,643,380,17 Windstate: 2,196,165,476,224 Constant Census_pop_home Title: Census pop home Definition: "http://www.census.gov/popest/counties/CO-EST2008-01.html" Nodelocation: 96,54,1 Nodesize: 48,24 Valuestate: 2,72,82,713,507,0,MIDM Variable List_of_states_html Title: List of states HTML Definition: readfromurl(Census_pop_home) Nodelocation: 216,55,1 Nodesize: 48,31 Valuestate: 2,1,22,747,450,0,MIDM Variable County_data_read Title: County data read Definition: var url[] := Urls_for_each_state1 do (~ showprogressbar("Reading ",if istext(url) then url else "",0);~ if isnull(url) then null~ else (~ var csv := readfromurl(csv_prefix & url);~ \ParseNumber(findintext(County_re,csv,Subpattern:"pop", repeatSubpattern:"county",return:"S"))~ )~ ) Nodelocation: 216,134,1 Nodesize: 48,24 Valuestate: 2,152,40,363,471,0,MIDM Numberformat: 2,I,4,2,1,0,4,0,$,0,"ABBREV",0 Constant County_re Title: county re Definition: '(*ANY)\.(?.+?)( County)?,(("(?[\d,]+)")|(?\d+))' Nodelocation: 96,206,1 Nodesize: 48,24 Constant Csv_prefix Title: csv prefix Definition: "http://www.census.gov/popest/counties/" Nodelocation: 96,134,1 Nodesize: 48,24 Variable Urls_for_each_state1 Title: URLs for each state Definition: var tmp := FindInText("(?.*?).*?[^""]+?\.csv)""",List_of_states_html,subpattern:"url",repeatSubpattern:"state",return:"S");~ IgnoreWarnings(tmp[.State=State]) Nodelocation: 352,54,1 Nodesize: 48,24 Valuestate: 2,258,25,444,601,0,MIDM Reformval: [Sys_localindex('SUBPAT'),Sys_localindex('PART')] {!40000|Att_resultslicestate: [Sys_localindex('K'),38,Sys_localindex('PART'),1,Sys_localindex('SUBPAT'),1]} Variable County Title: County Definition: ComputedBy(Population_by_county) Nodelocation: 216,206,1 Nodesize: 48,24 Windstate: 2,474,311,476,349 Valuestate: 2,110,39,690,633,0,MIDM Nodecolor: 52425,39321,65535 Variable Population_by_county Title: Population by county Definition: index C := [];~ var CtoS := null;~ var population := null;~ for s:=County_data_read.State do (~ var pop := #County_data_read[.State=s];~ C := Concat(C,pop.County & ", " & State_abbrev[State=s]);~ CtoS := Concat(CtoS,s,,pop.County,C);~ population := Concat( population,pop,,pop.County,C)~ );~ County := CopyIndex(C);~ County_to_state := CtoS[.C=County];~ population[.C=County] Nodelocation: 344,207,1 Nodesize: 48,31 Valuestate: 2,174,24,459,571,0,MIDM Numberformat: 2,I,4,2,1,0,4,0,$,0,"ABBREV",0 Variable County_to_state Title: County to State Definition: ComputedBy(Population_by_county) Nodelocation: 216,270,1 Nodesize: 48,24 Valuestate: 2,72,82,462,336,0,MIDM Variable State_abbrev Title: state abbrev Definition: Table(State)(~ 'AL','AK','AZ','AR','CA','CO','CT','DE','DC','FL','GA','HI','ID','IL','IN','IA','KS','KY','LA','ME','MD','MA','MI','MN','MS','MO','MT','NE','NV','NH','NJ','NM','NY','NC','ND','OH','OK','OR','PA','RI','SC','SD','TN','TX','UT','VT','VA','WA','WV','WI','WY') Nodelocation: 448,126,1 Nodesize: 48,24 Index State Title: State Definition: ['Alabama','Alaska','Arizona','Arkansas','California','Colorado','Connecticut','Delaware','District of Columbia','Florida','Georgia','Hawaii','Idaho','Illinois','Indiana','Iowa','Kansas','Kentucky','Louisiana','Maine','Maryland','Massachusetts','Michigan','Minnesota','Mississippi','Missouri','Montana','Nebraska','Nevada','New Hampshire','New Jersey','New Mexico','New York','North Carolina','North Dakota','Ohio','Oklahoma','Oregon','Pennsylvania','Rhode Island','South Carolina','South Dakota','Tennessee','Texas','Utah','Vermont','Virginia','Washington','West Virginia','Wisconsin','Wyoming'] Nodelocation: 96,272,1 Nodesize: 48,24 {!40000|Att_previndexvalue: ['Alabama','Alaska','Arizona','Arkansas','California','Colorado','Connecticut','Delaware','District of Columbia','Florida','Georgia','Hawaii','Idaho','Illinois','Indiana','Iowa','Kansas','Kentucky','Louisiana','Maine','Maryland','Massachusetts','Michigan','Minnesota','Mississippi','Missouri','Montana','Nebraska','Nevada','New Hampshire','New Jersey','New Mexico','New York','North Carolina','North Dakota','Ohio','Oklahoma','Oregon','Pennsylvania','Rhode Island','South Carolina','South Dakota','Tennessee','Texas','Utah','Vermont','Virginia','Washington','West Virginia','Wisconsin','Wyoming']} Variable Va1 Definition: ReadFromUrl( "http://www.census.gov/popest/counties/CO-EST2008-01.html" ) Nodelocation: 368,328,1 Nodesize: 48,24 Valuestate: 2,72,82,749,528,0,MIDM Close Download_population_ Module Downloading_from_ftp Title: Downloading from FTP sites Author: Lonnie Date: Wed, Aug 26, 2009 4:44 PM Defaultsize: 48,24 Nodelocation: 224,56,1 Nodesize: 56,28 Diagstate: 1,350,39,550,300,17 Variable Nasdaq_listed_symbol Title: Nasdaq Listed Symbols Description: ReadFromUrl works for FTP downloads, just as it does for HTTP downloads. The only difference is that for an FTP download, you need to ensure that your URL starts with "ftp:". You specify the sub-directories and file within the FTP site as part of the URL:~ ~ ftp://site.com/directory/file Definition: ReadFromUrl("ftp://ftp.nasdaqtrader.com/SymbolDirectory/nasdaqlisted.txt") Nodelocation: 96,65,1 Nodesize: 48,31 Valuestate: 2,71,33,658,556,0,MIDM Variable Ftp_using_login_and_ Title: FTP using Login and Pwd Description: If you need to supply a login and password, use the URL syntax:~ ~ ftp://login:password@site/directory/file~ ~ The same works for http sites (including web services) that require login and password info. Definition: ReadFromUrl("ftp://anonymous:mypassword@ftp.nasdaqtrader.com/SymbolDirectory/nasdaqlisted.txt") Nodelocation: 232,65,1 Nodesize: 48,31 Valuestate: 2,78,26,679,562,0,MIDM Att__cloakdefn: 0 Close Downloading_from_ftp Module Downloading_images Title: Downloading Images Description: This model require Analytica Enterprise or Analytica Power Player.~ ~ Demonstrates the use of ReadFromUrl for grabbing an image from the internet and the manipulation of picture values to display the image in a picture node. ~ ~ The control panel allows you to select a location (lat & long) and obtain a google map of the area at desired zoom levels. Author: Lonnie Chrisman Date: Tue, Aug 04, 2009 10:59 AM Saveauthor: Lonnie Savedate: Tue, Aug 04, 2009 12:35 PM Defaultsize: 48,24 Nodelocation: 224,128,0 Nodesize: 56,28 Nodeinfo: 1,1,1,1,1,1,0,0,0,0 Diagstate: 1,58,17,962,591,17 Windstate: 2,102,90,518,258 Fontstyle: Arial, 15 Formnode Image_format1 Title: Image Format Definition: 0 Nodelocation: 556,61,1 Nodesize: 172,13 Nodeinfo: 1,0,0,1,0,0,0,198,0,1 Original: Image_format Formnode Latitude1 Title: Latitude Definition: 0 Nodelocation: 196,29,1 Nodesize: 172,13 Nodeinfo: 1,0,0,1,0,0,0,134,0,1 Original: Latitude Formnode Longitude1 Title: Longitude Definition: 0 Nodelocation: 196,61,1 Nodesize: 172,13 Nodeinfo: 1,0,0,1,0,0,0,134,0,1 Original: Longitude Formnode Map_type1 Title: Map type Definition: 0 Nodelocation: 556,29,1 Nodesize: 172,13 Nodeinfo: 1,0,0,1,0,0,0,198,0,1 Original: Map_type Button Get_map Title: Get Map Description: Obtains a map from google maps and sets the resulting image to be the Pict of the main map picture on the diagram. It also sets up the controls into a consistent state -- for example, if you've just selected a pre-defined place, it fills in the latitude and longitude text boxes for it. Or, if the lat & long don't correspond to a pre-defined place, it clears the pre-defined place pulldown. Nodelocation: 72,112,1 Nodesize: 48,24 Windstate: 2,102,257,735,285 Script: (var map := ReadFromUrl(map_url);~~ if isText(map) then error(map);~~ pict of Displayed_map := map)~ ~ (var isplace := subtable(Favorites_lat,fulldeterm:1)=latitude and subtable(Favorites_long,fulldeterm:1)=longitude;~~ var jumpPos := positionInIndex(isplace,1,jump_to); ~~ if jumpPos=null then jumpPos=1;~~ definition of jump_to := "choice(self," & jumpPos & ",0)" ) Picture Displayed_map Title: Displayed map Description: This image holds the displayed map. Nodelocation: 352,336,-1 Nodesize: 200,200 Nodeinfo: 1,0,0,0,0,0,0,0,0,0 Windstate: 2,560,394,476,224 Pict: (000000000000019001900006B9360000FFD8FFE000104A46494600010100000100010000FFDB004300080606070605080707070909080A0C140D0C0B0B0C1912130F141D1A1F1E1D1A1C1C20242E2720222C231C1C2837292C30313434341F27393D38323C2E333432FFDB0043010909090C0B0C180D0D1832211C213232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232FFC20011080190019003012200021101031101FFC4001A000100030101010000000000000000000000010204030506FFC400190101010101010100000000000000000000000102030405FFDA000C03010002100310000001F0B4E4BF3BBA916CDC5ABB5B2E51AB04DE8EF976266C3E84EB1E0FA95C1ACF5BE2D893AA732EEB70D995E91C9BBCF4C9267C5E9F0D4D936A479DCA6BAE7D7D2BF4CF6E7CF6618BF15D33774A3A5ABAD7388A31A7273BEF5B299AD9BDBBE6D39CE3F3FBF6D67DAC3DFC99D36EFF002F66672CD5AD9AAD4A16EF68CEA2FC296CE3F434D9E4F2D5A373CEE7BFB6B3CBA77E38B133C737662D3C262B7EF55E55CFCB4D9E4FA586E7DAE1D7CF6BD2E986975DF462F44CDCBA4E2566BD5BE5C74D2E69A33F4D4E337E72DADA70472ED8BD86347897A6A76E1A7A7A387953EB475E1975C72E3DFD4C3DAFE5F54F2D17929CDE8DD78BCBD4B7ABC9974E1A5BDB8FA91C7D3E447D760DF1F1A9B72F5E19EBAE1ACBC3562E5D13D39F2EBAADA30AEA9CBDF4E77E9C23AD7A33327BDF33F42D73F3B7E493627A4E98FD1606698B275BCB66BF3BD39ACB379FAFF26B3D2B65266C91175CF7B64D9E1FA3C23461CDADE8F5F8ECA37CF968C9A7CDEFAC2D9E9314BFABE7493558B8A53AB3A4C39F5DD8667A73A4D9AE758B8A75A96F3CD2C72EF18DE5DCE7CBB63D56E99E986374F3EB935E9F2F8F4D3313F57E4A60EE88AB37B72B5F35AB68B2211350B9AA4DD9EB48E8B9E7175CD26D69B89276265CE8BC6B8D5336566666A0677092C244458954AE213170162252F4E992FE5F7D88EE90D2B69D79F8DAF3AF2F3758B39DA59EE19F404E8172172136137125CA6B2C4A1604D04D0000084DCC0BC82622626F38E7D62E2C31F4C04D675E7B4D677E2058831ED0CF712400000002240000000000084921308989BCA6B64E101EE00194C35C650033DC164800000980000000000000000021242273CC35D40484004A44C4A800011204C08980000000000000000002124059409044480000000000000000000004C4900000000448000980026000000000000000000000000000000000026000000000000000000000000000000000000124026000000000000000000000000000000000000000000000000000000000000000260244244000000000000000000000000000000000940940B440940B4400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002600000098000000000000000000000000000000260266010240248898000000000000000000000000000000130009800000000000000000000000000000000004D2B1D516C6AAB46A4040D00000000000000000000000000000039F5F4EE789A3DCE5E3F4F939BD6E3E8F3F9B6F66DCFA79F4DDA3B73F167D4EC78D5F7F9C788F5B45789DEFDCC5C3D4F3EA29EAF68F1FB7A348F22FEC70AC1CBD0D478DD3D693C5AFADA8F0A9A7D13C57D04C7CF4FA9CAB947A59A5CDCFD2E099B3ECDB5E374F47B1E457DACE7991EBD0FFFC4002A100002020202010303040301000000000001020311001204132110142220313223334150304042A0FFDA000801010001050257D24A0B9429D7C3F8CAB431FE9A42D51BC71ABBD2F64AF92960E5ACA4A0998F8500A74846C8CAF5D5E06EB627E7AF8FBB344AD9F81E2BAE4D7BC8C2CF249838B186C500075A514803D33BB3905B107EA4887B7501340E11F48FB541EC667B18B4E7F9665757E38411B152CB4FF923D04F25648D7AD6448959A428031200AF18EABB7C067238D66D8840370AD80492474378D4B411850AEEA1FF0033A2EA5B464D58B221C261EA7909429BE2C1BE471AA653063F993F30F9FCD581B218C042454AE5948B4CF17BC385A0C5E9109B578FA9A3E4160515748B88851638D156511E6FB64F12E758C39B938630E238FC33792CAB1B826348810528AC92EFD936A892031279D52389EF21524D1B2300C445A28817E2ACE406763BA7C3049AE49C8180C5933ACF32A47A86AC2EAD887E2BF0CDD952240618216D2389E46088CA21DA4D241CB9E4DB25D33E6CBC8EBBF0A547971F1EF45C8645918CA1A4B2A3C3B0AC78CB483F355D841D6B1C963931078597652E8CD9F36965230796EB1D8CD43EF9BD60916312B85601249248D5C44346DE3607AD965692A491DB1791FAD5AC7F79250A8EAA58056CE8BC5D665F6FAE2429AB41103EDEC978D25E6925A1B6740EC7A16585D34C8A554134CD3E0849CE96C80F5AC442C92C96CA9B325890A006C6C0EB8DD8ADEDA666025B95496F3A05962225D10CDB61924A58E72DDA17D1612EA452AD46F2B2EE11913B13DBD465B4410EB193BFCDFE41458338490EBAEE13233A923140CAEBC4B8D39271E4EEC4FD36FC03F236508E7355FA2B1CB60FD84348A43631D8FDCA00EA2648DDB91390F235ACCED90F249895CCB24B2C1D6DC8550CE76F072EC1365945D0558C0A5F9C960B30182B7359FCA47FA719F83EF163217307EC945A5B49109274D89A5C69FAA2BDB100C00E0FD955D3E91EB1F74A1549C2069D8346A7C249CFB659383EEAEE8E8583966A52C07D27CE6887156207AE0D8F2A8027D2B2B2B2B37719D926763E79B61F25122B3F623F73ED1C1DB0F4C7842C06190DF4865FF00B531C978C74C6B27E87FDA73C7B1EDCC3B71F65FC3EBACACAFF002210A492C496C491A3321598C308C9F88B692329FEB2B2BD0782854CB380CBF5DFADFAD7D1595FEF90B30FA6BD2B2B2BFA83FF00B0926B2DBD00270823D3FEFF00ABFF00B3F18FF270BB40E758C2121B14562C2EE190A3601780163EAAA5DBDBC98D13A0C6528D8AA58BC1246302962F1B27AA46D21AF40A58FD3EDE519D125F44986360A22631FA68DA3A346C4152451C5983276C79090F2ACF1AAC9283C3E3B2413C7382A668FB37468566895BB93479D187B9169C88C059D4AFB84B671EE7B11159D2642B40B46397DEBB99A3B3244B32BEED2B85E5C65636F72A1D7908121963801E46B0D8222215DF90ACDDA8D865111335C8CE23E499A2D6E303B63D8C8BD113AAA49C814B30ED79E2247252A59F68E5995B3932AC91FF00FFC4002B1100020201040005020701000000000000000102110310122131041314404151612223304252718081FFDA0008010301013F012EC511D2379CB3AD285A3A4ED9DAE07F63911D3B1BBE0AA36F072B4DDA338131B476532C7B46EFAD2F829D13A64686CF916891637AA2F8B39913993F14BA47A9662F1099F16266E5C93F110891CCDFED1724F3461F27ABFA23D527DA23914FA22F8A67445A66E54262637C9C0D5746FA13B1C99565698B3DADAC96750FEC9E494FB288A9FD4FC7FC87CB369447238F42F132259A6CDCCB66F91E6488E79A23E27EC7A98FC919C67D68A02C64A0342D12140944A144502503694289B0F2CF2CD83895A27462F117C4851D32B2CB211B163368E06C1474A1C0D828228A28A1C078CF2C71171AE488E2462638FB0A2894494756878C8E312AF654497B96BFCBF67FCD172AFDB244B2A77F725CB377E5A87D34A28AD68A2B4A2B4AFD0FFFC400281100020201030108030100000000000000000102111003123121041420404151618113223080FFDA0008010201013F01C5AF416E66CF71523928A7E04C621F38E316228D99A6FD4DA8EA50DE22471265ACD611D06B29D168DC8BEA3E84232647B33F53BBA27A0D71949B21A127C8F452F51C45A0E42ECBF277727A4E384CFA1A66D6328A12C3428A5E0D5D07768D3D072E48C144B1B8FB1FAFB0B82F12829727E088B4D229148DA8D911E8C58FB3A3BBB25A6D0D66C5E15FDDAB3534BD85848A2B179B2F36597FC79CA65E1F93BAF0597E525FE78DBF27D8BAF52325257E59CFE07A4DD7C1A4B641FD9A7A6E05B2D9B996CB626596CB2CDCCDC366E2CB65B2D96CB659FFC4003A100001030205020305060504030000000001000211122103223141513261107181132391A1D1204252B1C1E13350627292304082F053A0D2FFDA0008010100063F028996A826DB22ED012B2BE4EE105628999BE90AA397FB919355D64606A8100F9A2C745B70AFA22785E6A8F9A9928EFEA8CF56D654C5CDE55C4D37536F24E311BA9022358466447CD36AB8D55ADE7A224CC1BAD0688E1458EAA7EF22485E8815A1588CAA22EACA1A3E70832FEA15A1AEE49524E6D90BD9A15A03BFA9168742CE60783B2E86C56F3B22EC6706CB49026F2869E455C46E85D466F8A68634D5B9084B831DC1547545EE890201FC2A697773AA2098E5406D7FF25903BC94D324723455B3D429E566B0081668EFA91FA2690D105C1BAFA7098C0400F2208BEF0AA917E1173F51C2000CB1D4B2D9C839EE328D170764E9372B56D53CAA70DD7DE53A76D97F51D97541DDA75086EA35F34E116E549121348D42AB69550409B1D8CA0EECACE98469160131CE3BD44FEAB36207900C589682886D235A6A6DB51FBA80C146BD37EBFF00E53608AE78BEBE48845CFB374F5541364CA82071205A03468AEE98B5908C325BC9325001E2EB31B8DE50DFD176591F0370A5C44F744CF4A12E842730FCD18E15F6E5003F893632AA6E94FF00E3D06A981A66E293ECF584D7E603077A34832A6435F1D34C59521D5127885A077E8B2C8206F657776F036D7B271D604D97B469F49446DE6B4B752EFB2BF49DD556E466BC72A58D37150AAD65496BEA7098A0CAC986EF40BAA6784644ECA1D6772A0EA179A2E6DBC91744991F72AD960B81782E741B7E4A2A7B440B1D5B3CDBB2C3024384547F14B4943A81907B8B12B130C498FA26C82DA6D04211B2153602B624F65F9227D557108871254E23BC82CAD716CC282EF9A929D4BB551AC6AA0930DD9169D51ABA934812266C54FB22ED225C364D9612434070AFB4689CE6E090F746E2F0B3B6917E3941A76B0F00FAC92E513CAB7E480E9D9102F7566CD3B4AD481D9627B37D7488109989F7509D3F2506098A41AF5F444FB3D64993CF09ED0C82EAB57F247D1173B0F524C4F79409B3A49F2941A6C256C654B62C8F08D4F80DDD547AB96AADBA83683BA192FB99D50A4273A98A765182C0D69DC6A536F62174923B5D43A4B782A459CA54937D42B1716A9217EE8D5633C59666A0C8868554E88CEA83E75ECAAE94246F09C5B05AE1671D97BB697054BB088D95304102F4A1CAAE2E3B2CD8660EEA1A3551ECB53BAAC61BAC830C4841AF722ED678281132A756A340CA76EEBA4007954CDC6174EDBFCD35A5D2DBC7BC9A873AAC43ED44826087F74E80D9A9D4B6BD7A7F74E87D41AE349952D4335C15126DC056BC8B2DFB484E8D9101BDEEA7495CF9A700DA9E751C263CC55A403A426B40832898F253A4A86CACC6174FC7ECC9CC9A635B4AD2944E821369B8D0A0812E686B4EE54B1B5BB6AB41E88D788EBECB299CB987378FD531A2BFF24D058E17D7E5F9A24D801200B6E75F826D6DDBE69E30B05AD8577988989411FAA395BF052DD55EE5DA29283437285720EC15A226E80A2CACC9916CABA02A4870F450ECA5406870E51741AB84CC3C5CB0355435C2551A9BA37544E66A6D4C971DB45EEEEE24FA28F0D54B9D511B234DA7FD0730090375129B685D32E6E855EEAEE3E1AA2D6533F8A2FACAA9ADC316D89E654BA3D3FBAA429804686A3CCABB8CEEB5FB52419EC8CD575512E8DDA14616186355ADE4A77FB3D6EF8AEB2BA8A9B6B2A5B65D4D3DD0C46CD64690A5E093DC2AF93C4A8739F86EDAB6C206CF471081E5C2A81F33CFFA32D3079084BF34E9CA2DC48389DB453F67A8022AB2141C398304B6DB46DE6A2AC36BA6C69D337971DD3EA6B0E9116B7C354275FF006D25B3C29372BA9DF159607A29C56DFF001044E23FDC4FC53A8D08908E171ADBF988738B9BCC158917BDDDC71FCCA1D95DB3BEBFFB9D81BAD3C2CAFE0FE01FE597559169809C8B45CD73E6131B19AFF04206824A77F7784816E6552E17F1B7D886EABEEF335085245B99F02D3A8B1F081E6B301AC18331E1005D5F7E0F8C344F8C0F3FB5D3E80DD440FF002108E5D3BAA88B79AAF2D3FDC3C6B8CB312A97082AEA3C057891897877E1D3F7567C3AF0EE3A6FF22839A4801E0BDD4F52B16E82641BE50A90FCC000042754ED0813FF0020857899C4DFE1FBA7B81E1CDF38FF00BF05EC6BA6C0CF7BFD51A21B617CD1F54734087648D4EC57F126C4447F4FC903EDA0C1169B59615DA002DB4191CF6403DDF744DB7ABE89BEF055984DFB22E6BEDF8A13A28ACB62CDB6A394E05ED64D2622C35E14C83784717DA35C0B898828BAB00C0B89BFEA9F4BE1B9F2C6B330B11F5D61EED00DA6552310BF120C3C036D3FEFAA927EED27FC6110316F1675ECB0E1D96BCFDC5BF75872FE92DCA021EF66FB03CB7E8A1B899ED7F577D5623D848C287FDDB1D51274A5C3E49D9EC4E27C3641AD7546ACB636B14039C3DA52333A793C2C10DB8DDA3CCA6D376E111F25FC4DA9DF88470C62B6923583C8FA261AFF0086E9D3AAC3E88DDA5CE686E9759AFEF1A63B5D3A1E2AA6C5B3C8E575C00C0079C042F2264DBB37E8B51369906F9423EF092433F2329F462C097658EABA19E4F10BFFC4002D100100020201020406020203010000000001001121314151611071819120A1B1C1D1F050E130F140609070FFDA0008010100013F21D005AAC4A2069B0C1C0295AF32969557AA9B82B9D1A6A06A3E1B76CB47761A3DA2556562C4594A0A3CA39E79AB3364C442A65E5F49C1921AEB89548CB737D69A5F6875EAAF101552C9B73BB55534002876449D0A1645FEDE668A2CC0E42718F15377B26C977C0BA9CC30A75F2FA4B12D31B38E902EB0CB1ABF64FDA8EBC9BEC79DEE5850D8DCB870720E604A9B4BD258EE3826314815FDC6E4479197CE5C6D66877339DA7B4B701536F3DA54454E30C2567EDBA2A50079365475629544F582972954388198DC68C3DE691B55835ED0CF572D96409E3B09F2AA8C29AF3DCB316380D9080D01A359968D03C94C60EF3700858E4A532226B158E20A6B743B4B01F52257DCC4FAEA3477F533F598410B2547A4033F38ED32895B3F5511426EDCC2B8B4EEC4D0A476FB42CB5AEA0B9A2977E79976322C5C49C768600CC131754A48A22DAF057670DC1C50A8A239321D1851543A30C5F8B6B84BD8BC56DED301E90311244E8BD9F883514B63F7A4C8314ABE2A571DF4DBFA873B03F24E9202754A963D0DA552B36B23B9292D8A0143D9A99F1960A7132D075F8C0AA430FD25A831238D931762E3A3ED020977D312A8D2D8D25E4A1C6B9B9CA01BD6626B113B02AA43B68767350586FC2B1D65B39CE2A3632ACEC9BE0AE984D0CB51565A97B864019AAA6597B1EBE9397AB18CA462459EBA5EFF00770FD9355CE258682B4C1CCCB8A02EDCB95B9480E8170CAC1CD63D21701D8E0F596DA550AD8DC016D1CB783E5FBD269558381DC4881D6399680596DC424A555D400C8D36F498F1B56FA1FEA5BC0AE5BD435CEC52980D628011EB7E911B7434042DAAA8CDE7BCA9407665AB01ACD33A1804D1A51C75602D2C3ABEAAC5CB055CB7ABFD910AAB06F98C8801BE6CDC69B4B54C8CA38ACBB65E1CA9BCA159818E47E2626DAB7DC853F9747E25830B51AEAFF51A1E19876A15832FB47BEA6DA82E40F486B6D75180E4EB2E9A427419F2B82712A81168C683198CB54666FF0058A309553B45EDC187A3B6A6A4F9DC5F12EF39E0BA6080AD3D5DE53298DF1DBDA601C2F1B5304EDD7DA566A855696FB8E31CC006CBB5C34EF8A3CE528B191AF135DBA7A4BA2C06EAB835C7D0D43148D931DE6FE7AA54AAE85FD26267E9A7CE2E752F55CC1B378153930716697DA69CDC1799821476E2220E5E8F3E7D2006FE5D897C012EF8186E2F32D40D6431099FDFCC6548B33E17A4B48DB83199D0C3AF6ED2B6C710E4CC035D6FB8B1AF2CEE0A24C161AAD29DF9EF08EA88804A306B17896B7A11E48BD045A2046CDC4216E0D7BF497237CB9501215DF7B975AC90D7083B8D1DACCC21783DA572850B529CC3B695A9C197854286531B25F2996735D4866CEAC5C5598150052E976B2E64397463B15C35FD749C83564452F1AFBE0069400573D612610B5979025A9D8633C666214FB65F306C5988D2C28170E0F780B4F57F28A896B0A6BCC8B3657284BF769C13BA530D726EBF73320AB2439F79719948341AE7CA3288D0BE7F6A008D867711CAF694084C19A9639F661A38382EE268434711A578C4CE507AC3F5719FD389C66EE5C7243338AF297A2E6EDEF1D22C0DA061AEDF6962F7569B63BFBC4EA28AD0466D32AD758A58876B1C0C124098B6ABCA003FB137CCBB1D7067B41A1E4C197BD4209382B6BAE6023A6166AE524DB6372DD316D25273468724E5008DF77A4A0B03D131EB111C886C4E7BEE16FA27EFB4DCB3EF571C4CE6E07712F9CB0BD4A33D6524BBF637E91B5391C40C22959E2CF94B393B15D6B7D3B3D6E5BD02D585285B7D2DBE200B3B51628BE79814B356DC40808182CDCD34FCE07755BE86C8935EC57C5C03616B2CAFF51AAF5B55F17C130305C07926ACF75B735A4FF4F39F4821BD53E408A7AA85883282565DCBF3C42B32DD4F4958F6314B43DC22FA167ED4BF862F207D3A43A4C1287826174A5CB3761A5D9EB18853ED258DFA8712FCA0B178CDCA89C0D1140B8F5AF394EE62D158EFF68FFAC83474FED1DEF6871F48006285376148202396C039AE5F49618EA24D5A2CD9C2E1D560DD280818029B5F2FDDF498E266EB2FB448E95299F48DCAA97712247B65014E4E1302EA11B3151B6C6387D5F797868073CDF1137564DE7F12D7A01597CBE91E15D408E3508426C5B5886974A262C9A46AB58F297349CDD873C62075452B02519785CD6E5753A4401DF1D2E2AE03DCFC477016E4668FD260F6BAF7FF00534140BC6752ADAE3DA05730EF5942EFCB1E051F588E29F396F6CCA3425AEB3DBEB00F9856D8109E537066544E23A6BC7857662146EFBFA4511DC1E238D98A0EBF69C4DBE4C1C180505E8962C6E58CE52D686F94B414E8E6A512C50035DCBB9A7EAA7B7F24690D020A5F879B32D5C96E5EB2DBBB437E3CC14472316D370587CA288EE6FE5898B60AA5BF3CE23E08AAAEFF00100F71786F72ADB67A994E93D11BCC0C621AD83BE2977977980D7175CCBD04E4E2FF001394F1D67DF997A0A6F4F488986481AE1767EF1CA3808E7317D2D80AECB8B3475A95873890276ABFD6628C3453CFE652986D0294E19A9F7DEA74958950089995E2988AE1EB14CB89F558D38A6B79772A106E961FBD22BC6DDF4F850AA7565774D6B1DA712D504E721D9CEFCE1C84D91B6EC529DDE8E65CAB61A0D5E9CDD2B897ECD9878E654A95FE417E15297186DAB8C5D56EDDDC56DBCDCB4794A32961A50193F30CA4D8BDDD13DA6080CEF83A1180F914CDC3E32312C9ACC68867E0A95E152A103C2A54A95E152B32B12A54A952A54A95F057895138ABB8963E9024DD4FA57FB96DB45855F36E9D9FDBD7C2B335B8754DCBA8F412AF72B108A952894F054A952BE1A95E15FE4AF89C32E89A68C2F1FDA3F0B14CB789550FE1520C7C7CCA952BFEB3513F9118FF00D90FF1578D4A951F0A952A57FCD3FC57F05CE7C6E5CB9DE5FF00E04D7F24759C4EB2F319C54E9FF84D5FF66E3D65471344A952A54ACFF143E0F85F85CB97FF00D02E016CBF2251561F2F04682BDA23411E8CA40537A8B82AA81FC65E6AD950BB66C75717F526109CE3B11B03300DE1C7D63B28388F14C7CEE2B5DE965D7D523C9EB79696F7C10A0F6C8063CFCE36A03C11515ABCB52B06DA5F40B7E00856B8963AA574260DDD724702A56013375AF27C00DA743BF8509B69F405B19340C06CE8D6BC0AB9580250D4E8411F53C525B15F343EA914038C97BF0783683E80B7E132D11E214A10A3CC324C5D816F81BCDD41D14B55A67CBAFA41E4B674BF6DC5E706EC9F6BBE1F1FF662886935632B069A1F44B2222AB1AC37E17901571B1AE4F218EB16EBD82E55F33E6410D605540DFA8B9EB2B207A2A02B09791DE269B48AC6738D7A99845912028D3BF218C285115E0D0B321D938E8120E6B1DF7CC6714526354B23FAD43FB540F255DD534D9ED1430A825962F631673C418B663151906FAB8311A434C003287966B05900B236CA096DFC998A6DEE184D271809D370CECE752C57A15F8E4E65E5AEA07268766291102580B853BDFACC788A157C567E728FBF0B4BBA5C1AC6A17EAD2926D79DB8E936C7001E791EC84A36BBB98A72B3B54E41514E54E2F8611A1289593662061B304A3B3D743C732895E5C380AFAD61333FB8386DC6BD4730ECB06A831F814A15B7B1BCE55BF47BCE2413615C1BD721D63F34BD42C26D5715C8FBE67871888A2EB5869A2622E481E44E5C9B9A622D0A1BC55E4FCE2DE183BDB3EEDFBCA80BE60EF564AA376EED967A6868365B8E7A20B5A05B341C7E7D65734608149BE38AC4A7733A6C65F58A5C94075D56BA0CA6568DCD191AC9A724F3E8A6FB9D5442A738BF8B2B09791DE26165CE6F043DDF9CDCCECB7648FB56F55295CED100577D790D4FFFDA000C03010002000300000010DA09A5B963033DE827E114FA7BBBB833014395816236EBFF00E10134862D2ACF657DDB4472395E4A5A3D3BC33B9A877B457B3956F324599DAED053BCDE1133C17173686FEC6F7BE737CA8F2A0E83779DD766618CCD86420037CB193E735D327052B81A62A81C50321A80CB3CE30D8A02BB61E832BA59539B0C77DB6C31CF6DF7D333DE903DB41F638BD175FF00D77DF7DF7DF7DF7DF6DE5EF7D8284EA0A01A2094F7DF7DF7DF7DF7DF7DC3D241E6957DF7DF5DF7DF7DF7DF69F7DF7DF5AF6D77D77DF7DF7DF7DF7DF7DF7DF7DF7DF7DB7DF5DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF79F55F7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF75CF1F7DF7DF7DF7FFF00FF007DF7DF7DF7DF7DF6C9BA4AC43DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DFF00DF7DFF00FF007FFF00DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF7DF71FF00DF75D7DF7DF7DF7DF7DF7DF7DF7DF7DF7DFE23BAEB6F7DF7DF7DF7DF7DF7DF7DF7DF7DF7DB7D75DF7DF7FF007DF7DF7DF7DF7DF7DF7DF7DF6D2F2D7DF7DF7DF7DF7DF7FF007DF7DF7DF7DF7D53B2F897DDF165464F87675DDBF88C1D0D5DCFFFC4002411010101010100020103050100000000000100112131105141204071618091A1E1B1FFDA0008010301013F10DD91C583AF24987600E3CFE2D753CB15DFC41DD67E97487E2D37922061F9B4FA04830F51D25E72000CA3E85B3D79F88C68FCC692AF61266409D192BB26F0B45DF23DC1C6191202A65B244B8C2CD67D08E8BC3F5119B26F2C5EAE3C6EDBBE4634850C81DCF5B1F20E7B6B63C244DFC3118F8167C6E7E58A3CB1C2B83963D7970BD6284E1B03B21DF164764F7105B120845B1727A8601D955D9709F887D45DF9B5C7E1B264AEB10AB52234ECCE1DFF00494D59F050264C3F0598F1FE3FEDD8BDB568EDB5AC8671BD1765607C80F2FEAFC2E06BD42F47C7333D2463C88BB491D817AFB2B70936DDBDC7E055B9A1FC9B96517675BF1212CC90BDDD5822201036602324B0D98506CD9930313E7C3293F2D8986E972B3E73F4E59FAB12637CB1F936261221FB260E7E8CFDAE87F6BFFC244C5F52871B424E3FB6C4CD850182DF7CE273EBDFFC3F12CDFE3FD41FBC337EFBBD3FEE796163EEC7DD8FB8093EAC7DD8F86103EEC4065FCECB0B0B0CB0FB90FB90BFFFC4002811000300020201010705000000000000000001112131104151612030407071A1F091C1D1E1F1FFDA0008010201013F10516C732DB85976FCF3A13D0FB8D2657EA32346027E8F2196F03AD8D70526224530D66096C8492CB1A7425D9234DD236CB81EDC7D3FB1A732BF5C8A8A47938C934C48A5147D991A1A30C944CAD8B558A9DA25E622542F0C6A64564CB7464D0D1C21A0D221CCB1E7665034DB8D09A581EE04B7419B5B2329A812837584C61931B43BC11F41851AE04C466236B81B6B224CA64D222CE25141653416C48C0A3213AFE434C06534DC30494CFA3A21714DE7A075468223A37AB03167A2F65E0D81A5D952D70D093984C8B8664C993256908C0848C9AA7045E420F1C289F252F2314A52944CD89B439EC0580D8DF034B50A93942E06EFC153C97B08BF2A2FB8A5F984DB23A7E02B48750909DABEE97BCB3BF8F51522798EB794F3E75FB919DB6DFABAF1E3FD182B9897D94C7D49747A47A03F10F0418F65CD19B42778852E870C21B2DA189C48BF026F02EF5F6178068720EDA13B684EE60FFFC4002D100101000202020103030402020300000001110021314151617110819120A1F03050B1C140D170F16080E1FFDA0008010100013F10A108A242A0BFE57CE3E5661288EA056C3DF383083AE46B4CF9C47D4805B2873BE3D62850A322A07BFE6AE0C78540E4789E0CD078BB849C8ED1A79329E0228D8F4EE195EB9AB7E4CD5BB3CE47C983081873E6E48DE8AB6348EB4FFDF439BEB53668D85E440E7FDE3050A547CAD83CE9FCE3D4023A1B448BB77AD5C44791D13E4FDF1AC893A13E7284579A4B7E767382D95341525A1CDEA78DE16E3235046081B9555F1C61041D9750D88806AF1FEF00814EA05146EC0BCF93080E1CA20D9C86A5E2F2F7882F3F6C9B88FE1E0E7B742492938235BD2EDC760A623CAADA69D1C1FBE2C00A001454D9F3FC78C0DCA0DD7D71D93AEB224690746203AF0E2F5868CD70BBE38DE6ABC3726D6878E4FBCC04151756D2A5F15F0E3940526D620FC397F1CE418845780B1AF37AC21245F1D9EB9D3EBDE5C1B13429B36974EF9F582D12DEA143B7F0C354957A6F7D7ACB8E8927CA7B36C1D598B922C80D88F8D6BBC061A9312AFC38E386EAC99F65C160CD14FBF9EF0C944C4162229E613F2F78420B052D9C08D59E787AC4A0F84A241248BBDA4F9C72B06A39B480A3519393E7145A977767885A799CE03B9E4876D0771E666E7EC2A122F2793A3284A025CDBA270E66AE2A0135A10F3CF784C3263BA9292B68D3A44C40A0A00476DC0EF73F382DA2F50EA0525D2E31056D058134A749CFB39C7F23B0C51B08D22535BF583EFA889A1D23E37AFCE186834056B4C5A4FF0017BC7C42D13B6E11BF866F32941B6FCFB0FCE078B564238DA797AC8B1020DE00A92FDB194AC201A3C9373FCE35315A1B0D275CF47DAE588C1982BE0FCEF0CAC159EF673E758A10D2C02E1A6905F9C0F65374B2BA76D0A8253580F01B2723551089FB4C41E3DA486F7EB6DD7FDE3F2ACADD992EF8B3F7C02E41FE4C344FE759BAD4503066B50E2570982EB6CBA26F034E28E80E9D104FBBB7EC8565825367E253F7F184806AE26DB8F24378E702C2CE520DEDAE4EBCE42DC5EA3E694DFDB001C494E0F3B39A2FEF86B3064324E4211A47F7C5C8A052D02828EF95FF00BC406F0349C6BF1279D7BC24F4011E55BCBAB897135438546AF99F9C4F4286A319F7CB684A8A26D3475B2E150E404959A1E7C4DF9C741159064D4DBE2F078CFC5A01555BE9EB64E704042448DC04A378535BD386C5889546122AF93EF3C60B7628355101BA68F182616594DDB28372062F2C6305B4FE944988D830F0CC109E6AD28A23EC549E598B4196A550DD93C8C6E84605C03884004137C08549EB346CAB01A20A021B75D0EF1F71915349ADC2739639EEC9C6F5F3C657E131248AB43E2061A09B162BDC78E4FCE3B0204BA041A03986F5E70252805E85B0D9A35D7786467084A3411273C9F38423916A06F86BDEBEC993D0036CEFB42C278F58FA82C2842B606584BE27C9E3EDF8C44309BA75ADDF79366D07698F8DF09C3CE0F962A50186DF7500759CF8BC06C24EB575E1FCE3D52A104E1F3EBE73717D018F058FC3ADFAE0AD4E91117048F67998A41200E59887414F3C122C72F59904445B74E689C110447B856ECF1ECC87497E935B6DE4FBE1628053A2ABE63C49D5DCCDEC54D4B85DD740B978AC5380EC29E75AF39ADB0E0854E5D6FB31ED45361256A1F7FC17AC8CD342158107B25938ECCD8669603944D6B8751C55A90165BF51E7ACD6624A35652C74E9F6EF010D7340D65F98FDF19D5A81A6AA41ECD738C6F9300EB47ADA0A2830702588CC0AA24D3A31B358EF384122B6BEF07378B93A983A2F39731447D979D2486A5DE080BBA00D537AF208FCF9C1AD46F2843695E63E1EB79A541401B389F477FB631252840C17B757DEDE702D01ECE9BDABAF9F462C0312952205C305A641C5A2AF0D2EC48C9F808092C02BC0D0D14766C48C05C91D6DDAA8F062A68464AE39E868D88EDACE680B291A4CD819366C87181E56203946B4D61EB6185B43D8C3B12E92C429CEF9EB0841858E85410EA50938CB3989B2435C9E2E1F0C62A9AE65EB1B42655090F2518DF72E1AB4832341DCF871BBACB1D134210A6EB3BFDB15A604043CA1FE66541E10007A0BDBC673020252135D0DF3E0C1474A29466C85D0F9C9C09D92829D78CE4E40E07AD1A2023CF94C53C0D4B23AADF44BE70CA1700DA17FEB5AFF00584D4EB08B342FEEC10A124761BC0BBE7C7BC560AADE322160460068C774996106B3582F24A3870B892F2548DA832EC02FA022969041AA92F8DCB576F78544488A9F3E7F9E32645D97A2A9946F7DF831501AA1B9B80CF53ED888842E826CBAE6B8D2091A01AD51F939C464563693671FCB9B00368DDAEE1BE1D7998954CAB451D6F5BD6091A87B292736BBB7CE2487BD82A891E6BA3AC755355B36211F5FF5901516103D92EF9761D615039C140E200684142F0DAB1699987089AF1B64792EBCA44FAF53849DB4DEB2C7996E53AEC2545EC98398B99A684EE8738B73B45C741B77D718AC161BAAD4EBE3DE26D58F09E4526CEBD7786A2F42891550F48CFE26A421B39BD2F90D7FD64D919B4A388243C6CFB9808518C3B0344965B3F3858299AC1DA612733D3DE222C208A91D25E610FC60CE10315BCD8DD78F31FC55DF6D204351B9A13A7AC78E4E8D9A9F8D0F582A50EA4DD95E7FFDC3CA088509399BBABCE3394A552ED447D9A3C4C40D808726B7B3FCE454881A1D081F3F9EB9C2E8410D3DA16FCAF79E7A50436FF2E1CD0EC0247CFDB2CA5825B6F2A73CB7F9E339E328720584388478C47A401A0D69D213F770763041A0360E1EF1E570C88D40A1D7FA60B648CBA7954EDF23CE03B05C12EBA9A09810FBBEED8713AFDF1BFC8848ED446146F0F1E37857516DB670D4DDDD9FE703B9436780E90B79EF9D995863150A2D21DB4AFCFCB9B2E6DA0954B7F735837B28261B4466F57D7E4B6DC11764A1CF3AC98A246E851DFB467ED8A914140EACD7AC8CF003F6E0F0C7EC78C4C82DA79D8972F079EBDE2C0A58A2201E004DF20BFB65606C2D7A463B7483CD34E288F70721B5F9917D38D6B86E701B7A9CBF97AC650A507CB0EB909EFEF8FC05E441E055E7D1D9CE08945877B4B4586A28A80DC14C7E439AD32DB4AD80A866B1153806C68DBAB1C1C08DCE9C69885DAE2574E26302494E445443EF8D8CDE172953DF9BABF79D75864682C80597DBC7AC35DB89D09C9A75E39C1CAAD2831629BEBC5F9C4050A804D30744FF0078AA906D83365E82B7EDF7E7AF910745E8BD50EEE2201D5BAA464E38093B739A26D765673C73A3376744382304EFC5D22EF81E9367D527807C8DB8A58512C0481A03CF5729024F82E83E470F9F17159429A5BE0273C94F79522D2C4BBF21FF004E327C984A5E0317EE9A7BC50475A14C5BA42078D5DED40035D94EAEE7F3DE6878C89D9F6CA1A4220CBF33E5FCE1C062FA77A6CEB78087A48458B4B234F1FE9C4A07E676241D5B79C62CC780BF5CEB8F788A006E9083DF23AE3B31FD5F00C3A44F604FB60D2EEB80C50D96B34D988541193D44B6AF35F84C9FE3BF23E523F0E1D60D0558C6EB61DE6C02B3B8D540E683BF7C620A587174814A5A104DAE0516BB547B28C13A86FE712B8EE2ED1C2DF47F2C3441004A16C89C9DBC66CE093051C48C3ABA6B566FCF59740D149DFCE3F288E01F986F01351494D231226A9BA6F8EF1BEA04203E47ADA1BE3730B76D90806BCB993D9B4E45052B5B41CEB828CE3FC624194D029BA03AA9B6B5D76BD21D311B6F97AE5A2EF5BC3425F6D8176BDFBC0B00DB50560B2C82FCC316E15D8688E7B44E32B6037A18D8E144FC36131EA86884D830BE1DD9FBE0A02205476E866F8EB8300E504FA686FBD9BC5249946F538318747011568E994DE7CE304765799CA8F9B3CDFC320C4A1402C5B765E1E3E5C622A05AD2210DF74BD88F5963BD1306B7B5B1B0F1BE8C5C0087D8E86001D91F4F35C182A0D79A86D7F18A1B31754938FDEE2171B92DDB4206DDCE306AE928194A8F82C5753C14400744E0785F1EB8F5832B316FD60806136BF9C0017580F3808ABB3CCC11E0CA00D2C1B356A3E3899639D1A849C878E9E300A20A86275F9B8F259484928378F06B779A0C2D2A3D694EF65BAE78CA102752940383E0D7AEF0216C36FBC50514F78C2CB5442AB7A0EDB66B8860D42AC0296B3158825306A04F728B895E6A59C7BC479A9A5E06817571FBEF2117EFEED37B7DE6F2A3CBE7E729AB88DBB7118FBC141B6B83D6427F3F9ACF070403CD43FB21E4C7E2934087BE41167C4265DA4ABCBAB53EEB2EDD6702402D06F44897726F595C861523156204BEA6831DF14D5ABF9702343E0C6CE16FF9D608894E70B3E482EDF38D118A9B3FDE57D934BDCD9F3D7F0C205390AD21AD37F1890F1A14B87678761A7EF4378A000C84DA52B5E036E010E8AABEB4197E1D68DE74F2B22E8EA28F155F0238A908D53A5508177F9C7456DA154473837644DC75A29F36A981DBA7BD10ADC8EC0F6809031B28135EF04D050843A196F1AEBE321A1080C26DE4FAC172DAE056645C64E8307CE04DF18653DB23E5E203EE6FBC566EF1A6CA0E041E2D37AC0EF6144ED54D9BD066B93B4752D24179BAF9F1926868739541F3923979FDB020567968CD15A23930A0432605D395D50C52A78608249DFB48110686C20D2D9061020A17B285B860C5CE33DB9B3BC0AB70D7191DE48CD369737E29975573E586CEF207BB81CE1A0D65E7597D65E5991F1974E766B586970DC339539C7F4686E3A29DCF1F1974E236DE57397448D02786B96DFC49F2518FB37F9C227FAA9B514B389A41F780FE4858C2C1B7C99D6BA720CE81A0E3C1AD754BBED30A647E328353BE4E306EB8130717173970F9CE1806E5413A99C94F7CCC82BB5C0DC263C874606063DB36FB64D718978D6006E0C0EF211CD8C75FA387192AE69855758640FA6737C8DFD1E79B624BE70A39C8E43F4419132A821D040EC569FE719DD58B5B402B8D869E84E305191556DC8361B0D3B344C2D40CB70C5C598B855614E1F7C18D262365CAEA8BDE0F65BCD3430B9712E00E4C50E33C4E33F1DE76C061923E865D643387D28F8C3E8EF2E6F0E32FACBEB2FD12DC85FA246E572FD1F8C1C1FF00AF7D7F9C5474460880108F13B9777047E871F484C04702D759A1F7943CFE325BCE0237834E71ACB8719DB87D2B97D601FA3BFA1C7D6E532FF4BBCEF3AC0B88677F4A975ACAD20BC226931572E1F4325EF2554C07BCE1C670C90F393C7D4CEF3AFD26193132CCB8397FAA7D1EB0B8E06FEA82FD27D1C30704C86373AC72E77F425C989AC9FA8D1F44C8E4FD13F44FD1D64C9FAA5C28C86F26FF004987D5C7E87D26FF00A1378E1FF0A64C993E867466C7E87E87383972E5D7E89FD09FF21C9AC38FA0DFD419DFD6EBE87D2E5C70E32FE8A6387FC7EB27EB4FD3A0AE49803A8DF3912DEE6696F59CBED700027780456CCD90098F8377335BEB07C52E2509CB893FE527F40E0FD0D2396E081C383D4D739C9A73956B824C5B3D60C1128E702759A68D779C187383BAFCE749D62DFF009673FA2FD5FD07F44E3261FD7EFF00A8FE9EFEAFE83F5F7FD81FD1DFE9E3FA471FF3DFD1DFE8EFE87FE1338FEE67FE0505E3E8278C05C8D991B31D7386EFAC93FB4CCE4E663CE00F24E0B9CA3BB71463CF19D0788E22007186DD6F206DA7BCD42EF7FDA8FACC9EBEB327FF00706FF710AE3A61EFFB81A729F7C3DDFD6718E1FDAA026786005D6CE30D668196E5DFB5CDE4EF3869EE62365D86340F57121FDA50B7B6E56DC4AE0B243056FA99763E33E53BC345D572AD9D4CB7FB7EF0E31C3FF8E4C993FAA7F627E26ABC526FE638A61163BEBF39C7F9CF48285C5277D11C5000E44D38694220741F380A2850E7D7F6BADD110BE0D1FB65E0A009A344B7437DFE7270304BE0D639804CE97C36C763ABB04C4B86051615EB64618644F66B6F797A1BCD1BCA6E937AFCA3F6C18B60F01F19468D4488AAA00D0AF2E8C6A52294447622691F26BE889022D01015DBDEB8EF8378F9A4D0F213EC0BFA1C6DF06B82AFA26EE0A84AD71453CCA12DD981D4C6A5D05223CE78FA6E8D20303129ECFA248071436137E017360F2BE690D69D3387E8C617905716338B31398894F172218885C58024821C2F3E87DF155A4902CA9B0E1D70FA784FA5908C50D84DF805FD06D87381205560073873B3276AC2A7621B0DE27C2C0A0236D494B5ECF387FD8826A9653B4DF2E4C3A023900785A81E948DC79FBA08EE15B1D04ACD5FAEBD6D8E920CFC38B1CAB94504FD9306350A3E027DC4711C4A480A784D27B3E80D46D08A8050D2E9D30B44DEA75375297C7B3A6F241D0031AA081C989B9B261C201B1A861234375D3832CDD7A2928432EEABB37A75A5204438BCAE3AF30C49CC5F72E43A13C8F43B2B25FBC4930E8956BC9B7002058AB0002F8D0767ADE2A847BDC33A23A058F20BA0A00206A06C1D9A352DC21F143D34C365055EDA98BD2D4C4A092CDABA2F218AF66580DD258B42AC9DE06D3CDA468245343A9AF588324639A01F8B71AD92359E64A0D5C5D043C2A545515983DFF4BAB31A9415D071378644A7E100B0A46BE56E40637737B01A6277A686432200DB51C85357C79CDEC8504AF6AB6C6D0F0F039D7D1D1E11D761B2491526A3D1A56B156682F2EFCB9692DC5410E10686B864A42CC2212384559E499396E59E94D6C814D239CA23B28C2D026C49FB8E310DAA1C21A28860E83D8DB23BC9E29D0A0A37FDCECAE43425B3600775DEDFBB008604F22700684709245C30A08C5D09F750C19629171B4F1C6ECE9DB39C1C68BBDC4A10A30CD6AF509A30823810545F20D85CD8932BB3554F261B66979CE2A05B2688FB8C31E109300C346850586A57128AFF00CA914BA025487CA9D08EDC70A355F0637983234D897402393A5C6851C852FC7D0FBE2C33A775150688840E96E21EBD240068780E461B982C5EC0D858F2DA955DAAEEBC80EA9020848D1DD68E395AC0B21894F631DFDF81AA32C5CA5272150EC0C81E26185160DFDA5F633FFFD9) Module Details Title: Details Description: This module hides the variable behind the control panel functionality Author: Lonnie Date: Wed, Aug 26, 2009 4:00 PM Defaultsize: 48,24 Nodelocation: 72,632,1 Nodesize: 48,24 Diagstate: 1,165,69,533,461,17 Constant Image_formats Title: Image Formats Definition: Table(Self)(~ 'png32','png8','jpg','jpg-baseline','gif') Indexvals: ['PNG (32-bit)','PNG (8-bit)','JPG','JPG (non-progressive)','GIF'] Nodelocation: 96,48,1 Nodesize: 48,24 {!40000|Att_previndexvalue: ['PNG (32-bit)','PNG (8-bit)','JPG','JPG (non-progressive)','GIF']} Decision Image_format Title: Image Format Definition: Choice(Image_formats,3,result:Image_formats) Nodelocation: 216,48,1 Nodesize: 48,24 Valuestate: 2,621,130,416,303,0,MIDM Aliases: Formnode Image_format1 Script: Get_map {!40200|Att_choiceindexes: Constant Image_formats} Decision Latitude Title: Latitude Units: -90 to 90 Definition: -34.608418 Nodelocation: 96,104,1 Nodesize: 48,24 Windstate: 2,28,480,476,224 Aliases: Formnode Latitude1 Numberformat: 2,F,4,6,0,0,4,0,$,0,"ABBREV",0 Decision Longitude Title: Longitude Units: -180 to 180 Definition: -57.373161 Nodelocation: 200,104,1 Nodesize: 48,24 Aliases: Formnode Longitude1 Numberformat: 2,F,4,6,0,0,4,0,$,0,"ABBREV",0 Decision Map_type Title: Map type Definition: Choice(Self,4) Nodelocation: 312,104,1 Nodesize: 48,24 Windstate: 2,426,343,476,224 Aliases: Formnode Map_type1 Script: Get_map Domain: ['roadmap','satellite','terrain','hybrid','mapmaker-roadmap','mapmaker-hybrid'] Variable Map_url Title: map url Definition: "http://maps.google.com/staticmap?center=" & latitude & "," & longitude & "&zoom=" & zoom & "&size=400x400&key=" & map_key & "&sensor=false&maptype="&map_type&"&format="&image_format Nodelocation: 96,176,1 Nodesize: 48,24 Windstate: 2,707,90,537,301 Valuestate: 2,38,173,944,303,0,MIDM Numberformat: 2,F,4,6,0,0,4,1,$,0,"ABBREV",0 Decision Zoom Title: Zoom Definition: Choice(Self,11,0) Nodelocation: 312,168,1 Nodesize: 48,24 Aliases: Formnode Zoom1 Script: Get_map Domain: ['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19'] Decision Jump_to Title: Jump To Description: A "favorites" list of locations. Definition: choice(self,0,0) Nodelocation: 96,304,1 Nodesize: 48,24 Windstate: 2,483,293,476,224 Aliases: Formnode Jump_to1 Script: (if @[Jump_to=jump_to]>1 then (Latitude:=Favorites_lat ; Longitude := Favorites_long) )~ Get_map Domain: [' ','Washington DC','Manhattan NYC','San Jose, CA','London','Paris','Moscow','Beijing','Sydney','Buenos Aires','Mumbai','Johannesburg'] {!40000|Att_previndexvalue: [' ','Washington DC','Manhattan NYC','San Jose, CA','London','Paris','Moscow','Beijing','Sydney','Buenos Aires','Mumbai','Johannesburg']} Constant Favorites_lat Title: Favorites lat Definition: Determtable(Jump_to)(~ 0,38.898141,40.75,37.32,51.5,48.856667,55.755786,39.908173,-33.867139,-34.608418,19.017656,-26.201486) Nodelocation: 224,304,1 Nodesize: 48,24 Defnstate: 2,12,496,416,303,0,MIDM Numberformat: 2,F,4,6,0,0,4,0,$,0,"ABBREV",0 Constant Favorites_long Title: Favorites long Definition: Determtable(Jump_to)(~ 0,-77.03617199999999,-73.988,-121.877636,-0.126236,2.350987,37.617633,116.397947,151.207114,-58.373161,72.856178,28.045869) Nodelocation: 336,304,1 Nodesize: 48,24 Defnstate: 2,442,474,416,303,0,MIDM Numberformat: 2,F,4,6,0,0,4,0,$,0,"ABBREV",0 Constant Map_key Title: map key Definition: "ABQIAAAA23H1CI2Hsa5Xzx6FjgClshT2yXp_ZAY8_ufC3CFXhHIE1NvwkxQLDAVALqR45Npt_ozJMdM0UNluOQ" Nodelocation: 312,232,1 Nodesize: 48,24 Variable Downloaded_map_image Title: downloaded map image Definition: var map := ReadFromUrl(map_url);~ if IsText(map) then Error(map) else map Nodelocation: 96,241,1 Nodesize: 48,24 Valuestate: 2,449,398,547,211,0,MIDM Close Details Formnode Zoom1 Title: Zoom Definition: 0 Nodelocation: 260,93,1 Nodesize: 84,13 Nodeinfo: 1,0,0,1,0,0,0,72,0,1 Original: Zoom Formnode Jump_to1 Title: Jump To Definition: 0 Nodelocation: 516,92,1 Nodesize: 164,12 Nodeinfo: 1,0,0,1,0,0,0,214,0,1 Original: Jump_to Close Downloading_images Module Submitting_form_data Title: Submitting Form Data Description: You can use ReadFromURL to submit data to an HTTP Form (e.g., an HTML form page), and to read the response page returned by the web server after the form data is submitted. Form fields are specified in the fieldNames and fieldValues parameters, which must share a common index.~ ~ This posts a form from the Nutri-Facts web site. Author: Lonnie Date: Wed, Aug 26, 2009 4:44 PM Defaultsize: 48,24 Nodelocation: 360,56,1 Nodesize: 56,28 Diagstate: 1,169,39,750,300,17 Windstate: 2,234,228,476,224 Constant Form_submit_url Title: form submit URL Definition: "www.nutri-facts.com/search.php" Nodelocation: 88,56,1 Nodesize: 48,24 Index Form_field Title: Form Field Definition: ['keywords','stype','group','action'] Nodelocation: 88,120,1 Nodesize: 48,24 {!40000|Att_previndexvalue: ['keywords','stype','group','action']} Variable Field_values Title: Field values Definition: Table(Form_field)(~ 'chicken strained','AND','0300','search') Nodelocation: 88,184,1 Nodesize: 48,24 Defnstate: 2,549,291,416,303,0,MIDM Variable Form_response Title: Form response Definition: ReadFromURL(Form_submit_url, method:'POST', formFields:Form_field, formValues:Field_values, formIndex:Form_field ) Nodelocation: 224,144,1 Nodesize: 48,24 Valuestate: 2,98,65,666,457,0,MIDM Objective Result_listing Title: Result listing Definition: FindInText( '(?.*?)', Form_response, ~ subPattern:"food", repeat:true, return:"S") Nodelocation: 344,144,1 Nodesize: 48,24 Valuestate: 2,512,23,421,279,0,MIDM Close Submitting_form_data Module Currency_images Title: Currency images Nodelocation: 216,192,1 Nodesize: 48,24 Variable Va2 Definition: ReadFromUrl("http://imgtn1.ask.com/ts?t=2162029712477879413&pid=23296&ppid=6") Nodelocation: 140,240,1 Nodesize: 92,56 Valuestate: 2,551,183,416,303,0,MIDM Pict: (000000000000003500800006F40B0000FFD8FFE000104A46494600010101006400640000FFDB004300080606070605080707070909080A0C140D0C0B0B0C1912130F141D1A1F1E1D1A1C1C20242E2720222C231C1C2837292C30313434341F27393D38323C2E333432FFDB0043010909090C0B0C180D0D1832211C213232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232FFC00011080035008003012200021101031101FFC4001B00000105010100000000000000000000000600020304050701FFC4003D10000201020405020305060309000000000102030411000512210613314151226107147115328191B116232442A1D11792F02543526263B2C1D2E1FFC4001801010101010100000000000000000000000100020304FFC4001F1100020201050101000000000000000000000102113103121321512241FFDA000C03010002110311003F002DE28E2DCC323CE1292923A3684C2B2B09549724B30B0208F02C2D88E4E33A98E8639D9B2B0CCCA195A500A037B92031B5B6EE6D7C6BD4D1412715D74ED4C679A3CAE331AA921EFADCD948DC1240171BE1EB4F21D645166C344A1117E7A705868D7ABAF9F4FE973B63C5F35834D99038CE6357C92F948511730CDF340203A88D3F5B6FF8E205E3C9E5496A1A3CB1D230DA634A9D0EC01DAC1B737EB7FF00C636A569E61A465F9BDA357DC57CA35D955874EB72CCA3BFA7F013247242C0B53669757DB555CCE0DA45037DC74DCF62011D2E717CF8160FD4F1ED4D1E8D30E54FA8D8AA54F30A8F2749B017B0DFCFD70C87E20E6B55A521CB6899ED761ADACA3B5CDFFB6377359065797BD429AD4A913B454E92D4BB2B953F7C83D56C09B771B77C739CCB326F99F9586A0862F7A89BA36FB91AADB35B7BFD3A63708C65F82DB0D578BEB554F3865E9229B305D640F63737F187C9C59984B4EDF2F1E5D2BA8DD5C38BFE476C3F21A1A56840112AA85D8228DB6EF8AB3C314CF34614AC8A3D0EA3707CE0A8DD515B284DF1033584B44F9665D1B817D2C1EE7B5C7ABDFB5F1507C4AAF8EECD4796680DA75FAEC4FB7ABFD58E3DA2AD69552B222A9530B9009170181DC6FF00CA7F4382BFB4333A83054515197A2915848E94D1318D8B10000482C05C023626C771B634D457E15B05FF00C4BAC6628D96E5E0822F776161E7AFD712D27C42AAA9637A0CBE24BEC5A56008F37276FC8F5EB8D9A7E21AE66A612D330590C77B52A0B8E58792D7207564B76D277BF6A7491D5B2C0ED4F582624A32E9400BAC8C7402D7F5DC01B8F63E9B63351F03B189C71330A8BAE561A3D7A104DEA7D3722DBF7B0B74EB864BC79551186F2E4E0C8DA4C4F292EBD7AEFB6DFAFE18B34134F0BD2D44693CF1B318579B0A1BC416EC6C0D8C80A3F53B84FF009B6B9F6BE6722B53C74A9F3AB1A0311A34004864B6F723D16DAFFF0011FC30D47C1B6669E3CA959F956CA6DA411319FF00766E2F61BF6FAF9C6A70A71055F11D4572554348A94EB1B46D02B0D5A8B6E6E4EC40047D704193AD74C6A1EBA8F9284A9895E38C30EBA85D09B8E9626C7722DB5F1472CA0A7A3E31CE8D3C31C426A6A77658C5816BBDCDBB13FD71CDCA34D50F64F00238BEA48DFF00D9F0DB7FFA8F8F2B258386E927AFAEAD99E14560C0DC9F5BDC002FB93B01E37E831EC0FA78B2A580BFF011003C9E63E28F1D514B5191433A46D325255C7553205D45916E09B7B120FD01F18CE649303323F88DCAAB092E50120DCE94AB469D6D7BFEEEC37163717DB06B4B5B4F5F470D652CAB2D3CF1892390746538E0D1C3494B2AD7F36367BAFA796ACBD54FA52D7D440EBD6E5B7C75FE0FCBEA72DE15A3A5AA4E54A03C8D1937E5EA62C17F0046D8DEAC2315689366271855A9CCDB9A4882961009B776DCFD4DB48C732AA669564A84907379BA8C5AAC74B74B7E43F3C19F1E33FDA3550310124218B1DC0B22917FEA7F0C09A2533711FF0015298A15DF518CFEF18004020763BDADDED8EDA6AA281E43699F36A7CB07D9AF206751AE4882332802C6DA8817BFE43FAD5924CCA978596B96776AF79E32D248AA498D9B48361604923A7838D4A3923817972330894DCAA8B926DEDD0628E7D553C3974B3D3D5C134722AEB49E9D95AC181D8DED61B5B6BEDBE32B34461E49219AB33052ECCDA839BC614DEE41361B5F075C2F22CB4F5D4332B49192ADA588B59858FE980793326A7E25353A54C040473D2EA77FCC75BE3A070DC6AD985648232008E35240EF7638B57048B15B94E4F459555548CB2297950B3346CED66161704927AE917F3618C4CEF34CB32F92714D9424F3C51A4D50E5E416D401EA0DCDAE373E6D82ACE48190E6237B7CACB7FF0029C738E24A79A8F32AE98C72BC155491B348809D3A945B7EC2E08DBAF4C73D2FAC84DB4BA0832CCCB279D654A8CA569A4A7D1AA312482EAC40BAEFB583036F17DF058BC3B95870450A02BDF53FB6DD7A6C36F61E31CE328CB2A2A63CCEA984AAA1A38D049B34858AA8DBBF526FED8EB9E904EE7AF9C6755D3E9941B6BB1B60093D6FDF1834D7FDAFCD37EB49076F77C101B69D835BEB8C0A7B2F16E67D6C6920B6FEED8E71FD36474F7FDACAB237FE061B6FB7DF7C49257D7EA7787ECE5E5005D5AA7569DFB916B6DED81DCD73D4C9B8C25F98328A7968E02AF130D408326C41EAA4F5FC31873713C5593354365142ACEA5632A185F725B5DC7AEFA7C0EBBE3B2837D8060B1FCBD64759F2590C52B8D7CFD4AAE771720EDDFBE34A9E5CE16451514B48C180D5CB98A94F26C41BFF004C73C4E20A7549966CAE964653A6231008AA7558DC1076EB6B1B93F5B8D0C9F8D05148F49534F0454E50B9969974C88C5035EC766EA05F6C52D39345633E23D3BD3542572296464BD80EACA0822FF42A7F0C06E434FF0035C43411D4338855FD7207DC061EFB5813D3EB831ACE2AC9732C966A4ACAFAEAA998F32294512AE86036B2AB6FD4DFC8270374F2C0BCB3126996326D1DBEF036BDAFD47FA38EB0B51A60CDBAF4A8C86BB454C80693627F9255EC77FD3B1DB14F37CEF2FABA431C9254199548D05CD8DEDDFA7FF3BEF8DC96AE1CC7286A2CC54C9191A55F7BA37617EA36E877F7F3812CC32414B247C9796A24908489348249B827EEDEF61E3F1B62853C9328D1DEAF358B988C3D42FA56D600ED71E36DFDAF8EC3C2B098F2C6A890307AA7E62DFB2745FEFF008E39D64F147F33CBADA1AB893985266829998C86E0E800742495BFD45BA8183C8389F2D902A18EADD1D599235A0756D17B74BDC81F76F6EBF9633AD6FA448BD2D3E6F249500CB4C606494469A413727F777BA9E83AF5070D7A6CF3FDC4B4496042031EC3D4A57B74B07DBDFE96C97E22A75754A7F9E78D34FA5A9E5BDEDA85CA8EFD40FE61D31EC7C491875698578529A59D29A40D6524EC5B6B5FA9DB61BF4BE396D97846C4FF006A53C9CD96B28D22D63D53154B2F309B02475D26DFA6E6F89E8AA6A239E38ABABA8F5F282BC61D75734B1F1DB4DADD2FE303B9C677419AD1C74A16BC1461217932E690DB702D623DEF6F18CD6AACAD51E39AA6AE38E4979EC5B2E656F4A92D625BA006E49E83AE2D8DAED15BB3A17CE5209F92D550F3AFA797CD1AAFE2D7BDFDB191111FB575E05EFF00290DFC7DE6C0A34B954AE6313E64616AA12FA72D72E588BA8D40D89218106DDC1EF8D5C8B395CE78AB37A88A278E9D2962450E46A243B6E6C4DBBD878C0A0D26C936F24D9B708506719A2D7D44F54B272D63D11B285B2DEC77526FEAF3E3112FC3CCA55430A8ACDBB164FF00D30B0B06F962CE9B51E3FC3FC9F6066AE22F7039AA003E6C17AFBE1D2702650D1B2736B7430B15E62DBFEDC2C2C1C93F429594D7E1BE4E97D1535EBA948B8913A7F97123FC38CB100715D5C6CC180263B5C77FB9E058F9C2C2C3C93BC8ED45AA4E078208F5A66758486BDDD6327D85C28DB7EF874BC074FCD475CCEAE360435E348C13F53A6E7F3C2C2C1C92BC9348755F04D3D40515599E612D8E9B890213F5B0F3BFD77C42BC13410CC2D5F9A17516127CD1D405EE77B74BEF6F385858B925E8521DFB159744D75ADCD03150BA96AAC6C2C05F6DED616F1616C31F81E8A5500E639A8502D6F99BF9F6F73858587925E8521A780E958B69CD7335B8D3B4A3A0E83A7D7F33863FC3FA43297FB5B3506DB859EC0F63B5B0B0B1724BD1DA87FEC2D130D0D99E6AC848257E605B6E806DD3FB62EE53C354DC3F515555054D4CCD520065999481EA26F7B5C924EE49385858B7C9F4D9523FFFD9) Picture Currencypicture Nodelocation: 516,96,-1 Nodesize: 96,72 Nodeinfo: 1,0,0,0,0,0,0,0,0,0 Pict: (000000000000004A00800006BD0E0000FFD8FFE000104A46494600010101004800480000FFDB004300080606070605080707070909080A0C140D0C0B0B0C1912130F141D1A1F1E1D1A1C1C20242E2720222C231C1C2837292C30313434341F27393D38323C2E333432FFDB0043010909090C0B0C180D0D1832211C213232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232FFC0001108004A008003012200021101031101FFC4001B00000301010101010000000000000000000405060302000107FFC4003A1000020102050106030703020700000000010203041100051221314106132251617114329115234281A1D1F052B1C124721625626382A2F1FFC400190101010101010100000000000000000000020103000405FFC400211101000300020202030100000000000000010002112131031222511341A1F0FFDA000C03010002110311003F00B8CEBB593E5D9C4D9798E76216E8E2775EF095B80001EB6BFA718C26CFF30882B4BAA2551A9F5E65279D88D96F7BFEE2E31ECC4D2B6779854564134EAEE94B1C4A19AE19149D3BD93F112D6BDAF6DF044794E6124202A51D22054558BBA0ECB62355D8EAB82140B795B1F39B39DFF67A439EBF93C732CC99D112FDE3928A9F6B382483622C579BEDF91C0E3B435B144D2490D7B12FA542D6B588DFA9037D8EC40DB7BE08972976A5B575251D7449148D318D34CB23DEEA0580B0007A9F7EBA65B052D5490B22B37768AAC586E0ADB624FCC6FF008B9E78C42CF7BFD95A9D4DE1CCF3698A98E8A6D1A7586398B588E9CA63419967365268E717BEC2BBF78F0A3B459EE67459B2B513CD1D2C68F0CCAF1EA5240D7AC0F60CA08237FCB180ED72868E2AE8DA96671112B04BA8219159803AB6D821385B77987E1B8C70F9AE7D1B2DA9A7B5EC6F58A49FFD3D3188ED067CD7FF004F22803935718F4FC4BEB8C60CEA8E7902FDAB16A20305949849D81E0D81D8EFB023CF0654A9CC62995648CC6F1321213510C783B5F6189ED73FCC41598FDBF9F2901A3A853C1BCD1100DBFDB81476AF3496A1A9E37AC3328BC89AA2511ED707515B1B8DFD38363B60E86378ABA476950C2EAA1958789AC0004EDEFF005F4C7D5F86495E4A38208EA64605A42A5492361BE9F2FE6F8BF92D27A1338737CFDD06A8AB0F5D5F1507EDEB8EDB38ED005BAD3560B1173F134EDFE305ACB5866EE564D7AD02C7A7F05B72C4F5E38F3382656980B466D237990357D41FD060FE5B7DC4508126759E8902352D6B31B784494C4FBF231D9CF33A88112D256EABED74A7DFDBC5818E791C4F333D7C2E90C6D23A42A19ECBF3585CDEDE405F0256F6CE38EAE2A5A38C3BD42034F3CFB45212A48B69DEF7B022E3637C52FE47A852A43E6ED6E654E6CD47537D5A002916E7C859F1D657DB67CCEB453C3A5AF1EBD46316E14DB66E6CC3A627726CE8E70F21A9578A59503C67BB06353B0B12A390411626FF00E0ECAE8DA9738574291ACA1F52AD8AB580E09DFA0EBE984DEC76F3080F442F2ACC0366399851E292588016FF00B6B86399D6BD15134D1AEB7D61557CCB1B0BE25F25597ED9AA548C962C8DE43E41B9C36ED22C6F94FC2FC418E4AA923801E355DB9FA0FD31887CA6CB830319B5654C0ED2D2B5354C5200585CA3A1E185FD41DB7C34A1CC69DA296A4AAC2CA3EFAE2C2FB0D5EB7007F6C2D89C4A9165CB55F1120562D2EA1AD8A8DBC81DBCB0AAAE62B4B347A4156914B5CDAF60C46F8D3D07899FB246F376A23A8919528E391001E295B9E36DBFCE314C932ACDD7B9446A6955641A010410EBA091EBA76DF7B613318A0578D51358C8D9A2DEE5A50CC79FEB0A6FE7B0F4C30A4AA8866D4BF0AD622081A6446274486E08D8F2574923D6FD70B30E21DD799ECD7B26F5427559E394BD2C74C8254285429259BD4B6A3E58553767735F8A6D110DE79184914B6601A4422E46E2C8A6F6DEE76C7E98AE03EA540A4DF73E984BF02C6B1851E648B2A8751123DFBA0780549279B127924F4C13C8C56F1923254ED15388C19EB5272CBDFBAB11A9CCC0DC007E511DC1B74207B754F57DA2682253535D1CA44562C76BEA225D640B136B589DEDA6DD7172D4554B51DE8AD73195D31ABA06BF913E7B9BEDE838C2C8E96A0C35112666938D94B0218ABDADE23E6074FAE17B90B4493918CDE5A6A277F8E902214AB85A56D4CC15802771B6AB12479DFA636CA325CCD73B87309E98AD9DD9EEDC2BA21216FCD9D7AF4F7C51D252D5C6E88D5602A80378B7B7B9F3C3386925DDAA2559C9165B4600E3DBCF05BE75114E799307B3CF3E71573C15D4F1472492B2C519D46CE05C32F03C40B6DFD5CE32AFCB32DC9F4A2892695486EEC9BA2027501F91E3CB1594C9A40692231CA402545CAAFA8C4B66291495998999A3EF1A9EA000EC13531160003604DC0B7E9895B2B92DAA1CCD28B364A56B7710AA816731A906F6F53BE0E6911B35A79E1234B472316B1F21FCB79E2624ACA32AD2931E96CAD74146B9EFAEDC0FEA2D6DAD7B7A619650C24A9810DD582CBA4F4DD576FAFF007C7353B9C5BF53ED1D6B525655B400191CAEEEA469F0AF380BB4B33E62B40802B49A9C08882421B0F113C5BA7D70E1A9E9CE615C2495238919497760BBE84B0F727A6150A4FF009EC5542397E0D612CD2AAB3205B804DC61533761BAF534A7A4A6CB2BB2F329EEEB626577766BDE226C41F2041B0F6C174F4D0D7C75B4EC40D4E0A311C104D8E277399B2BCDF39A964A89A28956E59A30C646B050140E0586F73FB628B238BBE8E4266308BA10C4816E4589F7B62A7C764ABCE455FF000E56C0C561CBC38917E68915948F3FFEF5FAE1D64B90BE532473D5462250C488D2C496DEC481EBBE1E2D3AAE5F68AAE563ABC526B04F5D8B0D874FA63EC397A4D1A34999BB39008B30B8FE7F8C06EA644541D86F8B96171BF841B93897AFECD9959E46911A69AAE4AA64284F7874ECBF901EDB0C512512412DBE364B921BB9D8EE76516E48BEF6EB61EB8CE4CB52491AA62CC5A298861B1536076B5FA0D871E6702AA456C624CAB275A25A9A9A8A89425425CF8B4776CCB63A6E7627C3F981800764E489E9FF00D642169E3D11277405BC8EDD6C075DB1414F19965433D449244923141200353016240E6C2C6D7F53D4632A98E3399A0F8ABCA45CB2282105AD7DCD80DFDF7F6BBF6646A4590F652012431255A1EE59E44503515D436E7A2EAD81F3070DF27CA5B2AA33486A98BC8ECC0EAB6E6E6C2E4DEC3DCEC31A5150CD189FB8AA5566D9DD5016079BDF8E0FE57271DCB4750B2AD42E60C582596EAAC00EA47B9173ED6C155E36200772153034F1AABBDEE08BB3726D89ACF7284AFAAF8889031B6E85473CDC6DD707AB54562AE9A9631C6DA9242A3EF4827C5FED078B736278C78C55255596BC5ADA97C17FEF8157D5E196D8F725BEC4AD9A547306EAB60EC46DEDD7F83F277494AB4D9965F1A8DAD216BF249297C1CF4F511AACA6B022A0D2418EF7371D3A9DFDF8F5BFC4A72336A353216974BB48CDCB10D1D811D05B8C6859583D40722AA893BBCE2A633A49122B0561B5FBB517FD4F5C29CCF359E1AB8A9EA238C5306F1468F7471E445EC40B1DED82737A958EB2598C685A5974AB13D44486DF9827E9896ACA81555F21950448B6B2B736B73EF8DBC75E2657718F337AACA330CCA9E5A3A9D732854942C6DDDB44A2E0F0371E9CE2AB25A05EFAA057474E008D2458F55D916EDBB9E87638FCF72FA88E9127ADA5571347658CE90C8189FC57D862AFB1ACF5D459854564ACAF3BAACB3372F6BEA049F422F6E312F5C3B968EB2BDE3CB3B800C30CB1A92A11581009DF81E87E87D7182C749DFB96CB906B207A91C6C7823916270B2872AA2AD8D34D5B94525555C2ADFC5AB7DB7E01FA5F8C319321A34687BFADA890B12B10BA806F766E075DC9F61D31971F7348D5A9E0150F395524ADC91D2E2C49F324585FC858738065A758EA964868219A0118DD574953C724DAC05BA7518C64C96899477B553283E12DDE29B8BD871B5F8B79117E98C27872D3147A6B1D1A3D5F7A577624F3B8DCDC1DFDF13B674D67F88155323E54F51158AA1128F1ADC6E6E7AF90F2EBD39A9A552670F9434C1A570026C196D70C49363AAE76E9D78C1196D353D209E1A79848C2400AB0F107B70C7C82E916F4BF2706195C4C223AC4B6B9017603DFD8E3979E22C8AA232246D036573E9776242B00A41371737FD3DBA60819652CD1066A4D3A80D51B36E05BE5BFF37C3232C493AC63C45EFB01C5B927F4FAE3B322200CC76D441237DF05594C22A7CBA0966D6F180A174B027E616D87A0FE79DF934148574188905AFA6E7A7186459648C94042DEC09EA3CF02064547009670DA420DCB1E6C30358CC79824B434DDF6D15F9DD49DAF7DC7972463EAC518CDE8B4295FBB936FFCA2FE7D30C5A07717616620585F6185396377DDA080F89FEE256D4C46FE38EDC74FDB0FC7ADA1BE6494CF32EAD9EBAB3B9A4658C203AC06B1F0817038B8B91B6FB1C0F2F678CCDAE4917BB717B474B32E9F41E1236C5D2313551024DB4FED832A59952CAC400A783EA31A9E543264F8C59F9E27675638A4A33984FF0009338925094128371B03729FE70E04EF4197C70C3054555347A631235395520F20ADB51205C96D201D85EF8B6666EEBE63C79E3D4EC4C4A4937DBFB60BE5DEE5299C926A1AFCA25606A284074FC6914A01DEFB02011C0383866F9218BBB25F42DAC8D4F2DB6E07CBC6C36C1323BF87C6DCB75F5C64B24833C650EDA6C36BEDC6096189AA4CA0CDF248847A098CC57283B897C17E6DE1FE5FD719D5E65D9E9DCB4A04ACCC1DB52486E40B0E4795C7E982A49A519C22891C2F7526DA8DBE65C755134A2A64B4AE2C8B6F11FF00AB1C5A448B5BB4141146F0D31883EA16133BD8EFE237009BDAC47993BDAD85906752BFC51AA9238A3BDA9F5F7AAC63EACA6DE236BEC6C6F7FC216F5A923B46FA9D8F84F27D31CB93AC7A817F5C213EA46AFDC53166592336AEF8230BDC3486EB6BF5F627AF5C151E6990AC4AA734A708A6F679FAFEFCE0924B3C81892348E706002C4DB736BE2212FEA269731C91C869335A766E9A6717F4C62F5B9331568F33851A372E0AD422EB1A74E924EF6DF91C5B0D6B142D6B5801B0E3DB1C5292588BEDBEDF962613B788057F6A29160D50D44126E55C19949B81BD8755E46AF6F3C03D9AAD6A9ED0D434CACB2A21448BC1745D497D56DF571BF160714E90C44EF121B8DFC2304450C4248C889012772146FC61D72167FFD9) Button Update_picture Title: Update Picture Nodelocation: 308,240,1 Nodesize: 48,24 Script: (Pict of CurrencyPicture := Va2) Variable Image_results Title: Image results Definition: ReadFromUrl("http://www.ask.com/pictures?q=currency&search=&qsrc=0&o=0&l=dir") Nodelocation: 100,56,1 Nodesize: 48,24 Valuestate: 2,72,26,820,481,0,MIDM Variable Image_urls Title: Image URLS Definition: FindInText( '"(http://imgtn\d\.ask.com.*?)"', Image_results, subPattern:1, return:"S", repeat:1 ) Nodelocation: 220,56,1 Nodesize: 48,24 Valuestate: 2,207,21,633,526,0,MIDM Index Imagenum Title: ImageNum Definition: CopyIndex(Image_urls.Repeat) Nodelocation: 100,128,1 Nodesize: 48,24 {!40000|Att_previndexvalue: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36]} Decision Select_image Title: Select image Definition: Choice(Imagenum,5,False) Nodelocation: 204,128,1 Nodesize: 48,24 Script: ( Pict of CurrencyPicture := Images[Imagenum=Select_image] ) {!40200|Att_choiceindexes: Index Imagenum} Variable Images Title: images Definition: ReadFromUrl( Image_urls[.Repeat = Imagenum ] ) Nodelocation: 340,56,1 Nodesize: 48,24 Valuestate: 2,120,130,386,462,0,MIDM Close Currency_images Close Reading_data_from_th