1.1 --- a/src/java/isac/util/parser/XMLParserDigest.java Fri Feb 04 14:22:17 2005 +0100
1.2 +++ b/src/java/isac/util/parser/XMLParserDigest.java Fri Feb 04 14:22:17 2005 +0100
1.3 @@ -12,8 +12,7 @@
1.4 import isac.util.formulae.CalcHeadItemList;
1.5 import isac.util.formulae.CalcHeadSimpleID;
1.6 import isac.util.formulae.Formula;
1.7 -import isac.util.formulae.PosFormHeadContainer;
1.8 -import isac.util.formulae.PosFormula;
1.9 +import isac.util.formulae.CalcFormula;
1.10 import isac.util.formulae.Position;
1.11 import isac.util.formulae.Specification;
1.12 import isac.util.tactics.Rewrite;
1.13 @@ -109,7 +108,6 @@
1.14 e.printStackTrace();
1.15 }
1.16
1.17 - //TODO.WN0501: separate parsing of MATHML from below
1.18 // Rules for the digester to create Objects and fill them from XML-Files
1.19 digester.addObjectCreate("ISAC", ResponseWrapper.class);
1.20 digester.addObjectCreate("*/CALCID", CalcHeadSimpleID.class);
1.21 @@ -120,10 +118,9 @@
1.22 digester.addObjectCreate("*/POSITION", Position.class);
1.23 digester.addCallMethod("*/POSITION/INTLIST/INT", "addInt", 0);
1.24 digester.addCallMethod("*/POSITION/POS", "setKind", 0);
1.25 - digester.addSetNext("*/POSITION", "setPosition");//to the wrapper !
1.26 + digester.addSetNext("*/POSITION", "setPosition");//to the wrapper, too !
1.27
1.28 - // Rules for parsing Position: TODO.WN0501 redundant ...
1.29 - // TODO.WN0501 drop UNCHANGED, DELETED, GENERATED by redesign !!!
1.30 + // 3 different Positions in CalcChangedEvent
1.31 digester.addObjectCreate("*/UNCHANGED", Position.class);
1.32 digester.addCallMethod("*/UNCHANGED/INTLIST/INT", "addInt", 0);
1.33 digester.addCallMethod("*/UNCHANGED/POS", "setKind", 0);
1.34 @@ -143,10 +140,15 @@
1.35 // digester.addObjectCreate("*/REFFORMULA/FORMULA", Formula.class);
1.36 // digester.addCallMethod("*/REFFORMULA/FORMULA/MATHML/ISA", "setText", 0);
1.37 // digester.addSetNext("*/REFFORMULA/FORMULA", "setResponse");
1.38 - digester.addObjectCreate("*/FORMULA", Formula.class);
1.39 + digester.addObjectCreate("*/FORMULA", CalcFormula.class);
1.40 digester.addCallMethod("*/FORMULA/MATHML/ISA", "setText", 0);
1.41 - digester.addSetNext("*/POSFORMHEADS/FORMULA", "add");//MUST be before
1.42 - digester.addSetNext("*/FORMULA", "setResponse");//.....MUST be after
1.43 + digester.addSetNext("*/FORMULA", "setResponse");
1.44 +
1.45 +
1.46 +// digester.addObjectCreate("*/FORMULA", Formula.class);
1.47 +// digester.addCallMethod("*/FORMULA/MATHML/ISA", "setText", 0);
1.48 +// digester.addSetNext("*/POSFORMHEADS/FORMULA", "add");//MUST be before
1.49 +// digester.addSetNext("*/FORMULA", "setResponse");//.....MUST be after
1.50
1.51 // Rules for parsing CalcHead
1.52 digester.addObjectCreate("*/CALCHEAD", CalcHead.class);
1.53 @@ -280,13 +282,14 @@
1.54 "*/APPLICABLETACTICS/TACLIST", TacticsContainer.class);
1.55 digester.addSetNext("*/APPLICABLETACTICS/TACLIST", "setResponse");
1.56
1.57 - // Rules for parsing getElementsFromTo, copy from RG.fetchApplicableTactics
1.58 - digester.addObjectCreate(
1.59 - "*/GETELEMENTSFROMTO/POSFORMHEADS", PosFormHeadContainer.class);
1.60 -//GOON
1.61 +// // Rules for parsing getElementsFromTo, copy from RG.fetchApplicableTactics
1.62 // digester.addObjectCreate(
1.63 -// "*/GETELEMENTSFROMTO/POSFORMHEADS/POSFORM", PosFormula.class);
1.64 - digester.addSetNext("*/GETELEMENTSFROMTO/POSFORMHEADS", "setResponse");
1.65 +// "*/GETELEMENTSFROMTO/POSFORMHEADS", PosFormHeadContainer.class);
1.66 +////GOON
1.67 +//// digester.addObjectCreate(
1.68 +//// "*/GETELEMENTSFROMTO/POSFORMHEADS/POSFORM", PosFormula.class);
1.69 +// digester.addSetNext("*/GETELEMENTSFROMTO/POSFORMHEADS", "setResponse");
1.70 +
1.71 }
1.72
1.73 private void addItemList(Digester digester, String modPart) {
2.1 --- a/src/java/isac/util/tactics/Tactic.java Fri Feb 04 14:22:17 2005 +0100
2.2 +++ b/src/java/isac/util/tactics/Tactic.java Fri Feb 04 14:22:17 2005 +0100
2.3 @@ -7,7 +7,7 @@
2.4 package isac.util.tactics;
2.5
2.6 import isac.util.formulae.CalcElement;
2.7 -import isac.util.formulae.Formula;
2.8 +import isac.util.formulae.CalcFormula;
2.9
2.10 /**
2.11 * @author Alan Krempler (method stubs)
2.12 @@ -38,23 +38,23 @@
2.13 return "";
2.14 }
2.15
2.16 - public Formula getTheoremSymbolic() {
2.17 - Formula dummy;
2.18 - dummy = new Formula();
2.19 + public CalcFormula getTheoremSymbolic() {
2.20 + CalcFormula dummy;
2.21 + dummy = new CalcFormula();
2.22 return dummy;
2.23 }
2.24
2.25 - public Formula getTheoremInstantiated(Formula formula) {
2.26 - Formula dummy;
2.27 - dummy = new Formula();
2.28 + public CalcFormula getTheoremInstantiated(CalcFormula formula) {
2.29 + CalcFormula dummy;
2.30 + dummy = new CalcFormula();
2.31 return dummy;
2.32 }
2.33
2.34 // pattern could be stored with the Tactic object WN040820 shift to ???
2.35 // itself and selected by passing an integer
2.36 - public Formula makeFillFormula(Formula formula, String pattern) {
2.37 - Formula dummy;
2.38 - dummy = new Formula();
2.39 + public CalcFormula makeFillFormula(CalcFormula formula, String pattern) {
2.40 + CalcFormula dummy;
2.41 + dummy = new CalcFormula();
2.42 return dummy;
2.43 }
2.44
3.1 --- a/src/java/isac/wsdialog/DialogGuide.java Fri Feb 04 14:22:17 2005 +0100
3.2 +++ b/src/java/isac/wsdialog/DialogGuide.java Fri Feb 04 14:22:17 2005 +0100
3.3 @@ -269,7 +269,7 @@
3.4 * @throws RemoteException
3.5 * @deprecated Use {@link #notifyUserAction(IUserAction)}instead
3.6 */
3.7 - public int replaceFormula(Formula newFormula) throws RemoteException {
3.8 + public int replaceFormula(CalcFormula newFormula) throws RemoteException {
3.9 return calc_tree_.replaceFormula(newFormula);
3.10 }
3.11
3.12 @@ -277,7 +277,7 @@
3.13 * @throws RemoteException
3.14 * @deprecated Use {@link #notifyUserAction(IUserAction)}instead
3.15 */
3.16 - public int appendFormula(Formula newFormula) throws RemoteException {
3.17 + public int appendFormula(CalcFormula newFormula) throws RemoteException {
3.18 return calc_tree_.appendFormula(newFormula);
3.19 }
3.20
3.21 @@ -406,7 +406,7 @@
3.22 break;
3.23
3.24 case UI_SOLVE_EDIT_ACTIVE_FORMULA_COMPLETE:
3.25 - Formula formula = (Formula) ((UserActionOnCalcElement) action)
3.26 + CalcFormula formula = (CalcFormula) ((UserActionOnCalcElement) action)
3.27 .getCalcElement();
3.28 // if the position is null, the formula did not exist, so we try to append a new formula
3.29 if (formula.getPosition()== null) {
4.1 --- a/src/java/isac/wsdialog/DialogIterator.java Fri Feb 04 14:22:17 2005 +0100
4.2 +++ b/src/java/isac/wsdialog/DialogIterator.java Fri Feb 04 14:22:17 2005 +0100
4.3 @@ -12,7 +12,7 @@
4.4 import isac.bridge.CalcIterator;
4.5 import isac.util.formulae.Assumption;
4.6 import isac.util.formulae.CalcHead;
4.7 -import isac.util.formulae.Formula;
4.8 +import isac.util.formulae.CalcFormula;
4.9 import isac.util.formulae.Position;
4.10 import isac.util.interfaces.ICalcElement;
4.11 import isac.util.interfaces.ICalcIterator;
5.1 --- a/src/sml/FE-interface/interface.sml Fri Feb 04 14:22:17 2005 +0100
5.2 +++ b/src/sml/FE-interface/interface.sml Fri Feb 04 14:22:17 2005 +0100
5.3 @@ -280,7 +280,10 @@
5.4
5.5
5.6
5.7 -
5.8 +(*. see ICalcIterator#fetchApplicableTactics
5.9 + @see #TACTICS_ALL
5.10 + @see #TACTICS_CURRENT_THEORY
5.11 + @see #TACTICS_CURRENT_METHOD ..the only impl.WN.040307.*)
5.12 fun fetchApplicableTactics cI scope =
5.13 let val ((pt, _), _) = get_calc cI
5.14 val p = get_pos cI 1
6.1 --- a/src/sml/systest/FE-interface.sml Fri Feb 04 14:22:17 2005 +0100
6.2 +++ b/src/sml/systest/FE-interface.sml Fri Feb 04 14:22:17 2005 +0100
6.3 @@ -853,11 +853,12 @@
6.4 ["Test","squ-equ-test-subpbl1"]))];
6.5 Iterator 1; moveActiveRoot 1;
6.6 autoCalculate 1 CompleteCalc;
6.7 - fetchApplicableTactics 1 3 (*the only one impl.WN.040307*);
6.8 + fetchApplicableTactics 1 3
6.9 + (*TACTICS_CURRENT_METHOD^^^ the only one impl.WN.040307*);
6.10 moveActiveUp 1;
6.11 moveActiveUp 1;
6.12 moveActiveUp 1;
6.13 - fetchApplicableTactics 1 3 (*the only one impl.WN.040307*);
6.14 + fetchApplicableTactics 1 3;
6.15
6.16
6.17 "--------- arbitrary combinations of steps -----------------------";
7.1 --- a/src/sml/systest/me.sml Fri Feb 04 14:22:17 2005 +0100
7.2 +++ b/src/sml/systest/me.sml Fri Feb 04 14:22:17 2005 +0100
7.3 @@ -227,96 +227,96 @@
7.4 "-------------- getElementsFromTo --------------------------------";
7.5 getElementsFromTo 1 ([4, 2], Res) ([4, 4], Pbl) 000;
7.6 (*
7.7 -"@@@@@begin@@@@@" //..................................................................................................
7.8 -+ " 1" //..................................................................................................
7.9 -+ "<GETINTERVAL>" //..................................................................................................
7.10 -+ " <CALCID> 1 </CALCID>" //..................................................................................................
7.11 -+ " <POSFORMHEADS>" //..................................................................................................
7.12 -+ " <POSFORM>" //..................................................................................................
7.13 -+ " <GENERATED>" //..................................................................................................
7.14 -+ " <INTLIST>" //..................................................................................................
7.15 -+ " <INT> 4 </INT>" //..................................................................................................
7.16 -+ " <INT> 3 </INT>" //..................................................................................................
7.17 -+ " </INTLIST>" //..................................................................................................
7.18 -+ " <POS> Res </POS>" //..................................................................................................
7.19 -+ " </GENERATED>" //..................................................................................................
7.20 -+ " <FORMULA>" //..................................................................................................
7.21 -+ " <MATHML>" //..................................................................................................
7.22 -+ " <ISA> -6 * x + 5 * x ^^^ 2 = 0 </ISA>" //.............................................................................
7.23 -+ " </MATHML>" //..................................................................................................
7.24 -+ " </FORMULA>" //..................................................................................................
7.25 -+ " </POSFORM>" //..................................................................................................
7.26 -+ " <POSHEAD>" //..................................................................................................
7.27 -+ " <GENERATED>" //..................................................................................................
7.28 -+ " <INTLIST>" //..................................................................................................
7.29 -+ " <INT> 4 </INT>" //..................................................................................................
7.30 -+ " <INT> 4 </INT>" //..................................................................................................
7.31 -+ " </INTLIST>" //..................................................................................................
7.32 -+ " <POS> Pbl </POS>" //..................................................................................................
7.33 -+ " </GENERATED>" //..................................................................................................
7.34 -+ " <CALCHEAD status = "correct">" //......................................................................................
7.35 -+ " <HEAD>" //..................................................................................................
7.36 -+ " <MATHML>" //..................................................................................................
7.37 -+ " <ISA> solve (-6 * x + 5 * x ^^^ 2 = 0, x) </ISA>" //............................................................
7.38 -+ " </MATHML>" //..................................................................................................
7.39 -+ " </HEAD>" //..................................................................................................
7.40 -+ " <MODEL>" //..................................................................................................
7.41 -+ " <GIVEN>" //..................................................................................................
7.42 -+ " <ITEM status="correct">" //................................................................................
7.43 -+ " <MATHML>" //..................................................................................................
7.44 -+ " <ISA> equality (-6 * x + 5 * x ^^^ 2 = 0) </ISA>" //...................................................
7.45 -+ " </MATHML>" //..................................................................................................
7.46 -+ " </ITEM>" //..................................................................................................
7.47 -+ " <ITEM status="correct">" //....................................................................
7.48 -+ " <MATHML>" //..................................................................................................
7.49 -+ " <ISA> solveFor x </ISA>" //.......................................................................
7.50 -+ " </MATHML>" //..................................................................................................
7.51 -+ " </ITEM>" //..................................................................................................
7.52 -+ " </GIVEN>" //..................................................................................................
7.53 -+ " <WHERE>" //..................................................................................................
7.54 -+ " <ITEM status="correct">" //...............................................................................
7.55 -+ " <MATHML>" //..................................................................................................
7.56 -+ " <ISA> matches (?a * ?v_ + ?v_ ^^^ 2 = 0) (-6 * x + 5 * x ^^^ 2 = 0) |" //.................................
7.57 -+ "matches (?v_ + ?v_ ^^^ 2 = 0) (-6 * x + 5 * x ^^^ 2 = 0) |" //...................................................
7.58 -+ "matches (?v_ + ?b * ?v_ ^^^ 2 = 0) (-6 * x + 5 * x ^^^ 2 = 0) |" //...................................................
7.59 -+ "matches (?a * ?v_ + ?b * ?v_ ^^^ 2 = 0) (-6 * x + 5 * x ^^^ 2 = 0) |" //...................................................
7.60 -+ "matches (?v_ ^^^ 2 = 0) (-6 * x + 5 * x ^^^ 2 = 0) |" //...................................................
7.61 -+ "matches (?b * ?v_ ^^^ 2 = 0) (-6 * x + 5 * x ^^^ 2 = 0) </ISA>" //...................................................
7.62 -+ " </MATHML>" //..................................................................................................
7.63 -+ " </ITEM>" //..................................................................................................
7.64 -+ " </WHERE>" //..................................................................................................
7.65 -+ " <FIND>" //..................................................................................................
7.66 -+ " <ITEM status="correct">" //.......................................................................................
7.67 -+ " <MATHML>" //..................................................................................................
7.68 -+ " <ISA> solutions x_i </ISA>" //..................................................................
7.69 -+ " </MATHML>" //..................................................................................................
7.70 -+ " </ITEM>" //..................................................................................................
7.71 -+ " </FIND>" //..................................................................................................
7.72 -+ " <RELATE> </RELATE>" //..................................................................................................
7.73 -+ " </MODEL>" //..................................................................................................
7.74 -+ " <BELONGSTO> Pbl </BELONGSTO>" //....................................................................................
7.75 -+ " <SPECIFICATION>" //..................................................................................................
7.76 -+ " <THEORYID> PolyEq.thy </THEORYID>" //..............................................................................
7.77 -+ " <PROBLEMID>" //..................................................................................................
7.78 -+ " <STRINGLIST>" //..................................................................................................
7.79 -+ " <STRING> bdv_only </STRING>" //..........................................................................
7.80 -+ " <STRING> degree_2 </STRING>" //................................................................................
7.81 -+ " <STRING> polynomial </STRING>" //.............................................................................
7.82 -+ " <STRING> univariate </STRING>" //..............................................................................
7.83 -+ " <STRING> equation </STRING>" //..........................................................................
7.84 -+ " </STRINGLIST>" //..................................................................................................
7.85 -+ " </PROBLEMID>" //..................................................................................................
7.86 -+ " <METHODID>" //..................................................................................................
7.87 -+ " <STRINGLIST>" //..................................................................................................
7.88 -+ " <STRING> PolyEq </STRING>" //............................................................................
7.89 -+ " <STRING> solve_d2_polyeq_bdvonly_equation </STRING>" //...................................................
7.90 -+ " </STRINGLIST>" //..................................................................................................
7.91 -+ " </METHODID>" //..................................................................................................
7.92 -+ " </SPECIFICATION>" //..................................................................................................
7.93 -+ " </CALCHEAD>" //..................................................................................................
7.94 -+ " </POSHEAD>" //..................................................................................................
7.95 -+ " <POSFORMHEADS>" //..................................................................................................
7.96 -+ "</GETINTERVAL>" //..................................................................................................
7.97 +"@@@@@begin@@@@@" //...................................................
7.98 ++ " 1" //..............................................................
7.99 ++ "<GETELEMENTSFROMTO>" //...................................................
7.100 ++ " <CALCID> 1 </CALCID>" //..........................................
7.101 ++ " <POSFORMHEADS>" //................................................
7.102 ++ " <POSFORM>" //...................................................
7.103 ++ " <GENERATED>" //...............................................
7.104 ++ " <INTLIST>" //...............................................
7.105 ++ " <INT> 4 </INT>" //........................................
7.106 ++ " <INT> 3 </INT>" //........................................
7.107 ++ " </INTLIST>" //..............................................
7.108 ++ " <POS> Res </POS>" //........................................
7.109 ++ " </GENERATED>" //..............................................
7.110 ++ " <FORMULA>" //.................................................
7.111 ++ " <MATHML>" //................................................
7.112 ++ " <ISA> -6 * x + 5 * x ^^^ 2 = 0 </ISA>" //.................
7.113 ++ " </MATHML>" //...............................................
7.114 ++ " </FORMULA>" //................................................
7.115 ++ " </POSFORM>" //..................................................
7.116 ++ " <POSHEAD>" //...................................................
7.117 ++ " <GENERATED>" //...............................................
7.118 ++ " <INTLIST>" //...............................................
7.119 ++ " <INT> 4 </INT>" //........................................
7.120 ++ " <INT> 4 </INT>" //........................................
7.121 ++ " </INTLIST>" //..............................................
7.122 ++ " <POS> Pbl </POS>" //........................................
7.123 ++ " </GENERATED>" //..............................................
7.124 ++ " <CALCHEAD status = "correct">" //.............................
7.125 ++ " <HEAD>" //...................................................
7.126 ++ " <MATHML>" //...............................................
7.127 ++ " <ISA> solve (-6 * x + 5 * x ^^^ 2 = 0, x) </ISA>" //.....
7.128 ++ " </MATHML>" //..............................................
7.129 ++ " </HEAD>" //..................................................
7.130 ++ " <MODEL>" //.................................................
7.131 ++ " <GIVEN>" //...............................................
7.132 ++ " <ITEM status="correct">" //.............................
7.133 ++ " <MATHML>" //..........................................
7.134 ++ " <ISA> equality (-6 * x + 5 * x ^^^ 2 = 0) </ISA>" //
7.135 ++ " </MATHML>" //.........................................
7.136 ++ " </ITEM>" //.............................................
7.137 ++ " <ITEM status="correct">" //.............................
7.138 ++ " <MATHML>" //..........................................
7.139 ++ " <ISA> solveFor x </ISA>" //.........................
7.140 ++ " </MATHML>" //.........................................
7.141 ++ " </ITEM>" //.............................................
7.142 ++ " </GIVEN>" //..............................................
7.143 ++ " <WHERE>" //...............................................
7.144 ++ " <ITEM status="correct">" //.............................
7.145 ++ " <MATHML>" //..........................................
7.146 ++ " <ISA> matches (?a * ?v_ + ?v_ ^^^ 2 = 0) (-6 * x + 5 * x ^^^ 2 = 0) |"
7.147 ++ "matches (?v_ + ?v_ ^^^ 2 = 0) (-6 * x + 5 * x ^^^ 2 = 0) |" //......
7.148 ++ "matches (?v_ + ?b * ?v_ ^^^ 2 = 0) (-6 * x + 5 * x ^^^ 2 = 0) |"
7.149 ++ "matches (?a * ?v_ + ?b * ?v_ ^^^ 2 = 0) (-6 * x + 5 * x ^^^ 2 = 0) |"
7.150 ++ "matches (?v_ ^^^ 2 = 0) (-6 * x + 5 * x ^^^ 2 = 0) |" //............
7.151 ++ "matches (?b * ?v_ ^^^ 2 = 0) (-6 * x + 5 * x ^^^ 2 = 0) </ISA>" //..
7.152 ++ " </MATHML>" //.........................................
7.153 ++ " </ITEM>" //.............................................
7.154 ++ " </WHERE>" //..............................................
7.155 ++ " <FIND>" //................................................
7.156 ++ " <ITEM status="correct">" //.............................
7.157 ++ " <MATHML>" //..........................................
7.158 ++ " <ISA> solutions x_i </ISA>" //......................
7.159 ++ " </MATHML>" //.........................................
7.160 ++ " </ITEM>" //.............................................
7.161 ++ " </FIND>" //...............................................
7.162 ++ " <RELATE> </RELATE>" //...................................
7.163 ++ " </MODEL>" //................................................
7.164 ++ " <BELONGSTO> Pbl </BELONGSTO>" //............................
7.165 ++ " <SPECIFICATION>" //.........................................
7.166 ++ " <THEORYID> PolyEq.thy </THEORYID>" //.....................
7.167 ++ " <PROBLEMID>" //...........................................
7.168 ++ " <STRINGLIST>" //........................................
7.169 ++ " <STRING> bdv_only </STRING>" //.......................
7.170 ++ " <STRING> degree_2 </STRING>" //.......................
7.171 ++ " <STRING> polynomial </STRING>" //.....................
7.172 ++ " <STRING> univariate </STRING>" //.....................
7.173 ++ " <STRING> equation </STRING>" //.......................
7.174 ++ " </STRINGLIST>" //.......................................
7.175 ++ " </PROBLEMID>" //..........................................
7.176 ++ " <METHODID>" //............................................
7.177 ++ " <STRINGLIST>" //........................................
7.178 ++ " <STRING> PolyEq </STRING>" //.........................
7.179 ++ " <STRING> solve_d2_polyeq_bdvonly_equation </STRING>"
7.180 ++ " </STRINGLIST>" //.......................................
7.181 ++ " </METHODID>" //...........................................
7.182 ++ " </SPECIFICATION>" //........................................
7.183 ++ " </CALCHEAD>" //...............................................
7.184 ++ " </POSHEAD>" //..................................................
7.185 ++ " <POSFORMHEADS>" //................................................
7.186 ++ "</GETELEMENTSFROMTO>" //..................................................
7.187 + "@@@@@end@@@@@"
7.188 *)
7.189
8.1 --- a/src/sml/xmlsrc/interface-xml.sml Fri Feb 04 14:22:17 2005 +0100
8.2 +++ b/src/sml/xmlsrc/interface-xml.sml Fri Feb 04 14:22:17 2005 +0100
8.3 @@ -105,12 +105,12 @@
8.4
8.5 fun getintervalOK (cI:calcID) fs =
8.6 writeln ("@@@@@begin@@@@@\n "^string_of_int cI^" \n\
8.7 - \<GETINTERVAL>\n\
8.8 + \<GETELEMENTSFROMTO>\n\
8.9 \ <CALCID> "^string_of_int cI^" </CALCID>\n\
8.10 \ <POSFORMHEADS>\n"^
8.11 posformheads2xml (2*i) fs^
8.12 " <POSFORMHEADS>\n\
8.13 - \</GETINTERVAL>\n\
8.14 + \</GETELEMENTSFROMTO>\n\
8.15 \@@@@@end@@@@@");
8.16
8.17