JESS: [EXTERNAL] Problems with fuzzy jess implementations
Martín Rodríguez <[email protected]> Tue, 2 Jul 2013 23:44:32 -0300
| Newsgroups | gmane.comp.java.jess |
|---|---|
| Message-ID | <CAJoi6TKDF2ikTnLG7nC8TgWoRS2jnmnWk1r9+_7dcosQwV7RxQ@mail.gmail.com> |
--047d7b5d47b803119304e09271c2 Content-Transfer-Encoding: 7bit Content-Type: multipart/alternative; boundary=047d7b5d47b803116704e09271c0 --047d7b5d47b803116704e09271c0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=iso-8859-1 Dear Doctor Orchar, Hi my name is Martin Rodriguez and Im studen of engineering. As final project Im developing a system with Jade, Jess and fuzzy jess. The purpose of the system is to provide medical diagnosis. Thats why i needed a rules based system with backward chaining, and I choose Jess. Well, my problem is when I begin to use FuzzyJ on my Jess files. I send you as an attachment, a short file with the code complete. My first problem occurs when I write the next rule: *(defrule intensidad_tos* * (declare (auto-focus TRUE))* * (check diagnostico-b)* * (answer (ident fuzzy_tos) (text ?ht&:(fuzzy-match ?ht "secaContinua")))* *=>* * (assert (tos (new nrc.fuzzy.FuzzyValue ?*fuzzyTos* "secaContinua")))* *)* * * this code does not even compile and send me the next error message: *Jess reported an error in routine ReteCompiler.addRule.** Message: Can't use funcalls in backchained patterns text.* Well, my next and last problem is when I remove de line * (answer (ident fuzzy_tos) (text ?ht&:(fuzzy-match ?ht "secaContinua"))) *on the rule before, and I replace with *(answer (ident fuzzy_tos) (text 5)).* I response with a number 5 and the rule asserts the *tos FuzzyValue. *That trigger the next rule: *(defrule intensidad_dolor_cabeza* * (declare (auto-focus TRUE))* * (check diagnostico-b)* * (tos ?t&:(fuzzy-match ?t "secaContinua"))* * (answer (ident fuzzy_dolor_cabeza) (text 5))* *=>* * (assert (dolor_de_cabeza (new nrc.fuzzy.FuzzyValue ?*fuzzyDolorCabeza* "intenso")))* *)* * * but when this rule trigger, send me the next error: *Jess reported an error in routine fuzzy-match* * while executing (fuzzy-match ?t(0,0,0) "secaContinua")* * while executing rule LHS (MTEQ)* * while executing rule LHS (MTELN)* * while executing rule LHS (TECT)* * while executing (assert (interview::tos (new nrc.fuzzy.FuzzyValue ?*fuzzyTos* "secaContinua")))* * while executing defrule interview::intensidad_tos.* * Message: Error during execution.* * * Please, I send you the clp file complete on the attachment, and if you can help me I'll be very grateful, because Im stuck with this problem. Thanks again for your time!! regards!! Martin Rodriguez --047d7b5d47b803116704e09271c0 Content-Type: text/html; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr">Dear Doctor Orchar,<div><br></div><div style>Hi my name is= Martin Rodriguez and Im studen of engineering.=A0As final project Im devel= oping a system with Jade, Jess and fuzzy jess.</div><div style>The purpose = of the system is to provide medical diagnosis.</div> <div style>Thats why i needed a rules based system with backward chaining, = and I choose Jess.</div><div style><br></div><div style>Well, my problem is= when I begin to use FuzzyJ on my Jess files.</div><div style><br></div> <div style>I send you as an attachment, a short file with the code complete= .</div><div style><br></div><div style>My first problem occurs when I write= the next rule:</div><div style><br></div><div style><div><b>(defrule inten= sidad_tos</b></div> <div><b><span class=3D"" style=3D"white-space:pre"> </span>(declare (auto-f= ocus TRUE))</b></div><div><b>=A0 =A0 =A0 =A0 (check diagnostico-b)</b></div= ><div><b>=A0 =A0 =A0 =A0 (answer (ident fuzzy_tos) (text ?ht&:(fuzzy-ma= tch ?ht "secaContinua")))</b></div> <div><b>=3D></b></div><div><b>=A0 =A0 =A0 =A0 (assert (tos (new nrc.fuzz= y.FuzzyValue ?*fuzzyTos* "secaContinua")))</b></div><div><b>)</b>= </div><div><b><br></b></div><div>this code does not even compile and send m= e the next error message:<br> </div><div><br></div><div><div><font color=3D"#ff0000"><b>Jess reported an = error in routine ReteCompiler.addRule.</b></font><b style=3D"color:rgb(255,= 0,0)">=A0 Message: Can't use funcalls in backchained patterns text.</b>= </div> </div><div><br></div><div style><font color=3D"#000000">Well, my next and l= ast problem is when I remove de line=A0</font><b>=A0(answer (ident fuzzy_to= s) (text ?ht&:(fuzzy-match ?ht "secaContinua"))) </b>on the r= ule before, and I replace with</div> <div style><b>(answer (ident fuzzy_tos) (text 5)).</b></div><div style>I re= sponse with a number 5 and the rule asserts the <b>tos FuzzyValue. </b>That= trigger the next rule:</div><div style><br></div><div style><div><b>(defru= le intensidad_dolor_cabeza</b></div> <div><b><span class=3D"" style=3D"white-space:pre"> </span>(declare (auto-f= ocus TRUE))</b></div><div><b>=A0 =A0 =A0 =A0 (check diagnostico-b)</b></div= ><div><b>=A0 =A0 =A0 =A0 (tos ?t&:(fuzzy-match ?t "secaContinua&qu= ot;))</b></div><div> <b>=A0 =A0 =A0 =A0 (answer (ident fuzzy_dolor_cabeza) (text 5))</b></div><d= iv><b>=3D></b></div><div><b>=A0 =A0 =A0 =A0 (assert (dolor_de_cabeza (ne= w nrc.fuzzy.FuzzyValue ?*fuzzyDolorCabeza* "intenso")))</b></div>= <div><b>)</b></div> <div><b><br></b></div><div style>but when this rule trigger, send me the ne= xt error:</div><div style><br></div><div style><div><b><font color=3D"#ff00= 00">Jess reported an error in routine fuzzy-match</font></b></div><div><b><= font color=3D"#ff0000"><span class=3D"" style=3D"white-space:pre"> </span>w= hile executing (fuzzy-match ?t(0,0,0) "secaContinua")</font></b><= /div> <div><b><font color=3D"#ff0000"><span class=3D"" style=3D"white-space:pre">= </span>while executing rule LHS (MTEQ)</font></b></div><div><b><font color= =3D"#ff0000"><span class=3D"" style=3D"white-space:pre"> </span>while execu= ting rule LHS (MTELN)</font></b></div> <div><b><font color=3D"#ff0000"><span class=3D"" style=3D"white-space:pre">= </span>while executing rule LHS (TECT)</font></b></div><div><b><font color= =3D"#ff0000"><span class=3D"" style=3D"white-space:pre"> </span>while execu= ting (assert (interview::tos (new nrc.fuzzy.FuzzyValue ?*fuzzyTos* "se= caContinua")))</font></b></div> <div><b><font color=3D"#ff0000"><span class=3D"" style=3D"white-space:pre">= </span>while executing defrule interview::intensidad_tos.</font></b></div>= <div><b><font color=3D"#ff0000">=A0 Message: Error during execution.</font>= </b></div> <div><b><font color=3D"#ff0000"><br></font></b></div><div style><font color= =3D"#000000">Please, I send you the clp file complete on the attachment, an= d if you can help me=A0I'll be very grateful, because Im stuck with thi= s problem.</font></div> <div style><font color=3D"#000000">Thanks again for your time!!</font></div= ><div style><font color=3D"#000000"><br></font></div><div style><font color= =3D"#000000">regards!!</font></div><div style><font color=3D"#000000"><br><= /font></div> <div style><font color=3D"#000000">Martin Rodriguez</font></div><div><br></= div></div></div></div></div> --047d7b5d47b803116704e09271c0-- --047d7b5d47b803119304e09271c2 X-Attachment-Id: f_hinx5p1y0 Content-Type: application/octet-stream; name=Motor_Diagnostico_General.clp Content-Disposition: attachment; filename=Motor_Diagnostico_General.clp Content-Transfer-Encoding: base64 KGltcG9ydCBucmMuZnV6enkuKikNCihpbXBvcnQgbnJjLmZ1enp5Lmplc3MuRnV6enlNYWluKQ0K DQo7O1RlbXBsYXRlcyBuZWNlc2FyaW9zIGVuIG1vZHVsbyBNQUlODQooZGVmdGVtcGxhdGUgcXVl c3Rpb24gKHNsb3QgdGV4dCkgKHNsb3QgdHlwZSkgKHNsb3QgaWRlbnQpKQ0KKGRlZnRlbXBsYXRl IGFuc3dlciAoc2xvdCBpZGVudCkgKHNsb3QgdGV4dCkpDQooZGVmdGVtcGxhdGUgcmVjb21tZW5k YXRpb24gKHNsb3QgZXhwbGljYWNpb24pKQ0KDQooZGVmZnVuY3Rpb24gTUFJTjo6cmVjb21tZW5k LWFjdGlvbiAoP2FjdGlvbikNCgkiRGEgbGEgaW5zdHJ1Y2Npb24gZmluYWwgYWwgdXN1YXJpbyIN CgkocHJpbnRvdXQgdCA/YWN0aW9uIGNybGYpKQ0KDQo7O0Z1enp5IHZhcmlhYmxlcw0KKGRlZmds b2JhbCA/KmZ1enp5VG9zKiA9IChuZXcgRnV6enlWYXJpYWJsZSAiSW50ZW5zaWRhZF9kZV9sYV90 b3MiIDAuMCA1LjAgImVudGVyb3MiKSkNCihkZWZnbG9iYWwgPypmdXp6eURvbG9yQ2FiZXphKiA9 IChuZXcgRnV6enlWYXJpYWJsZSAiSW50ZW5zaWRhZF9kZWxfZG9sb3JfZGVfY2FiZXphIiAwLjAg NS4wICJlbnRlcm9zIikpDQooZGVmZ2xvYmFsID8qZnV6enlFc2NhbG9mcmlvcyogPSAobmV3IEZ1 enp5VmFyaWFibGUgIkZyZWN1ZW5jaWFfZGVfZXNjYWxvZnJpb3MiIDAuMCA1LjAgImVudGVyb3Mi KSkNCihkZWZnbG9iYWwgPypmdXp6eUNhbnNhbmNpbyogPSAobmV3IEZ1enp5VmFyaWFibGUgIklu dGVuc2lkYWRfZGVsX2NhbnNhbmNpbyIgMC4wIDUuMCAiZW50ZXJvcyIpKQ0KKGRlZmdsb2JhbCA/ KmZ1enp5RG9sb3JHYXJnYW50YSogPSAobmV3IEZ1enp5VmFyaWFibGUgIkludGVuc2lkYWRfZGVs X2RvbG9yX2RlX2dhcmdhbnRhIiAwLjAgNS4wICJlbnRlcm9zIikpDQooZGVmZ2xvYmFsID8qZnV6 enlNb3F1ZW8qID0gKG5ldyBGdXp6eVZhcmlhYmxlICJGcmVjdWVuY2lhX2RlbF9tb3F1ZW8iIDAu MCA1LjAgImVudGVyb3MiKSkNCihkZWZnbG9iYWwgPypmdXp6eURvbG9yZXNNdXNjdWxhcmVzKiA9 IChuZXcgRnV6enlWYXJpYWJsZSAiSW50ZW5zaWRhZF9kZV9sb3NfZG9sb3Jlc19tdXNjdWxhcmVz IiAwLjAgNS4wICJlbnRlcm9zIikpDQooZGVmZ2xvYmFsID8qZnV6enlBcmRvck9qb3MqID0gKG5l dyBGdXp6eVZhcmlhYmxlICJJbnRlbnNpZGFkX2RlbF9hcmRvcl9kZV9vam9zIiAwLjAgNS4wICJl bnRlcm9zIikpDQoNCihkZWZnbG9iYWwgPypmdXp6eURpYWdub3N0aWNvR3JpcGUqID0gKG5ldyBG dXp6eVZhcmlhYmxlICJEaWFnbm9zdGljb19ncmlwYWwiIDAuMCA1LjAgImVudGVyb3MiKSkNCg0K OztGYWN0cw0KKGRlZmZhY3RzIE1BSU46OnF1ZXN0aW9uLWRhdGEJDQogICAgKHF1ZXN0aW9uIChp ZGVudCBtYXlvcl9lZGFkKSAodHlwZSB5ZXMtbm8pICh0ZXh0ICJFcyBtYXlvciBkZSAxOCBhw7Fv cz8iKSkNCiAgICAocXVlc3Rpb24gKGlkZW50IGZpZWJyZSkgKHR5cGUgeWVzLW5vKSAodGV4dCAi VGllbmUgZmllYnJlIG8gZXN0YSBpbmhpYmlkYSBwb3IgYW50aXBpcmV0aWNvcz8iKSkNCiAgICAo cXVlc3Rpb24gKGlkZW50IHRvc19kb2xvcl9nYXJnYW50YSkgKHR5cGUgeWVzLW5vKSAodGV4dCAi VG9zIG8gZG9sb3IgZGUgZ2FyZ2FudGE/IikpICAgIA0KICAgIChxdWVzdGlvbiAoaWRlbnQgaW5p Y2lvX2ZpZWJyZSkgKHR5cGUgeWVzLW5vKSAodGV4dCAiTGEgZmllYnJlIHR1dm8gaW5pY2lvIHN1 Yml0byBpZ3VhbCBvIG1heW9yIGEgMzkgwrpDPyIpKQ0KDQogICAgO0ZJWCBpbnRlZ2VyIG9yIG5v dA0KICAgIChxdWVzdGlvbiAoaWRlbnQgZnV6enlfdG9zKSAodHlwZSBpbnRlZ2VyKSAodGV4dCAi VG9zPywgTWVub3MgaW50ZW5zYSBvIFNlY2EgeSBDb250aW51YT8gKDAgYSA1KSIpKQ0KICAgIChx dWVzdGlvbiAoaWRlbnQgZnV6enlfZG9sb3JfY2FiZXphKSAodHlwZSB0ZXh0KSAodGV4dCAiRG9s b3IgZGUgY2FiZXphPywgZGUgbWVub3IgaW50ZW5zaWRhZCBvIGludGVuc28/ICgwIGEgNSkiKSkN CiAgICAocXVlc3Rpb24gKGlkZW50IGZ1enp5X2VzY2Fsb2ZyaW9zKSAodHlwZSB0ZXh0KSAodGV4 dCAiRXNjYWxvZnJpb3M/LCBlc3BvcmFkaWNvcyBvIGZyZWN1ZW50ZXM/ICgwIGEgNSkiKSkNCiAg ICAocXVlc3Rpb24gKGlkZW50IGZ1enp5X2NhbnNhbmNpbykgKHR5cGUgdGV4dCkgKHRleHQgIkNh bnNhbmNpbz8sIE1vZGVyYWRvIG8gZXh0cmVtbyAoMCBhIDUpIikpDQogICAgKHF1ZXN0aW9uIChp ZGVudCBmdXp6eV9kb2xvcl9nYXJnYW50YSkgKHR5cGUgdGV4dCkgKHRleHQgIkRvbG9yIGRlIGdh cmdhbnRhPywgTW9kZXJhZG8gbyBFeHRyZW1vPyAoMCBhIDUpIikpDQogICAgKHF1ZXN0aW9uIChp ZGVudCBmdXp6eV9tb3F1ZW8pICh0eXBlIHRleHQpICh0ZXh0ICJNb3F1ZW8/LCBQb2NvIG8gRnVl cnRlIGNvbiBjb25nZXN0aW9uPyAoMCBhIDUpIikpDQogICAgKHF1ZXN0aW9uIChpZGVudCBmdXp6 eV9kb2xvcmVzX211c2N1bGFyZXMpICh0eXBlIHRleHQpICh0ZXh0ICJEb2xvcmVzIG11c2N1bGFy ZXM/LCBtb2RlcmFkb3MgbyBpbnRlbnNvcz8gKDAgYSA1KSIpKQ0KICAgIChxdWVzdGlvbiAoaWRl bnQgZnV6enlfYXJkb3Jfb2pvcykgKHR5cGUgdGV4dCkgKHRleHQgIkFyZG9yIGRlIG9qb3M/LCBs ZXZlIG8gaW50ZW5zb3M/ICgwIGEgNSkiKSkNCikNCg0KKGRvLWJhY2t3YXJkLWNoYWluaW5nIGFu c3dlcikNCg0KOyoqKioqKioqKioqKioqKioqKioqDQo7KiogTW9kdWxvIHRyaWdnZXIgKioNCjsq KioqKioqKioqKioqKioqKioqKg0KDQooZGVmbW9kdWxlIHRyaWdnZXIpDQoNCihkZWZydWxlIHRy aWdnZXI6OnN1cHBseS1hbnN3ZXJzDQoJKGRlY2xhcmUgKGF1dG8tZm9jdXMgVFJVRSkpDQoJKE1B SU46Om5lZWQtYW5zd2VyIChpZGVudCA/aWQpKQ0KCShub3QgKE1BSU46OmFuc3dlciAoaWRlbnQg P2lkKSkpDQoJKG5vdCAoTUFJTjo6YXNrID8pKQ0KPT4NCgkoYXNzZXJ0IChNQUlOOjphc2sgP2lk KSkNCgkocmV0dXJuKSkNCg0KOyoqKioqKioqKioqKioqKioNCjsqKiBNb2R1bG8gYXNrICoqDQo7 KioqKioqKioqKioqKioqKg0KDQo7dHlwZXM6IHllcy1ubywgbnVtZXJpYywgdGV4dA0KDQooZGVm bW9kdWxlIGFzaykNCjs7IEVzdGEgZnVuY2lvbiBjaGVxdWVhIHF1ZSBsbyBxdWUgc2UgcHJlZ3Vu dGUgc2VhIHZhbGlkbw0KOzsgZW4gbnVlc3RybyBjYXNvIHZhIGEgc2VyLCB5ZXMtbm8geSBudW1l cmljbyB5IHRleHRvIHF1ZSBlcyBsYSByZXNwdWVzdGEgRnV6enkNCg0KKGRlZmZ1bmN0aW9uIGlz LW9mLXR5cGUgKD9hbnN3ZXIgP3R5cGUpDQogICAgIkNoZWNrIHRoYXQgdGhlIGFuc3dlciBoYXMg dGhlIHJpZ2h0IGZvcm0iDQogICAgKGlmIChlcSA/dHlwZSB5ZXMtbm8pIHRoZW4NCgkocmV0dXJu IChvciAoZXEgP2Fuc3dlciBzaSkgKGVxID9hbnN3ZXIgbm8pKSkpDQogICAgKGlmIChlcSA/dHlw ZSBpbnRlZ2VyKSB0aGVuDQogICAgICAgIChyZXR1cm4gKGlzLWEtbnVtYmVyID9hbnN3ZXIpKSkN CiAgICA7OyBwbGFpbiB0ZXh0DQogICAgKHJldHVybiAoPiAoc3RyLWxlbmd0aCA/YW5zd2VyKSAw KSkpDQoNCjs7IEVzdGEgZnVuY2lvbiBkYSBsYSBwb3NpYmlsaWRhZCBhbCB1c3VhcmlvIGRlIGlu Z3Jlc2FyIGxhIHByZWd1bnRhLiANCihkZWZmdW5jdGlvbiBhc2stdXNlciAoP3F1ZXN0aW9uID90 eXBlKQ0KCSJBc2sgYSBxdWVzdGlvbiwgYW5kIHJldHVybiB0aGUgYW5zd2VyIg0KCShiaW5kID9h bnN3ZXIgIiIpDQoJKHdoaWxlIChub3QgKGlzLW9mLXR5cGUgP2Fuc3dlciA/dHlwZSkpIGRvDQoJ KHByaW50b3V0IHQgP3F1ZXN0aW9uICIgIikNCgkoaWYgKGVxID90eXBlIHllcy1ubykgdGhlbg0K CShwcmludG91dCB0ICIoc2kgbyBubykgIikpDQogICAgICAgIChpZiAoZXEgP3R5cGUgaW50ZWdl cikgdGhlbg0KCShwcmludG91dCB0ICIoaW5ncmVzZSB1biBudW1lcm8pICIpKQ0KCShiaW5kID9h bnN3ZXIgKHJlYWQpKSkNCgkocmV0dXJuID9hbnN3ZXIpKQ0KDQooZGVmcnVsZSBhc2stcXVlc3Rp b24tYnktaWQNCgkiQXNrIGEgcXVlc3Rpb24gYW5kIGFzc2VydCB0aGUgYW5zd2VyIg0KCShkZWNs YXJlIChhdXRvLWZvY3VzIFRSVUUpKQ0KCTs7IElmIHRoZXJlIGlzIGEgcXVlc3Rpb24gd2l0aCBp ZGVudCA/aWQuLi4NCgkocXVlc3Rpb24gKGlkZW50ID9pZCkgKHRleHQgP3RleHQpICh0eXBlID90 eXBlKSkNCgk7OyAuLi4gYW5kIHRoZXJlIGlzIG5vIGFuc3dlciBmb3IgaXQNCgkobm90IChhbnN3 ZXIgKGlkZW50ID9pZCkpKQ0KCTs7IC4uLiBhbmQgdGhlIHRyaWdnZXIgZmFjdCBmb3IgdGhpcyBx dWVzdGlvbiBleGlzdHMNCgk/YXNrIDwtIChNQUlOOjphc2sgP2lkKQ0KPT4NCgk7OyBBc2sgdGhl IHF1ZXN0aW9uDQoJKGJpbmQgP2Fuc3dlciAoYXNrLXVzZXIgP3RleHQgP3R5cGUpKQ0KCTs7IEFz c2VydCB0aGUgYW5zd2VyIGFzIGEgZmFjdA0KCShhc3NlcnQgKGFuc3dlciAoaWRlbnQgP2lkKSAo dGV4dCA/YW5zd2VyKSkpDQoJOzsgUmVtb3ZlIHRoZSB0cmlnZ2VyDQoJKHJldHJhY3QgP2FzaykN Cgk7OyBBbmQgZmluYWxseSwgZXhpdCB0aGlzIG1vZHVsZQ0KCShyZXR1cm4pKQ0KDQooZGVmZnVu Y3Rpb24gaXMtYS1udW1iZXIgKD92YWx1ZSkNCiAgICAiUmV0dXJuIFRSVUUgaWYgP3ZhbHVlIGlz IGEgbnVtYmVyIg0KICAgICh0cnkNCiAgICAoaW50ZWdlciA/dmFsdWUpDQogICAgKHJldHVybiBU UlVFKQ0KICAgIGNhdGNoDQogICAgKHJldHVybiBGQUxTRSkpKQ0KDQo7KioqKioqKioqKioqKioq KioqKioqKioNCjsqKiBNb2R1bG8gaW50ZXJ2aWV3ICAqKg0KOyoqKioqKioqKioqKioqKioqKioq KioqDQoNCihkZWZtb2R1bGUgaW50ZXJ2aWV3KQ0KDQooZGVmcnVsZSBkaWFnb25vc3RpY29fYV9t YXlvcl9lZGFkDQoJKGRlY2xhcmUgKGF1dG8tZm9jdXMgVFJVRSkpDQoJKGFuc3dlciAoaWRlbnQg bWF5b3JfZWRhZCkgKHRleHQgbm8pKQ0KPT4NCgkoTUFJTjo6cmVjb21tZW5kLWFjdGlvbiAiQXVu cXVlIGxhIGluZmx1ZW56YSBubyBzZSBwdWVkZSBkZXNjYXJ0YXIgZW4gZXN0ZSBwYWNpZW50ZSwg ZXN0ZSBhbGdvcml0bW8gbm8gZGViZSBzZXIgdG9tYW5kbyBlbiBjdWVudGEgZW4gZWwgZGlhZ25v c3RpY28uIENvbnN1bHRlIGEgdW4gbWVkaWNvIHBhcmEgZGlhZ25vc3RpY28gZGUgc3UgcG9zaWJs ZSBlbmZlcm1lZGFkLiIpDQoJKGhhbHQpKQ0KDQooZGVmcnVsZSBkaWFnb25vc3RpY29fYV9maWVi cmUNCgkoZGVjbGFyZSAoYXV0by1mb2N1cyBUUlVFKSkNCgkoYW5zd2VyIChpZGVudCBtYXlvcl9l ZGFkKSAodGV4dCBzaSkpDQoJKGFuc3dlciAoaWRlbnQgZmllYnJlKSAodGV4dCBubykpDQo9Pg0K CShNQUlOOjpyZWNvbW1lbmQtYWN0aW9uICJBdW5xdWUgbGEgaW5mbHVlbnphIG5vIHNlIHB1ZWRl IGRlc2NhcnRhciBlbiBlc3RlIHBhY2llbnRlLCBlc3RlIGFsZ29yaXRtbyBubyBkZWJlIHNlciB0 b21hbmRvIGVuIGN1ZW50YSBlbiBlbCBkaWFnbm9zdGljby4gQ29uc3VsdGUgYSB1biBtZWRpY28g cGFyYSBkaWFnbm9zdGljbyBkZSBzdSBwb3NpYmxlIGVuZmVybWVkYWQuIikNCgkoaGFsdCkpDQoN CihkZWZydWxlIGRpYWdub3N0aWNvX2FfdG9zLWRvbG9yLWdhcmdhbnRhDQoJKGRlY2xhcmUgKGF1 dG8tZm9jdXMgVFJVRSkpDQoJKGFuc3dlciAoaWRlbnQgbWF5b3JfZWRhZCkgKHRleHQgc2kpKQ0K CShhbnN3ZXIgKGlkZW50IGZpZWJyZSkgKHRleHQgc2kpKQ0KICAgICAgICAoYW5zd2VyIChpZGVu dCB0b3NfZG9sb3JfZ2FyZ2FudGEpICh0ZXh0IG5vKSkNCj0+DQoJKE1BSU46OnJlY29tbWVuZC1h Y3Rpb24gIkF1bnF1ZSBsYSBpbmZsdWVuemEgbm8gc2UgcHVlZGUgZGVzY2FydGFyIGVuIGVzdGUg cGFjaWVudGUsIGVzdGUgYWxnb3JpdG1vIG5vIGRlYmUgc2VyIHRvbWFuZG8gZW4gY3VlbnRhIGVu IGVsIGRpYWdub3N0aWNvLiBDb25zdWx0ZSBhIHVuIG1lZGljbyBwYXJhIGRpYWdub3N0aWNvIGRl IHN1IHBvc2libGUgZW5mZXJtZWRhZC4iKQ0KCShoYWx0KSkNCg0KKGRlZnJ1bGUgZGlhZ25vc3Rp Y29fYg0KCShkZWNsYXJlIChhdXRvLWZvY3VzIFRSVUUpKQ0KCShhbnN3ZXIgKGlkZW50IG1heW9y X2VkYWQpICh0ZXh0IHNpKSkNCgkoYW5zd2VyIChpZGVudCBmaWVicmUpICh0ZXh0IHNpKSkNCiAg ICAgICAgKGFuc3dlciAoaWRlbnQgdG9zX2RvbG9yX2dhcmdhbnRhKSAodGV4dCBzaSkpDQo9Pg0K ICAgICAgICAoYXNzZXJ0IChjaGVjayBkaWFnbm9zdGljby1iKSkNCiAgICAgICAgOzsgdGhlIG5y YyBGdXp6eUplc3MgZnVuY3Rpb25zIGFyZSBsb2FkZWQNCiAgICAgICAgKGxvYWQtcGFja2FnZSBu cmMuZnV6enkuamVzcy5GdXp6eUZ1bmN0aW9ucykNCiAgICAgICAgKGJpbmQgP3JsZiAobmV3IFJp Z2h0TGluZWFyRnVuY3Rpb24pKQ0KICAgICAgICAoYmluZCA/bGxmIChuZXcgTGVmdExpbmVhckZ1 bmN0aW9uKSkNCiAgICAgICAgOzsgdGVybXMgZm9yIHRoZSBhaXIgdGVtcGVyYXR1cmUgRnV6enkg VmFyaWFibGUgYW5kIGZhbiBzcGVlZCBGdXp6eSBWYXJpYWJsZQ0KICAgICAgICAoPypmdXp6eVRv cyogYWRkVGVybSAibWVub3NJbnRlbnNhIiAobmV3IFJGdXp6eVNldCAxLjAgMi41ID9ybGYpKQ0K ICAgICAgICAoPypmdXp6eVRvcyogYWRkVGVybSAic2VjYUNvbnRpbnVhIiAobmV3IExGdXp6eVNl dCAyLjUgNS4wID9sbGYpKQ0KICAgICAgICAoPypmdXp6eURvbG9yQ2FiZXphKiBhZGRUZXJtICJt ZW5vc0ludGVuc28iIChuZXcgUkZ1enp5U2V0IDEuMCAyLjUgP3JsZikpDQogICAgICAgICg/KmZ1 enp5RG9sb3JDYWJlemEqIGFkZFRlcm0gImludGVuc28iIChuZXcgTEZ1enp5U2V0IDIuNSA1LjAg P2xsZikpDQopDQoNCihkZWZydWxlIGludGVuc2lkYWRfdG9zDQoJKGRlY2xhcmUgKGF1dG8tZm9j dXMgVFJVRSkpDQogICAgICAgIChjaGVjayBkaWFnbm9zdGljby1iKQ0KICAgICAgICA7OyhhbnN3 ZXIgKGlkZW50IGZ1enp5X3RvcykgKHRleHQgNSkpDQogICAgICAgIChhbnN3ZXIgKGlkZW50IGZ1 enp5X3RvcykgKHRleHQgP2h0JjooZnV6enktbWF0Y2ggP2h0ICJzZWNhQ29udGludWEiKSkpDQo9 Pg0KICAgICAgICAoYXNzZXJ0ICh0b3MgKG5ldyBucmMuZnV6enkuRnV6enlWYWx1ZSA/KmZ1enp5 VG9zKiAic2VjYUNvbnRpbnVhIikpKQ0KKQ0KDQooZGVmcnVsZSBpbnRlbnNpZGFkX2RvbG9yX2Nh YmV6YQ0KCShkZWNsYXJlIChhdXRvLWZvY3VzIFRSVUUpKQ0KICAgICAgICAoY2hlY2sgZGlhZ25v c3RpY28tYikNCiAgICAgICAgKHRvcyA/dCY6KGZ1enp5LW1hdGNoID90ICJzZWNhQ29udGludWEi KSkNCiAgICAgICAgKGFuc3dlciAoaWRlbnQgZnV6enlfZG9sb3JfY2FiZXphKSAodGV4dCA1KSkN Cj0+DQogICAgICAgIChhc3NlcnQgKGRvbG9yX2RlX2NhYmV6YSAobmV3IG5yYy5mdXp6eS5GdXp6 eVZhbHVlID8qZnV6enlEb2xvckNhYmV6YSogImludGVuc28iKSkpDQopDQoNCjsqKioqKioqKioq KioqKkVORCBJTlRFUlZJRVcgTU9EVUxFKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioNCg== --047d7b5d47b803119304e09271c2--