diff options
author | Didier Raboud <odyx@debian.org> | 2017-07-17 21:45:54 +0200 |
---|---|---|
committer | Didier Raboud <odyx@debian.org> | 2017-07-17 21:45:54 +0200 |
commit | 337ffefc0bdf252749c81ebb9255556d54c3e632 (patch) | |
tree | 5d769771acb1ce6b14d5be80ca7775c2d279b404 /src/cups | |
parent | aedf3e93e811c6c9d504274172861d266e1c5c97 (diff) |
New upstream version 5.2.13
Diffstat (limited to 'src/cups')
-rw-r--r-- | src/cups/backend_canonselphy.c | 76 | ||||
-rw-r--r-- | src/cups/backend_canonselphyneo.c | 26 | ||||
-rw-r--r-- | src/cups/backend_citizencw01.c | 16 | ||||
-rw-r--r-- | src/cups/backend_common.c | 14 | ||||
-rw-r--r-- | src/cups/backend_dnpds40.c | 24 | ||||
-rw-r--r-- | src/cups/backend_kodak1400.c | 48 | ||||
-rw-r--r-- | src/cups/backend_kodak605.c | 4 | ||||
-rw-r--r-- | src/cups/backend_kodak6800.c | 8 | ||||
-rw-r--r-- | src/cups/backend_mitsu70x.c | 22 | ||||
-rw-r--r-- | src/cups/backend_mitsu9550.c | 50 | ||||
-rw-r--r-- | src/cups/backend_mitsup95d.c | 6 | ||||
-rw-r--r-- | src/cups/backend_shinkos1245.c | 14 | ||||
-rw-r--r-- | src/cups/backend_shinkos2145.c | 32 | ||||
-rw-r--r-- | src/cups/backend_shinkos6145.c | 90 | ||||
-rw-r--r-- | src/cups/backend_shinkos6245.c | 52 | ||||
-rw-r--r-- | src/cups/backend_sonyupdr150.c | 22 | ||||
-rw-r--r-- | src/cups/blacklist | 2 | ||||
-rw-r--r-- | src/cups/calibrate.ppm | 38 | ||||
-rw-r--r-- | src/cups/commands/SetAlignment.cmd | 1 | ||||
-rw-r--r-- | src/cups/cups-genppdupdate.in | 2 | ||||
-rw-r--r-- | src/cups/genppd.c | 30 | ||||
-rw-r--r-- | src/cups/i18n.c | 2 | ||||
-rwxr-xr-x | src/cups/test-rastertogutenprint.in | 6 |
23 files changed, 283 insertions, 302 deletions
diff --git a/src/cups/backend_canonselphy.c b/src/cups/backend_canonselphy.c index 501cb0a..1fdd3a5 100644 --- a/src/cups/backend_canonselphy.c +++ b/src/cups/backend_canonselphy.c @@ -92,7 +92,7 @@ struct printer_data { int16_t pgcode_offset; /* Offset into printjob for paper type */ int16_t paper_code_offset; /* Offset in readback for paper type */ int (*error_detect)(uint8_t *rdbuf); - char *(*pgcode_names)(uint8_t pgcode); + char *(*pgcode_names)(uint8_t pgcode); }; static char *generic_pgcode_names(uint8_t pgcode) @@ -137,7 +137,7 @@ static int es2_error_detect(uint8_t *rdbuf) ERROR("Printer cover open!\n"); return 1; } - + if (rdbuf[0] == 0x02 && rdbuf[4] == 0x05 && rdbuf[5] == 0x05 && @@ -165,13 +165,13 @@ static int es3_error_detect(uint8_t *rdbuf) ATTR("marker-levels=%d\n", 0); ERROR("No media loaded!\n"); } else { - ERROR("Unknown error - %02x + %02x\n", + ERROR("Unknown error - %02x + %02x\n", rdbuf[8], rdbuf[10]); } return 1; } else if (rdbuf[8] == 0x03 && rdbuf[10] == 0x02) { - ATTR("marker-levels=%d\n", 0); + ATTR("marker-levels=%d\n", 0); ERROR("No media loaded!\n"); return 1; } else if (rdbuf[8] == 0x08 && @@ -185,11 +185,11 @@ static int es3_error_detect(uint8_t *rdbuf) } if (rdbuf[8] || rdbuf[10]) { - ERROR("Unknown error - %02x + %02x\n", + ERROR("Unknown error - %02x + %02x\n", rdbuf[8], rdbuf[10]); return 1; } - + return 0; } @@ -198,7 +198,7 @@ static int es40_error_detect(uint8_t *rdbuf) /* ES40 */ if (!rdbuf[3]) return 0; - + if (rdbuf[3] == 0x01) ERROR("Generic communication error\n"); else if (rdbuf[3] == 0x32) { @@ -206,7 +206,7 @@ static int es40_error_detect(uint8_t *rdbuf) ERROR("Cover open or media empty!\n"); } else ERROR("Unknown error - %02x\n", rdbuf[3]); - + return 1; } @@ -224,7 +224,7 @@ static int cp790_error_detect(uint8_t *rdbuf) if ((rdbuf[3] & 0xf) == 0x02) { // 0x12 0x22 ATTR("marker-levels=%d\n", 0); ERROR("No paper tray loaded!\n"); - } else if ((rdbuf[3] & 0xf) == 0x03) { // 0x13 0x23 + } else if ((rdbuf[3] & 0xf) == 0x03) { // 0x13 0x23 ATTR("marker-levels=%d\n", 0); ERROR("Empty paper tray or feed error!\n"); } else if (rdbuf[3] == 0x11) @@ -253,7 +253,7 @@ static int cp10_error_detect(uint8_t *rdbuf) return 0; if (rdbuf[2] == 0x80) { - ATTR("marker-levels=%d\n", 0); + ATTR("marker-levels=%d\n", 0); ERROR("No ribbon loaded\n"); } else if (rdbuf[2] == 0x08) { ATTR("marker-levels=%d\n", 0); @@ -272,7 +272,7 @@ static int cpxxx_error_detect(uint8_t *rdbuf) return 0; if (rdbuf[2] == 0x01) { - ATTR("marker-levels=%d\n", 0); + ATTR("marker-levels=%d\n", 0); ERROR("Paper feed problem!\n"); } else if (rdbuf[2] == 0x04) ERROR("Ribbon problem!\n"); @@ -363,7 +363,7 @@ static struct printer_data selphy_printers[] = { .pgcode_offset = 2, .paper_code_offset = -1, /* Uses a different technique */ .error_detect = cp790_error_detect, - .pgcode_names = generic_pgcode_names, + .pgcode_names = generic_pgcode_names, }, { .type = P_CP_XXX, .model = "SELPHY CP Series (!CP-10/CP790)", @@ -379,7 +379,7 @@ static struct printer_data selphy_printers[] = { .pgcode_offset = 3, .paper_code_offset = 6, .error_detect = cpxxx_error_detect, - .pgcode_names = generic_pgcode_names, + .pgcode_names = generic_pgcode_names, }, { .type = P_CP10, .model = "SELPHY CP-10", @@ -395,7 +395,7 @@ static struct printer_data selphy_printers[] = { .pgcode_offset = 2, .paper_code_offset = -1, .error_detect = cp10_error_detect, - .pgcode_names = cp10_pgcode_names, + .pgcode_names = cp10_pgcode_names, }, { .type = -1 }, }; @@ -411,7 +411,7 @@ static void setup_paper_codes(void) if (selphy_printers[i].type == -1) break; /* Default all to IGNORE */ - for (j = 0 ; j < 256 ; j++) + for (j = 0 ; j < 256 ; j++) selphy_printers[i].paper_codes[j] = -1; /* Set up specifics */ @@ -467,10 +467,10 @@ enum { S_FINISHED, }; -static int fancy_memcmp(const uint8_t *buf_a, const int16_t *buf_b, uint len) +static int fancy_memcmp(const uint8_t *buf_a, const int16_t *buf_b, uint len) { uint i; - + for (i = 0 ; i < len ; i++) { if (buf_b[i] == -1) continue; @@ -482,7 +482,7 @@ static int fancy_memcmp(const uint8_t *buf_a, const int16_t *buf_b, uint len) return 0; } -static int parse_printjob(uint8_t *buffer, uint8_t *bw_mode, uint32_t *plane_len) +static int parse_printjob(uint8_t *buffer, uint8_t *bw_mode, uint32_t *plane_len) { int printer_type = -1; @@ -490,7 +490,7 @@ static int parse_printjob(uint8_t *buffer, uint8_t *bw_mode, uint32_t *plane_len buffer[1] != 0x00) { goto done; } - + if (buffer[12] == 0x40 && buffer[13] == 0x01) { *plane_len = *(uint32_t*)(&buffer[16]); @@ -599,7 +599,7 @@ static void *canonselphy_init(void) extern struct dyesub_backend canonselphy_backend; -static void canonselphy_attach(void *vctx, struct libusb_device_handle *dev, +static void canonselphy_attach(void *vctx, struct libusb_device_handle *dev, uint8_t endp_up, uint8_t endp_down, uint8_t jobid) { struct canonselphy_ctx *ctx = vctx; @@ -678,7 +678,7 @@ static int canonselphy_read_parse(void *vctx, int data_fd) if (i != MAX_HEADER - offset) { if (i == 0) return CUPS_BACKEND_CANCEL; - ERROR("Read failed (%d/%d)\n", + ERROR("Read failed (%d/%d)\n", i, MAX_HEADER - offset); perror("ERROR: Read failed"); return CUPS_BACKEND_FAILED; @@ -691,9 +691,9 @@ static int canonselphy_read_parse(void *vctx, int data_fd) if (ctx->type == P_CP790) printer_type = P_CP790; else - printer_type = P_ES40; + printer_type = P_ES40; } - + /* Look up the printer entry */ for (i = 0; selphy_printers[i].type != -1; i++) { if (selphy_printers[i].type == printer_type) { @@ -758,7 +758,7 @@ static int canonselphy_read_parse(void *vctx, int data_fd) /* Move over chunks already read in */ memcpy(ctx->header, ctx->buffer, ctx->printer->init_length); - memcpy(ctx->plane_y, ctx->buffer+ctx->printer->init_length, + memcpy(ctx->plane_y, ctx->buffer+ctx->printer->init_length, MAX_HEADER-ctx->printer->init_length); /* Read in YELLOW plane */ @@ -864,7 +864,7 @@ top: INFO("Waiting for printer idle\n"); if (fancy_memcmp(rdbuf, ctx->printer->init_readback, READBACK_LEN)) break; - + /* Make sure paper/ribbon is correct */ if (ctx->paper_code != -1) { if (ctx->type == P_CP_XXX) { @@ -892,7 +892,7 @@ top: } else { if (rdbuf[ctx->printer->paper_code_offset] != ctx->paper_code) { - ERROR("Incorrect media/ribbon loaded (%02x vs %02x), aborting job!\n", + ERROR("Incorrect media/ribbon loaded (%02x vs %02x), aborting job!\n", ctx->paper_code, rdbuf[ctx->printer->paper_code_offset]); return CUPS_BACKEND_HOLD; /* Hold this job, don't stop queue */ @@ -904,7 +904,7 @@ top: if (ribbon == 0xf) { ERROR("No ribbon loaded, aborting!\n"); - return CUPS_BACKEND_STOP; + return CUPS_BACKEND_STOP; } else if (ribbon != ctx->paper_code) { ERROR("Incorrect ribbon loaded, aborting job!\n"); return CUPS_BACKEND_HOLD; @@ -977,7 +977,7 @@ top: if (!fancy_memcmp(rdbuf, ctx->printer->done_c_readback, READBACK_LEN)) { if (ctx->cp900) state = S_PRINTER_CP900_FOOTER; - else + else state = S_FINISHED; } break; @@ -985,7 +985,7 @@ top: uint32_t empty = 0; INFO("Sending CP900 Footer\n"); - if ((ret = send_data(ctx->dev, ctx->endp_down, + if ((ret = send_data(ctx->dev, ctx->endp_down, (uint8_t*)&empty, sizeof(empty)))) return CUPS_BACKEND_FAILED; @@ -1002,7 +1002,7 @@ top: state = S_FINISHED; /* Intentional Fallthrough */ case S_FINISHED: - INFO("All data sent to printer!\n"); + INFO("All data sent to printer!\n"); break; } if (state != S_FINISHED) @@ -1177,7 +1177,7 @@ struct dyesub_backend canonselphy_backend = { 16 01 00 00 [pg] 00 [pg2] 00 00 00 00 00 [error, cover open] 02 00 00 00 05 05 02 00 00 00 00 00 [error, no media] - [xx] can be 0x00 or 0xff, depending on if a previous print job has + [xx] can be 0x00 or 0xff, depending on if a previous print job has completed or not. [pg] is: 0x01 for P-papers @@ -1193,7 +1193,7 @@ struct dyesub_backend canonselphy_backend = { Selphy ES3/30: Init func: 40 00 [pgcode] [type] 00 00 00 00 00 00 00 00 [length, 32-bit LE] - Plane func: 40 01 [plane] 00 00 00 00 00 00 00 00 00 + Plane func: 40 01 [plane] 00 00 00 00 00 00 00 00 00 End func: 40 20 00 00 00 00 00 00 00 00 00 00 @@ -1232,7 +1232,7 @@ struct dyesub_backend canonselphy_backend = { Selphy ES40: Init func: 40 00 [pgcode] [type] 00 00 00 00 00 00 00 00 [length, 32-bit LE] - Plane func: 40 01 [plane] 00 00 00 00 00 00 00 00 00 + Plane func: 40 01 [plane] 00 00 00 00 00 00 00 00 00 End func: 40 20 00 00 00 00 00 00 00 00 00 00 @@ -1276,7 +1276,7 @@ struct dyesub_backend canonselphy_backend = { Selphy CP790: Init func: 40 00 [pgcode] 00 00 00 00 00 00 00 00 00 [length, 32-bit LE] - Plane func: 40 01 [plane] 00 00 00 00 00 00 00 00 00 + Plane func: 40 01 [plane] 00 00 00 00 00 00 00 00 00 End func: 40 20 00 00 00 00 00 00 00 00 00 00 @@ -1293,7 +1293,7 @@ struct dyesub_backend canonselphy_backend = { 00 00 ff 00 [pg1] [pg2] 00 00 00 00 00 02 00 00 00 00 [pg1] [pg2] 00 00 00 00 00 02 [idle, ready for header] - 00 00 01 00 [pg1] [pg2] 00 00 00 00 00 02 + 00 00 01 00 [pg1] [pg2] 00 00 00 00 00 02 00 01 01 00 [pg1] [pg2] 00 00 00 00 00 02 [ready for Y data] 00 03 01 00 [pg1] [pg2] 00 00 00 00 00 02 [transitions to this] 00 03 02 00 [pg1] [pg2] 00 00 00 00 00 02 [ready for M data] @@ -1326,7 +1326,7 @@ struct dyesub_backend canonselphy_backend = { Selphy CP-10: Init func: 40 00 00 00 00 00 00 00 00 00 00 00 - Plane func: 40 01 00 [plane] [length, 32-bit LE] 00 00 00 00 + Plane func: 40 01 00 [plane] [length, 32-bit LE] 00 00 00 00 plane codes are 0x00, 0x01, 0x02 for Y, M, and C, respectively. @@ -1353,13 +1353,13 @@ struct dyesub_backend canonselphy_backend = { *************************************************************************** Selphy CP-series (except for CP790 & CP-10): - + This is known to apply to: CP-100, CP-200, CP-300, CP-330, CP400, CP500, CP510, CP710, CP720, CP730, CP740, CP750, CP760, CP770, CP780, CP800, CP900 Init func: 40 00 00 [pgcode] 00 00 00 00 00 00 00 00 - Plane func: 40 01 00 [plane] [length, 32-bit LE] 00 00 00 00 + Plane func: 40 01 00 [plane] [length, 32-bit LE] 00 00 00 00 End func: 00 00 00 00 # NOTE: Present (and necessary) on CP900 only. Error clear: 40 10 00 00 00 00 00 00 00 00 00 00 diff --git a/src/cups/backend_canonselphyneo.c b/src/cups/backend_canonselphyneo.c index e72b9db..85f51b2 100644 --- a/src/cups/backend_canonselphyneo.c +++ b/src/cups/backend_canonselphyneo.c @@ -154,7 +154,7 @@ static void *selphyneo_init(void) extern struct dyesub_backend selphyneo_backend; -static void selphyneo_attach(void *vctx, struct libusb_device_handle *dev, +static void selphyneo_attach(void *vctx, struct libusb_device_handle *dev, uint8_t endp_up, uint8_t endp_down, uint8_t jobid) { struct selphyneo_ctx *ctx = vctx; @@ -197,7 +197,7 @@ static int selphyneo_read_parse(void *vctx, int data_fd) if (i != sizeof(hdr)) { if (i == 0) return CUPS_BACKEND_CANCEL; - ERROR("Read failed (%d/%d)\n", + ERROR("Read failed (%d/%d)\n", i, (int)sizeof(hdr)); perror("ERROR: Read failed"); return CUPS_BACKEND_FAILED; @@ -215,19 +215,19 @@ static int selphyneo_read_parse(void *vctx, int data_fd) hdr.data[10], le32_to_cpu(hdr.cols), le32_to_cpu(hdr.rows)); return CUPS_BACKEND_CANCEL; } - + /* Allocate a buffer */ ctx->datalen = 0; ctx->databuf = malloc(remain + sizeof(hdr)); if (!ctx->databuf) { ERROR("Memory allocation failure!\n"); return CUPS_BACKEND_FAILED; - } + } /* Store the read-in header */ memcpy(ctx->databuf, &hdr, sizeof(hdr)); ctx->datalen += sizeof(hdr); - + /* Read in data */ while (remain > 0) { i = read(data_fd, ctx->databuf + ctx->datalen, remain); @@ -243,7 +243,7 @@ static int selphyneo_read_parse(void *vctx, int data_fd) static int selphyneo_main_loop(void *vctx, int copies) { struct selphyneo_ctx *ctx = vctx; struct selphyneo_readback rdback; - + int ret, num; /* Read in the printer status to clear last state */ @@ -261,13 +261,13 @@ static int selphyneo_main_loop(void *vctx, int copies) { ATTR("marker-types=ribbonWax\n"); -top: +top: INFO("Waiting for printer idle\n"); do { ret = read_data(ctx->dev, ctx->endp_up, (uint8_t*) &rdback, sizeof(rdback), &num); - + if (ret < 0) return CUPS_BACKEND_FAILED; @@ -294,7 +294,7 @@ top: ATTR("marker-levels=%d\n", -3); /* ie Unknown but OK */ - INFO("Sending spool data\n"); + INFO("Sending spool data\n"); /* Send the data over in 256K chunks */ { int chunk = 256*1024; @@ -318,7 +318,7 @@ top: do { ret = read_data(ctx->dev, ctx->endp_up, (uint8_t*) &rdback, sizeof(rdback), &num); - + if (ret < 0) return CUPS_BACKEND_FAILED; @@ -374,7 +374,7 @@ static int selphyneo_cmdline_arg(void *vctx, int argc, char **argv) GETOPT_PROCESS_GLOBAL case 'R': selphyneo_send_reset(ctx); - break; + break; } if (j) return j; @@ -443,7 +443,7 @@ struct dyesub_backend canonselphyneo_backend = { L == 5087264 == 1695744 * 3 + 32 (1472*1152) C == 2180384 == 726784 * 3 + 32 (1088*668) - It is worth mentioning that the Y'CbCr image data is surmised to use the + It is worth mentioning that the Y'CbCr image data is surmised to use the JPEG coefficients, although we realistically have no way of confirming this. Other questions: @@ -474,7 +474,7 @@ struct dyesub_backend canonselphyneo_backend = { ZZ == Media? - 01 + 01 10 11 ^-- Ribbon diff --git a/src/cups/backend_citizencw01.c b/src/cups/backend_citizencw01.c index 0987916..46cb8ee 100644 --- a/src/cups/backend_citizencw01.c +++ b/src/cups/backend_citizencw01.c @@ -310,7 +310,7 @@ static void cw01_attach(void *vctx, struct libusb_device_handle *dev, device = libusb_get_device(dev); libusb_get_device_descriptor(device, &desc); - + ctx->type = lookup_printer_type(&cw01_backend, desc.idVendor, desc.idProduct); } @@ -339,7 +339,7 @@ static int cw01_read_parse(void *vctx, int data_fd) { } i = read(data_fd, (uint8_t*) &ctx->hdr, sizeof(struct cw01_spool_hdr)); - + if (i < 0) return i; if (i == 0) @@ -347,7 +347,7 @@ static int cw01_read_parse(void *vctx, int data_fd) { if (i < (int)sizeof(struct cw01_spool_hdr)) return CUPS_BACKEND_CANCEL; - + if (ctx->hdr.type > 0x06 || ctx->hdr.res > 0x01) { ERROR("Unrecognized header data format!\n"); return CUPS_BACKEND_CANCEL; @@ -409,7 +409,7 @@ top: if (!resp) return CUPS_BACKEND_FAILED; cw01_cleanup_string((char*)resp, len); - + /* Check to see if we have sufficient buffers */ // XXX audit these rules...? if (!strcmp("FBP00", (char*)resp) || @@ -620,7 +620,7 @@ static int cw01_get_info(struct cw01_ctx *ctx) cw01_cleanup_string((char*)resp, len); - INFO("Media Lot Code: '%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x'\n", + INFO("Media Lot Code: '%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x'\n", *(resp+2), *(resp+3), *(resp+4), *(resp+5), *(resp+6), *(resp+7), *(resp+8), *(resp+9), *(resp+10), *(resp+11), *(resp+12), *(resp+13)); @@ -874,7 +874,7 @@ struct dyesub_backend cw01_backend = { } }; -/* +/* Basic spool file format: @@ -888,7 +888,7 @@ TT RR NN 00 XX XX XX XX 00 00 00 00 <- FILE header. Followed by three planes, each with this header: -28 00 00 00 00 08 00 00 RR RR 00 00 01 00 08 00 +28 00 00 00 00 08 00 00 RR RR 00 00 01 00 08 00 00 00 00 00 00 00 00 00 5a 33 00 00 YY YY 00 00 00 01 00 00 00 00 00 00 @@ -897,7 +897,7 @@ Followed by three planes, each with this header: Followed by 1024 bytes of color tables: - ff ff ff 00 ... 00 00 00 00 + ff ff ff 00 ... 00 00 00 00 1024+40 = 1064 bytes of header per plane. diff --git a/src/cups/backend_common.c b/src/cups/backend_common.c index 959eee4..d88a7d8 100644 --- a/src/cups/backend_common.c +++ b/src/cups/backend_common.c @@ -226,7 +226,7 @@ done: return ret; } -int send_data(struct libusb_device_handle *dev, uint8_t endp, +int send_data(struct libusb_device_handle *dev, uint8_t endp, uint8_t *buf, int len) { int num = 0; @@ -312,7 +312,7 @@ static char *url_encode(char *str) { } while (*pstr) { - if (isalnum(*pstr) || *pstr == '-' || *pstr == '_' || *pstr == '.' || *pstr == '~') + if (isalnum(*pstr) || *pstr == '-' || *pstr == '_' || *pstr == '.' || *pstr == '~') *pbuf++ = *pstr; else if (*pstr == ' ') *pbuf++ = '+'; @@ -404,7 +404,7 @@ static int print_scan_output(struct libusb_device *device, break; } - /* Query IEEE1284 info only if it's a PRINTER class */ + /* Query IEEE1284 info only if it's a PRINTER class */ if (desc->bDeviceClass == LIBUSB_CLASS_PRINTER || (desc->bDeviceClass == LIBUSB_CLASS_PER_INTERFACE && config->interface[iface].altsetting[altset].bInterfaceClass == LIBUSB_CLASS_PRINTER)) { @@ -513,7 +513,7 @@ static int print_scan_output(struct libusb_device *device, strncpy(buf + k, product, sizeof(buf)-k); fprintf(stdout, "direct %s://%s?serial=%s&backend=%s \"%s\" \"%s\" \"%s\" \"\"\n", - prefix, buf, serial, backend->uri_prefix, + prefix, buf, serial, backend->uri_prefix, descr, descr, ieee_id? ieee_id : ""); } @@ -571,7 +571,7 @@ extern struct dyesub_backend cw01_backend; static struct dyesub_backend *backends[] = { &canonselphy_backend, - &canonselphyneo_backend, + &canonselphyneo_backend, &kodak6800_backend, &kodak605_backend, &kodak1400_backend, @@ -582,7 +582,7 @@ static struct dyesub_backend *backends[] = { &updr150_backend, &mitsu70x_backend, &mitsu9550_backend, - &mitsup95d_backend, + &mitsup95d_backend, &dnpds40_backend, &cw01_backend, NULL, @@ -942,7 +942,7 @@ int main (int argc, char **argv) endp_down = config->interface[iface].altsetting[altset].endpoint[i].bEndpointAddress; } if (endp_up && endp_down) - break; + break; } if (config) diff --git a/src/cups/backend_dnpds40.c b/src/cups/backend_dnpds40.c index 68f2293..43fac69 100644 --- a/src/cups/backend_dnpds40.c +++ b/src/cups/backend_dnpds40.c @@ -33,7 +33,7 @@ //#define DNP_ONLY -/* Enables caching of last print type to speed up +/* Enables caching of last print type to speed up job pipelining. Without this we always have to assume the worst */ //#define STATE_DIR "/tmp" @@ -88,7 +88,7 @@ struct dnpds40_ctx { uint32_t last_multicut; int last_matte; - int fullcut; + int fullcut; int matte; int cutter; int can_rewind; @@ -105,7 +105,7 @@ struct dnpds40_ctx { int supports_3x5x2; int supports_matte; int supports_finematte; - int supports_luster; + int supports_luster; int supports_advmatte; int supports_fullcut; int supports_rewind; @@ -419,7 +419,7 @@ static int dnpds40_do_cmd(struct dnpds40_ctx *ctx, (uint8_t*)cmd, sizeof(*cmd)))) return ret; - if (data && len) + if (data && len) if ((ret = send_data(ctx->dev, ctx->endp_down, data, len))) return ret; @@ -881,10 +881,10 @@ static int dnpds40_read_parse(void *vctx, int data_fd) { } /* There's no way to figure out the total job length in advance, we - have to parse the stream until we get to the image plane data, + have to parse the stream until we get to the image plane data, and even then the stream can contain arbitrary commands later. - So instead, we allocate a buffer of the maximum possible length, + So instead, we allocate a buffer of the maximum possible length, then parse the incoming stream until we hit the START command at the end of the job. */ @@ -910,7 +910,7 @@ static int dnpds40_read_parse(void *vctx, int data_fd) { while (run) { int remain, i, j; /* Read in command header */ - i = read(data_fd, ctx->databuf + ctx->datalen, + i = read(data_fd, ctx->databuf + ctx->datalen, sizeof(struct dnpds40_cmd)); if (i < 0) return i; @@ -932,7 +932,7 @@ static int dnpds40_read_parse(void *vctx, int data_fd) { /* Read in data chunk as quickly as possible */ remain = j; while (remain > 0) { - i = read(data_fd, ctx->databuf + ctx->datalen + sizeof(struct dnpds40_cmd), + i = read(data_fd, ctx->databuf + ctx->datalen + sizeof(struct dnpds40_cmd), remain); if (i < 0) { ERROR("Data Read Error: %d (%d/%d @%d)\n", i, remain, j, ctx->datalen); @@ -948,7 +948,7 @@ static int dnpds40_read_parse(void *vctx, int data_fd) { /* Check for some offsets */ if(!memcmp("CNTRL QTY", ctx->databuf + ctx->datalen+2, 9)) { /* Ignore this. We will insert our own later on */ - continue; + continue; } if(!memcmp("CNTRL CUTTER", ctx->databuf + ctx->datalen+2, 12)) { memcpy(buf, ctx->databuf + ctx->datalen + 32, 8); @@ -1125,7 +1125,7 @@ static int dnpds40_read_parse(void *vctx, int data_fd) { case P_DNP_DS80D: if (ctx->matte) { int mcut = ctx->multicut; - + if (mcut > MULTICUT_S_BACK) mcut -= MULTICUT_S_BACK; else if (mcut > MULTICUT_S_FRONT) @@ -1945,7 +1945,7 @@ static int dnpds40_get_info(struct dnpds40_ctx *ctx) dnpds40_cleanup_string((char*)resp, len); i = atoi((char*)resp); - + INFO("Standby Transition time: %d minutes\n", i); free(resp); @@ -1960,7 +1960,7 @@ static int dnpds40_get_info(struct dnpds40_ctx *ctx) dnpds40_cleanup_string((char*)resp, len); i = atoi((char*)resp); INFO("Media End kept across power cycles: %s\n", - i ? "Yes" : "No"); + i ? "Yes" : "No"); free(resp); } diff --git a/src/cups/backend_kodak1400.c b/src/cups/backend_kodak1400.c index 6851385..e87307f 100644 --- a/src/cups/backend_kodak1400.c +++ b/src/cups/backend_kodak1400.c @@ -100,7 +100,7 @@ static int send_plane(struct kodak1400_ctx *ctx, cmdbuf[1] = 0x74; cmdbuf[2] = 0x00; cmdbuf[3] = 0x50; - + if ((ret = send_data(ctx->dev, ctx->endp_down, cmdbuf, CMDBUF_LEN))) return ret; @@ -127,7 +127,7 @@ static int send_plane(struct kodak1400_ctx *ctx, int i; for (i = 0 ; i < ctx->hdr.rows ; i++) { if ((ret = send_data(ctx->dev, ctx->endp_down, - planedata + i * ctx->hdr.columns, + planedata + i * ctx->hdr.columns, ctx->hdr.columns))) return ret; } @@ -138,7 +138,7 @@ static int send_plane(struct kodak1400_ctx *ctx, cmdbuf[1] = 0x74; cmdbuf[2] = 0x01; cmdbuf[3] = 0x50; - + if ((ret = send_data(ctx->dev, ctx->endp_down, cmdbuf, CMDBUF_LEN))) return ret; @@ -194,10 +194,10 @@ static int kodak1400_set_tonecurve(struct kodak1400_ctx *ctx, char *fname) ret = -3; goto done; } - + ret = read_data(dev, endp_up, respbuf, sizeof(respbuf), &num); - + if (ret < 0) goto done; if (num != 8) { @@ -231,7 +231,7 @@ static int kodak1400_set_tonecurve(struct kodak1400_ctx *ctx, char *fname) /* get the response */ ret = read_data(dev, endp_up, respbuf, sizeof(respbuf), &num); - + if (ret < 0) goto done; if (num != 8) { @@ -288,11 +288,11 @@ static void *kodak1400_init(void) return NULL; } memset(ctx, 0, sizeof(struct kodak1400_ctx)); - + return ctx; } -static void kodak1400_attach(void *vctx, struct libusb_device_handle *dev, +static void kodak1400_attach(void *vctx, struct libusb_device_handle *dev, uint8_t endp_up, uint8_t endp_down, uint8_t jobid) { struct kodak1400_ctx *ctx = vctx; @@ -352,7 +352,7 @@ static int kodak1400_read_parse(void *vctx, int data_fd) { if (ret < 0 || ret != sizeof(ctx->hdr)) { if (ret == 0) return CUPS_BACKEND_CANCEL; - ERROR("Read failed (%d/%d/%d)\n", + ERROR("Read failed (%d/%d/%d)\n", ret, 0, (int)sizeof(ctx->hdr)); perror("ERROR: Read failed"); return CUPS_BACKEND_CANCEL; @@ -367,7 +367,7 @@ static int kodak1400_read_parse(void *vctx, int data_fd) { ctx->hdr.planesize = le32_to_cpu(ctx->hdr.planesize); ctx->hdr.rows = le16_to_cpu(ctx->hdr.rows); ctx->hdr.columns = le16_to_cpu(ctx->hdr.columns); - + /* Set up plane data */ ctx->plane_r = malloc(ctx->hdr.planesize); ctx->plane_g = malloc(ctx->hdr.planesize); @@ -392,7 +392,7 @@ static int kodak1400_read_parse(void *vctx, int data_fd) { do { ret = read(data_fd, ptr, remain); if (ret < 0) { - ERROR("Read failed (%d/%d/%u) (%d/%u @ %d)\n", + ERROR("Read failed (%d/%d/%u) (%d/%u @ %d)\n", ret, remain, ctx->hdr.columns, i, ctx->hdr.rows, j); perror("ERROR: Read failed"); @@ -437,7 +437,7 @@ top: /* Read in the printer status */ ret = read_data(ctx->dev, ctx->endp_up, rdbuf, READBACK_LEN, &num); - + if (ret < 0) return CUPS_BACKEND_FAILED; if (memcmp(rdbuf, rdbuf2, READBACK_LEN)) { @@ -454,7 +454,7 @@ top: return CUPS_BACKEND_STOP; // HOLD/CANCEL/FAILED? XXXX parse error! } - fflush(stderr); + fflush(stderr); switch (state) { case S_IDLE: @@ -645,14 +645,14 @@ struct dyesub_backend kodak1400_backend = { XX 01 to laminate, 00 to not. 01 Unknown, always set to 01 XX Lamination Strength: - + 3c Glossy 28 Matte +5 2e Matte +4 34 Matte +3 3a Matte +2 40 Matte +1 - 46 Matte + 46 Matte 52 Matte -1 5e Matte -2 6a Matte -3 @@ -669,7 +669,7 @@ struct dyesub_backend kodak1400_backend = { All readback values are 8 bytes long. Multi-byte numbers are sent BIG ENDIAN. - + Image data is sent via planes, one scanline per URB. <-- 1b 72 # Status query @@ -677,7 +677,7 @@ struct dyesub_backend kodak1400_backend = { <-- 1b 00 # Reset/attention? <-- 1b 5a 53 0a 00 0b c2 # Setup (ie hdr.columns and hdr.rows) - <-- 1b 59 01 # ?? hdr.matte ? + <-- 1b 59 01 # ?? hdr.matte ? <-- 1b 60 XX # hdr.lamination <-- 1b 62 XX # hdr.lam_strength <-- 1b 61 01 # ?? hdr.unk1 ? @@ -688,7 +688,7 @@ struct dyesub_backend kodak1400_backend = { <-- row last <-- 1b 74 01 50 # ?? - + <-- 1b 72 # Status query --> e4 72 00 00 00 00 50 59 # Printing plane 1 [ repeats until...] @@ -760,21 +760,21 @@ struct dyesub_backend kodak1400_backend = { Calibration data: <-- 1b a2 # ?? Reset cal tables? - --> 00 01 00 00 00 00 00 00 + --> 00 01 00 00 00 00 00 00 <-- 1b a0 02 03 06 10 # 06 10 == 1552 bytes aka the CAL data. <-- cal data - [[ Data is organized as three blocks of 512 bytes followed by - 16 NULL bytes. + [[ Data is organized as three blocks of 512 bytes followed by + 16 NULL bytes. - Each block appears to be 256 entries of 16-bit LE data, + Each block appears to be 256 entries of 16-bit LE data, so each input value is translated into a 16-bit number in the printer. Assuming blocks are ordered BGR. - ]] + ]] - --> 00 00 00 00 00 00 00 00 + --> 00 00 00 00 00 00 00 00 */ diff --git a/src/cups/backend_kodak605.c b/src/cups/backend_kodak605.c index ac4367a..b301739 100644 --- a/src/cups/backend_kodak605.c +++ b/src/cups/backend_kodak605.c @@ -291,7 +291,7 @@ static int kodak605_read_parse(void *vctx, int data_fd) { if (ret < 0 || ret != sizeof(ctx->hdr)) { if (ret == 0) return CUPS_BACKEND_CANCEL; - ERROR("Read failed (%d/%d/%d)\n", + ERROR("Read failed (%d/%d/%d)\n", ret, 0, (int)sizeof(ctx->hdr)); perror("ERROR: Read failed"); return CUPS_BACKEND_CANCEL; @@ -683,7 +683,7 @@ struct dyesub_backend kodak605_backend = { .teardown = kodak605_teardown, .read_parse = kodak605_read_parse, .main_loop = kodak605_main_loop, - .devices = { + .devices = { { USB_VID_KODAK, USB_PID_KODAK_605, P_KODAK_605, "Kodak"}, { 0, 0, 0, ""} } diff --git a/src/cups/backend_kodak6800.c b/src/cups/backend_kodak6800.c index 9df4200..f535797 100644 --- a/src/cups/backend_kodak6800.c +++ b/src/cups/backend_kodak6800.c @@ -930,7 +930,7 @@ static int kodak6850_send_unk(struct kodak6800_ctx *ctx) return CUPS_BACKEND_FAILED; } -#if 0 +#if 0 // XXX No particular idea what this actually is if (rdbuf[1] != 0x01 && rdbuf[1] != 0x00) { ERROR("Unexpected status code (0x%02x)!\n", rdbuf[1]); @@ -947,7 +947,7 @@ static void kodak6800_cmdline(void) DEBUG("\t\t[ -m ] # Query media\n"); DEBUG("\t\t[ -s ] # Query status\n"); DEBUG("\t\t[ -R ] # Reset printer\n"); - DEBUG("\t\t[ -X jobid ] # Cancel Job\n"); + DEBUG("\t\t[ -X jobid ] # Cancel Job\n"); } static int kodak6800_cmdline_arg(void *vctx, int argc, char **argv) @@ -1009,7 +1009,7 @@ static void *kodak6800_init(void) return ctx; } -static void kodak6800_attach(void *vctx, struct libusb_device_handle *dev, +static void kodak6800_attach(void *vctx, struct libusb_device_handle *dev, uint8_t endp_up, uint8_t endp_down, uint8_t jobid) { struct kodak6800_ctx *ctx = vctx; @@ -1095,7 +1095,7 @@ static int kodak6800_read_parse(void *vctx, int data_fd) { do { ret = read(data_fd, ptr, remain); if (ret < 0) { - ERROR("Read failed (%d/%d/%d)\n", + ERROR("Read failed (%d/%d/%d)\n", ret, remain, ctx->datalen); perror("ERROR: Read failed"); return CUPS_BACKEND_CANCEL; diff --git a/src/cups/backend_mitsu70x.c b/src/cups/backend_mitsu70x.c index 39a94e4..60d99dd 100644 --- a/src/cups/backend_mitsu70x.c +++ b/src/cups/backend_mitsu70x.c @@ -43,7 +43,7 @@ #if defined(USE_DLOPEN) #define WITH_DYNAMIC #include <dlfcn.h> -#define DL_INIT() do {} while(0) +#define DL_INIT() do {} while(0) #define DL_OPEN(__x) dlopen(__x, RTLD_NOW) #define DL_SYM(__x, __y) dlsym(__x, __y) #define DL_CLOSE(__x) dlclose(__x) @@ -175,7 +175,7 @@ struct mitsu70x_ctx { int sharpen; /* ie mhdr.sharpen - 1 */ uint8_t rew[2]; /* 1 for rewind ok (default!) */ - + struct BandImage output; }; @@ -350,7 +350,7 @@ struct mitsu70x_memorystatus_resp { uint8_t rsvd; } __attribute__((packed)); -// XXX also seen commands 0x67, 0x72, 0x54, 0x6e +// XXX also seen commands 0x67, 0x72, 0x54, 0x6e struct mitsu70x_hdr { uint8_t hdr[4]; /* 1b 5a 54 XX */ // XXX also, seen 1b 5a 43! @@ -411,14 +411,14 @@ static char *mitsu70x_jobstatuses(uint8_t *sts) return "Data transfer"; case JOB_STATUS0_QUEUE: return "Queued for printing"; - case JOB_STATUS0_PRINT: + case JOB_STATUS0_PRINT: switch(sts[1]) { case JOB_STATUS1_PRINT_MEDIALOAD: return "Media loading"; case JOB_STATUS1_PRINT_PRE_Y: return "Waiting to print yellow plane"; case JOB_STATUS1_PRINT_Y: - return "Printing yellow plane"; + return "Printing yellow plane"; case JOB_STATUS1_PRINT_PRE_M: return "Waiting to print magenta plane"; case JOB_STATUS1_PRINT_M: @@ -699,7 +699,7 @@ static void mitsu70x_attach(void *vctx, struct libusb_device_handle *dev, ctx->dl_handle = NULL; return; } - + ctx->Get3DColorTable = DL_SYM(ctx->dl_handle, "CColorConv3D_Get3DColorTable"); ctx->Load3DColorTable = DL_SYM(ctx->dl_handle, "CColorConv3D_Load3DColorTable"); ctx->Destroy3DColorTable = DL_SYM(ctx->dl_handle, "CColorConv3D_Destroy3DColorTable"); @@ -1466,7 +1466,7 @@ top: mitsu70x_media_types(resp.lower.media_brand, resp.lower.media_type)); ATTR("marker-types=ribbonWax\n"); } - + /* FW sanity checking */ if (ctx->type == P_KODAK_305) { if (be16_to_cpu(resp.vers[0].checksum) != EK305_0104_M_CSUM) @@ -1503,7 +1503,7 @@ skip_status: { int i; struct mitsu70x_jobs jobs; - + ret = mitsu70x_get_jobs(ctx, &jobs); if (ret) return CUPS_BACKEND_FAILED; @@ -1659,7 +1659,7 @@ skip_status: } /* Update cache for the next round */ - memcpy(last_status, jobstatus.job_status, 4); + memcpy(last_status, jobstatus.job_status, 4); } while(1); /* Clean up */ @@ -1707,7 +1707,7 @@ static void mitsu70x_dump_printerstatus(struct mitsu70x_printerstatus_resp *resp type, buf, be16_to_cpu(resp->vers[i].checksum)); } INFO("Standby Timeout: %d minutes\n", resp->sleeptime); - INFO("iSerial Reporting: %s\n", resp->iserial ? "No" : "Yes" ); + INFO("iSerial Reporting: %s\n", resp->iserial ? "No" : "Yes" ); INFO("Lower Mechanical Status: %s\n", mitsu70x_mechastatus(resp->lower.mecha_status)); @@ -1759,7 +1759,7 @@ static int mitsu70x_query_status(struct mitsu70x_ctx *ctx) struct mitsu70x_printerstatus_resp resp; #if 0 struct mitsu70x_jobs jobs; -#endif +#endif struct mitsu70x_jobstatus jobstatus; int ret; diff --git a/src/cups/backend_mitsu9550.c b/src/cups/backend_mitsu9550.c index 907c773..71b38de 100644 --- a/src/cups/backend_mitsu9550.c +++ b/src/cups/backend_mitsu9550.c @@ -526,7 +526,7 @@ static char *mitsu9550_media_types(uint8_t type, uint8_t is_s) } return NULL; } - + switch (type & 0xf) { /* values can be 0x0? or 0x4? */ case 0x01: return "CK9035 (3.5x5)"; @@ -556,7 +556,7 @@ static int validate_media(int type, int media, int cols, int rows) return 1; break; case 0x02: /* 4x6 */ - case 0x03: /* 4x6 postcard */ + case 0x03: /* 4x6 postcard */ if (cols != 2152) return 1; if (rows != 1416 && rows != 1184 && rows != 1240) @@ -707,7 +707,7 @@ static int validate_media(int type, int media, int cols, int rows) case P_MITSU_9800S: switch(media & 0xf) { case 0x02: /* 4x6 */ - case 0x03: /* 4x6 postcard */ + case 0x03: /* 4x6 postcard */ if (cols != 1868 && rows != 1228) return 1; break; @@ -837,20 +837,20 @@ top: if (ctx->hdr4_present) if ((ret = send_data(ctx->dev, ctx->endp_down, (uint8_t*) &ctx->hdr4, sizeof(struct mitsu9550_hdr4)))) - return CUPS_BACKEND_FAILED; - + return CUPS_BACKEND_FAILED; + if (ctx->is_s) { /* Send "start data" command */ cmd.cmd[0] = 0x1b; cmd.cmd[1] = 0x5a; cmd.cmd[2] = 0x43; cmd.cmd[3] = 0x00; - + if ((ret = send_data(ctx->dev, ctx->endp_down, (uint8_t*) &cmd, sizeof(cmd)))) return CUPS_BACKEND_FAILED; } - + /* Send over plane data */ while(1) { struct mitsu9550_plane *plane = (struct mitsu9550_plane *)ptr; @@ -878,7 +878,7 @@ top: // struct mitsu9550_status2 *sts2 = (struct mitsu9550_status2*) rdbuf; struct mitsu9550_media *media = (struct mitsu9550_media *) rdbuf; uint16_t donor, remain; - + ret = mitsu9550_get_status(ctx, rdbuf, 0, 0, 1); // media if (ret < 0) return CUPS_BACKEND_FAILED; @@ -903,11 +903,11 @@ top: ret = mitsu9550_get_status(ctx, rdbuf, 0, 1, 0); // status2 if (ret < 0) return CUPS_BACKEND_FAILED; - + ret = mitsu9550_get_status(ctx, rdbuf, 1, 0, 0); // status if (ret < 0) return CUPS_BACKEND_FAILED; - + /* Make sure we're ready to proceed */ if (sts->sts5 != 0) { ERROR("Unexpected response (sts5 %02x)\n", sts->sts5); @@ -1094,7 +1094,7 @@ static int mitsu9550_query_status2(struct mitsu9550_ctx *ctx) { struct mitsu9550_status2 resp; int ret; - + ret = mitsu9550_get_status(ctx, (uint8_t*) &resp, 0, 1, 0); if (!ret) @@ -1121,13 +1121,13 @@ static int mitsu9550_query_serno(struct libusb_device_handle *dev, uint8_t endp_ ret = read_data(dev, endp_up, rdbuf, READBACK_LEN, &num); - + if (ret < 0) return CUPS_BACKEND_FAILED; if ((unsigned int)num < sizeof(cmd) + 1) /* Short read */ return CUPS_BACKEND_FAILED; - + if (rdbuf[0] != 0xe4 || rdbuf[1] != 0x72 || rdbuf[2] != 0x6e || @@ -1140,7 +1140,7 @@ static int mitsu9550_query_serno(struct libusb_device_handle *dev, uint8_t endp_ WARNING("Short serno read! (%d vs %u)\r\n", num, rdbuf[4]); - /* model and serial number are encoded as 16-bit unicode, + /* model and serial number are encoded as 16-bit unicode, little endian, separated by spaces. */ i = num; ptr = rdbuf + 5; @@ -1152,7 +1152,7 @@ static int mitsu9550_query_serno(struct libusb_device_handle *dev, uint8_t endp_ i -= 2; } *buf = 0; /* Null-terminate the returned string */ - + return ret; } @@ -1233,7 +1233,7 @@ struct dyesub_backend mitsu9550_backend = { 1b 57 20 2e 00 QQ QQ 00 00 00 00 00 00 00 XX XX :: XX XX == columns YY YY 00 00 00 00 00 00 00 00 00 00 00 00 00 00 :: YY YY == rows 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 :: QQ == 0x0a90 on 9810, 0x0a10 on all others. - 00 00 + 00 00 ~~~ Header 2 @@ -1246,15 +1246,15 @@ struct dyesub_backend mitsu9550_backend = { 1b 57 22 2e 00 40 00 00 00 00 00 XX 00 00 00 00 :: XX = 00 normal, 01 FineDeep 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00 00 ~~~ Header 4 (all but 9550-S and 9800-S, involves error policy?) 1b 57 26 2e 00 QQ 00 00 00 00 00 SS RR 01 00 00 :: QQ = 0x70 on 9550/98x0, 0x60 on 9600 or 9800S 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 :: RR = 0x01 on 9550/98x0, 0x00 on 9600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 :: SS = 0x01 on 9800S - 00 00 + 00 00 ~~~~ Data follows: @@ -1309,7 +1309,7 @@ struct dyesub_backend mitsu9550_backend = { [[ Unknown ]] -> 1b 4b 7f 00 - <- eb 4b 8f 00 02 00 5e [[ '02' seems to be a length ]] + <- eb 4b 8f 00 02 00 5e [[ '02' seems to be a length ]] [[ Unknown ]] @@ -1337,11 +1337,11 @@ struct dyesub_backend mitsu9550_backend = { <- e4 4b 01 00 02 00 78 Status Query - + -> 1b 56 30 00 -> 30 2e 00 00 00 00 MM 00 NN NN ZZ 00 00 00 00 00 :: MM, NN, ZZ QQ RR SS 00 00 00 00 00 00 00 00 00 00 00 00 00 :: QQ, RR, SS - 00 00 00 00 00 00 00 00 00 00 00 00 TT UU 00 00 :: TT, UU + 00 00 00 00 00 00 00 00 00 00 00 00 TT UU 00 00 :: TT, UU Status Query B (not sure what to call this) @@ -1414,7 +1414,7 @@ struct dyesub_backend mitsu9550_backend = { [...] 00 3e 00 00 80 44 :: Idle. - Also seen: + Also seen: 00 3e 00 00 96 4b :: Idle 00 be 00 00 96 4b :: Data submitted, pre "start" @@ -1447,8 +1447,8 @@ struct dyesub_backend mitsu9550_backend = { SS :: ?? 0x00 means "ready for another print" but 0x01 is "busy" TT :: ?? seen values between 0x7c through 0x96) UU :: ?? seen values between 0x43 and 0x4c -- temperature? - - *** + + *** Other printer commands seen: diff --git a/src/cups/backend_mitsup95d.c b/src/cups/backend_mitsup95d.c index 100462f..44fbe0e 100644 --- a/src/cups/backend_mitsup95d.c +++ b/src/cups/backend_mitsup95d.c @@ -59,7 +59,7 @@ struct mitsup95d_ctx { int mem_clr_present; uint8_t hdr[2]; // 1b 51 - + uint8_t hdr1[50]; // 1b 57 20 2e ... uint8_t hdr2[50]; // 1b 57 21 2e ... uint8_t hdr3[50]; // 1b 57 22 2e ... @@ -531,7 +531,7 @@ struct dyesub_backend mitsup95d_backend = { [[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]] 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 XY - + P93: 1b 57 21 2e 00 4a aa 00 00 TT 00 00 00 NN 00 MM @@ -685,5 +685,3 @@ UNKNOWNS: * What "custom gamma" table does to spool file? */ - - diff --git a/src/cups/backend_shinkos1245.c b/src/cups/backend_shinkos1245.c index b92b275..871dc32 100644 --- a/src/cups/backend_shinkos1245.c +++ b/src/cups/backend_shinkos1245.c @@ -125,7 +125,7 @@ struct shinkos1245_cmd_print { struct shinkos1245_cmd_getstatus { struct shinkos1245_cmd_hdr hdr; uint8_t cmd[1]; /* 0x03 */ - uint8_t pad[10]; + uint8_t pad[10]; } __attribute__((packed)); struct shinkos1245_resp_status { @@ -360,7 +360,7 @@ enum { #define TONE_CURVE_SIZE 1536 #define TONE_CURVE_DATA_BLOCK_SIZE 64 - + /* Query Model information */ struct shinkos1245_cmd_getmodel { struct shinkos1245_cmd_hdr hdr; @@ -656,7 +656,7 @@ static int shinkos1245_set_matte(struct shinkos1245_ctx *ctx, if (sts.code == CMD_CODE_BAD) return 1; - ERROR("Bad return code (%02x) on SET_MATTE command\n", sts.code); + ERROR("Bad return code (%02x) on SET_MATTE command\n", sts.code); return -99; } @@ -1267,7 +1267,7 @@ static void *shinkos1245_init(void) return ctx; } -static void shinkos1245_attach(void *vctx, struct libusb_device_handle *dev, +static void shinkos1245_attach(void *vctx, struct libusb_device_handle *dev, uint8_t endp_up, uint8_t endp_down, uint8_t jobid) { struct shinkos1245_ctx *ctx = vctx; @@ -1280,9 +1280,9 @@ static void shinkos1245_attach(void *vctx, struct libusb_device_handle *dev, device = libusb_get_device(dev); libusb_get_device_descriptor(device, &desc); - + ctx->type = lookup_printer_type(&shinkos1245_backend, - desc.idVendor, desc.idProduct); + desc.idVendor, desc.idProduct); /* Ensure jobid is sane */ ctx->jobid = jobid & 0x7f; @@ -1361,7 +1361,7 @@ static int shinkos1245_read_parse(void *vctx, int data_fd) { do { ret = read(data_fd, ptr, remain); if (ret < 0) { - ERROR("Read failed (%d/%d/%d)\n", + ERROR("Read failed (%d/%d/%d)\n", ret, remain, ctx->datalen); perror("ERROR: Read failed"); return ret; diff --git a/src/cups/backend_shinkos2145.c b/src/cups/backend_shinkos2145.c index d56ca2f..c270d3c 100644 --- a/src/cups/backend_shinkos2145.c +++ b/src/cups/backend_shinkos2145.c @@ -254,7 +254,7 @@ static char *print_modes(uint8_t v) { #define PRINT_METHOD_4x6_2UP 0x02 #define PRINT_METHOD_2x6_2UP 0x04 -static char *print_methods (uint8_t v) { +static char *print_methods (uint8_t v) { switch (v) { case PRINT_METHOD_STD: return "Standard"; @@ -320,7 +320,7 @@ static char *fwinfo_targets (uint8_t v) { return "USB Boot "; case FWINFO_TARGET_USB_APP: return "USB App "; - case FWINFO_TARGET_TABLES: + case FWINFO_TARGET_TABLES: return "Tables "; default: return "Unknown "; @@ -833,7 +833,7 @@ static int s2145_do_cmd(struct shinkos2145_ctx *ctx, } if (resp->result != RESULT_SUCCESS) { - INFO("Printer Status: %02x (%s)\n", resp->status, + INFO("Printer Status: %02x (%s)\n", resp->status, status_str(resp->status)); INFO(" Result: 0x%02x Error: 0x%02x (0x%02x/0x%02x = %s)\n", resp->result, resp->error, resp->printer_major, @@ -1086,7 +1086,7 @@ static int cancel_job(struct shinkos2145_ctx *ctx, char *str) return 0; } -static int flash_led(struct shinkos2145_ctx *ctx) +static int flash_led(struct shinkos2145_ctx *ctx) { struct s2145_cmd_hdr cmd; struct s2145_status_hdr *resp = (struct s2145_status_hdr *) rdbuf; @@ -1150,7 +1150,7 @@ static int button_set(struct shinkos2145_ctx *ctx, int enable) return 0; } -static int get_tonecurve(struct shinkos2145_ctx *ctx, int type, char *fname) +static int get_tonecurve(struct shinkos2145_ctx *ctx, int type, char *fname) { struct s2145_readtone_cmd cmd; struct s2145_readtone_resp *resp = (struct s2145_readtone_resp *) rdbuf; @@ -1224,7 +1224,7 @@ done: return ret; } -static int set_tonecurve(struct shinkos2145_ctx *ctx, int target, char *fname) +static int set_tonecurve(struct shinkos2145_ctx *ctx, int target, char *fname) { struct s2145_update_cmd cmd; struct s2145_status_hdr *resp = (struct s2145_status_hdr *) rdbuf; @@ -1394,7 +1394,7 @@ static void *shinkos2145_init(void) return ctx; } -static void shinkos2145_attach(void *vctx, struct libusb_device_handle *dev, +static void shinkos2145_attach(void *vctx, struct libusb_device_handle *dev, uint8_t endp_up, uint8_t endp_down, uint8_t jobid) { struct shinkos2145_ctx *ctx = vctx; @@ -1407,9 +1407,9 @@ static void shinkos2145_attach(void *vctx, struct libusb_device_handle *dev, device = libusb_get_device(dev); libusb_get_device_descriptor(device, &desc); - + ctx->type = lookup_printer_type(&shinkos2145_backend, - desc.idVendor, desc.idProduct); + desc.idVendor, desc.idProduct); /* Ensure jobid is sane */ ctx->jobid = (jobid & 0x7f); @@ -1445,7 +1445,7 @@ static int shinkos2145_read_parse(void *vctx, int data_fd) { if (ret < 0 || ret != sizeof(ctx->hdr)) { if (ret == 0) return CUPS_BACKEND_CANCEL; - ERROR("Read failed (%d/%d/%d)\n", + ERROR("Read failed (%d/%d/%d)\n", ret, 0, (int)sizeof(ctx->hdr)); perror("ERROR: Read failed"); return ret; @@ -1482,7 +1482,7 @@ static int shinkos2145_read_parse(void *vctx, int data_fd) { do { ret = read(data_fd, ptr, remain); if (ret < 0) { - ERROR("Read failed (%d/%d/%d)\n", + ERROR("Read failed (%d/%d/%d)\n", ret, remain, ctx->datalen); perror("ERROR: Read failed"); return ret; @@ -1495,7 +1495,7 @@ static int shinkos2145_read_parse(void *vctx, int data_fd) { /* Make sure footer is sane too */ ret = read(data_fd, tmpbuf, 4); if (ret != 4) { - ERROR("Read failed (%d/%d/%d)\n", + ERROR("Read failed (%d/%d/%d)\n", ret, 4, 4); perror("ERROR: Read failed"); return ret; @@ -1522,7 +1522,7 @@ static int shinkos2145_main_loop(void *vctx, int copies) { struct s2145_cmd_hdr *cmd = (struct s2145_cmd_hdr *) cmdbuf;; struct s2145_print_cmd *print = (struct s2145_print_cmd *) cmdbuf; - struct s2145_status_resp *sts = (struct s2145_status_resp *) rdbuf; + struct s2145_status_resp *sts = (struct s2145_status_resp *) rdbuf; struct s2145_mediainfo_resp *media = (struct s2145_mediainfo_resp *) rdbuf; /* Send Media Query */ @@ -1704,9 +1704,9 @@ top: printer_error: ERROR("Printer reported error: %#x (%s) status: %#x (%s) -> %#x.%#x (%s)\n", - sts->hdr.error, + sts->hdr.error, error_str(sts->hdr.error), - sts->hdr.status, + sts->hdr.status, status_str(sts->hdr.status), sts->hdr.printer_major, sts->hdr.printer_minor, error_codes(sts->hdr.printer_major, sts->hdr.printer_minor)); @@ -1782,7 +1782,7 @@ struct dyesub_backend shinkos2145_backend = { 00 00 00 00 00 00 00 00 00 00 00 00 ce ff ff ff 00 00 00 00 ce ff ff ff QQ QQ 00 00 ce ff ff ff QQ == DPI, ie 300. 00 00 00 00 ce ff ff ff 00 00 00 00 00 00 00 00 - 00 00 00 00 + 00 00 00 00 [[Packed RGB payload of WW*HH*3 bytes]] diff --git a/src/cups/backend_shinkos6145.c b/src/cups/backend_shinkos6145.c index e8d39b4..b9d782a 100644 --- a/src/cups/backend_shinkos6145.c +++ b/src/cups/backend_shinkos6145.c @@ -32,7 +32,7 @@ * * You must still adhere to all other terms of the license to this program * (ie GPLv2) and the license of the libS6145ImageProcess library. - * + * */ #include <stdio.h> @@ -55,7 +55,7 @@ #if defined(USE_DLOPEN) #define WITH_DYNAMIC #include <dlfcn.h> -#define DL_INIT() do {} while(0) +#define DL_INIT() do {} while(0) #define DL_OPEN(__x) dlopen(__x, RTLD_NOW) #define DL_SYM(__x, __y) dlsym(__x, __y) #define DL_CLOSE(__x) dlclose(__x) @@ -151,8 +151,8 @@ struct tankParamTable { uint32_t fstOutConductivity; uint32_t plusMaxEnergy; uint32_t minusMaxEnergy; - uint32_t plusMaxEnergyPreRead; - uint32_t minusMaxEnergyPreRead; + uint32_t plusMaxEnergyPreRead; + uint32_t minusMaxEnergyPreRead; uint32_t preReadLevelDiff; uint32_t rsvd[14]; // null? } __attribute__((packed)); @@ -277,7 +277,7 @@ struct shinkos6145_ctx { uint8_t ribbon_type; uint8_t input_ymc; - + uint16_t last_donor; uint16_t last_remain; uint16_t last_ribbon; @@ -336,7 +336,7 @@ static char *cmd_names(uint16_t v) { case S6145_CMD_GETPARAM: return "Get Parameter"; case S6145_CMD_GETSERIAL: - return "Get Serial Number"; + return "Get Serial Number"; case S6145_CMD_PRINTSTAT: return "Get Print ID Status"; case S6145_CMD_EXTCOUNTER: @@ -379,7 +379,7 @@ struct s6145_print_cmd { uint8_t reserved[6]; uint8_t unk_1; /* Brava 21 sets this to 1 */ uint8_t method; - uint8_t image_avg; + uint8_t image_avg; } __attribute__((packed)); #define PRINT_MODE_NO_OC 0x01 @@ -407,7 +407,7 @@ static char *print_modes(uint8_t v) { #define PRINT_METHOD_DOUBLE 0x08 #define PRINT_METHOD_NOTRIM 0x80 -static char *print_methods (uint8_t v) { +static char *print_methods (uint8_t v) { switch (v & 0xf) { case PRINT_METHOD_STD: return "Standard"; @@ -700,7 +700,7 @@ static char *error_codes(uint8_t major, uint8_t minor) return "Paper Jam: Precut Print Position Off"; case 0x20: return "Paper Jam: Precut Print Position On"; - + case 0x29: return "Paper Jam: Printing Paper Top On"; case 0x2A: @@ -1036,7 +1036,7 @@ static const char *print_ribbons (uint8_t v) { return "6x8"; case RIBBON_6x9: return "6x9"; - // XXX 89x??? rubbons. + // XXX 89x??? rubbons. default: return "Unknown"; } @@ -1148,7 +1148,7 @@ static int s6145_do_cmd(struct shinkos6145_ctx *ctx, } if (resp->result != RESULT_SUCCESS) { - INFO("Printer Status: %02x (%s)\n", resp->status, + INFO("Printer Status: %02x (%s)\n", resp->status, status_str(resp->status)); INFO(" Result: 0x%02x Error: 0x%02x (0x%02x/0x%02x = %s)\n", resp->result, resp->error, resp->printer_major, @@ -1232,7 +1232,7 @@ static int get_status(struct shinkos6145_ctx *ctx) INFO("Lifetime Distance: %08u inches\n", le32_to_cpu(resp2->lifetime_distance)); INFO("Maintenance Distance: %08u inches\n", le32_to_cpu(resp2->maint_distance)); INFO("Head Distance: %08u inches\n", le32_to_cpu(resp2->head_distance)); - + /* Query various params */ if(ctx->type == P_SHINKO_S6145D) { if ((ret = get_param(ctx, PARAM_REGION_CODE, &val))) { @@ -1280,7 +1280,7 @@ static int get_status(struct shinkos6145_ctx *ctx) val = 240; // default? INFO("Sleep delay: %u minutes\n", val); - + return 0; } @@ -1310,7 +1310,7 @@ static int get_fwinfo(struct shinkos6145_ctx *ctx) if (le16_to_cpu(resp->hdr.payload_len) != (sizeof(struct s6145_fwinfo_resp) - sizeof(struct s6145_status_hdr))) continue; - + INFO(" %s\t ver %02x.%02x\n", fwinfo_targets(i), resp->major, resp->minor); #if 0 @@ -1341,7 +1341,7 @@ static int get_errorlog(struct shinkos6145_ctx *ctx) ERROR("Failed to execute %s command\n", cmd_names(cmd.cmd)); return ret; } - + if (le16_to_cpu(resp->hdr.payload_len) != (sizeof(struct s6145_errorlog_resp) - sizeof(struct s6145_status_hdr))) return -2; @@ -1349,13 +1349,13 @@ static int get_errorlog(struct shinkos6145_ctx *ctx) for (i = 0 ; i < resp->count ; i++) { INFO(" %02d: @ %08u prints : 0x%02x/0x%02x (%s)\n", i, le32_to_cpu(resp->items[i].print_counter), - resp->items[i].major, resp->items[i].minor, + resp->items[i].major, resp->items[i].minor, error_codes(resp->items[i].major, resp->items[i].minor)); } return 0; } -static int get_mediainfo(struct shinkos6145_ctx *ctx) +static int get_mediainfo(struct shinkos6145_ctx *ctx) { struct s6145_cmd_hdr cmd; struct s6145_mediainfo_resp *resp = (struct s6145_mediainfo_resp *) rdbuf; @@ -1413,7 +1413,7 @@ static int cancel_job(struct shinkos6145_ctx *ctx, char *str) return 0; } -static int flash_led(struct shinkos6145_ctx *ctx) +static int flash_led(struct shinkos6145_ctx *ctx) { struct s6145_cmd_hdr cmd; struct s6145_status_hdr *resp = (struct s6145_status_hdr *) rdbuf; @@ -1465,7 +1465,7 @@ static int get_param(struct shinkos6145_ctx *ctx, int target, uint32_t *param) /* Set up command */ cmd.target = target; - + cmd.hdr.cmd = cpu_to_le16(S6145_CMD_GETPARAM); cmd.hdr.len = cpu_to_le16(sizeof(struct s6145_getparam_cmd)-sizeof(cmd.hdr)); @@ -1529,7 +1529,7 @@ static int shinkos6145_dump_corrdata(struct shinkos6145_ctx *ctx, char *fname) free(ctx->corrdata); ctx->corrdata = NULL; ctx->corrdatalen = 0; - + return ret; } @@ -1563,7 +1563,7 @@ static int shinkos6145_dump_eeprom(struct shinkos6145_ctx *ctx, char *fname) return ret; } -static int get_tonecurve(struct shinkos6145_ctx *ctx, int type, char *fname) +static int get_tonecurve(struct shinkos6145_ctx *ctx, int type, char *fname) { struct s6145_readtone_cmd cmd; struct s6145_readtone_resp *resp = (struct s6145_readtone_resp *) rdbuf; @@ -1637,7 +1637,7 @@ done: return ret; } -static int set_tonecurve(struct shinkos6145_ctx *ctx, int target, char *fname) +static int set_tonecurve(struct shinkos6145_ctx *ctx, int target, char *fname) { struct s6145_update_cmd cmd; struct s6145_status_hdr *resp = (struct s6145_status_hdr *) rdbuf; @@ -1738,7 +1738,7 @@ static int shinkos6145_get_imagecorr(struct shinkos6145_ctx *ctx) while (total < ctx->corrdatalen) { struct s6145_imagecorr_data data; - + ret = read_data(ctx->dev, ctx->endp_up, (uint8_t *) &data, sizeof(data), &num); @@ -1806,7 +1806,7 @@ static void shinkos6145_cmdline(void) DEBUG("\t\t[ -m ] # Query media\n"); DEBUG("\t\t[ -q filename ] # Extract eeprom data\n"); DEBUG("\t\t[ -Q filename ] # Extract image correction params\n"); - DEBUG("\t\t[ -r ] # Reset user/NV tone curve\n"); + DEBUG("\t\t[ -r ] # Reset user/NV tone curve\n"); DEBUG("\t\t[ -R ] # Reset printer to factory defaults\n"); DEBUG("\t\t[ -s ] # Query status\n"); DEBUG("\t\t[ -X jobid ] # Abort a printjob\n"); @@ -1905,11 +1905,11 @@ static void *shinkos6145_init(void) memset(ctx, 0, sizeof(struct shinkos6145_ctx)); DL_INIT(); - + return ctx; } -static void shinkos6145_attach(void *vctx, struct libusb_device_handle *dev, +static void shinkos6145_attach(void *vctx, struct libusb_device_handle *dev, uint8_t endp_up, uint8_t endp_down, uint8_t jobid) { struct shinkos6145_ctx *ctx = vctx; @@ -1922,12 +1922,12 @@ static void shinkos6145_attach(void *vctx, struct libusb_device_handle *dev, device = libusb_get_device(dev); libusb_get_device_descriptor(device, &desc); - + ctx->type = lookup_printer_type(&shinkos6145_backend, - desc.idVendor, desc.idProduct); + desc.idVendor, desc.idProduct); /* Attempt to open the library */ -#if defined(WITH_DYNAMIC) +#if defined(WITH_DYNAMIC) INFO("Attempting to load image processing library\n"); ctx->dl_handle = DL_OPEN(LIB_NAME); /* Try the Sinfonia one first */ if (!ctx->dl_handle) @@ -1972,7 +1972,7 @@ static void shinkos6145_teardown(void *vctx) { DL_CLOSE(ctx->dl_handle); DL_EXIT(); - + free(ctx); } @@ -2005,7 +2005,7 @@ static void lib6145_process_image(uint8_t *src, uint16_t *dest, pad_r = pad_l + le16_to_cpu(corrdata->width); out = 0; in = 0; - + /* Convert YMC 8-bit to 16-bit, and pad appropriately to full stripe */ for (row = 0 ; row < le16_to_cpu(corrdata->height) ; row++) { for (col = 0 ; col < row_lim; col++) { @@ -2045,7 +2045,7 @@ static void lib6145_process_image(uint8_t *src, uint16_t *dest, } dest[out++] = val; } - } + } /* Generate lamination plane, if desired */ if (oc_mode > PRINT_MODE_NO_OC) { @@ -2100,7 +2100,7 @@ static int shinkos6145_read_parse(void *vctx, int data_fd) { /* Extended spool format to re-purpose an unused header field. When bit 0 is set, this tells the backend that the data is - already in planar YMC format (vs packed RGB) so we don't need + already in planar YMC format (vs packed RGB) so we don't need to do the conversion ourselves. Saves some processing overhead */ ctx->input_ymc = le32_to_cpu(ctx->hdr.ext_flags) & 0x01; @@ -2108,7 +2108,7 @@ static int shinkos6145_read_parse(void *vctx, int data_fd) { free(ctx->databuf); ctx->databuf = NULL; } - + ctx->datalen = le32_to_cpu(ctx->hdr.rows) * le32_to_cpu(ctx->hdr.columns) * 3; ctx->databuf = malloc(ctx->datalen); if (!ctx->databuf) { @@ -2162,7 +2162,7 @@ static int shinkos6145_main_loop(void *vctx, int copies) { struct s6145_cmd_hdr *cmd = (struct s6145_cmd_hdr *) cmdbuf; struct s6145_print_cmd *print = (struct s6145_print_cmd *) cmdbuf; - struct s6145_status_resp *sts = (struct s6145_status_resp *) rdbuf; + struct s6145_status_resp *sts = (struct s6145_status_resp *) rdbuf; struct s6145_mediainfo_resp *media = (struct s6145_mediainfo_resp *) rdbuf; uint32_t cur_mode; @@ -2240,7 +2240,7 @@ top: memcpy(rdbuf2, rdbuf, READBACK_LEN); - INFO("Printer Status: 0x%02x (%s)\n", + INFO("Printer Status: 0x%02x (%s)\n", sts->hdr.status, status_str(sts->hdr.status)); /* Guessimate a percentage for the remaining media */ @@ -2271,8 +2271,8 @@ top: case S_IDLE: INFO("Waiting for printer idle\n"); /* If either bank is free, continue */ - if (sts->bank1_status == BANK_STATUS_FREE || - sts->bank2_status == BANK_STATUS_FREE) + if (sts->bank1_status == BANK_STATUS_FREE || + sts->bank2_status == BANK_STATUS_FREE) state = S_PRINTER_READY_CMD; break; @@ -2287,7 +2287,7 @@ top: if (cur_mode != oc_mode) { /* If cur_mode is not the same as desired oc_mode, - change it -- but we have to wait until the printer + change it -- but we have to wait until the printer is COMPLETELY idle */ if (sts->bank1_status != BANK_STATUS_FREE || sts->bank2_status != BANK_STATUS_FREE) { @@ -2331,7 +2331,7 @@ top: if (!ctx->input_ymc) { int planelen = le16_to_cpu(ctx->corrdata->width) * le16_to_cpu(ctx->corrdata->height); uint8_t *databuf3 = malloc(ctx->datalen); - + for (i = 0 ; i < planelen ; i++) { uint8_t r, g, b; r = ctx->databuf[3*i]; @@ -2357,7 +2357,7 @@ top: } else { WARNING("Utilizing fallback internal image processing code\n"); WARNING(" *** Output quality will be poor! *** \n"); - + lib6145_calc_avg(ctx, le32_to_cpu(ctx->hdr.columns), le32_to_cpu(ctx->hdr.rows)); lib6145_process_image(ctx->databuf, databuf2, ctx->corrdata, oc_mode); } @@ -2431,16 +2431,16 @@ top: if (state != S_FINISHED) goto top; - + INFO("Print complete\n"); return CUPS_BACKEND_OK; printer_error: ERROR("Printer reported error: %#x (%s) status: %#x (%s) -> %#x.%#x (%s)\n", - sts->hdr.error, + sts->hdr.error, error_str(sts->hdr.error), - sts->hdr.status, + sts->hdr.status, status_str(sts->hdr.status), sts->hdr.printer_major, sts->hdr.printer_minor, error_codes(sts->hdr.printer_major, sts->hdr.printer_minor)); @@ -2500,7 +2500,7 @@ struct dyesub_backend shinkos6145_backend = { .query_serno = shinkos6145_query_serno, .devices = { { USB_VID_SHINKO, USB_PID_SHINKO_S6145, P_SHINKO_S6145, ""}, - { USB_VID_SHINKO, USB_PID_SHINKO_S6145D, P_SHINKO_S6145D, ""}, + { USB_VID_SHINKO, USB_PID_SHINKO_S6145D, P_SHINKO_S6145D, ""}, { 0, 0, 0, ""} } }; diff --git a/src/cups/backend_shinkos6245.c b/src/cups/backend_shinkos6245.c index 414d55a..44a2f7e 100644 --- a/src/cups/backend_shinkos6245.c +++ b/src/cups/backend_shinkos6245.c @@ -148,7 +148,7 @@ static char *cmd_names(uint16_t v) { case S6245_CMD_GETPARAM: return "Get Parameter"; case S6245_CMD_GETSERIAL: - return "Get Serial Number"; + return "Get Serial Number"; case S6245_CMD_PRINTSTAT: return "Get Print ID Status"; case S6245_CMD_EXTCOUNTER: @@ -189,7 +189,7 @@ struct s6245_print_cmd { uint8_t reserved[8]; // columns and rows repeated, then nulls uint8_t mode; uint8_t method; - uint8_t reserved2; + uint8_t reserved2; } __attribute__((packed)); #define PRINT_MODE_NO_OC 0x01 @@ -217,7 +217,7 @@ static char *print_modes(uint8_t v) { #define PRINT_METHOD_DISABLE_ERR 0x10 -static char *print_methods (uint8_t v) { +static char *print_methods (uint8_t v) { switch (v & 0xf) { case PRINT_METHOD_STD: return "Standard"; @@ -957,7 +957,7 @@ static int s6245_do_cmd(struct shinkos6245_ctx *ctx, } if (resp->result != RESULT_SUCCESS) { - INFO("Printer Status: %02x (%s)\n", resp->status, + INFO("Printer Status: %02x (%s)\n", resp->status, status_str(resp->status)); INFO(" Result: 0x%02x Error: 0x%02x (0x%02x/0x%02x = %s)\n", resp->result, resp->error, resp->printer_major, @@ -1070,7 +1070,7 @@ static int get_fwinfo(struct shinkos6245_ctx *ctx) if (le16_to_cpu(resp->hdr.payload_len) != (sizeof(struct s6245_fwinfo_resp) - sizeof(struct s6245_status_hdr))) continue; - + INFO(" %s\t ver %02x.%02x\n", fwinfo_targets(i), resp->major, resp->minor); #if 0 @@ -1097,7 +1097,7 @@ static int get_errorlog(struct shinkos6245_ctx *ctx) do { int ret; cmd.index = i; - + if ((ret = s6245_do_cmd(ctx, (uint8_t*)&cmd, sizeof(cmd), sizeof(*resp), @@ -1114,16 +1114,16 @@ static int get_errorlog(struct shinkos6245_ctx *ctx) resp->time_year + 2000, resp->time_month, resp->time_day, resp->time_hour, resp->time_min, resp->time_sec, le32_to_cpu(resp->print_counter), - resp->error_major, resp->error_minor, + resp->error_major, resp->error_minor, error_codes(resp->error_major, resp->error_minor)); INFO(" Temp: %02u/%02u Hum: %02u\n", resp->printer_thermistor, resp->head_thermistor, resp->printer_humidity); } while (++i < le16_to_cpu(resp->error_count)); - + return 0; } -static int get_mediainfo(struct shinkos6245_ctx *ctx) +static int get_mediainfo(struct shinkos6245_ctx *ctx) { struct s6245_cmd_hdr cmd; struct s6245_mediainfo_resp *resp = (struct s6245_mediainfo_resp *) rdbuf; @@ -1150,7 +1150,7 @@ static int get_mediainfo(struct shinkos6245_ctx *ctx) INFO(" %02d: C 0x%02x (%s), %04ux%04u, P 0x%02x (%s)\n", i, resp->items[i].media_code, print_sizes(resp->items[i].media_code), le16_to_cpu(resp->items[i].columns), - le16_to_cpu(resp->items[i].rows), + le16_to_cpu(resp->items[i].rows), resp->items[i].print_method, print_methods(resp->items[i].print_method)); } return 0; @@ -1181,7 +1181,7 @@ static int cancel_job(struct shinkos6245_ctx *ctx, char *str) return 0; } -static int flash_led(struct shinkos6245_ctx *ctx) +static int flash_led(struct shinkos6245_ctx *ctx) { struct s6245_cmd_hdr cmd; struct s6245_status_hdr *resp = (struct s6245_status_hdr *) rdbuf; @@ -1247,7 +1247,7 @@ static int reset_curve(struct shinkos6245_ctx *ctx, int target) return 0; } -static int get_tonecurve(struct shinkos6245_ctx *ctx, int type, char *fname) +static int get_tonecurve(struct shinkos6245_ctx *ctx, int type, char *fname) { struct s6245_readtone_cmd cmd; struct s6245_readtone_resp *resp = (struct s6245_readtone_resp *) rdbuf; @@ -1321,7 +1321,7 @@ done: return ret; } -static int set_tonecurve(struct shinkos6245_ctx *ctx, int target, char *fname) +static int set_tonecurve(struct shinkos6245_ctx *ctx, int target, char *fname) { struct s6245_update_cmd cmd; struct s6245_status_hdr *resp = (struct s6245_status_hdr *) rdbuf; @@ -1491,7 +1491,7 @@ static void *shinkos6245_init(void) return ctx; } -static void shinkos6245_attach(void *vctx, struct libusb_device_handle *dev, +static void shinkos6245_attach(void *vctx, struct libusb_device_handle *dev, uint8_t endp_up, uint8_t endp_down, uint8_t jobid) { struct shinkos6245_ctx *ctx = vctx; @@ -1542,7 +1542,7 @@ static int shinkos6245_read_parse(void *vctx, int data_fd) { if (ret < 0 || ret != sizeof(ctx->hdr)) { if (ret == 0) return CUPS_BACKEND_CANCEL; - ERROR("Read failed (%d/%d/%d)\n", + ERROR("Read failed (%d/%d/%d)\n", ret, 0, (int)sizeof(ctx->hdr)); perror("ERROR: Read failed"); return ret; @@ -1560,7 +1560,7 @@ static int shinkos6245_read_parse(void *vctx, int data_fd) { return CUPS_BACKEND_CANCEL; } - + if (ctx->databuf) { free(ctx->databuf); ctx->databuf = NULL; @@ -1579,7 +1579,7 @@ static int shinkos6245_read_parse(void *vctx, int data_fd) { do { ret = read(data_fd, ptr, remain); if (ret < 0) { - ERROR("Read failed (%d/%d/%d)\n", + ERROR("Read failed (%d/%d/%d)\n", ret, remain, ctx->datalen); perror("ERROR: Read failed"); return ret; @@ -1592,7 +1592,7 @@ static int shinkos6245_read_parse(void *vctx, int data_fd) { /* Make sure footer is sane too */ ret = read(data_fd, tmpbuf, 4); if (ret != 4) { - ERROR("Read failed (%d/%d/%d)\n", + ERROR("Read failed (%d/%d/%d)\n", ret, 4, 4); perror("ERROR: Read failed"); return ret; @@ -1620,7 +1620,7 @@ static int shinkos6245_main_loop(void *vctx, int copies) { struct s6245_cmd_hdr *cmd = (struct s6245_cmd_hdr *) cmdbuf;; struct s6245_print_cmd *print = (struct s6245_print_cmd *) cmdbuf; - struct s6245_status_resp *sts = (struct s6245_status_resp *) rdbuf; + struct s6245_status_resp *sts = (struct s6245_status_resp *) rdbuf; struct s6245_mediainfo_resp *media = (struct s6245_mediainfo_resp *) rdbuf; /* Cap copies */ @@ -1656,7 +1656,7 @@ static int shinkos6245_main_loop(void *vctx, int copies) { ERROR("Failed to execute %s command\n", cmd_names(cmd->cmd)); return CUPS_BACKEND_FAILED; } - + if (le16_to_cpu(media->hdr.payload_len) != (sizeof(struct s6245_mediainfo_resp) - sizeof(struct s6245_status_hdr))) return CUPS_BACKEND_FAILED; @@ -1734,7 +1734,7 @@ top: memcpy(rdbuf2, rdbuf, READBACK_LEN); - INFO("Printer Status: 0x%02x (%s)\n", + INFO("Printer Status: 0x%02x (%s)\n", sts->hdr.status, status_str(sts->hdr.status)); /* Guessimate a percentage for the remaining media */ @@ -1776,8 +1776,8 @@ top: } /* If either bank is free, continue */ - if (sts->bank1_status == BANK_STATUS_FREE || - sts->bank2_status == BANK_STATUS_FREE) + if (sts->bank1_status == BANK_STATUS_FREE || + sts->bank2_status == BANK_STATUS_FREE) state = S_PRINTER_READY_CMD; break; @@ -1839,16 +1839,16 @@ top: if (state != S_FINISHED) goto top; - + INFO("Print complete\n"); return CUPS_BACKEND_OK; printer_error: ERROR("Printer reported error: %#x (%s) status: %#x (%s) -> %#x.%#x (%s)\n", - sts->hdr.error, + sts->hdr.error, error_str(sts->hdr.error), - sts->hdr.status, + sts->hdr.status, status_str(sts->hdr.status), sts->hdr.printer_major, sts->hdr.printer_minor, error_codes(sts->hdr.printer_major, sts->hdr.printer_minor)); diff --git a/src/cups/backend_sonyupdr150.c b/src/cups/backend_sonyupdr150.c index a914d3f..622be40 100644 --- a/src/cups/backend_sonyupdr150.c +++ b/src/cups/backend_sonyupdr150.c @@ -69,7 +69,7 @@ static void* updr150_init(void) return ctx; } -static void updr150_attach(void *vctx, struct libusb_device_handle *dev, +static void updr150_attach(void *vctx, struct libusb_device_handle *dev, uint8_t endp_up, uint8_t endp_down, uint8_t jobid) { struct updr150_ctx *ctx = vctx; @@ -86,7 +86,7 @@ static void updr150_attach(void *vctx, struct libusb_device_handle *dev, libusb_get_device_descriptor(device, &desc); ctx->type = lookup_printer_type(&updr150_backend, - desc.idVendor, desc.idProduct); + desc.idVendor, desc.idProduct); ctx->copies_offset = 0; } @@ -380,21 +380,21 @@ struct dyesub_backend updr150_backend = { Sony UP-CL10 / DNP SL-10 spool format: -60 ff ff ff +60 ff ff ff f8 ff ff ff -fd ff ff ff 14 00 00 00 1b 15 00 00 00 0d 00 00 00 00 00 07 00 00 00 00 WW WW HH HH +fd ff ff ff 14 00 00 00 1b 15 00 00 00 0d 00 00 00 00 00 07 00 00 00 00 WW WW HH HH fb ff ff ff f4 ff ff ff 0b 00 00 00 1b ea 00 00 00 00 SH SH SH SH 00 SL SL SL SL [[ Data, rows * cols * 3 bytes ]] -f3 ff ff ff 0f 00 00 00 1b e5 00 00 00 08 00 00 00 00 00 00 00 00 00 - 12 00 00 00 1b e1 00 00 00 0b 00 00 80 00 00 00 00 00 WW WW HH HH -fa ff ff ff 09 00 00 00 1b ee 00 00 00 02 00 00 NN - 07 00 00 00 1b 0a 00 00 00 00 00 -f9 ff ff ff -fc ff ff ff 07 00 00 00 1b 17 00 00 00 00 00 -f7 ff ff ff +f3 ff ff ff 0f 00 00 00 1b e5 00 00 00 08 00 00 00 00 00 00 00 00 00 + 12 00 00 00 1b e1 00 00 00 0b 00 00 80 00 00 00 00 00 WW WW HH HH +fa ff ff ff 09 00 00 00 1b ee 00 00 00 02 00 00 NN + 07 00 00 00 1b 0a 00 00 00 00 00 +f9 ff ff ff +fc ff ff ff 07 00 00 00 1b 17 00 00 00 00 00 +f7 ff ff ff WW WW == Columns, Big Endian HH HH == Rows, Big Endian diff --git a/src/cups/blacklist b/src/cups/blacklist index 191e97d..ed9399f 100644 --- a/src/cups/blacklist +++ b/src/cups/blacklist @@ -99,7 +99,7 @@ # Canon SELPHY ES20 0x04a9 0x3186 blacklist -# Canon SELPHY ES3 +# Canon SELPHY ES3 0x04a9 0x31af blacklist # Canon SELPHY ES30 diff --git a/src/cups/calibrate.ppm b/src/cups/calibrate.ppm index f8a1324..fc5bccc 100644 --- a/src/cups/calibrate.ppm +++ b/src/cups/calibrate.ppm @@ -15,7 +15,7 @@ SyCTsХwsqv}wr\eKbCd?^{4Yz/Y{0Y}0Y|/Y{0Yx.QЮͲkj`ae #GD6FB2GB2IE2GE2HE2HE31/",).-!.-!0.#0.".) -(3/"71&73%;8(>;+?<-CA1GD2IF6EB4@>0>=/72!<: 62+&72/*^V?F@#HB(cXGzn\naOyjUfWDiYGWF1cT<j^Em`GVJ3ncKn`Il`JVO<pcPeVBcR>eT=WI1MC/KB5&9-^P:bUE6+I<,^Q@ugRh[GgW@zkToaMbW7ha5oe>lb=mc@}rPueGuhRthRos~jzkTz]z]|bnUlk<0#j]N}a{xXrhX?|fsj\M[aP_lS]b`UHp^E|lVvdPi|dr\|olfy}lQj[FI8*I9'RC5eXJ}mY{j-/,-378?"5:AE*@G(GL-DE&QK6VJ1XL6H?+MJ1NL4XM8M:'F?-40$91&1*60&A:-G<3GA8j\Tf8-b]M-(P:2?8361.?:1L;3Q/+S2-P3.X<9z\Ze;3b83`4-Q-$<$;$J@,UQ2B%QK1TQ.`@8d>6k?8mD=lF?p=5bNZC^Gևvz|tyvx}tt~yyFEEB?;IHHLKK_]^vu}ts}ut{qqtsswrr{ppzrpvsska`ihjnnvmmsllnlltlkvontmltmlslkrmlryoltkmkjrjiojirDZ0BW*9S%;T&Jd.Ws9Xo>ZcEZWI\VL[WL[XM[XO[XOZXNZYMZ[LWXKUUGVWA/5$.7,9?5'-&'+(&+(-:3>K:ki9)٣
TRO|ukyo`>7)A=/>:-@<1" - + ?:,KH5HE3IE3GD2GC3IE6<:.52(42(,' "!($>:,FA1?<+?=-A=,?>)B@*B?+:6)]ZK]\KefYRJ3KC)LD,g~odSsiStgLjZFiZLWK;VJ6PB/M@0VF:gXHzlXyiSs`HiZDO@.o^EudFh]:ZN4l\ElPtcGj]DqfMdWDbVGm`NiYCwfQbT@i[H_P;k\IXM@]M<fV=~pLznEvl<rf3g\5wkVoaNTE4K;-\H5bO:wkX=4%m_LzugtdPD7,+# |ervX_O=tdvcJK<.UG9Y\]_dftsaJxfNnZBfU?dT=~kUnUkzei|qreuk^O;n^J'(!*$=7*1*@8)1+,"0%M@5O9)W@+T?-I:*SH9eOEF) WI;A:/B<1D?2FA1QB2Z?5vgbsqh6,~\VW94Q6-HA894-A:0P=4R/(R0*Q1*T95~]^f7/a7.b6,P-$:$XG?^YCIG*E, [V8ba>[=2_60i?5lF?pJBo?4fQdKfOՉs~~rt}tt}ss}wu}LIG<7,JGA@=8ZWWut|rq{srxlhkojmmltnnxonvnmraabfeellpkkrjjkkkommullskkrljpmjpljpkggljojioihnhgoH_3E\,7P$5N"F^-Tq7Xs9Vf>YZF[UKYTKZWL[XN[XOZXOZXOXVOVUMSRKkfHz:i`*HP1,7-.9.-7+7B-ge2#ݥ TMH:3'<7)=8)A;,A</'%*& *&-)4."/, A>/DB3DB3EB4EC6$!"#-+!baJHG2PP;GH5``JnlJpqOnlOPQ=mnSihEjkKxm^uiWnbPdW@UJ9SF;SF6aUDkaOUF7[L>k]MsfXeZO^SFIB66-'J>6PA6SF;B7,dWAeU:f{\vfJrYs[~eqdMm^Hk[EoXpvhtdNr[dU=m_H~pZiY@~^feT:hW;}mTtdP}pVr{mWq]G}lSqiGmo|g~r\VI>2)">73aUBjY@QA3rb}audO3%OA2u^~ce|``Q;xgPu^ktZw]p}yix\lthugh~dvf%-&;2)4*9+E8-3%3%;- D;+M8&V@+ZC,YG1ZJ:cK@B%PA6IB7;9*C@.LD,lG7p?6e]|YSqOGql]D@T7._LCF1)H7-M:.S1*S0)S1+S72dbd5-c5.h:0Q.&?.&cYQ`]FA?'=+ ST3PX.P>0W7/aB5bD8eI9^=-gRw_ցhΊvrs{rs}rs{ts{NLK93)4,%60)TQNqqvqqxqqvjhjkfhllqmnulmtjjpaad^]\jjlhhkjjkijmjjrjjphjohinhhkhhmifhhgjggmjgkedgMb5H^/7L#3H#AW*Ok3Yv8Sk7X`CYUIXQKYUK[WMZXOZXOZXOYWOVSMTRNmb<ְ"ϩz$fe8]_?lk@w2!ӞۦEWgwwc}I[|B^AdEdFaAgGkKnOnNlOcGbGeJcF_C_BaCcFcuJ`v[~nXXb:6;9/.43}-+5611/.y/,0-,*|;:s331034{.-c#$qJBR^/Gb#IX%OV:QeSDc@Ka(K\!IO'R6+n53s32u10>7l649pslomehf_omepmapmcPNDklTgiDpqMloMY[IEE><?9QOE^Q=|irqd~}pop_dfX9?4=@7@A6h_ZG;7siale]sndf^V`VOqicrneFH@=A<=;3kf]RQNQOOTTOQQK8<48<4UUNqaZ[FBqf^~tzywrda]gfe\XUVMIgc]kjd_][h^]]SQ`bcbhcn]eFTH<PKHea[MFD953?=<D>:NKDEB=B:6VSMRRHWVOED?;74JHG?>;>:8QMIRNIC><FA?JDALGCHB?D>:A>8ihaDB=FE>ZZ[@@=EDBJH?MJBPLEGC;IE=D@9KG?PMFTPFTODROFOMDQOGSQIKGCLKFJHCJHD<:464/=;4IHCSQLTSMDC=:967987:8<?=>?=BCBGHECFCEFEDFC@AAEFDOQMJLHKNKJMJLLLEGEACAHJHMQMMPMLNLDGCGKEIMINRMQTMMPILPHVUL[ZP\[N]\OXXI\ZOZWLb^Qe`Ra^Ook\e`PkfVdaRe`SjeXtq`d_RebUeaUdaVMMGKOKPPLOOJLMGQSOaaY]]TcbZ\[S__W]\UZZSWWOVUNGGEKMK41(9534/,xQQOJNR123*!6/+$ :5-/+!IC5gaIslNspLroK}sO}uQurN[R6ytSywTbcSYVU=<4
KG<HE950)1-'0-&-)#*&!$$"
@@ -23,25 +23,25 @@ SyCTsХwsqv}wr\eKbCd?^{4Yz/Y{0Y}0Y|/Y{0Yx.QЮͲkj`ae #1-!=9+A>/;7*85*#
.*%30' - - MJ=KI;LJ<OL?RNC64)%!&"&"gfJmnFjiFkkIjiGjiDgfCdfDgiHegCbc@]]<i\PSG9dYK{miaUVOGcXP`XKME=G@6YM?QD:E;4?81:2*50)@94B:4I>6viS`zmRkudLrbIm]FvfOjvxfL~_g~^hX>rVtXef|cw]wgP}p\seRm^JsfQsZvYlcDrswxj]N=oykVaTHA93!7/*RC5$bTGTB/>/$5*$qbQr_GxbHn}etdLs\u]_N9eR;|dtcKgw^mw{`{av]elrYyhQwa%( 7."1':/!>3$90 7+:1!G=.N=+_J5VB-]I4WE4eF8Z4'A5&SL>:=(<:!ZD.tC6zC7tD7uUL}ohdRNN/)Q/(^A9R2*S9.N8,S3+O1*Q3-O4/dad8-g;.t@3P*">,$bXS_]INR31-PU5VZ9E7+L7-XF9\H8\I5V@,bO~hqu|{rryrs{qqyqqwSRR95,71*5-%GA=uu{qqwopwnptonqmknjjpklrjimcae^]^ghihehhjlijmghkdfhhingfkhgjcbgkiheddfcfb]Ud_RNc5H\/5K#0F":P%Ic.Vr6Sn5Vd>WWFWRKXUKZWNZXOZXOYWOXVNUSLSPMWP7ү6ԢΝԠפݪ + + MJ=KI;LJ<OL?RNC64)%!&"&"gfJmnFjiFkkIjiGjiDgfCdfDgiHegCbc@]]<i\PSG9dYK{miaUVOGcXP`XKME=G@6YM?QD:E;4?81:2*50)@94B:4I>6viS`zmRkudLrbIm]FvfOjvxfL~_g~^hX>rVtXef|cw]wgP}p\seRm^JsfQsZvYlcDrswxj]N=oykVaTHA93!7/*RC5$bTGTB/>/$5*$qbQr_GxbHn}etdLs\u]_N9eR;|dtcKgw^mw{`{av]elrYyhQwa%( 7."1':/!>3$90 7+:1!G=.N=+_J5VB-]I4WE4eF8Z4'A5&SL>:=(<:!ZD.tC6zC7tD7uUL}ohdRNN/)Q/(^A9R2*S9.N8,S3+O1*Q3-O4/dad8-g;.t@3P*">,$bXS_]INR31-PU5VZ9E7+L7-XF9\H8\I5V@,bO~hqu|{rryrs{qqyqqwSRR95,71*5-%GA=uu{qqwopwnptonqmknjjpklrjimcae^]^ghihehhjlijmghkdfhhingfkhgjcbgkiheddfcfb]Ud_RNc5H\/5K#0F":P%Ic.Vr6Sn5Vd>WWFWRKXUKZWNZXOZXOYWOXVNUSLSPMWP7ү6ԢΝԠפݪ *'"+'!#
)' B@4@>5HE8LI> B@9PMBQOCRPDSQFNKC$'#%!LH7jgAge@fb@if@ge@geAhfBba@ddBa_=eeBkaUbVJtj\?7+,'#740LD;PF=.("LD<VK>RF;\TKOGB;3+>4+A:3VKAJ>4I=-h^HpXd~mR\L6zbju~wWsT}_dhkNf|p{lVoaJvdNs[mu`xdtaugU^S>wiN}b}bfl|agS>RB3qbPybmaQ\N@PB7 NC<5)$I=4:+2&"0$ xkZugSnpZropyiRn_MsbO}gt[iv`p^LZJ8iXFq`L\L=hYKZJ8yhRvfQs]oY% .%-#0(/(2-><)82#B7*RD5UD/]J6\H4XH4eL<c<-K6%_WFHJ2PF,fE2vB5pC9v[Qvf_]G?O0(Q0(Q1)T6-Q7,L4*L:-O8.N6,U<1L1+jfe8+sE6J:N(?1*YRK`XKIH1:9#NU0TY7MD0I9-Q?2eL=lN;^C1lYHt[GxbRvieplppqxpqvnmrppt\Y[:6074-:5-?:4qqvlmtlltjlrjjpjimjjniiljjofeiZYZfghhhhggggfaffZhj_jjhgfcefd``ZfeR^]K^[IWU<YW;K_5BV-:O'6J&3H#BZ+Nk0Ro2Si9U^DWUIXSLYWNZXOZXOXVOUSLURKQPKNI:ʬPɘ͙ӠՠҞѝϝ֡ܪ rlb,)*%dYK[VEC>394'HE=ID8`YHwnZ{h{nerl_g_;}uNkd>lgArkEZN-pkFYVEYVWFB;mfEwqDkhHRO8faP][P
-!31+%#$-*+%"!!!!
%"omg[WQ
<:3>;2**% - +!31+%#$-*+%"!!!!
%"omg[WQ
<:3>;2**% + IJ@II=LI?ML@:61 !" XXKVSIVSKXVK\ZO,' *&!)$!)%kgFogCoiHlgEidBlhFmiFfcAjfFkgFliHYSLJA9=2+'!4/,{uhuj\u{ptfdZN:2-TMFti]maRdXJl`Pk`PJF.XS<~hhtowukiifhg|bw[l~oVt_xet^pYnk^JqYhZDhZGzlW}oYvgPyiSkWAfQ<YF4l^Pl_Q>0$>2&JA:3,&K?5(0(#<2*D>9XRLE;7>86IA=xhWTE4hVEaQCeVEqaIdT>ZK;YJ9m]JJ=,o]Kn]M:,#,* </*0#9.'E:6NA9SC7l]PxjXxjV)%#,%4/&4.$/)1+:6'94#E:.@5&L?/RA0H:(D:&aM=`A-P>&\I4NC*WB*i@1q@7v^Voc\gTIQ3)R3*N3*N5(N2)T<2J5*L=.P=/Q:0M5,J1)qfsA0zH5R?P+0#`WOcZNPK9BD*OZ5TX9VK=C;+PE4VE0_I1iJ8zfVuh^rihppropropwnntnlqpqsb__C>995.C@9A?9optlltklrklrjjnmknjhhjifqnob`^[XUkibfbZjd_bcKYZ=hjE``GhaSebNddIljObbCbd@ff?cc<I[3DX.FY0>Q+5J&;P(Gb+Nm.Ol3Sb=XYHYSMYWOZXOZWOWUMUSLURJPPLQJ4Ϊ?əР֥աԠ֣ܪܪު 641NNDQQFPQGSSL - - + + ZXP[YMYXMZYL^\MD@395&KE2XS8gc>ke9ie<ie>ge>liAlg@id=gc<ca9db:+%'HA;yo`~shsumdZHRI@@602,)GA>F:+n}r\cTA[N;B6$VL3|oUgozsyjNuYrimjmlSv\gW@iXBl^JviXviUtasdRwkXTH9O@2l\J]O?WL=(!WJ>eUEaSBWG8]ODTH<2)#,j]P-&%0(!K?44&1+*TNI]YVIIHUSUVWXTOM.2#/"K<3ZN@iZFbQBWI=^PBJ;.H;2C7/D958+(5*#>1+0&!*!'4-'0'#A74/# +D9.58!..)&RRKOQGXWNYXPSSFUSH]WQNG?ID9C<0@<(74]P>XB*N@%SA)UC*]A,iA2rNGvgdPD:_ZGM:,P<-M9,M9*O5+S;0N>.NB.M<+UC5SD2F5%wjyE/Q?\GjN<7-$]SM_YKZYAIM/IS0W^:TJ9J@+eO<uU@lM:jI6q]O{oluqvstvqrursvrrwpnrmmppnqrherh;7.VTRlkpllqllqihjjb_k_Zjc[hcXph[pgUhbPjdOa^Bg`LgdHV[6gjB^]<vj[]XBkeNh`H\U:SR6]^;cb;G[4I\4N`7GY2;N*8K)@Y*Kf*Kl,Nh5U^CUUKYWOZXOYWNWUMUSLRPKOMLeZ2۴%ӣΞ̙ϛӟբ٥ - ! 1.*WSM
@?9ED<HH@--( + ! 1.*WSM
@?9ED<HH@--( UULUTKXWN[YP$#!VUChdNlhOjfImkKkjGrnKnkElh@igDcb=gg=dc=fd@ba>cc>cc=_^9_a;Z^9'C91XM@vl\PC5p`teSf\QkcXbYN[SJsj\xbktkxrxmrhd|}x|]}lSwcIpXjXA|fQF5hZKl`Mj^Nj]LqcQj]OYM@XM=WH;eXK:0'/%LB;=0(-"%5'#9-%0& ,"/%!&#+"!"/'&HDASOKNKIFEFIJKRRSRTVDC@zn>0'91/>30PD;\K><,0$:-'7-&&,"#*" &"'&'$,$ 2--0(&.&!6+*7<#11+(77)FG7AC3FE=GE<JJAKHDKGALHBNJ@CD-<<&SS>K@)YB*K>$G>$S>'[>,p]T[KAPB4hjVL;,N8,M<,N;.S@3H6)N?0SJ5MC0QF5ND0PC7odgTo[q\jYF92(ZSIf`KWU>MN7SX7SX9SJ=O@/[Mk[fK<oSCx\Qj\Yb[[tsupnorpnqllmgcnjgkb]tdaymhWTMVRNmjfmldjgZlhX]RCp`Qg\KhdLedFdbD_]@dY@ffB__BdcIVX9opPb^Ak_QWT>ibLh^Hj_H]YBffE\[6FZ5M`6Rc;Ma5>S-7K)>S*Fa*Jj*Kh.Qb=UWGXVMZXOYWOUTMURKQQMLLFw2߳ӧТ˙ӢΝϛҟס 6ez|Y}`\|`^eroTpIjHjJoKuQwRuTsQiI`A]B^E^vFbpL`fN^qnG_ee40h&#;<;<00**,--+(&'%-+-)-))()&++,*y'$g(&bbh/akGorDhdD_DH`4KiUCXSFZDH`$IXN<%W12UD>\,'[&!mcjkUvz{pwyt\\WHJ9OR2imI_dCY]>W^?GM;AC<^YLtvpklhtwsUUPWYT9=6;A8CC:}aTPcTOxsnz{xqga]e_[mgbIHA;@9><4olhWZX^__eggUVU8=5:<5CA;ogb^WSbVS`KH|w`\X`XUc\V{rlf{v}s|}iVRcPN\ZWZ^\wiX`F_O@fa[VRLJC?F<:JDAC:8KD?LFASJEMF@VQINICJFAEC>:756/,1)&0#"4*&#!$ SMJ<96SPLde`BB<JHB\[\B@<GFAHFBED>,+&'(!32/:92@?9<;3PNEIF?>=666,,+%86/DB:<;4ED=JIB>=876033.776?>:=<6994774--'..(--)--)--*+,%.1-35133/574;>:<>;<>;<?;8:57:67:58:6;>9:?99<8<B=DGCGGBBE?AC>FGAJKCLNEHLC;>7>@;OPGVSGRPBOOD\[Npm]c\Nc^OhdUYWGDD::<4VYNDF?<?8DC;CB=@C=YXOUUKPSHTSHEE=EIDIKFMMHUXRNRLDHD=C>CGAGIDDH@MQJ]_WYX<RO6WU:[W:\X:[W=^Y?^X<i_7Cj`-gbBkeAkdAlfBqhBxmF~qIyOvLwO~pHypMTN@225$ !c\UngKxpKyqI{rI|tJwnGvmFwoFrjM(% D@<B@9:66*&"233@??52-JHA!*&"(%>;4{UOFѻ{l=;3JICKJCLKD PMCZWJ`[IebMf`Ld_JicKxoTtqRjgFidCe_=]Y8eaAZV3^\<eaBe`Cc_BeaCidEb^?keEnjJjgIdcCb`@ifEmiJth\^PBj[Oj[LqeTzm[pcQtiWZOHE>4tyaumnhqkjoWubKtbGw]grW{iKuVz]nuXp`JYJ:3&\QERF9ZM>m_MYK<UF7C6+@4.E:3PD<?2'QF=K@64(!0$5,';.)?6/2+%5,&92+$"0'"* 1-+`^Zhia}|v}oon[[Z[[YEED][YQG?6(#7/+91.D80A3*<1+;101%>1-$*!-$!*"%(( 7.*-#4(#+!)" QKIXNB23!--($31!BD/IL2FC4B@3@>2A>3=:0?<1A>/;<)=<,??.VN;S?'fT5O@&KD)GE)KM3LG1SQ>geUN>0N9-N<.L6,UC5G>+OB5OG4UO9LA2RF9^ULqgtd{is\j^Lb\O]VJjfN]\BTU8WV;TQ;_WIaJBsRHj]wcTi]Ko[{m_tm|vr|vmzvhpeUgZDl_Nwl\pbQph\a]Q\TMgbMa`FukWjaKqfTrdh_M_^@`fBYY?VY;daGccCY]=ehIbdFehJghH`[CZXDb_E]\?e`E]]<kmE`_;EY3M`7Sd=Pc;?S.<M,=Q,B\*Hd)Ji,Nb7TYEWTLXTMXVMVTMRQKOOMNJ=¨KܮӨУѢէ֥գ٧ Ҫ ͧԪҡОԡ̠}YCnOuR~O{YW\SylnvStMyT|UvSrOlKeF`D`E\qC\gEabLbdO_maAVZ]..k)&j1.F@31993254+'*'+(*'*(+)*((&{%n$i#kWY-`g;dh9]^>\SBbXCecB[LKdTFW1GQ$?N5=SRJYMP8!W%$yOmnJjeTojnZZV7;2=B/^b?fkBX[9LO5EJ9BC;\WKmohkmgpsoVSOPSM8;4:<5EF;zjd\hd\jdZpf\ldZiaYh`Ye`ZBC?:?9;;3mleMPNOPQOQRCCD8<57:6<<7g_[XOLaVRsjb{tlibZia[zvkfcXjc[xrgysiymymwodibWytkyvn\[YTSQvfWbH`N>haZTOIf^WfaWd^U`YOXSIWPGIA;RNHdd]_`\\]YWWULMIA;7>844*(4(%%$&!fjm@BELJKa`]33./0+VVV&&,,%..(65/00(/.&45*=;3;90-,!22*DE>BD:ED:ED;NMDURG\ZPIGB99165/<:6:73//*++',,(,,),,(220788<<:=?<:>:<>=<<:>>9;<:55443043-24/03/47037146236257147003,24-.0)02+/2*35.@B=>C<>C;?D<;?8=@:EF>LMDRRE`]OcaS^]N[XLZVHc_OgdV^ZK_\NdaR`]N_\N_[LVSFTQGNNDLMEFE=CE<:@;6<79>9CE?LNHOSMTVNY[QUWPPRMJKFTVPRVRkdGlbHh`EldGpiItiIvkKqgHohHjdHg^AkbAbY6hbBh`?d]<gaBi`@d^=aX<b\@SN;/.0'"!,((333'#rgFphDqjHrgHmdDsiGofBidH(& ! EB>&!952422=<:XT?wnArh@phAleAjcDcaC``CUUBLMGJHG841i_RŮʾ}eC@,A=*D?*?9'40&NH5VL-WR1XQ1]U6cW:cX9[U7UR6XR8`Y:c\?kaE_X>d[AoeHl`EiaFiaDf^Ac]@oeKc^Dd`B`Z<d^Ba\B_\?d`DhcFmiLqfUseRylYg\NXL@gZM_QDykZK?5lbTfs^irZp`IoaPwgWugUuePfTB3%eUDdO8WF1|kW{iQw^s[vZfR=:+"I=5dSEdUAWH9bWIWK?K?7NB9L@4SD8J=3@4,4,'=2,0("((" .%"+!'@72'?91~nȮϷƲɱҷúг̚{TJC]SFRKD846:68MIJ7309;,?@.88%=<,76&GJ2BF,FD5FD5DB5C@2ON;CB/OM=TQ@a^LdaK\ZAkgH`P5UI3TO;IF0LM0X[G_]UK=/UE5RD5ND/[T=RJ5JB-\S>XQ;a^Hxm_t^q^r`v^v\|xSvsQcYJehJmpKljJedFegFpqPphUskSldKleLniOikMnkTlfQdfEgmHqrMebE]XBeeKc`IkhOpkVjdT]_K`aHjhQgaMjfM`fAfhLgfNhcIonLV^6bhEU\6\a:]^CX]?_fAQ]4bmB^e@TZ;gkFZa5bl@^d=joDad5@T-HZ5K^7I\6H[6H\7EW3CU+B^'Ed(Ja0MY<OPFSOKSOIQOIROIKIFn{vYܲΣ̤˞Т֥ @@ -50,7 +50,7 @@ SyCTsХwsqv}wr\eKbCd?^{4Yz/Y{0Y}0Y|/Y{0Yx.QЮͲkj`ae G:.@0%I;39) P?3]M<]O:TE3A3'OA:TI>G<1I<2L@6RF?I?8B71A51>41D;5A94;.-9/-)(0$!6.*OFAQLA>7,4+#2)!;4-̴éбҶ¥ͲǨִ߿ʭ_TKvl^~H>5UI@XOH{ws[TQ/,%,(*&EG8MP8Y_AYaAVX>KJ9QQAFB3VV;FH/JF7JG5JH2CF+BD&`c?UU5`[CIH1JL1PR2\_HbbXM>0TF0]R;XK9UL5f^FKA-aYCqhRvdt]t^tbpaKvjP{sS]noIgcKchKehCipDchAcjEemDloOjjKlnLglJjiLloNkoNllPglJcmDkqHqpM\a@biJ]bCejJflIggK[`GabI^_B_cC`e?`i?Xa=]eE[_<fY_3Xe9Wa9]e:X_9Yd?Ye=]h?bmB\d:T`8[e:^e9blB[e8lsFio>BU1K_8I\7I\4J]6K]7I]7BV-D^)Fd(F^*IV7NNBQLGQMIPMHPLGGKJz|Ī:ժխ9J?>!ߩР CH|JxM{PPSRT_]S~e|KoKrPrPmJcF^~C^xC^qE^eEccLhjTgpTegIddS0.n/,Z-,b(#5051412-)&/+-)0-/+}('.*y("{)%p&#b$gED4^e;ko<dgAeg:YX:PD?T?KaADZ+EV52C8BXDHV9LG%J3#pqTffKidRc}a~dnmT`dBbdC_cE[_==='KJ6HE1ME<OHAwxs``[`a[uvrVXT:;4<?4GF9~QVLGF?C:3NC>LFAHIA`_Yihc;=5>?6C@9tlcrj^xqdynatiYul\xpdpi`sldvodxrgwpfyrh|vkyrflfYb^SgbZc^W\[QtgU}`FaN;`YR# .)+B=;nnfklbjjaih`eh]df^bc\^`YYYUUTR955@<7?854,(/% ""ADI;77=.(F62[VOUWORQMXXV54,BB9FGA<;377,88/96.22(42(41';8.IH>SRHPQDUVL;<3:;39:5DD=<;4++%&%'&*'!(%)&!..)..)..**)$('()!.2+47313---&0.*-,)23.25/7;4<@::<97:59=946100,895:;77935717;4=C:7;45:38=5@FA>A=:>76:29<3AD;?@9GI=QSEII<DF7KK>MM@<>349.380;A7>E;:@65:08<49@5;A806.4:28;713/.1-4958?96=7485.2-051/40061152374@ECe]@jcFtlJriGogGkcDe_@`Z;VS5PM3QN2PN2RM2PL0JK.GL,LJ-RM1JF*MF,JF.50) #,)*?:'<7'62 5/84":6$74";8%>;)43$,) &#)%'#.,)850<8&@>$;:#>;'>>&01<9%EC9HFGHDB0+*% tˮ;u=?#DI*IL*RU3YY8]Z:jcBjcAd^;meAujGjbCh`@peGe`?fbBlgHg_BdX=e_D\Y<\Z<]X:bZ>f^@_^<ca>id@c_;[[6a\<[W8XV3^]<^\>caCzl_h\Re\PsiYvzhsqeQVH=:0(cTEvdLo]G`O>G7-G92?0,:-':0*3*&1($6+&1'"4*$,"- =0(@4-C;5?6/H?5I?8C:4D90J>4A5/A717,&C71$-" ")"!)!)!VVLqsfup|ov|kr|hyqfo^itfdo`fqaah\W[OUXRKRNDKGGLJDIEPTMz{sac\IKIEGCDID\_YhibTTPOPJSVJUWMILCXYMnq`vSOF~qz}CB4($-*9;&TZ8V\9NV3`fDQP<WUBPQ>ZZCqqV\\BbdNbbOUVBPT@agA`b@QR9LO4OS5VX:dhKbcNXL8_W=d]C_Z@daDllJ_Y?g`DxrUtkRlgIqjNiaJigH]a<nlEUfmCgnIblDcl@do?fnCaj?dm@bj@glGgpElrGhlFntNblEgnHdjAmrJkuDntIdkAekJciH\gCalBkqMdkLagF`gBemIdp@hrC^d>R\;[d=~{Q[_5Q_1P^3al?^j=[i=Ze<^i?_n>]h;Ud8Wb6dm@`k>al@bi>ho>BU1GY2G[1EZ.G]1L`6L`2DZ*D\*Gc*D^*FR4LM@PMGOLGOKFMJGT]\`ЩҨ#Х(د'45ޥߦ Уțڬ
*߬ -ݫݩ
+ݫݩ
$3(#(1%C8-G;5<4/?61>63$('C95>75|xouoiwrlpkeid]TLE{zuz|k{svndf^[\UMPHRTJPTIPSISVLINCIPDPUN_d\TYUUZWTXRQVP\_\jll]a_MQQV[[KOP?DE<ED=FI<EH;ABMSTfklgnoinpkopcgilnoUY\FKOAFJ<BE>CF>CFIMNIMPJPSJNRMRTNSTQUX[^`PTXZ]_OTTNRSIOTMRWCIMDJP@HNGMUdn=cmBUV4kiBkuGitBnwCjrEquMouFelBosKtxOek@jtEbn9x|PfoBlwGkrHmqLvu^llRosO`fAhmJksIs{JjoEkrC]c?elCaiAekBbkAZe=^gAmvFiq?hoGXg9Yf9~SqCdr?ksDjsBZd/cl;Yd1muFT^1bn@iuEbm?isBdq>\h8Wd9`lAmxBm{DfsBdtF^l?muK`h?bo@grA^m<muDxtG`e9`m=Zh3^l7epBKX1`f<~rLKZ0KX+fq@cr;^l9Zg6Xe2\k7ao9[h8`n=Zh5Rb3Xi8\i9dm@1J5O5P;T#CX(H_,G^+FX+GS-KU2KX1IX2LS:NMDJIGHFBBIISyqw?ȝԧ @@ -78,7 +78,7 @@ G:.@0%I;39) P?3]M<]O:TE3A3'OA:TI>G<1I<2L@6RF?I?8B71A51>41D;5A94;.-9/-)(0$!6. %-#'."=,+A-)M0+W)&Y<6KWrAhPMWkLE}_]ca}e]kgfayRe^OPjM@hKAdG<`C9`C9\?5Z<3T90Q7/N70L71J72H51E3/B/+A1-=,*7((3"$.-,,&[cgťƹaeht}wsxmimy{uwklvbht[bpaiybkz]dp^dqZdriu]hv_hu`ep]al^dq\cpho|dmzgpzbck_[cefogelihr_dnTYeMQ_WZe "512yuYCElOIun7)2@1;E5= #:4?OBKOAF^KP`KP]MN_OQdRUbOPeRSkXYiSThQRyppRPIcXMֵs}|[[UleKJ1!1 zQSecolɑurnk喋˨onpqfgmmss~ig|iewbbczy|wwxvvwvuwutvvuvvuxvtxvuxwuxwuxwuxwvxwvxwwxwvywvxwwxwwxwwyxvywwywwxxwzwwyxwzxwzxwzxwywwxwwxwwxwwywwyywzwwyvwwvwxvwwvwwvwwvwwxwxxwwomlvruxxyxxyywzsprxwzzxxzxwx|vusu{xynfdug`zyzwwzxxzxxzyxzxwywvxxwxwvxxwywvxwvxwvxxsvzssvstvswusvtrutrutrusqtspsrpsqorqorqoqqnqqmqpmqnlopil\A:R72jbfhqpƢººøùø¸·¸ù÷ǸǷɻ̼νноѾ¼̲ڿu}hq_}ow\a^J\]GvyaѹmoaNJ;LH6EB/EA/MI9E@.EC,>9(A<)A=)84$KJ<uvk[YY/&g`ERN0XU6b[<UW4HL&^c?$"' /*@>'+)(&%#0/!77&41$+)MN9>@+HK321B=//,98(55#EC/RT7RW7@C-=<*XYFIL7QSIEMJuvouvfddzqoow~x~zξȞ~MPTKFHQPPJIIIIJKIJ]YWUPPb\Y\YQQNNa\Z`ZXTPMZVTFDERPPKJK@@ALJKJGHPNNfih~zu{slqcz}uw}jz~l~rzóɵìŮ|abXVTLMIBFC<JE??:5;6161+;50;4.:3/4/(4/+60-3.+2-+;74:62931&C><>99D@=A;9@:9A:8E?;1*(+$ 6.*71.5.,C;7G?:A:5 ZVR]ZT\WR6/+4..MGFF>:B95.%",'&{ǟ²ñƶǶȸʸ̹ϻ̹x#"!%$
B}:C7py
- + $,"*9)*:)&L6/V2.[(&\60QUeGhNSdfI?xXX}_\zc]lkmRhKUmfPIjM@hJ@dG=`C7_B8\?5Z=3V;1R7/O6/N80J71I61H40D2.A/,=-,7''2"!2""/ - - '!
X_dΧƹ]^`]fskr~rqwmkrmlrmltlovopxfit^eqZ`m\dp\co]dpaiv`gvakwbisY[fOR]W\hZ`l]esU[hdgp[QST@ASBFN@BTGMTJRZPVRLTLGO$ (ROL~XEHeKHeTT=5>QMSLAK&%>4@H9AJ:@VFKUDH^MPZHLaNRdQT\IL]KM_JM`OSnjhMGA~ڰҰѳѯҫܲɰL,1.!:%(llϨtrlkecebon릡pnh```nmrljolinzut~vslgjkhnlhokgnlholiolhnlhmlhmlkmlhmlimlimokm~{smllhmlhmlhmkhmlhnkgmjgmkhmjhkjhkigjplm}|lhiifjhfjhejgehgdigeifdhiejfcha]`eacfbhfbid`eb]cicgf_`c\\a]brjfsf^[_idfSD?pYLTGHa]g_\b^Z`_Ya_Ya_Y`]X^]X_]X_]W^]W_]U[raVl[J^PIZU\YT[YTZZU[XSXYTZXSYXSYYQZYQZVPXVNWVOXVNVUNVTHMS/&F#YMSiqpåºĺ·ù·¸÷·÷·ŷ˹ʻоҾҿҿҾҾֵwzjROAűĮĽαٺŨ|relYGM>cjXHG7A@/GE6GC5PL?ED4KL9IF7GD5HD3WWGlqb\fVXYINJ8FB.GD.FB.B=,B>,IE.D@*;6%EA0A>,NOA<=1YWW$ DE(CC$WR4qfJfa>YZ3MS/+&_]A34'&&%2/ 2/ @>-HK6JM3MQ8U\=NT6AB-/.OQ5X^;PU2EF(SU5@@(==+:9(95&@=,70#=8*IE9ljfVTQlie```stl~ͱļžǻנ̮^\XLHIIFC[XS_[TYUSHGGQNNIGHJII[WRKJGIHI]WVQLK[YWJHF^\Wig_A??AAB=>?IGHHFGdfe{uws|zq{k{luxeq|v}tptnTWPPPKJHCE@<94/;5-=6092-94-:3.82-70,2.(83-73.0.):83510B=;,&$2+'6/-5.+-$!$/(#70+?3/A52A72A94*#ZVRSOK[WT`[XFA=(!@96D=9( yɡź´ıŵȵɶ˷˹ιϻӽƸ]fe5-3"( '((-IN;AM!&
*#0"#1"!:&$N@:bULY81`))^-)ZMQN_YV`lRGq\Vu`Zye[o_Y^X`ZQWhMBiN@jMBfJ?bE;^A6]@6Y<3U91R91N7/L93J72H60H61D3/A1.=-+;))5&&2""0!"0 !.!("\hlТķ\\^hjwijrjjobciihqnovfhpdgpeiuQYeTZhY_l^eq_dnaer^dn^bl^cnY\fVXcVXdX[fRUaNQ^TU\bVXVBDXCF[GIZED[DFZEFXCEA6<rpi|UFHeQQWEHB7CPDNRDN$E;BM:@N?DO@EUDH]JO_MOcOS^MN`MOcNR^JOnegXUQ[SIȧڭڰج۰۰ۮ⸒sd7$. vifɻnkjfgekeje{ȿgeİlhw~[[]WS\VR]XS]WF>X?.VPPVS`YS^YT]XU^XU^XU^WR]YQ\YU^YU]ZT^ZU^bWXqYFdQHZW^YU^ZU^YV^ZT^[V_ZT^ZU^\V_ZT^YV^aSPhP<`PKZT]YU^ZT]ZU]VRZXU^WU]YU]XU^WUVskkkfgd]`aZ`_Y_kab_W[WT]dXWqfRKScZ_SC=gPCQ?=ZWbXW`XV^YW`XU^YU`ZW`YV_ZW`YV^YU`YU[yhYbN9bUJXW_YWdYWcYW`VU^XWbWW_YYbXWaYWbWU`UU`YYbXYbUWaYT[A"K( [TZiqnũǻŸŹźƸƹĹ÷¶÷÷ö÷ǷɹǵƴȵɷμѽѽֿտԻԼּʸȱ$C)'uPI{m_l{mKQCHK>FI:\dVYaUQVJ=C4DF9BA4JL?X_O|xTYIul`kW{PWFQSGGH9GF7KJ;BA3@@2HG5=<.??0HH6IH5HG5EC4EB3EB3HD3HF4KG7IE4MM<KI7C?.EA/GD0FB2@;,@<+B>+C@+@<,C>/=9(51"<8+WVV%"EE);<FC*`X;fb@b`;bd=FI+76')$=<#67%.-# /-1.??,>C+HN4KP4EK0CG,;9&97%<>#OW4Q\3S[8=;%63%.-:7'@>-<:(64'99+55%WWE66'lkgomlxtn~{vppoeeftsoʶpwt嬵囮ݠgd]XRO\VUtnfxoeUPJNMHHFE]ZUYTONMHUUP?@@DCBfbZ_[VZXTZ[O``U@?<SQP667GEGPNNRPOefdxv}u|{t|tx|iklVbcNXXF^]LbeVhl]gjYim]pubrzvfkbRRMSRK>925/'83+B?8DC<A?951+95/40+40*0,%94/751410.&%3+&0&"2)%3,&5,%9.*;2*6+%80*4*'+$HCBOIGFA@@<:>99E>;4-),##C<9y̤Ǻ÷ĴôòĴŵɵɵ˷˷ͺлӿԿajg/'.# -(, M7B@z $
3#%B-)H1+ZPER<3^'$c(&cA;\PLbSIm_LrhTulXujXoZMmSFiMDgJ@kMBjMAfJ>dH<_B7]@5Z=3U91P7/N8/J72J82I72F40D30?/->.,:)+4%&2"".!/!#0"#,!)!#
n}~[\_^dp[_ieemXYcSVcikscfofirekuaiuX^kZ^j[_iUXd]amXZe[_jWZfWZhQS`\_kX\gMMYZ]fTSYcY\R>AWEFVEGYEGWDGVCE]KN929 y|t^QU[ILD7=1+44*33*5,&3M?EQ@EO=DTDIUCGVEI\LM^NO`PQ[KM\IN\LPspkQICnܳׯٰٱڲٯ̩dFC5'.|uoefkhjgkgoj~{zupȬkislhZ[^WZeXZgX[d^KD\A.VUUW[hZ^fZ^gY\fZ^gY]g[_hY\f[^gZ^g\_iY\ga]^s\FhWJ_aiZ_k\_i]`j\`i_bk]`j]`j\`j\alY^iaYUeL6bTL[bk\bk[_k\`fbbdY]daaf[Z]je]xpbssxprsr\bj`_`]]_ZafwkX]dgfh9) `L>aSN_is]hp_hp_ip`iq`ir^hp\ip\ip`kr^kt`infZNiR<`UK`nu[mvZjs[mr^mq\ls^nu\ms\ntZmuYkt[msYlrYmr[ot\ilA%!F$bcejpo¸õµ¶ķŷŷŶöŷƷƷƷŵŵƶĴĴĴɵɶ˸λϼԿŎ#
F,!rJ;]<0J>2DA3D?1C?0@=0@>0<<,DB3@=0;8,A=2=:-:8-B?2FE6ED4<;.AA4>=0BA3?>.CB3::,><1@@1:9->>2HH6JI7GE5FB4C?1C?1IG2HH0NO4IH.B?+DA/C>.A=+B=+A>,>;)?:)B?-?<)?;+@;.<9+73%>:-TTSEG&V`3HJ*leHg`@ifBPW)_h7--+'.+%#66"PR;JM1RR:EG,KP6BI,LR4HL4<=&CB0=?%ZaAOT7FI+U`8Wb=LP4JL3@@+53"QT9EF0<9)31&9:%BA-HI8adV|WSJpni~|yÿzzs̯ɴu|ʲʼuzxVUQROIe`W]YR[SM\SOHHDZ[SJKBVVNjhWhiWBC<NQKppdVUK`^VabTmk[NMGOOJjj\`]ULIFMKDWTNdfczxwszx~u~~x}pubuwdtveorafhWhiXceS]YE]ZF__G[[D^]G`_H]^GY[GgkXmr`osaehRloZsxer~{mof\^Tfi]~yjkdFD;JF>B=885.40,0,(-($(!5,)3+'6/):30<73-&#.(#6.'80*:1,-%#&"60,60-840<73;731*)3,(5.,# 4+(x̧ǻĸ÷ĵŶŶĴǴɶ˷˷ιιкԿR[X.%. @@ -211,20 +211,20 @@ kJBYOpJ0x@at~j}t{x}pc\Z(#y\<2eZG~jZpjXX_Tvl}s} .@-%<'B-# *! #UTUUXWfjg~mWEH2&OQPkUZlM>ũdJ6J'jW6*[4*qU$Nªy}uZUSvrU=jO;S9)O5qXN:'ZG6jZEzd{rZ{coxh_KjcIsoKkeAwlSuiR{tU]Y0~zPyWxqK`b~^t~vLwNz^eR@cRDm\LB3&2&7//'<,$B1(H6-K9+i^I϶~ѻ}{cvp\ndQg^Mk_Km^Km^Kt]{YnudDv]~oVtXijq_pbrdwlqnxzWfhBxuVxfz^dohz[}Xaa9brsj{|UTV$ # "S>tVj0>1NZZ@gM D(pZ)9)6(=.XDtXk(t'/CIQ]XH66>iK@OGt:AW-5Z-7A ,_5;qRYtLSz@EA=\S>=*.aD_(wl.-01]AHͯ}zb$%~!"$dB~c)3%&)<;Bg*#fYM0$SA4g\LTTF]ZMgk]qvfXXJik`in`jk^ceR]]J\\H\[I^]MghXeeT__NcdV`cXw~}ݿ̾ȼƾſƾFiZ%B;*LA/WF2SA2TE,TG/OB;MBC@7C92Z30U--},+9(c9%h''cKD/0]:/gC5jH:mK?oLBmNCmNDiI?cC9fE9hI=mRFw]Q{bV}dY}cY~dYx`TsYMeH?\A6dMCN6/D1-A/+A.,A/-A,+<,*<+*>*(?,*@,*>)';'&9$%7$%JOHԲ̴[[\=<GDDOA@KA@HHHQOOUTSWPOSJHNTNOeMMeCDhQSc_Zwutpng˩¼#!#LJO0+.gZ\A69heQGHYKLk``<.2xom;/0hnj')*"!*$'3&,6(-7)/6)26+250*θV\ZmrqTVV_ggBEGadechf@AC,),679_`WMIHED@YTOKIEgc`uD@:WUOHD?^ZV[[UXWPYYSQNJБgd`UYX6LF:RI4@96B<,7006/67433.21+5:315/30-550::410*-+$30)50(1+ <5+<1%F8+>3':-$>3-:0';2,:4.@:172(91&8.#3(7,%;1+<2+?60?2,A8./",ucSx`NhL>oaiYcE/ueRQ=1cL?O9,2% #
~rn8+>3=1&?4PEQHD8s-$m2*d@8S;/pO?wOEqI<=!')A+9'"
-,9+$7&:'#
"DBDLLMfie~}q~^\QPLJRRR\qo=?}ct\:)J/V>0]7+V:'WRáá~|`ZXsYErXN2tYt_HK8+H:0:*S?.vsWotdGp}t]qjJquq|}qN{aukhyZrt|fziTtdSXG0_S@^TA9/2';*=+0G7*QB2zt^ʶӼʲcbP_[I`YHxeym[o`JhU7~zd}pXzcqU|deczsNY[txMhkBoqMdgBSU0SU.moInsO`l[{TpjEqnFfj?ag:quJ\||V}zX}UVW% &"% %X@b&YG%HHD|7$u+9Ģ0A)8'A.O:oVg"Q3X;"S7P:& +,9+$7&:'#
"DBDLLMfie~}q~^\QPLJRRR\qo=?}ct\:)J/V>0]7+V:'WRáá~|`ZXsYErXN2tYt_HK8+H:0:*S?.vsWotdGp}t]qjJquq|}qN{aukhyZrt|fziTtdSXG0_S@^TA9/2';*=+0G7*QB2zt^ʶӼʲcbP_[I`YHxeym[o`JhU7~zd}pXzcqU|deczsNY[txMhkBoqMdgBSU0SU.moInsO`l[{TpjEqnFfj?ag:quJ\||V}zX}UVW% &"% %X@b&YG%HHD|7$u+9Ģ0A)8'A.O:oVg"Q3X;"S7P:& MMAE~78o-2GW `x20EDIJMNFI26=4|WCwʯaZ" yY&qʧBA_TU74]PqFB'/3.0;<:8B`C3mG8O7(ON@RQCccVxsw}kuzk~nqgbeU``OcbQb`ObaPmm^bcScdTij\`_Tw~̾ȽǾſǿ٭WZS,E</LA)PC&Q?BXIDA:EMDR73f.,z&)x')#!% K3pQ-b("n"%_"J!{5"$W5.fB5kH9lJ?mL@oNDjKBhJ@`D9hKAhL?lMBoOFy]Sz`Vy]Qx^Tt[OqXMmRI[B8dLBO80C/+A/,A.,B0-A/-@.+<+(:)(;'(<(':'%9%%5!"2 "Ҳ̴XY[>>H>=GCAKDDNJKRLJQDBJ@>HFFLUNNlXWdFJ_FFlZUūxxuwxrǢÒ(&'JIL5/3gY[E9=~dcSIK`PSmdeF<;ebZb`Vnui999::92020-./+./)--'+,(+H=7̴X]\osrTWXajjAEH_bdnsrrvv@AD+)+557]]VKGFB?:WTNOMIidaږ`^WccYcbZ_ZV qqi}tqgli^vrf}xoW_^KqeFi^LpcHm`If\BXOBUL?UK@WO>WO3D<CQLH]VKcZJ^WEYPJ[RGXOGSL?KD;@=:;9CDA<=9:9474.:7255042+73*94,=716/'5,&/*#:5/6/+=41A?9LJD:4/C6+m[nWij±UB8t\PzQBvN@L@[NeUgV4+#.$QE^QdTQD~q.!/$=2j?5@0(dQFlXzurpo<-"2% 5&/!5( !3-0A=>eid|~~vlx~yILNODFYjL`b@.zmW]7(YC0|j[3'R0"Vts|yzVPLmW[@*aw^FSB4si[g^O}rdzk[\H4fP6rg[ExnZsfX>p_G}bpbHZM1|bs\hU>yYsPr`?oSiX<{b{oOthGs~~Y{S_uXy]vgL`P:j\EncMmfOtoZpm^om\~y}{zhkkiWgdT~zjsm]rhZi]MaRE{bu]rw\s`Ht^S4llFUU-PS.bcC\_AfkLheEgg=di@opProQzxYvsrGjn>nrBfj<\`6OR*`h:dj;{{TpoSRT(%#.*(/+,-('+ cH$u#@-
7-$Ai!v3+r*3z/Aǥ9ҭ;ʦ(Ƣ+:tQ|]*2=Kp!*<B|mvanyzedTTU
X<8GFyLHhRLxeanQEifx54z&NUi^^T44TOwi}lULcTj'/155H 7!]5*d=.gP@ED7OPCNL@hi_w]`Rnrcik^Z[L^_PYYKacVceWll]eeV^^Qy~̾ʽƾǾDŽLOg/05I:%I</PBCK@_62"'#&"'!'!'%#(!!%Z>nV&_5#m'*`[ LJ.!:))E+)c@4iH<kJ?kL@mNDeH>aD9aD9aD9`B6cF;oUKrYNrWMtUKqSIkRHiOFeMDZA9]G>I3/=*(<**<-+A0->,*;)(:*)5%&2$&6$%7$$7##6"$#Ҷͷ[[\KITOMWNKRKJPGEMLJPIGOPMWYWZIBA~wmZY_EL[ACS87Ķкrrk~|v/-0JJK6/3m_`F=?wdbVROYQLosi|u}v}wci_88899:887788788556343544UOFǰZb`nqrdgirz|?DF_dc<<:B<8><<\[TKFCcb\hg]ljbnjdnkbȺ~}szsjnf|øĵͱXb`RoM~lO{kCi[VymOqcMreMxhMvgQvgYoQyjRxjLufNvhMrfIk^?[Q=UMF\SJaYGYQ@PHIYQBOFBMF9E=9B:>D<9=9=B@IVOCNEFHBCFAFLGLTPJQLKUOJRKHNHIMFbWHvqdJ̴_.#RIz6)REbT`R:.703)TISDdUte}ȳλuvfsкënyg 1($2% -!3*#! ##;45LEFghd}{ohmpRCIpCT\:Eg~:?vhOn_IW1#{kVm]JX5&l\H`8~~vlo~nkhD3%PA/D/G/xeSd]HzbwkTrdPYJ5zhTo]IvdO`K3u^Gwap{cj`o_=jMsaG~pVg|Ur}Z\rr@wo@wL]mWwRueBn[?o_GjyqXzaxrZxv`|iso\nq~~kywemkYqr^pqZedPxsclkXqp^_]Lb]PlfXlaPuiYgYEfY=dU?vkZukFumJqiJUN5G='v`yjQqkOtuTvyVrtMfgEbcD\\>igF`c=`e8[a1Z_2TV1GF'X]4quJusQwwXXZA>A<;=KILC>A0,,7)}b%y]8$H8(k:6s)!#r5à&&Ǣ)¤%ɦ%ά=8>%D% a$lI?ZBV<O0O1M1Q8\UyGId)*YQHi7r4cE-p_a) swjj?۸DƗ'Z)tI>xD8ZNeSZ3%7@&&oG;|,1276nVSI.'RIs_O^U*KG<MLCSSIRTJ~puhVTFXTFQRDgk_hl^v{p}psjmpccdTcdTdfYz;ʼƿՙtr%#'=E<2OBL?8|()$$ %%)!%'***!"(*{{, M2`@#\(&h ]N :-+.U71eD7jI>kK@iJ@bF;X<3S82U<3`G>aKBiRIjPEjOEkNEhMBfLBcI>_D;S81W@8D/+8(&6'&:)(9*(9)(6''7'(/ $- 5""7"#7"#6"#+&$Ӷθ\[\IGNMJRTQXTRVNMQTRXHDJA?JIHNnc[ƲxucKNkSUp_]{xt|{XY]a\Whdb637CDDKFDVMHjideg[vwyy|tx`d]99:99:889888789556344455[UK̯und°®rj\ψ_]Z^\TɺʥҾ˾˽ɿrsnɳXb`VqQ}lUqVpUykRvhRwjQviTwlRuhMteRyiLscSvhTxjSyjTuiPocRuhRuhRwiPtfRtgLk_PobTrcMk^YxlTteVqdWrgTtgZxiQh]Rh]Vm`OfXUmaOh\WrcRj^Tg[^]LPF0jcNò§fV]Pqdo`vRBzhvf~ma:1A5I;UJ}ĸɼŴƸvnW~aQo_vRAx~l0+#-2.)*#+)!64,2/(00(#")*&$&!%$!'$#")$#@9<gie~~~^lO[T6=Ie;XQrVte=.l]GM+ZF3ZA.purZVT]P?neTkdUyaweNtdNvcLtlwcye|gueOk\GvgL^a~kme?}uM|SrNz|Yqh?sLwO~VyV_O,qcDn`Co^GteQohRn}|f~rusbol[liXqo[uq`pqnZ~zhqn\mm[o|zhsgfVd_Qi`PndVWLA^PBh[CuiLQ@.C6,1$K;,ubhlmKmoJwwNijC\\9ac=Z]6[`8_d:Z\4XX4ED%Z[:VY4ihGehyRRT%$%*((.--?>@JIKEDG,&"U@#hL!9%K<%iW5osjww#bKs!#"#ʦ0)ez18Ȣ4͞742{3y,r vM_0L(m4h2$yJB}\TnO+ڲH̲?B!fZVM"& /)g2ɣ-͠-c4S, H)hTwN':"7!Q*"W%+-*>TQG,*mMÛ,)NyX^_Pcg]LMEXVIRO@SQDYXL\]PTVJadX}~zcgY~smpemnc^aTkpcz̺Ƚȿо3<$'T86X63 % !'#)$)%*%*#&!!*+% $#(~q4)KbW!$8 !A)'*, @('Y:1cC8gH=eG<bD:X;4H1-Q>:Q=7VD>bKCcKC`G?dH@gMEhOG`E<Z@8R:3U>9?,)6&%3%$3&&4%&4%%4$&2$%-"."5#$8#$6"#2"uxtҸи[[[GFMECLUSYMKQJIOJKPABHBBLSRW~obfSZjX]VLSACJghm~bcfztphc_a[ZA<CFFC|yryx}v~xyyz{[aY99:99:99:99:89;667454566`YNٰܴددӪҧҨͥ͢Ҧ˥odV˻ķ´̾»}ʳWa_VrS~nSyjY}nX|oQwhU{mV{lWykVynV~nT{kV|mTzjT}mO|kMxhGobOzjYrY}mZ~oW|nOxhR{kVykX|mRvdWzjVzjY|lZ|lZyhZwdXsbZvdYscWtc[{jXyg\}lYufV]MUJ8tjUʾʷtd[PL@OB]P˺˽Ź¨ʮ§Ů¬]Klp}t`8G=0;06>48?7=A82:18>5*1+:G@2>5*2+)1,.51(,(+-*::8ghdd^hjXiE]RqYtGsW<D]O8V>,Q6%}y{}]ZVylTi]EkdN__LgbOZN9rcLv{paKu[jo[EqaIfr}[~`jbEȩѯriDme=bX2f~pS~cmPojX?nhZ@m`OobMtjSqgPvlWogRso[~{frp^utatq^pnUsqZjhSxxd~|grwsbwsbc_Mqtour^hdR|zhxscwn`e^Q{rdi\NaSFTC2PA4I>3zoan_Jj[FvgNic@rpHik@^`6Z\/UY0ZZ0X\0_c:XX5MK,]`C]cBacCeeFbeBinHcuRRT" /.00.0:323+"-"0#3)"D<1hJf!tS
~_dK]Ie (sS
v#ģ7Ť( '1+ȥ Ү$Ӱ!Я&ί0˩;6v/Wy6nFkHZ;?'_?2nF/_Q(,l"X@;Yy>L3JEINHEW8r@L&37JWA<2{6xL($9:c,/rb8%(@k`8TQBTUJPPCY[NSQE`bSgj^^_RbcUhi\^^L\ZIhhY``QffZ^^Q{̼ɽȾѪ}{'$%z#(!%%&,&+"( (#(&*,.$'"&"'" &#*kOL""8*)%5///'9'##&H0+X=2`C8bD:bE;[@7O93J93E43H:7H72N94T>;W@;]FA[E?YC=VA;L73H30:('3%%2#$1 #1!#/ #0#-!, 2"#4"#5#"5!$ԸϸXYZ==FEFMQPUYW[MLPLMORRVWUZPLPzmԳLCKQJPONTKNWUX`\_cosv}tspnhHBD #@B?}w~vy}v{y~w}u|UYQ:;;99:88988999:78856779:`XNԩ֯ҫӬѨϪϩӫΦЭk`Uǽ˱Ī÷ԽĆůYb_V}oQxhX|nQvhPzkT}nOziNvfV{mY}oV~lMxgP{kW}m]rZpSykW|nZ~pX|nX|mX|kY~pZrX|oVzlT{lTvgUueY|lT{kVzkZ{kVwgWwgWzi[ziTtaRuaOtaX|gUzhAWJNTEbZFyc{tpwlSfXBlW|eяxמĵ{yqp^qm\ytbzsc|ir}l~xe|gwbPfVobP{r_ulZKQA7G=:JB@NFARH;L@7G==PF@WL8LA;QE?THCTI<LAJYOK[PhifFhMzSxKZKhO|b|}gl}iWU:,r_\ZsjSodJxaitjUzr\rZA1xqfJsVt[ua{Xke8|VzhKo{fHt{]}vX~qtjW>eT=cN9TB.aP9rcLpeQ|rXg]S=qfPqjSf`MgcMtpYjfPsnWtnRhaIe]Gd[CjnhTngRplXc^Mjuqz}zj{xgOI:mfWaYG|whfZK~pH8+@0#ydWI2eX>zlQl}nSOE(]]6cc8YU-ZZ0_c9X]4\f9uzUksLlrQsvW_eAZ`=cgBinFptUsy]SRT.*'733535503%!""('03';*XAQ:\GS?xYvxoPpS3 4rhDJ"ɫ4ӱ(ִ(ү)Ѯ)ѱ+Ѳ)ͮ(ʪ,ɠ9zTU5T6X;(dA-N)aQ2.85s2.}q{l}~syLGQ) 1L(W.C!1BE;LB'y>{l\50r,.HIrEBfQrHF4˥(Ы-<]ZAceaUVHXXLSTGVTDOL>YUFPN?[ZKQO@\\J[ZI]]Nrtlz˼ǽǿȿſ۲$3'&&)%' )% (!(&*$&&)*,"$$* & $u#'S/""&:4(C<#0);1')
/G0+V=3]@6[@7ZA8W?6Q>6O?9D53RDCWDDH559$$6#$4!"8&%?*)@.-4!$--"* *$%(-!. 2! 3!!4 #(ӷϸ]]]_]aa`aPPPQOR`acoooYX\GCM?;BrnuisnbIOU<>]NOZ[\mlozxzruvxu{ws^WXXTUsmkXORMJPGFC}yyzyyz~w~MRL:;;;<<;<<99:::;9:9668668g_T֮կӭկӭ̨ϩϩѪѫϩ֯g\QɼȥóķȽY`^U|nV|mW|kUykVzlQwhNyjR|mZ}oWyj[{l_pUykUzkY{kVwhWsdWufXwiZzlQwhX{jX~kX{lX{kZ{lWykV{kZ~n]oU~lZp\}kVyiTzjX~lX~j]r]o`l`l]pTzga~nTYHh`Lpl`Pnl~gZP;xoVzs\yb¨s~ucmfTjhUnn_moaafWdh[ik^hjZghYedV][OifZ|xju|dRlVHQSGOM=egVhub^lZE]NF_OBXJLhXHdTEbQGgVIgVGcR?VGDYIG\JMcRMdTgge}}|rjLsUX8IBLP{Opuwn[gM>~h}{zr~a`]peQuiPwjT}oYkdUBWD3iWGoZFtV̫w[leM|vW|zP|rLsb=iZ7K9#s^IX?+`A/w^GpYTC0{fQtWubG}mRq`HeWCxmYhZGsjSvmSftkSy`xmUrfNlfSqkW}hzhjb]Ge]D\WEto]pjVplVrq_pldTjbSf[KaQ?yco^It_v]~nTjsUI/SF1VI6edCaj;OW1T[4elCLU']e?\bAagAda>hcBgeB{|YosTTTV,)&2+*'##*&'0-.1--83+<77<9=GBD@3 XD;+A-mS%G-jQ*pq{)A? ˧.Я"Ϋ%ͫ)ͭ+ϭ,ִ*մ)Ѱ,ϰ/ʩ1=}]#T4pI5W+nC5ug縮ljeX]OCHjOKV.s/G!
6
@?;O= <3,whZ^S|-+a:7ucVmB4uLY8Ѭֱ7YWLTUL^_RWVIOM@JG9NI<KH>QQEPN?TRBRQCgfXnpf{̾ȿȿݙfg('&%,(%'**")")&) $%''*%)%%)%*y $_$&" 1,-HA(B:*+%;) +A-)P92T<5YA8U?6T@7XD<\IA`KBaIC_HErZZY@AI33<()9')+"$(*!(-!) -"-0 "0 "2!/ STQҵ͵___MKNVTXFDJQRUQOQWVYA=D?;C95><8A# +bKN[?C]ORVW[olnqnmxy|ytsliklihVOPwqp}vLCDOOQHID~x}}xnuj]cXMTITWOEGC>>>#"$##%$$'$&'&(''(*)*e\OׯױկڳҫЩΧϩӫΨΥٱ`SJϿŽƹķžzr~|oywjwwkY`]XymWwjZyj[yiVvgZwkXwhZxi\{k[zmZwhVsdPscSyhSvhZ{mXyk\~o\oat]t^qX}nQxhUzk[{l]yj[udZud\xgYvfXvf^yi\vc]|iZ{i[k[zhXyh\ygWq_WyeU}fRu_\o]hhWYTCQK;mcTqhXofSvq_\VCSO;?;,_]OGH7UUEOMBkh[feThj[dfWmn_a`Qml]tudywgzyhxwfxwfzxhom[k]N`fWul^S`P@^NamZ_nYPgSKgTJkUKnWIiVJjVFeQHcPKcRIcQE]KJaPTiYffd{}}~RwVMpGZn;1\tR|_wqtrrZJkVGxv}~~jhekaKi[JRC2TD/paHz_lY@ufY[D0nT=RF)qeGqlJg}vhNjYD}fI7(K.lN8gW;~lSRA-\M6cVA\O9n]Gj^Jyq[rmVl~y`lgTmyt`}ye~h}|c}{duͷrn]plVnwyxg~kvu]ut]s|y~lzvbh_LbUFbTGOA5`O<\K8zeaUEP@0C6'znbPH2orLP[-Xa8ekFZ_2]b6T[2[f;^j:}~ZllKppKoqNosTSRT#"0/2.*)G>,*&!957@=>A92K?0D@Aigi<75F>7J9 X>jM}]kr}# ƣ#ţţ#Ȧ%Ϯ*Ԯ,ֶ0ظ2Բ-Ӱ+Э(ˬ13U(_ `/&zi~qxlmMCFUCGe_yiR>ˢ:]3X0R/2B_n! (2\RY,&H
YK}XH9̦=/98ʧ%ͪ+fW*POM__UXYPOMDQNBMJ?MMCOOETTHUTEWVHSRDYUHz̿ȿȿċ29)%(&&&((!,+"*&%,',"&|"%&*!&%)#(|#%_)&%)=7-H<*"@4&- -
*=+)L62Q<5R@7T@7_HAjRFmSGkPF]A<N45]>?kHG[99P56@+.?*->*-8&*,",!0 !1!"0 "--/ *MOJҵ͵]^_YZ_NLT31<87@B@FHDJHDJRMS838<9C%"*bOQ[AF\NRNPTolmsnlzv~vontnlzOKKVTXILG}wolseV[QOSJUWOcc[_\Umh_^ZOPSM432+%&3**0((0)*0)*,'(*%'f[LװٲײشΨԮϪ˨ʧʧվղYOGȸ|}}oxvjqpcrpdttizxkt}õǺZ_]\ykWwhXvgTqcWrdXvf[{l]|m]{l^}l^yk]|l^oX{j\~oX}mZrS}lY~m]o]o\oW{kSzi\}oXwg[yf[xg^}l_xi`xi^{k_yi^wf^yia}m[yhZue[tdSo_Po]Pr^WwcKjURn^WcUVUJUTHXUHYVHebTXVGSRDbaPwubxvfkhZuq`ywgyygxxeyzgttbstbrq_ut`tt`zyfwsaurawtaxufxr^xdKxWDk`T]fX56*RhVJiTSm[ivcmzdSnYPkWPiUPjXZuaVq_OeTF]LKfSNhWSl[Vo^fgc}}~WzSSwLaybVw_{xiq}igV~i~~}aa^y}sbndQxwcJr`KdQ<YM=iYE{kU[O5ɿj\K4q]Ft_Iu]j[HO=+Q/[8$yhSgZGg[KndOaTAmaMumYyhtx{{uavnXwoYuqYmxua~j~iuywckhRhdMqnVvt[jjwtbsp}{hwuf{~zd~|gw~k{vfmeUbYJi`QjaRk^Nj]MN>08({k]^OCE<.zoCysCTU4HK,ad?TT-TW)fk?]d6ho>^e<hqLgpKbcdESTU#!#" %$&" B:**&213;883002.0><?%"$XWYmprcdfTQND8.D0W<mM`lx Ƥ$ǥ Ь/ϱ0մ-ѱ)ִ)յ+ձ+ճ&֯;e:7 "eZbIoM8zI-`CfGhPyWϠ.Ӭ"e?
Y8B(
[ fj?:rauapV|\vY\2!'Ϯ%ѯ%(+ǥ4iW!EB?FB4JG:IF;EB4LH=WVNTQJQPFSRHOMBKH:TPBy~ߺ(''+('))(!-+#+#/' ($)!% %%)(. &|"f##3#4.8RD+;322';." +
*=+)L62Q<5R@7T@7_HAjRFmSGkPF]A<N45]>?kHG[99P56@+.?*->*-8&*,",!0 !1!"0 "--/ *MOJҵ͵]^_YZ_NLT31<87@B@FHDJHDJRMS838<9C%"*bOQ[AF\NRNPTolmsnlzv~vontnlzOKKVTXILG}wolseV[QOSJUWOcc[_\Umh_^ZOPSM432+%&3**0((0)*0)*,'(*%'f[LװٲײشΨԮϪ˨ʧʧվղYOGȸ|}}oxvjqpcrpdttizxkt}õǺZ_]\ykWwhXvgTqcWrdXvf[{l]|m]{l^}l^yk]|l^oX{j\~oX}mZrS}lY~m]o]o\oW{kSzi\}oXwg[yf[xg^}l_xi`xi^{k_yi^wf^yia}m[yhZue[tdSo_Po]Pr^WwcKjURn^WcUVUJUTHXUHYVHebTXVGSRDbaPwubxvfkhZuq`ywgyygxxeyzgttbstbrq_ut`tt`zyfwsaurawtaxufxr^xdKxWDk`T]fX56*RhVJiTSm[ivcmzdSnYPkWPiUPjXZuaVq_OeTF]LKfSNhWSl[Vo^fgc}}~WzSSwLaybVw_{xiq}igV~i~~}aa^y}sbndQxwcJr`KdQ<YM=iYE{kU[O5ɿj\K4q]Ft_Iu]j[HO=+Q/[8$yhSgZGg[KndOaTAmaMumYyhtx{{uavnXwoYuqYmxua~j~iuywckhRhdMqnVvt[jjwtbsp}{hwuf{~zd~|gw~k{vfmeUbYJi`QjaRk^Nj]MN>08({k]^OCE<.zoCysCTU4HK,ad?TT-TW)fk?]d6ho>^e<hqLgpKbcdESTU#!#" %$&" B:**&213;883002.0><?%"$XWYmprcdfTQND8.D0W<mM`lx Ƥ$ǥ Ь/ϱ0մ-ѱ)ִ)յ+ձ+ճ&֯;e:7 "eZbIoM8zI-`CfGhPyWϠ.Ӭ"e?
Y8B(
[ fj?:rauapV|\vY\2!'Ϯ%ѯ%(+ǥ4iW!EB?FB4JG:IF;EB4LH=WVNTQJQPFSRHOMBKH:TPBy~ߺ(''+('))(!-+#+#/' ($)!% %%)(. &|"f##3#4.8RD+;322';."
'<,*N<4WB:[D<fMCpVKkQEqUGnQF^A<L10R11T//S23K11K21>(*()3"%6&%4$&1!#. -$\`^ҵ͵MRW@COB>FFBKEBHNKQHDJ@=G>:@.+0B=F)%/yxhZ_]EJrdeyytֿyph`g_^+%,EEENOFURGgdZ\XMrneqj\{sc}m|]^Y*++944C94C84B73@61>412--pg\Ӽȵp{zbJ¦Q=#ϼfP7}gQvB,ͺ:0+~~tuwktthushvth{zntõŹȶŵZ_][ym[xjZvh[uh\yiY{lUyjYzkUyiUwh^zl_xkZsf]whZrb_whYtfZvh\xiXwgXvf[xfXufQtdYvgcxmc{m^{mYwg`{j\vfXvc^xgc}m`}m^xhb{l^vfYtdNq_KnXPq]OnYOmYRp^PfXYaW]`SccTfeUc`QecSkfYojZvs\us^tq^pjUrn[tr_pn\rr_ro\us`ro\to\sn]vs`vr_vs`xr`ztc|yfymWjZc[M#&AB9PkX[xfQn\Xp`dsau~iIXFRfWSm\KfSG]MQgVUn^ZraWn^[tbaxhggc~~{b~SJw^vxzvomhizy~^\YdXCsκd[EskrcMh^Hu>+iP]H2UA0n^H_P?nYG^L6\N;wkVl]LUA4aO?gZEneOrjTngSqkYrp[rupq}|f~f|{d~fleNpgO{tZ~{czw_wt_miTzv^rzw_toXwrn\niUheQqp^mmjUqws`}kx}xdlfTd_MjfSkcQogQriUiaTiaUe]PXK?^RD:+F8+TL:skH[R4VP8cdDilA`b4X[+jqBhkFUK2^ZAikKfj@^c8hSST'%(! !$ ?7' 0,,.*+/+-+').'(:65A==@?=\]^bdfLIM8/-C5$K5V<tVgpx #ţ&˩#ϭ"ײ%)Ա'ڹ48^Y,[N0W +&wo]PW У<ySQ1M3 & L)?~S&h+}255Ơ1:EɞCɧ,ɫ0ʩ%ӭ!ͩ"(:XK'FD=MI<GC6NLBJI=JG=NIAB>4JG@^]WRSJIF:SNCzЍ5>)(&'(('( (++"+"*%+!' &%+ %!%#*%+#&dA"$ 0,-D:5H>*&''!#"
&A2-WA9bH=iPEnTJhNCjOAjNAjKA^B:P64S44P12G/1<((3!$-3#%8''5%$5$#3#"1# ryuҵʹPSXDGTD@DFBFFCGKHOQT]bfnfgm-+4GCL*&3a__|uy\HOжֹӲ~zvrc^[KEEJBGNFJ&!'FBK??>nn_pv~wqj]pg]OGD+/2!!;,+9++;*+:,+<.,+'+"#wi~kYjSiU|dhmYEiT@jotaNULGvttȻҿ˺Ƴsxufsqdli]jfZhcXe_Ve]Te\Ri`Vqf]wkaY_]WtfWtd[pfZpeXtfZxh\yj_zk_yl^xj^wj\qg^wj[tg\ufZoa]tg`xkayl^yk^yj^vh[vh[{kZxjYoa\rc^vg^xiVrc\yjMr`Yvfb|j[ud_wh`wh\sdYudZzgUt`MoZOp[LoYHlXFhW5QIISL\`Sln_oo_hh[_^TaaWdcVkj\ef[ggZa_T^]V`aWfg\gh[ln_ssbqoatsbom^srcwvh|wi|vhp~xho^VWRF6:0YaWC\KNeTQkYJ`RMeV[kZy~kaoZUp]\tdXn^Wr`WsbXtbVq`PmZ[ucghd~~{ye|Vpfk|zvqooszzwvy|w~}igdu^i[Gk[GK;+^UEc[IO@/jZD\L9N?1UJ8\N<_I7aQ=~j{zn`aTErwtq_i`Pg]Lb[KgaNmfPlfOvs_lyyb{ze|oplS}w]woYuqWnjTuqZsqYvs]`]G~hwrZroXnjjfaItp[rr]jmiVzucyu_nzxeywbplUjhPc]NG6,yq[uoU{fxmePldQpgSmgTmeTkcTiaSlbTaTITG<M>/~o\D:)<6"F<'JE)bc>]^6_b6ek;]`3|rYNH.HF)]V@TE3w`UUW'&(.,.223/.1-)(=4(*"(%'-+*'$$%!"(""*#!6/.50.B<;:52D@=A==C@AROM_XRMD=G:,P9`EuWdn{àɣЫή+ֺ:'3ʱP32ӱ ӱ&˪%Я(Я(Ӭ1Ϋ4ǡ*6=B<<Ĥ9ë5ȫ/ͭ*έ-Ю*ղ(ֳ,ش-ر.ֵ4ճ<ҶBɩ/ʧ ̧%,|7E>0@;2>9.@=0QOGKIBDA8FB9IC:B=4JJBUTMSQIQME{+'()'$") &"( (!(#,#,"(#+%"*#!%#)#)#*((m!L,*/G;3H=$0,! - #)J62_E;fL?fK?_E:^E7_E9]B6`E;]A9Q62C+*;&)2 #1"5#&5%%5$#4#"8%%7%'#е͵RUY=@LEAFIGKLKOQV]cjs]aga`e,(/E?H<7>xksȴǥָضtni[SSPGHMBEOEGLDIGAFD>AYST6/5)#.BAA``Wsi_\RLmbULHlZVZONB5:\NRG=D"&0 + #)J62_E;fL?fK?_E:^E7_E9]B6`E;]A9Q62C+*;&)2 #1"5#&5%%5$#4#"8%%7%'#е͵RUY=@LEAFIGKLKOQV]cjs]aga`e,(/E?H<7>xksȴǥָضtni[SSPGHMBEOEGLDIGAFD>AYST6/5)#.BAA``Wsi_\RLmbULHlZVZONB5:\NRG=D"&0 E8=C8=G38C69D35 oTC3vcOdzǤş˵ѼǠ̸{p`{yvxuuiondhcYeaS`XL^ULbXIqg[|perzW`]Y|nQud\yk`wk\ug[xh[xjXug\th`xl^wj^vj`xl_vk\vh_ugZpbSq`Sq`Vra\sf^uf_whWvdUvfXxiXvgUteVvf]|k^|kYvfXseToaVscYo`]tebxg`sd^qbZk\MeSNlYNkZE]NC^OIeY<LI<KE6D>7D?5E@<MJ,<>/9>-58*2:.7<3;>#,8$,8(2;%.5)15,26/38.14MQN.36*/50378:@<AH?AF9@O4=;Zh\ShZQdX\qcZqbXpa`|lXn\pzcp|dQfTTo^Uo_Un_Tl[PiYQhXVo^egc}||zhfptYGiS=ssyqqsvst{|yzw~~}`]ZnaIzjRqaLfWAreP|r]kweO@0rbJpXucxr`zq\smUrlZjbPjdNywbkwrXvqYw}qqts~fqlUg_Hh`GrlTphOlaGulT~mfMpeMtmZkfPupVztSvnPl˷~~{jjhSlhOVM7SI2aYGZSF5(I?-y[kgSzwdmeTkcSbXIg`OlcLjdRh`NwmZpeTqdUnbNTC28**"7-"C6/G=-[Q=a\?_^:_T7o`LskLIG$JB.nbI|pTUTU"%#%$"$)%&75764797792(5,-+,1--+'((#!-'$0*(/)&=855/+,% /($7/,@:7C><WVWnqqwz{VUUJB=B3'?+Y?uUo{&,vͩ)ܲٳ״(ٶ-ί,ά,Ϋ/׳*+ӱ-ή,б2ΰ,ʪ%ʪ%Ь'ʪ'/ض,ص2ָ49ؼ?ڼGѸDؿTտZͺb~Āֿ\Ȧ%¡!0j]:FGDB?1@=0=:.GB7=7+:5*NJCB>3MK?KH@JG?KG>EA7zSU*()'!-(*%&)#)*!*#)#("'#'}"!%#$+!+"(m!!Q!%$5K?/D7*82#!"%$ 4$%S>4^C8^C8\B8R;2R:1P80N6-J1*@)':&%6##6$$8&&8%&3##1"!5#$:'&'ϵ͵SVYKNUB>BDAFNOQjnvejsYZ`WU\)%,d`csnmzm`hʶȩܼںidcMEJMEHMEGSJMVNPd]`xrrf`^LFINMREFF715cYZJ=Cv\\PGJlZ[g\_B6:jYZD;@&)2$%:(,;+0>+.;,1C13y|jU̿~<8:PHD{qf}sjtvs~n`tdp]{fSzeT}jY}kZp`xhtcsavfyY_]RufJp_RwfXvg]yj\ziZvhZxhWugWseVscYvfYseVoa`zl^xiWvfTta[|iUvc]xg`xi_xh`wh\ud_xj]xiSucMvaTwc^yhcyj`vh\tgYre`vhYn`_sd^pc^nbbob^l^LWNOZRW_WW^UQXQQXQIRJAKC<IACZQA^Q7QI3@A;GH:FF:FF4AA3=A/9>3=A(48'2<'1=&1>(0?$,:&0?%0@&1B&1H8E^2<M7HZ4JIASDMfWLaSLaSTj\PhYQj[OfWJcUQjZWbPxg^lYNdU]qdTj\MdUPfUVl[ffcz}}~~wy~~~yywzv`sXGmYgklpqsqrw{{{|}}}~~`^[wcukSwkTkcLycͽ{rXreJi_Hh`Hf[EaU?[P>\S@]U?xpYws\}x^zx\~{cwrj{wavnXcXBluj~|ciygzsV|\sjQPH5_U@{ixuoZvmXrhRg_FrmR}iu|xxs~|hqv}~zj~{mƳZQ?iaO`XDlaMnePqgTi]Ni^L[P<qfLs^gXM.!YKBTC=D6+l[?hYCj\M[L=OC.[Y3eg7soKi_<yWVUW"!#$"$$!$%#%'''#!#)')'##(%&)'(1//6/&C;.4//,&%1,+,.+710)# ,&"6/,2,)4-*0(#2*$5,'930BA=`a_sutPMQ:68,%!3$D-nNdhfX>e"1ÚƥѬѫѯ!ά'Я.ѯ+ѯ1׳+ٶ-ٶ3Ӱ/ұ6յ87Ю6:ӳ2ܾ@پGQX}ߒɕºlKĩPϮ.&q,HE?RRO@=4>:.@=0A=1?;,A<0EA;LIB73'?;1HE=DA8NHA} ,)'(*) ) +"+ '"(!(!,#-&,#) '"'"&!%#!*!*$*x()[#$
6PC,H8-@7"'&40&0% #**D0.W?6^C8\B7U;3O6/J4-E0+A-)8&%7%#6$#8&%7$$3##2##2"#8&&5#$yyxε͵UVYRPUaYZWSTOMOkqw:;F
53;&%*pmmsnlyq~.%ٿ®gfeulmullulla[\ha`wtr1,.MKPCEE@:<bWYQDF~ccUHIlRS`TU<.3cSS=6:$(/#!=14<14?.19.3D36
TKFrcebJLLfklLSSGIIfhjtxxV[ZPMOMCB~q|kxexdwewgtcvgntwx{ʺʹʴʷñZb_[{m\|l]}mZzjWug]zl`{l`ylazn_wk^wj]xjTqbWseVqcXte^zkb}mWrb\wh]xj^ti^uf_te]obcviawiazj`{j_xi_qb`pacrcdsfduhatfZpdH]P^tf`odYe[WbZR`ZQ`XWb[[b[Z^YTXTRWRQTOYZSMQLHRKHTLOVNMTMGSJN]QITHJPGHNF?G>9B<:H?3?;*44+560=>:GH4=?+5<+5?*5?5@J@Q^C_[HiVKeWUj^YoaRl\Xo`Xn`J_QNbTQeXQg\UeWdjWsvcVcSSf[Ti\Sj[Tj[ffczz|~~}}zwtnlf~d~lU}gS}gjtosqntwy{{z{{}~~a`_yublyqqmVpiSmeOoeNe\FYM=\QD\SDfaJunU[S@jcTplWytXyrW~fjzwad]KYN<aVBqjRmyw]}dsĭs{on|jzfmulTllzu~m}|jwyu_zt^wo[tlWulVtoZ{yf|wenfSj`IndMi^Ki]HfYE`TGaTGrhV[M5aR>."VMFL<3>/)5$nJ}hFVE6eU9hd=no@X{tLsjDUUW&&*))+" "&##+%&,((0*$=5&,')+'%-'(6112,*:316/,5/-.**,('2,+-&$3,'3)$0)-&EA=LLH8514,,1,,0,,.*+3,&?0J6VCE-f0`j$ ɦͩ ̩ѯ"Ʀ ӱ)ӭײ"ڵ$ش&ڴ-ڹ:ڻ>շDռMϴC^ƖurVzOn>|b#7%Ψ1˥).\K*@?>KH?^^ZED==9,;6)<7+=9,KH@PNI?;3D@8@>6NKCEA8}ΚUX+(''&' -$/#)$*!)#*"/#.%+#) *#!%z!$!% %("()-g"$!
4ND2WG";4)/)E;&I<"/$ $,*'J62Y@7\B7U=3Q70K6/F0,;'%9'%7%#6##7$$:''8%%4%%8&&8((-''ѵ͵VYZLJO\STh_^uon#"+%=<FBAH(&)mkjqnlyrkȷ/cbc|z|w|mpiNLK3.9@ACD:=XLNQDFhOPYKLbLLgZ[8-2gWX;6:$&/ -$#@56>6:?25;68C58
+$#@56>6:?25;68C58
4/,Y^]TUVlqqQUWRTTwyx_bclgg_YYldaǷȴ÷ȱƬ¨u±ƧjaaKDtOLVUZb`Yyl^|m^zn]zlVziZzi`{kczl_wj[wi`xl^tg_ujZpd^ui^ujdyndxjcuh_uh[uhbxjcxj_uh]ue[ueYxfMkZTsaWudbyj`vdcxiavdhzjdyj^vf_vhbuhctfZf[Yf\I]RJ^RGXPN^SS`VT`XZf\\g^clb[c[ae`Y\XVYSKOJQYSGWMLXOOSLJPIKXOLYQLVLJTKOUMLTKJTJISHJRIJRJJULJRK;CE9GMDVSGXLNYSO_VWn`Ul^ZrfWpaZqb^td\tdWn_Tn`Rk]ZiXrwbw~j[m]QgXYsdffcz|x|~~|wrmgfoquzytspu~{|~||~`^\yudzweus_pmWrmU~x]bupUoiQspWjfLrkSjeQrp]qn[roZssYliPlgVlfU{xdfbLd]FicKnjRf`IkdNkieOqmVleMtpVѺī|]{u[x|fuq]u|{fws]gcJroT{z_xv]h~|e|fxs[kq|ujLtP|nKi[@j[Ef]HnlYuqa|wdun[zt_d]HngS|sal_FteIpcJwiPreNrgVvj^naPp[EyjRtQJ6f]MTH8qbD>0`V&QI(si5f_2i^=YO/||Spz\UUW" #+), # $/'#% )$!,&&-)'1*&5,*5,*@:90**50.2-+*$"(!0*%:2.83/81.62..*&2-,9202( 3* 1+'=8<* 8(O7T<}c4u~ŤĞΪ!Ǥ#ѪѪӯձԱص0״3ѱ8hukIcvf9~=3./̦0Ы,Ω(Ơ$pn<^]YPPQEB<LHCCA9C@3=8,@<0<9,?;/KGAIGARNH?<6YXQMKF}ʻ+/&(*&)) '!' )!*%-!-+$,!)&,&*~!u "x!%!&!*!(#s%(,.@82QC(@7!,"H=(I9B4""&*2!."'4&#O94[A7W=2S80S:2M5/H4.F1,F1,C/,F2-C/+<('>**9(''Ѷζ[]^OLOF?DKEG\TVB>DABHJKP>;E0,2mjirml|uqvl;,(_`^hfdƅ||u=975/<::=K?CSGJ[MMeNO^QQ^HHiZ[5*/gWY949#$. ) 'D;<F<?C69C;>D78 (%#lroRUUߤ^edKLM^eb}|vusl<9<{lnWP{UKƧ{SIT86xtk<=v¥оǸɱc99Z>>U[]c\]g@B~TSZb`^pYxh[wiWxh\|m[zh^xg[ugWteSrcYsfbwl`uiVscYuh]qfZqeXrbczjUp_Zuf`xkdxjbwi^uh_zjWudNr`Ls`PwbTubZxgUtaRr`Rr_[vccyjawhbvhdvhcufatf_re\od[occvjdxlVj`J\SWk`g|mfyh_obGSMYe]LVLU_Ubi`^e^Z_YRYTP^UMVPLRMMSNKTMLTLNVNLRLKQILRJIRHJSKMSMOSNNTNKQMIQKLVOSaWP^SSdWZn`Uj]RhYUo`Po]Rn^Wn_Rk\ZraVfT|}htajm_feb||}}xsomx~}z{wyz{{~~}|oa^\]UBWP=c]IicNjbLleIohJqkRlgNmcJneKf\DohPtr[qoXvv_pmWtmTmdGogLqjOldNnkWqypjU|d}zcruϸ̲ȯ}vdrmoy}fgjszu_nfLqhM~ar}uVyu_|[uzhzrYqeN|qWkaJg_Kf\D|sWy_eY=eVDYL=\N>cSC]P:ȬwmPpfHmb0fh+km1ik9so=Enf9iQU(SRS
@@ -241,17 +241,17 @@ kJBYOpJ0x@at~j}t{x}pc\Z(#y\<2eZG~jZpjXX_Tvl}s} 5&D380ٷҼ[[]>>G>>GBEMFHQ./:<>HKKQKKOC>D\Y\ljk}vs|jcxïͶػñlc`mdcjdclb`{#!QPRef]kh[ndyiac`Y|~u{yxyr///444333334111111011011001/////0(&&֬ժ٭թөӫگթիϦϼXMG636fabKJۓ{xrKJe^[DCþ\Yg[|tuxZVYEDwZV][[c`^}mOs`QwdY|hY{iZzh]yhayl\wgWvd^{kb{mcwkf}oXvf]{jXwfc|maviatf`refxmbvjcxj\sd\vff}lhof~oc{mg|laxgazh^zgZ{g\zg_wgavfaufbzjcyjh}lkngzi`udbyga|ihomtjokrc}kh}mhykj}nk~mk|ll}ml{li{kh{lcwhh}ljng}khmhnemjni}lnotuproqmoh{lk}nj}mkng}kcxgawd_tccyhg}k_vdf~lg~mg}ndxlcyjfzjhyjd~kfoffc}vzyzzzzzz}|~}{}~~}|~~yxyzy|}{|||}~~w}}~}~|}{}||{zzx\YUUJ6UM=]VDnfOvoYuq]r~fvr\}pxv_xqVvoTqhPsmWtkSm`Em`EthSk`NvjVl`IoeO}t_fXBshJe[?aV@pcOl]J_Q=eYEL<-I:+cUCdU=j[?hY?}cwnUxrYyrUz]t̵v]rYhkugPovgLygL}e_P>paIxiPbT=mZDaK3W@/&QC5{hS{hR{iW+
q\Izcx^{oVl`I~hqq\QB)TN4zqYtfRbWCYR:yoWriKvtWi\T4dZ>OMO
#!$&#%#!!)$#(#!-((4/,?990,-.)+1,..'#.&"& )#!(!( #"!"'!3,)+& 730,&$'""($"(" ,'$.)&,&$..*0*).)%840FC@=96GB@[XU830C>;C?<XUPQNJEC@@;9?:8841C@<WVT?>9=7294-RPHCA:PLFEA:GC<WSLPLINNGNNHC>893+82+:6/72*0*"0+#/+!72)94,50(4/%<9/{ʽȿȿȤxw$'+*( +!. +")&!' %&%$*"'"(#%1%Ay5a/`-qU/a@$OTq "| !%X >[J?[E,D9"2,'0/#"""""#! 9<<?FDP0ZL%]P$QE"5&!Z'-f$%( $! - +
"$!!)&'*%'5019569561/097883470.61-+#3,)1*'?99>642,(0+%+% 61.0)'2*)=78C==0)$,%(!' '".)&+%"2-&0*$81/,(%)# -($62.,'&60/1,(51/EA>B?;TRP\\YTROIEAC?=XXVWURLJGXXUOKGUTMOMGQOI>93IC>VSNOLESQKLKESSMPNHYYRca\SQLB?7<70;6.?<4?;41+$.( +&72+{˻ȼĽž%+(). *,+)''%~$ &#")(#)"( &!F.y5p8n;z\)mS)gG,NMg !~"$vV ;YG2L99OC&81(& !"#""#!!8<=AG@'60]Q'^P!O<Hd$2L#4&!
,2@ -
+
!"!! !,()-)*-**)%$5001++-'$0)&1,,3-,$3.+2,(2)#,#0'2(5*"-&)#'")"-$2-(1.++'$0-*1-*2,*3-)4/,740GC@KIF><9GC?LJDEA=LJEKHF:83GD>EB<FD>ee^ggaB>9:5,:5-JHAnqjGE>A>4C?5C?7IF@<71EA:<8061*,')#.)-(-'51(zߺɼǼŻŽǿǿʿҾYZ&**!/ ( -)&$$%*#"&!)('"$+'|#F.`*g.r=h6kR'\A#K DR%p%s!@*(3ZH3L<,C7'93&0,!%$ !!#" "4;<=D<!# 2.`T,[J"G/q<Un4N@.$
"E6* - +
**.114758957B>?@;;A9:?<;,'')$#-(&4-*5-(.&'3&0&!+$1'.#-%1)#(!% +'#.+'.)%.+'5/+4.)84-;61<6/?;5@:4>:4YXUYXT4/)83,72+;4.A>893,2,%?;4UTLbb[QMGC@5>8.95,83,50&3-$3-&.* )%(%($'$("E@:{߸ɺǹƺżǾƿƿǕ})'(*+)&#& '# &~" '# ''*}"u!~!a8q3Y'a2vZ5W<M-#.?-d'7Y%)'>8/_M4QC&<2"6/"+(!%$#!#"$$->:<B4!"""##$%LF%\J$W2"xV3`RE;&8+!/$ %E'6
/!?0D6H< K="D9#WWX01>-+'&4 +)'489F66C)'4$ @@ -265,7 +265,7 @@ kJBYOpJ0x@at~j}t{x}pc\Z(#y\<2eZG~jZpjXX_Tvl}s} V',5 /,,++3/:%3WA;'@,C-9#8":(D/>*?+:&>+>*=)>);)?*8$=(>(>)8#9%8#9&6":'acanmqgpkkd>CGCHREISGMUKQVNTYNSYLPXJOWHOVHPWHPXIPZISZISYJSZJR[HS[IT\LS\IT]KU_KU]LW]LW]MW_NX_MY_MX_NX`NZ`NZ`NZ`OZaO[aOZaO[cP[dQ]cQ^cS^dR^dT_eVagVagVagVagXbjXahXbhZbiYdhZdi[fj\fk^hkzhooZfkYdjpzynuubloakn]il\ginwx{~Xdg]fk`jm[ejZej^hiŧ^ZZp^TcQGdSLhUN^OEe[Irݹfdi:5BX;9; wTsZiN{Y o:D|{]_6?<D>KW^mfofYk˞ЧwbcSJWF>YI?iWLjWMeSJ^OElaO~e}cf[GnaTk^Qk]ReZJk\PXO>PK;RN=b[L_ZLRSAQQ>ST@PR=MP;ML;RO@XPDYRD`RHeWMgZOhWLgRLQ@;w߶߲ݯݱܱܱ۲ڱٯ۰ٮۮ߭ԩӫҩ۪ܭث߭Ǡ}`_^vvkttjttitthtshusgusiurfvtfusgtsguvltvltujtthx{nz{}}~orzzz~nvrcmiXjfUt}}{|{xkyxkywj{xlv|rx{zyrnbuqevrevrewsgwrhuqfuqguqfsqfsoermdqmcqlbmh]kd[ng[qj]voc~wj~xk~wj{tdyo`yn^wn^wn^ul^tk[rhXpcStjXSK0ulUr`T^M?~pmhY~wk^PF3,~&0L/JT+pqO}xjwueijevtuupwwwz{upayg}kvew}|gxhuo}yzur~{tug_QcT^R{XKrpxt~iVWIWHyJ?_Qtragj\hj\hl^leUgY}aU|_Ry`RwVRD`YMC?3a]Suvdkts`tsar{ts^pyxcss~vd|`RaQ{]Lx^NebQbgUdhU[]Lysbr^^JaP{XH~n\ps_iUR0.413/6!26#5"04"5"4 8$49&@.F6?.8$;(55!5"<'6!3116"5 646!27%7%B0>,fSzeQI6/3<*;(>*:'8$~2 z6&m0e0W)D&-r/,15 -.C-36 0/?)H444D.44?(A->-9&:&:&A+>(<+<';&:&;'6"8#6"07#-8&bdalhmopn~^^\>CHHMSIOVMRXMSYNV[OU[KPYJPYKRZKRZJTZKU[JTZLT[KS[IS[KT\KU\KU\KU]KU]LV]LX]MY_MY_OX`OX`OX`PZaPZaP\bQ\cQ\cR]cR]cR]cS^dS^eT_eU`fU`fVagVagWagVagWagXahZbiZeiYdhXdhZdgnvuw}z^hkZej\fkbnofppajm_im_jmistx~{Zei[ej]gk\gkaknWbd駥[WVcSHdTKbQI^RBڧ|lvdw42?F2:F%$ [EkJ -W
qVC[_UYpG#$||iڷ^J@pbViZMj[S٨ҨѩҦഌmOM8RO;TT:ZX@UXCQR=NL:RS@XTC_]J_UFf[L\QCbZJTQ?bWIfXMXL@ZMCSG<ZSC`PEF83uެެܫثةߵݲݱۯٮٮիԫԬӬѪЪٮԦ̢ˡ٬ڨӦȞ¼|`_^xuivtgureurfuskvuivuivuixvkxvjvukvvivuguthywk}~|{z}|pql\so]b_Q@?554-KF:lfVpjZwrc}~n|s|||{u{}u~vyuiywjywjywkyvkywjyuixuhwthwukwrfurftrftqhusjrqgrpgsnfpmeqk_lf^ld[pjX{y]kSVX-_]?mcTvhUWC4obVjaRxpc~xj|nq}p3((F7gY@kt|ba><<fVVu/)x.'z5.pC9t|oTTQce[TVLJJFlofFICHKEs}F=JAKC}G@weqmvA9F?F>F@uVYQVYRszljl_psdprc{zjxzeZF>H>HAF<}uxrurcs[QWJ]OVIaR?A9EE>hjbM60=2~3(~.%q5*]`PaZNUNDd`RzzhvjjVvpq\tutazuwg&v+ w-!m. {nYegSotiiZlSs\q[|hriSP,/1.0232123438"<+8';)8&<)6$;(5#5!4%4%6!3 24!5"6$247"6"5"4 4!2!>.`PgQ?O=3 28);)9'?,;)7%9(y4"r4$d.W.87_'-53+.n*;!_(27!8#ZG;&8"9"6%6#:'7&;'6">*:&=)5"A,<%9$?,;(8!7#9$;(08$cfaongknkrpj|{QSQEHPJNWKPYNSYNT\NS\LR[KS[JR[JR\JS[LU\OY`PX`OW_OX_NW^MW^MY`MX`OZaOYaOXaOZ`PZaP]cQ]bP[aP]bQ\cQ]cS]cS]cS]cU`eUaeWbhWbhWbhWbhYbiYciZcjZcj[el[ejYei]gjv}zahi\gj[giakn\fkcmq^im\fk[fkYfkZfjdlpdllZejXcg\dh~ryuy~{Ʈϱʭǫ^[Zo[RmYO{w×jffYgQiSr\ܲYbOVHEF53&cM5_AmN\=dIm_FcWRWQ>ѬҪֺ7');)& 6MKW#.!!XJ@7\-5QVcDBvnkN&&Jw).^BK8Jc/9ZvR(!vTQ[ZHKGLYXDRK7hhbŲ]]KZT>VP>eYNaWIdZK[PB^TEWU?JJ/OM9TQ=LL6LJ6HI1VQ@YOCQK<QK<JH4IL4VRAFC7t߮ܯ߲߲ݲ۲۱ڰذ֭֮լԬҪө֬ѥΦȢҪѥШǟş¼Ġ|`_^xxjvthvtgvsgurfutkwukwuiwuiwuixviwuiwviwvjyxlx~~~}z|~lro_rn^KJA4859A?;CA6=9DC:mfWuo`zwgp~zu~}w{wfphWzvd|x{yk{wl{wl{wl{xmzwlywlywkyukzwkwuiyuiwuivtiwsiwtkvslvsjtphsoiqm[wyEPid^80+c\Hyk]L7)h\Oe^Ori_ztfzlqvhZZL4~X/htJnbsuuS>?gXWo/%s/&u3,rN?eodUXXhne^d\X[VntlJQLSVQ{o{E<MEI@~KBrdnt_}{i|~heWGvA9LCG=H?sY`S[_UsykciZsprcqscx|h[JCKBLCK@nX|ssp`s\PYJO@SG]M [[S7 >4~5*3)o0%tjgW[VIidVyxhp|{u}jyzee'u*w.!p/"u_O{jkl]v{roYMhRt]oZtawyfhSP.1/.120025"126#4>)7%;(B0?+6#7';'5 32 7%;(9'5 222228"0324$:)n^kXHJ9:)29'9'@+;(;)9&9'~7$v6%h2b1G#>#=10/1D-H-*#/ s.,-?)F2<'9!5 ;(;';'9'7$12#;'9'9$6"7$4 7#7#4 7";'17"dgd{xqnmllsrjo||sORUDGQHLYKPYNT\OV]NT]NU_LT\LT\LT\LU]OX`PW`QW`QX`QYaOW`PXaOY`OXaOY`PZbOZaO[`O[`O[`Q\cQ[dQ\dR]cS]eS]fS^cT_dVagWbhXbhWbhWbhWbhWcgYcjYcj[di[di_imu}zx{y{u}ws{xlsrjrrcmm\gk\gk]hl\fk\fk\fk\fkktsovu`hlYcgenp\fi^hjv}zêǬͱũ^YXo[PlYMxldrqlfSdO`L^M`Q`QdVcUvio_?9.9(+dRK\F"^AV9iP&iWNJB1}vuD!.",'XIE.@"`).NH +W
qVC[_UYpG#$||iڷ^J@pbViZMj[S٨ҨѩҦഌmOM8RO;TT:ZX@UXCQR=NL:RS@XTC_]J_UFf[L\QCbZJTQ?bWIfXMXL@ZMCSG<ZSC`PEF83uެެܫثةߵݲݱۯٮٮիԫԬӬѪЪٮԦ̢ˡ٬ڨӦȞ¼|`_^xuivtgureurfuskvuivuivuixvkxvjvukvvivuguthywk}~|{z}|pql\so]b_Q@?554-KF:lfVpjZwrc}~n|s|||{u{}u~vyuiywjywjywkyvkywjyuixuhwthwukwrfurftrftqhusjrqgrpgsnfpmeqk_lf^ld[pjX{y]kSVX-_]?mcTvhUWC4obVjaRxpc~xj|nq}p3((F7gY@kt|ba><<fVVu/)x.'z5.pC9t|oTTQce[TVLJJFlofFICHKEs}F=JAKC}G@weqmvA9F?F>F@uVYQVYRszljl_psdprc{zjxzeZF>H>HAF<}uxrurcs[QWJ]OVIaR?A9EE>hjbM60=2~3(~.%q5*]`PaZNUNDd`RzzhvjjVvpq\tutazuwg&v+ w-!m. {nYegSotiiZlSs\q[|hriSP,/1.0232123438"<+8';)8&<)6$;(5#5!4%4%6!3 24!5"6$247"6"5"4 4!2!>.`PgQ?O=3 28);)9'?,;)7%9(y4"r4$d.W.87_'-53+.n*;!_(27!8#ZG;&8"9"6%6#:'7&;'6">*:&=)5"A,<%9$?,;(8!7#9$;(08$cfaongknkrpj|{QSQEHPJNWKPYNSYNT\NS\LR[KS[JR[JR\JS[LU\OY`PX`OW_OX_NW^MW^MY`MX`OZaOYaOXaOZ`PZaP]cQ]bP[aP]bQ\cQ]cS]cS]cS]cU`eUaeWbhWbhWbhWbhYbiYciZcjZcj[el[ejYei]gjv}zahi\gj[giakn\fkcmq^im\fk[fkYfkZfjdlpdllZejXcg\dh~ryuy~{Ʈϱʭǫ^[Zo[RmYO{w×jffYgQiSr\ܲYbOVHEF53&cM5_AmN\=dIm_FcWRWQ>ѬҪֺ7');)& 6MKW#.!!XJ@7\-5QVcDBvnkN&&Jw).^BK8Jc/9ZvR(!vTQ[ZHKGLYXDRK7hhbŲ]]KZT>VP>eYNaWIdZK[PB^TEWU?JJ/OM9TQ=LL6LJ6HI1VQ@YOCQK<QK<JH4IL4VRAFC7t߮ܯ߲߲ݲ۲۱ڰذ֭֮լԬҪө֬ѥΦȢҪѥШǟş¼Ġ|`_^xxjvthvtgvsgurfutkwukwuiwuiwuixviwuiwviwvjyxlx~~~}z|~lro_rn^KJA4859A?;CA6=9DC:mfWuo`zwgp~zu~}w{wfphWzvd|x{yk{wl{wl{wl{xmzwlywlywkyukzwkwuiyuiwuivtiwsiwtkvslvsjtphsoiqm[wyEPid^80+c\Hyk]L7)h\Oe^Ori_ztfzlqvhZZL4~X/htJnbsuuS>?gXWo/%s/&u3,rN?eodUXXhne^d\X[VntlJQLSVQ{o{E<MEI@~KBrdnt_}{i|~heWGvA9LCG=H?sY`S[_UsykciZsprcqscx|h[JCKBLCK@nX|ssp`s\PYJO@SG]M [[S7 >4~5*3)o0%tjgW[VIidVyxhp|{u}jyzee'u*w.!p/"u_O{jkl]v{roYMhRt]oZtawyfhSP.1/.120025"126#4>)7%;(B0?+6#7';'5 32 7%;(9'5 222228"0324$:)n^kXHJ9:)29'9'@+;(;)9&9'~7$v6%h2b1G#>#=10/1D-H-*#/ s.,-?)F2<'9!5 ;(;';'9'7$12#;'9'9$6"7$4 7#7#4 7";'17"dgd{xqnmllsrjo||sORUDGQHLYKPYNT\OV]NT]NU_LT\LT\LT\LU]OX`PW`QW`QX`QYaOW`PXaOY`OXaOY`PZbOZaO[`O[`O[`Q\cQ[dQ\dR]cS]eS]fS^cT_dVagWbhXbhWbhWbhWbhWcgYcjYcj[di[di_imu}zx{y{u}ws{xlsrjrrcmm\gk\gk]hl\fk\fk\fk\fkktsovu`hlYcgenp\fi^hjv}zêǬͱũ^YXo[PlYMxldrqlfSdO`L^M`Q`QdVcUvio_?9.9(+dRK\F"^AV9iP&iWNJB1}vuD!.",'XIE.@"`).NH tc^_ZT0U9Br;8KTR^=9G_`_gp*7z{wOV6QXHns}nsgku+ATf_moNJ8LC5PH;NL8OQ6UZ?MQ8HQ5NV<PS>KO6JQ6EH2KT8>B,KG9IF3NI7BD-EF.NR;:9*t߭٩ް麣oߴߴݱݲܳܳ۲ڱڰ֭֭լԪҩͨ˧ͦɣȡß½½Ɵz__^xwjwuhwuhwvkvuhwuhwuhxvixvixuixujxujxvkxwjywkidWwtfw|{|tuqanl^9<67@=<FD?JF@LI>KF:B>GH>qi[~yj~wt{ipjXpgWf\LrhXztd}~{}yl}ym|xlzxl{xl{xmzwm{vlzymzvmyvmywm{wl{yh|zazxZyxawshyv^{|>w~9Ta`9f`KqgXWH:P@3TE9f]QleZtnc}wjpsu{ij[7E?=C@G@F K!}20-O;8$48$5%;'9%;*;+5#2 6#A.7"5 34 5!8$9%4 6#39%bfbqhpmpsoopvqcisxwqILRGKWIM]LR]PUaPVcPV`RX`NV]NV_MV_NYaOW^OW_PX`QY`RW`PZ`PX`PZ`Q\bP\bP]cO[aQ\bQ]cR]dR]dS]dS^dS^cT_eUbfWchWchVagUaeVagWbhWbhWbgYbhZch[di[ei^hm`lnhrt^ikktrltr]gk[gj\gk]hkakn^hljssrzwv~zVacWafXbgWbh_hḵǫ˯}^YXmYLlXLgUKwpkjch_RWl^N`eHWxE[JYF^Q[WECLMcfaaF94iUQhSEfJgM"_KEN@6Եֶuʼtpq]GE4/"#+&+E20B-,4[9<H2830Q@843DJ@=@N@OO:JS*42 J!Zp#'abywbns^rutpsz]`naamjhn?;B%CWhozwPK:RQ<TT>QS:MW:EO3KQ:QV>`YJWPAFE2EF3@I-KR7KP;MN7NG6HD2IE7FC342't٭L9$٭ثܰݰݰݰݯۯحի֭֭֫իѨͦϨЧͧΧ̧ǢŢŠģäz__^ywlwtjwuivtiwuiwuixviyvjyvkyujyvkyxlyxlyxlywkyvjyv{{iuzyugsqe:>9:B??KGDPMAIE152FNKBOM<FBKKBxsdyud|zucqj[RPB88175-ZSGriYyqbr|zn|xl{xl{xk{xl{xm{xm{xm}ykzyUnr.nqcj
di!y|Nz~.0UQ'B<& e_MSH;]REh_SdXHgbVoh^ztg{mvs\zx```<093@8AHObh'~ZqrS~fXWk/#p*r/'vSHbhZQQJei_RUL\^XqulUYRY]TujzG={HAI@PFuauu{}gygvB9~C<F>H?y{lx{iv}ntqxhlsc{sk^JCE=D:SCyoolYs`OWFQDH?PBC>8TUK4A67,~4,o-"uxwcxvdxvdqyyydxxrnl~jv|b)w)!u.$j%zfu|g|p\bWv~w^IBYFSDPAkYhTR0/11240036"21327%<,9(4!7#47$6!5!5!:&6!5!4!23335!21;(3#22>+n]S>P>149$9&=(<'C08#;(<)>,q.p3 W&S'H$6o07"6!*G4*lA2A1d%/,0K95#;'49%5%4#3":(7#:&x/7"5 37#6#6"237$27&aebllrsroqsqpvtmwuazxffh?EGKSA\cHHMFOSbPTdQWdPX`QX`NU]LT]MV_NW^OX_OX`PY`RZ`SZaR\bQ]cQ\aQ[aR\aS]dR]dR]dS]dS^dS^dS^dUafT_eS_cU`fT_dT_dVagWbhYbiYbiYbiZcj[ej[ei]gl^hn^ik}}ipnaik]gk]gk_il`jk^il[eiksrltpdllXbfW`fW`f]gjx|ϱӳǪʮ|`[Zp]QkXLeSG]SG|wR_=ZY>o\NbTHS]>Kp5;k#\XA~>GDOUqx}`\L[JDdPDhVL]MEŮm{zytutpqUIH{KIC{pn*#" @@ -363,7 +363,7 @@ el6[b+RV#:9**:;42FD%CB ;;30,, }]?8HC$cebegWtwhuxjhM?Y!W$U&X%^% IV&Sg,Md%3:71!!&/&% ( % \RJ|sm?2/-'')#"#5*&=51A98=644,))0(%3,-HBAJA@?40;,(3& 7.,!D:3TI@<:D66N0,6[SO*!-&!KA=WOKZXV]VTTOJF=:$5-(`]Y'!RJG2)(+##2*(kd[LB<7,'6.)SF;6,$5.-LB>">97QJCRMDQQOF@;TLIb`^RLI.%$LGCKHDwkctdX[RL0)),"!?61`b_iq_owadnVwhqypxv{^nsYipTXcK[dMJXCL\I7H7?I<GE8wycDQ@BJ?)8(a[Ob]OXQBNG8KD5>7(0+6/!81"70!1+1,^[J`ZKc\MC<.iaVSL;`ZK:2"61$VQDKC6TL=80#?7.$#*%USEZ_SWlXSnXFbMUoY]r^OePUhS_oX`nXeu]`rY^oX`rZ`q\ZnXYjS[lWZjVYjX\n[ZlX\lX\kWds^]n[\m\YkXFZHLaOAXGC\LBYI=SDGXIVeU[iYVeVOaQDXHKaPedb}p~{j~zkyj|l~{j~yjzkyk|lrv{{{yy}pMQIENJMXO3;3+.&+0(+/(+0),1*,2*.3*-2*-2*.1*.0*FLDWbXVdXUbX\g\27.7;58<5:?7<B:@G?CJBFMFKQJLTLQYRN^Weqcoo}n}n}m}n|n{pbmbUeUHh[=0;.7&Y47>51%!bE"kR!hi557IJNL@CUX-EGRR.EFCC\]6f\b#IN!YZYa^PfeWqsfhQB_!a%[%^#a$f&g&d$[4&tpn~mssbxwfqo_jiXon`ZXJyyfukSCa#['M$rM@S$M!]&_%a#\-ilZwuaoo^yyizygon]wud~lXUFe^UM* \#\$X$N#w\i__h_munhphQTJ\\TX[WTWTWQLJ T T P"Q/$x~ns~|mrpavug[ULE*"Z&Y&\+#nPD~kk_F2*M,"P0%yokTR--000010111113!/113313210133111112121111/16#A12/314#14 1 2114!5#11111103!/0113"?-7#8%?+C0:*23 }1m+^)S'K&55 t1/011.....@*dfcv|f|yb~lLD8KB;HA7F=5E;3B801$6(- /"8(@. D0!F3$H3%H5&H5&H5'H6&G7&H4(K7+J6&K7'K8(I4$I4%K4&M5&M7(Z@.eesTa}^|]e]D1O8,O:*N8*O8-N8+M8*N9*N:+L6)N:,J8+M=.ZG6kddR@/O>4H7-%&(4A 4C!3D2@fx_~fT=+5])'p/2o*/l--|]Q%!"%&-""144;{p}zk|yk|zk|yl}ohdb{qni]yqiC80*
-1069:=*(41 ,# #$#0()81/N>8qZStib OFAkaYbWO^TKWJBYI@f\Rnc]UKG* -((=76OHDH>;LFC7/.+""F=7H<1UC@4)1><IXRM<3/2)'<0,F;7:65UTSKFE5*'3&"HB>IDBYWOYQI+'%LD@'/'$ojaH?4E6-, OC9?2(0(*C95MFB/)(d]TYQFFC=@94G=7lhd\WU!0%%,# B<:pd[n[Oi`\(#") >40`b_`gP{}atgjrVhpWs{bx~dwoppq{e\hR]hTJ[IR]L\dP^jO5N8=XG*4'%*'!871KD9YOBbXJh]Ng]Ml_OkbQk^KcVAg]MZSDWN>TK=NE6G?0HB5OG7I@1RL?QMAYWISRDSRDRNCWTJB@6OKDVQGPL?aiWcwaXlWVjTOdNJ`KYlVYkVXjS_s[]pXeu^iw_kxcgt_gu_cq\cq]^n\RcQPcPYiUZkXXjXK^MMbPMbONcOVjVPdRMbPMaQNbODXHNbPO`QO`QEWHEWIOcSSgWfca|o~zl~{m~zk~{k~{k~zjzj|l|mqxyyyy{zrPSKFOKNYPMVNWaXXaZY`Z^g]]g]^g]^i^`kbakb`ha`jaZdZT^TVdXVeYYeZS[SS\TT]WV_XV_XV_WV_VV^WS\URZQNWPR`Ybm_{{zx~vf~n~m}m~no}tetlPBE:;/5)5%t6:<433% >01!P5UDhTP_b$`d,BD^^4IJ>ArrL|jl2V[)__]SOBYWKmodaK>RT#T"U!U V Z"X!V8+sqswsb|zhm{yg}lyrsqnVDf'^'W(S%['V%T"e(g&\,mn]ususvwfqyttcsqdH3*I"L$E!Q9+{zzqJ;3B-&Q>3`NDwn_wnqwdbSvb^TXOH@3*B92a[PgfWtvdiiYabQfgXik[sxf{l{~loo]{zg|{hrxhWU0022022212211216"A.C1;*<.<-3"336"7$7#4!4"2222 321321003!=-2.32151204 04 5!/301313 3 1100E58&6&:':)8&?.A/@/=+?-w:)h7)\0!P1"9 M$211/..-..;'dfcyud{xcpjdUG@7KB9HA7H?7E<4A5-3(4&6(4&;*C2!F3$F3%G4&J6(I6(H6(H6(G3#H4%K5*K6(M8)J6(I5&L7(K7(F3"H0#X>,eaz\uV~_{\{^oXAL4)O:*O:*M7)P8-N8+Q;-N8+N:,N:,K8+L:-O=-gafeR?P?6O>1L:/;+"( )*/6=9&tay_ya{gQC-!7])(r.5m)-UL6* $$$$%(fgewr~p~zm|xj|yl~}p`]][QHeVK@1)
+1069:=*(41 ,# #$#0()81/N>8qZStib OFAkaYbWO^TKWJBYI@f\Rnc]UKG* -((=76OHDH>;LFC7/.+""F=7H<1UC@4)1><IXRM<3/2)'<0,F;7:65UTSKFE5*'3&"HB>IDBYWOYQI+'%LD@'/'$ojaH?4E6-, OC9?2(0(*C95MFB/)(d]TYQFFC=@94G=7lhd\WU!0%%,# B<:pd[n[Oi`\(#") >40`b_`gP{}atgjrVhpWs{bx~dwoppq{e\hR]hTJ[IR]L\dP^jO5N8=XG*4'%*'!871KD9YOBbXJh]Ng]Ml_OkbQk^KcVAg]MZSDWN>TK=NE6G?0HB5OG7I@1RL?QMAYWISRDSRDRNCWTJB@6OKDVQGPL?aiWcwaXlWVjTOdNJ`KYlVYkVXjS_s[]pXeu^iw_kxcgt_gu_cq\cq]^n\RcQPcPYiUZkXXjXK^MMbPMbONcOVjVPdRMbPMaQNbODXHNbPO`QO`QEWHEWIOcSSgWfca|o~zl~{m~zk~{k~{k~zjzj|l|mqxyyyy{zrPSKFOKNYPMVNWaXXaZY`Z^g]]g]^g]^i^`kbakb`ha`jaZdZT^TVdXVeYYeZS[SS\TT]WV_XV_XV_WV_VV^WS\URZQNWPR`Ybm_{{zx~vf~n~m}m~no}tetlPBE:;/5)5%t6:<433% >01!P5UDhTP_b$`d,BD^^4IJ>ArrL|jl2V[)__]SOBYWKmodaK>RT#T"U!U V Z"X!V8+sqswsb|zhm{yg}lyrsqnVDf'^'W(S%['V%T"e(g&\,mn]ususvwfqyttcsqdH3*I"L$E!Q9+{zzqJ;3B-&Q>3`NDwn_wnqwdbSvb^TXOH@3*B92a[PgfWtvdiiYabQfgXik[sxf{l{~loo]{zg|{hrxhWU0022022212211216"A.C1;*<.<-3"336"7$7#4!4"2222 321321003!=-2.32151204 04 5!/301313 3 1100E58&6&:':)8&?.A/@/=+?-w:)h7)\0!P1"9 M$211/..-..;'dfcyud{xcpjdUG@7KB9HA7H?7E<4A5-3(4&6(4&;*C2!F3$F3%G4&J6(I6(H6(H6(G3#H4%K5*K6(M8)J6(I5&L7(K7(F3"H0#X>,eaz\uV~_{\{^oXAL4)O:*O:*M7)P8-N8+Q;-N8+N:,N:,K8+L:-O=-gafeR?P?6O>1L:/;+"( )*/6=9&tay_ya{gQC-!7])(r.5m)-UL6* $$$$%(fgewr~p~zm|xj|yl~}p`]][QHeVK@1)
"%#72!0+1''+80.'eVM|tcZRJ<39*"NC;/H,)=4*#6+#YMDmg_D<8-#"=63JFCIA==53.%!TKFf\XnZXODH/.7JCBQIC*!!:0.H>;MIGYUNda\ECBRNL^]]975FA>WQN"4--OD=NB8ZMEZOHPF;@3+,%#_UQ<5,YOJSF>fUII:/TH@SI@LF?ZVT,""5+)' !^UOpaUea_%.!F70iie|cqx`nv`enY]jVN_KEXDSaGclSfnWQ\FYcO`lVH[GFYFAQ?O^JZjSLaLAZF:R@IRB$-!0B:,:4(/**-*//*/-':4,IB7VL>UH4aWGbZM`VJcYL`SCbZIb]Ob\M^WIa[N^ZO_]QTSHNKD995,..%%' #! 4:2L]JBVDN`Lfu]fw_as\bt]cu_UiRPhR\o[br]gu_bqZXjTXjWDZGNcQUhV\kYamZ]mZRcQTeUMaPOcRMbORhTVkWMeTD]JRgT]p\XkYVfVHYIFYJI]OL`QNaSJ_Qfca}o~zl~xm{j{j|k~{kzk|l}mpzx{{}zzsPTKGSLS]UFPHJTKMWNNWOOWPOWPMVNPYQOWPNWOLXNKVMEOGXdZXh\UfZ\j^Q]SVaXVbXUaWTaVR_UP\RO^TO]QLYPKXNWc[`l_||zxi}m~m~prqyivn^=05(/-1E<49=& 5$1&%x<Z^Z\ NMgi.kk1YU&LL$BCpXQ*;> FI^^]_\PdcW{~qxrdwk{n{nyk}prvt|tnsoq}kkw}kyyzqkSCd$^%_$a([&\$X#b*g&`/ tmiS|jtv}~lvuep~~ntsbhgZZTJb\NjeWQOAZZKbbS\YKEB5^^N_aQ[\Na_Sb_Q_ZM]YNCA5_\RedVghXrsa|}l||jvueroarqcgeVcaShdWa\Ozyjpm_rnapj\heXs}mn{|jomkZlluvqhe[G}/v-w.{-/3!18$5!3"2 {*~0B2L=dReRREPA^P?/4":'9&:(7$8$1 6"@,;+5"6$7(@/<(3!3!/4#m(z8(//10211111"04"6!1101101 6"0104 18$8&8$5322 /20~0h+j-\)H)1b,/0/0/0/-<'cdbsitmZYREJA9JA:H?8I@8F=5A6.0&2&3$5&@0!B0 E2!D.E2#G0#F0!F3$E3%G2"D. F1#H4&H7)J6)K5)E-D-K6)M7*hO9}\oQ}^c{]{\}^nSJ4$M6*O:*O9*M9-N9-M8+N9,N;-L;,M<-K9,I8(r]z]{_|fRN<1N>2N?1L<1J8/D3*H6.N:2nZNzaya}cUA2D2(6M g+.uKDp`O!!'2-1+,-rq|n|yl|yl|yl{nb^]RC89& %,#!&,
'B=)'
1$ #7$ ,$$"E:3gTKwib=4/H>9L<7AF)!4*'A7/g_XjbZQGD+!831LC?/#7.*WOKECG<9B42?LKPNKDTLH) -#!I@9vso5/-HB<=71;63CA>.)%2//'#!^YV#) XOING>\UNseXfVE?4,-$&G?6K>1g\Pwi[ucWtbUlYMXMFPKJ4)&<2+*$$`[ZxrkQPM&F5/`OBggbdiOpu^tx`nu^`jUR`MM]KcpZs~g\jVWeTZjXR`OBP@J[IXgRsHWCI]J<U@<VACWF3K96L;4M;/H85N>4K@6MB/E>0@<.>7+8/+3*.3,/4/+-*-.*./)65-56.+,%++%$& "$!"!#"",)-@90C<*:4*94&51;VGGaM[m[_r\]nWbpYet]SePTiRXoVUjTQgQQfRJ`KE]JG]JAXFQhUJaN;TAM`OZiVO_LM_OG\KBWGRbSRcQNcP>UCG_MKdPNeRH]KMcQLaOUhXPdTNaQH\JN`QPcUeca{nym~zm{o|l~zj{k|l|l|lowy{zyz~sLQIIULQ^TO\RUcXVeXVe[Wc[Xc\[h\Yd[Yf\Xd[Wd[Wd[TaWYg\Wi^Ue[\k_UeYZh\^k_Zj][j^XgZVeYUfZ\k`Xg\Wc[VdZ_l`~yxw|zhzm}l~orr}mvfgY1!,,+/]84<J(/*/ 1^OHSSW*RW(UW(1- PQ'OQokGqlDEG BD?@cdbvyjln`abRlqaovfagWlscfm]V\OV\N`dU]cRgl]\YKifWnk[wvexudtp`zxfyxduu}|gxwc{zenWHa!\$Z%^&_$a$d&[!f)^-wkv`\Lpn]{zhwxgtterrcnj\mhXwudrq_onluursrbusfqwwhvxistcliZ~yimlhXmk[tpyzgv{|jrrxxftrbroaf_Prp_{xgvsdon_dcRvscpn\qo`sqa}|kkiZmzyhovxfh_\uC1H7K=M=H7M>M?K<N>J<L>RCI:TEI<WF]JL=WFE3D1G8G9G8F4G8QBI8C6H9B/D2E5C1D4A.B1A3>.B0I;U&7&/131334!1 1!13 3"3"1131113 0104 |1230021/2202i-n0h+T)=#:z1//1/../<'ehf{xeysa|lKD9LC<HA9H?:H?7E;4?4,3)1%. )2$A/!?-D1!F3$F3%H5'I6(H6(G6'I8*K8+M9+M9+O:,M8+N9,L8*L7*K5%w^G}]gqS{^buV_|^P7%J6*N8*M:*M7*N8+M8+L7+M8+O<.M8+N=/J8*xfRk~a|dO</Q>5N>3M<2L;1K:0K:0O>3UC7|cx`zazhSL91I6,@0#C-%O;/va:,&%$MIHmmh|q~o|xk~{nzxi{xkzvj}znWTS
&3'%8-,8.)%/%$*"# +/ LA5B8;''
4".0&#%C:4SH<N7.yd_`VQND?C,(0
9*&$7,) 8/*VOHc[SH?;-&&;54NGAC;7ID@>=G>@U>>K\WZC75ZQM0'%4('?5,?6.(##80.aWNE71"&$,% NKE^ZX$+"WOI40,aYQ|ljYG8/'0');2+j}hZwfWyiZxgVu`Plc\732!I81n\N0'%887~,&$.eRG`L>gidq`gRX`Mfm[ovbqzcv~fv~d^kWTgVEXIO`M`lXoxdis^enYV^KGVDM^KGXDSbP:L83I74J96M<9O>5N;3L:4P;4P>0J72N:4RA4O@6RD5QD6SF6TF6RE5OB6RD7PD9RF6PD6OD6MB4NB2R@0T>4WB3ZD1WA7YF;ZEPfRcr]SeORdOPcOMbOVlYQiSJfOJgQ>\H6TB5VC9WDOgSTgTTgTQeRThU[n]ZkZXhVTeTObQI]LUgVXhXRbTMaPVkW[l[PcSPgTMdOOfTLcOQfTQfUUjZNfWPfXfc`{n~yl}xkymxj{k}n|n}m{kowwyz}{~~o?ICM[TL[RL]TN^VM]UK[SKZSKZSKYRMZSKYSJYRIXQIXQHWOIXQWj`XlaN_WK[SM\TM]SN]UM]UO^VJ\TJ[RJ\RJYPLZQK\TQdX|{pqq~o}tfzm}mtsjY_P@01#.)4))q1>AR.*.*0`EMU;>GJ#y|aYX*\[%0/ ^X0FGOM#PM,ded{}mopa~~nqp`VSEvtfrseopbppcnmbifZ{zkonm^trcrp^p{{jpxxft{}yvd|k\XEiVHa!\$\%a&a&e&c'\&[#\."t|ktpo_~nvxoyxwfwrc|zhxuewwetrnqslm[sutu~}knk]yvf{xftqa}ovveyxixwgvwg{|kwxgyyinl\jfZqm_a[Mqn_~l}jnnywf~nok^~|mmvtcr{zf|}lpeWV=+15!30137&=+8$8$8(303 7&4;'8%112033221133#1/3!1001115;*b+8&./033#5"4 12"48%6%4!3010114#11/7%5"33222222112n+v2"m+a*N(8T&/021...8'bdazvfwr_lfWH@6IA9IA9G?7G?6E;4?5,5+#1%0$."<, B/!C1!F3$G4&F3$F2$I4&H6(G5&E3$G4&G2$J5(J5(K6)F2"I6&K6)I5$rYba~_xYwXwX}]yZ`H3M9.J5(L:*K7*I5(L6(L6)L6)L8+N=/M=0L9/hTCfx]z_bL<N=3N=3N=3N=3L;1M<2M<3K:.n]w`x_zcUA5M=4J8.G6,G6,vcQr_K"{o}n~p~p~zm}zl|xkyvgxuh{xkQOP' 6/,<30;30 !&7-($,$/'#1!RIIVQX8@0+E92/$!*!-# dWOdSEfRF`JC}je[SNKA=/&$.'&>75/'&A:4|vla\/%&*#%F><* 7/,77?$'>+,<607xh]SKC:20.$!@3,{+%!RIEfbZge_[WR6.+GA=F<8OHBWSR#)WQK<71E90`UHoaQ-$ .#"<-(WOFlgZwi]s_Ps_NwdQxi\eca(gSH}iXH?8<<7+ >,%o_fOBVZW;J9JWGGTENZIHRBJ[KDVG8M@=VDCYHHZIN\KJYFGRAEQ>VdQKYIO\J[fOP[G?Q??QA<QA:O=7L=8P=7Q>:SB7P?5K:6K;3I85K;5N>6TB6VB6WD5WC6[D6]C6[C6ZD4YC4UB3S?6TB3R>5R@4O=5R?4UB5WC5U@6VA>ZFC[H\o[_p[ZmYE\HKaMUhSShRNgPRjTRfSH`MKcPI`JNdNOfRVlXOeQSfSTiUOdRQdRVgVPaOP`QGVGOaQVhWViXI]MK^NMbOShUJ_MB[I@YH9RC:SD1N>KdVfca~pznzm|p}m{nyo}m|l|m~okaSg]Og]Pj_RlaUneWvo\otISIWcW`l`crdjxip~otqqnpmo~mporrususrovstr{wz|xwtwtyu{v|}xzz}y{Ħͬ|heZMeZMf\PmdY|lopyi-4'4%2%,-<;o&q/O:Z1++4$w,>/[]@NG-?5#mvoVdy[}zXmldMgify{j][NdbVgeWhiYon`hgYfeXol_^]Pli\nl^_[NyxjgdUnk\o}~m{|irqqvvud~}lywd~dUG\"Z$^%a&a&a%a%_$[#X,ipafcTjgY}nywdlhV~|l||ktscspapn_liYpk[rnZgcPlkYkgVso_a[NecT^[Lb^Nb^N\WItpcqm_om^ywe{gnsqc~~o{|n|}myzk{{lliZ{zi}|j{zjyvg~l|gsroyzgnl\rywennprr_}mgUQ/6!00/.15 21214113024 11111212123A.8$1212430.4~5$b/8&.1306"33!18$2 6$7'4 13/10/15"3 132"4 2222032/23w2"w0s0g+\*I'3l/021..0;&cecorpl\G@5IA7H@8IB8C;2D;3?4,5+#2&1$* 3%=-?.D1!E2$H5'H5&G4&H5'F3%E2#G4%H4'I3'J4)I4%J6&G2&J4(I2#rWtUlQtWvXz[xYvWy\wbII5'L7*J5(J5)L6(M8*N9,M;-L:-K9-L:.M<0]J;}ew]x]xdQM;/M=3M<2M<2N=3M<3L;3L<3fWIv_u^w_vdRK:0N>3J8.L<0ZH9t\9())JLMt{m~{m~{m~zm~zmzvgzwhxtgzxkfde2**>667-,90,!/! , -"- 9+$'@4.M=5=:F 9/1D/-DTNVaXU'-&#,"!YPJ\K>r`NTB4K93pYTxmhNE?/+*C@?PJGA546.++#!E@;UMGyPF@]SO-&&2+*:1-?84QQU88E65@YQO}n\g]V821,"<2*~|lG<:JD?YXUIHE<952-(XLAmbXC>>(8-)PIF]\VI=5XI:^TC'4)%7(!'0,,hhgzskucVgVHyuo0-.&9)#q\O~vfDD>,$%vcTFX[Z:J?BRDL[L;K<JZJCRD;M@;OAATCK[HakZcm[isaouarrzbO[KQ`MQ`MM]JM^LBXC9O=;Q?8N=>TB<TB;RB:Q@9R@8R@5N=3I;5L=9TC:YE5TA6VB6YD9]E9YD7WD9YD6VC4P=3P<4TA;XF?XG;TD6O>4O=8TA:YF;XCE_L@ZEH^JDYERhSRhRMbMKaMRgRZlVXhTVhTVjU[nW]q]UiUPfPPhRKaMH_KLcQK_NK`NTiVVjXTfVQfSDYG@XH>XGPdRTfVTdTMcRQdTNdSE\NB[MD^OAZNfdb~r~ymyn{ozm{o{ozlzl{m|mzlyrgyrgyshzti~ujpŪyzzuutosuwpc{sh{sg{tfyk}np_Q<2;-7+--(;}6EM!c13-/x)C( diff --git a/src/cups/commands/SetAlignment.cmd b/src/cups/commands/SetAlignment.cmd index 943a3f0..74dd9ed 100644 --- a/src/cups/commands/SetAlignment.cmd +++ b/src/cups/commands/SetAlignment.cmd @@ -4,4 +4,3 @@ # SetAlignment 0 8 0 - diff --git a/src/cups/cups-genppdupdate.in b/src/cups/cups-genppdupdate.in index fbfbc6b..8f0137b 100644 --- a/src/cups/cups-genppdupdate.in +++ b/src/cups/cups-genppdupdate.in @@ -233,7 +233,7 @@ sub VERSION_MESSAGE($;$$$) { sub help() { HELP_MESSAGE(\*STDOUT); } - + sub check_multicat() { } diff --git a/src/cups/genppd.c b/src/cups/genppd.c index 49c13a9..2e47f34 100644 --- a/src/cups/genppd.c +++ b/src/cups/genppd.c @@ -200,7 +200,8 @@ static gpFile gpopen(const char *path, const char *mode); static int gpclose(gpFile f); #endif /* !CUPS_DRIVER_INTERFACE */ static int gpputs(gpFile f, const char *s); -static int gpprintf(gpFile f, const char *format, ...); +static int gpprintf(gpFile f, const char *format, ...) + __attribute__((format(__printf__, 2, 3))); static char **getlangs(void); static int is_special_option(const char *name); static void print_group_close(gpFile fp, stp_parameter_class_t p_class, @@ -559,11 +560,11 @@ main(int argc, /* I - Number of command-line arguments */ break; } } -#ifdef HAVE_LIBZ +#ifdef HAVE_LIBZ if (use_compression) gpext = ".gz"; else -#endif +#endif gpext = ""; if (optind < argc) { int n, numargs; @@ -661,7 +662,7 @@ main(int argc, /* I - Number of command-line arguments */ for (i = 0; i < stp_printer_model_count(); i++) { printer = stp_get_printer_by_index(i); - + if (i % parallel == rotor && printer) { if (! verbose && (i % 50) == 0) @@ -1194,7 +1195,7 @@ print_ppd_header_3(gpFile fp, ppd_type_t ppd_type, int model, gpputs(fp, "*TTRasterizer: Type42\n"); gpputs(fp, "*cupsVersion: 1.2\n"); - + gpprintf(fp, "*cupsFilter: \"application/vnd.cups-raster 100 rastertogutenprint.%s\"\n", GUTENPRINT_RELEASE_VERSION); if (strcasecmp(manufacturer, "EPSON") == 0) gpputs(fp, "*cupsFilter: \"application/vnd.cups-command 33 commandtoepson\"\n"); @@ -1776,18 +1777,6 @@ print_one_option(gpFile fp, stp_vars_t *v, const stp_string_list_t *po, print_close_ui = 0; gpprintf(fp, "*CloseUI: *Stp%s\n\n", desc->name); -#if 0 - /* This needs to be enabled if/when dimensions become floating point */ - /* - * Add custom option code and value parameter... - */ - - gpprintf(fp, "*CustomStp%s True: \"pop\"\n", desc->name); - gpprintf(fp, "*ParamCustomStp%s Value/%s: 1 points %d %d\n\n", - desc->name, _("Value"), desc->bounds.dimension.lower, - desc->bounds.dimension.upper); -#endif - break; case STP_PARAMETER_TYPE_INT: gpprintf(fp, "*OPOptionHints Stp%s: \"input spinbox\"\n", lparam->name); @@ -1911,11 +1900,6 @@ print_one_localization(gpFile fp, const stp_string_list_t *po, gpprintf(fp, "*%s.Stp%s %d/%s: \"\"\n", lang, desc->name, i, dimstr); } -#if 0 - /* This needs to be enabled if/when dimensions are floating point */ - gpprintf(fp, "*%s.ParamCustomStp%s Value/%s: \"\"\n", lang, - desc->name, _("Value")); -#endif break; case STP_PARAMETER_TYPE_INT: @@ -2621,7 +2605,7 @@ write_ppd( } } stp_parameter_description_destroy(&desc); - + /* * Quality settings */ diff --git a/src/cups/i18n.c b/src/cups/i18n.c index 7c3351b..f032d13 100644 --- a/src/cups/i18n.c +++ b/src/cups/i18n.c @@ -383,7 +383,7 @@ stp_i18n_load(const char *locale) /* I - Locale name */ pocache->next = stpi_pocache; stpi_pocache = pocache; } - + if (ic) iconv_close(ic); return (po); diff --git a/src/cups/test-rastertogutenprint.in b/src/cups/test-rastertogutenprint.in index b6a5b70..91b27ad 100755 --- a/src/cups/test-rastertogutenprint.in +++ b/src/cups/test-rastertogutenprint.in @@ -145,7 +145,7 @@ else tfile=`mktemp` trap cleanup 1 2 3 6 14 15 30 "$pdfjam" -q "$testfile" "$pages" -o $tfile -fi +fi if [ -z "$verbose" ] ; then STP_SUPPRESS_MESSAGES=1 @@ -327,10 +327,10 @@ if [ -d ppd/C ] ; then done files=$nondup_files fi - for i in $(seq 0 $(($jobs-1))) ; do + for i in $(seq 0 $(($jobs-1))) ; do runall $jobs $i $files & done - for i in $(seq 0 $(($jobs-1))) ; do + for i in $(seq 0 $(($jobs-1))) ; do wait -n if [ "$?" -gt 0 ] ; then retval=1 |