q-lang-cvs Mailing List for Q - Equational Programming Language (Page 14)
Brought to you by:
agraef
You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(106) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(219) |
Feb
(152) |
Mar
|
Apr
(92) |
May
(45) |
Jun
(3) |
Jul
|
Aug
(3) |
Sep
(111) |
Oct
(52) |
Nov
|
Dec
|
2005 |
Jan
|
Feb
(1) |
Mar
(1) |
Apr
(2) |
May
(23) |
Jun
(46) |
Jul
(158) |
Aug
(22) |
Sep
|
Oct
(26) |
Nov
(11) |
Dec
(49) |
2006 |
Jan
(57) |
Feb
(196) |
Mar
(10) |
Apr
(41) |
May
(149) |
Jun
(308) |
Jul
(11) |
Aug
(25) |
Sep
(15) |
Oct
|
Nov
|
Dec
(15) |
2007 |
Jan
|
Feb
|
Mar
|
Apr
(15) |
May
(204) |
Jun
(112) |
Jul
(7) |
Aug
(16) |
Sep
(134) |
Oct
(313) |
Nov
(262) |
Dec
(83) |
2008 |
Jan
(81) |
Feb
(83) |
Mar
(21) |
Apr
|
May
|
Jun
(1) |
Jul
(2) |
Aug
(6) |
Sep
|
Oct
|
Nov
|
Dec
(2) |
2015 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Albert G. <ag...@us...> - 2007-11-23 23:58:18
|
Update of /cvsroot/q-lang/qcalc/doc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv3328/doc Modified Files: qcalc.xml Log Message: update documentation Index: qcalc.xml =================================================================== RCS file: /cvsroot/q-lang/qcalc/doc/qcalc.xml,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** qcalc.xml 18 Nov 2007 05:56:43 -0000 1.18 --- qcalc.xml 23 Nov 2007 23:58:15 -0000 1.19 *************** *** 120,124 **** </para> <para> ! There are also many useful keyboard and mouse shortcuts. You can browse through your spreadsheet with the mouse or the cursor keys. <keycap>F3</keycap> edits a cell, <keycap>Esc</keycap> aborts the edit (reverting the cell to its previous value), and <keycap>F2</keycap> or <keycap>Return</keycap> stores the edited value (and does any necessary computations). You can force reevaluation of a cell by pressing <keycap>F2</keycap> while the cell is selected, and a double click opens a cell for editing. You can also just start typing when a cell is selected, to overwrite its current value. All editing is done in place, right there in the cell; there is no separate line edit control as in other spreadsheets. Cell indices and formulas are shown in the status line when you click on them. </para> --- 120,124 ---- </para> <para> ! There are also many useful keyboard and mouse shortcuts. You can browse through your spreadsheet with the mouse or the cursor keys, including the <keycap>Tab</keycap> and <keycap>Backtab</keycap> keys which traverse to the next and previous table cell, respectively. <keycap>F3</keycap> edits a cell, <keycap>Esc</keycap> aborts the edit (reverting the cell to its previous value), and <keycap>F2</keycap> or <keycap>Return</keycap> stores the edited value (and does any necessary computations). You can force reevaluation of a cell by pressing <keycap>F2</keycap> while the cell is selected, and a double click opens a cell for editing. You can also just start typing when a cell is selected, to overwrite its current value. All editing is done in place, right there in the cell; there is no separate line edit control as in other spreadsheets. Cell indices and formulas are shown in the status line when you click on them. </para> *************** *** 142,146 **** <section id="script"><title>The Script</title> <para> ! You get to the script page by switching to the corresponding tab located right below the menu and toolbar. You then see the following: </para> <screenshot> --- 142,146 ---- <section id="script"><title>The Script</title> <para> ! You get to the script page by switching to the corresponding tab located right below the menu and toolbar, or by pressing <keycap>F11</keycap> which toggles between the spreadsheet and the script view. After selecting the script view you see the following: </para> <screenshot> |
From: Albert G. <ag...@us...> - 2007-11-23 23:47:05
|
Update of /cvsroot/q-lang/qcalc/examples In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv30904/examples Modified Files: calendar.qcalc Log Message: bugfixes Index: calendar.qcalc =================================================================== RCS file: /cvsroot/q-lang/qcalc/examples/calendar.qcalc,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** calendar.qcalc 17 Nov 2007 18:24:57 -0000 1.6 --- calendar.qcalc 23 Nov 2007 23:47:02 -0000 1.7 *************** *** 1,3 **** ! // qcalc 1.0, created Sat Nov 17 19:24:44 2007 -*-Q-*- -*- coding: UTF-8 -*- // [((1,0),"Enter year:"),((2,0),"= spinbox (0,9999,1,today!2)"),((3,0),"= calendar 'A5 A3")] // [] --- 1,3 ---- ! // qcalc 1.0, created Sat Nov 24 00:47:36 2007 -*-Q-*- -*- coding: UTF-8 -*- // [((1,0),"Enter year:"),((2,0),"= spinbox (0,9999,1,today!2)"),((3,0),"= calendar 'A5 A3")] // [] *************** *** 16,20 **** mycal Y = cat $ map (quarter CAL) [0..3] ! where CAL = map (map (fill 7).cal Y) [1..12]; quarter CAL I = zipwith (++) M1 $ zipwith (++) M2 M3 --- 16,20 ---- mycal Y = cat $ map (quarter CAL) [0..3] ! where CAL = map (vfill 9 . map (hfill 7) . cal Y) [1..12]; quarter CAL I = zipwith (++) M1 $ zipwith (++) M2 M3 *************** *** 24,26 **** = [[""|R1],[M|R2]|map (cons "") R]; ! fill N Xs = Xs++map (cst "") [#Xs..N-1]; --- 24,29 ---- = [[""|R1],[M|R2]|map (cons "") R]; ! hfill N Xs = Xs++map (cst "") [#Xs..N-1]; ! ! vfill N Xs = Xs++map (hfill M . cst []) [#Xs..N-1] where M:Int = #hd Xs; ! = Xs otherwise; \ No newline at end of file |
From: Albert G. <ag...@us...> - 2007-11-23 23:46:44
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv30867 Modified Files: qcalc.q Log Message: comment changes Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.181 retrieving revision 1.182 diff -C2 -d -r1.181 -r1.182 *** qcalc.q 23 Nov 2007 23:12:47 -0000 1.181 --- qcalc.q 23 Nov 2007 23:46:41 -0000 1.182 *************** *** 30,34 **** - Additional convenience functions (Drag and drop? Allow range selections ! to enter cell references, etc.) */ def VERSION = "1.0", --- 30,44 ---- - Additional convenience functions (Drag and drop? Allow range selections ! to enter cell references, etc.) ! ! - Improve latencies for computer music, multimedia and other realtime ! applications. ! ! This will require asynchronous updates to be processed in their own ! thread running concurrently with the GUI thread (instead of a timer ! routine), and faster communication with the inferior Q process (using ! pipes/sockets/shared memory?). In any case, these changes will need the ! multithreaded version of Qt, and thus should probably be confined to ! their own separate qcalc version. */ def VERSION = "1.0", |
From: Albert G. <ag...@us...> - 2007-11-23 23:12:51
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv16913 Modified Files: qcalc.q Log Message: improve realtime latencies by reducing the timer interval Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.180 retrieving revision 1.181 diff -C2 -d -r1.180 -r1.181 *** qcalc.q 23 Nov 2007 22:36:56 -0000 1.180 --- qcalc.q 23 Nov 2007 23:12:47 -0000 1.181 *************** *** 178,182 **** TIMER = qt_new "QTimer" MAIN, _ = qt_connect TIMER (SIGNAL "timeout()") CONN (SLOT "timer()") || ! qt TIMER "start" 300, // some pixmaps [FLAG, RES, TASKB, TASKA, NULLPM] = map (qt_new "QPixmap") --- 178,182 ---- TIMER = qt_new "QTimer" MAIN, _ = qt_connect TIMER (SIGNAL "timeout()") CONN (SLOT "timer()") || ! qt TIMER "start" 100, // some pixmaps [FLAG, RES, TASKB, TASKA, NULLPM] = map (qt_new "QPixmap") *************** *** 2135,2139 **** mark_spans SPANS || statusmsg "Done" || ! qt TIMER "start" 300 || () where OLD_KEYS = keys $ get CELLS, --- 2135,2139 ---- mark_spans SPANS || statusmsg "Done" || ! qt TIMER "start" 100 || () where OLD_KEYS = keys $ get CELLS, |
From: Albert G. <ag...@us...> - 2007-11-23 22:41:33
|
Update of /cvsroot/q-lang/qcalc/examples In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv4384/examples Modified Files: guiexamples.qcalc Log Message: bugfix: button examples look for pixmaps in the wrong directory Index: guiexamples.qcalc =================================================================== RCS file: /cvsroot/q-lang/qcalc/examples/guiexamples.qcalc,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** guiexamples.qcalc 17 Nov 2007 18:26:09 -0000 1.12 --- guiexamples.qcalc 23 Nov 2007 22:41:30 -0000 1.13 *************** *** 1,4 **** // qcalc 1.0, created Sat Nov 17 19:27:00 2007 -*-Q-*- -*- coding: UTF-8 -*- ! // [((0,1),"GUI element"),((0,2),"Value"),((0,3),"Display"),((2,0),"Checkbox"),((2,1),"= checkbox (\"test\",true)"),((2,2),"= B3"),((2,3),"= checkbox (\"test\",B3)"),((4,0),"Combobox"),((4,1),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((4,2),"= B5"),((4,3),"= combobox ([\"apples\",\"bananas\",\"oranges\"],B5)"),((5,0),"Comboedit"),((5,1),"= comboedit ([\"apples\",\"bananas\",\"oranges\"],\"bananas\")"),((5,2),"= B6"),((5,3),"= comboedit ([\"apples\",\"bananas\",\"oranges\"],B6)"),((6,0),"Int Spinbox"),((6,1),"= spinbox (0,100,5,40)"),((6,2),"= B7"),((6,3),"= spinbox (0,100,5,B7)"),((7,0),"Float Spinbox"),((7,1),"= spinbox (0.0,10.0,0.5,4.0)"),((7,2),"= B8"),((7,3),"= spinbox (0.0,10.0,0.5,B8)"),((9,0),"Spinbox with special value"),((9,1),"= spinbox (-1,10,1,0,\"Any\")"),((9,2),"= B10"),((9,3),"= spinbox (-1,10,1,B10,\"Any\")"),((10,0),"Spinbox with prefix"),((10,1),"= spinbox (-0.1,10,0.1,0,\"Any\",\"$ \")"),((10,2),"= B11"),((10,3),"= spinbox (-0.1,10,0.1,B11,\"Any\",\"$ \")"),((11,0),"Spinbox with suffix"),((11,1),"= spinbox (-1,72,1,10,\"Any\",\"\",\"pt\")"),((11,2),"= B12"),((11,3),"= spinbox (-1,72,1,B12,\"Any\",\"\",\"pt\")"),((13,0),"Horizontal slider"),((13,1),"= hslider (0,100,1,50)"),((13,2),"= B14"),((13,3),"= hslider (0,100,1,B14)"),((14,0),"Vertical slider"),((14,1),"= vslider (0,100,1,50)"),((14,2),"= B15"),((14,3),"= vslider (0,100,1,B15)"),((16,0),"Pushbutton"),((16,1),"= pushbutton \"Push me!\""),((16,2),"= B17"),((16,3),"N/A"),((17,0),"Pushbutton with icon"),((17,1),"= pushbutton (\"Push me!\",which \"pixmaps/1rightarrow.png\")"),((17,2),"= B18"),((17,3),"N/A"),((18,0),"Togglebutton with icon"),((18,1),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((18,2),"= B19"),((18,3),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\",B19)"),((20,0),"\"Buddies\" (linked elements)"),((20,1),"= hslider (0,100,1,D21)"),((20,2),"= B21"),((20,3),"= spinbox (0,100,1,B21)"),((22,0),("Alternative \"remote control\" of GUI elements using setval",1,4)),((24,0),"GUI element A (click here)"),((24,1),"Transfer A -> B"),((24,2),"GUI element B (display)"),((24,3),"Value of B"),((26,0),"= checkbox \"A\""),((26,1),"= setval 'C27 A27"),((26,2),"= checkbox \"B\""),((26,3),"= C27"),((27,0),"= spinbox (-0.1,10,0.1,0,\"Any\")"),((27,1),"= setval 'C28 A28"),((27,2),"= spinbox (-0.1,10,0.1,0,\"Any\")"),((27,3),"= C28"),((28,0),"= spinbox (-5,100,5,40,\"Any\")"),((28,1),"= setval 'C29 A29"),((28,2),"= spinbox (-1,100,1,40,\"Any\")"),((28,3),"= C29"),((29,0),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((29,1),"= setval 'C30 A30"),((29,2),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((29,3),"= C30"),((30,0),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((30,1),"= setval 'C31 A31"),((30,2),"= togglebutton (\"Toggle me!\",which \"pixmaps/flag.png\")"),((30,3),"= C31"),((32,0),("Task button example. Shows how to operate a Q thread using a toggle button. See the script tab for the Q code implementing this example.",1,4)),((34,0),"Seconds for countdown:"),((34,1),"= spinbox (1,60,1,10)"),((35,0),"Push here to start counting:"),((35,1),"= taskbutton \"&Run me!\" (task B35)"),((35,2),"= spinbox (0,999999)"),((37,0),"Action button example:"),((37,1),"= actionbutton \"Random &number\" random"),((37,2),"= B38"),((39,0),"An \"open file\" action:"),((39,1),"= open_file"),((40,0),"The file you chose:"),((40,1),("",1,3))] // [(14,55),(32,35)] // [(0,162),(1,116),(2,139),(3,125)] --- 1,4 ---- // qcalc 1.0, created Sat Nov 17 19:27:00 2007 -*-Q-*- -*- coding: UTF-8 -*- ! // [((0,1),"GUI element"),((0,2),"Value"),((0,3),"Display"),((2,0),"Checkbox"),((2,1),"= checkbox (\"test\",true)"),((2,2),"= B3"),((2,3),"= checkbox (\"test\",B3)"),((4,0),"Combobox"),((4,1),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((4,2),"= B5"),((4,3),"= combobox ([\"apples\",\"bananas\",\"oranges\"],B5)"),((5,0),"Comboedit"),((5,1),"= comboedit ([\"apples\",\"bananas\",\"oranges\"],\"bananas\")"),((5,2),"= B6"),((5,3),"= comboedit ([\"apples\",\"bananas\",\"oranges\"],B6)"),((6,0),"Int Spinbox"),((6,1),"= spinbox (0,100,5,40)"),((6,2),"= B7"),((6,3),"= spinbox (0,100,5,B7)"),((7,0),"Float Spinbox"),((7,1),"= spinbox (0.0,10.0,0.5,4.0)"),((7,2),"= B8"),((7,3),"= spinbox (0.0,10.0,0.5,B8)"),((9,0),"Spinbox with special value"),((9,1),"= spinbox (-1,10,1,0,\"Any\")"),((9,2),"= B10"),((9,3),"= spinbox (-1,10,1,B10,\"Any\")"),((10,0),"Spinbox with prefix"),((10,1),"= spinbox (-0.1,10,0.1,0,\"Any\",\"$ \")"),((10,2),"= B11"),((10,3),"= spinbox (-0.1,10,0.1,B11,\"Any\",\"$ \")"),((11,0),"Spinbox with suffix"),((11,1),"= spinbox (-1,72,1,10,\"Any\",\"\",\"pt\")"),((11,2),"= B12"),((11,3),"= spinbox (-1,72,1,B12,\"Any\",\"\",\"pt\")"),((13,0),"Horizontal slider"),((13,1),"= hslider (0,100,1,50)"),((13,2),"= B14"),((13,3),"= hslider (0,100,1,B14)"),((14,0),"Vertical slider"),((14,1),"= vslider (0,100,1,50)"),((14,2),"= B15"),((14,3),"= vslider (0,100,1,B15)"),((16,0),"Pushbutton"),((16,1),"= pushbutton \"Push me!\""),((16,2),"= B17"),((16,3),"N/A"),((17,0),"Pushbutton with icon"),((17,1),"= pushbutton (\"Push me!\",which \"../pixmaps/1rightarrow.png\")"),((17,2),"= B18"),((17,3),"N/A"),((18,0),"Togglebutton with icon"),((18,1),"= togglebutton (\"Toggle me!\",which \"../pixmaps/flag.png\")"),((18,2),"= B19"),((18,3),"= togglebutton (\"Toggle me!\",which \"../pixmaps/flag.png\",B19)"),((20,0),"\"Buddies\" (linked elements)"),((20,1),"= hslider (0,100,1,D21)"),((20,2),"= B21"),((20,3),"= spinbox (0,100,1,B21)"),((22,0),("Alternative \"remote control\" of GUI elements using setval",1,4)),((24,0),"GUI element A (click here)"),((24,1),"Transfer A -> B"),((24,2),"GUI element B (display)"),((24,3),"Value of B"),((26,0),"= checkbox \"A\""),((26,1),"= setval 'C27 A27"),((26,2),"= checkbox \"B\""),((26,3),"= C27"),((27,0),"= spinbox (-0.1,10,0.1,0,\"Any\")"),((27,1),"= setval 'C28 A28"),((27,2),"= spinbox (-0.1,10,0.1,0,\"Any\")"),((27,3),"= C28"),((28,0),"= spinbox (-5,100,5,40,\"Any\")"),((28,1),"= setval 'C29 A29"),((28,2),"= spinbox (-1,100,1,40,\"Any\")"),((28,3),"= C29"),((29,0),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((29,1),"= setval 'C30 A30"),((29,2),"= combobox ([\"apples\",\"bananas\",\"oranges\"],\"oranges\")"),((29,3),"= C30"),((30,0),"= togglebutton (\"Toggle me!\",which \"../pixmaps/flag.png\")"),((30,1),"= setval 'C31 A31"),((30,2),"= togglebutton (\"Toggle me!\",which \"../pixmaps/flag.png\")"),((30,3),"= C31"),((32,0),("Task button example. Shows how to operate a Q thread using a toggle button. See the script tab for the Q code implementing this example.",1,4)),((34,0),"Seconds for countdown:"),((34,1),"= spinbox (1,60,1,10)"),((35,0),"Push here to start counting:"),((35,1),"= taskbutton \"&Run me!\" (task B35)"),((35,2),"= spinbox (0,999999)"),((37,0),"Action button example:"),((37,1),"= actionbutton \"Random &number\" random"),((37,2),"= B38"),((39,0),"An \"open file\" action:"),((39,1),"= open_file"),((40,0),"The file you chose:"),((40,1),("",1,3))] // [(14,55),(32,35)] // [(0,162),(1,116),(2,139),(3,125)] |
From: Albert G. <ag...@us...> - 2007-11-23 22:36:59
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv2313 Modified Files: qcalc.q Log Message: bugfix: compilation tries to create the bytecode file in the script directory, which might not be writable Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.179 retrieving revision 1.180 diff -C2 -d -r1.179 -r1.180 *** qcalc.q 23 Nov 2007 22:09:18 -0000 1.179 --- qcalc.q 23 Nov 2007 22:36:56 -0000 1.180 *************** *** 928,933 **** def TEMPL = "%s\nimport calclib;\n/* Main program generated by QCalc. */\n", CMD = "pwd='%s'; filename='%s'; cd \"$pwd\"; echo '+++ Compile:'; \ ! if qc -n $filename; then echo '+++ Done.'; q -c yymain -w0 \"$filename\"; \ ! else echo '+++ Error.'; fi"; /* Compile stuff and start the interpreter. */ --- 928,933 ---- def TEMPL = "%s\nimport calclib;\n/* Main program generated by QCalc. */\n", CMD = "pwd='%s'; filename='%s'; cd \"$pwd\"; echo '+++ Compile:'; \ ! if qc -n -o \"$filename.out\" \"$filename\"; then echo '+++ Done.'; \ ! q -c yymain -w0 \"$filename\"; else echo '+++ Error.'; fi"; /* Compile stuff and start the interpreter. */ |
From: Albert G. <ag...@us...> - 2007-11-23 22:22:40
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv29098 Modified Files: qcalc.ui Log Message: fix up icons Index: qcalc.ui =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.ui,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** qcalc.ui 23 Nov 2007 12:36:49 -0000 1.23 --- qcalc.ui 23 Nov 2007 22:22:36 -0000 1.24 *************** *** 664,668 **** </property> <property name="iconSet"> ! <iconset>image14</iconset> </property> <property name="text"> --- 664,668 ---- </property> <property name="iconSet"> ! <iconset>image0</iconset> </property> <property name="text"> *************** *** 684,688 **** </property> <property name="iconSet"> ! <iconset>image15</iconset> </property> <property name="text"> --- 684,688 ---- </property> <property name="iconSet"> ! <iconset>image14</iconset> </property> <property name="text"> *************** *** 701,705 **** </property> <property name="iconSet"> ! <iconset>image16</iconset> </property> <property name="text"> --- 701,705 ---- </property> <property name="iconSet"> ! <iconset>image15</iconset> </property> <property name="text"> *************** *** 718,722 **** </property> <property name="iconSet"> ! <iconset>image17</iconset> </property> <property name="text"> --- 718,722 ---- </property> <property name="iconSet"> ! <iconset>image16</iconset> </property> <property name="text"> *************** *** 735,739 **** </property> <property name="iconSet"> ! <iconset>image18</iconset> </property> <property name="text"> --- 735,739 ---- </property> <property name="iconSet"> ! <iconset>image17</iconset> </property> <property name="text"> *************** *** 760,764 **** </property> <property name="iconSet"> ! <iconset>image19</iconset> </property> <property name="text"> --- 760,764 ---- </property> <property name="iconSet"> ! <iconset>image18</iconset> </property> <property name="text"> *************** *** 777,781 **** </property> <property name="iconSet"> ! <iconset>image20</iconset> </property> <property name="text"> --- 777,781 ---- </property> <property name="iconSet"> ! <iconset>image19</iconset> </property> <property name="text"> *************** *** 794,798 **** </property> <property name="iconSet"> ! <iconset>image21</iconset> </property> <property name="text"> --- 794,798 ---- </property> <property name="iconSet"> ! <iconset>image20</iconset> </property> <property name="text"> *************** *** 811,815 **** </property> <property name="iconSet"> ! <iconset>image22</iconset> </property> <property name="text"> --- 811,815 ---- </property> <property name="iconSet"> ! <iconset>image21</iconset> </property> <property name="text"> *************** *** 828,832 **** </property> <property name="iconSet"> ! <iconset>image23</iconset> </property> <property name="text"> --- 828,832 ---- </property> <property name="iconSet"> ! <iconset>image22</iconset> </property> <property name="text"> *************** *** 845,849 **** </property> <property name="iconSet"> ! <iconset>image24</iconset> </property> <property name="text"> --- 845,849 ---- </property> <property name="iconSet"> ! <iconset>image23</iconset> </property> <property name="text"> *************** *** 862,866 **** </property> <property name="iconSet"> ! <iconset>image25</iconset> </property> <property name="text"> --- 862,866 ---- </property> <property name="iconSet"> ! <iconset>image24</iconset> </property> <property name="text"> *************** *** 882,886 **** </property> <property name="iconSet"> ! <iconset>image26</iconset> </property> <property name="text"> --- 882,886 ---- </property> <property name="iconSet"> ! <iconset>image25</iconset> </property> <property name="text"> *************** *** 913,917 **** </property> <property name="iconSet"> ! <iconset>image27</iconset> </property> <property name="text"> --- 913,917 ---- </property> <property name="iconSet"> ! <iconset>image26</iconset> </property> <property name="text"> *************** *** 1015,1019 **** </property> <property name="iconSet"> ! <iconset>image28</iconset> </property> <property name="text"> --- 1015,1019 ---- </property> <property name="iconSet"> ! <iconset>image27</iconset> </property> <property name="text"> *************** *** 1032,1036 **** </property> <property name="iconSet"> ! <iconset>image29</iconset> </property> <property name="text"> --- 1032,1036 ---- </property> <property name="iconSet"> ! <iconset>image28</iconset> </property> <property name="text"> *************** *** 1049,1053 **** </property> <property name="iconSet"> ! <iconset>image30</iconset> </property> <property name="text"> --- 1049,1053 ---- </property> <property name="iconSet"> ! <iconset>image29</iconset> </property> <property name="text"> *************** *** 1066,1070 **** </property> <property name="iconSet"> ! <iconset>image31</iconset> </property> <property name="text"> --- 1066,1070 ---- </property> <property name="iconSet"> ! <iconset>image30</iconset> </property> <property name="text"> *************** *** 1083,1087 **** </property> <property name="iconSet"> ! <iconset>image32</iconset> </property> <property name="text"> --- 1083,1087 ---- </property> <property name="iconSet"> ! <iconset>image31</iconset> </property> <property name="text"> *************** *** 1100,1104 **** </property> <property name="iconSet"> ! <iconset>image33</iconset> </property> <property name="text"> --- 1100,1104 ---- </property> <property name="iconSet"> ! <iconset>image32</iconset> </property> <property name="text"> *************** *** 1117,1121 **** </property> <property name="iconSet"> ! <iconset>image34</iconset> </property> <property name="text"> --- 1117,1121 ---- </property> <property name="iconSet"> ! <iconset>image33</iconset> </property> <property name="text"> *************** *** 1145,1149 **** </property> <property name="iconSet"> ! <iconset>image35</iconset> </property> <property name="text"> --- 1145,1149 ---- </property> <property name="iconSet"> ! <iconset>image13</iconset> </property> <property name="text"> *************** *** 1187,1191 **** </property> <property name="iconSet"> ! <iconset>image36</iconset> </property> <property name="text"> --- 1187,1191 ---- </property> <property name="iconSet"> ! <iconset>image34</iconset> </property> <property name="text"> *************** *** 1204,1208 **** </property> <property name="iconSet"> ! <iconset>image37</iconset> </property> <property name="text"> --- 1204,1208 ---- </property> <property name="iconSet"> ! <iconset>image35</iconset> </property> <property name="text"> *************** *** 1232,1236 **** </property> <property name="iconSet"> ! <iconset>image38</iconset> </property> <property name="text"> --- 1232,1236 ---- </property> <property name="iconSet"> ! <iconset>image36</iconset> </property> <property name="text"> *************** *** 1249,1253 **** </property> <property name="iconSet"> ! <iconset>image39</iconset> </property> <property name="text"> --- 1249,1253 ---- </property> <property name="iconSet"> ! <iconset>image37</iconset> </property> <property name="text"> *************** *** 1266,1270 **** </property> <property name="iconSet"> ! <iconset>image40</iconset> </property> <property name="text"> --- 1266,1270 ---- </property> <property name="iconSet"> ! <iconset>image38</iconset> </property> <property name="text"> *************** *** 1281,1404 **** <images> <image name="image0"> ! <data format="PNG" length="1578">89504e470d0a1a0a0000000d4948445200000020000000200806000000737a7af4000005f1494441545885ad975f8862e719c69fd93fc12d5b6acb263d2517b125dd561a482ca1c4908b4ee99f207361050b2b78b1d24d60602f86211761d8c220931264a15b66a103eec582de0cb210b153109422d582f44870d10603a741b216e6c22c5eb8600abf5e7c9f333aebb8d3d003f2f01e99f33eefef7dcfeb3702b4eca2283f49fd95a27093820702ab47f135a3f56b33f1be8df717c4713d26af1d49cfad005a595939d5809bd4c73ff6e9d52f5e96be79597a22e992cea0ff912e5d38453f97aa9f493f7ba2df69190192fa3545c19e0060c2ffe72a07a12188ebf3734bf94ba1ee5f24bd1396befcb77451eafeb32149ea3e5cac8dbfff79e9f7fffab421fda2ab270f25492f2e2550bfa634354177d312e818f58c540eea7331de19e30940904a5c3cab05e9ce4d8b7f5cb1492bb007e99d0ae96d709be6fea067d46de6e6e293ea750bc76d78a6812302690072f78001948ae619990f8143e834b2e686d5e378d7c4c5751357cd73181580ce190cdc4afdb174370379c8dd770148e5d709e7c338db0e00eb374b9650dd566a08d0cf00ebd04acde920ef000138f09f6e8032d7818f0b0f4ccfb307059840a6963195f7333823874c390b65e0606ac26a6fcb687b7d8106e04080a844670cb8cd811fd8a854bdcf00ea358f0c90c8a70cc671872db6f0d7fc08a1aa086c07d8bdebc24d60647b5f4b988abba9853a78e00082b28e09b82dfe007c41cd18ddad666102a59ea9287798c3c3435599e44de1e0e0dbf10190885becad4d200cb50830865accea6cec40cd10604a00a0d31d0210de0b03e08e4ccfd7bd754284504df8f0e1b41d020408ee854cc587b0b901e9f7b3a6c246c454eca516eaa06c0934670dd42802d4bd3a4386640fcd1487db615369cb479020817280e16448ae69c8748a66f00a45601f686f9a4afbb6e70b3500ed133300fcb27460b645e87e8810217c4d1f7efc04da01820459af9a653434a0e8dc31af583d696624912cc04e1af7200444f01aab8bb5ea3729bb3304245d00fa34ccc303b5001d3aac56574db281b93fdd68ee7e05fa403c013e1fee7e1d86904a668155684580e129ea8077620624ad64efd5df250f838129b1d4359b6b38b2b9bd3100e311b00703c781cb7e3cbfdf986a8d49c421b79702220c5a11abab73b1d7b004faf306449be7b3f7dcc726cb7cc5f4ac1e1ac9de074650fa69041a181ac0d676ddec85aead78a13a70b8600f483ac71d7e9fbd6ba67f60934d09948ac64da73786fbe0f5a7640cb17acbb88ec5733089e1364240f829f55a3e4360748280246ddd2a5cc5837a6dbef24e6f3e765b27081d5a6a3da00ce9ed8ca9d88b2c5007264fcfc01185f47629cfede3692f953d53b14de6f586d6c4d01230f773f98e558f441c3aad98e9bd6767c0b333e0991918b6171b100d7eb5f5bead6c385fa9db9cbf9fdbb7260f8009d4edf78964c1fc4d3700b8568356ed10f644694d8f16fd189d678387990fcd9299f67a7a1cab372d81f61826c7ed19f4eddb53f4e036a4ae676122bcbc9ed65ba2b426d26f6863918195d48ddcbb948f7b7e44a26a2bb6e781e9de70db33b33025b30fbbd155889a69272a58335a5ad327bca10d49574f3b0f5c4c5d2f3ce6ceecb40379f3be0374ba634b687c4c04a854cdd64add28108bf289a4572505255d9df97c5fd24b92ae9c6660857d3e48250b733330edf1d1f45b32d9bd193203d87ccf1088aced7e64935d91f4f599cf6599d3fb85534f44e1b7365f48c421bbd799ab783a0b47247ac09e3197de317b2011e751e8f5f5df4afaa1a46f4b7a6e611249cb8e64e762d16c9e32479b0ebb940a07b662ab99db2e142116cf8d863f2723e94792be6b2bbf24e9f4e3ff12038aadf193983d6c74ba967edf50706d9cba51201187c8db99bce384de94f4b224c762be20e9f47fbb9e6540d279f2fc6dba17ea76eab3f780a6c13d8ef28fd06b89df48fa81a417257d4306f9f2c46734b0128b66df49c4a1521b1ee14ec42116cd3e5a7d6b734366c25f92f42d493e2dc3fd150c48d2c5583cd7a706a96401f28c226f67fe24e91549df93f4bca4af493aafb356fd3f1a588945f92016cf115be323ff95e09b32afd677645ea98b5f29b1bdfe0b0bee5e4141633ae50000000049454e44ae426082</data> </image> <image name="image1"> ! <data format="PNG" length="678">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000026d49444154388da5944f4814511cc73f4642030a0e7868c3200f424976f0a45117e992a72224d8850e0a1da44e9ea22e119deae876883c48bb1be8ae44890743054103611552d75861573cec46c86eac3123abf4edb033ebaaebbff50b8fef7b3f98ef7ce6cdef3d24e18ef0c8849490c22372fce8f5e878f472e9f3a5636f212e5996cacaca153c9128f8ccdcb21497c2e3d1a66383c323e5438b72c295909497142b92dfa898d8552653422c293a2f97bced08e2896390dd7487f8b7b39e2e9007be447d1513bb9a995b96ac7d1e97028381ab65884f165a5461cfff45e70b5fd03fa00dcdeb9e24ce51a207d7c1b63991ec4da01662c391aad6459bd84ff002c1c520c0dee0c8d224867182d424187f815568be63c2b52734b7c0d89fb7e77db59e2b005592761f5845d97a7bdb348deaa3488daf3d70d703bfeab03716306ed7911c6ea5b12b49fadd64dad33b7b691f3198a651cda65370dddd9e2c18b540531f981dd0b085d1d6032bd0d8d5018b593c357def0f2106d374c86a773d9b2dd4d353113c0ddf494f25f13cbe08dbcd50ed85e46bf838bb13636bba792df9a97c1fe79dbf6eedf39ca4f5b0947f2329e5b825e983a48c9473ea439df6e17d9cdfeb6e3db39e927252cadf2de9b96439619957d2b3f6edf0d3ce97d62d9a4ed7c7eecba603921252bc57ca8d4a3fba256ba6103ed41e3a7d1fbbbd523f89bdf0021afcd84b2168b94076ad0e7656944e7313a8f0ae28d5faa834ee9524f5fb03b2a6330f7596bbc295954a14e719bf14180c1c3cd291254e76f24a64781a8bf310417c2d3e80caef8a72f2e23be35d71884a890f9c3cffb7205e7c0c30400f3d8438dd7aac2678dff7c8f7f93ffcc537db31d0c3bb0000000049454e44ae426082</data> </image> <image name="image2"> ! <data format="PNG" length="1013">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003bc49444154388db59551685b551cc67f9929e6e28651145ae8208116dadac11244d6b007db2148e7c3ac2874c5073bf76045506691319549b787592b4ec8c364d918ae0832ddacadd38d66b0adddd89ab4ac260f635ccb28497135f7d28edcbb99faf970d3b9ccee45ec0787ffbdfccff9cec7fffb9f737c92580dac5915d6ff82cc9042bb3e4a9d338764edea55f0ff21ddaf77fb0f662c4932cda27a7a75f2a193253d742ca36fbf369a439a1c3d2f0fbf7be170421a4b68db8ac4a1374ca58e493d89827a1252f7a182bae352e0c58c2589be03a9bd1a9472398fac58f0e2f27f4fef98d5fdd60a25691d9452c5b292f2a2e19c545c90f61c907457ff60a152b172928a526be7d849362a5441dcd26b4a92c616ee2335a5e3df9aaa407983c2038a0b05a96f406aed1cad2889eff03169c7ab800123d3d05602e32960fd0a755b04d601b780a7e1ed4fa12b0289ab90bcc0ccccdcf8318841097c91f74ca53f0f33be08b1db909e77886e30fe4dfa2750058e05c613107e2d4bfbf34dd4ac77d8d16c909870701d63d12d39f640bfb1ee91f0ce2ff6461ae0b9c7607016e653550c653cc103bf40f55f70e047a85df262cd12c4f66419f9a0891b5550ff64151f5e80f667aa18f899474f7f5d350fc92bbec83ba6d25f7a8a078e42d09f27d15943720eda1ae1bb4978a5011297a1a319e2971d02cf1ab8bfc2e46f6095c0f08335eb3079da5872ed71f0c7dea4ff90e7ac2405b665bc8f9b95be292715ef4a7d4929755dda9e908e9f9122bba5fe83527093444816d5a96bd4e90e750af91a779aca7e1566df59874b970c4e7c0c063032edb07583c1e034c482b0ef2cd836e4e71c6cdbc0ba95c7bd5d833d9b865214ecf475fcd125d626ef70634b640d1bc3a41d08bb061d2d1ee9f8226cdd60f0d93968ab85f804743582eb020d06960bb65d836d036ba34016fc51f01384b61f00d6381359a206bcff4d961d2f40f216c4d6417c1ada4310bf0834782de594207fd1c2ce834b9e40002865812628a5c1cfe39492a7007c7d03925b0f2d7ed8bab9dca779a00606af42472d1c9982f65aaf1cedd5706402b6970ded6a80f825b0e6f9636636b9c8cc963000d5af67d4b25b1abe52ac34ec8193669a5e3e73ad20dd95c6c67352411a3d634a37a5eede9408e9e8bdbeaffe44aaeecc68452cefb57c37944f79e65a3977decb0dff24f5bd24517bff4db7694c3df1957925a9b050a938756559694632a513dfa7a4ac44dd68c51be763b3d4580fc14dc014743543620a02cde04e65d9ded0c49129cf4067721c4a31af3b00d74d12a00dfb36b8f39c62d6f7f23d62add263fa37e4da132c9ccec75d0000000049454e44ae426082</data> </image> <image name="image3"> ! <data format="PNG" length="955">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000038249444154388dd5944f489b671cc73f1b3b44d8416107050f0a0ea2d8c3a4871918a8ec3092cb5076494eb59776b093a7e22ea32da3040705dfb2826fa125e9c1262bb489838aaf60cdab98262d8ee450874a19b1d892473a49dec30bdf1de2df19f0bafd2ecff3f0bc7cf8f0e5fbbcf0bf1d5574458e8c2a320b4ec1685326352ba37599d46cce685d2661cbd4d664a6ad8ca93a32f15b2953999319bf3a6d523f6d3e181e9a683d035e700a46922a95aa24e9faed8c0a37a5c9a994ce9d5de9fa544a835f161e343336da3cfe36315555f4871995e6cee7269e481547fae2e2f7e690f7f1e126fdc2856e286fec0030b7fd90de9ecbac18f7dc18633d30b59804df6b92f16b19954f68bc96b474bead244ddb19e5ec9a7afbc7cf1a27f30ef482fb720b00d35e87afc0987ae37cb0eebc3bbd96ffd862e76d046bd502ff58f4081ceb1dc1cd43a8a71b56a0cd6f21bb58a6cd6b21fd3bb4edb5907cecd2b1d782fd1002db2ddcf8250d7f76b3f3de221a8c513f11c511d8ca67090521bd5a844e482ebb443afbb0975dc206ac45879d77216e3c4d33b80d3f3eb6d9fa2bcccd790b6f7f943bff323e9aea928c962455a48c539276a5d433496fa499d99c6a45296e655471a4c95b09959e4813d76694bb5fd3e8a5b812df96d4de396ace80e35329a3dd03e889a9eed6244995cd46bf4be546270b6b25e983b4e014347e35aec1af27d4dede045c999349cd15a4ddd3c597a4c37e97d60fce6b3a82aa22452fc535385450eb67e1b3adb056928c050748ae367aebae6cc127e0cc972100d9a745fa02907ee4c206d88f1c06370648ce3b78de189e6735091828cdca2466a5dafab1e1a1596ea9917966ae71979acd496529715fd2ba14fe6e52f18b0b6a6d6d6a6c13ae83b592856e7017cbd005d9e522a1ce3ed2cb2e912e483e7718fb3b84bd9825bc0fd6f32cf5ba87e5d9cd8d7377ab266e6554599254945495169e95a43752e6b7c64b4c247352519ab92bd55c69fa7646b52569f09b0975f56714f874b889f1aa8de745b056d21004e7559991fe3eb2af8a44fa21997789f921ec970e51e05e3e4bd48f60e5d3e0d5f1f6ef9c123d02477b62ecbdb719ed0ce3ac161909f6917d0191e000e9bc43ec4208dbcf12ed1de19e97267a2182ed27897d3ec6defe1ef8d1530fe4a3c3cdf0d0c415cf8bfeec79161d9d1d077faa2875df06bf05a8837f19cf3fc8d2f780009eefb1b5fd96bd7d4380c035cf5ffcb579d8fff5f907b68d12bc868821f10000000049454e44ae426082</data> </image> <image name="image4"> ! <data format="PNG" length="1109">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000041c49444154388dd59341489b671cc67f95383ea11b11b6d18005031612d143420b555a68a53b2c619764bb24a7e9cdec3202eb86ec306c0f223d74f41b0cfa79320ec4b843ab8576c6d1d644aa89456736da62a42bb1d82d9facaef9b6657d76504a6dbcf4b8075e5efebcfff7c7f3fe1f5e780de9226fe89ef1ad3203cf7527bfbefa65e8339de1ddd761ec0fb6e8d432ab52afb439273d5375f58bd3e77486a6577b1bb4a9b33399bcadb26c65646b4df6e8f89cad65d913e3b2b52cfbb23563eb8e6c5ca12c9df8591801e2f07dd8686f73fc7d448c3a173399554952b95c9124258726943c2f0d9b57b5477f3f93d42aad21550c69fc903414d0f0a7030a1cedffbace718faf1d4ae0f13403e0af75b3f1d822ea0fefed6c047e5d07af1b160d686b26b3ed25fefe39a8f1411d786ab1005e28963600985e9fe45c5b1fd9adecdecefb1fc2e143b06080cf837d03ba0e7671e196855373f609644dca2fbff4e4a234737375ef18caa39206a5a25f7a1690525d5231afc1a151cd5915f97db1529de3542e43d00785959d33bba54acfc9766cbbba533fb1c1330d1b93d0e68679039c660a4b39424e1c73dea25aab37dc10efec81bb106cf592c91569ae3531350bcd4e13e96b059a1d034a1be049c24f067424e111188dbd98bf99c47c71d80f6ce5a6c007e9f9023d2deda46e1708b780753b4bc80e52fae513f07ae0fe247478a8fe38c6c6e356cecf9a384e956fe6cd97c00120e082c08186586798a9c522d18e20530f207e3c487abd40dfd16e328d26def7e2b061c091042cba6972c7b8e06e27713c815383d83fb1ddf0861b81b70037f026c31726a4727d6095cd8aa48a54494a4a4ac57ee9615ef9f14b52459ac9e415fbb8acae53fd3af476e421043c7b56f9ba3431bdc378a1cdddfd5ebfa4b2f47040d29a94ea97d6245ddf29431f0de8d28939b9dda197c0c31e08781aac5c8ae8ee8c01b2b912b8207b230b473cf064120e2760250d8f9a31af4c61af8079254db5ea606e9bafc43606f0bc21d219c75acc126d0b4209babbbc141e40f7d16ef8d90fef2460a30084b05c7e7a0361c65c697a03511c07208653ab0231807f813f81ad86919c45e46937e6ad0c7821335b24d80ad91f52e08fee40b7bbb1aecd12218e994b53dd8e62e6d250ab5275460004637f00bf034f61e92ff2d6330d5ebcaa4a56ca1776e77b5d5241ba7a7150ba59d6e5f39754c948c343132a4f4b835f8daa3c2d054ef4aad53721e3e0e9fa9f67ce9bc49d30662e4dd00799bb45e880a9058bf0a312d6c2341177026b290d44b19652f4b9e2a456d20038cec8fe1f24d216c7dcb2881c8ec23cf474b433b59825dcd547aa2d44dfc93e265d6912c7a2e04a91381627e54a11f74771b6b6c0a9ee0b3e70fa54f2ace3543f771c074f4b126a2300545f04636100ceee65a7e66060e0d41c4aeb8fd9dab63130fa9ddaec77f5f8ff93fe0326079f9111a217c10000000049454e44ae426082</data> </image> <image name="image5"> ! <data format="PNG" length="901">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000034c49444154388d95954f681c6518c69fa41bc86a0b5b30b0012b0682262581ee52a1097ac8d242dd78d0f5204611ec5e849ceaae07893dd91e649b1ec41cc4d85a497228931ed67183d54409ec04127752369d8944dc291b9d0949d82dfe995d365b1f0fdf4cd9c4ec967d2f3fde8f799f79be77def93ea04e709b9696659964990e0fe6d2adf9c57af57543d3cd876c141592dbdc04d0d29430c9fac2158777ea0bb7d613d6d78c43d74b7b00da1cf634e5b58163d7a92d2027e79b6f4546d5f609db8e68e14f9736b9d1648fc367c33db46b1c1f70ca6d01695a2e04fa024f1ea6f1e86de1f3e1615431107e2d12197d39fa9cb2a51e191c08a2b40778db80e25fc0f16380b55342678717c59d128e3ff0627a65b6bc7e77f5676545b9e3f57867533fa4740080f48a74e4e32b89df489279c79142b240d2d9360b0e4d871b02935f4aacadd3b2647a2233e33a7d8f244d53549b6681cc935a5eec3b671e4e2d6f931532b39c11543592647a31c381d3038330538555b7672e3fbb95de97a71da7724e70ca759c15cf6859d23649aa627de8c5a16bad6a5579161d4071a7047400866141df1bc4c41a607500d11f812b5560780eb8ee119c69174cf980cb730a4ef6035b7f5b4000307eb5d0d9d5f57c0b37f80ffc7802c7006c0238010c7f0d145f0296be07d00f60ad3e27bb80688fa873ebe3efc733adf12f3edac303405d3580134071a7086b1758ba01600bc05c638e2f893ac3b0001ff0ed370aacdde24368d3b93fe4649acc9372527ce1f4a246daa4bc287a984892e9653276932ce4c9a905676214c183f5236f8e7cd712bb18cb5efdf06affc23d15a1be20e289cb68f700a802239eb770bd3afdd8dcffd428822f1808f505b17057c5f8b54b5fb546ba23bfe33e103a1384f28b8ede954e58bb0646cf4591f2cd62ecdc287cbef6baf9d0d100d6efc5113a13847a1f089d0aa2542e6d22f26ae46ddaa4a69b64854c7c92202b642e2766eb71949332edcf494d17b9745bfeb7b7bbf714e6c7e7dba66e4ae5477f967b1e341119677e6992b9dbe606000f0020703af04cec62ec46ee524ec92c6b8d6f0e372a35d4591afb60eca70bef5ef8d4eff73ffdbf136972423adf945577773a3974563a59abb5ef06891e7dfd1dc3b0003873d980faba01789d9ba61b0066dea8d5fa0f0a94f84ad25fd6c50000000049454e44ae426082</data> </image> <image name="image6"> ! <data format="PNG" length="1167">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000045649444154388d9d955f6853571cc73fa9a772323ac87d28dccbeae8dd1ccc0b1b1a706041b081812e7b5944c6d2878d04f760cb400c635af787599f6cc706edc3b0891b6d3318736393ea8323039d71a88b65eaed8660848a77a878030dcd6977f1ece1a6890a836dbf972fe7fc7edf73bee7cb977bb9063dc38263da3497a74d53eb9e5efd7f71d234976f08796c187a22c3706c64fb2b6f79aa8155afe106e0081e43898bc211922a600b4915852d245e0096000fb0baa2f801783f96be409be6b2ded6aff5c439ad3f9fd4babcf4285ed05ae727b5fe4d6b3d33ad75456bfde574b85ec59969ad5dadf5fe61ad5ffd464f9ae67264d23475b6c7c2dd95c6e91aa44a019b4c88af0de2d75c8c0d0eabd5b8eb13ed36a87e378bbd98c467068381108314fe57498cabf3a07b7ab5deb849ebaf6fe86b870f69fdc36dadc7c6f5bfaa0bbf862f9b180ff1b371adb74feb69d3d46bd63d213f8a773d4985055e0c3a71ef5ca4fbc07b2d85ee4f25ba4fc4287d7f18fb5c99ca1fd7b19c3874024f5934649dcef273f8b7f24455807fe3042fddf1e8c80215207ed1819a87b37fa475e8ec0723385724dc3c4c627d0a6a35e2720b7c9883f30d588468b7015bab18f64ea8d730449a3cd0910f147160f6d608740d42343cf4f8bb399237abb87379a8fbf896077b47a9fe3c06f506de540ea61ae1f0d63e2ad5e3a052f8419e34d091151202484a092f7be1e08959765ed984bb58c3e94d41af8db12309ebc0deb60fea35acf53be1d2102c8694f8ee1cfc398621b21483a6620494007624c3a95327a9d42670ea0af7ec18886ccb9ed2d5222c2abcb3135057348e8e8669a97be079f84131549c46520112b15c8b3c73659eb84ac13d0fa7ae40e55bbdc4f369a8fb582a057e8d287100a2eb2c10510c91a688a2a3d0f4b84c9b3c20c0a50842e2060a82568bd25c0100bf79993fd7e6016d8f334202d0a7808566f7850d38428200470e3e424c6ccc0060c8d01e63d768ab57091a6d8f0b810a3709bd0660ef042ee17e35c803038f298ee207f970be6b3e9c3b5d222ea30f29a699639181234d9f6d70764f82005b4ab83c14ee2f40e27225542ab2b0790bf427428a67829018224b01da1ebb14e16c19efd42c008d5d366c1ec70b14a8065e7f02d2097c0108686caec2c7075b1756a7864084dea781c8fd584c1bbd36343d2536088501b06891383a02b13e98cbc31ba3202de87fc8f81d499019a008f51413bf0c1139d225756efd065c41fb7b1b33f0ded983b59aeb7faa0528bf9da44f8601a013bcbb3ef2d2653ab2cd1c3b72b0eda96a607d52830307e12eedb4acd6e912142a9049d227c394b029444b401e45e48894cbb95e7b6d35160bff08226cfa0118228a4f034344a90ab003a8060d6c1905643b459dc05f40a7a4727d9ed2eff32b6b3e453c7ba6838d7d44701f043c130c803a4f74055c55e3e96000d4058c25054a613c7813ea65580960a9064baf43fd0cac04546edf227ecfe7e4fd7b53917dd0938143df0ad252c8b534539b0f35f11fd72b35a58a6978ff6fa297550ee477407d0000000049454e44ae426082</data> </image> <image name="image7"> ! <data format="PNG" length="658">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000025949444154388ded9531485b4118c77f092ff03208ef8105b3e5c04285141250a84341a1d38b82469cda2179ba75b0835b0587b6530322b49b189776f23d0ac54c621eb4b4430533088e17682142a57910690e72900e515b4cc52c0e85def21beebbfffde0be8f8b743a1d6e62456f24f59f0c36bc698f4d3671712fb89899cb9b6394d417b6360ebcc2e5fd7e1871a61c4c4c140a1393f22d2f0f948ad392d71f0432a4e07c9fdb3adfef9751171785c2c5c5b7bd0952948ab3f07856f06c1e864629f9b697ffb3ae1f5e18fb035e1a83cad30775ebf974823787f03005c58f2d5ebc8f139e52c835fb378fbab8ddd0141577146b612cc1ca2e6406616517e686e32cdc03334dc91fe8df3cc2fccf3446bc9249628d0c81024c7a593f85ca21a05b855cebd1b5e65152f10a1aeb6810fc7d286ba82bc8dd8650c191056ff7e1b379d647a978c98f7be9eb8d677e4c10b3a1dde08c6b99113b6d9a5d531942ed1b21ed4681981dd26e90d38bc155a6beb191266657a2db7a2f705ad9e09c6057e50970179486e5fb808905f62a6daadb7a2fb8cad437bc27601fd026e8e9639f5713c41395912498c6ef493aa8012d42b45cc7105b8eced6baf5c524869841cb250c9144cb104388e8e59bb7f914d02238b2bac62ad5e5cb29184a60312e56d1c8323b1d1faf83212431d618174934218698747436ec315628caec58202503c24a0e0206a0ff4ea5e038049a320431e990adf64cde391db221880c4daab5af503b0175a71b42aacb70186ac7705c079abc03211cb2d59ec9bbf29529e6412c814c6308a001da06640d4400723dc772f5f2b9c8ff1fe4c6837f01b937717ec31c35cd0000000049454e44ae426082</data> </image> <image name="image8"> ! <data format="PNG" length="685">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000027449444154388ded9531481b5118c77f9114ee20c21d28245021072d2844b80c4253102e1d130b3692c57630a75b2b4548b72eee855a904e6a3214a75c3a254b8b110ab193c920665048a08508067210680e3cb0c3f5d26804757028f42dbfe1f1feefc7f7be8fe7393f3fe72ed6d09da4fe93c15ee3a9c1165be8e83d2e4dcca94cf19a1a9a1026b8d881b0024b5f400853b5bef161a366642f9feba72736134340c0c26267b42001194562568fd4492715da1d9087e9d12835c9ef05c81f53059e3d398d37dcf3fd1cd2d19dd0e9828a4dfd7099d9f514a4930a1c3961e53fe408e6a2015e26e17019159b4a71ba205958b8392e3db19918c5e1820a94e6434850a772a2506b015e90842ef3211165ac4d5a93d93c80c5106c1e40790fb6aaec263a73d101e362a42001254248db0734b651566a2d945cc7f0c4da718f1914958fdf597d5393cdf87b888cc0dbaf0ee5fbe07f84961f36b4016392bf3ee31567b1bb2b89ee8bb5cb37bbcc8b9f24bc622938d2551f3f10b10001a89d40a54136d689a72e181312356cc2b96e71edaa5ae9e8e445432324aad8ac364644b3f213120fc1b4400803366a71aaa0e545437379a12bae34f56ea8dc932bd00541041b827e08488eb105548ec1b29d37c16a03b2397495613f73f64e953352844426fcb09e84800f9874c29e4f4238089124f87dc0996c7246f45ae39e39eb0b780399e018c83e7a357657bd05e6292676339ae055f55ae39e39e52c36a9c60f689a303fee185be3ce039a4d4c6ca239cad55e1fdfc4f8aff9bb05bc4a461a05c9078d16d006a84713a4770726efe6e6fb596c52e629344edc505239f6770726ef36c67de6195016a09e4a90ce5edef7fcff41ee3cf8377e496cf5cf6c8fea0000000049454e44ae426082</data> </image> <image name="image9"> ! <data format="PNG" length="865">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000032849444154388dad944f48db6718c7bf0e0fbf8c1dde1c06afb0c35bd825ec12c70edbd8a1ed288c29cc167ae8ca209b6cd081d0213b045798641e8a0491e94116d150d34271584aea41d64cec54286864a01b5292ac07956ec4d0955f7e0ce1b3433456ade0c2dedbfbe7f93cdfe7fb3e3c0204e8242b3bbd64f0c9b3707c409df75fc03c660a80a7ff37f82100dc9f593a12c06362e4283606f66b60d60f069026b6b45cd8bd6c007c3fb704c0447a3fa03c438cb91a71f5d706c114c02ffbf8c3b5809eb81fdb4be63ff521cd5843e0894c4d59a26f82f9c18d18b9dde237c09f239f1ace9a86c0fe0814d637e889fb4cde9edf2dbf40a2977ca23765a406bb62283909cb30319a05607e6195a5d172bebb6bc8d4eddae535ed419b9a9af6bd8cbb8e85e620faaee7694d41e98d9ead7149eaeeeac798b0be8977eadeec826edecaad6847676edeba56791e7c2083244d5eb18e8ccb73d702097812013f02832e4fcec52686fbe11fe889a7c8f615f217dabbeb4a8f559cf9acc55cb62aea5c60f49aa7cd0752cb394f6a966442aa3e9242e61d7df7c39baa9496f5db76383c9d4d565e043e9081eb6e8cb407d316beb6314922e94e537635e5b4c24604d613907630e3aeae5eb731669c390c3ef079d92e03698fd4253b507fd4eb4cf9ae051cacb91af0490488d4f644288cb86dfa5cf430f8a5bd83b6b7246d491f56bd3feae99f0503e1b7252d06d223ad282ce955499b5529d22915a5535f84cc9aa7a9c396d43dce7d19e26c3450e61753d9fcdb1b6f092b7af93d9d564b203d302bb99de0ccd94fbd6d3507d2a257295682af4ec9fb48ad41879ca7dcf7c1f9f7fbb7ee1cf1b8dc617fa657b020480bd63d481a18756393576cadf9472d941d5c7357eba5e75c91390ba3eedbe779cd7b0f92cf74de5bb403ada5a0a3ed1599ccac562eec78832fdf288def5b23557faa2854312b7b47f7a682525b6fe07ebcf182f638f1108adb226b86d427764c925297ace1b6dd26e341f218c52759d592371b5adc8a75be6e629b1f58f3b114adfeb965427f198dfe1edc6958f1d045eb18b4db0c0b1e0a4604331e431db6de150d0d21494ab4dba87fd116e7bb3cf8dc9068b7631bedf6c810fa173eb5c316583cb5490000000049454e44ae426082</data> </image> <image name="image10"> ! <data format="PNG" length="420">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000016b49444154388d9d95bd6ac33014850f850e1d3b74e8d00768dedac1de1cbac464e8d037a821e00c1d3c6448c005195290a11d4e075dc5b664f92717ccd5c5e2f8e3e8d80649f040926421dd9de3644b925872d985575a9bae9459c451ba481c247125754bdd4e1e24e66f873821e3682b7d1eb9598488c50e5642fe4972cf05c223a52f46bdd897c68e689e1de31e0b71282d1cf13e4c2ca2a7a31a7d689b9abef8b0c77270d6dbe019a8fefd2eb94f2ca2d65b55690e96979ab44d4fd063abe5e4d82b2735eca4c623d6f2ca5d895580d8eef7529376842d91f5d66a5da44f117f99561c4689fb242162eda4a62c4f423ce4b1767ac863373527e9c796f80e00563990ac33e00d48d61be919b033f3ea156dfd01b8079a9f067802eaef1a7806cee71a7801927c63f671ced76a22353df22ef16475889b06c083103f0275dd274ff26c3e7131959a01e2b97f84d685406a54657ce9e778aec781d4dcee71eea4c5a66727f3bbcc1fadc7ff8fb2164cecf43b7e0000000049454e44ae426082</data> </image> <image name="image11"> ! <data format="PNG" length="820">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002fb49444154388d8d9531681b6718861f990cb9c1104132dce0a190406510d8850e2e6450b6365b46778b3717ba747433042583388c098d86804e19ea24908616da3883d34460b01c1a6c1907b9d042043648c52e3a2397bba336bc1dee97a5934ea11ffc3c7ce878efe5fdbfef0409e51496979aabaa3885e54adbb0f9424b49cf4a4a3c43b570abf4d07fa0a1ba5f7ca6fc2dffe1ff1195045a9bbea07b9925ad3995d2edf95a7bb54fcd8fd3595c96ffe37a4dc54c456bced20785370b999afc79f97b8eda85a6d6ab75495273af3dcc8ee4dccd4b72d4aede940a99da68c7d5922447525bf9bb79a923a92aa9a3e825037df3e7f7e6f9a6368b331a259c5a2fe6f4d9fc23085c38853bdfc11c5fe2f288f34048bcbf76153eb93a075e11beafc2d7af5349978a5ee7a4ce82a4f72359df31591b0ef625f7d590739edf9e91b4201d7c23a96e38d80f976f2eb47de01bf1e73171f4f4bed49c97b4399a3b09ca92d41eed7cccdd70c186a0511ccd6c428627401abcc300de825b5e618e6bb8e595683bfc0733d21fb3925e8d647d94e38e61d3f0377324c6cadb215c81e0f762c4b78b70f188a0b208178e085ede6132c931c038785e00366cd51a3005eebb95e837bfe8485b37a47f9f49ab39a959925ee4a466ceb0343ae3ee66ee46a8efc41c97e1e310efd745b81ce2bd71a3fecd91a19b9871100016b4f63dc840e34f8fc96ccf71cabf372debca79b87c03b61fc314b00d4ccd9ef5bbe1563c0e234a0bb0817d600268007f039f928a32f68ef036ca7012e26d8486bd3e267a128976b3f50e039830ce3fea775cc8cbbae8c234502399e71af1388ea38bc38b462ee6fcaf33c72e9c86b4364238358e07fb3ed1e0b86f1aba736c43abe5c144cff1d817c716fc1362678130249d0d218cf7bbef7ad95ae391e374da020fd2972c3804db4ec33ecc65af475148e2dbcf27658f07cc9e83c7a70cf1aba78d98636b1c022fc04a5b788701e94b16ad56806d5bd106debc9efae0dfcbd9d91998dbeec675bf1507867b7d739cb4504365be053c31fcc1f027c35f0c5ff632fe0f48e8fafb65007ff20000000049454e44ae426082</data> </image> <image name="image12"> ! <data format="PNG" length="1019">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003c249444154388d95945f485b771cc54fb70e22b4e306b611c71811d66e0a0eaf3058461fcce843577c10f7321d85689787d9150aa1b0e18485d007c94484e441883a59225b761b36097d10a232160521d1ba258a1d37524752e2b857a2dc052b3b7bf8dda8519775e7e5f0cd9f4fce3ddffc7ec03129d1849d1b9c5062d4a9924a2c4e3e26951897b9c13ba8a17c9a74bac33cf54678527131425d8925c8229958489186e92532fe204166b91c1a535ace023bdd21365ef31100d4498a1f0804c32ea6c9f80cc912995cca90249926b94f2657cd798164967a2018b6d74aef748709dfbd905d1ba5ae3c4892069932211955254926d31972ffe8f5c4428ac628e74ec23c2349f67a7954457eda180e47e364894cad8a602c0a4b65cdd9f4cc86702516677eda38aca46f908c4744c701af26e0fd5e7feeb05392f9a24692340c43cc7931ab8ff3c2f3c2fb077cc31570ef00e97487e8bc6150eef00bb03aad31f1738adc27a99a090dd32b73befa4958243311f5b00e47578001af46b9ddcfc63655807d8301b130b3cbcaa2321b82aa95cce49a56e59edb9ee33ddbaba0009089e6c5b6f78f756a76c992e9da89b9442683a9530bac52afdb933b4c5c225359b5aa4b4dabeebce2dd5dbdc335c14a7b723834a988246973fb956e2b9d563a37e51f0a50694f9e79502a7a2eb837e69d9d5fdc995d4c033290fe358ba606205728002f03baae0375c05f4fc517b26b39acad64315b3fbb53133c373fbe53d8d27ba49c150bcb59b436370139a0a1be1ed806ac562bb00bd4bd0064d7809d391d0d6fb5e256dbad9a899f07804d7579fd91b6fb30a7ae5f3b38786a69725c466eab006bfd4514b6755cb4d62132751f53df8da37ce1009fbf7a13335af0a3fbf2a3afde912df6a9a5bd9fce0403c0e6e6f2baf462e3e8db0f5b2d83335fdbe4bf9ba5a16f47d0b0d7804fbebc33dfbcf29eb7fce6796fe7eb9ddf8ffe76afedb35720e1a54d5cbef4674bf305c91e5d390d876f8c74dc081180a5d6e3556474d9746da99fa4462dea20bf9018eab24d9cfae07577988d57c59f3b3543caedfed3f7ea31053a6c2e4665b21812c732ea202725fadbcf809b7acdd913aa3e41ffa2feab3617ef1ec1b5884cde96d8df66c2f3aba46724c9448cff093b29cf159b8ba332590c8be411071994d8f7ae6d027d830976df15b793a3435c79be49313f0bbcb74572199f1ec1f36332fbaed879fec34bef63e8f708f04637cadbe30080c55f2278b275fd99528fafec7c031410f86168a2ee8332ca7fdc445d7301e79c3d2196cb9d28ef8ea1bc57c6dafcc0b9ff5b090074b7481392c5e242e3c778b2ddfde33ffb926b14f087ab620000000049454e44ae426082</data> </image> <image name="image13"> ! <data format="PNG" length="884">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000033b49444154388dc5955f685b6518c69fd65572c0c1895b597a172117edd8c55a9ca0544841456448710cb122ab82a0db4d87ecca0b075e1ea404928bc06256486e464ca1948085765049068524524836aa24a3e8c9e8e49c51475a5ce1e7c53921fd93fdb911df9be77bf9cefb7c0fcff7f09d3e40ff6b598972d44ad27ce181d155669f4b9a2c9bd469b2067689e88bf0f6ef56ddc93713cc5a89f28c9d7cdad0d8776e48619d93b2d5caa5fd3b81cf8abd67ac55ae7fbb047609ac64d9b54b84f7efdb25a2acd1ad6d88a738eb94488f5e2dbbe124042e1e15d4ff63d5bdd90c4bf93fea92c6ccfcddfa7cd702cc42b39ed6b9ee406b774757de5555114d4f9d19333f1d7425e9d2616249d2488cb4af04b6c14a96677de2597a546ec1c702b43721f47999c079cca3c43f10bdbcd0c64941265f03c04a9467718e92b6db1ed6369cce777c9102bdb33cd353f5e80acd8cef350eb0e5e3fefaa7c30ed81eb6d7215e0073f26014fb3b0bf79756ac392ce5efd6bd3e70e8e4279206a49dbf2519d2caef2dc990ee3c6e69eaa13432520f6b9cc9238ac379cc8918b4eb104fd50e78d9f5c1c72d1f4b1e58c9328d06e8f5c5f923c49214be46da2a383829a8d53d1f3ad8f1d6d9f2168e0334fc7e13e20b36a18ba033b9f0012b246977af1e1b0905959274fa58509274fa95a0f444320c49ae141c34a496140c4ad95ffdfe91f4d1c9217d1095a40bd3bd555fad55db9bde6d03142b76572160db9ee2dc52e3401f9fab6135406773bddf935082e96ff2e054bc9c022caf1ef2b6016cefeb6d2f41d61c4ccc812299c9970e131f3bf5e1fd075b435f19275a81f7fe3caedf5e76f5d6b0a196b3a3e3a706e4ba92b127b9da91313820f7e18e8c5707945d69eae3c741fd75c2d5ed9fdf08f5541df884e8c402c46f41bb0254f629def61503c5352f4556d27f6b52359c2dd0f8e2331ef9c9e2cc54026e646bb001b98217c162c906c7f734e9dd85b301979336a35f83229979457ae4f940bd4fbab60e376ed5a0e17bdef00e6baf8395f5b2aef1455711ae2b92093f9bb04b6c06ce2f57ad0dc82dd96043a6d0e0fb2c8c7e5944c3dc562433dd6bb4efb9e451c2a6a9ead0db325fdb932a77f4e8c1bd9f6e4a1762bad777ff69637dfc473fd37f01d19a07f74d703fc60000000049454e44ae426082</data> </image> <image name="image14"> ! <data format="PNG" length="3475">89504e470d0a1a0a0000000d49484452000000300000003008060000005702f98700000d5a494441546881bd9a7f6c93777ec75ffce8d54ce56a4ebd5b32812ee91d1bcea5531c1589786cd7e4a8d60b7462a6d9d4a4686a7295d66caa7407fda3c7751247d38d05a4754b26d1264cd939dc060edd51c795e8fcb463b52b05ec4424363454762f743647919319ce8e20eb7b7f7c1f270e908474edbed2a3cff3799ec77e3e9ff7fbf3e3fbfdda2b24b162c50a3ecf08efc6eda9e66b8cb0826ab0c6a0a11a18016ac01a81869a05f4d2e7c76ed387013758c3d030c32f570448029f01badd8615cb7520fc346ecf6afe2e067f500bc4805a20027880d80cd4ae86c80c78169225cfdf21effe7c6eb0c0eb3b02ec070ac0ff7c2e07b41b3735bc1b1be1c1da47818f0d728931a82a413e310255354be825c8cf7efe76dd662af21e786a60e0034e3d15a00d9802663e8f031fc7e09bb59b800ac0cd2cdd5faabc01b173503b058732fcf4c5f7f97b6012f80ce98eb0babbf1077936ba1be9b87da4dd523eae2f7fa4cdfb2228dc84b49f5f195ef80d8095f7643d1019a1be16e03ab0a5029c03b0a6ca00710b6267ad2f451626a7a1290929f0ac076b8c6fb89c3c5c7460390cfca776232590929d069c9b46844efbcd49d2062d195d58bfbac4fd523da6b9f74c54482f23ed47add5fc18d800ac5c0e0326518681cabd702b01f701b7623454ef22938a402558ef46c0513bab1b39a75b23fdf3f4dbefcfd3ab2193b2cc7bae7860b529b5c02ae07e60d57218783fba1b297d40cadbc8e4c3469eea91d252d76b61a583d281fd2674351e32f7c7ede7c743523a3f5fbffd7e891e1fb299cd4b527c8e814dfc15f0dbc05796c300b50063c7600d707d10d678b0de8950b8dcc6a19f47284c7bb02613b4cc40f78941d8d840e6d2206cc4960d582347e7e9b7df2fd5abaa7791b9d46fde77f924609a1babe7ecba67073c35f6490d901a84e9edf4be0e750e0fc788b1f7590f7b77434b7315030f44a8776e67f04437e58e5aacb70f51eea885b70fd1b0be7e9e5eeea8c57a732fe53780a32d945f9bc23ada42f90d183cf117946f6c84eb03b0a10580063776072886c63d8650f869ded74b5e85fa7ba43ea9e74854ea97a2436965b392abdb2df6a3f6e37ba49cb4e78701a9af24cc6c193dd3393ffcceef91d42ec55aef94135ea58f20e5dc52a44eda8f423b516bf55c082de98026e40c9cd48f94d07ffb8fc7a5f352e0a4a90cfb8207e48ff9d533d42349ea4c768a7ea47129de2fb53f5f1ac392f22129979672015372ceb74b0a2f2c4f374a31a453481326feef390702c178a526f4d3c191c4c7db6b383c3096f8eaae6d55444850f5688aed3fdbce2bdfff099e6a0f6d9bdb68bbd446f743dd700512ab530ccf24989ed985f5d64049ce34103bd70d6b2b61f415780418ed5d58d638c88c028f62a619abefcc813b18505695214b7dba2a2968808a0e19005bfb5b154a84149eb0e9cf4a0105e438e3105984854823e74b4ef3fcb37e457b25e56c26727e69dc27256c84979296d7f41d0be92a52c79d0ccc3a108d24eb95d37f84cf24a5ab52c8325d259408694f728f9afb9b2549c9bcb9be2fb94f8eacc3187d15710691478e98438ec30e75593e25f74bde269fd4774051ab5d4a372b70b84c4ab815ed774b893a5b2ea01f71297d12296b3b7170811c504cefe9a6148ed8f19a3680797bbd4aa69352cee8a16c4879e5d59e6c9f433c8718424e395591a850a73ae5e87098e72d29d0217576f8cc1727dba54497910a2f2dcf344a49330f520ee9f0423950cd7723e75278ea8035d036d546cb9b2d0cb40e507016602d7467ba09ae0bf2d485a738f6d03113935bc0f191838acd15548e5602103cfa2e851f17c87c0a0df510fc7880e1911626473ba0126263bd5009a4ee41d638c85cc494ee8b26c4ade1dbab8c44d85250b939e43988f2cacb9ff52babacda93edf2cb2f57cc2567de398bb82be1529dea5471b2423d433e058a7397ab25326687d199b434d12e25eb8c54786939e495d2984a24a4d71660c093e11fad7329701aa72a1ea860fb07dbb1d659ecbab08be0fa20cf9c7d8654750a3e02d7661795c395142850f9a68bd41fa7f07ebb85ed6e88bc7a08de81d8d141f83a249ce0a085b63782b0016263d3661a96e95d5ad660187003a38b3000dcafb43e09040d709d439daa4854a82c5626c74d871c3187ca542657c2a5ae7c97dca7dc0aa7a38adb8c296b44f8c57de62426299856e88707ccf71d34b9e0ef6e95862aa4a05b9aa85334e89626ba16d4c3c75d26f6133603dd483befde076ef5be6dfdedf64d103b9b61efe6bdac3bbb8ea9ea299c179db8dc06f1ca072a61c441ecc9182e472d55e590b854807590f9143c5752f07a2f9c4850f8d1f768f8a7c3a42ec3dee7e0e8483f1f5c3c847509d8564ee68a83da6de564ae0417d43d5b9d64c6001770c96680bb3340bc2f5dee3fae9c12a66064f379355a8df2e57d6ab5dae7215dac4a3a6fcb71bb7a3d562f6df349ebcba4d50e6935e6fe8414ed959a9b7c92552fc51a25f99696569d74d3eec2423ab230037ce7cf7eeb6ae375feb5ff6ccc74ba1918ac1fc435e5a1b7be9bc275601d4c4e026b217161121e814201d808bd3f4f80bb97c9f79e811bd3b0be0cca2a485d0636406a6d0a68e195776ac10d99d163b6ec5d58afc130b001c8603af1420c00ec7bb1ab5a31c9df6f235b9cc3d8c8c7cfdbd7c6e75f57c2549c704452775caaa8906adc8a9e8ecf322049cdbbfd0a74c85417f9a4f38d8bcaf819b741feaacd40ef9d0cdc3e95b8afebb5d0e97cb7148d19ebf2c570b1978ff99ca47e299e30f7e3b633212b2de5a4a49dd8f171e360e88cfd5c52cabe664a6af660bb42a72aa409d7e23251a6743181b3487d28b463710756244feac9aed7c206d59ce61959443c70da66e2b4712c3c24654f6bb68fccae6dede13f699f0c996ad4fe5c8f417abc717119a933c6e76c27fa0c03cd8bcc46f5b077c5e9c28ce7bf0ebd65c15a98bc0e551b31b1bc0e129760fb16888c4dc2e3101b9bc4530353d540b9fd5c2570cb7c61e653d8b50506decac066f860da626aaa8dc1b72c7be5d56bcb6377ea359049999ca360726070061c0be5803d56ee7bc9ff42fa94e43f6ec770da46df46b6a7d746b4d871ed0e5c9cb5ceee2614191937d7e2e3e63b9a9b7c8af767a5a48df402321eb373a078f42f52854ac667a98f5c27bacf5ad78747abc8646c646f1804064ea4686bc55cff3a242e144ca7046a37db485743e46c618e918dd07f2145d546884d83d3d9c2cbff16844a0799cbc7cc6ec4e55e5bcee9556e87794f715c340c589f90a2b8d97b17060056c5fbf4c6be976cd48bd5c6463c1ab3af15912e56aba4c909ff49732d10342cf41cb1994ccc3118e8900eec6f9572650a479c52ae4cb2e5ac7ec6399f811d484f7011d801ac07562eb8a46c6e3a501d7f51daf7b2d9ea48dbc617abcf5c821ae3e27678252724f5cd257e7cdc38951c379f0b5969e9a6a946adcfe695cf39e61b79b7e32a0a3d6dc2c7fb6d5e057e1ff81a2cbeb97b5ffbf3fec1b69a5d8fd756028f039f9ab0a100ac81d805a8bc06eba64bee5f016e007526e1ab36629a50f9dce77aff191ad6c1de9ff5e3ab9e66cdf00f00d3a41a4a0cb066a0c16eaaac869f7cc2bf749ce318f02130014c2fb6ad323335d5f00fdde706489d35d5c4c4fc24ac31c6d5bae0642a018fc3c05b29b806835726e1519303551b21366a7221f3a9edf428340309c7240e5af8cbb1c939636d0926d61becaac334c3bbc6f86bdbf85f02bf026e024b6eabdc1f3aac4f9a77fb4d232b6d527695c94754b2a769c2a5982b81a0d1a3e74bee4beab27362cf8b26175c9b1a0f027f02fc1126be6f3f9e007e0fd8083c88d95ae45e1c58e9ddd9f542f3d352e741b3904f26254d48815349a94f0a0fe5e7e540366bf46cce18dfd3979cd79103c1a49494fca7b26a7fcee442fd63fbfc401de65787f2bb1cbf8959addccfed9b714b3840cfd6687973932f17e828417ea284899ca433469f45ba58ad123295caeeeabee392c6e790f736f9e4df91bd5856e6fe73cca479cda2c6dc6d2ce500b0cabb33ff86b7c9a77caf5d654a102f8e40d05c88c6e633d2d56dc225342465bb8dd1cd4d927767cf35d726efdf005e0cfae5987de82fdc01eab7eeab0e7448edcf07e631509ce0e9aaa4bc8d70ceec464876c7ce4a3d7d52e8b0e9c081fdfa75ddd63dbf00fe14f81e06f98780af00cbffb9f45e1c00eef3eeec39dddc24f98e179136319d2c0da7a41d3637a59095b5c32564106ff2a9715b3aec78a0ec07c0f7319bdde598a9cd3d6f327f5e0756f89e483fe96df229de3f574dc2c5b98fed84afb88e8849c953c6e84087d4b8a3eba2abdaff2ab013d8027c1333455bb5e85bbf400700eef736e9136f934fcad988e7ed6a9496ba8e446763be75b731dedba45fbb1f6ded019e02be0bfc0ea683ae5ef44d5f92032b1b9fe87a21d0211db04b6a7165164d18565a9f0bcc56979ec7e2bf703e50d606fc21f0bbc037f8bf86cb5dc6b27e27aedbd25e5ebec1f3a18396b57b5e86da47c0faa040f0cd35a43eeec7410b53d70f7d181b3976e4ca95e14b9889c515cc6fba05cc0cf28b1dcb600060957f67fe8de6269fb296d47938aa4087a92efe9df96bae4d8dc5b2b815f816f055bec870b9cb58f67f25eab6eea9ae2c3f343a8d417cfa566f7ef25addbfbffbfe778e01d78034665a97c3accb9685d0b2c7321900bba4063aa4c66d07de773a2bbed8b2b8ccb16c0630cde641e0614c45c961668759204fc93f49fe3fc6ff023860c20ac9978d930000000049454e44ae426082</data> </image> <image name="image15"> ! <data format="PNG" length="1265">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000004b849444154388d8d945d6893571cc67fa9899eb86ebeefb423a18a09abd068dc4cfda0552aab5a908a307503ad7813bf069dec42071b2a1ba86c8e813aed86c30a7ef5425cdda6f83167743aabaca5c9ac346ad5645a9bd01613b5366fdbb7fdef226d95aa9bcfd539709e1fcf79f89f636190ce36cbf08a6bcc2f994251652ded7e073b2bebe9289dc8acbd41c2fe89347e9067490df60d96a57fe10f88c28bcda84d8d8879ed3f05934c73e6d2ed3e9e38ad527a53242bb5985c7b4c3b19fb9176e7ae736b2de6ffc1f107441d7f20df975c90a6232d52e1ab92362522dc15d1447a1d7f89a989886a10f135c81ddfe79766ee0988b360ab8cf9cfc4fe16991ebcce997021c3b520183e488641b3823a1343e1046b028a758c5b29f4567b44b5276e63ea3dc41b3e0b6e9a101a0cce003042e4c54c6cc64988fb205903ae26701e80b5594ef426d0751dfd006cb0dac18e3bb24c9f13f1505c3a75fc66cfb283ce1782c9c55435402b1004ad11f460a457d3b85fd95817541ab7b917e9521a1caa8fe06805f7a9142a978cbd97eb6c89c66afb73e0e37765ae718dd51b3ec4aa3941e5826aa7a7749cfb60e44cd98ac44563552cb47949a9e65e8ae2bc2a761be8b0d66bc71d82d482bc19aa70f9bc4d15e2f4ac11eb00b9e8d78e6f1c2d225c10e191080111c76e893bde5b3b1718f66c0adf46195574f8cefa921679521278200b5b445c2744b47d228e2dcd51d74a99399078b9cb9e6dfc09e40257002fa078535ff06d16d0f92c38b8c9d2b6d4e5de4694727f91de4b1cd6e543720c18f39d630d55f7116005c828af497511067e001ad3f0640136ccd81adf1ac91edcdd8a69960e6d2a3b2b635c5213e1d0755039601c4b9824f34c4007c828f3d99b9c99a0f980249003c63548143b2769396c2c3a212307c369e5bedfc9796298ca9b0ea339f49b467dd961e03140466530b6dfd14e99afb1619f47e30997d3b5c4ebb14546b1da8825f62f6c90c90bab3a543fb7f22d4b6fe53dee2927dde1f3607443329e18af0aca576bef9fd5e0e9931e5650253e23c6917001d9463de04b8f9ec387b8af73677d3ed555b7b8b07c0a6d87ae337ad12416adfb9dc2f0688618416022a8a374aa1a56254f592a07fe0a5ff9838f6399fa7771f3e9ff81153040a587481c8a6ebb8dde949721f1cb580db0600285e9102a448a331b161ba12da733fa19cba7ea7392595828ea031603ceb4c930c1f0608926191a1e8d8a9ec36678b060f4ddac099407549c5ae2d5ff003d43fac109ef278ac9f6d9c936866913e85697129dccb6dbcc16e06de072dfc1249009c4fbf6b740aba3d70c54ff61d67cf995113d7a153006c063567d7ddb76919e3237ef460f70ec75abfd6775059d196419213218d7075b028c04660137000f504bbb0a676e6f0f2dfe0d78f8dc14f93e95d75c4bf6e46baea277d05c999e9592efd8d17c8366112a44d40e116d6bf3636d9fa4b829429708bb3b7ad512a9c6513205b03d077d915c6b64b4232041ee8a2811d1b64ac23157bed0965ddaaeae8aa9aaa447db2d7fab1cff3ce08d67bdd69730fbd5c9b1c843cdeb4e1924325448ff255e9b57a5e5d7a5d8d6904d627c6bf2dad2633405ea8047cf1a2d2f010e4839762995939aae32d78d8d5f715f21198d02296028308274a75daf54c10b6421dddfd05735fc0b90de0e7aff4522f10000000049454e44ae426082</data> </image> <image name="image16"> ! <data format="PNG" length="534">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000001dd49444154388dedd5bf4bd56114c7f19725f1100d77fc4241b721f0428377ab21e8fe07da2e180d4d418d12220d0e050e77907090ab48140e51040e4258220e0d29160e06e5104ee1f7121117914e83d71f5c4c1473eb030fe7f9f9e670ce799ea72d229c844e9d08f524c1ff548515c5c20bb5ec8b5c5a32635ce7b188e38a96d48c8bb4244f4f75b619916bc7a68a3b168f041c51c4403a977a1b3f1bb45b45b7db169957cb26b3302f377c48cfab8a66d5d2688aca4625ca53e5306fc188c2eea6215dd94a16e5e572a8ca0d1d001f5234a496865394e64b71336e4661bc10aa6654f742615ac123518e7264cb5998921b6c810f2a9a525315d98f2c4a1ba5284739d2680ad36afbf9d0d63c38a3db8d544a1a0b0d5eaba3823a0624bdae91ae270d0d49d278dc60d398076efd3d66fdee59117e0921bc1726e51e0a6bc27a737e7b7d5098d47b40169aea53d4df3cb40d596e19af375bbfd07718e8b6467df5a10959dbc7ae0977e5460f5739a7777ae7159d71d5595cc4e73df60d9eabfbada2ff70b5befb567478e7132ee3e31ebb8a398b3a5cf2e4881768473d72d3cd24cd0a7d428f053dad357a148fb7f4560173b642f0cd982b2a26d48f0a6e6f19bf32a10b7c37e6d941357ab05a3d7ee902eaee1f070a6dffbfa66dfd0176dbcf61d506d3230000000049454e44ae426082</data> </image> <image name="image17"> ! <data format="PNG" length="742">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002ad49444154388db595316b136118c77f2719227478031d3264b88242cc74ad1d34d8e1a082820ea653910e7e0417a74e227e830e42b339d9c16fd09b8c05d35c061305871304dba97760d0435ef83bbc972669daeae20b77c71df7feee77cff3bccfeb49e2bf8cb3e093758cd6f1ff75fea0862f1f73967965e6c13aa6021196587708fe2ae513344ac4434ba4ea2cfcd4b8308d7fb65b52bba5efb748b57a317c5023904f7ab25595b67c1d2e126bd1c125b9930aa8da2de9b7a4ceaeb4ff5a0a4815ccc3e53ba89ef8d29b5de9e9b2f4a0aa43432c83990e8539ca8bb876db506f813d82cdd0249648f5097c502300a274ad6aa82dc1fb1dc821cd7356c0ef5967ed49c2f33c7487004bc4cbd7067b04f50df711f6e1d9fb0c08b1004484bee1feb683d681b7091c641996d01bd197340103689520b1444b9ba1e17ad3997fd8818f31c3bd386b00e95ad554fc1b30ca9ce997844a37cb7a96f0e688fe38c63360000585f9f3db861fcb7063033eb4a1f409ba29dcbdd874ba20e6c000aa130c2d51e3d1b28ba305f214722e359d06cfd4f178789fe93720642fce28270e7afdb183d6816f0eca39d0f138170c30ccddf557b7302db2cf81bbefd98b665e022e565444e89bab77b727a6790ad7807299956b65d3b3442a9fbf88e6623ca839e85cf693848a054a14b1cee138a7734cd684d0b3b3c99bed1553a695872f26a64942e520cb38c8328e7307cd010bcd32a603914ab3e6a7c6179a4e657f05e858a2e622060b8c8a03e85098e31688eb153efedcda7fb52cdd339221d5c2c44665029549b5809b3e75bc8354e04f87221be67cc54eb29feeb9e2ef9d297e2fa78f25ec8cc8a67f3d059af0b543f17cdc3655c5a84aac07d5734de72aa744206738368ec599b679faf222a6687de9e125d0d3f721287e3f7ec7a4d1cf8101643032ffbe35097c31bf3579ff6b33fd03f50ddb94ad2dad8e0000000049454e44ae426082</data> </image> <image name="image18"> ! <data format="PNG" length="801">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002e849444154388d9d953f68136118c67f512b5754b8082da9588843c184066c9ddaa91d5c144174b293589c9c441c04375da4fe01d1413005b5e9a09841c441a888a52d541b4363aea290830c89b490884a73a495c7e1ee1aaab9147de178eebbef7bbfefc7c3fb7e8724c9922429efa93f5ec8485a95342ba924e97a549a9f92cef5d98a724612410ff9c5825ac5ea77efd0f4989b639d9424555edd950e19b78336de164f1c2030d6a07d0ff003e287dac106d6d3f0a89df08e1aecc60ccc5dd88ab8eebdcc2255909248d70d954e1b5294a1402b5aeeeac7f393eefa27481943ba644ac961bd78b5a0402bac9c1d6c05c08a0d43697807f41a300dfc847bd97e0697fab97127a5a6795bd216a7a4a221154d296d48e988664e44ddb98c944f959a526fcb6c415cfb780cba0dc8023f4c78078347ce93c9d9d007e31f93cd135bd2ce5e951495de46a45244ba17756bf9b33b9db75a10b7f4787fd22db18306bc378030b3eba7a0076cbb4c3cf6bfc4c53e497dd2db9864dd952ec4dcef257f7e33319806986dad3d9e1e846e13e6805e133e3c036380f24a0dbaa05cae42378c67938442e15da150b81308037b43a1705b48ee519b23f70c120e7c9984e808bc99849532242620118715a003ac2570e66c0e8ff6ef6b241b8053dff0b8b646430f1e80ea6be831203b09bd11acaf039088bba41d90c9d9c46390ccfee9b103b073b3c77efbce8f49ca4bd688549f926e0e4b4535aa61d15bb728cddc2f08cc2e8874b96a7681d9d9f0780d68f38947a1ec402c05d90c7c02cb29430f584b36f10458391b1290daa80a07a00e54a5ea7273e29763ae5a2fa49b0f249fd023deb8bf17a5856441609a606e6f5ac7358f983560ce2675eb1a3c7d897dfc2824c0fad22026d6209ffc9442aa7e93aabf82ebd8239eb874567a3825f937aaaf3e71d1d3e5e0cedbb88f5757d5d0825459aeb8bd5072b55074b552711796965dbd78f96af38dd52cea7fa877a8bcdf942a5b13efb096caf018c6496260e0e07096d17f1adfe0ca5f3df61b042233457bcf11cb0000000049454e44ae426082</data> </image> <image name="image19"> ! <data format="PNG" length="643">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000024a49444154388da5934f48937118c73f33cd573399fddd886a4110eb0f2574c85bb388f0144287ad288c3c34aa43c3303ac9e820eac17097d80ec1c48b78128340a360dd940854f4f0665a9304df60e4a8297e3bec1d546cb6b907be3cbcbfe7cbe7fdf1e5f92189bcb2e855841305e7ff51e1e1bb3bcbcaf4ac25fbb8f4e7797a8cb34ad363f5e3d91e5889394992ac758d181d4a396f6ba5754a3237653abf8e9fe730b0ab74f094efad24296d66f9e9e16c5758327902b881cad2c0110e4af14fcad8ac5c575cd2c017ef3e8e02f5c54711c1a9456faf94fca9ccb40d4dd83d2ec927eb23af001750511c78862b329ddf94b7a29206a4b46d1f210cec280edc8d5333dc4a4ef05c6a7caf546b4a4a4b998024434ad9d64524b169c678bc15fcef0f70005540ad229c52920d096905c9f268b48f652599d06b3ec864fee9394e168a64eb45cf30231329cd526262742de00fc8a833ae0107807ac00918a58327185286cdc967b42522892e9952e3e9c6497bd5aa8adf8a7f35c803eb252f6c50b52c7d0f7584e472b96e027bb60d9ece665e93dbd9e0bde05d49f25df4cdd93fdbb9bd1be7d1f8d8f84ab23b29cf71cf7d606f215f05a5d62c41b7df4dac3dd609180e87a33a9fad6470f3a3e66136589a35660f355d686a0376e735961a852402d703972529d4115a058e003565679c537c303e6ff55b6ab9dad207ec2f3f63bb8c21e3466c23a66830da0ed4391c8edab2a3c8c9e3f10c85bbc20af80351b2afd151f68d011616163add6fdcebc73cc7fc80610b80ca72c0923e3734343cf4fef09e0156815fb9d96f21db09d22a06aff90000000049454e44ae426082</data> </image> <image name="image20"> ! <data format="PNG" length="1042">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003d949444154388d759551485b5718c77fb10a66ac9bb7ace07d28abc56ead106ac23ab030981b14569fe6dbd2d151853d58d8c3c806a32d74c43e482a52a60f1dc6be68079d74d06a19ed16c1d2a42846d1aae0830eed92a12391d8e65e54f6dfc3bd694cad1f1c7ef7bb87f39d3ffff31d0ebc26221dfd5da9071a8974f48f645ca6eeabab30af18d714e77d0049af1dbbe2e2e5de9bf91bda15dd3d830a5fcedf0450a62dadb1c80b75f26949c1654e688c887a388c46fd55ba7ebc4ba39191de1fdb26330f7654cb9732d2d9affc9dc7931a0bbe9024a5bab7b450f99d462bbf920693da0cff2755ffddf2018798e8383ea97c9bf2cb11653a527a1c9f75d62c6776332745ae862505a5cd94b35b6ed0e1e690a4452ddee507c044f15e4911491985af86a59ca4b8a49c9c4d5ec9337767a5c5336eb1891d4525adfa9f45aa791778cbf3b8a751a7da06c08ac236b4ff04ad9c25ca0095808d930f1025747e1ede6c80fd21d84a424500b686a1a2093805247ef778380faca258a394bb2869716fc6fb258577983feb72c83d00bf737eab480b84817dfb4e1e31afbc77ba06d612609c83b59fc1282fcd8f84b09657a830b6b1564254bcfd08f8078881f525543c8335e020b0ca47573e248f6e774ba93649137b73da15b8e93225499552c6edb458b5345a2dddf54b29a67487445934110513aca59ebde9739bbcc2a509ccd48001d678351c4e732dd14e762549f4ded0093e5703f91b0dd24250d29f7b72b6a0b82486a431a45c5e5a707f8db943a2ac6fca86a360cdf7381cef8477d6b1463aa16a1deb613b753e76c7fc5f50db42fab9b33e39b904f5109d1976e6f33d1129d92c6d0e4a0f1aa554af74bf514a35baec2d7a9c92b4ba4374e17bceed95e912c57d70cc26fb4727d4da649f449dfcc9bacbe84b8fad7b1666c0040b02fe00a1c82542df84f0d479f0783cd4f98a8a3df9eb7e798f56426d334cdd827a600aa80fbecce7ec64a91d16e005d2ee41ae00878025e05fe0241ec7e3ec3ad9441f6cd96413b6cb62beb368fc511cbc90cd5a500eb187712887d0b721a8292a2e6b391604dbc2f0597b73c6297af65c2bb1af63b001070ebc41e09300c9efe3044e0708d6b7c00ab4fa9a1c2bbabf38ac0b1fdba4b7c12c87ecb673f14af2b674d1850df0ee77141b8697ec9a8571d04b3a9dc5340da27dc3b4b63479cace6c78e1b98de9036c1bc367835d9acfb98a1907ef369005a3dc0b0930f0c21a98a651aa5812973eab93b9df22580eb7b6d9c50bb7971c2b82adc4c7132c4dcfd1d4dc449551c5e4cc24f34fe701e7992a28def3cd2a19853e2ebc2839979957fa7979471fbfe64eed8e7188f60dc32f2e7f75f99bcb7b2e1f16bbe27f0717d023a2949adf0000000049454e44ae426082</data> </image> <image name="image21"> ! <data format="PNG" length="1221">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000048c49444154388d8595414c145718c77f8c8ffa46a0d94db4d9690425a626ac69b2bbdd0383a511d2a68a698d106d94b4896ce961314d1bd4b4a9b7629ab678690b17b29c5c2f157a50e8818a4deb2eda860563585a6ca489a44ba161a6159951475e0f4b0515ed77f9bff726df6ffef3e5cdf715f084188b9a85411a37e0250d04eb329e4b44c41cbce43452ce145cba70e771b9058f8586c26650c8fd59cf0d05852ccb7a6e515048329ebb1011f246c673af44843c130b57a4babbbaeffd2f5845cd2d59782f48e3418a7b7cbcd2aa317d01f67d0cd77aa1a40aceb6c16cdd227f9d7480545ad0c69bed43db5bb67babba545173d35828dcafa2a69a3bd4a4d484520b13d795524aa97f161ed085c194521f8ea9eb95a65251337bbed27c2dde1c17ab41b78c45cd7eb5e3d43df5e9e779c81feac93aa194ca28a576d62daaa8f9ebf94af3c554474a03d0fe03673df76810763935931ac78e402e07803330080638d726f33a9e576b60108ac19159d8d7573029e5d65a8f7712a389a278733c5fe2e19069aae857963a14576a66c9d18c52eace92b3de73f9f54f4b67bde7d4fd98514aa5534a25c7948a9ab6aaacd9d3d4dcb4561b0e850b2382fd93c53d4f136dc71acd3bc407142e7dcededd58e77a602379ddbb7bb9861b80f12a72ee10acf797a43dbbbe62d6f6691111db8047a8dcd7a2e1ebc7bfb916bee95b8602dc05ffde06b8d497d787e3620c632a00b6a35511db66d856d99ad79fc96d358478dbda64fbf5673fc0ba9e405f7883dc7082921722e038b076e92d155b1f613a071b299cbc0113432020e30ef1aaf4a7b58890ebb21e45feca16b03bf097d783db81517110bee8005d5ff56a02b0ab017db62ebf1631f02022a4de8353a2653c97a000eb62074cd7901b3809f30ed68593305583d3145b1d5a5d0bf316b889a5830408c87a2e0d42d7b4fcbfcf827fb60e7e3f81516cc2e8087ec2307214bd3bb13af8c7c165a72b3428626e126e170c87c21b2342261dc14b7ab17f395100dff63dbe0c2b9d0b1d70c0858c6b5fa90818ad5a44fa66329e7b4527b68890209b40c8d5a1d5b579bdfb907329a1b805701723524e9c28f1e5b4824b17ee44843c93f5127f23c1f1f743b599bf0d2bc2792b06cf95e7b59047c2e23478dcea1172c0f2f9e634809670381584afb12df41d2d60dbf09dbd9c75ec38face56586fa0bfdc0ac78e2f3f3b9b83e7caf1cfd7938641e3405b1ab879bf6da6a266b00abecc068c1dc170bb96933d1840ce7331448c9c97c010f2d1bdeb625c1d594c4f4d0e87d71b9f1d2e0d7c2f9173f79b1087da7f41f06e703af743f6e7c3181beb40ea18d52d207b97f4a1bd6d638c549099ca0d87031f7d72a474f3e55828667776752e3ed0e8e3cdf1357557479edfedf17e56ca3dc1d2f292c9cd86561e68c5e2347ed144ceedc6b02d267f1b5f2cbf91bb959eb707c301e3d4e1d2c065899ce9eceabc0dab4c9054474a4b8e268b3aae8ed7a63db7be8ac66d9034f0b5e8192f41c46d7071933348267a841c300eb4a593a3c93f1b438df6ca09b2eacc8b37c70b5cdca72a666d9f615b658de8653d38250d42d79270bb5e307da244e62c5f60cec5bd29914e6757e7e24ac6bfc5da4bd823aa90240000000049454e44ae426082</data> </image> <image name="image22"> ! <data format="PNG" length="787">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002da49444154388d95944168145718c77fd667f29f3069df86246cea5a434f2ecd214b2c56cc250729782a012906c483b5872e148a8758a4a552e9b52016cf167a10b1224410bd15444a0b31041a3d4882a4d9519738344bfc8ce38e87ddd4bad94db33f18becbbcdffbbe37f37fd01ebb80cf80191c29f00cf80e08daf4bcc13ee03760b52e4debf50f20d7f8b2db82b013c709394d02391c9080242c31807f2cb117ed8a1d70cccbff80a35bae2e535dee548d2bf11cb0d28ef82de050b637fb8da46e1c586278e721a9ad8ce3b82474c9b0d576c4fd3ef4930a950b54fb3601414d2a785a798a995db6c4eeb4eaaa19db80f7800f3261064914c3229290174015e3b625f623b5ad36b0bd85f843a0dfd66cd6aab66fa07f2098ed9825ec08b1c478b2f4643a2a475f50e55eab7137742ca77714ea4beffd391c7f5bc5be8fe378eda43f89612f4b8ba5bb511c1581bbada4eb23bf81f77e68a077e077797559c596e617e74fc9a9c7f7fa1351145db38afd042c03834027f0a8fea49b6d447e4f7e78ffe8fe74eacc543a7e783c2d0c17e68103721a02ba8003c02539cd007fe1b802bcbba9140047ae3054b831fec9f8c3b1d1b13b0a751a781bd80dfc023c6b485e0a0cffbff8f51f314aed6e70c0889c6e00a99c525c43dda2b89111490b92aa3ef4a942a5eb55a1521c7fd61b68187c737292ce2ad46e390120b41e67ccec3970d5b0a81d71a79c3ef7de8f29d4bf31fe6fb58acd586217810d9750abe401741bf6b1a4ce8c32647c864001455f245080993d8a2dfe16586cb6b855f2fa80bd549935b3425f4f5f465d421d629a69562a2be5f2e3f2d9642db90c549b099a75bc5dd2a7defb9f25f5596293a5a8b4745cc76b77706c4b0b0b0b5f9bd9856647b019bd83b9c1eb85e1429adf935f56a8af241dcde6b20fb2b9ec2d4907811ded08d7793f3f94bf3f75662a9d3832919effe8bc0113c04e6a11de12cdce782dec0a77cec57323e5b8fcfce6e39b57e2e5f857e001f072abe25769d3112ebdee43460000000049454e44ae426082</data> </image> <image name="image23"> ! <data format="PNG" length="875">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000033249444154388d959431681b7714c63f1b0af2260d01093ad8d0a109142c4f35a4e0944e8d03a19b63288ac0436202256e87a074306e87625237600d2e728da9d4415c4530228516c9a120a5042497243a8303a790825414d019a59c8d3bfc3adc9d1527edd9fdc3e3bb771cdf7df77b8f1320bf8c7c69981dd68c0236161885223c03a3c0163b7cf2f2b3c7d5e14576dd4890c3360a25e840a95a03c7d31e14ef96c0642bb36a8c9ed878399d4d5087e2cf400f2a0f1a0050070ea0f2d0ebab8089bd9cce0e1f6bbcf06566b8bb826ddcad800335cfa461590054ea0d38e8df2f556b382b6c1e6bdcda7096b2f922f4a0f6d00d46c7959ae9f59e36765c350a455a1b4e2012a5e6179b874c8156a70b80e3386edf727beb59cbd596aba9cf1796028dad8d2ea55f6b7000585e42c753bf6f1dfd123ad0c85981380673db3fe8fdd131551f9bd29b52f591290d49e693a63422d92ff6a498d4b66de9545fbffb2dadc0d3c8b7dc691fbcc4d46349cfd3ee2b7d0f2ae95a60622567e69af4bce9f7a0665a475876bb4799fb7a692a19ccd898ac2c65d60d3749dd9586cfd667ea33f7cee2ad658cc94ae0560ca6ff5a9d2fdfbbbf5bbe5f97e252fd91a9332352b3dd964e49b66d4b43d2dedf2e3a73bba9eddf4d9563e5dd20c483e5cdd5ddf61ff6e57033a2ea96a9b177ce484d692416939e4b9148447a210dbd2199dbd2eea6ad91b7c7343b313b1a383c3ffab989e4c5e4cc9c6d148a2e636f6ffdbdcee60c9233732c7e958175c8de5e841bc314af45d7fe1585ff82f2e6ea9de6137b64ffdba16fa63f9e7d6aff62ebd3eb37d5fea9adf317a6efe9fbc8e558f474fcc3e847e7be787cf3e974685f7a2ba2f3efed277e4cc6d6fe3371a82a428e085545d05000395351bbfb200574e9e6c7e14698ccd4d1e47d6347943a0b84cbc71b2f5f8c26c8c7a193015a901f87f5308b937df357922e10baa5c30a324f7d104df059dfbc9b8bc3b530a909d7fc302958e0e94993cf9d8d2658894327eb26cf8d433accd577a36b3a4c5815609d38b15fc9d170c2b9d2376fadc6b97a76b8ffc0ff61fcba7934e1a4e36065b0e69799bb92620090240d7d3d80bf297bd71908fe75bd7ea6e391b5702894d0e969fdf9fcd29d7f007f54f490c1801e540000000049454e44ae426082</data> ... [truncated message content] |
From: Albert G. <ag...@us...> - 2007-11-23 22:09:22
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv22943 Modified Files: qcalc.q Log Message: fix up computed values of actionbuttons for printing, copy/paste Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.178 retrieving revision 1.179 diff -C2 -d -r1.178 -r1.179 *** qcalc.q 23 Nov 2007 18:21:38 -0000 1.178 --- qcalc.q 23 Nov 2007 22:09:18 -0000 1.179 *************** *** 1162,1165 **** --- 1162,1170 ---- = IT if eq () X; + gui_data (I,J) + where IT:QtObject = get CELLS!(I,J), (_,_,_,X|DATA) = qt_data IT: + = DATA if is_qt_object X; + = () if eq () X; + has_table_item (I,J) = true *************** *** 1959,1973 **** I in [I1..I2]]; sel_cellcvals ()= []; ! sel_cval (I,J) ! where X:QtObject = gui_elem (I,J): ! = str B where B:Bool = qt X "isChecked" (); ! = str B if not qt X "isToggleButton" () ! where B:Bool = qt X "isDown" (); ! = str B if qt X "isToggleButton" () ! where B:Bool = qt X "isOn" (); ! = S where S:String = qt X "cleanText" (); ! = S where S:String = qt X "text" (); ! = str V where V:Int = qt X "value" (); ! otherwise: = cell_text (I,J); sel_flag (I,J) = (take 1 S="=") and then not qt PM "isNull" () where S = cell_text (I,J), --- 1964,1970 ---- I in [I1..I2]]; sel_cellcvals ()= []; ! sel_cval (I,J) = S where X:QtObject = gui_elem (I,J), ! S:String = gui_getcval X; ! = cell_text (I,J) otherwise; sel_flag (I,J) = (take 1 S="=") and then not qt PM "isNull" () where S = cell_text (I,J), *************** *** 2617,2621 **** // slots [("guiUpdate()",gui_update)] [], ! IT:QtObject = make_table_item (I,J,X) (qt_val "QTableItem" "Never"); --- 2614,2618 ---- // slots [("guiUpdate()",gui_update)] [], ! IT:QtObject = make_table_item (I,J,X,ref "") (qt_val "QTableItem" "Never"); *************** *** 2752,2766 **** def GUI_TYPES = dict ! ["MyCheckBox", (checkbox_gui,gui_get_checkbox,gui_set_checkbox); ! "MyComboBox", (combobox_gui,gui_get_combobox,gui_set_combobox); ! "MyComboEdit", (comboedit_gui,gui_get_combobox,gui_set_combobox); ! "MySpinBox", (spinbox_gui,gui_get_spinbox,gui_set_spinbox); ! "MySlider", (slider_gui,gui_get_slider,gui_set_slider); ! "MyPushButton", (pushbutton_gui,gui_get_pushbutton,()); ! "MyToggleButton", (togglebutton_gui,gui_get_togglebutton, gui_set_togglebutton); ! "MyTaskButton", (taskbutton_gui,gui_get_togglebutton, gui_set_taskbutton); ! "MyActionButton", (actionbutton_gui,(),());]; /* Get our class name for a GUI element. Note that the checkbox and combobox --- 2749,2780 ---- def GUI_TYPES = dict ! ["MyCheckBox", (checkbox_gui, ! gui_get_checkbox,gui_getc_checkbox, ! gui_set_checkbox); ! "MyComboBox", (combobox_gui, ! gui_get_combobox,gui_getc_combobox, ! gui_set_combobox); ! "MyComboEdit", (comboedit_gui, ! gui_get_combobox,gui_getc_combobox, ! gui_set_combobox); ! "MySpinBox", (spinbox_gui, ! gui_get_spinbox,gui_getc_spinbox, ! gui_set_spinbox); ! "MySlider", (slider_gui, ! gui_get_slider,gui_getc_slider, ! gui_set_slider); ! "MyPushButton", (pushbutton_gui, ! gui_get_pushbutton,gui_getc_pushbutton, ! gui_set_nop); ! "MyToggleButton", (togglebutton_gui, ! gui_get_togglebutton,gui_getc_togglebutton, gui_set_togglebutton); ! "MyTaskButton", (taskbutton_gui, ! gui_get_togglebutton,gui_getc_togglebutton, gui_set_taskbutton); ! "MyActionButton", (actionbutton_gui, ! gui_get_nop,gui_getc_actionbutton, ! gui_set_actionbutton); ! ]; /* Get our class name for a GUI element. Note that the checkbox and combobox *************** *** 2780,2787 **** /* Get the value of a GUI element. */ ! gui_getval X = GV X where C:String = gui_class X, (_,GV,_) = GUI_TYPES!C; // = printf "unknown GUI element %s\n" (class_name X) || 0; = 0 otherwise; // default value gui_get_checkbox X = qt X "isChecked" (); --- 2794,2803 ---- /* Get the value of a GUI element. */ ! gui_getval X = GV X where C:String = gui_class X, (_,GV,_,_) = GUI_TYPES!C; // = printf "unknown GUI element %s\n" (class_name X) || 0; = 0 otherwise; // default value + gui_get_nop X = fail; + gui_get_checkbox X = qt X "isChecked" (); *************** *** 2799,2811 **** = spinbox_value $ qt X "cleanText" (); gui_get_slider X = qt X "value" (); ! spinbox_value S = X if checknum 'X where 'X = valq S; ! = S otherwise; /* Set the value of a GUI element from a string. */ ! gui_setval X S = SV X S where C:String = gui_class X, (_,_,SV) = GUI_TYPES!C; gui_set_checkbox X S --- 2815,2862 ---- = spinbox_value $ qt X "cleanText" (); + spinbox_value S = X if checknum 'X where 'X = valq S; + = S otherwise; + gui_get_slider X = qt X "value" (); ! /* Get the value in string form. */ ! ! gui_getcval X = GV X where C:String = gui_class X, (_,_,GV,_) = GUI_TYPES!C; ! // = printf "unknown GUI element %s\n" (class_name X) || ""; ! = "" otherwise; // default value ! ! gui_getc_nop X = fail; ! ! gui_getc_checkbox X ! = str $ qt X "isChecked" (); ! ! gui_getc_combobox X ! = qt X "currentText" (); ! ! gui_getc_pushbutton X ! = str $ qt X "isDown" (); ! ! gui_getc_togglebutton X ! = str $ qt X "isOn" (); ! ! gui_getc_actionbutton X ! = fformat S ! where (I,J) = qt_data X, (R:Ref|_) = gui_data (I,J), ! S:String = get R; ! = "" otherwise; ! ! gui_getc_spinbox X ! = qt X "cleanText" (); ! ! gui_getc_slider X ! = str $ qt X "value" (); /* Set the value of a GUI element from a string. */ ! gui_setval X S = SV X S where C:String = gui_class X, ! (_,_,_,SV) = GUI_TYPES!C; ! ! gui_set_nop X S = (); gui_set_checkbox X S *************** *** 2834,2837 **** --- 2885,2892 ---- if checkbool 'Y where 'Y = valq S; + gui_set_actionbutton X S + = R := S + where (I,J) = qt_data X, (R:Ref|_) = gui_data (I,J); + gui_set_taskbutton X S = if checkstr 'Y then |
From: Albert G. <ag...@us...> - 2007-11-23 21:11:31
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv31713 Modified Files: calclib.q Log Message: bugfixes Index: calclib.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/calclib.q,v retrieving revision 1.42 retrieving revision 1.43 diff -C2 -d -r1.42 -r1.43 *** calclib.q 22 Nov 2007 03:12:41 -0000 1.42 --- calclib.q 23 Nov 2007 21:11:27 -0000 1.43 *************** *** 440,444 **** = YYKEY := () || setval (I,J) Y where 'X = get YYACT!(I,J), ! Y = YYKEY := (I,J) || catch fail X; yyclearaction (I:Int,J:Int) --- 440,444 ---- = YYKEY := () || setval (I,J) Y where 'X = get YYACT!(I,J), ! Y = YYKEY := (I,J) || catch (YYKEY := () || fail) X; yyclearaction (I:Int,J:Int) |
From: Albert G. <ag...@us...> - 2007-11-23 18:21:41
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv27013 Modified Files: qcalc.q Log Message: proper formatting of spanned cells when printing Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.177 retrieving revision 1.178 diff -C2 -d -r1.177 -r1.178 *** qcalc.q 23 Nov 2007 12:50:53 -0000 1.177 --- qcalc.q 23 Nov 2007 18:21:38 -0000 1.178 *************** *** 1145,1148 **** --- 1145,1151 ---- = true otherwise; + is_modified (I,J) + = not is_empty (I,J) or else is_spanned (I,J); + is_gui_elem IT:QtObject = eq () X or else is_qt_object X *************** *** 1928,1932 **** J2 = foldl1 max $ map snd W if not null W ! where W = filter (neg is_empty) $ keys $ get CELLS; = () otherwise; --- 1931,1935 ---- J2 = foldl1 max $ map snd W if not null W ! where W = filter is_modified $ keys $ get CELLS; = () otherwise; *************** *** 2061,2065 **** add_recent_file $ get FILENAME || statusmsg "Done" ! where KEYS = filter must_save $ keys $ get CELLS, SPANS = filter is_spanned KEYS, SPANS = zip SPANS $ map cell_span SPANS, --- 2064,2068 ---- add_recent_file $ get FILENAME || statusmsg "Done" ! where KEYS = filter is_modified $ keys $ get CELLS, SPANS = filter is_spanned KEYS, SPANS = zip SPANS $ map cell_span SPANS, *************** *** 2084,2089 **** htmlquote $ get FILENAME; - must_save (I,J) = not is_empty (I,J) or else is_spanned (I,J); - indexcmp (I1,J1) (I2,J2) = (I1<I2) or else (I1=I2) and then (J1<J2); --- 2087,2090 ---- *************** *** 2486,2490 **** // data row [format_cell OPT_CELLS (I,J) : ! J in [J1..J2]] : I in [I1..I2]]; format_cell OPT_CELLS (I,J) --- 2487,2492 ---- // data row [format_cell OPT_CELLS (I,J) : ! J in [J1..J2], real_index (I,J) = (I,J)] : ! I in [I1..I2]]; format_cell OPT_CELLS (I,J) *************** *** 2496,2515 **** S = if (OPT_CELLS and 1<>0) or else null F or else FLAG then sel_cval (I,J) ! else "": = if null F then ! sprintf "<td align=right>%s</td>" $ htmlquote S else ! sprintf "<td><p align=right>%s</p><p><i>%s</i></p></td>" $ ! tuple $ map htmlquote [S,F] if checknum 'X where 'X = valq S; ! = sprintf "<td><img src=\"%s\"> <i>%s</i></td>" ! (htmlquote $ which "pixmaps/flag.png",htmlquote S) if FLAG; = if #L<=1 then ! sprintf "<td>%s</td>" ! (if not null F then sprintf "<i>%s</i>" (hd L) else strcat L) else ! sprintf "<td><p>%s</p><p><i>%s</i></p></td>" $ ! tuple L where L = map htmlquote $ filter (neg null) [S,F]; --- 2498,2524 ---- S = if (OPT_CELLS and 1<>0) or else null F or else FLAG then sel_cval (I,J) ! else "", ! (N,M) = cell_span (I,J), ! SP = if (N>1) or else (M>1) then ! [sprintf "colspan=%d" M,sprintf "rowspan=%d" N] ! else []: = if null F then ! sprintf "<td %s>%s</td>" ! (join " " ["align=right"|SP],htmlquote S) else ! sprintf "<td %s><p align=right>%s</p><p><i>%s</i></p></td>" ! (tuple [join " " SP|map htmlquote [S,F]]) if checknum 'X where 'X = valq S; ! = sprintf "<td %s><img src=\"%s\"> <i>%s</i></td>" ! (join " " SP,htmlquote $ which "pixmaps/flag.png", ! htmlquote S) if FLAG; = if #L<=1 then ! sprintf "<td %s>%s</td>" ! (join " " SP, ! if not null F then sprintf "<i>%s</i>" (hd L) else strcat L) else ! sprintf "<td %s><p>%s</p><p><i>%s</i></p></td>" ! (tuple [join " " SP|L]) where L = map htmlquote $ filter (neg null) [S,F]; |
From: Albert G. <ag...@us...> - 2007-11-23 12:50:56
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv8858 Modified Files: qcalc.q Log Message: filter out empty cells for printer 'all' selection Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.176 retrieving revision 1.177 diff -C2 -d -r1.176 -r1.177 *** qcalc.q 23 Nov 2007 12:40:04 -0000 1.176 --- qcalc.q 23 Nov 2007 12:50:53 -0000 1.177 *************** *** 1927,1931 **** where I2 = foldl1 max $ map fst W, J2 = foldl1 max $ map snd W ! if not null W where W = keys (get CELLS); = () otherwise; --- 1927,1932 ---- where I2 = foldl1 max $ map fst W, J2 = foldl1 max $ map snd W ! if not null W ! where W = filter (neg is_empty) $ keys $ get CELLS; = () otherwise; |
From: Albert G. <ag...@us...> - 2007-11-23 12:40:13
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv4324 Modified Files: qcalc.q Log Message: fix keyboard focus issues, add 'Next/Previous cell' and 'Toggle view' operations Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.175 retrieving revision 1.176 diff -C2 -d -r1.175 -r1.176 *** qcalc.q 23 Nov 2007 09:39:02 -0000 1.175 --- qcalc.q 23 Nov 2007 12:40:04 -0000 1.176 *************** *** 57,60 **** --- 57,62 ---- "editReturn()", accept2; "editCancel()", cancel; + "editNextCell()", next_cell; + "editPrevCell()", prev_cell; "editMergeCells()", merge_cells; "editDissociateCells()", dissociate_cells; *************** *** 110,113 **** --- 112,117 ---- "findNext()", find_next; "findReplace()", find_repl; + "viewToggle()", toggle_view; + "tabChanged()", tab_changed; "timer()", timer], CONN = qt_object "QObject" () "Receiver" () [] SLOTS [], *************** *** 606,609 **** --- 610,618 ---- if qt TABW "currentPageIndex" () = 0; + show_other = qt TABW "setCurrentPage" 0 + if qt TABW "currentPageIndex" () = 1; + = qt TABW "setCurrentPage" 1 + otherwise; + /* This flag is set iff we're processing events in the global loop. If it is unset, we're being invoked recursively through a local event loop, in which *************** *** 638,644 **** def CBQ = semaphore; ! def WL = [abort,activate,eval,gui_update,popup, ! text_changed,linenumbermsg,indent], ! BL1 = [eval,gui_update], BL2 = [timer]; qt_invoke OBJ SLOT ARGS --- 647,653 ---- def CBQ = semaphore; ! def WL = [abort,activate,eval,gui_update,popup,next_cell,prev_cell, ! text_changed,linenumbermsg,indent,toggle_view,tab_changed], ! BL1 = [activate,eval,gui_update], BL2 = [timer]; qt_invoke OBJ SLOT ARGS *************** *** 707,710 **** --- 716,728 ---- /* Callbacks. */ + toggle_view _ _ _ + = show_other; + + tab_changed _ _ _ + = qt TABLE "setFocus" () + if qt TABW "currentPageIndex" () = 0; + = qt EDIT "setFocus" () + otherwise; + abort _ _ _ = ABORTED := true; *************** *** 1321,1326 **** gui_update X (I,J) _ where (I,J) = real_index (I,J) if not is_nil X: ! = if (I,J)<>real_current_cell then set_current_cell (I,J) || ! process_gui2 (I,J) X || digest_loop if is_global; = queue_update (I,J) otherwise; --- 1339,1343 ---- gui_update X (I,J) _ where (I,J) = real_index (I,J) if not is_nil X: ! = process_gui2 (I,J) X || digest_loop if is_global; = queue_update (I,J) otherwise; *************** *** 1357,1360 **** --- 1374,1394 ---- where X:QtObject = qt TABLE "cellWidget" (I,J); + next_cell _ _ _ = set_current_cell (I,J) + where (I,J) = check_editing || current_cell, + N = num_rows, M = num_cols, + (I,J) = if J+1<M then (I,J+1) + else if I+1<N then (I+1,0) + else (I,J) + if qt TABW "currentPageIndex" () = 0; + = qt EDIT "insert" "\t" otherwise; + + prev_cell _ _ _ = set_current_cell (I,J) + where (I,J) = check_editing || current_cell, + N = num_rows, M = num_cols, + (I,J) = if J>0 then (I,J-1) + else if I>0 then (I-1,M-1) + else (I,J) + if qt TABW "currentPageIndex" () = 0; + /* These are related to the script editor. */ |
From: Albert G. <ag...@us...> - 2007-11-23 12:36:54
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv3103 Modified Files: qcalc.ui Log Message: added new 'Toggle view', 'Next cell' and 'Previous cell' operations and tabChanged callback Index: qcalc.ui =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.ui,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** qcalc.ui 17 Nov 2007 12:54:58 -0000 1.22 --- qcalc.ui 23 Nov 2007 12:36:49 -0000 1.23 *************** *** 33,36 **** --- 33,39 ---- <cstring>tabWidget</cstring> </property> + <property name="focusPolicy"> + <enum>ClickFocus</enum> + </property> <property name="tabShape"> <enum>Triangular</enum> *************** *** 302,305 **** --- 305,310 ---- <action name="editIndentLineAction"/> <separator/> + <action name="editNextCellAction"/> + <action name="editPreviousCellAction"/> <action name="editEditAction"/> <action name="editAcceptAction"/> *************** *** 324,327 **** --- 329,333 ---- <action name="viewSyntaxHighlightingAction"/> <separator/> + <action name="viewToggleViewAction"/> </item> <item text="&Script" name="scriptMenu"> *************** *** 1221,1333 **** </property> </action> </actions> <images> <image name="image0"> ! <data format="PNG" length="1601">89504e470d0a1a0a0000000d4948445200000020000000200806000000737a7af400000608494441545885ad974d6863e719858fe72768ca94aa65d2aa6411b5a4d38a06529552a290455dfa138417aa4085116831a293806116c67411cc148c704a10039de2811ae48541da18118850b530482da27241f48aa0203538701344460b2f94410b0d3885a78bf7f38f3cb2c70dbd208edf7bedfb9e73bef3bdfa2c40e75d6c2b48467f675b78194149e0f0a8be65d8ba75a2de72f5d68c3aa5c76c6a4dd2737380e6e6e6ce24e065f4c18f037ae5f397a4af5f979e48baa60be07fa46b57cec0cfa4c6a7d2cf9fe80f3acf0132fa0ddb820d011338e0ff73ed44a02148e9b34be7fa2f45fb7f93f4664cfae2b17455eaff7b5792d4ff7036eefef3afe73effe4e35de9977d3df95892f4c2b90eb46e29c78ea0bf6ccc0f7a86be41bdd69aaaf12f581f0044a8a7c4b39620d7bb2bfba349dd35adc306e4d6eae456c16bdbfde19ea1d72e4ed5a7d1ef978f97e199048e1cc80150dc3435d58abd23ff2e3080de6ec16e383caed7adae2c5addb0f7302e03ad0b10b897fd73f5611e4a50dcf200c896168995628456433081c5bb55e750cb29350718e48145e864a770580a0161a805cf26c00eb7810fcaeff5e0000ab53293f1847c336fca077942fb21f23b05a800b543120ef7560cbb8b4fe3240c3501a29e3841c06b0f83c052bde17f0ad06afae48174296b364e7aacb042b019440835447835ccfa430fee0263b7f6cdb429ee6767e2f0bd1020d8d1b1035e873f019fd334a2eb8d0293f184ea9e292aee17f1f05043d6bc2d428408ac050048a78a30013acb701083661c184233e9f0447d1082a639c0a10300bdfe0880d8460c006f6c6bbee82f12258a9a2240805037449830918da829de87e525c8bd5d3085bb7153ec6767e270c739d03e49a04905a0e5b7f00f7c0afb96e25837664a3b01224408ef84f1c73ec576d5a5db8257aec0680be82e9bd2815bf3991886eea90c30e157d59a4d8be85694285102ed00418284bb612244586cd8301a9951f41ed8166b652c23e94c19d67278b52810c7df9d9f8d8da039d03fe180a42b1c3060d75e1e6e8669d162be316fcd8676ff70a279db75d80352690804f0b65b30846ca600cc43276ebf3c1343e09fca80a4b9c266eb2d4a301c9ac46adf26d768ec7afb13002663600386a1105c0fe2078346aa33219d82e246168833ecc41dce4fd5feae7360304d40b479beb0e93db62ed38ad973b86f50d8b29fab3f8b430318d8fd95d596cd85be533c1343b03f630e48bac403fe587868e91fba66870e542bc6a6b737812df00787ce9863ad8eb14ea68a304ee2ed4681d853e87702e6c0f8940392b472af7c933eb49ad3ca7b7bd83798abbdce2987f681917b5e81dc6ade1efaf119188283a73370e4426eb55ae2fe71daab3bbe2976cdfcbd912331720ed8fd62a9e7d0279d825e27696befbb0cf82e03be6560d49d4d4034f8f5cadb4ed9685aa9d79ebe5fdc76246bc0185aee793a53863ed00f03758711872e845d515dd0a3595f469759e2c3fcbb36640ed7faf038d66a3b07ba1318bbe5018603b77b2a3edc87eced028c855fd2d3784f541744ee552dcd223097bd537c8bcaf19a1f39d1708a2bd84e7173c3eb9ec8827366b405eb89794858da4908160cab0bfa8857b524e9e659e781abd9dbe5c73c389976a064fb1da0d79f388726c78e00f5864dadec9d32c9041f497a455244d2cd139fef497a51d28db308cc8db678279b294f65e0708d8fd2ef9c296c9c70c687e5df9b03f185f5f75db31b92be7ae2735d767abf72e68928f6faf237d329286cf4a6141f66e1c8893d60c3c8e5d66c0ea4533c8afe64f177927e20e95b929e9bd944d27947b24bc944a14485a349871b4ae59a535cb32ce4ef7b4cb621992a8efd5f9097f44349df71caaf493afbf87f0e012517f869d21d367a7de7fec088787d6b9ebd53269d82f81bf95228147d4dd24b9242cee62b92cefeb7eb5904245d1e6df28fc3b9d072a92f6c024db37b98e05fd11fa57f2be9fb925e90f43599e5e737be2081b964a2f0663a05f5a6252e7fdf239d8264a2f068fef5e52559c25f94f40d49019d67f7972020495793a9e2801dc866ca8c3619c7dfc8ff45d2cb92be2be979495f9174591755fd3f12984b267827992a925ce0fde08dc86bb2adf56dd996bafaa51abbebbff2965a092c5a75ad0000000049454e44ae426082</data> </image> <image name="image1"> ! <data format="PNG" length="695">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000027e49444154388da594c14b545114c67f86c23c50f0818b260a1214cc45a4b428e91fe8adca9020a145420bb76ddb056dac9db6880aa45741cd0c51f2168206862308a330e2042633038113223332ca7b324a5f8b99a7a38e3a8e1f5cbe7b0fef1e7ef7dd730f92f04728322125a450447213d249ebb1f1d8a5f2fde563dfc28d4baeab8a72f3454f262515a4e9d945b97129341e6b3f3171285239e9ae4ac9952ccd13bbe4576b26f695cd167d7a765192149b934f7ee318e2891390fdec25e255490549534572fb5bacbf66625fd3b38b5276bfbb71c91eb53b2a10579774577949aefec5e68af3e1b75acb46b37724718e32596de07954256f030840622c5cd7bd902191060b707e3b00fb133bcb93184615595360ac0169e8bc055c794a670744d75fd4f7d7072e03d449daa358405b17bd6dd3341a8e2335be0fc0ed20a49bf136e731ae37931aeba6b52f45e6d564263818bd7080184cd36860a314f0ddff3d39309a80f62710e882b62d8c6bbd9086d6be2e58c8d15c3ff0fa086230cd1259d39ee772c578e6479860cb0c999914c1c7e761bb131a2c488dc0fbe84e82ada9ce74ea53e53a2e946edd3de079494b6fa4c290a4c592af487a232929e54bf1cf96778898368a17b80d34ecb9e715e3b93f19cc4090cc9701828341f09ac1b0201781216727bc693eef9977ecd3d5b17f92295b524c5a1a94566d29fe48ca8e49d967d2e8cd8fa7af63bf561a27f1e65f42cb08deb2036d01727f5b61f39732ebf40035f68a722dd9d2f80349d2f088ad95f1e47d9da557f8725792bbf3e44856f6a87df8493bcb54f7f2ca64045bf7f6e360b55b00b5f78a4ab2b0ced82b8e5039f1a13a7ef7f30316166122dca3b7f8f129d6d146e76effc3feafff01727d067dec085c640000000049454e44ae426082</data> </image> <image name="image2"> ! <data format="PNG" length="999">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003ae49444154388db5955f485b6718c67f910c72a032052f0c7490400a552668ae6ae8c5b41b0cb78b56d8c0c92e66b78bb90d56c40b291b03f5a2ebdce898171b933236bd706dec8675b0621c1d51e89a286a522925ca9064a8cb39a8784ebb94671727e94c676fc67ce0f07e2fe77ccff79cf7dfe791c461a0e25058ff0be2e30af47c9098498ccbece955d5ff433aa8f72f5e4a999294c9eca9bb57134ffc58d2139f12fa07d59818d7fcf44db9d870cdd723d2e4b04e1f481c7823a3e96fa4ee91bcba47a4ae2ff3ea1a967c2fa64c49f45f487c941f95b259976c2fefda92dfdd1b37bbde3e20242d235262afa8a4b869322b6537a4f317246deb1f94d645c5caba7b5a3ae213342a5046dcdc9b9124c5b7f791a6a5efc6332ac383e2d98f29cee7a5fe21a9a563ba2c24def650106c8854c2f52508ef82ff2874be122cffb5a7801da8ae0636c1ef87773e86b63a587560d56cfd8cc6782344a0009ea67319253f0d32bb03755bb0ba6b136e30fe9d8cbf5c72db04a31a82afa6697bae1eff3336ed2183e8b28d631b3b4ec1b6862e1a955e5f2848b2a878741dac3983a925683b06d13b45bb04ed253f0867bf4d337aae9e290baa7d06efce406783c1c0f754aedd303620f68ba7e9bd8c929fbb8a872e439537c7c8193f310b5a437075195a03105d70fdd1051bdfb306ce3d985f05b3008617cc759bf99f8c878e350bdec89b9cbf24a95815bed32977f17b79de9495b2db527f4c9a5e945e1b91bef8516aea732ba7ea84444026b5894542ba4f48014fdd5b19a5bf0a3270c3666ecee0ca876000d7976c5e6a30185d823a1f0cff0a9605b93f6c2ccbc0dccce1ecfab1d69350088395bc8b37fc9023b1fbdc3bd554c17137c6d596417bb34b3abb0391e3069fcc40530d8c2dbbb1751c2060603a60597e2c0b381206d2e00d83972a68fd01a0c25e4e1336606022cdd91720b6094d9530b602915a18bb0d04dc04da05c8dd36b172e090c3e7030a69a01e0a49f0f23485d835004fcfa0e46b80ba02743e0f540239c00fa3bf416b0d4457a0b9c60d47a40aa2cbd01680ab0bae1d9b07738b3fd7d6633bac9d721ba0f6f5949afba4c95b7be5097bacd33219f77d6a312f6d4bf1d9ac9495a67fce4877a5aede8408e8f2a3baafed936a3b523a10a5b34ab3a1d8e5a9457746e8a65b41935352cfcb1247f74fba1371750f1fcc2b49f9ed7d8a1f48895b25a529292d5d8926b49794084d97dd711e4e4a75c7a0aa115881b6901b535f089c95346d817aa22b6e02ed3bb35088b8d501384e0c1fad58bbe06c718d75cf9947c43aa4cbf46f64210f1ed591721a0000000049454e44ae426082</data> </image> <image name="image3"> ! <data format="PNG" length="969">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000039049444154388dd5944f48237714c73f2d2d989b010b0a162610a1093dd8d0431d2874879e7ea197482fbbb7ed657be9654fc5e3b6ec616ba1d0855e226cd999c3e24c0f3ad98338966d1d8bab316c620c084664d1a08b0934647e74075e0fae5a895bafedbbbcdf1f7edff77ddff77e0ffe6ff6c6e94276e416bbdcc58060b78c359cc3ad8132a0b41ba20c13af0ad61878551f95cae3565dd498627a6106737062ce5e71be5afa75ba7321c262b0de1611d9df3f1611913b3fcccbe2b73d999a9e952b6d4fe4cef4ac4c7cb4f8f329de9ba70bcbc841134646920024bb598a2d07955257a66d57a0909944c7ee677dc06e2d8414d4b70f00085b2532e92fd88a36ae0456a330b36243acfb2f7bcfa42d7511f9eb24bbe36722f2e47cff6ff663715ee6efef4be6fd9bed3ec65e350003c25af3e4c088e06368772300daed137f7074d1d7ab4d0e5a264ec586f89ce819b04a598435304753b002c96e027fa94eb293c07d0c03ad04f62f2103ad0445077423c137dfbb74aa831cbc70508622fa871467c04ed5c734c0ad948986c05e0b3187b214d742cc36ccac041c1c99dc5f70c9ecb6f9ee7191e67393fbbf3be8ee359c8af33ac67968c0643a47f0bcce8d7193a005d7c74d4a6f87143216c43e85cc24a5b74adcf8a04072a0c4f5f1023a2ea15e2af465c5bb373ddb963d91f960f342618e0f7b2222b2bf73d2df9bf51d919ec8faeaa6c8a1c862b02e37bfbc27139fde96e1e1427ff1544ae1d6cae4d3d9f36847907c2771d2dfa924f52a648d14d4206764096a652c2387d6407c91f1b9c61b1ecac861574200c29526c4102cd401f0e7ca6401773ea4bd0dc5b980cc760efbb700ad2db4b6fb6500587e70dc7ef848647f55447644a42722ab227228b2fc6453644f64be24227591d947cbd22b8b3c7c2072bc2aa23e9f92a90f67657050f54b61573ccc08ec0d1f8621fca30ec3e0af953187b2b86b21d630d84f03ac3f4d9c151fb30bce539f28d2d8dabb40f45c63c3c2edfa67dd61be972568d4c9a773f80d5069136f2b448d597831a84c9e52ec5318cba36300858ea34b34aeb8686de16cb86040d0a863a5b3f88d32f93478d510159b785b018a57a333ce63575dd011baebbc86f1a8a2f3c2c11a32092a652c238b5f83bc91c3ad0614c64cbcd847a52c3ceda2c62cdcd846bd6bd1e9762056173ec8d9a0bff6c9ed5b5aabbb5adb8c8c8ebc9a548a2876214e0011c493e8d83d79106b60001d6b9abb2d3add36030c7cade3a59f2e6f8fffbafd0de04d54efee6c137e0000000049454e44ae426082</data> </image> <image name="image4"> ! <data format="PNG" length="1117">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000042449444154388dd59341689b6518c77febb2f115a636b04a021d24988209eb58833b3420731f13e12d5e52bdb40765f1b49ea4e0942a08cec39817851e44b3d31261eccbc5253b8c7e85ead2b16e4969d3b4d0d1140d6d70b35f7059bf57fdb6c7435b67d75e76f4b9bc87f7797ffcdefff3bef01c255f7350668d6fc51e7d2293e32bf39fa98fe4342f3f0f636f709a1e99655ee48cc86f3745d637dcf94f4e9d97d3b43fdbdb26bfc8b971fbae23cbe2882d8e54c5b97ce5a6b3715b9cab57c4d9b82dcef7e971677d521c7caa480f51a62f811e82ebef18b12e1d4d913476598cdbf32222b2baba2e22222317aecac8971b7271ec9aeca8bf3644364222cb88ac1a22570222177ae5e287a3d2fbdad96f76199ba118d42018f403106845596b6431c3fd3b3b0f34e1c10a043aa06240971fbb15469d1a058fb77781f3951284a15a5b0360aa31c14824c5822eeeec5cfa008e0436a1a120ce4f103dd4c7a5e92cdad37b0ca42a7277f6e98dd74b22e393f33b6358bd2c222322d5a8c87aaf48a64fa4342e5f5cb82cd7c69625faea606d9771a66c130f41696e6b2fe262be1ec3715c009cfb0e040bb066435707cc18a0fd94161648684576c6c2f5760bb7a96e1316211e08634f55f1b7dac94f80bfd98e75bd84bfa9a1b606c114dc332092823a682f49e641161552b0173857ce4308ac99127d876364ee94481c86f49d2209274e6de553080761c9864810f756816a23c4d8ad0c5abb6467b2ff01f702bd3ee8ddd7a6bafbc957aa0c44e2d875183a1ec76e94183c9aa074608cf09b0ad60ce81e844a07ed86e252478cc1e343680fd4df6a6b78a3078017810ee085fd81633d9fbfdf7712bb5ee5ad939df012c45e09d2c2e1d88923e0e4a0b31d1696e0d000a57a83f7de1da62e4bcccd46996ca469365a0f5b1bd359e020b01f38d8a6ba07b016c18cc49e06741ffc9d7e58fa0afc67e05703a22998b6881f1d860a988138cd5616e5a9679e9bdace3883daca18a03855030f8a378a100ac2fd093832087336d4fd8cddc8539b83b11b16aeabc9b6b2cf8cad00f0a4cd8c28b2952266571c6a90381ea65487c4d104dc8b42e730acd5402748fba224a3fd147c16c9e8005a6f1a6acfdd367d0c3c029a6db9991ce6c304d9691b0260dfaa120f40f1e70c840660ad040f62a427ca980c91295bb82d45a66c81e7e2ea1c8040e10fe077e02194ff6c532145a69547854d4adb592f42a24b91ffee3c540cd23f16307b86b13c0bd5add05e6e6bd5dba64fa0fc08ca8fa12c9b3f6f2683d22699b2453c04f6621522909fcb61d66ba4e7a6303b86b1162c40915bc891f425292c1500d03ab7f70731bb14d96616f3b009339bc6f94a91fede14b98822792285edb318ea19005f8ea19e24055f0e1536d1cd2668774ff0be536f8c9cd3dafd586b4db02b055e0e00f7dfc1581880de3aac3d8d8181f634b59506cd96838171567b133fecc6ff9fea1ff5693dc740ecb4f60000000049454e44ae426082</data> </image> <image name="image5"> ! <data format="PNG" length="919">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000035e49444154388d95956f68137718c7bfadd791b00e5ab068c04903756a99d0044552d61709be9074832d1b8cc5b137be19e81ba92ff5c558fb42abbe99be10a24c6c1524f645bca54cd6163a726373b98ed4bb8e30ef4aaa77c196cba823094df4bb1777296de955f2bcf9fc9ee39eef7d7fcfefcf012ec1024d25c72ad758a5c3ad79f2c1d4ac5bbd6b28aaf19a3bc51ac9029700b434254cd25d78cde16377e1563761755edff679a506a0cd6177535e1dc7e56d1c379c966d88a9a9e65b9195954dc26547d45a6db04ce69aec71f444f410ad0d8eb738e54b1bc971d10a7c1878773b8df5af454f4607514728fa592c76267cfa03e95f79577f28884a0df0b601a55740e77b80b95c81afcb8bd272059d452fc6e71f5617fe9afb537a223df60ade87e95fd22a0020f17162d7f723a3cf489205c79144d220e94c9b9643c361de46e256921beb941c295e9dbad770fa2d491a865d6d1816992795823d6fcdd89e4aa14cae92d93fb23665852c9399d92c434743fd5026b4b946cf1abcfe20b329cf384e45cd6ef358de662267bb5572a4a19194edf5087f14bed6aa0b6a37ba80d27205e80274dd845aebc78d79406d074ecf0023ff018393c0ed3af0c524700f36d31e60784642ef11a05a378100a02f9af0f9fd0785c1eec177f00ae8ecf2024b80dfefc3e2afc09c009cbd0be000801977867cfd76dd01df3a7dbb3bf7b49ebf7ba1862220cfe9c0fb4069b9047305f8ed3e80a223b2036f3b75ba6e021ee0a74712cc95d26b646e655f88a90c9927c594bde2995985b4487196b40ae468ca1e0fdd21b53c3936edf45fb2b9b53efe55fce796a17343b92be7ae1c99fe4746a42788f33f0cc32300a80351218a897afaadf9dedda7103c5642a42788e9bf655cbd76f1c7d6f0bef0731481485f10d2a28abd4f3c305774c40762903aa67166e0143a3a3cae7940f063e1e930227d41c845207228884ab5b284d8a7b1af69918a6a90abe4e8a5517295d434cddeb76fa1981269dcb4a8a81ab9462627c437877b0ef72139926c1bbb93acae9facc6296b22b2b23330c8ecb8920720b40040e068607f6420f25dbc3d7e109f788e078ff5baded3ebe1dccba80195a7a88edcbff0bbb962e6d293e9cbc562f1f9a677133792279bb2dab8ed54327c22d1bb516b93b358fbe7dfe8ba09c0d9973b505dd001c1f9d3ec0380f4971bb5fe07b778c5edbd2b259c0000000049454e44ae426082</data> </image> <image name="image6"> ! <data format="PNG" length="1135">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000043649444154388d9d9541681c551cc67f9bbe8437b2c20ea4b0835132d54077a062170a1ae8a1038ad9a5821bbc6c28083db5c542691069532976c543ab1789a74685d07a2859909ae9a1b23d488398b0112293484ab790e204133203593aafeba3f130db6c1a50d0ffe563fefffff7dec7c73733a9bbd0e7092e9dedcd963de8290889a715ff07ab5ab50eae47d7ab5a5d489d876f2a6f17de0f548cd58cf03538825d28f1513842d2006c2169a0b08524d0600908002b6d106a58fcb1f66d6a239b7d6ceecff570f42ca45761a000cb5e07732558aec2817282f68efe62b533cf95e0c6a7b060333137d64a5dcd66b78ef759f8ef9571d22334a862534a70e814a1f231730e4f2b5e0b3132268d1fa6b1370709f1302924a85dc2ef46e0b745521b7dfd5b66af0967aee23ff470064ab072073e3805ddfc7bcdd6a16975942f54e1165cfbb5c29e81e7e4c57cfa79eadd6bbcaabbf13716d87bee23d89370fd3b35f6de84daf79f63df9da1fefb32d6be3c18c00b16715ad33dd34bb85ac5509af0fe6d06fe0ce82a0175203f6b4114e09ca96c0b9afeb882331bc38371dc3e17a2883c39f86c14ee04b009c65e130e479859179a11a6285005baaa5a9107a61f8e437a04cce4d0a90f47293e68e02f55a11912da319cb842636e029a31c18d0a4c06c9f2e141eaab35502ea19ea200749584040d4529e1cd3859bc39cdf0828dbf19e1645de8b731878a3000f6ebc7a11961f5b93037066b09257f6c14562730c5309e6e2b46400d60a8986cddf2a847d7709a0a7f76024469db9eda3d0f3615c1ec75682ae2c92b495a74004140a8bd447101491d7033c7b7c9d71616c92b17d6039ca60255dd9eb9fd05688658ca8530c2503600c68b1608035314f0501d8f67e8904704f8782024be56a03b09ab2d257ba19a4a70a9c30376790c0c2a60a53d3d90c311120438b2fc0cd1dd9fd862cae1048f9edf9ed575bccb63a0ce0e6527c6f149fa0d5d050abb141b847a0a04d0bb9aecddae9197c60ec5b4732c4af0e568c2ce8173ec0a08b0a584f90b497f05dcf97aa2540cc3a137e0880b80dd902024a6187e36c73e1efc3443706b1a80f8d841385421d00a544c70c485b24b280001f1a1103e194b2e5c86c68d311089f70520753f93d9b2fb6d687b4a6604be3e0516db24262b2073b0548577cf43c681233b8c1f2a822c011e345dc67f1e2375392db7465fc9e10b3adfdb8c4970fa24d6d35cff532dc3cce92283320900dd10ac85a8b979ba86db397664b9e3a98ab1be7800e7c692a4acec3af0760dbeaac1c92283b2fdf2e412b4044ca1485d96f2f168bfddd3c864923f824886a106531884c498c2a021c0d6d0d031b63480b6756da5fc05744beacb8bd496165b7b2e225efea58bd70649e13fd1ecd30550f3182df055c44bba006a01f39102a5309fbc03cd7968697814c1a3b7a0390b2d4dfd8f87e4d743bc8df5c9d459e82bc1a59aa02c85eca19dda6aa289fff8dc8a94ba5e800b7f036e16e8a185900c080000000049454e44ae426082</data> </image> <image name="image7"> ! <data format="PNG" length="667">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000026249444154388ded953168135118c77f89177881067250a1850a7912a4010b17e9e022a41d1c2e2db427dd1c12537070a843c1d1c14521450aba25a4938390c3c53a2660c1c1420e2ad4c98b28246031072de6340fea90a6d6a6a5593a08bee537bceffbbf3f1fdf9f17d8dfdfe73c4ef05c54ff4961ad385bc4c6c6c23ae4723297111394fc2dd6f2b562f6f8fd200c98332602818f8f40b07eb19c014af95997e76f25ae47d6fc766bad773f288316163e7ef725bd9c224e293f0ff7e6258f1660e42a255b2f678ed60dc20bea8a42207812796c10e4cd03a321eede88603b70f332683fdbbcff149a7b19b8f679e297ed6cb18540701683161676a46c10a7726792a83531caca06c82158d980e9b130b9eb20c629d991c19d0758f861a0852bc918d1c408f880a09f8d3da87c00543b6bb56f9f39f320f1700545747b08ec4d58df83860fd397c0f3615bc08b4d78d7dba378b86487cbc6d98ee7bea708e9d06971c0a7c9846e08d175ea7a50ff8a47a79525a47b745a586ab17a9a535b2b1884f44ab0a0ecaad94e577b04dd71778038f80a729380200afa433a380565574f736a6be5fba0d7e850eddb639b6729c2a395440c84f62749b53ad0c643b9ab6872cd54e97ab73e1f4393732877094dc650ae872665a03053e84bce22b90a4952091f18073e82350ec54d680e03b5a3d905420775353c34a64c9576fa1cfbf8acf33a0aae4b444663c307cdea64fa3e343d60d7f5404e99a49dbee4f56892f64026d9c5a97f81fa0ef8b1ae08f12ebd31a837a1d900767905529aa49dc3ad38c9f1df33cf67402e816ba049a0054a07dc3ac82ab8ab16cbcef1bec0ff1fe4dc857f03270e5fc0fa468a920000000049454e44ae426082</data> </image> <image name="image8"> ! <data format="PNG" length="679">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000026e49444154388ded95316813511c87bf94087790c21d5848c0420e6e0974488782754a1c2f11ea952ca543cfd8a98214e2e028ae15148a2e89c920dd7a2e266353d0b682436e1032f4200187141ac841c01ce4200ed7c49828ad4307c1b77cc37beff73efefff77881c160c0758c996b49fd278383857b054c4c74f41173b16c9c051ed32421c48866fba04420f711841896fb85573bf5426972df38035a5a4340c0c5e560ae2c01454562e5c172835c46a1d305799611f7ab2dcc9308a68d05dcbf7b9e6a0ef78f734647f74397ca713c1a479bacec1a90cb2870ea871d5f9053584d46d8cac0d126713c6a95a5b2e4e232cc1932a0a5352ab3e538505d5b408206b533857a1b088224f4585b1051e63b646fcb9836e82a98361c9fc05b8b43bdbb9a9c32ae2c9625a08a8ab4f795e69eab6cd7db28f96e21a0755201272c2aaf3ff3ec494d76d6df402c042f3ef9946f41384ec29cdd4f4c1993f9fe9ea0b882d7dbd67beb2f274f1ed214df4904c56af4662f7e4715710101a89f41ad4949eba68cf1f5019e0e3ad824f3bd82f5a72e3f14b30954c04642a518f390b696a1720a9d309c7cc042651b1b2ed6fd7a2b7e6b1accc7b921d7a00782081e44c310917c6317a8d9e07a7e4f703b80eccc4cd6669279cfb4e863a08ac4c2f03c0d91906fe67aa0a9b01885e5348443405f76e893bcd47864ceee06c148313a0f7288518d87a3d106e71c07af95d479645d6a3c32a752c2c3687e8396035ad43776a37e039d160e1ec93c156b748faf62fcd37c6783a05294e6400a41b30d74001a499ddce1d4cbbbbaf941090fc33987e6d9301423cfc1e1d4cbfb1be331f322281bd0307472a5c9f9c0ff1fe4da837f00e01a63b132fec5930000000049454e44ae426082</data> </image> <image name="image9"> ! <data format="PNG" length="889">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000034049444154388d9d9241689b6518c7ff951ede408537e0e08da7b7b04bd443e66d4361890c641d9a4d3c9421442bc2d481a5a7500bceb587514a193487b1842434d90e76b694ac0361d9a83339489b506d36149208928431928f1992f750f87bc8f275a62b66796edff7bdcfeffd3dffef014990443f95dad892ac33c7cce10d36ef65c0fc83ab24c9c7ff0f7ea52f62b72cf801209ddf7ed1a501a6593aa8de8f719d9ddaf96f433dcec0d676f1d9c701a2b89bde224926e2fb0dc5f556809b1de2eece806016c856bdc54aa8d3301dac04ba97b59eb6588f333a103891ec985d9e4b30756537c0f4b3e12b64e527e6c2a1941ce8e7f99a40e9cf2a4cd307336a45e1050abf95307bbd918f6423decfbf3a63ed8ff712c64b0b2bac67c844244592fc25b3cbbba1626eeae292ece50dbf08c0a0f667868de7841028c094df9caec500a0542e216445f0ede4046edfc9e0c6cd741e7bf0deb839631d843c67bc72416946748eeb8ae414f9d84dd6dde4559de3860e2442f3e453723a186662662b77eecc943c8c37d485263f73c9f30a259c3212af09547f055cef0a60048070a0fd37e010c731bbfc36acf2361e369cce8dd4c201d32ecf0637be1f8d3a752d80572590c5a743f3b51817f4498ce31e861dc01101540df0e43490bb053831597868ac37dc626de883b2d50bb6d553172519170c8fab45fbd0252debeb8aa4260b9a8ceb4e3c2d77e7b9e566f19a6e704e7b7aa3b0d76dec2d0035e0785bfc65cfd5348b4e0f80ac017e471e4e004700586de0e847400d18fdc2210b02abbd91d851a4bf74d0e731483e9056f51f117339e139ff0e4ec265809f653ebd67bcbe71d1c08801b2c22a59667214e2431c337e2881f47573f6bdf9dada81288a7e758f9740a641c641ee08724192211d5db9a0240030a2c88a2667f437f6e81bbac44d4586f477cff3ec3d8e34715664d5e2b1b2f18f8d4026ef23efdb13575f5f2ec7f6a301da0f2c382c99efbeba7dc794c78246df5a3e64effa29065589db92e14f541400c2e34a32ae1a4c0ad6e70e31eea7aa6571df95ab05268eca40f57d254f039e76b3261d4f247e7c64d606365efa58e9d615d56008e426c86b20d70597fccade8a818cbffea1566eb49577c2a1564b8f2c7dc208cc5645ec1c30d97bf65fb159798f76fb07870000000049454e44ae426082</data> </image> <image name="image10"> ! <data format="PNG" length="447">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000018649444154388d9d94b16bc24014c63f840e1d3b7470e8d6a1f85f2bcd5675511c3a74ef50a125113a587050b070010b2f6087afc3dd2577975c12fb20bc9c773c7e7cfe2e20096624cf646a7ab87e4c1624894b1efd7266ad4474574af4f0f1d345c3411269561faca7ea66f72f218f12dbdf9412aa847c1c2f28497f729419379589834743fe46ca2b7b0d1e0000eed15cd740f15300b740f6f185d10330db2c2387836acd589c8c1b6c618b35f18ccdd0fd4eb16dbfb2c61fde9cb11d64b28dfe07cadf77c9ebc4e65d4e1a491da599d8b1c6da62ed2907d732b636041ed72ab0868e3535623157ae245611627bde9c4bdfb7a4549efb19db0196e4647a17f1a76e69d64aec93c488c5b586e476bb2719cb58821ecb38b4666ffaae221e00c0700d2493258a39904ca6c8e766bdd2eb917b337f015c553732ffce81217038e4c01d30db4cab9bd7f97458e3927bc49de5101785f30db901f2dc272fbf257d88d32e6b1a88fb45d1650d4975d4b9f81ef7cd3862cdbf332ed6812dd69e95593f9bf54b95f11f49e5d9e937408bae0000000049454e44ae426082</data> </image> <image name="image11"> ! <data format="PNG" length="864">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000032749444154388d859551485b6714c77f910e72a18277acb00b0a061258dc0651d883051f14f6b02b7bb97ddbdeec9b83c1287b72650cbb07b16c14ea436963299d3eb5f7a9c9c346b731a68e499b206aca5696622101857c414bbe8f299c3ee4467393dcedc0e5c73f2487df3d7ce74b8c1eb5b8f0c3f76edacde44b792ea53d1e967cdc945b7cd77bf38bceef8a48af16dd3577f5ceddca2de9aa9b4b0f64fe6ae56e67d3a827263f8e0e50325f93f632d90d3530357a3d93f8d86afe5203d619af7fb7c2a76f0f149dfa9775525e910faf75bdc1693d594817a4362b8dbd45f9676147d6d6774444a4b257ebe6bec8e2b7f322b228b5f51991857421cab86fec83990c76026be8122b273e179323b0014edc667d6317276e9fe5e7bbb82917007bfc0a4fcf0f64a284636b4b937271f626681f5ec1b5dbe0e1e293270e18c2796a02c6263c50ab707f1d3eff39d6b3b3e427450ee744e4492477b644a42122013bf39dec63e91c058fbe1917913991fd2b22b216b02337ba4f4923f8acb6df089a3f0a35a7716f5ea4322b228fa3b9d5ddb8d935e09688fc1b36ef5b2dfae0802eaf4433d96386c7800dea40a336217b3f87c714d9e55c73632a37c645fefa44441e447227caf8306025e09f22b5df4444843eff998161d0a5d5263797e17c1dfdcb32c4ebe89f9618e9650cd00f4a6970e069a10cef80ff770e803e2fe9c2b6c11a74e1d72ad65b9350d458c31ab63556d285e7118d35d8b60525187b2fc1ee0bf052d3cdc6fe331f860deaf72c0c1a5431c8c57a40bfe78c75b0e6d5970ad2507ea118793f641c873f14f6e0146c1beca409e89ee6dd4e630d960554c119b2e1252452369443c606541d55f0e1d8a00a26e0590ecdf8b869da9aad3ad030149827da8d875d301a3ba5a3d96efc067014cc56817dc10a99b7193f841343b560e02430eecc6dc6faa8ed3404e71807aa5505436dc6e34716bc323829c018ec940113cea733d660f5f7303e00c7091bc74484af3e1a11a75fe39e83fc095dfcec5eb979e107c6563f68a5b16c0b75a0b12f5854ab1ac7b1c82ee7b83c331dfbcfbf97d3a7b579adcba8b571adbb623fe0ded9e69d8b38faa1529be06fe6f098c6e7ff7979629ad70a023f22226f886a0000000049454e44ae426082</data> </image> <image name="image12"> ! <data format="PNG" length="1061">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003ec49444154388d959451485b571cc6bf761bc487945cd8461c7644d8ba4526788541037d30b287527c2883c1ac14a245c6a4850d294c9c50097b902022e88370a393256e0b316c233828c4ca68e2704b4ca537115712a9e34662b909a95c8315be3ddc1b35eab2ee7bf9f89f7befeffccf77ee39c0310503111bd738130cb1a0a5c860284c6e90c11057b9c62f5043728c74f6fa78ea816f36e852fd2c044311f2291989c549d5f03c195e88504b7055f2065bce023b7b25daafba0900f159ea134c4cfa5c6a4c63f83ec93c195d91498d648264898caec9e43ec918a925b4c2c4a4cf56ab7b67af8f707f23d932536a21b810255532be269324e54c8624194dc864e9683c128b5399521f9c84f58f47d933cca328e48032e60b84c93c195fa3aebc6ef194511b2e6fe81e0c85290794c348fa46489f57cfd83d90d1e183c39eec61a62495bc4a92d4348ddc271545af334f15dd1585d4c8c121f75805dc33443a7b253a6f2a14af7b74703c9061e4b738592299313ad40cafd44af54a9827a3def8611c8ece09ba0732143b3cb4b7c575b07b64427fd1c8325ac97843a7aa257d164555abbcff4efff19c6d55500088ceca644cdffdc34c8d2c59325c3d5197c8f068e4d4061ed779efc3e94dbc03c49ea4d0fa3a9048678177816c2e07988142a10008c0dede1e6036dc04ccfde94fd60243ea088f49b3c1a3ff769f942bd95632ad646ec8333a41a9237ce64139ecd8bf1b1a5e5c5a2e2e2613c00740623d85a646a3e3378c8eeb80bd17fa07a97416e9640a89fad5624df083a5e9626eabd08d34107b9c426b731390051aebeb811d401004e03950f71a904a03d95fb3687cbf155d97bb6a76fc0a006c6656d7b74a078fb299f5ab07072f4c4d8e4bc86ee520d49b91db29c02cd4c13f378fb91fa601cbabf8ecad5bf8a3e4fd745efcebde87a2c936b7b2fbf3996000d8dc5c5db75cb04fbdfda8d1347e7fd2daa85db44c7e3f05e19980dbf7be5aba98b40fe33df370fb9bed3f06d647db6e5f285a60ddc6a586672dcd82c516489e86c3ed251d37250230d55a5e454aa7b5a0ae0c92cc500d38c8010ba54eeb4c55c600b0fcbb1fc59c0800e5c82fa4d8e1397daf1e53680f5f0ae905606711c2271220da71abadecf27454c38fabc1d92d559fa07fd1e0475697765724f3124999aa5f24ef5838d866c0e515b27f3ccaa09fff093ba9fe2b56973a2e92791f4999f43bc8510bfb2e5b67d03712e18dbb1a9dbd121dd7f52bcf3dabdf562f03ef69b1b894cf0df8be4cc52bb2ef8a8de7db1bda512c8680866b28630100b0fcd08fed2dc74b753d9d2c7efbf572ae3bf7dd28f0f732724f3e465d7317ce39bb2596cbed283f9f4779b78cf4d2d0b9ff1b0900dc68b1cc584c2617ec5dd8deb9f6d33f327c3df8bb54b7040000000049454e44ae426082</data> </image> <image name="image13"> ! <data format="PNG" length="931">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000036a49444154388dc59551485b7714c67f3a1db9a5859b0731610caec3c11c3ea89b0f1d1dc432d890322ca32f2ba3ae30187baa8c3df561853d664502e621a0a41d490b45ed90129860520646b08bc2e05ec58da46c5d223a726593185ae1dbc38d8d9a74edcbd881cb3987fffffcf8f8eee1de1649fcaf118ee642e1980a2f3cd03faff1e7426339b3bca28296253badd08b705bab6beec8e9a8c6c3d1dc153bf6aca181afb1b01884d4dacaa5c327be4f169bcf5c9dd7b5abf3929d96c2b19c6ba7651d3eb7d30a6959f5d89226a6d4974f2bde3f9673ad88e4bbd028a87576cdbd510840e64f0718303305e76edd02994b2527ce607da0c41e97df65d5ec65f4e3de01f3e2ab2ec0a5e360007a228a973d25d296148ee5c66be0713589e9b95a4e49c50d29f0694ebe73321bc1d715fa62aea2fc949498b52549e1686e5cc54668a522e9b1646f940feee9f294c47b0b579aaaee4fa990a879adb2a4df6af9703c3ea04bca7bb9b82c4da42473e4e82ab61e14ee8352a46041a6e040155c13a81ebaf9046887bdbf0103d28f4a60c0da7e89e16de8e9712cce68a441b195943914918a2bd2c4947dc4cbba0ff5cd902465bd148ee5947324debe77b7010c607da5783855567e4ab21dcf87835ca941cb5b5e512e4b15c7eb2b1bd2c45c51810b12bdd3d6112b00aafb4e2468fa990182fb7e00badafcf0040c0370c1df614009fc7e985df77aa30a4327830c870086479bab1eb3578b1bdedb96a4c595e2538592542c7a8aa7e7f347fa899bb6c28e44df74f3ef49e0ba46bf9c95f2596f4f2569e1c763dee66bf5415ff49ef04d692826d19d1879e938b8ed950f1f6e6e053ff777967c837f9ce2f7975ddeb10c4a7fed71aab31dd7057661d7b787d1d18ebbbd8771a29d64b6c0fbbb7e763b5d323fbc1e683d0ede89bfb553d8e4fc4c3548c60fc15d3f3c82a069c036f8f7c168f3bccd3e80ea23836f6f43ffc92e6670b8d8e7874036d40006a8de6eb99fb9951dcb6e43aae0e0b6c1cc7d073a20fb6b097c10fdce21bb0ac9a5153e3a0dd15f4adcfae94d5e3b9bfc9ecdb3e79bfafc343e507c71599abc63abe2789e571c693269abb82c8593d2e41d8933f75cba2bd7e84e58ff0eac834ddfb985d5f0cfd2f47c51ca4b89545edf24a5fecf16c51b950cdd89d166a32dcf8587649926abc141ccae3658596267737de6060c47583ff1f059632dfa8f7ea6ff000f7fcd1ad04bcf0e0000000049454e44ae426082</data> </image> <image name="image14"> ! <data format="PNG" length="3705">89504e470d0a1a0a0000000d49484452000000300000003008060000005702f98700000e40494441546881b59a7f6cd3777ac75fb4e16a57b0da2738c552d1e25bb2c5be74c25e2b5d5cee07beab76e7d08926cd269231a9494f5bd36ad20df8a3076ce352eed602d2ba23b7d14b98501376031c7410bb13adbf9c68632668be3995c4768365e71a66e702b3bd84b32d70fbec8fcfd749080921bdf623598f9fef0f7f9f5fefe7793ecfd7ab448455ab56f169d6e0765c9e6abe488c55548316076f3510036a418b81b776097efef5f1057c1470801685fa12bf7e788004f009200b6558b5520506b7e1f254f0cf3a7cdd0de8801b08031e402f81bb02c225f02c45e75d7f175dfcfae9408137b60cb00f28001f7f2a05643b2e6a39afc778c45d074c2acb45e2e09c67f9480c9cb5cbf0f32c3f7bff42def054f8bfc1530bfe61ce3c3b403b90034a9f4681711d7edf5d0b54010e66ddfdb9d29ba0bf0fee1c1c4cf3c35deff12f4016f80491bbc26a71e1f7f1dcd076448e21720291844b243f2a9fff1a55cfd390c166445ee637401df030c003f7253d108eb1d90dca711baba0d20f66a732c40ce897b5cf8516b266681e8234781e052dce971c16be5c5660251e7857b623a2239238a08c734b91d0b953ea4bc2305a626869fea3fcbdcfcfe775997bce5895c85e445e46daeaf801b0017860251e50408902f69d703b02ab81db3ade6a2fe96418eca09d0f03ee595ed1395e8bf5dfc12f3c7f075f0de9a4a69e93f340854ab5c083c043c0832bf1c07b43db1149ec10c91b96c90f2a7aa65b242172f8f54119ed17e9dc6758732ca4ce8f19d78f854412a93bf985e7e7f1a3970ccfe6454406e73c50cbdf037f087c61251ec00d100f8219980980d983f67698f4443b074f8729143d0c1722f84ad0753600355ed25703508341bdca03f3f885e7e7f3ce6a2fe9ab7dea79131aa08a1b157372ddb7029e5ae34b2d900c40ae819e37c08187203a3bb779d8b91d5a5b9c686bc2b84c0d044e7661c38ef6d6416cd8e1ad8378d7b9eee06dd8d14eefc4762307475bb15d1b473bda8aed468ec0d93dd86a3c30e3870d3e00bc0e8c0a500e8dfb0ca1c16dbc272f374aa8af5b32c744ba8f0c49a64f64e8524a12a98c38ba5cc23ea4e3c40e9129911ddf1f90fcb1796166d0a10b07e6f119910f7688e43b44f4b6bbe958a3a48e2032e51209d78bec43425b91b6bab9105a56011913cb40bffc9de8f27fa74e8c4afe92c840bf884c8bec0e764a77b85bba2f758b88c881c401a107913191c11e918e17e6c7b088e4432253a322d303223224f24187487e60697ace271246e40c226388ec5b01060682a37619931f066291f1865a0ef9e391df6bdae464d814c156a7d370b28157bebb07dfe33eda9f68a7fd6a3b5d6bba2007e1924eb22242b1e4433beb9f87192ffac871586b852b5d2a1ce3fdf7a026d25751652b8eca42cb614052620f6972aca1ce9920cede866ae723fa4d686a76d27ebe9d74294ad15424d016802c68ab35ccef9a39bae628e323e3f00c34bcf92d5affca09a5204cf8540caff5c28c1ff73a1b44fbe0b14625d432d4f618306e28c1dd1898ed8586c289cdee6afb3f8663c9af7baaec68f124decd76b4a8469020e9e1347d2d7d240b49ec663b7b927b38643a44315684eab98798c64d701e0ebabaa97fb795fd237df46e4912dd90c65d9523705aa361b30d3d0a6e87093d5ac4ed6071fe6691f4fa28b6afa21abbcba05d84be38ff7074849f03e38808a2cb2f655a6430ac70252915b28d3d8d3294181299567c28139294a4a423d121a410348429844b88256f91aa4895ecbeb55b4cfb4d22b744429a48efdebc1cd8dfab7e34d121a2772a2a03cbd30b3e91080a0753881c5a0a03d57c233c92c4530f58a17db29dd6d3adf8dbfc982a4db016bad25d04ad419e8f3ecff135c7959b3782e99a89aa8d55d8e3762842f8cd610abb0aa473e0dd0ce1c920c3bff291bdd20576d0e3fd600792f7416b4da4c75198185721a345ef0cf90700c2eff396a7da0e6975f0e8db4739f8cc41fc593f66b39917932f62b299080e07095786c98de7b03c6ec131e9c055e7820168c9b57398245a5b0072605b0f5c87579e6ba24810265b6002dc75269800ec8dcbd371b09585af53e0f53a1651c095e6a7da48124cea60d59a2a5a2fb6a25935daa3ed04d70579e9f24b24ab93700d1c1b1dd863760ac502f60107c96792b4d7bd48830bc23f3a086f837e3400eb215d09267cec7cf3226c003d5e546d58ba7f795a8bf240390b2de281721d784812726d20a862fdc0a50352a55749a55e29a6699398749354deaa1447c4219d994e719d71c9402224a3065624a3c8e0aedd735d64ffa884bedfa97eef558585535d6d2217aa44822e91b17a190aba44c63a97e4074f3854ec471454a50b91ad8bd781db3de7b5d71aaa40bf9c66e7133bb15eb192abce6119b7e07039b08fd8b157d8b1c66ce84feb782c5e9c36885c2d8015d2d7c1339984377ae06498c20f9ec5fbef87484ec0ceedd01febe7626c0fda04b0c9463a67c2bdc9463a777149def3b885741cb533bb6a78608103ca0a7ce228559ef48f30e3a8b04101fc4f07f0beef65cfa37b709daf27541726b02ec08bf5ed3003562b70059c3566b80ab60a60220d278bf06613e678126ee6b06f004af0e2375b494f867159ed2abfd73519d4b7343f0eb63a14266a0c0c2ca1004ffef557a63c33fc67ff151d4a60a9b010d81ca0bee8a367731714012b64b3c05a8844b3f018140aeac77b4e47c07590ec2f5f829b4578b4122aab484e001b20bb3e09f8e87ad7ad623b1e34a87f191e03134a81a53c00f07157aceb755f8d1bff59b0ae354301dc363b64c16c82c815b0a2dce9acb6aae366200aed4f390937bbb1be3a08160b58ace84703ca0313d0d46c079386bda213464cd86a0d4bd71a965f848fc48bca03d7019b1272a107163673ab0fbf1e3a97ea1219d21532f346112b6f1ff3d322993e91d1883a3f6a6c3e425a4a644aed57668fa74442178ceb122289d7451a9b7b25f16a8784ce54898c39ee4df54a4995019c510385d0963b41bc508155437df9a70fbf3e28795d662b7059c872b61938677c3fa7ae19bc2492383357c12531a7b088c8a97ee3cb25958d3abed72d228745c67cf7a6e17a25fcb4a1c43195855aeed18dca9fb43e7cae50f2fc4fd7db1aac85ec0c38ab50b16c85c85568d808e178169e023d9e559b9dc7959b931340e5dc0fa6af43d346f09f4dc31310e522b95c2381b3bab1f3f21b3478375f0be9a4c21c0585814069b65cdd8581f2ba9dbbe17fcd67f7e23f19c1ba16b801f60a2009ce1ae8390b9e27ac701ddc2e2bc4c16e01fd32d8d7a11aafd540daa8c825f0aeb311b90aaf6cf30241acd7f740126c354d06f5ddc547c68bd8ec865466451a2aee147631053e49c66d278f5fd16686af3849a70dcb969420fe9349dab7a18eaf8748b4002ef500f713e07f27adc681970b731e791482c924ce1a354bb5585a39f45f61a834919e08aa69c484dfa073bcb3d6a49e535e31e501ed1a49cac35e597c47f6e0e011f9d9ee9745243217fb32a5c8906ec47b796e53de712514264ef5ab7b0682ea58f79151754d445dd6dda3b0d0b9af4d64aa5206c31691a94a1183cef2172c2af605915b886c4132df21066c5166e18125b7942dcd9d7583bb4476ef55a38e94217c39fbcc01747436cb8888243e12c91c9b03fee898522a319611c91bd96a5a65a3b6e752929f36cd09b9d4e72324b44d01b8b19a1f015f03be08f71eeeaeee78e154a0a9b6e929af03780a958fd7a30065569b0eeb35d5fd96cf17c6c15c02ea15e09d35a822646316883dff012e33ec3fd9c7e1ea34b6e82e4015a9f9795e2b81b742852e15b0e71a3fdfff3ec7810f818f80e2bdc62aa55ccefd93be113ffa65954d54cc67c1ac84733b404b47e029f09f4d52b8065a2e0b750a03ce1ad0af282ca4af1b4ac7c007a42d594cf8d853ee324b4a78cdd82e060ce10325c816196e1ae1c786f0bf067e03dc02961dab3c746a7ffe5acbf653aa26a454bccfd68594484a9379334d152e65ac0c04153ff4c1bcf32272d8c0c48e5d0a0b8e5adfabc09f037f868aef859fef004fa23aa24750a34560f9c1d6ede3978fbe46c9c7c17f0dabac32094e20703649f66d48ae29801d2249e051c8960ab05ed58f864dd0733a897b1d68ef66c10e81b792b47dcd89ff9d2c859cea522b2b5d7f806ad93e008616f90c03a3a8b09961de1b9a65e7420736856c2dcdbdd3bd7bf37396ff681e40a744e482919dca962e67ab8848266c649f2991de1322f90fe62cdfd8dc2bdd5b12b1ca4ad7dfa09a66f33206bd7b2da700f060e3d6d4cf1a9b7b25d5a3b2cc6cd699d72e0c0413227991213d7f47563adc35aa36f89744125d2afbb43467a4716bf70d476de33f018d403d0ae6ab3f0f05d8bc69775defdebc74bc3030e7815bf3149812918cb2b04ca96984dc52f95e5222ddc7444eedcf4b4b73aff4be9cf96dfda61dbf00fe02f816caf2eb802f002b7f5d7a3f0a00ab1bb7769f6b69ce48ef0965da72b79a98174ef9880a1b9916096919235c42cae2cdbde2fbf6e8a0694de5f3c07751c36e1baab5b9ef21f3c275bf3796bcc5fa9f1409629fb14352f540e1cbccf6fbce1ae81f56a99538586e58f9cbce3e5ca67a7285e31f46a3c51f07dff9ca81e2cdc9112082da244ea1b64a9f7c5a05ee7b3a0d3cd4d89cb9d6d8dc2b3265003823327026a15e6e1c1912c9ab986fdbae00dad89cf9adebf1b66ee059e01bc01fa12a68c53d9ff43929f080ef3b87ffb6776f5e3a5f3546e66373d9261f1169fbdec06c7639f0cdc15f58d654b6037f0afc31f0257ec770596cade83d71fd573b6cb60d9e0f4df8d6eed86bc5fd1868170b044f9b498ef761c2476ea6e743fd57c78f4c4e0e5f45bd0a9f44bdd32df0bb84ca67a100f060f7d6d4bf69abb5e75f79ae157f54c79673108cf5e3bdedfddf43b1e7bba3b1e025546ca751dd539e3bdfa97ca66bc5ff95a8dfb4a3ce6edb7da54810133e8ab7fbf3d91b8e77cebff7e471e0069042093e0ddc66913f687ca66b051828afd58d5bbbcff5eecd8befdb9def592c559f695a5ce95ab10750c5e611e0cba88c328dea0e33a870f978e95b3ffbf5ff96aa3c79e86f02090000000049454e44ae426082</data> </image> <image name="image15"> ! <data format="PNG" length="1263">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000004b649444154388d8d936b6cd35518c67fdd5638c529e78fa0ad1ba19592582e4ab9182e8e382e099490688951b29018ae260bf10321d128d10488a21f84201a0c6820c00786f34252d4e940904100d72984021b6b1d83366ea17fa0ac67a3dbeb876e480628cfa79393f3fcf2bccf39c7413fed6f9641d54d2c983696f2c8593261cd9648231da151ccac8e110b8fa271d93447b6bfafbf1c7d8b25b5a2f0e33467b383937ed7d751c3f31e2fb77d3fa77f5459ab353e2cfb1a5e57521f4a7e41c6f3e9a1d58edcffc159522b6af755f92c74445ab7b7c88e60b5b4ab2e115a44b4488ffba4e47497883a2712ac97e6e0dbc7667c1c11cfd48d32fc3f132f699169d10435b13206e92898b1603781ce813a9a44e181a234945998d62c569b2bae32e94be4ac6e52e7de8aae1bd3d01f5c0060ce332199c1690e426a2cd80de06d024f152c2df660b582a52cac2aa8ccb9c0852ffe8a353b1e604e68dce8f581c5bb3df705e325a7ce006dc059d08d60c5e23d5a7325d25a1f559a4bb4c7bb948648631c771bf80e67515e0aaaa3f5ce74639deb1ef0ee8b32d734b1b2720145da03ca0b2a4377a8d4b73b5e53b92c7d34b922d9b07e5148e90a14875599cf60c152bf0bdf79c8ce9b305d952d9dbf7aab7802aba4e80eb9fcfb8e8fdc2d221c11e16f116a45dcdb24e57e71f55c60e0dd29826baf0d2ddfd7fc4ea8456e856aaf49b845c41b11d13b45dc1bae26bccb65c69dc40bddae12731af0020d801f500cb1e6ad1b0674de0d8eae1bd21e72fb3e21c5d6f00b560f362c1d0ff67030733c238caa7f03280228d87326db450cf80a68ccc3ed204e8aec55c15552d2bfbb35331c1d7a325b22ed1c53e3209200550aa6269dc39e90032c80828a80abd5530c3a00d840299826489779c66b3f6bcbabe5f1fe70dab812f670982439e5cf87d1daba68ce54ee036e02144462c95dee0c95c1cbe7760634b788e66b4935e28c0f65a549a77785eb6562b8ba43f571f73ee1e8895ce6b2d2dc8e9d00731b6c3b3d5a4dddba52bff48b867fbff4c0a97b24686cf6c7829498462000c4c01d407c099a2bc75357dbca91f058da23094a673ec3c20dbf51161b4aa18901a3401da4539d6285fd83636fdff3e834767a52b2d87acac47a77cee4af2115c561173172d9519e762b5e3dde4e4fd64fe197551419707019989c0f81a1c7a4deb581c282bef1c2e3acd9f6301c4cedbdd732c09337991c181f8e84cd80d85054e2384ee3c381e99dac1d940f548ad3a4eafe02ba0bfbc066fc9b8a31ae597686817a24b7d5efe94ea6bb9cb91b400910ed3d98018af3300012a0ebe9c91da9fb3577eafd0f4ce29b3f0173073c7cf187979ca7e9aef0f05caa8a038fe65cdfaa062c2632cc9ca780e1bdb09781278199c005c007349051b1dca64cc3eb3f01d7ef7945c135f28877d1f629da5bfe2cda5b1c582e53dc9baf5ea059841d226ab388de78f5a6de29592e8a7043846d1d3d6a91d4e10e4d029cf740ef27ef2a297547244a8b881211bd51d2eeb9d7ded38b8f6d522725a7aaa55b6f963f947fc97ce0b1bbbd450f60f6a9939af8759df4650de902d5607d973a3dab5a4fa9cff2f9b912d2a3dbecb3150768adad076edc6d743c007847cabd4e29bf9aa68a2b47a44e8c3e819d480059600030987ca75d0f55c17de420dfdf808735fc03ef15134e6c5cef850000000049454e44ae426082</data> </image> <image name="image16"> ! <data format="PNG" length="537">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000001e049444154388dedd5bf6b935114c6f14f6b918b28447078375fc10ed9cca68360fe83d6cda110e9e024e858a4884307850e198a74903488382845eb5690aa8843112d558a20b40ed241a4c92012a4781c4caa06ad2db59bcf72eeb93fbe3cdc7beebd3d116137d4bb2bd4dd04ff531516e58569b56c49439a37a7eed88e8875b979357591e635d22dc77a4c6ae8c3bab27316b6059c94e372da9f2aad4f2dfabcc3a0610bbdfaddcb0e6405fde64c6cd179556e562df5a595f29972a578b048bf05eb4a863be6c60d648b5994964aa1aa617c13f8b8dcb85a9a48517c568cd3713a0af542a89a5355f875f28c82aba214a5c896b230ad61ac0b3e2637ada62ab20f5914bf14a314a54837529851fb9d879ef6c239834ea562d27ad9e28126ca68e2b2a4e204e964d2d29224ad6b2dd64db9e4ec9ff76cd4058bc267218479a1aee18ab02cacb5fb3be363425de52f278111b9d1f6a20e64a92b5f1356855161642bd08e26ac78d186acfe262e0be735b65a397b365a87e5f63a6e1f0ee3ed4ff121ee6afaaaeccad66afdc75b917bec3572bcfa29bec1530b72475cdfe605dad09086d9f67e3e114684212f0d75d7e8761c7fd72309cfdb6edf9b7254d94dcded82fbbaf2fbee18001f4db9bd598d6eae6ec7f71c42d3c59d40a1e7ffd7d4d1372316c910a1e5e7030000000049454e44ae426082</data> </image> <image name="image17"> ! <data format="PNG" length="741">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002ac49444154388db595b16b14411487bf952b4eb0988314575c3101054db58929f488e04a0a9134a64b91c2da4aac6cf40fb012529ac2c234813482766ee599c2dc1ee4720a161b1034557691c36c31f0b398bddc5d2e89691cd85d76d9f9f8e6bd376f0249fc9771127cb888d122f6a2f3f71a5859cc49e6a5b10f8b981ac438122d10fe53ca12ce54487a8e58f571f8b171699afc595f96d697f5f31699e6cf86ef350865c90e57ebd2aad5ce1489a63c5c92bfa9846a7d59fafd476abd96deaf492199c249b8ac87ea9195debc949ecc4a4b75ed181219cc6828ccafa28c6b7703ec3da81cc14a645247aceb43f85e831088b33b7543631a3a1b50405614cc816d3b6f1d48220802b4408823e6f99aa172e4e1dd2d38fa082f3ee74084032026b286bb8f3dd4021f52d8ce731c51d0a723690806d03c61ea88a75722c3b5a687efbe856e426f33c96780ec4eddd4ec0de8e7def47b4aed4b9eb71dd1cd3e9d418cc7c0000a4bf367b70d6e16a6efc1ee16b8afd0cd60e16cd3d182980003e83a61cf11cf3c9cf57174409141c1b9a6a3e0b13a1e8ce01b9d1988d84c72483db4f1c0432df0c34339053a18a782017a857f1e754bd332fb74fc7bdb9d35f31c70b9a362226b2e2f3c1e9a161934806a95b9ab55d376c4aa9ebe892662bcd7f0d089eca72935075428635dc04141eb80bc0951e0c69337de2b464c6b8b4f87a6694a6d3bcfd9ce730e0a0f2d0007cd2aa605b12ae3e6c7c6679a8e647f0e6839e2e6140607f4cb0b68519ae33788ef15163bb1f75fcd4af78d64c8746568a32aa1aa64ba829f3e727d824c60474391f70af671c3ec67ef7cf1b74f147f50d0c111b5fae4a34bcf8026ecb728bf0fdaa6ea18d549b4543fd574a2722a84f28603e3449c689bc73f4f61cad697ed9c033dfe1fc272f9c927868d7e020c208391b9f8d124b062f2680afed761fa172716db30bc6ced930000000049454e44ae426082</data> </image> <image name="image18"> ! <data format="PNG" length="839">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000030e49444154388d9d9541681c5518c77f9b26328b5a66a42dbb60610a5b480603a6a736e0a1072ff596e241eb41144f3d49e9c18307893d485aa5a53908f6a0b51e349d83843d14f410e82acaaeb24926835d32122453129859dab2bbec2a7f0f33c9d23ab3a20f86df7b33ef7bf39fff7cdf7ba82fc993d497d653ee8deb0d4991a49aa44d491fd9d2ca92f4ce4c10d9bc2989bc8bf5e6a646b5ce8384ebee82d441f2e62449d19debeabc687c92b7f09833798cdc3680e2b3c04370267b701f78e4c21745ac3f438acf60e6858e35fc207fe109e80e000368bf9f7015b80fe1cd2bc47ff43ecf8d557fa41349fb762ef9c2af916a8674d194164f6bf94e5db95678a31403ec0670d2859f818a91f0112cfa2770368e71f9da2d65858d8ff418a0dd00c300d380b51e1c32a98506e7bfba0c3eccfe32931936da63a0db7a034a06f8c04313d660f6e5f3345a014c82db72b303477a5c9b97644b2b2569b3242ddad207b6f45b9a829e74f7c67aa6cfa33d3e740302c03660cd002c6ae367e13804418833f57f14f723696b46eacc482b5352635e7a772a79b69dced97a5c71f223cc0949233cfef115386ac2af40c5848defc13845b8db853284610c47c1f55d0a05ebe942c13a0258c0738582353176222b2b566fc34be7e05e115e781bd62ce8b5e1b50b940f176117ca650b6f03ced867000e02079260630c38b8ef7177c090b60571039e37c0af42a584d73e05d34ea2f4303456031c1b6efb4f7adc0378ea718ff7fa3f2d48ba2b79af4b0f96a42ba7934cd8cb86663ab7292d5fad0bcc3294ca09cd329847861e0f18ee0df659080d98fa0cfc007cf008e138781b01ce24787e0015a8ee67450fa00fc452bc93adb8ba90d05b962e2d48cdf47eaa787fff6e4adf2dd605a609e681cc3ceea68a1940fc43c0ad8f3f846faa04af9e8369f0ee0d155301af15e04c43f5f72a52dc96e2bff2f338ed7f79f12de9d3a5e4d49086dc53bc957227bff2a8a72748a7a321bd8ea29d28a985ed849b5b09a32899b8bd93f0c27bf3d90b67565eff09a62f557a4c29fa77c5e35e2ba47d33c6c5c5c0a0478f39e6fed37816e71f35f6378a5aadfd39830cd40000000049454e44ae426082</data> </image> <image name="image19"> ! <data format="PNG" length="638">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000024549444154388dad934f48d36118c73f33cd9f2632cb6a11d54f0862fda1840e796b14119e42eae08a22a943525d8651d4458607993b187a093b04132fd3d330085c14d8cd11c1067af865cb260d5c3072d814bf1dfc09296a73ee852f0feffb7df83c0f0fcf8b2436548a1ef5736253ff3fdadcfcd836ab6c603e15e4d2bfefb951ce2a4320d38b591c3817999424c95ad488d1a1b4f38ed22d3169625996f347f83c47803ddb07c73c1f2449394b524eca8557eac82f2578061c02cab707eee7a0d4f755799bb51a1592e49f71d7730ca82d7c14fd389574f748f105e5e33674dc8e21491e65bef0167001658581635c91e5fca90dcfc0ca087276fa087e605761e06e9c8a713b15e5a5d4f849d996ac9492f25e498694b55393487996add73cd90abef6020ea002a8ce0539a5144b12521a29652a1264561651bde3b3124c3d3fc7c9cd46b2f5a26749c842caf07d3c1a99f7b67a65d418d78003402de0048ced83a30c29cbf244177723c148a72ca9f174e384bd6a15856fc57a0df228f3865736a85229fdf275f8e472b96e017b8b06c757665eb5bab3ed0fdaef4992e7a267d22eb6bbb88e37d0d8e8583ade1d9779dc7c08ec2b1938dc15beaea414ee0ccf008781ca928025a184927dbd7d6abad0f402a82f19d87bc37b5979c9d7e19b038e0255a5e9582234189ab27a2d355f6d0e02fbd7fb6514791686166e0e2f0d2bd016b80fd4381c8eea3509c5762c09d33487fc9d7e795bbd03f66f74ecb86380e9e9e9a7c67b63b1c16c68050c5b0094ef042ce95b5d5ddd63f76ff719600ef8b3eafd055a6378b27fe57e680000000049454e44ae426082</data> </image> <image name="image20"> ! <data format="PNG" length="1069">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003f449444154388d85955f68536718c67fe95ac919731899d003ca2a58683b8b6bd84d05615676610283c5dd582f8616765161b02d1b8ceac5885e942822b41743ab08d58ba1e7c2b5612854706b1c0d6d3a5d9bce4903d625908e9e626bcfa1097b7691d37f4bbbbdf0f1e33970deeff9def77bf97c6c12f1eefe4ba1c6d0bb894c82638d11ee642c42f5a1f177223b3f07d01017802bbe367e97b4598acae83a7bf57aee3b55444fef6dc5cee6ae0328d799d748fc952e724412abeb290734425cbdd4a17b2d3b74b9f192ee753db8fa6d677afaeed25ab6a58d8c5fec57eee6405a23edaf2449b99ea21efbbfd243ff27d2d5312dc7fe966aff3cf51e7b18ed6e4c6bae534bcfe39aee9ed07072a2fccff3b94a16a4f8f998b4dc2e2de7cabbbdbc5de6f280a4514ddfe51bc0444371497149d38a9d8f4905494949059537f9979efe7e589a0e79c946d7255d920a2d2fba6a791b78d337dc7b58073b7bc0b16011ce5d8108212c12f80197b24e60113d9e81b75a617b148a63501384e220d4b40147a0f8e847df364e020594382cbdec9234ba3593fd92be5cd7ca098f039272925acafd2b203d2606bc563d9872091f05666fc1ae8847ff46bdff024e168cbd4338337d187b000e0263e07c0c860bb3c02ee02fba748305dfd28d988c0ff2601e83fc9dcdf9a40d9a81225003e401d300db8500f0a0164a806bc2fef4af8ce354dd1ab7c004277b736beef32e798d471378b21702e0a46aa136cf85f439b233c3f4dd1f38c0476a2577b9557ada2ee9f6969c785c39305aee9746900a39e9a9f76d449a7b2849a2ca9a72a10e9cccad3253d7e08d799c07d7c03f8f73bf97a615c7ebe3d93cec3e45bee4877a184b67a101ac3f0601f0e52e76c93c9c817d21f8e5669953096800a68086102c46cb35ce53aee51e2ff94ac332c03e989c02731e0287f055595316d4b9d83ff7c16e177bdcd3e3f31eadd51ae77fc8631e34c186604b9068fc0cd1cfa2f89a7cf8b6f9686a5eefb8bb4566b31f76b7553af5f424633435af2b8303182bb70398f14e9105fbc5aa6317ec79ecb40545173bed7a5cd3ab352e42f2a7241860db0e9460e87e124a10fd220a7bd71c5745ea42e03a04ea9dadf9ac9cf7444707d6a7162cc0ce9daf130c0519fa3a41f0c320a18608cc40a43e5c2e45cff13a9d7edf255f02b31aec1204aad9a84fe6cb47079c0530b6971d070206f6ac436097413e6f639a01faae0dd2712aecab6a5d3060d1c5ac075c9740bd0bee463de9392605c6226043a064c02308b806cc826906363a96c499a34d32b73b84aa2151a282a76f64c18013ed1d24538fc88e4c126e0fb323b083f4933499df3200485a75bcf6acfcd75a99bc9517e5a5c7398f058fcfd726af7a9399aa083b05566a9008612cfe9f1d87c2fc030c8a4cd02e97a7360000000049454e44ae426082</data> </image> <image name="image21"> ! <data format="PNG" length="1225">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000049049444154388d8595416c145518c77f1d5ee50d6dcd6e52cc8eb1850d91d02526dd754dba0d25b007230b48ba04126962426b35591223299218ea498c51c3456d2f4d39412fd0f552d6436131621750bb0509db5a096b5ae2d6967446289d01863e0f5b698156bfcb7fde7bf97ef39f2f6fbeaf84ff88ebe1486980d86adc94816055d6750889b88d9b9a40cac9924be71f2c975bb22cb436180908b937e73ab50121ab73ae53161092acebcc86841ccfbaced59090a75b823503c7bb8e3ffa5fb00a47d6e5e08300b17d94a73d34b4685843b0b30dc6d3206ae06c074cd5cf71bbdb06063282a3e69e231777b4ed709774a9c29135d76b8329158ea8e9fdcd4afdaad4ece84da59452eaceec133a9b1e50eaa30175b32ea25438923b5717d999684d88a5a0ebae872329b5e59b47eaf32f957aa094fab3c85a564795529959a5de88cda970e4b77375914d7dc7fa3400ed5f70ce753e0cc0367baba971f010dc2e8003767f1a0cb07fcf1775b8a8667f1a04d89e3cec39519297727dd4e5dde448b22cd19a289678b0361251e14f4cb53fa1d4d8bca3315574ad9452c93ea5ee28a57e52454df6a9c731a694ca0c28d53da0543862a9baadbb9a5b9b576a83b5c1d290606fbe3cfd3ce176cc91a2437c40e9fce7346ec73cdb0b9514b571fb420dab80e11a0a0c43a5b722e35af19a29cba385447c352eb57e4f93862783d717856fcf2c40011e82b771375c3953d4a7e3c74318372458b6564f7ca36199d52bde7cc15a6f08f18eb9c6f1ea2fbe8739d6833efb3a85c11e2a5e0d816dc3caf9b7d4ac7f8669ef6ba2343f0e37874040d61962b3f466b49090ab722e65deda26b07af01a51707a30fc31f8aa03747dc9ab09c0b6dde853f5c567b11b5c0809a9a7b02bb4aceb101060fe72122682142e74c38c8d79b11b6e05b19b5b9686364461c604a7777ea31704e45c8798d035adf8ef33eb9daa873f3a30440d5c19c2ebf861e853f4e3dd4b832fa4179c2ed280883b49b85f32581b7c2924e4495bb0592ff72e240ae0bb33cb9761b173a10336389075acab86cf68d342d23399759dab3af1398404190721978636448bfaf029e752427913e0cc85a41ceda8f014b4924be71f84843c9d73937f23c1f666a02152bc0d8bc27ebb055ef617b59467c224052ef77a85ec373d9e690de040303810805358267a5d135816f4e517b20eb7a36f69814a037d530b1c6e5f383b958397fd7867a264202d1bdb32c0ddc76d73201c09d4c3d7399fb125103ca215641a0328b80e868853709318423ebb761c8c6b4373995bf9417fa5f1457b95ef7b899c7edc84ccb78e8c20783f3051f821f7f3c71895f520758cd79a409e9fd7a7d69685316490bd5518f4fb0e7c76b46aede5f886b8d5d9d539f744a34fb42656c4ae0dbdb2dde5604eca5d812a7f457eada1f97d2d98a4f08a380527896199e46f0ccff9c70bf7323356daef334eb457f92e4be4646757e77d586282f41debd35223a9b28e6bc3d18cebc4eb896d849481a749cfbabd849ca883939a4432da2b64bf6c6ccba446527fc536c4acc51364c99997684d943838cfd54c591ec332abe3e8d529ec8a98d0b524dc8f0a263a2a64c1f4f8a61d9cbb1269777675ce2d66fc0393774c94ba6e20a90000000049454e44ae426082</data> </image> <image name="image22"> ! <data format="PNG" length="786">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002d949444154388d95944168145718c77fea6bf29f30a96f25091bdd6af094c51cb2a445c55c729082a7b220a52bc583b50785424f69909642a4d742a1f4dc120f22b67810046f0191d2420d826911d950d2eca84b1c9a453fd371c7c36e6cddeca6d91f0cdf65deef7ddf9bf93fe88eb7808f80051c29f00cf81208baf4bcc661601e78da94a6cdfa0b906b7dd96d43d88be3ac9ca6811c0e4840129618c0df96d83fdd8a1d70dacb7f85a35fae295353ee548f6bf122b0d68d782770223b90fd5c523f0e2c31bcf3903456c6715c11ba6cd8d36ec4433ef4d30a950bd4f8360141432a78527b82995db1c46e77eaaa1d3b80fdc0a14c984112a5b08424e40550c7b865897d4d63ab4decea207e0718b275bb6b753b3c3c341cdcefb94fd8136289f178e5f16f51353a479ddf3b8dbba96339ed56a84fbcf7dfe0f8cb6a361bc7f1fa197f06c35e54962b77a2383a0fdce924dd18f935bcf763c303c33fcbabcf6ab6525e2e7f26a73d7ec09f8da2e89ad5ec5b601518017a8187cd27dd6a23f2a3f9f1a39347d3b999b9b478b29816c60b65e0989cc6803ee01870594e0bc03d1c5781bd5b4a0170e40a63851bc5f78a7f4e4d4edd56a80bc09bc001e012f0ac25792930feffe27fff88491a77830326e4740348e594e25aea36c5ad4c485a9254f7a14f152adda80a95e2f8b5d940cbe05b93937451a10ec80900a18d386366cf819f0c8bba11f7cae963effd9442bd8af17fabd56cc112fb1ed87409754a1e40bf61ef4aeacd2843c667081470ca9f225080993d8c2dfe02586eb7b853f20681b7a973d7cc0a837b0633ea13ea118b2cb2565bab561f552f26ebc915a0de4ed0aee35d92def7deff2069d0129bae449595a28a8d3b38b695a5a5a51933fbaedd116cc5c0486ee47a61bc90e647f3ab0af5a9a40fb3b9ec836c2e7b53d271e08d6e841b1ccc8fe5ff989b994b4b1f94d2d923b30694807d3422bc2dda9df17ad817ee2bd7ca13d5b8fa7cfed1fcd57835fe117800bcd8aef82559a1107c073b8b040000000049454e44ae426082</data> </image> <image name="image23"> ! <data format="PNG" length="926">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000036549444154388d8d9251681b751cc7bf2d0a577090c00a09ec2105856e283405a1833d74c5a73061387c1879c95af6b0c1402d3e942832820f526319b40f83cb6220d9433883e019414856c49c30bc3444ef22b3e464c2655ce1ae64721975f0f52197abd171e90f7e7cffbfe3cfefffb9efef079218a554aec5d8665eaad0717552aac8e42352aa708f6dbef7efbb93d23f140b52ca2ed1912a35f231595354d2f6d422e56a8d6e937b624e5a3871e3ed9d62ca565ccadf93b4c8c6438d74493649f6c9465b238f482aa4db749ded9d626c62e3cca762ac7bd776a46a83b449b5ad9124b56e9724d9686a64fff87b4d5169deb51f4c6cac95cdad6259262d526d7318d65054ddab3dd51e0d55aac8d4ca66a02548dfde347c4f499a964d92745d973c224d7358771f9b43354dd225d31f67b6021babe52e6b3fa8649f64d723743d1dd5e6f89fd0221b3935d08ee9aa51c5cafc22947d1d380d28bfe8c00ca0ff6e007380f3740044819ee300b3c75a69dd4760340a1aa90ca7ef7bea79c9bea7f67fea3e29676bc1c4b91feffd815701655fc7e269a0d93180d700a3d7034e018ee3006160301800a73c1580fb3f975a81c4e225794b2c48c77b7b446a236f479e8e3cf76233bb4df1921cb815d3a5bf2ab7ebbb3f1dd65b4de075a0f99b8e73731ef1ac473c030cfe1e82e81d039d968e6674ef300878bafe2077d8fbd3b9860ea0fcaa63f18d738001cc45a3c001100e8781a7c0cccb80de018cef0ccccd2f22b9945c08b462847e7179f5f2eaf57547aac8637b3bdaeb6249e2eaf5756e7e26d22e90c53b9be4468cf2ad48fe45564c91f41f59b9b816ba22243e5166eb97d79692b1ea7e1589f904b2dfecec269ebf53e8bd79d84a9c5909d5f773f98fce3c8be1953af09281af76852fafdceb5d7b21b1a080820d0a0a1834149230af461cfb619a649776f93cb911a278759c7cda7f611ef8f6790642e048865119e0fd70a70a1cd4117e5704e267b1b6fc2cf5f9dbd1bc7f699c3443210b3f83a8d36f4552ee8771d212496ab44b71f25688e9e52139041bac5919922ae969cdca30549d6cc9fa8548cabe1327ad22498d2c9d27b321de5c8ae4e1132a20a99e987894ab0ba19479c36b7ea4d1ccc579f342ecf8c288fc24a4ff6f1e4999d938d915a96e64b87e234d7fdd66be98f2f76ef001a7268f703c92f1703e2408299c4de2c941e2eb7f001f508ea964a937a40000000049454e44ae426082</data> </image> <image name="image24"> ! <data format="PNG" length="897">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000034849444154388dad9251681b751cc7bf2d0a2938b8c00a09ec2101853a149682d0820f5bf129f4a1baa71185ac652fca402c3e8c28525a1f248432681f8ac9b260d2877006c1238270591173c2306988de4566c9c984cbb8c15dc8e432aaf0f5e12e8d9de3ba8dfde0cfe77ec7f1bdef7def0b92181db12c47d8665eacd0763452ac48e41d52ac709f6d7ef8df674f3a4717c58298b44ab4c58a4cde2565a5415a1e4d52aaca749adccfe6c4734f2cbcb55d4c5a8a43e97b922659bfad920ec926c901596fabe4214985749a8ebdb55d8c9c28bcfe7936d2ddb16cb15a272db2d15649926ab74b92ac37557230be2f2b0d1a3bd6ad1385d5b2b1592c4ba44936da74c774d1d0bcdda37ac7a55891a8960ddf48905a4beb479992344c8b24e9380e79481a86bb77ef1a2e0d8374c8d4a7eb9bbec28d7297f20f0d7240b2eb39743c8e76e3f897d024ebb9866f1c9355bd8a85995928071a701a507ed1802940fb5d07a280fd600884819e6d03d363565abbf09d7a412515f7ef1f65ea65c98147eb917d404a19d9df71eec71b7fe0654039d0307b1a687674e01540eff58053806ddb4010180e87c0298f0160f7e752cbd7717651dacc16c4716f0f497594ed28d351e6dea4335bcc2e4abead982cfd5559abedfdd4afb59ac06b40f3370d67a39ee369cff11430fcdb35a27574745a1a9ae1fdbe9fe1c9daad5cbff7a77d191d40f955c3eceb67011d8886c3c07d20180c020f80a91701ad03e8dfe988cecc22319738e71bc5c8fa85f3cb4bcb57566db1221debeda8d7c592c8e52bab4c7f91a555208bd7d3e4b508a5aba1fce3a2982079f492850b2bc2c540fc3365bab6b4329788540faa88cfc491f9767b2ffecf3b85de1bfd56fccc82503bc8e53f39f33082976ac00b3abede0bdcbc78a377f9b18e9fe6189742b6753b45b24bab3c4f5e1398bd74dcf933096f2d85922cc448334b5225cbf3e48ec0f4e2581c01050c58e0ff9801fdc4536f8592cec76371ab1423af0a4c9d77c511b040d95c27d9203dcae63a85aabf3049acbe194a5ad763a459749d97e6c98cc0f7e742f98940067cb429a3197ec409df4a01588905931bf3d17c786d151062e87df52e36f2f6f1563cebacc4c2c98df7c2f9f0db1fa0f9650fbbfd87cf47180012b1605e0804927835817bf7e3dffc0b9e04615fcd650ca60000000049454e44ae426082</data> </image> <image name="image25"> ! <data format="PNG" length="238">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000000b549444154388ded523112c22010bc3829aeb0484999529fe053c25ff21bde75a5df582b104f2e88410bc79d611886bb65d95ba23f0c4044d0da0360b3071020db5b48ebe40d8a355995bc3b1057f632f4523f028dc5be7b415803204058c343d1749c92e77ef170cea559f8c5a73add9788b592786666cbcb92c2a7199983d08aa9313da697ccacefe8d5887d56f11e8f71c560f0bca7784f2aea392ee7bf1f66a24377d20b51f498703a0f5bb53f06977dfdebb80140433583b09d5f930000000049454e44ae426082</data> </image> <image name="image26"> ! <data format="PNG" length="736">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff61000002a749444154388da5924d48930118c77f6f19bdc28249560b46bc861e5ee8621434a5830515b36259121974a8e86051917488e810d121d22e5914b940320f659ed4286941d18cd239fcd8fa1057419b54d450712f35fd77589f54a77e973f0f3cfcf83ff01892f81f8c8e0054029d40a5c3bc4e936d9525f68690db5eb9c62a9a97c837297a9f9a0e8df43cefba1fbf1b8cd29ace92f861d031e8d8080ab041277d4f3425dd8b294752bf139374a3f18ddfcb9e1f828e8da06af626db6b67beef55c5245f48b223d2a3c8b014392e859ba4d8b0343e2a456a677c1e0ee61a0428574385a3eb8d23a7aaed870ab77d688a496d9fa59af03763832d3d28954e7a72f3b8a41b158ec7a49cbe63d61d35d7c832d9ec86b9b5cbb82c8d4ac936491fa5372dd2549ff4e49494ac93069a7292c859d5ada2cdd040cb04eeb48bee54acb337f8b6b2da5e8ed73f9f123fc45bc1f2c348572e87ae43713fe4d99067d3b9ff74ca48067d538b77dfca271584c56510ef026f0686d2500c0c393fd3023e4460b50d4fe370cd999815bfd27f9eab5ba771d910bf055e1f44c7c05b06bd09f094c2e3041426a02706e61eb8e98003e149470660f80a59575acc8e0b5becedac2c322906a29fc07260f0134c3a9075009370453d65f64e52170b70df4e278d5fbfca7611889df65ca2a468115e3f0cb642891bc6cac0e3a1beff04adfbea612244636f17a123ce9d3f5ed376b149273c5fd46e4b972d0d37b448e3d26873523ae356d5a8a52ad96a3c8a4add1c36fe3000752b68ae3f67ede2a503e914642103e48f154085038310bee944caa30466ff4d9018275af03abd7ef9a2ec82cce776e62c59c7e4bbade4bb9e917991e56577f645799443d91906feda00c09dc752bfc5fee35ed6f6982cac3131aea6c998afe83ef08aa0037dc0f43f05bf5008b800039801de91bb0880af22e37deb46ee02660000000049454e44ae426082</data> </image> <image name="image27"> ! <data format="PNG" length="877">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000033449444154388da5915f6853571cc73f2979b81d0e6e40a11d16e28860c4412a0a220c12872f577ca9381861e0e8dbc2986313913eace253a92061cd43a15990a52dccfe1149ea286b32dcd68d6d4d42b549d94a522624a38cde8b849b8b0bfcf6709bd92695a6f3fbf285737e7ccee79c034d91a264e517111191956511d9109179894951dccdb3fb4ae2c18f3131a5250bf34b2279b9f24af0a9af1762f2ac152ef3226646fcaf048fdf4dc464a3951dbf9b28b505d87c24b1b1d1846fb7bdb16862b6e559fe1479d9fc4eb36842caa3a28f84e33b8647c2719f392ebaf96c8bfcdcaea54c518a11f3ea9e6033635b94e74d7d78c8860f0fc57d9b8ba2cbe696a5b9ad9f8b0c0fc507f7e2764c6493d00396db5035b4f4ad9b6357826a5fda72eb2a2ed0f51a74bee8e4b78b58756d7d4fe3e203536f7cd2cab2c8e62311296e196eb4763925327063ccbfa77124fde57d0ca83cd539fe16586e1d8e40e569050ed9eb1c8252a9024e28297934a776a718f15e9588577d2979215c747ffac9882ee636d3e6fe5d44ca2292b2ad57c63f14591e10097bb332d7bb032e222a40c73b1fbfb95eabd602a1ebb70daa907f5c82c3902f6ceb2ec8ace7e114641e86386ea5a93c8cc045c597796ca565e885b9c3e130001c8d85a99b4bbe99b5993bfd67fafd8bc622c1de3ec67f9d40736b9cf476c369c84c7cc6c91e201b052ff007703e04f766721c55028e77b3c67f07343f4ddfe501b782e6b698f32bf09d056aa8ab3fa6f86eab67eb6974670597a20016a050ab5b749eee263549ee1c041cb70ac6aee0dd3275ad77f0d279ed73aa5138a1c09a051e05d6000ff0c4024f1026e772780838fa0b465b60b9e1559375d217dec347b506c73a611538063ca9d9f055e06027c949721720d016184046bdeaf42ae94bef6b3e9c291bfa9b055d35f8c982a3c0dfc08120d3b373f7db0603981f79d5993ae9e0197cbcad00ba0daf18704001cb821e15be77d1b11ff06b5f140ccd4320fa0339fe3a675fff5403b835e48624b5f63eaf39e50f6cf3d009ddc7610b2e1e816f4a5003eaa0ffdc6deccbb8913762b67924e7ca5157e0ab021c04aa16182a1355c2ffcbb891e1cb5e957f980dbe8e3fe5d4396bb98ce93ae16bf70a83ff023a4f30338d528bf30000000049454e44ae426082</data> </image> <image name="image28"> ! <data format="PNG" length="401">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000015849444154388db595b14ac3501486bf2b0a155c3a08691141f0051cd3ad191d0b4e820f5070f4017474747710ba266f60b7ee0e3e8142078552b4341709fc0e69da1a6b9a5bc98103e7fef7de9ffffc3997184954115b95b002489ae7c99594d5ab8e2e65212e69a138b8e9177992ed99596a0d9e129fdfa1d3e300e873741b6bf722fcbff159ebedeb47155891b74045b8a4d21e6f465ca63157e2a2715bbe6472985983b35d466e8ea414be5271efa19757ea1e553c69494e560030b81f287a8af03d9fe839a215b7082721d65aecc4e25b1fc0382bee5e765514de81a77553b1325a5eb058bc823106de67eb4fc0ce6a57c59db38e2469f8324c5f134892a61f5349526dafa68d3c0ee25471f3b039c78c310b91498a395b118e4300466fa379b792d0575a5b6b3723ce2ed6f7eb102f6decfc3ce74c3c9e8c0188e31876fffe46ce1eb793368d46039ba4734b0236b1bfce99aa7ea6df92b30c021998c7eb0000000049454e44ae426082</data> </image> <image name="image29"> ! <data format="PNG" length="433">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000017849444154388db593b14a03411445cf48042d52a40824a0a00185047f60536e696f7a0b3f40f22d96765aba95ec0728b1b548ba802984040c642191ec4002cf627735ceaed9ec622e3c66de0c73e7ce7d6f9488b00dec6c85154044fe8ccae5a34473f3d84a2472ae575cb051ad7bf37094ab3012c90be6c2cb2b72f30c833dd0b870748e6a3d4848b239d65a7135172eeec4b0c2b420ee93482e8f3722566661944a7df1aac751feeb507af192552a632d5149ac781b22f559a98a874f1353e96637e7f038152292dd8ace6d479c9e8355b1707b2ecd83266ed7c5d2168e76b0b50da0622d9686f6755bd6a17e56972c5df10dab62fd24fd707c0fc731a083696662a7e70030e80fe0044683111c8237f6a00c9ef6801ced66576c006aa7b5d89e4c059679157703c5c3b72122c2e4638288309fcea108fa53e723f6973e00d5e32a8ca1542ec10cf68bfbb0004d4ee2485... [truncated message content] |
From: Albert G. <ag...@us...> - 2007-11-23 09:39:06
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv7991 Modified Files: qcalc.q Log Message: fix keyboard focus of special GUI widgets Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.174 retrieving revision 1.175 diff -C2 -d -r1.174 -r1.175 *** qcalc.q 23 Nov 2007 00:52:01 -0000 1.174 --- qcalc.q 23 Nov 2007 09:39:02 -0000 1.175 *************** *** 1344,1352 **** if not qt TABLE "isEditing" (); ! updatemsg (I,J) = statusmsg $ sprintf "%s%d = %s" (colstr J,I+1,S) where (S,_,_) = get EVAL!(I,J); = statusmsg $ sprintf "%s%d" (colstr J,I+1) otherwise; /* These are related to the script editor. */ --- 1344,1360 ---- if not qt TABLE "isEditing" (); ! updatemsg (I,J) = focus_widget (I,J) || ! statusmsg $ sprintf "%s%d = %s" (colstr J,I+1,S) where (S,_,_) = get EVAL!(I,J); = statusmsg $ sprintf "%s%d" (colstr J,I+1) otherwise; + /* Set the focus to a GUI widget (actually its focus proxy, if available). */ + + focus_widget (I,J) + = qt X "setFocus" () + if not is_nil X + where X:QtObject = qt TABLE "cellWidget" (I,J); + /* These are related to the script editor. */ |
From: Albert G. <ag...@us...> - 2007-11-23 00:52:05
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv8534 Modified Files: qcalc.q Log Message: bugfixes Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.173 retrieving revision 1.174 diff -C2 -d -r1.173 -r1.174 *** qcalc.q 22 Nov 2007 09:28:49 -0000 1.173 --- qcalc.q 23 Nov 2007 00:52:01 -0000 1.174 *************** *** 638,642 **** def CBQ = semaphore; ! def WL = [abort,eval,gui_update,popup,text_changed,linenumbermsg,indent], BL1 = [eval,gui_update], BL2 = [timer]; --- 638,643 ---- def CBQ = semaphore; ! def WL = [abort,activate,eval,gui_update,popup, ! text_changed,linenumbermsg,indent], BL1 = [eval,gui_update], BL2 = [timer]; *************** *** 652,659 **** = true if not is_global and then any (eq SLOT) BL2; // All other callbacks are deferred in local mode unless they're on the ! // whitelist. These will be executed later from the timer. Also note that ! // while eval and gui_update are on the whitelist and hence passed through ! // here (unless in recursive mode), in local mode these callbacks will ! // simply queue a corresponding GUI update request for later processing. = post CBQ '(SLOT OBJ (qt_data OBJ) ARGS || true) || true if not is_global and then all (neq SLOT) WL; --- 653,657 ---- = true if not is_global and then any (eq SLOT) BL2; // All other callbacks are deferred in local mode unless they're on the ! // whitelist. These will then be executed later from the timer. = post CBQ '(SLOT OBJ (qt_data OBJ) ARGS || true) || true if not is_global and then all (neq SLOT) WL; *************** *** 748,751 **** --- 746,762 ---- manual A _ _ _ = assistant (which "doc/qdoc.html"++A); + /* XXXFIXME: A horrible kludge to set the current cell to the one which holds + one of our GUI elements if it gets the focus. Unfortunately, this isn't + handled automatically by Qt. */ + + check_focus N X = set_current_cell (I,J) + if (I,J)<>current_cell + where (I,J) = qt_data X; + // check for a maximum of 5 levels; this should be good enough for most + // purposes + = check_focus (N+1) X + if not is_nil X where X:QtObject = qt_parent X + if N < 5; + /* Timer processing. */ *************** *** 754,757 **** --- 765,769 ---- timer _ _ _ = set_status HAVE_UNDO EDIT_UNDO || set_status HAVE_REDO EDIT_REDO || + check_focus 0 (qt APP "focusWidget" ()) || digest_loop where HAVE_TABLE = (qt TABW "currentPageIndex" () = 0), *************** *** 1324,1328 **** activate _ _ (I,J) ! = check_editing || updatemsg (I,J); clicked _ _ (I,J) --- 1336,1340 ---- activate _ _ (I,J) ! = updatemsg (I,J) if check_editing || is_global; clicked _ _ (I,J) |
From: Albert G. <ag...@us...> - 2007-11-22 09:30:21
|
Update of /cvsroot/q-lang/qcalc/examples In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv16375/examples Added Files: midiio.qcalc Log Message: added midiio example --- NEW FILE: midiio.qcalc --- // qcalc 1.0, created Thu Nov 22 10:31:16 2007 -*-Q-*- -*- coding: UTF-8 -*- // [((0,1),"MidiShare Client"),((0,2),"Port"),((0,3),"Channel"),((1,0),"Input:"),((1,1),"= client_combobox"),((1,2),"= port_spinbox"),((1,3),"= chan_spinbox"),((3,0),"= midiin_taskbutton B2 C2 D2 F5:F11"),((3,1),"Time"),((3,2),"Channel"),((3,3),"Data #1"),((3,4),"Data #2"),((3,5),"= midiin_clearbutton"),((4,0),"Note On"),((4,2),"= spinbox (0,16,1,0,\" \")"),((4,3),"= spinbox (-1,127,1,-1,\" \")"),((4,4),"= spinbox (-1,127,1,-1,\" \")"),((4,5),"= togglebutton (\"Recv\",\"\",true)"),((4,6),"= note_name D5"),((5,0),"Note Off"),((5,2),"= spinbox (0,16,1,0,\" \")"),((5,3),"= spinbox (-1,127,1,-1,\" \")"),((5,4),"= spinbox (-1,127,1,-1,\" \")"),((5,5),"= togglebutton (\"Recv\",\"\",true)"),((6,0),"Pitch Wheel"),((6,2),"= spinbox (0,16,1,0,\" \")"),((6,3),"= spinbox (-1,127,1,-1,\" \")"),((6,4),"= spinbox (-1,127,1,-1,\" \")"),((6,5),"= togglebutton (\"Recv\",\"\",true)"),((7,0),"Controller"),((7,2),"= spinbox (0,16,1,0,\" \")"),((7,3),"= spinbox (-1,127,1,-1,\" \")"),((7,4),"= spinbox (-1,127,1,-1,\" \")"),((7,5),"= togglebutton (\"Recv\",\"\",true)"),((8,0),"Program"),((8,2),"= spinbox (0,16,1,0,\" \")"),((8,3),"= spinbox (-1,127,1,-1,\" \")"),((8,4),"= spinbox (-1,127,1,-1,\" \")"),((8,5),"= togglebutton (\"Recv\",\"\",true)"),((9,0),"Aftertouch"),((9,2),"= spinbox (0,16,1,0,\" \")"),((9,3),"= spinbox (-1,127,1,-1,\" \")"),((9,4),"= spinbox (-1,127,1,-1,\" \")"),((9,5),"= togglebutton (\"Recv\",\"\",true)"),((10,0),"Poly Aftertouch"),((10,2),"= spinbox (0,16,1,0,\" \")"),((10,3),"= spinbox (-1,127,1,-1,\" \")"),((10,4),"= spinbox (-1,127,1,-1,\" \")"),((10,5),"= togglebutton (\"Recv\",\"\",true)")] // [] // [(0,126),(1,146),(5,83)] // Start of script. Please do not remove this line. import calclib, midi; def MYNAME = "QCalc MIDI I/O", REF = midi_open MYNAME, _ = midi_connect REF REF; def NOTE_NAMES = ("C","C#","D","D#","E","F","F#","G","G#","A","Bb","B"); note_name N:Int = sprintf "%s%d" (NOTE_NAMES!(N mod 12),N div 12) if N>=0; note_name _ = "N/A" otherwise; make_client_name N = sprintf "%d %s" (N,midi_client_name N); client_ref S = N where N:Int = sscanf S "%d"; client_name S = S where N:Int = sscanf S "%d", S:String = midi_client_name N; client_combobox = combobox $ filter ((<>MYNAME).client_name) $ map make_client_name midi_clients; port_spinbox = spinbox (-1,255,1,-1,"Any"); chan_spinbox = spinbox (0,16,1,0,"Any"); portno "Any" = -1; portno N:Int = N; channo "Any" = 0; channo N:Int = N; midiin_clearbutton = actionbutton "Clear" (matrix (row+1,1) [[""," "," "," "] : K in [1..7]] || ()); midiin_taskbutton NAME:String PORT CHAN F:List = taskbutton "Connect" $ midiin_task NAME (portno PORT) (channo CHAN) (tuple F); midiin_task NAME:String PORT:Int CHAN:Int F:Tuple = printf "opening client #%d %s (port %d, channel %d)\n" (IN,NAME,PORT,CHAN) || midi_connect IN REF || port_filter PORT || chan_filter CHAN || midiin_process F SEM (I,J) IN PORT (thread $ midiin_loop SEM (midi_get REF)) (get SEM) where IN:Int = client_ref NAME, NAME:String = midi_client_name IN, SEM:Semaphore = task_input, (I,J) = index, CHAN = CHAN-1; port_filter PORT = do (flip (midi_accept_port REF) false) [0..255] || midi_accept_port REF PORT true if PORT >= 0; chan_filter CHAN = do (flip (midi_accept_chan REF) false) [0..15] || midi_accept_chan REF CHAN true if CHAN >= 0; midiin_process F SEM (I,J) IN PORT H:Thread B:Bool = puts "connecting\n" || midi_connect IN REF || midiin_process F SEM (I,J) IN PORT H (get SEM) if B; = puts "disconnecting\n" || midi_disconnect IN REF || midiin_process F SEM (I,J) IN PORT H (get SEM) otherwise; midiin_process F SEM (I,J) IN PORT H:Thread 'X = puts "closing\n" || midi_send REF PORT stop || cancel H || midi_accept_all REF || midi_disconnect IN REF || taskbutton ("Connect",CONN) $ midiin_task NAME (portno PORT) (channo CHAN) F where (_,_,NAME,PORT,CHAN,F) = task_params 'X, CONN = midi_connected IN REF; midiin_process F SEM (I,J) IN PORT H:Thread (TIME,note_on CH N V) = rowvect (I+1,J+1) [TIME,CH+1,N,V] || midiin_process F SEM (I,J) IN PORT H (get SEM) if F!0; midiin_process F SEM (I,J) IN PORT H:Thread (TIME,note_off CH N V) = rowvect (I+2,J+1) [TIME,CH+1,N,V] || midiin_process F SEM (I,J) IN PORT H (get SEM) if F!1; midiin_process F SEM (I,J) IN PORT H:Thread (TIME,pitch_wheel CH LSB MSB) = rowvect (I+3,J+1) [TIME,CH+1,LSB,MSB] || midiin_process F SEM (I,J) IN PORT H (get SEM) if F!2; midiin_process F SEM (I,J) IN PORT H:Thread (TIME,ctrl_change CH N V) = rowvect (I+4,J+1) [TIME,CH+1,N,V] || midiin_process F SEM (I,J) IN PORT H (get SEM) if F!3; midiin_process F SEM (I,J) IN PORT H:Thread (TIME,prog_change CH V) = rowvect (I+5,J+1) [TIME,CH+1,V] || midiin_process F SEM (I,J) IN PORT H (get SEM) if F!4; midiin_process F SEM (I,J) IN PORT H:Thread (TIME,key_press CH N V) = rowvect (I+6,J+1) [TIME,CH+1,N,V] || midiin_process F SEM (I,J) IN PORT H (get SEM) if F!5; midiin_process F SEM (I,J) IN PORT H:Thread (TIME,chan_press CH V) = rowvect (I+7,J+1) [TIME,CH+1,V] || midiin_process F SEM (I,J) IN PORT H (get SEM) if F!6; midiin_process F SEM (I,J) IN PORT H:Thread _ = midiin_process F SEM (I,J) IN PORT H (get SEM) otherwise; midiin_loop SEM (_,_,TIME,MSG) = post SEM (TIME,MSG) || //printf "%08d %s\n" (TIME,str MSG) || midiin_loop SEM (midi_get REF); |
From: Albert G. <ag...@us...> - 2007-11-22 09:28:57
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv13877 Modified Files: qcalc.q Log Message: bugfixes Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.172 retrieving revision 1.173 diff -C2 -d -r1.172 -r1.173 *** qcalc.q 22 Nov 2007 03:12:41 -0000 1.172 --- qcalc.q 22 Nov 2007 09:28:49 -0000 1.173 *************** *** 645,653 **** // = printf "qt_invoke: %s %s %s\n" (str OBJ,str SLOT,str ARGS) || // fail if neq SLOT timer; ! // Blacklist #1: these are always inhibited in recursive mode. ! // XXXFIXME: eval, gui_update must be kept (queued?) here if they originate ! // from a real GUI interaction, but how do we detect this if collect_results ! // always sets the recursive mode?? ! = true if is_recursive and then any (eq SLOT) BL1; // Blacklist #2: these are always inhibited in local mode. = true if not is_global and then any (eq SLOT) BL2; --- 645,652 ---- // = printf "qt_invoke: %s %s %s\n" (str OBJ,str SLOT,str ARGS) || // fail if neq SLOT timer; ! // Blacklist #1: these are always inhibited in recursive mode if we are not in ! // local mode. ! = true if is_global and then is_recursive and then ! any (eq SLOT) BL1; // Blacklist #2: these are always inhibited in local mode. = true if not is_global and then any (eq SLOT) BL2; *************** *** 770,788 **** qt EDIT "isRedoAvailable" (); ! digest_loop = digest_loop_at time; ! /* Make sure that we eventually return from the loop in local mode, so that ! qcalc doesn't get locked in a local loop, which might otherwise happen if ! there's a lot of asynchronous messages to process. */ ! // XXXFIXME: need a fair scheduler here ! digest_loop_at T0 ! = do_queued_updates || fail; // falls through ! = digest S || digest_loop_at T0 ! where S = get MSGS ! if (#MSGS>0) and then (time-T0<=0.5); ! = digest X || digest_loop_at T0 ! where X = get CBQ ! if is_global and then (#CBQ>0); = () otherwise; --- 769,780 ---- qt EDIT "isRedoAvailable" (); ! /* In local mode we only do the minimally necessary processing here. */ ! digest_loop = digest_loop2 if is_global; ! = do_queued_updates otherwise; ! digest_loop2 = do_queued_updates || fail; // falls through ! = digest S || digest_loop2 where S = get MSGS if #MSGS>0; ! = digest X || digest_loop2 where X = get CBQ if #CBQ>0; = () otherwise; *************** *** 889,893 **** where X:QtObject = gui_elem (I,J); = if null S1 then delete_cells (I,J) || ! cell_setval (I,J) S0 || S where (S0,S1) = unquote S, S = if isstr S0 then S else S1; --- 881,886 ---- where X:QtObject = gui_elem (I,J); = if null S1 then delete_cells (I,J) || ! cell_setval (I,J) S0 || ! clean_cell (I,J) || set_cell (I,J) S1 || S where (S0,S1) = unquote S, S = if isstr S0 then S else S1; |
From: Albert G. <ag...@us...> - 2007-11-22 03:12:46
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv25105 Modified Files: calclib.q qcalc.q Log Message: bugfixes Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.171 retrieving revision 1.172 diff -C2 -d -r1.171 -r1.172 *** qcalc.q 22 Nov 2007 01:50:18 -0000 1.171 --- qcalc.q 22 Nov 2007 03:12:41 -0000 1.172 *************** *** 636,639 **** --- 636,641 ---- evaluations. */ + def CBQ = semaphore; + def WL = [abort,eval,gui_update,popup,text_changed,linenumbermsg,indent], BL1 = [eval,gui_update], BL2 = [timer]; *************** *** 644,647 **** --- 646,652 ---- // fail if neq SLOT timer; // Blacklist #1: these are always inhibited in recursive mode. + // XXXFIXME: eval, gui_update must be kept (queued?) here if they originate + // from a real GUI interaction, but how do we detect this if collect_results + // always sets the recursive mode?? = true if is_recursive and then any (eq SLOT) BL1; // Blacklist #2: these are always inhibited in local mode. *************** *** 652,656 **** // here (unless in recursive mode), in local mode these callbacks will // simply queue a corresponding GUI update request for later processing. ! = post MSGS '(SLOT OBJ (qt_data OBJ) ARGS || true) || true if not is_global and then all (neq SLOT) WL; @0 --- 657,661 ---- // here (unless in recursive mode), in local mode these callbacks will // simply queue a corresponding GUI update request for later processing. ! = post CBQ '(SLOT OBJ (qt_data OBJ) ARGS || true) || true if not is_global and then all (neq SLOT) WL; @0 *************** *** 765,769 **** qt EDIT "isRedoAvailable" (); ! digest_loop = digest_loop_at time || do_queued_updates; /* Make sure that we eventually return from the loop in local mode, so that --- 770,774 ---- qt EDIT "isRedoAvailable" (); ! digest_loop = digest_loop_at time; /* Make sure that we eventually return from the loop in local mode, so that *************** *** 771,779 **** there's a lot of asynchronous messages to process. */ digest_loop_at T0 = digest S || digest_loop_at T0 where S = get MSGS ! if (#MSGS>0) and then ! (is_global or else (time-T0<=0.5)); = () otherwise; --- 776,788 ---- there's a lot of asynchronous messages to process. */ + // XXXFIXME: need a fair scheduler here digest_loop_at T0 + = do_queued_updates || fail; // falls through = digest S || digest_loop_at T0 where S = get MSGS ! if (#MSGS>0) and then (time-T0<=0.5); ! = digest X || digest_loop_at T0 ! where X = get CBQ ! if is_global and then (#CBQ>0); = () otherwise; *************** *** 787,790 **** --- 796,810 ---- /* Digest output from the inferior Q process. */ + // preformatted text: + digest (formatted S:String) + = qt LOG "append" S || qt LOG "scrollToBottom" () + otherwise; + // background task: + digest 'X = X; + // pending updates: + digest W:List = process_sel2 W || merge_undo $ map (flip (flip sub 0) 1) W + if get STATE = 4; + + // other messages from the inferior process: digest "+++ Compile:" = STATE := 1; digest "+++ Error." = STATE := 2 || *************** *** 800,811 **** digest "+++ Exiting." = STATE := 0; - // preformatted text - digest (formatted S:String) - = qt LOG "append" S || qt LOG "scrollToBottom" () - otherwise; - - digest 'X = X; // background task - digest W:List = process_sel2 W || merge_undo $ map (flip (flip sub 0) 1) W - if get STATE = 4; digest S:String = /* The program generated output before we got the "Ready" message, assume that we're up and running anyway. */ --- 820,823 ---- *************** *** 1218,1222 **** = process_gui2 (I,J) X || digest_loop where X:QtObject = gui_elem (I,J); ! = post MSGS '(check_last_gui (I,J,X)) where X:QtObject = finish_edit true (I,J) || gui_elem (I,J); --- 1230,1234 ---- = process_gui2 (I,J) X || digest_loop where X:QtObject = gui_elem (I,J); ! = post CBQ '(check_last_gui (I,J,X)) where X:QtObject = finish_edit true (I,J) || gui_elem (I,J); Index: calclib.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/calclib.q,v retrieving revision 1.41 retrieving revision 1.42 diff -C2 -d -r1.41 -r1.42 *** calclib.q 20 Nov 2007 18:58:28 -0000 1.41 --- calclib.q 22 Nov 2007 03:12:41 -0000 1.42 *************** *** 486,493 **** where (H,SEM,'_) = get YYTASKS!(I,J): // task is alive and kicking, update it with the new data ! = printf "\f+++ Taskbutton: %s %s\n" ! (str (I,J),str (S,INIT)) || ! printf "\f+++ Taskstate: %s 1\n" (str (I,J)) || flush || ! post SEM '(taskbutton (S,INIT) X) || INIT where 'X = subst 'X if isthread H and then active H; --- 486,490 ---- where (H,SEM,'_) = get YYTASKS!(I,J): // task is alive and kicking, update it with the new data ! = post SEM '(taskbutton (S,INIT) X) || INIT where 'X = subst 'X if isthread H and then active H; |
From: Albert G. <ag...@us...> - 2007-11-22 01:50:24
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv20558 Modified Files: qcalc.q Log Message: more bugfixes and optimizations to better handle asynchronous messages Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.170 retrieving revision 1.171 diff -C2 -d -r1.170 -r1.171 *** qcalc.q 21 Nov 2007 02:58:54 -0000 1.170 --- qcalc.q 22 Nov 2007 01:50:18 -0000 1.171 *************** *** 633,646 **** @1 ! /* Override qt_invoke to reject any "unsafe" callbacks (i.e., everything ! except abort) during evaluations. XXXFIXME: We should actually queue ! callbacks (and execute them later in the callback routine) if we're in a ! local event loop here. */ qt_invoke OBJ SLOT ARGS - = _FAIL_ if is_recursive and then neq SLOT abort; // Use this for debugging if debug_invoke doesn't work (see below). // = printf "qt_invoke: %s %s %s\n" (str OBJ,str SLOT,str ARGS) || // fail if neq SLOT timer; @0 --- 633,657 ---- @1 ! /* Override qt_invoke to reject or queue "unsafe" callbacks during ! evaluations. */ ! ! def WL = [abort,eval,gui_update,popup,text_changed,linenumbermsg,indent], ! BL1 = [eval,gui_update], BL2 = [timer]; qt_invoke OBJ SLOT ARGS // Use this for debugging if debug_invoke doesn't work (see below). // = printf "qt_invoke: %s %s %s\n" (str OBJ,str SLOT,str ARGS) || // fail if neq SLOT timer; + // Blacklist #1: these are always inhibited in recursive mode. + = true if is_recursive and then any (eq SLOT) BL1; + // Blacklist #2: these are always inhibited in local mode. + = true if not is_global and then any (eq SLOT) BL2; + // All other callbacks are deferred in local mode unless they're on the + // whitelist. These will be executed later from the timer. Also note that + // while eval and gui_update are on the whitelist and hence passed through + // here (unless in recursive mode), in local mode these callbacks will + // simply queue a corresponding GUI update request for later processing. + = post MSGS '(SLOT OBJ (qt_data OBJ) ARGS || true) || true + if not is_global and then all (neq SLOT) WL; @0 *************** *** 696,701 **** abort _ _ _ = ABORTED := true; ! about _ _ _ if is_global: ! = aboutbox $ sprintf "<h1>QCalc - A Q spreadsheet</h1>\n\ \n\ --- 707,711 ---- abort _ _ _ = ABORTED := true; ! about _ _ _ = aboutbox $ sprintf "<h1>QCalc - A Q spreadsheet</h1>\n\ \n\ *************** *** 731,736 **** = qt_assistant PAGE; ! help A _ _ _ = assistant (which "doc/qcalc.html"++A) if is_global; ! manual A _ _ _ = assistant (which "doc/qdoc.html"++A) if is_global; /* Timer processing. */ --- 741,746 ---- = qt_assistant PAGE; ! help A _ _ _ = assistant (which "doc/qcalc.html"++A); ! manual A _ _ _ = assistant (which "doc/qdoc.html"++A); /* Timer processing. */ *************** *** 738,749 **** set_status B A = qt A "setEnabled" B if B<>qt A "isEnabled" (); ! timer _ _ _ = // set_status EDITING EDIT_ACCEPT || ! // set_status EDITING EDIT_CANCEL || ! // set_status (not EDITING) EDIT_EDIT || ! // set_status HAVE_TEXT EDIT_PASTE || ! set_status HAVE_UNDO EDIT_UNDO || set_status HAVE_REDO EDIT_REDO || ! if not is_recursive then digest_loop ! where HAVE_TABLE = (qt TABW "currentPageIndex" () = 0), EDITING = qt TABLE "isEditing" (), --- 748,754 ---- set_status B A = qt A "setEnabled" B if B<>qt A "isEnabled" (); ! timer _ _ _ = set_status HAVE_UNDO EDIT_UNDO || set_status HAVE_REDO EDIT_REDO || ! digest_loop where HAVE_TABLE = (qt TABW "currentPageIndex" () = 0), EDITING = qt TABLE "isEditing" (), *************** *** 758,768 **** not null (get REDO_LIST) else ! qt EDIT "isRedoAvailable" () ! // where HAVE_TEXT = neg null $ qt CLIP "text" $ ! // qt_val "QClipboard" "Clipboard" ! if is_global; ! digest_loop = digest S || digest_loop where S = get MSGS if #MSGS>0; ! = do_queued_updates otherwise; /* State of the inferior Q process: 0 = uninitialized or exited, 1 = --- 763,780 ---- not null (get REDO_LIST) else ! qt EDIT "isRedoAvailable" (); ! digest_loop = digest_loop_at time || do_queued_updates; ! ! /* Make sure that we eventually return from the loop in local mode, so that ! qcalc doesn't get locked in a local loop, which might otherwise happen if ! there's a lot of asynchronous messages to process. */ ! ! digest_loop_at T0 ! = digest S || digest_loop_at T0 ! where S = get MSGS ! if (#MSGS>0) and then ! (is_global or else (time-T0<=0.5)); ! = () otherwise; /* State of the inferior Q process: 0 = uninitialized or exited, 1 = *************** *** 889,894 **** if RES where RES = waitmsg "Compiling..." || init_interp, ! _ = highlight_rebuild_cache ! if is_global; init_interp = TASK := (TMP|NEW_TASK) || --- 901,905 ---- if RES where RES = waitmsg "Compiling..." || init_interp, ! _ = highlight_rebuild_cache; init_interp = TASK := (TMP|NEW_TASK) || *************** *** 959,963 **** // KLUDGE: Qt/Q cannot pass the QPoint parameter right now, so we read // QCursor::pos() instead. ! popup _ _ (I,J) = qt POPUP "exec" $ qt "QCursor" "pos" () if is_global; /* Manage table items. We derive our own QTableItems here, as we need to --- 970,974 ---- // KLUDGE: Qt/Q cannot pass the QPoint parameter right now, so we read // QCursor::pos() instead. ! popup _ _ (I,J) = qt POPUP "exec" $ qt "QCursor" "pos" (); /* Manage table items. We derive our own QTableItems here, as we need to *************** *** 1162,1165 **** --- 1173,1180 ---- otherwise; + clean_cell (I,J) + = clear_cell (I,J) if is_gui_elem (I,J); + = set_pixmap (I,J) NULLPM otherwise; + init_wrap (I,J) = qt IT "setWordWrap" $ not member (get EVAL) (I,J) if not is_nil IT *************** *** 1198,1204 **** /* Editing table cells and evaluation. */ ! eval _ _ (I,J) ! where (I,J) = real_index (I,J) ! if is_global and then not is_recursive: = process_gui2 (I,J) X || digest_loop where X:QtObject = gui_elem (I,J); --- 1213,1219 ---- /* Editing table cells and evaluation. */ ! eval S D (I,J) = eval2 S D (real_index (I,J)); ! eval2 _ _ (I,J) ! if is_global: = process_gui2 (I,J) X || digest_loop where X:QtObject = gui_elem (I,J); *************** *** 1206,1214 **** where X:QtObject = finish_edit true (I,J) || gui_elem (I,J); ! = (); ! where (I,J) = real_index (I,J) ! if not is_global and then not is_recursive: = queue_update (I,J) if is_gui_elem (I,J); - = (); /* FIXME: If we created a GUI object in the edited cell, it will be destroyed --- 1221,1226 ---- where X:QtObject = finish_edit true (I,J) || gui_elem (I,J); ! if not is_global: = queue_update (I,J) if is_gui_elem (I,J); /* FIXME: If we created a GUI object in the edited cell, it will be destroyed *************** *** 1239,1243 **** edit _ _ () where (I,J) = real_current_cell ! if qt TABW "currentPageIndex" () = 0 if is_global: = // nuke the current cell clear_cell (I,J) || --- 1251,1255 ---- edit _ _ () where (I,J) = real_current_cell ! if qt TABW "currentPageIndex" () = 0: = // nuke the current cell clear_cell (I,J) || *************** *** 1254,1258 **** edit _ _ (I,J,1) where (I,J) = real_index (I,J) ! if qt TABW "currentPageIndex" () = 0 if is_global: = if not qt TABLE "isEditing" () then edit_cell (I,J) --- 1266,1270 ---- edit _ _ (I,J,1) where (I,J) = real_index (I,J) ! if qt TABW "currentPageIndex" () = 0: = if not qt TABLE "isEditing" () then edit_cell (I,J) *************** *** 1260,1264 **** accept _ _ _ ! where _ = LAST_EDIT := (), (I,J) = real_current_cell if is_global: = doprocess (I,J) || digest_loop if is_gui_elem (I,J); --- 1272,1276 ---- accept _ _ _ ! where _ = LAST_EDIT := (), (I,J) = real_current_cell: = doprocess (I,J) || digest_loop if is_gui_elem (I,J); *************** *** 1274,1278 **** accept2 S D A where _ = LAST_EDIT := (), (I,J) = real_current_cell, N = num_rows ! if is_global and then (qt TABW "currentPageIndex" () = 0): = gui_enter (I,J) X where X:QtObject = gui_elem (I,J); --- 1286,1290 ---- accept2 S D A where _ = LAST_EDIT := (), (I,J) = real_current_cell, N = num_rows ! if qt TABW "currentPageIndex" () = 0: = gui_enter (I,J) X where X:QtObject = gui_elem (I,J); *************** *** 1288,1297 **** qt TABLE "isEditing" () and then (qt TABW "currentPageIndex" () = 0) ! where _ = LAST_EDIT := (), (I,J) = real_current_cell ! if is_global; gui_update X (I,J) _ ! where (I,J) = real_index (I,J) ! if not is_recursive and then not is_nil X: = if (I,J)<>real_current_cell then set_current_cell (I,J) || process_gui2 (I,J) X || digest_loop --- 1300,1307 ---- qt TABLE "isEditing" () and then (qt TABW "currentPageIndex" () = 0) ! where _ = LAST_EDIT := (), (I,J) = real_current_cell; gui_update X (I,J) _ ! where (I,J) = real_index (I,J) if not is_nil X: = if (I,J)<>real_current_cell then set_current_cell (I,J) || process_gui2 (I,J) X || digest_loop *************** *** 1309,1315 **** activate _ _ (I,J) ! = updatemsg (I,J) if check_editing || is_global; ! clicked _ _ (I,J) if is_global: = check_editing || fail if neq current_edited (real_index (I,J)); --- 1319,1325 ---- activate _ _ (I,J) ! = check_editing || updatemsg (I,J); ! clicked _ _ (I,J) = check_editing || fail if neq current_edited (real_index (I,J)); *************** *** 1454,1458 **** edit_undo _ _ _ = undo || updatemsg current_cell where _ = check_editing ! if (qt TABW "currentPageIndex" () = 0) and then is_global; = qt EDIT "undo" () if qt TABW "currentPageIndex" () = 1; --- 1464,1468 ---- edit_undo _ _ _ = undo || updatemsg current_cell where _ = check_editing ! if qt TABW "currentPageIndex" () = 0; = qt EDIT "undo" () if qt TABW "currentPageIndex" () = 1; *************** *** 1460,1468 **** edit_redo _ _ _ = redo || updatemsg current_cell where _ = check_editing ! if (qt TABW "currentPageIndex" () = 0) and then is_global; = qt EDIT "redo" () if qt TABW "currentPageIndex" () = 1; ! merge_cells _ _ _ if is_global: = EDITED := true || update_title || save_undo (I,J;N,M) where (I,J) = real_index (I,J), (N,M) = cell_span (I,J) --- 1470,1478 ---- edit_redo _ _ _ = redo || updatemsg current_cell where _ = check_editing ! if qt TABW "currentPageIndex" () = 0; = qt EDIT "redo" () if qt TABW "currentPageIndex" () = 1; ! merge_cells _ _ _ = EDITED := true || update_title || save_undo (I,J;N,M) where (I,J) = real_index (I,J), (N,M) = cell_span (I,J) *************** *** 1475,1479 **** if qt TABW "currentPageIndex" () = 0; ! dissociate_cells _ _ _ if is_global: = do dissociate_cell $ get_spans $ cat SEL where SEL = check_editing || sel_cellvals selection --- 1485,1489 ---- if qt TABW "currentPageIndex" () = 0; ! dissociate_cells _ _ _ = do dissociate_cell $ get_spans $ cat SEL where SEL = check_editing || sel_cellvals selection *************** *** 1506,1510 **** (N,M) = (max 1 N,max 1 M); ! insert_row _ _ _ if is_global: = adjust_rows (N+2) || EDITED := true || update_title || --- 1516,1520 ---- (N,M) = (max 1 N,max 1 M); ! insert_row _ _ _ = adjust_rows (N+2) || EDITED := true || update_title || *************** *** 1523,1527 **** if qt TABW "currentPageIndex" () = 0; ! delete_row _ _ _ if is_global: = EDITED := true || update_title || --- 1533,1537 ---- if qt TABW "currentPageIndex" () = 0; ! delete_row _ _ _ = EDITED := true || update_title || *************** *** 1544,1548 **** if qt TABW "currentPageIndex" () = 0; ! insert_col _ _ _ if is_global: = adjust_cols (N+2) || EDITED := true || update_title || --- 1554,1558 ---- if qt TABW "currentPageIndex" () = 0; ! insert_col _ _ _ = adjust_cols (N+2) || EDITED := true || update_title || *************** *** 1561,1565 **** if qt TABW "currentPageIndex" () = 0; ! delete_col _ _ _ if is_global: = EDITED := true || update_title || --- 1571,1575 ---- if qt TABW "currentPageIndex" () = 0; ! delete_col _ _ _ = EDITED := true || update_title || *************** *** 1634,1638 **** where SEL = check_editing || selection, CELLS = sel_cells SEL ! if (qt TABW "currentPageIndex" () = 0) and then is_global; = qt EDIT "del" () if qt TABW "currentPageIndex" () = 1; --- 1644,1648 ---- where SEL = check_editing || selection, CELLS = sel_cells SEL ! if qt TABW "currentPageIndex" () = 0; = qt EDIT "del" () if qt TABW "currentPageIndex" () = 1; *************** *** 1646,1650 **** X = sel_cellvals SEL, S = sel_cellcvals SEL, CELLS = sel_cells SEL ! if (qt TABW "currentPageIndex" () = 0) and then is_global; = qt EDIT "cut" () if qt TABW "currentPageIndex" () = 1; --- 1656,1660 ---- X = sel_cellvals SEL, S = sel_cellcvals SEL, CELLS = sel_cells SEL ! if qt TABW "currentPageIndex" () = 0; = qt EDIT "cut" () if qt TABW "currentPageIndex" () = 1; *************** *** 1653,1657 **** where SEL = check_editing || selection, X = sel_cellvals SEL, S = sel_cellcvals SEL ! if (qt TABW "currentPageIndex" () = 0) and then is_global; = qt EDIT "copy" () if qt TABW "currentPageIndex" () = 1; --- 1663,1667 ---- where SEL = check_editing || selection, X = sel_cellvals SEL, S = sel_cellcvals SEL ! if qt TABW "currentPageIndex" () = 0; = qt EDIT "copy" () if qt TABW "currentPageIndex" () = 1; *************** *** 1663,1667 **** where SEL = check_editing || selection, (I0,J0;I1,J1;I2,J2) = SEL ! if (qt TABW "currentPageIndex" () = 0) and then is_global; paste _ _ _ = EDITED := get EDITED or else not null SEL || --- 1673,1677 ---- where SEL = check_editing || selection, (I0,J0;I1,J1;I2,J2) = SEL ! if qt TABW "currentPageIndex" () = 0; paste _ _ _ = EDITED := get EDITED or else not null SEL || *************** *** 1679,1683 **** N = foldl max (MIN_ROWS-1) (map fst CELLS) + 1, M = foldl max (MIN_COLS-1) (map snd CELLS) + 1 ! if (qt TABW "currentPageIndex" () = 0) and then is_global; = qt EDIT "paste" () if qt TABW "currentPageIndex" () = 1; --- 1689,1693 ---- N = foldl max (MIN_ROWS-1) (map fst CELLS) + 1, M = foldl max (MIN_COLS-1) (map snd CELLS) + 1 ! if qt TABW "currentPageIndex" () = 0; = qt EDIT "paste" () if qt TABW "currentPageIndex" () = 1; *************** *** 1695,1699 **** SEL = map (translate (DI,DJ)) SEL, CELLS = map (flip (flip sub 0) 1) SEL ! if (qt TABW "currentPageIndex" () = 0) and then is_global; fill _ _ _ = EDITED := true || update_title || --- 1705,1709 ---- SEL = map (translate (DI,DJ)) SEL, CELLS = map (flip (flip sub 0) 1) SEL ! if qt TABW "currentPageIndex" () = 0; fill _ _ _ = EDITED := true || update_title || *************** *** 1707,1711 **** VALS = sel_cellvals SEL, CELLS = map (flip (flip sub 0) 1) $ cat VALS ! if (qt TABW "currentPageIndex" () = 0) and then is_global; fill_vals SEL --- 1717,1721 ---- VALS = sel_cellvals SEL, CELLS = map (flip (flip sub 0) 1) $ cat VALS ! if qt TABW "currentPageIndex" () = 0; fill_vals SEL *************** *** 1932,1936 **** where FONT = qt_new "QFont" (); ! choose_font _ _ _ if is_global: = do (flip set_font FONT) (if qt TABW "currentPageIndex" () = 0 then [TABLE] --- 1942,1946 ---- where FONT = qt_new "QFont" (); ! choose_font _ _ _ = do (flip set_font FONT) (if qt TABW "currentPageIndex" () = 0 then [TABLE] *************** *** 1982,1987 **** save S D A = save_as S D A if eq (get FILENAME) (); ! save _ _ _ if is_global: ! = EDITED := false || qt EDIT "setModified" false || update_title || fprintf F --- 1992,1996 ---- save S D A = save_as S D A if eq (get FILENAME) (); ! save _ _ _ = EDITED := false || qt EDIT "setModified" false || update_title || fprintf F *************** *** 2027,2032 **** = D otherwise; ! save_as X D A if is_global: ! = FILENAME := S || save X D A if not isfile (fopen S "r") or else (question --- 2036,2040 ---- = D otherwise; ! save_as X D A = FILENAME := S || save X D A if not isfile (fopen S "r") or else (question *************** *** 2039,2045 **** special deps X; load _ _ _ ! if not null NAME ! where NAME:String = open_dg ! if check_editing || check_edited if is_global: = () where () = open_file NAME; = msgbox $ sprintf --- 2047,2052 ---- special deps X; load _ _ _ ! if not null NAME where NAME:String = open_dg ! if check_editing || check_edited: = () where () = open_file NAME; = msgbox $ sprintf *************** *** 2052,2056 **** recent_file I _ _ _ if not null NAME where NAME:String = get FILES!(I-1) ! if check_editing || check_edited if is_global: = () where () = open_file NAME; = msgbox $ sprintf --- 2059,2063 ---- recent_file I _ _ _ if not null NAME where NAME:String = get FILES!(I-1) ! if check_editing || check_edited: = () where () = open_file NAME; = msgbox $ sprintf *************** *** 2175,2179 **** ROWS = [0..num_rows-1], COLS = [0..num_cols-1] ! if check_editing || check_edited if is_global; /* Encoding tag. FIXME: This currently requires nl_langinfo to get the system --- 2182,2186 ---- ROWS = [0..num_rows-1], COLS = [0..num_cols-1] ! if check_editing || check_edited; /* Encoding tag. FIXME: This currently requires nl_langinfo to get the system *************** *** 2203,2208 **** OPT_CELLS = qt OPTIONS_CELLS "selectedId" (), FROM = qt PRT "fromPage" (), TO = qt PRT "toPage" () ! where ALL = selection_all, SEL = selection ! if is_global: = doprint PRT OPT_CONTENTS (FROM,TO) $ format_as_text OPT_CELLS (I1,J1;I2,J2) --- 2210,2214 ---- OPT_CELLS = qt OPTIONS_CELLS "selectedId" (), FROM = qt PRT "fromPage" (), TO = qt PRT "toPage" () ! where ALL = selection_all, SEL = selection: = doprint PRT OPT_CONTENTS (FROM,TO) $ format_as_text OPT_CELLS (I1,J1;I2,J2) *************** *** 2213,2217 **** where (_,_;I1,J1;I2,J2) = ALL; = doprint PRT OPT_CONTENTS (FROM,TO) ""; ! if is_global: = statusmsg "Print aborted"; --- 2219,2223 ---- where (_,_;I1,J1;I2,J2) = ALL; = doprint PRT OPT_CONTENTS (FROM,TO) ""; ! otherwise: = statusmsg "Print aborted"; *************** *** 2451,2455 **** bail_out _ _ _ = qt APP "exit" 1 ! if check_editing || check_edited if is_global; edited = get EDITED or else qt EDIT "isModified" (); --- 2457,2461 ---- bail_out _ _ _ = qt APP "exit" 1 ! if check_editing || check_edited; edited = get EDITED or else qt EDIT "isModified" (); *************** *** 3551,3555 **** doprocess (I,J) = insert_cells (I,J) || cell_setval (I,J) () || ! if is_gui_elem (I,J) then clear_cell (I,J) || // do the necessary reevaluations if check_interp then compute V --- 3557,3561 ---- doprocess (I,J) = insert_cells (I,J) || cell_setval (I,J) () || ! clean_cell (I,J) || // do the necessary reevaluations if check_interp then compute V *************** *** 3579,3588 **** process1 (I,J,S) ! = if is_gui_elem (I,J) then clear_cell (I,J) || insert_cells (I,J) || insert_eval (I,J;S,'X,DEPS) || cell_setval (I,J) () where ("=",S) = (hd S,trim (tl S)), 'X = parse S, DEPS = deps 'X; ! = if is_gui_elem (I,J) then clear_cell (I,J) || set_cell (I,J) S || insert_cells (I,J) || delete_eval (I,J) || --- 3585,3594 ---- process1 (I,J,S) ! = clean_cell (I,J) || insert_cells (I,J) || insert_eval (I,J;S,'X,DEPS) || cell_setval (I,J) () where ("=",S) = (hd S,trim (tl S)), 'X = parse S, DEPS = deps 'X; ! = clean_cell (I,J) || set_cell (I,J) S || insert_cells (I,J) || delete_eval (I,J) || *************** *** 3603,3612 **** = cell_setval (I,J) () || check_deps CHK (I,J) if is_qt_object S; ! = if is_gui_elem (I,J) then clear_cell (I,J) || insert_cells (I,J) || insert_eval (I,J;S,'X,DEPS) || cell_setval (I,J) () || check_deps CHK (I,J) where ("=",S) = (hd S,trim (tl S)), 'X = parse S, DEPS = deps 'X; ! = if is_gui_elem (I,J) then clear_cell (I,J) || set_cell (I,J) S1 || cell_setval (I,J) S0 || --- 3609,3618 ---- = cell_setval (I,J) () || check_deps CHK (I,J) if is_qt_object S; ! = clean_cell (I,J) || insert_cells (I,J) || insert_eval (I,J;S,'X,DEPS) || cell_setval (I,J) () || check_deps CHK (I,J) where ("=",S) = (hd S,trim (tl S)), 'X = parse S, DEPS = deps 'X; ! = clean_cell (I,J) || set_cell (I,J) S1 || cell_setval (I,J) S0 || |
From: Albert G. <ag...@us...> - 2007-11-21 02:58:58
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv21757 Modified Files: qcalc.q Log Message: code cleanup, fix checks for local event loop Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.169 retrieving revision 1.170 diff -C2 -d -r1.169 -r1.170 *** qcalc.q 20 Nov 2007 18:58:28 -0000 1.169 --- qcalc.q 21 Nov 2007 02:58:54 -0000 1.170 *************** *** 606,648 **** if qt TABW "currentPageIndex" () = 0; - /* Callbacks. */ - - about _ _ _ = aboutbox $ sprintf - "<h1>QCalc - A Q spreadsheet</h1>\n\ - \n\ - <h2>QCalc %s (Q version %s, %s)</h2>\n\ - CVS version %s\n\ - \n\ - <p><big>%s</big></p>\n\ - \n\ - <p>This program is free software; you can redistribute it and/or modify\n\ - it under the terms of the GNU General Public License as published by\n\ - the Free Software Foundation; either version 2 of the License, or\n\ - (at your option) any later version.</p>\n\ - \n\ - <p>This program is distributed in the hope that it will be useful,\n\ - but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ - GNU General Public License for more details.</p>\n\ - \n\ - <p>You should have received a copy of the GNU General Public License\n\ - along with this program; if not, write to the Free Software\n\ - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.</p>" - (VERSION,version,sysinfo,CVS_VERSION,COPYRIGHT); - - /* Qt Assistant interface */ - - /* KLUDGE: At least with Qt3 under X11, it seems to be necessary to give Qt - Assistant some time to start up before we tell it the page to show, - otherwise the wrong page (i.e., whatever page was shown most recently) is - displayed. */ - - assistant PAGE = qt_assistant "" || sleep 0.5 || qt APP "processEvents" () || - fail if not qt_assistant_is_open; - = qt_assistant PAGE; - - help A _ _ _ = assistant (which "doc/qcalc.html"++A); - manual A _ _ _ = assistant (which "doc/qdoc.html"++A); - /* This flag is set iff we're processing events in the global loop. If it is unset, we're being invoked recursively through a local event loop, in which --- 606,609 ---- *************** *** 672,677 **** @1 ! /* Our last line of defence: Override qt_invoke to reject any "unsafe" ! callbacks (i.e., everything except abort) during evaluations. */ qt_invoke OBJ SLOT ARGS --- 633,640 ---- @1 ! /* Override qt_invoke to reject any "unsafe" callbacks (i.e., everything ! except abort) during evaluations. XXXFIXME: We should actually queue ! callbacks (and execute them later in the callback routine) if we're in a ! local event loop here. */ qt_invoke OBJ SLOT ARGS *************** *** 682,686 **** @0 ! /* Uncomment this for debugging purposes. (Qt/Q needs to be configured with -DDEBUG_INVOKE to make this work.) */ --- 645,649 ---- @0 ! /* Uncomment this for debugging purposes. (Qt/Q needs to be built with -DDEBUG_INVOKE to make this work.) */ *************** *** 706,711 **** = normal_cursor otherwise; - abort _ _ _ = ABORTED := true; - /* Queue GUI updates for later processing during evaluations. */ --- 669,672 ---- *************** *** 731,734 **** --- 692,737 ---- nub [X,Y|Xs] = [X|nub [Y|Xs]] otherwise; + /* Callbacks. */ + + abort _ _ _ = ABORTED := true; + + about _ _ _ if is_global: + = aboutbox $ sprintf + "<h1>QCalc - A Q spreadsheet</h1>\n\ + \n\ + <h2>QCalc %s (Q version %s, %s)</h2>\n\ + CVS version %s\n\ + \n\ + <p><big>%s</big></p>\n\ + \n\ + <p>This program is free software; you can redistribute it and/or modify\n\ + it under the terms of the GNU General Public License as published by\n\ + the Free Software Foundation; either version 2 of the License, or\n\ + (at your option) any later version.</p>\n\ + \n\ + <p>This program is distributed in the hope that it will be useful,\n\ + but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ + GNU General Public License for more details.</p>\n\ + \n\ + <p>You should have received a copy of the GNU General Public License\n\ + along with this program; if not, write to the Free Software\n\ + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.</p>" + (VERSION,version,sysinfo,CVS_VERSION,COPYRIGHT); + + /* Qt Assistant interface */ + + /* KLUDGE: At least with Qt3 under X11, it seems to be necessary to give Qt + Assistant some time to start up before we tell it the page to show, + otherwise the wrong page (i.e., whatever page was shown most recently) is + displayed. */ + + assistant PAGE = qt_assistant "" || sleep 0.5 || qt APP "processEvents" () || + fail if not qt_assistant_is_open; + = qt_assistant PAGE; + + help A _ _ _ = assistant (which "doc/qcalc.html"++A) if is_global; + manual A _ _ _ = assistant (which "doc/qdoc.html"++A) if is_global; + /* Timer processing. */ *************** *** 956,960 **** // KLUDGE: Qt/Q cannot pass the QPoint parameter right now, so we read // QCursor::pos() instead. ! popup _ _ (I,J) = qt POPUP "exec" $ qt "QCursor" "pos" (); /* Manage table items. We derive our own QTableItems here, as we need to --- 959,963 ---- // KLUDGE: Qt/Q cannot pass the QPoint parameter right now, so we read // QCursor::pos() instead. ! popup _ _ (I,J) = qt POPUP "exec" $ qt "QCursor" "pos" () if is_global; /* Manage table items. We derive our own QTableItems here, as we need to *************** *** 1357,1365 **** def REPLS = ref 0; ! find _ _ _ if is_global: ! = find_dg || REPLS := 0 || find_clearmsg || show_editor; ! find_prev _ _ _ if is_global: ! = savestr FIND_TEXT S || find_statusmsg "Found previous occurrence" || set_status true FIND_REPL || qt FIND_PREV "setDefault" true --- 1360,1366 ---- def REPLS = ref 0; ! find _ _ _ = find_dg || REPLS := 0 || find_clearmsg || show_editor; ! find_prev _ _ _ = savestr FIND_TEXT S || find_statusmsg "Found previous occurrence" || set_status true FIND_REPL || qt FIND_PREV "setDefault" true *************** *** 1373,1378 **** otherwise; ! find_next _ _ _ if is_global: ! = savestr FIND_TEXT S || find_statusmsg "Found next occurrence" || set_status true FIND_REPL || qt FIND_NEXT "setDefault" true --- 1374,1378 ---- otherwise; ! find_next _ _ _ = savestr FIND_TEXT S || find_statusmsg "Found next occurrence" || set_status true FIND_REPL || qt FIND_NEXT "setDefault" true *************** *** 1391,1396 **** REPLS := 0 otherwise; ! find_repl X D A if is_global: ! = qt EDIT "insert" S || REPLS := get REPLS+1 || savestr REPL_TEXT S0 || (if qt FIND_NEXT "isDefault" () then find_next --- 1391,1395 ---- REPLS := 0 otherwise; ! find_repl X D A = qt EDIT "insert" S || REPLS := get REPLS+1 || savestr REPL_TEXT S0 || (if qt FIND_NEXT "isDefault" () then find_next *************** *** 1453,1467 **** /* Various editing operations. */ ! edit_undo _ _ _ if is_global: ! = undo || updatemsg current_cell where _ = check_editing ! if qt TABW "currentPageIndex" () = 0; = qt EDIT "undo" () if qt TABW "currentPageIndex" () = 1; ! edit_redo _ _ _ if is_global: ! = redo || updatemsg current_cell where _ = check_editing ! if qt TABW "currentPageIndex" () = 0; = qt EDIT "redo" () if qt TABW "currentPageIndex" () = 1; --- 1452,1464 ---- /* Various editing operations. */ ! edit_undo _ _ _ = undo || updatemsg current_cell where _ = check_editing ! if (qt TABW "currentPageIndex" () = 0) and then is_global; = qt EDIT "undo" () if qt TABW "currentPageIndex" () = 1; ! edit_redo _ _ _ = redo || updatemsg current_cell where _ = check_editing ! if (qt TABW "currentPageIndex" () = 0) and then is_global; = qt EDIT "redo" () if qt TABW "currentPageIndex" () = 1; *************** *** 1630,1635 **** = (I<N) and then (J<M); ! del _ _ _ if is_global: ! = EDITED := get EDITED or else not null CELLS || update_title || clear_sel CELLS || --- 1627,1631 ---- = (I<N) and then (J<M); ! del _ _ _ = EDITED := get EDITED or else not null CELLS || update_title || clear_sel CELLS || *************** *** 1638,1647 **** where SEL = check_editing || selection, CELLS = sel_cells SEL ! if qt TABW "currentPageIndex" () = 0; = qt EDIT "del" () if qt TABW "currentPageIndex" () = 1; ! cut _ _ _ if is_global: ! = EDITED := get EDITED or else not null CELLS || update_title || set_clipboard X S || clear_sel CELLS || --- 1634,1642 ---- where SEL = check_editing || selection, CELLS = sel_cells SEL ! if (qt TABW "currentPageIndex" () = 0) and then is_global; = qt EDIT "del" () if qt TABW "currentPageIndex" () = 1; ! cut _ _ _ = EDITED := get EDITED or else not null CELLS || update_title || set_clipboard X S || clear_sel CELLS || *************** *** 1651,1667 **** X = sel_cellvals SEL, S = sel_cellcvals SEL, CELLS = sel_cells SEL ! if qt TABW "currentPageIndex" () = 0; = qt EDIT "cut" () if qt TABW "currentPageIndex" () = 1; ! copy _ _ _ if is_global: ! = set_clipboard X S where SEL = check_editing || selection, X = sel_cellvals SEL, S = sel_cellcvals SEL ! if qt TABW "currentPageIndex" () = 0; = qt EDIT "copy" () if qt TABW "currentPageIndex" () = 1; ! copy_selection _ _ _ if is_global: = set_clipboard2 S where S = sel_cellcvals SEL --- 1646,1661 ---- X = sel_cellvals SEL, S = sel_cellcvals SEL, CELLS = sel_cells SEL ! if (qt TABW "currentPageIndex" () = 0) and then is_global; = qt EDIT "cut" () if qt TABW "currentPageIndex" () = 1; ! copy _ _ _ = set_clipboard X S where SEL = check_editing || selection, X = sel_cellvals SEL, S = sel_cellcvals SEL ! if (qt TABW "currentPageIndex" () = 0) and then is_global; = qt EDIT "copy" () if qt TABW "currentPageIndex" () = 1; ! copy_selection _ _ _ = set_clipboard2 S where S = sel_cellcvals SEL *************** *** 1669,1676 **** where SEL = check_editing || selection, (I0,J0;I1,J1;I2,J2) = SEL ! if qt TABW "currentPageIndex" () = 0; ! paste _ _ _ if is_global: ! = EDITED := get EDITED or else not null SEL || adjust_table (N,M) || update_title || process_sel SEL || --- 1663,1669 ---- where SEL = check_editing || selection, (I0,J0;I1,J1;I2,J2) = SEL ! if (qt TABW "currentPageIndex" () = 0) and then is_global; ! paste _ _ _ = EDITED := get EDITED or else not null SEL || adjust_table (N,M) || update_title || process_sel SEL || *************** *** 1686,1694 **** N = foldl max (MIN_ROWS-1) (map fst CELLS) + 1, M = foldl max (MIN_COLS-1) (map snd CELLS) + 1 ! if qt TABW "currentPageIndex" () = 0; = qt EDIT "paste" () if qt TABW "currentPageIndex" () = 1; ! paste_text _ _ _ if is_global: = EDITED := get EDITED or else not null SEL || update_title || process_sel SEL || --- 1679,1687 ---- N = foldl max (MIN_ROWS-1) (map fst CELLS) + 1, M = foldl max (MIN_COLS-1) (map snd CELLS) + 1 ! if (qt TABW "currentPageIndex" () = 0) and then is_global; = qt EDIT "paste" () if qt TABW "currentPageIndex" () = 1; ! paste_text _ _ _ = EDITED := get EDITED or else not null SEL || update_title || process_sel SEL || *************** *** 1702,1709 **** SEL = map (translate (DI,DJ)) SEL, CELLS = map (flip (flip sub 0) 1) SEL ! if qt TABW "currentPageIndex" () = 0; ! fill _ _ _ if is_global: ! = EDITED := true || update_title || process_sel $ tl $ cat $ fill_vals VALS || save_undo CELLS || --- 1695,1701 ---- SEL = map (translate (DI,DJ)) SEL, CELLS = map (flip (flip sub 0) 1) SEL ! if (qt TABW "currentPageIndex" () = 0) and then is_global; ! fill _ _ _ = EDITED := true || update_title || process_sel $ tl $ cat $ fill_vals VALS || save_undo CELLS || *************** *** 1715,1719 **** VALS = sel_cellvals SEL, CELLS = map (flip (flip sub 0) 1) $ cat VALS ! if qt TABW "currentPageIndex" () = 0; fill_vals SEL --- 1707,1711 ---- VALS = sel_cellvals SEL, CELLS = map (flip (flip sub 0) 1) $ cat VALS ! if (qt TABW "currentPageIndex" () = 0) and then is_global; fill_vals SEL *************** *** 1949,1953 **** (FONT,true) = font_dg FONT; ! enlarge_font _ _ _ if is_global: = statusmsg $ sprintf "New point size: %dpt" $ change_pointsize succ TABLE --- 1941,1945 ---- (FONT,true) = font_dg FONT; ! enlarge_font _ _ _ = statusmsg $ sprintf "New point size: %dpt" $ change_pointsize succ TABLE *************** *** 1958,1962 **** otherwise; ! reduce_font _ _ _ if is_global: = statusmsg $ sprintf "New point size: %dpt" $ change_pointsize pred TABLE --- 1950,1954 ---- otherwise; ! reduce_font _ _ _ = statusmsg $ sprintf "New point size: %dpt" $ change_pointsize pred TABLE *************** *** 1967,1976 **** otherwise; ! increase_prec _ _ _ if is_global: = FPREC := get FPREC+1 || FFORMAT := sprintf "%%0.%dg" (get FPREC) || do update_fformat $ list $ get CELLS; ! decrease_prec _ _ _ if is_global: = FPREC := get FPREC-1 || FFORMAT := sprintf "%%0.%dg" (get FPREC) || --- 1959,1968 ---- otherwise; ! increase_prec _ _ _ = FPREC := get FPREC+1 || FFORMAT := sprintf "%%0.%dg" (get FPREC) || do update_fformat $ list $ get CELLS; ! decrease_prec _ _ _ = FPREC := get FPREC-1 || FFORMAT := sprintf "%%0.%dg" (get FPREC) || *************** *** 2211,2215 **** OPT_CELLS = qt OPTIONS_CELLS "selectedId" (), FROM = qt PRT "fromPage" (), TO = qt PRT "toPage" () ! where ALL = selection_all, SEL = selection: = doprint PRT OPT_CONTENTS (FROM,TO) $ format_as_text OPT_CELLS (I1,J1;I2,J2) --- 2203,2208 ---- OPT_CELLS = qt OPTIONS_CELLS "selectedId" (), FROM = qt PRT "fromPage" (), TO = qt PRT "toPage" () ! where ALL = selection_all, SEL = selection ! if is_global: = doprint PRT OPT_CONTENTS (FROM,TO) $ format_as_text OPT_CELLS (I1,J1;I2,J2) *************** *** 2220,2224 **** where (_,_;I1,J1;I2,J2) = ALL; = doprint PRT OPT_CONTENTS (FROM,TO) ""; ! otherwise: = statusmsg "Print aborted"; --- 2213,2217 ---- where (_,_;I1,J1;I2,J2) = ALL; = doprint PRT OPT_CONTENTS (FROM,TO) ""; ! if is_global: = statusmsg "Print aborted"; |
From: Albert G. <ag...@us...> - 2007-11-20 18:58:32
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv24297 Modified Files: qcalc.q calclib.q Log Message: optimizations, bugfixes Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.168 retrieving revision 1.169 diff -C2 -d -r1.168 -r1.169 *** qcalc.q 18 Nov 2007 05:49:12 -0000 1.168 --- qcalc.q 20 Nov 2007 18:58:28 -0000 1.169 *************** *** 708,724 **** abort _ _ _ = ABORTED := true; - /* XXXFIXME: A horrible kludge to set the current cell to the one which holds - one of our GUI elements if it gets the focus. Unfortunately, this isn't - handled automatically by Qt. */ - - check_focus N X = set_current_cell (I,J) - if (I,J)<>current_cell - where (I,J) = qt_data X; - // check for a maximum of 5 levels; this should be good enough for most - // purposes - = check_focus (N+1) X - if not is_nil X where X:QtObject = qt_parent X - if N < 5; - /* Queue GUI updates for later processing during evaluations. */ --- 708,711 ---- *************** *** 754,758 **** set_status HAVE_UNDO EDIT_UNDO || set_status HAVE_REDO EDIT_REDO || - check_focus 0 (qt APP "focusWidget" ()) || if not is_recursive then digest_loop --- 741,744 ---- *************** *** 829,832 **** --- 815,836 ---- (reg 1,reg 2), (I,J) = val K; + = dowith process_gui KYs (map gui_elem KYs) || + process_sel2 Xs || merge_undo KXs || digest_loop + where Xs = recursive (map uprocess_update Xs), + Ys = filter (is_qt_object.trd) Xs, + KYs = map (flip (flip sub 0) 1) Ys, + Xs = filter (isstr.trd) Xs, + KXs = map (flip (flip sub 0) 1) Xs + if get STATE = 4 + where [S] = regex "" + "^\\+\\+\\+ Matrix: (.*)$" S (reg 1), + Xs:List = val S; + = process_sel2 [(I,J,IT)] + where [(K,S)] = regex "" + "^\\+\\+\\+ Taskbutton: (\\([0-9]+,[0-9]+\\)) (.*)$" S + (reg 1,reg 2), + (I,J) = val K, (TEXT,INIT) = val S, + IT:QtObject = make_gui taskbutton_gui (I,J) + (TEXT,INIT); = qt X "setIconSet" ICONSET || procmsg (I,J) (Y<>0) where [(K,S)] = regex "" *************** *** 840,843 **** --- 844,849 ---- // process an update of a cell or GUI element triggered by calclib::setval + uprocess_update (I,J,S) + = (I,J,process_update (I,J) S); process_update (I,J) S = gui_setval X S || get CELLS!(I,J) *************** *** 850,859 **** // a variation of the above, used in the evaluation loop (collect_results) process_update2 (I,J) S = gui_setval X S || get CELLS!(I,J) where X:QtObject = gui_elem (I,J); = if null S1 then delete_cells (I,J) || ! cell_setval (I,J) S0 || ! clear_cell (I,J) || set_cell (I,J) S1 || S where (S0,S1) = unquote S, S = if isstr S0 then S else S1; --- 856,866 ---- // a variation of the above, used in the evaluation loop (collect_results) + uprocess_update2 (I,J,S) + = ((I,J),process_update2 (I,J) S); process_update2 (I,J) S = gui_setval X S || get CELLS!(I,J) where X:QtObject = gui_elem (I,J); = if null S1 then delete_cells (I,J) || ! cell_setval (I,J) S0 || S where (S0,S1) = unquote S, S = if isstr S0 then S else S1; *************** *** 1129,1138 **** clear_cell (I,J) ! if (I,J) <> real_index (I,J): ! = _FAIL_; ! where X:QtObject = gui_elem (I,J): = // clean up GUI element in the inferior process ! gui_clear (I,J) || fail; // falls through to below ! otherwise: = qt TABLE "clearCell" (I,J) if not has_table_item (I,J); = cell_setval (I,J) Y --- 1136,1149 ---- clear_cell (I,J) ! if (I,J) = real_index (I,J): = // clean up GUI element in the inferior process ! gui_clear (I,J) || clear_cell1 (I,J) || ! // make sure that edit mode is cleared, too ! if eq current_edited (I,J) then ! qt TABLE "setEditMode" (qt_val "QTable" "NotEditing",I,J) ! where X:QtObject = gui_elem (I,J); ! = clear_cell1 (I,J) otherwise; ! ! clear_cell1 (I,J) = qt TABLE "clearCell" (I,J) if not has_table_item (I,J); = cell_setval (I,J) Y *************** *** 3380,3390 **** collect_results U V ! = begin_recursive || results_loop U V || end_recursive; ! results_loop U [] // we're finished; process any pending cell updates = post MSGS $ zipwith append (keys U) (vals U) if not null U; = () otherwise; ! results_loop U [(I,J)|V] if get ABORTED: // user aborted the computation, flag all remaining cells --- 3391,3401 ---- collect_results U V ! = begin_recursive || results_loop time U V || end_recursive; ! results_loop T0 U [] // we're finished; process any pending cell updates = post MSGS $ zipwith append (keys U) (vals U) if not null U; = () otherwise; ! results_loop T0 U [(I,J)|V] if get ABORTED: // user aborted the computation, flag all remaining cells *************** *** 3396,3408 **** where S:String = try2 MSGS: // evaluation succeeded, we're good ! = update_cell (I,J) S || results_loop (delete U (I,J)) V where [S] = regex "" "^\\+\\+\\+ Result: (.*)$" S (reg 1); // errors during evaluation (these get the red flag) = flag (I,J) || ! results_loop U V if (S = "+++ Syntax error.") or else not null (regex "" "^\\+\\+\\+ Exception: (.*)$" S ()); /* Messages to change a cell (calclib::setval and clearval). */ ! = results_loop (insert U ((I1,J1),X)) [(I,J)|V] where X = process_update2 (I1,J1) S1 where [(K1,S1)] = regex "" --- 3407,3419 ---- where S:String = try2 MSGS: // evaluation succeeded, we're good ! = update_cell (I,J) S || results_loop T0 (delete U (I,J)) V where [S] = regex "" "^\\+\\+\\+ Result: (.*)$" S (reg 1); // errors during evaluation (these get the red flag) = flag (I,J) || ! results_loop T0 U V if (S = "+++ Syntax error.") or else not null (regex "" "^\\+\\+\\+ Exception: (.*)$" S ()); /* Messages to change a cell (calclib::setval and clearval). */ ! = results_loop T0 (insert U ((I1,J1),X)) [(I,J)|V] where X = process_update2 (I1,J1) S1 where [(K1,S1)] = regex "" *************** *** 3410,3414 **** (reg 1,reg 2), (I1,J1) = val K1; ! = results_loop (insert U ((I1,J1),X)) [(I,J)|V] where X = process_clear (I1,J1) S1 where [(K1,S1)] = regex "" --- 3421,3425 ---- (reg 1,reg 2), (I1,J1) = val K1; ! = results_loop T0 (insert U ((I1,J1),X)) [(I,J)|V] where X = process_clear (I1,J1) S1 where [(K1,S1)] = regex "" *************** *** 3416,3421 **** (reg 1,reg 2), (I1,J1) = val K1; /* Messages to create GUI elements in cells (calclib::combobox et al). */ ! = results_loop (insert U ((I1,J1),IT)) [(I,J)|V] where [(K1,S1)] = regex "" "^\\+\\+\\+ Checkbox: (\\([0-9]+,[0-9]+\\)) (.*)$" S --- 3427,3437 ---- (reg 1,reg 2), (I1,J1) = val K1; + = results_loop T0 (foldl insert U Xs) [(I,J)|V] + where Xs = map uprocess_update2 Xs + where [S] = regex "" + "^\\+\\+\\+ Matrix: (.*)$" S (reg 1), + Xs:List = val S; /* Messages to create GUI elements in cells (calclib::combobox et al). */ ! = results_loop T0 (insert U ((I1,J1),IT)) [(I,J)|V] where [(K1,S1)] = regex "" "^\\+\\+\\+ Checkbox: (\\([0-9]+,[0-9]+\\)) (.*)$" S *************** *** 3423,3427 **** (I1,J1) = val K1, (S1,INIT) = val S1, IT:QtObject = make_gui checkbox_gui (I1,J1) (S1,INIT); ! = results_loop (insert U ((I1,J1),IT)) [(I,J)|V] where [(K1,S1)] = regex "" "^\\+\\+\\+ Pushbutton: (\\([0-9]+,[0-9]+\\)) (.*)$" S --- 3439,3443 ---- (I1,J1) = val K1, (S1,INIT) = val S1, IT:QtObject = make_gui checkbox_gui (I1,J1) (S1,INIT); ! = results_loop T0 (insert U ((I1,J1),IT)) [(I,J)|V] where [(K1,S1)] = regex "" "^\\+\\+\\+ Pushbutton: (\\([0-9]+,[0-9]+\\)) (.*)$" S *************** *** 3430,3434 **** IT:QtObject = make_gui pushbutton_gui (I1,J1) (TEXT,ICON); ! = results_loop (insert U ((I1,J1),IT)) [(I,J)|V] where [(K1,S1)] = regex "" "^\\+\\+\\+ Actionbutton: (\\([0-9]+,[0-9]+\\)) (.*)$" S --- 3446,3450 ---- IT:QtObject = make_gui pushbutton_gui (I1,J1) (TEXT,ICON); ! = results_loop T0 (insert U ((I1,J1),IT)) [(I,J)|V] where [(K1,S1)] = regex "" "^\\+\\+\\+ Actionbutton: (\\([0-9]+,[0-9]+\\)) (.*)$" S *************** *** 3437,3441 **** IT:QtObject = make_gui actionbutton_gui (I1,J1) (TEXT,ICON,INIT); ! = results_loop (insert U ((I1,J1),IT)) [(I,J)|V] where [(K1,S1)] = regex "" "^\\+\\+\\+ Togglebutton: (\\([0-9]+,[0-9]+\\)) (.*)$" S --- 3453,3457 ---- IT:QtObject = make_gui actionbutton_gui (I1,J1) (TEXT,ICON,INIT); ! = results_loop T0 (insert U ((I1,J1),IT)) [(I,J)|V] where [(K1,S1)] = regex "" "^\\+\\+\\+ Togglebutton: (\\([0-9]+,[0-9]+\\)) (.*)$" S *************** *** 3444,3448 **** IT:QtObject = make_gui togglebutton_gui (I1,J1) (TEXT,ICON,INIT); ! = results_loop (insert U ((I1,J1),IT)) [(I,J)|V] where [(K1,S1)] = regex "" "^\\+\\+\\+ Taskbutton: (\\([0-9]+,[0-9]+\\)) (.*)$" S --- 3460,3464 ---- IT:QtObject = make_gui togglebutton_gui (I1,J1) (TEXT,ICON,INIT); ! = results_loop T0 (insert U ((I1,J1),IT)) [(I,J)|V] where [(K1,S1)] = regex "" "^\\+\\+\\+ Taskbutton: (\\([0-9]+,[0-9]+\\)) (.*)$" S *************** *** 3451,3455 **** IT:QtObject = make_gui taskbutton_gui (I1,J1) (TEXT,INIT); ! = results_loop (insert U ((I1,J1),IT)) [(I,J)|V] where [(K1,S1)] = regex "" "^\\+\\+\\+ Combobox: (\\([0-9]+,[0-9]+\\)) (.*)$" S --- 3467,3471 ---- IT:QtObject = make_gui taskbutton_gui (I1,J1) (TEXT,INIT); ! = results_loop T0 (insert U ((I1,J1),IT)) [(I,J)|V] where [(K1,S1)] = regex "" "^\\+\\+\\+ Combobox: (\\([0-9]+,[0-9]+\\)) (.*)$" S *************** *** 3457,3461 **** (I1,J1) = val K1, (SL,INIT) = val S1, IT:QtObject = make_gui combobox_gui (I1,J1) (SL,INIT); ! = results_loop (insert U ((I1,J1),IT)) [(I,J)|V] where [(K1,S1)] = regex "" "^\\+\\+\\+ Comboedit: (\\([0-9]+,[0-9]+\\)) (.*)$" S --- 3473,3477 ---- (I1,J1) = val K1, (SL,INIT) = val S1, IT:QtObject = make_gui combobox_gui (I1,J1) (SL,INIT); ! = results_loop T0 (insert U ((I1,J1),IT)) [(I,J)|V] where [(K1,S1)] = regex "" "^\\+\\+\\+ Comboedit: (\\([0-9]+,[0-9]+\\)) (.*)$" S *************** *** 3463,3467 **** (I1,J1) = val K1, (SL,INIT) = val S1, IT:QtObject = make_gui comboedit_gui (I1,J1) (SL,INIT); ! = results_loop (insert U ((I1,J1),IT)) [(I,J)|V] where [(K1,S1)] = regex "" "^\\+\\+\\+ Spinbox: (\\([0-9]+,[0-9]+\\)) (.*)$" S --- 3479,3483 ---- (I1,J1) = val K1, (SL,INIT) = val S1, IT:QtObject = make_gui comboedit_gui (I1,J1) (SL,INIT); ! = results_loop T0 (insert U ((I1,J1),IT)) [(I,J)|V] where [(K1,S1)] = regex "" "^\\+\\+\\+ Spinbox: (\\([0-9]+,[0-9]+\\)) (.*)$" S *************** *** 3471,3475 **** IT:QtObject = make_gui spinbox_gui (I1,J1) (MIN,MAX,STEP,INIT,SPECIAL,PREF,SUFF,V2T,T2V); ! = results_loop (insert U ((I1,J1),IT)) [(I,J)|V] where [(K1,S1)] = regex "" "^\\+\\+\\+ Slider: (\\([0-9]+,[0-9]+\\)) (.*)$" S --- 3487,3491 ---- IT:QtObject = make_gui spinbox_gui (I1,J1) (MIN,MAX,STEP,INIT,SPECIAL,PREF,SUFF,V2T,T2V); ! = results_loop T0 (insert U ((I1,J1),IT)) [(I,J)|V] where [(K1,S1)] = regex "" "^\\+\\+\\+ Slider: (\\([0-9]+,[0-9]+\\)) (.*)$" S *************** *** 3480,3491 **** (MIN,MAX,STEP,INIT,VERT); // anything else just gets passed to the digest function, and we try again ! = local (digest S) || results_loop U [(I,J)|V]; otherwise: /* No result yet. Process some pending GUI events, to give the user a chance to abort the computation. */ = do flag [(I,J)|V] ! if wait_cursor || local (qt APP "processEvents" 100) || ! get ABORTED; ! = results_loop U [(I,J)|V] otherwise; /* Note that we try the semaphore *two* times before we give up and hand it --- 3496,3507 ---- (MIN,MAX,STEP,INIT,VERT); // anything else just gets passed to the digest function, and we try again ! = local (digest S) || results_loop T0 U [(I,J)|V]; otherwise: /* No result yet. Process some pending GUI events, to give the user a chance to abort the computation. */ = do flag [(I,J)|V] ! if (if time-T0>=0.5 then wait_cursor) || ! local (qt APP "processEvents" 100) || get ABORTED; ! = results_loop T0 U [(I,J)|V] otherwise; /* Note that we try the semaphore *two* times before we give up and hand it *************** *** 3541,3545 **** doprocess (I,J) = insert_cells (I,J) || ! cell_setval (I,J) () || clear_cell (I,J) || // do the necessary reevaluations if check_interp then compute V --- 3557,3562 ---- doprocess (I,J) = insert_cells (I,J) || ! cell_setval (I,J) () || ! if is_gui_elem (I,J) then clear_cell (I,J) || // do the necessary reevaluations if check_interp then compute V *************** *** 3569,3578 **** process1 (I,J,S) ! = clear_cell (I,J) || insert_cells (I,J) || insert_eval (I,J;S,'X,DEPS) || cell_setval (I,J) () where ("=",S) = (hd S,trim (tl S)), 'X = parse S, DEPS = deps 'X; ! = clear_cell (I,J) || set_cell (I,J) S || insert_cells (I,J) || delete_eval (I,J) || cell_setval (I,J) () --- 3586,3596 ---- process1 (I,J,S) ! = if is_gui_elem (I,J) then clear_cell (I,J) || insert_cells (I,J) || insert_eval (I,J;S,'X,DEPS) || cell_setval (I,J) () where ("=",S) = (hd S,trim (tl S)), 'X = parse S, DEPS = deps 'X; ! = if is_gui_elem (I,J) then clear_cell (I,J) || ! set_cell (I,J) S || insert_cells (I,J) || delete_eval (I,J) || cell_setval (I,J) () *************** *** 3589,3602 **** if not null W and then check_interp; ! process2 (I,J,S) ! = cell_setval (I,J) () if is_qt_object S; ! = clear_cell (I,J) || insert_cells (I,J) || insert_eval (I,J;S,'X,DEPS) || ! cell_setval (I,J) () where ("=",S) = (hd S,trim (tl S)), 'X = parse S, DEPS = deps 'X; ! = clear_cell (I,J) || set_cell (I,J) S1 || cell_setval (I,J) S0 || ! insert_cells (I,J) || delete_eval (I,J) where S0 = cell_getval (I,J), (S0,S1) = if isstr S0 then unquote S else ((),S) --- 3607,3623 ---- if not null W and then check_interp; ! process2 CHK (I,J,S) ! = cell_setval (I,J) () || check_deps CHK (I,J) ! if is_qt_object S; ! = if is_gui_elem (I,J) then clear_cell (I,J) || insert_cells (I,J) || insert_eval (I,J;S,'X,DEPS) || ! cell_setval (I,J) () || check_deps CHK (I,J) where ("=",S) = (hd S,trim (tl S)), 'X = parse S, DEPS = deps 'X; ! = if is_gui_elem (I,J) then clear_cell (I,J) || ! set_cell (I,J) S1 || cell_setval (I,J) S0 || ! insert_cells (I,J) || delete_eval (I,J) || ! check_deps CHK (I,J) where S0 = cell_getval (I,J), (S0,S1) = if isstr S0 then unquote S else ((),S) *************** *** 3604,3617 **** = clear_cell (I,J) || delete_cells (I,J) || delete_eval (I,J) || ! cell_setval (I,J) () otherwise; process_sel2 W = if check_interp then compute V ! where //_ = printf "*** pending updates: %s\n" $ str W, ! _ = do process2 W, ! W = map (flip (flip sub 0) 1) W, // Exclude all toplevel GUI elements from this list // (unless they are triggered by other elements). V = eval_list (neg is_gui_elem) W if not null W and then check_interp; --- 3625,3644 ---- = clear_cell (I,J) || delete_cells (I,J) || delete_eval (I,J) || ! cell_setval (I,J) () || check_deps CHK (I,J) otherwise; + check_deps CHK (I,J) + = true if CHK; + = not null W where W:List = get XREF!(I,J); + = false otherwise; + process_sel2 W = if check_interp then compute V ! where W = map (flip (flip sub 0) 1) W, // Exclude all toplevel GUI elements from this list // (unless they are triggered by other elements). V = eval_list (neg is_gui_elem) W + if CHK + where //_ = printf "*** pending updates: %s\n" $ str W, + CHK = foldl process2 false W if not null W and then check_interp; Index: calclib.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/calclib.q,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -d -r1.40 -r1.41 *** calclib.q 18 Nov 2007 04:28:19 -0000 1.40 --- calclib.q 20 Nov 2007 18:58:28 -0000 1.41 *************** *** 135,155 **** indexarg 'X = (I,J) where (I,J) = cellindex 'X; ! setval KEY X = printf "\f+++ Update: %s %s\n" (str (I,J),str X) || flush || ! if member (get YYDATA) (I,J) then yyset (I,J) X else X ! where (I:Int,J:Int) = indexarg KEY; ! clearval KEY X = printf "\f+++ Clear: %s %s\n" (str (I,J),str X) || flush || ! if member (get YYDATA) (I,J) then yyset (I,J) X else X where (I:Int,J:Int) = indexarg KEY; ! // setval without flushing the output pipe, to speed up mass updates ! private setvaln KEY X; ! setvaln KEY X = printf "\f+++ Update: %s %s\n" (str (I,J),str X) || ! if member (get YYDATA) (I,J) then yyset (I,J) X else X where (I:Int,J:Int) = indexarg KEY; matrix KEY Xs:List ! = dowith setvaln Ks (cat Xs) || flush || Xs ! where Ks = [(I0+I,J0+J) : I in [0..N-1], J in [0..M-1]] if all islist Xs and then all ((=M).(#)) Xs where Ys:List = hd Xs, N = #Xs, M = #Ys --- 135,163 ---- indexarg 'X = (I,J) where (I,J) = cellindex 'X; ! private setvaln KEY X; ! setvaln (I,J) X = if member (get YYDATA) (I,J) then yyset (I,J) X else X; ! ! setval KEY X = printf "\f+++ Update: %s %s\n" (str (I,J),str X) || ! setvaln (I,J) X where (I:Int,J:Int) = indexarg KEY; ! clearval KEY X = printf "\f+++ Clear: %s %s\n" (str (I,J),str X) || ! setvaln (I,J) X where (I:Int,J:Int) = indexarg KEY; + private matrixn KEY DIM Xs, pairs I Js; + + matrixn (I0,J0) (N,M) Xs + = printf "\f+++ Matrix: %s\n" (str Ys) || + dowith setvaln Ks Xs || Xs + where Ks = cat $ map + (flip pairs [J0..J0+M-1]) [I0..I0+N-1], + Ys = zipwith append Ks $ map str Xs; + + pairs I Js = map (pair I) Js; + matrix KEY Xs:List ! = matrixn (I0,J0) (N,M) (cat Xs) || Xs if all islist Xs and then all ((=M).(#)) Xs where Ys:List = hd Xs, N = #Xs, M = #Ys *************** *** 157,165 **** rowvect KEY Xs:List ! = matrix (I0,J0) [Xs] || Xs where (I0:Int,J0:Int) = indexarg KEY; colvect KEY Xs:List ! = matrix (I0,J0) $ map (push []) Xs || Xs where (I0:Int,J0:Int) = indexarg KEY; --- 165,173 ---- rowvect KEY Xs:List ! = matrixn (I0,J0) (1,#Xs) Xs || Xs where (I0:Int,J0:Int) = indexarg KEY; colvect KEY Xs:List ! = matrixn (I0,J0) (#Xs,1) Xs || Xs where (I0:Int,J0:Int) = indexarg KEY; *************** *** 192,196 **** pushbutton (S:String,ICON:String) = printf "\f+++ Pushbutton: %s %s\n" ! (str (I,J),str (S,ICON)) || flush || false where (I,J) = get YYKEY; --- 200,204 ---- pushbutton (S:String,ICON:String) = printf "\f+++ Pushbutton: %s %s\n" ! (str (I,J),str (S,ICON)) || false where (I,J) = get YYKEY; *************** *** 201,205 **** togglebutton (S:String,ICON:String,INIT:Bool) = printf "\f+++ Togglebutton: %s %s\n" ! (str (I,J),str (S,ICON,INIT)) || flush || INIT where (I,J) = get YYKEY; --- 209,213 ---- togglebutton (S:String,ICON:String,INIT:Bool) = printf "\f+++ Togglebutton: %s %s\n" ! (str (I,J),str (S,ICON,INIT)) || INIT where (I,J) = get YYKEY; *************** *** 362,366 **** H:Thread = printf "\f+++ Taskbutton: %s %s\n" ! (str (I,J),str (S,INIT)) || flush || thread (begin_task (I,J,SEM) || do_task X (I,J,SEM) || end_task (I,J,SEM)); --- 370,374 ---- H:Thread = printf "\f+++ Taskbutton: %s %s\n" ! (str (I,J),str (S,INIT)) || thread (begin_task (I,J,SEM) || do_task X (I,J,SEM) || end_task (I,J,SEM)); *************** *** 402,406 **** /* Internals. */ ! yymain = setvbuf OUTPUT IOFBF || writes "\f+++ Ready.\n" || flush || yyloop; yyloop where S:String = reads: = yyloop where 'X = valq S, Y = catch yyerror X; --- 410,414 ---- /* Internals. */ ! yymain = writes "\f+++ Ready.\n" || flush || yyloop; yyloop where S:String = reads: = yyloop where 'X = valq S, Y = catch yyerror X; *************** *** 478,482 **** where (H,SEM,'_) = get YYTASKS!(I,J): // task is alive and kicking, update it with the new data ! = post SEM '(taskbutton (S,INIT) X) || INIT where 'X = subst 'X if isthread H and then active H; --- 486,493 ---- where (H,SEM,'_) = get YYTASKS!(I,J): // task is alive and kicking, update it with the new data ! = printf "\f+++ Taskbutton: %s %s\n" ! (str (I,J),str (S,INIT)) || ! printf "\f+++ Taskstate: %s 1\n" (str (I,J)) || flush || ! post SEM '(taskbutton (S,INIT) X) || INIT where 'X = subst 'X if isthread H and then active H; |
From: Albert G. <ag...@us...> - 2007-11-18 05:56:47
|
Update of /cvsroot/q-lang/qcalc/doc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv5928/doc Modified Files: qcalc.xml Log Message: update documentation Index: qcalc.xml =================================================================== RCS file: /cvsroot/q-lang/qcalc/doc/qcalc.xml,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** qcalc.xml 17 Nov 2007 13:23:54 -0000 1.17 --- qcalc.xml 18 Nov 2007 05:56:43 -0000 1.18 *************** *** 315,319 **** <para> ! These are convenience functions implemented in terms of <literal>setval</literal> to store a list in a matrix or a row or column vector of table cells. They return the given list value. For the <literal>matrix</literal> function, <literal>Xs</literal> must be a list of lists which are all of the same size; the component lists become the rows of the matrix. The <literal>rowvect</literal> and <literal>colvect</literal> routines create matrices with just one row or column for a given list of values, respectively. In any case the matrix or vector is inserted into the table starting at the given index <literal>KEY</literal> (given in any of the formats supported by <literal>setval</literal>). </para> --- 315,319 ---- <para> ! These are convenience functions implemented in terms of <literal>setval</literal> to store a list in a matrix or a row or column vector of table cells. They return the given list value. For the <literal>matrix</literal> function, <literal>Xs</literal> must be a list of lists which are all of the same size; the component lists become the rows of the matrix. The <literal>rowvect</literal> and <literal>colvect</literal> routines create matrices with just one row or column for a given list of values, respectively. In any case the matrix or vector is inserted into the table starting at the given index <literal>KEY</literal> (given in any of the formats supported by <literal>setval</literal>). NOTE: For updating a large number of cells, these operations work <emphasis>much</emphasis> faster than calling <literal>setval</literal> individually on each cell. </para> |
From: Albert G. <ag...@us...> - 2007-11-18 05:49:18
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv5416 Modified Files: qcalc.q Log Message: bugfixes Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.167 retrieving revision 1.168 diff -C2 -d -r1.167 -r1.168 *** qcalc.q 18 Nov 2007 05:22:22 -0000 1.167 --- qcalc.q 18 Nov 2007 05:49:12 -0000 1.168 *************** *** 2807,2812 **** if C = "MyComboEdit"; = // confine the value to the given range and step size ! if Y<>Y0 then recursive (qt X "setValue" Y) || ! process_gui2 (I,J) X || digest_loop where Y0 = qt X "value" (), MIN = qt X "minValue" (), --- 2807,2811 ---- if C = "MyComboEdit"; = // confine the value to the given range and step size ! if Y<>Y0 then qt X "setValue" Y where Y0 = qt X "value" (), MIN = qt X "minValue" (), |
From: Albert G. <ag...@us...> - 2007-11-18 05:22:26
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv841 Modified Files: qcalc.q Log Message: bugfix: must queue user interactions with GUI elements during evaluations for later processing Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.166 retrieving revision 1.167 diff -C2 -d -r1.166 -r1.167 *** qcalc.q 18 Nov 2007 03:55:03 -0000 1.166 --- qcalc.q 18 Nov 2007 05:22:22 -0000 1.167 *************** *** 721,724 **** --- 721,747 ---- if N < 5; + /* Queue GUI updates for later processing during evaluations. */ + + def GUIQ = ref []; + + queue_update (I,J) + = GUIQ := [(I,J)|get GUIQ]; + + do_queued_updates + if not null (get GUIQ): + = GUIQ := [] || + dowith gui_action (map gui_elem Q) Q || + process_sel2 W + where Q = nub $ sort indexcmp $ get GUIQ, + W = zipwith append Q (map (get CELLS!) Q) + if get STATE = 4; + = GUIQ := [] otherwise; + otherwise: = (); + + nub [] = []; + nub [X] = [X]; + nub [X,X|Xs] = nub [X|Xs]; + nub [X,Y|Xs] = [X|nub [Y|Xs]] otherwise; + /* Timer processing. */ *************** *** 752,755 **** --- 775,779 ---- digest_loop = digest S || digest_loop where S = get MSGS if #MSGS>0; + = do_queued_updates otherwise; /* State of the inferior Q process: 0 = uninitialized or exited, 1 = *************** *** 1169,1172 **** --- 1193,1200 ---- gui_elem (I,J); = (); + where (I,J) = real_index (I,J) + if not is_global and then not is_recursive: + = queue_update (I,J) if is_gui_elem (I,J); + = (); /* FIXME: If we created a GUI object in the edited cell, it will be destroyed *************** *** 1251,1257 **** gui_update X (I,J) _ where (I,J) = real_index (I,J) ! if is_global and then not is_recursive and then not is_nil X: = if (I,J)<>real_current_cell then set_current_cell (I,J) || ! process_gui2 (I,J) X || digest_loop; check_editing = EDITED := true || --- 1279,1287 ---- gui_update X (I,J) _ where (I,J) = real_index (I,J) ! if not is_recursive and then not is_nil X: = if (I,J)<>real_current_cell then set_current_cell (I,J) || ! process_gui2 (I,J) X || digest_loop ! if is_global; ! = queue_update (I,J) otherwise; check_editing = EDITED := true || |
From: Albert G. <ag...@us...> - 2007-11-18 04:28:22
|
Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv9907 Modified Files: calclib.q Log Message: use fully buffered output and explicit flushes to speed up mass cell updates with the matrix function Index: calclib.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/calclib.q,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -d -r1.39 -r1.40 *** calclib.q 18 Nov 2007 03:55:03 -0000 1.39 --- calclib.q 18 Nov 2007 04:28:19 -0000 1.40 *************** *** 123,127 **** message S:String ! = printf "\f+++ Message: %s\n" (str S); /* setval and friends. */ --- 123,127 ---- message S:String ! = printf "\f+++ Message: %s\n" (str S) || flush; /* setval and friends. */ *************** *** 135,148 **** indexarg 'X = (I,J) where (I,J) = cellindex 'X; ! setval KEY X = printf "\f+++ Update: %s %s\n" (str (I,J),str X) || if member (get YYDATA) (I,J) then yyset (I,J) X else X where (I:Int,J:Int) = indexarg KEY; ! clearval KEY X = printf "\f+++ Clear: %s %s\n" (str (I,J),str X) || if member (get YYDATA) (I,J) then yyset (I,J) X else X where (I:Int,J:Int) = indexarg KEY; matrix KEY Xs:List ! = dowith setval Ks (cat Xs) || Xs where Ks = [(I0+I,J0+J) : I in [0..N-1], J in [0..M-1]] if all islist Xs and then all ((=M).(#)) Xs --- 135,154 ---- indexarg 'X = (I,J) where (I,J) = cellindex 'X; ! setval KEY X = printf "\f+++ Update: %s %s\n" (str (I,J),str X) || flush || if member (get YYDATA) (I,J) then yyset (I,J) X else X where (I:Int,J:Int) = indexarg KEY; ! clearval KEY X = printf "\f+++ Clear: %s %s\n" (str (I,J),str X) || flush || ! if member (get YYDATA) (I,J) then yyset (I,J) X else X ! where (I:Int,J:Int) = indexarg KEY; ! ! // setval without flushing the output pipe, to speed up mass updates ! private setvaln KEY X; ! setvaln KEY X = printf "\f+++ Update: %s %s\n" (str (I,J),str X) || if member (get YYDATA) (I,J) then yyset (I,J) X else X where (I:Int,J:Int) = indexarg KEY; matrix KEY Xs:List ! = dowith setvaln Ks (cat Xs) || flush || Xs where Ks = [(I0+I,J0+J) : I in [0..N-1], J in [0..M-1]] if all islist Xs and then all ((=M).(#)) Xs *************** *** 164,168 **** checkbox (S:String,INIT:Bool) = printf "\f+++ Checkbox: %s %s\n" (str (I,J),str (S,INIT)) || ! INIT where (I,J) = get YYKEY; --- 170,174 ---- checkbox (S:String,INIT:Bool) = printf "\f+++ Checkbox: %s %s\n" (str (I,J),str (S,INIT)) || ! flush || INIT where (I,J) = get YYKEY; *************** *** 170,174 **** combobox (L:List,INIT:String) = printf "\f+++ Combobox: %s %s\n" (str (I,J),str (L,INIT)) || ! INIT if all isstr L where (I,J) = get YYKEY; --- 176,180 ---- combobox (L:List,INIT:String) = printf "\f+++ Combobox: %s %s\n" (str (I,J),str (L,INIT)) || ! flush || INIT if all isstr L where (I,J) = get YYKEY; *************** *** 178,182 **** comboedit (L:List,INIT:String) = printf "\f+++ Comboedit: %s %s\n" (str (I,J),str (L,INIT)) || ! INIT if all isstr L where (I,J) = get YYKEY; --- 184,188 ---- comboedit (L:List,INIT:String) = printf "\f+++ Comboedit: %s %s\n" (str (I,J),str (L,INIT)) || ! flush || INIT if all isstr L where (I,J) = get YYKEY; *************** *** 186,190 **** pushbutton (S:String,ICON:String) = printf "\f+++ Pushbutton: %s %s\n" ! (str (I,J),str (S,ICON)) || false where (I,J) = get YYKEY; --- 192,196 ---- pushbutton (S:String,ICON:String) = printf "\f+++ Pushbutton: %s %s\n" ! (str (I,J),str (S,ICON)) || flush || false where (I,J) = get YYKEY; *************** *** 195,199 **** togglebutton (S:String,ICON:String,INIT:Bool) = printf "\f+++ Togglebutton: %s %s\n" ! (str (I,J),str (S,ICON,INIT)) || INIT where (I,J) = get YYKEY; --- 201,205 ---- togglebutton (S:String,ICON:String,INIT:Bool) = printf "\f+++ Togglebutton: %s %s\n" ! (str (I,J),str (S,ICON,INIT)) || flush || INIT where (I,J) = get YYKEY; *************** *** 217,221 **** = printf "\f+++ Slider: %s %s\n" (str (I,J),str (MIN,MAX,STEP,INIT,VERT)) || ! INIT where (I,J) = get YYKEY; --- 223,227 ---- = printf "\f+++ Slider: %s %s\n" (str (I,J),str (MIN,MAX,STEP,INIT,VERT)) || ! flush || INIT where (I,J) = get YYKEY; *************** *** 301,305 **** (str (I,J), str (MIN,MAX,STEP,INIT,SPECIAL,PREF,SUFF,V2T,T2V)) || ! INIT where (I,J) = get YYKEY; --- 307,311 ---- (str (I,J), str (MIN,MAX,STEP,INIT,SPECIAL,PREF,SUFF,V2T,T2V)) || ! flush || INIT where (I,J) = get YYKEY; *************** *** 316,320 **** printf "\f+++ Actionbutton: %s %s\n" (str (I,J),str (S,ICON,str INIT)) || ! yyset (I,J) INIT || INIT where (I,J) = get YYKEY; --- 322,326 ---- printf "\f+++ Actionbutton: %s %s\n" (str (I,J),str (S,ICON,str INIT)) || ! flush || yyset (I,J) INIT || INIT where (I,J) = get YYKEY; *************** *** 356,360 **** H:Thread = printf "\f+++ Taskbutton: %s %s\n" ! (str (I,J),str (S,INIT)) || thread (begin_task (I,J,SEM) || do_task X (I,J,SEM) || end_task (I,J,SEM)); --- 362,366 ---- H:Thread = printf "\f+++ Taskbutton: %s %s\n" ! (str (I,J),str (S,INIT)) || flush || thread (begin_task (I,J,SEM) || do_task X (I,J,SEM) || end_task (I,J,SEM)); *************** *** 396,400 **** /* Internals. */ ! yymain = writes "\f+++ Ready.\n" || flush || yyloop; yyloop where S:String = reads: = yyloop where 'X = valq S, Y = catch yyerror X; --- 402,406 ---- /* Internals. */ ! yymain = setvbuf OUTPUT IOFBF || writes "\f+++ Ready.\n" || flush || yyloop; yyloop where S:String = reads: = yyloop where 'X = valq S, Y = catch yyerror X; |