Index: head/sys/dev/cx/machdep.h =================================================================== --- head/sys/dev/cx/machdep.h (revision 359180) +++ head/sys/dev/cx/machdep.h (nonexistent) @@ -1,97 +0,0 @@ -/*- - * Cronyx DDK: platform dependent definitions. - * - * Copyright (C) 1998-1999 Cronyx Engineering - * Author: Alexander Kvitchenko, - * - * Copyright (C) 2001-2003 Cronyx Engineering. - * Author: Roman Kurakin, - * - * This software is distributed with NO WARRANTIES, not even the implied - * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * Authors grant any other persons or organisations permission to use - * or modify this software as long as this message is kept with the software, - * all derivative works or modified versions. - * - * Cronyx Id: machdep.h,v 1.3.4.3 2003/11/27 14:21:58 rik Exp $ - * $FreeBSD$ - */ - -/* - * DOS (Borland Turbo C++ 1.0) - */ -#if defined (MSDOS) || defined (__MSDOS__) -# include -# include -# define inb(port) inportb(port) -# define inw(port) inport(port) -# define outb(port,b) outportb(port,b) -# define outw(port,w) outport(port,w) -# define GETTICKS() biostime(0,0L) -#else - -/* - * Windows NT - */ -#ifdef NDIS_MINIPORT_DRIVER -# include -# define inb(port) inp((unsigned short)(port)) -# define inw(port) inpw((unsigned short)(port)) -# define outb(port,b) outp((unsigned short)(port),b) -# define outw(port,w) outpw((unsigned short)(port),(unsigned short)(w)) -#pragma warning (disable: 4761) -#pragma warning (disable: 4242) -#pragma warning (disable: 4244) -#define ulong64 unsigned __int64 -#else - -/* - * Linux - */ -#ifdef __linux__ -# undef REALLY_SLOW_IO -# include /* should swap outb() arguments */ -# include -# include - static inline void __ddk_outb (unsigned port, unsigned char byte) - { outb (byte, port); } - static inline void __ddk_outw (unsigned port, unsigned short word) - { outw (word, port); } -# undef outb -# undef outw -# define outb(port,val) __ddk_outb(port, val) -# define outw(port,val) __ddk_outw(port, val) -# define GETTICKS() (jiffies * 200 / 11 / HZ) -#else - -/* - * FreeBSD and BSD/OS - */ -#ifdef __FreeBSD__ -# include -# include -# include -# include -# define port_t int - -#ifndef _SYS_CDEFS_H_ -#error this file needs sys/cdefs.h as a prerequisite -#endif -#endif - -#endif -#endif -#endif - -#ifndef inline -# ifdef __CC_SUPPORTS___INLINE__ -# define inline __inline__ -# else -# define inline /**/ -# endif -#endif - -#ifndef ulong64 -#define ulong64 unsigned long long -#endif Property changes on: head/sys/dev/cx/machdep.h ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/dev/ce/ceddk.c =================================================================== --- head/sys/dev/ce/ceddk.c (revision 359180) +++ head/sys/dev/ce/ceddk.c (revision 359181) @@ -1,1522 +1,1522 @@ /* * Middle-level code for Cronyx Tau32-PCI adapters. * * Copyright (C) 2004 Cronyx Engineering * Copyright (C) 2004 Roman Kurakin * * This software is distributed with NO WARRANTIES, not even the implied * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * Authors grant any other persons or organisations a permission to use, * modify and redistribute this software in source and binary forms, * as long as this message is kept with the software, all derivative * works or modified versions. * * $Cronyx: ceddk.c,v 1.2.6.2 2005/11/17 16:04:13 rik Exp $ */ #include __FBSDID("$FreeBSD$"); -#include +#include #include #undef CE_DDK_DEBUG_ENABLED #ifdef CE_DDK_DEBUG_ENABLED #ifdef __FreeBSD__ # define CE_DDK_DEBUG(b,c,s) \ do { \ if (c) { \ printf("ce%d-%d: ",(b)->num,(c)->num); \ } else { \ printf("ce%d-*: ",(b)->num); \ } \ printf s; \ } while (0) #else # define CE_DDK_DEBUG(b,c,s) do {} while (0) #endif #else # define CE_DDK_DEBUG(b,c,s) do {} while (0) #endif #if 0 #define ENTER() \ static int enter=0; \ do { \ enter++; \ printf ("%s: >> enter (%16llx) %d\n", __FUNCTION__, rdtsc (), enter); \ } while (0) #define EXIT(val...) \ do { \ enter--; \ printf ("%s: << exit (%16llx) %d line %d\n", __FUNCTION__, rdtsc (), enter, __LINE__); \ return val; \ } while (0) #else #define ENTER() \ do {} while (0) #define EXIT(val...) \ do {return val;} while (0) #endif #define CE_ENQUEUE(list,item) \ do { \ TAU32_UserRequest **last; \ last = &(list); \ while (*last) { \ last = &(*last)->next; \ } \ (*last) = (item); \ (item)->next = NULL; \ } while (0) #define CE_ENQUEUE_HEAD(list,item) \ do { \ (item)->next = list; \ list = item; \ } while (0) #define CE_DEQUEUE(list,item) \ do { \ item = list; \ if (list) { \ list = (item)->next; \ } \ } while (0) #define CE_PREREQUEST(b,c,list,item) \ do { \ item = list; \ if (!item) { \ CE_DDK_DEBUG (b, c, ("Fatal error, no free structs " \ "for UserRequest (%s:%d)\n", \ __FUNCTION__, __LINE__)); \ } \ } while (0) #define CE_DUMP_QUEUE(list) \ do { \ TAU32_UserRequest *item; \ int i = 0; \ item = list; \ while (item) { \ printf ("item%d: %p\n", i, item); \ item = item->next; \ i++; \ } \ } while (0) #define CE_FIND_ITEM(list,item,flag) \ do { \ TAU32_UserRequest *citem; \ flag = 0; \ for (citem = list; citem; citem = citem->next) { \ if (citem == item) { \ flag = 1; \ break; \ } \ } \ } while (0) #define CE_LAST_ITEM(list,item) \ do { \ TAU32_UserRequest **last; \ last = &(list); \ while ((*last) && (*last)->next) { \ last = &(*last)->next; \ } \ (item) = (*last); \ } while (0) #define CE_ASSERT(a) \ do { \ if (!(a)) { \ printf ("ASSERT: %d %s\n", __LINE__, #a); \ __asm __volatile ("int $3"); \ } \ } while (0) static void _ce_set_ts (ce_chan_t *c, unsigned long ts); static void _ce_submit_configure_e1 (ce_chan_t *c, char *rname); #ifdef CE_DDK_DEBUG_ENABLED static char *ce_err2str (unsigned long err) { switch (err) { case TAU32_SUCCESSFUL: return "Successful"; case TAU32_ERROR_ALLOCATION: return "Allocation error, not enough tx/rx descriptors"; case TAU32_ERROR_BUS: return "PEB could not access to host memory by PCI bus for load/store information"; case TAU32_ERROR_FAIL: return "PEB action request failed"; case TAU32_ERROR_TIMEOUT: return "PEB action request timeout"; case TAU32_ERROR_CANCELLED: return "request has been canceled"; case TAU32_ERROR_TX_UNDERFLOW: return "transmission underflow"; case TAU32_ERROR_TX_PROTOCOL: return "TX_PROTOCOL"; case TAU32_ERROR_RX_OVERFLOW: return "RX_OVERFLOW"; case TAU32_ERROR_RX_ABORT: return "RX_ABORT"; case TAU32_ERROR_RX_CRC: return "RX_CRC"; case TAU32_ERROR_RX_SHORT: return "RX_SHORT"; case TAU32_ERROR_RX_SYNC: return "RX_SYNC"; case TAU32_ERROR_RX_FRAME: return "RX_FRAME"; case TAU32_ERROR_RX_LONG: return "RX_LONG"; case TAU32_ERROR_RX_SPLIT: return "frame has splitted between two requests due rx-gap allocation"; case TAU32_ERROR_RX_UNFIT: return "frame can't be fit into request buffer"; case TAU32_ERROR_TSP: return "ERROR_TSP"; case TAU32_ERROR_RSP: return "ERROR_RSP"; case TAU32_ERROR_INT_OVER_TX: return "ERROR INT OVER TX"; case TAU32_ERROR_INT_OVER_RX: return "ERROR INT OVER RX"; case TAU32_ERROR_INT_STORM: return "irq storm"; case TAU32_ERROR_INT_E1LOST: return "ERROR_E1LOST"; default: return ("Unknown error"); } } #endif void ce_set_dtr (ce_chan_t *c, int on) { c->dtr = on?1:0; } void ce_set_rts (ce_chan_t *c, int on) { c->rts = on?1:0; } static void TAU32_CALLBACK_TYPE ce_on_receive (TAU32_UserContext *pContext, TAU32_UserRequest *req) { ce_buf_item_t *item = (ce_buf_item_t *)req; ce_chan_t *c; ce_board_t *b; unsigned int error; int len; ENTER (); if (!req || !req->sys) { EXIT (); } c = (ce_chan_t *)req->sys; b = c->board; len = req->Io.Rx.Received; error = req->ErrorCode; c->rintr++; if (error == TAU32_SUCCESSFUL) { if (req->Io.Rx.FrameEnd) { c->ipkts++; } else { CE_DDK_DEBUG (b, c, ("No FrameEnd\n")); /* probably do something in some cases*/ } c->ibytes += len; if (c->receive) c->receive (c, item->buf, len); } else if (error & TAU32_ERROR_BUS) { c->overrun++; if (c->error) c->error (c, CE_OVERRUN); } else { CE_DDK_DEBUG (b, c, ("Another receive error: %x\n", error)); /* Do some procesing */ } CE_ASSERT (!req->pInternal); CE_ENQUEUE (c->rx_queue, req); while (c->rx_queue) { CE_DEQUEUE (c->rx_queue, req); CE_ASSERT (req); item = (ce_buf_item_t *)req; req->Command = TAU32_Rx_Data; req->Io.Rx.Channel = c->num; req->pCallback = ce_on_receive; req->Io.Rx.BufferLength = BUFSZ+4; req->Io.Rx.PhysicalDataAddress = item->phys; if (!TAU32_SubmitRequest (b->ddk.pControllerObject, req)) { CE_DDK_DEBUG (b, c, ("RX submition failure\n")); c->rx_pending--; CE_ENQUEUE_HEAD (c->rx_queue, req); break; } } EXIT (); } static void TAU32_CALLBACK_TYPE ce_on_transmit (TAU32_UserContext *pContext, TAU32_UserRequest *req) { int len; unsigned int error; ce_chan_t *c; ENTER (); if (!req || !req->sys) { EXIT (); } c = (ce_chan_t *)req->sys; len = req->Io.Tx.Transmitted; error = req->ErrorCode; c->tintr++; if (error == TAU32_SUCCESSFUL) { c->obytes += len; c->opkts++; } else if (error & TAU32_ERROR_BUS) { c->underrun++; if (c->error) c->error (c, CE_UNDERRUN); } else { CE_DDK_DEBUG (c->board, c, ("Another transmit error: %x\n", error)); /* Do some procesing */ } CE_ENQUEUE (c->tx_queue, req); c->tx_pending--; if (c->transmit) c->transmit (c, 0, len); EXIT (); } int ce_transmit_space (ce_chan_t *c) { return c->tx_pending < (TAU32_IO_QUEUE); } int ce_send_packet (ce_chan_t *c, unsigned char *buf, int len, void *tag) { TAU32_UserRequest *req; ce_buf_item_t *item; ENTER (); if (!ce_transmit_space (c)) { EXIT (-1); } if (len <= 0 || len > BUFSZ) { EXIT (-2); } CE_DEQUEUE (c->tx_queue, req); CE_ASSERT (req); item = (ce_buf_item_t *)req; if (buf != item->buf) memcpy (item->buf, buf, len); CE_ASSERT (!req->pInternal); req->Command = TAU32_Tx_Data | TAU32_Tx_FrameEnd; req->Io.Tx.Channel = c->num; req->pCallback = ce_on_transmit; req->Io.Tx.DataLength = len; req->Io.Tx.PhysicalDataAddress = item->phys; c->tx_pending++; if (!TAU32_SubmitRequest (c->board->ddk.pControllerObject, req)) { CE_DDK_DEBUG (c->board, c, ("Can't submit packet for " "transmission\n")); CE_ENQUEUE_HEAD (c->tx_queue, req); c->tx_pending--; EXIT (-3); } EXIT (0); } static void TAU32_CALLBACK_TYPE ce_on_config (TAU32_UserContext *pContext, TAU32_UserRequest *req) { ce_board_t *b = (ce_board_t *) pContext; ENTER (); b->cr.pending--; if (req->ErrorCode) CE_DDK_DEBUG (b, (ce_chan_t*)0, ("Config request failure: %lx\n", req->ErrorCode)); EXIT (); } static void TAU32_CALLBACK_TYPE ce_on_config_stop (TAU32_UserContext *pContext, TAU32_UserRequest *req) { int i, first; TAU32_UserRequest *rreq; ce_board_t *b = (ce_board_t *) pContext; ce_chan_t *c = b->chan + req->Io.ChannelNumber; ENTER (); /* Stop all requests */ CE_ASSERT (0);/* Buggy */ CE_LAST_ITEM (c->rx_queue, rreq); /* A little hacky, try to guess which is a first */ first = rreq ? (c->rx_item - (ce_buf_item_t *)rreq) + 1 : 0; for (i = 0; i < TAU32_IO_QUEUE; i++) { int is_pending; rreq = &c->rx_item[(i + first) % TAU32_IO_QUEUE].req; CE_FIND_ITEM (c->rx_queue, rreq, is_pending); if (!is_pending) continue; TAU32_CancelRequest (b->ddk.pControllerObject, rreq, 1); rreq->Command = TAU32_Rx_Data; rreq->Io.Rx.Channel = c->num; rreq->Io.Rx.BufferLength = BUFSZ+4; rreq->Io.Rx.PhysicalDataAddress = ((ce_buf_item_t *)rreq)->phys; c->rx_pending++; if (!TAU32_SubmitRequest (b->ddk.pControllerObject, rreq)) { CE_ASSERT (0);/* Buggy */ c->rx_pending--; break; } } c->tx_pending = 0; /* c->rx_pending = 0;*/ EXIT (); } static int ce_cfg_submit (ce_board_t *b) { TAU32_UserRequest *req; ENTER (); CE_DEQUEUE (b->cr.queue, req); CE_ASSERT (req); CE_ASSERT (!req->pInternal); req->pCallback = ce_on_config; b->cr.pending++; CE_DDK_DEBUG (b, (ce_chan_t *)0, ("config request pending: %d\n", b->cr.pending)); if (!TAU32_SubmitRequest (b->ddk.pControllerObject, req)) { CE_ENQUEUE_HEAD (b->cr.queue, req); CE_DDK_DEBUG (b, (ce_chan_t *)0, ("Fail to submit config request\n")); b->cr.pending--; EXIT (0); } EXIT (1); } void ce_init_board (ce_board_t *b) { int i; b->cr.queue = NULL; for (i = 0; i < CONFREQSZ; i++) { CE_ENQUEUE (b->cr.queue, b->cr.req + i); } b->chan[0].config = TAU32_ais_on_loss; /* lloop = off, rloop = off */ b->chan[0].config |= TAU32_LineNormal; b->chan[0].lloop = 0; b->chan[0].rloop = 0; /* unfram=off, scrambler=off, use16=off, crc4=off, higain=off, monitor=off*/ b->chan[0].config |= (b->ddk.Interfaces == 2 ? TAU32_framed_cas_cross : TAU32_framed_cas_set); b->chan[0].unfram = 0; b->chan[0].scrambler = 0; b->chan[0].use16 = 0; b->chan[0].crc4 = 0; b->chan[0].higain = 0; b->chan[0].monitor = 0; if (b->ddk.Interfaces == 2) { b->chan[1].config = TAU32_ais_on_loss; /* lloop = off, rloop = off */ b->chan[1].config |= TAU32_LineNormal; /* unfram=off, scrambler=off, use16=off, crc4=off, higain=off, monitor=off*/ b->chan[1].config |= TAU32_framed_cas_cross; b->chan[1].unfram = 0; b->chan[1].scrambler = 0; b->chan[1].use16 = 0; b->chan[1].crc4 = 0; b->chan[1].higain = 0; b->chan[1].monitor = 0; } for (i = 0; i < NCHAN; i++) { /* Chan0 ts=1-15,17-31, Chan1 ts=1-2 */ b->chan[i].type = i < b->ddk.Interfaces ? T_E1 : T_DATA; b->chan[i].ts = (i == 0 ? 0xfffefffe : (i != 1 ? 0 : (b->ddk.Interfaces == 2 ? 0x6: 0))); b->chan[i].dir = (b->ddk.Interfaces == 2) ? (i%2) : 0; b->chan[i].mtu = 1504; } #if 0 /* c->num == 0 */ req = b->cr.queue; /* We must have some here */ CE_ASSERT (req); req->Command = TAU32_Configure_E1; req->Io.InterfaceConfig.Interface = TAU32_E1_A; req->Io.InterfaceConfig.Config = b->chan[0].config; req->Io.InterfaceConfig.UnframedTsMask = 0; if (!ce_cfg_submit (b)) { CE_DDK_DEBUG (b, b->chan + 0, ("Submit request failure, line %d\n", __LINE__)); } /* c->num == 1 */ if (b->ddk.Interfaces == 2) { req = b->cr.queue; /* We must have some here */ CE_ASSERT (req); req->Command = TAU32_Configure_E1; req->Io.InterfaceConfig.Interface = TAU32_E1_B; req->Io.InterfaceConfig.Config = b->chan[1].config; req->Io.InterfaceConfig.UnframedTsMask = 0; if (!ce_cfg_submit (b)) { CE_DDK_DEBUG (b, b->chan + 1, ("Submit request failure, line %d\n", __LINE__)); } } #endif /* Set default cross matrix */ for (i = 0; i < 32; i++) { /* -X-> Peb */ b->dxc[i] = TAU32_CROSS_OFF; /* Link2 -> Link1 */ b->dxc[i + 32] = i + 64; /* Link1 -> Link2 */ b->dxc[i + 64] = i + 32; } /* We have only mux mode for now. Later we will also have cross mode */ b->mux = 1; } void ce_start_chan (ce_chan_t *c, int tx, int rx, ce_buf_t *cb, unsigned long phys) { int i; ce_board_t *b = c->board; /* c->config = TAU32_ais_on_loss | TAU32_framed_cas_cross;*/ if (cb) { CE_DDK_DEBUG (b, c, ("ce_buf_t virt:%p phys:%p\n", cb, (void *)phys)); c->tx_item = cb->tx_item; c->rx_item = cb->rx_item; c->tx_queue = NULL; c->rx_queue = NULL; for (i = 0; i < TAU32_IO_QUEUE; i++) { c->tx_item[i].phys = phys + ((char *)(c->tx_item[i].buf)-(char *)cb); c->rx_item[i].phys = phys + ((char *)(c->rx_item[i].buf)-(char *)cb); cb->tx_item[i].req.sys = c; cb->rx_item[i].req.sys = c; CE_DDK_DEBUG (b, c, ("tx_item[%d].buf virt:%p phys:%p\n", i, c->tx_item[i].buf, (void *)c->tx_item[i].phys)); CE_DDK_DEBUG (b, c, ("rx_item[%d].buf virt:%p phys:%p\n", i, c->rx_item[i].buf, (void *)c->rx_item[i].phys)); CE_ENQUEUE (c->rx_queue, &c->rx_item[i].req); CE_ENQUEUE (c->tx_queue, &c->tx_item[i].req); } c->tx_pending = 0; c->rx_pending = 0; } /* submit rx */ while (1) { ce_buf_item_t *item; TAU32_UserRequest *req; CE_DEQUEUE (c->rx_queue, req); if (!req) break; item = (ce_buf_item_t *) req; CE_ASSERT (c->rx_pending < TAU32_IO_QUEUE); req->Command = TAU32_Rx_Data; req->Io.Rx.Channel = c->num; req->pCallback = ce_on_receive; req->Io.Rx.BufferLength = c->mtu + (c->phony ? 0 : 4); req->Io.Rx.PhysicalDataAddress = item->phys; c->rx_pending++; if (!TAU32_SubmitRequest (b->ddk.pControllerObject, req)) { CE_DDK_DEBUG (b, c, ("Faild to submit rx request\n")); /*XXXRIK: shouldn't happen, but ... */ CE_ASSERT (0); c->rx_pending--; break; } } if (tx | rx) { TAU32_UserRequest *req; CE_PREREQUEST (b, c, b->cr.queue, req); if (!req) return; req->Command = TAU32_Configure_Commit | (tx ? TAU32_Tx_Start : 0) | (rx ? TAU32_Rx_Start : 0); req->Io.ChannelNumber = c->num; if (!ce_cfg_submit (b)) { CE_DDK_DEBUG (b, c, ("Can't start chan\n")); /* Do some error processing */ return; } } /* If we run just after ce_board_init we have prope values. * Else I hope you didn't set ts to incorrect value. */ _ce_set_ts (c, c->ts); if (c->num < b->ddk.Interfaces) { /* The same for other modes. We don't check them. * We hope that config is correctly set. Just as we have * after ce_board_init. If channel was stoped we hope that * it's config was not broken just after it and we didn't * brake it before start. */ _ce_submit_configure_e1 (c, "start_init"); } } void ce_stop_chan (ce_chan_t *c) { ce_board_t *b = c->board; TAU32_UserRequest *req; CE_DEQUEUE (b->cr.queue, req); /* XXXRIK: This function should be for completeness, but for now I * don't use it. I just started to write and haven't finished it yet. * It is VERY BUGGY!!! Do not use it. If you really need * it ask me to fix it or rewrite it by yourself. * Note: most buggy part of it in ce_on_config_stop! */ if (!req) { CE_DDK_DEBUG (b, c, ("Fatal error, no free structs for " "UserRequest (%s:%d)\n", __FUNCTION__, __LINE__)); return; } // req->Command = TAU32_Configure_Commit | // TAU32_Tx_Stop | TAU32_Rx_Stop; req->Command = 0; req->Io.ChannelNumber = c->num; req->pCallback = ce_on_config_stop; b->cr.pending++; if (!TAU32_SubmitRequest (b->ddk.pControllerObject, req)) { CE_ENQUEUE_HEAD (b->cr.queue, req); CE_DDK_DEBUG (b, c, ("Can't stop chan\n")); b->cr.pending--; } } void ce_register_transmit (ce_chan_t *c, void (*func) (ce_chan_t*, void*, int)) { c->transmit = func; } void ce_register_receive (ce_chan_t *c, void (*func) (ce_chan_t*, unsigned char*, int)) { c->receive = func; } void ce_register_error (ce_chan_t *c, void (*func) (ce_chan_t*, int)) { c->error = func; } void TAU32_CALLBACK_TYPE ce_error_callback (TAU32_UserContext *pContext, int Item, unsigned NotifyBits) { ce_board_t *b = (ce_board_t *) pContext; ENTER (); if (NotifyBits & (TAU32_ERROR_FAIL | TAU32_ERROR_TIMEOUT | TAU32_ERROR_INT_OVER_TX | TAU32_ERROR_INT_OVER_RX | TAU32_ERROR_INT_STORM)) { /* Fatal: adapter failure, need reset & restart */ /* RIKXXX: probably I should add CE_FAILURE for ce_error */ CE_DDK_DEBUG (b, (ce_chan_t *)0, ("Err, disable interrupts: %s\n", ce_err2str (NotifyBits))); /* TAU32_DisableInterrupts (b->ddk.pControllerObject);*/ EXIT (); } if (Item >= 0) { /* channel error */ ce_chan_t *c = b->chan + Item; if (NotifyBits & TAU32_ERROR_TX_UNDERFLOW) { c->underrun++; if (c->error) c->error (c, CE_UNDERRUN); } if (NotifyBits & TAU32_ERROR_RX_OVERFLOW) { c->overrun++; if (c->error) c->error (c, CE_OVERFLOW); } if (NotifyBits & (TAU32_ERROR_RX_FRAME | TAU32_ERROR_RX_ABORT | TAU32_ERROR_RX_SHORT | TAU32_ERROR_RX_LONG | TAU32_ERROR_RX_SYNC | TAU32_ERROR_RX_SPLIT | TAU32_ERROR_RX_UNFIT)) { c->frame++; CE_DDK_DEBUG (b, c, ("Frame error: %x\n", NotifyBits)); if (c->error) c->error (c, CE_FRAME); } if(NotifyBits & TAU32_ERROR_RX_CRC) { c->crc++; if (c->error) c->error (c, CE_CRC); } } else { CE_DDK_DEBUG (b, (ce_chan_t *)0, ("Another error: %x\n", NotifyBits)); /* Adapter error, do smth */ } EXIT (); } void TAU32_CALLBACK_TYPE ce_status_callback(TAU32_UserContext *pContext, int Item, unsigned NotifyBits) { ce_board_t *b = (ce_board_t *) pContext; ENTER (); if(Item >= 0) { /* e1 status */ ce_chan_t *c = b->chan + Item; c->acc_status |= b->ddk.InterfacesInfo[Item].Status; /* CE_DDK_DEBUG (b, c, ("Current status: %x\n", c->acc_status));*/ } else { CE_DDK_DEBUG (b, (ce_chan_t *)0, ("Another status: %x\n", NotifyBits)); /* Adapter status, do smth. */ } EXIT (); } int ce_get_cd (ce_chan_t *c) { unsigned int e1status = c->board->ddk.InterfacesInfo[c->dir].Status; return (c->ts && !(e1status & (TAU32_RCL | TAU32_E1OFF))); } int ce_get_cts (ce_chan_t *c) { return 0; } int ce_get_dsr (ce_chan_t *c) { return 0; } void ce_e1_timer (ce_chan_t *c) { unsigned bpv, fas, crc4, ebit, pcv, oof, css; unsigned int acc_status; ce_board_t *b = c->board; TAU32_E1_State *state; if (c->num >= b->ddk.Interfaces) return; state = &b->ddk.InterfacesInfo[c->num]; acc_status = c->acc_status; /* Clear acc_status */ c->acc_status = b->ddk.InterfacesInfo[c->num].Status; /* Count seconds. * During the first second after the channel startup * the status registers are not stable yet, * we will so skip the first second. */ ++c->cursec; if (! c->totsec && c->cursec <= 1) return; c->status = 0; /* Compute the SNMP-compatible channel status. */ oof = 0; if (acc_status & TAU32_RCL) c->status |= ESTS_LOS; /* loss of signal */ if (acc_status & TAU32_RUA1) c->status |= ESTS_AIS; /* receiving all ones */ /* Get error counters. */ bpv = state->RxViolations; fas = 0; crc4 = 0; ebit = 0; css = 0; if (! c->unfram) { if (! c->use16 && (acc_status & TAU32_RSA1)) c->status |= ESTS_AIS16; /* signaling all ones */ if (! c->use16 && (acc_status & TAU32_RDMA)) c->status |= ESTS_FARLOMF; /* alarm in timeslot 16 */ if (acc_status & TAU32_RRA) c->status |= ESTS_FARLOF; /* far loss of framing */ if (acc_status & TAU32_RFAS) { c->status |= ESTS_LOF; /* loss of framing */ ++oof; /* out of framing */ } if ((! c->use16 && (acc_status & TAU32_RCAS)) || (c->crc4 && (acc_status & TAU32_RCRC4))) { c->status |= ESTS_LOMF; /* loss of multiframing */ ++oof; /* out of framing */ } fas = state->FasErrors; crc4 = state->Crc4Errors; ebit = state->FarEndBlockErrors; /* Controlled slip second -- any slip event. */ css = state->TransmitSlips + state->ReceiveSlips; } /* Clear state */ state->RxViolations = 0; state->FasErrors = 0; state->Crc4Errors = 0; state->FarEndBlockErrors = 0; state->TransmitSlips = 0; state->ReceiveSlips = 0; if (c->status & ESTS_LOS) c->status = ESTS_LOS; else if (c->status & ESTS_AIS) c->status = ESTS_AIS; else if (c->status & ESTS_LOF) c->status = ESTS_LOF; else if (c->status & ESTS_LOMF) c->status &= ~(ESTS_FARLOMF | ESTS_AIS16); if (! c->status) c->status = ESTS_NOALARM; c->currnt.bpv += bpv; c->currnt.fse += fas; if (c->crc4) { c->currnt.crce += crc4; c->currnt.rcrce += ebit; } /* Path code violation is frame sync error if CRC4 disabled, * or CRC error if CRC4 enabled. */ pcv = fas; if (c->crc4) pcv += crc4; /* Unavaiable second -- receiving all ones, or * loss of carrier, or loss of signal. */ if (acc_status & (TAU32_RUA1 | TAU32_RCL)) /* Unavailable second -- no other counters. */ ++c->currnt.uas; else { /* Line errored second -- any BPV. */ if (bpv) ++c->currnt.les; /* Errored second -- any PCV, or out of frame sync, * or any slip events. */ if (pcv || oof || css) ++c->currnt.es; /* Severely errored framing second -- out of frame sync. */ if (oof) ++c->currnt.oofs; /* Severely errored seconds -- * 832 or more PCVs, or 2048 or more BPVs. */ if (bpv >= 2048 || pcv >= 832) ++c->currnt.ses; else { /* Bursty errored seconds -- * no SES and more than 1 PCV. */ if (pcv > 1) ++c->currnt.bes; /* Collect data for computing * degraded minutes. */ ++c->degsec; c->degerr += bpv + pcv; } } /* Degraded minutes -- having error rate more than 10e-6, * not counting unavailable and severely errored seconds. */ if (c->cursec % 60 == 0) { if (c->degerr > c->degsec * 2048 / 1000) ++c->currnt.dm; c->degsec = 0; c->degerr = 0; } /* Rotate statistics every 15 minutes. */ if (c->cursec > 15*60) { int i; for (i=47; i>0; --i) c->interval[i] = c->interval[i-1]; c->interval[0] = c->currnt; /* Accumulate total statistics. */ c->total.bpv += c->currnt.bpv; c->total.fse += c->currnt.fse; c->total.crce += c->currnt.crce; c->total.rcrce += c->currnt.rcrce; c->total.uas += c->currnt.uas; c->total.les += c->currnt.les; c->total.es += c->currnt.es; c->total.bes += c->currnt.bes; c->total.ses += c->currnt.ses; c->total.oofs += c->currnt.oofs; c->total.css += c->currnt.css; c->total.dm += c->currnt.dm; c->currnt.bpv = 0; c->currnt.fse = 0; c->currnt.crce = 0; c->currnt.rcrce = 0; c->currnt.uas = 0; c->currnt.les = 0; c->currnt.es = 0; c->currnt.bes = 0; c->currnt.ses = 0; c->currnt.oofs = 0; c->currnt.css = 0; c->currnt.dm = 0; c->totsec += c->cursec; c->cursec = 0; } } void ce_set_baud (ce_chan_t *c, unsigned long baud) { TAU32_UserRequest *req; ce_board_t *b = c->board; unsigned long cfg = c->config & ~TAU32_framing_mode_mask; unsigned long ts; unsigned long kbps = (baud + 32000) / 64000 * 64; if (!c->unfram || c->num != 0 || baud == c->baud || b->cr.pending >= CONFREQSZ) return; if (!kbps || kbps > 1024) { ts = 0xffffffffUL; cfg |= TAU32_unframed_2048; } else if (kbps > 512) { ts = 0x0000ffffUL; cfg |= TAU32_unframed_1024; } else if (kbps > 256) { ts = 0x000000ffUL; cfg |= TAU32_unframed_512; } else if (kbps > 128) { ts = 0x0000000fUL; cfg |= TAU32_unframed_256; } else if (kbps > 64) { ts = 0x00000003UL; cfg |= TAU32_unframed_128; } else { ts = 0x00000001UL; cfg |= TAU32_unframed_64; } /* _ce_set_ts () will set proper baud */ _ce_set_ts (c, ts); CE_PREREQUEST (b, c, b->cr.queue, req); if (!req) return; req->Command = TAU32_Configure_E1; req->Io.InterfaceConfig.Interface = TAU32_E1_A; req->Io.InterfaceConfig.Config = cfg; req->Io.InterfaceConfig.UnframedTsMask = ts; if (ce_cfg_submit (b)) { c->baud = baud; c->ts = ts; c->config = cfg; } } void ce_set_lloop (ce_chan_t *c, unsigned char on) { TAU32_UserRequest *req; unsigned long cfg = c->config & ~(TAU32_line_mode_mask | TAU32_ais_on_loss); ce_board_t *b = c->board; if (c->num >= b->ddk.Interfaces || b->cr.pending >= CONFREQSZ) return; on = on ? 1 : 0; if (on == c->lloop) return; cfg |= on ? TAU32_LineLoopInt : (TAU32_LineNormal | TAU32_ais_on_loss); CE_PREREQUEST (b, c, b->cr.queue, req); if (!req) return; req->Command = TAU32_Configure_E1; req->Io.InterfaceConfig.Interface = c->num ? TAU32_E1_B : TAU32_E1_A; req->Io.InterfaceConfig.Config = cfg; req->Io.InterfaceConfig.UnframedTsMask = c->ts; CE_DDK_DEBUG (b, c, ("Submit lloop\n")); if (ce_cfg_submit (b)) { c->lloop = on ? 1 : 0; c->config = cfg; } } void ce_set_rloop (ce_chan_t *c, unsigned char on) { TAU32_UserRequest *req; unsigned long cfg = c->config & ~TAU32_line_mode_mask; ce_board_t *b = c->board; if (c->num >= b->ddk.Interfaces || b->cr.pending >= CONFREQSZ) return; on = on ? 1 : 0; if (on == c->rloop) return; cfg |= on ? TAU32_LineLoopExt : TAU32_LineNormal; CE_PREREQUEST (b, c, b->cr.queue, req); if (!req) return; req->Command = TAU32_Configure_E1; req->Io.InterfaceConfig.Interface = c->num ? TAU32_E1_B : TAU32_E1_A; req->Io.InterfaceConfig.Config = cfg; req->Io.InterfaceConfig.UnframedTsMask = c->ts; CE_DDK_DEBUG (b, c, ("Submit rloop\n")); if (ce_cfg_submit (b)) { c->rloop = on ? 1 : 0; c->config = cfg; } } void ce_set_higain (ce_chan_t *c, unsigned char on) { TAU32_UserRequest *req; unsigned long cfg = c->config & ~TAU32_higain; ce_board_t *b = c->board; if (c->num >= b->ddk.Interfaces || b->cr.pending >= CONFREQSZ) return; on = on ? 1 : 0; if (on == c->higain) return; cfg |= on ? TAU32_higain : 0; CE_PREREQUEST (b, c, b->cr.queue, req); if (!req) return; req->Command = TAU32_Configure_E1; req->Io.InterfaceConfig.Interface = c->num ? TAU32_E1_B : TAU32_E1_A; req->Io.InterfaceConfig.Config = cfg; req->Io.InterfaceConfig.UnframedTsMask = c->ts; CE_DDK_DEBUG (b, c, ("Submit higain\n")); if (ce_cfg_submit (b)) { c->higain = on ? 1 : 0; c->config = cfg; } } static void _ce_set_ts (ce_chan_t *c, unsigned long ts) { TAU32_UserRequest *req; ce_board_t *b = c->board; unsigned long mask = 0, omask = 0; int nts = 0, ots = 0, pts = 0; int i, k; if (b->cr.pending >= CONFREQSZ) return; /* * pts - number of busy "peb" ts * ots - current (old) busy ts * nts - new busy ts */ for (i = 0; i < 32; i++) { if (c->ts & (1ul << i)) ots++; if (ts & (1ul << i)) nts++; if (b->dxc[i] != TAU32_CROSS_OFF) pts++; } CE_DDK_DEBUG (b, c, ("pts: %d ots: %d nts: %d ts: %lx\n", pts, ots, nts, ts)); /* 32 - all busy + my old busy == free */ if (32 - pts + ots - nts < 0) return; /* Ok. We have enougth "peb" ts. Clean old. */ /* We start from zero, cause this is peb cells */ for (i = 0; i < 32; i++) { int tin = b->dxc[i]; int t = tin % 32; if (tin < (c->dir?64:32) || tin > (c->dir?95:63)) continue; if (c->ts & (1ul << t)) { b->dxc[tin] = TAU32_CROSS_OFF; b->dxc[i] = TAU32_CROSS_OFF; if (b->dxc[t + 32] == TAU32_CROSS_OFF && b->dxc[t + 64] == TAU32_CROSS_OFF) { b->dxc[t + 32] = t + 64; b->dxc[t + 64] = t + 32; } omask |= (1ul << t); } } k = 0; /* Set */ for (i = 0; i < 32; i++) { if ((ts & (1ul << i)) == 0) continue; while (b->dxc[k] != TAU32_CROSS_OFF) { k++; /* Paranoic */ if (k >= 32) { CE_DDK_DEBUG (b, c, ("TS count overflow\n")); return; } } b->dxc[k] = (c->dir?64:32) + i; b->dxc[(c->dir?64:32) + i] = k; if (b->dxc[(c->dir?32:64) + i] == (c->dir?64:32) + i) b->dxc[(c->dir?32:64) + i] = TAU32_CROSS_OFF; mask |= (1ul << k); } c->ts = ts; c->baud = nts*64000; CE_PREREQUEST (b, c, b->cr.queue, req); if (!req) return; req->Command = TAU32_Timeslots_Channel | TAU32_Configure_Commit; req->Io.ChannelNumber = c->num; req->Io.ChannelConfig.AssignedTsMask = mask; if (c->phony) { b->pmask &= ~omask; b->pmask |= mask; } CE_DDK_DEBUG (b, c, ("ts=%lx mask=%lx omask=%lx pmask=%lx\n", c->ts, mask, omask, b->pmask)); CE_DDK_DEBUG (b, c, ("Crossmatrix table:\n")); #ifdef CE_DDK_DEBUG_ENABLED for (i = 0; i < 32*3; i++) { printf ("%3d\t%s", b->dxc[i], (i%8==7)?"\n":""); printf ("%s",(i%32==31)?"\n":""); } #endif CE_DDK_DEBUG (b, c, ("Submit tsmask\n")); if (!ce_cfg_submit (b)) { CE_DDK_DEBUG (b, c, ("Fail to submit tsmask\n")); /* Do some error processing */ return; } CE_DDK_DEBUG (b, c, ("SetCrossMatrix\n")); if (!TAU32_SetCrossMatrix(b->ddk.pControllerObject, b->dxc, b->pmask)) { CE_DDK_DEBUG (b, c, ("Faild to SetCrossMatrix\n")); /* Do some error processing */ return; } } void ce_set_ts (ce_chan_t *c, unsigned long ts) { ce_board_t *b = c->board; ce_chan_t *x; if (c->ts == ts || b->chan->unfram) return; ts &= ~(1ul); if (!b->chan[c->dir].use16) ts &= ~(1ul << 16); for (x = b->chan; x < b->chan + NCHAN; x++) { if (x == c || x->dir != c->dir) continue; ts &= ~x->ts; } _ce_set_ts (c, ts); } void ce_set_unfram (ce_chan_t *c, unsigned char on) { TAU32_UserRequest *req; ce_board_t *b = c->board; unsigned long cfg = c->config & ~TAU32_framing_mode_mask; unsigned long i; if (c->num != 0 || b->cr.pending + 2*32 + 3>= CONFREQSZ) return; on = on ? 1 : 0; if (on == c->unfram) return; if (on) { ce_set_dir (c, 0); for (i = 1; i < TAU32_CHANNELS; i++) { ce_set_ts (b->chan + i, 0); ce_set_phony (b->chan + i, 0); } ce_set_use16 (b->chan + 0, 0); ce_set_use16 (b->chan + 1, 0); /* Get current value, previous ce_set request may change it */ cfg = c->config & ~TAU32_framing_mode_mask; cfg |= TAU32_unframed_2048; c->unfram = on; _ce_set_ts (b->chan, ~0ul); c->config = cfg; /* XXXRIK: Do extra checks on config queue size*/ if (b->ddk.Interfaces) { CE_PREREQUEST (b, c, b->cr.queue, req); if (!req) return; req->Command = TAU32_Configure_E1; req->Io.InterfaceConfig.Interface = TAU32_E1_B; req->Io.InterfaceConfig.Config = TAU32_LineOff; req->Io.InterfaceConfig.UnframedTsMask = 0; CE_DDK_DEBUG (b, c, ("unfram: B line off\n")); ce_cfg_submit (b); } CE_PREREQUEST (b, c, b->cr.queue, req); if (!req) return; req->Command = TAU32_Configure_E1; req->Io.InterfaceConfig.Interface = TAU32_E1_A; req->Io.InterfaceConfig.Config = cfg; req->Io.InterfaceConfig.UnframedTsMask = c->ts; CE_DDK_DEBUG (b, c, ("Submit unfram\n")); ce_cfg_submit (b); } else { cfg |= TAU32_framed_cas_cross; CE_PREREQUEST (b, c, b->cr.queue, req); if (!req) return; req->Command = TAU32_Configure_E1; req->Io.InterfaceConfig.Interface = TAU32_E1_ALL; req->Io.InterfaceConfig.Config = cfg; req->Io.InterfaceConfig.UnframedTsMask = 0; CE_DDK_DEBUG (b, c, ("Submit framed\n")); ce_cfg_submit (b); ce_set_ts (c, 0); } c->unfram = on; } void ce_set_phony (ce_chan_t *c, unsigned char on) { TAU32_UserRequest *req; ce_board_t *b = c->board; unsigned long mask = 0; int i; if ((c->phony && on) || (c->phony == 0 && on == 0) || b->cr.pending >= CONFREQSZ) return; CE_PREREQUEST (b, c, b->cr.queue, req); if (!req) return; req->Command = TAU32_Configure_Channel; req->Io.InterfaceConfig.Config = on ? TAU32_TMA : (TAU32_HDLC | TAU32_fr_rx_splitcheck | TAU32_fr_rx_fitcheck); req->Io.ChannelNumber = c->num; CE_DDK_DEBUG (b, c, ("Submit phony\n")); if (!ce_cfg_submit (b)) { /* Do some error processing */ return; } for (i = 0; i < 32; i++) { int t = b->dxc[i] % 32; if (b->dxc[i] < (c->dir?64:32) || b->dxc[i] > (c->dir?95:63)) continue; if (c->ts & (1ul << t)) mask |= (1ul << t); } CE_DDK_DEBUG (b, c, ("phony mask:%lx\n", mask)); if (on) { b->pmask |= mask; } else { b->pmask &= ~mask; } c->phony = on ? 1 : 0; CE_DDK_DEBUG (b, c, ("Submit (setcrosmatrix) phony\n")); if (!TAU32_SetCrossMatrix(b->ddk.pControllerObject, b->dxc, b->pmask)) { /* Do some error processing */ return; } } void ce_set_scrambler (ce_chan_t *c, unsigned char on) { TAU32_UserRequest *req; unsigned long cfg = c->config & ~TAU32_scrambler; ce_board_t *b = c->board; if (c->num != 0 || c->unfram == 0 || b->cr.pending >= CONFREQSZ) return; on = on ? 1 : 0; if (on == c->scrambler) return; cfg |= on ? TAU32_scrambler : 0; CE_PREREQUEST (b, c, b->cr.queue, req); if (!req) return; req->Command = TAU32_Configure_E1; req->Io.InterfaceConfig.Interface = c->num ? TAU32_E1_B : TAU32_E1_A; req->Io.InterfaceConfig.Config = cfg; req->Io.InterfaceConfig.UnframedTsMask = c->ts; CE_DDK_DEBUG (b, c, ("Submit scrambler\n")); if (ce_cfg_submit (b)) { c->scrambler = on ? 1 : 0; c->config = cfg; } } void ce_set_monitor (ce_chan_t *c, unsigned char on) { TAU32_UserRequest *req; unsigned long cfg = c->config & ~TAU32_monitor; ce_board_t *b = c->board; if (c->num >= b->ddk.Interfaces || b->cr.pending >= CONFREQSZ) return; on = on ? 1 : 0; if (on == c->monitor) return; cfg |= on ? TAU32_monitor : 0; CE_PREREQUEST (b, c, b->cr.queue, req); if (!req) return; req->Command = TAU32_Configure_E1; req->Io.InterfaceConfig.Interface = c->num ? TAU32_E1_B : TAU32_E1_A; req->Io.InterfaceConfig.Config = cfg; req->Io.InterfaceConfig.UnframedTsMask = c->ts; CE_DDK_DEBUG (b, c, ("Submit monitor\n")); if (ce_cfg_submit (b)) { c->monitor = on ? 1 : 0; c->config = cfg; } } static void _ce_submit_configure_e1 (ce_chan_t *c, char *rname) { TAU32_UserRequest *req; ce_board_t *b = c->board; CE_PREREQUEST (b, c, b->cr.queue, req); if (!req) return; req->Command = TAU32_Configure_E1; req->Io.InterfaceConfig.Interface = c->num == 0 ? TAU32_E1_A : TAU32_E1_B; req->Io.InterfaceConfig.Config = c->config; req->Io.InterfaceConfig.UnframedTsMask = c->ts; CE_DDK_DEBUG (b, c, ("Submit %s\n", rname ? rname : "")); if (!ce_cfg_submit (b)) { CE_DDK_DEBUG (b, c, ("Fail to submit %s\n", rname?rname:"")); /* Do some error processing */ return; } } void ce_set_use16 (ce_chan_t *c, unsigned char on) { ce_board_t *b = c->board; ce_chan_t *x; unsigned long cfg[2]; int use[2]; if (c->num >= b->ddk.Interfaces || b->cr.pending + 2 >= CONFREQSZ) return; cfg[0] = b->chan[0].config & ~TAU32_framing_mode_mask; cfg[1] = b->chan[1].config & ~TAU32_framing_mode_mask; on = on ? 1 : 0; if (c->use16 == on || b->chan->unfram) return; use[0] = b->chan[0].use16; use[1] = b->chan[1].use16; /* Correct value */ use[c->num] = on; if (b->ddk.Interfaces == 1) { cfg[0] |= on ? TAU32_framed_cas_set : TAU32_framed_no_cas; } else { if (use[0] == 0 && use[1] == 0) { cfg[0] |= TAU32_framed_cas_cross; cfg[1] |= TAU32_framed_cas_cross; } else if (use[0] == 0) { cfg[0] |= TAU32_framed_cas_set; cfg[1] |= TAU32_framed_no_cas; } else if (use[1] == 0) { cfg[0] |= TAU32_framed_no_cas; cfg[1] |= TAU32_framed_cas_set; } else { cfg[0] |= TAU32_framed_no_cas; cfg[1] |= TAU32_framed_no_cas; } } c->use16 = on; for (x = b->chan; !on && x < b->chan + NCHAN; x++) { if (x->dir == c->num && x->ts & (1ul<<16)) { ce_set_ts (x, x->ts); break; } } if (cfg[0] != b->chan[0].config) { b->chan[0].config = cfg[0]; _ce_submit_configure_e1 (b->chan + 0, "use16"); } if (cfg[1] != b->chan[1].config) { b->chan[1].config = cfg[1]; _ce_submit_configure_e1 (b->chan + 1, "use16"); } } void ce_set_crc4 (ce_chan_t *c, unsigned char on) { TAU32_UserRequest *req; unsigned long cfg = c->config & ~TAU32_crc4_mf; ce_board_t *b = c->board; if (c->num >= b->ddk.Interfaces || b->cr.pending >= CONFREQSZ) return; on = on ? 1 : 0; if (on == c->crc4 || b->chan->unfram) return; cfg |= on ? TAU32_crc4_mf : 0; CE_PREREQUEST (b, c, b->cr.queue, req); if (!req) return; req->Command = TAU32_Configure_E1; req->Io.InterfaceConfig.Interface = c->num ? TAU32_E1_B : TAU32_E1_A; req->Io.InterfaceConfig.Config = cfg; req->Io.InterfaceConfig.UnframedTsMask = c->ts; CE_DDK_DEBUG (b, c, ("Submit crc4\n")); if (ce_cfg_submit (b)) { c->crc4 = on ? 1 : 0; c->config = cfg; } } void ce_set_gsyn (ce_chan_t *c, int syn) { ce_board_t *b = c->board; unsigned int mode; if (c->num >= b->ddk.Interfaces) return; if (syn == GSYN_RCV) syn = c->num ? GSYN_RCV1 : GSYN_RCV0; switch (syn) { default: mode = TAU32_SYNC_INTERNAL; break; case GSYN_RCV0: mode = TAU32_SYNC_RCV_A; break; case GSYN_RCV1: mode = TAU32_SYNC_RCV_B; break; } CE_DDK_DEBUG (b, c, ("Set Sync Mode\n")); if (TAU32_SetSyncMode (b->ddk.pControllerObject, mode)) { b->chan->gsyn = syn; if (b->ddk.Interfaces > 1) (b->chan + 1)->gsyn = syn; } } int ce_get_cable (ce_chan_t *c) { ce_board_t *b = c->board; if (c->num >= b->ddk.Interfaces) return 0; return CABLE_TP; } void ce_set_dir (ce_chan_t *c, int dir) { ce_board_t *b = c->board; unsigned long ts; if (b->cr.pending + 1>= CONFREQSZ || c->dir == dir) return; ts = c->ts; ce_set_ts (c, 0); c->dir = dir; ce_set_ts (c, ts); } Index: head/sys/dev/ce/if_ce.c =================================================================== --- head/sys/dev/ce/if_ce.c (revision 359180) +++ head/sys/dev/ce/if_ce.c (revision 359181) @@ -1,2643 +1,2643 @@ /* * Cronyx-Tau32-PCI adapter driver for FreeBSD. * * Copyright (C) 2003-2005 Cronyx Engineering. * Copyright (C) 2003-2005 Kurakin Roman, * * This software is distributed with NO WARRANTIES, not even the implied * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * Authors grant any other persons or organisations a permission to use, * modify and redistribute this software in source and binary forms, * as long as this message is kept with the software, all derivative * works or modified versions. * * $Cronyx: if_ce.c,v 1.9.2.8 2005/11/21 14:17:44 rik Exp $ */ #include __FBSDID("$FreeBSD$"); #include #if __FreeBSD_version >= 500000 # define NPCI 1 #else # include "pci.h" #endif #if NPCI > 0 #include #include #include #include #include #include #include #include #include #include #include #if __FreeBSD_version >= 504000 #include #endif #include #include #include #include #include #include #if __FreeBSD_version > 501000 # include # include #else # include # include #endif #include #include #include "opt_ng_cronyx.h" #ifdef NETGRAPH_CRONYX # include "opt_netgraph.h" # ifndef NETGRAPH # error #option NETGRAPH missed from configuration # endif # include # include # include #else # include # include # define PP_CISCO IFF_LINK2 # include #endif -#include +#include #include #include #include /* If we don't have Cronyx's sppp version, we don't have fr support via sppp */ #ifndef PP_FR #define PP_FR 0 #endif #ifndef IFP2SP #define IFP2SP(ifp) ((struct sppp*)ifp) #endif #ifndef SP2IFP #define SP2IFP(sp) ((struct ifnet*)sp) #endif #ifndef PCIR_BAR #define PCIR_BAR(x) (PCIR_MAPS + (x) * 4) #endif /* define as our previous return value */ #ifndef BUS_PROBE_DEFAULT #define BUS_PROBE_DEFAULT 0 #endif #define CE_DEBUG(d,s) ({if (d->chan->debug) {\ printf ("%s: ", d->name); printf s;}}) #define CE_DEBUG2(d,s) ({if (d->chan->debug>1) {\ printf ("%s: ", d->name); printf s;}}) #ifndef IF_DRAIN #define IF_DRAIN(ifq) do { \ struct mbuf *m; \ for (;;) { \ IF_DEQUEUE(ifq, m); \ if (m == NULL) \ break; \ m_freem(m); \ } \ } while (0) #endif #ifndef _IF_QLEN #define _IF_QLEN(ifq) ((ifq)->ifq_len) #endif #ifndef callout_drain #define callout_drain callout_stop #endif #define CE_LOCK_NAME "ceX" #define CE_LOCK(_bd) mtx_lock (&(_bd)->ce_mtx) #define CE_UNLOCK(_bd) mtx_unlock (&(_bd)->ce_mtx) #define CE_LOCK_ASSERT(_bd) mtx_assert (&(_bd)->ce_mtx, MA_OWNED) #define CDEV_MAJOR 185 static int ce_probe __P((device_t)); static int ce_attach __P((device_t)); static int ce_detach __P((device_t)); static device_method_t ce_methods[] = { /* Device interface */ DEVMETHOD(device_probe, ce_probe), DEVMETHOD(device_attach, ce_attach), DEVMETHOD(device_detach, ce_detach), DEVMETHOD_END }; typedef struct _ce_dma_mem_t { unsigned long phys; void *virt; size_t size; #if __FreeBSD_version >= 500000 bus_dma_tag_t dmat; bus_dmamap_t mapp; #endif } ce_dma_mem_t; typedef struct _drv_t { char name [8]; int running; ce_board_t *board; ce_chan_t *chan; struct ifqueue rqueue; #ifdef NETGRAPH char nodename [NG_NODESIZE]; hook_p hook; hook_p debug_hook; node_p node; struct ifqueue queue; struct ifqueue hi_queue; #else struct ifnet *ifp; #endif short timeout; struct callout timeout_handle; #if __FreeBSD_version >= 500000 struct cdev *devt; #else /* __FreeBSD_version < 500000 */ dev_t devt; #endif ce_dma_mem_t dmamem; } drv_t; typedef struct _bdrv_t { ce_board_t *board; struct resource *ce_res; struct resource *ce_irq; void *ce_intrhand; ce_dma_mem_t dmamem; drv_t channel [NCHAN]; #if __FreeBSD_version >= 504000 struct mtx ce_mtx; #endif } bdrv_t; static driver_t ce_driver = { "ce", ce_methods, sizeof(bdrv_t), }; static devclass_t ce_devclass; static void ce_receive (ce_chan_t *c, unsigned char *data, int len); static void ce_transmit (ce_chan_t *c, void *attachment, int len); static void ce_error (ce_chan_t *c, int data); static void ce_up (drv_t *d); static void ce_start (drv_t *d); static void ce_down (drv_t *d); static void ce_watchdog (drv_t *d); static void ce_watchdog_timer (void *arg); #ifdef NETGRAPH extern struct ng_type typestruct; #else static void ce_ifstart (struct ifnet *ifp); static void ce_tlf (struct sppp *sp); static void ce_tls (struct sppp *sp); static int ce_sioctl (struct ifnet *ifp, u_long cmd, caddr_t data); static void ce_initialize (void *softc); #endif static ce_board_t *adapter [NBRD]; static drv_t *channel [NBRD*NCHAN]; static struct callout led_timo [NBRD]; static struct callout timeout_handle; static int ce_destroy = 0; #if __FreeBSD_version < 500000 static int ce_open (dev_t dev, int oflags, int devtype, struct proc *p); static int ce_close (dev_t dev, int fflag, int devtype, struct proc *p); static int ce_ioctl (dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p); #else static int ce_open (struct cdev *dev, int oflags, int devtype, struct thread *td); static int ce_close (struct cdev *dev, int fflag, int devtype, struct thread *td); static int ce_ioctl (struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td); #endif #if __FreeBSD_version < 500000 static struct cdevsw ce_cdevsw = { ce_open, ce_close, noread, nowrite, ce_ioctl, nopoll, nommap, nostrategy, "ce", CDEV_MAJOR, nodump, nopsize, D_NAGGED, -1 }; #elif __FreeBSD_version == 500000 static struct cdevsw ce_cdevsw = { ce_open, ce_close, noread, nowrite, ce_ioctl, nopoll, nommap, nostrategy, "ce", CDEV_MAJOR, nodump, nopsize, D_NAGGED, }; #elif __FreeBSD_version <= 501000 static struct cdevsw ce_cdevsw = { .d_open = ce_open, .d_close = ce_close, .d_read = noread, .d_write = nowrite, .d_ioctl = ce_ioctl, .d_poll = nopoll, .d_mmap = nommap, .d_strategy = nostrategy, .d_name = "ce", .d_maj = CDEV_MAJOR, .d_dump = nodump, .d_flags = D_NAGGED, }; #elif __FreeBSD_version < 502103 static struct cdevsw ce_cdevsw = { .d_open = ce_open, .d_close = ce_close, .d_ioctl = ce_ioctl, .d_name = "ce", .d_maj = CDEV_MAJOR, .d_flags = D_NAGGED, }; #elif __FreeBSD_version < 600000 static struct cdevsw ce_cdevsw = { .d_version = D_VERSION, .d_open = ce_open, .d_close = ce_close, .d_ioctl = ce_ioctl, .d_name = "ce", .d_maj = CDEV_MAJOR, .d_flags = D_NEEDGIANT, }; #else /* __FreeBSD_version >= 600000 */ static struct cdevsw ce_cdevsw = { .d_version = D_VERSION, .d_open = ce_open, .d_close = ce_close, .d_ioctl = ce_ioctl, .d_name = "ce", }; #endif /* * Make an mbuf from data. */ static struct mbuf *makembuf (void *buf, unsigned len) { struct mbuf *m; MGETHDR (m, M_NOWAIT, MT_DATA); if (! m) return 0; if (!(MCLGET(m, M_NOWAIT))) { m_freem (m); return 0; } m->m_pkthdr.len = m->m_len = len; bcopy (buf, mtod (m, caddr_t), len); return m; } static int ce_probe (device_t dev) { if ((pci_get_vendor (dev) == TAU32_PCI_VENDOR_ID) && (pci_get_device (dev) == TAU32_PCI_DEVICE_ID)) { device_set_desc (dev, "Cronyx-Tau32-PCI serial adapter"); return BUS_PROBE_DEFAULT; } return ENXIO; } static void ce_timeout (void *arg) { drv_t *d; int s, i, k; for (i = 0; i < NBRD; ++i) { if (adapter[i] == NULL) continue; for (k = 0; k < NCHAN; ++k) { s = splimp (); if (ce_destroy) { splx (s); return; } d = channel[i * NCHAN + k]; if (!d) { splx (s); continue; } CE_LOCK ((bdrv_t *)d->board->sys); switch (d->chan->type) { case T_E1: ce_e1_timer (d->chan); break; default: break; } CE_UNLOCK ((bdrv_t *)d->board->sys); splx (s); } } s = splimp (); if (!ce_destroy) callout_reset (&timeout_handle, hz, ce_timeout, 0); splx (s); } static void ce_led_off (void *arg) { ce_board_t *b = arg; bdrv_t *bd = (bdrv_t *) b->sys; int s; s = splimp (); if (ce_destroy) { splx (s); return; } CE_LOCK (bd); TAU32_LedSet (b->ddk.pControllerObject, 0); CE_UNLOCK (bd); splx (s); } static void ce_intr (void *arg) { bdrv_t *bd = arg; ce_board_t *b = bd->board; int s; int i; #if __FreeBSD_version >= 500000 && defined NETGRAPH int error; #endif s = splimp (); if (ce_destroy) { splx (s); return; } CE_LOCK (bd); /* Turn LED on. */ TAU32_LedSet (b->ddk.pControllerObject, 1); TAU32_HandleInterrupt (b->ddk.pControllerObject); /* Turn LED off 50 msec later. */ callout_reset (&led_timo[b->num], hz/20, ce_led_off, b); CE_UNLOCK (bd); splx (s); /* Pass packets in a lock-free state */ for (i = 0; i < NCHAN && b->chan[i].type; i++) { drv_t *d = b->chan[i].sys; struct mbuf *m; if (!d || !d->running) continue; while (_IF_QLEN(&d->rqueue)) { IF_DEQUEUE (&d->rqueue,m); if (!m) continue; #ifdef NETGRAPH if (d->hook) { #if __FreeBSD_version >= 500000 NG_SEND_DATA_ONLY (error, d->hook, m); #else ng_queue_data (d->hook, m, 0); #endif } else { IF_DRAIN (&d->rqueue); } #else sppp_input (d->ifp, m); #endif } } } #if __FreeBSD_version >= 500000 static void ce_bus_dmamap_addr (void *arg, bus_dma_segment_t *segs, int nseg, int error) { unsigned long *addr; if (error) return; KASSERT(nseg == 1, ("too many DMA segments, %d should be 1", nseg)); addr = arg; *addr = segs->ds_addr; } #ifndef BUS_DMA_ZERO #define BUS_DMA_ZERO 0 #endif static int ce_bus_dma_mem_alloc (int bnum, int cnum, ce_dma_mem_t *dmem) { int error; error = bus_dma_tag_create (NULL, 16, 0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, dmem->size, 1, dmem->size, 0, #if __FreeBSD_version >= 502000 NULL, NULL, #endif &dmem->dmat); if (error) { if (cnum >= 0) printf ("ce%d-%d: ", bnum, cnum); else printf ("ce%d: ", bnum); printf ("couldn't allocate tag for dma memory\n"); return 0; } error = bus_dmamem_alloc (dmem->dmat, (void **)&dmem->virt, BUS_DMA_NOWAIT | BUS_DMA_ZERO, &dmem->mapp); if (error) { if (cnum >= 0) printf ("ce%d-%d: ", bnum, cnum); else printf ("ce%d: ", bnum); printf ("couldn't allocate mem for dma memory\n"); bus_dma_tag_destroy (dmem->dmat); return 0; } error = bus_dmamap_load (dmem->dmat, dmem->mapp, dmem->virt, dmem->size, ce_bus_dmamap_addr, &dmem->phys, 0); if (error) { if (cnum >= 0) printf ("ce%d-%d: ", bnum, cnum); else printf ("ce%d: ", bnum); printf ("couldn't load mem map for dma memory\n"); bus_dmamem_free (dmem->dmat, dmem->virt, dmem->mapp); bus_dma_tag_destroy (dmem->dmat); return 0; } #if __FreeBSD_version >= 502000 bzero (dmem->virt, dmem->size); #endif return 1; } static void ce_bus_dma_mem_free (ce_dma_mem_t *dmem) { bus_dmamap_unload (dmem->dmat, dmem->mapp); bus_dmamem_free (dmem->dmat, dmem->virt, dmem->mapp); bus_dma_tag_destroy (dmem->dmat); } #else static int ce_bus_dma_mem_alloc (int bnum, int cnum, ce_dma_mem_t *dmem) { dmem->virt = contigmalloc (dmem->size, M_DEVBUF, M_WAITOK, 0x100000, 0xffffffff, 16, 0); if (dmem->virt == NULL) { if (cnum >= 0) printf ("ce%d-%d: ", bnum, cnum); else printf ("ce%d: ", bnum); printf ("couldn't allocate dma memory\n"); return 0; } dmem->phys = vtophys (dmem->virt); bzero (dmem->virt, dmem->size); return 1; } static void ce_bus_dma_mem_free (ce_dma_mem_t *dmem) { contigfree (dmem->virt, dmem->size, M_DEVBUF); } #endif /* * Called if the probe succeeded. */ static int ce_attach (device_t dev) { bdrv_t *bd = device_get_softc (dev); int unit = device_get_unit (dev); #if __FreeBSD_version >= 504000 char *ce_ln = CE_LOCK_NAME; #endif vm_offset_t vbase; int rid, error; ce_board_t *b; ce_chan_t *c; drv_t *d; int s; b = malloc (sizeof(ce_board_t), M_DEVBUF, M_WAITOK); if (!b) { printf ("ce%d: couldn't allocate memory\n", unit); return (ENXIO); } bzero (b, sizeof(ce_board_t)); b->ddk.sys = &b; #if __FreeBSD_version >= 440000 pci_enable_busmaster (dev); #endif bd->dmamem.size = TAU32_ControllerObjectSize; if (! ce_bus_dma_mem_alloc (unit, -1, &bd->dmamem)) { free (b, M_DEVBUF); return (ENXIO); } b->ddk.pControllerObject = bd->dmamem.virt; bd->board = b; b->sys = bd; rid = PCIR_BAR(0); bd->ce_res = bus_alloc_resource (dev, SYS_RES_MEMORY, &rid, 0, ~0, 1, RF_ACTIVE); if (! bd->ce_res) { printf ("ce%d: cannot map memory\n", unit); ce_bus_dma_mem_free (&bd->dmamem); free (b, M_DEVBUF); return (ENXIO); } vbase = (vm_offset_t) rman_get_virtual (bd->ce_res); b->ddk.PciBar1VirtualAddress = (void *)vbase; b->ddk.ControllerObjectPhysicalAddress = bd->dmamem.phys; b->ddk.pErrorNotifyCallback = ce_error_callback; b->ddk.pStatusNotifyCallback = ce_status_callback; b->num = unit; TAU32_BeforeReset(&b->ddk); pci_write_config (dev, TAU32_PCI_RESET_ADDRESS, TAU32_PCI_RESET_ON, 4); pci_write_config (dev, TAU32_PCI_RESET_ADDRESS, TAU32_PCI_RESET_OFF, 4); if(!TAU32_Initialize(&b->ddk, 0)) { printf ("ce%d: init adapter error 0x%08x, bus dead bits 0x%08lx\n", unit, b->ddk.InitErrors, b->ddk.DeadBits); bus_release_resource (dev, SYS_RES_MEMORY, PCIR_BAR(0), bd->ce_res); ce_bus_dma_mem_free (&bd->dmamem); free (b, M_DEVBUF); return (ENXIO); } s = splimp (); ce_init_board (b); rid = 0; bd->ce_irq = bus_alloc_resource (dev, SYS_RES_IRQ, &rid, 0, ~0, 1, RF_SHAREABLE | RF_ACTIVE); if (! bd->ce_irq) { printf ("ce%d: cannot map interrupt\n", unit); bus_release_resource (dev, SYS_RES_MEMORY, PCIR_BAR(0), bd->ce_res); ce_bus_dma_mem_free (&bd->dmamem); free (b, M_DEVBUF); splx (s); return (ENXIO); } #if __FreeBSD_version >= 500000 callout_init (&led_timo[unit], 1); #else callout_init (&led_timo[unit]); #endif error = bus_setup_intr (dev, bd->ce_irq, #if __FreeBSD_version >= 500013 INTR_TYPE_NET|INTR_MPSAFE, #else INTR_TYPE_NET, #endif NULL, ce_intr, bd, &bd->ce_intrhand); if (error) { printf ("ce%d: cannot set up irq\n", unit); bus_release_resource (dev, SYS_RES_IRQ, 0, bd->ce_irq); bus_release_resource (dev, SYS_RES_MEMORY, PCIR_BAR(0), bd->ce_res); ce_bus_dma_mem_free (&bd->dmamem); free (b, M_DEVBUF); splx (s); return (ENXIO); } switch (b->ddk.Model) { case 1: strcpy (b->name, TAU32_BASE_NAME); break; case 2: strcpy (b->name, TAU32_LITE_NAME); break; case 3: strcpy (b->name, TAU32_ADPCM_NAME); break; default: strcpy (b->name, TAU32_UNKNOWN_NAME); break; } printf ("ce%d: %s\n", unit, b->name); for (c = b->chan; c < b->chan + NCHAN; ++c) { c->num = (c - b->chan); c->board = b; d = &bd->channel[c->num]; d->dmamem.size = sizeof(ce_buf_t); if (! ce_bus_dma_mem_alloc (unit, c->num, &d->dmamem)) continue; channel [b->num * NCHAN + c->num] = d; sprintf (d->name, "ce%d.%d", b->num, c->num); d->board = b; d->chan = c; c->sys = d; } for (c = b->chan; c < b->chan + NCHAN; ++c) { if (c->sys == NULL) continue; d = c->sys; callout_init (&d->timeout_handle, 1); #ifdef NETGRAPH if (ng_make_node_common (&typestruct, &d->node) != 0) { printf ("%s: cannot make common node\n", d->name); d->node = NULL; continue; } #if __FreeBSD_version >= 500000 NG_NODE_SET_PRIVATE (d->node, d); #else d->node->private = d; #endif sprintf (d->nodename, "%s%d", NG_CE_NODE_TYPE, c->board->num * NCHAN + c->num); if (ng_name_node (d->node, d->nodename)) { printf ("%s: cannot name node\n", d->nodename); #if __FreeBSD_version >= 500000 NG_NODE_UNREF (d->node); #else ng_rmnode (d->node); ng_unref (d->node); #endif continue; } d->queue.ifq_maxlen = ifqmaxlen; d->hi_queue.ifq_maxlen = ifqmaxlen; d->rqueue.ifq_maxlen = ifqmaxlen; #if __FreeBSD_version >= 500000 mtx_init (&d->queue.ifq_mtx, "ce_queue", NULL, MTX_DEF); mtx_init (&d->hi_queue.ifq_mtx, "ce_queue_hi", NULL, MTX_DEF); mtx_init (&d->rqueue.ifq_mtx, "ce_rqueue", NULL, MTX_DEF); #endif #else /*NETGRAPH*/ #if __FreeBSD_version >= 600031 d->ifp = if_alloc(IFT_PPP); #else d->ifp = malloc (sizeof(struct sppp), M_DEVBUF, M_WAITOK); bzero (d->ifp, sizeof(struct sppp)); #endif if (!d->ifp) { printf ("%s: cannot if_alloc() interface\n", d->name); continue; } d->ifp->if_softc = d; #if __FreeBSD_version > 501000 if_initname (d->ifp, "ce", b->num * NCHAN + c->num); #else d->ifp->if_unit = b->num * NCHAN + c->num; d->ifp->if_name = "ce"; #endif d->ifp->if_mtu = PP_MTU; d->ifp->if_flags = IFF_POINTOPOINT | IFF_MULTICAST; d->ifp->if_ioctl = ce_sioctl; d->ifp->if_start = ce_ifstart; d->ifp->if_init = ce_initialize; d->rqueue.ifq_maxlen = ifqmaxlen; #if __FreeBSD_version >= 500000 mtx_init (&d->rqueue.ifq_mtx, "ce_rqueue", NULL, MTX_DEF); #endif sppp_attach (d->ifp); if_attach (d->ifp); IFP2SP(d->ifp)->pp_tlf = ce_tlf; IFP2SP(d->ifp)->pp_tls = ce_tls; /* If BPF is in the kernel, call the attach for it. * The header size of PPP or Cisco/HDLC is 4 bytes. */ bpfattach (d->ifp, DLT_PPP, 4); #endif /*NETGRAPH*/ ce_start_chan (c, 1, 1, d->dmamem.virt, d->dmamem.phys); /* Register callback functions. */ ce_register_transmit (c, &ce_transmit); ce_register_receive (c, &ce_receive); ce_register_error (c, &ce_error); d->devt = make_dev (&ce_cdevsw, b->num*NCHAN+c->num, UID_ROOT, GID_WHEEL, 0600, "ce%d", b->num*NCHAN+c->num); } #if __FreeBSD_version >= 504000 ce_ln[2] = '0' + unit; mtx_init (&bd->ce_mtx, ce_ln, MTX_NETWORK_LOCK, MTX_DEF|MTX_RECURSE); #endif CE_LOCK (bd); TAU32_EnableInterrupts(b->ddk.pControllerObject); adapter[unit] = b; CE_UNLOCK (bd); splx (s); return 0; } static int ce_detach (device_t dev) { bdrv_t *bd = device_get_softc (dev); ce_board_t *b = bd->board; ce_chan_t *c; int s; #if __FreeBSD_version >= 504000 KASSERT (mtx_initialized (&bd->ce_mtx), ("ce mutex not initialized")); #endif s = splimp (); CE_LOCK (bd); /* Check if the device is busy (open). */ for (c = b->chan; c < b->chan + NCHAN; ++c) { drv_t *d = (drv_t*) c->sys; /* XXX Non existen chan! */ if (! d || ! d->chan) continue; if (d->running) { CE_UNLOCK (bd); splx (s); return EBUSY; } } /* Ok, we can unload driver */ /* At first we should disable interrupts */ ce_destroy = 1; TAU32_DisableInterrupts(b->ddk.pControllerObject); callout_stop (&led_timo[b->num]); for (c = b->chan; c < b->chan + NCHAN; ++c) { drv_t *d = (drv_t*) c->sys; if (! d || ! d->chan) continue; callout_stop (&d->timeout_handle); #ifndef NETGRAPH /* Detach from the packet filter list of interfaces. */ bpfdetach (d->ifp); /* Detach from the sync PPP list. */ sppp_detach (d->ifp); /* Detach from the system list of interfaces. */ if_detach (d->ifp); #if __FreeBSD_version > 600031 if_free(d->ifp); #else free (d->ifp, M_DEVBUF); #endif IF_DRAIN (&d->rqueue); #if __FreeBSD_version >= 500000 mtx_destroy (&d->rqueue.ifq_mtx); #endif #else #if __FreeBSD_version >= 500000 if (d->node) { ng_rmnode_self (d->node); NG_NODE_UNREF (d->node); d->node = NULL; } IF_DRAIN (&d->rqueue); mtx_destroy (&d->queue.ifq_mtx); mtx_destroy (&d->hi_queue.ifq_mtx); mtx_destroy (&d->rqueue.ifq_mtx); #else ng_rmnode (d->node); d->node = 0; #endif #endif destroy_dev (d->devt); } CE_UNLOCK (bd); splx (s); callout_drain (&led_timo[b->num]); /* Disable the interrupt request. */ bus_teardown_intr (dev, bd->ce_irq, bd->ce_intrhand); bus_release_resource (dev, SYS_RES_IRQ, 0, bd->ce_irq); TAU32_DestructiveHalt (b->ddk.pControllerObject, 0); bus_release_resource (dev, SYS_RES_MEMORY, PCIR_BAR(0), bd->ce_res); for (c = b->chan; c < b->chan + NCHAN; ++c) { drv_t *d = (drv_t*) c->sys; if (! d || ! d->chan) continue; callout_drain (&d->timeout_handle); channel [b->num * NCHAN + c->num] = NULL; /* Deallocate buffers. */ ce_bus_dma_mem_free (&d->dmamem); } adapter [b->num] = NULL; ce_bus_dma_mem_free (&bd->dmamem); free (b, M_DEVBUF); #if __FreeBSD_version >= 504000 mtx_destroy (&bd->ce_mtx); #endif return 0; } #ifndef NETGRAPH static void ce_ifstart (struct ifnet *ifp) { drv_t *d = ifp->if_softc; bdrv_t *bd = d->board->sys; CE_LOCK (bd); ce_start (d); CE_UNLOCK (bd); } static void ce_tlf (struct sppp *sp) { drv_t *d = SP2IFP(sp)->if_softc; CE_DEBUG2 (d, ("ce_tlf\n")); sp->pp_down (sp); } static void ce_tls (struct sppp *sp) { drv_t *d = SP2IFP(sp)->if_softc; CE_DEBUG2 (d, ("ce_tls\n")); sp->pp_up (sp); } /* * Process an ioctl request. */ static int ce_sioctl (struct ifnet *ifp, u_long cmd, caddr_t data) { drv_t *d = ifp->if_softc; bdrv_t *bd = d->board->sys; int error, s, was_up, should_be_up; #if __FreeBSD_version >= 600034 was_up = (ifp->if_drv_flags & IFF_DRV_RUNNING) != 0; #else was_up = (ifp->if_flags & IFF_RUNNING) != 0; #endif error = sppp_ioctl (ifp, cmd, data); if (error) return error; if (! (ifp->if_flags & IFF_DEBUG)) d->chan->debug = 0; else d->chan->debug = d->chan->debug_shadow; switch (cmd) { default: CE_DEBUG2 (d, ("ioctl 0x%lx\n", cmd)); return 0; case SIOCADDMULTI: CE_DEBUG2 (d, ("ioctl SIOCADDMULTI\n")); return 0; case SIOCDELMULTI: CE_DEBUG2 (d, ("ioctl SIOCDELMULTI\n")); return 0; case SIOCSIFFLAGS: CE_DEBUG2 (d, ("ioctl SIOCSIFFLAGS\n")); break; case SIOCSIFADDR: CE_DEBUG2 (d, ("ioctl SIOCSIFADDR\n")); break; } /* We get here only in case of SIFFLAGS or SIFADDR. */ s = splimp (); CE_LOCK (bd); #if __FreeBSD_version >= 600034 should_be_up = (ifp->if_drv_flags & IFF_DRV_RUNNING) != 0; #else should_be_up = (ifp->if_flags & IFF_RUNNING) != 0; #endif if (! was_up && should_be_up) { /* Interface goes up -- start it. */ ce_up (d); ce_start (d); } else if (was_up && ! should_be_up) { /* Interface is going down -- stop it. */ /* if ((IFP2SP(ifp)->pp_flags & PP_FR) || (ifp->if_flags & PP_CISCO))*/ ce_down (d); } CE_DEBUG (d, ("ioctl 0x%lx p4\n", cmd)); CE_UNLOCK (bd); splx (s); return 0; } /* * Initialization of interface. * It seems to be never called by upper level? */ static void ce_initialize (void *softc) { drv_t *d = softc; CE_DEBUG (d, ("ce_initialize\n")); } #endif /*NETGRAPH*/ /* * Stop the interface. Called on splimp(). */ static void ce_down (drv_t *d) { CE_DEBUG (d, ("ce_down\n")); /* Interface is going down -- stop it. */ ce_set_dtr (d->chan, 0); ce_set_rts (d->chan, 0); d->running = 0; callout_stop (&d->timeout_handle); } /* * Start the interface. Called on splimp(). */ static void ce_up (drv_t *d) { CE_DEBUG (d, ("ce_up\n")); ce_set_dtr (d->chan, 1); ce_set_rts (d->chan, 1); d->running = 1; } /* * Start output on the interface. Get another datagram to send * off of the interface queue, and copy it to the interface * before starting the output. */ static void ce_send (drv_t *d) { struct mbuf *m; u_short len; CE_DEBUG2 (d, ("ce_send\n")); /* No output if the interface is down. */ if (! d->running) return; while (ce_transmit_space (d->chan)) { /* Get the packet to send. */ #ifdef NETGRAPH IF_DEQUEUE (&d->hi_queue, m); if (! m) IF_DEQUEUE (&d->queue, m); #else m = sppp_dequeue (d->ifp); #endif if (! m) return; #ifndef NETGRAPH #if __FreeBSD_version >= 500000 BPF_MTAP (d->ifp, m); #else if (d->ifp->if_bpf) bpf_mtap (d->ifp, m); #endif #endif #if __FreeBSD_version >= 490000 len = m_length (m, NULL); #else len = m->m_pkthdr.len; #endif if (len >= BUFSZ) printf ("%s: too long packet: %d bytes: ", d->name, len); else if (! m->m_next) ce_send_packet (d->chan, (u_char*) mtod (m, caddr_t), len, 0); else { ce_buf_item_t *item = (ce_buf_item_t*)d->chan->tx_queue; m_copydata (m, 0, len, item->buf); ce_send_packet (d->chan, item->buf, len, 0); } m_freem (m); /* Set up transmit timeout, if the transmit ring is not empty.*/ d->timeout = 10; } #ifndef NETGRAPH #if __FreeBSD_version >= 600034 d->ifp->if_flags |= IFF_DRV_OACTIVE; #else d->ifp->if_flags |= IFF_OACTIVE; #endif #endif } /* * Start output on the interface. * Always called on splimp(). */ static void ce_start (drv_t *d) { if (d->running) { if (! d->chan->dtr) ce_set_dtr (d->chan, 1); if (! d->chan->rts) ce_set_rts (d->chan, 1); ce_send (d); callout_reset (&d->timeout_handle, hz, ce_watchdog_timer, d); } } /* * Handle transmit timeouts. * Recover after lost transmit interrupts. * Always called on splimp(). */ static void ce_watchdog (drv_t *d) { CE_DEBUG (d, ("device timeout\n")); if (d->running) { ce_set_dtr (d->chan, 0); ce_set_rts (d->chan, 0); /* ce_stop_chan (d->chan);*/ /* ce_start_chan (d->chan, 1, 1, 0, 0);*/ ce_set_dtr (d->chan, 1); ce_set_rts (d->chan, 1); ce_start (d); } } static void ce_watchdog_timer (void *arg) { drv_t *d = arg; bdrv_t *bd = d->board->sys; CE_LOCK(bd); if (d->timeout == 1) ce_watchdog (d); if (d->timeout) d->timeout--; callout_reset (&d->timeout_handle, hz, ce_watchdog_timer, d); CE_UNLOCK(bd); } static void ce_transmit (ce_chan_t *c, void *attachment, int len) { drv_t *d = c->sys; d->timeout = 0; #ifndef NETGRAPH if_inc_counter(d->ifp, IFCOUNTER_OPACKETS, 1); #if __FreeBSD_version >= 600034 d->ifp->if_flags &= ~IFF_DRV_OACTIVE; #else d->ifp->if_flags &= ~IFF_OACTIVE; #endif #endif ce_start (d); } static void ce_receive (ce_chan_t *c, unsigned char *data, int len) { drv_t *d = c->sys; struct mbuf *m; if (! d->running) return; m = makembuf (data, len); if (! m) { CE_DEBUG (d, ("no memory for packet\n")); #ifndef NETGRAPH if_inc_counter(d->ifp, IFCOUNTER_IQDROPS, 1); #endif return; } if (c->debug > 1) m_print (m, 0); #ifdef NETGRAPH m->m_pkthdr.rcvif = 0; IF_ENQUEUE(&d->rqueue, m); #else if_inc_counter(d->ifp, IFCOUNTER_IPACKETS, 1); m->m_pkthdr.rcvif = d->ifp; /* Check if there's a BPF listener on this interface. * If so, hand off the raw packet to bpf. */ BPF_MTAP(d->ifp, m); IF_ENQUEUE(&d->rqueue, m); #endif } static void ce_error (ce_chan_t *c, int data) { drv_t *d = c->sys; switch (data) { case CE_FRAME: CE_DEBUG (d, ("frame error\n")); #ifndef NETGRAPH if_inc_counter(d->ifp, IFCOUNTER_IERRORS, 1); #endif break; case CE_CRC: CE_DEBUG (d, ("crc error\n")); #ifndef NETGRAPH if_inc_counter(d->ifp, IFCOUNTER_IERRORS, 1); #endif break; case CE_OVERRUN: CE_DEBUG (d, ("overrun error\n")); #ifndef NETGRAPH if_inc_counter(d->ifp, IFCOUNTER_COLLISIONS, 1); if_inc_counter(d->ifp, IFCOUNTER_IERRORS, 1); #endif break; case CE_OVERFLOW: CE_DEBUG (d, ("overflow error\n")); #ifndef NETGRAPH if_inc_counter(d->ifp, IFCOUNTER_IERRORS, 1); #endif break; case CE_UNDERRUN: CE_DEBUG (d, ("underrun error\n")); d->timeout = 0; #ifndef NETGRAPH if_inc_counter(d->ifp, IFCOUNTER_OERRORS, 1); #if __FreeBSD_version >= 600034 d->ifp->if_flags &= ~IFF_DRV_OACTIVE; #else d->ifp->if_flags &= ~IFF_OACTIVE; #endif #endif ce_start (d); break; default: CE_DEBUG (d, ("error #%d\n", data)); break; } } /* * You also need read, write, open, close routines. * This should get you started */ #if __FreeBSD_version < 500000 static int ce_open (dev_t dev, int oflags, int devtype, struct proc *p) #else static int ce_open (struct cdev *dev, int oflags, int devtype, struct thread *td) #endif { int unit = dev2unit (dev); drv_t *d; if (unit >= NBRD*NCHAN || ! (d = channel[unit])) return ENXIO; CE_DEBUG2 (d, ("ce_open\n")); return 0; } /* * Only called on the LAST close. */ #if __FreeBSD_version < 500000 static int ce_close (dev_t dev, int fflag, int devtype, struct proc *p) #else static int ce_close (struct cdev *dev, int fflag, int devtype, struct thread *td) #endif { drv_t *d = channel [dev2unit (dev)]; CE_DEBUG2 (d, ("ce_close\n")); return 0; } static int ce_modem_status (ce_chan_t *c) { drv_t *d = c->sys; bdrv_t *bd = d->board->sys; int status, s; status = d->running ? TIOCM_LE : 0; s = splimp (); CE_LOCK (bd); if (ce_get_cd (c)) status |= TIOCM_CD; if (ce_get_cts (c)) status |= TIOCM_CTS; if (ce_get_dsr (c)) status |= TIOCM_DSR; if (c->dtr) status |= TIOCM_DTR; if (c->rts) status |= TIOCM_RTS; CE_UNLOCK (bd); splx (s); return status; } #if __FreeBSD_version < 500000 static int ce_ioctl (dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p) #else static int ce_ioctl (struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td) #endif { drv_t *d = channel [dev2unit (dev)]; bdrv_t *bd = d->board->sys; ce_chan_t *c = d->chan; struct serial_statistics *st; struct e1_statistics *opte1; int error, s; char mask[16]; switch (cmd) { case SERIAL_GETREGISTERED: CE_DEBUG2 (d, ("ioctl: getregistered\n")); bzero (mask, sizeof(mask)); for (s=0; sifp)->pp_flags & PP_FR) ? "fr" : (d->ifp->if_flags & PP_CISCO) ? "cisco" : "ppp"); return 0; case SERIAL_SETPROTO: CE_DEBUG2 (d, ("ioctl: setproto\n")); /* Only for superuser! */ #if __FreeBSD_version < 500000 error = suser (p); #elif __FreeBSD_version < 700000 error = suser (td); #else error = priv_check (td, PRIV_DRIVER); #endif if (error) return error; #if __FreeBSD_version >= 600034 if (d->ifp->if_flags & IFF_DRV_RUNNING) #else if (d->ifp->if_flags & IFF_RUNNING) #endif return EBUSY; if (! strcmp ("cisco", (char*)data)) { IFP2SP(d->ifp)->pp_flags &= ~(PP_FR); IFP2SP(d->ifp)->pp_flags |= PP_KEEPALIVE; d->ifp->if_flags |= PP_CISCO; #if PP_FR != 0 } else if (! strcmp ("fr", (char*)data)) { d->ifp->if_flags &= ~(PP_CISCO); IFP2SP(d->ifp)->pp_flags |= PP_FR | PP_KEEPALIVE; #endif } else if (! strcmp ("ppp", (char*)data)) { IFP2SP(d->ifp)->pp_flags &= ~PP_FR; IFP2SP(d->ifp)->pp_flags &= ~PP_KEEPALIVE; d->ifp->if_flags &= ~(PP_CISCO); } else return EINVAL; return 0; case SERIAL_GETKEEPALIVE: CE_DEBUG2 (d, ("ioctl: getkeepalive\n")); if ((IFP2SP(d->ifp)->pp_flags & PP_FR) || (d->ifp->if_flags & PP_CISCO)) return EINVAL; *(int*)data = (IFP2SP(d->ifp)->pp_flags & PP_KEEPALIVE) ? 1 : 0; return 0; case SERIAL_SETKEEPALIVE: CE_DEBUG2 (d, ("ioctl: setkeepalive\n")); /* Only for superuser! */ #if __FreeBSD_version < 500000 error = suser (p); #elif __FreeBSD_version < 700000 error = suser (td); #else error = priv_check (td, PRIV_DRIVER); #endif if (error) return error; if ((IFP2SP(d->ifp)->pp_flags & PP_FR) || (d->ifp->if_flags & PP_CISCO)) return EINVAL; s = splimp (); CE_LOCK (bd); if (*(int*)data) IFP2SP(d->ifp)->pp_flags |= PP_KEEPALIVE; else IFP2SP(d->ifp)->pp_flags &= ~PP_KEEPALIVE; CE_UNLOCK (bd); splx (s); return 0; #endif /*NETGRAPH*/ case SERIAL_GETMODE: CE_DEBUG2 (d, ("ioctl: getmode\n")); *(int*)data = SERIAL_HDLC; return 0; case SERIAL_SETMODE: /* Only for superuser! */ #if __FreeBSD_version < 500000 error = suser (p); #elif __FreeBSD_version < 700000 error = suser (td); #else error = priv_check (td, PRIV_DRIVER); #endif if (error) return error; if (*(int*)data != SERIAL_HDLC) return EINVAL; return 0; case SERIAL_GETCFG: CE_DEBUG2 (d, ("ioctl: getcfg\n")); *(char*)data = 'c'; return 0; case SERIAL_SETCFG: CE_DEBUG2 (d, ("ioctl: setcfg\n")); #if __FreeBSD_version < 500000 error = suser (p); #elif __FreeBSD_version < 700000 error = suser (td); #else error = priv_check (td, PRIV_DRIVER); #endif if (error) return error; if (*((char*)data) != 'c') return EINVAL; return 0; case SERIAL_GETSTAT: CE_DEBUG2 (d, ("ioctl: getstat\n")); st = (struct serial_statistics*) data; st->rintr = c->rintr; st->tintr = c->tintr; st->mintr = 0; st->ibytes = c->ibytes; st->ipkts = c->ipkts; st->obytes = c->obytes; st->opkts = c->opkts; st->ierrs = c->overrun + c->frame + c->crc; st->oerrs = c->underrun; return 0; case SERIAL_GETESTAT: CE_DEBUG2 (d, ("ioctl: getestat\n")); if (c->type != T_E1) return EINVAL; opte1 = (struct e1_statistics*) data; opte1->status = 0; if (c->status & ESTS_NOALARM) opte1->status |= E1_NOALARM; if (c->status & ESTS_LOS) opte1->status |= E1_LOS; if (c->status & ESTS_LOF) opte1->status |= E1_LOF; if (c->status & ESTS_AIS) opte1->status |= E1_AIS; if (c->status & ESTS_LOMF) opte1->status |= E1_LOMF; if (c->status & ESTS_AIS16) opte1->status |= E1_AIS16; if (c->status & ESTS_FARLOF) opte1->status |= E1_FARLOF; if (c->status & ESTS_FARLOMF) opte1->status |= E1_FARLOMF; if (c->status & ESTS_TSTREQ) opte1->status |= E1_TSTREQ; if (c->status & ESTS_TSTERR) opte1->status |= E1_TSTERR; opte1->cursec = c->cursec; opte1->totsec = c->totsec + c->cursec; opte1->currnt.bpv = c->currnt.bpv; opte1->currnt.fse = c->currnt.fse; opte1->currnt.crce = c->currnt.crce; opte1->currnt.rcrce = c->currnt.rcrce; opte1->currnt.uas = c->currnt.uas; opte1->currnt.les = c->currnt.les; opte1->currnt.es = c->currnt.es; opte1->currnt.bes = c->currnt.bes; opte1->currnt.ses = c->currnt.ses; opte1->currnt.oofs = c->currnt.oofs; opte1->currnt.css = c->currnt.css; opte1->currnt.dm = c->currnt.dm; opte1->total.bpv = c->total.bpv + c->currnt.bpv; opte1->total.fse = c->total.fse + c->currnt.fse; opte1->total.crce = c->total.crce + c->currnt.crce; opte1->total.rcrce = c->total.rcrce + c->currnt.rcrce; opte1->total.uas = c->total.uas + c->currnt.uas; opte1->total.les = c->total.les + c->currnt.les; opte1->total.es = c->total.es + c->currnt.es; opte1->total.bes = c->total.bes + c->currnt.bes; opte1->total.ses = c->total.ses + c->currnt.ses; opte1->total.oofs = c->total.oofs + c->currnt.oofs; opte1->total.css = c->total.css + c->currnt.css; opte1->total.dm = c->total.dm + c->currnt.dm; for (s=0; s<48; ++s) { opte1->interval[s].bpv = c->interval[s].bpv; opte1->interval[s].fse = c->interval[s].fse; opte1->interval[s].crce = c->interval[s].crce; opte1->interval[s].rcrce = c->interval[s].rcrce; opte1->interval[s].uas = c->interval[s].uas; opte1->interval[s].les = c->interval[s].les; opte1->interval[s].es = c->interval[s].es; opte1->interval[s].bes = c->interval[s].bes; opte1->interval[s].ses = c->interval[s].ses; opte1->interval[s].oofs = c->interval[s].oofs; opte1->interval[s].css = c->interval[s].css; opte1->interval[s].dm = c->interval[s].dm; } return 0; case SERIAL_CLRSTAT: CE_DEBUG2 (d, ("ioctl: clrstat\n")); /* Only for superuser! */ #if __FreeBSD_version < 500000 error = suser (p); #elif __FreeBSD_version < 700000 error = suser (td); #else error = priv_check (td, PRIV_DRIVER); #endif if (error) return error; c->rintr = 0; c->tintr = 0; c->ibytes = 0; c->obytes = 0; c->ipkts = 0; c->opkts = 0; c->overrun = 0; c->frame = 0; c->crc = 0; c->underrun = 0; bzero (&c->currnt, sizeof (c->currnt)); bzero (&c->total, sizeof (c->total)); bzero (c->interval, sizeof (c->interval)); return 0; case SERIAL_GETLOOP: CE_DEBUG2 (d, ("ioctl: getloop\n")); if (c->type != T_E1) return EINVAL; *(int*)data = c->lloop; return 0; case SERIAL_SETLOOP: CE_DEBUG2 (d, ("ioctl: setloop\n")); if (c->type != T_E1) return EINVAL; /* Only for superuser! */ #if __FreeBSD_version < 500000 error = suser (p); #elif __FreeBSD_version < 700000 error = suser (td); #else error = priv_check (td, PRIV_DRIVER); #endif if (error) return error; s = splimp (); CE_LOCK (bd); ce_set_lloop (c, *(int*)data); CE_UNLOCK (bd); splx (s); return 0; case SERIAL_GETRLOOP: CE_DEBUG2 (d, ("ioctl: getrloop\n")); if (c->type != T_E1) return EINVAL; *(int*)data = c->rloop; return 0; case SERIAL_SETRLOOP: CE_DEBUG2 (d, ("ioctl: setloop\n")); if (c->type != T_E1) return EINVAL; /* Only for superuser! */ #if __FreeBSD_version < 500000 error = suser (p); #elif __FreeBSD_version < 700000 error = suser (td); #else error = priv_check (td, PRIV_DRIVER); #endif if (error) return error; s = splimp (); CE_LOCK (bd); ce_set_rloop (c, *(int*)data); CE_UNLOCK (bd); splx (s); return 0; case SERIAL_GETDEBUG: CE_DEBUG2 (d, ("ioctl: getdebug\n")); *(int*)data = d->chan->debug; return 0; case SERIAL_SETDEBUG: CE_DEBUG2 (d, ("ioctl: setdebug\n")); /* Only for superuser! */ #if __FreeBSD_version < 500000 error = suser (p); #elif __FreeBSD_version < 700000 error = suser (td); #else error = priv_check (td, PRIV_DRIVER); #endif if (error) return error; #ifndef NETGRAPH /* * The debug_shadow is always greater than zero for logic * simplicity. For switching debug off the IFF_DEBUG is * responsible. */ d->chan->debug_shadow = (*(int*)data) ? (*(int*)data) : 1; if (d->ifp->if_flags & IFF_DEBUG) d->chan->debug = d->chan->debug_shadow; #else d->chan->debug = *(int*)data; #endif return 0; case SERIAL_GETBAUD: CE_DEBUG2 (d, ("ioctl: getbaud\n")); *(long*)data = c->baud; return 0; case SERIAL_SETBAUD: CE_DEBUG2 (d, ("ioctl: setbaud\n")); if (c->type != T_E1 || !c->unfram) return EINVAL; /* Only for superuser! */ #if __FreeBSD_version < 500000 error = suser (p); #elif __FreeBSD_version < 700000 error = suser (td); #else error = priv_check (td, PRIV_DRIVER); #endif if (error) return error; s = splimp (); CE_LOCK (bd); ce_set_baud (c, *(long*)data); CE_UNLOCK (bd); splx (s); return 0; case SERIAL_GETTIMESLOTS: CE_DEBUG2 (d, ("ioctl: gettimeslots\n")); if ((c->type != T_E1 || c->unfram) && c->type != T_DATA) return EINVAL; *(u_long*)data = c->ts; return 0; case SERIAL_SETTIMESLOTS: CE_DEBUG2 (d, ("ioctl: settimeslots\n")); /* Only for superuser! */ #if __FreeBSD_version < 500000 error = suser (p); #elif __FreeBSD_version < 700000 error = suser (td); #else error = priv_check (td, PRIV_DRIVER); #endif if (error) return error; if ((c->type != T_E1 || c->unfram) && c->type != T_DATA) return EINVAL; s = splimp (); CE_LOCK (bd); ce_set_ts (c, *(u_long*)data); CE_UNLOCK (bd); splx (s); return 0; case SERIAL_GETHIGAIN: CE_DEBUG2 (d, ("ioctl: gethigain\n")); if (c->type != T_E1) return EINVAL; *(int*)data = c->higain; return 0; case SERIAL_SETHIGAIN: CE_DEBUG2 (d, ("ioctl: sethigain\n")); if (c->type != T_E1) return EINVAL; /* Only for superuser! */ #if __FreeBSD_version < 500000 error = suser (p); #elif __FreeBSD_version < 700000 error = suser (td); #else error = priv_check (td, PRIV_DRIVER); #endif if (error) return error; s = splimp (); CE_LOCK (bd); ce_set_higain (c, *(int*)data); CE_UNLOCK (bd); splx (s); return 0; case SERIAL_GETPHONY: CE_DEBUG2 (d, ("ioctl: getphony\n")); *(int*)data = c->phony; return 0; case SERIAL_SETPHONY: CE_DEBUG2 (d, ("ioctl: setphony\n")); /* Only for superuser! */ #if __FreeBSD_version < 500000 error = suser (p); #elif __FreeBSD_version < 700000 error = suser (td); #else error = priv_check (td, PRIV_DRIVER); #endif if (error) return error; s = splimp (); CE_LOCK (bd); ce_set_phony (c, *(int*)data); CE_UNLOCK (bd); splx (s); return 0; case SERIAL_GETUNFRAM: CE_DEBUG2 (d, ("ioctl: getunfram\n")); if (c->type != T_E1 || c->num != 0) return EINVAL; *(int*)data = c->unfram; return 0; case SERIAL_SETUNFRAM: CE_DEBUG2 (d, ("ioctl: setunfram\n")); if (c->type != T_E1 || c->num != 0) return EINVAL; /* Only for superuser! */ #if __FreeBSD_version < 500000 error = suser (p); #elif __FreeBSD_version < 700000 error = suser (td); #else error = priv_check (td, PRIV_DRIVER); #endif if (error) return error; s = splimp (); CE_LOCK (bd); ce_set_unfram (c, *(int*)data); CE_UNLOCK (bd); splx (s); return 0; case SERIAL_GETSCRAMBLER: CE_DEBUG2 (d, ("ioctl: getscrambler\n")); if (!c->unfram) return EINVAL; *(int*)data = c->scrambler; return 0; case SERIAL_SETSCRAMBLER: CE_DEBUG2 (d, ("ioctl: setscrambler\n")); /* Only for superuser! */ #if __FreeBSD_version < 500000 error = suser (p); #elif __FreeBSD_version < 700000 error = suser (td); #else error = priv_check (td, PRIV_DRIVER); #endif if (error) return error; if (!c->unfram) return EINVAL; s = splimp (); CE_LOCK (bd); ce_set_scrambler (c, *(int*)data); CE_UNLOCK (bd); splx (s); return 0; case SERIAL_GETMONITOR: CE_DEBUG2 (d, ("ioctl: getmonitor\n")); if (c->type != T_E1) return EINVAL; *(int*)data = c->monitor; return 0; case SERIAL_SETMONITOR: CE_DEBUG2 (d, ("ioctl: setmonitor\n")); /* Only for superuser! */ #if __FreeBSD_version < 500000 error = suser (p); #elif __FreeBSD_version < 700000 error = suser (td); #else error = priv_check (td, PRIV_DRIVER); #endif if (error) return error; if (c->type != T_E1) return EINVAL; s = splimp (); CE_LOCK (bd); ce_set_monitor (c, *(int*)data); CE_UNLOCK (bd); splx (s); return 0; case SERIAL_GETUSE16: CE_DEBUG2 (d, ("ioctl: getuse16\n")); if (c->type != T_E1 || c->unfram) return EINVAL; *(int*)data = c->use16; return 0; case SERIAL_SETUSE16: CE_DEBUG2 (d, ("ioctl: setuse16\n")); /* Only for superuser! */ #if __FreeBSD_version < 500000 error = suser (p); #elif __FreeBSD_version < 700000 error = suser (td); #else error = priv_check (td, PRIV_DRIVER); #endif if (error) return error; if (c->type != T_E1) return EINVAL; s = splimp (); CE_LOCK (bd); ce_set_use16 (c, *(int*)data); CE_UNLOCK (bd); splx (s); return 0; case SERIAL_GETCRC4: CE_DEBUG2 (d, ("ioctl: getcrc4\n")); if (c->type != T_E1 || c->unfram) return EINVAL; *(int*)data = c->crc4; return 0; case SERIAL_SETCRC4: CE_DEBUG2 (d, ("ioctl: setcrc4\n")); /* Only for superuser! */ #if __FreeBSD_version < 500000 error = suser (p); #elif __FreeBSD_version < 700000 error = suser (td); #else error = priv_check (td, PRIV_DRIVER); #endif if (error) return error; if (c->type != T_E1 || c->unfram) return EINVAL; s = splimp (); CE_LOCK (bd); ce_set_crc4 (c, *(int*)data); CE_UNLOCK (bd); splx (s); return 0; case SERIAL_GETCLK: CE_DEBUG2 (d, ("ioctl: getclk\n")); if (c->type != T_E1) return EINVAL; switch (c->gsyn) { default: *(int*)data = E1CLK_INTERNAL; break; case GSYN_RCV: *(int*)data = E1CLK_RECEIVE; break; case GSYN_RCV0: *(int*)data = E1CLK_RECEIVE_CHAN0; break; case GSYN_RCV1: *(int*)data = E1CLK_RECEIVE_CHAN1; break; } return 0; case SERIAL_SETCLK: CE_DEBUG2 (d, ("ioctl: setclk\n")); /* Only for superuser! */ #if __FreeBSD_version < 500000 error = suser (p); #elif __FreeBSD_version < 700000 error = suser (td); #else error = priv_check (td, PRIV_DRIVER); #endif if (error) return error; if (c->type != T_E1) return EINVAL; s = splimp (); CE_LOCK (bd); switch (*(int*)data) { default: ce_set_gsyn (c, GSYN_INT); break; case E1CLK_RECEIVE: ce_set_gsyn (c, GSYN_RCV); break; case E1CLK_RECEIVE_CHAN0: ce_set_gsyn (c, GSYN_RCV0); break; case E1CLK_RECEIVE_CHAN1: ce_set_gsyn (c, GSYN_RCV1); break; } CE_UNLOCK (bd); splx (s); return 0; #if 0 case SERIAL_RESET: CE_DEBUG2 (d, ("ioctl: reset\n")); /* Only for superuser! */ #if __FreeBSD_version < 500000 error = suser (p); #elif __FreeBSD_version < 700000 error = suser (td); #else error = priv_check (td, PRIV_DRIVER); #endif if (error) return error; s = splimp (); CE_LOCK (bd); /* ce_reset (c->board, 0, 0);*/ CE_UNLOCK (bd); splx (s); return 0; case SERIAL_HARDRESET: CE_DEBUG2 (d, ("ioctl: hardreset\n")); /* Only for superuser! */ #if __FreeBSD_version < 500000 error = suser (p); #elif __FreeBSD_version < 700000 error = suser (td); #else error = priv_check (td, PRIV_DRIVER); #endif if (error) return error; s = splimp (); CE_LOCK (bd); /* hard_reset (c->board); */ CE_UNLOCK (bd); splx (s); return 0; #endif case SERIAL_GETCABLE: CE_DEBUG2 (d, ("ioctl: getcable\n")); if (c->type != T_E1) return EINVAL; s = splimp (); CE_LOCK (bd); *(int*)data = CABLE_TP; CE_UNLOCK (bd); splx (s); return 0; case SERIAL_GETDIR: CE_DEBUG2 (d, ("ioctl: getdir\n")); if (c->type != T_E1 && c->type != T_DATA) return EINVAL; *(int*)data = c->dir; return 0; case SERIAL_SETDIR: CE_DEBUG2 (d, ("ioctl: setdir\n")); /* Only for superuser! */ #if __FreeBSD_version < 500000 error = suser (p); #elif __FreeBSD_version < 700000 error = suser (td); #else error = priv_check (td, PRIV_DRIVER); #endif if (error) return error; s = splimp (); CE_LOCK (bd); ce_set_dir (c, *(int*)data); CE_UNLOCK (bd); splx (s); return 0; case TIOCSDTR: /* Set DTR */ s = splimp (); CE_LOCK (bd); ce_set_dtr (c, 1); CE_UNLOCK (bd); splx (s); return 0; case TIOCCDTR: /* Clear DTR */ s = splimp (); CE_LOCK (bd); ce_set_dtr (c, 0); CE_UNLOCK (bd); splx (s); return 0; case TIOCMSET: /* Set DTR/RTS */ s = splimp (); CE_LOCK (bd); ce_set_dtr (c, (*(int*)data & TIOCM_DTR) ? 1 : 0); ce_set_rts (c, (*(int*)data & TIOCM_RTS) ? 1 : 0); CE_UNLOCK (bd); splx (s); return 0; case TIOCMBIS: /* Add DTR/RTS */ s = splimp (); CE_LOCK (bd); if (*(int*)data & TIOCM_DTR) ce_set_dtr (c, 1); if (*(int*)data & TIOCM_RTS) ce_set_rts (c, 1); CE_UNLOCK (bd); splx (s); return 0; case TIOCMBIC: /* Clear DTR/RTS */ s = splimp (); CE_LOCK (bd); if (*(int*)data & TIOCM_DTR) ce_set_dtr (c, 0); if (*(int*)data & TIOCM_RTS) ce_set_rts (c, 0); CE_UNLOCK (bd); splx (s); return 0; case TIOCMGET: /* Get modem status */ *(int*)data = ce_modem_status (c); return 0; } return ENOTTY; } #ifdef NETGRAPH #if __FreeBSD_version >= 500000 static int ng_ce_constructor (node_p node) { drv_t *d = NG_NODE_PRIVATE (node); #else static int ng_ce_constructor (node_p *node) { drv_t *d = (*node)->private; #endif CE_DEBUG (d, ("Constructor\n")); return EINVAL; } static int ng_ce_newhook (node_p node, hook_p hook, const char *name) { int s; #if __FreeBSD_version >= 500000 drv_t *d = NG_NODE_PRIVATE (node); #else drv_t *d = node->private; #endif bdrv_t *bd = d->board->sys; CE_DEBUG (d, ("Newhook\n")); /* Attach debug hook */ if (strcmp (name, NG_CE_HOOK_DEBUG) == 0) { #if __FreeBSD_version >= 500000 NG_HOOK_SET_PRIVATE (hook, NULL); #else hook->private = 0; #endif d->debug_hook = hook; return 0; } /* Check for raw hook */ if (strcmp (name, NG_CE_HOOK_RAW) != 0) return EINVAL; #if __FreeBSD_version >= 500000 NG_HOOK_SET_PRIVATE (hook, d); #else hook->private = d; #endif d->hook = hook; s = splimp (); CE_LOCK (bd); ce_up (d); CE_UNLOCK (bd); splx (s); return 0; } static char *format_timeslots (u_long s) { static char buf [100]; char *p = buf; int i; for (i=1; i<32; ++i) if ((s >> i) & 1) { int prev = (i > 1) & (s >> (i-1)); int next = (i < 31) & (s >> (i+1)); if (prev) { if (next) continue; *p++ = '-'; } else if (p > buf) *p++ = ','; if (i >= 10) *p++ = '0' + i / 10; *p++ = '0' + i % 10; } *p = 0; return buf; } static int print_modems (char *s, ce_chan_t *c, int need_header) { int status = ce_modem_status (c); int length = 0; if (need_header) length += sprintf (s + length, " LE DTR DSR RTS CTS CD\n"); length += sprintf (s + length, "%4s %4s %4s %4s %4s %4s\n", status & TIOCM_LE ? "On" : "-", status & TIOCM_DTR ? "On" : "-", status & TIOCM_DSR ? "On" : "-", status & TIOCM_RTS ? "On" : "-", status & TIOCM_CTS ? "On" : "-", status & TIOCM_CD ? "On" : "-"); return length; } static int print_stats (char *s, ce_chan_t *c, int need_header) { int length = 0; if (need_header) length += sprintf (s + length, " Rintr Tintr Mintr Ibytes Ipkts Ierrs Obytes Opkts Oerrs\n"); length += sprintf (s + length, "%7ld %7ld %7ld %8lu %7ld %7ld %8lu %7ld %7ld\n", c->rintr, c->tintr, 0l, (unsigned long) c->ibytes, c->ipkts, c->overrun + c->frame + c->crc, (unsigned long) c->obytes, c->opkts, c->underrun); return length; } static char *format_e1_status (u_char status) { static char buf [80]; if (status & E1_NOALARM) return "Ok"; buf[0] = 0; if (status & E1_LOS) strcat (buf, ",LOS"); if (status & E1_AIS) strcat (buf, ",AIS"); if (status & E1_LOF) strcat (buf, ",LOF"); if (status & E1_LOMF) strcat (buf, ",LOMF"); if (status & E1_FARLOF) strcat (buf, ",FARLOF"); if (status & E1_AIS16) strcat (buf, ",AIS16"); if (status & E1_FARLOMF) strcat (buf, ",FARLOMF"); if (status & E1_TSTREQ) strcat (buf, ",TSTREQ"); if (status & E1_TSTERR) strcat (buf, ",TSTERR"); if (buf[0] == ',') return buf+1; return "Unknown"; } static int print_frac (char *s, int leftalign, u_long numerator, u_long divider) { int n, length = 0; if (numerator < 1 || divider < 1) { length += sprintf (s+length, leftalign ? "/- " : " -"); return length; } n = (int) (0.5 + 1000.0 * numerator / divider); if (n < 1000) { length += sprintf (s+length, leftalign ? "/.%-3d" : " .%03d", n); return length; } *(s + length) = leftalign ? '/' : ' '; length ++; if (n >= 1000000) n = (n+500) / 1000 * 1000; else if (n >= 100000) n = (n+50) / 100 * 100; else if (n >= 10000) n = (n+5) / 10 * 10; switch (n) { case 1000: length += printf (s+length, ".999"); return length; case 10000: n = 9990; break; case 100000: n = 99900; break; case 1000000: n = 999000; break; } if (n < 10000) length += sprintf (s+length, "%d.%d", n/1000, n/10%100); else if (n < 100000) length += sprintf (s+length, "%d.%d", n/1000, n/100%10); else if (n < 1000000) length += sprintf (s+length, "%d.", n/1000); else length += sprintf (s+length, "%d", n/1000); return length; } static int print_e1_stats (char *s, ce_chan_t *c) { struct e1_counters total; u_long totsec; int length = 0; totsec = c->totsec + c->cursec; total.bpv = c->total.bpv + c->currnt.bpv; total.fse = c->total.fse + c->currnt.fse; total.crce = c->total.crce + c->currnt.crce; total.rcrce = c->total.rcrce + c->currnt.rcrce; total.uas = c->total.uas + c->currnt.uas; total.les = c->total.les + c->currnt.les; total.es = c->total.es + c->currnt.es; total.bes = c->total.bes + c->currnt.bes; total.ses = c->total.ses + c->currnt.ses; total.oofs = c->total.oofs + c->currnt.oofs; total.css = c->total.css + c->currnt.css; total.dm = c->total.dm + c->currnt.dm; length += sprintf (s + length, " Unav/Degr Bpv/Fsyn CRC/RCRC Err/Lerr Sev/Bur Oof/Slp Status\n"); /* Unavailable seconds, degraded minutes */ length += print_frac (s + length, 0, c->currnt.uas, c->cursec); length += print_frac (s + length, 1, 60 * c->currnt.dm, c->cursec); /* Bipolar violations, frame sync errors */ length += print_frac (s + length, 0, c->currnt.bpv, c->cursec); length += print_frac (s + length, 1, c->currnt.fse, c->cursec); /* CRC errors, remote CRC errors (E-bit) */ length += print_frac (s + length, 0, c->currnt.crce, c->cursec); length += print_frac (s + length, 1, c->currnt.rcrce, c->cursec); /* Errored seconds, line errored seconds */ length += print_frac (s + length, 0, c->currnt.es, c->cursec); length += print_frac (s + length, 1, c->currnt.les, c->cursec); /* Severely errored seconds, burst errored seconds */ length += print_frac (s + length, 0, c->currnt.ses, c->cursec); length += print_frac (s + length, 1, c->currnt.bes, c->cursec); /* Out of frame seconds, controlled slip seconds */ length += print_frac (s + length, 0, c->currnt.oofs, c->cursec); length += print_frac (s + length, 1, c->currnt.css, c->cursec); length += sprintf (s + length, " %s\n", format_e1_status (c->status)); /* Print total statistics. */ length += print_frac (s + length, 0, total.uas, totsec); length += print_frac (s + length, 1, 60 * total.dm, totsec); length += print_frac (s + length, 0, total.bpv, totsec); length += print_frac (s + length, 1, total.fse, totsec); length += print_frac (s + length, 0, total.crce, totsec); length += print_frac (s + length, 1, total.rcrce, totsec); length += print_frac (s + length, 0, total.es, totsec); length += print_frac (s + length, 1, total.les, totsec); length += print_frac (s + length, 0, total.ses, totsec); length += print_frac (s + length, 1, total.bes, totsec); length += print_frac (s + length, 0, total.oofs, totsec); length += print_frac (s + length, 1, total.css, totsec); length += sprintf (s + length, " -- Total\n"); return length; } static int print_chan (char *s, ce_chan_t *c) { drv_t *d = c->sys; int length = 0; length += sprintf (s + length, "ce%d", c->board->num * NCHAN + c->num); if (d->chan->debug) length += sprintf (s + length, " debug=%d", d->chan->debug); if (c->board->mux) { length += sprintf (s + length, " cfg=C"); } else { length += sprintf (s + length, " cfg=A"); } if (c->baud) length += sprintf (s + length, " %ld", c->baud); else length += sprintf (s + length, " extclock"); if (c->type == T_E1) switch (c->gsyn) { case GSYN_INT : length += sprintf (s + length, " syn=int"); break; case GSYN_RCV : length += sprintf (s + length, " syn=rcv"); break; case GSYN_RCV0 : length += sprintf (s + length, " syn=rcv0"); break; case GSYN_RCV1 : length += sprintf (s + length, " syn=rcv1"); break; } if (c->type == T_E1) length += sprintf (s + length, " higain=%s", c->higain ? "on" : "off"); length += sprintf (s + length, " loop=%s", c->lloop ? "on" : "off"); if (c->type == T_E1) length += sprintf (s + length, " ts=%s", format_timeslots (c->ts)); length += sprintf (s + length, "\n"); return length; } #if __FreeBSD_version >= 500000 static int ng_ce_rcvmsg (node_p node, item_p item, hook_p lasthook) { drv_t *d = NG_NODE_PRIVATE (node); struct ng_mesg *msg; #else static int ng_ce_rcvmsg (node_p node, struct ng_mesg *msg, const char *retaddr, struct ng_mesg **rptr) { drv_t *d = node->private; #endif struct ng_mesg *resp = NULL; int error = 0; CE_DEBUG (d, ("Rcvmsg\n")); #if __FreeBSD_version >= 500000 NGI_GET_MSG (item, msg); #endif switch (msg->header.typecookie) { default: error = EINVAL; break; case NGM_CE_COOKIE: printf ("Not implemented yet\n"); error = EINVAL; break; case NGM_GENERIC_COOKIE: switch (msg->header.cmd) { default: error = EINVAL; break; case NGM_TEXT_STATUS: { char *s; int l = 0; int dl = sizeof (struct ng_mesg) + 730; #if __FreeBSD_version >= 500000 NG_MKRESPONSE (resp, msg, dl, M_NOWAIT); if (! resp) { error = ENOMEM; break; } #else resp = malloc (M_NETGRAPH, M_NOWAIT); if (! resp) { error = ENOMEM; break; } bzero (resp, dl); #endif s = (resp)->data; if (d) { l += print_chan (s + l, d->chan); l += print_stats (s + l, d->chan, 1); l += print_modems (s + l, d->chan, 1); l += print_e1_stats (s + l, d->chan); } else l += sprintf (s + l, "Error: node not connect to channel"); #if __FreeBSD_version < 500000 (resp)->header.version = NG_VERSION; (resp)->header.arglen = strlen (s) + 1; (resp)->header.token = msg->header.token; (resp)->header.typecookie = NGM_CE_COOKIE; (resp)->header.cmd = msg->header.cmd; #endif strncpy ((resp)->header.cmdstr, "status", NG_CMDSTRSIZ); } break; } break; } #if __FreeBSD_version >= 500000 NG_RESPOND_MSG (error, node, item, resp); NG_FREE_MSG (msg); #else *rptr = resp; free (msg, M_NETGRAPH); #endif return error; } #if __FreeBSD_version >= 500000 static int ng_ce_rcvdata (hook_p hook, item_p item) { drv_t *d = NG_NODE_PRIVATE (NG_HOOK_NODE(hook)); struct mbuf *m; #if __FreeBSD_version < 502120 meta_p meta; #else struct ng_tag_prio *ptag; #endif #else static int ng_ce_rcvdata (hook_p hook, struct mbuf *m, meta_p meta) { drv_t *d = hook->node->private; #endif bdrv_t *bd = d->board->sys; struct ifqueue *q; int s; CE_DEBUG2 (d, ("Rcvdata\n")); #if __FreeBSD_version >= 500000 NGI_GET_M (item, m); #if __FreeBSD_version < 502120 NGI_GET_META (item, meta); #endif NG_FREE_ITEM (item); if (! NG_HOOK_PRIVATE (hook) || ! d) { NG_FREE_M (m); #if __FreeBSD_version < 502120 NG_FREE_META (meta); #endif #else if (! hook->private || ! d) { NG_FREE_DATA (m,meta); #endif return ENETDOWN; } #if __FreeBSD_version >= 502120 /* Check for high priority data */ if ((ptag = (struct ng_tag_prio *)m_tag_locate(m, NGM_GENERIC_COOKIE, NG_TAG_PRIO, NULL)) != NULL && (ptag->priority > NG_PRIO_CUTOFF) ) q = &d->hi_queue; else q = &d->queue; #else q = (meta && meta->priority > 0) ? &d->hi_queue : &d->queue; #endif s = splimp (); CE_LOCK (bd); #if __FreeBSD_version >= 500000 IF_LOCK (q); if (_IF_QFULL (q)) { IF_UNLOCK (q); CE_UNLOCK (bd); splx (s); NG_FREE_M (m); #if __FreeBSD_version < 502120 NG_FREE_META (meta); #endif return ENOBUFS; } _IF_ENQUEUE (q, m); IF_UNLOCK (q); #else if (IF_QFULL (q)) { IF_DROP (q); CE_UNLOCK (bd); splx (s); NG_FREE_DATA (m, meta); return ENOBUFS; } IF_ENQUEUE (q, m); #endif ce_start (d); CE_UNLOCK (bd); splx (s); return 0; } static int ng_ce_rmnode (node_p node) { #if __FreeBSD_version >= 500000 drv_t *d = NG_NODE_PRIVATE (node); CE_DEBUG (d, ("Rmnode\n")); if (d && d->running) { bdrv_t *bd = d->board->sys; int s = splimp (); CE_LOCK (bd); ce_down (d); CE_UNLOCK (bd); splx (s); } #ifdef KLD_MODULE #if __FreeBSD_version >= 502120 if (node->nd_flags & NGF_REALLY_DIE) { #else if (node->nd_flags & NG_REALLY_DIE) { #endif NG_NODE_SET_PRIVATE (node, NULL); NG_NODE_UNREF (node); } #if __FreeBSD_version >= 502120 NG_NODE_REVIVE(node); /* Persistent node */ #else node->nd_flags &= ~NG_INVALID; #endif #endif #else /* __FreeBSD_version < 500000 */ drv_t *d = node->private; if (d && d->running) { bdrv_t *bd = d->board->sys; int s = splimp (); CE_LOCK (bd); ce_down (d); CE_UNLOCK (bd); splx (s); } node->flags |= NG_INVALID; ng_cutlinks (node); #ifdef KLD_MODULE ng_unname (node); ng_unref (node); #endif #endif return 0; } static int ng_ce_connect (hook_p hook) { #if __FreeBSD_version >= 500000 drv_t *d = NG_NODE_PRIVATE (NG_HOOK_NODE (hook)); #else drv_t *d = hook->node->private; #endif if (d) { CE_DEBUG (d, ("Connect\n")); callout_reset (&d->timeout_handle, hz, ce_watchdog_timer, d); } return 0; } static int ng_ce_disconnect (hook_p hook) { #if __FreeBSD_version >= 500000 drv_t *d = NG_NODE_PRIVATE (NG_HOOK_NODE (hook)); #else drv_t *d = hook->node->private; #endif if (d) { CE_DEBUG (d, ("Disconnect\n")); #if __FreeBSD_version >= 500000 if (NG_HOOK_PRIVATE (hook)) #else if (hook->private) #endif { bdrv_t *bd = d->board->sys; int s = splimp (); CE_LOCK (bd); ce_down (d); CE_UNLOCK (bd); splx (s); } /* If we were wait it than it reasserted now, just stop it. */ if (!callout_drain (&d->timeout_handle)) callout_stop (&d->timeout_handle); } return 0; } #endif static int ce_modevent (module_t mod, int type, void *unused) { #if __FreeBSD_version < 500000 dev_t dev; struct cdevsw *cdsw; #endif static int load_count = 0; #if __FreeBSD_version < 500000 dev = makedev (CDEV_MAJOR, 0); #endif switch (type) { case MOD_LOAD: #if __FreeBSD_version < 500000 if (dev != NODEV && (cdsw = devsw (dev)) && cdsw->d_maj == CDEV_MAJOR) { printf ("Tau32-PCI driver is already in system\n"); return (ENXIO); } #endif #if __FreeBSD_version >= 500000 && defined NETGRAPH if (ng_newtype (&typestruct)) printf ("Failed to register ng_ce\n"); #endif ++load_count; #if __FreeBSD_version <= 500000 cdevsw_add (&ce_cdevsw); #endif #if __FreeBSD_version >= 500000 callout_init (&timeout_handle, 1); #else callout_init (&timeout_handle); #endif callout_reset (&timeout_handle, hz*5, ce_timeout, 0); break; case MOD_UNLOAD: if (load_count == 1) { printf ("Removing device entry for Tau32-PCI\n"); #if __FreeBSD_version <= 500000 cdevsw_remove (&ce_cdevsw); #endif #if __FreeBSD_version >= 500000 && defined NETGRAPH ng_rmtype (&typestruct); #endif } /* If we were wait it than it reasserted now, just stop it. * Actually we shouldn't get this condition. But code could be * changed in the future, so just be a litle paranoid. */ if (!callout_drain (&timeout_handle)) callout_stop (&timeout_handle); --load_count; break; case MOD_SHUTDOWN: break; } return 0; } #ifdef NETGRAPH #if __FreeBSD_version >= 502100 static struct ng_type typestruct = { .version = NG_ABI_VERSION, .name = NG_CE_NODE_TYPE, .constructor = ng_ce_constructor, .rcvmsg = ng_ce_rcvmsg, .shutdown = ng_ce_rmnode, .newhook = ng_ce_newhook, .connect = ng_ce_connect, .rcvdata = ng_ce_rcvdata, .disconnect = ng_ce_disconnect, }; #else /* __FreeBSD_version < 502100 */ static struct ng_type typestruct = { #if __FreeBSD_version >= 500000 NG_ABI_VERSION, #else NG_VERSION, #endif NG_CE_NODE_TYPE, ce_modevent, ng_ce_constructor, ng_ce_rcvmsg, ng_ce_rmnode, ng_ce_newhook, NULL, ng_ce_connect, ng_ce_rcvdata, #if __FreeBSD_version < 500000 NULL, #endif ng_ce_disconnect, NULL }; #endif /* __FreeBSD_version < 502100 */ #endif /*NETGRAPH*/ #if __FreeBSD_version >= 500000 #ifdef NETGRAPH MODULE_DEPEND (ng_ce, netgraph, NG_ABI_VERSION, NG_ABI_VERSION, NG_ABI_VERSION); #else MODULE_DEPEND (ce, sppp, 1, 1, 1); #endif #ifdef KLD_MODULE DRIVER_MODULE (cemod, pci, ce_driver, ce_devclass, ce_modevent, NULL); #else DRIVER_MODULE (ce, pci, ce_driver, ce_devclass, ce_modevent, NULL); #endif #else /* if __FreeBSD_version < 500000*/ #ifdef NETGRAPH DRIVER_MODULE (ce, pci, ce_driver, ce_devclass, ng_mod_event, &typestruct); #else DRIVER_MODULE (ce, pci, ce_driver, ce_devclass, ce_modevent, NULL); #endif #endif /* __FreeBSD_version < 500000 */ #endif /* NPCI */ Index: head/sys/dev/ce/machdep.h =================================================================== --- head/sys/dev/ce/machdep.h (nonexistent) +++ head/sys/dev/ce/machdep.h (revision 359181) @@ -0,0 +1,97 @@ +/*- + * Cronyx DDK: platform dependent definitions. + * + * Copyright (C) 1998-1999 Cronyx Engineering + * Author: Alexander Kvitchenko, + * + * Copyright (C) 2001-2003 Cronyx Engineering. + * Author: Roman Kurakin, + * + * This software is distributed with NO WARRANTIES, not even the implied + * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * Authors grant any other persons or organisations permission to use + * or modify this software as long as this message is kept with the software, + * all derivative works or modified versions. + * + * Cronyx Id: machdep.h,v 1.3.4.3 2003/11/27 14:21:58 rik Exp $ + * $FreeBSD$ + */ + +/* + * DOS (Borland Turbo C++ 1.0) + */ +#if defined (MSDOS) || defined (__MSDOS__) +# include +# include +# define inb(port) inportb(port) +# define inw(port) inport(port) +# define outb(port,b) outportb(port,b) +# define outw(port,w) outport(port,w) +# define GETTICKS() biostime(0,0L) +#else + +/* + * Windows NT + */ +#ifdef NDIS_MINIPORT_DRIVER +# include +# define inb(port) inp((unsigned short)(port)) +# define inw(port) inpw((unsigned short)(port)) +# define outb(port,b) outp((unsigned short)(port),b) +# define outw(port,w) outpw((unsigned short)(port),(unsigned short)(w)) +#pragma warning (disable: 4761) +#pragma warning (disable: 4242) +#pragma warning (disable: 4244) +#define ulong64 unsigned __int64 +#else + +/* + * Linux + */ +#ifdef __linux__ +# undef REALLY_SLOW_IO +# include /* should swap outb() arguments */ +# include +# include + static inline void __ddk_outb (unsigned port, unsigned char byte) + { outb (byte, port); } + static inline void __ddk_outw (unsigned port, unsigned short word) + { outw (word, port); } +# undef outb +# undef outw +# define outb(port,val) __ddk_outb(port, val) +# define outw(port,val) __ddk_outw(port, val) +# define GETTICKS() (jiffies * 200 / 11 / HZ) +#else + +/* + * FreeBSD and BSD/OS + */ +#ifdef __FreeBSD__ +# include +# include +# include +# include +# define port_t int + +#ifndef _SYS_CDEFS_H_ +#error this file needs sys/cdefs.h as a prerequisite +#endif +#endif + +#endif +#endif +#endif + +#ifndef inline +# ifdef __CC_SUPPORTS___INLINE__ +# define inline __inline__ +# else +# define inline /**/ +# endif +#endif + +#ifndef ulong64 +#define ulong64 unsigned long long +#endif Property changes on: head/sys/dev/ce/machdep.h ___________________________________________________________________ Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Index: head/sys/dev/cp/cpddk.c =================================================================== --- head/sys/dev/cp/cpddk.c (revision 359180) +++ head/sys/dev/cp/cpddk.c (revision 359181) @@ -1,6260 +1,6260 @@ /*- * Low-level subroutines for Cronyx Tau-PCI adapter. * * Copyright (C) 1999-2003 Cronyx Engineering. * Author: Serge Vakulenko, * * Copyright (C) 2000-2004 Cronyx Engineering. * Author: Roman Kurakin, * * This software is distributed with NO WARRANTIES, not even the implied * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * Authors grant any other persons or organisations a permission to use, * modify and redistribute this software in source and binary forms, * as long as this message is kept with the software, all derivative * works or modified versions. * * $Cronyx: cpddk.c,v 1.13.4.37 2004/12/11 16:14:39 rik Exp $ */ #include __FBSDID("$FreeBSD$"); -#include +#include #define CPDDK_COBF_SAFE #include #pragma pack(4) typedef struct{unsigned long l47;unsigned long l112;unsigned long l121 ;unsigned long l103;unsigned long l101;unsigned long l89;unsigned long l117;unsigned long l108;unsigned long l119;unsigned long l110; unsigned long l120;unsigned long l100;}l166;typedef struct{unsigned char j[32];unsigned char l40[32];}l72;typedef struct{unsigned long w; unsigned long l88;unsigned long l99;unsigned long t;unsigned long l915 ;}l128;typedef struct{l128 l42[4];l128 l32[64];unsigned char l589[4][ 1664];unsigned char l751[64][1664];}l211;typedef struct{unsigned long l155[4][128];unsigned long l97[4][128];unsigned long l94[128];}l172; typedef struct l181{unsigned char*x;volatile unsigned long*l123, * l124, *l82;volatile unsigned long*l130, *l102, *l135, *l75, *l132, * l147;unsigned char l73,l81,l62,l44,l48,l64,l34;unsigned char p; unsigned char f;struct l612*d;unsigned char l193;unsigned char l218; unsigned long y;unsigned char l146;unsigned char l145;unsigned char l164;unsigned char l177;unsigned char l53;unsigned char l156;unsigned char l61;unsigned char l134;unsigned long j;unsigned char l186; unsigned char l46;unsigned char l58;unsigned char l52;unsigned char l31;unsigned char l167;unsigned char v;l72 o;unsigned char l86; unsigned char l122;unsigned char l178;unsigned char l169;unsigned char l669;unsigned char l144;unsigned char l133;unsigned long l70;unsigned char l33;unsigned long l35;unsigned long l43;unsigned long l36; unsigned char l41;unsigned char l26;unsigned char l38;unsigned long l635;unsigned long l614;ulong64 l571;ulong64 l620;unsigned long l592; unsigned long l301;unsigned long l261;unsigned long l200;unsigned long l591;unsigned long l556;unsigned short t;unsigned long l161;unsigned long l55;unsigned long l105;unsigned long l109;l166 n;l166 l29;l166 l118[48];unsigned long l95;unsigned long l148;unsigned long l616; unsigned long l142;unsigned long l621;unsigned long l184[48];unsigned long*l155;unsigned long*l97;int l608,l104;unsigned char*l151[4];l128* l42;unsigned long l197[4];unsigned long l154[4];int l51;int l45; unsigned char*l136[64];l128*l32;unsigned long l207[64];unsigned long l67[64];int l28;void*l79[4];void*l700;unsigned char l914;void( *l187)( struct l181*a,void*l79,int w);void( *l171)(struct l181*a,unsigned char *l99,int w);void( *l65)(struct l181*a,int l916);}e;typedef struct l612{unsigned char*g;unsigned char p;unsigned char f;unsigned long l80 ;char l39[16];e k[4];unsigned char l30;unsigned char l174;unsigned char l125;unsigned char l116;unsigned char l137;unsigned char l83; unsigned long l563;unsigned long*l94;int l115;unsigned char l180; unsigned char*l71[8];void*l700;}s; #pragma pack() extern unsigned short cp_vendor_id;extern unsigned short cp_device_id ;unsigned short cp_init(s*b,int p,unsigned char*g);void cp_reset(s*b, l172*l60,unsigned long l69);void cp_hard_reset(s*b);unsigned long cp_regio(e*a,int l194,int z,unsigned long r);void cp_register_transmit (e*a,void( *l85)(e* ,void* ,int));void cp_register_receive(e*a,void( * l85)(e* ,unsigned char* ,int));void cp_register_error(e*a,void( *l85)( e* ,int));void cp_start_chan(e*a,int l208,int l191,l211*l49,unsigned long l69);void cp_stop_chan(e*a);void cp_start_e1(e*a);void cp_stop_e1 (e*a);int cp_transmit_space(e*a);int cp_send_packet(e*a,unsigned char *l99,int w,void*l79);int cp_interrupt(s*b);int cp_interrupt_poll(s*b ,int l217);void cp_handle_interrupt(s*b);void cp_enable_interrupt(s*b ,int m);void cp_g703_timer(e*a);void cp_e1_timer(e*a);void cp_e3_timer (e*a);void cp_led(s*b,int m);void cp_set_dtr(e*a,int m);void cp_set_rts(e*a,int m);int cp_get_dsr(e*a);int cp_get_cd(e*a);int cp_get_cts(e*a);int cp_get_txcerr(e*a);int cp_get_rxcerr(e*a);void cp_set_baud(e*a,int y);void cp_set_dpll(e*a,int m);void cp_set_nrzi(e *a,int m);void cp_set_invtxc(e*a,int m);void cp_set_invrxc(e*a,int m );void cp_set_lloop(e*a,int m);int cp_get_rloop(e*a);int cp_get_lq(e* a);int cp_get_cable(e*a);void cp_set_gsyn(e*a,int l78);void cp_set_ts (e*a,unsigned long j);void cp_set_dir(e*a,int v);void cp_set_mux(s*b, int m);void l195(s*b,int m);void cp_set_dxc(e*a,l72*l917);void cp_set_higain(e*a,int m);void cp_set_use16(e*a,int m);void cp_set_crc4 (e*a,int m);void cp_set_phony(e*a,int m);void cp_set_unfram(e*a,int m );void cp_set_scrambler(e*a,int m);void cp_set_monitor(e*a,int m); void cp_set_rloop(e*a,int m);void cp_set_ber(e*a,int m);void cp_set_cablen(e*a,int m);void cp_set_losais(e*a,int m);static void l189(e*a);static void l141(long l199,long y,int*l50,int*l54);static void l165(e*a);static void l210(e*a);static void l179(e*a,l72*l149); static void l168(s*b);unsigned short cp_vendor_id=4362;unsigned short cp_device_id=8450;static const unsigned char l527[]={79,231,255,255, 98,255,57,0,0,213,255,255,255,255,255,255,255,255,255,255,255,255,255 ,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,192,9,52,1,38,64,6,154,0,0,19,0,0,25,96,6,76, 128,140,134,85,6,200,0,0,25,96,2,100,128,97,144,1,0,15,12,48,1,50,0,0 ,178,76,70,19,112,2,76,128,9,48,137,38,208,4,64,22,152,104,2,100,128, 12,52,1,56,252,0,0,21,160,2,84,0,0,11,80,1,42,128,10,80,0,0,26,64,5, 180,0,0,10,96,1,44,64,5,176,0,0,45,192,2,0,15,18,160,2,88,0,0,21,192, 2,42,64,5,168,0,0,21,160,3,84,128,10,160,2,52,64,5,176,0,0,22,160,2, 80,252,0,11,64,0,5,2,0,31,64,0,21,152,249,0,74,152,255,0,4,128,0,5,64 ,1,0,3,128,2,16,128,2,0,1,8,0,1,40,0,19,4,0,1,80,0,7,4,0,4,64,0,1,2,0 ,3,96,254,0,4,32,2,0,4,68,0,5,10,64,2,8,0,1,8,0,12,64,0,8,144,0,1,16, 0,6,16,1,0,3,64,0,7,8,254,0,2,128,2,0,0,8,0,13,64,1,0,26,80,0,8,4,134 ,32,2,4,130,16,0,1,64,0,2,20,32,208,248,0,3,4,0,0,64,0,14,2,0,26,128, 0,8,16,0,0,2,0,0,64,16,0,8,32,252,0,2,128,5,240,32,0,13,192,130,0,26, 176,0,11,224,0,0,4,16,0,0,24,0,3,48,0,0,240,254,0,2,128,2,208,8,0,13, 64,1,0,26,80,0,8,48,18,70,18,132,18,0,1,8,0,4,32,0,0,254,0,3,131,0,0, 8,1,0,12,128,1,0,26,96,68,0,7,32,17,68,16,2,10,8,0,1,128,0,2,144,0,0, 72,249,0,3,4,240,0,14,64,2,2,0,25,128,0,8,28,128,3,52,64,4,0,1,24,0,3 ,44,8,64,253,0,3,4,0,15,128,2,0,26,128,0,8,48,16,6,4,0,0,10,0,1,96,0, 3,48,0,1,249,0,3,34,193,32,0,14,145,0,26,64,36,0,7,48,0,0,38,192,8,3, 0,1,96,17,0,2,48,10,192,253,0,2,128,0,1,8,0,10,16,40,10,64,0,6,2,0,16 ,4,32,0,0,16,0,6,160,1,1,128,16,8,128,10,0,1,96,2,0,2,132,32,160,252, 0,5,64,0,12,16,0,7,16,0,16,16,0,9,128,1,0,1,2,0,1,16,0,2,32,0,2,16,0, 0,208,254,0,2,128,5,240,32,0,10,176,32,22,192,130,0,4,60,8,0,19,176,0 ,6,128,128,0,2,242,32,22,8,0,0,112,0,5,32,254,8,0,1,128,2,208,4,0,11, 4,10,64,1,0,4,180,0,17,176,16,0,0,80,0,7,9,0,1,38,208,2,10,1,0,0,104, 8,0,2,48,16,146,255,0,3,131,0,0,8,1,0,9,16,2,140,144,1,0,5,66,0,16,32 ,16,0,0,96,68,0,7,2,0,0,4,0,0,68,12,3,0,0,8,17,0,2,32,2,48,248,0,3,4, 240,0,11,48,128,18,64,2,2,0,3,60,0,17,28,0,1,128,0,6,224,1,0,0,128,3, 241,0,0,16,0,1,120,0,3,28,32,32,255,4,0,2,4,0,0,32,0,11,32,16,128,2,0 ,23,48,0,1,128,0,7,128,0,1,6,2,64,20,0,1,96,64,0,2,48,32,121,252,0,3, 2,193,2,0,10,80,2,8,4,129,0,4,176,8,0,16,176,64,0,0,64,32,0,6,5,0,1,7 ,192,0,0,8,4,0,0,96,1,0,2,48,1,248,248,0,1,4,129,0,1,64,0,10,208,2,3, 64,2,8,0,4,2,0,16,4,2,0,0,16,0,6,160,9,0,0,128,128,0,0,4,2,0,1,96,2, 33,32,4,165,0,0,24,253,0,1,16,16,0,13,192,0,2,1,2,32,0,3,16,0,16,16, 16,0,8,128,129,0,1,2,192,64,0,2,96,32,4,132,0,1,16,128,248,0,2,128,5, 48,0,11,192,128,22,192,2,0,4,60,8,0,19,176,0,6,128,0,3,224,64,22,8,0, 0,112,64,12,8,0,0,32,0,0,104,250,4,0,1,133,2,16,0,11,192,8,10,64,1,64 ,132,0,2,52,1,0,16,48,34,0,0,80,0,7,5,1,0,0,70,212,2,10,1,0,0,8,4,140 ,128,129,0,0,4,122,254,12,0,1,6,131,192,40,0,10,192,8,141,144,162,0,0 ,64,0,3,66,0,16,32,2,0,0,96,68,0,7,2,0,0,68,209,32,12,3,0,0,104,20,72 ,0,0,5,16,1,200,248,0,1,12,0,0,4,240,0,11,112,0,0,18,64,2,56,0,3,60,0 ,17,28,8,0,0,128,0,6,224,1,0,0,128,3,48,0,0,16,0,1,120,0,0,15,232,0,0 ,61,32,112,255,8,0,1,32,4,192,0,11,192,0,0,16,0,0,2,32,64,0,21,48,8,0 ,0,128,0,7,128,0,1,6,193,128,20,0,3,12,136,1,0,1,201,249,0,1,136,0,0, 18,193,0,11,192,32,72,4,2,32,0,3,48,10,0,16,56,1,0,0,64,34,0,6,5,0,1, 39,192,8,72,4,0,0,96,130,78,128,145,144,32,232,251,0,1,4,132,0,1,8,0, 4,140,4,0,3,208,0,0,2,0,1,104,0,4,2,0,16,4,65,0,0,16,0,0,26,33,0,3, 160,49,0,0,128,64,0,0,128,2,0,2,64,129,4,0,0,164,0,0,40,254,0,1,16,0, 2,64,0,10,192,0,3,96,64,0,3,16,0,16,16,0,3,24,0,4,128,1,0,2,2,0,5,4,0 ,2,16,248,254,0,2,160,5,240,0,5,15,0,4,192,0,0,22,0,1,96,0,3,12,0,20, 176,0,0,24,4,0,3,128,128,0,2,240,0,0,22,8,0,0,120,16,12,4,0,0,32,16, 208,250,8,0,0,128,128,2,208,4,1,0,3,129,16,0,3,192,0,0,10,0,2,128,0,2 ,4,0,17,48,33,0,0,80,0,0,136,0,5,1,0,1,16,210,34,10,1,0,0,104,0,0,140 ,0,2,1,211,253,0,2,34,131,0,0,8,1,0,10,8,140,16,0,0,96,1,0,3,66,0,16, 160,8,0,0,96,68,16,0,6,2,0,0,32,4,68,12,3,0,1,128,8,16,0,0,16,1,33, 251,0,1,12,0,0,4,240,0,5,14,0,4,48,32,18,0,1,120,16,0,2,12,0,17,28,0, 1,128,0,0,14,8,0,3,224,1,0,0,128,1,240,0,0,16,0,1,120,0,0,15,0,1,60, 32,240,255,4,0,2,4,0,12,192,0,0,16,0,1,32,64,0,2,48,8,0,16,48,8,0,0, 128,0,0,16,0,5,128,0,1,4,0,1,20,0,3,12,0,3,105,249,0,2,4,66,193,36,0, 4,12,0,4,192,64,8,5,0,0,96,4,0,2,48,0,17,56,0,1,64,40,8,2,0,4,5,0,1, 38,196,32,8,5,0,0,96,18,14,8,0,0,16,18,64,253,0,1,52,128,132,192,64,0 ,10,208,0,0,2,64,139,8,132,0,3,2,0,16,4,34,0,0,144,68,0,4,137,168,17, 1,128,32,2,128,18,67,2,2,64,45,16,0,0,132,32,136,255,0,1,48,0,0,2,192 ,0,11,192,0,2,3,0,5,16,0,19,64,0,6,128,1,0,1,2,0,1,8,0,3,12,0,1,16,0, 0,240,249,0,2,128,5,224,0,13,22,192,1,0,0,32,0,2,60,32,0,17,16,0,0, 176,0,5,12,128,128,0,2,240,32,22,8,2,120,0,0,8,0,3,72,248,4,0,1,128,2 ,16,16,0,12,10,64,2,2,4,0,2,52,2,0,17,2,0,0,80,0,5,8,1,17,0,1,16,212, 4,10,1,64,104,16,68,4,0,0,48,16,2,252,4,0,0,48,2,5,208,0,0,1,0,10,8, 140,16,147,96,16,0,3,66,0,17,4,0,0,160,0,5,32,0,1,2,0,1,8,68,20,0,0, 17,2,128,44,8,0,0,32,17,224,251,0,1,60,16,4,240,0,11,48,32,18,192,3, 56,0,3,60,0,17,12,0,1,128,0,5,7,232,1,0,0,128,1,240,0,0,16,192,3,120, 0,0,15,0,1,28,0,0,120,253,4,0,0,48,0,0,4,0,0,128,0,12,16,4,3,64,0,22, 32,16,0,0,128,0,6,8,128,0,2,4,0,0,20,0,3,12,0,1,48,16,41,254,0,1,48, 33,4,192,4,0,11,64,8,1,10,36,10,0,2,48,8,0,16,176,0,1,128,0,5,36,0,0, 5,0,1,17,192,40,16,0,0,33,97,20,0,0,1,0,0,48,0,0,232,250,0,2,128,64,1 ,8,0,0,64,0,8,64,0,0,147,80,96,8,0,4,16,0,16,4,32,0,0,16,32,0,4,137, 40,4,2,128,16,0,0,4,130,68,2,2,2,0,2,132,64,176,248,0,5,64,0,10,128,0 ,0,8,0,1,96,64,0,2,48,0,17,16,0,9,128,0,2,2,4,64,0,3,32,0,2,16,0,0, 176,250,0,4,240,32,0,10,176,0,0,22,192,0,5,8,0,27,8,4,0,3,52,0,0,14,0 ,0,2,24,0,5,176,250,8,0,2,64,209,0,11,80,68,10,64,16,4,34,0,2,52,66,0 ,16,176,16,0,1,40,0,4,64,128,17,1,0,0,16,16,0,1,5,16,10,0,3,48,64,226 ,253,0,3,128,0,0,8,1,0,0,16,1,0,6,96,0,0,20,0,1,96,1,0,2,52,33,0,16, 160,0,2,68,0,4,36,8,17,0,1,64,196,2,2,0,0,17,98,34,0,2,32,2,120,251,0 ,2,128,1,240,0,1,192,0,8,128,0,0,18,192,0,0,58,32,0,2,12,0,17,28,32,0 ,0,48,0,5,15,224,64,0,0,128,1,240,32,4,196,3,120,0,3,28,8,16,251,4,0, 3,1,64,0,1,3,0,7,160,0,0,16,0,6,48,0,17,48,0,2,32,0,5,128,65,0,2,192, 0,0,2,0,1,98,0,3,48,8,113,249,0,3,68,192,0,2,19,2,0,6,64,0,0,16,0,0, 34,34,68,0,21,48,18,0,0,128,8,0,4,132,196,17,0,1,32,200,0,0,82,4,1,96 ,0,3,56,2,40,254,0,2,128,0,0,192,64,26,0,11,3,65,11,9,0,1,128,129,0,0 ,16,0,16,4,32,0,2,128,80,8,2,0,0,1,32,32,0,0,128,32,2,128,2,65,32,1,2 ,0,2,4,4,120,249,0,4,193,0,0,24,0,11,8,4,3,0,0,64,0,2,48,0,17,16,0,3, 24,0,0,1,0,1,12,136,0,2,2,0,2,4,3,0,0,32,0,2,16,0,0,56,253,0,2,128,3, 224,0,1,16,0,8,176,0,1,4,3,98,0,1,224,129,56,0,22,28,8,0,2,8,0,4,240, 0,1,4,2,26,0,5,224,252,8,0,3,17,20,24,0,9,80,68,0,0,1,33,0,0,34,0,0, 32,0,0,180,16,0,16,176,16,0,2,26,0,0,3,1,0,0,44,144,9,1,0,0,70,210,36 ,0,0,1,11,8,0,3,48,33,58,248,0,2,128,0,0,209,32,24,33,0,8,96,0,0,128, 0,0,11,66,65,0,2,52,8,0,16,32,0,3,26,1,34,1,0,0,44,0,0,5,0,1,20,2,68, 128,0,0,3,97,4,0,2,32,0,0,224,254,0,3,1,240,0,0,6,0,9,128,0,0,6,196,3 ,24,0,1,224,1,12,0,17,28,16,0,2,6,200,1,0,1,11,228,64,0,0,128,3,240,0 ,0,6,196,2,120,16,0,2,28,16,88,248,4,0,1,128,0,2,24,16,0,8,160,0,2,3, 64,0,3,48,16,0,16,48,0,3,24,8,3,0,1,12,128,1,0,1,6,0,0,32,0,1,3,96,0, 3,48,32,73,252,0,2,128,20,193,0,0,1,1,0,8,64,0,0,68,4,83,96,8,0,0,128 ,1,176,0,17,48,4,0,2,152,0,0,67,0,1,14,196,81,0,1,70,200,8,80,132,3, 97,0,3,56,2,192,248,0,2,128,0,0,2,64,0,2,8,0,6,128,0,0,131,68,0,0,72, 130,1,0,2,16,0,16,4,32,0,0,16,0,0,130,32,0,2,37,36,16,0,0,128,32,2,4, 90,68,17,4,64,137,1,0,0,4,34,248,252,0,3,4,0,12,64,0,0,8,0,25,16,0,2, 32,8,0,5,128,0,1,2,0,0,64,0,4,4,0,3,24,250,0,3,1,48,0,4,32,0,5,176,0, 2,128,96,16,0,2,12,0,20,112,0,0,14,0,3,12,4,0,3,48,0,0,30,4,3,120,16, 8,8,0,2,112,253,8,0,1,128,68,18,0,4,4,0,5,80,68,64,4,11,64,1,76,8,0,0 ,4,0,17,176,16,0,1,32,128,2,0,4,136,0,1,70,18,0,0,146,0,0,8,106,1,44, 0,2,65,114,255,0,2,128,66,200,36,0,3,64,0,5,96,0,0,64,4,144,96,2,140, 16,0,0,176,8,0,16,32,2,0,0,16,8,18,5,0,2,68,2,16,2,0,0,4,192,0,1,2, 145,0,0,128,8,4,0,1,65,184,255,0,3,1,240,0,3,24,0,6,128,0,0,6,192,0,0 ,120,16,15,0,1,60,0,17,28,32,0,0,32,64,6,0,3,11,96,0,1,128,3,242,32,6 ,192,2,120,0,0,15,0,1,12,0,0,24,249,4,0,1,128,2,192,0,11,96,0,2,3,96, 16,12,4,0,0,48,0,17,48,16,0,0,16,0,1,16,0,2,12,2,1,0,1,6,192,0,0,8,16 ,131,0,0,16,12,0,1,32,16,129,255,0,2,128,0,0,192,0,3,96,34,0,5,128,0, 1,5,11,100,0,0,140,0,1,48,0,17,48,0,1,144,34,82,0,3,44,128,1,1,0,0, 134,192,0,0,80,0,0,11,96,4,14,4,0,0,176,0,0,208,251,0,3,16,8,0,44,8,0 ,13,1,0,7,16,255,32,0,0,4,0,1,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0, 2,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,1,128,0,0,64,0,0,8,0, 0,1,32,0,0,4,128,0,0,16,0,1,80,0,0,8,0,0,1,32,0,0,4,0,0,184,252,0,65, 16,0,7,136,255,36,0,0,4,0,0,64,18,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0 ,0,16,16,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,1,72,66,80,0,0 ,8,0,0,1,32,0,0,4,128,0,0,16,0,1,64,0,0,8,0,0,1,32,0,0,4,0,0,51,249, 12,0,2,16,2,0,5,32,0,5,8,0,30,4,5,0,12,9,0,7,1,251,32,0,0,4,0,3,2,64, 0,0,8,0,1,36,0,0,4,128,0,1,64,0,2,8,0,0,1,0,18,32,0,0,4,128,0,3,64,0, 0,8,0,0,1,32,0,0,4,128,0,3,64,0,2,1,32,0,0,4,0,0,204,254,8,0,73,144, 255,32,0,0,4,0,0,32,18,68,2,64,0,0,8,0,1,33,0,0,4,128,0,0,16,128,130, 72,16,9,0,0,1,32,136,4,17,0,14,32,0,0,4,128,0,1,68,2,64,0,0,8,0,0,1, 32,0,0,4,128,0,0,16,68,128,72,0,0,8,34,1,32,0,0,4,0,0,248,254,0,4,16, 0,61,8,0,0,1,0,3,24,255,0,28,4,0,27,4,0,15,216,251,0,11,1,0,8,64,0,0, 16,0,2,16,0,24,64,0,2,128,0,0,4,0,0,128,4,0,0,4,0,5,32,0,0,4,40,251,2 ,0,3,16,0,16,8,32,0,2,32,0,32,2,128,0,5,8,0,1,64,0,0,80,250,0,3,2,0, 53,2,0,1,8,0,1,2,0,8,24,253,0,7,2,0,0,1,0,10,64,0,0,8,0,21,128,0,2,1, 0,11,17,0,2,128,0,3,128,0,0,233,250,0,1,16,0,1,32,128,0,4,1,0,2,32,2, 0,1,8,4,0,22,32,0,1,32,0,0,64,32,2,0,7,8,0,0,16,0,0,8,0,2,64,4,2,0,2, 144,249,0,1,4,0,0,2,65,0,1,16,0,3,8,0,0,4,128,0,45,65,0,10,88,253,0,1 ,12,128,0,0,52,64,0,0,16,0,0,192,0,0,2,8,0,0,4,144,1,0,1,4,8,0,22,64, 5,0,0,16,0,0,32,64,4,0,1,192,0,4,16,0,0,52,20,4,0,1,64,33,66,5,0,2, 112,250,0,2,8,134,192,0,2,65,0,1,12,0,2,4,20,192,128,192,0,0,130,0,0, 8,8,0,0,1,0,17,4,0,0,4,0,0,81,32,2,0,0,1,64,0,5,160,0,0,4,24,64,4,96, 0,0,64,2,0,1,10,56,249,0,2,32,1,16,0,1,64,0,2,4,0,4,16,0,2,128,0,26, 68,32,0,1,2,0,9,8,0,1,8,0,1,8,0,1,8,160,249,2,0,2,2,65,0,3,2,0,0,8,0, 2,32,4,64,0,1,64,0,1,64,1,32,0,20,32,0,5,8,0,6,4,0,0,2,0,1,16,0,5,72, 253,0,1,4,4,0,0,8,0,16,8,0,26,64,0,1,4,0,4,1,0,4,136,0,2,2,0,0,2,64,0 ,0,96,250,0,7,16,0,14,64,0,27,16,0,2,8,0,16,208,255,0,10,1,0,7,1,0,1, 2,9,0,21,136,0,4,2,0,3,64,0,3,2,0,6,12,0,1,24,168,249,0,9,160,0,0,2,0 ,7,64,0,0,64,0,27,2,0,8,1,1,0,10,208,248,0,5,2,0,61,8,0,0,1,0,2,160, 253,0,1,4,0,43,32,0,3,1,0,13,64,0,6,152,248,0,21,1,0,34,16,0,3,64,0, 10,200,255,2,0,5,64,0,17,64,0,41,8,2,0,1,32,128,88,253,0,22,4,0,32,2, 0,8,8,0,2,16,0,0,8,0,0,248,252,0,23,128,0,21,4,0,19,1,0,1,1,0,2,88, 255,0,1,32,0,56,32,0,0,4,0,11,248,253,0,2,128,0,1,128,0,11,128,0,5,8, 0,1,32,0,34,2,0,7,64,48,249,0,74,152,255,0,46,64,0,4,128,0,2,2,64,0,2 ,8,0,11,240,253,0,63,2,0,3,1,0,4,136,252,0,74,152,255,0,17,16,0,28,8, 0,9,64,0,1,1,0,11,144,251,0,4,4,0,46,4,0,10,8,0,8,24,255,0,21,128,0, 27,1,0,4,1,0,7,64,0,5,4,0,0,208,251,0,2,16,0,14,32,0,2,32,0,1,4,0,35, 32,0,0,1,0,7,128,80,255,0,5,1,0,13,64,0,5,64,0,17,32,0,10,1,0,11,1,0, 1,136,249,0,4,32,0,12,16,0,31,4,2,0,4,2,0,1,20,8,0,1,128,0,0,36,0,6, 251,0,18,64,0,26,64,0,11,2,0,1,8,0,9,64,240,249,0,3,8,0,0,1,0,12,32,0 ,0,4,0,3,2,64,0,35,32,0,8,96,252,0,4,1,0,13,4,0,4,128,0,1,8,0,19,4,32 ,2,128,0,0,1,0,0,1,8,0,0,4,128,0,1,128,0,3,64,0,0,64,0,2,176,253,0,0, 32,0,0,8,0,1,32,8,16,0,8,1,128,0,0,4,0,0,66,64,0,0,8,0,0,17,0,15,64,0 ,7,1,0,6,4,0,1,8,128,0,7,160,252,0,1,1,32,160,130,150,2,16,0,8,4,128, 4,16,0,0,10,74,0,0,72,0,0,165,16,0,14,32,0,3,2,84,4,192,0,0,1,0,0,6,4 ,0,0,8,128,1,128,66,2,64,1,0,0,32,0,0,64,0,2,200,248,0,0,1,32,132,0,0 ,1,88,1,4,66,96,0,3,32,4,32,0,1,128,2,163,0,0,8,4,1,32,32,80,0,14,128 ,0,1,8,64,139,0,0,28,4,160,34,0,2,32,0,1,64,17,1,20,16,133,64,0,0,4,0 ,2,32,24,250,0,4,1,0,1,16,0,0,8,0,9,128,128,0,1,4,0,18,32,0,1,4,0,0,4 ,0,0,4,2,128,16,0,6,1,0,2,1,1,0,0,4,0,3,24,255,0,0,1,4,4,0,1,64,0,1, 130,32,0,3,4,32,0,3,8,1,0,0,32,0,0,8,0,0,9,0,20,64,0,0,2,0,5,64,0,4,8 ,0,1,32,0,5,152,252,16,0,56,1,0,14,32,204,248,16,0,10,8,0,60,4,132, 251,0,4,32,0,19,64,0,0,8,0,22,4,0,5,128,0,6,64,0,4,16,0,0,200,248,0, 12,16,0,6,2,0,24,16,0,4,32,0,8,2,0,1,2,0,7,168,255,0,3,4,0,13,128,0, 29,128,0,5,16,0,8,6,0,1,16,0,3,24,252,0,46,8,64,0,8,34,4,8,128,0,7,4, 0,1,12,8,48,255,0,1,64,0,15,1,0,27,80,0,2,2,0,5,4,0,1,18,1,0,5,32,0,1 ,128,0,0,144,250,0,18,1,0,8,64,0,17,24,0,2,32,0,4,128,192,16,0,3,4,0, 0,128,0,3,64,16,16,40,252,0,3,1,0,0,128,0,39,16,0,8,8,0,10,64,0,0,2,0 ,0,32,0,0,80,253,0,1,128,0,19,128,1,0,24,64,0,8,1,0,0,128,64,0,0,64,0 ,0,8,0,1,16,0,3,200,254,0,22,1,0,22,4,0,3,32,64,0,2,4,32,0,1,128,0,0, 128,0,1,2,0,0,64,0,5,32,249,0,8,1,0,12,1,0,0,4,0,30,32,0,5,64,0,8,32, 248,252,0,1,4,129,16,208,64,2,0,1,8,0,0,141,36,8,53,146,6,208,72,0,2, 104,0,1,160,145,0,29,160,33,52,65,0,5,72,2,9,1,0,0,52,32,232,255,0,2, 8,0,0,193,0,5,12,128,0,0,48,0,0,6,192,0,3,96,0,1,128,1,0,31,48,0,6,32 ,64,4,0,1,48,0,1,253,0,1,28,0,3,22,0,1,88,0,0,12,72,0,0,48,160,7,128, 0,3,120,0,1,128,1,0,29,128,1,48,0,6,96,0,0,8,8,0,0,16,0,0,208,255,0,1 ,132,32,0,0,129,72,10,0,1,40,0,0,76,160,16,50,129,6,64,66,0,2,104,0,1 ,128,133,0,29,128,1,50,4,0,5,96,66,44,0,1,32,18,192,249,0,1,128,16,32 ,193,66,12,0,1,48,0,0,8,32,145,32,1,6,192,130,0,2,96,0,2,9,0,30,68,32 ,0,6,64,2,136,4,0,1,1,208,249,0,1,12,128,1,240,0,0,18,0,1,72,0,0,7, 104,0,0,28,32,7,240,0,3,112,0,1,224,128,0,29,96,1,28,32,0,5,24,32,15, 0,1,60,32,120,251,0,4,192,0,0,16,0,1,64,0,0,12,4,1,48,160,6,192,0,3, 96,0,1,128,1,0,29,128,1,48,16,0,5,96,32,12,4,0,2,232,248,0,1,4,17,68, 65,4,9,0,1,32,0,0,64,0,1,128,128,6,0,0,20,0,2,96,0,3,1,0,29,145,128,0 ,6,64,2,142,0,1,32,32,64,254,0,1,148,128,68,0,1,2,0,1,8,0,1,32,32,0,0 ,128,6,0,1,130,8,0,2,137,16,0,0,4,18,0,6,34,0,6,17,0,1,128,0,8,32,8,2 ,0,8,5,168,1,52,4,24,249,0,2,16,2,1,0,6,128,0,2,6,0,6,12,0,1,16,0,7, 12,0,6,6,0,24,128,1,48,0,0,40,248,0,1,56,136,3,0,1,22,0,1,88,0,1,64,0 ,1,128,7,0,1,6,4,0,2,2,0,1,32,0,7,12,0,6,6,0,3,1,0,18,12,128,1,16,16, 152,250,8,0,0,20,128,4,0,1,10,0,1,40,0,1,160,0,0,1,128,6,0,1,130,0,3, 9,4,0,0,144,16,0,6,10,0,6,5,0,12,72,0,9,128,132,1,160,0,0,203,251,0,1 ,4,16,4,0,1,12,0,1,48,0,1,32,5,0,1,6,0,2,1,0,2,77,0,1,128,16,0,6,10,0 ,6,5,0,2,16,1,0,7,72,0,9,36,128,9,2,1,89,249,0,1,44,128,2,0,1,18,0,1, 72,0,1,96,128,0,1,7,0,1,6,16,0,2,7,4,0,0,12,0,18,128,1,0,7,224,0,10, 11,226,1,60,32,64,251,4,0,0,32,16,2,0,1,16,0,1,64,0,2,1,0,1,6,0,6,4,4 ,0,1,32,0,18,6,1,0,6,128,0,10,12,2,0,0,1,0,0,9,250,0,1,176,0,0,4,0,1, 8,0,1,32,0,5,6,0,1,144,8,0,2,32,0,1,16,2,0,18,32,0,7,128,69,0,9,140,0 ,0,4,32,32,208,254,176,1,20,130,0,0,80,2,2,0,1,8,0,0,5,33,9,1,0,4,64, 0,0,1,0,33,160,33,0,9,137,0,1,52,6,40,249,128,1,0,0,32,0,0,192,64,0, 14,1,0,34,128,1,0,10,8,0,0,48,0,0,88,248,224,1,56,136,5,0,1,22,0,1,88 ,0,0,12,68,1,0,54,8,0,1,16,16,56,254,172,1,20,130,2,192,16,10,0,1,40, 0,0,32,32,16,2,0,5,11,1,0,33,128,1,2,0,9,4,0,0,32,0,0,234,255,132,1,4 ,1,3,192,66,12,0,1,48,0,0,36,40,0,0,2,0,5,8,1,0,33,128,64,0,9,4,0,2,1 ,48,253,192,1,44,160,4,240,0,0,18,0,1,72,0,0,11,224,0,6,192,0,22,2,0, 11,224,1,0,9,15,4,0,0,60,32,208,251,132,1,32,16,4,192,128,16,0,1,64,0 ,0,12,4,0,7,1,0,21,8,0,11,128,0,0,1,0,9,8,0,2,217,252,128,1,176,0,0,2 ,64,8,8,0,1,32,0,0,140,128,0,7,32,1,0,20,8,0,12,8,0,9,132,0,1,32,32, 96,251,0,1,4,130,0,2,2,0,1,72,0,0,141,160,16,4,1,0,5,72,68,0,19,1,0, 11,32,0,0,52,2,0,7,41,0,1,52,0,0,88,249,0,1,32,32,0,5,32,0,0,8,4,64,0 ,0,32,0,27,4,0,13,32,16,0,7,4,4,0,2,128,252,0,1,40,128,5,0,1,22,0,1, 88,0,0,15,96,0,0,48,32,0,5,96,0,20,1,0,12,64,60,16,0,7,12,0,1,48,0,0, 152,248,8,0,0,52,146,2,0,1,10,0,1,40,0,0,140,40,128,176,0,7,34,0,19,1 ,0,13,48,1,0,7,76,16,0,0,48,16,226,249,0,1,20,66,3,0,1,12,0,1,48,0,0, 133,2,8,2,34,0,5,96,20,0,19,16,0,12,64,148,8,0,7,8,4,0,0,48,8,48,252, 0,1,12,128,4,0,1,18,0,1,72,0,0,15,96,0,0,12,0,6,56,0,20,1,0,11,96,0,0 ,60,0,8,3,0,1,60,0,0,96,253,4,0,0,48,16,4,0,1,16,0,1,32,0,0,12,0,1,33 ,16,0,5,96,64,0,19,8,0,12,64,48,0,8,12,2,0,0,48,16,97,254,0,1,144,0,0 ,2,0,1,8,0,1,64,0,0,12,48,16,48,2,0,5,96,4,0,32,128,5,52,17,0,7,32,0, 1,48,1,232,251,0,1,4,128,0,2,2,0,3,13,32,0,0,4,1,0,2,66,0,1,40,12,0, 19,4,0,1,128,0,3,64,19,72,129,0,1,4,1,0,1,208,0,0,82,0,3,137,0,1,4,2, 56,251,0,11,12,0,0,64,0,0,16,0,3,8,0,22,4,0,7,2,1,0,1,128,1,0,2,192,0 ,1,8,0,3,8,0,0,16,16,232,249,0,2,128,5,0,1,22,0,3,15,96,0,0,48,0,6,96 ,32,0,24,1,0,3,64,0,1,224,1,0,2,192,0,0,16,0,3,8,8,0,1,16,224,248,4,0 ,0,48,133,2,0,1,10,0,3,13,32,128,48,32,0,2,128,16,0,14,128,0,6,8,0,7, 8,1,68,0,0,128,41,0,2,192,0,1,17,0,5,48,1,217,252,12,0,2,3,0,1,12,0,3 ,12,0,0,8,2,65,0,3,3,0,0,32,2,0,12,2,0,9,16,1,0,2,1,32,32,0,0,160,9,0 ,2,192,2,73,0,3,4,0,1,32,0,0,11,253,0,1,60,160,4,0,1,18,0,3,14,96,1, 12,0,3,6,0,1,88,64,0,22,128,7,0,2,64,3,120,0,1,96,0,0,1,0,1,240,0,0, 30,16,0,2,15,4,0,0,28,8,240,249,8,0,0,48,0,0,4,0,1,16,0,3,12,0,1,33,0 ,4,8,0,0,96,32,0,11,192,0,11,1,0,6,128,1,0,12,48,0,0,130,255,0,1,48, 16,2,0,1,8,0,3,12,32,16,48,10,0,2,144,0,1,96,4,0,12,1,0,9,32,0,4,32, 128,0,0,128,137,0,3,132,8,32,0,2,4,16,0,0,184,64,136,254,0,1,132,128, 0,2,2,64,3,0,1,69,32,0,0,4,1,0,2,130,0,1,96,4,1,2,0,9,64,0,10,34,8,0, 0,26,33,0,0,72,129,13,160,0,0,48,0,3,82,64,0,2,13,8,0,0,4,65,88,253,0 ,2,8,0,4,3,0,1,8,130,128,0,0,32,0,3,8,0,1,32,0,11,64,0,10,4,0,1,24,0, 1,1,0,0,12,0,0,1,48,16,0,3,8,0,2,12,0,1,16,0,0,16,252,0,1,12,128,5,0, 1,22,192,3,0,1,12,64,128,48,32,0,5,112,64,3,0,11,4,0,8,128,5,0,1,24,0 ,0,3,64,0,1,96,1,56,16,0,2,16,0,0,3,0,1,4,0,3,208,254,4,0,0,132,160,2 ,0,1,10,64,3,0,1,76,176,4,176,0,3,128,2,0,0,104,1,65,4,0,9,64,0,9,128 ,34,8,0,0,8,33,2,1,65,0,0,176,132,132,0,4,8,3,0,1,136,4,0,0,48,33,194 ,253,12,0,0,128,16,3,0,1,12,0,0,3,0,1,36,32,17,2,34,0,3,16,0,0,8,128, 32,4,0,10,2,0,9,3,0,1,24,0,1,32,32,12,192,0,0,54,64,0,2,72,0,0,96,0,1 ,32,16,0,0,32,2,152,251,0,1,12,128,4,0,1,18,128,3,0,1,15,104,0,0,12,0 ,3,6,0,1,120,0,0,11,0,22,4,0,1,22,16,0,0,120,0,0,3,40,1,60,0,3,30,208 ,0,2,15,0,1,28,8,120,249,8,0,2,4,0,1,16,0,0,3,0,1,12,0,0,1,48,32,0,5, 96,0,13,1,0,9,5,0,1,16,8,1,0,0,64,12,72,65,0,5,16,0,3,4,0,0,48,0,0, 137,254,0,1,36,17,2,0,1,8,0,0,3,0,1,12,1,0,0,16,2,0,2,16,32,0,0,104, 132,33,4,0,10,1,0,9,2,0,1,80,0,0,3,32,1,64,128,4,48,33,0,2,8,1,8,2,0, 0,40,0,1,184,8,192,255,0,1,4,128,0,2,2,64,9,4,0,0,128,48,68,4,1,0,0, 208,0,0,2,81,33,73,4,129,0,22,32,216,66,0,1,32,12,0,0,141,36,0,3,80,4 ,66,16,0,2,69,160,8,4,34,32,250,0,15,16,0,0,192,0,3,96,64,0,0,2,0,10, 2,0,10,192,0,3,96,64,12,0,5,128,24,0,4,8,0,0,1,0,0,160,250,0,2,128,5, 0,1,22,0,0,3,0,1,14,104,0,0,48,0,1,240,0,2,3,88,64,7,0,21,128,5,64,64 ,0,1,3,64,0,0,4,100,1,0,2,64,0,0,16,0,3,4,128,0,2,240,250,8,0,0,48, 133,2,0,1,10,0,0,32,1,0,0,1,32,4,49,32,0,0,208,0,0,64,32,0,0,2,4,65,4 ,0,17,4,0,1,128,34,136,0,2,10,100,36,136,160,132,0,2,128,130,24,33,0, 2,40,8,5,129,32,234,253,0,3,3,0,1,12,0,0,17,0,1,1,0,0,132,0,0,65,0,0, 192,0,0,128,32,17,104,17,32,4,0,21,3,0,0,2,0,2,96,36,64,192,0,0,2,0,2 ,66,24,8,0,3,8,32,0,0,17,64,253,0,1,60,160,4,0,1,18,192,2,2,0,0,3,100 ,1,12,0,1,224,0,0,6,192,2,58,0,0,3,0,22,4,240,64,0,2,88,0,0,15,40,1,0 ,2,240,0,0,22,0,3,15,224,1,12,0,0,112,254,4,0,0,48,32,4,0,1,16,0,0,3, 1,0,3,48,8,0,0,192,0,1,8,3,1,32,0,23,5,0,0,128,0,1,1,96,32,0,0,64,65, 0,2,192,64,24,8,0,2,12,128,129,32,32,145,253,0,1,48,0,0,2,0,1,8,0,0, 35,0,1,141,36,136,144,0,1,192,0,0,80,0,0,35,32,1,33,4,0,21,2,128,4,0, 1,3,112,4,8,136,0,3,224,0,0,28,1,0,2,142,196,5,48,2,136,252,0,1,4,130 ,0,2,2,64,35,0,1,45,36,4,52,6,0,2,130,4,0,0,104,36,33,160,1,0,20,36,8 ,0,2,67,40,33,37,34,1,22,1,0,0,208,4,11,2,0,2,77,176,129,52,65,88,254 ,0,2,8,0,4,3,2,0,0,12,0,0,64,48,0,6,96,0,0,8,136,1,0,20,2,0,3,2,0,2, 128,0,0,32,8,0,0,192,0,5,12,128,1,32,0,0,56,254,0,1,12,128,5,0,1,22,0 ,0,3,1,0,0,12,224,0,0,48,0,4,4,0,0,96,0,0,10,232,1,0,16,3,0,1,128,5,0 ,3,3,96,0,0,4,96,1,48,32,0,0,192,64,24,8,0,2,8,128,1,48,0,0,208,254,8 ,0,0,4,132,2,0,1,10,0,3,64,33,128,128,64,0,6,8,141,160,1,0,1,4,0,5,16 ,2,0,5,8,0,1,128,34,8,0,2,18,4,34,40,168,0,0,48,2,0,0,192,4,64,0,3,4, 129,33,32,33,42,252,0,1,128,16,3,0,1,12,0,0,9,0,1,36,0,0,8,146,0,4,1, 0,0,32,1,37,144,1,0,1,2,0,5,16,1,0,5,8,0,2,3,0,3,1,32,17,128,68,5,144 ,0,1,128,2,73,4,0,2,44,8,9,18,64,0,0,250,0,1,12,128,4,0,1,18,192,2,1, 0,0,11,100,0,0,44,16,0,2,6,8,0,0,88,32,3,192,1,0,1,7,0,5,144,3,0,5,8, 0,2,4,0,3,3,88,0,0,15,32,129,60,32,0,0,112,0,0,22,0,3,15,224,0,0,60,0 ,0,152,248,4,0,2,4,0,1,16,0,1,1,0,3,1,16,0,3,4,0,1,32,12,132,1,0,0, 128,5,0,5,208,2,0,5,8,0,2,3,0,3,1,96,16,12,4,1,48,0,1,192,0,0,24,4,0, 2,12,128,1,49,0,0,121,248,0,1,36,17,2,0,1,8,128,18,0,1,10,40,16,40,1, 0,2,80,0,1,80,2,36,128,1,0,1,4,0,5,8,2,0,5,4,0,2,4,0,3,3,96,4,142,0,0 ,1,176,16,0,1,132,24,1,0,2,64,1,4,48,17,144,249,0,1,8,0,8,2,64,0,2, 128,0,4,16,0,0,2,0,3,4,0,6,2,0,35,144,254,32,0,1,128,0,0,16,0,0,2,64, 0,0,8,0,3,4,0,1,16,0,0,2,64,0,3,32,0,0,4,0,7,2,0,6,33,0,0,4,128,0,0, 16,0,0,2,64,0,0,8,0,0,1,32,0,1,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0 ,4,0,0,48,250,0,74,152,255,40,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1, 32,0,0,4,128,64,20,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0, 0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,192,0,0,16,0,0,2,64,0,0,8,0,0,1,32 ,0,0,4,0,0,163,248,0,0,8,8,0,0,1,0,1,4,0,0,96,16,0,0,128,80,0,4,8,4,0 ,2,4,2,0,0,128,0,20,32,0,9,8,0,13,1,251,0,1,5,0,1,16,0,6,32,0,0,4,0,1 ,4,64,0,0,64,0,1,32,1,0,1,4,0,15,32,0,0,4,0,1,20,0,0,2,64,0,0,8,0,0,1 ,0,2,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,136,252,4,0,0,1,0,5 ,128,0,13,16,0,1,128,0,21,2,0,7,128,0,14,97,250,32,16,4,128,0,0,16,0, 0,2,64,0,0,8,0,0,33,34,0,0,4,128,0,0,24,136,2,64,0,0,8,4,1,32,16,4,0, 15,32,0,0,4,0,0,64,16,0,0,2,64,0,0,8,0,0,1,32,16,4,128,0,0,16,0,0,2, 64,0,0,8,0,0,1,32,0,0,4,0,0,176,253,0,15,16,0,9,128,0,27,8,0,7,4,0,8, 200,254,0,17,16,0,29,2,0,4,16,32,0,0,128,0,4,64,0,0,2,0,2,19,1,0,2, 240,250,0,8,128,0,2,1,0,6,32,128,0,0,16,0,33,64,1,0,13,48,251,0,2,32, 0,4,1,0,1,4,0,0,1,0,6,1,160,0,28,96,0,5,2,0,11,64,4,80,249,0,22,128,0 ,50,16,255,0,12,4,0,1,4,0,20,1,0,1,4,0,18,16,0,10,128,0,0,208,254,128 ,0,3,65,32,8,4,1,34,16,0,0,128,0,1,16,0,0,1,32,0,36,1,0,2,8,0,0,4,0,2 ,2,0,2,2,0,0,1,0,1,255,0,0,64,0,2,32,0,0,4,16,0,5,17,0,3,8,64,0,34,2, 0,12,4,0,2,120,255,64,64,17,0,1,50,64,6,152,0,0,17,48,0,0,64,0,0,21, 21,0,0,2,64,2,64,80,0,1,24,0,30,3,0,1,160,21,0,0,2,0,1,128,0,1,16,0,0 ,12,128,0,1,88,255,128,8,52,80,0,0,129,0,1,4,74,32,16,2,2,0,0,208,1,0 ,1,4,64,2,16,32,8,20,10,0,1,80,0,17,4,130,5,32,16,4,0,0,32,0,1,128,0, 0,132,13,130,0,0,32,0,1,1,32,0,0,4,2,96,33,8,8,255,0,0,1,32,0,1,4,0,1 ,4,0,0,32,16,0,0,8,0,0,16,0,6,32,0,0,4,8,0,20,128,0,0,4,128,0,0,16,0, 0,8,0,1,64,0,1,32,4,0,0,64,0,0,128,0,0,64,0,0,4,4,64,0,0,160,0,0,248, 8,0,0,16,0,1,16,0,1,64,0,0,2,0,9,16,0,1,64,0,22,32,0,0,1,0,0,16,0,7, 16,0,0,4,0,8,17,0,0,160,253,0,74,152,255,0,74,152,255,0,1,32,16,0,0, 160,0,1,128,0,3,4,0,0,8,0,1,1,0,0,34,128,2,16,0,31,16,32,0,7,4,0,0,64 ,0,5,80,250,0,13,32,3,0,3,8,0,36,36,0,1,4,0,6,32,32,0,3,8,254,0,8,2,0 ,1,2,0,1,4,0,2,16,0,39,16,0,8,8,1,0,0,32,0,0,96,248,0,12,32,0,60,184, 253,0,14,32,0,10,1,0,26,64,0,2,32,0,4,1,0,1,16,0,5,248,249,0,49,8,0, 23,24,255,0,1,20,0,1,64,0,5,32,128,0,0,128,0,3,16,8,1,32,0,0,4,16,0,0 ,16,0,20,1,0,3,2,0,12,16,0,0,4,0,2,40,254,0,1,128,0,2,16,0,10,128,0,0 ,2,8,0,1,1,16,1,1,0,0,4,0,34,16,0,6,16,0,0,248,254,0,54,4,0,18,152, 251,0,17,2,0,8,8,0,30,64,0,13,112,253,0,1,64,0,9,8,0,9,32,16,0,12,4,0 ,1,16,0,11,16,0,18,36,251,8,0,21,16,0,0,8,0,23,32,0,3,128,0,1,8,0,3, 32,0,8,8,0,0,48,252,0,50,2,8,0,12,64,0,2,4,0,3,112,249,0,0,32,64,8,0, 7,32,0,0,66,0,4,32,0,32,4,0,3,1,0,5,4,0,7,160,255,0,25,64,0,10,4,0,1, 16,0,17,8,0,11,8,0,0,88,250,0,14,128,64,0,57,88,251,0,15,8,0,21,1,0,1 ,4,0,10,4,0,4,4,0,1,32,0,5,1,32,0,2,96,249,0,23,128,0,12,8,0,1,32,0, 12,32,0,8,8,32,0,2,4,0,1,2,0,0,24,249,0,4,16,0,8,1,0,2,32,0,4,8,0,31, 4,4,0,3,32,0,5,2,64,0,0,16,32,250,0,1,36,16,0,0,128,0,2,2,0,1,8,8,0,0 ,32,0,3,64,0,1,64,0,1,130,0,0,32,0,25,2,0,18,72,255,0,7,64,0,2,1,0,5, 1,0,20,32,0,17,64,0,9,8,0,0,64,160,128,255,0,12,2,0,22,64,0,2,2,0,17, 32,8,0,4,128,0,1,8,0,3,208,249,0,1,8,0,0,2,0,0,32,8,4,0,1,16,0,1,64,8 ,0,0,2,4,0,1,64,0,6,32,0,18,2,20,64,0,4,4,128,128,0,2,1,0,3,8,0,2,1,0 ,1,152,249,0,4,2,64,0,0,16,1,2,0,1,128,128,0,3,128,0,0,2,1,0,0,32,4,2 ,0,0,8,0,15,32,0,11,8,0,0,8,0,1,2,0,0,16,0,8,72,249,0,0,48,8,0,0,15,4 ,192,52,88,0,0,2,32,40,32,192,169,8,1,2,128,0,0,211,0,0,64,65,41,10,0 ,0,4,16,0,12,8,0,0,32,0,0,96,0,0,1,34,64,0,1,128,32,0,0,2,72,192,4,0, 1,71,0,0,10,0,1,16,0,0,4,192,64,0,1,176,251,32,3,36,36,2,0,0,4,8,4, 130,0,0,2,1,35,101,4,86,22,1,0,0,16,0,0,128,8,0,0,70,149,32,16,4,0,12 ,32,0,1,64,16,8,16,17,1,0,0,4,64,64,0,0,12,22,16,33,0,0,32,128,0,0,8, 2,66,0,2,128,8,32,0,0,96,249,0,3,2,0,1,8,4,128,0,2,8,64,0,0,128,0,0,4 ,0,3,1,0,0,4,128,0,0,4,0,13,32,0,2,5,32,0,0,2,0,1,4,0,2,4,2,0,5,4,0,4 ,32,0,2,184,251,64,0,0,16,8,0,4,1,0,2,130,32,0,0,8,4,0,1,2,0,4,2,0,0, 1,4,0,24,17,0,0,2,0,1,16,0,1,128,0,1,144,128,0,4,8,0,0,240,252,16,0,4 ,128,0,67,76,251,0,17,4,0,23,8,0,16,32,0,12,112,249,0,1,8,0,8,8,0,0,2 ,0,4,64,0,32,2,0,14,2,0,2,64,16,255,8,0,10,2,0,1,8,0,1,32,0,6,64,0,28 ,64,0,0,2,0,4,32,0,0,16,0,3,10,64,0,1,106,255,16,0,14,4,0,6,8,0,13,16 ,0,2,16,0,21,2,0,3,16,32,0,1,128,249,0,7,128,0,6,128,0,3,128,0,3,8,0, 10,128,0,2,2,0,6,128,0,5,2,0,15,64,24,251,0,0,64,0,7,5,0,0,20,2,0,1, 64,0,5,1,0,40,8,0,3,32,192,0,0,144,0,0,232,251,0,11,1,0,43,4,0,2,64,0 ,2,3,0,4,48,0,0,4,16,184,248,0,2,8,0,15,12,0,28,4,0,7,1,0,15,255,0,12 ,64,0,5,16,48,0,1,8,0,27,24,2,0,3,2,1,0,12,8,240,248,0,13,128,0,7,8, 64,0,24,64,0,3,32,128,0,0,2,0,1,32,0,0,64,0,0,32,0,3,16,0,1,4,8,136, 254,0,11,16,0,1,16,0,5,2,0,32,16,0,17,152,252,0,7,64,1,0,4,52,18,0,1, 8,0,2,104,130,0,2,52,64,0,17,128,6,0,9,4,2,0,12,176,250,0,8,2,0,4,48, 0,2,64,0,2,96,0,3,16,0,19,6,0,9,48,16,0,12,248,249,0,7,192,2,0,4,44,0 ,1,240,64,0,2,120,64,0,2,56,16,0,18,6,0,9,48,0,13,160,250,0,7,64,1,0, 4,48,32,0,0,208,2,0,2,32,2,0,2,20,0,19,16,2,0,8,48,34,0,12,88,254,0,7 ,128,17,2,0,3,52,10,0,1,68,0,2,104,17,0,2,36,34,0,18,22,8,0,8,48,6,0, 12,136,248,0,8,2,0,4,60,0,1,240,0,3,112,0,3,60,0,18,128,7,0,9,28,0,13 ,80,250,0,8,2,0,4,48,0,6,64,32,0,2,32,0,19,6,0,9,48,32,0,12,152,255,0 ,7,64,145,0,4,148,16,0,0,192,34,0,2,96,4,0,2,48,0,19,70,8,0,8,24,0,13 ,144,252,0,7,64,0,2,65,0,1,180,32,0,1,8,74,32,8,73,36,37,164,5,0,19, 128,16,0,4,104,0,3,52,1,0,7,77,176,1,0,1,136,249,0,11,4,4,0,0,48,0,2, 64,0,2,32,0,1,128,1,1,0,19,2,1,0,3,96,0,3,48,32,0,7,12,128,1,0,1,64, 250,0,7,192,2,0,1,8,0,1,48,8,0,0,240,0,0,24,192,0,0,88,0,0,12,224,1,0 ,20,4,2,0,3,96,0,3,16,0,8,15,0,3,120,251,8,0,6,64,1,0,1,4,4,0,0,48,1, 0,0,208,40,64,72,0,0,40,0,0,64,132,40,0,20,18,0,4,96,0,3,48,33,0,7, 132,4,0,2,234,251,0,7,128,17,2,0,0,76,0,1,48,2,0,1,68,136,32,147,64,0 ,0,36,160,5,0,20,6,1,0,4,66,0,2,16,32,0,7,77,128,1,0,1,240,253,0,8,2, 0,1,15,2,0,0,60,16,0,0,240,0,0,22,192,3,48,0,0,11,200,129,0,19,128,7, 0,4,24,0,3,60,0,8,15,226,129,0,1,56,248,4,0,7,2,0,1,12,8,0,5,24,0,0,3 ,64,0,0,12,36,1,1,0,19,6,4,0,3,96,32,0,2,16,16,0,7,8,128,1,0,1,65,254 ,0,7,64,129,0,1,44,0,1,16,34,0,0,192,66,28,8,3,32,0,0,76,160,1,0,20, 22,0,4,96,1,0,2,32,2,0,7,141,136,129,0,1,16,252,0,7,64,0,5,52,33,0,1, 128,138,0,0,8,0,2,160,1,20,2,0,17,128,6,0,1,2,64,8,2,12,0,0,32,0,3, 144,66,0,4,1,4,0,2,48,253,0,14,32,0,3,16,4,0,0,1,0,1,128,1,48,32,0,18 ,6,0,1,8,8,1,96,0,1,128,128,0,2,64,0,10,248,251,0,7,192,2,0,5,16,0,0, 48,0,0,8,208,131,0,2,96,0,0,24,0,25,112,0,6,176,0,5,12,0,3,152,255,12 ,0,6,64,1,0,5,2,0,0,16,0,0,64,64,19,0,2,32,0,0,52,34,0,21,24,32,11, 105,10,0,0,128,1,2,0,1,80,0,5,12,8,0,2,58,254,4,0,6,128,17,2,0,3,16,0 ,1,192,32,136,8,16,1,0,2,128,52,0,19,198,0,1,144,4,18,104,0,2,9,0,2, 128,0,6,8,0,2,72,251,0,8,2,0,4,52,0,1,240,0,0,22,192,3,0,2,64,0,0,40, 32,0,17,128,7,0,1,14,192,1,25,32,0,0,224,64,0,2,96,0,5,3,0,3,48,248,4 ,0,7,2,0,7,192,0,0,8,0,0,128,0,2,160,65,48,0,19,6,0,1,24,4,3,98,32,0, 0,128,65,0,2,128,0,5,8,0,3,209,254,0,7,64,137,0,7,192,0,0,144,2,3,0,2 ,160,5,36,0,19,6,4,0,0,152,0,0,19,96,0,1,128,5,0,2,64,0,5,12,2,0,2, 176,253,16,0,3,16,2,1,64,0,2,77,16,0,1,6,0,1,8,26,0,0,8,8,32,0,0,32, 48,52,0,18,128,6,2,0,0,26,66,0,0,104,4,0,0,160,33,52,0,4,64,0,0,104,0 ,0,32,0,3,184,248,0,4,64,0,5,12,0,5,64,24,0,1,1,0,24,2,0,1,24,0,0,1, 97,32,0,0,128,1,48,0,5,1,97,0,0,12,4,0,2,24,254,0,7,192,2,0,1,12,0,1, 48,32,0,0,240,0,0,24,208,3,96,64,0,0,96,1,13,16,0,18,6,2,0,0,8,0,1, 121,32,0,0,128,0,10,14,0,3,192,252,12,0,3,192,20,0,0,64,1,0,1,12,4,0, 0,32,1,0,0,208,36,0,0,64,139,96,0,1,128,5,4,1,0,18,6,0,1,80,16,3,32,1 ,0,1,5,177,64,0,4,3,100,33,77,1,0,2,226,252,4,0,3,128,40,0,0,128,17,2 ,0,0,72,2,0,4,68,152,0,0,16,1,2,0,0,32,72,48,0,19,4,4,0,0,64,8,18,104 ,1,0,1,4,50,1,0,4,162,96,132,13,16,0,2,208,248,0,4,112,0,2,2,0,1,3,0, 4,240,0,0,30,200,3,24,32,0,0,64,0,0,60,8,0,17,128,7,0,1,30,192,1,121, 16,0,0,224,1,12,32,0,3,192,1,24,0,0,3,0,3,224,248,4,0,3,192,64,0,1,2, 0,1,8,8,0,0,16,0,2,32,24,0,0,128,64,0,1,160,1,48,0,19,4,2,0,1,16,3,66 ,64,0,2,49,0,5,131,96,64,12,0,3,1,255,0,4,224,2,0,0,64,161,0,1,132,0, 1,48,0,1,192,4,24,16,11,96,18,0,0,160,16,6,17,0,18,23,0,1,144,0,0,19, 104,4,0,1,9,0,0,33,0,4,19,0,0,4,76,8,0,2,56,250,0,3,22,18,2,0,0,64,18 ,2,0,0,13,1,0,1,16,0,1,8,26,0,0,8,41,1,0,0,160,136,52,0,18,128,38,8,0 ,0,26,67,98,104,0,1,160,5,53,0,6,104,0,0,41,0,3,240,248,0,3,6,0,0,64, 0,1,1,0,1,4,0,5,64,24,16,3,96,64,0,2,48,0,19,2,0,1,8,0,0,1,96,0,1,128 ,0,0,48,0,6,96,0,0,4,4,0,2,168,248,0,2,128,7,192,128,0,0,192,2,0,1,12 ,4,0,0,48,0,1,240,32,16,128,0,0,26,0,1,192,128,12,0,19,6,2,0,0,24,0,1 ,96,64,0,0,128,1,0,14,112,253,8,0,1,128,6,192,4,0,0,64,1,0,1,140,0,1, 160,32,0,0,208,2,128,96,16,40,16,0,0,32,0,0,4,0,19,22,0,1,136,2,9,98, 1,0,0,128,40,176,64,0,5,96,33,36,8,0,2,42,250,0,3,192,0,0,72,0,0,128, 2,0,1,8,8,0,4,68,24,64,163,64,36,0,0,32,4,0,20,36,2,0,1,1,19,96,64,0, 1,8,48,66,0,5,96,2,44,2,0,2,48,252,0,2,128,1,48,0,2,2,0,1,15,0,4,240, 0,0,26,192,0,0,24,0,1,64,65,8,8,0,17,128,3,0,1,6,208,131,24,0,1,96, 128,12,0,6,24,32,15,0,3,160,251,4,0,3,128,32,0,1,2,0,1,8,0,1,16,0,6, 96,16,0,0,32,0,0,48,0,19,6,0,1,16,0,0,3,96,0,2,1,48,32,0,5,96,0,0,12, 8,0,2,49,253,0,4,192,4,0,0,64,2,0,1,14,4,0,0,48,0,1,192,130,8,0,0,64, 64,0,1,32,1,52,17,0,18,22,8,0,0,88,16,80,96,64,0,0,128,5,1,2,0,6,66, 32,0,3,96,254,16,0,10,141,160,1,48,194,2,4,8,16,3,8,9,8,0,0,160,17,4, 4,0,17,128,66,212,0,0,26,81,3,10,128,0,0,160,17,5,144,198,0,1,138,16, 0,0,8,33,129,8,0,2,56,248,0,11,4,136,1,32,0,2,64,0,2,64,0,1,128,0,0, 49,0,20,64,128,24,0,0,3,0,2,128,1,16,0,0,6,0,1,24,0,1,32,0,0,4,0,3,80 ,248,0,11,12,128,1,48,0,0,6,240,0,0,24,128,3,16,64,0,0,192,1,48,0,19, 6,192,0,0,8,8,1,0,2,128,128,48,0,0,2,0,1,6,8,0,0,96,16,0,4,248,251,12 ,0,10,12,132,1,32,66,64,210,0,0,88,80,8,73,1,0,0,160,144,48,66,0,18, 160,192,0,0,17,1,34,1,20,0,1,17,48,10,36,2,0,0,74,0,1,96,4,12,16,0,2, 162,248,4,0,10,136,4,4,17,0,0,18,192,68,0,0,64,0,0,44,16,0,0,32,1,176 ,0,19,34,128,0,0,64,8,8,1,1,0,1,4,34,2,16,2,0,0,16,8,0,0,64,4,72,0,3, 152,254,0,11,7,96,0,0,48,128,5,244,0,0,8,192,0,0,16,0,1,192,129,28,32 ,0,17,128,5,242,64,30,192,3,56,64,0,0,224,1,60,160,7,0,1,6,0,1,120,64 ,7,4,0,2,216,252,4,0,10,12,128,129,16,0,0,6,194,32,24,0,1,32,0,1,32,1 ,48,32,0,18,6,0,0,128,0,0,16,0,0,1,0,3,49,16,0,0,2,0,0,24,4,0,0,96,0, 0,12,0,3,217,252,0,11,12,129,5,48,0,0,38,192,0,0,24,0,0,35,2,0,1,160, 1,24,1,0,18,23,193,8,144,0,0,34,96,128,0,1,9,184,0,0,68,0,1,144,0,1, 112,10,44,16,0,2,152,250,0,4,208,0,1,64,162,40,68,13,0,1,48,64,0,0, 192,128,16,8,8,105,4,0,0,32,0,0,54,65,0,16,52,129,2,0,1,2,64,98,8,129 ,141,40,4,5,18,0,2,26,72,19,8,36,45,4,0,2,232,254,0,4,192,0,2,1,0,1, 12,4,0,0,48,0,1,192,0,3,32,32,0,2,48,0,17,16,16,4,1,0,0,8,8,1,32,0,0, 4,128,0,0,16,0,3,8,0,0,1,33,0,0,12,0,3,208,254,0,4,192,0,1,192,1,96, 32,4,0,1,56,0,1,32,0,0,24,192,0,0,112,32,0,2,16,32,0,16,48,0,0,2,0,6, 12,0,1,48,8,0,2,24,0,0,3,96,0,0,4,0,3,176,254,8,0,3,192,0,1,64,2,0,0, 4,40,8,0,0,4,33,0,0,208,8,153,66,0,0,40,1,0,1,64,48,2,0,16,16,4,0,0,2 ,0,0,24,32,9,98,33,4,129,145,48,2,0,2,24,9,81,96,20,72,4,0,2,11,255,0 ,5,132,0,1,2,32,1,64,8,0,0,52,0,1,208,2,0,1,139,72,0,2,8,17,34,0,16, 128,32,66,2,0,0,144,0,0,139,64,4,128,16,137,32,64,0,2,80,4,8,66,128, 64,8,0,2,33,253,0,4,48,0,1,64,1,88,64,15,0,1,60,16,0,0,240,128,8,192, 3,112,64,0,0,224,0,0,60,0,17,12,128,5,0,1,14,196,3,56,16,3,224,0,0,60 ,0,3,30,192,0,0,120,0,0,15,0,3,8,249,4,0,3,192,0,2,1,96,32,0,0,8,0,3, 192,0,0,24,0,0,3,64,0,2,128,16,0,17,32,0,0,2,2,0,0,24,4,3,96,0,0,8, 128,1,49,0,5,2,96,0,5,241,253,0,4,192,68,0,1,2,96,2,42,0,1,48,18,0,1, 64,24,0,0,3,96,0,1,128,5,32,10,0,16,48,17,36,0,1,88,0,0,32,114,128,76 ,132,1,56,17,0,2,24,32,11,114,65,10,1,0,2,24,255,160,32,0,2,208,0,1, 64,2,0,1,77,4,0,0,52,4,0,1,128,16,33,8,104,0,1,160,1,52,0,15,160,5,1, 128,38,0,1,2,67,98,8,68,0,0,32,0,0,180,0,3,130,72,16,104,2,141,4,0,2, 168,250,0,4,192,0,2,1,0,1,12,0,1,48,0,1,192,0,3,97,0,3,48,0,15,128,0, 2,6,2,0,0,8,0,0,1,0,2,128,128,48,16,0,2,16,0,0,1,97,64,12,0,3,216,255 ,128,129,0,2,192,128,0,0,192,2,0,1,4,0,1,48,0,1,32,0,0,16,192,3,24,0, 1,224,65,12,0,15,128,1,0,1,6,2,0,3,96,0,3,48,0,3,4,0,1,98,0,0,4,0,3, 96,251,4,4,0,2,192,2,0,0,64,1,0,1,8,1,0,0,48,9,0,0,208,128,0,0,80,35, 9,0,1,160,9,4,0,15,128,32,0,1,22,0,1,24,16,9,98,36,0,0,128,1,50,66,0, 2,18,16,11,96,34,40,16,0,2,18,251,140,4,0,2,192,4,0,0,128,1,0,1,128,4 ,0,0,176,64,0,0,208,2,0,1,16,1,36,0,1,16,2,0,16,8,0,1,36,0,1,144,8,11 ,0,0,34,0,1,73,32,1,0,2,74,0,0,18,65,130,64,0,3,8,253,96,1,1,0,1,48, 64,0,0,64,2,0,1,15,0,1,60,0,1,48,64,8,192,3,16,0,1,192,1,8,16,0,14,96 ,128,0,0,128,1,1,0,0,14,192,131,24,0,1,224,0,0,28,16,0,2,4,208,1,56,0 ,0,15,8,0,2,64,253,136,129,0,2,192,128,0,1,1,0,2,8,0,0,32,16,0,0,192, 0,2,128,96,0,3,48,0,16,1,0,1,4,4,0,0,24,16,3,64,16,0,0,128,65,48,0,3, 8,0,0,3,98,64,0,0,8,0,2,177,252,128,9,0,2,192,0,2,2,0,1,72,0,1,176,0, 3,8,0,0,35,96,130,0,0,128,17,181,8,0,14,128,137,0,1,66,0,1,24,0,0,16, 98,4,0,0,128,1,128,32,0,4,3,0,0,1,72,0,3,120,252,0,26,4,2,0,45,216, 249,32,0,0,4,128,0,0,16,0,0,2,0,1,8,0,0,1,32,0,1,128,0,0,16,0,0,2,64, 0,0,8,0,0,1,0,18,32,0,0,4,128,0,0,16,0,0,2,64,0,2,1,32,0,0,4,128,0,0, 16,0,0,2,64,0,0,8,0,1,32,0,0,4,0,0,80,248,0,15,32,0,9,128,0,42,4,0,2, 120,253,36,0,0,4,128,0,0,16,0,0,2,64,0,0,9,0,0,1,32,0,0,4,128,0,0,16, 0,0,2,64,0,0,8,0,0,1,0,1,4,64,0,14,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8 ,132,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,129,32,0,0,4,0,0,9,253, 12,0,7,16,4,0,3,8,0,7,129,0,1,8,128,64,0,24,16,0,7,2,65,32,0,2,2,0,3, 75,252,32,0,0,4,0,1,16,0,0,2,64,0,0,8,0,0,1,32,0,1,128,0,2,2,0,3,1,0, 0,64,4,0,15,32,0,0,4,128,0,0,16,0,0,2,64,0,2,1,32,0,0,4,128,0,3,64,0, 0,8,0,1,32,0,0,4,0,0,112,248,8,0,22,64,0,3,32,0,44,242,255,32,0,0,4, 128,0,0,18,0,0,2,64,0,0,9,0,0,1,32,0,0,4,128,0,0,16,132,2,64,0,0,1,1, 1,0,0,128,128,0,15,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4, 128,0,1,128,0,0,80,0,0,8,0,0,1,32,0,0,4,0,0,144,253,0,26,128,0,17,1,0 ,11,1,0,14,8,254,0,14,32,16,0,36,2,0,4,16,0,4,4,0,7,216,248,0,2,128,0 ,7,8,0,4,64,64,32,0,2,8,0,0,32,0,21,4,0,24,24,255,0,15,8,0,10,132,0, 25,9,16,0,17,144,251,0,11,16,4,0,6,8,0,0,16,0,24,1,0,14,8,0,3,2,0,4, 249,0,11,1,0,2,32,0,2,2,16,0,1,128,0,1,1,0,0,4,0,19,8,16,0,8,4,0,6,8, 0,0,16,0,2,208,248,0,4,32,0,8,16,0,0,1,64,0,2,128,0,0,16,8,128,0,1,8, 0,15,1,0,4,16,0,9,20,0,5,4,0,1,4,8,128,249,0,1,1,128,0,2,8,16,128,0, 17,17,0,30,4,0,1,64,0,3,16,0,1,4,0,2,80,251,0,0,3,1,128,0,0,32,0,0,2, 16,0,0,2,0,2,40,8,0,0,1,32,0,2,80,1,32,2,64,0,0,5,16,0,14,64,3,0,4,84 ,0,3,4,0,1,4,5,0,0,50,0,3,8,0,0,2,8,0,0,8,16,88,252,0,3,14,0,1,114,3, 64,0,1,12,2,8,0,0,92,4,64,32,0,1,145,32,168,8,10,69,128,0,15,128,0,0, 32,8,128,11,0,0,8,4,2,64,0,0,160,1,0,0,32,34,0,0,1,0,0,34,0,1,208,0,1 ,11,0,0,32,1,160,255,0,3,1,0,6,1,2,0,1,8,0,0,128,32,0,1,129,32,0,1,2, 64,0,16,32,0,1,32,0,0,1,0,0,2,16,0,8,4,0,6,2,0,2,184,251,12,0,2,2,0,1 ,8,4,0,0,2,0,0,8,0,2,32,4,0,5,64,1,32,0,19,4,0,1,4,0,2,2,8,0,1,2,0,0, 4,0,6,64,0,1,2,0,0,32,0,0,216,248,0,4,128,16,0,4,32,0,7,2,0,0,64,128, 0,2,2,64,0,18,24,0,5,9,0,2,4,0,3,1,32,0,2,32,0,3,216,248,0,27,2,64,0, 20,128,0,8,32,0,6,64,0,4,120,251,0,14,4,0,3,2,0,1,2,0,36,32,0,6,64,0, 0,2,0,2,152,249,16,0,13,128,0,2,32,0,2,8,0,36,16,0,3,16,0,1,32,0,0,4, 0,2,140,248,2,0,10,1,0,2,16,4,0,1,16,0,4,64,0,25,8,2,64,0,3,8,0,1,64, 0,0,4,0,1,32,0,0,8,0,2,128,16,252,0,4,48,16,0,4,2,1,0,1,64,0,2,16,0,1 ,32,0,2,4,0,19,128,130,0,4,96,8,0,0,8,0,8,64,0,1,9,0,2,216,252,8,0,13 ,32,0,10,1,0,31,32,0,13,162,252,2,0,3,128,0,13,64,0,1,16,0,24,4,0,0, 64,0,3,1,0,2,8,0,6,16,0,4,128,224,253,0,26,32,0,17,32,0,6,64,0,3,32, 128,8,0,2,16,0,1,64,0,5,208,250,0,9,4,0,6,64,0,0,1,0,0,1,0,0,32,0,1, 32,1,0,25,16,0,9,2,0,2,1,0,3,248,249,72,0,8,16,0,5,1,0,6,2,0,21,4,0, 17,64,0,0,16,0,4,192,252,0,14,8,0,35,32,128,0,4,2,32,0,5,4,0,6,56,249 ,0,14,16,0,35,8,0,0,1,0,6,2,0,11,48,254,4,0,10,16,0,11,16,0,1,8,0,16, 2,64,0,8,16,0,1,64,8,8,0,11,8,252,0,3,2,0,13,2,0,1,1,0,28,2,0,5,4,0, 14,216,252,0,26,2,0,28,32,0,11,32,0,3,184,255,0,74,152,255,0,74,152, 255,0,14,128,0,4,16,0,5,1,40,0,19,2,0,3,8,64,0,17,32,248,0,14,16,0,34 ,1,0,16,128,0,4,24,254,0,3,8,64,0,2,4,0,5,8,0,4,132,0,2,128,2,0,0,4,0 ,21,64,0,0,128,0,4,64,0,9,1,0,2,168,253,0,8,64,0,2,16,0,4,64,0,0,32,0 ,31,1,0,0,64,0,4,2,0,11,152,255,0,52,64,0,20,152,251,0,27,64,0,24,128 ,0,14,8,2,0,2,240,251,0,3,1,32,0,0,8,0,1,16,0,3,16,8,0,0,1,0,1,4,0,24 ,1,0,12,160,0,8,8,0,2,112,250,16,0,4,64,16,16,128,0,4,1,0,2,128,0,1, 128,64,0,0,8,136,0,0,8,0,19,1,0,4,32,0,1,8,0,9,8,0,4,224,249,0,0,48, 16,0,0,1,32,128,86,16,80,18,0,0,4,0,1,9,16,2,2,128,0,0,8,128,10,0,0,1 ,40,40,4,8,0,14,128,128,2,128,0,1,20,80,0,0,129,8,0,0,40,8,0,0,160,16 ,1,0,0,20,8,0,2,74,4,4,0,2,120,252,0,0,1,128,8,2,64,17,104,0,3,132,10 ,1,0,0,9,176,164,0,1,4,128,69,160,156,162,96,9,80,0,12,32,0,0,32,196, 0,0,8,128,0,0,132,36,4,64,64,8,0,1,48,161,0,2,4,18,0,2,74,4,0,0,64,48 ,8,64,250,0,2,16,1,64,0,0,8,0,3,2,4,0,1,32,0,3,8,128,0,1,8,130,128,0, 14,64,0,2,1,32,0,3,2,0,15,1,0,1,5,32,240,252,32,0,4,16,0,5,32,0,3,17, 0,3,8,0,0,4,0,0,64,0,21,2,0,3,17,16,0,1,32,8,0,3,4,0,2,32,0,2,8,0,0, 152,251,0,12,1,32,0,33,128,0,13,64,0,0,8,0,2,1,0,3,216,249,0,25,192,0 ,1,8,0,34,8,0,8,16,251,8,0,14,36,0,4,10,0,3,64,0,18,32,0,0,2,0,16,2,0 ,6,90,251,0,0,64,0,8,16,0,2,4,0,1,129,0,6,2,0,1,32,0,22,64,4,0,19,104 ,253,4,0,14,64,0,10,128,16,0,29,2,0,7,8,0,4,184,252,0,5,2,0,3,1,0,11, 1,0,23,1,0,1,64,16,0,4,4,1,0,5,8,2,0,0,6,0,4,255,128,0,4,2,0,7,8,0,0, 16,0,1,4,0,1,32,1,0,24,8,0,2,8,32,32,0,13,20,0,2,136,254,48,0,4,1,0,2 ,32,0,0,4,2,0,5,8,0,4,32,0,24,10,4,0,3,160,64,128,0,4,64,129,8,16,16, 0,0,2,0,1,208,254,0,14,64,0,2,1,0,0,64,0,1,64,0,2,8,0,31,16,0,6,32,0, 4,96,255,0,15,4,0,3,8,2,0,0,16,0,35,64,0,5,128,0,5,72,253,0,6,1,0,4, 128,0,6,32,0,0,128,0,0,4,0,18,32,0,0,4,128,0,5,128,128,1,0,1,16,192,0 ,7,4,8,2,0,1,176,249,0,14,64,0,4,4,0,4,64,0,0,16,0,18,16,0,4,128,128, 0,17,72,251,0,6,10,1,0,2,64,8,0,2,32,0,28,180,128,2,0,9,52,0,0,20,16, 132,0,4,129,1,0,0,4,17,160,251,0,7,4,0,2,12,0,4,2,0,28,8,4,0,9,48,32, 0,0,68,0,10,168,251,0,6,8,0,3,15,0,2,128,1,0,28,60,128,5,1,0,8,48,0,0 ,4,192,128,0,7,28,32,0,0,249,0,6,144,32,0,2,140,16,0,1,128,0,29,36, 137,34,0,9,48,16,0,0,196,4,0,4,136,16,0,0,128,0,0,128,250,0,6,64,0,3, 77,0,3,22,0,29,17,19,0,9,48,17,0,0,128,8,0,5,8,0,0,4,33,8,250,0,6,6,4 ,0,2,3,8,0,1,128,7,1,0,27,12,128,4,2,0,8,28,0,0,2,240,128,0,4,7,0,1, 12,0,0,96,248,0,7,16,0,2,12,0,3,6,0,28,16,0,0,5,0,9,48,0,1,192,128,0, 4,4,8,0,1,32,200,248,0,6,64,0,3,140,4,0,2,6,0,28,32,4,34,1,0,8,48,8,2 ,224,0,5,4,0,1,36,1,72,255,0,4,16,32,152,0,1,8,0,0,77,16,0,2,32,0,7, 160,5,0,0,1,0,6,40,0,6,20,0,0,52,128,0,7,13,0,1,4,138,20,20,72,0,4,65 ,0,3,88,252,0,6,24,8,0,7,6,2,0,7,129,0,0,16,0,6,12,0,6,6,0,0,48,0,14, 64,0,6,8,0,2,120,253,0,6,6,8,0,1,64,12,0,3,1,0,7,128,1,12,0,7,12,0,6, 6,0,1,128,5,1,0,5,15,4,0,0,44,8,4,192,32,0,9,16,254,8,0,4,4,25,1,0,1, 2,76,4,0,1,128,22,2,0,6,128,17,5,0,7,10,0,6,5,0,1,128,34,0,6,129,0,2, 1,0,0,194,2,0,4,128,4,0,2,195,248,0,5,34,90,8,0,1,1,32,0,2,128,70,0,7 ,128,133,48,9,0,6,10,0,6,5,0,0,48,18,19,0,6,140,0,1,132,16,18,128,2,1 ,0,3,76,2,0,2,201,255,0,4,48,0,0,30,0,1,24,64,11,2,0,1,128,1,2,0,6, 224,1,60,0,17,60,128,4,2,0,5,15,2,0,0,12,128,7,242,0,5,7,0,3,64,254,4 ,0,4,32,24,0,3,12,0,3,6,0,7,128,129,48,0,17,48,0,0,5,0,7,2,0,1,8,0,0, 196,64,0,4,8,8,0,2,49,249,0,4,64,0,0,64,32,0,0,96,10,40,8,0,11,192,1, 48,0,17,48,9,2,1,0,5,140,0,1,148,0,0,66,224,8,0,4,132,0,3,64,253,0,4, 80,0,0,130,4,0,2,5,0,3,32,16,0,6,32,1,48,1,0,16,4,138,20,0,7,32,0,0, 54,0,0,22,216,130,26,0,3,13,1,0,0,4,1,176,255,0,4,128,0,0,16,0,3,8,0, 4,2,0,6,128,129,48,16,0,6,4,0,6,2,0,2,2,2,0,8,48,0,0,6,192,0,0,24,0,3 ,12,0,2,16,152,255,0,4,176,0,0,6,8,0,2,11,0,2,128,1,0,0,32,0,6,1,60,0 ,7,8,0,6,4,0,0,28,136,5,0,7,128,129,0,1,1,192,0,5,12,0,1,12,0,0,248, 253,4,0,3,80,136,146,0,3,5,8,0,1,128,0,8,128,132,52,0,17,128,128,2,0, 7,128,9,0,0,128,166,192,68,24,8,0,2,128,8,0,0,4,33,34,254,12,0,3,96,0 ,0,72,0,3,38,0,3,70,4,34,0,6,145,0,0,17,0,6,18,0,6,9,0,0,4,0,0,5,1,0, 7,48,0,0,130,6,128,0,0,153,0,3,12,0,1,128,0,0,224,252,0,4,144,0,0,4,4 ,0,2,9,4,0,1,128,7,240,0,6,224,0,0,12,0,17,12,160,4,0,7,96,0,0,12,136 ,7,114,0,0,6,16,0,2,15,2,0,0,12,16,120,251,8,0,3,160,0,0,26,0,3,10,0, 3,6,0,0,32,0,6,1,0,8,4,0,6,2,0,1,8,4,0,7,128,1,0,0,16,6,194,64,24,0,3 ,4,0,3,137,254,0,4,64,0,0,24,32,0,2,36,2,0,2,6,0,0,4,0,5,128,16,1,0,7 ,16,0,6,8,0,0,36,2,4,0,7,128,80,0,3,4,128,16,0,2,76,8,0,0,32,9,136, 253,0,4,144,0,0,2,0,3,1,0,2,128,32,1,0,3,8,2,0,2,4,0,7,2,0,6,1,0,0,20 ,0,1,192,132,0,2,104,0,1,160,33,0,0,128,134,16,64,0,4,1,1,0,0,36,1, 224,255,0,4,64,0,16,96,64,0,11,10,0,6,5,0,0,32,0,1,192,0,3,96,0,1,128 ,1,0,1,6,192,0,5,12,0,2,32,216,252,0,4,176,0,5,11,0,3,2,4,0,3,96,64,0 ,3,16,0,16,44,0,1,240,0,3,120,0,1,96,1,0,0,128,7,130,0,8,8,32,152,248 ,8,0,3,80,136,128,32,0,2,5,8,0,2,32,0,4,96,4,0,3,2,0,16,20,5,0,0,208, 0,3,104,0,1,128,129,0,1,2,192,4,1,0,4,1,0,0,4,0,0,138,248,0,4,96,0,0, 128,32,0,2,38,0,4,8,0,3,64,68,0,2,48,10,0,6,4,0,6,2,0,0,24,66,0,1,34, 0,2,96,0,1,160,73,0,0,128,22,192,2,0,4,44,0,1,4,18,112,249,0,4,144,0, 0,30,0,3,9,4,0,1,128,1,0,4,24,0,3,60,0,7,2,0,6,1,0,0,32,0,1,48,0,3, 112,0,1,224,1,0,0,128,7,177,64,0,4,7,4,0,0,28,0,0,232,254,4,0,3,96,0, 0,24,16,0,2,10,0,4,1,0,3,64,0,3,48,32,0,6,16,0,6,8,0,0,40,0,6,96,0,1, 128,1,0,1,4,192,64,0,9,121,251,0,4,128,0,0,88,0,3,132,2,0,2,16,0,4,32 ,65,0,2,128,0,0,1,0,5,136,0,6,4,0,0,16,10,0,5,96,0,1,160,16,2,128,70, 232,2,0,4,4,16,0,0,132,64,72,252,0,2,128,128,0,0,4,66,4,0,2,41,0,2, 128,64,17,0,9,1,2,0,5,2,1,0,5,1,0,0,4,0,1,144,8,0,4,64,136,1,52,128,0 ,0,88,136,0,4,73,16,0,0,180,0,0,16,254,0,3,6,0,0,64,0,4,4,4,0,13,48, 16,0,6,32,0,6,16,0,3,192,64,0,5,128,1,49,0,11,48,8,216,255,0,3,4,48,0 ,0,14,4,0,2,11,0,5,32,0,7,8,144,4,0,5,66,2,0,5,1,0,0,44,0,1,160,128,0 ,4,3,66,128,48,0,0,6,194,64,0,4,12,0,1,28,0,0,168,255,8,0,2,66,18,0,5 ,5,0,3,64,4,0,8,52,2,0,6,4,0,6,2,0,0,20,5,0,0,208,4,0,4,44,160,9,48,0 ,0,22,0,0,8,0,4,136,2,0,0,164,32,187,249,0,3,20,200,32,2,3,0,2,138,0, 3,64,0,0,34,0,7,180,0,0,1,0,5,144,0,6,8,0,0,24,66,0,0,208,4,0,4,65, 176,1,0,0,2,192,64,40,0,4,44,0,1,48,9,9,253,0,2,128,3,240,0,0,6,0,3,9 ,8,0,1,128,5,50,0,8,12,8,4,0,6,2,0,7,32,0,1,112,32,0,4,3,224,129,12, 136,1,176,0,5,15,2,0,0,60,0,0,222,252,4,0,2,4,192,0,1,4,0,2,8,0,4,192 ,32,0,7,48,128,0,6,64,0,8,40,8,0,0,192,0,5,12,130,1,48,16,4,192,32,0, 4,12,2,0,0,48,16,72,251,0,3,2,212,0,0,144,0,3,8,0,4,1,4,0,8,128,2,0,5 ,64,1,0,7,16,2,0,0,80,0,5,1,0,0,8,50,0,0,70,193,4,0,4,76,0,1,32,1,64, 252,0,4,192,4,10,64,3,0,1,1,0,1,52,132,0,0,65,4,10,64,34,0,2,32,128,4 ,0,17,4,128,2,80,66,2,0,3,41,162,9,16,134,20,212,0,1,64,16,0,1,129,0, 1,4,0,0,32,249,0,5,64,16,0,0,3,1,0,3,48,0,1,128,64,16,0,0,3,1,0,1,128 ,1,0,20,4,192,0,5,4,128,129,32,0,1,192,0,3,2,0,0,4,8,0,2,152,251,0,4, 224,64,22,0,0,3,2,0,4,32,2,176,64,22,132,2,2,0,2,1,60,0,0,1,0,5,128,0 ,8,44,128,5,0,0,64,0,4,7,0,0,1,44,32,4,0,2,128,2,2,0,0,7,4,0,2,56,250 ,4,0,3,16,0,0,10,0,0,1,0,1,128,2,0,0,48,1,32,81,0,0,138,64,19,0,2,128 ,136,52,128,0,6,64,0,8,20,133,162,64,8,0,4,9,0,0,4,22,0,0,64,196,64,0 ,0,64,0,2,128,0,1,176,8,186,250,12,0,3,16,0,0,12,1,35,0,1,32,0,1,32,6 ,64,100,0,0,12,64,131,0,3,9,48,4,4,0,6,2,0,7,24,66,3,192,64,0,0,3,0,2 ,8,128,1,24,0,0,18,192,8,1,64,0,0,2,0,0,9,4,0,1,9,168,250,0,4,240,64, 16,200,2,2,0,0,3,2,0,0,28,128,1,128,0,0,18,192,1,0,2,224,0,0,57,0,0,2 ,0,6,1,0,7,32,128,4,240,0,0,6,0,3,4,160,1,32,128,7,50,0,1,192,0,2,2,0 ,1,12,0,0,8,251,8,0,5,16,4,2,1,0,1,2,0,0,32,0,1,160,0,0,20,0,0,3,0,3, 1,48,136,0,6,64,0,8,40,8,5,192,0,0,24,0,3,4,0,1,40,0,1,192,0,3,1,0,3, 48,16,73,254,0,4,208,0,0,72,0,0,10,0,1,140,0,1,8,32,16,65,0,0,8,64,1, 0,2,128,132,176,0,0,8,0,6,4,0,7,144,0,0,2,224,0,0,153,8,0,2,8,128,0,0 ,16,0,0,2,8,136,0,1,33,0,1,72,4,0,0,48,1,152,253,176,1,0,3,4,2,0,3,77 ,16,0,0,180,0,0,32,0,0,4,18,64,139,0,4,20,136,0,6,64,0,6,32,0,0,36, 194,4,208,4,0,4,9,0,0,5,0,0,134,16,146,8,0,0,64,0,2,77,32,0,0,4,0,0, 144,251,128,1,0,3,64,0,4,12,0,1,48,16,0,0,2,64,8,0,0,3,0,6,1,0,5,128, 0,8,16,0,0,2,192,128,0,4,4,0,0,128,0,1,6,0,0,64,0,4,12,8,0,2,32,252,0 ,4,48,0,0,22,0,6,16,128,1,176,64,22,4,1,2,0,3,28,0,0,4,0,6,2,0,6,128, 44,128,5,192,0,5,11,128,1,45,32,4,128,0,2,3,2,0,0,12,130,129,0,1,96, 251,12,0,3,16,0,0,10,0,3,76,4,0,0,32,193,0,0,80,0,0,138,0,0,16,0,4,4, 4,0,6,12,0,6,137,17,20,133,162,192,4,1,0,3,5,128,5,20,0,0,38,8,16,0,4 ,36,0,0,16,0,1,67,255,4,32,0,2,192,34,12,1,0,2,68,2,0,0,48,18,6,97,0, 0,12,0,0,16,0,5,66,0,14,128,1,42,0,0,3,64,64,0,4,6,0,1,24,0,0,6,66,4, 1,0,0,96,0,1,40,132,17,1,0,0,49,251,96,0,3,240,0,0,16,8,0,2,15,0,1,12 ,128,7,128,0,0,18,192,0,0,2,0,3,40,0,15,224,1,32,128,4,176,0,5,8,128, 0,0,32,128,5,240,0,1,192,0,2,7,224,1,12,8,112,249,4,0,3,192,0,0,16,4, 0,2,4,0,1,16,16,6,160,0,0,12,0,1,1,0,3,52,0,15,128,1,40,0,0,3,0,6,4, 128,1,40,0,0,6,0,4,1,0,0,8,4,128,48,0,0,9,250,0,0,136,0,2,208,0,0,8,0 ,3,64,16,0,0,8,2,6,64,0,0,16,0,0,34,0,4,48,10,0,14,128,33,32,0,0,4, 192,8,1,0,3,8,128,1,16,0,0,39,68,130,0,1,8,0,1,4,128,5,176,16,224,252 ,16,0,0,36,66,0,1,4,18,8,0,2,129,8,0,0,4,2,32,128,4,26,0,0,35,0,4,132 ,0,17,4,129,22,208,36,0,0,64,0,4,133,32,134,66,148,8,0,0,64,18,0,1,1, 1,0,0,20,1,200,255,0,1,16,0,2,64,8,0,6,48,16,6,66,64,24,0,0,3,2,0,4,8 ,0,6,2,0,6,1,0,1,8,6,196,0,8,16,0,2,64,0,2,2,0,3,32,8,16,252,0,1,48,0 ,1,48,0,0,22,0,6,48,16,1,178,64,24,192,3,0,13,8,0,6,4,0,1,8,6,64,128, 0,1,3,1,0,1,128,1,44,32,6,130,0,2,130,0,1,12,0,3,72,251,12,0,0,48,34, 0,0,16,0,0,10,0,4,2,0,0,48,129,38,80,0,0,24,64,3,0,5,8,4,0,5,16,2,0,5 ,8,0,2,34,4,4,0,1,8,0,2,128,1,21,0,0,64,0,0,132,0,1,8,0,2,1,0,1,16, 170,253,4,0,0,160,32,0,0,192,0,0,13,0,6,16,162,6,96,0,0,24,16,0,6,17, 2,0,5,16,1,0,5,8,0,0,128,8,22,1,72,0,1,99,0,4,24,0,0,66,64,4,1,0,0,16 ,1,0,0,40,8,0,0,128,64,48,248,0,1,12,0,1,240,0,0,8,0,3,7,2,0,0,12,128 ,1,129,0,0,30,192,0,0,1,0,3,12,0,0,7,0,5,144,3,0,5,8,0,0,12,128,7,48, 0,1,192,0,3,128,0,0,32,128,5,241,0,1,192,0,2,3,0,1,60,0,0,32,254,4,0, 0,48,0,1,192,0,0,8,0,3,4,2,0,0,16,0,0,6,96,0,9,136,5,0,5,208,2,0,5,8, 0,1,8,6,1,0,2,3,0,2,128,1,24,0,0,6,1,0,2,2,0,1,8,0,3,97,253,0,1,32,17 ,0,0,208,0,0,8,0,3,12,0,1,160,32,0,0,128,0,1,8,0,5,32,2,4,0,5,8,2,0,5 ,4,0,0,32,2,6,128,128,0,1,83,0,2,128,1,32,0,0,22,64,72,0,1,33,4,0,0, 76,16,0,1,34,96,253,0,6,128,0,20,65,4,0,6,2,0,20,8,0,13,232,255,32,0, 0,4,128,0,2,2,68,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,0,1,8,0,0,1,32 ,0,0,4,0,7,8,0,6,36,0,1,128,0,2,2,64,0,0,8,0,6,16,0,0,2,64,0,0,8,0,0, 1,32,0,2,104,248,0,59,1,0,1,4,0,9,32,200,248,36,0,0,4,128,0,0,16,2,1, 64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,64,8,0,0,1,32,0,17,32,0,0 ,132,160,0,0,16,130,2,64,0,0,8,0,0,65,36,0,0,4,128,32,16,0,0,2,64,0,0 ,8,0,0,1,32,0,0,4,0,0,225,255,12,0,17,8,1,128,0,6,1,0,17,2,0,0,32,0,4 ,68,130,64,0,1,18,1,0,6,32,16,0,2,75,250,32,0,0,4,128,0,3,68,0,0,8,0, 1,32,0,0,4,0,6,8,0,0,1,32,0,1,8,0,14,32,0,1,8,0,2,2,64,0,3,2,0,3,16,0 ,0,2,0,1,8,0,1,32,0,2,72,248,8,0,66,2,0,5,146,253,32,0,0,4,128,0,0,16 ,16,128,72,0,0,8,0,0,33,48,0,0,4,128,32,2,68,130,72,0,0,8,0,0,1,32,0, 1,17,0,14,32,0,1,145,32,18,0,0,2,64,0,0,8,65,0,0,32,0,0,4,145,0,0,16, 0,0,2,64,0,0,8,0,0,32,40,0,0,4,17,48,253,0,61,1,0,11,136,255,0,61,128 ,0,11,16,255,0,14,128,0,34,32,0,7,64,0,1,2,0,6,8,0,0,32,0,0,248,255,0 ,1,64,0,1,32,0,0,8,0,2,16,0,0,16,0,1,8,0,6,16,0,2,16,0,26,1,0,0,32,0, 1,128,0,1,16,0,1,8,0,2,16,0,0,128,4,96,250,0,2,8,0,10,8,0,6,1,0,35,1, 0,1,4,160,0,4,8,0,3,120,248,0,9,8,0,33,128,0,0,64,0,0,8,0,9,64,0,0,4, 1,0,8,64,0,0,12,250,0,6,8,64,0,1,16,1,0,2,32,2,0,4,2,0,20,32,0,2,2,1, 0,0,16,0,1,18,0,0,1,0,1,16,32,0,0,20,32,0,0,64,0,1,64,0,1,64,0,0,32,0 ,0,254,32,0,0,4,128,0,0,64,0,6,1,0,1,128,0,3,64,0,25,8,0,9,64,0,2,64, 0,10,120,254,32,3,4,128,0,0,144,2,84,128,0,1,32,66,9,0,1,144,21,0,2, 64,0,0,1,0,4,5,0,14,64,0,0,16,37,1,2,0,0,4,0,1,17,0,0,2,0,1,9,16,0,0, 50,64,0,0,128,0,1,32,0,1,128,0,0,16,240,251,0,2,136,8,128,32,8,4,2, 160,2,68,0,2,12,150,68,0,2,2,8,0,0,8,0,0,81,0,0,9,0,17,8,130,65,0,1,4 ,1,32,0,1,42,88,16,34,2,65,154,0,1,160,0,2,10,72,52,0,1,254,8,0,1,32, 0,1,32,2,4,0,0,32,0,0,1,0,2,16,2,16,0,7,64,0,0,32,0,17,160,0,0,33,0,1 ,16,2,32,0,1,2,64,4,0,0,4,68,0,2,128,0,2,2,32,32,128,144,250,0,4,16,0 ,1,64,0,6,32,4,4,0,1,64,0,2,1,32,0,21,128,0,13,32,0,7,16,0,0,192,252, 0,61,128,0,0,1,32,0,4,16,0,2,16,253,0,2,32,0,3,32,0,9,128,0,8,64,0,32 ,128,128,0,9,56,249,0,16,24,0,31,32,0,11,1,2,1,0,4,1,0,0,64,4,8,251,0 ,14,8,0,33,34,0,8,2,0,1,8,0,1,8,0,2,9,4,0,0,16,0,0,72,255,0,57,64,0,2 ,2,32,0,2,8,0,6,80,251,0,16,4,0,56,216,255,0,49,64,0,2,1,0,11,1,0,2, 128,0,3,251,2,0,61,32,0,6,1,0,0,8,128,136,253,0,7,32,0,0,1,0,1,10,0,3 ,1,0,9,4,0,14,32,0,0,4,0,3,2,0,5,2,16,0,2,16,0,0,4,0,2,32,2,0,0,128,0 ,0,72,250,32,0,6,16,8,0,1,32,0,14,4,32,0,19,1,0,5,4,0,3,1,0,0,64,0,8, 128,24,248,0,23,16,0,1,64,0,29,32,128,0,0,128,0,12,104,253,0,74,152, 255,0,72,8,0,0,16,255,0,2,128,0,54,1,0,14,8,255,0,6,8,0,7,16,0,10,4,0 ,36,64,0,3,4,0,3,250,0,5,1,0,19,1,0,32,16,0,2,1,0,7,16,152,255,0,3,4, 0,15,64,0,7,8,0,1,32,0,3,4,0,1,16,0,32,176,250,0,32,8,0,13,8,0,1,32,0 ,3,16,0,17,154,252,0,6,1,0,4,16,0,5,64,0,0,8,0,7,65,0,1,4,64,0,1,128, 32,0,1,2,32,8,0,5,2,0,10,16,0,10,88,252,0,6,32,0,8,8,0,0,1,32,0,6,64, 128,0,0,1,0,0,2,4,0,1,64,128,0,1,1,2,0,8,1,0,3,16,0,4,2,0,10,24,248,0 ,2,4,0,0,16,0,0,4,0,3,8,0,1,64,32,0,4,128,0,2,128,0,30,128,0,7,128,0, 5,8,176,252,0,0,2,0,12,16,0,0,16,0,28,8,0,2,16,0,0,64,0,5,8,0,8,54,0, 2,8,160,253,0,30,16,0,2,16,0,2,8,0,2,8,0,17,16,8,0,5,2,0,4,252,0,21,4 ,0,24,32,0,8,16,4,0,14,232,250,0,1,5,0,0,4,4,32,2,0,1,2,0,0,2,0,0,1,0 ,0,32,1,0,0,32,0,0,64,0,2,1,128,64,0,0,32,0,16,16,8,0,0,4,64,0,1,128, 0,1,4,0,0,64,0,0,128,0,0,4,0,3,8,8,2,128,0,1,8,0,0,253,4,0,0,8,0,1,64 ,0,12,128,0,0,16,0,0,2,32,0,2,8,16,0,19,1,0,1,64,0,0,64,16,0,3,8,0,0, 32,0,0,8,0,3,8,0,1,1,0,0,26,252,0,0,128,12,0,0,1,18,64,4,0,1,1,0,0,2, 64,0,1,16,1,0,0,212,80,144,10,194,64,2,64,128,4,56,0,3,16,0,11,8,16, 20,6,64,0,0,64,0,0,9,64,42,0,0,168,0,0,32,161,18,0,0,2,0,1,80,33,3,64 ,5,1,16,8,255,64,67,16,38,2,96,161,8,132,135,0,0,16,13,137,0,1,88,1,0 ,0,40,16,18,64,0,1,8,129,28,33,9,0,2,8,0,6,12,2,32,0,0,128,114,0,0,82 ,36,37,16,56,4,16,64,10,4,2,32,16,8,4,192,56,72,128,131,2,69,0,0,32, 87,0,0,6,80,251,0,1,9,0,0,1,32,32,2,144,128,0,0,64,4,64,0,1,16,0,1,32 ,0,5,32,0,1,16,0,2,16,0,6,8,2,64,0,0,128,64,0,2,1,0,0,2,2,0,2,1,2,0,0 ,8,32,0,0,32,32,2,64,128,0,3,64,0,2,248,128,0,1,4,0,4,1,0,1,1,8,0,5,2 ,4,128,0,1,8,8,0,0,4,0,11,8,0,3,128,0,0,128,0,1,32,8,0,1,8,64,0,1,64, 0,0,128,0,0,16,128,0,1,1,0,2,128,0,1,8,128,250,16,0,18,32,0,0,4,0,6, 16,0,1,64,0,3,8,0,1,32,0,8,1,0,22,12,254,0,30,8,0,1,32,0,3,4,0,1,16,0 ,4,128,0,2,32,0,18,4,0,1,128,255,4,0,3,2,0,0,32,2,1,0,0,1,0,38,192,0, 6,1,0,9,4,0,2,64,57,249,0,14,36,0,5,1,0,2,64,2,0,18,4,16,0,10,128,0,1 ,4,0,2,1,4,0,1,136,0,3,249,16,0,28,1,0,1,4,0,2,128,0,2,2,0,20,64,0,10 ,176,250,0,12,2,0,17,64,0,2,64,0,2,32,0,2,32,0,16,16,0,0,34,0,5,2,0,2 ,248,248,0,4,128,128,16,0,8,4,128,0,8,32,0,30,4,0,13,32,248,4,0,11,1, 0,43,1,128,0,1,2,64,0,10,48,251,8,0,3,8,0,0,2,16,0,3,4,0,3,4,0,6,64,0 ,19,1,0,10,32,2,0,1,128,64,0,4,1,0,3,160,253,0,8,4,0,1,24,0,1,128,0,1 ,32,0,4,9,0,21,16,0,0,4,0,9,16,0,2,1,0,7,32,0,0,72,252,0,5,32,0,7,4,0 ,0,1,0,34,64,0,7,8,0,11,104,255,0,34,128,0,6,64,0,5,64,128,0,6,2,0,1, 8,0,11,112,255,0,9,8,0,0,140,2,0,30,160,17,0,4,2,64,19,72,0,4,65,0,3, 64,3,0,0,128,0,5,254,0,11,12,0,31,128,65,0,6,128,32,16,0,17,176,253,0 ,11,15,0,31,128,65,0,7,58,0,3,12,0,5,131,120,64,0,4,24,252,0,10,65,13 ,0,31,128,17,0,5,8,16,72,0,3,4,0,5,8,104,2,0,4,112,250,0,44,128,81,0, 6,33,66,0,3,176,0,5,16,4,1,0,4,200,252,0,9,120,32,3,2,0,30,224,1,0,4, 6,200,2,40,0,3,60,8,0,3,192,3,120,64,0,4,192,248,0,44,128,65,0,7,33,0 ,3,48,0,7,16,0,4,88,249,0,10,8,0,33,5,0,4,24,9,32,64,0,3,48,0,6,98,2, 0,4,64,251,0,6,2,0,4,32,128,52,18,0,7,140,0,10,40,0,6,180,133,52,0,6, 8,0,3,132,0,3,1,0,2,129,0,4,8,249,0,14,48,0,9,8,0,9,12,0,6,134,1,48,0 ,12,8,0,12,200,255,0,7,4,0,5,48,0,8,14,8,0,9,12,0,6,102,1,12,0,6,88,0 ,3,16,16,0,0,240,0,3,24,0,6,255,8,0,5,128,0,5,32,48,4,0,7,13,0,10,10, 0,6,133,81,4,0,6,40,0,3,128,0,1,208,34,0,2,8,0,5,18,255,0,6,128,0,5,9 ,32,10,0,7,65,2,0,9,10,0,6,165,129,0,0,10,0,5,48,0,4,33,0,1,2,0,2,96, 17,0,4,128,249,0,6,30,8,0,3,96,128,60,0,8,15,0,18,192,1,8,0,6,72,0,3, 12,0,1,240,128,0,2,120,0,5,32,251,4,0,13,48,0,8,12,4,0,17,160,1,48,0, 6,64,0,4,32,0,1,32,0,2,96,0,5,209,254,0,7,2,0,4,8,49,33,0,7,76,0,18, 160,68,52,18,0,5,32,0,3,128,0,1,192,4,0,2,96,0,6,252,32,0,14,128,32,8 ,0,6,32,68,0,16,160,0,3,16,0,3,8,0,4,65,0,2,67,4,11,2,128,0,2,176,32, 176,253,0,36,4,0,6,2,1,0,12,48,0,5,3,0,4,48,0,0,184,248,0,16,2,4,0,7, 128,0,8,8,0,6,100,1,0,2,192,0,3,88,0,3,8,0,1,240,0,1,192,0,0,120,0,3, 60,0,0,128,255,8,4,1,0,13,66,0,7,128,8,0,8,16,0,6,168,0,3,192,64,0,2, 40,0,3,4,34,0,0,208,40,0,0,5,3,106,18,0,2,52,0,0,50,249,0,0,8,0,14,70 ,4,0,25,192,16,0,3,128,0,2,48,0,3,180,16,0,1,2,0,0,68,19,2,1,0,3,2, 176,253,96,128,0,13,128,7,0,7,96,0,0,1,0,7,4,0,6,2,1,1,0,1,240,0,3,72 ,0,3,12,0,1,240,128,6,192,3,120,64,0,2,12,32,160,250,4,0,15,4,0,18,16 ,0,6,8,1,0,7,64,0,7,32,0,0,4,3,0,6,177,251,128,33,0,14,20,2,0,7,32,0, 16,128,68,0,2,192,0,0,1,0,1,32,0,4,64,0,0,192,8,8,1,32,100,16,0,4,248 ,249,0,1,52,128,0,8,128,1,4,0,8,129,0,10,18,0,6,41,0,0,52,128,0,5,8,0 ,3,4,0,3,65,80,136,0,0,128,0,2,128,32,96,250,0,4,4,0,7,128,0,10,4,0, 26,3,1,0,4,8,0,12,168,253,0,2,16,0,8,224,1,1,0,8,8,8,0,9,4,0,6,98,1, 12,128,7,0,2,128,0,0,88,0,4,8,0,0,240,0,0,6,0,1,120,0,3,12,0,0,168, 254,8,0,1,1,128,0,7,32,16,0,0,33,0,7,64,0,18,160,0,0,4,193,6,0,2,64,3 ,44,0,3,128,0,1,208,0,0,2,0,0,8,106,17,0,2,4,0,0,26,253,0,2,6,130,0,9 ,48,10,0,7,12,2,0,9,34,0,6,209,16,48,10,22,0,2,64,11,48,0,4,10,0,0, 192,2,152,4,16,1,1,0,2,48,10,160,249,0,1,12,128,1,0,7,224,1,12,0,8,15 ,0,10,4,0,6,2,1,61,0,0,7,4,0,1,192,0,0,74,0,3,44,0,1,240,128,30,192,0 ,0,120,64,0,2,60,0,0,88,255,4,0,3,2,0,30,4,0,6,2,1,48,0,0,6,0,3,3,64, 0,4,8,0,0,192,32,24,0,2,16,0,2,48,0,0,113,255,0,2,33,32,0,7,128,1,0,0 ,4,0,7,132,4,0,2,1,0,5,136,0,6,132,80,4,18,70,1,0,3,32,0,4,2,0,0,192, 0,0,24,0,0,17,97,1,0,2,48,0,0,184,249,0,4,16,64,0,8,128,0,7,1,8,0,0,4 ,0,0,2,0,5,2,1,0,5,33,0,0,52,128,2,0,4,8,0,0,1,0,1,48,65,0,2,64,80,0, 0,1,128,0,2,132,0,0,176,255,0,29,4,0,5,2,2,0,5,1,0,0,48,0,0,4,0,9,48, 0,2,128,0,8,8,80,255,0,24,12,2,0,1,8,0,6,16,0,6,104,1,12,128,5,0,4,88 ,0,1,4,0,0,56,16,0,0,48,0,0,6,0,0,131,120,0,5,160,250,8,0,4,16,0,9,64 ,2,0,5,44,0,1,128,0,0,1,0,5,132,0,6,162,0,0,4,128,34,4,0,3,40,0,0,44, 0,1,4,0,1,16,0,0,2,0,0,10,104,20,0,3,10,97,251,0,5,4,0,9,22,0,6,36,16 ,0,1,8,4,0,5,32,2,0,5,208,16,0,0,1,3,0,4,48,0,1,1,0,0,52,10,0,0,192, 32,24,4,160,0,0,1,0,3,2,75,251,0,4,48,64,0,8,128,1,4,0,5,3,0,1,12,0, 16,1,9,144,4,0,4,72,0,0,15,0,1,60,0,1,240,0,0,30,192,0,0,120,64,0,2, 12,32,88,253,4,0,16,4,0,5,4,0,2,136,4,0,5,64,2,0,6,65,48,8,5,0,4,64,0 ,0,12,0,4,192,0,0,24,0,7,8,18,251,0,4,64,132,0,9,16,0,6,128,2,0,0,48, 0,15,128,16,52,1,2,0,4,32,0,0,12,4,0,0,48,4,0,0,192,0,0,24,0,0,136,96 ,66,0,2,32,0,0,88,253,32,0,0,4,8,0,0,16,0,0,2,64,0,0,8,0,6,208,0,0, 130,80,67,8,0,0,13,160,1,20,0,0,1,0,5,128,0,6,32,0,1,128,4,0,4,8,0,0, 1,0,2,65,0,2,65,80,1,4,129,0,2,4,2,64,253,0,7,16,0,8,192,0,0,24,0,0,3 ,0,1,12,136,1,32,0,19,2,0,14,24,0,1,96,0,4,32,232,252,0,5,128,0,12,24 ,0,2,32,4,128,1,44,128,8,0,5,64,4,0,5,96,1,0,0,128,5,0,4,88,0,1,4,0,0 ,12,0,1,240,0,0,4,192,1,16,0,3,44,0,0,160,254,8,128,0,0,18,0,1,4,0,0, 2,32,1,32,0,6,20,152,32,3,2,2,140,144,145,20,0,0,1,0,5,128,0,6,160,0, 1,128,34,4,0,3,40,0,0,44,0,1,4,0,1,208,32,90,96,160,8,128,0,2,48,66, 137,254,0,1,130,0,2,4,1,0,0,8,0,0,2,0,5,192,4,136,0,0,34,4,129,44,128 ,5,26,18,1,0,5,128,0,6,192,16,0,1,3,0,4,48,0,1,16,0,0,48,0,2,2,154,0, 0,8,104,0,3,4,2,67,253,224,1,12,32,0,0,48,0,0,22,200,3,26,32,0,5,240, 128,6,200,1,120,0,0,7,228,1,32,0,0,2,0,6,1,0,6,1,1,128,4,0,4,72,0,0, 15,0,1,60,8,0,0,240,128,6,132,2,25,64,0,2,8,16,224,254,4,0,0,16,32,0, 3,8,0,0,2,0,7,32,8,0,0,2,2,0,0,12,128,1,33,136,0,6,64,0,7,65,0,1,3,0, 4,64,0,0,12,0,1,48,0,3,24,0,0,3,0,4,52,0,0,106,251,0,0,32,128,0,1,192 ,130,128,0,0,8,96,8,0,5,192,0,0,80,144,0,1,66,130,8,4,144,128,0,6,64, 0,6,128,4,0,1,4,0,4,32,0,0,76,4,0,0,48,0,1,192,0,0,1,0,0,147,0,0,36,0 ,2,20,18,208,249,0,9,8,0,0,1,4,0,0,4,128,34,148,2,11,72,0,0,106,0,0, 13,160,69,4,0,0,4,0,6,2,0,5,32,17,4,66,0,5,8,0,0,1,128,1,0,0,65,0,2, 64,80,16,0,0,129,1,0,1,128,32,152,255,0,10,64,0,4,4,192,0,0,24,0,1,96 ,0,0,12,8,1,0,1,1,0,5,128,0,6,128,0,0,1,0,9,128,1,1,0,1,192,128,0,1,2 ,1,0,3,48,0,0,232,248,0,17,128,64,8,8,0,0,97,0,0,12,128,129,44,0,0,8, 0,6,4,0,5,96,1,8,32,0,5,88,0,1,228,1,12,0,1,32,0,0,6,192,0,0,24,0,0, 12,4,0,0,8,0,0,216,249,8,0,9,8,64,4,0,2,70,200,8,24,1,32,96,0,0,136, 144,9,20,0,7,12,0,6,169,0,0,36,0,6,40,0,0,44,160,1,4,0,1,208,66,2,64, 82,8,0,0,32,0,1,52,32,41,254,0,11,128,4,0,0,48,0,0,68,196,66,88,0,0,3 ,100,4,8,128,1,24,18,0,14,64,1,4,32,0,5,48,0,0,32,0,0,16,176,8,0,0, 208,36,88,4,161,96,16,76,0,1,180,0,0,67,253,0,9,56,32,3,0,1,60,144,3, 112,0,0,22,200,1,120,32,15,228,1,33,0,16,1,12,0,6,72,0,0,15,100,0,0, 61,0,1,48,0,0,30,128,0,0,120,0,0,3,8,0,0,12,8,104,248,4,0,9,32,0,0,8, 0,1,16,6,0,4,1,0,1,128,1,32,8,0,15,1,16,0,6,64,0,0,12,0,1,48,0,1,192, 0,0,24,64,3,96,0,0,12,0,1,48,0,0,170,250,0,10,2,8,0,2,1,16,34,128,132 ,130,0,1,64,12,129,33,16,0,16,1,0,0,17,0,5,32,0,0,140,4,0,0,48,0,3,24 ,0,0,11,97,0,0,44,4,0,2,136,251,48,0,0,4,128,2,18,0,0,2,64,3,0,1,1,36 ,0,0,52,65,0,0,16,2,2,65,3,9,0,0,37,164,17,164,0,15,160,1,36,0,1,16,0 ,0,2,64,0,0,73,0,1,160,1,52,192,0,2,64,80,136,96,129,0,0,160,1,52,0,0 ,136,249,0,3,4,0,9,48,0,1,192,64,0,0,16,1,0,2,128,129,16,16,0,6,10,0, 6,133,1,48,32,0,5,32,0,3,48,0,1,192,128,0,9,144,248,128,1,0,0,16,6, 192,128,0,4,3,0,0,128,48,0,1,192,0,1,8,3,0,0,32,15,132,1,44,0,15,128, 1,57,0,1,192,64,24,200,0,0,88,0,3,48,0,0,6,34,0,0,6,192,3,113,0,3,60, 8,208,251,12,128,0,0,1,38,194,0,3,1,0,0,65,132,5,48,4,0,0,192,16,24,0 ,0,9,98,1,132,128,5,21,0,0,4,0,5,16,2,0,5,136,5,52,64,0,1,2,64,64,16, 41,0,2,136,176,32,16,208,136,2,0,0,18,8,8,0,1,4,54,1,66,248,4,0,0,2,6 ,34,0,0,8,0,0,8,16,0,1,128,4,8,32,10,0,0,128,4,0,0,33,18,0,0,12,129, 128,1,24,0,0,2,0,5,16,1,0,5,8,16,52,4,0,0,192,0,0,89,0,0,32,49,0,2,48 ,48,0,0,134,208,8,25,80,96,8,4,0,1,16,129,0,0,232,254,96,0,0,12,128,1 ,242,64,6,192,0,0,1,0,0,3,224,1,61,0,1,48,64,6,192,3,121,0,0,11,226, 129,16,0,0,7,0,5,144,3,0,5,104,0,0,25,0,1,48,0,0,6,200,0,0,72,0,1,96, 0,0,60,144,1,48,0,0,30,192,0,0,120,16,0,0,224,1,56,32,200,254,4,0,0, 48,0,0,6,0,0,64,24,0,4,136,1,49,0,1,128,0,0,16,4,0,0,96,32,8,136,1,16 ,128,5,0,5,208,2,0,5,136,1,48,32,0,0,192,0,0,24,0,1,32,0,3,48,0,0,6, 192,0,0,24,0,0,1,0,2,128,129,0,0,16,241,249,0,0,32,0,0,33,16,196,2, 152,16,64,0,1,8,128,1,48,33,0,0,64,130,64,0,0,64,96,0,0,141,128,32,16 ,0,0,4,0,5,8,2,0,5,4,72,52,0,1,192,68,24,9,10,65,0,2,16,145,64,6,2,0, 0,24,64,35,98,0,1,128,5,176,0,0,248,255,0,29,4,0,6,2,0,6,4,2,0,18,128 ,0,4,128,64,216,251,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4 ,128,0,0,16,0,0,2,64,0,0,8,0,1,32,0,0,4,0,7,8,0,6,4,0,1,128,0,0,16,0, 0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,0,1,8,0,0,1,32,0,2,112, 254,0,47,32,0,18,2,0,4,32,152,253,40,0,0,4,128,0,0,16,0,0,2,64,0,0,8, 0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,33,40,0,0,4,0,16,144,4, 128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,0,1,8,0,0,1 ,32,0,2,89,249,0,24,2,0,2,2,0,17,2,32,2,0,15,16,0,4,128,8,51,255,32,0 ,0,4,128,0,0,16,0,0,2,64,0,0,8,0,3,4,128,0,0,16,0,0,2,64,0,0,8,0,1,32 ,0,1,16,0,16,5,32,0,0,16,0,0,2,0,3,1,0,2,128,0,5,2,0,0,1,32,0,3,254,4 ,0,27,16,0,15,128,0,0,16,0,0,2,0,7,128,0,0,16,0,1,64,0,0,8,0,0,1,32,0 ,3,16,34,252,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,33,40,4,5,128,0,0 ,16,0,0,2,64,0,0,8,0,0,1,32,0,0,128,0,15,32,16,0,1,16,16,0,0,2,64,64, 8,65,1,32,4,4,130,0,0,16,2,66,0,0,8,8,1,1,32,0,1,2,64,255,0,24,8,0,1, 16,0,19,2,0,7,128,0,3,64,0,0,8,0,0,1,32,0,5,200,255,0,44,128,0,13,16, 0,11,16,0,0,24,254,0,0,2,0,6,4,128,0,7,64,0,0,72,0,0,1,0,3,2,0,21,1, 16,0,3,8,0,2,4,0,1,128,64,0,2,64,0,4,136,255,0,2,8,0,0,1,0,2,128,0,7, 1,32,0,0,4,128,0,25,2,0,4,2,0,2,2,0,6,8,0,6,208,248,0,1,8,0,0,1,32,0, 0,4,0,1,16,0,1,64,0,0,8,0,4,128,0,0,16,0,1,68,0,33,8,0,12,8,248,0,14, 8,0,58,144,255,64,0,6,80,0,0,16,32,0,0,4,0,1,8,0,2,2,16,0,0,1,0,20,64 ,0,8,64,16,0,0,2,0,0,32,4,0,0,4,64,8,0,0,129,0,6,200,255,0,12,2,0,1,4 ,0,36,128,32,0,18,56,251,64,0,6,136,80,16,32,64,13,0,1,56,2,0,1,4,8,0 ,0,1,0,1,128,0,17,64,5,0,0,8,0,0,64,0,2,128,58,48,0,0,4,0,0,24,16,0,0 ,2,64,4,128,10,1,0,5,80,248,192,2,32,162,0,0,1,0,0,8,0,0,144,0,1,21,0 ,0,1,4,37,0,0,1,0,1,2,0,1,172,8,0,0,1,0,16,32,80,4,1,130,1,32,44,4,6, 64,0,0,64,2,0,0,16,8,2,128,0,2,1,0,4,48,0,0,56,255,32,0,3,4,0,0,16,0, 1,2,0,0,4,0,4,2,0,26,64,0,1,2,2,128,2,16,0,3,4,0,0,16,8,4,0,2,128,0,5 ,16,128,168,250,0,1,4,0,9,128,0,1,32,0,3,16,0,1,16,1,32,0,21,128,0,3, 1,32,0,6,128,0,8,8,0,0,192,253,0,46,2,16,0,24,64,168,251,0,60,32,0,12 ,184,253,0,26,2,0,16,128,0,5,32,0,3,16,0,3,8,0,2,64,0,5,16,0,0,216, 254,16,0,2,8,0,10,64,0,2,4,128,1,0,1,32,0,20,8,0,5,128,0,11,4,0,0,64, 0,4,164,248,2,0,10,2,0,39,128,0,14,128,0,3,128,24,255,0,27,32,0,29, 128,0,3,64,0,0,64,0,7,48,249,8,0,11,128,0,8,32,0,0,4,0,23,64,0,0,8,0, 0,8,0,1,4,0,0,64,0,1,2,0,2,2,64,0,1,4,128,0,1,4,242,253,0,5,2,0,4,32, 0,0,4,0,35,1,32,0,0,2,0,1,16,0,2,64,0,7,8,0,2,128,186,250,0,2,4,0,4, 64,0,6,128,0,6,2,0,0,32,0,18,128,32,0,16,32,128,64,0,3,96,0,0,208,251 ,0,13,32,0,1,4,0,9,8,0,17,64,0,18,1,0,6,80,248,32,0,0,37,128,0,0,16,0 ,0,2,64,2,72,0,1,32,0,0,4,0,0,4,16,0,1,16,0,1,128,0,0,32,1,0,32,64,0, 12,112,253,0,22,2,0,32,1,0,2,128,0,12,160,254,0,13,64,0,3,32,0,5,2,0, 43,2,0,2,184,249,0,59,8,0,13,144,255,0,4,64,0,11,64,0,38,32,0,8,8,1,0 ,4,104,248,0,17,128,0,2,8,0,22,128,0,0,16,0,17,128,0,6,128,255,0,29,8 ,0,1,32,0,3,4,0,1,16,0,10,64,0,20,240,250,0,11,2,2,64,0,7,16,0,1,2,0, 5,8,0,18,128,0,1,16,0,17,24,251,0,5,1,0,15,130,0,19,8,0,5,2,0,22,128, 252,0,0,64,0,0,16,0,0,2,64,1,8,0,1,48,0,1,128,0,0,16,0,6,32,0,0,16, 192,0,2,8,0,1,32,0,3,4,0,1,16,0,17,8,0,12,32,255,0,21,8,0,0,32,0,19, 64,0,12,128,16,0,2,32,0,2,3,0,4,16,248,252,0,16,128,64,0,0,8,0,39,4,0 ,1,32,0,1,66,0,0,16,0,3,8,32,255,0,24,16,0,4,20,0,0,8,16,16,0,2,10,0, 0,4,8,8,0,30,104,249,4,0,10,16,0,0,2,0,1,16,0,10,128,0,1,64,2,0,1,64, 64,0,1,32,1,0,1,32,0,8,4,0,19,48,252,0,4,1,0,10,2,1,0,3,1,0,20,128,0, 1,8,0,0,1,128,0,4,2,128,0,0,1,0,3,8,0,1,32,0,4,8,136,255,4,128,0,8,64 ,0,10,64,0,0,4,0,0,64,0,5,2,0,8,8,0,1,32,0,6,32,0,0,4,2,0,0,16,0,5, 128,0,4,16,0,0,120,250,0,1,161,8,0,0,67,0,2,80,224,64,0,1,3,0,1,3,3,0 ,0,8,0,1,9,16,1,128,0,0,17,0,4,4,0,5,2,0,1,16,192,64,4,16,0,0,3,64,0, 1,1,72,1,3,72,128,4,8,20,0,1,84,0,1,18,0,0,40,2,5,4,16,160,249,0,0, 208,146,9,41,65,50,18,64,82,37,176,2,128,1,32,0,0,64,4,0,3,5,162,161, 1,8,160,0,3,24,4,64,32,0,3,4,2,32,0,0,128,132,22,214,8,75,0,0,34,0,0, 8,72,168,25,1,0,0,136,128,16,160,32,72,106,162,64,0,0,81,128,87,128,8 ,232,252,0,0,64,8,32,128,128,128,0,2,16,16,0,0,64,0,18,16,8,128,16,0, 3,8,1,16,0,0,128,0,0,8,0,1,17,0,12,32,16,0,0,128,0,2,128,64,0,0,16,88 ,252,0,5,32,8,0,0,130,0,2,128,0,0,16,0,9,2,0,0,4,0,3,8,0,13,16,0,5,32 ,16,4,2,0,3,16,0,1,8,2,32,0,1,64,0,2,200,248,0,25,16,0,32,4,0,13,216, 250,0,5,32,0,17,4,5,0,3,1,0,1,4,0,2,128,0,2,2,0,10,8,0,16,4,0,1,8,248 ,0,0,1,0,2,128,0,0,16,0,5,1,0,4,4,0,24,32,0,18,128,0,5,2,0,0,240,255, 0,17,24,0,0,2,66,0,24,4,32,0,18,4,0,4,64,224,249,0,5,2,0,17,32,0,1,64 ,0,0,1,2,0,0,4,8,0,1,128,0,0,1,0,0,2,4,0,3,32,0,26,60,255,0,31,2,0,2, 2,0,2,1,0,2,1,0,29,136,252,0,60,32,0,12,184,253,0,2,128,0,2,32,0,1, 128,0,3,64,0,10,2,0,21,2,0,8,64,0,13,48,255,0,3,4,0,12,128,0,0,17,0,0 ,2,0,22,129,0,28,249,0,46,128,0,1,1,0,11,128,128,0,3,32,0,2,128,0,0, 160,255,0,22,8,0,0,1,0,24,128,0,5,8,0,7,2,0,6,16,252,0,19,16,16,0,2, 24,0,24,128,16,0,0,1,0,1,8,0,16,152,255,160,16,0,1,70,2,0,0,24,8,11,4 ,20,0,4,22,24,0,0,26,64,3,0,38,22,8,0,6,160,0,0,4,1,64,255,128,128,0, 17,24,0,0,3,0,48,1,16,8,16,253,96,1,0,0,128,7,0,1,30,208,3,24,0,4,128 ,7,48,0,0,30,192,3,0,37,128,7,2,0,6,96,1,0,0,8,96,254,160,0,1,128,160 ,0,1,2,64,8,9,0,4,128,160,16,0,0,26,64,3,0,37,128,0,8,160,0,2,224,248 ,64,1,0,8,2,0,5,192,64,0,0,32,8,4,0,46,192,16,130,8,128,252,0,0,1,1,0 ,0,7,0,1,28,128,3,16,32,0,4,7,240,0,0,4,128,0,39,7,0,8,1,12,0,0,16, 249,0,0,1,0,7,96,0,6,192,0,52,1,0,0,8,168,249,128,132,0,1,6,0,1,24,0, 0,3,96,8,0,4,6,208,0,42,6,0,7,128,132,8,2,104,253,32,16,48,6,0,0,192, 68,0,4,140,161,80,48,6,0,3,80,17,0,4,4,16,0,6,34,0,6,17,0,0,48,34,0,0 ,192,24,88,32,0,7,70,4,0,2,3,0,2,32,0,0,4,10,56,252,0,0,128,48,0,10,1 ,0,4,24,0,0,130,0,4,48,0,7,12,0,6,6,0,21,1,0,3,16,0,0,208,255,96,1,60 ,0,1,240,0,5,15,128,65,60,32,0,2,4,0,1,1,0,3,48,0,7,12,0,6,6,0,0,60,0 ,1,240,0,0,30,0,7,128,7,0,2,192,3,0,2,96,1,0,0,8,248,249,168,0,0,52,0 ,1,16,68,0,4,65,144,17,4,2,0,2,26,16,3,0,4,48,64,0,6,10,0,6,5,0,0,4,5 ,0,0,16,136,2,2,0,6,128,32,8,0,1,64,16,4,0,1,160,0,1,2,18,249,64,1,48 ,0,10,16,1,0,3,26,0,0,10,1,0,3,176,16,0,6,10,0,6,5,0,24,192,16,2,8,8, 253,0,0,1,57,0,1,224,0,5,14,96,1,56,0,3,4,208,1,0,4,44,0,17,56,0,1, 224,0,0,28,0,8,7,0,2,128,3,0,3,1,12,0,0,96,250,4,1,48,0,10,1,0,4,26,0 ,0,131,0,4,48,8,0,41,1,0,0,8,81,248,128,32,52,0,1,192,0,5,12,128,17, 49,0,3,2,0,6,48,0,17,48,0,1,192,0,0,24,0,8,6,0,3,3,0,2,128,32,128,0,0 ,64,248,48,16,48,6,70,2,0,0,24,8,0,2,44,16,0,0,180,128,0,0,208,72,0,0 ,64,3,0,1,140,1,0,17,128,145,0,9,12,4,0,0,48,0,1,16,34,0,0,64,131,0,2 ,32,0,2,112,251,0,0,128,48,0,11,32,32,0,0,128,0,2,3,0,1,12,0,34,16,0, 4,3,0,6,136,251,96,1,60,128,7,0,1,30,0,3,15,0,1,48,0,0,6,242,0,1,192, 3,0,1,15,0,18,224,1,0,9,15,0,1,60,0,5,131,0,2,96,1,0,1,104,250,172,0, 0,52,128,32,2,0,0,2,16,0,2,65,16,0,0,48,5,6,192,130,0,0,64,3,0,1,13,0 ,18,32,8,2,0,8,65,1,0,0,4,5,0,1,130,0,1,35,0,2,160,0,2,186,250,68,1, 48,0,11,48,18,64,80,36,0,1,32,0,1,12,0,38,1,0,0,19,1,0,1,192,16,2,0,0 ,232,250,0,0,1,57,0,0,7,0,1,28,0,3,14,0,1,60,128,7,242,0,1,128,0,0,1, 0,0,14,0,18,192,1,0,9,14,0,1,56,0,1,48,0,1,192,0,4,1,0,1,64,255,4,129 ,48,0,11,48,0,1,196,128,0,4,12,0,36,64,128,0,1,2,0,3,129,0,1,41,251, 128,0,0,48,0,0,6,0,1,24,0,3,12,0,1,184,16,70,208,0,5,12,0,18,128,1,0, 9,12,0,1,48,0,1,192,8,0,0,128,81,0,2,128,0,2,176,255,32,16,0,4,26,0,0 ,35,1,0,3,36,66,0,0,208,68,18,1,19,8,0,0,12,144,9,0,8,8,0,6,132,145,0 ,1,6,2,0,2,3,97,68,0,2,48,0,3,26,64,136,0,1,13,32,0,0,20,0,0,128,250, 0,0,128,0,4,24,0,6,48,0,1,128,0,0,8,4,0,0,1,0,2,128,0,8,10,0,6,5,0,14 ,16,0,4,3,0,1,12,0,1,32,0,0,136,249,96,1,0,4,30,192,3,0,4,32,0,1,192, 128,0,0,136,3,96,64,15,224,1,0,16,224,1,0,0,128,7,0,2,192,3,121,0,3, 60,0,4,8,2,0,2,100,1,44,0,0,64,251,168,0,5,26,64,16,4,0,3,144,32,0,0, 192,4,152,64,16,100,2,33,36,136,0,8,2,0,6,33,8,1,128,32,8,0,1,64,32,8 ,68,0,2,4,33,0,2,128,0,0,129,0,1,44,160,0,0,20,0,0,185,248,64,1,0,4, 24,0,6,160,0,1,192,2,8,64,64,0,0,65,0,11,16,0,6,8,0,19,16,19,1,0,0,76 ,192,16,26,33,19,253,0,0,1,1,0,3,30,128,3,0,4,28,16,0,0,240,32,22,136 ,3,120,0,0,14,192,1,0,8,4,0,6,200,1,0,1,7,0,2,128,3,112,0,3,56,0,3,6, 192,3,0,1,3,4,1,36,0,0,160,250,4,1,1,0,3,24,0,6,32,0,1,192,0,0,24,68, 0,0,96,16,1,32,0,9,4,0,6,1,0,20,3,0,1,12,0,0,129,32,0,0,42,248,128,0, 5,26,0,0,3,0,4,16,5,0,0,192,128,64,64,3,96,1,13,128,1,0,8,16,0,6,136, 1,0,1,6,0,3,3,96,0,3,48,0,4,9,83,0,1,64,136,16,16,10,112,255,32,16,0, 4,24,8,0,1,20,0,0,128,5,0,2,192,72,128,64,32,73,0,12,2,0,6,129,145,0, 0,128,0,7,140,1,0,0,48,0,5,3,0,2,32,0,0,4,0,0,40,255,0,0,128,0,11,128 ,0,4,24,8,0,1,64,0,35,16,0,5,1,0,5,208,255,96,1,0,4,30,0,1,24,0,1,224 ,1,0,2,224,128,4,8,1,64,0,12,10,0,6,229,1,0,1,6,0,6,15,0,1,60,0,4,192 ,3,0,2,96,1,44,0,0,96,250,164,0,5,130,8,0,0,8,0,1,32,40,0,2,208,8,26, 1,161,0,0,36,0,11,18,0,6,41,40,0,1,134,0,6,65,16,0,0,132,16,0,3,64,32 ,2,0,1,160,0,0,20,0,0,154,250,76,1,0,8,2,0,5,16,130,26,0,0,11,97,1,0, 24,4,0,19,192,16,26,33,208,248,0,0,1,1,0,3,28,0,1,16,32,0,0,192,1,0,2 ,224,0,0,4,208,3,120,32,0,19,192,1,0,0,128,7,0,6,14,0,1,56,0,4,128,3, 0,3,1,36,0,0,40,252,8,129,0,7,96,0,6,192,64,26,0,0,130,0,6,2,0,6,1,0, 32,1,32,8,65,255,128,16,0,4,24,0,1,96,132,0,0,128,1,0,2,192,2,2,0,0,2 ,32,129,0,3,128,2,0,5,64,1,0,5,128,1,0,1,6,2,0,5,12,0,1,48,0,5,3,0,2, 128,8,17,2,192,252,32,16,0,2,192,68,0,1,19,1,0,1,128,49,0,2,144,8,27, 0,1,104,4,0,0,128,1,4,6,0,14,128,145,0,12,52,9,0,1,24,2,0,0,3,0,1,1, 32,0,0,4,0,0,80,249,0,0,128,0,10,128,1,0,2,192,0,0,24,0,1,96,64,0,0, 128,1,1,128,0,6,64,0,21,48,0,1,192,0,3,1,0,5,56,252,96,1,0,2,240,0,1, 192,3,0,2,224,1,0,2,128,64,30,0,1,96,16,0,0,224,1,48,0,0,4,0,6,2,0,5, 224,1,0,12,48,0,1,32,64,24,192,3,2,0,1,96,1,44,0,0,32,253,168,0,3,16, 20,0,0,64,16,1,0,1,160,1,0,2,192,8,26,0,2,4,0,0,160,1,32,17,4,0,6,2,0 ,5,32,16,1,0,11,48,10,0,0,208,0,0,88,96,0,2,44,168,0,0,20,0,0,18,249, 64,1,0,10,128,1,0,2,192,0,1,2,0,0,96,32,0,0,128,1,0,0,129,0,6,64,0,21 ,48,17,0,0,208,68,0,0,16,0,2,44,192,16,26,33,88,252,0,0,1,1,0,1,224,0 ,1,128,3,0,2,192,1,0,2,112,64,4,0,1,120,0,1,192,1,12,16,4,0,5,34,2,0, 5,196,1,0,12,12,0,1,32,0,0,30,128,3,0,1,3,4,1,36,0,0,184,255,4,1,0,10 ,160,1,0,3,128,0,2,32,0,1,128,1,0,0,128,0,6,64,0,6,1,0,13,32,0,1,192, 0,5,12,0,0,1,32,8,97,248,128,136,0,2,192,0,2,3,0,2,160,1,0,2,32,4,0,2 ,96,130,0,0,128,1,0,0,66,0,14,128,1,0,12,24,34,0,2,24,2,3,0,2,144,16, 145,0,0,184,255,32,16,0,1,22,8,0,3,8,130,76,0,0,4,48,6,0,0,16,8,0,0, 16,19,72,66,0,2,20,132,2,0,5,70,1,0,5,162,73,0,2,208,0,8,4,8,0,0,16, 32,2,64,0,0,96,32,0,0,32,0,0,4,0,0,200,254,0,0,128,0,10,132,129,0,3, 128,24,0,1,97,0,3,32,128,4,0,5,96,2,0,5,128,1,0,2,192,0,8,48,0,13,8, 249,96,1,0,0,128,7,2,0,3,120,0,0,15,64,128,60,32,0,1,64,4,192,3,64,32 ,0,2,48,32,0,6,2,0,6,137,1,0,12,32,0,3,24,0,0,3,120,0,1,96,1,44,0,0, 152,255,168,0,1,128,64,0,4,64,8,65,176,9,4,0,1,192,0,0,26,66,16,97,4, 0,2,32,1,0,6,20,0,6,128,81,0,3,130,0,7,144,8,0,1,136,24,8,3,8,68,0,0, 160,0,0,20,0,0,178,251,64,1,0,7,8,16,0,0,160,1,2,0,2,4,27,17,0,0,96, 68,0,2,128,64,0,14,8,129,0,2,192,132,0,7,48,17,0,1,8,1,16,32,0,2,192, 16,26,33,32,251,0,0,1,1,0,0,7,0,4,16,0,0,14,64,0,0,56,0,1,48,0,0,4, 128,3,56,0,3,12,0,15,224,0,3,48,0,8,60,0,1,48,0,0,30,192,0,0,113,0,2, 1,36,0,0,216,248,4,1,0,7,32,0,0,1,128,1,0,2,128,0,0,26,64,0,1,64,0,19 ,128,129,0,2,192,0,8,48,0,1,64,64,0,0,8,0,0,2,0,2,1,32,8,105,251,128, 40,0,1,6,0,4,104,36,12,0,1,48,0,2,4,3,64,3,16,2,0,2,48,33,0,14,64,16, 0,3,8,1,0,6,48,34,0,0,192,4,88,0,0,16,96,0,1,128,40,16,0,0,184,249,32 ,17,4,0,1,192,68,0,2,40,8,0,4,198,208,0,0,146,4,16,8,4,13,32,0,0,176, 0,15,32,5,0,9,140,129,1,48,0,2,2,1,0,0,3,0,2,32,1,36,33,8,251,128,128 ,0,15,192,0,0,8,0,0,3,1,64,0,3,32,0,6,8,0,6,132,64,0,12,1,16,0,5,1,0, 1,128,0,0,16,0,0,128,255,96,1,0,2,240,0,3,48,64,0,3,128,7,192,0,1,136 ,3,97,0,0,12,4,0,0,60,0,16,64,0,9,15,224,1,60,16,0,0,32,0,1,192,3,0,2 ,96,1,44,0,0,96,250,168,0,3,16,128,0,2,8,1,0,3,128,16,194,20,152,64, 35,0,0,128,76,0,0,40,4,32,4,0,5,16,2,0,5,136,5,0,9,65,33,0,0,5,0,1,16 ,0,1,64,64,0,2,160,0,0,20,0,0,170,248,64,1,0,0,1,0,5,8,2,0,6,2,9,65, 35,2,12,128,128,5,0,1,2,0,5,16,1,0,5,136,129,0,15,16,68,0,5,192,16,42 ,0,0,248,250,0,0,1,13,16,0,0,224,0,3,80,64,0,4,7,48,0,0,22,136,0,0,24 ,0,0,3,228,129,56,0,0,7,0,5,144,3,0,5,232,1,0,9,14,224,1,56,0,1,32,0, 1,128,3,0,3,1,36,0,0,64,253,4,1,48,0,14,192,0,0,24,80,3,0,0,32,12,8, 128,0,0,128,5,0,5,208,2,0,5,136,129,0,23,128,0,0,32,0,0,249,253,0,0,1 ,49,66,0,0,192,0,3,72,0,5,6,0,0,40,64,64,19,34,0,0,76,128,9,48,0,0,4, 0,5,8,2,0,5,132,17,0,9,12,128,1,48,0,5,3,0,3,9,34,0,0,24,253,0,11,128 ,16,8,2,0,4,33,32,4,0,0,32,16,16,2,0,0,4,0,6,2,0,35,168,250,32,0,0,4, 128,0,0,16,0,1,64,0,2,1,0,1,4,128,0,5,8,0,1,32,0,0,4,0,7,2,0,6,33,0,0 ,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8 ,0,0,1,32,0,0,4,0,0,80,253,0,10,64,0,62,152,251,40,0,0,4,144,0,0,16,0 ,0,130,66,0,0,8,1,0,2,5,128,0,0,16,64,64,8,8,9,0,0,128,4,0,0,4,0,15, 32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64 ,0,0,8,0,0,1,32,0,0,4,0,0,113,255,0,0,4,130,0,0,64,0,0,2,64,32,32,0,0 ,129,128,0,0,4,130,64,64,0,0,2,0,0,5,128,0,1,64,16,0,0,130,0,16,16,0, 0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,2,2,64,0,0,8,0,1,32,0,0,4,0,1,16,0, 1,219,253,0,2,16,0,0,4,64,0,2,2,0,1,8,0,3,4,64,0,2,8,0,0,1,0,2,16,0, 16,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,1,32,0,0,4,128,2,0,1,2,64,1 ,0,1,1,0,0,208,252,4,128,0,20,1,0,50,226,249,0,0,8,128,32,64,2,72,0,0 ,9,32,1,33,32,4,144,0,0,18,64,2,72,2,66,32,8,0,0,64,36,132,0,0,18,0, 15,144,0,0,18,64,2,72,0,0,9,32,1,36,128,36,144,0,0,18,64,2,72,2,0,0, 32,1,36,1,0,0,136,4,17,168,255,0,3,4,128,0,0,16,0,0,2,0,3,1,32,0,0,4, 128,0,3,8,0,0,8,0,1,32,0,3,2,0,11,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0, 8,0,0,1,32,0,0,4,128,0,0,18,0,0,2,64,0,5,248,255,0,9,64,0,0,8,0,6,16, 0,0,2,64,0,2,1,0,3,16,0,6,8,0,2,8,0,24,8,0,3,64,252,0,1,64,0,7,8,0,5, 64,64,35,0,1,16,160,32,0,1,128,64,0,44,160,250,0,3,1,0,2,128,0,9,16,0 ,1,1,0,52,254,0,31,16,0,2,16,0,2,8,0,2,8,0,29,128,254,0,6,2,0,9,16,0, 0,8,0,4,32,0,0,4,0,21,16,0,20,64,0,0,88,255,128,64,4,8,0,0,32,0,2,65, 0,0,64,0,2,16,32,0,2,8,0,0,64,32,0,4,16,0,24,8,64,0,5,1,0,10,40,252,0 ,0,1,0,4,4,0,8,2,0,0,32,0,5,32,0,20,16,0,0,16,0,23,136,251,104,128,8, 16,20,32,24,130,130,90,1,48,40,0,1,8,152,0,1,128,212,2,138,17,0,0,40, 32,48,0,0,16,0,17,32,0,0,16,0,3,16,32,40,0,3,160,130,2,0,1,10,0,3,40, 160,5,8,254,160,85,16,15,70,85,1,16,64,105,2,0,0,4,8,0,0,16,45,16,16, 25,64,80,138,32,17,33,34,17,1,0,18,160,64,4,0,0,42,20,0,0,40,0,5,4,4, 0,0,16,4,0,0,136,0,3,129,34,208,250,0,0,65,32,4,1,65,0,2,1,0,1,1,0,1, 4,4,0,4,128,16,32,0,0,1,0,24,4,4,0,0,32,0,9,16,0,7,145,255,128,0,1, 136,0,2,16,0,0,128,0,5,8,0,1,32,0,1,1,0,2,128,0,34,4,0,1,8,0,8,224, 253,0,1,2,0,1,2,0,1,32,0,0,1,128,1,4,0,0,6,192,0,0,34,0,6,24,0,18,128 ,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,1,16,0,0,18,64,8,0,1,1,32,0,1 ,128,0,2,248,0,74,152,255,0,6,4,0,5,64,0,3,1,0,0,2,0,0,66,0,2,1,0,19, 128,0,15,32,0,8,8,251,0,2,8,0,5,8,0,6,32,0,9,16,0,40,4,0,2,120,254,0, 74,152,255,0,59,64,0,5,4,0,6,216,251,0,66,4,0,6,152,251,0,22,1,0,49, 128,0,0,255,0,10,16,0,6,128,0,1,4,4,0,39,128,0,1,8,0,1,12,0,3,216,254 ,0,13,4,32,0,3,34,0,2,64,16,0,2,32,0,44,136,254,0,74,152,255,0,32,4,0 ,6,2,0,8,32,0,10,32,0,10,248,251,0,74,152,255,0,51,1,0,21,152,254,0,9 ,8,0,16,4,0,45,16,251,0,0,128,0,14,128,0,0,32,0,8,8,0,44,184,253,0,29 ,8,0,1,32,0,3,4,0,1,16,0,6,1,16,0,1,128,0,2,3,0,9,16,0,5,72,252,0,0,4 ,0,1,2,0,11,1,0,1,64,0,0,8,0,17,4,0,11,1,0,7,64,0,2,8,0,2,128,0,2,16, 252,0,0,128,0,3,64,0,0,8,0,0,2,0,1,8,0,0,1,0,0,8,0,0,16,0,4,16,0,2,16 ,0,0,128,0,2,128,0,0,1,0,0,64,0,1,4,64,0,2,1,0,0,16,4,0,6,8,128,0,2,4 ,0,0,64,0,1,2,0,3,1,0,0,168,252,224,1,0,0,128,0,0,16,0,0,64,0,0,2,0,2 ,32,0,0,128,140,4,0,0,128,0,0,72,0,10,2,0,1,16,1,0,6,32,128,4,0,8,1,0 ,1,44,16,1,0,7,96,129,0,1,8,255,0,0,2,4,0,6,64,0,1,96,0,5,64,0,0,1,0, 1,1,0,37,32,0,9,216,249,0,4,64,0,11,64,0,1,128,0,0,32,0,4,64,0,33,16, 0,9,72,252,32,0,26,1,0,13,8,0,7,2,0,12,64,0,3,32,0,2,112,254,0,14,8,0 ,8,8,0,20,128,0,7,1,0,4,16,0,7,2,0,2,160,254,2,0,0,16,128,0,0,20,0,3, 64,0,0,8,0,2,160,0,0,4,64,0,2,16,0,4,4,0,19,64,0,3,64,0,0,2,0,6,4,0,1 ,16,0,5,120,249,0,1,32,32,0,4,64,8,0,3,32,0,1,32,0,5,2,32,0,22,1,0,13 ,16,0,0,129,0,6,104,253,0,0,64,172,32,3,34,0,0,128,2,0,0,58,10,42,0,0 ,64,20,16,1,18,84,128,2,90,80,1,25,32,0,1,21,0,2,2,16,16,128,0,3,1,8, 0,0,64,0,4,164,2,0,2,16,0,0,66,1,0,0,16,0,0,20,0,1,6,64,1,82,1,0,4,64 ,251,0,0,96,160,162,12,0,0,128,8,17,130,8,8,0,0,128,65,32,210,4,80, 128,18,4,163,64,16,4,128,1,36,33,0,2,8,0,0,64,0,5,2,40,0,3,82,0,0,1, 32,0,2,176,16,8,2,0,0,128,32,16,144,128,0,1,112,0,0,20,0,0,32,0,0,69, 34,200,251,0,1,1,0,3,4,0,1,2,0,1,64,64,0,2,32,0,1,4,129,0,0,64,4,128, 0,5,8,0,0,64,0,5,2,32,0,4,128,0,0,128,0,2,8,64,0,0,8,0,9,16,0,4,248, 248,0,0,64,16,0,0,4,0,2,64,0,1,64,0,0,32,0,0,8,0,0,1,0,1,4,128,0,0,16 ,0,1,64,0,0,16,0,27,1,0,4,64,0,2,128,0,6,104,249,0,27,16,0,12,2,0,2, 64,0,1,8,0,0,32,0,3,16,0,9,128,0,0,16,0,1,64,0,1,24,249,2,2,0,1,8,128 ,1,32,0,0,4,0,2,8,0,3,128,0,0,1,16,4,2,1,0,1,130,33,0,2,32,0,2,32,0,2 ,16,0,2,16,0,13,128,0,13,128,64,254,64,0,0,32,0,1,8,0,6,16,0,3,8,0,1, 16,0,22,64,0,14,8,0,3,32,0,7,184,252,2,0,0,32,0,5,1,0,4,2,0,6,16,40,0 ,0,16,0,36,32,0,0,64,0,6,132,8,254,0,9,4,0,7,2,0,3,1,2,64,0,0,8,0,1, 64,0,2,64,0,2,32,0,2,32,0,8,32,0,8,8,0,0,5,0,8,24,254,0,13,1,0,59,136 ,255,0,74,152,255,0,44,64,0,24,8,0,0,1,0,0,88,254,0,11,8,0,0,128,0,4, 20,0,0,2,0,0,64,0,37,32,0,10,56,252,0,2,64,0,6,128,0,2,4,32,0,1,2,0,7 ,64,0,15,128,0,13,16,0,2,128,0,1,1,0,3,2,0,1,200,252,0,20,8,0,1,8,0,4 ,16,0,1,64,0,3,8,0,1,32,0,32,72,253,0,18,1,0,54,152,254,8,0,2,2,0,6,1 ,0,1,128,8,16,1,32,2,0,0,128,8,0,4,8,0,16,128,0,1,68,2,72,0,1,10,0,0, 33,0,0,64,0,2,16,0,1,64,8,0,0,16,0,0,32,0,2,226,251,0,16,4,0,6,9,0,0, 65,32,0,17,164,0,0,4,128,0,0,16,0,0,2,0,9,4,0,0,8,0,6,152,248,0,56,32 ,0,16,184,255,0,14,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,0,18,128, 0,18,4,0,6,104,255,0,0,21,160,2,184,128,10,80,1,42,64,5,176,0,0,45, 128,2,80,0,0,10,64,1,40,0,0,5,160,0,0,20,192,2,0,15,22,128,2,88,0,0, 11,224,2,44,128,5,160,0,0,22,160,2,88,0,0,11,208,1,40,128,11,176,0,0, 22,160,2,112,248,160,9,52,1,146,213,4,154,64,19,104,2,100,160,97,149, 129,50,96,6,202,64,25,40,3,102,160,12,144,1,0,14,128,12,148,1,50,64,6 ,72,22,25,32,3,101,128,12,52,1,50,64,6,154,68,25,32,57,100,128,12,52, 1,160,252,255,255,0};static const unsigned char l565[]={79,231,255, 255,98,255,57,0,0,213,255,255,255,255,255,255,255,255,255,255,255,255 ,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,160,9,56,1,38,64,6,154,0,0,19,0,0,25,96,6 ,76,128,140,134,85,6,200,0,0,25,96,2,100,128,97,144,1,0,15,12,48,1,50 ,0,0,178,74,198,19,104,2,76,128,9,48,9,39,208,4,64,22,152,96,2,100, 128,12,56,1,152,255,0,0,21,160,2,84,0,0,11,80,1,42,128,10,80,0,0,26, 64,5,180,0,0,10,96,1,44,64,5,176,0,0,45,192,2,0,15,18,160,2,88,0,0,21 ,192,2,42,64,5,168,0,0,21,160,3,84,128,10,160,2,52,64,5,176,0,0,22, 160,2,80,252,0,11,64,0,5,2,0,31,64,0,21,152,249,0,74,152,255,0,4,128, 0,5,64,1,0,3,128,2,16,128,2,0,1,8,0,1,40,0,19,4,2,0,0,84,0,7,4,0,4,64 ,0,6,64,248,0,5,3,0,5,2,0,3,32,0,1,2,0,2,40,0,12,64,0,8,16,0,1,64,0,6 ,16,1,0,3,64,0,3,1,0,2,80,250,160,17,1,128,70,0,1,90,16,0,0,104,4,141 ,0,1,20,0,1,208,2,0,0,64,35,0,1,45,36,72,4,0,17,4,128,2,0,12,144,136, 152,64,0,0,8,129,64,0,1,180,16,224,254,0,0,1,0,1,4,2,0,0,16,0,1,64,32 ,8,4,0,0,32,0,1,192,64,0,1,2,1,0,0,12,0,22,4,0,12,192,0,1,8,0,3,4,0,0 ,48,0,0,96,252,128,1,0,1,6,4,0,0,24,16,0,0,96,64,12,8,0,0,44,0,1,128, 0,2,3,2,0,0,7,2,64,0,0,16,0,17,136,5,1,0,11,192,64,30,8,0,0,32,0,0,3, 0,1,48,0,0,8,253,128,1,2,0,0,32,0,1,128,0,2,2,64,0,1,20,18,0,0,64,132 ,0,1,16,0,1,73,0,0,8,0,0,2,0,17,130,34,0,12,192,8,2,0,0,16,68,66,1,0, 1,48,66,64,248,128,1,0,1,34,1,0,0,136,4,0,0,32,18,68,2,0,0,24,32,0,0, 192,8,1,0,0,145,0,1,12,0,0,80,0,0,8,0,16,128,8,3,0,12,192,4,0,1,16,1, 8,12,2,0,0,48,32,24,254,224,129,0,0,128,5,0,1,22,0,1,88,0,0,11,0,1,36 ,0,1,48,0,1,192,2,0,1,15,98,0,0,60,0,17,12,128,4,4,0,11,240,64,30,192 ,0,0,120,0,0,15,0,1,60,0,0,160,252,128,1,0,2,1,0,1,4,0,1,16,0,0,2,0,0 ,40,0,1,128,0,2,128,0,1,12,4,64,0,19,8,5,0,12,192,0,3,34,0,0,12,0,1, 48,0,0,48,249,128,145,0,12,16,9,0,0,32,2,1,0,3,136,0,0,5,0,0,18,0,16, 48,0,0,34,1,0,11,192,20,24,0,0,11,96,68,12,0,1,16,4,104,251,0,2,128, 32,8,0,0,2,64,0,0,40,8,5,1,0,0,4,0,1,208,130,0,0,64,64,8,0,1,32,0,0, 20,0,7,34,0,6,17,0,0,52,132,0,0,16,0,3,8,16,0,3,128,64,8,0,0,128,64,3 ,8,128,32,0,3,76,255,0,7,8,0,8,192,0,8,32,0,7,12,0,6,6,0,0,48,0,13,2, 0,2,8,3,32,0,1,4,0,2,120,253,0,3,2,0,1,8,200,0,0,32,0,0,4,0,1,44,0,1, 128,0,2,1,2,0,3,44,0,7,12,0,6,6,0,0,48,144,5,1,32,0,3,64,0,7,6,0,3,15 ,0,3,184,251,8,0,2,20,2,0,0,16,65,0,0,64,17,40,2,0,0,20,18,0,0,64,130 ,0,1,10,0,0,17,0,0,128,5,21,4,0,6,10,0,6,5,0,0,48,129,34,0,11,134,0,1 ,2,0,1,96,8,77,2,0,2,163,254,0,4,8,0,1,32,163,96,0,0,12,0,1,24,32,0,0 ,192,4,0,3,18,0,1,8,24,9,0,6,10,0,6,5,0,0,32,0,0,3,0,0,34,0,3,20,0,4, 68,0,1,24,0,1,66,0,1,4,0,2,65,252,0,2,128,7,0,1,30,192,3,120,16,15,2, 0,0,36,0,1,48,64,0,0,192,3,26,0,1,96,64,36,0,17,60,136,4,52,0,3,24,0, 4,128,3,2,0,0,30,196,0,0,56,32,15,0,3,104,255,4,0,2,2,0,1,8,0,0,3,96, 0,0,12,0,1,40,0,1,128,0,2,1,0,2,128,1,40,0,17,48,16,5,192,32,0,3,16,0 ,4,6,2,0,0,24,0,1,96,0,5,185,253,0,3,70,2,0,0,24,73,3,96,20,140,2,0,0 ,16,8,0,1,68,0,1,19,97,20,0,0,128,33,16,8,0,16,48,2,2,1,4,0,2,64,1,0, 4,7,0,1,24,0,0,80,112,32,12,8,0,2,32,254,32,4,0,0,128,16,4,32,2,17,0, 0,8,12,65,32,0,0,36,32,0,0,208,0,0,147,64,32,40,0,0,5,160,1,4,0,16,4, 4,136,4,208,0,0,138,64,3,40,0,0,13,160,128,52,194,0,2,2,0,1,8,129,32, 160,129,4,0,0,160,252,128,1,1,0,9,4,0,0,16,0,1,192,0,1,16,0,0,66,0,0, 8,128,1,0,17,128,0,1,2,196,0,1,16,3,64,0,0,12,0,1,32,0,0,2,2,0,3,32,0 ,1,132,1,0,1,248,250,0,1,1,0,0,2,48,0,0,8,0,1,32,0,0,4,0,1,44,0,1,128 ,0,0,24,4,1,88,0,0,11,130,1,44,0,15,96,0,0,12,128,5,192,0,0,8,4,3,88, 0,0,12,128,1,48,0,1,2,0,5,15,2,65,48,0,0,80,253,4,16,0,1,20,20,0,0, 144,2,0,0,64,130,72,16,144,20,0,1,64,128,16,0,0,18,44,0,0,5,128,1,20, 4,0,14,32,0,0,132,144,2,192,0,0,144,0,0,3,40,0,0,12,128,17,33,16,22,0 ,4,96,66,77,128,1,48,0,0,218,249,140,145,0,2,192,128,0,3,32,32,0,0,8, 41,1,0,0,192,8,153,4,16,52,66,134,1,132,24,9,0,15,4,0,1,5,1,4,152,32, 96,48,68,0,0,144,32,16,64,132,0,1,64,16,0,0,64,68,0,0,132,1,1,1,160, 249,224,0,1,128,7,244,0,0,30,16,0,0,120,0,0,15,104,0,0,36,16,0,0,48,0 ,0,30,192,3,64,0,0,8,96,0,0,36,0,15,100,0,0,13,136,4,48,128,30,192,0, 0,64,0,0,3,96,1,60,128,3,0,1,6,0,1,56,0,0,15,224,1,12,16,216,255,8,0, 2,2,192,0,0,8,0,1,32,64,4,0,1,33,0,1,128,0,0,24,4,1,64,0,0,10,128,1, 40,0,15,128,65,0,1,4,0,1,24,8,0,0,64,0,0,12,132,65,48,0,0,6,0,1,24,8, 0,0,96,0,1,128,1,0,1,161,252,128,8,2,0,0,22,200,0,0,88,32,0,0,96,4, 140,136,1,32,0,1,32,2,153,0,0,35,33,17,36,130,81,144,8,0,14,133,17, 160,64,4,0,1,24,1,0,0,32,17,140,128,9,176,32,38,4,0,0,152,0,1,96,128, 12,130,1,2,32,152,253,32,0,0,52,144,130,0,1,74,0,1,8,129,33,144,1,132 ,128,70,212,128,0,0,64,9,8,0,0,1,160,5,36,9,0,15,4,4,0,1,208,64,26,64 ,0,0,8,0,0,5,160,133,52,0,1,16,0,3,104,64,32,32,0,0,52,66,56,253,0,7, 8,0,5,1,32,6,192,0,3,1,0,1,128,1,17,0,15,2,128,0,2,192,0,0,24,0,3,8, 128,1,0,3,64,0,2,96,0,1,4,0,0,32,0,0,24,250,0,1,48,16,2,0,1,8,0,1,32, 0,0,4,224,1,48,16,4,128,64,0,1,1,88,0,0,11,226,0,0,44,0,15,226,65,0,2 ,192,0,2,128,88,0,0,11,128,1,48,0,1,64,0,5,15,2,128,48,0,0,168,253,8, 4,50,2,4,1,0,0,16,4,0,0,64,68,72,40,132,0,0,2,2,68,2,0,1,138,40,0,0,5 ,32,73,20,0,15,160,5,0,2,64,130,0,2,40,0,0,5,128,132,176,16,0,0,128, 130,0,2,32,132,13,0,0,8,0,0,5,163,253,0,0,32,128,0,0,6,0,1,24,0,2,130 ,128,1,0,0,160,0,0,22,200,4,0,1,3,48,66,134,129,9,40,6,0,14,16,4,0,2, 128,36,0,0,8,136,48,68,6,132,137,176,0,2,72,0,2,96,65,0,0,4,16,176,64 ,9,249,96,0,0,44,144,7,1,0,0,30,4,0,0,120,0,0,15,192,1,12,136,1,48,64 ,0,0,192,131,64,0,0,8,224,65,36,0,15,240,1,13,8,0,0,112,0,0,6,192,0,0 ,64,0,0,8,96,1,60,8,0,0,240,0,3,120,0,0,15,96,0,0,61,0,0,128,253,4, 128,48,16,6,0,1,24,0,1,32,0,0,4,32,0,0,32,0,0,4,128,0,2,3,64,0,0,10, 128,1,32,0,17,48,8,0,0,128,0,2,131,64,0,0,8,0,0,1,48,32,0,0,64,0,3,64 ,0,3,49,16,209,253,128,17,32,0,0,22,1,0,0,88,4,0,0,96,66,140,176,1,48 ,33,17,4,68,0,1,131,32,20,132,2,33,32,0,15,129,69,48,1,0,0,64,20,64, 16,16,32,20,132,2,17,50,1,0,0,192,136,0,2,112,8,44,130,17,48,0,0,72, 253,0,1,36,129,22,16,2,154,8,0,0,104,132,141,16,0,0,4,145,6,16,16,2, 64,3,12,0,0,1,160,0,0,4,0,15,16,8,20,128,2,16,0,0,26,67,3,8,0,0,1,160 ,17,52,194,0,0,82,0,0,1,64,3,104,36,32,32,8,0,1,32,253,0,2,32,6,2,64, 24,0,1,96,0,0,12,0,3,6,66,0,2,3,0,3,1,0,16,16,128,32,0,0,4,0,1,24,0,0 ,3,0,2,128,1,33,0,0,2,128,0,2,3,96,0,1,4,64,0,1,64,250,0,3,4,48,128, 16,0,1,64,64,8,8,0,1,16,4,0,3,2,88,0,0,11,98,1,48,0,15,97,0,0,44,160, 5,0,1,16,0,1,88,0,0,11,0,0,128,48,0,1,64,0,2,3,0,0,16,15,4,0,2,80,253 ,4,0,1,18,66,24,8,136,8,0,0,32,1,36,0,1,32,0,0,66,2,130,0,1,1,42,0,0, 5,160,64,48,0,8,1,0,5,32,0,0,20,130,162,0,1,88,32,0,0,40,0,0,5,128,5, 0,0,33,22,132,0,2,3,32,0,0,45,0,0,40,0,1,145,249,4,0,1,8,198,0,0,24, 24,3,0,0,96,66,76,0,2,2,198,0,0,4,65,4,99,48,66,134,193,4,0,0,1,0,14, 136,69,24,8,3,0,0,2,24,8,19,48,68,6,132,4,49,65,68,64,0,3,98,2,0,0,4, 8,0,1,3,255,0,1,28,128,1,48,0,0,6,0,1,24,0,0,3,8,0,0,28,136,1,48,0,0, 6,192,0,0,64,0,0,8,0,0,65,12,16,0,6,64,1,0,5,224,1,36,128,4,48,64,30, 192,3,66,0,0,8,224,1,60,128,3,178,0,1,192,0,0,120,32,15,96,0,0,1,0,0, 232,253,4,0,1,16,4,0,1,16,0,1,64,32,8,0,1,16,0,0,4,0,0,64,24,8,2,64, 16,10,66,65,0,0,16,0,14,128,1,40,8,5,192,128,24,0,0,3,64,16,8,130,0,0 ,48,0,0,6,66,0,2,3,64,0,1,2,0,2,58,253,0,1,16,1,1,136,64,4,32,0,0,16, 2,34,8,0,0,16,5,64,36,2,152,128,0,0,36,4,132,128,16,0,0,2,0,6,128,0,6 ,128,1,16,2,2,192,0,0,88,8,67,32,4,132,0,0,8,49,34,7,128,0,2,83,112, 130,44,0,0,145,0,1,48,254,0,1,132,128,22,212,0,0,26,81,0,0,104,36,141 ,164,128,4,128,70,20,2,66,80,67,8,0,0,137,33,0,9,128,0,7,8,4,128,4,64 ,2,26,0,0,9,8,0,0,1,32,16,52,194,32,4,2,27,64,0,0,8,0,0,32,32,8,6,33, 96,251,0,2,32,6,192,0,0,24,0,1,96,0,0,12,0,3,6,64,128,0,1,3,0,1,4,0, 10,128,0,7,128,0,1,2,128,32,0,1,130,0,4,33,0,0,2,0,1,24,8,0,0,32,64,0 ,0,4,0,2,56,251,0,3,4,240,0,0,16,192,0,0,64,32,8,228,0,2,4,0,0,64,0,1 ,2,90,0,0,11,98,1,0,9,2,0,5,96,0,0,44,160,5,176,32,24,192,2,88,0,0,11 ,0,0,128,48,0,1,48,0,0,24,16,0,2,15,96,0,0,12,0,0,240,251,8,0,1,10,18 ,212,0,0,136,66,0,0,32,1,36,32,40,0,1,2,4,2,16,17,9,40,0,0,5,160,64,0 ,9,4,0,5,32,0,0,20,130,162,80,8,0,0,66,1,44,0,0,5,128,8,0,0,32,22,24, 0,0,24,0,1,96,129,13,36,0,0,182,32,251,253,0,2,9,22,194,0,0,88,8,11, 98,130,140,1,132,0,0,9,38,4,24,0,0,3,11,49,66,10,192,4,0,16,128,81,24 ,8,3,96,0,0,152,128,1,48,68,6,4,8,176,64,132,192,128,24,8,16,64,1,0,0 ,4,136,144,0,0,81,251,0,1,28,128,1,224,0,0,6,192,3,24,0,0,3,64,1,12, 128,1,48,0,0,14,192,0,0,64,0,0,8,0,0,65,0,8,64,0,6,224,1,36,128,4,128 ,0,0,30,4,2,64,0,0,8,96,64,60,128,3,240,0,0,30,192,0,0,57,32,15,96,0, 0,44,16,176,255,4,0,0,16,8,4,194,0,0,16,8,3,64,0,0,8,128,1,48,0,0,4,2 ,0,0,8,8,2,65,16,10,64,65,0,9,4,0,5,128,1,40,8,3,160,0,1,132,2,64,16, 8,130,1,49,32,6,192,0,1,16,3,98,0,2,64,48,8,129,252,0,1,48,0,1,208,0, 2,3,0,0,66,128,144,129,176,32,33,0,0,8,9,0,1,32,1,8,128,4,0,9,4,0,5, 128,1,144,0,0,4,64,0,0,152,0,0,1,32,1,36,0,0,8,48,2,38,196,0,0,72,0,0 ,3,96,64,140,2,1,160,0,0,88,252,176,5,54,144,22,0,1,154,72,3,104,2,13 ,4,0,0,4,128,6,208,68,2,72,3,76,66,1,32,0,9,64,0,7,8,36,8,0,1,2,2,0,0 ,8,72,68,1,160,17,52,194,64,20,0,0,26,64,0,0,104,0,0,64,32,8,5,0,0,64 ,253,128,1,48,0,0,6,2,0,0,24,0,0,3,96,32,12,0,3,6,194,0,0,24,0,0,3,32 ,0,21,128,16,0,2,32,0,1,128,32,0,3,33,0,0,2,0,1,24,0,1,96,0,1,132,0,0 ,16,16,120,254,128,1,0,0,16,4,0,1,16,192,3,64,0,0,8,0,3,4,128,128,0,0 ,16,2,88,0,1,100,1,0,9,2,0,5,96,0,0,44,0,1,176,32,0,0,192,2,88,0,0,11 ,128,128,48,0,1,192,0,3,96,32,3,0,2,32,208,254,140,41,48,2,66,8,0,0, 136,72,3,32,65,68,4,0,1,9,66,66,0,0,64,0,0,1,42,0,0,44,160,64,0,16,36 ,0,0,20,0,1,80,8,0,0,64,1,44,0,0,5,0,0,4,0,0,18,6,196,0,3,96,2,1,0,1, 1,0,0,81,254,4,9,16,64,6,0,1,88,0,0,3,96,66,76,0,1,128,0,0,38,200,8, 89,0,0,11,80,0,1,192,4,0,16,128,129,40,33,0,0,96,0,0,128,128,1,80,0,0 ,6,132,9,48,0,0,68,0,0,130,24,1,0,0,96,1,140,0,0,8,0,0,16,131,249,96, 0,0,61,128,1,2,0,0,6,144,3,24,0,0,3,8,0,0,12,136,1,48,0,0,14,200,0,0, 66,0,0,3,2,65,0,16,224,1,36,0,1,128,0,0,6,4,2,64,0,0,8,224,129,60,144 ,3,50,0,0,30,208,128,24,64,15,100,128,12,0,0,8,254,4,128,16,32,4,2,0, 0,16,8,3,64,32,8,0,3,4,128,0,2,2,65,0,0,12,68,65,0,16,128,1,32,0,1, 160,0,0,24,128,2,64,0,0,8,130,1,48,16,6,2,0,0,24,0,0,3,0,0,32,12,0,3, 114,254,0,0,17,0,0,1,33,0,1,132,0,0,3,16,2,34,8,0,0,48,8,32,36,2,9, 137,16,64,0,0,140,128,0,17,128,1,32,0,1,64,0,0,24,8,1,64,0,0,4,0,0,9, 178,0,0,7,0,0,64,24,17,19,2,4,12,64,40,8,65,128,254,0,1,52,145,22,20, 136,26,81,3,104,0,0,77,40,0,0,36,146,0,0,208,132,2,72,67,8,4,33,32,5, 4,0,16,4,4,128,6,132,2,2,0,0,10,8,0,0,9,36,4,52,194,0,0,24,0,0,10,66, 3,72,1,64,32,16,4,34,168,254,0,1,48,0,0,6,0,1,24,0,0,3,96,32,12,128,1 ,0,2,192,0,2,3,0,0,16,0,0,130,64,0,16,2,128,0,1,6,64,32,0,0,16,129,0, 1,4,0,0,128,32,0,0,2,0,1,16,0,2,64,0,0,132,0,0,17,0,0,240,254,0,1,16, 0,0,4,48,128,16,0,0,3,64,0,0,8,0,1,48,160,1,128,0,0,24,16,2,2,64,0,0, 98,1,0,16,232,65,48,0,0,2,176,32,6,192,2,0,1,11,0,0,64,48,32,0,0,48,0 ,0,8,0,0,131,64,64,3,0,3,64,255,8,0,0,176,32,18,20,8,136,2,16,34,64,4 ,8,144,160,128,0,0,64,20,64,0,0,9,0,0,4,32,160,64,0,0,8,4,0,5,16,2,0, 5,168,1,48,0,0,38,88,8,26,66,1,4,17,5,0,3,70,18,0,0,16,0,1,32,4,1,0,0 ,40,0,0,65,122,253,0,1,32,0,0,70,0,0,24,24,1,139,96,130,140,1,8,177,8 ,70,200,4,80,8,11,4,20,64,66,1,0,0,1,2,0,5,16,1,0,5,8,4,0,0,16,38,97, 0,0,136,128,1,0,0,18,10,0,0,68,48,6,132,192,34,8,0,0,35,32,33,140,2,8 ,0,1,120,255,0,1,60,160,1,180,0,0,6,208,3,24,0,0,3,96,0,0,60,128,7,48 ,64,6,192,0,0,24,0,0,3,0,0,1,12,8,7,0,5,144,3,0,5,232,1,13,128,7,128, 0,0,22,4,2,24,0,0,8,224,0,0,60,128,3,240,0,0,22,192,131,120,0,0,15,96 ,0,0,13,32,112,248,4,0,0,32,0,0,4,4,0,0,16,16,0,0,66,0,0,8,0,1,49,0,0 ,6,128,0,0,16,0,0,2,2,16,0,0,64,1,0,0,128,5,0,5,208,2,0,5,8,0,2,6,97, 0,0,24,132,1,0,1,8,128,64,48,0,0,6,192,0,0,8,0,1,96,0,0,12,0,2,16,81, 250,0,1,32,16,64,0,0,64,0,0,1,16,0,0,66,128,144,1,48,10,6,0,0,68,152, 2,32,64,1,136,2,1,176,8,4,0,5,8,2,0,5,132,81,0,0,5,22,128,0,0,144,0,0 ,2,96,20,8,128,17,48,5,38,212,0,0,16,0,0,35,98,18,12,0,0,144,0,0,1, 232,248,0,7,128,0,4,16,2,0,13,4,0,6,2,0,35,20,252,32,0,0,4,128,0,2,2, 64,0,0,8,0,0,1,0,1,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,7,2,0 ,6,33,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,2,2,64,0,0 ,8,0,0,1,32,0,0,4,0,0,184,255,0,74,152,255,36,0,0,4,128,0,0,16,0,0,3, 64,0,0,8,0,0,1,0,0,32,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15 ,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,3, 64,0,0,8,0,0,1,32,0,0,4,0,0,219,249,12,0,3,32,36,0,1,32,4,0,5,1,0,5,8 ,0,0,1,4,0,22,16,0,1,16,0,0,12,32,0,4,32,0,10,9,252,32,0,0,4,128,0,2, 2,0,1,8,0,0,1,0,0,128,0,0,128,0,0,16,0,0,2,64,0,4,128,0,26,2,0,1,34,0 ,0,4,128,0,3,64,0,0,8,0,5,56,250,8,0,14,16,0,9,128,0,21,2,0,3,1,32,0, 8,4,0,6,16,96,248,32,0,0,4,128,0,0,16,0,0,2,64,32,9,0,0,1,0,0,8,6,129 ,0,0,16,0,0,2,64,0,1,32,64,8,16,4,5,0,14,32,8,5,160,64,16,132,2,80,32 ,0,0,4,64,40,0,0,4,128,0,0,16,0,0,130,64,0,0,8,0,0,65,40,8,5,2,52,249 ,0,0,64,0,44,8,0,5,128,0,6,8,0,9,128,0,0,80,251,0,1,8,0,49,4,0,13,128 ,8,0,4,216,255,0,8,64,0,2,32,0,0,33,0,2,64,0,2,1,0,36,16,0,1,32,0,3, 16,4,0,3,184,255,0,4,9,16,32,0,10,98,0,26,32,0,1,2,0,0,16,0,4,128,0,3 ,32,0,0,64,0,0,1,9,0,3,2,0,0,148,249,0,1,32,0,35,1,0,1,4,0,16,16,0,12 ,64,216,252,0,59,64,0,6,32,0,4,4,137,252,128,64,0,2,64,128,0,0,16,0,0 ,2,0,3,4,8,0,5,32,0,0,4,128,0,0,9,32,0,16,4,0,0,2,0,0,32,0,2,64,0,5,4 ,1,0,1,132,0,0,8,0,0,4,2,0,0,16,8,144,251,0,2,32,4,16,0,0,2,0,3,2,0,4 ,65,0,0,2,0,2,16,1,0,1,16,0,17,17,0,1,1,0,1,8,2,32,0,1,128,0,4,32,0,0 ,80,128,0,2,40,0,1,32,152,248,64,168,0,0,160,0,0,48,64,2,8,0,0,1,0,0, 1,0,1,8,16,0,0,20,0,0,2,0,1,16,64,3,64,168,14,16,0,16,13,0,0,1,4,64,0 ,0,80,0,0,24,0,1,32,0,2,1,2,128,0,0,216,0,0,18,0,0,2,44,0,0,8,48,224, 255,128,65,0,1,132,0,1,16,4,128,0,0,8,0,0,129,0,1,6,36,0,1,8,0,0,35, 162,2,36,128,254,144,8,0,14,160,82,0,2,16,36,8,2,163,98,64,8,0,0,3,0, 0,128,40,0,0,36,152,5,53,66,88,40,0,0,1,48,14,232,249,32,0,0,1,0,4,16 ,128,0,2,128,0,5,16,64,0,0,32,0,0,8,128,64,8,16,0,14,128,64,0,3,32,16 ,64,0,0,10,0,7,16,2,4,1,0,0,8,0,2,4,32,168,253,128,0,2,2,4,0,0,8,0,2, 16,0,0,2,0,1,8,2,0,3,1,0,4,1,0,23,16,1,32,0,0,4,128,0,5,4,0,1,8,64,1, 32,0,0,16,8,84,254,0,3,8,2,0,1,10,0,0,128,32,16,4,0,7,4,4,0,35,68,0,1 ,8,0,10,192,249,0,3,128,4,0,1,18,0,0,128,64,0,0,9,0,7,64,2,0,0,4,0,26 ,8,0,7,128,4,0,0,4,0,8,24,255,0,12,64,2,0,4,2,0,23,64,0,12,32,0,0,32, 0,4,72,0,3,4,4,0,0,48,255,64,0,4,2,0,2,1,0,1,32,0,32,4,0,11,128,0,1, 66,0,4,64,0,0,128,0,2,176,252,0,3,4,4,0,0,16,16,0,0,8,64,8,8,0,3,2,0, 2,2,0,2,128,0,24,4,0,9,2,0,3,8,64,16,0,3,152,248,0,1,1,128,8,0,1,80,4 ,0,0,8,16,17,0,5,144,0,1,130,4,0,35,32,0,1,1,0,7,32,0,1,88,248,0,0,1, 0,14,4,128,0,19,8,0,2,8,0,17,4,0,1,4,8,0,7,208,254,0,3,4,0,0,128,8,0, 9,192,0,7,64,0,21,16,0,12,128,0,0,64,0,5,200,0,0,152,254,0,5,1,0,8,4, 0,2,12,4,0,5,4,0,20,4,0,6,8,128,32,0,2,16,0,2,128,0,5,240,251,0,6,2,0 ,5,32,0,2,16,0,30,128,0,10,1,0,9,36,0,0,48,249,0,20,2,0,37,1,64,0,5, 34,0,5,200,250,0,59,4,16,0,6,128,0,4,72,250,2,0,73,184,253,0,3,1,0,1, 4,0,1,16,0,0,2,0,6,16,128,0,5,4,0,31,64,8,0,0,1,0,9,232,249,0,4,16,0, 45,2,0,4,128,0,11,4,0,2,208,252,0,23,8,0,30,1,0,1,1,0,14,144,255,0,2, 8,0,21,32,0,25,4,0,13,16,0,5,208,252,0,9,2,0,49,32,0,11,96,184,249,0, 4,8,0,1,32,0,1,128,0,0,16,0,3,1,0,19,34,0,1,8,32,0,24,128,0,1,64,0,1, 120,253,0,12,16,0,7,4,0,2,4,0,18,128,0,1,2,0,0,64,0,5,4,0,0,2,128,0,6 ,1,0,0,4,128,16,0,0,104,254,0,1,1,0,9,2,1,0,2,8,0,29,16,32,32,32,0,1, 8,0,1,64,68,0,5,4,128,0,4,16,16,80,248,0,4,128,0,7,130,0,7,8,0,3,16,0 ,18,128,0,7,4,0,5,2,0,1,8,0,0,16,0,4,52,252,0,1,64,0,15,2,0,17,128,0, 29,8,0,1,1,0,1,8,248,0,10,40,0,4,128,2,0,0,4,64,0,19,8,0,7,32,0,6,128 ,0,4,32,0,4,32,0,1,128,152,255,0,2,32,0,0,16,0,4,64,0,0,40,0,3,132,0, 0,2,0,1,32,16,0,0,130,0,0,16,0,17,16,0,1,17,32,8,2,1,8,8,0,0,64,0,0,1 ,0,1,4,128,8,0,4,2,0,0,16,0,0,112,254,8,0,0,8,0,2,32,2,0,9,64,0,4,64, 0,3,16,0,14,128,0,0,1,8,4,0,2,16,128,32,16,4,130,0,0,4,8,2,0,0,32,2, 132,128,8,0,1,8,0,0,1,128,172,251,128,3,4,16,0,0,32,148,2,0,2,32,0,0, 68,0,0,160,5,160,50,0,0,4,0,1,80,97,4,68,40,8,32,0,12,16,0,0,32,0,0,9 ,160,160,34,64,12,152,0,0,26,96,1,104,128,4,160,160,2,212,6,80,80,10, 0,1,12,40,9,0,0,40,252,0,0,48,32,0,0,66,129,16,8,64,0,0,32,0,0,12,128 ,65,8,1,166,1,0,2,1,64,80,36,2,72,128,8,0,12,64,0,0,128,68,128,12,132 ,0,0,4,0,0,18,14,192,24,4,1,52,32,132,24,64,24,210,7,241,32,0,0,12,1, 32,0,0,8,152,253,0,3,1,1,0,0,2,0,1,8,0,0,8,32,64,0,1,2,4,0,1,128,0,1, 16,8,2,64,0,0,16,0,14,32,0,0,1,32,0,6,64,8,0,4,16,0,1,16,1,33,0,0,8,0 ,2,8,48,248,0,0,64,4,0,1,64,128,0,4,1,128,0,2,1,1,0,3,8,0,18,32,0,3,8 ,4,2,0,1,16,1,32,16,0,0,2,64,16,32,0,1,32,8,4,128,0,1,1,4,64,0,1,96, 249,16,0,1,160,0,2,2,0,2,8,0,0,1,0,6,64,0,16,16,128,0,1,16,128,0,15, 136,0,6,32,0,4,140,249,2,0,1,16,0,8,2,0,0,1,0,1,1,0,5,1,0,26,32,0,19, 144,32,253,0,1,2,0,11,136,0,3,16,0,6,32,0,18,64,0,3,96,0,13,64,0,5,80 ,254,40,0,1,8,0,9,5,8,0,1,4,0,26,1,0,3,2,0,5,32,0,3,16,0,0,2,0,1,16,0 ,0,8,0,1,1,0,0,58,248,2,0,0,128,0,0,128,0,4,16,0,1,128,0,2,1,0,0,16,0 ,21,2,0,2,1,0,17,16,0,3,8,0,0,128,8,0,0,128,255,0,0,32,16,0,11,16,0,3 ,2,0,5,1,0,46,152,253,0,3,18,0,1,72,0,0,2,32,17,36,0,5,128,0,1,9,2,0, 0,1,0,21,16,0,3,8,0,5,128,0,0,2,0,1,1,0,7,32,176,255,8,0,0,32,0,1,2,0 ,1,8,0,3,4,0,8,1,0,1,128,0,12,128,0,2,128,0,8,1,32,0,7,32,0,3,32,0,4, 24,248,0,1,8,0,5,8,0,1,1,0,2,128,0,0,80,0,2,64,128,0,32,2,0,0,1,0,2, 128,128,0,0,2,2,0,0,1,2,64,0,0,32,0,0,56,253,128,64,0,8,128,0,2,4,24, 0,0,8,0,0,1,0,24,64,16,4,0,2,8,0,1,2,0,17,8,24,253,0,3,1,0,0,2,4,0,1, 64,0,0,2,0,6,1,128,0,2,4,0,35,1,4,3,0,9,24,253,0,0,6,0,14,24,0,0,1,0, 22,16,0,16,12,16,0,4,64,0,5,128,249,32,1,0,8,4,0,0,160,1,0,2,8,0,5,1, 32,0,0,4,66,0,14,32,0,0,21,0,1,16,0,0,130,72,35,1,0,1,32,0,0,36,144, 198,80,68,0,0,64,11,0,6,104,251,128,64,0,5,8,0,1,64,0,0,128,1,0,30,1, 32,0,5,2,0,6,6,128,0,2,3,1,0,5,16,253,224,0,5,6,0,1,24,0,4,128,7,2,0, 5,3,0,1,48,0,15,128,65,44,0,1,48,0,0,24,0,0,3,1,0,1,96,0,0,32,32,6, 192,0,2,2,0,6,224,251,32,1,0,4,2,0,1,8,0,4,128,70,0,6,1,0,1,32,4,0,14 ,128,1,20,0,1,16,0,0,64,32,32,0,2,32,0,0,16,1,38,132,64,0,1,1,4,0,5,8 ,252,0,0,1,0,4,152,8,0,0,96,20,0,1,80,0,1,16,2,0,5,140,2,8,2,1,0,14, 128,5,153,16,0,0,192,8,16,4,161,0,2,128,17,144,0,0,20,0,0,36,0,1,3,0, 6,48,253,160,0,5,30,0,1,120,0,1,96,0,1,128,7,0,6,15,96,0,0,12,8,0,14, 224,1,32,0,1,224,32,6,192,2,0,2,224,65,60,136,3,50,0,1,192,0,0,2,0,5, 96,253,128,0,5,24,0,1,96,0,2,64,0,2,1,0,5,12,128,129,0,16,128,1,32,32 ,0,0,192,0,0,16,0,4,128,1,48,0,0,6,2,0,2,2,0,6,48,254,32,1,0,4,24,0,1 ,96,0,2,8,0,1,22,0,6,12,128,5,0,0,66,0,14,128,65,16,0,1,192,0,0,24,17 ,136,0,2,128,1,48,8,65,192,68,0,0,128,8,2,0,5,128,249,32,0,1,128,64,1 ,0,0,130,8,0,1,4,0,0,32,0,2,64,0,1,2,64,128,0,2,160,16,4,0,7,48,0,6, 184,145,4,0,1,16,0,0,130,72,0,0,106,128,77,8,136,4,130,38,216,0,0,2, 64,19,104,36,129,168,1,52,66,244,253,0,10,64,0,5,4,0,7,1,1,0,7,12,0,6 ,6,1,0,4,24,0,0,2,96,0,0,12,0,2,16,6,192,0,2,3,66,0,0,8,128,1,32,0,0, 16,248,96,1,0,0,128,1,0,1,8,0,1,24,0,1,96,0,1,128,1,0,1,6,0,0,129,0,2 ,128,0,0,1,0,7,12,0,6,134,129,44,0,1,48,0,2,131,96,0,0,8,100,0,0,16,0 ,0,6,192,0,0,6,0,0,2,97,0,0,12,130,65,48,16,104,254,168,0,1,128,0,0,4 ,0,0,64,4,0,0,8,0,1,32,0,1,128,0,2,2,0,4,128,1,0,0,64,0,6,10,0,6,5,16 ,20,0,1,16,0,0,64,32,35,32,64,68,32,0,0,32,33,6,196,72,2,0,0,9,0,0, 132,12,128,5,0,0,2,51,251,192,0,6,2,0,0,96,0,1,128,81,0,1,38,0,1,24,2 ,8,0,2,128,0,0,130,0,7,10,0,6,133,72,152,16,0,0,192,36,88,4,35,100,1, 12,144,1,1,0,0,68,200,24,88,4,11,34,20,76,128,73,16,0,0,49,253,32,1,0 ,0,128,1,4,0,0,6,0,1,120,32,0,0,224,1,0,0,128,7,1,0,0,30,192,128,0,2, 224,1,60,16,0,14,96,1,32,0,1,224,0,0,14,192,3,88,64,3,224,1,60,144,3, 240,0,0,30,192,0,0,88,0,0,15,226,1,44,16,72,253,4,1,0,7,96,0,1,128,1, 0,1,6,0,1,24,0,0,128,0,2,128,1,48,0,17,32,0,1,192,0,2,3,64,64,8,132,1 ,16,0,0,6,192,0,0,24,0,0,2,0,0,32,12,136,1,0,0,8,25,249,160,0,1,128,4 ,2,0,0,128,4,0,0,96,0,1,160,1,0,1,6,0,1,24,0,0,8,0,2,128,9,49,4,0,6, 16,0,6,8,68,144,16,0,0,192,0,0,8,9,147,64,1,34,160,1,48,65,16,8,130, 26,0,0,64,0,0,4,76,0,0,80,0,0,2,240,249,48,0,1,128,32,17,0,3,2,4,13,0 ,1,52,0,0,64,0,1,130,8,0,0,8,0,1,160,4,4,0,15,160,49,4,128,22,212,0,0 ,26,64,11,104,34,77,32,8,53,128,68,82,68,0,2,8,64,0,0,160,9,20,0,0, 152,251,0,7,8,0,1,64,12,0,1,48,0,1,4,0,3,1,0,2,128,0,8,2,0,6,129,1,0, 1,6,192,0,0,24,0,0,3,97,0,0,12,132,0,0,48,0,1,128,0,3,64,0,1,128,1,33 ,32,40,250,96,1,0,0,128,1,0,1,6,192,0,0,24,0,0,12,0,1,48,128,1,0,2, 192,0,0,24,0,1,128,129,0,0,8,0,6,16,0,6,8,1,44,0,0,6,48,0,0,24,0,0,2, 0,1,8,0,1,48,0,0,6,192,0,3,96,0,1,128,1,0,1,176,251,172,0,1,128,0,0,4 ,0,0,2,64,0,0,8,0,0,12,0,1,48,128,0,3,73,0,0,8,130,0,0,128,17,128,0, 15,128,136,20,0,0,38,20,0,0,24,0,0,9,98,130,132,136,1,2,5,68,132,64,0 ,2,96,128,0,0,128,65,0,0,16,18,248,196,0,4,4,25,0,0,19,96,4,64,2,0,1, 2,134,0,1,24,32,3,0,0,1,0,0,128,32,0,0,8,0,6,8,0,6,132,17,154,16,0,0, 4,0,0,24,8,99,32,33,12,0,0,5,48,34,16,2,40,0,2,96,2,0,0,128,65,16,33, 208,253,32,1,0,0,128,5,52,0,0,30,196,3,122,16,3,0,1,12,160,7,0,1,30, 192,3,26,32,0,0,96,1,12,0,15,96,0,0,32,128,3,32,32,30,192,0,0,120,0,0 ,3,232,0,0,61,128,1,48,0,3,120,16,0,0,224,1,60,0,0,240,249,4,1,0,2, 192,0,0,24,0,0,3,96,0,0,12,0,3,6,0,1,24,16,3,0,0,16,0,0,128,1,0,0,8,0 ,6,18,0,6,9,1,33,32,2,192,32,0,1,2,34,0,0,8,128,1,0,1,2,4,128,0,2,96, 0,2,65,0,0,16,129,251,160,0,1,128,0,0,194,66,24,64,3,96,0,0,76,1,0,2, 6,0,1,72,0,0,3,104,2,0,0,128,145,48,0,7,8,0,6,68,16,16,2,38,200,0,1, 130,32,0,0,10,0,0,196,9,129,64,68,192,0,3,96,16,0,0,128,1,48,0,0,64, 254,32,1,0,5,64,8,0,0,128,1,0,3,64,0,1,154,64,8,8,0,0,13,0,1,132,0,7, 2,0,6,161,5,4,128,6,208,0,0,18,65,11,10,34,129,32,8,52,18,0,0,208,8, 66,80,32,40,68,133,164,0,0,4,32,184,251,128,0,4,64,0,0,8,0,0,1,0,6,4, 0,0,24,8,0,0,1,0,0,12,0,1,32,8,0,6,2,0,6,129,129,0,5,16,3,0,2,136,128 ,32,0,1,192,32,8,0,1,65,0,0,8,0,0,1,32,0,0,96,248,96,1,0,2,48,0,0,6,0 ,1,120,16,0,0,2,0,1,128,1,0,1,16,0,0,1,24,16,0,2,12,0,7,8,0,6,4,129, 44,0,0,6,48,0,0,24,0,0,2,0,1,4,8,128,48,16,0,0,192,0,2,1,0,1,12,96,1, 48,8,48,255,172,0,3,16,0,0,2,0,1,106,4,0,3,128,0,2,8,16,0,0,12,1,0,2, 36,32,0,6,12,0,6,134,4,20,0,0,22,18,130,16,4,81,32,33,40,128,5,0,0,2, 0,0,192,0,0,25,32,10,4,32,40,168,0,0,48,0,0,114,250,196,0,3,192,8,88, 0,0,163,0,0,33,32,2,0,2,22,0,1,152,32,8,1,16,128,4,0,0,16,1,0,14,128, 5,152,16,22,200,2,24,32,11,1,4,128,8,1,16,10,0,0,192,132,80,0,1,32,1, 64,194,0,0,177,0,0,160,254,32,1,0,2,240,128,30,196,3,120,0,0,3,0,2, 128,7,1,0,0,6,192,0,0,24,0,0,3,0,1,8,8,0,6,34,0,6,113,0,0,33,128,7, 240,64,30,192,0,0,24,16,15,224,128,44,0,1,240,0,0,14,208,3,121,32,3,0 ,0,1,60,8,96,250,132,0,3,192,0,0,24,0,0,131,0,1,12,2,0,2,6,0,1,16,16, 0,5,52,16,2,0,6,1,0,6,1,32,0,0,6,192,0,0,24,0,0,2,96,64,4,132,1,0,0,8 ,0,0,192,0,0,24,0,0,1,0,0,16,0,0,4,1,48,0,0,97,253,32,1,0,2,192,0,0, 24,0,0,9,96,17,64,0,3,6,0,1,68,0,0,128,104,64,128,16,0,0,176,128,0,6, 64,0,7,16,17,64,6,8,36,152,4,32,2,4,12,128,1,1,2,0,0,128,4,157,16,83, 96,4,140,128,80,48,8,240,249,32,64,128,160,0,3,64,3,0,0,128,1,0,4,8, 16,90,0,1,8,20,0,2,52,0,0,4,0,5,18,2,0,5,169,49,4,128,0,0,16,0,0,2,64 ,11,104,34,45,168,1,52,65,0,0,208,64,130,96,16,108,33,13,36,0,0,180,0 ,0,88,250,0,5,64,0,0,8,3,0,9,24,16,0,0,1,0,3,48,0,7,32,0,6,136,1,0,6, 3,1,0,0,12,128,1,48,0,1,192,0,0,8,0,1,96,0,0,12,0,1,48,16,216,251,224 ,0,0,13,128,1,48,0,0,6,192,3,120,16,0,0,2,0,1,128,7,49,0,0,16,192,0,0 ,56,16,0,2,48,0,0,1,0,5,128,0,6,1,1,44,128,1,48,0,1,4,2,32,0,0,8,224, 1,32,0,1,128,0,2,1,64,0,0,8,100,1,32,0,0,112,255,36,16,4,128,0,0,16,0 ,0,2,64,3,104,1,0,3,128,38,16,0,0,8,81,0,0,8,2,0,2,48,0,7,16,0,6,136, 136,20,128,0,0,16,0,2,9,2,130,4,168,1,16,64,0,0,64,130,24,9,34,33,64, 36,160,0,0,16,4,73,254,12,8,48,1,22,194,4,152,0,0,3,0,0,33,32,2,0,2, 16,194,128,88,32,131,0,0,36,0,3,130,4,0,5,66,2,0,5,129,17,152,16,134, 192,2,64,4,19,100,0,0,12,144,1,48,6,0,0,192,8,16,0,0,32,98,66,140,208 ,0,0,49,64,163,250,96,64,60,160,7,240,32,30,132,3,120,0,0,15,0,2,128, 7,240,0,0,6,192,3,24,0,3,12,32,2,0,6,1,0,5,96,0,0,33,128,7,224,32,6, 192,0,0,120,64,3,192,1,12,0,1,48,128,14,200,3,24,0,0,3,0,0,1,12,0,0, 128,255,8,0,0,48,0,0,6,192,0,0,24,0,0,3,0,0,16,0,0,2,0,3,192,0,0,16,0 ,0,3,0,5,128,0,6,64,0,7,1,32,16,6,192,0,1,4,2,97,0,0,8,132,1,32,0,1, 128,128,24,0,0,1,66,0,0,8,8,65,32,16,98,253,32,64,52,0,0,6,192,0,0,24 ,0,0,3,96,0,0,64,0,3,22,209,0,0,128,16,3,8,132,0,3,128,0,6,64,0,6,64, 8,18,2,6,192,0,0,152,128,16,64,32,34,128,1,136,16,0,0,32,2,24,16,19, 16,65,34,128,16,136,0,0,72,249,16,0,0,52,128,0,0,208,0,1,64,0,1,128,4 ,32,0,0,4,0,0,64,208,0,0,26,9,0,0,8,0,1,32,0,0,20,0,0,2,0,6,1,0,5,160 ,5,4,128,6,208,0,0,10,64,11,10,0,0,13,32,0,0,182,144,32,208,4,128,72, 19,104,0,0,13,33,0,0,52,1,248,253,0,1,48,0,4,8,0,2,8,4,0,3,196,0,0,24 ,0,1,1,0,3,32,0,0,3,0,5,128,1,0,5,128,129,0,2,192,0,0,16,0,0,3,0,1,12 ,132,0,0,48,0,1,194,128,0,1,3,97,32,12,0,1,48,32,56,249,0,1,60,128,1, 240,32,6,192,0,0,120,0,0,11,224,1,12,128,1,240,0,0,8,208,0,0,24,0,1, 96,0,0,44,0,16,129,44,0,0,6,52,0,0,22,0,0,2,0,1,8,0,0,128,32,0,0,2, 128,0,0,6,0,0,2,64,0,0,8,96,1,32,0,0,248,255,12,0,0,52,128,0,0,208,2, 2,64,0,0,104,0,0,69,161,1,4,128,0,0,208,0,0,24,65,0,0,8,0,1,32,0,0,20 ,128,8,0,5,64,4,0,5,128,4,20,0,0,6,16,0,0,74,4,81,0,1,36,144,9,16,34, 20,68,20,2,0,0,33,36,129,132,168,0,0,144,32,74,249,4,0,0,48,0,0,6,0,0 ,66,152,4,11,96,33,6,128,17,48,10,70,192,0,0,8,1,11,96,65,0,0,128,1, 24,9,0,14,128,1,152,16,38,2,2,12,8,11,4,20,76,0,0,5,176,0,1,192,2,25, 16,3,96,65,44,208,0,0,177,64,176,252,0,1,56,128,7,226,0,0,30,192,131, 120,0,0,8,192,1,61,128,7,225,0,0,30,200,131,120,0,1,224,129,32,0,15, 96,0,0,33,128,7,32,64,18,192,0,0,24,0,0,3,232,0,0,13,160,7,50,0,0,30, 192,0,0,26,0,0,3,0,0,1,12,0,0,40,253,4,0,0,48,0,0,6,0,1,24,0,0,3,96,0 ,0,10,128,65,48,0,0,6,192,0,0,8,0,0,3,96,0,1,128,1,32,136,4,0,5,64,2, 0,6,1,32,0,0,6,192,0,0,20,4,2,96,32,8,128,1,32,0,0,2,128,0,0,24,0,0,2 ,64,0,0,8,0,0,65,32,32,193,255,0,1,48,0,0,6,192,0,0,25,0,0,3,96,18,4, 160,5,52,0,0,6,192,0,0,20,2,3,96,0,1,160,1,144,0,0,4,0,6,2,0,6,128,16 ,17,6,194,36,72,0,0,32,97,4,128,196,9,1,18,166,0,0,8,25,128,8,2,8,64, 132,4,0,1,216,252,16,0,0,52,128,0,2,2,68,8,2,4,0,0,32,81,52,0,1,24,0, 0,18,9,0,0,8,0,0,128,16,48,4,128,0,6,64,0,6,160,49,4,128,38,16,0,0,2, 64,11,8,128,1,32,16,52,193,0,0,210,128,2,72,35,104,128,13,36,0,0,52, 16,88,255,0,1,48,0,2,64,0,3,64,0,0,132,0,0,48,0,3,8,0,1,1,0,5,4,0,6,2 ,0,5,128,1,0,1,4,1,0,2,3,1,0,1,132,128,48,0,1,192,0,0,8,0,0,3,97,0,0, 12,0,1,48,0,0,232,249,0,2,128,1,48,0,1,4,0,0,24,0,0,11,224,0,0,60,128 ,7,0,1,24,192,0,0,24,0,0,3,96,0,0,44,128,0,6,64,0,7,1,44,0,0,6,50,0,0 ,22,0,0,2,0,1,4,0,1,32,0,0,2,128,0,2,2,64,32,8,100,1,32,0,0,248,254, 12,0,1,128,0,0,16,0,0,64,0,0,8,10,0,0,69,33,1,52,128,38,1,0,0,152,72, 0,0,8,0,0,1,32,0,0,20,0,7,20,0,6,130,136,20,0,0,68,16,0,0,74,4,9,66, 64,40,144,17,17,64,36,72,16,24,2,9,36,2,36,160,0,0,16,66,49,252,4,0,1 ,32,38,194,36,128,0,0,131,96,1,6,0,0,1,48,0,0,16,194,72,88,0,0,139,96 ,66,12,136,5,26,9,0,14,144,9,154,16,18,192,32,12,8,35,0,0,2,32,0,0,1, 48,2,64,196,8,80,0,0,11,98,66,140,193,0,0,49,64,115,254,0,1,12,128,7, 240,0,0,6,196,3,120,16,8,160,0,0,56,128,7,240,0,0,14,196,3,120,0,0,15 ,224,1,32,0,15,96,0,0,32,128,7,228,0,0,18,192,0,0,58,32,15,232,128,12 ,160,7,48,128,14,208,0,0,24,0,0,3,0,0,1,12,0,0,8,255,4,0,2,6,192,0,1, 4,3,97,0,0,10,128,0,0,48,0,3,24,0,0,3,96,0,0,12,128,1,32,8,0,15,129, 32,0,0,6,194,0,0,20,4,2,32,32,4,128,1,32,32,2,132,128,24,0,0,2,64,0,0 ,8,0,0,65,32,16,122,255,0,2,32,6,192,0,0,8,1,17,96,0,0,4,0,0,1,48,0,0 ,6,1,8,73,8,3,96,0,0,13,128,1,16,0,15,64,8,16,34,38,192,0,0,8,128,16, 36,2,76,129,1,9,2,38,32,2,156,16,64,16,65,130,132,0,0,136,0,0,248,255 ,32,0,0,4,128,16,17,8,0,0,64,3,0,0,128,8,32,1,132,16,0,0,24,0,0,26,1, 0,0,104,0,0,13,0,1,36,2,0,14,160,5,36,128,22,16,0,0,18,72,11,10,4,73, 164,33,180,16,0,0,208,2,2,65,2,105,0,0,13,33,1,53,1,136,250,0,5,128,0 ,0,8,3,0,1,4,132,0,5,24,4,0,0,97,0,0,12,0,1,16,32,0,14,128,129,16,0,0 ,4,2,0,0,8,0,0,3,0,0,64,0,0,128,1,48,0,1,192,64,8,8,0,0,96,64,12,128, 0,0,48,16,232,255,96,0,0,12,128,3,0,1,6,0,0,3,120,0,0,11,96,1,48,128, 7,49,0,0,8,200,0,2,15,0,1,44,0,7,4,0,6,2,129,44,0,0,6,49,0,0,22,0,0,2 ,0,0,16,8,128,0,0,32,0,1,128,64,0,1,130,64,0,0,8,96,1,32,0,0,160,248, 40,0,0,4,128,0,0,4,40,2,0,0,67,104,20,69,161,0,0,48,145,6,16,0,0,128, 64,0,2,13,0,1,20,0,0,4,0,5,16,2,0,5,136,4,20,0,0,20,16,0,0,10,0,0,81, 0,0,4,132,2,133,16,34,0,0,64,2,88,32,33,32,68,132,168,0,0,16,32,10, 251,128,1,48,9,0,1,36,88,4,11,4,33,6,192,0,0,16,1,16,194,36,64,4,163, 0,0,33,12,0,1,24,0,0,2,0,5,16,1,0,5,136,5,154,16,18,192,34,84,0,0,3,0 ,0,2,132,1,8,48,0,1,192,2,17,0,0,17,98,65,140,64,1,176,64,64,252,224, 1,61,128,1,180,0,0,30,192,3,120,0,0,8,32,1,12,144,7,240,0,0,6,192,3, 24,0,0,14,0,1,16,0,0,7,0,5,144,3,0,5,104,0,0,32,128,7,228,0,0,18,196, 0,0,58,16,15,224,129,12,32,0,0,48,0,0,14,200,3,24,0,0,3,8,1,12,0,0,16 ,251,132,1,48,0,2,32,24,0,0,3,0,1,6,128,0,0,48,0,1,192,0,2,3,0,1,12,0 ,1,16,128,5,0,5,208,2,0,5,8,1,16,0,0,6,194,0,0,16,0,0,2,32,0,0,12,2, 128,32,0,1,128,0,0,24,0,0,3,64,0,0,8,0,0,1,32,32,137,248,128,1,48,128 ,0,0,2,0,0,24,0,0,16,98,16,8,0,0,1,48,4,70,193,0,0,16,5,3,0,0,32,12,0 ,1,16,0,0,4,0,5,8,2,0,5,4,144,32,32,6,192,0,0,16,0,1,97,17,12,64,5,0, 0,16,0,1,8,25,16,163,0,0,8,0,0,4,1,0,1,104,252,80,0,0,8,0,0,1,0,2,128 ,0,5,8,0,1,32,0,3,16,0,0,2,0,2,2,4,0,6,2,0,18,64,0,15,232,253,0,4,16, 0,0,2,0,1,8,0,0,1,0,1,4,128,0,2,2,64,0,5,4,8,0,6,16,0,6,40,0,0,4,128, 0,0,16,0,0,2,64,0,0,8,0,0,1,0,1,4,128,0,0,16,0,1,64,0,0,8,0,0,1,32,0, 0,4,0,0,80,249,0,74,152,255,44,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1, 32,136,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,2,0,15,32,0,0,4,128,0 ,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,69,0,0,8,0,0,1, 32,0,0,4,0,0,187,251,68,0,0,128,32,1,0,0,2,0,2,2,0,0,32,0,0,8,1,34,0, 1,16,0,2,16,0,0,128,16,0,19,128,0,2,136,0,6,136,0,4,4,0,5,48,0,1,241, 251,32,0,1,128,0,1,32,0,5,36,0,8,8,0,4,8,0,14,32,0,1,32,0,3,64,0,0,8, 0,0,1,0,1,4,128,0,0,16,0,1,64,0,0,8,0,0,1,0,1,4,0,0,56,253,4,0,1,16,0 ,1,128,0,0,16,0,1,64,0,0,8,0,1,16,0,5,2,0,1,4,0,0,1,0,20,2,0,1,16,0,4 ,64,0,14,129,250,32,0,0,4,130,0,1,4,130,64,32,9,2,64,0,0,136,4,129,32 ,18,68,2,96,16,8,0,0,129,32,8,0,0,17,0,14,32,0,1,132,16,0,0,72,130,64 ,0,0,8,0,0,1,32,4,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,136,4,0,0,80, 251,0,8,8,0,4,8,0,29,4,0,6,8,0,13,1,0,2,128,0,0,136,250,0,26,2,0,20, 16,0,8,64,0,5,4,0,2,32,0,3,200,254,0,1,128,0,10,128,0,0,16,0,9,128,0, 17,1,0,1,1,0,3,66,0,5,64,0,1,32,32,0,0,4,0,1,16,0,1,32,0,0,56,255,4, 32,0,4,1,0,9,32,0,3,80,0,0,2,128,0,0,2,64,0,15,32,0,6,64,0,3,32,36,0, 0,4,0,3,2,32,0,3,96,0,0,112,251,0,5,2,64,0,2,1,32,0,8,8,0,3,4,0,3,1,0 ,5,128,0,11,66,0,1,32,0,6,1,0,6,32,0,2,224,250,0,13,2,0,1,8,0,2,2,0,5 ,64,0,6,2,0,6,1,0,10,56,0,4,2,0,8,2,0,1,232,250,0,11,4,0,1,16,0,6,1, 16,0,1,64,0,18,8,8,2,16,0,1,16,0,5,4,8,2,1,0,2,128,0,1,1,40,0,1,32, 112,253,0,2,32,2,0,10,4,0,0,32,64,2,0,1,32,0,0,4,128,0,0,4,8,0,22,8,0 ,0,8,0,0,2,128,64,8,128,0,4,1,0,0,32,0,4,240,248,0,2,160,20,0,3,128,0 ,1,2,0,0,64,8,38,0,0,16,128,2,0,1,9,48,1,32,192,4,32,0,15,64,24,16,1, 32,0,1,24,0,0,8,0,0,1,32,64,13,144,1,2,0,1,64,0,0,33,64,2,68,0,1,16, 48,254,32,193,86,10,128,138,16,40,0,0,16,160,0,0,8,0,0,193,2,4,2,128, 16,44,0,0,2,64,2,166,1,32,16,1,0,15,80,16,8,14,1,0,0,16,2,128,69,0,1, 2,32,48,8,178,16,136,0,0,18,136,32,92,4,128,1,4,82,64,252,0,0,64,16,8 ,0,2,8,0,1,32,0,2,64,0,0,128,0,2,2,0,3,4,0,1,16,0,16,64,16,144,0,0,4, 0,3,1,0,1,2,0,0,4,144,0,5,9,64,1,128,0,2,208,251,132,0,3,33,128,0,4,1 ,32,0,1,32,0,0,128,64,0,0,64,0,0,8,0,1,2,32,0,20,2,0,1,8,16,0,0,16,0, 2,128,16,0,1,4,0,1,4,0,1,32,0,0,32,0,2,188,248,0,2,4,0,5,1,0,8,2,8,0, 0,32,0,22,2,0,0,8,0,4,4,0,9,160,0,0,4,0,0,32,4,0,1,16,216,255,0,4,2,0 ,2,2,0,16,128,0,19,8,0,0,2,2,0,9,128,0,11,152,255,0,45,128,0,1,16,0,2 ,32,0,0,1,64,2,64,0,0,16,16,1,0,1,2,0,1,16,0,0,1,0,0,4,0,1,144,250,0, 13,32,0,10,32,0,19,2,0,6,6,0,0,32,0,0,2,0,1,16,0,1,32,0,0,8,4,0,0,1,0 ,2,64,112,255,0,8,64,0,17,1,0,20,4,0,6,4,0,4,64,0,3,32,0,4,248,254,0, 17,16,0,29,4,0,7,2,0,0,64,0,0,8,64,0,0,8,16,68,0,1,2,8,0,1,16,88,250, 0,10,64,0,2,32,0,1,4,0,0,16,2,0,22,32,0,5,4,0,1,128,0,1,16,0,4,2,17,0 ,2,128,0,0,16,0,2,112,251,0,14,64,0,3,10,0,9,128,0,2,128,0,2,64,0,2, 64,0,12,4,0,16,184,255,0,2,16,8,0,2,128,0,11,16,0,0,128,0,1,32,0,1,16 ,0,14,128,96,1,0,5,128,2,0,2,1,33,0,0,4,84,0,2,128,0,0,64,0,3,8,216, 253,0,5,1,32,0,3,16,0,6,1,24,4,0,0,128,0,0,16,0,0,1,0,1,64,0,2,64,0,2 ,32,0,2,32,0,1,3,0,1,1,0,7,1,0,1,4,0,0,130,2,0,9,208,253,0,74,220,251 ,0,14,128,0,8,4,0,5,32,0,2,32,0,2,16,0,2,16,0,23,1,0,4,56,248,8,0,8,4 ,0,9,32,0,26,2,0,10,32,2,0,11,176,251,0,18,1,0,36,1,0,2,128,0,3,64,0, 7,192,255,0,3,2,2,0,8,4,0,7,32,0,21,4,0,11,128,0,13,24,249,0,19,16,0, 32,128,0,8,32,0,2,64,0,4,4,120,248,0,19,32,0,35,1,0,16,136,252,0,47, 128,0,13,8,0,10,16,255,0,7,64,0,20,16,1,0,0,64,4,0,2,136,0,1,32,2,0,4 ,16,0,10,8,0,13,248,254,0,46,16,4,0,10,128,0,13,88,250,16,0,4,64,0,14 ,1,0,2,128,0,0,4,0,16,2,0,5,20,4,64,0,0,16,2,130,64,0,4,72,0,0,8,0,0, 4,0,2,64,48,251,0,0,128,0,1,2,0,4,128,0,9,32,0,6,32,0,20,32,0,0,64,0, 6,32,0,0,16,129,0,3,32,4,0,3,128,252,0,14,16,0,10,1,0,20,128,0,12,8,0 ,7,64,0,1,216,254,8,0,4,128,0,19,4,0,16,128,0,0,32,0,0,2,0,3,1,0,2, 128,0,0,16,0,5,128,0,0,144,0,2,16,0,0,80,251,128,0,5,8,4,0,2,4,0,2,16 ,0,0,65,32,0,1,128,0,2,128,0,1,8,0,15,128,16,8,0,0,4,0,1,16,2,2,16,1, 2,0,0,4,160,0,2,16,0,1,10,0,1,64,0,2,72,248,26,64,4,32,0,0,64,64,0,0, 128,0,0,8,0,1,32,0,1,8,1,32,0,1,128,0,0,16,16,2,64,0,0,8,0,25,1,0,0,4 ,0,0,64,8,0,1,2,0,0,16,8,0,0,1,0,1,8,0,0,1,128,56,251,64,0,0,5,32,0,0 ,16,128,4,72,0,0,8,0,0,2,32,0,1,176,0,0,50,64,0,0,64,1,9,80,1,96,0,0, 4,16,0,15,128,8,16,20,2,0,0,128,138,0,0,3,32,3,4,0,0,13,16,1,4,20,6, 16,0,0,19,0,1,72,0,0,1,0,0,184,250,0,0,4,24,12,128,64,98,137,0,0,130, 2,0,0,40,0,0,33,48,9,76,129,4,16,2,10,64,8,4,128,0,1,1,0,4,16,0,6,72, 0,1,113,16,0,0,3,64,33,0,0,4,160,200,10,96,128,0,1,12,130,0,0,60,34,5 ,96,0,1,4,129,96,112,14,80,251,0,1,8,8,0,0,64,32,8,0,0,128,0,4,16,8,0 ,0,1,0,5,4,32,0,18,64,16,128,0,0,64,128,0,0,16,128,0,2,128,0,1,160,0, 1,32,0,0,4,0,2,1,128,64,16,8,104,248,0,2,32,128,0,2,128,0,2,2,32,0,0, 9,0,0,2,16,0,0,4,80,0,0,16,32,0,17,16,0,0,32,128,0,7,64,32,0,3,16,0,0 ,2,128,0,1,128,0,2,4,128,8,16,32,250,0,8,2,0,45,8,4,0,3,16,2,0,2,8,0, 4,16,0,0,192,251,0,43,128,0,1,64,32,0,9,128,0,5,8,0,7,176,251,0,19,4, 0,2,64,0,21,16,0,6,16,0,1,8,0,1,136,0,0,128,128,0,1,64,0,0,8,0,0,2,0, 1,32,96,249,2,0,15,2,0,1,32,0,0,2,1,0,25,128,0,0,8,0,1,32,0,12,64,0,3 ,128,96,255,0,4,64,0,3,32,0,5,2,0,9,16,0,0,1,0,1,5,0,2,129,0,1,128,2, 0,1,128,0,2,8,0,0,128,0,0,16,0,21,240,252,0,3,8,0,26,64,0,2,64,0,2,32 ,0,2,32,0,11,2,32,0,15,112,251,0,20,4,0,8,16,0,3,1,0,1,8,0,2,128,0,5, 8,0,2,1,0,2,128,64,0,6,1,0,0,16,2,0,3,80,253,0,4,128,0,2,128,1,0,0,8, 0,6,4,4,0,1,8,0,1,1,32,0,16,192,128,0,6,65,0,1,4,0,1,88,1,1,0,9,8,120 ,248,0,10,32,0,5,2,0,4,8,0,2,2,0,4,16,0,17,72,0,1,32,8,1,0,0,4,0,1,32 ,16,0,0,2,0,0,32,0,1,1,0,0,4,0,0,104,250,0,6,10,0,3,1,0,2,128,0,5,2,0 ,7,16,0,6,8,0,2,8,0,1,1,0,8,16,0,0,1,1,0,1,4,16,1,32,0,0,131,8,16,0,1 ,136,0,0,96,248,2,0,1,8,0,4,128,0,8,2,0,4,32,0,8,16,0,6,8,0,0,64,0,6, 128,0,4,4,0,3,1,68,0,0,2,128,0,0,8,0,1,72,128,16,255,0,1,16,0,22,8,0, 6,2,0,9,64,0,3,5,0,1,128,2,8,0,3,8,0,6,16,0,1,2,0,1,32,0,0,253,0,1,4, 6,0,3,81,0,0,8,33,0,5,16,8,2,65,35,1,0,0,1,36,132,0,0,32,0,22,64,3,40 ,4,1,0,2,128,0,0,80,2,26,0,6,4,2,120,248,0,18,64,0,0,8,3,0,30,3,64,16 ,0,4,6,192,64,24,0,7,16,192,250,0,6,6,192,0,0,32,0,6,64,64,8,0,0,3,1, 0,3,60,0,23,192,0,0,32,0,0,3,0,3,6,52,0,0,24,0,7,32,16,253,0,2,10,0,2 ,2,64,0,1,33,0,6,2,64,8,17,0,1,128,16,0,0,54,10,0,22,64,0,0,64,32,1,0 ,3,70,80,32,128,2,0,6,2,232,252,0,2,4,0,2,24,2,35,0,0,65,0,8,2,18,0,1 ,76,128,17,0,0,2,0,23,32,34,0,0,140,0,3,6,129,0,0,88,32,0,5,48,1,136, 254,0,1,12,0,3,30,128,131,24,0,6,48,64,6,192,129,0,1,15,226,65,60,32, 0,22,128,0,0,120,32,14,8,0,1,128,1,48,128,30,0,6,60,8,24,255,0,2,8,0, 2,24,0,0,3,32,64,0,5,64,0,0,8,0,0,2,2,0,0,12,128,1,0,0,8,0,23,131,32, 0,0,12,0,4,192,32,0,7,48,0,0,96,248,0,1,16,1,0,2,24,0,0,3,64,0,6,128, 128,16,9,1,0,1,68,129,16,178,0,24,19,64,33,13,0,3,64,130,0,1,33,0,5, 16,5,248,255,0,1,4,193,18,0,2,80,0,0,104,2,0,5,16,72,0,0,64,0,0,8,0,0 ,1,36,4,0,0,34,0,17,128,0,0,16,2,0,0,64,0,0,40,18,1,32,136,4,161,6, 144,0,1,64,0,0,104,0,3,4,2,128,253,0,3,4,1,0,3,96,64,0,15,1,0,21,64,0 ,2,64,0,5,6,64,128,0,2,96,0,4,16,192,251,0,2,8,2,0,1,6,192,0,0,32,0,6 ,64,64,0,1,128,24,0,1,4,0,0,12,0,19,6,0,0,128,0,0,192,0,0,32,0,0,3,0, 0,128,32,128,1,176,0,1,192,0,0,96,0,3,16,16,176,249,8,0,2,4,2,0,0,2, 64,0,0,96,36,0,6,2,0,2,8,0,0,32,0,0,136,4,0,19,6,0,0,8,0,0,64,0,0,64, 10,1,0,0,9,0,0,132,0,0,80,0,1,64,0,0,96,129,0,3,2,105,248,0,1,128,8,2 ,2,0,1,1,131,32,18,0,6,130,0,1,136,96,4,76,130,17,176,0,19,38,196,2,0 ,1,3,32,65,12,128,5,176,0,0,32,132,0,2,3,96,1,0,3,4,195,253,0,1,44, 128,7,0,1,6,144,3,120,0,6,48,0,1,192,0,0,120,64,15,224,129,60,8,0,17, 128,7,240,32,0,0,128,131,120,0,0,14,226,129,60,16,1,96,0,1,128,3,26, 32,0,2,12,0,0,224,252,4,0,1,8,2,0,1,24,4,3,32,0,6,64,0,2,131,96,0,0, 12,128,1,48,0,19,6,194,0,2,3,32,64,12,128,1,48,32,6,129,0,2,3,0,0,32, 0,2,16,32,106,248,0,2,2,20,2,0,0,152,0,0,3,80,130,0,5,128,72,0,1,16, 96,0,0,68,129,40,48,0,19,70,64,20,0,1,3,64,2,13,128,32,16,1,6,64,0,2, 3,0,0,1,0,2,32,2,120,252,0,1,4,128,2,17,0,1,80,3,72,2,0,2,4,17,0,0, 208,64,0,2,8,0,0,13,32,136,0,0,34,0,14,160,1,22,18,0,0,16,128,26,69,3 ,40,2,1,32,136,52,193,36,20,0,1,64,3,108,0,0,77,0,1,132,16,160,251,0, 2,32,4,0,3,3,32,64,0,2,1,0,8,12,0,19,1,32,0,3,16,0,1,64,16,0,2,48,0,0 ,2,0,3,3,96,0,0,12,8,0,2,120,253,0,3,2,48,0,0,30,196,0,0,96,64,0,0,96 ,0,1,32,0,0,192,32,0,2,24,0,0,12,0,1,12,0,15,128,1,28,0,2,64,24,196,0 ,0,34,0,0,3,0,1,16,144,5,48,0,2,1,96,0,0,8,0,1,16,16,56,248,4,0,1,8, 164,16,0,0,26,64,0,0,96,2,0,0,32,0,4,2,0,2,8,0,0,140,8,0,0,6,0,15,128 ,145,36,0,3,152,64,8,64,32,1,0,0,9,49,130,2,16,0,2,2,97,68,68,4,0,1,2 ,10,254,12,0,1,66,34,200,136,0,0,1,0,0,100,0,1,128,73,48,1,0,0,64,2,0 ,2,96,128,44,144,9,48,1,0,14,128,1,16,0,1,192,4,152,4,35,34,66,76,130 ,33,16,64,4,192,8,0,2,96,1,12,8,0,0,128,32,192,252,0,1,12,128,7,224,0 ,0,30,144,0,0,56,32,0,0,224,1,60,8,0,0,240,128,0,2,112,0,0,15,224,1, 61,8,0,14,224,129,44,0,1,240,32,30,192,3,120,0,0,14,224,1,60,0,0,3, 224,32,0,0,192,3,25,32,3,0,1,12,0,0,152,250,8,0,2,2,196,0,2,3,96,16,0 ,0,128,1,48,32,0,1,128,0,2,96,0,0,12,128,1,48,0,15,128,1,16,0,1,192,0 ,0,24,4,131,32,0,0,12,128,129,16,0,0,4,192,0,4,32,8,0,1,16,0,0,137, 255,0,1,16,9,36,192,0,0,24,4,147,32,1,0,0,128,1,144,0,1,192,4,0,2,104 ,0,1,129,16,50,0,15,128,17,33,0,1,64,128,88,0,0,16,64,33,13,128,4,168 ,32,2,192,0,1,128,34,1,4,66,8,0,0,32,66,192,248,32,0,1,144,16,16,0,1, 80,3,8,1,13,8,0,0,132,0,1,16,8,0,0,64,0,0,8,0,0,13,160,17,50,34,0,14, 32,0,0,148,0,1,208,0,0,2,64,0,0,40,17,13,160,1,36,193,0,0,16,0,0,26, 64,99,8,1,77,160,1,4,16,8,248,0,4,2,0,4,32,8,0,1,1,16,0,1,64,0,4,12, 128,1,0,18,33,16,0,0,192,0,3,64,0,0,12,128,1,16,0,3,24,0,0,3,0,0,32, 12,132,0,0,1,0,0,136,253,0,1,12,0,1,48,0,0,30,196,0,0,32,0,0,12,98,0, 3,192,0,3,24,0,0,12,0,0,1,60,0,16,129,28,0,1,192,64,24,192,0,0,32,0,0 ,3,128,1,48,160,1,48,0,0,24,0,0,3,0,0,64,8,128,129,0,0,16,16,254,12,0 ,0,4,0,0,16,20,0,0,90,64,16,1,65,12,32,0,1,18,0,0,192,66,0,2,8,0,0, 140,136,136,4,33,0,15,4,36,0,1,192,4,24,64,0,0,64,10,1,128,129,48,128 ,0,0,16,0,0,24,8,83,64,4,68,144,1,0,1,74,255,4,0,0,48,8,38,193,2,0,0, 1,3,4,129,32,128,5,48,9,0,0,64,8,0,1,64,96,18,44,144,33,0,16,128,33, 16,0,1,192,2,153,16,35,32,36,64,136,137,176,64,22,192,2,24,3,34,98, 130,140,4,17,178,8,144,249,96,0,0,61,128,7,224,32,30,208,3,24,0,0,15, 228,65,60,0,1,48,128,0,0,192,0,0,112,0,0,15,96,0,0,60,0,15,224,1,44,0 ,1,240,0,0,30,128,131,120,0,0,2,96,0,0,28,0,0,7,225,32,6,192,1,120,0, 0,3,224,1,60,0,0,64,248,132,1,49,0,0,6,192,0,2,3,0,1,12,130,1,48,0,1, 192,0,2,3,96,0,0,12,0,0,1,0,16,128,1,17,0,1,192,0,0,24,0,0,3,32,64,12 ,0,1,49,8,6,192,0,1,8,3,97,0,0,8,4,0,0,49,0,0,233,253,128,1,48,0,0,34 ,194,0,0,88,4,144,96,132,76,128,1,16,5,0,0,192,34,0,1,3,105,0,0,64,80 ,16,50,0,15,128,4,32,0,2,68,24,8,3,64,2,13,2,16,16,1,6,192,0,0,64,128 ,32,32,8,64,128,17,16,32,112,255,32,132,0,0,144,0,0,212,66,0,0,80,0,0 ,104,2,45,16,0,0,4,160,2,16,66,0,0,64,3,8,0,0,13,160,49,0,0,32,0,16, 20,33,0,0,16,68,66,64,3,8,0,0,1,160,1,0,0,128,2,210,0,1,64,19,12,1,0, 0,32,8,4,17,48,253,0,4,192,0,3,64,16,12,0,1,1,0,0,4,0,3,3,0,1,12,128, 1,0,18,32,0,4,16,3,0,2,128,1,0,2,192,0,2,3,0,0,32,0,1,128,0,1,16,254, 0,1,12,0,1,4,0,0,30,192,0,0,96,16,8,96,0,1,128,5,65,0,2,3,24,0,0,12,0 ,0,1,60,8,0,16,28,0,2,64,8,192,0,2,3,0,3,6,52,0,2,3,1,0,3,16,0,0,136, 252,4,4,6,0,0,16,192,68,154,68,0,0,96,2,4,33,0,1,194,2,0,0,136,0,1,3, 8,0,0,140,136,144,52,1,0,16,36,0,2,2,0,0,69,0,1,68,1,128,17,1,0,0,2, 16,0,2,3,64,66,0,1,8,2,34,129,251,140,9,176,8,70,129,132,0,0,1,11,96, 34,76,128,81,48,8,3,0,0,2,1,0,0,96,96,20,44,144,129,0,0,2,0,16,16,0,1 ,192,8,0,0,2,128,0,0,2,76,128,9,0,1,192,0,3,34,100,8,0,1,8,128,64,67, 253,224,129,60,128,7,112,0,0,30,144,131,120,0,0,3,232,1,60,128,4,48,0 ,1,192,0,0,112,0,0,15,96,0,0,60,32,0,16,44,0,1,240,32,6,128,0,0,120, 32,14,226,129,0,0,128,1,32,128,0,0,192,1,120,0,1,96,0,0,13,0,0,32,252 ,136,1,49,0,0,6,128,64,0,1,3,96,0,0,8,128,1,48,0,0,5,0,4,96,0,0,12,0, 0,1,0,0,32,0,16,16,0,1,192,0,0,8,0,0,3,0,1,12,0,0,128,0,1,4,192,0,2,3 ,96,0,1,128,0,2,170,250,128,4,48,0,0,2,36,8,24,5,3,96,18,66,136,1,16, 32,2,192,132,0,2,104,0,0,64,8,0,0,177,0,17,32,0,1,64,8,145,8,163,0,0, 8,13,0,0,16,0,1,35,193,40,0,1,8,36,32,0,0,128,81,48,17,40,248,16,0,1, 144,66,208,130,0,0,81,3,8,33,141,48,4,52,162,4,16,0,0,2,0,0,145,104,0 ,0,129,160,9,1,32,0,16,52,128,64,210,66,66,72,0,0,8,0,0,1,160,1,53, 128,68,16,0,0,2,64,3,105,64,141,160,1,54,0,0,192,249,0,3,4,193,0,2,3, 0,1,12,0,0,64,48,0,0,2,0,3,2,96,0,1,132,1,0,18,48,0,1,192,0,6,128,1, 48,0,0,2,4,0,2,1,96,0,0,12,132,1,48,0,0,16,251,0,1,12,0,0,2,130,0,0,6 ,192,0,1,64,8,136,64,32,128,5,1,0,0,24,192,2,24,0,1,128,0,0,60,0,17, 48,0,0,4,130,128,8,192,0,2,3,0,3,6,48,0,0,6,0,0,3,2,0,0,4,128,0,0,48, 0,0,216,255,12,0,0,4,0,0,20,64,8,3,64,0,2,4,0,0,16,16,146,2,0,0,136, 24,64,161,8,0,1,136,5,182,8,0,16,48,0,0,16,64,8,0,0,69,0,1,68,1,128, 80,0,0,33,38,24,0,0,2,0,0,35,32,16,40,4,133,48,34,186,253,4,0,0,48,10 ,66,196,72,24,0,1,96,12,140,4,64,48,4,3,0,1,24,137,1,0,0,1,140,128,0, 1,2,0,17,10,134,192,16,64,16,147,0,0,129,140,130,5,49,1,38,192,36,24, 32,162,96,68,0,2,176,64,160,251,0,1,60,128,7,48,0,0,30,132,128,120,0, 0,3,96,0,0,12,128,4,240,128,30,0,0,2,16,16,15,226,1,61,32,0,16,12,128 ,7,48,0,0,6,128,3,120,0,0,14,224,1,12,160,1,226,0,0,30,192,3,120,0,0, 15,228,129,60,0,0,72,255,4,0,0,48,0,0,2,130,0,0,24,0,0,131,96,64,8,4, 64,32,32,3,0,1,24,144,2,96,0,0,12,128,0,0,1,8,0,18,6,128,0,0,8,0,0,3, 0,1,12,0,0,1,48,16,6,192,0,0,24,0,1,66,0,3,48,0,0,249,255,0,1,48,0,0, 68,0,0,72,24,0,0,3,32,1,64,0,1,136,0,0,4,0,0,16,24,1,1,104,20,68,68,9 ,48,0,19,130,32,8,17,32,3,0,0,8,12,192,1,129,0,0,166,192,0,0,24,0,0, 19,112,65,138,72,5,2,17,112,255,160,1,0,0,144,6,208,0,1,81,0,0,8,0,0, 1,0,1,52,193,6,16,64,0,1,144,104,0,0,129,32,9,1,32,0,14,128,17,53,137 ,66,208,72,130,64,0,0,40,1,1,160,145,0,0,128,0,0,16,0,0,130,80,9,106, 36,141,161,49,52,9,208,255,0,3,6,192,128,0,5,4,0,0,49,0,0,6,0,2,16,0, 0,96,0,1,132,0,19,48,0,0,4,194,0,1,4,0,0,64,16,0,0,128,1,0,6,3,96,0,0 ,12,128,1,32,0,0,136,250,128,1,12,0,0,6,0,1,6,192,0,0,24,0,0,4,96,0,0 ,32,0,0,6,64,64,6,192,2,24,0,1,128,1,60,0,15,224,129,48,160,3,128,0,0 ,8,192,0,0,32,32,3,0,0,64,0,0,128,1,48,0,0,16,200,0,2,12,128,1,48,8, 56,253,4,0,0,5,0,0,134,192,2,3,64,0,0,8,0,0,136,36,0,0,16,65,6,0,0,2, 2,64,161,8,0,0,128,132,133,52,8,0,14,32,0,0,48,128,4,64,68,0,0,81,0,0 ,64,1,1,128,16,0,0,128,0,0,16,0,1,65,1,34,17,76,129,41,48,1,187,248, 140,33,48,65,22,136,132,88,4,147,96,18,128,132,65,176,64,22,0,0,16,24 ,145,1,0,0,4,12,128,5,0,0,2,0,16,32,2,2,192,2,65,32,139,32,130,12,130 ,1,0,1,38,192,32,88,0,0,2,97,2,8,16,129,48,2,41,253,224,1,60,128,7, 112,0,0,30,128,3,120,0,0,15,224,1,12,128,7,50,0,0,30,0,0,2,16,16,15, 226,64,60,32,0,14,224,1,28,144,5,48,0,0,6,128,3,120,0,0,14,224,129,0, 1,7,225,0,0,30,200,0,0,120,32,7,224,0,0,60,8,56,250,8,0,0,48,0,0,6, 128,64,24,0,0,3,96,0,0,4,132,1,32,0,1,64,0,0,24,128,2,96,0,0,12,128,1 ,0,0,8,0,16,48,0,0,2,128,0,2,3,32,32,12,0,0,1,1,0,0,6,192,0,0,24,0,0, 3,64,32,12,132,129,48,0,0,25,248,128,33,48,0,0,64,34,8,24,0,0,3,96,0, 0,76,128,1,0,0,32,64,130,130,24,0,0,1,104,17,68,132,72,48,2,0,14,128, 1,8,17,4,0,0,128,24,9,3,64,4,12,192,1,0,1,6,192,0,0,8,2,130,112,2,130 ,64,16,176,8,240,249,48,0,1,144,0,0,208,24,0,0,81,0,0,8,1,65,8,0,0,52 ,128,64,208,36,0,1,146,104,0,0,1,164,145,0,0,34,0,14,32,9,165,128,6, 208,4,130,64,0,0,40,0,0,1,32,4,6,146,2,16,0,1,64,8,8,4,77,176,9,6,16, 112,251,0,4,192,0,4,32,0,2,49,0,1,130,0,2,1,0,2,128,1,0,16,128,0,0,16 ,8,6,192,128,0,0,4,0,0,64,16,0,0,128,0,2,6,2,0,3,33,64,12,128,1,0,1, 128,249,128,1,12,0,1,128,0,0,6,192,0,0,32,32,4,96,0,0,48,0,0,2,196,32 ,0,0,192,2,24,0,1,136,0,0,13,0,15,96,1,0,2,68,128,8,200,0,0,32,32,3,0 ,2,128,1,48,0,5,12,128,1,16,16,176,249,140,1,4,0,0,64,68,4,3,64,0,1,2 ,8,40,0,0,48,4,20,192,0,1,64,161,8,8,32,0,0,4,4,0,15,160,0,0,48,10,32 ,0,0,2,128,64,0,0,64,1,1,128,17,2,145,18,17,0,3,97,34,12,136,1,1,2, 162,254,132,137,48,4,0,0,200,72,24,5,139,0,0,4,0,0,128,49,176,64,64, 196,0,1,128,1,96,4,44,0,0,68,48,2,0,15,1,48,2,38,2,24,0,0,1,163,32,4, 140,16,17,48,1,36,196,34,0,1,8,65,2,72,0,0,5,0,0,2,56,255,224,1,60, 128,7,48,0,0,30,128,3,24,64,15,232,1,60,128,7,240,32,0,1,2,120,16,15, 98,0,0,60,8,0,14,192,0,0,60,144,1,48,0,0,6,144,3,120,64,14,224,64,60, 144,1,224,0,1,192,0,0,56,16,7,228,0,0,13,32,136,254,132,1,48,0,1,128, 0,0,24,0,0,3,0,1,4,128,1,48,0,0,2,192,0,1,128,1,96,0,0,12,0,1,48,0,16 ,1,48,0,0,6,0,0,32,0,1,3,32,32,12,128,1,48,32,6,192,0,2,129,96,16,12, 128,1,16,16,17,253,128,17,49,0,0,128,0,0,72,24,0,0,3,96,128,140,136,1 ,0,0,65,70,196,32,0,1,2,8,17,68,1,81,48,0,15,160,0,0,48,17,16,132,2, 24,2,3,64,4,12,128,69,144,0,0,68,196,0,2,11,96,4,32,16,128,32,0,0,184 ,253,0,74,152,255,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4, 128,0,0,16,0,0,2,64,0,2,1,32,0,0,4,0,17,4,128,0,0,16,0,0,2,64,0,0,8,0 ,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,40,254,0,46, 1,0,26,136,255,36,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128, 0,0,16,0,0,2,64,0,0,8,34,1,32,0,0,4,0,15,32,8,4,128,0,0,16,0,0,2,64,0 ,0,8,0,0,129,40,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,73 ,248,12,0,4,2,0,1,32,2,0,10,32,2,68,0,20,4,0,6,8,0,1,128,8,0,2,16,0,0 ,136,0,1,8,0,6,235,251,32,0,1,128,0,1,128,0,4,1,0,1,4,0,1,16,0,5,1,32 ,0,19,1,0,1,16,0,0,2,0,1,10,0,1,32,0,0,4,0,1,4,0,3,10,0,0,1,32,0,0,4, 0,0,224,253,8,0,8,1,0,12,64,0,20,128,0,7,1,0,1,4,0,3,2,0,10,218,251, 32,0,0,132,144,0,1,72,66,8,0,0,8,10,1,32,132,4,128,32,18,0,0,130,72,8 ,1,2,1,32,0,0,132,16,0,15,8,4,161,32,20,0,0,2,0,0,32,8,0,1,32,0,0,4,0 ,2,4,3,9,32,10,0,0,1,32,0,0,4,0,0,232,252,0,4,1,0,12,32,0,3,32,0,0,2, 0,25,4,0,1,16,0,16,8,104,252,0,10,16,2,0,13,128,0,28,2,0,3,1,0,6,2,0, 3,8,252,32,0,10,32,0,7,64,4,0,0,64,0,1,64,0,22,32,0,5,32,0,0,36,0,5,1 ,8,0,5,56,252,0,1,4,0,42,32,32,0,9,9,0,1,12,0,2,10,2,0,0,1,8,0,2,16,0 ,0,112,249,0,9,80,0,6,32,0,5,2,0,25,4,0,5,1,0,0,8,4,0,0,128,0,7,8,0,0 ,176,252,128,128,0,0,128,0,8,4,0,6,2,0,32,8,0,10,3,32,0,0,4,132,32,0, 1,208,252,0,2,128,0,0,64,0,1,8,0,5,17,0,4,4,0,0,1,0,1,4,0,1,8,0,19,32 ,32,0,1,1,0,1,4,0,1,16,32,0,0,1,32,0,6,128,0,0,8,120,248,0,2,32,0,16, 16,128,0,0,64,0,20,128,0,5,8,0,0,8,0,3,1,128,0,0,16,0,1,64,0,3,40,0,0 ,32,32,8,252,0,0,5,0,0,32,1,32,0,1,8,0,3,2,128,8,0,4,24,0,0,3,64,0,0, 4,0,1,16,0,16,1,0,1,32,64,0,0,147,0,0,8,0,0,2,0,1,9,144,0,0,18,64,208 ,66,0,2,40,40,128,4,48,224,253,128,5,16,8,0,0,192,18,56,0,0,128,0,1, 65,128,0,1,132,12,0,1,8,0,0,128,2,16,0,1,64,16,0,15,32,0,0,16,90,0,0, 64,36,0,0,2,99,0,5,32,162,0,0,4,68,2,0,0,64,8,8,0,0,65,0,1,152,253, 136,0,0,16,16,0,0,64,0,0,8,0,1,2,0,1,128,0,5,4,0,1,1,64,0,2,5,0,17,4, 8,0,0,32,128,0,1,2,0,6,4,0,8,128,0,1,184,253,0,0,1,0,2,32,128,16,0,7, 32,4,0,34,16,130,0,7,4,0,1,2,0,0,8,64,1,32,0,2,104,249,0,12,4,0,4,64, 0,5,4,0,41,32,0,2,2,0,0,184,253,0,3,4,8,32,1,0,0,8,0,0,64,0,0,1,0,0, 32,64,0,0,128,0,4,1,0,0,16,0,18,64,0,2,128,16,0,1,128,64,8,32,0,2,16, 0,0,1,2,0,1,128,192,0,2,2,0,0,4,152,255,0,16,132,0,2,128,0,1,1,0,21, 64,0,16,16,0,8,192,251,32,0,8,32,0,5,16,0,2,64,0,27,1,0,21,1,0,0,200, 253,0,3,20,20,128,0,7,128,32,0,1,2,0,4,1,8,1,0,17,33,1,0,2,2,16,0,1, 64,33,0,0,64,128,128,0,4,128,0,2,8,8,64,0,1,168,249,0,4,1,0,4,128,16, 8,0,12,2,1,0,22,32,16,0,0,128,0,11,2,16,0,1,64,0,1,224,255,0,0,32,2,0 ,1,2,0,4,40,0,0,16,0,1,20,8,128,16,0,6,128,0,22,64,0,0,10,0,5,2,4,0,4 ,2,0,5,20,40,255,8,0,2,2,0,9,16,0,1,16,0,5,1,128,0,0,2,16,0,15,128,8, 0,0,1,64,0,0,1,0,1,32,0,1,128,128,0,3,64,0,3,32,0,1,128,0,0,128,88, 253,0,1,8,0,7,64,0,5,1,0,30,16,0,23,8,251,0,9,128,0,2,128,0,4,64,8,0, 24,128,0,26,152,251,0,64,8,0,1,32,0,5,24,253,0,2,16,0,22,32,0,24,2,0, 4,32,0,14,136,253,0,4,8,0,4,128,0,3,64,0,2,1,0,4,80,0,21,16,0,1,1,32, 0,5,16,0,1,4,0,1,32,0,6,64,160,252,0,1,32,0,2,1,0,6,1,0,34,32,0,3,16, 0,9,64,0,2,1,32,0,0,8,0,0,64,252,0,0,128,0,4,64,8,0,18,128,16,0,27,4, 0,8,1,0,5,72,254,0,2,64,0,2,64,0,3,8,0,3,8,0,1,32,0,6,128,0,17,64,0, 11,128,0,13,152,253,0,0,64,0,8,16,0,46,64,0,1,1,0,5,16,0,4,216,254,0, 67,4,0,1,16,0,0,2,0,0,216,252,0,2,128,0,2,1,0,6,4,0,1,16,0,7,32,0,19, 128,8,32,16,0,2,8,128,0,7,2,0,8,80,248,4,0,15,4,0,26,64,2,0,0,4,0,1,1 ,0,5,64,0,2,128,0,4,16,0,0,16,0,1,64,0,0,16,252,0,0,1,4,0,7,1,0,0,32, 0,12,2,0,16,64,0,16,1,0,2,8,0,6,16,255,0,2,32,0,0,32,0,0,2,128,0,0,64 ,0,8,16,0,0,8,0,21,32,0,1,144,2,2,0,2,8,0,2,32,0,0,16,0,1,128,0,3,8,0 ,5,80,250,128,0,2,2,0,4,32,0,14,128,0,0,2,0,22,40,0,1,32,0,2,34,0,4, 32,0,1,4,128,0,0,16,2,16,0,0,232,255,16,0,16,32,0,40,8,0,4,32,0,1,1,0 ,4,144,254,0,4,2,0,1,4,0,0,32,32,0,0,8,0,1,8,0,0,129,0,3,9,0,0,4,2,0, 0,16,0,17,16,0,3,16,0,0,2,0,0,8,0,5,1,64,0,0,16,128,0,2,128,0,1,128, 84,248,16,1,8,32,0,0,64,0,15,128,0,24,128,0,0,2,32,0,0,16,0,3,4,0,0,8 ,0,3,4,0,1,8,8,0,0,8,0,0,1,0,0,224,254,32,0,0,4,32,160,18,0,1,8,0,0, 16,42,0,0,4,0,1,16,160,162,2,0,2,19,0,0,2,4,0,0,8,0,16,5,8,128,0,0, 132,129,4,144,0,0,32,32,0,0,8,0,0,4,0,0,160,2,64,82,8,0,0,9,64,0,0,72 ,0,0,1,0,0,168,250,128,64,120,14,162,4,0,1,2,64,0,0,10,8,0,1,16,37,0, 0,20,2,0,0,4,240,32,0,0,68,2,33,144,0,16,209,130,128,2,26,72,17,4,0,0 ,16,0,1,2,0,0,1,88,130,0,3,17,0,0,64,12,9,4,81,0,0,224,254,128,0,0,33 ,8,1,0,9,32,0,4,16,128,32,0,0,4,2,0,0,16,0,17,1,0,0,2,0,2,16,0,3,2,0, 1,136,0,4,1,0,1,2,0,1,16,0,0,136,248,0,1,4,32,128,0,2,16,64,0,0,8,2,0 ,2,16,0,5,1,0,1,32,128,0,16,32,0,5,2,0,9,4,0,5,1,4,0,2,176,248,16,0,2 ,128,0,0,16,0,18,33,0,24,2,0,2,8,0,13,4,129,0,1,148,250,0,4,64,0,47,1 ,0,6,16,0,2,128,0,7,8,251,16,0,3,128,0,3,8,0,15,4,0,34,2,0,1,64,0,0, 66,0,0,17,32,0,0,1,0,0,220,250,0,5,18,0,15,128,0,34,3,32,0,3,16,0,2, 128,0,4,176,252,0,11,2,0,4,64,0,25,128,0,2,2,0,3,64,0,2,128,0,7,64, 128,0,0,2,0,3,248,249,0,60,128,0,12,144,255,0,4,64,0,18,4,0,19,64,0, 13,64,0,8,2,0,2,184,255,0,3,8,0,0,64,0,7,4,0,2,97,6,128,0,2,16,36,0, 22,16,0,0,2,0,17,64,0,0,4,0,0,192,252,0,9,2,0,11,8,0,4,4,0,28,4,0,0, 160,0,3,16,4,0,0,1,0,4,48,250,0,0,4,0,4,16,0,1,8,0,10,2,0,2,64,0,0,32 ,0,16,4,0,8,128,0,2,66,0,5,4,0,1,8,0,0,1,0,0,64,80,249,0,3,9,0,6,9,2, 0,0,32,0,2,1,48,0,3,24,0,19,4,0,2,64,0,3,128,0,1,2,0,7,128,16,0,0,32, 64,0,0,64,0,0,208,255,0,3,16,0,3,4,0,0,1,32,0,1,128,0,10,65,0,20,128, 0,2,4,0,4,4,0,0,64,8,0,3,72,0,6,40,251,32,72,164,16,0,2,26,0,4,32,8,0 ,2,80,0,5,1,0,1,4,0,15,160,8,4,0,1,192,128,0,13,8,0,3,32,1,36,0,0,152 ,252,0,4,2,0,0,24,0,5,128,0,2,128,0,5,12,0,19,64,0,2,192,0,19,128,64, 16,8,48,251,0,0,64,0,0,128,7,1,0,0,24,0,9,176,128,0,5,2,0,17,224,0,0, 48,16,0,0,240,0,13,30,16,0,3,224,0,0,28,0,0,208,251,0,0,8,0,0,144,70, 0,1,24,0,5,64,0,2,80,8,0,8,8,0,14,32,0,0,49,1,0,0,208,0,13,26,1,0,3, 32,1,36,0,0,40,250,0,0,80,128,8,16,0,2,9,0,4,16,2,0,1,96,36,0,4,64,2, 0,1,1,0,15,128,128,0,2,40,0,12,64,0,5,1,32,0,0,64,253,96,0,0,28,128,7 ,2,0,0,6,0,4,224,0,3,144,0,5,3,0,1,12,8,0,14,64,1,60,16,0,0,48,0,13, 30,16,0,3,128,0,0,20,0,0,144,251,0,0,64,0,0,16,0,8,128,64,0,2,160,0,6 ,2,0,17,160,1,0,23,128,0,0,16,0,0,120,255,0,0,5,16,1,6,1,0,6,128,5,0, 2,64,36,0,4,44,0,1,176,8,0,14,128,69,48,4,0,15,24,5,0,4,1,32,0,0,208, 254,32,0,0,128,64,0,3,64,1,104,4,1,160,1,0,2,16,0,0,2,17,0,2,65,0,1, 20,0,7,48,0,6,24,0,3,192,2,0,2,8,0,0,64,160,1,0,0,144,70,82,64,0,0,72 ,66,104,0,0,13,32,1,4,0,0,168,248,0,4,2,0,2,2,96,32,0,2,1,0,9,2,128, 32,0,7,12,0,6,6,0,3,192,128,0,5,2,0,2,6,128,0,3,96,0,0,12,128,0,2,104 ,252,0,0,64,12,128,7,1,0,1,192,2,32,0,1,128,1,0,2,176,128,6,16,0,3, 226,65,44,0,7,12,0,6,6,0,3,240,0,3,96,0,0,3,0,1,60,0,1,113,0,0,30,0,0 ,2,96,0,0,15,96,1,44,0,0,120,255,8,8,4,128,22,0,2,64,1,96,10,0,0,128, 41,0,2,80,8,26,1,0,3,160,17,20,0,7,10,0,6,5,0,3,208,0,4,34,1,0,0,128, 180,8,2,144,0,0,154,4,16,98,0,0,13,160,0,0,20,0,0,43,249,0,0,68,48,18 ,16,0,2,128,65,96,17,64,8,4,0,2,96,36,136,0,3,32,2,4,152,0,7,10,0,6,5 ,0,4,40,0,2,96,64,12,0,0,48,128,0,0,22,68,0,0,64,0,0,16,0,0,64,12,192 ,0,0,24,0,0,161,250,96,0,0,60,128,7,2,0,1,64,2,120,0,0,3,96,65,0,2, 144,0,0,22,4,0,2,3,224,129,32,16,0,19,48,0,3,24,0,0,15,228,1,60,160,7 ,176,0,0,30,208,0,0,26,0,0,14,0,0,1,36,0,0,168,249,4,64,48,0,5,2,96, 16,12,136,129,0,2,160,0,0,24,0,4,2,0,0,32,0,25,96,64,12,128,1,0,0,8,4 ,64,0,1,4,3,0,1,12,128,0,0,32,0,0,97,248,128,1,48,0,0,22,1,0,2,129,96 ,0,0,44,0,0,9,0,2,64,32,16,4,0,2,136,128,69,16,8,0,24,96,0,0,12,128, 137,176,0,0,135,128,0,0,24,1,163,0,1,12,0,0,1,16,0,0,120,253,160,1,0, 5,64,0,0,8,0,1,160,0,0,4,0,1,144,36,154,80,3,0,1,1,0,1,4,0,7,8,0,6, 164,1,176,128,6,16,0,0,26,0,0,32,8,0,0,128,33,0,1,144,22,16,0,1,72,0, 0,8,18,1,32,0,0,4,0,0,112,249,128,1,0,2,2,0,7,1,0,2,64,0,0,24,0,0,3,1 ,0,2,128,0,8,32,0,6,18,0,1,32,6,0,1,24,0,1,2,0,5,6,4,0,3,66,0,5,208, 249,0,2,128,7,1,0,1,192,2,0,2,96,1,0,2,176,0,0,16,0,0,130,0,2,226,65, 44,0,7,2,0,6,128,1,60,16,6,48,0,0,24,196,0,0,96,0,0,3,0,1,60,8,0,0,1, 0,0,30,0,0,131,24,64,3,0,1,44,0,0,8,252,4,0,1,128,38,0,2,64,1,0,2,160 ,16,1,0,1,80,0,0,24,9,3,0,2,160,1,20,0,7,8,0,6,4,72,4,0,0,6,16,0,1,65 ,0,1,34,1,128,137,52,1,34,0,0,72,26,4,3,72,2,1,0,0,64,20,0,0,202,248, 140,1,2,0,0,16,0,2,128,65,0,0,17,0,0,192,4,129,16,0,0,160,132,24,16, 11,0,1,64,2,4,152,0,16,48,0,1,192,192,36,24,1,3,96,34,12,0,0,16,129,0 ,0,6,0,0,4,65,0,0,33,32,1,140,0,1,24,0,0,200,248,224,1,0,0,128,7,2,0, 1,64,2,24,0,1,32,1,12,0,1,144,0,0,30,192,3,1,0,0,3,224,129,32,16,0,14 ,96,0,0,60,128,1,240,0,0,30,208,3,25,0,0,15,228,1,60,160,7,50,0,0,30, 208,0,0,18,16,15,98,0,0,37,0,0,40,254,136,1,1,0,5,2,96,16,0,0,64,1,48 ,32,0,0,128,0,0,24,0,0,3,0,2,2,0,0,32,0,7,4,0,6,2,0,0,1,0,0,6,194,0,2 ,3,96,0,0,12,128,1,0,0,8,4,0,2,4,1,104,32,12,0,1,32,0,0,9,252,128,9,0 ,1,166,0,3,137,96,0,1,128,68,176,0,1,128,0,0,24,16,3,4,0,0,44,128,81, 144,8,0,14,128,5,48,0,0,38,208,0,1,81,3,96,66,12,128,1,49,2,23,194,68 ,88,0,0,128,96,2,13,128,73,16,0,0,24,254,160,65,0,2,80,0,0,154,72,0,0 ,104,17,0,0,32,0,1,128,6,16,0,0,26,64,147,0,1,5,0,1,4,0,7,4,0,6,34,4, 177,128,6,0,1,18,73,8,8,0,0,1,32,0,1,132,16,82,8,0,0,66,0,0,8,0,0,1, 32,0,0,4,0,0,8,254,128,1,0,2,130,0,0,24,0,1,96,0,5,6,0,1,24,0,0,3,0,1 ,8,0,0,128,0,8,8,0,6,4,0,1,32,0,5,1,0,5,2,128,128,0,9,224,254,128,65, 0,0,128,7,176,32,8,192,2,96,16,0,0,96,1,0,1,6,0,2,192,1,0,1,11,96,0,0 ,44,0,7,2,0,6,1,64,60,128,7,0,1,16,0,6,12,0,1,112,0,0,6,0,0,3,0,1,12, 128,1,44,0,0,32,253,136,5,0,0,128,6,82,0,0,24,73,1,96,0,1,160,16,1,0, 0,6,0,0,36,0,0,64,18,2,0,0,133,48,0,0,20,0,7,4,0,6,2,8,4,194,70,1,0,0 ,136,2,8,98,34,32,4,0,0,4,0,0,70,146,0,0,2,0,0,16,1,34,0,0,4,8,21,0,0 ,177,255,0,0,1,2,0,0,16,96,0,0,24,128,65,96,66,0,0,192,4,1,0,1,4,8,0, 0,16,19,0,1,38,0,0,4,152,0,7,8,0,6,4,80,0,1,64,1,0,0,72,0,0,16,2,34, 12,0,1,48,9,68,72,0,0,152,4,99,0,1,140,1,4,26,0,0,19,249,96,0,1,128,7 ,146,0,0,30,80,2,88,0,1,32,1,0,0,128,1,48,32,6,192,131,0,1,8,100,128, 32,16,0,6,32,0,6,112,0,0,60,0,0,7,0,1,30,196,0,0,120,0,0,3,104,0,0,60 ,128,3,176,0,0,30,192,0,0,24,64,15,96,0,0,36,0,0,16,254,4,64,0,2,160, 0,0,24,16,2,96,0,1,64,1,0,5,4,3,0,1,10,128,65,32,0,0,2,0,6,1,0,6,64,0 ,4,24,0,1,96,0,3,48,0,0,6,64,0,0,24,0,0,3,96,0,3,32,0,0,178,254,0,0,1 ,0,1,38,65,0,0,24,0,0,161,96,33,0,0,128,80,0,2,192,34,64,0,0,138,0,1, 132,130,9,16,10,8,0,6,4,0,5,128,4,48,0,0,6,8,0,0,24,2,34,100,66,0,0,4 ,0,0,48,0,0,38,132,0,0,24,0,0,11,2,32,76,4,136,16,0,0,168,248,160,0,2 ,32,152,0,1,64,0,0,104,0,0,1,32,5,133,128,0,0,16,0,0,2,64,0,0,41,64,1 ,0,0,8,6,128,0,6,82,0,6,41,0,0,176,128,32,192,8,154,80,0,2,1,0,2,132, 22,82,128,0,0,66,3,8,0,0,1,0,1,4,0,0,148,254,0,0,1,0,2,64,0,3,96,0,1, 128,0,1,16,0,5,64,0,5,2,0,5,36,1,0,5,10,0,1,32,0,0,193,128,16,0,8,6, 128,0,10,16,250,96,1,0,0,128,1,176,32,0,0,192,2,96,0,0,3,96,1,12,0,1, 193,0,1,200,0,0,32,0,0,11,96,0,0,44,0,15,224,1,60,32,6,240,0,0,24,0,0 ,128,0,1,12,0,1,12,0,0,4,112,0,0,6,0,2,16,0,2,44,0,0,80,249,168,40,0, 0,128,0,0,80,0,1,64,1,96,0,0,1,160,0,0,132,32,0,0,192,0,0,88,64,0,0, 68,0,0,133,48,0,0,20,0,7,16,0,6,168,1,4,1,36,212,0,0,24,32,11,0,1,128 ,16,0,0,4,0,0,66,146,0,0,2,0,0,8,1,1,64,8,0,0,20,0,0,67,254,192,8,0,1 ,70,96,0,1,128,65,96,65,12,64,9,0,0,16,16,1,0,0,64,4,16,34,0,0,38,128 ,49,152,0,0,1,0,5,130,0,6,129,137,0,1,64,2,40,152,0,0,64,0,1,12,1,0,0 ,176,8,70,68,0,0,88,4,8,1,16,0,0,8,0,0,24,0,0,9,252,0,0,129,0,0,128,7 ,146,0,1,64,2,120,0,0,15,36,1,13,128,1,48,128,6,192,0,0,88,0,0,8,228, 1,32,16,0,14,192,1,60,128,1,48,0,0,30,200,3,0,1,3,0,1,60,128,1,176,0, 0,30,192,3,24,0,0,3,0,1,36,0,0,4,249,68,65,0,1,6,96,0,2,130,0,0,32,12 ,0,0,1,0,1,6,1,128,24,0,0,128,32,0,0,10,130,1,32,8,1,0,5,128,0,6,128, 65,0,4,24,8,3,2,0,0,12,8,0,0,48,0,0,4,64,0,0,24,0,0,3,0,0,16,0,0,8,0, 0,32,0,0,112,249,128,16,0,1,6,128,0,2,33,0,1,12,0,0,1,32,66,32,0,1,88 ,4,2,64,0,0,132,128,1,16,2,2,0,6,1,0,5,128,17,48,0,0,16,1,0,0,88,0,0, 35,0,1,140,0,1,48,0,0,33,136,0,0,24,0,0,19,97,0,0,12,0,1,16,0,0,248, 250,32,0,0,52,4,32,8,0,0,26,64,66,40,0,0,33,164,1,4,0,0,34,16,36,90, 72,0,0,104,0,0,1,0,1,164,128,0,6,64,0,7,4,2,132,0,0,192,24,26,0,0,19, 8,0,1,32,4,0,0,132,198,208,0,1,66,3,40,0,0,1,160,1,4,0,0,180,253,0,1, 48,0,5,1,64,0,1,128,1,1,0,0,4,1,0,0,24,0,1,96,0,2,128,16,16,1,0,5,128 ,0,11,192,0,0,24,0,0,131,0,3,128,0,1,6,192,0,2,3,64,0,5,16,254,96,1, 16,128,1,0,1,24,192,2,88,16,3,0,1,12,128,5,48,0,0,14,0,0,128,0,1,11, 224,1,44,0,0,2,0,6,1,0,5,96,0,0,12,0,1,240,0,0,24,196,3,0,2,96,0,0,12 ,0,0,4,192,0,0,6,0,0,3,88,0,3,44,0,0,72,249,164,40,48,146,0,2,64,72,1 ,40,4,33,136,41,4,128,34,18,136,18,17,35,0,1,133,176,33,20,0,0,8,0,6, 4,0,5,32,0,0,4,0,0,32,212,0,1,65,3,96,34,0,0,32,4,5,0,0,18,194,0,0,2, 0,0,3,40,0,2,8,21,0,0,219,249,204,8,32,1,38,1,0,0,88,136,2,48,0,1,132 ,72,48,34,3,0,0,4,88,4,16,0,0,1,38,0,0,4,40,0,15,128,81,176,32,32,4, 40,88,0,0,136,0,0,64,0,1,8,177,0,0,38,0,0,40,152,8,16,49,4,128,0,0,4, 26,0,0,209,251,0,0,129,60,160,7,0,1,30,64,2,72,0,0,3,224,1,60,0,0,4, 48,32,30,192,128,24,32,8,228,129,32,0,15,224,1,60,128,7,48,0,0,30,200 ,0,0,120,0,1,96,0,0,60,144,1,52,0,0,30,192,0,0,64,16,3,100,0,0,36,0,0 ,66,248,72,65,32,0,0,6,0,2,16,2,80,0,1,128,128,48,0,0,5,0,1,24,0,0,3, 0,0,32,10,2,0,0,32,128,4,0,5,64,2,0,5,128,1,48,0,0,6,0,4,96,64,0,2,48 ,0,0,4,4,0,0,24,0,0,3,64,16,12,0,1,32,0,0,104,248,128,4,160,32,6,0,1, 152,0,0,2,32,0,0,8,8,0,0,48,0,0,2,128,72,80,4,139,0,0,1,36,128,65,32, 0,0,9,0,5,128,4,0,5,128,1,52,0,0,70,1,0,0,128,16,0,0,96,0,2,1,49,0,0, 32,0,1,24,0,0,35,33,1,44,4,136,16,0,0,252,249,32,0,0,148,16,32,216,0, 0,2,64,32,72,0,0,13,32,0,0,52,0,0,32,16,0,0,26,64,32,106,0,0,41,0,0,8 ,54,0,16,4,6,161,6,208,0,0,18,73,8,8,0,0,1,160,9,0,0,144,6,208,24,0,0 ,72,35,10,0,0,1,0,1,4,0,0,4,251,0,4,192,0,2,129,32,0,0,12,0,1,48,16,0 ,0,1,0,0,24,0,0,1,96,0,0,4,4,0,0,48,0,0,4,0,6,2,0,7,48,0,0,6,192,64,0 ,2,1,0,1,128,129,0,1,6,192,0,2,3,0,6,176,250,96,1,48,128,1,192,0,2, 128,88,16,0,2,32,144,5,0,4,96,0,0,11,96,0,0,48,128,0,6,64,0,6,96,0,0, 32,0,0,6,192,128,16,196,0,0,96,0,0,12,128,0,0,60,0,0,6,192,0,0,30,0,0 ,1,90,0,3,44,0,0,16,249,164,40,16,132,0,0,192,0,2,32,40,4,0,1,68,16, 128,34,2,0,2,32,100,0,0,133,48,0,0,48,0,7,20,0,6,34,0,0,16,10,70,193, 2,136,64,8,2,34,128,144,9,53,8,22,200,32,90,4,19,40,0,0,32,4,0,0,20,0 ,0,99,249,204,8,0,1,6,193,2,64,0,0,16,48,0,0,44,0,0,8,48,4,3,0,0,4,88 ,4,32,1,1,10,128,73,0,0,4,0,14,144,65,176,64,32,194,4,72,4,16,98,36, 140,136,5,129,0,0,70,128,8,64,0,0,19,50,4,0,0,2,0,0,24,0,0,1,255,0,0, 129,12,144,7,240,64,6,208,128,72,0,0,15,100,64,12,0,0,4,48,32,30,192, 0,0,24,32,8,224,1,12,0,15,224,1,60,128,1,176,128,30,192,0,0,24,0,0,3, 224,1,60,160,1,114,64,30,208,1,64,16,15,0,1,36,0,0,96,255,72,65,32,16 ,6,0,0,64,24,0,1,48,0,0,12,0,0,64,32,0,0,5,192,32,24,0,1,98,32,10,128 ,1,48,0,15,128,1,48,16,6,132,0,0,24,8,0,0,96,0,0,12,128,1,0,2,196,0,1 ,8,3,64,16,0,2,32,0,0,201,254,128,0,0,24,2,6,0,1,24,144,136,64,0,0,76 ,144,17,8,4,2,192,8,24,132,16,96,1,8,128,1,48,16,0,14,128,1,184,0,1, 32,4,153,0,0,34,100,36,12,136,41,176,16,64,32,66,24,129,16,36,0,1,4,0 ,0,16,0,0,144,255,32,9,36,65,32,88,16,0,0,64,144,8,0,0,13,160,8,5,33, 36,144,136,26,64,16,12,36,1,0,0,8,6,0,16,4,182,128,0,0,80,16,2,97,0,0 ,8,0,0,32,160,1,0,0,144,6,208,2,0,0,66,35,74,64,13,32,0,0,36,0,0,88, 255,128,128,16,0,1,128,0,2,1,0,1,12,0,1,48,0,0,2,193,0,0,24,0,0,1,0,5 ,8,0,16,48,8,0,0,128,0,6,136,1,0,1,6,192,64,0,1,3,32,0,3,16,0,0,224, 253,96,1,48,160,1,64,0,3,96,0,0,12,128,0,0,1,128,5,192,0,0,24,0,1,26, 0,0,3,96,0,9,16,0,6,104,0,0,48,8,0,0,194,64,8,208,0,2,3,0,1,60,0,0,6, 194,0,0,6,0,0,3,90,0,0,15,128,1,44,0,0,248,254,164,40,48,130,0,0,128, 0,2,136,96,0,0,12,0,0,9,16,193,34,194,40,24,0,0,16,104,34,1,32,0,0, 128,16,4,0,5,16,2,0,5,40,0,0,48,2,32,0,0,8,16,65,0,0,96,34,1,0,1,52,0 ,0,38,64,64,2,0,0,18,40,0,0,33,2,64,20,0,0,50,250,76,1,48,2,22,65,0,2 ,136,0,0,17,64,128,1,48,2,3,192,0,1,16,16,32,17,140,144,81,128,8,2,0, 5,16,1,0,5,136,5,177,64,38,196,4,0,0,17,11,0,0,36,12,0,0,136,176,0,0, 70,64,36,152,0,0,34,48,0,0,12,130,133,24,0,0,112,248,0,0,1,12,144,7, 176,0,1,192,0,0,24,0,0,3,228,65,60,32,4,240,128,6,192,0,0,90,0,0,15, 224,1,12,0,0,7,0,5,144,3,0,5,232,1,12,128,7,240,128,30,192,131,120,0, 0,15,100,0,0,60,160,1,242,0,0,30,196,3,33,0,0,15,224,1,36,0,0,8,254, 72,1,48,32,6,64,0,4,16,12,132,1,32,0,0,3,192,0,0,24,4,0,0,97,16,12, 128,1,0,0,136,5,0,5,208,2,0,5,136,1,32,16,0,0,192,0,0,8,0,0,3,96,0,0, 12,0,1,49,0,1,2,0,0,24,0,1,32,0,1,2,0,0,16,0,0,161,254,0,0,1,176,0,0, 6,128,0,2,160,0,1,140,128,133,16,33,4,192,20,88,0,1,64,2,13,128,1,32, 2,4,0,5,8,2,0,5,132,1,144,0,0,134,192,64,152,32,3,96,36,12,0,0,8,48, 10,64,192,40,24,0,0,3,36,0,0,45,128,137,32,0,0,144,254,0,29,4,0,6,2,0 ,6,8,1,0,4,128,0,14,66,2,0,3,136,251,32,0,0,4,128,0,0,16,0,0,2,64,0,0 ,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,1,32,0,0,4,0,7,16,0,6, 40,0,1,128,0,2,2,0,1,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,1, 32,0,0,4,0,0,192,251,0,74,152,255,36,0,0,4,128,0,0,16,0,0,2,64,0,0,8, 0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,129,40,0,0,4,0,17,4,193, 0,0,16,66,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,2,1,32,0,0, 4,0,0,209,249,12,4,0,15,8,0,6,4,0,1,10,0,15,4,0,2,33,0,5,2,0,10,1,0,0 ,66,0,2,11,253,0,0,64,0,4,2,0,37,64,0,4,2,0,1,8,0,4,128,0,3,64,0,1,32 ,0,2,1,0,0,120,254,8,128,0,2,2,32,0,2,1,32,0,1,128,0,2,2,0,3,1,16,0,1 ,128,0,0,16,0,44,146,253,0,0,4,4,193,16,16,4,2,64,8,8,1,129,40,4,4, 162,16,16,66,66,72,8,8,4,0,0,36,4,128,0,16,40,4,34,160,16,0,0,2,64,32 ,10,0,0,1,32,16,5,193,0,0,16,132,130,96,0,1,10,129,8,0,0,132,16,152, 249,0,74,152,255,0,19,64,0,53,152,251,0,1,1,0,3,16,0,3,8,0,2,4,0,0,4, 0,2,8,32,0,26,2,0,2,64,0,2,32,0,2,129,0,10,168,249,0,7,4,0,5,1,0,5,8, 4,0,26,32,0,0,2,0,1,33,0,0,2,0,2,4,0,0,1,1,64,0,8,255,0,11,4,4,0,17,1 ,0,2,1,0,1,128,0,2,128,0,13,4,129,0,2,4,0,2,2,0,6,136,252,0,7,8,0,5, 32,64,0,1,64,0,5,8,0,26,2,4,0,2,1,0,1,2,0,3,128,0,6,228,253,64,64,0,0 ,136,0,0,68,0,0,2,16,0,0,32,0,1,8,0,0,17,0,8,1,0,0,32,16,0,16,64,0,4, 2,0,8,4,0,0,32,8,64,0,2,4,128,64,16,8,112,254,32,0,1,32,0,3,4,0,3,2,0 ,6,16,0,1,64,4,0,0,128,0,22,32,0,2,32,0,3,16,0,1,64,0,10,88,251,96, 128,0,0,48,1,34,0,0,132,26,0,0,80,1,40,12,128,8,0,1,128,22,0,0,16,80, 0,0,64,67,1,128,169,0,16,168,0,0,5,0,0,128,130,4,0,1,8,0,0,40,0,1,164 ,0,0,1,16,64,4,128,0,1,12,2,64,168,168,21,192,254,128,64,0,0,32,132, 144,2,24,4,0,1,20,96,128,32,0,0,8,128,0,0,128,10,4,145,0,2,2,32,20,40 ,0,15,1,0,0,8,0,1,48,8,0,0,128,40,8,4,1,0,0,129,42,2,65,4,72,0,2,16, 172,9,65,37,168,128,249,128,64,0,4,8,16,0,1,16,0,0,128,0,1,32,0,2,2, 16,1,2,0,1,2,0,0,16,8,0,17,32,0,1,128,8,0,1,65,0,0,4,0,2,32,1,20,0,0, 2,0,2,64,1,0,0,64,0,0,8,176,255,0,3,1,66,0,0,16,0,6,1,0,1,4,0,8,1,0, 15,32,0,4,32,0,3,16,0,0,2,0,10,4,130,0,0,16,128,200,249,0,33,8,0,6,4, 0,1,32,0,1,128,0,25,240,251,0,14,128,0,14,8,0,1,32,0,3,4,0,1,8,0,19,2 ,0,10,216,251,0,3,8,0,14,64,4,0,24,128,0,1,16,0,5,17,0,0,2,0,3,1,0,2, 128,0,0,16,0,3,96,255,0,4,56,0,3,16,0,0,8,0,1,64,0,1,16,0,3,1,0,3,2,0 ,20,2,0,0,64,0,0,4,0,1,16,32,0,15,80,253,0,63,2,0,9,152,253,0,6,4,0, 36,128,0,2,1,0,1,2,0,4,128,0,15,16,248,0,2,64,0,9,64,0,31,2,0,4,8,0, 20,120,251,0,30,64,0,2,64,0,2,32,0,2,32,0,30,216,253,0,1,40,4,0,9,1,0 ,8,1,0,26,16,0,8,12,0,0,64,0,7,2,0,0,200,255,0,1,68,0,3,8,0,1,64,0,0, 4,32,129,0,1,8,0,0,16,0,2,16,0,24,16,16,0,0,4,0,9,4,0,10,40,249,0,1, 16,0,9,2,0,1,8,0,8,2,0,3,16,0,2,16,0,2,8,0,2,8,0,1,128,0,0,8,0,4,128, 0,3,64,0,6,4,0,2,2,0,3,252,0,13,32,4,0,29,32,0,1,128,128,0,1,64,0,0, 48,0,0,1,0,3,128,0,4,2,0,3,32,0,0,208,255,0,2,32,0,43,32,0,11,32,0,3, 80,0,7,232,253,0,3,4,0,1,16,0,18,1,32,0,15,32,0,1,192,2,0,6,8,0,4,128 ,0,2,2,8,0,0,8,0,3,216,249,0,1,4,0,16,8,0,30,2,0,21,88,253,0,2,8,0,16 ,2,6,192,0,23,4,0,3,8,0,13,128,0,5,112,251,0,14,4,0,30,4,0,13,1,0,11, 136,251,0,2,64,0,42,8,0,26,88,255,0,7,8,0,1,8,0,0,8,0,1,32,0,12,16,0, 1,64,0,3,8,0,1,32,0,8,1,0,10,32,0,2,8,0,1,32,0,3,120,252,0,4,128,0,40 ,32,0,10,128,0,6,1,0,6,220,248,0,0,1,0,0,8,0,11,16,0,4,128,0,2,32,0, 24,4,0,9,16,0,10,186,251,0,7,64,0,3,64,0,1,16,0,3,128,0,29,16,0,4,4,0 ,4,64,8,0,2,32,0,1,128,0,1,56,255,0,1,64,0,6,128,0,0,2,0,1,8,0,11,64, 0,1,128,0,2,128,0,2,64,0,2,64,0,2,8,0,4,16,0,7,128,8,0,10,120,248,0, 11,16,0,15,128,0,2,2,0,2,64,0,2,1,0,11,64,0,2,1,32,0,14,48,250,0,4, 129,0,0,8,0,4,128,0,1,128,0,0,66,0,0,8,0,1,2,16,0,0,34,0,1,8,0,14,128 ,0,0,4,0,0,2,18,0,4,8,0,2,16,8,0,0,4,16,0,2,8,0,0,4,8,0,0,4,0,0,80, 249,0,1,16,0,1,4,128,0,14,1,0,3,128,0,5,4,16,0,5,1,64,8,0,0,64,0,0,8, 0,6,16,4,0,12,130,0,0,16,8,26,253,0,1,164,0,0,160,38,128,4,0,0,6,192, 10,40,64,64,16,0,0,1,98,0,0,4,64,80,1,42,0,0,68,0,0,97,21,0,3,4,64,0, 5,2,32,16,64,40,9,32,1,34,0,0,80,0,0,80,0,0,96,1,0,0,5,8,16,0,0,2,64, 208,2,0,0,16,0,0,66,45,5,12,32,160,248,0,1,32,132,42,1,40,64,4,34,34, 170,10,136,9,0,0,208,8,64,33,0,1,93,32,0,0,205,2,65,16,40,0,2,8,4,64, 32,0,3,4,2,32,0,1,116,0,0,1,0,0,65,49,100,5,160,48,66,129,129,0,1,1, 194,68,17,136,0,1,2,0,0,5,0,0,4,165,36,32,255,0,3,130,0,0,32,0,0,4,0, 0,32,0,1,64,0,3,64,32,0,1,1,32,0,0,8,2,64,16,8,0,2,16,2,128,16,0,3,8, 2,8,0,1,64,0,2,65,64,0,0,4,128,16,0,1,128,0,2,1,64,0,0,8,0,3,4,0,3,48 ,254,0,1,4,32,0,3,64,0,1,16,2,128,0,7,128,0,1,1,32,0,18,128,0,3,32,0, 5,2,0,3,1,128,0,7,16,8,120,249,16,0,46,64,0,6,1,0,9,1,2,0,1,128,0,2, 52,250,34,0,23,8,0,17,128,0,11,32,0,0,4,0,6,64,0,5,128,48,249,2,4,0,4 ,72,0,4,1,36,16,0,0,16,128,0,0,16,128,0,23,32,0,0,4,1,0,0,64,8,0,1,1, 0,5,2,0,10,128,32,248,0,2,132,0,10,8,0,9,16,0,22,64,0,10,8,1,0,3,64,8 ,0,4,200,251,2,0,11,64,0,47,16,0,10,128,52,252,0,30,32,64,0,1,32,64,0 ,1,16,32,0,1,16,32,0,22,1,0,1,4,0,2,136,250,0,30,4,0,1,16,0,3,2,0,1,8 ,0,15,4,0,8,1,0,4,240,249,0,1,8,0,9,2,0,1,12,0,13,4,0,1,16,0,3,2,0,0, 32,0,5,8,0,4,128,0,3,64,0,6,8,0,1,32,0,3,128,250,128,0,2,2,0,3,1,32,0 ,1,128,0,2,2,0,0,32,0,0,8,1,0,1,18,128,0,0,16,0,15,64,0,4,32,0,8,128, 0,4,128,16,0,5,192,254,0,1,16,0,0,8,0,1,64,0,1,8,8,0,0,1,0,3,128,2,16 ,0,0,64,2,0,2,2,4,0,17,4,0,2,1,0,0,16,0,0,128,0,1,16,2,36,8,17,0,1,2, 6,4,0,1,16,0,0,2,0,1,120,255,0,46,16,0,2,144,0,0,4,0,3,32,0,0,8,0,3,4 ,0,1,1,0,0,1,0,3,48,253,0,33,2,0,14,4,0,23,216,253,0,1,53,128,6,0,3,8 ,8,0,1,8,0,0,4,8,0,2,64,32,0,0,8,1,1,129,49,52,0,20,208,40,130,64,0,0 ,8,0,5,128,0,2,1,0,0,8,0,2,16,0,1,152,254,0,1,48,0,0,6,0,3,128,0,12, 64,16,0,2,48,0,20,192,0,0,8,4,0,11,16,0,5,1,16,104,249,224,1,12,0,0,6 ,2,0,1,192,0,2,15,0,1,16,8,0,2,6,0,1,24,32,0,0,228,129,0,0,16,0,19, 192,0,1,4,0,1,16,0,3,128,7,0,1,6,0,2,16,0,0,96,0,0,60,8,144,248,160, 69,4,0,0,6,0,2,64,0,1,36,13,2,0,5,2,0,1,72,0,1,32,8,176,0,20,192,40,0 ,1,80,0,5,128,6,1,0,0,2,0,2,1,0,0,32,0,0,52,2,24,253,0,0,132,0,0,16, 70,0,3,35,4,1,32,4,0,1,9,0,2,24,0,1,32,0,0,128,0,1,48,18,0,19,192,34, 64,4,3,0,0,17,0,4,32,8,0,0,88,4,0,1,16,0,0,128,137,0,0,6,240,248,224, 1,8,128,7,4,0,1,192,3,120,64,15,0,1,12,0,3,30,16,0,0,16,16,11,232,1, 60,0,20,240,0,0,6,192,0,0,121,0,4,128,7,0,1,30,0,1,24,0,1,224,1,60,0, 0,64,254,0,0,64,48,0,5,3,0,2,2,0,1,8,0,2,24,0,1,104,32,0,2,48,0,20, 192,32,0,0,4,0,0,1,16,0,5,1,0,0,24,0,2,16,0,0,128,1,0,1,128,248,128,1 ,48,8,166,0,3,3,0,0,66,140,0,1,128,0,3,24,0,1,96,1,0,0,132,1,176,64,0 ,19,128,8,4,1,32,0,0,2,0,4,6,0,1,24,0,1,96,0,1,128,1,48,8,72,251,0,0, 48,4,128,6,0,7,8,0,0,128,64,0,0,16,0,0,64,32,0,0,104,0,0,1,0,23,80,0, 0,2,5,0,0,104,0,5,128,0,2,1,0,0,8,0,2,16,0,1,32,253,0,3,6,0,17,96,0, 25,128,0,0,8,0,1,96,0,9,16,0,0,64,16,0,0,4,0,0,1,16,184,253,96,0,0,12 ,0,8,15,0,1,12,0,2,32,6,0,1,96,0,25,176,0,1,4,0,0,96,0,4,128,7,0,1,6, 0,1,24,32,15,98,0,0,60,0,0,72,250,40,0,0,4,0,8,45,2,0,0,4,0,3,2,0,1, 96,0,0,76,1,0,22,80,0,1,1,0,0,96,0,4,128,22,1,0,0,2,0,1,72,1,13,32,0, 0,52,10,129,253,128,65,176,0,0,16,0,6,32,4,0,0,48,8,0,1,34,24,0,2,36, 64,4,0,22,96,8,1,4,0,7,32,8,0,0,24,0,1,32,4,128,129,1,0,0,6,203,253, 224,1,56,136,1,2,0,5,15,0,1,60,0,1,48,0,0,30,4,0,0,24,0,0,3,0,23,128, 0,0,6,0,1,24,16,0,3,128,7,0,1,30,4,0,0,16,16,15,224,65,60,0,0,112,253 ,132,1,48,0,9,2,0,0,48,0,1,192,32,24,0,28,128,0,1,4,0,0,96,32,0,5,1,0 ,0,24,0,1,104,0,1,128,1,0,0,8,138,249,128,1,48,0,1,2,0,5,44,0,1,48,0, 2,4,24,0,3,32,16,0,22,64,32,64,0,1,96,4,0,4,70,0,1,24,0,1,96,33,76, 129,1,48,0,0,32,249,0,1,5,128,0,1,2,27,64,3,0,2,168,1,0,4,130,0,1,8,0 ,0,1,0,19,16,0,1,64,16,0,3,8,0,5,128,0,0,8,130,72,1,104,0,2,16,0,0,1, 224,248,0,8,3,0,2,128,1,0,5,4,0,24,1,0,1,4,0,12,128,0,1,2,96,0,1,4,0, 0,1,16,232,252,224,1,12,0,0,6,48,0,0,30,0,0,3,0,1,15,128,1,0,5,4,0,1, 16,0,0,4,0,17,96,0,1,128,1,176,0,4,32,0,3,128,7,48,0,1,196,130,96,0,0 ,15,98,0,0,12,0,0,232,249,164,81,4,0,0,64,24,0,0,90,4,3,0,1,13,128,1, 0,4,128,0,2,1,0,19,32,0,1,128,0,0,80,0,4,4,0,3,128,22,24,0,0,64,64,17 ,96,0,0,141,32,0,0,4,0,0,186,253,12,132,48,1,0,0,192,8,129,4,8,0,1,44 ,4,128,0,4,64,4,0,1,16,128,0,18,128,1,0,1,70,96,8,1,0,1,96,130,0,4,32 ,200,2,0,0,128,1,0,0,33,128,129,17,48,1,120,248,224,1,56,136,1,241,0, 0,28,192,0,0,1,0,0,15,96,0,5,6,0,1,24,0,0,3,8,0,17,224,129,0,0,128,7, 130,0,3,120,0,4,128,7,240,64,6,68,2,24,0,0,15,224,65,60,8,248,253,8, 64,48,0,1,194,0,0,2,4,0,2,12,130,1,0,5,4,0,1,16,0,19,128,1,0,1,6,128, 0,11,193,0,1,128,2,0,2,128,1,48,0,0,217,251,128,9,48,0,0,32,192,0,0, 24,0,3,76,128,1,2,0,3,8,0,1,96,0,0,12,4,0,17,128,1,0,1,6,64,34,0,2,96 ,18,0,4,22,192,0,0,8,4,1,0,1,12,130,1,48,0,0,120,250,0,1,37,144,0,1,2 ,91,4,0,0,104,0,0,64,164,0,1,128,0,2,64,96,0,0,8,68,0,0,160,1,0,17,16 ,20,16,0,0,16,0,0,10,0,1,8,0,0,13,0,3,128,0,0,8,0,0,65,2,8,4,0,1,16,0 ,0,1,220,255,0,1,16,0,3,24,0,5,1,0,10,128,1,0,18,33,0,3,16,0,3,12,0,5 ,128,0,0,16,1,0,0,32,0,0,4,0,0,1,16,184,248,224,129,44,0,1,48,0,0,24, 0,2,16,3,96,1,0,0,128,1,0,1,6,0,1,96,0,1,128,1,0,16,96,0,0,28,0,1,176 ,0,0,22,0,2,16,12,0,2,128,7,48,0,0,6,192,130,96,64,15,98,0,0,12,0,0, 120,252,168,17,20,0,0,64,24,0,0,24,8,0,1,4,1,160,0,1,128,0,2,2,0,0,80 ,64,32,0,0,128,1,0,16,32,0,0,36,0,1,80,0,0,10,0,3,12,0,2,128,38,17,0, 0,2,64,17,64,2,45,32,0,0,4,0,0,3,255,0,0,132,32,0,1,196,2,88,32,0,1, 34,140,208,0,2,38,2,0,0,24,4,0,4,68,0,16,128,5,16,0,1,96,8,77,0,2,17, 128,0,3,32,200,2,24,129,1,0,0,4,128,129,5,48,9,169,250,224,1,24,128,7 ,240,32,30,0,1,24,0,0,15,0,0,129,0,0,128,7,0,1,30,192,0,0,25,16,0,0, 96,0,17,224,65,44,0,1,128,0,0,18,8,0,0,24,0,0,3,8,0,1,128,7,240,32,30 ,68,2,24,16,15,224,65,60,0,0,128,253,4,0,0,32,0,1,194,0,0,24,16,0,2, 12,0,0,1,0,1,6,0,1,24,0,0,3,0,21,128,1,16,0,1,128,0,0,16,0,1,96,16,0, 5,193,0,0,24,128,1,0,2,128,1,48,0,0,65,255,128,65,16,0,0,32,192,0,0, 16,1,0,1,10,12,128,80,0,1,6,0,1,24,0,0,16,2,34,0,19,128,1,36,0,1,64, 40,8,5,0,1,2,0,4,38,192,0,0,24,0,0,2,0,0,36,44,130,1,48,0,0,176,249,0 ,0,48,4,0,2,2,27,64,3,8,0,0,64,36,0,0,128,192,6,16,0,0,2,97,33,8,0,2, 8,4,0,15,32,80,4,0,1,16,0,0,2,64,3,104,0,0,1,0,0,16,4,0,0,64,0,0,8,0, 0,65,0,0,8,0,0,64,0,0,32,0,0,1,88,253,0,6,24,0,0,3,0,7,2,0,2,2,1,0,2, 64,0,31,1,0,1,4,128,0,0,16,0,3,4,0,1,16,72,249,96,0,0,12,0,1,48,0,0, 24,0,3,3,96,1,12,0,2,32,0,2,2,0,1,224,1,0,16,128,64,0,2,176,0,0,22,0, 0,3,96,32,0,0,96,0,1,128,1,48,0,0,6,0,2,64,3,224,65,12,0,1,248,44,0,0 ,4,0,1,16,0,0,88,4,0,2,1,160,0,0,4,0,0,32,4,0,0,128,16,8,0,0,32,0,0, 32,40,0,0,18,0,15,4,0,2,80,0,0,10,0,0,35,1,1,0,0,160,145,0,0,133,0,0, 16,0,0,2,0,2,2,1,160,5,4,0,0,193,251,132,17,50,0,1,192,4,0,1,16,97,0, 0,76,192,0,0,48,4,34,0,0,34,0,1,33,2,1,0,1,136,48,0,16,4,0,0,65,0,0, 96,8,77,0,0,19,1,0,0,32,0,0,136,0,0,32,70,193,4,152,0,0,8,0,0,130,44, 2,8,178,8,43,252,224,1,56,8,0,0,240,32,6,200,0,0,120,64,15,2,129,60, 128,7,242,0,0,6,196,3,120,32,0,0,64,0,0,12,32,0,14,96,64,12,0,1,128,0 ,0,18,200,3,24,16,3,68,0,0,12,128,7,240,32,30,196,128,120,0,0,15,224, 1,60,0,0,88,250,132,1,48,0,1,192,0,0,24,0,3,12,0,0,65,48,0,0,2,0,0,32 ,0,2,96,64,0,21,48,0,1,128,32,16,4,3,0,0,32,12,32,0,0,48,0,0,6,192,0, 0,24,0,0,3,96,0,0,12,0,1,48,0,0,74,252,128,1,48,0,1,192,0,1,5,16,2,65 ,12,128,16,48,0,0,4,4,4,8,4,3,98,0,1,32,4,2,5,0,15,80,48,34,0,0,64,8, 8,1,83,96,4,140,36,40,128,16,6,192,0,0,24,0,0,163,96,32,12,128,65,48, 0,0,112,251,0,1,5,0,1,16,32,26,64,0,2,64,36,0,0,128,192,34,68,2,65,96 ,0,0,40,0,0,129,161,8,4,0,16,16,0,0,128,6,144,8,3,0,1,32,4,1,160,1,4, 0,0,64,80,2,0,0,1,0,0,40,0,0,64,0,0,32,0,0,1,56,255,0,6,24,0,8,4,128, 0,3,64,0,0,12,128,129,0,18,1,0,0,6,64,0,3,64,64,0,5,4,128,0,0,16,0,0, 64,0,1,4,0,1,16,24,252,224,1,12,0,2,32,24,4,0,2,3,96,1,12,0,1,176,0,0 ,6,0,0,3,89,0,1,128,1,12,0,15,96,0,3,176,0,0,22,0,1,88,32,0,0,224,65, 0,0,128,1,112,32,6,0,1,88,0,0,3,224,65,12,0,0,184,251,168,73,4,0,3,24 ,0,0,8,4,0,0,1,160,0,0,4,0,0,32,82,0,0,3,0,0,3,40,0,0,64,129,41,4,0, 15,32,0,3,80,0,0,10,0,1,40,4,128,168,5,0,0,128,0,0,16,4,2,0,1,40,0,0, 1,160,1,4,0,0,113,254,0,0,132,48,9,0,1,4,152,32,8,1,0,0,76,194,0,0,48 ,9,194,96,0,0,24,1,0,0,50,4,140,128,1,48,17,0,14,128,9,0,2,162,0,0,76 ,0,1,48,0,0,32,0,0,4,0,0,65,38,1,4,153,8,0,0,48,1,76,0,0,8,50,66,67, 255,224,1,56,0,1,48,64,30,192,3,0,1,15,0,0,129,60,128,7,128,0,0,30, 196,3,64,16,11,98,128,60,0,15,224,65,0,0,128,1,128,0,0,18,8,0,0,64,0, 0,3,200,129,12,128,7,160,0,0,30,0,1,64,16,15,232,1,60,0,0,64,255,4,64 ,48,0,2,128,24,0,1,1,0,0,12,0,0,65,48,0,1,160,0,0,24,0,0,131,64,16,4, 128,1,48,0,15,128,1,0,2,130,0,0,16,4,0,0,80,0,1,4,0,0,48,0,0,6,192,64 ,24,0,1,64,16,12,0,1,48,0,0,138,249,128,17,48,0,1,64,4,0,0,16,0,2,12, 128,4,48,0,0,6,68,0,0,24,0,0,35,32,1,8,200,9,49,0,15,128,1,0,1,16,128 ,0,0,72,0,1,32,0,0,140,128,5,49,18,6,192,0,0,24,0,1,32,1,12,128,69,48 ,0,0,64,249,16,48,20,66,0,0,16,8,3,0,1,8,0,1,40,0,0,128,192,66,0,0,2, 65,96,11,10,0,0,1,32,33,4,0,16,16,176,144,0,0,208,0,0,2,64,131,0,0,4, 1,32,0,1,2,64,16,2,2,0,1,8,0,0,64,0,0,32,0,1,160,253,0,1,48,0,13,4,2, 0,2,3,0,2,128,1,48,0,17,1,0,1,192,0,2,3,0,0,64,0,3,32,0,0,4,64,0,0,8, 0,3,4,0,1,16,144,255,96,0,0,12,0,3,30,0,2,16,15,96,1,12,0,0,6,178,0,0 ,6,0,0,2,89,0,2,1,48,16,0,14,96,0,0,60,160,7,192,0,0,22,0,0,3,88,32,0 ,2,12,128,1,0,2,4,0,0,88,0,0,3,224,1,12,0,0,48,252,44,0,0,20,10,0,1, 34,26,0,2,2,77,162,0,0,4,0,0,6,80,0,0,3,0,0,1,40,0,1,128,5,50,1,0,14, 32,0,0,4,129,6,192,130,10,0,0,35,44,4,64,8,0,0,4,133,0,1,34,128,0,1, 40,0,0,1,160,1,4,0,0,161,253,132,73,32,16,0,1,4,88,0,2,1,32,196,0,0, 176,8,2,104,0,0,88,4,19,49,4,44,144,137,48,2,0,14,128,69,0,1,6,194,8, 76,0,0,3,50,0,0,64,4,4,2,32,6,1,4,128,0,1,48,1,76,130,9,2,6,83,254, 232,1,12,0,1,176,32,28,8,0,0,120,64,15,0,0,129,60,128,7,128,0,0,30, 192,0,0,64,16,15,224,1,12,32,0,14,224,1,60,0,0,7,240,32,18,200,3,64,0 ,0,3,96,0,0,8,128,7,176,32,6,4,0,0,64,16,15,224,1,12,0,0,200,250,128, 1,48,8,0,1,32,24,4,0,4,65,48,0,0,6,161,0,0,24,0,0,2,66,16,0,0,128,1,1 ,32,0,14,128,1,0,1,6,193,0,0,16,4,3,80,0,0,12,128,1,0,1,6,0,0,32,0,0, 4,0,0,64,16,12,128,1,48,0,0,90,250,144,1,32,1,0,1,8,24,0,2,66,140,130 ,0,0,48,0,0,70,64,0,0,24,128,32,32,0,0,64,129,8,0,0,1,0,14,128,1,48,0 ,0,6,0,0,34,8,0,0,81,32,0,0,64,129,17,177,16,6,0,0,8,8,1,0,0,32,0,0, 12,128,81,176,8,152,255,0,0,48,4,128,0,0,80,136,2,64,0,0,8,8,64,36,1, 128,192,0,0,128,2,65,96,16,72,36,129,164,73,52,0,16,16,4,128,0,0,208, 0,0,82,0,0,32,64,4,13,32,0,0,52,10,64,16,34,0,0,65,3,72,33,0,1,32,0,1 ,160,250,0,12,128,128,0,2,64,0,2,3,34,0,1,128,1,0,18,1,0,1,192,0,0,8, 8,0,0,34,64,12,0,1,48,0,1,4,0,1,16,3,32,0,1,4,0,1,16,56,255,96,0,0,12 ,0,1,114,32,0,1,3,0,0,32,3,96,1,12,0,0,6,178,0,0,6,0,0,3,88,0,1,128,1 ,48,0,15,96,0,0,12,0,1,192,0,0,22,192,0,0,88,32,12,0,1,48,128,1,0,0, 32,6,0,0,3,88,0,0,15,224,65,60,8,24,249,36,0,0,4,0,0,32,16,2,0,0,32,3 ,0,1,1,160,0,0,4,0,0,6,80,0,0,3,0,0,83,40,0,1,132,17,2,16,0,14,32,0,0 ,4,0,0,64,194,64,10,64,80,40,4,12,0,1,48,194,0,2,2,0,0,3,40,0,0,141, 168,17,180,0,0,18,254,140,81,176,8,0,1,66,24,0,0,32,33,4,44,66,1,48, 10,64,100,0,0,24,5,18,48,0,0,128,128,1,1,0,15,128,81,48,17,0,1,8,21,0 ,1,48,0,0,44,136,5,49,32,38,2,4,152,4,11,48,0,0,128,1,8,2,6,120,253, 224,1,56,128,1,162,0,0,30,208,0,0,24,64,15,0,0,1,60,128,7,128,0,0,30, 192,0,0,33,0,0,3,232,1,12,16,0,14,224,1,60,128,1,52,0,0,18,128,3,65,0 ,0,15,224,1,60,128,7,48,64,30,192,3,33,0,0,15,224,1,60,0,0,240,251, 136,1,48,0,1,194,0,1,8,0,2,12,0,0,1,48,0,0,6,97,0,0,24,0,0,2,32,0,0,8 ,130,1,0,16,128,1,48,0,1,194,0,0,16,0,1,49,0,1,128,1,48,0,0,6,0,1,24, 0,1,32,0,5,33,251,128,1,48,0,0,70,192,20,152,0,0,8,4,32,12,0,0,1,48,0 ,0,22,128,0,0,24,0,0,1,34,0,1,128,40,48,64,0,14,128,1,48,0,0,70,0,0, 36,16,0,0,32,64,0,0,32,144,1,16,5,6,64,16,24,0,0,8,36,0,0,140,130,73, 48,9,224,249,0,7,4,0,14,18,0,33,16,1,0,7,18,0,4,200,255,32,0,0,4,128, 0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1, 0,1,4,0,15,32,0,1,128,0,0,16,0,0,2,64,0,0,8,0,0,1,0,1,4,128,0,0,16,0, 0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,248,255,0,74,152,255,40,0,0,4,128,0,0 ,16,0,1,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,2,1,32,0,0,6,0, 15,32,0,0,4,144,0,0,16,0,0,2,64,0,0,8,0,0,1,0,0,8,6,128,0,0,16,0,0,2, 64,0,2,1,32,0,0,4,0,0,17,254,0,2,34,0,1,2,0,0,2,0,4,132,0,3,2,0,3,2,0 ,1,16,1,0,19,64,2,8,0,1,32,2,130,0,1,8,2,34,0,1,132,0,3,2,0,4,27,255, 0,2,128,0,1,64,0,2,8,0,7,64,0,0,64,0,1,16,1,0,24,128,0,4,1,0,10,16,0, 4,64,251,4,0,0,1,0,2,128,0,0,16,0,0,2,0,1,8,0,0,1,32,0,1,128,0,0,16,0 ,1,64,0,25,64,0,18,4,0,1,16,138,248,32,4,0,0,133,0,1,2,64,64,8,8,0,0, 33,32,4,132,128,16,2,2,66,64,0,1,1,1,0,0,128,132,16,0,14,32,0,0,134, 16,0,0,24,4,130,8,0,0,4,128,1,0,1,2,192,0,0,8,0,0,3,96,16,1,128,65,32 ,0,0,6,1,32,255,0,3,16,0,21,4,0,25,8,0,4,129,0,13,80,251,0,27,1,0,25, 2,0,4,32,0,12,184,254,32,0,5,1,0,7,64,0,2,1,32,0,23,128,0,2,34,0,4,32 ,0,6,64,0,0,8,0,0,64,0,5,168,250,0,3,4,0,1,16,0,0,2,0,1,4,8,0,32,1,0, 1,4,0,4,64,0,2,1,0,1,4,128,0,0,16,0,1,64,0,2,1,0,0,56,252,0,3,1,0,19, 1,0,48,152,255,0,9,8,0,9,64,0,2,1,32,0,0,4,0,23,64,0,2,1,32,0,0,4,0, 13,32,251,0,2,8,2,1,32,0,0,4,1,16,0,1,128,0,1,8,0,31,2,0,4,32,0,1,2,0 ,2,4,0,0,128,0,1,1,0,2,2,0,2,57,255,0,5,128,0,7,1,0,8,4,2,0,37,2,0,8, 8,250,0,2,16,3,3,192,0,0,136,0,0,16,16,0,0,64,0,0,1,16,0,0,64,0,5,5,8 ,40,0,0,8,0,18,1,64,0,0,128,2,0,0,208,0,1,4,0,2,1,0,0,64,3,128,1,0,1, 64,5,0,2,200,248,0,2,129,0,1,20,136,0,0,160,8,0,1,160,32,0,0,8,64,1,2 ,8,128,160,0,0,180,21,0,0,1,0,16,128,0,0,4,128,74,10,0,0,128,64,4,32, 16,68,0,3,1,128,64,34,0,0,160,0,1,64,0,3,64,255,0,6,2,0,0,128,0,2,128 ,0,1,8,0,0,1,0,0,8,0,0,128,0,0,16,4,0,18,64,0,2,1,0,4,32,32,4,0,8,128 ,0,6,56,253,0,5,128,0,7,1,0,9,128,0,35,128,0,10,17,255,0,54,1,0,2,128 ,0,0,16,0,13,255,0,1,128,0,23,4,0,25,8,0,3,4,128,0,13,152,251,0,4,128 ,2,0,14,64,0,2,32,0,21,1,0,7,4,0,15,112,254,16,0,8,32,0,3,4,0,0,8,0,5 ,1,4,128,0,18,2,0,12,2,128,0,1,32,32,0,4,32,0,2,188,250,2,0,8,64,0,37 ,4,0,6,8,0,1,32,0,12,128,88,253,0,74,152,255,16,0,73,204,251,0,73,128 ,16,255,0,3,8,0,16,2,0,25,2,0,8,32,0,7,32,0,5,16,255,0,5,128,0,13,8, 64,144,0,50,216,250,0,74,152,255,0,16,4,0,9,32,0,17,32,0,26,248,255,0 ,57,16,0,8,4,0,5,200,254,0,51,16,0,21,136,254,0,27,128,16,0,20,64,0,2 ,32,0,12,1,1,0,1,4,0,0,224,248,0,4,128,0,1,40,0,8,128,0,3,64,0,50,16, 249,0,1,8,0,6,128,0,10,4,0,1,16,64,0,0,8,0,17,8,0,26,8,254,0,2,128,0, 0,8,0,21,2,0,18,64,0,5,4,0,4,64,0,12,152,253,0,7,8,0,3,128,0,13,16,0, 17,128,8,0,8,3,64,0,14,128,249,0,3,3,0,3,1,16,32,0,4,128,2,0,3,1,0,0, 2,0,0,128,0,0,16,0,18,2,0,3,1,0,1,4,128,0,7,2,0,6,248,250,0,4,2,0,0,4 ,0,1,4,32,0,0,64,0,2,12,2,0,3,1,0,1,4,0,1,64,0,16,64,0,14,18,0,5,2,0, 0,128,8,0,0,112,251,0,4,16,0,0,2,128,0,18,72,0,22,32,0,9,128,0,2,4,0, 1,1,128,0,2,240,255,0,8,1,0,16,1,32,0,24,2,0,3,1,0,14,136,255,0,57,4, 0,15,152,251,64,0,0,16,0,1,64,0,1,68,0,0,2,0,0,4,136,0,4,32,0,0,4,0,0 ,10,0,20,32,64,8,0,0,2,0,0,32,0,2,16,16,0,6,64,0,0,4,0,0,32,0,1,4,0,0 ,16,128,212,255,8,0,7,128,16,0,0,2,0,1,8,0,7,32,0,26,4,0,21,8,248,64, 0,0,8,0,1,160,2,0,0,136,0,0,11,0,0,3,196,0,0,4,0,2,64,0,0,8,10,17,64, 0,0,128,40,16,0,15,64,128,24,8,1,129,66,10,0,0,134,16,44,40,130,64,0, 0,5,0,1,64,48,12,0,0,16,0,1,4,0,0,8,0,0,8,249,0,0,129,18,8,10,1,2,42, 21,192,96,16,153,170,192,98,128,0,1,72,1,17,0,1,164,6,0,0,141,146,4,0 ,2,8,4,0,6,2,32,0,0,128,0,0,4,0,0,32,65,70,65,4,0,1,68,2,0,0,65,8,32, 128,1,32,136,0,0,160,0,0,1,6,0,1,144,0,0,24,249,0,1,4,32,2,4,0,0,8,4, 0,0,10,8,0,0,136,64,0,9,4,0,1,16,0,3,16,2,0,6,1,64,0,0,128,0,3,68,0,1 ,8,0,4,64,0,2,1,32,8,0,0,128,0,1,2,0,1,16,0,0,64,249,32,0,8,33,0,0,4, 0,1,16,0,9,32,0,1,8,0,27,128,0,3,4,0,11,254,16,0,20,8,0,51,68,251,2,0 ,8,1,16,0,4,16,0,31,2,0,6,2,0,14,128,16,254,16,36,0,3,16,32,2,64,0,1, 32,1,32,0,0,132,0,1,16,0,0,2,0,1,8,0,21,16,0,2,1,0,10,136,0,3,128,0,5 ,188,251,128,0,0,5,0,4,16,0,0,2,0,3,1,0,0,1,0,0,128,0,0,144,8,0,5,32, 0,20,128,0,6,1,0,2,8,0,0,1,0,1,64,0,3,2,0,0,208,249,12,0,24,16,0,0,2, 0,30,2,0,13,150,252,8,0,15,2,0,9,16,0,17,16,0,8,8,0,1,32,0,13,136,255 ,0,74,152,255,0,3,8,0,16,4,0,3,2,0,25,4,0,19,112,253,128,0,3,64,0,1, 32,0,2,4,0,8,128,160,0,3,64,0,19,8,0,19,8,2,0,0,32,0,0,152,249,0,2,32 ,0,1,2,32,2,0,4,2,0,33,1,0,0,32,0,2,32,0,2,64,0,1,2,32,0,0,8,0,3,16,0 ,1,64,32,104,255,0,17,4,0,7,2,0,46,248,249,0,21,1,0,32,128,0,6,16,0,3 ,128,0,4,128,255,0,1,48,146,36,16,0,0,24,65,9,106,34,0,2,48,18,0,2,2, 0,0,11,1,0,0,1,160,5,181,0,22,26,0,1,104,132,0,0,32,132,0,0,128,0,0, 16,0,0,10,0,1,8,0,0,1,0,3,64,253,0,3,6,2,0,1,8,1,0,15,128,1,48,32,0, 21,24,0,1,96,0,8,16,0,8,120,254,0,1,60,32,4,0,1,30,192,2,96,64,0,2,60 ,0,4,192,3,0,1,12,0,0,1,32,16,0,24,64,64,0,0,128,1,1,0,1,192,128,22,0 ,8,200,250,0,1,4,2,166,0,0,20,2,80,1,64,4,0,2,4,34,0,2,88,72,64,0,1, 128,144,16,18,1,0,24,32,0,2,8,0,3,4,10,0,8,232,254,0,3,38,200,4,0,0, 128,34,66,0,9,16,0,2,12,128,133,176,16,0,21,128,0,1,96,34,0,1,65,0,1, 128,192,66,12,9,0,0,96,18,64,2,0,2,24,251,0,1,56,128,3,240,64,28,0,0, 2,120,64,0,2,56,0,3,30,128,3,0,1,15,104,0,0,12,0,22,6,4,0,0,24,0,1,96 ,0,1,128,1,48,0,0,18,0,1,120,0,0,3,0,3,248,255,0,4,2,64,0,1,2,96,0,8, 24,0,4,2,1,32,0,23,4,0,0,64,0,2,1,0,1,6,194,128,16,0,2,16,12,2,0,2,8, 250,0,1,48,0,0,16,192,0,0,24,0,0,1,100,20,0,2,48,0,3,24,33,3,0,1,12,0 ,0,32,0,0,4,0,25,8,0,0,128,145,0,1,22,192,2,136,4,0,1,2,12,0,3,144, 253,32,0,0,48,192,16,196,8,24,65,8,10,0,1,32,0,0,176,144,2,192,24,2,0 ,1,72,64,133,32,0,0,52,1,0,6,34,0,6,17,0,0,180,8,0,2,2,0,4,32,5,0,1, 70,0,1,2,0,1,8,0,1,32,0,2,200,252,0,5,64,0,0,8,0,7,4,0,7,4,0,0,32,8,0 ,6,12,0,6,6,0,0,48,0,10,128,0,2,2,0,10,184,254,96,0,0,60,0,0,2,240,0, 0,30,192,2,96,32,0,1,64,60,160,5,240,0,0,24,0,1,64,0,1,130,1,48,0,7, 12,0,6,6,0,0,48,8,0,8,128,1,0,0,128,7,0,1,22,0,1,96,0,1,128,1,0,1,96, 254,40,0,0,4,64,4,24,68,130,96,1,0,2,128,5,4,130,2,16,4,1,2,0,1,66,32 ,0,0,32,176,8,0,6,10,0,6,5,0,0,48,1,0,9,81,0,0,128,32,2,0,0,10,0,1,96 ,0,1,128,1,0,1,57,254,128,81,0,1,192,0,2,128,34,98,0,2,16,0,1,195,0,1 ,24,0,1,96,2,12,128,1,0,0,65,0,6,10,0,6,5,0,0,160,32,0,2,128,0,4,128, 1,0,4,12,9,0,1,18,0,1,80,0,1,27,253,224,1,56,128,7,224,0,0,28,0,0,2, 24,64,0,0,224,129,56,128,4,224,0,0,6,16,0,0,120,32,11,98,0,0,61,0,17, 28,0,3,6,4,0,3,224,1,1,0,0,7,0,1,18,0,1,24,0,1,96,0,2,72,250,132,1,0, 1,2,17,0,2,2,96,0,1,128,1,0,1,4,0,1,24,0,3,12,130,1,49,8,0,16,48,0,3, 24,4,0,3,128,1,0,4,16,0,2,16,0,1,64,0,1,226,250,160,1,48,0,0,22,208,0 ,0,24,0,0,9,97,132,0,0,128,5,50,0,0,2,193,0,0,152,4,0,0,32,64,0,0,128 ,17,176,0,17,8,65,0,2,24,0,4,128,73,0,1,6,0,1,8,4,0,1,2,0,1,8,0,1,208 ,252,128,1,2,0,3,24,65,8,74,1,13,32,68,52,128,0,0,192,24,2,64,3,8,0,0 ,13,0,1,132,0,17,36,138,6,0,2,64,131,0,1,12,32,0,0,20,0,0,38,192,0,0, 3,64,18,2,0,1,32,0,0,48,16,168,251,0,7,8,0,1,32,12,0,1,48,0,12,32,0, 16,16,0,0,6,0,3,3,0,2,4,0,0,32,0,1,4,0,10,48,255,224,129,0,4,30,192,2 ,96,32,12,0,0,64,0,0,128,5,240,0,0,24,0,0,3,96,32,12,0,1,16,16,0,17,8 ,0,0,4,0,2,131,0,1,15,0,0,64,44,128,7,240,64,22,0,0,3,1,0,3,60,0,0,16 ,254,44,16,0,4,130,72,1,64,2,12,0,0,17,176,192,2,16,136,24,0,0,3,97,0 ,0,64,16,0,0,32,1,0,16,48,2,70,0,3,11,0,1,129,8,4,20,128,32,18,8,10,0 ,0,34,0,4,4,34,138,250,4,0,6,128,34,2,8,44,0,0,9,48,0,0,195,0,1,64,4, 35,1,129,32,2,0,1,18,0,16,176,32,70,1,0,2,3,4,0,2,64,152,0,3,12,9,16, 0,3,80,0,1,168,250,192,1,0,4,28,0,0,2,24,0,0,15,228,64,60,144,4,224,0 ,0,6,192,3,120,0,0,3,0,1,60,0,7,12,0,6,6,0,0,60,128,7,0,2,192,0,2,14, 96,0,0,32,32,7,224,0,0,18,192,0,0,1,0,1,96,0,0,56,0,0,192,248,36,0,7, 2,33,0,1,132,1,48,32,4,0,2,4,3,96,16,12,0,1,16,0,17,48,0,0,6,1,0,2,2, 0,3,64,32,0,3,16,0,0,129,0,2,128,65,0,1,169,251,128,1,0,4,24,0,0,1,64 ,18,64,128,0,0,49,1,18,193,0,2,35,98,4,76,1,0,0,48,17,0,6,2,0,6,1,0,0 ,48,65,38,0,2,128,9,4,0,0,12,128,1,144,8,6,192,0,0,72,4,2,0,2,128,9, 48,0,0,168,254,32,1,48,146,32,16,0,1,64,8,42,1,1,32,0,0,48,146,0,0, 192,24,2,64,0,0,96,128,69,162,49,52,16,0,6,16,0,6,136,1,0,0,128,0,0, 16,0,0,24,72,160,8,0,0,140,36,132,4,0,1,16,0,0,2,0,3,1,160,1,48,16,16 ,249,128,128,0,2,2,0,4,64,0,13,128,1,32,0,17,1,0,5,3,0,2,128,1,0,10, 128,1,0,1,40,250,0,0,1,60,0,0,2,0,0,32,0,0,192,2,0,0,16,3,128,65,60, 128,5,240,0,1,16,0,0,122,0,1,128,1,49,0,7,16,0,6,232,1,0,1,6,192,0,0, 30,0,0,130,0,1,15,0,1,45,0,3,22,0,6,60,0,0,160,252,136,0,0,4,64,68,8, 0,1,64,1,0,0,4,1,0,0,16,4,160,2,16,68,88,0,0,3,8,128,32,130,17,176,32 ,0,6,16,0,6,40,136,0,1,6,192,66,2,17,33,96,33,1,8,8,20,0,1,192,64,10, 0,6,4,33,209,249,0,0,1,0,1,192,0,0,34,0,0,128,34,66,17,76,136,1,0,1, 195,0,1,128,4,16,2,0,0,136,0,0,136,48,33,0,6,2,0,6,1,0,2,64,1,130,0,1 ,3,4,0,1,128,69,152,0,1,192,4,12,9,0,2,76,2,80,0,1,123,249,224,0,0,56 ,128,7,240,0,2,2,120,0,0,15,96,0,0,57,128,4,224,0,0,30,192,3,112,0,0, 15,98,1,60,0,7,32,0,6,196,1,0,0,128,1,240,0,0,28,192,3,120,32,14,224, 0,0,32,32,0,0,48,64,18,0,3,15,96,0,0,56,0,0,128,248,4,1,0,1,2,1,32,0, 1,2,65,32,12,128,1,0,1,4,0,1,24,0,0,3,0,1,8,2,1,48,0,7,2,0,6,1,0,3,1, 64,0,1,3,96,0,2,128,32,0,1,192,128,16,0,4,2,64,0,1,162,252,128,0,0,48 ,0,0,22,0,0,4,0,1,33,32,0,0,13,128,17,50,0,0,66,193,0,0,152,16,19,98, 0,0,4,128,9,177,64,0,14,128,1,0,1,32,192,0,0,24,0,0,11,100,32,12,128, 16,16,10,0,2,8,5,0,4,8,48,0,0,160,253,144,133,176,144,64,16,0,0,26,64 ,8,10,0,0,5,128,133,48,146,0,0,80,8,2,64,3,104,65,44,164,1,52,0,7,32, 0,6,144,17,50,145,6,16,0,0,2,0,0,3,9,0,0,140,36,0,0,5,0,0,70,2,0,0,18 ,73,3,98,4,140,36,0,0,48,16,104,250,0,4,4,0,5,8,0,5,32,0,1,3,0,2,128, 129,48,0,15,2,0,2,6,0,14,8,0,0,3,0,0,32,0,4,88,251,224,129,60,0,0,2,4 ,32,24,208,2,0,0,32,11,224,1,60,128,5,0,0,32,0,0,192,3,96,0,0,15,0,0, 129,48,0,7,8,0,6,232,1,60,0,0,6,192,0,1,192,3,0,1,15,8,0,0,44,128,7,0 ,1,22,0,0,3,122,0,0,15,0,1,60,16,200,248,44,16,4,4,4,0,1,88,64,1,96,1 ,37,34,136,4,193,2,0,0,4,88,72,3,96,66,1,136,0,1,33,3,0,5,132,1,0,5, 42,0,0,5,17,6,192,72,0,0,64,0,0,98,33,1,0,0,133,20,128,32,8,0,0,10,0, 0,11,8,68,129,8,0,0,4,0,0,194,254,4,0,2,192,0,0,34,64,128,34,2,4,6,0, 3,195,128,40,0,0,16,3,32,2,0,0,128,17,176,32,0,6,16,0,10,22,0,0,130, 152,0,5,80,152,0,3,20,0,0,32,4,0,1,128,81,0,1,40,248,200,1,56,128,7, 48,0,0,30,8,2,120,32,9,192,1,56,128,4,240,0,0,30,192,3,120,64,14,96,0 ,0,61,128,0,6,64,0,6,224,1,56,128,7,242,0,0,30,132,3,120,32,14,224,0, 0,32,32,7,0,1,18,192,2,112,0,0,14,224,1,56,0,0,160,252,32,0,2,2,193, 32,0,0,8,2,96,0,0,10,0,3,4,129,0,0,24,0,0,3,96,0,2,129,0,0,8,4,0,6,2, 0,13,4,0,0,96,0,1,128,0,0,32,8,0,2,16,0,0,2,0,3,64,0,1,25,251,144,1, 48,0,0,22,0,0,4,24,0,0,17,98,129,4,128,1,48,0,0,66,64,40,88,96,3,96, 10,12,64,8,0,16,128,1,48,0,0,16,200,8,1,0,0,3,96,10,12,128,32,16,2,6, 0,1,16,0,0,19,98,0,0,12,0,0,8,48,0,1,255,48,0,0,48,192,36,66,64,152, 64,8,10,33,9,128,133,48,146,196,16,0,0,10,64,67,40,4,44,36,33,4,33,4, 0,6,2,0,5,128,49,48,145,0,0,16,0,0,2,0,0,3,9,0,1,160,0,0,4,0,0,198, 192,8,3,64,0,0,104,0,0,13,0,1,48,16,208,249,0,4,128,0,1,16,0,2,4,0,3, 2,0,1,16,0,0,3,64,16,0,0,128,0,2,4,0,6,2,0,19,1,0,2,192,0,0,8,4,0,0, 97,0,0,12,0,4,254,96,0,0,60,32,6,180,0,0,30,200,2,0,0,32,11,224,1,60, 144,5,192,0,0,22,4,1,98,32,15,128,1,16,128,0,6,64,0,6,224,1,61,0,1, 193,0,0,24,192,3,0,0,64,0,0,96,1,45,128,7,240,0,2,1,0,4,60,32,136,248 ,44,0,0,4,2,36,80,136,2,65,1,64,0,0,37,34,16,5,130,2,0,0,40,138,0,0,8 ,96,0,0,129,136,5,161,64,2,0,6,1,0,5,32,16,4,34,32,192,128,24,64,16, 97,2,0,0,160,4,20,128,16,210,0,1,5,2,2,0,3,4,0,0,18,252,132,17,0,1,16 ,96,0,1,128,34,66,4,6,0,3,5,192,0,0,12,0,0,16,32,12,0,1,9,0,0,194,0,6 ,64,0,10,192,0,0,130,128,0,2,2,0,0,192,32,152,0,1,192,0,0,64,0,0,32,1 ,18,64,2,0,2,248,248,224,65,56,128,1,132,0,0,28,0,0,2,56,16,9,192,1, 56,128,4,48,128,18,192,0,0,121,0,0,14,96,128,60,0,7,20,0,6,208,1,56, 128,7,240,0,0,6,132,3,120,16,0,0,32,1,32,32,7,224,0,0,6,196,3,24,0,0, 3,0,1,56,0,0,8,251,132,1,0,1,2,161,0,2,2,96,0,0,6,0,3,4,192,0,0,20,0, 1,96,64,0,0,128,1,17,16,8,0,6,4,0,10,1,128,0,0,4,0,0,96,32,0,0,64,65, 32,8,0,0,208,0,2,1,0,0,16,0,0,2,0,2,25,251,160,1,48,0,0,4,64,0,0,24,0 ,0,17,33,64,8,128,1,48,0,0,4,192,8,9,0,0,18,100,4,12,0,1,48,2,0,6,12, 0,6,136,1,48,0,1,192,4,0,1,3,96,1,0,0,128,4,144,0,0,6,192,0,0,4,4,139 ,0,0,2,0,2,48,0,0,208,249,144,17,176,144,134,0,0,64,152,64,8,106,34, 13,128,133,0,0,128,64,80,2,18,0,0,11,100,4,44,164,1,52,1,2,0,6,1,0,5, 128,1,50,145,2,16,0,0,24,8,3,9,0,0,1,48,0,0,164,0,1,192,0,0,130,64,1, 9,0,0,140,132,9,180,8,16,252,0,0,128,0,5,16,0,0,96,0,5,2,1,32,8,0,2, 32,0,0,128,1,48,16,1,0,5,144,0,10,4,0,9,16,32,0,1,128,8,4,2,0,4,49,0, 0,40,250,224,1,60,0,0,6,178,0,0,30,192,2,96,0,1,224,1,0,2,1,0,0,22, 196,3,120,32,15,0,3,2,0,5,2,1,0,5,228,1,60,128,5,193,128,30,192,3,98, 32,4,96,1,45,0,1,240,0,2,3,2,0,0,15,224,1,48,0,0,208,248,44,0,0,6,64, 4,80,136,130,72,1,96,20,32,40,8,2,0,0,64,0,0,128,138,64,0,0,10,4,65,4 ,0,0,48,65,0,6,2,0,6,32,136,4,160,66,192,0,0,130,96,0,1,4,136,164,4, 20,0,1,16,136,0,0,4,18,0,1,65,48,8,50,10,17,255,4,0,2,4,96,0,1,128,34 ,2,0,0,32,0,3,32,128,34,12,0,5,4,32,66,0,6,32,0,6,2,0,2,3,0,0,130,0,2 ,96,33,0,0,193,32,40,0,3,128,4,3,0,0,18,0,2,48,64,27,250,192,1,56,128 ,7,132,0,0,28,0,0,2,88,32,3,196,1,0,0,128,1,241,0,0,18,128,3,112,0,0, 14,96,128,28,0,15,192,1,56,128,4,240,0,0,28,128,3,24,0,0,15,32,1,32,0 ,1,224,0,0,6,192,2,26,0,0,14,192,1,12,0,0,176,255,4,0,2,6,164,0,2,2, 64,0,6,128,0,0,12,0,6,32,16,0,18,5,0,4,96,16,4,72,65,32,0,5,3,98,16,0 ,2,32,0,0,250,249,128,1,48,0,0,70,64,0,0,24,0,0,33,98,66,128,132,1,0, 1,17,65,40,16,0,0,3,96,0,0,12,0,0,16,9,2,0,14,128,1,48,0,0,2,192,2,25 ,0,0,3,96,4,44,128,0,0,32,0,1,192,0,0,64,4,11,96,2,12,128,1,152,64, 184,252,160,9,48,146,0,0,128,64,152,64,10,10,0,0,1,160,80,0,0,128,32, 17,0,0,26,64,3,105,33,45,144,9,52,2,0,14,128,145,48,145,4,16,0,0,26,0 ,0,3,97,0,0,41,32,33,4,0,0,6,0,1,2,64,10,100,4,1,128,9,4,9,176,251, 128,1,1,0,1,66,0,1,16,1,0,6,2,0,1,24,0,0,3,96,0,0,12,0,0,128,48,32,0, 6,4,0,6,2,0,2,2,0,1,24,4,0,1,64,0,0,130,0,3,4,0,4,32,0,2,49,0,1,254,0 ,1,61,0,0,2,178,0,0,30,192,2,96,32,3,0,6,24,0,0,3,0,2,232,1,32,32,0,6 ,8,0,6,228,1,60,128,5,193,0,1,196,3,120,0,0,8,104,1,48,160,7,4,0,0,24 ,0,0,2,121,0,0,12,224,1,32,0,0,48,252,136,9,4,4,36,80,136,130,96,1,0, 0,4,1,0,0,64,0,1,16,193,34,24,0,0,19,97,34,140,32,8,18,0,0,4,0,5,16,2 ,0,5,40,136,4,161,66,192,132,88,64,64,8,130,68,160,0,0,48,130,0,2,24, 0,0,9,8,130,12,32,0,0,145,8,2,250,0,0,5,1,0,0,192,96,0,1,128,34,98,0, 0,140,4,5,0,1,16,1,8,88,0,0,144,64,68,40,8,0,0,48,18,2,0,5,16,1,0,5,8 ,0,2,3,0,0,130,80,16,0,2,4,68,5,129,0,4,1,65,0,1,64,2,0,0,48,64,144, 254,224,0,0,56,128,7,128,0,0,28,0,0,2,24,64,15,224,65,0,0,128,1,240, 64,30,200,1,56,0,0,7,192,1,12,0,0,7,0,5,144,3,0,5,200,1,56,128,4,240, 0,0,14,128,3,112,0,0,15,32,1,60,16,7,0,1,6,200,3,112,0,0,3,192,1,60,0 ,0,64,253,4,1,0,1,2,97,0,2,2,96,0,0,12,0,0,65,0,2,192,0,1,8,2,64,0,0, 8,8,0,0,32,128,5,0,5,208,2,0,5,8,0,2,3,0,1,16,16,0,2,12,2,1,0,5,16, 131,0,2,2,0,0,48,0,0,201,250,64,4,50,0,0,22,128,0,0,24,0,0,18,100,20, 13,128,16,0,1,64,193,2,129,0,0,137,16,20,66,128,1,0,0,17,4,0,5,8,2,0, 5,132,1,48,0,0,4,192,68,132,0,0,3,96,0,0,12,0,0,1,48,33,6,0,1,128,0,0 ,11,96,0,1,128,1,176,64,152,253,16,16,1,0,2,8,1,0,21,4,0,6,2,0,24,8,0 ,9,104,251,0,1,4,128,0,2,2,64,0,0,8,0,1,32,0,0,4,128,0,0,16,0,0,2,0,1 ,8,0,0,1,32,0,0,4,0,7,2,0,6,33,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1, 32,0,0,4,128,0,0,16,64,2,64,0,0,8,0,0,1,32,0,0,4,0,0,184,248,0,12,4,0 ,8,1,0,50,136,251,12,16,6,128,0,1,72,2,64,0,0,8,0,0,129,32,0,0,4,128, 0,0,16,0,0,2,64,16,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0,16,0,0,2,64 ,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,9, 251,4,4,0,0,34,0,1,68,0,0,17,8,0,3,16,1,34,0,1,136,0,1,8,0,0,1,128,8, 16,2,0,16,4,128,0,3,64,0,0,8,0,0,1,32,0,2,65,16,0,0,2,0,3,1,32,0,0,4, 128,0,0,139,249,0,0,128,0,0,128,0,5,10,0,11,2,64,0,2,4,0,17,1,32,0,0, 16,0,1,16,0,0,2,64,0,0,8,0,3,4,128,0,0,64,0,1,64,0,0,8,0,0,1,32,136, 248,4,0,11,8,0,6,16,0,27,2,0,7,128,0,14,202,249,0,0,144,0,0,146,0,1,4 ,1,9,64,8,0,0,33,0,0,144,0,0,146,0,0,2,72,130,0,0,8,1,36,128,4,132,4, 0,16,144,0,0,146,32,16,0,1,9,32,1,36,32,36,8,4,5,64,2,72,66,72,0,1,36 ,128,4,144,0,0,18,24,255,0,0,5,32,0,0,2,128,0,0,16,0,3,8,0,0,1,32,64, 0,0,128,0,0,2,0,1,64,0,0,40,160,0,0,20,0,16,1,32,0,3,80,0,0,2,72,1,0, 4,4,128,2,0,1,8,64,0,0,8,0,0,1,32,0,0,176,251,0,2,128,0,5,32,0,10,2,0 ,3,1,0,26,32,0,0,8,0,2,80,0,12,80,249,0,1,1,32,0,3,64,0,0,16,0,1,128, 0,7,3,0,25,1,128,64,0,5,65,0,15,56,253,2,0,9,8,0,38,66,0,4,1,0,7,128, 0,7,200,254,0,19,64,128,0,8,128,0,3,32,0,1,64,0,34,112,251,0,4,16,0, 19,32,0,2,1,2,0,0,4,8,0,1,128,0,0,1,0,0,2,4,0,0,8,0,9,128,0,18,176, 254,0,0,128,32,136,0,1,32,0,0,8,128,32,64,0,0,4,0,1,8,0,3,4,0,26,2,0, 2,2,0,3,128,0,1,8,2,1,32,0,1,1,0,2,1,128,8,16,120,250,0,8,1,0,4,1,0,8 ,4,0,0,128,0,19,16,0,3,4,0,5,8,0,9,130,0,1,8,104,251,128,128,8,21,1, 128,90,208,74,0,0,17,32,0,0,4,0,0,161,16,0,2,208,10,0,0,64,1,1,0,1, 161,0,17,16,32,1,0,1,80,28,0,0,64,1,0,0,64,0,0,164,21,21,130,86,0,0, 128,1,0,1,64,45,133,8,53,24,251,128,1,48,4,13,10,146,50,16,64,34,0,0, 4,0,0,64,16,32,0,2,130,80,131,168,16,36,0,0,32,133,4,0,16,128,32,3, 128,0,0,64,18,0,0,168,1,0,2,4,129,8,4,32,0,0,6,0,0,200,72,25,33,65,16 ,9,96,249,130,0,0,4,0,6,8,0,0,4,0,1,17,0,5,2,33,64,1,0,22,2,0,4,32,0, 7,16,0,0,16,0,4,128,8,16,217,248,34,0,0,16,136,0,1,32,8,0,0,128,0,11, 1,0,3,64,0,0,8,0,19,64,0,1,4,0,11,2,0,0,32,16,4,132,0,2,64,253,0,17, 16,0,4,80,0,0,16,0,1,64,0,14,32,0,8,32,0,4,128,0,0,64,128,0,2,1,0,5, 136,248,0,0,4,128,0,1,6,0,0,64,0,0,128,0,0,32,0,1,132,128,0,2,66,0,0, 8,128,1,16,32,5,128,2,4,0,15,64,0,0,8,0,0,32,0,1,4,128,0,0,16,0,0,2,0 ,3,1,32,0,0,64,4,1,16,0,0,2,64,0,0,8,16,249,0,2,128,0,2,32,2,0,1,128, 0,2,2,0,3,1,32,0,0,128,8,0,0,72,0,31,32,0,5,128,2,0,7,251,0,0,2,0,1,2 ,65,0,3,16,0,10,4,0,3,2,0,0,16,0,27,32,128,0,0,4,0,12,16,251,0,3,4,2, 0,22,16,0,44,184,250,0,3,9,8,0,22,8,0,25,64,0,17,16,250,0,26,128,32,4 ,0,26,8,0,16,112,253,0,73,128,16,255,128,0,0,16,0,1,32,0,8,16,0,5,128 ,0,1,4,0,0,1,0,19,128,0,3,128,0,3,128,0,2,2,0,1,64,0,1,4,0,3,8,0,0, 248,253,0,1,2,0,8,4,0,8,64,0,51,184,255,0,74,152,255,0,74,152,255,0,5 ,128,0,3,32,2,0,0,128,0,3,64,4,0,3,16,0,23,8,0,3,128,0,18,40,250,0,22 ,128,0,1,128,0,22,128,0,0,1,0,6,4,8,0,12,216,250,0,3,16,0,53,4,0,14, 200,254,0,8,8,64,16,0,11,8,0,23,128,0,8,1,0,14,192,250,0,9,128,0,2,2, 0,3,1,0,54,176,254,128,0,5,8,0,0,1,0,1,2,0,1,16,0,6,32,0,0,1,0,0,64,0 ,2,4,0,1,16,0,3,2,0,0,32,8,0,10,8,8,0,0,32,0,3,16,64,0,10,40,251,0,1, 2,0,2,32,0,0,8,0,0,2,0,3,1,16,0,1,128,0,1,64,1,0,1,4,0,0,1,0,12,8,0,2 ,128,0,0,16,0,1,16,0,0,16,0,0,1,64,0,0,4,0,7,1,0,0,64,0,0,8,128,0,1, 64,249,0,2,4,0,2,16,128,0,0,1,0,0,8,0,2,4,0,2,16,0,13,64,16,0,8,32,0, 0,16,4,0,4,64,0,3,32,0,11,8,16,128,249,16,2,0,3,1,0,0,4,0,0,32,0,3, 128,0,5,4,4,32,0,21,1,4,0,2,4,0,1,4,0,1,32,0,14,64,104,248,0,23,32,0, 1,4,8,64,0,16,1,0,8,18,0,3,1,0,0,128,0,1,1,0,6,72,252,2,32,4,0,17,66, 0,3,1,0,7,128,0,5,4,72,0,8,66,0,2,2,0,16,168,251,8,0,7,2,0,11,8,0,0,1 ,0,4,8,65,0,0,32,4,0,1,1,132,32,0,1,2,32,0,17,4,0,11,232,252,0,4,128, 0,1,4,0,3,2,0,0,16,8,0,0,20,0,2,128,0,1,8,0,0,32,0,18,8,32,0,0,132,0, 3,2,0,0,8,40,0,1,4,0,8,64,128,0,1,112,249,24,64,16,0,1,1,0,2,129,0,1, 4,0,3,1,33,0,4,64,2,64,0,1,8,0,5,32,0,11,2,64,32,4,4,0,12,1,32,0,1,2, 64,0,1,192,249,0,1,165,5,0,0,164,21,80,72,90,66,1,65,5,0,0,8,144,20, 54,0,0,80,0,0,80,69,65,67,33,168,2,32,0,2,2,16,16,160,0,3,1,8,8,64,0, 0,40,8,144,20,50,128,130,18,0,0,65,1,42,70,0,0,160,21,20,0,0,20,0,0, 64,81,72,1,64,73,168,161,0,0,144,254,32,32,20,40,6,64,0,0,24,84,192, 42,0,0,4,10,0,0,176,92,32,1,0,0,80,84,130,73,8,69,32,193,0,0,34,0,4, 64,0,4,4,0,2,32,64,1,42,0,0,133,48,2,18,2,64,80,41,0,0,3,80,168,144, 84,133,8,80,8,0,1,73,21,0,0,16,8,104,253,0,1,16,8,1,32,0,0,4,2,64,32, 0,0,4,1,0,0,32,32,0,0,4,0,1,4,128,0,1,8,0,1,1,0,5,64,0,4,4,0,3,64,0,0 ,8,0,0,1,128,0,3,8,0,2,16,4,0,0,64,0,0,4,0,6,8,16,144,248,0,0,64,0,1, 2,0,1,8,0,0,128,0,4,8,4,0,2,4,128,0,0,16,64,0,0,128,0,22,64,32,0,0, 132,0,0,16,0,0,2,128,0,3,1,0,5,4,2,0,2,48,254,0,3,128,0,10,8,0,6,128, 0,1,32,0,22,2,0,5,2,0,5,32,0,8,152,253,2,1,0,3,129,32,0,0,4,0,3,2,0,3 ,1,0,4,16,0,1,17,0,11,16,0,3,2,64,0,5,4,0,2,128,0,2,8,0,10,128,40,248 ,4,0,11,1,0,1,128,0,5,2,1,0,1,64,0,33,8,1,0,3,128,0,2,64,0,1,233,251, 0,4,32,0,0,4,0,2,128,0,0,2,0,0,66,0,3,1,160,0,0,16,0,1,80,0,0,64,32,0 ,14,64,0,0,16,0,15,2,0,2,2,0,0,2,0,3,224,250,0,7,16,128,0,3,64,0,0,32 ,0,1,32,0,5,2,0,6,32,0,12,8,0,2,1,4,0,8,4,32,0,3,16,0,0,2,0,0,1,8,162 ,252,0,12,1,0,6,64,0,52,216,254,0,0,64,0,20,32,0,7,2,0,2,2,0,2,1,0,2, 1,0,29,200,250,0,1,1,32,0,5,2,0,12,64,0,7,64,0,16,1,0,20,128,0,0,176, 252,0,8,64,0,6,8,0,29,32,0,5,2,0,2,1,0,13,32,104,255,0,1,8,0,0,128,0, 4,136,0,3,8,0,10,32,0,17,128,0,8,32,0,3,128,0,0,2,64,20,0,8,152,250,0 ,3,1,0,17,8,0,3,8,32,0,26,32,8,0,4,17,0,1,64,0,6,104,248,0,3,16,0,17, 8,0,3,128,0,26,1,0,9,64,0,6,80,250,8,0,9,17,0,1,4,133,0,0,2,0,0,32,64 ,68,8,0,2,8,0,0,1,8,0,16,16,128,0,0,64,0,0,72,0,1,32,0,0,4,0,0,64,0,4 ,16,0,0,1,0,0,16,0,1,64,0,1,194,249,0,9,64,0,2,5,128,0,0,20,128,2,80, 0,0,8,72,1,40,0,0,4,32,0,17,160,0,0,4,128,0,0,20,2,0,0,64,0,0,8,0,5, 32,0,0,2,10,0,6,232,249,0,14,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2 ,0,46,224,251,0,13,4,0,31,128,0,8,16,0,8,4,0,6,64,251,0,0,21,160,2, 180,128,10,80,1,42,128,5,168,0,0,44,128,2,80,0,0,10,64,1,40,0,0,5,160 ,0,0,20,192,2,0,15,22,128,2,88,0,0,11,224,1,42,128,5,160,0,0,22,160,2 ,88,0,0,11,208,1,40,128,11,176,0,0,22,160,2,232,254,128,9,48,1,134, 213,4,154,0,0,19,32,3,77,160,100,148,1,51,96,6,202,192,25,40,3,102, 192,12,144,1,0,14,128,12,152,1,50,64,6,200,68,19,32,3,100,128,12,56,1 ,50,64,6,152,4,25,32,57,100,128,12,48,1,16,249,255,255,0};static const unsigned char l295[]={79,231,255,255,98,255,57,0,0,213,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,160,9 ,52,1,38,64,6,156,0,0,19,0,0,25,96,10,76,128,12,135,83,6,200,0,0,25, 96,2,100,128,97,144,1,0,15,12,48,1,50,0,0,178,76,70,19,104,2,76,128,9 ,48,9,50,224,4,192,0,0,152,104,2,100,128,12,52,1,176,254,0,0,21,160,2 ,84,0,0,11,80,1,42,128,10,80,0,0,26,64,5,180,0,0,10,96,1,44,64,5,176, 0,0,45,192,2,0,15,18,160,2,88,0,0,21,192,2,42,64,5,168,0,0,21,160,3, 88,128,10,32,1,52,64,5,176,0,0,22,160,2,40,255,0,11,64,0,5,2,0,31,64, 0,21,152,249,0,74,152,255,0,4,128,0,5,64,1,0,3,128,2,16,0,0,2,0,1,8,0 ,1,40,0,19,4,0,1,80,0,7,4,4,0,6,2,0,3,224,250,0,5,18,0,4,68,0,5,16,64 ,2,10,0,1,40,0,12,64,0,8,80,0,1,32,0,6,16,1,4,0,3,17,0,6,200,248,0,2, 16,0,3,64,160,0,1,1,16,0,3,208,8,0,2,96,2,141,1,0,43,160,0,2,72,248,0 ,18,32,0,2,96,64,12,0,45,128,0,1,240,255,0,1,60,8,0,4,128,0,7,240,0,3 ,112,0,0,12,2,0,43,128,129,0,1,144,254,0,1,52,0,5,32,0,1,64,8,0,3,144 ,36,0,2,8,34,68,0,45,8,0,1,72,248,0,2,64,0,5,4,0,0,140,0,6,1,0,1,104, 129,72,0,44,128,64,0,1,16,252,0,1,60,0,4,192,0,2,7,2,0,3,48,0,3,120,0 ,0,7,4,0,43,96,1,0,1,64,250,0,8,128,0,1,8,0,4,64,0,5,8,4,0,43,128,65, 0,1,64,254,0,1,48,17,0,4,10,0,1,4,1,0,3,128,132,0,2,96,130,68,0,44, 128,1,0,2,251,0,2,16,0,0,80,0,1,64,1,0,1,73,4,0,3,16,40,0,3,2,0,0,32, 0,0,4,1,0,6,40,0,6,20,0,0,52,128,2,0,10,128,16,1,0,10,104,251,0,4,128 ,0,2,2,0,13,64,0,2,16,8,0,6,12,0,6,6,0,0,48,0,0,4,0,24,8,249,0,1,60, 32,0,0,176,32,0,0,192,2,0,1,12,2,0,3,112,32,0,2,24,0,4,8,0,6,12,0,6,6 ,0,0,48,128,5,1,0,10,5,0,11,72,248,8,0,0,52,1,0,0,80,4,0,0,64,1,0,1, 40,0,5,2,0,2,8,0,12,10,0,6,5,0,0,48,128,34,0,10,128,160,0,11,226,255, 0,2,64,0,0,96,128,0,0,128,1,4,0,0,140,2,0,3,16,64,0,2,96,0,2,8,128,8, 0,6,10,0,6,5,0,1,9,3,0,10,128,0,0,2,0,10,48,255,0,1,60,0,1,144,0,2,2, 0,1,15,0,4,32,0,3,120,16,0,0,96,64,12,0,17,12,128,4,0,10,128,1,0,11, 168,249,4,0,3,160,0,2,2,0,1,12,2,0,3,16,32,0,2,96,0,1,128,1,1,8,0,16, 48,16,5,0,12,1,0,10,1,255,0,1,48,9,0,0,64,32,0,1,129,0,1,140,0,4,144, 8,0,2,96,0,1,128,9,8,2,0,16,48,1,2,0,10,128,2,0,11,224,251,0,2,1,0,0, 16,0,1,64,0,2,65,0,4,208,0,4,32,0,0,32,0,0,4,10,0,16,52,130,4,0,2,64, 0,13,104,0,5,232,251,0,2,32,0,7,4,8,0,3,192,0,8,16,0,7,4,0,6,2,0,0,48 ,16,2,0,17,96,0,5,144,251,0,1,12,0,1,176,32,0,0,192,2,0,12,120,16,0,1 ,64,0,0,8,0,6,4,0,6,2,0,0,48,128,5,1,0,2,3,0,19,136,254,4,0,0,4,0,1, 80,4,0,0,64,1,0,1,32,8,0,8,104,4,0,0,128,9,0,0,2,0,6,12,0,6,6,0,0,48, 133,34,0,3,80,0,12,96,128,0,4,250,252,12,0,0,48,10,0,0,96,128,0,0,128 ,1,4,0,0,32,4,0,3,192,132,0,3,128,0,1,68,0,0,8,0,16,48,64,3,0,3,8,2,0 ,11,96,4,0,5,253,0,1,60,0,1,144,0,2,2,0,1,3,0,4,240,0,3,120,0,1,96,0, 0,12,0,7,12,0,6,6,0,0,28,128,4,0,2,192,0,13,24,32,0,4,184,251,8,0,0, 48,0,1,160,0,2,2,0,2,8,0,3,192,0,6,128,1,0,0,8,0,16,48,8,3,0,17,96,0, 5,113,250,0,1,48,0,1,64,34,0,1,137,0,1,130,0,4,192,36,0,2,96,10,0,0, 128,1,129,0,7,10,0,6,5,0,0,48,2,4,0,3,32,2,0,12,34,0,4,32,249,0,2,16, 0,0,144,128,152,64,0,2,33,0,1,148,0,1,80,0,2,35,1,32,0,0,32,4,20,0,17 ,52,0,1,192,72,0,7,36,193,20,1,0,3,8,66,0,4,248,248,0,4,64,0,1,8,0,2, 4,8,0,1,32,0,0,128,0,2,3,0,4,33,0,7,32,0,6,16,0,0,48,0,1,192,0,16,32, 0,5,232,250,0,1,60,8,0,0,176,0,0,30,200,2,0,2,8,0,0,24,0,1,176,0,1, 192,3,120,0,1,224,128,44,0,20,240,0,8,32,32,1,0,4,96,0,5,48,249,8,0,0 ,52,1,0,0,80,0,0,2,64,1,0,1,128,0,1,4,33,0,0,80,8,1,64,3,104,18,0,1,4 ,20,0,7,18,0,6,9,0,3,208,0,9,129,160,0,4,96,17,0,4,107,254,0,2,64,0,0 ,160,32,0,0,128,1,4,0,0,64,16,0,0,132,0,1,96,24,0,1,16,4,128,0,0,32, 16,25,16,0,17,9,0,1,4,1,0,6,144,192,64,8,0,3,64,4,0,4,1,251,0,1,60,0, 1,144,0,0,28,0,0,2,0,1,3,0,1,44,16,0,0,128,0,1,192,0,0,120,0,1,96,0,0 ,36,0,17,12,0,1,48,0,8,60,128,3,0,4,120,64,0,4,128,251,4,0,1,8,0,0, 128,0,2,2,0,2,4,0,3,160,0,4,16,0,2,33,0,7,8,0,6,4,0,1,16,0,11,16,0,0, 1,0,3,96,64,0,4,97,253,0,1,176,0,1,128,0,0,24,0,0,161,0,1,32,0,1,32,0 ,1,64,40,0,2,96,0,1,32,5,16,10,0,17,1,0,10,16,128,0,5,112,0,5,176,248 ,0,1,48,1,0,3,64,0,2,1,0,1,52,0,1,16,0,1,64,10,4,2,0,2,4,128,4,0,5,72 ,2,0,5,4,0,0,4,10,0,0,144,2,1,0,1,72,130,73,16,0,1,128,20,1,0,0,82,96 ,10,12,1,9,16,0,2,16,254,0,2,32,0,8,4,0,7,3,96,64,0,4,3,0,5,162,1,0,5 ,17,0,3,192,0,16,32,32,4,0,3,88,254,0,1,56,0,4,192,2,0,1,12,0,1,12,0, 1,176,0,1,128,2,112,0,3,44,0,17,44,8,0,0,160,0,3,64,32,8,8,0,2,4,0,1, 16,8,2,97,16,12,0,3,104,254,4,0,0,4,4,0,3,64,1,0,1,32,4,0,0,4,16,0,0, 80,8,1,64,11,106,32,0,2,20,0,0,3,0,5,148,1,0,5,10,0,1,1,0,0,208,0,0,1 ,0,2,2,64,0,3,64,1,0,0,64,0,0,8,96,0,0,44,16,0,2,210,248,4,0,0,4,8,0, 3,128,1,4,0,0,8,1,0,0,48,1,0,0,96,24,0,0,64,19,104,1,0,2,24,16,0,16,4 ,33,0,0,208,4,0,2,32,65,4,1,0,2,64,1,0,0,72,0,0,17,66,34,72,4,0,2,112 ,250,0,1,60,0,5,2,0,1,3,0,1,60,8,0,0,128,0,1,192,129,24,32,0,2,36,128 ,2,0,5,64,1,0,7,12,0,1,112,32,0,2,120,0,0,15,0,2,128,1,0,1,30,208,3, 120,0,0,3,0,3,64,248,4,0,7,130,0,1,8,4,0,0,48,0,1,160,32,0,1,3,96,64, 0,2,32,8,0,17,8,0,0,192,0,6,4,0,2,4,0,4,96,32,12,4,0,2,25,251,0,1,48, 0,5,33,0,1,44,0,1,4,4,0,0,64,8,0,0,64,1,96,1,0,2,16,2,8,0,6,4,0,7,148 ,0,1,80,0,3,32,33,4,0,3,18,8,0,0,136,8,9,114,2,72,0,3,176,255,0,2,16, 0,0,80,0,1,64,2,4,0,0,1,0,1,52,0,1,16,0,0,10,64,35,4,32,0,0,160,65,4, 0,17,16,1,0,0,208,24,2,0,1,72,130,73,16,0,1,128,20,145,8,82,96,10,108 ,128,0,4,192,249,0,4,128,0,2,1,0,1,12,4,0,0,48,0,3,16,0,0,3,0,2,128,1 ,0,0,128,4,0,5,64,2,0,7,32,32,0,0,192,0,10,2,64,64,0,2,96,0,5,192,249 ,0,1,12,0,1,176,128,0,0,192,2,0,4,12,0,1,176,0,0,22,4,1,122,0,1,224,0 ,0,44,0,17,44,0,1,64,64,24,0,1,64,32,12,4,0,1,128,3,192,128,16,8,2,66 ,0,5,104,251,8,0,0,4,0,1,80,0,1,64,1,0,1,32,4,0,0,4,0,1,80,8,139,0,0, 10,104,129,0,0,32,133,20,0,17,20,18,0,0,128,2,0,0,17,0,1,1,40,0,2,128 ,4,192,2,128,0,0,16,32,132,0,4,26,255,0,2,64,0,0,96,0,1,128,2,0,1,12, 8,0,1,1,0,0,96,24,12,0,0,16,2,128,0,0,128,69,24,16,2,0,6,1,0,7,24,0,2 ,132,24,3,0,0,32,65,32,0,3,4,128,0,0,72,0,0,17,98,33,0,4,176,248,0,1, 12,0,1,144,0,2,2,0,1,7,0,1,8,8,0,0,128,0,0,18,192,3,120,0,1,224,1,36, 0,17,32,0,1,240,0,0,6,0,1,120,0,0,7,8,0,2,2,48,128,30,208,3,120,0,5, 120,249,4,0,0,48,8,0,0,160,0,2,2,0,4,48,0,1,160,32,20,0,4,128,1,32,8, 2,0,6,1,0,7,40,0,3,24,0,8,2,192,0,3,96,0,5,105,254,0,1,48,2,0,0,64,0, 2,2,0,1,4,8,0,0,52,4,0,0,64,2,8,128,82,96,20,0,1,1,145,128,8,0,5,64,4 ,0,7,16,0,1,160,20,88,8,0,0,32,34,68,1,0,2,4,128,72,72,8,1,2,66,0,4, 168,250,0,1,48,1,0,0,144,0,1,64,32,0,1,13,0,1,4,4,0,0,144,24,18,64,3, 2,32,140,4,0,0,4,0,18,1,0,0,208,2,0,0,64,0,0,8,12,129,33,9,2,128,4,0, 1,2,66,64,104,0,1,32,17,54,0,0,152,250,0,2,32,0,0,64,0,2,128,0,1,12,4 ,0,0,48,0,1,64,0,0,8,0,0,3,0,1,12,0,3,5,0,5,128,2,0,8,32,0,0,192,128, 0,2,96,0,0,12,0,3,2,0,1,24,0,0,3,96,0,3,48,0,0,224,248,0,1,56,0,1,176 ,128,0,0,192,1,0,1,12,0,1,48,0,1,176,0,0,22,4,1,121,0,0,2,0,1,44,0,17 ,44,0,1,64,0,2,3,64,0,0,8,0,0,129,0,0,128,5,0,1,16,8,2,1,0,2,1,1,0,0, 40,251,8,0,0,52,5,0,0,80,0,2,136,0,1,64,16,0,0,48,65,0,0,80,8,139,0,0 ,18,104,16,77,16,0,0,20,0,17,20,18,0,0,128,68,0,2,98,68,140,8,4,0,0, 128,2,0,1,24,0,0,3,96,128,0,1,8,48,66,90,250,0,1,4,32,0,0,96,0,1,64, 128,0,1,12,2,0,0,48,17,0,0,160,0,0,12,0,0,32,0,0,128,13,0,1,24,16,0,6 ,6,0,6,3,0,0,24,0,2,8,0,1,3,98,68,44,136,4,2,0,0,3,0,1,24,17,11,98,12 ,0,0,128,16,48,64,24,251,0,1,60,0,1,144,0,1,128,0,2,15,0,1,28,0,1,128 ,0,0,18,192,3,121,0,0,15,8,0,0,36,0,17,32,0,1,240,64,0,0,192,3,88,0,0 ,11,224,1,0,1,4,0,1,22,192,2,24,0,1,224,129,12,0,0,184,249,4,0,0,48, 16,0,0,96,0,1,64,0,2,4,0,1,48,32,0,0,160,0,0,12,0,1,2,0,0,12,8,0,0,32 ,8,0,16,40,0,2,128,0,2,96,0,0,12,0,3,2,0,1,24,0,0,3,96,0,2,128,48,0,0 ,89,252,0,1,48,0,1,128,0,1,64,162,0,1,44,16,0,0,24,2,0,0,128,0,0,16,0 ,0,2,96,8,32,0,1,16,0,17,16,0,1,128,0,2,35,114,64,142,132,144,0,1,4,0 ,1,28,144,35,1,129,0,0,128,0,0,128,64,248,254,0,2,1,0,0,208,0,1,64,0, 0,9,0,0,33,0,1,52,64,0,0,16,4,26,64,147,0,0,2,65,32,136,36,16,0,16,32 ,129,6,208,36,0,0,64,3,40,34,69,4,0,1,128,66,0,1,10,65,33,72,0,1,32, 17,2,0,1,251,0,2,32,0,0,192,64,0,1,2,0,2,4,0,0,48,0,2,32,24,0,0,3,0,0 ,64,4,8,0,0,16,0,7,4,0,6,2,0,0,16,32,6,192,0,10,4,1,0,1,8,0,0,33,64,0 ,4,144,254,0,1,12,0,1,192,0,1,128,0,3,4,0,0,16,0,2,32,24,0,0,1,24,0,0 ,7,104,0,0,44,0,7,16,0,6,8,0,0,44,0,0,6,64,0,3,96,0,0,12,0,6,24,16,3, 66,32,0,1,129,0,1,176,255,8,0,0,4,0,1,64,2,1,64,34,97,128,136,0,1,176 ,64,0,2,24,0,0,8,10,0,0,64,32,128,20,0,0,4,0,5,16,2,0,5,8,0,0,20,18,6 ,0,1,1,0,0,80,0,0,128,0,0,16,0,2,64,8,0,0,64,0,1,96,1,0,1,4,0,1,162, 254,0,1,48,1,0,0,192,34,0,0,64,1,98,128,32,8,0,0,144,0,2,34,88,0,1,96 ,18,137,2,0,0,41,0,0,2,0,5,16,1,0,5,8,0,0,24,0,0,22,0,0,4,0,1,8,34,17 ,36,2,0,2,64,1,0,0,136,4,145,64,65,0,0,128,16,0,1,112,251,0,1,60,16,0 ,0,240,0,1,128,0,0,120,0,0,7,0,1,60,16,0,0,48,0,0,30,208,0,0,122,0,0, 3,96,0,0,36,0,0,7,0,5,144,3,0,5,8,0,0,32,128,7,52,64,0,0,192,0,0,88,0 ,0,11,0,2,128,7,0,1,22,192,2,120,0,1,224,129,0,1,208,250,4,0,0,48,0,1 ,192,32,0,0,64,1,96,0,0,4,0,1,16,8,0,1,32,0,1,128,96,0,3,32,128,5,0,5 ,208,2,0,5,8,0,0,24,0,2,32,0,2,96,16,12,2,0,3,1,0,0,24,4,131,96,0,5, 57,253,0,1,48,0,1,192,0,1,64,0,0,96,66,132,16,0,0,32,2,0,0,128,8,64, 32,10,96,0,0,73,4,81,32,0,0,4,0,5,8,2,0,5,4,0,0,32,0,0,16,136,2,0,1, 32,98,4,140,0,3,16,0,1,88,0,0,11,112,36,0,0,128,144,0,1,192,250,0,8, 16,4,0,7,136,0,9,4,0,6,2,0,35,104,255,32,0,0,4,128,0,0,16,0,0,2,0,1,8 ,0,0,1,32,0,1,128,0,2,2,0,1,8,0,3,4,0,7,8,0,6,36,0,1,128,0,2,2,64,0,0 ,8,0,0,1,32,0,0,4,0,1,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,8,249,0,74 ,152,255,36,0,0,4,128,0,0,16,0,0,2,0,0,32,9,0,0,1,32,0,0,4,146,0,1, 128,2,64,0,0,10,0,0,129,48,40,4,0,15,32,0,0,4,194,0,0,16,128,2,64,0,0 ,8,0,0,1,32,0,0,4,128,160,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,171, 255,12,0,5,128,8,32,4,0,4,65,0,1,2,0,27,16,0,12,128,0,11,177,249,32,0 ,1,128,0,5,8,0,0,1,32,0,0,4,128,0,1,32,0,24,32,0,5,2,64,0,0,8,0,0,1, 32,0,0,4,0,1,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,192,252,8,0,4,64,0, 2,1,0,7,64,0,0,8,0,1,32,0,1,128,0,0,16,0,17,16,0,0,2,0,23,8,251,32,0, 0,4,192,0,0,16,0,0,2,2,0,0,8,0,0,1,32,0,1,160,0,2,2,64,8,9,0,0,33,48, 0,0,4,0,15,32,0,0,4,128,0,0,16,66,2,64,0,0,8,0,0,1,32,0,0,4,0,0,16,18 ,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,60,251,0,17,16,0,7,2,0,18,64,0,26, 168,249,0,1,8,0,61,4,128,0,7,216,255,0,6,18,0,0,8,0,2,1,0,12,32,0,21, 16,0,23,160,252,0,5,1,0,5,3,0,8,8,0,26,1,0,2,32,0,0,4,0,10,9,0,1,2,0, 1,64,249,0,22,1,0,26,64,0,13,32,0,0,4,0,5,168,255,0,25,16,0,20,64,0, 25,201,255,0,1,16,128,0,0,64,128,0,1,129,0,2,8,128,8,0,1,1,0,3,32,64, 0,0,128,0,20,128,0,5,8,0,4,144,0,5,2,0,0,4,0,3,232,253,0,10,64,4,2,0, 2,4,4,128,0,0,64,0,0,10,0,20,128,0,0,1,0,5,1,0,10,8,0,7,184,248,0,1,8 ,0,0,1,32,64,0,0,128,10,1,74,1,12,128,8,128,160,6,128,0,0,64,0,0,26, 42,64,65,0,17,32,0,0,1,0,0,1,0,2,64,0,0,16,0,4,16,1,0,2,16,0,0,1,0,0, 2,0,3,48,254,130,2,0,0,8,14,1,32,8,64,129,2,2,0,0,3,0,0,32,8,32,64, 128,16,2,0,1,16,0,1,33,16,4,0,15,7,0,0,4,0,0,5,136,8,0,0,129,64,0,1, 128,0,0,8,0,0,132,5,0,4,16,32,0,1,32,8,200,255,128,0,1,8,2,4,32,8,0,0 ,129,0,2,8,0,1,32,0,0,16,0,4,16,0,2,4,0,20,1,0,0,2,0,0,2,2,0,1,64,0,3 ,1,0,4,64,0,3,32,224,255,2,0,1,128,0,8,4,0,0,16,0,3,2,16,0,3,128,64,0 ,0,8,0,14,128,0,1,8,0,5,64,0,5,2,4,0,8,4,0,0,248,253,0,12,8,0,1,32,0, 7,9,0,9,32,0,6,16,0,1,32,0,13,1,8,0,3,8,0,1,8,0,1,32,128,253,0,10,32, 0,3,16,0,1,64,0,2,64,0,1,128,0,19,4,0,19,64,0,6,248,0,11,32,2,0,9,128 ,0,0,128,0,0,8,0,23,4,128,0,7,128,16,0,9,104,252,0,10,64,17,4,0,5,5,0 ,5,64,0,27,128,0,0,16,0,8,128,0,5,152,255,0,21,8,0,24,8,0,25,24,255,0 ,74,152,255,0,21,4,0,27,1,0,2,32,0,1,1,0,5,8,0,0,64,0,0,8,0,1,2,0,1, 64,255,0,20,128,0,2,2,0,0,4,0,46,88,249,0,1,36,0,8,1,0,4,32,0,36,24,0 ,0,2,0,15,104,255,0,9,4,0,0,4,0,1,32,72,0,1,2,0,2,128,0,23,4,0,0,32,0 ,3,64,0,8,16,0,8,184,250,0,26,128,0,46,24,255,0,21,64,0,2,4,0,23,16,0 ,3,1,0,5,12,0,0,64,0,0,64,0,6,144,255,0,2,32,0,5,2,64,0,6,128,0,3,64, 0,6,32,0,1,16,0,3,16,0,1,8,0,3,32,0,25,72,251,0,74,152,255,0,22,8,0,0 ,32,0,30,32,0,1,128,0,5,8,0,3,4,0,1,80,249,0,11,8,0,2,4,0,12,128,0,2, 2,0,2,64,0,2,1,0,8,16,0,12,4,0,7,80,249,0,53,64,0,19,216,255,0,6,8,0, 24,2,0,40,48,253,0,20,32,0,0,4,0,7,16,0,2,16,0,2,8,0,2,8,0,4,8,0,0,1, 0,21,96,255,0,20,4,128,0,7,32,0,2,32,0,2,16,0,0,1,0,0,16,0,5,1,128,0, 7,2,64,0,11,64,16,248,0,2,8,0,1,2,0,7,64,0,7,16,0,1,4,0,39,32,32,2,0, 3,128,249,0,5,2,0,5,16,0,12,1,0,20,1,0,13,64,0,9,248,248,0,12,4,0,7, 64,0,1,2,0,6,1,0,2,1,0,1,128,0,2,128,0,1,8,0,17,2,0,7,232,255,0,18,16 ,0,5,32,0,25,64,0,0,128,0,4,128,0,2,32,0,0,8,32,0,4,128,136,248,0,6,2 ,16,129,0,4,16,0,0,2,33,0,0,8,128,128,0,2,32,0,19,4,0,2,128,2,0,1,8,0 ,1,32,0,1,32,2,4,64,2,16,0,2,2,2,0,1,32,120,252,0,0,64,16,0,1,16,128, 0,2,2,0,1,8,0,4,128,0,2,1,16,0,3,8,0,14,32,0,5,8,8,0,11,128,0,3,8,0,0 ,1,128,248,248,0,1,165,0,0,20,16,128,4,136,90,3,0,1,8,0,0,8,0,0,1,34, 128,52,128,0,0,67,75,0,0,64,0,1,32,0,4,32,0,6,16,0,0,32,3,8,8,160,0,0 ,64,6,16,0,0,48,0,0,4,64,0,1,16,21,2,64,84,72,1,0,1,2,12,0,0,17,16, 168,251,0,0,72,0,1,16,0,0,144,16,128,193,98,16,0,3,40,58,64,32,16,82, 64,32,17,9,0,2,9,0,3,4,0,5,4,0,3,32,16,4,162,32,0,0,64,70,0,3,1,0,1, 210,132,148,33,0,1,2,96,0,0,4,0,0,1,0,1,224,248,0,1,1,0,4,64,128,32, 64,0,3,32,2,16,32,0,2,32,16,0,3,32,0,3,2,0,5,8,0,4,4,128,0,3,2,0,9,32 ,0,2,32,0,0,1,0,3,72,254,0,5,32,2,0,1,10,0,8,2,4,0,0,1,0,0,8,0,20,1, 32,0,0,4,0,1,4,0,3,1,0,2,2,68,0,2,2,8,0,1,32,0,2,88,254,0,18,64,0,10, 4,1,0,0,16,0,0,1,0,1,130,0,1,8,128,0,9,8,0,12,1,0,5,112,253,2,0,19,64 ,0,0,2,0,25,16,0,4,64,3,8,0,0,8,0,9,64,0,1,128,224,255,0,1,136,0,8,4, 0,1,4,0,6,144,0,1,8,0,27,8,0,0,13,128,0,7,3,64,0,1,128,0,2,200,252,4, 0,5,4,0,6,4,0,8,16,0,48,153,251,2,0,7,2,0,4,32,0,9,16,0,22,64,0,4,32, 0,1,1,0,4,32,8,4,0,3,1,0,0,128,56,255,0,21,2,0,7,64,0,2,64,0,2,32,0,2 ,32,0,5,128,0,6,2,0,2,4,0,3,128,0,6,24,253,0,6,1,0,4,16,0,1,80,0,12,2 ,0,1,8,0,3,1,0,1,4,0,26,128,0,0,16,0,1,64,32,253,0,1,4,0,61,2,64,0,2, 4,0,3,184,251,0,7,128,0,14,8,0,0,3,0,22,128,0,3,17,0,7,1,4,0,1,128,64 ,0,4,56,254,0,1,64,0,6,2,0,3,16,0,6,1,0,44,224,0,2,1,0,0,120,248,0,20 ,128,0,29,2,0,6,2,64,0,5,16,0,1,64,0,2,120,254,0,2,32,0,0,32,0,1,128, 0,8,32,0,2,8,20,0,1,64,0,0,8,0,0,8,0,1,32,0,3,4,0,1,16,0,4,8,0,2,34,1 ,0,21,184,250,0,1,4,160,70,0,5,64,0,3,128,22,0,31,208,0,3,8,65,0,0, 160,0,0,4,0,3,24,2,0,0,104,34,9,0,1,4,0,0,128,253,0,1,16,0,0,6,2,0,10 ,6,2,0,30,192,64,0,6,1,0,4,24,0,1,96,0,0,4,8,0,2,32,253,0,3,2,0,4,16, 0,5,6,2,0,30,192,0,3,88,64,0,0,96,1,0,0,8,0,2,30,0,3,8,4,0,2,72,252,0 ,1,48,4,4,8,0,3,8,0,5,66,0,31,192,4,1,0,1,96,0,1,160,0,5,26,0,1,96,33 ,44,0,2,17,88,252,0,1,160,8,64,0,4,8,20,0,4,22,0,31,128,136,0,2,8,130 ,0,0,192,16,129,8,0,2,64,16,0,0,32,1,136,8,0,1,6,224,250,0,1,28,128,7 ,4,0,3,24,0,4,128,5,4,0,30,112,0,3,24,0,2,1,12,0,3,6,0,1,120,64,15,0, 1,60,0,0,72,249,0,1,48,8,0,12,4,0,31,192,0,3,96,0,2,1,48,8,0,5,32,0,0 ,12,8,0,0,48,0,0,168,251,0,1,56,0,0,20,8,0,10,36,8,0,31,8,1,0,1,32,8, 0,0,128,72,0,0,1,0,6,36,46,0,1,48,66,56,250,0,1,4,128,70,0,2,1,0,1,4, 0,4,64,0,2,64,32,1,0,23,128,22,8,0,3,8,16,0,0,32,0,5,2,0,1,104,1,5,1, 0,0,48,4,80,254,0,1,16,32,6,2,0,1,8,0,1,32,0,4,6,4,0,2,1,0,25,2,0,17, 96,32,0,2,48,0,0,40,248,0,2,16,2,0,1,30,0,1,120,0,4,128,7,4,0,29,6,2, 0,4,32,0,0,96,1,0,5,16,0,0,96,0,0,12,4,0,0,12,32,208,255,8,0,0,48,0,0 ,4,8,0,0,90,4,0,0,104,132,0,4,22,0,3,11,4,0,24,18,0,7,160,0,5,64,0,1, 32,129,64,0,1,176,0,0,227,249,0,1,32,8,32,8,0,0,64,0,2,1,0,3,128,6,4, 0,2,34,4,0,24,64,8,0,4,2,0,0,192,16,1,0,3,88,0,1,96,33,68,0,1,52,0,0, 65,251,0,1,28,128,7,0,1,30,16,0,0,120,64,0,3,128,1,0,2,192,1,0,24,128 ,1,0,4,24,16,0,1,1,0,4,30,4,0,0,88,0,0,11,4,0,0,60,32,56,250,4,0,0,48 ,8,0,3,4,0,7,6,0,3,3,0,25,4,4,0,7,1,0,4,24,0,1,64,0,0,12,0,1,48,0,0, 137,252,0,1,56,2,68,2,0,0,24,0,1,96,18,0,4,38,1,0,2,3,1,0,24,6,0,4,32 ,17,0,0,128,64,0,5,8,0,0,64,32,44,8,0,1,16,216,250,0,1,4,128,22,0,2,1 ,0,1,4,0,3,128,22,4,0,1,64,0,0,2,0,23,128,128,0,1,26,2,0,1,8,0,0,32,0 ,0,4,0,3,10,5,0,0,104,34,0,2,4,1,224,253,0,2,16,6,4,0,1,8,0,1,32,0,4, 6,0,3,1,0,25,2,0,1,8,0,19,32,8,0,0,250,0,3,2,4,0,0,30,0,1,120,0,40,24 ,8,0,0,24,0,1,96,1,0,0,8,0,2,14,4,0,0,96,0,3,12,0,0,232,253,4,0,0,128 ,16,20,0,1,26,5,0,0,104,16,0,4,22,2,0,2,67,0,25,70,8,0,0,72,0,1,8,0,1 ,160,0,5,66,0,1,96,33,0,2,36,18,234,252,12,0,1,65,32,8,0,0,64,0,2,1,0 ,4,34,8,0,2,138,0,25,36,0,1,128,32,0,0,96,2,0,0,192,16,129,8,0,2,64,0 ,6,144,0,0,248,255,0,1,12,128,7,0,1,30,16,0,0,120,64,0,3,128,7,0,2, 192,1,0,24,128,3,2,0,0,6,0,1,120,16,0,1,1,60,0,3,20,16,0,0,88,32,0,2, 8,8,200,255,8,0,0,32,16,0,3,4,0,1,16,0,4,2,0,3,131,0,25,6,2,0,0,16,16 ,0,0,96,0,2,1,0,0,8,0,2,26,0,1,96,0,3,52,0,0,161,254,0,1,48,2,68,2,0, 0,24,1,0,0,96,0,5,128,0,2,128,3,0,25,70,0,1,24,0,1,104,0,1,128,68,0,0 ,1,0,2,24,4,0,0,64,128,0,2,176,32,56,250,16,0,1,128,0,0,20,0,1,1,0,1, 64,0,4,64,0,1,154,72,0,5,180,16,0,17,128,16,8,0,0,130,0,2,8,0,0,32,0, 3,208,0,1,2,0,1,8,0,1,32,132,8,232,254,0,3,2,0,2,8,0,8,4,0,0,24,0,0,1 ,2,0,3,48,0,19,2,0,1,8,16,0,0,96,0,6,192,0,0,24,0,8,96,254,0,5,32,30, 0,1,112,0,4,128,1,0,1,16,8,0,0,1,0,3,16,32,0,22,8,0,0,16,0,1,96,1,0,2 ,240,0,0,4,16,0,0,24,0,1,96,0,0,28,8,152,248,12,0,2,38,2,0,0,26,0,1,8 ,32,0,3,128,0,2,64,0,0,35,0,4,160,0,19,6,8,0,0,152,0,1,104,36,0,0,160 ,0,3,208,0,0,90,0,1,8,0,1,32,0,2,130,253,4,0,2,68,1,34,88,0,1,8,1,0,4 ,38,1,0,0,24,0,0,130,0,5,2,0,18,36,0,1,80,0,1,104,1,0,0,192,16,1,0,1, 192,0,0,26,0,1,96,0,1,128,69,4,1,40,251,0,2,128,3,48,0,0,30,16,0,0,24 ,32,0,3,128,7,0,1,26,192,1,0,4,60,32,0,17,128,3,2,0,0,14,4,0,0,24,32, 0,1,1,0,2,224,0,0,6,4,0,0,120,64,0,0,224,1,12,32,72,251,4,0,2,6,0,0, 32,24,4,0,1,32,0,4,6,0,3,3,0,25,6,2,0,0,24,4,0,0,96,0,2,1,0,2,192,0,0 ,24,0,1,96,0,1,128,1,0,0,8,129,251,0,3,23,193,4,152,0,1,96,1,0,4,6,0, 1,8,128,131,0,4,160,64,0,18,70,0,1,88,0,1,8,0,1,128,80,0,2,192,0,3,96 ,0,1,128,1,32,1,128,252,16,0,0,4,144,0,0,208,130,0,0,16,0,1,4,0,4,64, 0,1,16,65,0,5,52,17,0,17,128,4,0,1,24,73,19,105,0,1,32,17,1,0,4,2,0,0 ,8,129,0,1,32,20,2,0,0,250,0,1,16,0,0,2,4,0,4,32,0,5,4,0,1,16,0,0,1,0 ,3,48,0,19,2,4,0,0,24,0,0,2,0,2,128,0,14,8,216,248,0,4,194,0,0,6,0,1, 120,0,4,128,1,0,1,24,0,6,16,0,22,4,16,0,0,120,16,0,0,96,1,0,4,6,0,4, 96,0,0,16,0,0,184,248,12,0,0,48,34,6,192,66,2,0,1,104,17,0,3,128,0,2, 152,16,8,1,0,3,32,18,0,18,18,4,0,0,26,1,0,0,105,4,0,0,160,0,5,2,0,2, 17,0,0,32,0,0,32,17,17,249,4,0,0,32,66,4,1,34,24,5,0,1,1,0,4,70,0,3, 32,0,5,2,0,18,38,0,1,26,0,0,1,0,0,128,0,0,64,1,0,4,152,0,2,16,0,0,128 ,81,128,0,0,139,251,0,1,28,128,3,176,0,0,30,0,1,120,64,0,3,128,7,2,0, 0,8,192,0,0,2,0,3,60,32,0,17,128,7,1,0,0,30,80,3,112,0,2,1,0,4,30,4,0 ,0,56,0,1,224,1,12,8,88,249,4,0,0,48,0,0,6,192,0,0,24,0,8,6,0,1,24,0, 0,2,0,25,6,4,0,0,24,0,5,1,0,4,24,0,1,32,0,1,128,1,0,1,218,255,0,1,48, 16,7,129,0,0,25,0,1,96,20,0,4,6,0,1,24,0,0,35,2,0,3,160,64,0,18,32,0, 2,32,0,0,104,65,0,1,1,0,4,24,0,1,96,18,0,0,128,1,0,0,66,160,248,0,1,4 ,144,16,80,0,1,1,0,1,4,0,3,128,32,2,0,0,80,80,32,1,0,0,41,2,0,0,4,66, 0,14,160,33,0,0,128,16,8,0,0,2,2,32,0,0,8,13,0,1,16,129,2,0,1,2,0,1,8 ,2,0,0,128,33,20,0,0,176,253,0,1,16,0,1,130,0,1,8,0,1,32,0,9,1,0,1,4, 0,1,16,0,15,128,0,2,2,0,1,8,0,1,2,0,0,12,0,1,32,32,4,0,2,8,0,1,16,0,2 ,32,0,0,152,252,0,4,176,128,30,0,1,120,16,0,7,24,0,3,7,0,2,16,0,14, 128,1,0,6,3,24,32,0,2,44,128,5,0,1,8,0,2,64,0,0,192,1,44,0,0,152,252, 4,0,0,48,34,32,81,4,26,4,0,0,104,4,0,4,64,2,0,0,152,32,11,4,0,0,9,0,1 ,48,1,0,14,128,16,1,0,0,6,8,0,0,24,33,82,96,4,0,2,20,133,130,0,2,9,0, 1,2,0,0,32,16,22,0,0,130,255,12,0,0,32,1,32,96,8,64,0,2,1,0,4,64,0,3, 2,1,0,0,8,0,1,32,1,0,15,4,0,1,20,4,0,0,80,16,0,0,8,1,64,16,0,0,24,0,0 ,19,4,0,0,64,0,2,68,0,0,32,72,152,16,104,255,0,1,28,144,1,148,64,30, 16,0,0,120,64,0,3,128,3,1,0,0,8,192,1,0,1,5,0,1,28,8,0,14,96,0,0,1, 128,3,0,1,14,0,1,24,16,3,0,1,32,128,4,0,1,6,4,0,0,88,0,1,224,1,32,0,0 ,240,249,8,0,0,48,0,0,4,160,32,0,0,8,0,7,2,0,1,24,0,0,3,0,1,4,0,1,48, 8,0,15,1,0,1,6,0,1,24,0,0,1,96,0,3,40,0,0,5,1,0,1,8,0,1,16,0,2,32,8, 129,252,0,1,48,5,166,64,2,24,1,0,0,96,33,0,4,22,1,0,0,24,0,0,83,0,1,8 ,0,1,48,0,15,128,1,2,0,0,6,2,0,0,24,8,3,8,68,128,4,0,0,16,0,0,18,0,1, 128,0,4,128,1,144,0,0,248,254,0,1,4,144,38,18,0,1,16,0,1,64,0,3,128, 64,0,1,16,67,32,1,0,0,9,0,1,52,2,0,17,128,32,0,1,90,0,0,8,106,0,4,129 ,0,2,2,64,11,4,8,69,4,32,4,0,0,136,251,0,1,16,0,0,6,0,1,24,0,9,2,0,2, 1,0,1,4,0,1,48,16,0,18,2,4,0,0,24,16,0,6,32,0,3,4,1,96,0,5,168,255,0, 3,2,178,128,28,0,1,24,0,6,1,0,0,16,0,3,11,0,1,16,32,0,19,2,0,0,24,4,3 ,120,0,3,44,128,5,0,2,4,3,16,64,4,96,0,0,44,0,0,144,249,8,0,0,48,34, 36,80,4,154,8,0,0,8,0,5,64,0,2,33,11,4,0,0,5,0,1,32,1,0,18,38,0,1,152 ,0,0,10,12,32,0,2,20,133,130,0,2,1,33,106,4,8,48,0,0,20,0,0,42,255,0, 1,160,32,32,104,8,154,8,0,0,96,2,0,4,32,0,3,10,2,0,0,6,0,2,2,0,18,68, 0,1,24,1,0,0,96,20,0,2,24,0,0,19,4,0,0,64,16,16,105,68,0,0,129,9,152, 16,64,255,0,1,28,128,7,144,64,6,0,1,120,16,0,3,128,5,1,0,0,8,192,1,0, 1,9,0,1,60,32,0,17,128,3,1,0,0,30,16,0,0,120,0,3,32,128,4,0,1,6,192,0 ,0,24,0,0,15,224,129,32,0,0,216,253,4,0,0,48,0,1,160,32,24,0,1,96,0,6 ,1,0,2,3,0,1,4,0,22,6,1,0,0,16,0,0,1,0,0,16,0,2,40,0,0,5,1,0,2,2,96,0 ,0,12,132,1,32,8,1,255,0,1,176,32,68,66,0,0,24,16,0,0,96,0,5,32,0,1,8 ,0,0,11,2,0,0,8,0,1,160,64,0,18,22,0,1,24,2,3,96,1,0,2,16,0,0,2,0,1, 16,5,3,4,0,0,78,128,1,16,0,0,168,255,0,1,4,144,22,146,8,24,16,0,1,64, 0,2,52,65,64,192,128,0,0,64,32,1,0,0,13,0,1,36,0,17,20,145,4,0,1,26,0 ,0,99,0,0,8,0,2,32,129,20,20,0,0,2,0,2,8,13,32,8,36,1,104,248,0,1,16, 0,0,6,64,64,24,0,6,48,0,0,6,196,0,2,1,0,1,12,0,1,16,32,0,18,2,4,0,0, 24,8,2,0,4,16,32,2,0,4,96,0,0,12,4,64,16,16,248,254,0,3,2,180,0,0,4,0 ,1,24,0,3,48,0,0,1,240,0,8,48,0,17,16,0,3,22,8,3,24,0,3,44,128,5,0,0, 64,30,0,1,120,32,8,128,64,44,0,0,200,252,8,0,0,48,34,4,80,0,0,26,2,0, 0,8,0,3,48,133,70,212,0,2,11,4,0,3,48,17,0,16,32,18,18,4,0,0,24,1,18, 12,0,3,20,133,2,0,0,2,26,0,1,96,4,68,16,4,20,0,0,122,254,0,1,32,34,32 ,168,128,154,4,0,0,96,0,3,48,130,38,0,0,130,0,1,34,2,0,0,32,2,0,0,32, 1,0,16,128,0,0,22,0,1,154,4,1,96,36,0,2,24,0,0,197,0,0,2,152,32,0,0, 104,2,44,4,80,24,0,0,240,253,0,1,28,128,7,144,0,0,30,0,1,120,16,0,2, 60,144,1,49,0,1,192,1,0,1,3,0,1,12,32,0,16,60,160,7,1,0,0,30,0,0,3, 120,0,3,32,128,4,48,128,28,0,1,24,16,15,96,0,0,16,0,0,144,254,4,0,0, 48,16,0,0,128,0,0,24,0,1,96,0,4,16,6,0,3,3,1,0,1,2,0,0,48,8,0,16,48, 32,6,0,1,24,0,0,1,96,0,3,24,0,0,4,0,0,64,24,4,0,0,96,0,0,12,0,0,64,16 ,0,0,145,254,0,1,176,0,0,68,130,0,1,8,0,0,96,0,3,144,0,5,11,0,5,2,0, 16,184,0,1,4,0,0,10,33,3,104,0,3,32,0,0,4,192,4,152,0,1,96,16,64,8,16 ,16,0,0,80,249,0,65,3,0,7,168,252,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8, 0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4 ,128,0,0,16,0,1,64,0,2,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32, 0,0,4,8,144,253,0,52,16,0,1,32,0,17,152,252,44,0,0,4,128,0,0,16,0,0,2 ,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0, 15,32,0,0,4,128,0,0,16,0,0,130,64,0,0,8,2,1,32,0,0,4,128,0,0,16,0,1, 64,0,0,8,0,0,1,32,0,2,235,252,4,0,57,48,0,0,6,0,1,4,0,0,1,0,6,9,73, 250,32,0,0,4,128,0,3,64,0,2,1,32,0,0,4,0,3,2,64,0,0,8,0,0,1,32,0,0,4, 0,15,32,0,0,4,128,0,0,16,0,1,64,0,1,16,1,0,5,128,0,0,68,0,2,1,0,3,16, 251,4,0,4,64,0,0,8,0,1,32,0,5,2,64,0,5,4,0,31,128,0,0,16,0,1,128,0,3, 32,0,1,128,0,0,16,25,254,32,0,0,4,128,0,0,16,4,130,64,0,0,8,2,1,32,0, 0,4,128,16,16,4,2,64,0,0,8,0,0,65,32,0,0,4,0,15,32,0,0,4,128,0,0,16,0 ,0,66,72,0,1,129,1,32,8,0,0,129,16,20,4,64,96,0,0,8,2,1,32,8,0,0,1, 216,248,0,1,128,0,0,16,0,13,16,0,0,8,8,0,31,1,8,0,8,2,0,6,4,112,252,0 ,74,152,255,0,1,8,0,6,32,0,3,16,0,1,1,0,3,4,0,27,64,0,8,128,0,0,2,16, 0,8,176,251,0,6,32,0,12,128,0,22,32,0,1,128,0,2,2,0,15,33,0,4,168,254 ,0,6,2,0,46,64,0,1,32,0,5,32,0,6,64,0,0,184,253,0,20,32,0,33,1,0,17, 168,255,0,2,160,0,0,64,0,1,128,0,3,64,0,11,8,0,19,9,0,1,4,0,4,16,0,0, 130,0,1,8,0,2,8,64,0,3,130,0,0,16,0,0,88,253,0,2,8,0,0,16,0,7,128,0,7 ,8,0,1,64,0,32,16,0,3,8,0,1,2,0,0,2,0,3,40,248,2,0,1,48,1,48,0,1,128, 0,1,16,0,0,64,0,0,1,0,0,192,0,1,8,0,1,8,0,0,24,36,0,18,128,8,0,1,2,0, 4,32,40,196,0,0,4,24,0,2,6,128,0,0,194,0,0,1,196,0,0,8,0,0,24,250,0,2 ,8,4,64,2,0,1,128,72,0,1,2,0,1,8,0,0,129,0,0,72,0,0,128,0,3,64,0,19,8 ,0,2,16,0,0,64,32,0,0,96,32,65,80,0,0,128,65,0,0,8,0,1,32,0,1,1,68, 180,12,224,251,8,0,1,32,0,0,64,0,3,1,0,1,8,0,1,32,0,0,1,0,0,8,0,1,2,0 ,2,128,0,19,32,0,5,8,0,2,64,16,0,1,66,0,0,8,0,1,64,0,3,17,136,104,251 ,4,0,1,128,0,5,32,0,6,128,0,32,8,0,0,64,0,2,128,0,3,4,0,6,4,0,0,32,32 ,24,253,0,54,8,0,3,4,0,3,2,0,6,4,0,0,112,255,0,1,4,0,0,2,0,15,64,0,5, 16,0,19,2,0,19,1,0,3,136,255,0,2,8,0,1,16,0,9,144,2,0,30,8,0,3,128,0, 0,8,0,9,4,0,3,32,0,0,200,254,0,46,16,0,4,8,0,3,16,0,0,4,0,4,32,0,2,4, 0,1,64,0,0,40,251,0,1,64,4,136,0,16,68,0,4,128,0,16,64,0,0,4,128,0,2, 2,0,12,128,0,6,48,255,0,1,8,0,0,1,0,16,1,0,4,64,0,20,1,0,23,72,251,0, 15,128,0,34,2,0,21,144,253,16,0,57,4,0,14,200,255,0,1,4,0,13,8,0,2,64 ,0,27,2,0,3,2,0,18,56,253,0,3,8,0,11,2,0,31,4,0,0,44,0,2,128,0,9,1,0, 6,80,248,0,54,4,0,18,152,251,4,0,68,32,0,3,248,249,0,4,32,0,0,4,0,1, 16,0,6,32,0,5,2,0,28,16,0,1,64,0,0,8,0,4,32,0,0,16,0,1,64,0,0,8,0,0, 28,254,0,2,64,4,0,62,64,0,5,216,255,0,62,64,0,3,32,0,5,216,253,0,1,64 ,0,1,128,0,10,4,0,3,4,0,22,64,0,2,8,0,1,32,0,20,144,249,0,19,2,0,25, 32,0,4,64,0,20,184,249,0,15,64,0,53,8,0,1,192,208,255,0,4,2,0,11,4,0, 9,24,0,22,8,0,20,248,250,0,74,152,255,0,4,1,1,32,8,0,0,128,0,3,64,0, 44,128,0,0,32,32,0,4,4,0,3,120,250,0,2,128,0,0,8,0,3,64,0,41,80,0,0, 48,0,7,32,0,2,128,16,0,2,2,0,0,80,253,0,4,8,0,13,8,0,1,1,0,3,8,68,0, 18,1,1,0,0,4,4,0,1,64,0,10,128,0,2,1,0,1,136,251,0,1,144,0,0,16,0,2,4 ,0,1,16,0,9,8,0,5,32,0,18,16,0,1,64,0,12,4,0,6,8,88,253,0,1,1,0,1,65, 128,0,2,8,0,0,4,64,0,32,1,0,0,129,0,5,32,0,0,34,0,1,32,1,0,0,32,0,1,1 ,0,0,64,0,0,64,0,0,4,0,0,248,249,66,0,0,8,0,4,16,0,0,2,0,1,8,32,0,0, 16,0,5,17,32,0,3,16,0,17,8,0,0,65,0,5,4,0,1,8,0,2,128,8,128,0,3,4,0,0 ,1,128,64,252,32,128,4,0,1,34,64,8,16,0,0,18,0,0,2,72,0,0,1,32,0,0, 128,34,0,2,10,64,0,3,32,0,15,128,0,0,32,1,22,0,2,128,0,0,32,1,68,0,0, 4,16,1,0,0,192,2,192,0,0,64,33,4,72,0,0,9,8,88,254,0,3,32,192,0,0,8,4 ,129,0,0,160,32,0,0,3,0,0,4,10,64,158,0,0,4,0,2,2,1,0,0,16,12,0,16,16 ,5,0,0,1,26,2,0,0,102,64,28,248,10,0,0,96,0,0,2,17,44,72,0,0,141,96, 24,17,130,0,0,16,1,192,250,0,4,64,0,0,8,4,2,1,0,5,2,16,0,1,8,0,5,16,8 ,0,16,16,0,1,4,0,4,32,0,0,2,0,2,2,2,32,4,0,0,1,33,16,0,0,132,0,0,8,0, 0,184,251,0,4,16,0,6,128,0,1,32,0,1,64,0,5,2,0,1,16,0,17,16,0,1,32,0, 1,129,8,16,4,0,1,16,0,6,16,8,0,4,160,252,16,0,19,2,0,28,128,0,1,64,0, 15,8,0,2,172,249,2,0,1,32,0,0,4,0,16,2,0,22,1,0,19,2,0,4,128,64,253,0 ,3,4,0,0,2,0,53,8,0,2,4,0,1,64,129,0,4,224,252,8,0,4,128,8,0,9,9,0,33 ,4,0,0,72,16,0,7,2,0,1,8,64,0,0,32,0,0,4,16,202,254,0,1,16,0,0,2,0,1, 64,0,2,1,0,6,2,0,1,1,0,4,16,0,19,2,0,1,8,0,2,128,0,13,1,0,2,200,248,0 ,28,16,0,19,2,1,17,0,16,16,0,3,168,254,0,16,2,0,55,8,56,255,0,1,32,0, 11,4,0,3,8,0,32,1,0,7,1,0,4,8,0,4,80,249,0,16,4,0,2,16,0,26,16,0,3,4, 0,0,16,0,12,8,0,1,16,0,1,250,0,2,16,0,0,2,0,4,128,0,10,1,0,28,2,0,10, 32,0,1,32,0,1,6,0,2,112,255,0,1,32,0,0,1,0,15,128,128,0,4,96,0,19,12, 0,1,32,0,16,2,0,3,216,254,2,0,1,8,0,0,1,0,14,8,130,0,24,8,0,1,2,0,22, 136,253,0,2,128,6,16,36,0,4,128,0,4,208,16,0,7,52,0,18,128,6,0,6,33,0 ,6,26,0,3,32,8,0,2,184,254,0,3,6,128,0,5,12,8,0,3,192,0,8,16,32,0,26, 4,2,0,15,64,248,0,3,6,50,128,0,4,2,0,4,240,128,0,7,56,32,0,17,128,7,0 ,6,8,0,6,6,0,3,15,0,3,56,249,0,3,64,144,0,5,141,4,0,3,64,2,0,7,148,0, 18,128,38,1,0,5,68,1,0,5,130,2,0,2,77,8,0,2,160,254,0,3,6,66,0,5,77,8 ,0,3,208,4,0,7,36,1,0,18,64,2,0,5,44,2,0,5,24,5,0,2,128,4,0,2,88,252, 0,2,128,7,32,32,0,4,3,0,4,240,32,0,7,56,32,0,18,7,0,6,15,0,6,30,0,3, 15,0,3,112,252,0,3,6,208,64,0,4,12,0,4,128,128,0,7,32,0,27,12,0,6,24, 0,4,2,0,2,88,255,0,3,6,196,0,11,208,8,0,7,48,0,19,6,2,0,5,140,4,0,5,2 ,8,0,2,140,0,3,120,252,0,2,128,64,4,0,1,64,136,0,1,128,0,7,1,0,3,160, 1,52,0,17,20,128,32,0,1,154,32,0,1,65,0,7,26,64,0,0,4,0,0,32,8,0,2, 200,255,0,3,2,0,7,8,0,5,24,16,0,3,128,1,48,0,17,32,0,1,2,0,0,24,0,11, 24,0,8,16,252,0,3,4,0,6,3,0,6,4,0,4,128,1,12,0,17,44,128,5,0,1,30,8,0 ,0,120,16,0,7,6,0,0,3,0,1,15,0,3,176,255,8,0,2,18,1,0,2,160,0,1,1,0,6 ,26,32,0,3,128,17,6,0,17,20,0,0,6,4,0,0,136,0,1,104,2,0,7,2,0,0,3,1,0 ,0,77,2,0,2,154,250,0,3,22,1,0,2,144,0,1,12,0,6,26,0,4,128,5,2,2,0,16 ,24,132,0,0,1,0,0,26,5,0,11,5,32,2,0,0,128,4,0,2,152,251,0,2,128,7,0, 2,192,0,2,15,2,0,5,6,8,0,3,96,0,0,8,32,0,16,32,0,0,1,0,1,28,0,1,120, 64,0,7,4,192,0,2,15,0,3,96,255,4,0,2,6,0,3,128,0,1,12,0,6,24,0,4,128, 1,49,0,17,32,128,6,2,0,0,16,0,2,16,0,7,24,0,0,2,0,2,2,0,2,57,253,0,3, 70,2,0,2,17,0,1,12,0,12,128,9,48,9,0,16,16,136,18,0,1,24,32,0,0,96,1, 0,7,26,8,163,0,1,44,0,3,216,251,0,2,128,6,0,2,64,160,104,0,0,65,8,0,5 ,24,1,0,3,160,1,4,18,0,16,4,0,3,2,16,0,1,1,13,0,4,208,24,66,0,3,32,8, 0,2,96,253,0,3,6,0,4,96,0,8,24,16,0,3,128,1,0,23,16,0,2,32,12,0,4,192 ,0,1,16,0,7,120,248,0,9,98,0,8,6,0,4,128,1,0,18,44,0,3,4,0,1,24,0,6, 176,0,0,16,16,0,2,15,0,3,112,251,8,0,7,16,96,0,1,2,0,5,24,9,0,3,128, 17,2,10,0,16,20,0,3,82,8,0,0,8,0,6,192,4,129,0,3,13,2,0,2,154,253,0,3 ,192,0,4,1,2,64,0,6,154,4,0,3,128,5,130,64,0,16,24,4,0,2,10,1,0,0,96, 17,76,0,4,208,36,24,4,0,2,128,4,0,2,80,251,0,2,128,1,0,2,192,0,0,24, 32,3,4,0,5,30,0,4,96,0,0,28,0,17,32,0,3,4,16,0,0,120,0,0,15,8,0,3,240 ,0,0,30,0,3,15,0,3,208,253,4,0,3,4,0,3,96,0,8,24,16,0,3,128,1,0,0,32, 0,16,32,0,3,8,0,1,96,0,0,12,4,0,3,192,64,0,5,2,0,2,225,254,0,3,32,0,3 ,129,96,33,72,2,0,5,64,0,4,128,5,49,1,0,16,144,8,0,5,96,0,0,12,0,4,80 ,0,0,136,8,0,2,76,0,3,216,250,16,0,1,128,2,16,0,2,32,0,1,1,0,2,128,22 ,0,0,4,0,5,32,0,0,52,0,17,4,128,64,1,0,0,138,0,2,65,13,160,1,0,2,208, 0,0,2,67,35,104,0,0,32,0,4,254,0,4,2,0,3,2,0,5,4,196,128,0,5,128,128, 48,32,0,21,24,16,0,2,12,128,1,0,2,192,0,0,16,0,0,3,98,0,1,4,0,2,32, 248,0,3,6,0,2,192,0,3,2,0,3,226,64,0,7,60,0,17,44,0,0,1,1,0,0,6,0,1, 120,0,0,12,8,128,0,2,192,0,0,4,208,3,1,0,0,3,0,3,8,248,12,0,3,8,16,0, 0,64,0,7,64,208,2,0,5,128,1,18,16,0,16,20,128,20,0,1,74,16,0,0,104,16 ,128,128,17,0,2,192,132,18,1,33,96,128,1,0,3,10,253,4,0,2,34,4,66,0,1 ,131,0,1,32,2,0,2,2,208,72,0,6,33,52,2,0,16,24,132,16,4,0,0,144,16,0, 2,76,132,49,0,3,16,138,72,11,96,12,76,2,0,2,16,253,0,2,128,5,240,0,1, 192,3,0,1,3,0,2,128,6,48,0,6,224,0,0,56,8,0,16,32,0,0,1,0,1,6,0,1,120 ,64,15,96,0,3,48,0,0,4,128,3,26,0,0,15,0,3,200,254,4,0,2,6,196,0,2,3, 0,1,12,2,0,3,192,0,6,128,1,32,16,0,16,32,128,2,0,1,24,0,3,12,128,1,0, 2,192,32,8,0,0,2,96,0,0,12,0,3,161,248,0,3,7,192,132,0,1,3,0,1,64,0,4 ,192,66,0,5,192,9,177,0,17,16,138,32,4,0,0,80,4,0,0,96,130,12,8,4,2,0 ,2,2,2,0,0,3,4,129,12,0,3,64,250,0,2,128,2,16,0,2,35,0,1,1,0,3,32,4,0 ,1,65,0,3,32,8,181,0,17,4,0,1,192,2,2,32,0,1,1,13,160,1,0,2,192,66,2, 33,0,0,104,0,0,32,0,3,144,255,0,3,4,1,0,3,2,0,9,16,0,5,48,32,0,19,192 ,64,0,2,96,32,12,128,1,0,2,192,0,0,24,0,1,96,0,0,12,4,0,2,216,255,0,3 ,2,0,0,32,0,0,128,3,2,0,1,2,0,2,6,0,1,6,192,3,0,2,128,129,32,16,0,16, 44,0,1,240,0,0,24,16,0,0,16,0,2,128,0,2,32,0,0,24,8,0,2,2,0,3,24,248, 8,0,2,64,8,2,0,0,64,8,0,6,4,2,0,0,2,64,3,0,2,128,17,0,18,20,0,1,208,0 ,0,88,0,1,104,10,0,0,128,17,0,2,208,128,88,0,1,96,128,141,4,0,2,138, 255,0,3,18,4,32,0,0,64,8,0,1,32,2,0,5,88,4,11,0,3,16,48,0,17,24,4,0,1 ,4,0,0,17,0,0,104,1,140,128,133,0,2,208,130,88,32,0,0,96,33,45,2,0,2, 24,254,0,2,128,5,48,0,1,192,3,1,0,0,15,0,6,30,128,3,1,0,1,96,128,52,0 ,17,32,0,1,48,64,6,0,1,24,16,15,100,0,3,240,0,0,14,0,1,24,0,0,3,0,3, 72,251,4,0,2,2,0,0,32,0,5,2,0,2,2,0,1,24,0,0,131,0,3,1,0,18,32,8,0,2, 16,0,1,96,0,0,12,128,1,1,0,1,192,0,0,24,0,1,96,0,0,12,0,3,161,250,0,3 ,36,200,0,2,3,0,1,64,0,3,6,0,1,24,0,0,35,0,2,128,69,16,0,17,16,2,0,2, 24,4,0,2,76,8,4,0,3,136,76,8,0,1,34,0,4,248,250,16,0,1,128,38,84,0,2, 32,0,1,132,0,3,64,4,0,1,1,0,3,160,1,32,33,0,16,36,132,2,0,1,26,64,3,0 ,0,1,77,34,8,1,0,1,208,2,90,8,0,0,8,66,32,0,3,88,251,0,3,6,128,0,3,2, 0,0,8,8,0,6,16,0,3,128,1,0,18,16,0,0,4,0,1,24,0,0,3,96,32,12,128,0,3, 192,32,24,0,1,32,0,1,4,0,2,176,252,0,3,6,176,0,1,192,0,2,11,0,3,6,0,1 ,6,0,4,128,1,48,0,17,44,128,5,4,0,0,6,0,1,16,0,0,12,128,65,0,2,192,0, 0,8,16,0,0,96,16,3,0,3,8,250,12,0,2,22,81,0,1,64,0,2,5,4,0,2,20,8,0,0 ,2,0,4,128,1,48,33,0,16,20,128,34,0,1,2,0,0,35,108,8,76,129,17,0,2, 192,8,89,0,1,96,4,1,0,3,98,255,4,0,2,68,97,132,0,1,19,0,1,6,0,6,24,1, 0,4,132,0,18,40,0,0,3,0,1,128,16,11,105,128,8,4,17,1,0,1,192,128,136, 0,1,64,68,12,2,0,2,232,252,0,2,128,1,128,0,1,192,131,0,1,8,0,6,30,4,0 ,3,96,0,0,16,0,17,32,128,4,0,1,4,192,0,0,24,0,0,3,224,1,0,2,240,0,0, 30,8,0,0,120,0,0,15,0,3,216,248,4,0,2,4,130,32,0,1,3,0,1,10,0,3,2,0,1 ,24,0,4,128,1,49,0,17,32,0,0,5,0,1,24,4,3,98,0,0,8,132,1,0,2,192,0,0, 8,0,1,96,0,0,12,0,3,1,250,0,3,18,64,2,0,1,3,0,1,4,0,3,6,0,1,24,0,4, 128,5,48,0,17,32,0,0,2,0,1,152,0,0,8,0,1,36,192,17,1,0,1,128,72,144,4 ,0,0,112,32,12,0,3,72,249,0,2,128,6,24,0,1,64,17,4,0,0,128,0,3,134,16 ,66,2,16,0,0,104,0,1,32,0,0,32,34,0,17,128,4,0,1,10,16,0,1,65,5,32,4, 0,2,80,68,18,65,3,12,1,32,168,4,0,1,224,249,0,3,2,0,7,8,0,2,4,0,7,128 ,128,0,20,2,0,7,132,128,0,4,24,16,1,32,32,0,1,128,0,1,232,249,0,3,6, 180,0,1,192,1,0,1,11,0,3,6,0,1,8,4,0,0,96,0,3,48,0,18,128,5,4,0,0,12, 0,1,120,0,0,12,128,1,0,2,64,0,0,28,0,0,3,96,0,0,15,128,0,3,252,8,0,2, 22,80,0,1,64,136,0,1,5,4,0,2,68,8,36,0,0,1,0,1,8,0,0,128,1,50,65,0,17 ,128,34,0,1,66,8,0,0,104,0,1,144,81,0,2,128,0,0,27,2,3,97,20,45,2,1,2 ,0,0,235,254,0,3,20,104,132,0,1,32,1,0,0,6,0,3,2,0,0,24,0,0,1,0,1,65, 0,1,69,0,20,3,0,1,66,4,0,0,96,0,0,68,2,9,2,0,2,8,154,0,0,34,66,34,128 ,4,16,0,1,89,250,0,2,128,7,128,0,1,128,2,0,1,8,0,3,6,112,0,0,6,4,0,0, 120,0,1,224,0,0,16,0,18,128,4,0,1,20,0,1,120,64,11,224,1,0,2,240,64, 14,200,3,120,0,0,15,224,129,0,1,184,249,4,0,2,4,128,32,0,1,3,0,1,10,0 ,3,2,0,0,128,0,0,4,0,3,128,1,49,0,19,3,0,4,96,16,12,128,1,0,2,192,0,0 ,24,16,2,96,64,0,0,136,1,1,0,0,129,253,0,3,23,65,0,2,35,1,0,0,4,0,3,6 ,192,0,0,64,0,2,36,0,0,192,1,48,0,19,4,0,1,16,0,1,96,4,46,194,1,2,0,1 ,224,66,24,129,83,112,1,12,192,1,0,1,64,251,128,17,0,0,128,70,144,136 ,0,1,32,0,1,136,0,6,2,0,3,13,32,8,33,4,0,17,128,6,0,1,10,3,0,1,65,69, 160,129,0,0,128,20,208,0,0,10,81,35,104,32,32,160,1,52,0,0,88,254,128 ,1,1,0,0,2,68,0,3,2,0,0,4,8,0,6,16,0,2,12,0,22,6,0,1,24,0,3,8,130,1,0 ,1,2,194,64,0,1,1,98,0,0,12,132,129,48,0,0,208,248,224,1,0,1,6,176,0, 1,192,0,2,11,0,6,24,0,3,12,128,1,32,0,18,128,1,0,1,12,0,1,120,16,4, 128,1,0,0,128,5,192,128,30,8,3,96,0,0,2,136,1,0,1,56,250,164,1,0,1,22 ,81,0,1,64,0,2,5,4,0,5,16,2,0,2,12,128,145,0,0,66,0,17,128,0,2,26,9,0 ,0,104,0,0,128,144,137,0,0,128,2,192,0,0,136,0,0,83,96,132,141,128,9, 2,0,0,10,251,12,8,0,1,68,96,0,2,147,0,1,6,0,6,64,0,3,64,0,0,16,0,20, 16,0,1,90,8,0,2,36,0,0,9,0,1,4,128,4,130,0,0,34,68,36,141,8,145,128, 16,208,251,96,128,0,0,128,3,66,0,1,192,3,0,1,8,0,6,6,8,0,2,3,100,128, 16,0,19,1,2,0,0,20,0,1,120,64,11,232,128,0,1,3,112,128,20,196,1,56,0, 0,3,224,0,0,12,0,0,200,255,8,0,2,6,66,0,2,3,0,1,6,0,11,12,0,0,1,0,19, 128,6,0,1,24,0,3,4,128,1,0,1,4,192,0,0,16,0,0,3,97,0,0,12,128,1,0,0, 32,169,252,0,3,38,64,0,2,3,0,1,8,0,6,64,4,0,2,140,136,65,16,0,18,128, 70,1,0,0,16,0,1,96,17,72,16,0,0,1,0,0,2,0,0,128,26,17,35,0,0,10,0,1, 40,128,0,0,80,255,0,5,4,0,41,192,0,24,144,255,32,0,0,4,128,0,0,16,32, 2,64,0,0,8,0,0,1,32,0,0,4,128,0,2,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0 ,0,4,0,1,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,3,64,0,0,8,0,0,1,32,0 ,0,4,0,0,24,255,0,18,128,0,29,1,0,14,16,0,7,144,255,36,0,0,4,128,0,2, 2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,4,2,64,0,0,8,0,0,1,32,0,0,4,0,15 ,32,0,0,4,0,0,16,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,130,2,65 ,0,0,8,0,0,1,32,0,0,4,0,0,65,253,12,0,4,2,0,1,8,1,0,0,32,4,0,7,16,4,0 ,4,6,0,17,2,64,0,2,9,0,7,192,0,2,9,96,0,6,219,251,0,1,4,128,0,1,64,2, 0,1,8,0,1,32,0,0,4,128,0,5,8,0,0,1,32,0,17,32,0,1,32,0,0,1,0,1,64,0,2 ,1,32,0,0,4,0,3,2,0,1,8,0,1,32,0,0,4,0,0,184,253,8,0,61,4,0,10,242, 249,32,4,5,128,0,1,130,2,0,0,8,10,0,0,32,40,0,0,4,128,0,0,16,2,67,16, 8,10,0,0,1,32,0,1,64,0,14,32,0,0,132,32,16,20,130,64,72,0,0,8,65,1,32 ,0,0,4,0,0,32,16,2,129,16,8,9,0,0,33,40,0,0,4,0,0,160,250,0,28,64,0, 44,152,251,0,16,128,0,10,4,0,37,16,0,1,64,0,2,80,250,0,11,16,0,4,8,0, 32,8,0,2,8,0,7,16,0,4,1,0,2,152,254,0,9,4,0,7,2,0,6,4,0,24,2,0,4,32,0 ,1,4,32,0,0,8,0,2,8,0,0,4,0,2,80,255,0,4,2,0,21,4,0,18,128,128,0,7,4, 0,1,128,0,3,64,0,0,1,0,5,104,255,0,4,4,64,0,13,8,0,5,1,64,0,21,4,32,0 ,3,8,0,4,64,4,0,2,64,0,4,88,248,0,4,1,0,5,4,2,0,3,66,0,5,8,8,64,0,18, 16,128,0,0,4,32,0,1,128,0,1,4,2,0,1,32,0,4,1,0,2,32,0,2,224,253,0,16, 4,0,0,32,0,0,64,0,3,128,0,22,32,0,3,8,0,9,8,0,0,2,0,5,144,255,4,0,2, 160,130,2,0,4,2,4,0,1,128,0,0,34,148,0,0,64,80,0,0,12,2,36,128,0,18, 24,0,0,1,18,64,0,1,10,9,0,0,2,4,0,1,16,20,0,1,80,144,10,2,0,1,64,0,0, 2,0,0,216,254,0,3,36,4,2,0,3,20,137,3,0,3,192,18,0,1,176,2,0,2,45,4,0 ,17,24,168,2,129,37,0,1,185,5,0,0,32,0,1,32,0,0,156,0,2,2,73,224,16,0 ,1,192,32,4,64,249,0,10,16,0,0,2,0,3,64,0,2,128,0,23,16,8,2,2,64,0,1, 2,2,0,10,1,32,64,0,1,128,0,1,88,252,0,2,128,0,7,4,4,0,3,16,64,0,5,128 ,0,0,1,0,20,64,0,8,8,0,0,2,4,0,1,4,128,64,0,3,32,32,128,250,0,2,128,0 ,14,2,0,37,32,0,6,32,0,0,8,0,5,152,255,0,25,128,0,29,4,0,0,1,0,6,1,64 ,0,5,64,254,0,0,128,0,7,1,0,1,4,0,5,64,8,0,29,64,8,64,8,0,2,32,0,3, 128,0,0,2,0,2,8,0,2,4,112,250,0,3,128,0,14,16,16,2,0,23,4,0,14,80,0,0 ,64,0,1,128,0,2,1,0,1,8,249,0,3,128,0,20,2,4,0,24,2,0,3,2,64,0,3,1,0, 9,208,252,0,5,2,0,10,8,0,51,1,0,2,160,253,0,3,8,0,21,2,0,46,48,253,0, 3,8,32,0,1,128,0,17,2,0,20,1,0,2,16,0,1,32,16,128,0,8,2,0,0,2,0,3,128 ,255,0,51,16,0,2,64,0,1,1,0,1,16,0,0,32,0,9,184,249,0,3,16,0,46,16,0, 11,1,0,0,2,0,6,136,253,0,3,2,0,20,128,0,0,16,0,27,4,0,5,16,0,9,80,249 ,0,17,32,16,0,54,168,254,0,74,152,255,0,8,2,0,44,8,0,8,16,0,8,48,252, 0,8,8,0,37,16,0,14,2,0,0,8,0,7,136,253,0,12,1,0,35,2,0,23,184,254,0,8 ,64,0,7,16,0,55,200,255,0,63,128,0,7,1,0,0,144,254,0,4,68,0,2,1,0,1,4 ,0,3,8,0,10,32,0,18,2,0,2,16,1,0,2,200,0,5,8,0,1,50,0,3,16,0,0,104, 248,0,4,8,16,0,9,2,1,0,8,2,8,0,19,128,0,3,68,0,1,16,0,5,32,0,3,8,0,3, 232,255,16,0,7,2,0,8,32,0,44,66,0,8,168,251,0,22,4,0,28,4,0,2,1,0,0,4 ,0,5,72,128,0,0,1,0,4,152,255,0,0,1,0,9,8,0,4,64,16,16,0,1,64,0,2,32, 0,0,4,0,18,4,128,0,17,8,0,4,32,254,0,27,8,0,27,2,0,1,2,0,6,32,0,2,4,0 ,1,80,249,0,0,1,16,0,3,8,128,0,10,8,0,7,8,0,15,64,8,0,1,1,128,0,12,8, 64,0,0,32,0,0,2,0,3,8,251,80,0,0,8,0,1,16,128,0,1,128,0,2,66,32,0,5,4 ,0,0,1,32,0,16,4,0,6,2,0,0,2,8,0,2,4,0,1,8,0,4,128,0,3,4,0,0,9,0,0, 152,253,96,0,0,12,0,1,16,128,4,128,80,194,0,1,40,0,0,1,0,1,64,0,0,4, 16,0,0,2,64,0,1,5,0,0,16,0,11,2,0,2,168,8,0,1,6,64,10,16,0,0,192,12,1 ,0,1,4,0,1,128,22,132,194,0,0,16,10,2,8,5,5,0,0,128,253,0,1,128,0,1, 128,0,0,64,5,64,64,0,1,128,0,4,32,136,4,64,160,0,0,136,2,1,0,0,8,0,2, 16,0,0,128,0,9,72,0,0,88,36,5,40,16,4,6,2,160,17,0,1,1,4,2,64,0,0,88, 2,32,197,75,4,0,0,64,48,0,0,216,250,0,7,4,0,4,1,0,3,16,8,8,0,0,32,0,1 ,2,0,1,16,0,16,1,8,0,0,1,32,0,0,2,0,7,2,16,0,0,8,0,3,1,0,1,17,0,0,216 ,252,0,4,16,0,3,10,0,11,1,0,0,1,0,0,1,0,4,16,0,0,32,0,11,128,0,2,8,0, 0,1,0,5,16,0,2,4,8,0,0,32,8,0,2,8,0,0,192,252,0,3,4,0,4,64,0,13,8,0, 30,8,0,4,64,0,0,4,4,0,5,1,0,0,24,250,0,9,64,0,6,128,0,40,1,0,1,128,2, 0,9,200,248,0,27,128,16,0,21,2,4,0,4,128,0,2,128,64,0,9,152,248,0,26, 128,0,0,32,0,34,2,6,0,7,88,251,6,0,18,1,2,0,1,8,0,2,64,0,20,2,0,5,16, 0,6,1,0,1,128,0,2,2,0,0,128,128,253,0,3,2,0,10,128,16,0,8,32,132,0,28 ,1,0,4,33,0,6,2,0,1,184,248,0,3,16,0,43,8,0,9,2,0,1,16,0,4,128,0,4, 176,252,0,0,64,0,3,32,0,1,128,0,2,2,0,6,4,128,0,24,8,0,0,1,32,0,3,16, 0,10,8,0,1,34,0,2,168,254,0,4,16,0,1,128,0,10,2,0,1,8,0,4,8,0,26,2,0, 6,32,0,8,16,254,0,4,128,0,13,32,0,4,32,0,21,4,0,8,2,0,5,16,0,1,128,32 ,0,3,128,249,0,3,1,8,0,20,1,2,0,19,16,0,1,4,0,13,4,0,6,24,252,0,17,16 ,0,7,64,0,0,16,0,21,64,0,4,6,0,7,8,0,7,252,0,2,128,64,0,1,2,0,1,8,0,1 ,32,0,11,32,8,2,0,17,4,33,0,5,104,130,0,0,160,5,132,64,0,2,26,73,35,0 ,2,160,145,52,18,240,250,0,4,1,0,7,129,0,10,128,0,19,16,0,6,32,0,1, 128,1,17,0,3,24,0,0,2,1,0,1,128,1,48,0,0,152,252,0,6,22,0,1,88,0,1,64 ,1,0,10,64,128,0,18,48,0,6,96,0,1,128,1,0,4,24,192,3,1,0,1,128,1,32,0 ,0,16,249,0,3,160,0,1,10,0,1,40,0,1,160,5,2,0,9,160,0,19,48,18,0,5,32 ,68,0,0,128,9,50,18,0,2,152,32,3,0,2,128,9,17,65,48,254,0,3,32,8,0,0, 12,0,1,48,0,1,160,8,2,0,9,32,17,2,0,17,32,2,0,9,129,128,0,3,144,64, 161,0,3,5,178,16,184,252,0,2,128,1,0,1,18,0,1,72,0,1,96,0,11,96,0,19, 60,32,0,5,24,32,0,0,224,0,0,12,32,0,2,14,200,3,0,2,224,0,0,60,0,0,192 ,251,0,4,2,0,0,16,0,1,64,0,1,128,1,0,11,1,0,18,48,0,6,64,0,1,128,1,16 ,0,3,24,0,0,3,2,0,1,128,1,48,0,0,160,252,0,3,68,0,1,8,0,1,32,0,1,128, 8,1,0,30,56,16,0,5,96,33,0,1,136,0,0,16,0,3,66,35,0,3,40,0,0,33,104, 251,0,2,128,16,0,1,2,0,1,8,0,4,128,38,0,2,64,18,1,0,1,160,8,0,8,34,0, 6,17,0,0,4,16,0,4,35,12,64,0,0,160,16,0,5,64,19,12,132,65,2,0,0,20,2, 232,248,0,4,4,0,10,6,4,0,7,64,0,8,12,0,6,6,0,0,16,0,5,3,32,0,2,128,0, 6,1,32,0,4,16,200,251,0,6,22,0,1,88,0,5,2,0,3,3,0,2,96,0,0,1,0,7,12,0 ,6,6,0,0,48,16,0,3,128,0,1,32,0,0,128,1,1,0,5,3,1,64,3,0,1,48,32,104, 250,8,0,2,16,8,0,0,10,0,1,40,0,5,4,8,0,2,8,1,0,1,32,8,0,8,10,0,6,5,0, 0,48,0,4,64,83,96,4,0,9,9,96,4,33,16,0,0,128,0,0,179,251,0,3,64,2,0,0 ,12,0,1,48,0,5,64,4,0,2,139,0,3,144,0,8,10,0,6,5,0,0,32,17,0,3,64,19, 65,17,0,0,128,16,0,6,96,64,17,0,2,16,2,241,250,0,2,128,1,0,1,18,0,1, 72,0,4,128,7,0,2,192,1,0,2,96,0,19,60,0,4,192,3,56,0,1,96,1,1,0,4,192 ,0,0,56,0,0,11,8,0,0,44,32,56,250,4,0,5,16,0,1,64,0,10,3,0,23,48,32,0 ,4,3,97,64,0,0,128,1,0,6,2,98,16,0,2,48,0,0,241,248,0,3,68,2,0,0,8,0, 1,32,0,5,132,0,3,83,0,2,32,16,2,0,17,56,1,0,3,64,16,112,4,0,0,128,1,2 ,0,5,11,96,0,0,65,16,0,0,48,64,168,254,0,2,128,16,1,0,0,2,0,1,8,0,1, 32,8,0,2,208,16,0,5,32,0,19,52,64,0,3,64,9,8,33,0,0,160,1,0,5,64,16,4 ,0,0,33,2,0,0,4,16,88,252,0,13,64,0,2,192,0,7,64,0,18,48,0,6,34,0,1, 128,1,0,6,1,0,6,32,249,0,4,1,0,0,22,0,1,88,0,1,96,0,3,64,64,0,5,224,0 ,0,1,0,17,48,0,5,3,2,32,0,0,224,1,0,9,3,0,1,48,0,0,208,254,4,0,2,64,0 ,1,10,0,1,40,0,1,32,0,0,1,0,1,128,4,0,5,32,8,0,18,48,66,0,4,16,96,0,1 ,160,1,0,6,67,0,1,33,8,0,0,48,17,202,251,12,0,3,1,0,0,12,0,1,48,0,7, 66,0,6,144,0,18,160,64,0,4,9,64,20,0,0,128,1,0,6,2,1,0,4,65,96,250,0, 2,128,1,0,1,18,0,1,72,0,1,96,0,0,1,0,1,240,0,6,96,0,17,1,0,0,28,0,4, 192,2,57,0,1,192,1,0,5,192,1,0,1,3,8,0,0,12,0,0,16,254,8,0,3,1,0,0,16 ,0,1,64,0,3,1,0,2,128,0,24,8,0,0,48,0,5,3,98,16,0,0,128,1,0,6,3,0,4, 32,8,57,254,0,3,4,0,1,8,0,1,32,0,1,32,5,0,2,128,0,6,32,16,2,0,15,6,0, 1,5,0,4,11,112,4,0,0,128,1,0,6,83,0,1,73,16,0,0,176,0,0,80,253,160,1, 0,0,128,16,0,1,2,0,1,8,0,1,160,0,3,208,16,26,1,0,3,32,9,2,0,19,70,0,1 ,10,66,3,8,128,0,0,160,1,20,4,0,3,64,16,12,8,0,2,52,0,0,120,252,128,1 ,0,2,1,0,7,128,0,2,192,0,0,24,8,0,22,8,0,2,6,2,0,2,3,0,2,128,1,1,0,5, 1,96,0,3,48,32,232,253,224,1,0,0,128,1,0,1,22,0,1,88,0,1,192,65,0,2, 64,64,8,16,0,3,64,129,0,16,1,0,2,7,0,1,24,192,3,0,2,96,129,48,16,0,5, 64,64,0,2,60,16,120,249,168,1,0,0,128,32,1,0,0,10,0,1,40,0,1,160,16,0 ,2,128,4,16,0,4,32,0,20,128,160,0,2,73,3,0,0,18,0,0,128,5,0,0,1,0,4, 67,96,0,3,144,0,0,2,255,128,1,0,4,12,0,1,48,0,1,32,0,0,2,0,2,24,64,8, 0,3,32,0,17,4,0,1,128,38,2,0,0,8,1,3,0,0,68,0,0,160,81,144,0,5,2,98, 130,0,2,52,10,160,255,192,1,0,0,128,1,4,0,0,18,0,1,72,0,1,96,1,0,2, 240,0,0,30,0,4,224,128,0,16,4,0,1,128,7,0,1,22,144,3,24,0,1,224,1,44, 16,0,3,192,1,88,0,3,60,0,0,32,254,132,1,0,4,16,0,1,64,0,2,1,0,3,64,0, 29,2,0,0,24,0,0,3,64,0,1,128,1,48,32,0,4,3,96,0,3,32,0,0,169,249,128, 1,0,1,36,8,0,0,8,0,1,32,0,1,128,9,1,0,1,128,0,0,16,2,0,3,128,0,17,4,0 ,2,6,0,1,152,16,3,96,8,0,0,128,16,177,0,5,11,114,36,0,2,48,34,192,254 ,0,1,52,128,36,1,0,0,2,0,1,8,0,1,32,0,3,144,0,3,4,0,1,32,4,1,0,17,36, 129,68,24,0,1,64,35,10,1,0,0,32,128,0,0,128,2,16,24,0,0,64,32,44,4,1, 161,129,4,1,56,251,0,1,48,0,0,2,0,12,64,128,0,1,3,0,2,128,0,17,2,0,1, 32,0,4,2,32,64,0,4,6,66,0,2,1,0,0,32,8,0,0,1,0,0,16,224,248,0,1,60, 128,3,0,1,22,0,1,88,0,9,128,3,0,2,64,0,17,2,0,0,32,0,0,4,192,0,1,192, 3,0,0,32,0,0,128,1,0,2,128,0,3,98,64,10,128,1,48,0,0,88,249,8,0,0,52, 128,4,0,1,10,0,1,40,0,1,128,5,1,0,1,64,130,0,0,64,19,1,0,1,160,4,1,0, 7,64,0,9,4,128,192,0,2,3,97,2,0,0,128,137,0,1,22,66,68,0,1,35,0,0,2, 13,132,17,49,4,91,251,0,1,48,0,0,4,0,1,12,0,1,48,0,2,128,0,2,192,4,0, 0,64,11,2,0,1,32,49,0,9,2,0,5,5,0,0,144,16,34,4,130,0,0,64,33,64,1,0, 1,8,2,0,0,22,0,0,2,0,1,34,32,128,69,136,1,130,64,201,248,0,1,56,128,2 ,0,1,18,0,1,72,0,1,224,1,0,2,240,32,0,0,192,0,3,96,0,9,128,1,0,7,60, 128,7,48,0,1,192,131,56,32,0,0,96,0,1,128,7,52,128,0,0,192,129,88,0,0 ,3,224,1,12,0,0,174,250,4,0,0,48,0,0,2,0,1,16,0,1,64,0,1,128,129,0,2, 192,0,2,3,1,0,2,1,0,25,3,96,0,1,128,65,0,1,6,0,3,3,96,0,0,12,128,129, 32,0,0,64,254,0,1,48,0,0,4,0,1,8,0,1,32,0,1,128,5,0,3,72,0,1,3,0,14,2 ,0,7,16,17,34,2,68,0,1,3,100,68,0,0,128,4,0,1,18,72,2,1,0,0,163,96,65 ,68,200,1,176,8,56,255,16,0,1,128,0,2,2,64,35,8,0,1,32,0,0,52,64,0,0, 16,128,26,64,34,0,2,32,64,0,18,4,132,20,0,2,64,11,9,1,0,0,32,4,2,0,1, 80,8,10,65,2,104,33,5,33,1,5,34,208,249,0,8,3,1,0,2,64,48,0,1,64,0,0, 24,0,0,3,1,0,22,48,0,0,6,2,0,2,2,32,64,0,6,64,0,0,8,1,98,0,1,128,1,0, 1,152,248,0,2,128,5,0,1,22,0,0,1,90,0,1,224,128,0,4,30,192,2,0,2,96,0 ,0,1,0,8,1,0,7,32,128,1,0,3,3,1,32,0,0,128,1,0,2,192,128,24,0,1,32,64 ,14,2,129,48,0,0,184,253,12,0,1,128,2,0,1,10,0,0,18,40,0,1,32,16,48, 17,0,0,192,64,26,0,0,80,0,2,32,8,0,9,1,0,7,176,64,4,4,0,2,2,96,2,0,0, 128,41,0,5,32,17,65,1,5,128,8,48,5,170,250,4,0,2,3,0,1,12,0,0,32,50,0 ,3,32,6,0,0,128,2,24,64,147,0,3,144,0,18,48,162,38,0,3,1,64,2,0,1,8,1 ,0,1,64,2,8,1,11,0,0,12,33,8,145,0,0,33,200,255,0,2,128,4,0,1,18,192, 3,72,0,1,96,0,0,29,0,1,112,32,28,192,1,0,2,96,1,0,9,1,0,7,44,128,3,1, 0,1,192,3,57,32,0,0,96,0,3,176,64,22,208,131,120,0,0,11,224,0,0,12,0, 0,112,253,4,0,2,4,0,1,16,0,1,64,0,3,33,32,0,0,192,0,0,24,0,25,48,32,2 ,0,3,3,96,0,1,128,1,0,2,192,128,24,0,0,3,0,0,32,8,0,0,1,32,0,0,113, 252,0,3,2,0,1,8,0,0,66,32,0,1,32,4,8,2,0,0,224,8,25,64,9,2,0,1,32,16, 2,0,7,128,0,8,184,128,16,4,0,2,19,98,10,0,0,128,80,0,2,192,2,152,16,8 ,68,0,0,76,136,16,49,10,80,248,0,2,128,0,2,2,0,1,72,0,1,32,64,180,0,1 ,16,2,1,0,4,32,72,52,0,7,128,0,8,20,130,68,8,0,1,64,3,8,1,0,1,144,0,0 ,128,66,0,3,19,106,4,1,0,1,48,32,152,253,0,9,32,0,3,48,16,0,0,64,0,8, 48,0,18,16,0,5,32,64,0,0,128,1,0,2,2,0,3,96,32,0,2,48,0,0,240,254,0,2 ,128,5,0,1,22,0,1,88,0,1,96,128,16,0,2,64,0,5,224,0,0,60,0,7,64,1,0,7 ,48,32,4,2,0,2,3,2,32,0,0,192,1,0,1,6,0,2,128,3,32,64,0,2,56,0,0,120, 253,4,0,1,128,2,0,1,10,0,1,40,0,1,32,16,32,64,0,0,192,8,0,5,32,4,54,0 ,15,8,0,1,1,32,0,3,3,96,2,0,0,160,9,1,0,1,8,0,1,64,3,66,2,12,16,0,0,4 ,5,67,255,12,0,2,3,0,1,12,0,1,48,0,3,48,1,0,0,128,130,0,6,4,48,0,15,1 ,0,0,16,9,34,4,0,2,139,64,65,0,0,160,5,1,0,0,34,1,0,1,64,16,1,12,0,0, 4,0,0,52,17,1,251,0,2,128,4,0,1,18,0,1,72,0,1,96,1,13,16,0,0,112,0,6, 96,0,0,57,0,17,44,128,7,0,2,192,3,56,0,1,96,0,1,128,5,0,2,192,3,120,0 ,0,15,0,1,60,0,0,56,249,8,0,2,4,0,1,16,0,1,32,0,3,17,16,0,0,192,0,8, 49,0,17,48,8,0,0,4,0,2,3,96,0,1,128,129,0,1,6,4,0,2,3,0,0,32,12,0,2, 32,81,252,0,3,2,0,1,8,0,1,64,0,1,32,4,136,0,1,224,0,0,1,0,4,32,4,48,0 ,17,48,1,34,0,3,3,97,32,0,0,160,5,0,1,22,0,3,35,66,0,0,12,8,0,0,52,0, 0,120,255,0,2,128,0,0,208,4,2,0,1,8,33,1,164,16,4,2,0,0,16,0,0,1,0,1, 104,0,0,1,32,16,0,16,32,8,37,129,2,16,16,0,0,64,145,104,65,45,48,8,0, 0,128,70,8,0,1,64,1,104,64,77,0,1,52,0,0,112,255,0,4,192,128,0,5,128, 129,48,16,0,5,96,0,1,128,0,0,1,0,15,129,0,1,32,4,196,0,2,2,96,0,0,12, 0,0,128,0,1,6,0,3,130,96,0,0,12,4,0,0,48,0,0,192,255,0,2,128,5,64,0,0 ,22,0,4,192,0,0,49,0,6,120,0,1,72,0,17,16,128,32,0,0,6,128,64,0,1,3, 96,0,1,128,1,0,1,6,0,3,3,98,0,0,12,4,0,0,60,0,0,200,248,8,0,1,128,2, 128,0,0,11,0,2,34,0,0,161,17,48,32,0,1,66,0,2,104,0,0,64,160,144,0,1, 4,0,5,16,2,0,5,136,9,128,32,22,66,0,2,35,1,32,8,132,33,0,2,2,0,2,3,0, 0,32,128,0,1,52,0,0,114,255,0,3,3,0,0,128,12,0,2,1,64,168,17,18,1,0,5 ,96,0,0,64,36,1,2,0,0,2,0,5,16,1,0,5,8,1,145,16,16,130,4,0,1,1,32,132 ,44,0,0,136,0,1,2,0,3,1,32,0,0,4,0,1,48,0,0,128,254,0,2,128,4,240,0,0 ,18,0,1,24,16,3,96,1,12,32,0,0,48,64,0,2,112,0,0,3,96,0,2,7,0,5,144,3 ,0,5,232,0,0,60,128,5,112,128,0,0,192,3,89,0,0,15,104,0,1,128,5,2,0,1 ,192,3,89,32,11,4,0,0,56,0,0,184,251,4,0,2,4,0,0,64,16,0,4,136,1,16, 16,0,0,128,32,0,2,96,0,2,1,0,0,128,5,0,5,208,2,0,5,136,1,0,1,4,129,64 ,0,1,3,0,1,12,128,65,0,6,3,0,4,48,0,0,25,253,0,3,2,128,0,0,8,0,1,64, 16,72,0,0,1,32,2,0,0,192,8,0,2,96,0,0,12,8,0,2,4,0,5,8,2,0,5,132,129, 144,16,22,64,4,0,1,67,80,129,68,129,16,0,1,165,0,3,19,82,129,74,1,0,0 ,48,0,0,40,252,0,29,4,0,6,2,0,35,248,251,32,0,0,4,128,0,0,16,0,0,2,64 ,0,0,8,0,0,1,0,1,4,128,0,0,16,0,0,2,0,1,8,0,0,1,0,1,4,0,7,2,0,6,33,0, 0,4,0,1,16,0,0,2,0,1,8,0,0,1,0,1,4,128,0,0,16,0,0,2,0,1,8,0,1,32,0,2, 8,255,0,74,152,255,36,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,132,4, 128,0,0,16,0,0,2,64,32,10,0,0,1,32,132,4,0,15,32,0,0,4,128,64,20,0,0, 2,64,8,12,0,0,1,32,132,4,128,0,0,16,0,0,2,64,32,9,0,0,33,36,0,0,132, 16,89,253,12,8,1,4,0,15,64,32,0,1,12,0,3,17,0,23,32,4,0,2,144,0,13,32 ,235,250,0,4,16,0,1,64,0,2,1,32,0,0,4,128,0,0,16,0,5,1,32,0,17,32,0,0 ,4,0,1,16,0,0,2,0,1,8,0,0,1,0,1,4,128,0,0,16,0,0,2,0,1,8,0,0,1,32,0,2 ,240,251,8,0,27,16,0,44,178,252,32,144,4,193,16,18,0,0,66,96,0,0,8, 129,1,32,132,4,128,0,0,16,0,0,2,73,8,12,36,1,32,132,4,0,15,32,0,0,4, 128,16,24,0,0,2,64,136,8,0,0,1,32,64,4,128,0,0,16,0,0,2,64,8,9,0,0,33 ,36,0,0,4,8,224,254,0,12,128,0,0,2,0,2,2,0,18,128,0,2,128,0,4,2,0,2, 128,0,1,1,0,0,64,0,3,8,0,0,1,0,6,136,0,0,120,249,0,20,128,1,0,25,1,0, 3,8,0,19,16,255,0,4,8,0,8,32,0,2,16,0,6,128,0,25,2,0,19,136,252,0,4,8 ,0,12,128,0,7,2,0,18,4,0,5,1,0,8,4,0,0,8,0,2,64,0,0,8,0,0,16,252,0,59 ,1,0,4,16,0,6,32,152,252,0,58,64,0,10,1,128,0,1,76,255,0,1,16,0,3,8,4 ,1,0,0,16,4,8,0,4,32,0,1,1,0,24,8,0,7,1,40,0,3,4,0,3,64,0,1,32,0,2,88 ,248,0,1,4,0,1,4,0,4,32,0,0,128,64,0,1,4,0,2,64,0,0,8,32,0,0,128,64,0 ,25,1,0,1,8,0,7,4,0,0,2,0,0,4,0,3,128,248,0,1,12,0,1,4,0,0,4,136,0,0, 192,96,42,36,45,161,128,0,1,64,0,0,192,0,0,8,64,0,0,32,5,1,0,18,16,0, 0,128,2,0,0,64,0,2,67,69,0,1,5,0,0,2,0,0,128,18,0,0,18,0,0,41,64,0,2, 144,251,128,0,0,160,128,0,0,128,0,1,20,10,64,0,0,36,0,1,128,0,2,4,0,0 ,6,72,32,0,1,128,97,1,0,17,16,0,0,2,1,2,48,0,0,9,5,0,0,64,34,1,52,6, 128,0,0,48,128,0,1,32,24,8,137,2,0,0,132,72,253,32,0,6,4,0,2,1,0,7,8, 0,0,8,0,1,32,0,0,1,0,17,8,128,0,0,2,0,2,2,0,2,8,0,0,32,0,2,128,0,2,32 ,64,0,0,128,0,2,8,253,0,1,32,0,1,16,0,1,128,0,0,8,0,9,16,128,0,2,128, 64,0,23,8,0,4,32,0,0,16,8,0,0,4,128,0,3,16,1,2,0,1,160,136,249,0,13, 128,0,7,64,0,3,2,0,17,8,0,1,1,0,19,16,0,2,128,248,0,15,32,0,0,16,0,8, 9,0,22,2,0,1,8,0,3,4,0,4,64,0,2,4,0,3,168,254,0,27,1,0,33,16,0,10,136 ,254,0,12,1,0,38,8,0,2,1,0,1,1,0,4,8,0,6,32,16,252,0,5,32,0,1,8,0,7,1 ,0,25,64,4,128,0,5,8,16,16,0,4,8,0,1,32,0,0,8,0,0,1,0,3,4,40,249,0,17 ,64,32,0,30,1,0,0,128,4,16,0,1,64,0,6,128,4,0,6,240,249,0,5,2,0,10,16 ,0,33,8,0,4,128,0,5,8,0,0,8,0,4,16,40,252,2,0,44,32,0,8,16,0,4,4,0,5, 128,0,4,88,254,0,3,4,0,6,2,0,1,16,32,0,29,16,0,0,16,0,8,1,0,4,16,64, 128,0,4,32,0,0,224,248,0,4,1,0,15,2,0,23,32,0,1,16,0,3,128,128,0,10,4 ,0,5,72,254,0,18,1,0,6,1,0,20,8,0,0,32,0,1,4,0,4,32,0,5,4,0,3,64,0,2, 255,0,13,32,0,12,16,0,17,128,0,6,32,0,18,32,254,0,12,64,0,4,128,0,1,4 ,2,0,22,4,128,0,0,2,0,4,64,0,12,2,4,0,2,80,249,0,1,4,0,9,128,0,0,2,0, 2,1,0,50,2,0,2,208,252,0,7,64,0,6,128,0,2,2,0,53,176,251,0,14,64,4,0, 1,2,0,33,2,0,0,8,0,2,32,0,1,128,0,4,16,0,4,200,251,0,49,32,16,0,18,64 ,0,2,136,249,0,37,1,0,0,16,4,0,1,16,0,29,250,253,0,15,16,0,7,32,4,0, 20,8,0,25,224,252,0,13,64,0,43,32,0,10,8,0,1,4,88,249,0,14,64,0,30,32 ,16,0,4,64,8,0,1,128,0,1,4,128,0,0,16,0,2,4,0,3,17,0,0,192,248,0,2, 128,1,0,9,16,0,3,1,0,3,4,64,0,21,4,0,24,24,250,16,0,16,128,0,36,8,0,9 ,64,0,0,8,0,4,192,251,0,0,32,0,17,64,0,25,80,0,0,8,0,4,2,0,2,4,0,3,2, 0,1,64,2,72,0,4,88,248,8,64,4,0,3,8,4,0,0,1,0,0,4,2,0,10,4,128,64,0, 16,64,0,0,16,0,2,128,2,0,1,8,64,2,32,0,1,32,0,0,4,0,0,2,4,0,2,2,0,2, 136,144,255,16,0,0,8,128,0,0,16,0,1,16,0,0,34,16,0,0,136,0,0,1,8,0,0, 128,0,2,128,0,0,32,0,3,8,0,16,1,0,1,4,32,0,1,1,0,1,1,0,3,2,0,3,1,64,0 ,3,33,0,0,202,251,0,0,128,12,128,0,0,16,0,0,4,24,0,0,203,64,2,44,5,1, 37,0,0,16,0,2,80,2,64,2,64,176,0,0,37,0,11,8,0,1,64,0,0,9,0,0,20,5, 192,132,66,0,0,16,32,3,64,0,1,144,0,0,2,20,4,72,10,8,0,0,66,1,40,165, 21,128,254,0,0,8,32,0,0,10,64,16,24,4,193,64,0,0,100,64,0,0,16,85,0,0 ,1,128,0,0,4,0,0,146,0,0,32,64,4,0,0,39,0,10,4,2,0,1,128,0,0,128,8, 130,17,0,0,136,4,130,8,0,0,4,34,0,0,16,42,4,64,17,128,18,131,8,0,0,1, 137,2,32,0,0,112,252,0,3,2,32,0,0,8,132,128,0,1,4,0,1,4,0,1,4,0,1,4,0 ,18,8,2,0,1,64,0,1,8,2,1,0,0,4,2,0,0,2,0,0,4,8,0,0,4,4,0,0,64,0,1,128 ,128,0,2,128,0,2,72,253,0,1,8,0,2,64,2,0,1,10,0,4,32,0,11,8,0,19,2,0, 2,1,0,6,2,0,0,32,0,0,4,1,0,2,8,0,0,4,0,0,128,255,16,0,18,1,32,0,15,8, 24,0,2,24,0,9,1,32,0,18,204,249,18,0,3,2,128,0,6,128,0,2,4,0,2,128,0, 3,64,0,8,128,4,0,1,18,1,0,6,1,0,3,64,0,1,2,0,1,8,0,0,5,32,0,0,16,0,3, 4,0,1,128,196,252,0,11,32,0,4,64,0,0,8,0,4,32,0,30,32,0,5,2,0,1,65,64 ,0,0,1,0,0,4,64,56,251,0,3,2,0,3,8,0,4,33,0,0,16,0,8,2,0,20,128,2,0,6 ,128,0,0,2,0,12,64,128,249,0,2,32,0,3,32,0,1,128,0,1,2,0,4,48,0,0,128 ,12,0,23,4,0,0,8,0,1,64,0,0,132,0,2,2,0,3,1,0,1,1,32,0,4,128,184,248, 0,3,4,0,8,3,0,3,64,0,6,1,0,18,12,0,7,64,0,0,32,1,0,1,8,0,0,1,0,1,2, 137,0,0,24,32,0,0,36,0,0,40,254,0,0,1,0,2,4,0,7,32,0,0,8,0,9,32,0,15, 128,0,21,2,0,2,8,0,2,120,254,0,21,4,0,24,128,0,3,64,0,4,2,0,12,64,0,0 ,120,251,0,9,32,0,0,1,0,1,1,0,10,4,0,19,32,1,0,5,128,16,16,64,64,64,0 ,6,128,16,0,0,4,0,0,8,0,0,252,0,9,128,0,6,128,0,1,64,0,25,72,0,0,36,0 ,4,1,0,1,128,0,0,128,0,7,1,0,2,16,200,253,0,8,4,0,4,4,0,1,32,0,2,64,0 ,17,32,0,3,2,64,64,0,2,16,0,1,64,0,2,32,10,0,4,128,0,0,128,0,0,8,0,1, 66,0,1,252,0,4,32,0,11,32,0,29,2,0,3,129,0,11,129,16,1,0,2,144,0,0,40 ,254,0,1,20,0,4,64,3,0,7,16,68,0,2,104,4,0,19,32,1,4,0,14,192,8,1,64, 99,0,6,96,255,0,1,32,0,5,3,0,12,96,64,0,19,128,64,0,15,192,0,2,1,0,5, 16,232,252,0,1,44,0,14,48,32,0,2,96,32,0,19,224,0,16,224,0,1,128,3,0, 4,60,8,208,253,0,1,20,0,14,16,0,3,96,0,20,32,1,0,0,64,0,13,16,72,0,0, 64,33,2,0,3,52,2,32,249,0,1,24,17,0,4,35,0,8,8,0,2,64,20,0,20,1,128, 32,0,13,208,34,0,0,64,34,2,0,4,2,232,253,0,1,32,0,4,192,131,0,7,48, 128,0,2,120,0,20,160,0,0,12,0,14,240,0,1,192,3,0,4,60,32,240,251,0,1, 32,0,5,3,0,8,32,0,2,96,0,20,128,0,1,16,0,17,2,0,6,24,248,0,1,16,9,0,4 ,35,1,0,6,128,2,0,2,96,66,0,20,1,48,0,14,192,128,0,0,64,3,0,4,176,8, 64,249,160,145,4,0,4,64,35,12,4,1,0,6,66,16,0,5,4,0,7,40,0,6,52,0,3, 80,0,2,131,0,7,192,8,1,0,6,48,66,184,250,128,0,7,3,0,0,64,0,24,12,0,6 ,6,0,3,128,0,2,3,0,17,48,0,0,72,250,192,1,44,0,4,192,1,0,0,32,12,8,0, 5,8,0,7,32,0,6,12,0,6,102,1,0,2,176,0,1,192,3,0,7,224,0,8,56,0,0,160, 249,168,128,20,0,4,64,138,0,1,64,0,6,72,8,0,6,1,0,6,10,0,6,165,0,3,80 ,0,1,64,3,0,7,208,20,0,7,4,33,178,248,32,17,24,17,0,4,35,64,132,0,0, 16,0,5,88,0,7,4,0,6,10,0,6,197,0,3,96,24,0,1,32,0,7,16,2,1,0,6,52,8, 240,248,192,1,33,0,4,192,131,24,0,0,3,0,6,30,16,0,5,60,0,15,32,1,0,2, 144,0,1,192,128,0,7,240,0,8,60,0,0,120,252,4,1,32,0,5,3,0,2,4,0,5,16, 8,0,6,16,0,15,1,0,2,128,0,11,192,128,0,8,16,177,254,128,1,16,8,0,4,10 ,1,66,0,7,80,0,23,128,0,3,64,32,0,10,192,0,8,176,0,0,64,250,160,133,4 ,0,4,64,144,0,7,208,40,0,2,8,0,20,32,0,3,16,0,5,1,0,1,4,0,4,64,16,1,0 ,5,40,249,128,1,0,15,192,0,38,4,0,4,64,0,1,3,0,5,16,152,252,128,65,44 ,0,5,128,0,7,192,64,0,16,18,0,6,105,1,0,2,176,0,11,240,0,8,60,8,176, 251,136,8,20,0,5,16,0,7,192,8,0,3,66,0,11,18,0,6,169,0,3,80,0,5,40,16 ,0,1,16,0,0,208,36,0,1,16,1,0,3,52,1,146,249,0,0,1,25,17,0,4,160,0,7, 192,36,0,2,96,20,0,19,192,0,3,96,24,0,4,128,2,0,1,66,0,1,8,0,1,3,2,0, 4,2,136,251,224,0,0,32,0,4,192,0,8,112,0,3,24,0,12,34,0,6,49,1,0,2, 144,0,5,7,0,1,60,0,1,240,128,0,0,192,1,0,4,60,32,0,0,254,4,1,32,0,5, 128,0,7,192,0,4,32,0,20,1,0,2,128,0,5,4,0,2,16,0,1,128,0,8,8,249,253, 128,16,145,8,0,4,10,0,7,192,68,0,16,8,0,6,132,0,3,64,34,0,4,4,16,0,3, 192,4,0,1,9,1,0,3,48,0,0,64,252,160,1,4,0,4,64,0,3,32,0,5,10,1,0,2,1, 32,80,0,16,32,0,3,16,0,1,64,16,0,1,141,4,0,5,2,64,16,1,0,5,48,255,128 ,1,0,17,16,16,0,14,32,0,6,16,0,8,1,0,0,12,0,5,64,0,8,16,48,253,96,0,0 ,44,0,10,64,0,4,24,0,4,8,0,9,2,0,6,97,1,0,2,176,0,1,192,0,0,2,0,0,12, 0,4,48,0,2,3,0,4,60,0,0,136,255,40,0,0,20,0,5,3,4,0,8,152,16,0,2,64,0 ,0,144,0,8,2,0,6,161,0,3,80,0,1,64,16,0,1,4,4,0,3,16,0,2,16,1,0,3,52, 34,202,248,0,0,4,25,17,0,4,32,0,3,68,0,4,136,0,3,64,0,0,136,0,8,8,0,6 ,196,0,3,96,24,0,2,1,0,0,44,0,5,8,64,0,0,18,4,0,4,2,40,251,64,0,0,32, 0,4,192,128,0,2,96,0,5,6,16,0,2,3,100,0,9,8,0,6,36,1,0,2,144,0,1,192, 0,2,15,4,0,3,48,128,6,208,0,5,60,32,32,252,132,1,32,0,5,3,0,2,128,65, 0,4,24,16,0,3,132,0,9,2,0,6,1,1,0,2,128,0,3,2,0,0,12,8,0,3,192,0,0,24 ,8,2,0,6,41,248,128,5,18,10,0,4,11,1,0,2,8,0,4,128,0,3,12,0,0,8,2,0,7 ,8,0,6,132,0,3,64,40,0,1,34,0,1,76,0,4,192,32,152,0,0,19,2,0,3,48,9, 176,249,32,5,37,17,0,2,130,64,1,0,7,16,0,9,128,4,0,5,66,2,0,5,33,0,3, 16,0,5,77,4,0,0,4,0,4,64,10,4,0,1,32,0,0,48,66,184,254,128,0,0,16,0,3 ,24,8,2,0,26,36,0,6,18,0,10,12,0,2,32,0,1,64,0,9,24,251,96,1,44,0,3, 24,192,2,0,19,1,0,5,128,0,6,96,1,0,2,176,0,5,12,0,2,16,0,0,240,32,0,1 ,3,0,4,56,0,0,200,255,168,0,0,20,0,3,152,96,161,0,18,128,8,0,5,80,4,0 ,5,168,0,3,80,0,5,128,4,0,3,208,2,0,1,138,0,4,52,33,137,248,0,0,1,40, 0,3,136,128,33,0,8,34,0,24,192,0,3,96,24,0,4,44,0,2,4,0,1,8,0,1,35,1, 0,2,16,4,1,59,253,192,0,0,32,0,3,6,16,2,1,0,6,48,0,10,2,0,6,1,0,5,32, 1,0,2,144,0,5,15,2,0,0,44,0,1,240,128,0,0,192,3,0,2,96,0,0,61,32,64, 251,4,1,32,0,3,8,144,130,0,7,192,0,26,1,0,2,128,32,0,4,4,0,8,3,0,2, 128,1,48,16,218,252,128,0,0,32,0,3,144,0,0,33,0,7,192,128,0,8,128,4,0 ,5,64,2,0,5,128,0,3,64,8,0,4,12,4,0,1,32,0,0,192,34,0,1,163,0,2,128,9 ,177,0,0,208,249,32,128,0,0,128,0,0,16,0,0,130,96,0,3,128,8,4,128,6, 16,128,0,0,64,3,4,0,0,1,0,18,32,0,1,128,0,0,144,24,2,0,1,8,0,0,5,32,0 ,3,192,8,1,64,131,8,0,4,66,248,255,0,0,1,0,2,4,0,0,24,0,5,1,1,0,0,6,0 ,3,3,0,5,128,0,6,64,0,11,68,0,5,8,0,16,160,253,64,0,3,2,0,0,24,192,2, 0,2,96,1,1,32,0,0,116,64,0,9,2,0,6,1,0,5,96,1,0,2,178,0,5,11,0,1,1,0, 1,240,128,0,0,192,131,96,64,0,2,12,0,0,208,254,40,33,0,3,128,152,80, 161,0,2,160,8,0,0,1,64,0,3,11,1,0,0,128,4,0,2,2,0,6,1,0,5,160,0,3,80, 0,0,152,2,0,1,32,133,130,1,0,2,16,8,0,0,64,10,0,4,4,0,0,225,249,160,8 ,0,1,130,0,0,72,144,128,33,0,2,192,0,1,1,70,20,66,0,1,10,2,0,0,64,4,0 ,1,128,0,6,64,0,6,192,0,2,128,160,0,0,24,1,0,1,68,134,0,1,2,0,5,32,96 ,65,0,2,48,2,19,250,64,64,0,0,128,1,240,0,0,6,16,2,1,0,2,1,60,144,7, 48,0,1,192,1,0,1,15,0,3,2,0,6,1,0,5,32,1,0,0,128,3,144,0,0,30,16,0,0, 24,0,0,9,232,1,0,2,240,0,1,192,0,0,26,0,3,60,8,144,253,132,0,5,16,144 ,130,0,2,64,1,0,0,16,0,0,1,0,2,2,2,0,4,128,0,6,64,0,7,1,0,2,128,0,0, 24,0,3,10,130,1,1,0,5,1,96,32,0,2,48,0,0,218,252,0,4,4,132,136,0,0,9, 0,2,128,0,2,6,144,72,0,0,128,0,2,64,16,0,2,9,0,5,128,4,0,5,128,0,3, 132,0,0,88,16,0,0,96,129,36,128,5,0,2,192,0,2,10,98,0,3,48,0,0,40,251 ,160,0,0,4,0,1,16,0,0,26,64,0,0,104,0,0,13,0,0,8,52,128,132,16,64,0,0 ,64,8,9,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0,16,8,0,4,1,32,0,4,8,1,64,8 ,9,4,0,4,48,250,128,1,1,8,0,2,24,0,3,12,0,1,1,0,0,6,64,0,10,4,0,6,2,0 ,10,64,32,0,16,64,0,3,16,224,251,96,64,28,0,2,128,24,192,2,0,2,96,1,1 ,32,4,2,0,25,96,1,48,32,0,0,4,32,0,4,11,0,1,1,0,1,48,0,2,128,0,0,64,0 ,2,60,0,0,32,253,168,16,0,0,8,0,1,4,152,96,161,0,0,64,0,0,160,8,0,0,1 ,22,0,0,20,0,1,16,1,0,3,1,18,0,14,160,0,2,6,0,0,8,0,4,133,130,1,0,2, 16,0,2,8,0,0,4,0,2,52,8,169,253,0,0,5,5,2,0,1,8,25,144,33,0,0,36,0,0, 192,0,1,1,70,0,3,19,98,8,0,1,144,48,17,0,6,6,0,6,195,0,0,48,64,192,0, 0,4,0,4,134,0,0,136,0,2,192,0,2,147,0,0,132,0,3,2,123,248,96,0,0,8,16 ,0,0,48,0,0,30,0,0,2,25,0,0,3,4,1,12,144,3,52,128,0,0,192,1,120,0,1, 96,0,0,12,0,15,32,1,12,128,7,48,32,0,4,9,232,1,0,2,240,32,0,0,192,1, 24,0,3,60,32,56,254,132,1,4,0,2,64,24,136,130,0,2,72,1,0,0,16,0,8,128 ,1,0,17,1,48,32,6,2,0,5,10,130,1,0,2,192,0,2,2,0,6,234,249,0,0,65,164 ,8,0,0,192,0,1,1,1,0,0,66,0,0,128,0,2,17,34,2,1,128,0,0,1,130,0,1,8,1 ,65,0,14,128,0,0,176,0,0,38,32,34,0,4,4,128,1,2,0,1,192,0,2,33,33,66, 0,2,176,16,104,255,48,16,6,138,6,0,2,64,34,0,1,65,0,0,9,0,0,128,0,0, 16,16,74,64,35,104,33,0,0,160,17,0,16,32,1,0,2,16,36,130,80,16,0,1, 137,32,0,0,180,192,38,4,0,0,2,64,32,4,0,0,1,32,0,1,66,24,254,128,0,2, 6,0,3,1,1,0,1,132,0,0,1,0,0,6,68,0,0,16,8,1,98,0,1,128,129,0,16,128,0 ,3,64,0,3,1,0,0,4,8,0,0,48,0,0,4,0,0,64,0,9,56,250,224,0,0,1,0,0,6,0, 2,192,2,0,1,3,100,1,1,0,0,6,2,0,1,16,3,97,32,0,0,128,1,1,0,7,4,0,6,98 ,1,0,7,2,0,0,11,0,1,49,0,0,6,240,0,1,208,1,2,0,0,12,136,1,13,0,0,72, 254,12,16,0,0,10,6,0,2,64,161,0,1,65,160,8,0,1,6,0,0,2,89,0,0,33,96,0 ,1,128,9,0,1,4,0,5,16,2,0,5,168,0,4,34,136,32,16,0,1,5,128,1,48,16,6, 212,2,25,0,0,32,0,4,4,0,0,162,249,36,69,0,0,17,0,3,128,2,0,1,64,192,0 ,2,36,0,0,8,81,0,0,18,64,20,0,0,128,33,0,1,2,0,5,16,1,0,5,200,0,4,34, 0,2,1,0,0,74,0,0,4,48,4,6,0,0,8,0,0,96,0,2,76,132,1,50,9,240,254,64,0 ,0,12,128,1,2,0,2,2,0,1,3,8,1,0,0,128,1,52,0,0,14,208,3,122,0,1,224,1 ,0,1,7,0,5,144,3,0,5,40,1,0,2,48,0,0,6,208,0,2,9,226,1,61,128,7,244, 128,30,192,128,0,1,3,96,0,0,60,0,0,240,248,4,0,1,8,6,0,2,128,2,0,2, 192,0,2,4,4,0,0,24,8,0,0,98,0,1,128,129,0,0,128,5,0,5,208,2,0,5,136,0 ,6,8,0,0,2,0,0,8,128,129,48,16,6,2,0,0,24,16,0,2,12,128,1,49,0,0,113, 255,0,0,41,32,2,70,4,0,2,2,0,1,40,8,1,0,1,34,0,0,132,64,0,0,16,96,66, 0,0,128,0,2,4,0,5,8,2,0,5,4,1,0,3,40,0,1,34,0,1,8,128,1,16,0,0,6,192, 40,24,65,82,0,1,12,144,17,48,0,0,104,250,0,2,34,0,25,4,0,6,2,0,35,248 ,249,32,0,1,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,2,2,64,0,0 ,8,0,0,1,32,0,0,4,0,7,8,0,6,36,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1, 32,0,0,4,128,0,0,16,0,0,2,0,1,8,0,0,1,32,0,0,4,0,0,64,251,0,74,152, 255,40,0,1,192,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,8,3,64 ,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1, 32,0,0,4,128,0,0,16,0,0,2,64,0,0,9,0,0,1,32,0,0,4,0,0,9,254,0,0,16,1, 18,0,9,16,1,0,58,139,255,0,2,128,0,0,16,0,0,2,0,0,128,8,0,3,4,128,0,2 ,2,64,0,0,8,0,0,1,32,0,0,4,0,17,4,128,0,2,2,0,1,8,0,1,32,0,0,4,128,0, 2,2,0,1,8,0,0,1,32,0,2,56,248,4,0,1,16,0,5,1,0,2,128,0,3,128,0,30,64, 0,5,4,0,4,64,0,2,1,0,4,16,122,249,0,0,32,0,0,129,0,0,16,0,0,2,0,0,16, 8,0,0,1,40,8,4,128,0,0,16,8,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,5, 128,0,0,16,4,2,64,0,0,10,0,0,65,32,0,0,4,128,0,0,16,4,2,64,16,8,0,0,1 ,32,0,0,4,1,72,251,0,18,64,0,37,4,0,7,4,0,6,216,251,0,74,152,255,0,17 ,32,0,0,8,0,0,12,0,40,2,0,9,176,249,0,17,16,0,1,8,64,0,40,16,0,9,208, 250,0,11,8,4,0,8,32,0,21,128,0,6,2,1,0,12,8,0,4,176,250,0,19,1,0,37, 64,0,6,8,0,7,251,0,1,16,8,0,5,16,0,0,1,2,0,0,16,0,0,4,1,0,8,1,0,15, 128,64,0,27,16,248,0,10,64,2,0,1,4,0,0,2,0,28,16,136,0,2,16,0,9,128,0 ,10,192,253,128,0,0,24,24,0,5,16,64,3,6,0,0,12,128,1,2,0,2,10,0,3,128 ,0,16,192,168,20,160,0,2,2,0,6,16,0,1,17,0,2,128,0,6,64,250,160,67,0, 0,88,0,0,64,0,2,128,0,1,68,8,0,0,128,0,0,48,64,0,1,40,8,168,0,0,149, 180,209,2,0,16,192,130,0,1,1,32,50,0,0,193,5,0,5,96,10,0,0,16,0,2,16, 0,1,64,48,80,40,255,64,64,0,0,8,0,0,16,0,2,128,0,1,2,0,4,16,0,3,32,0, 0,4,128,64,0,17,64,0,2,2,64,0,1,130,0,13,64,0,2,17,0,0,56,248,128,0, 24,64,0,24,8,0,1,1,0,8,8,0,6,4,0,0,16,254,0,0,2,0,54,16,0,2,64,0,12, 200,249,0,8,2,0,8,64,0,47,1,0,5,232,249,0,0,64,0,2,1,0,13,1,0,5,2,0, 28,32,0,16,216,249,16,0,6,32,0,0,2,0,0,32,0,0,4,0,31,128,32,16,0,8,4, 1,0,3,64,0,2,1,32,8,4,0,1,180,248,0,74,152,255,0,74,152,255,16,0,73, 204,251,0,12,2,0,39,64,0,10,2,0,4,32,0,1,250,253,0,0,32,0,14,2,0,3,1, 2,0,23,4,0,9,32,0,6,128,0,6,240,250,0,0,4,136,0,0,8,0,6,16,0,3,128,0, 0,1,0,26,8,0,8,8,64,0,7,2,16,0,5,72,253,0,0,4,0,5,16,0,3,8,4,32,0,8,8 ,0,0,1,32,0,45,200,249,64,0,55,2,0,16,248,253,0,17,64,0,12,32,0,2,32, 0,2,16,0,2,16,0,29,232,253,0,16,4,0,3,2,0,51,216,253,0,0,128,0,72,144 ,255,0,17,2,0,2,8,0,33,16,0,8,4,0,4,32,0,1,251,0,12,2,0,20,16,0,6,8,0 ,4,1,0,2,128,0,20,152,253,0,17,32,0,13,2,0,33,4,0,5,216,253,128,0,3,2 ,66,0,3,32,0,8,8,0,0,1,64,0,1,132,128,0,20,18,0,1,16,0,2,8,0,1,64,16, 0,0,2,0,2,1,0,0,32,0,1,128,0,1,48,249,0,1,1,0,0,1,34,64,0,0,8,0,0,16, 32,2,0,1,8,0,0,1,0,4,16,32,2,64,128,8,0,11,1,0,6,1,2,0,0,4,8,0,5,8,16 ,1,2,0,3,2,40,0,1,128,0,1,120,252,36,0,5,64,0,5,64,0,1,16,0,1,64,0,41 ,128,0,0,5,0,0,2,0,4,16,0,0,120,253,0,0,128,0,19,1,0,1,4,128,0,0,16,0 ,36,128,0,7,136,251,0,1,8,0,4,128,0,3,64,0,3,128,2,0,29,32,0,4,128,2, 0,4,32,0,1,128,8,0,4,8,0,0,88,249,0,17,64,16,0,0,4,0,7,1,0,0,130,4,0, 1,130,128,0,1,65,2,0,1,65,0,10,1,0,17,184,252,32,0,0,16,0,0,129,0,4, 16,0,10,1,0,4,8,0,22,4,0,4,34,0,1,32,2,0,0,32,0,4,2,64,0,0,4,128,160, 249,4,64,0,4,8,16,1,32,0,7,32,4,0,4,128,0,7,128,0,10,16,0,0,2,64,0,5, 4,128,0,0,16,0,5,1,8,0,4,32,152,255,64,69,9,0,0,1,130,2,130,82,80,24, 0,3,16,0,2,128,2,128,0,2,4,32,5,24,0,3,4,0,0,64,0,4,2,0,2,128,0,0,20, 128,0,0,16,0,0,4,0,3,1,100,0,0,4,21,1,128,66,8,64,0,0,8,0,0,2,66,64,8 ,32,104,252,0,0,143,214,82,2,10,96,49,0,0,81,0,0,1,130,150,144,2,12,0 ,0,5,64,5,4,9,37,188,32,128,4,128,0,3,8,0,6,4,2,32,0,0,32,164,230,86, 4,4,0,0,4,4,2,64,168,8,1,33,136,0,0,20,192,2,64,128,72,141,0,0,200,55 ,8,100,8,208,255,0,1,8,0,0,2,0,0,64,0,0,64,0,3,68,0,1,16,0,0,4,0,1,72 ,0,0,64,32,0,0,32,0,5,16,0,6,8,1,64,0,8,4,0,8,64,0,6,4,0,1,8,32,255, 128,0,5,8,0,0,128,0,5,32,0,6,16,0,20,64,16,136,0,3,128,0,0,16,16,4,66 ,64,0,1,1,32,0,2,128,0,1,2,2,0,0,16,0,0,120,253,16,0,7,2,0,19,1,16,0, 0,5,0,1,16,129,0,0,8,128,2,0,1,136,0,9,128,0,9,16,0,5,1,0,0,148,252,2 ,32,0,14,16,0,11,4,64,0,0,16,0,0,64,0,1,2,32,0,0,8,0,0,32,0,7,2,4,0, 11,4,192,0,5,128,232,250,2,0,0,66,0,8,32,0,1,128,0,4,2,0,2,32,0,31,16 ,0,6,64,0,0,4,0,4,128,160,248,0,2,32,0,15,16,0,53,184,254,0,11,2,0,40 ,8,0,18,128,124,249,0,52,2,0,7,128,16,0,10,32,255,0,7,4,0,8,1,0,1,4, 128,0,8,16,0,6,8,0,11,8,0,9,64,0,2,1,0,4,16,216,254,32,0,0,16,0,2,128 ,0,3,64,0,24,1,0,5,128,0,15,32,0,3,64,0,1,64,0,4,144,249,64,0,5,16,0, 0,4,0,7,2,0,6,8,0,0,1,32,0,43,8,168,251,0,6,8,0,7,128,0,4,4,0,33,4,0, 5,129,0,1,1,0,4,64,48,16,248,0,21,64,0,0,32,0,22,160,0,10,1,0,13,72, 250,0,2,128,0,14,128,0,2,8,0,1,32,0,0,4,0,18,128,0,8,136,0,0,4,0,2,2, 0,4,4,0,3,208,251,160,0,0,6,0,5,3,100,128,0,4,38,0,10,10,0,14,32,136, 0,2,208,0,5,5,0,4,192,128,0,9,240,252,128,0,7,3,96,0,6,2,0,30,192,0,5 ,8,0,16,232,252,96,1,48,32,0,3,192,3,120,0,4,128,7,0,9,12,0,15,128,65 ,0,3,128,0,4,11,0,4,240,128,0,9,232,255,160,0,0,48,2,0,3,64,3,104,0,4 ,128,160,0,9,4,0,15,128,1,0,3,4,0,4,5,0,4,16,2,0,9,192,251,64,145,128 ,0,5,3,96,0,17,65,0,14,128,16,0,2,192,2,0,4,70,8,0,15,152,255,0,0,1, 60,32,0,3,128,3,112,0,5,7,0,9,8,0,15,96,0,0,1,0,1,48,32,0,4,8,0,4,224 ,0,10,240,250,0,0,1,1,0,5,3,96,0,4,128,0,10,48,0,15,128,0,0,1,0,1,192 ,0,5,8,8,0,15,120,252,128,4,48,34,0,4,3,96,0,5,6,0,9,48,34,0,15,4,0,3 ,130,0,4,36,0,4,192,0,10,56,252,32,0,0,2,0,9,32,0,0,176,64,0,4,35,4,4 ,0,11,34,0,6,17,0,10,1,0,2,128,2,193,128,0,2,96,0,1,128,73,52,9,216, 253,0,22,96,64,0,11,12,0,6,6,0,15,4,0,5,32,0,2,48,0,0,96,248,96,1,0, 11,128,60,0,4,192,3,16,32,0,11,12,0,6,6,0,10,11,0,4,240,64,0,2,120,0, 1,224,1,48,8,32,254,168,0,12,8,4,5,0,3,64,0,0,106,4,0,11,10,0,6,5,0, 10,5,0,3,22,18,0,3,8,10,0,0,32,40,48,0,0,26,252,64,145,0,10,128,5,0,7 ,104,0,12,10,0,6,5,0,10,70,8,0,2,68,2,0,8,176,16,48,252,0,0,1,0,10, 224,129,56,0,4,128,3,16,64,0,31,8,0,2,128,3,224,0,3,112,0,1,192,1,12, 0,0,80,252,4,1,0,20,104,0,32,8,0,3,6,0,9,32,16,1,254,128,132,0,10,128 ,9,50,0,5,3,8,0,32,36,4,0,2,16,193,0,3,96,0,1,128,1,24,2,136,252,48,0 ,0,2,128,22,200,2,1,0,1,96,0,0,13,0,4,208,0,2,3,72,4,0,0,164,9,22,16, 0,19,192,8,1,0,1,96,0,0,1,0,3,6,192,128,0,1,3,1,0,3,132,8,24,255,0,3, 2,0,5,64,12,0,9,34,16,0,1,1,32,0,26,32,0,5,4,0,8,48,0,0,160,249,96,1, 0,1,6,240,0,3,120,0,0,15,0,4,192,0,1,192,3,0,1,14,128,1,48,0,20,240, 128,0,2,120,0,0,11,0,2,128,7,240,0,1,192,3,2,0,3,32,8,208,250,172,0,2 ,70,17,128,0,2,8,10,13,0,4,192,4,1,64,80,96,68,129,136,41,160,16,0,19 ,16,8,0,2,8,10,5,0,2,128,160,16,132,0,0,64,0,5,16,1,138,252,68,145,0, 1,20,2,0,12,2,0,2,32,0,0,129,136,1,2,17,0,26,70,8,0,13,176,16,32,249, 0,0,1,0,0,128,7,224,0,3,112,0,0,2,4,0,3,48,128,0,0,128,3,88,32,3,224, 1,12,0,20,224,0,3,112,0,0,8,0,3,7,224,0,1,128,3,0,4,60,0,0,144,253,4, 1,1,0,1,1,0,3,8,0,6,192,0,3,96,16,0,0,128,129,0,0,32,0,26,8,4,0,13,48 ,16,177,248,128,16,0,1,22,192,0,3,104,0,6,192,66,0,1,3,0,0,4,12,208,5 ,48,0,20,192,0,3,96,0,0,4,0,3,6,192,0,2,3,0,4,48,2,192,251,32,0,0,2,0 ,0,70,200,66,0,4,13,128,9,0,4,154,0,2,4,13,32,1,0,0,10,0,6,4,0,6,2,0, 10,1,0,4,208,0,0,2,0,0,3,1,0,0,76,8,0,2,184,249,0,11,12,0,0,128,0,4, 16,8,0,0,96,64,12,132,1,1,0,7,18,0,6,9,0,16,192,32,0,4,12,0,3,32,252, 96,1,0,0,128,7,240,0,5,15,224,1,1,0,3,30,0,1,16,32,12,2,1,12,0,27,11, 0,4,192,0,0,24,192,3,1,0,0,15,0,3,48,249,168,0,1,128,128,16,20,0,4,13 ,32,4,0,4,24,17,0,0,104,1,128,128,16,6,0,7,4,0,6,2,0,10,5,0,4,192,34, 88,96,32,0,1,13,0,3,153,252,64,145,0,9,32,0,6,74,8,0,0,104,132,140,4, 133,0,0,65,0,6,8,0,6,4,0,10,70,8,0,3,192,66,64,0,3,12,0,3,83,251,0,0, 1,0,1,7,224,0,5,2,196,1,0,4,30,0,1,16,0,0,15,224,0,0,8,0,7,4,0,6,2,0, 10,8,0,4,48,0,0,30,144,3,0,1,14,0,3,224,254,4,1,0,2,16,0,6,32,0,5,24, 0,1,104,0,0,4,8,1,48,0,7,8,0,6,4,0,10,8,0,4,128,64,0,4,12,0,3,242,254 ,128,0,0,2,0,0,6,192,0,6,128,1,0,4,152,16,0,0,8,0,0,140,128,40,48,17, 0,6,8,0,6,4,0,10,4,16,0,3,96,8,24,33,3,0,1,12,0,3,120,252,32,0,0,50, 192,6,0,1,24,9,0,2,41,2,0,0,48,66,22,8,0,0,26,1,0,0,104,0,0,9,0,1,4, 64,0,18,38,20,34,0,4,1,0,2,128,16,16,8,2,0,0,3,1,0,1,32,0,0,48,0,0,40 ,253,0,1,48,0,0,6,0,6,4,0,6,16,16,0,0,96,0,1,8,0,0,48,0,7,16,0,24,194 ,32,0,8,32,168,249,96,1,60,0,1,4,0,0,30,0,6,60,160,7,0,1,24,0,1,120,0 ,0,8,0,1,48,0,7,2,0,6,9,0,1,128,7,0,6,11,0,3,2,129,32,24,200,3,0,4,60 ,0,0,184,248,164,0,0,52,0,3,130,2,0,2,140,8,0,0,132,128,160,0,1,152, 32,0,0,104,0,0,128,4,0,0,48,4,0,6,16,0,6,10,0,1,128,0,0,4,36,0,4,5,0, 3,34,64,4,24,64,80,0,4,132,16,146,251,76,145,48,0,0,22,1,0,5,4,4,0,5, 152,0,2,32,44,0,1,48,2,0,20,8,0,4,70,8,0,2,70,194,66,64,0,5,16,2,0,0, 40,251,0,0,1,56,128,1,0,1,28,0,3,11,0,1,56,0,0,7,0,1,30,4,0,0,16,0,0, 15,4,0,0,44,32,0,17,128,7,48,128,0,4,8,0,2,128,7,240,0,0,30,144,3,0,2 ,96,0,0,56,0,0,248,254,8,129,48,0,0,6,0,6,12,0,6,24,0,4,4,0,0,48,0,0, 1,0,5,128,0,11,64,32,0,4,8,4,0,2,4,192,64,0,5,128,1,0,1,89,248,128,16 ,52,0,0,16,4,0,0,24,0,3,32,2,0,0,48,0,0,6,0,1,152,8,0,2,132,0,1,176, 136,4,0,5,64,2,0,9,6,192,0,5,132,0,3,20,193,8,24,32,3,0,2,128,1,49,0, 0,176,254,32,0,0,2,0,0,70,8,0,9,128,6,0,1,10,8,0,0,104,0,0,1,0,1,148, 0,21,8,1,0,3,1,128,5,2,0,1,80,136,2,0,0,3,1,0,1,128,73,48,0,0,96,252, 0,11,12,8,0,2,6,0,1,24,0,1,96,0,4,32,1,0,5,128,0,11,192,0,11,192,0,9, 32,232,249,96,1,0,0,128,7,4,0,5,2,0,2,128,7,0,1,8,0,1,120,0,0,12,0,1, 24,32,2,0,6,1,0,10,32,0,5,11,224,1,0,4,24,192,3,0,2,224,1,60,0,0,96, 252,168,0,1,128,64,0,6,77,1,0,1,128,6,0,1,24,16,0,0,104,0,0,76,16,0,0 ,4,2,1,0,5,128,0,11,208,64,0,4,5,32,0,0,1,0,1,64,136,152,80,0,0,2,0,1 ,32,132,4,64,146,250,64,145,0,9,77,4,0,2,6,0,1,88,32,0,1,4,128,0,1,4, 0,0,2,0,6,1,0,10,208,2,0,4,70,8,0,3,192,2,65,0,8,176,254,0,0,1,0,1,7, 0,6,2,0,2,128,7,0,1,22,0,1,16,32,15,4,0,0,40,32,2,0,6,1,0,10,32,64,0, 4,8,192,1,0,2,240,0,0,30,144,3,0,2,192,1,56,0,0,96,252,4,1,0,9,13,0,3 ,6,0,6,12,0,10,18,0,6,2,0,3,192,0,5,8,0,4,192,0,1,8,0,7,1,255,128,40, 0,1,6,0,6,1,0,2,128,6,0,1,132,32,0,2,140,2,0,0,36,0,0,4,0,5,16,2,0,5, 1,0,10,68,129,1,0,2,224,130,88,0,0,3,0,2,128,1,48,0,0,24,255,32,0,0,2 ,0,0,64,8,0,0,24,64,0,3,128,145,0,2,144,2,3,0,1,72,18,12,4,0,0,4,128, 0,6,66,0,6,164,133,4,0,1,208,64,88,32,0,2,1,128,5,2,0,1,208,0,1,64,11 ,0,1,13,128,73,48,0,0,224,249,0,3,6,0,2,16,0,2,12,8,0,3,192,0,1,8,0,0 ,96,0,4,16,3,0,5,128,1,0,5,138,1,0,2,64,0,11,192,64,0,1,131,0,5,32, 152,250,96,1,0,1,1,0,1,30,0,0,3,1,0,0,14,228,1,0,2,128,0,3,64,0,0,15, 0,1,60,0,7,16,0,6,128,0,0,48,0,1,192,32,30,0,3,11,224,1,0,2,192,0,2,3 ,0,2,224,1,60,0,0,240,253,168,0,1,128,38,2,0,0,2,16,19,0,1,45,32,0,0, 1,0,1,192,128,24,9,0,0,96,64,33,8,0,0,32,34,0,14,128,133,48,34,0,0, 192,4,130,2,0,2,5,32,40,0,2,192,40,0,1,163,0,2,40,8,6,5,74,254,64,145 ,0,0,128,22,0,3,32,4,0,0,141,16,0,3,192,0,1,9,0,0,96,66,0,2,132,8,0,6 ,6,0,6,136,5,130,0,1,128,2,1,0,3,70,8,0,3,64,2,1,0,0,10,0,2,8,0,2,240 ,255,0,0,1,0,1,1,2,0,0,28,192,3,0,1,2,192,1,0,2,112,64,6,0,1,56,0,0, 15,0,1,8,0,15,224,0,0,60,32,0,0,240,0,0,28,0,3,8,192,1,0,2,176,0,1, 192,1,1,0,0,15,192,1,56,0,0,184,254,4,1,1,0,0,6,0,6,13,8,0,5,16,16,0, 5,16,0,15,128,1,1,0,8,8,8,0,7,3,1,0,0,12,0,3,129,254,128,0,5,24,0,0,3 ,2,0,0,45,128,1,0,2,32,4,65,0,1,16,130,12,0,1,52,66,0,14,64,0,0,48,5, 0,0,192,34,24,0,3,4,128,1,0,2,192,66,0,0,128,8,0,1,140,136,1,48,0,0, 160,251,32,1,50,192,64,193,66,152,0,0,11,96,36,12,0,1,48,66,0,0,16,2, 26,0,0,11,9,1,45,32,144,4,1,0,14,160,133,48,194,6,192,8,25,97,0,2,9,0 ,1,48,66,6,192,128,0,0,64,138,96,0,1,128,73,48,0,0,96,250,128,0,0,48, 0,4,16,0,0,2,0,1,8,0,4,64,24,0,2,32,0,0,130,1,0,0,32,0,6,12,0,6,134,1 ,0,9,4,0,4,4,0,2,1,0,0,32,0,3,32,128,249,96,1,60,0,1,241,0,0,30,192,3 ,120,0,0,15,0,1,60,0,3,24,192,3,96,0,1,2,1,48,0,15,128,1,60,32,0,0, 240,0,0,30,0,3,11,0,1,60,0,0,7,244,0,2,128,120,0,1,224,1,61,0,0,96, 255,168,0,0,52,0,0,64,16,128,2,80,8,9,10,1,8,0,0,4,5,0,0,192,72,152, 66,80,0,0,8,0,0,128,8,33,17,4,0,5,16,2,0,5,8,133,4,0,0,32,24,16,2,16, 19,1,0,0,5,0,1,132,144,16,16,20,0,1,35,8,64,0,0,32,0,0,4,32,42,254,64 ,145,48,0,1,2,0,12,4,129,8,0,1,8,4,8,33,0,0,1,2,0,5,16,1,0,5,8,1,2,0, 0,16,0,3,19,0,1,70,8,0,1,128,64,4,0,2,11,0,6,136,248,0,0,1,56,128,1, 224,0,0,28,128,3,112,0,0,14,0,1,56,0,1,48,0,0,6,128,3,24,0,0,11,224,0 ,0,12,16,7,0,5,144,3,0,5,232,1,56,128,1,228,0,0,28,192,0,0,1,0,0,8,0, 1,56,0,0,7,224,0,1,192,3,113,0,1,192,1,56,0,0,240,254,4,1,48,0,0,2,16 ,0,0,2,64,0,0,8,0,0,1,0,4,128,64,24,68,0,1,64,0,1,1,0,0,128,5,0,5,208 ,2,0,5,8,0,7,3,2,0,0,4,0,8,3,1,0,5,137,250,0,0,1,49,0,0,22,193,0,0,24 ,64,3,104,0,0,13,0,1,48,0,2,2,0,0,1,3,32,1,0,0,132,16,2,66,4,0,5,8,2, 0,5,132,33,48,0,0,64,194,0,0,24,0,0,32,0,1,8,8,0,0,48,0,0,6,192,0,2, 11,96,0,1,128,1,48,0,0,184,248,0,5,68,128,8,32,1,12,128,8,136,0,1,32, 2,0,2,16,1,68,0,4,4,0,6,2,0,35,176,251,32,0,0,4,128,0,0,16,0,0,2,0,4, 32,0,0,4,0,1,16,0,0,2,64,0,2,1,32,0,9,2,0,6,33,0,0,4,128,0,0,16,0,0,2 ,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0 ,152,253,0,17,2,0,9,32,0,44,184,255,40,0,0,4,146,0,0,16,0,0,2,0,0,32, 1,36,129,36,0,0,4,128,32,16,0,0,2,64,0,0,8,36,1,32,0,0,4,2,0,14,32,0, 0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0, 8,0,0,1,32,0,0,4,0,0,153,249,0,0,48,128,64,64,2,72,0,0,3,8,4,129,128, 2,48,0,0,18,0,4,32,1,2,0,3,18,0,17,6,0,1,72,0,0,3,0,1,12,128,1,48,0,0 ,6,32,2,24,0,1,96,0,0,12,0,1,48,0,0,6,227,253,0,7,64,0,8,17,0,4,16,0, 0,32,0,17,32,0,6,64,0,10,2,0,4,4,0,2,200,252,4,0,1,32,0,8,4,0,6,16,0, 1,32,0,49,234,253,0,0,144,128,0,0,64,2,72,0,0,9,16,1,33,33,0,0,132,0, 0,18,16,18,0,0,130,0,0,32,9,1,129,48,0,1,18,0,14,32,0,1,146,64,2,72,0 ,0,73,0,1,36,0,0,4,144,0,0,146,64,2,72,2,0,0,32,1,36,129,4,144,0,0,18 ,208,250,0,3,4,128,0,0,16,0,0,2,64,0,0,8,0,1,32,0,3,1,0,0,2,64,0,3,32 ,0,17,32,0,0,4,128,0,0,16,0,0,2,64,0,2,1,32,0,0,4,128,0,2,2,64,0,0,8, 0,0,1,32,0,0,200,252,0,13,1,0,1,4,0,4,8,0,0,8,0,1,2,0,17,4,0,26,128, 253,0,6,1,0,5,1,0,0,64,4,136,0,0,16,0,2,8,8,128,0,23,1,1,0,21,24,251, 0,8,132,0,12,128,0,1,1,0,36,1,0,9,192,250,32,0,5,2,0,1,8,0,1,96,0,2,1 ,0,9,8,0,14,16,0,1,4,0,3,2,32,0,0,8,0,0,1,32,0,0,6,0,1,16,0,1,64,0,0, 8,0,1,32,0,0,4,0,0,128,249,0,3,1,32,0,1,128,0,5,8,0,3,2,128,0,3,16,0, 0,8,0,2,16,0,2,16,0,2,8,0,8,32,0,23,168,254,0,4,4,0,0,16,4,0,1,16,0,0 ,8,0,1,8,132,64,0,0,2,0,0,2,0,1,4,4,0,17,32,32,0,5,64,0,3,4,0,0,4,0,3 ,2,0,9,255,32,0,1,8,0,6,64,0,13,64,0,19,4,0,26,240,255,32,0,1,32,20,2 ,24,4,8,0,1,96,40,4,0,0,160,16,1,34,0,0,4,128,10,64,1,66,37,40,0,16, 64,168,4,0,0,180,0,2,128,0,0,64,1,104,5,0,0,8,0,3,4,0,8,184,248,192, 65,80,134,18,80,0,0,128,4,0,2,130,21,0,0,128,33,0,0,144,1,2,41,0,0,96 ,0,0,68,194,74,0,0,10,0,15,64,0,1,48,0,0,16,0,1,130,136,0,1,8,0,2,128 ,0,0,136,16,0,2,64,1,0,1,33,8,56,252,2,65,16,0,0,1,64,0,1,8,0,13,32,0 ,0,1,40,0,0,1,8,0,16,1,0,6,2,0,17,8,249,255,136,0,1,8,0,8,1,0,3,64,0, 3,8,0,26,128,0,1,2,0,7,1,0,0,8,0,6,4,0,0,232,249,0,64,8,0,8,24,255,0, 24,32,0,24,32,0,22,152,253,0,0,1,1,0,0,1,0,2,4,0,2,4,0,7,4,0,0,160,0, 21,32,0,23,2,0,2,64,255,0,3,8,0,17,32,0,2,128,0,35,2,0,0,8,0,7,152, 255,0,2,4,0,10,1,0,2,128,8,16,0,1,64,0,0,8,0,1,32,0,19,36,0,23,208, 250,0,53,4,0,14,16,0,3,200,250,0,74,152,255,0,2,4,0,69,128,80,251,0,2 ,32,0,0,72,0,3,2,64,0,0,2,0,4,64,0,0,8,1,16,48,0,40,32,0,7,96,251,8,0 ,3,1,0,18,2,2,0,0,128,0,25,128,0,8,4,0,1,128,0,5,104,253,0,50,64,0,22 ,216,255,0,29,1,0,1,4,0,2,128,0,2,2,0,32,224,250,0,30,16,0,2,16,0,2,8 ,0,2,8,0,6,2,0,22,40,253,0,17,128,0,3,64,0,3,32,0,34,32,0,9,24,251,0, 3,2,0,4,1,0,33,128,0,16,64,0,2,1,0,4,16,0,0,72,252,0,3,16,0,14,32,0,3 ,16,0,2,16,0,23,64,0,2,1,0,15,216,253,0,7,128,0,3,1,0,47,128,0,11,152 ,254,96,0,3,80,0,0,8,0,1,8,0,0,32,128,0,1,128,2,0,3,1,0,0,1,0,18,1,0, 6,2,0,1,8,0,0,1,0,2,128,2,0,2,64,0,3,32,0,0,4,0,0,8,255,0,0,160,0,3, 64,0,0,8,0,3,4,160,0,0,4,0,5,1,0,11,34,0,4,4,0,6,2,0,1,8,0,3,5,128,0, 3,16,1,0,1,1,32,0,2,1,16,176,253,128,36,0,0,8,128,0,1,2,0,1,2,0,0,4,0 ,1,4,0,2,32,0,0,64,0,1,32,0,7,2,0,1,64,0,9,128,8,0,0,1,16,0,4,38,32,0 ,0,32,0,0,16,48,64,0,0,4,9,8,0,2,4,0,1,160,249,0,25,2,0,1,8,0,26,16,0 ,16,40,255,0,11,24,0,6,8,0,3,4,0,1,16,4,0,14,128,1,0,0,32,0,1,128,0,0 ,16,0,6,32,1,192,0,2,2,0,4,16,0,0,144,251,0,2,128,0,15,64,0,6,1,0,2, 16,0,2,16,0,2,8,0,2,8,0,4,16,0,20,128,0,1,128,250,0,0,1,0,25,64,0,5, 64,0,6,40,0,12,8,0,14,32,0,0,88,254,128,0,0,16,8,1,128,0,1,2,64,0,1,4 ,0,1,4,0,8,1,0,0,128,0,12,8,0,18,4,1,128,0,9,16,104,251,0,0,64,0,4,8, 0,12,128,0,2,2,0,0,1,0,18,16,0,1,64,0,14,4,0,4,128,0,2,249,64,5,169, 16,21,160,22,130,10,0,0,1,0,0,66,1,40,8,0,1,128,2,0,0,64,0,0,64,1,3, 32,168,16,0,3,2,16,16,0,4,9,8,8,0,2,4,0,0,160,16,20,80,0,2,16,40,0,0, 5,0,0,21,161,32,0,1,16,10,64,1,4,128,0,0,161,16,160,251,128,34,144, 136,8,17,55,90,64,32,42,0,0,1,150,40,36,34,4,149,1,26,80,0,0,64,176,9 ,40,9,4,32,0,2,8,4,64,32,0,3,4,0,0,96,16,192,66,32,136,72,75,2,12,0,0 ,1,136,10,8,9,1,4,129,64,4,0,1,2,66,0,0,1,32,1,0,0,129,0,0,152,248, 128,0,0,4,32,0,0,4,64,4,0,1,16,0,1,72,0,3,1,0,0,16,0,2,64,0,7,8,4,64, 32,0,3,4,0,0,32,16,32,0,0,1,32,128,32,0,0,16,0,0,1,0,19,160,255,0,0, 64,0,3,128,8,0,6,9,0,0,1,32,0,0,4,0,1,16,0,0,4,64,0,15,16,0,2,4,0,7, 64,1,65,0,6,4,2,2,0,1,8,0,2,88,252,0,20,32,0,2,32,0,20,2,0,21,32,0,3, 152,255,0,1,1,0,0,4,0,3,2,0,1,1,8,0,5,1,0,2,72,0,15,8,0,3,4,0,2,128,0 ,6,8,0,6,32,0,4,1,0,0,32,216,255,16,0,1,64,0,5,4,128,0,5,64,0,0,4,0,1 ,8,0,3,4,0,34,2,0,9,132,249,0,4,4,0,0,4,0,1,16,0,1,64,0,1,32,0,5,2,0, 1,4,0,21,128,0,11,4,0,7,1,0,1,16,144,253,0,24,18,0,3,4,0,1,16,0,3,2,0 ,1,8,0,32,120,248,0,30,64,0,0,64,0,4,32,0,3,8,0,29,56,251,0,31,1,0,2, 1,0,1,128,0,2,128,0,21,128,0,7,144,254,0,12,4,0,6,8,0,3,8,0,35,2,0,8, 1,0,0,48,248,0,2,8,0,16,2,0,25,8,0,21,4,0,2,248,253,0,7,8,0,0,64,32,0 ,10,1,0,1,96,0,1,72,0,44,200,251,0,1,32,0,8,2,0,15,16,0,14,32,128,1,0 ,15,32,0,9,160,252,0,18,1,4,0,44,16,0,7,200,254,0,3,2,0,6,4,0,1,128,8 ,16,17,0,1,4,128,8,0,1,2,0,0,17,0,17,128,32,0,0,65,2,8,0,1,10,1,33,0, 0,64,0,2,16,0,0,128,64,8,0,0,16,0,0,32,0,2,208,254,0,16,4,0,6,8,0,0,1 ,32,0,17,160,0,0,4,128,0,0,16,0,0,2,0,1,32,0,6,4,0,0,8,0,6,184,249,0, 14,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,0,38,8,0,6,104,251,0,46, 128,0,8,16,0,17,255,0,0,21,160,2,184,128,10,80,1,42,64,5,176,0,0,45, 128,2,80,0,0,10,64,1,40,0,0,5,160,0,0,20,192,2,0,15,22,128,2,88,0,0, 11,224,2,44,128,5,160,0,0,22,160,2,88,0,0,11,208,1,40,128,11,176,0,0, 22,160,2,112,248,192,9,52,1,146,211,4,154,64,19,104,2,100,160,225,148 ,129,50,80,6,202,128,25,40,3,102,160,12,144,1,0,14,128,12,152,1,50,64 ,6,72,22,25,32,3,102,128,12,56,1,50,64,6,154,68,25,32,89,100,128,12, 52,1,16,250,255,255,0};static const unsigned char l649[]={79,231,255, 255,98,255,57,0,0,213,255,255,255,255,255,255,255,255,255,255,255,255 ,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,160,9,52,1,38,64,6,154,0,0,19,0,0,25,96,6 ,76,128,140,134,85,6,200,0,0,25,96,2,100,128,97,144,1,0,15,12,48,1,50 ,0,0,178,74,70,19,104,2,76,128,9,48,9,50,224,4,192,0,0,152,96,2,100, 128,12,56,1,72,248,0,0,21,160,2,84,0,0,11,80,1,42,128,10,80,0,0,26,64 ,5,180,0,0,10,96,1,44,64,5,176,0,0,45,192,2,0,15,18,160,2,88,0,0,21, 192,2,42,64,5,168,0,0,21,160,3,88,128,10,32,1,52,64,5,176,0,0,22,160, 2,40,255,0,11,64,0,5,2,0,31,64,0,21,152,249,0,74,152,255,0,4,128,0,5, 64,1,0,3,160,2,16,128,2,0,1,8,0,1,40,0,19,4,0,1,80,0,7,4,4,0,4,2,0,5, 96,248,0,5,18,0,5,8,0,5,64,2,0,2,8,0,12,64,0,8,128,0,1,68,0,6,16,1,20 ,0,6,160,0,3,248,249,0,0,4,1,0,0,16,4,0,0,66,32,0,2,128,0,0,16,53,0,2 ,128,0,5,160,5,20,16,0,14,32,48,180,64,0,0,16,4,2,0,3,133,161,0,3,208 ,8,0,0,64,3,0,1,1,32,0,2,128,248,0,12,4,0,0,48,0,9,128,129,16,0,21,64 ,0,4,8,0,0,1,0,2,192,64,0,1,3,0,6,120,252,224,65,0,0,128,1,0,1,24,0,3 ,3,96,0,0,48,0,1,240,32,0,5,128,1,44,0,17,16,32,0,0,64,0,5,4,96,1,0,2 ,192,128,0,1,3,0,1,3,96,0,2,120,251,160,1,0,0,128,0,2,144,2,0,2,1,32, 0,0,48,0,1,208,0,6,128,4,21,0,16,80,128,0,1,128,64,0,4,12,164,0,3,192 ,8,0,1,3,0,1,1,32,0,2,176,251,0,6,128,4,0,2,12,129,17,0,0,32,0,1,2,1, 0,5,9,40,33,0,15,136,48,0,2,132,0,0,5,0,2,36,208,0,3,192,4,0,1,16,0,1 ,140,128,81,0,1,160,252,224,129,0,0,128,1,2,0,0,6,0,3,15,224,65,12,0, 1,240,0,6,224,64,32,0,15,96,0,0,60,16,0,0,240,0,0,6,0,3,15,0,0,1,1,0, 1,240,64,0,0,192,0,0,2,0,0,14,194,1,0,1,160,255,0,0,128,0,1,6,0,6,12, 128,1,48,0,10,1,33,32,0,14,128,64,48,8,0,0,64,128,24,16,0,2,12,0,0,1, 0,2,192,0,2,3,1,0,0,12,128,1,0,1,136,252,128,9,0,1,70,1,0,0,128,8,0,2 ,12,128,1,48,33,0,0,192,32,0,5,128,8,16,0,15,128,1,160,0,1,192,2,152, 0,3,44,136,72,0,2,64,128,0,1,11,0,1,12,128,1,0,1,240,250,0,0,4,1,0,0, 16,4,0,0,2,0,3,128,0,0,16,5,137,6,0,0,136,0,7,4,16,0,6,34,0,6,17,0,0, 4,128,0,0,16,0,0,10,64,0,0,104,0,1,32,0,0,132,192,0,2,2,64,1,8,1,1,32 ,0,0,4,0,0,244,249,0,12,4,0,2,6,0,18,12,0,6,6,0,4,128,16,0,1,96,0,10, 2,32,32,0,4,192,254,224,65,0,0,128,7,1,0,5,3,96,0,1,8,6,48,0,8,44,0,7 ,12,0,6,6,0,1,8,6,128,64,22,4,0,0,96,0,1,96,1,48,160,1,0,1,6,192,2,0, 0,32,3,96,0,0,48,0,0,88,251,168,9,0,0,128,70,0,1,64,32,0,2,1,32,0,1,1 ,6,16,0,8,20,0,7,10,0,6,5,0,0,128,0,0,70,2,8,138,0,1,96,0,1,160,0,0, 128,128,0,2,2,64,1,0,0,2,1,32,0,0,48,33,67,252,0,6,64,0,3,12,128,5,0, 0,10,16,192,132,0,7,40,33,0,6,10,0,6,5,0,1,10,16,192,4,13,16,0,0,96, 65,0,0,192,0,0,32,64,70,1,0,0,24,133,33,0,0,4,12,130,1,128,0,0,161, 248,224,129,0,0,128,7,2,0,0,30,8,0,2,15,226,65,12,128,1,244,0,8,32,0, 17,12,128,7,242,0,0,18,192,0,0,120,0,2,1,13,128,7,0,1,30,0,0,2,25,64, 14,192,65,60,16,104,249,4,0,5,24,0,3,12,128,1,0,0,8,0,0,192,0,8,32,0, 18,8,0,0,192,0,0,20,0,2,64,0,1,1,32,0,0,6,0,1,24,0,0,2,0,1,12,128,1,0 ,1,57,254,128,73,0,1,38,1,0,0,152,2,0,2,12,128,1,160,0,1,192,0,8,144, 64,0,16,48,1,6,68,68,8,4,0,1,4,0,0,128,64,48,132,6,0,1,24,0,0,129,16, 130,12,128,1,48,4,184,255,0,0,4,53,0,0,16,4,0,0,2,0,0,32,8,8,128,0,0, 16,5,0,0,64,0,0,136,2,0,4,160,1,4,16,0,16,52,2,0,0,208,128,2,0,3,1,32 ,0,0,132,64,0,0,80,2,1,64,0,0,8,32,13,160,1,4,0,0,48,248,0,1,48,0,6,1 ,0,1,4,0,3,1,0,6,128,1,0,18,48,16,0,0,192,0,8,48,0,1,128,0,3,32,0,0, 12,128,1,0,1,40,249,224,65,0,0,128,7,1,0,1,196,0,0,32,0,0,3,96,0,1, 136,1,48,0,6,128,1,44,0,17,16,16,0,1,32,22,4,0,3,96,1,0,0,32,0,0,64,0 ,1,192,2,0,1,3,96,0,0,48,16,0,0,254,164,5,0,0,128,22,0,1,64,64,0,1,8, 1,32,0,1,129,0,0,16,0,0,88,8,0,3,128,1,20,0,17,176,0,1,64,0,0,138,0,4 ,160,0,0,128,0,1,128,0,1,64,1,0,0,130,1,32,0,0,48,0,0,210,252,12,0,1, 32,0,3,4,35,2,20,140,128,5,128,8,38,196,8,64,0,5,32,40,33,0,16,48,0,1 ,192,0,0,13,16,0,2,128,196,0,0,48,1,0,0,64,0,1,128,33,0,0,66,0,0,1,0, 0,128,0,0,232,254,224,129,12,128,7,2,0,0,6,192,3,24,0,0,15,226,129,12 ,128,7,240,32,30,16,0,3,96,0,0,32,0,7,4,0,8,60,16,0,0,240,0,0,18,0,3, 3,0,0,1,29,16,0,0,176,0,2,2,25,0,0,2,64,0,0,61,16,32,255,8,0,6,4,3,0, 0,32,12,128,1,0,0,8,6,192,0,0,24,0,6,32,16,0,6,16,0,6,8,0,0,48,0,1, 128,0,0,20,0,3,12,0,0,1,0,2,64,0,2,2,0,1,12,128,1,0,1,161,253,128,65, 0,0,33,6,1,0,0,24,0,0,3,0,0,4,12,128,1,48,0,0,6,192,0,0,24,33,0,5,16, 0,7,4,0,6,2,0,0,48,66,0,0,224,0,0,73,4,0,2,76,136,68,144,32,0,0,128,0 ,2,137,0,0,64,76,130,65,48,16,136,254,128,17,0,0,2,64,0,1,26,0,0,32, 104,2,128,0,1,5,128,6,0,0,136,2,0,0,11,0,1,73,48,0,0,4,16,0,6,8,0,6, 164,1,180,64,0,0,208,136,18,16,0,3,32,0,0,132,160,0,3,64,0,2,1,32,0,0 ,4,0,0,56,251,0,0,128,0,0,16,0,0,2,0,0,24,0,1,97,64,0,0,4,0,0,48,0,0, 6,0,4,2,0,0,4,0,10,10,0,6,133,1,48,0,1,192,0,0,8,0,21,112,252,224,1, 12,128,1,0,1,24,192,0,0,32,32,3,224,65,0,0,8,0,0,48,0,0,24,192,3,2,0, 0,8,0,1,44,0,16,128,0,0,32,0,1,32,22,0,4,96,1,0,0,32,0,3,192,2,0,1,3, 96,0,0,48,0,1,248,40,8,5,128,0,2,24,64,0,0,96,1,1,160,17,0,0,1,0,0,16 ,0,0,24,64,0,2,4,0,1,20,0,7,4,0,6,2,4,176,0,1,64,2,10,0,4,160,0,0,32, 1,6,2,0,1,64,1,0,1,1,32,0,0,48,17,243,248,0,1,48,10,38,1,0,1,8,131,32 ,2,44,0,0,4,130,8,16,192,2,64,4,0,2,8,0,0,4,41,33,0,6,16,0,6,136,17, 16,8,0,0,192,64,20,4,0,3,192,0,1,4,32,1,0,1,128,33,0,1,44,128,5,128,0 ,0,201,248,224,1,60,128,7,0,1,6,192,3,120,32,15,226,1,12,128,1,244,32 ,6,128,3,0,1,7,96,0,0,32,0,7,32,0,6,98,128,60,0,1,240,0,0,18,0,5,1,29 ,128,7,0,3,2,1,0,0,14,194,65,60,16,176,250,4,0,0,48,0,0,6,0,3,3,32,0, 0,12,0,2,8,0,0,194,0,1,4,0,2,8,128,1,32,16,0,6,2,0,6,136,1,16,0,1,128 ,0,0,16,0,5,1,16,0,0,6,0,3,2,0,1,12,128,1,0,0,32,233,248,128,1,48,0,0 ,6,0,3,3,80,66,12,128,65,48,0,0,32,192,0,1,64,3,0,1,4,128,145,16,2,0, 15,16,2,32,0,0,224,16,16,0,4,128,80,16,64,38,8,0,2,161,0,1,12,128,1, 48,2,0,0,252,0,0,4,1,0,0,64,208,0,0,66,0,0,32,72,2,128,0,1,21,0,2,136 ,26,64,0,0,104,0,0,13,32,0,0,4,16,0,6,6,0,6,35,8,180,32,0,0,16,8,26,2 ,0,0,104,4,13,32,1,4,128,0,3,64,0,2,1,32,0,2,104,250,0,4,194,0,0,16,4 ,0,0,33,64,0,0,4,0,0,32,0,3,24,0,3,12,0,10,2,0,6,1,0,0,49,0,1,64,64, 24,0,1,96,32,12,128,0,0,1,0,13,128,248,224,1,0,0,128,1,192,0,0,6,200, 0,0,96,0,0,3,224,65,44,0,1,48,0,0,24,0,0,3,98,0,2,64,44,0,7,8,0,6,4,0 ,0,48,16,0,2,24,0,1,96,0,0,12,96,1,0,5,192,2,0,1,3,96,0,2,152,253,164 ,81,0,0,128,0,0,192,0,0,146,64,0,0,96,32,1,160,5,20,4,0,0,16,0,0,24,0 ,0,19,0,0,32,0,2,20,0,0,1,0,5,128,0,6,128,132,16,2,0,0,192,72,24,8,0, 0,96,65,12,160,0,2,22,2,0,1,64,1,0,1,1,32,0,2,185,250,4,0,2,22,193, 130,136,4,11,96,4,76,0,0,4,26,0,1,192,4,88,0,0,96,96,65,12,8,68,40,33 ,2,0,5,10,1,0,5,5,128,48,10,0,0,128,2,24,16,0,2,44,64,1,0,0,1,16,0,2, 128,33,0,1,76,128,9,0,1,147,254,224,129,0,0,128,7,240,0,0,4,192,131, 56,64,15,226,1,32,8,0,0,240,32,30,200,3,120,0,0,15,96,0,0,32,0,0,2,0, 6,1,0,5,96,0,0,44,0,1,112,128,30,0,1,56,64,15,4,1,12,136,7,4,0,2,2,1, 0,0,14,194,65,0,1,64,248,4,0,2,6,0,0,128,26,16,3,96,0,0,12,0,1,40,8,0 ,0,192,0,1,16,3,2,0,0,12,128,65,32,0,15,128,1,32,32,0,0,192,0,1,4,0,0 ,32,0,1,8,1,48,0,0,6,2,0,2,130,0,1,12,128,1,0,1,98,248,128,69,0,1,6,0 ,0,8,24,0,0,3,32,130,12,128,73,16,2,0,0,192,0,1,1,35,96,10,76,1,8,16, 161,2,0,5,64,1,0,6,128,32,2,0,0,192,32,8,0,1,96,129,128,0,0,1,176,64, 22,0,3,33,0,1,12,128,1,0,1,128,250,0,0,16,0,0,2,64,80,0,0,10,0,0,32,8 ,0,0,128,0,1,5,128,6,0,0,128,10,64,0,0,104,4,1,128,4,4,16,0,14,32,0,0 ,21,128,0,0,208,0,1,64,0,5,36,160,6,0,2,64,34,0,1,13,32,0,2,40,249,0, 0,128,0,0,16,0,0,130,0,0,16,0,1,1,0,1,4,0,5,16,0,1,97,32,0,1,65,0,1,1 ,0,5,128,0,8,32,0,1,192,0,10,6,0,3,1,1,0,5,184,251,96,0,0,12,128,1, 176,32,22,192,0,0,120,0,0,3,224,1,44,0,0,6,240,0,0,22,196,0,0,64,0,0, 12,100,1,44,0,0,4,0,6,2,0,7,44,0,0,6,194,0,2,3,0,4,48,0,4,192,2,0,1,3 ,96,0,2,152,252,40,0,0,4,128,0,0,80,8,10,64,0,0,104,0,0,1,160,9,21,4, 70,216,0,0,10,65,3,97,36,140,160,80,20,0,0,1,0,5,130,0,6,4,8,149,8,38 ,192,2,1,0,0,67,0,4,160,8,0,3,64,1,0,1,33,36,0,2,67,250,128,9,176,0,0 ,6,97,0,0,140,0,0,147,96,1,76,2,4,26,0,0,16,192,2,13,0,0,9,98,64,0,0, 192,0,0,40,33,4,0,5,32,2,0,6,72,24,0,0,16,192,0,2,8,0,4,48,9,64,1,0,1 ,128,2,0,1,12,129,73,0,1,9,252,224,65,60,144,7,144,0,0,16,196,3,112, 64,15,224,1,32,136,7,242,0,0,18,192,2,120,0,0,15,4,1,32,0,15,224,0,0, 36,160,7,50,64,0,0,192,3,1,0,3,60,128,1,0,3,2,0,1,15,192,1,0,1,72,253 ,132,1,48,0,0,6,160,0,0,16,4,3,96,16,12,0,0,64,40,8,0,0,196,32,20,0,0 ,131,96,0,0,12,66,1,32,128,1,0,5,192,0,6,128,0,0,41,8,0,10,48,0,1,1,0 ,2,2,0,1,12,128,1,0,1,161,249,128,1,48,0,0,6,64,0,0,72,0,0,3,96,1,12, 128,9,144,0,0,38,192,8,8,0,0,10,96,130,12,128,0,0,16,160,0,6,64,0,6, 134,1,144,0,0,166,0,0,136,0,1,11,2,0,3,48,8,32,0,3,2,0,1,64,130,1,0,1 ,56,251,16,16,0,0,2,16,148,0,0,2,64,128,40,1,129,0,1,5,0,2,128,18,64, 19,12,0,0,77,16,4,4,16,2,0,5,18,1,0,5,160,145,4,0,1,208,0,0,2,0,1,8,0 ,1,160,1,165,128,68,17,0,0,2,64,128,0,1,13,32,1,0,2,252,0,0,128,0,0, 16,0,0,64,0,4,32,0,0,2,0,5,8,0,0,3,0,3,64,0,8,20,0,6,138,0,3,192,0,6, 128,1,0,0,16,2,0,0,128,0,4,12,128,0,0,1,0,0,80,255,96,0,0,12,128,7, 177,32,22,0,0,128,56,0,0,4,224,1,44,0,1,240,32,22,4,2,2,0,0,12,96,1, 44,128,2,0,5,64,1,0,5,128,1,44,0,1,192,0,3,96,0,1,128,65,48,128,3,48, 0,0,6,0,3,3,96,1,0,1,152,254,44,0,0,4,128,38,80,8,10,0,0,8,8,17,64, 162,81,20,4,0,0,208,4,10,1,17,96,68,44,176,80,20,0,7,8,0,6,129,133, 148,8,0,0,192,66,64,4,0,0,96,0,1,128,9,32,144,4,16,4,3,0,1,1,0,0,1, 160,0,2,41,253,132,65,176,8,0,0,96,0,0,140,0,0,8,0,0,68,64,8,4,26,0,2 ,2,13,0,0,3,4,16,36,192,0,0,40,33,0,14,16,5,26,0,1,192,0,1,1,0,0,96,1 ,0,0,128,73,128,8,4,0,0,72,152,0,0,136,0,3,1,0,1,155,255,224,1,60,128 ,7,146,0,0,16,196,128,80,0,0,3,224,1,32,8,0,0,240,0,0,18,192,0,0,24,0 ,0,15,8,1,32,0,15,224,1,36,32,0,0,48,64,6,4,0,0,120,32,0,0,224,1,12, 128,2,48,0,0,30,200,0,2,2,194,0,3,252,132,1,48,0,1,96,0,0,16,4,128, 104,16,0,2,40,8,0,2,12,0,0,2,96,16,12,64,1,32,0,17,40,8,0,1,64,0,2,96 ,32,0,1,1,16,32,2,0,1,24,0,0,128,0,1,12,2,1,0,1,18,252,128,1,48,0,0, 22,129,0,0,8,0,0,33,96,2,64,129,69,16,0,1,192,34,16,128,8,100,1,12, 132,0,0,16,5,0,14,128,129,16,0,3,24,5,0,0,96,1,0,0,128,81,32,2,4,128, 16,24,0,0,34,0,1,140,128,0,2,168,255,0,0,16,132,8,64,16,0,0,18,8,32,8 ,0,0,33,0,0,16,37,128,18,8,128,2,64,0,0,105,2,69,0,0,5,36,16,0,14,160 ,4,36,128,36,146,0,0,26,64,0,3,160,1,4,128,4,0,1,2,64,0,0,8,0,0,1,160 ,4,0,1,208,252,0,0,128,0,2,2,0,0,8,0,1,1,0,1,2,0,0,16,8,4,0,3,3,96,64 ,8,132,64,16,0,16,128,16,32,6,0,0,64,24,0,4,128,1,0,1,2,0,7,128,129,0 ,1,96,255,96,0,0,16,128,1,0,1,22,192,0,3,96,0,0,44,0,0,6,244,32,24,16 ,3,56,32,12,100,1,44,0,7,8,0,6,132,1,44,0,0,6,128,0,0,24,0,4,128,1,12 ,128,5,0,1,24,0,1,96,0,0,3,96,64,0,1,8,250,40,0,1,138,0,2,10,64,0,2, 128,34,0,0,20,4,38,208,2,64,0,0,3,74,4,140,160,80,20,0,0,4,0,5,16,2,0 ,5,136,41,20,0,0,6,66,128,24,0,0,3,1,0,1,128,69,4,128,2,0,1,24,16,128 ,96,0,0,1,160,0,2,98,255,128,69,128,0,0,22,2,34,12,0,0,139,0,1,64,130 ,1,40,0,0,66,2,2,25,32,18,96,16,68,192,0,0,40,33,2,0,5,16,1,0,5,136,0 ,0,170,0,0,6,64,16,24,16,8,4,0,1,128,17,48,17,3,0,1,64,0,0,16,0,1,140 ,2,1,0,1,200,252,224,1,12,144,7,48,0,0,8,192,3,24,32,11,224,65,32,128 ,7,240,0,0,6,192,0,0,121,0,0,15,8,1,32,0,0,7,0,5,144,3,0,5,104,1,36, 136,7,242,0,0,30,192,3,0,2,224,65,60,128,4,0,1,30,200,128,24,32,14,96 ,0,0,1,0,0,80,254,132,1,0,0,8,6,192,32,8,0,0,3,96,16,0,0,130,1,40,0,0 ,6,4,0,0,24,0,0,2,96,16,12,200,0,0,32,144,5,0,5,208,2,0,5,136,65,32,0 ,0,6,192,0,2,3,0,2,128,1,48,0,0,2,0,2,16,0,1,32,12,128,65,0,1,169,254 ,128,1,0,1,6,192,0,0,8,0,0,3,96,0,0,32,128,1,32,0,0,6,192,40,88,4,1, 68,1,140,0,0,1,160,0,0,4,0,5,8,2,0,5,132,5,32,0,0,22,200,36,0,0,2,19, 4,0,2,72,48,0,0,4,0,1,24,0,0,139,0,0,4,12,0,0,5,0,1,72,253,0,7,1,0,1, 2,0,17,4,0,6,2,0,35,140,255,32,0,0,4,128,0,0,16,0,0,2,68,0,0,8,64,1, 32,0,0,4,128,0,0,16,0,0,2,0,1,8,0,0,1,32,0,0,4,0,7,2,0,6,33,0,0,4,128 ,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,1,16,0,0,2,64,0,0,8,0,0,1,32, 0,0,4,0,0,128,248,0,22,1,0,50,136,255,36,0,0,4,128,0,0,16,0,1,64,0,2, 1,32,0,0,4,128,0,0,16,0,0,2,64,32,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128, 0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,16,20,0,0,2,64,0,0,8,0,0,1, 32,0,0,4,0,0,3,253,12,0,9,16,0,3,34,0,4,16,0,4,1,66,0,28,48,0,9,128,0 ,0,16,0,1,141,248,0,7,4,0,13,2,0,0,1,0,18,32,0,1,128,0,0,16,0,1,64,0, 0,8,0,0,1,0,2,128,0,4,128,8,0,1,8,0,0,5,0,0,192,255,8,0,25,128,0,0,32 ,0,30,8,0,12,152,253,32,132,132,160,16,18,66,64,80,8,2,128,33,40,4, 129,144,0,0,24,130,66,80,8,9,33,1,32,8,0,0,1,0,14,32,0,0,132,144,0,0, 16,0,0,66,80,0,0,8,0,0,1,32,4,133,128,16,20,34,2,32,8,9,0,0,128,4,136 ,4,0,0,248,248,0,21,4,128,64,0,4,8,0,2,8,0,2,4,0,15,4,128,0,0,16,0,2, 2,0,0,128,0,1,4,16,0,5,32,251,0,0,2,0,1,8,0,20,2,0,14,4,0,6,128,0,2, 128,0,19,120,249,0,17,8,0,6,16,0,0,128,0,19,4,0,15,8,0,1,64,0,4,208, 250,0,6,32,0,1,128,0,0,1,1,0,2,128,0,3,129,2,0,48,64,16,64,249,0,9,64 ,0,19,2,0,6,1,0,1,4,0,7,32,2,0,4,32,0,15,136,252,0,33,32,0,15,2,0,7, 16,0,13,204,251,130,0,4,128,0,0,64,0,5,16,0,1,17,128,0,24,64,64,0,2, 64,0,0,8,4,0,1,16,2,4,0,0,16,0,1,64,32,16,0,4,1,0,2,57,253,0,1,4,128, 0,0,4,64,2,16,0,0,2,0,1,8,0,0,1,0,10,64,16,0,18,4,0,7,4,0,1,4,0,0,2,0 ,3,129,0,2,130,0,2,80,251,64,0,0,4,128,0,0,4,192,2,144,0,0,2,12,0,0,8 ,0,0,9,0,1,34,64,0,7,5,5,0,14,64,128,160,32,0,0,32,0,0,4,8,0,1,32,3,6 ,0,0,172,133,20,32,64,4,99,90,2,0,1,44,0,2,232,253,0,0,5,48,0,0,4,0,1 ,16,2,1,8,0,1,2,32,16,12,38,139,40,16,0,0,65,224,0,1,2,3,16,36,0,14, 128,90,212,0,0,130,0,1,8,4,64,2,2,68,2,0,0,196,35,144,4,2,0,0,93,145, 0,1,64,0,0,116,32,0,0,72,249,0,1,16,0,5,1,0,2,8,0,0,16,8,2,1,32,0,1,1 ,32,0,1,1,0,0,8,0,15,128,64,16,0,0,4,0,1,8,4,0,2,2,4,0,6,4,1,2,0,2, 128,0,1,216,253,2,1,32,128,0,2,16,16,0,5,1,32,4,128,0,0,8,0,1,18,0,1, 128,0,1,8,0,19,1,0,2,128,0,7,1,0,7,64,16,0,0,177,253,0,22,4,0,1,64,0, 17,128,0,3,18,1,0,22,104,251,0,0,1,0,1,4,128,0,8,32,0,5,2,64,0,22,32, 128,0,17,2,0,6,176,252,0,10,64,0,34,1,0,1,8,80,0,12,1,0,8,72,251,0,13 ,128,0,1,16,0,27,128,0,2,16,32,0,8,4,0,12,56,251,0,21,128,64,0,7,32,0 ,2,32,0,2,16,0,2,16,0,5,128,0,10,16,0,6,4,128,0,1,240,249,0,28,32,8,0 ,1,32,0,3,4,0,1,16,0,32,240,252,0,46,16,0,14,128,0,2,128,0,6,16,254,0 ,0,128,0,42,64,0,4,64,0,11,16,0,6,128,0,2,254,0,1,64,0,5,4,0,1,16,0,8 ,64,0,0,8,0,1,32,0,19,4,8,0,9,36,36,0,12,40,253,0,8,8,0,11,4,32,0,4,4 ,0,21,1,0,2,32,2,0,0,128,4,0,1,32,0,3,64,0,5,24,248,0,10,16,0,1,4,0,3 ,2,0,29,128,0,0,64,0,21,16,248,0,6,16,0,18,1,0,17,1,0,2,32,0,3,64,0,3 ,32,0,13,248,248,0,51,1,0,21,152,254,0,30,16,0,2,16,0,2,8,0,2,8,0,0, 128,0,0,2,0,26,168,255,0,3,2,0,23,16,0,44,152,252,0,1,32,0,10,5,0,3,2 ,0,6,64,0,17,4,0,3,1,0,22,152,250,0,56,1,0,16,136,254,0,10,16,0,5,1,0 ,2,8,0,4,16,0,11,4,0,1,1,0,5,128,0,22,192,254,0,5,16,0,13,128,0,6,64, 0,11,16,0,12,8,0,15,64,0,0,216,255,8,0,1,8,0,3,4,128,0,0,64,0,0,2,64, 0,1,4,4,32,16,4,0,5,12,16,0,2,64,0,0,32,64,0,11,4,0,2,4,2,0,1,8,0,0, 64,0,1,4,1,0,0,16,0,6,32,0,0,168,249,0,7,32,0,7,16,0,3,10,0,1,16,0,1, 8,0,15,64,68,0,0,80,0,4,4,128,0,0,16,0,1,128,64,8,0,5,32,0,4,224,255, 0,9,72,0,13,4,0,20,16,0,12,32,0,7,8,0,0,1,8,0,0,96,253,0,20,18,0,5,16 ,0,25,2,0,6,4,1,16,0,8,248,250,0,6,2,0,32,2,0,4,64,64,10,0,1,2,0,2,16 ,0,0,2,0,8,160,0,2,2,0,0,4,152,250,0,0,64,0,1,2,0,3,1,0,1,4,0,1,16,0, 0,4,32,32,0,0,8,0,0,32,16,0,0,2,64,0,19,136,0,5,32,8,0,0,4,64,16,0,5, 128,0,1,1,0,1,16,0,0,128,254,0,1,4,0,1,64,0,1,64,0,2,1,0,0,128,8,0,6, 2,0,1,64,0,0,17,8,0,13,16,0,7,4,0,7,2,0,1,16,0,0,1,0,6,152,251,0,0, 128,4,0,0,1,16,0,1,192,0,2,3,0,1,13,0,0,1,96,64,0,0,12,1,18,32,0,0,36 ,128,165,37,0,2,4,0,0,32,192,0,3,2,0,0,16,112,0,2,16,1,0,1,128,18,0,0 ,80,33,0,0,6,168,168,128,0,2,82,64,80,1,0,0,2,0,1,8,0,0,56,251,128,98 ,0,0,14,10,193,144,0,0,4,135,32,72,132,3,1,128,10,4,192,6,148,18,66, 96,164,10,0,0,49,37,4,0,4,128,16,0,3,8,0,0,64,8,160,64,0,1,129,64,0,0 ,50,0,0,64,0,1,18,2,0,0,16,10,144,4,0,0,64,21,8,32,0,0,4,1,0,0,128,0, 0,184,254,128,32,0,0,8,2,34,0,1,16,2,66,0,0,4,2,0,1,8,0,0,16,0,3,32,0 ,20,32,0,0,1,0,1,64,0,6,8,0,0,16,8,0,3,4,0,0,32,0,0,2,0,3,200,252,0,0 ,128,0,0,4,0,0,16,32,0,1,1,0,0,16,0,0,72,0,2,1,32,0,0,4,132,128,16,0, 0,2,32,64,16,4,0,4,64,32,0,3,4,0,0,32,16,0,4,1,0,0,8,0,0,128,0,7,1,0, 6,2,0,2,232,252,0,20,64,0,10,16,0,1,1,0,3,8,0,0,128,0,30,80,254,0,21, 64,8,0,0,17,32,0,2,5,0,1,16,0,2,128,2,0,1,8,0,2,32,0,28,128,252,0,6,4 ,0,1,136,0,5,1,0,6,32,0,0,5,0,16,32,0,0,2,0,3,32,0,21,88,254,0,2,16,0 ,5,32,0,3,128,16,0,3,32,0,3,1,0,20,20,0,8,4,0,4,64,0,3,8,0,4,16,248,2 ,0,8,32,0,12,16,0,20,2,64,0,4,64,0,0,32,0,2,4,64,0,5,1,0,1,8,0,3,32, 254,0,60,8,0,2,64,16,0,8,251,0,22,2,0,6,64,0,1,32,64,0,2,32,0,2,32,0, 29,128,80,255,0,10,32,0,15,128,0,45,144,253,64,34,128,0,0,136,0,5,32, 0,2,132,0,7,1,8,0,23,32,2,0,22,204,252,0,17,8,16,0,2,4,0,1,16,0,22,64 ,16,0,17,1,0,3,208,250,0,14,2,0,3,1,0,1,1,0,1,2,0,21,1,0,13,64,0,7,4, 0,0,216,252,0,5,16,64,0,2,1,0,4,1,0,2,2,0,33,8,0,0,1,0,15,104,248,160 ,4,0,2,16,0,0,2,64,3,0,1,1,0,0,48,164,144,6,16,0,0,64,0,1,8,36,0,1,48 ,0,16,160,1,52,138,6,0,9,52,128,70,16,0,0,26,64,8,4,0,0,65,0,1,4,6,8, 254,0,0,129,0,6,3,0,6,6,0,0,128,0,0,4,0,0,96,0,20,128,1,32,0,0,6,0,9, 48,0,0,6,4,0,0,24,0,4,4,0,0,16,0,0,200,254,128,0,3,240,0,0,6,0,0,131, 0,2,96,0,0,48,128,7,192,0,0,6,0,1,64,16,0,0,96,0,17,96,0,0,48,16,6,1, 0,8,60,0,0,6,48,0,2,1,0,1,4,0,3,240,253,0,0,1,0,2,208,0,0,2,0,0,11,0, 2,32,0,0,32,136,6,192,20,2,0,1,32,1,0,0,32,0,17,32,0,0,176,0,0,16,0,9 ,52,0,0,6,18,0,1,32,34,1,0,0,72,16,0,0,48,18,120,255,128,0,3,192,132, 152,8,32,4,0,0,128,128,5,49,1,6,64,68,24,2,0,0,96,0,1,128,145,0,17,48 ,48,9,134,0,9,48,0,0,4,192,36,88,16,8,0,1,64,0,1,32,16,152,253,96,1,0 ,2,224,0,0,30,192,0,2,3,226,1,60,32,7,48,0,0,30,0,1,120,32,0,0,224,1, 0,16,64,0,0,60,128,7,0,9,56,128,3,228,0,0,6,192,3,2,0,0,15,8,0,0,28,0 ,0,88,250,128,0,3,192,0,0,24,0,0,3,0,1,12,132,1,48,0,0,6,192,0,0,24,0 ,1,96,0,1,128,1,0,16,128,65,48,8,0,0,1,0,8,48,0,0,6,196,0,0,24,0,0,1, 1,0,0,4,0,1,48,16,72,251,0,0,1,0,2,192,36,24,0,0,8,1,0,0,140,128,1, 176,8,6,192,136,24,0,1,112,68,0,0,128,1,0,16,128,1,176,0,11,48,0,0,65 ,192,0,0,64,16,35,0,1,76,1,0,0,56,0,0,136,249,0,11,13,0,0,48,4,193,0, 0,208,0,0,2,0,1,104,16,0,1,48,0,8,48,0,6,56,0,1,128,4,0,1,2,0,1,8,68, 0,0,32,4,5,128,38,24,0,1,64,11,2,0,0,65,36,0,0,4,64,52,250,0,11,12,0, 1,48,0,1,192,0,3,96,0,12,12,0,6,6,0,3,2,0,10,6,0,3,2,0,4,16,0,0,152, 252,0,11,12,96,0,3,192,0,0,6,0,1,96,16,0,0,96,0,9,12,0,6,102,0,2,4,0, 1,6,0,1,32,0,1,128,0,0,12,0,0,6,50,0,2,3,0,1,4,128,1,0,0,32,0,0,253,8 ,0,10,12,32,0,1,65,128,192,68,2,0,1,96,0,1,32,0,9,10,0,6,37,0,2,18,1, 0,0,2,0,1,64,33,0,1,128,4,0,0,6,16,0,2,139,0,1,40,8,128,176,0,0,163, 253,0,11,128,130,1,176,8,0,0,193,2,152,4,0,0,96,0,1,128,1,0,8,10,0,6, 133,1,0,1,2,0,1,88,16,0,1,1,0,1,4,176,16,36,194,0,3,2,0,0,64,128,129, 160,0,0,169,251,0,11,3,224,65,28,128,1,240,64,30,0,1,24,32,0,0,224,65 ,0,16,192,65,0,0,128,7,1,0,0,30,0,1,120,64,0,0,96,128,60,128,3,224,32 ,0,0,192,3,0,1,15,104,0,0,28,16,240,249,4,0,10,12,128,1,0,0,16,0,0, 194,0,0,24,0,1,64,0,1,128,1,0,16,128,1,0,1,6,1,0,0,24,0,1,32,0,1,128, 128,48,0,0,6,192,0,2,3,0,1,4,128,1,49,0,0,225,249,0,11,76,136,1,16,0, 0,38,0,0,64,26,0,1,32,68,0,0,128,1,0,16,128,1,0,1,70,0,1,26,0,1,96,66 ,0,1,1,48,0,0,64,194,0,2,163,0,1,76,129,9,176,32,136,254,0,2,128,6,0, 1,2,64,0,0,8,0,0,132,4,48,4,193,0,0,208,2,2,64,8,2,0,0,13,0,0,48,52, 18,0,6,18,0,6,41,0,0,4,128,32,0,1,18,8,0,0,8,2,13,32,16,52,0,1,208,0, 0,82,96,8,4,0,5,72,248,0,3,6,0,6,8,0,4,192,128,0,4,12,0,1,48,0,7,16,0 ,6,8,0,1,16,0,0,2,0,3,1,64,12,0,1,49,0,13,160,255,0,3,6,0,5,32,11,96, 0,0,48,0,1,128,64,0,4,12,96,0,0,48,0,15,96,0,0,16,32,2,0,1,24,208,0,0 ,32,32,12,128,0,0,48,0,1,48,64,24,16,1,0,6,104,252,4,0,2,38,2,0,2,32, 4,4,69,40,0,1,65,0,0,64,8,0,0,2,160,0,1,12,32,0,0,48,5,0,6,18,0,6,41, 0,0,32,1,132,0,1,16,65,0,0,64,1,0,0,16,128,0,0,64,0,0,16,8,80,0,0,34, 1,0,5,90,250,12,0,2,70,8,0,0,128,0,0,8,4,2,6,128,17,32,8,0,0,194,2,1, 17,144,0,1,64,132,17,32,9,0,14,128,17,0,0,65,16,0,2,1,67,0,0,12,76,4, 16,49,2,0,0,192,4,128,32,96,0,6,96,254,0,2,128,7,0,1,6,208,3,24,64,8, 224,65,12,128,1,48,0,0,6,192,1,0,1,3,224,65,28,0,7,20,0,6,202,65,60, 128,7,4,0,0,6,200,3,120,0,0,15,96,0,0,60,8,0,0,240,64,6,192,3,0,6,72, 249,8,0,2,6,0,1,24,0,0,131,0,0,64,10,128,1,32,0,0,6,128,128,24,8,129, 0,2,128,1,48,8,0,14,128,1,16,0,0,2,2,0,0,8,0,0,3,32,0,1,130,0,1,8,0,0 ,192,0,0,8,0,0,1,0,6,1,254,0,3,128,0,1,152,8,11,96,4,4,128,1,48,18, 134,32,0,0,128,0,0,11,0,2,128,1,136,0,7,8,0,6,132,1,176,16,70,0,1,144 ,8,3,96,36,32,0,0,17,1,0,2,40,144,2,11,1,0,5,144,254,32,0,0,4,128,128 ,208,0,0,2,64,8,41,0,0,128,4,48,4,0,0,64,208,66,2,64,3,0,1,1,0,0,4,36 ,8,0,6,2,0,6,161,1,4,146,6,16,0,1,64,11,10,64,65,32,16,4,0,1,16,0,0, 26,80,8,9,130,1,32,0,0,4,32,16,248,0,8,2,64,0,6,193,0,3,1,0,3,17,0,7, 36,0,6,146,1,0,1,6,0,3,3,0,2,8,128,0,4,16,0,6,16,0,0,152,248,128,1,0, 0,8,0,0,192,32,0,0,192,0,0,90,16,11,96,0,1,136,1,128,0,2,3,0,2,226,65 ,0,0,8,0,14,96,0,0,16,32,6,49,0,5,4,132,0,0,12,0,1,48,0,0,24,0,0,1,34 ,0,0,12,128,1,0,1,8,254,140,1,128,0,0,64,2,4,0,0,64,10,40,2,69,40,0,0 ,128,128,0,0,64,64,0,0,2,19,4,0,0,128,160,17,48,0,15,32,0,0,32,0,0,16 ,16,0,2,19,4,68,40,0,0,8,5,0,1,16,0,0,152,16,2,64,68,0,0,4,128,48,33, 202,249,4,16,1,8,22,1,8,1,17,17,48,0,0,6,128,5,0,0,8,134,192,2,24,17, 16,1,0,0,128,2,128,48,9,0,6,6,0,6,3,80,0,0,1,22,192,36,0,1,18,96,17, 64,8,16,50,0,1,192,8,88,8,32,0,0,32,140,144,5,32,16,64,253,96,0,0,12, 128,7,48,0,0,6,128,128,72,0,0,8,224,65,12,128,7,48,64,6,192,2,0,1,3, 224,1,60,0,7,4,0,6,66,0,0,60,144,7,242,0,1,192,1,121,0,0,15,96,0,0,60 ,8,0,0,224,32,30,192,3,122,0,0,3,96,128,28,0,0,128,254,4,0,1,8,6,0,0, 64,24,80,3,80,0,0,10,128,1,0,0,8,6,128,0,1,8,3,2,0,1,2,0,0,48,136,4,0 ,5,80,2,0,5,136,1,16,0,1,196,0,2,2,97,32,4,8,0,0,48,0,1,192,0,0,24,16 ,1,32,32,12,128,129,48,16,9,255,0,0,40,48,0,0,18,200,0,0,88,0,0,147, 32,0,0,4,128,1,48,128,6,0,0,128,128,0,0,2,0,1,44,128,65,176,0,0,4,0,5 ,20,2,0,5,138,69,48,5,64,208,0,1,128,8,32,4,44,128,145,52,0,1,192,0,0 ,24,0,0,3,100,0,0,76,132,1,56,0,0,120,255,160,9,52,128,0,0,20,8,0,0, 64,0,0,72,0,0,136,4,4,4,64,70,16,64,152,64,66,8,0,0,5,0,0,4,36,9,0,14 ,32,0,0,132,160,0,0,200,0,0,2,64,35,108,0,0,1,164,9,4,134,0,0,208,0,0 ,26,64,8,12,0,3,132,16,88,250,128,129,48,0,2,128,0,2,32,0,0,4,0,1,1,0 ,0,6,1,0,0,24,4,0,2,8,0,1,17,128,4,0,5,64,2,0,10,192,64,0,1,3,96,0,2, 65,16,0,0,2,196,0,0,24,0,2,32,0,2,16,0,0,232,255,128,0,0,49,0,6,89,16 ,11,224,1,0,0,144,7,0,0,64,30,0,1,24,0,0,11,224,65,28,0,7,10,0,6,101, 0,0,16,0,0,2,244,0,0,6,0,0,2,96,0,0,4,128,129,0,0,32,0,0,50,0,0,24,0, 0,1,32,0,4,32,64,253,132,17,48,0,0,16,2,66,0,2,40,2,69,168,1,160,128, 6,0,0,2,26,0,0,8,9,0,0,5,160,1,36,0,0,5,0,5,130,2,0,5,33,0,1,65,20, 208,0,0,2,0,0,65,96,34,40,132,9,48,0,0,70,16,0,0,24,0,0,34,65,65,0,2, 48,0,0,89,251,140,17,129,32,38,192,2,0,1,11,52,0,0,6,128,129,0,0,10, 32,194,8,128,8,160,96,32,38,0,0,128,32,0,7,8,0,6,132,9,128,64,0,0,2, 68,24,33,35,96,132,128,136,17,32,16,4,2,4,128,0,0,16,0,0,8,0,2,160,0, 0,179,250,224,1,12,128,7,241,128,0,0,192,3,72,0,0,8,224,1,28,128,1, 240,32,6,192,1,120,0,0,8,226,1,16,0,0,2,0,6,1,0,5,192,65,12,128,7,48, 0,0,30,192,0,0,121,0,0,15,224,65,28,128,3,32,32,6,208,3,122,0,3,28,16 ,64,248,136,1,0,1,6,194,64,0,2,49,0,0,6,128,1,16,32,0,0,192,0,3,96,0, 0,8,2,0,0,16,128,0,6,64,0,6,128,1,16,32,2,2,0,0,24,0,0,2,97,0,0,4,128 ,1,48,32,6,196,32,0,1,1,32,32,0,2,48,0,0,210,253,128,41,0,1,66,64,8,0 ,1,19,64,0,0,8,128,81,16,129,0,0,64,128,0,1,17,97,0,0,132,128,69,32,0 ,0,9,0,5,128,4,0,5,128,1,32,0,0,6,0,1,24,0,2,130,76,132,69,56,1,39, 192,2,0,1,83,96,4,0,2,176,32,120,253,176,0,0,20,128,0,0,210,2,1,64,3, 104,2,13,0,0,4,20,128,0,0,16,16,128,64,3,96,68,1,0,0,4,36,0,15,32,0,0 ,4,130,198,208,2,1,64,19,8,8,45,164,9,4,129,32,16,0,0,2,64,8,1,4,1,32 ,0,0,4,0,0,88,253,0,0,1,32,0,1,192,0,3,96,16,0,2,33,0,4,4,3,1,0,3,17, 0,18,32,4,192,0,2,3,2,0,0,12,128,1,17,32,2,4,0,4,64,0,4,200,251,96,65 ,44,0,1,64,0,1,192,131,96,16,15,226,65,44,128,1,0,0,64,6,0,1,120,64, 11,224,1,44,128,1,0,5,192,0,6,96,0,0,16,0,0,6,64,64,0,3,32,0,1,129,0, 2,50,0,0,24,0,0,1,26,0,1,128,1,12,0,0,64,252,172,16,20,0,0,16,196,136 ,0,0,64,11,96,4,45,160,17,20,145,0,1,8,2,0,0,19,12,4,5,160,81,20,0,0, 1,0,5,128,0,6,32,0,1,65,70,194,4,0,1,35,4,0,0,140,136,0,0,176,32,22, 16,0,0,24,0,0,2,8,0,0,64,8,128,4,0,0,154,251,196,8,24,9,22,64,136,0,2 ,96,1,32,16,128,152,32,38,192,36,24,2,17,2,0,0,38,0,0,128,24,0,0,4,0, 6,2,0,5,128,73,0,0,17,6,72,8,1,0,0,18,96,20,72,128,5,32,2,20,192,32, 88,32,16,98,132,128,136,49,48,8,40,252,32,65,32,128,7,241,0,1,128,131 ,88,16,14,224,1,36,128,7,241,0,0,30,192,3,120,0,0,8,226,1,32,0,0,5,0, 5,128,2,0,5,192,1,12,128,7,240,0,1,192,1,121,0,0,7,100,128,28,144,3, 226,0,0,30,192,3,120,0,0,15,96,0,0,60,0,0,240,252,68,65,32,8,6,64,64, 0,2,97,0,0,1,0,1,40,8,6,192,0,0,24,0,0,1,0,1,8,2,0,0,16,0,15,128,1,16 ,0,0,6,68,0,2,2,97,0,0,8,0,0,1,49,16,6,192,0,0,24,16,1,96,0,1,132,1, 48,0,0,185,251,128,4,144,0,0,2,164,2,0,1,35,96,33,76,129,69,144,0,0,6 ,64,2,25,0,0,32,97,0,0,36,128,73,32,0,15,128,1,160,32,22,160,66,0,0, 128,8,32,129,66,65,0,0,48,0,0,22,196,0,0,88,0,0,19,97,0,0,64,128,137, 52,0,0,112,251,48,0,0,4,128,22,144,2,19,66,136,0,1,1,0,0,4,4,128,0,0, 16,128,88,64,3,100,68,73,4,4,148,144,2,0,5,64,1,0,5,32,0,0,4,192,22, 148,2,3,64,19,9,32,13,164,9,182,128,22,210,0,1,64,18,108,1,0,0,32,0,2 ,24,252,0,3,6,66,0,8,1,0,3,24,4,3,0,1,4,0,1,33,128,0,6,64,0,10,6,64,0 ,2,3,0,1,12,128,1,48,32,6,192,0,3,64,32,0,4,112,250,96,65,44,0,0,4, 192,0,0,24,0,0,3,0,2,224,65,44,128,1,0,1,30,0,0,1,122,0,0,11,224,1,28 ,0,0,2,0,6,1,0,5,96,0,0,16,0,0,4,192,128,24,0,0,2,0,1,8,0,0,1,32,0,0, 4,48,0,2,2,96,64,0,0,128,1,0,1,232,255,172,16,20,0,0,66,194,16,16,9, 34,4,0,0,128,162,5,20,145,0,1,130,26,0,0,11,8,65,5,160,41,36,0,7,10,0 ,6,32,0,1,33,34,200,8,128,2,9,2,132,36,132,144,16,34,66,20,0,2,145,96 ,0,2,128,0,1,225,249,196,8,24,9,22,200,4,0,0,9,16,0,1,32,0,0,128,152, 32,6,192,34,128,8,2,2,0,0,6,0,0,128,16,0,15,130,69,0,0,66,70,200,8,0, 1,35,96,18,140,128,17,50,33,70,8,4,0,1,33,96,0,1,128,5,1,0,0,163,254, 32,65,32,128,1,112,64,6,192,128,0,1,15,226,1,36,128,7,241,0,0,6,192,3 ,120,0,0,4,224,1,44,0,15,192,1,12,128,1,112,128,6,208,0,0,121,0,0,3, 100,0,0,12,128,1,32,64,0,0,192,131,120,64,0,0,96,0,2,192,250,68,65,32 ,8,4,194,32,8,0,0,128,0,2,2,0,0,40,8,6,192,128,0,1,2,0,1,4,0,0,64,16, 0,15,128,1,0,1,4,192,0,1,8,2,97,0,0,8,4,129,32,0,0,4,192,0,2,3,96,32, 0,0,128,1,0,1,106,255,128,0,0,16,0,0,65,64,8,16,2,16,0,1,128,128,65, 16,128,6,64,0,2,34,98,0,0,4,128,9,36,0,15,128,1,48,16,1,68,8,1,0,1,32 ,64,0,1,16,8,17,33,194,40,0,1,3,97,1,0,0,128,145,0,1,208,249,32,9,164 ,160,22,80,4,27,64,3,104,0,0,1,0,0,4,164,160,6,16,0,0,27,65,65,96,68, 1,0,0,48,20,6,0,14,160,1,52,129,38,208,4,2,64,0,0,72,64,137,161,5,54, 162,38,18,0,1,64,18,12,130,33,36,0,1,1,152,249,128,64,16,0,0,6,4,0,0, 24,0,0,3,96,0,3,17,0,3,24,4,0,5,32,0,7,12,0,6,6,0,0,32,32,6,194,32,0, 5,128,1,48,0,0,6,0,10,32,56,254,96,1,44,0,0,4,112,0,2,3,96,0,1,224,65 ,44,128,7,193,128,8,0,0,1,121,0,0,3,96,0,0,28,0,15,96,0,0,49,0,0,4,64 ,128,24,192,0,0,64,0,0,8,130,0,0,32,0,0,4,48,0,2,130,32,0,0,4,128,1, 12,0,0,184,250,168,0,0,20,0,0,130,16,68,0,1,3,96,0,0,128,162,1,20,128 ,0,0,192,4,64,8,10,8,132,1,32,0,0,36,0,0,4,0,5,16,2,0,5,40,8,176,8, 130,0,0,2,0,0,73,0,0,32,16,132,0,0,9,18,4,34,20,0,2,33,64,68,8,8,8,5, 0,0,50,250,64,73,24,0,0,70,8,64,64,0,1,97,65,32,0,0,128,40,0,0,6,65,2 ,64,8,11,0,1,140,144,5,16,0,0,2,0,5,16,1,0,5,136,49,128,64,38,8,34, 152,0,0,11,32,4,36,0,0,8,50,65,198,192,40,0,1,1,0,0,66,128,129,9,48, 66,168,252,32,1,16,128,1,160,0,0,6,200,0,0,120,0,0,3,226,1,36,144,7, 48,128,6,192,131,120,0,0,15,224,65,44,0,0,7,0,5,144,3,0,5,232,1,60, 128,1,48,0,0,30,208,131,120,32,15,226,1,12,128,1,224,0,1,192,3,122,0, 0,15,224,1,61,0,0,56,254,4,1,16,0,0,4,208,0,2,3,1,0,0,12,2,0,0,32,0,1 ,192,0,2,3,0,1,12,128,1,16,128,5,0,5,208,2,0,5,136,65,48,0,0,4,4,0,1, 8,3,96,0,0,12,0,0,128,32,0,0,4,196,0,2,131,32,64,4,4,0,0,48,0,0,57, 249,0,0,1,16,0,1,196,40,64,32,3,0,0,132,128,128,73,32,128,22,193,36, 80,32,3,97,0,0,13,128,1,36,0,0,4,0,5,8,2,0,5,4,0,0,48,10,0,0,128,4,25 ,64,3,96,17,140,66,5,128,16,0,0,192,0,2,11,96,1,12,128,129,48,0,0,64, 250,16,0,4,2,1,0,0,8,0,19,4,0,6,2,0,35,192,248,32,0,0,4,128,0,0,16,0, 0,2,64,128,8,0,0,1,34,0,0,4,0,1,16,0,1,64,0,0,8,0,1,32,0,9,16,0,6,40, 0,0,4,128,0,5,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,2 ,40,250,0,20,16,0,3,8,0,1,32,0,20,128,0,2,2,0,18,136,255,44,0,0,4,128 ,0,2,2,0,1,8,0,1,32,0,0,4,128,64,18,0,0,130,64,0,0,8,0,0,65,32,0,0,4, 0,15,32,0,0,4,128,0,0,16,4,2,72,16,8,0,0,1,32,0,0,4,146,0,0,16,0,0,2, 64,0,0,8,0,0,1,32,0,0,4,9,75,249,4,0,1,66,0,1,4,0,1,144,0,1,64,4,0,3, 1,0,5,128,4,0,1,34,0,15,16,2,0,12,2,0,1,8,1,0,8,233,248,0,2,128,0,1, 32,0,10,16,0,1,64,0,24,4,128,0,5,8,0,0,1,32,0,1,160,0,2,2,64,0,2,1,32 ,0,2,88,253,4,0,6,16,0,6,32,0,0,4,0,4,64,0,0,8,0,27,2,0,4,8,0,11,32, 225,253,32,72,0,0,144,0,1,132,130,0,1,9,128,0,0,48,128,4,130,32,16,0, 0,2,73,0,0,8,2,128,32,128,0,0,18,0,15,40,4,128,0,0,16,72,2,97,32,8,0, 0,1,32,0,0,4,130,0,1,64,2,64,0,0,8,36,1,32,0,0,4,2,184,254,0,0,1,0,4, 16,0,0,1,0,35,4,0,14,4,0,2,4,0,7,152,254,0,15,128,0,2,2,0,0,2,0,7,2,0 ,1,8,0,3,1,0,1,4,0,9,64,0,15,16,0,3,120,255,0,7,128,0,38,8,0,2,1,0,6, 1,0,4,32,64,0,3,5,0,1,56,254,0,4,32,144,17,128,1,0,15,64,0,20,16,128, 0,8,128,0,11,2,0,1,48,250,0,4,64,32,0,47,128,0,18,176,251,0,22,16,0, 28,34,0,7,128,0,2,32,0,7,16,252,4,64,0,1,1,130,32,2,0,0,128,0,4,4,136 ,0,0,64,16,0,5,64,0,0,33,0,17,8,0,2,32,16,0,4,4,0,0,1,0,3,8,0,0,1,0,1 ,1,36,0,0,33,0,0,36,255,0,0,128,0,0,128,0,0,4,0,3,10,0,1,4,0,0,1,32,0 ,5,16,0,0,1,32,0,0,16,0,27,2,64,0,0,16,0,1,64,0,9,32,200,253,0,0,192, 1,128,1,166,85,132,2,0,0,75,1,0,0,8,0,0,9,53,1,32,64,0,0,4,0,0,8,16,1 ,96,128,12,0,17,8,5,0,1,64,4,0,3,1,36,128,4,0,1,16,0,0,84,128,0,2,106 ,69,168,8,32,112,255,32,0,0,32,4,6,0,1,10,66,161,104,12,0,0,84,67,48, 4,2,193,32,0,2,136,0,2,64,32,0,19,3,0,0,20,0,0,4,227,32,0,0,4,2,0,0,4 ,0,0,128,1,0,1,68,13,0,0,68,40,0,0,41,4,4,0,0,249,0,3,4,0,1,16,0,0, 129,16,0,3,33,0,0,132,32,128,0,7,1,0,18,128,0,3,4,129,32,0,0,2,4,0,2, 128,0,2,2,1,0,6,32,252,4,0,0,16,144,0,3,16,0,0,32,16,0,0,32,0,0,4,32, 0,0,16,0,8,4,0,21,128,0,1,2,1,0,6,2,0,5,4,128,64,0,0,32,52,251,0,2, 128,4,0,13,1,0,10,2,0,1,8,0,3,1,0,1,4,0,3,192,128,128,0,2,64,64,0,9, 64,0,0,2,0,2,8,0,0,132,4,72,255,0,23,16,0,5,4,0,1,16,0,3,2,0,1,8,0,3, 64,0,16,2,4,0,7,208,248,0,4,32,0,0,2,0,4,64,0,1,12,0,3,32,0,3,64,0,26 ,1,64,0,1,65,0,0,2,128,8,0,2,64,128,0,0,8,0,0,2,0,2,168,249,0,6,4,0,2 ,64,0,3,4,0,7,4,1,0,0,4,0,15,32,0,0,4,0,0,1,8,0,5,33,0,2,64,0,4,4,16, 0,0,2,0,3,24,248,0,6,64,0,8,16,0,1,64,0,2,1,32,0,1,16,0,21,2,0,1,8,0, 12,4,0,5,144,254,0,3,8,0,13,1,0,26,1,0,0,8,0,4,128,0,7,128,0,0,8,0,6, 16,128,255,0,3,16,0,12,64,2,0,33,128,0,0,1,1,128,0,2,2,0,5,16,0,4,112 ,253,0,0,4,0,4,64,0,13,8,0,25,16,0,3,1,0,4,32,0,0,18,0,3,2,128,0,0,4, 0,3,216,248,0,2,4,0,3,32,64,0,9,8,0,29,64,0,10,128,0,5,16,0,0,2,0,1, 232,250,0,5,1,2,0,3,6,0,7,64,0,1,9,0,24,1,0,0,4,0,2,16,0,9,128,8,0,2, 1,0,1,56,255,0,49,4,0,3,2,64,2,0,0,1,0,13,32,232,249,0,14,64,0,0,2,0, 1,8,0,28,64,0,4,1,0,2,128,0,7,65,0,3,32,184,248,0,6,1,0,1,4,0,40,4,0, 21,152,254,0,8,2,0,20,16,0,2,16,0,2,8,0,2,8,0,21,16,0,7,56,253,0,14, 128,0,11,4,0,31,16,0,6,32,0,4,40,250,0,10,8,0,0,4,64,0,6,64,0,3,64,0, 39,1,0,5,8,251,0,44,32,0,2,4,0,19,8,0,1,32,0,0,16,249,2,0,2,2,64,0,12 ,2,0,3,128,0,21,16,0,4,8,0,0,34,0,0,4,0,0,4,0,2,8,0,10,144,252,0,5,64 ,0,3,8,0,6,128,0,14,64,0,11,16,1,0,0,16,32,0,1,8,0,2,128,0,2,1,0,3,16 ,0,0,1,0,3,96,249,8,0,11,8,0,5,80,0,6,128,0,19,2,0,1,2,0,1,4,160,0,2, 2,0,5,1,32,128,32,0,3,24,255,0,1,64,0,4,2,4,0,3,2,0,0,32,0,4,2,2,0,2, 2,0,38,12,0,5,8,240,249,32,0,4,64,0,2,34,0,10,1,0,7,128,0,2,128,0,2, 64,0,2,64,0,5,128,144,0,0,16,0,16,64,0,2,64,255,16,0,6,4,0,20,1,128,0 ,0,4,0,0,128,0,0,128,0,0,64,0,0,2,0,0,64,0,5,2,0,1,2,0,5,4,0,3,8,0,0, 1,1,0,0,4,0,1,16,0,0,240,254,0,3,4,128,34,0,24,16,0,2,16,0,2,8,0,2,8, 0,1,8,0,6,80,0,0,8,64,0,0,64,0,0,8,0,4,64,0,5,80,253,128,0,0,17,0,1, 33,0,0,8,0,0,1,8,0,1,72,0,1,32,0,1,32,8,0,2,64,0,0,4,128,0,16,32,0,7, 2,16,0,0,1,4,64,8,0,1,32,0,1,64,0,0,32,8,0,0,2,0,0,1,0,0,128,248,2,0, 1,32,0,5,18,0,1,32,0,0,4,136,0,0,1,64,0,0,128,0,2,1,8,64,0,15,8,32,0, 0,4,0,3,8,8,1,0,1,2,0,7,4,128,0,0,16,0,0,128,0,0,16,136,104,250,64, 128,8,32,2,34,0,0,4,128,0,0,26,0,1,100,0,0,4,176,20,4,192,4,64,1,0,0, 42,1,12,192,1,0,5,16,0,6,8,16,96,0,0,4,0,3,2,208,0,0,16,0,0,3,4,128,8 ,64,2,32,0,0,136,146,128,18,96,0,0,36,128,4,32,232,253,0,0,96,128,8, 192,234,16,72,2,233,208,24,28,150,33,0,0,4,21,80,4,56,6,10,0,0,16,1, 129,41,0,0,36,0,2,16,0,0,128,16,0,3,8,0,0,64,8,128,65,16,0,0,6,81,0,0 ,50,0,0,14,45,0,0,5,129,64,32,16,128,16,17,64,64,144,16,28,76,0,0,80, 160,9,32,255,0,0,64,0,0,16,0,0,64,0,0,16,64,0,0,1,32,4,130,0,3,64,0,0 ,16,4,0,1,64,0,0,128,0,17,128,128,16,0,0,4,36,0,3,16,0,0,2,128,64,0,6 ,64,0,0,16,4,0,0,64,0,0,16,184,251,0,1,1,0,0,128,16,64,0,0,8,128,8,16 ,2,32,0,0,1,32,2,0,1,8,8,2,0,2,40,64,0,0,8,0,2,4,0,0,32,64,0,3,2,0,0, 16,32,64,0,2,1,0,1,4,0,0,1,0,2,4,0,0,8,0,1,2,64,0,3,8,1,0,1,4,0,0,144 ,250,16,0,28,16,0,1,64,0,3,8,0,1,32,0,4,16,0,5,4,0,1,16,0,5,1,0,5,96, 64,0,1,12,251,2,0,3,5,0,11,128,0,3,128,0,22,128,96,4,0,3,128,0,0,64,0 ,2,1,0,0,1,2,0,0,64,0,0,8,0,0,16,0,0,2,0,0,128,128,144,250,2,0,11,32, 32,32,0,5,9,0,2,32,0,22,32,128,0,7,16,0,1,2,0,1,2,0,6,128,40,252,0,9, 4,0,0,1,0,12,8,0,0,8,0,18,128,0,0,4,0,0,1,0,6,8,4,0,0,69,0,3,2,0,4,8, 248,250,0,4,8,0,9,128,0,1,32,3,0,10,16,0,2,16,0,2,8,0,2,8,0,1,32,64,0 ,4,2,0,0,128,8,0,0,2,8,0,0,1,0,9,8,0,0,72,252,0,2,128,0,13,16,0,15,64 ,0,6,32,0,10,8,0,2,1,0,7,4,0,1,4,128,0,1,48,249,0,3,1,2,0,10,4,32,64, 16,0,6,32,0,13,8,0,5,128,0,3,48,48,4,2,64,32,8,0,5,96,0,2,32,0,1,64, 253,0,14,8,0,2,32,0,9,16,0,1,64,0,3,8,0,1,32,0,4,32,8,0,3,128,64,0,1, 18,128,0,1,8,0,3,64,0,1,32,1,0,2,4,48,254,0,4,128,0,4,16,0,2,16,0,5, 196,16,0,23,36,0,9,32,192,0,0,16,0,7,4,0,2,168,248,0,0,33,0,0,32,0,2, 32,0,1,64,0,4,64,0,0,64,0,2,4,0,1,2,32,0,23,1,0,1,4,0,2,9,0,1,32,4,0, 3,64,0,0,8,0,2,40,0,0,160,250,0,4,16,0,6,16,0,2,1,0,1,4,0,2,16,0,26, 16,4,0,15,2,0,2,128,16,252,0,6,8,0,2,128,0,6,64,0,31,32,0,17,8,0,2, 120,249,0,4,16,0,3,104,0,3,4,0,1,80,2,0,0,81,0,0,4,65,128,1,0,19,52, 132,0,2,26,65,0,0,72,2,37,16,0,0,52,32,0,0,208,2,90,96,3,0,1,1,161,17 ,52,34,96,251,0,9,96,0,6,128,32,0,26,32,0,0,6,0,1,16,8,0,0,96,32,12,0 ,1,48,0,1,192,64,24,0,0,3,0,2,128,129,48,0,0,248,250,0,5,32,0,2,24,0, 3,48,0,1,64,0,0,6,0,1,122,0,0,3,0,20,48,32,6,2,0,0,24,208,0,0,64,64,3 ,0,1,32,16,0,0,128,128,16,16,3,0,1,4,0,0,129,32,0,0,232,252,0,9,8,0,3 ,48,0,1,128,130,2,0,1,104,16,1,0,20,128,0,0,6,0,1,64,64,0,0,96,1,5,2, 0,0,16,2,0,0,64,0,0,136,0,0,11,4,0,1,136,8,144,16,120,252,0,5,34,0,3, 64,0,2,176,32,0,0,64,2,25,1,11,1,2,44,0,20,16,34,70,0,1,136,0,0,163, 96,12,72,8,0,0,48,0,1,192,8,152,16,67,0,1,64,132,137,48,17,248,251,0, 4,48,0,3,16,0,3,60,0,1,240,0,0,30,208,3,120,64,15,2,0,19,44,128,1,2,0 ,0,22,132,3,56,0,0,3,0,1,12,32,0,0,48,64,6,192,0,2,3,96,0,0,12,0,0, 104,255,0,4,192,32,0,2,96,0,3,48,0,1,64,0,0,24,0,0,3,1,16,12,0,21,8,0 ,0,4,0,1,4,3,0,0,64,12,2,0,0,32,0,1,128,64,16,16,0,0,2,0,0,4,0,0,1,33 ,32,184,251,0,5,4,0,2,96,17,0,2,48,18,0,0,128,8,25,0,0,33,96,4,12,0, 22,64,0,1,64,0,0,3,0,0,4,72,0,1,8,18,0,0,32,8,0,1,32,0,1,136,16,4,128 ,0,0,152,252,0,2,2,0,0,16,0,3,8,0,3,132,0,1,80,4,0,0,81,3,0,0,65,129, 160,65,52,0,17,52,132,22,8,0,1,64,3,0,1,73,40,16,180,64,0,0,208,4,0,0 ,64,8,104,0,0,13,176,9,52,2,160,253,0,2,32,0,11,32,0,0,128,32,0,1,3,0 ,2,136,1,48,0,17,32,0,0,6,0,3,3,0,1,4,0,0,128,48,0,1,192,128,0,2,97,0 ,0,12,128,129,32,16,176,253,0,1,12,0,2,32,0,2,24,0,3,16,0,1,64,0,0,6, 0,0,3,120,0,1,130,1,48,0,17,48,32,2,2,0,1,192,0,2,11,0,1,32,0,1,128,0 ,2,2,98,0,0,8,0,0,1,48,32,64,250,8,0,0,4,0,6,8,0,4,9,0,0,128,128,2,0, 0,11,106,17,64,128,5,50,0,17,128,0,0,20,0,2,64,0,2,5,0,0,9,17,64,0,0, 64,130,0,2,96,36,36,136,8,1,1,233,253,0,1,48,6,0,1,34,0,2,96,0,3,128, 64,0,0,64,2,24,0,0,11,0,0,2,128,130,9,130,0,17,144,0,1,8,0,2,8,0,1,8, 128,9,50,34,0,0,192,8,1,0,0,35,100,8,140,136,17,146,0,0,179,250,0,1, 60,0,1,240,0,3,112,16,0,2,12,0,1,240,64,30,196,3,121,64,3,224,1,12,16 ,0,16,44,136,7,0,2,128,0,0,1,0,0,6,224,1,12,0,1,48,0,1,192,3,24,0,0,3 ,96,0,0,44,8,48,252,4,0,0,48,0,2,32,0,2,96,0,3,16,0,1,64,128,24,0,0,3 ,0,0,16,0,0,130,1,48,0,18,8,0,0,4,0,2,3,0,1,8,128,129,32,16,0,0,128,0 ,2,3,0,0,64,8,0,0,1,0,1,114,252,0,1,48,0,2,4,0,2,96,0,3,32,33,0,0,128 ,0,0,24,0,1,100,0,0,36,0,0,137,48,32,0,17,2,5,0,3,147,0,1,4,128,16, 128,0,2,68,0,1,17,1,1,34,68,0,0,1,33,24,251,0,2,130,0,4,96,8,0,1,32, 32,52,162,6,80,32,0,0,81,64,0,0,65,128,161,17,21,1,0,14,32,0,0,52,192 ,70,208,0,1,64,0,0,104,8,1,32,16,132,0,3,26,16,0,0,8,8,141,160,145,52 ,64,8,252,0,2,32,0,10,48,0,0,6,128,0,9,16,0,16,48,0,0,6,196,0,3,64,0, 2,128,16,16,0,2,24,0,3,12,132,1,48,0,0,136,253,0,1,12,0,0,6,0,2,192,0 ,0,24,0,3,32,0,0,6,64,0,0,6,0,1,120,0,0,3,128,129,28,8,0,14,128,1,32, 0,0,6,192,0,1,192,0,0,96,64,3,0,2,16,0,2,16,0,3,8,0,0,1,32,0,0,208, 251,4,0,0,4,0,0,6,0,2,64,0,0,8,0,2,128,16,33,22,132,20,2,0,0,16,106,0 ,0,1,0,0,5,4,1,0,14,128,1,16,32,166,192,136,0,0,64,0,1,2,1,0,0,133,48 ,1,0,2,72,32,0,0,64,33,132,132,4,17,64,186,254,12,0,0,48,2,0,4,11,100 ,2,0,0,128,73,176,64,70,72,8,24,1,19,96,2,44,2,33,0,0,1,0,14,128,9,48 ,66,196,192,8,1,0,0,35,32,18,140,128,17,34,2,0,2,24,1,0,0,96,4,44,132 ,1,48,18,152,249,0,1,60,136,1,2,0,1,192,3,112,16,0,0,224,1,12,128,7, 240,64,30,196,131,120,64,15,224,1,40,32,0,14,224,1,13,128,3,240,0,1, 128,131,88,0,0,14,226,1,28,32,0,2,6,8,0,0,120,32,3,96,128,12,0,0,160, 250,8,0,0,48,0,1,4,0,2,3,96,0,1,128,129,32,16,6,68,0,0,24,0,0,3,96,16 ,12,128,129,52,0,15,128,1,32,0,0,6,196,0,2,3,0,0,16,12,128,1,48,16,0, 2,16,0,1,96,0,0,8,0,0,1,33,0,0,209,248,0,1,48,0,0,32,0,3,3,96,0,1,128 ,16,8,2,0,0,128,4,25,0,0,9,100,2,12,128,17,48,10,0,14,128,5,10,4,65,0 ,0,72,0,1,3,0,1,12,128,0,0,57,0,3,4,33,0,0,32,64,128,8,0,0,8,32,128, 253,32,0,0,4,6,0,0,16,132,0,0,4,96,8,0,0,1,160,1,52,130,0,0,88,36,64, 80,16,4,68,128,1,0,0,52,0,15,32,16,52,130,38,24,2,154,80,0,2,1,160,1, 4,129,34,17,0,0,26,73,96,8,8,0,0,160,129,52,6,40,255,0,4,128,0,6,128, 1,48,16,0,0,128,0,26,128,48,16,6,0,0,128,24,0,4,128,1,16,32,4,0,0,128 ,24,0,0,1,0,2,128,1,48,0,0,224,250,0,4,48,0,0,6,192,0,0,24,0,0,3,128, 1,32,0,1,66,0,0,30,4,0,0,24,0,0,3,0,1,48,0,15,128,0,0,32,16,6,0,0,64, 16,192,0,2,3,128,1,0,1,2,128,0,0,16,0,5,1,32,0,1,250,12,0,0,1,8,0,0, 144,36,2,64,0,0,8,0,0,1,128,17,17,64,16,128,130,26,0,0,16,9,0,0,1,0,1 ,128,8,0,15,68,16,0,0,70,4,2,136,66,0,2,1,128,145,176,32,4,2,4,137,16 ,35,65,66,0,0,128,128,16,17,2,251,132,145,128,0,1,64,4,88,0,0,11,96, 17,12,128,17,178,0,0,22,65,4,128,0,0,35,96,1,12,0,1,128,0,16,4,176,0, 0,36,192,34,152,0,0,11,0,1,44,128,17,160,32,18,194,4,89,8,34,96,68,0, 0,128,17,178,0,0,96,249,224,1,44,8,0,0,32,32,30,200,131,112,0,0,15, 232,1,12,144,7,240,64,30,208,131,120,32,15,2,0,0,12,16,0,14,96,128,12 ,160,3,242,0,0,6,136,131,0,1,14,98,128,28,128,7,240,0,0,6,192,1,122,0 ,1,96,0,0,12,32,160,255,4,0,1,8,0,0,208,0,0,24,0,0,3,96,0,0,12,128,1, 32,0,0,6,66,0,2,3,96,0,0,12,0,18,128,0,0,33,0,0,6,192,0,0,16,0,0,3,0, 1,12,0,1,49,0,0,2,192,64,16,0,0,3,97,32,0,1,1,32,0,0,137,248,128,133, 0,2,192,136,24,0,0,3,96,0,0,12,0,0,32,0,0,32,66,128,8,153,4,1,98,0,0, 12,0,1,48,32,0,15,9,0,0,18,16,66,2,5,2,3,0,1,12,0,0,4,48,5,164,64,4,0 ,0,137,3,32,4,0,0,64,0,0,1,18,168,248,160,65,20,0,1,208,0,2,96,104,0, 0,141,168,1,4,192,0,0,80,34,64,80,35,1,68,33,16,0,0,4,17,0,14,32,16, 52,192,6,196,130,26,97,0,0,104,12,13,160,1,4,129,18,1,0,0,90,80,0,0, 108,36,13,176,9,52,33,112,255,128,1,32,0,1,192,0,5,12,128,1,0,2,128,0 ,2,3,0,23,49,0,0,6,0,1,24,0,1,96,0,0,12,128,1,16,16,4,0,1,24,0,0,1,96 ,0,0,12,128,1,49,0,0,24,249,128,129,44,8,0,3,192,0,0,24,0,0,12,132,1, 16,0,1,64,0,0,30,8,1,24,0,3,48,0,15,128,0,0,32,0,0,4,242,0,0,16,192,0 ,0,64,0,0,3,0,3,2,2,0,0,16,0,3,8,0,0,129,32,0,0,104,248,132,5,20,1,0, 3,64,0,0,8,66,140,128,17,1,9,16,132,20,90,0,0,35,9,0,0,128,2,0,0,160, 8,0,15,68,16,32,66,16,16,8,97,0,0,32,36,1,128,5,50,33,36,0,1,8,2,11, 34,16,36,136,4,16,5,121,254,140,5,26,0,2,4,0,1,19,96,64,0,0,130,17,2, 17,64,68,132,128,0,0,17,98,2,32,0,2,64,0,15,16,49,0,0,38,0,1,24,17,19 ,96,129,64,136,9,33,2,34,8,0,0,88,32,10,98,128,44,144,1,48,34,203,250 ,224,1,36,0,1,48,32,0,0,192,131,120,0,0,11,224,1,12,128,7,240,0,0,30, 208,3,120,16,3,2,0,0,12,0,15,96,0,0,12,144,1,242,0,0,6,128,131,24,0,0 ,2,224,1,28,160,7,0,1,6,192,1,120,0,0,3,96,128,12,0,0,24,251,136,1,40 ,0,5,3,96,0,0,8,128,1,16,32,0,0,64,0,1,4,1,98,0,20,128,0,0,32,16,4,0, 1,16,0,0,3,64,32,12,0,1,48,16,2,0,1,16,16,3,64,0,0,8,8,1,33,0,0,114, 249,0,0,1,18,0,2,36,0,1,3,0,0,17,44,16,144,32,0,0,32,130,4,153,128,18 ,96,0,0,68,2,0,1,8,0,15,33,8,1,129,192,0,0,128,32,3,16,4,140,2,128,56 ,0,0,132,0,1,132,0,0,35,114,129,66,0,1,136,16,144,252,176,1,36,128,16 ,66,24,2,0,0,96,8,0,0,133,32,4,4,128,64,16,0,0,64,80,34,1,65,128,1,0, 0,4,0,15,32,4,52,130,22,20,16,154,80,1,106,128,1,160,1,133,144,0,0, 208,2,27,97,0,0,105,66,141,160,5,54,16,224,250,0,1,16,0,1,128,0,5,8,4 ,0,0,1,8,0,0,2,0,2,1,0,22,64,48,16,6,0,1,24,0,0,3,96,0,1,128,1,16,0,1 ,192,0,0,24,0,0,1,96,0,0,12,132,1,48,0,0,16,253,224,65,44,8,2,176,0,0 ,6,192,0,0,24,0,0,7,0,1,16,16,0,2,30,4,3,120,0,0,3,0,1,60,0,15,128,0, 0,32,16,4,0,1,16,192,128,64,64,3,0,2,32,0,0,64,64,16,0,3,8,128,0,0,32 ,0,0,120,252,172,5,20,1,68,88,128,2,64,0,0,8,0,0,9,0,0,4,2,1,32,4,136 ,26,1,35,106,18,1,0,1,52,0,16,40,16,0,0,2,8,8,137,66,17,32,0,0,1,128, 80,48,0,0,16,132,2,72,16,3,33,8,132,4,9,18,66,226,251,4,80,24,0,0,64, 100,0,0,152,0,0,147,96,20,4,128,5,0,0,2,6,1,24,128,0,0,131,0,0,2,140, 2,0,0,48,64,0,15,136,48,1,70,196,2,24,0,0,10,96,132,76,130,1,162,32, 32,0,0,4,24,0,0,34,96,32,12,0,0,144,176,16,232,254,192,1,36,128,7,128 ,0,0,30,208,3,112,0,0,11,224,65,12,160,7,240,0,0,30,208,1,120,64,15,0 ,1,56,0,15,96,0,0,12,160,1,240,32,6,200,0,0,25,0,0,14,224,1,28,128,7, 242,128,6,208,1,122,0,0,3,232,1,12,0,0,112,253,4,0,0,24,0,0,2,160,0,0 ,24,0,0,3,96,0,0,4,128,1,0,1,6,0,3,3,0,1,12,0,1,48,8,0,15,128,32,0,0, 4,192,64,16,8,131,64,0,0,12,0,0,1,49,0,3,16,8,3,65,64,8,4,0,0,32,0,0, 97,250,128,17,33,0,0,70,66,0,0,26,0,0,3,96,0,0,9,128,132,48,16,18,2, 68,88,4,145,96,20,12,0,1,176,0,15,128,9,0,0,66,32,72,8,132,0,0,34,0,0 ,34,12,192,1,48,5,16,162,130,0,0,128,3,112,2,0,0,64,5,1,34,160,251, 160,1,0,0,2,0,1,24,0,1,96,104,0,1,32,32,52,136,134,80,0,0,64,80,3,1, 68,128,1,0,0,4,0,15,32,4,52,160,2,18,132,26,97,0,0,104,32,1,160,145, 52,160,34,208,8,0,0,64,16,12,1,0,0,160,49,180,0,0,104,250,128,1,0,0, 32,0,5,96,0,3,32,0,1,128,32,0,1,3,0,22,64,48,0,3,24,0,1,96,0,1,128,1, 48,0,0,4,193,128,0,1,1,32,64,0,0,128,1,48,16,56,248,128,65,12,0,1,176 ,0,1,192,0,0,24,0,2,128,48,8,6,65,0,0,30,4,1,26,0,0,3,0,18,128,0,0,32 ,16,6,128,0,0,16,192,0,0,64,0,0,3,0,0,64,32,16,2,192,0,3,1,32,0,0,128 ,1,32,32,168,249,132,5,4,0,1,80,128,0,0,64,0,0,8,0,2,8,176,0,0,64,128 ,128,90,0,0,8,8,0,0,1,0,1,128,8,0,15,4,145,0,0,18,4,128,8,97,0,0,32, 32,1,128,16,16,2,4,196,20,0,1,11,96,1,0,0,128,41,16,0,0,171,251,12,4, 177,0,1,96,0,2,139,0,0,1,0,0,128,9,48,2,34,64,64,128,0,0,144,96,18,12 ,2,0,0,128,32,0,15,16,50,0,1,192,8,88,8,131,96,129,44,130,129,48,16, 34,128,2,0,1,10,66,1,0,1,9,48,18,17,250,96,0,0,60,8,0,0,128,0,1,192,3 ,16,16,0,0,224,65,60,136,7,244,0,0,30,208,0,0,120,0,0,15,0,1,60,0,15, 96,0,0,12,144,1,244,64,6,128,3,24,0,0,14,224,1,12,128,7,116,64,0,0, 192,1,56,16,0,0,224,128,12,0,0,200,249,136,65,48,0,1,160,0,2,3,96,16, 0,0,128,129,48,8,0,0,66,128,0,2,96,0,0,12,0,1,48,16,0,16,32,16,4,192, 64,16,0,0,3,64,32,12,0,0,1,32,0,0,2,196,128,0,1,3,96,0,1,128,1,33,0,0 ,177,253,0,0,16,48,0,1,64,0,2,3,96,2,0,0,128,16,48,2,38,128,0,0,24,4, 66,96,0,0,12,0,1,48,2,0,14,128,9,10,1,35,65,4,0,0,17,3,16,4,12,192,33 ,136,16,4,32,8,0,1,35,98,20,0,0,64,16,8,32,40,251,176,1,52,128,66,130 ,24,26,64,136,8,0,0,1,32,4,4,128,128,16,0,1,81,32,0,0,68,128,161,1, 132,0,15,160,81,180,192,68,16,0,0,27,81,10,104,2,1,32,132,180,192,6, 208,72,2,2,0,0,104,2,45,164,9,54,1,216,254,128,1,48,0,0,4,64,0,0,24,0 ,6,1,8,0,5,1,0,1,128,1,0,0,8,0,15,1,48,0,0,2,4,0,0,24,0,0,1,97,64,0,0 ,128,0,0,48,0,0,6,196,0,3,96,64,12,128,1,48,32,0,0,249,128,1,48,128,3 ,176,0,0,24,0,0,129,24,0,1,4,0,0,17,0,3,6,0,1,26,0,0,3,128,1,0,16,128 ,65,32,16,6,0,2,192,2,64,32,3,0,1,32,0,1,194,128,8,8,0,3,128,1,33,16, 40,249,140,17,49,128,4,80,128,24,0,0,32,8,0,0,32,0,0,8,0,0,34,64,4, 136,2,0,1,8,0,0,1,128,33,0,0,4,0,14,128,5,16,2,166,0,0,132,152,80,1, 32,1,1,128,17,17,64,22,192,4,0,0,1,0,0,96,132,140,136,9,144,0,0,18, 252,132,49,48,16,2,96,0,0,64,8,8,96,4,32,128,81,128,0,0,22,0,0,8,89,0 ,0,11,96,20,140,128,5,1,2,0,14,128,9,48,1,38,196,4,80,32,2,96,132,140 ,2,5,176,0,0,4,128,136,0,0,1,0,0,64,0,0,8,0,0,1,48,0,0,72,249,224,1, 60,128,5,128,0,0,6,192,128,112,16,15,232,1,12,144,7,241,0,0,30,196, 131,120,0,0,15,232,1,12,16,0,14,224,65,12,160,1,240,32,14,128,1,24,0, 0,14,224,64,12,160,3,114,0,0,6,16,0,0,56,32,7,228,0,0,13,16,0,0,254, 132,1,0,0,32,2,96,0,3,96,0,1,128,1,0,1,6,0,1,24,0,0,3,97,0,0,12,128,1 ,0,0,16,0,14,128,65,32,0,0,6,192,128,16,0,0,2,64,0,0,12,128,1,32,0,0, 4,192,0,0,8,0,1,64,0,0,8,128,1,32,0,0,9,248,0,0,4,1,2,4,128,0,2,160, 96,0,0,64,132,132,48,64,2,4,68,24,0,0,33,96,0,0,12,0,0,8,145,0,15,128 ,17,0,0,66,38,66,0,0,132,32,1,0,0,34,12,128,65,0,0,34,1,8,72,16,17,0, 0,16,128,2,16,132,0,0,4,96,250,0,5,68,0,20,128,32,0,44,144,249,32,0,0 ,4,128,0,0,16,0,1,64,0,0,8,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0 ,1,32,0,0,4,0,15,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4, 128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,136,252,0,74,152,255,36, 0,0,4,128,0,2,2,96,0,0,8,0,0,33,36,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0, 0,1,32,0,17,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0 ,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,233,249,12,8,0,3,130,0,3,4,0,16 ,1,0,23,32,0,1,128,0,16,59,250,0,0,64,0,8,64,0,0,32,0,0,4,128,0,0,16, 0,1,64,0,3,32,0,1,8,0,14,32,0,0,4,128,0,2,2,0,1,10,0,1,40,0,0,4,128,0 ,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,24,250,8,0,27,32,0,24,2,0,18, 178,253,0,0,128,4,144,16,2,64,2,72,0,0,1,34,129,36,0,0,4,128,0,0,16,0 ,0,2,72,0,0,8,32,1,36,0,1,2,0,14,32,0,0,4,128,0,0,16,66,2,0,0,32,8,0, 1,33,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,96,250,160,0, 12,66,96,8,0,1,33,0,1,2,0,3,32,0,18,16,0,2,32,0,1,8,128,0,2,1,0,2,128 ,0,0,2,2,4,64,0,2,2,0,1,96,251,0,17,1,0,2,4,0,22,64,64,0,0,6,0,1,34,2 ,0,5,24,0,1,1,0,1,128,0,4,1,4,4,16,248,0,6,8,0,1,4,1,0,9,128,0,2,176, 0,1,32,0,18,10,0,12,64,0,3,8,0,3,9,0,0,64,249,0,3,16,0,1,16,0,42,16,0 ,0,16,2,0,3,1,0,5,16,2,64,0,4,16,168,251,0,14,8,0,5,4,0,22,64,0,0,32, 0,9,2,0,1,1,0,7,8,0,2,64,255,0,12,32,0,1,128,0,0,16,2,0,6,128,0,16,32 ,0,2,136,17,0,7,32,0,1,16,0,0,16,2,0,0,64,0,1,1,0,0,32,0,1,192,249,0, 3,2,0,0,16,0,0,2,1,0,4,16,4,0,4,1,0,4,1,0,15,32,0,0,9,32,0,8,2,0,0,8, 16,0,4,128,0,2,32,0,0,16,0,0,56,248,32,0,3,20,0,0,2,0,1,2,0,0,1,4,0,0 ,9,32,0,3,64,0,0,16,0,0,1,32,0,20,8,0,8,128,0,4,64,0,7,32,0,0,240,252 ,32,0,2,3,21,64,2,136,0,0,2,0,0,1,8,0,0,13,48,0,0,128,2,0,0,192,0,0,8 ,0,0,1,160,128,2,6,0,14,64,128,8,48,0,2,128,2,0,3,36,0,0,104,21,0,1, 148,80,0,0,6,1,0,1,82,48,12,0,0,224,252,128,2,32,4,100,193,16,0,0,2,8 ,0,1,4,128,0,0,32,4,132,0,0,130,0,1,10,96,20,4,0,0,128,1,8,0,14,128, 64,16,32,128,0,3,1,0,1,128,8,4,16,8,0,0,16,16,34,0,0,1,2,0,1,12,64, 129,4,8,253,136,0,3,65,0,5,4,0,0,1,0,7,8,16,4,0,2,16,0,14,32,0,0,9,0, 5,2,0,4,8,16,0,3,64,0,4,128,0,0,128,0,0,249,0,1,4,160,0,0,16,128,0,0, 16,0,5,4,32,4,2,0,1,128,0,0,16,0,25,1,0,12,128,0,8,8,224,250,0,12,32, 4,0,2,144,0,26,4,5,128,0,2,2,0,1,8,0,3,32,0,3,64,64,0,1,1,32,0,0,1,0, 0,32,112,255,0,16,16,0,29,8,16,0,1,64,0,2,1,0,9,128,0,5,8,88,251,0,0, 2,64,0,2,1,32,0,0,4,0,1,8,0,6,32,2,0,0,128,8,16,0,23,8,0,5,1,0,6,1,0, 3,8,0,1,2,0,0,88,252,16,0,27,4,0,16,8,0,4,8,0,8,4,0,4,64,0,0,8,0,2,12 ,255,0,10,32,0,2,2,0,3,1,0,26,4,0,3,2,0,0,1,1,0,0,4,0,0,1,0,4,32,0,1, 192,0,0,16,0,0,128,0,0,32,254,16,0,14,16,8,0,0,1,0,1,128,1,0,36,16,0, 4,4,0,3,128,0,1,212,254,0,17,1,0,28,8,0,1,1,8,0,1,32,0,9,4,1,128,16,0 ,0,128,0,2,104,248,0,58,128,1,0,2,64,0,2,2,32,0,3,128,200,250,0,20, 192,0,5,32,0,17,64,64,128,0,10,64,0,7,16,0,3,96,252,0,0,1,0,3,16,0,20 ,32,0,17,16,0,1,4,0,8,2,32,0,2,1,0,2,1,0,1,2,64,0,0,136,250,0,5,16,0, 8,4,0,0,32,0,9,4,0,16,32,16,0,0,148,0,1,16,0,1,64,0,1,32,8,0,0,4,0,4, 2,8,0,2,32,0,0,112,253,64,64,0,12,128,0,4,128,8,0,35,4,0,3,2,0,4,32,2 ,0,0,128,0,0,88,251,0,46,2,0,0,1,0,9,2,0,6,4,0,5,216,252,0,47,128,0, 12,4,16,0,6,32,0,2,72,253,0,0,128,0,1,16,0,0,64,0,4,4,0,7,8,0,3,4,0,0 ,4,16,0,42,4,0,0,200,251,0,12,2,0,35,2,0,1,32,0,11,4,0,4,4,0,0,64,184 ,251,0,13,1,0,33,4,0,1,48,0,1,64,0,10,2,0,4,64,0,0,184,250,0,14,16,32 ,2,0,0,128,0,1,1,2,0,21,4,4,32,0,0,8,2,0,2,8,0,6,32,0,8,2,32,200,250, 0,3,2,0,6,16,0,2,32,0,0,4,64,0,2,2,0,21,128,0,3,128,0,0,36,0,1,16,0,5 ,2,0,7,64,0,1,32,254,0,3,1,0,42,64,1,0,1,1,0,4,65,0,2,8,8,0,3,132,136 ,16,16,0,2,64,251,4,96,0,1,4,0,16,1,0,4,64,0,21,64,0,6,128,0,0,132,0, 2,8,0,0,64,0,0,32,0,0,4,0,2,152,252,0,3,12,0,4,128,0,0,24,0,6,64,0,2, 1,0,2,16,0,26,64,0,6,128,0,1,8,0,6,128,251,16,0,0,2,0,9,64,0,30,96,0, 0,8,0,1,64,0,0,4,0,1,16,136,0,0,32,0,0,16,0,0,2,0,0,1,32,128,0,0,32,0 ,1,64,160,0,0,20,96,252,0,11,32,0,4,128,16,0,6,6,2,0,25,32,0,3,32,0,1 ,192,0,0,68,32,0,2,10,64,0,0,32,0,0,64,248,128,0,1,8,0,1,32,8,0,0,1,0 ,0,16,0,2,16,8,0,0,64,0,2,1,0,0,16,0,0,34,0,0,16,0,17,1,0,0,2,1,0,2,2 ,16,8,1,0,0,128,0,7,2,0,4,128,148,249,4,0,0,5,0,0,128,16,128,2,0,0, 128,8,0,1,2,0,0,4,0,2,64,0,0,128,0,2,1,8,0,1,32,0,14,32,0,12,64,0,8,8 ,0,4,32,253,64,0,0,5,21,0,0,84,192,6,128,80,10,32,0,0,8,3,12,16,20,32 ,128,0,0,192,0,1,32,1,76,64,8,32,0,14,32,128,160,0,0,21,130,34,0,0, 128,0,0,16,32,2,0,0,168,161,0,0,2,0,1,128,2,0,0,1,74,64,1,0,0,160,5, 184,250,0,0,64,0,0,44,0,0,138,18,64,4,153,64,68,13,160,96,0,0,5,2,128 ,0,0,8,0,0,2,32,2,64,129,72,0,0,8,0,16,128,0,0,2,33,32,16,0,1,5,0,0,4 ,0,0,8,33,0,0,132,64,128,16,0,1,10,0,0,9,128,64,1,0,0,120,250,0,0,64, 0,0,8,0,3,16,1,2,0,0,4,64,0,0,1,0,0,4,0,1,8,0,1,8,0,1,32,32,0,0,8,0, 17,128,0,0,4,64,0,4,8,0,4,128,0,6,32,128,0,1,184,248,0,2,16,0,0,16, 128,0,2,8,0,0,2,0,1,1,32,0,0,128,0,2,2,0,2,8,0,24,8,0,6,8,0,0,2,2,0,0 ,8,0,3,2,0,3,144,253,16,0,73,204,251,18,0,13,33,0,1,6,0,2,2,0,23,1,0, 2,128,0,7,128,0,1,2,0,1,8,0,1,16,0,0,4,64,0,0,128,28,254,0,1,8,16,0,0 ,16,0,1,68,0,9,128,8,0,0,64,0,1,1,0,23,2,16,0,5,16,0,4,64,16,0,0,128, 0,2,32,0,2,232,249,0,4,64,0,4,32,0,41,64,128,0,3,4,0,2,1,0,9,144,252, 8,0,14,64,0,5,4,0,27,1,0,7,16,0,5,1,0,5,144,251,0,7,16,0,4,1,0,1,4,0, 1,1,64,0,23,1,0,8,8,0,3,128,0,3,66,0,0,8,0,1,128,0,0,16,0,0,104,252,0 ,15,16,3,2,0,3,1,0,3,2,0,17,128,0,0,16,32,0,6,128,64,128,8,0,0,33,32, 0,0,8,0,2,4,2,0,0,16,8,184,255,0,12,128,0,8,4,0,20,128,0,3,64,64,0,8, 8,0,1,32,0,4,4,0,3,184,253,0,1,4,0,2,32,0,5,16,0,6,4,8,0,0,16,0,2,16, 8,0,27,64,4,0,3,128,0,2,16,0,5,168,254,0,4,8,0,5,4,4,0,7,64,64,0,1, 160,0,19,128,0,1,128,0,6,128,0,5,8,0,1,48,0,5,24,254,0,16,8,0,27,2,0, 2,1,0,10,8,0,0,2,0,6,4,0,1,200,251,0,1,1,4,0,9,64,0,0,8,0,1,32,0,30, 32,0,20,9,0,0,200,252,0,6,2,0,1,2,0,1,32,0,8,8,0,1,32,0,19,52,2,0,0, 208,0,0,130,0,1,8,0,0,9,0,2,128,2,16,136,0,0,64,3,104,0,0,33,32,0,0,1 ,0,0,16,253,0,46,32,32,0,0,192,128,0,0,8,0,2,4,2,0,2,4,0,3,3,96,0,1,4 ,0,2,112,250,0,7,192,3,0,2,128,1,0,8,32,0,0,96,0,19,48,8,0,0,128,64,8 ,0,2,32,7,0,2,128,5,64,64,0,0,192,3,96,32,4,128,0,0,1,0,0,16,252,0,7, 69,163,0,2,128,1,0,8,2,0,0,32,32,0,19,2,0,0,64,2,16,2,0,0,96,4,9,0,2, 128,2,128,0,1,64,3,96,4,72,1,5,0,1,104,250,0,6,64,4,16,1,0,2,72,0,8,2 ,0,1,8,2,0,17,176,8,0,0,192,0,4,36,8,0,3,35,2,24,0,1,3,96,8,128,1,16, 1,0,0,232,254,0,6,6,192,3,0,2,96,0,8,24,64,0,0,96,0,19,60,0,1,48,64, 30,8,0,0,120,0,0,5,0,3,4,240,0,1,128,3,24,0,0,15,224,1,0,1,16,248,0,7 ,4,0,4,64,0,11,128,0,18,48,8,0,0,128,0,0,8,0,1,96,0,0,4,0,3,4,64,0,2, 3,0,1,4,128,0,2,248,253,0,6,24,1,11,1,0,11,96,129,0,0,128,9,0,18,48,0 ,1,32,130,88,16,0,0,96,66,8,0,3,34,193,72,0,1,3,0,0,68,12,144,9,2,0,0 ,56,249,32,0,0,20,0,3,26,0,1,106,0,1,160,1,0,1,32,20,2,0,2,8,0,3,52,0 ,7,48,0,6,24,0,0,4,193,0,0,208,24,26,16,0,0,8,0,0,1,32,4,4,194,0,2,74 ,0,1,104,64,65,168,1,4,0,0,40,252,0,1,32,0,3,24,0,1,96,0,1,128,1,0,3, 128,0,7,48,0,7,12,0,6,6,0,3,192,0,0,24,0,5,128,0,4,16,16,0,0,96,0,2, 129,0,1,176,248,128,1,44,0,3,24,192,131,120,0,4,128,1,112,64,0,16,12, 0,6,6,0,0,16,128,1,128,0,0,16,0,2,32,11,96,0,0,16,128,5,0,1,24,0,2,16 ,4,128,129,0,1,192,249,8,128,20,0,3,24,64,35,104,0,4,128,0,0,16,4,0, 16,10,0,6,5,0,0,32,161,0,0,64,66,136,16,0,0,96,4,5,32,16,33,132,2,0,1 ,16,8,0,0,32,1,72,16,16,0,0,18,179,249,128,133,24,34,0,2,128,16,16,97 ,0,2,72,0,1,22,0,1,1,0,2,20,0,2,48,66,0,6,10,0,6,5,0,1,64,38,192,4,88 ,0,2,132,6,0,1,130,64,35,2,0,0,128,16,0,0,96,128,128,136,132,0,0,65, 113,248,96,0,0,36,0,3,6,192,3,112,0,1,96,0,1,128,7,49,0,3,24,0,3,60,0 ,17,60,128,7,49,128,6,16,0,0,120,0,0,9,96,0,0,60,0,0,4,0,1,6,0,1,120, 0,0,15,96,1,12,0,0,232,253,132,1,33,0,3,24,0,1,96,0,2,64,0,1,6,0,4,96 ,0,3,48,32,0,16,16,0,0,6,128,0,0,16,0,1,96,64,8,0,1,16,0,0,4,0,4,64,0 ,0,4,0,0,64,0,0,32,17,251,128,17,16,8,0,2,24,9,147,96,0,5,6,0,0,136,0 ,2,96,8,0,2,48,0,17,48,192,6,0,0,8,133,8,0,0,96,4,4,0,0,1,50,17,2,1,0 ,0,24,33,0,0,112,32,140,4,16,48,0,0,96,254,32,0,0,5,128,38,16,0,0,2,0 ,1,2,0,1,32,0,0,48,9,32,4,0,3,104,32,13,32,0,0,4,9,0,6,18,0,6,169,1,4 ,6,0,0,208,2,26,73,16,105,0,0,1,160,137,4,192,0,0,208,0,0,130,72,65, 104,12,69,160,32,52,0,0,176,248,0,3,6,4,0,1,4,0,5,48,0,6,96,0,0,12,0, 19,129,0,2,128,128,24,0,4,128,1,0,4,16,0,0,2,96,0,1,8,0,2,32,254,128, 65,44,0,0,6,1,0,1,200,131,0,2,96,0,0,60,128,1,0,4,96,0,0,15,96,0,1,8, 0,6,8,0,6,132,1,16,32,0,0,192,0,0,16,192,0,2,11,128,1,16,128,5,192,64 ,24,0,0,3,0,1,4,128,0,0,48,8,16,251,132,17,20,0,0,38,192,40,0,0,65,11 ,0,2,32,0,0,52,128,0,5,96,68,13,32,8,2,1,0,16,34,1,0,0,192,68,8,81,64 ,0,0,36,5,128,137,160,160,2,192,8,24,9,2,33,18,72,2,1,178,0,0,178,251 ,140,4,24,34,36,0,0,34,0,0,4,16,1,0,1,128,5,128,0,0,38,0,4,64,132,12, 0,0,4,0,0,10,0,6,16,0,6,136,136,128,0,1,192,4,153,16,8,2,64,6,128,17, 0,0,34,35,194,128,24,1,16,96,32,76,128,17,48,66,0,0,251,96,128,36,128 ,3,50,0,0,6,192,3,0,2,224,129,12,136,7,1,0,3,24,0,0,14,96,128,12,0,7, 8,0,6,100,1,60,32,0,0,240,0,0,6,192,0,0,120,0,0,9,96,1,61,0,0,4,240,0 ,0,30,196,0,0,122,0,0,15,226,65,60,0,0,248,249,136,0,0,32,0,0,6,192, 32,0,0,4,0,3,128,1,0,1,6,0,6,12,0,2,8,0,6,2,0,6,1,64,16,0,1,192,0,0, 16,0,1,98,32,8,0,0,1,17,0,0,4,192,0,0,24,8,0,0,65,0,0,12,128,1,48,0,0 ,17,253,0,0,80,144,8,33,196,8,16,0,0,131,0,2,128,1,0,1,6,0,4,64,129, 12,128,17,162,0,7,8,0,6,4,0,0,48,18,0,0,192,136,64,32,34,96,4,4,64,4, 48,33,18,193,68,152,0,0,11,112,66,12,130,73,176,16,16,254,32,81,4,128 ,6,16,24,10,0,0,16,2,0,0,1,32,4,0,1,32,20,0,0,2,64,0,0,40,65,0,2,52,0 ,7,2,0,6,33,33,20,128,6,208,72,2,96,3,0,1,1,160,72,20,132,0,0,208,0,0 ,26,65,8,8,33,13,160,9,53,0,0,248,254,0,3,6,4,0,0,16,0,5,64,0,12,48,0 ,7,4,0,6,2,0,0,32,16,6,192,0,2,2,1,0,2,1,0,4,16,16,2,34,0,0,8,4,1,0,1 ,152,250,0,0,1,45,0,0,6,48,128,22,192,0,3,98,0,1,128,1,0,0,128,6,192, 0,0,96,0,3,48,0,7,4,0,6,2,129,48,128,7,128,0,0,8,16,3,0,1,11,128,65, 16,128,5,0,1,24,0,0,3,0,1,12,132,1,0,1,144,250,8,8,20,0,0,66,18,8,10, 64,0,3,32,16,2,128,0,1,4,2,64,0,0,32,17,0,2,48,0,7,2,0,6,129,0,0,32, 144,6,64,2,17,0,1,4,0,0,5,0,1,32,136,2,0,0,20,64,4,11,97,132,128,0,0, 32,0,0,4,113,255,0,0,32,24,34,66,1,4,141,8,147,0,1,32,2,72,0,1,70,0,0 ,72,152,0,0,163,0,0,4,0,2,128,16,0,6,32,0,6,144,8,2,18,6,192,0,0,128, 16,161,0,1,6,128,17,48,33,35,2,130,88,32,131,64,36,132,130,5,128,32, 131,251,96,0,0,36,128,7,48,0,0,16,192,3,0,1,3,96,1,0,0,128,7,50,0,0, 30,208,3,24,16,0,2,12,0,7,16,0,6,232,1,12,0,0,7,48,64,30,192,2,0,1,9, 224,1,61,0,0,4,48,0,0,30,192,3,56,0,0,11,224,65,60,0,0,232,250,132,1, 32,0,1,1,32,16,0,0,3,0,1,12,2,64,0,1,6,0,1,24,0,0,3,64,32,0,2,48,128, 4,0,5,64,2,0,5,128,1,1,32,6,128,0,0,8,0,0,128,0,1,8,128,129,48,0,0,4, 0,1,24,4,3,98,64,0,0,130,65,48,16,202,251,128,65,16,10,22,128,0,0,8,5 ,3,0,1,64,32,0,2,6,192,72,26,0,0,3,48,0,3,48,64,0,14,128,9,48,2,6,32, 130,88,32,32,0,1,4,128,1,176,8,66,1,64,24,0,0,35,96,0,0,128,128,1,48, 2,216,253,160,9,4,0,1,208,68,2,0,0,16,2,0,0,13,32,73,4,17,0,0,20,0,0, 26,0,1,72,8,0,0,8,4,20,0,0,2,0,5,6,1,0,5,3,0,0,4,145,38,208,128,10,66 ,19,0,1,1,160,9,2,145,36,210,0,0,26,65,65,104,0,0,13,161,17,4,2,124, 254,128,129,0,2,192,0,5,12,128,0,5,24,0,1,32,0,2,64,32,0,16,128,32,0, 0,6,196,0,2,3,1,0,1,128,1,0,1,2,192,0,0,16,16,2,64,32,12,128,129,0,0, 8,16,255,128,0,0,44,0,1,128,32,22,192,0,2,12,224,0,1,128,1,48,0,0,30, 0,1,96,64,3,96,0,0,44,32,4,0,5,10,2,0,5,101,0,0,48,32,2,128,128,8,0,0 ,2,0,1,11,128,129,12,128,5,240,0,0,24,0,1,96,0,0,8,0,0,1,12,16,104, 254,136,17,22,0,1,192,0,0,10,64,0,2,12,32,1,0,0,132,0,0,16,0,0,26,0,1 ,96,0,0,1,32,0,0,148,0,0,2,0,5,4,1,0,5,34,0,0,48,0,0,38,68,2,144,4,9, 4,0,0,5,128,9,4,128,2,208,0,0,144,8,0,0,1,128,36,132,4,6,0,0,115,249, 128,49,24,34,0,0,192,8,140,8,139,0,1,32,4,1,128,32,32,194,40,24,0,1, 96,2,44,132,133,24,129,0,6,96,0,6,144,17,48,1,38,200,4,24,1,67,0,1,6, 128,1,48,2,5,192,0,0,8,2,33,32,20,12,128,1,0,0,2,17,251,224,0,0,36,0, 1,240,128,16,192,3,0,1,3,160,0,0,12,128,1,240,0,0,28,0,1,24,32,15,224 ,1,32,8,2,0,6,1,0,5,224,129,60,136,7,48,128,30,200,0,2,9,96,0,0,61,16 ,4,224,0,0,30,192,3,90,0,0,3,104,0,0,13,32,88,250,132,1,32,8,0,0,192, 128,16,4,3,0,2,128,0,1,32,6,192,0,0,24,0,1,96,0,0,12,128,1,40,136,0,6 ,64,0,6,128,1,48,0,0,6,128,0,0,24,0,0,2,0,1,8,0,0,1,48,0,0,4,192,0,0, 24,0,1,1,0,0,8,8,1,0,0,32,80,253,64,8,18,2,0,0,192,8,8,1,3,0,2,32,1, 32,0,0,6,209,0,0,24,0,1,96,33,13,128,1,16,2,1,0,5,128,0,6,128,1,176, 64,6,4,8,25,133,16,4,0,0,4,192,4,50,0,0,4,208,0,0,24,8,19,0,0,64,66, 64,144,36,2,148,251,176,9,36,162,66,212,4,2,0,0,16,10,34,68,34,0,0,4, 17,0,0,4,0,0,2,64,0,0,8,0,0,13,0,1,4,0,0,1,0,5,128,0,6,32,0,0,20,132, 0,0,144,16,26,65,35,9,0,0,1,32,132,52,2,0,0,16,0,0,26,64,8,104,0,0,77 ,168,1,5,16,156,254,128,129,16,0,0,4,192,32,0,4,8,0,10,16,12,0,0,64,0 ,0,128,0,6,64,0,13,16,16,3,0,2,128,1,32,32,0,4,2,98,0,0,12,128,1,0,1, 168,255,128,1,44,128,3,112,0,0,22,192,0,0,24,32,11,96,1,12,128,7,0,1, 6,192,0,0,24,32,0,0,96,0,0,44,32,8,0,6,4,0,5,96,0,0,16,128,1,128,0,0, 24,0,0,2,0,0,32,11,0,0,1,48,32,0,2,24,0,0,3,98,0,0,8,0,0,1,13,0,0,152 ,250,12,17,22,128,4,144,132,10,64,0,0,8,0,0,133,164,0,0,4,132,22,1,0, 0,2,64,0,0,104,4,0,0,32,0,0,148,0,0,4,0,6,2,0,5,32,0,0,32,136,0,0,64, 64,0,0,32,1,98,4,5,128,4,1,1,0,2,24,17,3,96,33,68,144,4,132,64,163, 249,4,145,40,0,0,2,192,34,140,8,99,0,0,65,6,192,0,0,128,32,32,2,0,0, 24,1,11,32,20,32,128,133,24,1,0,14,128,73,176,32,22,66,40,152,4,35,2, 8,6,128,1,48,1,0,0,192,130,152,4,11,96,8,140,128,17,128,0,0,121,249, 224,1,36,128,5,240,0,0,16,192,3,24,0,0,8,32,1,12,128,7,0,1,30,200,3, 90,0,0,3,232,1,32,8,0,14,224,1,60,128,7,240,0,0,30,192,0,0,120,0,0,9, 224,1,61,8,0,0,240,0,0,30,192,131,24,0,0,3,104,0,0,13,32,10,249,4,0,0 ,32,0,0,2,192,32,16,4,3,0,0,64,10,0,0,1,0,0,32,0,0,1,0,0,24,0,0,3,96, 16,0,0,128,1,40,136,1,0,5,192,0,6,128,1,48,0,0,6,192,128,24,4,2,96,64 ,8,128,1,48,8,0,0,192,0,0,24,0,0,3,0,0,64,8,4,129,0,1,8,248,128,1,34, 0,0,4,128,8,72,0,0,3,72,0,0,4,160,0,0,32,0,0,70,0,1,26,0,0,3,64,1,128 ,136,1,144,0,15,160,1,176,8,6,192,0,0,24,0,0,16,98,1,4,128,5,50,0,1, 192,0,0,24,32,67,0,0,1,0,2,32,34,52,254,160,17,5,130,66,18,66,2,0,1, 10,0,0,64,34,0,0,52,0,1,4,32,2,64,3,104,0,0,13,0,1,4,128,2,0,5,64,1,0 ,5,160,1,52,128,0,0,208,0,0,90,64,11,8,0,0,1,160,49,180,128,0,0,16,2, 26,73,8,104,0,0,13,161,17,4,0,0,84,249,128,1,16,8,4,64,0,8,48,16,0,4, 3,96,0,0,12,0,3,2,0,6,1,0,5,128,1,49,32,0,0,192,0,0,24,8,3,2,0,1,128, 1,48,16,0,1,128,24,0,0,2,98,64,12,128,129,16,32,200,249,128,129,0,0, 136,3,0,0,128,22,192,3,0,1,11,96,1,32,160,7,48,0,0,6,192,3,0,4,44,32, 0,15,1,32,128,1,192,0,0,16,8,2,0,0,32,11,128,1,32,16,0,0,48,0,0,16,0, 0,3,66,0,0,8,0,0,1,0,1,152,255,132,17,0,0,130,4,0,1,10,64,67,0,1,133, 164,0,0,16,129,70,17,0,0,2,64,3,0,4,148,0,7,10,0,6,128,16,17,194,0,1, 34,136,0,0,1,97,4,5,128,145,16,1,32,17,66,72,8,11,32,32,36,132,4,2,16 ,155,250,12,9,2,1,2,0,0,16,140,8,16,1,130,6,192,0,0,48,4,32,194,66, 152,4,3,0,0,33,12,0,1,24,1,0,14,132,5,50,16,6,194,8,88,0,0,67,0,0,128 ,6,128,1,48,0,0,16,0,1,25,17,147,96,1,140,128,129,0,0,64,41,250,224,0 ,0,12,136,5,48,0,0,16,192,3,24,0,0,8,32,1,12,128,7,240,0,0,30,128,3, 24,0,0,15,4,0,0,32,8,0,14,96,0,0,12,128,7,240,128,6,208,0,0,120,0,0,9 ,96,0,0,13,144,1,177,0,0,6,192,3,24,64,3,100,0,0,12,0,0,8,251,136,1,0 ,1,2,0,1,16,4,0,0,96,0,0,10,0,0,1,32,0,1,193,0,0,24,0,0,3,0,1,12,4,0, 0,40,8,0,15,1,32,0,0,6,0,1,16,0,0,2,96,0,0,8,0,0,1,32,0,3,16,0,0,3,64 ,0,0,8,0,0,1,0,1,105,250,64,144,136,8,4,32,66,8,0,0,139,96,8,4,160,0, 0,8,16,22,192,0,0,26,64,3,0,0,128,76,0,1,16,0,15,64,144,136,144,6,0,0 ,4,133,136,16,100,32,4,192,4,138,64,6,1,0,0,5,2,11,20,36,34,72,132,8, 5,88,255,32,1,4,137,194,16,136,146,8,16,10,0,0,72,34,1,132,0,1,20,136 ,2,64,0,0,104,0,0,1,1,0,0,36,1,0,14,160,49,52,134,6,208,0,0,154,96,19 ,12,0,0,9,32,16,52,129,6,16,0,0,90,80,65,104,130,77,168,1,5,2,216,250 ,128,128,16,0,0,4,64,0,0,8,0,3,4,128,0,0,48,16,0,10,16,8,0,6,8,0,6, 132,1,48,0,0,6,192,0,0,24,0,0,3,0,1,4,128,129,48,32,6,0,1,24,0,0,2,96 ,0,0,12,128,1,16,16,40,250,0,2,128,3,0,1,22,192,0,2,11,96,1,0,0,144,7 ,112,0,0,6,192,0,0,96,32,3,0,1,44,32,0,15,1,32,32,6,192,0,0,16,8,2,0, 0,32,11,0,0,1,32,16,6,0,1,16,0,1,64,32,8,0,0,1,1,0,0,32,253,132,1,129 ,136,4,0,0,66,10,64,0,2,133,164,0,0,16,129,6,18,66,2,64,0,1,4,33,16,0 ,0,148,0,0,4,0,5,16,2,0,5,136,132,16,1,6,0,0,34,72,0,0,33,98,4,5,128, 40,144,0,0,6,0,1,136,32,0,0,33,1,68,144,4,0,0,5,138,248,140,9,130,8,2 ,0,0,2,20,0,0,19,0,1,6,192,0,0,48,66,32,2,0,0,89,8,35,97,20,32,0,1,40 ,0,0,2,0,5,16,1,0,5,136,1,178,16,16,196,68,152,16,35,2,12,6,128,1,48, 34,0,0,192,130,88,8,33,100,66,44,132,5,0,1,240,250,224,1,12,128,5,48, 128,16,192,131,24,64,8,32,1,60,128,7,48,0,0,30,192,3,120,0,0,11,8,0,0 ,32,0,0,7,0,5,144,3,0,5,104,0,0,12,128,1,240,0,0,6,192,0,0,120,0,0,9, 224,1,13,128,1,244,0,0,6,192,3,24,0,0,3,96,0,0,13,16,56,249,136,1,0,1 ,2,0,1,16,0,0,3,96,32,6,128,0,0,32,0,1,1,0,0,24,0,0,3,0,0,16,0,2,40, 128,5,0,5,208,2,0,5,8,129,32,0,3,16,0,0,2,96,64,4,128,1,32,0,0,6,196, 0,0,16,0,1,65,0,0,8,0,0,1,0,1,193,250,128,145,0,0,10,4,0,0,20,16,0,0, 3,96,2,8,32,1,144,64,6,0,0,136,24,64,3,96,1,129,8,0,0,32,0,0,4,0,5,8, 2,0,5,4,4,0,0,34,0,1,72,64,32,16,98,0,0,8,128,5,2,33,70,192,0,0,128, 16,35,0,0,129,128,16,16,1,65,104,252,0,29,4,0,6,2,0,35,248,251,32,0,0 ,4,128,0,0,16,0,0,2,64,0,2,1,0,1,4,128,0,2,2,0,1,8,0,1,32,0,0,4,0,7, 16,0,6,8,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,2,2,64, 0,0,8,0,0,1,32,0,2,72,249,0,63,128,0,8,16,144,254,36,0,0,4,128,0,0,16 ,0,0,2,64,0,0,8,32,1,32,144,4,128,0,0,16,20,2,73,8,9,0,0,129,36,0,0,4 ,0,15,32,0,0,5,128,64,18,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,8,2 ,64,0,0,8,0,0,1,32,0,0,132,0,0,105,249,12,0,6,1,0,1,8,128,16,0,6,16,0 ,2,64,4,0,1,2,0,18,32,2,0,11,1,4,0,9,195,250,32,0,6,4,0,3,32,0,6,64,0 ,0,1,0,4,8,0,16,4,0,1,16,0,0,2,0,1,8,0,7,128,2,0,1,9,0,0,1,32,0,2,120 ,253,8,0,14,32,0,1,128,0,26,1,0,6,1,0,1,4,0,0,1,0,2,32,0,2,2,0,4,32, 154,251,32,0,0,4,192,160,16,0,0,1,96,0,0,12,36,65,40,144,4,130,0,0,24 ,8,2,97,32,9,66,1,48,144,0,0,33,0,14,32,16,4,128,16,18,0,0,2,64,8,8,0 ,0,33,32,16,4,18,0,0,18,2,2,64,16,8,0,0,1,32,0,0,4,1,160,252,0,1,1,0, 3,16,0,14,64,0,29,4,0,9,4,66,0,0,128,0,0,16,0,3,96,253,0,30,2,0,1,8,0 ,3,1,0,1,4,0,7,3,0,3,64,0,1,64,0,7,64,0,1,1,0,2,96,255,0,0,128,0,13, 64,0,2,32,0,6,1,4,0,14,32,128,4,0,1,16,16,0,2,128,0,9,176,8,0,2,8,32, 32,0,0,88,251,0,0,4,0,3,64,0,8,32,0,5,64,0,31,33,0,3,4,0,2,4,0,3,1,0, 1,132,64,160,250,0,9,16,0,3,12,0,8,2,0,4,2,0,1,8,0,3,1,0,1,4,0,3,64,0 ,1,1,0,1,64,0,5,128,0,3,32,0,0,4,4,16,0,4,216,249,0,9,16,0,43,1,0,4, 16,130,0,9,8,0,0,184,254,0,1,1,0,1,64,0,1,80,0,0,64,32,0,0,2,0,4,128, 2,0,1,32,0,3,16,0,15,128,0,3,1,128,2,0,3,4,2,0,0,4,32,0,0,65,128,2, 128,0,1,64,4,34,32,0,1,120,252,0,2,4,2,4,0,0,2,0,0,1,2,0,0,1,132,64, 16,32,0,5,16,64,0,0,128,64,4,32,0,19,16,0,1,16,0,0,32,16,0,6,32,0,0, 72,128,0,1,8,8,0,2,96,253,0,0,131,0,0,160,0,0,36,0,0,2,200,0,0,18,32, 1,44,0,0,5,32,0,1,64,4,0,1,24,64,0,0,32,0,0,13,32,0,14,64,40,0,2,18, 64,84,16,0,0,8,64,106,5,5,8,16,2,170,194,4,208,0,0,2,32,3,76,128,162, 0,0,160,251,128,0,1,34,4,0,0,16,24,0,0,169,160,0,0,68,34,100,160,4, 192,149,0,0,8,0,0,1,72,17,0,0,1,64,0,16,128,8,0,0,4,170,128,32,72,2, 65,64,8,9,11,64,16,0,0,28,67,42,18,4,3,0,0,24,72,194,224,48,4,240,252 ,32,0,5,2,128,128,32,0,0,1,4,128,0,2,4,0,0,8,0,0,1,0,0,16,0,1,128,0, 16,128,0,2,2,0,0,64,2,0,0,1,0,2,2,64,4,0,1,17,32,0,0,136,0,1,64,0,0, 40,0,0,5,0,0,160,248,0,2,128,0,1,128,8,0,5,64,4,32,0,0,65,0,3,32,0,1, 4,0,20,32,0,0,17,0,1,4,0,0,65,16,4,8,0,2,2,0,1,2,0,0,1,0,0,8,1,0,0,32 ,16,136,168,254,0,45,65,0,0,32,128,0,1,66,0,0,2,0,4,4,0,1,16,0,5,33,0 ,0,1,0,1,240,248,0,9,32,0,3,16,0,31,8,0,2,64,0,0,1,0,4,2,8,0,4,64,0,1 ,32,0,0,4,0,1,120,248,0,9,128,0,39,2,0,2,2,0,4,64,0,2,16,0,0,192,0,2, 128,4,0,0,32,112,248,0,0,2,128,32,0,1,128,1,16,0,0,2,128,0,0,4,0,1,4, 0,0,4,0,4,32,1,0,2,16,0,14,128,128,0,0,16,0,0,8,64,0,11,16,0,8,16,16, 251,0,19,64,4,0,2,32,0,20,2,0,6,4,0,1,32,0,4,2,0,3,96,0,4,152,249,0, 10,1,0,2,128,0,5,4,0,23,64,0,4,8,64,0,0,8,0,1,1,0,5,4,0,0,32,0,1,4, 128,0,0,4,152,249,0,47,64,0,1,32,0,1,128,0,3,128,0,7,32,0,0,4,0,2,4, 176,249,32,0,2,16,0,26,1,0,1,32,1,0,1,128,0,2,144,0,28,1,128,184,253, 0,5,64,0,4,8,0,9,32,0,3,16,0,17,128,4,0,0,2,0,6,64,1,0,7,8,0,2,2,64,0 ,0,152,250,128,0,2,1,0,3,64,0,0,32,0,4,128,0,3,128,0,22,1,1,4,2,160,0 ,3,2,0,3,16,0,1,32,0,0,2,16,0,1,65,4,128,0,1,32,216,252,0,0,2,0,21,8, 0,7,1,0,2,1,0,1,128,0,2,128,0,1,40,0,3,4,16,1,0,1,4,0,0,64,8,32,0,1,1 ,0,3,8,8,64,0,0,17,0,0,104,252,0,1,1,0,11,4,0,1,128,0,1,32,0,4,1,0,26 ,40,0,1,128,0,3,128,0,0,64,0,6,16,0,0,72,253,0,4,64,0,11,32,0,6,80,0, 3,16,0,2,16,0,2,8,0,2,8,0,5,64,0,22,64,108,250,0,21,2,0,1,4,0,18,64,0 ,0,16,64,0,13,64,0,0,8,64,130,0,5,128,152,250,0,4,16,0,3,8,0,36,16,0, 3,8,0,3,128,0,1,16,0,3,8,0,7,144,255,0,5,16,0,6,1,32,0,32,4,0,13,32,0 ,6,32,0,1,184,249,0,51,16,0,9,128,16,0,9,24,255,0,1,2,0,6,8,0,6,32,0, 11,32,0,4,1,0,0,16,0,3,128,0,2,32,0,8,64,0,1,32,0,8,8,0,2,104,250,16, 0,1,128,0,10,64,0,18,64,0,10,1,0,6,1,0,14,4,128,0,1,254,252,0,2,128,0 ,1,32,0,38,2,0,2,2,0,0,1,4,4,4,0,6,18,1,32,0,0,4,128,144,16,16,2,0,2, 251,0,14,128,0,0,8,0,5,16,0,0,32,0,21,3,128,0,0,32,0,6,2,0,9,32,0,0, 128,0,0,8,252,0,8,2,0,4,2,0,2,2,0,2,24,0,0,16,0,1,2,0,17,8,0,5,8,0,4, 128,0,14,255,0,0,5,0,15,128,162,0,5,2,0,3,128,0,2,128,0,2,64,0,2,64,0 ,0,128,0,13,1,0,2,128,2,0,7,8,168,255,0,25,2,0,1,128,0,2,2,0,2,64,0,2 ,1,0,4,32,0,3,20,128,0,4,128,33,0,2,128,0,4,2,64,1,0,0,8,248,248,0,1, 16,0,0,128,0,1,16,0,0,1,32,0,1,65,0,4,128,8,0,0,128,0,0,16,0,0,2,64, 16,0,3,4,0,0,32,0,8,32,0,1,128,0,0,16,0,0,4,80,0,0,32,8,0,2,4,8,0,0, 65,32,0,0,16,0,0,1,0,1,8,0,0,4,32,104,253,0,7,4,128,16,0,3,4,8,0,1,32 ,0,4,1,8,0,0,1,0,14,32,0,2,16,2,0,0,128,0,4,4,2,0,0,1,128,0,3,2,1,0,0 ,32,0,3,8,44,248,0,1,8,0,1,2,0,0,4,144,0,0,26,0,0,64,69,40,20,32,0,1, 212,4,0,0,10,1,32,105,13,128,9,0,3,16,0,0,128,0,7,16,64,0,1,166,161, 32,128,4,136,0,0,16,32,105,9,0,0,9,144,162,162,66,0,0,88,0,0,1,64,0,0 ,4,0,0,168,48,144,255,0,0,64,16,0,0,64,129,0,0,20,4,113,74,16,68,32, 177,34,5,6,160,0,1,128,152,32,2,72,131,130,34,12,0,3,4,64,48,0,3,8,2, 96,24,0,1,1,136,134,64,16,0,0,20,128,32,8,9,11,0,1,168,72,65,144,0,0, 44,192,32,8,20,0,0,80,0,0,32,128,253,0,0,32,4,0,1,1,0,1,16,1,0,0,64,2 ,0,3,2,0,3,128,32,0,1,130,0,1,8,0,3,4,128,64,0,4,2,64,8,0,2,144,0,0, 64,0,1,16,0,0,34,0,1,2,0,1,32,0,0,17,0,1,8,128,64,0,0,4,0,0,64,0,1,32 ,255,0,4,16,0,0,8,0,0,128,8,0,1,128,128,4,16,4,64,0,5,4,8,0,0,8,4,0,5 ,64,0,3,2,0,0,16,32,0,3,2,1,32,0,3,16,4,2,0,4,32,0,2,2,64,0,4,192,251 ,160,0,8,64,0,39,64,0,2,8,0,16,8,0,0,56,251,0,0,32,0,15,16,0,31,32,0, 0,16,128,0,13,32,0,0,2,0,2,8,252,0,4,1,0,2,8,0,1,4,0,3,16,0,4,24,128, 0,5,32,0,2,32,0,2,16,0,2,16,0,1,4,0,3,1,0,11,32,0,0,4,0,0,65,0,1,2,0, 2,160,253,0,12,8,0,9,64,0,2,128,32,0,16,6,0,3,34,2,0,5,4,0,5,9,16,8,0 ,0,32,0,0,64,0,0,184,255,2,0,9,8,0,3,4,0,0,64,0,5,4,128,0,2,16,0,1,64 ,0,3,8,0,1,32,0,3,2,0,3,128,0,1,64,0,0,8,0,2,64,0,11,4,16,100,252,0,4 ,130,0,19,8,0,17,32,0,3,16,0,13,16,0,1,8,0,0,8,0,3,152,255,0,13,1,0,4 ,16,0,0,2,0,1,8,0,0,1,0,14,128,0,2,16,8,4,0,1,8,32,0,1,64,0,2,48,8,0, 2,8,0,2,128,0,1,64,0,1,96,254,0,4,16,0,12,16,0,25,32,0,2,64,0,1,96,0, 4,32,64,0,4,8,0,4,64,32,0,0,128,255,0,7,64,0,10,8,0,31,4,0,7,8,0,3,1, 16,1,0,4,200,250,0,4,64,0,0,8,2,1,0,4,64,0,0,2,0,0,32,0,0,128,0,0,32, 1,0,4,2,0,1,8,0,3,1,0,1,4,0,4,128,0,17,34,0,0,2,0,5,32,251,0,3,4,0,46 ,1,0,1,64,1,0,1,34,0,12,2,0,0,232,254,64,1,0,3,2,0,47,16,0,1,32,2,0,3 ,2,0,9,232,253,0,6,2,0,2,2,0,7,26,64,0,4,8,132,0,17,20,128,0,0,16,40, 0,4,5,0,1,4,128,32,209,0,1,3,0,1,32,128,1,0,0,20,0,0,112,252,0,10,32, 0,7,24,0,5,128,0,0,16,0,16,32,0,8,8,0,4,192,0,8,32,0,0,112,253,0,9,24 ,0,8,24,0,0,128,0,2,96,0,19,44,0,2,32,0,4,11,0,4,1,0,0,6,0,1,24,0,0,3 ,0,1,44,0,0,8,253,0,6,64,32,0,0,8,0,8,24,0,0,16,0,2,32,0,0,32,64,0,16 ,20,0,2,2,0,4,5,0,1,128,32,32,0,1,2,0,1,8,0,0,1,0,1,20,18,224,254,0,7 ,8,0,0,96,33,0,9,8,2,0,1,128,73,0,0,10,0,16,24,66,0,1,36,0,4,6,2,0,1, 1,64,1,130,88,4,0,0,96,4,44,0,1,24,1,232,251,0,6,6,0,1,120,0,8,6,200, 0,3,224,1,28,0,17,32,128,1,180,0,5,9,0,1,60,144,1,48,0,0,30,0,1,120, 16,15,2,0,0,36,32,32,253,0,9,96,0,14,128,1,16,16,0,16,32,0,0,6,0,6,8, 0,4,1,32,24,0,1,96,0,0,12,0,1,40,0,0,232,254,0,6,152,2,0,0,96,0,10,19 ,2,0,1,128,1,16,0,17,16,9,70,4,34,0,4,68,2,0,1,65,20,0,1,24,0,1,96,0, 0,12,0,1,16,9,96,250,0,1,4,0,7,2,0,2,4,128,0,1,2,130,72,0,0,4,1,77,16 ,0,0,4,34,0,16,4,0,1,16,32,2,65,19,0,1,1,32,0,1,128,0,0,208,68,0,2,1, 32,128,1,0,0,4,0,0,56,253,0,10,32,0,6,64,0,3,32,0,27,16,3,1,0,6,192,0 ,1,8,0,8,250,0,9,24,0,4,8,0,0,49,0,0,24,0,1,24,0,3,48,0,17,44,0,1,64, 0,1,4,1,0,1,11,0,4,129,0,0,30,192,0,0,24,0,0,3,0,1,44,0,0,168,252,8,0 ,1,4,0,5,8,0,3,128,0,1,16,4,145,32,8,12,130,64,8,0,0,128,16,0,16,20,0 ,2,128,0,0,1,3,1,0,0,5,0,1,1,0,0,32,192,2,91,68,0,0,8,0,0,1,0,1,20,18 ,33,251,0,9,96,0,4,8,16,1,4,128,4,33,4,65,4,1,0,0,32,8,0,16,24,66,0,1 ,2,0,0,5,2,0,1,6,130,17,1,0,0,16,193,130,128,0,0,11,96,1,12,0,1,24,1, 11,250,0,1,12,32,0,5,120,16,0,2,12,128,7,32,64,6,192,0,0,112,0,0,15,0 ,1,12,0,17,32,0,1,48,128,6,192,3,1,0,0,9,224,1,0,0,128,1,240,0,0,30, 200,131,120,16,15,2,0,0,36,32,248,253,4,0,0,48,0,6,96,0,4,8,0,0,1,0,1 ,8,0,1,32,4,0,1,32,0,17,32,0,2,64,0,1,2,0,1,8,0,4,193,0,1,4,3,96,0,0, 12,0,1,40,0,0,210,253,0,2,65,0,5,96,0,3,48,0,0,32,208,68,128,0,0,80,0 ,0,4,8,16,0,0,48,33,0,16,16,8,0,1,4,8,5,10,1,0,0,4,130,81,0,1,6,192, 136,88,0,0,3,96,0,0,12,0,1,16,8,96,251,0,1,128,128,6,80,0,0,26,64,8,4 ,2,1,32,68,52,128,0,2,2,64,0,0,40,4,13,0,1,4,34,0,14,32,8,4,0,2,8,27, 64,1,105,0,0,1,160,1,0,0,128,6,17,16,0,2,1,32,128,161,0,0,36,1,96,254 ,0,2,16,6,128,0,4,32,0,2,48,0,6,96,64,12,0,1,48,0,16,64,0,7,96,0,5,6, 0,2,8,0,4,1,16,32,128,250,0,1,60,0,1,176,0,3,24,0,0,3,0,0,64,0,2,1,0, 3,96,0,1,8,0,18,64,44,0,1,48,0,0,24,4,1,96,0,0,11,224,1,0,1,6,49,0,0, 30,192,0,0,24,0,0,3,96,129,44,0,0,88,251,4,0,0,4,65,0,0,80,0,0,64,16, 80,8,0,0,1,0,0,16,48,18,0,2,128,32,128,96,130,44,0,1,128,16,0,15,16, 20,0,1,16,0,0,64,0,0,34,100,0,0,5,160,69,0,1,22,16,136,26,69,0,0,8,0, 0,1,160,0,0,20,0,0,226,253,12,0,3,96,8,1,0,0,32,100,4,76,0,0,8,49,2, 16,1,0,1,17,8,98,65,12,16,0,0,176,8,0,15,80,24,66,0,0,192,36,64,0,0, 131,0,0,68,6,2,8,0,1,68,0,0,132,128,0,0,35,98,2,76,192,0,0,40,1,184, 251,0,1,8,144,1,132,0,0,6,200,0,0,120,16,14,98,0,0,60,144,1,0,1,30, 192,0,0,24,0,0,15,0,1,28,0,15,96,0,0,32,0,1,240,0,0,6,208,3,24,0,0,9, 192,129,0,0,128,1,52,0,0,30,200,3,120,16,15,34,1,36,16,48,252,8,0,1, 32,0,0,128,0,2,130,96,0,0,12,0,0,64,48,0,0,6,1,0,0,24,8,0,0,96,32,12, 8,0,18,64,32,0,1,192,0,2,3,0,1,8,32,0,0,1,0,1,1,0,2,3,96,0,0,12,64,1, 32,0,0,41,253,0,1,128,0,0,16,72,34,0,0,16,0,0,96,0,0,12,128,8,48,34, 32,0,1,24,1,19,114,4,76,0,1,16,65,0,14,128,4,144,8,0,0,192,0,0,24,16, 83,0,1,36,130,9,0,1,4,128,2,153,4,3,96,0,0,12,128,0,0,32,0,0,40,253, 32,0,0,4,128,2,18,0,4,2,1,32,4,4,128,194,192,136,2,64,0,0,72,128,1,32 ,32,36,66,0,15,16,6,128,2,16,0,0,1,97,35,2,132,1,32,0,0,52,128,6,16, 64,0,1,8,1,32,128,33,1,4,34,124,252,0,3,4,0,5,32,0,1,128,0,1,4,0,4,96 ,0,24,4,0,3,3,0,4,48,0,0,6,0,2,8,0,3,128,0,2,176,248,0,2,128,3,176,0, 3,24,0,0,3,0,1,48,0,1,240,0,1,4,128,64,0,1,8,64,48,0,15,96,0,0,44,128 ,5,0,1,6,0,1,24,0,0,11,0,0,64,48,0,1,48,64,30,192,131,24,0,0,3,96,129 ,48,0,0,136,249,8,0,1,128,4,80,0,3,8,0,0,1,0,0,8,50,0,0,32,18,64,64,0 ,0,16,96,34,64,0,1,160,8,0,14,32,0,0,20,128,66,2,36,2,0,0,35,9,0,0,5, 0,1,48,16,0,0,208,8,26,96,19,8,0,0,1,160,0,1,66,11,254,128,1,0,0,1,2, 96,8,1,0,1,96,1,44,2,32,0,0,2,34,2,0,1,4,8,98,32,128,4,68,48,6,0,14, 128,73,24,66,3,0,0,8,24,5,1,96,32,6,2,68,0,0,66,70,64,0,0,128,0,0,16, 97,1,140,196,0,0,160,0,0,121,249,224,1,13,144,5,128,0,3,120,16,14,96, 0,0,12,144,7,240,0,0,6,192,3,120,0,0,15,96,0,0,60,0,15,224,1,32,128,4 ,48,32,30,192,3,122,0,0,9,224,1,12,128,7,180,32,30,200,3,120,32,15,32 ,1,12,32,0,0,249,4,0,0,48,32,2,128,0,3,96,0,0,12,0,7,4,0,0,96,0,2,64, 48,0,15,128,1,32,0,0,5,0,1,24,0,0,1,96,0,0,8,0,0,64,48,16,6,196,0,1,4 ,0,0,96,0,0,12,192,0,0,32,0,0,185,249,0,0,4,50,0,0,4,64,40,0,2,96,0,0 ,12,128,68,0,0,34,6,200,0,0,24,0,0,16,34,36,64,144,16,48,8,0,14,128,1 ,16,10,2,64,20,24,0,0,16,100,0,0,132,2,8,0,0,2,6,128,40,152,0,0,3,98, 0,0,12,0,0,1,48,17,72,248,32,0,1,128,6,16,0,0,128,64,0,0,8,4,1,0,0,8, 4,128,0,0,208,0,0,130,0,5,8,4,0,16,16,38,194,4,0,0,8,1,97,2,9,0,0,9, 34,0,0,52,128,2,16,0,1,3,8,1,33,0,0,160,9,4,34,40,254,0,3,6,0,2,8,0,1 ,16,12,0,0,128,0,2,192,0,0,16,4,0,4,128,0,18,16,0,0,2,0,6,4,0,1,48,0, 0,4,0,7,132,65,48,0,0,64,252,0,3,6,176,0,0,6,0,1,32,0,0,12,100,0,2,6, 196,0,0,6,0,4,96,0,1,8,0,14,96,0,0,44,128,5,48,0,0,6,0,2,16,11,0,0,64 ,48,128,5,2,0,0,6,192,3,24,0,0,15,130,1,0,1,88,248,12,8,2,0,0,6,80,0, 0,2,0,0,16,4,18,76,32,0,1,34,38,192,2,147,8,0,3,32,0,0,128,0,15,32,0, 0,20,128,66,18,0,0,2,0,0,32,2,0,0,5,0,1,48,128,34,192,34,2,64,131,8,0 ,0,45,128,69,0,0,66,185,255,4,4,1,0,0,16,96,8,153,16,16,0,0,66,12,130 ,65,0,0,2,0,0,194,8,137,4,0,3,128,69,0,0,8,0,14,128,69,40,0,0,3,192, 34,24,1,32,0,0,17,10,0,0,68,0,0,6,35,2,40,24,1,16,1,34,64,0,0,1,48,4, 43,252,96,0,1,128,1,130,0,0,30,192,0,0,25,0,0,3,224,1,60,136,7,240,0, 0,4,0,4,224,1,12,0,15,224,1,32,128,4,240,0,0,30,208,129,24,0,0,9,96,0 ,0,12,0,0,4,48,0,0,30,208,3,24,0,0,15,228,1,29,0,0,240,249,132,1,0,2, 128,32,24,0,0,3,2,32,0,0,128,1,0,1,6,0,1,26,0,4,128,1,0,0,8,0,14,128, 1,32,0,0,3,192,0,0,24,0,1,98,16,8,128,65,0,1,5,193,0,0,24,0,1,96,0,1, 128,1,0,1,194,249,0,0,8,1,0,1,64,8,24,0,0,8,0,0,1,0,0,136,1,0,0,16,70 ,193,20,24,9,0,3,128,1,48,0,15,128,1,32,0,0,4,192,0,0,24,0,0,1,0,0,2, 8,0,0,8,0,1,66,192,32,24,0,0,163,96,18,44,130,41,16,16,192,255,32,0,0 ,128,0,1,16,0,0,2,64,0,1,2,1,0,0,8,20,0,0,34,16,0,0,10,64,0,4,8,20,0, 16,16,54,10,0,1,8,11,65,35,34,1,1,128,16,54,128,0,0,208,0,1,3,8,1,33, 0,0,32,0,0,4,65,232,248,0,2,16,0,6,32,0,1,128,32,0,0,4,2,0,0,16,0,5, 128,32,0,17,48,0,4,4,0,0,64,16,4,2,1,48,0,9,4,0,2,192,252,0,1,12,0,1, 176,0,0,24,0,1,24,0,0,3,96,0,0,44,128,5,48,0,0,22,0,4,96,0,0,44,0,15, 96,0,0,48,0,1,48,0,0,14,0,0,3,88,0,1,96,1,48,128,5,194,64,6,192,3,122 ,0,0,15,130,1,0,0,16,192,255,8,8,54,4,0,0,80,0,0,64,16,19,12,0,0,1,32 ,0,0,148,136,162,16,0,0,10,0,0,128,0,2,32,0,0,148,32,0,14,32,0,0,176, 8,0,0,16,0,0,130,32,35,41,33,128,162,0,0,49,128,34,0,0,8,2,64,3,104, 16,77,128,1,32,0,0,1,250,0,0,4,1,0,1,96,8,1,0,1,96,2,140,130,73,24,1, 3,192,72,12,0,0,8,2,0,1,128,81,24,0,15,128,81,48,9,0,0,192,40,128,0,0 ,16,50,0,0,32,192,0,1,65,35,194,0,0,152,4,16,1,34,64,0,0,4,128,16,67, 251,96,0,0,8,32,0,0,128,0,0,6,200,0,0,121,16,14,224,1,36,8,4,240,0,0, 16,196,3,0,2,224,1,36,16,0,14,224,1,60,0,1,240,0,0,20,200,2,64,0,0,3, 2,1,12,0,0,4,240,32,30,192,3,120,0,0,15,100,64,28,0,0,200,252,4,0,3, 128,32,0,2,98,0,0,12,128,1,40,8,5,192,0,0,16,4,0,3,128,1,40,8,0,14, 128,1,48,0,1,192,0,0,26,0,0,3,80,0,1,64,1,48,0,0,5,1,0,0,24,0,0,128,0 ,0,16,0,2,16,16,250,248,128,9,1,65,0,0,64,2,0,0,16,8,96,0,0,12,128,1, 144,0,0,2,192,0,0,72,0,0,16,2,0,1,128,1,144,0,15,128,1,32,10,0,0,192, 0,0,88,4,66,40,0,0,2,130,0,0,48,32,18,192,40,24,0,0,3,96,4,76,2,80,16 ,2,192,255,48,0,1,128,6,144,8,25,96,0,0,8,1,13,0,0,8,4,0,0,32,16,0,0, 2,0,1,8,0,0,13,0,0,8,4,0,16,16,54,0,0,64,8,8,1,97,35,1,1,65,0,0,16,6, 128,0,0,208,2,0,1,8,1,33,0,0,160,1,4,0,0,112,253,0,4,64,0,4,16,12,0,0 ,128,0,2,2,0,5,12,0,0,128,0,18,48,0,5,3,0,0,16,4,2,0,3,192,32,0,0,8,0 ,3,132,1,0,1,48,252,0,3,6,176,0,0,30,0,3,3,96,0,0,44,128,5,48,0,0,22, 0,1,24,0,1,96,0,0,44,0,15,96,0,0,48,160,1,48,0,0,6,0,0,3,88,0,1,96,1, 0,0,160,5,114,0,0,30,192,3,120,0,0,15,130,1,0,1,112,248,12,32,0,1,134 ,80,0,0,2,17,0,1,20,1,32,0,0,148,136,162,16,0,0,10,0,1,8,0,1,32,0,0, 148,32,0,14,32,0,0,48,129,0,0,16,0,0,2,0,0,11,42,33,0,0,162,0,0,1,130 ,34,144,132,26,68,139,104,17,141,128,1,0,1,89,249,132,1,0,1,6,160,0,2 ,11,2,17,0,0,132,69,24,1,3,192,72,12,0,1,96,16,128,129,33,24,0,15,128 ,1,50,0,0,22,192,32,152,4,11,52,0,0,64,194,0,0,128,0,0,35,194,40,128, 0,0,16,1,34,64,0,0,4,129,8,107,252,104,0,0,1,128,7,132,0,0,30,192,3, 88,0,0,2,224,1,36,8,4,240,0,0,16,4,0,0,112,0,0,3,224,1,36,16,0,14,224 ,1,60,136,7,244,0,0,30,192,3,64,0,0,3,0,0,1,12,16,4,240,0,0,30,200,3, 120,0,0,15,100,0,0,12,0,0,136,252,0,3,6,128,0,4,16,12,128,1,40,8,5, 192,0,0,16,4,0,0,96,0,1,128,1,40,8,0,14,128,1,48,0,0,6,192,0,0,24,0,0 ,3,80,0,1,64,1,0,1,5,193,0,1,4,128,0,0,16,0,0,128,1,48,32,114,248,16, 8,2,0,0,38,136,0,0,26,0,0,16,4,2,140,132,1,16,0,0,2,192,0,0,8,0,1,104 ,0,0,64,132,1,16,0,15,128,1,0,0,8,6,192,0,0,24,0,0,1,42,0,0,32,130,0, 0,48,33,2,128,32,24,1,35,96,1,140,130,1,49,0,0,56,255,32,0,0,36,144,6 ,0,1,10,66,8,0,0,2,5,8,8,36,1,36,0,1,18,64,0,0,12,0,0,1,160,5,36,0,16 ,16,6,128,130,0,0,8,3,64,32,64,1,65,0,0,17,182,160,36,18,0,1,3,0,0,1, 33,0,0,32,0,0,36,18,144,253,0,1,16,0,0,6,0,1,16,0,0,3,1,32,12,0,0,128 ,16,8,2,2,0,0,8,8,0,3,128,1,17,16,0,18,4,0,4,33,16,0,0,136,0,0,48,0,0 ,2,0,7,4,0,2,16,249,0,1,44,0,0,6,0,2,4,0,0,24,0,0,3,96,0,0,44,128,5,0 ,1,22,0,1,24,0,0,12,128,1,45,0,15,96,0,0,12,0,0,2,48,0,0,30,0,0,128, 88,0,1,100,1,48,128,5,2,0,0,6,192,0,0,120,0,0,15,0,1,48,8,248,249,4,8 ,22,0,0,6,0,1,64,0,0,16,12,0,0,69,40,0,0,20,128,162,0,1,10,0,0,8,12,0 ,0,12,128,17,20,0,15,32,0,0,4,0,0,4,16,0,0,26,0,0,8,40,33,128,160,0,0 ,177,160,34,0,1,2,64,0,0,104,20,13,0,1,32,2,10,255,140,5,33,0,0,128,0 ,1,8,9,139,96,17,8,132,9,169,0,0,3,0,1,12,0,0,32,100,0,1,144,5,170,0, 15,128,9,48,18,2,192,8,24,3,144,48,0,0,64,192,0,0,48,1,5,0,1,24,0,0, 35,0,0,34,76,0,0,4,48,10,56,249,96,0,0,24,128,1,0,1,30,192,2,120,0,0, 3,224,1,36,8,4,0,1,8,192,2,112,64,3,224,1,36,32,0,14,224,65,60,128,5, 240,128,28,192,1,64,0,0,3,4,1,60,16,4,48,32,30,196,131,120,0,0,15,100 ,64,60,0,1,250,8,0,0,32,0,4,8,1,96,0,0,12,128,1,32,0,0,3,0,1,8,0,1,96 ,0,1,136,1,32,0,15,128,1,48,0,0,2,192,0,0,24,4,1,48,0,1,192,0,0,48,0, 0,5,192,0,0,24,0,0,3,0,0,16,12,128,1,48,0,0,33,253,0,0,8,21,0,3,152,0 ,0,2,100,0,0,40,130,1,32,0,0,4,0,1,8,0,0,80,104,0,0,64,128,8,34,0,15, 128,1,52,0,0,4,192,0,0,152,0,0,163,72,0,0,40,16,1,16,65,4,192,0,0,25, 0,0,3,96,0,0,12,130,81,48,10,104,248,0,19,64,0,31,16,0,4,16,0,14,152, 251,32,0,1,128,0,0,16,0,1,64,0,0,8,0,0,1,32,0,0,4,128,0,2,2,68,0,2,1, 32,0,0,4,0,15,32,0,1,128,0,0,16,0,0,2,64,0,2,1,32,64,4,128,0,0,16,0,0 ,2,64,0,0,8,0,0,1,32,0,0,4,0,0,192,253,0,2,16,0,19,32,0,22,32,0,25, 136,255,40,0,0,132,128,0,0,16,0,0,2,96,0,0,8,0,0,1,32,0,0,4,128,0,0, 16,16,0,0,64,0,0,8,1,1,32,0,0,4,0,15,32,0,0,132,128,0,0,16,0,1,64,0,0 ,8,32,1,0,1,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,129,254,0, 2,1,0,1,4,0,4,64,0,3,16,8,4,0,0,1,0,1,2,0,22,34,0,2,64,0,2,4,0,1,16,1 ,0,0,32,0,11,147,251,32,0,1,32,0,1,64,0,0,64,0,3,8,0,4,128,0,0,68,0,1 ,64,1,0,26,68,0,1,64,0,2,4,0,1,1,0,10,8,251,4,0,1,16,0,8,4,0,4,128,0, 54,226,253,32,0,1,130,16,20,132,130,80,0,0,8,66,32,32,8,5,33,32,4,2,0 ,0,80,0,1,8,1,32,8,5,32,0,14,32,0,0,5,160,0,0,20,2,65,96,0,0,8,129,33 ,4,4,6,0,0,16,18,66,66,96,8,9,32,1,40,132,132,16,120,254,0,51,64,0,21 ,216,251,0,19,64,0,37,4,0,14,216,251,0,1,32,0,3,4,0,9,16,0,3,8,0,24,4 ,0,2,16,0,8,32,0,10,40,252,0,1,16,0,0,4,0,4,2,0,4,128,0,0,4,128,0,2,2 ,0,1,40,0,1,8,0,19,16,0,3,1,0,4,16,0,12,232,255,0,53,128,0,5,4,0,12, 24,251,0,8,2,0,64,184,253,64,0,0,1,0,0,2,0,0,128,0,2,2,0,7,128,0,2,32 ,0,0,4,0,0,64,0,0,8,0,19,1,0,6,1,0,3,33,32,0,5,128,64,16,0,0,88,250, 128,0,0,16,0,4,4,0,5,1,0,33,1,0,0,4,0,4,128,0,3,128,0,5,1,0,3,208,250 ,96,128,20,6,21,64,64,0,0,20,1,1,0,3,17,0,0,2,0,0,84,0,1,138,48,0,0,2 ,0,0,128,160,16,0,14,128,0,1,8,0,0,6,0,0,82,0,4,36,0,1,5,0,0,50,64,0, 4,1,192,128,8,0,0,192,254,128,150,130,0,0,1,16,0,0,8,4,33,37,16,0,2, 136,4,0,0,80,52,0,0,64,0,0,2,8,9,10,0,0,132,0,15,160,215,2,138,4,64,0 ,0,72,0,1,32,0,1,128,0,0,32,0,0,128,64,76,1,0,4,32,89,0,1,56,252,128, 0,5,2,80,0,0,8,64,0,5,32,128,0,5,8,0,17,64,128,0,0,8,0,0,64,0,0,8,0,1 ,32,0,1,128,0,3,64,0,7,64,0,0,128,80,250,0,15,32,0,1,32,0,3,16,4,0,18 ,128,0,2,2,0,9,16,0,1,2,0,6,64,0,2,56,255,0,19,16,8,0,3,8,0,1,48,0,15 ,128,0,0,16,0,0,2,0,0,17,32,0,1,128,0,1,1,2,0,3,16,32,0,2,8,4,0,2,104 ,252,0,28,16,0,17,32,0,11,32,0,12,152,252,0,2,4,0,4,64,0,2,4,0,38,64, 0,0,2,0,1,16,0,15,136,248,0,1,128,0,4,16,0,4,32,0,3,1,0,2,128,0,3,128 ,0,24,64,0,1,4,0,2,4,0,0,64,64,0,1,1,32,0,5,144,250,18,0,17,16,0,27,4 ,0,24,128,52,252,0,74,152,255,0,8,2,0,7,128,0,3,64,0,3,2,0,25,4,0,3, 32,0,13,24,255,0,7,4,0,17,32,0,25,128,0,5,8,0,12,240,255,0,1,18,8,0,0 ,8,0,1,16,0,2,4,2,0,4,32,0,1,64,32,16,0,21,1,0,2,64,0,1,4,0,19,16,249 ,0,2,128,0,14,2,0,34,4,1,0,4,16,0,9,8,0,0,145,249,0,7,32,0,0,4,0,4, 128,0,2,1,0,1,4,0,35,64,0,13,128,249,0,17,32,0,0,8,0,5,64,0,18,8,0,26 ,248,255,0,17,8,0,33,128,0,20,24,255,0,27,32,0,23,128,2,0,4,32,0,13, 48,255,0,27,4,0,26,32,0,5,2,0,2,1,32,0,2,128,0,1,56,248,0,12,4,0,9,32 ,0,27,4,8,64,0,4,64,0,10,128,0,0,248,251,0,1,8,0,0,1,0,2,4,0,2,2,0,61 ,120,252,8,0,5,2,64,0,8,16,0,1,64,0,52,192,249,0,1,1,32,0,0,132,0,1,8 ,0,0,2,0,3,32,0,2,129,0,2,2,64,0,2,1,0,25,1,0,4,32,0,12,136,254,0,0, 128,0,0,16,0,0,2,0,16,33,0,1,4,0,0,64,0,35,32,0,3,16,0,3,160,250,0,11 ,8,0,3,16,0,4,16,0,29,2,0,6,1,0,0,48,0,6,32,0,1,176,254,0,1,64,0,1,1, 192,36,8,4,0,0,32,0,0,32,128,0,0,16,0,0,2,0,7,128,0,18,1,0,1,5,160,0, 0,16,0,1,64,0,2,17,0,5,8,0,2,64,0,1,64,216,254,0,25,1,0,37,2,0,3,1,0, 1,16,0,0,184,255,0,46,128,0,24,80,8,192,250,32,0,3,1,0,1,4,0,0,32,0,1 ,128,0,1,8,0,1,32,0,2,8,0,0,2,0,0,64,8,16,0,18,2,2,64,0,5,1,0,0,16,8, 1,66,32,0,1,1,32,0,0,4,128,0,0,8,0,0,204,252,8,0,3,64,0,8,16,0,4,4,0, 2,4,0,19,64,8,0,1,1,0,7,64,0,1,4,0,11,80,251,64,45,160,0,0,20,82,32, 80,8,81,16,0,0,64,65,0,0,4,24,0,0,65,96,0,0,20,0,0,16,0,0,3,0,0,128, 24,16,0,15,64,5,0,0,1,6,64,8,0,0,6,0,0,12,0,0,4,0,0,9,144,1,34,64,48, 128,0,0,16,0,0,2,64,64,8,0,0,200,251,0,0,96,145,32,2,64,80,1,172,9,37 ,0,0,20,0,0,3,0,0,4,6,0,0,32,34,0,1,37,0,0,136,2,72,128,0,3,16,0,10, 128,88,4,128,2,0,1,72,2,0,2,20,130,48,8,0,1,96,32,0,0,5,41,66,1,32, 162,64,4,0,0,160,250,0,0,64,16,0,0,2,128,0,1,68,0,0,16,0,0,4,0,3,4,0, 0,32,0,2,8,0,1,2,128,0,16,128,64,0,1,2,0,1,8,0,3,4,34,0,3,64,32,0,0,4 ,1,0,2,136,64,0,1,64,254,0,1,1,0,2,32,0,5,128,0,1,136,0,7,4,0,6,4,0, 18,4,0,4,64,0,7,8,0,5,160,251,16,0,13,64,0,0,1,0,54,64,0,0,220,255,2, 0,72,128,48,253,32,32,4,128,0,7,32,0,10,40,0,21,128,0,1,1,0,5,8,0,0,4 ,0,4,1,128,0,0,17,0,4,8,128,252,8,0,12,1,0,1,2,0,6,1,0,27,4,0,7,16, 128,0,2,64,0,0,2,0,3,218,254,12,0,56,2,0,14,128,62,255,0,19,32,0,3,16 ,0,46,4,0,0,136,248,0,19,4,0,3,1,0,25,2,0,6,4,0,13,152,248,0,74,152, 255,0,6,16,0,1,96,0,2,1,1,8,4,0,8,1,0,21,32,0,1,8,0,0,144,0,2,128,0,0 ,16,0,3,8,0,0,128,0,3,32,0,0,144,248,0,1,32,0,4,2,0,1,8,0,4,8,128,0,3 ,64,0,0,2,16,0,1,32,0,17,128,0,0,2,0,1,64,0,2,8,0,3,6,128,16,0,0,16,2 ,0,2,32,129,32,0,0,192,254,0,20,16,0,2,32,0,24,128,0,22,40,253,0,27,8 ,0,45,16,255,0,1,52,128,0,0,16,4,0,1,19,96,36,13,128,17,4,128,0,0,16, 24,152,0,4,32,0,0,4,0,15,128,9,176,0,1,80,0,0,10,0,0,32,2,0,0,140,164 ,16,1,0,0,70,82,0,0,130,72,0,0,96,68,140,136,145,0,1,176,252,0,1,48,0 ,1,64,32,0,2,1,0,0,12,0,1,1,0,4,16,0,23,128,0,0,16,0,0,128,0,0,16,0,9 ,128,0,10,240,253,0,3,6,0,0,32,0,0,192,3,121,0,1,224,1,0,4,30,16,0,4, 128,48,32,0,14,224,1,60,32,0,0,176,0,0,22,192,0,2,15,128,1,0,0,128,7, 180,0,0,6,16,128,120,0,0,15,224,129,0,1,80,248,0,1,48,66,6,0,2,64,0,0 ,8,34,0,0,32,4,2,0,2,40,2,0,5,8,0,0,2,0,14,32,0,0,6,2,0,0,80,0,0,10, 64,0,2,65,132,137,0,0,128,0,0,80,0,0,130,0,0,16,8,34,1,48,4,0,1,56, 253,0,1,48,18,0,0,1,34,0,4,64,2,0,1,9,0,0,8,36,0,5,128,5,176,0,20,96, 16,12,8,64,0,2,128,72,0,2,96,4,0,0,1,136,0,6,152,252,0,1,60,128,1,48, 0,1,128,3,112,0,0,3,192,1,12,128,1,112,0,0,28,0,4,224,129,12,32,0,14, 192,1,60,0,1,128,0,0,16,192,0,2,14,96,1,0,1,7,144,64,6,208,0,0,112,0, 0,14,192,1,0,2,254,0,1,48,32,0,0,1,32,0,5,2,0,0,48,8,6,64,32,0,7,49,8 ,0,19,128,0,0,16,16,3,0,2,128,1,0,2,128,0,1,4,128,0,6,248,249,0,1,48, 1,0,0,32,8,0,1,3,96,0,0,32,128,1,176,0,0,22,196,2,24,0,4,128,9,48,0, 15,128,1,48,0,1,64,36,8,0,0,163,0,1,12,128,1,2,128,6,64,36,16,0,0,3, 96,0,0,12,128,1,0,1,8,254,128,133,20,0,1,16,40,2,0,0,11,96,8,0,0,128, 1,0,0,128,6,0,2,64,129,0,4,48,1,0,6,34,0,6,145,33,0,0,34,0,0,16,0,0,2 ,0,0,32,98,68,0,2,4,128,0,0,16,0,0,2,64,0,0,96,68,0,0,32,0,3,248,0,1, 32,0,1,64,0,3,2,0,3,1,0,0,6,0,10,16,0,6,12,0,6,6,0,16,1,0,2,3,0,6,16, 251,224,129,44,0,2,32,0,0,196,3,120,0,1,224,1,0,0,128,7,0,3,128,0,4, 60,16,0,6,12,0,6,230,1,61,0,1,176,0,0,22,192,131,120,32,0,3,32,0,0, 176,0,1,16,128,120,32,0,0,128,1,0,1,16,254,40,0,0,20,0,2,8,88,64,16,9 ,34,0,0,32,4,2,128,6,0,3,32,0,4,4,0,7,10,0,6,37,0,0,52,9,0,0,80,0,0, 10,64,3,8,0,3,48,1,32,88,0,0,64,0,0,16,8,4,0,1,128,0,1,41,252,0,1,24, 4,0,1,32,0,0,2,0,7,6,0,3,18,0,13,10,0,6,5,0,1,4,0,0,96,16,12,8,64,0,4 ,48,1,16,96,4,64,0,0,136,0,2,128,1,2,0,0,147,248,224,1,32,0,1,48,0,0, 30,128,3,112,0,1,192,1,0,0,128,7,0,2,192,131,0,4,56,0,15,192,1,60,0,1 ,128,0,0,16,192,3,112,0,3,12,144,1,145,64,6,208,0,0,112,0,1,96,0,2,24 ,250,4,0,0,32,0,2,32,24,72,0,7,6,0,3,130,0,24,8,0,0,128,0,0,16,0,6,48 ,16,2,129,0,2,128,0,2,128,1,0,1,58,252,128,1,16,8,0,1,2,88,0,0,3,96,0 ,1,128,1,0,1,6,0,3,9,0,4,48,0,15,128,1,48,2,0,0,64,32,72,32,147,96,0, 4,2,70,64,32,24,2,3,96,0,1,128,145,0,1,88,251,0,1,4,128,6,0,1,66,4,19 ,96,36,1,128,17,0,0,128,0,2,24,65,0,0,96,36,1,128,137,48,1,0,14,128, 133,0,0,34,0,0,16,0,0,2,0,0,32,2,0,1,32,0,1,128,6,20,0,0,26,64,3,96, 36,76,160,48,0,1,152,251,0,3,6,0,4,1,0,3,1,0,4,8,0,6,16,0,31,6,0,1,24 ,4,3,0,2,4,1,0,1,112,255,0,1,44,0,4,196,3,120,64,0,0,224,1,1,0,3,30,8 ,3,120,32,0,0,224,1,60,32,0,14,224,1,60,8,0,0,176,0,0,22,192,131,0,6, 6,176,0,0,14,0,1,120,0,0,15,128,1,0,1,112,249,12,0,0,20,0,3,16,64,8, 12,0,1,32,16,0,4,2,0,0,32,9,1,0,0,32,136,4,0,15,32,136,52,1,0,0,80,0, 0,10,64,11,0,2,128,133,0,1,18,82,0,0,146,2,0,0,8,10,33,16,9,1,0,0,210 ,253,4,0,0,24,4,0,0,1,0,0,144,0,3,64,2,0,7,11,0,2,2,0,20,4,0,0,96,16, 12,8,64,0,4,1,0,0,4,97,4,88,0,0,11,2,0,1,128,1,2,0,0,112,249,0,1,32, 128,1,0,1,14,132,3,112,0,0,3,192,1,0,0,128,1,2,0,0,28,192,3,114,0,0,3 ,192,1,56,0,15,196,1,60,0,1,128,0,0,16,192,3,0,2,224,1,0,0,128,3,144, 64,30,196,3,112,0,0,14,96,1,0,1,64,249,4,0,0,32,0,1,1,0,0,24,0,3,12,2 ,0,2,6,0,3,128,0,1,12,0,23,128,0,0,16,16,0,3,128,1,0,1,4,128,0,0,24,0 ,0,3,0,2,128,65,0,1,241,248,0,1,144,8,0,2,8,8,3,96,0,0,44,128,1,0,1,6 ,2,0,0,24,0,0,11,96,0,0,140,130,1,48,0,15,137,1,48,16,0,0,64,34,8,1, 131,0,2,128,41,0,1,34,66,34,16,5,19,97,0,0,12,128,9,0,1,96,254,32,0,0 ,4,128,0,0,80,0,0,2,0,0,19,96,36,0,0,128,17,5,128,0,0,208,136,154,72, 33,96,36,140,168,9,50,1,0,14,128,33,0,0,162,6,16,0,0,2,0,0,32,8,0,0,1 ,160,72,52,128,6,16,0,0,90,80,144,0,1,140,40,0,0,20,0,0,56,253,0,4, 128,0,3,1,0,8,24,0,1,1,0,1,128,1,0,0,16,0,14,1,0,2,6,0,4,1,0,2,1,48,0 ,3,24,0,6,32,0,0,136,250,0,1,44,0,1,176,0,0,24,196,3,121,32,0,0,224,1 ,0,0,128,1,64,0,0,24,0,0,128,120,32,15,4,1,61,0,15,232,129,60,8,6,176 ,0,0,22,192,0,2,12,128,0,0,48,0,0,6,180,0,0,16,4,128,0,1,15,128,1,44, 8,136,253,8,0,0,20,0,1,80,0,1,64,32,8,4,0,0,32,136,0,0,128,0,1,68,24, 2,0,0,8,4,33,128,8,4,17,0,14,32,0,0,52,0,0,6,80,0,0,10,64,0,1,132,12, 0,0,1,48,0,0,16,80,0,0,24,0,0,16,0,1,33,16,8,21,1,57,248,0,1,24,4,6, 97,2,88,0,6,48,9,70,194,72,64,8,11,0,2,128,33,0,16,9,0,1,4,22,96,16, 12,8,163,0,0,32,32,136,0,2,70,97,4,88,8,160,0,2,128,1,26,10,59,254,96 ,128,32,128,7,144,64,6,144,3,112,0,1,192,1,60,128,7,240,0,0,22,192, 130,112,0,0,14,96,0,0,56,0,15,194,1,60,128,7,130,0,0,16,192,3,24,0,0, 3,96,1,12,144,7,144,64,30,192,0,2,14,96,0,0,36,0,0,64,252,132,1,32,0, 1,129,0,0,24,0,7,8,6,192,0,0,16,0,0,131,0,3,1,0,16,8,0,3,128,0,0,16,8 ,3,0,2,128,0,3,129,0,0,24,16,128,0,2,128,65,40,0,0,26,249,128,5,17,10 ,0,0,64,40,24,9,3,96,0,1,128,1,128,128,6,128,128,152,32,8,96,0,0,12, 64,128,48,0,15,136,1,176,8,64,72,40,8,1,3,96,8,0,0,1,1,0,1,22,64,40, 152,0,0,10,0,1,12,128,9,16,10,168,255,176,1,4,128,0,0,16,0,0,152,0,3, 76,0,1,48,1,0,0,16,136,18,80,3,96,128,13,32,129,4,0,15,1,0,1,162,6, 144,16,2,0,0,32,96,68,77,32,0,0,4,128,38,148,4,2,65,1,96,68,0,0,160,4 ,4,0,0,72,248,128,1,0,5,16,0,3,8,0,1,32,0,7,12,128,0,17,16,0,2,6,64,0 ,3,1,0,0,8,8,0,2,2,64,64,0,0,4,2,0,4,1,0,0,64,249,128,1,44,0,1,176,0, 0,30,8,0,2,15,8,0,0,60,32,0,1,128,16,0,0,3,121,64,0,0,128,1,48,0,15,1 ,0,0,60,8,6,176,0,0,22,192,0,0,120,32,12,0,2,8,6,180,0,1,192,2,120,64 ,0,2,44,8,216,252,140,1,20,0,1,80,0,0,2,0,3,1,0,1,4,0,1,64,4,64,32,8, 8,0,1,128,33,0,0,10,0,7,1,0,7,180,0,0,6,80,0,0,10,64,0,0,8,4,40,144,9 ,1,0,0,38,80,0,1,81,1,12,4,0,2,21,1,202,254,132,5,25,4,0,0,97,2,0,11, 40,152,0,0,160,0,2,2,9,176,0,15,5,0,1,4,16,162,0,0,12,8,11,0,1,132,1, 68,128,8,36,168,0,0,64,160,9,0,3,17,24,10,216,255,232,1,32,128,1,144, 64,28,0,3,14,0,1,56,0,1,48,0,0,30,200,0,0,112,0,0,3,96,128,12,32,0,6, 64,2,0,7,60,128,1,128,0,0,16,192,3,113,0,0,15,224,1,12,128,7,144,0,0, 6,0,0,2,113,0,1,224,65,36,0,0,184,253,0,1,32,8,6,129,32,0,10,192,0,1, 8,3,0,2,128,1,48,0,19,6,128,0,0,16,0,0,3,0,1,12,128,1,48,8,0,0,128,0, 1,128,130,0,3,1,40,8,41,250,16,16,18,2,6,64,8,24,0,3,12,0,1,48,0,2,8, 137,0,0,83,96,0,0,128,2,0,0,50,64,0,16,48,10,38,130,0,0,136,16,3,96,0 ,0,140,132,9,2,1,70,132,0,0,144,16,33,96,0,1,128,128,16,2,136,248,176 ,0,0,36,4,0,0,16,0,0,152,64,163,96,33,76,128,1,50,129,6,208,136,24,0, 0,3,96,128,1,160,1,132,0,7,64,1,0,5,128,133,128,128,2,0,1,2,0,0,32,0, 1,77,48,0,0,16,129,32,18,0,0,2,64,0,0,96,68,0,0,160,1,36,10,120,254,0 ,0,1,16,0,4,16,0,3,8,0,1,32,0,0,192,0,1,16,0,0,2,0,4,8,0,17,16,4,0,4, 1,0,0,8,0,1,32,8,0,0,64,32,0,5,128,1,17,0,0,24,250,96,65,44,0,1,176,0 ,0,30,16,3,122,0,0,15,228,1,60,16,6,0,1,30,208,3,120,32,12,0,1,1,0,7, 64,2,0,5,224,1,13,128,5,0,1,22,192,0,2,12,8,0,0,44,128,1,4,0,1,192,2, 120,0,1,128,65,44,0,0,56,254,172,16,20,0,1,80,0,0,2,0,0,34,8,34,33,32 ,136,132,0,0,22,200,68,2,65,16,9,1,12,0,0,8,32,10,0,6,128,0,6,32,0,0, 4,128,66,1,0,0,10,64,0,2,72,128,133,148,160,22,0,0,40,152,68,1,12,10, 0,0,128,9,20,0,0,130,248,196,0,0,40,0,1,96,2,0,1,2,4,0,5,38,66,0,6,2, 64,32,9,0,7,2,0,7,48,0,0,3,0,1,12,8,147,0,1,132,1,0,0,25,0,0,66,1,2, 64,128,9,0,3,8,42,8,16,248,32,1,32,0,1,144,64,28,192,3,112,0,0,14,192 ,1,56,128,7,240,128,28,128,3,112,0,0,3,96,0,0,28,0,8,2,0,5,192,1,60, 136,4,0,1,16,192,3,0,1,15,224,1,32,128,5,48,32,6,4,2,113,0,1,96,1,36, 0,0,24,252,68,1,32,0,1,128,32,0,1,3,0,6,6,64,0,8,48,0,7,64,0,6,5,0,0, 48,0,0,5,0,1,16,0,0,3,0,1,12,132,1,40,0,0,6,1,0,0,24,128,130,0,3,1,32 ,0,0,1,253,160,0,0,32,0,1,64,2,24,0,0,67,96,0,0,12,128,1,48,0,0,70,2, 4,25,0,0,3,96,0,0,128,2,132,16,16,0,7,4,0,5,128,1,48,0,0,2,0,1,136,8, 3,0,1,76,128,129,16,0,0,20,32,32,24,5,9,96,0,1,128,9,34,0,0,8,255,48, 1,0,1,38,18,0,0,152,0,0,19,0,1,1,128,9,4,128,0,0,208,0,0,90,16,3,96, 36,1,160,1,20,2,0,6,64,0,8,128,128,4,0,1,2,0,0,32,96,33,12,33,129,0,0 ,129,6,16,4,2,67,0,0,96,2,12,32,0,0,4,0,0,24,254,128,0,6,16,0,0,2,0,3 ,1,0,1,192,64,24,0,1,2,0,1,128,1,0,0,8,0,17,16,2,0,4,1,0,1,128,1,0,0, 8,6,64,32,8,0,2,32,0,0,8,0,2,144,248,96,65,0,0,128,7,178,0,0,30,192,3 ,0,2,224,1,48,0,1,192,0,0,8,192,3,122,64,0,3,8,0,6,64,1,0,7,12,128,5, 0,1,22,192,0,0,120,32,15,136,129,44,0,4,192,2,120,0,0,15,4,0,0,48,0,0 ,216,249,172,16,0,0,128,16,80,0,0,130,72,0,0,4,0,1,32,136,48,0,1,64, 16,64,72,0,0,8,0,4,1,0,16,4,128,66,1,0,0,10,64,0,0,8,0,0,1,128,5,148, 32,0,1,32,64,80,1,12,34,129,128,5,49,0,0,129,254,196,0,3,96,2,0,4,76, 2,0,1,9,0,0,200,64,0,0,33,0,2,12,2,4,160,8,0,16,176,8,3,0,1,12,8,139, 0,2,128,145,24,0,0,16,2,36,0,0,128,9,0,3,32,0,0,18,195,255,32,1,0,1,7 ,144,64,28,128,3,0,1,15,192,1,12,128,1,176,0,0,6,128,3,112,0,0,15,96, 128,60,0,17,60,128,4,0,1,16,192,3,112,0,0,14,224,1,32,128,1,48,0,0,6, 16,2,113,0,0,14,224,1,12,0,0,184,253,196,0,3,128,32,0,5,2,0,1,8,6,128 ,0,8,32,0,17,48,0,0,3,0,1,16,0,0,3,0,2,128,65,40,0,4,128,130,0,2,128, 129,0,0,16,90,253,32,1,0,1,6,64,0,0,24,0,0,3,0,1,32,128,1,128,0,0,6, 130,2,81,16,3,96,0,0,128,2,4,17,10,0,16,48,0,0,4,0,1,136,2,3,96,0,0, 12,128,17,16,0,0,32,2,34,4,17,1,96,0,0,12,128,17,0,0,1,80,254,128,9, 176,16,38,146,2,138,68,0,0,96,129,1,0,1,52,128,6,18,0,2,3,96,128,140, 136,9,4,0,15,128,133,128,128,0,0,208,0,0,18,0,0,32,98,2,1,32,0,0,32, 129,0,2,66,64,10,0,1,12,160,0,0,52,65,24,255,0,0,128,48,0,1,64,64,0,7 ,48,0,0,6,0,4,2,0,2,128,0,16,8,0,1,16,0,0,192,0,0,8,0,2,32,0,2,16,8,0 ,2,8,16,1,1,0,1,8,64,48,0,0,208,252,224,1,61,128,7,180,0,2,131,120,0, 0,12,0,3,6,48,0,1,192,3,121,32,15,224,129,0,16,224,129,12,0,1,192,0,0 ,22,192,131,120,64,0,0,128,129,44,0,4,192,2,0,1,15,0,0,64,16,32,192, 249,40,0,0,52,128,0,0,80,0,1,4,0,0,8,128,12,0,3,70,24,0,1,64,0,0,8,4, 65,33,4,176,8,4,0,5,16,2,0,5,40,16,4,0,1,192,0,0,10,64,35,8,4,0,1,16, 148,32,0,3,81,1,4,0,0,1,16,0,0,48,2,58,254,0,1,48,0,1,160,0,0,80,0,0, 3,4,0,0,64,2,0,1,9,64,192,68,0,8,4,2,0,5,16,1,0,5,8,0,0,48,10,16,1, 132,12,8,64,0,1,32,132,1,26,0,0,64,1,0,0,64,160,2,0,3,73,48,18,8,254, 192,1,56,0,0,7,144,0,0,30,196,0,0,112,0,0,3,0,1,12,128,3,241,0,1,128, 3,112,0,0,14,192,1,60,0,0,7,0,5,144,3,0,5,200,1,60,128,1,48,0,0,16, 192,3,112,0,0,3,96,0,0,32,128,1,0,1,6,0,0,2,0,1,14,224,1,60,0,0,80, 255,4,0,0,52,0,1,128,0,0,16,4,3,8,0,1,2,0,1,8,4,193,0,6,32,0,0,48,144 ,5,0,5,208,2,0,5,8,0,0,48,0,0,6,193,0,0,8,8,0,2,12,132,1,24,0,0,6,0,2 ,128,2,0,3,1,48,16,113,248,128,1,52,0,0,6,128,0,0,8,0,0,67,96,0,0,32, 0,1,128,0,0,18,192,0,2,3,96,0,0,12,128,1,176,0,0,4,0,5,8,2,0,5,132,1, 48,0,0,6,192,8,81,0,0,139,96,0,0,140,128,69,32,0,0,166,0,1,128,16,2,0 ,1,12,128,128,48,1,96,250,16,0,1,6,0,4,32,0,0,2,0,14,8,0,1,4,0,6,2,0, 35,128,253,0,2,128,0,0,16,0,0,2,64,0,0,9,64,1,32,0,0,4,0,1,16,0,0,2, 64,0,0,8,0,0,1,32,0,0,5,0,7,2,0,6,33,0,0,4,128,0,0,16,0,0,2,64,0,0,8, 0,0,1,32,0,0,4,0,1,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,232,248,0,74, 152,255,44,128,4,146,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,64,20,0 ,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8, 0,0,1,32,0,0,4,128,64,18,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,153,254,4, 16,2,65,64,8,0,1,33,32,0,0,4,128,16,16,2,66,0,3,1,32,4,132,128,16,16, 0,0,2,0,15,16,0,3,32,0,0,1,0,1,132,128,16,0,0,128,32,64,8,0,2,8,0,0, 132,128,0,0,16,2,0,0,195,252,0,8,128,0,0,64,0,8,16,0,5,1,32,0,16,1,0, 4,16,0,3,32,0,7,128,0,2,8,0,2,176,251,4,0,4,64,0,10,2,0,55,154,251,0, 0,132,4,16,64,18,4,64,8,8,1,36,128,4,144,0,0,146,32,16,136,0,0,9,8,1, 36,128,4,132,128,16,0,15,132,4,145,128,0,0,68,0,0,96,16,1,33,32,36,0, 0,4,4,128,16,68,130,8,64,0,0,33,32,4,132,4,17,176,253,0,1,32,0,0,4,0, 1,8,0,1,64,0,0,8,0,0,1,32,0,2,2,16,0,0,1,64,0,0,8,0,1,16,0,30,32,0,0, 20,0,11,144,251,0,0,1,0,0,64,0,2,16,0,0,2,0,3,128,0,5,8,2,1,0,2,1,32, 0,16,1,0,7,64,0,0,8,0,0,4,0,7,64,0,0,8,132,1,0,1,16,252,0,9,32,128,0, 1,64,0,0,8,0,0,8,0,0,4,32,0,1,64,0,1,2,0,34,4,0,0,2,4,0,7,144,251,0,3 ,2,0,3,192,8,0,11,16,0,1,128,0,0,1,0,18,4,0,8,16,0,1,128,128,0,11,136 ,248,0,16,1,0,0,192,0,5,64,0,15,64,0,30,128,251,0,55,128,0,8,8,0,7,24 ,255,0,1,4,0,0,4,0,2,64,0,9,32,0,0,16,2,10,0,2,64,0,0,16,0,15,64,0,2, 64,32,0,0,4,0,1,16,0,2,16,4,4,0,1,8,4,0,0,32,0,3,8,0,0,48,253,0,2,8,0 ,6,32,0,1,64,0,0,8,0,0,1,0,6,128,0,18,128,0,4,4,0,4,2,0,2,1,0,4,1,0,0 ,4,0,3,136,250,0,0,69,8,32,181,0,0,56,80,128,80,64,65,40,2,40,19,37,0 ,0,4,84,80,136,10,49,0,0,40,48,173,96,16,0,14,128,168,1,0,1,160,86,82 ,8,0,1,32,0,0,8,40,8,144,1,0,0,32,4,8,0,0,18,10,105,1,0,0,10,6,24,255 ,0,0,77,36,161,0,1,136,64,147,65,64,81,145,52,129,133,34,162,64,45,0, 0,128,141,2,1,168,46,8,72,0,15,64,128,2,8,0,0,144,96,11,4,1,32,2,72,0 ,1,128,8,2,0,0,4,184,5,1,0,0,64,1,64,129,32,34,64,248,2,0,0,1,0,4,64, 0,1,16,0,4,2,64,32,0,0,64,64,0,2,2,0,20,8,0,1,32,16,4,2,32,0,4,8,2,0, 1,8,68,0,7,137,250,130,0,0,32,0,4,4,0,0,34,0,1,64,0,3,2,0,5,1,0,23,64 ,0,5,4,0,6,4,0,5,1,16,0,0,56,248,0,4,32,0,32,1,0,1,4,0,1,128,0,8,32,0 ,18,104,250,0,72,2,0,0,152,253,0,1,64,0,14,4,0,26,1,0,7,64,0,4,4,0,4, 64,0,1,8,0,0,2,0,1,112,248,0,0,66,0,14,8,65,2,0,28,8,0,6,2,0,0,128,0, 1,11,0,1,2,4,0,0,16,0,1,64,128,0,1,120,249,0,8,4,0,0,48,0,8,8,0,4,192 ,0,0,16,0,15,128,0,5,8,0,2,32,0,12,4,0,2,248,249,0,1,1,0,1,4,0,1,16,0 ,3,8,0,0,1,32,0,5,2,64,0,0,8,0,13,32,0,13,64,0,0,8,0,3,4,0,4,64,0,2,1 ,0,0,24,254,0,1,4,0,53,1,0,1,128,0,13,72,254,0,25,32,0,46,128,16,253, 0,19,32,0,26,128,0,7,14,144,0,0,4,128,0,3,72,0,7,104,254,0,9,16,0,2,4 ,0,9,32,0,0,64,0,18,64,0,2,17,0,0,16,4,0,6,4,0,0,1,32,0,5,64,64,4,232 ,251,0,39,1,0,2,1,0,29,136,254,0,16,1,0,20,1,0,1,4,0,16,1,0,13,200, 251,0,6,32,0,9,1,32,0,1,4,0,4,64,0,29,2,0,11,128,0,1,104,254,2,0,73, 184,253,0,1,128,0,61,64,0,8,16,251,0,18,1,0,8,4,0,16,128,0,5,10,0,19, 120,252,0,6,16,0,13,2,0,2,32,0,30,1,0,12,1,0,1,152,254,2,0,5,2,0,0,1, 0,9,64,64,0,0,32,0,3,4,32,0,14,128,0,5,8,0,1,32,0,0,32,32,0,2,16,0,6, 4,32,0,2,192,249,0,0,32,0,7,4,0,3,2,0,36,32,0,8,1,0,6,16,0,2,136,249, 0,3,16,0,1,64,128,0,0,32,1,32,0,0,32,128,0,3,17,2,8,0,0,1,1,0,1,128,0 ,16,4,0,1,4,0,1,3,10,0,1,8,0,1,1,0,7,40,8,0,3,64,200,252,0,0,2,0,14,4 ,0,1,8,0,5,5,0,18,64,0,0,2,0,7,2,0,2,130,0,1,8,2,0,8,254,0,1,4,0,13,2 ,0,28,4,0,1,16,0,1,64,0,4,2,64,8,0,0,8,0,2,4,0,6,88,254,16,0,2,2,0,4, 2,0,0,4,0,1,16,0,1,32,0,1,16,0,0,32,0,0,4,128,0,24,8,0,1,16,0,3,1,0,9 ,128,0,0,1,0,0,96,252,72,0,5,4,4,0,10,4,128,128,0,4,8,8,0,14,64,0,8, 16,1,0,11,1,32,0,3,32,249,0,0,33,16,136,0,4,65,0,5,32,0,5,32,8,0,23,2 ,0,10,8,0,1,32,0,0,4,0,5,16,0,0,176,249,10,0,0,32,32,4,0,1,8,0,1,32,0 ,3,8,0,0,2,32,0,1,16,0,3,64,0,8,64,0,13,32,0,3,16,0,0,130,0,5,4,0,7,8 ,136,254,64,173,174,176,1,0,1,82,128,0,0,233,0,0,104,1,0,0,166,208,0, 0,16,0,1,20,80,80,43,104,33,5,0,0,6,0,5,32,0,6,64,0,0,3,0,0,64,1,0,0, 148,137,2,10,0,0,64,40,40,0,1,16,0,1,64,2,8,6,0,0,16,40,0,1,8,32,88, 251,0,0,200,133,89,0,0,145,1,72,109,137,136,1,100,0,0,161,37,178,4,64 ,0,0,24,0,0,242,72,64,8,41,37,0,0,34,0,14,32,0,0,17,16,130,68,65,8,18 ,139,80,12,132,40,0,1,4,130,0,0,36,0,0,6,0,1,64,130,8,128,2,12,96,253 ,0,0,32,0,0,32,0,0,4,0,0,4,16,1,2,0,0,1,0,4,64,0,0,2,0,0,128,0,23,16, 0,0,2,64,0,0,4,0,0,1,1,0,0,4,0,3,2,0,0,32,0,0,4,0,6,16,160,250,0,4,32 ,0,6,64,64,16,0,0,1,0,1,4,128,0,0,18,0,0,2,130,64,0,21,1,0,1,136,0,0, 32,16,0,3,16,0,0,2,0,1,2,0,6,8,120,252,0,51,4,0,14,64,0,5,152,255,2,0 ,5,32,0,0,4,128,0,2,2,0,2,32,0,2,4,0,3,2,64,0,15,32,2,0,4,32,0,3,17, 64,0,0,16,0,6,128,0,3,8,128,104,252,132,1,16,0,4,64,2,0,9,66,0,6,32,0 ,29,4,0,14,41,250,0,20,16,0,34,4,0,6,8,0,0,2,2,0,5,104,249,0,12,2,0,0 ,1,0,20,128,66,0,1,2,1,0,11,8,0,18,58,251,0,18,64,8,0,18,128,0,0,2,0, 0,128,0,12,128,0,15,240,249,0,19,1,0,44,32,0,3,32,0,2,168,253,0,0,4,8 ,0,6,2,64,0,34,1,0,3,64,0,17,8,0,2,200,249,0,7,4,128,0,3,128,0,1,8,16 ,0,1,6,0,31,4,0,2,64,0,3,128,0,8,8,0,0,40,249,0,17,8,0,1,4,0,5,2,0,17 ,32,0,26,208,251,0,74,152,255,0,1,2,0,1,128,0,31,4,0,1,16,0,7,8,0,23, 240,254,0,13,68,132,0,1,20,2,64,80,8,0,0,17,36,0,2,8,0,16,16,0,1,64,0 ,0,8,0,1,32,0,0,4,0,0,64,0,3,32,0,1,1,0,0,64,0,1,64,0,1,248,254,0,9, 96,0,2,5,128,0,0,20,128,2,80,0,0,8,64,1,40,128,4,32,0,17,160,0,0,6, 128,0,0,20,2,0,0,64,0,0,40,0,6,4,2,2,0,6,8,251,0,14,128,0,0,16,0,0,2, 64,0,0,8,0,0,1,32,0,0,4,0,28,16,0,16,240,255,0,13,4,0,31,128,0,18,4,0 ,6,80,251,0,0,21,160,2,180,128,10,80,1,42,128,5,168,0,0,44,128,2,80,0 ,0,10,64,1,40,0,0,5,160,0,0,20,192,2,0,15,22,128,2,88,0,0,11,224,1,42 ,128,5,160,0,0,22,160,2,88,0,0,11,208,1,40,128,11,176,0,0,22,160,2, 232,254,128,9,48,1,134,215,4,154,0,0,19,32,3,77,192,100,152,129,50, 112,6,202,64,25,40,3,101,192,12,144,1,0,14,128,12,152,1,50,64,6,200, 68,19,32,3,100,128,12,52,1,50,64,6,152,4,25,32,121,100,128,12,48,1, 152,252,255,255,0};static const unsigned char l451[]={79,231,255,255, 98,255,57,0,0,213,255,255,255,255,255,255,255,255,255,255,255,255,255 ,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,0,0,12,52,1,48,0,0,6,192,0,0,17,0,0,3,32,2,68 ,128,44,48,0,0,6,192,0,0,24,0,0,3,96,160,9,128,1,0,15,12,128,129,38,0 ,0,6,192,0,0,24,0,0,3,96,160,9,128,1,39,64,6,192,0,0,152,0,0,3,100,0, 0,12,144,1,56,250,0,0,18,160,2,72,0,0,9,32,1,44,128,4,208,0,0,26,64,5 ,72,0,0,9,32,1,36,128,4,144,0,0,21,64,2,0,15,18,64,2,84,0,0,9,32,1,36 ,128,4,144,0,0,21,64,2,84,0,0,10,32,1,20,128,4,176,0,0,18,128,2,216, 251,0,63,1,0,9,152,254,0,66,32,0,4,64,0,0,248,249,0,12,1,32,0,47,128, 0,2,16,0,1,8,0,3,128,253,0,8,10,0,1,68,128,8,0,23,64,0,26,1,0,1,8,0,1 ,32,0,0,208,250,0,74,152,255,0,74,152,255,0,74,152,255,0,74,152,255,0 ,74,152,255,0,74,152,255,0,74,152,255,0,74,152,255,0,70,128,5,0,1,4, 254,0,71,128,0,1,24,255,0,70,224,1,0,2,248,8,0,69,32,0,0,2,0,0,163, 252,0,74,137,254,0,70,192,1,0,2,250,4,0,73,201,250,0,70,128,1,0,2,254 ,0,74,152,255,0,74,152,255,0,74,152,255,8,0,73,178,253,0,74,152,255,0 ,74,152,255,4,0,73,201,250,0,74,152,255,0,72,36,1,168,249,0,72,16,8,8 ,254,0,72,28,0,1,250,8,0,71,36,0,0,146,251,0,72,32,0,0,184,253,0,72, 20,0,0,136,250,4,0,71,16,0,0,217,251,0,72,32,0,0,184,253,0,69,1,0,1,4 ,0,0,152,250,0,74,152,255,0,69,3,0,1,44,0,0,48,250,8,0,68,1,0,1,20,0, 0,162,249,0,69,140,2,0,0,24,0,0,160,250,0,69,15,0,1,36,0,0,48,254,4,0 ,68,12,0,1,32,0,0,97,252,0,69,13,0,1,16,0,1,251,0,72,4,0,0,152,251,0, 74,152,255,0,72,44,0,0,48,249,8,0,71,20,0,0,179,249,0,72,24,0,0,17, 255,0,72,36,0,0,184,249,4,0,71,32,0,0,233,248,0,72,16,0,0,136,254,0, 69,1,0,1,4,0,0,152,250,0,74,152,255,0,69,3,0,1,44,0,0,48,250,8,0,68,1 ,0,1,20,0,0,162,249,0,69,12,2,0,0,24,0,0,168,250,0,69,15,0,1,36,0,0, 48,254,4,0,68,12,0,1,32,0,0,97,252,0,69,13,0,1,16,0,1,251,0,8,35,1,0, 58,140,4,0,0,36,0,0,104,255,0,72,16,0,0,136,254,0,7,192,3,2,0,58,15,0 ,1,44,0,1,251,8,0,6,64,0,60,1,1,0,0,20,0,0,163,252,0,72,24,0,0,17,255 ,0,7,128,3,0,59,14,0,1,36,0,0,136,252,4,0,71,16,0,0,217,251,0,8,3,0, 59,12,0,1,32,0,1,250,0,74,152,255,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8, 0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4 ,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0 ,1,32,0,0,4,0,0,152,254,0,70,8,0,2,24,255,40,0,0,4,128,0,0,16,0,0,2, 64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15 ,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2, 64,0,0,8,0,0,65,32,0,0,4,0,0,242,249,0,8,8,0,59,64,2,4,0,1,176,255,32 ,0,0,4,128,0,0,16,0,0,2,0,1,10,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0 ,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0, 0,4,128,0,0,16,0,0,2,64,0,0,8,0,3,9,0,0,16,255,4,0,8,1,0,59,4,128,0,1 ,9,251,32,0,0,4,128,0,0,16,0,0,2,64,32,8,0,0,1,32,0,0,4,128,0,0,16,0, 0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0 ,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,129,32,16,4,0,0,160,255,0 ,74,152,255,0,74,152,255,0,69,32,0,3,184,253,0,74,220,251,0,74,152, 255,0,74,152,255,0,73,8,24,255,0,74,152,255,0,73,16,152,254,0,49,1,0, 21,16,1,136,254,0,49,2,0,21,16,0,0,168,254,0,74,220,251,0,74,152,255, 0,74,152,255,0,74,152,255,0,74,152,255,0,74,152,255,0,74,152,255,0,74 ,152,255,0,74,152,255,0,74,152,255,0,71,1,0,1,136,254,0,74,152,255,0, 74,152,255,0,74,152,255,0,74,152,255,0,74,152,255,0,74,152,255,0,74, 152,255,0,74,152,255,0,74,152,255,0,8,1,0,59,4,128,0,3,250,0,74,152, 255,0,74,152,255,0,74,152,255,0,8,8,0,64,144,255,0,51,4,0,21,152,251, 0,22,16,0,21,128,8,0,22,2,0,2,116,250,0,22,8,0,22,5,0,3,4,0,16,64,9,0 ,2,152,255,0,7,64,0,39,4,0,14,16,0,8,152,254,0,74,152,255,0,48,1,0,14 ,4,0,8,216,254,0,69,1,0,3,152,254,2,0,72,128,48,253,8,0,73,178,253,0, 74,152,255,0,74,152,255,0,74,220,251,0,74,152,255,0,8,128,0,61,64,0,1 ,88,255,0,74,152,255,0,72,1,0,0,152,254,0,74,152,255,0,7,128,0,60,2,0 ,3,16,253,0,47,4,0,18,104,34,0,0,128,0,2,208,255,0,46,48,0,19,64,0,3, 1,0,0,152,249,0,46,12,0,19,32,0,1,128,129,0,1,64,252,0,46,52,4,0,19, 128,0,1,9,0,2,249,0,46,48,0,19,32,0,5,152,254,0,46,8,0,19,104,0,2,1,0 ,1,136,248,0,46,48,0,22,128,0,2,16,252,0,67,64,0,1,128,1,0,2,250,0,47 ,4,0,18,32,64,0,0,128,8,0,1,24,249,0,46,48,0,24,1,0,0,152,253,0,46,12 ,0,19,96,0,1,128,1,0,1,192,248,8,0,45,52,34,0,18,64,64,0,1,1,2,0,0, 145,248,0,46,48,0,26,171,255,0,46,8,0,19,64,0,2,1,0,1,8,250,4,0,45,48 ,0,19,32,0,1,128,0,2,114,248,0,67,96,0,1,128,1,0,2,248,0,61,128,0,4, 32,0,1,128,16,1,0,0,136,252,0,61,6,0,5,32,0,4,216,255,0,60,128,1,0,4, 96,0,1,128,1,0,1,24,248,8,0,59,128,6,2,0,3,64,68,0,1,129,0,1,106,254, 0,61,6,0,11,248,255,0,61,1,0,4,64,0,2,1,0,1,152,250,4,0,60,6,0,4,32,0 ,1,128,0,2,33,248,0,67,96,0,1,128,1,0,2,248,0,47,4,0,18,32,8,0,0,128, 8,1,0,0,80,248,0,46,48,0,26,152,252,0,46,12,0,19,96,0,1,128,129,0,1, 64,248,8,0,45,52,65,0,18,64,132,0,1,17,0,1,98,254,0,46,48,0,26,152, 252,0,46,8,0,19,64,0,2,1,0,1,8,250,4,0,45,48,0,19,32,0,1,128,0,2,65, 251,0,67,96,0,1,128,1,0,2,248,0,44,128,33,0,1,16,8,0,1,64,0,7,128,192 ,16,0,2,32,2,0,0,128,4,1,0,0,24,253,0,48,6,0,11,6,0,5,32,0,4,216,249, 0,44,224,1,0,0,128,1,0,2,192,0,0,1,0,4,128,1,244,0,3,96,32,0,0,128,1, 0,1,96,249,8,0,43,32,0,0,1,128,22,4,0,1,64,11,0,5,128,70,16,130,0,2, 64,2,0,1,145,0,1,186,252,0,48,6,0,3,19,2,0,5,6,0,11,216,248,0,44,192, 1,0,1,1,0,2,128,3,0,6,1,224,0,3,64,0,2,1,0,2,249,4,0,47,6,0,3,131,0,6 ,6,0,4,32,0,1,128,0,2,145,253,0,44,128,1,0,6,35,0,7,192,0,3,96,0,1, 128,1,0,1,80,250,0,1,48,4,0,12,134,0,32,16,0,6,4,2,0,0,128,0,1,24,2,0 ,0,32,68,0,0,128,0,0,128,64,172,255,0,49,192,0,6,128,1,0,1,6,0,8,128, 48,0,0,216,248,0,1,60,0,12,128,7,0,31,48,0,6,96,0,1,128,1,0,1,30,0,1, 96,0,1,128,1,12,0,0,168,251,8,0,0,4,32,0,11,128,0,0,2,0,30,208,64,0,5 ,160,33,0,0,128,6,4,0,0,2,8,0,0,64,8,0,1,41,52,34,59,255,0,49,192,0,6 ,128,1,0,1,6,0,9,48,0,0,73,249,0,1,56,0,13,7,0,31,32,0,6,64,0,2,1,0,1 ,28,0,1,64,0,2,1,8,0,0,96,254,4,0,48,192,0,6,128,1,0,1,6,0,1,2,0,1,32 ,0,1,128,0,0,48,0,0,161,255,0,1,48,0,13,6,0,46,24,0,1,96,0,1,128,1,0, 1,224,250,0,1,48,4,0,46,16,64,32,0,5,128,64,0,2,64,96,11,36,1,32,144, 48,0,1,104,253,0,49,192,0,0,24,0,6,48,0,3,24,0,2,64,12,0,3,240,255,0, 1,60,32,0,45,48,0,0,6,0,6,12,0,3,6,0,0,3,96,0,0,3,128,1,0,1,200,250,8 ,0,0,132,0,46,208,130,26,16,0,5,52,65,0,2,26,8,64,64,66,13,4,17,2,0,0 ,186,252,0,49,192,0,0,24,0,6,48,0,3,24,0,0,32,4,0,0,12,0,3,208,253,0, 1,56,0,46,32,0,0,4,0,6,8,0,3,4,192,3,64,0,0,2,0,0,1,0,1,128,254,4,0, 48,192,0,0,24,0,6,48,0,3,24,0,0,1,32,0,0,12,128,0,2,105,249,0,1,48,0, 63,18,100,0,1,128,1,0,1,80,248,0,1,4,0,4,64,9,1,0,0,13,0,1,52,0,39, 129,5,4,0,5,26,0,1,32,4,0,0,128,0,0,1,0,0,72,253,0,8,2,0,1,12,0,1,48, 0,38,96,0,0,8,0,6,24,0,2,32,0,4,8,254,0,2,8,0,4,3,0,1,12,0,41,24,64,4 ,0,6,24,0,1,96,0,1,128,128,0,1,184,254,8,0,0,176,0,5,18,4,0,0,12,0,41 ,104,4,8,0,6,24,0,1,64,33,0,4,82,254,0,2,6,0,4,11,4,0,0,64,0,1,48,1,0 ,37,96,0,0,4,0,7,8,0,7,152,253,0,1,60,0,4,192,3,0,1,3,8,0,0,60,32,0, 37,16,0,0,11,0,6,6,0,1,64,0,2,1,0,1,88,249,4,0,0,48,32,0,4,3,0,1,12,4 ,0,0,48,16,0,37,96,0,0,4,0,6,24,4,0,0,32,0,5,81,254,0,1,48,0,5,3,4,0, 0,76,0,1,48,1,0,39,8,0,6,88,0,1,96,0,2,1,0,1,8,252,0,64,64,8,0,7,144, 251,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0, 2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0 ,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,152,255,0,74 ,152,255,40,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16 ,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0,16,0,0,2,64,0,0, 8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,178,253 ,0,1,128,16,0,12,16,2,0,26,132,0,0,18,64,2,72,0,0,137,32,1,36,0,1,144 ,0,0,18,64,2,66,0,0,9,0,2,128,4,0,1,18,192,255,32,0,1,128,0,0,16,0,0, 2,64,0,0,8,0,0,1,32,0,0,4,0,1,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,27,1 ,0,7,64,0,0,8,0,1,32,0,2,224,251,4,0,44,128,0,0,16,0,0,2,64,0,0,8,0,1 ,32,0,1,128,0,0,16,0,0,2,64,0,0,8,0,3,4,0,1,16,129,254,32,0,0,4,161,0 ,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,32,20,0,0,2,64,0,0,8,0,0,1,32 ,0,0,4,0,15,32,16,0,0,2,64,0,0,8,0,0,1,0,1,4,1,0,0,16,0,0,2,64,16,8,0 ,0,65,0,0,8,0,0,128,32,0,1,2,112,253,0,9,2,0,56,2,0,5,184,253,0,74, 152,255,0,49,8,0,1,32,1,0,0,128,0,2,2,64,0,3,32,0,3,80,0,1,64,192,251 ,0,53,64,0,15,32,0,2,216,253,0,74,152,255,0,74,152,255,0,47,136,0,0,4 ,0,1,16,0,7,4,0,6,2,0,3,16,252,0,50,64,0,22,216,255,0,47,16,1,2,128,0 ,0,8,0,7,1,0,6,2,0,3,184,252,0,1,16,0,22,128,0,18,80,16,0,0,134,1,0,0 ,8,4,128,0,3,1,0,3,40,0,1,1,0,1,20,0,3,184,250,0,1,32,0,23,1,0,17,64, 16,128,0,0,4,0,0,2,16,0,0,2,0,7,32,0,0,128,0,2,4,0,3,168,254,0,48,4,2 ,0,7,1,0,14,168,251,0,65,64,0,7,216,255,0,74,152,255,0,74,152,255,0, 67,168,0,2,4,0,1,208,249,0,74,152,255,0,1,4,0,12,128,0,27,32,0,16,16, 0,0,2,0,8,192,255,0,1,4,0,71,216,255,0,74,152,255,0,8,1,0,57,4,1,0,1, 66,0,1,184,253,0,1,128,0,68,160,2,0,0,176,253,0,74,152,255,0,74,152, 255,0,74,152,255,0,74,152,255,0,45,128,0,5,8,0,8,2,0,10,48,253,0,74, 152,255,0,74,152,255,0,46,8,0,0,1,32,0,0,4,128,0,0,16,0,1,64,0,0,8,0, 0,1,0,1,4,0,3,2,0,1,8,0,0,16,255,0,2,16,0,12,8,0,29,32,0,1,1,0,8,32,0 ,7,16,0,3,8,253,0,2,16,0,13,2,0,25,128,0,0,16,0,0,2,64,0,0,8,0,1,32,0 ,1,128,0,0,16,0,0,2,64,0,0,8,0,3,4,0,1,16,0,0,104,253,0,11,2,0,1,8,0, 40,2,0,3,8,0,1,36,0,1,8,16,0,4,192,253,0,49,1,32,0,11,32,0,3,193,0,0, 128,0,2,208,252,0,74,152,255,0,74,152,255,128,0,17,32,0,24,64,0,0,8, 128,0,0,68,128,2,16,0,5,16,8,0,0,1,32,0,4,4,0,3,16,253,0,22,16,0,21, 64,0,4,4,0,0,128,0,15,4,0,2,24,254,64,0,17,64,0,2,8,0,20,64,0,0,9,0,0 ,1,34,64,6,8,0,0,2,0,3,8,16,0,0,2,64,0,1,1,0,1,2,8,0,2,208,248,0,0,4, 4,0,3,34,0,3,2,64,2,0,3,4,0,7,32,0,19,66,65,1,8,4,161,32,0,0,9,128,0, 0,32,1,2,1,0,0,18,0,0,160,0,5,8,8,249,0,47,128,0,0,65,0,0,2,144,128, 32,0,1,64,0,2,1,1,0,2,128,0,5,8,232,255,0,27,8,0,27,4,0,1,8,0,3,4,0,8 ,24,251,0,2,4,0,42,4,0,9,32,0,15,184,249,0,74,152,255,4,0,66,16,32,0, 1,5,0,1,185,254,0,67,64,0,1,64,0,0,1,0,0,152,254,0,9,4,0,63,152,251,0 ,55,8,0,4,128,0,11,144,255,0,1,16,0,13,2,0,26,128,0,16,64,0,0,8,0,8, 248,254,0,74,152,255,0,12,2,0,1,8,0,30,8,0,18,192,0,1,32,32,0,0,8,48, 251,0,46,4,0,1,16,0,9,128,0,6,48,0,1,2,0,1,192,252,0,74,152,255,0,9,2 ,0,56,2,0,5,252,249,0,24,1,0,48,152,254,0,25,2,0,47,184,255,0,24,7,0, 48,152,248,0,24,33,8,0,47,56,252,0,24,128,2,0,47,176,255,0,24,3,0,48, 152,252,0,24,12,0,48,16,251,0,24,12,2,0,47,48,251,0,17,16,0,5,41,16,0 ,33,192,68,2,0,10,8,255,0,24,4,0,35,2,0,11,184,251,0,17,240,0,5,8,0, 33,12,0,13,168,251,8,0,16,16,4,1,0,3,4,0,33,4,0,0,18,1,0,10,194,249,0 ,18,8,0,4,8,0,33,48,6,6,0,11,200,249,0,17,240,32,0,4,7,0,33,56,128,7, 2,0,10,40,248,4,0,16,192,32,0,4,8,0,33,48,0,0,6,2,0,10,209,250,0,17, 192,0,5,4,0,33,48,0,0,16,0,11,104,250,0,24,13,0,26,64,19,0,5,64,0,0,8 ,0,10,120,249,0,24,12,0,27,128,0,19,144,251,0,53,131,0,4,12,128,1,0, 11,120,248,4,0,23,32,8,0,26,35,0,4,4,128,0,12,2,252,12,0,23,32,16,0, 26,9,1,0,3,176,64,6,4,0,10,56,248,0,24,15,0,26,192,3,0,4,56,0,0,7,0, 11,224,255,8,0,24,2,0,26,3,0,4,48,0,0,6,0,11,193,253,0,24,64,0,27,35, 1,0,3,48,0,0,6,0,11,152,249,0,24,32,16,0,27,4,0,3,36,129,36,4,0,10, 208,251,0,24,12,0,34,32,0,12,48,249,0,24,15,2,0,25,192,0,5,32,32,4,4, 0,10,184,250,8,0,23,45,0,26,64,0,5,128,0,0,16,0,11,154,255,0,24,44,0, 27,11,2,0,4,1,32,0,11,8,251,0,24,15,2,0,25,128,3,0,4,28,136,3,1,0,10, 112,254,4,0,23,12,0,27,3,0,19,113,253,0,24,76,2,0,26,3,0,4,48,5,166,0 ,11,152,251,0,24,45,2,0,25,64,0,6,64,0,0,8,0,10,88,248,0,24,4,0,48, 152,251,0,53,131,0,4,12,128,1,0,11,120,248,8,0,23,64,2,0,26,3,0,4,4, 128,0,12,153,253,0,24,44,0,27,32,0,4,176,0,0,22,8,0,10,251,251,0,24, 15,2,0,25,192,3,1,0,3,56,32,7,0,11,224,252,4,0,52,131,0,4,48,0,0,6,0, 11,26,250,0,24,32,8,0,26,11,0,4,48,0,0,6,0,11,80,254,0,24,5,0,26,64, 131,0,4,52,9,0,0,8,0,10,216,248,0,24,8,0,33,48,0,13,32,255,0,24,11,0, 33,32,128,1,0,11,40,252,8,0,23,5,2,0,26,64,0,4,16,194,0,12,138,254,0, 24,70,2,0,26,33,0,4,48,1,22,0,11,152,252,0,24,9,0,26,192,3,2,0,3,12,8 ,7,2,0,10,56,253,4,0,23,10,2,0,26,1,0,4,32,0,0,6,0,11,49,249,0,24,36, 0,27,18,1,0,3,8,32,6,0,11,192,248,0,18,2,1,0,3,1,0,28,4,0,3,180,128, 32,0,1,74,16,0,7,192,250,0,25,2,0,32,48,8,0,0,2,0,10,32,253,0,17,48,0 ,5,4,2,0,25,192,0,5,32,0,0,4,1,0,0,8,0,8,240,254,8,0,16,16,0,5,136,0, 26,64,0,5,16,8,66,0,1,64,16,0,7,138,249,0,17,192,0,0,1,0,32,35,1,0,3, 176,16,64,0,2,5,0,7,168,253,0,17,240,0,5,5,0,26,128,3,0,4,12,128,1,2, 0,0,22,0,8,192,254,4,0,16,192,0,34,3,0,4,32,0,0,4,0,1,8,0,8,217,249,0 ,17,192,0,5,8,0,27,3,0,4,8,16,1,1,0,0,144,2,0,7,80,255,0,17,80,66,0,4 ,73,2,0,27,4,0,3,36,146,20,1,0,1,64,0,2,1,0,1,4,0,0,8,250,0,17,128,0, 5,4,0,33,48,0,0,6,0,11,72,251,0,17,112,0,5,11,0,26,192,0,7,4,0,11,168 ,248,8,0,16,144,0,5,5,2,0,25,64,0,6,18,6,4,0,10,50,251,0,17,64,0,5,10 ,0,27,35,2,0,3,48,0,0,38,0,3,11,0,1,76,8,0,0,48,65,240,250,0,17,176,0 ,5,9,0,26,128,3,0,4,28,144,3,1,0,1,192,3,1,0,0,15,0,1,60,0,0,152,250, 4,0,16,64,0,5,10,0,27,3,0,4,48,16,0,4,3,0,1,12,0,1,48,0,0,169,254,0, 17,128,0,5,8,0,27,3,0,4,16,1,64,8,0,2,3,0,1,12,0,1,48,0,1,253,0,74, 152,255,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16, 0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8 ,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,152,255, 0,74,152,255,40,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0, 0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0,16,0,0,2,64, 0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,178 ,253,0,17,32,0,5,2,0,26,128,64,0,4,136,32,17,4,0,10,136,250,32,0,0,4, 128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,2,2,64,0,0,8,0,1,32,0, 0,4,0,15,32,0,0,4,128,0,0,16,0,0,2,0,1,8,0,0,1,32,0,3,16,0,0,2,64,0,0 ,8,0,0,1,32,0,0,4,0,0,192,254,4,0,73,201,250,32,0,0,4,128,0,0,16,0,0, 2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0, 15,32,0,0,4,128,0,0,16,0,0,2,0,1,8,0,0,1,32,0,3,16,0,0,2,64,0,0,8,0,0 ,1,32,0,0,4,0,0,208,255,0,74,152,255,0,74,152,255,0,54,2,0,4,32,0,0,4 ,0,10,248,251,0,60,64,0,0,8,0,10,208,251,0,60,8,0,12,16,255,0,65,4,0, 7,216,251,0,72,8,0,0,16,255,0,74,152,255,0,51,80,0,19,8,0,0,64,250,0, 15,4,0,1,16,0,2,160,8,0,0,128,0,24,64,0,13,1,0,2,128,0,2,72,253,0,22, 32,0,2,1,0,37,128,0,3,64,0,2,8,248,0,15,32,0,1,32,0,3,32,0,49,184,255 ,0,74,152,255,0,74,152,255,0,74,152,255,0,74,152,255,0,74,152,255,0, 74,152,255,0,74,152,255,0,74,152,255,0,17,64,128,0,33,1,0,4,16,0,0,2, 0,11,240,254,0,74,152,255,0,74,152,255,0,74,152,255,0,74,152,255,0,53 ,4,0,4,64,0,0,8,0,11,24,251,0,74,152,255,0,74,152,255,0,74,152,255,0, 59,8,0,12,64,144,251,0,74,152,255,0,61,128,0,11,16,255,0,54,1,0,4,84, 128,2,0,1,2,0,7,64,255,0,25,2,0,25,64,0,20,184,251,0,74,152,255,0,74, 152,255,8,0,44,128,0,0,128,0,0,4,64,2,16,0,1,64,1,0,15,128,128,249,0, 7,128,0,11,128,0,35,32,0,8,16,0,3,8,0,0,56,252,0,7,64,0,11,64,0,23, 128,0,1,1,2,64,4,8,0,1,32,2,32,0,2,20,0,4,8,0,3,4,0,0,240,249,0,16,10 ,0,30,2,0,1,8,0,2,16,4,2,0,1,40,0,2,16,128,32,2,0,0,1,128,0,0,4,0,0, 80,254,0,16,2,0,29,128,0,2,2,0,2,32,1,8,0,1,16,0,8,64,0,2,176,251,0, 64,2,0,8,184,255,0,19,1,0,4,16,0,25,64,0,20,136,250,2,0,65,2,0,2,1,0, 1,128,32,255,0,53,6,0,4,104,0,0,28,8,0,10,88,248,4,0,58,4,128,0,2,2,0 ,8,161,254,0,74,152,255,0,61,1,0,11,136,255,0,74,152,255,0,74,152,255 ,0,53,64,0,4,4,0,13,152,251,0,52,128,8,0,5,8,4,0,11,208,255,0,74,152, 255,0,74,152,255,0,46,128,16,0,0,192,8,0,12,2,0,8,160,251,0,50,32,0, 22,184,255,0,46,12,0,1,240,0,13,6,0,8,176,248,0,46,4,0,1,16,128,0,12, 2,0,8,120,254,0,46,48,33,0,15,24,5,0,7,120,249,0,46,56,0,1,224,0,13, 30,0,8,112,251,0,46,48,0,16,24,0,8,24,253,0,46,48,0,1,192,0,13,26,0,8 ,176,249,0,22,104,0,22,164,0,1,16,8,0,2,4,0,18,156,250,0,22,96,0,22, 16,32,0,1,64,0,22,248,248,0,22,120,0,26,64,0,0,192,0,20,208,252,8,0, 21,104,0,22,128,8,0,1,4,0,0,64,0,20,227,250,0,22,96,0,22,32,32,0,0, 128,128,0,1,3,0,19,145,249,0,22,120,0,22,60,0,1,48,0,1,128,3,1,0,18, 96,250,4,0,21,96,0,23,16,0,4,3,0,19,233,255,0,22,96,0,22,48,0,2,2,1,0 ,0,3,0,19,136,250,0,46,128,16,0,5,4,0,16,4,2,32,255,0,73,16,152,254,0 ,46,12,0,4,192,0,19,16,208,250,8,0,45,4,0,4,64,0,19,1,226,249,0,46,48 ,0,5,35,2,0,17,32,136,255,0,46,56,16,0,3,128,3,0,17,12,0,0,56,251,4,0 ,45,48,0,5,3,0,17,32,0,0,217,248,0,46,48,0,5,3,0,17,128,64,160,251,0, 46,4,0,4,64,67,0,7,8,0,3,8,4,0,0,32,16,0,1,112,254,0,53,2,0,13,32,0,1 ,128,0,1,24,253,0,46,48,16,0,4,3,0,5,128,1,0,5,32,0,1,128,0,2,255,8,0 ,45,48,1,0,4,3,2,0,4,128,0,6,2,0,1,8,0,1,178,252,0,47,65,0,4,11,4,0,5 ,134,0,5,64,0,0,128,0,0,1,0,0,208,248,0,46,60,0,4,192,3,0,6,7,0,4,24, 0,1,96,0,2,16,252,4,0,45,48,0,5,3,0,6,6,0,11,153,250,0,46,48,8,0,4,35 ,4,0,5,6,0,4,64,129,0,1,4,2,0,0,48,248,0,44,32,64,128,16,0,0,16,8,0,0 ,64,2,0,12,4,0,5,8,252,0,50,64,0,1,1,2,0,18,200,252,0,46,12,0,2,64,0, 1,3,0,10,192,0,7,232,252,8,0,44,128,4,0,2,4,0,1,35,4,0,9,64,0,7,234, 254,0,44,128,144,48,1,0,1,128,0,1,18,2,0,10,3,2,0,5,128,255,0,44,96,0 ,0,56,32,0,0,48,0,1,192,0,11,128,3,0,6,80,248,4,0,45,48,0,1,64,0,2,3, 1,0,10,3,0,6,249,252,0,46,50,0,2,2,1,128,0,12,3,0,6,16,252,0,46,52,9, 0,3,64,35,4,128,41,4,0,0,4,2,0,12,32,253,0,53,3,0,1,4,0,2,16,0,12,248 ,249,0,46,48,0,5,2,24,0,0,8,0,2,16,0,12,56,254,4,0,45,48,10,0,4,129,8 ,0,0,132,16,0,1,1,0,12,26,253,12,0,45,144,64,0,4,35,96,1,40,0,2,32,0, 12,112,253,0,46,60,0,4,192,0,0,114,32,3,8,0,0,12,0,13,80,248,8,0,45, 48,0,5,2,96,0,0,8,0,16,201,249,0,46,48,18,0,3,128,32,97,0,0,68,8,0,0, 144,64,0,12,56,249,0,22,104,66,0,2,52,34,0,14,32,0,0,52,2,0,3,64,11,0 ,9,3,0,4,16,0,2,32,249,0,22,96,0,3,48,0,17,48,32,0,4,131,0,19,56,250, 0,22,64,0,3,32,0,17,32,0,6,2,0,6,48,0,0,6,0,3,3,0,3,232,250,8,0,21,32 ,33,0,2,16,34,0,16,16,9,0,4,19,0,7,16,0,0,2,0,3,1,0,3,186,255,0,22,96 ,4,0,2,48,2,0,15,144,176,64,0,4,10,4,0,6,192,4,24,4,0,2,12,4,0,2,248, 255,0,22,24,64,0,2,12,32,0,14,96,0,0,12,0,4,192,1,0,7,224,64,28,0,3, 14,0,4,254,4,0,21,64,0,3,32,0,15,128,1,32,0,5,2,0,7,192,0,0,24,0,3,12 ,0,3,129,248,0,22,16,132,0,2,8,66,0,14,128,1,10,66,0,4,80,0,7,192,0,0 ,26,0,3,12,0,3,8,248,0,22,8,65,0,2,180,16,0,14,160,1,164,128,0,3,64, 35,0,2,32,16,0,4,2,0,8,136,255,0,22,96,0,3,48,0,15,128,1,16,32,0,4,3, 1,0,2,128,0,14,176,248,0,22,96,0,3,32,16,0,16,48,0,5,3,0,3,128,0,4,6, 0,8,96,250,8,0,21,96,10,0,2,16,0,17,48,65,0,4,35,1,0,2,8,0,4,2,0,8, 106,248,0,22,64,64,0,3,17,0,15,128,32,32,38,0,3,32,1,0,3,1,0,3,152,32 ,0,7,216,253,0,22,24,0,3,60,0,15,96,0,0,12,128,7,2,0,1,192,1,0,2,96,1 ,0,4,28,0,8,136,252,4,0,21,64,0,4,32,0,16,48,16,6,0,3,2,0,9,24,0,8, 121,250,0,22,32,16,0,2,16,1,0,15,4,2,0,0,6,0,3,161,0,3,4,2,0,3,24,0,8 ,248,252,0,64,4,0,8,216,255,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1, 32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0 ,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,1,64,0,0,8,0,0,1,32, 0,0,4,0,0,184,255,0,74,152,255,40,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0 ,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4, 128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0, 0,1,32,0,0,4,0,0,178,253,0,46,8,4,0,1,66,0,0,128,8,18,8,0,4,17,36,16, 0,0,128,64,0,1,2,1,0,2,152,248,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0 ,1,32,0,0,4,128,0,0,16,0,0,2,64,0,2,1,32,0,0,4,0,15,32,0,1,128,0,2,2, 0,3,1,32,0,0,4,0,4,4,0,0,8,0,1,32,0,0,4,0,0,232,255,4,0,73,201,250,32 ,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0 ,0,8,10,1,32,0,0,4,0,15,32,0,1,128,0,0,16,132,2,0,3,1,32,0,0,4,0,3, 130,16,0,0,8,0,1,32,0,0,4,0,0,120,252,0,74,152,255,0,74,152,255,0,46, 16,0,6,2,64,0,5,4,128,0,2,2,0,1,8,0,2,112,252,0,54,4,0,1,16,0,15,136, 250,0,74,152,255,0,74,152,255,0,47,128,0,0,4,32,0,0,16,0,8,64,0,8,16, 0,0,108,251,0,74,152,255,0,48,1,2,84,0,0,8,0,8,32,0,5,40,0,1,168,0,1, 250,0,23,72,0,23,66,5,0,0,8,4,128,0,8,2,0,0,64,5,0,1,32,32,1,0,1,248, 255,0,47,128,0,0,4,0,0,2,16,0,0,2,0,10,1,0,6,88,255,0,23,16,0,45,128, 0,2,68,251,0,23,32,0,3,16,0,17,64,0,5,1,0,18,248,255,0,74,152,255,0, 47,40,0,25,176,255,0,46,64,0,6,64,0,4,128,0,12,208,255,0,74,152,255,0 ,74,152,255,0,74,152,255,0,74,152,255,0,62,128,0,2,8,0,1,2,0,3,144, 253,0,47,4,0,25,216,251,0,74,152,255,0,74,152,255,0,74,152,255,0,27,8 ,0,15,64,0,0,8,0,4,128,0,20,88,255,0,47,16,0,1,2,0,6,4,128,0,7,1,0,1, 4,128,0,0,48,248,0,74,152,255,0,48,4,0,3,4,0,19,216,255,0,22,8,0,30,2 ,0,18,24,253,0,74,152,255,0,23,8,0,2,144,0,21,64,0,5,4,0,6,8,0,7,192, 250,0,45,2,8,0,2,1,0,1,72,0,3,2,64,0,0,128,0,4,128,0,2,2,64,0,0,64, 250,0,46,4,0,5,72,9,0,1,2,0,3,16,0,1,64,0,2,1,0,3,72,253,0,74,152,255 ,0,22,64,0,50,152,251,0,44,64,64,0,3,128,0,10,16,128,0,0,128,0,0,16,0 ,1,4,0,0,8,0,0,72,250,0,50,32,0,5,2,0,3,64,0,2,128,0,1,4,0,3,240,249, 0,22,32,0,3,16,0,15,64,168,16,0,2,212,0,1,128,0,2,8,0,3,48,64,0,0,128 ,0,0,18,0,0,1,4,0,0,8,0,0,232,255,0,45,208,2,138,0,3,4,2,0,0,68,68,32 ,0,1,36,6,128,0,0,16,0,0,128,64,0,0,4,128,0,2,8,255,0,46,1,8,0,3,16,0 ,2,1,0,3,1,0,4,2,0,0,2,64,0,2,160,249,0,53,1,0,5,136,0,0,32,0,0,4,0,1 ,8,0,5,232,254,0,28,8,0,44,24,255,0,74,152,255,0,44,64,0,0,34,0,1,96, 0,0,1,0,0,2,0,1,4,64,0,0,10,64,0,5,16,128,0,0,64,0,0,10,64,184,253,8, 0,46,8,0,25,186,253,16,0,22,8,0,2,16,0,45,144,254,0,23,128,0,3,64,0, 17,64,0,3,64,0,11,32,0,7,120,255,0,23,1,0,2,128,0,17,128,0,6,4,0,18,8 ,250,0,74,152,255,0,50,64,0,22,216,255,0,46,1,0,5,4,0,19,200,251,0,74 ,152,255,0,74,152,255,0,57,32,48,4,0,13,248,250,0,74,152,255,0,59,44, 0,13,240,251,0,58,4,149,16,0,12,8,251,0,58,16,24,0,13,128,254,0,57,96 ,128,36,0,13,16,253,0,58,128,40,0,13,56,255,0,58,5,16,0,13,216,255,0, 57,160,1,4,0,13,224,249,0,57,128,1,0,14,128,255,0,57,128,1,44,0,13, 232,251,8,0,56,128,1,148,16,0,12,106,248,0,58,72,24,0,14,251,0,57,96, 0,0,36,0,13,152,253,4,0,58,40,0,13,225,250,0,59,16,0,13,136,255,0,57, 32,4,6,0,13,152,251,0,57,128,0,15,144,255,0,59,44,0,13,240,251,8,0,57 ,40,148,16,0,12,242,250,0,58,136,24,0,13,136,255,0,57,96,0,0,36,0,13, 152,253,4,0,57,128,40,0,13,105,250,0,59,16,0,13,136,255,0,56,5,32,16, 4,0,13,168,253,0,56,8,0,1,1,0,13,128,254,0,56,11,0,1,44,0,13,200,248, 8,0,55,37,4,16,149,16,0,12,18,249,0,56,6,0,0,5,24,0,13,176,249,0,56,9 ,96,64,36,0,13,128,248,4,0,55,10,0,1,41,0,13,217,249,0,56,4,0,0,8,16, 0,13,72,251,0,56,1,32,0,0,4,0,13,232,248,0,58,64,0,14,152,251,0,56,11 ,0,1,44,0,13,200,248,8,0,55,37,4,0,0,149,16,0,12,18,248,0,56,6,0,0,8, 24,0,13,96,249,0,56,9,96,1,37,0,13,128,253,4,0,55,10,0,1,41,0,13,217, 249,0,56,4,64,8,16,0,13,8,255,0,56,1,32,4,38,0,13,168,250,0,59,16,0, 13,136,255,0,56,11,0,1,44,0,13,200,248,8,0,55,37,4,40,148,16,0,12,130 ,251,0,56,6,0,0,136,24,0,13,232,249,0,56,9,96,0,0,36,0,13,128,252,4,0 ,55,10,0,0,128,24,0,13,113,248,0,56,4,0,0,1,32,0,13,232,251,0,1,4,0, 53,1,32,8,0,14,104,252,0,58,65,0,14,136,251,0,56,11,0,16,160,252,8,0, 55,37,4,32,0,14,194,254,0,1,48,6,0,52,6,0,0,132,0,14,80,252,0,1,60,0, 53,9,96,0,15,32,251,4,0,0,48,0,53,10,0,16,225,251,0,1,48,0,53,4,64,4, 1,0,13,200,253,0,1,4,0,53,1,32,48,0,14,232,255,0,57,128,0,15,144,255, 0,56,11,0,16,160,252,8,0,55,37,4,4,1,0,13,146,253,0,1,48,6,0,52,6,0,0 ,16,0,14,152,253,0,1,60,0,53,9,96,128,0,14,168,251,4,0,0,48,0,53,10,0 ,0,128,0,14,105,251,0,1,48,0,53,4,0,0,4,0,14,152,248,0,74,152,255,32, 0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0, 0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0 ,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,152,255,0,74,152, 255,40,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0, 2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0 ,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,0,178,253,0,56 ,2,0,1,8,0,13,176,253,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0 ,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0,16, 0,0,2,64,0,0,8,0,1,32,0,1,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0, 0,200,250,4,0,73,201,250,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32, 0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0, 16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0 ,0,4,0,0,152,255,0,74,152,255,0,74,152,255,0,58,128,0,14,16,255,0,74, 152,255,0,74,152,255,0,74,152,255,0,59,16,8,0,13,255,0,74,152,255,0, 59,8,16,0,12,128,254,0,56,4,0,0,33,16,8,0,12,80,249,0,56,4,0,1,16,8,0 ,12,64,251,0,58,65,0,14,136,251,0,74,152,255,0,74,152,255,0,74,152, 255,16,0,56,64,0,15,140,255,0,74,152,255,0,74,152,255,4,0,0,4,0,71, 137,250,0,74,152,255,0,57,32,0,15,184,253,0,57,128,0,15,144,255,0,74, 152,255,0,56,8,0,1,32,0,13,176,255,0,74,152,255,0,74,152,255,0,74,152 ,255,0,58,64,0,14,152,251,0,74,152,255,0,74,152,255,0,74,152,255,0,74 ,152,255,0,57,128,64,0,14,144,251,0,57,32,0,15,184,253,0,74,152,255,0 ,74,152,255,0,55,16,4,0,2,8,0,12,80,250,0,74,152,255,128,0,54,32,2, 128,0,1,16,0,12,32,254,0,0,4,32,0,52,2,4,2,0,1,8,0,12,112,255,0,56,4, 2,0,1,8,0,12,80,249,0,1,16,0,71,152,254,0,74,152,255,0,74,152,255,0, 58,2,2,0,13,152,253,0,74,152,255,0,74,152,255,0,74,152,255,0,74,152, 255,0,74,152,255,0,58,4,0,14,216,255,0,74,152,255,0,74,152,255,0,74, 152,255,0,48,66,8,0,1,33,0,1,132,0,17,128,251,0,48,4,0,24,152,251,0, 47,128,5,0,1,22,0,1,88,0,18,208,248,0,47,128,66,8,0,0,10,33,0,0,40, 132,0,17,32,251,0,48,3,0,1,12,0,1,48,0,18,32,251,0,48,4,0,1,16,0,1,64 ,0,18,200,254,0,48,5,0,1,20,0,1,80,0,18,216,250,0,48,2,0,1,8,0,1,32,0 ,18,48,255,0,48,64,8,0,1,33,0,1,132,0,17,128,249,0,74,152,255,0,47, 128,5,0,1,22,0,1,88,0,18,208,248,8,0,46,128,66,8,0,0,10,33,0,0,40,132 ,0,17,10,249,0,48,3,0,1,12,0,1,48,0,18,32,251,0,48,4,0,1,16,0,1,64,0, 18,200,254,4,0,47,5,0,1,20,0,1,80,0,18,137,255,0,48,2,0,1,8,0,1,32,0, 18,48,255,0,48,64,8,0,1,97,8,2,132,0,17,136,255,0,74,152,255,0,47,128 ,5,0,1,22,0,1,88,0,18,208,248,8,0,46,128,66,8,0,0,10,33,8,42,132,0,17 ,2,251,0,48,3,0,1,12,0,0,8,52,0,18,40,255,0,48,4,0,1,16,192,0,0,64,0, 18,64,250,4,0,47,5,0,1,20,0,1,80,0,18,137,255,0,48,2,0,1,8,0,0,2,36,0 ,18,16,249,0,48,64,8,0,1,97,8,0,0,132,0,17,136,253,0,53,128,0,19,24, 255,0,47,128,5,0,1,22,0,1,88,0,18,208,248,8,0,46,128,66,8,0,0,10,33, 64,40,132,0,17,74,249,0,48,3,0,1,12,0,0,160,48,0,18,128,251,0,48,4,0, 1,16,192,0,0,64,0,18,64,250,4,0,47,5,0,1,20,0,0,128,80,0,18,9,255,0, 48,2,0,1,8,0,0,34,32,0,18,48,253,0,48,64,8,0,1,97,32,0,0,132,0,6,66,0 ,9,224,251,0,54,1,0,18,152,254,0,47,128,5,0,1,22,0,1,89,0,6,48,0,10, 224,249,8,0,46,128,66,8,0,0,10,33,8,40,132,0,5,16,0,10,18,249,0,48,3, 0,1,12,0,0,16,49,0,6,192,24,0,9,104,251,0,48,4,0,1,16,192,0,0,64,0,6, 224,0,10,160,250,4,0,47,5,0,1,20,0,1,80,0,6,192,0,10,73,255,0,48,2,0, 1,8,128,18,34,0,6,192,0,10,72,255,0,45,132,0,1,64,8,0,1,97,16,0,0,132 ,0,0,160,1,0,14,160,251,0,54,1,0,18,152,254,0,44,96,0,1,128,5,0,1,22, 0,1,90,0,1,128,129,0,14,32,250,8,0,43,32,0,1,128,66,8,0,0,10,33,0,0, 40,132,0,0,128,5,0,14,114,249,0,44,128,145,0,1,3,0,1,12,0,0,32,49,0,2 ,8,1,0,13,8,251,0,44,192,1,0,1,4,0,1,16,192,0,0,64,0,1,224,1,0,14,248 ,253,4,0,43,128,1,0,1,5,0,1,20,0,1,80,0,2,128,0,14,129,254,0,44,128,1 ,0,1,2,0,1,8,0,0,34,36,0,1,128,1,0,14,168,248,0,48,64,8,0,1,97,64,0,0 ,132,0,6,66,2,1,0,7,176,250,0,65,16,0,7,136,255,0,47,128,5,0,1,22,0,1 ,88,0,6,48,0,1,16,0,7,240,248,8,0,46,128,66,8,0,0,10,33,32,42,132,0,5 ,16,0,1,1,0,7,42,250,0,48,3,0,1,12,0,0,32,48,0,6,192,8,0,0,9,0,7,80, 250,0,48,4,0,1,16,192,0,0,66,0,6,224,128,6,0,8,200,248,4,0,47,5,0,1, 20,0,1,80,0,6,192,0,10,73,255,0,48,2,0,1,8,128,18,33,0,6,192,0,0,144, 8,0,7,200,253,0,12,32,0,34,64,216,0,1,97,0,0,66,132,0,6,66,0,3,33,0,4 ,24,251,0,49,192,0,3,32,0,18,48,249,0,47,128,5,192,0,0,22,0,1,88,0,6, 48,0,3,24,0,5,232,253,8,0,46,128,66,200,0,0,10,33,8,41,132,0,5,16,0,3 ,8,0,5,26,252,0,12,128,17,1,0,32,3,0,0,66,12,0,0,16,50,0,6,192,0,3,96 ,4,0,4,216,249,0,12,224,1,0,33,4,48,0,0,16,192,0,0,64,0,6,224,64,0,2, 112,32,0,4,184,252,4,0,11,128,1,0,33,5,0,1,20,0,1,49,0,6,192,0,3,96,0 ,5,49,254,0,12,128,1,0,33,2,0,1,8,0,0,18,64,0,6,192,0,3,96,0,5,184, 253,0,74,152,255,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4, 128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0,16,0,0 ,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0 ,0,152,255,0,74,152,255,40,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0 ,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,15,32,0,0,4,128,0,0, 16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0 ,0,4,0,0,178,253,0,44,64,32,0,1,129,0,1,4,2,0,0,16,8,0,5,32,16,0,2,16 ,8,0,4,120,249,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128, 0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,0,17,4,0,1,16,0,1,64,0,2,1,32,0, 0,4,128,0,2,2,64,0,2,1,32,0,0,4,0,0,32,253,4,0,73,201,250,32,0,0,4, 128,0,0,16,0,0,2,64,0,0,8,0,0,1,32,0,0,4,128,0,0,16,0,0,2,64,0,0,8,0, 0,1,32,0,0,4,0,17,4,0,1,16,0,1,64,0,2,1,32,0,0,4,128,0,2,2,64,0,2,1, 32,0,0,4,0,0,32,253,0,74,152,255,0,74,152,255,0,44,128,0,3,64,0,6,128 ,0,3,64,0,3,32,0,5,80,249,0,58,32,0,14,152,253,0,74,152,255,0,74,152, 255,0,48,2,1,0,1,4,0,0,32,16,0,17,232,254,0,74,152,255,0,48,181,2,0,0 ,128,10,0,0,16,32,0,17,56,250,0,1,16,0,44,128,2,5,0,0,10,20,161,34,16 ,0,9,1,0,6,16,254,0,1,32,0,45,2,1,0,0,8,4,129,32,16,0,8,128,0,7,112, 253,0,74,152,255,0,74,152,255,0,74,152,255,0,53,64,0,7,16,0,3,128,0,5 ,64,255,16,0,51,64,74,4,0,18,164,249,2,0,72,128,48,253,0,74,152,255, 16,0,73,204,251,0,74,152,255,0,52,128,136,1,0,7,64,0,9,216,250,0,13,4 ,0,50,2,0,7,248,253,0,74,152,255,0,74,152,255,0,74,152,255,0,74,152, 255,0,74,152,255,0,53,4,0,8,1,0,9,216,250,0,74,152,255,0,74,152,255,0 ,74,152,255,0,74,152,255,0,52,64,0,0,4,0,9,8,0,7,144,255,0,44,96,0,1, 128,0,0,4,0,0,2,16,0,0,8,64,0,5,16,0,0,4,0,1,8,0,5,96,248,0,74,152, 255,0,74,152,255,0,48,2,1,32,8,4,0,1,16,4,2,0,1,8,0,3,64,0,7,232,250, 0,74,152,255,0,48,181,2,84,212,10,0,1,42,42,4,0,1,16,0,0,128,22,0,0, 128,0,7,192,254,0,13,1,0,31,1,128,2,64,4,10,20,0,2,228,10,0,1,129,8,0 ,3,160,8,0,5,152,251,0,48,2,64,0,0,8,4,0,2,1,2,0,7,128,0,6,72,250,0, 12,128,0,60,144,255,0,74,152,255,0,74,152,255,0,74,152,255,0,49,8,0,1 ,32,1,1,128,0,0,64,0,15,192,249,0,74,152,255,0,74,152,255,0,74,152, 255,0,74,152,255,0,53,7,0,19,232,248,0,52,128,128,2,0,8,32,0,8,144, 255,0,74,152,255,0,74,152,255,56,0,0,16,0,3,8,0,14,8,1,0,2,132,0,16, 68,132,0,5,8,2,0,4,136,0,12,214,255,0,1,32,0,3,16,0,5,1,0,1,4,0,5,1,0 ,2,128,0,16,5,128,0,3,82,0,0,8,0,4,128,0,0,16,0,11,144,254,0,74,152, 255,0,22,128,0,3,64,0,16,2,64,0,3,32,0,0,4,0,4,64,0,0,8,0,11,240,251, 0,0,22,192,2,72,0,0,9,96,1,42,128,4,144,0,0,22,64,2,88,0,0,9,32,1,42, 0,0,5,144,0,0,18,128,2,0,15,20,128,2,72,0,0,9,64,1,40,128,4,144,0,0, 18,128,2,80,128,10,80,1,42,64,5,168,0,0,21,160,2,240,255,128,12,144,1 ,48,0,0,6,200,128,19,0,0,3,96,128,12,128,1,50,0,0,6,192,128,19,48,3, 96,0,0,12,148,1,0,14,192,12,152,1,48,0,0,6,204,64,25,0,0,3,96,0,0,12, 148,129,50,208,4,154,128,19,112,2,77,160,9,56,1,24,253,255,255,0}; typedef struct{const unsigned char*l98;unsigned char l129;unsigned char l160;}l163;static unsigned short l695(l163*l37,const unsigned char*l98){unsigned short w;w= *l98++;w|= *l98++<<8;l37->l98=l98;l37-> l129=0;l37->l160=0;return w;}static unsigned char l293(l163*l37){{if( !(l37->l160>0))goto l651;{--l37->l160;return l37->l129;}l651:;}l37-> l129= *l37->l98++;{if(!(l37->l129==0))goto l639;l37->l160= *l37->l98 ++;l639:;}return l37->l129;}static int l529(s*b){const unsigned char* l71=0;unsigned short w;unsigned short q;unsigned char r;l163 l37;int c ;q=4|32|64|128; * (volatile unsigned short* )((b)->g+1024)=q|2|1; * ( volatile unsigned short* )((b)->g+1028)=q; * (volatile unsigned short * )((b)->g+1028)=(q^=(32|4));{c=0;l632:if(!(( * (volatile unsigned short* )((b)->g+1028)&(8|16))))goto l622;goto l618;l624:c++;goto l632 ;l618:{{if(!(c==3))goto l613;{; * (volatile unsigned short* )((b)->g+ 1024)=255;return 1;}l613:;}}goto l624;l622:;}{c=0;l607:if(!(c<30))goto l267;goto l266;l604:c++;goto l607;l266:{ * (volatile unsigned short* )( (b)->g+1028)=q;}goto l604;l267:;} * (volatile unsigned short* )((b)-> g+1028)=(q|=4);{c=0;l264:if(!(( * (volatile unsigned short* )((b)->g+ 1028)&(8|16))!=8))goto l260;goto l259;l262:c++;goto l264;l259:{{if(!( c==60))goto l255;{; * (volatile unsigned short* )((b)->g+1024)=255; return 1;}l255:;}}goto l262;l260:;}{c=0;l241:if(!(c<15))goto l238; goto l818;l239:c++;goto l241;l818:{ * (volatile unsigned short* )((b)-> g+1028)=q;}goto l239;l238:;}{if(!(!b->l71[(b->l180= * (volatile unsigned short* )((b)->g+1028)>>(8+5))]))goto l806;{switch(b->l180){ case 1:l71=l451;break;case 2:l71=l295;break;case 3:l71=l527;break; case 6:l71=l649;break;case 7:l71=l565;break;default:; * (volatile unsigned short* )((b)->g+1024)=255; * (volatile unsigned short* )((b)-> g+1028)=32|64|128;return 2;break;}}goto l786;l806:;{l71=b->l71[b-> l180];}l786:;}w=l695(&l37,l71);;{;l774:if(!(w>0))goto l765;goto l750; l734:--w;goto l774;l750:{r=l293(&l37);{if(!(( * (volatile unsigned short* )((b)->g+1028)&8)==0))goto l730;{;goto l213;}l730:;}{if(!(( * ( volatile unsigned short* )((b)->g+1028)&16)))goto l726;{{c=0;l716:if( !(c<20))goto l638;goto l636;l643:++c;goto l716;l636:( * (volatile unsigned short* )((b)->g+1028)=(q|2), * (volatile unsigned short* )(( b)->g+1028)=q);goto l643;l638:;}{if(!(( * (volatile unsigned short* )( (b)->g+1028)&8)==0))goto l631;{;goto l213;}l631:;}; * (volatile unsigned short* )((b)->g+1024)=255;return 0;}l726:;}{{if(!(r&1))goto l623;q|=1;goto l626;l623:;q&=~1;l626:;} * (volatile unsigned short* )( (b)->g+1028)=q;( * (volatile unsigned short* )((b)->g+1028)=(q|2), * ( volatile unsigned short* )((b)->g+1028)=q);};{{if(!(r&2))goto l625;q |=1;goto l615;l625:;q&=~1;l615:;} * (volatile unsigned short* )((b)-> g+1028)=q;( * (volatile unsigned short* )((b)->g+1028)=(q|2), * ( volatile unsigned short* )((b)->g+1028)=q);};{{if(!(r&4))goto l619;q |=1;goto l617;l619:;q&=~1;l617:;} * (volatile unsigned short* )((b)-> g+1028)=q;( * (volatile unsigned short* )((b)->g+1028)=(q|2), * ( volatile unsigned short* )((b)->g+1028)=q);};{{if(!(r&8))goto l593;q |=1;goto l590;l593:;q&=~1;l590:;} * (volatile unsigned short* )((b)-> g+1028)=q;( * (volatile unsigned short* )((b)->g+1028)=(q|2), * ( volatile unsigned short* )((b)->g+1028)=q);};{{if(!(r&16))goto l588;q |=1;goto l587;l588:;q&=~1;l587:;} * (volatile unsigned short* )((b)-> g+1028)=q;( * (volatile unsigned short* )((b)->g+1028)=(q|2), * ( volatile unsigned short* )((b)->g+1028)=q);};{{if(!(r&32))goto l585;q |=1;goto l576;l585:;q&=~1;l576:;} * (volatile unsigned short* )((b)-> g+1028)=q;( * (volatile unsigned short* )((b)->g+1028)=(q|2), * ( volatile unsigned short* )((b)->g+1028)=q);};{{if(!(r&64))goto l580;q |=1;goto l579;l580:;q&=~1;l579:;} * (volatile unsigned short* )((b)-> g+1028)=q;( * (volatile unsigned short* )((b)->g+1028)=(q|2), * ( volatile unsigned short* )((b)->g+1028)=q);};{{if(!(r&128))goto l578; q|=1;goto l577;l578:;q&=~1;l577:;} * (volatile unsigned short* )((b)-> g+1028)=q;( * (volatile unsigned short* )((b)->g+1028)=(q|2), * ( volatile unsigned short* )((b)->g+1028)=q);};}goto l734;l765:;};l213: ;return 3;}static unsigned char u(s*b,unsigned char z){unsigned short l93=z|65280|b->l137;unsigned char r; * (volatile unsigned short* )((b )->g+1024)=255; * (volatile unsigned short* )((b)->g+1028)=l93; * ( volatile unsigned short* )((b)->g+1024)=255; * (volatile unsigned short* )((b)->g+1028)=l93^128; * (volatile unsigned short* )((b)->g+ 1024)=255;r= * (volatile unsigned short* )((b)->g+1028)>>8; * ( volatile unsigned short* )((b)->g+1028)=l93;return r;}static void l(s *b,unsigned char z,unsigned char r){unsigned short l93=z|r<<8|b-> l137; * (volatile unsigned short* )((b)->g+1024)=65535; * (volatile unsigned short* )((b)->g+1028)=l93; * (volatile unsigned short* )((b)-> g+1024)=65535; * (volatile unsigned short* )((b)->g+1028)=l93^64; * ( volatile unsigned short* )((b)->g+1024)=65535; * (volatile unsigned short* )((b)->g+1028)=l93; * (volatile unsigned short* )((b)->g+1024)= 255;}static unsigned char l57(e*a,unsigned char z){l(a->d,a->l48,z); return u(a->d,a->d->l83);}static void i(e*a,unsigned char z,unsigned char r){l(a->d,a->l48,z);l(a->d,a->d->l83,r);}static unsigned char l90 (e*a,unsigned char z,unsigned char l214){unsigned char r;l(a->d,a-> l48,z);l(a->d,a->d->l83,l214);l(a->d,a->l48,z);r=u(a->d,a->d->l83)& l214;l(a->d,a->l48,z);l(a->d,a->d->l83,r);return r;}static void l176( s*b,unsigned char r,unsigned char l27){int c;l(b,40,l27);{c=0;l553:if (!(c<8))goto l549;goto l547;l552:++c;goto l553;l547:{{if(!((r>>c)&1))goto l544;{l(b,40,l27|4);l(b,40,l27|4);l(b,40,l27|4);l(b,40,l27|4);l(b,40, l27|4|8);l(b,40,l27|4|8);l(b,40,l27|4|8);l(b,40,l27|4|8);}goto l541; l544:;{l(b,40,l27);l(b,40,l27);l(b,40,l27);l(b,40,l27);l(b,40,l27|8); l(b,40,l27|8);l(b,40,l27|8);l(b,40,l27|8);}l541:;}}goto l552;l549:;}l (b,40,l27);}static void l106(e*a,unsigned char z,unsigned char r){ unsigned char l27=16<p;l(a->d,40,0);l176(a->d,(z<<1)|0,l27);l176( a->d,r,l27);l(a->d,40,0);}static unsigned char l603(e*a,unsigned char z){unsigned char l27=16<p;unsigned char r=0;int c;l(a->d,40,0); l176(a->d,(z<<1)|1,l27);{c=0;l539:if(!(c<8))goto l537;goto l534;l532: ++c;goto l539;l534:{l(a->d,40,l27|8);{if(!(u(a->d,a->l44)&128))goto l458;r|=1<d,40,l27);}goto l532;l537:;}l(a->d,40,0); return r;}unsigned long cp_regio(e*a,int l194,int z,unsigned long r){ switch(l194){case 0:r=u(a->d,(unsigned char)z);break;case 1:r=l57(a,( unsigned char)z);break;case 2:r=l90(a,(unsigned char)z,255);break; case 3:r=l603(a,16);break;case 4:r=u(a->d,(unsigned char)z);l(a->d,( unsigned char)z,(unsigned char)r);break;case 9:l(a->d,(unsigned char)z ,(unsigned char)r);r=u(a->d,(unsigned char)z);break;case 5:l(a->d,( unsigned char)z,(unsigned char)r);break;case 6:l106(a,16,(unsigned char)r);break;case 7: * (unsigned long* )(a->x+z)=r;r= * (unsigned long* )(a->x+z);break;case 8:i(a,(unsigned char)z,(unsigned char)r);r =l57(a,(unsigned char)z);break;}return r;}static unsigned short l521( s*b){int c;unsigned short r;unsigned short l222; * (volatile unsigned short* )((b)->g+1024)=255;{c=255;l366:if(!(c>=0))goto l365;goto l370; l371:c--;goto l366;l370:{ * (volatile unsigned short* )((b)->g+1028)= c|32; * (volatile unsigned short* )((b)->g+1024)=255;r=( * (volatile unsigned short* )((b)->g+1028))>>8;l222=((c&(~32))|((~(c<<1))&32));{ if(!(r!=l222))goto l372;{ * (volatile unsigned short* )((b)->g+1028)= 255;return(c|(r<<8));}l372:;}}goto l371;l365:;} * (volatile unsigned short* )((b)->g+1028)=255;return 0;}unsigned short cp_init(s*b,int p, unsigned char*g){unsigned char l56;unsigned short l224;e*a;b->g=g;b-> p=(unsigned char)p;b->l30=0;b->l174=0; * (volatile unsigned long* )(( b)->g+8)=262144; * (volatile unsigned short* )((b)->g+1032)=65535; * ( volatile unsigned short* )((b)->g+1024)=0;b->l125=4;b->l116=0;b->l137 =192;b->l83=38;switch(l529(b)){case 0:b->l137|=32;;{if(!((l224=l521(b ))))goto l373;return l224;l373:;}b->l83=30;break;case 1:l56=u(b,0);{ if(!((l56&56)!=40&&(l56&128)==(u(b,0)&128)))goto l359;{return 65535;} l359:;}break;case 2:case 3:default:return 65535;break;}l56=u(b,0); switch(l56&56){default:b->f=0;strcpy(b->l39,"\x55\x6e\x6b\x6e\x6f\x77" "\x6e");break;case 56:{if(!((l56&64)!=(u(b,0)&64)))goto l375;{b->f=12 ;strcpy(b->l39,"\x54\x61\x75\x2d\x50\x43\x49\x2d\x4c");}goto l376; l375:;{if(!(l56&64))goto l397;{b->f=6;strcpy(b->l39,"\x54\x61\x75\x2d" "\x50\x43\x49\x34");}goto l333;l397:;{b->f=1;strcpy(b->l39,"\x54\x61" "\x75\x2d\x50\x43\x49");}l333:;}l376:;}break;case 8:{if(!(l56&64))goto l399;{b->f=10;strcpy(b->l39,"\x54\x61\x75\x2d\x50\x43\x49\x34\x2d\x45" "\x31\x2f\x58");}goto l400;l399:;{b->f=5;strcpy(b->l39,"\x54\x61\x75" "\x2d\x50\x43\x49\x2d\x45\x31");}l400:;}break;case 16:{if(!(l56&64))goto l401;{b->f=7;strcpy(b->l39,"\x54\x61\x75\x2d\x50\x43\x49\x34\x2d\x47" "\x37\x30\x33\x2f\x58");}goto l330;l401:;{b->f=4;strcpy(b->l39,"\x54" "\x61\x75\x2d\x50\x43\x49\x2d\x47\x37\x30\x33");}l330:;}break;case 24 :{if(!(l56&64))goto l403;{b->f=10;strcpy(b->l39,"\x54\x61\x75\x2d\x50" "\x43\x49\x34\x2d\x32\x45\x31\x2f\x58");}goto l404;l403:;{b->f=9; strcpy(b->l39,"\x54\x61\x75\x2d\x50\x43\x49\x2d\x32\x45\x31");}l404:; }break;case 32:b->f=11;strcpy(b->l39,"\x54\x61\x75\x2d\x50\x43\x49" "\x2d\x34\x45\x31");break;case 40:b->f=2;strcpy(b->l39,"\x54\x61\x75" "\x2d\x50\x43\x49\x2d\x45\x33");break;case 48:b->f=3;strcpy(b->l39,"" "\x54\x61\x75\x2d\x50\x43\x49\x2d\x48\x53\x53\x49");break;}{if(!(b->f ==2))goto l405;{switch(l56&6){default:break;case 6:b->k->f=4;b->l80= 34368000;break;case 4:strcpy(b->l39,"\x54\x61\x75\x2d\x50\x43\x49\x2d" "\x54\x33");b->k->f=7;b->l80=44736000;break;case 2:strcpy(b->l39,"" "\x54\x61\x75\x2d\x50\x43\x49\x2d\x53\x54\x53\x2d\x31");b->k->f=8;b-> l80=51840000;break;}}goto l406;l405:;{switch(l56&6){default:break; case 6:b->l80=32768000;break;case 4:b->l80=16384000;break;}}l406:;}{a =b->k;l428:if(!(ak+4))goto l430;goto l431;l429:++a;goto l428;l431 :{a->d=b;l189(a);}goto l429;l430:;}return 0;}static void l68(e*a){ unsigned char l74=1;{if(!(a->f!=4&&a->f!=7&&a->f!=8))goto l432;return ;l432:;}{if(!(a->l61))goto l433;l74|=2;l433:;}{if(!(a->l169))goto l434 ;l74|=8;l434:;}{if(!(a->l178))goto l435;l74|=48;goto l436;l435:;{if(! (a->l86))goto l437;{switch(a->f){case 4:l74|=16;break;case 7:l74|=32; break;case 8:default:break;}}l437:;}l436:;}{if(!(a->l156))goto l459; l74|=128;goto l274;l459:;{if(!(a->l53))goto l461;l74|=64;l461:;}l274: ;}{if(!(a->l167))goto l270;l74|=4;l270:;}l(a->d,8,l74);}static void l189(e*a){a->p=a-a->d->k;a->y=0;a->l146=0;a->l145=0;a->l164=0;a->l177 =0;a->l53=0;a->l156=0;a->l61=0;a->l134=0;a->j=~1;a->l186=0;a->l46=0;a ->l58=0;a->v=a->p;a->l33=0;a->l41=0;a->l26=0;a->l38=0;a->l86=0;a-> l178=0;a->l169=0;a->l122=1;switch(a->d->f){default:a->f=0;break;case 6 :a->f=1;break;case 11:a->f=3;break;case 8:a->f=2;break;case 10:a->f=a ->p<2?3:1;break;case 9:a->f=a->p<2?3:6;break;case 7:a->f=a->p<2?2:1; break;case 1:a->f=a->p<2?1:0;break;case 5:a->f=a->p<2?3:0;break;case 4 :a->f=a->p<2?2:0;break;case 2:a->f=a->p==0?a->f:0;break;case 3:a->f=a ->p==0?5:0;break;case 12:a->f=a->p==0?1:0;break;}{if(!(a->f==6))goto l463;a->j=0;l463:;}a->x=a->d->g+a->p*128+256;switch(a->p){case 0:a-> l123=(unsigned long* )(a->d->g+20);a->l124=(unsigned long* )(a->d->g+ 36);a->l82=(unsigned long* )(a->d->g+80);a->l130=(unsigned long* )(a ->d->g+84);a->l102=(unsigned long* )(a->d->g+152);a->l135=(unsigned long* )(a->d->g+200);a->l75=(unsigned long* )(a->d->g+88);a->l132=( unsigned long* )(a->d->g+176);a->l147=(unsigned long* )(a->d->g+224); a->l73=4;a->l81=4;a->l62=32;a->l44=36;a->l48=32;a->l64=12;break;case 1 :a->l123=(unsigned long* )(a->d->g+24);a->l124=(unsigned long* )(a->d ->g+40);a->l82=(unsigned long* )(a->d->g+92);a->l130=(unsigned long* )( a->d->g+96);a->l102=(unsigned long* )(a->d->g+156);a->l135=(unsigned long* )(a->d->g+204);a->l75=(unsigned long* )(a->d->g+100);a->l132=( unsigned long* )(a->d->g+180);a->l147=(unsigned long* )(a->d->g+228); a->l73=5;a->l81=5;a->l62=34;a->l44=38;a->l48=34;a->l64=14;break;case 2 :a->l123=(unsigned long* )(a->d->g+28);a->l124=(unsigned long* )(a->d ->g+44);a->l82=(unsigned long* )(a->d->g+104);a->l130=(unsigned long* )(a->d->g+108);a->l102=(unsigned long* )(a->d->g+160);a->l135=( unsigned long* )(a->d->g+208);a->l75=(unsigned long* )(a->d->g+112);a ->l132=(unsigned long* )(a->d->g+184);a->l147=(unsigned long* )(a->d ->g+232);a->l73=6;a->l81=6;a->l62=48;a->l44=52;a->l48=48;a->l64=13; break;case 3:a->l123=(unsigned long* )(a->d->g+32);a->l124=(unsigned long* )(a->d->g+48);a->l82=(unsigned long* )(a->d->g+116);a->l130=( unsigned long* )(a->d->g+120);a->l102=(unsigned long* )(a->d->g+164); a->l135=(unsigned long* )(a->d->g+212);a->l75=(unsigned long* )(a->d ->g+124);a->l132=(unsigned long* )(a->d->g+188);a->l147=(unsigned long * )(a->d->g+236);a->l73=7;a->l81=7;a->l62=50;a->l44=54;a->l48=50;a-> l64=15;break;}{if(!(a->d->l83==30))goto l465;{a->l38=1;switch(a->p){ case 0:a->l62=16;a->l34=20;a->l48=24;break;case 1:a->l62=18;a->l34=21 ;a->l48=26;break;case 2:a->l62=17;a->l34=22;a->l48=25;break;case 3:a ->l62=19;a->l34=23;a->l48=27;break;}}l465:;}l68(a);{if(!(a->f==4||a-> f==7||a->f==8))goto l468;{l(a->d,14,(2048>>8)&255);l(a->d,15,(2048>> 16)&255);}l468:;}}static void l157(e*a){unsigned char l139;{if(!(!a-> l34))goto l472;return;l472:;}{if(!(a->d->k[a->v].l31))goto l467;l139= a->p;goto l469;l467:;l139=a->v;l469:;}{if(!(!a->l31&&!a->l52))goto l824;l139|=4;l824:;}l(a->d,a->l34,l139);}void cp_hard_reset(s*b){l(b, 0,128);}static void l741(e*a){int c;i(a,172,1);{c=0;l826:if(!(c<=255))goto l827;goto l828;l829:c++;goto l826;l828:{{if(!(c!=172))goto l414;i(a, 192,0);l414:;}}goto l829;l827:;}i(a,172,0);{c=0;l831:if(!(c<=255))goto l832;goto l833;l834:c++;goto l831;l833:{{if(!(c!=172))goto l855;i(a, 192,0);l855:;}}goto l834;l832:;}}void cp_reset(s*b,l172*l60,unsigned long l69){e*a;{if(!(!b->g))goto l856;return;l856:;}{if(!(l60))goto l857;memset(l60,0,sizeof(l172));l857:;} * (volatile unsigned long* )( (b)->g+8)=262144; * (volatile unsigned short* )((b)->g+1032)=65535; * (volatile unsigned short* )((b)->g+1024)=255; * (volatile unsigned short* )((b)->g+1028)=255; * (volatile unsigned long* )((b)->g+768)= 4194304;l(b,0,b->l125&~4);cp_led(b,0); * (volatile unsigned long* )(( b)->g+12)=(128/32-1)<<28|(128/32-1)<<24|(128/32-1)<<20|(128/32-1)<<16 |(128/32-1)<<12|(128/32-1)<<8|(128/32-1)<<4|(128/32-1); * (volatile unsigned long* )((b)->g+16)=(128/32-1)<<16; * (volatile unsigned long * )((b)->g+68)=1108361216; * (volatile unsigned long* )((b)->g+72)= 3740719104UL; * (volatile unsigned long* )((b)->g+52)=404232216; * ( volatile unsigned long* )((b)->g+76)=7;cp_set_mux(b,b->l30);{if(!(l60 ))goto l858;{b->l94=l60->l94; * (volatile unsigned long* )((b)->g+64)= l69+((char* )b->l94-(char* )l60);}l858:;}b->l115=0;{a=b->k;l859:if(!( ak+4))goto l861;goto l862;l860:++a;goto l859;l862:{{if(!(a->f==2))goto l863;l165(a);goto l864;l863:;{if(!(a->f==3))goto l441;l210(a);l441:;} l864:;}l157(a);a->l35=0; * (volatile unsigned long* )((a)->x+8)=a-> l35;a->l36=0; * (volatile unsigned long* )((a)->x+16)=a->l36;a->l144= 1; * (volatile unsigned long* )((a)->x+84)=a->l70=~0; * (volatile unsigned long* )((a)->x+28)=520552703; * (volatile unsigned long* )(( a)->x+32)=520552703;{if(!(l60))goto l885;{a->l155=l60->l155[a->p];a-> l97=l60->l97[a->p];( * (a)->l123)=l69+((char* )a->l155-(char* )l60);( * (a)->l124)=l69+((char* )a->l97-(char* )l60);;}l885:;}a->l608=0;a-> l104=0;( * (a)->l82)=0;( * (a)->l75)=0;}goto l860;l861:;} * (volatile unsigned long* )((b)->g+0)=4279239169UL;{a=b->k;l887:if(!(ak+4))goto l443;goto l889;l223:++a;goto l887;l889:{{if(!(a->f!=3||!a->l38||l57(a ,15)!=163))goto l891;goto l223;l891:;}l741(a);}goto l223;l443:;}}void cp_stop_chan(e*a){unsigned long l175=0;unsigned long l96=0;int c;{if( !(!a->f))goto l892;return;l892:;}outb(128,0);a->l35&=~2147483648UL; * (volatile unsigned long* )((a)->x+8)=a->l35;{c=0;l893:if(!(c<200))goto l913;goto l912;l446:c++;goto l893;l912:outb(128,0);goto l446;l913:;}{ if(!(a->l36&134217728))goto l584;{;a->l36&=~134217728; * (volatile unsigned long* )((a)->x+16)=a->l36;l175|=4194304;l96|=65536;}l584:;} outb(128,0);{if(!(( * (a)->l75)!=0))goto l653;{;{c=0;l911:if(!(c<4))goto l354;goto l353;l290:++c;goto l911;l353: * (volatile unsigned long* )& a->l42[c].w=2147483648UL|1073741824;goto l290;l354:;}l175|=2097152; l96|=16777216;}l653:;}outb(128,0); * (volatile unsigned long* )((a)-> x+0)=l96;outb(128,0);( * (a)->l82)=l175;outb(128,0); * (volatile unsigned long* )((a->d)->g+0)=513;outb(128,0);a->l70=~0;}void cp_start_chan(e*a,int l208,int l191,l211*l49,unsigned long l69){int c ;unsigned long l96=0;{if(!(!a->f))goto l583;return;l583:;}{if(!(l49))goto l531;{;a->l32=l49->l32;a->l42=l49->l42;{c=0;l464:if(!(c<64))goto l336 ;goto l335;l273:++c;goto l464;l335:a->l67[c]=l69+((char* )(a->l32+c)- (char* )l49);goto l273;l336:;}{c=0;l320:if(!(c<4))goto l288;goto l257 ;l305:++c;goto l320;l257:a->l154[c]=l69+((char* )(a->l42+c)-(char* )l49 );goto l305;l288:;};{c=0;l234:if(!(c<64))goto l546;goto l514;l906:++c ;goto l234;l514: * (volatile unsigned long* )&a->l32[c].l88=a->l67[(c +1)%64];goto l906;l546:;}{c=0;l462:if(!(c<4))goto l312;goto l351;l319 :++c;goto l462;l351: * (volatile unsigned long* )&a->l42[c].l88=a-> l154[(c+1)%4];goto l319;l312:;}}l531:;}{if(!(a->d->f==2))goto l265;{a ->l35|=12; * (volatile unsigned long* )((a)->x+8)=a->l35;a->l43= 2097152;}l265:;}a->l43|=574914560; * (volatile unsigned long* )((a)-> x+12)=a->l43;cp_set_phony(a,a->l52); * (volatile unsigned long* )((a)-> x+64)=32768|(1664/32-1);{if(!(a->f==2))goto l334;l165(a);l334:;}a-> l35|=2147483648UL; * (volatile unsigned long* )((a)->x+8)=a->l35; cp_set_nrzi(a,a->l145);cp_set_dir(a,a->v);cp_set_baud(a,a->y); cp_set_dtr(a,0);cp_set_rts(a,0);( * (a)->l75)=0;{c=0;l328:if(!(c<64))goto l902;goto l790;l297:++c;goto l328;l790:{{if(!(l49))goto l752;{a->l136 [c]=l49->l751[c];a->l207[c]=l69+((char* )a->l136[c]-(char* )l49); * ( volatile unsigned long* )&a->l32[c].w=1664<<16; * (volatile unsigned long* )&a->l32[c].l99=a->l207[c];}l752:;} * (volatile unsigned long* )& a->l32[c].t=0;}goto l297;l902:;}{c=0;l718:if(!(c<4))goto l696;goto l674;l595:++c;goto l718;l674:{{if(!(l49))goto l664;{a->l151[c]=l49-> l589[c];a->l197[c]=l69+((char* )a->l151[c]-(char* )l49); * (volatile unsigned long* )&a->l42[c].w=2147483648UL|1073741824; * (volatile unsigned long* )&a->l42[c].l99=a->l197[c];}l664:;} * (volatile unsigned long* )&a->l42[c].t=0;a->l79[c]=0;}goto l595;l696:;}{if(!( l49))goto l652;;l652:;}a->l28=0;a->l51=0;a->l45=a->l51; * (volatile unsigned long* )&a->l32[64-1].l88=a->l67[64-1];{if(!(l208))goto l640; {{if(!(!a->l144))goto l545;{a->l70&=~65536;}goto l538;l545:;{a->l70&= ~65536; * (volatile unsigned long* )((a)->x+84)=a->l70;}l538:;}l96|= 16777216;}l640:;}{if(!(l191))goto l528;{a->l36|=134217728; * ( volatile unsigned long* )((a)->x+16)=a->l36;{if(!(!a->l144))goto l517 ;{a->l70&=~2;}goto l513;l517:;{a->l70&=~2; * (volatile unsigned long* )((a)->x+84)=a->l70;}l513:;}l96|=65536;{if(!(a->f==2))goto l497;l(a-> d,a->l44,255);l497:;};( * (a)->l130)=a->l67[a->l28];( * (a)->l82)= 1048576; * (volatile unsigned long* )((a->d)->g+0)=513;}l528:;} * ( volatile unsigned long* )((a)->x+0)=l96;}void cp_stop_e1(e*a){{if(!(a ->f!=3||a->l133==0))goto l460;return;l460:;}a->l133=0;i(a,23,0);}void cp_start_e1(e*a){{if(!(a->f!=3||a->l133==1))goto l364;return;l364:;}a ->l133=1;i(a,23,16);}void cp_set_dtr(e*a,int m){a->l193=(m!=0);{if(!( a->l193))goto l361;a->l33|=1;goto l357;l361:;a->l33&=~1;l357:;}l(a->d ,a->l73,a->l33);}void cp_set_rts(e*a,int m){a->l218=(m!=0);{if(!(a-> l218))goto l327;a->l43|=1048576;goto l324;l327:;a->l43&=~1048576;l324 :;} * (volatile unsigned long* )((a)->x+12)=a->l43;}int cp_get_dsr(e* a){{if(!(a->f!=1))goto l318;return 0;l318:;}return(u(a->d,a->l81)&1)!= 0;}int cp_get_cd(e*a){{if(!(a->f==0))goto l315;return 0;l315:;}{if(!( a->d->f==2))goto l311;return(u(a->d,9)&2)==0;l311:;}{if(!(a->f==6))goto l308;{ * (volatile unsigned long* )((a->d->k+a->v)->x+4);return( * ( volatile unsigned long* )((a->d->k+a->v)->x+4)&2097152)==0;}goto l303 ;l308:;{ * (volatile unsigned long* )((a)->x+4);return( * (volatile unsigned long* )((a)->x+4)&2097152)==0;}l303:;}}int cp_get_cts(e*a){{ if(!(a->f!=1))goto l300;return 0;l300:;}return(u(a->d,a->l81)&8)!=0;} int cp_get_txcerr(e*a){{if(!(a->f!=1))goto l296;return 0;l296:;} return(u(a->d,a->l81)&16)!=0;}int cp_get_rxcerr(e*a){{if(!(a->f!=1))goto l283;return 0;l283:;}return(u(a->d,a->l81)&32)!=0;}void cp_set_baud(e *a,int y){int l54,l50;{if(!(a->f==2||((a->f==3)&&a->l31)))goto l240; {int l92=(y+32000)/64000*64;{if(!(a->l52))goto l236;l92=2048;l236:;}a ->l41&=~7;{if(!(!l92||l92>1024))goto l235;{a->l41|=0;a->y=2048000;} goto l232;l235:;{if(!(l92>512))goto l231;{a->l41|=2;a->y=1024000;} goto l229;l231:;{if(!(l92>256))goto l228;{a->l41|=3;a->y=512000;}goto l901;l228:;{if(!(l92>128))goto l880;{a->l41|=4;a->y=256000;}goto l837 ;l880:;{if(!(l92>64))goto l524;{a->l41|=5;a->y=128000;}goto l522;l524 :;{a->l41|=6;a->y=64000;}l522:;}l837:;}l901:;}l229:;}l232:;}l(a->d,a ->l62,a->l41);}goto l520;l240:;{if(!((a->f==3||a->f==6)&&!a->l52))goto l518;{unsigned long l558=a->j;int c;a->y=0;{c=0;l516:if(!(c<32))goto l512;goto l494;l515:++c;goto l516;l494:{if(!((l558>>c)&1))goto l500;a ->y+=64000;l500:;}goto l515;l512:;}}goto l478;l518:;{if(!(a->f==3&&a ->l52))goto l383;{a->y=2048000;}goto l347;l383:;a->y=y;l347:;}l478:;} l520:;}a->l35&=~55;{if(!(a->f==4||a->f==7||a->f==8))goto l385;{a->y=a ->d->l80;a->l35|=12;l50=l54=0;}goto l345;l385:;{if(!(!a->y||a->f!=1))goto l387;{a->l146=0;{if(!(a->f==1))goto l344;a->l53=0;l344:;}l50=l54=0;a ->l33|=4;}goto l389;l387:;{if(!(a->l146))goto l341;{a->l35|=54;l141(a ->d->l80/16,a->y,&l50,&l54);a->l33&=~4;}goto l340;l341:;{if(!(a->l53))goto l393;{a->l35|=55;l141(a->d->l80,a->y,&l50,&l54);a->l33&=~4;}goto l317 ;l393:;{a->l35|=48;l141(a->d->l80,a->y,&l50,&l54);a->l33&=~4;}l317:;} l340:;}l389:;}l345:;}l(a->d,a->l73,a->l33&~4); * (volatile unsigned long* )((a)->x+8)=a->l35; * (volatile unsigned long* )((a)->x+44)=l50 <<8|l54;l(a->d,a->l73,a->l33);{if(!(a->f==1&&a->l53))goto l415;a->l43 |=256;goto l416;l415:;a->l43&=~256;l416:;} * (volatile unsigned long* )((a)->x+12)=a->l43;}void cp_set_dpll(e*a,int m){{if(!(a->f!=1))goto l417;return;l417:;}a->l146=m&&(a->y!=0);cp_set_baud(a,a->y);}static void l173(e*a){unsigned char l113=0;{if(!(a->l31))goto l418;{l113|=1| 64;}goto l419;l418:;{if(!(a->d->l30&&a->l34))goto l313;{l113|=0;{if(! (!a->l46))goto l421;l113|=32;l421:;}}goto l422;l313:;{l113|=1|8;{if(! (!a->l46))goto l423;l113|=32;l423:;}}l422:;}l419:;}i(a,18,l113);} static void l206(e*a){unsigned char l204=0;{if(!(!a->l31&&a->l58))goto l445;l204|=2;l445:;}i(a,19,l204);}static void l162(e*a){unsigned char l43=64|4;{if(!(!a->l31))goto l285;{l43|=16;{if(!(a->l58))goto l447; l43|=1;l447:;}{if(!(a->l46))goto l448;l43|=8;l448:;}}l285:;}i(a,20, l43);}static void l227(e*a){unsigned char l36=64;{if(!(!a->l31))goto l449;{l36|=8;l36|=16;}l449:;}{if(!(a->l53&&!a->l38))goto l282;l36|=1; l282:;}i(a,26,l36);}static void l225(e*a){unsigned char l216=2;{if(!( a->d->l174&&a->l46))goto l457;{l216|=4|64;}l457:;}i(a,27,l216);} static void l202(e*a){unsigned char l143;{if(!(a->l31))goto l452;l143 =2;goto l453;l452:;{if(!(a->d->l30))goto l278;l143=32;goto l476;l278: ;l143=0;l476:;}l453:;}i(a,16,l143);}static void l599(e*a){unsigned char l170;{if(!(a->d->l30||a->l38))goto l477;l170=4|2;goto l254;l477: ;l170=4;l254:;}i(a,17,l170);}static void l226(e*a){unsigned char l107 ;l107=0;{if(!(a->l186))goto l479;l107|=16;l479:;}{if(!(a->l53))goto l480;l107|=8;l480:;}{if(!(u(a->d,8)>>a->p&16))goto l481;l107|=96;goto l482;l481:;l107|=64;l482:;}i(a,24,l107);}static int l198(e*a,int l87){ s*b=a->d;e*h;int j;{h=b->k;l483:if(!(hk+4))goto l485;goto l507; l484:++h;goto l483;l507:{j=1;l508:if(!(j<32))goto l890;goto l888;l509 :++j;goto l508;l888:{if(!(h->o.j[j]==l87&&h->o.l40[j]==a->p))goto l884 ;return 1;l884:;}goto l509;l890:;}goto l484;l485:;}return 0;}static int l586(e*a,int l87){return(a->o.j[l87]!=0);}static int l610(e*a,int l87){s*b=a->d;e*h;int j;{h=b->k;l882:if(!(hk+4))goto l872;goto l850;l874:++h;goto l882;l850:{j=1;l766:if(!(j<32))goto l755;goto l736 ;l764:++j;goto l766;l736:{if(!(h->o.j[j]==l87&&h->o.l40[j]==a->p))goto l735;{h->o.j[j]=0;return 1;}l735:;}goto l764;l755:;}goto l874;l872:;} return 0;}static int l686(e*a,int l87){{if(!(a->o.j[l87]))goto l731;{ a->o.j[l87]=0;return 1;}goto l729;l731:;return 0;l729:;}}static void l138(e*a){s*b=a->d;e*h;unsigned long l66;int c;{if(!(a->l31))goto l722 ;{l66=0;}goto l728;l722:;{if(!(a->l34))goto l724;{l66=~1;{h=b->k;l710 :if(!(hk+4))goto l702;goto l701;l709:++h;goto l710;l701:{if(!((h ->f==3||h->f==6)&&h->v==a->p))goto l697;l66&=~h->j;l697:;}goto l709; l702:;}{if(!(b->l30))goto l690;{c=1;l689:if(!(c<32))goto l682;goto l676;l678:++c;goto l689;l676:{if(!((l66>>c&1)&&l198(a,c)))goto l672; l66&=~(1<l30))goto l668;{l66=a->p?(b->k[0].j|b->k[1].j):0;}goto l667;l668:; l66=~a->j;l667:;}l671:;}l728:;}i(a,38,(unsigned char)(l66&254));i(a, 38+1,(unsigned char)(l66>>8));i(a,38+2,(unsigned char)(l66>>16));i(a, 38+3,(unsigned char)(l66>>24));;}void cp_set_monitor(e*a,int m){{if(! ((a->f!=3||!a->l38)&&(a->f==0||a->d->f!=2)))goto l666;return;l666:;}a ->l167=(m!=0);{if(!(a->d->f==2))goto l665;l68(a);goto l662;l665:;i(a, 172,m?112:0);l662:;}}void cp_set_dir(e*a,int v){s*b=a->d;e*h;int c;{ if(!(a->f!=3&&a->f!=6))goto l661;{a->v=a->p;l157(a);return;}l661:;}{ if(!(a->l31))goto l659;v=a->p;l659:;}{if(!(!a->l34))goto l656;v=(a->p ==1)?(b->l30?0:1):a->p;l656:;}{if(!((a->d->k+2)->f==3))goto l647;v&=3 ;goto l646;l647:;v&=1;l646:;}a->v=v;{h=b->k;l644:if(!(hk+4))goto l642;goto l641;l633:++h;goto l644;l641:{if(!((h->f==3||h->f==6)&&h!=a &&h->v==a->v))goto l637;a->j&=~h->j;l637:;}goto l633;l642:;}{if(!(a-> l34))goto l634;{{if(!(b->l30))goto l629;{c=1;l630:if(!(c<32))goto l369 ;goto l368;l733:++c;goto l630;l368:{if(!((a->j>>c&1)&&(l198(a,c)|| l586(a,c))))goto l737;a->j&=~(1<j);}void cp_set_unfram(e*a,int m){e*h; {if(!(a->f!=3))goto l738;return;l738:;}{if(!(!a->l34))goto l739;a-> l31=0;goto l740;l739:;a->l31=m!=0;l740:;}{if(!(a->l31))goto l743;a-> l26|=32;goto l742;l743:;a->l26&=~32;l742:;}l(a->d,a->l64,a->l26);{if( !(a->l31))goto l745;{cp_set_dir(a,a->p);{h=a->d->k;l758:if(!(hd-> k+4))goto l760;goto l761;l759:++h;goto l758;l761:{if(!((h->f==3||h->f ==6)&&h->v==a->p&&h!=a))goto l762;cp_set_dir(h,h->p);l762:;}goto l759 ;l760:;}}goto l763;l745:;{{h=a->d->k;l381:if(!(hd->k+4))goto l382 ;goto l767;l768:++h;goto l381;l767:l157(h);goto l768;l382:;}}l763:;} l173(a);l206(a);l162(a);l227(a);l225(a);l202(a);l138(a);cp_set_baud(a ,a->y);{if(!(a->l31))goto l779;cp_set_gsyn(a,a->l61);l779:;}}void cp_set_lloop(e*a,int m){{if(!((a->f==1&&a->y==0)||a->f==6))goto l780; return;l780:;}a->l53=(m!=0);{if(!(a->f==3))goto l781;{{if(!(a->l53))goto l390;{a->l26|=16;{if(!(a->l38))goto l783;i(a,168,64);l783:;}}goto l391 ;l390:;{a->l26&=~16;{if(!(a->l38))goto l785;i(a,168,0);l785:;}}l391:; }l(a->d,a->l64,a->l26);l227(a);l226(a);}goto l392;l781:;{if(!(a->f==2 ))goto l787;{unsigned char l203=1|4;{if(!(a->l53))goto l788;l203|=64; l788:;}l106(a,16,l203);}goto l801;l787:;{if(!(a->d->f==2))goto l802;{ l68(a);}goto l803;l802:;cp_set_baud(a,a->y);l803:;}l801:;}l392:;}} void cp_set_nrzi(e*a,int m){{if(!(a->f!=1))goto l804;return;l804:;}a ->l145=m?1:0;{if(!(a->l145))goto l805;a->l35|=2097152;goto l402;l805: ;a->l35&=~2097152;l402:;} * (volatile unsigned long* )((a)->x+8)=a-> l35;}void cp_set_invtxc(e*a,int m){{if(!(a->f!=1))goto l807;return; l807:;}a->l164=m?1:0;{if(!(a->l164))goto l808;a->l33|=2;goto l809; l808:;a->l33&=~2;l809:;}l(a->d,a->l73,a->l33);}void cp_set_invrxc(e*a ,int m){{if(!(a->f!=1))goto l810;return;l810:;}a->l177=m?1:0;{if(!(a ->l177))goto l410;a->l33|=8;goto l823;l410:;a->l33&=~8;l823:;}l(a->d, a->l73,a->l33);}int cp_get_rloop(e*a){{if(!(a->f==2))goto l839;return (u(a->d,a->l44)&16)!=0;l839:;}{if(!(a->f!=0&&a->d->f==2))goto l835; return a->l156;l835:;}return 0;}int cp_get_cable(e*a){{if(!(a->f==1))goto l841;switch(u(a->d,a->l81)&70){case 0:return 3;case 2:return 2;case 4 :return 1;case 6:return 0;case 10:return 4;default:return 9;}goto l420 ;l841:;{if(!(a->f==3))goto l838;return(u(a->d,8)>>a->p&16)?11:10;goto l844;l838:;{if(!(a->f==4))goto l840;return 10;goto l846;l840:;return 0 ;l846:;}l844:;}l420:;}}void cp_set_rloop(e*a,int m){{if(!(a->f==0||a ->d->f!=2))goto l853;return;l853:;}a->l156=m;l68(a);}void cp_set_ber( e*a,int m){{if(!(a->f==0||a->d->f!=2))goto l854;return;l854:;}a->l178 =m;l68(a);}void cp_set_losais(e*a,int m){{if(!(a->f==0||a->d->f!=2))goto l865;return;l865:;}a->l122=m;{if(!(a->l122==0&&a->l86))goto l866;a-> l86=0;l866:;}l68(a);}void cp_set_cablen(e*a,int m){{if(!(a->f==0||a-> f==4||a->d->f!=2))goto l867;return;l867:;}a->l169=m;l68(a);}void cp_led(s*b,int m){{if(!(m))goto l868;b->l125|=16;goto l869;l868:;b-> l125&=~16;l869:;}l(b,0,b->l125);}int cp_get_lq(e*a){unsigned char l76 ,l63,l59;static int l114[]={0,95,195,285};int c;{if(!(a->f!=2))goto l870;return 0;l870:;}l76=u(a->d,a->l44)&12;l63=u(a->d,a->l44)&12;{c=1 ;l871:if(!(c<20))goto l440;goto l883;l877:++c;goto l871;l883:l63=u(a ->d,a->l44)&12;goto l877;l440:;}l59=u(a->d,a->l44)&12;{c=1;l899:if(!( c<20))goto l896;goto l897;l895:++c;goto l899;l897:l59=u(a->d,a->l44)& 12;goto l895;l896:;}{if(!(l76<=l63&&l63<=l59))goto l898;return l114[ l63>>2];l898:;}{if(!(l63<=l59&&l59<=l76))goto l904;return l114[l59>>2 ];l904:;}{if(!(l59<=l76&&l76<=l63))goto l900;return l114[l76>>2];l900 :;}{if(!(l76<=l59&&l59<=l63))goto l909;return l114[l59>>2];l909:;}{if (!(l59<=l63&&l63<=l76))goto l454;return l114[l63>>2];l454:;}return l114[l76>>2];}static void l141(long l199,long y,int*l50,int*l54){{ * l50=0;l582:if(!(1))goto l352;goto l654;l530:++ *l50;goto l582;l654:{ * l54=(((2*l199/y)>> *l50)+1)/2-1;{if(!( *l54<0|| *l50>15))goto l289;{ * l50=0; *l54=0;return;}l289:;}{if(!( *l54<=63))goto l258;return;l258:; }}goto l530;l352:;}}static void l165(e*a){{if(!(a->f!=2))goto l910; return;l910:;}cp_set_gsyn(a,a->l61);cp_set_scrambler(a,a->l134);l106( a,16,(32|64));l106(a,16,1|4);l106(a,17,0);l106(a,20,96);cp_set_lloop( a,a->l53);}static void l210(e*a){int c;a->l26&=~128;l(a->d,a->l64,a-> l26);cp_set_gsyn(a,a->l61);cp_set_unfram(a,a->l31);cp_set_phony(a,a-> l52);cp_set_lloop(a,a->l53);cp_set_monitor(a,a->l167);a->l133=0;i(a, 22,0);i(a,23,0);i(a,21,0);i(a,25,0);i(a,32,155);i(a,33,223);i(a,42, 255);{if(!(a->l38))goto l721;{i(a,170,0);i(a,29,0);i(a,172,0);i(a,160 ,0);i(a,161,0);i(a,162,0);i(a,163,0);i(a,164,0);i(a,165,0);i(a,166,0); i(a,167,0);i(a,28,0);i(a,80,0);i(a,81,0);i(a,82,0);i(a,83,0);i(a,84,0 );i(a,85,0);i(a,86,0);i(a,87,0);i(a,176,0);i(a,177,0);i(a,178,0);i(a, 179,0);i(a,180,0);i(a,181,0);i(a,182,0);i(a,183,0);i(a,184,0);i(a,185 ,0);i(a,186,0);i(a,187,0);i(a,9,0);i(a,10,0);i(a,11,0);i(a,12,0);i(a, 13,0);i(a,14,0);i(a,173,0);i(a,174,0);i(a,175,0);i(a,188,0);i(a,189,0 );i(a,190,0);i(a,191,0);l(a->d,11,255);}l721:;}i(a,64,11);{c=1;l321: if(!(c<16))goto l560;goto l627;l572:++c;goto l321;l627:i(a,(unsigned char)(64+c),255);goto l572;l560:;}{if(!(a->l38))goto l797;{i(a,170, 128);i(a,170,0);}goto l720;l797:;{i(a,27,2|8);i(a,27,2);}l720:;}{if(! (a->l38))goto l675;{i(a,29,2|1);i(a,29,0);}goto l628;l675:;{i(a,27,2| 16);i(a,27,2);}l628:;}l90(a,6,255);l90(a,7,255);l90(a,8,255);a->l26|= 128;l(a->d,a->l64,a->l26);}void cp_set_mux(s*b,int l183){e*a;int l555 =(l183&&!b->l30);{if(!(b->f!=5&&b->f!=10&&b->f!=11&&b->f!=9))goto l581 ;return;l581:;};switch(l183){case 0:case 2:b->l30=l183;break;default: b->l30=1;}{if(!(!b->l30))goto l609;l195(b,0);l609:;}{if(!(b->l30))goto l596;b->l116|=1;goto l566;l596:;b->l116&=~1;l566:;}l(b,8,b->l116);{if (!(!b->k->l34))goto l559;{cp_set_dir(b->k+1,b->k[1].v);}l559:;}{a=b-> k;l272:if(!(ak+4))goto l256;goto l287;l304:++a;goto l272;l287:{if (!(a->f==3))goto l280;{l173(a);l202(a);l599(a);cp_set_ts(a,a->j);} goto l237;l280:;{if(!(a->f==6))goto l233;{cp_set_ts(a,a->j);}l233:;} l237:;}goto l304;l256:;}{if(!(l555))goto l230;{{if(!(b->l30!=2))goto l244;l168(b);l244:;}cp_set_ts(b->k,b->k->j);}l230:;}{if(!(b->l30))goto l245;cp_set_gsyn(b->k,b->k->l61);l245:;}}void cp_set_dxc(e*a,l72*l149 ){l179(a,l149);}static void l179(e*a,l72*l149){s*b=a->d;e*h;int c;{if (!(a->f!=3||!a->l34))goto l247;return;l247:;}{if(!(!b->l30))goto l248 ;memset(&a->o,0,sizeof(a->o));goto l249;l248:;memcpy(&a->o,l149, sizeof(a->o));l249:;}a->o.j[0]=0;{if(!(!a->l46))goto l250;a->o.j[16]= 0;l250:;}{c=1;l251:if(!(c<32))goto l252;goto l253;l894:++c;goto l251; l253:{if(!(a->o.j[c]&=31))goto l688;{{if(!((b->k+2)->f!=3))goto l680; a->o.l40[c]&=1;goto l677;l680:;a->o.l40[c]&=3;l677:;}{h=b->k;l673:if( !(hk+4))goto l152;goto l670;l209:++h;goto l673;l670:{{if(!(h->f!= 3))goto l663;goto l209;l663:;}{if(!(h->p==a->o.l40[c]&&a->o.j[c]==16 &&!h->l46))goto l660;{a->o.j[c]=0;goto l152;}l660:;}{if(!((h->v==a->o .l40[c]&&((h->j>>a->o.j[c])&1))||(h->v==a->p&&((h->j>>c)&1))))goto l658;{a->o.j[c]=0;goto l152;}l658:;}{if(!(h->p==a->p))goto l611;goto l152;l611:;}}goto l209;l152:;}}l688:;}goto l894;l252:;}l(b,8,b->l116& ~1);l(b,28,a->p<<5);l(b,31,139);{c=1;l606:if(!(c<32))goto l602;goto l601;l605:++c;goto l606;l601:l(b,31,(!a->o.j[c])?141:(a->o.l40[c]<<5)| a->o.j[c]);goto l605;l602:;}l(b,8,b->l116);{c=0;l600:if(!(c<4))goto l598;goto l597;l196:c++;goto l600;l597:{{if(!((b->k+c)->f!=3))goto l594;goto l196;l594:;}l138(b->k+c);}goto l196;l598:;}}void cp_set_ts( e*a,unsigned long j){s*b=a->d;e*h;int c;{if(!(a->f!=3&&a->f!=6))goto l574;return;l574:;}a->j=j&4294967294UL;{if(!(b->k[a->v].l31||b->k[a-> v].f!=3))goto l573;a->j=0;l573:;}{if(!(!b->k[a->v].l46))goto l570;a-> j&=~(1<<16);l570:;}{h=b->k;l569:if(!(hk+4))goto l567;goto l564; l568:++h;goto l569;l564:{if(!((h->f==3||h->f==6)&&h->p!=a->p&&h->v==a ->v))goto l562;a->j&=~h->j;l562:;}goto l568;l567:;}{if(!(b->l30&&b->k ->l34))goto l561;{c=1;l557:if(!(c<32))goto l525;goto l380;l526:++c; goto l557;l380:{if(!((a->j>>c&1)))goto l490;{l610(b->k+a->v,c);l686(b ->k+a->v,c);}l490:;}goto l526;l525:;}l561:;}{if(!((a->j&65534)==0&&a ->l31!=0))goto l348;a->l33|=16;goto l466;l348:;a->l33&=~16;l466:;}l(a ->d,a->l73,a->l33);;{if(!(a->l38))goto l377;{int c;int j;{if(!(a->l31 ))goto l378;j=4294967295UL;goto l379;l378:;j=a->j;l379:;}l(a->d,9,a-> p<<6);{c=1;l395:if(!(c<32))goto l323;goto l411;l396:++c;goto l395; l411:{{l338:if(!(u(a->d,0)&1))goto l413;{outb(128,0);}goto l338;l413: ;}l(a->d,10,(unsigned char)(j>>c&1));}goto l396;l323:;}{l407:if(!(u(a ->d,0)&1))goto l442;{outb(128,0);}goto l407;l442:;}l(a->d,10,( unsigned char)j&1);{c=1;l325:if(!(c<32))goto l426;goto l412;l425:++c; goto l325;l412:{{l275:if(!(u(a->d,0)&1))goto l492;{outb(128,0);}goto l275;l492:;}l(a->d,10,(unsigned char)(j>>c&1));}goto l425;l426:;}{ l263:if(!(u(a->d,0)&1))goto l444;{outb(128,0);}goto l263;l444:;}l(a-> d,10,(unsigned char)j&1);}l377:;}{if(!(a->f==3))goto l427;{i(a,34,( unsigned char)(a->j&254));i(a,34+1,(unsigned char)(a->j>>8));i(a,34+2 ,(unsigned char)(a->j>>16));i(a,34+3,(unsigned char)(a->j>>24));i(a, 43,(unsigned char)(a->j&254));i(a,43+1,(unsigned char)(a->j>>8));i(a, 43+2,(unsigned char)(a->j>>16));i(a,43+3,(unsigned char)(a->j>>24));} l427:;}{if(!(!a->l34))goto l473;{l138(b->k+0);l138(b->k+1);}goto l294 ;l473:;{{if(!(b->l30!=2))goto l456;l168(b);l456:;}{h=b->k;l487:if(!(h k+4))goto l489;goto l455;l471:h++;goto l487;l455:l179(h,&h->o); goto l471;l489:;}}l294:;}cp_set_baud(a,a->y);}static void l168(s*b){e *a;unsigned long j[4]={0,0,0,0},l159[2]={0,0};l72 o[4];int c;{if(!(! b->l30||!b->k->l34))goto l474;return;l474:;}{a=b->k;l475:if(!(ak+ 4))goto l246;goto l486;l190:a++;goto l475;l486:{{if(!(a->f!=3&&a->f!= 6))goto l496;goto l190;l496:;}j[a->v]|=a->j;{if(!(!a->l46))goto l488; j[a->p]|=(1<<16);l488:;}}goto l190;l246:;}l159[0]=~(j[0]|j[1]);l159[1 ]=~(j[2]|j[3]);{c=1;l495:if(!(c<32))goto l491;goto l505;l503:c++;goto l495;l505:{{if(!((l159[0]>>c)&1))goto l506;{o[0].j[c]=(unsigned char)c ;o[1].j[c]=(unsigned char)c;o[0].l40[c]=1;o[1].l40[c]=0;}goto l799; l506:;{o[0].j[c]=0;o[1].j[c]=0;o[0].l40[c]=0;o[1].l40[c]=0;}l799:;}{ if(!((l159[1]>>c)&1))goto l501;{o[2].j[c]=(unsigned char)c;o[3].j[c]= (unsigned char)c;o[2].l40[c]=3;o[3].l40[c]=2;}goto l502;l501:;{o[2].j [c]=0;o[3].j[c]=0;o[2].l40[c]=0;o[3].l40[c]=0;}l502:;}}goto l503;l491 :;}memcpy(&b->k[0].o,o+0,sizeof(l72));memcpy(&b->k[1].o,o+1,sizeof( l72));memcpy(&b->k[2].o,o+2,sizeof(l72));memcpy(&b->k[3].o,o+3,sizeof (l72));}void cp_set_higain(e*a,int m){{if(!(a->f!=3))goto l770;return ;l770:;}a->l186=(m!=0);l226(a);}void cp_set_use16(e*a,int m){e*h;{if( !(a->f!=3))goto l504;return;l504:;}a->l46=(m!=0);l162(a);l173(a);{h=a ->d->k;l822:if(!(hd->k+4))goto l842;goto l813;l821:++h;goto l822; l813:{if(!(h->v==a->p))goto l830;cp_set_ts(h,h->j);l830:;}goto l821; l842:;}}void l195(s*b,int m){e*h;{if(!(!b->k->l34))goto l798;return; l798:;}b->l174=(m&&b->l30)?1:0;{h=b->k;l784:if(!(hk+4))goto l782; goto l778;l220:++h;goto l784;l778:{{if(!(h->f!=3))goto l551;goto l220 ;l551:;}cp_set_use16(h,m?m:h->l46);l225(h);}goto l220;l782:;}}void cp_set_phony(e*a,int m){{if(!(a->f==3))goto l679;a->l52=(m!=0);l679:; }{if(!(a->l52))goto l550;a->v=a->p;l550:;}cp_set_dir(a,a->v);a->l36|= 1310728;{if(!(a->l52))goto l681;{a->l26|=64;a->l36|=4194305;}goto l548 ;l681:;{a->l26&=~64;a->l36&=~4194305;}l548:;} * (volatile unsigned long* )((a)->x+16)=a->l36;{if(!(a->f==3))goto l683;{l(a->d,a->l64,a-> l26);cp_set_baud(a,a->y);cp_set_scrambler(a,a->l134);}l683:;}}void cp_set_crc4(e*a,int m){{if(!(a->f!=3))goto l684;return;l684:;}a->l58= (m!=0);l162(a);l206(a);}void cp_set_scrambler(e*a,int m){{if(!(a->f!= 2&&!(a->f==3&&a->l38)))goto l685;return;l685:;}{if(!(a->l38&&(a->l52 ||!a->l31)))goto l543;m=0;l543:;}a->l134=(m!=0);{if(!(a->l134))goto l687;a->l41|=16;goto l542;l687:;a->l41&=~16;l542:;}l(a->d,a->l62,a-> l41);}void cp_set_gsyn(e*a,int l78){switch(a->f){case 3:{unsigned char l26=0;e*h;s*b=a->d;{if(!(a->l31&&l78!=0))goto l540;l78=1;l540:;} switch(l78){default:l78=0;l26=0;break;case 1:l78=2+a->p;l26=1+a->p; break;case 2:l26=1;break;case 3:l26=2;break;case 4:l26=3;{if(!(b->k[2 ].f!=3))goto l691;return;l691:;}break;case 5:l26=4;{if(!(b->k[3].f!=3 ))goto l692;return;l692:;}break;}{h=b->k;l693:if(!(hk+4))goto l536 ;goto l535;l212:h++;goto l693;l535:{{if(!(h->f!=3||(!b->l30&&h!=a)))goto l533;goto l212;l533:;}l(b,h->l64,h->l26&~128);h->l26&=~7;h->l26|=l26; h->l61=(unsigned char)l78;l(b,h->l64,h->l26);}goto l212;l536:;}}break ;case 2:{if(!(l78))goto l699;{a->l61=1;a->l41|=8;}goto l703;l699:;{a ->l61=0;a->l41&=~8;}l703:;}l(a->d,a->l62,a->l41);break;case 4:case 7: case 8:{if(!(l78))goto l704;a->l61=1;goto l705;l704:;a->l61=0;l705:;} l68(a);break;}}void cp_register_transmit(e*a,void( *l85)(e* ,void* , int)){a->l187=l85;}void cp_register_receive(e*a,void( *l85)(e* , unsigned char* ,int)){a->l171=l85;}void cp_register_error(e*a,void( * l85)(e* ,int)){a->l65=l85;}static void l188(e*a){unsigned char l77, l150;unsigned l47,l153,l58,l182,l111,l131;++a->l55;{if(!(!a->l161&&a ->l55<=1))goto l523;return;l523:;}a->t=0;l77=l90(a,6,255);l131=0;{if( !(l77&2))goto l707;a->t|=64;l707:;}{if(!(l77&8))goto l708;a->t|=8; l708:;}l47=(((short)(l57(a,0))<<8)|(l57(a,1)));l153=0;l58=0;l182=0;{ if(!(!a->l31))goto l519;{l150=l57(a,30);{if(!(!a->l46&&(l77&128)))goto l711;a->t|=256;l711:;}{if(!(!a->l46&&(l77&64)))goto l712;a->t|=512; l712:;}{if(!(l77&4))goto l713;a->t|=2;l713:;}{if(!(l150&4))goto l717; {a->t|=32;++l131;}l717:;}{if(!((!a->l46&&(l150&2))||(a->l58&&(l150&1))))goto l511;{a->t|=1024;++l131;}l511:;}l153=(((short)(l57(a,2))<<4&4032)|( l57(a,4))>>2);l58=(((short)(l57(a,2))<<8&768)|(l57(a,3)));l182=((( short)(l57(a,4))<<8&768)|(l57(a,5)));{if(!((a->d->l30||a->l38)&&(l77& 16)))goto l719;++a->n.l120;l719:;}}l519:;}{if(!(a->t&64))goto l510;a ->t=64;goto l723;l510:;{if(!(a->t&8))goto l499;a->t=8;goto l725;l499: ;{if(!(a->t&32))goto l498;a->t=32;goto l727;l498:;{if(!(a->t&1024))goto l493;a->t&=~(512|256);l493:;}l727:;}l725:;}l723:;}{if(!(!a->t))goto l470;a->t=1;l470:;}a->n.l47+=l47;a->n.l112+=l153;{if(!(a->l58))goto l732;{a->n.l121+=l58;a->n.l103+=l182;}l732:;}l111=l153;{if(!(a->l58))goto l748;l111+=l58;l748:;}{if(!(l77&(8|2)))goto l744;++a->n.l101;goto l374 ;l744:;{{if(!(l47))goto l746;++a->n.l89;l746:;}{if(!(l111||l131||((a ->d->l30||a->l38)&&(l77&16))))goto l747;++a->n.l117;l747:;}{if(!(l131 ))goto l753;++a->n.l110;l753:;}{if(!(l47>=2048||l111>=832))goto l749; ++a->n.l119;goto l754;l749:;{{if(!(l111>1))goto l756;++a->n.l108;l756 :;}++a->l105;a->l109+=l47+l111;}l754:;}}l374:;}{if(!(a->l55%60==0))goto l757;{{if(!(a->l109>a->l105*2048/1000))goto l773;++a->n.l100;l773:;}a ->l105=0;a->l109=0;}l757:;}{if(!(a->l55>15*60))goto l769;{int c;{c=47 ;l384:if(!(c>0))goto l772;goto l776;l771:--c;goto l384;l776:a->l118[c ]=a->l118[c-1];goto l771;l772:;}a->l118[0]=a->n;a->l29.l47+=a->n.l47; a->l29.l112+=a->n.l112;a->l29.l121+=a->n.l121;a->l29.l103+=a->n.l103; a->l29.l101+=a->n.l101;a->l29.l89+=a->n.l89;a->l29.l117+=a->n.l117;a ->l29.l108+=a->n.l108;a->l29.l119+=a->n.l119;a->l29.l110+=a->n.l110;a ->l29.l120+=a->n.l120;a->l29.l100+=a->n.l100;a->n.l47=0;a->n.l112=0;a ->n.l121=0;a->n.l103=0;a->n.l101=0;a->n.l89=0;a->n.l117=0;a->n.l108=0 ;a->n.l119=0;a->n.l110=0;a->n.l120=0;a->n.l100=0;a->l161+=a->l55;a-> l55=0;}l769:;}}void cp_g703_timer(e*a){unsigned char l84;int l158;++a ->l55;{if(!(!a->l161&&a->l55<=1))goto l386;return;l386:;}a->t=0;l84=u (a->d,a->l44);l(a->d,a->l44,l84);l158=cp_get_cd(a);{if(!(l84&1))goto l775;++a->n.l47;l775:;}{if(!(!l158))goto l777;a->t|=64;l777:;}{if(!( l84&2))goto l388;a->t|=4096;l388:;}{if(!(l84&16))goto l789;a->t|=2048 ;l789:;}{if(!(!a->t))goto l394;a->t=1;l394:;}{if(!(!l158||(l84&16)))goto l791;++a->n.l101;goto l792;l791:;{{if(!(l84&1))goto l793;++a->n.l89; l793:;}++a->l105;{if(!(l158&&(l84&1)))goto l794;++a->l109;l794:;}} l792:;}{if(!(a->l55/60==0))goto l795;{{if(!(a->l109*2>a->l105))goto l796;++a->n.l100;l796:;}a->l105=0;a->l109=0;}l795:;}{if(!(a->l55>15* 60))goto l398;{int c;{c=47;l800:if(!(c>0))goto l812;goto l408;l811:-- c;goto l800;l408:a->l118[c]=a->l118[c-1];goto l811;l812:;}a->l118[0]= a->n;a->l29.l47+=a->n.l47;a->l29.l112+=a->n.l112;a->l29.l121+=a->n. l121;a->l29.l103+=a->n.l103;a->l29.l101+=a->n.l101;a->l29.l89+=a->n. l89;a->l29.l117+=a->n.l117;a->l29.l108+=a->n.l108;a->l29.l119+=a->n. l119;a->l29.l110+=a->n.l110;a->l29.l120+=a->n.l120;a->l29.l100+=a->n. l100;memset(&a->n,0,sizeof(a->n));a->l161+=a->l55;a->l55=0;}l398:;}} void cp_e1_timer(e*a){{if(!(a->f==3&&(l90(a,7,255)&16)))goto l814;{; l188(a);}l814:;}}void cp_e3_timer(e*a){unsigned char l126;unsigned long l140;{if(!(a->d->f!=2))goto l815;return;l815:;}l(a->d,11,0);l140 =u(a->d,11);l140|=u(a->d,12)<<8;l140|=u(a->d,13)<<16;l126=u(a->d,9);l (a->d,9,a->l669|1);{if(!(l126&2))goto l816;{{if(!(a->l122&&(a->l95&2)!= 0&&!a->l86))goto l817;{a->l86=1;l68(a);}l817:;}a->l95=2;}goto l819; l816:;{{if(!(a->l122&&(a->l95&2)==0&&a->l86))goto l409;{a->l86=0;l68( a);}l409:;}a->l95=0;}l819:;}{if(!(l126&1))goto l849;a->l95|=4;l849:;} {if(!(l126&4&&!(l126&2)))goto l843;a->l95|=8;l843:;}{if(!(!(a->l95&2)))goto l851;a->l142+=l140;l851:;}a->l148++;{if(!(a->l148>5*60*15))goto l845; {int c;{c=47;l439:if(!(c>0))goto l848;goto l873;l847:c--;goto l439; l873:a->l184[c]=a->l184[c-1];goto l847;l848:;}a->l184[0]=a->l142;a-> l621+=a->l142;a->l616+=a->l148/5;a->l142=0;a->l148=0;}l845:;}}static void l575(e*a){int w=(( * (volatile unsigned long* )&a->l32[a->l28].t )>>16&8191);unsigned char l127;{if(!(w>0))goto l424;l127=a->l136[a-> l28][--w];goto l852;l424:;l127=0;l852:;};{if(!(l127&64))goto l905;{++ a->l200;{if(!(a->l65))goto l881;a->l65(a,4);l881:;}}goto l875;l905:;{ if(!(!(l127&128)))goto l876;{++a->l591;{if(!(a->l65))goto l908;a->l65 (a,1);l908:;}}goto l438;l876:;{if(!(!a->l52&&!(l127&32)))goto l879;{ ++a->l556;{if(!(a->l65))goto l450;a->l65(a,2);l450:;}}goto l903;l879: ;{a->l571+=w;++a->l592;{if(!(a->l171))goto l367;a->l171(a,a->l136[a-> l28],w);l367:;}}l903:;}l438:;}l875:;} * (volatile unsigned long* )&a ->l32[a->l28].t=0; * (volatile unsigned long* )&a->l32[a->l28].l88=a ->l67[a->l28]; * (volatile unsigned long* )&a->l32[(a->l28+64-1)%64]. l88=a->l67[a->l28];a->l28=++a->l28%64;}static void l820(e*a){int l205 =0;int l201=0;{if(!(!a->l32))goto l363;return;l363:;}++a->l635;{if(!( * (volatile unsigned long* )&a->l32[(a->l28+64-1)%64].t&1073741824))goto l362;l205++;l362:;}{l360:if(!(( * (volatile unsigned long* )&a->l32[a ->l28].t&1073741824)&&( * (volatile unsigned long* )&a->l67[a->l28]!= * (volatile unsigned long* )((a)->l102))))goto l358;{l575(a);l201++; }goto l360;l358:;}{if(!(l205))goto l356;{{if(!(l201<64-1))goto l355;{ {l350:if(!(( * (volatile unsigned long* )&a->l67[a->l28]!= * ( volatile unsigned long* )((a)->l102))))goto l349;{ * (volatile unsigned long* )&a->l32[a->l28].t=0; * (volatile unsigned long* )&a-> l32[a->l28].l88=a->l67[a->l28]; * (volatile unsigned long* )&a->l32[( a->l28+64-1)%64].l88=a->l67[a->l28];a->l28=++a->l28%64;}goto l350; l349:;}}l355:;}++a->l200;{if(!(a->l65))goto l346;a->l65(a,5);l346:;}} l356:;}}static void l715(e*a){int w=(( * (volatile unsigned long* )&a ->l42[a->l51].w)>>16&8191);void*l79=a->l79[a->l51];;a->l51=++a->l51%4 ;{if(!(a->l51!=a->l45))goto l343;{int l655=(( * (a)->l132)-a->l154[0] )/sizeof(l128);{if(!(l655==(a->l51+4-1)%4))goto l342;{; * (volatile unsigned long* )((a->d)->g+0)=1024<p;outb(128,0);}l342:;}}l343:;} {if(!(w>0))goto l339;{a->l620+=w;++a->l301;{if(!(a->l187))goto l337;a ->l187(a,l79,w);l337:;}}l339:;}}static void l268(e*a){unsigned long l91;int l219=0;++a->l614;{l185:if(!((l91= * (volatile unsigned long* )& a->l97[a->l104])!=0))goto l332;{ * (volatile unsigned long* )&a->l97[ a->l104]=0;a->l104=++a->l104%128;{if(!(!(l91&1073741824)))goto l331;{ ;goto l185;}l331:;}{if(!(l91&33554432))goto l329;{;{if(!(l91&65536))goto l326;++l219;l326:;}goto l185;}l329:;};{if(!(a->l51!=a->l45&&( * ( volatile unsigned long* )&a->l42[a->l51].t&1073741824)))goto l322; l715(a);l322:;}}goto l185;l332:;}{if(!(l219))goto l316;{ * (volatile unsigned long* )((a)->x+0)=16777216;++a->l261;{if(!(a->l65))goto l314 ;a->l65(a,3);l314:;}}l316:;}}static void l907(s*b){unsigned long l91; e*a;{l221:if(!((l91= * (volatile unsigned long* )&b->l94[b->l115])!=0 ))goto l310;{ * (volatile unsigned long* )&b->l94[b->l115]=0;b->l115= ++b->l115%128;{if(!((l91&3489660928UL)!=3489660928UL))goto l309;{; goto l221;}l309:;}{a=b->k;l307:if(!(ak+4))goto l302;goto l299; l306:++a;goto l307;l299:{if(!(a->f==3&&(l90(a,7,255)&16)))goto l298;{ ;l188(a);}l298:;}goto l306;l302:;}}goto l221;l310:;}}void cp_handle_interrupt(s*b){e*a;++b->l563;{if(!( * (volatile unsigned long* )&b->l94[b->l115]))goto l292;l907(b);l292:;}{a=b->k;l291:if(!(a k+4))goto l284;goto l281;l286:++a;goto l291;l281:{{if(!(~(a->l70)))goto l279;{{if(!( * (volatile unsigned long* )&a->l97[a->l104]))goto l277; l268(a);l277:;}{if(!( * (volatile unsigned long* )&a->l67[a->l28]!= * (volatile unsigned long* )((a)->l102)))goto l271;l820(a);l271:;}}l279 :;}}goto l286;l284:;}}int cp_interrupt(s*b){int l215=0;{l276:if(!( cp_interrupt_poll(b,1)!=0))goto l269;{{if(!(++l215>1000))goto l242; return-1;l242:;}cp_handle_interrupt(b);}goto l276;l269:;}return l215; }int cp_interrupt_poll(s*b,int l217){unsigned long l192= * (volatile unsigned long* )((b)->g+4);;{if(!(!l192))goto l243;return 0;l243:;}{ if(!(l217))goto l825; * (volatile unsigned long* )((b)->g+4)=l192; l825:;}return 1;}void cp_enable_interrupt(s*b,int m){e*a;{a=b->k;l886 :if(!(ak+4))goto l554;goto l836;l878:++a;goto l886;l836:{if(!(a-> f))goto l657;{ * (volatile unsigned long* )((a)->x+84)=m?a->l70:~0;a ->l144=m?1:0;}l657:;}goto l878;l554:;}}int cp_transmit_space(e*a){ return(4+a->l51-a->l45-1)%4;}int cp_send_packet(e*a,unsigned char*l99 ,int w,void*l79){{if(!(!cp_transmit_space(a)))goto l714;return-1;l714 :;}{if(!(w<=0||w>1664-1))goto l706;return-2;l706:;}a->l79[a->l45]=l79 ;{if(!(l99!=a->l151[a->l45]))goto l698;memcpy(a->l151[a->l45],l99,w); l698:;} * (volatile unsigned long* )&a->l42[a->l45].t=0;outb(128,0); * (volatile unsigned long* )&a->l42[a->l45].w=2147483648UL|1073741824|w <<16;{if(!(a->l52))goto l694; * (volatile unsigned long* )&a->l42[a-> l45].w|=536870912;l694:;}outb(128,0); * (volatile unsigned long* )&a ->l42[(a->l45+4-1)%4].w&=~1073741824;outb(128,0);;{if(!(( * (a)->l75)== 0))goto l645;{;( * (a)->l75)=a->l154[a->l51];outb(128,0);( * (a)->l82 )=524288;outb(128,0); * (volatile unsigned long* )((a->d)->g+0)=513;} goto l650;l645:;{if(!(a->l51==a->l45))goto l648;{; * (volatile unsigned long* )((a->d)->g+0)=1024<p;}l648:;}l650:;}outb(128,0);a ->l45=(a->l45+1)%4;return 0;} Index: head/sys/dev/cp/if_cp.c =================================================================== --- head/sys/dev/cp/if_cp.c (revision 359180) +++ head/sys/dev/cp/if_cp.c (revision 359181) @@ -1,2269 +1,2269 @@ /*- * Cronyx-Tau-PCI adapter driver for FreeBSD. * Supports PPP/HDLC, Cisco/HDLC and FrameRelay protocol in synchronous mode, * and asynchronous channels with full modem control. * Keepalive protocol implemented in both Cisco and PPP modes. * * Copyright (C) 1999-2004 Cronyx Engineering. * Author: Kurakin Roman, * * Copyright (C) 1999-2002 Cronyx Engineering. * Author: Serge Vakulenko, * * This software is distributed with NO WARRANTIES, not even the implied * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * Authors grant any other persons or organisations a permission to use, * modify and redistribute this software in source and binary forms, * as long as this message is kept with the software, all derivative * works or modified versions. * * Cronyx Id: if_cp.c,v 1.1.2.41 2004/06/23 17:09:13 rik Exp $ */ #include __FBSDID("$FreeBSD$"); #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "opt_ng_cronyx.h" #ifdef NETGRAPH_CRONYX # include "opt_netgraph.h" # ifndef NETGRAPH # error #option NETGRAPH missed from configuration # endif # include # include # include #else # include # include #include # define PP_CISCO IFF_LINK2 # include #endif -#include +#include #include #include #include /* If we don't have Cronyx's sppp version, we don't have fr support via sppp */ #ifndef PP_FR #define PP_FR 0 #endif #define CP_DEBUG(d,s) ({if (d->chan->debug) {\ printf ("%s: ", d->name); printf s;}}) #define CP_DEBUG2(d,s) ({if (d->chan->debug>1) {\ printf ("%s: ", d->name); printf s;}}) #define CP_LOCK_NAME "cpX" #define CP_LOCK(_bd) mtx_lock (&(_bd)->cp_mtx) #define CP_UNLOCK(_bd) mtx_unlock (&(_bd)->cp_mtx) #define CP_LOCK_ASSERT(_bd) mtx_assert (&(_bd)->cp_mtx, MA_OWNED) static int cp_probe __P((device_t)); static int cp_attach __P((device_t)); static int cp_detach __P((device_t)); static device_method_t cp_methods[] = { /* Device interface */ DEVMETHOD(device_probe, cp_probe), DEVMETHOD(device_attach, cp_attach), DEVMETHOD(device_detach, cp_detach), DEVMETHOD_END }; typedef struct _cp_dma_mem_t { unsigned long phys; void *virt; size_t size; bus_dma_tag_t dmat; bus_dmamap_t mapp; } cp_dma_mem_t; typedef struct _drv_t { char name [8]; int running; cp_chan_t *chan; cp_board_t *board; cp_dma_mem_t dmamem; #ifdef NETGRAPH char nodename [NG_NODESIZE]; hook_p hook; hook_p debug_hook; node_p node; struct ifqueue queue; struct ifqueue hi_queue; #else struct ifqueue queue; struct ifnet *ifp; #endif short timeout; struct callout timeout_handle; struct cdev *devt; } drv_t; typedef struct _bdrv_t { cp_board_t *board; struct resource *cp_res; struct resource *cp_irq; void *cp_intrhand; cp_dma_mem_t dmamem; drv_t channel [NCHAN]; struct mtx cp_mtx; } bdrv_t; static driver_t cp_driver = { "cp", cp_methods, sizeof(bdrv_t), }; static devclass_t cp_devclass; static void cp_receive (cp_chan_t *c, unsigned char *data, int len); static void cp_transmit (cp_chan_t *c, void *attachment, int len); static void cp_error (cp_chan_t *c, int data); static void cp_up (drv_t *d); static void cp_start (drv_t *d); static void cp_down (drv_t *d); static void cp_watchdog (drv_t *d); static void cp_watchdog_timer (void *arg); #ifdef NETGRAPH extern struct ng_type typestruct; #else static void cp_ifstart (struct ifnet *ifp); static void cp_tlf (struct sppp *sp); static void cp_tls (struct sppp *sp); static int cp_sioctl (struct ifnet *ifp, u_long cmd, caddr_t data); static void cp_initialize (void *softc); #endif static cp_board_t *adapter [NBRD]; static drv_t *channel [NBRD*NCHAN]; static struct callout led_timo [NBRD]; static struct callout timeout_handle; static int cp_destroy = 0; static int cp_open (struct cdev *dev, int oflags, int devtype, struct thread *td); static int cp_close (struct cdev *dev, int fflag, int devtype, struct thread *td); static int cp_ioctl (struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td); static struct cdevsw cp_cdevsw = { .d_version = D_VERSION, .d_open = cp_open, .d_close = cp_close, .d_ioctl = cp_ioctl, .d_name = "cp", }; /* * Make an mbuf from data. */ static struct mbuf *makembuf (void *buf, unsigned len) { struct mbuf *m; MGETHDR (m, M_NOWAIT, MT_DATA); if (! m) return 0; if (!(MCLGET (m, M_NOWAIT))) { m_freem (m); return 0; } m->m_pkthdr.len = m->m_len = len; bcopy (buf, mtod (m, caddr_t), len); return m; } static int cp_probe (device_t dev) { if ((pci_get_vendor (dev) == cp_vendor_id) && (pci_get_device (dev) == cp_device_id)) { device_set_desc (dev, "Cronyx-Tau-PCI serial adapter"); return BUS_PROBE_DEFAULT; } return ENXIO; } static void cp_timeout (void *arg) { drv_t *d; int s, i, k; for (i = 0; i < NBRD; ++i) { if (adapter[i] == NULL) continue; for (k = 0; k < NCHAN; ++k) { s = splimp (); if (cp_destroy) { splx (s); return; } d = channel[i * NCHAN + k]; if (!d) { splx (s); continue; } CP_LOCK ((bdrv_t *)d->board->sys); switch (d->chan->type) { case T_G703: cp_g703_timer (d->chan); break; case T_E1: cp_e1_timer (d->chan); break; case T_E3: case T_T3: case T_STS1: cp_e3_timer (d->chan); break; default: break; } CP_UNLOCK ((bdrv_t *)d->board->sys); splx (s); } } s = splimp (); if (!cp_destroy) callout_reset (&timeout_handle, hz, cp_timeout, 0); splx (s); } static void cp_led_off (void *arg) { cp_board_t *b = arg; bdrv_t *bd = (bdrv_t *) b->sys; int s; s = splimp (); if (cp_destroy) { splx (s); return; } CP_LOCK (bd); cp_led (b, 0); CP_UNLOCK (bd); splx (s); } static void cp_intr (void *arg) { bdrv_t *bd = arg; cp_board_t *b = bd->board; #ifndef NETGRAPH int i; #endif int s = splimp (); if (cp_destroy) { splx (s); return; } CP_LOCK (bd); /* Check if we are ready */ if (b->sys == NULL) { /* Not we are not, just cleanup. */ cp_interrupt_poll (b, 1); CP_UNLOCK (bd); return; } /* Turn LED on. */ cp_led (b, 1); cp_interrupt (b); /* Turn LED off 50 msec later. */ callout_reset (&led_timo[b->num], hz/20, cp_led_off, b); CP_UNLOCK (bd); splx (s); #ifndef NETGRAPH /* Pass packets in a lock-free state */ for (i = 0; i < NCHAN && b->chan[i].type; i++) { drv_t *d = b->chan[i].sys; struct mbuf *m; if (!d || !d->running) continue; while (_IF_QLEN(&d->queue)) { IF_DEQUEUE (&d->queue,m); if (!m) continue; sppp_input (d->ifp, m); } } #endif } static void cp_bus_dmamap_addr (void *arg, bus_dma_segment_t *segs, int nseg, int error) { unsigned long *addr; if (error) return; KASSERT(nseg == 1, ("too many DMA segments, %d should be 1", nseg)); addr = arg; *addr = segs->ds_addr; } static int cp_bus_dma_mem_alloc (int bnum, int cnum, cp_dma_mem_t *dmem) { int error; error = bus_dma_tag_create (NULL, 16, 0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, dmem->size, 1, dmem->size, 0, NULL, NULL, &dmem->dmat); if (error) { if (cnum >= 0) printf ("cp%d-%d: ", bnum, cnum); else printf ("cp%d: ", bnum); printf ("couldn't allocate tag for dma memory\n"); return 0; } error = bus_dmamem_alloc (dmem->dmat, (void **)&dmem->virt, BUS_DMA_NOWAIT | BUS_DMA_ZERO, &dmem->mapp); if (error) { if (cnum >= 0) printf ("cp%d-%d: ", bnum, cnum); else printf ("cp%d: ", bnum); printf ("couldn't allocate mem for dma memory\n"); bus_dma_tag_destroy (dmem->dmat); return 0; } error = bus_dmamap_load (dmem->dmat, dmem->mapp, dmem->virt, dmem->size, cp_bus_dmamap_addr, &dmem->phys, 0); if (error) { if (cnum >= 0) printf ("cp%d-%d: ", bnum, cnum); else printf ("cp%d: ", bnum); printf ("couldn't load mem map for dma memory\n"); bus_dmamem_free (dmem->dmat, dmem->virt, dmem->mapp); bus_dma_tag_destroy (dmem->dmat); return 0; } return 1; } static void cp_bus_dma_mem_free (cp_dma_mem_t *dmem) { bus_dmamap_unload (dmem->dmat, dmem->mapp); bus_dmamem_free (dmem->dmat, dmem->virt, dmem->mapp); bus_dma_tag_destroy (dmem->dmat); } /* * Called if the probe succeeded. */ static int cp_attach (device_t dev) { bdrv_t *bd = device_get_softc (dev); int unit = device_get_unit (dev); char *cp_ln = CP_LOCK_NAME; unsigned short res; vm_offset_t vbase; int rid, error; cp_board_t *b; cp_chan_t *c; drv_t *d; int s = splimp (); b = malloc (sizeof(cp_board_t), M_DEVBUF, M_WAITOK); if (!b) { printf ("cp%d: couldn't allocate memory\n", unit); splx (s); return (ENXIO); } bzero (b, sizeof(cp_board_t)); bd->board = b; rid = PCIR_BAR(0); bd->cp_res = bus_alloc_resource (dev, SYS_RES_MEMORY, &rid, 0, ~0, 1, RF_ACTIVE); if (! bd->cp_res) { printf ("cp%d: cannot map memory\n", unit); free (b, M_DEVBUF); splx (s); return (ENXIO); } vbase = (vm_offset_t) rman_get_virtual (bd->cp_res); cp_ln[2] = '0' + unit; mtx_init (&bd->cp_mtx, cp_ln, MTX_NETWORK_LOCK, MTX_DEF|MTX_RECURSE); res = cp_init (b, unit, (u_char*) vbase); if (res) { printf ("cp%d: can't init, error code:%x\n", unit, res); bus_release_resource (dev, SYS_RES_MEMORY, PCIR_BAR(0), bd->cp_res); free (b, M_DEVBUF); splx (s); return (ENXIO); } bd->dmamem.size = sizeof(cp_qbuf_t); if (! cp_bus_dma_mem_alloc (unit, -1, &bd->dmamem)) { free (b, M_DEVBUF); splx (s); return (ENXIO); } CP_LOCK (bd); cp_reset (b, bd->dmamem.virt, bd->dmamem.phys); CP_UNLOCK (bd); rid = 0; bd->cp_irq = bus_alloc_resource (dev, SYS_RES_IRQ, &rid, 0, ~0, 1, RF_SHAREABLE | RF_ACTIVE); if (! bd->cp_irq) { cp_destroy = 1; printf ("cp%d: cannot map interrupt\n", unit); bus_release_resource (dev, SYS_RES_MEMORY, PCIR_BAR(0), bd->cp_res); mtx_destroy (&bd->cp_mtx); free (b, M_DEVBUF); splx (s); return (ENXIO); } callout_init (&led_timo[unit], 1); error = bus_setup_intr (dev, bd->cp_irq, INTR_TYPE_NET|INTR_MPSAFE, NULL, cp_intr, bd, &bd->cp_intrhand); if (error) { cp_destroy = 1; printf ("cp%d: cannot set up irq\n", unit); bus_release_resource (dev, SYS_RES_IRQ, 0, bd->cp_irq); bus_release_resource (dev, SYS_RES_MEMORY, PCIR_BAR(0), bd->cp_res); mtx_destroy (&bd->cp_mtx); free (b, M_DEVBUF); splx (s); return (ENXIO); } printf ("cp%d: %s, clock %ld MHz\n", unit, b->name, b->osc / 1000000); for (c = b->chan; c < b->chan + NCHAN; ++c) { if (! c->type) continue; d = &bd->channel[c->num]; d->dmamem.size = sizeof(cp_buf_t); if (! cp_bus_dma_mem_alloc (unit, c->num, &d->dmamem)) continue; channel [b->num*NCHAN + c->num] = d; sprintf (d->name, "cp%d.%d", b->num, c->num); d->board = b; d->chan = c; c->sys = d; callout_init (&d->timeout_handle, 1); #ifdef NETGRAPH if (ng_make_node_common (&typestruct, &d->node) != 0) { printf ("%s: cannot make common node\n", d->name); d->node = NULL; continue; } NG_NODE_SET_PRIVATE (d->node, d); sprintf (d->nodename, "%s%d", NG_CP_NODE_TYPE, c->board->num*NCHAN + c->num); if (ng_name_node (d->node, d->nodename)) { printf ("%s: cannot name node\n", d->nodename); NG_NODE_UNREF (d->node); continue; } d->queue.ifq_maxlen = ifqmaxlen; d->hi_queue.ifq_maxlen = ifqmaxlen; mtx_init (&d->queue.ifq_mtx, "cp_queue", NULL, MTX_DEF); mtx_init (&d->hi_queue.ifq_mtx, "cp_queue_hi", NULL, MTX_DEF); #else /*NETGRAPH*/ d->ifp = if_alloc(IFT_PPP); if (d->ifp == NULL) { printf ("%s: cannot if_alloc() interface\n", d->name); continue; } d->ifp->if_softc = d; if_initname (d->ifp, "cp", b->num * NCHAN + c->num); d->ifp->if_mtu = PP_MTU; d->ifp->if_flags = IFF_POINTOPOINT | IFF_MULTICAST; d->ifp->if_ioctl = cp_sioctl; d->ifp->if_start = cp_ifstart; d->ifp->if_init = cp_initialize; d->queue.ifq_maxlen = NRBUF; mtx_init (&d->queue.ifq_mtx, "cp_queue", NULL, MTX_DEF); sppp_attach (d->ifp); if_attach (d->ifp); IFP2SP(d->ifp)->pp_tlf = cp_tlf; IFP2SP(d->ifp)->pp_tls = cp_tls; /* If BPF is in the kernel, call the attach for it. * The header size of PPP or Cisco/HDLC is 4 bytes. */ bpfattach (d->ifp, DLT_PPP, 4); #endif /*NETGRAPH*/ cp_start_e1 (c); cp_start_chan (c, 1, 1, d->dmamem.virt, d->dmamem.phys); /* Register callback functions. */ cp_register_transmit (c, &cp_transmit); cp_register_receive (c, &cp_receive); cp_register_error (c, &cp_error); d->devt = make_dev (&cp_cdevsw, b->num*NCHAN+c->num, UID_ROOT, GID_WHEEL, 0600, "cp%d", b->num*NCHAN+c->num); } CP_LOCK (bd); b->sys = bd; adapter[unit] = b; CP_UNLOCK (bd); splx (s); return 0; } static int cp_detach (device_t dev) { bdrv_t *bd = device_get_softc (dev); cp_board_t *b = bd->board; cp_chan_t *c; int s; KASSERT (mtx_initialized (&bd->cp_mtx), ("cp mutex not initialized")); s = splimp (); CP_LOCK (bd); /* Check if the device is busy (open). */ for (c = b->chan; c < b->chan + NCHAN; ++c) { drv_t *d = (drv_t*) c->sys; if (! d || ! d->chan->type) continue; if (d->running) { CP_UNLOCK (bd); splx (s); return EBUSY; } } /* Ok, we can unload driver */ /* At first we should stop all channels */ for (c = b->chan; c < b->chan + NCHAN; ++c) { drv_t *d = (drv_t*) c->sys; if (! d || ! d->chan->type) continue; cp_stop_chan (c); cp_stop_e1 (c); cp_set_dtr (d->chan, 0); cp_set_rts (d->chan, 0); } /* Reset the adapter. */ cp_destroy = 1; cp_interrupt_poll (b, 1); cp_led_off (b); cp_reset (b, 0 ,0); callout_stop (&led_timo[b->num]); /* Disable the interrupt request. */ bus_teardown_intr (dev, bd->cp_irq, bd->cp_intrhand); for (c=b->chan; cchan+NCHAN; ++c) { drv_t *d = (drv_t*) c->sys; if (! d || ! d->chan->type) continue; callout_stop (&d->timeout_handle); #ifndef NETGRAPH /* Detach from the packet filter list of interfaces. */ bpfdetach (d->ifp); /* Detach from the sync PPP list. */ sppp_detach (d->ifp); /* Detach from the system list of interfaces. */ if_detach (d->ifp); if_free (d->ifp); IF_DRAIN (&d->queue); mtx_destroy (&d->queue.ifq_mtx); #else if (d->node) { ng_rmnode_self (d->node); NG_NODE_UNREF (d->node); d->node = NULL; } mtx_destroy (&d->queue.ifq_mtx); mtx_destroy (&d->hi_queue.ifq_mtx); #endif destroy_dev (d->devt); } b->sys = NULL; CP_UNLOCK (bd); bus_release_resource (dev, SYS_RES_IRQ, 0, bd->cp_irq); bus_release_resource (dev, SYS_RES_MEMORY, PCIR_BAR(0), bd->cp_res); CP_LOCK (bd); cp_led_off (b); CP_UNLOCK (bd); callout_drain (&led_timo[b->num]); splx (s); for (c = b->chan; c < b->chan + NCHAN; ++c) { drv_t *d = (drv_t*) c->sys; if (! d || ! d->chan->type) continue; callout_drain (&d->timeout_handle); channel [b->num*NCHAN + c->num] = NULL; /* Deallocate buffers. */ cp_bus_dma_mem_free (&d->dmamem); } adapter [b->num] = NULL; cp_bus_dma_mem_free (&bd->dmamem); free (b, M_DEVBUF); mtx_destroy (&bd->cp_mtx); return 0; } #ifndef NETGRAPH static void cp_ifstart (struct ifnet *ifp) { drv_t *d = ifp->if_softc; bdrv_t *bd = d->board->sys; CP_LOCK (bd); cp_start (d); CP_UNLOCK (bd); } static void cp_tlf (struct sppp *sp) { drv_t *d = SP2IFP(sp)->if_softc; CP_DEBUG2 (d, ("cp_tlf\n")); /* XXXRIK: Don't forget to protect them by LOCK, or kill them. */ /* cp_set_dtr (d->chan, 0);*/ /* cp_set_rts (d->chan, 0);*/ if (!(sp->pp_flags & PP_FR) && !(d->ifp->if_flags & PP_CISCO)) sp->pp_down (sp); } static void cp_tls (struct sppp *sp) { drv_t *d = SP2IFP(sp)->if_softc; CP_DEBUG2 (d, ("cp_tls\n")); if (!(sp->pp_flags & PP_FR) && !(d->ifp->if_flags & PP_CISCO)) sp->pp_up (sp); } /* * Process an ioctl request. */ static int cp_sioctl (struct ifnet *ifp, u_long cmd, caddr_t data) { drv_t *d = ifp->if_softc; bdrv_t *bd = d->board->sys; int error, s, was_up, should_be_up; was_up = (ifp->if_drv_flags & IFF_DRV_RUNNING) != 0; error = sppp_ioctl (ifp, cmd, data); if (error) return error; if (! (ifp->if_flags & IFF_DEBUG)) d->chan->debug = 0; else d->chan->debug = d->chan->debug_shadow; switch (cmd) { default: CP_DEBUG2 (d, ("ioctl 0x%lx\n", cmd)); return 0; case SIOCADDMULTI: CP_DEBUG2 (d, ("ioctl SIOCADDMULTI\n")); return 0; case SIOCDELMULTI: CP_DEBUG2 (d, ("ioctl SIOCDELMULTI\n")); return 0; case SIOCSIFFLAGS: CP_DEBUG2 (d, ("ioctl SIOCSIFFLAGS\n")); break; case SIOCSIFADDR: CP_DEBUG2 (d, ("ioctl SIOCSIFADDR\n")); break; } /* We get here only in case of SIFFLAGS or SIFADDR. */ s = splimp (); CP_LOCK (bd); should_be_up = (ifp->if_drv_flags & IFF_DRV_RUNNING) != 0; if (! was_up && should_be_up) { /* Interface goes up -- start it. */ cp_up (d); cp_start (d); } else if (was_up && ! should_be_up) { /* Interface is going down -- stop it. */ /* if ((IFP2SP(ifp)->pp_flags & PP_FR) || (ifp->if_flags & PP_CISCO))*/ cp_down (d); } CP_DEBUG (d, ("ioctl 0x%lx p4\n", cmd)); CP_UNLOCK (bd); splx (s); return 0; } /* * Initialization of interface. * It seems to be never called by upper level? */ static void cp_initialize (void *softc) { drv_t *d = softc; CP_DEBUG (d, ("cp_initialize\n")); } #endif /*NETGRAPH*/ /* * Stop the interface. Called on splimp(). */ static void cp_down (drv_t *d) { CP_DEBUG (d, ("cp_down\n")); /* Interface is going down -- stop it. */ cp_set_dtr (d->chan, 0); cp_set_rts (d->chan, 0); d->running = 0; callout_stop (&d->timeout_handle); } /* * Start the interface. Called on splimp(). */ static void cp_up (drv_t *d) { CP_DEBUG (d, ("cp_up\n")); cp_set_dtr (d->chan, 1); cp_set_rts (d->chan, 1); d->running = 1; } /* * Start output on the interface. Get another datagram to send * off of the interface queue, and copy it to the interface * before starting the output. */ static void cp_send (drv_t *d) { struct mbuf *m; u_short len; CP_DEBUG2 (d, ("cp_send, tn=%d te=%d\n", d->chan->tn, d->chan->te)); /* No output if the interface is down. */ if (! d->running) return; /* No output if the modem is off. */ if (! (d->chan->lloop || d->chan->type != T_SERIAL || cp_get_dsr (d->chan))) return; while (cp_transmit_space (d->chan)) { /* Get the packet to send. */ #ifdef NETGRAPH IF_DEQUEUE (&d->hi_queue, m); if (! m) IF_DEQUEUE (&d->queue, m); #else m = sppp_dequeue (d->ifp); #endif if (! m) return; #ifndef NETGRAPH BPF_MTAP (d->ifp, m); #endif len = m_length (m, NULL); if (len >= BUFSZ) printf ("%s: too long packet: %d bytes: ", d->name, len); else if (! m->m_next) cp_send_packet (d->chan, (u_char*) mtod (m, caddr_t), len, 0); else { u_char *buf = d->chan->tbuf[d->chan->te]; m_copydata (m, 0, len, buf); cp_send_packet (d->chan, buf, len, 0); } m_freem (m); /* Set up transmit timeout, if the transmit ring is not empty.*/ d->timeout = 10; } #ifndef NETGRAPH d->ifp->if_drv_flags |= IFF_DRV_OACTIVE; #endif } /* * Start output on the interface. * Always called on splimp(). */ static void cp_start (drv_t *d) { if (d->running) { if (! d->chan->dtr) cp_set_dtr (d->chan, 1); if (! d->chan->rts) cp_set_rts (d->chan, 1); cp_send (d); callout_reset (&d->timeout_handle, hz, cp_watchdog_timer, d); } } /* * Handle transmit timeouts. * Recover after lost transmit interrupts. * Always called on splimp(). */ static void cp_watchdog (drv_t *d) { CP_DEBUG (d, ("device timeout\n")); if (d->running) { cp_stop_chan (d->chan); cp_stop_e1 (d->chan); cp_start_e1 (d->chan); cp_start_chan (d->chan, 1, 1, 0, 0); cp_set_dtr (d->chan, 1); cp_set_rts (d->chan, 1); cp_start (d); } } static void cp_watchdog_timer (void *arg) { drv_t *d = arg; bdrv_t *bd = d->board->sys; CP_LOCK (bd); if (d->timeout == 1) cp_watchdog (d); if (d->timeout) d->timeout--; callout_reset (&d->timeout_handle, hz, cp_watchdog_timer, d); CP_UNLOCK (bd); } static void cp_transmit (cp_chan_t *c, void *attachment, int len) { drv_t *d = c->sys; d->timeout = 0; #ifndef NETGRAPH if_inc_counter(d->ifp, IFCOUNTER_OPACKETS, 1); d->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; #endif cp_start (d); } static void cp_receive (cp_chan_t *c, unsigned char *data, int len) { drv_t *d = c->sys; struct mbuf *m; #ifdef NETGRAPH int error; #endif if (! d->running) return; m = makembuf (data, len); if (! m) { CP_DEBUG (d, ("no memory for packet\n")); #ifndef NETGRAPH if_inc_counter(d->ifp, IFCOUNTER_IQDROPS, 1); #endif return; } if (c->debug > 1) m_print (m, 0); #ifdef NETGRAPH m->m_pkthdr.rcvif = 0; NG_SEND_DATA_ONLY (error, d->hook, m); #else if_inc_counter(d->ifp, IFCOUNTER_IPACKETS, 1); m->m_pkthdr.rcvif = d->ifp; /* Check if there's a BPF listener on this interface. * If so, hand off the raw packet to bpf. */ BPF_MTAP(d->ifp, m); IF_ENQUEUE (&d->queue, m); #endif } static void cp_error (cp_chan_t *c, int data) { drv_t *d = c->sys; switch (data) { case CP_FRAME: CP_DEBUG (d, ("frame error\n")); #ifndef NETGRAPH if_inc_counter(d->ifp, IFCOUNTER_IERRORS, 1); #endif break; case CP_CRC: CP_DEBUG (d, ("crc error\n")); #ifndef NETGRAPH if_inc_counter(d->ifp, IFCOUNTER_IERRORS, 1); #endif break; case CP_OVERRUN: CP_DEBUG (d, ("overrun error\n")); #ifndef NETGRAPH if_inc_counter(d->ifp, IFCOUNTER_COLLISIONS, 1); if_inc_counter(d->ifp, IFCOUNTER_IERRORS, 1); #endif break; case CP_OVERFLOW: CP_DEBUG (d, ("overflow error\n")); #ifndef NETGRAPH if_inc_counter(d->ifp, IFCOUNTER_IERRORS, 1); #endif break; case CP_UNDERRUN: CP_DEBUG (d, ("underrun error\n")); d->timeout = 0; #ifndef NETGRAPH if_inc_counter(d->ifp, IFCOUNTER_OERRORS, 1); d->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; #endif cp_start (d); break; default: CP_DEBUG (d, ("error #%d\n", data)); break; } } /* * You also need read, write, open, close routines. * This should get you started */ static int cp_open (struct cdev *dev, int oflags, int devtype, struct thread *td) { int unit = dev2unit (dev); drv_t *d; if (unit >= NBRD*NCHAN || ! (d = channel[unit])) return ENXIO; CP_DEBUG2 (d, ("cp_open\n")); return 0; } /* * Only called on the LAST close. */ static int cp_close (struct cdev *dev, int fflag, int devtype, struct thread *td) { drv_t *d = channel [dev2unit (dev)]; CP_DEBUG2 (d, ("cp_close\n")); return 0; } static int cp_modem_status (cp_chan_t *c) { drv_t *d = c->sys; bdrv_t *bd = d->board->sys; int status, s; status = d->running ? TIOCM_LE : 0; s = splimp (); CP_LOCK (bd); if (cp_get_cd (c)) status |= TIOCM_CD; if (cp_get_cts (c)) status |= TIOCM_CTS; if (cp_get_dsr (c)) status |= TIOCM_DSR; if (c->dtr) status |= TIOCM_DTR; if (c->rts) status |= TIOCM_RTS; CP_UNLOCK (bd); splx (s); return status; } static int cp_ioctl (struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td) { drv_t *d = channel [dev2unit (dev)]; bdrv_t *bd = d->board->sys; cp_chan_t *c = d->chan; struct serial_statistics *st; struct e1_statistics *opte1; struct e3_statistics *opte3; int error, s; char mask[16]; switch (cmd) { case SERIAL_GETREGISTERED: CP_DEBUG2 (d, ("ioctl: getregistered\n")); bzero (mask, sizeof(mask)); for (s=0; sifp)->pp_flags & PP_FR) ? "fr" : (d->ifp->if_flags & PP_CISCO) ? "cisco" : "ppp"); return 0; case SERIAL_SETPROTO: CP_DEBUG2 (d, ("ioctl: setproto\n")); /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; if (d->ifp->if_drv_flags & IFF_DRV_RUNNING) return EBUSY; if (! strcmp ("cisco", (char*)data)) { IFP2SP(d->ifp)->pp_flags &= ~(PP_FR); IFP2SP(d->ifp)->pp_flags |= PP_KEEPALIVE; d->ifp->if_flags |= PP_CISCO; #if PP_FR != 0 } else if (! strcmp ("fr", (char*)data)) { d->ifp->if_flags &= ~(PP_CISCO); IFP2SP(d->ifp)->pp_flags |= PP_FR | PP_KEEPALIVE; #endif } else if (! strcmp ("ppp", (char*)data)) { IFP2SP(d->ifp)->pp_flags &= ~PP_FR; IFP2SP(d->ifp)->pp_flags &= ~PP_KEEPALIVE; d->ifp->if_flags &= ~(PP_CISCO); } else return EINVAL; return 0; case SERIAL_GETKEEPALIVE: CP_DEBUG2 (d, ("ioctl: getkeepalive\n")); if ((IFP2SP(d->ifp)->pp_flags & PP_FR) || (d->ifp->if_flags & PP_CISCO)) return EINVAL; *(int*)data = (IFP2SP(d->ifp)->pp_flags & PP_KEEPALIVE) ? 1 : 0; return 0; case SERIAL_SETKEEPALIVE: CP_DEBUG2 (d, ("ioctl: setkeepalive\n")); /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; if ((IFP2SP(d->ifp)->pp_flags & PP_FR) || (d->ifp->if_flags & PP_CISCO)) return EINVAL; s = splimp (); CP_LOCK (bd); if (*(int*)data) IFP2SP(d->ifp)->pp_flags |= PP_KEEPALIVE; else IFP2SP(d->ifp)->pp_flags &= ~PP_KEEPALIVE; CP_UNLOCK (bd); splx (s); return 0; #endif /*NETGRAPH*/ case SERIAL_GETMODE: CP_DEBUG2 (d, ("ioctl: getmode\n")); *(int*)data = SERIAL_HDLC; return 0; case SERIAL_SETMODE: /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; if (*(int*)data != SERIAL_HDLC) return EINVAL; return 0; case SERIAL_GETCFG: CP_DEBUG2 (d, ("ioctl: getcfg\n")); if (c->type != T_E1 || c->unfram) return EINVAL; *(char*)data = c->board->mux ? 'c' : 'a'; return 0; case SERIAL_SETCFG: CP_DEBUG2 (d, ("ioctl: setcfg\n")); error = priv_check (td, PRIV_DRIVER); if (error) return error; if (c->type != T_E1) return EINVAL; s = splimp (); CP_LOCK (bd); cp_set_mux (c->board, *((char*)data) == 'c'); CP_UNLOCK (bd); splx (s); return 0; case SERIAL_GETSTAT: CP_DEBUG2 (d, ("ioctl: getstat\n")); st = (struct serial_statistics*) data; st->rintr = c->rintr; st->tintr = c->tintr; st->mintr = 0; st->ibytes = c->ibytes; st->ipkts = c->ipkts; st->obytes = c->obytes; st->opkts = c->opkts; st->ierrs = c->overrun + c->frame + c->crc; st->oerrs = c->underrun; return 0; case SERIAL_GETESTAT: CP_DEBUG2 (d, ("ioctl: getestat\n")); if (c->type != T_E1 && c->type != T_G703) return EINVAL; opte1 = (struct e1_statistics*) data; opte1->status = c->status; opte1->cursec = c->cursec; opte1->totsec = c->totsec + c->cursec; opte1->currnt.bpv = c->currnt.bpv; opte1->currnt.fse = c->currnt.fse; opte1->currnt.crce = c->currnt.crce; opte1->currnt.rcrce = c->currnt.rcrce; opte1->currnt.uas = c->currnt.uas; opte1->currnt.les = c->currnt.les; opte1->currnt.es = c->currnt.es; opte1->currnt.bes = c->currnt.bes; opte1->currnt.ses = c->currnt.ses; opte1->currnt.oofs = c->currnt.oofs; opte1->currnt.css = c->currnt.css; opte1->currnt.dm = c->currnt.dm; opte1->total.bpv = c->total.bpv + c->currnt.bpv; opte1->total.fse = c->total.fse + c->currnt.fse; opte1->total.crce = c->total.crce + c->currnt.crce; opte1->total.rcrce = c->total.rcrce + c->currnt.rcrce; opte1->total.uas = c->total.uas + c->currnt.uas; opte1->total.les = c->total.les + c->currnt.les; opte1->total.es = c->total.es + c->currnt.es; opte1->total.bes = c->total.bes + c->currnt.bes; opte1->total.ses = c->total.ses + c->currnt.ses; opte1->total.oofs = c->total.oofs + c->currnt.oofs; opte1->total.css = c->total.css + c->currnt.css; opte1->total.dm = c->total.dm + c->currnt.dm; for (s=0; s<48; ++s) { opte1->interval[s].bpv = c->interval[s].bpv; opte1->interval[s].fse = c->interval[s].fse; opte1->interval[s].crce = c->interval[s].crce; opte1->interval[s].rcrce = c->interval[s].rcrce; opte1->interval[s].uas = c->interval[s].uas; opte1->interval[s].les = c->interval[s].les; opte1->interval[s].es = c->interval[s].es; opte1->interval[s].bes = c->interval[s].bes; opte1->interval[s].ses = c->interval[s].ses; opte1->interval[s].oofs = c->interval[s].oofs; opte1->interval[s].css = c->interval[s].css; opte1->interval[s].dm = c->interval[s].dm; } return 0; case SERIAL_GETE3STAT: CP_DEBUG2 (d, ("ioctl: gete3stat\n")); if (c->type != T_E3 && c->type != T_T3 && c->type != T_STS1) return EINVAL; opte3 = (struct e3_statistics*) data; opte3->status = c->e3status; opte3->cursec = (c->e3csec_5 * 2 + 1) / 10; opte3->totsec = c->e3tsec + opte3->cursec; opte3->ccv = c->e3ccv; opte3->tcv = c->e3tcv + opte3->ccv; for (s = 0; s < 48; ++s) { opte3->icv[s] = c->e3icv[s]; } return 0; case SERIAL_CLRSTAT: CP_DEBUG2 (d, ("ioctl: clrstat\n")); /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; c->rintr = 0; c->tintr = 0; c->ibytes = 0; c->obytes = 0; c->ipkts = 0; c->opkts = 0; c->overrun = 0; c->frame = 0; c->crc = 0; c->underrun = 0; bzero (&c->currnt, sizeof (c->currnt)); bzero (&c->total, sizeof (c->total)); bzero (c->interval, sizeof (c->interval)); c->e3ccv = 0; c->e3tcv = 0; bzero (c->e3icv, sizeof (c->e3icv)); return 0; case SERIAL_GETBAUD: CP_DEBUG2 (d, ("ioctl: getbaud\n")); *(long*)data = c->baud; return 0; case SERIAL_SETBAUD: CP_DEBUG2 (d, ("ioctl: setbaud\n")); /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; s = splimp (); CP_LOCK (bd); cp_set_baud (c, *(long*)data); CP_UNLOCK (bd); splx (s); return 0; case SERIAL_GETLOOP: CP_DEBUG2 (d, ("ioctl: getloop\n")); *(int*)data = c->lloop; return 0; case SERIAL_SETLOOP: CP_DEBUG2 (d, ("ioctl: setloop\n")); /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; s = splimp (); CP_LOCK (bd); cp_set_lloop (c, *(int*)data); CP_UNLOCK (bd); splx (s); return 0; case SERIAL_GETDPLL: CP_DEBUG2 (d, ("ioctl: getdpll\n")); if (c->type != T_SERIAL) return EINVAL; *(int*)data = c->dpll; return 0; case SERIAL_SETDPLL: CP_DEBUG2 (d, ("ioctl: setdpll\n")); /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; if (c->type != T_SERIAL) return EINVAL; s = splimp (); CP_LOCK (bd); cp_set_dpll (c, *(int*)data); CP_UNLOCK (bd); splx (s); return 0; case SERIAL_GETNRZI: CP_DEBUG2 (d, ("ioctl: getnrzi\n")); if (c->type != T_SERIAL) return EINVAL; *(int*)data = c->nrzi; return 0; case SERIAL_SETNRZI: CP_DEBUG2 (d, ("ioctl: setnrzi\n")); /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; if (c->type != T_SERIAL) return EINVAL; s = splimp (); CP_LOCK (bd); cp_set_nrzi (c, *(int*)data); CP_UNLOCK (bd); splx (s); return 0; case SERIAL_GETDEBUG: CP_DEBUG2 (d, ("ioctl: getdebug\n")); *(int*)data = d->chan->debug; return 0; case SERIAL_SETDEBUG: CP_DEBUG2 (d, ("ioctl: setdebug\n")); /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; #ifndef NETGRAPH /* * The debug_shadow is always greater than zero for logic * simplicity. For switching debug off the IFF_DEBUG is * responsible. */ d->chan->debug_shadow = (*(int*)data) ? (*(int*)data) : 1; if (d->ifp->if_flags & IFF_DEBUG) d->chan->debug = d->chan->debug_shadow; #else d->chan->debug = *(int*)data; #endif return 0; case SERIAL_GETHIGAIN: CP_DEBUG2 (d, ("ioctl: gethigain\n")); if (c->type != T_E1) return EINVAL; *(int*)data = c->higain; return 0; case SERIAL_SETHIGAIN: CP_DEBUG2 (d, ("ioctl: sethigain\n")); /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; if (c->type != T_E1) return EINVAL; s = splimp (); CP_LOCK (bd); cp_set_higain (c, *(int*)data); CP_UNLOCK (bd); splx (s); return 0; case SERIAL_GETPHONY: CP_DEBUG2 (d, ("ioctl: getphony\n")); if (c->type != T_E1) return EINVAL; *(int*)data = c->phony; return 0; case SERIAL_SETPHONY: CP_DEBUG2 (d, ("ioctl: setphony\n")); /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; if (c->type != T_E1) return EINVAL; s = splimp (); CP_LOCK (bd); cp_set_phony (c, *(int*)data); CP_UNLOCK (bd); splx (s); return 0; case SERIAL_GETUNFRAM: CP_DEBUG2 (d, ("ioctl: getunfram\n")); if (c->type != T_E1) return EINVAL; *(int*)data = c->unfram; return 0; case SERIAL_SETUNFRAM: CP_DEBUG2 (d, ("ioctl: setunfram\n")); /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; if (c->type != T_E1) return EINVAL; s = splimp (); CP_LOCK (bd); cp_set_unfram (c, *(int*)data); CP_UNLOCK (bd); splx (s); return 0; case SERIAL_GETSCRAMBLER: CP_DEBUG2 (d, ("ioctl: getscrambler\n")); if (c->type != T_G703 && !c->unfram) return EINVAL; *(int*)data = c->scrambler; return 0; case SERIAL_SETSCRAMBLER: CP_DEBUG2 (d, ("ioctl: setscrambler\n")); /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; if (c->type != T_G703 && !c->unfram) return EINVAL; s = splimp (); CP_LOCK (bd); cp_set_scrambler (c, *(int*)data); CP_UNLOCK (bd); splx (s); return 0; case SERIAL_GETMONITOR: CP_DEBUG2 (d, ("ioctl: getmonitor\n")); if (c->type != T_E1 && c->type != T_E3 && c->type != T_T3 && c->type != T_STS1) return EINVAL; *(int*)data = c->monitor; return 0; case SERIAL_SETMONITOR: CP_DEBUG2 (d, ("ioctl: setmonitor\n")); /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; if (c->type != T_E1) return EINVAL; s = splimp (); CP_LOCK (bd); cp_set_monitor (c, *(int*)data); CP_UNLOCK (bd); splx (s); return 0; case SERIAL_GETUSE16: CP_DEBUG2 (d, ("ioctl: getuse16\n")); if (c->type != T_E1 || c->unfram) return EINVAL; *(int*)data = c->use16; return 0; case SERIAL_SETUSE16: CP_DEBUG2 (d, ("ioctl: setuse16\n")); /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; if (c->type != T_E1) return EINVAL; s = splimp (); CP_LOCK (bd); cp_set_use16 (c, *(int*)data); CP_UNLOCK (bd); splx (s); return 0; case SERIAL_GETCRC4: CP_DEBUG2 (d, ("ioctl: getcrc4\n")); if (c->type != T_E1 || c->unfram) return EINVAL; *(int*)data = c->crc4; return 0; case SERIAL_SETCRC4: CP_DEBUG2 (d, ("ioctl: setcrc4\n")); /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; if (c->type != T_E1) return EINVAL; s = splimp (); CP_LOCK (bd); cp_set_crc4 (c, *(int*)data); CP_UNLOCK (bd); splx (s); return 0; case SERIAL_GETCLK: CP_DEBUG2 (d, ("ioctl: getclk\n")); if (c->type != T_E1 && c->type != T_G703 && c->type != T_E3 && c->type != T_T3 && c->type != T_STS1) return EINVAL; switch (c->gsyn) { default: *(int*)data = E1CLK_INTERNAL; break; case GSYN_RCV: *(int*)data = E1CLK_RECEIVE; break; case GSYN_RCV0: *(int*)data = E1CLK_RECEIVE_CHAN0; break; case GSYN_RCV1: *(int*)data = E1CLK_RECEIVE_CHAN1; break; case GSYN_RCV2: *(int*)data = E1CLK_RECEIVE_CHAN2; break; case GSYN_RCV3: *(int*)data = E1CLK_RECEIVE_CHAN3; break; } return 0; case SERIAL_SETCLK: CP_DEBUG2 (d, ("ioctl: setclk\n")); /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; if (c->type != T_E1 && c->type != T_G703 && c->type != T_E3 && c->type != T_T3 && c->type != T_STS1) return EINVAL; s = splimp (); CP_LOCK (bd); switch (*(int*)data) { default: cp_set_gsyn (c, GSYN_INT); break; case E1CLK_RECEIVE: cp_set_gsyn (c, GSYN_RCV); break; case E1CLK_RECEIVE_CHAN0: cp_set_gsyn (c, GSYN_RCV0); break; case E1CLK_RECEIVE_CHAN1: cp_set_gsyn (c, GSYN_RCV1); break; case E1CLK_RECEIVE_CHAN2: cp_set_gsyn (c, GSYN_RCV2); break; case E1CLK_RECEIVE_CHAN3: cp_set_gsyn (c, GSYN_RCV3); break; } CP_UNLOCK (bd); splx (s); return 0; case SERIAL_GETTIMESLOTS: CP_DEBUG2 (d, ("ioctl: gettimeslots\n")); if ((c->type != T_E1 || c->unfram) && c->type != T_DATA) return EINVAL; *(u_long*)data = c->ts; return 0; case SERIAL_SETTIMESLOTS: CP_DEBUG2 (d, ("ioctl: settimeslots\n")); /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; if ((c->type != T_E1 || c->unfram) && c->type != T_DATA) return EINVAL; s = splimp (); CP_LOCK (bd); cp_set_ts (c, *(u_long*)data); CP_UNLOCK (bd); splx (s); return 0; case SERIAL_GETINVCLK: CP_DEBUG2 (d, ("ioctl: getinvclk\n")); #if 1 return EINVAL; #else if (c->type != T_SERIAL) return EINVAL; *(int*)data = c->invtxc; return 0; #endif case SERIAL_SETINVCLK: CP_DEBUG2 (d, ("ioctl: setinvclk\n")); /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; if (c->type != T_SERIAL) return EINVAL; s = splimp (); CP_LOCK (bd); cp_set_invtxc (c, *(int*)data); cp_set_invrxc (c, *(int*)data); CP_UNLOCK (bd); splx (s); return 0; case SERIAL_GETINVTCLK: CP_DEBUG2 (d, ("ioctl: getinvtclk\n")); if (c->type != T_SERIAL) return EINVAL; *(int*)data = c->invtxc; return 0; case SERIAL_SETINVTCLK: CP_DEBUG2 (d, ("ioctl: setinvtclk\n")); /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; if (c->type != T_SERIAL) return EINVAL; s = splimp (); CP_LOCK (bd); cp_set_invtxc (c, *(int*)data); CP_UNLOCK (bd); splx (s); return 0; case SERIAL_GETINVRCLK: CP_DEBUG2 (d, ("ioctl: getinvrclk\n")); if (c->type != T_SERIAL) return EINVAL; *(int*)data = c->invrxc; return 0; case SERIAL_SETINVRCLK: CP_DEBUG2 (d, ("ioctl: setinvrclk\n")); /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; if (c->type != T_SERIAL) return EINVAL; s = splimp (); CP_LOCK (bd); cp_set_invrxc (c, *(int*)data); CP_UNLOCK (bd); splx (s); return 0; case SERIAL_GETLEVEL: CP_DEBUG2 (d, ("ioctl: getlevel\n")); if (c->type != T_G703) return EINVAL; s = splimp (); CP_LOCK (bd); *(int*)data = cp_get_lq (c); CP_UNLOCK (bd); splx (s); return 0; #if 0 case SERIAL_RESET: CP_DEBUG2 (d, ("ioctl: reset\n")); /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; s = splimp (); CP_LOCK (bd); cp_reset (c->board, 0, 0); CP_UNLOCK (bd); splx (s); return 0; case SERIAL_HARDRESET: CP_DEBUG2 (d, ("ioctl: hardreset\n")); /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; s = splimp (); CP_LOCK (bd); /* hard_reset (c->board); */ CP_UNLOCK (bd); splx (s); return 0; #endif case SERIAL_GETCABLE: CP_DEBUG2 (d, ("ioctl: getcable\n")); if (c->type != T_SERIAL) return EINVAL; s = splimp (); CP_LOCK (bd); *(int*)data = cp_get_cable (c); CP_UNLOCK (bd); splx (s); return 0; case SERIAL_GETDIR: CP_DEBUG2 (d, ("ioctl: getdir\n")); if (c->type != T_E1 && c->type != T_DATA) return EINVAL; *(int*)data = c->dir; return 0; case SERIAL_SETDIR: CP_DEBUG2 (d, ("ioctl: setdir\n")); /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; s = splimp (); CP_LOCK (bd); cp_set_dir (c, *(int*)data); CP_UNLOCK (bd); splx (s); return 0; case SERIAL_GETRLOOP: CP_DEBUG2 (d, ("ioctl: getrloop\n")); if (c->type != T_G703 && c->type != T_E3 && c->type != T_T3 && c->type != T_STS1) return EINVAL; *(int*)data = cp_get_rloop (c); return 0; case SERIAL_SETRLOOP: CP_DEBUG2 (d, ("ioctl: setloop\n")); if (c->type != T_E3 && c->type != T_T3 && c->type != T_STS1) return EINVAL; /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; s = splimp (); CP_LOCK (bd); cp_set_rloop (c, *(int*)data); CP_UNLOCK (bd); splx (s); return 0; case SERIAL_GETCABLEN: CP_DEBUG2 (d, ("ioctl: getcablen\n")); if (c->type != T_T3 && c->type != T_STS1) return EINVAL; *(int*)data = c->cablen; return 0; case SERIAL_SETCABLEN: CP_DEBUG2 (d, ("ioctl: setloop\n")); if (c->type != T_T3 && c->type != T_STS1) return EINVAL; /* Only for superuser! */ error = priv_check (td, PRIV_DRIVER); if (error) return error; s = splimp (); CP_LOCK (bd); cp_set_cablen (c, *(int*)data); CP_UNLOCK (bd); splx (s); return 0; case TIOCSDTR: /* Set DTR */ s = splimp (); CP_LOCK (bd); cp_set_dtr (c, 1); CP_UNLOCK (bd); splx (s); return 0; case TIOCCDTR: /* Clear DTR */ s = splimp (); CP_LOCK (bd); cp_set_dtr (c, 0); CP_UNLOCK (bd); splx (s); return 0; case TIOCMSET: /* Set DTR/RTS */ s = splimp (); CP_LOCK (bd); cp_set_dtr (c, (*(int*)data & TIOCM_DTR) ? 1 : 0); cp_set_rts (c, (*(int*)data & TIOCM_RTS) ? 1 : 0); CP_UNLOCK (bd); splx (s); return 0; case TIOCMBIS: /* Add DTR/RTS */ s = splimp (); CP_LOCK (bd); if (*(int*)data & TIOCM_DTR) cp_set_dtr (c, 1); if (*(int*)data & TIOCM_RTS) cp_set_rts (c, 1); CP_UNLOCK (bd); splx (s); return 0; case TIOCMBIC: /* Clear DTR/RTS */ s = splimp (); CP_LOCK (bd); if (*(int*)data & TIOCM_DTR) cp_set_dtr (c, 0); if (*(int*)data & TIOCM_RTS) cp_set_rts (c, 0); CP_UNLOCK (bd); splx (s); return 0; case TIOCMGET: /* Get modem status */ *(int*)data = cp_modem_status (c); return 0; } return ENOTTY; } #ifdef NETGRAPH static int ng_cp_constructor (node_p node) { drv_t *d = NG_NODE_PRIVATE (node); CP_DEBUG (d, ("Constructor\n")); return EINVAL; } static int ng_cp_newhook (node_p node, hook_p hook, const char *name) { int s; drv_t *d = NG_NODE_PRIVATE (node); bdrv_t *bd = d->board->sys; CP_DEBUG (d, ("Newhook\n")); /* Attach debug hook */ if (strcmp (name, NG_CP_HOOK_DEBUG) == 0) { NG_HOOK_SET_PRIVATE (hook, NULL); d->debug_hook = hook; return 0; } /* Check for raw hook */ if (strcmp (name, NG_CP_HOOK_RAW) != 0) return EINVAL; NG_HOOK_SET_PRIVATE (hook, d); d->hook = hook; s = splimp (); CP_LOCK (bd); cp_up (d); CP_UNLOCK (bd); splx (s); return 0; } static char *format_timeslots (u_long s) { static char buf [100]; char *p = buf; int i; for (i=1; i<32; ++i) if ((s >> i) & 1) { int prev = (i > 1) & (s >> (i-1)); int next = (i < 31) & (s >> (i+1)); if (prev) { if (next) continue; *p++ = '-'; } else if (p > buf) *p++ = ','; if (i >= 10) *p++ = '0' + i / 10; *p++ = '0' + i % 10; } *p = 0; return buf; } static int print_modems (char *s, cp_chan_t *c, int need_header) { int status = cp_modem_status (c); int length = 0; if (need_header) length += sprintf (s + length, " LE DTR DSR RTS CTS CD\n"); length += sprintf (s + length, "%4s %4s %4s %4s %4s %4s\n", status & TIOCM_LE ? "On" : "-", status & TIOCM_DTR ? "On" : "-", status & TIOCM_DSR ? "On" : "-", status & TIOCM_RTS ? "On" : "-", status & TIOCM_CTS ? "On" : "-", status & TIOCM_CD ? "On" : "-"); return length; } static int print_stats (char *s, cp_chan_t *c, int need_header) { int length = 0; if (need_header) length += sprintf (s + length, " Rintr Tintr Mintr Ibytes Ipkts Ierrs Obytes Opkts Oerrs\n"); length += sprintf (s + length, "%7ld %7ld %7ld %8lu %7ld %7ld %8lu %7ld %7ld\n", c->rintr, c->tintr, 0l, (unsigned long) c->ibytes, c->ipkts, c->overrun + c->frame + c->crc, (unsigned long) c->obytes, c->opkts, c->underrun); return length; } static char *format_e1_status (u_char status) { static char buf [80]; if (status & E1_NOALARM) return "Ok"; buf[0] = 0; if (status & E1_LOS) strcat (buf, ",LOS"); if (status & E1_AIS) strcat (buf, ",AIS"); if (status & E1_LOF) strcat (buf, ",LOF"); if (status & E1_LOMF) strcat (buf, ",LOMF"); if (status & E1_FARLOF) strcat (buf, ",FARLOF"); if (status & E1_AIS16) strcat (buf, ",AIS16"); if (status & E1_FARLOMF) strcat (buf, ",FARLOMF"); if (status & E1_TSTREQ) strcat (buf, ",TSTREQ"); if (status & E1_TSTERR) strcat (buf, ",TSTERR"); if (buf[0] == ',') return buf+1; return "Unknown"; } static int print_frac (char *s, int leftalign, u_long numerator, u_long divider) { int n, length = 0; if (numerator < 1 || divider < 1) { length += sprintf (s+length, leftalign ? "/- " : " -"); return length; } n = (int) (0.5 + 1000.0 * numerator / divider); if (n < 1000) { length += sprintf (s+length, leftalign ? "/.%-3d" : " .%03d", n); return length; } *(s + length) = leftalign ? '/' : ' '; length ++; if (n >= 1000000) n = (n+500) / 1000 * 1000; else if (n >= 100000) n = (n+50) / 100 * 100; else if (n >= 10000) n = (n+5) / 10 * 10; switch (n) { case 1000: length += printf (s+length, ".999"); return length; case 10000: n = 9990; break; case 100000: n = 99900; break; case 1000000: n = 999000; break; } if (n < 10000) length += sprintf (s+length, "%d.%d", n/1000, n/10%100); else if (n < 100000) length += sprintf (s+length, "%d.%d", n/1000, n/100%10); else if (n < 1000000) length += sprintf (s+length, "%d.", n/1000); else length += sprintf (s+length, "%d", n/1000); return length; } static int print_e1_stats (char *s, cp_chan_t *c) { struct e1_counters total; u_long totsec; int length = 0; totsec = c->totsec + c->cursec; total.bpv = c->total.bpv + c->currnt.bpv; total.fse = c->total.fse + c->currnt.fse; total.crce = c->total.crce + c->currnt.crce; total.rcrce = c->total.rcrce + c->currnt.rcrce; total.uas = c->total.uas + c->currnt.uas; total.les = c->total.les + c->currnt.les; total.es = c->total.es + c->currnt.es; total.bes = c->total.bes + c->currnt.bes; total.ses = c->total.ses + c->currnt.ses; total.oofs = c->total.oofs + c->currnt.oofs; total.css = c->total.css + c->currnt.css; total.dm = c->total.dm + c->currnt.dm; length += sprintf (s + length, " Unav/Degr Bpv/Fsyn CRC/RCRC Err/Lerr Sev/Bur Oof/Slp Status\n"); /* Unavailable seconds, degraded minutes */ length += print_frac (s + length, 0, c->currnt.uas, c->cursec); length += print_frac (s + length, 1, 60 * c->currnt.dm, c->cursec); /* Bipolar violations, frame sync errors */ length += print_frac (s + length, 0, c->currnt.bpv, c->cursec); length += print_frac (s + length, 1, c->currnt.fse, c->cursec); /* CRC errors, remote CRC errors (E-bit) */ length += print_frac (s + length, 0, c->currnt.crce, c->cursec); length += print_frac (s + length, 1, c->currnt.rcrce, c->cursec); /* Errored seconds, line errored seconds */ length += print_frac (s + length, 0, c->currnt.es, c->cursec); length += print_frac (s + length, 1, c->currnt.les, c->cursec); /* Severely errored seconds, burst errored seconds */ length += print_frac (s + length, 0, c->currnt.ses, c->cursec); length += print_frac (s + length, 1, c->currnt.bes, c->cursec); /* Out of frame seconds, controlled slip seconds */ length += print_frac (s + length, 0, c->currnt.oofs, c->cursec); length += print_frac (s + length, 1, c->currnt.css, c->cursec); length += sprintf (s + length, " %s\n", format_e1_status (c->status)); /* Print total statistics. */ length += print_frac (s + length, 0, total.uas, totsec); length += print_frac (s + length, 1, 60 * total.dm, totsec); length += print_frac (s + length, 0, total.bpv, totsec); length += print_frac (s + length, 1, total.fse, totsec); length += print_frac (s + length, 0, total.crce, totsec); length += print_frac (s + length, 1, total.rcrce, totsec); length += print_frac (s + length, 0, total.es, totsec); length += print_frac (s + length, 1, total.les, totsec); length += print_frac (s + length, 0, total.ses, totsec); length += print_frac (s + length, 1, total.bes, totsec); length += print_frac (s + length, 0, total.oofs, totsec); length += print_frac (s + length, 1, total.css, totsec); length += sprintf (s + length, " -- Total\n"); return length; } static int print_chan (char *s, cp_chan_t *c) { drv_t *d = c->sys; bdrv_t *bd = d->board->sys; int length = 0; length += sprintf (s + length, "cp%d", c->board->num * NCHAN + c->num); if (d->chan->debug) length += sprintf (s + length, " debug=%d", d->chan->debug); if (c->board->mux) { length += sprintf (s + length, " cfg=C"); } else { length += sprintf (s + length, " cfg=A"); } if (c->baud) length += sprintf (s + length, " %ld", c->baud); else length += sprintf (s + length, " extclock"); if (c->type == T_E1 || c->type == T_G703) switch (c->gsyn) { case GSYN_INT : length += sprintf (s + length, " syn=int"); break; case GSYN_RCV : length += sprintf (s + length, " syn=rcv"); break; case GSYN_RCV0 : length += sprintf (s + length, " syn=rcv0"); break; case GSYN_RCV1 : length += sprintf (s + length, " syn=rcv1"); break; case GSYN_RCV2 : length += sprintf (s + length, " syn=rcv2"); break; case GSYN_RCV3 : length += sprintf (s + length, " syn=rcv3"); break; } if (c->type == T_SERIAL) { length += sprintf (s + length, " dpll=%s", c->dpll ? "on" : "off"); length += sprintf (s + length, " nrzi=%s", c->nrzi ? "on" : "off"); length += sprintf (s + length, " invclk=%s", c->invtxc ? "on" : "off"); } if (c->type == T_E1) length += sprintf (s + length, " higain=%s", c->higain ? "on" : "off"); length += sprintf (s + length, " loop=%s", c->lloop ? "on" : "off"); if (c->type == T_E1) length += sprintf (s + length, " ts=%s", format_timeslots (c->ts)); if (c->type == T_G703) { int lq, x; x = splimp (); CP_LOCK (bd); lq = cp_get_lq (c); CP_UNLOCK (bd); splx (x); length += sprintf (s + length, " (level=-%.1fdB)", lq / 10.0); } length += sprintf (s + length, "\n"); return length; } static int ng_cp_rcvmsg (node_p node, item_p item, hook_p lasthook) { drv_t *d = NG_NODE_PRIVATE (node); struct ng_mesg *msg; struct ng_mesg *resp = NULL; int error = 0; CP_DEBUG (d, ("Rcvmsg\n")); NGI_GET_MSG (item, msg); switch (msg->header.typecookie) { default: error = EINVAL; break; case NGM_CP_COOKIE: printf ("Not implemented yet\n"); error = EINVAL; break; case NGM_GENERIC_COOKIE: switch (msg->header.cmd) { default: error = EINVAL; break; case NGM_TEXT_STATUS: { char *s; int l = 0; int dl = sizeof (struct ng_mesg) + 730; NG_MKRESPONSE (resp, msg, dl, M_NOWAIT); if (! resp) { error = ENOMEM; break; } s = (resp)->data; if (d) { l += print_chan (s + l, d->chan); l += print_stats (s + l, d->chan, 1); l += print_modems (s + l, d->chan, 1); l += print_e1_stats (s + l, d->chan); } else l += sprintf (s + l, "Error: node not connect to channel"); strncpy ((resp)->header.cmdstr, "status", NG_CMDSTRSIZ); } break; } break; } NG_RESPOND_MSG (error, node, item, resp); NG_FREE_MSG (msg); return error; } static int ng_cp_rcvdata (hook_p hook, item_p item) { drv_t *d = NG_NODE_PRIVATE (NG_HOOK_NODE(hook)); struct mbuf *m; struct ng_tag_prio *ptag; bdrv_t *bd = d->board->sys; struct ifqueue *q; int s; CP_DEBUG2 (d, ("Rcvdata\n")); NGI_GET_M (item, m); NG_FREE_ITEM (item); if (! NG_HOOK_PRIVATE (hook) || ! d) { NG_FREE_M (m); return ENETDOWN; } /* Check for high priority data */ if ((ptag = (struct ng_tag_prio *)m_tag_locate(m, NGM_GENERIC_COOKIE, NG_TAG_PRIO, NULL)) != NULL && (ptag->priority > NG_PRIO_CUTOFF) ) q = &d->hi_queue; else q = &d->queue; s = splimp (); CP_LOCK (bd); IF_LOCK (q); if (_IF_QFULL (q)) { IF_UNLOCK (q); CP_UNLOCK (bd); splx (s); NG_FREE_M (m); return ENOBUFS; } _IF_ENQUEUE (q, m); IF_UNLOCK (q); cp_start (d); CP_UNLOCK (bd); splx (s); return 0; } static int ng_cp_rmnode (node_p node) { drv_t *d = NG_NODE_PRIVATE (node); CP_DEBUG (d, ("Rmnode\n")); if (d && d->running) { bdrv_t *bd = d->board->sys; int s = splimp (); CP_LOCK (bd); cp_down (d); CP_UNLOCK (bd); splx (s); } #ifdef KLD_MODULE if (node->nd_flags & NGF_REALLY_DIE) { NG_NODE_SET_PRIVATE (node, NULL); NG_NODE_UNREF (node); } NG_NODE_REVIVE(node); /* Persistent node */ #endif return 0; } static int ng_cp_connect (hook_p hook) { drv_t *d = NG_NODE_PRIVATE (NG_HOOK_NODE (hook)); if (d) { CP_DEBUG (d, ("Connect\n")); callout_reset (&d->timeout_handle, hz, cp_watchdog_timer, d); } return 0; } static int ng_cp_disconnect (hook_p hook) { drv_t *d = NG_NODE_PRIVATE (NG_HOOK_NODE (hook)); if (d) { CP_DEBUG (d, ("Disconnect\n")); if (NG_HOOK_PRIVATE (hook)) { bdrv_t *bd = d->board->sys; int s = splimp (); CP_LOCK (bd); cp_down (d); CP_UNLOCK (bd); splx (s); } /* If we were wait it than it reasserted now, just stop it. */ if (!callout_drain (&d->timeout_handle)) callout_stop (&d->timeout_handle); } return 0; } #endif static int cp_modevent (module_t mod, int type, void *unused) { static int load_count = 0; switch (type) { case MOD_LOAD: #ifdef NETGRAPH if (ng_newtype (&typestruct)) printf ("Failed to register ng_cp\n"); #endif ++load_count; callout_init (&timeout_handle, 1); callout_reset (&timeout_handle, hz*5, cp_timeout, 0); break; case MOD_UNLOAD: if (load_count == 1) { printf ("Removing device entry for Tau-PCI\n"); #ifdef NETGRAPH ng_rmtype (&typestruct); #endif } /* If we were wait it than it reasserted now, just stop it. * Actually we shouldn't get this condition. But code could be * changed in the future, so just be a litle paranoid. */ if (!callout_drain (&timeout_handle)) callout_stop (&timeout_handle); --load_count; break; case MOD_SHUTDOWN: break; } return 0; } #ifdef NETGRAPH static struct ng_type typestruct = { .version = NG_ABI_VERSION, .name = NG_CP_NODE_TYPE, .constructor = ng_cp_constructor, .rcvmsg = ng_cp_rcvmsg, .shutdown = ng_cp_rmnode, .newhook = ng_cp_newhook, .connect = ng_cp_connect, .rcvdata = ng_cp_rcvdata, .disconnect = ng_cp_disconnect, }; #endif /*NETGRAPH*/ #ifdef NETGRAPH MODULE_DEPEND (ng_cp, netgraph, NG_ABI_VERSION, NG_ABI_VERSION, NG_ABI_VERSION); #else MODULE_DEPEND (cp, sppp, 1, 1, 1); #endif DRIVER_MODULE (cp, pci, cp_driver, cp_devclass, cp_modevent, NULL); MODULE_VERSION (cp, 1); Index: head/sys/dev/cp/machdep.h =================================================================== --- head/sys/dev/cp/machdep.h (nonexistent) +++ head/sys/dev/cp/machdep.h (revision 359181) @@ -0,0 +1,97 @@ +/*- + * Cronyx DDK: platform dependent definitions. + * + * Copyright (C) 1998-1999 Cronyx Engineering + * Author: Alexander Kvitchenko, + * + * Copyright (C) 2001-2003 Cronyx Engineering. + * Author: Roman Kurakin, + * + * This software is distributed with NO WARRANTIES, not even the implied + * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * Authors grant any other persons or organisations permission to use + * or modify this software as long as this message is kept with the software, + * all derivative works or modified versions. + * + * Cronyx Id: machdep.h,v 1.3.4.3 2003/11/27 14:21:58 rik Exp $ + * $FreeBSD$ + */ + +/* + * DOS (Borland Turbo C++ 1.0) + */ +#if defined (MSDOS) || defined (__MSDOS__) +# include +# include +# define inb(port) inportb(port) +# define inw(port) inport(port) +# define outb(port,b) outportb(port,b) +# define outw(port,w) outport(port,w) +# define GETTICKS() biostime(0,0L) +#else + +/* + * Windows NT + */ +#ifdef NDIS_MINIPORT_DRIVER +# include +# define inb(port) inp((unsigned short)(port)) +# define inw(port) inpw((unsigned short)(port)) +# define outb(port,b) outp((unsigned short)(port),b) +# define outw(port,w) outpw((unsigned short)(port),(unsigned short)(w)) +#pragma warning (disable: 4761) +#pragma warning (disable: 4242) +#pragma warning (disable: 4244) +#define ulong64 unsigned __int64 +#else + +/* + * Linux + */ +#ifdef __linux__ +# undef REALLY_SLOW_IO +# include /* should swap outb() arguments */ +# include +# include + static inline void __ddk_outb (unsigned port, unsigned char byte) + { outb (byte, port); } + static inline void __ddk_outw (unsigned port, unsigned short word) + { outw (word, port); } +# undef outb +# undef outw +# define outb(port,val) __ddk_outb(port, val) +# define outw(port,val) __ddk_outw(port, val) +# define GETTICKS() (jiffies * 200 / 11 / HZ) +#else + +/* + * FreeBSD and BSD/OS + */ +#ifdef __FreeBSD__ +# include +# include +# include +# include +# define port_t int + +#ifndef _SYS_CDEFS_H_ +#error this file needs sys/cdefs.h as a prerequisite +#endif +#endif + +#endif +#endif +#endif + +#ifndef inline +# ifdef __CC_SUPPORTS___INLINE__ +# define inline __inline__ +# else +# define inline /**/ +# endif +#endif + +#ifndef ulong64 +#define ulong64 unsigned long long +#endif Property changes on: head/sys/dev/cp/machdep.h ___________________________________________________________________ Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property