History

ink js rewrite

Francisco J Ballesteros committed 10 years ago

Commit bb830d21 parent fb007a018 files · +35675 −35309Browse files

Unified · Split

18 files
  1. LICENSE +2 −1
  2. net/ink/button.go +4 −4
  3. net/ink/js/README +15 −0
  4. net/ink/js/button.js +41 −89
  5. net/ink/js/clive.js +0 −4
  6. net/ink/js/ctlr.js +134 −0
  7. net/ink/js/js.go +32703 −32562
  8. net/ink/js/latin.js +1 −1
  9. net/ink/js/lines.js +1049 −0
  10. net/ink/js/pg.js +11 −8
  11. net/ink/js/radio.js +40 −86
  12. net/ink/js/text.js +1263 −0
  13. net/ink/js/txt.js +0 −2333
  14. net/ink/js/txt.jsold +391 −180
  15. net/ink/mkjs +3 −2
  16. net/ink/page.go +7 −6
  17. net/ink/radio.go +1 −1
  18. net/ink/text.go +10 −32
LICENSE+2−1
@@ -1,4 +1,5 @@
1Copyight (c) 2013 Laboratorio de Sistemas1Copyight (c) 2013-2016 Laboratorio de Sistemas
2http://lsub.org
2 3
3Permission is hereby granted, free of charge, to any person obtaining a copy4Permission is hereby granted, free of charge, to any person obtaining a copy
4of this software and associated documentation files (the "Software"), to deal5of this software and associated documentation files (the "Software"), to deal
net/ink/button.go+4−4
@@ -59,7 +59,7 @@ func NewButtonSet(button ...*Button) *ButtonSet { · 58 unmodified lines
59func (bs *ButtonSet) WriteTo(w io.Writer) (tot int64, err error) {59func (bs *ButtonSet) WriteTo(w io.Writer) (tot int64, err error) {
60 vid := bs.newViewId()60 vid := bs.newViewId()
61 n, err := io.WriteString(w,61 n, err := io.WriteString(w,
62 `<div id="`+vid+`" class="`+bs.Id+` ui-widget-header ui-corner-all hasws">`)62 `<div id="`+vid+`" class="`+bs.Id+` ui-widget-header ui-corner-all clivectl">`)
63 tot += int64(n)63 tot += int64(n)
64 if err != nil {64 if err != nil {
65 return tot, err65 return tot, err
@@ -96,14 +96,14 @@ func (bs *ButtonSet) WriteTo(w io.Writer) (tot int64, err error) { · 30 unmodified lines
96 n, err = io.WriteString(w, `$("#`+b+`").button().click(function(e) {96 n, err = io.WriteString(w, `$("#`+b+`").button().click(function(e) {
97 var checked = $("#`+b+`").is(':checked');97 var checked = $("#`+b+`").is(':checked');
98 if(checked) {98 if(checked) {
99 d.post(["Set", "`+bs.els[i].Name+`", "`+fmt.Sprintf("%d", i)+`", "on"]);99 d.clivectlr.post(["Set", "`+bs.els[i].Name+`", "`+fmt.Sprintf("%d", i)+`", "on"]);
100 } else {100 } else {
101 d.post(["Set", "`+bs.els[i].Name+`", "`+fmt.Sprintf("%d", i)+`", "off"]);101 d.clivectlr.post(["Set", "`+bs.els[i].Name+`", "`+fmt.Sprintf("%d", i)+`", "off"]);
102 }102 }
103 });`)103 });`)
104 } else {104 } else {
105 n, err = io.WriteString(w, `$("#`+b+`").button().click(function() {105 n, err = io.WriteString(w, `$("#`+b+`").button().click(function() {
106 d.post(["click", "`+bs.els[i].Name+`", "`+fmt.Sprintf("%d", i)+`"]);106 d.clivectlr.post(["click", "`+bs.els[i].Name+`", "`+fmt.Sprintf("%d", i)+`"]);
107 });`)107 });`)
108 }108 }
109 tot += int64(n)109 tot += int64(n)
net/ink/js/README+15−0
@@ -0,0 +1,15 @@
1This contains a few js files from clive (c) Laboratorio de Sistemas
2under the LICENSE for Clive:
3 - ctlr.js
4 - button.js
5 - radio.js
6 - latin.js
7 - lines.js
8 - text.js
9 - pg.js
10 - zxlogo.gif
11 - clive.gif
12
13All other files come from other authors and are under their
14respective licenses; this includes jquery and jquery-ui plus
15some other tools.
net/ink/js/button.js+41−89
@@ -1,100 +1,52 @@
1"use strict";1"use strict";
2/*2/*
3 js code for the buttons control3 js code for the clive buttons control.
4 */4 */
5 5
6var bdebug = false;
6 7
7function bapply(ev, fromserver) {8// A Clive control with buttons.
8 if(!ev || !ev.Args || !ev.Args[0]){9function CliveButtons(d, cid, id) {
9 console.log("apply: nil ev");10 this.d = d;
10 return;11 this.c = d;
11 }12 this.cid = cid;
12 var arg = ev.Args13 this.id = id;
13 if(1)console.log(this.divid, "apply", ev.Id, ev.Args);14 this.vers = 0;
14 switch(arg[0]){
15 case "Set":
16 if(arg.length < 4){
17 console.log(this.divid, "apply: short set");
18 break;
19 }
20 var on = (arg[3] == "on");
21 var id = this.divid + "_b" + arg[2];
22 console.log("set ", id, on);
23 var b = $("#"+id);
24 if(b) {
25 b.prop('checked', on);
26 b.button("refresh");
27 }
28 break;
29 case "show":
30 if(document.showcontrol) {
31 document.showcontrol(this);
32 }
33 break;
34 default:
35 console.log("text: unhandled", arg[0]);
36 }
37}
38 15
39/*16 this.apply = function(ev, fromserver) {
40 d is is the (jquery) parent that will supply events.17 if(!ev || !ev.Args || !ev.Args[0]){
41 cid is the class id d.18 console.log("button: apply: nil ev");
42 d has "hasws" in its class and thus we must set
43 d.get(0).ws to the ws to be closed if this element is removed.
44 */
45function mkbuttons(d, cid, id) {
46 var wsurl = "wss://" + window.location.host + "/ws/" + cid;
47 if(d.wsaddr) {
48 wsurl = d.wsaddr + "/ws/" + cid;
49 }
50 d.post = function(args) {
51 if(!d.ws){
52 console.log("no ws");
53 return nil;
54 }
55 var ws = d.ws;
56 if(!args || !args[0]){
57 console.log("post: no args");
58 return nil;
59 }
60 var ev = {}
61 ev.Id = cid;
62 ev.Src = id;
63 ev.Vers = this.vers;
64 ev.Args = args;
65 var msg = JSON.stringify(ev);
66 try {
67 ws.send(msg);
68 // console.log("posting ", msg);
69 }catch(ex){
70 console.log("post: " + ex);
71 }
72 return ev;
73 };
74 d.apply = bapply;
75 d.divid = id;
76 d.divcid = cid;
77 d.ws = new WebSocket(wsurl);
78 d.get(0).ws = d.ws;
79 d.get(0).post = d.post;
80 d.ws.onopen = function() {
81 d.post(["id"]);
82 };
83 d.ws.onmessage = function(ev) {
84 // console.log("got msg", e.data);
85 var o = JSON.parse(ev.data);
86 if(!o || !o.Id) {
87 console.log("update: no object id");
88 return;19 return;
89 }20 }
90 console.log("update to", o.Id);21 var arg = ev.Args
91 d.apply(o, true)22 if(bdebug)console.log(this.id, "apply", ev.Id, ev.Args);
92 };23 switch(arg[0]){
93 d.ws.onclose = function() {24 case "Set":
94 console.log("text socket " + wsurl+ " closed\n");25 if(arg.length < 4){
95 d.replaceWith("<h3>disconnected</h3>")26 console.log(this.divid, "apply: short set");
27 break;
28 }
29 var on = (arg[3] == "on");
30 var id = this.id + "_b" + arg[2];
31 console.log("set ", id, on);
32 var b = $("#"+id);
33 if(b) {
34 b.prop('checked', on);
35 b.button("refresh");
36 }
37 break;
38 case "show":
39 this.showcontrol();
40 break;
41 default:
42 console.log("button: unhandled", arg[0]);
43 }
96 };44 };
97}
98 45
99document.mkbuttons = mkbuttons;46 CliveCtlr.call(this);
47}
100 48
49document.mkbuttons = function(d, cid, id) {
50 var c = new CliveButtons(d, cid, id);
51 return c;
52}
net/ink/js/clive.js+0−4
@@ -1,4 +0,0 @@
1"use strict";
2/*
3 * Placeholder for clive tools
4*/
net/ink/js/ctlr.js+134−0
@@ -0,0 +1,134 @@
1"use strict";
2/*
3 Clive js code for ink controls.
4*/
5
6// A clive ctlr.
7// Callers must have defined .d, .c, .cid, and .id before calling this.
8// If this.d has wsaddr defined, that base address is used.
9// This provides the post method and calls (if defined) to apply, autoresize, and mayresize methods.
10function CliveCtlr() {
11 this.d.clivectlr = this;
12 this.c.clivectlr = this;
13 this.userresized = false;
14 this.wsurl = "wss://" + window.location.host + "/ws/" + this.cid;
15 if(this.d.wsaddr) {
16 this.wsurl = this.d.wsaddr + "/ws/" + this.cid;
17 }
18
19 $(this.d).addClass("clivectl");
20 var self = this;
21 // use self here, because post will be bound also to this.d
22 this.post = function(args) {
23 var ws = self.ws;
24 if(!ws){
25 console.log("post: no ws");
26 return nil;
27 }
28 if(!args || !args[0]){
29 console.log("post: no args");
30 return nil;
31 }
32 if(!self.vers) {
33 self.vers = 0;
34 }
35 // cut advances the vers (might del nothing)
36 // this is for text and shouldn't be here.
37 if(args[0] == "eins" || args[0] == "edel") {
38 self.vers++;
39 }
40 var ev = {Id: self.cid, Src: self.id, Vers: self.vers, Args: args};
41 var msg = JSON.stringify(ev);
42 try {
43 self.ws.send(msg);
44 // console.log("posting ", msg);
45 }catch(ex){
46 console.log("post: " + ex);
47 }
48 // if this is a cut, it implies a del and we
49 // must advance our vers, the event didn't
50 // advance the vers.
51 // Same for paste.
52 // this is for text and shouldn't be here.
53 if(args[0] == "ecut" || args[0] == "epaste") {
54 ev.Vers++;
55 }
56 return ev;
57 };
58
59 this.settag = function(t) {
60 if(document.settag) {
61 document.settag(this, t);
62 }
63 };
64
65 this.setdirty = function() {
66 if(document.setdirty) {
67 document.setdirty(this);
68 }
69 };
70
71 this.setclean = function() {
72 if(document.setclean) {
73 document.setclean(this);
74 }
75 };
76
77 this.showcontrol = function() {
78 if(document.showcontrol) {
79 document.showcontrol(this);
80 }
81 };
82
83 this.ws = new WebSocket(this.wsurl);
84 this.ws.onopen = function() {
85 self.post(["id"]);
86 };
87 this.ws.onerror = function(ev) {
88 console.log("ws err", ev);
89 };
90 this.ws.onmessage = function(ev) {
91 var o = JSON.parse(ev.data);
92 if(!o || !o.Id) {
93 console.log("update: no objet id");
94 return;
95 }
96 if(tdebug)console.log("update to", o.Id, o.Args);
97 if(self.apply) {
98 self.apply(o, true);
99 }
100 };
101 this.ws.onclose = function() {
102 console.log("text socket " + self.wsurl+ " closed\n");
103 self.d.replaceWith("<h3>disconnected</h3>");
104 };
105
106 // this is for pg.js, will go.
107 var d0 = this.d.get(0);
108 d0.ws = this.ws;
109 d0.post = this.post;
110 this.d.post = this.post;
111
112 d0.addsize = function(moreless) {
113 if(self.autoresize) {
114 self.autoresize(true, moreless);
115 }
116 };
117 this.d.resizable({
118 handles: 's'
119 }).on('resize', function() {
120 console.log("user resized");
121 self.userresized = true;
122 if(self.mayresize) {
123 self.mayresize(true);
124 }
125 });
126 $(window).resize(function() {
127 console.log("window resized");
128 if(self.mayresize) {
129 self.mayresize(false);
130 }
131 });
132
133
134}
net/ink/js/js.go+32703−32562
@@ -3,443 +3,450 @@ var Files = map[string][]byte{ · 2 unmodified lines
3 "js/pg.js": []byte{3 "js/pg.js": []byte{
4 34,117,115,101,32,115,116,114,105,99,116,34,59,10,47,42,10,4 34,117,115,101,32,115,116,114,105,99,116,34,59,10,47,42,10,
5 32,42,32,99,108,105,118,101,32,105,110,107,32,112,103,32,5 32,42,32,99,108,105,118,101,32,105,110,107,32,112,103,32,
6 116,111,111,108,115,10,42,47,10,10,47,47,32,99,111,110,6 116,111,111,108,115,10,32,42,10,32,42,32,110,101,101,100,
7 116,114,111,108,115,32,109,97,121,32,99,97,108,108,32,116,7 115,32,97,32,114,101,119,114,105,116,101,46,10,32,42,32,
8 104,105,115,32,116,111,32,115,101,116,32,116,104,101,32,105,8 115,104,111,117,108,100,32,100,101,102,105,110,101,32,97,32,
9 99,111,110,32,102,111,114,32,100,105,114,116,121,32,40,97,9 103,108,111,98,97,108,32,99,108,105,118,101,32,111,98,106,
10 110,100,32,103,101,116,32,115,97,118,101,115,32,111,110,32,10 101,99,116,32,116,111,32,99,111,110,116,97,105,110,32,97,
11 99,108,105,99,107,115,41,10,47,47,32,98,117,116,32,116,11 108,108,32,116,104,101,32,99,108,105,118,101,32,103,108,111,
12 104,101,121,32,109,117,115,116,32,105,109,112,108,101,109,101,12 98,97,108,115,44,32,97,110,100,32,103,111,32,102,114,111,
13 110,116,32,116,104,101,32,112,111,115,116,32,109,101,116,104,13 109,32,116,104,101,114,101,46,10,32,42,47,10,10,47,47,
14 111,100,32,111,110,32,116,104,101,32,101,108,101,109,101,110,14 32,99,111,110,116,114,111,108,115,32,109,97,121,32,99,97,
15 116,32,112,97,115,115,101,100,46,10,102,117,110,99,116,105,15 108,108,32,116,104,105,115,32,116,111,32,115,101,116,32,116,
16 111,110,32,115,101,116,100,105,114,116,121,40,101,41,32,123,16 104,101,32,105,99,111,110,32,102,111,114,32,100,105,114,116,
17 10,9,99,111,110,115,111,108,101,46,108,111,103,40,34,100,17 121,32,40,97,110,100,32,103,101,116,32,115,97,118,101,115,
18 105,114,116,121,34,41,59,10,9,118,97,114,32,112,32,61,18 32,111,110,32,99,108,105,99,107,115,41,10,47,47,32,98,
19 32,36,40,101,41,46,99,108,111,115,101,115,116,40,34,46,19 117,116,32,116,104,101,121,32,109,117,115,116,32,105,109,112,
20 112,111,114,116,108,101,116,34,41,59,10,9,105,102,40,33,20 108,101,109,101,110,116,32,116,104,101,32,112,111,115,116,32,
21 112,32,124,124,32,33,112,46,108,101,110,103,116,104,41,32,21 109,101,116,104,111,100,32,111,110,32,116,104,101,32,101,108,
22 123,10,9,9,114,101,116,117,114,110,59,10,9,125,10,9,22 101,109,101,110,116,32,112,97,115,115,101,100,46,10,102,117,
23 118,97,114,32,112,100,32,61,32,112,46,102,105,110,100,40,23 110,99,116,105,111,110,32,115,101,116,100,105,114,116,121,40,
24 34,46,112,111,114,116,108,101,116,45,100,105,114,116,121,34,
25 41,59,10,9,105,102,40,112,100,46,108,101,110,103,116,104,
26 32,62,32,48,41,32,123,10,9,9,99,111,110,115,111,108,
27 101,46,108,111,103,40,34,97,108,114,101,97,100,121,32,100,
28 105,114,116,121,34,44,32,112,100,41,59,10,9,9,114,101,
29 116,117,114,110,59,10,9,125,10,9,118,97,114,32,112,109,
30 97,120,32,61,32,112,46,102,105,110,100,40,34,46,112,111,
31 114,116,108,101,116,45,109,97,120,34,41,59,10,9,36,40,
32 34,60,115,112,97,110,32,99,108,97,115,115,61,39,117,105,
33 45,105,99,111,110,32,105,110,108,105,110,101,32,117,105,45,
34 105,99,111,110,45,100,105,115,107,32,112,111,114,116,108,101,
35 116,45,100,105,114,116,121,39,62,60,47,115,112,97,110,62,
36 34,41,46,105,110,115,101,114,116,66,101,102,111,114,101,40,
37 112,109,97,120,41,59,10,9,112,109,97,120,46,99,108,111,
38 115,101,115,116,40,34,46,112,111,114,116,108,101,116,45,104,
39 101,97,100,101,114,34,41,46,99,115,115,40,39,99,111,108,
40 111,114,39,44,32,39,98,108,117,101,39,41,59,10,9,112,
41 46,102,105,110,100,40,34,46,112,111,114,116,108,101,116,45,
42 100,105,114,116,121,34,41,46,99,108,105,99,107,40,102,117,
43 110,99,116,105,111,110,40,101,118,41,32,123,10,9,9,101,
44 118,46,115,116,111,112,80,114,111,112,97,103,97,116,105,111,
45 110,40,41,59,10,9,9,101,46,112,111,115,116,40,91,34,
46 115,97,118,101,34,93,41,59,10,9,125,41,59,10,125,10,
47 10,47,47,32,76,105,107,101,32,115,101,116,100,105,114,116,
48 121,10,102,117,110,99,116,105,111,110,32,115,101,116,99,108,
49 101,97,110,40,101,41,32,123,10,9,118,97,114,32,112,32,
50 61,32,36,40,101,41,46,99,108,111,115,101,115,116,40,34,
51 46,112,111,114,116,108,101,116,34,41,59,10,9,105,102,40,
52 33,112,32,124,124,32,33,112,46,108,101,110,103,116,104,41,
53 32,123,10,9,9,114,101,116,117,114,110,59,10,9,125,10,
54 9,112,46,102,105,110,100,40,34,46,112,111,114,116,108,101,
55 116,45,100,105,114,116,121,34,41,46,99,108,111,115,101,115,
56 116,40,34,46,112,111,114,116,108,101,116,45,104,101,97,100,
57 101,114,34,41,46,99,115,115,40,39,99,111,108,111,114,39,
58 44,32,39,98,108,97,99,107,39,41,59,10,9,112,46,102,
59 105,110,100,40,34,46,112,111,114,116,108,101,116,45,100,105,
60 114,116,121,34,41,46,114,101,109,111,118,101,40,41,59,10,
61 125,10,10,118,97,114,32,111,108,100,102,111,99,117,115,32,
62 61,32,117,110,100,101,102,105,110,101,100,59,10,10,102,117,
63 110,99,116,105,111,110,32,115,101,116,102,111,99,117,115,40,
64 101,41,32,123,10,9,99,111,110,115,111,108,101,46,108,111,24 101,41,32,123,10,9,99,111,110,115,111,108,101,46,108,111,
65 103,40,34,102,111,99,117,115,34,41,59,10,9,118,97,114,25 103,40,34,100,105,114,116,121,34,41,59,10,9,118,97,114,
66 32,112,32,61,32,36,40,101,41,46,99,108,111,115,101,115,26 32,112,32,61,32,36,40,101,41,46,99,108,111,115,101,115,
67 116,40,34,46,112,111,114,116,108,101,116,34,41,59,10,9,27 116,40,34,46,112,111,114,116,108,101,116,34,41,59,10,9,
68 105,102,40,33,112,32,124,124,32,33,112,46,108,101,110,103,28 105,102,40,33,112,32,124,124,32,33,112,46,108,101,110,103,
69 116,104,41,32,123,10,9,9,114,101,116,117,114,110,59,10,29 116,104,41,32,123,10,9,9,114,101,116,117,114,110,59,10,
70 9,125,10,9,118,97,114,32,112,109,97,120,32,61,32,112,30 9,125,10,9,118,97,114,32,112,100,32,61,32,112,46,102,
71 46,102,105,110,100,40,34,46,112,111,114,116,108,101,116,45,31 105,110,100,40,34,46,112,111,114,116,108,101,116,45,100,105,
72 109,97,120,34,41,59,10,9,105,102,40,111,108,100,102,111,32 114,116,121,34,41,59,10,9,105,102,40,112,100,46,108,101,
73 99,117,115,41,32,123,10,9,9,116,114,121,32,123,10,9,33 110,103,116,104,32,62,32,48,41,32,123,10,9,9,99,111,
74 9,9,111,108,100,102,111,99,117,115,46,99,108,111,115,101,34 110,115,111,108,101,46,108,111,103,40,34,97,108,114,101,97,
75 115,116,40,34,46,112,111,114,116,108,101,116,45,104,101,97,35 100,121,32,100,105,114,116,121,34,44,32,112,100,41,59,10,
76 100,101,114,34,41,46,99,115,115,40,39,98,97,99,107,103,36 9,9,114,101,116,117,114,110,59,10,9,125,10,9,118,97,
77 114,111,117,110,100,45,99,111,108,111,114,39,44,32,39,35,37 114,32,112,109,97,120,32,61,32,112,46,102,105,110,100,40,
78 67,67,54,54,48,48,39,41,59,10,9,9,125,99,97,116,38 34,46,112,111,114,116,108,101,116,45,109,97,120,34,41,59,
79 99,104,40,101,120,41,32,123,10,9,9,9,99,111,110,115,39 10,9,36,40,34,60,115,112,97,110,32,99,108,97,115,115,
80 111,108,101,46,108,111,103,40,101,120,41,59,10,9,9,125,40 61,39,117,105,45,105,99,111,110,32,105,110,108,105,110,101,
81 10,9,125,10,9,112,109,97,120,46,99,108,111,115,101,115,41 32,117,105,45,105,99,111,110,45,100,105,115,107,32,112,111,
82 116,40,34,46,112,111,114,116,108,101,116,45,104,101,97,100,42 114,116,108,101,116,45,100,105,114,116,121,39,62,60,47,115,
83 101,114,34,41,46,99,115,115,40,39,98,97,99,107,103,114,43 112,97,110,62,34,41,46,105,110,115,101,114,116,66,101,102,
84 111,117,110,100,45,99,111,108,111,114,39,44,32,39,35,69,44 111,114,101,40,112,109,97,120,41,59,10,9,112,109,97,120,
85 69,56,56,48,48,39,41,59,10,9,111,108,100,102,111,99,45 46,99,108,111,115,101,115,116,40,34,46,112,111,114,116,108,
86 117,115,32,61,32,112,109,97,120,59,10,125,10,10,102,117,46 101,116,45,104,101,97,100,101,114,34,41,46,99,115,115,40,
87 110,99,116,105,111,110,32,115,99,114,111,108,108,99,111,108,47 39,99,111,108,111,114,39,44,32,39,98,108,117,101,39,41,
88 40,41,32,123,10,9,118,97,114,32,99,104,105,108,100,32,48 59,10,9,112,46,102,105,110,100,40,34,46,112,111,114,116,
89 61,32,36,40,116,104,105,115,41,46,102,105,110,100,40,34,49 108,101,116,45,100,105,114,116,121,34,41,46,99,108,105,99,
90 46,112,111,114,116,108,101,116,34,41,46,102,105,114,115,116,50 107,40,102,117,110,99,116,105,111,110,40,101,118,41,32,123,
91 40,41,59,10,9,99,111,110,115,111,108,101,46,108,111,103,51 10,9,9,101,118,46,115,116,111,112,80,114,111,112,97,103,
92 40,34,115,99,114,111,108,108,32,34,44,32,99,104,105,108,52 97,116,105,111,110,40,41,59,10,9,9,101,46,112,111,115,
93 100,41,59,10,9,36,40,116,104,105,115,41,46,97,112,112,53 116,40,91,34,115,97,118,101,34,93,41,59,10,9,125,41,
94 101,110,100,40,99,104,105,108,100,41,59,10,125,10,10,47,54 59,10,125,10,10,47,47,32,76,105,107,101,32,115,101,116,
95 47,32,76,105,107,101,32,115,101,116,99,108,101,97,110,47,55 100,105,114,116,121,10,102,117,110,99,116,105,111,110,32,115,
96 100,105,114,116,121,44,32,98,117,116,32,117,112,100,97,116,56 101,116,99,108,101,97,110,40,101,41,32,123,10,9,118,97,
97 101,115,32,116,104,101,32,116,97,103,10,102,117,110,99,116,57 114,32,112,32,61,32,36,40,101,41,46,99,108,111,115,101,
98 105,111,110,32,115,101,116,116,97,103,40,101,44,32,116,97,58 115,116,40,34,46,112,111,114,116,108,101,116,34,41,59,10,
99 103,41,32,123,10,9,118,97,114,32,112,32,61,32,36,40,59 9,105,102,40,33,112,32,124,124,32,33,112,46,108,101,110,
100 101,41,46,99,108,111,115,101,115,116,40,34,46,112,111,114,60 103,116,104,41,32,123,10,9,9,114,101,116,117,114,110,59,
101 116,108,101,116,34,41,59,10,9,105,102,40,33,112,32,124,61 10,9,125,10,9,112,46,102,105,110,100,40,34,46,112,111,
102 124,32,33,112,46,108,101,110,103,116,104,41,32,123,10,9,62 114,116,108,101,116,45,100,105,114,116,121,34,41,46,99,108,
103 9,114,101,116,117,114,110,59,10,9,125,10,9,118,97,114,63 111,115,101,115,116,40,34,46,112,111,114,116,108,101,116,45,
104 32,116,116,32,61,32,112,46,102,105,110,100,40,39,46,112,64 104,101,97,100,101,114,34,41,46,99,115,115,40,39,99,111,
105 111,114,116,108,101,116,45,104,101,97,100,101,114,39,41,46,65 108,111,114,39,44,32,39,98,108,97,99,107,39,41,59,10,
106 102,105,110,100,40,34,116,116,34,41,59,10,9,116,116,46,66 9,112,46,102,105,110,100,40,34,46,112,111,114,116,108,101,
107 104,116,109,108,40,116,97,103,41,59,10,9,114,101,116,117,67 116,45,100,105,114,116,121,34,41,46,114,101,109,111,118,101,
108 114,110,59,10,9,116,116,46,103,101,116,87,111,114,100,66,68 40,41,59,10,125,10,10,118,97,114,32,111,108,100,102,111,
109 121,69,118,101,110,116,40,39,99,108,105,99,107,39,44,32,69 99,117,115,32,61,32,117,110,100,101,102,105,110,101,100,59,
110 102,117,110,99,116,105,111,110,32,116,97,103,99,108,105,99,70 10,10,102,117,110,99,116,105,111,110,32,115,101,116,102,111,
111 107,40,101,118,44,32,119,111,114,100,41,32,123,10,9,9,71 99,117,115,40,101,41,32,123,10,9,99,111,110,115,111,108,
112 9,101,118,46,115,116,111,112,80,114,111,112,97,103,97,116,72 101,46,108,111,103,40,34,102,111,99,117,115,34,41,59,10,
113 105,111,110,40,41,59,10,9,9,9,99,111,110,115,111,108,73 9,118,97,114,32,112,32,61,32,36,40,101,41,46,99,108,
114 101,46,108,111,103,40,34,116,97,103,32,99,108,105,99,107,74 111,115,101,115,116,40,34,46,112,111,114,116,108,101,116,34,
115 32,111,110,32,34,44,32,101,118,44,32,119,111,114,100,41,75 41,59,10,9,105,102,40,33,112,32,124,124,32,33,112,46,
116 59,10,9,9,9,101,46,112,111,115,116,40,91,34,116,97,76 108,101,110,103,116,104,41,32,123,10,9,9,114,101,116,117,
117 103,34,44,32,119,111,114,100,93,41,59,10,9,9,125,41,77 114,110,59,10,9,125,10,9,118,97,114,32,112,109,97,120,
118 59,10,9,10,125,10,10,47,47,32,109,111,118,101,32,116,78 32,61,32,112,46,102,105,110,100,40,34,46,112,111,114,116,
119 104,101,32,99,111,110,116,114,111,108,32,116,111,32,116,104,79 108,101,116,45,109,97,120,34,41,59,10,9,105,102,40,111,
120 101,32,115,116,97,114,116,32,111,102,32,116,104,101,32,99,80 108,100,102,111,99,117,115,41,32,123,10,9,9,116,114,121,
121 111,108,117,109,110,10,102,117,110,99,116,105,111,110,32,115,81 32,123,10,9,9,9,111,108,100,102,111,99,117,115,46,99,
122 104,111,119,99,111,110,116,114,111,108,40,101,44,32,116,97,82 108,111,115,101,115,116,40,34,46,112,111,114,116,108,101,116,
123 103,41,32,123,10,9,118,97,114,32,112,32,61,32,36,40,83 45,104,101,97,100,101,114,34,41,46,99,115,115,40,39,98,
124 101,41,46,99,108,111,115,101,115,116,40,34,46,112,111,114,84 97,99,107,103,114,111,117,110,100,45,99,111,108,111,114,39,
125 116,108,101,116,34,41,59,10,9,105,102,40,33,112,32,124,85 44,32,39,35,67,67,54,54,48,48,39,41,59,10,9,9,
126 124,32,33,112,46,108,101,110,103,116,104,41,32,123,10,9,86 125,99,97,116,99,104,40,101,120,41,32,123,10,9,9,9,
127 9,114,101,116,117,114,110,59,10,9,125,10,9,118,97,114,87 99,111,110,115,111,108,101,46,108,111,103,40,101,120,41,59,
128 32,99,32,61,32,112,46,99,108,111,115,101,115,116,40,34,88 10,9,9,125,10,9,125,10,9,112,109,97,120,46,99,108,
129 46,99,111,108,117,109,110,34,41,59,10,9,105,102,40,33,89 111,115,101,115,116,40,34,46,112,111,114,116,108,101,116,45,
130 99,41,32,123,10,9,9,114,101,116,117,114,110,59,10,9,90 104,101,97,100,101,114,34,41,46,99,115,115,40,39,98,97,
131 125,10,9,36,40,99,41,46,102,105,110,100,40,34,46,112,91 99,107,103,114,111,117,110,100,45,99,111,108,111,114,39,44,
132 111,114,116,108,101,116,34,41,46,102,105,114,115,116,40,41,92 32,39,35,69,69,56,56,48,48,39,41,59,10,9,111,108,
133 46,98,101,102,111,114,101,40,112,41,59,10,125,10,10,10,93 100,102,111,99,117,115,32,61,32,112,109,97,120,59,10,125,
134 36,40,102,117,110,99,116,105,111,110,40,41,123,10,9,100,94 10,10,102,117,110,99,116,105,111,110,32,115,99,114,111,108,
135 111,99,117,109,101,110,116,46,115,101,116,100,105,114,116,121,95 108,99,111,108,40,41,32,123,10,9,118,97,114,32,99,104,
136 32,61,32,115,101,116,100,105,114,116,121,59,10,9,100,111,96 105,108,100,32,61,32,36,40,116,104,105,115,41,46,102,105,
137 99,117,109,101,110,116,46,115,101,116,102,111,99,117,115,32,97 110,100,40,34,46,112,111,114,116,108,101,116,34,41,46,102,
138 61,32,115,101,116,102,111,99,117,115,59,10,9,100,111,99,98 105,114,115,116,40,41,59,10,9,99,111,110,115,111,108,101,
139 117,109,101,110,116,46,115,101,116,99,108,101,97,110,32,61,99 46,108,111,103,40,34,115,99,114,111,108,108,32,34,44,32,
140 32,115,101,116,99,108,101,97,110,59,10,9,100,111,99,117,100 99,104,105,108,100,41,59,10,9,36,40,116,104,105,115,41,
141 109,101,110,116,46,115,101,116,116,97,103,32,61,32,115,101,101 46,97,112,112,101,110,100,40,99,104,105,108,100,41,59,10,
142 116,116,97,103,59,10,9,100,111,99,117,109,101,110,116,46,102 125,10,10,47,47,32,76,105,107,101,32,115,101,116,99,108,
143 115,104,111,119,99,111,110,116,114,111,108,32,61,32,115,104,103 101,97,110,47,100,105,114,116,121,44,32,98,117,116,32,117,
144 111,119,99,111,110,116,114,111,108,59,10,125,41,59,10,10,104 112,100,97,116,101,115,32,116,104,101,32,116,97,103,10,102,
145 47,47,32,101,108,32,105,115,32,97,32,112,111,114,116,108,105 117,110,99,116,105,111,110,32,115,101,116,116,97,103,40,101,
146 101,116,10,47,47,32,114,101,109,111,118,101,40,41,32,105,106 44,32,116,97,103,41,32,123,10,9,118,97,114,32,112,32,
147 115,32,110,111,116,32,101,110,111,117,103,104,44,32,119,101,107 61,32,36,40,101,41,46,99,108,111,115,101,115,116,40,34,
148 32,109,117,115,116,32,99,108,111,115,101,32,116,104,101,32,108 46,112,111,114,116,108,101,116,34,41,59,10,9,105,102,40,
149 119,115,40,115,41,10,102,117,110,99,116,105,111,110,32,114,109 33,112,32,124,124,32,33,112,46,108,101,110,103,116,104,41,
150 101,109,111,118,101,99,111,110,116,114,111,108,40,101,108,44,110 32,123,10,9,9,114,101,116,117,114,110,59,10,9,125,10,
151 32,110,101,101,100,112,111,115,116,41,32,123,10,9,99,111,111 9,118,97,114,32,116,116,32,61,32,112,46,102,105,110,100,
152 110,115,111,108,101,46,108,111,103,40,34,99,108,111,115,105,112 40,39,46,112,111,114,116,108,101,116,45,104,101,97,100,101,
153 110,103,34,44,32,101,108,41,59,10,9,105,102,40,33,101,113 114,39,41,46,102,105,110,100,40,34,116,116,34,41,59,10,
154 108,41,32,123,10,9,9,114,101,116,117,114,110,59,10,9,114 9,116,116,46,104,116,109,108,40,116,97,103,41,59,10,9,
155 125,10,9,36,40,101,108,41,46,102,105,110,100,40,34,46,115 114,101,116,117,114,110,59,10,9,116,116,46,103,101,116,87,
156 104,97,115,119,115,34,41,46,101,97,99,104,40,102,117,110,116 111,114,100,66,121,69,118,101,110,116,40,39,99,108,105,99,
157 99,116,105,111,110,40,41,32,123,10,9,9,105,102,40,33,117 107,39,44,32,102,117,110,99,116,105,111,110,32,116,97,103,
158 116,104,105,115,46,119,115,41,32,123,10,9,9,9,99,111,118 99,108,105,99,107,40,101,118,44,32,119,111,114,100,41,32,
159 110,115,111,108,101,46,108,111,103,40,34,66,85,71,58,32,119 123,10,9,9,9,101,118,46,115,116,111,112,80,114,111,112,
160 104,97,115,119,115,32,119,47,111,32,119,115,34,41,59,10,120 97,103,97,116,105,111,110,40,41,59,10,9,9,9,99,111,
161 9,9,9,99,111,110,115,111,108,101,46,108,111,103,40,34,121 110,115,111,108,101,46,108,111,103,40,34,116,97,103,32,99,
162 100,105,100,110,39,116,32,115,101,116,32,100,46,103,101,116,122 108,105,99,107,32,111,110,32,34,44,32,101,118,44,32,119,
163 40,48,41,46,119,115,63,34,41,59,10,9,9,125,32,101,123 111,114,100,41,59,10,9,9,9,101,46,112,111,115,116,40,
164 108,115,101,32,123,10,9,9,9,105,102,40,110,101,101,100,124 91,34,116,97,103,34,44,32,119,111,114,100,93,41,59,10,
165 112,111,115,116,32,38,38,32,116,104,105,115,46,112,111,115,125 9,9,125,41,59,10,9,10,125,10,10,47,47,32,109,111,
166 116,41,32,123,10,9,9,9,9,116,104,105,115,46,112,111,126 118,101,32,116,104,101,32,99,111,110,116,114,111,108,32,116,
167 115,116,40,91,34,113,117,105,116,34,93,41,59,10,9,9,127 111,32,116,104,101,32,115,116,97,114,116,32,111,102,32,116,
168 9,125,10,9,9,9,118,97,114,32,112,103,105,100,32,61,128 104,101,32,99,111,108,117,109,110,10,102,117,110,99,116,105,
169 32,36,40,101,108,41,46,97,116,116,114,40,39,112,103,105,129 111,110,32,115,104,111,119,99,111,110,116,114,111,108,40,101,
170 100,39,41,10,9,9,9,105,102,40,110,101,101,100,112,111,130 44,32,116,97,103,41,32,123,10,9,118,97,114,32,112,32,
171 115,116,32,38,38,32,112,103,105,100,41,32,123,10,9,9,131 61,32,36,40,101,41,46,99,108,111,115,101,115,116,40,34,
172 9,9,100,111,99,117,109,101,110,116,46,112,111,115,116,40,132 46,112,111,114,116,108,101,116,34,41,59,10,9,105,102,40,
173 91,34,113,117,105,116,34,44,32,112,103,105,100,93,41,59,133 33,112,32,124,124,32,33,112,46,108,101,110,103,116,104,41,
174 10,9,9,9,125,10,9,9,9,116,104,105,115,46,119,115,134 32,123,10,9,9,114,101,116,117,114,110,59,10,9,125,10,
175 46,99,108,111,115,101,40,41,59,10,9,9,125,10,9,125,135 9,118,97,114,32,99,32,61,32,112,46,99,108,111,115,101,
176 41,59,10,9,101,108,46,114,101,109,111,118,101,40,41,59,136 115,116,40,34,46,99,111,108,117,109,110,34,41,59,10,9,
177 10,125,10,10,102,117,110,99,116,105,111,110,32,109,97,120,137 105,102,40,33,99,41,32,123,10,9,9,114,101,116,117,114,
178 112,108,40,112,108,41,32,123,10,9,118,97,114,32,105,115,138 110,59,10,9,125,10,9,36,40,99,41,46,102,105,110,100,
179 109,105,110,32,61,32,102,97,108,115,101,59,10,9,118,97,139 40,34,46,112,111,114,116,108,101,116,34,41,46,102,105,114,
180 114,32,105,99,111,110,32,61,32,36,40,112,108,41,46,102,140 115,116,40,41,46,98,101,102,111,114,101,40,112,41,59,10,
181 105,110,100,40,34,46,112,111,114,116,108,101,116,45,116,111,141 125,10,10,10,36,40,102,117,110,99,116,105,111,110,40,41,
182 103,103,108,101,34,41,46,102,105,114,115,116,40,41,59,10,142 123,10,9,100,111,99,117,109,101,110,116,46,115,101,116,100,
183 9,105,102,40,33,105,99,111,110,46,104,97,115,67,108,97,143 105,114,116,121,32,61,32,115,101,116,100,105,114,116,121,59,
184 115,115,40,34,117,105,45,105,99,111,110,45,112,108,117,115,144 10,9,100,111,99,117,109,101,110,116,46,115,101,116,102,111,
185 34,41,41,123,10,9,9,114,101,116,117,114,110,32,102,97,145 99,117,115,32,61,32,115,101,116,102,111,99,117,115,59,10,
186 108,115,101,59,10,9,125,10,9,99,111,110,115,111,108,101,146 9,100,111,99,117,109,101,110,116,46,115,101,116,99,108,101,
187 46,108,111,103,40,34,109,97,120,112,108,32,34,44,32,105,147 97,110,32,61,32,115,101,116,99,108,101,97,110,59,10,9,
188 99,111,110,41,59,10,9,36,40,112,108,41,46,102,105,110,148 100,111,99,117,109,101,110,116,46,115,101,116,116,97,103,32,
189 100,40,39,46,112,111,114,116,108,101,116,45,99,111,110,116,149 61,32,115,101,116,116,97,103,59,10,9,100,111,99,117,109,
190 101,110,116,39,41,46,116,111,103,103,108,101,40,41,59,10,150 101,110,116,46,115,104,111,119,99,111,110,116,114,111,108,32,
191 9,105,99,111,110,46,116,111,103,103,108,101,67,108,97,115,151 61,32,115,104,111,119,99,111,110,116,114,111,108,59,10,125,
192 115,40,34,117,105,45,105,99,111,110,45,109,105,110,117,115,152 41,59,10,10,47,47,32,101,108,32,105,115,32,97,32,112,
193 32,117,105,45,105,99,111,110,45,112,108,117,115,34,41,59,153 111,114,116,108,101,116,10,47,47,32,114,101,109,111,118,101,
194 10,9,112,108,46,102,105,110,100,40,34,46,99,97,110,97,154 40,41,32,105,115,32,110,111,116,32,101,110,111,117,103,104,
195 100,100,115,105,122,101,34,41,46,101,97,99,104,40,102,117,155 44,32,119,101,32,109,117,115,116,32,99,108,111,115,101,32,
196 110,99,116,105,111,110,40,41,32,123,10,9,9,105,102,40,156 116,104,101,32,119,115,40,115,41,10,102,117,110,99,116,105,
197 116,104,105,115,46,97,100,100,115,105,122,101,41,32,123,10,157 111,110,32,114,101,109,111,118,101,99,111,110,116,114,111,108,
198 9,9,9,116,104,105,115,46,97,100,100,115,105,122,101,40,158 40,101,108,44,32,110,101,101,100,112,111,115,116,41,32,123,
199 48,41,59,10,9,9,125,10,9,125,41,59,10,9,114,101,159 10,9,99,111,110,115,111,108,101,46,108,111,103,40,34,99,
200 116,117,114,110,32,116,114,117,101,59,10,125,10,10,102,117,160 108,111,115,105,110,103,34,44,32,101,108,41,59,10,9,105,
201 110,99,116,105,111,110,32,117,112,100,112,111,114,116,108,101,161 102,40,33,101,108,41,32,123,10,9,9,114,101,116,117,114,
202 116,115,40,41,32,123,10,9,118,97,114,32,112,115,32,61,162 110,59,10,9,125,10,9,36,40,101,108,41,46,102,105,110,
203 32,36,40,34,46,112,111,114,116,108,101,116,34,41,10,9,163 100,40,34,46,99,108,105,118,101,99,116,108,34,41,46,101,
204 102,111,114,40,118,97,114,32,105,32,61,32,48,59,32,105,164 97,99,104,40,102,117,110,99,116,105,111,110,40,41,32,123,
205 32,60,32,112,115,46,108,101,110,103,116,104,59,32,105,43,165 10,9,9,105,102,40,33,116,104,105,115,46,119,115,41,32,
206 43,41,32,123,10,9,9,118,97,114,32,112,32,61,32,112,166 123,10,9,9,9,99,111,110,115,111,108,101,46,108,111,103,
207 115,91,105,93,59,10,9,9,105,102,40,33,112,46,99,111,167 40,34,66,85,71,58,32,99,108,105,118,101,99,116,108,32,
208 110,102,105,103,117,114,101,100,41,32,123,10,9,9,9,112,168 119,47,111,32,119,115,34,41,59,10,9,9,9,99,111,110,
209 46,99,111,110,102,105,103,117,114,101,100,32,61,32,116,114,169 115,111,108,101,46,108,111,103,40,34,100,105,100,110,39,116,
210 117,101,59,10,9,9,125,32,101,108,115,101,32,123,10,9,170 32,115,101,116,32,100,46,103,101,116,40,48,41,46,119,115,
211 9,9,99,111,110,116,105,110,117,101,59,10,9,9,125,10,171 63,34,41,59,10,9,9,125,32,101,108,115,101,32,123,10,
212 9,9,118,97,114,32,104,100,114,32,61,32,36,40,112,41,172 9,9,9,105,102,40,110,101,101,100,112,111,115,116,32,38,
213 46,97,100,100,67,108,97,115,115,40,34,117,105,45,119,105,173 38,32,116,104,105,115,46,112,111,115,116,41,32,123,10,9,
214 100,103,101,116,32,117,105,45,119,105,100,103,101,116,45,99,174 9,9,9,116,104,105,115,46,112,111,115,116,40,91,34,113,
215 111,110,116,101,110,116,32,117,105,45,104,101,108,112,101,114,175 117,105,116,34,93,41,59,10,9,9,9,125,10,9,9,9,
216 45,99,108,101,97,114,102,105,120,32,117,105,45,99,111,114,176 118,97,114,32,112,103,105,100,32,61,32,36,40,101,108,41,
217 110,101,114,45,97,108,108,34,41,10,9,9,9,46,102,105,177 46,97,116,116,114,40,39,112,103,105,100,39,41,10,9,9,
218 110,100,40,34,46,112,111,114,116,108,101,116,45,104,101,97,178 9,105,102,40,110,101,101,100,112,111,115,116,32,38,38,32,
219 100,101,114,34,41,59,10,9,9,36,40,104,100,114,41,46,179 112,103,105,100,41,32,123,10,9,9,9,9,100,111,99,117,
220 111,110,40,39,99,108,105,99,107,39,44,32,102,117,110,99,180 109,101,110,116,46,112,111,115,116,40,91,34,113,117,105,116,
221 116,105,111,110,40,101,41,32,123,10,9,9,9,99,111,110,181 34,44,32,112,103,105,100,93,41,59,10,9,9,9,125,10,
222 115,111,108,101,46,108,111,103,40,34,116,97,103,32,99,108,182 9,9,9,116,104,105,115,46,119,115,46,99,108,111,115,101,
223 105,99,107,34,41,59,10,9,9,9,115,99,114,111,108,108,183 40,41,59,10,9,9,125,10,9,125,41,59,10,9,101,108,
224 99,111,108,46,99,97,108,108,40,36,40,116,104,105,115,41,184 46,114,101,109,111,118,101,40,41,59,10,125,10,10,102,117,
225 46,99,108,111,115,101,115,116,40,34,46,99,111,108,117,109,185 110,99,116,105,111,110,32,109,97,120,112,108,40,112,108,41,
226 110,34,41,44,32,101,41,59,10,9,9,125,41,59,10,9,186 32,123,10,9,118,97,114,32,105,115,109,105,110,32,61,32,
227 9,104,100,114,46,97,100,100,67,108,97,115,115,40,34,117,187 102,97,108,115,101,59,10,9,118,97,114,32,105,99,111,110,
228 105,45,119,105,100,103,101,116,45,104,101,97,100,101,114,32,188 32,61,32,36,40,112,108,41,46,102,105,110,100,40,34,46,
229 117,105,45,99,111,114,110,101,114,45,97,108,108,34,41,10,189 112,111,114,116,108,101,116,45,116,111,103,103,108,101,34,41,
230 9,9,46,112,114,101,112,101,110,100,40,34,60,115,112,97,190 46,102,105,114,115,116,40,41,59,10,9,105,102,40,33,105,
231 110,32,99,108,97,115,115,61,39,117,105,45,105,99,111,110,191 99,111,110,46,104,97,115,67,108,97,115,115,40,34,117,105,
232 32,105,110,108,105,110,101,32,117,105,45,105,99,111,110,45,192 45,105,99,111,110,45,112,108,117,115,34,41,41,123,10,9,
233 109,105,110,117,115,32,112,111,114,116,108,101,116,45,116,111,193 9,114,101,116,117,114,110,32,102,97,108,115,101,59,10,9,
234 103,103,108,101,39,62,60,47,115,112,97,110,62,34,41,10,194 125,10,9,99,111,110,115,111,108,101,46,108,111,103,40,34,
235 9,9,46,112,114,101,112,101,110,100,40,34,60,115,112,97,195 109,97,120,112,108,32,34,44,32,105,99,111,110,41,59,10,
236 110,32,99,108,97,115,115,61,39,117,105,45,105,99,111,110,196 9,36,40,112,108,41,46,102,105,110,100,40,39,46,112,111,
237 32,105,110,108,105,110,101,32,117,105,45,105,99,111,110,45,197 114,116,108,101,116,45,99,111,110,116,101,110,116,39,41,46,
238 116,114,105,97,110,103,108,101,45,50,45,110,45,115,32,112,198 116,111,103,103,108,101,40,41,59,10,9,105,99,111,110,46,
239 111,114,116,108,101,116,45,105,110,99,114,50,39,62,60,47,199 116,111,103,103,108,101,67,108,97,115,115,40,34,117,105,45,
200 105,99,111,110,45,109,105,110,117,115,32,117,105,45,105,99,
201 111,110,45,112,108,117,115,34,41,59,10,9,112,108,46,102,
202 105,110,100,40,34,46,99,108,105,118,101,99,116,108,34,41,
203 46,101,97,99,104,40,102,117,110,99,116,105,111,110,40,41,
204 32,123,10,9,9,105,102,40,116,104,105,115,46,97,100,100,
205 115,105,122,101,41,32,123,10,9,9,9,116,104,105,115,46,
206 97,100,100,115,105,122,101,40,48,41,59,10,9,9,125,10,
207 9,125,41,59,10,9,114,101,116,117,114,110,32,116,114,117,
208 101,59,10,125,10,10,102,117,110,99,116,105,111,110,32,117,
209 112,100,112,111,114,116,108,101,116,115,40,41,32,123,10,9,
210 118,97,114,32,112,115,32,61,32,36,40,34,46,112,111,114,
211 116,108,101,116,34,41,10,9,102,111,114,40,118,97,114,32,
212 105,32,61,32,48,59,32,105,32,60,32,112,115,46,108,101,
213 110,103,116,104,59,32,105,43,43,41,32,123,10,9,9,118,
214 97,114,32,112,32,61,32,112,115,91,105,93,59,10,9,9,
215 105,102,40,33,112,46,99,111,110,102,105,103,117,114,101,100,
216 41,32,123,10,9,9,9,112,46,99,111,110,102,105,103,117,
217 114,101,100,32,61,32,116,114,117,101,59,10,9,9,125,32,
218 101,108,115,101,32,123,10,9,9,9,99,111,110,116,105,110,
219 117,101,59,10,9,9,125,10,9,9,118,97,114,32,104,100,
220 114,32,61,32,36,40,112,41,46,97,100,100,67,108,97,115,
221 115,40,34,117,105,45,119,105,100,103,101,116,32,117,105,45,
222 119,105,100,103,101,116,45,99,111,110,116,101,110,116,32,117,
223 105,45,104,101,108,112,101,114,45,99,108,101,97,114,102,105,
224 120,32,117,105,45,99,111,114,110,101,114,45,97,108,108,34,
225 41,10,9,9,9,46,102,105,110,100,40,34,46,112,111,114,
226 116,108,101,116,45,104,101,97,100,101,114,34,41,59,10,9,
227 9,36,40,104,100,114,41,46,111,110,40,39,99,108,105,99,
228 107,39,44,32,102,117,110,99,116,105,111,110,40,101,41,32,
229 123,10,9,9,9,99,111,110,115,111,108,101,46,108,111,103,
230 40,34,116,97,103,32,99,108,105,99,107,34,41,59,10,9,
231 9,9,115,99,114,111,108,108,99,111,108,46,99,97,108,108,
232 40,36,40,116,104,105,115,41,46,99,108,111,115,101,115,116,
233 40,34,46,99,111,108,117,109,110,34,41,44,32,101,41,59,
234 10,9,9,125,41,59,10,9,9,104,100,114,46,97,100,100,
235 67,108,97,115,115,40,34,117,105,45,119,105,100,103,101,116,
236 45,104,101,97,100,101,114,32,117,105,45,99,111,114,110,101,
237 114,45,97,108,108,34,41,10,9,9,46,112,114,101,112,101,
238 110,100,40,34,60,115,112,97,110,32,99,108,97,115,115,61,
239 39,117,105,45,105,99,111,110,32,105,110,108,105,110,101,32,
240 117,105,45,105,99,111,110,45,109,105,110,117,115,32,112,111,
241 114,116,108,101,116,45,116,111,103,103,108,101,39,62,60,47,
240 115,112,97,110,62,34,41,10,9,9,46,112,114,101,112,101,242 115,112,97,110,62,34,41,10,9,9,46,112,114,101,112,101,
241 110,100,40,34,60,115,112,97,110,32,99,108,97,115,115,61,243 110,100,40,34,60,115,112,97,110,32,99,108,97,115,115,61,
242 39,117,105,45,105,99,111,110,32,105,110,108,105,110,101,32,244 39,117,105,45,105,99,111,110,32,105,110,108,105,110,101,32,
243 117,105,45,105,99,111,110,45,116,114,105,97,110,103,108,101,245 117,105,45,105,99,111,110,45,116,114,105,97,110,103,108,101,
244 45,49,45,110,32,112,111,114,116,108,101,116,45,100,101,99,246 45,50,45,110,45,115,32,112,111,114,116,108,101,116,45,105,
245 114,39,62,60,47,115,112,97,110,62,34,41,10,9,9,46,247 110,99,114,50,39,62,60,47,115,112,97,110,62,34,41,10,
246 112,114,101,112,101,110,100,40,34,60,115,112,97,110,32,99,248 9,9,46,112,114,101,112,101,110,100,40,34,60,115,112,97,
247 108,97,115,115,61,39,117,105,45,105,99,111,110,32,105,110,249 110,32,99,108,97,115,115,61,39,117,105,45,105,99,111,110,
248 108,105,110,101,32,117,105,45,105,99,111,110,45,116,114,105,250 32,105,110,108,105,110,101,32,117,105,45,105,99,111,110,45,
249 97,110,103,108,101,45,49,45,115,32,112,111,114,116,108,101,251 116,114,105,97,110,103,108,101,45,49,45,110,32,112,111,114,
250 116,45,105,110,99,114,39,62,60,47,115,112,97,110,62,34,252 116,108,101,116,45,100,101,99,114,39,62,60,47,115,112,97,
251 41,10,9,9,46,112,114,101,112,101,110,100,40,34,60,115,253 110,62,34,41,10,9,9,46,112,114,101,112,101,110,100,40,
252 112,97,110,32,99,108,97,115,115,61,39,117,105,45,105,99,254 34,60,115,112,97,110,32,99,108,97,115,115,61,39,117,105,
253 111,110,32,105,110,108,105,110,101,32,117,105,45,105,99,111,255 45,105,99,111,110,32,105,110,108,105,110,101,32,117,105,45,
254 110,45,116,114,105,97,110,103,108,101,45,49,45,101,32,112,256 105,99,111,110,45,116,114,105,97,110,103,108,101,45,49,45,
255 111,114,116,108,101,116,45,109,97,120,39,62,60,47,115,112,257 115,32,112,111,114,116,108,101,116,45,105,110,99,114,39,62,
256 97,110,62,34,41,10,9,9,46,112,114,101,112,101,110,100,258 60,47,115,112,97,110,62,34,41,10,9,9,46,112,114,101,
257 40,34,60,115,112,97,110,32,99,108,97,115,115,61,39,117,259 112,101,110,100,40,34,60,115,112,97,110,32,99,108,97,115,
258 105,45,105,99,111,110,32,105,110,108,105,110,101,32,117,105,260 115,61,39,117,105,45,105,99,111,110,32,105,110,108,105,110,
259 45,105,99,111,110,45,99,108,111,115,101,32,112,111,114,116,261 101,32,117,105,45,105,99,111,110,45,116,114,105,97,110,103,
260 108,101,116,45,99,108,111,115,101,39,62,60,47,115,112,97,262 108,101,45,49,45,101,32,112,111,114,116,108,101,116,45,109,
261 110,62,34,41,59,10,9,9,104,100,114,46,111,110,40,39,263 97,120,39,62,60,47,115,112,97,110,62,34,41,10,9,9,
262 99,111,110,116,101,120,116,109,101,110,117,39,44,32,102,117,264 46,112,114,101,112,101,110,100,40,34,60,115,112,97,110,32,
263 110,99,116,105,111,110,40,41,123,114,101,116,117,114,110,32,265 99,108,97,115,115,61,39,117,105,45,105,99,111,110,32,105,
264 102,97,108,115,101,59,125,41,59,10,9,125,10,9,112,115,266 110,108,105,110,101,32,117,105,45,105,99,111,110,45,99,108,
265 32,61,32,36,40,34,46,112,111,114,116,108,101,116,45,109,267 111,115,101,32,112,111,114,116,108,101,116,45,99,108,111,115,
266 97,120,34,41,59,10,9,102,111,114,40,118,97,114,32,105,268 101,39,62,60,47,115,112,97,110,62,34,41,59,10,9,9,
267 32,61,32,48,59,32,105,32,60,32,112,115,46,108,101,110,269 104,100,114,46,111,110,40,39,99,111,110,116,101,120,116,109,
268 103,116,104,59,32,105,43,43,41,32,123,10,9,9,118,97,270 101,110,117,39,44,32,102,117,110,99,116,105,111,110,40,41,
269 114,32,112,32,61,32,112,115,91,105,93,59,10,9,9,105,271 123,114,101,116,117,114,110,32,102,97,108,115,101,59,125,41,
270 102,40,33,112,46,99,111,110,102,105,103,117,114,101,100,41,272 59,10,9,125,10,9,112,115,32,61,32,36,40,34,46,112,
271 32,123,10,9,9,9,112,46,99,111,110,102,105,103,117,114,273 111,114,116,108,101,116,45,109,97,120,34,41,59,10,9,102,
272 101,100,32,61,32,116,114,117,101,59,10,9,9,125,32,101,274 111,114,40,118,97,114,32,105,32,61,32,48,59,32,105,32,
273 108,115,101,32,123,10,9,9,9,99,111,110,116,105,110,117,275 60,32,112,115,46,108,101,110,103,116,104,59,32,105,43,43,
274 101,59,10,9,9,125,10,9,9,36,40,112,41,46,99,108,276 41,32,123,10,9,9,118,97,114,32,112,32,61,32,112,115,
275 105,99,107,40,102,117,110,99,116,105,111,110,40,101,41,123,277 91,105,93,59,10,9,9,105,102,40,33,112,46,99,111,110,
276 10,9,9,9,101,46,115,116,111,112,80,114,111,112,97,103,278 102,105,103,117,114,101,100,41,32,123,10,9,9,9,112,46,
277 97,116,105,111,110,40,41,59,10,9,9,9,118,97,114,32,279 99,111,110,102,105,103,117,114,101,100,32,61,32,116,114,117,
278 112,108,32,61,32,36,40,116,104,105,115,41,46,99,108,111,280 101,59,10,9,9,125,32,101,108,115,101,32,123,10,9,9,
279 115,101,115,116,40,34,46,112,111,114,116,108,101,116,34,41,281 9,99,111,110,116,105,110,117,101,59,10,9,9,125,10,9,
280 59,10,9,9,9,105,102,40,109,97,120,112,108,40,112,108,282 9,36,40,112,41,46,99,108,105,99,107,40,102,117,110,99,
281 41,41,32,123,10,9,9,9,9,114,101,116,117,114,110,59,283 116,105,111,110,40,101,41,123,10,9,9,9,101,46,115,116,
282 10,9,9,9,125,10,9,9,9,118,97,114,32,112,48,32,284 111,112,80,114,111,112,97,103,97,116,105,111,110,40,41,59,
283 61,32,112,108,46,103,101,116,40,48,41,59,10,9,9,9,285 10,9,9,9,118,97,114,32,112,108,32,61,32,36,40,116,
284 118,97,114,32,99,111,108,32,61,32,36,40,116,104,105,115,286 104,105,115,41,46,99,108,111,115,101,115,116,40,34,46,112,
285 41,46,99,108,111,115,101,115,116,40,34,46,99,111,108,117,287 111,114,116,108,101,116,34,41,59,10,9,9,9,105,102,40,
286 109,110,34,41,59,10,9,9,9,36,40,99,111,108,41,46,288 109,97,120,112,108,40,112,108,41,41,32,123,10,9,9,9,
287 102,105,110,100,40,34,46,112,111,114,116,108,101,116,34,41,289 9,114,101,116,117,114,110,59,10,9,9,9,125,10,9,9,
290 9,118,97,114,32,112,48,32,61,32,112,108,46,103,101,116,
291 40,48,41,59,10,9,9,9,118,97,114,32,99,111,108,32,
292 61,32,36,40,116,104,105,115,41,46,99,108,111,115,101,115,
293 116,40,34,46,99,111,108,117,109,110,34,41,59,10,9,9,
294 9,36,40,99,111,108,41,46,102,105,110,100,40,34,46,112,
295 111,114,116,108,101,116,34,41,46,101,97,99,104,40,102,117,
296 110,99,116,105,111,110,40,41,123,10,9,9,9,9,118,97,
297 114,32,112,105,32,61,32,36,40,116,104,105,115,41,46,103,
298 101,116,40,48,41,59,10,9,9,9,9,118,97,114,32,115,
299 101,108,102,32,61,32,36,40,116,104,105,115,41,59,10,9,
300 9,9,9,47,47,32,108,101,116,39,115,32,109,105,110,105,
301 109,105,122,101,32,101,118,101,114,121,116,104,105,110,103,46,
302 10,9,9,9,9,105,102,40,102,97,108,115,101,32,38,38,
303 32,112,48,32,61,61,32,112,105,41,32,123,10,9,9,9,
304 9,9,36,40,116,104,105,115,41,46,102,105,110,100,40,34,
305 46,112,111,114,116,108,101,116,45,116,111,103,103,108,101,34,
306 41,46,101,97,99,104,40,102,117,110,99,116,105,111,110,40,
307 41,123,10,9,9,9,9,9,9,105,102,40,36,40,116,104,
308 105,115,41,46,104,97,115,67,108,97,115,115,40,34,117,105,
309 45,105,99,111,110,45,112,108,117,115,34,41,41,32,123,10,
310 9,9,9,9,9,9,9,36,40,116,104,105,115,41,46,116,
311 111,103,103,108,101,67,108,97,115,115,40,34,117,105,45,105,
312 99,111,110,45,109,105,110,117,115,32,117,105,45,105,99,111,
313 110,45,112,108,117,115,34,41,59,10,9,9,9,9,9,9,
314 9,115,101,108,102,46,102,105,110,100,40,34,46,112,111,114,
315 116,108,101,116,45,99,111,110,116,101,110,116,34,41,46,116,
316 111,103,103,108,101,40,41,59,10,9,9,9,9,9,9,125,
317 10,9,9,9,9,9,125,41,59,10,9,9,9,9,9,114,
318 101,116,117,114,110,59,10,9,9,9,9,125,10,9,9,9,
319 9,36,40,116,104,105,115,41,46,102,105,110,100,40,34,46,
320 112,111,114,116,108,101,116,45,116,111,103,103,108,101,34,41,
288 46,101,97,99,104,40,102,117,110,99,116,105,111,110,40,41,321 46,101,97,99,104,40,102,117,110,99,116,105,111,110,40,41,
289 123,10,9,9,9,9,118,97,114,32,112,105,32,61,32,36,322 123,10,9,9,9,9,9,105,102,40,36,40,116,104,105,115,
290 40,116,104,105,115,41,46,103,101,116,40,48,41,59,10,9,323 41,46,104,97,115,67,108,97,115,115,40,34,117,105,45,105,
291 9,9,9,118,97,114,32,115,101,108,102,32,61,32,36,40,324 99,111,110,45,109,105,110,117,115,34,41,41,32,123,10,9,
292 116,104,105,115,41,59,10,9,9,9,9,47,47,32,108,101,325 9,9,9,9,9,36,40,116,104,105,115,41,46,116,111,103,
293 116,39,115,32,109,105,110,105,109,105,122,101,32,101,118,101,326 103,108,101,67,108,97,115,115,40,34,117,105,45,105,99,111,
294 114,121,116,104,105,110,103,46,10,9,9,9,9,105,102,40,327 110,45,109,105,110,117,115,32,117,105,45,105,99,111,110,45,
295 102,97,108,115,101,32,38,38,32,112,48,32,61,61,32,112,328 112,108,117,115,34,41,59,10,9,9,9,9,9,9,115,101,
296 105,41,32,123,10,9,9,9,9,9,36,40,116,104,105,115,329 108,102,46,102,105,110,100,40,34,46,112,111,114,116,108,101,
297 41,46,102,105,110,100,40,34,46,112,111,114,116,108,101,116,330 116,45,99,111,110,116,101,110,116,34,41,46,116,111,103,103,
298 45,116,111,103,103,108,101,34,41,46,101,97,99,104,40,102,331 108,101,40,41,59,10,9,9,9,9,9,125,10,9,9,9,
299 117,110,99,116,105,111,110,40,41,123,10,9,9,9,9,9,332 9,125,41,59,10,9,9,9,125,41,59,10,9,9,125,41,
300 9,105,102,40,36,40,116,104,105,115,41,46,104,97,115,67,333 59,10,9,125,10,9,112,115,32,61,32,36,40,34,46,112,
301 108,97,115,115,40,34,117,105,45,105,99,111,110,45,112,108,334 111,114,116,108,101,116,45,116,111,103,103,108,101,34,41,59,
302 117,115,34,41,41,32,123,10,9,9,9,9,9,9,9,36,335 10,9,102,111,114,40,118,97,114,32,105,32,61,32,48,59,
303 40,116,104,105,115,41,46,116,111,103,103,108,101,67,108,97,336 32,105,32,60,32,112,115,46,108,101,110,103,116,104,59,32,
304 115,115,40,34,117,105,45,105,99,111,110,45,109,105,110,117,337 105,43,43,41,32,123,10,9,9,118,97,114,32,112,32,61,
305 115,32,117,105,45,105,99,111,110,45,112,108,117,115,34,41,338 32,112,115,91,105,93,59,10,9,9,105,102,40,33,112,46,
306 59,10,9,9,9,9,9,9,9,115,101,108,102,46,102,105,339 99,111,110,102,105,103,117,114,101,100,41,32,123,10,9,9,
307 110,100,40,34,46,112,111,114,116,108,101,116,45,99,111,110,340 9,112,46,99,111,110,102,105,103,117,114,101,100,32,61,32,
308 116,101,110,116,34,41,46,116,111,103,103,108,101,40,41,59,341 116,114,117,101,59,10,9,9,125,32,101,108,115,101,32,123,
309 10,9,9,9,9,9,9,125,10,9,9,9,9,9,125,41,342 10,9,9,9,99,111,110,116,105,110,117,101,59,10,9,9,
310 59,10,9,9,9,9,9,114,101,116,117,114,110,59,10,9,343 125,10,9,9,36,40,112,41,46,99,108,105,99,107,40,102,
311 9,9,9,125,10,9,9,9,9,36,40,116,104,105,115,41,344 117,110,99,116,105,111,110,40,101,41,123,10,9,9,9,101,
312 46,102,105,110,100,40,34,46,112,111,114,116,108,101,116,45,345 46,115,116,111,112,80,114,111,112,97,103,97,116,105,111,110,
313 116,111,103,103,108,101,34,41,46,101,97,99,104,40,102,117,346 40,41,59,10,9,9,9,118,97,114,32,105,99,111,110,32,
314 110,99,116,105,111,110,40,41,123,10,9,9,9,9,9,105,347 61,32,36,40,116,104,105,115,41,59,10,9,9,9,105,99,
315 102,40,36,40,116,104,105,115,41,46,104,97,115,67,108,97,348 111,110,46,116,111,103,103,108,101,67,108,97,115,115,40,34,
316 115,115,40,34,117,105,45,105,99,111,110,45,109,105,110,117,349 117,105,45,105,99,111,110,45,109,105,110,117,115,32,117,105,
317 115,34,41,41,32,123,10,9,9,9,9,9,9,36,40,116,350 45,105,99,111,110,45,112,108,117,115,34,41,59,10,9,9,
318 104,105,115,41,46,116,111,103,103,108,101,67,108,97,115,115,351 9,118,97,114,32,112,108,32,61,32,105,99,111,110,46,99,
319 40,34,117,105,45,105,99,111,110,45,109,105,110,117,115,32,352 108,111,115,101,115,116,40,34,46,112,111,114,116,108,101,116,
320 117,105,45,105,99,111,110,45,112,108,117,115,34,41,59,10,353 34,41,59,10,9,9,9,112,108,46,102,105,110,100,40,34,
321 9,9,9,9,9,9,115,101,108,102,46,102,105,110,100,40,354 46,112,111,114,116,108,101,116,45,99,111,110,116,101,110,116,
322 34,46,112,111,114,116,108,101,116,45,99,111,110,116,101,110,355 34,41,46,116,111,103,103,108,101,40,41,59,10,9,9,9,
323 116,34,41,46,116,111,103,103,108,101,40,41,59,10,9,9,356 112,108,46,102,105,110,100,40,34,46,99,108,105,118,101,99,
324 9,9,9,125,10,9,9,9,9,125,41,59,10,9,9,9,357 116,108,34,41,46,101,97,99,104,40,102,117,110,99,116,105,
325 125,41,59,10,9,9,125,41,59,10,9,125,10,9,112,115,358 111,110,40,41,32,123,10,9,9,9,9,105,102,40,116,104,
326 32,61,32,36,40,34,46,112,111,114,116,108,101,116,45,116,359 105,115,46,97,100,100,115,105,122,101,41,32,123,10,9,9,
327 111,103,103,108,101,34,41,59,10,9,102,111,114,40,118,97,360 9,9,9,116,104,105,115,46,97,100,100,115,105,122,101,40,
328 114,32,105,32,61,32,48,59,32,105,32,60,32,112,115,46,361 48,41,59,10,9,9,9,9,125,10,9,9,9,125,41,59,
329 108,101,110,103,116,104,59,32,105,43,43,41,32,123,10,9,362 10,9,9,125,41,59,10,9,125,10,9,112,115,32,61,32,
330 9,118,97,114,32,112,32,61,32,112,115,91,105,93,59,10,363 36,40,34,46,112,111,114,116,108,101,116,45,99,108,111,115,
331 9,9,105,102,40,33,112,46,99,111,110,102,105,103,117,114,364 101,34,41,59,10,9,102,111,114,40,118,97,114,32,105,32,
332 101,100,41,32,123,10,9,9,9,112,46,99,111,110,102,105,365 61,32,48,59,32,105,32,60,32,112,115,46,108,101,110,103,
333 103,117,114,101,100,32,61,32,116,114,117,101,59,10,9,9,366 116,104,59,32,105,43,43,41,32,123,10,9,9,118,97,114,
334 125,32,101,108,115,101,32,123,10,9,9,9,99,111,110,116,367 32,112,32,61,32,112,115,91,105,93,59,10,9,9,105,102,
335 105,110,117,101,59,10,9,9,125,10,9,9,36,40,112,41,368 40,33,112,46,99,111,110,102,105,103,117,114,101,100,41,32,
336 46,99,108,105,99,107,40,102,117,110,99,116,105,111,110,40,369 123,10,9,9,9,112,46,99,111,110,102,105,103,117,114,101,
337 101,41,123,10,9,9,9,101,46,115,116,111,112,80,114,111,370 100,32,61,32,116,114,117,101,59,10,9,9,125,32,101,108,
338 112,97,103,97,116,105,111,110,40,41,59,10,9,9,9,118,371 115,101,32,123,10,9,9,9,99,111,110,116,105,110,117,101,
339 97,114,32,105,99,111,110,32,61,32,36,40,116,104,105,115,372 59,10,9,9,125,10,9,9,36,40,112,41,46,99,108,105,
340 41,59,10,9,9,9,105,99,111,110,46,116,111,103,103,108,373 99,107,40,102,117,110,99,116,105,111,110,40,101,41,123,10,
341 101,67,108,97,115,115,40,34,117,105,45,105,99,111,110,45,374 9,9,9,101,46,115,116,111,112,80,114,111,112,97,103,97,
342 109,105,110,117,115,32,117,105,45,105,99,111,110,45,112,108,375 116,105,111,110,40,41,59,10,9,9,9,118,97,114,32,105,
343 117,115,34,41,59,10,9,9,9,118,97,114,32,112,108,32,376 99,111,110,32,61,32,36,40,116,104,105,115,41,59,10,9,
377 9,9,118,97,114,32,101,108,32,61,32,105,99,111,110,46,
378 99,108,111,115,101,115,116,40,34,46,112,111,114,116,108,101,
379 116,34,41,59,10,9,9,9,114,101,109,111,118,101,99,111,
380 110,116,114,111,108,40,101,108,44,32,116,114,117,101,41,10,
381 9,9,125,41,59,10,9,125,10,9,112,115,32,61,32,36,
382 40,34,46,112,111,114,116,108,101,116,45,105,110,99,114,34,
383 41,59,10,9,102,111,114,40,118,97,114,32,105,32,61,32,
384 48,59,32,105,32,60,32,112,115,46,108,101,110,103,116,104,
385 59,32,105,43,43,41,32,123,10,9,9,118,97,114,32,112,
386 32,61,32,112,115,91,105,93,59,10,9,9,105,102,40,33,
387 112,46,99,111,110,102,105,103,117,114,101,100,41,32,123,10,
388 9,9,9,112,46,99,111,110,102,105,103,117,114,101,100,32,
389 61,32,116,114,117,101,59,10,9,9,125,32,101,108,115,101,
390 32,123,10,9,9,9,99,111,110,116,105,110,117,101,59,10,
391 9,9,125,10,9,9,36,40,112,41,46,99,108,105,99,107,
392 40,102,117,110,99,116,105,111,110,40,101,41,123,10,9,9,
393 9,101,46,115,116,111,112,80,114,111,112,97,103,97,116,105,
394 111,110,40,41,59,10,9,9,9,118,97,114,32,105,99,111,
395 110,32,61,32,36,40,116,104,105,115,41,59,10,9,9,9,
396 118,97,114,32,101,108,32,61,32,105,99,111,110,46,99,108,
397 111,115,101,115,116,40,34,46,112,111,114,116,108,101,116,34,
398 41,59,10,9,9,9,109,97,120,112,108,40,101,108,41,59,
399 10,9,9,9,36,40,101,108,41,46,102,105,110,100,40,34,
400 46,99,108,105,118,101,99,116,108,34,41,46,101,97,99,104,
401 40,102,117,110,99,116,105,111,110,40,41,32,123,10,9,9,
402 9,9,105,102,40,116,104,105,115,46,97,100,100,115,105,122,
403 101,41,32,123,10,9,9,9,9,9,116,104,105,115,46,97,
404 100,100,115,105,122,101,40,49,41,59,10,9,9,9,9,125,
405 10,9,9,9,125,41,59,10,9,9,125,41,59,10,9,125,
406 10,9,112,115,32,61,32,36,40,34,46,112,111,114,116,108,
407 101,116,45,105,110,99,114,50,34,41,59,10,9,102,111,114,
408 40,118,97,114,32,105,32,61,32,48,59,32,105,32,60,32,
409 112,115,46,108,101,110,103,116,104,59,32,105,43,43,41,32,
410 123,10,9,9,118,97,114,32,112,32,61,32,112,115,91,105,
411 93,59,10,9,9,105,102,40,33,112,46,99,111,110,102,105,
412 103,117,114,101,100,41,32,123,10,9,9,9,112,46,99,111,
413 110,102,105,103,117,114,101,100,32,61,32,116,114,117,101,59,
414 10,9,9,125,32,101,108,115,101,32,123,10,9,9,9,99,
415 111,110,116,105,110,117,101,59,10,9,9,125,10,9,9,36,
416 40,112,41,46,99,108,105,99,107,40,102,117,110,99,116,105,
417 111,110,40,101,41,123,10,9,9,9,101,46,115,116,111,112,
418 80,114,111,112,97,103,97,116,105,111,110,40,41,59,10,9,
419 9,9,118,97,114,32,105,99,111,110,32,61,32,36,40,116,
420 104,105,115,41,59,10,9,9,9,118,97,114,32,101,108,32,
344 61,32,105,99,111,110,46,99,108,111,115,101,115,116,40,34,421 61,32,105,99,111,110,46,99,108,111,115,101,115,116,40,34,
345 46,112,111,114,116,108,101,116,34,41,59,10,9,9,9,112,422 46,112,111,114,116,108,101,116,34,41,59,10,9,9,9,109,
346 108,46,102,105,110,100,40,34,46,112,111,114,116,108,101,116,423 97,120,112,108,40,101,108,41,59,10,9,9,9,36,40,101,
347 45,99,111,110,116,101,110,116,34,41,46,116,111,103,103,108,424 108,41,46,102,105,110,100,40,34,46,99,108,105,118,101,99,
348 101,40,41,59,10,9,9,9,112,108,46,102,105,110,100,40,425 116,108,34,41,46,101,97,99,104,40,102,117,110,99,116,105,
349 34,46,99,97,110,97,100,100,115,105,122,101,34,41,46,101,426 111,110,40,41,32,123,10,9,9,9,9,105,102,40,116,104,
350 97,99,104,40,102,117,110,99,116,105,111,110,40,41,32,123,427 105,115,46,97,100,100,115,105,122,101,41,32,123,10,9,9,
351 10,9,9,9,9,105,102,40,116,104,105,115,46,97,100,100,428 9,9,9,116,104,105,115,46,97,100,100,115,105,122,101,40,
352 115,105,122,101,41,32,123,10,9,9,9,9,9,116,104,105,429 50,41,59,10,9,9,9,9,125,10,9,9,9,125,41,59,
353 115,46,97,100,100,115,105,122,101,40,48,41,59,10,9,9,430 10,9,9,125,41,59,10,9,125,10,9,112,115,32,61,32,
354 9,9,125,10,9,9,9,125,41,59,10,9,9,125,41,59,431 36,40,34,46,112,111,114,116,108,101,116,45,100,101,99,114,
355 10,9,125,10,9,112,115,32,61,32,36,40,34,46,112,111,432 34,41,59,10,9,102,111,114,40,118,97,114,32,105,32,61,
356 114,116,108,101,116,45,99,108,111,115,101,34,41,59,10,9,433 32,48,59,32,105,32,60,32,112,115,46,108,101,110,103,116,
357 102,111,114,40,118,97,114,32,105,32,61,32,48,59,32,105,434 104,59,32,105,43,43,41,32,123,10,9,9,118,97,114,32,
358 32,60,32,112,115,46,108,101,110,103,116,104,59,32,105,43,435 112,32,61,32,112,115,91,105,93,59,10,9,9,105,102,40,
359 43,41,32,123,10,9,9,118,97,114,32,112,32,61,32,112,436 33,112,46,99,111,110,102,105,103,117,114,101,100,41,32,123,
360 115,91,105,93,59,10,9,9,105,102,40,33,112,46,99,111,437 10,9,9,9,112,46,99,111,110,102,105,103,117,114,101,100,
361 110,102,105,103,117,114,101,100,41,32,123,10,9,9,9,112,438 32,61,32,116,114,117,101,59,10,9,9,125,32,101,108,115,
362 46,99,111,110,102,105,103,117,114,101,100,32,61,32,116,114,439 101,32,123,10,9,9,9,99,111,110,116,105,110,117,101,59,
363 117,101,59,10,9,9,125,32,101,108,115,101,32,123,10,9,440 10,9,9,125,10,9,9,36,40,112,41,46,99,108,105,99,
364 9,9,99,111,110,116,105,110,117,101,59,10,9,9,125,10,441 107,40,102,117,110,99,116,105,111,110,40,101,41,123,10,9,
365 9,9,36,40,112,41,46,99,108,105,99,107,40,102,117,110,442 9,9,101,46,115,116,111,112,80,114,111,112,97,103,97,116,
366 99,116,105,111,110,40,101,41,123,10,9,9,9,101,46,115,443 105,111,110,40,41,59,10,9,9,9,118,97,114,32,105,99,
367 116,111,112,80,114,111,112,97,103,97,116,105,111,110,40,41,444 111,110,32,61,32,36,40,116,104,105,115,41,59,10,9,9,
368 59,10,9,9,9,118,97,114,32,105,99,111,110,32,61,32,445 9,118,97,114,32,101,108,32,61,32,105,99,111,110,46,99,
369 36,40,116,104,105,115,41,59,10,9,9,9,118,97,114,32,446 108,111,115,101,115,116,40,34,46,112,111,114,116,108,101,116,
370 101,108,32,61,32,105,99,111,110,46,99,108,111,115,101,115,447 34,41,59,10,9,9,9,109,97,120,112,108,40,101,108,41,
371 116,40,34,46,112,111,114,116,108,101,116,34,41,59,10,9,448 59,10,9,9,9,36,40,101,108,41,46,102,105,110,100,40,
372 9,9,114,101,109,111,118,101,99,111,110,116,114,111,108,40,449 34,46,99,108,105,118,101,99,116,108,34,41,46,101,97,99,
373 101,108,44,32,116,114,117,101,41,10,9,9,125,41,59,10,
374 9,125,10,9,112,115,32,61,32,36,40,34,46,112,111,114,
375 116,108,101,116,45,105,110,99,114,34,41,59,10,9,102,111,
376 114,40,118,97,114,32,105,32,61,32,48,59,32,105,32,60,
377 32,112,115,46,108,101,110,103,116,104,59,32,105,43,43,41,
378 32,123,10,9,9,118,97,114,32,112,32,61,32,112,115,91,
379 105,93,59,10,9,9,105,102,40,33,112,46,99,111,110,102,
380 105,103,117,114,101,100,41,32,123,10,9,9,9,112,46,99,
381 111,110,102,105,103,117,114,101,100,32,61,32,116,114,117,101,
382 59,10,9,9,125,32,101,108,115,101,32,123,10,9,9,9,
383 99,111,110,116,105,110,117,101,59,10,9,9,125,10,9,9,
384 36,40,112,41,46,99,108,105,99,107,40,102,117,110,99,116,
385 105,111,110,40,101,41,123,10,9,9,9,101,46,115,116,111,
386 112,80,114,111,112,97,103,97,116,105,111,110,40,41,59,10,
387 9,9,9,118,97,114,32,105,99,111,110,32,61,32,36,40,
388 116,104,105,115,41,59,10,9,9,9,118,97,114,32,101,108,
389 32,61,32,105,99,111,110,46,99,108,111,115,101,115,116,40,
390 34,46,112,111,114,116,108,101,116,34,41,59,10,9,9,9,
391 109,97,120,112,108,40,101,108,41,59,10,9,9,9,36,40,
392 101,108,41,46,102,105,110,100,40,34,46,99,97,110,97,100,
393 100,115,105,122,101,34,41,46,101,97,99,104,40,102,117,110,
394 99,116,105,111,110,40,41,32,123,10,9,9,9,9,105,102,
395 40,116,104,105,115,46,97,100,100,115,105,122,101,41,32,123,
396 10,9,9,9,9,9,116,104,105,115,46,97,100,100,115,105,
397 122,101,40,49,41,59,10,9,9,9,9,125,10,9,9,9,
398 125,41,59,10,9,9,125,41,59,10,9,125,10,9,112,115,
399 32,61,32,36,40,34,46,112,111,114,116,108,101,116,45,105,
400 110,99,114,50,34,41,59,10,9,102,111,114,40,118,97,114,
401 32,105,32,61,32,48,59,32,105,32,60,32,112,115,46,108,
402 101,110,103,116,104,59,32,105,43,43,41,32,123,10,9,9,
403 118,97,114,32,112,32,61,32,112,115,91,105,93,59,10,9,
404 9,105,102,40,33,112,46,99,111,110,102,105,103,117,114,101,
405 100,41,32,123,10,9,9,9,112,46,99,111,110,102,105,103,
406 117,114,101,100,32,61,32,116,114,117,101,59,10,9,9,125,
407 32,101,108,115,101,32,123,10,9,9,9,99,111,110,116,105,
408 110,117,101,59,10,9,9,125,10,9,9,36,40,112,41,46,
409 99,108,105,99,107,40,102,117,110,99,116,105,111,110,40,101,
410 41,123,10,9,9,9,101,46,115,116,111,112,80,114,111,112,
411 97,103,97,116,105,111,110,40,41,59,10,9,9,9,118,97,
412 114,32,105,99,111,110,32,61,32,36,40,116,104,105,115,41,
413 59,10,9,9,9,118,97,114,32,101,108,32,61,32,105,99,
414 111,110,46,99,108,111,115,101,115,116,40,34,46,112,111,114,
415 116,108,101,116,34,41,59,10,9,9,9,109,97,120,112,108,
416 40,101,108,41,59,10,9,9,9,36,40,101,108,41,46,102,
417 105,110,100,40,34,46,99,97,110,97,100,100,115,105,122,101,
418 34,41,46,101,97,99,104,40,102,117,110,99,116,105,111,110,
419 40,41,32,123,10,9,9,9,9,105,102,40,116,104,105,115,
420 46,97,100,100,115,105,122,101,41,32,123,10,9,9,9,9,
421 9,116,104,105,115,46,97,100,100,115,105,122,101,40,50,41,
422 59,10,9,9,9,9,125,10,9,9,9,125,41,59,10,9,
423 9,125,41,59,10,9,125,10,9,112,115,32,61,32,36,40,
424 34,46,112,111,114,116,108,101,116,45,100,101,99,114,34,41,
425 59,10,9,102,111,114,40,118,97,114,32,105,32,61,32,48,
426 59,32,105,32,60,32,112,115,46,108,101,110,103,116,104,59,
427 32,105,43,43,41,32,123,10,9,9,118,97,114,32,112,32,
428 61,32,112,115,91,105,93,59,10,9,9,105,102,40,33,112,
429 46,99,111,110,102,105,103,117,114,101,100,41,32,123,10,9,
430 9,9,112,46,99,111,110,102,105,103,117,114,101,100,32,61,
431 32,116,114,117,101,59,10,9,9,125,32,101,108,115,101,32,
432 123,10,9,9,9,99,111,110,116,105,110,117,101,59,10,9,
433 9,125,10,9,9,36,40,112,41,46,99,108,105,99,107,40,
434 102,117,110,99,116,105,111,110,40,101,41,123,10,9,9,9,
435 101,46,115,116,111,112,80,114,111,112,97,103,97,116,105,111,
436 110,40,41,59,10,9,9,9,118,97,114,32,105,99,111,110,
437 32,61,32,36,40,116,104,105,115,41,59,10,9,9,9,118,
438 97,114,32,101,108,32,61,32,105,99,111,110,46,99,108,111,
439 115,101,115,116,40,34,46,112,111,114,116,108,101,116,34,41,
440 59,10,9,9,9,109,97,120,112,108,40,101,108,41,59,10,
441 9,9,9,36,40,101,108,41,46,102,105,110,100,40,34,46,
442 99,97,110,97,100,100,115,105,122,101,34,41,46,101,97,99,
443 104,40,102,117,110,99,116,105,111,110,40,41,32,123,10,9,450 104,40,102,117,110,99,116,105,111,110,40,41,32,123,10,9,
444 9,9,9,105,102,40,116,104,105,115,46,97,100,100,115,105,451 9,9,9,105,102,40,116,104,105,115,46,97,100,100,115,105,
445 122,101,41,32,123,10,9,9,9,9,9,116,104,105,115,46,452 122,101,41,32,123,10,9,9,9,9,9,116,104,105,115,46,
@@ -704,1720 +711,936 @@ var Files = map[string][]byte{ · 258 unmodified lines
704 101,114,102,108,111,119,34,44,32,34,104,105,100,100,101,110,711 101,114,102,108,111,119,34,44,32,34,104,105,100,100,101,110,
705 34,41,59,10,9,10,125,41,59,10,712 34,41,59,10,9,10,125,41,59,10,
706 },713 },
707 "js/clive.js": []byte{714 "js/ctlr.js": []byte{
708 34,117,115,101,32,115,116,114,105,99,116,34,59,10,47,42,10,715 34,117,115,101,32,115,116,114,105,99,116,34,59,10,47,42,10,
709 32,42,32,80,108,97,99,101,104,111,108,100,101,114,32,102,716 9,67,108,105,118,101,32,106,115,32,99,111,100,101,32,102,
710 111,114,32,99,108,105,118,101,32,116,111,111,108,115,10,42,717 111,114,32,105,110,107,32,99,111,110,116,114,111,108,115,46,
711 47,10,718 10,42,47,10,10,47,47,32,65,32,99,108,105,118,101,32,
719 99,116,108,114,46,10,47,47,32,67,97,108,108,101,114,115,
720 32,109,117,115,116,32,104,97,118,101,32,100,101,102,105,110,
721 101,100,32,46,100,44,32,46,99,44,32,46,99,105,100,44,
722 32,97,110,100,32,46,105,100,32,98,101,102,111,114,101,32,
723 99,97,108,108,105,110,103,32,116,104,105,115,46,10,47,47,
724 32,73,102,32,116,104,105,115,46,100,32,104,97,115,32,119,
725 115,97,100,100,114,32,100,101,102,105,110,101,100,44,32,116,
726 104,97,116,32,98,97,115,101,32,97,100,100,114,101,115,115,
727 32,105,115,32,117,115,101,100,46,10,47,47,32,84,104,105,
728 115,32,112,114,111,118,105,100,101,115,32,116,104,101,32,112,
729 111,115,116,32,109,101,116,104,111,100,32,97,110,100,32,99,
730 97,108,108,115,32,40,105,102,32,100,101,102,105,110,101,100,
731 41,32,116,111,32,97,112,112,108,121,44,32,97,117,116,111,
732 114,101,115,105,122,101,44,32,97,110,100,32,109,97,121,114,
733 101,115,105,122,101,32,109,101,116,104,111,100,115,46,10,102,
734 117,110,99,116,105,111,110,32,67,108,105,118,101,67,116,108,
735 114,40,41,32,123,10,9,116,104,105,115,46,100,46,99,108,
736 105,118,101,99,116,108,114,32,61,32,116,104,105,115,59,10,
737 9,116,104,105,115,46,99,46,99,108,105,118,101,99,116,108,
738 114,32,61,32,116,104,105,115,59,10,9,116,104,105,115,46,
739 117,115,101,114,114,101,115,105,122,101,100,32,61,32,102,97,
740 108,115,101,59,10,9,116,104,105,115,46,119,115,117,114,108,
741 32,61,32,34,119,115,115,58,47,47,34,32,43,32,119,105,
742 110,100,111,119,46,108,111,99,97,116,105,111,110,46,104,111,
743 115,116,32,43,32,34,47,119,115,47,34,32,43,32,116,104,
744 105,115,46,99,105,100,59,10,9,105,102,40,116,104,105,115,
745 46,100,46,119,115,97,100,100,114,41,32,123,10,9,9,116,
746 104,105,115,46,119,115,117,114,108,32,61,32,116,104,105,115,
747 46,100,46,119,115,97,100,100,114,32,43,32,34,47,119,115,
748 47,34,32,43,32,116,104,105,115,46,99,105,100,59,10,9,
749 125,10,10,9,36,40,116,104,105,115,46,100,41,46,97,100,
750 100,67,108,97,115,115,40,34,99,108,105,118,101,99,116,108,
751 34,41,59,10,9,118,97,114,32,115,101,108,102,32,61,32,
752 116,104,105,115,59,10,9,47,47,32,117,115,101,32,115,101,
753 108,102,32,104,101,114,101,44,32,98,101,99,97,117,115,101,
754 32,112,111,115,116,32,119,105,108,108,32,98,101,32,98,111,
755 117,110,100,32,97,108,115,111,32,116,111,32,116,104,105,115,
756 46,100,10,9,116,104,105,115,46,112,111,115,116,32,61,32,
757 102,117,110,99,116,105,111,110,40,97,114,103,115,41,32,123,
758 10,9,9,118,97,114,32,119,115,32,61,32,115,101,108,102,
759 46,119,115,59,10,9,9,105,102,40,33,119,115,41,123,10,
760 9,9,9,99,111,110,115,111,108,101,46,108,111,103,40,34,
761 112,111,115,116,58,32,110,111,32,119,115,34,41,59,10,9,
762 9,9,114,101,116,117,114,110,32,110,105,108,59,10,9,9,
763 125,10,9,9,105,102,40,33,97,114,103,115,32,124,124,32,
764 33,97,114,103,115,91,48,93,41,123,10,9,9,9,99,111,
765 110,115,111,108,101,46,108,111,103,40,34,112,111,115,116,58,
766 32,110,111,32,97,114,103,115,34,41,59,10,9,9,9,114,
767 101,116,117,114,110,32,110,105,108,59,10,9,9,125,10,9,
768 9,105,102,40,33,115,101,108,102,46,118,101,114,115,41,32,
769 123,10,9,9,9,115,101,108,102,46,118,101,114,115,32,61,
770 32,48,59,10,9,9,125,10,9,9,47,47,32,99,117,116,
771 32,97,100,118,97,110,99,101,115,32,116,104,101,32,118,101,
772 114,115,32,40,109,105,103,104,116,32,100,101,108,32,110,111,
773 116,104,105,110,103,41,10,9,9,47,47,32,116,104,105,115,
774 32,105,115,32,102,111,114,32,116,101,120,116,32,97,110,100,
775 32,115,104,111,117,108,100,110,39,116,32,98,101,32,104,101,
776 114,101,46,10,9,9,105,102,40,97,114,103,115,91,48,93,
777 32,61,61,32,34,101,105,110,115,34,32,124,124,32,97,114,
778 103,115,91,48,93,32,61,61,32,34,101,100,101,108,34,41,
779 32,123,10,9,9,9,115,101,108,102,46,118,101,114,115,43,
780 43,59,10,9,9,125,10,9,9,118,97,114,32,101,118,32,
781 61,32,123,73,100,58,32,115,101,108,102,46,99,105,100,44,
782 32,83,114,99,58,32,115,101,108,102,46,105,100,44,32,86,
783 101,114,115,58,32,115,101,108,102,46,118,101,114,115,44,32,
784 65,114,103,115,58,32,97,114,103,115,125,59,10,9,9,118,
785 97,114,32,109,115,103,32,61,32,74,83,79,78,46,115,116,
786 114,105,110,103,105,102,121,40,101,118,41,59,10,9,9,116,
787 114,121,32,123,10,9,9,9,115,101,108,102,46,119,115,46,
788 115,101,110,100,40,109,115,103,41,59,10,9,9,9,47,47,
789 32,99,111,110,115,111,108,101,46,108,111,103,40,34,112,111,
790 115,116,105,110,103,32,34,44,32,109,115,103,41,59,10,9,
791 9,125,99,97,116,99,104,40,101,120,41,123,10,9,9,9,
792 99,111,110,115,111,108,101,46,108,111,103,40,34,112,111,115,
793 116,58,32,34,32,43,32,101,120,41,59,10,9,9,125,10,
794 9,9,47,47,32,105,102,32,116,104,105,115,32,105,115,32,
795 97,32,99,117,116,44,32,105,116,32,105,109,112,108,105,101,
796 115,32,97,32,100,101,108,32,97,110,100,32,119,101,10,9,
797 9,47,47,32,109,117,115,116,32,97,100,118,97,110,99,101,
798 32,111,117,114,32,118,101,114,115,44,32,116,104,101,32,101,
799 118,101,110,116,32,100,105,100,110,39,116,10,9,9,47,47,
800 32,97,100,118,97,110,99,101,32,116,104,101,32,118,101,114,
801 115,46,10,9,9,47,47,32,83,97,109,101,32,102,111,114,
802 32,112,97,115,116,101,46,10,9,9,47,47,32,116,104,105,
803 115,32,105,115,32,102,111,114,32,116,101,120,116,32,97,110,
804 100,32,115,104,111,117,108,100,110,39,116,32,98,101,32,104,
805 101,114,101,46,10,9,9,105,102,40,97,114,103,115,91,48,
806 93,32,61,61,32,34,101,99,117,116,34,32,124,124,32,97,
807 114,103,115,91,48,93,32,61,61,32,34,101,112,97,115,116,
808 101,34,41,32,123,10,9,9,9,101,118,46,86,101,114,115,
809 43,43,59,10,9,9,125,10,9,9,114,101,116,117,114,110,
810 32,101,118,59,10,9,125,59,10,10,9,116,104,105,115,46,
811 115,101,116,116,97,103,32,61,32,102,117,110,99,116,105,111,
812 110,40,116,41,32,123,10,9,9,105,102,40,100,111,99,117,
813 109,101,110,116,46,115,101,116,116,97,103,41,32,123,10,9,
814 9,9,100,111,99,117,109,101,110,116,46,115,101,116,116,97,
815 103,40,116,104,105,115,44,32,116,41,59,10,9,9,125,10,
816 9,125,59,10,10,9,116,104,105,115,46,115,101,116,100,105,
817 114,116,121,32,61,32,102,117,110,99,116,105,111,110,40,41,
818 32,123,10,9,9,105,102,40,100,111,99,117,109,101,110,116,
819 46,115,101,116,100,105,114,116,121,41,32,123,10,9,9,9,
820 100,111,99,117,109,101,110,116,46,115,101,116,100,105,114,116,
821 121,40,116,104,105,115,41,59,10,9,9,125,10,9,125,59,
822 10,10,9,116,104,105,115,46,115,101,116,99,108,101,97,110,
823 32,61,32,102,117,110,99,116,105,111,110,40,41,32,123,10,
824 9,9,105,102,40,100,111,99,117,109,101,110,116,46,115,101,
825 116,99,108,101,97,110,41,32,123,10,9,9,9,100,111,99,
826 117,109,101,110,116,46,115,101,116,99,108,101,97,110,40,116,
827 104,105,115,41,59,10,9,9,125,10,9,125,59,10,10,9,
828 116,104,105,115,46,115,104,111,119,99,111,110,116,114,111,108,
829 32,61,32,102,117,110,99,116,105,111,110,40,41,32,123,10,
830 9,9,105,102,40,100,111,99,117,109,101,110,116,46,115,104,
831 111,119,99,111,110,116,114,111,108,41,32,123,10,9,9,9,
832 100,111,99,117,109,101,110,116,46,115,104,111,119,99,111,110,
833 116,114,111,108,40,116,104,105,115,41,59,10,9,9,125,10,
834 9,125,59,10,10,9,116,104,105,115,46,119,115,32,61,32,
835 110,101,119,32,87,101,98,83,111,99,107,101,116,40,116,104,
836 105,115,46,119,115,117,114,108,41,59,10,9,116,104,105,115,
837 46,119,115,46,111,110,111,112,101,110,32,61,32,102,117,110,
838 99,116,105,111,110,40,41,32,123,10,9,9,115,101,108,102,
839 46,112,111,115,116,40,91,34,105,100,34,93,41,59,10,9,
840 125,59,10,9,116,104,105,115,46,119,115,46,111,110,101,114,
841 114,111,114,32,61,32,102,117,110,99,116,105,111,110,40,101,
842 118,41,32,123,10,9,9,99,111,110,115,111,108,101,46,108,
843 111,103,40,34,119,115,32,101,114,114,34,44,32,101,118,41,
844 59,10,9,125,59,10,9,116,104,105,115,46,119,115,46,111,
845 110,109,101,115,115,97,103,101,32,61,32,102,117,110,99,116,
846 105,111,110,40,101,118,41,32,123,10,9,9,118,97,114,32,
847 111,32,61,32,74,83,79,78,46,112,97,114,115,101,40,101,
848 118,46,100,97,116,97,41,59,10,9,9,105,102,40,33,111,
849 32,124,124,32,33,111,46,73,100,41,32,123,10,9,9,9,
850 99,111,110,115,111,108,101,46,108,111,103,40,34,117,112,100,
851 97,116,101,58,32,110,111,32,111,98,106,101,116,32,105,100,
852 34,41,59,10,9,9,9,114,101,116,117,114,110,59,10,9,
853 9,125,10,9,9,105,102,40,116,100,101,98,117,103,41,99,
854 111,110,115,111,108,101,46,108,111,103,40,34,117,112,100,97,
855 116,101,32,116,111,34,44,32,111,46,73,100,44,32,111,46,
856 65,114,103,115,41,59,10,9,9,105,102,40,115,101,108,102,
857 46,97,112,112,108,121,41,32,123,10,9,9,9,115,101,108,
858 102,46,97,112,112,108,121,40,111,44,32,116,114,117,101,41,
859 59,10,9,9,125,10,9,125,59,10,9,116,104,105,115,46,
860 119,115,46,111,110,99,108,111,115,101,32,61,32,102,117,110,
861 99,116,105,111,110,40,41,32,123,10,9,9,99,111,110,115,
862 111,108,101,46,108,111,103,40,34,116,101,120,116,32,115,111,
863 99,107,101,116,32,34,32,43,32,115,101,108,102,46,119,115,
864 117,114,108,43,32,34,32,99,108,111,115,101,100,92,110,34,
865 41,59,10,9,9,115,101,108,102,46,100,46,114,101,112,108,
866 97,99,101,87,105,116,104,40,34,60,104,51,62,100,105,115,
867 99,111,110,110,101,99,116,101,100,60,47,104,51,62,34,41,
868 59,10,9,125,59,10,10,9,47,47,32,116,104,105,115,32,
869 105,115,32,102,111,114,32,112,103,46,106,115,44,32,119,105,
870 108,108,32,103,111,46,10,9,118,97,114,32,100,48,32,61,
871 32,116,104,105,115,46,100,46,103,101,116,40,48,41,59,10,
872 9,100,48,46,119,115,32,61,32,116,104,105,115,46,119,115,
873 59,10,9,100,48,46,112,111,115,116,32,61,32,116,104,105,
874 115,46,112,111,115,116,59,10,9,116,104,105,115,46,100,46,
875 112,111,115,116,32,61,32,116,104,105,115,46,112,111,115,116,
876 59,10,10,9,100,48,46,97,100,100,115,105,122,101,32,61,
877 32,102,117,110,99,116,105,111,110,40,109,111,114,101,108,101,
878 115,115,41,32,123,10,9,9,105,102,40,115,101,108,102,46,
879 97,117,116,111,114,101,115,105,122,101,41,32,123,10,9,9,
880 9,115,101,108,102,46,97,117,116,111,114,101,115,105,122,101,
881 40,116,114,117,101,44,32,109,111,114,101,108,101,115,115,41,
882 59,10,9,9,125,10,9,125,59,10,9,116,104,105,115,46,
883 100,46,114,101,115,105,122,97,98,108,101,40,123,10,9,9,
884 104,97,110,100,108,101,115,58,32,39,115,39,10,9,125,41,
885 46,111,110,40,39,114,101,115,105,122,101,39,44,32,102,117,
886 110,99,116,105,111,110,40,41,32,123,10,9,9,99,111,110,
887 115,111,108,101,46,108,111,103,40,34,117,115,101,114,32,114,
888 101,115,105,122,101,100,34,41,59,10,9,9,115,101,108,102,
889 46,117,115,101,114,114,101,115,105,122,101,100,32,61,32,116,
890 114,117,101,59,10,9,9,105,102,40,115,101,108,102,46,109,
891 97,121,114,101,115,105,122,101,41,32,123,10,9,9,9,115,
892 101,108,102,46,109,97,121,114,101,115,105,122,101,40,116,114,
893 117,101,41,59,10,9,9,125,10,9,125,41,59,10,9,36,
894 40,119,105,110,100,111,119,41,46,114,101,115,105,122,101,40,
895 102,117,110,99,116,105,111,110,40,41,32,123,10,9,9,99,
896 111,110,115,111,108,101,46,108,111,103,40,34,119,105,110,100,
897 111,119,32,114,101,115,105,122,101,100,34,41,59,10,9,9,
898 105,102,40,115,101,108,102,46,109,97,121,114,101,115,105,122,
899 101,41,32,123,10,9,9,9,115,101,108,102,46,109,97,121,
900 114,101,115,105,122,101,40,102,97,108,115,101,41,59,10,9,
901 9,125,10,9,125,41,59,10,10,10,125,10,
712 },902 },
713 "js/txt.js": []byte{903 "js/text.js": []byte{
714 34,117,115,101,32,115,116,114,105,99,116,34,59,10,47,42,10,904 34,117,115,101,32,115,116,114,105,99,116,34,59,10,47,42,10,
715 9,106,115,32,99,111,100,101,32,102,111,114,32,116,104,101,905 9,67,108,105,118,101,32,106,115,32,99,111,100,101,32,102,
716 32,99,108,105,118,101,32,116,101,120,116,32,102,114,97,109,906 111,114,32,116,101,120,116,32,102,114,97,109,101,115,46,10,
717 101,10,9,119,104,105,99,104,32,105,115,32,115,105,109,105,907 9,115,105,109,105,108,97,114,32,116,111,32,80,108,97,110,
718 108,97,114,32,116,111,32,97,32,80,108,97,110,32,57,32,908 32,57,32,116,101,120,116,32,102,114,97,109,101,115,32,117,
719 116,101,120,116,32,102,114,97,109,101,10,9,98,117,116,32,909 115,105,110,103,32,116,104,101,32,72,84,77,76,53,32,99,
720 105,109,112,108,101,109,101,110,116,101,100,32,119,105,116,104,910 97,110,118,97,115,46,10,10,9,72,84,77,76,53,32,100,
721 32,116,104,101,32,72,84,77,76,53,32,99,97,110,118,97,911 101,115,105,103,110,101,114,115,32,115,117,103,103,101,115,116,
722 115,46,10,10,9,72,84,77,76,53,32,100,101,115,105,103,912 32,116,104,97,116,32,121,111,117,32,100,111,110,39,116,32,
723 110,101,114,115,32,115,117,103,103,101,115,116,32,116,104,97,913 100,111,32,116,104,105,115,44,32,98,117,116,32,111,110,32,
724 116,32,121,111,117,32,100,111,110,39,116,32,100,111,32,116,914 116,104,101,32,111,116,104,101,114,10,9,104,97,110,100,44,
725 104,105,115,44,32,98,117,116,32,111,110,32,116,104,101,32,915 32,116,104,101,121,32,100,111,32,78,79,84,32,104,97,110,
726 111,116,104,101,114,10,9,104,97,110,100,44,32,116,104,101,916 100,108,101,32,116,101,120,116,32,99,111,114,114,101,99,116,
727 121,32,100,111,32,78,79,84,32,104,97,110,100,108,101,32,917 108,121,32,105,110,32,100,111,109,32,97,110,100,32,116,104,
728 116,101,120,116,32,99,111,114,114,101,99,116,108,121,32,105,918 101,121,32,100,111,32,78,79,84,10,9,112,114,111,118,105,
729 110,32,100,111,109,32,97,110,100,32,116,104,101,121,32,100,919 100,101,32,116,104,101,32,105,110,116,101,114,102,97,99,101,
730 111,32,78,79,84,10,9,112,114,111,118,105,100,101,32,116,920 115,32,114,101,113,117,105,114,101,100,32,116,111,32,104,97,
731 104,101,32,105,110,116,101,114,102,97,99,101,115,32,114,101,921 110,100,108,101,32,116,104,105,110,103,115,32,108,105,107,101,
732 113,117,105,114,101,100,32,116,111,32,104,97,110,100,108,101,922 32,117,110,100,111,32,97,110,100,10,9,114,101,100,111,32,
733 32,116,104,105,110,103,115,32,108,105,107,101,32,117,110,100,923 99,111,114,114,101,99,116,108,121,46,32,10,10,9,84,104,
734 111,32,97,110,100,10,9,114,101,100,111,32,99,111,114,114,924 105,115,32,114,101,113,117,105,114,101,115,32,97,108,115,111,
735 101,99,116,108,121,46,32,10,10,32,42,47,10,10,47,42,925 32,108,105,110,101,115,46,106,115,46,10,9,84,104,101,32,
736 10,32,42,32,72,97,99,107,32,116,111,32,109,97,107,101,926 99,111,100,101,32,105,110,116,101,114,102,97,99,105,110,103,
737 32,115,117,114,101,32,116,104,101,32,102,105,120,101,100,32,927 32,119,105,116,104,32,112,103,46,106,115,32,110,101,101,100,
738 97,110,100,32,118,97,114,32,119,105,100,116,104,32,102,111,928 115,32,97,32,114,101,119,114,105,116,101,44,32,97,115,32,
739 110,116,115,32,101,120,105,115,116,44,32,97,110,100,10,32,929 100,111,101,115,32,112,103,46,106,115,32,105,116,115,101,108,
740 42,32,103,108,111,98,97,108,32,102,111,110,116,32,110,97,930 102,46,10,42,47,10,10,118,97,114,32,115,101,108,101,99,
741 109,101,115,32,102,111,114,32,116,104,111,115,101,32,118,97,931 116,105,110,103,32,61,32,102,97,108,115,101,59,10,118,97,
742 114,105,97,110,116,115,46,10,32,42,47,10,118,97,114,32,932 114,32,116,100,101,98,117,103,32,61,32,102,97,108,115,101,
743 116,102,102,105,120,101,100,32,61,32,34,109,111,110,111,115,933 59,9,47,47,32,97,108,115,111,32,100,101,102,105,110,101,
744 112,97,99,101,34,59,10,118,97,114,32,116,102,118,97,114,934 100,32,98,121,32,108,105,110,101,115,46,106,115,10,10,47,
745 32,61,32,34,76,117,99,105,100,97,32,71,114,97,110,100,935 47,32,84,104,105,115,32,105,115,32,116,111,32,112,114,101,
746 101,34,59,9,47,47,32,111,114,32,86,101,114,100,97,110,936 118,101,110,116,32,116,104,101,32,101,118,101,110,116,32,102,
747 97,10,118,97,114,32,102,111,110,116,115,99,104,101,99,107,937 114,111,109,32,98,101,105,110,103,32,112,114,111,112,97,103,
748 101,100,111,117,116,32,61,32,102,97,108,115,101,59,10,118,938 97,116,101,100,32,116,111,32,116,104,101,32,112,97,114,101,
749 97,114,32,116,100,101,98,117,103,32,61,32,102,97,108,115,939 110,116,10,47,47,32,99,111,110,116,97,105,110,101,114,46,
750 101,59,10,10,102,117,110,99,116,105,111,110,32,99,104,101,940 10,47,47,32,68,101,115,112,105,116,101,32,116,104,105,115,
751 99,107,111,117,116,102,111,110,116,115,40,99,116,120,41,32,941 44,32,105,116,32,115,101,101,109,115,32,116,104,97,116,32,
752 123,10,9,105,102,40,102,111,110,116,115,99,104,101,99,107,942 105,102,32,119,101,32,114,101,116,117,114,110,32,116,114,117,
753 101,100,111,117,116,41,10,9,9,114,101,116,117,114,110,59,943 101,32,105,110,32,115,97,102,97,114,105,32,102,111,114,32,
754 10,9,102,111,110,116,115,99,104,101,99,107,101,100,111,117,944 97,32,107,101,121,100,111,119,110,10,47,47,32,116,104,101,
755 116,32,61,32,116,114,117,101,59,10,9,118,97,114,32,111,945 110,32,105,116,39,115,32,116,111,111,32,108,97,116,101,32,
756 108,100,32,61,32,99,116,120,46,102,111,110,116,59,10,9,946 97,110,100,32,116,104,101,32,115,112,97,99,101,32,98,117,
757 99,116,120,46,102,111,110,116,32,61,32,34,53,48,112,120,947 98,98,108,101,115,32,97,110,100,32,119,101,32,115,99,114,
758 32,65,114,105,97,108,34,59,10,9,118,97,114,32,115,122,948 111,108,108,32,119,104,101,110,32,119,101,32,115,104,111,117,
759 32,61,32,99,116,120,46,109,101,97,115,117,114,101,84,101,949 108,100,110,116,46,10,47,47,32,83,111,44,32,108,111,99,
760 120,116,40,34,65,66,67,34,41,46,119,105,100,116,104,59,950 107,110,107,101,121,100,111,119,110,32,114,101,116,117,114,110,
761 10,9,99,116,120,46,102,111,110,116,32,61,32,34,53,48,951 115,32,102,97,108,115,101,32,97,110,100,32,99,97,108,108,
762 112,120,32,34,32,43,32,116,102,102,105,120,101,100,59,10,952 115,44,32,98,121,32,104,97,110,100,44,32,116,104,101,32,
763 9,105,102,40,99,116,120,46,109,101,97,115,117,114,101,84,953 100,111,119,110,47,107,101,121,47,117,112,32,104,97,110,100,
764 101,120,116,40,34,65,66,67,34,41,46,119,105,100,116,104,954 108,101,114,115,46,10,102,117,110,99,116,105,111,110,32,100,
765 32,61,61,32,115,122,41,10,9,9,116,102,102,105,120,101,955 111,110,116,98,117,98,98,108,101,40,101,41,32,123,10,9,
766 100,32,61,32,34,67,111,117,114,105,101,114,34,59,10,9,956 105,102,32,40,101,41,32,123,10,9,9,101,46,98,117,98,
767 99,116,120,46,102,111,110,116,32,61,32,34,53,48,112,120,957 98,108,101,115,32,61,32,102,97,108,115,101,59,10,9,9,
768 32,34,32,43,32,116,102,118,97,114,59,10,9,105,102,40,958 105,102,40,101,46,115,116,111,112,80,114,111,112,97,103,97,
769 99,116,120,46,109,101,97,115,117,114,101,84,101,120,116,40,959 116,105,111,110,41,32,123,10,9,9,9,101,46,115,116,111,
770 34,65,66,67,34,41,46,119,105,100,116,104,32,61,61,32,960 112,80,114,111,112,97,103,97,116,105,111,110,40,41,59,10,
771 115,122,41,10,9,9,116,102,102,105,120,101,100,32,61,32,961 9,9,125,10,9,9,101,46,99,97,110,99,101,108,66,117,
772 34,65,114,105,97,108,34,59,10,9,99,116,120,46,102,111,962 98,98,108,101,32,61,32,116,114,117,101,59,10,9,125,10,
773 110,116,32,61,32,111,108,100,59,10,125,10,10,102,117,110,963 125,10,10,47,47,32,65,32,102,114,97,109,101,32,111,102,
774 99,116,105,111,110,32,116,102,105,120,102,111,110,116,40,41,964 32,108,105,110,101,115,32,117,115,105,110,103,32,116,104,101,
775 32,123,10,9,118,97,114,32,99,32,61,32,116,104,105,115,965 32,67,108,105,118,101,32,105,110,107,32,102,114,97,109,101,
776 59,10,9,118,97,114,32,99,116,120,32,61,32,99,46,103,966 119,111,114,107,46,10,47,47,32,100,32,105,115,32,116,104,
777 101,116,67,111,110,116,101,120,116,40,34,50,100,34,44,32,967 101,32,100,105,118,44,32,99,32,105,115,32,116,104,101,32,
778 123,97,108,112,104,97,58,32,102,97,108,115,101,125,41,59,968 99,97,110,118,97,115,44,32,99,105,100,32,97,110,100,32,
779 10,9,118,97,114,32,109,111,100,32,61,32,34,34,59,10,969 105,100,32,97,114,101,32,116,104,101,32,105,110,107,32,105,
780 9,118,97,114,32,115,116,121,108,101,32,61,32,34,34,59,970 100,115,46,10,47,47,32,84,104,105,115,32,119,105,108,108,
781 10,9,115,116,121,108,101,32,61,32,116,102,118,97,114,59,971 32,104,97,118,101,32,116,111,32,98,101,32,114,101,119,114,
782 10,9,105,102,40,116,104,105,115,46,102,111,110,116,115,116,972 105,116,116,101,110,32,119,104,101,110,32,119,101,32,114,101,
783 121,108,101,46,105,110,100,101,120,79,102,40,39,114,39,41,973 119,114,105,116,101,32,105,110,107,32,106,115,32,99,111,100,
784 32,61,61,61,32,45,49,41,32,123,10,9,9,115,116,121,974 101,46,10,102,117,110,99,116,105,111,110,32,67,108,105,118,
785 108,101,32,61,32,116,102,102,105,120,101,100,59,10,9,125,975 101,84,101,120,116,40,100,44,32,99,44,32,99,105,100,44,
786 10,9,105,102,40,116,104,105,115,46,102,111,110,116,115,116,976 32,105,100,41,32,123,10,9,68,114,97,119,76,105,110,101,
787 121,108,101,46,105,110,100,101,120,79,102,40,39,98,39,41,977 115,46,99,97,108,108,40,116,104,105,115,44,32,99,41,59,
788 32,62,32,45,49,41,32,123,10,9,9,109,111,100,32,61,978 10,9,116,104,105,115,46,100,32,61,32,100,59,10,9,116,
789 32,34,98,111,108,100,32,34,32,43,32,109,111,100,59,10,979 104,105,115,46,99,32,61,32,99,59,10,9,116,104,105,115,
790 9,125,10,9,105,102,40,116,104,105,115,46,102,111,110,116,980 46,99,105,100,32,61,32,99,105,100,59,10,9,116,104,105,
791 115,116,121,108,101,46,105,110,100,101,120,79,102,40,39,105,981 115,46,105,100,32,61,32,105,100,59,10,10,9,116,104,105,
792 39,41,32,62,32,45,49,41,32,123,10,9,9,109,111,100,982 115,46,118,101,114,115,32,61,32,48,59,10,9,116,104,105,
793 32,61,32,34,105,116,97,108,105,99,32,34,32,43,32,109,983 115,46,110,111,101,100,105,116,115,32,61,32,102,97,108,115,
794 111,100,59,10,9,125,10,9,118,97,114,32,104,116,32,61,984 101,59,10,10,9,116,104,105,115,46,105,115,108,111,99,107,
795 32,116,104,105,115,46,102,111,110,116,104,116,32,45,32,50,985 101,100,32,61,32,102,97,108,115,101,59,10,9,116,104,105,
796 42,116,104,105,115,46,116,115,99,97,108,101,59,10,9,99,986 115,46,108,111,99,107,105,110,103,32,61,32,102,97,108,115,
797 116,120,46,102,111,110,116,32,61,32,109,111,100,32,43,32,987 101,59,10,9,116,104,105,115,46,109,117,115,116,117,110,108,
798 34,32,34,32,32,43,32,104,116,43,34,112,120,32,34,43,988 111,99,107,32,61,32,102,97,108,115,101,59,10,9,116,104,
799 32,115,116,121,108,101,59,10,9,99,116,120,46,116,101,120,989 105,115,46,119,104,101,110,108,111,99,107,101,100,32,61,32,
800 116,66,97,115,101,108,105,110,101,61,34,116,111,112,34,59,990 91,93,59,10,10,9,116,104,105,115,46,98,117,116,116,111,
801 10,125,10,10,102,117,110,99,116,105,111,110,32,97,100,106,991 110,115,32,61,32,48,59,10,9,116,104,105,115,46,110,99,
802 100,101,108,40,112,111,115,44,32,100,101,108,112,48,44,32,992 108,105,99,107,115,32,61,32,123,49,58,32,48,44,32,50,
803 100,101,108,112,49,41,32,123,10,9,105,102,40,112,111,115,993 58,32,48,44,32,52,58,32,48,125,59,10,9,116,104,105,
804 32,60,61,32,100,101,108,112,48,41,10,9,9,114,101,116,994 115,46,108,97,115,116,120,32,61,32,48,59,10,9,116,104,
805 117,114,110,32,112,111,115,59,10,9,105,102,40,112,111,115,995 105,115,46,108,97,115,116,121,32,61,32,48,59,10,9,116,
806 32,60,61,32,100,101,108,112,49,41,10,9,9,114,101,116,996 104,105,115,46,100,98,108,99,108,105,99,107,32,61,32,48,
807 117,114,110,32,100,101,108,112,48,59,10,9,114,101,116,117,997 59,32,47,47,32,49,32,102,111,114,32,100,111,117,98,108,
808 114,110,32,112,111,115,32,45,32,40,100,101,108,112,49,32,998 101,44,32,50,32,102,111,114,32,116,114,105,112,108,101,44,
809 45,32,100,101,108,112,48,41,59,10,125,10,10,102,117,110,999 32,46,46,46,10,9,116,104,105,115,46,115,101,99,111,110,
810 99,116,105,111,110,32,108,110,108,101,110,40,108,110,41,123,1000 100,97,114,121,32,61,32,48,59,9,47,47,32,98,117,116,
811 10,9,105,102,40,33,108,110,41,10,9,9,114,101,116,117,1001 116,111,110,32,102,111,114,32,115,101,108,101,99,116,105,111,
812 114,110,32,48,59,10,9,105,102,40,108,110,46,101,111,108,1002 110,32,40,97,108,115,111,32,100,101,102,105,110,101,100,32,
813 41,10,9,9,114,101,116,117,114,110,32,108,110,46,116,120,1003 98,121,32,68,114,97,119,76,105,110,101,115,41,10,9,116,
814 116,46,108,101,110,103,116,104,32,43,32,49,59,10,9,114,1004 104,105,115,46,115,101,99,111,110,100,97,114,121,97,98,111,
815 101,116,117,114,110,32,108,110,46,116,120,116,46,108,101,110,1005 114,116,32,61,32,102,97,108,115,101,59,10,9,116,104,105,
816 103,116,104,59,10,125,10,10,102,117,110,99,116,105,111,110,1006 115,46,109,97,108,116,32,61,32,102,97,108,115,101,59,10,
817 32,116,100,117,109,112,40,41,32,123,10,9,118,97,114,32,1007 9,116,104,105,115,46,117,115,101,114,114,101,115,105,122,101,
818 111,102,102,32,61,32,48,59,10,9,102,111,114,40,118,97,1008 100,32,61,32,102,97,108,115,101,59,10,9,116,104,105,115,
819 114,32,105,32,61,32,48,59,32,105,32,60,32,116,104,105,1009 46,115,101,108,101,99,116,105,110,103,32,61,32,102,97,108,
820 115,46,108,105,110,101,115,46,108,101,110,103,116,104,59,32,1010 115,101,59,10,9,116,104,105,115,46,111,108,100,112,48,32,
821 105,43,43,41,123,10,9,9,118,97,114,32,110,32,61,32,1011 61,32,45,49,59,10,9,116,104,105,115,46,111,108,100,112,
822 108,110,108,101,110,40,116,104,105,115,46,108,105,110,101,115,1012 49,32,61,32,45,49,59,10,9,116,104,105,115,46,99,108,
823 91,105,93,41,59,10,9,9,118,97,114,32,111,32,61,32,1013 105,99,107,116,105,109,101,32,61,32,110,101,119,32,68,97,
824 116,104,105,115,46,108,105,110,101,115,91,105,93,46,111,102,1014 116,101,40,41,46,103,101,116,84,105,109,101,40,41,59,10,
825 102,10,9,9,105,102,40,33,111,32,38,38,32,33,40,111,1015 10,9,116,104,105,115,46,109,97,114,107,105,110,115,100,97,
826 32,61,61,61,32,48,41,41,123,10,9,9,9,99,111,110,1016 116,97,32,61,32,117,110,100,101,102,105,110,101,100,59,9,
827 115,111,108,101,46,108,111,103,40,34,66,65,68,32,111,102,1017 47,47,32,119,105,108,108,32,98,101,32,100,101,102,105,110,
828 102,32,34,32,43,32,111,32,43,32,34,32,105,110,58,34,1018 101,100,32,100,117,114,105,110,103,32,109,97,114,107,105,110,
829 41,59,10,9,9,9,111,32,61,32,111,102,102,59,10,9,1019 115,10,9,116,104,105,115,46,101,105,110,115,100,97,116,97,
830 9,125,10,9,9,105,102,40,111,32,33,61,32,111,102,102,1020 32,61,32,117,110,100,101,102,105,110,101,100,59,9,47,47,
831 41,123,10,9,9,9,99,111,110,115,111,108,101,46,108,111,1021 32,119,105,108,108,32,98,101,32,100,101,102,105,110,101,100,
832 103,40,34,66,65,68,32,111,102,102,32,34,32,43,32,111,1022 32,100,117,114,105,110,103,32,101,105,110,115,10,9,116,104,
833 32,43,32,34,32,40,33,61,34,32,43,32,111,102,102,32,1023 105,115,46,114,101,108,111,97,100,108,110,48,32,61,32,48,
834 43,32,34,41,32,105,110,58,34,41,59,10,9,9,9,111,1024 59,10,10,9,116,104,105,115,46,99,111,109,112,111,115,105,
835 102,102,32,61,32,111,59,10,9,9,125,10,9,9,111,102,1025 110,103,32,61,32,102,97,108,115,101,59,10,9,116,104,105,
836 102,32,43,61,32,110,59,10,9,9,105,102,40,116,104,105,1026 115,46,108,97,116,105,110,32,61,32,34,34,59,10,10,9,
837 115,46,108,105,110,101,115,91,105,93,46,101,111,108,41,10,1027 118,97,114,32,115,101,108,102,32,61,32,116,104,105,115,59,
1028 9,47,47,32,119,101,32,114,101,119,114,105,116,101,32,104,
1029 97,110,100,108,101,114,115,32,108,97,116,101,114,44,32,97,
1030 110,100,32,117,115,101,32,115,101,108,102,46,10,10,9,116,
1031 104,105,115,46,109,114,108,115,101,32,61,32,102,117,110,99,
1032 116,105,111,110,40,101,41,32,123,10,9,9,118,97,114,32,
1033 98,32,61,32,49,60,60,40,101,46,119,104,105,99,104,45,
1034 49,41,59,10,9,9,105,102,40,98,32,61,61,32,49,32,
1035 38,38,32,116,104,105,115,46,109,97,108,116,41,123,10,9,
1036 9,9,98,32,61,32,50,59,10,9,9,9,116,104,105,115,
1037 46,98,117,116,116,111,110,115,32,38,61,32,126,49,59,10,
1038 9,9,9,116,104,105,115,46,109,97,108,116,32,61,32,102,
1039 97,108,115,101,59,10,9,9,125,10,9,9,116,104,105,115,
1040 46,98,117,116,116,111,110,115,32,38,61,32,126,98,59,10,
1041 9,9,114,101,116,117,114,110,32,98,59,10,9,125,59,10,
1042 10,9,116,104,105,115,46,109,112,114,101,115,115,32,61,32,
1043 102,117,110,99,116,105,111,110,40,101,41,32,123,10,9,9,
1044 118,97,114,32,98,32,61,32,49,60,60,40,101,46,119,104,
1045 105,99,104,45,49,41,59,10,9,9,105,102,40,98,32,61,
1046 61,32,49,32,38,38,32,101,46,97,108,116,75,101,121,41,
1047 123,10,9,9,9,98,32,61,32,50,59,10,9,9,9,116,
1048 104,105,115,46,109,97,108,116,32,61,32,116,114,117,101,59,
1049 10,9,9,125,10,9,9,116,104,105,115,46,98,117,116,116,
1050 111,110,115,32,124,61,32,98,59,10,9,9,114,101,116,117,
1051 114,110,32,98,59,10,9,125,59,10,10,9,47,47,32,115,
1052 101,116,32,108,97,115,116,120,44,32,108,97,115,116,121,32,
1053 116,111,32,101,118,32,99,111,111,114,100,115,32,114,101,108,
1054 97,116,105,118,101,32,116,111,32,99,97,110,118,97,115,10,
1055 9,116,104,105,115,46,101,118,120,121,32,61,32,102,117,110,
1056 99,116,105,111,110,40,101,41,32,123,10,9,9,118,97,114,
1057 32,120,32,61,32,48,59,10,9,9,118,97,114,32,121,32,
1058 61,32,48,59,10,9,9,105,102,40,101,46,102,97,107,101,
1059 120,32,33,61,32,117,110,100,101,102,105,110,101,100,41,32,
1060 123,10,9,9,9,120,32,61,32,101,46,102,97,107,101,120,
1061 59,10,9,9,9,121,32,61,32,101,46,102,97,107,101,121,
1062 59,10,9,9,125,32,101,108,115,101,32,123,10,9,9,9,
1063 118,97,114,32,112,111,102,102,32,61,32,36,40,116,104,105,
1064 115,46,99,41,46,111,102,102,115,101,116,40,41,59,10,9,
1065 9,9,120,32,61,32,101,46,112,97,103,101,88,32,45,32,
1066 112,111,102,102,46,108,101,102,116,59,10,9,9,9,121,32,
1067 61,32,101,46,112,97,103,101,89,32,45,32,112,111,102,102,
1068 46,116,111,112,59,10,9,9,125,10,9,9,116,104,105,115,
1069 46,108,97,115,116,120,32,61,32,120,59,10,9,9,116,104,
1070 105,115,46,108,97,115,116,121,32,61,32,121,59,10,9,125,
1071 59,10,10,9,116,104,105,115,46,109,97,121,114,101,115,105,
1072 122,101,32,61,32,102,117,110,99,116,105,111,110,40,117,115,
1073 101,114,41,32,123,10,9,9,118,97,114,32,99,32,61,32,
1074 36,40,116,104,105,115,46,99,41,59,10,9,9,118,97,114,
1075 32,112,32,61,32,99,46,112,97,114,101,110,116,40,41,59,
1076 10,9,9,118,97,114,32,100,120,32,61,32,112,46,119,105,
1077 100,116,104,40,41,59,10,9,9,118,97,114,32,100,121,32,
1078 61,32,112,46,104,101,105,103,104,116,40,41,32,45,32,53,
1079 59,9,47,47,32,45,53,58,32,108,101,97,118,101,32,97,
1080 32,98,105,116,32,111,102,32,114,111,111,109,10,9,9,99,
1081 111,110,115,111,108,101,46,108,111,103,40,39,116,101,120,116,
1082 32,114,101,115,105,122,101,100,39,44,32,100,120,44,32,100,
1083 121,44,32,117,115,101,114,63,34,117,115,101,114,34,58,34,
1084 119,105,110,34,41,59,10,9,9,118,97,114,32,99,116,120,
1085 32,61,32,116,104,105,115,46,99,46,103,101,116,67,111,110,
1086 116,101,120,116,40,34,50,100,34,44,32,123,97,108,112,104,
1087 97,58,32,102,97,108,115,101,125,41,59,10,9,9,47,47,
1088 32,84,79,68,79,58,32,117,115,101,32,104,101,108,112,101,
1089 114,32,119,104,101,110,32,119,101,32,114,101,119,114,105,116,
1090 101,32,105,110,107,32,106,115,46,10,9,9,118,97,114,32,
1091 116,97,103,32,61,32,36,40,34,35,34,43,116,104,105,115,
1092 46,105,100,43,34,116,34,41,10,9,9,105,102,40,116,97,
1093 103,41,32,123,10,9,9,9,100,121,32,45,61,32,116,97,
1094 103,46,104,101,105,103,104,116,40,41,59,10,9,9,125,10,
1095 9,9,47,47,32,85,115,105,110,103,32,97,32,119,105,100,
1096 116,104,32,115,99,97,108,101,100,32,97,110,100,32,109,97,
1097 107,105,110,103,32,116,104,101,32,115,116,121,108,101,32,117,
1098 115,101,32,116,104,101,32,119,105,100,116,104,10,9,9,47,
1099 47,32,109,97,107,101,115,32,116,104,101,32,116,101,120,116,
1100 32,98,101,116,116,101,114,46,10,9,9,99,46,119,105,100,
1101 116,104,40,100,120,41,59,10,9,9,99,46,104,101,105,103,
1102 104,116,40,100,121,41,59,10,9,9,116,104,105,115,46,99,
1103 46,119,105,100,116,104,32,61,32,116,104,105,115,46,116,115,
1104 99,97,108,101,42,100,120,59,10,9,9,116,104,105,115,46,
1105 99,46,104,101,105,103,104,116,32,61,32,116,104,105,115,46,
1106 116,115,99,97,108,101,42,100,121,59,10,9,9,116,104,105,
1107 115,46,110,108,105,110,101,115,32,61,32,77,97,116,104,46,
1108 102,108,111,111,114,40,116,104,105,115,46,99,46,104,101,105,
1109 103,104,116,47,116,104,105,115,46,102,111,110,116,104,116,41,
1110 59,10,9,9,116,104,105,115,46,115,97,118,101,100,32,61,
1111 32,110,117,108,108,59,10,9,9,116,104,105,115,46,114,101,
1112 102,111,114,109,97,116,40,116,104,105,115,46,108,110,115,41,
1113 59,10,9,9,116,104,105,115,46,114,101,100,114,97,119,116,
1114 101,120,116,40,41,59,10,9,9,10,9,125,59,10,10,9,
1115 47,47,32,116,104,105,115,32,105,115,32,106,117,115,116,32,
1116 97,32,98,117,110,99,104,32,111,102,32,104,101,117,114,105,
1117 115,116,105,99,115,32,116,111,32,109,97,107,101,32,105,116,
1118 32,102,101,101,108,32,111,107,46,10,9,116,104,105,115,46,
1119 97,117,116,111,114,101,115,105,122,101,32,61,32,102,117,110,
1120 99,116,105,111,110,40,97,100,100,115,105,122,101,44,32,109,
1121 111,114,101,108,101,115,115,41,32,123,10,9,9,118,97,114,
1122 32,112,32,61,32,36,40,116,104,105,115,46,99,41,59,10,
1123 9,9,118,97,114,32,111,108,100,104,116,32,61,32,112,46,
1124 104,101,105,103,104,116,40,41,59,10,9,9,118,97,114,32,
1125 104,116,32,61,32,111,108,100,104,116,59,10,9,9,118,97,
1126 114,32,102,111,110,116,104,116,32,61,32,116,104,105,115,46,
1127 102,111,110,116,104,116,47,116,104,105,115,46,116,115,99,97,
1128 108,101,59,10,9,9,105,102,40,97,100,100,115,105,122,101,
1129 41,32,123,10,9,9,9,116,104,105,115,46,117,115,101,114,
1130 114,101,115,105,122,101,100,32,61,32,116,114,117,101,59,10,
1131 9,9,9,105,102,40,109,111,114,101,108,101,115,115,32,62,
1132 32,49,41,123,10,9,9,9,9,118,97,114,32,119,116,111,
1133 112,32,61,32,36,40,119,105,110,100,111,119,41,46,115,99,
1134 114,111,108,108,84,111,112,40,41,59,10,9,9,9,9,118,
1135 97,114,32,101,116,111,112,32,61,32,112,46,111,102,102,115,
1136 101,116,40,41,46,116,111,112,59,10,9,9,9,9,118,97,
1137 114,32,101,111,102,102,32,61,32,101,116,111,112,45,119,116,
1138 111,112,59,10,9,9,9,9,99,111,110,115,111,108,101,46,
1139 108,111,103,40,34,114,101,115,105,122,101,32,34,44,32,119,
1140 116,111,112,44,32,101,116,111,112,44,32,101,111,102,102,41,
1141 59,10,9,9,9,9,104,116,32,61,32,119,105,110,100,111,
1142 119,46,105,110,110,101,114,72,101,105,103,104,116,32,45,32,
1143 49,48,32,45,32,101,111,102,102,59,32,47,47,32,45,49,
1144 48,58,32,108,101,97,118,101,32,115,111,109,101,32,114,111,
1145 111,109,10,9,9,9,125,32,101,108,115,101,32,105,102,40,
1146 109,111,114,101,108,101,115,115,32,62,61,32,48,41,32,123,
1147 10,9,9,9,9,104,116,32,43,61,32,102,111,110,116,104,
1148 116,42,54,59,10,9,9,9,125,32,101,108,115,101,32,123,
1149 10,9,9,9,9,104,116,32,45,61,32,102,111,110,116,104,
1150 116,42,54,59,10,9,9,9,9,105,102,40,104,116,32,60,
1151 32,53,42,102,111,110,116,104,116,41,32,123,10,9,9,9,
1152 9,9,104,116,32,61,32,53,42,102,111,110,116,104,116,59,
1153 10,9,9,9,9,125,10,9,9,9,125,10,9,9,125,101,
1154 108,115,101,123,10,9,9,9,118,97,114,32,110,108,110,32,
1155 61,32,116,104,105,115,46,102,114,108,105,110,101,115,59,10,
1156 9,9,9,105,102,40,110,108,110,32,60,32,51,41,32,123,
1157 10,9,9,9,9,110,108,110,32,61,32,51,59,10,9,9,
1158 9,125,10,9,9,9,104,116,32,61,32,40,110,108,110,43,
1159 50,41,32,42,32,102,111,110,116,104,116,59,10,9,9,9,
1160 105,102,32,40,104,116,32,62,61,32,52,48,48,41,32,123,
1161 9,47,47,32,115,111,109,101,32,105,110,105,116,105,97,108,
1162 32,97,114,98,105,116,114,97,114,121,32,115,112,97,99,101,
1163 46,10,9,9,9,9,104,116,32,61,32,52,48,48,59,10,
1164 9,9,9,125,10,9,9,125,10,9,9,99,111,110,115,111,
1165 108,101,46,108,111,103,40,34,97,117,116,111,32,114,115,122,
1166 34,44,32,110,108,110,44,32,104,116,44,32,111,108,100,104,
1167 116,41,59,10,9,9,105,102,32,40,111,108,100,104,116,32,
1168 60,32,104,116,32,45,32,102,111,110,116,104,116,32,124,124,
1169 32,111,108,100,104,116,32,62,32,104,116,32,43,32,102,111,
1170 110,116,104,116,41,32,123,10,9,9,9,99,111,110,115,111,
1171 108,101,46,108,111,103,40,34,97,117,116,111,32,114,101,115,
1172 105,122,105,110,103,34,41,59,10,9,9,9,118,97,114,32,
1173 100,101,108,116,97,32,61,32,104,116,32,45,32,111,108,100,
1174 104,116,59,10,9,9,9,112,32,61,32,112,46,112,97,114,
1175 101,110,116,40,41,59,10,9,9,9,118,97,114,32,110,104,
1176 116,32,61,32,112,46,104,101,105,103,104,116,40,41,32,43,
1177 32,100,101,108,116,97,59,10,9,9,9,112,46,104,101,105,
1178 103,104,116,40,110,104,116,41,59,10,9,9,9,116,104,105,
1179 115,46,109,97,121,114,101,115,105,122,101,40,41,59,10,9,
1180 9,125,10,9,125,59,10,10,9,116,104,105,115,46,115,101,
1181 108,101,99,116,115,116,97,114,116,32,61,32,102,117,110,99,
1182 116,105,111,110,40,41,32,123,10,9,9,105,102,40,33,116,
1183 104,105,115,46,115,101,108,101,99,116,105,110,103,41,32,123,
1184 10,9,9,9,99,111,110,115,111,108,101,46,108,111,103,40,
1185 34,115,101,108,101,99,116,105,110,103,46,46,46,34,41,59,
1186 10,9,9,125,10,9,9,116,104,105,115,46,115,101,108,101,
1187 99,116,105,110,103,32,61,32,116,114,117,101,59,10,9,9,
1188 115,101,108,101,99,116,105,110,103,32,61,32,116,114,117,101,
1189 59,10,9,9,116,104,105,115,46,111,108,100,112,48,32,61,
1190 32,116,104,105,115,46,112,48,59,10,9,9,116,104,105,115,
1191 46,111,108,100,112,49,32,61,32,116,104,105,115,46,112,49,
1192 59,10,9,125,59,10,10,9,116,104,105,115,46,115,101,108,
1193 101,99,116,101,110,100,32,61,32,102,117,110,99,116,105,111,
1194 110,40,41,32,123,10,9,9,105,102,40,116,104,105,115,46,
1195 109,117,115,116,117,110,108,111,99,107,41,32,123,10,9,9,
1196 9,116,104,105,115,46,117,110,108,111,99,107,101,100,40,41,
1197 59,10,9,9,125,10,9,9,105,102,40,33,116,104,105,115,
1198 46,115,101,108,101,99,116,105,110,103,41,32,123,10,9,9,
1199 9,114,101,116,117,114,110,59,10,9,9,125,10,9,9,99,
1200 111,110,115,111,108,101,46,108,111,103,40,34,115,101,108,101,
1201 99,116,32,101,110,100,34,41,59,10,9,9,105,102,40,116,
1202 104,105,115,46,111,108,100,112,48,32,33,61,32,116,104,105,
1203 115,46,112,48,32,124,124,32,116,104,105,115,46,111,108,100,
1204 112,49,32,33,61,32,116,104,105,115,46,112,49,41,32,123,
1205 10,9,9,9,116,104,105,115,46,112,111,115,116,40,91,34,
1206 116,105,99,107,34,44,32,34,34,43,116,104,105,115,46,112,
1207 48,44,32,34,34,43,116,104,105,115,46,112,49,93,41,59,
1208 10,9,9,9,116,104,105,115,46,111,108,100,112,48,32,61,
1209 32,116,104,105,115,46,112,48,59,10,9,9,9,116,104,105,
1210 115,46,111,108,100,112,49,32,61,32,116,104,105,115,46,112,
1211 49,59,10,9,9,125,10,9,9,116,104,105,115,46,115,101,
1212 108,101,99,116,105,110,103,32,61,32,102,97,108,115,101,59,
1213 10,9,9,115,101,108,101,99,116,105,110,103,32,61,32,102,
1214 97,108,115,101,59,10,9,125,59,10,10,9,116,104,105,115,
1215 46,97,112,112,108,121,32,61,32,102,117,110,99,116,105,111,
1216 110,40,101,118,44,32,102,114,111,109,115,101,114,118,101,114,
1217 41,32,123,10,9,9,105,102,40,33,101,118,32,124,124,32,
1218 33,101,118,46,65,114,103,115,32,124,124,32,33,101,118,46,
1219 65,114,103,115,91,48,93,41,123,10,9,9,9,99,111,110,
1220 115,111,108,101,46,108,111,103,40,34,97,112,112,108,121,58,
1221 32,110,105,108,32,101,118,34,41,59,10,9,9,9,114,101,
1222 116,117,114,110,59,10,9,9,125,10,9,9,118,97,114,32,
1223 97,114,103,32,61,32,101,118,46,65,114,103,115,10,9,9,
1224 105,102,40,116,100,101,98,117,103,41,32,123,10,9,9,9,
1225 99,111,110,115,111,108,101,46,108,111,103,40,116,104,105,115,
1226 46,100,105,118,105,100,44,32,34,97,112,112,108,121,34,44,
1227 32,101,118,46,65,114,103,115,44,32,34,118,34,44,32,101,
1228 118,46,86,101,114,115,44,32,116,104,105,115,46,118,101,114,
1229 115,41,59,10,9,9,125,10,9,9,115,119,105,116,99,104,
1230 40,97,114,103,91,48,93,41,123,10,9,9,99,97,115,101,
1231 32,34,104,101,108,100,34,58,10,9,9,9,116,104,105,115,
1232 46,108,111,99,107,101,100,40,41,59,10,9,9,9,98,114,
1233 101,97,107,59,10,9,9,99,97,115,101,32,34,114,108,115,
1234 101,34,58,10,9,9,9,105,102,40,116,104,105,115,46,115,
1235 101,108,101,99,116,105,110,103,41,32,123,10,9,9,9,9,
1236 116,104,105,115,46,109,117,115,116,117,110,108,111,99,107,32,
1237 61,32,116,114,117,101,59,10,9,9,9,9,98,114,101,97,
1238 107,59,10,9,9,9,125,10,9,9,9,116,104,105,115,46,
1239 117,110,108,111,99,107,101,100,40,41,59,10,9,9,9,98,
1240 114,101,97,107,59,10,9,9,99,97,115,101,32,34,110,111,
1241 101,100,105,116,115,34,58,10,9,9,9,116,104,105,115,46,
1242 110,111,101,100,105,116,115,32,61,32,116,114,117,101,59,10,
1243 9,9,9,98,114,101,97,107,59,10,9,9,99,97,115,101,
1244 32,34,101,100,105,116,115,34,58,10,9,9,9,116,104,105,
1245 115,46,110,111,101,100,105,116,115,32,61,32,102,97,108,115,
1246 101,59,10,9,9,9,98,114,101,97,107,59,10,9,9,99,
1247 97,115,101,32,34,99,108,101,97,110,34,58,10,9,9,9,
1248 105,102,40,100,111,99,117,109,101,110,116,46,115,101,116,99,
1249 108,101,97,110,41,32,123,10,9,9,9,9,100,111,99,117,
1250 109,101,110,116,46,115,101,116,99,108,101,97,110,40,116,104,
1251 105,115,41,59,10,9,9,9,125,10,9,9,9,98,114,101,
1252 97,107,59,10,9,9,99,97,115,101,32,34,100,105,114,116,
1253 121,34,58,10,9,9,9,105,102,40,100,111,99,117,109,101,
1254 110,116,46,115,101,116,100,105,114,116,121,41,32,123,10,9,
1255 9,9,9,100,111,99,117,109,101,110,116,46,115,101,116,100,
1256 105,114,116,121,40,116,104,105,115,41,59,10,9,9,9,125,
1257 10,9,9,9,98,114,101,97,107,59,10,9,9,99,97,115,
1258 101,32,34,115,104,111,119,34,58,10,9,9,9,105,102,40,
1259 100,111,99,117,109,101,110,116,46,115,104,111,119,99,111,110,
1260 116,114,111,108,41,32,123,10,9,9,9,9,100,111,99,117,
1261 109,101,110,116,46,115,104,111,119,99,111,110,116,114,111,108,
1262 40,116,104,105,115,41,59,10,9,9,9,125,10,9,9,9,
1263 98,114,101,97,107,59,10,9,9,99,97,115,101,32,34,116,
1264 97,103,34,58,10,9,9,9,105,102,40,97,114,103,46,108,
1265 101,110,103,116,104,32,60,32,50,41,123,10,9,9,9,9,
1266 99,111,110,115,111,108,101,46,108,111,103,40,116,104,105,115,
1267 46,105,100,44,32,34,97,112,112,108,121,58,32,115,104,111,
1268 114,116,32,116,97,103,34,41,59,10,9,9,9,9,98,114,
1269 101,97,107,59,10,9,9,9,125,10,9,9,9,105,102,40,
1270 100,111,99,117,109,101,110,116,46,115,101,116,116,97,103,41,
1271 32,123,10,9,9,9,9,100,111,99,117,109,101,110,116,46,
1272 115,101,116,116,97,103,40,116,104,105,115,44,32,97,114,103,
1273 91,49,93,41,59,10,9,9,9,125,10,9,9,9,98,114,
1274 101,97,107,59,10,9,9,99,97,115,101,32,34,102,111,110,
1275 116,34,58,10,9,9,9,105,102,40,97,114,103,46,108,101,
1276 110,103,116,104,32,60,32,50,41,123,10,9,9,9,9,99,
1277 111,110,115,111,108,101,46,108,111,103,40,116,104,105,115,46,
1278 105,100,44,32,34,97,112,112,108,121,58,32,115,104,111,114,
1279 116,32,102,111,110,116,34,41,59,10,9,9,9,9,98,114,
1280 101,97,107,59,10,9,9,9,125,10,9,9,9,99,111,110,
1281 115,111,108,101,46,108,111,103,40,116,104,105,115,46,105,100,
1282 44,32,34,102,111,110,116,34,44,32,97,114,103,91,49,93,
1283 41,59,10,9,9,9,116,104,105,115,46,102,111,110,116,115,
1284 116,121,108,101,32,61,32,97,114,103,91,49,93,59,10,9,
1285 9,9,116,104,105,115,46,102,105,120,102,111,110,116,40,41,
1286 59,10,9,9,9,116,104,105,115,46,114,101,100,114,97,119,
1287 116,101,120,116,40,41,59,10,9,9,9,98,114,101,97,107,
1288 59,10,9,9,99,97,115,101,32,34,109,97,114,107,105,110,
1289 115,105,110,103,34,58,10,9,9,9,105,102,40,97,114,103,
1290 46,108,101,110,103,116,104,32,60,32,51,41,123,10,9,9,
1291 9,9,99,111,110,115,111,108,101,46,108,111,103,40,116,104,
1292 105,115,46,105,100,44,32,34,97,112,112,108,121,58,32,115,
1293 104,111,114,116,32,109,97,114,107,105,110,115,105,110,103,34,
1294 41,59,10,9,9,9,9,98,114,101,97,107,59,10,9,9,
1295 9,125,10,9,9,9,105,102,32,40,33,116,104,105,115,46,
1296 109,97,114,107,105,110,115,100,97,116,97,41,32,123,10,9,
838 9,9,9,99,111,110,115,111,108,101,46,108,111,103,40,34,1297 9,9,9,99,111,110,115,111,108,101,46,108,111,103,40,34,
839 34,43,105,43,34,58,32,34,43,111,43,34,91,34,43,110,1298 109,97,114,107,105,110,115,32,101,118,115,46,46,46,34,41,
840 43,34,93,61,92,116,34,32,43,32,116,104,105,115,46,108,1299 59,10,9,9,9,9,116,104,105,115,46,109,97,114,107,105,
841 105,110,101,115,91,105,93,46,116,120,116,32,43,32,34,92,1300 110,115,100,97,116,97,32,61,32,91,93,59,10,9,9,9,
842 92,110,34,41,59,10,9,9,101,108,115,101,10,9,9,9,1301 125,10,9,9,9,116,104,105,115,46,109,97,114,107,105,110,
843 99,111,110,115,111,108,101,46,108,111,103,40,34,34,43,105,1302 115,100,97,116,97,46,112,117,115,104,40,97,114,103,91,50,
844 43,34,58,32,34,43,111,43,34,91,34,43,110,43,34,93,1303 93,41,59,10,9,9,9,98,114,101,97,107,59,10,9,9,
845 61,92,116,34,32,43,32,116,104,105,115,46,108,105,110,101,1304 99,97,115,101,32,34,109,97,114,107,105,110,115,100,111,110,
846 115,91,105,93,46,116,120,116,41,59,10,9,125,10,9,102,1305 101,34,58,10,9,9,9,99,111,110,115,111,108,101,46,108,
847 111,114,40,118,97,114,32,105,32,61,32,48,59,32,105,32,1306 111,103,40,34,109,97,114,107,105,110,115,32,114,117,110,46,
848 60,32,116,104,105,115,46,109,97,114,107,115,46,108,101,110,1307 46,46,34,41,59,10,9,9,9,105,102,40,97,114,103,46,
849 103,116,104,59,32,105,43,43,41,123,10,9,9,99,111,110,1308 108,101,110,103,116,104,32,60,32,50,41,123,10,9,9,9,
850 115,111,108,101,46,108,111,103,40,34,109,97,114,107,58,32,1309 9,99,111,110,115,111,108,101,46,108,111,103,40,116,104,105,
851 34,44,32,116,104,105,115,46,109,97,114,107,115,91,105,93,1310 115,46,105,100,44,32,34,97,112,112,108,121,58,32,115,104,
852 46,110,97,109,101,44,32,116,104,105,115,46,109,97,114,107,1311 111,114,116,32,109,97,114,107,105,110,115,100,111,110,101,34,
853 115,91,105,93,46,112,111,115,41,59,10,9,125,10,9,99,1312 41,59,10,9,9,9,9,98,114,101,97,107,59,10,9,9,
854 111,110,115,111,108,101,46,108,111,103,40,34,115,101,108,58,1313 9,125,10,9,9,9,118,97,114,32,109,32,61,32,116,104,
855 32,34,32,43,32,116,104,105,115,46,112,48,32,43,32,34,1314 105,115,46,103,101,116,109,97,114,107,40,97,114,103,91,49,
856 32,34,32,43,32,116,104,105,115,46,112,49,41,59,10,9,1315 93,41,59,10,9,9,9,105,102,40,33,109,41,32,123,10,
857 99,111,110,115,111,108,101,46,108,111,103,40,34,118,101,114,1316 9,9,9,9,99,111,110,115,111,108,101,46,108,111,103,40,
858 115,58,32,34,44,32,116,104,105,115,46,118,101,114,115,41,1317 116,104,105,115,46,105,100,44,32,34,97,112,112,108,121,58,
859 59,10,125,10,10,102,117,110,99,116,105,111,110,32,110,111,1318 32,110,111,32,109,97,114,107,34,44,32,97,114,103,91,49,
860 116,97,98,115,40,116,44,32,112,111,115,48,41,32,123,10,1319 93,41,59,10,9,9,9,9,98,114,101,97,107,59,10,9,
861 9,105,102,40,116,46,105,110,100,101,120,79,102,40,39,92,1320 9,9,125,10,9,9,9,118,97,114,32,111,112,48,32,61,
862 116,39,41,32,60,32,48,41,10,9,9,114,101,116,117,114,1321 32,116,104,105,115,46,112,48,59,10,9,9,9,118,97,114,
863 110,32,116,59,10,9,118,97,114,32,115,32,61,32,34,34,1322 32,111,112,49,32,61,32,116,104,105,115,46,112,49,59,10,
864 59,10,9,118,97,114,32,112,111,115,32,61,32,48,59,10,1323 9,9,9,105,102,40,111,112,48,32,33,61,32,111,112,49,
865 9,105,102,40,112,111,115,48,41,10,9,9,112,111,115,32,1324 41,32,123,10,9,9,9,9,116,104,105,115,46,115,101,116,
866 61,32,112,111,115,48,59,10,9,102,111,114,40,118,97,114,1325 115,101,108,40,111,112,48,44,32,111,112,48,44,32,102,97,
867 32,105,32,61,32,48,59,32,105,32,60,32,116,46,108,101,1326 108,115,101,41,59,10,9,9,9,125,10,9,9,9,102,111,
868 110,103,116,104,59,32,105,43,43,41,123,10,9,9,118,97,
869 114,32,114,32,61,32,116,46,99,104,97,114,65,116,40,105,
870 41,59,10,9,9,105,102,40,114,32,61,61,32,39,92,116,
871 39,41,32,123,10,9,9,9,100,111,32,123,10,9,9,9,
872 9,115,32,43,61,32,34,32,34,59,10,9,9,9,9,112,
873 111,115,43,43,59,10,9,9,9,125,119,104,105,108,101,40,
874 112,111,115,37,116,104,105,115,46,116,97,98,115,116,111,112,
875 41,59,10,9,9,125,101,108,115,101,123,10,9,9,9,112,
876 111,115,43,43,59,10,9,9,9,115,32,43,61,32,114,59,
877 10,9,9,125,10,9,125,10,9,114,101,116,117,114,110,32,
878 115,59,9,10,125,10,10,102,117,110,99,116,105,111,110,32,
879 116,108,105,110,101,119,114,97,112,40,116,41,32,123,10,9,
880 118,97,114,32,99,32,61,32,116,104,105,115,59,10,9,118,
881 97,114,32,99,116,120,32,61,32,99,46,103,101,116,67,111,
882 110,116,101,120,116,40,34,50,100,34,44,32,123,97,108,112,
883 104,97,58,32,102,97,108,115,101,125,41,59,10,9,118,97,
884 114,32,109,97,114,103,105,110,115,122,32,61,32,51,59,10,
885 9,118,97,114,32,97,118,97,105,108,32,61,32,99,46,119,
886 105,100,116,104,32,45,32,50,42,109,97,114,103,105,110,115,
887 122,59,10,9,118,97,114,32,112,111,115,32,61,32,48,59,
888 10,9,118,97,114,32,115,32,61,32,34,34,59,10,9,102,
889 111,114,40,118,97,114,32,105,32,61,32,48,59,32,105,32,
890 60,32,116,46,108,101,110,103,116,104,59,32,105,43,43,41,
891 123,10,9,9,118,97,114,32,114,32,61,32,116,46,99,104,
892 97,114,65,116,40,105,41,59,10,9,9,105,102,40,114,32,
893 61,61,32,39,92,116,39,41,32,123,10,9,9,9,100,111,
894 32,123,10,9,9,9,9,115,32,43,61,32,34,32,34,59,
895 10,9,9,9,9,112,111,115,43,43,59,10,9,9,9,125,
896 119,104,105,108,101,40,112,111,115,37,116,104,105,115,46,116,
897 97,98,115,116,111,112,41,59,10,9,9,125,101,108,115,101,
898 123,10,9,9,9,112,111,115,43,43,59,10,9,9,9,115,
899 32,43,61,32,114,59,10,9,9,125,10,9,9,105,102,40,
900 99,116,120,46,109,101,97,115,117,114,101,84,101,120,116,40,
901 115,41,46,119,105,100,116,104,32,62,32,97,118,97,105,108,
902 41,123,10,9,9,9,114,101,116,117,114,110,32,105,59,10,
903 9,9,125,10,9,125,10,9,114,101,116,117,114,110,32,116,
904 46,108,101,110,103,116,104,59,10,125,10,10,102,117,110,99,
905 116,105,111,110,32,116,112,111,115,100,120,40,108,110,44,32,
906 110,41,32,123,10,9,118,97,114,32,116,32,61,32,108,110,
907 46,116,120,116,59,10,9,118,97,114,32,99,32,61,32,116,
908 104,105,115,59,10,9,118,97,114,32,99,116,120,32,61,32,
909 99,46,103,101,116,67,111,110,116,101,120,116,40,34,50,100,
910 34,44,32,123,97,108,112,104,97,58,32,102,97,108,115,101,
911 125,41,59,10,9,118,97,114,32,112,111,115,32,61,32,48,
912 59,10,9,118,97,114,32,100,120,32,61,32,48,59,10,9,
913 102,111,114,40,118,97,114,32,105,32,61,32,48,59,32,105,
914 32,60,32,116,46,108,101,110,103,116,104,32,38,38,32,105,
915 32,60,32,110,59,32,105,43,43,41,123,10,9,9,118,97,
916 114,32,114,32,61,32,116,46,99,104,97,114,65,116,40,105,
917 41,59,10,9,9,105,102,40,114,32,61,61,32,39,92,116,
918 39,41,32,123,10,9,9,9,100,111,32,123,10,9,9,9,
919 9,100,120,32,43,61,32,99,116,120,46,109,101,97,115,117,
920 114,101,84,101,120,116,40,34,32,34,41,46,119,105,100,116,
921 104,59,10,9,9,9,9,112,111,115,43,43,59,10,9,9,
922 9,125,119,104,105,108,101,40,112,111,115,37,116,104,105,115,
923 46,116,97,98,115,116,111,112,41,59,10,9,9,125,101,108,
924 115,101,123,10,9,9,9,112,111,115,43,43,59,10,9,9,
925 9,100,120,32,43,61,32,99,116,120,46,109,101,97,115,117,
926 114,101,84,101,120,116,40,114,41,46,119,105,100,116,104,59,
927 10,9,9,125,10,9,125,10,9,114,101,116,117,114,110,32,
928 100,120,59,10,125,10,10,102,117,110,99,116,105,111,110,32,
929 116,112,116,114,50,116,112,111,115,40,99,120,44,32,99,121,
930 41,32,123,10,9,118,97,114,32,109,97,114,103,105,110,115,
931 122,32,61,32,51,59,10,9,118,97,114,32,120,32,61,32,
932 99,120,59,10,9,118,97,114,32,121,32,61,32,99,121,59,
933 10,9,118,97,114,32,111,118,102,32,61,32,48,59,10,9,
934 120,32,42,61,32,116,104,105,115,46,116,115,99,97,108,101,
935 59,10,9,121,32,42,61,32,116,104,105,115,46,116,115,99,
936 97,108,101,59,10,9,118,97,114,32,110,108,110,32,61,32,
937 77,97,116,104,46,102,108,111,111,114,40,121,47,116,104,105,
938 115,46,102,111,110,116,104,116,41,59,10,9,105,102,40,110,
939 108,110,32,60,32,48,32,124,124,32,116,104,105,115,46,108,
940 105,110,101,115,46,108,101,110,103,116,104,32,61,61,32,48,
941 41,10,9,9,114,101,116,117,114,110,32,91,48,44,32,48,
942 44,32,111,118,102,93,59,10,9,105,102,40,110,108,110,43,
943 116,104,105,115,46,108,110,48,32,62,61,32,116,104,105,115,
944 46,108,105,110,101,115,46,108,101,110,103,116,104,41,123,10,
945 9,9,118,97,114,32,108,108,32,61,32,116,104,105,115,46,
946 108,105,110,101,115,91,116,104,105,115,46,108,105,110,101,115,
947 46,108,101,110,103,116,104,45,49,93,59,10,9,9,114,101,
948 116,117,114,110,32,91,108,108,46,116,120,116,46,108,101,110,
949 103,116,104,44,32,116,104,105,115,46,102,114,108,105,110,101,
950 115,45,49,44,32,49,93,59,10,9,125,10,9,105,102,40,
951 110,108,110,32,62,32,116,104,105,115,46,102,114,108,105,110,
952 101,115,41,123,9,9,47,47,32,111,118,101,114,102,108,111,
953 119,10,9,9,114,101,116,117,114,110,32,91,108,108,46,116,
954 120,116,46,108,101,110,103,116,104,44,32,116,104,105,115,46,
955 102,114,108,105,110,101,115,45,49,44,32,49,93,59,10,9,
956 125,10,9,118,97,114,32,112,111,115,32,61,32,48,59,10,
957 9,118,97,114,32,108,108,32,61,32,116,104,105,115,46,108,
958 105,110,101,115,91,110,108,110,43,116,104,105,115,46,108,110,
959 48,93,59,10,9,102,111,114,40,59,32,112,111,115,32,60,
960 61,32,108,108,46,116,120,116,46,108,101,110,103,116,104,59,
961 32,112,111,115,43,43,41,123,10,9,9,118,97,114,32,99,
962 111,102,102,32,61,32,116,104,105,115,46,112,111,115,100,120,
963 40,108,108,44,32,112,111,115,41,59,10,9,9,105,102,40,
964 99,111,102,102,43,109,97,114,103,105,110,115,122,32,62,32,
965 120,41,123,10,9,9,9,105,102,40,112,111,115,32,62,32,
966 48,41,10,9,9,9,9,112,111,115,45,45,59,10,9,9,
967 9,98,114,101,97,107,59,10,9,9,125,10,9,125,10,9,
968 105,102,40,112,111,115,32,62,32,108,108,46,116,120,116,46,
969 108,101,110,103,116,104,41,123,10,9,9,112,111,115,32,61,
970 32,108,108,46,116,120,116,46,108,101,110,103,116,104,59,10,
971 9,9,114,101,116,117,114,110,32,91,112,111,115,44,32,110,
972 108,110,44,32,49,93,59,10,9,125,10,9,114,101,116,117,
973 114,110,32,91,112,111,115,44,32,110,108,110,44,32,48,93,
974 59,10,125,10,10,102,117,110,99,116,105,111,110,32,116,116,
975 112,111,115,50,112,111,115,40,120,44,32,110,108,110,41,32,
976 123,10,9,105,102,40,110,108,110,32,60,32,48,41,10,9,
977 9,114,101,116,117,114,110,32,48,59,10,9,105,102,40,110,
978 108,110,43,116,104,105,115,46,108,110,48,32,62,61,32,116,
979 104,105,115,46,108,105,110,101,115,46,108,101,110,103,116,104,
980 41,10,9,9,114,101,116,117,114,110,32,116,104,105,115,46,
981 110,114,117,110,101,115,59,10,9,118,97,114,32,112,111,115,
982 32,61,32,116,104,105,115,46,108,105,110,101,115,91,116,104,
983 105,115,46,108,110,48,93,46,111,102,102,59,10,9,102,111,
984 114,40,118,97,114,32,105,32,61,32,48,59,32,105,32,60,1327 114,40,118,97,114,32,105,32,61,32,48,59,32,105,32,60,
985 32,110,108,110,32,38,38,32,105,43,116,104,105,115,46,108,1328 32,116,104,105,115,46,109,97,114,107,105,110,115,100,97,116,
986 110,48,32,60,32,116,104,105,115,46,108,105,110,101,115,46,1329 97,46,108,101,110,103,116,104,59,32,105,43,43,41,32,123,
987 108,101,110,103,116,104,59,32,105,43,43,41,10,9,9,112,1330 10,9,9,9,9,118,97,114,32,100,97,116,97,32,61,32,
988 111,115,32,43,61,32,108,110,108,101,110,40,116,104,105,115,1331 116,104,105,115,46,109,97,114,107,105,110,115,100,97,116,97,
989 46,108,105,110,101,115,91,116,104,105,115,46,108,110,48,43,1332 91,105,93,59,10,9,9,9,9,118,97,114,32,110,108,101,
990 105,93,41,59,10,9,105,102,40,110,108,110,32,43,32,116,1333 110,32,61,32,100,97,116,97,46,108,101,110,103,116,104,59,
991 104,105,115,46,108,110,48,32,60,32,116,104,105,115,46,108,1334 10,9,9,9,9,118,97,114,32,110,112,111,115,32,61,32,
992 105,110,101,115,46,108,101,110,103,116,104,41,10,9,9,112,1335 109,46,112,111,115,32,43,32,110,108,101,110,59,10,9,9,
993 111,115,32,43,61,32,120,59,10,9,114,101,116,117,114,110,1336 9,9,118,97,114,32,111,112,111,115,32,61,32,109,46,112,
994 32,112,111,115,59,10,125,10,10,102,117,110,99,116,105,111,1337 111,115,59,10,9,9,9,9,111,112,48,32,61,32,116,104,
995 110,32,116,117,110,116,105,99,107,40,41,32,123,10,9,118,1338 105,115,46,112,48,59,10,9,9,9,9,111,112,49,32,61,
996 97,114,32,99,32,61,32,116,104,105,115,59,10,9,118,97,1339 32,116,104,105,115,46,112,49,59,10,9,9,9,9,116,104,
997 114,32,99,116,120,32,61,32,99,46,103,101,116,67,111,110,1340 105,115,46,112,48,32,61,32,109,46,112,111,115,59,10,9,
998 116,101,120,116,40,34,50,100,34,44,32,123,97,108,112,104,1341 9,9,9,116,104,105,115,46,112,49,32,61,32,109,46,112,
999 97,58,32,102,97,108,115,101,125,41,59,10,9,105,102,40,1342 111,115,59,10,9,9,9,9,116,104,105,115,46,105,110,115,
1000 33,116,104,105,115,46,115,97,118,101,100,41,10,9,9,114,1343 40,100,97,116,97,44,32,116,114,117,101,41,59,10,9,9,
1001 101,116,117,114,110,59,10,9,99,116,120,46,112,117,116,73,1344 9,9,109,46,112,111,115,32,61,32,110,112,111,115,59,10,
1002 109,97,103,101,68,97,116,97,40,116,104,105,115,46,115,97,1345 9,9,9,9,105,102,40,111,112,48,32,62,32,111,112,111,
1003 118,101,100,44,32,116,104,105,115,46,116,105,99,107,120,44,1346 115,41,10,9,9,9,9,9,111,112,48,32,43,61,32,110,
1004 32,116,104,105,115,46,116,105,99,107,121,41,59,10,9,116,1347 108,101,110,59,10,9,9,9,9,105,102,40,111,112,49,32,
1005 104,105,115,46,115,97,118,101,100,32,61,32,110,117,108,108,1348 62,32,111,112,111,115,41,10,9,9,9,9,9,111,112,49,
1006 59,10,125,10,10,102,117,110,99,116,105,111,110,32,116,118,1349 32,43,61,32,110,108,101,110,59,10,9,9,9,9,116,104,
1007 105,101,119,115,101,108,40,41,32,123,10,9,105,102,40,116,1350 105,115,46,112,48,32,61,32,111,112,48,59,10,9,9,9,
1008 104,105,115,46,108,105,110,101,115,91,116,104,105,115,46,108,1351 9,116,104,105,115,46,112,49,32,61,32,111,112,49,59,10,
1009 110,48,93,41,32,123,10,9,9,118,97,114,32,111,102,102,1352 9,9,9,9,105,102,40,101,118,46,86,101,114,115,41,32,
1010 32,61,32,116,104,105,115,46,108,105,110,101,115,91,116,104,1353 123,10,9,9,9,9,9,116,104,105,115,46,118,101,114,115,
1011 105,115,46,108,110,48,93,46,111,102,102,59,10,9,9,118,1354 32,61,32,101,118,46,86,101,114,115,59,10,9,9,9,9,
1012 97,114,32,101,111,102,102,32,61,32,111,102,102,43,116,104,1355 125,10,9,9,9,125,10,9,9,9,116,104,105,115,46,115,
1013 105,115,46,102,114,115,105,122,101,59,10,9,9,105,102,40,1356 101,116,115,101,108,40,111,112,48,44,32,111,112,49,44,32,
1014 116,104,105,115,46,112,48,32,62,61,32,111,102,102,32,38,1357 102,97,108,115,101,41,59,10,9,9,9,100,101,108,101,116,
1015 38,32,116,104,105,115,46,112,48,32,60,61,32,101,111,102,1358 101,32,116,104,105,115,46,109,97,114,107,105,110,115,100,97,
1016 102,41,32,123,10,9,9,9,114,101,116,117,114,110,59,10,1359 116,97,59,10,9,9,9,105,102,40,33,116,104,105,115,46,
1017 9,9,125,10,9,125,10,9,102,111,114,40,118,97,114,32,1360 117,115,101,114,114,101,115,105,122,101,100,41,32,123,10,9,
1018 105,32,61,32,48,59,32,105,32,60,32,116,104,105,115,46,1361 9,9,9,116,104,105,115,46,97,117,116,111,114,101,115,105,
1019 108,105,110,101,115,46,108,101,110,103,116,104,59,32,105,43,1362 122,101,40,41,59,10,9,9,9,125,32,10,9,9,9,99,
1020 43,41,123,10,9,9,118,97,114,32,120,108,110,32,61,32,1363 111,110,115,111,108,101,46,108,111,103,40,116,104,105,115,46,
1021 116,104,105,115,46,108,105,110,101,115,91,105,93,59,10,9,1364 105,100,44,32,34,109,97,114,107,105,110,115,32,100,111,110,
1022 9,118,97,114,32,120,108,110,108,101,110,32,61,32,120,108,1365 101,34,41,59,10,9,9,9,98,114,101,97,107,59,10,9,
1023 110,46,116,120,116,46,108,101,110,103,116,104,59,10,9,9,1366 9,99,97,115,101,32,34,101,105,110,115,105,110,103,34,58,
1024 105,102,40,116,104,105,115,46,112,48,32,62,61,32,120,108,1367 10,9,9,9,105,102,40,97,114,103,46,108,101,110,103,116,
1025 110,46,111,102,102,32,38,38,32,116,104,105,115,46,112,48,1368 104,32,60,32,50,41,123,10,9,9,9,9,99,111,110,115,
1026 32,60,61,32,120,108,110,46,111,102,102,43,120,108,110,108,1369 111,108,101,46,108,111,103,40,116,104,105,115,46,100,105,118,
1027 101,110,41,123,10,9,9,9,118,97,114,32,110,32,61,32,1370 105,100,44,32,34,97,112,112,108,121,58,32,115,104,111,114,
1028 105,32,45,32,77,97,116,104,46,102,108,111,111,114,40,116,1371 116,32,101,105,110,115,105,110,103,34,41,59,10,9,9,9,
1029 104,105,115,46,102,114,108,105,110,101,115,47,51,41,59,10,1372 9,98,114,101,97,107,59,10,9,9,9,125,10,9,9,9,
1030 9,9,9,105,102,40,110,32,60,32,48,41,32,123,10,9,1373 105,102,32,40,33,116,104,105,115,46,101,105,110,115,100,97,
1031 9,9,9,110,32,61,32,48,59,10,9,9,9,125,10,9,1374 116,97,41,32,123,10,9,9,9,9,99,111,110,115,111,108,
1032 9,9,105,102,40,110,32,62,61,32,116,104,105,115,46,108,1375 101,46,108,111,103,40,34,101,105,110,115,32,101,118,115,46,
1033 105,110,101,115,46,108,101,110,103,116,104,41,32,123,10,9,1376 46,46,34,41,59,10,9,9,9,9,116,104,105,115,46,101,
1034 9,9,9,110,32,61,32,116,104,105,115,46,108,105,110,101,1377 105,110,115,100,97,116,97,32,61,32,91,93,59,10,9,9,
1035 115,46,108,101,110,103,116,104,45,49,59,10,9,9,9,125,1378 9,125,10,9,9,9,116,104,105,115,46,101,105,110,115,100,
1036 10,9,9,9,120,108,110,32,61,32,116,104,105,115,46,108,1379 97,116,97,46,112,117,115,104,40,97,114,103,91,49,93,41,
1037 105,110,101,115,91,110,93,59,10,9,9,9,105,102,40,120,1380 59,10,9,9,9,98,114,101,97,107,59,10,9,9,99,97,
1038 108,110,41,32,123,10,9,9,9,9,116,104,105,115,46,108,1381 115,101,32,34,101,105,110,115,100,111,110,101,34,58,10,9,
1039 110,48,32,61,32,110,59,10,9,9,9,9,116,104,105,115,1382 9,9,99,111,110,115,111,108,101,46,108,111,103,40,116,104,
1040 46,102,114,111,102,102,32,61,32,120,108,110,46,111,102,102,1383 105,115,46,105,100,44,32,34,101,105,110,115,32,114,117,110,
1041 59,10,9,9,9,9,116,104,105,115,46,114,101,100,114,97,1384 46,46,46,34,41,59,10,9,9,9,105,102,40,97,114,103,
1042 119,116,101,120,116,40,41,59,10,9,9,9,125,32,101,108,1385 46,108,101,110,103,116,104,32,60,32,50,41,123,10,9,9,
1043 115,101,32,123,10,9,9,9,9,99,111,110,115,111,108,101,1386 9,9,99,111,110,115,111,108,101,46,108,111,103,40,116,104,
1044 46,108,111,103,40,34,116,118,105,101,119,115,101,108,58,32,1387 105,115,46,105,100,44,32,34,97,112,112,108,121,58,32,115,
1045 110,111,32,108,110,32,102,111,114,34,44,32,110,44,32,105,1388 104,111,114,116,32,105,110,115,34,41,59,10,9,9,9,9,
1046 41,59,10,9,9,9,125,10,9,9,9,114,101,116,117,114,1389 98,114,101,97,107,59,10,9,9,9,125,10,9,9,9,105,
1047 110,59,10,9,9,125,10,9,125,10,125,10,10,102,117,110,1390 102,40,101,118,46,86,101,114,115,32,38,38,32,102,114,111,
1048 99,116,105,111,110,32,116,116,115,101,116,115,101,108,40,112,1391 109,115,101,114,118,101,114,32,38,38,32,101,118,46,86,101,
1049 48,44,32,112,49,44,32,114,101,102,114,101,115,104,97,108,1392 114,115,32,33,61,32,116,104,105,115,46,118,101,114,115,43,
1050 108,41,32,123,10,9,118,97,114,32,99,32,61,32,116,104,1393 49,41,123,10,9,9,9,9,99,111,110,115,111,108,101,46,
1051 105,115,59,10,9,118,97,114,32,99,116,120,32,61,32,99,1394 108,111,103,40,34,79,85,84,32,79,70,32,83,89,78,67,
1052 46,103,101,116,67,111,110,116,101,120,116,40,34,50,100,34,1395 34,44,32,101,118,46,65,114,103,115,44,32,34,118,34,44,
1053 44,32,123,97,108,112,104,97,58,32,102,97,108,115,101,125,1396 32,101,118,46,86,101,114,115,44,32,116,104,105,115,46,118,
1054 41,59,10,9,105,102,40,112,48,32,62,32,116,104,105,115,1397 101,114,115,41,59,10,9,9,9,9,116,104,105,115,46,112,
1055 46,110,114,117,110,101,115,41,10,9,9,112,48,32,61,32,1398 111,115,116,40,91,34,110,101,101,100,114,101,108,111,97,100,
1056 116,104,105,115,46,110,114,117,110,101,115,59,10,9,105,102,1399 34,93,41,59,10,9,9,9,9,100,101,108,101,116,101,32,
1057 40,112,49,32,60,32,112,48,41,10,9,9,112,49,32,61,1400 116,104,105,115,46,101,105,110,115,100,97,116,97,59,10,9,
1058 32,112,48,59,10,9,105,102,40,112,49,32,62,32,116,104,1401 9,9,9,98,114,101,97,107,59,10,9,9,9,125,10,9,
1059 105,115,46,110,114,117,110,101,115,41,10,9,9,112,49,32,1402 9,9,118,97,114,32,112,48,32,61,32,112,97,114,115,101,
1060 61,32,116,104,105,115,46,110,114,117,110,101,115,59,10,9,1403 73,110,116,40,97,114,103,91,49,93,41,59,10,9,9,9,
1061 105,102,40,116,104,105,115,46,112,48,32,33,61,32,116,104,1404 118,97,114,32,111,112,48,32,61,32,116,104,105,115,46,112,
1062 105,115,46,112,49,41,10,9,9,114,101,102,114,101,115,104,1405 48,59,10,9,9,9,118,97,114,32,111,112,49,32,61,32,
1063 97,108,108,32,61,32,116,114,117,101,59,10,9,105,102,40,1406 116,104,105,115,46,112,49,59,10,9,9,9,105,102,40,111,
1064 33,116,104,105,115,46,108,105,110,101,115,91,116,104,105,115,1407 112,48,32,33,61,32,111,112,49,41,32,123,10,9,9,9,
1065 46,108,110,48,93,41,32,123,10,9,9,114,101,116,117,114,1408 9,116,104,105,115,46,115,101,116,115,101,108,40,111,112,48,
1066 110,59,10,9,125,10,9,118,97,114,32,102,114,111,102,102,1409 44,32,111,112,48,44,32,102,97,108,115,101,41,59,10,9,
1067 32,61,32,116,104,105,115,46,108,105,110,101,115,91,116,104,1410 9,9,125,10,9,9,9,116,104,105,115,46,112,48,32,61,
1068 105,115,46,108,110,48,93,46,111,102,102,59,10,9,105,102,1411 32,112,48,59,10,9,9,9,116,104,105,115,46,112,49,32,
1069 40,114,101,102,114,101,115,104,97,108,108,32,38,38,32,40,1412 61,32,112,48,59,10,9,9,9,102,111,114,40,118,97,114,
1070 116,104,105,115,46,112,49,32,60,102,114,111,102,102,32,124,1413 32,105,32,61,32,48,59,32,105,32,60,32,116,104,105,115,
1071 124,32,116,104,105,115,46,112,48,32,62,102,114,111,102,102,1414 46,101,105,110,115,100,97,116,97,46,108,101,110,103,116,104,
1072 43,116,104,105,115,46,102,114,115,105,122,101,41,41,10,9,1415 59,32,105,43,43,41,32,123,10,9,9,9,9,118,97,114,
1073 9,114,101,102,114,101,115,104,97,108,108,32,61,32,102,97,1416 32,100,97,116,97,32,61,32,116,104,105,115,46,101,105,110,
1074 108,115,101,59,10,9,118,97,114,32,109,112,48,32,61,32,1417 115,100,97,116,97,91,105,93,59,10,9,9,9,9,116,104,
1075 112,48,59,10,9,118,97,114,32,109,112,49,32,61,32,112,1418 105,115,46,105,110,115,40,100,97,116,97,44,32,102,97,108,
1076 49,59,10,9,105,102,40,114,101,102,114,101,115,104,97,108,1419 115,101,41,59,10,9,9,9,9,105,102,40,111,112,48,32,
1077 108,41,123,10,9,9,105,102,40,116,104,105,115,46,112,48,1420 62,32,112,48,41,10,9,9,9,9,9,111,112,48,32,43,
1078 32,60,32,109,112,48,41,10,9,9,9,109,112,48,32,61,1421 61,32,100,97,116,97,46,108,101,110,103,116,104,59,10,9,
1079 32,116,104,105,115,46,112,48,59,10,9,9,105,102,40,116,1422 9,9,9,105,102,40,111,112,49,32,62,32,112,48,41,10,
1080 104,105,115,46,112,49,32,62,32,109,112,49,41,10,9,9,1423 9,9,9,9,9,111,112,49,32,43,61,32,100,97,116,97,
1081 9,109,112,49,32,61,32,116,104,105,115,46,112,49,59,10,1424 46,108,101,110,103,116,104,59,10,9,9,9,125,10,9,9,
1082 9,125,10,9,116,104,105,115,46,112,48,32,61,32,112,48,1425 9,100,101,108,101,116,101,32,116,104,105,115,46,101,105,110,
1083 59,10,9,116,104,105,115,46,112,49,32,61,32,112,49,59,1426 115,100,97,116,97,59,10,9,9,9,116,104,105,115,46,115,
1084 10,9,116,104,105,115,46,117,110,116,105,99,107,40,41,59,1427 101,116,115,101,108,40,111,112,48,44,32,111,112,49,44,32,
1085 10,9,105,102,40,109,112,49,32,60,102,114,111,102,102,32,1428 102,97,108,115,101,41,59,10,9,9,9,105,102,40,101,118,
1086 124,124,32,109,112,48,32,62,102,114,111,102,102,43,116,104,1429 46,86,101,114,115,41,32,123,10,9,9,9,9,116,104,105,
1087 105,115,46,102,114,115,105,122,101,41,10,9,9,114,101,116,1430 115,46,118,101,114,115,32,61,32,101,118,46,86,101,114,115,
1088 117,114,110,59,10,9,118,97,114,32,105,110,115,101,108,32,1431 59,10,9,9,9,125,10,9,9,9,105,102,40,33,116,104,
1089 61,32,102,97,108,115,101,59,10,9,102,111,114,40,118,97,1432 105,115,46,117,115,101,114,114,101,115,105,122,101,100,41,32,
1090 114,32,105,32,61,32,48,59,32,105,32,60,32,116,104,105,1433 123,10,9,9,9,9,116,104,105,115,46,97,117,116,111,114,
1091 115,46,102,114,108,105,110,101,115,59,32,105,43,43,41,123,1434 101,115,105,122,101,40,41,59,10,9,9,9,125,32,10,9,
1092 10,9,9,105,102,40,116,104,105,115,46,108,110,48,43,105,1435 9,9,99,111,110,115,111,108,101,46,108,111,103,40,116,104,
1093 32,62,61,32,116,104,105,115,46,108,105,110,101,115,46,108,1436 105,115,46,105,100,44,32,34,101,105,110,115,32,100,111,110,
1094 101,110,103,116,104,41,10,9,9,9,98,114,101,97,107,59,1437 101,34,41,59,10,9,9,9,98,114,101,97,107,59,10,9,
1095 10,9,9,118,97,114,32,120,108,110,32,61,32,116,104,105,1438 9,99,97,115,101,32,34,101,105,110,115,34,58,10,9,9,
1096 115,46,108,105,110,101,115,91,116,104,105,115,46,108,110,48,1439 9,105,102,40,97,114,103,46,108,101,110,103,116,104,32,60,
1097 43,105,93,59,10,9,9,105,102,40,109,112,49,32,62,61,1440 32,51,41,123,10,9,9,9,9,99,111,110,115,111,108,101,
1098 32,120,108,110,46,111,102,102,32,38,38,32,109,112,48,32,1441 46,108,111,103,40,116,104,105,115,46,105,100,44,32,34,97,
1099 60,61,32,120,108,110,46,111,102,102,43,120,108,110,46,116,1442 112,112,108,121,58,32,115,104,111,114,116,32,105,110,115,34,
1100 120,116,46,108,101,110,103,116,104,41,10,9,9,9,105,110,1443 41,59,10,9,9,9,9,98,114,101,97,107,59,10,9,9,
1101 115,101,108,61,116,114,117,101,59,10,9,9,105,102,40,105,1444 9,125,10,9,9,9,105,102,40,101,118,46,86,101,114,115,
1102 110,115,101,108,41,10,9,9,9,116,104,105,115,46,100,114,1445 32,38,38,32,102,114,111,109,115,101,114,118,101,114,32,38,
1103 97,119,108,105,110,101,40,120,108,110,44,32,105,41,59,10,1446 38,32,101,118,46,86,101,114,115,32,33,61,32,116,104,105,
1104 9,9,105,102,40,109,112,49,32,60,32,120,108,110,46,111,1447 115,46,118,101,114,115,43,49,41,123,10,9,9,9,9,99,
1105 102,102,41,10,9,9,9,98,114,101,97,107,59,10,9,125,1448 111,110,115,111,108,101,46,108,111,103,40,34,79,85,84,32,
1106 10,125,10,10,102,117,110,99,116,105,111,110,32,116,117,112,1449 79,70,32,83,89,78,67,34,44,32,101,118,46,65,114,103,
1107 100,97,116,101,115,99,114,108,40,41,32,123,10,9,118,97,1450 115,44,32,34,118,34,44,32,101,118,46,86,101,114,115,44,
1108 114,32,99,32,61,32,116,104,105,115,59,10,9,118,97,114,1451 32,116,104,105,115,46,118,101,114,115,41,59,10,9,9,9,
1109 32,99,116,120,32,61,32,99,46,103,101,116,67,111,110,116,1452 9,116,104,105,115,46,112,111,115,116,40,91,34,110,101,101,
1110 101,120,116,40,34,50,100,34,44,32,123,97,108,112,104,97,1453 100,114,101,108,111,97,100,34,93,41,59,10,9,9,9,9,
1111 58,32,102,97,108,115,101,125,41,59,10,9,118,97,114,32,1454 98,114,101,97,107,59,10,9,9,9,125,10,9,9,9,118,
1112 121,48,32,61,32,116,104,105,115,46,108,110,48,32,47,32,1455 97,114,32,112,48,32,61,32,112,97,114,115,101,73,110,116,
1113 116,104,105,115,46,108,105,110,101,115,46,108,101,110,103,116,1456 40,97,114,103,91,50,93,41,59,10,9,9,9,118,97,114,
1114 104,32,42,32,99,46,104,101,105,103,104,116,59,10,9,118,1457 32,111,112,48,32,61,32,116,104,105,115,46,112,48,59,10,
1115 97,114,32,100,121,32,61,32,116,104,105,115,46,102,114,108,1458 9,9,9,118,97,114,32,111,112,49,32,61,32,116,104,105,
1116 105,110,101,115,32,47,32,116,104,105,115,46,108,105,110,101,1459 115,46,112,49,59,10,9,9,9,105,102,40,111,112,48,32,
1117 115,46,108,101,110,103,116,104,32,42,32,99,46,104,101,105,1460 33,61,32,111,112,49,41,32,123,10,9,9,9,9,116,104,
1118 103,104,116,59,10,10,9,47,47,32,114,105,103,104,116,10,1461 105,115,46,115,101,116,115,101,108,40,111,112,48,44,32,111,
1119 9,99,116,120,46,99,108,101,97,114,82,101,99,116,40,99,1462 112,48,41,59,10,9,9,9,125,10,9,9,9,116,104,105,
1120 46,119,105,100,116,104,45,54,44,32,48,44,32,54,44,32,1463 115,46,112,48,32,61,32,112,48,59,10,9,9,9,116,104,
1121 121,48,41,59,10,9,118,97,114,32,111,108,100,32,61,32,1464 105,115,46,112,49,32,61,32,112,48,59,10,9,9,9,116,
1122 99,116,120,46,102,105,108,108,83,116,121,108,101,59,10,9,1465 104,105,115,46,105,110,115,40,97,114,103,91,49,93,44,32,
1123 99,116,120,46,102,105,108,108,83,116,121,108,101,32,61,32,1466 102,97,108,115,101,41,59,10,9,9,9,105,102,40,111,112,
1124 34,35,55,51,55,51,70,70,34,59,10,9,99,116,120,46,1467 48,32,62,32,112,48,41,10,9,9,9,9,111,112,48,32,
1125 102,105,108,108,82,101,99,116,40,99,46,119,105,100,116,104,1468 43,61,32,97,114,103,91,49,93,46,108,101,110,103,116,104,
1126 45,54,44,32,121,48,44,32,54,44,32,100,121,41,59,10,1469 59,10,9,9,9,105,102,40,111,112,49,32,62,32,112,48,
1127 9,99,116,120,46,102,105,108,108,83,116,121,108,101,32,61,1470 41,10,9,9,9,9,111,112,49,32,43,61,32,97,114,103,
1128 32,111,108,100,59,10,9,99,116,120,46,99,108,101,97,114,1471 91,49,93,46,108,101,110,103,116,104,59,10,9,9,9,105,
1129 82,101,99,116,40,99,46,119,105,100,116,104,45,54,44,32,1472 102,40,102,114,111,109,115,101,114,118,101,114,41,32,123,10,
1130 121,48,43,100,121,44,32,54,44,32,99,46,104,101,105,103,1473 9,9,9,9,116,104,105,115,46,115,101,116,115,101,108,40,
1131 104,116,45,40,121,48,43,100,121,41,41,59,10,10,9,47,1474 111,112,48,44,32,111,112,49,44,32,102,97,108,115,101,41,
1132 47,32,108,101,102,116,10,9,105,102,40,48,41,32,123,9,1475 59,10,9,9,9,125,10,9,9,9,105,102,40,101,118,46,
1133 10,9,9,99,116,120,46,99,108,101,97,114,82,101,99,116,1476 86,101,114,115,41,32,123,10,9,9,9,9,116,104,105,115,
1134 40,48,44,32,48,44,32,49,44,32,121,48,41,59,10,9,1477 46,118,101,114,115,32,61,32,101,118,46,86,101,114,115,59,
1135 9,99,116,120,46,102,105,108,108,82,101,99,116,40,48,44,1478 10,9,9,9,125,10,9,9,9,105,102,40,33,116,104,105,
1136 32,121,48,44,32,49,44,32,100,121,41,59,10,9,9,99,1479 115,46,117,115,101,114,114,101,115,105,122,101,100,32,38,38,
1137 116,120,46,99,108,101,97,114,82,101,99,116,40,48,44,32,1480 32,97,114,103,91,49,93,46,105,110,100,101,120,79,102,40,
1138 121,48,43,100,121,44,32,49,44,32,99,46,104,101,105,103,1481 39,92,110,39,41,32,62,61,32,48,41,32,123,10,9,9,
1139 104,116,45,40,121,48,43,100,121,41,41,59,10,9,125,10,1482 9,9,116,104,105,115,46,97,117,116,111,114,101,115,105,122,
1140 125,10,10,102,117,110,99,116,105,111,110,32,116,100,114,97,1483 101,40,41,59,10,9,9,9,125,32,10,9,9,9,98,114,
1141 119,108,105,110,101,40,120,108,110,44,32,105,41,32,123,10,1484 101,97,107,59,10,9,9,99,97,115,101,32,34,101,100,101,
1142 9,118,97,114,32,99,32,61,32,116,104,105,115,59,10,9,1485 108,34,58,10,9,9,9,105,102,40,97,114,103,46,108,101,
1143 118,97,114,32,99,116,120,32,61,32,99,46,103,101,116,67,1486 110,103,116,104,32,60,32,51,41,123,10,9,9,9,9,99,
1144 111,110,116,101,120,116,40,34,50,100,34,44,32,123,97,108,1487 111,110,115,111,108,101,46,108,111,103,40,116,104,105,115,46,
1145 112,104,97,58,32,102,97,108,115,101,125,41,59,10,9,118,1488 105,100,44,32,34,97,112,112,108,121,58,32,115,104,111,114,
1146 97,114,32,108,110,104,116,32,61,32,116,104,105,115,46,102,1489 116,32,100,101,108,34,41,59,10,9,9,9,9,98,114,101,
1147 111,110,116,104,116,59,10,9,118,97,114,32,109,97,114,103,1490 97,107,59,10,9,9,9,125,10,9,9,9,105,102,40,101,
1148 105,110,115,122,32,61,32,54,59,10,9,118,97,114,32,97,1491 118,46,86,101,114,115,32,38,38,32,102,114,111,109,115,101,
1149 118,97,105,108,32,61,32,99,46,119,105,100,116,104,32,45,1492 114,118,101,114,32,38,38,32,101,118,46,86,101,114,115,32,
1150 32,50,42,109,97,114,103,105,110,115,122,32,45,49,59,10,1493 33,61,32,116,104,105,115,46,118,101,114,115,43,49,41,123,
1151 9,118,97,114,32,112,111,115,32,61,32,105,42,108,110,104,1494 10,9,9,9,9,99,111,110,115,111,108,101,46,108,111,103,
1152 116,59,10,9,105,102,40,112,111,115,32,62,61,32,99,46,1495 40,34,79,85,84,32,79,70,32,83,89,78,67,34,44,32,
1153 104,101,105,103,104,116,41,10,9,9,114,101,116,117,114,110,1496 101,118,46,65,114,103,115,44,32,34,118,34,44,32,101,118,
1154 32,102,97,108,115,101,59,10,9,105,102,40,33,120,108,110,1497 46,86,101,114,115,44,32,116,104,105,115,46,118,101,114,115,
1155 41,123,10,9,9,99,116,120,46,99,108,101,97,114,82,101,1498 41,59,10,9,9,9,9,116,104,105,115,46,112,111,115,116,
1156 99,116,40,49,44,32,112,111,115,44,32,99,46,119,105,100,1499 40,91,34,110,101,101,100,114,101,108,111,97,100,34,93,41,
1157 116,104,45,49,44,32,108,110,104,116,41,59,10,9,9,114,1500 59,10,9,9,9,125,10,9,9,9,118,97,114,32,112,48,
1158 101,116,117,114,110,32,116,114,117,101,59,10,9,125,10,9,1501 32,61,32,112,97,114,115,101,73,110,116,40,97,114,103,91,
1159 118,97,114,32,108,110,32,61,32,116,104,105,115,46,110,111,1502 49,93,41,59,10,9,9,9,118,97,114,32,112,49,32,61,
1160 116,97,98,115,40,120,108,110,46,116,120,116,41,59,10,9,1503 32,112,97,114,115,101,73,110,116,40,97,114,103,91,50,93,
1161 47,42,32,100,114,97,119,32,115,101,108,101,99,116,101,100,1504 41,59,10,9,9,9,118,97,114,32,111,112,48,32,61,32,
1162 32,108,105,110,101,32,42,47,10,9,105,102,40,116,104,105,1505 116,104,105,115,46,112,48,59,10,9,9,9,118,97,114,32,
1163 115,46,112,48,32,33,61,32,116,104,105,115,46,112,49,41,1506 111,112,49,32,61,32,116,104,105,115,46,112,49,59,10,9,
1164 123,10,9,9,105,102,40,116,104,105,115,46,112,48,32,62,1507 9,9,116,104,105,115,46,112,48,32,61,32,112,48,59,10,
1165 32,120,108,110,46,111,102,102,43,120,108,110,46,116,120,116,1508 9,9,9,116,104,105,115,46,112,49,32,61,32,112,49,59,
1166 46,108,101,110,103,116,104,32,124,124,32,116,104,105,115,46,1509 10,9,9,9,116,114,121,123,10,9,9,9,9,116,104,105,
1167 112,49,32,60,32,120,108,110,46,111,102,102,41,123,10,9,1510 115,46,100,101,108,40,102,97,108,115,101,41,59,10,9,9,
1168 9,9,47,42,32,100,114,97,119,32,110,111,114,109,97,108,
1169 32,108,105,110,101,32,42,47,10,9,9,9,99,116,120,46,
1170 99,108,101,97,114,82,101,99,116,40,49,44,32,112,111,115,
1171 44,32,99,46,119,105,100,116,104,45,55,44,32,108,110,104,
1172 116,41,59,10,9,9,9,99,116,120,46,102,105,108,108,84,
1173 101,120,116,40,108,110,44,32,109,97,114,103,105,110,115,122,
1174 44,32,112,111,115,41,59,10,9,9,9,114,101,116,117,114,
1175 110,32,116,114,117,101,59,10,9,9,125,10,9,9,47,42,
1176 32,117,112,32,116,111,32,112,48,32,117,110,115,101,108,101,
1177 99,116,101,100,32,42,47,10,9,9,118,97,114,32,100,120,
1178 32,61,32,109,97,114,103,105,110,115,122,59,10,9,9,118,
1179 97,114,32,115,48,32,61,32,48,59,10,9,9,118,97,114,
1180 32,115,48,112,111,115,32,61,32,48,59,10,9,9,105,102,
1181 40,116,104,105,115,46,112,48,32,62,32,120,108,110,46,111,
1182 102,102,41,123,10,9,9,9,115,48,32,61,32,116,104,105,
1183 115,46,112,48,32,45,32,120,108,110,46,111,102,102,59,10,
1184 9,9,9,118,97,114,32,115,48,108,110,32,61,32,116,104,
1185 105,115,46,110,111,116,97,98,115,40,120,108,110,46,116,120,
1186 116,46,115,108,105,99,101,40,48,44,32,115,48,41,41,59,
1187 10,9,9,9,115,48,112,111,115,32,61,32,115,48,108,110,
1188 46,108,101,110,103,116,104,59,10,9,9,9,100,120,32,61,
1189 32,109,97,114,103,105,110,115,122,32,43,32,99,116,120,46,
1190 109,101,97,115,117,114,101,84,101,120,116,40,115,48,108,110,
1191 41,46,119,105,100,116,104,59,10,9,9,9,99,116,120,46,
1192 99,108,101,97,114,82,101,99,116,40,49,44,32,112,111,115,
1193 44,32,100,120,44,32,108,110,104,116,41,59,10,9,9,9,
1194 99,116,120,46,102,105,108,108,84,101,120,116,40,115,48,108,
1195 110,44,32,109,97,114,103,105,110,115,122,44,32,112,111,115,
1196 41,59,10,9,9,125,10,9,9,47,42,32,102,114,111,109,
1197 32,112,48,32,116,111,32,112,49,32,115,101,108,101,99,116,
1198 101,100,32,42,47,10,9,9,118,97,114,32,115,49,32,61,
1199 32,120,108,110,46,116,120,116,46,108,101,110,103,116,104,32,
1200 45,32,115,48,59,10,9,9,105,102,40,116,104,105,115,46,
1201 112,49,32,60,32,120,108,110,46,111,102,102,43,120,108,110,
1202 46,116,120,116,46,108,101,110,103,116,104,41,10,9,9,9,
1203 115,49,32,61,32,116,104,105,115,46,112,49,32,45,32,115,
1204 48,32,45,32,120,108,110,46,111,102,102,59,10,9,9,118,
1205 97,114,32,115,49,108,110,32,61,32,116,104,105,115,46,110,
1206 111,116,97,98,115,40,120,108,110,46,116,120,116,46,115,108,
1207 105,99,101,40,115,48,44,32,115,48,43,115,49,41,44,32,
1208 115,48,112,111,115,41,59,10,9,9,118,97,114,32,115,49,
1209 112,111,115,32,61,32,115,48,112,111,115,32,43,32,115,49,
1210 108,110,46,108,101,110,103,116,104,59,10,9,9,118,97,114,
1211 32,115,120,32,61,32,99,116,120,46,109,101,97,115,117,114,
1212 101,84,101,120,116,40,115,49,108,110,41,46,119,105,100,116,
1213 104,59,10,9,9,118,97,114,32,111,108,100,32,61,32,99,
1214 116,120,46,102,105,108,108,83,116,121,108,101,59,10,9,9,
1215 105,102,40,116,104,105,115,46,115,101,99,111,110,100,97,114,
1216 121,32,61,61,32,50,41,10,9,9,9,99,116,120,46,102,
1217 105,108,108,83,116,121,108,101,32,61,32,34,35,70,70,55,
1218 53,55,53,34,59,10,9,9,101,108,115,101,32,105,102,40,
1219 116,104,105,115,46,115,101,99,111,110,100,97,114,121,41,10,
1220 9,9,9,99,116,120,46,102,105,108,108,83,116,121,108,101,
1221 32,61,32,34,35,55,51,55,51,70,70,34,59,10,9,9,
1222 101,108,115,101,10,9,9,9,99,116,120,46,102,105,108,108,
1223 83,116,121,108,101,32,61,32,34,35,68,49,65,48,65,48,
1224 34,59,10,9,9,105,102,40,116,104,105,115,46,112,49,32,
1225 62,32,120,108,110,46,111,102,102,43,120,108,110,46,116,120,
1226 116,46,108,101,110,103,116,104,41,10,9,9,9,99,116,120,
1227 46,102,105,108,108,82,101,99,116,40,100,120,44,32,112,111,
1228 115,44,32,99,46,119,105,100,116,104,45,100,120,45,55,44,
1229 32,108,110,104,116,41,59,10,9,9,101,108,115,101,10,9,
1230 9,9,99,116,120,46,102,105,108,108,82,101,99,116,40,100,
1231 120,44,32,112,111,115,44,32,115,120,44,32,108,110,104,116,
1232 41,59,10,9,9,99,116,120,46,102,105,108,108,83,116,121,
1233 108,101,32,61,32,111,108,100,59,10,9,9,99,116,120,46,
1234 102,105,108,108,84,101,120,116,40,115,49,108,110,44,32,100,
1235 120,44,32,112,111,115,41,59,10,9,9,105,102,40,116,104,
1236 105,115,46,112,49,32,62,32,120,108,110,46,111,102,102,43,
1237 120,108,110,46,116,120,116,46,108,101,110,103,116,104,41,10,
1238 9,9,9,114,101,116,117,114,110,32,116,114,117,101,59,10,
1239 9,9,47,42,32,102,114,111,109,32,112,49,32,117,110,115,
1240 101,108,101,99,116,101,100,32,42,47,10,9,9,99,116,120,
1241 46,99,108,101,97,114,82,101,99,116,40,100,120,43,115,120,
1242 44,32,112,111,115,44,32,99,46,119,105,100,116,104,45,40,
1243 100,120,43,115,120,41,45,55,44,32,108,110,104,116,41,59,
1244 10,9,9,105,102,40,115,49,32,62,61,32,120,108,110,46,
1245 116,120,116,46,108,101,110,103,116,104,41,10,9,9,9,114,
1246 101,116,117,114,110,32,116,114,117,101,59,10,9,9,118,97,
1247 114,32,115,50,108,110,32,61,32,116,104,105,115,46,110,111,
1248 116,97,98,115,40,120,108,110,46,116,120,116,46,115,108,105,
1249 99,101,40,115,48,43,115,49,44,32,120,108,110,46,116,120,
1250 116,46,108,101,110,103,116,104,41,44,32,115,49,112,111,115,
1251 41,59,10,9,9,99,116,120,46,102,105,108,108,84,101,120,
1252 116,40,115,50,108,110,44,32,100,120,43,115,120,44,32,112,
1253 111,115,41,59,10,9,9,114,101,116,117,114,110,32,116,114,
1254 117,101,59,10,9,125,10,10,9,47,42,32,100,114,97,119,
1255 32,117,110,115,101,108,101,99,116,101,100,32,108,105,110,101,
1256 32,42,47,10,9,99,116,120,46,99,108,101,97,114,82,101,
1257 99,116,40,49,44,32,112,111,115,44,32,99,46,119,105,100,
1258 116,104,45,55,44,32,108,110,104,116,41,59,10,9,99,116,
1259 120,46,102,105,108,108,84,101,120,116,40,108,110,44,32,109,
1260 97,114,103,105,110,115,122,44,32,112,111,115,41,59,10,10,
1261 9,47,42,32,100,114,97,119,32,116,105,99,107,32,105,102,
1262 32,110,101,101,100,101,100,32,42,47,10,9,105,102,40,116,
1263 104,105,115,46,112,48,32,60,32,120,108,110,46,111,102,102,
1264 32,124,124,32,116,104,105,115,46,112,48,32,62,32,120,108,
1265 110,46,111,102,102,32,43,32,120,108,110,46,116,120,116,46,
1266 108,101,110,103,116,104,41,10,9,9,114,101,116,117,114,110,
1267 32,116,114,117,101,59,10,9,47,42,10,9,32,42,32,105,
1268 102,32,112,48,32,105,115,32,97,116,32,116,104,101,32,101,
1269 110,100,32,111,102,32,97,32,119,114,97,112,112,101,100,32,
1270 108,105,110,101,32,100,111,110,39,116,32,100,114,97,119,32,
1271 105,116,32,104,101,114,101,44,10,9,32,42,32,98,101,99,
1272 97,117,115,101,32,116,104,101,32,110,101,120,116,32,108,105,
1273 110,101,32,119,105,108,108,32,100,114,97,119,32,105,116,32,
1274 97,116,32,116,104,101,32,115,116,97,114,116,32,111,102,32,
1275 108,105,110,101,46,10,9,32,42,47,10,9,105,102,40,116,
1276 104,105,115,46,112,48,32,61,61,32,120,108,110,46,111,102,
1277 102,32,43,32,120,108,110,46,116,120,116,46,108,101,110,103,
1278 116,104,32,38,38,32,33,120,108,110,46,101,111,108,32,38,
1279 38,10,9,32,32,32,120,108,110,32,33,61,32,116,104,105,
1280 115,46,108,105,110,101,115,91,116,104,105,115,46,108,105,110,
1281 101,115,46,108,101,110,103,116,104,45,49,93,41,10,9,9,
1282 114,101,116,117,114,110,32,116,114,117,101,59,10,9,118,97,
1283 114,32,100,120,32,61,32,116,104,105,115,46,112,111,115,100,
1284 120,40,120,108,110,44,32,116,104,105,115,46,112,48,32,45,
1285 32,120,108,110,46,111,102,102,41,59,10,9,100,120,32,43,
1286 61,32,109,97,114,103,105,110,115,122,32,45,32,51,42,116,
1287 104,105,115,46,116,115,99,97,108,101,47,50,59,10,9,116,
1288 104,105,115,46,115,97,118,101,100,32,61,32,99,116,120,46,
1289 103,101,116,73,109,97,103,101,68,97,116,97,40,100,120,44,
1290 32,112,111,115,44,32,51,42,116,104,105,115,46,116,115,99,
1291 97,108,101,44,32,116,104,105,115,46,102,111,110,116,104,116,
1292 41,59,10,9,116,104,105,115,46,116,105,99,107,120,32,61,
1293 32,100,120,59,10,9,116,104,105,115,46,116,105,99,107,121,
1294 32,61,32,112,111,115,59,10,9,99,116,120,46,112,117,116,
1295 73,109,97,103,101,68,97,116,97,40,116,104,105,115,46,116,
1296 105,99,107,44,32,100,120,44,32,112,111,115,41,59,10,9,
1297 114,101,116,117,114,110,32,116,114,117,101,59,10,125,10,10,
1298 102,117,110,99,116,105,111,110,32,116,114,101,102,111,114,109,
1299 97,116,40,108,48,41,32,123,10,9,116,104,105,115,46,102,
1300 105,120,102,111,110,116,40,41,59,10,10,9,118,97,114,32,
1301 108,110,115,32,61,32,116,104,105,115,46,108,105,110,101,115,
1302 59,10,9,102,111,114,40,118,97,114,32,105,32,61,32,108,
1303 48,59,32,105,32,60,32,108,110,115,46,108,101,110,103,116,
1304 104,59,41,123,10,9,9,119,104,105,108,101,40,33,108,110,
1305 115,91,105,93,46,101,111,108,32,38,38,32,105,32,60,32,
1306 108,110,115,46,108,101,110,103,116,104,45,49,41,123,10,9,
1307 9,9,108,110,115,91,105,93,46,116,120,116,32,43,61,32,
1308 108,110,115,91,105,43,49,93,46,116,120,116,59,10,9,9,
1309 9,108,110,115,91,105,93,46,101,111,108,32,61,32,108,110,
1310 115,91,105,43,49,93,46,101,111,108,59,10,9,9,9,108,
1311 110,115,46,115,112,108,105,99,101,40,105,43,49,44,32,49,
1312 41,59,10,9,9,125,10,9,9,47,42,32,114,101,109,111,
1313 118,101,32,101,109,112,116,121,32,108,105,110,101,115,32,40,
1314 110,111,32,92,110,41,32,117,110,108,101,115,115,32,116,104,
1315 101,121,32,97,114,101,32,97,116,32,116,104,101,32,101,110,
1316 100,10,9,9,32,42,32,98,101,99,97,117,115,101,32,116,
1317 104,101,32,108,97,115,116,32,101,109,112,116,121,32,108,105,
1318 110,101,32,105,115,32,117,115,101,100,32,116,111,32,100,114,
1319 97,119,32,116,104,101,32,116,105,99,107,10,9,9,32,42,
1320 32,112,97,115,116,32,116,104,101,32,108,97,115,116,32,92,
1321 110,10,9,9,32,42,47,10,9,9,105,102,40,108,110,115,
1322 91,105,93,46,116,120,116,46,108,101,110,103,116,104,32,61,
1323 61,32,48,32,38,38,32,33,108,110,115,91,105,93,46,101,
1324 111,108,32,38,38,10,9,9,32,32,32,108,110,115,46,108,
1325 101,110,103,116,104,62,49,32,38,38,32,105,32,33,61,32,
1326 108,110,115,46,108,101,110,103,116,104,45,49,41,10,9,9,
1327 9,108,110,115,46,115,112,108,105,99,101,40,105,44,32,49,
1328 41,59,10,9,9,101,108,115,101,10,9,9,9,105,43,43,
1329 59,10,9,125,10,9,118,97,114,32,111,102,102,32,61,32,
1330 48,59,10,9,105,102,40,108,48,32,62,32,48,32,38,38,
1331 32,108,48,32,60,32,108,110,115,46,108,101,110,103,116,104,
1332 41,10,9,9,111,102,102,32,61,32,108,110,115,91,108,48,
1333 45,49,93,46,111,102,102,32,43,32,108,110,108,101,110,40,
1334 108,110,115,91,108,48,45,49,93,41,59,10,9,102,111,114,
1335 40,118,97,114,32,105,32,61,32,108,48,59,32,105,32,60,
1336 32,108,110,115,46,108,101,110,103,116,104,59,32,105,43,43,
1337 41,123,10,9,9,108,110,115,91,105,93,46,111,102,102,32,
1338 61,32,111,102,102,59,10,9,9,118,97,114,32,110,119,32,
1339 61,32,116,104,105,115,46,108,105,110,101,119,114,97,112,40,
1340 108,110,115,91,105,93,46,116,120,116,41,59,10,9,9,105,
1341 102,40,110,119,32,60,32,108,110,115,91,105,93,46,116,120,
1342 116,46,108,101,110,103,116,104,41,123,10,9,9,9,118,97,
1343 114,32,111,108,100,32,61,32,108,110,115,91,105,93,46,116,
1344 120,116,59,10,9,9,9,118,97,114,32,110,108,32,61,32,
1345 123,116,120,116,58,32,111,108,100,46,115,108,105,99,101,40,
1346 48,44,32,110,119,41,44,32,111,102,102,58,32,108,110,115,
1347 91,105,93,46,111,102,102,125,59,10,9,9,9,110,108,46,
1348 101,111,108,32,61,32,102,97,108,115,101,59,10,9,9,9,
1349 108,110,115,46,115,112,108,105,99,101,40,105,44,32,48,44,
1350 32,110,108,41,59,10,9,9,9,108,110,115,91,105,43,49,
1351 93,46,116,120,116,32,61,32,111,108,100,46,115,108,105,99,
1352 101,40,110,119,44,32,111,108,100,46,108,101,110,103,116,104,
1353 41,59,10,9,9,9,108,110,115,91,105,43,49,93,46,111,
1354 102,102,32,43,61,32,110,119,59,10,9,9,125,10,9,9,
1355 111,102,102,32,43,61,32,108,110,108,101,110,40,108,110,115,
1356 91,105,93,41,59,10,9,125,10,9,105,102,40,108,48,32,
1357 60,32,116,104,105,115,46,108,110,48,41,123,10,9,9,105,
1358 102,40,116,104,105,115,46,108,110,48,32,62,61,32,108,110,
1359 115,46,108,101,110,103,116,104,41,10,9,9,9,116,104,105,
1360 115,46,108,110,48,32,61,32,108,110,115,46,108,101,110,103,
1361 116,104,45,49,59,10,9,125,10,9,105,102,40,108,110,115,
1362 46,108,101,110,103,116,104,32,61,61,32,48,41,32,123,10,
1363 9,9,108,110,115,91,48,93,32,61,32,123,116,120,116,58,
1364 34,34,44,32,111,102,102,58,32,108,110,108,101,110,40,108,
1365 97,115,116,41,125,59,10,9,125,10,9,118,97,114,32,108,
1366 97,115,116,32,61,32,108,110,115,91,108,110,115,46,108,101,
1367 110,103,116,104,45,49,93,59,10,9,105,102,40,108,97,115,
1368 116,46,101,111,108,41,123,10,9,9,108,110,115,91,108,110,
1369 115,46,108,101,110,103,116,104,93,32,61,32,123,116,120,116,
1370 58,34,34,44,32,111,102,102,58,32,108,97,115,116,46,111,
1371 102,102,32,43,32,108,110,108,101,110,40,108,97,115,116,41,
1372 125,59,10,9,125,10,125,10,10,102,117,110,99,116,105,111,
1373 110,32,116,115,101,116,108,105,110,101,115,111,102,102,40,108,
1374 48,41,32,123,10,9,118,97,114,32,108,110,115,32,61,32,
1375 116,104,105,115,46,108,105,110,101,115,59,10,9,102,111,114,
1376 40,118,97,114,32,108,110,115,32,61,32,116,104,105,115,46,
1377 108,105,110,101,115,59,32,108,48,32,60,32,108,110,115,46,
1378 108,101,110,103,116,104,59,32,108,48,43,43,41,123,10,9,
1379 9,105,102,40,108,48,32,61,61,32,48,41,10,9,9,9,
1380 108,110,115,91,108,48,93,46,111,102,102,32,61,32,48,59,
1381 10,9,9,101,108,115,101,10,9,9,9,108,110,115,91,108,
1382 48,93,46,111,102,102,32,61,32,108,110,115,91,108,48,45,
1383 49,93,46,111,102,102,32,43,32,108,110,108,101,110,40,108,
1384 110,115,91,108,48,45,49,93,41,59,10,9,125,10,125,10,
1385 10,102,117,110,99,116,105,111,110,32,116,114,101,100,114,97,
1386 119,116,101,120,116,40,41,32,123,10,9,118,97,114,32,99,
1387 32,61,32,116,104,105,115,59,10,9,118,97,114,32,99,116,
1388 120,32,61,32,99,46,103,101,116,67,111,110,116,101,120,116,
1389 40,34,50,100,34,44,32,123,97,108,112,104,97,58,32,102,
1390 97,108,115,101,125,41,59,10,9,99,46,102,105,120,102,111,
1391 110,116,40,41,59,10,9,118,97,114,32,110,108,105,110,101,
1392 115,32,61,32,99,46,104,101,105,103,104,116,32,47,32,40,
1393 116,104,105,115,46,102,111,110,116,104,116,41,59,10,10,9,
1394 105,102,40,33,116,104,105,115,46,116,105,99,107,41,123,10,
1395 9,9,118,97,114,32,120,32,61,32,99,116,120,46,108,105,
1396 110,101,87,105,100,116,104,59,10,9,9,99,116,120,46,108,
1397 105,110,101,87,105,100,116,104,32,61,32,49,59,10,9,9,
1398 118,97,114,32,100,32,61,32,51,42,116,104,105,115,46,116,
1399 115,99,97,108,101,59,10,9,9,99,116,120,46,102,105,108,
1400 108,82,101,99,116,40,48,44,32,48,44,32,100,44,32,100,
1401 41,59,10,9,9,99,116,120,46,102,105,108,108,82,101,99,
1402 116,40,48,44,32,116,104,105,115,46,102,111,110,116,104,116,
1403 45,100,44,32,100,44,32,100,41,59,10,9,9,99,116,120,
1404 46,109,111,118,101,84,111,40,100,47,50,44,32,48,41,59,
1405 10,9,9,99,116,120,46,108,105,110,101,84,111,40,100,47,
1406 50,44,32,116,104,105,115,46,102,111,110,116,104,116,41,59,
1407 10,9,9,99,116,120,46,115,116,114,111,107,101,40,41,59,
1408 10,9,9,99,116,120,46,108,105,110,101,87,105,100,116,104,
1409 32,61,32,120,59,10,9,9,116,104,105,115,46,116,105,99,
1410 107,32,61,32,99,116,120,46,103,101,116,73,109,97,103,101,
1411 68,97,116,97,40,48,44,32,48,44,32,100,44,32,116,104,
1412 105,115,46,102,111,110,116,104,116,41,59,10,9,125,10,9,
1413 105,102,40,33,116,104,105,115,46,108,105,110,101,115,91,116,
1414 104,105,115,46,108,110,48,93,41,32,123,10,9,9,99,111,
1415 110,115,111,108,101,46,108,111,103,40,34,116,114,101,100,114,
1416 97,119,116,101,120,116,58,32,110,111,32,108,110,48,34,41,
1417 59,10,9,9,114,101,116,117,114,110,59,10,9,125,10,9,
1418 118,97,114,32,111,102,102,32,61,32,116,104,105,115,46,108,
1419 105,110,101,115,91,116,104,105,115,46,108,110,48,93,46,111,
1420 102,102,59,10,9,118,97,114,32,102,114,111,102,102,32,61,
1421 32,111,102,102,59,10,9,116,104,105,115,46,102,114,115,105,
1422 122,101,32,61,32,48,59,10,9,116,104,105,115,46,102,114,
1423 108,105,110,101,115,32,61,32,48,59,10,9,102,111,114,40,
1424 118,97,114,32,105,32,61,32,48,59,32,105,32,60,61,32,
1425 110,108,105,110,101,115,59,32,105,43,43,41,123,10,9,9,
1426 105,102,40,116,104,105,115,46,108,110,48,43,105,32,60,32,
1427 116,104,105,115,46,108,105,110,101,115,46,108,101,110,103,116,
1428 104,41,123,10,9,9,9,118,97,114,32,120,108,110,32,61,
1429 32,116,104,105,115,46,108,105,110,101,115,91,116,104,105,115,
1430 46,108,110,48,43,105,93,59,10,9,9,9,105,102,40,33,
1431 116,104,105,115,46,100,114,97,119,108,105,110,101,40,120,108,
1432 110,44,32,105,41,41,10,9,9,9,9,98,114,101,97,107,
1433 59,10,9,9,9,116,104,105,115,46,102,114,108,105,110,101,
1434 115,43,43,59,10,9,9,9,111,102,102,32,43,61,32,108,
1435 110,108,101,110,40,120,108,110,41,59,10,9,9,125,101,108,
1436 115,101,10,9,9,9,105,102,40,33,116,104,105,115,46,100,
1437 114,97,119,108,105,110,101,40,110,117,108,108,44,32,105,41,
1438 41,10,9,9,9,9,98,114,101,97,107,59,10,9,125,10,
1439 9,116,104,105,115,46,102,114,115,105,122,101,32,61,32,111,
1440 102,102,32,45,32,102,114,111,102,102,59,10,9,116,104,105,
1441 115,46,117,112,100,97,116,101,115,99,114,108,40,41,59,10,
1442 125,10,10,102,117,110,99,116,105,111,110,32,116,115,99,114,
1443 111,108,108,100,111,119,110,49,40,41,32,123,10,9,105,102,
1444 40,116,104,105,115,46,108,110,48,32,62,61,32,116,104,105,
1445 115,46,108,105,110,101,115,46,108,101,110,103,116,104,45,49,
1446 41,10,9,9,114,101,116,117,114,110,32,102,97,108,115,101,
1447 59,10,9,116,104,105,115,46,102,114,111,102,102,32,43,61,
1448 32,108,110,108,101,110,40,116,104,105,115,46,108,105,110,101,
1449 115,91,116,104,105,115,46,108,110,48,93,41,59,10,9,116,
1450 104,105,115,46,108,110,48,43,43,59,10,9,114,101,116,117,
1451 114,110,32,116,114,117,101,59,10,125,10,10,102,117,110,99,
1452 116,105,111,110,32,116,115,99,114,111,108,108,117,112,49,40,
1453 41,32,123,10,9,105,102,40,116,104,105,115,46,108,110,48,
1454 32,61,61,32,48,41,10,9,9,114,101,116,117,114,110,32,
1455 102,97,108,115,101,59,10,9,116,104,105,115,46,108,110,48,
1456 45,45,59,10,9,114,101,116,117,114,110,32,116,114,117,101,
1457 59,10,125,10,10,102,117,110,99,116,105,111,110,32,116,115,
1458 99,114,111,108,108,100,111,119,110,40,110,41,32,123,10,9,
1459 118,97,114,32,115,111,109,101,32,61,32,102,97,108,115,101,
1460 59,10,9,102,111,114,40,59,32,110,32,62,32,48,59,32,
1461 110,45,45,41,123,10,9,9,105,102,40,116,104,105,115,46,
1462 115,99,114,111,108,108,100,111,119,110,49,40,41,41,10,9,
1463 9,9,115,111,109,101,61,116,114,117,101,59,10,9,9,101,
1464 108,115,101,10,9,9,9,98,114,101,97,107,59,10,9,125,
1465 10,9,114,101,116,117,114,110,32,115,111,109,101,59,10,125,
1466 10,10,102,117,110,99,116,105,111,110,32,116,115,99,114,111,
1467 108,108,117,112,40,110,41,32,123,10,9,118,97,114,32,115,
1468 111,109,101,32,61,32,102,97,108,115,101,59,10,9,102,111,
1469 114,40,59,32,110,32,62,32,48,59,32,110,45,45,41,123,
1470 10,9,9,105,102,40,116,104,105,115,46,115,99,114,111,108,
1471 108,117,112,49,40,41,41,10,9,9,9,115,111,109,101,61,
1472 116,114,117,101,59,10,9,9,101,108,115,101,10,9,9,9,
1473 98,114,101,97,107,59,10,9,125,10,9,114,101,116,117,114,
1474 110,32,115,111,109,101,59,10,125,10,10,47,42,10,32,42,
1475 32,116,32,109,97,121,32,98,101,32,97,114,98,105,116,114,
1476 97,114,121,32,116,101,120,116,32,40,115,105,110,103,108,101,
1477 32,108,105,110,101,41,32,111,114,32,92,110,44,32,98,117,
1478 116,32,110,111,116,32,98,111,116,104,32,97,116,32,111,110,
1479 99,101,46,10,32,42,32,84,104,101,32,116,101,120,116,32,
1480 105,115,32,97,108,119,97,121,115,32,105,110,115,101,114,116,
1481 101,100,32,97,116,32,116,104,105,115,46,112,48,32,97,110,
1482 100,32,112,48,44,32,112,49,32,97,114,101,32,117,112,100,
1483 97,116,101,100,46,10,32,42,10,32,42,47,10,102,117,110,
1484 99,116,105,111,110,32,116,116,105,110,115,40,116,44,32,100,
1485 111,110,116,115,99,114,111,108,108,41,32,123,10,9,116,104,
1486 105,115,46,117,110,116,105,99,107,40,41,59,10,9,118,97,
1487 114,32,110,115,99,114,108,32,61,32,77,97,116,104,46,102,
1488 108,111,111,114,40,116,104,105,115,46,110,108,105,110,101,115,
1489 47,52,41,59,10,9,105,102,40,110,115,99,114,108,32,61,
1490 61,32,48,41,10,9,9,110,115,99,114,108,32,61,32,49,
1491 59,10,9,116,104,105,115,46,109,97,114,107,105,110,115,40,
1492 116,46,108,101,110,103,116,104,41,59,10,9,102,111,114,40,
1493 118,97,114,32,105,32,61,32,48,59,32,105,32,60,32,116,
1494 104,105,115,46,108,105,110,101,115,46,108,101,110,103,116,104,
1495 59,32,105,43,43,41,123,10,9,9,118,97,114,32,120,108,
1496 110,32,61,32,116,104,105,115,46,108,105,110,101,115,91,105,
1497 93,59,10,9,9,118,97,114,32,120,108,110,108,101,110,32,
1498 61,32,120,108,110,46,116,120,116,46,108,101,110,103,116,104,
1499 59,10,9,9,105,102,40,116,104,105,115,46,112,48,32,62,
1500 61,32,120,108,110,46,111,102,102,32,38,38,32,116,104,105,
1501 115,46,112,48,32,60,61,32,120,108,110,46,111,102,102,43,
1502 120,108,110,108,101,110,41,123,10,9,9,9,118,97,114,32,
1503 112,111,115,32,61,32,116,104,105,115,46,112,48,32,45,32,
1504 120,108,110,46,111,102,102,59,10,9,9,9,105,102,40,116,
1505 32,61,61,32,39,92,110,39,41,123,10,9,9,9,9,118,
1506 97,114,32,110,108,110,32,61,32,123,10,9,9,9,9,9,
1507 116,120,116,58,32,34,34,44,10,9,9,9,9,9,111,102,
1508 102,58,32,120,108,110,46,111,102,102,43,112,111,115,43,49,
1509 44,10,9,9,9,9,9,101,111,108,58,32,120,108,110,46,
1510 101,111,108,10,9,9,9,9,125,59,10,9,9,9,9,105,
1511 102,40,112,111,115,32,60,32,120,108,110,108,101,110,41,123,
1512 10,9,9,9,9,9,110,108,110,46,116,120,116,32,61,32,
1513 120,108,110,46,116,120,116,46,115,108,105,99,101,40,112,111,
1514 115,44,32,120,108,110,108,101,110,41,59,10,9,9,9,9,
1515 9,120,108,110,46,116,120,116,32,61,32,120,108,110,46,116,
1516 120,116,46,115,108,105,99,101,40,48,44,32,112,111,115,41,
1517 59,10,9,9,9,9,125,10,9,9,9,9,116,104,105,115,
1518 46,108,105,110,101,115,46,115,112,108,105,99,101,40,105,43,
1519 49,44,32,48,44,32,110,108,110,41,59,10,9,9,9,9,
1520 120,108,110,46,101,111,108,32,61,32,116,114,117,101,59,10,
1521 9,9,9,9,116,104,105,115,46,112,48,43,43,59,10,9,
1522 9,9,9,116,104,105,115,46,112,49,32,61,32,116,104,105,
1523 115,46,112,48,59,10,9,9,9,9,116,104,105,115,46,110,
1524 114,117,110,101,115,43,43,59,10,9,9,9,9,116,104,105,
1525 115,46,114,101,102,111,114,109,97,116,40,105,41,59,10,9,
1526 9,9,9,105,102,40,33,100,111,110,116,115,99,114,111,108,
1527 108,41,10,9,9,9,9,105,102,40,105,32,62,61,32,116,
1528 104,105,115,46,108,110,48,43,116,104,105,115,46,110,108,105,
1529 110,101,115,45,49,32,38,38,10,9,9,9,9,32,32,32,
1530 105,32,60,61,32,116,104,105,115,46,108,110,48,43,116,104,
1531 105,115,46,110,108,105,110,101,115,43,49,32,38,38,32,116,
1532 104,105,115,46,110,108,105,110,101,115,32,62,32,49,41,10,
1533 9,9,9,9,9,116,104,105,115,46,115,99,114,111,108,108,
1534 100,111,119,110,40,110,115,99,114,108,41,59,10,9,9,9,
1535 9,116,104,105,115,46,114,101,100,114,97,119,116,101,120,116,
1536 40,41,59,10,9,9,9,9,114,101,116,117,114,110,59,10,
1537 9,9,9,125,10,9,9,9,105,102,40,112,111,115,32,61,
1538 61,32,120,108,110,46,116,120,116,46,108,101,110,103,116,104,
1539 41,10,9,9,9,9,120,108,110,46,116,120,116,32,43,61,
1540 32,116,59,10,9,9,9,101,108,115,101,10,9,9,9,9,
1541 120,108,110,46,116,120,116,32,61,32,120,108,110,46,116,120,
1542 116,46,115,108,105,99,101,40,48,44,32,112,111,115,41,32,
1543 43,10,9,9,9,9,9,116,32,43,32,120,108,110,46,116,
1544 120,116,46,115,108,105,99,101,40,112,111,115,44,32,120,108,
1545 110,108,101,110,41,59,10,9,9,9,116,104,105,115,46,112,
1546 48,32,43,61,32,116,46,108,101,110,103,116,104,59,10,9,
1547 9,9,116,104,105,115,46,112,49,32,61,32,116,104,105,115,
1548 46,112,48,59,10,9,9,9,116,104,105,115,46,110,114,117,
1549 110,101,115,32,43,61,32,116,46,108,101,110,103,116,104,59,
1550 10,9,9,9,118,97,114,32,119,114,32,61,32,116,104,105,
1551 115,46,108,105,110,101,119,114,97,112,40,120,108,110,46,116,
1552 120,116,41,59,10,9,9,9,105,102,40,119,114,32,61,61,
1553 32,120,108,110,46,116,120,116,46,108,101,110,103,116,104,41,
1554 123,10,9,9,9,9,116,104,105,115,46,115,101,116,108,105,
1555 110,101,115,111,102,102,40,105,43,49,41,59,10,9,9,9,
1556 9,116,104,105,115,46,102,114,115,105,122,101,32,43,61,32,
1557 116,46,108,101,110,103,116,104,59,10,9,9,9,9,105,102,
1558 40,105,32,62,61,32,116,104,105,115,46,108,110,48,32,38,
1559 38,32,105,32,60,61,32,116,104,105,115,46,108,110,48,43,
1560 116,104,105,115,46,102,114,108,105,110,101,115,41,10,9,9,
1561 9,9,9,116,104,105,115,46,100,114,97,119,108,105,110,101,
1562 40,120,108,110,44,32,105,45,116,104,105,115,46,108,110,48,
1563 41,59,10,9,9,9,125,32,101,108,115,101,32,123,10,9,
1564 9,9,9,116,104,105,115,46,114,101,102,111,114,109,97,116,
1565 40,105,41,59,10,9,9,9,9,105,102,40,33,100,111,110,
1566 116,115,99,114,111,108,108,41,10,9,9,9,9,105,102,40,
1567 105,32,62,61,32,116,104,105,115,46,108,110,48,43,116,104,
1568 105,115,46,110,108,105,110,101,115,45,49,32,38,38,10,9,
1569 9,9,9,32,32,32,105,32,60,61,32,116,104,105,115,46,
1570 108,110,48,43,116,104,105,115,46,110,108,105,110,101,115,43,
1571 49,41,10,9,9,9,9,9,116,104,105,115,46,115,99,114,
1572 111,108,108,100,111,119,110,40,110,115,99,114,108,41,59,10,
1573 9,9,9,9,116,104,105,115,46,114,101,100,114,97,119,116,
1574 101,120,116,40,41,59,10,9,9,9,125,10,9,9,9,114,
1575 101,116,117,114,110,59,10,9,9,125,10,9,125,10,125,10,
1576 10,47,42,10,32,42,32,105,102,32,116,104,101,32,115,101,
1577 108,101,99,116,105,111,110,32,105,115,32,101,109,112,116,121,
1578 44,32,116,104,101,32,112,114,101,118,105,111,117,115,32,114,
1579 117,110,101,32,105,115,32,100,101,108,101,116,101,100,44,32,
1580 111,116,104,101,114,119,105,115,101,10,32,42,32,116,104,101,
1581 32,101,110,116,105,114,101,32,115,101,108,101,99,116,105,111,
1582 110,32,105,115,32,114,101,109,111,118,101,100,46,32,112,48,
1583 32,97,110,100,32,112,49,32,97,114,101,32,117,112,100,97,
1584 116,101,100,46,10,32,42,47,10,102,117,110,99,116,105,111,
1585 110,32,116,116,100,101,108,40,100,111,110,116,115,99,114,111,
1586 108,108,41,32,123,10,9,116,104,105,115,46,117,110,116,105,
1587 99,107,40,41,59,10,9,105,102,40,116,104,105,115,46,112,
1588 48,32,62,61,32,116,104,105,115,46,110,114,117,110,101,115,
1589 32,124,124,32,116,104,105,115,46,112,49,32,60,32,116,104,
1590 105,115,46,112,48,41,10,9,9,114,101,116,117,114,110,59,
1591 10,9,118,97,114,32,110,115,99,114,108,32,61,32,77,97,
1592 116,104,46,102,108,111,111,114,40,116,104,105,115,46,110,108,
1593 105,110,101,115,47,52,41,59,10,9,105,102,40,110,115,99,
1594 114,108,32,61,61,32,48,41,10,9,9,110,115,99,114,108,
1595 32,61,32,49,59,10,9,118,97,114,32,109,105,103,104,116,
1596 115,99,114,111,108,108,32,61,32,40,116,104,105,115,46,112,
1597 49,32,62,61,32,116,104,105,115,46,108,105,110,101,115,91,
1598 116,104,105,115,46,108,110,48,93,46,111,102,102,41,59,10,
1599 9,99,111,110,115,111,108,101,46,108,111,103,40,34,100,101,
1600 108,32,34,44,32,116,104,105,115,46,112,48,44,32,116,104,
1601 105,115,46,112,49,41,59,10,9,105,102,40,116,104,105,115,
1602 46,112,48,32,62,32,48,32,38,38,32,116,104,105,115,46,
1603 112,48,32,61,61,32,116,104,105,115,46,112,49,41,10,9,
1604 9,116,104,105,115,46,112,48,45,45,59,10,9,116,104,105,
1605 115,46,109,97,114,107,100,101,108,40,41,59,10,9,118,97,
1606 114,32,105,59,10,9,118,97,114,32,120,108,110,59,10,9,
1607 102,111,114,40,105,32,61,32,48,59,32,105,32,60,32,116,
1608 104,105,115,46,108,105,110,101,115,46,108,101,110,103,116,104,
1609 59,32,105,43,43,41,123,10,9,9,120,108,110,32,61,32,
1610 116,104,105,115,46,108,105,110,101,115,91,105,93,59,10,9,
1611 9,118,97,114,32,120,108,110,108,101,110,32,61,32,120,108,
1612 110,46,116,120,116,46,108,101,110,103,116,104,59,10,9,9,
1613 105,102,40,116,104,105,115,46,112,48,32,62,61,32,120,108,
1614 110,46,111,102,102,32,38,38,32,116,104,105,115,46,112,48,
1615 32,60,61,32,120,108,110,46,111,102,102,43,120,108,110,108,
1616 101,110,41,10,9,9,9,98,114,101,97,107,59,10,9,125,
1617 10,9,105,102,40,105,32,61,61,32,116,104,105,115,46,108,
1618 105,110,101,115,46,108,101,110,103,116,104,41,123,10,9,9,
1619 99,111,110,115,111,108,101,46,108,111,103,40,34,116,100,101,
1620 108,58,32,111,117,116,32,111,102,32,116,101,120,116,34,41,
1621 59,10,9,9,114,101,116,117,114,110,59,10,9,125,10,9,
1622 118,97,114,32,108,110,48,32,61,32,105,59,10,9,118,97,
1623 114,32,110,100,101,108,32,61,32,116,104,105,115,46,112,49,
1624 32,45,32,116,104,105,115,46,112,48,59,10,9,118,97,114,
1625 32,111,102,102,32,61,32,116,104,105,115,46,112,48,32,45,
1626 32,120,108,110,46,111,102,102,59,10,9,118,97,114,32,116,
1627 111,116,32,61,32,48,59,10,9,119,104,105,108,101,40,116,
1628 111,116,32,60,32,110,100,101,108,32,38,38,32,105,32,60,
1629 32,116,104,105,115,46,108,105,110,101,115,46,108,101,110,103,
1630 116,104,41,32,123,10,9,9,118,97,114,32,120,108,110,32,
1631 61,32,116,104,105,115,46,108,105,110,101,115,91,105,93,59,
1632 10,9,9,118,97,114,32,120,108,110,108,101,110,32,61,32,
1633 120,108,110,46,116,120,116,46,108,101,110,103,116,104,59,10,
1634 9,9,118,97,114,32,110,100,32,61,32,110,100,101,108,45,
1635 116,111,116,59,10,9,9,105,102,40,111,102,102,43,110,100,
1636 32,62,32,120,108,110,108,101,110,41,10,9,9,9,110,100,
1637 32,61,32,120,108,110,108,101,110,32,45,32,111,102,102,59,
1638 10,9,9,120,108,110,46,116,120,116,32,61,32,120,108,110,
1639 46,116,120,116,46,115,108,105,99,101,40,48,44,32,111,102,
1640 102,41,32,43,32,120,108,110,46,116,120,116,46,115,108,105,
1641 99,101,40,111,102,102,43,110,100,44,32,120,108,110,108,101,
1642 110,41,59,10,9,9,116,111,116,32,43,61,32,110,100,59,
1643 10,9,9,105,102,40,105,32,61,61,32,108,110,48,32,38,
1644 38,32,116,111,116,32,61,61,32,110,100,101,108,32,38,38,
1645 32,120,108,110,46,101,111,108,41,123,10,9,9,9,47,42,
1646 32,100,101,108,32,119,105,116,104,105,110,32,97,32,108,105,
1647 110,101,59,32,100,111,110,39,116,32,114,101,102,111,114,109,
1648 97,116,59,32,106,117,115,116,32,97,100,106,117,115,116,32,
1649 42,47,10,9,9,9,116,104,105,115,46,110,114,117,110,101,
1650 115,32,45,61,32,116,111,116,59,10,9,9,9,116,104,105,
1651 115,46,112,49,32,45,61,32,116,111,116,59,10,9,9,9,
1652 116,104,105,115,46,115,101,116,108,105,110,101,115,111,102,102,
1653 40,105,43,49,41,59,10,9,9,9,105,102,40,108,110,48,
1654 32,62,61,32,116,104,105,115,46,108,110,48,32,38,38,32,
1655 108,110,48,32,60,32,116,104,105,115,46,108,110,48,43,116,
1656 104,105,115,46,102,114,108,105,110,101,115,41,123,10,9,9,
1657 9,9,116,104,105,115,46,102,114,115,105,122,101,32,45,61,
1658 32,116,111,116,59,10,9,9,9,9,116,104,105,115,46,100,
1659 114,97,119,108,105,110,101,40,120,108,110,44,32,105,45,116,
1660 104,105,115,46,108,110,48,41,59,10,9,9,9,125,10,9,
1661 9,9,114,101,116,117,114,110,59,10,9,9,125,10,9,9,
1662 105,102,40,116,111,116,32,60,32,110,100,101,108,32,38,38,
1663 32,120,108,110,46,101,111,108,41,123,10,9,9,9,120,108,
1664 110,46,101,111,108,32,61,32,102,97,108,115,101,59,10,9,
1665 9,9,116,111,116,43,43,59,10,9,9,125,10,9,9,105,
1666 43,43,59,10,9,9,111,102,102,32,61,32,48,59,10,9,
1667 125,10,9,116,104,105,115,46,115,101,116,108,105,110,101,115,
1668 111,102,102,40,108,110,48,43,49,41,59,10,9,116,104,105,
1669 115,46,110,114,117,110,101,115,32,45,61,32,116,111,116,59,
1670 10,9,116,104,105,115,46,112,49,32,45,61,32,116,111,116,
1671 59,10,9,116,104,105,115,46,114,101,102,111,114,109,97,116,
1672 40,108,110,48,41,59,10,9,116,104,105,115,46,114,101,100,
1673 114,97,119,116,101,120,116,40,41,59,10,9,105,102,40,33,
1674 100,111,110,116,115,99,114,111,108,108,32,38,38,32,109,105,
1675 103,104,116,115,99,114,111,108,108,32,38,38,32,116,104,105,
1676 115,46,112,48,32,60,32,116,104,105,115,46,108,105,110,101,
1677 115,91,116,104,105,115,46,108,110,48,93,46,111,102,102,41,
1678 123,10,9,9,116,104,105,115,46,115,99,114,111,108,108,117,
1679 112,40,110,115,99,114,108,41,59,10,9,9,116,104,105,115,
1680 46,114,101,100,114,97,119,116,101,120,116,40,41,59,10,9,
1681 125,10,125,10,10,118,97,114,32,119,111,114,100,114,101,32,
1682 61,32,110,117,108,108,59,10,102,117,110,99,116,105,111,110,
1683 32,105,115,119,111,114,100,99,104,97,114,40,99,41,32,123,
1684 10,9,105,102,40,33,119,111,114,100,114,101,41,10,9,9,
1685 119,111,114,100,114,101,32,61,32,47,92,119,47,59,10,9,
1686 114,101,116,117,114,110,32,119,111,114,100,114,101,46,116,101,
1687 115,116,40,99,41,59,10,125,10,10,102,117,110,99,116,105,
1688 111,110,32,105,115,108,111,110,103,119,111,114,100,99,104,97,
1689 114,40,99,41,32,123,10,9,105,102,40,33,119,111,114,100,
1690 114,101,41,10,9,9,119,111,114,100,114,101,32,61,32,47,
1691 92,119,47,59,10,9,114,101,116,117,114,110,32,99,32,61,
1692 61,32,39,40,39,32,124,124,32,99,32,61,61,32,39,41,
1693 39,32,124,124,32,99,32,61,61,32,39,47,39,32,124,124,
1694 32,99,32,61,61,32,39,46,39,32,124,124,32,99,32,61,
1695 61,32,39,58,39,32,124,124,32,99,32,61,61,32,39,35,
1696 39,32,124,124,32,99,32,61,61,32,39,44,39,32,124,124,
1697 32,119,111,114,100,114,101,46,116,101,115,116,40,99,41,59,
1698 10,125,10,10,102,117,110,99,116,105,111,110,32,105,115,108,
1699 112,97,114,101,110,40,99,41,32,123,10,9,114,101,116,117,
1700 114,110,32,34,40,91,123,60,39,96,92,34,34,46,105,110,
1701 100,101,120,79,102,40,99,41,32,62,61,32,48,59,10,125,
1702 10,10,102,117,110,99,116,105,111,110,32,105,115,114,112,97,
1703 114,101,110,40,99,41,32,123,10,9,114,101,116,117,114,110,
1704 32,34,41,93,125,62,39,96,92,34,34,46,105,110,100,101,
1705 120,79,102,40,99,41,32,62,61,32,48,59,10,125,10,10,
1706 102,117,110,99,116,105,111,110,32,114,112,97,114,101,110,40,
1707 99,41,32,123,10,9,118,97,114,32,105,32,61,32,34,40,
1708 91,123,60,34,46,105,110,100,101,120,79,102,40,99,41,59,
1709 10,9,105,102,40,105,32,60,32,48,41,10,9,9,114,101,
1710 116,117,114,110,32,99,59,10,9,114,101,116,117,114,110,32,
1711 34,41,93,125,62,34,46,99,104,97,114,65,116,40,105,41,
1712 59,10,125,10,10,102,117,110,99,116,105,111,110,32,108,112,
1713 97,114,101,110,40,99,41,32,123,10,9,118,97,114,32,105,
1714 32,61,32,34,41,93,125,62,34,46,105,110,100,101,120,79,
1715 102,40,99,41,59,10,9,105,102,40,105,32,60,32,48,41,
1716 10,9,9,114,101,116,117,114,110,32,99,59,10,9,114,101,
1717 116,117,114,110,32,34,40,91,123,60,34,46,99,104,97,114,
1718 65,116,40,105,41,59,10,125,10,10,102,117,110,99,116,105,
1719 111,110,32,116,116,103,101,116,119,111,114,100,40,112,111,115,
1720 44,32,108,111,110,103,41,32,123,10,9,105,102,40,112,111,
1721 115,32,62,61,32,116,104,105,115,46,110,114,117,110,101,115,
1722 41,10,9,9,114,101,116,117,114,110,32,91,34,34,44,32,
1723 116,104,105,115,46,110,114,117,110,101,115,44,32,116,104,105,
1724 115,46,110,114,117,110,101,115,93,59,10,9,105,102,40,33,
1725 108,111,110,103,41,32,123,10,9,9,108,111,110,103,32,61,
1726 32,40,116,104,105,115,46,100,98,108,99,108,105,99,107,32,
1727 62,32,49,41,59,10,9,125,10,9,118,97,114,32,105,115,
1728 99,104,97,114,32,61,32,105,115,119,111,114,100,99,104,97,
1729 114,59,10,9,105,102,40,108,111,110,103,41,32,123,10,9,
1730 9,105,115,99,104,97,114,32,61,32,105,115,108,111,110,103,
1731 119,111,114,100,99,104,97,114,59,10,9,125,10,9,118,97,
1732 114,32,105,59,10,9,118,97,114,32,120,108,110,59,10,9,
1733 102,111,114,40,105,32,61,32,48,59,32,105,32,60,32,116,
1734 104,105,115,46,108,105,110,101,115,46,108,101,110,103,116,104,
1735 59,32,105,43,43,41,123,10,9,9,120,108,110,32,61,32,
1736 116,104,105,115,46,108,105,110,101,115,91,105,93,59,10,9,
1737 9,118,97,114,32,120,108,110,108,101,110,32,61,32,120,108,
1738 110,46,116,120,116,46,108,101,110,103,116,104,59,10,9,9,
1739 105,102,40,112,111,115,32,60,32,120,108,110,46,111,102,102,
1740 32,124,124,32,112,111,115,32,62,32,120,108,110,46,111,102,
1741 102,43,120,108,110,108,101,110,41,10,9,9,9,99,111,110,
1742 116,105,110,117,101,59,10,9,9,47,42,32,110,111,119,32,
1743 115,101,108,101,99,116,32,116,104,101,32,119,111,114,100,32,
1744 40,119,111,110,39,116,32,108,111,111,112,32,97,103,97,105,
1745 110,41,32,42,47,10,9,9,118,97,114,32,101,112,111,115,
1746 32,61,32,112,111,115,59,10,9,9,118,97,114,32,112,48,
1747 32,61,32,112,111,115,32,45,32,120,108,110,46,111,102,102,
1748 59,10,9,9,105,102,40,112,48,32,61,61,32,120,108,110,
1749 108,101,110,41,123,10,9,9,9,105,102,40,33,120,108,110,
1750 46,101,111,108,41,10,9,9,9,9,114,101,116,117,114,110,
1751 32,91,120,108,110,46,116,120,116,44,32,120,108,110,46,111,
1752 102,102,44,32,120,108,110,46,111,102,102,43,108,110,108,101,
1753 110,40,120,108,110,41,93,59,10,9,9,9,114,101,116,117,
1754 114,110,32,91,120,108,110,46,116,120,116,43,34,92,110,34,
1755 44,32,120,108,110,46,111,102,102,44,32,120,108,110,46,111,
1756 102,102,43,108,110,108,101,110,40,120,108,110,41,93,59,10,
1757 9,9,125,10,9,9,47,42,10,9,9,32,42,32,104,101,
1758 117,114,105,115,116,105,99,58,32,105,102,32,99,108,105,99,
1759 107,32,97,116,32,116,104,101,32,114,105,103,104,116,32,111,
1760 102,32,108,112,97,114,101,110,32,97,110,100,32,110,111,116,
1761 10,9,9,32,42,32,97,116,32,114,112,97,114,101,110,44,
1762 32,117,115,101,32,116,104,101,32,108,112,97,114,101,110,46,
1763 10,9,9,32,42,47,10,9,9,105,102,40,112,48,32,62,
1764 32,48,32,38,38,32,33,105,115,114,112,97,114,101,110,40,
1765 120,108,110,46,116,120,116,46,99,104,97,114,65,116,40,112,
1766 48,41,41,32,38,38,10,9,9,32,32,32,105,115,108,112,
1767 97,114,101,110,40,120,108,110,46,116,120,116,46,99,104,97,
1768 114,65,116,40,112,48,45,49,41,41,41,123,10,9,9,9,
1769 112,111,115,45,45,59,10,9,9,9,112,48,45,45,59,10,
1770 9,9,125,10,9,9,118,97,114,32,112,49,32,61,32,112,
1771 48,59,10,9,9,118,97,114,32,99,32,61,32,120,108,110,
1772 46,116,120,116,46,99,104,97,114,65,116,40,112,48,41,59,
1773 10,9,9,105,102,40,105,115,108,112,97,114,101,110,40,99,
1774 41,41,123,10,9,9,9,112,111,115,43,43,59,10,9,9,
1775 9,118,97,114,32,110,32,61,32,49,59,10,9,9,9,118,
1776 97,114,32,114,99,32,61,32,114,112,97,114,101,110,40,99,
1777 41,59,10,9,9,9,118,97,114,32,116,120,116,32,61,32,
1778 34,34,59,10,9,9,9,112,49,43,43,59,10,9,9,9,
1779 101,112,111,115,43,43,59,10,9,9,9,100,111,123,10,9,
1780 9,9,9,102,111,114,40,59,32,112,49,32,60,32,120,108,
1781 110,108,101,110,59,32,112,49,43,43,44,32,101,112,111,115,
1782 43,43,41,123,10,9,9,9,9,9,118,97,114,32,120,32,
1783 61,32,120,108,110,46,116,120,116,46,99,104,97,114,65,116,
1784 40,112,49,41,59,10,9,9,9,9,9,105,102,40,120,32,
1785 61,61,32,114,99,41,10,9,9,9,9,9,9,110,45,45,
1786 59,10,9,9,9,9,9,101,108,115,101,32,105,102,40,120,
1787 32,61,61,32,99,41,10,9,9,9,9,9,9,110,43,43,
1788 59,10,9,9,9,9,9,105,102,40,110,32,33,61,32,48,
1789 41,10,9,9,9,9,9,9,116,120,116,32,43,61,32,120,
1790 59,10,9,9,9,9,9,105,102,40,110,32,61,61,32,48,
1791 41,10,9,9,9,9,9,9,114,101,116,117,114,110,32,91,
1792 116,120,116,44,32,112,111,115,44,32,101,112,111,115,45,49,
1793 93,59,10,9,9,9,9,125,10,9,9,9,9,105,102,40,
1794 120,108,110,46,101,111,108,41,123,10,9,9,9,9,9,101,
1795 112,111,115,43,43,59,10,9,9,9,9,9,116,120,116,32,
1796 43,61,32,34,92,110,34,59,10,9,9,9,9,125,10,9,
1797 9,9,9,105,43,43,59,10,9,9,9,9,105,102,40,105,
1798 32,60,32,116,104,105,115,46,108,105,110,101,115,46,108,101,
1799 110,103,116,104,41,123,10,9,9,9,9,9,120,108,110,32,
1800 61,32,116,104,105,115,46,108,105,110,101,115,91,105,93,59,
1801 10,9,9,9,9,9,120,108,110,108,101,110,32,61,32,120,
1802 108,110,46,116,120,116,46,108,101,110,103,116,104,59,10,9,
1803 9,9,9,9,112,49,32,61,32,48,59,10,9,9,9,9,
1804 125,10,9,9,9,125,119,104,105,108,101,40,110,32,62,32,
1805 48,32,38,38,32,105,32,60,32,116,104,105,115,46,108,105,
1806 110,101,115,46,108,101,110,103,116,104,41,59,10,9,9,9,
1807 114,101,116,117,114,110,32,91,116,120,116,44,32,112,111,115,
1808 44,32,101,112,111,115,93,59,10,9,9,125,10,9,9,105,
1809 102,40,105,115,114,112,97,114,101,110,40,99,41,41,123,10,
1810 9,9,9,118,97,114,32,110,32,61,32,49,59,10,9,9,
1811 9,118,97,114,32,108,99,32,61,32,108,112,97,114,101,110,
1812 40,99,41,59,10,9,9,9,118,97,114,32,116,120,116,32,
1813 61,32,34,34,59,10,9,9,9,100,111,123,10,9,9,9,
1814 9,102,111,114,40,112,48,45,45,59,32,112,48,32,62,61,
1815 32,48,59,32,112,48,45,45,41,123,10,9,9,9,9,9,
1816 120,32,61,32,120,108,110,46,116,120,116,46,99,104,97,114,
1817 65,116,40,112,48,41,59,10,9,9,9,9,9,105,102,40,
1818 120,32,61,61,32,108,99,41,10,9,9,9,9,9,9,110,
1819 45,45,59,10,9,9,9,9,9,101,108,115,101,32,105,102,
1820 40,120,32,61,61,32,99,41,10,9,9,9,9,9,9,110,
1821 43,43,59,10,9,9,9,9,9,105,102,40,110,32,33,61,
1822 32,48,41,123,10,9,9,9,9,9,9,112,111,115,45,45,
1823 59,10,9,9,9,9,9,9,116,120,116,32,61,32,120,32,
1824 43,32,116,120,116,59,10,9,9,9,9,9,125,10,9,9,
1825 9,9,9,105,102,40,110,32,61,61,32,48,41,10,9,9,
1826 9,9,9,9,114,101,116,117,114,110,32,91,116,120,116,44,
1827 32,112,111,115,44,32,101,112,111,115,93,59,10,9,9,9,
1828 9,125,10,9,9,9,9,105,102,40,105,32,62,32,48,41,
1829 123,10,9,9,9,9,9,105,45,45,59,10,9,9,9,9,
1830 9,120,108,110,32,61,32,116,104,105,115,46,108,105,110,101,
1831 115,91,105,93,59,10,9,9,9,9,9,120,108,110,108,101,
1832 110,32,61,32,120,108,110,46,116,120,116,46,108,101,110,103,
1833 116,104,59,10,9,9,9,9,9,112,48,32,61,32,120,108,
1834 110,108,101,110,59,10,9,9,9,9,9,105,102,40,120,108,
1835 110,46,101,111,108,41,123,10,9,9,9,9,9,9,112,111,
1836 115,45,45,59,10,9,9,9,9,9,9,116,120,116,32,61,
1837 32,34,92,110,34,32,43,32,116,120,116,59,10,9,9,9,
1838 9,9,125,10,9,9,9,9,125,10,9,9,9,125,119,104,
1839 105,108,101,40,105,32,62,61,32,48,32,38,38,32,110,32,
1840 62,32,48,41,59,10,9,9,9,114,101,116,117,114,110,32,
1841 91,116,120,116,44,32,112,111,115,44,32,101,112,111,115,93,
1842 59,10,9,9,125,10,9,9,105,102,40,33,105,115,108,111,
1843 110,103,119,111,114,100,99,104,97,114,40,99,41,41,10,9,
1844 9,9,114,101,116,117,114,110,32,91,120,108,110,46,116,120,
1845 116,46,115,108,105,99,101,40,112,48,44,32,112,49,41,44,
1846 32,112,111,115,44,32,101,112,111,115,93,59,10,9,9,119,
1847 104,105,108,101,40,112,48,32,62,32,48,32,38,38,32,105,
1848 115,99,104,97,114,40,120,108,110,46,116,120,116,46,99,104,
1849 97,114,65,116,40,112,48,45,49,41,41,41,123,10,9,9,
1850 9,112,111,115,45,45,59,10,9,9,9,112,48,45,45,59,
1851 10,9,9,125,10,9,9,119,104,105,108,101,40,112,49,32,
1852 60,32,120,108,110,108,101,110,32,38,38,32,105,115,99,104,
1853 97,114,40,120,108,110,46,116,120,116,46,99,104,97,114,65,
1854 116,40,112,49,41,41,41,123,10,9,9,9,101,112,111,115,
1855 43,43,59,10,9,9,9,112,49,43,43,59,10,9,9,125,
1856 10,9,9,114,101,116,117,114,110,32,91,120,108,110,46,116,
1857 120,116,46,115,108,105,99,101,40,112,48,44,32,112,49,41,
1858 44,32,112,111,115,44,32,101,112,111,115,93,59,10,9,125,
1859 10,9,114,101,116,117,114,110,32,91,34,34,44,32,112,111,
1860 115,44,32,112,111,115,93,59,10,125,10,10,102,117,110,99,
1861 116,105,111,110,32,116,116,103,101,116,40,112,48,44,32,112,
1862 49,41,32,123,10,9,105,102,40,112,48,32,61,61,32,112,
1863 49,32,124,124,32,112,48,32,62,61,32,116,104,105,115,46,
1864 110,114,117,110,101,115,32,124,124,32,112,49,32,60,32,112,
1865 48,41,10,9,9,114,101,116,117,114,110,32,34,34,59,10,
1866 9,118,97,114,32,105,59,10,9,118,97,114,32,120,108,110,
1867 59,10,9,102,111,114,40,105,32,61,32,48,59,32,105,32,
1868 60,32,116,104,105,115,46,108,105,110,101,115,46,108,101,110,
1869 103,116,104,59,32,105,43,43,41,123,10,9,9,120,108,110,
1870 32,61,32,116,104,105,115,46,108,105,110,101,115,91,105,93,
1871 59,10,9,9,118,97,114,32,120,108,110,108,101,110,32,61,
1872 32,120,108,110,46,116,120,116,46,108,101,110,103,116,104,59,
1873 10,9,9,105,102,40,112,48,32,62,61,32,120,108,110,46,
1874 111,102,102,32,38,38,32,112,48,32,60,61,32,120,108,110,
1875 46,111,102,102,43,120,108,110,108,101,110,41,10,9,9,9,
1876 98,114,101,97,107,59,10,9,125,10,9,105,102,40,105,32,
1877 61,61,32,116,104,105,115,46,108,105,110,101,115,46,108,101,
1878 110,103,116,104,41,123,10,9,9,99,111,110,115,111,108,101,
1879 46,108,111,103,40,34,116,103,101,116,58,32,111,117,116,32,
1880 111,102,32,116,101,120,116,34,41,59,10,9,9,114,101,116,
1881 117,114,110,32,34,34,59,10,9,125,10,9,118,97,114,32,
1882 108,110,48,32,61,32,105,59,10,9,118,97,114,32,110,103,
1883 101,116,32,61,32,112,49,32,45,32,112,48,59,10,9,118,
1884 97,114,32,111,102,102,32,61,32,112,48,32,45,32,120,108,
1885 110,46,111,102,102,59,10,9,118,97,114,32,116,111,116,32,
1886 61,32,48,59,10,9,118,97,114,32,116,120,116,32,61,32,
1887 34,34,59,10,9,100,111,123,10,9,9,118,97,114,32,120,
1888 108,110,32,61,32,116,104,105,115,46,108,105,110,101,115,91,
1889 105,93,59,10,9,9,118,97,114,32,120,108,110,108,101,110,
1890 32,61,32,120,108,110,46,116,120,116,46,108,101,110,103,116,
1891 104,59,10,9,9,118,97,114,32,110,103,32,61,32,110,103,
1892 101,116,45,116,111,116,59,10,9,9,105,102,40,111,102,102,
1893 43,110,103,32,62,32,120,108,110,108,101,110,41,10,9,9,
1894 9,110,103,32,61,32,120,108,110,108,101,110,32,45,32,111,
1895 102,102,59,10,9,9,116,120,116,32,43,61,32,120,108,110,
1896 46,116,120,116,46,115,108,105,99,101,40,111,102,102,44,32,
1897 111,102,102,43,110,103,41,59,10,9,9,116,111,116,32,43,
1898 61,32,110,103,59,10,9,9,105,102,40,116,111,116,32,60,
1899 32,110,103,101,116,32,38,38,32,120,108,110,46,101,111,108,
1900 41,123,10,9,9,9,116,120,116,32,43,61,32,34,92,110,
1901 34,59,10,9,9,9,116,111,116,43,43,59,10,9,9,125,
1902 10,9,9,105,43,43,59,10,9,9,111,102,102,32,61,32,
1903 48,59,10,9,125,119,104,105,108,101,40,116,111,116,32,60,
1904 32,110,103,101,116,41,59,10,9,114,101,116,117,114,110,32,
1905 116,120,116,59,10,125,10,10,47,42,10,32,42,32,99,97,
1906 108,108,32,116,105,110,115,32,102,111,114,32,97,114,98,105,
1907 116,114,97,114,121,32,116,101,120,116,46,10,32,42,47,10,
1908 102,117,110,99,116,105,111,110,32,116,116,105,110,115,108,105,
1909 110,101,115,40,120,44,32,100,111,110,116,115,99,114,111,108,
1910 108,41,32,123,10,9,116,114,121,123,10,9,9,118,97,114,
1911 32,108,110,32,61,32,120,46,115,112,108,105,116,40,39,92,
1912 110,39,41,59,10,9,9,102,111,114,40,118,97,114,32,105,
1913 32,61,32,48,59,32,105,32,60,32,108,110,46,108,101,110,
1914 103,116,104,59,32,105,43,43,41,32,123,10,9,9,9,105,
1915 102,40,108,110,91,105,93,46,108,101,110,103,116,104,32,62,
1916 32,48,41,10,9,9,9,9,116,104,105,115,46,116,105,110,
1917 115,40,108,110,91,105,93,44,32,100,111,110,116,115,99,114,
1918 111,108,108,41,59,10,9,9,9,105,102,40,105,32,60,32,
1919 108,110,46,108,101,110,103,116,104,45,49,41,10,9,9,9,
1920 9,116,104,105,115,46,116,105,110,115,40,39,92,110,39,44,
1921 32,100,111,110,116,115,99,114,111,108,108,41,59,10,9,9,
1922 125,10,9,125,99,97,116,99,104,40,101,120,41,123,10,9,
1923 9,99,111,110,115,111,108,101,46,108,111,103,40,34,116,105,
1924 110,115,108,105,110,101,115,58,32,34,32,43,32,101,120,41,
1925 59,10,9,125,10,125,10,10,102,117,110,99,116,105,111,110,
1926 32,116,109,97,121,114,101,115,105,122,101,40,117,115,101,114,
1927 41,32,123,10,9,105,102,40,117,115,101,114,41,32,123,10,
1928 9,9,116,104,105,115,46,117,115,101,114,114,101,115,105,122,
1929 101,100,32,61,32,116,114,117,101,59,10,9,125,10,9,118,
1930 97,114,32,112,32,61,32,36,40,116,104,105,115,41,46,112,
1931 97,114,101,110,116,40,41,59,10,9,118,97,114,32,100,120,
1932 32,61,32,112,46,119,105,100,116,104,40,41,59,10,9,118,
1933 97,114,32,100,121,32,61,32,112,46,104,101,105,103,104,116,
1934 40,41,32,45,32,53,59,10,9,99,111,110,115,111,108,101,
1935 46,108,111,103,40,39,116,101,120,116,32,114,101,115,105,122,
1936 101,100,39,44,32,100,120,44,32,100,121,44,32,117,115,101,
1937 114,63,34,117,115,101,114,34,58,34,119,105,110,34,41,59,
1938 10,9,118,97,114,32,99,32,61,32,116,104,105,115,59,10,
1939 9,118,97,114,32,99,116,120,32,61,32,116,104,105,115,46,
1940 103,101,116,67,111,110,116,101,120,116,40,34,50,100,34,44,
1941 32,123,97,108,112,104,97,58,32,102,97,108,115,101,125,41,
1942 59,10,9,118,97,114,32,116,97,103,32,61,32,36,40,34,
1943 35,34,43,116,104,105,115,46,100,105,118,105,100,43,34,116,
1944 34,41,10,9,105,102,40,116,97,103,41,32,123,10,9,9,
1945 118,97,114,32,116,121,32,61,32,116,97,103,46,104,101,105,
1946 103,104,116,40,41,59,10,9,9,100,121,32,45,61,32,116,
1947 121,59,10,9,125,10,9,36,40,116,104,105,115,41,46,119,
1948 105,100,116,104,40,100,120,41,59,10,9,36,40,116,104,105,
1949 115,41,46,104,101,105,103,104,116,40,100,121,41,59,10,9,
1950 99,46,119,105,100,116,104,32,61,32,99,46,116,115,99,97,
1951 108,101,42,100,120,59,10,9,99,46,104,101,105,103,104,116,
1952 32,61,32,99,46,116,115,99,97,108,101,42,100,121,59,10,
1953 9,116,104,105,115,46,110,108,105,110,101,115,32,61,32,77,
1954 97,116,104,46,102,108,111,111,114,40,99,46,104,101,105,103,
1955 104,116,47,116,104,105,115,46,102,111,110,116,104,116,41,59,
1956 10,9,116,104,105,115,46,115,97,118,101,100,32,61,32,110,
1957 117,108,108,59,10,9,116,104,105,115,46,114,101,102,111,114,
1958 109,97,116,40,48,41,59,10,9,116,104,105,115,46,114,101,
1959 100,114,97,119,116,101,120,116,40,41,59,10,125,10,10,102,
1960 117,110,99,116,105,111,110,32,116,97,117,116,111,114,101,115,
1961 105,122,101,40,97,100,100,115,105,122,101,44,32,109,111,114,
1962 101,108,101,115,115,41,32,123,10,9,118,97,114,32,112,32,
1963 61,32,36,40,116,104,105,115,41,59,10,9,118,97,114,32,
1964 111,108,100,104,116,32,61,32,112,46,104,101,105,103,104,116,
1965 40,41,59,10,9,118,97,114,32,104,116,32,61,32,111,108,
1966 100,104,116,59,10,9,118,97,114,32,102,111,110,116,104,116,
1967 32,61,32,116,104,105,115,46,102,111,110,116,104,116,47,116,
1968 104,105,115,46,116,115,99,97,108,101,59,10,9,105,102,40,
1969 97,100,100,115,105,122,101,41,32,123,10,9,9,116,104,105,
1970 115,46,117,115,101,114,114,101,115,105,122,101,100,32,61,32,
1971 116,114,117,101,59,10,9,9,105,102,40,109,111,114,101,108,
1972 101,115,115,32,62,32,49,41,123,10,9,9,9,118,97,114,
1973 32,119,116,111,112,32,61,32,36,40,119,105,110,100,111,119,
1974 41,46,115,99,114,111,108,108,84,111,112,40,41,59,10,9,
1975 9,9,118,97,114,32,101,116,111,112,32,61,32,36,40,116,
1976 104,105,115,41,46,111,102,102,115,101,116,40,41,46,116,111,
1977 112,59,10,9,9,9,118,97,114,32,101,111,102,102,32,61,
1978 32,101,116,111,112,45,119,116,111,112,59,10,9,9,9,99,
1979 111,110,115,111,108,101,46,108,111,103,40,34,114,101,115,105,
1980 122,101,32,34,44,32,119,116,111,112,44,32,101,116,111,112,
1981 44,32,101,111,102,102,41,59,10,9,9,9,104,116,32,61,
1982 32,119,105,110,100,111,119,46,105,110,110,101,114,72,101,105,
1983 103,104,116,32,45,32,49,48,32,45,32,101,111,102,102,59,
1984 10,9,9,125,32,101,108,115,101,32,105,102,40,109,111,114,
1985 101,108,101,115,115,32,62,61,32,48,41,32,123,10,9,9,
1986 9,104,116,32,43,61,32,102,111,110,116,104,116,42,54,59,
1987 10,9,9,125,32,101,108,115,101,32,123,10,9,9,9,104,
1988 116,32,45,61,32,102,111,110,116,104,116,42,54,59,10,9,
1989 9,9,105,102,40,104,116,32,60,32,53,42,102,111,110,116,
1990 104,116,41,32,123,10,9,9,9,9,104,116,32,61,32,53,
1991 42,102,111,110,116,104,116,59,10,9,9,9,125,10,9,9,
1992 125,10,9,125,101,108,115,101,123,10,9,9,118,97,114,32,
1993 110,108,110,32,61,32,116,104,105,115,46,102,114,108,105,110,
1994 101,115,59,10,9,9,105,102,40,110,108,110,32,60,32,51,
1995 41,32,123,10,9,9,9,110,108,110,32,61,32,51,59,10,
1996 9,9,125,10,9,9,104,116,32,61,32,40,110,108,110,43,
1997 50,41,32,42,32,102,111,110,116,104,116,59,10,9,9,105,
1998 102,32,40,104,116,32,62,61,32,52,48,48,41,32,123,10,
1999 9,9,9,104,116,32,61,32,52,48,48,59,10,9,9,125,
2000 10,9,125,10,9,99,111,110,115,111,108,101,46,108,111,103,
2001 40,34,97,117,116,111,32,114,115,122,34,44,32,110,108,110,
2002 44,32,104,116,44,32,111,108,100,104,116,41,59,10,9,105,
2003 102,32,40,111,108,100,104,116,32,60,32,104,116,32,45,32,
2004 102,111,110,116,104,116,32,124,124,32,111,108,100,104,116,32,
2005 62,32,104,116,32,43,32,102,111,110,116,104,116,41,32,123,
2006 10,9,9,99,111,110,115,111,108,101,46,108,111,103,40,34,
2007 97,117,116,111,32,114,101,115,105,122,105,110,103,34,41,59,
2008 10,9,9,118,97,114,32,100,101,108,116,97,32,61,32,104,
2009 116,32,45,32,111,108,100,104,116,59,10,9,9,112,32,61,
2010 32,36,40,116,104,105,115,41,46,112,97,114,101,110,116,40,
2011 41,59,10,9,9,118,97,114,32,110,104,116,32,61,32,112,
2012 46,104,101,105,103,104,116,40,41,32,43,32,100,101,108,116,
2013 97,59,10,9,9,112,46,104,101,105,103,104,116,40,110,104,
2014 116,41,59,10,9,9,116,104,105,115,46,109,97,121,114,101,
2015 115,105,122,101,40,41,59,10,9,125,10,125,10,10,102,117,
2016 110,99,116,105,111,110,32,116,109,114,108,115,101,40,101,41,
2017 32,123,10,9,118,97,114,32,98,32,61,32,49,60,60,40,
2018 101,46,119,104,105,99,104,45,49,41,59,10,9,105,102,40,
2019 98,32,61,61,32,49,32,38,38,32,116,104,105,115,46,109,
2020 97,108,116,41,123,10,9,9,98,32,61,32,50,59,10,9,
2021 9,116,104,105,115,46,98,117,116,116,111,110,115,32,38,61,
2022 32,126,49,59,10,9,9,116,104,105,115,46,109,97,108,116,
2023 32,61,32,102,97,108,115,101,59,10,9,125,10,9,116,104,
2024 105,115,46,98,117,116,116,111,110,115,32,38,61,32,126,98,
2025 59,10,9,114,101,116,117,114,110,32,98,59,10,125,10,10,
2026 102,117,110,99,116,105,111,110,32,116,109,112,114,101,115,115,
2027 40,101,41,32,123,10,9,118,97,114,32,98,32,61,32,49,
2028 60,60,40,101,46,119,104,105,99,104,45,49,41,59,10,9,
2029 105,102,40,98,32,61,61,32,49,32,38,38,32,101,46,97,
2030 108,116,75,101,121,41,123,10,9,9,98,32,61,32,50,59,
2031 10,9,9,116,104,105,115,46,109,97,108,116,32,61,32,116,
2032 114,117,101,59,10,9,125,10,9,116,104,105,115,46,98,117,
2033 116,116,111,110,115,32,124,61,32,98,59,10,9,114,101,116,
2034 117,114,110,32,98,59,10,125,10,10,47,47,32,115,101,116,
2035 32,108,97,115,116,120,44,32,108,97,115,116,121,32,116,111,
2036 32,101,118,32,99,111,111,114,100,115,32,114,101,108,97,116,
2037 105,118,101,32,116,111,32,99,97,110,118,97,115,10,102,117,
2038 110,99,116,105,111,110,32,116,101,118,120,121,40,101,41,32,
2039 123,10,9,118,97,114,32,120,32,61,32,48,59,10,9,118,
2040 97,114,32,121,32,61,32,48,59,10,9,105,102,40,101,46,
2041 102,97,107,101,120,32,33,61,32,117,110,100,101,102,105,110,
2042 101,100,41,32,123,10,9,9,120,32,61,32,101,46,102,97,
2043 107,101,120,59,10,9,9,121,32,61,32,101,46,102,97,107,
2044 101,121,59,10,9,125,32,101,108,115,101,32,123,10,9,9,
2045 118,97,114,32,112,111,102,102,32,61,32,36,40,116,104,105,
2046 115,41,46,111,102,102,115,101,116,40,41,59,10,9,9,120,
2047 32,61,32,101,46,112,97,103,101,88,32,45,32,112,111,102,
2048 102,46,108,101,102,116,59,10,9,9,121,32,61,32,101,46,
2049 112,97,103,101,89,32,45,32,112,111,102,102,46,116,111,112,
2050 59,10,9,125,10,9,116,104,105,115,46,108,97,115,116,120,
2051 32,61,32,120,59,10,9,116,104,105,115,46,108,97,115,116,
2052 121,32,61,32,121,59,10,125,10,10,102,117,110,99,116,105,
2053 111,110,32,116,109,119,97,105,116,40,41,32,123,10,9,116,
2054 104,105,115,46,111,110,109,111,117,115,101,109,111,118,101,32,
2055 61,32,101,118,120,121,59,10,9,116,104,105,115,46,111,110,
2056 109,111,117,115,101,100,111,119,110,32,61,32,102,117,110,99,
2057 116,105,111,110,40,101,41,123,10,9,9,116,114,121,123,10,
2058 9,9,9,116,104,105,115,46,101,118,120,121,40,101,41,59,
2059 10,9,9,9,116,104,105,115,46,116,109,112,114,101,115,115,
2060 40,101,41,59,10,9,9,125,99,97,116,99,104,40,101,120,
2061 41,123,10,9,9,9,99,111,110,115,111,108,101,46,108,111,
2062 103,40,34,116,109,119,97,105,116,58,32,100,111,119,110,58,
2063 32,34,32,43,32,101,120,41,59,10,9,9,125,10,9,125,
2064 59,10,9,116,104,105,115,46,111,110,109,111,117,115,101,117,
2065 112,32,61,32,102,117,110,99,116,105,111,110,40,101,41,123,
2066 10,9,9,116,114,121,123,10,9,9,9,116,104,105,115,46,
2067 101,118,120,121,40,101,41,59,10,9,9,9,116,104,105,115,
2068 46,116,109,114,108,115,101,40,101,41,59,10,9,9,9,105,
2069 102,40,116,104,105,115,46,98,117,116,116,111,110,115,32,61,
2070 61,32,48,41,123,10,9,9,9,9,116,104,105,115,46,111,
2071 110,109,111,117,115,101,100,111,119,110,32,61,32,116,104,105,
2072 115,46,116,109,100,111,119,110,59,10,9,9,9,9,116,104,
2073 105,115,46,111,110,109,111,117,115,101,117,112,32,61,32,116,
2074 104,105,115,46,116,109,117,112,59,10,9,9,9,9,116,104,
2075 105,115,46,111,110,109,111,117,115,101,109,111,118,101,32,61,
2076 32,116,104,105,115,46,101,118,120,121,59,10,9,9,9,125,
2077 10,9,9,125,99,97,116,99,104,40,101,120,41,123,10,9,
2078 9,9,99,111,110,115,111,108,101,46,108,111,103,40,34,116,
2079 109,119,97,105,116,58,32,117,112,58,32,34,32,43,32,101,
2080 120,41,59,10,9,9,125,10,9,125,59,10,125,10,10,102,
2081 117,110,99,116,105,111,110,32,116,109,49,40,112,111,115,41,
2082 32,123,10,9,118,97,114,32,110,111,119,32,61,32,110,101,
2083 119,32,68,97,116,101,40,41,46,103,101,116,84,105,109,101,
2084 40,41,59,10,9,105,102,40,33,116,104,105,115,46,99,108,
2085 105,99,107,116,105,109,101,32,124,124,32,110,111,119,45,116,
2086 104,105,115,46,99,108,105,99,107,116,105,109,101,62,53,48,
2087 48,41,123,10,9,9,116,104,105,115,46,100,98,108,99,108,
2088 105,99,107,32,61,32,48,59,10,9,9,116,104,105,115,46,
2089 99,108,105,99,107,116,105,109,101,32,61,32,110,111,119,59,
2090 10,9,125,101,108,115,101,123,10,9,9,116,104,105,115,46,
2091 100,98,108,99,108,105,99,107,43,43,59,10,9,9,116,104,
2092 105,115,46,99,108,105,99,107,116,105,109,101,32,61,32,110,
2093 111,119,59,10,9,125,10,10,9,105,102,40,116,104,105,115,
2094 46,100,98,108,99,108,105,99,107,41,123,10,9,9,118,97,
2095 114,32,120,32,61,32,116,104,105,115,46,116,103,101,116,119,
2096 111,114,100,40,112,111,115,41,59,10,9,9,116,104,105,115,
2097 46,112,111,115,116,40,91,34,99,108,105,99,107,49,34,44,
2098 32,120,91,48,93,44,32,34,34,43,120,91,49,93,44,32,
2099 34,34,43,120,91,50,93,93,41,59,10,9,9,116,104,105,
2100 115,46,116,115,101,116,115,101,108,40,120,91,49,93,44,32,
2101 120,91,50,93,41,59,10,9,125,10,9,116,104,105,115,46,
2102 111,110,109,111,117,115,101,109,111,118,101,32,61,32,102,117,
2103 110,99,116,105,111,110,40,101,41,123,10,9,9,116,114,121,
2104 123,10,9,9,9,116,104,105,115,46,101,118,120,121,40,101,
2105 41,59,10,9,9,9,105,102,40,33,116,104,105,115,46,98,
2106 117,116,116,111,110,115,41,10,9,9,9,9,114,101,116,117,
2107 114,110,59,10,9,9,9,118,97,114,32,116,112,111,115,32,
2108 61,32,116,104,105,115,46,112,116,114,50,116,112,111,115,40,
2109 116,104,105,115,46,108,97,115,116,120,44,32,116,104,105,115,
2110 46,108,97,115,116,121,41,59,10,9,9,9,118,97,114,32,
2111 110,112,111,115,32,61,32,116,104,105,115,46,116,112,111,115,
2112 50,112,111,115,40,116,112,111,115,91,48,93,44,32,116,112,
2113 111,115,91,49,93,41,59,10,9,9,9,105,102,40,110,112,
2114 111,115,32,62,32,112,111,115,41,123,10,9,9,9,9,105,
2115 102,40,116,104,105,115,46,112,48,32,33,61,32,112,111,115,
2116 32,124,124,32,116,104,105,115,46,112,49,32,33,61,32,110,
2117 112,111,115,41,10,9,9,9,9,9,116,104,105,115,46,116,
2118 115,101,116,115,101,108,40,112,111,115,44,32,110,112,111,115,
2119 44,32,116,114,117,101,41,59,10,9,9,9,125,101,108,115,
2120 101,123,10,9,9,9,9,105,102,40,116,104,105,115,46,112,
2121 48,32,33,61,32,110,112,111,115,32,124,124,32,116,104,105,
2122 115,46,112,49,32,33,61,32,112,111,115,41,10,9,9,9,
2123 9,9,116,104,105,115,46,116,115,101,116,115,101,108,40,110,
2124 112,111,115,44,32,112,111,115,44,32,116,114,117,101,41,59,
2125 10,9,9,9,125,10,9,9,9,105,102,40,116,112,111,115,
2126 91,50,93,32,60,32,48,32,38,38,32,116,104,105,115,46,
2127 115,99,114,111,108,108,117,112,49,40,41,41,10,9,9,9,
2128 9,116,104,105,115,46,114,101,100,114,97,119,116,101,120,116,
2129 40,41,59,10,9,9,9,105,102,40,116,112,111,115,91,49,
2130 93,32,62,61,32,116,104,105,115,46,102,114,108,105,110,101,
2131 115,32,38,38,32,116,104,105,115,46,115,99,114,111,108,108,
2132 100,111,119,110,49,40,41,41,10,9,9,9,9,116,104,105,
2133 115,46,114,101,100,114,97,119,116,101,120,116,40,41,59,10,
2134 9,9,9,114,101,116,117,114,110,32,102,97,108,115,101,59,
2135 10,9,9,125,99,97,116,99,104,40,101,120,41,123,10,9,
2136 9,9,99,111,110,115,111,108,101,46,108,111,103,40,34,116,
2137 109,49,58,32,109,111,118,101,58,32,34,32,43,32,101,120,
2138 41,59,10,9,9,125,10,9,125,59,10,9,116,104,105,115,
2139 46,111,110,109,111,117,115,101,100,111,119,110,32,61,32,102,
2140 117,110,99,116,105,111,110,40,101,41,123,10,9,9,116,114,
2141 121,123,10,9,9,9,116,104,105,115,46,101,118,120,121,40,
2142 101,41,59,10,9,9,9,116,104,105,115,46,116,109,112,114,
2143 101,115,115,40,101,41,59,10,9,9,9,105,102,40,116,104,
2144 105,115,46,110,111,101,100,105,116,115,41,32,123,10,9,9,
2145 9,9,114,101,116,117,114,110,59,10,9,9,9,125,10,9,
2146 9,9,105,102,40,116,104,105,115,46,98,117,116,116,111,110,
2147 115,32,61,61,32,49,43,50,41,123,10,9,9,9,9,116,
2148 104,105,115,46,80,111,115,116,40,91,34,101,99,117,116,34,
2149 44,32,34,34,43,116,104,105,115,46,112,48,44,32,34,34,
2150 43,116,104,105,115,46,112,49,93,41,59,10,9,9,9,125,
2151 10,9,9,9,105,102,40,116,104,105,115,46,98,117,116,116,
2152 111,110,115,32,61,61,32,49,43,52,41,123,10,9,9,9,
2153 9,105,102,40,116,104,105,115,46,112,48,32,33,61,32,116,
2154 104,105,115,46,112,49,41,123,10,9,9,9,9,9,116,104,
2155 105,115,46,80,111,115,116,40,91,34,101,100,101,108,34,44,
2156 32,34,34,43,116,104,105,115,46,112,48,44,32,34,34,43,
2157 116,104,105,115,46,112,49,93,41,59,10,9,9,9,9,125,
2158 10,9,9,9,9,116,104,105,115,46,112,111,115,116,40,91,
2159 34,101,112,97,115,116,101,34,44,32,34,34,43,116,104,105,
2160 115,46,112,48,44,32,34,34,43,116,104,105,115,46,112,49,
2161 93,41,59,10,9,9,9,125,10,9,9,9,105,102,40,116,
2162 104,105,115,46,98,117,116,116,111,110,115,32,61,61,32,49,
2163 43,56,41,123,10,9,9,9,9,116,104,105,115,46,112,111,
2164 115,116,40,91,34,101,99,111,112,121,34,44,32,34,34,43,
2165 116,104,105,115,46,112,48,44,32,34,34,43,116,104,105,115,
2166 46,112,49,93,41,59,10,9,9,9,125,10,9,9,125,99,
2167 97,116,99,104,40,101,120,41,123,10,9,9,9,99,111,110,
2168 115,111,108,101,46,108,111,103,40,34,116,109,49,58,32,100,
2169 111,119,110,58,32,34,32,43,32,101,120,41,59,10,9,9,
2170 125,10,9,125,59,10,10,9,116,104,105,115,46,111,110,109,
2171 111,117,115,101,117,112,32,61,32,102,117,110,99,116,105,111,
2172 110,40,101,41,123,10,9,9,116,114,121,123,10,9,9,9,
2173 116,104,105,115,46,101,118,120,121,40,101,41,59,10,9,9,
2174 9,116,104,105,115,46,116,109,114,108,115,101,40,101,41,59,
2175 10,9,9,9,105,102,40,116,104,105,115,46,98,117,116,116,
2176 111,110,115,32,61,61,32,48,41,123,10,9,9,9,9,116,
2177 104,105,115,46,111,110,109,111,117,115,101,100,111,119,110,32,
2178 61,32,116,104,105,115,46,116,109,100,111,119,110,59,10,9,
2179 9,9,9,116,104,105,115,46,111,110,109,111,117,115,101,117,
2180 112,32,61,32,116,104,105,115,46,116,109,117,112,59,10,9,
2181 9,9,9,116,104,105,115,46,111,110,109,111,117,115,101,109,
2182 111,118,101,32,61,32,116,104,105,115,46,101,118,120,121,59,
2183 10,9,9,9,9,116,104,105,115,46,112,111,115,116,40,91,
2184 34,102,111,99,117,115,34,93,41,59,10,9,9,9,9,116,
2185 104,105,115,46,115,101,108,101,99,116,101,110,100,40,41,59,
2186 10,9,9,9,9,105,102,40,100,111,99,117,109,101,110,116,
2187 46,115,101,116,102,111,99,117,115,41,32,123,10,9,9,9,
2188 9,9,100,111,99,117,109,101,110,116,46,115,101,116,102,111,
2189 99,117,115,40,116,104,105,115,41,59,10,9,9,9,9,125,
2190 10,9,9,9,125,10,9,9,125,99,97,116,99,104,40,101,
2191 120,41,123,10,9,9,9,99,111,110,115,111,108,101,46,108,
2192 111,103,40,34,116,109,49,58,32,117,112,58,32,34,32,43,
2193 32,101,120,41,59,10,9,9,125,10,9,125,10,125,10,10,
2194 102,117,110,99,116,105,111,110,32,116,109,50,51,52,40,112,
2195 111,115,44,32,98,41,32,123,10,9,116,104,105,115,46,115,
2196 101,99,111,110,100,97,114,121,32,61,32,98,59,10,9,116,
2197 104,105,115,46,111,110,109,111,117,115,101,109,111,118,101,32,
2198 61,32,102,117,110,99,116,105,111,110,40,101,41,123,10,9,
2199 9,116,114,121,123,10,9,9,9,116,104,105,115,46,101,118,
2200 120,121,40,101,41,59,10,9,9,9,105,102,40,33,116,104,
2201 105,115,46,98,117,116,116,111,110,115,41,10,9,9,9,9,
2202 114,101,116,117,114,110,59,10,9,9,9,118,97,114,32,116,
2203 112,111,115,32,61,32,116,104,105,115,46,112,116,114,50,116,
2204 112,111,115,40,116,104,105,115,46,108,97,115,116,120,44,32,
2205 116,104,105,115,46,108,97,115,116,121,41,59,10,9,9,9,
2206 118,97,114,32,110,112,111,115,32,61,32,116,104,105,115,46,
2207 116,112,111,115,50,112,111,115,40,116,112,111,115,91,48,93,
2208 44,32,116,112,111,115,91,49,93,41,59,10,9,9,9,105,
2209 102,40,110,112,111,115,32,62,32,112,111,115,41,123,10,9,
2210 9,9,9,105,102,40,116,104,105,115,46,112,48,32,33,61,
2211 32,112,111,115,32,124,124,32,116,104,105,115,46,112,49,32,
2212 33,61,32,110,112,111,115,41,10,9,9,9,9,9,116,104,
2213 105,115,46,116,115,101,116,115,101,108,40,112,111,115,44,32,
2214 110,112,111,115,44,32,116,114,117,101,41,59,10,9,9,9,
2215 125,101,108,115,101,10,9,9,9,9,105,102,40,116,104,105,
2216 115,46,112,48,32,33,61,32,110,112,111,115,32,124,124,32,
2217 116,104,105,115,46,112,49,32,33,61,32,112,111,115,41,10,
2218 9,9,9,9,9,116,104,105,115,46,116,115,101,116,115,101,
2219 108,40,110,112,111,115,44,32,112,111,115,44,32,116,114,117,
2220 101,41,59,10,9,9,9,105,102,40,116,112,111,115,91,50,
2221 93,32,60,32,48,32,38,38,32,116,104,105,115,46,115,99,
2222 114,111,108,108,117,112,49,40,41,41,10,9,9,9,9,116,
2223 104,105,115,46,114,101,100,114,97,119,116,101,120,116,40,41,
2224 59,10,9,9,9,105,102,40,116,112,111,115,91,49,93,32,
2225 62,61,32,116,104,105,115,46,102,114,108,105,110,101,115,32,
2226 38,38,32,116,104,105,115,46,115,99,114,111,108,108,100,111,
2227 119,110,49,40,41,41,10,9,9,9,9,116,104,105,115,46,
2228 114,101,100,114,97,119,116,101,120,116,40,41,59,10,9,9,
2229 9,114,101,116,117,114,110,32,102,97,108,115,101,59,10,9,
2230 9,125,99,97,116,99,104,40,101,120,41,123,10,9,9,9,1511 9,125,99,97,116,99,104,40,101,120,41,123,10,9,9,9,
2231 99,111,110,115,111,108,101,46,108,111,103,40,34,116,109,49,1512 9,99,111,110,115,111,108,101,46,108,111,103,40,116,104,105,
2232 58,32,109,111,118,101,58,32,34,32,43,32,101,120,41,59,1513 115,46,100,105,118,105,100,44,32,34,97,112,112,108,121,58,
2233 10,9,9,125,10,9,125,59,10,9,116,104,105,115,46,111,1514 32,100,101,108,58,32,34,32,43,32,101,120,41,59,10,9,
2234 110,109,111,117,115,101,100,111,119,110,32,61,32,102,117,110,1515 9,9,125,10,9,9,9,111,112,48,32,61,32,97,100,106,
2235 99,116,105,111,110,40,101,41,123,10,9,9,116,114,121,123,1516 100,101,108,40,111,112,48,44,32,112,48,44,32,112,49,41,
2236 10,9,9,9,116,104,105,115,46,101,118,120,121,40,101,41,1517 59,10,9,9,9,111,112,49,32,61,32,97,100,106,100,101,
2237 59,10,9,9,9,116,104,105,115,46,116,109,112,114,101,115,1518 108,40,111,112,49,44,32,112,48,44,32,112,49,41,59,10,
2238 115,40,101,41,59,10,9,9,9,116,104,105,115,46,115,101,1519 9,9,9,105,102,40,102,114,111,109,115,101,114,118,101,114,
2239 99,111,110,100,97,114,121,97,98,111,114,116,32,61,32,116,1520 41,32,123,10,9,9,9,9,116,104,105,115,46,115,101,116,
2240 114,117,101,59,10,9,9,125,99,97,116,99,104,40,101,120,1521 115,101,108,40,111,112,48,44,32,111,112,49,44,32,102,97,
2241 41,123,10,9,9,9,99,111,110,115,111,108,101,46,108,111,1522 108,115,101,41,59,10,9,9,9,125,10,9,9,9,105,102,
2242 103,40,34,116,109,50,58,32,100,111,119,110,58,32,34,32,1523 40,101,118,46,86,101,114,115,41,32,123,10,9,9,9,9,
2243 43,32,101,120,41,59,10,9,9,125,10,9,125,59,10,9,1524 116,104,105,115,46,118,101,114,115,32,61,32,101,118,46,86,
2244 116,104,105,115,46,111,110,109,111,117,115,101,117,112,32,61,1525 101,114,115,59,10,9,9,9,125,10,9,9,9,98,114,101,
2245 32,102,117,110,99,116,105,111,110,40,101,41,123,10,9,9,1526 97,107,59,10,9,9,99,97,115,101,32,34,101,99,117,116,
2246 116,114,121,123,10,9,9,9,116,104,105,115,46,101,118,120,1527 34,58,10,9,9,9,116,114,121,123,10,9,9,9,9,116,
2247 121,40,101,41,59,10,9,9,9,116,104,105,115,46,116,109,1528 104,105,115,46,100,101,108,40,102,97,108,115,101,41,59,10,
2248 114,108,115,101,40,101,41,59,10,9,9,9,105,102,40,116,1529 9,9,9,125,99,97,116,99,104,40,101,120,41,123,10,9,
2249 104,105,115,46,98,117,116,116,111,110,115,32,61,61,32,48,1530 9,9,9,99,111,110,115,111,108,101,46,108,111,103,40,116,
2250 41,123,10,9,9,9,9,118,97,114,32,115,112,48,32,61,1531 104,105,115,46,105,100,44,32,34,97,112,112,108,121,58,32,
2251 32,116,104,105,115,46,112,48,59,10,9,9,9,9,118,97,1532 99,117,116,58,32,34,32,43,32,101,120,41,59,10,9,9,
2252 114,32,115,112,49,32,61,32,116,104,105,115,46,112,49,59,1533 9,125,10,9,9,9,105,102,40,101,118,46,86,101,114,115,
2253 10,9,9,9,9,118,97,114,32,120,108,110,32,61,32,116,1534 41,10,9,9,9,9,116,104,105,115,46,118,101,114,115,32,
2254 104,105,115,46,108,105,110,101,115,91,116,104,105,115,46,108,1535 61,32,101,118,46,86,101,114,115,59,10,9,9,9,98,114,
2255 105,110,101,115,46,108,101,110,103,116,104,45,49,93,59,10,1536 101,97,107,59,10,9,9,99,97,115,101,32,34,114,101,108,
2256 9,9,9,9,118,97,114,32,116,115,105,122,101,32,61,32,1537 111,97,100,34,58,10,9,9,9,116,104,105,115,46,114,101,
2257 48,59,10,9,9,9,9,105,102,40,120,108,110,32,38,38,1538 108,111,97,100,108,110,48,32,61,32,116,104,105,115,46,108,
2258 32,120,108,110,46,116,120,116,46,108,101,110,103,116,104,32,1539 110,48,46,108,110,105,59,10,9,9,9,116,104,105,115,46,
2259 61,61,32,48,41,123,10,9,9,9,9,9,116,115,105,122,1540 99,108,101,97,114,40,41,59,10,9,9,9,98,114,101,97,
2260 101,32,61,32,120,108,110,46,111,102,102,59,10,9,9,9,1541 107,59,10,9,9,99,97,115,101,32,34,114,101,108,111,97,
2261 9,125,10,9,9,9,9,116,104,105,115,46,115,101,99,111,1542 100,105,110,103,34,58,10,9,9,9,105,102,40,97,114,103,
2262 110,100,97,114,121,32,61,32,48,59,10,9,9,9,9,116,1543 46,108,101,110,103,116,104,32,60,32,50,41,123,10,9,9,
2263 104,105,115,46,116,115,101,116,115,101,108,40,116,104,105,115,1544 9,9,99,111,110,115,111,108,101,46,108,111,103,40,116,104,
2264 46,111,108,100,112,48,44,32,116,104,105,115,46,111,108,100,1545 105,115,46,105,100,44,32,34,97,112,112,108,121,58,32,115,
2265 112,49,41,59,10,9,9,9,9,99,111,110,115,111,108,101,1546 104,111,114,116,32,114,101,108,111,97,100,105,110,103,34,41,
2266 46,108,111,103,40,34,115,112,48,32,34,32,43,32,115,112,1547 59,10,9,9,9,9,98,114,101,97,107,59,10,9,9,9,
2267 48,32,43,32,34,32,34,32,43,32,115,112,49,32,43,32,1548 125,10,9,9,9,118,97,114,32,110,108,110,32,61,32,110,
2268 34,32,34,32,43,32,116,115,105,122,101,41,59,10,9,9,1549 101,119,32,76,105,110,101,40,48,44,32,48,44,32,97,114,
2269 9,9,105,102,40,33,116,104,105,115,46,115,101,99,111,110,1550 103,91,49,93,44,32,116,114,117,101,41,59,10,9,9,9,
2270 100,97,114,121,97,98,111,114,116,41,10,9,9,9,9,105,1551 116,104,105,115,46,97,100,100,108,110,40,110,108,110,41,59,
2271 102,40,115,112,48,32,33,61,32,115,112,49,41,123,10,9,1552 10,9,9,9,98,114,101,97,107,10,9,9,99,97,115,101,
2272 9,9,9,9,118,97,114,32,116,120,116,32,61,32,116,104,1553 32,34,114,101,108,111,97,100,101,100,34,58,10,9,9,9,
2273 105,115,46,116,103,101,116,40,115,112,48,44,32,115,112,49,1554 105,102,40,97,114,103,46,108,101,110,103,116,104,32,60,32,
2274 41,59,10,9,9,9,9,9,116,104,105,115,46,112,111,115,1555 50,41,123,10,9,9,9,9,99,111,110,115,111,108,101,46,
2275 116,40,91,34,99,108,105,99,107,34,43,98,44,32,34,34,1556 108,111,103,40,116,104,105,115,46,105,100,44,32,34,97,112,
2276 44,32,34,34,43,115,112,48,44,32,34,34,43,115,112,49,1557 112,108,121,58,32,115,104,111,114,116,32,114,101,108,111,97,
2277 44,32,116,120,116,93,41,59,10,9,9,9,9,125,101,108,1558 100,101,100,34,41,59,10,9,9,9,9,98,114,101,97,107,
2278 115,101,32,105,102,40,116,104,105,115,46,112,48,32,33,61,1559 59,10,9,9,9,125,10,9,9,9,116,104,105,115,46,118,
2279 32,116,104,105,115,46,112,49,32,38,38,10,9,9,9,9,1560 101,114,115,32,61,32,112,97,114,115,101,73,110,116,40,97,
2280 9,32,115,112,48,32,62,61,32,116,104,105,115,46,112,48,1561 114,103,91,49,93,41,59,10,9,9,9,105,102,40,116,104,
2281 32,38,38,32,115,112,48,32,60,61,32,116,104,105,115,46,1562 105,115,46,114,101,108,111,97,100,108,110,48,41,32,123,10,
2282 112,49,41,123,10,9,9,9,9,9,118,97,114,32,116,120,1563 9,9,9,9,116,104,105,115,46,108,110,48,32,61,32,116,
2283 116,32,61,32,116,104,105,115,46,116,103,101,116,40,116,104,1564 104,105,115,46,115,101,101,107,108,110,40,116,104,105,115,46,
2284 105,115,46,112,48,44,32,116,104,105,115,46,112,49,41,59,1565 114,101,108,111,97,100,108,110,48,41,59,10,9,9,9,9,
2285 10,9,9,9,9,9,116,104,105,115,46,112,111,115,116,40,1566 116,104,105,115,46,114,101,108,111,97,100,108,110,48,32,61,
2286 91,34,99,108,105,99,107,34,43,98,44,32,116,120,116,44,1567 32,48,59,10,9,9,9,125,10,9,9,9,116,104,105,115,
2287 10,9,9,9,9,9,9,32,32,34,34,43,116,104,105,115,1568 46,114,101,100,114,97,119,116,101,120,116,40,41,59,10,9,
2288 46,112,48,44,32,34,34,43,116,104,105,115,46,112,49,93,1569 9,9,105,102,40,33,116,104,105,115,46,117,115,101,114,114,
2289 41,59,10,9,9,9,9,125,101,108,115,101,32,105,102,40,1570 101,115,105,122,101,100,41,32,123,10,9,9,9,9,116,104,
2290 98,32,33,61,32,49,32,38,38,32,115,112,48,32,61,61,1571 105,115,46,97,117,116,111,114,101,115,105,122,101,40,41,59,
2291 32,115,112,49,32,38,38,32,116,115,105,122,101,32,38,38,1572 10,9,9,9,125,10,9,9,9,47,47,32,116,104,105,115,
2292 10,9,9,9,9,9,115,112,48,32,61,61,32,116,115,105,1573 46,100,117,109,112,40,41,59,10,9,9,9,98,114,101,97,
2293 122,101,32,38,38,32,115,112,48,62,48,41,32,123,10,9,1574 107,59,10,9,9,99,97,115,101,32,34,109,97,114,107,34,
2294 9,9,9,9,47,47,32,97,32,99,108,105,99,107,32,97,1575 58,10,9,9,9,105,102,40,97,114,103,46,108,101,110,103,
2295 116,32,97,32,102,105,110,97,108,32,101,109,112,116,121,32,1576 116,104,32,60,32,51,41,123,10,9,9,9,9,99,111,110,
2296 108,105,110,101,32,115,101,108,101,99,116,115,32,116,104,101,1577 115,111,108,101,46,108,111,103,40,116,104,105,115,46,105,100,
2297 32,112,114,101,118,105,111,117,115,10,9,9,9,9,9,47,1578 44,32,34,97,112,112,108,121,58,32,115,104,111,114,116,32,
2298 47,32,108,105,110,101,32,40,119,104,105,99,104,32,105,115,1579 109,97,114,107,34,41,59,10,9,9,9,9,98,114,101,97,
2299 32,116,104,101,32,108,97,115,116,32,111,110,101,32,115,104,1580 107,59,10,9,9,9,125,10,9,9,9,118,97,114,32,112,
2300 111,119,110,41,46,10,9,9,9,9,9,118,97,114,32,120,1581 111,115,32,61,32,112,97,114,115,101,73,110,116,40,97,114,
2301 32,61,32,116,104,105,115,46,116,103,101,116,119,111,114,100,1582 103,91,50,93,41,59,10,9,9,9,116,104,105,115,46,115,
2302 40,115,112,48,45,49,44,32,98,32,33,61,32,56,41,59,1583 101,116,109,97,114,107,40,97,114,103,91,49,93,44,32,112,
2303 10,9,9,9,9,9,116,104,105,115,46,112,111,115,116,40,1584 111,115,41,59,10,9,9,9,98,114,101,97,107,59,10,9,
2304 91,34,99,108,105,99,107,34,43,98,44,32,120,91,48,93,1585 9,99,97,115,101,32,34,115,101,108,34,58,10,9,9,9,
2305 44,10,9,9,9,9,9,9,32,32,34,34,43,120,91,49,1586 105,102,40,97,114,103,46,108,101,110,103,116,104,32,60,32,
2306 93,44,32,34,34,43,120,91,50,93,93,41,59,10,9,9,1587 51,41,123,10,9,9,9,9,99,111,110,115,111,108,101,46,
2307 9,9,125,101,108,115,101,32,123,10,9,9,9,9,9,118,1588 108,111,103,40,116,104,105,115,46,105,100,44,32,34,97,112,
2308 97,114,32,120,32,61,32,116,104,105,115,46,116,103,101,116,1589 112,108,121,58,32,115,104,111,114,116,32,115,101,108,34,41,
2309 119,111,114,100,40,115,112,48,44,32,98,32,33,61,32,56,1590 59,10,9,9,9,9,98,114,101,97,107,59,10,9,9,9,
2310 41,59,10,9,9,9,9,9,116,104,105,115,46,112,111,115,1591 125,10,9,9,9,118,97,114,32,112,111,115,48,32,61,32,
2311 116,40,91,34,99,108,105,99,107,34,43,98,44,32,120,91,1592 112,97,114,115,101,73,110,116,40,97,114,103,91,49,93,41,
2312 48,93,44,10,9,9,9,9,9,9,32,32,34,34,43,120,1593 59,10,9,9,9,118,97,114,32,112,111,115,49,32,61,32,
2313 91,49,93,44,32,34,34,43,120,91,50,93,93,41,59,10,1594 112,97,114,115,101,73,110,116,40,97,114,103,91,50,93,41,
2314 9,9,9,9,125,10,9,9,9,9,116,104,105,115,46,111,1595 59,10,9,9,9,116,104,105,115,46,115,101,116,109,97,114,
2315 110,109,111,117,115,101,100,111,119,110,32,61,32,116,104,105,1596 107,40,34,112,48,34,44,32,112,111,115,48,41,59,10,9,
2316 115,46,116,109,100,111,119,110,59,10,9,9,9,9,116,104,1597 9,9,116,104,105,115,46,115,101,116,109,97,114,107,40,34,
2317 105,115,46,111,110,109,111,117,115,101,117,112,32,61,32,116,1598 112,49,34,44,32,112,111,115,49,41,59,10,9,9,9,116,
2318 104,105,115,46,116,109,117,112,59,10,9,9,9,9,116,104,1599 104,105,115,46,115,101,116,115,101,108,40,112,111,115,48,44,
2319 105,115,46,111,110,109,111,117,115,101,109,111,118,101,32,61,1600 32,112,111,115,49,44,32,116,114,117,101,41,59,10,9,9,
2320 32,116,104,105,115,46,101,118,120,121,59,10,9,9,9,125,1601 9,116,104,105,115,46,118,105,101,119,115,101,108,40,41,59,
2321 10,9,9,125,99,97,116,99,104,40,101,120,41,123,10,9,1602 10,9,9,9,99,111,110,115,111,108,101,46,108,111,103,40,
2322 9,9,99,111,110,115,111,108,101,46,108,111,103,40,34,116,1603 34,115,101,116,115,101,108,34,44,32,112,111,115,48,44,32,
2323 109,50,58,32,117,112,58,32,34,32,43,32,101,120,41,59,1604 112,111,115,49,41,59,10,9,9,9,98,114,101,97,107,59,
2324 10,9,9,125,10,9,9,105,102,40,116,104,105,115,46,98,1605 10,9,9,99,97,115,101,32,34,100,101,108,109,97,114,107,
2325 117,116,116,111,110,115,32,61,61,32,48,41,123,10,9,9,1606 34,58,10,9,9,9,105,102,40,97,114,103,46,108,101,110,
2326 9,116,104,105,115,46,112,48,32,61,32,116,104,105,115,46,1607 103,116,104,32,60,32,50,41,123,10,9,9,9,9,99,111,
2327 111,108,100,112,48,59,10,9,9,9,116,104,105,115,46,112,1608 110,115,111,108,101,46,108,111,103,40,116,104,105,115,46,100,
2328 49,32,61,32,116,104,105,115,46,111,108,100,112,49,59,10,1609 105,118,105,100,44,32,34,97,112,112,108,121,58,32,115,104,
2329 9,9,9,116,104,105,115,46,115,101,99,111,110,100,97,114,1610 111,114,116,32,100,101,108,109,97,114,107,34,41,59,10,9,
2330 121,32,61,32,48,59,10,9,9,9,116,104,105,115,46,115,1611 9,9,9,98,114,101,97,107,59,10,9,9,9,125,10,9,
2331 101,99,111,110,100,97,114,121,97,98,111,114,116,32,61,32,1612 9,9,116,104,105,115,46,100,101,108,109,97,114,107,40,97,
2332 102,97,108,115,101,59,10,9,9,9,116,104,105,115,46,115,1613 114,103,91,49,93,41,59,10,9,9,9,98,114,101,97,107,
2333 101,108,101,99,116,101,110,100,40,41,59,10,9,9,125,10,1614 59,10,9,9,99,97,115,101,32,34,99,108,111,115,101,34,
2334 9,125,10,125,10,10,102,117,110,99,116,105,111,110,32,116,1615 58,10,9,9,9,116,104,105,115,46,119,115,46,99,108,111,
2335 109,117,112,40,101,41,32,123,10,9,101,46,112,114,101,118,1616 115,101,40,41,59,10,9,9,9,36,40,34,35,34,43,116,
2336 101,110,116,68,101,102,97,117,108,116,40,41,59,10,9,116,1617 104,105,115,46,105,100,41,46,114,101,109,111,118,101,40,41,
2337 114,121,32,123,10,9,9,116,104,105,115,46,116,109,114,108,1618 59,10,9,9,9,98,114,101,97,107,59,10,9,9,100,101,
2338 115,101,40,101,41,59,10,9,9,116,104,105,115,46,101,118,1619 102,97,117,108,116,58,10,9,9,9,99,111,110,115,111,108,
2339 120,121,40,101,41,59,10,9,9,105,102,40,116,104,105,115,1620 101,46,108,111,103,40,34,116,101,120,116,58,32,117,110,104,
2340 46,98,117,116,116,111,110,115,32,61,61,32,48,41,123,10,1621 97,110,100,108,101,100,34,44,32,97,114,103,91,48,93,41,
2341 9,9,9,116,104,105,115,46,115,101,108,101,99,116,101,110,1622 59,10,9,9,125,10,9,125,59,10,10,9,116,104,105,115,
2342 100,40,41,59,10,9,9,125,10,9,125,99,97,116,99,104,1623 46,80,111,115,116,32,61,32,102,117,110,99,116,105,111,110,
2343 40,101,120,41,123,10,9,9,99,111,110,115,111,108,101,46,1624 40,101,41,32,123,10,9,9,118,97,114,32,101,118,32,61,
2344 108,111,103,40,34,116,101,118,109,117,112,58,32,34,32,43,1625 32,116,104,105,115,46,112,111,115,116,40,101,41,59,10,9,
2345 32,101,120,41,59,10,9,125,10,125,10,10,102,117,110,99,1626 9,105,102,40,101,118,41,123,10,9,9,9,116,114,121,32,
2346 116,105,111,110,32,116,109,119,104,101,101,108,40,101,41,32,1627 123,10,9,9,9,9,116,104,105,115,46,97,112,112,108,121,
2347 123,10,9,116,114,121,32,123,10,9,9,101,46,112,114,101,1628 40,101,118,41,59,10,9,9,9,125,99,97,116,99,104,40,
2348 118,101,110,116,68,101,102,97,117,108,116,40,41,59,10,9,1629 101,120,41,123,10,9,9,9,9,99,111,110,115,111,108,101,
2349 9,118,97,114,32,100,32,61,32,101,46,119,104,101,101,108,1630 46,108,111,103,40,34,116,120,116,32,97,112,112,108,121,58,
2350 68,101,108,116,97,59,10,9,9,118,97,114,32,115,32,61,1631 32,34,32,43,32,101,120,41,59,10,9,9,9,125,10,9,
2351 32,49,59,10,9,9,105,102,40,100,32,60,32,48,41,123,1632 9,125,10,9,125,59,10,10,9,47,47,32,79,110,108,121,
2352 10,9,9,9,100,32,61,32,45,100,59,10,9,9,9,100,1633 32,116,104,101,32,102,114,97,109,101,32,119,105,116,104,32,
2353 32,61,32,49,32,43,32,77,97,116,104,46,102,108,111,111,1634 116,104,101,32,108,111,99,107,32,109,97,121,32,99,104,97,
2354 114,40,100,47,49,48,41,59,10,9,9,9,105,102,40,116,1635 110,103,101,32,116,104,101,32,116,101,120,116,44,10,9,47,
2355 104,105,115,46,115,99,114,111,108,108,100,111,119,110,40,100,1636 47,32,119,101,32,114,101,112,108,97,99,101,32,116,104,101,
2356 41,41,123,10,9,9,9,9,116,104,105,115,46,117,110,116,1637 32,104,97,110,100,108,101,114,115,32,116,111,32,103,97,105,
2357 105,99,107,40,41,59,10,9,9,9,9,116,104,105,115,46,1638 110,32,116,104,101,32,108,111,99,107,32,98,101,102,111,114,
2358 114,101,100,114,97,119,116,101,120,116,40,41,59,10,9,9,1639 101,32,97,99,116,117,97,108,108,121,10,9,47,47,32,100,
2359 9,125,10,9,9,125,101,108,115,101,123,10,9,9,9,100,1640 111,105,110,103,32,97,110,121,116,104,105,110,103,46,10,10,
2360 32,61,32,49,32,43,32,77,97,116,104,46,102,108,111,111,1641 9,116,104,105,115,46,116,107,101,121,100,111,119,110,32,61,
2361 114,40,100,47,49,48,41,59,10,9,9,9,105,102,40,116,1642 32,102,117,110,99,116,105,111,110,40,101,44,32,100,101,102,
2362 104,105,115,46,115,99,114,111,108,108,117,112,40,100,41,41,1643 101,114,114,101,100,41,32,123,10,9,9,118,97,114,32,107,
2363 123,10,9,9,9,9,116,104,105,115,46,117,110,116,105,99,
2364 107,40,41,59,10,9,9,9,9,116,104,105,115,46,114,101,
2365 100,114,97,119,116,101,120,116,40,41,59,10,9,9,9,125,
2366 10,9,9,125,10,9,125,99,97,116,99,104,40,101,120,41,
2367 123,10,9,9,99,111,110,115,111,108,101,46,108,111,103,40,
2368 34,116,109,119,104,101,101,108,58,32,34,32,43,32,101,120,
2369 41,59,10,9,125,10,125,10,10,102,117,110,99,116,105,111,
2370 110,32,116,109,100,111,119,110,40,101,41,32,123,10,9,105,
2371 102,40,48,41,99,111,110,115,111,108,101,46,108,111,103,40,
2372 34,116,109,100,111,119,110,32,34,44,32,116,104,105,115,46,
2373 100,105,118,105,100,44,32,101,41,59,10,9,116,104,105,115,
2374 46,115,101,108,101,99,116,115,116,97,114,116,40,41,59,10,
2375 9,101,46,112,114,101,118,101,110,116,68,101,102,97,117,108,
2376 116,40,41,59,10,9,116,104,105,115,46,115,101,99,111,110,
2377 100,97,114,121,32,61,32,48,59,9,9,47,42,32,112,97,
2378 114,97,110,111,105,97,58,32,115,101,101,32,116,109,50,51,
2379 52,32,42,47,10,9,116,104,105,115,46,115,101,99,111,110,
2380 100,97,114,121,97,98,111,114,116,32,61,32,102,97,108,115,
2381 101,59,10,9,116,114,121,32,123,10,9,9,116,104,105,115,
2382 46,116,109,112,114,101,115,115,40,101,41,59,10,9,9,116,
2383 104,105,115,46,101,118,120,121,40,101,41,59,10,9,9,118,
2384 97,114,32,98,32,61,32,116,104,105,115,46,98,117,116,116,
2385 111,110,115,59,10,9,9,115,119,105,116,99,104,40,98,41,
2386 123,10,9,9,99,97,115,101,32,49,58,10,9,9,9,118,
2387 97,114,32,116,112,111,115,32,61,32,116,104,105,115,46,112,
2388 116,114,50,116,112,111,115,40,116,104,105,115,46,108,97,115,
2389 116,120,44,32,116,104,105,115,46,108,97,115,116,121,41,59,
2390 10,9,9,9,118,97,114,32,112,111,115,32,61,32,116,104,
2391 105,115,46,116,112,111,115,50,112,111,115,40,116,112,111,115,
2392 91,48,93,44,32,116,112,111,115,91,49,93,41,59,10,9,
2393 9,9,116,104,105,115,46,116,115,101,116,115,101,108,40,112,
2394 111,115,44,32,112,111,115,41,59,10,9,9,9,116,104,105,
2395 115,46,116,109,49,40,112,111,115,41,59,10,9,9,9,98,
2396 114,101,97,107,59,10,9,9,99,97,115,101,32,50,58,10,
2397 9,9,99,97,115,101,32,52,58,10,9,9,99,97,115,101,
2398 32,56,58,10,9,9,9,118,97,114,32,116,112,111,115,32,
2399 61,32,116,104,105,115,46,112,116,114,50,116,112,111,115,40,
2400 116,104,105,115,46,108,97,115,116,120,44,32,116,104,105,115,
2401 46,108,97,115,116,121,41,59,10,9,9,9,118,97,114,32,
2402 112,111,115,32,61,32,116,104,105,115,46,116,112,111,115,50,
2403 112,111,115,40,116,112,111,115,91,48,93,44,32,116,112,111,
2404 115,91,49,93,41,59,10,9,9,9,116,104,105,115,46,111,
2405 108,100,112,48,32,61,32,116,104,105,115,46,112,48,59,10,
2406 9,9,9,116,104,105,115,46,111,108,100,112,49,32,61,32,
2407 116,104,105,115,46,112,49,59,10,9,9,9,116,104,105,115,
2408 46,116,115,101,116,115,101,108,40,112,111,115,44,32,112,111,
2409 115,41,59,10,9,9,9,116,104,105,115,46,116,109,50,51,
2410 52,40,112,111,115,44,32,98,41,59,10,9,9,9,98,114,
2411 101,97,107,59,10,9,9,100,101,102,97,117,108,116,58,10,
2412 9,9,9,116,104,105,115,46,116,109,119,97,105,116,40,41,
2413 59,10,9,9,125,10,9,125,99,97,116,99,104,40,101,120,
2414 41,123,10,9,9,99,111,110,115,111,108,101,46,108,111,103,
2415 40,34,101,118,109,100,111,119,110,58,32,34,32,43,32,101,
2416 120,41,59,10,9,125,10,9,101,46,114,101,116,117,114,110,
2417 86,97,108,117,101,32,61,32,102,97,108,115,101,59,10,125,
2418 10,10,102,117,110,99,116,105,111,110,32,116,107,101,121,100,
2419 111,119,110,40,101,44,32,100,101,102,101,114,114,101,100,41,
2420 32,123,10,9,116,114,121,123,10,9,9,118,97,114,32,107,
2421 101,121,32,61,32,101,46,107,101,121,67,111,100,101,59,10,1644 101,121,32,61,32,101,46,107,101,121,67,111,100,101,59,10,
2422 9,9,105,102,40,33,101,46,107,101,121,67,111,100,101,41,1645 9,9,105,102,40,33,101,46,107,101,121,67,111,100,101,41,
2423 10,9,9,9,107,101,121,32,61,32,101,46,119,104,105,99,1646 10,9,9,9,107,101,121,32,61,32,101,46,119,104,105,99,
@@ -2426,172 +1649,125 @@ var Files = map[string][]byte{ · 2 unmodified lines
2426 111,100,101,40,101,46,107,101,121,67,111,100,101,41,59,10,1649 111,100,101,40,101,46,107,101,121,67,111,100,101,41,59,10,
2427 9,9,101,46,115,116,111,112,80,114,111,112,97,103,97,116,1650 9,9,101,46,115,116,111,112,80,114,111,112,97,103,97,116,
2428 105,111,110,40,41,59,10,9,9,105,102,40,116,100,101,98,1651 105,111,110,40,41,59,10,9,9,105,102,40,116,100,101,98,
2429 117,103,41,99,111,110,115,111,108,101,46,108,111,103,40,34,1652 117,103,41,32,123,10,9,9,9,99,111,110,115,111,108,101,
2430 107,101,121,100,111,119,110,32,119,104,105,99,104,32,34,32,1653 46,108,111,103,40,34,107,101,121,100,111,119,110,32,119,104,
2431 43,32,101,46,119,104,105,99,104,32,43,32,34,32,107,101,1654 105,99,104,32,34,32,43,32,101,46,119,104,105,99,104,32,
2432 121,32,34,32,43,32,101,46,107,101,121,67,111,100,101,32,1655 43,32,34,32,107,101,121,32,34,32,43,32,101,46,107,101,
2433 43,10,9,9,9,34,32,39,34,32,43,32,114,117,110,101,1656 121,67,111,100,101,32,43,10,9,9,9,9,34,32,39,34,
2434 32,43,32,34,39,34,32,43,10,9,9,9,34,32,34,32,1657 32,43,32,114,117,110,101,32,43,32,34,39,34,32,43,10,
2435 43,32,101,46,99,116,114,108,75,101,121,32,43,32,34,32,1658 9,9,9,9,34,32,34,32,43,32,101,46,99,116,114,108,
2436 34,32,43,32,101,46,109,101,116,97,75,101,121,41,59,10,1659 75,101,121,32,43,32,34,32,34,32,43,32,101,46,109,101,
2437 9,10,9,9,115,119,105,116,99,104,40,107,101,121,41,123,1660 116,97,75,101,121,41,59,10,9,9,125,10,9,9,115,119,
2438 10,9,9,99,97,115,101,32,50,55,58,9,47,42,32,101,1661 105,116,99,104,40,107,101,121,41,123,10,9,9,99,97,115,
2439 115,99,97,112,101,32,42,47,10,9,9,9,105,102,40,100,1662 101,32,50,55,58,9,47,42,32,101,115,99,97,112,101,32,
2440 101,102,101,114,114,101,100,41,10,9,9,9,9,98,114,101,1663 42,47,10,9,9,9,105,102,40,100,101,102,101,114,114,101,
2441 97,107,59,10,9,9,9,116,104,105,115,46,112,111,115,116,1664 100,41,32,123,10,9,9,9,9,98,114,101,97,107,59,10,
2442 40,91,34,105,110,116,114,34,44,32,34,101,115,99,34,93,1665 9,9,9,125,10,9,9,9,116,104,105,115,46,112,111,115,
2443 41,59,10,9,9,9,116,104,105,115,46,100,117,109,112,40,1666 116,40,91,34,105,110,116,114,34,44,32,34,101,115,99,34,
2444 41,59,10,9,9,9,99,111,110,115,111,108,101,46,108,111,1667 93,41,59,10,9,9,9,116,104,105,115,46,100,117,109,112,
2445 103,40,34,91,34,43,116,104,105,115,46,112,48,43,34,44,1668 40,41,59,10,9,9,9,99,111,110,115,111,108,101,46,108,
2446 34,43,116,104,105,115,46,112,49,43,34,93,61,39,34,32,1669 111,103,40,34,115,101,108,32,61,32,91,34,43,116,104,105,
2447 43,10,9,9,9,9,116,104,105,115,46,116,103,101,116,40,1670 115,46,112,48,43,34,44,34,43,116,104,105,115,46,112,49,
2448 116,104,105,115,46,112,48,44,32,116,104,105,115,46,112,49,1671 43,34,93,32,61,32,39,34,32,43,10,9,9,9,9,116,
2449 41,32,43,32,34,39,34,41,59,10,9,9,9,98,114,101,1672 104,105,115,46,103,101,116,40,116,104,105,115,46,112,48,44,
2450 97,107,59,10,9,9,99,97,115,101,32,56,58,9,9,47,1673 32,116,104,105,115,46,112,49,41,32,43,32,34,39,34,41,
2451 42,32,98,97,99,107,115,112,97,99,101,32,42,47,10,9,1674 59,10,9,9,9,98,114,101,97,107,59,10,9,9,99,97,
2452 9,9,105,102,40,116,104,105,115,46,110,111,101,100,105,116,1675 115,101,32,56,58,9,9,47,42,32,98,97,99,107,115,112,
2453 115,41,32,123,10,9,9,9,9,114,101,116,117,114,110,59,1676 97,99,101,32,42,47,10,9,9,9,105,102,40,116,104,105,
2454 10,9,9,9,125,10,9,9,9,105,102,40,100,101,102,101,1677 115,46,110,111,101,100,105,116,115,41,32,123,10,9,9,9,
2455 114,114,101,100,41,10,9,9,9,9,98,114,101,97,107,59,1678 9,114,101,116,117,114,110,59,10,9,9,9,125,10,9,9,
2456 10,9,9,9,105,102,40,116,104,105,115,46,112,48,32,33,1679 9,105,102,40,100,101,102,101,114,114,101,100,41,32,123,10,
2457 61,32,116,104,105,115,46,112,49,41,123,10,9,9,9,9,1680 9,9,9,9,98,114,101,97,107,59,10,9,9,9,125,10,
2458 116,104,105,115,46,80,111,115,116,40,91,34,101,100,101,108,1681 9,9,9,105,102,40,116,104,105,115,46,112,48,32,33,61,
2459 34,44,32,34,34,43,116,104,105,115,46,112,48,44,32,34,1682 32,116,104,105,115,46,112,49,41,123,10,9,9,9,9,116,
2460 34,43,116,104,105,115,46,112,49,93,41,59,10,9,9,9,1683 104,105,115,46,80,111,115,116,40,91,34,101,100,101,108,34,
2461 125,101,108,115,101,32,105,102,40,116,104,105,115,46,112,48,1684 44,32,34,34,43,116,104,105,115,46,112,48,44,32,34,34,
2462 32,62,32,48,41,123,10,9,9,9,9,118,97,114,32,112,1685 43,116,104,105,115,46,112,49,93,41,59,10,9,9,9,125,
2463 48,32,61,32,116,104,105,115,46,112,48,45,49,59,10,9,1686 101,108,115,101,32,105,102,40,116,104,105,115,46,112,48,32,
2464 9,9,9,116,104,105,115,46,80,111,115,116,40,91,34,101,1687 62,32,48,41,123,10,9,9,9,9,118,97,114,32,112,48,
2465 100,101,108,34,44,32,34,34,43,112,48,44,32,34,34,43,1688 32,61,32,116,104,105,115,46,112,48,45,49,59,10,9,9,
2466 116,104,105,115,46,112,49,93,41,59,10,9,9,9,125,10,1689 9,9,116,104,105,115,46,80,111,115,116,40,91,34,101,100,
1690 101,108,34,44,32,34,34,43,112,48,44,32,34,34,43,116,
1691 104,105,115,46,112,49,93,41,59,10,9,9,9,125,10,9,
1692 9,9,98,114,101,97,107,59,10,9,9,99,97,115,101,32,
1693 57,58,9,9,47,42,32,116,97,98,32,42,47,10,9,9,
1694 9,105,102,40,116,104,105,115,46,110,111,101,100,105,116,115,
1695 41,32,123,10,9,9,9,9,114,101,116,117,114,110,59,10,
1696 9,9,9,125,10,9,9,9,105,102,40,100,101,102,101,114,
1697 114,101,100,41,32,123,10,9,9,9,9,98,114,101,97,107,
1698 59,10,9,9,9,125,10,9,9,9,105,102,40,116,104,105,
1699 115,46,112,48,32,33,61,32,116,104,105,115,46,112,49,41,
1700 123,10,9,9,9,9,116,104,105,115,46,80,111,115,116,40,
1701 91,34,101,100,101,108,34,44,32,34,34,43,116,104,105,115,
1702 46,112,48,44,32,34,34,43,116,104,105,115,46,112,49,93,
1703 41,59,10,9,9,9,125,10,9,9,9,116,104,105,115,46,
1704 80,111,115,116,40,91,34,101,105,110,115,34,44,32,34,92,
1705 116,34,44,32,34,34,43,116,104,105,115,46,112,48,93,41,
1706 59,10,9,9,9,98,114,101,97,107,59,10,9,9,99,97,
1707 115,101,32,51,50,58,9,47,42,32,115,112,97,99,101,32,
1708 42,47,10,9,9,9,105,102,40,100,101,102,101,114,114,101,
1709 100,41,32,123,10,9,9,9,9,98,114,101,97,107,59,10,
1710 9,9,9,125,10,9,9,9,116,104,105,115,46,80,111,115,
1711 116,40,91,34,101,105,110,115,34,44,32,34,32,34,44,32,
1712 34,34,43,116,104,105,115,46,112,48,93,41,59,10,9,9,
1713 9,98,114,101,97,107,59,10,9,9,99,97,115,101,32,51,
1714 55,58,9,47,42,32,108,101,102,116,32,42,47,10,9,9,
1715 9,105,102,40,116,104,105,115,46,110,111,101,100,105,116,115,
1716 41,32,123,10,9,9,9,9,114,101,116,117,114,110,59,10,
1717 9,9,9,125,10,9,9,9,105,102,40,100,101,102,101,114,
1718 114,101,100,41,32,123,10,9,9,9,9,98,114,101,97,107,
1719 59,10,9,9,9,125,10,9,9,9,116,104,105,115,46,112,
1720 111,115,116,40,91,34,101,117,110,100,111,34,93,41,59,10,
2467 9,9,9,98,114,101,97,107,59,10,9,9,99,97,115,101,1721 9,9,9,98,114,101,97,107,59,10,9,9,99,97,115,101,
2468 32,57,58,9,9,47,42,32,116,97,98,32,42,47,10,9,1722 32,51,56,58,9,47,42,32,117,112,32,42,47,10,9,9,
1723 9,105,102,40,100,101,102,101,114,114,101,100,41,32,123,10,
1724 9,9,9,9,98,114,101,97,107,59,10,9,9,9,125,10,
1725 9,9,9,118,97,114,32,110,32,61,32,77,97,116,104,46,
1726 102,108,111,111,114,40,116,104,105,115,46,102,114,108,105,110,
1727 101,115,47,52,41,59,10,9,9,9,105,102,40,110,32,60,
1728 32,49,41,32,123,10,9,9,9,9,110,32,61,32,49,59,
1729 10,9,9,9,125,10,9,9,9,105,102,40,116,104,105,115,
1730 46,115,99,114,111,108,108,117,112,40,110,41,41,123,10,9,
1731 9,9,9,116,104,105,115,46,117,110,116,105,99,107,40,41,
1732 59,10,9,9,9,9,116,104,105,115,46,114,101,100,114,97,
1733 119,116,101,120,116,40,41,59,10,9,9,9,125,10,9,9,
1734 9,98,114,101,97,107,59,10,9,9,99,97,115,101,32,51,
1735 57,58,9,47,42,32,114,105,103,104,116,32,42,47,10,9,
2469 9,9,105,102,40,116,104,105,115,46,110,111,101,100,105,116,1736 9,9,105,102,40,116,104,105,115,46,110,111,101,100,105,116,
2470 115,41,32,123,10,9,9,9,9,114,101,116,117,114,110,59,1737 115,41,32,123,10,9,9,9,9,114,101,116,117,114,110,59,
2471 10,9,9,9,125,10,9,9,9,105,102,40,100,101,102,101,1738 10,9,9,9,125,10,9,9,9,105,102,40,100,101,102,101,
2472 114,114,101,100,41,10,9,9,9,9,98,114,101,97,107,59,1739 114,114,101,100,41,32,123,10,9,9,9,9,98,114,101,97,
2473 10,9,9,9,105,102,40,116,104,105,115,46,112,48,32,33,1740 107,59,10,9,9,9,125,10,9,9,9,116,104,105,115,46,
2474 61,32,116,104,105,115,46,112,49,41,123,10,9,9,9,9,1741 112,111,115,116,40,91,34,101,114,101,100,111,34,93,41,59,
2475 116,104,105,115,46,80,111,115,116,40,91,34,101,100,101,108,
2476 34,44,32,34,34,43,116,104,105,115,46,112,48,44,32,34,
2477 34,43,116,104,105,115,46,112,49,93,41,59,10,9,9,9,
2478 125,10,9,9,9,116,104,105,115,46,80,111,115,116,40,91,
2479 34,101,105,110,115,34,44,32,34,92,116,34,44,32,34,34,
2480 43,116,104,105,115,46,112,48,93,41,59,10,9,9,9,98,
2481 114,101,97,107,59,10,9,9,99,97,115,101,32,51,50,58,
2482 9,47,42,32,115,112,97,99,101,32,42,47,10,9,9,9,
2483 105,102,40,100,101,102,101,114,114,101,100,41,10,9,9,9,
2484 9,98,114,101,97,107,59,10,9,9,9,116,104,105,115,46,
2485 80,111,115,116,40,91,34,101,105,110,115,34,44,32,34,32,
2486 34,44,32,34,34,43,116,104,105,115,46,112,48,93,41,59,
2487 10,9,9,9,98,114,101,97,107,59,10,9,9,99,97,115,
2488 101,32,51,55,58,9,47,42,32,108,101,102,116,32,42,47,
2489 10,9,9,9,105,102,40,116,104,105,115,46,110,111,101,100,
2490 105,116,115,41,32,123,10,9,9,9,9,114,101,116,117,114,
2491 110,59,10,9,9,9,125,10,9,9,9,116,104,105,115,46,
2492 112,111,115,116,40,91,34,101,117,110,100,111,34,93,41,59,
2493 10,9,9,9,98,114,101,97,107,59,10,9,9,99,97,115,
2494 101,32,51,56,58,9,47,42,32,117,112,32,42,47,10,9,
2495 9,9,105,102,40,100,101,102,101,114,114,101,100,41,10,9,
2496 9,9,9,98,114,101,97,107,59,10,9,9,9,118,97,114,
2497 32,110,32,61,32,77,97,116,104,46,102,108,111,111,114,40,
2498 116,104,105,115,46,102,114,108,105,110,101,115,47,52,41,59,
2499 10,9,9,9,105,102,40,110,32,60,32,49,41,32,123,10,
2500 9,9,9,9,110,32,61,32,49,59,10,9,9,9,125,10,
2501 9,9,9,105,102,40,116,104,105,115,46,115,99,114,111,108,
2502 108,117,112,40,110,41,41,123,10,9,9,9,9,116,104,105,
2503 115,46,117,110,116,105,99,107,40,41,59,10,9,9,9,9,
2504 116,104,105,115,46,114,101,100,114,97,119,116,101,120,116,40,
2505 41,59,10,9,9,9,125,10,9,9,9,98,114,101,97,107,
2506 59,10,9,9,99,97,115,101,32,51,57,58,9,47,42,32,
2507 114,105,103,104,116,32,42,47,10,9,9,9,105,102,40,116,
2508 104,105,115,46,110,111,101,100,105,116,115,41,32,123,10,9,
2509 9,9,9,114,101,116,117,114,110,59,10,9,9,9,125,10,
2510 9,9,9,105,102,40,100,101,102,101,114,114,101,100,41,10,
2511 9,9,9,9,98,114,101,97,107,59,10,9,9,9,116,104,
2512 105,115,46,112,111,115,116,40,91,34,101,114,101,100,111,34,
2513 93,41,59,10,9,9,9,98,114,101,97,107,59,10,9,9,
2514 99,97,115,101,32,52,48,58,9,47,42,32,100,111,119,110,
2515 32,42,47,10,9,9,9,105,102,40,100,101,102,101,114,114,
2516 101,100,41,10,9,9,9,9,98,114,101,97,107,59,10,9,
2517 9,9,116,104,105,115,46,117,110,116,105,99,107,40,41,59,
2518 10,9,9,9,118,97,114,32,110,32,61,32,77,97,116,104,
2519 46,102,108,111,111,114,40,116,104,105,115,46,102,114,108,105,
2520 110,101,115,47,52,41,59,10,9,9,9,105,102,40,110,32,
2521 60,32,49,41,32,123,10,9,9,9,9,110,32,61,32,49,
2522 59,10,9,9,9,125,10,9,9,9,105,102,40,116,104,105,
2523 115,46,115,99,114,111,108,108,100,111,119,110,40,110,41,41,
2524 123,10,9,9,9,9,116,104,105,115,46,117,110,116,105,99,
2525 107,40,41,59,10,9,9,9,9,116,104,105,115,46,114,101,
2526 100,114,97,119,116,101,120,116,40,41,59,10,9,9,9,125,
2527 10,9,9,9,98,114,101,97,107,59,10,9,9,99,97,115,1742 10,9,9,9,98,114,101,97,107,59,10,9,9,99,97,115,
2528 101,32,52,54,58,9,47,42,32,100,101,108,101,116,101,32,1743 101,32,52,48,58,9,47,42,32,100,111,119,110,32,42,47,
2529 42,47,10,9,9,9,105,102,40,100,101,102,101,114,114,101,1744 10,9,9,9,105,102,40,100,101,102,101,114,114,101,100,41,
2530 100,41,10,9,9,9,9,98,114,101,97,107,59,10,9,9,1745 32,123,10,9,9,9,9,98,114,101,97,107,59,10,9,9,
2531 9,116,104,105,115,46,112,111,115,116,40,91,34,105,110,116,1746 9,125,10,9,9,9,116,104,105,115,46,117,110,116,105,99,
2532 114,34,44,32,34,100,101,108,34,93,41,59,10,9,9,9,1747 107,40,41,59,10,9,9,9,118,97,114,32,110,32,61,32,
2533 98,114,101,97,107,59,10,9,9,99,97,115,101,32,49,49,1748 77,97,116,104,46,102,108,111,111,114,40,116,104,105,115,46,
2534 50,58,9,47,42,32,70,49,32,42,47,10,9,9,99,97,1749 102,114,108,105,110,101,115,47,52,41,59,10,9,9,9,105,
2535 115,101,32,49,49,51,58,9,47,42,32,70,50,32,42,47,1750 102,40,110,32,60,32,49,41,32,123,10,9,9,9,9,110,
2536 10,9,9,99,97,115,101,32,49,49,52,58,9,47,42,32,1751 32,61,32,49,59,10,9,9,9,125,10,9,9,9,105,102,
2537 70,51,32,42,47,10,9,9,99,97,115,101,32,49,49,53,1752 40,116,104,105,115,46,115,99,114,111,108,108,100,111,119,110,
2538 58,9,47,42,32,70,52,32,42,47,10,9,9,9,105,102,1753 40,110,41,41,123,10,9,9,9,9,116,104,105,115,46,117,
2539 40,100,101,102,101,114,114,101,100,41,10,9,9,9,9,98,1754 110,116,105,99,107,40,41,59,10,9,9,9,9,116,104,105,
2540 114,101,97,107,59,10,9,9,9,118,97,114,32,109,101,118,1755 115,46,114,101,100,114,97,119,116,101,120,116,40,41,59,10,
2541 32,61,32,123,10,9,9,9,9,102,97,107,101,120,58,32,1756 9,9,9,125,10,9,9,9,98,114,101,97,107,59,10,9,
2542 116,104,105,115,46,108,97,115,116,120,44,10,9,9,9,9,1757 9,99,97,115,101,32,52,54,58,9,47,42,32,100,101,108,
2543 102,97,107,101,121,58,32,116,104,105,115,46,108,97,115,116,1758 101,116,101,32,42,47,10,9,9,9,105,102,40,100,101,102,
2544 121,44,10,9,9,9,9,119,104,105,99,104,58,32,107,101,1759 101,114,114,101,100,41,32,123,10,9,9,9,9,98,114,101,
2545 121,45,49,49,50,43,49,44,10,9,9,9,125,59,10,9,1760 97,107,59,10,9,9,9,125,10,9,9,9,116,104,105,115,
2546 9,9,109,101,118,46,112,114,101,118,101,110,116,68,101,102,1761 46,112,111,115,116,40,91,34,105,110,116,114,34,44,32,34,
2547 97,117,108,116,32,61,32,102,117,110,99,116,105,111,110,40,1762 100,101,108,34,93,41,59,10,9,9,9,98,114,101,97,107,
2548 41,123,125,10,9,9,9,116,104,105,115,46,111,110,109,111,1763 59,10,9,9,99,97,115,101,32,49,49,50,58,9,47,42,
2549 117,115,101,100,111,119,110,40,109,101,118,41,59,10,9,9,1764 32,70,49,32,42,47,10,9,9,99,97,115,101,32,49,49,
2550 9,98,114,101,97,107,59,10,9,9,99,97,115,101,32,49,1765 51,58,9,47,42,32,70,50,32,42,47,10,9,9,99,97,
2551 50,51,58,9,47,42,32,70,49,50,32,42,47,10,9,9,1766 115,101,32,49,49,52,58,9,47,42,32,70,51,32,42,47,
2552 9,116,100,101,98,117,103,32,61,32,33,116,100,101,98,117,1767 10,9,9,99,97,115,101,32,49,49,53,58,9,47,42,32,
2553 103,59,10,9,9,9,98,114,101,97,107,59,10,9,9,100,1768 70,52,32,42,47,10,9,9,9,105,102,40,100,101,102,101,
2554 101,102,97,117,108,116,58,10,9,9,9,114,101,116,117,114,1769 114,114,101,100,41,32,123,10,9,9,9,9,98,114,101,97,
2555 110,32,116,114,117,101,59,10,9,9,125,10,9,9,114,101,1770 107,59,10,9,9,9,125,10,9,9,9,118,97,114,32,109,
2556 116,117,114,110,32,102,97,108,115,101,59,10,9,125,99,97,
2557 116,99,104,40,101,120,41,123,10,9,9,99,111,110,115,111,
2558 108,101,46,108,111,103,40,34,107,101,121,100,111,119,110,58,
2559 32,34,32,43,32,101,120,41,59,10,9,125,10,125,10,10,
2560 102,117,110,99,116,105,111,110,32,116,107,101,121,117,112,40,
2561 101,44,32,100,101,102,101,114,114,101,100,41,32,123,10,9,
2562 116,114,121,123,10,9,9,118,97,114,32,107,101,121,32,61,
2563 32,101,46,107,101,121,67,111,100,101,59,10,9,9,105,102,
2564 40,33,101,46,107,101,121,67,111,100,101,41,10,9,9,9,
2565 107,101,121,32,61,32,101,46,119,104,105,99,104,59,10,9,
2566 9,118,97,114,32,114,117,110,101,32,61,32,83,116,114,105,
2567 110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,
2568 101,46,107,101,121,67,111,100,101,41,59,10,9,9,118,97,
2569 114,32,105,115,100,101,97,100,107,101,121,32,61,32,101,32,
2570 38,38,32,101,46,111,114,105,103,105,110,97,108,69,118,101,
2571 110,116,32,38,38,32,101,46,111,114,105,103,105,110,97,108,
2572 69,118,101,110,116,46,107,101,121,73,100,101,110,116,105,102,
2573 105,101,114,32,61,61,32,34,85,110,105,100,101,110,116,105,
2574 102,105,101,100,34,59,10,9,9,105,102,40,116,100,101,98,
2575 117,103,41,32,123,10,9,9,9,118,97,114,32,100,115,32,
2576 61,32,40,105,115,100,101,97,100,107,101,121,32,63,32,34,
2577 32,100,101,97,100,34,32,58,32,34,34,41,59,10,9,9,
2578 9,99,111,110,115,111,108,101,46,108,111,103,40,34,107,101,
2579 121,117,112,32,119,104,105,99,104,32,34,32,43,32,101,46,
2580 119,104,105,99,104,32,43,32,34,32,107,101,121,32,34,32,
2581 43,32,101,46,107,101,121,67,111,100,101,32,43,10,9,9,
2582 9,9,34,32,39,34,32,43,32,114,117,110,101,32,43,32,
2583 34,39,34,32,43,32,100,115,32,43,10,9,9,9,9,34,
2584 32,34,32,43,32,101,46,99,116,114,108,75,101,121,32,43,
2585 32,34,32,34,32,43,32,101,46,109,101,116,97,75,101,121,
2586 44,32,101,41,59,10,9,9,125,10,9,9,115,119,105,116,
2587 99,104,40,107,101,121,41,123,10,9,9,99,97,115,101,32,
2588 49,49,50,58,9,47,42,32,70,49,32,42,47,10,9,9,
2589 99,97,115,101,32,49,49,51,58,9,47,42,32,70,50,32,
2590 42,47,10,9,9,99,97,115,101,32,49,49,52,58,9,47,
2591 42,32,70,51,32,42,47,10,9,9,99,97,115,101,32,49,
2592 49,53,58,9,47,42,32,70,52,32,42,47,10,9,9,9,
2593 105,102,40,100,101,102,101,114,114,101,100,41,10,9,9,9,
2594 9,98,114,101,97,107,59,10,9,9,9,118,97,114,32,109,
2595 101,118,32,61,32,123,10,9,9,9,9,102,97,107,101,120,1771 101,118,32,61,32,123,10,9,9,9,9,102,97,107,101,120,
2596 58,32,116,104,105,115,46,108,97,115,116,120,44,10,9,9,1772 58,32,116,104,105,115,46,108,97,115,116,120,44,10,9,9,
2597 9,9,102,97,107,101,121,58,32,116,104,105,115,46,108,97,1773 9,9,102,97,107,101,121,58,32,116,104,105,115,46,108,97,
@@ -2599,30311 +1775,3608 @@ var Files = map[string][]byte{ · 1 unmodified line
2599 107,101,121,45,49,49,50,43,49,44,10,9,9,9,125,59,1775 107,101,121,45,49,49,50,43,49,44,10,9,9,9,125,59,
2600 10,9,9,9,109,101,118,46,112,114,101,118,101,110,116,68,1776 10,9,9,9,109,101,118,46,112,114,101,118,101,110,116,68,
2601 101,102,97,117,108,116,32,61,32,102,117,110,99,116,105,111,1777 101,102,97,117,108,116,32,61,32,102,117,110,99,116,105,111,
2602 110,40,41,123,125,10,9,9,9,116,104,105,115,46,111,110,1778 110,40,41,123,125,10,9,9,9,116,104,105,115,46,99,46,
2603 109,111,117,115,101,117,112,40,109,101,118,41,59,10,9,9,1779 111,110,109,111,117,115,101,100,111,119,110,40,109,101,118,41,
2604 9,98,114,101,97,107,59,10,9,9,99,97,115,101,32,49,1780 59,10,9,9,9,98,114,101,97,107,59,10,9,9,99,97,
2605 56,58,32,47,42,32,65,108,116,32,42,47,10,9,9,9,1781 115,101,32,49,50,51,58,9,47,42,32,70,49,50,32,42,
2606 116,104,105,115,46,99,111,109,112,111,115,105,110,103,32,61,1782 47,10,9,9,9,116,100,101,98,117,103,32,61,32,33,116,
2607 32,116,114,117,101,59,10,9,9,9,114,101,116,117,114,110,1783 100,101,98,117,103,59,10,9,9,9,98,114,101,97,107,59,
2608 32,116,114,117,101,59,10,9,9,100,101,102,97,117,108,116,1784 10,9,9,100,101,102,97,117,108,116,58,10,9,9,9,114,
2609 58,10,9,9,9,114,101,116,117,114,110,32,116,114,117,101,1785 101,116,117,114,110,32,116,114,117,101,59,10,9,9,125,10,
2610 59,10,9,9,125,10,9,9,114,101,116,117,114,110,32,102,1786 9,9,114,101,116,117,114,110,32,102,97,108,115,101,59,10,
2611 97,108,115,101,59,10,9,125,99,97,116,99,104,40,101,120,1787 9,125,59,10,10,9,116,104,105,115,46,116,108,111,99,107,
2612 41,123,10,9,9,99,111,110,115,111,108,101,46,108,111,103,1788 110,107,101,121,100,111,119,110,32,61,32,102,117,110,99,116,
2613 40,34,107,101,121,100,111,119,110,58,32,34,32,43,32,101,1789 105,111,110,40,101,41,32,123,10,9,9,100,111,110,116,98,
2614 120,41,59,10,9,125,10,125,10,10,102,117,110,99,116,105,1790 117,98,98,108,101,40,101,41,59,10,9,9,105,102,40,116,
2615 111,110,32,116,101,118,107,101,121,40,101,44,32,100,101,102,1791 104,105,115,46,105,115,108,111,99,107,101,100,41,32,123,10,
2616 101,114,114,101,100,41,32,123,10,9,116,114,121,32,123,10,1792 9,9,9,114,101,116,117,114,110,32,116,104,105,115,46,116,
2617 9,9,47,47,32,99,111,110,115,111,108,101,46,108,111,103,1793 107,101,121,100,111,119,110,40,101,41,59,10,9,9,125,10,
2618 40,34,107,101,121,34,41,59,10,9,9,118,97,114,32,107,1794 9,9,105,102,40,33,116,104,105,115,46,108,111,99,107,105,
2619 101,121,32,61,32,101,46,107,101,121,67,111,100,101,59,10,1795 110,103,41,32,123,10,9,9,9,116,104,105,115,46,108,111,
2620 9,9,105,102,40,33,101,46,107,101,121,67,111,100,101,41,1796 99,107,105,110,103,32,61,32,116,114,117,101,59,10,9,9,
2621 10,9,9,9,107,101,121,32,61,32,101,46,119,104,105,99,1797 9,116,104,105,115,46,112,111,115,116,40,91,34,104,111,108,
2622 104,59,10,9,9,118,97,114,32,114,117,110,101,32,61,32,1798 100,34,93,41,59,10,9,9,9,99,111,110,115,111,108,101,
2623 83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,1799 46,108,111,103,40,34,104,111,108,100,105,110,103,46,46,46,
2624 111,100,101,40,101,46,107,101,121,67,111,100,101,41,59,10,1800 34,41,59,10,9,9,125,10,9,9,118,97,114,32,115,101,
2625 9,9,105,102,40,116,100,101,98,117,103,41,99,111,110,115,1801 108,102,32,61,32,116,104,105,115,59,10,9,9,118,97,114,
2626 111,108,101,46,108,111,103,40,34,107,101,121,58,32,119,104,1802 32,120,101,32,61,32,106,81,117,101,114,121,46,69,118,101,
2627 105,99,104,32,34,32,43,32,101,46,119,104,105,99,104,32,1803 110,116,40,34,107,101,121,100,111,119,110,34,41,59,10,9,
2628 43,32,34,32,107,101,121,32,34,32,43,32,101,46,107,101,1804 9,120,101,46,119,104,105,99,104,32,61,32,101,46,119,104,
2629 121,67,111,100,101,32,43,10,9,9,9,34,32,39,34,32,1805 105,99,104,59,10,9,9,120,101,46,107,101,121,67,111,100,
2630 43,32,114,117,110,101,32,43,32,34,39,34,41,59,10,9,1806 101,32,61,32,101,46,107,101,121,67,111,100,101,59,10,9,
2631 9,115,119,105,116,99,104,40,107,101,121,41,123,10,9,9,1807 9,120,101,46,99,116,114,108,75,101,121,32,61,32,101,46,
2632 99,97,115,101,32,57,58,10,9,9,9,114,117,110,101,32,1808 99,116,114,108,75,101,121,59,10,9,9,120,101,46,109,101,
2633 61,32,34,92,116,34,59,10,9,9,9,98,114,101,97,107,1809 116,97,75,101,121,32,61,32,101,46,109,101,116,97,75,101,
2634 59,10,9,9,99,97,115,101,32,49,51,58,10,9,9,9,1810 121,59,10,9,9,120,101,46,112,114,101,118,101,110,116,68,
2635 114,117,110,101,32,61,32,34,92,110,34,59,10,9,9,9,1811 101,102,97,117,108,116,32,61,32,102,117,110,99,116,105,111,
2636 98,114,101,97,107,59,10,9,9,125,10,9,9,115,119,105,1812 110,40,41,123,125,59,10,9,9,116,104,105,115,46,119,104,
2637 116,99,104,40,114,117,110,101,41,123,10,9,9,99,97,115,1813 101,110,108,111,99,107,101,100,46,112,117,115,104,40,102,117,
1814 110,99,116,105,111,110,40,41,32,123,10,9,9,9,99,111,
1815 110,115,111,108,101,46,108,111,103,40,34,104,101,108,100,32,
1816 107,101,121,100,111,119,110,34,41,59,10,9,9,9,36,40,
1817 115,101,108,102,46,99,41,46,116,114,105,103,103,101,114,40,
1818 120,101,41,59,10,9,9,9,114,101,116,117,114,110,32,102,
1819 97,108,115,101,59,10,9,9,125,41,59,10,9,9,114,101,
1820 116,117,114,110,32,116,104,105,115,46,116,107,101,121,100,111,
1821 119,110,40,101,44,32,116,114,117,101,41,59,10,9,125,59,
1822 10,10,9,116,104,105,115,46,116,107,101,121,112,114,101,115,
1823 115,32,61,32,102,117,110,99,116,105,111,110,40,101,44,32,
1824 100,101,102,101,114,114,101,100,41,32,123,10,9,9,118,97,
1825 114,32,107,101,121,32,61,32,101,46,107,101,121,67,111,100,
1826 101,59,10,9,9,105,102,40,33,101,46,107,101,121,67,111,
1827 100,101,41,10,9,9,9,107,101,121,32,61,32,101,46,119,
1828 104,105,99,104,59,10,9,9,118,97,114,32,114,117,110,101,
1829 32,61,32,83,116,114,105,110,103,46,102,114,111,109,67,104,
1830 97,114,67,111,100,101,40,101,46,107,101,121,67,111,100,101,
1831 41,59,10,9,9,105,102,40,116,100,101,98,117,103,41,32,
1832 123,10,9,9,9,99,111,110,115,111,108,101,46,108,111,103,
1833 40,34,107,101,121,58,32,119,104,105,99,104,32,34,32,43,
1834 32,101,46,119,104,105,99,104,32,43,32,34,32,107,101,121,
1835 32,34,32,43,32,101,46,107,101,121,67,111,100,101,32,43,
1836 10,9,9,9,9,34,32,39,34,32,43,32,114,117,110,101,
1837 32,43,32,34,39,34,41,59,10,9,9,125,10,9,9,115,
1838 119,105,116,99,104,40,107,101,121,41,32,123,10,9,9,99,
1839 97,115,101,32,57,58,10,9,9,9,114,117,110,101,32,61,
1840 32,34,92,116,34,59,10,9,9,9,98,114,101,97,107,59,
1841 10,9,9,99,97,115,101,32,49,51,58,10,9,9,9,114,
1842 117,110,101,32,61,32,34,92,110,34,59,10,9,9,9,98,
1843 114,101,97,107,59,10,9,9,125,10,9,9,115,119,105,116,
1844 99,104,40,114,117,110,101,41,32,123,10,9,9,99,97,115,
2638 101,32,39,99,39,58,10,9,9,99,97,115,101,32,39,67,1845 101,32,39,99,39,58,10,9,9,99,97,115,101,32,39,67,
2639 39,58,10,9,9,9,105,102,40,100,101,102,101,114,114,101,1846 39,58,10,9,9,9,105,102,40,100,101,102,101,114,114,101,
2640 100,41,10,9,9,9,9,98,114,101,97,107,59,10,9,9,1847 100,41,10,9,9,9,9,98,114,101,97,107,59,10,9,9,
2641 9,105,102,40,101,46,99,116,114,108,75,101,121,32,124,124,1848 9,105,102,40,101,46,99,116,114,108,75,101,121,32,124,124,
2642 32,101,46,109,101,116,97,75,101,121,41,123,10,9,9,9,1849 32,101,46,109,101,116,97,75,101,121,41,32,123,10,9,9,
1850 9,9,101,46,112,114,101,118,101,110,116,68,101,102,97,117,
1851 108,116,40,41,59,10,9,9,9,9,116,104,105,115,46,112,
1852 111,115,116,40,91,34,101,99,111,112,121,34,44,32,34,34,
1853 43,116,104,105,115,46,112,48,44,32,34,34,43,116,104,105,
1854 115,46,112,49,93,41,59,10,9,9,9,9,114,101,116,117,
1855 114,110,32,102,97,108,115,101,59,10,9,9,9,125,10,9,
1856 9,9,98,114,101,97,107,59,10,9,9,99,97,115,101,32,
1857 39,118,39,58,10,9,9,99,97,115,101,32,39,86,39,58,
1858 10,9,9,9,105,102,40,100,101,102,101,114,114,101,100,32,
1859 124,124,32,116,104,105,115,46,110,111,101,100,105,116,115,41,
1860 32,123,10,9,9,9,9,98,114,101,97,107,59,10,9,9,
1861 9,125,10,9,9,9,105,102,40,101,46,99,116,114,108,75,
1862 101,121,32,124,124,32,101,46,109,101,116,97,75,101,121,41,
1863 32,123,10,9,9,9,9,101,46,112,114,101,118,101,110,116,
1864 68,101,102,97,117,108,116,40,41,59,10,9,9,9,9,105,
1865 102,40,116,104,105,115,46,112,48,32,33,61,32,116,104,105,
1866 115,46,112,49,41,123,10,9,9,9,9,9,116,104,105,115,
1867 46,80,111,115,116,40,91,34,101,100,101,108,34,44,32,34,
1868 34,43,116,104,105,115,46,112,48,44,32,34,34,43,116,104,
1869 105,115,46,112,49,93,41,59,10,9,9,9,9,125,10,9,
1870 9,9,9,116,104,105,115,46,112,111,115,116,40,91,34,101,
1871 112,97,115,116,101,34,44,32,34,34,43,116,104,105,115,46,
1872 112,48,44,32,34,34,43,116,104,105,115,46,112,49,93,41,
1873 59,10,9,9,9,9,114,101,116,117,114,110,32,102,97,108,
1874 115,101,59,10,9,9,9,125,10,9,9,9,98,114,101,97,
1875 107,59,10,9,9,99,97,115,101,32,39,120,39,58,10,9,
1876 9,99,97,115,101,32,39,88,39,58,10,9,9,9,105,102,
1877 40,100,101,102,101,114,114,101,100,32,124,124,32,116,104,105,
1878 115,46,110,111,101,100,105,116,115,41,32,123,10,9,9,9,
1879 9,98,114,101,97,107,59,10,9,9,9,125,10,9,9,9,
1880 105,102,40,101,46,99,116,114,108,75,101,121,32,124,124,32,
1881 101,46,109,101,116,97,75,101,121,41,32,123,10,9,9,9,
2643 9,101,46,112,114,101,118,101,110,116,68,101,102,97,117,108,1882 9,101,46,112,114,101,118,101,110,116,68,101,102,97,117,108,
2644 116,40,41,59,10,9,9,9,9,116,104,105,115,46,112,111,1883 116,40,41,59,10,9,9,9,9,116,104,105,115,46,80,111,
2645 115,116,40,91,34,101,99,111,112,121,34,44,32,34,34,43,1884 115,116,40,91,34,101,99,117,116,34,44,32,34,34,43,116,
2646 116,104,105,115,46,112,48,44,32,34,34,43,116,104,105,115,
2647 46,112,49,93,41,59,10,9,9,9,9,114,101,116,117,114,
2648 110,32,102,97,108,115,101,59,10,9,9,9,125,10,9,9,
2649 9,98,114,101,97,107,59,10,9,9,99,97,115,101,32,39,
2650 118,39,58,10,9,9,99,97,115,101,32,39,86,39,58,10,
2651 9,9,9,105,102,40,100,101,102,101,114,114,101,100,41,10,
2652 9,9,9,9,98,114,101,97,107,59,10,9,9,9,105,102,
2653 40,116,104,105,115,46,110,111,101,100,105,116,115,41,32,123,
2654 10,9,9,9,9,98,114,101,97,107,59,10,9,9,9,125,
2655 10,9,9,9,105,102,40,101,46,99,116,114,108,75,101,121,
2656 32,124,124,32,101,46,109,101,116,97,75,101,121,41,123,10,
2657 9,9,9,9,101,46,112,114,101,118,101,110,116,68,101,102,
2658 97,117,108,116,40,41,59,10,9,9,9,9,105,102,40,116,
2659 104,105,115,46,112,48,32,33,61,32,116,104,105,115,46,112,
2660 49,41,123,10,9,9,9,9,9,116,104,105,115,46,80,111,
2661 115,116,40,91,34,101,100,101,108,34,44,32,34,34,43,116,
2662 104,105,115,46,112,48,44,32,34,34,43,116,104,105,115,46,1885 104,105,115,46,112,48,44,32,34,34,43,116,104,105,115,46,
2663 112,49,93,41,59,10,9,9,9,9,125,10,9,9,9,9,1886 112,49,93,41,59,10,9,9,9,9,114,101,116,117,114,110,
2664 116,104,105,115,46,112,111,115,116,40,91,34,101,112,97,115,1887 32,102,97,108,115,101,59,10,9,9,9,125,10,9,9,9,
2665 116,101,34,44,32,34,34,43,116,104,105,115,46,112,48,44,1888 98,114,101,97,107,59,10,9,9,125,10,9,9,105,102,40,
1889 100,101,102,101,114,114,101,100,32,124,124,32,101,46,109,101,
1890 116,97,75,101,121,32,124,124,32,101,46,99,116,114,108,75,
1891 101,121,32,124,124,32,116,104,105,115,46,110,111,101,100,105,
1892 116,115,41,32,123,10,9,9,9,114,101,116,117,114,110,59,
1893 10,9,9,125,10,9,9,105,102,40,116,104,105,115,46,112,
1894 48,32,33,61,32,116,104,105,115,46,112,49,41,123,10,9,
1895 9,9,116,104,105,115,46,80,111,115,116,40,91,34,101,100,
1896 101,108,34,44,32,34,34,43,116,104,105,115,46,112,48,44,
2666 32,34,34,43,116,104,105,115,46,112,49,93,41,59,10,9,1897 32,34,34,43,116,104,105,115,46,112,49,93,41,59,10,9,
2667 9,9,9,114,101,116,117,114,110,32,102,97,108,115,101,59,1898 9,125,10,9,9,105,102,40,116,104,105,115,46,99,111,109,
2668 10,9,9,9,125,10,9,9,9,98,114,101,97,107,59,10,1899 112,111,115,105,110,103,41,32,123,10,9,9,9,105,102,40,
2669 9,9,99,97,115,101,32,39,120,39,58,10,9,9,99,97,1900 33,116,104,105,115,46,108,97,116,105,110,41,32,123,10,9,
2670 115,101,32,39,88,39,58,10,9,9,9,105,102,40,100,101,1901 9,9,9,116,104,105,115,46,108,97,116,105,110,32,61,32,
2671 102,101,114,114,101,100,41,10,9,9,9,9,98,114,101,97,1902 34,34,32,43,32,114,117,110,101,59,10,9,9,9,125,32,
2672 107,59,10,9,9,9,105,102,40,116,104,105,115,46,110,111,1903 101,108,115,101,32,123,10,9,9,9,9,116,104,105,115,46,
2673 101,100,105,116,115,41,32,123,10,9,9,9,9,98,114,101,1904 108,97,116,105,110,32,43,61,32,114,117,110,101,59,10,9,
2674 97,107,59,10,9,9,9,125,10,9,9,9,105,102,40,101,1905 9,9,125,10,9,9,9,105,102,40,33,107,109,97,112,46,
2675 46,99,116,114,108,75,101,121,32,124,124,32,101,46,109,101,1906 105,115,108,97,116,105,110,40,116,104,105,115,46,108,97,116,
2676 116,97,75,101,121,41,123,10,9,9,9,9,101,46,112,114,1907 105,110,41,41,32,123,10,9,9,9,9,116,104,105,115,46,
2677 101,118,101,110,116,68,101,102,97,117,108,116,40,41,59,10,1908 99,111,109,112,111,115,105,110,103,32,61,32,102,97,108,115,
2678 9,9,9,9,116,104,105,115,46,80,111,115,116,40,91,34,1909 101,59,10,9,9,9,9,114,117,110,101,32,61,32,116,104,
2679 101,99,117,116,34,44,32,34,34,43,116,104,105,115,46,112,1910 105,115,46,108,97,116,105,110,59,10,9,9,9,9,116,104,
2680 48,44,32,34,34,43,116,104,105,115,46,112,49,93,41,59,1911 105,115,46,108,97,116,105,110,32,61,32,34,34,59,10,9,
2681 10,9,9,9,9,114,101,116,117,114,110,32,102,97,108,115,1912 9,9,125,32,101,108,115,101,32,123,10,9,9,9,9,118,
2682 101,59,10,9,9,9,125,10,9,9,9,98,114,101,97,107,1913 97,114,32,114,32,61,32,107,109,97,112,46,108,97,116,105,
2683 59,10,9,9,125,10,9,9,105,102,40,101,46,109,101,116,1914 110,40,116,104,105,115,46,108,97,116,105,110,41,59,10,9,
2684 97,75,101,121,32,124,124,32,101,46,99,116,114,108,75,101,1915 9,9,9,105,102,32,40,33,114,41,32,123,10,9,9,9,
2685 121,32,124,124,32,116,104,105,115,46,110,111,101,100,105,116,1916 9,9,114,101,116,117,114,110,59,10,9,9,9,9,125,10,
2686 115,41,10,9,9,9,114,101,116,117,114,110,59,10,9,9,
2687 105,102,40,100,101,102,101,114,114,101,100,41,10,9,9,9,
2688 114,101,116,117,114,110,59,10,9,9,105,102,40,116,104,105,
2689 115,46,112,48,32,33,61,32,116,104,105,115,46,112,49,41,
2690 123,10,9,9,9,116,104,105,115,46,80,111,115,116,40,91,
2691 34,101,100,101,108,34,44,32,34,34,43,116,104,105,115,46,
2692 112,48,44,32,34,34,43,116,104,105,115,46,112,49,93,41,
2693 59,10,9,9,125,10,9,9,105,102,40,116,104,105,115,46,
2694 99,111,109,112,111,115,105,110,103,41,32,123,10,9,9,9,
2695 105,102,40,33,116,104,105,115,46,108,97,116,105,110,41,32,
2696 123,10,9,9,9,9,116,104,105,115,46,108,97,116,105,110,
2697 32,61,32,34,34,32,43,32,114,117,110,101,59,10,9,9,
2698 9,125,32,101,108,115,101,32,123,10,9,9,9,9,116,104,
2699 105,115,46,108,97,116,105,110,32,43,61,32,114,117,110,101,
2700 59,10,9,9,9,125,10,9,9,9,105,102,40,33,107,109,
2701 97,112,46,105,115,108,97,116,105,110,40,116,104,105,115,46,
2702 108,97,116,105,110,41,41,32,123,10,9,9,9,9,116,104,
2703 105,115,46,99,111,109,112,111,115,105,110,103,32,61,32,102,
2704 97,108,115,101,59,10,9,9,9,9,114,117,110,101,32,61,
2705 32,116,104,105,115,46,108,97,116,105,110,59,10,9,9,9,
2706 9,116,104,105,115,46,108,97,116,105,110,32,61,32,34,34,
2707 59,10,9,9,9,125,32,101,108,115,101,32,123,10,9,9,
2708 9,9,118,97,114,32,114,32,61,32,107,109,97,112,46,108,
2709 97,116,105,110,40,116,104,105,115,46,108,97,116,105,110,41,
2710 59,10,9,9,9,9,105,102,32,40,114,41,32,123,10,9,
2711 9,9,9,9,116,104,105,115,46,99,111,109,112,111,115,105,1917 9,9,9,9,116,104,105,115,46,99,111,109,112,111,115,105,
2712 110,103,32,61,32,102,97,108,115,101,59,10,9,9,9,9,1918 110,103,32,61,32,102,97,108,115,101,59,10,9,9,9,9,
2713 9,114,117,110,101,32,61,32,114,59,10,9,9,9,9,9,1919 114,117,110,101,32,61,32,114,59,10,9,9,9,9,116,104,
2714 116,104,105,115,46,108,97,116,105,110,32,61,32,34,34,59,1920 105,115,46,108,97,116,105,110,32,61,32,34,34,59,10,9,
2715 10,9,9,9,9,125,32,101,108,115,101,32,123,10,9,9,1921 9,9,125,10,9,9,125,10,9,9,116,104,105,115,46,80,
2716 9,9,9,114,101,116,117,114,110,59,10,9,9,9,9,125,1922 111,115,116,40,91,34,101,105,110,115,34,44,32,114,117,110,
2717 10,9,9,9,125,10,9,9,125,10,9,9,116,104,105,115,1923 101,44,32,34,34,43,116,104,105,115,46,112,48,93,41,59,
2718 46,80,111,115,116,40,91,34,101,105,110,115,34,44,32,114,1924 10,9,125,59,10,10,9,116,104,105,115,46,116,108,111,99,
2719 117,110,101,44,32,34,34,43,116,104,105,115,46,112,48,93,1925 107,110,107,101,121,112,114,101,115,115,32,61,32,102,117,110,
2720 41,59,10,9,125,99,97,116,99,104,40,101,120,41,123,10,1926 99,116,105,111,110,40,41,32,123,10,9,9,100,111,110,116,
2721 9,9,99,111,110,115,111,108,101,46,108,111,103,40,34,116,1927 98,117,98,98,108,101,40,101,41,59,10,9,9,105,102,40,
2722 101,120,116,58,32,102,105,120,116,97,98,58,32,34,32,43,1928 116,104,105,115,46,105,115,108,111,99,107,101,100,41,32,123,
2723 32,101,120,41,59,10,9,125,10,125,10,10,102,117,110,99,1929 10,9,9,9,114,101,116,117,114,110,32,116,104,105,115,46,
2724 116,105,111,110,32,116,97,112,112,108,121,40,101,118,44,32,1930 116,107,101,121,112,114,101,115,115,40,101,41,59,10,9,9,
2725 102,114,111,109,115,101,114,118,101,114,41,32,123,10,9,105,1931 125,10,9,9,105,102,40,33,116,104,105,115,46,108,111,99,
2726 102,40,33,101,118,32,124,124,32,33,101,118,46,65,114,103,1932 107,105,110,103,41,32,123,10,9,9,9,116,104,105,115,46,
2727 115,32,124,124,32,33,101,118,46,65,114,103,115,91,48,93,1933 108,111,99,107,105,110,103,32,61,32,116,114,117,101,59,10,
2728 41,123,10,9,9,99,111,110,115,111,108,101,46,108,111,103,1934 9,9,9,116,104,105,115,46,112,111,115,116,40,91,34,104,
2729 40,34,97,112,112,108,121,58,32,110,105,108,32,101,118,34,1935 111,108,100,34,93,41,59,10,9,9,9,99,111,110,115,111,
2730 41,59,10,9,9,114,101,116,117,114,110,59,10,9,125,10,1936 108,101,46,108,111,103,40,34,104,111,108,100,105,110,103,46,
2731 9,118,97,114,32,97,114,103,32,61,32,101,118,46,65,114,1937 46,46,34,41,59,10,9,9,125,10,9,9,118,97,114,32,
2732 103,115,10,9,105,102,40,116,100,101,98,117,103,41,99,111,1938 115,101,108,102,32,61,32,116,104,105,115,59,10,9,9,118,
2733 110,115,111,108,101,46,108,111,103,40,116,104,105,115,46,100,1939 97,114,32,120,101,32,61,32,106,81,117,101,114,121,46,69,
2734 105,118,105,100,44,32,34,97,112,112,108,121,34,44,32,101,1940 118,101,110,116,40,34,107,101,121,112,114,101,115,115,34,41,
2735 118,46,65,114,103,115,44,32,34,118,34,44,32,101,118,46,1941 59,10,9,9,120,101,46,119,104,105,99,104,32,61,32,101,
2736 86,101,114,115,44,32,116,104,105,115,46,118,101,114,115,41,1942 46,119,104,105,99,104,59,10,9,9,120,101,46,107,101,121,
2737 59,10,9,115,119,105,116,99,104,40,97,114,103,91,48,93,1943 67,111,100,101,32,61,32,101,46,107,101,121,67,111,100,101,
2738 41,123,10,9,99,97,115,101,32,34,104,101,108,100,34,58,1944 59,10,9,9,120,101,46,99,116,114,108,75,101,121,32,61,
2739 10,9,9,116,104,105,115,46,108,111,99,107,101,100,40,41,1945 32,101,46,99,116,114,108,75,101,121,59,10,9,9,120,101,
2740 59,10,9,9,98,114,101,97,107,59,10,9,99,97,115,101,1946 46,109,101,116,97,75,101,121,32,61,32,101,46,109,101,116,
2741 32,34,114,108,115,101,34,58,10,9,9,105,102,40,116,104,1947 97,75,101,121,59,10,9,9,120,101,46,112,114,101,118,101,
2742 105,115,46,115,101,108,101,99,116,105,110,103,41,32,123,10,1948 110,116,68,101,102,97,117,108,116,32,61,32,102,117,110,99,
2743 9,9,9,116,104,105,115,46,109,117,115,116,117,110,108,111,1949 116,105,111,110,40,41,123,125,59,10,9,9,116,104,105,115,
2744 99,107,32,61,32,116,114,117,101,59,10,9,9,9,98,114,1950 46,119,104,101,110,108,111,99,107,101,100,46,112,117,115,104,
2745 101,97,107,59,10,9,9,125,10,9,9,116,104,105,115,46,1951 40,102,117,110,99,116,105,111,110,40,41,32,123,10,9,9,
2746 117,110,108,111,99,107,101,100,40,41,59,10,9,9,98,114,1952 9,99,111,110,115,111,108,101,46,108,111,103,40,34,104,101,
2747 101,97,107,59,10,9,99,97,115,101,32,34,110,111,101,100,1953 108,100,32,107,101,121,112,114,101,115,115,34,41,59,10,9,
2748 105,116,115,34,58,10,9,9,116,104,105,115,46,110,111,101,1954 9,9,36,40,115,101,108,102,46,99,41,46,116,114,105,103,
2749 100,105,116,115,32,61,32,116,114,117,101,59,10,9,9,98,1955 103,101,114,40,120,101,41,59,10,9,9,9,114,101,116,117,
2750 114,101,97,107,59,10,9,99,97,115,101,32,34,101,100,105,1956 114,110,32,102,97,108,115,101,59,10,9,9,125,41,59,10,
2751 116,115,34,58,10,9,9,116,104,105,115,46,110,111,101,100,1957 9,9,114,101,116,117,114,110,32,116,104,105,115,46,116,107,
2752 105,116,115,32,61,32,102,97,108,115,101,59,10,9,9,98,1958 101,121,112,114,101,115,115,40,101,44,32,116,114,117,101,41,
2753 114,101,97,107,59,10,9,99,97,115,101,32,34,99,108,101,1959 59,10,9,125,59,10,10,9,116,104,105,115,46,116,107,101,
2754 97,110,34,58,10,9,9,105,102,40,100,111,99,117,109,101,1960 121,117,112,32,61,32,102,117,110,99,116,105,111,110,40,101,
2755 110,116,46,115,101,116,99,108,101,97,110,41,32,123,10,9,1961 44,32,100,101,102,101,114,114,101,100,41,32,123,10,9,9,
2756 9,9,100,111,99,117,109,101,110,116,46,115,101,116,99,108,1962 118,97,114,32,107,101,121,32,61,32,101,46,107,101,121,67,
2757 101,97,110,40,116,104,105,115,41,59,10,9,9,125,10,9,1963 111,100,101,59,10,9,9,105,102,40,33,101,46,107,101,121,
2758 9,98,114,101,97,107,59,10,9,99,97,115,101,32,34,100,1964 67,111,100,101,41,10,9,9,9,107,101,121,32,61,32,101,
2759 105,114,116,121,34,58,10,9,9,105,102,40,100,111,99,117,1965 46,119,104,105,99,104,59,10,9,9,118,97,114,32,114,117,
2760 109,101,110,116,46,115,101,116,100,105,114,116,121,41,32,123,1966 110,101,32,61,32,83,116,114,105,110,103,46,102,114,111,109,
2761 10,9,9,9,100,111,99,117,109,101,110,116,46,115,101,116,1967 67,104,97,114,67,111,100,101,40,101,46,107,101,121,67,111,
2762 100,105,114,116,121,40,116,104,105,115,41,59,10,9,9,125,1968 100,101,41,59,10,9,9,118,97,114,32,105,115,100,101,97,
2763 10,9,9,98,114,101,97,107,59,10,9,99,97,115,101,32,1969 100,107,101,121,32,61,32,101,32,38,38,32,101,46,111,114,
2764 34,115,104,111,119,34,58,10,9,9,105,102,40,100,111,99,1970 105,103,105,110,97,108,69,118,101,110,116,32,38,38,10,9,
2765 117,109,101,110,116,46,115,104,111,119,99,111,110,116,114,111,1971 9,9,9,101,46,111,114,105,103,105,110,97,108,69,118,101,
2766 108,41,32,123,10,9,9,9,100,111,99,117,109,101,110,116,1972 110,116,46,107,101,121,73,100,101,110,116,105,102,105,101,114,
2767 46,115,104,111,119,99,111,110,116,114,111,108,40,116,104,105,1973 32,61,61,32,34,85,110,105,100,101,110,116,105,102,105,101,
2768 115,41,59,10,9,9,125,10,9,9,98,114,101,97,107,59,1974 100,34,59,10,9,9,105,102,40,116,100,101,98,117,103,41,
2769 10,9,99,97,115,101,32,34,116,97,103,34,58,10,9,9,1975 32,123,10,9,9,9,118,97,114,32,100,115,32,61,32,40,
2770 105,102,40,97,114,103,46,108,101,110,103,116,104,32,60,32,1976 105,115,100,101,97,100,107,101,121,32,63,32,34,32,100,101,
2771 50,41,123,10,9,9,9,99,111,110,115,111,108,101,46,108,1977 97,100,34,32,58,32,34,34,41,59,10,9,9,9,99,111,
2772 111,103,40,116,104,105,115,46,100,105,118,105,100,44,32,34,1978 110,115,111,108,101,46,108,111,103,40,34,107,101,121,117,112,
2773 97,112,112,108,121,58,32,115,104,111,114,116,32,116,97,103,1979 32,119,104,105,99,104,32,34,32,43,32,101,46,119,104,105,
2774 34,41,59,10,9,9,9,98,114,101,97,107,59,10,9,9,1980 99,104,32,43,32,34,32,107,101,121,32,34,32,43,32,101,
2775 125,10,9,9,105,102,40,100,111,99,117,109,101,110,116,46,1981 46,107,101,121,67,111,100,101,32,43,10,9,9,9,9,34,
2776 115,101,116,116,97,103,41,32,123,10,9,9,9,100,111,99,1982 32,39,34,32,43,32,114,117,110,101,32,43,32,34,39,34,
2777 117,109,101,110,116,46,115,101,116,116,97,103,40,116,104,105,1983 32,43,32,100,115,32,43,10,9,9,9,9,34,32,34,32,
2778 115,44,32,97,114,103,91,49,93,41,59,10,9,9,125,10,1984 43,32,101,46,99,116,114,108,75,101,121,32,43,32,34,32,
2779 9,9,98,114,101,97,107,59,10,9,99,97,115,101,32,34,1985 34,32,43,32,101,46,109,101,116,97,75,101,121,44,32,101,
2780 102,111,110,116,34,58,10,9,9,105,102,40,97,114,103,46,1986 41,59,10,9,9,125,10,9,9,115,119,105,116,99,104,40,
2781 108,101,110,103,116,104,32,60,32,50,41,123,10,9,9,9,1987 107,101,121,41,123,10,9,9,99,97,115,101,32,49,49,50,
2782 99,111,110,115,111,108,101,46,108,111,103,40,116,104,105,115,1988 58,9,47,42,32,70,49,32,42,47,10,9,9,99,97,115,
2783 46,100,105,118,105,100,44,32,34,97,112,112,108,121,58,32,1989 101,32,49,49,51,58,9,47,42,32,70,50,32,42,47,10,
2784 115,104,111,114,116,32,102,111,110,116,34,41,59,10,9,9,1990 9,9,99,97,115,101,32,49,49,52,58,9,47,42,32,70,
2785 9,98,114,101,97,107,59,10,9,9,125,10,9,9,99,111,1991 51,32,42,47,10,9,9,99,97,115,101,32,49,49,53,58,
2786 110,115,111,108,101,46,108,111,103,40,116,104,105,115,46,100,1992 9,47,42,32,70,52,32,42,47,10,9,9,9,105,102,40,
2787 105,118,105,100,44,32,34,102,111,110,116,34,44,32,97,114,1993 100,101,102,101,114,114,101,100,41,32,123,10,9,9,9,9,
2788 103,91,49,93,41,59,10,9,9,116,104,105,115,46,102,111,1994 98,114,101,97,107,59,10,9,9,9,125,10,9,9,9,118,
2789 110,116,115,116,121,108,101,32,61,32,97,114,103,91,49,93,1995 97,114,32,109,101,118,32,61,32,123,10,9,9,9,9,102,
2790 59,10,9,9,116,104,105,115,46,102,105,120,102,111,110,116,1996 97,107,101,120,58,32,116,104,105,115,46,108,97,115,116,120,
2791 40,41,59,10,9,9,116,104,105,115,46,114,101,100,114,97,1997 44,10,9,9,9,9,102,97,107,101,121,58,32,116,104,105,
2792 119,116,101,120,116,40,41,59,10,9,9,98,114,101,97,107,1998 115,46,108,97,115,116,121,44,10,9,9,9,9,119,104,105,
2793 59,10,9,99,97,115,101,32,34,109,97,114,107,105,110,115,1999 99,104,58,32,107,101,121,45,49,49,50,43,49,44,10,9,
2794 105,110,103,34,58,10,9,9,105,102,40,97,114,103,46,108,2000 9,9,125,59,10,9,9,9,109,101,118,46,112,114,101,118,
2795 101,110,103,116,104,32,60,32,51,41,123,10,9,9,9,99,2001 101,110,116,68,101,102,97,117,108,116,32,61,32,102,117,110,
2796 111,110,115,111,108,101,46,108,111,103,40,116,104,105,115,46,2002 99,116,105,111,110,40,41,123,125,10,9,9,9,116,104,105,
2797 100,105,118,105,100,44,32,34,97,112,112,108,121,58,32,115,2003 115,46,99,46,111,110,109,111,117,115,101,117,112,40,109,101,
2798 104,111,114,116,32,109,97,114,107,105,110,115,105,110,103,34,2004 118,41,59,10,9,9,9,98,114,101,97,107,59,10,9,9,
2799 41,59,10,9,9,9,98,114,101,97,107,59,10,9,9,125,2005 99,97,115,101,32,49,56,58,32,47,42,32,65,108,116,32,
2800 10,9,9,105,102,32,40,33,116,104,105,115,46,109,97,114,2006 42,47,10,9,9,9,116,104,105,115,46,99,111,109,112,111,
2801 107,105,110,115,100,97,116,97,41,32,123,10,9,9,9,99,2007 115,105,110,103,32,61,32,116,114,117,101,59,10,9,9,9,
2802 111,110,115,111,108,101,46,108,111,103,40,34,109,97,114,107,2008 114,101,116,117,114,110,32,116,114,117,101,59,10,9,9,100,
2803 105,110,115,32,101,118,115,46,46,46,34,41,59,10,9,9,2009 101,102,97,117,108,116,58,10,9,9,9,114,101,116,117,114,
2804 9,116,104,105,115,46,109,97,114,107,105,110,115,100,97,116,2010 110,32,116,114,117,101,59,10,9,9,125,10,9,9,114,101,
2805 97,32,61,32,91,93,59,10,9,9,125,10,9,9,116,104,2011 116,117,114,110,32,102,97,108,115,101,59,10,9,125,59,10,
2806 105,115,46,109,97,114,107,105,110,115,100,97,116,97,46,112,2012 10,9,116,104,105,115,46,116,108,111,99,107,110,107,101,121,
2807 117,115,104,40,97,114,103,91,50,93,41,59,10,9,9,98,2013 117,112,32,61,32,102,117,110,99,116,105,111,110,40,41,32,
2808 114,101,97,107,59,10,9,99,97,115,101,32,34,109,97,114,2014 123,10,9,9,100,111,110,116,98,117,98,98,108,101,40,101,
2809 107,105,110,115,100,111,110,101,34,58,10,9,9,99,111,110,2015 41,59,10,9,9,105,102,40,116,104,105,115,46,105,115,108,
2810 115,111,108,101,46,108,111,103,40,34,109,97,114,107,105,110,2016 111,99,107,101,100,41,32,123,10,9,9,9,114,101,116,117,
2811 115,32,114,117,110,46,46,46,34,41,59,10,9,9,105,102,2017 114,110,32,116,104,105,115,46,116,107,101,121,117,112,40,101,
2812 40,97,114,103,46,108,101,110,103,116,104,32,60,32,50,41,2018 41,59,10,9,9,125,10,9,9,105,102,40,33,116,104,105,
2813 123,10,9,9,9,99,111,110,115,111,108,101,46,108,111,103,2019 115,46,108,111,99,107,105,110,103,41,32,123,10,9,9,9,
2814 40,116,104,105,115,46,100,105,118,105,100,44,32,34,97,112,2020 116,104,105,115,46,108,111,99,107,105,110,103,32,61,32,116,
2815 112,108,121,58,32,115,104,111,114,116,32,109,97,114,107,105,2021 114,117,101,59,10,9,9,9,116,104,105,115,46,112,111,115,
2816 110,115,100,111,110,101,34,41,59,10,9,9,9,98,114,101,2022 116,40,91,34,104,111,108,100,34,93,41,59,10,9,9,9,
2817 97,107,59,10,9,9,125,10,9,9,118,97,114,32,109,32,
2818 61,32,116,104,105,115,46,103,101,116,109,97,114,107,40,97,
2819 114,103,91,49,93,41,59,10,9,9,105,102,40,33,109,41,
2820 32,123,10,9,9,9,99,111,110,115,111,108,101,46,108,111,
2821 103,40,116,104,105,115,46,100,105,118,105,100,44,32,34,97,
2822 112,112,108,121,58,32,110,111,32,109,97,114,107,34,44,32,
2823 97,114,103,91,49,93,41,59,10,9,9,9,98,114,101,97,
2824 107,59,10,9,9,125,10,9,9,118,97,114,32,111,112,48,
2825 32,61,32,116,104,105,115,46,112,48,59,10,9,9,118,97,
2826 114,32,111,112,49,32,61,32,116,104,105,115,46,112,49,59,
2827 10,9,9,105,102,40,111,112,48,32,33,61,32,111,112,49,
2828 41,32,123,10,9,9,9,116,104,105,115,46,116,115,101,116,
2829 115,101,108,40,111,112,48,44,32,111,112,48,41,59,10,9,
2830 9,125,10,9,9,102,111,114,40,118,97,114,32,105,32,61,
2831 32,48,59,32,105,32,60,32,116,104,105,115,46,109,97,114,
2832 107,105,110,115,100,97,116,97,46,108,101,110,103,116,104,59,
2833 32,105,43,43,41,32,123,10,9,9,9,118,97,114,32,100,
2834 97,116,97,32,61,32,116,104,105,115,46,109,97,114,107,105,
2835 110,115,100,97,116,97,91,105,93,59,10,9,9,9,118,97,
2836 114,32,110,108,101,110,32,61,32,100,97,116,97,46,108,101,
2837 110,103,116,104,59,10,9,9,9,118,97,114,32,110,112,111,
2838 115,32,61,32,109,46,112,111,115,32,43,32,110,108,101,110,
2839 59,10,9,9,9,118,97,114,32,111,112,111,115,32,61,32,
2840 109,46,112,111,115,59,10,9,9,9,111,112,48,32,61,32,
2841 116,104,105,115,46,112,48,59,10,9,9,9,111,112,49,32,
2842 61,32,116,104,105,115,46,112,49,59,10,9,9,9,116,104,
2843 105,115,46,112,48,32,61,32,109,46,112,111,115,59,10,9,
2844 9,9,116,104,105,115,46,112,49,32,61,32,109,46,112,111,
2845 115,59,10,9,9,9,116,104,105,115,46,116,105,110,115,108,
2846 105,110,101,115,40,100,97,116,97,44,32,116,114,117,101,41,
2847 59,10,9,9,9,109,46,112,111,115,32,61,32,110,112,111,
2848 115,59,10,9,9,9,105,102,40,111,112,48,32,62,32,111,
2849 112,111,115,41,10,9,9,9,9,111,112,48,32,43,61,32,
2850 110,108,101,110,59,10,9,9,9,105,102,40,111,112,49,32,
2851 62,32,111,112,111,115,41,10,9,9,9,9,111,112,49,32,
2852 43,61,32,110,108,101,110,59,10,9,9,9,116,104,105,115,
2853 46,112,48,32,61,32,111,112,48,59,10,9,9,9,116,104,
2854 105,115,46,112,49,32,61,32,111,112,49,59,10,9,9,9,
2855 105,102,40,101,118,46,86,101,114,115,41,32,123,10,9,9,
2856 9,9,116,104,105,115,46,118,101,114,115,32,61,32,101,118,
2857 46,86,101,114,115,59,10,9,9,9,125,10,9,9,125,10,
2858 9,9,116,104,105,115,46,116,115,101,116,115,101,108,40,111,
2859 112,48,44,32,111,112,49,41,59,10,9,9,100,101,108,101,
2860 116,101,32,116,104,105,115,46,109,97,114,107,105,110,115,100,
2861 97,116,97,59,10,9,9,105,102,40,33,116,104,105,115,46,
2862 117,115,101,114,114,101,115,105,122,101,100,41,32,123,10,9,
2863 9,9,116,104,105,115,46,97,117,116,111,114,101,115,105,122,
2864 101,40,41,59,10,9,9,125,32,10,9,9,99,111,110,115,
2865 111,108,101,46,108,111,103,40,34,109,97,114,107,105,110,115,
2866 32,100,111,110,101,34,41,59,10,9,9,98,114,101,97,107,
2867 59,10,9,99,97,115,101,32,34,101,105,110,115,105,110,103,
2868 34,58,10,9,9,105,102,40,97,114,103,46,108,101,110,103,
2869 116,104,32,60,32,50,41,123,10,9,9,9,99,111,110,115,
2870 111,108,101,46,108,111,103,40,116,104,105,115,46,100,105,118,
2871 105,100,44,32,34,97,112,112,108,121,58,32,115,104,111,114,
2872 116,32,101,105,110,115,105,110,103,34,41,59,10,9,9,9,
2873 98,114,101,97,107,59,10,9,9,125,10,9,9,105,102,32,
2874 40,33,116,104,105,115,46,101,105,110,115,100,97,116,97,41,
2875 32,123,10,9,9,9,99,111,110,115,111,108,101,46,108,111,
2876 103,40,34,101,105,110,115,32,101,118,115,46,46,46,34,41,
2877 59,10,9,9,9,116,104,105,115,46,101,105,110,115,100,97,
2878 116,97,32,61,32,91,93,59,10,9,9,125,10,9,9,116,
2879 104,105,115,46,101,105,110,115,100,97,116,97,46,112,117,115,
2880 104,40,97,114,103,91,49,93,41,59,10,9,9,98,114,101,
2881 97,107,59,10,9,99,97,115,101,32,34,101,105,110,115,100,
2882 111,110,101,34,58,10,9,9,99,111,110,115,111,108,101,46,
2883 108,111,103,40,34,101,105,110,115,32,114,117,110,46,46,46,
2884 34,41,59,10,9,9,105,102,40,97,114,103,46,108,101,110,
2885 103,116,104,32,60,32,50,41,123,10,9,9,9,99,111,110,
2886 115,111,108,101,46,108,111,103,40,116,104,105,115,46,100,105,
2887 118,105,100,44,32,34,97,112,112,108,121,58,32,115,104,111,
2888 114,116,32,105,110,115,34,41,59,10,9,9,9,98,114,101,
2889 97,107,59,10,9,9,125,10,9,9,105,102,40,101,118,46,
2890 86,101,114,115,32,38,38,32,102,114,111,109,115,101,114,118,
2891 101,114,32,38,38,32,101,118,46,86,101,114,115,32,33,61,
2892 32,116,104,105,115,46,118,101,114,115,43,49,41,123,10,9,
2893 9,9,99,111,110,115,111,108,101,46,108,111,103,40,34,79,
2894 85,84,32,79,70,32,83,89,78,67,34,44,32,101,118,46,
2895 65,114,103,115,44,32,34,118,34,44,32,101,118,46,86,101,
2896 114,115,44,32,116,104,105,115,46,118,101,114,115,41,59,10,
2897 9,9,9,116,104,105,115,46,112,111,115,116,40,91,34,110,
2898 101,101,100,114,101,108,111,97,100,34,93,41,59,10,9,9,
2899 9,100,101,108,101,116,101,32,116,104,105,115,46,101,105,110,
2900 115,100,97,116,97,59,10,9,9,9,98,114,101,97,107,59,
2901 10,9,9,125,10,9,9,118,97,114,32,112,48,32,61,32,
2902 112,97,114,115,101,73,110,116,40,97,114,103,91,49,93,41,
2903 59,10,9,9,118,97,114,32,111,112,48,32,61,32,116,104,
2904 105,115,46,112,48,59,10,9,9,118,97,114,32,111,112,49,
2905 32,61,32,116,104,105,115,46,112,49,59,10,9,9,105,102,
2906 40,111,112,48,32,33,61,32,111,112,49,41,32,123,10,9,
2907 9,9,116,104,105,115,46,116,115,101,116,115,101,108,40,111,
2908 112,48,44,32,111,112,48,41,59,10,9,9,125,10,9,9,
2909 116,104,105,115,46,112,48,32,61,32,112,48,59,10,9,9,
2910 116,104,105,115,46,112,49,32,61,32,112,48,59,10,9,9,
2911 102,111,114,40,118,97,114,32,105,32,61,32,48,59,32,105,
2912 32,60,32,116,104,105,115,46,101,105,110,115,100,97,116,97,
2913 46,108,101,110,103,116,104,59,32,105,43,43,41,32,123,10,
2914 9,9,9,118,97,114,32,100,97,116,97,32,61,32,116,104,
2915 105,115,46,101,105,110,115,100,97,116,97,91,105,93,59,10,
2916 9,9,9,116,104,105,115,46,116,105,110,115,108,105,110,101,
2917 115,40,100,97,116,97,41,59,10,9,9,9,105,102,40,111,
2918 112,48,32,62,32,112,48,41,10,9,9,9,9,111,112,48,
2919 32,43,61,32,100,97,116,97,46,108,101,110,103,116,104,59,
2920 10,9,9,9,105,102,40,111,112,49,32,62,32,112,48,41,
2921 10,9,9,9,9,111,112,49,32,43,61,32,100,97,116,97,
2922 46,108,101,110,103,116,104,59,10,9,9,125,10,9,9,100,
2923 101,108,101,116,101,32,116,104,105,115,46,101,105,110,115,100,
2924 97,116,97,59,10,9,9,116,104,105,115,46,116,115,101,116,
2925 115,101,108,40,111,112,48,44,32,111,112,49,41,59,10,9,
2926 9,105,102,40,101,118,46,86,101,114,115,41,32,123,10,9,
2927 9,9,116,104,105,115,46,118,101,114,115,32,61,32,101,118,
2928 46,86,101,114,115,59,10,9,9,125,10,9,9,105,102,40,
2929 33,116,104,105,115,46,117,115,101,114,114,101,115,105,122,101,
2930 100,41,32,123,10,9,9,9,116,104,105,115,46,97,117,116,
2931 111,114,101,115,105,122,101,40,41,59,10,9,9,125,32,10,
2932 9,9,99,111,110,115,111,108,101,46,108,111,103,40,34,101,
2933 105,110,115,32,100,111,110,101,34,41,59,10,9,9,98,114,
2934 101,97,107,59,10,9,99,97,115,101,32,34,101,105,110,115,
2935 34,58,10,9,9,105,102,40,97,114,103,46,108,101,110,103,
2936 116,104,32,60,32,51,41,123,10,9,9,9,99,111,110,115,
2937 111,108,101,46,108,111,103,40,116,104,105,115,46,100,105,118,
2938 105,100,44,32,34,97,112,112,108,121,58,32,115,104,111,114,
2939 116,32,105,110,115,34,41,59,10,9,9,9,98,114,101,97,
2940 107,59,10,9,9,125,10,9,9,105,102,40,101,118,46,86,
2941 101,114,115,32,38,38,32,102,114,111,109,115,101,114,118,101,
2942 114,32,38,38,32,101,118,46,86,101,114,115,32,33,61,32,
2943 116,104,105,115,46,118,101,114,115,43,49,41,123,10,9,9,
2944 9,99,111,110,115,111,108,101,46,108,111,103,40,34,79,85,
2945 84,32,79,70,32,83,89,78,67,34,44,32,101,118,46,65,
2946 114,103,115,44,32,34,118,34,44,32,101,118,46,86,101,114,
2947 115,44,32,116,104,105,115,46,118,101,114,115,41,59,10,9,
2948 9,9,116,104,105,115,46,112,111,115,116,40,91,34,110,101,
2949 101,100,114,101,108,111,97,100,34,93,41,59,10,9,9,9,
2950 98,114,101,97,107,59,10,9,9,125,10,9,9,118,97,114,
2951 32,112,48,32,61,32,112,97,114,115,101,73,110,116,40,97,
2952 114,103,91,50,93,41,59,10,9,9,118,97,114,32,111,112,
2953 48,32,61,32,116,104,105,115,46,112,48,59,10,9,9,118,
2954 97,114,32,111,112,49,32,61,32,116,104,105,115,46,112,49,
2955 59,10,9,9,105,102,40,111,112,48,32,33,61,32,111,112,
2956 49,41,32,123,10,9,9,9,116,104,105,115,46,116,115,101,
2957 116,115,101,108,40,111,112,48,44,32,111,112,48,41,59,10,
2958 9,9,125,10,9,9,116,104,105,115,46,112,48,32,61,32,
2959 112,48,59,10,9,9,116,104,105,115,46,112,49,32,61,32,
2960 112,48,59,10,9,9,116,104,105,115,46,116,105,110,115,108,
2961 105,110,101,115,40,97,114,103,91,49,93,41,59,10,9,9,
2962 105,102,40,111,112,48,32,62,32,112,48,41,10,9,9,9,
2963 111,112,48,32,43,61,32,97,114,103,91,49,93,46,108,101,
2964 110,103,116,104,59,10,9,9,105,102,40,111,112,49,32,62,
2965 32,112,48,41,10,9,9,9,111,112,49,32,43,61,32,97,
2966 114,103,91,49,93,46,108,101,110,103,116,104,59,10,9,9,
2967 105,102,40,102,114,111,109,115,101,114,118,101,114,41,32,123,
2968 10,9,9,9,116,104,105,115,46,116,115,101,116,115,101,108,
2969 40,111,112,48,44,32,111,112,49,41,59,10,9,9,125,10,
2970 9,9,105,102,40,101,118,46,86,101,114,115,41,32,123,10,
2971 9,9,9,116,104,105,115,46,118,101,114,115,32,61,32,101,
2972 118,46,86,101,114,115,59,10,9,9,125,10,9,9,105,102,
2973 40,33,116,104,105,115,46,117,115,101,114,114,101,115,105,122,
2974 101,100,32,38,38,32,97,114,103,91,49,93,46,105,110,100,
2975 101,120,79,102,40,39,92,110,39,41,32,62,61,32,48,41,
2976 32,123,10,9,9,9,116,104,105,115,46,97,117,116,111,114,
2977 101,115,105,122,101,40,41,59,10,9,9,125,32,10,9,9,
2978 98,114,101,97,107,59,10,9,99,97,115,101,32,34,101,100,
2979 101,108,34,58,10,9,9,105,102,40,97,114,103,46,108,101,
2980 110,103,116,104,32,60,32,51,41,123,10,9,9,9,99,111,
2981 110,115,111,108,101,46,108,111,103,40,116,104,105,115,46,100,
2982 105,118,105,100,44,32,34,97,112,112,108,121,58,32,115,104,
2983 111,114,116,32,100,101,108,34,41,59,10,9,9,9,98,114,
2984 101,97,107,59,10,9,9,125,10,9,9,105,102,40,101,118,
2985 46,86,101,114,115,32,38,38,32,102,114,111,109,115,101,114,
2986 118,101,114,32,38,38,32,101,118,46,86,101,114,115,32,33,
2987 61,32,116,104,105,115,46,118,101,114,115,43,49,41,123,10,
2988 9,9,9,99,111,110,115,111,108,101,46,108,111,103,40,34,
2989 79,85,84,32,79,70,32,83,89,78,67,34,44,32,101,118,
2990 46,65,114,103,115,44,32,34,118,34,44,32,101,118,46,86,
2991 101,114,115,44,32,116,104,105,115,46,118,101,114,115,41,59,
2992 10,9,9,9,116,104,105,115,46,112,111,115,116,40,91,34,
2993 110,101,101,100,114,101,108,111,97,100,34,93,41,59,10,9,
2994 9,125,10,9,9,118,97,114,32,112,48,32,61,32,112,97,
2995 114,115,101,73,110,116,40,97,114,103,91,49,93,41,59,10,
2996 9,9,118,97,114,32,112,49,32,61,32,112,97,114,115,101,
2997 73,110,116,40,97,114,103,91,50,93,41,59,10,9,9,118,
2998 97,114,32,111,112,48,32,61,32,116,104,105,115,46,112,48,
2999 59,10,9,9,118,97,114,32,111,112,49,32,61,32,116,104,
3000 105,115,46,112,49,59,10,9,9,116,104,105,115,46,112,48,
3001 32,61,32,112,48,59,10,9,9,116,104,105,115,46,112,49,
3002 32,61,32,112,49,59,10,9,9,116,114,121,123,10,9,9,
3003 9,116,104,105,115,46,116,100,101,108,40,41,59,10,9,9,
3004 125,99,97,116,99,104,40,101,120,41,123,10,9,9,9,99,
3005 111,110,115,111,108,101,46,108,111,103,40,116,104,105,115,46,
3006 100,105,118,105,100,44,32,34,97,112,112,108,121,58,32,100,
3007 101,108,58,32,34,32,43,32,101,120,41,59,10,9,9,125,
3008 10,9,9,111,112,48,32,61,32,97,100,106,100,101,108,40,
3009 111,112,48,44,32,112,48,44,32,112,49,41,59,10,9,9,
3010 111,112,49,32,61,32,97,100,106,100,101,108,40,111,112,49,
3011 44,32,112,48,44,32,112,49,41,59,10,9,9,105,102,40,
3012 102,114,111,109,115,101,114,118,101,114,41,32,123,10,9,9,
3013 9,116,104,105,115,46,116,115,101,116,115,101,108,40,111,112,
3014 48,44,32,111,112,49,41,59,10,9,9,125,10,9,9,105,
3015 102,40,101,118,46,86,101,114,115,41,32,123,10,9,9,9,
3016 116,104,105,115,46,118,101,114,115,32,61,32,101,118,46,86,
3017 101,114,115,59,10,9,9,125,10,9,9,98,114,101,97,107,
3018 59,10,9,99,97,115,101,32,34,101,99,117,116,34,58,10,
3019 9,9,116,114,121,123,10,9,9,9,116,104,105,115,46,116,
3020 100,101,108,40,41,59,10,9,9,125,99,97,116,99,104,40,
3021 101,120,41,123,10,9,9,9,99,111,110,115,111,108,101,46,
3022 108,111,103,40,116,104,105,115,46,100,105,118,105,100,44,32,
3023 34,97,112,112,108,121,58,32,99,117,116,58,32,34,32,43,
3024 32,101,120,41,59,10,9,9,125,10,9,9,105,102,40,101,
3025 118,46,86,101,114,115,41,10,9,9,9,116,104,105,115,46,
3026 118,101,114,115,32,61,32,101,118,46,86,101,114,115,59,10,
3027 9,9,98,114,101,97,107,59,10,9,99,97,115,101,32,34,
3028 114,101,108,111,97,100,34,58,10,9,9,116,104,105,115,46,
3029 114,101,108,111,97,100,108,110,48,32,61,32,116,104,105,115,
3030 46,108,110,48,59,10,9,9,116,104,105,115,46,116,99,108,
3031 101,97,114,40,41,59,10,9,9,98,114,101,97,107,59,10,
3032 9,99,97,115,101,32,34,114,101,108,111,97,100,105,110,103,
3033 34,58,10,9,9,105,102,40,97,114,103,46,108,101,110,103,
3034 116,104,32,60,32,50,41,123,10,9,9,9,99,111,110,115,
3035 111,108,101,46,108,111,103,40,116,104,105,115,46,100,105,118,
3036 105,100,44,32,34,97,112,112,108,121,58,32,115,104,111,114,
3037 116,32,114,101,108,111,97,100,105,110,103,34,41,59,10,9,
3038 9,9,98,114,101,97,107,59,10,9,9,125,10,9,9,116,
3039 104,105,115,46,108,105,110,101,115,46,112,117,115,104,40,123,
3040 116,120,116,58,32,97,114,103,91,49,93,44,32,111,102,102,
3041 58,32,116,104,105,115,46,114,101,108,111,97,100,111,102,102,
3042 44,32,101,111,108,58,32,116,114,117,101,125,41,59,10,9,
3043 9,116,104,105,115,46,114,101,108,111,97,100,111,102,102,32,
3044 43,61,32,97,114,103,91,49,93,46,108,101,110,103,116,104,
3045 32,43,32,49,59,10,9,9,98,114,101,97,107,10,9,99,
3046 97,115,101,32,34,114,101,108,111,97,100,101,100,34,58,10,
3047 9,9,105,102,40,97,114,103,46,108,101,110,103,116,104,32,
3048 60,32,50,41,123,10,9,9,9,99,111,110,115,111,108,101,
3049 46,108,111,103,40,116,104,105,115,46,100,105,118,105,100,44,
3050 32,34,97,112,112,108,121,58,32,115,104,111,114,116,32,114,
3051 101,108,111,97,100,101,100,34,41,59,10,9,9,9,98,114,
3052 101,97,107,59,10,9,9,125,10,9,9,116,104,105,115,46,
3053 118,101,114,115,32,61,32,112,97,114,115,101,73,110,116,40,
3054 97,114,103,91,49,93,41,59,10,9,9,105,102,40,116,104,
3055 105,115,46,114,101,108,111,97,100,108,110,48,32,60,32,116,
3056 104,105,115,46,108,105,110,101,115,46,108,101,110,103,116,104,
3057 41,32,123,10,9,9,9,118,97,114,32,108,110,48,32,61,
3058 32,116,104,105,115,46,114,101,108,111,97,100,108,110,48,59,
3059 10,9,9,9,100,101,108,101,116,101,32,116,104,105,115,46,
3060 114,101,108,111,97,100,108,110,48,59,10,9,9,9,118,97,
3061 114,32,120,108,110,32,61,32,116,104,105,115,46,108,105,110,
3062 101,115,91,116,104,105,115,46,108,110,48,93,59,10,9,9,
3063 9,105,102,40,120,108,110,41,32,123,10,9,9,9,9,116,
3064 104,105,115,46,108,110,48,32,61,32,108,110,48,59,10,9,
3065 9,9,9,116,104,105,115,46,102,114,111,102,102,32,61,32,
3066 120,108,110,46,111,102,102,10,9,9,9,125,10,9,9,125,
3067 10,9,9,116,104,105,115,46,114,101,100,114,97,119,116,101,
3068 120,116,40,41,59,10,9,9,105,102,40,33,116,104,105,115,
3069 46,117,115,101,114,114,101,115,105,122,101,100,41,32,123,10,
3070 9,9,9,116,104,105,115,46,97,117,116,111,114,101,115,105,
3071 122,101,40,41,59,10,9,9,125,10,9,9,47,47,32,116,
3072 104,105,115,46,100,117,109,112,40,41,59,10,9,9,98,114,
3073 101,97,107,59,10,9,99,97,115,101,32,34,109,97,114,107,
3074 34,58,10,9,9,105,102,40,97,114,103,46,108,101,110,103,
3075 116,104,32,60,32,51,41,123,10,9,9,9,99,111,110,115,
3076 111,108,101,46,108,111,103,40,116,104,105,115,46,100,105,118,
3077 105,100,44,32,34,97,112,112,108,121,58,32,115,104,111,114,
3078 116,32,109,97,114,107,34,41,59,10,9,9,9,98,114,101,
3079 97,107,59,10,9,9,125,10,9,9,118,97,114,32,112,111,
3080 115,32,61,32,112,97,114,115,101,73,110,116,40,97,114,103,
3081 91,50,93,41,59,10,9,9,116,104,105,115,46,115,101,116,
3082 109,97,114,107,40,97,114,103,91,49,93,44,32,112,111,115,
3083 41,59,10,9,9,98,114,101,97,107,59,10,9,99,97,115,
3084 101,32,34,115,101,108,34,58,10,9,9,105,102,40,97,114,
3085 103,46,108,101,110,103,116,104,32,60,32,51,41,123,10,9,
3086 9,9,99,111,110,115,111,108,101,46,108,111,103,40,116,104,
3087 105,115,46,100,105,118,105,100,44,32,34,97,112,112,108,121,
3088 58,32,115,104,111,114,116,32,115,101,108,34,41,59,10,9,
3089 9,9,98,114,101,97,107,59,10,9,9,125,10,9,9,118,
3090 97,114,32,112,111,115,48,32,61,32,112,97,114,115,101,73,
3091 110,116,40,97,114,103,91,49,93,41,59,10,9,9,118,97,
3092 114,32,112,111,115,49,32,61,32,112,97,114,115,101,73,110,
3093 116,40,97,114,103,91,50,93,41,59,10,9,9,116,104,105,
3094 115,46,115,101,116,109,97,114,107,40,34,112,48,34,44,32,
3095 112,111,115,48,41,59,10,9,9,116,104,105,115,46,115,101,
3096 116,109,97,114,107,40,34,112,49,34,44,32,112,111,115,49,
3097 41,59,10,9,9,116,104,105,115,46,116,115,101,116,115,101,
3098 108,40,112,111,115,48,44,32,112,111,115,49,44,32,116,114,
3099 117,101,41,59,10,9,9,116,104,105,115,46,118,105,101,119,
3100 115,101,108,40,41,59,10,9,9,99,111,110,115,111,108,101,
3101 46,108,111,103,40,34,115,101,116,115,101,108,34,44,32,112,
3102 111,115,48,44,32,112,111,115,49,41,59,10,9,9,98,114,
3103 101,97,107,59,10,9,99,97,115,101,32,34,100,101,108,109,
3104 97,114,107,34,58,10,9,9,105,102,40,97,114,103,46,108,
3105 101,110,103,116,104,32,60,32,50,41,123,10,9,9,9,99,
3106 111,110,115,111,108,101,46,108,111,103,40,116,104,105,115,46,
3107 100,105,118,105,100,44,32,34,97,112,112,108,121,58,32,115,
3108 104,111,114,116,32,100,101,108,109,97,114,107,34,41,59,10,
3109 9,9,9,98,114,101,97,107,59,10,9,9,125,10,9,9,
3110 116,104,105,115,46,100,101,108,109,97,114,107,40,97,114,103,
3111 91,49,93,41,59,10,9,9,98,114,101,97,107,59,10,9,
3112 99,97,115,101,32,34,99,108,111,115,101,34,58,10,9,9,
3113 116,104,105,115,46,119,115,46,99,108,111,115,101,40,41,59,
3114 10,9,9,36,40,34,35,34,43,116,104,105,115,46,100,105,
3115 118,105,100,41,46,114,101,109,111,118,101,40,41,59,10,9,
3116 9,98,114,101,97,107,59,10,9,100,101,102,97,117,108,116,
3117 58,10,9,9,99,111,110,115,111,108,101,46,108,111,103,40,
3118 34,116,101,120,116,58,32,117,110,104,97,110,100,108,101,100,
3119 34,44,32,97,114,103,91,48,93,41,59,10,9,125,10,125,
3120 10,10,47,47,32,84,104,105,115,32,105,115,32,116,111,32,
3121 112,114,101,118,101,110,116,32,116,104,101,32,101,118,101,110,
3122 116,32,102,114,111,109,32,98,101,105,110,103,32,112,114,111,
3123 112,97,103,97,116,101,100,32,116,111,32,116,104,101,32,112,
3124 97,114,101,110,116,10,47,47,32,99,111,110,116,97,105,110,
3125 101,114,46,10,47,47,32,68,101,115,112,105,116,101,32,116,
3126 104,105,115,44,32,105,116,32,115,101,101,109,115,32,116,104,
3127 97,116,32,105,102,32,119,101,32,114,101,116,117,114,110,32,
3128 116,114,117,101,32,105,110,32,115,97,102,97,114,105,32,102,
3129 111,114,32,97,32,107,101,121,100,111,119,110,10,47,47,32,
3130 116,104,101,110,32,105,116,39,115,32,116,111,111,32,108,97,
3131 116,101,32,97,110,100,32,116,104,101,32,115,112,97,99,101,
3132 32,98,117,98,98,108,101,115,32,97,110,100,32,119,101,32,
3133 115,99,114,111,108,108,32,119,104,101,110,32,119,101,32,115,
3134 104,111,117,108,100,110,116,46,10,47,47,32,83,111,44,32,
3135 108,111,99,107,110,107,101,121,100,111,119,110,32,114,101,116,
3136 117,114,110,115,32,102,97,108,115,101,32,97,110,100,32,99,
3137 97,108,108,115,44,32,98,121,32,104,97,110,100,44,32,116,
3138 104,101,32,100,111,119,110,47,107,101,121,47,117,112,32,104,
3139 97,110,100,108,101,114,115,46,10,102,117,110,99,116,105,111,
3140 110,32,100,111,110,116,98,117,98,98,108,101,40,101,41,32,
3141 123,10,9,105,102,32,40,101,41,32,123,10,9,9,101,46,
3142 98,117,98,98,108,101,115,32,61,32,102,97,108,115,101,59,
3143 10,9,9,105,102,40,101,46,115,116,111,112,80,114,111,112,
3144 97,103,97,116,105,111,110,41,32,123,10,9,9,9,101,46,
3145 115,116,111,112,80,114,111,112,97,103,97,116,105,111,110,40,
3146 41,59,10,9,9,125,10,9,9,101,46,99,97,110,99,101,
3147 108,66,117,98,98,108,101,32,61,32,116,114,117,101,59,10,
3148 9,125,10,125,10,10,102,117,110,99,116,105,111,110,32,116,
3149 108,111,99,107,110,107,101,121,100,111,119,110,40,101,41,32,
3150 123,10,9,100,111,110,116,98,117,98,98,108,101,40,101,41,
3151 59,10,9,105,102,40,116,104,105,115,46,105,115,108,111,99,
3152 107,101,100,41,32,123,10,9,9,114,101,116,117,114,110,32,
3153 116,107,101,121,100,111,119,110,46,99,97,108,108,40,116,104,
3154 105,115,44,32,101,41,59,10,9,125,10,9,105,102,40,33,
3155 116,104,105,115,46,108,111,99,107,105,110,103,41,32,123,10,
3156 9,9,116,104,105,115,46,108,111,99,107,105,110,103,32,61,
3157 32,116,114,117,101,59,10,9,9,116,104,105,115,46,112,111,
3158 115,116,40,91,34,104,111,108,100,34,93,41,59,10,9,9,
3159 99,111,110,115,111,108,101,46,108,111,103,40,34,104,111,108,2023 99,111,110,115,111,108,101,46,108,111,103,40,34,104,111,108,
3160 100,105,110,103,46,46,46,34,41,59,10,9,125,10,9,118,2024 100,105,110,103,46,46,46,34,41,59,10,9,9,125,10,9,
3161 97,114,32,115,101,108,102,32,61,32,116,104,105,115,59,10,2025 9,118,97,114,32,115,101,108,102,32,61,32,116,104,105,115,
3162 9,118,97,114,32,120,101,32,61,32,106,81,117,101,114,121,2026 59,10,9,9,118,97,114,32,120,101,32,61,32,106,81,117,
3163 46,69,118,101,110,116,40,34,107,101,121,100,111,119,110,34,2027 101,114,121,46,69,118,101,110,116,40,34,107,101,121,117,112,
3164 41,59,10,9,120,101,46,119,104,105,99,104,32,61,32,101,2028 34,41,59,10,9,9,120,101,46,119,104,105,99,104,32,61,
3165 46,119,104,105,99,104,59,10,9,120,101,46,107,101,121,67,2029 32,101,46,119,104,105,99,104,59,10,9,9,120,101,46,107,
3166 111,100,101,32,61,32,101,46,107,101,121,67,111,100,101,59,2030 101,121,67,111,100,101,32,61,32,101,46,107,101,121,67,111,
3167 10,9,120,101,46,99,116,114,108,75,101,121,32,61,32,101,2031 100,101,59,10,9,9,120,101,46,99,116,114,108,75,101,121,
3168 46,99,116,114,108,75,101,121,59,10,9,120,101,46,109,101,2032 32,61,32,101,46,99,116,114,108,75,101,121,59,10,9,9,
3169 116,97,75,101,121,32,61,32,101,46,109,101,116,97,75,101,2033 120,101,46,109,101,116,97,75,101,121,32,61,32,101,46,109,
3170 121,59,10,9,120,101,46,112,114,101,118,101,110,116,68,101,2034 101,116,97,75,101,121,59,10,9,9,120,101,46,112,114,101,
3171 102,97,117,108,116,32,61,32,102,117,110,99,116,105,111,110,2035 118,101,110,116,68,101,102,97,117,108,116,32,61,32,102,117,
3172 40,41,123,125,59,10,9,116,104,105,115,46,119,104,101,110,2036 110,99,116,105,111,110,40,41,123,125,59,10,9,9,116,104,
2037 105,115,46,119,104,101,110,108,111,99,107,101,100,46,112,117,
2038 115,104,40,102,117,110,99,116,105,111,110,40,41,32,123,10,
2039 9,9,9,99,111,110,115,111,108,101,46,108,111,103,40,34,
2040 104,101,108,100,32,107,101,121,117,112,34,41,59,10,9,9,
2041 9,36,40,115,101,108,102,46,99,41,46,116,114,105,103,103,
2042 101,114,40,120,101,41,59,10,9,9,9,114,101,116,117,114,
2043 110,32,102,97,108,115,101,59,10,9,9,125,41,59,10,9,
2044 9,114,101,116,117,114,110,32,116,104,105,115,46,116,107,101,
2045 121,117,112,40,101,44,32,116,114,117,101,41,59,10,9,125,
2046 59,10,10,9,116,104,105,115,46,116,109,100,111,119,110,32,
2047 61,32,102,117,110,99,116,105,111,110,40,101,41,32,123,10,
2048 9,9,105,102,40,48,41,99,111,110,115,111,108,101,46,108,
2049 111,103,40,34,116,109,100,111,119,110,32,34,44,32,116,104,
2050 105,115,46,105,100,44,32,101,41,59,10,9,9,116,104,105,
2051 115,46,115,101,108,101,99,116,115,116,97,114,116,40,41,59,
2052 10,9,9,101,46,112,114,101,118,101,110,116,68,101,102,97,
2053 117,108,116,40,41,59,10,9,9,116,104,105,115,46,115,101,
2054 99,111,110,100,97,114,121,32,61,32,48,59,9,9,47,42,
2055 32,112,97,114,97,110,111,105,97,58,32,115,101,101,32,116,
2056 109,50,51,52,32,42,47,10,9,9,116,104,105,115,46,115,
2057 101,99,111,110,100,97,114,121,97,98,111,114,116,32,61,32,
2058 102,97,108,115,101,59,10,9,9,116,104,105,115,46,109,112,
2059 114,101,115,115,40,101,41,59,10,9,9,116,104,105,115,46,
2060 101,118,120,121,40,101,41,59,10,9,9,118,97,114,32,98,
2061 32,61,32,116,104,105,115,46,98,117,116,116,111,110,115,59,
2062 10,9,9,115,119,105,116,99,104,40,98,41,123,10,9,9,
2063 99,97,115,101,32,49,58,10,9,9,9,118,97,114,32,108,
2064 110,44,32,108,110,111,102,102,44,32,112,97,115,116,59,10,
2065 9,9,9,91,108,110,44,32,108,110,111,102,102,44,32,112,
2066 97,115,116,93,32,61,32,116,104,105,115,46,112,116,114,50,
2067 115,101,101,107,40,116,104,105,115,46,108,97,115,116,120,44,
2068 32,116,104,105,115,46,108,97,115,116,121,41,59,10,9,9,
2069 9,118,97,114,32,112,111,115,32,61,32,116,104,105,115,46,
2070 115,101,101,107,112,111,115,40,108,110,44,32,108,110,111,102,
2071 102,41,59,10,9,9,9,116,104,105,115,46,115,101,116,115,
2072 101,108,40,112,111,115,44,32,112,111,115,41,59,10,9,9,
2073 9,116,104,105,115,46,109,49,40,112,111,115,41,59,10,9,
2074 9,9,98,114,101,97,107,59,10,9,9,99,97,115,101,32,
2075 50,58,10,9,9,99,97,115,101,32,52,58,10,9,9,99,
2076 97,115,101,32,56,58,10,9,9,9,118,97,114,32,108,110,
2077 44,32,108,110,111,102,102,44,32,112,97,115,116,59,10,9,
2078 9,9,91,108,110,44,32,108,110,111,102,102,44,32,112,97,
2079 115,116,93,32,61,32,116,104,105,115,46,112,116,114,50,115,
2080 101,101,107,40,116,104,105,115,46,108,97,115,116,120,44,32,
2081 116,104,105,115,46,108,97,115,116,121,41,59,10,9,9,9,
2082 118,97,114,32,112,111,115,32,61,32,116,104,105,115,46,115,
2083 101,101,107,112,111,115,40,108,110,44,32,108,110,111,102,102,
2084 41,59,10,9,9,9,116,104,105,115,46,111,108,100,112,48,
2085 32,61,32,116,104,105,115,46,112,48,59,10,9,9,9,116,
2086 104,105,115,46,111,108,100,112,49,32,61,32,116,104,105,115,
2087 46,112,49,59,10,9,9,9,116,104,105,115,46,115,101,116,
2088 115,101,108,40,112,111,115,44,32,112,111,115,41,59,10,9,
2089 9,9,116,104,105,115,46,109,50,51,52,40,112,111,115,44,
2090 32,98,41,59,10,9,9,9,98,114,101,97,107,59,10,9,
2091 9,100,101,102,97,117,108,116,58,10,9,9,9,116,104,105,
2092 115,46,109,119,97,105,116,40,41,59,10,9,9,125,10,9,
2093 9,101,46,114,101,116,117,114,110,86,97,108,117,101,32,61,
2094 32,102,97,108,115,101,59,10,9,125,59,10,10,9,116,104,
2095 105,115,46,116,108,111,99,107,110,109,100,111,119,110,32,61,
2096 32,102,117,110,99,116,105,111,110,40,41,32,123,10,9,9,
2097 105,102,40,116,104,105,115,46,105,115,108,111,99,107,101,100,
2098 41,32,123,10,9,9,9,114,101,116,117,114,110,32,116,104,
2099 105,115,46,116,109,100,111,119,110,40,101,41,59,10,9,9,
2100 125,10,9,9,105,102,40,33,116,104,105,115,46,108,111,99,
2101 107,105,110,103,41,32,123,10,9,9,9,116,104,105,115,46,
2102 108,111,99,107,105,110,103,32,61,32,116,114,117,101,59,10,
2103 9,9,9,116,104,105,115,46,112,111,115,116,40,91,34,104,
2104 111,108,100,34,93,41,59,10,9,9,9,99,111,110,115,111,
2105 108,101,46,108,111,103,40,34,104,111,108,100,105,110,103,46,
2106 46,46,34,41,59,10,9,9,125,10,9,9,118,97,114,32,
2107 115,101,108,102,32,61,32,116,104,105,115,59,10,9,9,118,
2108 97,114,32,120,101,32,61,32,106,81,117,101,114,121,46,69,
2109 118,101,110,116,40,34,109,111,117,115,101,100,111,119,110,34,
2110 41,59,10,9,9,120,101,46,119,104,105,99,104,32,61,32,
2111 101,46,119,104,105,99,104,59,10,9,9,120,101,46,112,97,
2112 103,101,88,32,61,32,101,46,112,97,103,101,88,59,10,9,
2113 9,120,101,46,112,97,103,101,89,32,61,32,101,46,112,97,
2114 103,101,89,59,10,9,9,120,101,46,112,114,101,118,101,110,
2115 116,68,101,102,97,117,108,116,32,61,32,102,117,110,99,116,
2116 105,111,110,40,41,123,125,59,10,9,9,116,104,105,115,46,
2117 119,104,101,110,108,111,99,107,101,100,46,112,117,115,104,40,
2118 102,117,110,99,116,105,111,110,40,41,32,123,10,9,9,9,
2119 99,111,110,115,111,108,101,46,108,111,103,40,34,104,101,108,
2120 100,32,109,111,117,115,101,100,111,119,110,34,41,59,10,9,
2121 9,9,36,40,115,101,108,102,46,99,41,46,116,114,105,103,
2122 103,101,114,40,120,101,41,59,10,9,9,9,114,101,116,117,
2123 114,110,32,102,97,108,115,101,59,10,9,9,125,41,59,10,
2124 9,9,114,101,116,117,114,110,32,102,97,108,115,101,59,10,
2125 9,125,59,10,10,9,116,104,105,115,46,116,109,117,112,32,
2126 61,32,102,117,110,99,116,105,111,110,40,101,41,32,123,10,
2127 9,9,101,46,112,114,101,118,101,110,116,68,101,102,97,117,
2128 108,116,40,41,59,10,9,9,116,104,105,115,46,109,114,108,
2129 115,101,40,101,41,59,10,9,9,116,104,105,115,46,101,118,
2130 120,121,40,101,41,59,10,9,9,105,102,40,116,104,105,115,
2131 46,98,117,116,116,111,110,115,32,61,61,32,48,41,32,123,
2132 10,9,9,9,116,104,105,115,46,115,101,108,101,99,116,101,
2133 110,100,40,41,59,10,9,9,125,10,9,125,59,10,10,9,
2134 116,104,105,115,46,116,108,111,99,107,110,109,117,112,32,61,
2135 32,102,117,110,99,116,105,111,110,40,41,32,123,10,9,9,
2136 105,102,40,116,104,105,115,46,105,115,108,111,99,107,101,100,
2137 41,32,123,10,9,9,9,114,101,116,117,114,110,32,116,104,
2138 105,115,46,116,109,117,112,40,101,41,59,10,9,9,125,10,
2139 9,9,105,102,40,33,116,104,105,115,46,108,111,99,107,105,
2140 110,103,41,32,123,10,9,9,9,116,104,105,115,46,108,111,
2141 99,107,105,110,103,32,61,32,116,114,117,101,59,10,9,9,
2142 9,116,104,105,115,46,112,111,115,116,40,91,34,104,111,108,
2143 100,34,93,41,59,10,9,9,9,99,111,110,115,111,108,101,
2144 46,108,111,103,40,34,104,111,108,100,105,110,103,46,46,46,
2145 34,41,59,10,9,9,125,10,9,9,118,97,114,32,115,101,
2146 108,102,32,61,32,116,104,105,115,59,10,9,9,118,97,114,
2147 32,120,101,32,61,32,106,81,117,101,114,121,46,69,118,101,
2148 110,116,40,34,109,111,117,115,101,117,112,34,41,59,10,9,
2149 9,120,101,46,119,104,105,99,104,32,61,32,101,46,119,104,
2150 105,99,104,59,10,9,9,120,101,46,112,97,103,101,88,32,
2151 61,32,101,46,112,97,103,101,88,59,10,9,9,120,101,46,
2152 112,97,103,101,89,32,61,32,101,46,112,97,103,101,89,59,
2153 10,9,9,120,101,46,112,114,101,118,101,110,116,68,101,102,
2154 97,117,108,116,32,61,32,102,117,110,99,116,105,111,110,40,
2155 41,123,125,59,10,9,9,116,104,105,115,46,119,104,101,110,
3173 108,111,99,107,101,100,46,112,117,115,104,40,102,117,110,99,2156 108,111,99,107,101,100,46,112,117,115,104,40,102,117,110,99,
3174 116,105,111,110,40,41,32,123,10,9,9,99,111,110,115,111,2157 116,105,111,110,40,41,32,123,10,9,9,9,99,111,110,115,
3175 108,101,46,108,111,103,40,34,104,101,108,100,32,107,101,121,2158 111,108,101,46,108,111,103,40,34,104,101,108,100,32,109,111,
3176 100,111,119,110,34,41,59,10,9,9,36,40,115,101,108,102,2159 117,115,101,117,112,34,41,59,10,9,9,9,36,40,115,101,
3177 41,46,116,114,105,103,103,101,114,40,120,101,41,59,10,9,2160 108,102,46,99,41,46,116,114,105,103,103,101,114,40,120,101,
3178 9,114,101,116,117,114,110,32,102,97,108,115,101,59,10,9,2161 41,59,10,9,9,9,114,101,116,117,114,110,32,102,97,108,
3179 125,41,59,10,9,114,101,116,117,114,110,32,116,107,101,121,2162 115,101,59,10,9,9,125,41,59,10,9,9,114,101,116,117,
3180 100,111,119,110,46,99,97,108,108,40,116,104,105,115,44,32,2163 114,110,32,102,97,108,115,101,59,10,9,125,59,10,10,9,
3181 101,44,32,116,114,117,101,41,59,10,125,10,10,102,117,110,2164 116,104,105,115,46,108,111,99,107,101,100,32,61,32,102,117,
3182 99,116,105,111,110,32,116,108,111,99,107,110,101,118,107,101,2165 110,99,116,105,111,110,40,41,32,123,10,9,9,105,102,40,
3183 121,40,101,41,32,123,10,9,100,111,110,116,98,117,98,98,2166 116,104,105,115,46,105,115,108,111,99,107,101,100,41,10,9,
3184 108,101,40,101,41,59,10,9,105,102,40,116,104,105,115,46,2167 9,9,114,101,116,117,114,110,59,10,9,9,105,102,40,116,
3185 105,115,108,111,99,107,101,100,41,32,123,10,9,9,114,101,2168 104,105,115,46,108,111,99,107,105,110,103,41,32,123,10,9,
3186 116,117,114,110,32,116,101,118,107,101,121,46,99,97,108,108,2169 9,9,116,104,105,115,46,108,111,99,107,105,110,103,32,61,
3187 40,116,104,105,115,44,32,101,41,59,10,9,125,10,9,105,2170 32,102,97,108,115,101,59,10,9,9,9,116,104,105,115,46,
3188 102,40,33,116,104,105,115,46,108,111,99,107,105,110,103,41,2171 105,115,108,111,99,107,101,100,32,61,32,116,114,117,101,59,
3189 32,123,10,9,9,116,104,105,115,46,108,111,99,107,105,110,2172 10,9,9,9,116,104,105,115,46,107,101,121,100,111,119,110,
2173 32,61,32,116,104,105,115,46,116,107,101,121,100,111,119,110,
2174 59,10,9,9,9,116,104,105,115,46,107,101,121,112,114,101,
2175 115,115,32,61,32,116,104,105,115,46,116,107,101,121,112,114,
2176 101,115,115,59,10,9,9,9,116,104,105,115,46,107,101,121,
2177 117,112,32,61,32,116,104,105,115,46,116,107,101,121,117,112,
2178 59,10,9,9,9,116,104,105,115,46,109,100,111,119,110,32,
2179 61,32,116,104,105,115,46,116,109,100,111,119,110,59,10,9,
2180 9,9,116,104,105,115,46,109,117,112,32,61,32,116,104,105,
2181 115,46,116,109,117,112,59,10,9,9,9,102,111,114,40,118,
2182 97,114,32,105,32,61,32,48,59,32,105,32,60,32,116,104,
2183 105,115,46,119,104,101,110,108,111,99,107,101,100,46,108,101,
2184 110,103,116,104,59,32,105,43,43,41,32,123,10,9,9,9,
2185 9,116,104,105,115,46,119,104,101,110,108,111,99,107,101,100,
2186 91,105,93,40,41,59,10,9,9,9,125,10,9,9,9,116,
2187 104,105,115,46,119,104,101,110,108,111,99,107,101,100,32,61,
2188 32,91,93,59,10,9,9,125,10,9,125,59,10,10,9,116,
2189 104,105,115,46,117,110,108,111,99,107,101,100,32,61,32,102,
2190 117,110,99,116,105,111,110,40,41,32,123,10,9,9,116,104,
2191 105,115,46,105,115,108,111,99,107,101,100,32,61,32,102,97,
2192 108,115,101,59,10,9,9,116,104,105,115,46,108,111,99,107,
2193 105,110,103,32,61,32,102,97,108,115,101,59,10,9,9,116,
2194 104,105,115,46,109,117,115,116,117,110,108,111,99,107,32,61,
2195 32,102,97,108,115,101,59,10,9,9,116,104,105,115,46,119,
2196 104,101,110,108,111,99,107,101,100,32,61,32,91,93,59,10,
2197 9,9,116,104,105,115,46,107,101,121,100,111,119,110,32,61,
2198 32,116,104,105,115,46,116,108,111,99,107,110,107,101,121,100,
2199 111,119,110,59,10,9,9,116,104,105,115,46,107,101,121,112,
2200 114,101,115,115,32,61,32,116,104,105,115,46,116,108,111,99,
2201 107,110,107,101,121,112,114,101,115,115,59,10,9,9,116,104,
2202 105,115,46,107,101,121,117,112,32,61,32,116,104,105,115,46,
2203 116,108,111,99,107,110,107,101,121,117,112,59,10,9,9,116,
2204 104,105,115,46,109,100,111,119,110,32,61,32,116,104,105,115,
2205 46,108,111,99,107,110,109,100,111,119,110,59,10,9,9,116,
2206 104,105,115,46,109,117,112,32,61,32,116,104,105,115,46,116,
2207 108,111,99,107,110,109,117,112,59,10,9,9,116,104,105,115,
2208 46,112,111,115,116,40,91,34,116,105,99,107,34,44,32,34,
2209 34,43,116,104,105,115,46,112,48,44,32,34,34,43,116,104,
2210 105,115,46,112,49,93,41,59,10,9,9,116,104,105,115,46,
2211 112,111,115,116,40,91,34,114,108,115,101,100,34,93,41,59,
2212 10,9,9,47,47,32,99,111,108,108,97,112,115,101,32,116,
2213 104,101,32,115,101,108,101,99,116,105,111,110,32,111,114,32,
2214 111,116,104,101,114,39,115,32,109,105,103,104,116,32,105,110,
2215 115,101,114,116,32,105,110,32,116,104,101,32,109,105,100,100,
2216 108,101,46,10,9,9,105,102,40,116,104,105,115,46,112,48,
2217 32,33,61,32,116,104,105,115,46,112,49,41,32,123,10,9,
2218 9,9,116,104,105,115,46,115,101,116,115,101,108,40,116,104,
2219 105,115,46,112,48,44,32,116,104,105,115,46,112,49,44,32,
2220 116,114,117,101,41,59,10,9,9,125,10,9,125,59,10,10,
2221 9,116,104,105,115,46,107,101,121,100,111,119,110,32,61,32,
2222 116,104,105,115,46,116,108,111,99,107,110,107,101,121,100,111,
2223 119,110,59,10,9,116,104,105,115,46,107,101,121,112,114,101,
2224 115,115,32,61,32,116,104,105,115,46,116,108,111,99,107,110,
2225 107,101,121,112,114,101,115,115,59,10,9,116,104,105,115,46,
2226 107,101,121,117,112,32,61,32,116,104,105,115,46,116,108,111,
2227 99,107,110,107,101,121,117,112,59,10,9,116,104,105,115,46,
2228 109,100,111,119,110,32,61,32,116,104,105,115,46,108,111,99,
2229 107,110,109,100,111,119,110,59,10,9,116,104,105,115,46,109,
2230 117,112,32,61,32,116,104,105,115,46,116,108,111,99,107,110,
2231 109,117,112,59,10,10,9,116,104,105,115,46,109,101,110,116,
2232 101,114,32,61,32,102,117,110,99,116,105,111,110,40,101,41,
2233 32,123,10,9,9,105,102,40,115,101,108,101,99,116,105,110,
2234 103,41,32,123,10,9,9,9,114,101,116,117,114,110,59,10,
2235 9,9,125,10,9,9,118,97,114,32,120,32,61,32,119,105,
2236 110,100,111,119,46,115,99,114,111,108,108,88,59,10,9,9,
2237 118,97,114,32,121,32,61,32,119,105,110,100,111,119,46,115,
2238 99,114,111,108,108,89,59,10,9,9,36,40,34,35,34,32,
2239 43,32,116,104,105,115,46,105,100,32,41,46,102,111,99,117,
2240 115,40,41,59,10,9,9,119,105,110,100,111,119,46,115,99,
2241 114,111,108,108,84,111,40,120,44,32,121,41,59,10,9,9,
2242 105,102,40,116,104,105,115,46,105,115,108,111,99,107,101,100,
2243 32,124,124,32,116,104,105,115,46,108,111,99,107,105,110,103,
2244 41,32,123,10,9,9,9,114,101,116,117,114,110,59,10,9,
2245 9,125,10,9,9,116,104,105,115,46,108,111,99,107,105,110,
3190 103,32,61,32,116,114,117,101,59,10,9,9,116,104,105,115,2246 103,32,61,32,116,114,117,101,59,10,9,9,116,104,105,115,
3191 46,112,111,115,116,40,91,34,104,111,108,100,34,93,41,59,2247 46,112,111,115,116,40,91,34,104,111,108,100,34,93,41,59,
3192 10,9,9,99,111,110,115,111,108,101,46,108,111,103,40,34,2248 10,9,9,99,111,110,115,111,108,101,46,108,111,103,40,34,
3193 104,111,108,100,105,110,103,46,46,46,34,41,59,10,9,125,2249 104,111,108,100,105,110,103,46,46,46,34,41,59,10,9,125,
3194 10,9,118,97,114,32,115,101,108,102,32,61,32,116,104,105,2250 59,10,10,9,116,104,105,115,46,109,119,104,101,101,108,32,
3195 115,59,10,9,118,97,114,32,120,101,32,61,32,106,81,117,2251 61,32,102,117,110,99,116,105,111,110,40,101,41,32,123,10,
3196 101,114,121,46,69,118,101,110,116,40,34,107,101,121,112,114,2252 9,9,101,46,115,116,111,112,80,114,111,112,97,103,97,116,
3197 101,115,115,34,41,59,10,9,120,101,46,119,104,105,99,104,2253 105,111,110,40,41,59,10,9,9,105,102,40,33,116,104,105,
3198 32,61,32,101,46,119,104,105,99,104,59,10,9,120,101,46,2254 115,46,105,115,108,111,99,107,101,100,32,38,38,32,33,116,
3199 107,101,121,67,111,100,101,32,61,32,101,46,107,101,121,67,2255 104,105,115,46,108,111,99,107,105,110,103,41,32,123,10,9,
3200 111,100,101,59,10,9,120,101,46,99,116,114,108,75,101,121,2256 9,9,116,104,105,115,46,108,111,99,107,105,110,103,32,61,
3201 32,61,32,101,46,99,116,114,108,75,101,121,59,10,9,120,2257 32,116,114,117,101,59,10,9,9,9,116,104,105,115,46,112,
3202 101,46,109,101,116,97,75,101,121,32,61,32,101,46,109,101,2258 111,115,116,40,91,34,104,111,108,100,34,93,41,59,10,9,
3203 116,97,75,101,121,59,10,9,120,101,46,112,114,101,118,101,2259 9,9,99,111,110,115,111,108,101,46,108,111,103,40,34,104,
3204 110,116,68,101,102,97,117,108,116,32,61,32,102,117,110,99,2260 111,108,100,105,110,103,46,46,46,34,41,59,10,9,9,9,
3205 116,105,111,110,40,41,123,125,59,10,9,116,104,105,115,46,2261 114,101,116,117,114,110,32,102,97,108,115,101,59,10,9,9,
3206 119,104,101,110,108,111,99,107,101,100,46,112,117,115,104,40,2262 125,10,9,9,116,114,121,32,123,10,9,9,9,101,46,112,
3207 102,117,110,99,116,105,111,110,40,41,32,123,10,9,9,99,2263 114,101,118,101,110,116,68,101,102,97,117,108,116,40,41,59,
3208 111,110,115,111,108,101,46,108,111,103,40,34,104,101,108,100,2264 10,9,9,9,118,97,114,32,100,32,61,32,101,46,119,104,
3209 32,107,101,121,112,114,101,115,115,34,41,59,10,9,9,36,2265 101,101,108,68,101,108,116,97,32,42,32,45,49,59,10,9,
3210 40,115,101,108,102,41,46,116,114,105,103,103,101,114,40,120,2266 9,9,118,97,114,32,115,32,61,32,49,59,10,9,9,9,
3211 101,41,59,10,9,9,114,101,116,117,114,110,32,102,97,108,2267 105,102,40,100,32,60,32,48,41,123,10,9,9,9,9,100,
3212 115,101,59,10,9,125,41,59,10,9,114,101,116,117,114,110,2268 32,61,32,45,100,59,10,9,9,9,9,100,32,61,32,49,
3213 32,116,101,118,107,101,121,46,99,97,108,108,40,116,104,105,2269 32,43,32,77,97,116,104,46,102,108,111,111,114,40,100,47,
3214 115,44,32,101,44,32,116,114,117,101,41,59,10,125,10,10,2270 49,48,41,59,10,9,9,9,9,105,102,40,116,104,105,115,
3215 102,117,110,99,116,105,111,110,32,116,108,111,99,107,110,107,2271 46,115,99,114,111,108,108,100,111,119,110,40,100,41,41,123,
3216 101,121,117,112,40,101,41,32,123,10,9,100,111,110,116,98,2272 10,9,9,9,9,9,116,104,105,115,46,117,110,116,105,99,
3217 117,98,98,108,101,40,101,41,59,10,9,105,102,40,116,104,2273 107,40,41,59,10,9,9,9,9,9,116,104,105,115,46,114,
3218 105,115,46,105,115,108,111,99,107,101,100,41,32,123,10,9,2274 101,100,114,97,119,116,101,120,116,40,41,59,10,9,9,9,
3219 9,114,101,116,117,114,110,32,116,107,101,121,117,112,46,99,2275 9,125,10,9,9,9,125,101,108,115,101,123,10,9,9,9,
3220 97,108,108,40,116,104,105,115,44,32,101,41,59,10,9,125,2276 9,100,32,61,32,49,32,43,32,77,97,116,104,46,102,108,
3221 10,9,105,102,40,33,116,104,105,115,46,108,111,99,107,105,2277 111,111,114,40,100,47,49,48,41,59,10,9,9,9,9,105,
3222 110,103,41,32,123,10,9,9,116,104,105,115,46,108,111,99,2278 102,40,116,104,105,115,46,115,99,114,111,108,108,117,112,40,
3223 107,105,110,103,32,61,32,116,114,117,101,59,10,9,9,116,2279 100,41,41,123,10,9,9,9,9,9,116,104,105,115,46,117,
3224 104,105,115,46,112,111,115,116,40,91,34,104,111,108,100,34,2280 110,116,105,99,107,40,41,59,10,9,9,9,9,9,116,104,
3225 93,41,59,10,9,9,99,111,110,115,111,108,101,46,108,111,2281 105,115,46,114,101,100,114,97,119,116,101,120,116,40,41,59,
3226 103,40,34,104,111,108,100,105,110,103,46,46,46,34,41,59,2282 10,9,9,9,9,125,10,9,9,9,125,10,9,9,125,99,
3227 10,9,125,10,9,118,97,114,32,115,101,108,102,32,61,32,2283 97,116,99,104,40,101,120,41,123,10,9,9,9,99,111,110,
3228 116,104,105,115,59,10,9,118,97,114,32,120,101,32,61,32,2284 115,111,108,101,46,108,111,103,40,34,116,109,119,104,101,101,
3229 106,81,117,101,114,121,46,69,118,101,110,116,40,34,107,101,2285 108,58,32,34,32,43,32,101,120,41,59,10,9,9,125,10,
3230 121,117,112,34,41,59,10,9,120,101,46,119,104,105,99,104,2286 9,125,59,10,10,9,116,104,105,115,46,109,109,111,118,101,
3231 32,61,32,101,46,119,104,105,99,104,59,10,9,120,101,46,2287 32,61,32,102,117,110,99,116,105,111,110,40,101,41,32,123,
3232 107,101,121,67,111,100,101,32,61,32,101,46,107,101,121,67,2288 10,9,9,105,102,40,116,104,105,115,46,105,115,108,111,99,
3233 111,100,101,59,10,9,120,101,46,99,116,114,108,75,101,121,2289 107,101,100,32,124,124,32,116,104,105,115,46,108,111,99,107,
3234 32,61,32,101,46,99,116,114,108,75,101,121,59,10,9,120,2290 105,110,103,41,32,123,10,9,9,9,114,101,116,117,114,110,
3235 101,46,109,101,116,97,75,101,121,32,61,32,101,46,109,101,2291 32,116,104,105,115,46,101,118,120,121,40,101,41,59,10,9,
3236 116,97,75,101,121,59,10,9,120,101,46,112,114,101,118,101,2292 9,125,10,9,9,116,104,105,115,46,108,111,99,107,105,110,
3237 110,116,68,101,102,97,117,108,116,32,61,32,102,117,110,99,
3238 116,105,111,110,40,41,123,125,59,10,9,116,104,105,115,46,
3239 119,104,101,110,108,111,99,107,101,100,46,112,117,115,104,40,
3240 102,117,110,99,116,105,111,110,40,41,32,123,10,9,9,99,
3241 111,110,115,111,108,101,46,108,111,103,40,34,104,101,108,100,
3242 32,107,101,121,117,112,34,41,59,10,9,9,36,40,115,101,
3243 108,102,41,46,116,114,105,103,103,101,114,40,120,101,41,59,
3244 10,9,9,114,101,116,117,114,110,32,102,97,108,115,101,59,
3245 10,9,125,41,59,10,9,114,101,116,117,114,110,32,116,107,
3246 101,121,117,112,46,99,97,108,108,40,116,104,105,115,44,32,
3247 101,44,32,116,114,117,101,41,59,10,125,10,10,102,117,110,
3248 99,116,105,111,110,32,116,108,111,99,107,110,109,100,111,119,
3249 110,40,101,41,32,123,10,9,105,102,40,116,104,105,115,46,
3250 105,115,108,111,99,107,101,100,41,32,123,10,9,9,114,101,
3251 116,117,114,110,32,116,109,100,111,119,110,46,99,97,108,108,
3252 40,116,104,105,115,44,32,101,41,59,10,9,125,10,9,105,
3253 102,40,33,116,104,105,115,46,108,111,99,107,105,110,103,41,
3254 32,123,10,9,9,116,104,105,115,46,108,111,99,107,105,110,
3255 103,32,61,32,116,114,117,101,59,10,9,9,116,104,105,115,2293 103,32,61,32,116,114,117,101,59,10,9,9,116,104,105,115,
3256 46,112,111,115,116,40,91,34,104,111,108,100,34,93,41,59,2294 46,112,111,115,116,40,91,34,104,111,108,100,34,93,41,59,
3257 10,9,9,99,111,110,115,111,108,101,46,108,111,103,40,34,2295 10,9,9,99,111,110,115,111,108,101,46,108,111,103,40,34,
3258 104,111,108,100,105,110,103,46,46,46,34,41,59,10,9,125,
3259 10,9,118,97,114,32,115,101,108,102,32,61,32,116,104,105,
3260 115,59,10,9,118,97,114,32,120,101,32,61,32,106,81,117,
3261 101,114,121,46,69,118,101,110,116,40,34,109,111,117,115,101,
3262 100,111,119,110,34,41,59,10,9,120,101,46,119,104,105,99,
3263 104,32,61,32,101,46,119,104,105,99,104,59,10,9,120,101,
3264 46,112,97,103,101,88,32,61,32,101,46,112,97,103,101,88,
3265 59,10,9,120,101,46,112,97,103,101,89,32,61,32,101,46,
3266 112,97,103,101,89,59,10,9,120,101,46,112,114,101,118,101,
3267 110,116,68,101,102,97,117,108,116,32,61,32,102,117,110,99,
3268 116,105,111,110,40,41,123,125,59,10,9,116,104,105,115,46,
3269 119,104,101,110,108,111,99,107,101,100,46,112,117,115,104,40,
3270 102,117,110,99,116,105,111,110,40,41,32,123,10,9,9,99,
3271 111,110,115,111,108,101,46,108,111,103,40,34,104,101,108,100,
3272 32,109,111,117,115,101,100,111,119,110,34,41,59,10,9,9,
3273 36,40,115,101,108,102,41,46,116,114,105,103,103,101,114,40,
3274 120,101,41,59,10,9,9,114,101,116,117,114,110,32,102,97,
3275 108,115,101,59,10,9,125,41,59,10,9,114,101,116,117,114,
3276 110,32,102,97,108,115,101,59,10,125,10,10,102,117,110,99,
3277 116,105,111,110,32,116,108,111,99,107,110,109,117,112,40,101,
3278 41,32,123,10,9,105,102,40,116,104,105,115,46,105,115,108,
3279 111,99,107,101,100,41,32,123,10,9,9,114,101,116,117,114,
3280 110,32,116,109,117,112,46,99,97,108,108,40,116,104,105,115,
3281 44,32,101,41,59,10,9,125,10,9,105,102,40,33,116,104,
3282 105,115,46,108,111,99,107,105,110,103,41,32,123,10,9,9,
3283 116,104,105,115,46,108,111,99,107,105,110,103,32,61,32,116,
3284 114,117,101,59,10,9,9,116,104,105,115,46,112,111,115,116,
3285 40,91,34,104,111,108,100,34,93,41,59,10,9,9,99,111,
3286 110,115,111,108,101,46,108,111,103,40,34,104,111,108,100,105,
3287 110,103,46,46,46,34,41,59,10,9,125,10,9,118,97,114,
3288 32,115,101,108,102,32,61,32,116,104,105,115,59,10,9,118,

60358 more lines aren’t shown here.

net/ink/js/latin.js+1−1
@@ -1,6 +1,6 @@
1"use strict";1"use strict";
2/*2/*
3 Plan 9 like latin composition.3 Clive's Plan 9 like latin composition.
4 kmap.islatin(str): prefix or full latin sequence4 kmap.islatin(str): prefix or full latin sequence
5 kmap.latin(str): str for a full latin sequence.5 kmap.latin(str): str for a full latin sequence.
6*/6*/
net/ink/js/lines.js+1049−0
@@ -0,0 +1,1049 @@
1"use strict";
2/*
3 text frame support
4*/
5
6/*
7 * Hack to make sure the fixed and var width fonts exist, and
8 * global font names for those variants.
9 */
10var tffixed = "monospace";
11var tfvar = "Lucida Grande"; // or Verdana
12var fontscheckedout = false;
13var tdebug = false;
14
15function checkoutfonts(ctx) {
16 if(fontscheckedout)
17 return;
18 fontscheckedout = true;
19 var old = ctx.font;
20 ctx.font = "50px Arial";
21 var sz = ctx.measureText("ABC").width;
22 ctx.font = "50px " + tffixed;
23 if(ctx.measureText("ABC").width == sz)
24 tffixed = "Courier";
25 ctx.font = "50px " + tfvar;
26 if(ctx.measureText("ABC").width == sz)
27 tffixed = "Arial";
28 ctx.font = old;
29}
30
31var wordre = null;
32function iswordchar(c) {
33 if(!wordre)
34 wordre = /\w/;
35 return wordre.test(c);
36}
37
38function islongwordchar(c) {
39 if(!wordre)
40 wordre = /\w/;
41 return c == '-' || c == '(' || c == ')' || c == '/' || c == '.' || c == ':' || c == '#' || c == ',' || wordre.test(c);
42}
43
44function islparen(c) {
45 return "([{<'`\"".indexOf(c) >= 0;
46}
47
48function isrparen(c) {
49 return ")]}>'`\"".indexOf(c) >= 0;
50}
51
52function rparen(c) {
53 var i = "([{<".indexOf(c);
54 if(i < 0)
55 return c;
56 return ")]}>".charAt(i);
57}
58
59function lparen(c) {
60 var i = ")]}>".indexOf(c);
61 if(i < 0)
62 return c;
63 return "([{<".charAt(i);
64}
65
66
67function Line(lni, off, txt, eol) {
68 this.lni = lni;
69 this.off = off;
70 this.txt = txt;
71 this.eol = eol;
72 this.next = null;
73 this.prev = null;
74
75 // not toString(), by intention.
76 this.str = function() {
77 if(this.eol) {
78 return ""+this.off+"["+lni+"]"+" =\t[" + this.txt + "\\n]";
79 } else {
80 return ""+this.off+"["+lni+"]"+" =\t[" + this.txt + "]";
81 }
82 };
83
84 // len counts the \n, this.txt.length does not.
85 this.len = function() {
86 if(this.eol) {
87 return this.txt.length+1;
88 }
89 return this.txt.length;
90 };
91
92 this.split = function(lnoff, addnl) {
93 var nln = new Line(this.lni+1, this.off+lnoff+1, "", this.eol);
94 var lnlen = this.txt.length;
95 if(lnoff < lnlen) {
96 nln.txt = this.txt.slice(lnoff, lnlen);
97 this.txt = this.txt.slice(0, lnoff);
98 }
99 this.eol = addnl;
100 nln.next = this.next;
101 if(nln.next) {
102 nln.next.prev = nln;
103 }
104 nln.prev = this;
105 this.next = nln;
106 };
107
108 this.join = function() {
109 if(!this.next) {
110 return;
111 }
112 this.txt += this.next.txt;
113 this.eol = this.next.eol;
114 this.next = this.next.next;
115 if(this.next) {
116 this.next.prev = this;
117 }
118 };
119
120 this.ins = function(t, lnoff) {
121 if(lnoff == this.txt.length) {
122 this.txt += t;
123 } else {
124 this.txt = this.txt.slice(0, lnoff) +
125 t + this.txt.slice(lnoff, this.txt.length);
126 }
127 };
128
129 // does not del eol
130 this.del = function(lnoff, n) {
131 var lnlen = this.txt.lenth;
132 if(lnoff+n > lnlen) {
133 n = lnlen - lnoff;
134 }
135 this.txt = this.txt.slice(0,lnoff) + this.txt.slice(lnoff+n, lnlen);
136 return n;
137 };
138
139 this.delline = function() {
140 if(this.prev) {
141 this.prev.next = this.next;
142 }
143 if(this.next) {
144 this.next.prev = this.prev;
145 }
146 };
147
148 this.renumber = function() {
149 for(var ln = this; ln != null; ln = ln.next) {
150 if(ln.prev == null) {
151 ln.off = 0;
152 ln.lni = 0;
153 } else {
154 ln.off = ln.prev.off + ln.prev.len();
155 ln.lni = ln.prev.lni+1;
156 }
157 }
158 };
159}
160
161function Lines(els) {
162 this.clear = function() {
163 this.lns = new Line(0, 0, "", false);
164 this.ln0 = this.lns; // first line shown
165 this.lne = this.lns; // last line
166 this.nrunes = 0;
167 this.p0 = 0;
168 this.p1 = 0;
169 this.marks = []; // of {name: mark, pos: p}
170 };
171 this.clear();
172 this.tabstop = 4;
173
174 // these must be redefined to draw the lines.
175 this.untick = function(){};
176 this.mayscrollins = function(ln){};
177 this.mayscrolldel = function(ln){};
178 this.scrolldown = function(n){ return 0;};
179 this.scrollup = function(n){ return 0;};
180 this.redrawtext = function(){};
181 this.wrapoff = function(t){ return t.length; };
182 this.frlninsdel = function(ln, ninsdel){};
183
184 // pos0 is optional (0 by default).
185 this.tabtxt = function(t, pos0) {
186 if(t.indexOf('\t') < 0)
187 return t;
188 var s = "";
189 var pos = 0;
190 if(pos0) {
191 pos = pos0;
192 }
193 for(var i = 0; i < t.length; i++){
194 var r = t.charAt(i);
195 if(r == '\t') {
196 do {
197 s += " ";
198 pos++;
199 }while(pos%this.tabstop);
200 }else{
201 pos++;
202 s += r;
203 }
204 }
205 return s;
206 };
207
208 this.markins = function(p0, n) {
209 for(var i = 0; i < this.marks.length; i++){
210 var m = this.marks[i];
211 if(m.pos > p0) {
212 m.pos += n;
213 }
214 }
215 };
216
217 this.markdel = function(p0, p1) {
218 for(var i = 0; i < this.marks.length; i++){
219 var m = this.marks[i];
220 if(m.pos <= p0) {
221 continue;
222 }
223 var mp1 = p1;
224 if(mp1 > m.pos) {
225 mp1 = m.pos;
226 }
227 m.pos -= (mp1-p0);
228 }
229 };
230
231 this.setmark = function(mark, p) {
232 for(var i = 0; i < this.marks.length; i++){
233 var m = this.marks[i];
234 if(m.name == mark) {
235 m.pos = p;
236 return;
237 }
238 }
239 this.marks.push({name: mark, pos: p});
240 };
241
242 this.getmark = function(mark) {
243 for(var i = 0; i < this.marks.length; i++){
244 var m = this.marks[i];
245 if(m.name == mark) {
246 return m;
247 }
248 }
249 return null;
250 };
251
252 this.delmark = function(mark) {
253 for(var i = 0; i < this.marks.length; i++){
254 var m = this.marks[i];
255 if(m.name == mark) {
256 this.marks.splice(i, 1);
257 break;
258 }
259 }
260 }
261
262 this.addln = function(ln) {
263 ln.prev = this.lne;
264 this.lne = ln;
265 if(ln.prev) {
266 ln.lni = ln.prev.lni+1;
267 ln.off = ln.prev.off + ln.prev.len();
268 ln.prev.next = ln;
269 } else {
270 ln.lni = 0;
271 ln.off = 0;
272 this.lns = ln;
273 this.ln0 = ln;
274 }
275 this.nrunes += ln.len();
276 };
277
278 // seek a line (first is 0).
279 this.seekln = function(pos) {
280 var ln = this.lns;
281 for(var ln = this.lns; ln; ln = ln.next) {
282 if(pos-- <= 0) {
283 return ln;
284 }
285 }
286 return this.lns;
287 };
288
289 // return [line, off at line] or [null, 0]
290 // if pos is at the end of a line, that line is returned,
291 // and not the next line at 0.
292 this.seek = function(pos) {
293 for(var ln = this.lns; ln; ln = ln.next) {
294 if(pos >= ln.off && pos <= ln.off + ln.txt.length) {
295 return [ln, pos-ln.off];
296 }
297 }
298 return [null, 0];
299 };
300
301 // return the pos for a seek
302 this.seekpos = function(ln, lnoff) {
303 if(ln == null) {
304 return 0;
305 }
306 if(lnoff > ln.txt.length) {
307 return ln.off + ln.len();
308 }
309 return ln.off + lnoff;
310 };
311
312 this.reformat = function(ln0) {
313 // TODO: should get an indication regarding at which
314 // point it's safe to assume that no further reformat
315 // work is needed and stop there.
316 for(var ln = ln0; ln != null; ) {
317 // merge text on the same line
318 while(!ln.eol && ln.next != null) {
319 if(ln.next == this.lne) {
320 this.lne = ln;
321 }
322 if(ln.next == this.ln0) {
323 this.ln0 = ln;
324 }
325 ln.join();
326 }
327 // remove empty lines but keep an empty line at the end.
328 var next = ln.next;
329 if(ln.len() == 0 && ln.next) {
330 if(this.lne == ln) {
331 this.lne = ln.prev;
332 }
333 if(ln0 == ln) {
334 ln0 = ln.next ? ln.next : ln.prev;
335 }
336 if(this.ln0 == ln) {
337 this.ln0 = ln.next ? ln.next : ln.prev;
338 }
339 if(this.lns == ln) {
340 this.lns = ln.next;
341 }
342 ln.delline();
343 }
344 ln = next;
345 }
346 // recompute wraps, offsets, and numbers.
347 for(var ln = ln0; ln != null; ln = ln.next) {
348 if(!ln.prev) {
349 ln.off = 0;
350 ln.lni = 0;
351 } else {
352 ln.off = ln.prev.off + ln.prev.len();
353 ln.lni = ln.prev.lni + 1;
354 }
355 var woff = this.wrapoff(ln.txt);
356 if(woff < ln.txt.length) {
357 ln.split(woff, false);
358 if(this.lne == ln) {
359 this.lne = ln.next;
360 }
361 }
362 }
363 // keep the empty line at the end
364 if(this.lne.eol) {
365 this.addln(new Line(0, 0, "", false));
366 }
367 // if ln0 moved to the end marker, backup if we can.
368 if(!ln0.next && ln0.prev) {
369 ln0 = ln0.prev;
370 }
371 if(0)this.dump();
372 return ln0;
373 };
374
375 // add a single line or a \n.
376 this.ins1 = function(t, dontscroll) {
377 this.untick();
378 this.markins(this.p0, t.length);
379 var xln, lnoff;
380 [xln, lnoff] = this.seek(this.p0);
381 if(!xln) {
382 console.log("Lines.ins: no line for p0");
383 return;
384 }
385 if(t == '\n') {
386 xln.split(lnoff, true);
387 if(this.lne === xln) {
388 this.lne = xln.next;
389 }
390 } else {
391 xln.ins(t, lnoff);
392 }
393 this.p0 += t.length;
394 this.p1 = this.p0;
395 this.nrunes += t.length;
396 if(t != '\n') {
397 var woff = this.wrapoff(xln.txt);
398 if(woff == xln.txt.length) {
399 // ins within a line, don't reformat; just redraw it.
400 xln.renumber();
401 this.frlninsdel(xln, +t.length);
402 return;
403 }
404 }
405 xln = this.reformat(xln);
406 if(!dontscroll) {
407 this.mayscrollins(xln);
408 }
409 this.redrawtext();
410 };
411
412 // add arbitrary text at p0
413 this.ins = function(s, dontscroll) {
414 var lns = s.split('\n');
415 for(var i = 0; i < lns.length; i++) {
416 if(lns[i].length > 0) {
417 this.ins1(lns[i], dontscroll);
418 }
419 if(i < lns.length-1) {
420 this.ins1('\n', dontscroll);
421 }
422 }
423 };
424
425 // del p0:p1 or last char if p0 == p1
426 this.del = function(dontscroll) {
427 if(this.p0 >= this.nrunes || this.p1 <= this.p0) {
428 return;
429 }
430 this.untick();
431 if(this.p0 > 0 && this.p0 == this.p1) {
432 this.p0--;
433 }
434 this.markdel(this.p0, this.p1);
435 var xln, lnoff;
436 [xln, lnoff] = this.seek(this.p0);
437 if(!xln) {
438 return;
439 }
440 var ndel = this.p1 - this.p0;
441 var tot = 0;
442 var xln0 = xln;
443 for(; tot < ndel && xln != null; xln = xln.next) {
444 var nd = xln.del(lnoff, ndel-tot);
445 tot += nd;
446 if(xln == xln0 && tot == ndel && xln.eol) {
447 // del within a line; don't reformat; redraw it.
448 this.nrunes -= tot;
449 this.p1 -= tot;
450 xln.renumber();
451 this.frlninsdel(xln, -tot);
452 return;
453 }
454 if(tot < ndel && xln.eol) {
455 xln.eol = false;
456 tot++;
457 }
458 lnoff = 0;
459 }
460 var mightscroll = (this.p1 >= xln0.off);
461 this.nrunes -= tot;
462 this.p1 -= tot;
463 xln0 = this.reformat(xln0);
464 this.redrawtext();
465 if(!dontscroll && mightscroll) {
466 this.mayscrolldel(xln0);
467 }
468 };
469
470 this.get = function(p0, p1) {
471 if(p0 == p1 || p0 >= this.nrunes || p1 < p0 || p1 <= 0) {
472 return "";
473 }
474 var ln0, lnoff;
475 [ln0, lnoff] = this.seek(p0);
476 if(ln0 == null) {
477 return "";
478 }
479 var ln = ln0;
480 var nget = p1 - p0;
481 var off = p0 - ln.off;
482 var tot = 0;
483 var txt = "";
484 do{
485 var ng = nget-tot;
486 if(off+ng > ln.txt.length) {
487 ng = ln.txt.length - off;
488 }
489 txt += ln.txt.slice(off, off+ng);
490 tot += ng;
491 if(tot < nget && ln.eol){
492 txt += "\n";
493 tot++;
494 }
495 ln = ln.next;
496 off = 0;
497 }while(tot < nget && ln != null);
498 return txt;
499 };
500
501 // returns [word, wp0, wp1]
502 this.getword = function(pos, long) {
503 if(pos < 0) {
504 return ["", 0, 0];
505 }
506 if(pos >= this.nrunes) {
507 return ["", this.nrunes, this.nrunes];
508 }
509 var ischar = iswordchar;
510 if(long) {
511 ischar = islongwordchar;
512 }
513 var ln, lnoff;
514 [ln, lnoff] = this.seek(pos);
515 if(ln == null) {
516 ln = this.lne;
517 }
518 var epos = pos;
519 var p0 = pos - ln.off;
520 if(p0 == ln.txt.length){
521 if(!ln.eol) {
522 return [ln.txt, ln.off, ln.off+ln.txt.length];
523 }
524 return [ln.txt+"\n", ln.off, ln.off+ln.txt.length+1];
525 }
526 // heuristic: if click at the right of lparen and not
527 // at rparen, use the lparen.
528 if(p0 > 0 && !isrparen(ln.txt.charAt(p0)) &&
529 islparen(ln.txt.charAt(p0-1))){
530 pos--;
531 p0--;
532 }
533 var p1 = p0;
534 var c = ln.txt.charAt(p0);
535 if(islparen(c)){
536 pos++;
537 var n = 1;
538 var rc = rparen(c);
539 var txt = "";
540 p1++;
541 epos++;
542 do {
543 for(; p1 < ln.txt.length; p1++, epos++) {
544 var x = ln.txt.charAt(p1);
545 if(x == rc)
546 n--;
547 else if(x == c)
548 n++;
549 if(n != 0)
550 txt += x;
551 if(n == 0)
552 return [txt, pos, epos-1];
553 }
554 if(ln.eol){
555 epos++;
556 txt += "\n";
557 }
558 ln = ln.next;
559 p1 = 0;
560 } while(n > 0 && ln != null);
561 return [txt, pos, epos];
562 }
563 if(isrparen(c)){
564 var n = 1;
565 var lc = lparen(c);
566 var txt = "";
567 do{
568 for(p0--; p0 >= 0; p0--){
569 x = ln.txt.charAt(p0);
570 if(x == lc)
571 n--;
572 else if(x == c)
573 n++;
574 if(n != 0){
575 pos--;
576 txt = x + txt;
577 }
578 if(n == 0)
579 return [txt, pos, epos];
580 }
581 ln = ln.prev;
582 if(ln != null){
583 p0 = ln.txt.length;
584 if(ln.eol){
585 pos--;
586 txt = "\n" + txt;
587 }
588 }
589 }while(n > 0 && ln != null);
590 return [txt, pos, epos];
591 }
592 if(!islongwordchar(c))
593 return [ln.txt.slice(p0, p1), pos, epos];
594 while(p0 > 0 && ischar(ln.txt.charAt(p0-1))){
595 pos--;
596 p0--;
597 }
598 while(p1 < ln.txt.length && ischar(ln.txt.charAt(p1))){
599 epos++;
600 p1++;
601 }
602 return [ln.txt.slice(p0, p1), pos, epos];
603 };
604
605 this.dump = function() {
606 var off = 0;
607 var i = 0;
608 for(var ln = this.lns; ln; ln = ln.next){
609 var n = ln.len();
610 var o = ln.off;
611 if(!o && !(o === 0)){
612 console.log("BAD off " + o + " in:");
613 o = off;
614 }
615 if(o != off){
616 console.log("BAD off " + o + " (!=" + off + ") in:");
617 off = o;
618 }
619 off += n;
620 console.log(""+ ln.str());
621 i++;
622 }
623 };
624}
625
626// Lines that know how to draw using a canvas
627function DrawLines(c) {
628 Lines.apply(this, arguments);
629 this.nlines = 0; // lines in window
630 this.frlines = 0; // lines with text
631 this.frsize = 0; // nb. of runes in frame
632 this.c = c; // canvas, perhaps it's this.
633 this.fontstyle = 'r';
634 this.tabstop = 4;
635 this.marginsz = 6;
636 this.tscale = 4; // scale must be even; we /2 without Math.floor
637
638 this.secondary = 0; // button for selection
639
640
641 this.tickimg = undefined; // tick image
642 this.tickx = 0;
643 this.ticky = 0;
644 this.saved = undefined; // saved image under tick
645
646 var ctx = c.getContext("2d", {alpha: false});
647 checkoutfonts(ctx);
648 ctx.fillStyle = "#FFFFEA";
649 var tabtext = Array(this.tabstop+1).join("X");
650
651 this.tabwid = ctx.measureText(tabtext).width;
652 // 14 pixels = 12pt font + 2pts of separation at the bottom,
653 // but we scale the canvas *tscale.
654 this.fontht = 14*this.tscale;
655
656 this.fixfont = function() {
657 var ctx = this.c.getContext("2d", {alpha: false});
658 var mod = "";
659 var style = "";
660 style = tfvar;
661 if(this.fontstyle.indexOf('r') === -1) {
662 style = tffixed;
663 }
664 if(this.fontstyle.indexOf('b') > -1) {
665 mod = "bold " + mod;
666 }
667 if(this.fontstyle.indexOf('i') > -1) {
668 mod = "italic " + mod;
669 }
670 // at scale 1, we keep two empty pts at the bottom.
671 var ht = this.fontht - 2*this.tscale;
672 ctx.font = mod + " " + ht+"px "+ style;
673 ctx.textBaseline="top";
674 };
675
676 var oldclear = this.clear;
677 this.clear = function() {
678 oldclear.call(this);
679 this.nlines = 0;
680 this.frlines = 0;
681 this.frsize = 0;
682 this.saved = undefined;
683 this.tickx = this.ticky = 0;
684 };
685
686 this.clearline = function(lni) {
687 var ctx = this.c.getContext("2d", {alpha: false});
688 var pos = (lni-this.ln0.lni)*this.fontht;
689 if(pos >= this.c.height) {
690 return false;
691 }
692 ctx.clearRect(1, pos, this.c.width-1, this.fontht);
693 return true;
694 };
695
696 this.mktick = function() {
697 var ctx = this.c.getContext("2d", {alpha: false});
698 var x = ctx.lineWidth;
699 ctx.lineWidth = 1;
700 var d = 3*this.tscale;
701 ctx.fillRect(0, 0, d, d);
702 ctx.fillRect(0, this.fontht-d, d, d);
703 ctx.moveTo(d/2, 0);
704 ctx.lineTo(d/2, this.fontht);
705 ctx.stroke();
706 ctx.lineWidth = x;
707 this.tickimg = ctx.getImageData(0, 0, d, this.fontht);
708 };
709
710 this.untick = function() {
711 if(!this.saved) {
712 return;
713 }
714 var ctx = this.c.getContext("2d", {alpha: false});
715 ctx.putImageData(this.saved, this.tickx, this.ticky);
716 this.saved = undefined;
717 };
718
719 this.tick = function(ctx, x, y) {
720 if(0)console.log("tick", x, y);
721 this.saved = ctx.getImageData(x, y, 3*this.tscale, this.fontht);
722 this.tickx = x;
723 this.ticky = y;
724 ctx.putImageData(this.tickimg, x, y);
725 };
726
727 // draw a line and return false if it's out of the draw space.
728 this.drawline = function(ln) {
729 var ctx = this.c.getContext("2d", {alpha: false});
730 var lnht = this.fontht;
731 var avail = this.c.width - 2*this.marginsz - 1;
732 var y = (ln.lni-this.ln0.lni)*lnht;
733 if(y >= this.c.height) {
734 return false;
735 }
736
737 // non-empty selection.
738 if(this.p0 != this.p1) {
739 if(this.p0 > ln.off+ln.txt.length || this.p1 < ln.off){
740 // unselected line
741 ctx.clearRect(1, y, this.c.width-this.marginsz-1, lnht);
742 var t = this.tabtxt(ln.txt);
743 ctx.fillText(t, this.marginsz, y);
744 return true;
745 }
746 // up to p0 unselected
747 var dx = this.marginsz;
748 var s0 = 0;
749 var s0pos = 0;
750 if(this.p0 > ln.off){
751 s0 = this.p0 - ln.off;
752 var s0t = this.tabtxt(ln.txt.slice(0, s0));
753 s0pos = s0t.length;
754 dx += ctx.measureText(s0t).width;
755 ctx.clearRect(1, y, dx, lnht);
756 ctx.fillText(s0t, this.marginsz, y);
757 }
758 // from p0 to p1 selected
759 var s1 = ln.txt.length - s0;
760 if(this.p1 < ln.off+ln.txt.length)
761 s1 = this.p1 - s0 - ln.off;
762 var s1t = this.tabtxt(ln.txt.slice(s0, s0+s1), s0pos);
763 var s1pos = s0pos + s1t.length;
764 var sx = ctx.measureText(s1t).width;
765 var old = ctx.fillStyle;
766 if(this.secondary >= 2) {
767 ctx.fillStyle = "#FF7575";
768 } else if(this.secondary) {
769 ctx.fillStyle = "#7373FF";
770 } else {
771 ctx.fillStyle = "#D1A0A0";
772 }
773 if(this.p1 > ln.off+ln.txt.length) {
774 ctx.fillRect(dx, y, this.c.width-dx-this.marginsz-1, lnht);
775 } else {
776 ctx.fillRect(dx, y, sx, lnht);
777 }
778 ctx.fillStyle = old;
779 ctx.fillText(s1t, dx, y);
780 if(this.p1 > ln.off+ln.txt.length) {
781 return true;
782 }
783 // from p1 unselected
784 ctx.clearRect(dx+sx, y, this.c.width-(dx+sx)-this.marginsz-1, lnht);
785 if(s1 >= ln.txt.length) {
786 return true;
787 }
788 var s2t = this.tabtxt(ln.txt.slice(s0+s1, ln.txt.length), s1pos);
789 ctx.fillText(s2t, dx+sx, y);
790 return true;
791 }
792
793 // unselected line
794 ctx.clearRect(1, y, this.c.width-this.marginsz-1, lnht);
795 var t = this.tabtxt(ln.txt);
796 ctx.fillText(t, this.marginsz, y);
797
798 if(this.p0 < ln.off || this.p0 > ln.off + ln.txt.length) {
799 return true;
800 }
801
802 // line with tick
803 var x = this.posdx(ln.txt, this.p0 - ln.off);
804 x += this.marginsz - 3*this.tscale/2; // a bit to the left
805 this.tick(ctx, x, y);
806 return true;
807 };
808
809 this.updatescrl = function() {
810 var ctx = this.c.getContext("2d", {alpha: false});
811 var y0 = this.ln0.lni / this.lne.lni * this.c.height;
812 var dy = this.frlines / this.lne.lni * this.c.height;
813
814 ctx.clearRect(this.c.width-this.marginsz, 0, this.marginsz, y0);
815 var old = ctx.fillStyle;
816 ctx.fillStyle = "#7373FF";
817 ctx.fillRect(this.c.width-this.marginsz, y0, this.marginsz, dy);
818 ctx.fillStyle = old;
819 ctx.clearRect(this.c.width-this.marginsz, y0+dy,
820 this.marginsz, this.c.height-(y0+dy));
821 };
822
823 this.redrawtext = function() {
824 this.fixfont();
825 this.nlines = Math.floor(this.c.height/this.fontht);
826 if(!this.tickimg) {
827 this.mktick();
828 }
829 if(!this.ln0) {
830 console.log("redrawtext: no ln0");
831 return;
832 }
833 var froff = this.ln0.off;
834 this.frsize = 0;
835 this.frlines = 0;
836 var ln = this.ln0;
837 for(var i = 0; i <= this.nlines; i++){
838 if(ln != null){
839 if(!this.drawline(ln))
840 break;
841 this.frlines++;
842 this.frsize += ln.len();
843 ln = ln.next;
844 }else if(!this.clearline(i)) {
845 break;
846 }
847 }
848 this.updatescrl();
849 };
850
851 // requires a redraw if returns true.
852 this.scrolldown = function(n) {
853 var old = this.ln0;
854 for(; n > 0; n--) {
855 if(!this.ln0.prev) {
856 break;
857 }
858 this.ln0 = this.ln0.prev;
859 }
860 return this.ln0 != old;
861 };
862
863 // requires a redraw if returns true.
864 this.scrollup = function(n) {
865 var old = this.ln0;
866 for(; n > 0; n--) {
867 if(!this.ln0.next || !this.ln0.next.next) {
868 break;
869 }
870 this.ln0 = this.ln0.next;
871 }
872 return old != this.ln0;
873 };
874
875 this.nscrl = function() {
876 var nscrl = Math.floor(this.nlines/4);
877 if(nscrl > 0) {
878 return nscrl;
879 }
880 return 1;
881 };
882
883 this.mayscrollins = function(ln) {
884 if(ln.lni >= this.ln0.lni+this.nlines-1 &&
885 ln.lni <= this.ln0.lni+this.nlines+1 && this.nlines > 1) {
886 this.scrolldown(this.nscrl());
887 }
888 };
889
890 this.mayscrolldel = function(ln) {
891 if(this.p0 < this.ln0.off) {
892 this.scrollup(this.nscrl());
893 this.redrawtext();
894 }
895 };
896
897 this.wrapoff = function(t) {
898 var ctx = this.c.getContext("2d", {alpha: false});
899 var avail = this.c.width - this.marginsz;
900 var pos = 0;
901 var s = "";
902 for(var i = 0; i < t.length; i++){
903 var r = t.charAt(i);
904 if(r == '\t') {
905 do {
906 s += " ";
907 pos++;
908 }while(pos%this.tabstop);
909 }else{
910 pos++;
911 s += r;
912 }
913 if(ctx.measureText(s).width > avail){
914 return i;
915 }
916 }
917 return t.length;
918 };
919
920 this.posdx = function(t, n) {
921 var ctx = this.c.getContext("2d", {alpha: false});
922 var pos = 0;
923 var dx = 0;
924 var spcwid = ctx.measureText(" ").width;
925 for(var i = 0; i < t.length && i < n; i++){
926 var r = t.charAt(i);
927 if(r == '\t') {
928 do {
929 dx += spcwid;
930 pos++;
931 }while(pos%this.tabstop);
932 }else{
933 pos++;
934 dx += ctx.measureText(r).width;
935 }
936 }
937 return dx;
938 };
939
940 // returns [line, off at line, click past text?]
941 // later you can use seekpos(line, lnoff) to get a valid pos.
942 this.ptr2seek = function(cx, cy) {
943 var marginsz = Math.floor(this.marginsz/2);
944 var x = cx;
945 var y = cy;
946 var ovf = 0;
947 x *= this.tscale;
948 y *= this.tscale;
949 var nln = Math.floor(y/this.fontht);
950 if(nln < 0) {
951 return [this.ln0, 0, false];
952 }
953 if(nln >= this.frlines) { // overflow
954 return [this.lne, this.lne.txt.length, true];
955 }
956 var ln = this.ln0;
957 while(nln-- > 0 && ln.next) {
958 ln = ln.next;
959 }
960 var pos = 0;
961 for(; pos <= ln.txt.length; pos++){
962 var coff = this.posdx(ln.txt, pos);
963 if(coff+marginsz > x){
964 if(pos > 0)
965 pos--;
966 break;
967 }
968 }
969 if(pos > ln.txt.length){
970 pos = ln.txt.length;
971 return [ln, pos, true];
972 }
973 return [ln, pos, false];
974 };
975
976 this.viewsel = function() {
977 if(this.p0 >= this.ln0.off && this.p0 <= this.ln0.off+this.frsize) {
978 return;
979 }
980 for(var ln = this.lns; ln != null; ln = ln.next) {
981 if(this.p0 >= ln.off && this.p0 <= ln.off+ln.txt.length) {
982 for(var n = Math.floor(this.frlines/3); n > 0 && ln.prev; n--) {
983 ln = ln.prev;
984 }
985 this.ln0 = ln;
986 this.redrawtext();
987 break;
988 }
989 }
990 };
991
992 this.setsel = function(p0, p1, refreshall) {
993 var ctx = this.c.getContext("2d", {alpha: false});
994 if(p0 > this.nrunes) {
995 p0 = this.nrunes;
996 }
997 if(p1 < p0) {
998 p1 = p0;
999 }
1000 if(p1 > this.nrunes) {
1001 p1 = this.nrunes;
1002 }
1003 if(this.p0 != this.p1) {
1004 refreshall = true;
1005 }
1006 var froff = this.ln0.off;
1007 if(refreshall && (this.p1 <froff || this.p0 >froff+this.frsize))
1008 refreshall = false;
1009 var mp0 = p0;
1010 var mp1 = p1;
1011 if(refreshall){
1012 if(this.p0 < mp0) {
1013 mp0 = this.p0;
1014 }
1015 if(this.p1 > mp1) {
1016 mp1 = this.p1;
1017 }
1018 }
1019 this.p0 = p0;
1020 this.p1 = p1;
1021 this.untick();
1022 if(mp1 <froff || mp0 >froff+this.frsize) {
1023 return;
1024 }
1025 var insel = false;
1026 var ln = this.ln0;
1027 for(var i = 0; i < this.frlines && ln != null; i++){
1028 if(mp1 >= ln.off && mp0 <= ln.off+ln.txt.length) {
1029 insel=true;
1030 }
1031 if(insel) {
1032 this.drawline(ln);
1033 }
1034 if(mp1 < ln.off) {
1035 break;
1036 }
1037 ln = ln.next;
1038 }
1039 };
1040
1041 this.frlninsdel = function(ln, ninsdel){
1042 if(ln.lni >= this.ln0.lni && ln.lni < this.ln0.lni+this.frlines) {
1043 this.frsize += ninsdel;
1044 this.drawline(ln);
1045 }
1046 };
1047
1048 this.fixfont();
1049}
net/ink/js/pg.js+11−8
@@ -1,7 +1,10 @@
1"use strict";1"use strict";
2/*2/*
3 * clive ink pg tools3 * clive ink pg tools
4*/4 *
5 * needs a rewrite.
6 * should define a global clive object to contain all the clive globals, and go from there.
7 */
5 8
6// controls may call this to set the icon for dirty (and get saves on clicks)9// controls may call this to set the icon for dirty (and get saves on clicks)
7// but they must implement the post method on the element passed.10// but they must implement the post method on the element passed.
@@ -107,9 +110,9 @@ function removecontrol(el, needpost) { · 99 unmodified lines
107 if(!el) {110 if(!el) {
108 return;111 return;
109 }112 }
110 $(el).find(".hasws").each(function() {113 $(el).find(".clivectl").each(function() {
111 if(!this.ws) {114 if(!this.ws) {
112 console.log("BUG: hasws w/o ws");115 console.log("BUG: clivectl w/o ws");
113 console.log("didn't set d.get(0).ws?");116 console.log("didn't set d.get(0).ws?");
114 } else {117 } else {
115 if(needpost && this.post) {118 if(needpost && this.post) {
@@ -134,7 +137,7 @@ function maxpl(pl) { · 18 unmodified lines
134 console.log("maxpl ", icon);137 console.log("maxpl ", icon);
135 $(pl).find('.portlet-content').toggle();138 $(pl).find('.portlet-content').toggle();
136 icon.toggleClass("ui-icon-minus ui-icon-plus");139 icon.toggleClass("ui-icon-minus ui-icon-plus");
137 pl.find(".canaddsize").each(function() {140 pl.find(".clivectl").each(function() {
138 if(this.addsize) {141 if(this.addsize) {
139 this.addsize(0);142 this.addsize(0);
140 }143 }
@@ -218,7 +221,7 @@ function updportlets() { · 77 unmodified lines
218 icon.toggleClass("ui-icon-minus ui-icon-plus");221 icon.toggleClass("ui-icon-minus ui-icon-plus");
219 var pl = icon.closest(".portlet");222 var pl = icon.closest(".portlet");
220 pl.find(".portlet-content").toggle();223 pl.find(".portlet-content").toggle();
221 pl.find(".canaddsize").each(function() {224 pl.find(".clivectl").each(function() {
222 if(this.addsize) {225 if(this.addsize) {
223 this.addsize(0);226 this.addsize(0);
224 }227 }
@@ -253,7 +256,7 @@ function updportlets() { · 28 unmodified lines
253 var icon = $(this);256 var icon = $(this);
254 var el = icon.closest(".portlet");257 var el = icon.closest(".portlet");
255 maxpl(el);258 maxpl(el);
256 $(el).find(".canaddsize").each(function() {259 $(el).find(".clivectl").each(function() {
257 if(this.addsize) {260 if(this.addsize) {
258 this.addsize(1);261 this.addsize(1);
259 }262 }
@@ -273,7 +276,7 @@ function updportlets() { · 13 unmodified lines
273 var icon = $(this);276 var icon = $(this);
274 var el = icon.closest(".portlet");277 var el = icon.closest(".portlet");
275 maxpl(el);278 maxpl(el);
276 $(el).find(".canaddsize").each(function() {279 $(el).find(".clivectl").each(function() {
277 if(this.addsize) {280 if(this.addsize) {
278 this.addsize(2);281 this.addsize(2);
279 }282 }
@@ -293,7 +296,7 @@ function updportlets() { · 13 unmodified lines
293 var icon = $(this);296 var icon = $(this);
294 var el = icon.closest(".portlet");297 var el = icon.closest(".portlet");
295 maxpl(el);298 maxpl(el);
296 $(el).find(".canaddsize").each(function() {299 $(el).find(".clivectl").each(function() {
297 if(this.addsize) {300 if(this.addsize) {
298 this.addsize(-1);301 this.addsize(-1);
299 }302 }
net/ink/js/radio.js+40−86
@@ -1,98 +1,52 @@
1"use strict";1"use strict";
2/*2/*
3 js code for the radio buttons control3 js code for the clive radio buttons control
4 */4 */
5 5
6var rdebug = false;
6 7
7function rapply(ev, fromserver) {8function CliveRadio(d, cid, id) {
8 if(!ev || !ev.Args || !ev.Args[0]){9 this.d = d;
9 console.log("apply: nil ev");10 this.c = d;
10 return;11 this.cid = cid;
11 }12 this.id = id;
12 var arg = ev.Args13 this.vers = 0;
13 if(1)console.log(this.divid, "apply", ev.Id, ev.Args);
14 switch(arg[0]){
15 case "Set":
16 if(arg.length < 4){
17 console.log(this.divid, "apply: short set");
18 break;
19 }
20 var on = (arg[3] == "on");
21 var id = this.divid + "_b" + arg[2];
22 console.log("set ", id, on);
23 var b = $("#"+id);
24 if(b) {
25 b.prop('checked', on);
26 b.button("refresh");
27 }
28 break;
29 case "show":
30 if(document.showcontrol) {
31 document.showcontrol(this);
32 }
33 break;
34 default:
35 console.log("text: unhandled", arg[0]);
36 }
37}
38 14
39/*15 this.apply = function(ev, fromserver) {
40 d is is the (jquery) parent that will supply events.16 if(!ev || !ev.Args || !ev.Args[0]){
41 cid is the class id d.17 console.log("apply: nil ev");
42 */
43function mkradio(d, cid, id) {
44 var wsurl = "wss://" + window.location.host + "/ws/" + cid;
45 if(d.wsaddr) {
46 wsurl = d.wsaddr + "/ws/" + cid;
47 }
48 d.post = function(args) {
49 if(!d.ws){
50 console.log("no ws");
51 return nil;
52 }
53 var ws = d.ws;
54 if(!args || !args[0]){
55 console.log("post: no args");
56 return nil;
57 }
58 var ev = {}
59 ev.Id = cid;
60 ev.Src = id;
61 ev.Vers = this.vers;
62 ev.Args = args;
63 var msg = JSON.stringify(ev);
64 try {
65 ws.send(msg);
66 // console.log("posting ", msg);
67 }catch(ex){
68 console.log("post: " + ex);
69 }
70 return ev;
71 };
72 d.apply = rapply;
73 d.divid = id;
74 d.divcid = cid;
75 d.ws = new WebSocket(wsurl);
76 d.get(0).ws = d.ws;
77 d.get(0).post = d.post;
78 d.ws.onopen = function() {
79 d.post(["id"]);
80 };
81 d.ws.onmessage = function(ev) {
82 // console.log("got msg", e.data);
83 var o = JSON.parse(ev.data);
84 if(!o || !o.Id) {
85 console.log("update: no object id");
86 return;18 return;
87 }19 }
88 console.log("update to", o.Id);20 var arg = ev.Args
89 d.apply(o, true)21 if(rdebug)console.log(this.id, "apply", ev.Id, ev.Args);
90 };22 switch(arg[0]){
91 d.ws.onclose = function() {23 case "Set":
92 console.log("text socket " + wsurl+ " closed\n");24 if(arg.length < 4){
93 d.replaceWith("<h3>disconnected</h3>")25 console.log(this.divid, "apply: short set");
26 break;
27 }
28 var on = (arg[3] == "on");
29 var id = this.id + "_b" + arg[2];
30 console.log("set ", id, on);
31 var b = $("#"+id);
32 if(b) {
33 b.prop('checked', on);
34 b.button("refresh");
35 }
36 break;
37 case "show":
38 this.showcontrol(this);
39 break;
40 default:
41 console.log("radio: unhandled", arg[0]);
42 }
94 };43 };
44
45 CliveCtlr.call(this);
95}46}
96 47
97document.mkradio = mkradio;
98 48
49document.mkradio = function(d, cid, id) {
50 var c = new CliveRadio(d, cid, id);
51 return c;
52}
net/ink/js/text.js+1263−0
@@ -0,0 +1,1263 @@
1"use strict";
2/*
3 Clive js code for text frames.
4 similar to Plan 9 text frames using the HTML5 canvas.
5
6 HTML5 designers suggest that you don't do this, but on the other
7 hand, they do NOT handle text correctly in dom and they do NOT
8 provide the interfaces required to handle things like undo and
9 redo correctly.
10
11 This requires also lines.js.
12 The code interfacing with pg.js needs a rewrite, as does pg.js itself.
13*/
14
15var selecting = false;
16var tdebug = false; // also defined by lines.js
17
18// This is to prevent the event from being propagated to the parent
19// container.
20// Despite this, it seems that if we return true in safari for a keydown
21// then it's too late and the space bubbles and we scroll when we shouldnt.
22// So, locknkeydown returns false and calls, by hand, the down/key/up handlers.
23function dontbubble(e) {
24 if (e) {
25 e.bubbles = false;
26 if(e.stopPropagation) {
27 e.stopPropagation();
28 }
29 e.cancelBubble = true;
30 }
31}
32
33// A frame of lines using the Clive ink framework.
34// d is the div, c is the canvas, cid and id are the ink ids.
35// This will have to be rewritten when we rewrite ink js code.
36function CliveText(d, c, cid, id) {
37 DrawLines.call(this, c);
38 this.d = d;
39 this.c = c;
40 this.cid = cid;
41 this.id = id;
42
43 this.vers = 0;
44 this.noedits = false;
45
46 this.islocked = false;
47 this.locking = false;
48 this.mustunlock = false;
49 this.whenlocked = [];
50
51 this.buttons = 0;
52 this.nclicks = {1: 0, 2: 0, 4: 0};
53 this.lastx = 0;
54 this.lasty = 0;
55 this.dblclick = 0; // 1 for double, 2 for triple, ...
56 this.secondary = 0; // button for selection (also defined by DrawLines)
57 this.secondaryabort = false;
58 this.malt = false;
59 this.userresized = false;
60 this.selecting = false;
61 this.oldp0 = -1;
62 this.oldp1 = -1;
63 this.clicktime = new Date().getTime();
64
65 this.markinsdata = undefined; // will be defined during markins
66 this.einsdata = undefined; // will be defined during eins
67 this.reloadln0 = 0;
68
69 this.composing = false;
70 this.latin = "";
71
72 var self = this; // we rewrite handlers later, and use self.
73
74 this.mrlse = function(e) {
75 var b = 1<<(e.which-1);
76 if(b == 1 && this.malt){
77 b = 2;
78 this.buttons &= ~1;
79 this.malt = false;
80 }
81 this.buttons &= ~b;
82 return b;
83 };
84
85 this.mpress = function(e) {
86 var b = 1<<(e.which-1);
87 if(b == 1 && e.altKey){
88 b = 2;
89 this.malt = true;
90 }
91 this.buttons |= b;
92 return b;
93 };
94
95 // set lastx, lasty to ev coords relative to canvas
96 this.evxy = function(e) {
97 var x = 0;
98 var y = 0;
99 if(e.fakex != undefined) {
100 x = e.fakex;
101 y = e.fakey;
102 } else {
103 var poff = $(this.c).offset();
104 x = e.pageX - poff.left;
105 y = e.pageY - poff.top;
106 }
107 this.lastx = x;
108 this.lasty = y;
109 };
110
111 this.mayresize = function(user) {
112 var c = $(this.c);
113 var p = c.parent();
114 var dx = p.width();
115 var dy = p.height() - 5; // -5: leave a bit of room
116 console.log('text resized', dx, dy, user?"user":"win");
117 var ctx = this.c.getContext("2d", {alpha: false});
118 // TODO: use helper when we rewrite ink js.
119 var tag = $("#"+this.id+"t")
120 if(tag) {
121 dy -= tag.height();
122 }
123 // Using a width scaled and making the style use the width
124 // makes the text better.
125 c.width(dx);
126 c.height(dy);
127 this.c.width = this.tscale*dx;
128 this.c.height = this.tscale*dy;
129 this.nlines = Math.floor(this.c.height/this.fontht);
130 this.saved = null;
131 this.reformat(this.lns);
132 this.redrawtext();
133
134 };
135
136 // this is just a bunch of heuristics to make it feel ok.
137 this.autoresize = function(addsize, moreless) {
138 var p = $(this.c);
139 var oldht = p.height();
140 var ht = oldht;
141 var fontht = this.fontht/this.tscale;
142 if(addsize) {
143 this.userresized = true;
144 if(moreless > 1){
145 var wtop = $(window).scrollTop();
146 var etop = p.offset().top;
147 var eoff = etop-wtop;
148 console.log("resize ", wtop, etop, eoff);
149 ht = window.innerHeight - 10 - eoff; // -10: leave some room
150 } else if(moreless >= 0) {
151 ht += fontht*6;
152 } else {
153 ht -= fontht*6;
154 if(ht < 5*fontht) {
155 ht = 5*fontht;
156 }
157 }
158 }else{
159 var nln = this.frlines;
160 if(nln < 3) {
161 nln = 3;
162 }
163 ht = (nln+2) * fontht;
164 if (ht >= 400) { // some initial arbitrary space.
165 ht = 400;
166 }
167 }
168 console.log("auto rsz", nln, ht, oldht);
169 if (oldht < ht - fontht || oldht > ht + fontht) {
170 console.log("auto resizing");
171 var delta = ht - oldht;
172 p = p.parent();
173 var nht = p.height() + delta;
174 p.height(nht);
175 this.mayresize();
176 }
177 };
178
179 this.selectstart = function() {
180 if(!this.selecting) {
181 console.log("selecting...");
182 }
183 this.selecting = true;
184 selecting = true;
185 this.oldp0 = this.p0;
186 this.oldp1 = this.p1;
187 };
188
189 this.selectend = function() {
190 if(this.mustunlock) {
191 this.unlocked();
192 }
193 if(!this.selecting) {
194 return;
195 }
196 console.log("select end");
197 if(this.oldp0 != this.p0 || this.oldp1 != this.p1) {
198 this.post(["tick", ""+this.p0, ""+this.p1]);
199 this.oldp0 = this.p0;
200 this.oldp1 = this.p1;
201 }
202 this.selecting = false;
203 selecting = false;
204 };
205
206 this.apply = function(ev, fromserver) {
207 if(!ev || !ev.Args || !ev.Args[0]){
208 console.log("apply: nil ev");
209 return;
210 }
211 var arg = ev.Args
212 if(tdebug) {
213 console.log(this.divid, "apply", ev.Args, "v", ev.Vers, this.vers);
214 }
215 switch(arg[0]){
216 case "held":
217 this.locked();
218 break;
219 case "rlse":
220 if(this.selecting) {
221 this.mustunlock = true;
222 break;
223 }
224 this.unlocked();
225 break;
226 case "noedits":
227 this.noedits = true;
228 break;
229 case "edits":
230 this.noedits = false;
231 break;
232 case "clean":
233 if(document.setclean) {
234 document.setclean(this);
235 }
236 break;
237 case "dirty":
238 if(document.setdirty) {
239 document.setdirty(this);
240 }
241 break;
242 case "show":
243 if(document.showcontrol) {
244 document.showcontrol(this);
245 }
246 break;
247 case "tag":
248 if(arg.length < 2){
249 console.log(this.id, "apply: short tag");
250 break;
251 }
252 if(document.settag) {
253 document.settag(this, arg[1]);
254 }
255 break;
256 case "font":
257 if(arg.length < 2){
258 console.log(this.id, "apply: short font");
259 break;
260 }
261 console.log(this.id, "font", arg[1]);
262 this.fontstyle = arg[1];
263 this.fixfont();
264 this.redrawtext();
265 break;
266 case "markinsing":
267 if(arg.length < 3){
268 console.log(this.id, "apply: short markinsing");
269 break;
270 }
271 if (!this.markinsdata) {
272 console.log("markins evs...");
273 this.markinsdata = [];
274 }
275 this.markinsdata.push(arg[2]);
276 break;
277 case "markinsdone":
278 console.log("markins run...");
279 if(arg.length < 2){
280 console.log(this.id, "apply: short markinsdone");
281 break;
282 }
283 var m = this.getmark(arg[1]);
284 if(!m) {
285 console.log(this.id, "apply: no mark", arg[1]);
286 break;
287 }
288 var op0 = this.p0;
289 var op1 = this.p1;
290 if(op0 != op1) {
291 this.setsel(op0, op0, false);
292 }
293 for(var i = 0; i < this.markinsdata.length; i++) {
294 var data = this.markinsdata[i];
295 var nlen = data.length;
296 var npos = m.pos + nlen;
297 var opos = m.pos;
298 op0 = this.p0;
299 op1 = this.p1;
300 this.p0 = m.pos;
301 this.p1 = m.pos;
302 this.ins(data, true);
303 m.pos = npos;
304 if(op0 > opos)
305 op0 += nlen;
306 if(op1 > opos)
307 op1 += nlen;
308 this.p0 = op0;
309 this.p1 = op1;
310 if(ev.Vers) {
311 this.vers = ev.Vers;
312 }
313 }
314 this.setsel(op0, op1, false);
315 delete this.markinsdata;
316 if(!this.userresized) {
317 this.autoresize();
318 }
319 console.log(this.id, "markins done");
320 break;
321 case "einsing":
322 if(arg.length < 2){
323 console.log(this.divid, "apply: short einsing");
324 break;
325 }
326 if (!this.einsdata) {
327 console.log("eins evs...");
328 this.einsdata = [];
329 }
330 this.einsdata.push(arg[1]);
331 break;
332 case "einsdone":
333 console.log(this.id, "eins run...");
334 if(arg.length < 2){
335 console.log(this.id, "apply: short ins");
336 break;
337 }
338 if(ev.Vers && fromserver && ev.Vers != this.vers+1){
339 console.log("OUT OF SYNC", ev.Args, "v", ev.Vers, this.vers);
340 this.post(["needreload"]);
341 delete this.einsdata;
342 break;
343 }
344 var p0 = parseInt(arg[1]);
345 var op0 = this.p0;
346 var op1 = this.p1;
347 if(op0 != op1) {
348 this.setsel(op0, op0, false);
349 }
350 this.p0 = p0;
351 this.p1 = p0;
352 for(var i = 0; i < this.einsdata.length; i++) {
353 var data = this.einsdata[i];
354 this.ins(data, false);
355 if(op0 > p0)
356 op0 += data.length;
357 if(op1 > p0)
358 op1 += data.length;
359 }
360 delete this.einsdata;
361 this.setsel(op0, op1, false);
362 if(ev.Vers) {
363 this.vers = ev.Vers;
364 }
365 if(!this.userresized) {
366 this.autoresize();
367 }
368 console.log(this.id, "eins done");
369 break;
370 case "eins":
371 if(arg.length < 3){
372 console.log(this.id, "apply: short ins");
373 break;
374 }
375 if(ev.Vers && fromserver && ev.Vers != this.vers+1){
376 console.log("OUT OF SYNC", ev.Args, "v", ev.Vers, this.vers);
377 this.post(["needreload"]);
378 break;
379 }
380 var p0 = parseInt(arg[2]);
381 var op0 = this.p0;
382 var op1 = this.p1;
383 if(op0 != op1) {
384 this.setsel(op0, op0);
385 }
386 this.p0 = p0;
387 this.p1 = p0;
388 this.ins(arg[1], false);
389 if(op0 > p0)
390 op0 += arg[1].length;
391 if(op1 > p0)
392 op1 += arg[1].length;
393 if(fromserver) {
394 this.setsel(op0, op1, false);
395 }
396 if(ev.Vers) {
397 this.vers = ev.Vers;
398 }
399 if(!this.userresized && arg[1].indexOf('\n') >= 0) {
400 this.autoresize();
401 }
402 break;
403 case "edel":
404 if(arg.length < 3){
405 console.log(this.id, "apply: short del");
406 break;
407 }
408 if(ev.Vers && fromserver && ev.Vers != this.vers+1){
409 console.log("OUT OF SYNC", ev.Args, "v", ev.Vers, this.vers);
410 this.post(["needreload"]);
411 }
412 var p0 = parseInt(arg[1]);
413 var p1 = parseInt(arg[2]);
414 var op0 = this.p0;
415 var op1 = this.p1;
416 this.p0 = p0;
417 this.p1 = p1;
418 try{
419 this.del(false);
420 }catch(ex){
421 console.log(this.divid, "apply: del: " + ex);
422 }
423 op0 = adjdel(op0, p0, p1);
424 op1 = adjdel(op1, p0, p1);
425 if(fromserver) {
426 this.setsel(op0, op1, false);
427 }
428 if(ev.Vers) {
429 this.vers = ev.Vers;
430 }
431 break;
432 case "ecut":
433 try{
434 this.del(false);
435 }catch(ex){
436 console.log(this.id, "apply: cut: " + ex);
437 }
438 if(ev.Vers)
439 this.vers = ev.Vers;
440 break;
441 case "reload":
442 this.reloadln0 = this.ln0.lni;
443 this.clear();
444 break;
445 case "reloading":
446 if(arg.length < 2){
447 console.log(this.id, "apply: short reloading");
448 break;
449 }
450 var nln = new Line(0, 0, arg[1], true);
451 this.addln(nln);
452 break
453 case "reloaded":
454 if(arg.length < 2){
455 console.log(this.id, "apply: short reloaded");
456 break;
457 }
458 this.vers = parseInt(arg[1]);
459 if(this.reloadln0) {
460 this.ln0 = this.seekln(this.reloadln0);
461 this.reloadln0 = 0;
462 }
463 this.redrawtext();
464 if(!this.userresized) {
465 this.autoresize();
466 }
467 // this.dump();
468 break;
469 case "mark":
470 if(arg.length < 3){
471 console.log(this.id, "apply: short mark");
472 break;
473 }
474 var pos = parseInt(arg[2]);
475 this.setmark(arg[1], pos);
476 break;
477 case "sel":
478 if(arg.length < 3){
479 console.log(this.id, "apply: short sel");
480 break;
481 }
482 var pos0 = parseInt(arg[1]);
483 var pos1 = parseInt(arg[2]);
484 this.setmark("p0", pos0);
485 this.setmark("p1", pos1);
486 this.setsel(pos0, pos1, true);
487 this.viewsel();
488 console.log("setsel", pos0, pos1);
489 break;
490 case "delmark":
491 if(arg.length < 2){
492 console.log(this.divid, "apply: short delmark");
493 break;
494 }
495 this.delmark(arg[1]);
496 break;
497 case "close":
498 this.ws.close();
499 $("#"+this.id).remove();
500 break;
501 default:
502 console.log("text: unhandled", arg[0]);
503 }
504 };
505
506 this.Post = function(e) {
507 var ev = this.post(e);
508 if(ev){
509 try {
510 this.apply(ev);
511 }catch(ex){
512 console.log("txt apply: " + ex);
513 }
514 }
515 };
516
517 // Only the frame with the lock may change the text,
518 // we replace the handlers to gain the lock before actually
519 // doing anything.
520
521 this.tkeydown = function(e, deferred) {
522 var key = e.keyCode;
523 if(!e.keyCode)
524 key = e.which;
525 var rune = String.fromCharCode(e.keyCode);
526 e.stopPropagation();
527 if(tdebug) {
528 console.log("keydown which " + e.which + " key " + e.keyCode +
529 " '" + rune + "'" +
530 " " + e.ctrlKey + " " + e.metaKey);
531 }
532 switch(key){
533 case 27: /* escape */
534 if(deferred) {
535 break;
536 }
537 this.post(["intr", "esc"]);
538 this.dump();
539 console.log("sel = ["+this.p0+","+this.p1+"] = '" +
540 this.get(this.p0, this.p1) + "'");
541 break;
542 case 8: /* backspace */
543 if(this.noedits) {
544 return;
545 }
546 if(deferred) {
547 break;
548 }
549 if(this.p0 != this.p1){
550 this.Post(["edel", ""+this.p0, ""+this.p1]);
551 }else if(this.p0 > 0){
552 var p0 = this.p0-1;
553 this.Post(["edel", ""+p0, ""+this.p1]);
554 }
555 break;
556 case 9: /* tab */
557 if(this.noedits) {
558 return;
559 }
560 if(deferred) {
561 break;
562 }
563 if(this.p0 != this.p1){
564 this.Post(["edel", ""+this.p0, ""+this.p1]);
565 }
566 this.Post(["eins", "\t", ""+this.p0]);
567 break;
568 case 32: /* space */
569 if(deferred) {
570 break;
571 }
572 this.Post(["eins", " ", ""+this.p0]);
573 break;
574 case 37: /* left */
575 if(this.noedits) {
576 return;
577 }
578 if(deferred) {
579 break;
580 }
581 this.post(["eundo"]);
582 break;
583 case 38: /* up */
584 if(deferred) {
585 break;
586 }
587 var n = Math.floor(this.frlines/4);
588 if(n < 1) {
589 n = 1;
590 }
591 if(this.scrollup(n)){
592 this.untick();
593 this.redrawtext();
594 }
595 break;
596 case 39: /* right */
597 if(this.noedits) {
598 return;
599 }
600 if(deferred) {
601 break;
602 }
603 this.post(["eredo"]);
604 break;
605 case 40: /* down */
606 if(deferred) {
607 break;
608 }
609 this.untick();
610 var n = Math.floor(this.frlines/4);
611 if(n < 1) {
612 n = 1;
613 }
614 if(this.scrolldown(n)){
615 this.untick();
616 this.redrawtext();
617 }
618 break;
619 case 46: /* delete */
620 if(deferred) {
621 break;
622 }
623 this.post(["intr", "del"]);
624 break;
625 case 112: /* F1 */
626 case 113: /* F2 */
627 case 114: /* F3 */
628 case 115: /* F4 */
629 if(deferred) {
630 break;
631 }
632 var mev = {
633 fakex: this.lastx,
634 fakey: this.lasty,
635 which: key-112+1,
636 };
637 mev.preventDefault = function(){}
638 this.c.onmousedown(mev);
639 break;
640 case 123: /* F12 */
641 tdebug = !tdebug;
642 break;
643 default:
644 return true;
645 }
646 return false;
647 };
648
649 this.tlocknkeydown = function(e) {
650 dontbubble(e);
651 if(this.islocked) {
652 return this.tkeydown(e);
653 }
654 if(!this.locking) {
655 this.locking = true;
656 this.post(["hold"]);
657 console.log("holding...");
658 }
659 var self = this;
660 var xe = jQuery.Event("keydown");
661 xe.which = e.which;
662 xe.keyCode = e.keyCode;
663 xe.ctrlKey = e.ctrlKey;
664 xe.metaKey = e.metaKey;
665 xe.preventDefault = function(){};
666 this.whenlocked.push(function() {
667 console.log("held keydown");
668 $(self.c).trigger(xe);
669 return false;
670 });
671 return this.tkeydown(e, true);
672 };
673
674 this.tkeypress = function(e, deferred) {
675 var key = e.keyCode;
676 if(!e.keyCode)
677 key = e.which;
678 var rune = String.fromCharCode(e.keyCode);
679 if(tdebug) {
680 console.log("key: which " + e.which + " key " + e.keyCode +
681 " '" + rune + "'");
682 }
683 switch(key) {
684 case 9:
685 rune = "\t";
686 break;
687 case 13:
688 rune = "\n";
689 break;
690 }
691 switch(rune) {
692 case 'c':
693 case 'C':
694 if(deferred)
695 break;
696 if(e.ctrlKey || e.metaKey) {
697 e.preventDefault();
698 this.post(["ecopy", ""+this.p0, ""+this.p1]);
699 return false;
700 }
701 break;
702 case 'v':
703 case 'V':
704 if(deferred || this.noedits) {
705 break;
706 }
707 if(e.ctrlKey || e.metaKey) {
708 e.preventDefault();
709 if(this.p0 != this.p1){
710 this.Post(["edel", ""+this.p0, ""+this.p1]);
711 }
712 this.post(["epaste", ""+this.p0, ""+this.p1]);
713 return false;
714 }
715 break;
716 case 'x':
717 case 'X':
718 if(deferred || this.noedits) {
719 break;
720 }
721 if(e.ctrlKey || e.metaKey) {
722 e.preventDefault();
723 this.Post(["ecut", ""+this.p0, ""+this.p1]);
724 return false;
725 }
726 break;
727 }
728 if(deferred || e.metaKey || e.ctrlKey || this.noedits) {
729 return;
730 }
731 if(this.p0 != this.p1){
732 this.Post(["edel", ""+this.p0, ""+this.p1]);
733 }
734 if(this.composing) {
735 if(!this.latin) {
736 this.latin = "" + rune;
737 } else {
738 this.latin += rune;
739 }
740 if(!kmap.islatin(this.latin)) {
741 this.composing = false;
742 rune = this.latin;
743 this.latin = "";
744 } else {
745 var r = kmap.latin(this.latin);
746 if (!r) {
747 return;
748 }
749 this.composing = false;
750 rune = r;
751 this.latin = "";
752 }
753 }
754 this.Post(["eins", rune, ""+this.p0]);
755 };
756
757 this.tlocknkeypress = function() {
758 dontbubble(e);
759 if(this.islocked) {
760 return this.tkeypress(e);
761 }
762 if(!this.locking) {
763 this.locking = true;
764 this.post(["hold"]);
765 console.log("holding...");
766 }
767 var self = this;
768 var xe = jQuery.Event("keypress");
769 xe.which = e.which;
770 xe.keyCode = e.keyCode;
771 xe.ctrlKey = e.ctrlKey;
772 xe.metaKey = e.metaKey;
773 xe.preventDefault = function(){};
774 this.whenlocked.push(function() {
775 console.log("held keypress");
776 $(self.c).trigger(xe);
777 return false;
778 });
779 return this.tkeypress(e, true);
780 };
781
782 this.tkeyup = function(e, deferred) {
783 var key = e.keyCode;
784 if(!e.keyCode)
785 key = e.which;
786 var rune = String.fromCharCode(e.keyCode);
787 var isdeadkey = e && e.originalEvent &&
788 e.originalEvent.keyIdentifier == "Unidentified";
789 if(tdebug) {
790 var ds = (isdeadkey ? " dead" : "");
791 console.log("keyup which " + e.which + " key " + e.keyCode +
792 " '" + rune + "'" + ds +
793 " " + e.ctrlKey + " " + e.metaKey, e);
794 }
795 switch(key){
796 case 112: /* F1 */
797 case 113: /* F2 */
798 case 114: /* F3 */
799 case 115: /* F4 */
800 if(deferred) {
801 break;
802 }
803 var mev = {
804 fakex: this.lastx,
805 fakey: this.lasty,
806 which: key-112+1,
807 };
808 mev.preventDefault = function(){}
809 this.c.onmouseup(mev);
810 break;
811 case 18: /* Alt */
812 this.composing = true;
813 return true;
814 default:
815 return true;
816 }
817 return false;
818 };
819
820 this.tlocknkeyup = function() {
821 dontbubble(e);
822 if(this.islocked) {
823 return this.tkeyup(e);
824 }
825 if(!this.locking) {
826 this.locking = true;
827 this.post(["hold"]);
828 console.log("holding...");
829 }
830 var self = this;
831 var xe = jQuery.Event("keyup");
832 xe.which = e.which;
833 xe.keyCode = e.keyCode;
834 xe.ctrlKey = e.ctrlKey;
835 xe.metaKey = e.metaKey;
836 xe.preventDefault = function(){};
837 this.whenlocked.push(function() {
838 console.log("held keyup");
839 $(self.c).trigger(xe);
840 return false;
841 });
842 return this.tkeyup(e, true);
843 };
844
845 this.tmdown = function(e) {
846 if(0)console.log("tmdown ", this.id, e);
847 this.selectstart();
848 e.preventDefault();
849 this.secondary = 0; /* paranoia: see tm234 */
850 this.secondaryabort = false;
851 this.mpress(e);
852 this.evxy(e);
853 var b = this.buttons;
854 switch(b){
855 case 1:
856 var ln, lnoff, past;
857 [ln, lnoff, past] = this.ptr2seek(this.lastx, this.lasty);
858 var pos = this.seekpos(ln, lnoff);
859 this.setsel(pos, pos);
860 this.m1(pos);
861 break;
862 case 2:
863 case 4:
864 case 8:
865 var ln, lnoff, past;
866 [ln, lnoff, past] = this.ptr2seek(this.lastx, this.lasty);
867 var pos = this.seekpos(ln, lnoff);
868 this.oldp0 = this.p0;
869 this.oldp1 = this.p1;
870 this.setsel(pos, pos);
871 this.m234(pos, b);
872 break;
873 default:
874 this.mwait();
875 }
876 e.returnValue = false;
877 };
878
879 this.tlocknmdown = function() {
880 if(this.islocked) {
881 return this.tmdown(e);
882 }
883 if(!this.locking) {
884 this.locking = true;
885 this.post(["hold"]);
886 console.log("holding...");
887 }
888 var self = this;
889 var xe = jQuery.Event("mousedown");
890 xe.which = e.which;
891 xe.pageX = e.pageX;
892 xe.pageY = e.pageY;
893 xe.preventDefault = function(){};
894 this.whenlocked.push(function() {
895 console.log("held mousedown");
896 $(self.c).trigger(xe);
897 return false;
898 });
899 return false;
900 };
901
902 this.tmup = function(e) {
903 e.preventDefault();
904 this.mrlse(e);
905 this.evxy(e);
906 if(this.buttons == 0) {
907 this.selectend();
908 }
909 };
910
911 this.tlocknmup = function() {
912 if(this.islocked) {
913 return this.tmup(e);
914 }
915 if(!this.locking) {
916 this.locking = true;
917 this.post(["hold"]);
918 console.log("holding...");
919 }
920 var self = this;
921 var xe = jQuery.Event("mouseup");
922 xe.which = e.which;
923 xe.pageX = e.pageX;
924 xe.pageY = e.pageY;
925 xe.preventDefault = function(){};
926 this.whenlocked.push(function() {
927 console.log("held mouseup");
928 $(self.c).trigger(xe);
929 return false;
930 });
931 return false;
932 };
933
934 this.locked = function() {
935 if(this.islocked)
936 return;
937 if(this.locking) {
938 this.locking = false;
939 this.islocked = true;
940 this.keydown = this.tkeydown;
941 this.keypress = this.tkeypress;
942 this.keyup = this.tkeyup;
943 this.mdown = this.tmdown;
944 this.mup = this.tmup;
945 for(var i = 0; i < this.whenlocked.length; i++) {
946 this.whenlocked[i]();
947 }
948 this.whenlocked = [];
949 }
950 };
951
952 this.unlocked = function() {
953 this.islocked = false;
954 this.locking = false;
955 this.mustunlock = false;
956 this.whenlocked = [];
957 this.keydown = this.tlocknkeydown;
958 this.keypress = this.tlocknkeypress;
959 this.keyup = this.tlocknkeyup;
960 this.mdown = this.locknmdown;
961 this.mup = this.tlocknmup;
962 this.post(["tick", ""+this.p0, ""+this.p1]);
963 this.post(["rlsed"]);
964 // collapse the selection or other's might insert in the middle.
965 if(this.p0 != this.p1) {
966 this.setsel(this.p0, this.p1, true);
967 }
968 };
969
970 this.keydown = this.tlocknkeydown;
971 this.keypress = this.tlocknkeypress;
972 this.keyup = this.tlocknkeyup;
973 this.mdown = this.locknmdown;
974 this.mup = this.tlocknmup;
975
976 this.menter = function(e) {
977 if(selecting) {
978 return;
979 }
980 var x = window.scrollX;
981 var y = window.scrollY;
982 $("#" + this.id ).focus();
983 window.scrollTo(x, y);
984 if(this.islocked || this.locking) {
985 return;
986 }
987 this.locking = true;
988 this.post(["hold"]);
989 console.log("holding...");
990 };
991
992 this.mwheel = function(e) {
993 e.stopPropagation();
994 if(!this.islocked && !this.locking) {
995 this.locking = true;
996 this.post(["hold"]);
997 console.log("holding...");
998 return false;
999 }
1000 try {
1001 e.preventDefault();
1002 var d = e.wheelDelta * -1;
1003 var s = 1;
1004 if(d < 0){
1005 d = -d;
1006 d = 1 + Math.floor(d/10);
1007 if(this.scrolldown(d)){
1008 this.untick();
1009 this.redrawtext();
1010 }
1011 }else{
1012 d = 1 + Math.floor(d/10);
1013 if(this.scrollup(d)){
1014 this.untick();
1015 this.redrawtext();
1016 }
1017 }
1018 }catch(ex){
1019 console.log("tmwheel: " + ex);
1020 }
1021 };
1022
1023 this.mmove = function(e) {
1024 if(this.islocked || this.locking) {
1025 return this.evxy(e);
1026 }
1027 this.locking = true;
1028 this.post(["hold"]);
1029 console.log("holding...");
1030 return false;
1031 };
1032
1033 // holding down button-1, change handlers to speak
1034 // a different mouse language.
1035 this.m1 = function(pos) {
1036 var now = new Date().getTime();
1037 if(!this.clicktime || now-this.clicktime>500) {
1038 this.dblclick = 0;
1039 this.clicktime = now;
1040 }else{
1041 this.dblclick++;
1042 this.clicktime = now;
1043 }
1044 var wassel = true;
1045 if(this.dblclick) {
1046 var x = this.getword(pos, this.dblclick>1);
1047 this.post(["click1", x[0], ""+x[1], ""+x[2]]);
1048 this.setsel(x[1], x[2]);
1049 wassel = false;
1050 }
1051
1052 this.c.onmousemove = function(e) {
1053 self.evxy(e);
1054 if(!self.buttons)
1055 return;
1056 var ln, lnoff, past;
1057 [ln, lnoff, past] = self.ptr2seek(self.lastx, self.lasty);
1058 var npos = self.seekpos(ln, lnoff);
1059 if(npos > pos) {
1060 if(self.p0 != pos || self.p1 != npos)
1061 self.setsel(pos, npos, true);
1062 }else {
1063 if(self.p0 != npos || self.p1 != pos)
1064 self.setsel(npos, pos, true);
1065 }
1066 return false;
1067 };
1068
1069 this.c.onmousedown = function(e){
1070 self.evxy(e);
1071 self.mpress(e);
1072 if(self.noedits) {
1073 return;
1074 }
1075 if(self.buttons == 1+2){
1076 wassel = false;
1077 self.Post(["ecut", ""+self.p0, ""+self.p1]);
1078 }
1079 if(self.buttons == 1+4){
1080 wassel = false;
1081 if(self.p0 != self.p1){
1082 self.Post(["edel", ""+self.p0, ""+self.p1]);
1083 }
1084 self.post(["epaste", ""+self.p0, ""+self.p1]);
1085 }
1086 if(self.buttons == 1+8){
1087 wassel = false;
1088 self.post(["ecopy", ""+self.p0, ""+self.p1]);
1089 }
1090 };
1091
1092 this.c.onmouseup = function(e){
1093 self.evxy(e);
1094 self.mrlse(e);
1095 if(self.buttons == 0){
1096 self.c.onmousemove = self.c.mmove;
1097 self.c.onmousedown = self.c.mdown;
1098 self.c.onmouseup = self.c.mup;
1099 self.post(["focus"]);
1100 self.selectend();
1101 if(wassel && self.p0 != self.p1) {
1102 var x = self.get(self.p0, self.p1);
1103 self.post(["click1", x, ""+self.p0, ""+self.p1]);
1104 }
1105 if(document.setfocus) {
1106 document.setfocus(self);
1107 }
1108 }
1109 };
1110 };
1111
1112 // holding down button-[234], change handlers to speak
1113 // a different mouse language.
1114 this.m234 = function(pos, b) {
1115 this.secondary = b;
1116 this.c.onmousemove = function(e){
1117 self.evxy(e);
1118 if(!self.buttons)
1119 return;
1120 var ln, lnoff, past;
1121 [ln, lnoff, past] = self.ptr2seek(self.lastx, self.lasty);
1122 var npos = self.seekpos(ln, lnoff);
1123 if(npos > pos){
1124 if(self.p0 != pos || self.p1 != npos) {
1125 self.setsel(pos, npos, true);
1126 }
1127 }else {
1128 if(self.p0 != npos || self.p1 != pos) {
1129 self.setsel(npos, pos, true);
1130 }
1131 }
1132 return false;
1133 };
1134
1135 this.c.onmousedown = function(e) {
1136 self.evxy(e);
1137 self.mpress(e);
1138 self.secondaryabort = true;
1139 };
1140
1141 this.c.onmouseup = function(e) {
1142 self.evxy(e);
1143 self.mrlse(e);
1144 console.log("m234 up");
1145 if(self.buttons == 0){
1146 var sp0 = self.p0;
1147 var sp1 = self.p1;
1148 var ln = self.lne;
1149 var tsize = 0;
1150 if(ln && ln.txt.length == 0) {
1151 tsize = ln.off;
1152 }
1153 self.secondary = 0;
1154 self.setsel(self.oldp0, self.oldp1);
1155 console.log("sp0 " + sp0 + " " + sp1 + " " + tsize);
1156 if(!self.secondaryabort)
1157 if(sp0 != sp1) {
1158 var txt = self.get(sp0, sp1);
1159 self.post(["click"+b, "", ""+sp0, ""+sp1, txt]);
1160 } else if(self.p0 != self.p1 &&
1161 sp0 >= self.p0 && sp0 <= self.p1) {
1162 var txt = self.get(self.p0, self.p1);
1163 self.post(["click"+b, txt, ""+self.p0, ""+self.p1]);
1164 } else if(b != 1 && sp0 == sp1 && tsize &&
1165 sp0 == tsize && sp0>0) {
1166 // a click at a final empty line selects the previous
1167 // line (which is the last one shown).
1168 var x = self.getword(sp0-1, b != 8 || self.dblclick>1);
1169 self.post(["click"+b, x[0], ""+x[1], ""+x[2]]);
1170 } else {
1171 var x = self.getword(sp0, b != 8 || self.dblclick>1);
1172 self.post(["click"+b, x[0], ""+x[1], ""+x[2]]);
1173 }
1174 self.c.onmousemove = self.c.mmove;
1175 self.c.onmousedown = self.c.mdown;
1176 self.c.onmouseup = self.c.mup;
1177 }
1178 if(self.buttons == 0){
1179 self.p0 = self.oldp0;
1180 self.p1 = self.oldp1;
1181 self.secondary = 0;
1182 self.secondaryabort = false;
1183 self.selectend();
1184 }
1185 }
1186 };
1187
1188 this.mwait = function() {
1189 this.c.onmousemove = function(e) {
1190 return self.evxy(e);
1191 };
1192 this.c.onmousedown = function(e) {
1193 self.evxy(e);
1194 self.mpress(e);
1195 };
1196 this.c.onmouseup = function(e) {
1197 self.evxy(e);
1198 self.mrlse(e);
1199 if(self.buttons == 0) {
1200 self.c.onmousemove = self.c.mmove;
1201 self.c.onmousedown = self.c.mdown;
1202 self.c.onmouseup = self.c.mup;
1203 }
1204 };
1205 };
1206
1207 this.c.onmousedown = function(e) {
1208 return self.mdown(e);
1209 };
1210 this.c.onmouseup = function(e) {
1211 return self.mup(e);
1212 };
1213 this.c.onmousemove = function(e) {
1214 return self.mmove(e);
1215 };
1216 this.c.mdown = this.c.onmousedown;
1217 this.c.mup = this.c.onmouseup;
1218 this.c.mmove = this.c.onmousemove;
1219
1220 this.c.onmousewheel = function(e) {
1221 return self.mwheel(e);
1222 };
1223 this.c.onmouseenter = function(e) {
1224 return self.menter(e);
1225 };
1226
1227 this.c.onpaste = function(){return false;};
1228 this.c.oncontextmenu = function(){return false;};
1229 this.c.onclick = null;
1230 this.c.ondblclick = null;
1231
1232 this.d.keypress(function(e){
1233 dontbubble(e);
1234 return self.tkeypress(e);
1235 })
1236 .keyup(function(e){
1237 dontbubble(e);
1238 return self.tkeyup(e);
1239 })
1240 .keydown(function(e){
1241 dontbubble(e);
1242 return self.tkeydown(e);
1243 });
1244
1245 this.mayresize(false);
1246 this.redrawtext();
1247
1248 // Now that we have everything defined, make it a clive ctlr
1249 // with post and everything.
1250 CliveCtlr.call(this);
1251
1252}
1253
1254document.mktxt = function(d, e, cid, id, font) {
1255 var c = new CliveText(d, e, cid, id);
1256 if(!font) {
1257 font = "r";
1258 }
1259 c.fontstyle = font;
1260 c.fixfont();
1261 return c;
1262};
1263
net/ink/js/txt.js+0−2333
@@ -1,2333 +0,0 @@
1"use strict";
2/*
3 js code for the clive text frame
4 which is similar to a Plan 9 text frame
5 but implemented with the HTML5 canvas.
6
7 HTML5 designers suggest that you don't do this, but on the other
8 hand, they do NOT handle text correctly in dom and they do NOT
9 provide the interfaces required to handle things like undo and
10 redo correctly.
11
12 */
13
14/*
15 * Hack to make sure the fixed and var width fonts exist, and
16 * global font names for those variants.
17 */
18var tffixed = "monospace";
19var tfvar = "Lucida Grande"; // or Verdana
20var fontscheckedout = false;
21var tdebug = false;
22
23function checkoutfonts(ctx) {
24 if(fontscheckedout)
25 return;
26 fontscheckedout = true;
27 var old = ctx.font;
28 ctx.font = "50px Arial";
29 var sz = ctx.measureText("ABC").width;
30 ctx.font = "50px " + tffixed;
31 if(ctx.measureText("ABC").width == sz)
32 tffixed = "Courier";
33 ctx.font = "50px " + tfvar;
34 if(ctx.measureText("ABC").width == sz)
35 tffixed = "Arial";
36 ctx.font = old;
37}
38
39function tfixfont() {
40 var c = this;
41 var ctx = c.getContext("2d", {alpha: false});
42 var mod = "";
43 var style = "";
44 style = tfvar;
45 if(this.fontstyle.indexOf('r') === -1) {
46 style = tffixed;
47 }
48 if(this.fontstyle.indexOf('b') > -1) {
49 mod = "bold " + mod;
50 }
51 if(this.fontstyle.indexOf('i') > -1) {
52 mod = "italic " + mod;
53 }
54 var ht = this.fontht - 2*this.tscale;
55 ctx.font = mod + " " + ht+"px "+ style;
56 ctx.textBaseline="top";
57}
58
59function adjdel(pos, delp0, delp1) {
60 if(pos <= delp0)
61 return pos;
62 if(pos <= delp1)
63 return delp0;
64 return pos - (delp1 - delp0);
65}
66
67function lnlen(ln){
68 if(!ln)
69 return 0;
70 if(ln.eol)
71 return ln.txt.length + 1;
72 return ln.txt.length;
73}
74
75function tdump() {
76 var off = 0;
77 for(var i = 0; i < this.lines.length; i++){
78 var n = lnlen(this.lines[i]);
79 var o = this.lines[i].off
80 if(!o && !(o === 0)){
81 console.log("BAD off " + o + " in:");
82 o = off;
83 }
84 if(o != off){
85 console.log("BAD off " + o + " (!=" + off + ") in:");
86 off = o;
87 }
88 off += n;
89 if(this.lines[i].eol)
90 console.log(""+i+": "+o+"["+n+"]=\t" + this.lines[i].txt + "\\n");
91 else
92 console.log(""+i+": "+o+"["+n+"]=\t" + this.lines[i].txt);
93 }
94 for(var i = 0; i < this.marks.length; i++){
95 console.log("mark: ", this.marks[i].name, this.marks[i].pos);
96 }
97 console.log("sel: " + this.p0 + " " + this.p1);
98 console.log("vers: ", this.vers);
99}
100
101function notabs(t, pos0) {
102 if(t.indexOf('\t') < 0)
103 return t;
104 var s = "";
105 var pos = 0;
106 if(pos0)
107 pos = pos0;
108 for(var i = 0; i < t.length; i++){
109 var r = t.charAt(i);
110 if(r == '\t') {
111 do {
112 s += " ";
113 pos++;
114 }while(pos%this.tabstop);
115 }else{
116 pos++;
117 s += r;
118 }
119 }
120 return s;
121}
122
123function tlinewrap(t) {
124 var c = this;
125 var ctx = c.getContext("2d", {alpha: false});
126 var marginsz = 3;
127 var avail = c.width - 2*marginsz;
128 var pos = 0;
129 var s = "";
130 for(var i = 0; i < t.length; i++){
131 var r = t.charAt(i);
132 if(r == '\t') {
133 do {
134 s += " ";
135 pos++;
136 }while(pos%this.tabstop);
137 }else{
138 pos++;
139 s += r;
140 }
141 if(ctx.measureText(s).width > avail){
142 return i;
143 }
144 }
145 return t.length;
146}
147
148function tposdx(ln, n) {
149 var t = ln.txt;
150 var c = this;
151 var ctx = c.getContext("2d", {alpha: false});
152 var pos = 0;
153 var dx = 0;
154 for(var i = 0; i < t.length && i < n; i++){
155 var r = t.charAt(i);
156 if(r == '\t') {
157 do {
158 dx += ctx.measureText(" ").width;
159 pos++;
160 }while(pos%this.tabstop);
161 }else{
162 pos++;
163 dx += ctx.measureText(r).width;
164 }
165 }
166 return dx;
167}
168
169function tptr2tpos(cx, cy) {
170 var marginsz = 3;
171 var x = cx;
172 var y = cy;
173 var ovf = 0;
174 x *= this.tscale;
175 y *= this.tscale;
176 var nln = Math.floor(y/this.fontht);
177 if(nln < 0 || this.lines.length == 0)
178 return [0, 0, ovf];
179 if(nln+this.ln0 >= this.lines.length){
180 var ll = this.lines[this.lines.length-1];
181 return [ll.txt.length, this.frlines-1, 1];
182 }
183 if(nln > this.frlines){ // overflow
184 return [ll.txt.length, this.frlines-1, 1];
185 }
186 var pos = 0;
187 var ll = this.lines[nln+this.ln0];
188 for(; pos <= ll.txt.length; pos++){
189 var coff = this.posdx(ll, pos);
190 if(coff+marginsz > x){
191 if(pos > 0)
192 pos--;
193 break;
194 }
195 }
196 if(pos > ll.txt.length){
197 pos = ll.txt.length;
198 return [pos, nln, 1];
199 }
200 return [pos, nln, 0];
201}
202
203function ttpos2pos(x, nln) {
204 if(nln < 0)
205 return 0;
206 if(nln+this.ln0 >= this.lines.length)
207 return this.nrunes;
208 var pos = this.lines[this.ln0].off;
209 for(var i = 0; i < nln && i+this.ln0 < this.lines.length; i++)
210 pos += lnlen(this.lines[this.ln0+i]);
211 if(nln + this.ln0 < this.lines.length)
212 pos += x;
213 return pos;
214}
215
216function tuntick() {
217 var c = this;
218 var ctx = c.getContext("2d", {alpha: false});
219 if(!this.saved)
220 return;
221 ctx.putImageData(this.saved, this.tickx, this.ticky);
222 this.saved = null;
223}
224
225function tviewsel() {
226 if(this.lines[this.ln0]) {
227 var off = this.lines[this.ln0].off;
228 var eoff = off+this.frsize;
229 if(this.p0 >= off && this.p0 <= eoff) {
230 return;
231 }
232 }
233 for(var i = 0; i < this.lines.length; i++){
234 var xln = this.lines[i];
235 var xlnlen = xln.txt.length;
236 if(this.p0 >= xln.off && this.p0 <= xln.off+xlnlen){
237 var n = i - Math.floor(this.frlines/3);
238 if(n < 0) {
239 n = 0;
240 }
241 if(n >= this.lines.length) {
242 n = this.lines.length-1;
243 }
244 xln = this.lines[n];
245 if(xln) {
246 this.ln0 = n;
247 this.froff = xln.off;
248 this.redrawtext();
249 } else {
250 console.log("tviewsel: no ln for", n, i);
251 }
252 return;
253 }
254 }
255}
256
257function ttsetsel(p0, p1, refreshall) {
258 var c = this;
259 var ctx = c.getContext("2d", {alpha: false});
260 if(p0 > this.nrunes)
261 p0 = this.nrunes;
262 if(p1 < p0)
263 p1 = p0;
264 if(p1 > this.nrunes)
265 p1 = this.nrunes;
266 if(this.p0 != this.p1)
267 refreshall = true;
268 if(!this.lines[this.ln0]) {
269 return;
270 }
271 var froff = this.lines[this.ln0].off;
272 if(refreshall && (this.p1 <froff || this.p0 >froff+this.frsize))
273 refreshall = false;
274 var mp0 = p0;
275 var mp1 = p1;
276 if(refreshall){
277 if(this.p0 < mp0)
278 mp0 = this.p0;
279 if(this.p1 > mp1)
280 mp1 = this.p1;
281 }
282 this.p0 = p0;
283 this.p1 = p1;
284 this.untick();
285 if(mp1 <froff || mp0 >froff+this.frsize)
286 return;
287 var insel = false;
288 for(var i = 0; i < this.frlines; i++){
289 if(this.ln0+i >= this.lines.length)
290 break;
291 var xln = this.lines[this.ln0+i];
292 if(mp1 >= xln.off && mp0 <= xln.off+xln.txt.length)
293 insel=true;
294 if(insel)
295 this.drawline(xln, i);
296 if(mp1 < xln.off)
297 break;
298 }
299}
300
301function tupdatescrl() {
302 var c = this;
303 var ctx = c.getContext("2d", {alpha: false});
304 var y0 = this.ln0 / this.lines.length * c.height;
305 var dy = this.frlines / this.lines.length * c.height;
306
307 // right
308 ctx.clearRect(c.width-6, 0, 6, y0);
309 var old = ctx.fillStyle;
310 ctx.fillStyle = "#7373FF";
311 ctx.fillRect(c.width-6, y0, 6, dy);
312 ctx.fillStyle = old;
313 ctx.clearRect(c.width-6, y0+dy, 6, c.height-(y0+dy));
314
315 // left
316 if(0) {
317 ctx.clearRect(0, 0, 1, y0);
318 ctx.fillRect(0, y0, 1, dy);
319 ctx.clearRect(0, y0+dy, 1, c.height-(y0+dy));
320 }
321}
322
323function tdrawline(xln, i) {
324 var c = this;
325 var ctx = c.getContext("2d", {alpha: false});
326 var lnht = this.fontht;
327 var marginsz = 6;
328 var avail = c.width - 2*marginsz -1;
329 var pos = i*lnht;
330 if(pos >= c.height)
331 return false;
332 if(!xln){
333 ctx.clearRect(1, pos, c.width-1, lnht);
334 return true;
335 }
336 var ln = this.notabs(xln.txt);
337 /* draw selected line */
338 if(this.p0 != this.p1){
339 if(this.p0 > xln.off+xln.txt.length || this.p1 < xln.off){
340 /* draw normal line */
341 ctx.clearRect(1, pos, c.width-7, lnht);
342 ctx.fillText(ln, marginsz, pos);
343 return true;
344 }
345 /* up to p0 unselected */
346 var dx = marginsz;
347 var s0 = 0;
348 var s0pos = 0;
349 if(this.p0 > xln.off){
350 s0 = this.p0 - xln.off;
351 var s0ln = this.notabs(xln.txt.slice(0, s0));
352 s0pos = s0ln.length;
353 dx = marginsz + ctx.measureText(s0ln).width;
354 ctx.clearRect(1, pos, dx, lnht);
355 ctx.fillText(s0ln, marginsz, pos);
356 }
357 /* from p0 to p1 selected */
358 var s1 = xln.txt.length - s0;
359 if(this.p1 < xln.off+xln.txt.length)
360 s1 = this.p1 - s0 - xln.off;
361 var s1ln = this.notabs(xln.txt.slice(s0, s0+s1), s0pos);
362 var s1pos = s0pos + s1ln.length;
363 var sx = ctx.measureText(s1ln).width;
364 var old = ctx.fillStyle;
365 if(this.secondary == 2)
366 ctx.fillStyle = "#FF7575";
367 else if(this.secondary)
368 ctx.fillStyle = "#7373FF";
369 else
370 ctx.fillStyle = "#D1A0A0";
371 if(this.p1 > xln.off+xln.txt.length)
372 ctx.fillRect(dx, pos, c.width-dx-7, lnht);
373 else
374 ctx.fillRect(dx, pos, sx, lnht);
375 ctx.fillStyle = old;
376 ctx.fillText(s1ln, dx, pos);
377 if(this.p1 > xln.off+xln.txt.length)
378 return true;
379 /* from p1 unselected */
380 ctx.clearRect(dx+sx, pos, c.width-(dx+sx)-7, lnht);
381 if(s1 >= xln.txt.length)
382 return true;
383 var s2ln = this.notabs(xln.txt.slice(s0+s1, xln.txt.length), s1pos);
384 ctx.fillText(s2ln, dx+sx, pos);
385 return true;
386 }
387
388 /* draw unselected line */
389 ctx.clearRect(1, pos, c.width-7, lnht);
390 ctx.fillText(ln, marginsz, pos);
391
392 /* draw tick if needed */
393 if(this.p0 < xln.off || this.p0 > xln.off + xln.txt.length)
394 return true;
395 /*
396 * if p0 is at the end of a wrapped line don't draw it here,
397 * because the next line will draw it at the start of line.
398 */
399 if(this.p0 == xln.off + xln.txt.length && !xln.eol &&
400 xln != this.lines[this.lines.length-1])
401 return true;
402 var dx = this.posdx(xln, this.p0 - xln.off);
403 dx += marginsz - 3*this.tscale/2;
404 this.saved = ctx.getImageData(dx, pos, 3*this.tscale, this.fontht);
405 this.tickx = dx;
406 this.ticky = pos;
407 ctx.putImageData(this.tick, dx, pos);
408 return true;
409}
410
411function treformat(l0) {
412 this.fixfont();
413
414 var lns = this.lines;
415 for(var i = l0; i < lns.length;){
416 while(!lns[i].eol && i < lns.length-1){
417 lns[i].txt += lns[i+1].txt;
418 lns[i].eol = lns[i+1].eol;
419 lns.splice(i+1, 1);
420 }
421 /* remove empty lines (no \n) unless they are at the end
422 * because the last empty line is used to draw the tick
423 * past the last \n
424 */
425 if(lns[i].txt.length == 0 && !lns[i].eol &&
426 lns.length>1 && i != lns.length-1)
427 lns.splice(i, 1);
428 else
429 i++;
430 }
431 var off = 0;
432 if(l0 > 0 && l0 < lns.length)
433 off = lns[l0-1].off + lnlen(lns[l0-1]);
434 for(var i = l0; i < lns.length; i++){
435 lns[i].off = off;
436 var nw = this.linewrap(lns[i].txt);
437 if(nw < lns[i].txt.length){
438 var old = lns[i].txt;
439 var nl = {txt: old.slice(0, nw), off: lns[i].off};
440 nl.eol = false;
441 lns.splice(i, 0, nl);
442 lns[i+1].txt = old.slice(nw, old.length);
443 lns[i+1].off += nw;
444 }
445 off += lnlen(lns[i]);
446 }
447 if(l0 < this.ln0){
448 if(this.ln0 >= lns.length)
449 this.ln0 = lns.length-1;
450 }
451 if(lns.length == 0) {
452 lns[0] = {txt:"", off: lnlen(last)};
453 }
454 var last = lns[lns.length-1];
455 if(last.eol){
456 lns[lns.length] = {txt:"", off: last.off + lnlen(last)};
457 }
458}
459
460function tsetlinesoff(l0) {
461 var lns = this.lines;
462 for(var lns = this.lines; l0 < lns.length; l0++){
463 if(l0 == 0)
464 lns[l0].off = 0;
465 else
466 lns[l0].off = lns[l0-1].off + lnlen(lns[l0-1]);
467 }
468}
469
470function tredrawtext() {
471 var c = this;
472 var ctx = c.getContext("2d", {alpha: false});
473 c.fixfont();
474 var nlines = c.height / (this.fontht);
475
476 if(!this.tick){
477 var x = ctx.lineWidth;
478 ctx.lineWidth = 1;
479 var d = 3*this.tscale;
480 ctx.fillRect(0, 0, d, d);
481 ctx.fillRect(0, this.fontht-d, d, d);
482 ctx.moveTo(d/2, 0);
483 ctx.lineTo(d/2, this.fontht);
484 ctx.stroke();
485 ctx.lineWidth = x;
486 this.tick = ctx.getImageData(0, 0, d, this.fontht);
487 }
488 if(!this.lines[this.ln0]) {
489 console.log("tredrawtext: no ln0");
490 return;
491 }
492 var off = this.lines[this.ln0].off;
493 var froff = off;
494 this.frsize = 0;
495 this.frlines = 0;
496 for(var i = 0; i <= nlines; i++){
497 if(this.ln0+i < this.lines.length){
498 var xln = this.lines[this.ln0+i];
499 if(!this.drawline(xln, i))
500 break;
501 this.frlines++;
502 off += lnlen(xln);
503 }else
504 if(!this.drawline(null, i))
505 break;
506 }
507 this.frsize = off - froff;
508 this.updatescrl();
509}
510
511function tscrolldown1() {
512 if(this.ln0 >= this.lines.length-1)
513 return false;
514 this.froff += lnlen(this.lines[this.ln0]);
515 this.ln0++;
516 return true;
517}
518
519function tscrollup1() {
520 if(this.ln0 == 0)
521 return false;
522 this.ln0--;
523 return true;
524}
525
526function tscrolldown(n) {
527 var some = false;
528 for(; n > 0; n--){
529 if(this.scrolldown1())
530 some=true;
531 else
532 break;
533 }
534 return some;
535}
536
537function tscrollup(n) {
538 var some = false;
539 for(; n > 0; n--){
540 if(this.scrollup1())
541 some=true;
542 else
543 break;
544 }
545 return some;
546}
547
548/*
549 * t may be arbitrary text (single line) or \n, but not both at once.
550 * The text is always inserted at this.p0 and p0, p1 are updated.
551 *
552 */
553function ttins(t, dontscroll) {
554 this.untick();
555 var nscrl = Math.floor(this.nlines/4);
556 if(nscrl == 0)
557 nscrl = 1;
558 this.markins(t.length);
559 for(var i = 0; i < this.lines.length; i++){
560 var xln = this.lines[i];
561 var xlnlen = xln.txt.length;
562 if(this.p0 >= xln.off && this.p0 <= xln.off+xlnlen){
563 var pos = this.p0 - xln.off;
564 if(t == '\n'){
565 var nln = {
566 txt: "",
567 off: xln.off+pos+1,
568 eol: xln.eol
569 };
570 if(pos < xlnlen){
571 nln.txt = xln.txt.slice(pos, xlnlen);
572 xln.txt = xln.txt.slice(0, pos);
573 }
574 this.lines.splice(i+1, 0, nln);
575 xln.eol = true;
576 this.p0++;
577 this.p1 = this.p0;
578 this.nrunes++;
579 this.reformat(i);
580 if(!dontscroll)
581 if(i >= this.ln0+this.nlines-1 &&
582 i <= this.ln0+this.nlines+1 && this.nlines > 1)
583 this.scrolldown(nscrl);
584 this.redrawtext();
585 return;
586 }
587 if(pos == xln.txt.length)
588 xln.txt += t;
589 else
590 xln.txt = xln.txt.slice(0, pos) +
591 t + xln.txt.slice(pos, xlnlen);
592 this.p0 += t.length;
593 this.p1 = this.p0;
594 this.nrunes += t.length;
595 var wr = this.linewrap(xln.txt);
596 if(wr == xln.txt.length){
597 this.setlinesoff(i+1);
598 this.frsize += t.length;
599 if(i >= this.ln0 && i <= this.ln0+this.frlines)
600 this.drawline(xln, i-this.ln0);
601 } else {
602 this.reformat(i);
603 if(!dontscroll)
604 if(i >= this.ln0+this.nlines-1 &&
605 i <= this.ln0+this.nlines+1)
606 this.scrolldown(nscrl);
607 this.redrawtext();
608 }
609 return;
610 }
611 }
612}
613
614/*
615 * if the selection is empty, the previous rune is deleted, otherwise
616 * the entire selection is removed. p0 and p1 are updated.
617 */
618function ttdel(dontscroll) {
619 this.untick();
620 if(this.p0 >= this.nrunes || this.p1 < this.p0)
621 return;
622 var nscrl = Math.floor(this.nlines/4);
623 if(nscrl == 0)
624 nscrl = 1;
625 var mightscroll = (this.p1 >= this.lines[this.ln0].off);
626 console.log("del ", this.p0, this.p1);
627 if(this.p0 > 0 && this.p0 == this.p1)
628 this.p0--;
629 this.markdel();
630 var i;
631 var xln;
632 for(i = 0; i < this.lines.length; i++){
633 xln = this.lines[i];
634 var xlnlen = xln.txt.length;
635 if(this.p0 >= xln.off && this.p0 <= xln.off+xlnlen)
636 break;
637 }
638 if(i == this.lines.length){
639 console.log("tdel: out of text");
640 return;
641 }
642 var ln0 = i;
643 var ndel = this.p1 - this.p0;
644 var off = this.p0 - xln.off;
645 var tot = 0;
646 while(tot < ndel && i < this.lines.length) {
647 var xln = this.lines[i];
648 var xlnlen = xln.txt.length;
649 var nd = ndel-tot;
650 if(off+nd > xlnlen)
651 nd = xlnlen - off;
652 xln.txt = xln.txt.slice(0, off) + xln.txt.slice(off+nd, xlnlen);
653 tot += nd;
654 if(i == ln0 && tot == ndel && xln.eol){
655 /* del within a line; don't reformat; just adjust */
656 this.nrunes -= tot;
657 this.p1 -= tot;
658 this.setlinesoff(i+1);
659 if(ln0 >= this.ln0 && ln0 < this.ln0+this.frlines){
660 this.frsize -= tot;
661 this.drawline(xln, i-this.ln0);
662 }
663 return;
664 }
665 if(tot < ndel && xln.eol){
666 xln.eol = false;
667 tot++;
668 }
669 i++;
670 off = 0;
671 }
672 this.setlinesoff(ln0+1);
673 this.nrunes -= tot;
674 this.p1 -= tot;
675 this.reformat(ln0);
676 this.redrawtext();
677 if(!dontscroll && mightscroll && this.p0 < this.lines[this.ln0].off){
678 this.scrollup(nscrl);
679 this.redrawtext();
680 }
681}
682
683var wordre = null;
684function iswordchar(c) {
685 if(!wordre)
686 wordre = /\w/;
687 return wordre.test(c);
688}
689
690function islongwordchar(c) {
691 if(!wordre)
692 wordre = /\w/;
693 return c == '(' || c == ')' || c == '/' || c == '.' || c == ':' || c == '#' || c == ',' || wordre.test(c);
694}
695
696function islparen(c) {
697 return "([{<'`\"".indexOf(c) >= 0;
698}
699
700function isrparen(c) {
701 return ")]}>'`\"".indexOf(c) >= 0;
702}
703
704function rparen(c) {
705 var i = "([{<".indexOf(c);
706 if(i < 0)
707 return c;
708 return ")]}>".charAt(i);
709}
710
711function lparen(c) {
712 var i = ")]}>".indexOf(c);
713 if(i < 0)
714 return c;
715 return "([{<".charAt(i);
716}
717
718function ttgetword(pos, long) {
719 if(pos >= this.nrunes)
720 return ["", this.nrunes, this.nrunes];
721 if(!long) {
722 long = (this.dblclick > 1);
723 }
724 var ischar = iswordchar;
725 if(long) {
726 ischar = islongwordchar;
727 }
728 var i;
729 var xln;
730 for(i = 0; i < this.lines.length; i++){
731 xln = this.lines[i];
732 var xlnlen = xln.txt.length;
733 if(pos < xln.off || pos > xln.off+xlnlen)
734 continue;
735 /* now select the word (won't loop again) */
736 var epos = pos;
737 var p0 = pos - xln.off;
738 if(p0 == xlnlen){
739 if(!xln.eol)
740 return [xln.txt, xln.off, xln.off+lnlen(xln)];
741 return [xln.txt+"\n", xln.off, xln.off+lnlen(xln)];
742 }
743 /*
744 * heuristic: if click at the right of lparen and not
745 * at rparen, use the lparen.
746 */
747 if(p0 > 0 && !isrparen(xln.txt.charAt(p0)) &&
748 islparen(xln.txt.charAt(p0-1))){
749 pos--;
750 p0--;
751 }
752 var p1 = p0;
753 var c = xln.txt.charAt(p0);
754 if(islparen(c)){
755 pos++;
756 var n = 1;
757 var rc = rparen(c);
758 var txt = "";
759 p1++;
760 epos++;
761 do{
762 for(; p1 < xlnlen; p1++, epos++){
763 var x = xln.txt.charAt(p1);
764 if(x == rc)
765 n--;
766 else if(x == c)
767 n++;
768 if(n != 0)
769 txt += x;
770 if(n == 0)
771 return [txt, pos, epos-1];
772 }
773 if(xln.eol){
774 epos++;
775 txt += "\n";
776 }
777 i++;
778 if(i < this.lines.length){
779 xln = this.lines[i];
780 xlnlen = xln.txt.length;
781 p1 = 0;
782 }
783 }while(n > 0 && i < this.lines.length);
784 return [txt, pos, epos];
785 }
786 if(isrparen(c)){
787 var n = 1;
788 var lc = lparen(c);
789 var txt = "";
790 do{
791 for(p0--; p0 >= 0; p0--){
792 x = xln.txt.charAt(p0);
793 if(x == lc)
794 n--;
795 else if(x == c)
796 n++;
797 if(n != 0){
798 pos--;
799 txt = x + txt;
800 }
801 if(n == 0)
802 return [txt, pos, epos];
803 }
804 if(i > 0){
805 i--;
806 xln = this.lines[i];
807 xlnlen = xln.txt.length;
808 p0 = xlnlen;
809 if(xln.eol){
810 pos--;
811 txt = "\n" + txt;
812 }
813 }
814 }while(i >= 0 && n > 0);
815 return [txt, pos, epos];
816 }
817 if(!islongwordchar(c))
818 return [xln.txt.slice(p0, p1), pos, epos];
819 while(p0 > 0 && ischar(xln.txt.charAt(p0-1))){
820 pos--;
821 p0--;
822 }
823 while(p1 < xlnlen && ischar(xln.txt.charAt(p1))){
824 epos++;
825 p1++;
826 }
827 return [xln.txt.slice(p0, p1), pos, epos];
828 }
829 return ["", pos, pos];
830}
831
832function ttget(p0, p1) {
833 if(p0 == p1 || p0 >= this.nrunes || p1 < p0)
834 return "";
835 var i;
836 var xln;
837 for(i = 0; i < this.lines.length; i++){
838 xln = this.lines[i];
839 var xlnlen = xln.txt.length;
840 if(p0 >= xln.off && p0 <= xln.off+xlnlen)
841 break;
842 }
843 if(i == this.lines.length){
844 console.log("tget: out of text");
845 return "";
846 }
847 var ln0 = i;
848 var nget = p1 - p0;
849 var off = p0 - xln.off;
850 var tot = 0;
851 var txt = "";
852 do{
853 var xln = this.lines[i];
854 var xlnlen = xln.txt.length;
855 var ng = nget-tot;
856 if(off+ng > xlnlen)
857 ng = xlnlen - off;
858 txt += xln.txt.slice(off, off+ng);
859 tot += ng;
860 if(tot < nget && xln.eol){
861 txt += "\n";
862 tot++;
863 }
864 i++;
865 off = 0;
866 }while(tot < nget);
867 return txt;
868}
869
870/*
871 * call tins for arbitrary text.
872 */
873function ttinslines(x, dontscroll) {
874 try{
875 var ln = x.split('\n');
876 for(var i = 0; i < ln.length; i++) {
877 if(ln[i].length > 0)
878 this.tins(ln[i], dontscroll);
879 if(i < ln.length-1)
880 this.tins('\n', dontscroll);
881 }
882 }catch(ex){
883 console.log("tinslines: " + ex);
884 }
885}
886
887function tmayresize(user) {
888 if(user) {
889 this.userresized = true;
890 }
891 var p = $(this).parent();
892 var dx = p.width();
893 var dy = p.height() - 5;
894 console.log('text resized', dx, dy, user?"user":"win");
895 var c = this;
896 var ctx = this.getContext("2d", {alpha: false});
897 var tag = $("#"+this.divid+"t")
898 if(tag) {
899 var ty = tag.height();
900 dy -= ty;
901 }
902 $(this).width(dx);
903 $(this).height(dy);
904 c.width = c.tscale*dx;
905 c.height = c.tscale*dy;
906 this.nlines = Math.floor(c.height/this.fontht);
907 this.saved = null;
908 this.reformat(0);
909 this.redrawtext();
910}
911
912function tautoresize(addsize, moreless) {
913 var p = $(this);
914 var oldht = p.height();
915 var ht = oldht;
916 var fontht = this.fontht/this.tscale;
917 if(addsize) {
918 this.userresized = true;
919 if(moreless > 1){
920 var wtop = $(window).scrollTop();
921 var etop = $(this).offset().top;
922 var eoff = etop-wtop;
923 console.log("resize ", wtop, etop, eoff);
924 ht = window.innerHeight - 10 - eoff;
925 } else if(moreless >= 0) {
926 ht += fontht*6;
927 } else {
928 ht -= fontht*6;
929 if(ht < 5*fontht) {
930 ht = 5*fontht;
931 }
932 }
933 }else{
934 var nln = this.frlines;
935 if(nln < 3) {
936 nln = 3;
937 }
938 ht = (nln+2) * fontht;
939 if (ht >= 400) {
940 ht = 400;
941 }
942 }
943 console.log("auto rsz", nln, ht, oldht);
944 if (oldht < ht - fontht || oldht > ht + fontht) {
945 console.log("auto resizing");
946 var delta = ht - oldht;
947 p = $(this).parent();
948 var nht = p.height() + delta;
949 p.height(nht);
950 this.mayresize();
951 }
952}
953
954function tmrlse(e) {
955 var b = 1<<(e.which-1);
956 if(b == 1 && this.malt){
957 b = 2;
958 this.buttons &= ~1;
959 this.malt = false;
960 }
961 this.buttons &= ~b;
962 return b;
963}
964
965function tmpress(e) {
966 var b = 1<<(e.which-1);
967 if(b == 1 && e.altKey){
968 b = 2;
969 this.malt = true;
970 }
971 this.buttons |= b;
972 return b;
973}
974
975// set lastx, lasty to ev coords relative to canvas
976function tevxy(e) {
977 var x = 0;
978 var y = 0;
979 if(e.fakex != undefined) {
980 x = e.fakex;
981 y = e.fakey;
982 } else {
983 var poff = $(this).offset();
984 x = e.pageX - poff.left;
985 y = e.pageY - poff.top;
986 }
987 this.lastx = x;
988 this.lasty = y;
989}
990
991function tmwait() {
992 this.onmousemove = evxy;
993 this.onmousedown = function(e){
994 try{
995 this.evxy(e);
996 this.tmpress(e);
997 }catch(ex){
998 console.log("tmwait: down: " + ex);
999 }
1000 };
1001 this.onmouseup = function(e){
1002 try{
1003 this.evxy(e);
1004 this.tmrlse(e);
1005 if(this.buttons == 0){
1006 this.onmousedown = this.tmdown;
1007 this.onmouseup = this.tmup;
1008 this.onmousemove = this.evxy;
1009 }
1010 }catch(ex){
1011 console.log("tmwait: up: " + ex);
1012 }
1013 };
1014}
1015
1016function tm1(pos) {
1017 var now = new Date().getTime();
1018 if(!this.clicktime || now-this.clicktime>500){
1019 this.dblclick = 0;
1020 this.clicktime = now;
1021 }else{
1022 this.dblclick++;
1023 this.clicktime = now;
1024 }
1025
1026 if(this.dblclick){
1027 var x = this.tgetword(pos);
1028 this.post(["click1", x[0], ""+x[1], ""+x[2]]);
1029 this.tsetsel(x[1], x[2]);
1030 }
1031 this.onmousemove = function(e){
1032 try{
1033 this.evxy(e);
1034 if(!this.buttons)
1035 return;
1036 var tpos = this.ptr2tpos(this.lastx, this.lasty);
1037 var npos = this.tpos2pos(tpos[0], tpos[1]);
1038 if(npos > pos){
1039 if(this.p0 != pos || this.p1 != npos)
1040 this.tsetsel(pos, npos, true);
1041 }else{
1042 if(this.p0 != npos || this.p1 != pos)
1043 this.tsetsel(npos, pos, true);
1044 }
1045 if(tpos[2] < 0 && this.scrollup1())
1046 this.redrawtext();
1047 if(tpos[1] >= this.frlines && this.scrolldown1())
1048 this.redrawtext();
1049 return false;
1050 }catch(ex){
1051 console.log("tm1: move: " + ex);
1052 }
1053 };
1054 this.onmousedown = function(e){
1055 try{
1056 this.evxy(e);
1057 this.tmpress(e);
1058 if(this.noedits) {
1059 return;
1060 }
1061 if(this.buttons == 1+2){
1062 this.Post(["ecut", ""+this.p0, ""+this.p1]);
1063 }
1064 if(this.buttons == 1+4){
1065 if(this.p0 != this.p1){
1066 this.Post(["edel", ""+this.p0, ""+this.p1]);
1067 }
1068 this.post(["epaste", ""+this.p0, ""+this.p1]);
1069 }
1070 if(this.buttons == 1+8){
1071 this.post(["ecopy", ""+this.p0, ""+this.p1]);
1072 }
1073 }catch(ex){
1074 console.log("tm1: down: " + ex);
1075 }
1076 };
1077
1078 this.onmouseup = function(e){
1079 try{
1080 this.evxy(e);
1081 this.tmrlse(e);
1082 if(this.buttons == 0){
1083 this.onmousedown = this.tmdown;
1084 this.onmouseup = this.tmup;
1085 this.onmousemove = this.evxy;
1086 this.post(["focus"]);
1087 this.selectend();
1088 if(document.setfocus) {
1089 document.setfocus(this);
1090 }
1091 }
1092 }catch(ex){
1093 console.log("tm1: up: " + ex);
1094 }
1095 }
1096}
1097
1098function tm234(pos, b) {
1099 this.secondary = b;
1100 this.onmousemove = function(e){
1101 try{
1102 this.evxy(e);
1103 if(!this.buttons)
1104 return;
1105 var tpos = this.ptr2tpos(this.lastx, this.lasty);
1106 var npos = this.tpos2pos(tpos[0], tpos[1]);
1107 if(npos > pos){
1108 if(this.p0 != pos || this.p1 != npos)
1109 this.tsetsel(pos, npos, true);
1110 }else
1111 if(this.p0 != npos || this.p1 != pos)
1112 this.tsetsel(npos, pos, true);
1113 if(tpos[2] < 0 && this.scrollup1())
1114 this.redrawtext();
1115 if(tpos[1] >= this.frlines && this.scrolldown1())
1116 this.redrawtext();
1117 return false;
1118 }catch(ex){
1119 console.log("tm1: move: " + ex);
1120 }
1121 };
1122 this.onmousedown = function(e){
1123 try{
1124 this.evxy(e);
1125 this.tmpress(e);
1126 this.secondaryabort = true;
1127 }catch(ex){
1128 console.log("tm2: down: " + ex);
1129 }
1130 };
1131 this.onmouseup = function(e){
1132 try{
1133 this.evxy(e);
1134 this.tmrlse(e);
1135 if(this.buttons == 0){
1136 var sp0 = this.p0;
1137 var sp1 = this.p1;
1138 var xln = this.lines[this.lines.length-1];
1139 var tsize = 0;
1140 if(xln && xln.txt.length == 0){
1141 tsize = xln.off;
1142 }
1143 this.secondary = 0;
1144 this.tsetsel(this.oldp0, this.oldp1);
1145 console.log("sp0 " + sp0 + " " + sp1 + " " + tsize);
1146 if(!this.secondaryabort)
1147 if(sp0 != sp1){
1148 var txt = this.tget(sp0, sp1);
1149 this.post(["click"+b, "", ""+sp0, ""+sp1, txt]);
1150 }else if(this.p0 != this.p1 &&
1151 sp0 >= this.p0 && sp0 <= this.p1){
1152 var txt = this.tget(this.p0, this.p1);
1153 this.post(["click"+b, txt,
1154 ""+this.p0, ""+this.p1]);
1155 }else if(b != 1 && sp0 == sp1 && tsize &&
1156 sp0 == tsize && sp0>0) {
1157 // a click at a final empty line selects the previous
1158 // line (which is the last one shown).
1159 var x = this.tgetword(sp0-1, b != 8);
1160 this.post(["click"+b, x[0],
1161 ""+x[1], ""+x[2]]);
1162 }else {
1163 var x = this.tgetword(sp0, b != 8);
1164 this.post(["click"+b, x[0],
1165 ""+x[1], ""+x[2]]);
1166 }
1167 this.onmousedown = this.tmdown;
1168 this.onmouseup = this.tmup;
1169 this.onmousemove = this.evxy;
1170 }
1171 }catch(ex){
1172 console.log("tm2: up: " + ex);
1173 }
1174 if(this.buttons == 0){
1175 this.p0 = this.oldp0;
1176 this.p1 = this.oldp1;
1177 this.secondary = 0;
1178 this.secondaryabort = false;
1179 this.selectend();
1180 }
1181 }
1182}
1183
1184function tmup(e) {
1185 e.preventDefault();
1186 try {
1187 this.tmrlse(e);
1188 this.evxy(e);
1189 if(this.buttons == 0){
1190 this.selectend();
1191 }
1192 }catch(ex){
1193 console.log("tevmup: " + ex);
1194 }
1195}
1196
1197function tmwheel(e) {
1198 try {
1199 e.preventDefault();
1200 var d = e.wheelDelta;
1201 var s = 1;
1202 if(d < 0){
1203 d = -d;
1204 d = 1 + Math.floor(d/10);
1205 if(this.scrolldown(d)){
1206 this.untick();
1207 this.redrawtext();
1208 }
1209 }else{
1210 d = 1 + Math.floor(d/10);
1211 if(this.scrollup(d)){
1212 this.untick();
1213 this.redrawtext();
1214 }
1215 }
1216 }catch(ex){
1217 console.log("tmwheel: " + ex);
1218 }
1219}
1220
1221function tmdown(e) {
1222 if(0)console.log("tmdown ", this.divid, e);
1223 this.selectstart();
1224 e.preventDefault();
1225 this.secondary = 0; /* paranoia: see tm234 */
1226 this.secondaryabort = false;
1227 try {
1228 this.tmpress(e);
1229 this.evxy(e);
1230 var b = this.buttons;
1231 switch(b){
1232 case 1:
1233 var tpos = this.ptr2tpos(this.lastx, this.lasty);
1234 var pos = this.tpos2pos(tpos[0], tpos[1]);
1235 this.tsetsel(pos, pos);
1236 this.tm1(pos);
1237 break;
1238 case 2:
1239 case 4:
1240 case 8:
1241 var tpos = this.ptr2tpos(this.lastx, this.lasty);
1242 var pos = this.tpos2pos(tpos[0], tpos[1]);
1243 this.oldp0 = this.p0;
1244 this.oldp1 = this.p1;
1245 this.tsetsel(pos, pos);
1246 this.tm234(pos, b);
1247 break;
1248 default:
1249 this.tmwait();
1250 }
1251 }catch(ex){
1252 console.log("evmdown: " + ex);
1253 }
1254 e.returnValue = false;
1255}
1256
1257function tkeydown(e, deferred) {
1258 try{
1259 var key = e.keyCode;
1260 if(!e.keyCode)
1261 key = e.which;
1262 var rune = String.fromCharCode(e.keyCode);
1263 e.stopPropagation();
1264 if(tdebug)console.log("keydown which " + e.which + " key " + e.keyCode +
1265 " '" + rune + "'" +
1266 " " + e.ctrlKey + " " + e.metaKey);
1267
1268 switch(key){
1269 case 27: /* escape */
1270 if(deferred)
1271 break;
1272 this.post(["intr", "esc"]);
1273 this.dump();
1274 console.log("["+this.p0+","+this.p1+"]='" +
1275 this.tget(this.p0, this.p1) + "'");
1276 break;
1277 case 8: /* backspace */
1278 if(this.noedits) {
1279 return;
1280 }
1281 if(deferred)
1282 break;
1283 if(this.p0 != this.p1){
1284 this.Post(["edel", ""+this.p0, ""+this.p1]);
1285 }else if(this.p0 > 0){
1286 var p0 = this.p0-1;
1287 this.Post(["edel", ""+p0, ""+this.p1]);
1288 }
1289 break;
1290 case 9: /* tab */
1291 if(this.noedits) {
1292 return;
1293 }
1294 if(deferred)
1295 break;
1296 if(this.p0 != this.p1){
1297 this.Post(["edel", ""+this.p0, ""+this.p1]);
1298 }
1299 this.Post(["eins", "\t", ""+this.p0]);
1300 break;
1301 case 32: /* space */
1302 if(deferred)
1303 break;
1304 this.Post(["eins", " ", ""+this.p0]);
1305 break;
1306 case 37: /* left */
1307 if(this.noedits) {
1308 return;
1309 }
1310 this.post(["eundo"]);
1311 break;
1312 case 38: /* up */
1313 if(deferred)
1314 break;
1315 var n = Math.floor(this.frlines/4);
1316 if(n < 1) {
1317 n = 1;
1318 }
1319 if(this.scrollup(n)){
1320 this.untick();
1321 this.redrawtext();
1322 }
1323 break;
1324 case 39: /* right */
1325 if(this.noedits) {
1326 return;
1327 }
1328 if(deferred)
1329 break;
1330 this.post(["eredo"]);
1331 break;
1332 case 40: /* down */
1333 if(deferred)
1334 break;
1335 this.untick();
1336 var n = Math.floor(this.frlines/4);
1337 if(n < 1) {
1338 n = 1;
1339 }
1340 if(this.scrolldown(n)){
1341 this.untick();
1342 this.redrawtext();
1343 }
1344 break;
1345 case 46: /* delete */
1346 if(deferred)
1347 break;
1348 this.post(["intr", "del"]);
1349 break;
1350 case 112: /* F1 */
1351 case 113: /* F2 */
1352 case 114: /* F3 */
1353 case 115: /* F4 */
1354 if(deferred)
1355 break;
1356 var mev = {
1357 fakex: this.lastx,
1358 fakey: this.lasty,
1359 which: key-112+1,
1360 };
1361 mev.preventDefault = function(){}
1362 this.onmousedown(mev);
1363 break;
1364 case 123: /* F12 */
1365 tdebug = !tdebug;
1366 break;
1367 default:
1368 return true;
1369 }
1370 return false;
1371 }catch(ex){
1372 console.log("keydown: " + ex);
1373 }
1374}
1375
1376function tkeyup(e, deferred) {
1377 try{
1378 var key = e.keyCode;
1379 if(!e.keyCode)
1380 key = e.which;
1381 var rune = String.fromCharCode(e.keyCode);
1382 var isdeadkey = e && e.originalEvent && e.originalEvent.keyIdentifier == "Unidentified";
1383 if(tdebug) {
1384 var ds = (isdeadkey ? " dead" : "");
1385 console.log("keyup which " + e.which + " key " + e.keyCode +
1386 " '" + rune + "'" + ds +
1387 " " + e.ctrlKey + " " + e.metaKey, e);
1388 }
1389 switch(key){
1390 case 112: /* F1 */
1391 case 113: /* F2 */
1392 case 114: /* F3 */
1393 case 115: /* F4 */
1394 if(deferred)
1395 break;
1396 var mev = {
1397 fakex: this.lastx,
1398 fakey: this.lasty,
1399 which: key-112+1,
1400 };
1401 mev.preventDefault = function(){}
1402 this.onmouseup(mev);
1403 break;
1404 case 18: /* Alt */
1405 this.composing = true;
1406 return true;
1407 default:
1408 return true;
1409 }
1410 return false;
1411 }catch(ex){
1412 console.log("keydown: " + ex);
1413 }
1414}
1415
1416function tevkey(e, deferred) {
1417 try {
1418 // console.log("key");
1419 var key = e.keyCode;
1420 if(!e.keyCode)
1421 key = e.which;
1422 var rune = String.fromCharCode(e.keyCode);
1423 if(tdebug)console.log("key: which " + e.which + " key " + e.keyCode +
1424 " '" + rune + "'");
1425 switch(key){
1426 case 9:
1427 rune = "\t";
1428 break;
1429 case 13:
1430 rune = "\n";
1431 break;
1432 }
1433 switch(rune){
1434 case 'c':
1435 case 'C':
1436 if(deferred)
1437 break;
1438 if(e.ctrlKey || e.metaKey){
1439 e.preventDefault();
1440 this.post(["ecopy", ""+this.p0, ""+this.p1]);
1441 return false;
1442 }
1443 break;
1444 case 'v':
1445 case 'V':
1446 if(deferred)
1447 break;
1448 if(this.noedits) {
1449 break;
1450 }
1451 if(e.ctrlKey || e.metaKey){
1452 e.preventDefault();
1453 if(this.p0 != this.p1){
1454 this.Post(["edel", ""+this.p0, ""+this.p1]);
1455 }
1456 this.post(["epaste", ""+this.p0, ""+this.p1]);
1457 return false;
1458 }
1459 break;
1460 case 'x':
1461 case 'X':
1462 if(deferred)
1463 break;
1464 if(this.noedits) {
1465 break;
1466 }
1467 if(e.ctrlKey || e.metaKey){
1468 e.preventDefault();
1469 this.Post(["ecut", ""+this.p0, ""+this.p1]);
1470 return false;
1471 }
1472 break;
1473 }
1474 if(e.metaKey || e.ctrlKey || this.noedits)
1475 return;
1476 if(deferred)
1477 return;
1478 if(this.p0 != this.p1){
1479 this.Post(["edel", ""+this.p0, ""+this.p1]);
1480 }
1481 if(this.composing) {
1482 if(!this.latin) {
1483 this.latin = "" + rune;
1484 } else {
1485 this.latin += rune;
1486 }
1487 if(!kmap.islatin(this.latin)) {
1488 this.composing = false;
1489 rune = this.latin;
1490 this.latin = "";
1491 } else {
1492 var r = kmap.latin(this.latin);
1493 if (r) {
1494 this.composing = false;
1495 rune = r;
1496 this.latin = "";
1497 } else {
1498 return;
1499 }
1500 }
1501 }
1502 this.Post(["eins", rune, ""+this.p0]);
1503 }catch(ex){
1504 console.log("text: fixtab: " + ex);
1505 }
1506}
1507
1508function tapply(ev, fromserver) {
1509 if(!ev || !ev.Args || !ev.Args[0]){
1510 console.log("apply: nil ev");
1511 return;
1512 }
1513 var arg = ev.Args
1514 if(tdebug)console.log(this.divid, "apply", ev.Args, "v", ev.Vers, this.vers);
1515 switch(arg[0]){
1516 case "held":
1517 this.locked();
1518 break;
1519 case "rlse":
1520 if(this.selecting) {
1521 this.mustunlock = true;
1522 break;
1523 }
1524 this.unlocked();
1525 break;
1526 case "noedits":
1527 this.noedits = true;
1528 break;
1529 case "edits":
1530 this.noedits = false;
1531 break;
1532 case "clean":
1533 if(document.setclean) {
1534 document.setclean(this);
1535 }
1536 break;
1537 case "dirty":
1538 if(document.setdirty) {
1539 document.setdirty(this);
1540 }
1541 break;
1542 case "show":
1543 if(document.showcontrol) {
1544 document.showcontrol(this);
1545 }
1546 break;
1547 case "tag":
1548 if(arg.length < 2){
1549 console.log(this.divid, "apply: short tag");
1550 break;
1551 }
1552 if(document.settag) {
1553 document.settag(this, arg[1]);
1554 }
1555 break;
1556 case "font":
1557 if(arg.length < 2){
1558 console.log(this.divid, "apply: short font");
1559 break;
1560 }
1561 console.log(this.divid, "font", arg[1]);
1562 this.fontstyle = arg[1];
1563 this.fixfont();
1564 this.redrawtext();
1565 break;
1566 case "markinsing":
1567 if(arg.length < 3){
1568 console.log(this.divid, "apply: short markinsing");
1569 break;
1570 }
1571 if (!this.markinsdata) {
1572 console.log("markins evs...");
1573 this.markinsdata = [];
1574 }
1575 this.markinsdata.push(arg[2]);
1576 break;
1577 case "markinsdone":
1578 console.log("markins run...");
1579 if(arg.length < 2){
1580 console.log(this.divid, "apply: short markinsdone");
1581 break;
1582 }
1583 var m = this.getmark(arg[1]);
1584 if(!m) {
1585 console.log(this.divid, "apply: no mark", arg[1]);
1586 break;
1587 }
1588 var op0 = this.p0;
1589 var op1 = this.p1;
1590 if(op0 != op1) {
1591 this.tsetsel(op0, op0);
1592 }
1593 for(var i = 0; i < this.markinsdata.length; i++) {
1594 var data = this.markinsdata[i];
1595 var nlen = data.length;
1596 var npos = m.pos + nlen;
1597 var opos = m.pos;
1598 op0 = this.p0;
1599 op1 = this.p1;
1600 this.p0 = m.pos;
1601 this.p1 = m.pos;
1602 this.tinslines(data, true);
1603 m.pos = npos;
1604 if(op0 > opos)
1605 op0 += nlen;
1606 if(op1 > opos)
1607 op1 += nlen;
1608 this.p0 = op0;
1609 this.p1 = op1;
1610 if(ev.Vers) {
1611 this.vers = ev.Vers;
1612 }
1613 }
1614 this.tsetsel(op0, op1);
1615 delete this.markinsdata;
1616 if(!this.userresized) {
1617 this.autoresize();
1618 }
1619 console.log("markins done");
1620 break;
1621 case "einsing":
1622 if(arg.length < 2){
1623 console.log(this.divid, "apply: short einsing");
1624 break;
1625 }
1626 if (!this.einsdata) {
1627 console.log("eins evs...");
1628 this.einsdata = [];
1629 }
1630 this.einsdata.push(arg[1]);
1631 break;
1632 case "einsdone":
1633 console.log("eins run...");
1634 if(arg.length < 2){
1635 console.log(this.divid, "apply: short ins");
1636 break;
1637 }
1638 if(ev.Vers && fromserver && ev.Vers != this.vers+1){
1639 console.log("OUT OF SYNC", ev.Args, "v", ev.Vers, this.vers);
1640 this.post(["needreload"]);
1641 delete this.einsdata;
1642 break;
1643 }
1644 var p0 = parseInt(arg[1]);
1645 var op0 = this.p0;
1646 var op1 = this.p1;
1647 if(op0 != op1) {
1648 this.tsetsel(op0, op0);
1649 }
1650 this.p0 = p0;
1651 this.p1 = p0;
1652 for(var i = 0; i < this.einsdata.length; i++) {
1653 var data = this.einsdata[i];
1654 this.tinslines(data);
1655 if(op0 > p0)
1656 op0 += data.length;
1657 if(op1 > p0)
1658 op1 += data.length;
1659 }
1660 delete this.einsdata;
1661 this.tsetsel(op0, op1);
1662 if(ev.Vers) {
1663 this.vers = ev.Vers;
1664 }
1665 if(!this.userresized) {
1666 this.autoresize();
1667 }
1668 console.log("eins done");
1669 break;
1670 case "eins":
1671 if(arg.length < 3){
1672 console.log(this.divid, "apply: short ins");
1673 break;
1674 }
1675 if(ev.Vers && fromserver && ev.Vers != this.vers+1){
1676 console.log("OUT OF SYNC", ev.Args, "v", ev.Vers, this.vers);
1677 this.post(["needreload"]);
1678 break;
1679 }
1680 var p0 = parseInt(arg[2]);
1681 var op0 = this.p0;
1682 var op1 = this.p1;
1683 if(op0 != op1) {
1684 this.tsetsel(op0, op0);
1685 }
1686 this.p0 = p0;
1687 this.p1 = p0;
1688 this.tinslines(arg[1]);
1689 if(op0 > p0)
1690 op0 += arg[1].length;
1691 if(op1 > p0)
1692 op1 += arg[1].length;
1693 if(fromserver) {
1694 this.tsetsel(op0, op1);
1695 }
1696 if(ev.Vers) {
1697 this.vers = ev.Vers;
1698 }
1699 if(!this.userresized && arg[1].indexOf('\n') >= 0) {
1700 this.autoresize();
1701 }
1702 break;
1703 case "edel":
1704 if(arg.length < 3){
1705 console.log(this.divid, "apply: short del");
1706 break;
1707 }
1708 if(ev.Vers && fromserver && ev.Vers != this.vers+1){
1709 console.log("OUT OF SYNC", ev.Args, "v", ev.Vers, this.vers);
1710 this.post(["needreload"]);
1711 }
1712 var p0 = parseInt(arg[1]);
1713 var p1 = parseInt(arg[2]);
1714 var op0 = this.p0;
1715 var op1 = this.p1;
1716 this.p0 = p0;
1717 this.p1 = p1;
1718 try{
1719 this.tdel();
1720 }catch(ex){
1721 console.log(this.divid, "apply: del: " + ex);
1722 }
1723 op0 = adjdel(op0, p0, p1);
1724 op1 = adjdel(op1, p0, p1);
1725 if(fromserver) {
1726 this.tsetsel(op0, op1);
1727 }
1728 if(ev.Vers) {
1729 this.vers = ev.Vers;
1730 }
1731 break;
1732 case "ecut":
1733 try{
1734 this.tdel();
1735 }catch(ex){
1736 console.log(this.divid, "apply: cut: " + ex);
1737 }
1738 if(ev.Vers)
1739 this.vers = ev.Vers;
1740 break;
1741 case "reload":
1742 this.reloadln0 = this.ln0;
1743 this.tclear();
1744 break;
1745 case "reloading":
1746 if(arg.length < 2){
1747 console.log(this.divid, "apply: short reloading");
1748 break;
1749 }
1750 this.lines.push({txt: arg[1], off: this.reloadoff, eol: true});
1751 this.reloadoff += arg[1].length + 1;
1752 break
1753 case "reloaded":
1754 if(arg.length < 2){
1755 console.log(this.divid, "apply: short reloaded");
1756 break;
1757 }
1758 this.vers = parseInt(arg[1]);
1759 if(this.reloadln0 < this.lines.length) {
1760 var ln0 = this.reloadln0;
1761 delete this.reloadln0;
1762 var xln = this.lines[this.ln0];
1763 if(xln) {
1764 this.ln0 = ln0;
1765 this.froff = xln.off
1766 }
1767 }
1768 this.redrawtext();
1769 if(!this.userresized) {
1770 this.autoresize();
1771 }
1772 // this.dump();
1773 break;
1774 case "mark":
1775 if(arg.length < 3){
1776 console.log(this.divid, "apply: short mark");
1777 break;
1778 }
1779 var pos = parseInt(arg[2]);
1780 this.setmark(arg[1], pos);
1781 break;
1782 case "sel":
1783 if(arg.length < 3){
1784 console.log(this.divid, "apply: short sel");
1785 break;
1786 }
1787 var pos0 = parseInt(arg[1]);
1788 var pos1 = parseInt(arg[2]);
1789 this.setmark("p0", pos0);
1790 this.setmark("p1", pos1);
1791 this.tsetsel(pos0, pos1, true);
1792 this.viewsel();
1793 console.log("setsel", pos0, pos1);
1794 break;
1795 case "delmark":
1796 if(arg.length < 2){
1797 console.log(this.divid, "apply: short delmark");
1798 break;
1799 }
1800 this.delmark(arg[1]);
1801 break;
1802 case "close":
1803 this.ws.close();
1804 $("#"+this.divid).remove();
1805 break;
1806 default:
1807 console.log("text: unhandled", arg[0]);
1808 }
1809}
1810
1811// This is to prevent the event from being propagated to the parent
1812// container.
1813// Despite this, it seems that if we return true in safari for a keydown
1814// then it's too late and the space bubbles and we scroll when we shouldnt.
1815// So, locknkeydown returns false and calls, by hand, the down/key/up handlers.
1816function dontbubble(e) {
1817 if (e) {
1818 e.bubbles = false;
1819 if(e.stopPropagation) {
1820 e.stopPropagation();
1821 }
1822 e.cancelBubble = true;
1823 }
1824}
1825
1826function tlocknkeydown(e) {
1827 dontbubble(e);
1828 if(this.islocked) {
1829 return tkeydown.call(this, e);
1830 }
1831 if(!this.locking) {
1832 this.locking = true;
1833 this.post(["hold"]);
1834 console.log("holding...");
1835 }
1836 var self = this;
1837 var xe = jQuery.Event("keydown");
1838 xe.which = e.which;
1839 xe.keyCode = e.keyCode;
1840 xe.ctrlKey = e.ctrlKey;
1841 xe.metaKey = e.metaKey;
1842 xe.preventDefault = function(){};
1843 this.whenlocked.push(function() {
1844 console.log("held keydown");
1845 $(self).trigger(xe);
1846 return false;
1847 });
1848 return tkeydown.call(this, e, true);
1849}
1850
1851function tlocknevkey(e) {
1852 dontbubble(e);
1853 if(this.islocked) {
1854 return tevkey.call(this, e);
1855 }
1856 if(!this.locking) {
1857 this.locking = true;
1858 this.post(["hold"]);
1859 console.log("holding...");
1860 }
1861 var self = this;
1862 var xe = jQuery.Event("keypress");
1863 xe.which = e.which;
1864 xe.keyCode = e.keyCode;
1865 xe.ctrlKey = e.ctrlKey;
1866 xe.metaKey = e.metaKey;
1867 xe.preventDefault = function(){};
1868 this.whenlocked.push(function() {
1869 console.log("held keypress");
1870 $(self).trigger(xe);
1871 return false;
1872 });
1873 return tevkey.call(this, e, true);
1874}
1875
1876function tlocknkeyup(e) {
1877 dontbubble(e);
1878 if(this.islocked) {
1879 return tkeyup.call(this, e);
1880 }
1881 if(!this.locking) {
1882 this.locking = true;
1883 this.post(["hold"]);
1884 console.log("holding...");
1885 }
1886 var self = this;
1887 var xe = jQuery.Event("keyup");
1888 xe.which = e.which;
1889 xe.keyCode = e.keyCode;
1890 xe.ctrlKey = e.ctrlKey;
1891 xe.metaKey = e.metaKey;
1892 xe.preventDefault = function(){};
1893 this.whenlocked.push(function() {
1894 console.log("held keyup");
1895 $(self).trigger(xe);
1896 return false;
1897 });
1898 return tkeyup.call(this, e, true);
1899}
1900
1901function tlocknmdown(e) {
1902 if(this.islocked) {
1903 return tmdown.call(this, e);
1904 }
1905 if(!this.locking) {
1906 this.locking = true;
1907 this.post(["hold"]);
1908 console.log("holding...");
1909 }
1910 var self = this;
1911 var xe = jQuery.Event("mousedown");
1912 xe.which = e.which;
1913 xe.pageX = e.pageX;
1914 xe.pageY = e.pageY;
1915 xe.preventDefault = function(){};
1916 this.whenlocked.push(function() {
1917 console.log("held mousedown");
1918 $(self).trigger(xe);
1919 return false;
1920 });
1921 return false;
1922}
1923
1924function tlocknmup(e) {
1925 if(this.islocked) {
1926 return tmup.call(this, e);
1927 }
1928 if(!this.locking) {
1929 this.locking = true;
1930 this.post(["hold"]);
1931 console.log("holding...");
1932 }
1933 var self = this;
1934 var xe = jQuery.Event("mouseup");
1935 xe.which = e.which;
1936 xe.pageX = e.pageX;
1937 xe.pageY = e.pageY;
1938 xe.preventDefault = function(){};
1939 this.whenlocked.push(function() {
1940 console.log("held mouseup");
1941 $(self).trigger(xe);
1942 return false;
1943 });
1944 return false;
1945}
1946
1947function tlocked() {
1948 if(this.islocked)
1949 return;
1950 if(this.locking) {
1951 this.locking = false;
1952 this.islocked = true;
1953 this.tkeydown = tkeydown;
1954 this.tkeypress = tevkey;
1955 this.tkeyup = tkeyup;
1956 this.tmdown = tmdown;
1957 this.tmup = tmup;
1958 for(var i = 0; i < this.whenlocked.length; i++) {
1959 this.whenlocked[i]();
1960 }
1961 this.whenlocked = [];
1962 }
1963}
1964
1965function tunlocked() {
1966 this.islocked = false;
1967 this.locking = false;
1968 this.mustunlock = false;
1969 this.whenlocked = [];
1970 this.tkeydown = tlocknkeydown;
1971 this.tkeypress = tlocknevkey;
1972 this.tkeyup = tlocknkeyup;
1973 this.tmdown = tlocknmdown;
1974 this.tmup = tlocknmup;
1975 this.mustunlock = false;
1976 this.post(["tick", ""+this.p0, ""+this.p1]);
1977 this.post(["rlsed"]);
1978 // collapse the selection or other's might insert in the middle.
1979 if(this.p0 != this.p1)
1980 this.tsetsel(this.p0, this.p1, true);
1981}
1982
1983var selecting = false;
1984
1985function tselectstart() {
1986 if(!this.selecting) {
1987 console.log("selecting...");
1988 }
1989 this.selecting = true;
1990 selecting = true;
1991 this.oldp0 = this.p0;
1992 this.oldp1 = this.p1;
1993}
1994
1995function tselectend() {
1996 if(this.mustunlock) {
1997 this.unlocked();
1998 }
1999 if(!this.selecting) {
2000 return;
2001 }
2002 console.log("select end");
2003 if(this.oldp0 != this.p0 || this.oldp1 != this.p1) {
2004 this.post(["tick", ""+this.p0, ""+this.p1]);
2005 this.oldp0 = this.p0;
2006 this.oldp1 = this.p1;
2007 }
2008 this.selecting = false;
2009 selecting = false;
2010}
2011
2012function tclear() {
2013 this.reloadoff = 0;
2014 this.vers = 0;
2015 this.nlines = 0;
2016 this.ln0 = 0;
2017 this.p0 = 0;
2018 this.p1 = 0;
2019 this.frsize = 0;
2020 this.frlines = 0;
2021 this.lines = [];
2022 // NB: we are not clearing marks
2023 // we might leak old mark names not deleted
2024 // but at least we preserve marks upon reloads
2025}
2026
2027function tsetmark(mark, p) {
2028 for(var i = 0; i < this.marks.length; i++){
2029 var m = this.marks[i];
2030 if(m.name == mark) {
2031 m.pos = p;
2032 return;
2033 }
2034 }
2035 this.marks.push({name: mark, pos: p});
2036}
2037
2038function tgetmark(mark) {
2039 for(var i = 0; i < this.marks.length; i++){
2040 var m = this.marks[i];
2041 if(m.name == mark) {
2042 return m;
2043 }
2044 }
2045 return null;
2046}
2047
2048function tdelmark(mark) {
2049 for(var i = 0; i < this.marks.length; i++){
2050 var m = this.marks[i];
2051 if(m.name == mark) {
2052 this.marks.splice(i, 1);
2053 return;
2054 }
2055 }
2056}
2057
2058function tmarkins(n) {
2059 for(var i = 0; i < this.marks.length; i++){
2060 var m = this.marks[i];
2061 if(m.pos > this.p0) {
2062 m.pos += n;
2063 }
2064 }
2065}
2066
2067function tmarkdel() {
2068 for(var i = 0; i < this.marks.length; i++){
2069 var m = this.marks[i];
2070 if(m.pos <= this.p0) {
2071 continue;
2072 }
2073 var p1 = this.p1;
2074 if(p1 > m.pos) {
2075 p1 = m.pos;
2076 }
2077 m.pos -= (p1-this.p0);
2078 }
2079}
2080
2081/*
2082 e is a canvas element with id and class already set,
2083 and .lines[] with initial text.
2084 d is is the (jquery) parent that will supply kbd events.
2085 cid is the class id for e.
2086 t is the tag
2087 */
2088function mktxt(d, t, e, cid, id) {
2089 var ctx=e.getContext("2d", {alpha: false});
2090 e.divcid = cid;
2091 e.divid = id;
2092 e.vers = 0;
2093 e.tscale = 4; // tscale must be even; we /2
2094 e.nlines = 0;
2095 e.ln0 = 0;
2096 e.frsize = 0;
2097 e.frlines = 0;
2098 e.p0 = e.p1 = 0;
2099 e.fontstyle = 'r';
2100 checkoutfonts(ctx);
2101 e.notabs = notabs;
2102 e.tabstop = 4;
2103 var tabtext = Array(e.tabstop+1).join("X")
2104 e.tabwid = ctx.measureText(tabtext).width;
2105 e.fontht = 14*e.tscale; // TODO: use font height from fixfont
2106 e.buttons = 0;
2107 e.nclicks = {1: 0, 2: 0, 4: 0};
2108 e.userresized = false;
2109 ctx.fillStyle = "#FFFFEA";
2110 e.drawline = tdrawline;
2111 e.dump = tdump;
2112 e.evxy = tevxy;
2113 e.fixfont = tfixfont;
2114 e.linewrap = tlinewrap;
2115 e.mayresize = tmayresize;
2116 e.autoresize = tautoresize;
2117 e.posdx = tposdx;
2118 e.ptr2tpos = tptr2tpos;
2119 e.redrawtext = tredrawtext;
2120 e.reformat = treformat;
2121 e.scrolldown = tscrolldown;
2122 e.scrolldown1 = tscrolldown1;
2123 e.scrollup = tscrollup;
2124 e.scrollup1 = tscrollup1;
2125 e.setlinesoff = tsetlinesoff;
2126 e.tdel = ttdel;
2127 e.tget = ttget;
2128 e.tgetword = ttgetword;
2129 e.tins = ttins;
2130 e.tinslines = ttinslines;
2131 e.tpos2pos = ttpos2pos;
2132 e.tsetsel = ttsetsel;
2133 e.viewsel = tviewsel;
2134 e.untick = tuntick;
2135 e.updatescrl = tupdatescrl;
2136
2137 e.selectstart = tselectstart;
2138 e.selectend = tselectend;
2139
2140 e.marks = [];
2141 e.setmark = tsetmark;
2142 e.getmark = tgetmark;
2143 e.delmark = tdelmark;
2144 e.markins = tmarkins;
2145 e.markdel = tmarkdel;
2146
2147 e.noedits = false;
2148
2149 e.locked = tlocked;
2150 e.unlocked = tunlocked;
2151 e.whenlocked = [];
2152
2153 e.tkeydown = tlocknkeydown;
2154 e.tkeypress = tlocknevkey;
2155 e.tkeyup = tlocknkeyup;
2156 e.onmousedown = tlocknmdown;
2157 e.onmouseup = tlocknmup;
2158 e.onmouseenter = function(e) {
2159 if(!selecting) {
2160 var x = window.scrollX;
2161 var y = window.scrollY;
2162 $("#" + this.divid ).focus();
2163 window.scrollTo(x, y);
2164 }
2165 if(this.islocked || this.locking) {
2166 return;
2167 }
2168 this.locking = true;
2169 this.post(["hold"]);
2170 console.log("holding...");
2171 };
2172 e.onmousemove = function(e) {
2173 if(this.islocked || this.locking) {
2174 return tevxy.call(this, e);
2175 }
2176 this.locking = true;
2177 this.post(["hold"]);
2178 console.log("holding...");
2179 return false;
2180 };
2181 e.onmousewheel = function(ev) {
2182 ev.stopPropagation();
2183 if(e.islocked || e.locking) {
2184 return tmwheel.call(e, ev);
2185 }
2186 e.locking = true;
2187 e.post(["hold"]);
2188 console.log("holding...");
2189 return false;
2190 };
2191
2192 e.onpaste = function(){return false;}
2193 e.oncontextmenu = function(){return false;}
2194 e.onclick = null;
2195 e.onddblclick = null;
2196 e.tm1 = tm1;
2197 e.tm234 = tm234;
2198 e.tmdown = tmdown;
2199 e.tmpress = tmpress;
2200 e.tmrlse = tmrlse;
2201 e.tmup = tmup;
2202 e.tmwait = tmwait;
2203
2204 e.fixfont();
2205 e.mayresize();
2206 e.redrawtext();
2207
2208 e.tclear = tclear;
2209
2210 d.keypress(function(ev){
2211 dontbubble(ev);
2212 return e.tkeypress(ev);
2213 })
2214 .keyup(function(ev){
2215 dontbubble(ev);
2216 return e.tkeyup(ev);
2217 })
2218 .keydown(function(ev){
2219 dontbubble(ev);
2220 return e.tkeydown(ev);
2221 }).get(0).update = function(ev) {
2222 if(ev.Src == id){
2223 console.log("txt ignd update", ev.Args);
2224 return;
2225 }
2226 console.log("txt update", ev.Args);
2227 e.apply(ev);
2228 };
2229 var preht = d.height();
2230 e.apply = tapply;
2231 e.Post = function(args) {
2232 var ev = this.post(args);
2233 if(ev){
2234 try {
2235 this.apply(ev);
2236 }catch(ex){
2237 console.log("txt apply: " + ex);
2238 }
2239 }
2240 };
2241 e.post = function(args) {
2242 if(!e.ws){
2243 console.log("no ws");
2244 return nil;
2245 }
2246 var ws = e.ws;
2247 if(!args || !args[0]){
2248 console.log("post: no args");
2249 return nil;
2250 }
2251 var ev = {}
2252 ev.Id = cid;
2253 ev.Src = id;
2254 if(!this.vers)
2255 this.vers = 0;
2256 // cut advances the vers (might del nothing)
2257 if(args[0] == "eins" || args[0] == "edel"){
2258 this.vers++;
2259 }
2260 ev.Vers = this.vers;
2261 ev.Args = args;
2262 var msg = JSON.stringify(ev);
2263 try {
2264 ws.send(msg);
2265 // console.log("posting ", msg);
2266 }catch(ex){
2267 console.log("post: " + ex);
2268 }
2269 // if this is a cut, it implies a del and we
2270 // must advance our vers, the event didn't
2271 // advance the vers.
2272 // Same for paste.
2273 if(args[0] == "ecut" || args[0] == "epaste") {
2274 ev.Vers++;
2275 }
2276 return ev;
2277 };
2278
2279 var wsurl = "wss://" + window.location.host + "/ws/" + cid;
2280 if(d.wsaddr) {
2281 wsurl = d.wsaddr + "/ws/" + cid;
2282 }
2283 e.ws = new WebSocket(wsurl);
2284 d.get(0).ws = e.ws;
2285 d.get(0).post = e.post;
2286 d.get(0).addsize = function(moreless) {
2287 e.autoresize(true, moreless);
2288 };
2289 e.ws.onopen = function() {
2290 e.post(["id"]);
2291 };
2292 e.ws.onerror = function(ev) {
2293 console.log("ws err", ev);
2294 };
2295 e.ws.onmessage = function(ev) {
2296 //console.log("got msg", ev.data);
2297 var o = JSON.parse(ev.data);
2298 if(!o || !o.Id) {
2299 console.log("update: no objet id");
2300 return;
2301 }
2302 if(tdebug)console.log("update to", o.Id, o.Args);
2303 e.apply(o, true);
2304 };
2305 e.ws.onclose = function() {
2306 console.log("text socket " + wsurl+ " closed\n");
2307 d.replaceWith("<h3>disconnected</h3>");
2308 };
2309 d.resizable({
2310 handles: 's'
2311 }).on('resize', function() {
2312 console.log("user resized");
2313 e.mayresize(true);
2314 });
2315 $(window).resize(function() {
2316 console.log("window resized");
2317 e.mayresize(false);
2318 });
2319 if(t) {
2320 $("#"+id+"t").getWordByEvent('click', function tagclick(ev, word) {
2321 console.log("tag click on ", ev, word);
2322 if(false && word == "Del") {
2323 e.ws.close();
2324 d.remove();
2325 return;
2326 }
2327 e.post(["tag", word]);
2328 });
2329 }
2330}
2331
2332document.mktxt = mktxt
2333
net/ink/js/txt.jsold+391−180
@@ -1,5 +1,8 @@
1"use strict";1"use strict";
2/*2/*
3
4 DEPRECATED. lines.js and ntxt.js are the implementation now.
5
3 js code for the clive text frame6 js code for the clive text frame
4 which is similar to a Plan 9 text frame7 which is similar to a Plan 9 text frame
5 but implemented with the HTML5 canvas.8 but implemented with the HTML5 canvas.
@@ -18,6 +21,7 @@ · 12 unmodified lines
18var tffixed = "monospace";21var tffixed = "monospace";
19var tfvar = "Lucida Grande"; // or Verdana22var tfvar = "Lucida Grande"; // or Verdana
20var fontscheckedout = false;23var fontscheckedout = false;
24var tdebug = false;
21 25
22function checkoutfonts(ctx) {26function checkoutfonts(ctx) {
23 if(fontscheckedout)27 if(fontscheckedout)
@@ -50,7 +54,7 @@ function tfixfont() { · 26 unmodified lines
50 if(this.fontstyle.indexOf('i') > -1) {54 if(this.fontstyle.indexOf('i') > -1) {
51 mod = "italic " + mod;55 mod = "italic " + mod;
52 }56 }
53 var ht = this.fontht - 4;57 var ht = this.fontht - 2*this.tscale;
54 ctx.font = mod + " " + ht+"px "+ style;58 ctx.font = mod + " " + ht+"px "+ style;
55 ctx.textBaseline="top";59 ctx.textBaseline="top";
56}60}
@@ -222,26 +226,32 @@ function tuntick() { · 165 unmodified lines
222}226}
223 227
224function tviewsel() {228function tviewsel() {
225 if(!this.lines[this.ln0]) {229 if(this.lines[this.ln0]) {
226 return;230 var off = this.lines[this.ln0].off;
227 }231 var eoff = off+this.frsize;
228 var off = this.lines[this.ln0].off;232 if(this.p0 >= off && this.p0 <= eoff) {
229 var eoff = off+this.frsize;233 return;
230 if(this.p0 >= off && this.p0 <= eoff) {234 }
231 return;
232 }235 }
233 for(var i = 0; i < this.lines.length; i++){236 for(var i = 0; i < this.lines.length; i++){
234 var xln = this.lines[i];237 var xln = this.lines[i];
235 var xlnlen = xln.txt.length;238 var xlnlen = xln.txt.length;
236 if(this.p0 >= xln.off && this.p0 <= xln.off+xlnlen){239 if(this.p0 >= xln.off && this.p0 <= xln.off+xlnlen){
237 var n = i - this.frlines/3;240 var n = i - Math.floor(this.frlines/3);
238 if(n < 0) {241 if(n < 0) {
239 n = 0;242 n = 0;
240 }243 }
244 if(n >= this.lines.length) {
245 n = this.lines.length-1;
246 }
241 xln = this.lines[n];247 xln = this.lines[n];
242 this.ln0 = n;248 if(xln) {
243 this.froff = xln.off;249 this.ln0 = n;
244 this.redrawtext();250 this.froff = xln.off;
251 this.redrawtext();
252 } else {
253 console.log("tviewsel: no ln for", n, i);
254 }
245 return;255 return;
246 }256 }
247 }257 }
@@ -258,6 +268,10 @@ function ttsetsel(p0, p1, refreshall) { · 10 unmodified lines
258 p1 = this.nrunes;268 p1 = this.nrunes;
259 if(this.p0 != this.p1)269 if(this.p0 != this.p1)
260 refreshall = true;270 refreshall = true;
271 if(!this.lines[this.ln0]) {
272 return;
273 }
274 var froff = this.lines[this.ln0].off;
261 if(refreshall && (this.p1 <froff || this.p0 >froff+this.frsize))275 if(refreshall && (this.p1 <froff || this.p0 >froff+this.frsize))
262 refreshall = false;276 refreshall = false;
263 var mp0 = p0;277 var mp0 = p0;
@@ -271,10 +285,6 @@ function ttsetsel(p0, p1, refreshall) { · 7 unmodified lines
271 this.p0 = p0;285 this.p0 = p0;
272 this.p1 = p1;286 this.p1 = p1;
273 this.untick();287 this.untick();
274 if(!this.lines[this.ln0]) {
275 return;
276 }
277 var froff = this.lines[this.ln0].off;
278 if(mp1 <froff || mp0 >froff+this.frsize)288 if(mp1 <froff || mp0 >froff+this.frsize)
279 return;289 return;
280 var insel = false;290 var insel = false;
@@ -393,8 +403,8 @@ function tdrawline(xln, i) { · 112 unmodified lines
393 xln != this.lines[this.lines.length-1])403 xln != this.lines[this.lines.length-1])
394 return true;404 return true;
395 var dx = this.posdx(xln, this.p0 - xln.off);405 var dx = this.posdx(xln, this.p0 - xln.off);
396 dx += marginsz - 2;406 dx += marginsz - 3*this.tscale/2;
397 this.saved = ctx.getImageData(dx, pos, 4, this.fontht);407 this.saved = ctx.getImageData(dx, pos, 3*this.tscale, this.fontht);
398 this.tickx = dx;408 this.tickx = dx;
399 this.ticky = pos;409 this.ticky = pos;
400 ctx.putImageData(this.tick, dx, pos);410 ctx.putImageData(this.tick, dx, pos);
@@ -469,15 +479,17 @@ function tredrawtext() { · 68 unmodified lines
469 if(!this.tick){479 if(!this.tick){
470 var x = ctx.lineWidth;480 var x = ctx.lineWidth;
471 ctx.lineWidth = 1;481 ctx.lineWidth = 1;
472 ctx.fillRect(0, 0, 6, 6);482 var d = 3*this.tscale;
473 ctx.fillRect(0, this.fontht-6, 6, 6);483 ctx.fillRect(0, 0, d, d);
474 ctx.moveTo(3, 0);484 ctx.fillRect(0, this.fontht-d, d, d);
475 ctx.lineTo(3, this.fontht);485 ctx.moveTo(d/2, 0);
486 ctx.lineTo(d/2, this.fontht);
476 ctx.stroke();487 ctx.stroke();
477 ctx.lineWidth = x;488 ctx.lineWidth = x;
478 this.tick = ctx.getImageData(0, 0, 6, this.fontht);489 this.tick = ctx.getImageData(0, 0, d, this.fontht);
479 }490 }
480 if(!this.lines[this.ln0]) {491 if(!this.lines[this.ln0]) {
492 console.log("tredrawtext: no ln0");
481 return;493 return;
482 }494 }
483 var off = this.lines[this.ln0].off;495 var off = this.lines[this.ln0].off;
@@ -486,11 +498,11 @@ function tredrawtext() { · 2 unmodified lines
486 this.frlines = 0;498 this.frlines = 0;
487 for(var i = 0; i <= nlines; i++){499 for(var i = 0; i <= nlines; i++){
488 if(this.ln0+i < this.lines.length){500 if(this.ln0+i < this.lines.length){
489 this.frlines++;
490 var xln = this.lines[this.ln0+i];501 var xln = this.lines[this.ln0+i];
491 off += lnlen(xln);
492 if(!this.drawline(xln, i))502 if(!this.drawline(xln, i))
493 break;503 break;
504 this.frlines++;
505 off += lnlen(xln);
494 }else506 }else
495 if(!this.drawline(null, i))507 if(!this.drawline(null, i))
496 break;508 break;
@@ -570,7 +582,7 @@ function ttins(t, dontscroll) { · 73 unmodified lines
570 this.reformat(i);582 this.reformat(i);
571 if(!dontscroll)583 if(!dontscroll)
572 if(i >= this.ln0+this.nlines-1 &&584 if(i >= this.ln0+this.nlines-1 &&
573 i <= this.ln0+this.nlines+1)585 i <= this.ln0+this.nlines+1 && this.nlines > 1)
574 this.scrolldown(nscrl);586 this.scrolldown(nscrl);
575 this.redrawtext();587 this.redrawtext();
576 return;588 return;
@@ -675,7 +687,13 @@ var wordre = null; · 98 unmodified lines
675function iswordchar(c) {687function iswordchar(c) {
676 if(!wordre)688 if(!wordre)
677 wordre = /\w/;689 wordre = /\w/;
678 return c == '/' || c == '.' || c == ':' || c == '#' || c == ',' || wordre.test(c);690 return wordre.test(c);
691}
692
693function islongwordchar(c) {
694 if(!wordre)
695 wordre = /\w/;
696 return c == '-' || c == '(' || c == ')' || c == '/' || c == '.' || c == ':' || c == '#' || c == ',' || wordre.test(c);
679}697}
680 698
681function islparen(c) {699function islparen(c) {
@@ -700,9 +718,13 @@ function lparen(c) { · 18 unmodified lines
700 return "([{<".charAt(i);718 return "([{<".charAt(i);
701}719}
702 720
703function ttgetword(pos) {721function ttgetword(pos, long) {
704 if(pos >= this.nrunes)722 if(pos >= this.nrunes)
705 return ["", this.nrunes, this.nrunes];723 return ["", this.nrunes, this.nrunes];
724 var ischar = iswordchar;
725 if(long) {
726 ischar = islongwordchar;
727 }
706 var i;728 var i;
707 var xln;729 var xln;
708 for(i = 0; i < this.lines.length; i++){730 for(i = 0; i < this.lines.length; i++){
@@ -792,13 +814,13 @@ function ttgetword(pos) { · 83 unmodified lines
792 }while(i >= 0 && n > 0);814 }while(i >= 0 && n > 0);
793 return [txt, pos, epos];815 return [txt, pos, epos];
794 }816 }
795 if(!iswordchar(c))817 if(!islongwordchar(c))
796 return "";818 return [xln.txt.slice(p0, p1), pos, epos];
797 while(p0 > 0 && iswordchar(xln.txt.charAt(p0-1))){819 while(p0 > 0 && ischar(xln.txt.charAt(p0-1))){
798 pos--;820 pos--;
799 p0--;821 p0--;
800 }822 }
801 while(p1 < xlnlen && iswordchar(xln.txt.charAt(p1))){823 while(p1 < xlnlen && ischar(xln.txt.charAt(p1))){
802 epos++;824 epos++;
803 p1++;825 p1++;
804 }826 }
@@ -869,7 +891,7 @@ function tmayresize(user) { · 64 unmodified lines
869 var p = $(this).parent();891 var p = $(this).parent();
870 var dx = p.width();892 var dx = p.width();
871 var dy = p.height() - 5;893 var dy = p.height() - 5;
872 console.log('text resized', dx, dy);894 console.log('text resized', dx, dy, user?"user":"win");
873 var c = this;895 var c = this;
874 var ctx = this.getContext("2d", {alpha: false});896 var ctx = this.getContext("2d", {alpha: false});
875 var tag = $("#"+this.divid+"t")897 var tag = $("#"+this.divid+"t")
@@ -887,23 +909,44 @@ function tmayresize(user) { · 11 unmodified lines
887 this.redrawtext();909 this.redrawtext();
888}910}
889 911
890function tautoresize() {912function tautoresize(addsize, moreless) {
891 var nln = this.frlines;
892 if(nln < 3) {
893 nln = 3;
894 }
895 var ht = (nln+2) * this.fontht;
896 var p = $(this);913 var p = $(this);
897 var oldht = p.height();914 var oldht = p.height();
898 if (oldht >= 400) {915 var ht = oldht;
899 return;916 var fontht = this.fontht/this.tscale;
917 if(addsize) {
918 this.userresized = true;
919 if(moreless > 1){
920 var wtop = $(window).scrollTop();
921 var etop = $(this).offset().top;
922 var eoff = etop-wtop;
923 console.log("resize ", wtop, etop, eoff);
924 ht = window.innerHeight - 10 - eoff;
925 } else if(moreless >= 0) {
926 ht += fontht*6;
927 } else {
928 ht -= fontht*6;
929 if(ht < 5*fontht) {
930 ht = 5*fontht;
931 }
932 }
933 }else{
934 var nln = this.frlines;
935 if(nln < 3) {
936 nln = 3;
937 }
938 ht = (nln+2) * fontht;
939 if (ht >= 400) {
940 ht = 400;
941 }
900 }942 }
901 console.log("auto rsz", nln, ht, p.height());943 console.log("auto rsz", nln, ht, oldht);
902 if (oldht < ht - this.fontht || oldht > ht + this.fontht) {944 if (oldht < ht - fontht || oldht > ht + fontht) {
945 console.log("auto resizing");
903 var delta = ht - oldht;946 var delta = ht - oldht;
904 p = $(this).parent();947 p = $(this).parent();
905 var nht = p.height() + delta;948 var nht = p.height() + delta;
906 p.css('height', nht);949 p.height(nht);
907 this.mayresize();950 this.mayresize();
908 }951 }
909}952}
@@ -973,18 +1016,18 @@ function tmwait() { · 63 unmodified lines
973function tm1(pos) {1016function tm1(pos) {
974 var now = new Date().getTime();1017 var now = new Date().getTime();
975 if(!this.clicktime || now-this.clicktime>500){1018 if(!this.clicktime || now-this.clicktime>500){
976 this.dblclick = false;1019 this.dblclick = 0;
977 this.clicktime = now;1020 this.clicktime = now;
978 }else{1021 }else{
979 this.dblclick = true;1022 this.dblclick++;
980 this.clicktime = now;1023 this.clicktime = now;
981 }1024 }
982 1025 var wassel = true;
983 if(this.dblclick){1026 if(this.dblclick){
984 var x = this.tgetword(pos);1027 var x = this.tgetword(pos, this.dblclick>1);
985 this.post(["click1", x[0], ""+x[1], ""+x[2]]);1028 this.post(["click1", x[0], ""+x[1], ""+x[2]]);
986 this.tsetsel(x[1], x[2]);1029 this.tsetsel(x[1], x[2]);
987 this.clicktime = null;1030 wassel = false;
988 }1031 }
989 this.onmousemove = function(e){1032 this.onmousemove = function(e){
990 try{1033 try{
@@ -1016,15 +1059,21 @@ function tm1(pos) { · 25 unmodified lines
1016 if(this.noedits) {1059 if(this.noedits) {
1017 return;1060 return;
1018 }1061 }
1019 if(this.buttons == 3){1062 if(this.buttons == 1+2){
1063 wassel = false;
1020 this.Post(["ecut", ""+this.p0, ""+this.p1]);1064 this.Post(["ecut", ""+this.p0, ""+this.p1]);
1021 }1065 }
1022 if(this.buttons == 5){1066 if(this.buttons == 1+4){
1067 wassel = false;
1023 if(this.p0 != this.p1){1068 if(this.p0 != this.p1){
1024 this.Post(["edel", ""+this.p0, ""+this.p1]);1069 this.Post(["edel", ""+this.p0, ""+this.p1]);
1025 }1070 }
1026 this.post(["epaste", ""+this.p0, ""+this.p1]);1071 this.post(["epaste", ""+this.p0, ""+this.p1]);
1027 }1072 }
1073 if(this.buttons == 1+8){
1074 wassel = false;
1075 this.post(["ecopy", ""+this.p0, ""+this.p1]);
1076 }
1028 }catch(ex){1077 }catch(ex){
1029 console.log("tm1: down: " + ex);1078 console.log("tm1: down: " + ex);
1030 }1079 }
@@ -1040,6 +1089,13 @@ function tm1(pos) { · 9 unmodified lines
1040 this.onmousemove = this.evxy;1089 this.onmousemove = this.evxy;
1041 this.post(["focus"]);1090 this.post(["focus"]);
1042 this.selectend();1091 this.selectend();
1092 if(wassel && this.p0 != this.p1) {
1093 var x = this.tget(this.p0, this.p1);
1094 this.post(["click1", x, ""+this.p0, ""+this.p1]);
1095 }
1096 if(document.setfocus) {
1097 document.setfocus(this);
1098 }
1043 }1099 }
1044 }catch(ex){1100 }catch(ex){
1045 console.log("tm1: up: " + ex);1101 console.log("tm1: up: " + ex);
@@ -1047,7 +1103,7 @@ function tm1(pos) { · 1 unmodified line
1047 }1103 }
1048}1104}
1049 1105
1050function tm23(pos, b) {1106function tm234(pos, b) {
1051 this.secondary = b;1107 this.secondary = b;
1052 this.onmousemove = function(e){1108 this.onmousemove = function(e){
1053 try{1109 try{
@@ -1087,8 +1143,14 @@ function tm23(pos, b) { · 33 unmodified lines
1087 if(this.buttons == 0){1143 if(this.buttons == 0){
1088 var sp0 = this.p0;1144 var sp0 = this.p0;
1089 var sp1 = this.p1;1145 var sp1 = this.p1;
1146 var xln = this.lines[this.lines.length-1];
1147 var tsize = 0;
1148 if(xln && xln.txt.length == 0){
1149 tsize = xln.off;
1150 }
1090 this.secondary = 0;1151 this.secondary = 0;
1091 this.tsetsel(this.oldp0, this.oldp1);1152 this.tsetsel(this.oldp0, this.oldp1);
1153 console.log("sp0 " + sp0 + " " + sp1 + " " + tsize);
1092 if(!this.secondaryabort)1154 if(!this.secondaryabort)
1093 if(sp0 != sp1){1155 if(sp0 != sp1){
1094 var txt = this.tget(sp0, sp1);1156 var txt = this.tget(sp0, sp1);
@@ -1098,8 +1160,15 @@ function tm23(pos, b) { · 3 unmodified lines
1098 var txt = this.tget(this.p0, this.p1);1160 var txt = this.tget(this.p0, this.p1);
1099 this.post(["click"+b, txt,1161 this.post(["click"+b, txt,
1100 ""+this.p0, ""+this.p1]);1162 ""+this.p0, ""+this.p1]);
1101 }else{1163 }else if(b != 1 && sp0 == sp1 && tsize &&
1102 var x = this.tgetword(sp0);1164 sp0 == tsize && sp0>0) {
1165 // a click at a final empty line selects the previous
1166 // line (which is the last one shown).
1167 var x = this.tgetword(sp0-1, b != 8 || this.dblclick>1);
1168 this.post(["click"+b, x[0],
1169 ""+x[1], ""+x[2]]);
1170 }else {
1171 var x = this.tgetword(sp0, b != 8 || this.dblclick>1);
1103 this.post(["click"+b, x[0],1172 this.post(["click"+b, x[0],
1104 ""+x[1], ""+x[2]]);1173 ""+x[1], ""+x[2]]);
1105 }1174 }
@@ -1161,7 +1230,7 @@ function tmdown(e) { · 55 unmodified lines
1161 if(0)console.log("tmdown ", this.divid, e);1230 if(0)console.log("tmdown ", this.divid, e);
1162 this.selectstart();1231 this.selectstart();
1163 e.preventDefault();1232 e.preventDefault();
1164 this.secondary = 0; /* paranoia: see tm23 */1233 this.secondary = 0; /* paranoia: see tm234 */
1165 this.secondaryabort = false;1234 this.secondaryabort = false;
1166 try {1235 try {
1167 this.tmpress(e);1236 this.tmpress(e);
@@ -1176,12 +1245,13 @@ function tmdown(e) { · 8 unmodified lines
1176 break;1245 break;
1177 case 2:1246 case 2:
1178 case 4:1247 case 4:
1248 case 8:
1179 var tpos = this.ptr2tpos(this.lastx, this.lasty);1249 var tpos = this.ptr2tpos(this.lastx, this.lasty);
1180 var pos = this.tpos2pos(tpos[0], tpos[1]);1250 var pos = this.tpos2pos(tpos[0], tpos[1]);
1181 this.oldp0 = this.p0;1251 this.oldp0 = this.p0;
1182 this.oldp1 = this.p1;1252 this.oldp1 = this.p1;
1183 this.tsetsel(pos, pos);1253 this.tsetsel(pos, pos);
1184 this.tm23(pos, b);1254 this.tm234(pos, b);
1185 break;1255 break;
1186 default:1256 default:
1187 this.tmwait();1257 this.tmwait();
@@ -1192,114 +1262,21 @@ function tmdown(e) { · 4 unmodified lines
1192 e.returnValue = false;1262 e.returnValue = false;
1193}1263}
1194 1264
1195function tevkey(e) {1265function tkeydown(e, deferred) {
1196 try {
1197 // console.log("key");
1198 var key = e.keyCode;
1199 if(!e.keyCode)
1200 key = e.which;
1201 var rune = String.fromCharCode(e.keyCode);
1202 if(0)console.log("key: which " + e.which + " key " + e.keyCode +
1203 " '" + rune + "'");
1204 switch(key){
1205 case 9:
1206 rune = "\t";
1207 break;
1208 case 13:
1209 rune = "\n";
1210 break;
1211 }
1212 switch(rune){
1213 case 'c':
1214 case 'C':
1215 if(e.ctrlKey || e.metaKey){
1216 e.preventDefault();
1217 this.post(["ecopy", ""+this.p0, ""+this.p1]);
1218 return false;
1219 }
1220 break;
1221 case 'v':
1222 case 'V':
1223 if(this.noedits) {
1224 break;
1225 }
1226 if(e.ctrlKey || e.metaKey){
1227 e.preventDefault();
1228 if(this.p0 != this.p1){
1229 this.Post(["edel", ""+this.p0, ""+this.p1]);
1230 }
1231 this.post(["epaste", ""+this.p0, ""+this.p1]);
1232 return false;
1233 }
1234 break;
1235 case 'x':
1236 case 'X':
1237 if(this.noedits) {
1238 break;
1239 }
1240 if(e.ctrlKey || e.metaKey){
1241 e.preventDefault();
1242 this.Post(["ecut", ""+this.p0, ""+this.p1]);
1243 return false;
1244 }
1245 break;
1246 }
1247 if(e.metaKey || e.ctrlKey || this.noedits)
1248 return;
1249 if(this.p0 != this.p1){
1250 this.Post(["edel", ""+this.p0, ""+this.p1]);
1251 }
1252 this.Post(["eins", rune, ""+this.p0]);
1253 }catch(ex){
1254 console.log("text: fixtab: " + ex);
1255 }
1256}
1257
1258
1259function tkeyup(e) {
1260 try{
1261 var key = e.keyCode;
1262 if(!e.keyCode)
1263 key = e.which;
1264 var rune = String.fromCharCode(e.keyCode);
1265 if(0)
1266 console.log("keyup which " + e.which + " key " + e.keyCode +
1267 " '" + rune + "'" +
1268 " " + e.ctrlKey + " " + e.metaKey);
1269 switch(key){
1270 case 112: /* F1 */
1271 case 113: /* F2 */
1272 case 114: /* F3 */
1273 var mev = {
1274 fakex: this.lastx,
1275 fakey: this.lasty,
1276 which: key-112+1,
1277 };
1278 mev.preventDefault = function(){}
1279 this.onmouseup(mev);
1280 break;
1281 default:
1282 return true;
1283 }
1284 return false;
1285 }catch(ex){
1286 console.log("keydown: " + ex);
1287 }
1288}
1289
1290function tkeydown(e) {
1291 try{1266 try{
1292 var key = e.keyCode;1267 var key = e.keyCode;
1293 if(!e.keyCode)1268 if(!e.keyCode)
1294 key = e.which;1269 key = e.which;
1295 var rune = String.fromCharCode(e.keyCode);1270 var rune = String.fromCharCode(e.keyCode);
1296 e.stopPropagation();1271 e.stopPropagation();
1297 if(0)console.log("keydown which " + e.which + " key " + e.keyCode +1272 if(tdebug)console.log("keydown which " + e.which + " key " + e.keyCode +
1298 " '" + rune + "'" +1273 " '" + rune + "'" +
1299 " " + e.ctrlKey + " " + e.metaKey);1274 " " + e.ctrlKey + " " + e.metaKey);
1300 1275
1301 switch(key){1276 switch(key){
1302 case 27: /* escape */1277 case 27: /* escape */
1278 if(deferred)
1279 break;
1303 this.post(["intr", "esc"]);1280 this.post(["intr", "esc"]);
1304 this.dump();1281 this.dump();
1305 console.log("["+this.p0+","+this.p1+"]='" +1282 console.log("["+this.p0+","+this.p1+"]='" +
@@ -1309,6 +1286,8 @@ function tkeydown(e) { · 3 unmodified lines
1309 if(this.noedits) {1286 if(this.noedits) {
1310 return;1287 return;
1311 }1288 }
1289 if(deferred)
1290 break;
1312 if(this.p0 != this.p1){1291 if(this.p0 != this.p1){
1313 this.Post(["edel", ""+this.p0, ""+this.p1]);1292 this.Post(["edel", ""+this.p0, ""+this.p1]);
1314 }else if(this.p0 > 0){1293 }else if(this.p0 > 0){
@@ -1320,12 +1299,16 @@ function tkeydown(e) { · 5 unmodified lines
1320 if(this.noedits) {1299 if(this.noedits) {
1321 return;1300 return;
1322 }1301 }
1302 if(deferred)
1303 break;
1323 if(this.p0 != this.p1){1304 if(this.p0 != this.p1){
1324 this.Post(["edel", ""+this.p0, ""+this.p1]);1305 this.Post(["edel", ""+this.p0, ""+this.p1]);
1325 }1306 }
1326 this.Post(["eins", "\t", ""+this.p0]);1307 this.Post(["eins", "\t", ""+this.p0]);
1327 break;1308 break;
1328 case 32: /* space */1309 case 32: /* space */
1310 if(deferred)
1311 break;
1329 this.Post(["eins", " ", ""+this.p0]);1312 this.Post(["eins", " ", ""+this.p0]);
1330 break;1313 break;
1331 case 37: /* left */1314 case 37: /* left */
@@ -1335,7 +1318,13 @@ function tkeydown(e) { · 3 unmodified lines
1335 this.post(["eundo"]);1318 this.post(["eundo"]);
1336 break;1319 break;
1337 case 38: /* up */1320 case 38: /* up */
1338 if(this.scrollup(3)){1321 if(deferred)
1322 break;
1323 var n = Math.floor(this.frlines/4);
1324 if(n < 1) {
1325 n = 1;
1326 }
1327 if(this.scrollup(n)){
1339 this.untick();1328 this.untick();
1340 this.redrawtext();1329 this.redrawtext();
1341 }1330 }
@@ -1344,21 +1333,34 @@ function tkeydown(e) { · 2 unmodified lines
1344 if(this.noedits) {1333 if(this.noedits) {
1345 return;1334 return;
1346 }1335 }
1336 if(deferred)
1337 break;
1347 this.post(["eredo"]);1338 this.post(["eredo"]);
1348 break;1339 break;
1349 case 40: /* down */1340 case 40: /* down */
1341 if(deferred)
1342 break;
1350 this.untick();1343 this.untick();
1351 if(this.scrolldown(3)){1344 var n = Math.floor(this.frlines/4);
1345 if(n < 1) {
1346 n = 1;
1347 }
1348 if(this.scrolldown(n)){
1352 this.untick();1349 this.untick();
1353 this.redrawtext();1350 this.redrawtext();
1354 }1351 }
1355 break;1352 break;
1356 case 46: /* delete */1353 case 46: /* delete */
1354 if(deferred)
1355 break;
1357 this.post(["intr", "del"]);1356 this.post(["intr", "del"]);
1358 break;1357 break;
1359 case 112: /* F1 */1358 case 112: /* F1 */
1360 case 113: /* F2 */1359 case 113: /* F2 */
1361 case 114: /* F3 */1360 case 114: /* F3 */
1361 case 115: /* F4 */
1362 if(deferred)
1363 break;
1362 var mev = {1364 var mev = {
1363 fakex: this.lastx,1365 fakex: this.lastx,
1364 fakey: this.lasty,1366 fakey: this.lasty,
@@ -1367,6 +1369,9 @@ function tkeydown(e) { · 2 unmodified lines
1367 mev.preventDefault = function(){}1369 mev.preventDefault = function(){}
1368 this.onmousedown(mev);1370 this.onmousedown(mev);
1369 break;1371 break;
1372 case 123: /* F12 */
1373 tdebug = !tdebug;
1374 break;
1370 default:1375 default:
1371 return true;1376 return true;
1372 }1377 }
@@ -1376,13 +1381,145 @@ function tkeydown(e) { · 3 unmodified lines
1376 }1381 }
1377}1382}
1378 1383
1384function tkeyup(e, deferred) {
1385 try{
1386 var key = e.keyCode;
1387 if(!e.keyCode)
1388 key = e.which;
1389 var rune = String.fromCharCode(e.keyCode);
1390 var isdeadkey = e && e.originalEvent && e.originalEvent.keyIdentifier == "Unidentified";
1391 if(tdebug) {
1392 var ds = (isdeadkey ? " dead" : "");
1393 console.log("keyup which " + e.which + " key " + e.keyCode +
1394 " '" + rune + "'" + ds +
1395 " " + e.ctrlKey + " " + e.metaKey, e);
1396 }
1397 switch(key){
1398 case 112: /* F1 */
1399 case 113: /* F2 */
1400 case 114: /* F3 */
1401 case 115: /* F4 */
1402 if(deferred)
1403 break;
1404 var mev = {
1405 fakex: this.lastx,
1406 fakey: this.lasty,
1407 which: key-112+1,
1408 };
1409 mev.preventDefault = function(){}
1410 this.onmouseup(mev);
1411 break;
1412 case 18: /* Alt */
1413 this.composing = true;
1414 return true;
1415 default:
1416 return true;
1417 }
1418 return false;
1419 }catch(ex){
1420 console.log("keydown: " + ex);
1421 }
1422}
1423
1424function tevkey(e, deferred) {
1425 try {
1426 // console.log("key");
1427 var key = e.keyCode;
1428 if(!e.keyCode)
1429 key = e.which;
1430 var rune = String.fromCharCode(e.keyCode);
1431 if(tdebug)console.log("key: which " + e.which + " key " + e.keyCode +
1432 " '" + rune + "'");
1433 switch(key){
1434 case 9:
1435 rune = "\t";
1436 break;
1437 case 13:
1438 rune = "\n";
1439 break;
1440 }
1441 switch(rune){
1442 case 'c':
1443 case 'C':
1444 if(deferred)
1445 break;
1446 if(e.ctrlKey || e.metaKey){
1447 e.preventDefault();
1448 this.post(["ecopy", ""+this.p0, ""+this.p1]);
1449 return false;
1450 }
1451 break;
1452 case 'v':
1453 case 'V':
1454 if(deferred)
1455 break;
1456 if(this.noedits) {
1457 break;
1458 }
1459 if(e.ctrlKey || e.metaKey){
1460 e.preventDefault();
1461 if(this.p0 != this.p1){
1462 this.Post(["edel", ""+this.p0, ""+this.p1]);
1463 }
1464 this.post(["epaste", ""+this.p0, ""+this.p1]);
1465 return false;
1466 }
1467 break;
1468 case 'x':
1469 case 'X':
1470 if(deferred)
1471 break;
1472 if(this.noedits) {
1473 break;
1474 }
1475 if(e.ctrlKey || e.metaKey){
1476 e.preventDefault();
1477 this.Post(["ecut", ""+this.p0, ""+this.p1]);
1478 return false;
1479 }
1480 break;
1481 }
1482 if(e.metaKey || e.ctrlKey || this.noedits)
1483 return;
1484 if(deferred)
1485 return;
1486 if(this.p0 != this.p1){
1487 this.Post(["edel", ""+this.p0, ""+this.p1]);
1488 }
1489 if(this.composing) {
1490 if(!this.latin) {
1491 this.latin = "" + rune;
1492 } else {
1493 this.latin += rune;
1494 }
1495 if(!kmap.islatin(this.latin)) {
1496 this.composing = false;
1497 rune = this.latin;
1498 this.latin = "";
1499 } else {
1500 var r = kmap.latin(this.latin);
1501 if (r) {
1502 this.composing = false;
1503 rune = r;
1504 this.latin = "";
1505 } else {
1506 return;
1507 }
1508 }
1509 }
1510 this.Post(["eins", rune, ""+this.p0]);
1511 }catch(ex){
1512 console.log("text: fixtab: " + ex);
1513 }
1514}
1515
1379function tapply(ev, fromserver) {1516function tapply(ev, fromserver) {
1380 if(!ev || !ev.Args || !ev.Args[0]){1517 if(!ev || !ev.Args || !ev.Args[0]){
1381 console.log("apply: nil ev");1518 console.log("apply: nil ev");
1382 return;1519 return;
1383 }1520 }
1384 var arg = ev.Args1521 var arg = ev.Args
1385 if(0)console.log(this.divid, "apply", ev.Args, "v", ev.Vers, this.vers);1522 if(tdebug)console.log(this.divid, "apply", ev.Args, "v", ev.Vers, this.vers);
1386 switch(arg[0]){1523 switch(arg[0]){
1387 case "held":1524 case "held":
1388 this.locked();1525 this.locked();
@@ -1567,7 +1704,7 @@ function tapply(ev, fromserver) { · 178 unmodified lines
1567 if(ev.Vers) {1704 if(ev.Vers) {
1568 this.vers = ev.Vers;1705 this.vers = ev.Vers;
1569 }1706 }
1570 if(!this.userresized) {1707 if(!this.userresized && arg[1].indexOf('\n') >= 0) {
1571 this.autoresize();1708 this.autoresize();
1572 } 1709 }
1573 break;1710 break;
@@ -1610,6 +1747,7 @@ function tapply(ev, fromserver) { · 36 unmodified lines
1610 this.vers = ev.Vers;1747 this.vers = ev.Vers;
1611 break;1748 break;
1612 case "reload":1749 case "reload":
1750 this.reloadln0 = this.ln0;
1613 this.tclear();1751 this.tclear();
1614 break;1752 break;
1615 case "reloading":1753 case "reloading":
@@ -1626,6 +1764,15 @@ function tapply(ev, fromserver) { · 10 unmodified lines
1626 break;1764 break;
1627 }1765 }
1628 this.vers = parseInt(arg[1]);1766 this.vers = parseInt(arg[1]);
1767 if(this.reloadln0 < this.lines.length) {
1768 var ln0 = this.reloadln0;
1769 delete this.reloadln0;
1770 var xln = this.lines[this.ln0];
1771 if(xln) {
1772 this.ln0 = ln0;
1773 this.froff = xln.off
1774 }
1775 }
1629 this.redrawtext();1776 this.redrawtext();
1630 if(!this.userresized) {1777 if(!this.userresized) {
1631 this.autoresize();1778 this.autoresize();
@@ -1702,11 +1849,11 @@ function tlocknkeydown(e) { · 70 unmodified lines
1702 xe.metaKey = e.metaKey;1849 xe.metaKey = e.metaKey;
1703 xe.preventDefault = function(){};1850 xe.preventDefault = function(){};
1704 this.whenlocked.push(function() {1851 this.whenlocked.push(function() {
1705 console.log("holded keydown");1852 console.log("held keydown");
1706 $(self).trigger(xe);1853 $(self).trigger(xe);
1707 return false;1854 return false;
1708 });1855 });
1709 return false;1856 return tkeydown.call(this, e, true);
1710}1857}
1711 1858
1712function tlocknevkey(e) {1859function tlocknevkey(e) {
@@ -1720,9 +1867,18 @@ function tlocknevkey(e) { · 7 unmodified lines
1720 console.log("holding...");1867 console.log("holding...");
1721 }1868 }
1722 var self = this;1869 var self = this;
1870 var xe = jQuery.Event("keypress");
1871 xe.which = e.which;
1872 xe.keyCode = e.keyCode;
1873 xe.ctrlKey = e.ctrlKey;
1874 xe.metaKey = e.metaKey;
1875 xe.preventDefault = function(){};
1723 this.whenlocked.push(function() {1876 this.whenlocked.push(function() {
1724 tevkey.call(self, e);1877 console.log("held keypress");
1878 $(self).trigger(xe);
1879 return false;
1725 });1880 });
1881 return tevkey.call(this, e, true);
1726}1882}
1727 1883
1728function tlocknkeyup(e) {1884function tlocknkeyup(e) {
@@ -1736,9 +1892,18 @@ function tlocknkeyup(e) { · 7 unmodified lines
1736 console.log("holding...");1892 console.log("holding...");
1737 }1893 }
1738 var self = this;1894 var self = this;
1895 var xe = jQuery.Event("keyup");
1896 xe.which = e.which;
1897 xe.keyCode = e.keyCode;
1898 xe.ctrlKey = e.ctrlKey;
1899 xe.metaKey = e.metaKey;
1900 xe.preventDefault = function(){};
1739 this.whenlocked.push(function() {1901 this.whenlocked.push(function() {
1740 tkeyup.call(self, e);1902 console.log("held keyup");
1903 $(self).trigger(xe);
1904 return false;
1741 });1905 });
1906 return tkeyup.call(this, e, true);
1742}1907}
1743 1908
1744function tlocknmdown(e) {1909function tlocknmdown(e) {
@@ -1751,11 +1916,17 @@ function tlocknmdown(e) { · 6 unmodified lines
1751 console.log("holding...");1916 console.log("holding...");
1752 }1917 }
1753 var self = this;1918 var self = this;
1919 var xe = jQuery.Event("mousedown");
1920 xe.which = e.which;
1921 xe.pageX = e.pageX;
1922 xe.pageY = e.pageY;
1923 xe.preventDefault = function(){};
1754 this.whenlocked.push(function() {1924 this.whenlocked.push(function() {
1755 console.log("deferred push");1925 console.log("held mousedown");
1756 self.onmousedown(e)1926 $(self).trigger(xe);
1757 self.onmouseup(e);1927 return false;
1758 });1928 });
1929 return false;
1759}1930}
1760 1931
1761function tlocknmup(e) {1932function tlocknmup(e) {
@@ -1768,9 +1939,17 @@ function tlocknmup(e) { · 6 unmodified lines
1768 console.log("holding...");1939 console.log("holding...");
1769 }1940 }
1770 var self = this;1941 var self = this;
1942 var xe = jQuery.Event("mouseup");
1943 xe.which = e.which;
1944 xe.pageX = e.pageX;
1945 xe.pageY = e.pageY;
1946 xe.preventDefault = function(){};
1771 this.whenlocked.push(function() {1947 this.whenlocked.push(function() {
1772 tmup.call(self, e);1948 console.log("held mouseup");
1949 $(self).trigger(xe);
1950 return false;
1773 });1951 });
1952 return false;
1774}1953}
1775 1954
1776function tlocked() {1955function tlocked() {
@@ -1817,6 +1996,8 @@ function tselectstart() { · 40 unmodified lines
1817 }1996 }
1818 this.selecting = true;1997 this.selecting = true;
1819 selecting = true;1998 selecting = true;
1999 this.oldp0 = this.p0;
2000 this.oldp1 = this.p1;
1820}2001}
1821 2002
1822function tselectend() {2003function tselectend() {
@@ -1827,7 +2008,11 @@ function tselectend() { · 4 unmodified lines
1827 return;2008 return;
1828 }2009 }
1829 console.log("select end");2010 console.log("select end");
1830 this.post(["tick", ""+this.p0, ""+this.p1]);2011 if(this.oldp0 != this.p0 || this.oldp1 != this.p1) {
2012 this.post(["tick", ""+this.p0, ""+this.p1]);
2013 this.oldp0 = this.p0;
2014 this.oldp1 = this.p1;
2015 }
1831 this.selecting = false;2016 this.selecting = false;
1832 selecting = false;2017 selecting = false;
1833}2018}
@@ -1913,7 +2098,7 @@ function mktxt(d, t, e, cid, id) { · 79 unmodified lines
1913 e.divcid = cid;2098 e.divcid = cid;
1914 e.divid = id;2099 e.divid = id;
1915 e.vers = 0;2100 e.vers = 0;
1916 e.tscale = 2;2101 e.tscale = 4; // tscale must be even; we /2
1917 e.nlines = 0;2102 e.nlines = 0;
1918 e.ln0 = 0;2103 e.ln0 = 0;
1919 e.frsize = 0;2104 e.frsize = 0;
@@ -1925,7 +2110,7 @@ function mktxt(d, t, e, cid, id) { · 5 unmodified lines
1925 e.tabstop = 4;2110 e.tabstop = 4;
1926 var tabtext = Array(e.tabstop+1).join("X")2111 var tabtext = Array(e.tabstop+1).join("X")
1927 e.tabwid = ctx.measureText(tabtext).width;2112 e.tabwid = ctx.measureText(tabtext).width;
1928 e.fontht = 28; // TODO: use font height from fixfont2113 e.fontht = 14*e.tscale; // TODO: use font height from fixfont
1929 e.buttons = 0;2114 e.buttons = 0;
1930 e.nclicks = {1: 0, 2: 0, 4: 0};2115 e.nclicks = {1: 0, 2: 0, 4: 0};
1931 e.userresized = false;2116 e.userresized = false;
@@ -1974,19 +2159,16 @@ function mktxt(d, t, e, cid, id) { · 42 unmodified lines
1974 e.whenlocked = [];2159 e.whenlocked = [];
1975 2160
1976 e.tkeydown = tlocknkeydown;2161 e.tkeydown = tlocknkeydown;
1977// e.tkeydown = tkeydown;
1978 e.tkeypress = tlocknevkey;2162 e.tkeypress = tlocknevkey;
1979// e.tkeypress = tevkey;
1980 e.tkeyup = tlocknkeyup;2163 e.tkeyup = tlocknkeyup;
1981// e.tkeyup = tkeyup;
1982
1983 e.onmousedown = tlocknmdown;2164 e.onmousedown = tlocknmdown;
1984// e.onmousedown = tmdown;
1985 e.onmouseup = tlocknmup;2165 e.onmouseup = tlocknmup;
1986// e.onmouseup = tmup;
1987 e.onmouseenter = function(e) {2166 e.onmouseenter = function(e) {
1988 if(!selecting) {2167 if(!selecting) {
2168 var x = window.scrollX;
2169 var y = window.scrollY;
1989 $("#" + this.divid ).focus();2170 $("#" + this.divid ).focus();
2171 window.scrollTo(x, y);
1990 }2172 }
1991 if(this.islocked || this.locking) {2173 if(this.islocked || this.locking) {
1992 return;2174 return;
@@ -1995,15 +2177,32 @@ function mktxt(d, t, e, cid, id) { · 2 unmodified lines
1995 this.post(["hold"]);2177 this.post(["hold"]);
1996 console.log("holding...");2178 console.log("holding...");
1997 };2179 };
2180 e.onmousemove = function(e) {
2181 if(this.islocked || this.locking) {
2182 return tevxy.call(this, e);
2183 }
2184 this.locking = true;
2185 this.post(["hold"]);
2186 console.log("holding...");
2187 return false;
2188 };
2189 e.onmousewheel = function(ev) {
2190 ev.stopPropagation();
2191 if(e.islocked || e.locking) {
2192 return tmwheel.call(e, ev);
2193 }
2194 e.locking = true;
2195 e.post(["hold"]);
2196 console.log("holding...");
2197 return false;
2198 };
1998 2199
1999 e.onmousemove = tevxy;
2000 e.onmousewheel = tmwheel;
2001 e.onpaste = function(){return false;}2200 e.onpaste = function(){return false;}
2002 e.oncontextmenu = function(){return false;}2201 e.oncontextmenu = function(){return false;}
2003 e.onclick = null;2202 e.onclick = null;
2004 e.onddblclick = null;2203 e.onddblclick = null;
2005 e.tm1 = tm1;2204 e.tm1 = tm1;
2006 e.tm23 = tm23;2205 e.tm234 = tm234;
2007 e.tmdown = tmdown;2206 e.tmdown = tmdown;
2008 e.tmpress = tmpress;2207 e.tmpress = tmpress;
2009 e.tmrlse = tmrlse;2208 e.tmrlse = tmrlse;
@@ -2062,7 +2261,8 @@ function mktxt(d, t, e, cid, id) { · 52 unmodified lines
2062 ev.Src = id;2261 ev.Src = id;
2063 if(!this.vers)2262 if(!this.vers)
2064 this.vers = 0;2263 this.vers = 0;
2065 if(args[0] == "eins" || args[0] == "edel" || args[0] == "ecut" || args[0] == "epaste"){2264 // cut advances the vers (might del nothing)
2265 if(args[0] == "eins" || args[0] == "edel"){
2066 this.vers++;2266 this.vers++;
2067 }2267 }
2068 ev.Vers = this.vers;2268 ev.Vers = this.vers;
@@ -2074,6 +2274,13 @@ function mktxt(d, t, e, cid, id) { · 5 unmodified lines
2074 }catch(ex){2274 }catch(ex){
2075 console.log("post: " + ex);2275 console.log("post: " + ex);
2076 }2276 }
2277 // if this is a cut, it implies a del and we
2278 // must advance our vers, the event didn't
2279 // advance the vers.
2280 // Same for paste.
2281 if(args[0] == "ecut" || args[0] == "epaste") {
2282 ev.Vers++;
2283 }
2077 return ev;2284 return ev;
2078 };2285 };
2079 2286
@@ -2084,6 +2291,9 @@ function mktxt(d, t, e, cid, id) { · 4 unmodified lines
2084 e.ws = new WebSocket(wsurl);2291 e.ws = new WebSocket(wsurl);
2085 d.get(0).ws = e.ws;2292 d.get(0).ws = e.ws;
2086 d.get(0).post = e.post;2293 d.get(0).post = e.post;
2294 d.get(0).addsize = function(moreless) {
2295 e.autoresize(true, moreless);
2296 };
2087 e.ws.onopen = function() {2297 e.ws.onopen = function() {
2088 e.post(["id"]);2298 e.post(["id"]);
2089 };2299 };
@@ -2097,7 +2307,7 @@ function mktxt(d, t, e, cid, id) { · 7 unmodified lines
2097 console.log("update: no objet id");2307 console.log("update: no objet id");
2098 return;2308 return;
2099 }2309 }
2100 if(0)console.log("update to", o.Id, o.Args);2310 if(tdebug)console.log("update to", o.Id, o.Args);
2101 e.apply(o, true);2311 e.apply(o, true);
2102 };2312 };
2103 e.ws.onclose = function() {2313 e.ws.onclose = function() {
@@ -2108,6 +2318,7 @@ function mktxt(d, t, e, cid, id) { · 4 unmodified lines
2108 handles: 's'2318 handles: 's'
2109 }).on('resize', function() {2319 }).on('resize', function() {
2110 console.log("user resized");2320 console.log("user resized");
2321 e.userresized = true;
2111 e.mayresize(true);2322 e.mayresize(true);
2112 });2323 });
2113 $(window).resize(function() {2324 $(window).resize(function() {
@@ -2127,5 +2338,5 @@ function mktxt(d, t, e, cid, id) { · 13 unmodified lines
2127 }2338 }
2128}2339}
2129 2340
2130document.mktxt = mktxt2341//document.mktxt = mktxt
2131 2342
net/ink/mkjs+3−2
@@ -1,7 +1,8 @@
1#!/bin/sh1#!/bin/sh
2rom -u -n js\2rom -u -n js\
3 js/pg.js js/clive.js js/txt.js js/button.js js/radio.js js/latin.js\3 js/pg.js js/ctlr.js js/text.js js/button.js js/radio.js \
4 js/lines.js js/latin.js js/clive.gif js/zxlogo.gif \
4 js/aes.js js/ansix923.js js/pbkdf2.js js/jquery-ui/jquery-ui.min.css js/jquery-2.2.0.min.js \5 js/aes.js js/ansix923.js js/pbkdf2.js js/jquery-ui/jquery-ui.min.css js/jquery-2.2.0.min.js \
5 js/jquery.get-word-by-event.js js/jquery-ui/images/* js/jquery-ui/jquery-ui.min.js\6 js/jquery.get-word-by-event.js js/jquery-ui/images/* js/jquery-ui/jquery-ui.min.js\
6 js/jquery-ui/jquery-ui.theme.min.css js/jquery-ui/jquery-ui.structure.min.css js/clive.gif js/zxlogo.gif >/tmp/js.go7 js/jquery-ui/jquery-ui.theme.min.css js/jquery-ui/jquery-ui.structure.min.css>/tmp/js.go
7 mv /tmp/js.go js/js.go8 mv /tmp/js.go js/js.go
net/ink/page.go+7−6
@@ -73,14 +73,15 @@ struct urlEl { · 72 unmodified lines
73// HTML headers to be included in pages using this interface.73// HTML headers to be included in pages using this interface.
74var headers = `74var headers = `
75<link rel="stylesheet" href="/js/jquery-ui/jquery-ui.min.css">75<link rel="stylesheet" href="/js/jquery-ui/jquery-ui.min.css">
76<script src="/js/jquery-2.2.0.min.js"></script>76<script type="text/javascript" src="/js/jquery-2.2.0.min.js"></script>
77<script type="text/javascript" src="/js/clive.js"></script>77<script type="text/javascript" src="/js/ctlr.js"></script>
78<script src="/js/latin.js"></script>78<script type="text/javascript" src="/js/latin.js"></script>
79<script type="text/javascript" src="/js/txt.js"></script>79<script type="text/javascript" src="/js/lines.js"></script>
80<script type="text/javascript" src="/js/text.js"></script>
80<script type="text/javascript" src="/js/button.js"></script>81<script type="text/javascript" src="/js/button.js"></script>
81<script type="text/javascript" src="/js/radio.js"></script>82<script type="text/javascript" src="/js/radio.js"></script>
82<script src="/js/jquery-ui/jquery-ui.min.js"></script>83<script type="text/javascript" src="/js/jquery-ui/jquery-ui.min.js"></script>
83<script src="/js/jquery.get-word-by-event.js"></script>84<script type="text/javascript" src="/js/jquery.get-word-by-event.js"></script>
84`85`
85 86
86// Write headers to a page so it can support controls.87// Write headers to a page so it can support controls.
net/ink/radio.go+1−1
@@ -58,7 +58,7 @@ func NewRadioSet(value *string, button ...*Button) *RadioSet { · 57 unmodified lines
58func (bs *RadioSet) WriteTo(w io.Writer) (tot int64, err error) {58func (bs *RadioSet) WriteTo(w io.Writer) (tot int64, err error) {
59 vid := bs.newViewId()59 vid := bs.newViewId()
60 n, err := io.WriteString(w,60 n, err := io.WriteString(w,
61 `<form><div id="`+vid+`" class="`+bs.Id+` hasws">`)61 `<form><div id="`+vid+`" class="`+bs.Id+` clivectl">`)
62 tot += int64(n)62 tot += int64(n)
63 if err != nil {63 if err != nil {
64 return tot, err64 return tot, err
net/ink/text.go+10−32
@@ -75,7 +75,7 @@ struct Txt { · 74 unmodified lines
75 *Ctlr75 *Ctlr
76 t *txt.Text76 t *txt.Text
77 tag string // NB: this is not the page element tag.77 tag string // NB: this is not the page element tag.
78 tagged, noedits bool // It was a tag line but we no longer use it.78 noedits bool // It was a tag line but we no longer use it.
79 cundo bool79 cundo bool
80 owner string80 owner string
81 held []*Ev81 held []*Ev
@@ -102,34 +102,22 @@ func (t *Txt) WriteTo(w io.Writer) (tot int64, err error) { · 20 unmodified lines
102 vid := t.newViewId()102 vid := t.newViewId()
103 103
104 n, err := io.WriteString(w, `104 n, err := io.WriteString(w, `
105 <div id="`+vid+`" class="`+t.Id+` ui-widget-content hasws canaddsize", tabindex="1" style="border:2px solid black; margin:0; width:100%;height:300; background-color:#dfdfca">`)105 <div id="`+vid+`" class="`+t.Id+` ui-widget-content", `+
106 `tabindex="1" style="border:2px solid black; `+
107 `margin:0; width:100%;height:300; background-color:#dfdfca">`)
106 tot += int64(n)108 tot += int64(n)
107 if err != nil {109 if err != nil {
108 return tot, err110 return tot, err
109 }111 }
110 if t.tagged {
111 n, err := io.WriteString(w, `<div id="`+vid+`t" class="ui-widget-header">`+
112 html.EscapeString(t.tag)+`</div>`)
113 tot += int64(n)
114 if err != nil {
115 return tot, err
116 }
117 }
118 ctag := t.Tag()112 ctag := t.Tag()
119 ts := ``113 ts := ``
120 if ctag != "" {114 if ctag != "" {
121 ctag = html.EscapeString(ctag)115 ctag = html.EscapeString(ctag)
122 ts = `116 ts = `c.settag("` + ctag + `");
123 if(document.settag) {
124 document.settag(x, "` + ctag + `");
125 }
126 `117 `
127 }118 }
128 if t.dirty {119 if t.dirty {
129 ts += `120 ts += `c.setdirty();
130 if(document.setdirty) {
131 document.setdirty(x);
132 }
133 `121 `
134 }122 }
135 wsaddr := `wss://localhost:` + servePort123 wsaddr := `wss://localhost:` + servePort
@@ -139,14 +127,10 @@ func (t *Txt) WriteTo(w io.Writer) (tot int64, err error) { · 3 unmodified lines
139<script>127<script>
140 $(function(){128 $(function(){
141 var d = $("#`+vid+`");129 var d = $("#`+vid+`");
142 var t = $("#`+vid+`t");
143 var x = $("#`+vid+`c").get(0);130 var x = $("#`+vid+`c").get(0);
144 d.wsaddr = "`+wsaddr+`";131 d.wsaddr = "`+wsaddr+`";
145 x.tag = "`+t.tag+`";132 x.tag = "`+t.tag+`";
146 x.lines = [];133 var c = document.mktxt(d, x, "`+t.Id+`", "`+vid+`", "`+t.font+`");
147 x.lines.push({txt: "", off: 0});
148 document.mktxt(d, t, x, "`+t.Id+`", "`+vid+`");
149 x.fontstyle="`+t.font+`";
150 `+ts+`134 `+ts+`
151 });135 });
152</script>`)136</script>`)
@@ -154,8 +138,8 @@ func (t *Txt) WriteTo(w io.Writer) (tot int64, err error) { · 1 unmodified line
154 return tot, err138 return tot, err
155}139}
156 140
157// Create a new text control with the given tag line and body lines.141// Create a new text control with the given body lines.
158func newTxt(tagged bool, tag string, lines ...string) *Txt {142func NewTxt(lines ...string) *Txt {
159 lns := strings.Join(lines, "\n")143 lns := strings.Join(lines, "\n")
160 if len(lns) == 0 || lns[len(lns)-1] != '\n' {144 if len(lns) == 0 || lns[len(lns)-1] != '\n' {
161 lns += "\n"145 lns += "\n"
@@ -163,8 +147,7 @@ func newTxt(tagged bool, tag string, lines ...string) *Txt { · 1 unmodified line
163 t := &Txt{147 t := &Txt{
164 Ctlr: newCtlr("text"),148 Ctlr: newCtlr("text"),
165 t: txt.NewEditing([]rune(lns)),149 t: txt.NewEditing([]rune(lns)),
166 tag: tag,150 tag: "",
167 tagged: tagged,
168 font: "r",151 font: "r",
169 }152 }
170 t.t.SetMark("p0", 0)153 t.t.SetMark("p0", 0)
@@ -173,11 +156,6 @@ func newTxt(tagged bool, tag string, lines ...string) *Txt { · 2 unmodified lines
173 return t156 return t
174}157}
175 158
176// Create a new text control with no tag line and the given body lines.
177func NewTxt(lines ...string) *Txt {
178 return newTxt(false, "", lines...)
179}
180
181// Change the font used.159// Change the font used.
182// Known fonts are "r", "b", "i", "t".160// Known fonts are "r", "b", "i", "t".
183// Known combinations are "rb", "tb", and "ri".161// Known combinations are "rb", "tb", and "ri".