Fix another bunch of missing ether_ifdetach calls.
[dragonfly.git] / sys / net / i4b / driver / i4b_tel.c
... / ...
CommitLineData
1/*
2 * Copyright (c) 1997, 2001 Hellmuth Michaelis. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23 * SUCH DAMAGE.
24 *
25 *---------------------------------------------------------------------------
26 *
27 * i4b_tel.c - device driver for ISDN telephony
28 * --------------------------------------------
29 *
30 * $FreeBSD: src/sys/i4b/driver/i4b_tel.c,v 1.10.2.4 2001/12/16 15:12:57 hm Exp $
31 * $DragonFly: src/sys/net/i4b/driver/i4b_tel.c,v 1.11 2005/06/14 21:19:18 joerg Exp $
32 *
33 * last edit-date: [Sat Aug 11 18:07:05 2001]
34 *
35 *---------------------------------------------------------------------------*/
36
37#include "use_i4btel.h"
38
39#if NI4BTEL > 0
40
41#undef I4BTELDEBUG
42
43#include <sys/param.h>
44#include <sys/systm.h>
45
46#include <sys/ioccom.h>
47#include <sys/poll.h>
48
49#include <sys/conf.h>
50#include <sys/uio.h>
51#include <sys/kernel.h>
52#include <sys/mbuf.h>
53#include <sys/socket.h>
54#include <net/if.h>
55#include <sys/tty.h>
56
57#ifdef DEVFS
58#include <sys/devfsext.h>
59#endif
60
61#include <net/i4b/include/machine/i4b_ioctl.h>
62#include <net/i4b/include/machine/i4b_tel_ioctl.h>
63#include <net/i4b/include/machine/i4b_debug.h>
64
65#include "../include/i4b_global.h"
66#include "../include/i4b_mbuf.h"
67#include "../include/i4b_l3l4.h"
68#include "../layer4/i4b_l4.h"
69
70/* minor number: lower 6 bits = unit number */
71
72#define UNITBITS 6
73#define UNITMASK 0x3f
74#define UNIT(n) (minor(n) & UNITMASK)
75
76/* minor number: upper 2 bits = function number */
77
78#define FUNCMASK 0x03
79#define FUNC(n) (((minor(n)) >> UNITBITS) & FUNCMASK)
80
81#define FUNCTEL 0 /* 0 = normal i4btel device */
82#define FUNCDIAL 1 /* 1 = i4bteld dialout device */
83
84#define NOFUNCS 2 /* number of device classes */
85
86typedef struct {
87
88 /* used only in func = FUNCTEL */
89
90 drvr_link_t drvr_linktab; /* driver linktab */
91 isdn_link_t *isdn_linktab; /* isdn linktab */
92 int audiofmt; /* audio format conversion */
93 u_char *rcvttab; /* conversion table on read */
94 u_char *wcvttab; /* conversion table on write */
95 call_desc_t *cdp; /* call descriptor pointer */
96
97 /* used only in func = FUNCDIAL */
98
99 char result; /* result code for dial dev */
100
101 /* used in func = FUNCDIAL and func = FUNCTEL*/
102
103 int devstate; /* state of this unit */
104#define ST_IDLE 0x00 /* idle */
105#define ST_CONNECTED 0x01 /* isdn connected state */
106#define ST_ISOPEN 0x02 /* userland opened */
107#define ST_RDWAITDATA 0x04 /* userland read waiting */
108#define ST_WRWAITEMPTY 0x08 /* userland write waiting */
109#define ST_TONE 0x10 /* tone generator */
110
111 struct selinfo selp; /* select / poll */
112
113 struct i4b_tel_tones tones;
114 int toneidx;
115 int toneomega;
116 int tonefreq;
117
118} tel_sc_t;
119
120static tel_sc_t tel_sc[NI4BTEL][NOFUNCS];
121
122/* forward decl */
123
124static void tel_rx_data_rdy(int unit);
125static void tel_tx_queue_empty(int unit);
126static void tel_init_linktab(int unit);
127static void tel_connect(int unit, void *cdp);
128static void tel_disconnect(int unit, void *cdp);
129static void tel_tone(tel_sc_t *sc);
130
131/* audio format conversion tables */
132static unsigned char a2u_tab[];
133static unsigned char u2a_tab[];
134static unsigned char bitreverse[];
135static u_char sinetab[];
136
137#define PDEVSTATIC static
138
139PDEVSTATIC d_open_t i4btelopen;
140PDEVSTATIC d_close_t i4btelclose;
141PDEVSTATIC d_read_t i4btelread;
142PDEVSTATIC d_read_t i4btelwrite;
143PDEVSTATIC d_ioctl_t i4btelioctl;
144
145PDEVSTATIC d_poll_t i4btelpoll;
146#define POLLFIELD i4btelpoll
147
148#define CDEV_MAJOR 56
149
150static struct cdevsw i4btel_cdevsw = {
151 /* name */ "i4btel",
152 /* maj */ CDEV_MAJOR,
153 /* flags */ 0,
154 /* port */ NULL,
155 /* clone */ NULL,
156
157 /* open */ i4btelopen,
158 /* close */ i4btelclose,
159 /* read */ i4btelread,
160 /* write */ i4btelwrite,
161 /* ioctl */ i4btelioctl,
162 /* poll */ POLLFIELD,
163 /* mmap */ nommap,
164 /* strategy */ nostrategy,
165 /* dump */ nodump,
166 /* psize */ nopsize
167};
168
169PDEVSTATIC void i4btelinit(void *unused);
170PDEVSTATIC void i4btelattach(void *);
171
172PSEUDO_SET(i4btelattach, i4b_tel);
173
174/*===========================================================================*
175 * DEVICE DRIVER ROUTINES
176 *===========================================================================*/
177
178/*---------------------------------------------------------------------------*
179 * initialization at kernel load time
180 *---------------------------------------------------------------------------*/
181PDEVSTATIC void
182i4btelinit(void *unused)
183{
184 cdevsw_add(&i4btel_cdevsw, 0, 0);
185}
186
187SYSINIT(i4bteldev, SI_SUB_DRIVERS,
188 SI_ORDER_MIDDLE+CDEV_MAJOR, &i4btelinit, NULL);
189
190/*---------------------------------------------------------------------------*
191 * interface attach routine
192 *---------------------------------------------------------------------------*/
193PDEVSTATIC void
194i4btelattach(void *dummy)
195{
196 int i, j;
197
198 printf("i4btel: %d ISDN telephony interface device(s) attached\n", NI4BTEL);
199
200 for(i=0; i < NI4BTEL; i++)
201 {
202 for(j=0; j < NOFUNCS; j++)
203 {
204 tel_sc[i][j].devstate = ST_IDLE;
205 tel_sc[i][j].audiofmt = CVT_NONE;
206 tel_sc[i][j].rcvttab = 0;
207 tel_sc[i][j].wcvttab = 0;
208 tel_sc[i][j].result = 0;
209
210 switch(j)
211 {
212 case FUNCTEL: /* normal i4btel device */
213 make_dev(&i4btel_cdevsw, i,
214 UID_ROOT, GID_WHEEL,
215 0600, "i4btel%d", i);
216 break;
217
218 case FUNCDIAL: /* i4bteld dialout device */
219 make_dev(&i4btel_cdevsw, i+(1<<UNITBITS),
220 UID_ROOT, GID_WHEEL,
221 0600, "i4bteld%d", i);
222 break;
223 }
224 }
225 tel_init_linktab(i);
226 }
227}
228
229/*---------------------------------------------------------------------------*
230 * open tel device
231 *---------------------------------------------------------------------------*/
232PDEVSTATIC int
233i4btelopen(dev_t dev, int flag, int fmt, struct thread *td)
234{
235 int unit = UNIT(dev);
236 int func = FUNC(dev);
237
238 tel_sc_t *sc;
239
240 if(unit >= NI4BTEL)
241 return(ENXIO);
242
243 sc = &tel_sc[unit][func];
244
245 if(sc->devstate & ST_ISOPEN)
246 return(EBUSY);
247
248 sc->devstate |= ST_ISOPEN;
249
250 if(func == FUNCDIAL)
251 {
252 sc->result = 0;
253 }
254
255 return(0);
256}
257
258/*---------------------------------------------------------------------------*
259 * close tel device
260 *---------------------------------------------------------------------------*/
261PDEVSTATIC int
262i4btelclose(dev_t dev, int flag, int fmt, struct thread *td)
263{
264 int unit = UNIT(dev);
265 int func = FUNC(dev);
266 tel_sc_t *sc;
267 int error = 0;
268 int x;
269
270 if(unit > NI4BTEL)
271 return(ENXIO);
272
273 sc = &tel_sc[unit][func];
274
275 x = splimp();
276 sc->devstate &= ~ST_TONE;
277
278 if((func == FUNCTEL) &&
279 (sc->isdn_linktab != NULL && sc->isdn_linktab->tx_queue != NULL))
280 {
281 while(!(IF_QEMPTY(sc->isdn_linktab->tx_queue)))
282 {
283 sc->devstate |= ST_WRWAITEMPTY;
284
285 if((error = tsleep((caddr_t) &sc->isdn_linktab->tx_queue,
286 PCATCH, "wtcl", 0)) != 0)
287 {
288 break;
289 }
290 }
291 sc->devstate &= ~ST_WRWAITEMPTY;
292 }
293
294 sc->devstate &= ~ST_ISOPEN;
295 splx(x);
296 wakeup((caddr_t) &sc->tones);
297
298 return(error);
299}
300
301/*---------------------------------------------------------------------------*
302 * i4btelioctl - device driver ioctl routine
303 *---------------------------------------------------------------------------*/
304PDEVSTATIC int
305i4btelioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct thread *td)
306{
307 int unit = UNIT(dev);
308 int func = FUNC(dev);
309 int error = 0;
310 struct mbuf *m;
311 int s;
312
313 tel_sc_t *sc = &tel_sc[unit][func];
314
315 if(func == FUNCTEL)
316 {
317 switch(cmd)
318 {
319 case I4B_TEL_GETAUDIOFMT:
320 *(int *)data = sc->audiofmt;
321 break;
322
323 case I4B_TEL_SETAUDIOFMT:
324 switch (*(int *)data)
325 {
326 case CVT_NONE:
327 sc->rcvttab = 0;
328 sc->wcvttab = 0;
329 break;
330 case CVT_ALAW2ULAW:
331 /* ISDN: a-law */
332 /* user: u-law */
333 sc->rcvttab = a2u_tab;
334 sc->wcvttab = u2a_tab;
335 break;
336 case CVT_ULAW2ALAW:
337 /* ISDN: u-law */
338 /* user: a-law */
339 sc->rcvttab = u2a_tab;
340 sc->wcvttab = a2u_tab;
341 break;
342 default:
343 error = ENODEV;
344 break;
345 }
346 if(error == 0)
347 sc->audiofmt = *(int *)data;
348 break;
349
350 case I4B_TEL_EMPTYINPUTQUEUE:
351 s = splimp();
352 while((sc->devstate & ST_CONNECTED) &&
353 (sc->devstate & ST_ISOPEN) &&
354 !IF_QEMPTY(sc->isdn_linktab->rx_queue))
355 {
356 IF_DEQUEUE(sc->isdn_linktab->rx_queue, m);
357 if(m)
358 i4b_Bfreembuf(m);
359 }
360 splx(s);
361 break;
362
363 case I4B_TEL_VR_REQ:
364 {
365 msg_vr_req_t *mvr;
366
367 mvr = (msg_vr_req_t *)data;
368
369 mvr->version = VERSION;
370 mvr->release = REL;
371 mvr->step = STEP;
372 break;
373 }
374 case I4B_TEL_TONES:
375 {
376 struct i4b_tel_tones *tt;
377
378 tt = (struct i4b_tel_tones *)data;
379 s = splimp();
380 while ((sc->devstate & ST_TONE) &&
381 sc->tones.duration[sc->toneidx] != 0) {
382 if((error = tsleep((caddr_t) &sc->tones,
383 PCATCH, "rtone", 0 )) != 0) {
384 splx(s);
385 return(error);
386 }
387 }
388 if(!(sc->devstate & ST_ISOPEN)) {
389 splx(s);
390 return (EIO);
391 }
392 if(!(sc->devstate & ST_CONNECTED)) {
393 splx(s);
394 return (EIO);
395 }
396
397 sc->tones = *tt;
398 sc->toneidx = 0;
399 sc->tonefreq = tt->frequency[0];
400 sc->devstate |= ST_TONE;
401 splx(s);
402 tel_tone(sc);
403 break;
404 }
405
406 default:
407 error = ENOTTY;
408 break;
409 }
410 }
411 else if(func == FUNCDIAL)
412 {
413 switch(cmd)
414 {
415 default:
416 error = ENOTTY;
417 break;
418 }
419 }
420 return(error);
421}
422
423/*---------------------------------------------------------------------------*
424 * read from tel device
425 *---------------------------------------------------------------------------*/
426PDEVSTATIC int
427i4btelread(dev_t dev, struct uio *uio, int ioflag)
428{
429 int unit = UNIT(dev);
430 int func = FUNC(dev);
431
432 struct mbuf *m;
433 int s;
434 int error = 0;
435
436 tel_sc_t *sc = &tel_sc[unit][func];
437
438 if(!(sc->devstate & ST_ISOPEN))
439 return(EIO);
440
441 if(func == FUNCTEL)
442 {
443 s = splimp();
444
445 while((sc->devstate & ST_ISOPEN) &&
446 (sc->devstate & ST_CONNECTED) &&
447 IF_QEMPTY(sc->isdn_linktab->rx_queue))
448 {
449 sc->devstate |= ST_RDWAITDATA;
450
451 NDBGL4(L4_TELDBG, "i4btel%d, queue empty!", unit);
452
453 if((error = tsleep((caddr_t) &sc->isdn_linktab->rx_queue,
454 PCATCH, "rtel", 0 )) != 0)
455 {
456 sc->devstate &= ~ST_RDWAITDATA;
457 splx(s);
458 return(error);
459 }
460 }
461
462 if(!(sc->devstate & ST_ISOPEN))
463 {
464 splx(s);
465 return(EIO);
466 }
467
468 if(!(sc->devstate & ST_CONNECTED))
469 {
470 splx(s);
471 return(EIO);
472 }
473
474
475 IF_DEQUEUE(sc->isdn_linktab->rx_queue, m);
476
477 if(m && m->m_len > 0)
478 {
479 int i;
480
481 for(i = 0; i < m->m_len; i++)
482 {
483 /* always reverse bit order from line */
484 mtod(m,u_char *)[i] = bitreverse[mtod(m,u_char *)[i]];
485
486 /* convert if necessary */
487 if(sc->rcvttab)
488 mtod(m,u_char *)[i] = sc->rcvttab[mtod(m,u_char *)[i]];
489 }
490 error = uiomove(m->m_data, m->m_len, uio);
491
492 NDBGL4(L4_TELDBG, "i4btel%d, mbuf (%d bytes), uiomove %d!", unit, m->m_len, error);
493 }
494 else
495 {
496 NDBGL4(L4_TELDBG, "i4btel%d, empty mbuf from queue!", unit);
497 error = EIO;
498 }
499
500 if(m)
501 i4b_Bfreembuf(m);
502
503 splx(s);
504 }
505 else if(func == FUNCDIAL)
506 {
507 s = splimp();
508 while((sc->result == 0) && (sc->devstate & ST_ISOPEN))
509 {
510 sc->devstate |= ST_RDWAITDATA;
511
512 if((error = tsleep((caddr_t) &sc->result,
513 PCATCH, "rtel1", 0 )) != 0)
514 {
515 sc->devstate &= ~ST_RDWAITDATA;
516 splx(s);
517 return(error);
518 }
519 }
520
521 if(!(sc->devstate & ST_ISOPEN))
522 {
523 splx(s);
524 return(EIO);
525 }
526
527 if(sc->result != 0)
528 {
529 error = uiomove(&sc->result, 1, uio);
530 sc->result = 0;
531 }
532 else
533 {
534 error = EIO;
535 }
536
537 splx(s);
538 }
539 return(error);
540}
541
542/*---------------------------------------------------------------------------*
543 * write to tel device
544 *---------------------------------------------------------------------------*/
545PDEVSTATIC int
546i4btelwrite(dev_t dev, struct uio * uio, int ioflag)
547{
548 int unit = UNIT(dev);
549 int func = FUNC(dev);
550 struct mbuf *m;
551 int s;
552 int error = 0;
553 tel_sc_t *sc = &tel_sc[unit][func];
554
555 if(!(sc->devstate & ST_ISOPEN))
556 {
557 return(EIO);
558 }
559
560 if(func == FUNCTEL)
561 {
562 s = splimp();
563
564 if(!(sc->devstate & ST_CONNECTED)) {
565 splx(s);
566 return(EIO);
567 }
568
569 sc->devstate &= ~ST_TONE;
570 while((IF_QFULL(sc->isdn_linktab->tx_queue)) &&
571 (sc->devstate & ST_ISOPEN))
572 {
573 sc->devstate |= ST_WRWAITEMPTY;
574
575 if((error = tsleep((caddr_t) &sc->isdn_linktab->tx_queue,
576 PCATCH, "wtel", 0)) != 0)
577 {
578 sc->devstate &= ~ST_WRWAITEMPTY;
579 splx(s);
580 return(error);
581 }
582 }
583
584 if(!(sc->devstate & ST_ISOPEN))
585 {
586 splx(s);
587 return(EIO);
588 }
589
590 if(!(sc->devstate & ST_CONNECTED))
591 {
592 splx(s);
593 return(EIO);
594 }
595
596 if((m = i4b_Bgetmbuf(BCH_MAX_DATALEN)) != NULL)
597 {
598 int i;
599
600 m->m_len = min(BCH_MAX_DATALEN, uio->uio_resid);
601
602 error = uiomove(m->m_data, m->m_len, uio);
603
604 for(i = 0; i < m->m_len; i++)
605 {
606 /* convert if necessary */
607 if(sc->wcvttab)
608 mtod(m,u_char *)[i] = sc->wcvttab[mtod(m,u_char *)[i]];
609
610 /* always reverse bitorder to line */
611 mtod(m,u_char *)[i] = bitreverse[mtod(m,u_char *)[i]];
612 }
613
614 if(IF_QFULL(sc->isdn_linktab->tx_queue))
615 m_freem(m);
616 else
617 IF_ENQUEUE(sc->isdn_linktab->tx_queue, m);
618 (*sc->isdn_linktab->bch_tx_start)(sc->isdn_linktab->unit, sc->isdn_linktab->channel);
619 }
620
621 splx(s);
622 }
623 else if(func == FUNCDIAL)
624 {
625#define CMDBUFSIZ 80
626 char cmdbuf[CMDBUFSIZ];
627 int len = min(CMDBUFSIZ-1, uio->uio_resid);
628
629 error = uiomove(cmdbuf, len, uio);
630
631 if(cmdbuf[0] == CMD_DIAL)
632 {
633 i4b_l4_dialoutnumber(BDRV_TEL, unit, len-1, &cmdbuf[1]);
634 }
635 else if(cmdbuf[0] == CMD_HUP)
636 {
637 i4b_l4_drvrdisc(BDRV_TEL, unit);
638 }
639 else if(cmdbuf[0] == CMD_KEYP)
640 {
641 i4b_l4_keypad(BDRV_TEL, unit, len-1, &cmdbuf[1]);
642 }
643 }
644 else
645 {
646 error = EIO;
647 }
648
649 return(error);
650}
651
652/*---------------------------------------------------------------------------*
653 *
654 *---------------------------------------------------------------------------*/
655#define NTONESAMP 32
656static void
657tel_tone(tel_sc_t *sc)
658{
659 struct mbuf *m;
660 u_char *p;
661 int i;
662
663 if((m = i4b_Bgetmbuf(NTONESAMP)) == NULL) {
664 printf("no mbuf in tel_tone\n");
665 return;
666 }
667 p = m->m_data;
668 m->m_len = 0;
669 for (i = 0; i < NTONESAMP && (sc->devstate & ST_TONE); i++) {
670
671 if (sc->tones.duration[sc->toneidx] > 0) {
672 if (--sc->tones.duration[sc->toneidx] == 0) {
673 sc->toneidx++;
674 if (sc->toneidx == I4B_TEL_MAXTONES) {
675 sc->devstate &= ~ST_TONE;
676 sc->toneomega = 0;
677 sc->tonefreq = 0;
678 } else if (sc->tones.frequency[sc->toneidx] == 0 &&
679 sc->tones.duration[sc->toneidx] == 0) {
680 sc->devstate &= ~ST_TONE;
681 sc->toneomega = 0;
682 sc->tonefreq = 0;
683 } else {
684 sc->tonefreq = sc->tones.frequency[sc->toneidx];
685 }
686 if (sc->tones.duration[sc->toneidx] == 0) {
687 wakeup((caddr_t) &sc->tones);
688 }
689 }
690 }
691
692 sc->toneomega += sc->tonefreq;
693 if (sc->toneomega >= 8000)
694 sc->toneomega -= 8000;
695 *p++ = bitreverse[sinetab[sc->toneomega]];
696 m->m_len++;
697 }
698 IF_ENQUEUE(sc->isdn_linktab->tx_queue, m);
699 (*sc->isdn_linktab->bch_tx_start)(sc->isdn_linktab->unit, sc->isdn_linktab->channel);
700}
701
702/*---------------------------------------------------------------------------*
703 * device driver poll
704 *---------------------------------------------------------------------------*/
705PDEVSTATIC int
706i4btelpoll(dev_t dev, int events, struct thread *td)
707{
708 int revents = 0; /* Events we found */
709 int s;
710 int unit = UNIT(dev);
711 int func = FUNC(dev);
712
713 tel_sc_t *sc = &tel_sc[unit][func];
714
715 s = splhigh();
716
717 if(!(sc->devstate & ST_ISOPEN))
718 {
719 NDBGL4(L4_TELDBG, "i4btel%d, !ST_ISOPEN", unit);
720 splx(s);
721 return(0);
722 }
723
724 if(func == FUNCTEL)
725 {
726 /*
727 * Writes are OK if we are connected and the
728 * transmit queue can take them
729 */
730
731 if((events & (POLLOUT|POLLWRNORM)) &&
732 (sc->devstate & ST_CONNECTED) &&
733 (sc->isdn_linktab != NULL) &&
734 (!IF_QFULL(sc->isdn_linktab->tx_queue)))
735 {
736 NDBGL4(L4_TELDBG, "i4btel%d, POLLOUT", unit);
737 revents |= (events & (POLLOUT|POLLWRNORM));
738 }
739
740 /* ... while reads are OK if we have any data */
741
742 if((events & (POLLIN|POLLRDNORM)) &&
743 (sc->devstate & ST_CONNECTED) &&
744 (sc->isdn_linktab != NULL) &&
745 (!IF_QEMPTY(sc->isdn_linktab->rx_queue)))
746 {
747 NDBGL4(L4_TELDBG, "i4btel%d, POLLIN", unit);
748 revents |= (events & (POLLIN|POLLRDNORM));
749 }
750
751 if(revents == 0)
752 {
753 NDBGL4(L4_TELDBG, "i4btel%d, selrecord", unit);
754 selrecord(td, &sc->selp);
755 }
756 }
757 else if(func == FUNCDIAL)
758 {
759 if(events & (POLLOUT|POLLWRNORM))
760 {
761 NDBGL4(L4_TELDBG, "i4bteld%d, POLLOUT", unit);
762 revents |= (events & (POLLOUT|POLLWRNORM));
763 }
764
765 if(events & (POLLIN|POLLRDNORM))
766 {
767 NDBGL4(L4_TELDBG, "i4bteld%d, POLLIN, result = %d", unit, sc->result);
768 if(sc->result != 0)
769 revents |= (events & (POLLIN|POLLRDNORM));
770 }
771
772 if(revents == 0)
773 {
774 NDBGL4(L4_TELDBG, "i4bteld%d, selrecord", unit);
775 selrecord(td, &sc->selp);
776 }
777 }
778 splx(s);
779 return(revents);
780}
781
782/*===========================================================================*
783 * ISDN INTERFACE ROUTINES
784 *===========================================================================*/
785
786/*---------------------------------------------------------------------------*
787* this routine is called from L4 handler at connect time
788 *---------------------------------------------------------------------------*/
789static void
790tel_connect(int unit, void *cdp)
791{
792 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
793
794 /* audio device */
795
796 sc->cdp = (call_desc_t *)cdp;
797
798 sc->devstate |= ST_CONNECTED;
799
800 /* dialer device */
801
802 sc = &tel_sc[unit][FUNCDIAL];
803
804 if(sc->devstate == ST_ISOPEN)
805 {
806 sc->result = RSP_CONN;
807
808 if(sc->devstate & ST_RDWAITDATA)
809 {
810 sc->devstate &= ~ST_RDWAITDATA;
811 wakeup((caddr_t) &sc->result);
812 }
813 selwakeup(&sc->selp);
814 }
815}
816
817/*---------------------------------------------------------------------------*
818 * this routine is called from L4 handler at disconnect time
819 *---------------------------------------------------------------------------*/
820static void
821tel_disconnect(int unit, void *cdp)
822{
823/* call_desc_t *cd = (call_desc_t *)cdp; */
824
825 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
826
827 /* audio device */
828
829 sc->devstate &= ~ST_CONNECTED;
830
831 if(sc->devstate & ST_RDWAITDATA)
832 {
833 sc->devstate &= ~ST_RDWAITDATA;
834 wakeup((caddr_t) &sc->isdn_linktab->rx_queue);
835 }
836
837 if(sc->devstate & ST_WRWAITEMPTY)
838 {
839 sc->devstate &= ~ST_WRWAITEMPTY;
840 wakeup((caddr_t) &sc->isdn_linktab->tx_queue);
841 }
842
843 /* dialer device */
844
845 sc = &tel_sc[unit][FUNCDIAL];
846
847 if(sc->devstate & ST_ISOPEN)
848 {
849 sc->result = RSP_HUP;
850
851 if(sc->devstate & ST_RDWAITDATA)
852 {
853 sc->devstate &= ~ST_RDWAITDATA;
854 wakeup((caddr_t) &sc->result);
855 }
856 selwakeup(&sc->selp);
857
858 if (sc->devstate & ST_TONE) {
859 sc->devstate &= ~ST_TONE;
860 wakeup((caddr_t) &sc->tones);
861 }
862 }
863}
864
865/*---------------------------------------------------------------------------*
866 * feedback from daemon in case of dial problems
867 *---------------------------------------------------------------------------*/
868static void
869tel_dialresponse(int unit, int status, cause_t cause)
870{
871 tel_sc_t *sc = &tel_sc[unit][FUNCDIAL];
872
873 NDBGL4(L4_TELDBG, "i4btel%d, status=%d, cause=0x%4x", unit, status, cause);
874
875 if((sc->devstate == ST_ISOPEN) && status)
876 {
877 sc->result = RSP_NOA;
878
879 if(sc->devstate & ST_RDWAITDATA)
880 {
881 sc->devstate &= ~ST_RDWAITDATA;
882 wakeup((caddr_t) &sc->result);
883 }
884 selwakeup(&sc->selp);
885 }
886}
887
888/*---------------------------------------------------------------------------*
889 * interface up/down
890 *---------------------------------------------------------------------------*/
891static void
892tel_updown(int unit, int updown)
893{
894}
895
896/*---------------------------------------------------------------------------*
897 * this routine is called from the HSCX interrupt handler
898 * when a new frame (mbuf) has been received and was put on
899 * the rx queue.
900 *---------------------------------------------------------------------------*/
901static void
902tel_rx_data_rdy(int unit)
903{
904 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
905
906 if(sc->devstate & ST_RDWAITDATA)
907 {
908 sc->devstate &= ~ST_RDWAITDATA;
909 wakeup((caddr_t) &sc->isdn_linktab->rx_queue);
910 }
911 selwakeup(&sc->selp);
912}
913
914/*---------------------------------------------------------------------------*
915 * this routine is called from the HSCX interrupt handler
916 * when the last frame has been sent out and there is no
917 * further frame (mbuf) in the tx queue.
918 *---------------------------------------------------------------------------*/
919static void
920tel_tx_queue_empty(int unit)
921{
922 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
923
924 if(sc->devstate & ST_WRWAITEMPTY)
925 {
926 sc->devstate &= ~ST_WRWAITEMPTY;
927 wakeup((caddr_t) &sc->isdn_linktab->tx_queue);
928 }
929 if(sc->devstate & ST_TONE) {
930 tel_tone(sc);
931 } else {
932 selwakeup(&sc->selp);
933 }
934}
935
936/*---------------------------------------------------------------------------*
937 * this routine is called from the HSCX interrupt handler
938 * each time a packet is received or transmitted.
939 *---------------------------------------------------------------------------*/
940static void
941tel_activity(int unit, int rxtx)
942{
943 if(tel_sc[unit][FUNCTEL].cdp)
944 tel_sc[unit][FUNCTEL].cdp->last_active_time = SECOND;
945}
946
947/*---------------------------------------------------------------------------*
948 * return this drivers linktab address
949 *---------------------------------------------------------------------------*/
950drvr_link_t *
951tel_ret_linktab(int unit)
952{
953 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
954
955 tel_init_linktab(unit);
956 return(&sc->drvr_linktab);
957}
958
959/*---------------------------------------------------------------------------*
960 * setup the isdn_linktab for this driver
961 *---------------------------------------------------------------------------*/
962void
963tel_set_linktab(int unit, isdn_link_t *ilt)
964{
965 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
966 sc->isdn_linktab = ilt;
967}
968
969/*---------------------------------------------------------------------------*
970 * initialize this drivers linktab
971 *---------------------------------------------------------------------------*/
972static void
973tel_init_linktab(int unit)
974{
975 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
976
977 sc->drvr_linktab.unit = unit;
978 sc->drvr_linktab.bch_rx_data_ready = tel_rx_data_rdy;
979 sc->drvr_linktab.bch_tx_queue_empty = tel_tx_queue_empty;
980 sc->drvr_linktab.bch_activity = tel_activity;
981 sc->drvr_linktab.line_connected = tel_connect;
982 sc->drvr_linktab.line_disconnected = tel_disconnect;
983 sc->drvr_linktab.dial_response = tel_dialresponse;
984 sc->drvr_linktab.updown_ind = tel_updown;
985}
986
987/*===========================================================================*
988 * AUDIO FORMAT CONVERSION (produced by running g711conv)
989 *===========================================================================*/
990
991/*---------------------------------------------------------------------------*
992 * A-law to u-law conversion
993 *---------------------------------------------------------------------------*/
994static unsigned char a2u_tab[256] = {
995/* 00 */ 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d,
996/* 08 */ 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25,
997/* 10 */ 0x39, 0x3a, 0x37, 0x38, 0x3d, 0x3e, 0x3b, 0x3c,
998/* 18 */ 0x31, 0x32, 0x30, 0x30, 0x35, 0x36, 0x33, 0x34,
999/* 20 */ 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d,
1000/* 28 */ 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05,
1001/* 30 */ 0x1a, 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d,
1002/* 38 */ 0x12, 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15,
1003/* 40 */ 0x62, 0x63, 0x60, 0x61, 0x66, 0x67, 0x64, 0x65,
1004/* 48 */ 0x5d, 0x5d, 0x5c, 0x5c, 0x5f, 0x5f, 0x5e, 0x5e,
1005/* 50 */ 0x74, 0x76, 0x70, 0x72, 0x7c, 0x7e, 0x78, 0x7a,
1006/* 58 */ 0x6a, 0x6b, 0x68, 0x69, 0x6e, 0x6f, 0x6c, 0x6d,
1007/* 60 */ 0x48, 0x49, 0x46, 0x47, 0x4c, 0x4d, 0x4a, 0x4b,
1008/* 68 */ 0x40, 0x41, 0x3f, 0x3f, 0x44, 0x45, 0x42, 0x43,
1009/* 70 */ 0x56, 0x57, 0x54, 0x55, 0x5a, 0x5b, 0x58, 0x59,
1010/* 78 */ 0x4f, 0x4f, 0x4e, 0x4e, 0x52, 0x53, 0x50, 0x51,
1011/* 80 */ 0xaa, 0xab, 0xa8, 0xa9, 0xae, 0xaf, 0xac, 0xad,
1012/* 88 */ 0xa2, 0xa3, 0xa0, 0xa1, 0xa6, 0xa7, 0xa4, 0xa5,
1013/* 90 */ 0xb9, 0xba, 0xb7, 0xb8, 0xbd, 0xbe, 0xbb, 0xbc,
1014/* 98 */ 0xb1, 0xb2, 0xb0, 0xb0, 0xb5, 0xb6, 0xb3, 0xb4,
1015/* a0 */ 0x8a, 0x8b, 0x88, 0x89, 0x8e, 0x8f, 0x8c, 0x8d,
1016/* a8 */ 0x82, 0x83, 0x80, 0x81, 0x86, 0x87, 0x84, 0x85,
1017/* b0 */ 0x9a, 0x9b, 0x98, 0x99, 0x9e, 0x9f, 0x9c, 0x9d,
1018/* b8 */ 0x92, 0x93, 0x90, 0x91, 0x96, 0x97, 0x94, 0x95,
1019/* c0 */ 0xe2, 0xe3, 0xe0, 0xe1, 0xe6, 0xe7, 0xe4, 0xe5,
1020/* c8 */ 0xdd, 0xdd, 0xdc, 0xdc, 0xdf, 0xdf, 0xde, 0xde,
1021/* d0 */ 0xf4, 0xf6, 0xf0, 0xf2, 0xfc, 0xfe, 0xf8, 0xfa,
1022/* d8 */ 0xea, 0xeb, 0xe8, 0xe9, 0xee, 0xef, 0xec, 0xed,
1023/* e0 */ 0xc8, 0xc9, 0xc6, 0xc7, 0xcc, 0xcd, 0xca, 0xcb,
1024/* e8 */ 0xc0, 0xc1, 0xbf, 0xbf, 0xc4, 0xc5, 0xc2, 0xc3,
1025/* f0 */ 0xd6, 0xd7, 0xd4, 0xd5, 0xda, 0xdb, 0xd8, 0xd9,
1026/* f8 */ 0xcf, 0xcf, 0xce, 0xce, 0xd2, 0xd3, 0xd0, 0xd1
1027};
1028
1029/*---------------------------------------------------------------------------*
1030 * u-law to A-law conversion
1031 *---------------------------------------------------------------------------*/
1032static unsigned char u2a_tab[256] = {
1033/* 00 */ 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d,
1034/* 08 */ 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25,
1035/* 10 */ 0x3a, 0x3b, 0x38, 0x39, 0x3e, 0x3f, 0x3c, 0x3d,
1036/* 18 */ 0x32, 0x33, 0x30, 0x31, 0x36, 0x37, 0x34, 0x35,
1037/* 20 */ 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d,
1038/* 28 */ 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05,
1039/* 30 */ 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d, 0x12,
1040/* 38 */ 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15, 0x6a,
1041/* 40 */ 0x68, 0x69, 0x6e, 0x6f, 0x6c, 0x6d, 0x62, 0x63,
1042/* 48 */ 0x60, 0x61, 0x66, 0x67, 0x64, 0x65, 0x7a, 0x78,
1043/* 50 */ 0x7e, 0x7f, 0x7c, 0x7d, 0x72, 0x73, 0x70, 0x71,
1044/* 58 */ 0x76, 0x77, 0x74, 0x75, 0x4b, 0x49, 0x4f, 0x4d,
1045/* 60 */ 0x42, 0x43, 0x40, 0x41, 0x46, 0x47, 0x44, 0x45,
1046/* 68 */ 0x5a, 0x5b, 0x58, 0x59, 0x5e, 0x5f, 0x5c, 0x5d,
1047/* 70 */ 0x52, 0x52, 0x53, 0x53, 0x50, 0x50, 0x51, 0x51,
1048/* 78 */ 0x56, 0x56, 0x57, 0x57, 0x54, 0x54, 0x55, 0x55,
1049/* 80 */ 0xaa, 0xab, 0xa8, 0xa9, 0xae, 0xaf, 0xac, 0xad,
1050/* 88 */ 0xa2, 0xa3, 0xa0, 0xa1, 0xa6, 0xa7, 0xa4, 0xa5,
1051/* 90 */ 0xba, 0xbb, 0xb8, 0xb9, 0xbe, 0xbf, 0xbc, 0xbd,
1052/* 98 */ 0xb2, 0xb3, 0xb0, 0xb1, 0xb6, 0xb7, 0xb4, 0xb5,
1053/* a0 */ 0x8a, 0x8b, 0x88, 0x89, 0x8e, 0x8f, 0x8c, 0x8d,
1054/* a8 */ 0x82, 0x83, 0x80, 0x81, 0x86, 0x87, 0x84, 0x85,
1055/* b0 */ 0x9b, 0x98, 0x99, 0x9e, 0x9f, 0x9c, 0x9d, 0x92,
1056/* b8 */ 0x93, 0x90, 0x91, 0x96, 0x97, 0x94, 0x95, 0xea,
1057/* c0 */ 0xe8, 0xe9, 0xee, 0xef, 0xec, 0xed, 0xe2, 0xe3,
1058/* c8 */ 0xe0, 0xe1, 0xe6, 0xe7, 0xe4, 0xe5, 0xfa, 0xf8,
1059/* d0 */ 0xfe, 0xff, 0xfc, 0xfd, 0xf2, 0xf3, 0xf0, 0xf1,
1060/* d8 */ 0xf6, 0xf7, 0xf4, 0xf5, 0xcb, 0xc9, 0xcf, 0xcd,
1061/* e0 */ 0xc2, 0xc3, 0xc0, 0xc1, 0xc6, 0xc7, 0xc4, 0xc5,
1062/* e8 */ 0xda, 0xdb, 0xd8, 0xd9, 0xde, 0xdf, 0xdc, 0xdd,
1063/* f0 */ 0xd2, 0xd2, 0xd3, 0xd3, 0xd0, 0xd0, 0xd1, 0xd1,
1064/* f8 */ 0xd6, 0xd6, 0xd7, 0xd7, 0xd4, 0xd4, 0xd5, 0xd5
1065};
1066
1067/*---------------------------------------------------------------------------*
1068 * reverse bits in a byte
1069 *---------------------------------------------------------------------------*/
1070static unsigned char bitreverse[256] = {
1071/* 00 */ 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
1072/* 08 */ 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
1073/* 10 */ 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
1074/* 18 */ 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
1075/* 20 */ 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
1076/* 28 */ 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
1077/* 30 */ 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
1078/* 38 */ 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
1079/* 40 */ 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
1080/* 48 */ 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
1081/* 50 */ 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
1082/* 58 */ 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
1083/* 60 */ 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
1084/* 68 */ 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
1085/* 70 */ 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
1086/* 78 */ 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
1087/* 80 */ 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
1088/* 88 */ 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
1089/* 90 */ 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
1090/* 98 */ 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
1091/* a0 */ 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
1092/* a8 */ 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
1093/* b0 */ 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
1094/* b8 */ 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
1095/* c0 */ 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
1096/* c8 */ 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
1097/* d0 */ 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
1098/* d8 */ 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
1099/* e0 */ 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
1100/* e8 */ 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
1101/* f0 */ 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
1102/* f8 */ 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
1103};
1104
1105static u_char sinetab[8000] = { 213, 213, 213, 213, 213, 213, 213, 212,
1106212, 212, 212, 212, 212, 215, 215, 215, 215, 215, 215, 214, 214,
1107214, 214, 214, 214, 209, 209, 209, 209, 209, 209, 209, 208, 208,
1108208, 208, 208, 208, 211, 211, 211, 211, 211, 211, 210, 210, 210,
1109210, 210, 210, 221, 221, 221, 221, 221, 221, 220, 220, 220, 220,
1110220, 220, 220, 223, 223, 223, 223, 223, 223, 222, 222, 222, 222,
1111222, 222, 217, 217, 217, 217, 217, 217, 216, 216, 216, 216, 216,
1112216, 216, 219, 219, 219, 219, 219, 219, 218, 218, 218, 218, 218,
1113218, 197, 197, 197, 197, 197, 197, 196, 196, 196, 196, 196, 196,
1114196, 199, 199, 199, 199, 199, 199, 198, 198, 198, 198, 198, 198,
1115193, 193, 193, 193, 193, 193, 192, 192, 192, 192, 192, 192, 192,
1116195, 195, 195, 195, 195, 195, 194, 194, 194, 194, 194, 194, 205,
1117205, 205, 205, 205, 205, 204, 204, 204, 204, 204, 204, 204, 207,
1118207, 207, 207, 207, 207, 206, 206, 206, 206, 206, 206, 201, 201,
1119201, 201, 201, 201, 200, 200, 200, 200, 200, 200, 200, 203, 203,
1120203, 203, 203, 203, 202, 202, 202, 202, 202, 202, 245, 245, 245,
1121245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 244, 244, 244,
1122244, 244, 244, 244, 244, 244, 244, 244, 244, 247, 247, 247, 247,
1123247, 247, 247, 247, 247, 247, 247, 247, 247, 246, 246, 246, 246,
1124246, 246, 246, 246, 246, 246, 246, 246, 246, 241, 241, 241, 241,
1125241, 241, 241, 241, 241, 241, 241, 241, 240, 240, 240, 240, 240,
1126240, 240, 240, 240, 240, 240, 240, 240, 243, 243, 243, 243, 243,
1127243, 243, 243, 243, 243, 243, 243, 243, 242, 242, 242, 242, 242,
1128242, 242, 242, 242, 242, 242, 242, 242, 253, 253, 253, 253, 253,
1129253, 253, 253, 253, 253, 253, 253, 253, 252, 252, 252, 252, 252,
1130252, 252, 252, 252, 252, 252, 252, 255, 255, 255, 255, 255, 255,
1131255, 255, 255, 255, 255, 255, 255, 254, 254, 254, 254, 254, 254,
1132254, 254, 254, 254, 254, 254, 254, 249, 249, 249, 249, 249, 249,
1133249, 249, 249, 249, 249, 249, 249, 248, 248, 248, 248, 248, 248,
1134248, 248, 248, 248, 248, 248, 248, 251, 251, 251, 251, 251, 251,
1135251, 251, 251, 251, 251, 251, 251, 250, 250, 250, 250, 250, 250,
1136250, 250, 250, 250, 250, 250, 250, 229, 229, 229, 229, 229, 229,
1137229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
1138229, 229, 229, 229, 229, 229, 229, 228, 228, 228, 228, 228, 228,
1139228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
1140228, 228, 228, 228, 228, 228, 228, 228, 231, 231, 231, 231, 231,
1141231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
1142231, 231, 231, 231, 231, 231, 231, 231, 231, 230, 230, 230, 230,
1143230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
1144230, 230, 230, 230, 230, 230, 230, 230, 230, 225, 225, 225, 225,
1145225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
1146225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 224, 224,
1147224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
1148224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 227,
1149227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
1150227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
1151227, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1152226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1153226, 226, 226, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1154237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1155237, 237, 237, 237, 237, 236, 236, 236, 236, 236, 236, 236, 236,
1156236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1157236, 236, 236, 236, 236, 236, 236, 236, 239, 239, 239, 239, 239,
1158239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
1159239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 238, 238,
1160238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
1161238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
1162238, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1163233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1164233, 233, 233, 233, 233, 232, 232, 232, 232, 232, 232, 232, 232,
1165232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
1166232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 235, 235, 235,
1167235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
1168235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
1169235, 235, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1170234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1171234, 234, 234, 234, 234, 234, 234, 149, 149, 149, 149, 149, 149,
1172149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1173149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1174149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1175149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1176149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148,
1177148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1178148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1179148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1180148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1181148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 151, 151, 151,
1182151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1183151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1184151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1185151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1186151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1187151, 151, 151, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1188150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1189150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1190150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1191150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1192150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1193150, 150, 150, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1194145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1195145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1196145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1197145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1198145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1199145, 145, 145, 145, 145, 145, 145, 145, 144, 144, 144, 144, 144,
1200144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1201144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1202144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1203144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1204144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1205144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1206144, 144, 144, 144, 144, 144, 144, 144, 144, 147, 147, 147, 147,
1207147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1208147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1209147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1210147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1211147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1212147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1213147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1214147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146,
1215146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1216146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1217146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1218146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1219146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1220146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1221146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1222146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1223146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1224146, 146, 146, 146, 146, 146, 157, 157, 157, 157, 157, 157, 157,
1225157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1226157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1227157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1228157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1229157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1230157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1231157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1232157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1233157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1234157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1235157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1236157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1237157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1238156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1239156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1240156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1241156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1242156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1243156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1244156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1245156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1246156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1247156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1248156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1249156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1250156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1251156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1252156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1253156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1254156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1255156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1256156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1257156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1258156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1259156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1260156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1261156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1262156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1263156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1264156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1265156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1266156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1267156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1268156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1269156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1270156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1271156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1272156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1273156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1274156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1275156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1276156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1277156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1278156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1279156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1280156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157,
1281157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1282157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1283157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1284157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1285157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1286157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1287157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1288157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1289157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1290157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1291157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1292157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1293157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1294157, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1295146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1296146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1297146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1298146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1299146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1300146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1301146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1302146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1303146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147,
1304147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1305147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1306147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1307147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1308147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1309147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1310147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1311147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 144, 144,
1312144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1313144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1314144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1315144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1316144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1317144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1318144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145,
1319145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1320145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1321145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1322145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1323145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1324145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1325145, 145, 145, 145, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1326150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1327150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1328150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1329150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1330150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1331150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1332151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1333151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1334151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1335151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1336151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 148, 148, 148,
1337148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1338148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1339148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1340148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1341148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1342149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1343149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1344149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1345149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1346149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1347234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1348234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1349234, 234, 234, 234, 234, 235, 235, 235, 235, 235, 235, 235, 235,
1350235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
1351235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 232, 232, 232,
1352232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
1353232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
1354232, 232, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1355233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1356233, 233, 233, 233, 233, 233, 238, 238, 238, 238, 238, 238, 238,
1357238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
1358238, 238, 238, 238, 238, 238, 238, 238, 238, 239, 239, 239, 239,
1359239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
1360239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 236,
1361236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1362236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1363236, 236, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1364237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1365237, 237, 237, 237, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1366226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1367226, 226, 226, 226, 226, 226, 227, 227, 227, 227, 227, 227, 227,
1368227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
1369227, 227, 227, 227, 227, 227, 227, 227, 224, 224, 224, 224, 224,
1370224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
1371224, 224, 224, 224, 224, 224, 224, 224, 224, 225, 225, 225, 225,
1372225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
1373225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 230, 230,
1374230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
1375230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 231, 231,
1376231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
1377231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 228,
1378228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
1379228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
1380229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
1381229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
1382250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250,
1383251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
1384248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
1385249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
1386254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
1387255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
1388252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 253,
1389253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 242,
1390242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 243,
1391243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 240,
1392240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 241,
1393241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 246, 246,
1394246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 247, 247,
1395247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 244, 244,
1396244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 245, 245, 245,
1397245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 202, 202, 202,
1398202, 202, 202, 203, 203, 203, 203, 203, 203, 200, 200, 200, 200,
1399200, 200, 200, 201, 201, 201, 201, 201, 201, 206, 206, 206, 206,
1400206, 206, 207, 207, 207, 207, 207, 207, 204, 204, 204, 204, 204,
1401204, 204, 205, 205, 205, 205, 205, 205, 194, 194, 194, 194, 194,
1402194, 195, 195, 195, 195, 195, 195, 192, 192, 192, 192, 192, 192,
1403192, 193, 193, 193, 193, 193, 193, 198, 198, 198, 198, 198, 198,
1404199, 199, 199, 199, 199, 199, 196, 196, 196, 196, 196, 196, 196,
1405197, 197, 197, 197, 197, 197, 218, 218, 218, 218, 218, 218, 219,
1406219, 219, 219, 219, 219, 216, 216, 216, 216, 216, 216, 216, 217,
1407217, 217, 217, 217, 217, 222, 222, 222, 222, 222, 222, 223, 223,
1408223, 223, 223, 223, 220, 220, 220, 220, 220, 220, 220, 221, 221,
1409221, 221, 221, 221, 210, 210, 210, 210, 210, 210, 211, 211, 211,
1410211, 211, 211, 208, 208, 208, 208, 208, 208, 209, 209, 209, 209,
1411209, 209, 209, 214, 214, 214, 214, 214, 214, 215, 215, 215, 215,
1412215, 215, 212, 212, 212, 212, 212, 212, 213, 213, 213, 213, 213,
1413213, 213, 90, 90, 90, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 84,
141484, 87, 87, 87, 87, 87, 87, 86, 86, 86, 86, 86, 86, 81, 81, 81,
141581, 81, 81, 81, 80, 80, 80, 80, 80, 80, 83, 83, 83, 83, 83, 83,
141682, 82, 82, 82, 82, 82, 93, 93, 93, 93, 93, 93, 93, 92, 92, 92,
141792, 92, 92, 95, 95, 95, 95, 95, 95, 94, 94, 94, 94, 94, 94, 89,
141889, 89, 89, 89, 89, 88, 88, 88, 88, 88, 88, 88, 91, 91, 91, 91,
141991, 91, 90, 90, 90, 90, 90, 90, 69, 69, 69, 69, 69, 69, 68, 68,
142068, 68, 68, 68, 68, 71, 71, 71, 71, 71, 71, 70, 70, 70, 70, 70,
142170, 65, 65, 65, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 67, 67,
142267, 67, 67, 67, 66, 66, 66, 66, 66, 66, 77, 77, 77, 77, 77, 77,
142376, 76, 76, 76, 76, 76, 76, 79, 79, 79, 79, 79, 79, 78, 78, 78,
142478, 78, 78, 73, 73, 73, 73, 73, 73, 73, 72, 72, 72, 72, 72, 72,
142575, 75, 75, 75, 75, 75, 74, 74, 74, 74, 74, 74, 117, 117, 117, 117,
1426117, 117, 117, 117, 117, 117, 117, 117, 117, 116, 116, 116, 116,
1427116, 116, 116, 116, 116, 116, 116, 116, 116, 119, 119, 119, 119,
1428119, 119, 119, 119, 119, 119, 119, 119, 118, 118, 118, 118, 118,
1429118, 118, 118, 118, 118, 118, 118, 118, 113, 113, 113, 113, 113,
1430113, 113, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112,
1431112, 112, 112, 112, 112, 112, 112, 115, 115, 115, 115, 115, 115,
1432115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 114, 114, 114,
1433114, 114, 114, 114, 114, 114, 114, 125, 125, 125, 125, 125, 125,
1434125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124,
1435124, 124, 124, 124, 124, 124, 124, 127, 127, 127, 127, 127, 127,
1436127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126,
1437126, 126, 126, 126, 126, 126, 121, 121, 121, 121, 121, 121, 121,
1438121, 121, 121, 121, 121, 121, 120, 120, 120, 120, 120, 120, 120,
1439120, 120, 120, 120, 120, 120, 123, 123, 123, 123, 123, 123, 123,
1440123, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122,
1441122, 122, 122, 122, 122, 122, 101, 101, 101, 101, 101, 101, 101,
1442101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
1443101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 100, 100, 100,
1444100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
1445100, 100, 100, 100, 100, 100, 100, 103, 103, 103, 103, 103, 103,
1446103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1447103, 103, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102,
1448102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
1449102, 102, 102, 102, 102, 102, 102, 102, 102, 97, 97, 97, 97, 97,
145097, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
145197, 97, 97, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
145296, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
145396, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
145499, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98,
145598, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
145698, 98, 98, 98, 98, 98, 98, 98, 98, 109, 109, 109, 109, 109, 109,
1457109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
1458109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, 108,
1459108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
1460108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111,
1461111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1462111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1463111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
1464110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
1465110, 110, 110, 110, 110, 110, 105, 105, 105, 105, 105, 105, 105,
1466105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
1467105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 104, 104, 104,
1468104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1469104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1470104, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
1471107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
1472107, 107, 107, 107, 107, 107, 106, 106, 106, 106, 106, 106, 106,
1473106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
1474106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 21,
147521, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
147621, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
147721, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
147821, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
147920, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
148020, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
148120, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
148220, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
148320, 20, 20, 20, 20, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
148423, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
148523, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
148623, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
148723, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 22, 22, 22,
148822, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
148922, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
149022, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
149122, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
149222, 22, 22, 22, 22, 22, 22, 22, 22, 22, 17, 17, 17, 17, 17, 17,
149317, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
149417, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
149517, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
149617, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
149717, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16,
149816, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
149916, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
150016, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
150116, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
150216, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
150316, 16, 16, 16, 16, 16, 16, 16, 16, 16, 19, 19, 19, 19, 19, 19,
150419, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
150519, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
150619, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
150719, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
150819, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
150919, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
151019, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
151118, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
151218, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
151318, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
151418, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
151518, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
151618, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
151718, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
151818, 18, 18, 18, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
151929, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
152029, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
152129, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
152229, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
152329, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
152429, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
152529, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
152629, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
152729, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
152829, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
152929, 29, 29, 29, 29, 29, 29, 29, 29, 29, 28, 28, 28, 28, 28, 28,
153028, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153128, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153228, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153328, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153428, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153528, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153628, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153728, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153828, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153928, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154028, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154128, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154228, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154328, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154428, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154528, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154628, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154728, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154828, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154928, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
155028, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
155128, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
155228, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
155328, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
155428, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
155528, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
155628, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
155728, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
155828, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
155928, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
156028, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
156128, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
156228, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156329, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156429, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156529, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156629, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156729, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156829, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156929, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
157029, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
157129, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
157229, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
157329, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 18, 18, 18, 18, 18,
157418, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
157518, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
157618, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
157718, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
157818, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
157918, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
158018, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
158118, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19,
158219, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
158319, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
158419, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
158519, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
158619, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
158719, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
158819, 19, 19, 19, 19, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
158916, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
159016, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
159116, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
159216, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
159316, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
159416, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
159517, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
159617, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
159717, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
159817, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
159917, 17, 17, 17, 17, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
160022, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
160122, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
160222, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
160322, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
160422, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
160523, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
160623, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
160723, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
160823, 23, 23, 23, 23, 23, 23, 23, 23, 23, 20, 20, 20, 20, 20, 20,
160920, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
161020, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
161120, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
161220, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,
161321, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
161421, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
161521, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
161621, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
1617106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
1618106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
1619106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107,
1620107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
1621107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 104, 104,
1622104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1623104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1624104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
1625105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
1626105, 105, 105, 105, 105, 105, 110, 110, 110, 110, 110, 110, 110,
1627110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
1628110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111,
1629111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1630111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1631108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
1632108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
1633108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
1634109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
1635109, 109, 109, 109, 109, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
163698, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
163798, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
163899, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 96, 96,
163996, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
164096, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97,
164197, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
164297, 97, 97, 97, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
1643102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
1644102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1645103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1646103, 103, 103, 103, 103, 100, 100, 100, 100, 100, 100, 100, 100,
1647100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
1648100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101,
1649101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
1650101, 101, 101, 101, 101, 101, 122, 122, 122, 122, 122, 122, 122,
1651122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123,
1652123, 123, 123, 123, 123, 123, 120, 120, 120, 120, 120, 120, 120,
1653120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121,
1654121, 121, 121, 121, 121, 121, 126, 126, 126, 126, 126, 126, 126,
1655126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127,
1656127, 127, 127, 127, 127, 124, 124, 124, 124, 124, 124, 124, 124,
1657124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125,
1658125, 125, 125, 125, 125, 114, 114, 114, 114, 114, 114, 114, 114,
1659114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115,
1660115, 115, 115, 115, 115, 112, 112, 112, 112, 112, 112, 112, 112,
1661112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, 113,
1662113, 113, 113, 113, 118, 118, 118, 118, 118, 118, 118, 118, 118,
1663118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119, 119,
1664119, 119, 119, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
1665116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
1666117, 117, 117, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 72,
166772, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 73, 78, 78, 78, 78,
166878, 78, 79, 79, 79, 79, 79, 79, 76, 76, 76, 76, 76, 76, 76, 77,
166977, 77, 77, 77, 77, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67,
167067, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 70, 70,
167170, 70, 70, 70, 71, 71, 71, 71, 71, 71, 68, 68, 68, 68, 68, 68,
167268, 69, 69, 69, 69, 69, 69, 90, 90, 90, 90, 90, 90, 91, 91, 91,
167391, 91, 91, 88, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89,
167494, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 92, 92, 92, 92,
167592, 92, 93, 93, 93, 93, 93, 93, 93, 82, 82, 82, 82, 82, 82, 83,
167683, 83, 83, 83, 83, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81,
167781, 81, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 87, 84, 84,
167884, 84, 84, 84, 85, 85, 85, 85, 85, 85, 90, 90, 90 };
1679
1680/*===========================================================================*/
1681
1682#endif /* NI4BTEL > 0 */