FreeBSD/Linux Kernel Cross Reference
sys/netisdn/i4b_tel.c
1 /*
2 * Copyright (c) 1997, 2000 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 * $Id: i4b_tel.c,v 1.18 2006/11/16 01:33:49 christos Exp $
31 *
32 * $FreeBSD$
33 *
34 * last edit-date: [Fri Jan 5 11:33:47 2001]
35 *
36 *---------------------------------------------------------------------------*/
37
38 #include <sys/cdefs.h>
39 __KERNEL_RCSID(0, "$NetBSD: i4b_tel.c,v 1.18 2006/11/16 01:33:49 christos Exp $");
40
41 #include "isdntel.h"
42
43 #if NISDNTEL > 0
44
45 #undef I4BTELDEBUG
46
47 #include <sys/param.h>
48 #include <sys/systm.h>
49
50 #if (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(__NetBSD__)
51 #include <sys/ioccom.h>
52 #include <sys/poll.h>
53 #else
54 #include <sys/ioctl.h>
55 #include <sys/fcntl.h>
56 #endif
57
58 #include <sys/conf.h>
59 #include <sys/uio.h>
60 #include <sys/kernel.h>
61 #include <sys/mbuf.h>
62 #include <sys/socket.h>
63 #include <net/if.h>
64 #include <sys/proc.h>
65 #include <sys/tty.h>
66
67 #ifdef __FreeBSD__
68
69 #if defined(__FreeBSD__) && __FreeBSD__ == 3
70 #include "opt_devfs.h"
71 #endif
72
73 #ifdef DEVFS
74 #include <sys/devfsext.h>
75 #endif
76
77 #endif /* __FreeBSD__ */
78
79 #ifdef __bsdi__
80 #include <sys/device.h>
81 #endif
82
83 #ifdef __FreeBSD__
84 #include <machine/i4b_ioctl.h>
85 #include <machine/i4b_tel_ioctl.h>
86 #include <machine/i4b_debug.h>
87 #else
88 #include <netisdn/i4b_ioctl.h>
89 #include <netisdn/i4b_tel_ioctl.h>
90 #include <netisdn/i4b_debug.h>
91 #endif
92
93 #include <netisdn/i4b_global.h>
94 #include <netisdn/i4b_mbuf.h>
95 #include <netisdn/i4b_l3l4.h>
96
97 #include <netisdn/i4b_l4.h>
98
99 /* minor number: lower 6 bits = unit number */
100
101 #include <netisdn/i4b_l4.h>
102
103 #define UNITBITS 6
104 #define UNITMASK 0x3f
105 #define UNIT(n) (minor(n) & UNITMASK)
106
107 /* minor number: upper 2 bits = function number */
108
109 #define FUNCMASK 0x03
110 #define FUNC(n) (((minor(n)) >> UNITBITS) & FUNCMASK)
111
112 #define FUNCTEL 0 /* 0 = normal i4btel device */
113 #define FUNCDIAL 1 /* 1 = i4bteld dialout device */
114
115 #define NOFUNCS 2 /* number of device classes */
116
117 typedef struct tel_softc {
118
119 /* used only in func = FUNCTEL */
120
121 isdn_link_t *isdn_linktab; /* isdn linktab */
122 int audiofmt; /* audio format conversion */
123 u_char *rcvttab; /* conversion table on read */
124 u_char *wcvttab; /* conversion table on write */
125 call_desc_t *cdp; /* call descriptor pointer */
126
127 /* link from FUNCTEL to FUNCDIAL */
128 struct tel_softc * dialer;
129
130 /* used only in func = FUNCDIAL */
131
132 char result; /* result code for dial dev */
133
134 /* used in func = FUNCDIAL and func = FUNCTEL*/
135
136 int devstate; /* state of this unit */
137 #define ST_IDLE 0x00 /* idle */
138 #define ST_CONNECTED 0x01 /* isdn connected state */
139 #define ST_ISOPEN 0x02 /* userland opened */
140 #define ST_RDWAITDATA 0x04 /* userland read waiting */
141 #define ST_WRWAITEMPTY 0x08 /* userland write waiting */
142 #define ST_TONE 0x10 /* tone generator */
143
144 struct selinfo selp; /* select / poll */
145
146 #if defined(__FreeBSD__) && __FreeBSD__ == 3
147 #ifdef DEVFS
148 void *devfs_token; /* token for DEVFS */
149 #endif
150 #endif
151 struct i4b_tel_tones tones;
152 int toneidx;
153 int toneomega;
154 int tonefreq;
155
156 } tel_sc_t;
157
158 static tel_sc_t tel_sc[NISDNTEL][NOFUNCS];
159
160 /* forward decl */
161
162 static void tel_rx_data_rdy(void *softc);
163 static void tel_tx_queue_empty(void *softc);
164 static void tel_connect(void *softc, void *cdp);
165 static void tel_disconnect(void *softc, void *cdp);
166 static void tel_tone(tel_sc_t *sc);
167 static void tel_activity(void *softc, int rxtx);
168 static void tel_updown(void *softc, int updown);
169 static void tel_dialresponse(void *softc, int status, cause_t cause);
170 static void* tel_get_softc(int unit);
171 static void tel_set_linktab(void *softc, isdn_link_t *ilt);
172
173 /* audio format conversion tables */
174 static unsigned char a2u_tab[];
175 static unsigned char u2a_tab[];
176 static unsigned char bitreverse[];
177 static u_char sinetab[];
178
179 #ifndef __FreeBSD__
180 #define PDEVSTATIC /* - not static - */
181 PDEVSTATIC void isdntelattach __P((void));
182 PDEVSTATIC int isdntelioctl __P((dev_t dev, u_long cmd, caddr_t data, int flag, struct lwp *l));
183
184 int isdntelopen __P((dev_t dev, int flag, int fmt, struct lwp *l));
185 int isdntelclose __P((dev_t dev, int flag, int fmt, struct lwp *l));
186 int isdntelread __P((dev_t dev, struct uio *uio, int ioflag));
187 int isdntelwrite __P((dev_t dev, struct uio * uio, int ioflag));
188
189 #ifdef OS_USES_POLL
190 int isdntelpoll __P((dev_t dev, int events, struct lwp *l));
191 int isdntelkqfilter __P((dev_t dev, struct knote *kn));
192 #else
193 int isdntelsel __P((dev_t dev, int rw, struct lwp *l));
194 #endif
195
196 #endif /* __FreeBSD__ */
197
198 #ifdef __NetBSD__
199 const struct cdevsw isdntel_cdevsw = {
200 isdntelopen, isdntelclose, isdntelread, isdntelwrite, isdntelioctl,
201 nostop, notty, isdntelpoll, nommap, isdntelkqfilter, D_OTHER
202 };
203 #endif /* __NetBSD__ */
204
205 #if BSD > 199306 && defined(__FreeBSD__)
206
207 #define PDEVSTATIC static
208 PDEVSTATIC d_open_t i4btelopen;
209 PDEVSTATIC d_close_t i4btelclose;
210 PDEVSTATIC d_read_t i4btelread;
211 PDEVSTATIC d_read_t i4btelwrite;
212 PDEVSTATIC d_ioctl_t i4btelioctl;
213
214 #ifdef OS_USES_POLL
215 PDEVSTATIC d_poll_t i4btelpoll;
216 #define POLLFIELD i4btelpoll
217 #else
218 PDEVSTATIC d_select_t i4btelsel;
219 #define POLLFIELD i4btelsel
220 #endif
221
222 #define CDEV_MAJOR 56
223
224 #if defined(__FreeBSD__) && __FreeBSD__ >= 4
225 static struct cdevsw i4btel_cdevsw = {
226 /* open */ i4btelopen,
227 /* close */ i4btelclose,
228 /* read */ i4btelread,
229 /* write */ i4btelwrite,
230 /* ioctl */ i4btelioctl,
231 /* poll */ POLLFIELD,
232 /* mmap */ nommap,
233 /* strategy */ nostrategy,
234 /* name */ "i4btel",
235 /* maj */ CDEV_MAJOR,
236 /* dump */ nodump,
237 /* psize */ nopsize,
238 /* flags */ 0,
239 /* bmaj */ -1
240 };
241 #else
242 static struct cdevsw i4btel_cdevsw = {
243 i4btelopen, i4btelclose, i4btelread, i4btelwrite,
244 i4btelioctl, nostop, noreset, nodevtotty,
245 POLLFIELD, nommap, NULL, "i4btel", NULL, -1
246 };
247 #endif
248
249 PDEVSTATIC void isdntelinit(void *unused);
250 PDEVSTATIC void isdntelattach(void *);
251
252 PSEUDO_SET(isdntelattach, i4b_tel);
253
254 /*===========================================================================*
255 * DEVICE DRIVER ROUTINES
256 *===========================================================================*/
257
258 /*---------------------------------------------------------------------------*
259 * initialization at kernel load time
260 *---------------------------------------------------------------------------*/
261 PDEVSTATIC void
262 isdntelinit(void *unused)
263 {
264 #if defined(__FreeBSD__) && __FreeBSD__ >= 4
265 cdevsw_add(&i4btel_cdevsw);
266 #else
267 dev_t dev = makedev(CDEV_MAJOR, 0);
268 cdevsw_add(&dev, &i4btel_cdevsw, NULL);
269 #endif
270 }
271
272 SYSINIT(i4bteldev, SI_SUB_DRIVERS,
273 SI_ORDER_MIDDLE+CDEV_MAJOR, &i4btelinit, NULL);
274
275 #endif /* BSD > 199306 && defined(__FreeBSD__) */
276
277 #ifdef __bsdi__
278
279 int i4btelsel(dev_t dev, int rw, struct lwp *l);
280 int i4btelmatch(struct device *parent, struct cfdata *cf, void *aux);
281 void dummy_i4btelattach(struct device*, struct device *, void *);
282
283 #define CDEV_MAJOR 62
284
285 static struct cfdriver i4btelcd =
286 { NULL, "i4btel", i4btelmatch, dummy_i4btelattach, DV_DULL,
287 sizeof(struct cfdriver) };
288 struct devsw i4btelsw =
289 { &i4btelcd,
290 i4btelopen, i4btelclose, i4btelread, i4btelwrite,
291 i4btelioctl, i4btelsel, nommap, nostrat,
292 nodump, nopsize, 0, nostop
293 };
294
295 int
296 i4btelmatch(struct device *parent, struct cfdata *cf, void *aux)
297 {
298 NDBGL4(L4_TELDBG, "aux=0x%x", aux);
299 return 1;
300 }
301
302 void
303 dummy_i4btelattach(struct device *parent, struct device *self, void *aux)
304 {
305 NDBGL4(L4_TELDBG, "aux=0x%x", aux);
306 }
307
308 #endif /* __bsdi__ */
309
310 static const struct isdn_l4_driver_functions
311 tel_driver = {
312 tel_rx_data_rdy,
313 tel_tx_queue_empty,
314 tel_activity,
315 tel_connect,
316 tel_disconnect,
317 tel_dialresponse,
318 tel_updown,
319 tel_get_softc,
320 tel_set_linktab,
321 NULL
322 };
323
324 static int isdntel_driver_id = -1;
325
326 /*---------------------------------------------------------------------------*
327 * interface attach routine
328 *---------------------------------------------------------------------------*/
329 PDEVSTATIC void
330 #ifdef __FreeBSD__
331 isdntelattach(void *dummy)
332 #else
333 isdntelattach()
334 #endif
335 {
336 int i, j;
337
338 isdntel_driver_id = isdn_l4_driver_attach("isdntel", NISDNTEL, &tel_driver);
339
340 for(i=0; i < NISDNTEL; i++)
341 {
342 for(j=0; j < NOFUNCS; j++)
343 {
344 tel_sc[i][j].devstate = ST_IDLE;
345 tel_sc[i][j].audiofmt = CVT_NONE;
346 tel_sc[i][j].rcvttab = 0;
347 tel_sc[i][j].wcvttab = 0;
348 tel_sc[i][j].result = 0;
349
350 if (j == FUNCTEL)
351 tel_sc[i][FUNCTEL].dialer = &tel_sc[i][FUNCDIAL];
352 else
353 tel_sc[i][j].dialer = NULL;
354
355 #if defined(__FreeBSD__)
356 #if __FreeBSD__ == 3
357
358 #ifdef DEVFS
359
360 /* XXX */ tel_sc[i][j].devfs_token
361 = devfs_add_devswf(&i4btel_cdevsw, i, DV_CHR,
362 UID_ROOT, GID_WHEEL, 0600,
363 "i4btel%d", i);
364 #endif
365
366 #else
367 switch(j)
368 {
369 case FUNCTEL: /* normal i4btel device */
370 make_dev(&i4btel_cdevsw, i,
371 UID_ROOT, GID_WHEEL,
372 0600, "i4btel%d", i);
373 break;
374
375 case FUNCDIAL: /* i4bteld dialout device */
376 make_dev(&i4btel_cdevsw, i+(1<<UNITBITS),
377 UID_ROOT, GID_WHEEL,
378 0600, "i4bteld%d", i);
379 break;
380 }
381 #endif
382 #endif
383 }
384 }
385 }
386
387 /*---------------------------------------------------------------------------*
388 * open tel device
389 *---------------------------------------------------------------------------*/
390 PDEVSTATIC int
391 isdntelopen(dev_t dev, int flag, int fmt,
392 struct lwp *l)
393 {
394 int unit = UNIT(dev);
395 int func = FUNC(dev);
396
397 tel_sc_t *sc;
398
399 if(unit >= NISDNTEL)
400 return(ENXIO);
401
402 sc = &tel_sc[unit][func];
403
404 if(sc->devstate & ST_ISOPEN)
405 return(EBUSY);
406
407 sc->devstate |= ST_ISOPEN;
408
409 if(func == FUNCDIAL)
410 {
411 sc->result = 0;
412 }
413
414 return(0);
415 }
416
417 /*---------------------------------------------------------------------------*
418 * close tel device
419 *---------------------------------------------------------------------------*/
420 PDEVSTATIC int
421 isdntelclose(dev_t dev, int flag, int fmt,
422 struct lwp *l)
423 {
424 int unit = UNIT(dev);
425 int func = FUNC(dev);
426 tel_sc_t *sc;
427 int error = 0;
428 int x;
429
430 if(unit > NISDNTEL)
431 return(ENXIO);
432
433 sc = &tel_sc[unit][func];
434
435 x = splnet();
436 sc->devstate &= ~ST_TONE;
437 if((func == FUNCTEL) &&
438 (sc->isdn_linktab != NULL && sc->isdn_linktab->tx_queue != NULL))
439 {
440 while(!(IF_QEMPTY(sc->isdn_linktab->tx_queue)))
441 {
442 sc->devstate |= ST_WRWAITEMPTY;
443
444 if((error = tsleep((caddr_t) &sc->isdn_linktab->tx_queue,
445 TTIPRI | PCATCH, "wtcl", 0)) != 0)
446 {
447 break;
448 }
449 }
450 sc->devstate &= ~ST_WRWAITEMPTY;
451 }
452
453 sc->devstate &= ~ST_ISOPEN;
454 splx(x);
455 wakeup((caddr_t) &sc->tones);
456
457 return(error);
458 }
459
460 /*---------------------------------------------------------------------------*
461 * i4btelioctl - device driver ioctl routine
462 *---------------------------------------------------------------------------*/
463 PDEVSTATIC int
464 isdntelioctl(dev_t dev, u_long cmd, caddr_t data, int flag,
465 struct lwp *l)
466 {
467 int unit = UNIT(dev);
468 int func = FUNC(dev);
469 int error = 0;
470 struct mbuf *m;
471 int s;
472
473 tel_sc_t *sc = &tel_sc[unit][func];
474
475 if(func == FUNCTEL)
476 {
477 switch(cmd)
478 {
479 case I4B_TEL_GETAUDIOFMT:
480 *(int *)data = sc->audiofmt;
481 break;
482
483 case I4B_TEL_SETAUDIOFMT:
484 switch (*(int *)data)
485 {
486 case CVT_NONE:
487 sc->rcvttab = 0;
488 sc->wcvttab = 0;
489 break;
490 case CVT_ALAW2ULAW:
491 /* ISDN: A-law */
492 /* user: mu-law */
493 sc->rcvttab = a2u_tab;
494 sc->wcvttab = u2a_tab;
495 break;
496 case CVT_ULAW2ALAW:
497 /* ISDN: mu-law */
498 /* user: A-law */
499 sc->rcvttab = u2a_tab;
500 sc->wcvttab = a2u_tab;
501 break;
502 default:
503 error = ENODEV;
504 break;
505 }
506 if(error == 0)
507 sc->audiofmt = *(int *)data;
508 break;
509
510 case I4B_TEL_EMPTYINPUTQUEUE:
511 s = splnet();
512 while((sc->devstate & ST_CONNECTED) &&
513 (sc->devstate & ST_ISOPEN) &&
514 !IF_QEMPTY(sc->isdn_linktab->rx_queue))
515 {
516 IF_DEQUEUE(sc->isdn_linktab->rx_queue, m);
517 if(m)
518 i4b_Bfreembuf(m);
519 }
520 splx(s);
521 break;
522
523 case I4B_TEL_VR_REQ:
524 {
525 msg_vr_req_t *mvr;
526
527 mvr = (msg_vr_req_t *)data;
528
529 mvr->version = VERSION;
530 mvr->release = REL;
531 mvr->step = STEP;
532 break;
533 }
534 case I4B_TEL_TONES:
535 {
536 struct i4b_tel_tones *tt;
537
538 tt = (struct i4b_tel_tones *)data;
539 s = splnet();
540 while ((sc->devstate & ST_TONE) &&
541 sc->tones.duration[sc->toneidx] != 0) {
542 if((error = tsleep((caddr_t) &sc->tones,
543 TTIPRI | PCATCH, "rtone", 0 )) != 0) {
544 splx(s);
545 return(error);
546 }
547 }
548 if(!(sc->devstate & ST_ISOPEN)) {
549 splx(s);
550 return (EIO);
551 }
552 if(!(sc->devstate & ST_CONNECTED)) {
553 splx(s);
554 return (EIO);
555 }
556
557 sc->tones = *tt;
558 sc->toneidx = 0;
559 sc->tonefreq = tt->frequency[0];
560 sc->devstate |= ST_TONE;
561 splx(s);
562 tel_tone(sc);
563 break;
564 }
565
566 default:
567 error = ENOTTY;
568 break;
569 }
570 }
571 else if(func == FUNCDIAL)
572 {
573 switch(cmd)
574 {
575 default:
576 error = ENOTTY;
577 break;
578 }
579 }
580 return(error);
581 }
582
583 /*---------------------------------------------------------------------------*
584 * read from tel device
585 *---------------------------------------------------------------------------*/
586 PDEVSTATIC int
587 isdntelread(dev_t dev, struct uio *uio, int ioflag)
588 {
589 int unit = UNIT(dev);
590 int func = FUNC(dev);
591
592 struct mbuf *m;
593 int s;
594 int error = 0;
595
596 tel_sc_t *sc = &tel_sc[unit][func];
597
598 if(!(sc->devstate & ST_ISOPEN))
599 return(EIO);
600
601 if(func == FUNCTEL)
602 {
603 s = splnet();
604 while((sc->devstate & ST_ISOPEN) &&
605 (sc->devstate & ST_CONNECTED) &&
606 IF_QEMPTY(sc->isdn_linktab->rx_queue))
607 {
608 sc->devstate |= ST_RDWAITDATA;
609
610 NDBGL4(L4_TELDBG, "i4btel%d, queue empty!", unit);
611
612 if((error = tsleep((caddr_t) &sc->isdn_linktab->rx_queue,
613 TTIPRI | PCATCH,
614 "rtel", 0 )) != 0)
615 {
616 sc->devstate &= ~ST_RDWAITDATA;
617 splx(s);
618 return(error);
619 }
620 }
621
622 if(!(sc->devstate & ST_ISOPEN))
623 {
624 splx(s);
625 return(EIO);
626 }
627
628 if(!(sc->devstate & ST_CONNECTED))
629 {
630 splx(s);
631 return(EIO);
632 }
633
634
635 IF_DEQUEUE(sc->isdn_linktab->rx_queue, m);
636
637 if(m && m->m_len > 0)
638 {
639 register int i;
640
641 for(i = 0; i < m->m_len; i++)
642 {
643 /* always reverse bit order from line */
644 mtod(m,u_char *)[i] = bitreverse[mtod(m,u_char *)[i]];
645
646 /* convert if necessary */
647 if(sc->rcvttab)
648 mtod(m,u_char *)[i] = sc->rcvttab[mtod(m,u_char *)[i]];
649 }
650 error = uiomove(m->m_data, m->m_len, uio);
651
652 NDBGL4(L4_TELDBG, "i4btel%d, mbuf (%d bytes), uiomove %d!", unit, m->m_len, error);
653 }
654 else
655 {
656 NDBGL4(L4_TELDBG, "i4btel%d, empty mbuf from queue!", unit);
657 error = EIO;
658 }
659
660 if(m)
661 i4b_Bfreembuf(m);
662
663 splx(s);
664 }
665 else if(func == FUNCDIAL)
666 {
667 s = splnet();
668 while((sc->result == 0) && (sc->devstate & ST_ISOPEN))
669 {
670 sc->devstate |= ST_RDWAITDATA;
671
672 if((error = tsleep((caddr_t) &sc->result,
673 TTIPRI | PCATCH,
674 "rtel1", 0 )) != 0)
675 {
676 sc->devstate &= ~ST_RDWAITDATA;
677 splx(s);
678 return(error);
679 }
680 }
681
682 if(!(sc->devstate & ST_ISOPEN))
683 {
684 splx(s);
685 return(EIO);
686 }
687
688 if(sc->result != 0)
689 {
690 error = uiomove(&sc->result, 1, uio);
691 sc->result = 0;
692 }
693 else
694 {
695 error = EIO;
696 }
697
698 splx(s);
699 }
700 return(error);
701 }
702
703 /*---------------------------------------------------------------------------*
704 * write to tel device
705 *---------------------------------------------------------------------------*/
706 PDEVSTATIC int
707 isdntelwrite(dev_t dev, struct uio * uio, int ioflag)
708 {
709 int unit = UNIT(dev);
710 int func = FUNC(dev);
711 struct mbuf *m;
712 int s;
713 int error = 0;
714 tel_sc_t *sc = &tel_sc[unit][func];
715
716 if(!(sc->devstate & ST_ISOPEN))
717 {
718 return(EIO);
719 }
720
721 if(func == FUNCTEL)
722 {
723 s = splnet();
724
725 if(!(sc->devstate & ST_CONNECTED)) {
726 splx(s);
727 return(EIO);
728 }
729
730 sc->devstate &= ~ST_TONE;
731 while((IF_QFULL(sc->isdn_linktab->tx_queue)) &&
732 (sc->devstate & ST_ISOPEN))
733 {
734 sc->devstate |= ST_WRWAITEMPTY;
735
736 if((error = tsleep((caddr_t) &sc->isdn_linktab->tx_queue,
737 TTIPRI | PCATCH, "wtel", 0)) != 0)
738 {
739 sc->devstate &= ~ST_WRWAITEMPTY;
740 splx(s);
741 return(error);
742 }
743 }
744
745 if(!(sc->devstate & ST_ISOPEN))
746 {
747 splx(s);
748 return(EIO);
749 }
750
751 if(!(sc->devstate & ST_CONNECTED))
752 {
753 splx(s);
754 return(EIO);
755 }
756
757 if((m = i4b_Bgetmbuf(BCH_MAX_DATALEN)) != NULL)
758 {
759 register int i;
760
761 m->m_len = min(BCH_MAX_DATALEN, uio->uio_resid);
762
763 error = uiomove(m->m_data, m->m_len, uio);
764
765 for(i = 0; i < m->m_len; i++)
766 {
767 /* convert if necessary */
768 if(sc->wcvttab)
769 mtod(m,u_char *)[i] = sc->wcvttab[mtod(m,u_char *)[i]];
770
771 /* always reverse bitorder to line */
772 mtod(m,u_char *)[i] = bitreverse[mtod(m,u_char *)[i]];
773 }
774
775 if(IF_QFULL(sc->isdn_linktab->tx_queue))
776 {
777 m_freem(m);
778 }
779 else
780 {
781 IF_ENQUEUE(sc->isdn_linktab->tx_queue, m);
782 }
783
784 (*sc->isdn_linktab->bchannel_driver->bch_tx_start)(sc->isdn_linktab->l1token, sc->isdn_linktab->channel);
785 }
786
787 splx(s);
788 }
789 else if(func == FUNCDIAL)
790 {
791 tel_sc_t *telsc = &tel_sc[unit][FUNCTEL];
792
793 #define CMDBUFSIZ 80
794 char cmdbuf[CMDBUFSIZ];
795 int len = min(CMDBUFSIZ-1, uio->uio_resid);
796
797 error = uiomove(cmdbuf, len, uio);
798
799 if(cmdbuf[0] == CMD_DIAL)
800 {
801 i4b_l4_dialoutnumber(isdntel_driver_id, unit, len-1, &cmdbuf[1]);
802 }
803 else if(cmdbuf[0] == CMD_HUP)
804 {
805 if (!(telsc->devstate & ST_CONNECTED))
806 error = EIO;
807 else
808 i4b_l4_drvrdisc(telsc->cdp->cdid);
809 }
810 }
811 else
812 {
813 error = EIO;
814 }
815
816 return(error);
817 }
818
819 /*---------------------------------------------------------------------------*
820 *
821 *---------------------------------------------------------------------------*/
822 #define NTONESAMP 32
823 static void
824 tel_tone(tel_sc_t *sc)
825 {
826 struct mbuf *m;
827 u_char *p;
828 int i;
829
830 if((m = i4b_Bgetmbuf(NTONESAMP)) == NULL) {
831 printf("no mbuf in tel_tone\n");
832 return;
833 }
834 p = m->m_data;
835 m->m_len = 0;
836 for (i = 0; i < NTONESAMP && (sc->devstate & ST_TONE); i++) {
837
838 if (sc->tones.duration[sc->toneidx] > 0) {
839 if (--sc->tones.duration[sc->toneidx] == 0) {
840 sc->toneidx++;
841 if (sc->toneidx == I4B_TEL_MAXTONES) {
842 sc->devstate &= ~ST_TONE;
843 sc->toneomega = 0;
844 sc->tonefreq = 0;
845 } else if (sc->tones.frequency[sc->toneidx] == 0 &&
846 sc->tones.duration[sc->toneidx] == 0) {
847 sc->devstate &= ~ST_TONE;
848 sc->toneomega = 0;
849 sc->tonefreq = 0;
850 } else {
851 sc->tonefreq = sc->tones.frequency[sc->toneidx];
852 }
853 if (sc->tones.duration[sc->toneidx] == 0) {
854 wakeup((caddr_t) &sc->tones);
855 }
856 }
857 }
858
859 sc->toneomega += sc->tonefreq;
860 if (sc->toneomega >= 8000)
861 sc->toneomega -= 8000;
862 *p++ = bitreverse[sinetab[sc->toneomega]];
863 m->m_len++;
864 }
865 IF_ENQUEUE(sc->isdn_linktab->tx_queue, m);
866 (*sc->isdn_linktab->bchannel_driver->bch_tx_start)(sc->isdn_linktab->l1token, sc->isdn_linktab->channel);
867 }
868
869
870 #ifdef OS_USES_POLL
871 /*---------------------------------------------------------------------------*
872 * device driver poll
873 *---------------------------------------------------------------------------*/
874 PDEVSTATIC int
875 isdntelpoll(dev_t dev, int events, struct lwp *l)
876 {
877 int revents = 0; /* Events we found */
878 int s;
879 int unit = UNIT(dev);
880 int func = FUNC(dev);
881
882 tel_sc_t *sc = &tel_sc[unit][func];
883
884 s = splhigh();
885
886 if(!(sc->devstate & ST_ISOPEN))
887 {
888 NDBGL4(L4_TELDBG, "i4btel%d, !ST_ISOPEN", unit);
889 splx(s);
890 return(0);
891 }
892
893 if(func == FUNCTEL)
894 {
895 /*
896 * Writes are OK if we are connected and the
897 * transmit queue can take them
898 */
899
900 if((events & (POLLOUT|POLLWRNORM)) &&
901 (sc->devstate & ST_CONNECTED) &&
902 (sc->isdn_linktab != NULL) &&
903 (!IF_QFULL(sc->isdn_linktab->tx_queue)))
904 {
905 NDBGL4(L4_TELDBG, "i4btel%d, POLLOUT", unit);
906 revents |= (events & (POLLOUT|POLLWRNORM));
907 }
908
909 /* ... while reads are OK if we have any data */
910
911 if((events & (POLLIN|POLLRDNORM)) &&
912 (sc->devstate & ST_CONNECTED) &&
913 (sc->isdn_linktab != NULL) &&
914 (!IF_QEMPTY(sc->isdn_linktab->rx_queue)))
915 {
916 NDBGL4(L4_TELDBG, "i4btel%d, POLLIN", unit);
917 revents |= (events & (POLLIN|POLLRDNORM));
918 }
919
920 if(revents == 0)
921 {
922 NDBGL4(L4_TELDBG, "i4btel%d, selrecord", unit);
923 selrecord(l, &sc->selp);
924 }
925 }
926 else if(func == FUNCDIAL)
927 {
928 if(events & (POLLOUT|POLLWRNORM))
929 {
930 NDBGL4(L4_TELDBG, "i4bteld%d, POLLOUT", unit);
931 revents |= (events & (POLLOUT|POLLWRNORM));
932 }
933
934 if(events & (POLLIN|POLLRDNORM))
935 {
936 NDBGL4(L4_TELDBG, "i4bteld%d, POLLIN, result = %d", unit, sc->result);
937 if(sc->result != 0)
938 revents |= (events & (POLLIN|POLLRDNORM));
939 }
940
941 if(revents == 0)
942 {
943 NDBGL4(L4_TELDBG, "i4bteld%d, selrecord", unit);
944 selrecord(l, &sc->selp);
945 }
946 }
947 splx(s);
948 return(revents);
949 }
950
951 static void
952 filt_i4btel_detach(struct knote *kn)
953 {
954 tel_sc_t *sc = kn->kn_hook;
955 int s;
956
957 s = splhigh();
958 SLIST_REMOVE(&sc->selp.sel_klist, kn, knote, kn_selnext);
959 splx(s);
960 }
961
962 static int
963 filt_i4btel_telread(struct knote *kn, long hint)
964 {
965 tel_sc_t *sc = kn->kn_hook;
966
967 if ((sc->devstate & ST_CONNECTED) == 0)
968 return (0);
969 if (sc->isdn_linktab == NULL)
970 return (0);
971 if (IF_QEMPTY(sc->isdn_linktab->rx_queue))
972 return (0);
973
974 kn->kn_data = 0; /* XXXLUKEM (thorpej): what to put here? */
975 return (1);
976 }
977
978 static const struct filterops i4btel_telread_filtops =
979 { 1, NULL, filt_i4btel_detach, filt_i4btel_telread };
980
981 static int
982 filt_i4btel_telwrite(struct knote *kn, long hint)
983 {
984 tel_sc_t *sc = kn->kn_hook;
985
986 if ((sc->devstate & ST_CONNECTED) == 0)
987 return (0);
988 if (sc->isdn_linktab == NULL)
989 return (0);
990 if (IF_QFULL(sc->isdn_linktab->tx_queue))
991 return (0);
992
993 kn->kn_data = 0; /* XXXLUKEM (thorpej): what to put here? */
994 return (1);
995 }
996
997 static const struct filterops i4btel_telwrite_filtops =
998 { 1, NULL, filt_i4btel_detach, filt_i4btel_telwrite };
999
1000 static int
1001 filt_i4btel_dialread(struct knote *kn, long hint)
1002 {
1003 tel_sc_t *sc = kn->kn_hook;
1004
1005 if (sc->result == 0)
1006 return (0);
1007
1008 kn->kn_data = 0; /* XXXLUKEM (thorpej): what to put here? */
1009 return (1);
1010 }
1011
1012 static const struct filterops i4btel_dialread_filtops =
1013 { 1, NULL, filt_i4btel_detach, filt_i4btel_dialread };
1014
1015 static const struct filterops i4btel_seltrue_filtops =
1016 { 1, NULL, filt_i4btel_detach, filt_seltrue };
1017
1018 int
1019 isdntelkqfilter(dev_t dev, struct knote *kn)
1020 {
1021 int s;
1022 int unit = UNIT(dev);
1023 int func = FUNC(dev);
1024
1025 struct klist *klist;
1026 tel_sc_t *sc = &tel_sc[unit][func];
1027
1028 switch (kn->kn_filter) {
1029 case EVFILT_READ:
1030 klist = &sc->selp.sel_klist;
1031 if (func == FUNCTEL)
1032 kn->kn_fop = &i4btel_telread_filtops;
1033 else if (func == FUNCDIAL)
1034 kn->kn_fop = &i4btel_dialread_filtops;
1035 else
1036 return (1);
1037 break;
1038
1039 case EVFILT_WRITE:
1040 klist = &sc->selp.sel_klist;
1041 if (func == FUNCTEL)
1042 kn->kn_fop = &i4btel_telwrite_filtops;
1043 else if (func == FUNCDIAL)
1044 kn->kn_fop = &i4btel_seltrue_filtops;
1045 else
1046 return (1);
1047 break;
1048
1049 default:
1050 return (1);
1051 }
1052
1053 kn->kn_hook = sc;
1054
1055 s = splhigh();
1056 SLIST_INSERT_HEAD(klist, kn, kn_selnext);
1057 splx(s);
1058
1059 return (0);
1060 }
1061
1062 #else /* OS_USES_POLL */
1063
1064 /*---------------------------------------------------------------------------*
1065 * device driver select
1066 *---------------------------------------------------------------------------*/
1067 PDEVSTATIC int
1068 i4btelsel(dev_t dev, int rw, struct lwp *l)
1069 {
1070 int s;
1071 int unit = UNIT(dev);
1072 int func = FUNC(dev);
1073
1074 tel_sc_t *sc = &tel_sc[unit][func];
1075
1076 s = splhigh();
1077
1078 if (!(sc->devstate & ST_ISOPEN))
1079 {
1080 NDBGL4(L4_TELDBG, "i4btel%d, !ST_ISOPEN", unit);
1081 splx(s);
1082 return(0);
1083 }
1084
1085 if (func == FUNCTEL)
1086 {
1087 /* Don't even bother if we're not connected */
1088 if (!(sc->devstate & ST_CONNECTED) || sc->isdn_linktab == NULL)
1089 {
1090 splx(s);
1091 return 0;
1092 }
1093
1094 if (rw == FREAD)
1095 {
1096 if (!IF_QEMPTY(sc->isdn_linktab->rx_queue))
1097 {
1098 NDBGL4(L4_TELDBG, "i4btel%d, FREAD", unit);
1099 splx(s);
1100 return 1;
1101 }
1102 }
1103 else if (rw == FWRITE)
1104 {
1105 if (!IF_QFULL(sc->isdn_linktab->tx_queue))
1106 {
1107 NDBGL4(L4_TELDBG, "i4btel%d, FWRITE", unit);
1108 splx(s);
1109 return 1;
1110 }
1111 }
1112 }
1113 else if (func == FUNCDIAL)
1114 {
1115 if (rw == FWRITE)
1116 {
1117 NDBGL4(L4_TELDBG, "i4bteld%d, FWRITE", unit);
1118 splx(s);
1119 return 1;
1120 }
1121
1122 if (rw == FREAD)
1123 {
1124 NDBGL4(L4_TELDBG, "i4bteld%d, FREAD, result = %d", unit, sc->result);
1125 if (sc->result != 0)
1126 {
1127 splx(s);
1128 return 1;
1129 }
1130 }
1131 }
1132
1133 NDBGL4(L4_TELDBG, "i4bteld%d, selrecord", unit);
1134 selrecord(l, &sc->selp);
1135 splx(s);
1136 return 0;
1137 }
1138
1139 #endif /* OS_USES_POLL */
1140
1141 /*===========================================================================*
1142 * ISDN INTERFACE ROUTINES
1143 *===========================================================================*/
1144
1145 /*---------------------------------------------------------------------------*
1146 * this routine is called from L4 handler at connect time
1147 *---------------------------------------------------------------------------*/
1148 static void
1149 tel_connect(void *softc, void *cdp)
1150 {
1151 tel_sc_t *sc = softc;
1152
1153 /* audio device */
1154
1155 sc->cdp = (call_desc_t *)cdp;
1156
1157 sc->devstate |= ST_CONNECTED;
1158
1159 /* dialer device */
1160
1161 sc = sc->dialer;
1162
1163 if(sc->devstate == ST_ISOPEN)
1164 {
1165 sc->result = RSP_CONN;
1166
1167 if(sc->devstate & ST_RDWAITDATA)
1168 {
1169 sc->devstate &= ~ST_RDWAITDATA;
1170 wakeup((caddr_t) &sc->result);
1171 }
1172 selnotify(&sc->selp, 0);
1173 }
1174 }
1175
1176 /*---------------------------------------------------------------------------*
1177 * this routine is called from L4 handler at disconnect time
1178 *---------------------------------------------------------------------------*/
1179 static void
1180 tel_disconnect(void *softc, void *cdp)
1181 {
1182 tel_sc_t *sc = softc;
1183
1184 /* audio device */
1185
1186 sc->devstate &= ~ST_CONNECTED;
1187
1188 if(sc->devstate & ST_RDWAITDATA)
1189 {
1190 sc->devstate &= ~ST_RDWAITDATA;
1191 wakeup((caddr_t) &sc->isdn_linktab->rx_queue);
1192 }
1193
1194 if(sc->devstate & ST_WRWAITEMPTY)
1195 {
1196 sc->devstate &= ~ST_WRWAITEMPTY;
1197 wakeup((caddr_t) &sc->isdn_linktab->tx_queue);
1198 }
1199
1200 /* dialer device */
1201
1202 sc = sc->dialer;
1203
1204 if(sc->devstate & ST_ISOPEN)
1205 {
1206 sc->result = RSP_HUP;
1207
1208 if(sc->devstate & ST_RDWAITDATA)
1209 {
1210 sc->devstate &= ~ST_RDWAITDATA;
1211 wakeup((caddr_t) &sc->result);
1212 }
1213 selnotify(&sc->selp, 0);
1214
1215 if (sc->devstate & ST_TONE) {
1216 sc->devstate &= ~ST_TONE;
1217 wakeup((caddr_t) &sc->tones);
1218 }
1219 }
1220 }
1221
1222 /*---------------------------------------------------------------------------*
1223 * feedback from daemon in case of dial problems
1224 *---------------------------------------------------------------------------*/
1225 static void
1226 tel_dialresponse(void *softc, int status, cause_t cause)
1227 {
1228 tel_sc_t *sc = ((struct tel_softc*)softc)->dialer;
1229
1230 NDBGL4(L4_TELDBG, "status=%d, cause=0x%4x", status, cause);
1231
1232 if((sc->devstate == ST_ISOPEN) && status)
1233 {
1234 sc->result = RSP_NOA;
1235
1236 if(sc->devstate & ST_RDWAITDATA)
1237 {
1238 sc->devstate &= ~ST_RDWAITDATA;
1239 wakeup((caddr_t) &sc->result);
1240 }
1241 selnotify(&sc->selp, 0);
1242 }
1243 }
1244
1245 /*---------------------------------------------------------------------------*
1246 * interface up/down
1247 *---------------------------------------------------------------------------*/
1248 static void
1249 tel_updown(void *softc, int updown)
1250 {
1251 }
1252
1253 /*---------------------------------------------------------------------------*
1254 * this routine is called from the HSCX interrupt handler
1255 * when a new frame (mbuf) has been received and was put on
1256 * the rx queue.
1257 *---------------------------------------------------------------------------*/
1258 static void
1259 tel_rx_data_rdy(void *softc)
1260 {
1261 tel_sc_t *sc = softc;
1262
1263 if(sc->devstate & ST_RDWAITDATA)
1264 {
1265 sc->devstate &= ~ST_RDWAITDATA;
1266 wakeup((caddr_t) &sc->isdn_linktab->rx_queue);
1267 }
1268 selnotify(&sc->selp, 0);
1269 }
1270
1271 /*---------------------------------------------------------------------------*
1272 * this routine is called from the HSCX interrupt handler
1273 * when the last frame has been sent out and there is no
1274 * further frame (mbuf) in the tx queue.
1275 *---------------------------------------------------------------------------*/
1276 static void
1277 tel_tx_queue_empty(void *softc)
1278 {
1279 tel_sc_t *sc = softc;
1280
1281 if(sc->devstate & ST_WRWAITEMPTY)
1282 {
1283 sc->devstate &= ~ST_WRWAITEMPTY;
1284 wakeup((caddr_t) &sc->isdn_linktab->tx_queue);
1285 }
1286 if(sc->devstate & ST_TONE) {
1287 tel_tone(sc);
1288 } else {
1289 selnotify(&sc->selp, 0);
1290 }
1291 }
1292
1293 /*---------------------------------------------------------------------------*
1294 * this routine is called from the HSCX interrupt handler
1295 * each time a packet is received or transmitted.
1296 *---------------------------------------------------------------------------*/
1297 static void
1298 tel_activity(void *softc, int rxtx)
1299 {
1300 struct tel_softc *sc = softc;
1301
1302 if(sc->cdp)
1303 sc->cdp->last_active_time = SECOND;
1304 }
1305
1306 /*---------------------------------------------------------------------------*
1307 * setup the isdn_linktab for this driver
1308 *---------------------------------------------------------------------------*/
1309 static void
1310 tel_set_linktab(void *softc, isdn_link_t *ilt)
1311 {
1312 tel_sc_t *sc = softc;
1313 sc->isdn_linktab = ilt;
1314 }
1315
1316 /*---------------------------------------------------------------------------*
1317 * return the instance
1318 *---------------------------------------------------------------------------*/
1319 static void*
1320 tel_get_softc(int unit)
1321 {
1322 return &tel_sc[unit][FUNCTEL];
1323 }
1324
1325 /*===========================================================================*
1326 * AUDIO FORMAT CONVERSION (produced by running g711conv)
1327 *===========================================================================*/
1328
1329 /*---------------------------------------------------------------------------*
1330 * A-law to mu-law conversion
1331 *---------------------------------------------------------------------------*/
1332 static unsigned char a2u_tab[256] = {
1333 /* 00 */ 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d,
1334 /* 08 */ 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25,
1335 /* 10 */ 0x39, 0x3a, 0x37, 0x38, 0x3d, 0x3e, 0x3b, 0x3c,
1336 /* 18 */ 0x31, 0x32, 0x30, 0x30, 0x35, 0x36, 0x33, 0x34,
1337 /* 20 */ 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d,
1338 /* 28 */ 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05,
1339 /* 30 */ 0x1a, 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d,
1340 /* 38 */ 0x12, 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15,
1341 /* 40 */ 0x62, 0x63, 0x60, 0x61, 0x66, 0x67, 0x64, 0x65,
1342 /* 48 */ 0x5d, 0x5d, 0x5c, 0x5c, 0x5f, 0x5f, 0x5e, 0x5e,
1343 /* 50 */ 0x74, 0x76, 0x70, 0x72, 0x7c, 0x7e, 0x78, 0x7a,
1344 /* 58 */ 0x6a, 0x6b, 0x68, 0x69, 0x6e, 0x6f, 0x6c, 0x6d,
1345 /* 60 */ 0x48, 0x49, 0x46, 0x47, 0x4c, 0x4d, 0x4a, 0x4b,
1346 /* 68 */ 0x40, 0x41, 0x3f, 0x3f, 0x44, 0x45, 0x42, 0x43,
1347 /* 70 */ 0x56, 0x57, 0x54, 0x55, 0x5a, 0x5b, 0x58, 0x59,
1348 /* 78 */ 0x4f, 0x4f, 0x4e, 0x4e, 0x52, 0x53, 0x50, 0x51,
1349 /* 80 */ 0xaa, 0xab, 0xa8, 0xa9, 0xae, 0xaf, 0xac, 0xad,
1350 /* 88 */ 0xa2, 0xa3, 0xa0, 0xa1, 0xa6, 0xa7, 0xa4, 0xa5,
1351 /* 90 */ 0xb9, 0xba, 0xb7, 0xb8, 0xbd, 0xbe, 0xbb, 0xbc,
1352 /* 98 */ 0xb1, 0xb2, 0xb0, 0xb0, 0xb5, 0xb6, 0xb3, 0xb4,
1353 /* a0 */ 0x8a, 0x8b, 0x88, 0x89, 0x8e, 0x8f, 0x8c, 0x8d,
1354 /* a8 */ 0x82, 0x83, 0x80, 0x81, 0x86, 0x87, 0x84, 0x85,
1355 /* b0 */ 0x9a, 0x9b, 0x98, 0x99, 0x9e, 0x9f, 0x9c, 0x9d,
1356 /* b8 */ 0x92, 0x93, 0x90, 0x91, 0x96, 0x97, 0x94, 0x95,
1357 /* c0 */ 0xe2, 0xe3, 0xe0, 0xe1, 0xe6, 0xe7, 0xe4, 0xe5,
1358 /* c8 */ 0xdd, 0xdd, 0xdc, 0xdc, 0xdf, 0xdf, 0xde, 0xde,
1359 /* d0 */ 0xf4, 0xf6, 0xf0, 0xf2, 0xfc, 0xfe, 0xf8, 0xfa,
1360 /* d8 */ 0xea, 0xeb, 0xe8, 0xe9, 0xee, 0xef, 0xec, 0xed,
1361 /* e0 */ 0xc8, 0xc9, 0xc6, 0xc7, 0xcc, 0xcd, 0xca, 0xcb,
1362 /* e8 */ 0xc0, 0xc1, 0xbf, 0xbf, 0xc4, 0xc5, 0xc2, 0xc3,
1363 /* f0 */ 0xd6, 0xd7, 0xd4, 0xd5, 0xda, 0xdb, 0xd8, 0xd9,
1364 /* f8 */ 0xcf, 0xcf, 0xce, 0xce, 0xd2, 0xd3, 0xd0, 0xd1
1365 };
1366
1367 /*---------------------------------------------------------------------------*
1368 * mu-law to A-law conversion
1369 *---------------------------------------------------------------------------*/
1370 static unsigned char u2a_tab[256] = {
1371 /* 00 */ 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d,
1372 /* 08 */ 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25,
1373 /* 10 */ 0x3a, 0x3b, 0x38, 0x39, 0x3e, 0x3f, 0x3c, 0x3d,
1374 /* 18 */ 0x32, 0x33, 0x30, 0x31, 0x36, 0x37, 0x34, 0x35,
1375 /* 20 */ 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d,
1376 /* 28 */ 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05,
1377 /* 30 */ 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d, 0x12,
1378 /* 38 */ 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15, 0x6a,
1379 /* 40 */ 0x68, 0x69, 0x6e, 0x6f, 0x6c, 0x6d, 0x62, 0x63,
1380 /* 48 */ 0x60, 0x61, 0x66, 0x67, 0x64, 0x65, 0x7a, 0x78,
1381 /* 50 */ 0x7e, 0x7f, 0x7c, 0x7d, 0x72, 0x73, 0x70, 0x71,
1382 /* 58 */ 0x76, 0x77, 0x74, 0x75, 0x4b, 0x49, 0x4f, 0x4d,
1383 /* 60 */ 0x42, 0x43, 0x40, 0x41, 0x46, 0x47, 0x44, 0x45,
1384 /* 68 */ 0x5a, 0x5b, 0x58, 0x59, 0x5e, 0x5f, 0x5c, 0x5d,
1385 /* 70 */ 0x52, 0x52, 0x53, 0x53, 0x50, 0x50, 0x51, 0x51,
1386 /* 78 */ 0x56, 0x56, 0x57, 0x57, 0x54, 0x54, 0x55, 0x55,
1387 /* 80 */ 0xaa, 0xab, 0xa8, 0xa9, 0xae, 0xaf, 0xac, 0xad,
1388 /* 88 */ 0xa2, 0xa3, 0xa0, 0xa1, 0xa6, 0xa7, 0xa4, 0xa5,
1389 /* 90 */ 0xba, 0xbb, 0xb8, 0xb9, 0xbe, 0xbf, 0xbc, 0xbd,
1390 /* 98 */ 0xb2, 0xb3, 0xb0, 0xb1, 0xb6, 0xb7, 0xb4, 0xb5,
1391 /* a0 */ 0x8a, 0x8b, 0x88, 0x89, 0x8e, 0x8f, 0x8c, 0x8d,
1392 /* a8 */ 0x82, 0x83, 0x80, 0x81, 0x86, 0x87, 0x84, 0x85,
1393 /* b0 */ 0x9b, 0x98, 0x99, 0x9e, 0x9f, 0x9c, 0x9d, 0x92,
1394 /* b8 */ 0x93, 0x90, 0x91, 0x96, 0x97, 0x94, 0x95, 0xea,
1395 /* c0 */ 0xe8, 0xe9, 0xee, 0xef, 0xec, 0xed, 0xe2, 0xe3,
1396 /* c8 */ 0xe0, 0xe1, 0xe6, 0xe7, 0xe4, 0xe5, 0xfa, 0xf8,
1397 /* d0 */ 0xfe, 0xff, 0xfc, 0xfd, 0xf2, 0xf3, 0xf0, 0xf1,
1398 /* d8 */ 0xf6, 0xf7, 0xf4, 0xf5, 0xcb, 0xc9, 0xcf, 0xcd,
1399 /* e0 */ 0xc2, 0xc3, 0xc0, 0xc1, 0xc6, 0xc7, 0xc4, 0xc5,
1400 /* e8 */ 0xda, 0xdb, 0xd8, 0xd9, 0xde, 0xdf, 0xdc, 0xdd,
1401 /* f0 */ 0xd2, 0xd2, 0xd3, 0xd3, 0xd0, 0xd0, 0xd1, 0xd1,
1402 /* f8 */ 0xd6, 0xd6, 0xd7, 0xd7, 0xd4, 0xd4, 0xd5, 0xd5
1403 };
1404
1405 /*---------------------------------------------------------------------------*
1406 * reverse bits in a byte
1407 *---------------------------------------------------------------------------*/
1408 static unsigned char bitreverse[256] = {
1409 /* 00 */ 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
1410 /* 08 */ 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
1411 /* 10 */ 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
1412 /* 18 */ 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
1413 /* 20 */ 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
1414 /* 28 */ 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
1415 /* 30 */ 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
1416 /* 38 */ 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
1417 /* 40 */ 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
1418 /* 48 */ 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
1419 /* 50 */ 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
1420 /* 58 */ 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
1421 /* 60 */ 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
1422 /* 68 */ 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
1423 /* 70 */ 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
1424 /* 78 */ 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
1425 /* 80 */ 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
1426 /* 88 */ 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
1427 /* 90 */ 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
1428 /* 98 */ 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
1429 /* a0 */ 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
1430 /* a8 */ 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
1431 /* b0 */ 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
1432 /* b8 */ 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
1433 /* c0 */ 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
1434 /* c8 */ 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
1435 /* d0 */ 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
1436 /* d8 */ 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
1437 /* e0 */ 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
1438 /* e8 */ 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
1439 /* f0 */ 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
1440 /* f8 */ 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
1441 };
1442
1443 static u_char sinetab[8000] = { 213, 213, 213, 213, 213, 213, 213, 212,
1444 212, 212, 212, 212, 212, 215, 215, 215, 215, 215, 215, 214, 214,
1445 214, 214, 214, 214, 209, 209, 209, 209, 209, 209, 209, 208, 208,
1446 208, 208, 208, 208, 211, 211, 211, 211, 211, 211, 210, 210, 210,
1447 210, 210, 210, 221, 221, 221, 221, 221, 221, 220, 220, 220, 220,
1448 220, 220, 220, 223, 223, 223, 223, 223, 223, 222, 222, 222, 222,
1449 222, 222, 217, 217, 217, 217, 217, 217, 216, 216, 216, 216, 216,
1450 216, 216, 219, 219, 219, 219, 219, 219, 218, 218, 218, 218, 218,
1451 218, 197, 197, 197, 197, 197, 197, 196, 196, 196, 196, 196, 196,
1452 196, 199, 199, 199, 199, 199, 199, 198, 198, 198, 198, 198, 198,
1453 193, 193, 193, 193, 193, 193, 192, 192, 192, 192, 192, 192, 192,
1454 195, 195, 195, 195, 195, 195, 194, 194, 194, 194, 194, 194, 205,
1455 205, 205, 205, 205, 205, 204, 204, 204, 204, 204, 204, 204, 207,
1456 207, 207, 207, 207, 207, 206, 206, 206, 206, 206, 206, 201, 201,
1457 201, 201, 201, 201, 200, 200, 200, 200, 200, 200, 200, 203, 203,
1458 203, 203, 203, 203, 202, 202, 202, 202, 202, 202, 245, 245, 245,
1459 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 244, 244, 244,
1460 244, 244, 244, 244, 244, 244, 244, 244, 244, 247, 247, 247, 247,
1461 247, 247, 247, 247, 247, 247, 247, 247, 247, 246, 246, 246, 246,
1462 246, 246, 246, 246, 246, 246, 246, 246, 246, 241, 241, 241, 241,
1463 241, 241, 241, 241, 241, 241, 241, 241, 240, 240, 240, 240, 240,
1464 240, 240, 240, 240, 240, 240, 240, 240, 243, 243, 243, 243, 243,
1465 243, 243, 243, 243, 243, 243, 243, 243, 242, 242, 242, 242, 242,
1466 242, 242, 242, 242, 242, 242, 242, 242, 253, 253, 253, 253, 253,
1467 253, 253, 253, 253, 253, 253, 253, 253, 252, 252, 252, 252, 252,
1468 252, 252, 252, 252, 252, 252, 252, 255, 255, 255, 255, 255, 255,
1469 255, 255, 255, 255, 255, 255, 255, 254, 254, 254, 254, 254, 254,
1470 254, 254, 254, 254, 254, 254, 254, 249, 249, 249, 249, 249, 249,
1471 249, 249, 249, 249, 249, 249, 249, 248, 248, 248, 248, 248, 248,
1472 248, 248, 248, 248, 248, 248, 248, 251, 251, 251, 251, 251, 251,
1473 251, 251, 251, 251, 251, 251, 251, 250, 250, 250, 250, 250, 250,
1474 250, 250, 250, 250, 250, 250, 250, 229, 229, 229, 229, 229, 229,
1475 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
1476 229, 229, 229, 229, 229, 229, 229, 228, 228, 228, 228, 228, 228,
1477 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
1478 228, 228, 228, 228, 228, 228, 228, 228, 231, 231, 231, 231, 231,
1479 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
1480 231, 231, 231, 231, 231, 231, 231, 231, 231, 230, 230, 230, 230,
1481 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
1482 230, 230, 230, 230, 230, 230, 230, 230, 230, 225, 225, 225, 225,
1483 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
1484 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 224, 224,
1485 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
1486 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 227,
1487 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
1488 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
1489 227, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1490 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1491 226, 226, 226, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1492 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1493 237, 237, 237, 237, 237, 236, 236, 236, 236, 236, 236, 236, 236,
1494 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1495 236, 236, 236, 236, 236, 236, 236, 236, 239, 239, 239, 239, 239,
1496 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
1497 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 238, 238,
1498 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
1499 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
1500 238, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1501 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1502 233, 233, 233, 233, 233, 232, 232, 232, 232, 232, 232, 232, 232,
1503 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
1504 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 235, 235, 235,
1505 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
1506 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
1507 235, 235, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1508 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1509 234, 234, 234, 234, 234, 234, 234, 149, 149, 149, 149, 149, 149,
1510 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1511 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1512 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1513 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1514 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148,
1515 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1516 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1517 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1518 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1519 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 151, 151, 151,
1520 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1521 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1522 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1523 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1524 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1525 151, 151, 151, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1526 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1527 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1528 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1529 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1530 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1531 150, 150, 150, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1532 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1533 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1534 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1535 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1536 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1537 145, 145, 145, 145, 145, 145, 145, 145, 144, 144, 144, 144, 144,
1538 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1539 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1540 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1541 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1542 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1543 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1544 144, 144, 144, 144, 144, 144, 144, 144, 144, 147, 147, 147, 147,
1545 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1546 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1547 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1548 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1549 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1550 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1551 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1552 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146,
1553 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1554 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1555 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1556 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1557 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1558 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1559 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1560 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1561 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1562 146, 146, 146, 146, 146, 146, 157, 157, 157, 157, 157, 157, 157,
1563 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1564 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1565 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1566 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1567 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1568 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1569 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1570 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1571 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1572 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1573 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1574 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1575 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1576 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1577 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1578 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1579 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1580 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1581 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1582 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1583 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1584 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1585 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1586 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1587 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1588 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1589 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1590 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1591 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1592 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1593 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1594 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1595 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1596 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1597 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1598 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1599 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1600 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1601 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1602 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1603 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1604 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1605 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1606 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1607 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1608 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1609 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1610 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1611 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1612 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1613 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1614 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1615 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1616 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1617 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1618 156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157,
1619 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1620 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1621 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1622 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1623 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1624 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1625 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1626 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1627 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1628 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1629 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1630 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1631 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1632 157, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1633 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1634 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1635 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1636 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1637 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1638 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1639 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1640 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1641 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147,
1642 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1643 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1644 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1645 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1646 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1647 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1648 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1649 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 144, 144,
1650 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1651 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1652 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1653 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1654 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1655 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1656 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145,
1657 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1658 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1659 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1660 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1661 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1662 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1663 145, 145, 145, 145, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1664 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1665 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1666 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1667 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1668 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1669 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1670 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1671 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1672 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1673 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1674 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 148, 148, 148,
1675 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1676 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1677 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1678 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1679 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1680 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1681 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1682 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1683 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1684 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1685 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1686 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1687 234, 234, 234, 234, 234, 235, 235, 235, 235, 235, 235, 235, 235,
1688 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
1689 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 232, 232, 232,
1690 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
1691 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
1692 232, 232, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1693 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1694 233, 233, 233, 233, 233, 233, 238, 238, 238, 238, 238, 238, 238,
1695 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
1696 238, 238, 238, 238, 238, 238, 238, 238, 238, 239, 239, 239, 239,
1697 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
1698 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 236,
1699 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1700 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1701 236, 236, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1702 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1703 237, 237, 237, 237, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1704 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1705 226, 226, 226, 226, 226, 226, 227, 227, 227, 227, 227, 227, 227,
1706 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
1707 227, 227, 227, 227, 227, 227, 227, 227, 224, 224, 224, 224, 224,
1708 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
1709 224, 224, 224, 224, 224, 224, 224, 224, 224, 225, 225, 225, 225,
1710 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
1711 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 230, 230,
1712 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
1713 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 231, 231,
1714 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
1715 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 228,
1716 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
1717 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
1718 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
1719 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
1720 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250,
1721 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
1722 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
1723 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
1724 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
1725 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
1726 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 253,
1727 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 242,
1728 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 243,
1729 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 240,
1730 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 241,
1731 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 246, 246,
1732 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 247, 247,
1733 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 244, 244,
1734 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 245, 245, 245,
1735 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 202, 202, 202,
1736 202, 202, 202, 203, 203, 203, 203, 203, 203, 200, 200, 200, 200,
1737 200, 200, 200, 201, 201, 201, 201, 201, 201, 206, 206, 206, 206,
1738 206, 206, 207, 207, 207, 207, 207, 207, 204, 204, 204, 204, 204,
1739 204, 204, 205, 205, 205, 205, 205, 205, 194, 194, 194, 194, 194,
1740 194, 195, 195, 195, 195, 195, 195, 192, 192, 192, 192, 192, 192,
1741 192, 193, 193, 193, 193, 193, 193, 198, 198, 198, 198, 198, 198,
1742 199, 199, 199, 199, 199, 199, 196, 196, 196, 196, 196, 196, 196,
1743 197, 197, 197, 197, 197, 197, 218, 218, 218, 218, 218, 218, 219,
1744 219, 219, 219, 219, 219, 216, 216, 216, 216, 216, 216, 216, 217,
1745 217, 217, 217, 217, 217, 222, 222, 222, 222, 222, 222, 223, 223,
1746 223, 223, 223, 223, 220, 220, 220, 220, 220, 220, 220, 221, 221,
1747 221, 221, 221, 221, 210, 210, 210, 210, 210, 210, 211, 211, 211,
1748 211, 211, 211, 208, 208, 208, 208, 208, 208, 209, 209, 209, 209,
1749 209, 209, 209, 214, 214, 214, 214, 214, 214, 215, 215, 215, 215,
1750 215, 215, 212, 212, 212, 212, 212, 212, 213, 213, 213, 213, 213,
1751 213, 213, 90, 90, 90, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 84,
1752 84, 87, 87, 87, 87, 87, 87, 86, 86, 86, 86, 86, 86, 81, 81, 81,
1753 81, 81, 81, 81, 80, 80, 80, 80, 80, 80, 83, 83, 83, 83, 83, 83,
1754 82, 82, 82, 82, 82, 82, 93, 93, 93, 93, 93, 93, 93, 92, 92, 92,
1755 92, 92, 92, 95, 95, 95, 95, 95, 95, 94, 94, 94, 94, 94, 94, 89,
1756 89, 89, 89, 89, 89, 88, 88, 88, 88, 88, 88, 88, 91, 91, 91, 91,
1757 91, 91, 90, 90, 90, 90, 90, 90, 69, 69, 69, 69, 69, 69, 68, 68,
1758 68, 68, 68, 68, 68, 71, 71, 71, 71, 71, 71, 70, 70, 70, 70, 70,
1759 70, 65, 65, 65, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 67, 67,
1760 67, 67, 67, 67, 66, 66, 66, 66, 66, 66, 77, 77, 77, 77, 77, 77,
1761 76, 76, 76, 76, 76, 76, 76, 79, 79, 79, 79, 79, 79, 78, 78, 78,
1762 78, 78, 78, 73, 73, 73, 73, 73, 73, 73, 72, 72, 72, 72, 72, 72,
1763 75, 75, 75, 75, 75, 75, 74, 74, 74, 74, 74, 74, 117, 117, 117, 117,
1764 117, 117, 117, 117, 117, 117, 117, 117, 117, 116, 116, 116, 116,
1765 116, 116, 116, 116, 116, 116, 116, 116, 116, 119, 119, 119, 119,
1766 119, 119, 119, 119, 119, 119, 119, 119, 118, 118, 118, 118, 118,
1767 118, 118, 118, 118, 118, 118, 118, 118, 113, 113, 113, 113, 113,
1768 113, 113, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112,
1769 112, 112, 112, 112, 112, 112, 112, 115, 115, 115, 115, 115, 115,
1770 115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 114, 114, 114,
1771 114, 114, 114, 114, 114, 114, 114, 125, 125, 125, 125, 125, 125,
1772 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124,
1773 124, 124, 124, 124, 124, 124, 124, 127, 127, 127, 127, 127, 127,
1774 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126,
1775 126, 126, 126, 126, 126, 126, 121, 121, 121, 121, 121, 121, 121,
1776 121, 121, 121, 121, 121, 121, 120, 120, 120, 120, 120, 120, 120,
1777 120, 120, 120, 120, 120, 120, 123, 123, 123, 123, 123, 123, 123,
1778 123, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122,
1779 122, 122, 122, 122, 122, 122, 101, 101, 101, 101, 101, 101, 101,
1780 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
1781 101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 100, 100, 100,
1782 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
1783 100, 100, 100, 100, 100, 100, 100, 103, 103, 103, 103, 103, 103,
1784 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1785 103, 103, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102,
1786 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
1787 102, 102, 102, 102, 102, 102, 102, 102, 102, 97, 97, 97, 97, 97,
1788 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
1789 97, 97, 97, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
1790 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
1791 96, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
1792 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98,
1793 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
1794 98, 98, 98, 98, 98, 98, 98, 98, 98, 109, 109, 109, 109, 109, 109,
1795 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
1796 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, 108,
1797 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
1798 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111,
1799 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1800 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1801 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
1802 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
1803 110, 110, 110, 110, 110, 110, 105, 105, 105, 105, 105, 105, 105,
1804 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
1805 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 104, 104, 104,
1806 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1807 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1808 104, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
1809 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
1810 107, 107, 107, 107, 107, 107, 106, 106, 106, 106, 106, 106, 106,
1811 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
1812 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 21,
1813 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
1814 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
1815 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
1816 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
1817 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
1818 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
1819 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
1820 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
1821 20, 20, 20, 20, 20, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
1822 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
1823 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
1824 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
1825 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 22, 22, 22,
1826 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
1827 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
1828 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
1829 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
1830 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 17, 17, 17, 17, 17, 17,
1831 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
1832 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
1833 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
1834 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
1835 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16,
1836 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1837 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1838 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1839 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1840 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1841 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 19, 19, 19, 19, 19, 19,
1842 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1843 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1844 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1845 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1846 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1847 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1848 19, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1849 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1850 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1851 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1852 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1853 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1854 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1855 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1856 18, 18, 18, 18, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1857 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1858 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1859 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1860 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1861 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1862 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1863 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1864 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1865 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1866 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1867 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 28, 28, 28, 28, 28, 28,
1868 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1869 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1870 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1871 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1872 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1873 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1874 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1875 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1876 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1877 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1878 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1879 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1880 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1881 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1882 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1883 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1884 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1885 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1886 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1887 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1888 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1889 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1890 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1891 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1892 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1893 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1894 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1895 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1896 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1897 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1898 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1899 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1900 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1901 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1902 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1903 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1904 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1905 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1906 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1907 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1908 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1909 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1910 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1911 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 18, 18, 18, 18, 18,
1912 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1913 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1914 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1915 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1916 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1917 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1918 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1919 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19,
1920 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1921 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1922 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1923 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1924 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1925 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1926 19, 19, 19, 19, 19, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1927 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1928 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1929 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1930 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1931 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1932 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
1933 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
1934 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
1935 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
1936 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
1937 17, 17, 17, 17, 17, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
1938 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
1939 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
1940 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
1941 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
1942 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
1943 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
1944 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
1945 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
1946 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 20, 20, 20, 20, 20, 20,
1947 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
1948 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
1949 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
1950 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,
1951 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
1952 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
1953 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
1954 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
1955 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
1956 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
1957 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107,
1958 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
1959 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 104, 104,
1960 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1961 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1962 104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
1963 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
1964 105, 105, 105, 105, 105, 105, 110, 110, 110, 110, 110, 110, 110,
1965 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
1966 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111,
1967 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1968 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1969 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
1970 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
1971 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
1972 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
1973 109, 109, 109, 109, 109, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
1974 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
1975 98, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
1976 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 96, 96,
1977 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
1978 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97,
1979 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
1980 97, 97, 97, 97, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
1981 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
1982 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1983 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1984 103, 103, 103, 103, 103, 100, 100, 100, 100, 100, 100, 100, 100,
1985 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
1986 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101,
1987 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
1988 101, 101, 101, 101, 101, 101, 122, 122, 122, 122, 122, 122, 122,
1989 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123,
1990 123, 123, 123, 123, 123, 123, 120, 120, 120, 120, 120, 120, 120,
1991 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121,
1992 121, 121, 121, 121, 121, 121, 126, 126, 126, 126, 126, 126, 126,
1993 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127,
1994 127, 127, 127, 127, 127, 124, 124, 124, 124, 124, 124, 124, 124,
1995 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125,
1996 125, 125, 125, 125, 125, 114, 114, 114, 114, 114, 114, 114, 114,
1997 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115,
1998 115, 115, 115, 115, 115, 112, 112, 112, 112, 112, 112, 112, 112,
1999 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, 113,
2000 113, 113, 113, 113, 118, 118, 118, 118, 118, 118, 118, 118, 118,
2001 118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119, 119,
2002 119, 119, 119, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
2003 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
2004 117, 117, 117, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 72,
2005 72, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 73, 78, 78, 78, 78,
2006 78, 78, 79, 79, 79, 79, 79, 79, 76, 76, 76, 76, 76, 76, 76, 77,
2007 77, 77, 77, 77, 77, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67,
2008 67, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 70, 70,
2009 70, 70, 70, 70, 71, 71, 71, 71, 71, 71, 68, 68, 68, 68, 68, 68,
2010 68, 69, 69, 69, 69, 69, 69, 90, 90, 90, 90, 90, 90, 91, 91, 91,
2011 91, 91, 91, 88, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89,
2012 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 92, 92, 92, 92,
2013 92, 92, 93, 93, 93, 93, 93, 93, 93, 82, 82, 82, 82, 82, 82, 83,
2014 83, 83, 83, 83, 83, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81,
2015 81, 81, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 87, 84, 84,
2016 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 90, 90, 90 };
2017
2018 /*===========================================================================*/
2019
2020 #endif /* NISDNTEL > 0 */
Cache object: 9e5017585e2301e133ee1f265d9f0384
|