]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Update ipp documentation to reflect the behavior of configuring WiFi on IPP USB printers. master
authorSteve Algernon <salgernon@apple.com>
Fri, 27 Oct 2023 22:47:22 +0000 (15:47 -0700)
committerSteve Algernon <salgernon@apple.com>
Fri, 27 Oct 2023 23:19:49 +0000 (16:19 -0700)
145 files changed:
.gitignore
.lgtm.yml [moved from lgtm.yaml with 54% similarity]
CHANGES.md
INSTALL.md
Makefile
README.md
backend/backend-private.h
backend/ipp.c
backend/lpd.c
backend/network.c
backend/org.cups.usb-quirks
backend/snmp.c
backend/testbackend.c
backend/usb-darwin.c
backend/usb-libusb.c
backend/usb-unix.c
berkeley/lpc.c
cgi-bin/admin.c
cgi-bin/classes.c
cgi-bin/help-index.c
cgi-bin/ipp-var.c
cgi-bin/printers.c
cgi-bin/template.c
cgi-bin/var.c
conf/cgi.types [new file with mode: 0644]
config-scripts/cups-compiler.m4
configure
configure.ac
cups/auth.c
cups/cups.h
cups/cupspm.md
cups/dest.c
cups/getdevices.c
cups/getifaddrs-internal.h
cups/hash.c
cups/http-addr.c
cups/http-addrlist.c
cups/http-support.c
cups/http.c
cups/http.h
cups/ipp-file.c
cups/ipp-support.c
cups/ipp-vars.c
cups/ipp.c
cups/options.c
cups/ppd-cache.c
cups/ppd-mark.c
cups/ppd-private.h
cups/ppd.c
cups/pwg-media.c
cups/raster-stream.c
cups/request.c
cups/snprintf.c
cups/testclient.c
cups/testdest.c
cups/testraster.c
cups/tls-darwin.c
cups/tls-gnutls.c
cups/tls-sspi.c
cups/tlscheck.c
doc/help/cgi.html
doc/help/cupspm.html
doc/help/man-cupsd.conf.html
doc/help/man-ippeveprinter.html
doc/help/man-ipptool.html
doc/help/man-ipptoolfile.html
doc/help/spec-ipp.html
doc/test.cgi [new file with mode: 0755]
doc/test.php [new file with mode: 0755]
examples/testfile.txt
filter/common.c
filter/rastertohp.c
filter/rastertolabel.c
filter/rastertopdf.cpp [new file with mode: 0644]
locale/cups.pot
locale/cups.strings
locale/cups_ca.po
locale/cups_cs.po
locale/cups_de.po
locale/cups_en.po
locale/cups_es.po
locale/cups_fr.po
locale/cups_it.po
locale/cups_ja.po
locale/cups_pt_BR.po
locale/cups_ru.po
locale/cups_zh_CN.po
locale/ipp-strings.c
man/cupsd.conf.5
man/ippeveprinter.1
man/ipptool.1
man/ipptoolfile.5
notifier/rss.c
packaging/cups.list.in
ppdc/ppdc-import.cxx
ppdc/ppdc-source.cxx
ppdc/ppdc.cxx
ppdc/ppdhtml.cxx
ppdc/ppdi.cxx
ppdc/ppdmerge.cxx
ppdc/ppdpo.cxx
ppdc/sample.drv
scheduler/auth.c
scheduler/cert.c
scheduler/classes.c
scheduler/client.c
scheduler/conf.c
scheduler/conf.h
scheduler/cups-deviced.c
scheduler/cups-lpd.c
scheduler/ipp.c
scheduler/job.c
scheduler/listen.c
scheduler/log.c
scheduler/main.c
scheduler/printers.c
scheduler/subscriptions.c
scheduler/sysman.c
scheduler/util.c
scripts/makecups [new file with mode: 0755]
scripts/makesrcdist
systemv/cancel.c
systemv/cupstestppd.c
systemv/lp.c
systemv/lpadmin.c
systemv/lpstat.c
templates/Makefile
templates/choose-model.tmpl
templates/jobs.tmpl
test/run-stp-tests.sh
tools/Makefile
tools/ippeveprinter.c
tools/ippeveps.c
tools/ippfind.c
tools/ipptool.c
tools/printer-lg-png.h [new file with mode: 0644]
tools/printer-lg.png [new file with mode: 0644]
tools/printer-png.h
tools/printer-sm-png.h [new file with mode: 0644]
tools/printer-sm.png [new file with mode: 0644]
tools/printer.png
vcnet/config.h
vcnet/dns_sd.c
xcode/CUPS.xcodeproj/project.pbxproj
xcode/config.h

index a5e32e600aa0d5ef4cdc5892c4e1dd3f19c49306..3bc3f2efcc2e43f1552c99bd6509ae3ba3f1b30f 100644 (file)
@@ -1,6 +1,6 @@
 *.a
 *.bck
-*.cgi
+/cgi-bin/*.cgi
 *.o
 autom4te.cache
 config.h
similarity index 54%
rename from lgtm.yaml
rename to .lgtm.yml
index 626551724863bcc968ddc625602aa2aff76bf913..e7f2e0dff3aff2af274d10687fd8eea585eb025d 100644 (file)
--- a/lgtm.yaml
+++ b/.lgtm.yml
@@ -2,3 +2,6 @@ queries:
   - exclude: cpp/integer-multiplication-cast-to-long
   - exclude: cpp/missing-header-guard
   - exclude: cpp/short-global-name
+  - exclude: cpp/tainted-format-string
+  - exclude: cpp/toctou-race-condition
+  - exclude: cpp/constant-comparison
index eadae56a080aca4d2f74e6fd5b1e46f5258aa0fb..9da22c8e76e5600e73e72a8a29d074972fa0f121 100644 (file)
-CHANGES - 2.3.1 - 2019-11-18
-============================
+Change History
+==============
+
+Changes in CUPS v2.3.6
+----------------------
+- CVE-2022-26691: An incorrect comparison in local admin authentication.
+
+
+Changes in CUPS v2.3.5
+----------------------
+
+- The automated test suite can now be activated using `make test` for
+  consistency with other projects and CI environments - the old `make check`
+  continues to work as well, and the previous test server behavior can be
+  accessed by running `make testserver`.
+- ippeveprinter now supports multiple icons and strings files.
+- ippeveprinter now uses the system's FQDN with Avahi.
+- ippeveprinter now supports Get-Printer-Attributes on "/".
+- ippeveprinter now uses a deterministic "printer-uuid" value.
+- ippeveprinter now uses system sounds on macOS for Identify-Printer.
+- Updated ippfind to look for files in "~/Desktop" on Windows.
+- Updated ippfind to honor `SKIP-XXX` directives with `PAUSE`.
+- Updated IPP Everywhere support to work around printers that only advertise
+  color raster support but really also support grayscale (OpenPrinting #1)
+- ipptool now supports DNS-SD URIs like `ipps://My%20Printer._ipps._tcp.local`
+  (OpenPrinting #5)
+- ipptool now supports monitoring the printer state while submitting a job
+  with the `MONITOR-PRINTER-STATE` directive (OpenPrinting #153)
+- ipptool now supports testing for unique values with the `WITH-DISTINCT-VALUES`
+  predicate (OpenPrinting #153)
+- ipptool now supports retrying requests on a `server-error-busy` status code
+  (OpenPrinting #153)
+- ipptool now supports `value-tag(MAX)` and `value-tag(MIN:MAX)` for the
+  `OF-TYPE` predicate (OpenPrinting #153)
+- The scheduler now allows root backends to have world read permissions but not
+  world execute permissions (OpenPrinting #21)
+- Failures to bind IPv6 listener sockets no longer cause errors if IPv6 is
+  disabled on the host (OpenPrinting #25)
+- The SNMP backend now supports the HP and Ricoh vendor MIBs (OpenPrinting #28)
+- The scheduler no longer includes a timestamp in files it writes (OpenPrinting #29)
+- IPP Everywhere PPDs could have an "unknown" default InputSlot (OpenPrinting #44)
+- The `httpAddrListen` function now uses a listen backlog of 128.
+- The PPD functions now treat boolean values as case-insensitive (OpenPrinting #106)
+- Temporary queue names no longer end with an underscore (OpenPrinting #110)
+- Added USB quirks (Issue #5789, #5766, #5823, #5831, #5838, #5843, #5867)
+- Fixed IPP Everywhere v1.1 conformance issues in ippeveprinter.
+- Fixed DNS-SD name collision support in ippeveprinter.
+- Fixed compiler and code analyzer warnings.
+- Fixed TLS support on Windows.
+- Fixed ippfind sub-type searches with Avahi.
+- Fixed the default hostname used by ippeveprinter on macOS.
+- Fixed resolution of local IPP-USB printers with Avahi.
+- Fixed coverity issues (OpenPrinting #2)
+- Fixed `httpAddrConnect` issues (OpenPrinting #3)
+- Fixed web interface device URI issue (OpenPrinting #4)
+- Fixed lp/lpr "printer/class not found" error reporting (OpenPrinting #6)
+- Fixed a memory leak in the scheduler (OpenPrinting #12)
+- Fixed a potential integer overflow in the PPD hashing code (OpenPrinting #13)
+- Fixed output-bin and print-quality handling issues (OpenPrinting #18)
+- Fixed PPD options getting mapped to odd IPP values like "tray---4" (OpenPrinting #23)
+- Fixed remote access to the cupsd.conf and log files (OpenPrinting #24)
+- Fixed a logging regression caused by a previous change for Issue #5604
+  (OpenPrinting #25)
+- Fixed the "uri-security-supported" value from the scheduler (OpenPrinting #42)
+- Fixed IPP backend crash bug with "printer-alert" values (OpenPrinting #43)
+- Fixed default options that incorrectly use the "custom" prefix (OpenPrinting #48)
+- Fixed a memory leak when resolving DNS-SD URIs (OpenPrinting #49)
+- Fixed cupsManualCopies values in IPP Everywhere PPDs (Issue #5807)
+- Fixed duplicate ColorModel entries for AirPrint printers (Issue 59)
+- Fixed crash bug in `ppdOpen` (OpenPrinting #64, OpenPrinting #78)
+- Fixed regression in `snprintf` emulation function (OpenPrinting #67)
+- Fixed reporting of printer instances when enumerating and when no options are
+  set for the main instance (OpenPrinting #71)
+- Fixed segfault in help.cgi when searching in man pages (OpenPrinting #81)
+- Fixed a bug in ipptool that caused the reuse of request IDs when repeating a
+  test (OpenPrinting #153)
+- Root certificates were incorrectly stored in "~/.cups/ssl".
+- Fixed a PPD memory leak caused by emulator definitions (OpenPrinting #124)
+- Fixed a `DISPLAY` bug in `ipptool` (OpenPrinting #139)
+- `httpReconnect2` did not reset the socket file descriptor when the TLS
+  negotiation failed (Issue #5907)
+- `httpUpdate` did not reset the socket file descriptor when the TLS
+  negotiation failed (Apple #5915)
+- The `ippeveprinter` tool now automatically uses an available port.
+- The IPP backend now retries Validate-Job requests (OpenPrinting #132)
+- Removed support for the (long deprecated and unused) `KeepAliveTimeout`
+  directive in `cupsd.conf` (Issue #5733)
+- Fixed `@IF(name)` handling in `cupsd.conf` (Issue #5918)
+- The scheduler now supports the "everywhere" model directly (Issue #5919)
+- Fixed documentation and added examples for CUPS' limited CGI support
+  (Issue #5940)
+- Fixed the `lpc` command prompt (Issue #5946)
+- Fixed `job-pages-per-set` value for duplex print jobs.
+
+
+Changes in CUPS v2.3.4
+----------------------
+
+- CVE-2020-10001: Fixed a buffer (read) overflow in the `ippReadIO` function.
+
+
+Changes in CUPS v2.3.3
+----------------------
+
+- CVE-2020-3898: The `ppdOpen` function did not handle invalid UI
+  constraint.  `ppdcSource::get_resolution` function did not handle
+  invalid resolution strings.
+- CVE-2019-8842: The `ippReadIO` function may under-read an extension
+  field.
+- Fixed WARNING_OPTIONS support for GCC 9.x
+
+
+Changes in CUPS v2.3.2
+----------------------
+
+- Localization updates.
 
 
 Changes in CUPS v2.3.1
 ----------------------
 
 - Documentation updates (Issue #5661, #5674, #5682)
+- CVE-2019-2228: The `ippSetValuetag` function did not validate the default
+  language value.
 - Fixed a crash bug in the web interface (Issue #5621)
+- The PPD cache code now looks up page sizes using their dimensions
+  (Issue #5633)
 - PPD files containing "custom" option keywords did not work (Issue #5639)
 - Added a workaround for the scheduler's systemd support (Issue #5640)
 - On Windows, TLS certificates generated on February 29 would likely fail
@@ -17,16 +135,24 @@ Changes in CUPS v2.3.1
 - The libusb-based USB backend now reports an error when the distribution
   permissions are wrong (Issue #5658)
 - Added paint can labels to Dymo driver (Issue #5662)
+- The `ippeveprinter` program now supports authentication (Issue #5665)
+- The `ippeveprinter` program now advertises DNS-SD services on the correct
+  interfaces, and provides a way to turn them off (Issue #5666)
 - The `--with-dbusdir` option was ignored by the configure script (Issue #5671)
 - Sandboxed applications were not able to get the default printer (Issue #5676)
 - Log file access controls were not preserved by `cupsctl` (Issue #5677)
 - Default printers set with `lpoptions` did not work in all cases (Issue #5681,
   Issue #5683, Issue #5684)
+- Fixed an error in the jobs web interface template (Issue #5694)
+- Fixed an off-by-one error in `ippEnumString` (Issue #5695)
+- Fixed some new compiler warnings (Issue #5700)
+- Fixed a few issues with the Apple Raster support (rdar://55301114)
 - The IPP backend did not detect all cases where a job should be retried using
   a raster format (rdar://56021091)
 - Fixed spelling of "fold-accordion".
 - Fixed the default common name for TLS certificates used by `ippeveprinter`.
 - Fixed the option names used for IPP Everywhere finishing options.
+- Added support for the second roll of the DYMO Twin/DUO label printers.
 
 
 Changes in CUPS v2.3.0
index d2afc4cf99d4dcb2a7b9c88cc8d7c921af94d928..f88dfedff8e116f36696bb9ef9af41d1da48b1db 100644 (file)
@@ -1,4 +1,4 @@
-INSTALL - CUPS v2.3.0 - 2019-08-21
+INSTALL - CUPS v2.3.6 - 2022-05-25
 ==================================
 
 This file describes how to compile and install CUPS from source code. For more
index 15544627f6cd0c6975d8409f790162dbade0f01d..294ac5ea499cdf79bbc79fcf401e91e23c74d54f 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 #
 # Top-level Makefile for CUPS.
 #
-# Copyright © 2007-2019 by Apple Inc.
+# Copyright © 2007-2021 by Apple Inc.
 # Copyright © 1997-2007 by Easy Software Products, all rights reserved.
 #
 # Licensed under Apache License v2.0.  See the file "LICENSE" for more
@@ -230,16 +230,16 @@ uninstall:
 # Run the test suite...
 #
 
-test:  all unittests
-       echo Running CUPS test suite...
+testserver:    all unittests
+       echo Running CUPS test server...
        cd test; ./run-stp-tests.sh $(TESTOPTIONS)
 
 
-check: all unittests
+check test:    all unittests
        echo Running CUPS test suite with defaults...
        cd test; ./run-stp-tests.sh 1 0 n n
 
-debugcheck:    all unittests
+debugcheck debugtest:  all unittests
        echo Running CUPS test suite with debug printfs...
        cd test; ./run-stp-tests.sh 1 0 n y
 
index ee1125b34ea80cfdc05c5854d16c20c1d68d896a..f48de536751f846495cc9ab6becada312320232b 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,5 +1,10 @@
-README - CUPS v2.3.1 - 2019-10-07
-=================================
+README - Apple CUPS v2.3.6 - 2022-05-25
+=======================================
+
+> Note: Apple CUPS is the version of CUPS that is shipped with macOS and iOS.
+> For the current version of CUPS that is used on other operating systems, see
+> <https://openprinting.github.io/cups> for details.
+
 
 INTRODUCTION
 ------------
@@ -157,7 +162,7 @@ This will prevent the filters from misinterpreting your print file.
 LEGAL STUFF
 -----------
 
-Copyright © 2007-2019 by Apple Inc.
+Copyright © 2007-2021 by Apple Inc.
 Copyright © 1997-2007 by Easy Software Products.
 
 CUPS is provided under the terms of the Apache License, Version 2.0 with
index 85fb8aef8ae36f5ef2cc664d888d2e45601065e0..d19b06b823b6d77a8bb3e4861de8d0d59c174dfe 100644 (file)
@@ -1,7 +1,8 @@
 /*
  * Backend support definitions for CUPS.
  *
- * Copyright © 2007-2014 by Apple Inc.
+ * Copyright © 2021 by OpenPrinting
+ * Copyright © 2007-2021 by Apple Inc.
  * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
  *
  * Licensed under Apache License v2.0.  See the file "LICENSE" for more
@@ -52,6 +53,14 @@ extern "C" {
 #  endif /* __cplusplus */
 
 
+/*
+ * Log messages in backend signal handlers or other places where stdio cannot
+ * be used...
+ */
+
+#  define backendMessage(msg) {const char *s = msg; write(2, s, strlen(s));}
+
+
 /*
  * OID constants...
  */
@@ -320,7 +329,6 @@ extern int          backendSNMPSupplies(int snmp_fd, http_addr_t *addr,
 extern int             backendWaitLoop(int snmp_fd, http_addr_t *addr,
                                        int use_bc, _cups_sccb_t side_cb);
 
-
 #  ifdef __cplusplus
 }
 #  endif /* __cplusplus */
index b2b22065ef4ab9e5e964f1c36d482c9eff4eee8d..3779c88fa45ff41c59b0dcfb76c072979b25f3a9 100644 (file)
@@ -1,7 +1,8 @@
 /*
  * IPP backend for CUPS.
  *
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2021 by OpenPrinting
+ * Copyright © 2007-2021 by Apple Inc.
  * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
  *
  * Licensed under Apache License v2.0.  See the file "LICENSE" for more
@@ -233,7 +234,6 @@ main(int  argc,                             /* I - Number of command-line args */
   int          waitjob,                        /* Wait for job complete? */
                waitjob_tries = 0,      /* Number of times we've waited */
                waitprinter;            /* Wait for printer ready? */
-  time_t       waittime;               /* Wait time for held jobs */
   _cups_monitor_t monitor;             /* Monitoring data */
   ipp_attribute_t *job_id_attr;                /* job-id attribute */
   int          job_id;                 /* job-id value */
@@ -257,6 +257,7 @@ main(int  argc,                             /* I - Number of command-line args */
                get_job_attrs = 0,      /* Does printer support Get-Job-Attributes? */
                send_document = 0,      /* Does printer support Send-Document? */
                validate_job = 0,       /* Does printer support Validate-Job? */
+               validate_retried = 0,   /* Was Validate-Job request retried? */
                copies,                 /* Number of copies for job */
                copies_remaining;       /* Number of copies remaining */
   const char   *content_type,          /* CONTENT_TYPE environment variable */
@@ -1560,7 +1561,17 @@ main(int  argc,                          /* I - Number of command-line args */
              ipp_status == IPP_STATUS_ERROR_BAD_REQUEST)
       break;
     else if (job_auth == NULL && ipp_status > IPP_STATUS_ERROR_BAD_REQUEST)
+    {
+      if (!validate_retried)
+      {
+        // Retry Validate-Job operation once, to work around known printer bug...
+        validate_retried = 1;
+        sleep(10);
+        continue;
+      }
+
       goto cleanup;
+    }
   }
 
  /*
@@ -2009,7 +2020,7 @@ main(int  argc,                           /* I - Number of command-line args */
 
     _cupsLangPrintFilter(stderr, "INFO", _("Waiting for job to complete."));
 
-    for (delay = _cupsNextDelay(0, &prev_delay), waittime = time(NULL) + 30; !job_canceled;)
+    for (delay = _cupsNextDelay(0, &prev_delay); !job_canceled;)
     {
      /*
       * Check for side-channel requests...
@@ -2124,11 +2135,10 @@ main(int  argc,                         /* I - Number of command-line args */
                    job_sheets->values[0].integer);
 
         /*
-          * Stop polling if the job is finished or pending-held for 30 seconds...
+          * Stop polling if the job is finished or pending-held...
          */
 
-          if (job_state->values[0].integer > IPP_JSTATE_STOPPED ||
-             (job_state->values[0].integer == IPP_JSTATE_HELD && time(NULL) > waittime))
+          if (job_state->values[0].integer > IPP_JSTATE_STOPPED || job_state->values[0].integer == IPP_JSTATE_HELD)
          {
            ippDelete(response);
            break;
@@ -2242,7 +2252,8 @@ main(int  argc,                           /* I - Number of command-line args */
   else if (ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_AUTHORIZATION_FAILED)
     fputs("JOBSTATE: account-authorization-failed\n", stderr);
 
-  if (job_canceled)
+  // job_canceled can be -1 which should not be treated as CUPS_BACKEND_OK
+  if (job_canceled > 0)
     return (CUPS_BACKEND_OK);
   else if (ipp_status == IPP_STATUS_ERROR_NOT_AUTHORIZED || ipp_status == IPP_STATUS_ERROR_FORBIDDEN || ipp_status == IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED)
     return (CUPS_BACKEND_AUTH_REQUIRED);
@@ -2827,7 +2838,21 @@ new_request(
         */
 
         _httpDecodeURI(phone, keyword, sizeof(phone));
-        for (ptr = phone; *ptr;)
+        ptr = phone;
+
+        /*
+         * Weed out "Custom." in the beginning, this allows to put the
+         * "phone" option as custom string option into the PPD so that
+         * print dialogs not supporting fax display the option and
+         * allow entering the phone number. Print dialogs also send "None"
+         * if no phone number got entered, filter this, too.
+         */
+        if (!_cups_strcasecmp(phone, "None"))
+          *ptr = '\0';
+        if (!_cups_strncasecmp(phone, "Custom.", 7))
+          _cups_strcpy(ptr, ptr + 7);
+
+        for (; *ptr;)
        {
          if (*ptr == ',')
            *ptr = 'p';
@@ -2837,20 +2862,36 @@ new_request(
            ptr ++;
         }
 
-        httpAssembleURI(HTTP_URI_CODING_ALL, tel_uri, sizeof(tel_uri), "tel", NULL, NULL, 0, phone);
-        ippAddString(destination, IPP_TAG_JOB, IPP_TAG_URI, "destination-uri", NULL, tel_uri);
-
-       if ((keyword = cupsGetOption("faxPrefix", num_options,
-                                    options)) != NULL && *keyword)
+        if (strlen(phone) > 0)
         {
-         char  predial[1024];          /* Pre-dial string */
+          httpAssembleURI(HTTP_URI_CODING_ALL, tel_uri, sizeof(tel_uri), "tel", NULL, NULL, 0, phone);
+          ippAddString(destination, IPP_TAG_JOB, IPP_TAG_URI, "destination-uri", NULL, tel_uri);
+          fprintf(stderr, "DEBUG: Faxing to phone %s; destination-uri: %s\n", phone, tel_uri);
 
-         _httpDecodeURI(predial, keyword, sizeof(predial));
-         ippAddString(destination, IPP_TAG_JOB, IPP_TAG_TEXT, "pre-dial-string", NULL, predial);
-       }
+          if ((keyword = cupsGetOption("faxPrefix", num_options, options)) != NULL && *keyword)
+          {
+            char       predial[1024];          /* Pre-dial string */
+
+            _httpDecodeURI(predial, keyword, sizeof(predial));
+            ptr = predial;
+            if (!_cups_strcasecmp(ptr, "None"))
+              *ptr = '\0';
+            if (!_cups_strncasecmp(ptr, "Custom.", 7))
+              ptr += 7;
+            if (strlen(ptr) > 0)
+            {
+              ippAddString(destination, IPP_TAG_JOB, IPP_TAG_TEXT, "pre-dial-string", NULL, ptr);
+              fprintf(stderr, "DEBUG: Pre-dialing %s; pre-dial-string: %s\n", ptr, ptr);
+            }
+            else
+              fprintf(stderr, "WARNING: Pre-dial number for fax not valid! Sending fax without pre-dial number.\n");
+          }
 
-        ippAddCollection(request, IPP_TAG_JOB, "destination-uris", destination);
-        ippDelete(destination);
+          ippAddCollection(request, IPP_TAG_JOB, "destination-uris", destination);
+          ippDelete(destination);
+        }
+        else
+          fprintf(stderr, "ERROR: Phone number for fax not valid! Fax cannot be sent.\n");
       }
     }
     else
@@ -3077,7 +3118,7 @@ report_printer_state(ipp_t *ipp)  /* I - IPP response */
   * Report alerts and messages...
   */
 
-  if ((pa = ippFindAttribute(ipp, "printer-alert", IPP_TAG_TEXT)) != NULL)
+  if ((pa = ippFindAttribute(ipp, "printer-alert", IPP_TAG_STRING)) != NULL)
     report_attr(pa);
 
   if ((pam = ippFindAttribute(ipp, "printer-alert-message",
@@ -3118,11 +3159,10 @@ report_printer_state(ipp_t *ipp)        /* I - IPP response */
       if (*ptr < ' ' && *ptr > 0 && *ptr != '\t')
       {
        /*
-        * Substitute "<XX>" for the control character; sprintf is safe because
-       * we always leave 6 chars free at the end...
+        * Substitute "<XX>" for the control character...
        */
 
-        sprintf(valptr, "<%02X>", *ptr);
+        snprintf(valptr, sizeof(value) - (size_t)(valptr - value), "<%02X>", *ptr);
        valptr += 4;
       }
       else
@@ -3205,7 +3245,8 @@ run_as_user(char       *argv[],           /* I - Command-line arguments */
            const char *device_uri,     /* I - Device URI */
            int        fd)              /* I - File to print */
 {
-  const char           *auth_negotiate;/* AUTH_NEGOTIATE env var */
+  const char           *auth_negotiate,/* AUTH_NEGOTIATE env var */
+                       *content_type;  /* [FINAL_]CONTENT_TYPE env vars */
   xpc_connection_t     conn;           /* Connection to XPC service */
   xpc_object_t         request;        /* Request message dictionary */
   __block xpc_object_t response;       /* Response message dictionary */
@@ -3268,6 +3309,10 @@ run_as_user(char       *argv[],          /* I - Command-line arguments */
                             getenv("AUTH_INFO_REQUIRED"));
   if ((auth_negotiate = getenv("AUTH_NEGOTIATE")) != NULL)
     xpc_dictionary_set_string(request, "auth-negotiate", auth_negotiate);
+  if ((content_type = getenv("CONTENT_TYPE")) != NULL)
+    xpc_dictionary_set_string(request, "content-type", content_type);
+  if ((content_type = getenv("FINAL_CONTENT_TYPE")) != NULL)
+    xpc_dictionary_set_string(request, "final-content-type", content_type);
   xpc_dictionary_set_fd(request, "stdin", fd);
   xpc_dictionary_set_fd(request, "stderr", 2);
   xpc_dictionary_set_fd(request, "side-channel", CUPS_SC_FD);
@@ -3390,7 +3435,7 @@ sigterm_handler(int sig)          /* I - Signal */
 {
   (void)sig;   /* remove compiler warnings... */
 
-  write(2, "DEBUG: Got SIGTERM.\n", 20);
+  backendMessage("DEBUG: Got SIGTERM.\n");
 
 #if defined(HAVE_GSSAPI) && defined(HAVE_XPC)
   if (child_pid)
@@ -3406,7 +3451,7 @@ sigterm_handler(int sig)          /* I - Signal */
     * Flag that the job should be canceled...
     */
 
-    write(2, "DEBUG: sigterm_handler: job_canceled = 1.\n", 25);
+    backendMessage("DEBUG: sigterm_handler: job_canceled = 1.\n");
 
     job_canceled = 1;
     return;
index efc7a9acc29b87362be3eaed1f6ab6d0da5a1523..c4aab8b989a6159c5a3e931c1757d3a14cc43813 100644 (file)
@@ -1046,7 +1046,7 @@ lpd_queue(const char      *hostname,      /* I - Host to connect to */
       * Send the control file...
       */
 
-      if (lpd_command(fd, "\002%d cfA%03.3d%.15s\n", (int)strlen(control),
+      if (lpd_command(fd, "\002%d cfA%03d%.15s\n", (int)strlen(control),
                       (int)getpid() % 1000, localhost))
       {
        close(fd);
@@ -1096,7 +1096,7 @@ lpd_queue(const char      *hostname,      /* I - Host to connect to */
       * Send the print file...
       */
 
-      if (lpd_command(fd, "\003" CUPS_LLFMT " dfA%03.3d%.15s\n",
+      if (lpd_command(fd, "\003" CUPS_LLFMT " dfA%03d%.15s\n",
                       CUPS_LLCAST filestats.st_size, (int)getpid() % 1000,
                      localhost))
       {
@@ -1179,7 +1179,7 @@ lpd_queue(const char      *hostname,      /* I - Host to connect to */
       * Send control file...
       */
 
-      if (lpd_command(fd, "\002%d cfA%03.3d%.15s\n", (int)strlen(control),
+      if (lpd_command(fd, "\002%d cfA%03d%.15s\n", (int)strlen(control),
                       (int)getpid() % 1000, localhost))
       {
        close(fd);
index 5af0a8eeadd07145f6c5b6eab74ee1d68ad2d890..f7ee2fbbe3c8e080c9e34d6d7f1e7e22e4240a21 100644 (file)
@@ -258,7 +258,7 @@ backendNetworkSideCB(
                         i < packet.object_value.string.num_bytes &&
                             dataptr < (data + sizeof(data) - 3);
                         i ++, dataptr += 2)
-                     sprintf(dataptr, "%02X", packet.object_value.string.bytes[i]);
+                     snprintf(dataptr, sizeof(data) - (size_t)(dataptr - data), "%02X", packet.object_value.string.bytes[i]);
                    datalen += (int)strlen(dataptr);
                    break;
 
index cd684d33f9c87cbf629726b63145f8560726b73f..83f62c165fc909cda94d85a54208acbb914ff5ff 100644 (file)
@@ -68,7 +68,7 @@
 # Canon, Inc. PIXMA iP6000D Printer (https://bugs.launchpad.net/bugs/1160638)
 0x04a9 0x1095 unidir
 
-# Canon, Inc. PIXMA iP4200 Printer (Issue #4155)
+# Canon, Inc. PIXMA iP4200 Printer (Apple #4155)
 0x04a9 0x10a2 unidir
 
 # Canon, Inc. PIXMA iP4300 Printer (https://bugs.launchpad.net/bugs/1032385)
 # Canon, Inc. MP540 Printer, https://bugzilla.redhat.com/967873
 0x04a9 0x1730 unidir
 
-# Canon, Inc. MP550 Printer (Issue #4155)
+# Canon, Inc. MP550 Printer (Apple #4155)
 0x04a9 0x173d unidir
 
-# Canon, Inc. MP560 Printer (Issue #4155)
+# Canon, Inc. MP560 Printer (Apple #4155)
 0x04a9 0x173e unidir
 
+# Canon, Inc. PIXMA G1501 Printer (Apple #5831)
+0x04a9 0x1796 unidir
+
 # Canon, Inc. MF4150 Printer (https://bugs.launchpad.net/bugs/1160638)
 0x04a9 0x26a3 no-reattach
 
 # Samsung ML-2160 Series (https://bugzilla.redhat.com/show_bug.cgi?id=873123)
 0x04e8 0x330f unidir
 
-# All Zebra devices (https://bugs.launchpad.net/bugs/1001028) (Issue #5395)
+# All Zebra devices (https://bugs.launchpad.net/bugs/1001028) (Apple #5395)
 0x0a5f unidir no-reattach
 
 # Canon CP-10
 # Lexmark E238 (<rdar://problem/14493054>)
 0x043d 0x00d7 no-reattach
 
-# Lexmark E238 (Issue #4448)
+# Lexmark E238 (Apple #4448)
 0x043d 0x009a no-reattach
 
-# Canon MX310 (Issue #4482)
+# Canon MX310 (Apple #4482)
 0x04a9 0x1728 unidir
 
-# Canon MX320 (Issue #4482)
+# Canon MX320 (Apple #4482)
 0x04A9 0x1736 unidir
 
-# All Intermec devices (Issue #4553)
+# All Intermec devices (Apple #4553)
 0x067e no-reattach
 
-# HP LaserJet 1015 (Issue #5617)
+# HP LaserJet 1010 (Apple #5789)
+0x03f0 0x0c17 delay-close
+
+# HP LaserJet 1015 (Apple #5617)
 0x03f0 0x0e17 delay-close
 
-# HP LaserJet 1150 (Issue #4549)
+# HP LaserJet 1150 (Apple #4549)
 0x03f0 0x0f17 delay-close
 
-# HP LaserJet 1300 (Issue #4549)
+# HP LaserJet 1300 (Apple #4549)
 0x03f0 0x1017 delay-close
 0x03f0 0x1117 delay-close
 
-# HP LaserJet 1320 (Issue #4549)
+# HP LaserJet 1320 (Apple #4549)
 0x03f0 0x1d17 delay-close
 
 # Canon, Inc. MP530 Printer
 0x04a9 0x1712 unidir
 
-# Xerox WorkCentre 3220 (https://bugs.launchpad.net/bugs/1406203, Issue #4789)
+# Xerox WorkCentre 3220 (https://bugs.launchpad.net/bugs/1406203, Apple #4789)
 0x0924 0x4294 no-reattach
 
-# Lexmark C540n (Issue #4778)
+# Lexmark C540n (Apple #4778)
 0x043d 0x0139 no-reattach
 
-# Kyocera Ecosys P6026cdn (Issue #4900)
+# Kyocera Ecosys P6026cdn (Apple #4900)
 0x0482 0x063f no-reattach
 
-# Kyocera Ecosys P6130cdn (Issue #5102)
+# Kyocera Ecosys P6130cdn (Apple #5102)
 0x0482 0x0677 no-reattach
 
-# Lexmark E260dn (Issue #4994)
+# Lexmark E260dn (Apple #4994)
 0x043d 0x0123 no-reattach
 
-# HP LaserJet 1160 (Issue #5121)
+# HP LaserJet 1160 (Apple #5121)
 0x03f0 0x1e17 delay-close
 
-# Canon, Inc. MP280 series (Issue #5221)
+# Canon, Inc. MP280 series (Apple #5221)
 0x04a9 0x1746 unidir
 
-# Star Micronics printers (Issue #5251)
+# Star Micronics printers (Apple #5251)
 0x0519 unidir
 
-# Lexmark Optra E310 (Issue #5259)
+# Lexmark Optra E310 (Apple #5259)
 0x043d 0x000c no-reattach
 
-# HP LaserJet P1102 (Issue #5310)
+# HP LaserJet P1102 (Apple #5310)
 0x03F0 0x002A no-reattach
 
 # Lexmark MS317dn
 0x043d 0x0226 no-reattach
 
-# Star TSP743 (Issue #5443)
+# Star TSP743 (Apple #5443)
 0x0519 0x0001 delay-close
 
-# Lexmark E120n (Issue #5478)
+# Lexmark E120n (Apple #5478)
 0x043d 0x00cc no-reattach
 
-# All Xerox printers (Issue #5523)
+# Lexmark E120n MT4506-100 (Apple #5766)
+0x043d 0x00cd no-reattach
+
+# All Xerox printers (Apple #5523)
 0x0924 no-reattach
 
-# Dymo 450 Turbo (Issue #5521)
-0x0922 0x0021 unidir
+# Citizen CT-S4000 (Apple #5823)
+0x2730 0x2008 unidir delay-close
+
+# All Arkscan label printers (Apple #5867)
+0x2d84 unidir no-reattach
+
+# HP DesignJet 130 (Apple #5838)
+0x03f0 0x0314 no-reattach
index 66ac884c67e24e83013864cf2625384f569abfb9..084c6f5118a28388c31000c68b6741ba40c38455 100644 (file)
@@ -154,6 +154,8 @@ static const int    UriOID[] = { CUPS_OID_ppmPortServiceNameOrURI, 1, 1, -1 };
 static const int       LexmarkProductOID[] = { 1,3,6,1,4,1,641,2,1,2,1,2,1,-1 };
 static const int       LexmarkProductOID2[] = { 1,3,6,1,4,1,674,10898,100,2,1,2,1,2,1,-1 };
 static const int       LexmarkDeviceIdOID[] = { 1,3,6,1,4,1,641,2,1,2,1,3,1,-1 };
+static const int       HPDeviceIdOID[] = { 1,3,6,1,4,1,11,2,3,9,1,1,7,0,-1 };
+static const int       RicohDeviceIdOID[] = { 1,3,6,1,4,1,367,3,2,1,1,1,11,0,-1 };
 static const int       XeroxProductOID[] = { 1,3,6,1,4,1,128,2,1,3,1,2,0,-1 };
 static cups_array_t    *DeviceURIs = NULL;
 static int             HostNameLookups = 0;
@@ -422,7 +424,7 @@ alarm_handler(int sig)                      /* I - Signal number */
 #endif /* !HAVE_SIGSET && !HAVE_SIGACTION */
 
   if (DebugLevel)
-    write(2, "DEBUG: ALARM!\n", 14);
+    backendMessage("DEBUG: ALARM!\n");
 }
 
 
@@ -969,9 +971,15 @@ read_snmp_response(int fd)         /* I - SNMP socket file descriptor */
        _cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1,
                       packet.community, CUPS_ASN1_GET_REQUEST,
                       DEVICE_ID, LexmarkDeviceIdOID);
+       _cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1,
+                      packet.community, CUPS_ASN1_GET_REQUEST,
+                      DEVICE_ID, RicohDeviceIdOID);
        _cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1,
                       packet.community, CUPS_ASN1_GET_REQUEST,
                       DEVICE_PRODUCT, XeroxProductOID);
+       _cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1,
+                      packet.community, CUPS_ASN1_GET_REQUEST,
+                      DEVICE_ID, HPDeviceIdOID);
         break;
 
     case DEVICE_DESCRIPTION :
index 6dbd0abee691651678b3ca330e9cddec835a3c1f..6412a022b766fbda099b681d9d25150d1ca306f0 100644 (file)
@@ -19,6 +19,7 @@
 #include <fcntl.h>
 #include <sys/wait.h>
 #include <signal.h>
+#include "backend-private.h"
 
 
 /*
@@ -395,7 +396,7 @@ main(int  argc,                             /* I - Number of command-line args */
          data = ps_data;
 
         write(1, data, strlen(data));
-       write(2, "DEBUG: START\n", 13);
+       backendMessage("DEBUG: START\n");
        timeout = 60.0;
         while ((bytes = cupsBackChannelRead(buffer, sizeof(buffer),
                                            timeout)) > 0)
@@ -403,7 +404,7 @@ main(int  argc,                             /* I - Number of command-line args */
          write(2, buffer, (size_t)bytes);
          timeout = 5.0;
        }
-       write(2, "\nDEBUG: END\n", 12);
+       backendMessage("\nDEBUG: END\n");
       }
 
       exit(0);
index 1c412da6f572144d7979329675864501dc1b6a87..f0d04ab42cec8df0aa64caada361ea039fa49b30 100644 (file)
@@ -1,5 +1,7 @@
 /*
- * Copyright 2005-2016 Apple Inc. All rights reserved.
+ * USB backend for macOS.
+ *
+ * Copyright © 2005-2021 Apple Inc. All rights reserved.
  *
  * IMPORTANT:  This Apple software is supplied to you by Apple Computer,
  * Inc. ("Apple") in consideration of your agreement to the following
@@ -288,11 +290,11 @@ static void status_timer_cb(CFRunLoopTimerRef timer, void *info);
 #define IS_64BIT 1
 #define IS_NOT_64BIT 0
 
-#if defined(__i386__) || defined(__x86_64__)
+#if defined(__arm64e__)
 static pid_t   child_pid;              /* Child PID */
-static void run_legacy_backend(int argc, char *argv[], int fd) _CUPS_NORETURN; /* Starts child backend process running as a ppc executable */
-#endif /* __i386__ || __x86_64__ */
-static void sigterm_handler(int sig);  /* SIGTERM handler */
+static void run_legacy_backend(int argc, char *argv[], int fd) _CUPS_NORETURN; /* Starts child backend process running as a x86_64 executable */
+static void sigterm_handler(int sig);    /* SIGTERM handler */
+#endif /* __arm64e__ */
 static void sigquit_handler(int sig, siginfo_t *si, void *unused) _CUPS_NORETURN;
 
 #ifdef PARSE_PS_ERRORS
@@ -357,6 +359,8 @@ print_device(const char *uri,               /* I - Device URI */
 
 
   (void)uri;
+  (void)argc;
+  (void)argv;
 
  /*
   * Catch SIGQUIT to determine who is sending it...
@@ -436,18 +440,18 @@ print_device(const char *uri,             /* I - Device URI */
 
     status = registry_open(&driverBundlePath);
 
-#if defined(__i386__) || defined(__x86_64__)
+#if defined(__arm64e__)
     /*
      * If we were unable to load the class drivers for this printer it's
-     * probably because they're ppc or i386. In this case try to run this
-     * backend as i386 or ppc executables so we can use them...
+     * probably because they're x86_64 (or older). In this case try to run this
+     * backend as x86_64 so we can use them...
      */
     if (status == -2)
     {
       run_legacy_backend(argc, argv, print_fd);
       /* Never returns here */
     }
-#endif /* __i386__ || __x86_64__ */
+#endif /* __arm64e__ */
 
     if (status ==  -2)
     {
@@ -1510,12 +1514,11 @@ static kern_return_t load_printerdriver(CFStringRef *driverBundlePath)
   SInt32               score;
   kern_return_t                kr;
   printer_interface_t  interface;
-  HRESULT              res;
 
   kr = IOCreatePlugInInterfaceForService(g.printer_obj, kIOUSBInterfaceUserClientTypeID, kIOCFPlugInInterfaceID, &iodev, &score);
   if (kr == kIOReturnSuccess)
   {
-    if ((res = (*iodev)->QueryInterface(iodev, USB_INTERFACE_KIND, (LPVOID *) &interface)) == noErr)
+    if ((*iodev)->QueryInterface(iodev, USB_INTERFACE_KIND, (LPVOID *) &interface) == noErr)
     {
       *driverBundlePath = IORegistryEntryCreateCFProperty(g.printer_obj, kUSBClassDriverProperty, NULL, kNilOptions);
 
@@ -1596,7 +1599,7 @@ static CFStringRef copy_printer_interface_deviceid(printer_interface_t printer,
                /* This request takes the 0 based configuration index. IOKit returns a 1 based configuration index */
                configurationIndex -= 1;
 
-               bzero(&request, sizeof(request));
+               memset(&request, 0, sizeof(request));
 
                request.bmRequestType           = USBmakebmRequestType(kUSBIn, kUSBClass, kUSBInterface);
                request.bRequest                        = kUSBPrintClassGetDeviceID;
@@ -1613,14 +1616,14 @@ static CFStringRef copy_printer_interface_deviceid(printer_interface_t printer,
 
                        if (actualLength > 2 && actualLength <= bufferLength - 2)
                        {
-                               ret = CFStringCreateWithBytes(NULL, (const UInt8 *) &request.pData[2], actualLength - 2, kCFStringEncodingUTF8, false);
+                               ret = CFStringCreateWithBytes(NULL, (const UInt8 *)request.pData + 2, actualLength - 2, kCFStringEncodingUTF8, false);
                        }
                        else if (actualLength > 2) {
                                err = sendRequest(actualLength);
                                if (err == kIOReturnSuccess && request.wLenDone > 0)
                                {
                                        actualLength = OSSwapBigToHostInt16(*((UInt16 *)request.pData));
-                                       ret = CFStringCreateWithBytes(NULL, (const UInt8 *) &request.pData[2], actualLength - 2, kCFStringEncodingUTF8, false);
+                                       ret = CFStringCreateWithBytes(NULL, (const UInt8 *)request.pData + 2, actualLength - 2, kCFStringEncodingUTF8, false);
                                }
                        }
                }
@@ -1638,7 +1641,7 @@ static CFStringRef copy_printer_interface_deviceid(printer_interface_t printer,
                IOUSBDevRequestTO               request;
                IOUSBDeviceDescriptor   desc;
 
-               bzero(&request, sizeof(request));
+               memset(&request, 0, sizeof(request));
 
                request.bmRequestType = USBmakebmRequestType( kUSBIn,  kUSBStandard, kUSBDevice );
                request.bRequest = kUSBRqGetDescriptor;
@@ -1667,41 +1670,59 @@ static CFStringRef copy_printer_interface_deviceid(printer_interface_t printer,
                                        CFStringAppendFormat(extras, NULL, CFSTR("MDL:%@;"), model);
                        }
 
-                       if (serial == NULL && desc.iSerialNumber != 0)
+                       if (desc.iSerialNumber != 0)
                        {
-                               serial = copy_printer_interface_indexed_description(printer, desc.iSerialNumber, kUSBLanguageEnglish);
-                               if (serial && CFStringGetLength(serial) > 0)
-                                       CFStringAppendFormat(extras, NULL, CFSTR("SERN:%@;"), serial);
+                               // Always look at the USB serial number since some printers
+                               // incorrectly include a bogus static serial number in their
+                               // IEEE-1284 device ID string...
+                               CFStringRef userial = copy_printer_interface_indexed_description(printer, desc.iSerialNumber, kUSBLanguageEnglish);
+                               if (userial && CFStringGetLength(userial) > 0 && (serial == NULL || CFStringCompare(serial, userial, kCFCompareCaseInsensitive) != kCFCompareEqualTo))
+                               {
+                                       if (serial != NULL)
+                                       {
+                                               // 1284 serial number doesn't match USB serial number, so  replace the existing SERN: in device ID
+                                               CFRange range = CFStringFind(ret, serial, 0);
+                                               CFMutableStringRef deviceIDString = CFStringCreateMutableCopy(NULL, 0, ret);
+                                               CFStringReplace(deviceIDString, range, userial);
+                                               CFRelease(ret);
+                                               ret = deviceIDString;
+
+                                               CFRelease(serial);
+                                       }
+                                       else
+                                       {
+                                               // No 1284 serial number so add SERN: with USB serial number to device ID
+                                               CFStringAppendFormat(extras, NULL, CFSTR("SERN:%@;"), userial);
+                                       }
+                                       serial = userial;
+                               }
+                               else if (userial != NULL)
+                                       CFRelease(userial);
                        }
 
                        if (ret != NULL)
                        {
                                CFStringAppend(extras, ret);
                                CFRelease(ret);
-
-                               ret = extras;
-                       }
-                       else
-                       {
-                               ret = extras;
                        }
+      ret = extras;
                }
        }
 
        if (ret != NULL)
        {
-       /* Remove special characters from the serial number */
-       CFRange range = (serial != NULL ? CFStringFind(serial, CFSTR("+"), 0) : CFRangeMake(0, 0));
-       if (range.length == 1)
-       {
-               range = CFStringFind(ret, serial, 0);
+               /* Remove special characters from the serial number */
+               CFRange range = (serial != NULL ? CFStringFind(serial, CFSTR("+"), 0) : CFRangeMake(0, 0));
+               if (range.length == 1)
+               {
+                       range = CFStringFind(ret, serial, 0);
 
-               CFMutableStringRef deviceIDString = CFStringCreateMutableCopy(NULL, 0, ret);
-               CFRelease(ret);
+                       CFMutableStringRef deviceIDString = CFStringCreateMutableCopy(NULL, 0, ret);
+                       CFRelease(ret);
 
-               ret = deviceIDString;
-               CFStringFindAndReplace(deviceIDString, CFSTR("+"), CFSTR(""), range, 0);
-       }
+                       ret = deviceIDString;
+                       CFStringFindAndReplace(deviceIDString, CFSTR("+"), CFSTR(""), range, 0);
+               }
        }
 
        if (manufacturer != NULL)
@@ -1728,7 +1749,7 @@ static CFStringRef copy_printer_interface_indexed_description(printer_interface_
        UInt8 description[256]; // Max possible descriptor length
        IOUSBDevRequestTO       request;
 
-       bzero(description, 2);
+       memset(description, 0, 2);
 
        request.bmRequestType = USBmakebmRequestType(kUSBIn, kUSBStandard, kUSBDevice);
        request.bRequest = kUSBRqGetDescriptor;
@@ -1742,7 +1763,7 @@ static CFStringRef copy_printer_interface_indexed_description(printer_interface_
        err = (*printer)->ControlRequestTO(printer, 0, &request);
        if (err != kIOReturnSuccess && err != kIOReturnOverrun)
        {
-               bzero(description, request.wLength);
+               memset(description, 0, request.wLength);
 
                // Let's try again full length. Here's why:
                //      On USB 2.0 controllers, we will not get an overrun error.  We just get a "babble" error
@@ -1775,7 +1796,7 @@ static CFStringRef copy_printer_interface_indexed_description(printer_interface_
        request.wValue = (kUSBStringDesc << 8) | index;
        request.wIndex = language;
 
-       bzero(description, length);
+       memset(description, 0, length);
        request.wLength = (UInt16)length;
        request.pData = &description;
        request.completionTimeout = 0;
@@ -1791,7 +1812,7 @@ static CFStringRef copy_printer_interface_indexed_description(printer_interface_
        if ((description[0] & 1) != 0)
                description[0] &= 0xfe;
 
-       char buffer[258] = {};
+       char buffer[258] = {0};
        unsigned int maxLength = sizeof buffer;
        if (description[0] > 1)
        {
@@ -2053,11 +2074,11 @@ static void setup_cfLanguage(void)
 }
 
 #pragma mark -
-#if defined(__i386__) || defined(__x86_64__)
+#if defined(__arm64e__)
 /*!
  * @function   run_legacy_backend
  *
- * @abstract   Starts child backend process running as a ppc or i386 executable.
+ * @abstract   Starts child backend process running as a x86_64 executable.
  *
  * @result     Never returns; always calls exit().
  *
@@ -2076,18 +2097,14 @@ static void run_legacy_backend(int argc,
 
 
  /*
-  * If we're running as x86_64 or i386 and couldn't load the class driver
-  * (because it's ppc or i386), then try to re-exec ourselves in ppc or i386
-  * mode to try again. If we don't have a ppc or i386 architecture we may be
+  * If we're running as ARM and couldn't load the class driver
+  * (because it's x86_64, i386 or ppc), then try to re-exec ourselves in x86_64
+  * mode to try again. If we don't have that architecture we may be
   * running with the same architecture again so guard against this by setting
   * and testing an environment variable...
   */
 
-#  ifdef __x86_64__
-  usb_legacy_status = getenv("USB_I386_STATUS");
-#  else
-  usb_legacy_status = getenv("USB_PPC_STATUS");
-#  endif /* __x86_64__ */
+  usb_legacy_status = getenv("USB_LEGACY_STATUS");
 
   if (!usb_legacy_status)
   {
@@ -2116,21 +2133,13 @@ static void run_legacy_backend(int argc,
     * Set the environment variable...
     */
 
-#  ifdef __x86_64__
-    setenv("USB_I386_STATUS", "1", false);
-#  else
-    setenv("USB_PPC_STATUS", "1", false);
-#  endif /* __x86_64__ */
+    setenv("USB_LEGACY_STATUS", "1", false);
 
    /*
     * Tell the kernel to use the specified CPU architecture...
     */
 
-#  ifdef __x86_64__
-    cpu_type_t cpu = CPU_TYPE_I386;
-#  else
-    cpu_type_t cpu = CPU_TYPE_POWERPC;
-#  endif /* __x86_64__ */
+    cpu_type_t cpu = CPU_TYPE_X86_64;
     size_t ocount = 1;
     posix_spawnattr_t attrs;
 
@@ -2139,11 +2148,7 @@ static void run_legacy_backend(int argc,
       posix_spawnattr_setsigdefault(&attrs, &oldmask);
       if (posix_spawnattr_setbinpref_np(&attrs, 1, &cpu, &ocount) || ocount != 1)
       {
-#  ifdef __x86_64__
-       perror("DEBUG: Unable to set binary preference to i386");
-#  else
-       perror("DEBUG: Unable to set binary preference to ppc");
-#  endif /* __x86_64__ */
+       perror("DEBUG: Unable to set binary preference to X86_64");
        _cupsLangPrintFilter(stderr, "ERROR",
                             _("Unable to use legacy USB class driver."));
        exit(CUPS_BACKEND_STOP);
@@ -2217,8 +2222,6 @@ static void run_legacy_backend(int argc,
 
   exit(exitstatus);
 }
-#endif /* __i386__ || __x86_64__ */
-
 
 /*
  * 'sigterm_handler()' - SIGTERM handler.
@@ -2227,7 +2230,6 @@ static void run_legacy_backend(int argc,
 static void
 sigterm_handler(int sig)               /* I - Signal */
 {
-#if defined(__i386__) || defined(__x86_64__)
  /*
   * If we started a child process pass the signal on to it...
   */
@@ -2249,12 +2251,12 @@ sigterm_handler(int sig)                /* I - Signal */
       _exit(0);
     else
     {
-      write(2, "DEBUG: Child crashed.\n", 22);
+      backendMessage("DEBUG: Child crashed.\n");
       _exit(CUPS_BACKEND_STOP);
     }
   }
-#endif /* __i386__ || __x86_64__ */
 }
+#endif /* __arm64e__ */
 
 
 /*
index 9740c14d563e95ef58631f09a3683224ba14ece1..d7c762392924fcfbd5251d885e13d77d7f4bf6e0 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * LIBUSB interface code for CUPS.
  *
- * Copyright 2007-2019 by Apple Inc.
+ * Copyright 2007-2020 by Apple Inc.
  *
  * Licensed under Apache License v2.0.  See the file "LICENSE" for more
  * information.
@@ -878,7 +878,7 @@ find_device(usb_cb_t   cb,          /* I - Callback function */
           protocol   = 0;
 
          for (altset = 0, altptr = ifaceptr->altsetting;
-              altset < (uint8_t)ifaceptr->num_altsetting;
+              altset < ifaceptr->num_altsetting; // lgtm [cpp/comparison-with-wider-type]
               altset ++, altptr ++)
           {
           /*
index 81e20c524bc66c108addb0aa14cdc9ff128d116d..d256a813ba80e4b4868e891f70102028b98c3740 100644 (file)
@@ -214,21 +214,21 @@ list_devices(void)
     * for USB printer devices.  We get the honor of trying them all...
     */
 
-    sprintf(device, "/dev/usblp%d", i);
+    snprintf(device, sizeof(device), "/dev/usblp%d", i);
 
     if ((fd = open(device, O_RDWR | O_EXCL)) < 0)
     {
       if (errno != ENOENT)
        continue;
 
-      sprintf(device, "/dev/usb/lp%d", i);
+      snprintf(device, sizeof(device), "/dev/usb/lp%d", i);
 
       if ((fd = open(device, O_RDWR | O_EXCL)) < 0)
       {
        if (errno != ENOENT)
          continue;
 
-       sprintf(device, "/dev/usb/usblp%d", i);
+       snprintf(device, sizeof(device), "/dev/usb/usblp%d", i);
 
        if ((fd = open(device, O_RDWR | O_EXCL)) < 0)
          continue;
@@ -258,7 +258,7 @@ list_devices(void)
 
   for (i = 0; i < 8; i ++)
   {
-    sprintf(device, "/dev/usb/printer%d", i);
+    snprintf(device, sizeof(device), "/dev/usb/printer%d", i);
 
     if ((fd = open(device, O_WRONLY | O_EXCL)) >= 0)
     {
@@ -278,11 +278,11 @@ list_devices(void)
 
   for (i = 0; i < 8; i ++)
   {
-    sprintf(device, "/dev/ulpt%d", i);
+    snprintf(device, sizeof(device), "/dev/ulpt%d", i);
     if (!access(device, 0))
       printf("direct usb:%s \"Unknown\" \"USB Printer #%d\"\n", device, i + 1);
 
-    sprintf(device, "/dev/unlpt%d", i);
+    snprintf(device, sizeof(device), "/dev/unlpt%d", i);
     if (!access(device, 0))
       printf("direct usb:%s \"Unknown\" \"USB Printer #%d (no reset)\"\n", device, i + 1);
   }
@@ -344,15 +344,15 @@ open_device(const char *uri,              /* I - Device URI */
        * for USB printer devices.  We get the honor of trying them all...
        */
 
-       sprintf(device, "/dev/usblp%d", i);
+       snprintf(device, sizeof(device), "/dev/usblp%d", i);
 
        if ((fd = open(device, O_RDWR | O_EXCL)) < 0 && errno == ENOENT)
        {
-         sprintf(device, "/dev/usb/lp%d", i);
+         snprintf(device, sizeof(device), "/dev/usb/lp%d", i);
 
          if ((fd = open(device, O_RDWR | O_EXCL)) < 0 && errno == ENOENT)
          {
-           sprintf(device, "/dev/usb/usblp%d", i);
+           snprintf(device, sizeof(device), "/dev/usb/usblp%d", i);
 
            if ((fd = open(device, O_RDWR | O_EXCL)) < 0 && errno == ENOENT)
              continue;
@@ -440,7 +440,7 @@ open_device(const char *uri,                /* I - Device URI */
     {
       for (i = 0, busy = 0; i < 8; i ++)
       {
-       sprintf(device, "/dev/usb/printer%d", i);
+       snprintf(device, sizeof(device), "/dev/usb/printer%d", i);
 
        if ((fd = open(device, O_WRONLY | O_EXCL)) >= 0)
          backendGetDeviceID(fd, device_id, sizeof(device_id),
index 7ab43ea123528fcb4d90cccf1807bc7be3f30fcf..7af10354fc7c2a214215338892fa30f581950c13 100644 (file)
@@ -21,6 +21,7 @@
 static int     compare_strings(const char *, const char *, size_t);
 static void    do_command(http_t *, const char *, const char *);
 static void    show_help(const char *);
+static void    show_prompt(const char *message);
 static void    show_status(http_t *, const char *);
 
 
@@ -59,7 +60,7 @@ main(int  argc,                               /* I - Number of command-line arguments */
     * Do the command prompt thing...
     */
 
-    _cupsLangPuts(stdout, _("lpc> ")); /* TODO: Need no-newline version */
+    show_prompt(_("lpc> "));
     while (fgets(line, sizeof(line), stdin) != NULL)
     {
      /*
@@ -87,7 +88,7 @@ main(int  argc,                               /* I - Number of command-line arguments */
         * Nothing left, just show a prompt...
        */
 
-       _cupsLangPuts(stdout, _("lpc> ")); /* TODO: Need no newline version */
+        show_prompt(_("lpc> "));
        continue;
       }
 
@@ -123,7 +124,7 @@ main(int  argc,                             /* I - Number of command-line arguments */
       * Put another prompt out to the user...
       */
 
-      _cupsLangPuts(stdout, _("lpc> ")); /* TODO: Need no newline version */
+      show_prompt(_("lpc> "));
     }
   }
 
@@ -200,6 +201,30 @@ show_help(const char *command)             /* I - Command to describe or NULL */
 }
 
 
+/*
+ * 'show_prompt()' - Show a localized prompt message.
+ */
+
+static void
+show_prompt(const char *message)       /* I - Message string to use */
+{
+  ssize_t      bytes;                  /* Number of bytes formatted */
+  char         output[8192];           /* Message buffer */
+  cups_lang_t  *lang = cupsLangDefault();
+                                       /* Default language */
+
+ /*
+  * Transcode to the destination charset and write the prompt...
+  */
+
+  if ((bytes = cupsUTF8ToCharset(output, (cups_utf8_t *)_cupsLangString(lang, message), sizeof(output), lang->encoding)) > 0)
+  {
+    fwrite(output, 1, (size_t)bytes, stdout);
+    fflush(stdout);
+  }
+}
+
+
 /*
  * 'show_status()' - Show printers.
  */
index f087809f7cf1e3d6298cf84daed90fb844869f0e..57ae4e869c8ccd0a8c3a485861a3f4835abf8350 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Administration CGI for CUPS.
  *
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2007-2021 by Apple Inc.
  * Copyright © 1997-2007 by Easy Software Products.
  *
  * Licensed under Apache License v2.0.  See the file "LICENSE" for more
@@ -50,7 +50,6 @@ static void   do_set_sharing(http_t *http);
 static char    *get_option_value(ppd_file_t *ppd, const char *name,
                                  char *buffer, size_t bufsize);
 static double  get_points(double number, const char *uval);
-static char    *get_printer_ppd(const char *uri, char *buffer, size_t bufsize);
 
 
 /*
@@ -208,7 +207,7 @@ main(void)
          * bytes left in the array...
          */
 
-         sprintf(ptr, "%%%02X", *url & 255);
+         snprintf(ptr, sizeof(encoded) - (size_t)(ptr - encoded), "%%%02X", *url & 255);
          ptr += 3;
        }
        else
@@ -763,6 +762,13 @@ do_am_printer(http_t *http,                /* I - HTTP connection */
 
         cgiSetVariable("TEMPLATE_NAME", template);
       }
+
+     /*
+      * Set DEVICE_URI to the actual device uri, without make and model from
+      * html form.
+      */
+
+      cgiSetVariable("DEVICE_URI", var);
     }
   }
 
@@ -864,7 +870,7 @@ do_am_printer(http_t *http,         /* I - HTTP connection */
         break;
       else
       {
-        sprintf(baudrate, "%d", baudrates[i]);
+        snprintf(baudrate, sizeof(baudrate), "%d", baudrates[i]);
        cgiSetArray("BAUDRATES", i, baudrate);
       }
 
@@ -1118,9 +1124,7 @@ do_am_printer(http_t *http,               /* I - HTTP connection */
     if (!file)
     {
       var = cgiGetVariable("PPD_NAME");
-      if (!strcmp(var, "everywhere"))
-        get_printer_ppd(cgiGetVariable("DEVICE_URI"), evefile, sizeof(evefile));
-      else if (strcmp(var, "__no_change__"))
+      if (strcmp(var, "__no_change__"))
        ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "ppd-name",
                     NULL, var);
     }
@@ -3728,82 +3732,3 @@ get_points(double     number,            /* I - Original number */
   else                                 /* Points */
     return (number);
 }
-
-
-/*
- * 'get_printer_ppd()' - Get an IPP Everywhere PPD file for the given URI.
- */
-
-static char *                          /* O - Filename or NULL */
-get_printer_ppd(const char *uri,       /* I - Printer URI */
-                char       *buffer,    /* I - Filename buffer */
-               size_t     bufsize)     /* I - Size of filename buffer */
-{
-  http_t       *http;                  /* Connection to printer */
-  ipp_t                *request,               /* Get-Printer-Attributes request */
-               *response;              /* Get-Printer-Attributes response */
-  char         resolved[1024],         /* Resolved URI */
-               scheme[32],             /* URI scheme */
-               userpass[256],          /* Username:password */
-               host[256],              /* Hostname */
-               resource[256];          /* Resource path */
-  int          port;                   /* Port number */
-  static const char * const pattrs[] = /* Printer attributes we need */
-  {
-    "all",
-    "media-col-database"
-  };
-
-
- /*
-  * Connect to the printer...
-  */
-
-  if (strstr(uri, "._tcp"))
-  {
-   /*
-    * Resolve URI...
-    */
-
-    if (!_httpResolveURI(uri, resolved, sizeof(resolved), _HTTP_RESOLVE_DEFAULT, NULL, NULL))
-    {
-      fprintf(stderr, "ERROR: Unable to resolve \"%s\".\n", uri);
-      return (NULL);
-    }
-
-    uri = resolved;
-  }
-
-  if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK)
-  {
-    fprintf(stderr, "ERROR: Bad printer URI \"%s\".\n", uri);
-    return (NULL);
-  }
-
-  http = httpConnect2(host, port, NULL, AF_UNSPEC, !strcmp(scheme, "ipps") ? HTTP_ENCRYPTION_ALWAYS : HTTP_ENCRYPTION_IF_REQUESTED, 1, 30000, NULL);
-  if (!http)
-  {
-    fprintf(stderr, "ERROR: Unable to connect to \"%s:%d\": %s\n", host, port, cupsLastErrorString());
-    return (NULL);
-  }
-
- /*
-  * Send a Get-Printer-Attributes request...
-  */
-
-  request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
-  ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
-  ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes",  (int)(sizeof(pattrs) / sizeof(pattrs[0])), NULL, pattrs);
-  response = cupsDoRequest(http, request, resource);
-
-  if (!_ppdCreateFromIPP(buffer, bufsize, response))
-    fprintf(stderr, "ERROR: Unable to create PPD file: %s\n", strerror(errno));
-
-  ippDelete(response);
-  httpClose(http);
-
-  if (buffer[0])
-    return (buffer);
-  else
-    return (NULL);
-}
index 78ef08e22f1ab2ecbb08c5f81cd1c4da0d5ce415..718604ab2bf9cd2f821a9f8268dd82f49ccccf81 100644 (file)
@@ -362,7 +362,7 @@ show_all_classes(http_t     *http,  /* I - Connection to server */
     if (first < 0)
       first = 0;
 
-    sprintf(val, "%d", count);
+    snprintf(val, sizeof(val), "%d", count);
     cgiSetVariable("TOTAL", val);
 
     for (i = 0, pclass = (ipp_attribute_t *)cupsArrayIndex(classes, first);
@@ -378,13 +378,13 @@ show_all_classes(http_t     *http,        /* I - Connection to server */
 
     if (first > 0)
     {
-      sprintf(val, "%d", first - CUPS_PAGE_MAX);
+      snprintf(val, sizeof(val), "%d", first - CUPS_PAGE_MAX);
       cgiSetVariable("PREV", val);
     }
 
     if ((first + CUPS_PAGE_MAX) < count)
     {
-      sprintf(val, "%d", first + CUPS_PAGE_MAX);
+      snprintf(val, sizeof(val), "%d", first + CUPS_PAGE_MAX);
       cgiSetVariable("NEXT", val);
     }
 
index ce97e47a43e3777f29bc8abdd048b7b59ac79a04..3da1010e6a2985c7520e39381f8cd39bb3c6c9b1 100644 (file)
@@ -579,7 +579,7 @@ helpSearchIndex(help_index_t *hi,   /* I - Index */
   */
 
   for (; node; node = (help_node_t *)cupsArrayNext(hi->nodes))
-    if (section && strcmp(node->section, section))
+    if (node->section && section && strcmp(node->section, section))
       continue;
     else if (filename && strcmp(node->filename, filename))
       continue;
index 8c5a5616dd5232ab5c3f52b5239d96381f5034c0..443f920a5a2826b5c5147d8744a31fa3b2b0f850 100644 (file)
@@ -224,7 +224,7 @@ cgiGetIPPObjects(ipp_t *response,   /* I - IPP response */
                char    buf[255];       /* Number buffer */
 
 
-                sprintf(buf, "%d", attr->values[i].integer);
+                snprintf(buf, sizeof(buf), "%d", attr->values[i].integer);
 
                if (cgiDoSearch(search, buf))
                  add = 1;
@@ -291,7 +291,7 @@ cgiMoveJobs(http_t     *http,               /* I - Connection to server */
       char     temp[255];              /* Temporary string */
 
 
-      sprintf(temp, "%d", job_id);
+      snprintf(temp, sizeof(temp), "%d", job_id);
       cgiSetVariable("JOB_ID", temp);
     }
 
@@ -1441,7 +1441,7 @@ cgiShowJobs(http_t     *http,             /* I - Connection to server */
 
     cgiSetVariable("SECTION", section);
 
-    sprintf(val, "%d", count);
+    snprintf(val, sizeof(val), "%d", count);
     cgiSetVariable("TOTAL", val);
 
     if (which_jobs)
@@ -1469,13 +1469,13 @@ cgiShowJobs(http_t     *http,           /* I - Connection to server */
 
     if (first > 0)
     {
-      sprintf(val, "%d", first - CUPS_PAGE_MAX);
+      snprintf(val, sizeof(val), "%d", first - CUPS_PAGE_MAX);
       cgiSetVariable("PREV", val);
     }
 
     if ((first + CUPS_PAGE_MAX) < count)
     {
-      sprintf(val, "%d", first + CUPS_PAGE_MAX);
+      snprintf(val, sizeof(val), "%d", first + CUPS_PAGE_MAX);
       cgiSetVariable("NEXT", val);
     }
 
index bbc153e3b74a35ecc414e5f399db5ddf634af200..2a33b6832d6d2f124b07e91c57f134a19530e500 100644 (file)
@@ -379,7 +379,7 @@ show_all_printers(http_t     *http, /* I - Connection to server */
     if (first < 0)
       first = 0;
 
-    sprintf(val, "%d", count);
+    snprintf(val, sizeof(val), "%d", count);
     cgiSetVariable("TOTAL", val);
 
     for (i = 0, printer = (ipp_attribute_t *)cupsArrayIndex(printers, first);
@@ -395,13 +395,13 @@ show_all_printers(http_t     *http,       /* I - Connection to server */
 
     if (first > 0)
     {
-      sprintf(val, "%d", first - CUPS_PAGE_MAX);
+      snprintf(val, sizeof(val), "%d", first - CUPS_PAGE_MAX);
       cgiSetVariable("PREV", val);
     }
 
     if ((first + CUPS_PAGE_MAX) < count)
     {
-      sprintf(val, "%d", first + CUPS_PAGE_MAX);
+      snprintf(val, sizeof(val), "%d", first + CUPS_PAGE_MAX);
       cgiSetVariable("NEXT", val);
     }
 
index 1972b4ae2ca2252b03135ae5a6a523fdfe02bfb7..3300a8852e01f8706001f0c12758c9a6f0b6e958 100644 (file)
@@ -33,7 +33,6 @@ cgiCopyTemplateFile(FILE       *out,  /* I - Output file */
 {
   FILE *in;                            /* Input file */
 
-
   fprintf(stderr, "DEBUG2: cgiCopyTemplateFile(out=%p, tmpl=\"%s\")\n", out,
           tmpl ? tmpl : "(null)");
 
@@ -51,7 +50,7 @@ cgiCopyTemplateFile(FILE       *out,  /* I - Output file */
   if ((in = fopen(tmpl, "r")) == NULL)
   {
     fprintf(stderr, "ERROR: Unable to open template file \"%s\" - %s\n",
-            tmpl ? tmpl : "(null)", strerror(errno));
+            tmpl, strerror(errno));
     return;
   }
 
@@ -91,8 +90,6 @@ cgiCopyTemplateLang(const char *tmpl) /* I - Base filename */
   * Convert the language to a locale name...
   */
 
-  locale[0] = '\0';
-
   if ((lang = getenv("LANG")) != NULL)
   {
     locale[0] = '/';
@@ -101,6 +98,10 @@ cgiCopyTemplateLang(const char *tmpl)       /* I - Base filename */
     if ((locptr = strchr(locale, '.')) != NULL)
       *locptr = '\0';                  /* Strip charset */
   }
+  else
+  {
+    locale[0] = '\0';
+  }
 
   fprintf(stderr, "DEBUG2: lang=\"%s\", locale=\"%s\"...\n",
           lang ? lang : "(null)", locale);
@@ -307,9 +308,9 @@ cgi_copy(FILE *out,                 /* I - Output file */
        */
 
         if (name[1])
-          sprintf(outval, "%d", cgiGetSize(name + 1));
+          snprintf(outval, sizeof(outval), "%d", cgiGetSize(name + 1));
        else
-         sprintf(outval, "%d", element + 1);
+         snprintf(outval, sizeof(outval), "%d", element + 1);
 
         outptr = outval;
       }
@@ -457,7 +458,7 @@ cgi_copy(FILE *out,                 /* I - Output file */
            continue;
          else if (ch == '#')
          {
-           sprintf(s, "%d", element + 1);
+           snprintf(s, sizeof(compare) - (size_t)(s - compare), "%d", element + 1);
            s += strlen(s);
          }
          else if (ch == '{')
@@ -473,7 +474,7 @@ cgi_copy(FILE *out,                 /* I - Output file */
            *innerptr = '\0';
 
             if (innername[0] == '#')
-             sprintf(s, "%d", cgiGetSize(innername + 1));
+             snprintf(s, sizeof(compare) - (size_t)(s - compare), "%d", cgiGetSize(innername + 1));
            else if ((innerptr = strrchr(innername, '-')) != NULL &&
                     isdigit(innerptr[1] & 255))
             {
index c5fde01240d1e9e4cb14c8511db60f7d8e094869..c7289c7217db444d4771acccf929db54b6a25bb2 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * CGI form variable and array functions for CUPS.
  *
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2007-2020 by Apple Inc.
  * Copyright © 1997-2005 by Easy Software Products.
  *
  * Licensed under Apache License v2.0.  See the file "LICENSE" for more
@@ -304,7 +304,7 @@ cgiInitialize(void)
     if (boundary)
       boundary += 9;
 
-    if (content_type && !strncmp(content_type, "multipart/form-data; ", 21))
+    if (!strncmp(content_type, "multipart/form-data; ", 21))
     {
       if (!cgi_initialize_multipart(boundary))
         return (0);
@@ -983,7 +983,7 @@ cgi_initialize_post(void)
   */
 
   length = (size_t)strtol(content_length, NULL, 10);
-  data   = malloc(length + 1); /* lgtm [cpp/uncontrolled-allocation-size] */
+  data   = malloc(length + 1);         // lgtm [cpp/uncontrolled-allocation-size]
 
   if (data == NULL)
     return (0);
diff --git a/conf/cgi.types b/conf/cgi.types
new file mode 100644 (file)
index 0000000..2c39b3f
--- /dev/null
@@ -0,0 +1 @@
+application/x-httpd-cgi cgi php
index 63ea1f47010fa67764eb1d7b1fdb186ce59cc0d1..604faf1b9f0484a9c7602ad0110f412101e65e2b 100644 (file)
@@ -1,7 +1,7 @@
 dnl
 dnl Compiler stuff for CUPS.
 dnl
-dnl Copyright 2007-2018 by Apple Inc.
+dnl Copyright 2007-2020 by Apple Inc.
 dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
 dnl
 dnl Licensed under Apache License v2.0.  See the file "LICENSE" for more information.
@@ -169,22 +169,20 @@ if test -n "$GCC"; then
        fi
 
        # Add useful warning options for tracking down problems...
-       WARNING_OPTIONS="-Wall -Wno-format-y2k -Wunused -Wno-unused-result -Wsign-conversion"
+       WARNING_OPTIONS="-Wall -Wno-format-y2k -Wunused -Wno-unused-result -Wsign-conversion  -Wno-unused-but-set-variable  -Wno-unused-variable"
 
        # Test GCC version for certain warning flags since -Werror
        # doesn't trigger...
        gccversion=`$CC --version | head -1 | awk '{print $NF}'`
        case "$gccversion" in
-               1.* | 2.* | 3.* | 4.* | 5.* | 6.* | \(clang-*)
-                       ;;
-               *)
-                       WARNING_OPTIONS="$WARNING_OPTIONS -Wno-format-truncation -Wno-format-overflow -Wno-tautological-compare"
+        7.* | 8.* | 9.*)
+                       WARNING_OPTIONS="$WARNING_OPTIONS -Wno-format-truncation -Wno-tautological-compare"
                        ;;
        esac
 
        # Additional warning options for development testing...
        if test -d .git; then
-               WARNING_OPTIONS="-Werror -Wno-error=deprecated-declarations $WARNING_OPTIONS"
+               WARNING_OPTIONS="-Werror -Wno-error=deprecated-declarations -Wno-unknown-warning-option $WARNING_OPTIONS"
        fi
 else
        # Add vendor-specific compiler options...
index 004ecee995c338b96fbc5b5ee92c73777ef0ae1d..642b3058dce74b3549c80490a84ca1b85f737842 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for CUPS 2.3.1.
+# Generated by GNU Autoconf 2.69 for CUPS 2.3.6.
 #
 # Report bugs to <https://github.com/apple/cups/issues>.
 #
@@ -580,8 +580,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='CUPS'
 PACKAGE_TARNAME='cups'
-PACKAGE_VERSION='2.3.1'
-PACKAGE_STRING='CUPS 2.3.1'
+PACKAGE_VERSION='2.3.6'
+PACKAGE_STRING='CUPS 2.3.6'
 PACKAGE_BUGREPORT='https://github.com/apple/cups/issues'
 PACKAGE_URL='https://www.cups.org/'
 
@@ -1467,7 +1467,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures CUPS 2.3.1 to adapt to many kinds of systems.
+\`configure' configures CUPS 2.3.6 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1532,7 +1532,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of CUPS 2.3.1:";;
+     short | recursive ) echo "Configuration of CUPS 2.3.6:";;
    esac
   cat <<\_ACEOF
 
@@ -1713,7 +1713,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-CUPS configure 2.3.1
+CUPS configure 2.3.6
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2177,7 +2177,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by CUPS $as_me 2.3.1, which was
+It was created by CUPS $as_me 2.3.6, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2694,7 +2694,7 @@ done
 ac_config_headers="$ac_config_headers config.h"
 
 
-CUPS_VERSION="2.3.1"
+CUPS_VERSION="2.3.6"
 CUPS_REVISION=""
 CUPS_BUILD="cups-$CUPS_VERSION"
 
@@ -6905,22 +6905,20 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
        fi
 
        # Add useful warning options for tracking down problems...
-       WARNING_OPTIONS="-Wall -Wno-format-y2k -Wunused -Wno-unused-result -Wsign-conversion"
+       WARNING_OPTIONS="-Wall -Wno-format-y2k -Wunused -Wno-unused-result -Wsign-conversion  -Wno-unused-but-set-variable  -Wno-unused-variable"
 
        # Test GCC version for certain warning flags since -Werror
        # doesn't trigger...
        gccversion=`$CC --version | head -1 | awk '{print $NF}'`
        case "$gccversion" in
-               1.* | 2.* | 3.* | 4.* | 5.* | 6.* | \(clang-*)
-                       ;;
-               *)
+               7.* | 8.* | 9.*)
                        WARNING_OPTIONS="$WARNING_OPTIONS -Wno-format-truncation -Wno-format-overflow -Wno-tautological-compare"
                        ;;
        esac
 
        # Additional warning options for development testing...
        if test -d .git; then
-               WARNING_OPTIONS="-Werror -Wno-error=deprecated-declarations $WARNING_OPTIONS"
+               WARNING_OPTIONS="-Werror -Wno-error=deprecated-declarations -Wno-unknown-warning-option $WARNING_OPTIONS"
        fi
 else
        # Add vendor-specific compiler options...
@@ -10387,7 +10385,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by CUPS $as_me 2.3.1, which was
+This file was extended by CUPS $as_me 2.3.6, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -10450,7 +10448,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-CUPS config.status 2.3.1
+CUPS config.status 2.3.6
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
index 23abe870e948f7968931e24e7cbe97c6c9e546fd..f8767969d1f9ae99be801eeb9f1466593a48c3cd 100644 (file)
@@ -1,7 +1,7 @@
 dnl
 dnl Configuration script for CUPS.
 dnl
-dnl Copyright © 2007-2019 by Apple Inc.
+dnl Copyright © 2007-2021 by Apple Inc.
 dnl Copyright © 1997-2007 by Easy Software Products, all rights reserved.
 dnl
 dnl Licensed under Apache License v2.0.  See the file "LICENSE" for more
@@ -12,7 +12,7 @@ dnl We need at least autoconf 2.60...
 AC_PREREQ(2.60)
 
 dnl Package name and version...
-AC_INIT([CUPS], [2.3.1], [https://github.com/apple/cups/issues], [cups], [https://www.cups.org/])
+AC_INIT([CUPS], [2.3.6], [https://github.com/apple/cups/issues], [cups], [https://www.cups.org/])
 
 sinclude(config-scripts/cups-opsys.m4)
 sinclude(config-scripts/cups-common.m4)
index db45bbba68bd427bed9fa933dacd54c801ec9d48..bff6d218f5c71574dd53cbcce088c4172755ceb3 100644 (file)
@@ -90,6 +90,7 @@ static void   cups_gss_printf(OM_uint32 major_status, OM_uint32 minor_status,
 #    define    cups_gss_printf(major, minor, message)
 #  endif /* DEBUG */
 #endif /* HAVE_GSSAPI */
+static int     cups_is_local_connection(http_t *http);
 static int     cups_local_auth(http_t *http);
 
 
@@ -174,10 +175,10 @@ cupsDoAuthentication(
     DEBUG_printf(("2cupsDoAuthentication: Trying scheme \"%s\"...", scheme));
 
 #ifdef HAVE_GSSAPI
-    if (!_cups_strcasecmp(scheme, "Negotiate"))
+    if (!_cups_strcasecmp(scheme, "Negotiate") && !cups_is_local_connection(http))
     {
      /*
-      * Kerberos authentication...
+      * Kerberos authentication to remote server...
       */
 
       int gss_status;                  /* Auth status */
@@ -201,7 +202,9 @@ cupsDoAuthentication(
     }
     else
 #endif /* HAVE_GSSAPI */
-    if (_cups_strcasecmp(scheme, "Basic") && _cups_strcasecmp(scheme, "Digest"))
+    if (_cups_strcasecmp(scheme, "Basic") &&
+       _cups_strcasecmp(scheme, "Digest") &&
+       _cups_strcasecmp(scheme, "Negotiate"))
     {
      /*
       * Other schemes not yet supported...
@@ -215,7 +218,7 @@ cupsDoAuthentication(
     * See if we should retry the current username:password...
     */
 
-    if ((http->digest_tries > 1 || !http->userpass[0]) && (!_cups_strcasecmp(scheme, "Basic") || (!_cups_strcasecmp(scheme, "Digest"))))
+    if (http->digest_tries > 1 || !http->userpass[0])
     {
      /*
       * Nope - get a new password from the user...
@@ -295,7 +298,7 @@ cupsDoAuthentication(
     }
   }
 
-  if (http->authstring)
+  if (http->authstring && http->authstring[0])
   {
     DEBUG_printf(("1cupsDoAuthentication: authstring=\"%s\".", http->authstring));
 
@@ -327,10 +330,6 @@ _cupsSetNegotiateAuthString(
   gss_buffer_desc output_token = GSS_C_EMPTY_BUFFER;
                                        /* Output token */
 
-
-  (void)method;
-  (void)resource;
-
 #  ifdef __APPLE__
  /*
   * If the weak-linked GSSAPI/Kerberos library is not present, don't try
@@ -447,6 +446,9 @@ _cupsSetNegotiateAuthString(
       }
     }
   }
+#  else
+  (void)method;
+  (void)resource;
 #  endif /* HAVE_GSS_ACQUIRED_CRED_EX_F */
 
   if (major_status == GSS_S_NO_CRED)
@@ -559,9 +561,9 @@ cups_auth_find(const char *www_authenticate,        /* I - Pointer into WWW-Authenticat
         * Skip quoted value...
         */
 
-        www_authenticate ++;
-        while (*www_authenticate && *www_authenticate != '\"')
+        do
           www_authenticate ++;
+        while (*www_authenticate && *www_authenticate != '\"');
 
         DEBUG_printf(("9cups_auth_find: After quoted: \"%s\"", www_authenticate));
       }
@@ -916,6 +918,14 @@ cups_gss_printf(OM_uint32  major_status,/* I - Major status code */
 #  endif /* DEBUG */
 #endif /* HAVE_GSSAPI */
 
+static int                             /* O - 0 if not a local connection */
+                                       /*     1  if local connection */
+cups_is_local_connection(http_t *http) /* I - HTTP connection to server */
+{
+  if (!httpAddrLocalhost(http->hostaddr) && _cups_strcasecmp(http->hostname, "localhost") != 0)
+    return 0;
+  return 1;
+}
 
 /*
  * 'cups_local_auth()' - Get the local authorization certificate if
@@ -958,7 +968,7 @@ cups_local_auth(http_t *http)               /* I - HTTP connection to server */
   * See if we are accessing localhost...
   */
 
-  if (!httpAddrLocalhost(http->hostaddr) && _cups_strcasecmp(http->hostname, "localhost") != 0)
+  if (!cups_is_local_connection(http))
   {
     DEBUG_puts("8cups_local_auth: Not a local connection!");
     return (1);
@@ -1032,11 +1042,6 @@ cups_local_auth(http_t *http)            /* I - HTTP connection to server */
   }
 #  endif /* HAVE_AUTHORIZATION_H */
 
-#  ifdef HAVE_GSSAPI
-  if (cups_auth_find(www_auth, "Negotiate"))
-    return (1);
-#  endif /* HAVE_GSSAPI */
-
 #  if defined(SO_PEERCRED) && defined(AF_LOCAL)
  /*
   * See if we can authenticate using the peer credentials provided over a
index 77a66c17b15b88484ded9efe0bbb4f0a67486168..bdf9f7a18621e72a44482a6d84b4f52afe49d673 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * API definitions for CUPS.
  *
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2007-2022 by Apple Inc.
  * Copyright © 1997-2007 by Easy Software Products.
  *
  * Licensed under Apache License v2.0.  See the file "LICENSE" for more
@@ -42,10 +42,10 @@ extern "C" {
  * Constants...
  */
 
-#  define CUPS_VERSION                 2.0301
+#  define CUPS_VERSION                 2.0306
 #  define CUPS_VERSION_MAJOR           2
 #  define CUPS_VERSION_MINOR           3
-#  define CUPS_VERSION_PATCH           1
+#  define CUPS_VERSION_PATCH           6
 
 #  define CUPS_BC_FD                   3
                                        /* Back-channel file descriptor for
index d4d6d7c55d6f21a0ffede74a04ce8d75202b46d4..7e03c3d6561a1c595a5bad9ddd5447754d094a91 100644 (file)
@@ -1,8 +1,8 @@
 ---
 title: CUPS Programming Manual
 author: Michael R Sweet
-copyright: Copyright © 2007-2019 by Apple Inc. All Rights Reserved.
-version: 2.3.1
+copyright: Copyright © 2007-2022 by Apple Inc. All Rights Reserved.
+version: 2.3.6
 ...
 
 > Please [file issues on Github](https://github.com/apple/cups/issues) to
index cde987a0951f2f9a27e8d2e973aca34ee6f903fd..984c6bddfa8adfe72b27e68ba6889b1c151971c4 100644 (file)
@@ -271,7 +271,11 @@ cupsAddDest(const char  *name,             /* I  - Destination name */
   if (!cupsGetDest(name, instance, num_dests, *dests))
   {
     if (instance && !cupsGetDest(name, NULL, num_dests, *dests))
-      return (num_dests);
+    {
+      // Add destination first...
+      if ((dest = cups_add_dest(name, NULL, &num_dests, dests)) == NULL)
+        return (num_dests);
+    }
 
     if ((dest = cups_add_dest(name, instance, &num_dests, dests)) == NULL)
       return (num_dests);
@@ -1839,7 +1843,10 @@ cupsGetNamedDest(http_t     *http,       /* I - Connection to server or @code CUPS_HTT
       cupsEnumDests(0, 1000, NULL, 0, 0, (cups_dest_cb_t)cups_name_cb, &data);
 
       if (!data.dest)
+      {
+        _cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, _("The printer or class does not exist."), 1);
         return (NULL);
+      }
 
       dest = data.dest;
     }
@@ -3376,7 +3383,7 @@ cups_enum_dests(
   cups_dest_cb_t cb,                    /* I - Callback function */
   void           *user_data)            /* I - User data */
 {
-  int           i, j,                  /* Looping vars */
+  int           i, j, k,               /* Looping vars */
                 num_dests;              /* Number of destinations */
   cups_dest_t   *dests = NULL,          /* Destinations */
                 *dest;                 /* Current destination */
@@ -3521,17 +3528,31 @@ cups_enum_dests(
       const char       *device_uri;    /* Device URI */
 #endif /* HAVE_DNSSD || HAVE_AVAHI */
 
-      if ((user_dest = cupsGetDest(dest->name, dest->instance, data.num_dests, data.dests)) != NULL)
+      if ((user_dest = cupsGetDest(dest->name, NULL, data.num_dests, data.dests)) != NULL)
       {
        /*
-        * Apply user defaults to this destination...
+        * Apply user defaults to this destination for all instances...
         */
 
-        for (j = user_dest->num_options, option = user_dest->options; j > 0; j --, option ++)
-          dest->num_options = cupsAddOption(option->name, option->value, dest->num_options, &dest->options);
-      }
+        for (j = user_dest - data.dests; j < data.num_dests; j ++, user_dest ++)
+        {
+          if (_cups_strcasecmp(user_dest->name, dest->name))
+          {
+            j = data.num_dests;
+            break;
+          }
 
-      if (!(*cb)(user_data, i > 1 ? CUPS_DEST_FLAGS_MORE : CUPS_DEST_FLAGS_NONE, dest))
+         for (k = dest->num_options, option = dest->options; k > 0; k --, option ++)
+           user_dest->num_options = cupsAddOption(option->name, option->value, user_dest->num_options, &user_dest->options);
+
+          if (!(*cb)(user_data, i > 1 ? CUPS_DEST_FLAGS_MORE : CUPS_DEST_FLAGS_NONE, user_dest))
+            break;
+        }
+
+        if (j < data.num_dests)
+          break;
+      }
+      else if (!(*cb)(user_data, i > 1 ? CUPS_DEST_FLAGS_MORE : CUPS_DEST_FLAGS_NONE, dest))
         break;
 
 #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
@@ -3794,25 +3815,45 @@ cups_enum_dests(
          if ((user_dest = cupsGetDest(dest->name, dest->instance, data.num_dests, data.dests)) != NULL)
          {
           /*
-           * Apply user defaults to this destination...
+           * Apply user defaults to this destination for all instances...
            */
 
-           for (j = user_dest->num_options, option = user_dest->options; j > 0; j --, option ++)
-             dest->num_options = cupsAddOption(option->name, option->value, dest->num_options, &dest->options);
-         }
+           for (j = user_dest - data.dests; j < data.num_dests; j ++, user_dest ++)
+           {
+             if (_cups_strcasecmp(user_dest->name, dest->name))
+             {
+               j = data.num_dests;
+               break;
+             }
 
-          if (!strcasecmp(dest->name, data.def_name) && !data.def_instance)
-         {
-           DEBUG_printf(("1cups_enum_dests: Setting is_default on discovered \"%s\".", dest->name));
-            dest->is_default = 1;
+             for (k = dest->num_options, option = dest->options; k > 0; k --, option ++)
+               user_dest->num_options = cupsAddOption(option->name, option->value, user_dest->num_options, &user_dest->options);
+
+             if (!(*cb)(user_data, CUPS_DEST_FLAGS_NONE, user_dest))
+               break;
+           }
+
+           if (j < data.num_dests)
+           {
+             remaining = -1;
+             break;
+           }
          }
+         else
+         {
+           if (!strcasecmp(dest->name, data.def_name) && !data.def_instance)
+           {
+             DEBUG_printf(("1cups_enum_dests: Setting is_default on discovered \"%s\".", dest->name));
+             dest->is_default = 1;
+           }
 
-          DEBUG_printf(("1cups_enum_dests: Add callback for \"%s\".", device->dest.name));
-          if (!(*cb)(user_data, CUPS_DEST_FLAGS_NONE, dest))
-          {
-            remaining = -1;
-            break;
-          }
+           DEBUG_printf(("1cups_enum_dests: Add callback for \"%s\".", device->dest.name));
+           if (!(*cb)(user_data, CUPS_DEST_FLAGS_NONE, dest))
+           {
+             remaining = -1;
+             break;
+           }
+         }
         }
 
         device->state = _CUPS_DNSSD_ACTIVE;
@@ -4183,7 +4224,7 @@ cups_get_dests(
        * Out of memory!
        */
 
-        DEBUG_puts("9cups_get_dests: Out of memory!");
+        DEBUG_puts("9cups_get_dests: Could not find destination after adding, must be out of memory.");
         break;
       }
     }
@@ -4366,5 +4407,13 @@ cups_queue_name(
       *nameptr++ = '_';
   }
 
+ /*
+  * Remove an underscore if it is the last character and isn't the only
+  * character in the name...
+  */
+
+  if (nameptr > (name + 1) && nameptr[-1] == '_')
+    nameptr --;
+
   *nameptr = '\0';
 }
index de2186f5faf0589cd941b87ef38df75662737092..a3554064094845fa9f48304eb6372e4edf1440ed 100644 (file)
@@ -246,20 +246,14 @@ cupsGetDevices(
   httpBlocking(http, blocking);
   httpFlush(http);
 
-  if (status == HTTP_STATUS_ERROR)
-    _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(http->error), 0);
-  else
-  {
-    attr = ippFindAttribute(response, "status-message", IPP_TAG_TEXT);
+  attr = ippFindAttribute(response, "status-message", IPP_TAG_TEXT);
 
-    DEBUG_printf(("cupsGetDevices: status-code=%s, status-message=\"%s\"",
-                 ippErrorString(response->request.status.status_code),
-                 attr ? attr->values[0].string.text : ""));
+  DEBUG_printf(("cupsGetDevices: status-code=%s, status-message=\"%s\"",
+                ippErrorString(response->request.status.status_code),
+                attr ? attr->values[0].string.text : ""));
 
-    _cupsSetError(response->request.status.status_code,
-                 attr ? attr->values[0].string.text :
-                     ippErrorString(response->request.status.status_code), 0);
-  }
+  _cupsSetError(response->request.status.status_code,
+                attr ? attr->values[0].string.text : ippErrorString(response->request.status.status_code), 0);
 
   ippDelete(response);
 
index 35e98be77f816461a09c79f6299d20e4109394da..4e20f73d93fdd5f5c208526605c8da8a77a1a287 100644 (file)
@@ -25,6 +25,7 @@
 #    include <unistd.h>
 #    include <fcntl.h>
 #    include <sys/socket.h>
+#    include <netinet/in.h>
 #    define CUPS_SOCAST
 #  endif /* _WIN32 */
 
index 4fbb443db10cbf2180bb2af6266ed00a177d9a89..c153c665591dff31a6bc7e5ab8614a4f90ae5715 100644 (file)
@@ -199,7 +199,7 @@ cupsHashData(const char    *algorithm,      /* I - Algorithm name */
       goto too_small;
 
     _cupsMD5Init(&state);
-    _cupsMD5Append(&state, data, datalen);
+    _cupsMD5Append(&state, data, (int)datalen);
     _cupsMD5Finish(&state, hash);
 
     return (16);
index 86749c84856ad7f56a86e601e1522c3ef10e8614..8e81c6f7db043ee3c9f7951893492b2d2eab2106 100644 (file)
@@ -243,7 +243,7 @@ httpAddrListen(http_addr_t *addr,   /* I - Address to bind to */
   * Listen...
   */
 
-  if (listen(fd, 5))
+  if (listen(fd, 128))
   {
     _cupsSetHTTPError(HTTP_STATUS_ERROR);
 
index 485c6f43da2012f67d09b35440fdf8d11a44c419..89b3d92fb6fc2bb1f57c552a875f494be76f8e02 100644 (file)
@@ -238,7 +238,14 @@ httpAddrConnect2(
     }
 
     if (!addrlist && nfds == 0)
+    {
+#ifdef _WIN32
+      errno = WSAEHOSTDOWN;
+#else
+      errno = EHOSTDOWN;
+#endif // _WIN32
       break;
+    }
 
    /*
     * See if we can connect to any of the addresses so far...
@@ -369,6 +376,9 @@ httpAddrConnect2(
       remaining -= 250;
   }
 
+  if (remaining <= 0)
+    errno = ETIMEDOUT;
+
   while (nfds > 0)
   {
     nfds --;
index 63175145ee97acae89909529282e97032c5a96c3..49557300eea7933835aee533429a563c16da4680 100644 (file)
@@ -840,6 +840,13 @@ httpGetDateTime(const char *s)             /* I - Date/time string */
   DEBUG_printf(("4httpGetDateTime: day=%d, mon=\"%s\", year=%d, hour=%d, "
                 "min=%d, sec=%d", day, mon, year, hour, min, sec));
 
+ /*
+  * Check for invalid year (RFC 7231 says it's 4DIGIT)
+  */
+
+  if (year > 9999)
+    return (0);
+
  /*
   * Convert the month name to a number from 0 to 11.
   */
index 8d69ce31f83f511517ef2d1452a72248013c2292..43ace18f4428f7313809e644dead8b4af81a677a 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * HTTP routines for CUPS.
  *
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2007-2021 by Apple Inc.
  * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
  *
  * This file contains Kerberos support code, copyright 2006 by
@@ -2421,6 +2421,7 @@ httpReconnect2(http_t *http,              /* I - HTTP connection */
     if (_httpTLSStart(http) != 0)
     {
       httpAddrClose(NULL, http->fd);
+      http->fd = -1;
 
       return (-1);
     }
@@ -2786,6 +2787,7 @@ _httpUpdate(http_t        *http,  /* I - HTTP connection */
       if (_httpTLSStart(http) != 0)
       {
         httpAddrClose(NULL, http->fd);
+        http->fd = -1;
 
        *status = http->status = HTTP_STATUS_ERROR;
        return (0);
index 01a0321dfa068a3396f479f1039e8bc83b949f74..45761a7ca599e8af6a50540984dfc38408b7e6a0 100644 (file)
@@ -346,7 +346,7 @@ typedef enum http_trust_e           /**** Level of trust for credentials @since CUPS 2.0/
   HTTP_TRUST_CHANGED,                  /* Credentials have changed */
   HTTP_TRUST_EXPIRED,                  /* Credentials are expired */
   HTTP_TRUST_RENEWED,                  /* Credentials have been renewed */
-  HTTP_TRUST_UNKNOWN,                  /* Credentials are unknown/new */
+  HTTP_TRUST_UNKNOWN                   /* Credentials are unknown/new */
 } http_trust_t;
 
 typedef enum http_uri_status_e         /**** URI separation status @since CUPS 1.2@ ****/
index 5db5932a4e086cdfa6bafe142340dff0c6906d31..5483a607df600c4752114e6745d978dc8086449d 100644 (file)
@@ -303,10 +303,7 @@ _ippFileReadToken(_ipp_file_t *f,  /* I - File to read from */
       * Start of quoted text or regular expression...
       */
 
-      if (ch == '<')
-        quote = '>';
-      else
-        quote = ch;
+      quote = ch;
 
       DEBUG_printf(("1_ippFileReadToken: Start of quoted string, quote=%c, pos=%ld", quote, (long)cupsFileTell(f->fp)));
     }
@@ -571,12 +568,10 @@ parse_value(_ipp_file_t      *f,  /* I  - IPP data file */
   {
     case IPP_TAG_BOOLEAN :
         return (ippSetBoolean(ipp, attr, element, !_cups_strcasecmp(value, "true")));
-        break;
 
     case IPP_TAG_ENUM :
     case IPP_TAG_INTEGER :
         return (ippSetInteger(ipp, attr, element, (int)strtol(value, NULL, 0)));
-        break;
 
     case IPP_TAG_DATE :
         {
@@ -690,7 +685,6 @@ parse_value(_ipp_file_t      *f,    /* I  - IPP data file */
 
           return (ippSetDate(ipp, attr, element, date));
         }
-        break;
 
     case IPP_TAG_RESOLUTION :
        {
@@ -718,7 +712,6 @@ parse_value(_ipp_file_t      *f,    /* I  - IPP data file */
          else
            return (ippSetResolution(ipp, attr, element, (ipp_res_t)0, xres, yres));
        }
-       break;
 
     case IPP_TAG_RANGE :
        {
@@ -733,7 +726,6 @@ parse_value(_ipp_file_t      *f,    /* I  - IPP data file */
 
          return (ippSetRange(ipp, attr, element, lower, upper));
        }
-       break;
 
     case IPP_TAG_STRING :
         valuelen = strlen(value);
@@ -774,7 +766,6 @@ parse_value(_ipp_file_t      *f,    /* I  - IPP data file */
         }
         else
           return (ippSetOctetString(ipp, attr, element, value, (int)valuelen));
-        break;
 
     case IPP_TAG_TEXTLANG :
     case IPP_TAG_NAMELANG :
@@ -787,7 +778,6 @@ parse_value(_ipp_file_t      *f,    /* I  - IPP data file */
     case IPP_TAG_LANGUAGE :
     case IPP_TAG_MIMETYPE :
         return (ippSetString(ipp, attr, element, value));
-        break;
 
     case IPP_TAG_BEGIN_COLLECTION :
         {
@@ -808,14 +798,11 @@ parse_value(_ipp_file_t      *f,  /* I  - IPP data file */
 
          return (status);
        }
-       break;
 
     default :
         report_error(f, v, user_data, "Unsupported value on line %d of \"%s\".", f->linenum, f->filename);
         return (0);
   }
-
-  return (1);
 }
 
 
index 192f5b6b8b7f86b82d42a79682ed78b76ef8e28f..d9e900649aa86ea2dfb05e16924c3422a938d868 100644 (file)
@@ -2093,7 +2093,7 @@ ippEnumString(const char *attrname,       /* I - Attribute name */
   {
     if (enumvalue >= 3 && enumvalue < (3 + (int)(sizeof(ipp_finishings) / sizeof(ipp_finishings[0]))))
       return (ipp_finishings[enumvalue - 3]);
-    else if (enumvalue >= 0x40000000 && enumvalue <= (0x40000000 + (int)(sizeof(ipp_finishings_vendor) / sizeof(ipp_finishings_vendor[0]))))
+    else if (enumvalue >= 0x40000000 && enumvalue < (0x40000000 + (int)(sizeof(ipp_finishings_vendor) / sizeof(ipp_finishings_vendor[0]))))
       return (ipp_finishings_vendor[enumvalue - 0x40000000]);
   }
   else if ((!strcmp(attrname, "job-collation-type") || !strcmp(attrname, "job-collation-type-actual")) && enumvalue >= 3 && enumvalue < (3 + (int)(sizeof(ipp_job_collation_types) / sizeof(ipp_job_collation_types[0]))))
@@ -2262,7 +2262,7 @@ ippErrorString(ipp_status_t error)        /* I - Error status */
   * No, build an "0xxxxx" error string...
   */
 
-  sprintf(cg->ipp_unknown, "0x%04x", error);
+  snprintf(cg->ipp_unknown, sizeof(cg->ipp_unknown), "0x%04x", error);
 
   return (cg->ipp_unknown);
 }
@@ -2339,7 +2339,7 @@ ippOpString(ipp_op_t op)          /* I - Operation ID */
   * No, build an "0xxxxx" operation string...
   */
 
-  sprintf(cg->ipp_unknown, "0x%04x", op);
+  snprintf(cg->ipp_unknown, sizeof(cg->ipp_unknown), "0x%04x", op);
 
   return (cg->ipp_unknown);
 }
index 395b0ebf3e130951cb2482c3230c3d3b6150a7bc..69efbd9aa0751ef28e61cc38a797a8255f90c100 100644 (file)
@@ -12,7 +12,7 @@
  * Include necessary headers...
  */
 
-#include <cups/cups.h>
+#include "cups-private.h"
 #include "ipp-private.h"
 #include "string-private.h"
 #include "debug-internal.h"
@@ -220,10 +220,22 @@ _ippVarsSet(_ipp_vars_t *v,               /* I - IPP variables */
 {
   if (!strcmp(name, "uri"))
   {
-    char               uri[1024];      /* New printer URI */
-    http_uri_status_t  uri_status;     /* URI status */
+    char       uri[1024];              /* New printer URI */
+    char       resolved[1024];         /* Resolved mDNS URI */
 
-    if ((uri_status = httpSeparateURI(HTTP_URI_CODING_ALL, value, v->scheme, sizeof(v->scheme), v->username, sizeof(v->username), v->host, sizeof(v->host), &(v->port), v->resource, sizeof(v->resource))) < HTTP_URI_STATUS_OK)
+    if (strstr(value, "._tcp"))
+    {
+     /*
+      * Resolve URI...
+      */
+
+      if (!_httpResolveURI(value, resolved, sizeof(resolved), _HTTP_RESOLVE_DEFAULT, NULL, NULL))
+        return (0);
+
+      value = resolved;
+    }
+
+    if (httpSeparateURI(HTTP_URI_CODING_ALL, value, v->scheme, sizeof(v->scheme), v->username, sizeof(v->username), v->host, sizeof(v->host), &(v->port), v->resource, sizeof(v->resource)) < HTTP_URI_STATUS_OK)
       return (0);
 
     if (v->username[0])
index d0cac8cfe198c97bd218f661018b21a6f7e48a3d..42cf2fcaf778ab9b6b31c370324861804dbbf0a9 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Internet Printing Protocol functions for CUPS.
  *
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2007-2021 by Apple Inc.
  * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
  *
  * Licensed under Apache License v2.0.  See the file "LICENSE" for more
@@ -2866,8 +2866,9 @@ ippReadIO(void       *src,                /* I - Data source */
   unsigned char                *buffer,        /* Data buffer */
                        string[IPP_MAX_TEXT],
                                        /* Small string buffer */
-                       *bufptr;        /* Pointer into buffer */
-  ipp_attribute_t      *attr;          /* Current attribute */
+                       *bufptr,        /* Pointer into buffer */
+                       *bufend;        /* End of buffer */
+  ipp_attribute_t      *attr = NULL;   /* Current attribute */
   ipp_tag_t            tag;            /* Current tag */
   ipp_tag_t            value_tag;      /* Current value tag */
   _ipp_value_t         *value;         /* Current value */
@@ -2900,8 +2901,7 @@ ippReadIO(void       *src,                /* I - Data source */
           if ((*cb)(src, buffer, 8) < 8)
          {
            DEBUG_puts("1ippReadIO: Unable to read header.");
-           _cupsBufferRelease((char *)buffer);
-           return (IPP_STATE_ERROR);
+           goto rollback;
          }
 
         /*
@@ -2939,8 +2939,7 @@ ippReadIO(void       *src,                /* I - Data source */
          if ((*cb)(src, buffer, 1) < 1)
          {
            DEBUG_puts("1ippReadIO: Callback returned EOF/error");
-           _cupsBufferRelease((char *)buffer);
-           return (IPP_STATE_ERROR);
+           goto rollback;
          }
 
          DEBUG_printf(("2ippReadIO: ipp->current=%p, ipp->prev=%p", (void *)ipp->current, (void *)ipp->prev));
@@ -2956,11 +2955,10 @@ ippReadIO(void       *src,              /* I - Data source */
             * Read 32-bit "extension" tag...
             */
 
-           if ((*cb)(src, buffer, 4) < 1)
+           if ((*cb)(src, buffer, 4) < 4)
            {
              DEBUG_puts("1ippReadIO: Callback returned EOF/error");
-             _cupsBufferRelease((char *)buffer);
-             return (IPP_STATE_ERROR);
+             goto rollback;
            }
 
            tag = (ipp_tag_t)((((((buffer[0] << 8) | buffer[1]) << 8) |
@@ -2974,8 +2972,7 @@ ippReadIO(void       *src,                /* I - Data source */
 
              _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP extension tag larger than 0x7FFFFFFF."), 1);
              DEBUG_printf(("1ippReadIO: bad tag 0x%x.", tag));
-             _cupsBufferRelease((char *)buffer);
-             return (IPP_STATE_ERROR);
+             goto rollback;
             }
           }
 
@@ -2994,8 +2991,7 @@ ippReadIO(void       *src,                /* I - Data source */
          {
            _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Invalid group tag."), 1);
            DEBUG_printf(("1ippReadIO: bad tag 0x%02x.", tag));
-           _cupsBufferRelease((char *)buffer);
-           return (IPP_STATE_ERROR);
+           goto rollback;
          }
           else if (tag < IPP_TAG_UNSUPPORTED_VALUE)
          {
@@ -3003,13 +2999,20 @@ ippReadIO(void       *src,              /* I - Data source */
            * Group tag...  Set the current group and continue...
            */
 
-            if (ipp->curtag == tag)
+            if (parent)
+            {
+             _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Invalid group tag."), 1);
+             DEBUG_printf(("1ippReadIO: bad tag 0x%02x.", tag));
+             goto rollback;
+            }
+            else if (ipp->curtag == tag)
              ipp->prev = ippAddSeparator(ipp);
             else if (ipp->current)
              ipp->prev = ipp->current;
 
            ipp->curtag  = tag;
            ipp->current = NULL;
+           attr         = NULL;
            DEBUG_printf(("2ippReadIO: group tag=%x(%s), ipp->prev=%p", tag, ippTagString(tag), (void *)ipp->prev));
            continue;
          }
@@ -3024,8 +3027,7 @@ ippReadIO(void       *src,                /* I - Data source */
           if ((*cb)(src, buffer, 2) < 2)
          {
            DEBUG_puts("1ippReadIO: unable to read name length.");
-           _cupsBufferRelease((char *)buffer);
-           return (IPP_STATE_ERROR);
+           goto rollback;
          }
 
           n = (buffer[0] << 8) | buffer[1];
@@ -3034,8 +3036,7 @@ ippReadIO(void       *src,                /* I - Data source */
          {
            _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP name larger than 32767 bytes."), 1);
            DEBUG_printf(("1ippReadIO: bad name length %d.", n));
-           _cupsBufferRelease((char *)buffer);
-           return (IPP_STATE_ERROR);
+           goto rollback;
          }
 
           DEBUG_printf(("2ippReadIO: name length=%d", n));
@@ -3044,7 +3045,7 @@ ippReadIO(void       *src,                /* I - Data source */
           {
             _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Invalid named IPP attribute in collection."), 1);
             DEBUG_puts("1ippReadIO: bad attribute name in collection.");
-            return (IPP_STATE_ERROR);
+           goto rollback;
           }
           else if (n == 0 && tag != IPP_TAG_MEMBERNAME && tag != IPP_TAG_END_COLLECTION)
          {
@@ -3056,8 +3057,7 @@ ippReadIO(void       *src,                /* I - Data source */
            {
              _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP attribute has no name."), 1);
              DEBUG_puts("1ippReadIO: Attribute without name and no current.");
-             _cupsBufferRelease((char *)buffer);
-             return (IPP_STATE_ERROR);
+             goto rollback;
            }
 
             attr      = ipp->current;
@@ -3096,8 +3096,7 @@ ippReadIO(void       *src,                /* I - Data source */
                DEBUG_printf(("1ippReadIO: 1setOf value tag %x(%s) != %x(%s)",
                              value_tag, ippTagString(value_tag), tag,
                              ippTagString(tag)));
-               _cupsBufferRelease((char *)buffer);
-               return (IPP_STATE_ERROR);
+               goto rollback;
              }
 
               if (value_tag != tag)
@@ -3123,8 +3122,7 @@ ippReadIO(void       *src,                /* I - Data source */
                DEBUG_printf(("1ippReadIO: 1setOf value tag %x(%s) != %x(%s)",
                              value_tag, ippTagString(value_tag), tag,
                              ippTagString(tag)));
-               _cupsBufferRelease((char *)buffer);
-               return (IPP_STATE_ERROR);
+               goto rollback;
              }
 
               if (value_tag == IPP_TAG_INTEGER && tag == IPP_TAG_RANGE)
@@ -3146,8 +3144,7 @@ ippReadIO(void       *src,                /* I - Data source */
              DEBUG_printf(("1ippReadIO: value tag %x(%s) != %x(%s)",
                            value_tag, ippTagString(value_tag), tag,
                            ippTagString(tag)));
-             _cupsBufferRelease((char *)buffer);
-             return (IPP_STATE_ERROR);
+             goto rollback;
             }
 
            /*
@@ -3155,10 +3152,7 @@ ippReadIO(void       *src,               /* I - Data source */
            */
 
            if ((value = ipp_set_value(ipp, &attr, attr->num_values)) == NULL)
-           {
-             _cupsBufferRelease((char *)buffer);
-             return (IPP_STATE_ERROR);
-           }
+             goto rollback;
          }
          else if (tag == IPP_TAG_MEMBERNAME)
          {
@@ -3170,8 +3164,13 @@ ippReadIO(void       *src,               /* I - Data source */
            {
              _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP member name is not empty."), 1);
              DEBUG_puts("1ippReadIO: member name not empty.");
-             _cupsBufferRelease((char *)buffer);
-             return (IPP_STATE_ERROR);
+             goto rollback;
+           }
+           else if (!parent)
+           {
+             _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP member attribute outside of collection."), 1);
+             DEBUG_puts("1ippReadIO: member attribute outside of collection.");
+             goto rollback;
            }
 
             if (ipp->current)
@@ -3182,8 +3181,7 @@ ippReadIO(void       *src,                /* I - Data source */
            {
              _cupsSetHTTPError(HTTP_STATUS_ERROR);
              DEBUG_puts("1ippReadIO: unable to allocate attribute.");
-             _cupsBufferRelease((char *)buffer);
-             return (IPP_STATE_ERROR);
+             goto rollback;
            }
 
            DEBUG_printf(("2ippReadIO: membername, ipp->current=%p, ipp->prev=%p", (void *)ipp->current, (void *)ipp->prev));
@@ -3199,8 +3197,7 @@ ippReadIO(void       *src,                /* I - Data source */
            if ((*cb)(src, buffer, (size_t)n) < n)
            {
              DEBUG_puts("1ippReadIO: unable to read name.");
-             _cupsBufferRelease((char *)buffer);
-             return (IPP_STATE_ERROR);
+             goto rollback;
            }
 
            buffer[n] = '\0';
@@ -3213,8 +3210,7 @@ ippReadIO(void       *src,                /* I - Data source */
            {
              _cupsSetHTTPError(HTTP_STATUS_ERROR);
              DEBUG_puts("1ippReadIO: unable to allocate attribute.");
-             _cupsBufferRelease((char *)buffer);
-             return (IPP_STATE_ERROR);
+             goto rollback;
            }
 
            DEBUG_printf(("2ippReadIO: name=\"%s\", ipp->current=%p, ipp->prev=%p", buffer, (void *)ipp->current, (void *)ipp->prev));
@@ -3230,8 +3226,7 @@ ippReadIO(void       *src,                /* I - Data source */
          if ((*cb)(src, buffer, 2) < 2)
          {
            DEBUG_puts("1ippReadIO: unable to read value length.");
-           _cupsBufferRelease((char *)buffer);
-           return (IPP_STATE_ERROR);
+           goto rollback;
          }
 
          n = (buffer[0] << 8) | buffer[1];
@@ -3242,8 +3237,7 @@ ippReadIO(void       *src,                /* I - Data source */
            _cupsSetError(IPP_STATUS_ERROR_INTERNAL,
                          _("IPP value larger than 32767 bytes."), 1);
            DEBUG_printf(("1ippReadIO: bad value length %d.", n));
-           _cupsBufferRelease((char *)buffer);
-           return (IPP_STATE_ERROR);
+           goto rollback;
          }
 
          switch (tag)
@@ -3259,15 +3253,13 @@ ippReadIO(void       *src,              /* I - Data source */
                    _cupsSetError(IPP_STATUS_ERROR_INTERNAL,
                                  _("IPP enum value not 4 bytes."), 1);
                  DEBUG_printf(("1ippReadIO: bad integer value length %d.", n));
-                 _cupsBufferRelease((char *)buffer);
-                 return (IPP_STATE_ERROR);
+                 goto rollback;
                }
 
                if ((*cb)(src, buffer, 4) < 4)
                {
                  DEBUG_puts("1ippReadIO: Unable to read integer value.");
-                 _cupsBufferRelease((char *)buffer);
-                 return (IPP_STATE_ERROR);
+                 goto rollback;
                }
 
                n = (((((buffer[0] << 8) | buffer[1]) << 8) | buffer[2]) << 8) |
@@ -3285,15 +3277,13 @@ ippReadIO(void       *src,              /* I - Data source */
                  _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP boolean value not 1 byte."),
                                1);
                  DEBUG_printf(("1ippReadIO: bad boolean value length %d.", n));
-                 _cupsBufferRelease((char *)buffer);
-                 return (IPP_STATE_ERROR);
+                 goto rollback;
                }
 
                if ((*cb)(src, buffer, 1) < 1)
                {
                  DEBUG_puts("1ippReadIO: Unable to read boolean value.");
-                 _cupsBufferRelease((char *)buffer);
-                 return (IPP_STATE_ERROR);
+                 goto rollback;
                }
 
                 value->boolean = (char)buffer[0];
@@ -3334,8 +3324,7 @@ ippReadIO(void       *src,                /* I - Data source */
                  if ((*cb)(src, buffer, (size_t)n) < n)
                  {
                    DEBUG_puts("1ippReadIO: unable to read string value.");
-                   _cupsBufferRelease((char *)buffer);
-                   return (IPP_STATE_ERROR);
+                   goto rollback;
                  }
                }
 
@@ -3349,15 +3338,13 @@ ippReadIO(void       *src,              /* I - Data source */
                {
                  _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("IPP date value not 11 bytes."), 1);
                  DEBUG_printf(("1ippReadIO: bad date value length %d.", n));
-                 _cupsBufferRelease((char *)buffer);
-                 return (IPP_STATE_ERROR);
+                 goto rollback;
                }
 
                if ((*cb)(src, value->date, 11) < 11)
                {
                  DEBUG_puts("1ippReadIO: Unable to read date value.");
-                 _cupsBufferRelease((char *)buffer);
-                 return (IPP_STATE_ERROR);
+                 goto rollback;
                }
                break;
 
@@ -3367,15 +3354,13 @@ ippReadIO(void       *src,              /* I - Data source */
                  _cupsSetError(IPP_STATUS_ERROR_INTERNAL,
                                _("IPP resolution value not 9 bytes."), 1);
                  DEBUG_printf(("1ippReadIO: bad resolution value length %d.", n));
-                 _cupsBufferRelease((char *)buffer);
-                 return (IPP_STATE_ERROR);
+                 goto rollback;
                }
 
                if ((*cb)(src, buffer, 9) < 9)
                {
                  DEBUG_puts("1ippReadIO: Unable to read resolution value.");
-                 _cupsBufferRelease((char *)buffer);
-                 return (IPP_STATE_ERROR);
+                 goto rollback;
                }
 
                 value->resolution.xres =
@@ -3395,15 +3380,13 @@ ippReadIO(void       *src,              /* I - Data source */
                                _("IPP rangeOfInteger value not 8 bytes."), 1);
                  DEBUG_printf(("1ippReadIO: bad rangeOfInteger value length "
                                "%d.", n));
-                 _cupsBufferRelease((char *)buffer);
-                 return (IPP_STATE_ERROR);
+                 goto rollback;
                }
 
                if ((*cb)(src, buffer, 8) < 8)
                {
                  DEBUG_puts("1ippReadIO: Unable to read range value.");
-                 _cupsBufferRelease((char *)buffer);
-                 return (IPP_STATE_ERROR);
+                 goto rollback;
                }
 
                 value->range.lower =
@@ -3428,19 +3411,18 @@ ippReadIO(void       *src,              /* I - Data source */
                                    "minimum 4 bytes."), 1);
                  DEBUG_printf(("1ippReadIO: bad stringWithLanguage value "
                                "length %d.", n));
-                 _cupsBufferRelease((char *)buffer);
-                 return (IPP_STATE_ERROR);
+                 goto rollback;
                }
 
                if ((*cb)(src, buffer, (size_t)n) < n)
                {
                  DEBUG_puts("1ippReadIO: Unable to read string w/language "
                             "value.");
-                 _cupsBufferRelease((char *)buffer);
-                 return (IPP_STATE_ERROR);
+                 goto rollback;
                }
 
                 bufptr = buffer;
+                bufend = buffer + n;
 
               /*
                * text-with-language and name-with-language are composite
@@ -3454,14 +3436,13 @@ ippReadIO(void       *src,              /* I - Data source */
 
                n = (bufptr[0] << 8) | bufptr[1];
 
-               if ((bufptr + 2 + n) >= (buffer + IPP_BUF_SIZE) || n >= (int)sizeof(string))
+               if ((bufptr + 2 + n + 2) > bufend || n >= (int)sizeof(string))
                {
                  _cupsSetError(IPP_STATUS_ERROR_INTERNAL,
                                _("IPP language length overflows value."), 1);
                  DEBUG_printf(("1ippReadIO: bad language value length %d.",
                                n));
-                 _cupsBufferRelease((char *)buffer);
-                 return (IPP_STATE_ERROR);
+                 goto rollback;
                }
                else if (n >= IPP_MAX_LANGUAGE)
                {
@@ -3469,8 +3450,7 @@ ippReadIO(void       *src,                /* I - Data source */
                                _("IPP language length too large."), 1);
                  DEBUG_printf(("1ippReadIO: bad language value length %d.",
                                n));
-                 _cupsBufferRelease((char *)buffer);
-                 return (IPP_STATE_ERROR);
+                 goto rollback;
                }
 
                memcpy(string, bufptr + 2, (size_t)n);
@@ -3481,13 +3461,12 @@ ippReadIO(void       *src,              /* I - Data source */
                 bufptr += 2 + n;
                n = (bufptr[0] << 8) | bufptr[1];
 
-               if ((bufptr + 2 + n) >= (buffer + IPP_BUF_SIZE))
+               if ((bufptr + 2 + n) > bufend)
                {
                  _cupsSetError(IPP_STATUS_ERROR_INTERNAL,
                                _("IPP string length overflows value."), 1);
                  DEBUG_printf(("1ippReadIO: bad string value length %d.", n));
-                 _cupsBufferRelease((char *)buffer);
-                 return (IPP_STATE_ERROR);
+                 goto rollback;
                }
 
                bufptr[2 + n] = '\0';
@@ -3507,30 +3486,28 @@ ippReadIO(void       *src,              /* I - Data source */
                                _("IPP begCollection value not 0 bytes."), 1);
                  DEBUG_puts("1ippReadIO: begCollection tag with value length "
                             "> 0.");
-                 _cupsBufferRelease((char *)buffer);
-                 return (IPP_STATE_ERROR);
+                 goto rollback;
                }
 
                if (ippReadIO(src, cb, 1, ipp, value->collection) == IPP_STATE_ERROR)
                {
                  DEBUG_puts("1ippReadIO: Unable to read collection value.");
-                 _cupsBufferRelease((char *)buffer);
-                 return (IPP_STATE_ERROR);
+                 goto rollback;
                }
                 break;
 
             case IPP_TAG_END_COLLECTION :
-               _cupsBufferRelease((char *)buffer);
-
                 if (n > 0)
                {
                  _cupsSetError(IPP_STATUS_ERROR_INTERNAL,
                                _("IPP endCollection value not 0 bytes."), 1);
                  DEBUG_puts("1ippReadIO: endCollection tag with value length "
                             "> 0.");
-                 return (IPP_STATE_ERROR);
+                 goto rollback;
                }
 
+               _cupsBufferRelease((char *)buffer);
+
                DEBUG_puts("1ippReadIO: endCollection tag...");
                return (ipp->state = IPP_STATE_DATA);
 
@@ -3545,22 +3522,19 @@ ippReadIO(void       *src,              /* I - Data source */
                  _cupsSetError(IPP_STATUS_ERROR_INTERNAL,
                                _("IPP memberName with no attribute."), 1);
                  DEBUG_puts("1ippReadIO: Member name without attribute.");
-                 _cupsBufferRelease((char *)buffer);
-                 return (IPP_STATE_ERROR);
+                 goto rollback;
                 }
                else if (n == 0)
                {
                  _cupsSetError(IPP_STATUS_ERROR_INTERNAL,
                                _("IPP memberName value is empty."), 1);
                  DEBUG_puts("1ippReadIO: Empty member name value.");
-                 _cupsBufferRelease((char *)buffer);
-                 return (IPP_STATE_ERROR);
+                 goto rollback;
                }
                else if ((*cb)(src, buffer, (size_t)n) < n)
                {
                  DEBUG_puts("1ippReadIO: Unable to read member name value.");
-                 _cupsBufferRelease((char *)buffer);
-                 return (IPP_STATE_ERROR);
+                 goto rollback;
                }
 
                buffer[n] = '\0';
@@ -3585,8 +3559,7 @@ ippReadIO(void       *src,                /* I - Data source */
                                _("IPP octetString length too large."), 1);
                  DEBUG_printf(("1ippReadIO: bad octetString value length %d.",
                                n));
-                 _cupsBufferRelease((char *)buffer);
-                 return (IPP_STATE_ERROR);
+                 goto rollback;
                }
 
                 value->unknown.length = n;
@@ -3597,15 +3570,13 @@ ippReadIO(void       *src,              /* I - Data source */
                  {
                    _cupsSetHTTPError(HTTP_STATUS_ERROR);
                    DEBUG_puts("1ippReadIO: Unable to allocate value");
-                   _cupsBufferRelease((char *)buffer);
-                   return (IPP_STATE_ERROR);
+                   goto rollback;
                  }
 
                  if ((*cb)(src, value->unknown.data, (size_t)n) < n)
                  {
                    DEBUG_puts("1ippReadIO: Unable to read unsupported value.");
-                   _cupsBufferRelease((char *)buffer);
-                   return (IPP_STATE_ERROR);
+                   goto rollback;
                  }
                }
                else
@@ -3633,6 +3604,17 @@ ippReadIO(void       *src,               /* I - Data source */
   _cupsBufferRelease((char *)buffer);
 
   return (ipp->state);
+
+  // If we get here, there was an error that required us to roll back the last
+  // attribute read in order to keep the IPP message valid...
+  rollback:
+
+  _cupsBufferRelease((char *)buffer);
+
+  if (attr)
+    ippDeleteAttribute(ipp, attr);
+
+  return (IPP_STATE_ERROR);
 }
 
 
@@ -4565,7 +4547,7 @@ ippSetValueTag(
           return (0);
 
         if (ipp->attrs && ipp->attrs->next && ipp->attrs->next->name &&
-            !strcmp(ipp->attrs->next->name, "attributes-natural-language"))
+            !strcmp(ipp->attrs->next->name, "attributes-natural-language") && (ipp->attrs->next->value_tag & IPP_TAG_CUPS_MASK) == IPP_TAG_LANGUAGE)
         {
          /*
           * Use the language code from the IPP message...
index 11814c9af256d8796016e14f1d27659dea7b160f..e45858c2c9e9c7f879d432c9d872c490e052c730 100644 (file)
@@ -603,16 +603,15 @@ _cupsGet1284Values(
       if (ptr < (value + sizeof(value) - 1))
         *ptr++ = *device_id;
 
-    if (!*device_id)
-      break;
-
     while (ptr > value && _cups_isspace(ptr[-1]))
       ptr --;
 
     *ptr = '\0';
-    device_id ++;
-
     num_values = cupsAddOption(key, value, num_values, values);
+         
+    if (!*device_id)
+      break;
+    device_id ++;
   }
 
   return (num_values);
index 5b7c76e850d871a39aeb9c16d48a958ca647d0a9..091f39f3cc19e9baec273fae349390146a0be001 100644 (file)
@@ -78,8 +78,11 @@ _cupsConvertOptions(
   int          num_finishings = 0,     /* Number of finishing values */
                finishings[10];         /* Finishing enum values */
   ppd_choice_t *choice;                /* Marked choice */
-  int           finishings_copies = copies;
+  int           finishings_copies = copies,
                                         /* Number of copies for finishings */
+                job_pages = 0,         /* job-pages value */
+               number_up = 1;          /* number-up value */
+  const char   *value;                 /* Option value */
 
 
  /*
@@ -365,6 +368,28 @@ _cupsConvertOptions(
   * Map finishing options...
   */
 
+  if (copies != finishings_copies)
+  {
+    // Figure out the proper job-pages-per-set value...
+    if ((value = cupsGetOption("job-pages", num_options, options)) == NULL)
+      value = cupsGetOption("com.apple.print.PrintSettings.PMTotalBeginPages..n.", num_options, options);
+
+    if (value)
+      job_pages = atoi(value);
+
+    // Adjust for number-up
+    if ((value = cupsGetOption("number-up", num_options, options)) != NULL)
+      number_up = atoi(value);
+
+    job_pages = (job_pages + number_up - 1) / number_up;
+
+    // When duplex printing, raster data will include an extra (blank) page to
+    // make the total number of pages even.  Make sure this is reflected in the
+    // page count...
+    if ((job_pages & 1) && (keyword = cupsGetOption("sides", num_options, options)) != NULL && strcmp(keyword, "one-sided"))
+      job_pages ++;
+  }
+
   if ((finishing_template = cupsGetOption("cupsFinishingTemplate", num_options, options)) == NULL)
     finishing_template = cupsGetOption("finishing-template", num_options, options);
 
@@ -376,13 +401,13 @@ _cupsConvertOptions(
     ippAddCollection(request, IPP_TAG_JOB, "finishings-col", fin_col);
     ippDelete(fin_col);
 
-    if (copies != finishings_copies && (keyword = cupsGetOption("job-impressions", num_options, options)) != NULL)
+    if (copies != finishings_copies && job_pages > 0)
     {
      /*
       * Send job-pages-per-set attribute to apply finishings correctly...
       */
 
-      ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-pages-per-set", atoi(keyword) / finishings_copies);
+      ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-pages-per-set", job_pages);
     }
   }
   else
@@ -392,13 +417,13 @@ _cupsConvertOptions(
     {
       ippAddIntegers(request, IPP_TAG_JOB, IPP_TAG_ENUM, "finishings", num_finishings, finishings);
 
-      if (copies != finishings_copies && (keyword = cupsGetOption("job-impressions", num_options, options)) != NULL)
+      if (copies != finishings_copies && job_pages > 0)
       {
        /*
        * Send job-pages-per-set attribute to apply finishings correctly...
        */
 
-       ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-pages-per-set", atoi(keyword) / finishings_copies);
+       ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-pages-per-set", job_pages);
       }
     }
   }
@@ -1075,7 +1100,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd)   /* I - PPD file */
       * Convert the PPD size name to the corresponding PWG keyword name.
       */
 
-      if ((pwg_media = pwgMediaForPPD(ppd_size->name)) != NULL)
+      if ((pwg_media = pwgMediaForSize(PWG_FROM_POINTS(ppd_size->width), PWG_FROM_POINTS(ppd_size->length))) != NULL)
       {
        /*
        * Standard name, do we have conflicts?
@@ -3228,7 +3253,7 @@ _ppdCreateFromIPP(char   *buffer, /* I - Filename buffer */
         cupsFilePuts(fp, "*cupsFilter2: \"application/vnd.cups-pdf application/pdf 10 -\"\n");
     }
     else
-      cupsFilePuts(fp, "*cupsManualCopies: true\n");
+      cupsFilePuts(fp, "*cupsManualCopies: True\n");
     if (is_apple)
       cupsFilePuts(fp, "*cupsFilter2: \"image/urf image/urf 100 -\"\n");
     if (is_pwg)
@@ -3620,10 +3645,12 @@ _ppdCreateFromIPP(char   *buffer,       /* I - Filename buffer */
   if ((attr = ippFindAttribute(ippGetCollection(defattr, 0), "media-source", IPP_TAG_ZERO)) != NULL)
     pwg_ppdize_name(ippGetString(attr, 0, NULL), ppdname, sizeof(ppdname));
   else
-    strlcpy(ppdname, "Unknown", sizeof(ppdname));
+    ppdname[0] = '\0';
 
   if ((attr = ippFindAttribute(response, "media-source-supported", IPP_TAG_ZERO)) != NULL && (count = ippGetCount(attr)) > 1)
   {
+    int have_default = ppdname[0] != '\0';
+                                       /* Do we have a default InputSlot? */
     static const char * const sources[] =
     {                                  /* Standard "media-source" strings */
       "auto",
@@ -3678,21 +3705,31 @@ _ppdCreateFromIPP(char   *buffer,       /* I - Filename buffer */
       "roll-10"
     };
 
-    cupsFilePrintf(fp, "*OpenUI *InputSlot: PickOne\n"
-                       "*OrderDependency: 10 AnySetup *InputSlot\n"
-                       "*DefaultInputSlot: %s\n", ppdname);
-    for (i = 0, count = ippGetCount(attr); i < count; i ++)
+    cupsFilePuts(fp, "*OpenUI *InputSlot: PickOne\n"
+                     "*OrderDependency: 10 AnySetup *InputSlot\n");
+    if (have_default)
+      cupsFilePrintf(fp, "*DefaultInputSlot: %s\n", ppdname);
+
+    for (i = 0; i < count; i ++)
     {
       keyword = ippGetString(attr, i, NULL);
 
       pwg_ppdize_name(keyword, ppdname, sizeof(ppdname));
 
+      if (i == 0 && !have_default)
+       cupsFilePrintf(fp, "*DefaultInputSlot: %s\n", ppdname);
+
       for (j = 0; j < (int)(sizeof(sources) / sizeof(sources[0])); j ++)
         if (!strcmp(sources[j], keyword))
        {
          snprintf(msgid, sizeof(msgid), "media-source.%s", keyword);
+
+         if ((msgstr = _cupsLangString(lang, msgid)) == msgid || !strcmp(msgid, msgstr))
+           if ((msgstr = _cupsMessageLookup(strings, msgid)) == msgid)
+             msgstr = keyword;
+
          cupsFilePrintf(fp, "*InputSlot %s: \"<</MediaPosition %d>>setpagedevice\"\n", ppdname, j);
-         cupsFilePrintf(fp, "*%s.InputSlot %s/%s: \"\"\n", lang->language, ppdname, _cupsLangString(lang, msgid));
+         cupsFilePrintf(fp, "*%s.InputSlot %s/%s: \"\"\n", lang->language, ppdname, msgstr);
          break;
        }
     }
@@ -3744,6 +3781,8 @@ _ppdCreateFromIPP(char   *buffer, /* I - Filename buffer */
     int wrote_color = 0;
     const char *default_color = NULL;  /* Default */
 
+    cupsFilePrintf(fp, "*%% ColorModel from %s\n", ippGetName(attr));
+
     for (i = 0, count = ippGetCount(attr); i < count; i ++)
     {
       keyword = ippGetString(attr, i, NULL);
@@ -3790,6 +3829,11 @@ _ppdCreateFromIPP(char   *buffer,        /* I - Filename buffer */
        PRINTF_COLOROPTION("RGB", _("Color"), CUPS_CSPACE_SRGB, 8)
 
        default_color = "RGB";
+
+        // Apparently some printers only advertise color support, so make sure
+        // we also do grayscale for these printers...
+       if (!ippContainsString(attr, "sgray_8") && !ippContainsString(attr, "black_1") && !ippContainsString(attr, "black_8") && !ippContainsString(attr, "W8") && !ippContainsString(attr, "W8-16"))
+         PRINTF_COLOROPTION("Gray", _("GrayScale"), CUPS_CSPACE_SW, 8)
       }
       else if (!strcasecmp(keyword, "adobe-rgb_16") || !strcmp(keyword, "ADOBERGB48") || !strcmp(keyword, "ADOBERGB24-48"))
       {
@@ -3924,7 +3968,7 @@ _ppdCreateFromIPP(char   *buffer, /* I - Filename buffer */
   else
     strlcpy(ppdname, "Unknown", sizeof(ppdname));
 
-  if ((attr = ippFindAttribute(response, "output-bin-supported", IPP_TAG_ZERO)) != NULL && (count = ippGetCount(attr)) > 1)
+  if ((attr = ippFindAttribute(response, "output-bin-supported", IPP_TAG_ZERO)) != NULL && (count = ippGetCount(attr)) > 0)
   {
     ipp_attribute_t    *trays = ippFindAttribute(response, "printer-output-tray", IPP_TAG_STRING);
                                        /* printer-output-tray attribute, if any */
@@ -5140,6 +5184,8 @@ pwg_unppdize_name(const char *ppd,        /* I - PPD keyword */
 {
   char *ptr,                           /* Pointer into name buffer */
        *end;                           /* End of name buffer */
+  int   nodash = 1;                     /* Next char in IPP name cannot be a
+                                           dash (first char or after a dash) */
 
 
   if (_cups_islower(*ppd))
@@ -5151,7 +5197,9 @@ pwg_unppdize_name(const char *ppd,        /* I - PPD keyword */
     const char *ppdptr;                        /* Pointer into PPD keyword */
 
     for (ppdptr = ppd + 1; *ppdptr; ppdptr ++)
-      if (_cups_isupper(*ppdptr) || strchr(dashchars, *ppdptr))
+      if (_cups_isupper(*ppdptr) || strchr(dashchars, *ppdptr) ||
+         (*ppdptr == '-' && *(ppdptr - 1) == '-') ||
+         (*ppdptr == '-' && *(ppdptr + 1) == '\0'))
         break;
 
     if (!*ppdptr)
@@ -5163,19 +5211,44 @@ pwg_unppdize_name(const char *ppd,      /* I - PPD keyword */
 
   for (ptr = name, end = name + namesize - 1; *ppd && ptr < end; ppd ++)
   {
-    if (_cups_isalnum(*ppd) || *ppd == '-')
+    if (_cups_isalnum(*ppd))
+    {
       *ptr++ = (char)tolower(*ppd & 255);
-    else if (strchr(dashchars, *ppd))
-      *ptr++ = '-';
+      nodash = 0;
+    }
+    else if (*ppd == '-' || strchr(dashchars, *ppd))
+    {
+      if (nodash == 0)
+      {
+       *ptr++ = '-';
+       nodash = 1;
+      }
+    }
     else
+    {
       *ptr++ = *ppd;
+      nodash = 0;
+    }
 
-    if (!_cups_isupper(*ppd) && _cups_isalnum(*ppd) &&
-       _cups_isupper(ppd[1]) && ptr < end)
-      *ptr++ = '-';
-    else if (!isdigit(*ppd & 255) && isdigit(ppd[1] & 255))
-      *ptr++ = '-';
+    if (nodash == 0)
+    {
+      if (!_cups_isupper(*ppd) && _cups_isalnum(*ppd) &&
+         _cups_isupper(ppd[1]) && ptr < end)
+      {
+       *ptr++ = '-';
+       nodash = 1;
+      }
+      else if (!isdigit(*ppd & 255) && isdigit(ppd[1] & 255))
+      {
+       *ptr++ = '-';
+       nodash = 1;
+      }
+    }
   }
 
+  /* Remove trailing dashes */
+  while (ptr > name && *(ptr - 1) == '-')
+    ptr --;
+
   *ptr = '\0';
 }
index 7ec0df473951a40cfc5beb0e12fbf656e8cd149e..25797b3761ea4c1296c37a2459ee642f1a1bab29 100644 (file)
@@ -307,7 +307,7 @@ cupsMarkOptions(
         * Look it up in the PPD file...
        */
 
-       sprintf(s, "%d", j);
+       snprintf(s, sizeof(s), "%d", j);
 
         if ((attr = ppdFindAttr(ppd, "cupsIPPFinishings", s)) == NULL)
          continue;
index 7b406c971bdd6e37edc9bc4dd6e4151e942ee12d..11ddae3662c8ada77f01c0f1d6d9c51758ce84d3 100644 (file)
@@ -35,7 +35,7 @@ extern "C" {
  * Constants...
  */
 
-#  define _PPD_CACHE_VERSION         /* Version number in cache file */
+#  define _PPD_CACHE_VERSION   10      /* Version number in cache file */
 
 
 /*
index ff52df2e17b890e7603256d538a6bfd7fcafa2f8..ac5dbc62bb8d78aa8de022f8f9bb854d4525eaa8 100644 (file)
@@ -125,6 +125,7 @@ ppdClose(ppd_file_t *ppd)           /* I - PPD file record */
   free(ppd->lang_encoding);
   free(ppd->nickname);
   free(ppd->patches);
+  free(ppd->emulations);
   free(ppd->jcl_begin);
   free(ppd->jcl_end);
   free(ppd->jcl_ps);
@@ -871,15 +872,15 @@ _ppdOpen(
       ppd_decode(ppd->jcl_ps);         /* Decode quoted string */
     }
     else if (!strcmp(keyword, "AccurateScreensSupport"))
-      ppd->accurate_screens = !strcmp(string, "True");
+      ppd->accurate_screens = !strcasecmp(string, "True");
     else if (!strcmp(keyword, "ColorDevice"))
-      ppd->color_device = !strcmp(string, "True");
+      ppd->color_device = !strcasecmp(string, "True");
     else if (!strcmp(keyword, "ContoneOnly"))
-      ppd->contone_only = !strcmp(string, "True");
+      ppd->contone_only = !strcasecmp(string, "True");
     else if (!strcmp(keyword, "cupsFlipDuplex"))
-      ppd->flip_duplex = !strcmp(string, "True");
+      ppd->flip_duplex = !strcasecmp(string, "True");
     else if (!strcmp(keyword, "cupsManualCopies"))
-      ppd->manual_copies = !strcmp(string, "True");
+      ppd->manual_copies = !strcasecmp(string, "True");
     else if (!strcmp(keyword, "cupsModelNumber"))
       ppd->model_number = atoi(string);
     else if (!strcmp(keyword, "cupsColorProfile"))
@@ -1496,6 +1497,27 @@ _ppdOpen(
        goto error;
       }
 
+      if (option && (!_cups_strcasecmp(option->defchoice, "custom") || !_cups_strncasecmp(option->defchoice, "custom.", 7)))
+      {
+       /*
+       * "*DefaultOption: Custom..." may set the default to a custom value
+       * or (for a very small number of incompatible PPD files) select a
+       * standard choice for the option, which CUPS renames to "_Custom..."
+       * to avoid compatibility issues.  See which this is...
+       */
+
+        char tchoice[PPD_MAX_NAME];    /* Temporary choice name */
+
+       snprintf(tchoice, sizeof(tchoice), "_%s", option->defchoice);
+
+       if (ppdFindChoice(option, tchoice))
+       {
+         strlcpy(option->defchoice, tchoice, sizeof(option->defchoice));
+
+         DEBUG_printf(("2_ppdOpen: Reset Default%s to %s...", option->keyword, tchoice));
+       }
+      }
+
       option = NULL;
 
       free(string);
@@ -1510,6 +1532,27 @@ _ppdOpen(
        goto error;
       }
 
+      if (option && (!_cups_strcasecmp(option->defchoice, "custom") || !_cups_strncasecmp(option->defchoice, "custom.", 7)))
+      {
+       /*
+       * "*DefaultOption: Custom..." may set the default to a custom value
+       * or (for a very small number of incompatible PPD files) select a
+       * standard choice for the option, which CUPS renames to "_Custom..."
+       * to avoid compatibility issues.  See which this is...
+       */
+
+        char tchoice[PPD_MAX_NAME];    /* Temporary choice name */
+
+       snprintf(tchoice, sizeof(tchoice), "_%s", option->defchoice);
+
+       if (ppdFindChoice(option, tchoice))
+       {
+         strlcpy(option->defchoice, tchoice, sizeof(option->defchoice));
+
+         DEBUG_printf(("2_ppdOpen: Reset Default%s to %s...", option->keyword, tchoice));
+       }
+      }
+
       option = NULL;
 
       free(string);
@@ -1668,11 +1711,9 @@ _ppdOpen(
         * Set the default as part of the current option...
        */
 
-        DEBUG_printf(("2_ppdOpen: Setting %s to %s...", keyword, string));
-
-        strlcpy(option->defchoice, string, sizeof(option->defchoice));
+       strlcpy(option->defchoice, string, sizeof(option->defchoice));
 
-        DEBUG_printf(("2_ppdOpen: %s is now %s...", keyword, option->defchoice));
+        DEBUG_printf(("2_ppdOpen: Set %s to %s...", keyword, option->defchoice));
       }
       else
       {
@@ -1682,11 +1723,27 @@ _ppdOpen(
 
         ppd_option_t   *toption;       /* Temporary option */
 
-
         if ((toption = ppdFindOption(ppd, keyword + 7)) != NULL)
        {
-         DEBUG_printf(("2_ppdOpen: Setting %s to %s...", keyword, string));
-         strlcpy(toption->defchoice, string, sizeof(toption->defchoice));
+         if (!_cups_strcasecmp(string, "custom") || !_cups_strncasecmp(string, "custom.", 7))
+         {
+          /*
+           * "*DefaultOption: Custom..." may set the default to a custom value
+           * or (for a very small number of incompatible PPD files) select a
+           * standard choice for the option, which CUPS renames to "_Custom..."
+           * to avoid compatibility issues.  See which this is...
+           */
+
+           snprintf(toption->defchoice, sizeof(toption->defchoice), "_%s", string);
+           if (!ppdFindChoice(toption, toption->defchoice))
+             strlcpy(toption->defchoice, string, sizeof(toption->defchoice));
+         }
+         else
+         {
+           strlcpy(toption->defchoice, string, sizeof(toption->defchoice));
+         }
+
+         DEBUG_printf(("2_ppdOpen: Set %s to %s...", keyword, toption->defchoice));
        }
       }
     }
@@ -1719,8 +1776,7 @@ _ppdOpen(
                      constraint->choice1, constraint->option2,
                     constraint->choice2))
       {
-        case 0 : /* Error */
-       case 1 : /* Error */
+        default : /* Error */
            pg->ppd_status = PPD_BAD_UI_CONSTRAINTS;
            goto error;
 
@@ -2336,8 +2392,16 @@ ppd_add_attr(ppd_file_t *ppd,            /* I - PPD file data */
   * Copy data over...
   */
 
+  if (!_cups_strcasecmp(spec, "custom") || !_cups_strncasecmp(spec, "custom.", 7))
+  {
+    temp->spec[0] = '_';
+    strlcpy(temp->spec + 1, spec, sizeof(temp->spec) - 1);
+  }
+  else {
+      strlcpy(temp->spec, spec, sizeof(temp->spec));
+  }
+
   strlcpy(temp->name, name, sizeof(temp->name));
-  strlcpy(temp->spec, spec, sizeof(temp->spec));
   strlcpy(temp->text, text, sizeof(temp->text));
   temp->value = (char *)value;
 
@@ -2840,7 +2904,7 @@ ppd_hash_option(ppd_option_t *option)     /* I - Option */
 
 
   for (hash = option->keyword[0], k = option->keyword + 1; *k;)
-    hash = 33 * hash + *k++;
+    hash = (int)(33U * (unsigned)hash) + *k++;
 
   return (hash & 511);
 }
index 00bb2ed61a89d79c8f6346b1ed5a225d1067b50c..535db08800c483fe52ebc4aa92589295d99a226a 100644 (file)
@@ -448,13 +448,13 @@ pwgInitSize(pwg_size_t *size,             /* I - Size to initialize */
         size->width  = x_dimension->values[0].integer;
        size->length = y_dimension->values[0].integer;
       }
-      else if (!x_dimension)
+      else if (!x_dimension) /* x_dimension is missing */
       {
        _cupsSetError(IPP_STATUS_ERROR_INTERNAL,
                      _("Missing x-dimension in media-size."), 1);
         return (0);
       }
-      else if (!y_dimension)
+      else /* y_dimension must be missing */
       {
        _cupsSetError(IPP_STATUS_ERROR_INTERNAL,
                      _("Missing y-dimension in media-size."), 1);
index d7db020f12c3c93baefa496070d4903d652be9c0..1459817cfa4c67d31f6abf6f7c750214cd95abb6 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Raster file routines for CUPS.
  *
- * Copyright 2007-2018 by Apple Inc.
+ * Copyright 2007-2019 by Apple Inc.
  * Copyright 1997-2006 by Easy Software Products.
  *
  * This file is part of the CUPS Imaging library.
@@ -32,6 +32,24 @@ typedef void (*_cups_copyfunc_t)(void *dst, const void *src, size_t bytes);
  * Local globals...
  */
 
+static const char * const apple_media_types[] =
+{                                      /* media-type values for Apple Raster */
+  "auto",
+  "stationery",
+  "transparency",
+  "envelope",
+  "cardstock",
+  "labels",
+  "stationery-letterhead",
+  "disc",
+  "photographic-matte",
+  "photographic-satin",
+  "photographic-semi-gloss",
+  "photographic-glossy",
+  "photographic-high-gloss",
+  "other"
+};
+
 #ifdef DEBUG
 static const char * const cups_modes[] =
 {                                      /* Open modes */
@@ -638,7 +656,7 @@ _cupsRasterReadHeader(
           {
             CUPS_CSPACE_SW,
             CUPS_CSPACE_SRGB,
-            CUPS_CSPACE_RGBW,
+            CUPS_CSPACE_CIELab,
             CUPS_CSPACE_ADOBERGB,
             CUPS_CSPACE_W,
             CUPS_CSPACE_RGB,
@@ -648,7 +666,7 @@ _cupsRasterReadHeader(
           {
             1,
             3,
-            4,
+            3,
             3,
             1,
             3,
@@ -681,8 +699,21 @@ _cupsRasterReadHeader(
            r->header.cupsPageSize[1] = (float)(r->header.cupsHeight * 72.0 / r->header.HWResolution[1]);
           }
 
-          r->header.cupsInteger[0] = r->apple_page_count;
-          r->header.cupsInteger[7] = 0xffffff;
+          r->header.cupsInteger[CUPS_RASTER_PWG_TotalPageCount]   = r->apple_page_count;
+          r->header.cupsInteger[CUPS_RASTER_PWG_AlternatePrimary] = 0xffffff;
+          r->header.cupsInteger[CUPS_RASTER_PWG_PrintQuality]     = appleheader[3];
+
+          if (appleheader[2] >= 2)
+            r->header.Duplex = 1;
+          if (appleheader[2] == 2)
+            r->header.Tumble = 1;
+
+          r->header.MediaPosition = appleheader[5];
+
+          if (appleheader[4] < (int)(sizeof(apple_media_types) / sizeof(apple_media_types[0])))
+            strlcpy(r->header.MediaType, apple_media_types[appleheader[4]], sizeof(r->header.MediaType));
+          else
+            strlcpy(r->header.MediaType, "other", sizeof(r->header.MediaType));
         }
         break;
   }
@@ -1072,8 +1103,9 @@ _cupsRasterWriteHeader(
     * zeroed.
     */
 
-    unsigned char appleheader[32];     /* Raw page header */
-    unsigned height = r->header.cupsHeight * r->rowheight;
+    int                        i;              /* Looping var */
+    unsigned char      appleheader[32];/* Raw page header */
+    unsigned           height = r->header.cupsHeight * r->rowheight;
                                        /* Computed page height */
 
     if (r->apple_page_count == 0xffffffffU)
@@ -1101,11 +1133,14 @@ _cupsRasterWriteHeader(
 
     appleheader[0]  = (unsigned char)r->header.cupsBitsPerPixel;
     appleheader[1]  = r->header.cupsColorSpace == CUPS_CSPACE_SRGB ? 1 :
-                        r->header.cupsColorSpace == CUPS_CSPACE_RGBW ? 2 :
+                        r->header.cupsColorSpace == CUPS_CSPACE_CIELab ? 2 :
                         r->header.cupsColorSpace == CUPS_CSPACE_ADOBERGB ? 3 :
                         r->header.cupsColorSpace == CUPS_CSPACE_W ? 4 :
                         r->header.cupsColorSpace == CUPS_CSPACE_RGB ? 5 :
                         r->header.cupsColorSpace == CUPS_CSPACE_CMYK ? 6 : 0;
+    appleheader[2]  = r->header.Duplex ? (r->header.Tumble ? 2 : 3) : 1;
+    appleheader[3]  = (unsigned char)(r->header.cupsInteger[CUPS_RASTER_PWG_PrintQuality]);
+    appleheader[5]  = (unsigned char)(r->header.MediaPosition);
     appleheader[12] = (unsigned char)(r->header.cupsWidth >> 24);
     appleheader[13] = (unsigned char)(r->header.cupsWidth >> 16);
     appleheader[14] = (unsigned char)(r->header.cupsWidth >> 8);
@@ -1119,6 +1154,15 @@ _cupsRasterWriteHeader(
     appleheader[22] = (unsigned char)(r->header.HWResolution[0] >> 8);
     appleheader[23] = (unsigned char)(r->header.HWResolution[0]);
 
+    for (i = 0; i < (int)(sizeof(apple_media_types) / sizeof(apple_media_types[0])); i ++)
+    {
+      if (!strcmp(r->header.MediaType, apple_media_types[i]))
+      {
+        appleheader[4] = (unsigned char)i;
+        break;
+      }
+    }
+
     return (cups_raster_io(r, appleheader, sizeof(appleheader)) == sizeof(appleheader));
   }
   else
index 69a7801375ade2a3a8eb8b16f92baf8fc3aa1bcf..ff967f05ad14a8edc57f169438ad9a3acc248d6a 100644 (file)
@@ -395,7 +395,7 @@ cupsGetResponse(http_t     *http,   /* I - Connection to server or @code CUPS_HTTP
       ippDelete(response);
       response = NULL;
 
-      http->status = status = HTTP_STATUS_ERROR;
+      http->status = HTTP_STATUS_ERROR;
       http->error  = EINVAL;
     }
   }
@@ -422,7 +422,7 @@ cupsGetResponse(http_t     *http,   /* I - Connection to server or @code CUPS_HTTP
       if (!cupsDoAuthentication(http, "POST", resource))
         httpReconnect2(http, 30000, NULL);
       else
-        http->status = status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
+        http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
     }
 
 #ifdef HAVE_SSL
index 49652e2c43b55abc415fa6538fd01f1dd3b89e4a..066252ee7654bd172ea1b78ef9c173669944e768 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * snprintf functions for CUPS.
  *
+ * Copyright © 2021 by OpenPrinting
  * Copyright © 2007-2019 by Apple Inc.
  * Copyright © 1997-2007 by Easy Software Products.
  *
@@ -81,7 +82,8 @@ _cups_vsnprintf(char       *buffer,   /* O - Output buffer */
        format ++;
        width = va_arg(ap, int);
 
-       snprintf(tptr, sizeof(tformat) - (tptr - tformat), "%d", width);
+        /* Note: Can't use snprintf here since we are implementing this function... */
+       sprintf(tptr, "%d", width);
        tptr += strlen(tptr);
       }
       else
@@ -113,7 +115,8 @@ _cups_vsnprintf(char       *buffer, /* O - Output buffer */
          format ++;
          prec = va_arg(ap, int);
 
-         snprintf(tptr, sizeof(tformat) - (tptr - tformat), "%d", prec);
+          /* Note: Can't use snprintf here since we are implementing this function... */
+         sprintf(tptr, "%d", prec);
          tptr += strlen(tptr);
        }
        else
@@ -171,6 +174,7 @@ _cups_vsnprintf(char       *buffer, /* O - Output buffer */
            if ((width + 2) > sizeof(temp))
              break;
 
+            /* Note: Can't use snprintf here since we are implementing this function... */
            sprintf(temp, tformat, va_arg(ap, double));
            templen = strlen(temp);
 
@@ -202,6 +206,7 @@ _cups_vsnprintf(char       *buffer, /* O - Output buffer */
            if ((width + 2) > sizeof(temp))
              break;
 
+           /* Note: Can't use snprintf here since we are implementing this function... */
            sprintf(temp, tformat, va_arg(ap, int));
            templen = strlen(temp);
 
@@ -226,6 +231,7 @@ _cups_vsnprintf(char       *buffer, /* O - Output buffer */
            if ((width + 2) > sizeof(temp))
              break;
 
+           /* Note: Can't use snprintf here since we are implementing this function... */
            sprintf(temp, tformat, va_arg(ap, void *));
            templen = strlen(temp);
 
@@ -317,7 +323,8 @@ _cups_vsnprintf(char       *buffer, /* O - Output buffer */
   * Nul-terminate the string and return the number of characters needed.
   */
 
-  *bufptr = '\0';
+  if (bufptr && bufptr < bufend)
+       *bufptr = '\0';
 
   return (bytes);
 }
index cf945df98a6d3d24fb1051c0ff344911e1cb0a8d..16ac40db7cc8a2b5ca375081b8fe15f67ed01f35 100644 (file)
@@ -24,7 +24,7 @@
  * Constants...
  */
 
-#define MAX_CLIENTS    1             /* Maximum number of client threads */
+#define MAX_CLIENTS    100             /* Maximum number of client threads */
 
 
 /*
@@ -44,12 +44,12 @@ typedef struct _client_data_s
   int                  grayscale,      /* Force grayscale? */
                        keepfile;       /* Keep temporary file? */
   ipp_pstate_t         printer_state;  /* Current printer state */
-  char                  printer_state_reasons[1024];
-                                        /* Current printer-state-reasons */
+  char                 printer_state_reasons[1024];
+                                       /* Current printer-state-reasons */
   int                  job_id;         /* Job ID for submitted job */
   ipp_jstate_t         job_state;      /* Current job state */
-  char                  job_state_reasons[1024];
-                                        /* Current job-state-reasons */
+  char                 job_state_reasons[1024];
+                                       /* Current job-state-reasons */
 } _client_data_t;
 
 
@@ -66,12 +66,12 @@ static int          verbosity = 0;
  * Local functions...
  */
 
-static const char       *make_raster_file(ipp_t *response, int grayscale, char *tempname, size_t tempsize, const char **format);
-static void            *monitor_printer(_client_data_t *data);
+static const char      *make_raster_file(ipp_t *response, int grayscale, char *tempname, size_t tempsize, const char **format);
+static void            *monitor_printer(_client_data_t *data);
 static void            *run_client(_client_data_t *data);
-static void             show_attributes(const char *title, int request, ipp_t *ipp);
-static void             show_capabilities(ipp_t *response);
-static void             usage(void);
+static void            show_attributes(const char *title, int request, ipp_t *ipp);
+static void            show_capabilities(ipp_t *response);
+static void            usage(void);
 
 
 /*
@@ -396,15 +396,7 @@ make_raster_file(ipp_t      *response,  /* I - Printer attributes */
   * Figure out the the media, resolution, and color mode...
   */
 
-  if ((attr = ippFindAttribute(response, "media-default", IPP_TAG_KEYWORD)) != NULL)
-  {
-   /*
-    * Use default media...
-    */
-
-    media = pwgMediaForPWG(ippGetString(attr, 0, NULL));
-  }
-  else if ((attr = ippFindAttribute(response, "media-ready", IPP_TAG_KEYWORD)) != NULL)
+  if ((attr = ippFindAttribute(response, "media-ready", IPP_TAG_KEYWORD)) != NULL)
   {
    /*
     * Use ready media...
@@ -417,6 +409,14 @@ make_raster_file(ipp_t      *response,  /* I - Printer attributes */
     else
       media = pwgMediaForPWG(ippGetString(attr, 0, NULL));
   }
+  else if ((attr = ippFindAttribute(response, "media-default", IPP_TAG_KEYWORD)) != NULL)
+  {
+   /*
+    * Use default media...
+    */
+
+    media = pwgMediaForPWG(ippGetString(attr, 0, NULL));
+  }
   else
   {
     puts("No default or ready media reported by printer, aborting.");
@@ -486,15 +486,15 @@ make_raster_file(ipp_t      *response,  /* I - Printer attributes */
 
   header.cupsInteger[CUPS_RASTER_PWG_TotalPageCount] = 1;
 
-  if (header.cupsWidth > (4 * header.HWResolution[0]))
+  if (header.cupsWidth > (2 * header.HWResolution[0]))
   {
     xoff = header.HWResolution[0] / 2;
     yoff = header.HWResolution[1] / 2;
   }
   else
   {
-    xoff = 0;
-    yoff = 0;
+    xoff = header.HWResolution[0] / 4;
+    yoff = header.HWResolution[1] / 4;
   }
 
   xrep = (header.cupsWidth - 2 * xoff) / 140;
@@ -603,6 +603,8 @@ make_raster_file(ipp_t      *response,  /* I - Printer attributes */
   for (y = 0; y < header.cupsHeight; y ++)
     cupsRasterWritePixels(ras, line, header.cupsBytesPerLine);
 
+  free(line);
+
   cupsRasterClose(ras);
 
   close(fd);
@@ -768,11 +770,8 @@ run_client(
   ipp_attribute_t *attr;               /* Attribute in response */
   static const char * const pattrs[] =  /* Printer attributes we are interested in */
   {
-    "job-template",
-    "printer-defaults",
-    "printer-description",
-    "media-col-database",
-    "media-col-ready"
+    "all",
+    "media-col-database"
   };
 
 
index a65e09960d84cd1219e8c1f010331595f023a2d0..9b07e77718fb161c2c5a92cb1b72f7e9d8079062 100644 (file)
@@ -410,7 +410,6 @@ print_file(http_t        *http,             /* I - Connection to destination */
 {
   cups_file_t  *fp;                    /* File to print */
   int          job_id;                 /* Job ID */
-  ipp_status_t status;                 /* Submission status */
   const char   *title;                 /* Title of job */
   char         buffer[32768];          /* File buffer */
   ssize_t      bytes;                  /* Bytes read/to write */
@@ -427,7 +426,7 @@ print_file(http_t        *http,             /* I - Connection to destination */
   else
     title = filename;
 
-  if ((status = cupsCreateDestJob(http, dest, dinfo, &job_id, title, num_options, options)) > IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED)
+  if (cupsCreateDestJob(http, dest, dinfo, &job_id, title, num_options, options) > IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED)
   {
     printf("Unable to create job: %s\n", cupsLastErrorString());
     cupsFileClose(fp);
@@ -454,7 +453,7 @@ print_file(http_t        *http,             /* I - Connection to destination */
 
   cupsFileClose(fp);
 
-  if ((status = cupsFinishDestDocument(http, dest, dinfo)) > IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED)
+  if (cupsFinishDestDocument(http, dest, dinfo) > IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED)
   {
     printf("Unable to send document: %s\n", cupsLastErrorString());
     return;
index d3dab4bbcc52dce158a2a41b8b53c276ff336972..de72a4bfbbfed5d57860256099ac91e4c238993b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Raster test program routines for CUPS.
  *
- * Copyright © 2007-2018 by Apple Inc.
+ * Copyright © 2007-2019 by Apple Inc.
  * Copyright © 1997-2007 by Easy Software Products.
  *
  * Licensed under Apache License v2.0.  See the file "LICENSE" for more
@@ -22,8 +22,7 @@
 
 static int     do_ras_file(const char *filename);
 static int     do_raster_tests(cups_mode_t mode);
-static void    print_changes(cups_page_header2_t *header,
-                             cups_page_header2_t *expected);
+static void    print_changes(cups_page_header2_t *header, cups_page_header2_t *expected);
 
 
 /*
@@ -174,6 +173,8 @@ do_raster_tests(cups_mode_t mode)   /* O - Write mode */
     header.cupsPageSize[0]  = 288.0f;
     header.cupsPageSize[1]  = 288.0f;
 
+    strlcpy(header.MediaType, "auto", sizeof(header.MediaType));
+
     if (page & 1)
     {
       header.cupsBytesPerLine *= 4;
@@ -308,6 +309,8 @@ do_raster_tests(cups_mode_t mode)   /* O - Write mode */
     expected.PageSize[0]      = 288;
     expected.PageSize[1]      = 288;
 
+    strlcpy(expected.MediaType, "auto", sizeof(expected.MediaType));
+
     if (mode != CUPS_RASTER_WRITE_PWG)
     {
       expected.cupsPageSize[0] = 288.0f;
index b3bd50bf819e1d7e5a0422ae543371fce87ec8cb..0741a320e7081ebb293b5095bd0ca705bbc27383 100644 (file)
@@ -1,7 +1,8 @@
 /*
  * TLS support code for CUPS on macOS.
  *
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2021 by OpenPrinting
+ * Copyright © 2007-2021 by Apple Inc.
  * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
  *
  * Licensed under Apache License v2.0.  See the file "LICENSE" for more
@@ -291,7 +292,7 @@ cupsMakeServerCredentials(
     else
       tls_selfsigned = ident;
 
-    _cupsMutexLock(&tls_mutex);
+    _cupsMutexUnlock(&tls_mutex);
 
 #  if 0 /* Someday perhaps SecItemCopyMatching will work for identities, at which point  */
     CFTypeRef itemKeys[] = { kSecClass, kSecAttrLabel, kSecValueRef };
index 329cc0eb42e4183f9efd1615111f4c417379bf95..ffe1aa695b40d00a7bd96b5dbe7c04aa297d392a 100644 (file)
@@ -659,7 +659,7 @@ httpCredentialsString(
   if (!buffer)
     return (0);
 
-  if (buffer && bufsize > 0)
+  if (bufsize > 0)
     *buffer = '\0';
 
   if ((first = (http_credential_t *)cupsArrayFirst(credentials)) != NULL &&
@@ -939,7 +939,7 @@ http_gnutls_default_path(char   *buffer,/* I - Path buffer */
                                        /* Pointer to library globals */
 
 
-  if (cg->home)
+  if (cg->home && getuid())
   {
     snprintf(buffer, bufsize, "%s/.cups", cg->home);
     if (access(buffer, 0))
@@ -1516,8 +1516,7 @@ _httpTLSStart(http_t *http)               /* I - Connection to server */
 
     DEBUG_printf(("4_httpTLSStart: Using certificate \"%s\" and private key \"%s\".", crtfile, keyfile));
 
-    if (!status)
-      status = gnutls_certificate_set_x509_key_file(*credentials, crtfile, keyfile, GNUTLS_X509_FMT_PEM);
+    status = gnutls_certificate_set_x509_key_file(*credentials, crtfile, keyfile, GNUTLS_X509_FMT_PEM);
   }
 
   if (!status)
index ccbdf8aaf0648d94b0d9019c4885f20fcd58cea0..52ded5f21f6f43f55e482d4844f839559b55a298 100644 (file)
@@ -1332,8 +1332,6 @@ http_sspi_client(http_t     *http,        /* I - Client connection */
   SecBufferDesc        outBuffer;              /* Array of SecBuffer structs */
   SecBuffer    outBuffers[1];          /* Security package buffer */
   int          ret = 0;                /* Return value */
-  char         username[1024],         /* Current username */
-               common_name[1024];      /* CN=username */
 
 
   DEBUG_printf(("4http_sspi_client(http=%p, hostname=\"%s\")", http, hostname));
@@ -1349,16 +1347,11 @@ http_sspi_client(http_t     *http,      /* I - Client connection */
   * Lookup the client certificate...
   */
 
-  dwSize = sizeof(username);
-  GetUserNameA(username, &dwSize);
-  snprintf(common_name, sizeof(common_name), "CN=%s", username);
-
-  if (!http_sspi_find_credentials(http, L"ClientContainer", common_name))
-    if (!http_sspi_make_credentials(http->tls, L"ClientContainer", common_name, _HTTP_MODE_CLIENT, 10))
-    {
-      DEBUG_puts("5http_sspi_client: Unable to get client credentials.");
-      return (-1);
-    }
+  if (!http_sspi_find_credentials(http, L"ClientContainer", NULL))
+  {
+    DEBUG_puts("5http_sspi_client: Unable to get client credentials.");
+    return (-1);
+  }
 
  /*
   * Initiate a ClientHello message and generate a token.
@@ -1711,48 +1704,55 @@ http_sspi_find_credentials(
     goto cleanup;
   }
 
-  dwSize = 0;
-
-  if (!CertStrToNameA(X509_ASN_ENCODING, common_name, CERT_OID_NAME_STR, NULL, NULL, &dwSize, NULL))
+  if (common_name)
   {
-    DEBUG_printf(("5http_sspi_find_credentials: CertStrToName failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), GetLastError())));
-    ok = FALSE;
-    goto cleanup;
-  }
+    dwSize = 0;
 
-  p = (PBYTE)malloc(dwSize);
+    if (!CertStrToNameA(X509_ASN_ENCODING, common_name, CERT_OID_NAME_STR, NULL, NULL, &dwSize, NULL))
+    {
+      DEBUG_printf(("5http_sspi_find_credentials: CertStrToName failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), GetLastError())));
+      ok = FALSE;
+      goto cleanup;
+    }
 
-  if (!p)
-  {
-    DEBUG_printf(("5http_sspi_find_credentials: malloc failed for %d bytes.", dwSize));
-    ok = FALSE;
-    goto cleanup;
-  }
+    p = (PBYTE)malloc(dwSize);
 
-  if (!CertStrToNameA(X509_ASN_ENCODING, common_name, CERT_OID_NAME_STR, NULL, p, &dwSize, NULL))
-  {
-    DEBUG_printf(("5http_sspi_find_credentials: CertStrToName failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), GetLastError())));
-    ok = FALSE;
-    goto cleanup;
-  }
+    if (!p)
+    {
+      DEBUG_printf(("5http_sspi_find_credentials: malloc failed for %d bytes.", dwSize));
+      ok = FALSE;
+      goto cleanup;
+    }
 
-  sib.cbData = dwSize;
-  sib.pbData = p;
+    if (!CertStrToNameA(X509_ASN_ENCODING, common_name, CERT_OID_NAME_STR, NULL, p, &dwSize, NULL))
+    {
+      DEBUG_printf(("5http_sspi_find_credentials: CertStrToName failed: %s", http_sspi_strerror(sspi->error, sizeof(sspi->error), GetLastError())));
+      ok = FALSE;
+      goto cleanup;
+    }
 
-  storedContext = CertFindCertificateInStore(store, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0, CERT_FIND_SUBJECT_NAME, &sib, NULL);
+    sib.cbData = dwSize;
+    sib.pbData = p;
 
-  if (!storedContext)
-  {
-    DEBUG_printf(("5http_sspi_find_credentials: Unable to find credentials for \"%s\".", common_name));
-    ok = FALSE;
-    goto cleanup;
+    storedContext = CertFindCertificateInStore(store, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0, CERT_FIND_SUBJECT_NAME, &sib, NULL);
+
+    if (!storedContext)
+    {
+      DEBUG_printf(("5http_sspi_find_credentials: Unable to find credentials for \"%s\".", common_name));
+      ok = FALSE;
+      goto cleanup;
+    }
   }
 
   ZeroMemory(&SchannelCred, sizeof(SchannelCred));
 
   SchannelCred.dwVersion = SCHANNEL_CRED_VERSION;
-  SchannelCred.cCreds    = 1;
-  SchannelCred.paCred    = &storedContext;
+
+  if (common_name)
+  {
+    SchannelCred.cCreds = 1;
+    SchannelCred.paCred = &storedContext;
+  }
 
  /*
   * Set supported protocols (can also be overriden in the registry...)
@@ -2017,13 +2017,6 @@ http_sspi_make_credentials(
   SchannelCred.cCreds    = 1;
   SchannelCred.paCred    = &storedContext;
 
- /*
-  * SSPI doesn't seem to like it if grbitEnabledProtocols is set for a client.
-  */
-
-  if (mode == _HTTP_MODE_SERVER)
-    SchannelCred.grbitEnabledProtocols = SP_PROT_SSL3TLS1;
-
  /*
   * Create an SSPI credential.
   */
index c88e7d09150d89bacf557db0ed00fe4e45d07e9d..4b0be1f83b8f1f939e26a6d2fe5988362ddd1b65 100644 (file)
@@ -22,7 +22,7 @@ int main(void) { puts("Sorry, no TLS support compiled in."); return (1); }
  * Local functions...
  */
 
-static void    usage(void);
+static void    usage(void) _CUPS_NORETURN;
 
 
 /*
index 34c6debb35d3f7b57345c9059f778763f6db89e0..150bacdbcc7b4efe098eb5f7ff55d5bc75414c9b 100644 (file)
@@ -1,82 +1,41 @@
-<HTML>
+<!DOCTYPE html>
+<html>
 <!-- SECTION: Getting Started -->
-<HEAD>
-       <TITLE>Using CGI Programs</TITLE>
-       <LINK REL="STYLESHEET" TYPE="text/css" HREF="../cups-printable.css">
-</HEAD>
-<BODY>
+  <head>
+    <title>Using CGI Programs</title>
+    <link rel="stylesheet" type="text/css" href="../cups-printable.css">
+  </head>
+  <body>
+    <h1 class="title">Using CGI Programs</h1>
 
-<H1 CLASS="title">Using CGI Programs</H1>
+    <p>CUPS provides a dynamic web interface through dedicated CGI programs that are executed when users open special directories on the CUPS server. Each CGI performs administration, class, help, job, and printer functions as directed by the user, but the actual programs that are run and functions that are available are limited to those that were originally designed into the scheduler.</p>
 
-<P>CUPS provides a dynamic web interface through dedicated CGI programs that
-are executed when users open special directories on the CUPS server. Each CGI
-performs administration, class, help, job, and printer functions as directed by
-the user, but the actual programs that are run and functions that are available
-are limited to those that were originally designed into the scheduler.</P>
+    <p>CUPS also supports CGI scripts/programs for pages you want to provide, although this functionality is disabled by default. The "application/x-httpd-cgi" MIME media type is used to identify CGI content and can be associated with any filename extension. The scheduler requires CGI content to have the execute bit set, not have world or group write permissions, and any CGI scripts need to include a <tt>#!</tt> line as the first line of a script to identify the script interpreter. For example, a PHP script would look like:</p>
 
-<P>CUPS also supports CGI programs and specific scripting languages (Java, Perl,
-PHP, and Python) for pages you want to provide.  The interpreters for these
-languages are currently configured at compile time and are associated with
-MIME media types. <a href="#TABLE1">Table 1</a> shows the MIME media types that
-are reserved for each type of page and are the same as those used by the Apache
-web server.</P>
+    <pre class="example">
+#!/usr/bin/php -fn
+&lt;?php
+...
+?&gt;
+</pre>
 
-<DIV CLASS="table"><TABLE SUMMARY="CGI MIME Media Types">
-<CAPTION><A NAME="TABLE1">Table 1</A>: CGI MIME Media Types</CAPTION>
-<TR>
-       <TH>MIME Media Type</TH>
-       <TH>Description</TH>
-</TR>
-<TR>
-       <TD>application/x-httpd-cgi</TD>
-       <TD>CGI script/program</TD>
-</TR>
-<TR>
-       <TD>application/x-httpd-java</TD>
-       <TD>Java program</TD>
-</TR>
-<TR>
-       <TD>application/x-httpd-perl</TD>
-       <TD>Perl script</TD>
-</TR>
-<TR>
-       <TD>application/x-httpd-php</TD>
-       <TD>PHP script</TD>
-</TR>
-<TR>
-       <TD>application/x-httpd-python</TD>
-       <TD>Python script</TD>
-</TR>
-</TABLE></DIV>
 
-<H2><A NAME="CONFIG">Configuring the Server</A></H2>
+    <h2><a name="CONFIG">Configuring the Server</a></h2>
 
-<P>In order to enable the corresponding type, you must create a
-new <VAR>/etc/cups/cgi.types</VAR> file which maps the filename
-extensions to the appropriate MIME types, for example:</P>
+    <p>In order to enable the corresponding type, you must create a new <var>/etc/cups/cgi.types</var> file which maps the filename extensions you use to the appropriate MIME types. For example, the following will support CGI programs/scripts with the "cgi" extension:</p>
 
-<PRE CLASS="command">
+    <pre class="command">
 application/x-httpd-cgi cgi
-application/x-httpd-java class
-application/x-httpd-perl pl
-application/x-httpd-php php
-application/x-httpd-python py
-</PRE>
+</pre>
 
-<P>CGI scripts/programs (application/x-httpd-cgi) also must be owned by root, have execution permissions, and not have world or group write permissions to be treated as a CGI script or program.</P>
 
-<H2><A NAME="LIMITS">Limitations</A></H2>
+    <h2><a name="LIMITS">Limitations</a></h2>
 
-<P>CUPS implements most of the CGI/1.1 specification, with the
-following exceptions:</P>
+    <p>CUPS implements most of the CGI/1.1 specification, with the following exceptions:</p>
 
-<UL>
-
-       <LI>No PATH_INFO or PATH_TRANSLATED support</LI>
-
-       <LI>Limited HTTP field support; only the Content-Length (CONTENT_LENGTH), Content-Type (CONTENT_TYPE), Cookie (HTTP_COOKIE), Referrer (HTTP_REFERRER), and User-Agent (HTTP_USER_AGENT) fields are placed in environment variables at this time</LI>
-
-</UL>
-
-</BODY>
-</HTML>
+    <ul>
+      <li>No PATH_INFO or PATH_TRANSLATED support</li>
+      <li>Limited HTTP field support; only the Content-Length (<tt>CONTENT_LENGTH</tt>), Content-Type (<tt>CONTENT_TYPE</tt>), Cookie (<tt>HTTP_COOKIE</tt>), Referrer (<tt>HTTP_REFERRER</tt>), and User-Agent (<tt>HTTP_USER_AGENT</tt>) fields are placed in environment variables at this time</li>
+    </ul>
+  </body>
+</html>
index 9b48cde34cc490afce03ed4b5e8249a3bcaaa32f..677f2bc3c6e9cb73e0da598a06eaa4c9882b6390 100644 (file)
@@ -7,8 +7,8 @@
     <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
     <meta name="creator" content="codedoc v3.1">
     <meta name="author" content="Michael R Sweet">
-    <meta name="copyright" content="Copyright &#xa9; 2007-2019 by Apple Inc. All Rights Reserved.">
-    <meta name="version" content="2.3.1">
+    <meta name="copyright" content="Copyright &#xa9; 2007-2022 by Apple Inc. All Rights Reserved.">
+    <meta name="version" content="2.3.6">
     <style type="text/css"><!--
 body, p, h1, h2, h3, h4 {
   font-family: sans-serif;
@@ -174,7 +174,7 @@ h3.title {
   <body>
     <h1 class="title">CUPS Programming Manual</h1>
     <p>Michael R Sweet</p>
-    <p>Copyright &#xa9; 2007-2019 by Apple Inc. All Rights Reserved.</p>
+    <p>Copyright &#xa9; 2007-2020 by Apple Inc. All Rights Reserved.</p>
     <div class="contents">
       <h2 class="title">Contents</h2>
       <ul class="contents">
index 1668eee8afdaef64d82a191596e85e1ea7df382b..70e00b5be1612ab0550da954f5cc73f27ef4111f 100644 (file)
@@ -145,9 +145,6 @@ The default is "5".
 <dd style="margin-left: 5.0em"><dt><b>KeepAlive No</b>
 <dd style="margin-left: 5.0em">Specifies whether to support HTTP keep-alive connections.
 The default is "Yes".
-<dt><a name="KeepAliveTimeout"></a><b>KeepAliveTimeout </b><i>seconds</i>
-<dd style="margin-left: 5.0em">Specifies how long an idle client connection remains open.
-The default is "30".
 <dt><a name="LimitIPP"></a><b>&lt;Limit </b><i>operation </i>...<b>> </b>... <b>&lt;/Limit></b>
 <dd style="margin-left: 5.0em">Specifies the IPP operations that are being limited inside a Policy section. IPP operation names are listed below in the section "IPP OPERATION NAMES".
 <dt><a name="Limit"></a><b>&lt;Limit </b><i>method </i>...<b>> </b>... <b>&lt;/Limit></b>
@@ -163,11 +160,6 @@ The default is "0" which disables the limit check.
 <dd style="margin-left: 5.0em">Listens to the specified address and port or domain socket path for connections.
 Multiple Listen directives can be provided to listen on multiple addresses.
 The Listen directive is similar to the Port directive but allows you to restrict access to specific interfaces or networks.
-<dt><a name="ListenBackLog"></a><b>ListenBackLog </b><i>number</i>
-<dd style="margin-left: 5.0em">Specifies the number of pending connections that will be allowed.
-This normally only affects very busy servers that have reached the MaxClients limit, but can also be triggered by large numbers of simultaneous connections.
-When the limit is reached, the operating system will refuse additional connections until the scheduler can accept the pending ones.
-The default is the OS-defined default limit, typically either "5" for older operating systems or "128" for newer operating systems.
 <dt><a name="Location"></a><b>&lt;Location </b><i>/path</i><b>> </b>... <b>&lt;/Location></b>
 <dd style="margin-left: 5.0em">Specifies access control for the named location.
 Paths are documented below in the section "LOCATION PATHS".
@@ -556,6 +548,9 @@ The default is no classification banner.
 <dd style="margin-left: 5.0em"><br>
 Specifies whether users may override the classification (cover page) of individual print jobs using the "job-sheets" option.
 The default is "No".
+<dt><a name="ListenBackLog"></a><b>ListenBackLog </b><i>number</i>
+<dd style="margin-left: 5.0em">Specified the number of pending connections that will be allowed.
+The scheduler now uses the value "128" on all platforms.
 <dt><a name="PageLogFormat"></a><b>PageLogFormat </b><i>format-string</i>
 <dd style="margin-left: 5.0em">Specifies the format of PageLog lines.
 Sequences beginning with percent (%) characters are replaced with the corresponding information, while all other characters are copied literally.
@@ -624,7 +619,7 @@ Require authentication for accesses from outside the 10. network:
 <b>subscriptions.conf</b>(5),
 CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>)
 <h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright &copy; 2007-2019 by Apple Inc.
+Copyright &copy; 2007-2021 by Apple Inc.
 
 </body>
 </html>
index d37d6355965b410eed5aed7af06e1c550d8c7c63..bcd91ae48036b423cfa0556445f50f8b68b9071c 100644 (file)
@@ -16,10 +16,15 @@ ippeveprinter - an ipp everywhere printer application for cups
 ] [
 <b>--no-web-forms</b>
 ] [
+<b>--pam-service</b>
+<i>service</i>
+] [
 <b>--version</b>
 ] [
 <b>-2</b>
 ] [
+<b>-A</b>
+] [
 <b>-D</b>
 <i>device-uri</i>
 ] [
@@ -87,10 +92,17 @@ The following options are recognized by
 <dd style="margin-left: 5.0em">Show program usage.
 <dt><b>--no-web-forms</b>
 <dd style="margin-left: 5.0em">Disable the web interface forms used to update the media and supply levels.
+<dt><b>--pam-service </b><i>service</i>
+<dd style="margin-left: 5.0em">Set the PAM service name.
+The default service is "cups".
 <dt><b>--version</b>
 <dd style="margin-left: 5.0em">Show the CUPS version.
 <dt><b>-2</b>
 <dd style="margin-left: 5.0em">Report support for two-sided (duplex) printing.
+<dt><b>-A</b>
+<dd style="margin-left: 5.0em">Enable authentication for the created printer.
+<b>ippeveprinter</b>
+uses PAM to authenticate HTTP Basic credentials.
 <dt><b>-D </b><i>device-uri</i>
 <dd style="margin-left: 5.0em">Set the device URI for print output.
 The URI can be a filename, directory, or a network socket URI of the form "socket://ADDRESS[:PORT]" (where the default port number is 9100).
@@ -149,6 +161,8 @@ command.
 <dt><b>-p </b><i>port</i>
 <dd style="margin-left: 5.0em">Specifies the port number to listen on.
 The default is a user-specific number from 8000 to 8999.
+<dt><b>-r</b><b>off</b>
+<dd style="margin-left: 5.0em">Turns off DNS-SD service advertisements entirely.
 <dt><b>-r </b><i>subtype[,subtype]</i>
 <dd style="margin-left: 5.0em">Specifies the DNS-SD subtype(s) to advertise.
 Separate multiple subtypes with a comma.
index 5f9b86212b744c6809cbc89966191d8f5c63a67c..c908fa709408a5df39bfe3da203429991a2d2138 100644 (file)
@@ -36,6 +36,8 @@ ipptool - perform internet printing protocol requests
 <b>-P</b>
 <i>filename.plist</i>
 ] [
+<b>-R</b>
+] [
 <b>-S</b>
 ] [
 <b>-T</b>
@@ -128,6 +130,8 @@ The default is to use "Transfer-Encoding: chunked" for requests with attached fi
 <dt><b>-P</b><i> filename.plist</i>
 <dd style="margin-left: 5.0em">Specifies that the test results should be written to the named XML (Apple plist) file in addition to the regular test report (<b>-t</b>).
 This option is incompatible with the <b>-i</b> (interval) and <b>-n</b> (repeat-count) options.
+<dt><b>-R</b>
+<dd style="margin-left: 5.0em">Retries tests when the "server-error-busy" status code is returned.
 <dt><b>-S</b>
 <dd style="margin-left: 5.0em">Forces (dedicated) TLS encryption when connecting to the server.
 <dt><b>-T</b><i> seconds</i>
@@ -225,7 +229,7 @@ IANA IPP Registry (<a href="http://www.iana.org/assignments/ipp\-registrations)"
 PWG Internet Printing Protocol Workgroup (<a href="http://www.pwg.org/ipp">http://www.pwg.org/ipp</a>)
 RFC 8011 (<a href="http://tools.ietf.org/html/rfc8011)">http://tools.ietf.org/html/rfc8011)</a>,
 <h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright &copy; 2007-2019 by Apple Inc.
+Copyright &copy; 2007-2021 by Apple Inc.
 
 </body>
 </html>
index e0f6727d783527285b7ea989b936b2f5bea1376f..95d4a5660d6f8e9ff2cc5531deade7b4fdd1358a 100644 (file)
@@ -175,6 +175,9 @@ test report.
 <dd style="margin-left: 5.0em">Specifies whether
 <b>ipptool</b>(8)
 will ignore errors and continue with subsequent tests.
+<dt><b>MONITOR-PRINTER-STATE </b>[ <i>printer-uri </i>] <b>{ EXPECT </b><i>attribute-name </i>[ <i>predicate(s) </i>] <b>}</b>
+<dd style="margin-left: 5.0em">Specifies printer state monitoring tests to run in parallel with the test operation.
+The monitoring tests will run until all of the <b>EXPECT</b> conditions are satisfied or the primary test operation has completed, whichever occurs first.
 <dt><b>NAME "</b><i>literal string</i><b>"</b>
 <dd style="margin-left: 5.0em">Specifies the human-readable name of the test.
 <dt><b>OPERATION </b><i>operation-code</i>
@@ -219,19 +222,25 @@ The following predicates are understood following the <b>EXPECT</b> test directi
 <dt><b>COUNT </b><i>number</i>
 <dd style="margin-left: 5.0em">Requires the <b>EXPECT</b> attribute to have the specified number of values.
 <dt><b>DEFINE-MATCH </b><i>variable-name</i>
-<dd style="margin-left: 5.0em">Defines the variable to "1" when the <b>EXPECT</b> condition matches. A side-effect of this predicate is that this <b>EXPECT</b> will never fail a test.
+<dd style="margin-left: 5.0em">Defines the variable to "1" when the <b>EXPECT</b> condition matches.
+A side-effect of this predicate is that this <b>EXPECT</b> will never fail a test.
 <dt><b>DEFINE-NO-MATCH </b><i>variable-name</i>
-<dd style="margin-left: 5.0em">Defines the variable to "1" when the <b>EXPECT</b> condition does not match. A side-effect of this predicate is that this <b>EXPECT</b> will never fail a test.
+<dd style="margin-left: 5.0em">Defines the variable to "1" when the <b>EXPECT</b> condition does not match.
+A side-effect of this predicate is that this <b>EXPECT</b> will never fail a test.
 <dt><b>DEFINE-VALUE </b><i>variable-name</i>
-<dd style="margin-left: 5.0em">Defines the variable to the value of the attribute when the <b>EXPECT</b> condition matches. A side-effect of this predicate is that this <b>EXPECT</b> will never fail a test.
+<dd style="margin-left: 5.0em">Defines the variable to the value of the attribute when the <b>EXPECT</b> condition matches.
+A side-effect of this predicate is that this <b>EXPECT</b> will never fail a test.
+<dt><b>DISPLAY-MATCH </b><i>"message"</i>
+<dd style="margin-left: 5.0em">Displays the specified message when the <b>EXPECT</b> condition matches.
 <dt><b>IF-DEFINED </b><i>variable-name</i>
 <dd style="margin-left: 5.0em">Makes the <b>EXPECT</b> conditions apply only if the specified variable is defined.
 <dt><b>IF-NOT-DEFINED </b><i>variable-name</i>
 <dd style="margin-left: 5.0em">Makes the <b>EXPECT</b> conditions apply only if the specified variable is not defined.
 <dt><b>IN-GROUP </b><i>tag</i>
 <dd style="margin-left: 5.0em">Requires the <b>EXPECT</b> attribute to be in the specified group tag.
-<dt><b>OF-TYPE </b><i>tag[|tag,...]</i>
+<dt><b>OF-TYPE </b><i>tag[(limits)|tag|...]</i>
 <dd style="margin-left: 5.0em">Requires the <b>EXPECT</b> attribute to use one of the specified value tag(s).
+Most value tags also support the specification of limits in parenthesis, for example "name(42)" would allow nameWith/WithoutLanguage strings up to 42 octets in length, "name(4:MAX)" would allow nameWith/WithoutLanguage strings between 4 and 255 octets in length, and "integer(-273:MAX)" would allow integers between -273 and 2147483647.
 <dt><b>REPEAT-LIMIT </b><i>number</i>
 <dd style="margin-left: 5.0em"><br>
 Specifies the maximum number of times to repeat if the <b>REPEAT-MATCH</b> or <b>REPEAT-NO-MATCH</b> predicate is specified. The default value is 1000.
@@ -260,7 +269,12 @@ Specifies the maximum number of times to repeat if the <b>REPEAT-MATCH</b> or <b
 <dd style="margin-left: 5.0em"><dt><b>WITH-ALL-VALUES "true"</b>
 <dd style="margin-left: 5.0em">Requires that all values of the <b>EXPECT</b> attribute match the boolean value given.
 <dt><b>WITH-ALL-VALUES "/</b><i>regular expression</i><b>/"</b>
-<dd style="margin-left: 5.0em">Requires that all values of the <b>EXPECT</b> attribute match the regular expression, which must conform to the POSIX regular expression syntax. Comparisons are case-sensitive.
+<dd style="margin-left: 5.0em">Requires that all values of the <b>EXPECT</b> attribute match the regular expression, which must conform to the POSIX regular expression syntax.
+Comparisons are case-sensitive.
+<dt><b>WITH-DISTINCT-VALUES</b>
+<dd style="margin-left: 5.0em">Requires that all values of the <b>EXPECT</b> attribute are unique.
+Comparisons are case-sensitive.
+Only charset, collection, enum, integer, keyword, mimeMediaType, naturalLanguage, rangeOfInteger, resolution, uriScheme attributes support this predicate.
 <dt><b>WITH-HOSTNAME "</b><i>literal string</i><b>"</b>
 <dd style="margin-left: 5.0em"><dt><b>WITH-HOSTNAME "/</b><i>regular expression</i><b>/"</b>
 <dd style="margin-left: 5.0em">Requires that at least one URI value contains a matching hostname.
@@ -536,7 +550,7 @@ IANA IPP Registry (<a href="http://www.iana.org/assignments/ipp-registrations)">
 PWG Internet Printing Protocol Workgroup (<a href="http://www.pwg.org/ipp)">http://www.pwg.org/ipp)</a>,
 RFC 8011 (<a href="http://tools.ietf.org/html/rfc8011">http://tools.ietf.org/html/rfc8011</a>)
 <h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright &copy; 2007-2019 by Apple Inc.
+Copyright &copy; 2007-2021 by Apple Inc.
 
 </body>
 </html>
index 8f0ad313d7b78f8e51e24fb8d2654a87e9ca6f0a..f9702dad371c0cb68f0535382eba868b3b4bf6f0 100644 (file)
@@ -10,7 +10,7 @@
 <!--
   IPP specification for CUPS.
 
-  Copyright © 2007-2016 by Apple Inc.
+  Copyright © 2007-2023 by Apple Inc.
   Copyright © 1997-2007 by Easy Software Products.
 
   Licensed under Apache License v2.0.  See the file "LICENSE" for more
@@ -1886,6 +1886,76 @@ CUPS-Get-PPDs Response:
 <h4>printer-type-mask (type2 enum)<span class='info'>CUPS 1.1</span></h4>
 
 <p>The "printer-type-mask" attribute is used to choose printers or classes with the CUPS-Get-Printers and CUPS-Get-Classes operations. The bits are defined identically to the printer-type attribute and default to all 1's.
+</p>
+
+<h4>printer-wifi-password (octetString(MAX))</h4>
+
+<p>The optional "printer-wifi-password" description attribute provides the wireless network password for a printer.
+Printers must not return this attribute in the response to a Get-Printer-Attributes request.
+This attribute can only be set via an authenticated Set-Printer-Attributes request over a secure channel,
+or via an unauthenticated IPP USB connection when the printer is in its initial setup state.
+When a value for this attribute is not set, the 'wifi-not-configured-report' keyword must be present in the
+"printer-state-reasons" printer attribute values. If a printer supports this attribute, it must also support
+the "printer-wifi-ssid" and "printer-wifi-state" attributes.</p>
+
+<h4>printer-wifi-ssid (name(MAX))</h4>
+
+<p>The optional "printer-wifi-ssid" description attribute specifies the wireless network name for the printer.
+When set to the empty string, the printer must not join infrastructure or ad-hoc networks.
+This attribute can only be set via an authenticated Set-Printer-Attributes request over a secure channel,
+or via an unauthenticated IPP USB connection when the printer is in its initial setup state.
+This attribute also must reflect any configuration done by the user through the printer's web interface,
+control panel, or other interface. When a value for this attribute is not set, the 'wifi-not-configured-report'
+keyword must be present in the "printer-state-reasons" printer attribute values.
+If a printer supports this attribute, it must also support the "printer-wifi-password" and
+"printer-wifi-state" attributes.</p>
+
+<p>Printers that support the Set-Printer-Attribtes operation and "printer-wifi-password" and "printer-wifi-ssid"
+printer description attributes must also support unauthenticated Set-Printer-Attributes requests over USB when Wi-Fi
+networking has not yet been configured. This allows a client to configure the Wi-Fi networking of a printer over USB.</p>
+
+<p>When configuring a wireless network, clients must send both the "printer-wifi-ssid" and "printer-wifi-password"
+printer description attributes. If only one attribute is supplied, the printer must reject the request with the
+client-error-bad-request status code. If either attribute is supplied with an invalid value,
+the printer must reject the request with the client-error-attributes-or-values-not-supported status code.</p>
+
+In addition to other defined printer-state-reasons, the 'wifi-not-configured-report' reason is returned when the
+"printer-wifi-password" and "printer-wifi-ssid" printer description attributes are not set,
+regardless of the value of the "printer-wifi-state" printer status attribute.
+
+<h4>printer-wifi-state (type2 enum)</h4>
+
+<p>The optional "printer-wifi-state" status attribute specifies a printer's current wireless network state as
+an enumerated value. The following values are currently defined:</p>
+
+<div class='table'><table align='center' border='1' width='80%' summary='Wireless Networking State'>
+<tbody>
+<tr>
+       <td>3</td>
+       <td>(off) wireless networking is turned off</td>
+</tr>
+<tr>
+       <td>4</td>
+       <td>(not-configured) wireless networking is not yet configured</td>
+</tr>
+<tr>
+       <td>5</td>
+       <td>(not-visible) the configured wireless network is not visible</td>
+</tr>
+<tr>
+       <td>6</td>
+       <td>(cannot-join) unable to join the configured wireless network</td>
+</tr>
+<tr>
+       <td>7</td>
+       <td>(joining) joining the configured wireless network</td>
+</tr>
+<tr>
+       <td>8</td>
+       <td>(on) joined to the configured wireless network</td>
+</tr>
+</tbody>
+</table></div>
 
 <h4>requesting-user-name-allowed (1setof name(127))<span class='info'>CUPS 1.1</span></h4>
 
diff --git a/doc/test.cgi b/doc/test.cgi
new file mode 100755 (executable)
index 0000000..6d98759
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+echo "Content-Type: text/plain"
+echo ""
+echo "POSIX shell CGI test page."
+echo ""
+echo "ps ax"
+ps ax
diff --git a/doc/test.php b/doc/test.php
new file mode 100755 (executable)
index 0000000..f33a54f
--- /dev/null
@@ -0,0 +1,20 @@
+#!/usr/bin/php -nf
+<?php
+print("Content-Type: text/html\n\n");
+print("<!DOCTYPE html>\n"
+     ."<html>\n"
+     ."  <head>\n"
+     ."    <title>PHP script CGI test page</title>\n"
+     ."  </head>\n"
+     ."  <body>\n"
+     ."    <h1>PHP script CGI test page</h1>\n"
+     ."    <pre><kbd>ps ax</kbd>\n");
+$fp = popen("ps ax", "r");
+while ($line = fgets($fp, 1024))
+{
+  print(htmlspecialchars($line));
+}
+print("</pre>\n"
+     ."  </body>\n"
+     ."</html>\n");
+?>
index bad0a31e37f548da258823067d42a0cd3594bcb8..46bbf08483b154c1e7d1826cddfed5abb869cc67 100644 (file)
@@ -1,60 +1,60 @@
-All work and no play makes Johhny a dull boy.  All work and no\r
-play makes Johhny a dull boy.  All work and no play makes Johhny\r
-a dull boy.  All work and no play makes Johhny a dull boy.  All\r
-work and no play makes Johhny a dull boy.  All work and no play\r
-makes Johhny a dull boy.  All work and no play makes Johhny a\r
-dull boy.  All work and no play makes Johhny a dull boy.  All\r
-work and no play makes Johhny a dull boy.  All work and no play\r
-makes Johhny a dull boy.  All work and no play makes Johhny a\r
-dull boy. All work and no play makes Johhny a dull boy.  All\r
-work and no play makes Johhny a dull boy.  All work and no play\r
-makes Johhny a dull boy.  All work and no play makes Johhny a\r
-dull boy.  All work and no play makes Johhny a dull boy.  All\r
-work and no play makes Johhny a dull boy.  All work and no play\r
-makes Johhny a dull boy.  All work and no play makes Johhny a\r
-dull boy.  All work and no play makes Johhny a dull boy.  All\r
-work and no play makes Johhny a dull boy.  All work and no play\r
-makes Johhny a dull boy. All work and no play makes Johhny a\r
-dull boy.  All work and no play makes Johhny a dull boy.  All\r
-work and no play makes Johhny a dull boy.  All work and no play\r
-makes Johhny a dull boy.  All work and no play makes Johhny a\r
-dull boy.  All work and no play makes Johhny a dull boy.  All\r
-work and no play makes Johhny a dull boy.  All work and no play\r
-makes Johhny a dull boy.  All work and no play makes Johhny a\r
-dull boy.  All work and no play makes Johhny a dull boy.  All\r
-work and no play makes Johhny a dull boy. All work and no play\r
-makes Johhny a dull boy.  All work and no play makes Johhny a\r
-dull boy.  All work and no play makes Johhny a dull boy.  All\r
-work and no play makes Johhny a dull boy.  All work and no play\r
-makes Johhny a dull boy.  All work and no play makes Johhny a\r
-dull boy.  All work and no play makes Johhny a dull boy.  All\r
-work and no play makes Johhny a dull boy.  All work and no play\r
-makes Johhny a dull boy.  All work and no play makes Johhny a\r
-dull boy.  All work and no play makes Johhny a dull boy. All\r
-work and no play makes Johhny a dull boy.  All work and no play\r
-makes Johhny a dull boy.  All work and no play makes Johhny a\r
-dull boy.  All work and no play makes Johhny a dull boy.  All\r
-work and no play makes Johhny a dull boy.  All work and no play\r
-makes Johhny a dull boy.  All work and no play makes Johhny a\r
-dull boy.  All work and no play makes Johhny a dull boy.  All\r
-work and no play makes Johhny a dull boy.  All work and no play\r
-makes Johhny a dull boy.  All work and no play makes Johhny a\r
-dull boy. All work and no play makes Johhny a dull boy.  All\r
-work and no play makes Johhny a dull boy.  All work and no play\r
-makes Johhny a dull boy.  All work and no play makes Johhny a\r
-dull boy.  All work and no play makes Johhny a dull boy.  All\r
-work and no play makes Johhny a dull boy.  All work and no play\r
-makes Johhny a dull boy.  All work and no play makes Johhny a\r
-dull boy.  All work and no play makes Johhny a dull boy.  All\r
-work and no play makes Johhny a dull boy.  All work and no play\r
-makes Johhny a dull boy. All work and no play makes Johhny a\r
-dull boy.  All work and no play makes Johhny a dull boy.  All\r
-work and no play makes Johhny a dull boy.  All work and no play\r
-makes Johhny a dull boy.  All work and no play makes Johhny a\r
-dull boy.  All work and no play makes Johhny a dull boy.  All\r
-work and no play makes Johhny a dull boy.  All work and no play\r
-makes Johhny a dull boy.  All work and no play makes Johhny a\r
-dull boy.  All work and no play makes Johhny a dull boy.  All\r
-work and no play makes Johhny a dull boy. All work and no play\r
-makes Johhny a dull boy.  All work and no play makes Johhny a\r
-dull boy.  All work and no play makes Johhny a dull boy.\r
+All work and no play makes Johhny a dull boy.  All work and no
+play makes Johhny a dull boy.  All work and no play makes Johhny
+a dull boy.  All work and no play makes Johhny a dull boy.  All
+work and no play makes Johhny a dull boy.  All work and no play
+makes Johhny a dull boy.  All work and no play makes Johhny a
+dull boy.  All work and no play makes Johhny a dull boy.  All
+work and no play makes Johhny a dull boy.  All work and no play
+makes Johhny a dull boy.  All work and no play makes Johhny a
+dull boy. All work and no play makes Johhny a dull boy.  All
+work and no play makes Johhny a dull boy.  All work and no play
+makes Johhny a dull boy.  All work and no play makes Johhny a
+dull boy.  All work and no play makes Johhny a dull boy.  All
+work and no play makes Johhny a dull boy.  All work and no play
+makes Johhny a dull boy.  All work and no play makes Johhny a
+dull boy.  All work and no play makes Johhny a dull boy.  All
+work and no play makes Johhny a dull boy.  All work and no play
+makes Johhny a dull boy. All work and no play makes Johhny a
+dull boy.  All work and no play makes Johhny a dull boy.  All
+work and no play makes Johhny a dull boy.  All work and no play
+makes Johhny a dull boy.  All work and no play makes Johhny a
+dull boy.  All work and no play makes Johhny a dull boy.  All
+work and no play makes Johhny a dull boy.  All work and no play
+makes Johhny a dull boy.  All work and no play makes Johhny a
+dull boy.  All work and no play makes Johhny a dull boy.  All
+work and no play makes Johhny a dull boy. All work and no play
+makes Johhny a dull boy.  All work and no play makes Johhny a
+dull boy.  All work and no play makes Johhny a dull boy.  All
+work and no play makes Johhny a dull boy.  All work and no play
+makes Johhny a dull boy.  All work and no play makes Johhny a
+dull boy.  All work and no play makes Johhny a dull boy.  All
+work and no play makes Johhny a dull boy.  All work and no play
+makes Johhny a dull boy.  All work and no play makes Johhny a
+dull boy.  All work and no play makes Johhny a dull boy. All
+work and no play makes Johhny a dull boy.  All work and no play
+makes Johhny a dull boy.  All work and no play makes Johhny a
+dull boy.  All work and no play makes Johhny a dull boy.  All
+work and no play makes Johhny a dull boy.  All work and no play
+makes Johhny a dull boy.  All work and no play makes Johhny a
+dull boy.  All work and no play makes Johhny a dull boy.  All
+work and no play makes Johhny a dull boy.  All work and no play
+makes Johhny a dull boy.  All work and no play makes Johhny a
+dull boy. All work and no play makes Johhny a dull boy.  All
+work and no play makes Johhny a dull boy.  All work and no play
+makes Johhny a dull boy.  All work and no play makes Johhny a
+dull boy.  All work and no play makes Johhny a dull boy.  All
+work and no play makes Johhny a dull boy.  All work and no play
+makes Johhny a dull boy.  All work and no play makes Johhny a
+dull boy.  All work and no play makes Johhny a dull boy.  All
+work and no play makes Johhny a dull boy.  All work and no play
+makes Johhny a dull boy. All work and no play makes Johhny a
+dull boy.  All work and no play makes Johhny a dull boy.  All
+work and no play makes Johhny a dull boy.  All work and no play
+makes Johhny a dull boy.  All work and no play makes Johhny a
+dull boy.  All work and no play makes Johhny a dull boy.  All
+work and no play makes Johhny a dull boy.  All work and no play
+makes Johhny a dull boy.  All work and no play makes Johhny a
+dull boy.  All work and no play makes Johhny a dull boy.  All
+work and no play makes Johhny a dull boy. All work and no play
+makes Johhny a dull boy.  All work and no play makes Johhny a
+dull boy.  All work and no play makes Johhny a dull boy.
index 672b7c8cd5ff5c617a647c3242c946ed10c91d75..e0cbcd384083025743d0e2af37f50150a70a468c 100644 (file)
@@ -301,7 +301,7 @@ WriteLabelProlog(const char *label, /* I - Page label */
 
   if ((classification = getenv("CLASSIFICATION")) == NULL)
     classification = "";
-  if (strcmp(classification, "none") == 0)
+  else if (strcmp(classification, "none") == 0)
     classification = "";
 
  /*
index 0d76c42a28e79416e7ddcb4351c51034e27bca0d..5f7fa1ba9e9f6db3cd7ea1da32cd657917f3fbf0 100644 (file)
@@ -813,8 +813,7 @@ main(int  argc,                             /* I - Number of command-line arguments */
 
   Shutdown();
 
-  if (ppd)
-    ppdClose(ppd);
+  ppdClose(ppd);
 
  /*
   * Close the raster stream...
index 35d678db730a409341d86e86a5d3069590ce8d96..73ac4d76eb9c8ebaedb0e8dc78280ed9274f8785 100644 (file)
 
 
 /*
- * This driver filter currently supports Dymo, Intellitech, and Zebra
+ * This driver filter currently supports DYMO, Intellitech, and Zebra
  * label printers.
  *
- * The Dymo portion of the driver has been tested with the 300, 330,
- * and 330 Turbo label printers; it may also work with other models.
- * The Dymo printers support printing at 136, 203, and 300 DPI.
+ * The DYMO portion of the driver has been tested with the 300, 330,
+ * 330 Turbo, and 450 Twin Turbo label printers; it may also work with other
+ * models.  The DYMO printers support printing at 136, 203, and 300 DPI.
  *
  * The Intellitech portion of the driver has been tested with the
  * Intellibar 408, 412, and 808 and supports their PCL variant.
@@ -43,7 +43,7 @@
  * Model number constants...
  */
 
-#define DYMO_3x0       0               /* Dymo Labelwriter 300/330/330 Turbo */
+#define DYMO_3x0       0               /* DYMO Labelwriter 300/330/330 Turbo */
 
 #define ZEBRA_EPL_LINE 0x10            /* Zebra EPL line mode printers */
 #define ZEBRA_EPL_PAGE 0x11            /* Zebra EPL page mode printers */
@@ -191,6 +191,7 @@ StartPage(ppd_file_t         *ppd,  /* I - PPD file */
        printf("\033D%c", header->cupsBytesPerLine);
 
        printf("\033%c", header->cupsCompression + 'c'); /* Darkness */
+       printf("\033q%d", header->MediaPosition + 1);    /* Roll Select */
        break;
 
     case ZEBRA_EPL_LINE :
diff --git a/filter/rastertopdf.cpp b/filter/rastertopdf.cpp
new file mode 100644 (file)
index 0000000..55c39b1
--- /dev/null
@@ -0,0 +1,478 @@
+/*
+ * Raster filter to pdf
+ *
+ * Copyright © 2022 by Apple Inc.
+ *
+ * Licensed under Apache License v2.0.  See the file "LICENSE" for more
+ * information.
+ *
+ * see <https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf> for complete spec
+ * see <https://zlib.net/manual.html> for zlib documentation
+ *
+ * To build with zlib:
+ *    g++ -c -g -Os -o rastertopdf.o rastertopdf.cpp
+ *    cc -o rasterToPDF rastertopdf.o -lz -lstdc++ `cups-config --libs`
+ *
+ * To build without zlib: This will produce very large pdf files.
+ *    g++ -DDeflateData=0 -c -g -Os -o rastertopdf.o rastertopdf.cpp
+ *    cc -o rasterToPDF rastertopdf.o -lstdc++ `cups-config --libs`
+ */
+
+#include <cups/cups.h>
+#include <cups/raster.h>
+#include <cups/backend.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <libgen.h>
+#include <limits.h>
+#include <signal.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <vector>
+
+
+#ifndef __has_include
+    static_assert(false, "__has_include not supported");
+#endif
+
+#if ( !defined(DeflateData) )
+    #if __has_include(<zlib.h>)
+        #define DeflateData 1
+        #include <zlib.h>
+    #else
+        #define DeflateData 0
+    #endif
+#elif ( DeflateData )
+    #if __has_include(<zlib.h>)
+        #include <zlib.h>
+    #else
+        #warning 'zlib.h' does not exits.
+        #undef DeflateData
+        #define DeflateData 0
+    #endif
+#endif
+
+static int Canceled = 0;        /* Has the current job been canceled? */
+
+// MARK: - Misc  -
+static int rasterToPDFColorSpace( cups_cspace_t colorSpace, int bitsPerPixel, int *bitsPerComponent, char *cs, size_t csLen )
+{
+    switch (colorSpace)
+    {
+        case CUPS_CSPACE_W:
+        case CUPS_CSPACE_SW:
+            *bitsPerComponent = bitsPerPixel;
+            strncpy( cs, "[/CalGray << /Gamma 2.2 /WhitePoint[ 0.9505 1.0 1.089 ] >>]", csLen );
+        break;
+
+        case CUPS_CSPACE_RGB:
+        case CUPS_CSPACE_SRGB:
+            *bitsPerComponent = bitsPerPixel/3;
+            strncpy( cs, "[/CalRGB <<\n"
+                         "   /Gamma[ 2.2 2.2 2.2 ]\n"
+                         "   /Matrix[ 0.4124 0.2126 0.0193\n"
+                         "            0.3576 0.7152 0.1192\n"
+                         "            0.1805 0.0722 0.9505 ]\n"
+                         "   /WhitePoint[ 0.9505 1.0 1.089 ]\n"
+                         ">>]", csLen );
+        break;
+
+        default :
+            // AirPrint only requires sRGB and 2.2 gray.
+            // NOTE: This is not a general solution.
+            fprintf(stderr, "DEBUG: Unsupported colorspace %u.\n", colorSpace);
+            return -1;
+    }
+    return 0;
+}
+
+static void compressImageData(const unsigned char *inData,
+                              size_t inSize,
+                              unsigned char **outData,
+                              size_t *outSize )
+{
+    if (outData == NULL || outSize == NULL)
+    {
+        fprintf(stderr, "Invalid Parameters, Line:%d\n", __LINE__);
+        exit( EXIT_FAILURE );
+    }
+#if DeflateData
+    int err = ENOMEM;
+    
+    *outSize = compressBound( (uLongf)inSize );
+    *outData = (unsigned char *)malloc( *outSize );
+    
+    if (*outData != NULL) err = compress( *outData, outSize, inData, inSize );
+    
+    if (err != 0)
+    {
+        fprintf( stderr, "Failed to %s data, Line:%d\n", (*outData ? "compress" : "allocate"), __LINE__);
+
+        if (*outData) free( *outData );
+
+        *outData = (unsigned char *)inData;
+        *outSize = inSize;
+    }
+#else
+    *outData = (unsigned char *)inData;
+    *outSize = inSize;
+#endif
+}
+
+// MARK: - PDF Stuff -
+static long writeImageObject(FILE *pdfFile,
+                             unsigned int imageReference,
+                             unsigned int width,
+                             unsigned int height,
+                             int interpolate,
+                             int bitsPerComponent,
+                             char colorspace[64],
+                             const unsigned char *rasterData,
+                             size_t rasterDataSize )
+{
+    unsigned char *data = NULL;
+    size_t size;
+    long objectOffset = 0;
+    
+    compressImageData( rasterData, rasterDataSize, &data, &size );
+
+    fprintf(pdfFile, "\n%u 0 obj\n", imageReference );
+    objectOffset = ftell(pdfFile);
+    fprintf(pdfFile, "<< /Type /XObject\n"
+                     "   /Subtype /Image\n"
+                     "   /Width %u\n"
+                     "   /Height %u\n"
+                     "   /Interpolate %s\n"
+                     "   /ColorSpace %s\n"
+                     "   /BitsPerComponent %d\n"
+                     "   /Length %zu\n", width, height, (interpolate ? "true" : "false"), colorspace, bitsPerComponent, rasterDataSize );
+
+    if (rasterData != data)
+        fprintf(pdfFile, "   /Filter /FlateDecode\n");
+
+    fprintf(pdfFile, ">>\nstream\n" );
+    fwrite( data, size, 1, pdfFile );
+    fprintf(pdfFile, "\nendstream"
+                     "\nendobj\n");
+
+    // free the data the was allocated in compressImageData
+    if (rasterData != data) free( data );
+
+    return objectOffset;
+}
+
+static long writePageStream(FILE *pdfFile,
+                            unsigned int streamReference,
+                            int width,
+                            int height,
+                            int pageNumber)
+{
+    long objectOffset = 0;
+    char imageStream[64];
+    
+    snprintf( imageStream, sizeof( imageStream ), "q %d 0 0 %d 0 0 cm /Im%u Do Q", width, height, pageNumber );
+    
+    fprintf(pdfFile, "\n%u 0 obj\n", streamReference );
+    objectOffset = ftell(pdfFile);
+    fprintf(pdfFile, "<< /Length %zu >>\n"
+                     "stream\n"
+                     "%s"
+                     "\nendstream"
+                     "\nendobj\n", strlen(imageStream), imageStream );
+
+    return objectOffset;
+}
+
+static long writePageObject(FILE *pdfFile,
+                            unsigned int pageReference,
+                            unsigned int resouceReference,
+                            unsigned int contentReference,
+                            int width,
+                            int height)
+{
+    long objectOffset = 0;
+
+    fprintf(pdfFile, "\n%u 0 obj\n", pageReference );
+    objectOffset = ftell(pdfFile);
+    fprintf(pdfFile, "<< /Type /Page\n"
+                     "   /Parent 2 0 R\n"
+                     "   /Resources %u 0 R\n"
+                     "   /Contents %u 0 R\n"
+                     "   /MediaBox [0 0 %d %d]\n"
+                     ">>\nendobj\n", resouceReference, contentReference, width, height );
+
+    return objectOffset;
+}
+
+static long writeResourceObject(FILE *pdfFile,
+                                unsigned int rsrcReference,
+                                unsigned int contentReference,
+                                unsigned int page )
+{
+    long objectOffset = 0;
+
+    fprintf(pdfFile, "\n%u 0 obj\n", rsrcReference );
+    objectOffset = ftell(pdfFile);
+    fprintf(pdfFile, "<< /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im%u %u 0 R >> >>\nendobj\n", page, contentReference );
+
+    return objectOffset;
+}
+
+static long writePagesObject( FILE *pdfFile, std::vector<unsigned int> pages )
+{
+    long objectOffset = 0;
+
+    fprintf(pdfFile, "\n2 0 obj\n");
+    objectOffset = ftell(pdfFile);
+    fprintf(pdfFile, "<< /Type /Pages /Count %lu /Kids [", (unsigned long)pages.size());
+    for (unsigned int i : pages )
+    {
+        fprintf( pdfFile, " %d 0 R", i );
+    }
+    fprintf(pdfFile, " ] >>\nendobj\n");
+
+    return objectOffset;
+}
+
+static long writeCatalogObject( FILE *pdfFile, unsigned int objectReference )
+{
+    long objectOffset = 0;
+
+    fprintf(pdfFile, "\n%u 0 obj\n", objectReference);
+    objectOffset = ftell(pdfFile);
+    fprintf(pdfFile, "<< /Type /Catalog /Pages 2 0 R >>\n");
+    fprintf(pdfFile, "endobj\n");
+
+    return objectOffset;
+}
+
+static void writeTrailerObject(FILE *pdfFile,
+                               unsigned int catalogReference,
+                               unsigned long numObjects,
+                               long startXOffset)
+{
+    fprintf( pdfFile, "trailer\n"
+                       "<< /Root %u 0 R\n"
+                       "   /Size %lu >>\n"
+                       "startxref\n"
+                       "%ld\n"
+                       "%%%%EOF\n", catalogReference, numObjects, startXOffset);
+}
+
+static long writeXRefTable( FILE *pdfFile, std::vector<long> offsets, long startOffset )
+{
+    long objectOffset = ftell(pdfFile);
+    fprintf( pdfFile, "xref\n"
+                      "0 %lu\n"
+                      "0000000000 65535 f\n", (unsigned long)(offsets.size() + 1) );
+    for (long offset : offsets )
+    {
+        fprintf( pdfFile, "%010ld 00000 n\n", offset - startOffset );
+    }
+    return objectOffset;
+}
+
+static long writeHeader( FILE *pdfFile )
+{
+    fprintf(pdfFile, "%%PDF-1.3\n");
+
+    return ftell(pdfFile);
+}
+
+// MARK: - Work -
+static int convertCUPSRasterToPDF( int rasterIn )
+{
+    #define kInitialImageReferenceID 10
+    int err = 0;
+    int pages = 0;
+    unsigned int objectReference = kInitialImageReferenceID;
+    unsigned int catalogReference = objectReference++;
+    
+    long startOffset;
+    long offset;
+
+    float width = 0;
+    float height = 0;
+
+    size_t largestAllocatedMemory = 0;
+    unsigned char *rasterData = NULL;
+
+    std::vector<unsigned int> pageReferences;
+    std::vector<long> objectOffsets;
+    cups_raster_t *rasterFile = NULL;
+    cups_page_header2_t pageHeader;
+
+    FILE *pdfFile = stdout;
+
+    rasterFile = cupsRasterOpen(rasterIn, CUPS_RASTER_READ);
+    if (rasterFile == NULL)
+    {
+        err = errno;
+        fprintf(stderr, "ERROR: Error reading raster data.\n");
+        perror("DEBUG: cupsRasterOpen failed to open the file");
+        goto bail;
+    }
+
+    startOffset = writeHeader( pdfFile );
+    while ( !Canceled && cupsRasterReadHeader2(rasterFile, &pageHeader) )
+    {
+        char colorspace[256];
+        int bitsPerComponent = 8;
+
+        fprintf(stderr, "PAGE: %d %d\n", pages+1, pageHeader.NumCopies);
+        fprintf(stderr, "DEBUG:%04d] pageHeader.colorSpace=%u, .bitsPerPixel=%u, .duplexMode=%u\n",
+                pages, pageHeader.cupsColorSpace, pageHeader.cupsBitsPerPixel, pageHeader.Duplex);
+        fprintf(stderr, "DEBUG:      pageHeader.width=%u, .height=%u, .resolution=%u x %u\n",
+                pageHeader.cupsWidth, pageHeader.cupsHeight, pageHeader.HWResolution[0], pageHeader.HWResolution[1]);
+
+        int status = rasterToPDFColorSpace( pageHeader.cupsColorSpace, pageHeader.cupsBitsPerPixel, &bitsPerComponent, colorspace, sizeof(colorspace) );
+        if (status)
+        {
+            fprintf( stderr, "INFO: Unable to determine a colorspace. skipping this page.\n" );
+            continue;
+        }
+
+        size_t imageSize = pageHeader.cupsHeight * pageHeader.cupsBytesPerLine;
+        if (imageSize > largestAllocatedMemory)
+        {
+            rasterData = (unsigned char *)(rasterData == NULL ? malloc(imageSize) : realloc(rasterData, imageSize));
+            largestAllocatedMemory = imageSize;
+        }
+
+        if (rasterData == NULL)
+        {
+            fprintf(stderr, "ERROR: Unable to allocate memory for page info\n");
+            err = -1;
+            break;
+        }
+        
+        size_t result = (size_t) cupsRasterReadPixels(rasterFile, rasterData, (unsigned int)imageSize);
+        if (result != imageSize)
+        {
+            err = -2;
+            fprintf(stderr, "ERROR: Unable to read print data.\n");
+            fprintf(stderr, "DEBUG: cupsRasterReadPixels faild on page:%d (%zu of %zu bytes read)\n", pages+1, result, imageSize );
+            break;
+        }
+
+        width = 72.0 * pageHeader.cupsWidth / pageHeader.HWResolution[1];
+        height = 72.0 * pageHeader.cupsHeight / pageHeader.HWResolution[0];
+
+        unsigned int pageReference  = objectReference++;
+        unsigned int rsrcReference  = objectReference++;
+        unsigned int streamReference = objectReference++;
+        unsigned int imageReference = objectReference++;
+        int interpolate = 0;
+        
+        offset = writePageStream(pdfFile, streamReference, width, height, pages+1 );
+        objectOffsets.push_back( offset );
+
+        offset = writePageObject(pdfFile,
+                                 pageReference,
+                                 rsrcReference,
+                                 streamReference,
+                                 width,
+                                 height);
+        objectOffsets.push_back( offset );
+
+        offset = writeResourceObject(pdfFile, rsrcReference, imageReference, pages+1 );
+        objectOffsets.push_back( offset );
+
+        offset = writeImageObject(pdfFile,
+                                  imageReference,
+                                  pageHeader.cupsWidth,
+                                  pageHeader.cupsHeight,
+                                  interpolate,
+                                  bitsPerComponent,
+                                  colorspace,
+                                  rasterData,
+                                  imageSize);
+        objectOffsets.push_back( offset );
+
+        pageReferences.push_back( pageReference );
+        pages++;
+    }
+
+    offset = writePagesObject( pdfFile, pageReferences );
+    objectOffsets.push_back( offset );
+
+    offset = writeCatalogObject( pdfFile, catalogReference );
+    objectOffsets.push_back( offset );
+
+    offset = writeXRefTable( pdfFile, objectOffsets, startOffset );
+
+    writeTrailerObject( pdfFile, catalogReference,
+                       objectOffsets.size() + 1, offset - startOffset );
+bail:
+    if ( pdfFile != NULL )    fclose( pdfFile );
+    if ( rasterFile != NULL ) cupsRasterClose(rasterFile);
+    if ( rasterIn != -1 )     close( rasterIn );
+    if ( rasterData )         free( rasterData );
+
+    return err;
+}
+
+static void sigterm_handler(int sig)
+{
+  (void)sig;
+
+  Canceled = 1;
+}
+
+static void installSignalHandler( void )
+{
+#ifdef HAVE_SIGSET
+    sigset(SIGTERM, sigterm_handler);
+#elif defined(HAVE_SIGACTION)
+    struct sigaction action;        /* Actions for POSIX signals */
+    memset(&action, 0, sizeof(action));
+    
+    sigemptyset(&action.sa_mask);
+    sigaddset(&action.sa_mask, SIGTERM);
+    
+    action.sa_handler = sigterm_handler;
+    sigaction(SIGTERM, &action, NULL);
+#else
+    signal(SIGTERM, sigterm_handler);
+#endif /* HAVE_SIGSET */
+}
+
+// MARK: -
+int main(int argc, const char * argv[])
+{
+    int err = 0;
+
+    /*
+     * Make sure status messages are not buffered...
+     */
+    setbuf(stderr, NULL);
+
+    /*
+     * Check the command-line...
+     */
+    if (argc < 6 || argc > 7)
+    {
+        fprintf(stderr, "Usage: %s job-id user title copies options [file]\n",
+                argv[0]);
+        return (CUPS_BACKEND_FAILED);
+    }
+
+    /*
+     * Register a signal handler to eject the current page if the
+     * job is cancelled.
+     */
+     installSignalHandler();
+
+     int fd = fileno(stdin);
+     if (argc == 7)
+     {
+          if ((fd = open(argv[6], O_RDONLY)) < 0)
+          {
+               perror("ERROR: Unable to open file");
+               return (1);
+          }
+     }
+
+     err = convertCUPSRasterToPDF( fd );
+     return err;
+}
index fd2ddd07b5c0a4bd7dd4c226c793edd1df382e01..db081a50c4c23bfe2a343d7ec258a0ef09230cb8 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Message catalog template for CUPS.
 #
-# Copyright © 2007-2019 by Apple Inc.
+# Copyright © 2007-2020 by Apple Inc.
 # Copyright © 2005-2007 by Easy Software Products.
 #
 # Licensed under Apache License v2.0.  See the file "LICENSE" for more
@@ -23,9 +23,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: CUPS 2.3.0\n"
+"Project-Id-Version: CUPS 2.3.6\n"
 "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-08-23 09:13-0400\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1293,7 +1293,7 @@ msgid "%s is ready and printing"
 msgstr ""
 
 #: filter/rastertoepson.c:999 filter/rastertohp.c:668
-#: filter/rastertolabel.c:1120
+#: filter/rastertolabel.c:1121
 #, c-format
 msgid "%s job-id user title copies options [file]"
 msgstr ""
@@ -1680,12 +1680,12 @@ msgstr ""
 msgid "%s: Unknown option \"%c\"."
 msgstr ""
 
-#: tools/ippeveprinter.c:381 tools/ippeveprinter.c:566 tools/ippfind.c:627
+#: tools/ippeveprinter.c:414 tools/ippeveprinter.c:604 tools/ippfind.c:627
 #, c-format
 msgid "%s: Unknown option \"%s\"."
 msgstr ""
 
-#: tools/ippeveprinter.c:555 tools/ippfind.c:919 tools/ipptool.c:606
+#: tools/ippeveprinter.c:593 tools/ippfind.c:919 tools/ipptool.c:606
 #, c-format
 msgid "%s: Unknown option \"-%c\"."
 msgstr ""
@@ -1776,7 +1776,7 @@ msgstr ""
 msgid "--false                 Always false"
 msgstr ""
 
-#: tools/ippeveprinter.c:7665
+#: tools/ippeveprinter.c:7923
 msgid "--help                  Show program help"
 msgstr ""
 
@@ -1818,7 +1818,7 @@ msgstr ""
 msgid "--name regex            Match service name to regular expression"
 msgstr ""
 
-#: tools/ippeveprinter.c:7666
+#: tools/ippeveprinter.c:7924
 msgid "--no-web-forms          Disable web forms for media and supplies"
 msgstr ""
 
@@ -1826,6 +1826,10 @@ msgstr ""
 msgid "--not expression        Unary NOT of expression"
 msgstr ""
 
+#: tools/ippeveprinter.c:7925
+msgid "--pam-service service   Use the named PAM service"
+msgstr ""
+
 #: tools/ippfind.c:2792
 msgid "--path regex            Match resource path to regular expression"
 msgstr ""
@@ -1884,7 +1888,7 @@ msgstr ""
 msgid "--uri regex             Match URI to regular expression"
 msgstr ""
 
-#: tools/ippeveprinter.c:7667 tools/ippfind.c:2770
+#: tools/ippeveprinter.c:7926 tools/ippfind.c:2770
 msgid "--version               Show program version"
 msgstr ""
 
@@ -1892,83 +1896,83 @@ msgstr ""
 msgid "--version               Show version"
 msgstr ""
 
-#: ppdc/sample.c:305
+#: ppdc/sample.c:308
 msgid "-1"
 msgstr ""
 
-#: ppdc/sample.c:296
+#: ppdc/sample.c:299
 msgid "-10"
 msgstr ""
 
-#: ppdc/sample.c:388
+#: ppdc/sample.c:391
 msgid "-100"
 msgstr ""
 
-#: ppdc/sample.c:387
+#: ppdc/sample.c:390
 msgid "-105"
 msgstr ""
 
-#: ppdc/sample.c:295
+#: ppdc/sample.c:298
 msgid "-11"
 msgstr ""
 
-#: ppdc/sample.c:386
+#: ppdc/sample.c:389
 msgid "-110"
 msgstr ""
 
-#: ppdc/sample.c:385
+#: ppdc/sample.c:388
 msgid "-115"
 msgstr ""
 
-#: ppdc/sample.c:294
+#: ppdc/sample.c:297
 msgid "-12"
 msgstr ""
 
-#: ppdc/sample.c:384
+#: ppdc/sample.c:387
 msgid "-120"
 msgstr ""
 
-#: ppdc/sample.c:293
+#: ppdc/sample.c:296
 msgid "-13"
 msgstr ""
 
-#: ppdc/sample.c:292
+#: ppdc/sample.c:295
 msgid "-14"
 msgstr ""
 
-#: ppdc/sample.c:291
+#: ppdc/sample.c:294
 msgid "-15"
 msgstr ""
 
-#: ppdc/sample.c:304
+#: ppdc/sample.c:307
 msgid "-2"
 msgstr ""
 
-#: tools/ippeveprinter.c:7668
+#: tools/ippeveprinter.c:7927
 msgid "-2                      Set 2-sided printing support (default=1-sided)"
 msgstr ""
 
-#: ppdc/sample.c:404
+#: ppdc/sample.c:407
 msgid "-20"
 msgstr ""
 
-#: ppdc/sample.c:403
+#: ppdc/sample.c:406
 msgid "-25"
 msgstr ""
 
-#: ppdc/sample.c:303
+#: ppdc/sample.c:306
 msgid "-3"
 msgstr ""
 
-#: ppdc/sample.c:402
+#: ppdc/sample.c:405
 msgid "-30"
 msgstr ""
 
-#: ppdc/sample.c:401
+#: ppdc/sample.c:404
 msgid "-35"
 msgstr ""
 
-#: ppdc/sample.c:302
+#: ppdc/sample.c:305
 msgid "-4"
 msgstr ""
 
@@ -1976,27 +1980,27 @@ msgstr ""
 msgid "-4                      Connect using IPv4"
 msgstr ""
 
-#: ppdc/sample.c:400
+#: ppdc/sample.c:403
 msgid "-40"
 msgstr ""
 
-#: ppdc/sample.c:399
+#: ppdc/sample.c:402
 msgid "-45"
 msgstr ""
 
-#: ppdc/sample.c:301
+#: ppdc/sample.c:304
 msgid "-5"
 msgstr ""
 
-#: ppdc/sample.c:398
+#: ppdc/sample.c:401
 msgid "-50"
 msgstr ""
 
-#: ppdc/sample.c:397
+#: ppdc/sample.c:400
 msgid "-55"
 msgstr ""
 
-#: ppdc/sample.c:300
+#: ppdc/sample.c:303
 msgid "-6"
 msgstr ""
 
@@ -2004,50 +2008,54 @@ msgstr ""
 msgid "-6                      Connect using IPv6"
 msgstr ""
 
-#: ppdc/sample.c:396
+#: ppdc/sample.c:399
 msgid "-60"
 msgstr ""
 
-#: ppdc/sample.c:395
+#: ppdc/sample.c:398
 msgid "-65"
 msgstr ""
 
-#: ppdc/sample.c:299
+#: ppdc/sample.c:302
 msgid "-7"
 msgstr ""
 
-#: ppdc/sample.c:394
+#: ppdc/sample.c:397
 msgid "-70"
 msgstr ""
 
-#: ppdc/sample.c:393
+#: ppdc/sample.c:396
 msgid "-75"
 msgstr ""
 
-#: ppdc/sample.c:298
+#: ppdc/sample.c:301
 msgid "-8"
 msgstr ""
 
-#: ppdc/sample.c:392
+#: ppdc/sample.c:395
 msgid "-80"
 msgstr ""
 
-#: ppdc/sample.c:391
+#: ppdc/sample.c:394
 msgid "-85"
 msgstr ""
 
-#: ppdc/sample.c:297
+#: ppdc/sample.c:300
 msgid "-9"
 msgstr ""
 
-#: ppdc/sample.c:390
+#: ppdc/sample.c:393
 msgid "-90"
 msgstr ""
 
-#: ppdc/sample.c:389
+#: ppdc/sample.c:392
 msgid "-95"
 msgstr ""
 
+#: tools/ippeveprinter.c:7928
+msgid "-A                      Enable authentication"
+msgstr ""
+
 #: tools/ipptool.c:4314
 msgid "-C                      Send requests using chunking (default)"
 msgstr ""
@@ -2056,7 +2064,7 @@ msgstr ""
 msgid "-D description          Specify the textual description of the printer"
 msgstr ""
 
-#: tools/ippeveprinter.c:7669
+#: tools/ippeveprinter.c:7929
 msgid "-D device-uri           Set the device URI for the printer"
 msgstr ""
 
@@ -2066,7 +2074,7 @@ msgstr ""
 
 #: berkeley/lpq.c:644 berkeley/lpr.c:433 berkeley/lprm.c:234
 #: systemv/cancel.c:403 systemv/cupsaccept.c:244 systemv/cupsctl.c:233
-#: systemv/lp.c:752 systemv/lpadmin.c:1624 systemv/lpinfo.c:498
+#: systemv/lp.c:753 systemv/lpadmin.c:1624 systemv/lpinfo.c:498
 #: systemv/lpmove.c:217 systemv/lpoptions.c:540 systemv/lpstat.c:2045
 msgid "-E                      Encrypt the connection to the server"
 msgstr ""
@@ -2075,11 +2083,11 @@ msgstr ""
 msgid "-E                      Test with encryption using HTTP Upgrade to TLS"
 msgstr ""
 
-#: scheduler/main.c:2136
+#: scheduler/main.c:2138
 msgid "-F                      Run in the foreground but detach from console."
 msgstr ""
 
-#: tools/ippeveprinter.c:7670
+#: tools/ippeveprinter.c:7930
 msgid "-F output-type/subtype  Set the output format for the printer"
 msgstr ""
 
@@ -2087,23 +2095,23 @@ msgstr ""
 msgid "-H                      Show the default server and port"
 msgstr ""
 
-#: systemv/lp.c:754
+#: systemv/lp.c:755
 msgid "-H HH:MM                Hold the job until the specified UTC time"
 msgstr ""
 
-#: systemv/lp.c:755
+#: systemv/lp.c:756
 msgid "-H hold                 Hold the job until released/resumed"
 msgstr ""
 
-#: systemv/lp.c:756
+#: systemv/lp.c:757
 msgid "-H immediate            Print the job as soon as possible"
 msgstr ""
 
-#: systemv/lp.c:757
+#: systemv/lp.c:758
 msgid "-H restart              Reprint the job"
 msgstr ""
 
-#: systemv/lp.c:758
+#: systemv/lp.c:759
 msgid "-H resume               Resume a held job"
 msgstr ""
 
@@ -2121,7 +2129,7 @@ msgid ""
 "                          Ignore specific warnings"
 msgstr ""
 
-#: tools/ippeveprinter.c:7672
+#: tools/ippeveprinter.c:7932
 msgid "-K keypath              Set location of server X.509 certificates and keys."
 msgstr ""
 
@@ -2133,7 +2141,7 @@ msgstr ""
 msgid "-L location             Specify the textual location of the printer"
 msgstr ""
 
-#: tools/ippeveprinter.c:7674
+#: tools/ippeveprinter.c:7934
 msgid "-M manufacturer         Set manufacturer name (default=Test)"
 msgstr ""
 
@@ -2141,7 +2149,7 @@ msgstr ""
 msgid "-P destination          Show status for the specified destination"
 msgstr ""
 
-#: berkeley/lpr.c:450 berkeley/lprm.c:236
+#: berkeley/lpr.c:448 berkeley/lprm.c:236
 msgid "-P destination          Specify the destination"
 msgstr ""
 
@@ -2149,7 +2157,7 @@ msgstr ""
 msgid "-P filename.plist       Produce XML plist to a file and test report to standard output"
 msgstr ""
 
-#: tools/ippeveprinter.c:7675
+#: tools/ippeveprinter.c:7935
 msgid "-P filename.ppd         Load printer attributes from PPD file"
 msgstr ""
 
@@ -2157,7 +2165,7 @@ msgstr ""
 msgid "-P number[-number]      Match port to number or range"
 msgstr ""
 
-#: systemv/lp.c:774
+#: systemv/lp.c:775
 msgid "-P page-list            Specify a list of pages to print"
 msgstr ""
 
@@ -2190,7 +2198,7 @@ msgid "-T title                Specify the job title"
 msgstr ""
 
 #: berkeley/lpq.c:648 berkeley/lpr.c:452 berkeley/lprm.c:237
-#: systemv/cancel.c:406 systemv/cupsaccept.c:247 systemv/lp.c:778
+#: systemv/cancel.c:406 systemv/cupsaccept.c:247 systemv/lp.c:779
 #: systemv/lpadmin.c:1652 systemv/lpinfo.c:502 systemv/lpmove.c:219
 #: systemv/lpoptions.c:545 systemv/lpstat.c:2048
 msgid "-U username             Specify the username to use for authentication"
@@ -2200,7 +2208,7 @@ msgstr ""
 msgid "-U username             Specify username to use for authentication"
 msgstr ""
 
-#: tools/ippeveprinter.c:7676 tools/ippfind.c:2769 tools/ipptool.c:4321
+#: tools/ippeveprinter.c:7936 tools/ippfind.c:2769 tools/ipptool.c:4321
 msgid "-V version              Set default IPP version"
 msgstr ""
 
@@ -2234,7 +2242,7 @@ msgstr ""
 msgid "-a [destination(s)]     Show the accepting state of destinations"
 msgstr ""
 
-#: tools/ippeveprinter.c:7677
+#: tools/ippeveprinter.c:7937
 msgid "-a filename.conf        Load printer attributes from conf file"
 msgstr ""
 
@@ -2254,11 +2262,11 @@ msgstr ""
 msgid "-c class                Add the named destination to a class"
 msgstr ""
 
-#: tools/ippeveprinter.c:7678
+#: tools/ippeveprinter.c:7938
 msgid "-c command              Set print command"
 msgstr ""
 
-#: scheduler/main.c:2134
+#: scheduler/main.c:2136
 msgid "-c cupsd.conf           Set cupsd.conf file to use."
 msgstr ""
 
@@ -2274,6 +2282,10 @@ msgstr ""
 msgid "-d destination          Set the named destination as the server default"
 msgstr ""
 
+#: systemv/lp.c:752
+msgid "-d destination          Specify the destination"
+msgstr ""
+
 #: tools/ipptool.c:4324
 msgid "-d name=value           Set named variable to value"
 msgstr ""
@@ -2282,7 +2294,7 @@ msgstr ""
 msgid "-d regex                Match domain to regular expression"
 msgstr ""
 
-#: tools/ippeveprinter.c:7679
+#: tools/ippeveprinter.c:7939
 msgid "-d spool-directory      Set spool directory"
 msgstr ""
 
@@ -2290,7 +2302,7 @@ msgstr ""
 msgid "-e                      Show available destinations on the network"
 msgstr ""
 
-#: scheduler/main.c:2135
+#: scheduler/main.c:2137
 msgid "-f                      Run in the foreground."
 msgstr ""
 
@@ -2298,11 +2310,11 @@ msgstr ""
 msgid "-f filename             Set default request filename"
 msgstr ""
 
-#: tools/ippeveprinter.c:7680
+#: tools/ippeveprinter.c:7940
 msgid "-f type/subtype[,...]   Set supported file types"
 msgstr ""
 
-#: scheduler/main.c:2137
+#: scheduler/main.c:2139
 msgid "-h                      Show this usage message."
 msgstr ""
 
@@ -2315,17 +2327,17 @@ msgid "-h regex                Match hostname to regular expression"
 msgstr ""
 
 #: berkeley/lpq.c:645 berkeley/lprm.c:235 systemv/cancel.c:404
-#: systemv/cupsaccept.c:245 systemv/cupsctl.c:234 systemv/lp.c:753
+#: systemv/cupsaccept.c:245 systemv/cupsctl.c:234 systemv/lp.c:754
 #: systemv/lpadmin.c:1626 systemv/lpinfo.c:499 systemv/lpmove.c:218
 #: systemv/lpoptions.c:541 systemv/lpstat.c:2046
 msgid "-h server[:port]        Connect to the named server and port"
 msgstr ""
 
-#: tools/ippeveprinter.c:7681
+#: tools/ippeveprinter.c:7941
 msgid "-i iconfile.png         Set icon file"
 msgstr ""
 
-#: systemv/lp.c:759
+#: systemv/lp.c:760
 msgid "-i id                   Specify an existing job ID to modify"
 msgstr ""
 
@@ -2337,7 +2349,7 @@ msgstr ""
 msgid "-i seconds              Repeat the last file with the given time interval"
 msgstr ""
 
-#: tools/ippeveprinter.c:7682
+#: tools/ippeveprinter.c:7942
 msgid "-k                      Keep job spool files"
 msgstr ""
 
@@ -2349,7 +2361,7 @@ msgstr ""
 msgid "-l                      Produce plain text output"
 msgstr ""
 
-#: scheduler/main.c:2139
+#: scheduler/main.c:2141
 msgid "-l                      Run cupsd on demand."
 msgstr ""
 
@@ -2361,11 +2373,11 @@ msgstr ""
 msgid "-l                      Show verbose (long) output"
 msgstr ""
 
-#: tools/ippeveprinter.c:7683
+#: tools/ippeveprinter.c:7943
 msgid "-l location             Set location of printer"
 msgstr ""
 
-#: berkeley/lpr.c:435 systemv/lp.c:760
+#: berkeley/lpr.c:435 systemv/lp.c:761
 msgid "-m                      Send an email notification when the job completes"
 msgstr ""
 
@@ -2377,7 +2389,7 @@ msgstr ""
 msgid "-m everywhere           Specify the printer is compatible with IPP Everywhere"
 msgstr ""
 
-#: tools/ippeveprinter.c:7684
+#: tools/ippeveprinter.c:7944
 msgid "-m model                Set model name (default=Printer)"
 msgstr ""
 
@@ -2389,11 +2401,11 @@ msgstr ""
 msgid "-n count                Repeat the last file the given number of times"
 msgstr ""
 
-#: tools/ippeveprinter.c:7685
+#: tools/ippeveprinter.c:7945
 msgid "-n hostname             Set hostname for printer"
 msgstr ""
 
-#: systemv/lp.c:761
+#: systemv/lp.c:762
 msgid "-n num-copies           Specify the number of copies to print"
 msgstr ""
 
@@ -2433,11 +2445,11 @@ msgstr ""
 msgid "-o job-quota-period=N   Specify the per-user quota period in seconds"
 msgstr ""
 
-#: berkeley/lpr.c:437 systemv/lp.c:763
+#: berkeley/lpr.c:437 systemv/lp.c:764
 msgid "-o job-sheets=standard  Print a banner page with the job"
 msgstr ""
 
-#: berkeley/lpr.c:438 systemv/lp.c:764
+#: berkeley/lpr.c:438 systemv/lp.c:765
 msgid "-o media=size           Specify the media size to use"
 msgstr ""
 
@@ -2449,21 +2461,21 @@ msgstr ""
 msgid "-o name[=value]         Set default option and value"
 msgstr ""
 
-#: berkeley/lpr.c:439 systemv/lp.c:765
+#: berkeley/lpr.c:439 systemv/lp.c:766
 msgid "-o number-up=N          Specify that input pages should be printed N-up (1, 2, 4, 6, 9, and 16 are supported)"
 msgstr ""
 
-#: berkeley/lpr.c:436 systemv/lp.c:762
+#: berkeley/lpr.c:436 systemv/lp.c:763
 msgid "-o option[=value]       Specify a printer-specific option"
 msgstr ""
 
-#: berkeley/lpr.c:440 systemv/lp.c:766
+#: berkeley/lpr.c:440 systemv/lp.c:767
 msgid ""
 "-o orientation-requested=N\n"
 "                        Specify portrait (3) or landscape (4) orientation"
 msgstr ""
 
-#: berkeley/lpr.c:442 systemv/lp.c:768
+#: berkeley/lpr.c:442 systemv/lp.c:769
 msgid "-o print-quality=N      Specify the print quality - draft (3), normal (4), or best (5)"
 msgstr ""
 
@@ -2485,17 +2497,17 @@ msgid ""
 "                        Specify the printer operation policy"
 msgstr ""
 
-#: berkeley/lpr.c:443 systemv/lp.c:769
+#: berkeley/lpr.c:443 systemv/lp.c:770
 msgid "-o sides=one-sided      Specify 1-sided printing"
 msgstr ""
 
-#: berkeley/lpr.c:444 systemv/lp.c:770
+#: berkeley/lpr.c:444 systemv/lp.c:771
 msgid ""
 "-o sides=two-sided-long-edge\n"
 "                        Specify 2-sided portrait printing"
 msgstr ""
 
-#: berkeley/lpr.c:446 systemv/lp.c:772
+#: berkeley/lpr.c:446 systemv/lp.c:773
 msgid ""
 "-o sides=two-sided-short-edge\n"
 "                        Specify 2-sided landscape printing"
@@ -2517,7 +2529,7 @@ msgstr ""
 msgid "-p destination          Specify/add the named destination"
 msgstr ""
 
-#: tools/ippeveprinter.c:7686
+#: tools/ippeveprinter.c:7946
 msgid "-p port                 Set port number for printer"
 msgstr ""
 
@@ -2529,15 +2541,15 @@ msgstr ""
 msgid "-q                      Run silently"
 msgstr ""
 
-#: berkeley/lpr.c:448
+#: berkeley/lpr.c:449
 msgid "-q                      Specify the job should be held for printing"
 msgstr ""
 
-#: systemv/lp.c:775
+#: systemv/lp.c:776
 msgid "-q priority             Specify the priority from low (1) to high (100)"
 msgstr ""
 
-#: berkeley/lpr.c:449
+#: berkeley/lpr.c:450
 msgid "-r                      Remove the file(s) after submission"
 msgstr ""
 
@@ -2561,11 +2573,11 @@ msgstr ""
 msgid "-r reason               Specify a reason message that others can see"
 msgstr ""
 
-#: tools/ippeveprinter.c:7687
+#: tools/ippeveprinter.c:7947
 msgid "-r subtype,[subtype]    Set DNS-SD service subtype"
 msgstr ""
 
-#: systemv/lp.c:776
+#: systemv/lp.c:777
 msgid "-s                      Be silent"
 msgstr ""
 
@@ -2577,11 +2589,11 @@ msgstr ""
 msgid "-s                      Show a status summary"
 msgstr ""
 
-#: scheduler/main.c:2141
+#: scheduler/main.c:2143
 msgid "-s cups-files.conf      Set cups-files.conf file to use."
 msgstr ""
 
-#: tools/ippeveprinter.c:7688
+#: tools/ippeveprinter.c:7948
 msgid "-s speed[,color-speed]  Set speed in pages per minute"
 msgstr ""
 
@@ -2593,7 +2605,7 @@ msgstr ""
 msgid "-t                      Show all status information"
 msgstr ""
 
-#: scheduler/main.c:2142
+#: scheduler/main.c:2144
 msgid "-t                      Test the configuration file."
 msgstr ""
 
@@ -2601,7 +2613,7 @@ msgstr ""
 msgid "-t key                  True if the TXT record contains the key"
 msgstr ""
 
-#: systemv/lp.c:777
+#: systemv/lp.c:778
 msgid "-t title                Specify the job title"
 msgstr ""
 
@@ -2629,7 +2641,7 @@ msgstr ""
 msgid "-u regex                Match URI to regular expression"
 msgstr ""
 
-#: systemv/cupstestppd.c:3865 tools/ippeveprinter.c:7689 tools/ipptool.c:4332
+#: systemv/cupstestppd.c:3865 tools/ippeveprinter.c:7949 tools/ipptool.c:4332
 msgid "-v                      Be verbose"
 msgstr ""
 
@@ -2667,19 +2679,19 @@ msgid ""
 "                        Execute program if true"
 msgstr ""
 
-#: cups/dest.c:1868
+#: cups/dest.c:1867
 msgid "/etc/cups/lpoptions file names default destination that does not exist."
 msgstr ""
 
-#: ppdc/sample.c:306
+#: ppdc/sample.c:309
 msgid "0"
 msgstr ""
 
-#: ppdc/sample.c:307
+#: ppdc/sample.c:310
 msgid "1"
 msgstr ""
 
-#: ppdc/sample.c:379
+#: ppdc/sample.c:382
 msgid "1 inch/sec."
 msgstr ""
 
@@ -2691,7 +2703,7 @@ msgstr ""
 msgid "1.25x2.25\""
 msgstr ""
 
-#: ppdc/sample.c:427
+#: ppdc/sample.c:430
 msgid "1.5 inch/sec."
 msgstr ""
 
@@ -2711,11 +2723,11 @@ msgstr ""
 msgid "1.50x2.00\""
 msgstr ""
 
-#: ppdc/sample.c:316
+#: ppdc/sample.c:319
 msgid "10"
 msgstr ""
 
-#: ppdc/sample.c:438
+#: ppdc/sample.c:441
 msgid "10 inches/sec."
 msgstr ""
 
@@ -2731,39 +2743,39 @@ msgstr ""
 msgid "10 x 14"
 msgstr ""
 
-#: ppdc/sample.c:418
+#: ppdc/sample.c:421
 msgid "100"
 msgstr ""
 
-#: ppdc/sample.c:329
+#: ppdc/sample.c:332
 msgid "100 mm/sec."
 msgstr ""
 
-#: ppdc/sample.c:419
+#: ppdc/sample.c:422
 msgid "105"
 msgstr ""
 
-#: ppdc/sample.c:317
+#: ppdc/sample.c:320
 msgid "11"
 msgstr ""
 
-#: ppdc/sample.c:439
+#: ppdc/sample.c:442
 msgid "11 inches/sec."
 msgstr ""
 
-#: ppdc/sample.c:420
+#: ppdc/sample.c:423
 msgid "110"
 msgstr ""
 
-#: ppdc/sample.c:421
+#: ppdc/sample.c:424
 msgid "115"
 msgstr ""
 
-#: ppdc/sample.c:318
+#: ppdc/sample.c:321
 msgid "12"
 msgstr ""
 
-#: ppdc/sample.c:440
+#: ppdc/sample.c:443
 msgid "12 inches/sec."
 msgstr ""
 
@@ -2771,39 +2783,39 @@ msgstr ""
 msgid "12 x 11"
 msgstr ""
 
-#: ppdc/sample.c:422
+#: ppdc/sample.c:425
 msgid "120"
 msgstr ""
 
-#: ppdc/sample.c:330
+#: ppdc/sample.c:333
 msgid "120 mm/sec."
 msgstr ""
 
-#: ppdc/sample.c:243
+#: ppdc/sample.c:247
 msgid "120x60dpi"
 msgstr ""
 
-#: ppdc/sample.c:249
+#: ppdc/sample.c:253
 msgid "120x72dpi"
 msgstr ""
 
-#: ppdc/sample.c:319
+#: ppdc/sample.c:322
 msgid "13"
 msgstr ""
 
-#: ppdc/sample.c:232
+#: ppdc/sample.c:233
 msgid "136dpi"
 msgstr ""
 
-#: ppdc/sample.c:320
+#: ppdc/sample.c:323
 msgid "14"
 msgstr ""
 
-#: ppdc/sample.c:321
+#: ppdc/sample.c:324
 msgid "15"
 msgstr ""
 
-#: ppdc/sample.c:323
+#: ppdc/sample.c:326
 msgid "15 mm/sec."
 msgstr ""
 
@@ -2811,43 +2823,43 @@ msgstr ""
 msgid "15 x 11"
 msgstr ""
 
-#: ppdc/sample.c:331
+#: ppdc/sample.c:334
 msgid "150 mm/sec."
 msgstr ""
 
-#: ppdc/sample.c:278
+#: ppdc/sample.c:281
 msgid "150dpi"
 msgstr ""
 
-#: ppdc/sample.c:363
+#: ppdc/sample.c:366
 msgid "16"
 msgstr ""
 
-#: ppdc/sample.c:364
+#: ppdc/sample.c:367
 msgid "17"
 msgstr ""
 
-#: ppdc/sample.c:365
+#: ppdc/sample.c:368
 msgid "18"
 msgstr ""
 
-#: ppdc/sample.c:244
+#: ppdc/sample.c:248
 msgid "180dpi"
 msgstr ""
 
-#: ppdc/sample.c:366
+#: ppdc/sample.c:369
 msgid "19"
 msgstr ""
 
-#: ppdc/sample.c:308
+#: ppdc/sample.c:311
 msgid "2"
 msgstr ""
 
-#: ppdc/sample.c:380
+#: ppdc/sample.c:383
 msgid "2 inches/sec."
 msgstr ""
 
-#: cups/ppd-cache.c:3872 ppdc/sample.c:262
+#: cups/ppd-cache.c:3872 ppdc/sample.c:265
 msgid "2-Sided Printing"
 msgstr ""
 
@@ -2891,107 +2903,107 @@ msgstr ""
 msgid "2.25x1.25\""
 msgstr ""
 
-#: ppdc/sample.c:188
+#: ppdc/sample.c:189
 msgid "2.25x4.00\""
 msgstr ""
 
-#: ppdc/sample.c:189
+#: ppdc/sample.c:190
 msgid "2.25x5.50\""
 msgstr ""
 
-#: ppdc/sample.c:190
+#: ppdc/sample.c:191
 msgid "2.38x5.50\""
 msgstr ""
 
-#: ppdc/sample.c:428
+#: ppdc/sample.c:431
 msgid "2.5 inches/sec."
 msgstr ""
 
-#: ppdc/sample.c:191
+#: ppdc/sample.c:192
 msgid "2.50x1.00\""
 msgstr ""
 
-#: ppdc/sample.c:192
+#: ppdc/sample.c:193
 msgid "2.50x2.00\""
 msgstr ""
 
-#: ppdc/sample.c:193
+#: ppdc/sample.c:194
 msgid "2.75x1.25\""
 msgstr ""
 
-#: ppdc/sample.c:194
+#: ppdc/sample.c:195
 msgid "2.9 x 1\""
 msgstr ""
 
-#: ppdc/sample.c:367
+#: ppdc/sample.c:370
 msgid "20"
 msgstr ""
 
-#: ppdc/sample.c:324
+#: ppdc/sample.c:327
 msgid "20 mm/sec."
 msgstr ""
 
-#: ppdc/sample.c:332
+#: ppdc/sample.c:335
 msgid "200 mm/sec."
 msgstr ""
 
-#: ppdc/sample.c:233
+#: ppdc/sample.c:234
 msgid "203dpi"
 msgstr ""
 
-#: ppdc/sample.c:368
+#: ppdc/sample.c:371
 msgid "21"
 msgstr ""
 
-#: ppdc/sample.c:369
+#: ppdc/sample.c:372
 msgid "22"
 msgstr ""
 
-#: ppdc/sample.c:370
+#: ppdc/sample.c:373
 msgid "23"
 msgstr ""
 
-#: ppdc/sample.c:371
+#: ppdc/sample.c:374
 msgid "24"
 msgstr ""
 
-#: ppdc/sample.c:241
+#: ppdc/sample.c:245
 msgid "24-Pin Series"
 msgstr ""
 
-#: ppdc/sample.c:250
+#: ppdc/sample.c:254
 msgid "240x72dpi"
 msgstr ""
 
-#: ppdc/sample.c:372
+#: ppdc/sample.c:375
 msgid "25"
 msgstr ""
 
-#: ppdc/sample.c:333
+#: ppdc/sample.c:336
 msgid "250 mm/sec."
 msgstr ""
 
-#: ppdc/sample.c:373
+#: ppdc/sample.c:376
 msgid "26"
 msgstr ""
 
-#: ppdc/sample.c:374
+#: ppdc/sample.c:377
 msgid "27"
 msgstr ""
 
-#: ppdc/sample.c:375
+#: ppdc/sample.c:378
 msgid "28"
 msgstr ""
 
-#: ppdc/sample.c:376
+#: ppdc/sample.c:379
 msgid "29"
 msgstr ""
 
-#: ppdc/sample.c:309
+#: ppdc/sample.c:312
 msgid "3"
 msgstr ""
 
-#: ppdc/sample.c:381
+#: ppdc/sample.c:384
 msgid "3 inches/sec."
 msgstr ""
 
@@ -2999,43 +3011,43 @@ msgstr ""
 msgid "3 x 5"
 msgstr ""
 
-#: ppdc/sample.c:195
+#: ppdc/sample.c:196
 msgid "3.00x1.00\""
 msgstr ""
 
-#: ppdc/sample.c:196
+#: ppdc/sample.c:197
 msgid "3.00x1.25\""
 msgstr ""
 
-#: ppdc/sample.c:197
+#: ppdc/sample.c:198
 msgid "3.00x2.00\""
 msgstr ""
 
-#: ppdc/sample.c:198
+#: ppdc/sample.c:199
 msgid "3.00x3.00\""
 msgstr ""
 
-#: ppdc/sample.c:199
+#: ppdc/sample.c:200
 msgid "3.00x5.00\""
 msgstr ""
 
-#: ppdc/sample.c:200
+#: ppdc/sample.c:201
 msgid "3.25x2.00\""
 msgstr ""
 
-#: ppdc/sample.c:201
+#: ppdc/sample.c:202
 msgid "3.25x5.00\""
 msgstr ""
 
-#: ppdc/sample.c:202
+#: ppdc/sample.c:203
 msgid "3.25x5.50\""
 msgstr ""
 
-#: ppdc/sample.c:203
+#: ppdc/sample.c:204
 msgid "3.25x5.83\""
 msgstr ""
 
-#: ppdc/sample.c:204
+#: ppdc/sample.c:205
 msgid "3.25x7.83\""
 msgstr ""
 
@@ -3047,99 +3059,103 @@ msgstr ""
 msgid "3.5\" Disk"
 msgstr ""
 
-#: ppdc/sample.c:205
+#: ppdc/sample.c:206
 msgid "3.50x1.00\""
 msgstr ""
 
-#: ppdc/sample.c:377
+#: ppdc/sample.c:380
 msgid "30"
 msgstr ""
 
-#: ppdc/sample.c:325
+#: ppdc/sample.c:328
 msgid "30 mm/sec."
 msgstr ""
 
-#: ppdc/sample.c:334
+#: ppdc/sample.c:337
 msgid "300 mm/sec."
 msgstr ""
 
-#: ppdc/sample.c:234
+#: ppdc/sample.c:235
 msgid "300dpi"
 msgstr ""
 
-#: ppdc/sample.c:405
+#: ppdc/sample.c:188
+msgid "30859 Paint Can Label"
+msgstr ""
+
+#: ppdc/sample.c:408
 msgid "35"
 msgstr ""
 
-#: ppdc/sample.c:246
+#: ppdc/sample.c:250
 msgid "360dpi"
 msgstr ""
 
-#: ppdc/sample.c:245
+#: ppdc/sample.c:249
 msgid "360x180dpi"
 msgstr ""
 
-#: ppdc/sample.c:310
+#: ppdc/sample.c:313
 msgid "4"
 msgstr ""
 
-#: ppdc/sample.c:382
+#: ppdc/sample.c:385
 msgid "4 inches/sec."
 msgstr ""
 
-#: ppdc/sample.c:206
+#: ppdc/sample.c:207
 msgid "4.00x1.00\""
 msgstr ""
 
-#: ppdc/sample.c:214
+#: ppdc/sample.c:215
 msgid "4.00x13.00\""
 msgstr ""
 
-#: ppdc/sample.c:207
+#: ppdc/sample.c:208
 msgid "4.00x2.00\""
 msgstr ""
 
-#: ppdc/sample.c:208
+#: ppdc/sample.c:209
 msgid "4.00x2.50\""
 msgstr ""
 
-#: ppdc/sample.c:209
+#: ppdc/sample.c:210
 msgid "4.00x3.00\""
 msgstr ""
 
-#: ppdc/sample.c:210
+#: ppdc/sample.c:211
 msgid "4.00x4.00\""
 msgstr ""
 
-#: ppdc/sample.c:211
+#: ppdc/sample.c:212
 msgid "4.00x5.00\""
 msgstr ""
 
-#: ppdc/sample.c:212
+#: ppdc/sample.c:213
 msgid "4.00x6.00\""
 msgstr ""
 
-#: ppdc/sample.c:213
+#: ppdc/sample.c:214
 msgid "4.00x6.50\""
 msgstr ""
 
-#: ppdc/sample.c:406
+#: ppdc/sample.c:409
 msgid "40"
 msgstr ""
 
-#: ppdc/sample.c:326
+#: ppdc/sample.c:329
 msgid "40 mm/sec."
 msgstr ""
 
-#: ppdc/sample.c:407
+#: ppdc/sample.c:410
 msgid "45"
 msgstr ""
 
-#: ppdc/sample.c:311
+#: ppdc/sample.c:314
 msgid "5"
 msgstr ""
 
-#: ppdc/sample.c:432
+#: ppdc/sample.c:435
 msgid "5 inches/sec."
 msgstr ""
 
@@ -3147,79 +3163,79 @@ msgstr ""
 msgid "5 x 7"
 msgstr ""
 
-#: ppdc/sample.c:408
+#: ppdc/sample.c:411
 msgid "50"
 msgstr ""
 
-#: ppdc/sample.c:409
+#: ppdc/sample.c:412
 msgid "55"
 msgstr ""
 
-#: ppdc/sample.c:312
+#: ppdc/sample.c:315
 msgid "6"
 msgstr ""
 
-#: ppdc/sample.c:433
+#: ppdc/sample.c:436
 msgid "6 inches/sec."
 msgstr ""
 
-#: ppdc/sample.c:215
+#: ppdc/sample.c:216
 msgid "6.00x1.00\""
 msgstr ""
 
-#: ppdc/sample.c:216
+#: ppdc/sample.c:217
 msgid "6.00x2.00\""
 msgstr ""
 
-#: ppdc/sample.c:217
+#: ppdc/sample.c:218
 msgid "6.00x3.00\""
 msgstr ""
 
-#: ppdc/sample.c:218
+#: ppdc/sample.c:219
 msgid "6.00x4.00\""
 msgstr ""
 
-#: ppdc/sample.c:219
+#: ppdc/sample.c:220
 msgid "6.00x5.00\""
 msgstr ""
 
-#: ppdc/sample.c:220
+#: ppdc/sample.c:221
 msgid "6.00x6.00\""
 msgstr ""
 
-#: ppdc/sample.c:221
+#: ppdc/sample.c:222
 msgid "6.00x6.50\""
 msgstr ""
 
-#: ppdc/sample.c:410
+#: ppdc/sample.c:413
 msgid "60"
 msgstr ""
 
-#: ppdc/sample.c:327
+#: ppdc/sample.c:330
 msgid "60 mm/sec."
 msgstr ""
 
-#: ppdc/sample.c:253
+#: ppdc/sample.c:257
 msgid "600dpi"
 msgstr ""
 
-#: ppdc/sample.c:242
+#: ppdc/sample.c:246
 msgid "60dpi"
 msgstr ""
 
-#: ppdc/sample.c:248
+#: ppdc/sample.c:252
 msgid "60x72dpi"
 msgstr ""
 
-#: ppdc/sample.c:411
+#: ppdc/sample.c:414
 msgid "65"
 msgstr ""
 
-#: ppdc/sample.c:313
+#: ppdc/sample.c:316
 msgid "7"
 msgstr ""
 
-#: ppdc/sample.c:435
+#: ppdc/sample.c:438
 msgid "7 inches/sec."
 msgstr ""
 
@@ -3227,19 +3243,19 @@ msgstr ""
 msgid "7 x 9"
 msgstr ""
 
-#: ppdc/sample.c:412
+#: ppdc/sample.c:415
 msgid "70"
 msgstr ""
 
-#: ppdc/sample.c:413
+#: ppdc/sample.c:416
 msgid "75"
 msgstr ""
 
-#: ppdc/sample.c:314
+#: ppdc/sample.c:317
 msgid "8"
 msgstr ""
 
-#: ppdc/sample.c:436
+#: ppdc/sample.c:439
 msgid "8 inches/sec."
 msgstr ""
 
@@ -3247,51 +3263,51 @@ msgstr ""
 msgid "8 x 10"
 msgstr ""
 
-#: ppdc/sample.c:222
+#: ppdc/sample.c:223
 msgid "8.00x1.00\""
 msgstr ""
 
-#: ppdc/sample.c:223
+#: ppdc/sample.c:224
 msgid "8.00x2.00\""
 msgstr ""
 
-#: ppdc/sample.c:224
+#: ppdc/sample.c:225
 msgid "8.00x3.00\""
 msgstr ""
 
-#: ppdc/sample.c:225
+#: ppdc/sample.c:226
 msgid "8.00x4.00\""
 msgstr ""
 
-#: ppdc/sample.c:226
+#: ppdc/sample.c:227
 msgid "8.00x5.00\""
 msgstr ""
 
-#: ppdc/sample.c:227
+#: ppdc/sample.c:228
 msgid "8.00x6.00\""
 msgstr ""
 
-#: ppdc/sample.c:228
+#: ppdc/sample.c:229
 msgid "8.00x6.50\""
 msgstr ""
 
-#: ppdc/sample.c:414
+#: ppdc/sample.c:417
 msgid "80"
 msgstr ""
 
-#: ppdc/sample.c:328
+#: ppdc/sample.c:331
 msgid "80 mm/sec."
 msgstr ""
 
-#: ppdc/sample.c:415
+#: ppdc/sample.c:418
 msgid "85"
 msgstr ""
 
-#: ppdc/sample.c:315
+#: ppdc/sample.c:318
 msgid "9"
 msgstr ""
 
-#: ppdc/sample.c:437
+#: ppdc/sample.c:440
 msgid "9 inches/sec."
 msgstr ""
 
@@ -3303,15 +3319,15 @@ msgstr ""
 msgid "9 x 12"
 msgstr ""
 
-#: ppdc/sample.c:247
+#: ppdc/sample.c:251
 msgid "9-Pin Series"
 msgstr ""
 
-#: ppdc/sample.c:416
+#: ppdc/sample.c:419
 msgid "90"
 msgstr ""
 
-#: ppdc/sample.c:417
+#: ppdc/sample.c:420
 msgid "95"
 msgstr ""
 
@@ -3469,7 +3485,7 @@ msgstr ""
 msgid "Accept Jobs"
 msgstr ""
 
-#: cups/http-support.c:1494
+#: cups/http-support.c:1499
 msgid "Accepted"
 msgstr ""
 
@@ -3489,7 +3505,7 @@ msgstr ""
 msgid "Administration"
 msgstr ""
 
-#: ppdc/sample.c:424
+#: ppdc/sample.c:427
 msgid "Always"
 msgstr ""
 
@@ -3497,7 +3513,7 @@ msgstr ""
 msgid "AppSocket/HP JetDirect"
 msgstr ""
 
-#: ppdc/sample.c:445
+#: ppdc/sample.c:448
 msgid "Applicator"
 msgstr ""
 
@@ -3621,7 +3637,7 @@ msgstr ""
 msgid "Bad PPD file."
 msgstr ""
 
-#: cups/http-support.c:1512
+#: cups/http-support.c:1517
 msgid "Bad Request"
 msgstr ""
 
@@ -3637,7 +3653,7 @@ msgstr ""
 msgid "Bad URI."
 msgstr ""
 
-#: cups/hash.c:48 cups/http-support.c:1606
+#: cups/hash.c:49 cups/http-support.c:1611
 msgid "Bad arguments to function"
 msgstr ""
 
@@ -3650,7 +3666,7 @@ msgstr ""
 msgid "Bad custom parameter"
 msgstr ""
 
-#: cups/http-support.c:1746 scheduler/ipp.c:2365
+#: cups/http-support.c:1751 scheduler/ipp.c:2365
 #, c-format
 msgid "Bad device-uri \"%s\"."
 msgstr ""
@@ -3674,7 +3690,7 @@ msgstr ""
 msgid "Bad filename buffer"
 msgstr ""
 
-#: cups/http-support.c:1615
+#: cups/http-support.c:1620
 msgid "Bad hostname/address in URI"
 msgstr ""
 
@@ -3737,7 +3753,7 @@ msgstr ""
 msgid "Bad page-ranges values %d-%d."
 msgstr ""
 
-#: cups/http-support.c:1612
+#: cups/http-support.c:1617
 msgid "Bad port number in URI"
 msgstr ""
 
@@ -3765,15 +3781,15 @@ msgstr ""
 msgid "Bad request version number %d.%d."
 msgstr ""
 
-#: cups/http-support.c:1609
+#: cups/http-support.c:1614
 msgid "Bad resource in URI"
 msgstr ""
 
-#: cups/http-support.c:1621
+#: cups/http-support.c:1626
 msgid "Bad scheme in URI"
 msgstr ""
 
-#: cups/http-support.c:1618
+#: cups/http-support.c:1623
 msgid "Bad username in URI"
 msgstr ""
 
@@ -3781,7 +3797,7 @@ msgstr ""
 msgid "Bad value string"
 msgstr ""
 
-#: cups/http-support.c:1624
+#: cups/http-support.c:1629
 msgid "Bad/empty URI"
 msgstr ""
 
@@ -3789,11 +3805,11 @@ msgstr ""
 msgid "Banners"
 msgstr ""
 
-#: ppdc/sample.c:282
+#: ppdc/sample.c:285
 msgid "Bond Paper"
 msgstr ""
 
-#: cups/ppd-cache.c:4152
+#: cups/ppd-cache.c:4277
 msgid "Booklet"
 msgstr ""
 
@@ -3806,11 +3822,11 @@ msgstr ""
 msgid "Buffer overflow detected, aborting."
 msgstr ""
 
-#: ppdc/sample.c:277
+#: ppdc/sample.c:280
 msgid "CMYK"
 msgstr ""
 
-#: ppdc/sample.c:358
+#: ppdc/sample.c:361
 msgid "CPCL Label Printer"
 msgstr ""
 
@@ -3818,7 +3834,7 @@ msgstr ""
 msgid "Cancel Jobs"
 msgstr ""
 
-#: backend/ipp.c:2287
+#: backend/ipp.c:2295
 msgid "Canceling print job."
 msgstr ""
 
@@ -3830,7 +3846,7 @@ msgstr ""
 msgid "Cannot share a remote Kerberized printer."
 msgstr ""
 
-#: ppdc/sample.c:271
+#: ppdc/sample.c:274
 msgid "Cassette"
 msgstr ""
 
@@ -3856,11 +3872,11 @@ msgstr ""
 msgid "Close-Job doesn't support the job-uri attribute."
 msgstr ""
 
-#: cups/ppd-cache.c:3790 ppdc/sample.c:276
+#: cups/ppd-cache.c:3790 ppdc/sample.c:279
 msgid "Color"
 msgstr ""
 
-#: cups/ppd-cache.c:3751 ppdc/sample.c:274
+#: cups/ppd-cache.c:3751 ppdc/sample.c:277
 msgid "Color Mode"
 msgstr ""
 
@@ -3875,39 +3891,39 @@ msgstr ""
 msgid "Community name uses indefinite length"
 msgstr ""
 
-#: backend/ipp.c:865 backend/lpd.c:929 backend/socket.c:375
+#: backend/ipp.c:864 backend/lpd.c:933 backend/socket.c:375
 msgid "Connected to printer."
 msgstr ""
 
-#: backend/ipp.c:701 backend/lpd.c:753 backend/socket.c:295
+#: backend/ipp.c:700 backend/lpd.c:757 backend/socket.c:295
 msgid "Connecting to printer."
 msgstr ""
 
-#: cups/http-support.c:1482
+#: cups/http-support.c:1487
 msgid "Continue"
 msgstr ""
 
-#: ppdc/sample.c:360
+#: ppdc/sample.c:363
 msgid "Continuous"
 msgstr ""
 
-#: backend/lpd.c:1078 backend/lpd.c:1210
+#: backend/lpd.c:1082 backend/lpd.c:1214
 msgid "Control file sent successfully."
 msgstr ""
 
-#: backend/ipp.c:1396 backend/lpd.c:445
+#: backend/ipp.c:1395 backend/lpd.c:449
 msgid "Copying print data."
 msgstr ""
 
-#: cups/http-support.c:1491
+#: cups/http-support.c:1496
 msgid "Created"
 msgstr ""
 
-#: cups/tls-darwin.c:748 cups/tls-gnutls.c:582
+#: cups/tls-darwin.c:723 cups/tls-gnutls.c:582
 msgid "Credentials do not validate against site CA certificate."
 msgstr ""
 
-#: cups/tls-darwin.c:759 cups/tls-gnutls.c:599
+#: cups/tls-darwin.c:734 cups/tls-gnutls.c:599
 msgid "Credentials have expired."
 msgstr ""
 
@@ -3915,31 +3931,35 @@ msgstr ""
 msgid "Custom"
 msgstr ""
 
-#: ppdc/sample.c:354
+#: ppdc/sample.c:357
 msgid "CustominCutInterval"
 msgstr ""
 
-#: ppdc/sample.c:352
+#: ppdc/sample.c:355
 msgid "CustominTearInterval"
 msgstr ""
 
-#: ppdc/sample.c:338
+#: cups/ppd-cache.c:4312 ppdc/sample.c:341
 msgid "Cut"
 msgstr ""
 
-#: ppdc/sample.c:446
+#: ppdc/sample.c:449
 msgid "Cutter"
 msgstr ""
 
-#: ppdc/sample.c:239
+#: ppdc/sample.c:230
+msgid "DYMO"
+msgstr ""
+
+#: ppdc/sample.c:243
 msgid "Dark"
 msgstr ""
 
-#: ppdc/sample.c:235
+#: ppdc/sample.c:239
 msgid "Darkness"
 msgstr ""
 
-#: backend/lpd.c:1163
+#: backend/lpd.c:1167
 msgid "Data file sent successfully."
 msgstr ""
 
@@ -3959,7 +3979,7 @@ msgstr ""
 msgid "Delete Printer"
 msgstr ""
 
-#: ppdc/sample.c:273
+#: ppdc/sample.c:276
 msgid "DeskJet Series"
 msgstr ""
 
@@ -3991,7 +4011,7 @@ msgid ""
 "        location = %s"
 msgstr ""
 
-#: ppdc/sample.c:431
+#: ppdc/sample.c:434
 msgid "Direct Thermal Media"
 msgstr ""
 
@@ -4020,7 +4040,7 @@ msgstr ""
 msgid "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)."
 msgstr ""
 
-#: ppdc/sample.c:340
+#: ppdc/sample.c:343
 msgid "Disabled"
 msgstr ""
 
@@ -4029,24 +4049,20 @@ msgstr ""
 msgid "Document #%d does not exist in job #%d."
 msgstr ""
 
-#: cups/ppd-cache.c:4283 cups/ppd-cache.c:4285 cups/ppd-cache.c:4348
-#: cups/ppd-cache.c:4385
+#: cups/ppd-cache.c:4471 cups/ppd-cache.c:4473 cups/ppd-cache.c:4536
+#: cups/ppd-cache.c:4573
 msgid "Draft"
 msgstr ""
 
-#: ppdc/sample.c:267
+#: ppdc/sample.c:270
 msgid "Duplexer"
 msgstr ""
 
-#: ppdc/sample.c:229
-msgid "Dymo"
-msgstr ""
-
-#: ppdc/sample.c:426
+#: ppdc/sample.c:429
 msgid "EPL1 Label Printer"
 msgstr ""
 
-#: ppdc/sample.c:429
+#: ppdc/sample.c:432
 msgid "EPL2 Label Printer"
 msgstr ""
 
@@ -4161,7 +4177,7 @@ msgstr ""
 msgid "Envelope DL"
 msgstr ""
 
-#: ppdc/sample.c:261
+#: ppdc/sample.c:264
 msgid "Envelope Feed"
 msgstr ""
 
@@ -4289,7 +4305,7 @@ msgstr ""
 msgid "Environment Variables:"
 msgstr ""
 
-#: ppdc/sample.c:240
+#: ppdc/sample.c:244
 msgid "Epson"
 msgstr ""
 
@@ -4318,43 +4334,43 @@ msgstr ""
 msgid "European Fanfold Legal"
 msgstr ""
 
-#: ppdc/sample.c:350
+#: ppdc/sample.c:353
 msgid "Every 10 Labels"
 msgstr ""
 
-#: ppdc/sample.c:342
+#: ppdc/sample.c:345
 msgid "Every 2 Labels"
 msgstr ""
 
-#: ppdc/sample.c:343
+#: ppdc/sample.c:346
 msgid "Every 3 Labels"
 msgstr ""
 
-#: ppdc/sample.c:344
+#: ppdc/sample.c:347
 msgid "Every 4 Labels"
 msgstr ""
 
-#: ppdc/sample.c:345
+#: ppdc/sample.c:348
 msgid "Every 5 Labels"
 msgstr ""
 
-#: ppdc/sample.c:346
+#: ppdc/sample.c:349
 msgid "Every 6 Labels"
 msgstr ""
 
-#: ppdc/sample.c:347
+#: ppdc/sample.c:350
 msgid "Every 7 Labels"
 msgstr ""
 
-#: ppdc/sample.c:348
+#: ppdc/sample.c:351
 msgid "Every 8 Labels"
 msgstr ""
 
-#: ppdc/sample.c:349
+#: ppdc/sample.c:352
 msgid "Every 9 Labels"
 msgstr ""
 
-#: ppdc/sample.c:341
+#: ppdc/sample.c:344
 msgid "Every Label"
 msgstr ""
 
@@ -4362,7 +4378,7 @@ msgstr ""
 msgid "Executive"
 msgstr ""
 
-#: cups/http-support.c:1540
+#: cups/http-support.c:1545
 msgid "Expectation Failed"
 msgstr ""
 
@@ -4409,16 +4425,16 @@ msgid "File device URIs have been disabled. To enable, see the FileDevice direct
 msgstr ""
 
 #: filter/rastertoepson.c:1131 filter/rastertohp.c:802
-#: filter/rastertolabel.c:1259
+#: filter/rastertolabel.c:1260
 #, c-format
 msgid "Finished page %d."
 msgstr ""
 
-#: cups/ppd-cache.c:4171
+#: cups/ppd-cache.c:4359
 msgid "Finishing Preset"
 msgstr ""
 
-#: cups/ppd-cache.c:4061
+#: cups/ppd-cache.c:4134
 msgid "Fold"
 msgstr ""
 
@@ -4426,11 +4442,11 @@ msgstr ""
 msgid "Folio"
 msgstr ""
 
-#: cups/http-support.c:1519
+#: cups/http-support.c:1524
 msgid "Forbidden"
 msgstr ""
 
-#: cups/http-support.c:1503
+#: cups/http-support.c:1508
 msgid "Found"
 msgstr ""
 
@@ -4438,7 +4454,7 @@ msgstr ""
 msgid "General"
 msgstr ""
 
-#: ppdc/sample.c:251
+#: ppdc/sample.c:255
 msgid "Generic"
 msgstr ""
 
@@ -4446,7 +4462,7 @@ msgstr ""
 msgid "Get-Response-PDU uses indefinite length"
 msgstr ""
 
-#: ppdc/sample.c:285
+#: ppdc/sample.c:288
 msgid "Glossy Paper"
 msgstr ""
 
@@ -4457,11 +4473,11 @@ msgstr ""
 msgid "Got a printer-uri attribute but no job-id."
 msgstr ""
 
-#: cups/ppd-cache.c:3767 cups/ppd-cache.c:3778 ppdc/sample.c:275
+#: cups/ppd-cache.c:3767 cups/ppd-cache.c:3778 ppdc/sample.c:278
 msgid "Grayscale"
 msgstr ""
 
-#: ppdc/sample.c:272
+#: ppdc/sample.c:275
 msgid "HP"
 msgstr ""
 
@@ -4469,7 +4485,7 @@ msgstr ""
 msgid "Hanging Folder"
 msgstr ""
 
-#: cups/hash.c:292
+#: cups/hash.c:289
 msgid "Hash buffer too small."
 msgstr ""
 
@@ -4477,7 +4493,7 @@ msgstr ""
 msgid "Help file not in index."
 msgstr ""
 
-#: cups/ppd-cache.c:4290 cups/ppd-cache.c:4359 cups/ppd-cache.c:4390
+#: cups/ppd-cache.c:4478 cups/ppd-cache.c:4547 cups/ppd-cache.c:4578
 msgid "High"
 msgstr ""
 
@@ -4631,23 +4647,23 @@ msgstr ""
 msgid "Illegal whitespace character"
 msgstr ""
 
-#: ppdc/sample.c:266
+#: ppdc/sample.c:269
 msgid "Installable Options"
 msgstr ""
 
-#: ppdc/sample.c:269
+#: ppdc/sample.c:272
 msgid "Installed"
 msgstr ""
 
-#: ppdc/sample.c:288
+#: ppdc/sample.c:291
 msgid "IntelliBar Label Printer"
 msgstr ""
 
-#: ppdc/sample.c:287
+#: ppdc/sample.c:290
 msgid "Intellitech"
 msgstr ""
 
-#: cups/http-support.c:1546
+#: cups/http-support.c:1551
 msgid "Internal Server Error"
 msgstr ""
 
@@ -4663,7 +4679,7 @@ msgstr ""
 msgid "Internet Postage 3-Part"
 msgstr ""
 
-#: backend/ipp.c:319
+#: backend/ipp.c:318
 msgid "Internet Printing Protocol"
 msgstr ""
 
@@ -4838,19 +4854,19 @@ msgstr ""
 msgid "Jobs"
 msgstr ""
 
-#: backend/lpd.c:162
+#: backend/lpd.c:166
 msgid "LPD/LPR Host or Printer"
 msgstr ""
 
-#: cups/dest.c:1856
+#: cups/dest.c:1855
 msgid "LPDEST environment variable names default destination that does not exist."
 msgstr ""
 
-#: ppdc/sample.c:230
+#: ppdc/sample.c:231
 msgid "Label Printer"
 msgstr ""
 
-#: ppdc/sample.c:441
+#: ppdc/sample.c:444
 msgid "Label Top"
 msgstr ""
 
@@ -4863,7 +4879,7 @@ msgstr ""
 msgid "Large Address"
 msgstr ""
 
-#: ppdc/sample.c:286
+#: ppdc/sample.c:289
 msgid "LaserJet Series PCL 4/5"
 msgstr ""
 
@@ -4875,7 +4891,7 @@ msgstr ""
 msgid "Letter Oversize Long Edge"
 msgstr ""
 
-#: ppdc/sample.c:236
+#: ppdc/sample.c:240
 msgid "Light"
 msgstr ""
 
@@ -4887,7 +4903,7 @@ msgstr ""
 msgid "List Available Printers"
 msgstr ""
 
-#: tools/ippeveprinter.c:604
+#: tools/ippeveprinter.c:642
 #, c-format
 msgid "Listening on port %d."
 msgstr ""
@@ -4896,15 +4912,19 @@ msgstr ""
 msgid "Local printer created."
 msgstr ""
 
-#: cups/ppd-cache.c:3872 ppdc/sample.c:264
+#: cups/ppd-cache.c:3872 ppdc/sample.c:267
 msgid "Long-Edge (Portrait)"
 msgstr ""
 
-#: cups/http-support.c:1870
+#: cups/http-support.c:1875
 msgid "Looking for printer."
 msgstr ""
 
-#: ppdc/sample.c:260
+#: ppdc/sample.c:237
+msgid "Main Roll"
+msgstr ""
+
+#: ppdc/sample.c:263
 msgid "Manual Feed"
 msgstr ""
 
@@ -4912,19 +4932,19 @@ msgstr ""
 msgid "Media Size"
 msgstr ""
 
-#: cups/ppd.c:808 cups/ppd.c:1345 ppdc/sample.c:254
+#: cups/ppd.c:808 cups/ppd.c:1345 ppdc/sample.c:236
 msgid "Media Source"
 msgstr ""
 
-#: ppdc/sample.c:359
+#: ppdc/sample.c:362
 msgid "Media Tracking"
 msgstr ""
 
-#: cups/ppd.c:806 cups/ppd.c:1343 ppdc/sample.c:280
+#: cups/ppd.c:806 cups/ppd.c:1343 ppdc/sample.c:283
 msgid "Media Type"
 msgstr ""
 
-#: ppdc/sample.c:237
+#: ppdc/sample.c:241
 msgid "Medium"
 msgstr ""
 
@@ -4991,11 +5011,11 @@ msgstr ""
 msgid "Missing required attributes."
 msgstr ""
 
-#: cups/http-support.c:1636
+#: cups/http-support.c:1641
 msgid "Missing resource in URI"
 msgstr ""
 
-#: cups/http-support.c:1630
+#: cups/http-support.c:1635
 msgid "Missing scheme in URI"
 msgstr ""
 
@@ -5040,7 +5060,7 @@ msgstr ""
 msgid "Move Job"
 msgstr ""
 
-#: cups/http-support.c:1500
+#: cups/http-support.c:1505
 msgid "Moved Permanently"
 msgstr ""
 
@@ -5056,15 +5076,15 @@ msgstr ""
 msgid "Nested classes are not allowed."
 msgstr ""
 
-#: ppdc/sample.c:425
+#: ppdc/sample.c:428
 msgid "Never"
 msgstr ""
 
-#: cups/tls-darwin.c:690 cups/tls-gnutls.c:524
+#: cups/tls-darwin.c:665 cups/tls-gnutls.c:524
 msgid "New credentials are not valid for name."
 msgstr ""
 
-#: cups/tls-darwin.c:680 cups/tls-gnutls.c:514
+#: cups/tls-darwin.c:655 cups/tls-gnutls.c:514
 msgid "New credentials are older than stored credentials."
 msgstr ""
 
@@ -5072,7 +5092,7 @@ msgstr ""
 msgid "No"
 msgstr ""
 
-#: cups/http-support.c:1497
+#: cups/http-support.c:1502
 msgid "No Content"
 msgstr ""
 
@@ -5109,7 +5129,7 @@ msgstr ""
 msgid "No authentication information provided."
 msgstr ""
 
-#: cups/tls-darwin.c:630 cups/tls-gnutls.c:461
+#: cups/tls-darwin.c:605 cups/tls-gnutls.c:461
 msgid "No common name specified."
 msgstr ""
 
@@ -5117,7 +5137,7 @@ msgstr ""
 msgid "No community name"
 msgstr ""
 
-#: cups/dest.c:1860 cups/dest.c:1872
+#: cups/dest.c:1859 cups/dest.c:1871
 msgid "No default destination."
 msgstr ""
 
@@ -5154,7 +5174,7 @@ msgid "No name OID"
 msgstr ""
 
 #: filter/rastertoepson.c:1161 filter/rastertohp.c:833
-#: filter/rastertolabel.c:1288
+#: filter/rastertolabel.c:1289
 msgid "No pages were found."
 msgstr ""
 
@@ -5190,7 +5210,7 @@ msgstr ""
 msgid "No request-id"
 msgstr ""
 
-#: cups/tls-darwin.c:710 cups/tls-gnutls.c:544
+#: cups/tls-darwin.c:685 cups/tls-gnutls.c:544
 msgid "No stored credentials, not valid for name."
 msgstr ""
 
@@ -5210,41 +5230,41 @@ msgstr ""
 msgid "No version number"
 msgstr ""
 
-#: ppdc/sample.c:362
+#: ppdc/sample.c:365
 msgid "Non-continuous (Mark sensing)"
 msgstr ""
 
-#: ppdc/sample.c:361
+#: ppdc/sample.c:364
 msgid "Non-continuous (Web sensing)"
 msgstr ""
 
-#: cups/ppd-cache.c:4014 cups/ppd-cache.c:4064 cups/ppd-cache.c:4114
-#: cups/ppd-cache.c:4174
+#: cups/ppd-cache.c:4059 cups/ppd-cache.c:4137 cups/ppd-cache.c:4225
+#: cups/ppd-cache.c:4315 cups/ppd-cache.c:4362
 msgid "None"
 msgstr ""
 
-#: cups/ppd-cache.c:4287 cups/ppd-cache.c:4353 cups/ppd-cache.c:4387
-#: ppdc/sample.c:238
+#: cups/ppd-cache.c:4475 cups/ppd-cache.c:4541 cups/ppd-cache.c:4575
+#: ppdc/sample.c:242
 msgid "Normal"
 msgstr ""
 
-#: cups/http-support.c:1522
+#: cups/http-support.c:1527
 msgid "Not Found"
 msgstr ""
 
-#: cups/http-support.c:1534
+#: cups/http-support.c:1539
 msgid "Not Implemented"
 msgstr ""
 
-#: ppdc/sample.c:268
+#: ppdc/sample.c:271
 msgid "Not Installed"
 msgstr ""
 
-#: cups/http-support.c:1509
+#: cups/http-support.c:1514
 msgid "Not Modified"
 msgstr ""
 
-#: cups/http-support.c:1537
+#: cups/http-support.c:1542
 msgid "Not Supported"
 msgstr ""
 
@@ -5256,15 +5276,15 @@ msgstr ""
 msgid "Note"
 msgstr ""
 
-#: cups/http-support.c:1488 cups/http-support.c:1627 cups/ppd.c:283
+#: cups/http-support.c:1493 cups/http-support.c:1632 cups/ppd.c:283
 msgid "OK"
 msgstr ""
 
-#: cups/ppd-cache.c:3872 ppdc/sample.c:263
+#: cups/ppd-cache.c:3872 ppdc/sample.c:266
 msgid "Off (1-Sided)"
 msgstr ""
 
-#: ppdc/sample.c:356
+#: ppdc/sample.c:359
 msgid "Oki"
 msgstr ""
 
@@ -5303,11 +5323,11 @@ msgid "Options Installed"
 msgstr ""
 
 #: berkeley/lpq.c:642 berkeley/lpr.c:431 berkeley/lprm.c:232
-#: scheduler/cupsfilter.c:1476 scheduler/main.c:2133 systemv/cancel.c:401
+#: scheduler/cupsfilter.c:1476 scheduler/main.c:2135 systemv/cancel.c:401
 #: systemv/cupsaccept.c:243 systemv/cupsctl.c:232 systemv/cupstestppd.c:3857
 #: systemv/lp.c:750 systemv/lpadmin.c:1620 systemv/lpinfo.c:497
 #: systemv/lpmove.c:216 systemv/lpoptions.c:538 systemv/lpstat.c:2044
-#: tools/ippeveprinter.c:7664 tools/ippfind.c:2765 tools/ipptool.c:4307
+#: tools/ippeveprinter.c:7922 tools/ippfind.c:2765 tools/ipptool.c:4307
 #: ppdc/ppdc.cxx:426 ppdc/ppdhtml.cxx:173 ppdc/ppdi.cxx:119
 #: ppdc/ppdmerge.cxx:356 ppdc/ppdpo.cxx:243
 msgid "Options:"
@@ -5333,7 +5353,7 @@ msgstr ""
 msgid "Output Mode"
 msgstr ""
 
-#: ppdc/sample.c:252
+#: ppdc/sample.c:256
 msgid "PCL Laser Printer"
 msgstr ""
 
@@ -5361,7 +5381,7 @@ msgstr ""
 msgid "PRC32K Oversize Long Edge"
 msgstr ""
 
-#: cups/dest.c:1858
+#: cups/dest.c:1857
 msgid "PRINTER environment variable names default destination that does not exist."
 msgstr ""
 
@@ -5373,11 +5393,11 @@ msgstr ""
 msgid "Packet does not start with SEQUENCE"
 msgstr ""
 
-#: ppdc/sample.c:355
+#: ppdc/sample.c:358
 msgid "ParamCustominCutInterval"
 msgstr ""
 
-#: ppdc/sample.c:353
+#: ppdc/sample.c:356
 msgid "ParamCustominTearInterval"
 msgstr ""
 
@@ -5394,7 +5414,7 @@ msgstr ""
 msgid "Pause Printer"
 msgstr ""
 
-#: ppdc/sample.c:443
+#: ppdc/sample.c:446
 msgid "Peel-Off"
 msgstr ""
 
@@ -5406,7 +5426,7 @@ msgstr ""
 msgid "Photo Labels"
 msgstr ""
 
-#: ppdc/sample.c:281
+#: ppdc/sample.c:284
 msgid "Plain Paper"
 msgstr ""
 
@@ -5418,7 +5438,7 @@ msgstr ""
 msgid "Port Monitor"
 msgstr ""
 
-#: ppdc/sample.c:270
+#: ppdc/sample.c:273
 msgid "PostScript Printer"
 msgstr ""
 
@@ -5438,11 +5458,11 @@ msgstr ""
 msgid "Postcard Long Edge"
 msgstr ""
 
-#: backend/ipp.c:973 backend/ipp.c:981
+#: backend/ipp.c:972 backend/ipp.c:980
 msgid "Preparing to print."
 msgstr ""
 
-#: ppdc/sample.c:290
+#: ppdc/sample.c:293
 msgid "Print Density"
 msgstr ""
 
@@ -5450,15 +5470,15 @@ msgstr ""
 msgid "Print Job:"
 msgstr ""
 
-#: ppdc/sample.c:335
+#: ppdc/sample.c:338
 msgid "Print Mode"
 msgstr ""
 
-#: cups/ppd-cache.c:4281 cups/ppd-cache.c:4343 cups/ppd-cache.c:4383
+#: cups/ppd-cache.c:4469 cups/ppd-cache.c:4531 cups/ppd-cache.c:4571
 msgid "Print Quality"
 msgstr ""
 
-#: ppdc/sample.c:378
+#: ppdc/sample.c:381
 msgid "Print Rate"
 msgstr ""
 
@@ -5466,7 +5486,7 @@ msgstr ""
 msgid "Print Self-Test Page"
 msgstr ""
 
-#: ppdc/sample.c:322
+#: ppdc/sample.c:325
 msgid "Print Speed"
 msgstr ""
 
@@ -5474,11 +5494,11 @@ msgstr ""
 msgid "Print Test Page"
 msgstr ""
 
-#: ppdc/sample.c:351
+#: ppdc/sample.c:354
 msgid "Print and Cut"
 msgstr ""
 
-#: ppdc/sample.c:339
+#: ppdc/sample.c:342
 msgid "Print and Tear"
 msgstr ""
 
@@ -5486,15 +5506,15 @@ msgstr ""
 msgid "Print file sent."
 msgstr ""
 
-#: backend/ipp.c:2261
+#: backend/ipp.c:2269
 msgid "Print job canceled at printer."
 msgstr ""
 
-#: backend/ipp.c:2253
+#: backend/ipp.c:2261
 msgid "Print job too large."
 msgstr ""
 
-#: backend/ipp.c:1721
+#: backend/ipp.c:1722
 msgid "Print job was not accepted."
 msgstr ""
 
@@ -5507,7 +5527,7 @@ msgstr ""
 msgid "Printer Added"
 msgstr ""
 
-#: ppdc/sample.c:255
+#: ppdc/sample.c:258
 msgid "Printer Default"
 msgstr ""
 
@@ -5523,19 +5543,19 @@ msgstr ""
 msgid "Printer Paused"
 msgstr ""
 
-#: ppdc/sample.c:289
+#: ppdc/sample.c:292
 msgid "Printer Settings"
 msgstr ""
 
-#: backend/ipp.c:2256
+#: backend/ipp.c:2264
 msgid "Printer cannot print supplied content."
 msgstr ""
 
-#: backend/ipp.c:2259
+#: backend/ipp.c:2267
 msgid "Printer cannot print with supplied options."
 msgstr ""
 
-#: cups/ppd-cache.c:4556
+#: cups/ppd-cache.c:4744
 msgid "Printer does not support required IPP attributes or document formats."
 msgstr ""
 
@@ -5548,12 +5568,12 @@ msgid "Printers"
 msgstr ""
 
 #: filter/rastertoepson.c:1107 filter/rastertohp.c:774
-#: filter/rastertolabel.c:1235
+#: filter/rastertolabel.c:1236
 #, c-format
 msgid "Printing page %d, %u%% complete."
 msgstr ""
 
-#: cups/ppd-cache.c:4111
+#: cups/ppd-cache.c:4222
 msgid "Punch"
 msgstr ""
 
@@ -5573,25 +5593,25 @@ msgstr ""
 msgid "Reject Jobs"
 msgstr ""
 
-#: backend/lpd.c:1074 backend/lpd.c:1206
+#: backend/lpd.c:1078 backend/lpd.c:1210
 #, c-format
 msgid "Remote host did not accept control file (%d)."
 msgstr ""
 
-#: backend/lpd.c:1159
+#: backend/lpd.c:1163
 #, c-format
 msgid "Remote host did not accept data file (%d)."
 msgstr ""
 
-#: ppdc/sample.c:423
+#: ppdc/sample.c:426
 msgid "Reprint After Error"
 msgstr ""
 
-#: cups/http-support.c:1525
+#: cups/http-support.c:1530
 msgid "Request Entity Too Large"
 msgstr ""
 
-#: cups/ppd.c:812 cups/ppd.c:1349 ppdc/sample.c:231
+#: cups/ppd.c:812 cups/ppd.c:1349 ppdc/sample.c:232
 msgid "Resolution"
 msgstr ""
 
@@ -5607,7 +5627,7 @@ msgstr ""
 msgid "Return Address"
 msgstr ""
 
-#: ppdc/sample.c:444
+#: ppdc/sample.c:447
 msgid "Rewind"
 msgstr ""
 
@@ -5615,11 +5635,15 @@ msgstr ""
 msgid "SEQUENCE uses indefinite length"
 msgstr ""
 
-#: cups/http-support.c:1549
+#: cups/http-support.c:1554
 msgid "SSL/TLS Negotiation Error"
 msgstr ""
 
-#: cups/http-support.c:1506
+#: ppdc/sample.c:238
+msgid "Second Roll (DUO/Twin Only)"
+msgstr ""
+
+#: cups/http-support.c:1511
 msgid "See Other"
 msgstr ""
 
@@ -5627,7 +5651,7 @@ msgstr ""
 msgid "See remote printer."
 msgstr ""
 
-#: cups/tls-darwin.c:765 cups/tls-gnutls.c:606
+#: cups/tls-darwin.c:740 cups/tls-gnutls.c:606
 msgid "Self-signed credentials are blocked."
 msgstr ""
 
@@ -5651,11 +5675,11 @@ msgstr ""
 msgid "Server Stopped"
 msgstr ""
 
-#: cups/tls-darwin.c:1275 cups/tls-gnutls.c:1298
+#: cups/tls-darwin.c:1250 cups/tls-gnutls.c:1299
 msgid "Server credentials not set."
 msgstr ""
 
-#: cups/http-support.c:1543
+#: cups/http-support.c:1548
 msgid "Service Unavailable"
 msgstr ""
 
@@ -5684,24 +5708,24 @@ msgstr ""
 msgid "Shipping Address"
 msgstr ""
 
-#: cups/ppd-cache.c:3872 ppdc/sample.c:265
+#: cups/ppd-cache.c:3872 ppdc/sample.c:268
 msgid "Short-Edge (Landscape)"
 msgstr ""
 
-#: ppdc/sample.c:283
+#: ppdc/sample.c:286
 msgid "Special Paper"
 msgstr ""
 
-#: backend/lpd.c:1115
+#: backend/lpd.c:1119
 #, c-format
 msgid "Spooling job, %.0f%% complete."
 msgstr ""
 
-#: ppdc/sample.c:336
+#: ppdc/sample.c:339
 msgid "Standard"
 msgstr ""
 
-#: cups/ppd-cache.c:4011
+#: cups/ppd-cache.c:4056
 msgid "Staple"
 msgstr ""
 
@@ -5711,7 +5735,7 @@ msgid "Starting Banner"
 msgstr ""
 
 #: filter/rastertoepson.c:1083 filter/rastertohp.c:750
-#: filter/rastertolabel.c:1211
+#: filter/rastertolabel.c:1212
 #, c-format
 msgid "Starting page %d."
 msgstr ""
@@ -5742,7 +5766,7 @@ msgstr ""
 msgid "Super B/A3"
 msgstr ""
 
-#: cups/http-support.c:1485
+#: cups/http-support.c:1490
 msgid "Switching Protocols"
 msgstr ""
 
@@ -5758,15 +5782,15 @@ msgstr ""
 msgid "Tabloid Oversize Long Edge"
 msgstr ""
 
-#: ppdc/sample.c:337
+#: ppdc/sample.c:340
 msgid "Tear"
 msgstr ""
 
-#: ppdc/sample.c:442
+#: ppdc/sample.c:445
 msgid "Tear-Off"
 msgstr ""
 
-#: ppdc/sample.c:383
+#: ppdc/sample.c:386
 msgid "Tear-Off Adjust Position"
 msgstr ""
 
@@ -5802,7 +5826,7 @@ msgid "The PPD file \"%s\" could not be opened: %s"
 msgstr ""
 
 #: filter/rastertoepson.c:1052 filter/rastertohp.c:721
-#: filter/rastertolabel.c:1175
+#: filter/rastertolabel.c:1176
 msgid "The PPD file could not be opened."
 msgstr ""
 
@@ -5819,16 +5843,16 @@ msgstr ""
 msgid "The notify-user-data value is too large (%d > 63 octets)."
 msgstr ""
 
-#: backend/ipp.c:993
+#: backend/ipp.c:992
 msgid "The printer configuration is incorrect or the printer no longer exists."
 msgstr ""
 
-#: backend/lpd.c:678 backend/lpd.c:1067 backend/lpd.c:1149 backend/lpd.c:1199
+#: backend/lpd.c:682 backend/lpd.c:1071 backend/lpd.c:1153 backend/lpd.c:1203
 msgid "The printer did not respond."
 msgstr ""
 
-#: backend/ipp.c:766 backend/ipp.c:956 backend/ipp.c:1070 backend/ipp.c:1523
-#: backend/ipp.c:1693 backend/lpd.c:886 backend/socket.c:354
+#: backend/ipp.c:765 backend/ipp.c:955 backend/ipp.c:1069 backend/ipp.c:1524
+#: backend/ipp.c:1694 backend/lpd.c:890 backend/socket.c:354
 #: backend/usb-unix.c:117 backend/usb-unix.c:407 backend/usb-unix.c:490
 msgid "The printer is in use."
 msgstr ""
@@ -5837,8 +5861,8 @@ msgstr ""
 msgid "The printer is not connected."
 msgstr ""
 
-#: backend/ipp.c:744 backend/ipp.c:777 backend/ipp.c:952 backend/lpd.c:865
-#: backend/lpd.c:906 backend/socket.c:333 backend/socket.c:366
+#: backend/ipp.c:743 backend/ipp.c:776 backend/ipp.c:951 backend/lpd.c:869
+#: backend/lpd.c:910 backend/socket.c:333 backend/socket.c:366
 msgid "The printer is not responding."
 msgstr ""
 
@@ -5854,11 +5878,11 @@ msgstr ""
 msgid "The printer is offline."
 msgstr ""
 
-#: backend/ipp.c:760 backend/lpd.c:880 backend/socket.c:348
+#: backend/ipp.c:759 backend/lpd.c:884 backend/socket.c:348
 msgid "The printer is unreachable at this time."
 msgstr ""
 
-#: backend/ipp.c:753 backend/lpd.c:873 backend/socket.c:341
+#: backend/ipp.c:752 backend/lpd.c:877 backend/socket.c:341
 msgid "The printer may not exist or is unavailable at this time."
 msgstr ""
 
@@ -5916,7 +5940,7 @@ msgstr ""
 msgid "There was an unrecoverable USB error."
 msgstr ""
 
-#: ppdc/sample.c:430
+#: ppdc/sample.c:433
 msgid "Thermal Transfer Media"
 msgstr ""
 
@@ -5934,40 +5958,40 @@ msgstr ""
 msgid "Too many printer-state-reasons values (%d > %d)."
 msgstr ""
 
-#: ppdc/sample.c:284
+#: ppdc/sample.c:287
 msgid "Transparency"
 msgstr ""
 
-#: ppdc/sample.c:279
+#: ppdc/sample.c:282
 msgid "Tray"
 msgstr ""
 
-#: ppdc/sample.c:256
+#: ppdc/sample.c:259
 msgid "Tray 1"
 msgstr ""
 
-#: ppdc/sample.c:257
+#: ppdc/sample.c:260
 msgid "Tray 2"
 msgstr ""
 
-#: ppdc/sample.c:258
+#: ppdc/sample.c:261
 msgid "Tray 3"
 msgstr ""
 
-#: ppdc/sample.c:259
+#: ppdc/sample.c:262
 msgid "Tray 4"
 msgstr ""
 
-#: cups/tls-darwin.c:670 cups/tls-darwin.c:752 cups/tls-gnutls.c:504
+#: cups/tls-darwin.c:645 cups/tls-darwin.c:727 cups/tls-gnutls.c:504
 #: cups/tls-gnutls.c:586
 msgid "Trust on first use is disabled."
 msgstr ""
 
-#: cups/http-support.c:1528
+#: cups/http-support.c:1533
 msgid "URI Too Long"
 msgstr ""
 
-#: cups/http-support.c:1603
+#: cups/http-support.c:1608
 msgid "URI too large"
 msgstr ""
 
@@ -6019,7 +6043,7 @@ msgstr ""
 msgid "Unable to add class"
 msgstr ""
 
-#: backend/ipp.c:1880
+#: backend/ipp.c:1887
 msgid "Unable to add document to print job."
 msgstr ""
 
@@ -6044,11 +6068,11 @@ msgstr ""
 msgid "Unable to allocate memory for pages array"
 msgstr ""
 
-#: tools/ippeveprinter.c:1486
+#: tools/ippeveprinter.c:1628
 msgid "Unable to allocate memory for printer"
 msgstr ""
 
-#: backend/ipp.c:2165 backend/ipp.c:2696
+#: backend/ipp.c:2173 backend/ipp.c:2704
 msgid "Unable to cancel print job."
 msgstr ""
 
@@ -6082,7 +6106,7 @@ msgstr ""
 msgid "Unable to connect to host."
 msgstr ""
 
-#: backend/ipp.c:723 backend/ipp.c:1275 backend/lpd.c:846 backend/socket.c:314
+#: backend/ipp.c:722 backend/ipp.c:1274 backend/lpd.c:850 backend/socket.c:314
 #: backend/usb-unix.c:103
 msgid "Unable to contact printer, queuing on next printer in class."
 msgstr ""
@@ -6096,7 +6120,7 @@ msgstr ""
 msgid "Unable to copy PPD file."
 msgstr ""
 
-#: cups/tls-darwin.c:636 cups/tls-gnutls.c:467
+#: cups/tls-darwin.c:611 cups/tls-gnutls.c:467
 msgid "Unable to create credentials from array."
 msgstr ""
 
@@ -6108,11 +6132,11 @@ msgstr ""
 msgid "Unable to create printer."
 msgstr ""
 
-#: cups/tls-darwin.c:1566 cups/tls-gnutls.c:1510
+#: cups/tls-darwin.c:1541 cups/tls-gnutls.c:1511
 msgid "Unable to create server credentials."
 msgstr ""
 
-#: tools/ippeveprinter.c:626
+#: tools/ippeveprinter.c:664
 #, c-format
 msgid "Unable to create spool directory \"%s\": %s"
 msgstr ""
@@ -6137,36 +6161,36 @@ msgstr ""
 msgid "Unable to edit cupsd.conf files larger than 1MB"
 msgstr ""
 
-#: cups/tls-darwin.c:1793
+#: cups/tls-darwin.c:1768
 #, c-format
 msgid "Unable to establish a secure connection to host (%d)."
 msgstr ""
 
-#: cups/tls-darwin.c:1754
+#: cups/tls-darwin.c:1729
 msgid "Unable to establish a secure connection to host (certificate chain invalid)."
 msgstr ""
 
-#: cups/tls-darwin.c:1744
+#: cups/tls-darwin.c:1719
 msgid "Unable to establish a secure connection to host (certificate not yet valid)."
 msgstr ""
 
-#: cups/tls-darwin.c:1739
+#: cups/tls-darwin.c:1714
 msgid "Unable to establish a secure connection to host (expired certificate)."
 msgstr ""
 
-#: cups/tls-darwin.c:1749
+#: cups/tls-darwin.c:1724
 msgid "Unable to establish a secure connection to host (host name mismatch)."
 msgstr ""
 
-#: cups/tls-darwin.c:1759
+#: cups/tls-darwin.c:1734
 msgid "Unable to establish a secure connection to host (peer dropped connection before responding)."
 msgstr ""
 
-#: cups/tls-darwin.c:1734
+#: cups/tls-darwin.c:1709
 msgid "Unable to establish a secure connection to host (self-signed certificate)."
 msgstr ""
 
-#: cups/tls-darwin.c:1729
+#: cups/tls-darwin.c:1704
 msgid "Unable to establish a secure connection to host (untrusted certificate)."
 msgstr ""
 
@@ -6174,7 +6198,7 @@ msgstr ""
 msgid "Unable to establish a secure connection to host."
 msgstr ""
 
-#: tools/ippeveprinter.c:1461 tools/ippeveprinter.c:1471
+#: tools/ippeveprinter.c:1603 tools/ippeveprinter.c:1613
 #, c-format
 msgid "Unable to execute command \"%s\": %s"
 msgstr ""
@@ -6183,15 +6207,15 @@ msgstr ""
 msgid "Unable to find destination for job"
 msgstr ""
 
-#: cups/http-support.c:2094
+#: cups/http-support.c:2099
 msgid "Unable to find printer."
 msgstr ""
 
-#: cups/tls-darwin.c:1579
+#: cups/tls-darwin.c:1554
 msgid "Unable to find server credentials."
 msgstr ""
 
-#: backend/ipp.c:3359
+#: backend/ipp.c:3367
 msgid "Unable to get backend exit status."
 msgstr ""
 
@@ -6219,7 +6243,7 @@ msgstr ""
 msgid "Unable to get printer status"
 msgstr ""
 
-#: backend/ipp.c:1017
+#: backend/ipp.c:1016
 msgid "Unable to get printer status."
 msgstr ""
 
@@ -6232,7 +6256,7 @@ msgstr ""
 msgid "Unable to locate printer \"%s\"."
 msgstr ""
 
-#: backend/dnssd.c:752 backend/ipp.c:336 backend/lpd.c:181
+#: backend/dnssd.c:752 backend/ipp.c:335 backend/lpd.c:185
 #: backend/socket.c:155
 msgid "Unable to locate printer."
 msgstr ""
@@ -6274,14 +6298,14 @@ msgstr ""
 msgid "Unable to open help file."
 msgstr ""
 
-#: backend/ipp.c:377 backend/ipp.c:1620 backend/ipp.c:1833 backend/lpd.c:469
+#: backend/ipp.c:376 backend/ipp.c:1621 backend/ipp.c:1834 backend/lpd.c:473
 #: backend/socket.c:142 backend/usb.c:224 filter/gziptoany.c:65
 #: filter/pstops.c:262
 msgid "Unable to open print file"
 msgstr ""
 
 #: filter/rastertoepson.c:1012 filter/rastertohp.c:681
-#: filter/rastertolabel.c:1133
+#: filter/rastertolabel.c:1134
 msgid "Unable to open raster file"
 msgstr ""
 
@@ -6294,8 +6318,8 @@ msgstr ""
 msgid "Unable to read print data."
 msgstr ""
 
-#: tools/ippeveprinter.c:6613 tools/ippeveprinter.c:6631
-#: tools/ippeveprinter.c:6650 tools/ippeveprinter.c:6664
+#: tools/ippeveprinter.c:6861 tools/ippeveprinter.c:6879
+#: tools/ippeveprinter.c:6898 tools/ippeveprinter.c:6912
 #, c-format
 msgid "Unable to register \"%s.%s\": %d"
 msgstr ""
@@ -6304,7 +6328,7 @@ msgstr ""
 msgid "Unable to rename job document file."
 msgstr ""
 
-#: cups/dest.c:3265
+#: cups/dest.c:3252
 msgid "Unable to resolve printer-uri."
 msgstr ""
 
@@ -6328,7 +6352,7 @@ msgstr ""
 msgid "Unable to set server default"
 msgstr ""
 
-#: backend/ipp.c:3218 backend/ipp.c:3295 backend/ipp.c:3303
+#: backend/ipp.c:3226 backend/ipp.c:3303 backend/ipp.c:3311
 msgid "Unable to start backend process."
 msgstr ""
 
@@ -6349,7 +6373,7 @@ msgstr ""
 msgid "Unable to write uncompressed print data: %s"
 msgstr ""
 
-#: cups/http-support.c:1516
+#: cups/http-support.c:1521
 msgid "Unauthorized"
 msgstr ""
 
@@ -6357,7 +6381,7 @@ msgstr ""
 msgid "Units"
 msgstr ""
 
-#: cups/http-support.c:1556 cups/http-support.c:1640 cups/ppd.c:313
+#: cups/http-support.c:1561 cups/http-support.c:1645 cups/ppd.c:313
 msgid "Unknown"
 msgstr ""
 
@@ -6366,27 +6390,27 @@ msgstr ""
 msgid "Unknown choice \"%s\" for option \"%s\"."
 msgstr ""
 
-#: tools/ippeveprinter.c:3848
+#: tools/ippeveprinter.c:3996
 #, c-format
 msgid "Unknown directive \"%s\" on line %d of \"%s\" ignored."
 msgstr ""
 
-#: backend/ipp.c:519
+#: backend/ipp.c:518
 #, c-format
 msgid "Unknown encryption option value: \"%s\"."
 msgstr ""
 
-#: backend/lpd.c:327
+#: backend/lpd.c:331
 #, c-format
 msgid "Unknown file order: \"%s\"."
 msgstr ""
 
-#: backend/lpd.c:298
+#: backend/lpd.c:302
 #, c-format
 msgid "Unknown format character: \"%c\"."
 msgstr ""
 
-#: cups/hash.c:278
+#: cups/hash.c:279
 msgid "Unknown hash algorithm."
 msgstr ""
 
@@ -6394,7 +6418,7 @@ msgstr ""
 msgid "Unknown media size name."
 msgstr ""
 
-#: backend/ipp.c:583
+#: backend/ipp.c:582
 #, c-format
 msgid "Unknown option \"%s\" with value \"%s\"."
 msgstr ""
@@ -6404,7 +6428,7 @@ msgstr ""
 msgid "Unknown option \"%s\"."
 msgstr ""
 
-#: backend/lpd.c:313
+#: backend/lpd.c:317
 #, c-format
 msgid "Unknown print mode: \"%s\"."
 msgstr ""
@@ -6427,7 +6451,7 @@ msgstr ""
 msgid "Unknown request version."
 msgstr ""
 
-#: cups/http-support.c:1633
+#: cups/http-support.c:1638
 msgid "Unknown scheme in URI"
 msgstr ""
 
@@ -6435,7 +6459,7 @@ msgstr ""
 msgid "Unknown service name."
 msgstr ""
 
-#: backend/ipp.c:548
+#: backend/ipp.c:547
 #, c-format
 msgid "Unknown version option value: \"%s\"."
 msgstr ""
@@ -6515,7 +6539,7 @@ msgstr ""
 msgid "Unsupported value type"
 msgstr ""
 
-#: cups/http-support.c:1531
+#: cups/http-support.c:1536
 msgid "Upgrade Required"
 msgstr ""
 
@@ -6524,7 +6548,7 @@ msgstr ""
 msgid "Usage: %s [options] destination(s)"
 msgstr ""
 
-#: backend/dnssd.c:192 backend/ipp.c:325 backend/lpd.c:168
+#: backend/dnssd.c:192 backend/ipp.c:324 backend/lpd.c:172
 #: backend/socket.c:119 backend/usb.c:170 filter/commandtops.c:57
 #: filter/gziptoany.c:38 filter/pstops.c:223 monitor/bcp.c:48
 #: monitor/tbcp.c:47
@@ -6543,7 +6567,7 @@ msgstr ""
 msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]"
 msgstr ""
 
-#: scheduler/main.c:2132
+#: scheduler/main.c:2134
 msgid "Usage: cupsd [options]"
 msgstr ""
 
@@ -6557,7 +6581,7 @@ msgid ""
 "       program | cupstestppd [options] -"
 msgstr ""
 
-#: tools/ippeveprinter.c:7663
+#: tools/ippeveprinter.c:7921
 msgid "Usage: ippeveprinter [options] \"name\""
 msgstr ""
 
@@ -6650,7 +6674,7 @@ msgstr ""
 msgid "Usage: snmp [host-or-ip-address]"
 msgstr ""
 
-#: tools/ippeveprinter.c:631
+#: tools/ippeveprinter.c:669
 #, c-format
 msgid "Using spool directory \"%s\"."
 msgstr ""
@@ -6667,7 +6691,7 @@ msgstr ""
 msgid "Version uses indefinite length"
 msgstr ""
 
-#: backend/ipp.c:2000
+#: backend/ipp.c:2009
 msgid "Waiting for job to complete."
 msgstr ""
 
@@ -6683,7 +6707,7 @@ msgstr ""
 msgid "Warning: This program will be removed in a future version of CUPS."
 msgstr ""
 
-#: cups/http-support.c:1552
+#: cups/http-support.c:1557
 msgid "Web Interface is Disabled"
 msgstr ""
 
@@ -6704,11 +6728,11 @@ msgstr ""
 msgid "Your account does not have the necessary privileges."
 msgstr ""
 
-#: ppdc/sample.c:434
+#: ppdc/sample.c:437
 msgid "ZPL Label Printer"
 msgstr ""
 
-#: ppdc/sample.c:357
+#: ppdc/sample.c:360
 msgid "Zebra"
 msgstr ""
 
@@ -8292,433 +8316,443 @@ msgstr ""
 msgid "finishing-template.trim-after-pages"
 msgstr ""
 
-#. TRANSLATORS: Finishings
+#. TRANSLATORS: Trim After Every Set
 #: locale/ipp-strings.c:580
+msgid "finishing-template.trim-after-sets"
+msgstr ""
+
+#. TRANSLATORS: Trim After Every Page
+#: locale/ipp-strings.c:582
+msgid "finishing-template.trim-after-sheets"
+msgstr ""
+
+#. TRANSLATORS: Finishings
+#: locale/ipp-strings.c:584
 msgid "finishings"
 msgstr ""
 
 #. TRANSLATORS: Finishings
-#: locale/ipp-strings.c:582
+#: locale/ipp-strings.c:586
 msgid "finishings-col"
 msgstr ""
 
 #. TRANSLATORS: Fold
-#: locale/ipp-strings.c:584
+#: locale/ipp-strings.c:588
 msgid "finishings.10"
 msgstr ""
 
 #. TRANSLATORS: Z Fold
-#: locale/ipp-strings.c:586
+#: locale/ipp-strings.c:590
 msgid "finishings.100"
 msgstr ""
 
 #. TRANSLATORS: Engineering Z Fold
-#: locale/ipp-strings.c:588
+#: locale/ipp-strings.c:592
 msgid "finishings.101"
 msgstr ""
 
 #. TRANSLATORS: Trim
-#: locale/ipp-strings.c:590
+#: locale/ipp-strings.c:594
 msgid "finishings.11"
 msgstr ""
 
 #. TRANSLATORS: Bale
-#: locale/ipp-strings.c:592
+#: locale/ipp-strings.c:596
 msgid "finishings.12"
 msgstr ""
 
 #. TRANSLATORS: Booklet Maker
-#: locale/ipp-strings.c:594
+#: locale/ipp-strings.c:598
 msgid "finishings.13"
 msgstr ""
 
 #. TRANSLATORS: Jog Offset
-#: locale/ipp-strings.c:596
+#: locale/ipp-strings.c:600
 msgid "finishings.14"
 msgstr ""
 
 #. TRANSLATORS: Coat
-#: locale/ipp-strings.c:598
+#: locale/ipp-strings.c:602
 msgid "finishings.15"
 msgstr ""
 
 #. TRANSLATORS: Laminate
-#: locale/ipp-strings.c:600
+#: locale/ipp-strings.c:604
 msgid "finishings.16"
 msgstr ""
 
 #. TRANSLATORS: Staple Top Left
-#: locale/ipp-strings.c:602
+#: locale/ipp-strings.c:606
 msgid "finishings.20"
 msgstr ""
 
 #. TRANSLATORS: Staple Bottom Left
-#: locale/ipp-strings.c:604
+#: locale/ipp-strings.c:608
 msgid "finishings.21"
 msgstr ""
 
 #. TRANSLATORS: Staple Top Right
-#: locale/ipp-strings.c:606
+#: locale/ipp-strings.c:610
 msgid "finishings.22"
 msgstr ""
 
 #. TRANSLATORS: Staple Bottom Right
-#: locale/ipp-strings.c:608
+#: locale/ipp-strings.c:612
 msgid "finishings.23"
 msgstr ""
 
 #. TRANSLATORS: Edge Stitch Left
-#: locale/ipp-strings.c:610
+#: locale/ipp-strings.c:614
 msgid "finishings.24"
 msgstr ""
 
 #. TRANSLATORS: Edge Stitch Top
-#: locale/ipp-strings.c:612
+#: locale/ipp-strings.c:616
 msgid "finishings.25"
 msgstr ""
 
 #. TRANSLATORS: Edge Stitch Right
-#: locale/ipp-strings.c:614
+#: locale/ipp-strings.c:618
 msgid "finishings.26"
 msgstr ""
 
 #. TRANSLATORS: Edge Stitch Bottom
-#: locale/ipp-strings.c:616
+#: locale/ipp-strings.c:620
 msgid "finishings.27"
 msgstr ""
 
 #. TRANSLATORS: 2 Staples on Left
-#: locale/ipp-strings.c:618
+#: locale/ipp-strings.c:622
 msgid "finishings.28"
 msgstr ""
 
 #. TRANSLATORS: 2 Staples on Top
-#: locale/ipp-strings.c:620
+#: locale/ipp-strings.c:624
 msgid "finishings.29"
 msgstr ""
 
 #. TRANSLATORS: None
-#: locale/ipp-strings.c:622
+#: locale/ipp-strings.c:626
 msgid "finishings.3"
 msgstr ""
 
 #. TRANSLATORS: 2 Staples on Right
-#: locale/ipp-strings.c:624
+#: locale/ipp-strings.c:628
 msgid "finishings.30"
 msgstr ""
 
 #. TRANSLATORS: 2 Staples on Bottom
-#: locale/ipp-strings.c:626
+#: locale/ipp-strings.c:630
 msgid "finishings.31"
 msgstr ""
 
 #. TRANSLATORS: 3 Staples on Left
-#: locale/ipp-strings.c:628
+#: locale/ipp-strings.c:632
 msgid "finishings.32"
 msgstr ""
 
 #. TRANSLATORS: 3 Staples on Top
-#: locale/ipp-strings.c:630
+#: locale/ipp-strings.c:634
 msgid "finishings.33"
 msgstr ""
 
 #. TRANSLATORS: 3 Staples on Right
-#: locale/ipp-strings.c:632
+#: locale/ipp-strings.c:636
 msgid "finishings.34"
 msgstr ""
 
 #. TRANSLATORS: 3 Staples on Bottom
-#: locale/ipp-strings.c:634
+#: locale/ipp-strings.c:638
 msgid "finishings.35"
 msgstr ""
 
 #. TRANSLATORS: Staple
-#: locale/ipp-strings.c:636
+#: locale/ipp-strings.c:640
 msgid "finishings.4"
 msgstr ""
 
 #. TRANSLATORS: Punch
-#: locale/ipp-strings.c:638
+#: locale/ipp-strings.c:642
 msgid "finishings.5"
 msgstr ""
 
 #. TRANSLATORS: Bind Left
-#: locale/ipp-strings.c:640
+#: locale/ipp-strings.c:644
 msgid "finishings.50"
 msgstr ""
 
 #. TRANSLATORS: Bind Top
-#: locale/ipp-strings.c:642
+#: locale/ipp-strings.c:646
 msgid "finishings.51"
 msgstr ""
 
 #. TRANSLATORS: Bind Right
-#: locale/ipp-strings.c:644
+#: locale/ipp-strings.c:648
 msgid "finishings.52"
 msgstr ""
 
 #. TRANSLATORS: Bind Bottom
-#: locale/ipp-strings.c:646
+#: locale/ipp-strings.c:650
 msgid "finishings.53"
 msgstr ""
 
 #. TRANSLATORS: Cover
-#: locale/ipp-strings.c:648
+#: locale/ipp-strings.c:652
 msgid "finishings.6"
 msgstr ""
 
 #. TRANSLATORS: Trim Pages
-#: locale/ipp-strings.c:650
+#: locale/ipp-strings.c:654
 msgid "finishings.60"
 msgstr ""
 
 #. TRANSLATORS: Trim Documents
-#: locale/ipp-strings.c:652
+#: locale/ipp-strings.c:656
 msgid "finishings.61"
 msgstr ""
 
 #. TRANSLATORS: Trim Copies
-#: locale/ipp-strings.c:654
+#: locale/ipp-strings.c:658
 msgid "finishings.62"
 msgstr ""
 
 #. TRANSLATORS: Trim Job
-#: locale/ipp-strings.c:656
+#: locale/ipp-strings.c:660
 msgid "finishings.63"
 msgstr ""
 
 #. TRANSLATORS: Bind
-#: locale/ipp-strings.c:658
+#: locale/ipp-strings.c:662
 msgid "finishings.7"
 msgstr ""
 
 #. TRANSLATORS: Punch Top Left
-#: locale/ipp-strings.c:660
+#: locale/ipp-strings.c:664
 msgid "finishings.70"
 msgstr ""
 
 #. TRANSLATORS: Punch Bottom Left
-#: locale/ipp-strings.c:662
+#: locale/ipp-strings.c:666
 msgid "finishings.71"
 msgstr ""
 
 #. TRANSLATORS: Punch Top Right
-#: locale/ipp-strings.c:664
+#: locale/ipp-strings.c:668
 msgid "finishings.72"
 msgstr ""
 
 #. TRANSLATORS: Punch Bottom Right
-#: locale/ipp-strings.c:666
+#: locale/ipp-strings.c:670
 msgid "finishings.73"
 msgstr ""
 
 #. TRANSLATORS: 2-hole Punch Left
-#: locale/ipp-strings.c:668
+#: locale/ipp-strings.c:672
 msgid "finishings.74"
 msgstr ""
 
 #. TRANSLATORS: 2-hole Punch Top
-#: locale/ipp-strings.c:670
+#: locale/ipp-strings.c:674
 msgid "finishings.75"
 msgstr ""
 
 #. TRANSLATORS: 2-hole Punch Right
-#: locale/ipp-strings.c:672
+#: locale/ipp-strings.c:676
 msgid "finishings.76"
 msgstr ""
 
 #. TRANSLATORS: 2-hole Punch Bottom
-#: locale/ipp-strings.c:674
+#: locale/ipp-strings.c:678
 msgid "finishings.77"
 msgstr ""
 
 #. TRANSLATORS: 3-hole Punch Left
-#: locale/ipp-strings.c:676
+#: locale/ipp-strings.c:680
 msgid "finishings.78"
 msgstr ""
 
 #. TRANSLATORS: 3-hole Punch Top
-#: locale/ipp-strings.c:678
+#: locale/ipp-strings.c:682
 msgid "finishings.79"
 msgstr ""
 
 #. TRANSLATORS: Saddle Stitch
-#: locale/ipp-strings.c:680
+#: locale/ipp-strings.c:684
 msgid "finishings.8"
 msgstr ""
 
 #. TRANSLATORS: 3-hole Punch Right
-#: locale/ipp-strings.c:682
+#: locale/ipp-strings.c:686
 msgid "finishings.80"
 msgstr ""
 
 #. TRANSLATORS: 3-hole Punch Bottom
-#: locale/ipp-strings.c:684
+#: locale/ipp-strings.c:688
 msgid "finishings.81"
 msgstr ""
 
 #. TRANSLATORS: 4-hole Punch Left
-#: locale/ipp-strings.c:686
+#: locale/ipp-strings.c:690
 msgid "finishings.82"
 msgstr ""
 
 #. TRANSLATORS: 4-hole Punch Top
-#: locale/ipp-strings.c:688
+#: locale/ipp-strings.c:692
 msgid "finishings.83"
 msgstr ""
 
 #. TRANSLATORS: 4-hole Punch Right
-#: locale/ipp-strings.c:690
+#: locale/ipp-strings.c:694
 msgid "finishings.84"
 msgstr ""
 
 #. TRANSLATORS: 4-hole Punch Bottom
-#: locale/ipp-strings.c:692
+#: locale/ipp-strings.c:696
 msgid "finishings.85"
 msgstr ""
 
 #. TRANSLATORS: Multi-hole Punch Left
-#: locale/ipp-strings.c:694
+#: locale/ipp-strings.c:698
 msgid "finishings.86"
 msgstr ""
 
 #. TRANSLATORS: Multi-hole Punch Top
-#: locale/ipp-strings.c:696
+#: locale/ipp-strings.c:700
 msgid "finishings.87"
 msgstr ""
 
 #. TRANSLATORS: Multi-hole Punch Right
-#: locale/ipp-strings.c:698
+#: locale/ipp-strings.c:702
 msgid "finishings.88"
 msgstr ""
 
 #. TRANSLATORS: Multi-hole Punch Bottom
-#: locale/ipp-strings.c:700
+#: locale/ipp-strings.c:704
 msgid "finishings.89"
 msgstr ""
 
 #. TRANSLATORS: Edge Stitch
-#: locale/ipp-strings.c:702
+#: locale/ipp-strings.c:706
 msgid "finishings.9"
 msgstr ""
 
 #. TRANSLATORS: Accordion Fold
-#: locale/ipp-strings.c:704
+#: locale/ipp-strings.c:708
 msgid "finishings.90"
 msgstr ""
 
 #. TRANSLATORS: Double Gate Fold
-#: locale/ipp-strings.c:706
+#: locale/ipp-strings.c:710
 msgid "finishings.91"
 msgstr ""
 
 #. TRANSLATORS: Gate Fold
-#: locale/ipp-strings.c:708
+#: locale/ipp-strings.c:712
 msgid "finishings.92"
 msgstr ""
 
 #. TRANSLATORS: Half Fold
-#: locale/ipp-strings.c:710
+#: locale/ipp-strings.c:714
 msgid "finishings.93"
 msgstr ""
 
 #. TRANSLATORS: Half Z Fold
-#: locale/ipp-strings.c:712
+#: locale/ipp-strings.c:716
 msgid "finishings.94"
 msgstr ""
 
 #. TRANSLATORS: Left Gate Fold
-#: locale/ipp-strings.c:714
+#: locale/ipp-strings.c:718
 msgid "finishings.95"
 msgstr ""
 
 #. TRANSLATORS: Letter Fold
-#: locale/ipp-strings.c:716
+#: locale/ipp-strings.c:720
 msgid "finishings.96"
 msgstr ""
 
 #. TRANSLATORS: Parallel Fold
-#: locale/ipp-strings.c:718
+#: locale/ipp-strings.c:722
 msgid "finishings.97"
 msgstr ""
 
 #. TRANSLATORS: Poster Fold
-#: locale/ipp-strings.c:720
+#: locale/ipp-strings.c:724
 msgid "finishings.98"
 msgstr ""
 
 #. TRANSLATORS: Right Gate Fold
-#: locale/ipp-strings.c:722
+#: locale/ipp-strings.c:726
 msgid "finishings.99"
 msgstr ""
 
 #. TRANSLATORS: Fold
-#: locale/ipp-strings.c:724
+#: locale/ipp-strings.c:728
 msgid "folding"
 msgstr ""
 
 #. TRANSLATORS: Fold Direction
-#: locale/ipp-strings.c:726
+#: locale/ipp-strings.c:730
 msgid "folding-direction"
 msgstr ""
 
 #. TRANSLATORS: Inward
-#: locale/ipp-strings.c:728
+#: locale/ipp-strings.c:732
 msgid "folding-direction.inward"
 msgstr ""
 
 #. TRANSLATORS: Outward
-#: locale/ipp-strings.c:730
+#: locale/ipp-strings.c:734
 msgid "folding-direction.outward"
 msgstr ""
 
 #. TRANSLATORS: Fold Position
-#: locale/ipp-strings.c:732
+#: locale/ipp-strings.c:736
 msgid "folding-offset"
 msgstr ""
 
 #. TRANSLATORS: Fold Edge
-#: locale/ipp-strings.c:734
+#: locale/ipp-strings.c:738
 msgid "folding-reference-edge"
 msgstr ""
 
 #. TRANSLATORS: Bottom
-#: locale/ipp-strings.c:736
+#: locale/ipp-strings.c:740
 msgid "folding-reference-edge.bottom"
 msgstr ""
 
 #. TRANSLATORS: Left
-#: locale/ipp-strings.c:738
+#: locale/ipp-strings.c:742
 msgid "folding-reference-edge.left"
 msgstr ""
 
 #. TRANSLATORS: Right
-#: locale/ipp-strings.c:740
+#: locale/ipp-strings.c:744
 msgid "folding-reference-edge.right"
 msgstr ""
 
 #. TRANSLATORS: Top
-#: locale/ipp-strings.c:742
+#: locale/ipp-strings.c:746
 msgid "folding-reference-edge.top"
 msgstr ""
 
 #. TRANSLATORS: Font Name
-#: locale/ipp-strings.c:744
+#: locale/ipp-strings.c:748
 msgid "font-name-requested"
 msgstr ""
 
 #. TRANSLATORS: Font Size
-#: locale/ipp-strings.c:746
+#: locale/ipp-strings.c:750
 msgid "font-size-requested"
 msgstr ""
 
 #. TRANSLATORS: Force Front Side
-#: locale/ipp-strings.c:748
+#: locale/ipp-strings.c:752
 msgid "force-front-side"
 msgstr ""
 
 #. TRANSLATORS: From Name
-#: locale/ipp-strings.c:750
+#: locale/ipp-strings.c:754
 msgid "from-name"
 msgstr ""
 
@@ -8735,36 +8769,36 @@ msgid "idle"
 msgstr ""
 
 #. TRANSLATORS: Imposition Template
-#: locale/ipp-strings.c:752
+#: locale/ipp-strings.c:756
 msgid "imposition-template"
 msgstr ""
 
 #. TRANSLATORS: None
-#: locale/ipp-strings.c:754
+#: locale/ipp-strings.c:758
 msgid "imposition-template.none"
 msgstr ""
 
 #. TRANSLATORS: Signature
-#: locale/ipp-strings.c:756
+#: locale/ipp-strings.c:760
 msgid "imposition-template.signature"
 msgstr ""
 
 #. TRANSLATORS: Insert Page Number
-#: locale/ipp-strings.c:758
+#: locale/ipp-strings.c:762
 msgid "insert-after-page-number"
 msgstr ""
 
 #. TRANSLATORS: Insert Count
-#: locale/ipp-strings.c:760
+#: locale/ipp-strings.c:764
 msgid "insert-count"
 msgstr ""
 
 #. TRANSLATORS: Insert Sheet
-#: locale/ipp-strings.c:762
+#: locale/ipp-strings.c:766
 msgid "insert-sheet"
 msgstr ""
 
-#: tools/ippeveprinter.c:4702
+#: tools/ippeveprinter.c:4850
 #, c-format
 msgid "ippeveprinter: Unable to open \"%s\": %s on line %d."
 msgstr ""
@@ -8920,267 +8954,267 @@ msgid "ipptool: URI required before test file."
 msgstr ""
 
 #. TRANSLATORS: Job Account ID
-#: locale/ipp-strings.c:764
+#: locale/ipp-strings.c:768
 msgid "job-account-id"
 msgstr ""
 
 #. TRANSLATORS: Job Account Type
-#: locale/ipp-strings.c:766
+#: locale/ipp-strings.c:770
 msgid "job-account-type"
 msgstr ""
 
 #. TRANSLATORS: General
-#: locale/ipp-strings.c:768
+#: locale/ipp-strings.c:772
 msgid "job-account-type.general"
 msgstr ""
 
 #. TRANSLATORS: Group
-#: locale/ipp-strings.c:770
+#: locale/ipp-strings.c:774
 msgid "job-account-type.group"
 msgstr ""
 
 #. TRANSLATORS: None
-#: locale/ipp-strings.c:772
+#: locale/ipp-strings.c:776
 msgid "job-account-type.none"
 msgstr ""
 
 #. TRANSLATORS: Job Accounting Output Bin
-#: locale/ipp-strings.c:774
+#: locale/ipp-strings.c:778
 msgid "job-accounting-output-bin"
 msgstr ""
 
 #. TRANSLATORS: Job Accounting Sheets
-#: locale/ipp-strings.c:776
+#: locale/ipp-strings.c:780
 msgid "job-accounting-sheets"
 msgstr ""
 
 #. TRANSLATORS: Type of Job Accounting Sheets
-#: locale/ipp-strings.c:778
+#: locale/ipp-strings.c:782
 msgid "job-accounting-sheets-type"
 msgstr ""
 
 #. TRANSLATORS: None
-#: locale/ipp-strings.c:780
+#: locale/ipp-strings.c:784
 msgid "job-accounting-sheets-type.none"
 msgstr ""
 
 #. TRANSLATORS: Standard
-#: locale/ipp-strings.c:782
+#: locale/ipp-strings.c:786
 msgid "job-accounting-sheets-type.standard"
 msgstr ""
 
 #. TRANSLATORS: Job Accounting User ID
-#: locale/ipp-strings.c:784
+#: locale/ipp-strings.c:788
 msgid "job-accounting-user-id"
 msgstr ""
 
 #. TRANSLATORS: Job Cancel After
-#: locale/ipp-strings.c:786
+#: locale/ipp-strings.c:790
 msgid "job-cancel-after"
 msgstr ""
 
 #. TRANSLATORS: Copies
-#: locale/ipp-strings.c:788
+#: locale/ipp-strings.c:792
 msgid "job-copies"
 msgstr ""
 
 #. TRANSLATORS: Back Cover
-#: locale/ipp-strings.c:790
+#: locale/ipp-strings.c:794
 msgid "job-cover-back"
 msgstr ""
 
 #. TRANSLATORS: Front Cover
-#: locale/ipp-strings.c:792
+#: locale/ipp-strings.c:796
 msgid "job-cover-front"
 msgstr ""
 
 #. TRANSLATORS: Delay Output Until
-#: locale/ipp-strings.c:794
+#: locale/ipp-strings.c:798
 msgid "job-delay-output-until"
 msgstr ""
 
 #. TRANSLATORS: Delay Output Until
-#: locale/ipp-strings.c:796
+#: locale/ipp-strings.c:800
 msgid "job-delay-output-until-time"
 msgstr ""
 
 #. TRANSLATORS: Daytime
-#: locale/ipp-strings.c:798
+#: locale/ipp-strings.c:802
 msgid "job-delay-output-until.day-time"
 msgstr ""
 
 #. TRANSLATORS: Evening
-#: locale/ipp-strings.c:800
+#: locale/ipp-strings.c:804
 msgid "job-delay-output-until.evening"
 msgstr ""
 
 #. TRANSLATORS: Released
-#: locale/ipp-strings.c:802
+#: locale/ipp-strings.c:806
 msgid "job-delay-output-until.indefinite"
 msgstr ""
 
 #. TRANSLATORS: Night
-#: locale/ipp-strings.c:804
+#: locale/ipp-strings.c:808
 msgid "job-delay-output-until.night"
 msgstr ""
 
 #. TRANSLATORS: No Delay
-#: locale/ipp-strings.c:806
+#: locale/ipp-strings.c:810
 msgid "job-delay-output-until.no-delay-output"
 msgstr ""
 
 #. TRANSLATORS: Second Shift
-#: locale/ipp-strings.c:808
+#: locale/ipp-strings.c:812
 msgid "job-delay-output-until.second-shift"
 msgstr ""
 
 #. TRANSLATORS: Third Shift
-#: locale/ipp-strings.c:810
+#: locale/ipp-strings.c:814
 msgid "job-delay-output-until.third-shift"
 msgstr ""
 
 #. TRANSLATORS: Weekend
-#: locale/ipp-strings.c:812
+#: locale/ipp-strings.c:816
 msgid "job-delay-output-until.weekend"
 msgstr ""
 
 #. TRANSLATORS: On Error
-#: locale/ipp-strings.c:814
+#: locale/ipp-strings.c:818
 msgid "job-error-action"
 msgstr ""
 
 #. TRANSLATORS: Abort Job
-#: locale/ipp-strings.c:816
+#: locale/ipp-strings.c:820
 msgid "job-error-action.abort-job"
 msgstr ""
 
 #. TRANSLATORS: Cancel Job
-#: locale/ipp-strings.c:818
+#: locale/ipp-strings.c:822
 msgid "job-error-action.cancel-job"
 msgstr ""
 
 #. TRANSLATORS: Continue Job
-#: locale/ipp-strings.c:820
+#: locale/ipp-strings.c:824
 msgid "job-error-action.continue-job"
 msgstr ""
 
 #. TRANSLATORS: Suspend Job
-#: locale/ipp-strings.c:822
+#: locale/ipp-strings.c:826
 msgid "job-error-action.suspend-job"
 msgstr ""
 
 #. TRANSLATORS: Print Error Sheet
-#: locale/ipp-strings.c:824
+#: locale/ipp-strings.c:828
 msgid "job-error-sheet"
 msgstr ""
 
 #. TRANSLATORS: Type of Error Sheet
-#: locale/ipp-strings.c:826
+#: locale/ipp-strings.c:830
 msgid "job-error-sheet-type"
 msgstr ""
 
 #. TRANSLATORS: None
-#: locale/ipp-strings.c:828
+#: locale/ipp-strings.c:832
 msgid "job-error-sheet-type.none"
 msgstr ""
 
 #. TRANSLATORS: Standard
-#: locale/ipp-strings.c:830
+#: locale/ipp-strings.c:834
 msgid "job-error-sheet-type.standard"
 msgstr ""
 
 #. TRANSLATORS: Print Error Sheet
-#: locale/ipp-strings.c:832
+#: locale/ipp-strings.c:836
 msgid "job-error-sheet-when"
 msgstr ""
 
 #. TRANSLATORS: Always
-#: locale/ipp-strings.c:834
+#: locale/ipp-strings.c:838
 msgid "job-error-sheet-when.always"
 msgstr ""
 
 #. TRANSLATORS: On Error
-#: locale/ipp-strings.c:836
+#: locale/ipp-strings.c:840
 msgid "job-error-sheet-when.on-error"
 msgstr ""
 
 #. TRANSLATORS: Job Finishings
-#: locale/ipp-strings.c:838
+#: locale/ipp-strings.c:842
 msgid "job-finishings"
 msgstr ""
 
 #. TRANSLATORS: Hold Until
-#: locale/ipp-strings.c:840
+#: locale/ipp-strings.c:844
 msgid "job-hold-until"
 msgstr ""
 
 #. TRANSLATORS: Hold Until
-#: locale/ipp-strings.c:842
+#: locale/ipp-strings.c:846
 msgid "job-hold-until-time"
 msgstr ""
 
 #. TRANSLATORS: Daytime
-#: locale/ipp-strings.c:844
+#: locale/ipp-strings.c:848
 msgid "job-hold-until.day-time"
 msgstr ""
 
 #. TRANSLATORS: Evening
-#: locale/ipp-strings.c:846
+#: locale/ipp-strings.c:850
 msgid "job-hold-until.evening"
 msgstr ""
 
 #. TRANSLATORS: Released
-#: locale/ipp-strings.c:848
+#: locale/ipp-strings.c:852
 msgid "job-hold-until.indefinite"
 msgstr ""
 
 #. TRANSLATORS: Night
-#: locale/ipp-strings.c:850
+#: locale/ipp-strings.c:854
 msgid "job-hold-until.night"
 msgstr ""
 
 #. TRANSLATORS: No Hold
-#: locale/ipp-strings.c:852
+#: locale/ipp-strings.c:856
 msgid "job-hold-until.no-hold"
 msgstr ""
 
 #. TRANSLATORS: Second Shift
-#: locale/ipp-strings.c:854
+#: locale/ipp-strings.c:858
 msgid "job-hold-until.second-shift"
 msgstr ""
 
 #. TRANSLATORS: Third Shift
-#: locale/ipp-strings.c:856
+#: locale/ipp-strings.c:860
 msgid "job-hold-until.third-shift"
 msgstr ""
 
 #. TRANSLATORS: Weekend
-#: locale/ipp-strings.c:858
+#: locale/ipp-strings.c:862
 msgid "job-hold-until.weekend"
 msgstr ""
 
 #. TRANSLATORS: Job Mandatory Attributes
-#: locale/ipp-strings.c:860
+#: locale/ipp-strings.c:864
 msgid "job-mandatory-attributes"
 msgstr ""
 
 #. TRANSLATORS: Title
-#: locale/ipp-strings.c:862
+#: locale/ipp-strings.c:866
 msgid "job-name"
 msgstr ""
 
 #. TRANSLATORS: Job Pages
-#: locale/ipp-strings.c:864
+#: locale/ipp-strings.c:868
 msgid "job-pages"
 msgstr ""
 
 #. TRANSLATORS: Job Pages
-#: locale/ipp-strings.c:866
+#: locale/ipp-strings.c:870
 msgid "job-pages-col"
 msgstr ""
 
 #. TRANSLATORS: Job Phone Number
-#: locale/ipp-strings.c:868
+#: locale/ipp-strings.c:872
 msgid "job-phone-number"
 msgstr ""
 
@@ -9189,627 +9223,627 @@ msgid "job-printer-uri attribute missing."
 msgstr ""
 
 #. TRANSLATORS: Job Priority
-#: locale/ipp-strings.c:870
+#: locale/ipp-strings.c:874
 msgid "job-priority"
 msgstr ""
 
 #. TRANSLATORS: Job Privacy Attributes
-#: locale/ipp-strings.c:872
+#: locale/ipp-strings.c:876
 msgid "job-privacy-attributes"
 msgstr ""
 
 #. TRANSLATORS: All
-#: locale/ipp-strings.c:874
+#: locale/ipp-strings.c:878
 msgid "job-privacy-attributes.all"
 msgstr ""
 
 #. TRANSLATORS: Default
-#: locale/ipp-strings.c:876
+#: locale/ipp-strings.c:880
 msgid "job-privacy-attributes.default"
 msgstr ""
 
 #. TRANSLATORS: Job Description
-#: locale/ipp-strings.c:878
+#: locale/ipp-strings.c:882
 msgid "job-privacy-attributes.job-description"
 msgstr ""
 
 #. TRANSLATORS: Job Template
-#: locale/ipp-strings.c:880
+#: locale/ipp-strings.c:884
 msgid "job-privacy-attributes.job-template"
 msgstr ""
 
 #. TRANSLATORS: None
-#: locale/ipp-strings.c:882
+#: locale/ipp-strings.c:886
 msgid "job-privacy-attributes.none"
 msgstr ""
 
 #. TRANSLATORS: Job Privacy Scope
-#: locale/ipp-strings.c:884
+#: locale/ipp-strings.c:888
 msgid "job-privacy-scope"
 msgstr ""
 
 #. TRANSLATORS: All
-#: locale/ipp-strings.c:886
+#: locale/ipp-strings.c:890
 msgid "job-privacy-scope.all"
 msgstr ""
 
 #. TRANSLATORS: Default
-#: locale/ipp-strings.c:888
+#: locale/ipp-strings.c:892
 msgid "job-privacy-scope.default"
 msgstr ""
 
 #. TRANSLATORS: None
-#: locale/ipp-strings.c:890
+#: locale/ipp-strings.c:894
 msgid "job-privacy-scope.none"
 msgstr ""
 
 #. TRANSLATORS: Owner
-#: locale/ipp-strings.c:892
+#: locale/ipp-strings.c:896
 msgid "job-privacy-scope.owner"
 msgstr ""
 
 #. TRANSLATORS: Job Recipient Name
-#: locale/ipp-strings.c:894
+#: locale/ipp-strings.c:898
 msgid "job-recipient-name"
 msgstr ""
 
 #. TRANSLATORS: Job Retain Until
-#: locale/ipp-strings.c:896
+#: locale/ipp-strings.c:900
 msgid "job-retain-until"
 msgstr ""
 
 #. TRANSLATORS: Job Retain Until Interval
-#: locale/ipp-strings.c:898
+#: locale/ipp-strings.c:902
 msgid "job-retain-until-interval"
 msgstr ""
 
 #. TRANSLATORS: Job Retain Until Time
-#: locale/ipp-strings.c:900
+#: locale/ipp-strings.c:904
 msgid "job-retain-until-time"
 msgstr ""
 
 #. TRANSLATORS: End Of Day
-#: locale/ipp-strings.c:902
+#: locale/ipp-strings.c:906
 msgid "job-retain-until.end-of-day"
 msgstr ""
 
 #. TRANSLATORS: End Of Month
-#: locale/ipp-strings.c:904
+#: locale/ipp-strings.c:908
 msgid "job-retain-until.end-of-month"
 msgstr ""
 
 #. TRANSLATORS: End Of Week
-#: locale/ipp-strings.c:906
+#: locale/ipp-strings.c:910
 msgid "job-retain-until.end-of-week"
 msgstr ""
 
 #. TRANSLATORS: Indefinite
-#: locale/ipp-strings.c:908
+#: locale/ipp-strings.c:912
 msgid "job-retain-until.indefinite"
 msgstr ""
 
 #. TRANSLATORS: None
-#: locale/ipp-strings.c:910
+#: locale/ipp-strings.c:914
 msgid "job-retain-until.none"
 msgstr ""
 
 #. TRANSLATORS: Job Save Disposition
-#: locale/ipp-strings.c:912
+#: locale/ipp-strings.c:916
 msgid "job-save-disposition"
 msgstr ""
 
 #. TRANSLATORS: Job Sheet Message
-#: locale/ipp-strings.c:914
+#: locale/ipp-strings.c:918
 msgid "job-sheet-message"
 msgstr ""
 
 #. TRANSLATORS: Banner Page
-#: locale/ipp-strings.c:916
+#: locale/ipp-strings.c:920
 msgid "job-sheets"
 msgstr ""
 
 #. TRANSLATORS: Banner Page
-#: locale/ipp-strings.c:918
+#: locale/ipp-strings.c:922
 msgid "job-sheets-col"
 msgstr ""
 
 #. TRANSLATORS: First Page in Document
-#: locale/ipp-strings.c:920
+#: locale/ipp-strings.c:924
 msgid "job-sheets.first-print-stream-page"
 msgstr ""
 
 #. TRANSLATORS: Start and End Sheets
-#: locale/ipp-strings.c:922
+#: locale/ipp-strings.c:926
 msgid "job-sheets.job-both-sheet"
 msgstr ""
 
 #. TRANSLATORS: End Sheet
-#: locale/ipp-strings.c:924
+#: locale/ipp-strings.c:928
 msgid "job-sheets.job-end-sheet"
 msgstr ""
 
 #. TRANSLATORS: Start Sheet
-#: locale/ipp-strings.c:926
+#: locale/ipp-strings.c:930
 msgid "job-sheets.job-start-sheet"
 msgstr ""
 
 #. TRANSLATORS: None
-#: locale/ipp-strings.c:928
+#: locale/ipp-strings.c:932
 msgid "job-sheets.none"
 msgstr ""
 
 #. TRANSLATORS: Standard
-#: locale/ipp-strings.c:930
+#: locale/ipp-strings.c:934
 msgid "job-sheets.standard"
 msgstr ""
 
 #. TRANSLATORS: Job State
-#: locale/ipp-strings.c:932
+#: locale/ipp-strings.c:936
 msgid "job-state"
 msgstr ""
 
 #. TRANSLATORS: Job State Message
-#: locale/ipp-strings.c:934
+#: locale/ipp-strings.c:938
 msgid "job-state-message"
 msgstr ""
 
 #. TRANSLATORS: Detailed Job State
-#: locale/ipp-strings.c:936
+#: locale/ipp-strings.c:940
 msgid "job-state-reasons"
 msgstr ""
 
 #. TRANSLATORS: Stopping
-#: locale/ipp-strings.c:938
+#: locale/ipp-strings.c:942
 msgid "job-state-reasons.aborted-by-system"
 msgstr ""
 
 #. TRANSLATORS: Account Authorization Failed
-#: locale/ipp-strings.c:940
+#: locale/ipp-strings.c:944
 msgid "job-state-reasons.account-authorization-failed"
 msgstr ""
 
 #. TRANSLATORS: Account Closed
-#: locale/ipp-strings.c:942
+#: locale/ipp-strings.c:946
 msgid "job-state-reasons.account-closed"
 msgstr ""
 
 #. TRANSLATORS: Account Info Needed
-#: locale/ipp-strings.c:944
+#: locale/ipp-strings.c:948
 msgid "job-state-reasons.account-info-needed"
 msgstr ""
 
 #. TRANSLATORS: Account Limit Reached
-#: locale/ipp-strings.c:946
+#: locale/ipp-strings.c:950
 msgid "job-state-reasons.account-limit-reached"
 msgstr ""
 
 #. TRANSLATORS: Decompression error
-#: locale/ipp-strings.c:948
+#: locale/ipp-strings.c:952
 msgid "job-state-reasons.compression-error"
 msgstr ""
 
 #. TRANSLATORS: Conflicting Attributes
-#: locale/ipp-strings.c:950
+#: locale/ipp-strings.c:954
 msgid "job-state-reasons.conflicting-attributes"
 msgstr ""
 
 #. TRANSLATORS: Connected To Destination
-#: locale/ipp-strings.c:952
+#: locale/ipp-strings.c:956
 msgid "job-state-reasons.connected-to-destination"
 msgstr ""
 
 #. TRANSLATORS: Connecting To Destination
-#: locale/ipp-strings.c:954
+#: locale/ipp-strings.c:958
 msgid "job-state-reasons.connecting-to-destination"
 msgstr ""
 
 #. TRANSLATORS: Destination Uri Failed
-#: locale/ipp-strings.c:956
+#: locale/ipp-strings.c:960
 msgid "job-state-reasons.destination-uri-failed"
 msgstr ""
 
 #. TRANSLATORS: Digital Signature Did Not Verify
-#: locale/ipp-strings.c:958
+#: locale/ipp-strings.c:962
 msgid "job-state-reasons.digital-signature-did-not-verify"
 msgstr ""
 
 #. TRANSLATORS: Digital Signature Type Not Supported
-#: locale/ipp-strings.c:960
+#: locale/ipp-strings.c:964
 msgid "job-state-reasons.digital-signature-type-not-supported"
 msgstr ""
 
 #. TRANSLATORS: Document Access Error
-#: locale/ipp-strings.c:962
+#: locale/ipp-strings.c:966
 msgid "job-state-reasons.document-access-error"
 msgstr ""
 
 #. TRANSLATORS: Document Format Error
-#: locale/ipp-strings.c:964
+#: locale/ipp-strings.c:968
 msgid "job-state-reasons.document-format-error"
 msgstr ""
 
 #. TRANSLATORS: Document Password Error
-#: locale/ipp-strings.c:966
+#: locale/ipp-strings.c:970
 msgid "job-state-reasons.document-password-error"
 msgstr ""
 
 #. TRANSLATORS: Document Permission Error
-#: locale/ipp-strings.c:968
+#: locale/ipp-strings.c:972
 msgid "job-state-reasons.document-permission-error"
 msgstr ""
 
 #. TRANSLATORS: Document Security Error
-#: locale/ipp-strings.c:970
+#: locale/ipp-strings.c:974
 msgid "job-state-reasons.document-security-error"
 msgstr ""
 
 #. TRANSLATORS: Document Unprintable Error
-#: locale/ipp-strings.c:972
+#: locale/ipp-strings.c:976
 msgid "job-state-reasons.document-unprintable-error"
 msgstr ""
 
 #. TRANSLATORS: Errors Detected
-#: locale/ipp-strings.c:974
+#: locale/ipp-strings.c:978
 msgid "job-state-reasons.errors-detected"
 msgstr ""
 
 #. TRANSLATORS: Canceled at printer
-#: locale/ipp-strings.c:976
+#: locale/ipp-strings.c:980
 msgid "job-state-reasons.job-canceled-at-device"
 msgstr ""
 
 #. TRANSLATORS: Canceled by operator
-#: locale/ipp-strings.c:978
+#: locale/ipp-strings.c:982
 msgid "job-state-reasons.job-canceled-by-operator"
 msgstr ""
 
 #. TRANSLATORS: Canceled by user
-#: locale/ipp-strings.c:980
+#: locale/ipp-strings.c:984
 msgid "job-state-reasons.job-canceled-by-user"
 msgstr ""
 
 #. TRANSLATORS:
-#: locale/ipp-strings.c:982
+#: locale/ipp-strings.c:986
 msgid "job-state-reasons.job-completed-successfully"
 msgstr ""
 
 #. TRANSLATORS: Completed with errors
-#: locale/ipp-strings.c:984
+#: locale/ipp-strings.c:988
 msgid "job-state-reasons.job-completed-with-errors"
 msgstr ""
 
 #. TRANSLATORS: Completed with warnings
-#: locale/ipp-strings.c:986
+#: locale/ipp-strings.c:990
 msgid "job-state-reasons.job-completed-with-warnings"
 msgstr ""
 
 #. TRANSLATORS: Insufficient data
-#: locale/ipp-strings.c:988
+#: locale/ipp-strings.c:992
 msgid "job-state-reasons.job-data-insufficient"
 msgstr ""
 
 #. TRANSLATORS: Job Delay Output Until Specified
-#: locale/ipp-strings.c:990
+#: locale/ipp-strings.c:994
 msgid "job-state-reasons.job-delay-output-until-specified"
 msgstr ""
 
 #. TRANSLATORS: Job Digital Signature Wait
-#: locale/ipp-strings.c:992
+#: locale/ipp-strings.c:996
 msgid "job-state-reasons.job-digital-signature-wait"
 msgstr ""
 
 #. TRANSLATORS: Job Fetchable
-#: locale/ipp-strings.c:994
+#: locale/ipp-strings.c:998
 msgid "job-state-reasons.job-fetchable"
 msgstr ""
 
 #. TRANSLATORS: Job Held For Review
-#: locale/ipp-strings.c:996
+#: locale/ipp-strings.c:1000
 msgid "job-state-reasons.job-held-for-review"
 msgstr ""
 
 #. TRANSLATORS: Job held
-#: locale/ipp-strings.c:998
+#: locale/ipp-strings.c:1002
 msgid "job-state-reasons.job-hold-until-specified"
 msgstr ""
 
 #. TRANSLATORS: Incoming
-#: locale/ipp-strings.c:1000
+#: locale/ipp-strings.c:1004
 msgid "job-state-reasons.job-incoming"
 msgstr ""
 
 #. TRANSLATORS: Interpreting
-#: locale/ipp-strings.c:1002
+#: locale/ipp-strings.c:1006
 msgid "job-state-reasons.job-interpreting"
 msgstr ""
 
 #. TRANSLATORS: Outgoing
-#: locale/ipp-strings.c:1004
+#: locale/ipp-strings.c:1008
 msgid "job-state-reasons.job-outgoing"
 msgstr ""
 
 #. TRANSLATORS: Job Password Wait
-#: locale/ipp-strings.c:1006
+#: locale/ipp-strings.c:1010
 msgid "job-state-reasons.job-password-wait"
 msgstr ""
 
 #. TRANSLATORS: Job Printed Successfully
-#: locale/ipp-strings.c:1008
+#: locale/ipp-strings.c:1012
 msgid "job-state-reasons.job-printed-successfully"
 msgstr ""
 
 #. TRANSLATORS: Job Printed With Errors
-#: locale/ipp-strings.c:1010
+#: locale/ipp-strings.c:1014
 msgid "job-state-reasons.job-printed-with-errors"
 msgstr ""
 
 #. TRANSLATORS: Job Printed With Warnings
-#: locale/ipp-strings.c:1012
+#: locale/ipp-strings.c:1016
 msgid "job-state-reasons.job-printed-with-warnings"
 msgstr ""
 
 #. TRANSLATORS: Printing
-#: locale/ipp-strings.c:1014
+#: locale/ipp-strings.c:1018
 msgid "job-state-reasons.job-printing"
 msgstr ""
 
 #. TRANSLATORS: Preparing to print
-#: locale/ipp-strings.c:1016
+#: locale/ipp-strings.c:1020
 msgid "job-state-reasons.job-queued"
 msgstr ""
 
 #. TRANSLATORS: Processing document
-#: locale/ipp-strings.c:1018
+#: locale/ipp-strings.c:1022
 msgid "job-state-reasons.job-queued-for-marker"
 msgstr ""
 
 #. TRANSLATORS: Job Release Wait
-#: locale/ipp-strings.c:1020
+#: locale/ipp-strings.c:1024
 msgid "job-state-reasons.job-release-wait"
 msgstr ""
 
 #. TRANSLATORS: Restartable
-#: locale/ipp-strings.c:1022
+#: locale/ipp-strings.c:1026
 msgid "job-state-reasons.job-restartable"
 msgstr ""
 
 #. TRANSLATORS: Job Resuming
-#: locale/ipp-strings.c:1024
+#: locale/ipp-strings.c:1028
 msgid "job-state-reasons.job-resuming"
 msgstr ""
 
 #. TRANSLATORS: Job Saved Successfully
-#: locale/ipp-strings.c:1026
+#: locale/ipp-strings.c:1030
 msgid "job-state-reasons.job-saved-successfully"
 msgstr ""
 
 #. TRANSLATORS: Job Saved With Errors
-#: locale/ipp-strings.c:1028
+#: locale/ipp-strings.c:1032
 msgid "job-state-reasons.job-saved-with-errors"
 msgstr ""
 
 #. TRANSLATORS: Job Saved With Warnings
-#: locale/ipp-strings.c:1030
+#: locale/ipp-strings.c:1034
 msgid "job-state-reasons.job-saved-with-warnings"
 msgstr ""
 
 #. TRANSLATORS: Job Saving
-#: locale/ipp-strings.c:1032
+#: locale/ipp-strings.c:1036
 msgid "job-state-reasons.job-saving"
 msgstr ""
 
 #. TRANSLATORS: Job Spooling
-#: locale/ipp-strings.c:1034
+#: locale/ipp-strings.c:1038
 msgid "job-state-reasons.job-spooling"
 msgstr ""
 
 #. TRANSLATORS: Job Streaming
-#: locale/ipp-strings.c:1036
+#: locale/ipp-strings.c:1040
 msgid "job-state-reasons.job-streaming"
 msgstr ""
 
 #. TRANSLATORS: Suspended
-#: locale/ipp-strings.c:1038
+#: locale/ipp-strings.c:1042
 msgid "job-state-reasons.job-suspended"
 msgstr ""
 
 #. TRANSLATORS: Job Suspended By Operator
-#: locale/ipp-strings.c:1040
+#: locale/ipp-strings.c:1044
 msgid "job-state-reasons.job-suspended-by-operator"
 msgstr ""
 
 #. TRANSLATORS: Job Suspended By System
-#: locale/ipp-strings.c:1042
+#: locale/ipp-strings.c:1046
 msgid "job-state-reasons.job-suspended-by-system"
 msgstr ""
 
 #. TRANSLATORS: Job Suspended By User
-#: locale/ipp-strings.c:1044
+#: locale/ipp-strings.c:1048
 msgid "job-state-reasons.job-suspended-by-user"
 msgstr ""
 
 #. TRANSLATORS: Job Suspending
-#: locale/ipp-strings.c:1046
+#: locale/ipp-strings.c:1050
 msgid "job-state-reasons.job-suspending"
 msgstr ""
 
 #. TRANSLATORS: Job Transferring
-#: locale/ipp-strings.c:1048
+#: locale/ipp-strings.c:1052
 msgid "job-state-reasons.job-transferring"
 msgstr ""
 
 #. TRANSLATORS: Transforming
-#: locale/ipp-strings.c:1050
+#: locale/ipp-strings.c:1054
 msgid "job-state-reasons.job-transforming"
 msgstr ""
 
 #. TRANSLATORS: None
-#: locale/ipp-strings.c:1052
+#: locale/ipp-strings.c:1056
 msgid "job-state-reasons.none"
 msgstr ""
 
 #. TRANSLATORS: Printer offline
-#: locale/ipp-strings.c:1054
+#: locale/ipp-strings.c:1058
 msgid "job-state-reasons.printer-stopped"
 msgstr ""
 
 #. TRANSLATORS: Printer partially stopped
-#: locale/ipp-strings.c:1056
+#: locale/ipp-strings.c:1060
 msgid "job-state-reasons.printer-stopped-partly"
 msgstr ""
 
 #. TRANSLATORS: Stopping
-#: locale/ipp-strings.c:1058
+#: locale/ipp-strings.c:1062
 msgid "job-state-reasons.processing-to-stop-point"
 msgstr ""
 
 #. TRANSLATORS: Ready
-#: locale/ipp-strings.c:1060
+#: locale/ipp-strings.c:1064
 msgid "job-state-reasons.queued-in-device"
 msgstr ""
 
 #. TRANSLATORS: Resources Are Not Ready
-#: locale/ipp-strings.c:1062
+#: locale/ipp-strings.c:1066
 msgid "job-state-reasons.resources-are-not-ready"
 msgstr ""
 
 #. TRANSLATORS: Resources Are Not Supported
-#: locale/ipp-strings.c:1064
+#: locale/ipp-strings.c:1068
 msgid "job-state-reasons.resources-are-not-supported"
 msgstr ""
 
 #. TRANSLATORS: Service offline
-#: locale/ipp-strings.c:1066
+#: locale/ipp-strings.c:1070
 msgid "job-state-reasons.service-off-line"
 msgstr ""
 
 #. TRANSLATORS: Submission Interrupted
-#: locale/ipp-strings.c:1068
+#: locale/ipp-strings.c:1072
 msgid "job-state-reasons.submission-interrupted"
 msgstr ""
 
 #. TRANSLATORS: Unsupported Attributes Or Values
-#: locale/ipp-strings.c:1070
+#: locale/ipp-strings.c:1074
 msgid "job-state-reasons.unsupported-attributes-or-values"
 msgstr ""
 
 #. TRANSLATORS: Unsupported Compression
-#: locale/ipp-strings.c:1072
+#: locale/ipp-strings.c:1076
 msgid "job-state-reasons.unsupported-compression"
 msgstr ""
 
 #. TRANSLATORS: Unsupported Document Format
-#: locale/ipp-strings.c:1074
+#: locale/ipp-strings.c:1078
 msgid "job-state-reasons.unsupported-document-format"
 msgstr ""
 
 #. TRANSLATORS: Waiting For User Action
-#: locale/ipp-strings.c:1076
+#: locale/ipp-strings.c:1080
 msgid "job-state-reasons.waiting-for-user-action"
 msgstr ""
 
 #. TRANSLATORS: Warnings Detected
-#: locale/ipp-strings.c:1078
+#: locale/ipp-strings.c:1082
 msgid "job-state-reasons.warnings-detected"
 msgstr ""
 
 #. TRANSLATORS: Pending
-#: locale/ipp-strings.c:1080
+#: locale/ipp-strings.c:1084
 msgid "job-state.3"
 msgstr ""
 
 #. TRANSLATORS: Held
-#: locale/ipp-strings.c:1082
+#: locale/ipp-strings.c:1086
 msgid "job-state.4"
 msgstr ""
 
 #. TRANSLATORS: Processing
-#: locale/ipp-strings.c:1084
+#: locale/ipp-strings.c:1088
 msgid "job-state.5"
 msgstr ""
 
 #. TRANSLATORS: Stopped
-#: locale/ipp-strings.c:1086
+#: locale/ipp-strings.c:1090
 msgid "job-state.6"
 msgstr ""
 
 #. TRANSLATORS: Canceled
-#: locale/ipp-strings.c:1088
+#: locale/ipp-strings.c:1092
 msgid "job-state.7"
 msgstr ""
 
 #. TRANSLATORS: Aborted
-#: locale/ipp-strings.c:1090
+#: locale/ipp-strings.c:1094
 msgid "job-state.8"
 msgstr ""
 
 #. TRANSLATORS: Completed
-#: locale/ipp-strings.c:1092
+#: locale/ipp-strings.c:1096
 msgid "job-state.9"
 msgstr ""
 
 #. TRANSLATORS: Laminate Pages
-#: locale/ipp-strings.c:1094
+#: locale/ipp-strings.c:1098
 msgid "laminating"
 msgstr ""
 
 #. TRANSLATORS: Laminate
-#: locale/ipp-strings.c:1096
+#: locale/ipp-strings.c:1100
 msgid "laminating-sides"
 msgstr ""
 
 #. TRANSLATORS: Back Only
-#: locale/ipp-strings.c:1098
+#: locale/ipp-strings.c:1102
 msgid "laminating-sides.back"
 msgstr ""
 
 #. TRANSLATORS: Front and Back
-#: locale/ipp-strings.c:1100
+#: locale/ipp-strings.c:1104
 msgid "laminating-sides.both"
 msgstr ""
 
 #. TRANSLATORS: Front Only
-#: locale/ipp-strings.c:1102
+#: locale/ipp-strings.c:1106
 msgid "laminating-sides.front"
 msgstr ""
 
 #. TRANSLATORS: Type of Lamination
-#: locale/ipp-strings.c:1104
+#: locale/ipp-strings.c:1108
 msgid "laminating-type"
 msgstr ""
 
 #. TRANSLATORS: Archival
-#: locale/ipp-strings.c:1106
+#: locale/ipp-strings.c:1110
 msgid "laminating-type.archival"
 msgstr ""
 
 #. TRANSLATORS: Glossy
-#: locale/ipp-strings.c:1108
+#: locale/ipp-strings.c:1112
 msgid "laminating-type.glossy"
 msgstr ""
 
 #. TRANSLATORS: High Gloss
-#: locale/ipp-strings.c:1110
+#: locale/ipp-strings.c:1114
 msgid "laminating-type.high-gloss"
 msgstr ""
 
 #. TRANSLATORS: Matte
-#: locale/ipp-strings.c:1112
+#: locale/ipp-strings.c:1116
 msgid "laminating-type.matte"
 msgstr ""
 
 #. TRANSLATORS: Semi-gloss
-#: locale/ipp-strings.c:1114
+#: locale/ipp-strings.c:1118
 msgid "laminating-type.semi-gloss"
 msgstr ""
 
 #. TRANSLATORS: Translucent
-#: locale/ipp-strings.c:1116
+#: locale/ipp-strings.c:1120
 msgid "laminating-type.translucent"
 msgstr ""
 
 #. TRANSLATORS: Logo
-#: locale/ipp-strings.c:1118
+#: locale/ipp-strings.c:1122
 msgid "logo"
 msgstr ""
 
@@ -10051,2752 +10085,2837 @@ msgid "lpstat: error - %s environment variable names non-existent destination \"
 msgstr ""
 
 #. TRANSLATORS: Amount of Material
-#: locale/ipp-strings.c:1120
+#: locale/ipp-strings.c:1124
 msgid "material-amount"
 msgstr ""
 
 #. TRANSLATORS: Amount Units
-#: locale/ipp-strings.c:1122
+#: locale/ipp-strings.c:1126
 msgid "material-amount-units"
 msgstr ""
 
 #. TRANSLATORS: Grams
-#: locale/ipp-strings.c:1124
+#: locale/ipp-strings.c:1128
 msgid "material-amount-units.g"
 msgstr ""
 
 #. TRANSLATORS: Kilograms
-#: locale/ipp-strings.c:1126
+#: locale/ipp-strings.c:1130
 msgid "material-amount-units.kg"
 msgstr ""
 
 #. TRANSLATORS: Liters
-#: locale/ipp-strings.c:1128
+#: locale/ipp-strings.c:1132
 msgid "material-amount-units.l"
 msgstr ""
 
 #. TRANSLATORS: Meters
-#: locale/ipp-strings.c:1130
+#: locale/ipp-strings.c:1134
 msgid "material-amount-units.m"
 msgstr ""
 
 #. TRANSLATORS: Milliliters
-#: locale/ipp-strings.c:1132
+#: locale/ipp-strings.c:1136
 msgid "material-amount-units.ml"
 msgstr ""
 
 #. TRANSLATORS: Millimeters
-#: locale/ipp-strings.c:1134
+#: locale/ipp-strings.c:1138
 msgid "material-amount-units.mm"
 msgstr ""
 
 #. TRANSLATORS: Material Color
-#: locale/ipp-strings.c:1136
+#: locale/ipp-strings.c:1140
 msgid "material-color"
 msgstr ""
 
 #. TRANSLATORS: Material Diameter
-#: locale/ipp-strings.c:1138
+#: locale/ipp-strings.c:1142
 msgid "material-diameter"
 msgstr ""
 
 #. TRANSLATORS: Material Diameter Tolerance
-#: locale/ipp-strings.c:1140
+#: locale/ipp-strings.c:1144
 msgid "material-diameter-tolerance"
 msgstr ""
 
 #. TRANSLATORS: Material Fill Density
-#: locale/ipp-strings.c:1142
+#: locale/ipp-strings.c:1146
 msgid "material-fill-density"
 msgstr ""
 
 #. TRANSLATORS: Material Name
-#: locale/ipp-strings.c:1144
+#: locale/ipp-strings.c:1148
 msgid "material-name"
 msgstr ""
 
 #. TRANSLATORS: Material Nozzle Diameter
-#: locale/ipp-strings.c:1146
+#: locale/ipp-strings.c:1150
 msgid "material-nozzle-diameter"
 msgstr ""
 
 #. TRANSLATORS: Use Material For
-#: locale/ipp-strings.c:1148
+#: locale/ipp-strings.c:1152
 msgid "material-purpose"
 msgstr ""
 
 #. TRANSLATORS: Everything
-#: locale/ipp-strings.c:1150
+#: locale/ipp-strings.c:1154
 msgid "material-purpose.all"
 msgstr ""
 
 #. TRANSLATORS: Base
-#: locale/ipp-strings.c:1152
+#: locale/ipp-strings.c:1156
 msgid "material-purpose.base"
 msgstr ""
 
 #. TRANSLATORS: In-fill
-#: locale/ipp-strings.c:1154
+#: locale/ipp-strings.c:1158
 msgid "material-purpose.in-fill"
 msgstr ""
 
 #. TRANSLATORS: Shell
-#: locale/ipp-strings.c:1156
+#: locale/ipp-strings.c:1160
 msgid "material-purpose.shell"
 msgstr ""
 
 #. TRANSLATORS: Supports
-#: locale/ipp-strings.c:1158
+#: locale/ipp-strings.c:1162
 msgid "material-purpose.support"
 msgstr ""
 
 #. TRANSLATORS: Feed Rate
-#: locale/ipp-strings.c:1160
+#: locale/ipp-strings.c:1164
 msgid "material-rate"
 msgstr ""
 
 #. TRANSLATORS: Feed Rate Units
-#: locale/ipp-strings.c:1162
+#: locale/ipp-strings.c:1166
 msgid "material-rate-units"
 msgstr ""
 
 #. TRANSLATORS: Milligrams per second
-#: locale/ipp-strings.c:1164
+#: locale/ipp-strings.c:1168
 msgid "material-rate-units.mg_second"
 msgstr ""
 
 #. TRANSLATORS: Milliliters per second
-#: locale/ipp-strings.c:1166
+#: locale/ipp-strings.c:1170
 msgid "material-rate-units.ml_second"
 msgstr ""
 
 #. TRANSLATORS: Millimeters per second
-#: locale/ipp-strings.c:1168
+#: locale/ipp-strings.c:1172
 msgid "material-rate-units.mm_second"
 msgstr ""
 
 #. TRANSLATORS: Material Retraction
-#: locale/ipp-strings.c:1170
+#: locale/ipp-strings.c:1174
 msgid "material-retraction"
 msgstr ""
 
 #. TRANSLATORS: Material Shell Thickness
-#: locale/ipp-strings.c:1172
+#: locale/ipp-strings.c:1176
 msgid "material-shell-thickness"
 msgstr ""
 
 #. TRANSLATORS: Material Temperature
-#: locale/ipp-strings.c:1174
+#: locale/ipp-strings.c:1178
 msgid "material-temperature"
 msgstr ""
 
 #. TRANSLATORS: Material Type
-#: locale/ipp-strings.c:1176
+#: locale/ipp-strings.c:1180
 msgid "material-type"
 msgstr ""
 
 #. TRANSLATORS: ABS
-#: locale/ipp-strings.c:1178
+#: locale/ipp-strings.c:1182
 msgid "material-type.abs"
 msgstr ""
 
 #. TRANSLATORS: Carbon Fiber ABS
-#: locale/ipp-strings.c:1180
+#: locale/ipp-strings.c:1184
 msgid "material-type.abs-carbon-fiber"
 msgstr ""
 
 #. TRANSLATORS: Carbon Nanotube ABS
-#: locale/ipp-strings.c:1182
+#: locale/ipp-strings.c:1186
 msgid "material-type.abs-carbon-nanotube"
 msgstr ""
 
 #. TRANSLATORS: Chocolate
-#: locale/ipp-strings.c:1184
+#: locale/ipp-strings.c:1188
 msgid "material-type.chocolate"
 msgstr ""
 
 #. TRANSLATORS: Gold
-#: locale/ipp-strings.c:1186
+#: locale/ipp-strings.c:1190
 msgid "material-type.gold"
 msgstr ""
 
 #. TRANSLATORS: Nylon
-#: locale/ipp-strings.c:1188
+#: locale/ipp-strings.c:1192
 msgid "material-type.nylon"
 msgstr ""
 
 #. TRANSLATORS: Pet
-#: locale/ipp-strings.c:1190
+#: locale/ipp-strings.c:1194
 msgid "material-type.pet"
 msgstr ""
 
 #. TRANSLATORS: Photopolymer
-#: locale/ipp-strings.c:1192
+#: locale/ipp-strings.c:1196
 msgid "material-type.photopolymer"
 msgstr ""
 
 #. TRANSLATORS: PLA
-#: locale/ipp-strings.c:1194
+#: locale/ipp-strings.c:1198
 msgid "material-type.pla"
 msgstr ""
 
 #. TRANSLATORS: Conductive PLA
-#: locale/ipp-strings.c:1196
+#: locale/ipp-strings.c:1200
 msgid "material-type.pla-conductive"
 msgstr ""
 
 #. TRANSLATORS: Pla Dissolvable
-#: locale/ipp-strings.c:1198
+#: locale/ipp-strings.c:1202
 msgid "material-type.pla-dissolvable"
 msgstr ""
 
 #. TRANSLATORS: Flexible PLA
-#: locale/ipp-strings.c:1200
+#: locale/ipp-strings.c:1204
 msgid "material-type.pla-flexible"
 msgstr ""
 
 #. TRANSLATORS: Magnetic PLA
-#: locale/ipp-strings.c:1202
+#: locale/ipp-strings.c:1206
 msgid "material-type.pla-magnetic"
 msgstr ""
 
 #. TRANSLATORS: Steel PLA
-#: locale/ipp-strings.c:1204
+#: locale/ipp-strings.c:1208
 msgid "material-type.pla-steel"
 msgstr ""
 
 #. TRANSLATORS: Stone PLA
-#: locale/ipp-strings.c:1206
+#: locale/ipp-strings.c:1210
 msgid "material-type.pla-stone"
 msgstr ""
 
 #. TRANSLATORS: Wood PLA
-#: locale/ipp-strings.c:1208
+#: locale/ipp-strings.c:1212
 msgid "material-type.pla-wood"
 msgstr ""
 
 #. TRANSLATORS: Polycarbonate
-#: locale/ipp-strings.c:1210
+#: locale/ipp-strings.c:1214
 msgid "material-type.polycarbonate"
 msgstr ""
 
 #. TRANSLATORS: Dissolvable PVA
-#: locale/ipp-strings.c:1212
+#: locale/ipp-strings.c:1216
 msgid "material-type.pva-dissolvable"
 msgstr ""
 
 #. TRANSLATORS: Silver
-#: locale/ipp-strings.c:1214
+#: locale/ipp-strings.c:1218
 msgid "material-type.silver"
 msgstr ""
 
 #. TRANSLATORS: Titanium
-#: locale/ipp-strings.c:1216
+#: locale/ipp-strings.c:1220
 msgid "material-type.titanium"
 msgstr ""
 
 #. TRANSLATORS: Wax
-#: locale/ipp-strings.c:1218
+#: locale/ipp-strings.c:1222
 msgid "material-type.wax"
 msgstr ""
 
 #. TRANSLATORS: Materials
-#: locale/ipp-strings.c:1220
+#: locale/ipp-strings.c:1224
 msgid "materials-col"
 msgstr ""
 
 #. TRANSLATORS: Media
-#: locale/ipp-strings.c:1222
+#: locale/ipp-strings.c:1226
 msgid "media"
 msgstr ""
 
 #. TRANSLATORS: Back Coating of Media
-#: locale/ipp-strings.c:1224
+#: locale/ipp-strings.c:1228
 msgid "media-back-coating"
 msgstr ""
 
 #. TRANSLATORS: Glossy
-#: locale/ipp-strings.c:1226
+#: locale/ipp-strings.c:1230
 msgid "media-back-coating.glossy"
 msgstr ""
 
 #. TRANSLATORS: High Gloss
-#: locale/ipp-strings.c:1228
+#: locale/ipp-strings.c:1232
 msgid "media-back-coating.high-gloss"
 msgstr ""
 
 #. TRANSLATORS: Matte
-#: locale/ipp-strings.c:1230
+#: locale/ipp-strings.c:1234
 msgid "media-back-coating.matte"
 msgstr ""
 
 #. TRANSLATORS: None
-#: locale/ipp-strings.c:1232
+#: locale/ipp-strings.c:1236
 msgid "media-back-coating.none"
 msgstr ""
 
 #. TRANSLATORS: Satin
-#: locale/ipp-strings.c:1234
+#: locale/ipp-strings.c:1238
 msgid "media-back-coating.satin"
 msgstr ""
 
 #. TRANSLATORS: Semi-gloss
-#: locale/ipp-strings.c:1236
+#: locale/ipp-strings.c:1240
 msgid "media-back-coating.semi-gloss"
 msgstr ""
 
 #. TRANSLATORS: Media Bottom Margin
-#: locale/ipp-strings.c:1238
+#: locale/ipp-strings.c:1242
 msgid "media-bottom-margin"
 msgstr ""
 
 #. TRANSLATORS: Media
-#: locale/ipp-strings.c:1240
+#: locale/ipp-strings.c:1244
 msgid "media-col"
 msgstr ""
 
 #. TRANSLATORS: Media Color
-#: locale/ipp-strings.c:1242
+#: locale/ipp-strings.c:1246
 msgid "media-color"
 msgstr ""
 
 #. TRANSLATORS: Black
-#: locale/ipp-strings.c:1244
+#: locale/ipp-strings.c:1248
 msgid "media-color.black"
 msgstr ""
 
 #. TRANSLATORS: Blue
-#: locale/ipp-strings.c:1246
+#: locale/ipp-strings.c:1250
 msgid "media-color.blue"
 msgstr ""
 
 #. TRANSLATORS: Brown
-#: locale/ipp-strings.c:1248
+#: locale/ipp-strings.c:1252
 msgid "media-color.brown"
 msgstr ""
 
 #. TRANSLATORS: Buff
-#: locale/ipp-strings.c:1250
+#: locale/ipp-strings.c:1254
 msgid "media-color.buff"
 msgstr ""
 
 #. TRANSLATORS: Clear Black
-#: locale/ipp-strings.c:1252
+#: locale/ipp-strings.c:1256
 msgid "media-color.clear-black"
 msgstr ""
 
 #. TRANSLATORS: Clear Blue
-#: locale/ipp-strings.c:1254
+#: locale/ipp-strings.c:1258
 msgid "media-color.clear-blue"
 msgstr ""
 
 #. TRANSLATORS: Clear Brown
-#: locale/ipp-strings.c:1256
+#: locale/ipp-strings.c:1260
 msgid "media-color.clear-brown"
 msgstr ""
 
 #. TRANSLATORS: Clear Buff
-#: locale/ipp-strings.c:1258
+#: locale/ipp-strings.c:1262
 msgid "media-color.clear-buff"
 msgstr ""
 
 #. TRANSLATORS: Clear Cyan
-#: locale/ipp-strings.c:1260
+#: locale/ipp-strings.c:1264
 msgid "media-color.clear-cyan"
 msgstr ""
 
 #. TRANSLATORS: Clear Gold
-#: locale/ipp-strings.c:1262
+#: locale/ipp-strings.c:1266
 msgid "media-color.clear-gold"
 msgstr ""
 
 #. TRANSLATORS: Clear Goldenrod
-#: locale/ipp-strings.c:1264
+#: locale/ipp-strings.c:1268
 msgid "media-color.clear-goldenrod"
 msgstr ""
 
 #. TRANSLATORS: Clear Gray
-#: locale/ipp-strings.c:1266
+#: locale/ipp-strings.c:1270
 msgid "media-color.clear-gray"
 msgstr ""
 
 #. TRANSLATORS: Clear Green
-#: locale/ipp-strings.c:1268
+#: locale/ipp-strings.c:1272
 msgid "media-color.clear-green"
 msgstr ""
 
 #. TRANSLATORS: Clear Ivory
-#: locale/ipp-strings.c:1270
+#: locale/ipp-strings.c:1274
 msgid "media-color.clear-ivory"
 msgstr ""
 
 #. TRANSLATORS: Clear Magenta
-#: locale/ipp-strings.c:1272
+#: locale/ipp-strings.c:1276
 msgid "media-color.clear-magenta"
 msgstr ""
 
 #. TRANSLATORS: Clear Multi Color
-#: locale/ipp-strings.c:1274
+#: locale/ipp-strings.c:1278
 msgid "media-color.clear-multi-color"
 msgstr ""
 
 #. TRANSLATORS: Clear Mustard
-#: locale/ipp-strings.c:1276
+#: locale/ipp-strings.c:1280
 msgid "media-color.clear-mustard"
 msgstr ""
 
 #. TRANSLATORS: Clear Orange
-#: locale/ipp-strings.c:1278
+#: locale/ipp-strings.c:1282
 msgid "media-color.clear-orange"
 msgstr ""
 
 #. TRANSLATORS: Clear Pink
-#: locale/ipp-strings.c:1280
+#: locale/ipp-strings.c:1284
 msgid "media-color.clear-pink"
 msgstr ""
 
 #. TRANSLATORS: Clear Red
-#: locale/ipp-strings.c:1282
+#: locale/ipp-strings.c:1286
 msgid "media-color.clear-red"
 msgstr ""
 
 #. TRANSLATORS: Clear Silver
-#: locale/ipp-strings.c:1284
+#: locale/ipp-strings.c:1288
 msgid "media-color.clear-silver"
 msgstr ""
 
 #. TRANSLATORS: Clear Turquoise
-#: locale/ipp-strings.c:1286
+#: locale/ipp-strings.c:1290
 msgid "media-color.clear-turquoise"
 msgstr ""
 
 #. TRANSLATORS: Clear Violet
-#: locale/ipp-strings.c:1288
+#: locale/ipp-strings.c:1292
 msgid "media-color.clear-violet"
 msgstr ""
 
 #. TRANSLATORS: Clear White
-#: locale/ipp-strings.c:1290
+#: locale/ipp-strings.c:1294
 msgid "media-color.clear-white"
 msgstr ""
 
 #. TRANSLATORS: Clear Yellow
-#: locale/ipp-strings.c:1292
+#: locale/ipp-strings.c:1296
 msgid "media-color.clear-yellow"
 msgstr ""
 
 #. TRANSLATORS: Cyan
-#: locale/ipp-strings.c:1294
+#: locale/ipp-strings.c:1298
 msgid "media-color.cyan"
 msgstr ""
 
 #. TRANSLATORS: Dark Blue
-#: locale/ipp-strings.c:1296
+#: locale/ipp-strings.c:1300
 msgid "media-color.dark-blue"
 msgstr ""
 
 #. TRANSLATORS: Dark Brown
-#: locale/ipp-strings.c:1298
+#: locale/ipp-strings.c:1302
 msgid "media-color.dark-brown"
 msgstr ""
 
 #. TRANSLATORS: Dark Buff
-#: locale/ipp-strings.c:1300
+#: locale/ipp-strings.c:1304
 msgid "media-color.dark-buff"
 msgstr ""
 
 #. TRANSLATORS: Dark Cyan
-#: locale/ipp-strings.c:1302
+#: locale/ipp-strings.c:1306
 msgid "media-color.dark-cyan"
 msgstr ""
 
 #. TRANSLATORS: Dark Gold
-#: locale/ipp-strings.c:1304
+#: locale/ipp-strings.c:1308
 msgid "media-color.dark-gold"
 msgstr ""
 
 #. TRANSLATORS: Dark Goldenrod
-#: locale/ipp-strings.c:1306
+#: locale/ipp-strings.c:1310
 msgid "media-color.dark-goldenrod"
 msgstr ""
 
 #. TRANSLATORS: Dark Gray
-#: locale/ipp-strings.c:1308
+#: locale/ipp-strings.c:1312
 msgid "media-color.dark-gray"
 msgstr ""
 
 #. TRANSLATORS: Dark Green
-#: locale/ipp-strings.c:1310
+#: locale/ipp-strings.c:1314
 msgid "media-color.dark-green"
 msgstr ""
 
 #. TRANSLATORS: Dark Ivory
-#: locale/ipp-strings.c:1312
+#: locale/ipp-strings.c:1316
 msgid "media-color.dark-ivory"
 msgstr ""
 
 #. TRANSLATORS: Dark Magenta
-#: locale/ipp-strings.c:1314
+#: locale/ipp-strings.c:1318
 msgid "media-color.dark-magenta"
 msgstr ""
 
 #. TRANSLATORS: Dark Mustard
-#: locale/ipp-strings.c:1316
+#: locale/ipp-strings.c:1320
 msgid "media-color.dark-mustard"
 msgstr ""
 
 #. TRANSLATORS: Dark Orange
-#: locale/ipp-strings.c:1318
+#: locale/ipp-strings.c:1322
 msgid "media-color.dark-orange"
 msgstr ""
 
 #. TRANSLATORS: Dark Pink
-#: locale/ipp-strings.c:1320
+#: locale/ipp-strings.c:1324
 msgid "media-color.dark-pink"
 msgstr ""
 
 #. TRANSLATORS: Dark Red
-#: locale/ipp-strings.c:1322
+#: locale/ipp-strings.c:1326
 msgid "media-color.dark-red"
 msgstr ""
 
 #. TRANSLATORS: Dark Silver
-#: locale/ipp-strings.c:1324
+#: locale/ipp-strings.c:1328
 msgid "media-color.dark-silver"
 msgstr ""
 
 #. TRANSLATORS: Dark Turquoise
-#: locale/ipp-strings.c:1326
+#: locale/ipp-strings.c:1330
 msgid "media-color.dark-turquoise"
 msgstr ""
 
 #. TRANSLATORS: Dark Violet
-#: locale/ipp-strings.c:1328
+#: locale/ipp-strings.c:1332
 msgid "media-color.dark-violet"
 msgstr ""
 
 #. TRANSLATORS: Dark Yellow
-#: locale/ipp-strings.c:1330
+#: locale/ipp-strings.c:1334
 msgid "media-color.dark-yellow"
 msgstr ""
 
 #. TRANSLATORS: Gold
-#: locale/ipp-strings.c:1332
+#: locale/ipp-strings.c:1336
 msgid "media-color.gold"
 msgstr ""
 
 #. TRANSLATORS: Goldenrod
-#: locale/ipp-strings.c:1334
+#: locale/ipp-strings.c:1338
 msgid "media-color.goldenrod"
 msgstr ""
 
 #. TRANSLATORS: Gray
-#: locale/ipp-strings.c:1336
+#: locale/ipp-strings.c:1340
 msgid "media-color.gray"
 msgstr ""
 
 #. TRANSLATORS: Green
-#: locale/ipp-strings.c:1338
+#: locale/ipp-strings.c:1342
 msgid "media-color.green"
 msgstr ""
 
 #. TRANSLATORS: Ivory
-#: locale/ipp-strings.c:1340
+#: locale/ipp-strings.c:1344
 msgid "media-color.ivory"
 msgstr ""
 
 #. TRANSLATORS: Light Black
-#: locale/ipp-strings.c:1342
+#: locale/ipp-strings.c:1346
 msgid "media-color.light-black"
 msgstr ""
 
 #. TRANSLATORS: Light Blue
-#: locale/ipp-strings.c:1344
+#: locale/ipp-strings.c:1348
 msgid "media-color.light-blue"
 msgstr ""
 
 #. TRANSLATORS: Light Brown
-#: locale/ipp-strings.c:1346
+#: locale/ipp-strings.c:1350
 msgid "media-color.light-brown"
 msgstr ""
 
 #. TRANSLATORS: Light Buff
-#: locale/ipp-strings.c:1348
+#: locale/ipp-strings.c:1352
 msgid "media-color.light-buff"
 msgstr ""
 
 #. TRANSLATORS: Light Cyan
-#: locale/ipp-strings.c:1350
+#: locale/ipp-strings.c:1354
 msgid "media-color.light-cyan"
 msgstr ""
 
 #. TRANSLATORS: Light Gold
-#: locale/ipp-strings.c:1352
+#: locale/ipp-strings.c:1356
 msgid "media-color.light-gold"
 msgstr ""
 
 #. TRANSLATORS: Light Goldenrod
-#: locale/ipp-strings.c:1354
+#: locale/ipp-strings.c:1358
 msgid "media-color.light-goldenrod"
 msgstr ""
 
 #. TRANSLATORS: Light Gray
-#: locale/ipp-strings.c:1356
+#: locale/ipp-strings.c:1360
 msgid "media-color.light-gray"
 msgstr ""
 
 #. TRANSLATORS: Light Green
-#: locale/ipp-strings.c:1358
+#: locale/ipp-strings.c:1362
 msgid "media-color.light-green"
 msgstr ""
 
 #. TRANSLATORS: Light Ivory
-#: locale/ipp-strings.c:1360
+#: locale/ipp-strings.c:1364
 msgid "media-color.light-ivory"
 msgstr ""
 
 #. TRANSLATORS: Light Magenta
-#: locale/ipp-strings.c:1362
+#: locale/ipp-strings.c:1366
 msgid "media-color.light-magenta"
 msgstr ""
 
 #. TRANSLATORS: Light Mustard
-#: locale/ipp-strings.c:1364
+#: locale/ipp-strings.c:1368
 msgid "media-color.light-mustard"
 msgstr ""
 
 #. TRANSLATORS: Light Orange
-#: locale/ipp-strings.c:1366
+#: locale/ipp-strings.c:1370
 msgid "media-color.light-orange"
 msgstr ""
 
 #. TRANSLATORS: Light Pink
-#: locale/ipp-strings.c:1368
+#: locale/ipp-strings.c:1372
 msgid "media-color.light-pink"
 msgstr ""
 
 #. TRANSLATORS: Light Red
-#: locale/ipp-strings.c:1370
+#: locale/ipp-strings.c:1374
 msgid "media-color.light-red"
 msgstr ""
 
 #. TRANSLATORS: Light Silver
-#: locale/ipp-strings.c:1372
+#: locale/ipp-strings.c:1376
 msgid "media-color.light-silver"
 msgstr ""
 
 #. TRANSLATORS: Light Turquoise
-#: locale/ipp-strings.c:1374
+#: locale/ipp-strings.c:1378
 msgid "media-color.light-turquoise"
 msgstr ""
 
 #. TRANSLATORS: Light Violet
-#: locale/ipp-strings.c:1376
+#: locale/ipp-strings.c:1380
 msgid "media-color.light-violet"
 msgstr ""
 
 #. TRANSLATORS: Light Yellow
-#: locale/ipp-strings.c:1378
+#: locale/ipp-strings.c:1382
 msgid "media-color.light-yellow"
 msgstr ""
 
 #. TRANSLATORS: Magenta
-#: locale/ipp-strings.c:1380
+#: locale/ipp-strings.c:1384
 msgid "media-color.magenta"
 msgstr ""
 
 #. TRANSLATORS: Multi-color
-#: locale/ipp-strings.c:1382
+#: locale/ipp-strings.c:1386
 msgid "media-color.multi-color"
 msgstr ""
 
 #. TRANSLATORS: Mustard
-#: locale/ipp-strings.c:1384
+#: locale/ipp-strings.c:1388
 msgid "media-color.mustard"
 msgstr ""
 
 #. TRANSLATORS: No Color
-#: locale/ipp-strings.c:1386
+#: locale/ipp-strings.c:1390
 msgid "media-color.no-color"
 msgstr ""
 
 #. TRANSLATORS: Orange
-#: locale/ipp-strings.c:1388
+#: locale/ipp-strings.c:1392
 msgid "media-color.orange"
 msgstr ""
 
 #. TRANSLATORS: Pink
-#: locale/ipp-strings.c:1390
+#: locale/ipp-strings.c:1394
 msgid "media-color.pink"
 msgstr ""
 
 #. TRANSLATORS: Red
-#: locale/ipp-strings.c:1392
+#: locale/ipp-strings.c:1396
 msgid "media-color.red"
 msgstr ""
 
 #. TRANSLATORS: Silver
-#: locale/ipp-strings.c:1394
+#: locale/ipp-strings.c:1398
 msgid "media-color.silver"
 msgstr ""
 
 #. TRANSLATORS: Turquoise
-#: locale/ipp-strings.c:1396
+#: locale/ipp-strings.c:1400
 msgid "media-color.turquoise"
 msgstr ""
 
 #. TRANSLATORS: Violet
-#: locale/ipp-strings.c:1398
+#: locale/ipp-strings.c:1402
 msgid "media-color.violet"
 msgstr ""
 
 #. TRANSLATORS: White
-#: locale/ipp-strings.c:1400
+#: locale/ipp-strings.c:1404
 msgid "media-color.white"
 msgstr ""
 
 #. TRANSLATORS: Yellow
-#: locale/ipp-strings.c:1402
+#: locale/ipp-strings.c:1406
 msgid "media-color.yellow"
 msgstr ""
 
 #. TRANSLATORS: Front Coating of Media
-#: locale/ipp-strings.c:1404
+#: locale/ipp-strings.c:1408
 msgid "media-front-coating"
 msgstr ""
 
 #. TRANSLATORS: Media Grain
-#: locale/ipp-strings.c:1406
+#: locale/ipp-strings.c:1410
 msgid "media-grain"
 msgstr ""
 
 #. TRANSLATORS: Cross-Feed Direction
-#: locale/ipp-strings.c:1408
+#: locale/ipp-strings.c:1412
 msgid "media-grain.x-direction"
 msgstr ""
 
 #. TRANSLATORS: Feed Direction
-#: locale/ipp-strings.c:1410
+#: locale/ipp-strings.c:1414
 msgid "media-grain.y-direction"
 msgstr ""
 
 #. TRANSLATORS: Media Hole Count
-#: locale/ipp-strings.c:1412
+#: locale/ipp-strings.c:1416
 msgid "media-hole-count"
 msgstr ""
 
 #. TRANSLATORS: Media Info
-#: locale/ipp-strings.c:1414
+#: locale/ipp-strings.c:1418
 msgid "media-info"
 msgstr ""
 
 #. TRANSLATORS: Force Media
-#: locale/ipp-strings.c:1416
+#: locale/ipp-strings.c:1420
 msgid "media-input-tray-check"
 msgstr ""
 
 #. TRANSLATORS: Media Left Margin
-#: locale/ipp-strings.c:1418
+#: locale/ipp-strings.c:1422
 msgid "media-left-margin"
 msgstr ""
 
 #. TRANSLATORS: Pre-printed Media
-#: locale/ipp-strings.c:1420
+#: locale/ipp-strings.c:1424
 msgid "media-pre-printed"
 msgstr ""
 
 #. TRANSLATORS: Blank
-#: locale/ipp-strings.c:1422
+#: locale/ipp-strings.c:1426
 msgid "media-pre-printed.blank"
 msgstr ""
 
 #. TRANSLATORS: Letterhead
-#: locale/ipp-strings.c:1424
+#: locale/ipp-strings.c:1428
 msgid "media-pre-printed.letter-head"
 msgstr ""
 
 #. TRANSLATORS: Pre-printed
-#: locale/ipp-strings.c:1426
+#: locale/ipp-strings.c:1430
 msgid "media-pre-printed.pre-printed"
 msgstr ""
 
 #. TRANSLATORS: Recycled Media
-#: locale/ipp-strings.c:1428
+#: locale/ipp-strings.c:1432
 msgid "media-recycled"
 msgstr ""
 
 #. TRANSLATORS: None
-#: locale/ipp-strings.c:1430
+#: locale/ipp-strings.c:1434
 msgid "media-recycled.none"
 msgstr ""
 
 #. TRANSLATORS: Standard
-#: locale/ipp-strings.c:1432
+#: locale/ipp-strings.c:1436
 msgid "media-recycled.standard"
 msgstr ""
 
 #. TRANSLATORS: Media Right Margin
-#: locale/ipp-strings.c:1434
+#: locale/ipp-strings.c:1438
 msgid "media-right-margin"
 msgstr ""
 
 #. TRANSLATORS: Media Dimensions
-#: locale/ipp-strings.c:1436
+#: locale/ipp-strings.c:1440
 msgid "media-size"
 msgstr ""
 
 #. TRANSLATORS: Media Name
-#: locale/ipp-strings.c:1438
+#: locale/ipp-strings.c:1442
 msgid "media-size-name"
 msgstr ""
 
 #. TRANSLATORS: Media Source
-#: locale/ipp-strings.c:1440
+#: locale/ipp-strings.c:1444
 msgid "media-source"
 msgstr ""
 
 #. TRANSLATORS: Alternate
-#: locale/ipp-strings.c:1442
+#: locale/ipp-strings.c:1446
 msgid "media-source.alternate"
 msgstr ""
 
 #. TRANSLATORS: Alternate Roll
-#: locale/ipp-strings.c:1444
+#: locale/ipp-strings.c:1448
 msgid "media-source.alternate-roll"
 msgstr ""
 
 #. TRANSLATORS: Automatic
-#: locale/ipp-strings.c:1446
+#: locale/ipp-strings.c:1450
 msgid "media-source.auto"
 msgstr ""
 
 #. TRANSLATORS: Bottom
-#: locale/ipp-strings.c:1448
+#: locale/ipp-strings.c:1452
 msgid "media-source.bottom"
 msgstr ""
 
 #. TRANSLATORS: By-pass Tray
-#: locale/ipp-strings.c:1450
+#: locale/ipp-strings.c:1454
 msgid "media-source.by-pass-tray"
 msgstr ""
 
 #. TRANSLATORS: Center
-#: locale/ipp-strings.c:1452
+#: locale/ipp-strings.c:1456
 msgid "media-source.center"
 msgstr ""
 
 #. TRANSLATORS: Disc
-#: locale/ipp-strings.c:1454
+#: locale/ipp-strings.c:1458
 msgid "media-source.disc"
 msgstr ""
 
 #. TRANSLATORS: Envelope
-#: locale/ipp-strings.c:1456
+#: locale/ipp-strings.c:1460
 msgid "media-source.envelope"
 msgstr ""
 
 #. TRANSLATORS: Hagaki
-#: locale/ipp-strings.c:1458
+#: locale/ipp-strings.c:1462
 msgid "media-source.hagaki"
 msgstr ""
 
 #. TRANSLATORS: Large Capacity
-#: locale/ipp-strings.c:1460
+#: locale/ipp-strings.c:1464
 msgid "media-source.large-capacity"
 msgstr ""
 
 #. TRANSLATORS: Left
-#: locale/ipp-strings.c:1462
+#: locale/ipp-strings.c:1466
 msgid "media-source.left"
 msgstr ""
 
 #. TRANSLATORS: Main
-#: locale/ipp-strings.c:1464
+#: locale/ipp-strings.c:1468
 msgid "media-source.main"
 msgstr ""
 
 #. TRANSLATORS: Main Roll
-#: locale/ipp-strings.c:1466
+#: locale/ipp-strings.c:1470
 msgid "media-source.main-roll"
 msgstr ""
 
 #. TRANSLATORS: Manual
-#: locale/ipp-strings.c:1468
+#: locale/ipp-strings.c:1472
 msgid "media-source.manual"
 msgstr ""
 
 #. TRANSLATORS: Middle
-#: locale/ipp-strings.c:1470
+#: locale/ipp-strings.c:1474
 msgid "media-source.middle"
 msgstr ""
 
 #. TRANSLATORS: Photo
-#: locale/ipp-strings.c:1472
+#: locale/ipp-strings.c:1476
 msgid "media-source.photo"
 msgstr ""
 
 #. TRANSLATORS: Rear
-#: locale/ipp-strings.c:1474
+#: locale/ipp-strings.c:1478
 msgid "media-source.rear"
 msgstr ""
 
 #. TRANSLATORS: Right
-#: locale/ipp-strings.c:1476
+#: locale/ipp-strings.c:1480
 msgid "media-source.right"
 msgstr ""
 
 #. TRANSLATORS: Roll 1
-#: locale/ipp-strings.c:1478
+#: locale/ipp-strings.c:1482
 msgid "media-source.roll-1"
 msgstr ""
 
 #. TRANSLATORS: Roll 10
-#: locale/ipp-strings.c:1480
+#: locale/ipp-strings.c:1484
 msgid "media-source.roll-10"
 msgstr ""
 
 #. TRANSLATORS: Roll 2
-#: locale/ipp-strings.c:1482
+#: locale/ipp-strings.c:1486
 msgid "media-source.roll-2"
 msgstr ""
 
 #. TRANSLATORS: Roll 3
-#: locale/ipp-strings.c:1484
+#: locale/ipp-strings.c:1488
 msgid "media-source.roll-3"
 msgstr ""
 
 #. TRANSLATORS: Roll 4
-#: locale/ipp-strings.c:1486
+#: locale/ipp-strings.c:1490
 msgid "media-source.roll-4"
 msgstr ""
 
 #. TRANSLATORS: Roll 5
-#: locale/ipp-strings.c:1488
+#: locale/ipp-strings.c:1492
 msgid "media-source.roll-5"
 msgstr ""
 
 #. TRANSLATORS: Roll 6
-#: locale/ipp-strings.c:1490
+#: locale/ipp-strings.c:1494
 msgid "media-source.roll-6"
 msgstr ""
 
 #. TRANSLATORS: Roll 7
-#: locale/ipp-strings.c:1492
+#: locale/ipp-strings.c:1496
 msgid "media-source.roll-7"
 msgstr ""
 
 #. TRANSLATORS: Roll 8
-#: locale/ipp-strings.c:1494
+#: locale/ipp-strings.c:1498
 msgid "media-source.roll-8"
 msgstr ""
 
 #. TRANSLATORS: Roll 9
-#: locale/ipp-strings.c:1496
+#: locale/ipp-strings.c:1500
 msgid "media-source.roll-9"
 msgstr ""
 
 #. TRANSLATORS: Side
-#: locale/ipp-strings.c:1498
+#: locale/ipp-strings.c:1502
 msgid "media-source.side"
 msgstr ""
 
 #. TRANSLATORS: Top
-#: locale/ipp-strings.c:1500
+#: locale/ipp-strings.c:1504
 msgid "media-source.top"
 msgstr ""
 
 #. TRANSLATORS: Tray 1
-#: locale/ipp-strings.c:1502
+#: locale/ipp-strings.c:1506
 msgid "media-source.tray-1"
 msgstr ""
 
 #. TRANSLATORS: Tray 10
-#: locale/ipp-strings.c:1504
+#: locale/ipp-strings.c:1508
 msgid "media-source.tray-10"
 msgstr ""
 
 #. TRANSLATORS: Tray 11
-#: locale/ipp-strings.c:1506
+#: locale/ipp-strings.c:1510
 msgid "media-source.tray-11"
 msgstr ""
 
 #. TRANSLATORS: Tray 12
-#: locale/ipp-strings.c:1508
+#: locale/ipp-strings.c:1512
 msgid "media-source.tray-12"
 msgstr ""
 
 #. TRANSLATORS: Tray 13
-#: locale/ipp-strings.c:1510
+#: locale/ipp-strings.c:1514
 msgid "media-source.tray-13"
 msgstr ""
 
 #. TRANSLATORS: Tray 14
-#: locale/ipp-strings.c:1512
+#: locale/ipp-strings.c:1516
 msgid "media-source.tray-14"
 msgstr ""
 
 #. TRANSLATORS: Tray 15
-#: locale/ipp-strings.c:1514
+#: locale/ipp-strings.c:1518
 msgid "media-source.tray-15"
 msgstr ""
 
 #. TRANSLATORS: Tray 16
-#: locale/ipp-strings.c:1516
+#: locale/ipp-strings.c:1520
 msgid "media-source.tray-16"
 msgstr ""
 
 #. TRANSLATORS: Tray 17
-#: locale/ipp-strings.c:1518
+#: locale/ipp-strings.c:1522
 msgid "media-source.tray-17"
 msgstr ""
 
 #. TRANSLATORS: Tray 18
-#: locale/ipp-strings.c:1520
+#: locale/ipp-strings.c:1524
 msgid "media-source.tray-18"
 msgstr ""
 
 #. TRANSLATORS: Tray 19
-#: locale/ipp-strings.c:1522
+#: locale/ipp-strings.c:1526
 msgid "media-source.tray-19"
 msgstr ""
 
 #. TRANSLATORS: Tray 2
-#: locale/ipp-strings.c:1524
+#: locale/ipp-strings.c:1528
 msgid "media-source.tray-2"
 msgstr ""
 
 #. TRANSLATORS: Tray 20
-#: locale/ipp-strings.c:1526
+#: locale/ipp-strings.c:1530
 msgid "media-source.tray-20"
 msgstr ""
 
 #. TRANSLATORS: Tray 3
-#: locale/ipp-strings.c:1528
+#: locale/ipp-strings.c:1532
 msgid "media-source.tray-3"
 msgstr ""
 
 #. TRANSLATORS: Tray 4
-#: locale/ipp-strings.c:1530
+#: locale/ipp-strings.c:1534
 msgid "media-source.tray-4"
 msgstr ""
 
 #. TRANSLATORS: Tray 5
-#: locale/ipp-strings.c:1532
+#: locale/ipp-strings.c:1536
 msgid "media-source.tray-5"
 msgstr ""
 
 #. TRANSLATORS: Tray 6
-#: locale/ipp-strings.c:1534
+#: locale/ipp-strings.c:1538
 msgid "media-source.tray-6"
 msgstr ""
 
 #. TRANSLATORS: Tray 7
-#: locale/ipp-strings.c:1536
+#: locale/ipp-strings.c:1540
 msgid "media-source.tray-7"
 msgstr ""
 
 #. TRANSLATORS: Tray 8
-#: locale/ipp-strings.c:1538
+#: locale/ipp-strings.c:1542
 msgid "media-source.tray-8"
 msgstr ""
 
 #. TRANSLATORS: Tray 9
-#: locale/ipp-strings.c:1540
+#: locale/ipp-strings.c:1544
 msgid "media-source.tray-9"
 msgstr ""
 
 #. TRANSLATORS: Media Thickness
-#: locale/ipp-strings.c:1542
+#: locale/ipp-strings.c:1546
 msgid "media-thickness"
 msgstr ""
 
 #. TRANSLATORS: Media Tooth (Texture)
-#: locale/ipp-strings.c:1544
+#: locale/ipp-strings.c:1548
 msgid "media-tooth"
 msgstr ""
 
 #. TRANSLATORS: Antique
-#: locale/ipp-strings.c:1546
+#: locale/ipp-strings.c:1550
 msgid "media-tooth.antique"
 msgstr ""
 
 #. TRANSLATORS: Extra Smooth
-#: locale/ipp-strings.c:1548
+#: locale/ipp-strings.c:1552
 msgid "media-tooth.calendared"
 msgstr ""
 
 #. TRANSLATORS: Coarse
-#: locale/ipp-strings.c:1550
+#: locale/ipp-strings.c:1554
 msgid "media-tooth.coarse"
 msgstr ""
 
 #. TRANSLATORS: Fine
-#: locale/ipp-strings.c:1552
+#: locale/ipp-strings.c:1556
 msgid "media-tooth.fine"
 msgstr ""
 
 #. TRANSLATORS: Linen
-#: locale/ipp-strings.c:1554
+#: locale/ipp-strings.c:1558
 msgid "media-tooth.linen"
 msgstr ""
 
 #. TRANSLATORS: Medium
-#: locale/ipp-strings.c:1556
+#: locale/ipp-strings.c:1560
 msgid "media-tooth.medium"
 msgstr ""
 
 #. TRANSLATORS: Smooth
-#: locale/ipp-strings.c:1558
+#: locale/ipp-strings.c:1562
 msgid "media-tooth.smooth"
 msgstr ""
 
 #. TRANSLATORS: Stipple
-#: locale/ipp-strings.c:1560
+#: locale/ipp-strings.c:1564
 msgid "media-tooth.stipple"
 msgstr ""
 
 #. TRANSLATORS: Rough
-#: locale/ipp-strings.c:1562
+#: locale/ipp-strings.c:1566
 msgid "media-tooth.uncalendared"
 msgstr ""
 
 #. TRANSLATORS: Vellum
-#: locale/ipp-strings.c:1564
+#: locale/ipp-strings.c:1568
 msgid "media-tooth.vellum"
 msgstr ""
 
 #. TRANSLATORS: Media Top Margin
-#: locale/ipp-strings.c:1566
+#: locale/ipp-strings.c:1570
 msgid "media-top-margin"
 msgstr ""
 
 #. TRANSLATORS: Media Type
-#: locale/ipp-strings.c:1568
+#: locale/ipp-strings.c:1572
 msgid "media-type"
 msgstr ""
 
 #. TRANSLATORS: Aluminum
-#: locale/ipp-strings.c:1570
+#: locale/ipp-strings.c:1574
 msgid "media-type.aluminum"
 msgstr ""
 
 #. TRANSLATORS: Automatic
-#: locale/ipp-strings.c:1572
+#: locale/ipp-strings.c:1576
 msgid "media-type.auto"
 msgstr ""
 
 #. TRANSLATORS: Back Print Film
-#: locale/ipp-strings.c:1574
+#: locale/ipp-strings.c:1578
 msgid "media-type.back-print-film"
 msgstr ""
 
 #. TRANSLATORS: Cardboard
-#: locale/ipp-strings.c:1576
+#: locale/ipp-strings.c:1580
 msgid "media-type.cardboard"
 msgstr ""
 
 #. TRANSLATORS: Cardstock
-#: locale/ipp-strings.c:1578
+#: locale/ipp-strings.c:1582
 msgid "media-type.cardstock"
 msgstr ""
 
 #. TRANSLATORS: CD
-#: locale/ipp-strings.c:1580
+#: locale/ipp-strings.c:1584
 msgid "media-type.cd"
 msgstr ""
 
+#. TRANSLATORS: Photo Advanced Paper
+#: locale/ipp-strings.c:1586
+msgid "media-type.com.hp.advanced-photo"
+msgstr ""
+
+#. TRANSLATORS: Brochure Glossy Paper
+#: locale/ipp-strings.c:1588
+msgid "media-type.com.hp.brochure-glossy"
+msgstr ""
+
+#. TRANSLATORS: Brochure Matte Paper
+#: locale/ipp-strings.c:1590
+msgid "media-type.com.hp.brochure-matte"
+msgstr ""
+
+#. TRANSLATORS: Matte Coverstock
+#: locale/ipp-strings.c:1592
+msgid "media-type.com.hp.cover-matte"
+msgstr ""
+
+#. TRANSLATORS: EcoSMART Lite Paper
+#: locale/ipp-strings.c:1594
+msgid "media-type.com.hp.ecosmart-lite"
+msgstr ""
+
+#. TRANSLATORS: Everyday Glossy Paper
+#: locale/ipp-strings.c:1596
+msgid "media-type.com.hp.everyday-glossy"
+msgstr ""
+
+#. TRANSLATORS: Everyday Matte Paper
+#: locale/ipp-strings.c:1598
+msgid "media-type.com.hp.everyday-matte"
+msgstr ""
+
+#. TRANSLATORS: Extra Heavyweight Paper
+#: locale/ipp-strings.c:1600
+msgid "media-type.com.hp.extra-heavy"
+msgstr ""
+
+#. TRANSLATORS: Intermediate Paper
+#: locale/ipp-strings.c:1602
+msgid "media-type.com.hp.intermediate"
+msgstr ""
+
+#. TRANSLATORS: Mid-Weight Paper
+#: locale/ipp-strings.c:1604
+msgid "media-type.com.hp.mid-weight"
+msgstr ""
+
+#. TRANSLATORS: Inkjet Premium Paper
+#: locale/ipp-strings.c:1606
+msgid "media-type.com.hp.premium-inkjet"
+msgstr ""
+
+#. TRANSLATORS: Photo Premium Paper
+#: locale/ipp-strings.c:1608
+msgid "media-type.com.hp.premium-photo"
+msgstr ""
+
+#. TRANSLATORS: Premium Matte Presentation Paper
+#: locale/ipp-strings.c:1610
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr ""
+
 #. TRANSLATORS: Continuous
-#: locale/ipp-strings.c:1582
+#: locale/ipp-strings.c:1612
 msgid "media-type.continuous"
 msgstr ""
 
 #. TRANSLATORS: Continuous Long
-#: locale/ipp-strings.c:1584
+#: locale/ipp-strings.c:1614
 msgid "media-type.continuous-long"
 msgstr ""
 
 #. TRANSLATORS: Continuous Short
-#: locale/ipp-strings.c:1586
+#: locale/ipp-strings.c:1616
 msgid "media-type.continuous-short"
 msgstr ""
 
 #. TRANSLATORS: Corrugated Board
-#: locale/ipp-strings.c:1588
+#: locale/ipp-strings.c:1618
 msgid "media-type.corrugated-board"
 msgstr ""
 
 #. TRANSLATORS: Optical Disc
-#: locale/ipp-strings.c:1590
+#: locale/ipp-strings.c:1620
 msgid "media-type.disc"
 msgstr ""
 
 #. TRANSLATORS: Glossy Optical Disc
-#: locale/ipp-strings.c:1592
+#: locale/ipp-strings.c:1622
 msgid "media-type.disc-glossy"
 msgstr ""
 
 #. TRANSLATORS: High Gloss Optical Disc
-#: locale/ipp-strings.c:1594
+#: locale/ipp-strings.c:1624
 msgid "media-type.disc-high-gloss"
 msgstr ""
 
 #. TRANSLATORS: Matte Optical Disc
-#: locale/ipp-strings.c:1596
+#: locale/ipp-strings.c:1626
 msgid "media-type.disc-matte"
 msgstr ""
 
 #. TRANSLATORS: Satin Optical Disc
-#: locale/ipp-strings.c:1598
+#: locale/ipp-strings.c:1628
 msgid "media-type.disc-satin"
 msgstr ""
 
 #. TRANSLATORS: Semi-Gloss Optical Disc
-#: locale/ipp-strings.c:1600
+#: locale/ipp-strings.c:1630
 msgid "media-type.disc-semi-gloss"
 msgstr ""
 
 #. TRANSLATORS: Double Wall
-#: locale/ipp-strings.c:1602
+#: locale/ipp-strings.c:1632
 msgid "media-type.double-wall"
 msgstr ""
 
 #. TRANSLATORS: Dry Film
-#: locale/ipp-strings.c:1604
+#: locale/ipp-strings.c:1634
 msgid "media-type.dry-film"
 msgstr ""
 
 #. TRANSLATORS: DVD
-#: locale/ipp-strings.c:1606
+#: locale/ipp-strings.c:1636
 msgid "media-type.dvd"
 msgstr ""
 
 #. TRANSLATORS: Embossing Foil
-#: locale/ipp-strings.c:1608
+#: locale/ipp-strings.c:1638
 msgid "media-type.embossing-foil"
 msgstr ""
 
 #. TRANSLATORS: End Board
-#: locale/ipp-strings.c:1610
+#: locale/ipp-strings.c:1640
 msgid "media-type.end-board"
 msgstr ""
 
 #. TRANSLATORS: Envelope
-#: locale/ipp-strings.c:1612
+#: locale/ipp-strings.c:1642
 msgid "media-type.envelope"
 msgstr ""
 
 #. TRANSLATORS: Archival Envelope
-#: locale/ipp-strings.c:1614
+#: locale/ipp-strings.c:1644
 msgid "media-type.envelope-archival"
 msgstr ""
 
 #. TRANSLATORS: Bond Envelope
-#: locale/ipp-strings.c:1616
+#: locale/ipp-strings.c:1646
 msgid "media-type.envelope-bond"
 msgstr ""
 
 #. TRANSLATORS: Coated Envelope
-#: locale/ipp-strings.c:1618
+#: locale/ipp-strings.c:1648
 msgid "media-type.envelope-coated"
 msgstr ""
 
 #. TRANSLATORS: Cotton Envelope
-#: locale/ipp-strings.c:1620
+#: locale/ipp-strings.c:1650
 msgid "media-type.envelope-cotton"
 msgstr ""
 
 #. TRANSLATORS: Fine Envelope
-#: locale/ipp-strings.c:1622
+#: locale/ipp-strings.c:1652
 msgid "media-type.envelope-fine"
 msgstr ""
 
 #. TRANSLATORS: Heavyweight Envelope
-#: locale/ipp-strings.c:1624
+#: locale/ipp-strings.c:1654
 msgid "media-type.envelope-heavyweight"
 msgstr ""
 
 #. TRANSLATORS: Inkjet Envelope
-#: locale/ipp-strings.c:1626
+#: locale/ipp-strings.c:1656
 msgid "media-type.envelope-inkjet"
 msgstr ""
 
 #. TRANSLATORS: Lightweight Envelope
-#: locale/ipp-strings.c:1628
+#: locale/ipp-strings.c:1658
 msgid "media-type.envelope-lightweight"
 msgstr ""
 
 #. TRANSLATORS: Plain Envelope
-#: locale/ipp-strings.c:1630
+#: locale/ipp-strings.c:1660
 msgid "media-type.envelope-plain"
 msgstr ""
 
 #. TRANSLATORS: Preprinted Envelope
-#: locale/ipp-strings.c:1632
+#: locale/ipp-strings.c:1662
 msgid "media-type.envelope-preprinted"
 msgstr ""
 
 #. TRANSLATORS: Windowed Envelope
-#: locale/ipp-strings.c:1634
+#: locale/ipp-strings.c:1664
 msgid "media-type.envelope-window"
 msgstr ""
 
 #. TRANSLATORS: Fabric
-#: locale/ipp-strings.c:1636
+#: locale/ipp-strings.c:1666
 msgid "media-type.fabric"
 msgstr ""
 
 #. TRANSLATORS: Archival Fabric
-#: locale/ipp-strings.c:1638
+#: locale/ipp-strings.c:1668
 msgid "media-type.fabric-archival"
 msgstr ""
 
 #. TRANSLATORS: Glossy Fabric
-#: locale/ipp-strings.c:1640
+#: locale/ipp-strings.c:1670
 msgid "media-type.fabric-glossy"
 msgstr ""
 
 #. TRANSLATORS: High Gloss Fabric
-#: locale/ipp-strings.c:1642
+#: locale/ipp-strings.c:1672
 msgid "media-type.fabric-high-gloss"
 msgstr ""
 
 #. TRANSLATORS: Matte Fabric
-#: locale/ipp-strings.c:1644
+#: locale/ipp-strings.c:1674
 msgid "media-type.fabric-matte"
 msgstr ""
 
 #. TRANSLATORS: Semi-Gloss Fabric
-#: locale/ipp-strings.c:1646
+#: locale/ipp-strings.c:1676
 msgid "media-type.fabric-semi-gloss"
 msgstr ""
 
 #. TRANSLATORS: Waterproof Fabric
-#: locale/ipp-strings.c:1648
+#: locale/ipp-strings.c:1678
 msgid "media-type.fabric-waterproof"
 msgstr ""
 
 #. TRANSLATORS: Film
-#: locale/ipp-strings.c:1650
+#: locale/ipp-strings.c:1680
 msgid "media-type.film"
 msgstr ""
 
 #. TRANSLATORS: Flexo Base
-#: locale/ipp-strings.c:1652
+#: locale/ipp-strings.c:1682
 msgid "media-type.flexo-base"
 msgstr ""
 
 #. TRANSLATORS: Flexo Photo Polymer
-#: locale/ipp-strings.c:1654
+#: locale/ipp-strings.c:1684
 msgid "media-type.flexo-photo-polymer"
 msgstr ""
 
 #. TRANSLATORS: Flute
-#: locale/ipp-strings.c:1656
+#: locale/ipp-strings.c:1686
 msgid "media-type.flute"
 msgstr ""
 
 #. TRANSLATORS: Foil
-#: locale/ipp-strings.c:1658
+#: locale/ipp-strings.c:1688
 msgid "media-type.foil"
 msgstr ""
 
 #. TRANSLATORS: Full Cut Tabs
-#: locale/ipp-strings.c:1660
+#: locale/ipp-strings.c:1690
 msgid "media-type.full-cut-tabs"
 msgstr ""
 
 #. TRANSLATORS: Glass
-#: locale/ipp-strings.c:1662
+#: locale/ipp-strings.c:1692
 msgid "media-type.glass"
 msgstr ""
 
 #. TRANSLATORS: Glass Colored
-#: locale/ipp-strings.c:1664
+#: locale/ipp-strings.c:1694
 msgid "media-type.glass-colored"
 msgstr ""
 
 #. TRANSLATORS: Glass Opaque
-#: locale/ipp-strings.c:1666
+#: locale/ipp-strings.c:1696
 msgid "media-type.glass-opaque"
 msgstr ""
 
 #. TRANSLATORS: Glass Surfaced
-#: locale/ipp-strings.c:1668
+#: locale/ipp-strings.c:1698
 msgid "media-type.glass-surfaced"
 msgstr ""
 
 #. TRANSLATORS: Glass Textured
-#: locale/ipp-strings.c:1670
+#: locale/ipp-strings.c:1700
 msgid "media-type.glass-textured"
 msgstr ""
 
 #. TRANSLATORS: Gravure Cylinder
-#: locale/ipp-strings.c:1672
+#: locale/ipp-strings.c:1702
 msgid "media-type.gravure-cylinder"
 msgstr ""
 
 #. TRANSLATORS: Image Setter Paper
-#: locale/ipp-strings.c:1674
+#: locale/ipp-strings.c:1704
 msgid "media-type.image-setter-paper"
 msgstr ""
 
 #. TRANSLATORS: Imaging Cylinder
-#: locale/ipp-strings.c:1676
+#: locale/ipp-strings.c:1706
 msgid "media-type.imaging-cylinder"
 msgstr ""
 
+#. TRANSLATORS: Photo Paper Plus Glossy II
+#: locale/ipp-strings.c:1708
+msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+#: locale/ipp-strings.c:1710
+msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Plus Glossy II
+#: locale/ipp-strings.c:1712
+msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+#: locale/ipp-strings.c:1714
+msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
+msgstr ""
+
 #. TRANSLATORS: Labels
-#: locale/ipp-strings.c:1678
+#: locale/ipp-strings.c:1716
 msgid "media-type.labels"
 msgstr ""
 
 #. TRANSLATORS: Colored Labels
-#: locale/ipp-strings.c:1680
+#: locale/ipp-strings.c:1718
 msgid "media-type.labels-colored"
 msgstr ""
 
 #. TRANSLATORS: Glossy Labels
-#: locale/ipp-strings.c:1682
+#: locale/ipp-strings.c:1720
 msgid "media-type.labels-glossy"
 msgstr ""
 
 #. TRANSLATORS: High Gloss Labels
-#: locale/ipp-strings.c:1684
+#: locale/ipp-strings.c:1722
 msgid "media-type.labels-high-gloss"
 msgstr ""
 
 #. TRANSLATORS: Inkjet Labels
-#: locale/ipp-strings.c:1686
+#: locale/ipp-strings.c:1724
 msgid "media-type.labels-inkjet"
 msgstr ""
 
 #. TRANSLATORS: Matte Labels
-#: locale/ipp-strings.c:1688
+#: locale/ipp-strings.c:1726
 msgid "media-type.labels-matte"
 msgstr ""
 
 #. TRANSLATORS: Permanent Labels
-#: locale/ipp-strings.c:1690
+#: locale/ipp-strings.c:1728
 msgid "media-type.labels-permanent"
 msgstr ""
 
 #. TRANSLATORS: Satin Labels
-#: locale/ipp-strings.c:1692
+#: locale/ipp-strings.c:1730
 msgid "media-type.labels-satin"
 msgstr ""
 
 #. TRANSLATORS: Security Labels
-#: locale/ipp-strings.c:1694
+#: locale/ipp-strings.c:1732
 msgid "media-type.labels-security"
 msgstr ""
 
 #. TRANSLATORS: Semi-Gloss Labels
-#: locale/ipp-strings.c:1696
+#: locale/ipp-strings.c:1734
 msgid "media-type.labels-semi-gloss"
 msgstr ""
 
 #. TRANSLATORS: Laminating Foil
-#: locale/ipp-strings.c:1698
+#: locale/ipp-strings.c:1736
 msgid "media-type.laminating-foil"
 msgstr ""
 
 #. TRANSLATORS: Letterhead
-#: locale/ipp-strings.c:1700
+#: locale/ipp-strings.c:1738
 msgid "media-type.letterhead"
 msgstr ""
 
 #. TRANSLATORS: Metal
-#: locale/ipp-strings.c:1702
+#: locale/ipp-strings.c:1740
 msgid "media-type.metal"
 msgstr ""
 
 #. TRANSLATORS: Metal Glossy
-#: locale/ipp-strings.c:1704
+#: locale/ipp-strings.c:1742
 msgid "media-type.metal-glossy"
 msgstr ""
 
 #. TRANSLATORS: Metal High Gloss
-#: locale/ipp-strings.c:1706
+#: locale/ipp-strings.c:1744
 msgid "media-type.metal-high-gloss"
 msgstr ""
 
 #. TRANSLATORS: Metal Matte
-#: locale/ipp-strings.c:1708
+#: locale/ipp-strings.c:1746
 msgid "media-type.metal-matte"
 msgstr ""
 
 #. TRANSLATORS: Metal Satin
-#: locale/ipp-strings.c:1710
+#: locale/ipp-strings.c:1748
 msgid "media-type.metal-satin"
 msgstr ""
 
 #. TRANSLATORS: Metal Semi Gloss
-#: locale/ipp-strings.c:1712
+#: locale/ipp-strings.c:1750
 msgid "media-type.metal-semi-gloss"
 msgstr ""
 
 #. TRANSLATORS: Mounting Tape
-#: locale/ipp-strings.c:1714
+#: locale/ipp-strings.c:1752
 msgid "media-type.mounting-tape"
 msgstr ""
 
 #. TRANSLATORS: Multi Layer
-#: locale/ipp-strings.c:1716
+#: locale/ipp-strings.c:1754
 msgid "media-type.multi-layer"
 msgstr ""
 
 #. TRANSLATORS: Multi Part Form
-#: locale/ipp-strings.c:1718
+#: locale/ipp-strings.c:1756
 msgid "media-type.multi-part-form"
 msgstr ""
 
 #. TRANSLATORS: Other
-#: locale/ipp-strings.c:1720
+#: locale/ipp-strings.c:1758
 msgid "media-type.other"
 msgstr ""
 
 #. TRANSLATORS: Paper
-#: locale/ipp-strings.c:1722
+#: locale/ipp-strings.c:1760
 msgid "media-type.paper"
 msgstr ""
 
 #. TRANSLATORS: Photo Paper
-#: locale/ipp-strings.c:1724
+#: locale/ipp-strings.c:1762
 msgid "media-type.photographic"
 msgstr ""
 
 #. TRANSLATORS: Photographic Archival
-#: locale/ipp-strings.c:1726
+#: locale/ipp-strings.c:1764
 msgid "media-type.photographic-archival"
 msgstr ""
 
 #. TRANSLATORS: Photo Film
-#: locale/ipp-strings.c:1728
+#: locale/ipp-strings.c:1766
 msgid "media-type.photographic-film"
 msgstr ""
 
 #. TRANSLATORS: Glossy Photo Paper
-#: locale/ipp-strings.c:1730
+#: locale/ipp-strings.c:1768
 msgid "media-type.photographic-glossy"
 msgstr ""
 
 #. TRANSLATORS: High Gloss Photo Paper
-#: locale/ipp-strings.c:1732
+#: locale/ipp-strings.c:1770
 msgid "media-type.photographic-high-gloss"
 msgstr ""
 
 #. TRANSLATORS: Matte Photo Paper
-#: locale/ipp-strings.c:1734
+#: locale/ipp-strings.c:1772
 msgid "media-type.photographic-matte"
 msgstr ""
 
 #. TRANSLATORS: Satin Photo Paper
-#: locale/ipp-strings.c:1736
+#: locale/ipp-strings.c:1774
 msgid "media-type.photographic-satin"
 msgstr ""
 
 #. TRANSLATORS: Semi-Gloss Photo Paper
-#: locale/ipp-strings.c:1738
+#: locale/ipp-strings.c:1776
 msgid "media-type.photographic-semi-gloss"
 msgstr ""
 
 #. TRANSLATORS: Plastic
-#: locale/ipp-strings.c:1740
+#: locale/ipp-strings.c:1778
 msgid "media-type.plastic"
 msgstr ""
 
 #. TRANSLATORS: Plastic Archival
-#: locale/ipp-strings.c:1742
+#: locale/ipp-strings.c:1780
 msgid "media-type.plastic-archival"
 msgstr ""
 
 #. TRANSLATORS: Plastic Colored
-#: locale/ipp-strings.c:1744
+#: locale/ipp-strings.c:1782
 msgid "media-type.plastic-colored"
 msgstr ""
 
 #. TRANSLATORS: Plastic Glossy
-#: locale/ipp-strings.c:1746
+#: locale/ipp-strings.c:1784
 msgid "media-type.plastic-glossy"
 msgstr ""
 
 #. TRANSLATORS: Plastic High Gloss
-#: locale/ipp-strings.c:1748
+#: locale/ipp-strings.c:1786
 msgid "media-type.plastic-high-gloss"
 msgstr ""
 
 #. TRANSLATORS: Plastic Matte
-#: locale/ipp-strings.c:1750
+#: locale/ipp-strings.c:1788
 msgid "media-type.plastic-matte"
 msgstr ""
 
 #. TRANSLATORS: Plastic Satin
-#: locale/ipp-strings.c:1752
+#: locale/ipp-strings.c:1790
 msgid "media-type.plastic-satin"
 msgstr ""
 
 #. TRANSLATORS: Plastic Semi Gloss
-#: locale/ipp-strings.c:1754
+#: locale/ipp-strings.c:1792
 msgid "media-type.plastic-semi-gloss"
 msgstr ""
 
 #. TRANSLATORS: Plate
-#: locale/ipp-strings.c:1756
+#: locale/ipp-strings.c:1794
 msgid "media-type.plate"
 msgstr ""
 
 #. TRANSLATORS: Polyester
-#: locale/ipp-strings.c:1758
+#: locale/ipp-strings.c:1796
 msgid "media-type.polyester"
 msgstr ""
 
 #. TRANSLATORS: Pre Cut Tabs
-#: locale/ipp-strings.c:1760
+#: locale/ipp-strings.c:1798
 msgid "media-type.pre-cut-tabs"
 msgstr ""
 
 #. TRANSLATORS: Roll
-#: locale/ipp-strings.c:1762
+#: locale/ipp-strings.c:1800
 msgid "media-type.roll"
 msgstr ""
 
 #. TRANSLATORS: Screen
-#: locale/ipp-strings.c:1764
+#: locale/ipp-strings.c:1802
 msgid "media-type.screen"
 msgstr ""
 
 #. TRANSLATORS: Screen Paged
-#: locale/ipp-strings.c:1766
+#: locale/ipp-strings.c:1804
 msgid "media-type.screen-paged"
 msgstr ""
 
 #. TRANSLATORS: Self Adhesive
-#: locale/ipp-strings.c:1768
+#: locale/ipp-strings.c:1806
 msgid "media-type.self-adhesive"
 msgstr ""
 
 #. TRANSLATORS: Self Adhesive Film
-#: locale/ipp-strings.c:1770
+#: locale/ipp-strings.c:1808
 msgid "media-type.self-adhesive-film"
 msgstr ""
 
 #. TRANSLATORS: Shrink Foil
-#: locale/ipp-strings.c:1772
+#: locale/ipp-strings.c:1810
 msgid "media-type.shrink-foil"
 msgstr ""
 
 #. TRANSLATORS: Single Face
-#: locale/ipp-strings.c:1774
+#: locale/ipp-strings.c:1812
 msgid "media-type.single-face"
 msgstr ""
 
 #. TRANSLATORS: Single Wall
-#: locale/ipp-strings.c:1776
+#: locale/ipp-strings.c:1814
 msgid "media-type.single-wall"
 msgstr ""
 
 #. TRANSLATORS: Sleeve
-#: locale/ipp-strings.c:1778
+#: locale/ipp-strings.c:1816
 msgid "media-type.sleeve"
 msgstr ""
 
 #. TRANSLATORS: Stationery
-#: locale/ipp-strings.c:1780
+#: locale/ipp-strings.c:1818
 msgid "media-type.stationery"
 msgstr ""
 
 #. TRANSLATORS: Stationery Archival
-#: locale/ipp-strings.c:1782
+#: locale/ipp-strings.c:1820
 msgid "media-type.stationery-archival"
 msgstr ""
 
 #. TRANSLATORS: Coated Paper
-#: locale/ipp-strings.c:1784
+#: locale/ipp-strings.c:1822
 msgid "media-type.stationery-coated"
 msgstr ""
 
 #. TRANSLATORS: Stationery Cotton
-#: locale/ipp-strings.c:1786
+#: locale/ipp-strings.c:1824
 msgid "media-type.stationery-cotton"
 msgstr ""
 
 #. TRANSLATORS: Vellum Paper
-#: locale/ipp-strings.c:1788
+#: locale/ipp-strings.c:1826
 msgid "media-type.stationery-fine"
 msgstr ""
 
 #. TRANSLATORS: Heavyweight Paper
-#: locale/ipp-strings.c:1790
+#: locale/ipp-strings.c:1828
 msgid "media-type.stationery-heavyweight"
 msgstr ""
 
 #. TRANSLATORS: Stationery Heavyweight Coated
-#: locale/ipp-strings.c:1792
+#: locale/ipp-strings.c:1830
 msgid "media-type.stationery-heavyweight-coated"
 msgstr ""
 
 #. TRANSLATORS: Stationery Inkjet Paper
-#: locale/ipp-strings.c:1794
+#: locale/ipp-strings.c:1832
 msgid "media-type.stationery-inkjet"
 msgstr ""
 
 #. TRANSLATORS: Letterhead
-#: locale/ipp-strings.c:1796
+#: locale/ipp-strings.c:1834
 msgid "media-type.stationery-letterhead"
 msgstr ""
 
 #. TRANSLATORS: Lightweight Paper
-#: locale/ipp-strings.c:1798
+#: locale/ipp-strings.c:1836
 msgid "media-type.stationery-lightweight"
 msgstr ""
 
 #. TRANSLATORS: Preprinted Paper
-#: locale/ipp-strings.c:1800
+#: locale/ipp-strings.c:1838
 msgid "media-type.stationery-preprinted"
 msgstr ""
 
 #. TRANSLATORS: Punched Paper
-#: locale/ipp-strings.c:1802
+#: locale/ipp-strings.c:1840
 msgid "media-type.stationery-prepunched"
 msgstr ""
 
 #. TRANSLATORS: Tab Stock
-#: locale/ipp-strings.c:1804
+#: locale/ipp-strings.c:1842
 msgid "media-type.tab-stock"
 msgstr ""
 
 #. TRANSLATORS: Tractor
-#: locale/ipp-strings.c:1806
+#: locale/ipp-strings.c:1844
 msgid "media-type.tractor"
 msgstr ""
 
 #. TRANSLATORS: Transfer
-#: locale/ipp-strings.c:1808
+#: locale/ipp-strings.c:1846
 msgid "media-type.transfer"
 msgstr ""
 
 #. TRANSLATORS: Transparency
-#: locale/ipp-strings.c:1810
+#: locale/ipp-strings.c:1848
 msgid "media-type.transparency"
 msgstr ""
 
 #. TRANSLATORS: Triple Wall
-#: locale/ipp-strings.c:1812
+#: locale/ipp-strings.c:1850
 msgid "media-type.triple-wall"
 msgstr ""
 
 #. TRANSLATORS: Wet Film
-#: locale/ipp-strings.c:1814
+#: locale/ipp-strings.c:1852
 msgid "media-type.wet-film"
 msgstr ""
 
 #. TRANSLATORS: Media Weight (grams per m²)
-#: locale/ipp-strings.c:1816
+#: locale/ipp-strings.c:1854
 msgid "media-weight-metric"
 msgstr ""
 
 #. TRANSLATORS: 28 x 40″
-#: locale/ipp-strings.c:1818
+#: locale/ipp-strings.c:1856
 msgid "media.asme_f_28x40in"
 msgstr ""
 
 #. TRANSLATORS: A4 or US Letter
-#: locale/ipp-strings.c:1820
+#: locale/ipp-strings.c:1858
 msgid "media.choice_iso_a4_210x297mm_na_letter_8.5x11in"
 msgstr ""
 
 #. TRANSLATORS: 2a0
-#: locale/ipp-strings.c:1822
+#: locale/ipp-strings.c:1860
 msgid "media.iso_2a0_1189x1682mm"
 msgstr ""
 
 #. TRANSLATORS: A0
-#: locale/ipp-strings.c:1824
+#: locale/ipp-strings.c:1862
 msgid "media.iso_a0_841x1189mm"
 msgstr ""
 
 #. TRANSLATORS: A0x3
-#: locale/ipp-strings.c:1826
+#: locale/ipp-strings.c:1864
 msgid "media.iso_a0x3_1189x2523mm"
 msgstr ""
 
 #. TRANSLATORS: A10
-#: locale/ipp-strings.c:1828
+#: locale/ipp-strings.c:1866
 msgid "media.iso_a10_26x37mm"
 msgstr ""
 
 #. TRANSLATORS: A1
-#: locale/ipp-strings.c:1830
+#: locale/ipp-strings.c:1868
 msgid "media.iso_a1_594x841mm"
 msgstr ""
 
 #. TRANSLATORS: A1x3
-#: locale/ipp-strings.c:1832
+#: locale/ipp-strings.c:1870
 msgid "media.iso_a1x3_841x1783mm"
 msgstr ""
 
 #. TRANSLATORS: A1x4
-#: locale/ipp-strings.c:1834
+#: locale/ipp-strings.c:1872
 msgid "media.iso_a1x4_841x2378mm"
 msgstr ""
 
 #. TRANSLATORS: A2
-#: locale/ipp-strings.c:1836
+#: locale/ipp-strings.c:1874
 msgid "media.iso_a2_420x594mm"
 msgstr ""
 
 #. TRANSLATORS: A2x3
-#: locale/ipp-strings.c:1838
+#: locale/ipp-strings.c:1876
 msgid "media.iso_a2x3_594x1261mm"
 msgstr ""
 
 #. TRANSLATORS: A2x4
-#: locale/ipp-strings.c:1840
+#: locale/ipp-strings.c:1878
 msgid "media.iso_a2x4_594x1682mm"
 msgstr ""
 
 #. TRANSLATORS: A2x5
-#: locale/ipp-strings.c:1842
+#: locale/ipp-strings.c:1880
 msgid "media.iso_a2x5_594x2102mm"
 msgstr ""
 
 #. TRANSLATORS: A3 (Extra)
-#: locale/ipp-strings.c:1844
+#: locale/ipp-strings.c:1882
 msgid "media.iso_a3-extra_322x445mm"
 msgstr ""
 
 #. TRANSLATORS: A3
-#: locale/ipp-strings.c:1846
+#: locale/ipp-strings.c:1884
 msgid "media.iso_a3_297x420mm"
 msgstr ""
 
 #. TRANSLATORS: A3x3
-#: locale/ipp-strings.c:1848
+#: locale/ipp-strings.c:1886
 msgid "media.iso_a3x3_420x891mm"
 msgstr ""
 
 #. TRANSLATORS: A3x4
-#: locale/ipp-strings.c:1850
+#: locale/ipp-strings.c:1888
 msgid "media.iso_a3x4_420x1189mm"
 msgstr ""
 
 #. TRANSLATORS: A3x5
-#: locale/ipp-strings.c:1852
+#: locale/ipp-strings.c:1890
 msgid "media.iso_a3x5_420x1486mm"
 msgstr ""
 
 #. TRANSLATORS: A3x6
-#: locale/ipp-strings.c:1854
+#: locale/ipp-strings.c:1892
 msgid "media.iso_a3x6_420x1783mm"
 msgstr ""
 
 #. TRANSLATORS: A3x7
-#: locale/ipp-strings.c:1856
+#: locale/ipp-strings.c:1894
 msgid "media.iso_a3x7_420x2080mm"
 msgstr ""
 
 #. TRANSLATORS: A4 (Extra)
-#: locale/ipp-strings.c:1858
+#: locale/ipp-strings.c:1896
 msgid "media.iso_a4-extra_235.5x322.3mm"
 msgstr ""
 
 #. TRANSLATORS: A4 (Tab)
-#: locale/ipp-strings.c:1860
+#: locale/ipp-strings.c:1898
 msgid "media.iso_a4-tab_225x297mm"
 msgstr ""
 
 #. TRANSLATORS: A4
-#: locale/ipp-strings.c:1862
+#: locale/ipp-strings.c:1900
 msgid "media.iso_a4_210x297mm"
 msgstr ""
 
 #. TRANSLATORS: A4x3
-#: locale/ipp-strings.c:1864
+#: locale/ipp-strings.c:1902
 msgid "media.iso_a4x3_297x630mm"
 msgstr ""
 
 #. TRANSLATORS: A4x4
-#: locale/ipp-strings.c:1866
+#: locale/ipp-strings.c:1904
 msgid "media.iso_a4x4_297x841mm"
 msgstr ""
 
 #. TRANSLATORS: A4x5
-#: locale/ipp-strings.c:1868
+#: locale/ipp-strings.c:1906
 msgid "media.iso_a4x5_297x1051mm"
 msgstr ""
 
 #. TRANSLATORS: A4x6
-#: locale/ipp-strings.c:1870
+#: locale/ipp-strings.c:1908
 msgid "media.iso_a4x6_297x1261mm"
 msgstr ""
 
 #. TRANSLATORS: A4x7
-#: locale/ipp-strings.c:1872
+#: locale/ipp-strings.c:1910
 msgid "media.iso_a4x7_297x1471mm"
 msgstr ""
 
 #. TRANSLATORS: A4x8
-#: locale/ipp-strings.c:1874
+#: locale/ipp-strings.c:1912
 msgid "media.iso_a4x8_297x1682mm"
 msgstr ""
 
 #. TRANSLATORS: A4x9
-#: locale/ipp-strings.c:1876
+#: locale/ipp-strings.c:1914
 msgid "media.iso_a4x9_297x1892mm"
 msgstr ""
 
 #. TRANSLATORS: A5 (Extra)
-#: locale/ipp-strings.c:1878
+#: locale/ipp-strings.c:1916
 msgid "media.iso_a5-extra_174x235mm"
 msgstr ""
 
 #. TRANSLATORS: A5
-#: locale/ipp-strings.c:1880
+#: locale/ipp-strings.c:1918
 msgid "media.iso_a5_148x210mm"
 msgstr ""
 
 #. TRANSLATORS: A6
-#: locale/ipp-strings.c:1882
+#: locale/ipp-strings.c:1920
 msgid "media.iso_a6_105x148mm"
 msgstr ""
 
 #. TRANSLATORS: A7
-#: locale/ipp-strings.c:1884
+#: locale/ipp-strings.c:1922
 msgid "media.iso_a7_74x105mm"
 msgstr ""
 
 #. TRANSLATORS: A8
-#: locale/ipp-strings.c:1886
+#: locale/ipp-strings.c:1924
 msgid "media.iso_a8_52x74mm"
 msgstr ""
 
 #. TRANSLATORS: A9
-#: locale/ipp-strings.c:1888
+#: locale/ipp-strings.c:1926
 msgid "media.iso_a9_37x52mm"
 msgstr ""
 
 #. TRANSLATORS: B0
-#: locale/ipp-strings.c:1890
+#: locale/ipp-strings.c:1928
 msgid "media.iso_b0_1000x1414mm"
 msgstr ""
 
 #. TRANSLATORS: B10
-#: locale/ipp-strings.c:1892
+#: locale/ipp-strings.c:1930
 msgid "media.iso_b10_31x44mm"
 msgstr ""
 
 #. TRANSLATORS: B1
-#: locale/ipp-strings.c:1894
+#: locale/ipp-strings.c:1932
 msgid "media.iso_b1_707x1000mm"
 msgstr ""
 
 #. TRANSLATORS: B2
-#: locale/ipp-strings.c:1896
+#: locale/ipp-strings.c:1934
 msgid "media.iso_b2_500x707mm"
 msgstr ""
 
 #. TRANSLATORS: B3
-#: locale/ipp-strings.c:1898
+#: locale/ipp-strings.c:1936
 msgid "media.iso_b3_353x500mm"
 msgstr ""
 
 #. TRANSLATORS: B4
-#: locale/ipp-strings.c:1900
+#: locale/ipp-strings.c:1938
 msgid "media.iso_b4_250x353mm"
 msgstr ""
 
 #. TRANSLATORS: B5 (Extra)
-#: locale/ipp-strings.c:1902
+#: locale/ipp-strings.c:1940
 msgid "media.iso_b5-extra_201x276mm"
 msgstr ""
 
 #. TRANSLATORS: Envelope B5
-#: locale/ipp-strings.c:1904
+#: locale/ipp-strings.c:1942
 msgid "media.iso_b5_176x250mm"
 msgstr ""
 
 #. TRANSLATORS: B6
-#: locale/ipp-strings.c:1906
+#: locale/ipp-strings.c:1944
 msgid "media.iso_b6_125x176mm"
 msgstr ""
 
 #. TRANSLATORS: Envelope B6/C4
-#: locale/ipp-strings.c:1908
+#: locale/ipp-strings.c:1946
 msgid "media.iso_b6c4_125x324mm"
 msgstr ""
 
 #. TRANSLATORS: B7
-#: locale/ipp-strings.c:1910
+#: locale/ipp-strings.c:1948
 msgid "media.iso_b7_88x125mm"
 msgstr ""
 
 #. TRANSLATORS: B8
-#: locale/ipp-strings.c:1912
+#: locale/ipp-strings.c:1950
 msgid "media.iso_b8_62x88mm"
 msgstr ""
 
 #. TRANSLATORS: B9
-#: locale/ipp-strings.c:1914
+#: locale/ipp-strings.c:1952
 msgid "media.iso_b9_44x62mm"
 msgstr ""
 
 #. TRANSLATORS: CEnvelope 0
-#: locale/ipp-strings.c:1916
+#: locale/ipp-strings.c:1954
 msgid "media.iso_c0_917x1297mm"
 msgstr ""
 
 #. TRANSLATORS: CEnvelope 10
-#: locale/ipp-strings.c:1918
+#: locale/ipp-strings.c:1956
 msgid "media.iso_c10_28x40mm"
 msgstr ""
 
 #. TRANSLATORS: CEnvelope 1
-#: locale/ipp-strings.c:1920
+#: locale/ipp-strings.c:1958
 msgid "media.iso_c1_648x917mm"
 msgstr ""
 
 #. TRANSLATORS: CEnvelope 2
-#: locale/ipp-strings.c:1922
+#: locale/ipp-strings.c:1960
 msgid "media.iso_c2_458x648mm"
 msgstr ""
 
 #. TRANSLATORS: CEnvelope 3
-#: locale/ipp-strings.c:1924
+#: locale/ipp-strings.c:1962
 msgid "media.iso_c3_324x458mm"
 msgstr ""
 
 #. TRANSLATORS: CEnvelope 4
-#: locale/ipp-strings.c:1926
+#: locale/ipp-strings.c:1964
 msgid "media.iso_c4_229x324mm"
 msgstr ""
 
 #. TRANSLATORS: CEnvelope 5
-#: locale/ipp-strings.c:1928
+#: locale/ipp-strings.c:1966
 msgid "media.iso_c5_162x229mm"
 msgstr ""
 
 #. TRANSLATORS: CEnvelope 6
-#: locale/ipp-strings.c:1930
+#: locale/ipp-strings.c:1968
 msgid "media.iso_c6_114x162mm"
 msgstr ""
 
 #. TRANSLATORS: CEnvelope 6c5
-#: locale/ipp-strings.c:1932
+#: locale/ipp-strings.c:1970
 msgid "media.iso_c6c5_114x229mm"
 msgstr ""
 
 #. TRANSLATORS: CEnvelope 7
-#: locale/ipp-strings.c:1934
+#: locale/ipp-strings.c:1972
 msgid "media.iso_c7_81x114mm"
 msgstr ""
 
 #. TRANSLATORS: CEnvelope 7c6
-#: locale/ipp-strings.c:1936
+#: locale/ipp-strings.c:1974
 msgid "media.iso_c7c6_81x162mm"
 msgstr ""
 
 #. TRANSLATORS: CEnvelope 8
-#: locale/ipp-strings.c:1938
+#: locale/ipp-strings.c:1976
 msgid "media.iso_c8_57x81mm"
 msgstr ""
 
 #. TRANSLATORS: CEnvelope 9
-#: locale/ipp-strings.c:1940
+#: locale/ipp-strings.c:1978
 msgid "media.iso_c9_40x57mm"
 msgstr ""
 
 #. TRANSLATORS: Envelope DL
-#: locale/ipp-strings.c:1942
+#: locale/ipp-strings.c:1980
 msgid "media.iso_dl_110x220mm"
 msgstr ""
 
 #. TRANSLATORS: Id-1
-#: locale/ipp-strings.c:1944
+#: locale/ipp-strings.c:1982
 msgid "media.iso_id-1_53.98x85.6mm"
 msgstr ""
 
 #. TRANSLATORS: Id-3
-#: locale/ipp-strings.c:1946
+#: locale/ipp-strings.c:1984
 msgid "media.iso_id-3_88x125mm"
 msgstr ""
 
 #. TRANSLATORS: ISO RA0
-#: locale/ipp-strings.c:1948
+#: locale/ipp-strings.c:1986
 msgid "media.iso_ra0_860x1220mm"
 msgstr ""
 
 #. TRANSLATORS: ISO RA1
-#: locale/ipp-strings.c:1950
+#: locale/ipp-strings.c:1988
 msgid "media.iso_ra1_610x860mm"
 msgstr ""
 
 #. TRANSLATORS: ISO RA2
-#: locale/ipp-strings.c:1952
+#: locale/ipp-strings.c:1990
 msgid "media.iso_ra2_430x610mm"
 msgstr ""
 
 #. TRANSLATORS: ISO RA3
-#: locale/ipp-strings.c:1954
+#: locale/ipp-strings.c:1992
 msgid "media.iso_ra3_305x430mm"
 msgstr ""
 
 #. TRANSLATORS: ISO RA4
-#: locale/ipp-strings.c:1956
+#: locale/ipp-strings.c:1994
 msgid "media.iso_ra4_215x305mm"
 msgstr ""
 
 #. TRANSLATORS: ISO SRA0
-#: locale/ipp-strings.c:1958
+#: locale/ipp-strings.c:1996
 msgid "media.iso_sra0_900x1280mm"
 msgstr ""
 
 #. TRANSLATORS: ISO SRA1
-#: locale/ipp-strings.c:1960
+#: locale/ipp-strings.c:1998
 msgid "media.iso_sra1_640x900mm"
 msgstr ""
 
 #. TRANSLATORS: ISO SRA2
-#: locale/ipp-strings.c:1962
+#: locale/ipp-strings.c:2000
 msgid "media.iso_sra2_450x640mm"
 msgstr ""
 
 #. TRANSLATORS: ISO SRA3
-#: locale/ipp-strings.c:1964
+#: locale/ipp-strings.c:2002
 msgid "media.iso_sra3_320x450mm"
 msgstr ""
 
 #. TRANSLATORS: ISO SRA4
-#: locale/ipp-strings.c:1966
+#: locale/ipp-strings.c:2004
 msgid "media.iso_sra4_225x320mm"
 msgstr ""
 
 #. TRANSLATORS: JIS B0
-#: locale/ipp-strings.c:1968
+#: locale/ipp-strings.c:2006
 msgid "media.jis_b0_1030x1456mm"
 msgstr ""
 
 #. TRANSLATORS: JIS B10
-#: locale/ipp-strings.c:1970
+#: locale/ipp-strings.c:2008
 msgid "media.jis_b10_32x45mm"
 msgstr ""
 
 #. TRANSLATORS: JIS B1
-#: locale/ipp-strings.c:1972
+#: locale/ipp-strings.c:2010
 msgid "media.jis_b1_728x1030mm"
 msgstr ""
 
 #. TRANSLATORS: JIS B2
-#: locale/ipp-strings.c:1974
+#: locale/ipp-strings.c:2012
 msgid "media.jis_b2_515x728mm"
 msgstr ""
 
 #. TRANSLATORS: JIS B3
-#: locale/ipp-strings.c:1976
+#: locale/ipp-strings.c:2014
 msgid "media.jis_b3_364x515mm"
 msgstr ""
 
 #. TRANSLATORS: JIS B4
-#: locale/ipp-strings.c:1978
+#: locale/ipp-strings.c:2016
 msgid "media.jis_b4_257x364mm"
 msgstr ""
 
 #. TRANSLATORS: JIS B5
-#: locale/ipp-strings.c:1980
+#: locale/ipp-strings.c:2018
 msgid "media.jis_b5_182x257mm"
 msgstr ""
 
 #. TRANSLATORS: JIS B6
-#: locale/ipp-strings.c:1982
+#: locale/ipp-strings.c:2020
 msgid "media.jis_b6_128x182mm"
 msgstr ""
 
 #. TRANSLATORS: JIS B7
-#: locale/ipp-strings.c:1984
+#: locale/ipp-strings.c:2022
 msgid "media.jis_b7_91x128mm"
 msgstr ""
 
 #. TRANSLATORS: JIS B8
-#: locale/ipp-strings.c:1986
+#: locale/ipp-strings.c:2024
 msgid "media.jis_b8_64x91mm"
 msgstr ""
 
 #. TRANSLATORS: JIS B9
-#: locale/ipp-strings.c:1988
+#: locale/ipp-strings.c:2026
 msgid "media.jis_b9_45x64mm"
 msgstr ""
 
 #. TRANSLATORS: JIS Executive
-#: locale/ipp-strings.c:1990
+#: locale/ipp-strings.c:2028
 msgid "media.jis_exec_216x330mm"
 msgstr ""
 
 #. TRANSLATORS: Envelope Chou 2
-#: locale/ipp-strings.c:1992
+#: locale/ipp-strings.c:2030
 msgid "media.jpn_chou2_111.1x146mm"
 msgstr ""
 
 #. TRANSLATORS: Envelope Chou 3
-#: locale/ipp-strings.c:1994
+#: locale/ipp-strings.c:2032
 msgid "media.jpn_chou3_120x235mm"
 msgstr ""
 
 #. TRANSLATORS: Envelope Chou 40
-#: locale/ipp-strings.c:1996
+#: locale/ipp-strings.c:2034
 msgid "media.jpn_chou40_90x225mm"
 msgstr ""
 
 #. TRANSLATORS: Envelope Chou 4
-#: locale/ipp-strings.c:1998
+#: locale/ipp-strings.c:2036
 msgid "media.jpn_chou4_90x205mm"
 msgstr ""
 
 #. TRANSLATORS: Hagaki
-#: locale/ipp-strings.c:2000
+#: locale/ipp-strings.c:2038
 msgid "media.jpn_hagaki_100x148mm"
 msgstr ""
 
 #. TRANSLATORS: Envelope Kahu
-#: locale/ipp-strings.c:2002
+#: locale/ipp-strings.c:2040
 msgid "media.jpn_kahu_240x322.1mm"
 msgstr ""
 
 #. TRANSLATORS: 270 x 382mm
-#: locale/ipp-strings.c:2004
+#: locale/ipp-strings.c:2042
 msgid "media.jpn_kaku1_270x382mm"
 msgstr ""
 
 #. TRANSLATORS: Envelope Kahu 2
-#: locale/ipp-strings.c:2006
+#: locale/ipp-strings.c:2044
 msgid "media.jpn_kaku2_240x332mm"
 msgstr ""
 
 #. TRANSLATORS: 216 x 277mm
-#: locale/ipp-strings.c:2008
+#: locale/ipp-strings.c:2046
 msgid "media.jpn_kaku3_216x277mm"
 msgstr ""
 
 #. TRANSLATORS: 197 x 267mm
-#: locale/ipp-strings.c:2010
+#: locale/ipp-strings.c:2048
 msgid "media.jpn_kaku4_197x267mm"
 msgstr ""
 
 #. TRANSLATORS: 190 x 240mm
-#: locale/ipp-strings.c:2012
+#: locale/ipp-strings.c:2050
 msgid "media.jpn_kaku5_190x240mm"
 msgstr ""
 
 #. TRANSLATORS: 142 x 205mm
-#: locale/ipp-strings.c:2014
+#: locale/ipp-strings.c:2052
 msgid "media.jpn_kaku7_142x205mm"
 msgstr ""
 
 #. TRANSLATORS: 119 x 197mm
-#: locale/ipp-strings.c:2016
+#: locale/ipp-strings.c:2054
 msgid "media.jpn_kaku8_119x197mm"
 msgstr ""
 
 #. TRANSLATORS: Oufuku Reply Postcard
-#: locale/ipp-strings.c:2018
+#: locale/ipp-strings.c:2056
 msgid "media.jpn_oufuku_148x200mm"
 msgstr ""
 
 #. TRANSLATORS: Envelope You 4
-#: locale/ipp-strings.c:2020
+#: locale/ipp-strings.c:2058
 msgid "media.jpn_you4_105x235mm"
 msgstr ""
 
 #. TRANSLATORS: 10 x 11″
-#: locale/ipp-strings.c:2022
+#: locale/ipp-strings.c:2060
 msgid "media.na_10x11_10x11in"
 msgstr ""
 
 #. TRANSLATORS: 10 x 13″
-#: locale/ipp-strings.c:2024
+#: locale/ipp-strings.c:2062
 msgid "media.na_10x13_10x13in"
 msgstr ""
 
 #. TRANSLATORS: 10 x 14″
-#: locale/ipp-strings.c:2026
+#: locale/ipp-strings.c:2064
 msgid "media.na_10x14_10x14in"
 msgstr ""
 
 #. TRANSLATORS: 10 x 15″
-#: locale/ipp-strings.c:2028
+#: locale/ipp-strings.c:2066
 msgid "media.na_10x15_10x15in"
 msgstr ""
 
 #. TRANSLATORS: 11 x 12″
-#: locale/ipp-strings.c:2030
+#: locale/ipp-strings.c:2068
 msgid "media.na_11x12_11x12in"
 msgstr ""
 
 #. TRANSLATORS: 11 x 15″
-#: locale/ipp-strings.c:2032
+#: locale/ipp-strings.c:2070
 msgid "media.na_11x15_11x15in"
 msgstr ""
 
 #. TRANSLATORS: 12 x 19″
-#: locale/ipp-strings.c:2034
+#: locale/ipp-strings.c:2072
 msgid "media.na_12x19_12x19in"
 msgstr ""
 
 #. TRANSLATORS: 5 x 7″
-#: locale/ipp-strings.c:2036
+#: locale/ipp-strings.c:2074
 msgid "media.na_5x7_5x7in"
 msgstr ""
 
 #. TRANSLATORS: 6 x 9″
-#: locale/ipp-strings.c:2038
+#: locale/ipp-strings.c:2076
 msgid "media.na_6x9_6x9in"
 msgstr ""
 
 #. TRANSLATORS: 7 x 9″
-#: locale/ipp-strings.c:2040
+#: locale/ipp-strings.c:2078
 msgid "media.na_7x9_7x9in"
 msgstr ""
 
 #. TRANSLATORS: 9 x 11″
-#: locale/ipp-strings.c:2042
+#: locale/ipp-strings.c:2080
 msgid "media.na_9x11_9x11in"
 msgstr ""
 
 #. TRANSLATORS: Envelope A2
-#: locale/ipp-strings.c:2044
+#: locale/ipp-strings.c:2082
 msgid "media.na_a2_4.375x5.75in"
 msgstr ""
 
 #. TRANSLATORS: 9 x 12″
-#: locale/ipp-strings.c:2046
+#: locale/ipp-strings.c:2084
 msgid "media.na_arch-a_9x12in"
 msgstr ""
 
 #. TRANSLATORS: 12 x 18″
-#: locale/ipp-strings.c:2048
+#: locale/ipp-strings.c:2086
 msgid "media.na_arch-b_12x18in"
 msgstr ""
 
 #. TRANSLATORS: 18 x 24″
-#: locale/ipp-strings.c:2050
+#: locale/ipp-strings.c:2088
 msgid "media.na_arch-c_18x24in"
 msgstr ""
 
 #. TRANSLATORS: 24 x 36″
-#: locale/ipp-strings.c:2052
+#: locale/ipp-strings.c:2090
 msgid "media.na_arch-d_24x36in"
 msgstr ""
 
 #. TRANSLATORS: 26 x 38″
-#: locale/ipp-strings.c:2054
+#: locale/ipp-strings.c:2092
 msgid "media.na_arch-e2_26x38in"
 msgstr ""
 
 #. TRANSLATORS: 27 x 39″
-#: locale/ipp-strings.c:2056
+#: locale/ipp-strings.c:2094
 msgid "media.na_arch-e3_27x39in"
 msgstr ""
 
 #. TRANSLATORS: 36 x 48″
-#: locale/ipp-strings.c:2058
+#: locale/ipp-strings.c:2096
 msgid "media.na_arch-e_36x48in"
 msgstr ""
 
 #. TRANSLATORS: 12 x 19.17″
-#: locale/ipp-strings.c:2060
+#: locale/ipp-strings.c:2098
 msgid "media.na_b-plus_12x19.17in"
 msgstr ""
 
 #. TRANSLATORS: Envelope C5
-#: locale/ipp-strings.c:2062
+#: locale/ipp-strings.c:2100
 msgid "media.na_c5_6.5x9.5in"
 msgstr ""
 
 #. TRANSLATORS: 17 x 22″
-#: locale/ipp-strings.c:2064
+#: locale/ipp-strings.c:2102
 msgid "media.na_c_17x22in"
 msgstr ""
 
 #. TRANSLATORS: 22 x 34″
-#: locale/ipp-strings.c:2066
+#: locale/ipp-strings.c:2104
 msgid "media.na_d_22x34in"
 msgstr ""
 
 #. TRANSLATORS: 34 x 44″
-#: locale/ipp-strings.c:2068
+#: locale/ipp-strings.c:2106
 msgid "media.na_e_34x44in"
 msgstr ""
 
 #. TRANSLATORS: 11 x 14″
-#: locale/ipp-strings.c:2070
+#: locale/ipp-strings.c:2108
 msgid "media.na_edp_11x14in"
 msgstr ""
 
 #. TRANSLATORS: 12 x 14″
-#: locale/ipp-strings.c:2072
+#: locale/ipp-strings.c:2110
 msgid "media.na_eur-edp_12x14in"
 msgstr ""
 
 #. TRANSLATORS: Executive
-#: locale/ipp-strings.c:2074
+#: locale/ipp-strings.c:2112
 msgid "media.na_executive_7.25x10.5in"
 msgstr ""
 
 #. TRANSLATORS: 44 x 68″
-#: locale/ipp-strings.c:2076
+#: locale/ipp-strings.c:2114
 msgid "media.na_f_44x68in"
 msgstr ""
 
 #. TRANSLATORS: European Fanfold
-#: locale/ipp-strings.c:2078
+#: locale/ipp-strings.c:2116
 msgid "media.na_fanfold-eur_8.5x12in"
 msgstr ""
 
 #. TRANSLATORS: US Fanfold
-#: locale/ipp-strings.c:2080
+#: locale/ipp-strings.c:2118
 msgid "media.na_fanfold-us_11x14.875in"
 msgstr ""
 
 #. TRANSLATORS: Foolscap
-#: locale/ipp-strings.c:2082
+#: locale/ipp-strings.c:2120
 msgid "media.na_foolscap_8.5x13in"
 msgstr ""
 
 #. TRANSLATORS: 8 x 13″
-#: locale/ipp-strings.c:2084
+#: locale/ipp-strings.c:2122
 msgid "media.na_govt-legal_8x13in"
 msgstr ""
 
 #. TRANSLATORS: 8 x 10″
-#: locale/ipp-strings.c:2086
+#: locale/ipp-strings.c:2124
 msgid "media.na_govt-letter_8x10in"
 msgstr ""
 
 #. TRANSLATORS: 3 x 5″
-#: locale/ipp-strings.c:2088
+#: locale/ipp-strings.c:2126
 msgid "media.na_index-3x5_3x5in"
 msgstr ""
 
 #. TRANSLATORS: 6 x 8″
-#: locale/ipp-strings.c:2090
+#: locale/ipp-strings.c:2128
 msgid "media.na_index-4x6-ext_6x8in"
 msgstr ""
 
 #. TRANSLATORS: 4 x 6″
-#: locale/ipp-strings.c:2092
+#: locale/ipp-strings.c:2130
 msgid "media.na_index-4x6_4x6in"
 msgstr ""
 
 #. TRANSLATORS: 5 x 8″
-#: locale/ipp-strings.c:2094
+#: locale/ipp-strings.c:2132
 msgid "media.na_index-5x8_5x8in"
 msgstr ""
 
 #. TRANSLATORS: Statement
-#: locale/ipp-strings.c:2096
+#: locale/ipp-strings.c:2134
 msgid "media.na_invoice_5.5x8.5in"
 msgstr ""
 
 #. TRANSLATORS: 11 x 17″
-#: locale/ipp-strings.c:2098
+#: locale/ipp-strings.c:2136
 msgid "media.na_ledger_11x17in"
 msgstr ""
 
 #. TRANSLATORS: US Legal (Extra)
-#: locale/ipp-strings.c:2100
+#: locale/ipp-strings.c:2138
 msgid "media.na_legal-extra_9.5x15in"
 msgstr ""
 
 #. TRANSLATORS: US Legal
-#: locale/ipp-strings.c:2102
+#: locale/ipp-strings.c:2140
 msgid "media.na_legal_8.5x14in"
 msgstr ""
 
 #. TRANSLATORS: US Letter (Extra)
-#: locale/ipp-strings.c:2104
+#: locale/ipp-strings.c:2142
 msgid "media.na_letter-extra_9.5x12in"
 msgstr ""
 
 #. TRANSLATORS: US Letter (Plus)
-#: locale/ipp-strings.c:2106
+#: locale/ipp-strings.c:2144
 msgid "media.na_letter-plus_8.5x12.69in"
 msgstr ""
 
 #. TRANSLATORS: US Letter
-#: locale/ipp-strings.c:2108
+#: locale/ipp-strings.c:2146
 msgid "media.na_letter_8.5x11in"
 msgstr ""
 
 #. TRANSLATORS: Envelope Monarch
-#: locale/ipp-strings.c:2110
+#: locale/ipp-strings.c:2148
 msgid "media.na_monarch_3.875x7.5in"
 msgstr ""
 
 #. TRANSLATORS: Envelope #10
-#: locale/ipp-strings.c:2112
+#: locale/ipp-strings.c:2150
 msgid "media.na_number-10_4.125x9.5in"
 msgstr ""
 
 #. TRANSLATORS: Envelope #11
-#: locale/ipp-strings.c:2114
+#: locale/ipp-strings.c:2152
 msgid "media.na_number-11_4.5x10.375in"
 msgstr ""
 
 #. TRANSLATORS: Envelope #12
-#: locale/ipp-strings.c:2116
+#: locale/ipp-strings.c:2154
 msgid "media.na_number-12_4.75x11in"
 msgstr ""
 
 #. TRANSLATORS: Envelope #14
-#: locale/ipp-strings.c:2118
+#: locale/ipp-strings.c:2156
 msgid "media.na_number-14_5x11.5in"
 msgstr ""
 
 #. TRANSLATORS: Envelope #9
-#: locale/ipp-strings.c:2120
+#: locale/ipp-strings.c:2158
 msgid "media.na_number-9_3.875x8.875in"
 msgstr ""
 
 #. TRANSLATORS: 8.5 x 13.4″
-#: locale/ipp-strings.c:2122
+#: locale/ipp-strings.c:2160
 msgid "media.na_oficio_8.5x13.4in"
 msgstr ""
 
 #. TRANSLATORS: Envelope Personal
-#: locale/ipp-strings.c:2124
+#: locale/ipp-strings.c:2162
 msgid "media.na_personal_3.625x6.5in"
 msgstr ""
 
 #. TRANSLATORS: Quarto
-#: locale/ipp-strings.c:2126
+#: locale/ipp-strings.c:2164
 msgid "media.na_quarto_8.5x10.83in"
 msgstr ""
 
 #. TRANSLATORS: 8.94 x 14″
-#: locale/ipp-strings.c:2128
+#: locale/ipp-strings.c:2166
 msgid "media.na_super-a_8.94x14in"
 msgstr ""
 
 #. TRANSLATORS: 13 x 19″
-#: locale/ipp-strings.c:2130
+#: locale/ipp-strings.c:2168
 msgid "media.na_super-b_13x19in"
 msgstr ""
 
 #. TRANSLATORS: 30 x 42″
-#: locale/ipp-strings.c:2132
+#: locale/ipp-strings.c:2170
 msgid "media.na_wide-format_30x42in"
 msgstr ""
 
 #. TRANSLATORS: 12 x 16″
-#: locale/ipp-strings.c:2134
+#: locale/ipp-strings.c:2172
 msgid "media.oe_12x16_12x16in"
 msgstr ""
 
 #. TRANSLATORS: 14 x 17″
-#: locale/ipp-strings.c:2136
+#: locale/ipp-strings.c:2174
 msgid "media.oe_14x17_14x17in"
 msgstr ""
 
 #. TRANSLATORS: 18 x 22″
-#: locale/ipp-strings.c:2138
+#: locale/ipp-strings.c:2176
 msgid "media.oe_18x22_18x22in"
 msgstr ""
 
 #. TRANSLATORS: 17 x 24″
-#: locale/ipp-strings.c:2140
+#: locale/ipp-strings.c:2178
 msgid "media.oe_a2plus_17x24in"
 msgstr ""
 
 #. TRANSLATORS: 2 x 3.5″
-#: locale/ipp-strings.c:2142
+#: locale/ipp-strings.c:2180
 msgid "media.oe_business-card_2x3.5in"
 msgstr ""
 
 #. TRANSLATORS: 10 x 12″
-#: locale/ipp-strings.c:2144
+#: locale/ipp-strings.c:2182
 msgid "media.oe_photo-10r_10x12in"
 msgstr ""
 
 #. TRANSLATORS: 20 x 24″
-#: locale/ipp-strings.c:2146
+#: locale/ipp-strings.c:2184
 msgid "media.oe_photo-20r_20x24in"
 msgstr ""
 
 #. TRANSLATORS: 3.5 x 5″
-#: locale/ipp-strings.c:2148
+#: locale/ipp-strings.c:2186
 msgid "media.oe_photo-l_3.5x5in"
 msgstr ""
 
 #. TRANSLATORS: 10 x 15″
-#: locale/ipp-strings.c:2150
+#: locale/ipp-strings.c:2188
 msgid "media.oe_photo-s10r_10x15in"
 msgstr ""
 
 #. TRANSLATORS: 4 x 4″
-#: locale/ipp-strings.c:2152
+#: locale/ipp-strings.c:2190
 msgid "media.oe_square-photo_4x4in"
 msgstr ""
 
 #. TRANSLATORS: 5 x 5″
-#: locale/ipp-strings.c:2154
+#: locale/ipp-strings.c:2192
 msgid "media.oe_square-photo_5x5in"
 msgstr ""
 
 #. TRANSLATORS: 184 x 260mm
-#: locale/ipp-strings.c:2156
+#: locale/ipp-strings.c:2194
 msgid "media.om_16k_184x260mm"
 msgstr ""
 
 #. TRANSLATORS: 195 x 270mm
-#: locale/ipp-strings.c:2158
+#: locale/ipp-strings.c:2196
 msgid "media.om_16k_195x270mm"
 msgstr ""
 
 #. TRANSLATORS: 55 x 85mm
-#: locale/ipp-strings.c:2160
+#: locale/ipp-strings.c:2198
 msgid "media.om_business-card_55x85mm"
 msgstr ""
 
 #. TRANSLATORS: 55 x 91mm
-#: locale/ipp-strings.c:2162
+#: locale/ipp-strings.c:2200
 msgid "media.om_business-card_55x91mm"
 msgstr ""
 
 #. TRANSLATORS: 54 x 86mm
-#: locale/ipp-strings.c:2164
+#: locale/ipp-strings.c:2202
 msgid "media.om_card_54x86mm"
 msgstr ""
 
 #. TRANSLATORS: 275 x 395mm
-#: locale/ipp-strings.c:2166
+#: locale/ipp-strings.c:2204
 msgid "media.om_dai-pa-kai_275x395mm"
 msgstr ""
 
 #. TRANSLATORS: 89 x 119mm
-#: locale/ipp-strings.c:2168
+#: locale/ipp-strings.c:2206
 msgid "media.om_dsc-photo_89x119mm"
 msgstr ""
 
 #. TRANSLATORS: Folio
-#: locale/ipp-strings.c:2170
+#: locale/ipp-strings.c:2208
 msgid "media.om_folio-sp_215x315mm"
 msgstr ""
 
 #. TRANSLATORS: Folio (Special)
-#: locale/ipp-strings.c:2172
+#: locale/ipp-strings.c:2210
 msgid "media.om_folio_210x330mm"
 msgstr ""
 
 #. TRANSLATORS: Envelope Invitation
-#: locale/ipp-strings.c:2174
+#: locale/ipp-strings.c:2212
 msgid "media.om_invite_220x220mm"
 msgstr ""
 
 #. TRANSLATORS: Envelope Italian
-#: locale/ipp-strings.c:2176
+#: locale/ipp-strings.c:2214
 msgid "media.om_italian_110x230mm"
 msgstr ""
 
 #. TRANSLATORS: 198 x 275mm
-#: locale/ipp-strings.c:2178
+#: locale/ipp-strings.c:2216
 msgid "media.om_juuro-ku-kai_198x275mm"
 msgstr ""
 
 #. TRANSLATORS: 200 x 300
-#: locale/ipp-strings.c:2180
+#: locale/ipp-strings.c:2218
 msgid "media.om_large-photo_200x300"
 msgstr ""
 
 #. TRANSLATORS: 130 x 180mm
-#: locale/ipp-strings.c:2182
+#: locale/ipp-strings.c:2220
 msgid "media.om_medium-photo_130x180mm"
 msgstr ""
 
 #. TRANSLATORS: 267 x 389mm
-#: locale/ipp-strings.c:2184
+#: locale/ipp-strings.c:2222
 msgid "media.om_pa-kai_267x389mm"
 msgstr ""
 
 #. TRANSLATORS: Envelope Postfix
-#: locale/ipp-strings.c:2186
+#: locale/ipp-strings.c:2224
 msgid "media.om_postfix_114x229mm"
 msgstr ""
 
 #. TRANSLATORS: 100 x 150mm
-#: locale/ipp-strings.c:2188
+#: locale/ipp-strings.c:2226
 msgid "media.om_small-photo_100x150mm"
 msgstr ""
 
 #. TRANSLATORS: 89 x 89mm
-#: locale/ipp-strings.c:2190
+#: locale/ipp-strings.c:2228
 msgid "media.om_square-photo_89x89mm"
 msgstr ""
 
 #. TRANSLATORS: 100 x 200mm
-#: locale/ipp-strings.c:2192
+#: locale/ipp-strings.c:2230
 msgid "media.om_wide-photo_100x200mm"
 msgstr ""
 
 #. TRANSLATORS: Envelope Chinese #10
-#: locale/ipp-strings.c:2194
+#: locale/ipp-strings.c:2232
 msgid "media.prc_10_324x458mm"
 msgstr ""
 
 #. TRANSLATORS: Chinese 16k
-#: locale/ipp-strings.c:2196
+#: locale/ipp-strings.c:2234
 msgid "media.prc_16k_146x215mm"
 msgstr ""
 
 #. TRANSLATORS: Envelope Chinese #1
-#: locale/ipp-strings.c:2198
+#: locale/ipp-strings.c:2236
 msgid "media.prc_1_102x165mm"
 msgstr ""
 
 #. TRANSLATORS: Envelope Chinese #2
-#: locale/ipp-strings.c:2200
+#: locale/ipp-strings.c:2238
 msgid "media.prc_2_102x176mm"
 msgstr ""
 
 #. TRANSLATORS: Chinese 32k
-#: locale/ipp-strings.c:2202
+#: locale/ipp-strings.c:2240
 msgid "media.prc_32k_97x151mm"
 msgstr ""
 
 #. TRANSLATORS: Envelope Chinese #3
-#: locale/ipp-strings.c:2204
+#: locale/ipp-strings.c:2242
 msgid "media.prc_3_125x176mm"
 msgstr ""
 
 #. TRANSLATORS: Envelope Chinese #4
-#: locale/ipp-strings.c:2206
+#: locale/ipp-strings.c:2244
 msgid "media.prc_4_110x208mm"
 msgstr ""
 
 #. TRANSLATORS: Envelope Chinese #5
-#: locale/ipp-strings.c:2208
+#: locale/ipp-strings.c:2246
 msgid "media.prc_5_110x220mm"
 msgstr ""
 
 #. TRANSLATORS: Envelope Chinese #6
-#: locale/ipp-strings.c:2210
+#: locale/ipp-strings.c:2248
 msgid "media.prc_6_120x320mm"
 msgstr ""
 
 #. TRANSLATORS: Envelope Chinese #7
-#: locale/ipp-strings.c:2212
+#: locale/ipp-strings.c:2250
 msgid "media.prc_7_160x230mm"
 msgstr ""
 
 #. TRANSLATORS: Envelope Chinese #8
-#: locale/ipp-strings.c:2214
+#: locale/ipp-strings.c:2252
 msgid "media.prc_8_120x309mm"
 msgstr ""
 
 #. TRANSLATORS: ROC 16k
-#: locale/ipp-strings.c:2216
+#: locale/ipp-strings.c:2254
 msgid "media.roc_16k_7.75x10.75in"
 msgstr ""
 
 #. TRANSLATORS: ROC 8k
-#: locale/ipp-strings.c:2218
+#: locale/ipp-strings.c:2256
 msgid "media.roc_8k_10.75x15.5in"
 msgstr ""
 
@@ -12806,82 +12925,82 @@ msgid "members of class %s:"
 msgstr ""
 
 #. TRANSLATORS: Multiple Document Handling
-#: locale/ipp-strings.c:2220
+#: locale/ipp-strings.c:2258
 msgid "multiple-document-handling"
 msgstr ""
 
 #. TRANSLATORS: Separate Documents Collated Copies
-#: locale/ipp-strings.c:2222
+#: locale/ipp-strings.c:2260
 msgid "multiple-document-handling.separate-documents-collated-copies"
 msgstr ""
 
 #. TRANSLATORS: Separate Documents Uncollated Copies
-#: locale/ipp-strings.c:2224
+#: locale/ipp-strings.c:2262
 msgid "multiple-document-handling.separate-documents-uncollated-copies"
 msgstr ""
 
 #. TRANSLATORS: Single Document
-#: locale/ipp-strings.c:2226
+#: locale/ipp-strings.c:2264
 msgid "multiple-document-handling.single-document"
 msgstr ""
 
 #. TRANSLATORS: Single Document New Sheet
-#: locale/ipp-strings.c:2228
+#: locale/ipp-strings.c:2266
 msgid "multiple-document-handling.single-document-new-sheet"
 msgstr ""
 
 #. TRANSLATORS: Multiple Object Handling
-#: locale/ipp-strings.c:2230
+#: locale/ipp-strings.c:2268
 msgid "multiple-object-handling"
 msgstr ""
 
 #. TRANSLATORS: Multiple Object Handling Actual
-#: locale/ipp-strings.c:2232
+#: locale/ipp-strings.c:2270
 msgid "multiple-object-handling-actual"
 msgstr ""
 
 #. TRANSLATORS: Automatic
-#: locale/ipp-strings.c:2234
+#: locale/ipp-strings.c:2272
 msgid "multiple-object-handling.auto"
 msgstr ""
 
 #. TRANSLATORS: Best Fit
-#: locale/ipp-strings.c:2236
+#: locale/ipp-strings.c:2274
 msgid "multiple-object-handling.best-fit"
 msgstr ""
 
 #. TRANSLATORS: Best Quality
-#: locale/ipp-strings.c:2238
+#: locale/ipp-strings.c:2276
 msgid "multiple-object-handling.best-quality"
 msgstr ""
 
 #. TRANSLATORS: Best Speed
-#: locale/ipp-strings.c:2240
+#: locale/ipp-strings.c:2278
 msgid "multiple-object-handling.best-speed"
 msgstr ""
 
 #. TRANSLATORS: One At A Time
-#: locale/ipp-strings.c:2242
+#: locale/ipp-strings.c:2280
 msgid "multiple-object-handling.one-at-a-time"
 msgstr ""
 
 #. TRANSLATORS: On Timeout
-#: locale/ipp-strings.c:2244
+#: locale/ipp-strings.c:2282
 msgid "multiple-operation-time-out-action"
 msgstr ""
 
 #. TRANSLATORS: Abort Job
-#: locale/ipp-strings.c:2246
+#: locale/ipp-strings.c:2284
 msgid "multiple-operation-time-out-action.abort-job"
 msgstr ""
 
 #. TRANSLATORS: Hold Job
-#: locale/ipp-strings.c:2248
+#: locale/ipp-strings.c:2286
 msgid "multiple-operation-time-out-action.hold-job"
 msgstr ""
 
 #. TRANSLATORS: Process Job
-#: locale/ipp-strings.c:2250
+#: locale/ipp-strings.c:2288
 msgid "multiple-operation-time-out-action.process-job"
 msgstr ""
 
@@ -12894,22 +13013,22 @@ msgid "no system default destination"
 msgstr ""
 
 #. TRANSLATORS: Noise Removal
-#: locale/ipp-strings.c:2252
+#: locale/ipp-strings.c:2290
 msgid "noise-removal"
 msgstr ""
 
 #. TRANSLATORS: Notify Attributes
-#: locale/ipp-strings.c:2254
+#: locale/ipp-strings.c:2292
 msgid "notify-attributes"
 msgstr ""
 
 #. TRANSLATORS: Notify Charset
-#: locale/ipp-strings.c:2256
+#: locale/ipp-strings.c:2294
 msgid "notify-charset"
 msgstr ""
 
 #. TRANSLATORS: Notify Events
-#: locale/ipp-strings.c:2258
+#: locale/ipp-strings.c:2296
 msgid "notify-events"
 msgstr ""
 
@@ -12918,137 +13037,137 @@ msgid "notify-events not specified."
 msgstr ""
 
 #. TRANSLATORS: Document Completed
-#: locale/ipp-strings.c:2260
+#: locale/ipp-strings.c:2298
 msgid "notify-events.document-completed"
 msgstr ""
 
 #. TRANSLATORS: Document Config Changed
-#: locale/ipp-strings.c:2262
+#: locale/ipp-strings.c:2300
 msgid "notify-events.document-config-changed"
 msgstr ""
 
 #. TRANSLATORS: Document Created
-#: locale/ipp-strings.c:2264
+#: locale/ipp-strings.c:2302
 msgid "notify-events.document-created"
 msgstr ""
 
 #. TRANSLATORS: Document Fetchable
-#: locale/ipp-strings.c:2266
+#: locale/ipp-strings.c:2304
 msgid "notify-events.document-fetchable"
 msgstr ""
 
 #. TRANSLATORS: Document State Changed
-#: locale/ipp-strings.c:2268
+#: locale/ipp-strings.c:2306
 msgid "notify-events.document-state-changed"
 msgstr ""
 
 #. TRANSLATORS: Document Stopped
-#: locale/ipp-strings.c:2270
+#: locale/ipp-strings.c:2308
 msgid "notify-events.document-stopped"
 msgstr ""
 
 #. TRANSLATORS: Job Completed
-#: locale/ipp-strings.c:2272
+#: locale/ipp-strings.c:2310
 msgid "notify-events.job-completed"
 msgstr ""
 
 #. TRANSLATORS: Job Config Changed
-#: locale/ipp-strings.c:2274
+#: locale/ipp-strings.c:2312
 msgid "notify-events.job-config-changed"
 msgstr ""
 
 #. TRANSLATORS: Job Created
-#: locale/ipp-strings.c:2276
+#: locale/ipp-strings.c:2314
 msgid "notify-events.job-created"
 msgstr ""
 
 #. TRANSLATORS: Job Fetchable
-#: locale/ipp-strings.c:2278
+#: locale/ipp-strings.c:2316
 msgid "notify-events.job-fetchable"
 msgstr ""
 
 #. TRANSLATORS: Job Progress
-#: locale/ipp-strings.c:2280
+#: locale/ipp-strings.c:2318
 msgid "notify-events.job-progress"
 msgstr ""
 
 #. TRANSLATORS: Job State Changed
-#: locale/ipp-strings.c:2282
+#: locale/ipp-strings.c:2320
 msgid "notify-events.job-state-changed"
 msgstr ""
 
 #. TRANSLATORS: Job Stopped
-#: locale/ipp-strings.c:2284
+#: locale/ipp-strings.c:2322
 msgid "notify-events.job-stopped"
 msgstr ""
 
 #. TRANSLATORS: None
-#: locale/ipp-strings.c:2286
+#: locale/ipp-strings.c:2324
 msgid "notify-events.none"
 msgstr ""
 
 #. TRANSLATORS: Printer Config Changed
-#: locale/ipp-strings.c:2288
+#: locale/ipp-strings.c:2326
 msgid "notify-events.printer-config-changed"
 msgstr ""
 
 #. TRANSLATORS: Printer Finishings Changed
-#: locale/ipp-strings.c:2290
+#: locale/ipp-strings.c:2328
 msgid "notify-events.printer-finishings-changed"
 msgstr ""
 
 #. TRANSLATORS: Printer Media Changed
-#: locale/ipp-strings.c:2292
+#: locale/ipp-strings.c:2330
 msgid "notify-events.printer-media-changed"
 msgstr ""
 
 #. TRANSLATORS: Printer Queue Order Changed
-#: locale/ipp-strings.c:2294
+#: locale/ipp-strings.c:2332
 msgid "notify-events.printer-queue-order-changed"
 msgstr ""
 
 #. TRANSLATORS: Printer Restarted
-#: locale/ipp-strings.c:2296
+#: locale/ipp-strings.c:2334
 msgid "notify-events.printer-restarted"
 msgstr ""
 
 #. TRANSLATORS: Printer Shutdown
-#: locale/ipp-strings.c:2298
+#: locale/ipp-strings.c:2336
 msgid "notify-events.printer-shutdown"
 msgstr ""
 
 #. TRANSLATORS: Printer State Changed
-#: locale/ipp-strings.c:2300
+#: locale/ipp-strings.c:2338
 msgid "notify-events.printer-state-changed"
 msgstr ""
 
 #. TRANSLATORS: Printer Stopped
-#: locale/ipp-strings.c:2302
+#: locale/ipp-strings.c:2340
 msgid "notify-events.printer-stopped"
 msgstr ""
 
 #. TRANSLATORS: Notify Get Interval
-#: locale/ipp-strings.c:2304
+#: locale/ipp-strings.c:2342
 msgid "notify-get-interval"
 msgstr ""
 
 #. TRANSLATORS: Notify Lease Duration
-#: locale/ipp-strings.c:2306
+#: locale/ipp-strings.c:2344
 msgid "notify-lease-duration"
 msgstr ""
 
 #. TRANSLATORS: Notify Natural Language
-#: locale/ipp-strings.c:2308
+#: locale/ipp-strings.c:2346
 msgid "notify-natural-language"
 msgstr ""
 
 #. TRANSLATORS: Notify Pull Method
-#: locale/ipp-strings.c:2310
+#: locale/ipp-strings.c:2348
 msgid "notify-pull-method"
 msgstr ""
 
 #. TRANSLATORS: Notify Recipient
-#: locale/ipp-strings.c:2312
+#: locale/ipp-strings.c:2350
 msgid "notify-recipient-uri"
 msgstr ""
 
@@ -13063,397 +13182,397 @@ msgid "notify-recipient-uri URI \"%s\" uses unknown scheme."
 msgstr ""
 
 #. TRANSLATORS: Notify Sequence Numbers
-#: locale/ipp-strings.c:2314
+#: locale/ipp-strings.c:2352
 msgid "notify-sequence-numbers"
 msgstr ""
 
 #. TRANSLATORS: Notify Subscription Ids
-#: locale/ipp-strings.c:2316
+#: locale/ipp-strings.c:2354
 msgid "notify-subscription-ids"
 msgstr ""
 
 #. TRANSLATORS: Notify Time Interval
-#: locale/ipp-strings.c:2318
+#: locale/ipp-strings.c:2356
 msgid "notify-time-interval"
 msgstr ""
 
 #. TRANSLATORS: Notify User Data
-#: locale/ipp-strings.c:2320
+#: locale/ipp-strings.c:2358
 msgid "notify-user-data"
 msgstr ""
 
 #. TRANSLATORS: Notify Wait
-#: locale/ipp-strings.c:2322
+#: locale/ipp-strings.c:2360
 msgid "notify-wait"
 msgstr ""
 
 #. TRANSLATORS: Number Of Retries
-#: locale/ipp-strings.c:2324
+#: locale/ipp-strings.c:2362
 msgid "number-of-retries"
 msgstr ""
 
 #. TRANSLATORS: Number-Up
-#: locale/ipp-strings.c:2326
+#: locale/ipp-strings.c:2364
 msgid "number-up"
 msgstr ""
 
 #. TRANSLATORS: Object Offset
-#: locale/ipp-strings.c:2328
+#: locale/ipp-strings.c:2366
 msgid "object-offset"
 msgstr ""
 
 #. TRANSLATORS: Object Size
-#: locale/ipp-strings.c:2330
+#: locale/ipp-strings.c:2368
 msgid "object-size"
 msgstr ""
 
 #. TRANSLATORS: Organization Name
-#: locale/ipp-strings.c:2332
+#: locale/ipp-strings.c:2370
 msgid "organization-name"
 msgstr ""
 
 #. TRANSLATORS: Orientation
-#: locale/ipp-strings.c:2334
+#: locale/ipp-strings.c:2372
 msgid "orientation-requested"
 msgstr ""
 
 #. TRANSLATORS: Portrait
-#: locale/ipp-strings.c:2336
+#: locale/ipp-strings.c:2374
 msgid "orientation-requested.3"
 msgstr ""
 
 #. TRANSLATORS: Landscape
-#: locale/ipp-strings.c:2338
+#: locale/ipp-strings.c:2376
 msgid "orientation-requested.4"
 msgstr ""
 
 #. TRANSLATORS: Reverse Landscape
-#: locale/ipp-strings.c:2340
+#: locale/ipp-strings.c:2378
 msgid "orientation-requested.5"
 msgstr ""
 
 #. TRANSLATORS: Reverse Portrait
-#: locale/ipp-strings.c:2342
+#: locale/ipp-strings.c:2380
 msgid "orientation-requested.6"
 msgstr ""
 
 #. TRANSLATORS: None
-#: locale/ipp-strings.c:2344
+#: locale/ipp-strings.c:2382
 msgid "orientation-requested.7"
 msgstr ""
 
 #. TRANSLATORS: Scanned Image Options
-#: locale/ipp-strings.c:2346
+#: locale/ipp-strings.c:2384
 msgid "output-attributes"
 msgstr ""
 
 #. TRANSLATORS: Output Tray
-#: locale/ipp-strings.c:2348
+#: locale/ipp-strings.c:2386
 msgid "output-bin"
 msgstr ""
 
 #. TRANSLATORS: Automatic
-#: locale/ipp-strings.c:2350
+#: locale/ipp-strings.c:2388
 msgid "output-bin.auto"
 msgstr ""
 
 #. TRANSLATORS: Bottom
-#: locale/ipp-strings.c:2352
+#: locale/ipp-strings.c:2390
 msgid "output-bin.bottom"
 msgstr ""
 
 #. TRANSLATORS: Center
-#: locale/ipp-strings.c:2354
+#: locale/ipp-strings.c:2392
 msgid "output-bin.center"
 msgstr ""
 
 #. TRANSLATORS: Face Down
-#: locale/ipp-strings.c:2356
+#: locale/ipp-strings.c:2394
 msgid "output-bin.face-down"
 msgstr ""
 
 #. TRANSLATORS: Face Up
-#: locale/ipp-strings.c:2358
+#: locale/ipp-strings.c:2396
 msgid "output-bin.face-up"
 msgstr ""
 
 #. TRANSLATORS: Large Capacity
-#: locale/ipp-strings.c:2360
+#: locale/ipp-strings.c:2398
 msgid "output-bin.large-capacity"
 msgstr ""
 
 #. TRANSLATORS: Left
-#: locale/ipp-strings.c:2362
+#: locale/ipp-strings.c:2400
 msgid "output-bin.left"
 msgstr ""
 
 #. TRANSLATORS: Mailbox 1
-#: locale/ipp-strings.c:2364
+#: locale/ipp-strings.c:2402
 msgid "output-bin.mailbox-1"
 msgstr ""
 
 #. TRANSLATORS: Mailbox 10
-#: locale/ipp-strings.c:2366
+#: locale/ipp-strings.c:2404
 msgid "output-bin.mailbox-10"
 msgstr ""
 
 #. TRANSLATORS: Mailbox 2
-#: locale/ipp-strings.c:2368
+#: locale/ipp-strings.c:2406
 msgid "output-bin.mailbox-2"
 msgstr ""
 
 #. TRANSLATORS: Mailbox 3
-#: locale/ipp-strings.c:2370
+#: locale/ipp-strings.c:2408
 msgid "output-bin.mailbox-3"
 msgstr ""
 
 #. TRANSLATORS: Mailbox 4
-#: locale/ipp-strings.c:2372
+#: locale/ipp-strings.c:2410
 msgid "output-bin.mailbox-4"
 msgstr ""
 
 #. TRANSLATORS: Mailbox 5
-#: locale/ipp-strings.c:2374
+#: locale/ipp-strings.c:2412
 msgid "output-bin.mailbox-5"
 msgstr ""
 
 #. TRANSLATORS: Mailbox 6
-#: locale/ipp-strings.c:2376
+#: locale/ipp-strings.c:2414
 msgid "output-bin.mailbox-6"
 msgstr ""
 
 #. TRANSLATORS: Mailbox 7
-#: locale/ipp-strings.c:2378
+#: locale/ipp-strings.c:2416
 msgid "output-bin.mailbox-7"
 msgstr ""
 
 #. TRANSLATORS: Mailbox 8
-#: locale/ipp-strings.c:2380
+#: locale/ipp-strings.c:2418
 msgid "output-bin.mailbox-8"
 msgstr ""
 
 #. TRANSLATORS: Mailbox 9
-#: locale/ipp-strings.c:2382
+#: locale/ipp-strings.c:2420
 msgid "output-bin.mailbox-9"
 msgstr ""
 
 #. TRANSLATORS: Middle
-#: locale/ipp-strings.c:2384
+#: locale/ipp-strings.c:2422
 msgid "output-bin.middle"
 msgstr ""
 
 #. TRANSLATORS: My Mailbox
-#: locale/ipp-strings.c:2386
+#: locale/ipp-strings.c:2424
 msgid "output-bin.my-mailbox"
 msgstr ""
 
 #. TRANSLATORS: Rear
-#: locale/ipp-strings.c:2388
+#: locale/ipp-strings.c:2426
 msgid "output-bin.rear"
 msgstr ""
 
 #. TRANSLATORS: Right
-#: locale/ipp-strings.c:2390
+#: locale/ipp-strings.c:2428
 msgid "output-bin.right"
 msgstr ""
 
 #. TRANSLATORS: Side
-#: locale/ipp-strings.c:2392
+#: locale/ipp-strings.c:2430
 msgid "output-bin.side"
 msgstr ""
 
 #. TRANSLATORS: Stacker 1
-#: locale/ipp-strings.c:2394
+#: locale/ipp-strings.c:2432
 msgid "output-bin.stacker-1"
 msgstr ""
 
 #. TRANSLATORS: Stacker 10
-#: locale/ipp-strings.c:2396
+#: locale/ipp-strings.c:2434
 msgid "output-bin.stacker-10"
 msgstr ""
 
 #. TRANSLATORS: Stacker 2
-#: locale/ipp-strings.c:2398
+#: locale/ipp-strings.c:2436
 msgid "output-bin.stacker-2"
 msgstr ""
 
 #. TRANSLATORS: Stacker 3
-#: locale/ipp-strings.c:2400
+#: locale/ipp-strings.c:2438
 msgid "output-bin.stacker-3"
 msgstr ""
 
 #. TRANSLATORS: Stacker 4
-#: locale/ipp-strings.c:2402
+#: locale/ipp-strings.c:2440
 msgid "output-bin.stacker-4"
 msgstr ""
 
 #. TRANSLATORS: Stacker 5
-#: locale/ipp-strings.c:2404
+#: locale/ipp-strings.c:2442
 msgid "output-bin.stacker-5"
 msgstr ""
 
 #. TRANSLATORS: Stacker 6
-#: locale/ipp-strings.c:2406
+#: locale/ipp-strings.c:2444
 msgid "output-bin.stacker-6"
 msgstr ""
 
 #. TRANSLATORS: Stacker 7
-#: locale/ipp-strings.c:2408
+#: locale/ipp-strings.c:2446
 msgid "output-bin.stacker-7"
 msgstr ""
 
 #. TRANSLATORS: Stacker 8
-#: locale/ipp-strings.c:2410
+#: locale/ipp-strings.c:2448
 msgid "output-bin.stacker-8"
 msgstr ""
 
 #. TRANSLATORS: Stacker 9
-#: locale/ipp-strings.c:2412
+#: locale/ipp-strings.c:2450
 msgid "output-bin.stacker-9"
 msgstr ""
 
 #. TRANSLATORS: Top
-#: locale/ipp-strings.c:2414
+#: locale/ipp-strings.c:2452
 msgid "output-bin.top"
 msgstr ""
 
 #. TRANSLATORS: Tray 1
-#: locale/ipp-strings.c:2416
+#: locale/ipp-strings.c:2454
 msgid "output-bin.tray-1"
 msgstr ""
 
 #. TRANSLATORS: Tray 10
-#: locale/ipp-strings.c:2418
+#: locale/ipp-strings.c:2456
 msgid "output-bin.tray-10"
 msgstr ""
 
 #. TRANSLATORS: Tray 2
-#: locale/ipp-strings.c:2420
+#: locale/ipp-strings.c:2458
 msgid "output-bin.tray-2"
 msgstr ""
 
 #. TRANSLATORS: Tray 3
-#: locale/ipp-strings.c:2422
+#: locale/ipp-strings.c:2460
 msgid "output-bin.tray-3"
 msgstr ""
 
 #. TRANSLATORS: Tray 4
-#: locale/ipp-strings.c:2424
+#: locale/ipp-strings.c:2462
 msgid "output-bin.tray-4"
 msgstr ""
 
 #. TRANSLATORS: Tray 5
-#: locale/ipp-strings.c:2426
+#: locale/ipp-strings.c:2464
 msgid "output-bin.tray-5"
 msgstr ""
 
 #. TRANSLATORS: Tray 6
-#: locale/ipp-strings.c:2428
+#: locale/ipp-strings.c:2466
 msgid "output-bin.tray-6"
 msgstr ""
 
 #. TRANSLATORS: Tray 7
-#: locale/ipp-strings.c:2430
+#: locale/ipp-strings.c:2468
 msgid "output-bin.tray-7"
 msgstr ""
 
 #. TRANSLATORS: Tray 8
-#: locale/ipp-strings.c:2432
+#: locale/ipp-strings.c:2470
 msgid "output-bin.tray-8"
 msgstr ""
 
 #. TRANSLATORS: Tray 9
-#: locale/ipp-strings.c:2434
+#: locale/ipp-strings.c:2472
 msgid "output-bin.tray-9"
 msgstr ""
 
 #. TRANSLATORS: Scanned Image Quality
-#: locale/ipp-strings.c:2436
+#: locale/ipp-strings.c:2474
 msgid "output-compression-quality-factor"
 msgstr ""
 
 #. TRANSLATORS: Page Delivery
-#: locale/ipp-strings.c:2438
+#: locale/ipp-strings.c:2476
 msgid "page-delivery"
 msgstr ""
 
 #. TRANSLATORS: Reverse Order Face-down
-#: locale/ipp-strings.c:2440
+#: locale/ipp-strings.c:2478
 msgid "page-delivery.reverse-order-face-down"
 msgstr ""
 
 #. TRANSLATORS: Reverse Order Face-up
-#: locale/ipp-strings.c:2442
+#: locale/ipp-strings.c:2480
 msgid "page-delivery.reverse-order-face-up"
 msgstr ""
 
 #. TRANSLATORS: Same Order Face-down
-#: locale/ipp-strings.c:2444
+#: locale/ipp-strings.c:2482
 msgid "page-delivery.same-order-face-down"
 msgstr ""
 
 #. TRANSLATORS: Same Order Face-up
-#: locale/ipp-strings.c:2446
+#: locale/ipp-strings.c:2484
 msgid "page-delivery.same-order-face-up"
 msgstr ""
 
 #. TRANSLATORS: System Specified
-#: locale/ipp-strings.c:2448
+#: locale/ipp-strings.c:2486
 msgid "page-delivery.system-specified"
 msgstr ""
 
 #. TRANSLATORS: Page Order Received
-#: locale/ipp-strings.c:2450
+#: locale/ipp-strings.c:2488
 msgid "page-order-received"
 msgstr ""
 
 #. TRANSLATORS: 1 To N
-#: locale/ipp-strings.c:2452
+#: locale/ipp-strings.c:2490
 msgid "page-order-received.1-to-n-order"
 msgstr ""
 
 #. TRANSLATORS: N To 1
-#: locale/ipp-strings.c:2454
+#: locale/ipp-strings.c:2492
 msgid "page-order-received.n-to-1-order"
 msgstr ""
 
 #. TRANSLATORS: Page Ranges
-#: locale/ipp-strings.c:2456
+#: locale/ipp-strings.c:2494
 msgid "page-ranges"
 msgstr ""
 
 #. TRANSLATORS: Pages
-#: locale/ipp-strings.c:2458
+#: locale/ipp-strings.c:2496
 msgid "pages"
 msgstr ""
 
 #. TRANSLATORS: Pages Per Subset
-#: locale/ipp-strings.c:2460
+#: locale/ipp-strings.c:2498
 msgid "pages-per-subset"
 msgstr ""
 
 #. TRANSLATORS: Pclm Raster Back Side
-#: locale/ipp-strings.c:2462
+#: locale/ipp-strings.c:2500
 msgid "pclm-raster-back-side"
 msgstr ""
 
 #. TRANSLATORS: Flipped
-#: locale/ipp-strings.c:2464
+#: locale/ipp-strings.c:2502
 msgid "pclm-raster-back-side.flipped"
 msgstr ""
 
 #. TRANSLATORS: Normal
-#: locale/ipp-strings.c:2466
+#: locale/ipp-strings.c:2504
 msgid "pclm-raster-back-side.normal"
 msgstr ""
 
 #. TRANSLATORS: Rotated
-#: locale/ipp-strings.c:2468
+#: locale/ipp-strings.c:2506
 msgid "pclm-raster-back-side.rotated"
 msgstr ""
 
 #. TRANSLATORS: Pclm Source Resolution
-#: locale/ipp-strings.c:2470
+#: locale/ipp-strings.c:2508
 msgid "pclm-source-resolution"
 msgstr ""
 
@@ -13462,27 +13581,27 @@ msgid "pending"
 msgstr ""
 
 #. TRANSLATORS: Platform Shape
-#: locale/ipp-strings.c:2472
+#: locale/ipp-strings.c:2510
 msgid "platform-shape"
 msgstr ""
 
 #. TRANSLATORS: Round
-#: locale/ipp-strings.c:2474
+#: locale/ipp-strings.c:2512
 msgid "platform-shape.ellipse"
 msgstr ""
 
 #. TRANSLATORS: Rectangle
-#: locale/ipp-strings.c:2476
+#: locale/ipp-strings.c:2514
 msgid "platform-shape.rectangle"
 msgstr ""
 
 #. TRANSLATORS: Platform Temperature
-#: locale/ipp-strings.c:2478
+#: locale/ipp-strings.c:2516
 msgid "platform-temperature"
 msgstr ""
 
 #. TRANSLATORS: Post-dial String
-#: locale/ipp-strings.c:2480
+#: locale/ipp-strings.c:2518
 msgid "post-dial-string"
 msgstr ""
 
@@ -13960,297 +14079,297 @@ msgid "ppdmerge: Unable to backup %s to %s - %s"
 msgstr ""
 
 #. TRANSLATORS: Pre-dial String
-#: locale/ipp-strings.c:2482
+#: locale/ipp-strings.c:2520
 msgid "pre-dial-string"
 msgstr ""
 
 #. TRANSLATORS: Number-Up Layout
-#: locale/ipp-strings.c:2484
+#: locale/ipp-strings.c:2522
 msgid "presentation-direction-number-up"
 msgstr ""
 
 #. TRANSLATORS: Top-bottom, Right-left
-#: locale/ipp-strings.c:2486
+#: locale/ipp-strings.c:2524
 msgid "presentation-direction-number-up.tobottom-toleft"
 msgstr ""
 
 #. TRANSLATORS: Top-bottom, Left-right
-#: locale/ipp-strings.c:2488
+#: locale/ipp-strings.c:2526
 msgid "presentation-direction-number-up.tobottom-toright"
 msgstr ""
 
 #. TRANSLATORS: Right-left, Top-bottom
-#: locale/ipp-strings.c:2490
+#: locale/ipp-strings.c:2528
 msgid "presentation-direction-number-up.toleft-tobottom"
 msgstr ""
 
 #. TRANSLATORS: Right-left, Bottom-top
-#: locale/ipp-strings.c:2492
+#: locale/ipp-strings.c:2530
 msgid "presentation-direction-number-up.toleft-totop"
 msgstr ""
 
 #. TRANSLATORS: Left-right, Top-bottom
-#: locale/ipp-strings.c:2494
+#: locale/ipp-strings.c:2532
 msgid "presentation-direction-number-up.toright-tobottom"
 msgstr ""
 
 #. TRANSLATORS: Left-right, Bottom-top
-#: locale/ipp-strings.c:2496
+#: locale/ipp-strings.c:2534
 msgid "presentation-direction-number-up.toright-totop"
 msgstr ""
 
 #. TRANSLATORS: Bottom-top, Right-left
-#: locale/ipp-strings.c:2498
+#: locale/ipp-strings.c:2536
 msgid "presentation-direction-number-up.totop-toleft"
 msgstr ""
 
 #. TRANSLATORS: Bottom-top, Left-right
-#: locale/ipp-strings.c:2500
+#: locale/ipp-strings.c:2538
 msgid "presentation-direction-number-up.totop-toright"
 msgstr ""
 
 #. TRANSLATORS: Print Accuracy
-#: locale/ipp-strings.c:2502
+#: locale/ipp-strings.c:2540
 msgid "print-accuracy"
 msgstr ""
 
 #. TRANSLATORS: Print Base
-#: locale/ipp-strings.c:2504
+#: locale/ipp-strings.c:2542
 msgid "print-base"
 msgstr ""
 
 #. TRANSLATORS: Print Base Actual
-#: locale/ipp-strings.c:2506
+#: locale/ipp-strings.c:2544
 msgid "print-base-actual"
 msgstr ""
 
 #. TRANSLATORS: Brim
-#: locale/ipp-strings.c:2508
+#: locale/ipp-strings.c:2546
 msgid "print-base.brim"
 msgstr ""
 
 #. TRANSLATORS: None
-#: locale/ipp-strings.c:2510
+#: locale/ipp-strings.c:2548
 msgid "print-base.none"
 msgstr ""
 
 #. TRANSLATORS: Raft
-#: locale/ipp-strings.c:2512
+#: locale/ipp-strings.c:2550
 msgid "print-base.raft"
 msgstr ""
 
 #. TRANSLATORS: Skirt
-#: locale/ipp-strings.c:2514
+#: locale/ipp-strings.c:2552
 msgid "print-base.skirt"
 msgstr ""
 
 #. TRANSLATORS: Standard
-#: locale/ipp-strings.c:2516
+#: locale/ipp-strings.c:2554
 msgid "print-base.standard"
 msgstr ""
 
 #. TRANSLATORS: Print Color Mode
-#: locale/ipp-strings.c:2518
+#: locale/ipp-strings.c:2556
 msgid "print-color-mode"
 msgstr ""
 
 #. TRANSLATORS: Automatic
-#: locale/ipp-strings.c:2520
+#: locale/ipp-strings.c:2558
 msgid "print-color-mode.auto"
 msgstr ""
 
 #. TRANSLATORS: Auto Monochrome
-#: locale/ipp-strings.c:2522
+#: locale/ipp-strings.c:2560
 msgid "print-color-mode.auto-monochrome"
 msgstr ""
 
 #. TRANSLATORS: Text
-#: locale/ipp-strings.c:2524
+#: locale/ipp-strings.c:2562
 msgid "print-color-mode.bi-level"
 msgstr ""
 
 #. TRANSLATORS: Color
-#: locale/ipp-strings.c:2526
+#: locale/ipp-strings.c:2564
 msgid "print-color-mode.color"
 msgstr ""
 
 #. TRANSLATORS: Highlight
-#: locale/ipp-strings.c:2528
+#: locale/ipp-strings.c:2566
 msgid "print-color-mode.highlight"
 msgstr ""
 
 #. TRANSLATORS: Monochrome
-#: locale/ipp-strings.c:2530
+#: locale/ipp-strings.c:2568
 msgid "print-color-mode.monochrome"
 msgstr ""
 
 #. TRANSLATORS: Process Text
-#: locale/ipp-strings.c:2532
+#: locale/ipp-strings.c:2570
 msgid "print-color-mode.process-bi-level"
 msgstr ""
 
 #. TRANSLATORS: Process Monochrome
-#: locale/ipp-strings.c:2534
+#: locale/ipp-strings.c:2572
 msgid "print-color-mode.process-monochrome"
 msgstr ""
 
 #. TRANSLATORS: Print Optimization
-#: locale/ipp-strings.c:2536
+#: locale/ipp-strings.c:2574
 msgid "print-content-optimize"
 msgstr ""
 
 #. TRANSLATORS: Print Content Optimize Actual
-#: locale/ipp-strings.c:2538
+#: locale/ipp-strings.c:2576
 msgid "print-content-optimize-actual"
 msgstr ""
 
 #. TRANSLATORS: Automatic
-#: locale/ipp-strings.c:2540
+#: locale/ipp-strings.c:2578
 msgid "print-content-optimize.auto"
 msgstr ""
 
 #. TRANSLATORS: Graphics
-#: locale/ipp-strings.c:2542
+#: locale/ipp-strings.c:2580
 msgid "print-content-optimize.graphic"
 msgstr ""
 
 #. TRANSLATORS: Graphics
-#: locale/ipp-strings.c:2544
+#: locale/ipp-strings.c:2582
 msgid "print-content-optimize.graphics"
 msgstr ""
 
 #. TRANSLATORS: Photo
-#: locale/ipp-strings.c:2546
+#: locale/ipp-strings.c:2584
 msgid "print-content-optimize.photo"
 msgstr ""
 
 #. TRANSLATORS: Text
-#: locale/ipp-strings.c:2548
+#: locale/ipp-strings.c:2586
 msgid "print-content-optimize.text"
 msgstr ""
 
 #. TRANSLATORS: Text and Graphics
-#: locale/ipp-strings.c:2550
+#: locale/ipp-strings.c:2588
 msgid "print-content-optimize.text-and-graphic"
 msgstr ""
 
 #. TRANSLATORS: Text And Graphics
-#: locale/ipp-strings.c:2552
+#: locale/ipp-strings.c:2590
 msgid "print-content-optimize.text-and-graphics"
 msgstr ""
 
 #. TRANSLATORS: Print Objects
-#: locale/ipp-strings.c:2554
+#: locale/ipp-strings.c:2592
 msgid "print-objects"
 msgstr ""
 
 #. TRANSLATORS: Print Quality
-#: locale/ipp-strings.c:2556
+#: locale/ipp-strings.c:2594
 msgid "print-quality"
 msgstr ""
 
 #. TRANSLATORS: Draft
-#: locale/ipp-strings.c:2558
+#: locale/ipp-strings.c:2596
 msgid "print-quality.3"
 msgstr ""
 
 #. TRANSLATORS: Normal
-#: locale/ipp-strings.c:2560
+#: locale/ipp-strings.c:2598
 msgid "print-quality.4"
 msgstr ""
 
 #. TRANSLATORS: High
-#: locale/ipp-strings.c:2562
+#: locale/ipp-strings.c:2600
 msgid "print-quality.5"
 msgstr ""
 
 #. TRANSLATORS: Print Rendering Intent
-#: locale/ipp-strings.c:2564
+#: locale/ipp-strings.c:2602
 msgid "print-rendering-intent"
 msgstr ""
 
 #. TRANSLATORS: Absolute
-#: locale/ipp-strings.c:2566
+#: locale/ipp-strings.c:2604
 msgid "print-rendering-intent.absolute"
 msgstr ""
 
 #. TRANSLATORS: Automatic
-#: locale/ipp-strings.c:2568
+#: locale/ipp-strings.c:2606
 msgid "print-rendering-intent.auto"
 msgstr ""
 
 #. TRANSLATORS: Perceptual
-#: locale/ipp-strings.c:2570
+#: locale/ipp-strings.c:2608
 msgid "print-rendering-intent.perceptual"
 msgstr ""
 
 #. TRANSLATORS: Relative
-#: locale/ipp-strings.c:2572
+#: locale/ipp-strings.c:2610
 msgid "print-rendering-intent.relative"
 msgstr ""
 
 #. TRANSLATORS: Relative w/Black Point Compensation
-#: locale/ipp-strings.c:2574
+#: locale/ipp-strings.c:2612
 msgid "print-rendering-intent.relative-bpc"
 msgstr ""
 
 #. TRANSLATORS: Saturation
-#: locale/ipp-strings.c:2576
+#: locale/ipp-strings.c:2614
 msgid "print-rendering-intent.saturation"
 msgstr ""
 
 #. TRANSLATORS: Print Scaling
-#: locale/ipp-strings.c:2578
+#: locale/ipp-strings.c:2616
 msgid "print-scaling"
 msgstr ""
 
 #. TRANSLATORS: Automatic
-#: locale/ipp-strings.c:2580
+#: locale/ipp-strings.c:2618
 msgid "print-scaling.auto"
 msgstr ""
 
 #. TRANSLATORS: Auto-fit
-#: locale/ipp-strings.c:2582
+#: locale/ipp-strings.c:2620
 msgid "print-scaling.auto-fit"
 msgstr ""
 
 #. TRANSLATORS: Fill
-#: locale/ipp-strings.c:2584
+#: locale/ipp-strings.c:2622
 msgid "print-scaling.fill"
 msgstr ""
 
 #. TRANSLATORS: Fit
-#: locale/ipp-strings.c:2586
+#: locale/ipp-strings.c:2624
 msgid "print-scaling.fit"
 msgstr ""
 
 #. TRANSLATORS: None
-#: locale/ipp-strings.c:2588
+#: locale/ipp-strings.c:2626
 msgid "print-scaling.none"
 msgstr ""
 
 #. TRANSLATORS: Print Supports
-#: locale/ipp-strings.c:2590
+#: locale/ipp-strings.c:2628
 msgid "print-supports"
 msgstr ""
 
 #. TRANSLATORS: Print Supports Actual
-#: locale/ipp-strings.c:2592
+#: locale/ipp-strings.c:2630
 msgid "print-supports-actual"
 msgstr ""
 
 #. TRANSLATORS: With Specified Material
-#: locale/ipp-strings.c:2594
+#: locale/ipp-strings.c:2632
 msgid "print-supports.material"
 msgstr ""
 
 #. TRANSLATORS: None
-#: locale/ipp-strings.c:2596
+#: locale/ipp-strings.c:2634
 msgid "print-supports.none"
 msgstr ""
 
 #. TRANSLATORS: Standard
-#: locale/ipp-strings.c:2598
+#: locale/ipp-strings.c:2636
 msgid "print-supports.standard"
 msgstr ""
 
@@ -14290,4067 +14409,4067 @@ msgid "printer %s/%s now printing %s-%d.  enabled since %s"
 msgstr ""
 
 #. TRANSLATORS: Printer Kind
-#: locale/ipp-strings.c:2600
+#: locale/ipp-strings.c:2638
 msgid "printer-kind"
 msgstr ""
 
 #. TRANSLATORS: Disc
-#: locale/ipp-strings.c:2602
+#: locale/ipp-strings.c:2640
 msgid "printer-kind.disc"
 msgstr ""
 
 #. TRANSLATORS: Document
-#: locale/ipp-strings.c:2604
+#: locale/ipp-strings.c:2642
 msgid "printer-kind.document"
 msgstr ""
 
 #. TRANSLATORS: Envelope
-#: locale/ipp-strings.c:2606
+#: locale/ipp-strings.c:2644
 msgid "printer-kind.envelope"
 msgstr ""
 
 #. TRANSLATORS: Label
-#: locale/ipp-strings.c:2608
+#: locale/ipp-strings.c:2646
 msgid "printer-kind.label"
 msgstr ""
 
 #. TRANSLATORS: Large Format
-#: locale/ipp-strings.c:2610
+#: locale/ipp-strings.c:2648
 msgid "printer-kind.large-format"
 msgstr ""
 
 #. TRANSLATORS: Photo
-#: locale/ipp-strings.c:2612
+#: locale/ipp-strings.c:2650
 msgid "printer-kind.photo"
 msgstr ""
 
 #. TRANSLATORS: Postcard
-#: locale/ipp-strings.c:2614
+#: locale/ipp-strings.c:2652
 msgid "printer-kind.postcard"
 msgstr ""
 
 #. TRANSLATORS: Receipt
-#: locale/ipp-strings.c:2616
+#: locale/ipp-strings.c:2654
 msgid "printer-kind.receipt"
 msgstr ""
 
 #. TRANSLATORS: Roll
-#: locale/ipp-strings.c:2618
+#: locale/ipp-strings.c:2656
 msgid "printer-kind.roll"
 msgstr ""
 
 #. TRANSLATORS: Message From Operator
-#: locale/ipp-strings.c:2620
+#: locale/ipp-strings.c:2658
 msgid "printer-message-from-operator"
 msgstr ""
 
 #. TRANSLATORS: Print Resolution
-#: locale/ipp-strings.c:2622
+#: locale/ipp-strings.c:2660
 msgid "printer-resolution"
 msgstr ""
 
 #. TRANSLATORS: Printer State
-#: locale/ipp-strings.c:2624
+#: locale/ipp-strings.c:2662
 msgid "printer-state"
 msgstr ""
 
 #. TRANSLATORS: Detailed Printer State
-#: locale/ipp-strings.c:2626
+#: locale/ipp-strings.c:2664
 msgid "printer-state-reasons"
 msgstr ""
 
 #. TRANSLATORS: Old Alerts Have Been Removed
-#: locale/ipp-strings.c:2628
+#: locale/ipp-strings.c:2666
 msgid "printer-state-reasons.alert-removal-of-binary-change-entry"
 msgstr ""
 
 #. TRANSLATORS: Bander Added
-#: locale/ipp-strings.c:2630
+#: locale/ipp-strings.c:2668
 msgid "printer-state-reasons.bander-added"
 msgstr ""
 
 #. TRANSLATORS: Bander Almost Empty
-#: locale/ipp-strings.c:2632
+#: locale/ipp-strings.c:2670
 msgid "printer-state-reasons.bander-almost-empty"
 msgstr ""
 
 #. TRANSLATORS: Bander Almost Full
-#: locale/ipp-strings.c:2634
+#: locale/ipp-strings.c:2672
 msgid "printer-state-reasons.bander-almost-full"
 msgstr ""
 
 #. TRANSLATORS: Bander At Limit
-#: locale/ipp-strings.c:2636
+#: locale/ipp-strings.c:2674
 msgid "printer-state-reasons.bander-at-limit"
 msgstr ""
 
 #. TRANSLATORS: Bander Closed
-#: locale/ipp-strings.c:2638
+#: locale/ipp-strings.c:2676
 msgid "printer-state-reasons.bander-closed"
 msgstr ""
 
 #. TRANSLATORS: Bander Configuration Change
-#: locale/ipp-strings.c:2640
+#: locale/ipp-strings.c:2678
 msgid "printer-state-reasons.bander-configuration-change"
 msgstr ""
 
 #. TRANSLATORS: Bander Cover Closed
-#: locale/ipp-strings.c:2642
+#: locale/ipp-strings.c:2680
 msgid "printer-state-reasons.bander-cover-closed"
 msgstr ""
 
 #. TRANSLATORS: Bander Cover Open
-#: locale/ipp-strings.c:2644
+#: locale/ipp-strings.c:2682
 msgid "printer-state-reasons.bander-cover-open"
 msgstr ""
 
 #. TRANSLATORS: Bander Empty
-#: locale/ipp-strings.c:2646
+#: locale/ipp-strings.c:2684
 msgid "printer-state-reasons.bander-empty"
 msgstr ""
 
 #. TRANSLATORS: Bander Full
-#: locale/ipp-strings.c:2648
+#: locale/ipp-strings.c:2686
 msgid "printer-state-reasons.bander-full"
 msgstr ""
 
 #. TRANSLATORS: Bander Interlock Closed
-#: locale/ipp-strings.c:2650
+#: locale/ipp-strings.c:2688
 msgid "printer-state-reasons.bander-interlock-closed"
 msgstr ""
 
 #. TRANSLATORS: Bander Interlock Open
-#: locale/ipp-strings.c:2652
+#: locale/ipp-strings.c:2690
 msgid "printer-state-reasons.bander-interlock-open"
 msgstr ""
 
 #. TRANSLATORS: Bander Jam
-#: locale/ipp-strings.c:2654
+#: locale/ipp-strings.c:2692
 msgid "printer-state-reasons.bander-jam"
 msgstr ""
 
 #. TRANSLATORS: Bander Life Almost Over
-#: locale/ipp-strings.c:2656
+#: locale/ipp-strings.c:2694
 msgid "printer-state-reasons.bander-life-almost-over"
 msgstr ""
 
 #. TRANSLATORS: Bander Life Over
-#: locale/ipp-strings.c:2658
+#: locale/ipp-strings.c:2696
 msgid "printer-state-reasons.bander-life-over"
 msgstr ""
 
 #. TRANSLATORS: Bander Memory Exhausted
-#: locale/ipp-strings.c:2660
+#: locale/ipp-strings.c:2698
 msgid "printer-state-reasons.bander-memory-exhausted"
 msgstr ""
 
 #. TRANSLATORS: Bander Missing
-#: locale/ipp-strings.c:2662
+#: locale/ipp-strings.c:2700
 msgid "printer-state-reasons.bander-missing"
 msgstr ""
 
 #. TRANSLATORS: Bander Motor Failure
-#: locale/ipp-strings.c:2664
+#: locale/ipp-strings.c:2702
 msgid "printer-state-reasons.bander-motor-failure"
 msgstr ""
 
 #. TRANSLATORS: Bander Near Limit
-#: locale/ipp-strings.c:2666
+#: locale/ipp-strings.c:2704
 msgid "printer-state-reasons.bander-near-limit"
 msgstr ""
 
 #. TRANSLATORS: Bander Offline
-#: locale/ipp-strings.c:2668
+#: locale/ipp-strings.c:2706
 msgid "printer-state-reasons.bander-offline"
 msgstr ""
 
 #. TRANSLATORS: Bander Opened
-#: locale/ipp-strings.c:2670
+#: locale/ipp-strings.c:2708
 msgid "printer-state-reasons.bander-opened"
 msgstr ""
 
 #. TRANSLATORS: Bander Over Temperature
-#: locale/ipp-strings.c:2672
+#: locale/ipp-strings.c:2710
 msgid "printer-state-reasons.bander-over-temperature"
 msgstr ""
 
 #. TRANSLATORS: Bander Power Saver
-#: locale/ipp-strings.c:2674
+#: locale/ipp-strings.c:2712
 msgid "printer-state-reasons.bander-power-saver"
 msgstr ""
 
 #. TRANSLATORS: Bander Recoverable Failure
-#: locale/ipp-strings.c:2676
+#: locale/ipp-strings.c:2714
 msgid "printer-state-reasons.bander-recoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Bander Recoverable Storage
-#: locale/ipp-strings.c:2678
+#: locale/ipp-strings.c:2716
 msgid "printer-state-reasons.bander-recoverable-storage"
 msgstr ""
 
 #. TRANSLATORS: Bander Removed
-#: locale/ipp-strings.c:2680
+#: locale/ipp-strings.c:2718
 msgid "printer-state-reasons.bander-removed"
 msgstr ""
 
 #. TRANSLATORS: Bander Resource Added
-#: locale/ipp-strings.c:2682
+#: locale/ipp-strings.c:2720
 msgid "printer-state-reasons.bander-resource-added"
 msgstr ""
 
 #. TRANSLATORS: Bander Resource Removed
-#: locale/ipp-strings.c:2684
+#: locale/ipp-strings.c:2722
 msgid "printer-state-reasons.bander-resource-removed"
 msgstr ""
 
 #. TRANSLATORS: Bander Thermistor Failure
-#: locale/ipp-strings.c:2686
+#: locale/ipp-strings.c:2724
 msgid "printer-state-reasons.bander-thermistor-failure"
 msgstr ""
 
 #. TRANSLATORS: Bander Timing Failure
-#: locale/ipp-strings.c:2688
+#: locale/ipp-strings.c:2726
 msgid "printer-state-reasons.bander-timing-failure"
 msgstr ""
 
 #. TRANSLATORS: Bander Turned Off
-#: locale/ipp-strings.c:2690
+#: locale/ipp-strings.c:2728
 msgid "printer-state-reasons.bander-turned-off"
 msgstr ""
 
 #. TRANSLATORS: Bander Turned On
-#: locale/ipp-strings.c:2692
+#: locale/ipp-strings.c:2730
 msgid "printer-state-reasons.bander-turned-on"
 msgstr ""
 
 #. TRANSLATORS: Bander Under Temperature
-#: locale/ipp-strings.c:2694
+#: locale/ipp-strings.c:2732
 msgid "printer-state-reasons.bander-under-temperature"
 msgstr ""
 
 #. TRANSLATORS: Bander Unrecoverable Failure
-#: locale/ipp-strings.c:2696
+#: locale/ipp-strings.c:2734
 msgid "printer-state-reasons.bander-unrecoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Bander Unrecoverable Storage Error
-#: locale/ipp-strings.c:2698
+#: locale/ipp-strings.c:2736
 msgid "printer-state-reasons.bander-unrecoverable-storage-error"
 msgstr ""
 
 #. TRANSLATORS: Bander Warming Up
-#: locale/ipp-strings.c:2700
+#: locale/ipp-strings.c:2738
 msgid "printer-state-reasons.bander-warming-up"
 msgstr ""
 
 #. TRANSLATORS: Binder Added
-#: locale/ipp-strings.c:2702
+#: locale/ipp-strings.c:2740
 msgid "printer-state-reasons.binder-added"
 msgstr ""
 
 #. TRANSLATORS: Binder Almost Empty
-#: locale/ipp-strings.c:2704
+#: locale/ipp-strings.c:2742
 msgid "printer-state-reasons.binder-almost-empty"
 msgstr ""
 
 #. TRANSLATORS: Binder Almost Full
-#: locale/ipp-strings.c:2706
+#: locale/ipp-strings.c:2744
 msgid "printer-state-reasons.binder-almost-full"
 msgstr ""
 
 #. TRANSLATORS: Binder At Limit
-#: locale/ipp-strings.c:2708
+#: locale/ipp-strings.c:2746
 msgid "printer-state-reasons.binder-at-limit"
 msgstr ""
 
 #. TRANSLATORS: Binder Closed
-#: locale/ipp-strings.c:2710
+#: locale/ipp-strings.c:2748
 msgid "printer-state-reasons.binder-closed"
 msgstr ""
 
 #. TRANSLATORS: Binder Configuration Change
-#: locale/ipp-strings.c:2712
+#: locale/ipp-strings.c:2750
 msgid "printer-state-reasons.binder-configuration-change"
 msgstr ""
 
 #. TRANSLATORS: Binder Cover Closed
-#: locale/ipp-strings.c:2714
+#: locale/ipp-strings.c:2752
 msgid "printer-state-reasons.binder-cover-closed"
 msgstr ""
 
 #. TRANSLATORS: Binder Cover Open
-#: locale/ipp-strings.c:2716
+#: locale/ipp-strings.c:2754
 msgid "printer-state-reasons.binder-cover-open"
 msgstr ""
 
 #. TRANSLATORS: Binder Empty
-#: locale/ipp-strings.c:2718
+#: locale/ipp-strings.c:2756
 msgid "printer-state-reasons.binder-empty"
 msgstr ""
 
 #. TRANSLATORS: Binder Full
-#: locale/ipp-strings.c:2720
+#: locale/ipp-strings.c:2758
 msgid "printer-state-reasons.binder-full"
 msgstr ""
 
 #. TRANSLATORS: Binder Interlock Closed
-#: locale/ipp-strings.c:2722
+#: locale/ipp-strings.c:2760
 msgid "printer-state-reasons.binder-interlock-closed"
 msgstr ""
 
 #. TRANSLATORS: Binder Interlock Open
-#: locale/ipp-strings.c:2724
+#: locale/ipp-strings.c:2762
 msgid "printer-state-reasons.binder-interlock-open"
 msgstr ""
 
 #. TRANSLATORS: Binder Jam
-#: locale/ipp-strings.c:2726
+#: locale/ipp-strings.c:2764
 msgid "printer-state-reasons.binder-jam"
 msgstr ""
 
 #. TRANSLATORS: Binder Life Almost Over
-#: locale/ipp-strings.c:2728
+#: locale/ipp-strings.c:2766
 msgid "printer-state-reasons.binder-life-almost-over"
 msgstr ""
 
 #. TRANSLATORS: Binder Life Over
-#: locale/ipp-strings.c:2730
+#: locale/ipp-strings.c:2768
 msgid "printer-state-reasons.binder-life-over"
 msgstr ""
 
 #. TRANSLATORS: Binder Memory Exhausted
-#: locale/ipp-strings.c:2732
+#: locale/ipp-strings.c:2770
 msgid "printer-state-reasons.binder-memory-exhausted"
 msgstr ""
 
 #. TRANSLATORS: Binder Missing
-#: locale/ipp-strings.c:2734
+#: locale/ipp-strings.c:2772
 msgid "printer-state-reasons.binder-missing"
 msgstr ""
 
 #. TRANSLATORS: Binder Motor Failure
-#: locale/ipp-strings.c:2736
+#: locale/ipp-strings.c:2774
 msgid "printer-state-reasons.binder-motor-failure"
 msgstr ""
 
 #. TRANSLATORS: Binder Near Limit
-#: locale/ipp-strings.c:2738
+#: locale/ipp-strings.c:2776
 msgid "printer-state-reasons.binder-near-limit"
 msgstr ""
 
 #. TRANSLATORS: Binder Offline
-#: locale/ipp-strings.c:2740
+#: locale/ipp-strings.c:2778
 msgid "printer-state-reasons.binder-offline"
 msgstr ""
 
 #. TRANSLATORS: Binder Opened
-#: locale/ipp-strings.c:2742
+#: locale/ipp-strings.c:2780
 msgid "printer-state-reasons.binder-opened"
 msgstr ""
 
 #. TRANSLATORS: Binder Over Temperature
-#: locale/ipp-strings.c:2744
+#: locale/ipp-strings.c:2782
 msgid "printer-state-reasons.binder-over-temperature"
 msgstr ""
 
 #. TRANSLATORS: Binder Power Saver
-#: locale/ipp-strings.c:2746
+#: locale/ipp-strings.c:2784
 msgid "printer-state-reasons.binder-power-saver"
 msgstr ""
 
 #. TRANSLATORS: Binder Recoverable Failure
-#: locale/ipp-strings.c:2748
+#: locale/ipp-strings.c:2786
 msgid "printer-state-reasons.binder-recoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Binder Recoverable Storage
-#: locale/ipp-strings.c:2750
+#: locale/ipp-strings.c:2788
 msgid "printer-state-reasons.binder-recoverable-storage"
 msgstr ""
 
 #. TRANSLATORS: Binder Removed
-#: locale/ipp-strings.c:2752
+#: locale/ipp-strings.c:2790
 msgid "printer-state-reasons.binder-removed"
 msgstr ""
 
 #. TRANSLATORS: Binder Resource Added
-#: locale/ipp-strings.c:2754
+#: locale/ipp-strings.c:2792
 msgid "printer-state-reasons.binder-resource-added"
 msgstr ""
 
 #. TRANSLATORS: Binder Resource Removed
-#: locale/ipp-strings.c:2756
+#: locale/ipp-strings.c:2794
 msgid "printer-state-reasons.binder-resource-removed"
 msgstr ""
 
 #. TRANSLATORS: Binder Thermistor Failure
-#: locale/ipp-strings.c:2758
+#: locale/ipp-strings.c:2796
 msgid "printer-state-reasons.binder-thermistor-failure"
 msgstr ""
 
 #. TRANSLATORS: Binder Timing Failure
-#: locale/ipp-strings.c:2760
+#: locale/ipp-strings.c:2798
 msgid "printer-state-reasons.binder-timing-failure"
 msgstr ""
 
 #. TRANSLATORS: Binder Turned Off
-#: locale/ipp-strings.c:2762
+#: locale/ipp-strings.c:2800
 msgid "printer-state-reasons.binder-turned-off"
 msgstr ""
 
 #. TRANSLATORS: Binder Turned On
-#: locale/ipp-strings.c:2764
+#: locale/ipp-strings.c:2802
 msgid "printer-state-reasons.binder-turned-on"
 msgstr ""
 
 #. TRANSLATORS: Binder Under Temperature
-#: locale/ipp-strings.c:2766
+#: locale/ipp-strings.c:2804
 msgid "printer-state-reasons.binder-under-temperature"
 msgstr ""
 
 #. TRANSLATORS: Binder Unrecoverable Failure
-#: locale/ipp-strings.c:2768
+#: locale/ipp-strings.c:2806
 msgid "printer-state-reasons.binder-unrecoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Binder Unrecoverable Storage Error
-#: locale/ipp-strings.c:2770
+#: locale/ipp-strings.c:2808
 msgid "printer-state-reasons.binder-unrecoverable-storage-error"
 msgstr ""
 
 #. TRANSLATORS: Binder Warming Up
-#: locale/ipp-strings.c:2772
+#: locale/ipp-strings.c:2810
 msgid "printer-state-reasons.binder-warming-up"
 msgstr ""
 
 #. TRANSLATORS: Camera Failure
-#: locale/ipp-strings.c:2774
+#: locale/ipp-strings.c:2812
 msgid "printer-state-reasons.camera-failure"
 msgstr ""
 
 #. TRANSLATORS: Chamber Cooling
-#: locale/ipp-strings.c:2776
+#: locale/ipp-strings.c:2814
 msgid "printer-state-reasons.chamber-cooling"
 msgstr ""
 
 #. TRANSLATORS: Chamber Failure
-#: locale/ipp-strings.c:2778
+#: locale/ipp-strings.c:2816
 msgid "printer-state-reasons.chamber-failure"
 msgstr ""
 
 #. TRANSLATORS: Chamber Heating
-#: locale/ipp-strings.c:2780
+#: locale/ipp-strings.c:2818
 msgid "printer-state-reasons.chamber-heating"
 msgstr ""
 
 #. TRANSLATORS: Chamber Temperature High
-#: locale/ipp-strings.c:2782
+#: locale/ipp-strings.c:2820
 msgid "printer-state-reasons.chamber-temperature-high"
 msgstr ""
 
 #. TRANSLATORS: Chamber Temperature Low
-#: locale/ipp-strings.c:2784
+#: locale/ipp-strings.c:2822
 msgid "printer-state-reasons.chamber-temperature-low"
 msgstr ""
 
 #. TRANSLATORS: Cleaner Life Almost Over
-#: locale/ipp-strings.c:2786
+#: locale/ipp-strings.c:2824
 msgid "printer-state-reasons.cleaner-life-almost-over"
 msgstr ""
 
 #. TRANSLATORS: Cleaner Life Over
-#: locale/ipp-strings.c:2788
+#: locale/ipp-strings.c:2826
 msgid "printer-state-reasons.cleaner-life-over"
 msgstr ""
 
 #. TRANSLATORS: Configuration Change
-#: locale/ipp-strings.c:2790
+#: locale/ipp-strings.c:2828
 msgid "printer-state-reasons.configuration-change"
 msgstr ""
 
 #. TRANSLATORS: Connecting To Device
-#: locale/ipp-strings.c:2792
+#: locale/ipp-strings.c:2830
 msgid "printer-state-reasons.connecting-to-device"
 msgstr ""
 
 #. TRANSLATORS: Cover Open
-#: locale/ipp-strings.c:2794
+#: locale/ipp-strings.c:2832
 msgid "printer-state-reasons.cover-open"
 msgstr ""
 
 #. TRANSLATORS: Deactivated
-#: locale/ipp-strings.c:2796
+#: locale/ipp-strings.c:2834
 msgid "printer-state-reasons.deactivated"
 msgstr ""
 
 #. TRANSLATORS: Developer Empty
-#: locale/ipp-strings.c:2798
+#: locale/ipp-strings.c:2836
 msgid "printer-state-reasons.developer-empty"
 msgstr ""
 
 #. TRANSLATORS: Developer Low
-#: locale/ipp-strings.c:2800
+#: locale/ipp-strings.c:2838
 msgid "printer-state-reasons.developer-low"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Added
-#: locale/ipp-strings.c:2802
+#: locale/ipp-strings.c:2840
 msgid "printer-state-reasons.die-cutter-added"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Almost Empty
-#: locale/ipp-strings.c:2804
+#: locale/ipp-strings.c:2842
 msgid "printer-state-reasons.die-cutter-almost-empty"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Almost Full
-#: locale/ipp-strings.c:2806
+#: locale/ipp-strings.c:2844
 msgid "printer-state-reasons.die-cutter-almost-full"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter At Limit
-#: locale/ipp-strings.c:2808
+#: locale/ipp-strings.c:2846
 msgid "printer-state-reasons.die-cutter-at-limit"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Closed
-#: locale/ipp-strings.c:2810
+#: locale/ipp-strings.c:2848
 msgid "printer-state-reasons.die-cutter-closed"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Configuration Change
-#: locale/ipp-strings.c:2812
+#: locale/ipp-strings.c:2850
 msgid "printer-state-reasons.die-cutter-configuration-change"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Cover Closed
-#: locale/ipp-strings.c:2814
+#: locale/ipp-strings.c:2852
 msgid "printer-state-reasons.die-cutter-cover-closed"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Cover Open
-#: locale/ipp-strings.c:2816
+#: locale/ipp-strings.c:2854
 msgid "printer-state-reasons.die-cutter-cover-open"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Empty
-#: locale/ipp-strings.c:2818
+#: locale/ipp-strings.c:2856
 msgid "printer-state-reasons.die-cutter-empty"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Full
-#: locale/ipp-strings.c:2820
+#: locale/ipp-strings.c:2858
 msgid "printer-state-reasons.die-cutter-full"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Interlock Closed
-#: locale/ipp-strings.c:2822
+#: locale/ipp-strings.c:2860
 msgid "printer-state-reasons.die-cutter-interlock-closed"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Interlock Open
-#: locale/ipp-strings.c:2824
+#: locale/ipp-strings.c:2862
 msgid "printer-state-reasons.die-cutter-interlock-open"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Jam
-#: locale/ipp-strings.c:2826
+#: locale/ipp-strings.c:2864
 msgid "printer-state-reasons.die-cutter-jam"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Life Almost Over
-#: locale/ipp-strings.c:2828
+#: locale/ipp-strings.c:2866
 msgid "printer-state-reasons.die-cutter-life-almost-over"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Life Over
-#: locale/ipp-strings.c:2830
+#: locale/ipp-strings.c:2868
 msgid "printer-state-reasons.die-cutter-life-over"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Memory Exhausted
-#: locale/ipp-strings.c:2832
+#: locale/ipp-strings.c:2870
 msgid "printer-state-reasons.die-cutter-memory-exhausted"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Missing
-#: locale/ipp-strings.c:2834
+#: locale/ipp-strings.c:2872
 msgid "printer-state-reasons.die-cutter-missing"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Motor Failure
-#: locale/ipp-strings.c:2836
+#: locale/ipp-strings.c:2874
 msgid "printer-state-reasons.die-cutter-motor-failure"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Near Limit
-#: locale/ipp-strings.c:2838
+#: locale/ipp-strings.c:2876
 msgid "printer-state-reasons.die-cutter-near-limit"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Offline
-#: locale/ipp-strings.c:2840
+#: locale/ipp-strings.c:2878
 msgid "printer-state-reasons.die-cutter-offline"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Opened
-#: locale/ipp-strings.c:2842
+#: locale/ipp-strings.c:2880
 msgid "printer-state-reasons.die-cutter-opened"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Over Temperature
-#: locale/ipp-strings.c:2844
+#: locale/ipp-strings.c:2882
 msgid "printer-state-reasons.die-cutter-over-temperature"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Power Saver
-#: locale/ipp-strings.c:2846
+#: locale/ipp-strings.c:2884
 msgid "printer-state-reasons.die-cutter-power-saver"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Recoverable Failure
-#: locale/ipp-strings.c:2848
+#: locale/ipp-strings.c:2886
 msgid "printer-state-reasons.die-cutter-recoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Recoverable Storage
-#: locale/ipp-strings.c:2850
+#: locale/ipp-strings.c:2888
 msgid "printer-state-reasons.die-cutter-recoverable-storage"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Removed
-#: locale/ipp-strings.c:2852
+#: locale/ipp-strings.c:2890
 msgid "printer-state-reasons.die-cutter-removed"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Resource Added
-#: locale/ipp-strings.c:2854
+#: locale/ipp-strings.c:2892
 msgid "printer-state-reasons.die-cutter-resource-added"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Resource Removed
-#: locale/ipp-strings.c:2856
+#: locale/ipp-strings.c:2894
 msgid "printer-state-reasons.die-cutter-resource-removed"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Thermistor Failure
-#: locale/ipp-strings.c:2858
+#: locale/ipp-strings.c:2896
 msgid "printer-state-reasons.die-cutter-thermistor-failure"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Timing Failure
-#: locale/ipp-strings.c:2860
+#: locale/ipp-strings.c:2898
 msgid "printer-state-reasons.die-cutter-timing-failure"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Turned Off
-#: locale/ipp-strings.c:2862
+#: locale/ipp-strings.c:2900
 msgid "printer-state-reasons.die-cutter-turned-off"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Turned On
-#: locale/ipp-strings.c:2864
+#: locale/ipp-strings.c:2902
 msgid "printer-state-reasons.die-cutter-turned-on"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Under Temperature
-#: locale/ipp-strings.c:2866
+#: locale/ipp-strings.c:2904
 msgid "printer-state-reasons.die-cutter-under-temperature"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Unrecoverable Failure
-#: locale/ipp-strings.c:2868
+#: locale/ipp-strings.c:2906
 msgid "printer-state-reasons.die-cutter-unrecoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Unrecoverable Storage Error
-#: locale/ipp-strings.c:2870
+#: locale/ipp-strings.c:2908
 msgid "printer-state-reasons.die-cutter-unrecoverable-storage-error"
 msgstr ""
 
 #. TRANSLATORS: Die Cutter Warming Up
-#: locale/ipp-strings.c:2872
+#: locale/ipp-strings.c:2910
 msgid "printer-state-reasons.die-cutter-warming-up"
 msgstr ""
 
 #. TRANSLATORS: Door Open
-#: locale/ipp-strings.c:2874
+#: locale/ipp-strings.c:2912
 msgid "printer-state-reasons.door-open"
 msgstr ""
 
 #. TRANSLATORS: Extruder Cooling
-#: locale/ipp-strings.c:2876
+#: locale/ipp-strings.c:2914
 msgid "printer-state-reasons.extruder-cooling"
 msgstr ""
 
 #. TRANSLATORS: Extruder Failure
-#: locale/ipp-strings.c:2878
+#: locale/ipp-strings.c:2916
 msgid "printer-state-reasons.extruder-failure"
 msgstr ""
 
 #. TRANSLATORS: Extruder Heating
-#: locale/ipp-strings.c:2880
+#: locale/ipp-strings.c:2918
 msgid "printer-state-reasons.extruder-heating"
 msgstr ""
 
 #. TRANSLATORS: Extruder Jam
-#: locale/ipp-strings.c:2882
+#: locale/ipp-strings.c:2920
 msgid "printer-state-reasons.extruder-jam"
 msgstr ""
 
 #. TRANSLATORS: Extruder Temperature High
-#: locale/ipp-strings.c:2884
+#: locale/ipp-strings.c:2922
 msgid "printer-state-reasons.extruder-temperature-high"
 msgstr ""
 
 #. TRANSLATORS: Extruder Temperature Low
-#: locale/ipp-strings.c:2886
+#: locale/ipp-strings.c:2924
 msgid "printer-state-reasons.extruder-temperature-low"
 msgstr ""
 
 #. TRANSLATORS: Fan Failure
-#: locale/ipp-strings.c:2888
+#: locale/ipp-strings.c:2926
 msgid "printer-state-reasons.fan-failure"
 msgstr ""
 
 #. TRANSLATORS: Fax Modem Life Almost Over
-#: locale/ipp-strings.c:2890
+#: locale/ipp-strings.c:2928
 msgid "printer-state-reasons.fax-modem-life-almost-over"
 msgstr ""
 
 #. TRANSLATORS: Fax Modem Life Over
-#: locale/ipp-strings.c:2892
+#: locale/ipp-strings.c:2930
 msgid "printer-state-reasons.fax-modem-life-over"
 msgstr ""
 
 #. TRANSLATORS: Fax Modem Missing
-#: locale/ipp-strings.c:2894
+#: locale/ipp-strings.c:2932
 msgid "printer-state-reasons.fax-modem-missing"
 msgstr ""
 
 #. TRANSLATORS: Fax Modem Turned Off
-#: locale/ipp-strings.c:2896
+#: locale/ipp-strings.c:2934
 msgid "printer-state-reasons.fax-modem-turned-off"
 msgstr ""
 
 #. TRANSLATORS: Fax Modem Turned On
-#: locale/ipp-strings.c:2898
+#: locale/ipp-strings.c:2936
 msgid "printer-state-reasons.fax-modem-turned-on"
 msgstr ""
 
 #. TRANSLATORS: Folder Added
-#: locale/ipp-strings.c:2900
+#: locale/ipp-strings.c:2938
 msgid "printer-state-reasons.folder-added"
 msgstr ""
 
 #. TRANSLATORS: Folder Almost Empty
-#: locale/ipp-strings.c:2902
+#: locale/ipp-strings.c:2940
 msgid "printer-state-reasons.folder-almost-empty"
 msgstr ""
 
 #. TRANSLATORS: Folder Almost Full
-#: locale/ipp-strings.c:2904
+#: locale/ipp-strings.c:2942
 msgid "printer-state-reasons.folder-almost-full"
 msgstr ""
 
 #. TRANSLATORS: Folder At Limit
-#: locale/ipp-strings.c:2906
+#: locale/ipp-strings.c:2944
 msgid "printer-state-reasons.folder-at-limit"
 msgstr ""
 
 #. TRANSLATORS: Folder Closed
-#: locale/ipp-strings.c:2908
+#: locale/ipp-strings.c:2946
 msgid "printer-state-reasons.folder-closed"
 msgstr ""
 
 #. TRANSLATORS: Folder Configuration Change
-#: locale/ipp-strings.c:2910
+#: locale/ipp-strings.c:2948
 msgid "printer-state-reasons.folder-configuration-change"
 msgstr ""
 
 #. TRANSLATORS: Folder Cover Closed
-#: locale/ipp-strings.c:2912
+#: locale/ipp-strings.c:2950
 msgid "printer-state-reasons.folder-cover-closed"
 msgstr ""
 
 #. TRANSLATORS: Folder Cover Open
-#: locale/ipp-strings.c:2914
+#: locale/ipp-strings.c:2952
 msgid "printer-state-reasons.folder-cover-open"
 msgstr ""
 
 #. TRANSLATORS: Folder Empty
-#: locale/ipp-strings.c:2916
+#: locale/ipp-strings.c:2954
 msgid "printer-state-reasons.folder-empty"
 msgstr ""
 
 #. TRANSLATORS: Folder Full
-#: locale/ipp-strings.c:2918
+#: locale/ipp-strings.c:2956
 msgid "printer-state-reasons.folder-full"
 msgstr ""
 
 #. TRANSLATORS: Folder Interlock Closed
-#: locale/ipp-strings.c:2920
+#: locale/ipp-strings.c:2958
 msgid "printer-state-reasons.folder-interlock-closed"
 msgstr ""
 
 #. TRANSLATORS: Folder Interlock Open
-#: locale/ipp-strings.c:2922
+#: locale/ipp-strings.c:2960
 msgid "printer-state-reasons.folder-interlock-open"
 msgstr ""
 
 #. TRANSLATORS: Folder Jam
-#: locale/ipp-strings.c:2924
+#: locale/ipp-strings.c:2962
 msgid "printer-state-reasons.folder-jam"
 msgstr ""
 
 #. TRANSLATORS: Folder Life Almost Over
-#: locale/ipp-strings.c:2926
+#: locale/ipp-strings.c:2964
 msgid "printer-state-reasons.folder-life-almost-over"
 msgstr ""
 
 #. TRANSLATORS: Folder Life Over
-#: locale/ipp-strings.c:2928
+#: locale/ipp-strings.c:2966
 msgid "printer-state-reasons.folder-life-over"
 msgstr ""
 
 #. TRANSLATORS: Folder Memory Exhausted
-#: locale/ipp-strings.c:2930
+#: locale/ipp-strings.c:2968
 msgid "printer-state-reasons.folder-memory-exhausted"
 msgstr ""
 
 #. TRANSLATORS: Folder Missing
-#: locale/ipp-strings.c:2932
+#: locale/ipp-strings.c:2970
 msgid "printer-state-reasons.folder-missing"
 msgstr ""
 
 #. TRANSLATORS: Folder Motor Failure
-#: locale/ipp-strings.c:2934
+#: locale/ipp-strings.c:2972
 msgid "printer-state-reasons.folder-motor-failure"
 msgstr ""
 
 #. TRANSLATORS: Folder Near Limit
-#: locale/ipp-strings.c:2936
+#: locale/ipp-strings.c:2974
 msgid "printer-state-reasons.folder-near-limit"
 msgstr ""
 
 #. TRANSLATORS: Folder Offline
-#: locale/ipp-strings.c:2938
+#: locale/ipp-strings.c:2976
 msgid "printer-state-reasons.folder-offline"
 msgstr ""
 
 #. TRANSLATORS: Folder Opened
-#: locale/ipp-strings.c:2940
+#: locale/ipp-strings.c:2978
 msgid "printer-state-reasons.folder-opened"
 msgstr ""
 
 #. TRANSLATORS: Folder Over Temperature
-#: locale/ipp-strings.c:2942
+#: locale/ipp-strings.c:2980
 msgid "printer-state-reasons.folder-over-temperature"
 msgstr ""
 
 #. TRANSLATORS: Folder Power Saver
-#: locale/ipp-strings.c:2944
+#: locale/ipp-strings.c:2982
 msgid "printer-state-reasons.folder-power-saver"
 msgstr ""
 
 #. TRANSLATORS: Folder Recoverable Failure
-#: locale/ipp-strings.c:2946
+#: locale/ipp-strings.c:2984
 msgid "printer-state-reasons.folder-recoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Folder Recoverable Storage
-#: locale/ipp-strings.c:2948
+#: locale/ipp-strings.c:2986
 msgid "printer-state-reasons.folder-recoverable-storage"
 msgstr ""
 
 #. TRANSLATORS: Folder Removed
-#: locale/ipp-strings.c:2950
+#: locale/ipp-strings.c:2988
 msgid "printer-state-reasons.folder-removed"
 msgstr ""
 
 #. TRANSLATORS: Folder Resource Added
-#: locale/ipp-strings.c:2952
+#: locale/ipp-strings.c:2990
 msgid "printer-state-reasons.folder-resource-added"
 msgstr ""
 
 #. TRANSLATORS: Folder Resource Removed
-#: locale/ipp-strings.c:2954
+#: locale/ipp-strings.c:2992
 msgid "printer-state-reasons.folder-resource-removed"
 msgstr ""
 
 #. TRANSLATORS: Folder Thermistor Failure
-#: locale/ipp-strings.c:2956
+#: locale/ipp-strings.c:2994
 msgid "printer-state-reasons.folder-thermistor-failure"
 msgstr ""
 
 #. TRANSLATORS: Folder Timing Failure
-#: locale/ipp-strings.c:2958
+#: locale/ipp-strings.c:2996
 msgid "printer-state-reasons.folder-timing-failure"
 msgstr ""
 
 #. TRANSLATORS: Folder Turned Off
-#: locale/ipp-strings.c:2960
+#: locale/ipp-strings.c:2998
 msgid "printer-state-reasons.folder-turned-off"
 msgstr ""
 
 #. TRANSLATORS: Folder Turned On
-#: locale/ipp-strings.c:2962
+#: locale/ipp-strings.c:3000
 msgid "printer-state-reasons.folder-turned-on"
 msgstr ""
 
 #. TRANSLATORS: Folder Under Temperature
-#: locale/ipp-strings.c:2964
+#: locale/ipp-strings.c:3002
 msgid "printer-state-reasons.folder-under-temperature"
 msgstr ""
 
 #. TRANSLATORS: Folder Unrecoverable Failure
-#: locale/ipp-strings.c:2966
+#: locale/ipp-strings.c:3004
 msgid "printer-state-reasons.folder-unrecoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Folder Unrecoverable Storage Error
-#: locale/ipp-strings.c:2968
+#: locale/ipp-strings.c:3006
 msgid "printer-state-reasons.folder-unrecoverable-storage-error"
 msgstr ""
 
 #. TRANSLATORS: Folder Warming Up
-#: locale/ipp-strings.c:2970
+#: locale/ipp-strings.c:3008
 msgid "printer-state-reasons.folder-warming-up"
 msgstr ""
 
 #. TRANSLATORS: Fuser temperature high
-#: locale/ipp-strings.c:2972
+#: locale/ipp-strings.c:3010
 msgid "printer-state-reasons.fuser-over-temp"
 msgstr ""
 
 #. TRANSLATORS: Fuser temperature low
-#: locale/ipp-strings.c:2974
+#: locale/ipp-strings.c:3012
 msgid "printer-state-reasons.fuser-under-temp"
 msgstr ""
 
 #. TRANSLATORS: Hold New Jobs
-#: locale/ipp-strings.c:2976
+#: locale/ipp-strings.c:3014
 msgid "printer-state-reasons.hold-new-jobs"
 msgstr ""
 
 #. TRANSLATORS: Identify Printer
-#: locale/ipp-strings.c:2978
+#: locale/ipp-strings.c:3016
 msgid "printer-state-reasons.identify-printer-requested"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Added
-#: locale/ipp-strings.c:2980
+#: locale/ipp-strings.c:3018
 msgid "printer-state-reasons.imprinter-added"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Almost Empty
-#: locale/ipp-strings.c:2982
+#: locale/ipp-strings.c:3020
 msgid "printer-state-reasons.imprinter-almost-empty"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Almost Full
-#: locale/ipp-strings.c:2984
+#: locale/ipp-strings.c:3022
 msgid "printer-state-reasons.imprinter-almost-full"
 msgstr ""
 
 #. TRANSLATORS: Imprinter At Limit
-#: locale/ipp-strings.c:2986
+#: locale/ipp-strings.c:3024
 msgid "printer-state-reasons.imprinter-at-limit"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Closed
-#: locale/ipp-strings.c:2988
+#: locale/ipp-strings.c:3026
 msgid "printer-state-reasons.imprinter-closed"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Configuration Change
-#: locale/ipp-strings.c:2990
+#: locale/ipp-strings.c:3028
 msgid "printer-state-reasons.imprinter-configuration-change"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Cover Closed
-#: locale/ipp-strings.c:2992
+#: locale/ipp-strings.c:3030
 msgid "printer-state-reasons.imprinter-cover-closed"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Cover Open
-#: locale/ipp-strings.c:2994
+#: locale/ipp-strings.c:3032
 msgid "printer-state-reasons.imprinter-cover-open"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Empty
-#: locale/ipp-strings.c:2996
+#: locale/ipp-strings.c:3034
 msgid "printer-state-reasons.imprinter-empty"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Full
-#: locale/ipp-strings.c:2998
+#: locale/ipp-strings.c:3036
 msgid "printer-state-reasons.imprinter-full"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Interlock Closed
-#: locale/ipp-strings.c:3000
+#: locale/ipp-strings.c:3038
 msgid "printer-state-reasons.imprinter-interlock-closed"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Interlock Open
-#: locale/ipp-strings.c:3002
+#: locale/ipp-strings.c:3040
 msgid "printer-state-reasons.imprinter-interlock-open"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Jam
-#: locale/ipp-strings.c:3004
+#: locale/ipp-strings.c:3042
 msgid "printer-state-reasons.imprinter-jam"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Life Almost Over
-#: locale/ipp-strings.c:3006
+#: locale/ipp-strings.c:3044
 msgid "printer-state-reasons.imprinter-life-almost-over"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Life Over
-#: locale/ipp-strings.c:3008
+#: locale/ipp-strings.c:3046
 msgid "printer-state-reasons.imprinter-life-over"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Memory Exhausted
-#: locale/ipp-strings.c:3010
+#: locale/ipp-strings.c:3048
 msgid "printer-state-reasons.imprinter-memory-exhausted"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Missing
-#: locale/ipp-strings.c:3012
+#: locale/ipp-strings.c:3050
 msgid "printer-state-reasons.imprinter-missing"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Motor Failure
-#: locale/ipp-strings.c:3014
+#: locale/ipp-strings.c:3052
 msgid "printer-state-reasons.imprinter-motor-failure"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Near Limit
-#: locale/ipp-strings.c:3016
+#: locale/ipp-strings.c:3054
 msgid "printer-state-reasons.imprinter-near-limit"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Offline
-#: locale/ipp-strings.c:3018
+#: locale/ipp-strings.c:3056
 msgid "printer-state-reasons.imprinter-offline"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Opened
-#: locale/ipp-strings.c:3020
+#: locale/ipp-strings.c:3058
 msgid "printer-state-reasons.imprinter-opened"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Over Temperature
-#: locale/ipp-strings.c:3022
+#: locale/ipp-strings.c:3060
 msgid "printer-state-reasons.imprinter-over-temperature"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Power Saver
-#: locale/ipp-strings.c:3024
+#: locale/ipp-strings.c:3062
 msgid "printer-state-reasons.imprinter-power-saver"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Recoverable Failure
-#: locale/ipp-strings.c:3026
+#: locale/ipp-strings.c:3064
 msgid "printer-state-reasons.imprinter-recoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Recoverable Storage
-#: locale/ipp-strings.c:3028
+#: locale/ipp-strings.c:3066
 msgid "printer-state-reasons.imprinter-recoverable-storage"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Removed
-#: locale/ipp-strings.c:3030
+#: locale/ipp-strings.c:3068
 msgid "printer-state-reasons.imprinter-removed"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Resource Added
-#: locale/ipp-strings.c:3032
+#: locale/ipp-strings.c:3070
 msgid "printer-state-reasons.imprinter-resource-added"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Resource Removed
-#: locale/ipp-strings.c:3034
+#: locale/ipp-strings.c:3072
 msgid "printer-state-reasons.imprinter-resource-removed"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Thermistor Failure
-#: locale/ipp-strings.c:3036
+#: locale/ipp-strings.c:3074
 msgid "printer-state-reasons.imprinter-thermistor-failure"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Timing Failure
-#: locale/ipp-strings.c:3038
+#: locale/ipp-strings.c:3076
 msgid "printer-state-reasons.imprinter-timing-failure"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Turned Off
-#: locale/ipp-strings.c:3040
+#: locale/ipp-strings.c:3078
 msgid "printer-state-reasons.imprinter-turned-off"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Turned On
-#: locale/ipp-strings.c:3042
+#: locale/ipp-strings.c:3080
 msgid "printer-state-reasons.imprinter-turned-on"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Under Temperature
-#: locale/ipp-strings.c:3044
+#: locale/ipp-strings.c:3082
 msgid "printer-state-reasons.imprinter-under-temperature"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Unrecoverable Failure
-#: locale/ipp-strings.c:3046
+#: locale/ipp-strings.c:3084
 msgid "printer-state-reasons.imprinter-unrecoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Unrecoverable Storage Error
-#: locale/ipp-strings.c:3048
+#: locale/ipp-strings.c:3086
 msgid "printer-state-reasons.imprinter-unrecoverable-storage-error"
 msgstr ""
 
 #. TRANSLATORS: Imprinter Warming Up
-#: locale/ipp-strings.c:3050
+#: locale/ipp-strings.c:3088
 msgid "printer-state-reasons.imprinter-warming-up"
 msgstr ""
 
 #. TRANSLATORS: Input Cannot Feed Size Selected
-#: locale/ipp-strings.c:3052
+#: locale/ipp-strings.c:3090
 msgid "printer-state-reasons.input-cannot-feed-size-selected"
 msgstr ""
 
 #. TRANSLATORS: Input Manual Input Request
-#: locale/ipp-strings.c:3054
+#: locale/ipp-strings.c:3092
 msgid "printer-state-reasons.input-manual-input-request"
 msgstr ""
 
 #. TRANSLATORS: Input Media Color Change
-#: locale/ipp-strings.c:3056
+#: locale/ipp-strings.c:3094
 msgid "printer-state-reasons.input-media-color-change"
 msgstr ""
 
 #. TRANSLATORS: Input Media Form Parts Change
-#: locale/ipp-strings.c:3058
+#: locale/ipp-strings.c:3096
 msgid "printer-state-reasons.input-media-form-parts-change"
 msgstr ""
 
 #. TRANSLATORS: Input Media Size Change
-#: locale/ipp-strings.c:3060
+#: locale/ipp-strings.c:3098
 msgid "printer-state-reasons.input-media-size-change"
 msgstr ""
 
 #. TRANSLATORS: Input Media Tray Failure
-#: locale/ipp-strings.c:3062
+#: locale/ipp-strings.c:3100
 msgid "printer-state-reasons.input-media-tray-failure"
 msgstr ""
 
 #. TRANSLATORS: Input Media Tray Feed Error
-#: locale/ipp-strings.c:3064
+#: locale/ipp-strings.c:3102
 msgid "printer-state-reasons.input-media-tray-feed-error"
 msgstr ""
 
 #. TRANSLATORS: Input Media Tray Jam
-#: locale/ipp-strings.c:3066
+#: locale/ipp-strings.c:3104
 msgid "printer-state-reasons.input-media-tray-jam"
 msgstr ""
 
 #. TRANSLATORS: Input Media Type Change
-#: locale/ipp-strings.c:3068
+#: locale/ipp-strings.c:3106
 msgid "printer-state-reasons.input-media-type-change"
 msgstr ""
 
 #. TRANSLATORS: Input Media Weight Change
-#: locale/ipp-strings.c:3070
+#: locale/ipp-strings.c:3108
 msgid "printer-state-reasons.input-media-weight-change"
 msgstr ""
 
 #. TRANSLATORS: Input Pick Roller Failure
-#: locale/ipp-strings.c:3072
+#: locale/ipp-strings.c:3110
 msgid "printer-state-reasons.input-pick-roller-failure"
 msgstr ""
 
 #. TRANSLATORS: Input Pick Roller Life Over
-#: locale/ipp-strings.c:3074
+#: locale/ipp-strings.c:3112
 msgid "printer-state-reasons.input-pick-roller-life-over"
 msgstr ""
 
 #. TRANSLATORS: Input Pick Roller Life Warn
-#: locale/ipp-strings.c:3076
+#: locale/ipp-strings.c:3114
 msgid "printer-state-reasons.input-pick-roller-life-warn"
 msgstr ""
 
 #. TRANSLATORS: Input Pick Roller Missing
-#: locale/ipp-strings.c:3078
+#: locale/ipp-strings.c:3116
 msgid "printer-state-reasons.input-pick-roller-missing"
 msgstr ""
 
 #. TRANSLATORS: Input Tray Elevation Failure
-#: locale/ipp-strings.c:3080
+#: locale/ipp-strings.c:3118
 msgid "printer-state-reasons.input-tray-elevation-failure"
 msgstr ""
 
 #. TRANSLATORS: Paper tray is missing
-#: locale/ipp-strings.c:3082
+#: locale/ipp-strings.c:3120
 msgid "printer-state-reasons.input-tray-missing"
 msgstr ""
 
 #. TRANSLATORS: Input Tray Position Failure
-#: locale/ipp-strings.c:3084
+#: locale/ipp-strings.c:3122
 msgid "printer-state-reasons.input-tray-position-failure"
 msgstr ""
 
 #. TRANSLATORS: Inserter Added
-#: locale/ipp-strings.c:3086
+#: locale/ipp-strings.c:3124
 msgid "printer-state-reasons.inserter-added"
 msgstr ""
 
 #. TRANSLATORS: Inserter Almost Empty
-#: locale/ipp-strings.c:3088
+#: locale/ipp-strings.c:3126
 msgid "printer-state-reasons.inserter-almost-empty"
 msgstr ""
 
 #. TRANSLATORS: Inserter Almost Full
-#: locale/ipp-strings.c:3090
+#: locale/ipp-strings.c:3128
 msgid "printer-state-reasons.inserter-almost-full"
 msgstr ""
 
 #. TRANSLATORS: Inserter At Limit
-#: locale/ipp-strings.c:3092
+#: locale/ipp-strings.c:3130
 msgid "printer-state-reasons.inserter-at-limit"
 msgstr ""
 
 #. TRANSLATORS: Inserter Closed
-#: locale/ipp-strings.c:3094
+#: locale/ipp-strings.c:3132
 msgid "printer-state-reasons.inserter-closed"
 msgstr ""
 
 #. TRANSLATORS: Inserter Configuration Change
-#: locale/ipp-strings.c:3096
+#: locale/ipp-strings.c:3134
 msgid "printer-state-reasons.inserter-configuration-change"
 msgstr ""
 
 #. TRANSLATORS: Inserter Cover Closed
-#: locale/ipp-strings.c:3098
+#: locale/ipp-strings.c:3136
 msgid "printer-state-reasons.inserter-cover-closed"
 msgstr ""
 
 #. TRANSLATORS: Inserter Cover Open
-#: locale/ipp-strings.c:3100
+#: locale/ipp-strings.c:3138
 msgid "printer-state-reasons.inserter-cover-open"
 msgstr ""
 
 #. TRANSLATORS: Inserter Empty
-#: locale/ipp-strings.c:3102
+#: locale/ipp-strings.c:3140
 msgid "printer-state-reasons.inserter-empty"
 msgstr ""
 
 #. TRANSLATORS: Inserter Full
-#: locale/ipp-strings.c:3104
+#: locale/ipp-strings.c:3142
 msgid "printer-state-reasons.inserter-full"
 msgstr ""
 
 #. TRANSLATORS: Inserter Interlock Closed
-#: locale/ipp-strings.c:3106
+#: locale/ipp-strings.c:3144
 msgid "printer-state-reasons.inserter-interlock-closed"
 msgstr ""
 
 #. TRANSLATORS: Inserter Interlock Open
-#: locale/ipp-strings.c:3108
+#: locale/ipp-strings.c:3146
 msgid "printer-state-reasons.inserter-interlock-open"
 msgstr ""
 
 #. TRANSLATORS: Inserter Jam
-#: locale/ipp-strings.c:3110
+#: locale/ipp-strings.c:3148
 msgid "printer-state-reasons.inserter-jam"
 msgstr ""
 
 #. TRANSLATORS: Inserter Life Almost Over
-#: locale/ipp-strings.c:3112
+#: locale/ipp-strings.c:3150
 msgid "printer-state-reasons.inserter-life-almost-over"
 msgstr ""
 
 #. TRANSLATORS: Inserter Life Over
-#: locale/ipp-strings.c:3114
+#: locale/ipp-strings.c:3152
 msgid "printer-state-reasons.inserter-life-over"
 msgstr ""
 
 #. TRANSLATORS: Inserter Memory Exhausted
-#: locale/ipp-strings.c:3116
+#: locale/ipp-strings.c:3154
 msgid "printer-state-reasons.inserter-memory-exhausted"
 msgstr ""
 
 #. TRANSLATORS: Inserter Missing
-#: locale/ipp-strings.c:3118
+#: locale/ipp-strings.c:3156
 msgid "printer-state-reasons.inserter-missing"
 msgstr ""
 
 #. TRANSLATORS: Inserter Motor Failure
-#: locale/ipp-strings.c:3120
+#: locale/ipp-strings.c:3158
 msgid "printer-state-reasons.inserter-motor-failure"
 msgstr ""
 
 #. TRANSLATORS: Inserter Near Limit
-#: locale/ipp-strings.c:3122
+#: locale/ipp-strings.c:3160
 msgid "printer-state-reasons.inserter-near-limit"
 msgstr ""
 
 #. TRANSLATORS: Inserter Offline
-#: locale/ipp-strings.c:3124
+#: locale/ipp-strings.c:3162
 msgid "printer-state-reasons.inserter-offline"
 msgstr ""
 
 #. TRANSLATORS: Inserter Opened
-#: locale/ipp-strings.c:3126
+#: locale/ipp-strings.c:3164
 msgid "printer-state-reasons.inserter-opened"
 msgstr ""
 
 #. TRANSLATORS: Inserter Over Temperature
-#: locale/ipp-strings.c:3128
+#: locale/ipp-strings.c:3166
 msgid "printer-state-reasons.inserter-over-temperature"
 msgstr ""
 
 #. TRANSLATORS: Inserter Power Saver
-#: locale/ipp-strings.c:3130
+#: locale/ipp-strings.c:3168
 msgid "printer-state-reasons.inserter-power-saver"
 msgstr ""
 
 #. TRANSLATORS: Inserter Recoverable Failure
-#: locale/ipp-strings.c:3132
+#: locale/ipp-strings.c:3170
 msgid "printer-state-reasons.inserter-recoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Inserter Recoverable Storage
-#: locale/ipp-strings.c:3134
+#: locale/ipp-strings.c:3172
 msgid "printer-state-reasons.inserter-recoverable-storage"
 msgstr ""
 
 #. TRANSLATORS: Inserter Removed
-#: locale/ipp-strings.c:3136
+#: locale/ipp-strings.c:3174
 msgid "printer-state-reasons.inserter-removed"
 msgstr ""
 
 #. TRANSLATORS: Inserter Resource Added
-#: locale/ipp-strings.c:3138
+#: locale/ipp-strings.c:3176
 msgid "printer-state-reasons.inserter-resource-added"
 msgstr ""
 
 #. TRANSLATORS: Inserter Resource Removed
-#: locale/ipp-strings.c:3140
+#: locale/ipp-strings.c:3178
 msgid "printer-state-reasons.inserter-resource-removed"
 msgstr ""
 
 #. TRANSLATORS: Inserter Thermistor Failure
-#: locale/ipp-strings.c:3142
+#: locale/ipp-strings.c:3180
 msgid "printer-state-reasons.inserter-thermistor-failure"
 msgstr ""
 
 #. TRANSLATORS: Inserter Timing Failure
-#: locale/ipp-strings.c:3144
+#: locale/ipp-strings.c:3182
 msgid "printer-state-reasons.inserter-timing-failure"
 msgstr ""
 
 #. TRANSLATORS: Inserter Turned Off
-#: locale/ipp-strings.c:3146
+#: locale/ipp-strings.c:3184
 msgid "printer-state-reasons.inserter-turned-off"
 msgstr ""
 
 #. TRANSLATORS: Inserter Turned On
-#: locale/ipp-strings.c:3148
+#: locale/ipp-strings.c:3186
 msgid "printer-state-reasons.inserter-turned-on"
 msgstr ""
 
 #. TRANSLATORS: Inserter Under Temperature
-#: locale/ipp-strings.c:3150
+#: locale/ipp-strings.c:3188
 msgid "printer-state-reasons.inserter-under-temperature"
 msgstr ""
 
 #. TRANSLATORS: Inserter Unrecoverable Failure
-#: locale/ipp-strings.c:3152
+#: locale/ipp-strings.c:3190
 msgid "printer-state-reasons.inserter-unrecoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Inserter Unrecoverable Storage Error
-#: locale/ipp-strings.c:3154
+#: locale/ipp-strings.c:3192
 msgid "printer-state-reasons.inserter-unrecoverable-storage-error"
 msgstr ""
 
 #. TRANSLATORS: Inserter Warming Up
-#: locale/ipp-strings.c:3156
+#: locale/ipp-strings.c:3194
 msgid "printer-state-reasons.inserter-warming-up"
 msgstr ""
 
 #. TRANSLATORS: Interlock Closed
-#: locale/ipp-strings.c:3158
+#: locale/ipp-strings.c:3196
 msgid "printer-state-reasons.interlock-closed"
 msgstr ""
 
 #. TRANSLATORS: Interlock Open
-#: locale/ipp-strings.c:3160
+#: locale/ipp-strings.c:3198
 msgid "printer-state-reasons.interlock-open"
 msgstr ""
 
 #. TRANSLATORS: Interpreter Cartridge Added
-#: locale/ipp-strings.c:3162
+#: locale/ipp-strings.c:3200
 msgid "printer-state-reasons.interpreter-cartridge-added"
 msgstr ""
 
 #. TRANSLATORS: Interpreter Cartridge Removed
-#: locale/ipp-strings.c:3164
+#: locale/ipp-strings.c:3202
 msgid "printer-state-reasons.interpreter-cartridge-deleted"
 msgstr ""
 
 #. TRANSLATORS: Interpreter Complex Page Encountered
-#: locale/ipp-strings.c:3166
+#: locale/ipp-strings.c:3204
 msgid "printer-state-reasons.interpreter-complex-page-encountered"
 msgstr ""
 
 #. TRANSLATORS: Interpreter Memory Decrease
-#: locale/ipp-strings.c:3168
+#: locale/ipp-strings.c:3206
 msgid "printer-state-reasons.interpreter-memory-decrease"
 msgstr ""
 
 #. TRANSLATORS: Interpreter Memory Increase
-#: locale/ipp-strings.c:3170
+#: locale/ipp-strings.c:3208
 msgid "printer-state-reasons.interpreter-memory-increase"
 msgstr ""
 
 #. TRANSLATORS: Interpreter Resource Added
-#: locale/ipp-strings.c:3172
+#: locale/ipp-strings.c:3210
 msgid "printer-state-reasons.interpreter-resource-added"
 msgstr ""
 
 #. TRANSLATORS: Interpreter Resource Deleted
-#: locale/ipp-strings.c:3174
+#: locale/ipp-strings.c:3212
 msgid "printer-state-reasons.interpreter-resource-deleted"
 msgstr ""
 
 #. TRANSLATORS: Printer resource unavailable
-#: locale/ipp-strings.c:3176
+#: locale/ipp-strings.c:3214
 msgid "printer-state-reasons.interpreter-resource-unavailable"
 msgstr ""
 
 #. TRANSLATORS: Lamp At End of Life
-#: locale/ipp-strings.c:3178
+#: locale/ipp-strings.c:3216
 msgid "printer-state-reasons.lamp-at-eol"
 msgstr ""
 
 #. TRANSLATORS: Lamp Failure
-#: locale/ipp-strings.c:3180
+#: locale/ipp-strings.c:3218
 msgid "printer-state-reasons.lamp-failure"
 msgstr ""
 
 #. TRANSLATORS: Lamp Near End of Life
-#: locale/ipp-strings.c:3182
+#: locale/ipp-strings.c:3220
 msgid "printer-state-reasons.lamp-near-eol"
 msgstr ""
 
 #. TRANSLATORS: Laser At End of Life
-#: locale/ipp-strings.c:3184
+#: locale/ipp-strings.c:3222
 msgid "printer-state-reasons.laser-at-eol"
 msgstr ""
 
 #. TRANSLATORS: Laser Failure
-#: locale/ipp-strings.c:3186
+#: locale/ipp-strings.c:3224
 msgid "printer-state-reasons.laser-failure"
 msgstr ""
 
 #. TRANSLATORS: Laser Near End of Life
-#: locale/ipp-strings.c:3188
+#: locale/ipp-strings.c:3226
 msgid "printer-state-reasons.laser-near-eol"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Added
-#: locale/ipp-strings.c:3190
+#: locale/ipp-strings.c:3228
 msgid "printer-state-reasons.make-envelope-added"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Almost Empty
-#: locale/ipp-strings.c:3192
+#: locale/ipp-strings.c:3230
 msgid "printer-state-reasons.make-envelope-almost-empty"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Almost Full
-#: locale/ipp-strings.c:3194
+#: locale/ipp-strings.c:3232
 msgid "printer-state-reasons.make-envelope-almost-full"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker At Limit
-#: locale/ipp-strings.c:3196
+#: locale/ipp-strings.c:3234
 msgid "printer-state-reasons.make-envelope-at-limit"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Closed
-#: locale/ipp-strings.c:3198
+#: locale/ipp-strings.c:3236
 msgid "printer-state-reasons.make-envelope-closed"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Configuration Change
-#: locale/ipp-strings.c:3200
+#: locale/ipp-strings.c:3238
 msgid "printer-state-reasons.make-envelope-configuration-change"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Cover Closed
-#: locale/ipp-strings.c:3202
+#: locale/ipp-strings.c:3240
 msgid "printer-state-reasons.make-envelope-cover-closed"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Cover Open
-#: locale/ipp-strings.c:3204
+#: locale/ipp-strings.c:3242
 msgid "printer-state-reasons.make-envelope-cover-open"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Empty
-#: locale/ipp-strings.c:3206
+#: locale/ipp-strings.c:3244
 msgid "printer-state-reasons.make-envelope-empty"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Full
-#: locale/ipp-strings.c:3208
+#: locale/ipp-strings.c:3246
 msgid "printer-state-reasons.make-envelope-full"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Interlock Closed
-#: locale/ipp-strings.c:3210
+#: locale/ipp-strings.c:3248
 msgid "printer-state-reasons.make-envelope-interlock-closed"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Interlock Open
-#: locale/ipp-strings.c:3212
+#: locale/ipp-strings.c:3250
 msgid "printer-state-reasons.make-envelope-interlock-open"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Jam
-#: locale/ipp-strings.c:3214
+#: locale/ipp-strings.c:3252
 msgid "printer-state-reasons.make-envelope-jam"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Life Almost Over
-#: locale/ipp-strings.c:3216
+#: locale/ipp-strings.c:3254
 msgid "printer-state-reasons.make-envelope-life-almost-over"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Life Over
-#: locale/ipp-strings.c:3218
+#: locale/ipp-strings.c:3256
 msgid "printer-state-reasons.make-envelope-life-over"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Memory Exhausted
-#: locale/ipp-strings.c:3220
+#: locale/ipp-strings.c:3258
 msgid "printer-state-reasons.make-envelope-memory-exhausted"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Missing
-#: locale/ipp-strings.c:3222
+#: locale/ipp-strings.c:3260
 msgid "printer-state-reasons.make-envelope-missing"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Motor Failure
-#: locale/ipp-strings.c:3224
+#: locale/ipp-strings.c:3262
 msgid "printer-state-reasons.make-envelope-motor-failure"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Near Limit
-#: locale/ipp-strings.c:3226
+#: locale/ipp-strings.c:3264
 msgid "printer-state-reasons.make-envelope-near-limit"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Offline
-#: locale/ipp-strings.c:3228
+#: locale/ipp-strings.c:3266
 msgid "printer-state-reasons.make-envelope-offline"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Opened
-#: locale/ipp-strings.c:3230
+#: locale/ipp-strings.c:3268
 msgid "printer-state-reasons.make-envelope-opened"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Over Temperature
-#: locale/ipp-strings.c:3232
+#: locale/ipp-strings.c:3270
 msgid "printer-state-reasons.make-envelope-over-temperature"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Power Saver
-#: locale/ipp-strings.c:3234
+#: locale/ipp-strings.c:3272
 msgid "printer-state-reasons.make-envelope-power-saver"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Recoverable Failure
-#: locale/ipp-strings.c:3236
+#: locale/ipp-strings.c:3274
 msgid "printer-state-reasons.make-envelope-recoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Recoverable Storage
-#: locale/ipp-strings.c:3238
+#: locale/ipp-strings.c:3276
 msgid "printer-state-reasons.make-envelope-recoverable-storage"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Removed
-#: locale/ipp-strings.c:3240
+#: locale/ipp-strings.c:3278
 msgid "printer-state-reasons.make-envelope-removed"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Resource Added
-#: locale/ipp-strings.c:3242
+#: locale/ipp-strings.c:3280
 msgid "printer-state-reasons.make-envelope-resource-added"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Resource Removed
-#: locale/ipp-strings.c:3244
+#: locale/ipp-strings.c:3282
 msgid "printer-state-reasons.make-envelope-resource-removed"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Thermistor Failure
-#: locale/ipp-strings.c:3246
+#: locale/ipp-strings.c:3284
 msgid "printer-state-reasons.make-envelope-thermistor-failure"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Timing Failure
-#: locale/ipp-strings.c:3248
+#: locale/ipp-strings.c:3286
 msgid "printer-state-reasons.make-envelope-timing-failure"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Turned Off
-#: locale/ipp-strings.c:3250
+#: locale/ipp-strings.c:3288
 msgid "printer-state-reasons.make-envelope-turned-off"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Turned On
-#: locale/ipp-strings.c:3252
+#: locale/ipp-strings.c:3290
 msgid "printer-state-reasons.make-envelope-turned-on"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Under Temperature
-#: locale/ipp-strings.c:3254
+#: locale/ipp-strings.c:3292
 msgid "printer-state-reasons.make-envelope-under-temperature"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Unrecoverable Failure
-#: locale/ipp-strings.c:3256
+#: locale/ipp-strings.c:3294
 msgid "printer-state-reasons.make-envelope-unrecoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Unrecoverable Storage Error
-#: locale/ipp-strings.c:3258
+#: locale/ipp-strings.c:3296
 msgid "printer-state-reasons.make-envelope-unrecoverable-storage-error"
 msgstr ""
 
 #. TRANSLATORS: Envelope Maker Warming Up
-#: locale/ipp-strings.c:3260
+#: locale/ipp-strings.c:3298
 msgid "printer-state-reasons.make-envelope-warming-up"
 msgstr ""
 
 #. TRANSLATORS: Marker Adjusting Print Quality
-#: locale/ipp-strings.c:3262
+#: locale/ipp-strings.c:3300
 msgid "printer-state-reasons.marker-adjusting-print-quality"
 msgstr ""
 
 #. TRANSLATORS: Marker Cleaner Missing
-#: locale/ipp-strings.c:3264
+#: locale/ipp-strings.c:3302
 msgid "printer-state-reasons.marker-cleaner-missing"
 msgstr ""
 
 #. TRANSLATORS: Marker Developer Almost Empty
-#: locale/ipp-strings.c:3266
+#: locale/ipp-strings.c:3304
 msgid "printer-state-reasons.marker-developer-almost-empty"
 msgstr ""
 
 #. TRANSLATORS: Marker Developer Empty
-#: locale/ipp-strings.c:3268
+#: locale/ipp-strings.c:3306
 msgid "printer-state-reasons.marker-developer-empty"
 msgstr ""
 
 #. TRANSLATORS: Marker Developer Missing
-#: locale/ipp-strings.c:3270
+#: locale/ipp-strings.c:3308
 msgid "printer-state-reasons.marker-developer-missing"
 msgstr ""
 
 #. TRANSLATORS: Marker Fuser Missing
-#: locale/ipp-strings.c:3272
+#: locale/ipp-strings.c:3310
 msgid "printer-state-reasons.marker-fuser-missing"
 msgstr ""
 
 #. TRANSLATORS: Marker Fuser Thermistor Failure
-#: locale/ipp-strings.c:3274
+#: locale/ipp-strings.c:3312
 msgid "printer-state-reasons.marker-fuser-thermistor-failure"
 msgstr ""
 
 #. TRANSLATORS: Marker Fuser Timing Failure
-#: locale/ipp-strings.c:3276
+#: locale/ipp-strings.c:3314
 msgid "printer-state-reasons.marker-fuser-timing-failure"
 msgstr ""
 
 #. TRANSLATORS: Marker Ink Almost Empty
-#: locale/ipp-strings.c:3278
+#: locale/ipp-strings.c:3316
 msgid "printer-state-reasons.marker-ink-almost-empty"
 msgstr ""
 
 #. TRANSLATORS: Marker Ink Empty
-#: locale/ipp-strings.c:3280
+#: locale/ipp-strings.c:3318
 msgid "printer-state-reasons.marker-ink-empty"
 msgstr ""
 
 #. TRANSLATORS: Marker Ink Missing
-#: locale/ipp-strings.c:3282
+#: locale/ipp-strings.c:3320
 msgid "printer-state-reasons.marker-ink-missing"
 msgstr ""
 
 #. TRANSLATORS: Marker Opc Missing
-#: locale/ipp-strings.c:3284
+#: locale/ipp-strings.c:3322
 msgid "printer-state-reasons.marker-opc-missing"
 msgstr ""
 
 #. TRANSLATORS: Marker Print Ribbon Almost Empty
-#: locale/ipp-strings.c:3286
+#: locale/ipp-strings.c:3324
 msgid "printer-state-reasons.marker-print-ribbon-almost-empty"
 msgstr ""
 
 #. TRANSLATORS: Marker Print Ribbon Empty
-#: locale/ipp-strings.c:3288
+#: locale/ipp-strings.c:3326
 msgid "printer-state-reasons.marker-print-ribbon-empty"
 msgstr ""
 
 #. TRANSLATORS: Marker Print Ribbon Missing
-#: locale/ipp-strings.c:3290
+#: locale/ipp-strings.c:3328
 msgid "printer-state-reasons.marker-print-ribbon-missing"
 msgstr ""
 
 #. TRANSLATORS: Marker Supply Almost Empty
-#: locale/ipp-strings.c:3292
+#: locale/ipp-strings.c:3330
 msgid "printer-state-reasons.marker-supply-almost-empty"
 msgstr ""
 
 #. TRANSLATORS: Ink/toner empty
-#: locale/ipp-strings.c:3294
+#: locale/ipp-strings.c:3332
 msgid "printer-state-reasons.marker-supply-empty"
 msgstr ""
 
 #. TRANSLATORS: Ink/toner low
-#: locale/ipp-strings.c:3296
+#: locale/ipp-strings.c:3334
 msgid "printer-state-reasons.marker-supply-low"
 msgstr ""
 
 #. TRANSLATORS: Marker Supply Missing
-#: locale/ipp-strings.c:3298
+#: locale/ipp-strings.c:3336
 msgid "printer-state-reasons.marker-supply-missing"
 msgstr ""
 
 #. TRANSLATORS: Marker Toner Cartridge Missing
-#: locale/ipp-strings.c:3300
+#: locale/ipp-strings.c:3338
 msgid "printer-state-reasons.marker-toner-cartridge-missing"
 msgstr ""
 
 #. TRANSLATORS: Marker Toner Missing
-#: locale/ipp-strings.c:3302
+#: locale/ipp-strings.c:3340
 msgid "printer-state-reasons.marker-toner-missing"
 msgstr ""
 
 #. TRANSLATORS: Ink/toner waste bin almost full
-#: locale/ipp-strings.c:3304
+#: locale/ipp-strings.c:3342
 msgid "printer-state-reasons.marker-waste-almost-full"
 msgstr ""
 
 #. TRANSLATORS: Ink/toner waste bin full
-#: locale/ipp-strings.c:3306
+#: locale/ipp-strings.c:3344
 msgid "printer-state-reasons.marker-waste-full"
 msgstr ""
 
 #. TRANSLATORS: Marker Waste Ink Receptacle Almost Full
-#: locale/ipp-strings.c:3308
+#: locale/ipp-strings.c:3346
 msgid "printer-state-reasons.marker-waste-ink-receptacle-almost-full"
 msgstr ""
 
 #. TRANSLATORS: Marker Waste Ink Receptacle Full
-#: locale/ipp-strings.c:3310
+#: locale/ipp-strings.c:3348
 msgid "printer-state-reasons.marker-waste-ink-receptacle-full"
 msgstr ""
 
 #. TRANSLATORS: Marker Waste Ink Receptacle Missing
-#: locale/ipp-strings.c:3312
+#: locale/ipp-strings.c:3350
 msgid "printer-state-reasons.marker-waste-ink-receptacle-missing"
 msgstr ""
 
 #. TRANSLATORS: Marker Waste Missing
-#: locale/ipp-strings.c:3314
+#: locale/ipp-strings.c:3352
 msgid "printer-state-reasons.marker-waste-missing"
 msgstr ""
 
 #. TRANSLATORS: Marker Waste Toner Receptacle Almost Full
-#: locale/ipp-strings.c:3316
+#: locale/ipp-strings.c:3354
 msgid "printer-state-reasons.marker-waste-toner-receptacle-almost-full"
 msgstr ""
 
 #. TRANSLATORS: Marker Waste Toner Receptacle Full
-#: locale/ipp-strings.c:3318
+#: locale/ipp-strings.c:3356
 msgid "printer-state-reasons.marker-waste-toner-receptacle-full"
 msgstr ""
 
 #. TRANSLATORS: Marker Waste Toner Receptacle Missing
-#: locale/ipp-strings.c:3320
+#: locale/ipp-strings.c:3358
 msgid "printer-state-reasons.marker-waste-toner-receptacle-missing"
 msgstr ""
 
 #. TRANSLATORS: Material Empty
-#: locale/ipp-strings.c:3322
+#: locale/ipp-strings.c:3360
 msgid "printer-state-reasons.material-empty"
 msgstr ""
 
 #. TRANSLATORS: Material Low
-#: locale/ipp-strings.c:3324
+#: locale/ipp-strings.c:3362
 msgid "printer-state-reasons.material-low"
 msgstr ""
 
 #. TRANSLATORS: Material Needed
-#: locale/ipp-strings.c:3326
+#: locale/ipp-strings.c:3364
 msgid "printer-state-reasons.material-needed"
 msgstr ""
 
 #. TRANSLATORS: Media Drying
-#: locale/ipp-strings.c:3328
+#: locale/ipp-strings.c:3366
 msgid "printer-state-reasons.media-drying"
 msgstr ""
 
 #. TRANSLATORS: Paper tray is empty
-#: locale/ipp-strings.c:3330
+#: locale/ipp-strings.c:3368
 msgid "printer-state-reasons.media-empty"
 msgstr ""
 
 #. TRANSLATORS: Paper jam
-#: locale/ipp-strings.c:3332
+#: locale/ipp-strings.c:3370
 msgid "printer-state-reasons.media-jam"
 msgstr ""
 
 #. TRANSLATORS: Paper tray is almost empty
-#: locale/ipp-strings.c:3334
+#: locale/ipp-strings.c:3372
 msgid "printer-state-reasons.media-low"
 msgstr ""
 
 #. TRANSLATORS: Load paper
-#: locale/ipp-strings.c:3336
+#: locale/ipp-strings.c:3374
 msgid "printer-state-reasons.media-needed"
 msgstr ""
 
 #. TRANSLATORS: Media Path Cannot Do 2-Sided Printing
-#: locale/ipp-strings.c:3338
+#: locale/ipp-strings.c:3376
 msgid "printer-state-reasons.media-path-cannot-duplex-media-selected"
 msgstr ""
 
 #. TRANSLATORS: Media Path Failure
-#: locale/ipp-strings.c:3340
+#: locale/ipp-strings.c:3378
 msgid "printer-state-reasons.media-path-failure"
 msgstr ""
 
 #. TRANSLATORS: Media Path Input Empty
-#: locale/ipp-strings.c:3342
+#: locale/ipp-strings.c:3380
 msgid "printer-state-reasons.media-path-input-empty"
 msgstr ""
 
 #. TRANSLATORS: Media Path Input Feed Error
-#: locale/ipp-strings.c:3344
+#: locale/ipp-strings.c:3382
 msgid "printer-state-reasons.media-path-input-feed-error"
 msgstr ""
 
 #. TRANSLATORS: Media Path Input Jam
-#: locale/ipp-strings.c:3346
+#: locale/ipp-strings.c:3384
 msgid "printer-state-reasons.media-path-input-jam"
 msgstr ""
 
 #. TRANSLATORS: Media Path Input Request
-#: locale/ipp-strings.c:3348
+#: locale/ipp-strings.c:3386
 msgid "printer-state-reasons.media-path-input-request"
 msgstr ""
 
 #. TRANSLATORS: Media Path Jam
-#: locale/ipp-strings.c:3350
+#: locale/ipp-strings.c:3388
 msgid "printer-state-reasons.media-path-jam"
 msgstr ""
 
 #. TRANSLATORS: Media Path Media Tray Almost Full
-#: locale/ipp-strings.c:3352
+#: locale/ipp-strings.c:3390
 msgid "printer-state-reasons.media-path-media-tray-almost-full"
 msgstr ""
 
 #. TRANSLATORS: Media Path Media Tray Full
-#: locale/ipp-strings.c:3354
+#: locale/ipp-strings.c:3392
 msgid "printer-state-reasons.media-path-media-tray-full"
 msgstr ""
 
 #. TRANSLATORS: Media Path Media Tray Missing
-#: locale/ipp-strings.c:3356
+#: locale/ipp-strings.c:3394
 msgid "printer-state-reasons.media-path-media-tray-missing"
 msgstr ""
 
 #. TRANSLATORS: Media Path Output Feed Error
-#: locale/ipp-strings.c:3358
+#: locale/ipp-strings.c:3396
 msgid "printer-state-reasons.media-path-output-feed-error"
 msgstr ""
 
 #. TRANSLATORS: Media Path Output Full
-#: locale/ipp-strings.c:3360
+#: locale/ipp-strings.c:3398
 msgid "printer-state-reasons.media-path-output-full"
 msgstr ""
 
 #. TRANSLATORS: Media Path Output Jam
-#: locale/ipp-strings.c:3362
+#: locale/ipp-strings.c:3400
 msgid "printer-state-reasons.media-path-output-jam"
 msgstr ""
 
 #. TRANSLATORS: Media Path Pick Roller Failure
-#: locale/ipp-strings.c:3364
+#: locale/ipp-strings.c:3402
 msgid "printer-state-reasons.media-path-pick-roller-failure"
 msgstr ""
 
 #. TRANSLATORS: Media Path Pick Roller Life Over
-#: locale/ipp-strings.c:3366
+#: locale/ipp-strings.c:3404
 msgid "printer-state-reasons.media-path-pick-roller-life-over"
 msgstr ""
 
 #. TRANSLATORS: Media Path Pick Roller Life Warn
-#: locale/ipp-strings.c:3368
+#: locale/ipp-strings.c:3406
 msgid "printer-state-reasons.media-path-pick-roller-life-warn"
 msgstr ""
 
 #. TRANSLATORS: Media Path Pick Roller Missing
-#: locale/ipp-strings.c:3370
+#: locale/ipp-strings.c:3408
 msgid "printer-state-reasons.media-path-pick-roller-missing"
 msgstr ""
 
 #. TRANSLATORS: Motor Failure
-#: locale/ipp-strings.c:3372
+#: locale/ipp-strings.c:3410
 msgid "printer-state-reasons.motor-failure"
 msgstr ""
 
 #. TRANSLATORS: Printer going offline
-#: locale/ipp-strings.c:3374
+#: locale/ipp-strings.c:3412
 msgid "printer-state-reasons.moving-to-paused"
 msgstr ""
 
 #. TRANSLATORS: None
-#: locale/ipp-strings.c:3376
+#: locale/ipp-strings.c:3414
 msgid "printer-state-reasons.none"
 msgstr ""
 
 #. TRANSLATORS: Optical Photoconductor Life Over
-#: locale/ipp-strings.c:3378
+#: locale/ipp-strings.c:3416
 msgid "printer-state-reasons.opc-life-over"
 msgstr ""
 
 #. TRANSLATORS: OPC almost at end-of-life
-#: locale/ipp-strings.c:3380
+#: locale/ipp-strings.c:3418
 msgid "printer-state-reasons.opc-near-eol"
 msgstr ""
 
 #. TRANSLATORS: Check the printer for errors
-#: locale/ipp-strings.c:3382
+#: locale/ipp-strings.c:3420
 msgid "printer-state-reasons.other"
 msgstr ""
 
 #. TRANSLATORS: Output bin is almost full
-#: locale/ipp-strings.c:3384
+#: locale/ipp-strings.c:3422
 msgid "printer-state-reasons.output-area-almost-full"
 msgstr ""
 
 #. TRANSLATORS: Output bin is full
-#: locale/ipp-strings.c:3386
+#: locale/ipp-strings.c:3424
 msgid "printer-state-reasons.output-area-full"
 msgstr ""
 
 #. TRANSLATORS: Output Mailbox Select Failure
-#: locale/ipp-strings.c:3388
+#: locale/ipp-strings.c:3426
 msgid "printer-state-reasons.output-mailbox-select-failure"
 msgstr ""
 
 #. TRANSLATORS: Output Media Tray Failure
-#: locale/ipp-strings.c:3390
+#: locale/ipp-strings.c:3428
 msgid "printer-state-reasons.output-media-tray-failure"
 msgstr ""
 
 #. TRANSLATORS: Output Media Tray Feed Error
-#: locale/ipp-strings.c:3392
+#: locale/ipp-strings.c:3430
 msgid "printer-state-reasons.output-media-tray-feed-error"
 msgstr ""
 
 #. TRANSLATORS: Output Media Tray Jam
-#: locale/ipp-strings.c:3394
+#: locale/ipp-strings.c:3432
 msgid "printer-state-reasons.output-media-tray-jam"
 msgstr ""
 
 #. TRANSLATORS: Output tray is missing
-#: locale/ipp-strings.c:3396
+#: locale/ipp-strings.c:3434
 msgid "printer-state-reasons.output-tray-missing"
 msgstr ""
 
 #. TRANSLATORS: Paused
-#: locale/ipp-strings.c:3398
+#: locale/ipp-strings.c:3436
 msgid "printer-state-reasons.paused"
 msgstr ""
 
 #. TRANSLATORS: Perforater Added
-#: locale/ipp-strings.c:3400
+#: locale/ipp-strings.c:3438
 msgid "printer-state-reasons.perforater-added"
 msgstr ""
 
 #. TRANSLATORS: Perforater Almost Empty
-#: locale/ipp-strings.c:3402
+#: locale/ipp-strings.c:3440
 msgid "printer-state-reasons.perforater-almost-empty"
 msgstr ""
 
 #. TRANSLATORS: Perforater Almost Full
-#: locale/ipp-strings.c:3404
+#: locale/ipp-strings.c:3442
 msgid "printer-state-reasons.perforater-almost-full"
 msgstr ""
 
 #. TRANSLATORS: Perforater At Limit
-#: locale/ipp-strings.c:3406
+#: locale/ipp-strings.c:3444
 msgid "printer-state-reasons.perforater-at-limit"
 msgstr ""
 
 #. TRANSLATORS: Perforater Closed
-#: locale/ipp-strings.c:3408
+#: locale/ipp-strings.c:3446
 msgid "printer-state-reasons.perforater-closed"
 msgstr ""
 
 #. TRANSLATORS: Perforater Configuration Change
-#: locale/ipp-strings.c:3410
+#: locale/ipp-strings.c:3448
 msgid "printer-state-reasons.perforater-configuration-change"
 msgstr ""
 
 #. TRANSLATORS: Perforater Cover Closed
-#: locale/ipp-strings.c:3412
+#: locale/ipp-strings.c:3450
 msgid "printer-state-reasons.perforater-cover-closed"
 msgstr ""
 
 #. TRANSLATORS: Perforater Cover Open
-#: locale/ipp-strings.c:3414
+#: locale/ipp-strings.c:3452
 msgid "printer-state-reasons.perforater-cover-open"
 msgstr ""
 
 #. TRANSLATORS: Perforater Empty
-#: locale/ipp-strings.c:3416
+#: locale/ipp-strings.c:3454
 msgid "printer-state-reasons.perforater-empty"
 msgstr ""
 
 #. TRANSLATORS: Perforater Full
-#: locale/ipp-strings.c:3418
+#: locale/ipp-strings.c:3456
 msgid "printer-state-reasons.perforater-full"
 msgstr ""
 
 #. TRANSLATORS: Perforater Interlock Closed
-#: locale/ipp-strings.c:3420
+#: locale/ipp-strings.c:3458
 msgid "printer-state-reasons.perforater-interlock-closed"
 msgstr ""
 
 #. TRANSLATORS: Perforater Interlock Open
-#: locale/ipp-strings.c:3422
+#: locale/ipp-strings.c:3460
 msgid "printer-state-reasons.perforater-interlock-open"
 msgstr ""
 
 #. TRANSLATORS: Perforater Jam
-#: locale/ipp-strings.c:3424
+#: locale/ipp-strings.c:3462
 msgid "printer-state-reasons.perforater-jam"
 msgstr ""
 
 #. TRANSLATORS: Perforater Life Almost Over
-#: locale/ipp-strings.c:3426
+#: locale/ipp-strings.c:3464
 msgid "printer-state-reasons.perforater-life-almost-over"
 msgstr ""
 
 #. TRANSLATORS: Perforater Life Over
-#: locale/ipp-strings.c:3428
+#: locale/ipp-strings.c:3466
 msgid "printer-state-reasons.perforater-life-over"
 msgstr ""
 
 #. TRANSLATORS: Perforater Memory Exhausted
-#: locale/ipp-strings.c:3430
+#: locale/ipp-strings.c:3468
 msgid "printer-state-reasons.perforater-memory-exhausted"
 msgstr ""
 
 #. TRANSLATORS: Perforater Missing
-#: locale/ipp-strings.c:3432
+#: locale/ipp-strings.c:3470
 msgid "printer-state-reasons.perforater-missing"
 msgstr ""
 
 #. TRANSLATORS: Perforater Motor Failure
-#: locale/ipp-strings.c:3434
+#: locale/ipp-strings.c:3472
 msgid "printer-state-reasons.perforater-motor-failure"
 msgstr ""
 
 #. TRANSLATORS: Perforater Near Limit
-#: locale/ipp-strings.c:3436
+#: locale/ipp-strings.c:3474
 msgid "printer-state-reasons.perforater-near-limit"
 msgstr ""
 
 #. TRANSLATORS: Perforater Offline
-#: locale/ipp-strings.c:3438
+#: locale/ipp-strings.c:3476
 msgid "printer-state-reasons.perforater-offline"
 msgstr ""
 
 #. TRANSLATORS: Perforater Opened
-#: locale/ipp-strings.c:3440
+#: locale/ipp-strings.c:3478
 msgid "printer-state-reasons.perforater-opened"
 msgstr ""
 
 #. TRANSLATORS: Perforater Over Temperature
-#: locale/ipp-strings.c:3442
+#: locale/ipp-strings.c:3480
 msgid "printer-state-reasons.perforater-over-temperature"
 msgstr ""
 
 #. TRANSLATORS: Perforater Power Saver
-#: locale/ipp-strings.c:3444
+#: locale/ipp-strings.c:3482
 msgid "printer-state-reasons.perforater-power-saver"
 msgstr ""
 
 #. TRANSLATORS: Perforater Recoverable Failure
-#: locale/ipp-strings.c:3446
+#: locale/ipp-strings.c:3484
 msgid "printer-state-reasons.perforater-recoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Perforater Recoverable Storage
-#: locale/ipp-strings.c:3448
+#: locale/ipp-strings.c:3486
 msgid "printer-state-reasons.perforater-recoverable-storage"
 msgstr ""
 
 #. TRANSLATORS: Perforater Removed
-#: locale/ipp-strings.c:3450
+#: locale/ipp-strings.c:3488
 msgid "printer-state-reasons.perforater-removed"
 msgstr ""
 
 #. TRANSLATORS: Perforater Resource Added
-#: locale/ipp-strings.c:3452
+#: locale/ipp-strings.c:3490
 msgid "printer-state-reasons.perforater-resource-added"
 msgstr ""
 
 #. TRANSLATORS: Perforater Resource Removed
-#: locale/ipp-strings.c:3454
+#: locale/ipp-strings.c:3492
 msgid "printer-state-reasons.perforater-resource-removed"
 msgstr ""
 
 #. TRANSLATORS: Perforater Thermistor Failure
-#: locale/ipp-strings.c:3456
+#: locale/ipp-strings.c:3494
 msgid "printer-state-reasons.perforater-thermistor-failure"
 msgstr ""
 
 #. TRANSLATORS: Perforater Timing Failure
-#: locale/ipp-strings.c:3458
+#: locale/ipp-strings.c:3496
 msgid "printer-state-reasons.perforater-timing-failure"
 msgstr ""
 
 #. TRANSLATORS: Perforater Turned Off
-#: locale/ipp-strings.c:3460
+#: locale/ipp-strings.c:3498
 msgid "printer-state-reasons.perforater-turned-off"
 msgstr ""
 
 #. TRANSLATORS: Perforater Turned On
-#: locale/ipp-strings.c:3462
+#: locale/ipp-strings.c:3500
 msgid "printer-state-reasons.perforater-turned-on"
 msgstr ""
 
 #. TRANSLATORS: Perforater Under Temperature
-#: locale/ipp-strings.c:3464
+#: locale/ipp-strings.c:3502
 msgid "printer-state-reasons.perforater-under-temperature"
 msgstr ""
 
 #. TRANSLATORS: Perforater Unrecoverable Failure
-#: locale/ipp-strings.c:3466
+#: locale/ipp-strings.c:3504
 msgid "printer-state-reasons.perforater-unrecoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Perforater Unrecoverable Storage Error
-#: locale/ipp-strings.c:3468
+#: locale/ipp-strings.c:3506
 msgid "printer-state-reasons.perforater-unrecoverable-storage-error"
 msgstr ""
 
 #. TRANSLATORS: Perforater Warming Up
-#: locale/ipp-strings.c:3470
+#: locale/ipp-strings.c:3508
 msgid "printer-state-reasons.perforater-warming-up"
 msgstr ""
 
 #. TRANSLATORS: Platform Cooling
-#: locale/ipp-strings.c:3472
+#: locale/ipp-strings.c:3510
 msgid "printer-state-reasons.platform-cooling"
 msgstr ""
 
 #. TRANSLATORS: Platform Failure
-#: locale/ipp-strings.c:3474
+#: locale/ipp-strings.c:3512
 msgid "printer-state-reasons.platform-failure"
 msgstr ""
 
 #. TRANSLATORS: Platform Heating
-#: locale/ipp-strings.c:3476
+#: locale/ipp-strings.c:3514
 msgid "printer-state-reasons.platform-heating"
 msgstr ""
 
 #. TRANSLATORS: Platform Temperature High
-#: locale/ipp-strings.c:3478
+#: locale/ipp-strings.c:3516
 msgid "printer-state-reasons.platform-temperature-high"
 msgstr ""
 
 #. TRANSLATORS: Platform Temperature Low
-#: locale/ipp-strings.c:3480
+#: locale/ipp-strings.c:3518
 msgid "printer-state-reasons.platform-temperature-low"
 msgstr ""
 
 #. TRANSLATORS: Power Down
-#: locale/ipp-strings.c:3482
+#: locale/ipp-strings.c:3520
 msgid "printer-state-reasons.power-down"
 msgstr ""
 
 #. TRANSLATORS: Power Up
-#: locale/ipp-strings.c:3484
+#: locale/ipp-strings.c:3522
 msgid "printer-state-reasons.power-up"
 msgstr ""
 
 #. TRANSLATORS: Printer Reset Manually
-#: locale/ipp-strings.c:3486
+#: locale/ipp-strings.c:3524
 msgid "printer-state-reasons.printer-manual-reset"
 msgstr ""
 
 #. TRANSLATORS: Printer Reset Remotely
-#: locale/ipp-strings.c:3488
+#: locale/ipp-strings.c:3526
 msgid "printer-state-reasons.printer-nms-reset"
 msgstr ""
 
 #. TRANSLATORS: Printer Ready To Print
-#: locale/ipp-strings.c:3490
+#: locale/ipp-strings.c:3528
 msgid "printer-state-reasons.printer-ready-to-print"
 msgstr ""
 
 #. TRANSLATORS: Puncher Added
-#: locale/ipp-strings.c:3492
+#: locale/ipp-strings.c:3530
 msgid "printer-state-reasons.puncher-added"
 msgstr ""
 
 #. TRANSLATORS: Puncher Almost Empty
-#: locale/ipp-strings.c:3494
+#: locale/ipp-strings.c:3532
 msgid "printer-state-reasons.puncher-almost-empty"
 msgstr ""
 
 #. TRANSLATORS: Puncher Almost Full
-#: locale/ipp-strings.c:3496
+#: locale/ipp-strings.c:3534
 msgid "printer-state-reasons.puncher-almost-full"
 msgstr ""
 
 #. TRANSLATORS: Puncher At Limit
-#: locale/ipp-strings.c:3498
+#: locale/ipp-strings.c:3536
 msgid "printer-state-reasons.puncher-at-limit"
 msgstr ""
 
 #. TRANSLATORS: Puncher Closed
-#: locale/ipp-strings.c:3500
+#: locale/ipp-strings.c:3538
 msgid "printer-state-reasons.puncher-closed"
 msgstr ""
 
 #. TRANSLATORS: Puncher Configuration Change
-#: locale/ipp-strings.c:3502
+#: locale/ipp-strings.c:3540
 msgid "printer-state-reasons.puncher-configuration-change"
 msgstr ""
 
 #. TRANSLATORS: Puncher Cover Closed
-#: locale/ipp-strings.c:3504
+#: locale/ipp-strings.c:3542
 msgid "printer-state-reasons.puncher-cover-closed"
 msgstr ""
 
 #. TRANSLATORS: Puncher Cover Open
-#: locale/ipp-strings.c:3506
+#: locale/ipp-strings.c:3544
 msgid "printer-state-reasons.puncher-cover-open"
 msgstr ""
 
 #. TRANSLATORS: Puncher Empty
-#: locale/ipp-strings.c:3508
+#: locale/ipp-strings.c:3546
 msgid "printer-state-reasons.puncher-empty"
 msgstr ""
 
 #. TRANSLATORS: Puncher Full
-#: locale/ipp-strings.c:3510
+#: locale/ipp-strings.c:3548
 msgid "printer-state-reasons.puncher-full"
 msgstr ""
 
 #. TRANSLATORS: Puncher Interlock Closed
-#: locale/ipp-strings.c:3512
+#: locale/ipp-strings.c:3550
 msgid "printer-state-reasons.puncher-interlock-closed"
 msgstr ""
 
 #. TRANSLATORS: Puncher Interlock Open
-#: locale/ipp-strings.c:3514
+#: locale/ipp-strings.c:3552
 msgid "printer-state-reasons.puncher-interlock-open"
 msgstr ""
 
 #. TRANSLATORS: Puncher Jam
-#: locale/ipp-strings.c:3516
+#: locale/ipp-strings.c:3554
 msgid "printer-state-reasons.puncher-jam"
 msgstr ""
 
 #. TRANSLATORS: Puncher Life Almost Over
-#: locale/ipp-strings.c:3518
+#: locale/ipp-strings.c:3556
 msgid "printer-state-reasons.puncher-life-almost-over"
 msgstr ""
 
 #. TRANSLATORS: Puncher Life Over
-#: locale/ipp-strings.c:3520
+#: locale/ipp-strings.c:3558
 msgid "printer-state-reasons.puncher-life-over"
 msgstr ""
 
 #. TRANSLATORS: Puncher Memory Exhausted
-#: locale/ipp-strings.c:3522
+#: locale/ipp-strings.c:3560
 msgid "printer-state-reasons.puncher-memory-exhausted"
 msgstr ""
 
 #. TRANSLATORS: Puncher Missing
-#: locale/ipp-strings.c:3524
+#: locale/ipp-strings.c:3562
 msgid "printer-state-reasons.puncher-missing"
 msgstr ""
 
 #. TRANSLATORS: Puncher Motor Failure
-#: locale/ipp-strings.c:3526
+#: locale/ipp-strings.c:3564
 msgid "printer-state-reasons.puncher-motor-failure"
 msgstr ""
 
 #. TRANSLATORS: Puncher Near Limit
-#: locale/ipp-strings.c:3528
+#: locale/ipp-strings.c:3566
 msgid "printer-state-reasons.puncher-near-limit"
 msgstr ""
 
 #. TRANSLATORS: Puncher Offline
-#: locale/ipp-strings.c:3530
+#: locale/ipp-strings.c:3568
 msgid "printer-state-reasons.puncher-offline"
 msgstr ""
 
 #. TRANSLATORS: Puncher Opened
-#: locale/ipp-strings.c:3532
+#: locale/ipp-strings.c:3570
 msgid "printer-state-reasons.puncher-opened"
 msgstr ""
 
 #. TRANSLATORS: Puncher Over Temperature
-#: locale/ipp-strings.c:3534
+#: locale/ipp-strings.c:3572
 msgid "printer-state-reasons.puncher-over-temperature"
 msgstr ""
 
 #. TRANSLATORS: Puncher Power Saver
-#: locale/ipp-strings.c:3536
+#: locale/ipp-strings.c:3574
 msgid "printer-state-reasons.puncher-power-saver"
 msgstr ""
 
 #. TRANSLATORS: Puncher Recoverable Failure
-#: locale/ipp-strings.c:3538
+#: locale/ipp-strings.c:3576
 msgid "printer-state-reasons.puncher-recoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Puncher Recoverable Storage
-#: locale/ipp-strings.c:3540
+#: locale/ipp-strings.c:3578
 msgid "printer-state-reasons.puncher-recoverable-storage"
 msgstr ""
 
 #. TRANSLATORS: Puncher Removed
-#: locale/ipp-strings.c:3542
+#: locale/ipp-strings.c:3580
 msgid "printer-state-reasons.puncher-removed"
 msgstr ""
 
 #. TRANSLATORS: Puncher Resource Added
-#: locale/ipp-strings.c:3544
+#: locale/ipp-strings.c:3582
 msgid "printer-state-reasons.puncher-resource-added"
 msgstr ""
 
 #. TRANSLATORS: Puncher Resource Removed
-#: locale/ipp-strings.c:3546
+#: locale/ipp-strings.c:3584
 msgid "printer-state-reasons.puncher-resource-removed"
 msgstr ""
 
 #. TRANSLATORS: Puncher Thermistor Failure
-#: locale/ipp-strings.c:3548
+#: locale/ipp-strings.c:3586
 msgid "printer-state-reasons.puncher-thermistor-failure"
 msgstr ""
 
 #. TRANSLATORS: Puncher Timing Failure
-#: locale/ipp-strings.c:3550
+#: locale/ipp-strings.c:3588
 msgid "printer-state-reasons.puncher-timing-failure"
 msgstr ""
 
 #. TRANSLATORS: Puncher Turned Off
-#: locale/ipp-strings.c:3552
+#: locale/ipp-strings.c:3590
 msgid "printer-state-reasons.puncher-turned-off"
 msgstr ""
 
 #. TRANSLATORS: Puncher Turned On
-#: locale/ipp-strings.c:3554
+#: locale/ipp-strings.c:3592
 msgid "printer-state-reasons.puncher-turned-on"
 msgstr ""
 
 #. TRANSLATORS: Puncher Under Temperature
-#: locale/ipp-strings.c:3556
+#: locale/ipp-strings.c:3594
 msgid "printer-state-reasons.puncher-under-temperature"
 msgstr ""
 
 #. TRANSLATORS: Puncher Unrecoverable Failure
-#: locale/ipp-strings.c:3558
+#: locale/ipp-strings.c:3596
 msgid "printer-state-reasons.puncher-unrecoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Puncher Unrecoverable Storage Error
-#: locale/ipp-strings.c:3560
+#: locale/ipp-strings.c:3598
 msgid "printer-state-reasons.puncher-unrecoverable-storage-error"
 msgstr ""
 
 #. TRANSLATORS: Puncher Warming Up
-#: locale/ipp-strings.c:3562
+#: locale/ipp-strings.c:3600
 msgid "printer-state-reasons.puncher-warming-up"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Added
-#: locale/ipp-strings.c:3564
+#: locale/ipp-strings.c:3602
 msgid "printer-state-reasons.separation-cutter-added"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Almost Empty
-#: locale/ipp-strings.c:3566
+#: locale/ipp-strings.c:3604
 msgid "printer-state-reasons.separation-cutter-almost-empty"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Almost Full
-#: locale/ipp-strings.c:3568
+#: locale/ipp-strings.c:3606
 msgid "printer-state-reasons.separation-cutter-almost-full"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter At Limit
-#: locale/ipp-strings.c:3570
+#: locale/ipp-strings.c:3608
 msgid "printer-state-reasons.separation-cutter-at-limit"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Closed
-#: locale/ipp-strings.c:3572
+#: locale/ipp-strings.c:3610
 msgid "printer-state-reasons.separation-cutter-closed"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Configuration Change
-#: locale/ipp-strings.c:3574
+#: locale/ipp-strings.c:3612
 msgid "printer-state-reasons.separation-cutter-configuration-change"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Cover Closed
-#: locale/ipp-strings.c:3576
+#: locale/ipp-strings.c:3614
 msgid "printer-state-reasons.separation-cutter-cover-closed"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Cover Open
-#: locale/ipp-strings.c:3578
+#: locale/ipp-strings.c:3616
 msgid "printer-state-reasons.separation-cutter-cover-open"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Empty
-#: locale/ipp-strings.c:3580
+#: locale/ipp-strings.c:3618
 msgid "printer-state-reasons.separation-cutter-empty"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Full
-#: locale/ipp-strings.c:3582
+#: locale/ipp-strings.c:3620
 msgid "printer-state-reasons.separation-cutter-full"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Interlock Closed
-#: locale/ipp-strings.c:3584
+#: locale/ipp-strings.c:3622
 msgid "printer-state-reasons.separation-cutter-interlock-closed"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Interlock Open
-#: locale/ipp-strings.c:3586
+#: locale/ipp-strings.c:3624
 msgid "printer-state-reasons.separation-cutter-interlock-open"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Jam
-#: locale/ipp-strings.c:3588
+#: locale/ipp-strings.c:3626
 msgid "printer-state-reasons.separation-cutter-jam"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Life Almost Over
-#: locale/ipp-strings.c:3590
+#: locale/ipp-strings.c:3628
 msgid "printer-state-reasons.separation-cutter-life-almost-over"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Life Over
-#: locale/ipp-strings.c:3592
+#: locale/ipp-strings.c:3630
 msgid "printer-state-reasons.separation-cutter-life-over"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Memory Exhausted
-#: locale/ipp-strings.c:3594
+#: locale/ipp-strings.c:3632
 msgid "printer-state-reasons.separation-cutter-memory-exhausted"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Missing
-#: locale/ipp-strings.c:3596
+#: locale/ipp-strings.c:3634
 msgid "printer-state-reasons.separation-cutter-missing"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Motor Failure
-#: locale/ipp-strings.c:3598
+#: locale/ipp-strings.c:3636
 msgid "printer-state-reasons.separation-cutter-motor-failure"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Near Limit
-#: locale/ipp-strings.c:3600
+#: locale/ipp-strings.c:3638
 msgid "printer-state-reasons.separation-cutter-near-limit"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Offline
-#: locale/ipp-strings.c:3602
+#: locale/ipp-strings.c:3640
 msgid "printer-state-reasons.separation-cutter-offline"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Opened
-#: locale/ipp-strings.c:3604
+#: locale/ipp-strings.c:3642
 msgid "printer-state-reasons.separation-cutter-opened"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Over Temperature
-#: locale/ipp-strings.c:3606
+#: locale/ipp-strings.c:3644
 msgid "printer-state-reasons.separation-cutter-over-temperature"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Power Saver
-#: locale/ipp-strings.c:3608
+#: locale/ipp-strings.c:3646
 msgid "printer-state-reasons.separation-cutter-power-saver"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Recoverable Failure
-#: locale/ipp-strings.c:3610
+#: locale/ipp-strings.c:3648
 msgid "printer-state-reasons.separation-cutter-recoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Recoverable Storage
-#: locale/ipp-strings.c:3612
+#: locale/ipp-strings.c:3650
 msgid "printer-state-reasons.separation-cutter-recoverable-storage"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Removed
-#: locale/ipp-strings.c:3614
+#: locale/ipp-strings.c:3652
 msgid "printer-state-reasons.separation-cutter-removed"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Resource Added
-#: locale/ipp-strings.c:3616
+#: locale/ipp-strings.c:3654
 msgid "printer-state-reasons.separation-cutter-resource-added"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Resource Removed
-#: locale/ipp-strings.c:3618
+#: locale/ipp-strings.c:3656
 msgid "printer-state-reasons.separation-cutter-resource-removed"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Thermistor Failure
-#: locale/ipp-strings.c:3620
+#: locale/ipp-strings.c:3658
 msgid "printer-state-reasons.separation-cutter-thermistor-failure"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Timing Failure
-#: locale/ipp-strings.c:3622
+#: locale/ipp-strings.c:3660
 msgid "printer-state-reasons.separation-cutter-timing-failure"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Turned Off
-#: locale/ipp-strings.c:3624
+#: locale/ipp-strings.c:3662
 msgid "printer-state-reasons.separation-cutter-turned-off"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Turned On
-#: locale/ipp-strings.c:3626
+#: locale/ipp-strings.c:3664
 msgid "printer-state-reasons.separation-cutter-turned-on"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Under Temperature
-#: locale/ipp-strings.c:3628
+#: locale/ipp-strings.c:3666
 msgid "printer-state-reasons.separation-cutter-under-temperature"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Unrecoverable Failure
-#: locale/ipp-strings.c:3630
+#: locale/ipp-strings.c:3668
 msgid "printer-state-reasons.separation-cutter-unrecoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Unrecoverable Storage Error
-#: locale/ipp-strings.c:3632
+#: locale/ipp-strings.c:3670
 msgid "printer-state-reasons.separation-cutter-unrecoverable-storage-error"
 msgstr ""
 
 #. TRANSLATORS: Separation Cutter Warming Up
-#: locale/ipp-strings.c:3634
+#: locale/ipp-strings.c:3672
 msgid "printer-state-reasons.separation-cutter-warming-up"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Added
-#: locale/ipp-strings.c:3636
+#: locale/ipp-strings.c:3674
 msgid "printer-state-reasons.sheet-rotator-added"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Almost Empty
-#: locale/ipp-strings.c:3638
+#: locale/ipp-strings.c:3676
 msgid "printer-state-reasons.sheet-rotator-almost-empty"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Almost Full
-#: locale/ipp-strings.c:3640
+#: locale/ipp-strings.c:3678
 msgid "printer-state-reasons.sheet-rotator-almost-full"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator At Limit
-#: locale/ipp-strings.c:3642
+#: locale/ipp-strings.c:3680
 msgid "printer-state-reasons.sheet-rotator-at-limit"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Closed
-#: locale/ipp-strings.c:3644
+#: locale/ipp-strings.c:3682
 msgid "printer-state-reasons.sheet-rotator-closed"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Configuration Change
-#: locale/ipp-strings.c:3646
+#: locale/ipp-strings.c:3684
 msgid "printer-state-reasons.sheet-rotator-configuration-change"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Cover Closed
-#: locale/ipp-strings.c:3648
+#: locale/ipp-strings.c:3686
 msgid "printer-state-reasons.sheet-rotator-cover-closed"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Cover Open
-#: locale/ipp-strings.c:3650
+#: locale/ipp-strings.c:3688
 msgid "printer-state-reasons.sheet-rotator-cover-open"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Empty
-#: locale/ipp-strings.c:3652
+#: locale/ipp-strings.c:3690
 msgid "printer-state-reasons.sheet-rotator-empty"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Full
-#: locale/ipp-strings.c:3654
+#: locale/ipp-strings.c:3692
 msgid "printer-state-reasons.sheet-rotator-full"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Interlock Closed
-#: locale/ipp-strings.c:3656
+#: locale/ipp-strings.c:3694
 msgid "printer-state-reasons.sheet-rotator-interlock-closed"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Interlock Open
-#: locale/ipp-strings.c:3658
+#: locale/ipp-strings.c:3696
 msgid "printer-state-reasons.sheet-rotator-interlock-open"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Jam
-#: locale/ipp-strings.c:3660
+#: locale/ipp-strings.c:3698
 msgid "printer-state-reasons.sheet-rotator-jam"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Life Almost Over
-#: locale/ipp-strings.c:3662
+#: locale/ipp-strings.c:3700
 msgid "printer-state-reasons.sheet-rotator-life-almost-over"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Life Over
-#: locale/ipp-strings.c:3664
+#: locale/ipp-strings.c:3702
 msgid "printer-state-reasons.sheet-rotator-life-over"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Memory Exhausted
-#: locale/ipp-strings.c:3666
+#: locale/ipp-strings.c:3704
 msgid "printer-state-reasons.sheet-rotator-memory-exhausted"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Missing
-#: locale/ipp-strings.c:3668
+#: locale/ipp-strings.c:3706
 msgid "printer-state-reasons.sheet-rotator-missing"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Motor Failure
-#: locale/ipp-strings.c:3670
+#: locale/ipp-strings.c:3708
 msgid "printer-state-reasons.sheet-rotator-motor-failure"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Near Limit
-#: locale/ipp-strings.c:3672
+#: locale/ipp-strings.c:3710
 msgid "printer-state-reasons.sheet-rotator-near-limit"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Offline
-#: locale/ipp-strings.c:3674
+#: locale/ipp-strings.c:3712
 msgid "printer-state-reasons.sheet-rotator-offline"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Opened
-#: locale/ipp-strings.c:3676
+#: locale/ipp-strings.c:3714
 msgid "printer-state-reasons.sheet-rotator-opened"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Over Temperature
-#: locale/ipp-strings.c:3678
+#: locale/ipp-strings.c:3716
 msgid "printer-state-reasons.sheet-rotator-over-temperature"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Power Saver
-#: locale/ipp-strings.c:3680
+#: locale/ipp-strings.c:3718
 msgid "printer-state-reasons.sheet-rotator-power-saver"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Recoverable Failure
-#: locale/ipp-strings.c:3682
+#: locale/ipp-strings.c:3720
 msgid "printer-state-reasons.sheet-rotator-recoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Recoverable Storage
-#: locale/ipp-strings.c:3684
+#: locale/ipp-strings.c:3722
 msgid "printer-state-reasons.sheet-rotator-recoverable-storage"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Removed
-#: locale/ipp-strings.c:3686
+#: locale/ipp-strings.c:3724
 msgid "printer-state-reasons.sheet-rotator-removed"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Resource Added
-#: locale/ipp-strings.c:3688
+#: locale/ipp-strings.c:3726
 msgid "printer-state-reasons.sheet-rotator-resource-added"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Resource Removed
-#: locale/ipp-strings.c:3690
+#: locale/ipp-strings.c:3728
 msgid "printer-state-reasons.sheet-rotator-resource-removed"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Thermistor Failure
-#: locale/ipp-strings.c:3692
+#: locale/ipp-strings.c:3730
 msgid "printer-state-reasons.sheet-rotator-thermistor-failure"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Timing Failure
-#: locale/ipp-strings.c:3694
+#: locale/ipp-strings.c:3732
 msgid "printer-state-reasons.sheet-rotator-timing-failure"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Turned Off
-#: locale/ipp-strings.c:3696
+#: locale/ipp-strings.c:3734
 msgid "printer-state-reasons.sheet-rotator-turned-off"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Turned On
-#: locale/ipp-strings.c:3698
+#: locale/ipp-strings.c:3736
 msgid "printer-state-reasons.sheet-rotator-turned-on"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Under Temperature
-#: locale/ipp-strings.c:3700
+#: locale/ipp-strings.c:3738
 msgid "printer-state-reasons.sheet-rotator-under-temperature"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Unrecoverable Failure
-#: locale/ipp-strings.c:3702
+#: locale/ipp-strings.c:3740
 msgid "printer-state-reasons.sheet-rotator-unrecoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Unrecoverable Storage Error
-#: locale/ipp-strings.c:3704
+#: locale/ipp-strings.c:3742
 msgid "printer-state-reasons.sheet-rotator-unrecoverable-storage-error"
 msgstr ""
 
 #. TRANSLATORS: Sheet Rotator Warming Up
-#: locale/ipp-strings.c:3706
+#: locale/ipp-strings.c:3744
 msgid "printer-state-reasons.sheet-rotator-warming-up"
 msgstr ""
 
 #. TRANSLATORS: Printer offline
-#: locale/ipp-strings.c:3708
+#: locale/ipp-strings.c:3746
 msgid "printer-state-reasons.shutdown"
 msgstr ""
 
 #. TRANSLATORS: Slitter Added
-#: locale/ipp-strings.c:3710
+#: locale/ipp-strings.c:3748
 msgid "printer-state-reasons.slitter-added"
 msgstr ""
 
 #. TRANSLATORS: Slitter Almost Empty
-#: locale/ipp-strings.c:3712
+#: locale/ipp-strings.c:3750
 msgid "printer-state-reasons.slitter-almost-empty"
 msgstr ""
 
 #. TRANSLATORS: Slitter Almost Full
-#: locale/ipp-strings.c:3714
+#: locale/ipp-strings.c:3752
 msgid "printer-state-reasons.slitter-almost-full"
 msgstr ""
 
 #. TRANSLATORS: Slitter At Limit
-#: locale/ipp-strings.c:3716
+#: locale/ipp-strings.c:3754
 msgid "printer-state-reasons.slitter-at-limit"
 msgstr ""
 
 #. TRANSLATORS: Slitter Closed
-#: locale/ipp-strings.c:3718
+#: locale/ipp-strings.c:3756
 msgid "printer-state-reasons.slitter-closed"
 msgstr ""
 
 #. TRANSLATORS: Slitter Configuration Change
-#: locale/ipp-strings.c:3720
+#: locale/ipp-strings.c:3758
 msgid "printer-state-reasons.slitter-configuration-change"
 msgstr ""
 
 #. TRANSLATORS: Slitter Cover Closed
-#: locale/ipp-strings.c:3722
+#: locale/ipp-strings.c:3760
 msgid "printer-state-reasons.slitter-cover-closed"
 msgstr ""
 
 #. TRANSLATORS: Slitter Cover Open
-#: locale/ipp-strings.c:3724
+#: locale/ipp-strings.c:3762
 msgid "printer-state-reasons.slitter-cover-open"
 msgstr ""
 
 #. TRANSLATORS: Slitter Empty
-#: locale/ipp-strings.c:3726
+#: locale/ipp-strings.c:3764
 msgid "printer-state-reasons.slitter-empty"
 msgstr ""
 
 #. TRANSLATORS: Slitter Full
-#: locale/ipp-strings.c:3728
+#: locale/ipp-strings.c:3766
 msgid "printer-state-reasons.slitter-full"
 msgstr ""
 
 #. TRANSLATORS: Slitter Interlock Closed
-#: locale/ipp-strings.c:3730
+#: locale/ipp-strings.c:3768
 msgid "printer-state-reasons.slitter-interlock-closed"
 msgstr ""
 
 #. TRANSLATORS: Slitter Interlock Open
-#: locale/ipp-strings.c:3732
+#: locale/ipp-strings.c:3770
 msgid "printer-state-reasons.slitter-interlock-open"
 msgstr ""
 
 #. TRANSLATORS: Slitter Jam
-#: locale/ipp-strings.c:3734
+#: locale/ipp-strings.c:3772
 msgid "printer-state-reasons.slitter-jam"
 msgstr ""
 
 #. TRANSLATORS: Slitter Life Almost Over
-#: locale/ipp-strings.c:3736
+#: locale/ipp-strings.c:3774
 msgid "printer-state-reasons.slitter-life-almost-over"
 msgstr ""
 
 #. TRANSLATORS: Slitter Life Over
-#: locale/ipp-strings.c:3738
+#: locale/ipp-strings.c:3776
 msgid "printer-state-reasons.slitter-life-over"
 msgstr ""
 
 #. TRANSLATORS: Slitter Memory Exhausted
-#: locale/ipp-strings.c:3740
+#: locale/ipp-strings.c:3778
 msgid "printer-state-reasons.slitter-memory-exhausted"
 msgstr ""
 
 #. TRANSLATORS: Slitter Missing
-#: locale/ipp-strings.c:3742
+#: locale/ipp-strings.c:3780
 msgid "printer-state-reasons.slitter-missing"
 msgstr ""
 
 #. TRANSLATORS: Slitter Motor Failure
-#: locale/ipp-strings.c:3744
+#: locale/ipp-strings.c:3782
 msgid "printer-state-reasons.slitter-motor-failure"
 msgstr ""
 
 #. TRANSLATORS: Slitter Near Limit
-#: locale/ipp-strings.c:3746
+#: locale/ipp-strings.c:3784
 msgid "printer-state-reasons.slitter-near-limit"
 msgstr ""
 
 #. TRANSLATORS: Slitter Offline
-#: locale/ipp-strings.c:3748
+#: locale/ipp-strings.c:3786
 msgid "printer-state-reasons.slitter-offline"
 msgstr ""
 
 #. TRANSLATORS: Slitter Opened
-#: locale/ipp-strings.c:3750
+#: locale/ipp-strings.c:3788
 msgid "printer-state-reasons.slitter-opened"
 msgstr ""
 
 #. TRANSLATORS: Slitter Over Temperature
-#: locale/ipp-strings.c:3752
+#: locale/ipp-strings.c:3790
 msgid "printer-state-reasons.slitter-over-temperature"
 msgstr ""
 
 #. TRANSLATORS: Slitter Power Saver
-#: locale/ipp-strings.c:3754
+#: locale/ipp-strings.c:3792
 msgid "printer-state-reasons.slitter-power-saver"
 msgstr ""
 
 #. TRANSLATORS: Slitter Recoverable Failure
-#: locale/ipp-strings.c:3756
+#: locale/ipp-strings.c:3794
 msgid "printer-state-reasons.slitter-recoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Slitter Recoverable Storage
-#: locale/ipp-strings.c:3758
+#: locale/ipp-strings.c:3796
 msgid "printer-state-reasons.slitter-recoverable-storage"
 msgstr ""
 
 #. TRANSLATORS: Slitter Removed
-#: locale/ipp-strings.c:3760
+#: locale/ipp-strings.c:3798
 msgid "printer-state-reasons.slitter-removed"
 msgstr ""
 
 #. TRANSLATORS: Slitter Resource Added
-#: locale/ipp-strings.c:3762
+#: locale/ipp-strings.c:3800
 msgid "printer-state-reasons.slitter-resource-added"
 msgstr ""
 
 #. TRANSLATORS: Slitter Resource Removed
-#: locale/ipp-strings.c:3764
+#: locale/ipp-strings.c:3802
 msgid "printer-state-reasons.slitter-resource-removed"
 msgstr ""
 
 #. TRANSLATORS: Slitter Thermistor Failure
-#: locale/ipp-strings.c:3766
+#: locale/ipp-strings.c:3804
 msgid "printer-state-reasons.slitter-thermistor-failure"
 msgstr ""
 
 #. TRANSLATORS: Slitter Timing Failure
-#: locale/ipp-strings.c:3768
+#: locale/ipp-strings.c:3806
 msgid "printer-state-reasons.slitter-timing-failure"
 msgstr ""
 
 #. TRANSLATORS: Slitter Turned Off
-#: locale/ipp-strings.c:3770
+#: locale/ipp-strings.c:3808
 msgid "printer-state-reasons.slitter-turned-off"
 msgstr ""
 
 #. TRANSLATORS: Slitter Turned On
-#: locale/ipp-strings.c:3772
+#: locale/ipp-strings.c:3810
 msgid "printer-state-reasons.slitter-turned-on"
 msgstr ""
 
 #. TRANSLATORS: Slitter Under Temperature
-#: locale/ipp-strings.c:3774
+#: locale/ipp-strings.c:3812
 msgid "printer-state-reasons.slitter-under-temperature"
 msgstr ""
 
 #. TRANSLATORS: Slitter Unrecoverable Failure
-#: locale/ipp-strings.c:3776
+#: locale/ipp-strings.c:3814
 msgid "printer-state-reasons.slitter-unrecoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Slitter Unrecoverable Storage Error
-#: locale/ipp-strings.c:3778
+#: locale/ipp-strings.c:3816
 msgid "printer-state-reasons.slitter-unrecoverable-storage-error"
 msgstr ""
 
 #. TRANSLATORS: Slitter Warming Up
-#: locale/ipp-strings.c:3780
+#: locale/ipp-strings.c:3818
 msgid "printer-state-reasons.slitter-warming-up"
 msgstr ""
 
 #. TRANSLATORS: Spool Area Full
-#: locale/ipp-strings.c:3782
+#: locale/ipp-strings.c:3820
 msgid "printer-state-reasons.spool-area-full"
 msgstr ""
 
 #. TRANSLATORS: Stacker Added
-#: locale/ipp-strings.c:3784
+#: locale/ipp-strings.c:3822
 msgid "printer-state-reasons.stacker-added"
 msgstr ""
 
 #. TRANSLATORS: Stacker Almost Empty
-#: locale/ipp-strings.c:3786
+#: locale/ipp-strings.c:3824
 msgid "printer-state-reasons.stacker-almost-empty"
 msgstr ""
 
 #. TRANSLATORS: Stacker Almost Full
-#: locale/ipp-strings.c:3788
+#: locale/ipp-strings.c:3826
 msgid "printer-state-reasons.stacker-almost-full"
 msgstr ""
 
 #. TRANSLATORS: Stacker At Limit
-#: locale/ipp-strings.c:3790
+#: locale/ipp-strings.c:3828
 msgid "printer-state-reasons.stacker-at-limit"
 msgstr ""
 
 #. TRANSLATORS: Stacker Closed
-#: locale/ipp-strings.c:3792
+#: locale/ipp-strings.c:3830
 msgid "printer-state-reasons.stacker-closed"
 msgstr ""
 
 #. TRANSLATORS: Stacker Configuration Change
-#: locale/ipp-strings.c:3794
+#: locale/ipp-strings.c:3832
 msgid "printer-state-reasons.stacker-configuration-change"
 msgstr ""
 
 #. TRANSLATORS: Stacker Cover Closed
-#: locale/ipp-strings.c:3796
+#: locale/ipp-strings.c:3834
 msgid "printer-state-reasons.stacker-cover-closed"
 msgstr ""
 
 #. TRANSLATORS: Stacker Cover Open
-#: locale/ipp-strings.c:3798
+#: locale/ipp-strings.c:3836
 msgid "printer-state-reasons.stacker-cover-open"
 msgstr ""
 
 #. TRANSLATORS: Stacker Empty
-#: locale/ipp-strings.c:3800
+#: locale/ipp-strings.c:3838
 msgid "printer-state-reasons.stacker-empty"
 msgstr ""
 
 #. TRANSLATORS: Stacker Full
-#: locale/ipp-strings.c:3802
+#: locale/ipp-strings.c:3840
 msgid "printer-state-reasons.stacker-full"
 msgstr ""
 
 #. TRANSLATORS: Stacker Interlock Closed
-#: locale/ipp-strings.c:3804
+#: locale/ipp-strings.c:3842
 msgid "printer-state-reasons.stacker-interlock-closed"
 msgstr ""
 
 #. TRANSLATORS: Stacker Interlock Open
-#: locale/ipp-strings.c:3806
+#: locale/ipp-strings.c:3844
 msgid "printer-state-reasons.stacker-interlock-open"
 msgstr ""
 
 #. TRANSLATORS: Stacker Jam
-#: locale/ipp-strings.c:3808
+#: locale/ipp-strings.c:3846
 msgid "printer-state-reasons.stacker-jam"
 msgstr ""
 
 #. TRANSLATORS: Stacker Life Almost Over
-#: locale/ipp-strings.c:3810
+#: locale/ipp-strings.c:3848
 msgid "printer-state-reasons.stacker-life-almost-over"
 msgstr ""
 
 #. TRANSLATORS: Stacker Life Over
-#: locale/ipp-strings.c:3812
+#: locale/ipp-strings.c:3850
 msgid "printer-state-reasons.stacker-life-over"
 msgstr ""
 
 #. TRANSLATORS: Stacker Memory Exhausted
-#: locale/ipp-strings.c:3814
+#: locale/ipp-strings.c:3852
 msgid "printer-state-reasons.stacker-memory-exhausted"
 msgstr ""
 
 #. TRANSLATORS: Stacker Missing
-#: locale/ipp-strings.c:3816
+#: locale/ipp-strings.c:3854
 msgid "printer-state-reasons.stacker-missing"
 msgstr ""
 
 #. TRANSLATORS: Stacker Motor Failure
-#: locale/ipp-strings.c:3818
+#: locale/ipp-strings.c:3856
 msgid "printer-state-reasons.stacker-motor-failure"
 msgstr ""
 
 #. TRANSLATORS: Stacker Near Limit
-#: locale/ipp-strings.c:3820
+#: locale/ipp-strings.c:3858
 msgid "printer-state-reasons.stacker-near-limit"
 msgstr ""
 
 #. TRANSLATORS: Stacker Offline
-#: locale/ipp-strings.c:3822
+#: locale/ipp-strings.c:3860
 msgid "printer-state-reasons.stacker-offline"
 msgstr ""
 
 #. TRANSLATORS: Stacker Opened
-#: locale/ipp-strings.c:3824
+#: locale/ipp-strings.c:3862
 msgid "printer-state-reasons.stacker-opened"
 msgstr ""
 
 #. TRANSLATORS: Stacker Over Temperature
-#: locale/ipp-strings.c:3826
+#: locale/ipp-strings.c:3864
 msgid "printer-state-reasons.stacker-over-temperature"
 msgstr ""
 
 #. TRANSLATORS: Stacker Power Saver
-#: locale/ipp-strings.c:3828
+#: locale/ipp-strings.c:3866
 msgid "printer-state-reasons.stacker-power-saver"
 msgstr ""
 
 #. TRANSLATORS: Stacker Recoverable Failure
-#: locale/ipp-strings.c:3830
+#: locale/ipp-strings.c:3868
 msgid "printer-state-reasons.stacker-recoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Stacker Recoverable Storage
-#: locale/ipp-strings.c:3832
+#: locale/ipp-strings.c:3870
 msgid "printer-state-reasons.stacker-recoverable-storage"
 msgstr ""
 
 #. TRANSLATORS: Stacker Removed
-#: locale/ipp-strings.c:3834
+#: locale/ipp-strings.c:3872
 msgid "printer-state-reasons.stacker-removed"
 msgstr ""
 
 #. TRANSLATORS: Stacker Resource Added
-#: locale/ipp-strings.c:3836
+#: locale/ipp-strings.c:3874
 msgid "printer-state-reasons.stacker-resource-added"
 msgstr ""
 
 #. TRANSLATORS: Stacker Resource Removed
-#: locale/ipp-strings.c:3838
+#: locale/ipp-strings.c:3876
 msgid "printer-state-reasons.stacker-resource-removed"
 msgstr ""
 
 #. TRANSLATORS: Stacker Thermistor Failure
-#: locale/ipp-strings.c:3840
+#: locale/ipp-strings.c:3878
 msgid "printer-state-reasons.stacker-thermistor-failure"
 msgstr ""
 
 #. TRANSLATORS: Stacker Timing Failure
-#: locale/ipp-strings.c:3842
+#: locale/ipp-strings.c:3880
 msgid "printer-state-reasons.stacker-timing-failure"
 msgstr ""
 
 #. TRANSLATORS: Stacker Turned Off
-#: locale/ipp-strings.c:3844
+#: locale/ipp-strings.c:3882
 msgid "printer-state-reasons.stacker-turned-off"
 msgstr ""
 
 #. TRANSLATORS: Stacker Turned On
-#: locale/ipp-strings.c:3846
+#: locale/ipp-strings.c:3884
 msgid "printer-state-reasons.stacker-turned-on"
 msgstr ""
 
 #. TRANSLATORS: Stacker Under Temperature
-#: locale/ipp-strings.c:3848
+#: locale/ipp-strings.c:3886
 msgid "printer-state-reasons.stacker-under-temperature"
 msgstr ""
 
 #. TRANSLATORS: Stacker Unrecoverable Failure
-#: locale/ipp-strings.c:3850
+#: locale/ipp-strings.c:3888
 msgid "printer-state-reasons.stacker-unrecoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Stacker Unrecoverable Storage Error
-#: locale/ipp-strings.c:3852
+#: locale/ipp-strings.c:3890
 msgid "printer-state-reasons.stacker-unrecoverable-storage-error"
 msgstr ""
 
 #. TRANSLATORS: Stacker Warming Up
-#: locale/ipp-strings.c:3854
+#: locale/ipp-strings.c:3892
 msgid "printer-state-reasons.stacker-warming-up"
 msgstr ""
 
 #. TRANSLATORS: Stapler Added
-#: locale/ipp-strings.c:3856
+#: locale/ipp-strings.c:3894
 msgid "printer-state-reasons.stapler-added"
 msgstr ""
 
 #. TRANSLATORS: Stapler Almost Empty
-#: locale/ipp-strings.c:3858
+#: locale/ipp-strings.c:3896
 msgid "printer-state-reasons.stapler-almost-empty"
 msgstr ""
 
 #. TRANSLATORS: Stapler Almost Full
-#: locale/ipp-strings.c:3860
+#: locale/ipp-strings.c:3898
 msgid "printer-state-reasons.stapler-almost-full"
 msgstr ""
 
 #. TRANSLATORS: Stapler At Limit
-#: locale/ipp-strings.c:3862
+#: locale/ipp-strings.c:3900
 msgid "printer-state-reasons.stapler-at-limit"
 msgstr ""
 
 #. TRANSLATORS: Stapler Closed
-#: locale/ipp-strings.c:3864
+#: locale/ipp-strings.c:3902
 msgid "printer-state-reasons.stapler-closed"
 msgstr ""
 
 #. TRANSLATORS: Stapler Configuration Change
-#: locale/ipp-strings.c:3866
+#: locale/ipp-strings.c:3904
 msgid "printer-state-reasons.stapler-configuration-change"
 msgstr ""
 
 #. TRANSLATORS: Stapler Cover Closed
-#: locale/ipp-strings.c:3868
+#: locale/ipp-strings.c:3906
 msgid "printer-state-reasons.stapler-cover-closed"
 msgstr ""
 
 #. TRANSLATORS: Stapler Cover Open
-#: locale/ipp-strings.c:3870
+#: locale/ipp-strings.c:3908
 msgid "printer-state-reasons.stapler-cover-open"
 msgstr ""
 
 #. TRANSLATORS: Stapler Empty
-#: locale/ipp-strings.c:3872
+#: locale/ipp-strings.c:3910
 msgid "printer-state-reasons.stapler-empty"
 msgstr ""
 
 #. TRANSLATORS: Stapler Full
-#: locale/ipp-strings.c:3874
+#: locale/ipp-strings.c:3912
 msgid "printer-state-reasons.stapler-full"
 msgstr ""
 
 #. TRANSLATORS: Stapler Interlock Closed
-#: locale/ipp-strings.c:3876
+#: locale/ipp-strings.c:3914
 msgid "printer-state-reasons.stapler-interlock-closed"
 msgstr ""
 
 #. TRANSLATORS: Stapler Interlock Open
-#: locale/ipp-strings.c:3878
+#: locale/ipp-strings.c:3916
 msgid "printer-state-reasons.stapler-interlock-open"
 msgstr ""
 
 #. TRANSLATORS: Stapler Jam
-#: locale/ipp-strings.c:3880
+#: locale/ipp-strings.c:3918
 msgid "printer-state-reasons.stapler-jam"
 msgstr ""
 
 #. TRANSLATORS: Stapler Life Almost Over
-#: locale/ipp-strings.c:3882
+#: locale/ipp-strings.c:3920
 msgid "printer-state-reasons.stapler-life-almost-over"
 msgstr ""
 
 #. TRANSLATORS: Stapler Life Over
-#: locale/ipp-strings.c:3884
+#: locale/ipp-strings.c:3922
 msgid "printer-state-reasons.stapler-life-over"
 msgstr ""
 
 #. TRANSLATORS: Stapler Memory Exhausted
-#: locale/ipp-strings.c:3886
+#: locale/ipp-strings.c:3924
 msgid "printer-state-reasons.stapler-memory-exhausted"
 msgstr ""
 
 #. TRANSLATORS: Stapler Missing
-#: locale/ipp-strings.c:3888
+#: locale/ipp-strings.c:3926
 msgid "printer-state-reasons.stapler-missing"
 msgstr ""
 
 #. TRANSLATORS: Stapler Motor Failure
-#: locale/ipp-strings.c:3890
+#: locale/ipp-strings.c:3928
 msgid "printer-state-reasons.stapler-motor-failure"
 msgstr ""
 
 #. TRANSLATORS: Stapler Near Limit
-#: locale/ipp-strings.c:3892
+#: locale/ipp-strings.c:3930
 msgid "printer-state-reasons.stapler-near-limit"
 msgstr ""
 
 #. TRANSLATORS: Stapler Offline
-#: locale/ipp-strings.c:3894
+#: locale/ipp-strings.c:3932
 msgid "printer-state-reasons.stapler-offline"
 msgstr ""
 
 #. TRANSLATORS: Stapler Opened
-#: locale/ipp-strings.c:3896
+#: locale/ipp-strings.c:3934
 msgid "printer-state-reasons.stapler-opened"
 msgstr ""
 
 #. TRANSLATORS: Stapler Over Temperature
-#: locale/ipp-strings.c:3898
+#: locale/ipp-strings.c:3936
 msgid "printer-state-reasons.stapler-over-temperature"
 msgstr ""
 
 #. TRANSLATORS: Stapler Power Saver
-#: locale/ipp-strings.c:3900
+#: locale/ipp-strings.c:3938
 msgid "printer-state-reasons.stapler-power-saver"
 msgstr ""
 
 #. TRANSLATORS: Stapler Recoverable Failure
-#: locale/ipp-strings.c:3902
+#: locale/ipp-strings.c:3940
 msgid "printer-state-reasons.stapler-recoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Stapler Recoverable Storage
-#: locale/ipp-strings.c:3904
+#: locale/ipp-strings.c:3942
 msgid "printer-state-reasons.stapler-recoverable-storage"
 msgstr ""
 
 #. TRANSLATORS: Stapler Removed
-#: locale/ipp-strings.c:3906
+#: locale/ipp-strings.c:3944
 msgid "printer-state-reasons.stapler-removed"
 msgstr ""
 
 #. TRANSLATORS: Stapler Resource Added
-#: locale/ipp-strings.c:3908
+#: locale/ipp-strings.c:3946
 msgid "printer-state-reasons.stapler-resource-added"
 msgstr ""
 
 #. TRANSLATORS: Stapler Resource Removed
-#: locale/ipp-strings.c:3910
+#: locale/ipp-strings.c:3948
 msgid "printer-state-reasons.stapler-resource-removed"
 msgstr ""
 
 #. TRANSLATORS: Stapler Thermistor Failure
-#: locale/ipp-strings.c:3912
+#: locale/ipp-strings.c:3950
 msgid "printer-state-reasons.stapler-thermistor-failure"
 msgstr ""
 
 #. TRANSLATORS: Stapler Timing Failure
-#: locale/ipp-strings.c:3914
+#: locale/ipp-strings.c:3952
 msgid "printer-state-reasons.stapler-timing-failure"
 msgstr ""
 
 #. TRANSLATORS: Stapler Turned Off
-#: locale/ipp-strings.c:3916
+#: locale/ipp-strings.c:3954
 msgid "printer-state-reasons.stapler-turned-off"
 msgstr ""
 
 #. TRANSLATORS: Stapler Turned On
-#: locale/ipp-strings.c:3918
+#: locale/ipp-strings.c:3956
 msgid "printer-state-reasons.stapler-turned-on"
 msgstr ""
 
 #. TRANSLATORS: Stapler Under Temperature
-#: locale/ipp-strings.c:3920
+#: locale/ipp-strings.c:3958
 msgid "printer-state-reasons.stapler-under-temperature"
 msgstr ""
 
 #. TRANSLATORS: Stapler Unrecoverable Failure
-#: locale/ipp-strings.c:3922
+#: locale/ipp-strings.c:3960
 msgid "printer-state-reasons.stapler-unrecoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Stapler Unrecoverable Storage Error
-#: locale/ipp-strings.c:3924
+#: locale/ipp-strings.c:3962
 msgid "printer-state-reasons.stapler-unrecoverable-storage-error"
 msgstr ""
 
 #. TRANSLATORS: Stapler Warming Up
-#: locale/ipp-strings.c:3926
+#: locale/ipp-strings.c:3964
 msgid "printer-state-reasons.stapler-warming-up"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Added
-#: locale/ipp-strings.c:3928
+#: locale/ipp-strings.c:3966
 msgid "printer-state-reasons.stitcher-added"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Almost Empty
-#: locale/ipp-strings.c:3930
+#: locale/ipp-strings.c:3968
 msgid "printer-state-reasons.stitcher-almost-empty"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Almost Full
-#: locale/ipp-strings.c:3932
+#: locale/ipp-strings.c:3970
 msgid "printer-state-reasons.stitcher-almost-full"
 msgstr ""
 
 #. TRANSLATORS: Stitcher At Limit
-#: locale/ipp-strings.c:3934
+#: locale/ipp-strings.c:3972
 msgid "printer-state-reasons.stitcher-at-limit"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Closed
-#: locale/ipp-strings.c:3936
+#: locale/ipp-strings.c:3974
 msgid "printer-state-reasons.stitcher-closed"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Configuration Change
-#: locale/ipp-strings.c:3938
+#: locale/ipp-strings.c:3976
 msgid "printer-state-reasons.stitcher-configuration-change"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Cover Closed
-#: locale/ipp-strings.c:3940
+#: locale/ipp-strings.c:3978
 msgid "printer-state-reasons.stitcher-cover-closed"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Cover Open
-#: locale/ipp-strings.c:3942
+#: locale/ipp-strings.c:3980
 msgid "printer-state-reasons.stitcher-cover-open"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Empty
-#: locale/ipp-strings.c:3944
+#: locale/ipp-strings.c:3982
 msgid "printer-state-reasons.stitcher-empty"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Full
-#: locale/ipp-strings.c:3946
+#: locale/ipp-strings.c:3984
 msgid "printer-state-reasons.stitcher-full"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Interlock Closed
-#: locale/ipp-strings.c:3948
+#: locale/ipp-strings.c:3986
 msgid "printer-state-reasons.stitcher-interlock-closed"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Interlock Open
-#: locale/ipp-strings.c:3950
+#: locale/ipp-strings.c:3988
 msgid "printer-state-reasons.stitcher-interlock-open"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Jam
-#: locale/ipp-strings.c:3952
+#: locale/ipp-strings.c:3990
 msgid "printer-state-reasons.stitcher-jam"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Life Almost Over
-#: locale/ipp-strings.c:3954
+#: locale/ipp-strings.c:3992
 msgid "printer-state-reasons.stitcher-life-almost-over"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Life Over
-#: locale/ipp-strings.c:3956
+#: locale/ipp-strings.c:3994
 msgid "printer-state-reasons.stitcher-life-over"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Memory Exhausted
-#: locale/ipp-strings.c:3958
+#: locale/ipp-strings.c:3996
 msgid "printer-state-reasons.stitcher-memory-exhausted"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Missing
-#: locale/ipp-strings.c:3960
+#: locale/ipp-strings.c:3998
 msgid "printer-state-reasons.stitcher-missing"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Motor Failure
-#: locale/ipp-strings.c:3962
+#: locale/ipp-strings.c:4000
 msgid "printer-state-reasons.stitcher-motor-failure"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Near Limit
-#: locale/ipp-strings.c:3964
+#: locale/ipp-strings.c:4002
 msgid "printer-state-reasons.stitcher-near-limit"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Offline
-#: locale/ipp-strings.c:3966
+#: locale/ipp-strings.c:4004
 msgid "printer-state-reasons.stitcher-offline"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Opened
-#: locale/ipp-strings.c:3968
+#: locale/ipp-strings.c:4006
 msgid "printer-state-reasons.stitcher-opened"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Over Temperature
-#: locale/ipp-strings.c:3970
+#: locale/ipp-strings.c:4008
 msgid "printer-state-reasons.stitcher-over-temperature"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Power Saver
-#: locale/ipp-strings.c:3972
+#: locale/ipp-strings.c:4010
 msgid "printer-state-reasons.stitcher-power-saver"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Recoverable Failure
-#: locale/ipp-strings.c:3974
+#: locale/ipp-strings.c:4012
 msgid "printer-state-reasons.stitcher-recoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Recoverable Storage
-#: locale/ipp-strings.c:3976
+#: locale/ipp-strings.c:4014
 msgid "printer-state-reasons.stitcher-recoverable-storage"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Removed
-#: locale/ipp-strings.c:3978
+#: locale/ipp-strings.c:4016
 msgid "printer-state-reasons.stitcher-removed"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Resource Added
-#: locale/ipp-strings.c:3980
+#: locale/ipp-strings.c:4018
 msgid "printer-state-reasons.stitcher-resource-added"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Resource Removed
-#: locale/ipp-strings.c:3982
+#: locale/ipp-strings.c:4020
 msgid "printer-state-reasons.stitcher-resource-removed"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Thermistor Failure
-#: locale/ipp-strings.c:3984
+#: locale/ipp-strings.c:4022
 msgid "printer-state-reasons.stitcher-thermistor-failure"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Timing Failure
-#: locale/ipp-strings.c:3986
+#: locale/ipp-strings.c:4024
 msgid "printer-state-reasons.stitcher-timing-failure"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Turned Off
-#: locale/ipp-strings.c:3988
+#: locale/ipp-strings.c:4026
 msgid "printer-state-reasons.stitcher-turned-off"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Turned On
-#: locale/ipp-strings.c:3990
+#: locale/ipp-strings.c:4028
 msgid "printer-state-reasons.stitcher-turned-on"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Under Temperature
-#: locale/ipp-strings.c:3992
+#: locale/ipp-strings.c:4030
 msgid "printer-state-reasons.stitcher-under-temperature"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Unrecoverable Failure
-#: locale/ipp-strings.c:3994
+#: locale/ipp-strings.c:4032
 msgid "printer-state-reasons.stitcher-unrecoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Unrecoverable Storage Error
-#: locale/ipp-strings.c:3996
+#: locale/ipp-strings.c:4034
 msgid "printer-state-reasons.stitcher-unrecoverable-storage-error"
 msgstr ""
 
 #. TRANSLATORS: Stitcher Warming Up
-#: locale/ipp-strings.c:3998
+#: locale/ipp-strings.c:4036
 msgid "printer-state-reasons.stitcher-warming-up"
 msgstr ""
 
 #. TRANSLATORS: Partially stopped
-#: locale/ipp-strings.c:4000
+#: locale/ipp-strings.c:4038
 msgid "printer-state-reasons.stopped-partly"
 msgstr ""
 
 #. TRANSLATORS: Stopping
-#: locale/ipp-strings.c:4002
+#: locale/ipp-strings.c:4040
 msgid "printer-state-reasons.stopping"
 msgstr ""
 
 #. TRANSLATORS: Subunit Added
-#: locale/ipp-strings.c:4004
+#: locale/ipp-strings.c:4042
 msgid "printer-state-reasons.subunit-added"
 msgstr ""
 
 #. TRANSLATORS: Subunit Almost Empty
-#: locale/ipp-strings.c:4006
+#: locale/ipp-strings.c:4044
 msgid "printer-state-reasons.subunit-almost-empty"
 msgstr ""
 
 #. TRANSLATORS: Subunit Almost Full
-#: locale/ipp-strings.c:4008
+#: locale/ipp-strings.c:4046
 msgid "printer-state-reasons.subunit-almost-full"
 msgstr ""
 
 #. TRANSLATORS: Subunit At Limit
-#: locale/ipp-strings.c:4010
+#: locale/ipp-strings.c:4048
 msgid "printer-state-reasons.subunit-at-limit"
 msgstr ""
 
 #. TRANSLATORS: Subunit Closed
-#: locale/ipp-strings.c:4012
+#: locale/ipp-strings.c:4050
 msgid "printer-state-reasons.subunit-closed"
 msgstr ""
 
 #. TRANSLATORS: Subunit Cooling Down
-#: locale/ipp-strings.c:4014
+#: locale/ipp-strings.c:4052
 msgid "printer-state-reasons.subunit-cooling-down"
 msgstr ""
 
 #. TRANSLATORS: Subunit Empty
-#: locale/ipp-strings.c:4016
+#: locale/ipp-strings.c:4054
 msgid "printer-state-reasons.subunit-empty"
 msgstr ""
 
 #. TRANSLATORS: Subunit Full
-#: locale/ipp-strings.c:4018
+#: locale/ipp-strings.c:4056
 msgid "printer-state-reasons.subunit-full"
 msgstr ""
 
 #. TRANSLATORS: Subunit Life Almost Over
-#: locale/ipp-strings.c:4020
+#: locale/ipp-strings.c:4058
 msgid "printer-state-reasons.subunit-life-almost-over"
 msgstr ""
 
 #. TRANSLATORS: Subunit Life Over
-#: locale/ipp-strings.c:4022
+#: locale/ipp-strings.c:4060
 msgid "printer-state-reasons.subunit-life-over"
 msgstr ""
 
 #. TRANSLATORS: Subunit Memory Exhausted
-#: locale/ipp-strings.c:4024
+#: locale/ipp-strings.c:4062
 msgid "printer-state-reasons.subunit-memory-exhausted"
 msgstr ""
 
 #. TRANSLATORS: Subunit Missing
-#: locale/ipp-strings.c:4026
+#: locale/ipp-strings.c:4064
 msgid "printer-state-reasons.subunit-missing"
 msgstr ""
 
 #. TRANSLATORS: Subunit Motor Failure
-#: locale/ipp-strings.c:4028
+#: locale/ipp-strings.c:4066
 msgid "printer-state-reasons.subunit-motor-failure"
 msgstr ""
 
 #. TRANSLATORS: Subunit Near Limit
-#: locale/ipp-strings.c:4030
+#: locale/ipp-strings.c:4068
 msgid "printer-state-reasons.subunit-near-limit"
 msgstr ""
 
 #. TRANSLATORS: Subunit Offline
-#: locale/ipp-strings.c:4032
+#: locale/ipp-strings.c:4070
 msgid "printer-state-reasons.subunit-offline"
 msgstr ""
 
 #. TRANSLATORS: Subunit Opened
-#: locale/ipp-strings.c:4034
+#: locale/ipp-strings.c:4072
 msgid "printer-state-reasons.subunit-opened"
 msgstr ""
 
 #. TRANSLATORS: Subunit Over Temperature
-#: locale/ipp-strings.c:4036
+#: locale/ipp-strings.c:4074
 msgid "printer-state-reasons.subunit-over-temperature"
 msgstr ""
 
 #. TRANSLATORS: Subunit Power Saver
-#: locale/ipp-strings.c:4038
+#: locale/ipp-strings.c:4076
 msgid "printer-state-reasons.subunit-power-saver"
 msgstr ""
 
 #. TRANSLATORS: Subunit Recoverable Failure
-#: locale/ipp-strings.c:4040
+#: locale/ipp-strings.c:4078
 msgid "printer-state-reasons.subunit-recoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Subunit Recoverable Storage
-#: locale/ipp-strings.c:4042
+#: locale/ipp-strings.c:4080
 msgid "printer-state-reasons.subunit-recoverable-storage"
 msgstr ""
 
 #. TRANSLATORS: Subunit Removed
-#: locale/ipp-strings.c:4044
+#: locale/ipp-strings.c:4082
 msgid "printer-state-reasons.subunit-removed"
 msgstr ""
 
 #. TRANSLATORS: Subunit Resource Added
-#: locale/ipp-strings.c:4046
+#: locale/ipp-strings.c:4084
 msgid "printer-state-reasons.subunit-resource-added"
 msgstr ""
 
 #. TRANSLATORS: Subunit Resource Removed
-#: locale/ipp-strings.c:4048
+#: locale/ipp-strings.c:4086
 msgid "printer-state-reasons.subunit-resource-removed"
 msgstr ""
 
 #. TRANSLATORS: Subunit Thermistor Failure
-#: locale/ipp-strings.c:4050
+#: locale/ipp-strings.c:4088
 msgid "printer-state-reasons.subunit-thermistor-failure"
 msgstr ""
 
 #. TRANSLATORS: Subunit Timing Failure
-#: locale/ipp-strings.c:4052
+#: locale/ipp-strings.c:4090
 msgid "printer-state-reasons.subunit-timing-Failure"
 msgstr ""
 
 #. TRANSLATORS: Subunit Turned Off
-#: locale/ipp-strings.c:4054
+#: locale/ipp-strings.c:4092
 msgid "printer-state-reasons.subunit-turned-off"
 msgstr ""
 
 #. TRANSLATORS: Subunit Turned On
-#: locale/ipp-strings.c:4056
+#: locale/ipp-strings.c:4094
 msgid "printer-state-reasons.subunit-turned-on"
 msgstr ""
 
 #. TRANSLATORS: Subunit Under Temperature
-#: locale/ipp-strings.c:4058
+#: locale/ipp-strings.c:4096
 msgid "printer-state-reasons.subunit-under-temperature"
 msgstr ""
 
 #. TRANSLATORS: Subunit Unrecoverable Failure
-#: locale/ipp-strings.c:4060
+#: locale/ipp-strings.c:4098
 msgid "printer-state-reasons.subunit-unrecoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Subunit Unrecoverable Storage
-#: locale/ipp-strings.c:4062
+#: locale/ipp-strings.c:4100
 msgid "printer-state-reasons.subunit-unrecoverable-storage"
 msgstr ""
 
 #. TRANSLATORS: Subunit Warming Up
-#: locale/ipp-strings.c:4064
+#: locale/ipp-strings.c:4102
 msgid "printer-state-reasons.subunit-warming-up"
 msgstr ""
 
 #. TRANSLATORS: Printer stopped responding
-#: locale/ipp-strings.c:4066
+#: locale/ipp-strings.c:4104
 msgid "printer-state-reasons.timed-out"
 msgstr ""
 
 #. TRANSLATORS: Out of toner
-#: locale/ipp-strings.c:4068
+#: locale/ipp-strings.c:4106
 msgid "printer-state-reasons.toner-empty"
 msgstr ""
 
 #. TRANSLATORS: Toner low
-#: locale/ipp-strings.c:4070
+#: locale/ipp-strings.c:4108
 msgid "printer-state-reasons.toner-low"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Added
-#: locale/ipp-strings.c:4072
+#: locale/ipp-strings.c:4110
 msgid "printer-state-reasons.trimmer-added"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Almost Empty
-#: locale/ipp-strings.c:4074
+#: locale/ipp-strings.c:4112
 msgid "printer-state-reasons.trimmer-almost-empty"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Almost Full
-#: locale/ipp-strings.c:4076
+#: locale/ipp-strings.c:4114
 msgid "printer-state-reasons.trimmer-almost-full"
 msgstr ""
 
 #. TRANSLATORS: Trimmer At Limit
-#: locale/ipp-strings.c:4078
+#: locale/ipp-strings.c:4116
 msgid "printer-state-reasons.trimmer-at-limit"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Closed
-#: locale/ipp-strings.c:4080
+#: locale/ipp-strings.c:4118
 msgid "printer-state-reasons.trimmer-closed"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Configuration Change
-#: locale/ipp-strings.c:4082
+#: locale/ipp-strings.c:4120
 msgid "printer-state-reasons.trimmer-configuration-change"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Cover Closed
-#: locale/ipp-strings.c:4084
+#: locale/ipp-strings.c:4122
 msgid "printer-state-reasons.trimmer-cover-closed"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Cover Open
-#: locale/ipp-strings.c:4086
+#: locale/ipp-strings.c:4124
 msgid "printer-state-reasons.trimmer-cover-open"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Empty
-#: locale/ipp-strings.c:4088
+#: locale/ipp-strings.c:4126
 msgid "printer-state-reasons.trimmer-empty"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Full
-#: locale/ipp-strings.c:4090
+#: locale/ipp-strings.c:4128
 msgid "printer-state-reasons.trimmer-full"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Interlock Closed
-#: locale/ipp-strings.c:4092
+#: locale/ipp-strings.c:4130
 msgid "printer-state-reasons.trimmer-interlock-closed"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Interlock Open
-#: locale/ipp-strings.c:4094
+#: locale/ipp-strings.c:4132
 msgid "printer-state-reasons.trimmer-interlock-open"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Jam
-#: locale/ipp-strings.c:4096
+#: locale/ipp-strings.c:4134
 msgid "printer-state-reasons.trimmer-jam"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Life Almost Over
-#: locale/ipp-strings.c:4098
+#: locale/ipp-strings.c:4136
 msgid "printer-state-reasons.trimmer-life-almost-over"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Life Over
-#: locale/ipp-strings.c:4100
+#: locale/ipp-strings.c:4138
 msgid "printer-state-reasons.trimmer-life-over"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Memory Exhausted
-#: locale/ipp-strings.c:4102
+#: locale/ipp-strings.c:4140
 msgid "printer-state-reasons.trimmer-memory-exhausted"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Missing
-#: locale/ipp-strings.c:4104
+#: locale/ipp-strings.c:4142
 msgid "printer-state-reasons.trimmer-missing"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Motor Failure
-#: locale/ipp-strings.c:4106
+#: locale/ipp-strings.c:4144
 msgid "printer-state-reasons.trimmer-motor-failure"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Near Limit
-#: locale/ipp-strings.c:4108
+#: locale/ipp-strings.c:4146
 msgid "printer-state-reasons.trimmer-near-limit"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Offline
-#: locale/ipp-strings.c:4110
+#: locale/ipp-strings.c:4148
 msgid "printer-state-reasons.trimmer-offline"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Opened
-#: locale/ipp-strings.c:4112
+#: locale/ipp-strings.c:4150
 msgid "printer-state-reasons.trimmer-opened"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Over Temperature
-#: locale/ipp-strings.c:4114
+#: locale/ipp-strings.c:4152
 msgid "printer-state-reasons.trimmer-over-temperature"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Power Saver
-#: locale/ipp-strings.c:4116
+#: locale/ipp-strings.c:4154
 msgid "printer-state-reasons.trimmer-power-saver"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Recoverable Failure
-#: locale/ipp-strings.c:4118
+#: locale/ipp-strings.c:4156
 msgid "printer-state-reasons.trimmer-recoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Recoverable Storage
-#: locale/ipp-strings.c:4120
+#: locale/ipp-strings.c:4158
 msgid "printer-state-reasons.trimmer-recoverable-storage"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Removed
-#: locale/ipp-strings.c:4122
+#: locale/ipp-strings.c:4160
 msgid "printer-state-reasons.trimmer-removed"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Resource Added
-#: locale/ipp-strings.c:4124
+#: locale/ipp-strings.c:4162
 msgid "printer-state-reasons.trimmer-resource-added"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Resource Removed
-#: locale/ipp-strings.c:4126
+#: locale/ipp-strings.c:4164
 msgid "printer-state-reasons.trimmer-resource-removed"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Thermistor Failure
-#: locale/ipp-strings.c:4128
+#: locale/ipp-strings.c:4166
 msgid "printer-state-reasons.trimmer-thermistor-failure"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Timing Failure
-#: locale/ipp-strings.c:4130
+#: locale/ipp-strings.c:4168
 msgid "printer-state-reasons.trimmer-timing-failure"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Turned Off
-#: locale/ipp-strings.c:4132
+#: locale/ipp-strings.c:4170
 msgid "printer-state-reasons.trimmer-turned-off"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Turned On
-#: locale/ipp-strings.c:4134
+#: locale/ipp-strings.c:4172
 msgid "printer-state-reasons.trimmer-turned-on"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Under Temperature
-#: locale/ipp-strings.c:4136
+#: locale/ipp-strings.c:4174
 msgid "printer-state-reasons.trimmer-under-temperature"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Unrecoverable Failure
-#: locale/ipp-strings.c:4138
+#: locale/ipp-strings.c:4176
 msgid "printer-state-reasons.trimmer-unrecoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Unrecoverable Storage Error
-#: locale/ipp-strings.c:4140
+#: locale/ipp-strings.c:4178
 msgid "printer-state-reasons.trimmer-unrecoverable-storage-error"
 msgstr ""
 
 #. TRANSLATORS: Trimmer Warming Up
-#: locale/ipp-strings.c:4142
+#: locale/ipp-strings.c:4180
 msgid "printer-state-reasons.trimmer-warming-up"
 msgstr ""
 
 #. TRANSLATORS: Unknown
-#: locale/ipp-strings.c:4144
+#: locale/ipp-strings.c:4182
 msgid "printer-state-reasons.unknown"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Added
-#: locale/ipp-strings.c:4146
+#: locale/ipp-strings.c:4184
 msgid "printer-state-reasons.wrapper-added"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Almost Empty
-#: locale/ipp-strings.c:4148
+#: locale/ipp-strings.c:4186
 msgid "printer-state-reasons.wrapper-almost-empty"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Almost Full
-#: locale/ipp-strings.c:4150
+#: locale/ipp-strings.c:4188
 msgid "printer-state-reasons.wrapper-almost-full"
 msgstr ""
 
 #. TRANSLATORS: Wrapper At Limit
-#: locale/ipp-strings.c:4152
+#: locale/ipp-strings.c:4190
 msgid "printer-state-reasons.wrapper-at-limit"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Closed
-#: locale/ipp-strings.c:4154
+#: locale/ipp-strings.c:4192
 msgid "printer-state-reasons.wrapper-closed"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Configuration Change
-#: locale/ipp-strings.c:4156
+#: locale/ipp-strings.c:4194
 msgid "printer-state-reasons.wrapper-configuration-change"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Cover Closed
-#: locale/ipp-strings.c:4158
+#: locale/ipp-strings.c:4196
 msgid "printer-state-reasons.wrapper-cover-closed"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Cover Open
-#: locale/ipp-strings.c:4160
+#: locale/ipp-strings.c:4198
 msgid "printer-state-reasons.wrapper-cover-open"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Empty
-#: locale/ipp-strings.c:4162
+#: locale/ipp-strings.c:4200
 msgid "printer-state-reasons.wrapper-empty"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Full
-#: locale/ipp-strings.c:4164
+#: locale/ipp-strings.c:4202
 msgid "printer-state-reasons.wrapper-full"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Interlock Closed
-#: locale/ipp-strings.c:4166
+#: locale/ipp-strings.c:4204
 msgid "printer-state-reasons.wrapper-interlock-closed"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Interlock Open
-#: locale/ipp-strings.c:4168
+#: locale/ipp-strings.c:4206
 msgid "printer-state-reasons.wrapper-interlock-open"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Jam
-#: locale/ipp-strings.c:4170
+#: locale/ipp-strings.c:4208
 msgid "printer-state-reasons.wrapper-jam"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Life Almost Over
-#: locale/ipp-strings.c:4172
+#: locale/ipp-strings.c:4210
 msgid "printer-state-reasons.wrapper-life-almost-over"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Life Over
-#: locale/ipp-strings.c:4174
+#: locale/ipp-strings.c:4212
 msgid "printer-state-reasons.wrapper-life-over"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Memory Exhausted
-#: locale/ipp-strings.c:4176
+#: locale/ipp-strings.c:4214
 msgid "printer-state-reasons.wrapper-memory-exhausted"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Missing
-#: locale/ipp-strings.c:4178
+#: locale/ipp-strings.c:4216
 msgid "printer-state-reasons.wrapper-missing"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Motor Failure
-#: locale/ipp-strings.c:4180
+#: locale/ipp-strings.c:4218
 msgid "printer-state-reasons.wrapper-motor-failure"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Near Limit
-#: locale/ipp-strings.c:4182
+#: locale/ipp-strings.c:4220
 msgid "printer-state-reasons.wrapper-near-limit"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Offline
-#: locale/ipp-strings.c:4184
+#: locale/ipp-strings.c:4222
 msgid "printer-state-reasons.wrapper-offline"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Opened
-#: locale/ipp-strings.c:4186
+#: locale/ipp-strings.c:4224
 msgid "printer-state-reasons.wrapper-opened"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Over Temperature
-#: locale/ipp-strings.c:4188
+#: locale/ipp-strings.c:4226
 msgid "printer-state-reasons.wrapper-over-temperature"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Power Saver
-#: locale/ipp-strings.c:4190
+#: locale/ipp-strings.c:4228
 msgid "printer-state-reasons.wrapper-power-saver"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Recoverable Failure
-#: locale/ipp-strings.c:4192
+#: locale/ipp-strings.c:4230
 msgid "printer-state-reasons.wrapper-recoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Recoverable Storage
-#: locale/ipp-strings.c:4194
+#: locale/ipp-strings.c:4232
 msgid "printer-state-reasons.wrapper-recoverable-storage"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Removed
-#: locale/ipp-strings.c:4196
+#: locale/ipp-strings.c:4234
 msgid "printer-state-reasons.wrapper-removed"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Resource Added
-#: locale/ipp-strings.c:4198
+#: locale/ipp-strings.c:4236
 msgid "printer-state-reasons.wrapper-resource-added"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Resource Removed
-#: locale/ipp-strings.c:4200
+#: locale/ipp-strings.c:4238
 msgid "printer-state-reasons.wrapper-resource-removed"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Thermistor Failure
-#: locale/ipp-strings.c:4202
+#: locale/ipp-strings.c:4240
 msgid "printer-state-reasons.wrapper-thermistor-failure"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Timing Failure
-#: locale/ipp-strings.c:4204
+#: locale/ipp-strings.c:4242
 msgid "printer-state-reasons.wrapper-timing-failure"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Turned Off
-#: locale/ipp-strings.c:4206
+#: locale/ipp-strings.c:4244
 msgid "printer-state-reasons.wrapper-turned-off"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Turned On
-#: locale/ipp-strings.c:4208
+#: locale/ipp-strings.c:4246
 msgid "printer-state-reasons.wrapper-turned-on"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Under Temperature
-#: locale/ipp-strings.c:4210
+#: locale/ipp-strings.c:4248
 msgid "printer-state-reasons.wrapper-under-temperature"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Unrecoverable Failure
-#: locale/ipp-strings.c:4212
+#: locale/ipp-strings.c:4250
 msgid "printer-state-reasons.wrapper-unrecoverable-failure"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Unrecoverable Storage Error
-#: locale/ipp-strings.c:4214
+#: locale/ipp-strings.c:4252
 msgid "printer-state-reasons.wrapper-unrecoverable-storage-error"
 msgstr ""
 
 #. TRANSLATORS: Wrapper Warming Up
-#: locale/ipp-strings.c:4216
+#: locale/ipp-strings.c:4254
 msgid "printer-state-reasons.wrapper-warming-up"
 msgstr ""
 
 #. TRANSLATORS: Idle
-#: locale/ipp-strings.c:4218
+#: locale/ipp-strings.c:4256
 msgid "printer-state.3"
 msgstr ""
 
 #. TRANSLATORS: Processing
-#: locale/ipp-strings.c:4220
+#: locale/ipp-strings.c:4258
 msgid "printer-state.4"
 msgstr ""
 
 #. TRANSLATORS: Stopped
-#: locale/ipp-strings.c:4222
+#: locale/ipp-strings.c:4260
 msgid "printer-state.5"
 msgstr ""
 
 #. TRANSLATORS: Printer Uptime
-#: locale/ipp-strings.c:4224
+#: locale/ipp-strings.c:4262
 msgid "printer-up-time"
 msgstr ""
 
@@ -18359,52 +18478,52 @@ msgid "processing"
 msgstr ""
 
 #. TRANSLATORS: Proof Print
-#: locale/ipp-strings.c:4226
+#: locale/ipp-strings.c:4264
 msgid "proof-print"
 msgstr ""
 
 #. TRANSLATORS: Proof Print Copies
-#: locale/ipp-strings.c:4228
+#: locale/ipp-strings.c:4266
 msgid "proof-print-copies"
 msgstr ""
 
 #. TRANSLATORS: Punching
-#: locale/ipp-strings.c:4230
+#: locale/ipp-strings.c:4268
 msgid "punching"
 msgstr ""
 
 #. TRANSLATORS: Punching Locations
-#: locale/ipp-strings.c:4232
+#: locale/ipp-strings.c:4270
 msgid "punching-locations"
 msgstr ""
 
 #. TRANSLATORS: Punching Offset
-#: locale/ipp-strings.c:4234
+#: locale/ipp-strings.c:4272
 msgid "punching-offset"
 msgstr ""
 
 #. TRANSLATORS: Punch Edge
-#: locale/ipp-strings.c:4236
+#: locale/ipp-strings.c:4274
 msgid "punching-reference-edge"
 msgstr ""
 
 #. TRANSLATORS: Bottom
-#: locale/ipp-strings.c:4238
+#: locale/ipp-strings.c:4276
 msgid "punching-reference-edge.bottom"
 msgstr ""
 
 #. TRANSLATORS: Left
-#: locale/ipp-strings.c:4240
+#: locale/ipp-strings.c:4278
 msgid "punching-reference-edge.left"
 msgstr ""
 
 #. TRANSLATORS: Right
-#: locale/ipp-strings.c:4242
+#: locale/ipp-strings.c:4280
 msgid "punching-reference-edge.right"
 msgstr ""
 
 #. TRANSLATORS: Top
-#: locale/ipp-strings.c:4244
+#: locale/ipp-strings.c:4282
 msgid "punching-reference-edge.top"
 msgstr ""
 
@@ -18418,57 +18537,57 @@ msgid "request-id uses indefinite length"
 msgstr ""
 
 #. TRANSLATORS: Requested Attributes
-#: locale/ipp-strings.c:4246
+#: locale/ipp-strings.c:4284
 msgid "requested-attributes"
 msgstr ""
 
 #. TRANSLATORS: Retry Interval
-#: locale/ipp-strings.c:4248
+#: locale/ipp-strings.c:4286
 msgid "retry-interval"
 msgstr ""
 
 #. TRANSLATORS: Retry Timeout
-#: locale/ipp-strings.c:4250
+#: locale/ipp-strings.c:4288
 msgid "retry-time-out"
 msgstr ""
 
 #. TRANSLATORS: Save Disposition
-#: locale/ipp-strings.c:4252
+#: locale/ipp-strings.c:4290
 msgid "save-disposition"
 msgstr ""
 
 #. TRANSLATORS: None
-#: locale/ipp-strings.c:4254
+#: locale/ipp-strings.c:4292
 msgid "save-disposition.none"
 msgstr ""
 
 #. TRANSLATORS: Print and Save
-#: locale/ipp-strings.c:4256
+#: locale/ipp-strings.c:4294
 msgid "save-disposition.print-save"
 msgstr ""
 
 #. TRANSLATORS: Save Only
-#: locale/ipp-strings.c:4258
+#: locale/ipp-strings.c:4296
 msgid "save-disposition.save-only"
 msgstr ""
 
 #. TRANSLATORS: Save Document Format
-#: locale/ipp-strings.c:4260
+#: locale/ipp-strings.c:4298
 msgid "save-document-format"
 msgstr ""
 
 #. TRANSLATORS: Save Info
-#: locale/ipp-strings.c:4262
+#: locale/ipp-strings.c:4300
 msgid "save-info"
 msgstr ""
 
 #. TRANSLATORS: Save Location
-#: locale/ipp-strings.c:4264
+#: locale/ipp-strings.c:4302
 msgid "save-location"
 msgstr ""
 
 #. TRANSLATORS: Save Name
-#: locale/ipp-strings.c:4266
+#: locale/ipp-strings.c:4304
 msgid "save-name"
 msgstr ""
 
@@ -18481,61 +18600,61 @@ msgid "scheduler is running"
 msgstr ""
 
 #. TRANSLATORS: Separator Sheets
-#: locale/ipp-strings.c:4268
+#: locale/ipp-strings.c:4306
 msgid "separator-sheets"
 msgstr ""
 
 #. TRANSLATORS: Type of Separator Sheets
-#: locale/ipp-strings.c:4270
+#: locale/ipp-strings.c:4308
 msgid "separator-sheets-type"
 msgstr ""
 
 #. TRANSLATORS: Start and End Sheets
-#: locale/ipp-strings.c:4272
+#: locale/ipp-strings.c:4310
 msgid "separator-sheets-type.both-sheets"
 msgstr ""
 
 #. TRANSLATORS: End Sheet
-#: locale/ipp-strings.c:4274
+#: locale/ipp-strings.c:4312
 msgid "separator-sheets-type.end-sheet"
 msgstr ""
 
 #. TRANSLATORS: None
-#: locale/ipp-strings.c:4276
+#: locale/ipp-strings.c:4314
 msgid "separator-sheets-type.none"
 msgstr ""
 
 #. TRANSLATORS: Slip Sheets
-#: locale/ipp-strings.c:4278
+#: locale/ipp-strings.c:4316
 msgid "separator-sheets-type.slip-sheets"
 msgstr ""
 
 #. TRANSLATORS: Start Sheet
-#: locale/ipp-strings.c:4280
+#: locale/ipp-strings.c:4318
 msgid "separator-sheets-type.start-sheet"
 msgstr ""
 
 #. TRANSLATORS: 2-Sided Printing
-#: locale/ipp-strings.c:4282
+#: locale/ipp-strings.c:4320
 msgid "sides"
 msgstr ""
 
 #. TRANSLATORS: Off
-#: locale/ipp-strings.c:4284
+#: locale/ipp-strings.c:4322
 msgid "sides.one-sided"
 msgstr ""
 
 #. TRANSLATORS: On (Portrait)
-#: locale/ipp-strings.c:4286
+#: locale/ipp-strings.c:4324
 msgid "sides.two-sided-long-edge"
 msgstr ""
 
 #. TRANSLATORS: On (Landscape)
-#: locale/ipp-strings.c:4288
+#: locale/ipp-strings.c:4326
 msgid "sides.two-sided-short-edge"
 msgstr ""
 
-#: cups/adminutil.c:1384
+#: cups/adminutil.c:1380
 #, c-format
 msgid "stat of %s failed: %s"
 msgstr ""
@@ -18545,72 +18664,72 @@ msgid "status\t\tShow status of daemon and queue."
 msgstr ""
 
 #. TRANSLATORS: Status Message
-#: locale/ipp-strings.c:4290
+#: locale/ipp-strings.c:4328
 msgid "status-message"
 msgstr ""
 
 #. TRANSLATORS: Staple
-#: locale/ipp-strings.c:4292
+#: locale/ipp-strings.c:4330
 msgid "stitching"
 msgstr ""
 
 #. TRANSLATORS: Stitching Angle
-#: locale/ipp-strings.c:4294
+#: locale/ipp-strings.c:4332
 msgid "stitching-angle"
 msgstr ""
 
 #. TRANSLATORS: Stitching Locations
-#: locale/ipp-strings.c:4296
+#: locale/ipp-strings.c:4334
 msgid "stitching-locations"
 msgstr ""
 
 #. TRANSLATORS: Staple Method
-#: locale/ipp-strings.c:4298
+#: locale/ipp-strings.c:4336
 msgid "stitching-method"
 msgstr ""
 
 #. TRANSLATORS: Automatic
-#: locale/ipp-strings.c:4300
+#: locale/ipp-strings.c:4338
 msgid "stitching-method.auto"
 msgstr ""
 
 #. TRANSLATORS: Crimp
-#: locale/ipp-strings.c:4302
+#: locale/ipp-strings.c:4340
 msgid "stitching-method.crimp"
 msgstr ""
 
 #. TRANSLATORS: Wire
-#: locale/ipp-strings.c:4304
+#: locale/ipp-strings.c:4342
 msgid "stitching-method.wire"
 msgstr ""
 
 #. TRANSLATORS: Stitching Offset
-#: locale/ipp-strings.c:4306
+#: locale/ipp-strings.c:4344
 msgid "stitching-offset"
 msgstr ""
 
 #. TRANSLATORS: Staple Edge
-#: locale/ipp-strings.c:4308
+#: locale/ipp-strings.c:4346
 msgid "stitching-reference-edge"
 msgstr ""
 
 #. TRANSLATORS: Bottom
-#: locale/ipp-strings.c:4310
+#: locale/ipp-strings.c:4348
 msgid "stitching-reference-edge.bottom"
 msgstr ""
 
 #. TRANSLATORS: Left
-#: locale/ipp-strings.c:4312
+#: locale/ipp-strings.c:4350
 msgid "stitching-reference-edge.left"
 msgstr ""
 
 #. TRANSLATORS: Right
-#: locale/ipp-strings.c:4314
+#: locale/ipp-strings.c:4352
 msgid "stitching-reference-edge.right"
 msgstr ""
 
 #. TRANSLATORS: Top
-#: locale/ipp-strings.c:4316
+#: locale/ipp-strings.c:4354
 msgid "stitching-reference-edge.top"
 msgstr ""
 
@@ -18619,62 +18738,62 @@ msgid "stopped"
 msgstr ""
 
 #. TRANSLATORS: Subject
-#: locale/ipp-strings.c:4318
+#: locale/ipp-strings.c:4356
 msgid "subject"
 msgstr ""
 
 #. TRANSLATORS: Subscription Privacy Attributes
-#: locale/ipp-strings.c:4320
+#: locale/ipp-strings.c:4358
 msgid "subscription-privacy-attributes"
 msgstr ""
 
 #. TRANSLATORS: All
-#: locale/ipp-strings.c:4322
+#: locale/ipp-strings.c:4360
 msgid "subscription-privacy-attributes.all"
 msgstr ""
 
 #. TRANSLATORS: Default
-#: locale/ipp-strings.c:4324
+#: locale/ipp-strings.c:4362
 msgid "subscription-privacy-attributes.default"
 msgstr ""
 
 #. TRANSLATORS: None
-#: locale/ipp-strings.c:4326
+#: locale/ipp-strings.c:4364
 msgid "subscription-privacy-attributes.none"
 msgstr ""
 
 #. TRANSLATORS: Subscription Description
-#: locale/ipp-strings.c:4328
+#: locale/ipp-strings.c:4366
 msgid "subscription-privacy-attributes.subscription-description"
 msgstr ""
 
 #. TRANSLATORS: Subscription Template
-#: locale/ipp-strings.c:4330
+#: locale/ipp-strings.c:4368
 msgid "subscription-privacy-attributes.subscription-template"
 msgstr ""
 
 #. TRANSLATORS: Subscription Privacy Scope
-#: locale/ipp-strings.c:4332
+#: locale/ipp-strings.c:4370
 msgid "subscription-privacy-scope"
 msgstr ""
 
 #. TRANSLATORS: All
-#: locale/ipp-strings.c:4334
+#: locale/ipp-strings.c:4372
 msgid "subscription-privacy-scope.all"
 msgstr ""
 
 #. TRANSLATORS: Default
-#: locale/ipp-strings.c:4336
+#: locale/ipp-strings.c:4374
 msgid "subscription-privacy-scope.default"
 msgstr ""
 
 #. TRANSLATORS: None
-#: locale/ipp-strings.c:4338
+#: locale/ipp-strings.c:4376
 msgid "subscription-privacy-scope.none"
 msgstr ""
 
 #. TRANSLATORS: Owner
-#: locale/ipp-strings.c:4340
+#: locale/ipp-strings.c:4378
 msgid "subscription-privacy-scope.owner"
 msgstr ""
 
@@ -18689,142 +18808,142 @@ msgid "system default destination: %s/%s"
 msgstr ""
 
 #. TRANSLATORS: T33 Subaddress
-#: locale/ipp-strings.c:4342
+#: locale/ipp-strings.c:4380
 msgid "t33-subaddress"
 msgstr ""
 
 #. TRANSLATORS: To Name
-#: locale/ipp-strings.c:4344
+#: locale/ipp-strings.c:4382
 msgid "to-name"
 msgstr ""
 
 #. TRANSLATORS: Transmission Status
-#: locale/ipp-strings.c:4346
+#: locale/ipp-strings.c:4384
 msgid "transmission-status"
 msgstr ""
 
 #. TRANSLATORS: Pending
-#: locale/ipp-strings.c:4348
+#: locale/ipp-strings.c:4386
 msgid "transmission-status.3"
 msgstr ""
 
 #. TRANSLATORS: Pending Retry
-#: locale/ipp-strings.c:4350
+#: locale/ipp-strings.c:4388
 msgid "transmission-status.4"
 msgstr ""
 
 #. TRANSLATORS: Processing
-#: locale/ipp-strings.c:4352
+#: locale/ipp-strings.c:4390
 msgid "transmission-status.5"
 msgstr ""
 
 #. TRANSLATORS: Canceled
-#: locale/ipp-strings.c:4354
+#: locale/ipp-strings.c:4392
 msgid "transmission-status.7"
 msgstr ""
 
 #. TRANSLATORS: Aborted
-#: locale/ipp-strings.c:4356
+#: locale/ipp-strings.c:4394
 msgid "transmission-status.8"
 msgstr ""
 
 #. TRANSLATORS: Completed
-#: locale/ipp-strings.c:4358
+#: locale/ipp-strings.c:4396
 msgid "transmission-status.9"
 msgstr ""
 
 #. TRANSLATORS: Cut
-#: locale/ipp-strings.c:4360
+#: locale/ipp-strings.c:4398
 msgid "trimming"
 msgstr ""
 
 #. TRANSLATORS: Cut Position
-#: locale/ipp-strings.c:4362
+#: locale/ipp-strings.c:4400
 msgid "trimming-offset"
 msgstr ""
 
 #. TRANSLATORS: Cut Edge
-#: locale/ipp-strings.c:4364
+#: locale/ipp-strings.c:4402
 msgid "trimming-reference-edge"
 msgstr ""
 
 #. TRANSLATORS: Bottom
-#: locale/ipp-strings.c:4366
+#: locale/ipp-strings.c:4404
 msgid "trimming-reference-edge.bottom"
 msgstr ""
 
 #. TRANSLATORS: Left
-#: locale/ipp-strings.c:4368
+#: locale/ipp-strings.c:4406
 msgid "trimming-reference-edge.left"
 msgstr ""
 
 #. TRANSLATORS: Right
-#: locale/ipp-strings.c:4370
+#: locale/ipp-strings.c:4408
 msgid "trimming-reference-edge.right"
 msgstr ""
 
 #. TRANSLATORS: Top
-#: locale/ipp-strings.c:4372
+#: locale/ipp-strings.c:4410
 msgid "trimming-reference-edge.top"
 msgstr ""
 
 #. TRANSLATORS: Type of Cut
-#: locale/ipp-strings.c:4374
+#: locale/ipp-strings.c:4412
 msgid "trimming-type"
 msgstr ""
 
 #. TRANSLATORS: Draw Line
-#: locale/ipp-strings.c:4376
+#: locale/ipp-strings.c:4414
 msgid "trimming-type.draw-line"
 msgstr ""
 
 #. TRANSLATORS: Full
-#: locale/ipp-strings.c:4378
+#: locale/ipp-strings.c:4416
 msgid "trimming-type.full"
 msgstr ""
 
 #. TRANSLATORS: Partial
-#: locale/ipp-strings.c:4380
+#: locale/ipp-strings.c:4418
 msgid "trimming-type.partial"
 msgstr ""
 
 #. TRANSLATORS: Perforate
-#: locale/ipp-strings.c:4382
+#: locale/ipp-strings.c:4420
 msgid "trimming-type.perforate"
 msgstr ""
 
 #. TRANSLATORS: Score
-#: locale/ipp-strings.c:4384
+#: locale/ipp-strings.c:4422
 msgid "trimming-type.score"
 msgstr ""
 
 #. TRANSLATORS: Tab
-#: locale/ipp-strings.c:4386
+#: locale/ipp-strings.c:4424
 msgid "trimming-type.tab"
 msgstr ""
 
 #. TRANSLATORS: Cut After
-#: locale/ipp-strings.c:4388
+#: locale/ipp-strings.c:4426
 msgid "trimming-when"
 msgstr ""
 
 #. TRANSLATORS: Every Document
-#: locale/ipp-strings.c:4390
+#: locale/ipp-strings.c:4428
 msgid "trimming-when.after-documents"
 msgstr ""
 
 #. TRANSLATORS: Job
-#: locale/ipp-strings.c:4392
+#: locale/ipp-strings.c:4430
 msgid "trimming-when.after-job"
 msgstr ""
 
 #. TRANSLATORS: Every Set
-#: locale/ipp-strings.c:4394
+#: locale/ipp-strings.c:4432
 msgid "trimming-when.after-sets"
 msgstr ""
 
 #. TRANSLATORS: Every Page
-#: locale/ipp-strings.c:4396
+#: locale/ipp-strings.c:4434
 msgid "trimming-when.after-sheets"
 msgstr ""
 
@@ -18841,57 +18960,57 @@ msgid "variable-bindings uses indefinite length"
 msgstr ""
 
 #. TRANSLATORS: X Accuracy
-#: locale/ipp-strings.c:4398
+#: locale/ipp-strings.c:4436
 msgid "x-accuracy"
 msgstr ""
 
 #. TRANSLATORS: X Dimension
-#: locale/ipp-strings.c:4400
+#: locale/ipp-strings.c:4438
 msgid "x-dimension"
 msgstr ""
 
 #. TRANSLATORS: X Offset
-#: locale/ipp-strings.c:4402
+#: locale/ipp-strings.c:4440
 msgid "x-offset"
 msgstr ""
 
 #. TRANSLATORS: X Origin
-#: locale/ipp-strings.c:4404
+#: locale/ipp-strings.c:4442
 msgid "x-origin"
 msgstr ""
 
 #. TRANSLATORS: Y Accuracy
-#: locale/ipp-strings.c:4406
+#: locale/ipp-strings.c:4444
 msgid "y-accuracy"
 msgstr ""
 
 #. TRANSLATORS: Y Dimension
-#: locale/ipp-strings.c:4408
+#: locale/ipp-strings.c:4446
 msgid "y-dimension"
 msgstr ""
 
 #. TRANSLATORS: Y Offset
-#: locale/ipp-strings.c:4410
+#: locale/ipp-strings.c:4448
 msgid "y-offset"
 msgstr ""
 
 #. TRANSLATORS: Y Origin
-#: locale/ipp-strings.c:4412
+#: locale/ipp-strings.c:4450
 msgid "y-origin"
 msgstr ""
 
 #. TRANSLATORS: Z Accuracy
-#: locale/ipp-strings.c:4414
+#: locale/ipp-strings.c:4452
 msgid "z-accuracy"
 msgstr ""
 
 #. TRANSLATORS: Z Dimension
-#: locale/ipp-strings.c:4416
+#: locale/ipp-strings.c:4454
 msgid "z-dimension"
 msgstr ""
 
 #. TRANSLATORS: Z Offset
-#: locale/ipp-strings.c:4418
+#: locale/ipp-strings.c:4456
 msgid "z-offset"
 msgstr ""
 
@@ -18931,6 +19050,6 @@ msgstr ""
 msgid "{}                      URI"
 msgstr ""
 
-#: cups/dest.c:1864
+#: cups/dest.c:1863
 msgid "~/.cups/lpoptions file names default destination that does not exist."
 msgstr ""
index 0c69de576a861564487e8d87abecd2bfe177d618..aedc92fb702ea95b45042944847aaf04b3974012 100644 (file)
 "--name regex            Match service name to regular expression" = "--name regex            Match service name to regular expression";
 "--no-web-forms          Disable web forms for media and supplies" = "--no-web-forms          Disable web forms for media and supplies";
 "--not expression        Unary NOT of expression" = "--not expression        Unary NOT of expression";
+"--pam-service service   Use the named PAM service" = "--pam-service service   Use the named PAM service";
 "--path regex            Match resource path to regular expression" = "--path regex            Match resource path to regular expression";
 "--port number[-number]  Match port to number or range" = "--port number[-number]  Match port to number or range";
 "--print                 Print URI if true" = "--print                 Print URI if true";
 "-9" = "-9";
 "-90" = "-90";
 "-95" = "-95";
+"-A                      Enable authentication" = "-A                      Enable authentication";
 "-C                      Send requests using chunking (default)" = "-C                      Send requests using chunking (default)";
 "-D description          Specify the textual description of the printer" = "-D description          Specify the textual description of the printer";
 "-D device-uri           Set the device URI for the printer" = "-D device-uri           Set the device URI for the printer";
 "-d                      Show the default destination" = "-d                      Show the default destination";
 "-d destination          Set default destination" = "-d destination          Set default destination";
 "-d destination          Set the named destination as the server default" = "-d destination          Set the named destination as the server default";
+"-d destination          Specify the destination" = "-d destination          Specify the destination";
 "-d name=value           Set named variable to value" = "-d name=value           Set named variable to value";
 "-d regex                Match domain to regular expression" = "-d regex                Match domain to regular expression";
 "-d spool-directory      Set spool directory" = "-d spool-directory      Set spool directory";
 "30 mm/sec." = "30 mm/sec.";
 "300 mm/sec." = "300 mm/sec.";
 "300dpi" = "300dpi";
+"30859 Paint Can Label" = "30859 Paint Can Label";
 "35" = "35";
 "360dpi" = "360dpi";
 "360x180dpi" = "360x180dpi";
 "CustominTearInterval" = "CustominTearInterval";
 "Cut" = "Cut";
 "Cutter" = "Cutter";
+"DYMO" = "DYMO";
 "Dark" = "Dark";
 "Darkness" = "Darkness";
 "Data file sent successfully." = "Data file sent successfully.";
 "Document #%d does not exist in job #%d." = "Document #%d does not exist in job #%d.";
 "Draft" = "Draft";
 "Duplexer" = "Duplexer";
-"Dymo" = "Dymo";
 "EPL1 Label Printer" = "EPL1 Label Printer";
 "EPL2 Label Printer" = "EPL2 Label Printer";
 "Edit Configuration File" = "Edit Configuration File";
 "Local printer created." = "Local printer created.";
 "Long-Edge (Portrait)" = "Long-Edge (Portrait)";
 "Looking for printer." = "Looking for printer.";
+"Main Roll" = "Main Roll";
 "Manual Feed" = "Manual Feed";
 "Media Size" = "Media Size";
 "Media Source" = "Media Source";
 "Rewind" = "Rewind";
 "SEQUENCE uses indefinite length" = "SEQUENCE uses indefinite length";
 "SSL/TLS Negotiation Error" = "SSL/TLS Negotiation Error";
+"Second Roll (DUO/Twin Only)" = "Second Roll (DUO/Twin Only)";
 "See Other" = "See Other";
 "See remote printer." = "See remote printer.";
 "Self-signed credentials are blocked." = "Self-signed credentials are blocked.";
 "finishing-template.trim-after-job" = "Trim After Job";
 // TRANSLATORS: Trim After Every Page
 "finishing-template.trim-after-pages" = "Trim After Every Page";
+// TRANSLATORS: Trim After Every Set
+"finishing-template.trim-after-sets" = "Trim After Every Set";
+// TRANSLATORS: Trim After Every Page
+"finishing-template.trim-after-sheets" = "Trim After Every Page";
 // TRANSLATORS: Finishings
 "finishings" = "Finishings";
 // TRANSLATORS: Finishings
 // TRANSLATORS: Job Accounting User ID
 "job-accounting-user-id" = "Job Accounting User ID";
 // TRANSLATORS: Job Cancel After
-"job-cancel-after" = "job-cancel-after";
+"job-cancel-after" = "Cancel job after";
 // TRANSLATORS: Copies
 "job-copies" = "Copies";
 // TRANSLATORS: Back Cover
 // TRANSLATORS: Job Recipient Name
 "job-recipient-name" = "Job Recipient Name";
 // TRANSLATORS: Job Retain Until
-"job-retain-until" = "job-retain-until";
+"job-retain-until" = "Retain job until";
 // TRANSLATORS: Job Retain Until Interval
-"job-retain-until-interval" = "job-retain-until-interval";
+"job-retain-until-interval" = "Retain job until interval";
 // TRANSLATORS: Job Retain Until Time
-"job-retain-until-time" = "job-retain-until-time";
+"job-retain-until-time" = "Retain job until time";
 // TRANSLATORS: End Of Day
-"job-retain-until.end-of-day" = "job-retain-until.end-of-day";
+"job-retain-until.end-of-day" = "End of day";
 // TRANSLATORS: End Of Month
-"job-retain-until.end-of-month" = "job-retain-until.end-of-month";
+"job-retain-until.end-of-month" = "End of month";
 // TRANSLATORS: End Of Week
-"job-retain-until.end-of-week" = "job-retain-until.end-of-week";
+"job-retain-until.end-of-week" = "End of week";
 // TRANSLATORS: Indefinite
-"job-retain-until.indefinite" = "job-retain-until.indefinite";
+"job-retain-until.indefinite" = "Indefinitely";
 // TRANSLATORS: None
-"job-retain-until.none" = "job-retain-until.none";
+"job-retain-until.none" = "Never";
 // TRANSLATORS: Job Save Disposition
 "job-save-disposition" = "Job Save Disposition";
 // TRANSLATORS: Job Sheet Message
 "media-type.cardstock" = "Cardstock";
 // TRANSLATORS: CD
 "media-type.cd" = "CD";
+// TRANSLATORS: Photo Advanced Paper
+"media-type.com.hp.advanced-photo" = "Photo Advanced Paper";
+// TRANSLATORS: Brochure Glossy Paper
+"media-type.com.hp.brochure-glossy" = "Brochure Glossy Paper";
+// TRANSLATORS: Brochure Matte Paper
+"media-type.com.hp.brochure-matte" = "Brochure Matte Paper";
+// TRANSLATORS: Matte Coverstock
+"media-type.com.hp.cover-matte" = "Matte Coverstock";
+// TRANSLATORS: EcoSMART Lite Paper
+"media-type.com.hp.ecosmart-lite" = "EcoSMART Lite Paper";
+// TRANSLATORS: Everyday Glossy Paper
+"media-type.com.hp.everyday-glossy" = "Everyday Glossy Paper";
+// TRANSLATORS: Everyday Matte Paper
+"media-type.com.hp.everyday-matte" = "Everyday Matte Paper";
+// TRANSLATORS: Extra Heavyweight Paper
+"media-type.com.hp.extra-heavy" = "Extra Heavyweight Paper";
+// TRANSLATORS: Intermediate Paper
+"media-type.com.hp.intermediate" = "Intermediate Paper";
+// TRANSLATORS: Mid-Weight Paper
+"media-type.com.hp.mid-weight" = "Mid-Weight Paper";
+// TRANSLATORS: Inkjet Premium Paper
+"media-type.com.hp.premium-inkjet" = "Inkjet Premium Paper";
+// TRANSLATORS: Photo Premium Paper
+"media-type.com.hp.premium-photo" = "Photo Premium Paper";
+// TRANSLATORS: Premium Matte Presentation Paper
+"media-type.com.hp.premium-presentation-matte" = "Premium Matte Presentation Paper";
 // TRANSLATORS: Continuous
 "media-type.continuous" = "Continuous";
 // TRANSLATORS: Continuous Long
 "media-type.image-setter-paper" = "Image Setter Paper";
 // TRANSLATORS: Imaging Cylinder
 "media-type.imaging-cylinder" = "Imaging Cylinder";
+// TRANSLATORS: Photo Paper Plus Glossy II
+"media-type.jp.co.canon-photo-paper-plus-glossy-ii" = "Photo Paper Plus Glossy II";
+// TRANSLATORS: Photo Paper Pro Platinum
+"media-type.jp.co.canon-photo-paper-pro-platinum" = "Photo Paper Pro Platinum";
+// TRANSLATORS: Photo Paper Plus Glossy II
+"media-type.jp.co.canon_photo-paper-plus-glossy-ii" = "Photo Paper Plus Glossy II";
+// TRANSLATORS: Photo Paper Pro Platinum
+"media-type.jp.co.canon_photo-paper-pro-platinum" = "Photo Paper Pro Platinum";
 // TRANSLATORS: Labels
 "media-type.labels" = "Labels";
 // TRANSLATORS: Colored Labels
 // TRANSLATORS: Envelope Chou 3
 "media.jpn_chou3_120x235mm" = "Envelope Chou 3";
 // TRANSLATORS: Envelope Chou 40
-"media.jpn_chou40_90x225mm" = "media.jpn_chou40_90x225mm";
+"media.jpn_chou40_90x225mm" = "Envelope Chou 40";
 // TRANSLATORS: Envelope Chou 4
 "media.jpn_chou4_90x205mm" = "Envelope Chou 4";
 // TRANSLATORS: Hagaki
 // TRANSLATORS: Print Optimization
 "print-content-optimize" = "Print Optimization";
 // TRANSLATORS: Print Content Optimize Actual
-"print-content-optimize-actual" = "print-content-optimize-actual";
+"print-content-optimize-actual" = "Print Optimization";
 // TRANSLATORS: Automatic
 "print-content-optimize.auto" = "Automatic";
 // TRANSLATORS: Graphics
 "print-content-optimize.graphic" = "Graphics";
 // TRANSLATORS: Graphics
-"print-content-optimize.graphics" = "print-content-optimize.graphics";
+"print-content-optimize.graphics" = "Graphics";
 // TRANSLATORS: Photo
 "print-content-optimize.photo" = "Photo";
 // TRANSLATORS: Text
 // TRANSLATORS: Text and Graphics
 "print-content-optimize.text-and-graphic" = "Text and Graphics";
 // TRANSLATORS: Text And Graphics
-"print-content-optimize.text-and-graphics" = "print-content-optimize.text-and-graphics";
+"print-content-optimize.text-and-graphics" = "Text and Graphics";
 // TRANSLATORS: Print Objects
 "print-objects" = "Print Objects";
 // TRANSLATORS: Print Quality
 "printer %s/%s is idle.  enabled since %s" = "printer %s/%s is idle.  enabled since %s";
 "printer %s/%s now printing %s-%d.  enabled since %s" = "printer %s/%s now printing %s-%d.  enabled since %s";
 // TRANSLATORS: Printer Kind
-"printer-kind" = "printer-kind";
+"printer-kind" = "Printer Kind";
 // TRANSLATORS: Disc
-"printer-kind.disc" = "printer-kind.disc";
+"printer-kind.disc" = "Disc";
 // TRANSLATORS: Document
-"printer-kind.document" = "printer-kind.document";
+"printer-kind.document" = "Document";
 // TRANSLATORS: Envelope
-"printer-kind.envelope" = "printer-kind.envelope";
+"printer-kind.envelope" = "Envelope";
 // TRANSLATORS: Label
-"printer-kind.label" = "printer-kind.label";
+"printer-kind.label" = "Label";
 // TRANSLATORS: Large Format
-"printer-kind.large-format" = "printer-kind.large-format";
+"printer-kind.large-format" = "Large format";
 // TRANSLATORS: Photo
-"printer-kind.photo" = "printer-kind.photo";
+"printer-kind.photo" = "Photo";
 // TRANSLATORS: Postcard
-"printer-kind.postcard" = "printer-kind.postcard";
+"printer-kind.postcard" = "Postcard";
 // TRANSLATORS: Receipt
-"printer-kind.receipt" = "printer-kind.receipt";
+"printer-kind.receipt" = "Receipt";
 // TRANSLATORS: Roll
-"printer-kind.roll" = "printer-kind.roll";
+"printer-kind.roll" = "Roll";
 // TRANSLATORS: Message From Operator
 "printer-message-from-operator" = "Message From Operator";
 // TRANSLATORS: Print Resolution
 // TRANSLATORS: Fan Failure
 "printer-state-reasons.fan-failure" = "Fan Failure";
 // TRANSLATORS: Fax Modem Life Almost Over
-"printer-state-reasons.fax-modem-life-almost-over" = "printer-state-reasons.fax-modem-life-almost-over";
+"printer-state-reasons.fax-modem-life-almost-over" = "Fax Modem Life Almost Over";
 // TRANSLATORS: Fax Modem Life Over
-"printer-state-reasons.fax-modem-life-over" = "printer-state-reasons.fax-modem-life-over";
+"printer-state-reasons.fax-modem-life-over" = "Fax Modem Life Over";
 // TRANSLATORS: Fax Modem Missing
-"printer-state-reasons.fax-modem-missing" = "printer-state-reasons.fax-modem-missing";
+"printer-state-reasons.fax-modem-missing" = "Fax Modem Missing";
 // TRANSLATORS: Fax Modem Turned Off
-"printer-state-reasons.fax-modem-turned-off" = "printer-state-reasons.fax-modem-turned-off";
+"printer-state-reasons.fax-modem-turned-off" = "Fax Modem Turned Off";
 // TRANSLATORS: Fax Modem Turned On
-"printer-state-reasons.fax-modem-turned-on" = "printer-state-reasons.fax-modem-turned-on";
+"printer-state-reasons.fax-modem-turned-on" = "Fax Modem Turned On";
 // TRANSLATORS: Folder Added
 "printer-state-reasons.folder-added" = "Folder Added";
 // TRANSLATORS: Folder Almost Empty
 // TRANSLATORS: Input Media Size Change
 "printer-state-reasons.input-media-size-change" = "Input Media Size Change";
 // TRANSLATORS: Input Media Tray Failure
-"printer-state-reasons.input-media-tray-failure" = "printer-state-reasons.input-media-tray-failure";
+"printer-state-reasons.input-media-tray-failure" = "Input Media Tray Failure";
 // TRANSLATORS: Input Media Tray Feed Error
-"printer-state-reasons.input-media-tray-feed-error" = "printer-state-reasons.input-media-tray-feed-error";
+"printer-state-reasons.input-media-tray-feed-error" = "Input Media Tray Feed Error";
 // TRANSLATORS: Input Media Tray Jam
-"printer-state-reasons.input-media-tray-jam" = "printer-state-reasons.input-media-tray-jam";
+"printer-state-reasons.input-media-tray-jam" = "Input Media Tray Jam";
 // TRANSLATORS: Input Media Type Change
 "printer-state-reasons.input-media-type-change" = "Input Media Type Change";
 // TRANSLATORS: Input Media Weight Change
 "printer-state-reasons.input-media-weight-change" = "Input Media Weight Change";
 // TRANSLATORS: Input Pick Roller Failure
-"printer-state-reasons.input-pick-roller-failure" = "printer-state-reasons.input-pick-roller-failure";
+"printer-state-reasons.input-pick-roller-failure" = "Input Pick Roller Failure";
 // TRANSLATORS: Input Pick Roller Life Over
-"printer-state-reasons.input-pick-roller-life-over" = "printer-state-reasons.input-pick-roller-life-over";
+"printer-state-reasons.input-pick-roller-life-over" = "Input Pick Roller Life Over";
 // TRANSLATORS: Input Pick Roller Life Warn
-"printer-state-reasons.input-pick-roller-life-warn" = "printer-state-reasons.input-pick-roller-life-warn";
+"printer-state-reasons.input-pick-roller-life-warn" = "Input Pick Roller Life Warn";
 // TRANSLATORS: Input Pick Roller Missing
-"printer-state-reasons.input-pick-roller-missing" = "printer-state-reasons.input-pick-roller-missing";
+"printer-state-reasons.input-pick-roller-missing" = "Input Pick Roller Missing";
 // TRANSLATORS: Input Tray Elevation Failure
 "printer-state-reasons.input-tray-elevation-failure" = "Input Tray Elevation Failure";
 // TRANSLATORS: Paper tray is missing
 // TRANSLATORS: Marker Adjusting Print Quality
 "printer-state-reasons.marker-adjusting-print-quality" = "Marker Adjusting Print Quality";
 // TRANSLATORS: Marker Cleaner Missing
-"printer-state-reasons.marker-cleaner-missing" = "printer-state-reasons.marker-cleaner-missing";
+"printer-state-reasons.marker-cleaner-missing" = "Marker Cleaner Missing";
 // TRANSLATORS: Marker Developer Almost Empty
 "printer-state-reasons.marker-developer-almost-empty" = "Marker Developer Almost Empty";
 // TRANSLATORS: Marker Developer Empty
 "printer-state-reasons.marker-developer-empty" = "Marker Developer Empty";
 // TRANSLATORS: Marker Developer Missing
-"printer-state-reasons.marker-developer-missing" = "printer-state-reasons.marker-developer-missing";
+"printer-state-reasons.marker-developer-missing" = "Marker Developer Missing";
 // TRANSLATORS: Marker Fuser Missing
-"printer-state-reasons.marker-fuser-missing" = "printer-state-reasons.marker-fuser-missing";
+"printer-state-reasons.marker-fuser-missing" = "Marker Fuser Missing";
 // TRANSLATORS: Marker Fuser Thermistor Failure
 "printer-state-reasons.marker-fuser-thermistor-failure" = "Marker Fuser Thermistor Failure";
 // TRANSLATORS: Marker Fuser Timing Failure
 "printer-state-reasons.marker-fuser-timing-failure" = "Marker Fuser Timing Failure";
 // TRANSLATORS: Marker Ink Almost Empty
-"printer-state-reasons.marker-ink-almost-empty" = "Marker Ink Almost Empty";
+"printer-state-reasons.marker-ink-almost-empty" = "Low ink";
 // TRANSLATORS: Marker Ink Empty
-"printer-state-reasons.marker-ink-empty" = "Marker Ink Empty";
+"printer-state-reasons.marker-ink-empty" = "Ink empty";
 // TRANSLATORS: Marker Ink Missing
-"printer-state-reasons.marker-ink-missing" = "printer-state-reasons.marker-ink-missing";
+"printer-state-reasons.marker-ink-missing" = "Ink missing";
 // TRANSLATORS: Marker Opc Missing
-"printer-state-reasons.marker-opc-missing" = "printer-state-reasons.marker-opc-missing";
+"printer-state-reasons.marker-opc-missing" = "OPC missing";
 // TRANSLATORS: Marker Print Ribbon Almost Empty
-"printer-state-reasons.marker-print-ribbon-almost-empty" = "Marker Print Ribbon Almost Empty";
+"printer-state-reasons.marker-print-ribbon-almost-empty" = "Print ribbon Almost Empty";
 // TRANSLATORS: Marker Print Ribbon Empty
-"printer-state-reasons.marker-print-ribbon-empty" = "Marker Print Ribbon Empty";
+"printer-state-reasons.marker-print-ribbon-empty" = "Print ribbon Empty";
 // TRANSLATORS: Marker Print Ribbon Missing
-"printer-state-reasons.marker-print-ribbon-missing" = "printer-state-reasons.marker-print-ribbon-missing";
+"printer-state-reasons.marker-print-ribbon-missing" = "Print ribbon missing";
 // TRANSLATORS: Marker Supply Almost Empty
-"printer-state-reasons.marker-supply-almost-empty" = "printer-state-reasons.marker-supply-almost-empty";
+"printer-state-reasons.marker-supply-almost-empty" = "Ink/toner almost empty";
 // TRANSLATORS: Ink/toner empty
-"printer-state-reasons.marker-supply-empty" = "Marker Supply Empty";
+"printer-state-reasons.marker-supply-empty" = "Ink/toner empty";
 // TRANSLATORS: Ink/toner low
-"printer-state-reasons.marker-supply-low" = "Marker Supply Low";
+"printer-state-reasons.marker-supply-low" = "Ink/toner low";
 // TRANSLATORS: Marker Supply Missing
-"printer-state-reasons.marker-supply-missing" = "printer-state-reasons.marker-supply-missing";
+"printer-state-reasons.marker-supply-missing" = "Ink/toner missing";
 // TRANSLATORS: Marker Toner Cartridge Missing
-"printer-state-reasons.marker-toner-cartridge-missing" = "Marker Toner Cartridge Missing";
+"printer-state-reasons.marker-toner-cartridge-missing" = "Toner cartridge missing";
 // TRANSLATORS: Marker Toner Missing
-"printer-state-reasons.marker-toner-missing" = "printer-state-reasons.marker-toner-missing";
+"printer-state-reasons.marker-toner-missing" = "Toner missing";
 // TRANSLATORS: Ink/toner waste bin almost full
-"printer-state-reasons.marker-waste-almost-full" = "Marker Waste Almost Full";
+"printer-state-reasons.marker-waste-almost-full" = "Ink/toner waste bin almost full";
 // TRANSLATORS: Ink/toner waste bin full
-"printer-state-reasons.marker-waste-full" = "Marker Waste Full";
+"printer-state-reasons.marker-waste-full" = "Ink/toner waste bin full";
 // TRANSLATORS: Marker Waste Ink Receptacle Almost Full
 "printer-state-reasons.marker-waste-ink-receptacle-almost-full" = "Marker Waste Ink Receptacle Almost Full";
 // TRANSLATORS: Marker Waste Ink Receptacle Full
 "printer-state-reasons.marker-waste-ink-receptacle-full" = "Marker Waste Ink Receptacle Full";
 // TRANSLATORS: Marker Waste Ink Receptacle Missing
-"printer-state-reasons.marker-waste-ink-receptacle-missing" = "printer-state-reasons.marker-waste-ink-receptacle-missing";
+"printer-state-reasons.marker-waste-ink-receptacle-missing" = "Marker Waste Ink Receptacle Missing";
 // TRANSLATORS: Marker Waste Missing
-"printer-state-reasons.marker-waste-missing" = "printer-state-reasons.marker-waste-missing";
+"printer-state-reasons.marker-waste-missing" = "Ink/toner waste bin missing";
 // TRANSLATORS: Marker Waste Toner Receptacle Almost Full
 "printer-state-reasons.marker-waste-toner-receptacle-almost-full" = "Marker Waste Toner Receptacle Almost Full";
 // TRANSLATORS: Marker Waste Toner Receptacle Full
 "printer-state-reasons.marker-waste-toner-receptacle-full" = "Marker Waste Toner Receptacle Full";
 // TRANSLATORS: Marker Waste Toner Receptacle Missing
-"printer-state-reasons.marker-waste-toner-receptacle-missing" = "printer-state-reasons.marker-waste-toner-receptacle-missing";
+"printer-state-reasons.marker-waste-toner-receptacle-missing" = "Marker Waste Toner Receptacle Missing";
 // TRANSLATORS: Material Empty
 "printer-state-reasons.material-empty" = "Material Empty";
 // TRANSLATORS: Material Low
index f614af3cfebcd20542a373843697d572dda11715..7e189e60565129995e7d0a06e25831e86ee2de94 100644 (file)
@@ -13,7 +13,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 2.3\n"
 "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-08-23 09:13-0400\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
 "PO-Revision-Date: 2012-09-29 11:21+0200\n"
 "Last-Translator: Àngel Mompó <mecatxis@gmail.com>\n"
 "Language-Team: Catalan <ca@dodds.net>\n"
@@ -1579,6 +1579,9 @@ msgstr ""
 msgid "--not expression        Unary NOT of expression"
 msgstr ""
 
+msgid "--pam-service service   Use the named PAM service"
+msgstr ""
+
 msgid "--path regex            Match resource path to regular expression"
 msgstr ""
 
@@ -1749,6 +1752,9 @@ msgstr "-90"
 msgid "-95"
 msgstr "-95"
 
+msgid "-A                      Enable authentication"
+msgstr ""
+
 msgid "-C                      Send requests using chunking (default)"
 msgstr ""
 
@@ -1920,6 +1926,9 @@ msgstr ""
 msgid "-d destination          Set the named destination as the server default"
 msgstr ""
 
+msgid "-d destination          Specify the destination"
+msgstr ""
+
 msgid "-d name=value           Set named variable to value"
 msgstr ""
 
@@ -2529,6 +2538,9 @@ msgstr "300 mm/seg."
 msgid "300dpi"
 msgstr "300ppp"
 
+msgid "30859 Paint Can Label"
+msgstr ""
+
 msgid "35"
 msgstr "35"
 
@@ -3179,6 +3191,9 @@ msgstr "Tall"
 msgid "Cutter"
 msgstr "Ganiveta"
 
+msgid "DYMO"
+msgstr ""
+
 msgid "Dark"
 msgstr "Fosc"
 
@@ -3268,9 +3283,6 @@ msgstr ""
 msgid "Duplexer"
 msgstr "Unitat d'impressió a dues cares"
 
-msgid "Dymo"
-msgstr "Dymo"
-
 msgid "EPL1 Label Printer"
 msgstr "Impressora d'etiquetes EPL1"
 
@@ -3927,6 +3939,9 @@ msgstr "Costat-llarg (vertical)"
 msgid "Looking for printer."
 msgstr "S'està buscant la impressora."
 
+msgid "Main Roll"
+msgstr ""
+
 msgid "Manual Feed"
 msgstr "Alimentació manual"
 
@@ -4465,6 +4480,9 @@ msgstr "SEQUENCE té una longitud indefinida"
 msgid "SSL/TLS Negotiation Error"
 msgstr "S'ha produït un error mentre es negociava el SSL/TLS"
 
+msgid "Second Roll (DUO/Twin Only)"
+msgstr ""
+
 msgid "See Other"
 msgstr "Vegeu altres"
 
@@ -6596,6 +6614,14 @@ msgstr ""
 msgid "finishing-template.trim-after-pages"
 msgstr ""
 
+#. TRANSLATORS: Trim After Every Set
+msgid "finishing-template.trim-after-sets"
+msgstr ""
+
+#. TRANSLATORS: Trim After Every Page
+msgid "finishing-template.trim-after-sheets"
+msgstr ""
+
 #. TRANSLATORS: Finishings
 msgid "finishings"
 msgstr ""
@@ -8939,6 +8965,58 @@ msgstr ""
 msgid "media-type.cd"
 msgstr ""
 
+#. TRANSLATORS: Photo Advanced Paper
+msgid "media-type.com.hp.advanced-photo"
+msgstr ""
+
+#. TRANSLATORS: Brochure Glossy Paper
+msgid "media-type.com.hp.brochure-glossy"
+msgstr ""
+
+#. TRANSLATORS: Brochure Matte Paper
+msgid "media-type.com.hp.brochure-matte"
+msgstr ""
+
+#. TRANSLATORS: Matte Coverstock
+msgid "media-type.com.hp.cover-matte"
+msgstr ""
+
+#. TRANSLATORS: EcoSMART Lite Paper
+msgid "media-type.com.hp.ecosmart-lite"
+msgstr ""
+
+#. TRANSLATORS: Everyday Glossy Paper
+msgid "media-type.com.hp.everyday-glossy"
+msgstr ""
+
+#. TRANSLATORS: Everyday Matte Paper
+msgid "media-type.com.hp.everyday-matte"
+msgstr ""
+
+#. TRANSLATORS: Extra Heavyweight Paper
+msgid "media-type.com.hp.extra-heavy"
+msgstr ""
+
+#. TRANSLATORS: Intermediate Paper
+msgid "media-type.com.hp.intermediate"
+msgstr ""
+
+#. TRANSLATORS: Mid-Weight Paper
+msgid "media-type.com.hp.mid-weight"
+msgstr ""
+
+#. TRANSLATORS: Inkjet Premium Paper
+msgid "media-type.com.hp.premium-inkjet"
+msgstr ""
+
+#. TRANSLATORS: Photo Premium Paper
+msgid "media-type.com.hp.premium-photo"
+msgstr ""
+
+#. TRANSLATORS: Premium Matte Presentation Paper
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr ""
+
 #. TRANSLATORS: Continuous
 msgid "media-type.continuous"
 msgstr ""
@@ -9131,6 +9209,22 @@ msgstr ""
 msgid "media-type.imaging-cylinder"
 msgstr ""
 
+#. TRANSLATORS: Photo Paper Plus Glossy II
+msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Plus Glossy II
+msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
+msgstr ""
+
 #. TRANSLATORS: Labels
 msgid "media-type.labels"
 msgstr ""
@@ -15161,6 +15255,9 @@ msgstr ""
 #~ "Necessiteu una nom d'usuari de Samba per exportar els controladors "
 #~ "d'impressora"
 
+#~ msgid "Dymo"
+#~ msgstr "Dymo"
+
 #~ msgid "Export Printers to Samba"
 #~ msgstr "Exportar les impressores al Samba"
 
index bd244a44b9ec660c23ed148234dd4cdf63953da2..329e9ffef633b93b0bd16241f98be1611ef31d40 100644 (file)
@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 2.3\n"
 "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-08-23 09:13-0400\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
 "PO-Revision-Date: 2012-09-14 10:26+0100\n"
 "Last-Translator: Jan Bartos <jan.bartos@madeta.cz>\n"
 "Language-Team: Czech\n"
@@ -1428,6 +1428,9 @@ msgstr ""
 msgid "--not expression        Unary NOT of expression"
 msgstr ""
 
+msgid "--pam-service service   Use the named PAM service"
+msgstr ""
+
 msgid "--path regex            Match resource path to regular expression"
 msgstr ""
 
@@ -1598,6 +1601,9 @@ msgstr "-90"
 msgid "-95"
 msgstr "-95"
 
+msgid "-A                      Enable authentication"
+msgstr ""
+
 msgid "-C                      Send requests using chunking (default)"
 msgstr ""
 
@@ -1769,6 +1775,9 @@ msgstr ""
 msgid "-d destination          Set the named destination as the server default"
 msgstr ""
 
+msgid "-d destination          Specify the destination"
+msgstr ""
+
 msgid "-d name=value           Set named variable to value"
 msgstr ""
 
@@ -2378,6 +2387,9 @@ msgstr "300 mm/sek."
 msgid "300dpi"
 msgstr "300 dpi"
 
+msgid "30859 Paint Can Label"
+msgstr ""
+
 msgid "35"
 msgstr "35"
 
@@ -3024,6 +3036,9 @@ msgstr "Snížit"
 msgid "Cutter"
 msgstr "Výstřižek"
 
+msgid "DYMO"
+msgstr ""
+
 msgid "Dark"
 msgstr "Tmavý"
 
@@ -3107,9 +3122,6 @@ msgstr ""
 msgid "Duplexer"
 msgstr "Duplexní jednotka"
 
-msgid "Dymo"
-msgstr "Dymo"
-
 msgid "EPL1 Label Printer"
 msgstr "Tiskárna štítků EPL1"
 
@@ -3762,6 +3774,9 @@ msgstr "Delší okraj (na výšku)"
 msgid "Looking for printer."
 msgstr ""
 
+msgid "Main Roll"
+msgstr ""
+
 msgid "Manual Feed"
 msgstr "Ruční podávání"
 
@@ -4293,6 +4308,9 @@ msgstr "\"SEQUENCE\" má neomezenou délku"
 msgid "SSL/TLS Negotiation Error"
 msgstr ""
 
+msgid "Second Roll (DUO/Twin Only)"
+msgstr ""
+
 msgid "See Other"
 msgstr "Viz další"
 
@@ -6394,6 +6412,14 @@ msgstr ""
 msgid "finishing-template.trim-after-pages"
 msgstr ""
 
+#. TRANSLATORS: Trim After Every Set
+msgid "finishing-template.trim-after-sets"
+msgstr ""
+
+#. TRANSLATORS: Trim After Every Page
+msgid "finishing-template.trim-after-sheets"
+msgstr ""
+
 #. TRANSLATORS: Finishings
 msgid "finishings"
 msgstr ""
@@ -8720,6 +8746,58 @@ msgstr ""
 msgid "media-type.cd"
 msgstr ""
 
+#. TRANSLATORS: Photo Advanced Paper
+msgid "media-type.com.hp.advanced-photo"
+msgstr ""
+
+#. TRANSLATORS: Brochure Glossy Paper
+msgid "media-type.com.hp.brochure-glossy"
+msgstr ""
+
+#. TRANSLATORS: Brochure Matte Paper
+msgid "media-type.com.hp.brochure-matte"
+msgstr ""
+
+#. TRANSLATORS: Matte Coverstock
+msgid "media-type.com.hp.cover-matte"
+msgstr ""
+
+#. TRANSLATORS: EcoSMART Lite Paper
+msgid "media-type.com.hp.ecosmart-lite"
+msgstr ""
+
+#. TRANSLATORS: Everyday Glossy Paper
+msgid "media-type.com.hp.everyday-glossy"
+msgstr ""
+
+#. TRANSLATORS: Everyday Matte Paper
+msgid "media-type.com.hp.everyday-matte"
+msgstr ""
+
+#. TRANSLATORS: Extra Heavyweight Paper
+msgid "media-type.com.hp.extra-heavy"
+msgstr ""
+
+#. TRANSLATORS: Intermediate Paper
+msgid "media-type.com.hp.intermediate"
+msgstr ""
+
+#. TRANSLATORS: Mid-Weight Paper
+msgid "media-type.com.hp.mid-weight"
+msgstr ""
+
+#. TRANSLATORS: Inkjet Premium Paper
+msgid "media-type.com.hp.premium-inkjet"
+msgstr ""
+
+#. TRANSLATORS: Photo Premium Paper
+msgid "media-type.com.hp.premium-photo"
+msgstr ""
+
+#. TRANSLATORS: Premium Matte Presentation Paper
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr ""
+
 #. TRANSLATORS: Continuous
 msgid "media-type.continuous"
 msgstr ""
@@ -8912,6 +8990,22 @@ msgstr ""
 msgid "media-type.imaging-cylinder"
 msgstr ""
 
+#. TRANSLATORS: Photo Paper Plus Glossy II
+msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Plus Glossy II
+msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
+msgstr ""
+
 #. TRANSLATORS: Labels
 msgid "media-type.labels"
 msgstr ""
@@ -14903,5 +14997,8 @@ msgstr ""
 msgid "~/.cups/lpoptions file names default destination that does not exist."
 msgstr ""
 
+#~ msgid "Dymo"
+#~ msgstr "Dymo"
+
 #~ msgid "Export Printers to Samba"
 #~ msgstr "Export tiskáren do Samby"
index 0363a3c06d4556b3ec8c8b8408750858ebeac922..6ac08cbfe06f43e4435ab64f74a9c41614ef242c 100644 (file)
@@ -22,7 +22,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 2.3\n"
 "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-08-23 09:13-0400\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
 "PO-Revision-Date: 2017-10-25 14:57+0200\n"
 "Last-Translator: Joachim Schwender <joachim.schwender@web.de>\n"
 "Language-Team: German <LL@li.org>\n"
@@ -1495,6 +1495,9 @@ msgstr ""
 msgid "--not expression        Unary NOT of expression"
 msgstr ""
 
+msgid "--pam-service service   Use the named PAM service"
+msgstr ""
+
 msgid "--path regex            Match resource path to regular expression"
 msgstr ""
 
@@ -1665,6 +1668,9 @@ msgstr "-90"
 msgid "-95"
 msgstr "-95"
 
+msgid "-A                      Enable authentication"
+msgstr ""
+
 msgid "-C                      Send requests using chunking (default)"
 msgstr ""
 
@@ -1836,6 +1842,9 @@ msgstr ""
 msgid "-d destination          Set the named destination as the server default"
 msgstr ""
 
+msgid "-d destination          Specify the destination"
+msgstr ""
+
 msgid "-d name=value           Set named variable to value"
 msgstr ""
 
@@ -2450,6 +2459,9 @@ msgstr "300 mm/s"
 msgid "300dpi"
 msgstr "300 dpi"
 
+msgid "30859 Paint Can Label"
+msgstr ""
+
 msgid "35"
 msgstr "35"
 
@@ -3099,6 +3111,9 @@ msgstr "Abschneiden"
 msgid "Cutter"
 msgstr "Abschneider"
 
+msgid "DYMO"
+msgstr ""
+
 msgid "Dark"
 msgstr "Dunkel"
 
@@ -3188,9 +3203,6 @@ msgstr "Entwurf"
 msgid "Duplexer"
 msgstr "Duplexer"
 
-msgid "Dymo"
-msgstr "Dymo"
-
 msgid "EPL1 Label Printer"
 msgstr "EPL1 Etikettendrucker"
 
@@ -3845,6 +3857,9 @@ msgstr "Lange Kante (Hochformat)"
 msgid "Looking for printer."
 msgstr "Suche nach Drucker."
 
+msgid "Main Roll"
+msgstr ""
+
 msgid "Manual Feed"
 msgstr "Manuelle Papierzufuhr"
 
@@ -4381,6 +4396,9 @@ msgstr "SEQUENCE hat unbestimmte Länge"
 msgid "SSL/TLS Negotiation Error"
 msgstr "SSL/TLS Verhandlungsfehler"
 
+msgid "Second Roll (DUO/Twin Only)"
+msgstr ""
+
 msgid "See Other"
 msgstr "Siehe auch"
 
@@ -6510,6 +6528,14 @@ msgstr ""
 msgid "finishing-template.trim-after-pages"
 msgstr ""
 
+#. TRANSLATORS: Trim After Every Set
+msgid "finishing-template.trim-after-sets"
+msgstr ""
+
+#. TRANSLATORS: Trim After Every Page
+msgid "finishing-template.trim-after-sheets"
+msgstr ""
+
 #. TRANSLATORS: Finishings
 msgid "finishings"
 msgstr ""
@@ -8843,6 +8869,58 @@ msgstr ""
 msgid "media-type.cd"
 msgstr ""
 
+#. TRANSLATORS: Photo Advanced Paper
+msgid "media-type.com.hp.advanced-photo"
+msgstr ""
+
+#. TRANSLATORS: Brochure Glossy Paper
+msgid "media-type.com.hp.brochure-glossy"
+msgstr ""
+
+#. TRANSLATORS: Brochure Matte Paper
+msgid "media-type.com.hp.brochure-matte"
+msgstr ""
+
+#. TRANSLATORS: Matte Coverstock
+msgid "media-type.com.hp.cover-matte"
+msgstr ""
+
+#. TRANSLATORS: EcoSMART Lite Paper
+msgid "media-type.com.hp.ecosmart-lite"
+msgstr ""
+
+#. TRANSLATORS: Everyday Glossy Paper
+msgid "media-type.com.hp.everyday-glossy"
+msgstr ""
+
+#. TRANSLATORS: Everyday Matte Paper
+msgid "media-type.com.hp.everyday-matte"
+msgstr ""
+
+#. TRANSLATORS: Extra Heavyweight Paper
+msgid "media-type.com.hp.extra-heavy"
+msgstr ""
+
+#. TRANSLATORS: Intermediate Paper
+msgid "media-type.com.hp.intermediate"
+msgstr ""
+
+#. TRANSLATORS: Mid-Weight Paper
+msgid "media-type.com.hp.mid-weight"
+msgstr ""
+
+#. TRANSLATORS: Inkjet Premium Paper
+msgid "media-type.com.hp.premium-inkjet"
+msgstr ""
+
+#. TRANSLATORS: Photo Premium Paper
+msgid "media-type.com.hp.premium-photo"
+msgstr ""
+
+#. TRANSLATORS: Premium Matte Presentation Paper
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr ""
+
 #. TRANSLATORS: Continuous
 msgid "media-type.continuous"
 msgstr ""
@@ -9035,6 +9113,22 @@ msgstr ""
 msgid "media-type.imaging-cylinder"
 msgstr ""
 
+#. TRANSLATORS: Photo Paper Plus Glossy II
+msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Plus Glossy II
+msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
+msgstr ""
+
 #. TRANSLATORS: Labels
 msgid "media-type.labels"
 msgstr ""
@@ -15034,6 +15128,9 @@ msgstr ""
 #~ msgstr ""
 #~ "Ein Samba-Benutzername ist erforderlich, um Druckertreiber zu exportieren"
 
+#~ msgid "Dymo"
+#~ msgstr "Dymo"
+
 #~ msgid "Export Printers to Samba"
 #~ msgstr "Drucker zu Samba exportieren"
 
index fdb34d6fb2a8f411da12ce7c4e6e4ad4da638c64..fd7ea0ac013d9c7a47c453b00ea244449fa7cdd8 100644 (file)
@@ -24,7 +24,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 2.3.0\n"
 "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-08-23 09:13-0400\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: English\n"
@@ -1599,6 +1599,9 @@ msgstr "--no-web-forms          Disable web forms for media and supplies"
 msgid "--not expression        Unary NOT of expression"
 msgstr "--not expression        Unary NOT of expression"
 
+msgid "--pam-service service   Use the named PAM service"
+msgstr ""
+
 msgid "--path regex            Match resource path to regular expression"
 msgstr "--path regex            Match resource path to regular expression"
 
@@ -1774,6 +1777,9 @@ msgstr "-90"
 msgid "-95"
 msgstr "-95"
 
+msgid "-A                      Enable authentication"
+msgstr ""
+
 msgid "-C                      Send requests using chunking (default)"
 msgstr "-C                      Send requests using chunking (default)"
 
@@ -1955,6 +1961,9 @@ msgid "-d destination          Set the named destination as the server default"
 msgstr ""
 "-d destination          Set the named destination as the server default"
 
+msgid "-d destination          Specify the destination"
+msgstr ""
+
 msgid "-d name=value           Set named variable to value"
 msgstr "-d name=value           Set named variable to value"
 
@@ -2596,6 +2605,9 @@ msgstr "300 mm/sec."
 msgid "300dpi"
 msgstr "300dpi"
 
+msgid "30859 Paint Can Label"
+msgstr ""
+
 msgid "35"
 msgstr "35"
 
@@ -3245,6 +3257,9 @@ msgstr "Cut"
 msgid "Cutter"
 msgstr "Cutter"
 
+msgid "DYMO"
+msgstr ""
+
 msgid "Dark"
 msgstr "Dark"
 
@@ -3334,9 +3349,6 @@ msgstr "Draft"
 msgid "Duplexer"
 msgstr "Duplexer"
 
-msgid "Dymo"
-msgstr "Dymo"
-
 msgid "EPL1 Label Printer"
 msgstr "EPL1 Label Printer"
 
@@ -3994,6 +4006,9 @@ msgstr "Long-Edge (Portrait)"
 msgid "Looking for printer."
 msgstr "Looking for printer."
 
+msgid "Main Roll"
+msgstr ""
+
 msgid "Manual Feed"
 msgstr "Manual Feed"
 
@@ -4530,6 +4545,9 @@ msgstr "SEQUENCE uses indefinite length"
 msgid "SSL/TLS Negotiation Error"
 msgstr "SSL/TLS Negotiation Error"
 
+msgid "Second Roll (DUO/Twin Only)"
+msgstr ""
+
 msgid "See Other"
 msgstr "See Other"
 
@@ -6678,6 +6696,14 @@ msgstr "Trim After Job"
 msgid "finishing-template.trim-after-pages"
 msgstr "Trim After Every Page"
 
+#. TRANSLATORS: Trim After Every Set
+msgid "finishing-template.trim-after-sets"
+msgstr "Trim After Every Set"
+
+#. TRANSLATORS: Trim After Every Page
+msgid "finishing-template.trim-after-sheets"
+msgstr "Trim After Every Page"
+
 #. TRANSLATORS: Finishings
 msgid "finishings"
 msgstr "Finishings"
@@ -9022,6 +9048,58 @@ msgstr "Cardstock"
 msgid "media-type.cd"
 msgstr "CD"
 
+#. TRANSLATORS: Photo Advanced Paper
+msgid "media-type.com.hp.advanced-photo"
+msgstr "Photo Advanced Paper"
+
+#. TRANSLATORS: Brochure Glossy Paper
+msgid "media-type.com.hp.brochure-glossy"
+msgstr "Brochure Glossy Paper"
+
+#. TRANSLATORS: Brochure Matte Paper
+msgid "media-type.com.hp.brochure-matte"
+msgstr "Brochure Matte Paper"
+
+#. TRANSLATORS: Matte Coverstock
+msgid "media-type.com.hp.cover-matte"
+msgstr "Matte Coverstock"
+
+#. TRANSLATORS: EcoSMART Lite Paper
+msgid "media-type.com.hp.ecosmart-lite"
+msgstr "EcoSMART Lite Paper"
+
+#. TRANSLATORS: Everyday Glossy Paper
+msgid "media-type.com.hp.everyday-glossy"
+msgstr "Everyday Glossy Paper"
+
+#. TRANSLATORS: Everyday Matte Paper
+msgid "media-type.com.hp.everyday-matte"
+msgstr "Everyday Matte Paper"
+
+#. TRANSLATORS: Extra Heavyweight Paper
+msgid "media-type.com.hp.extra-heavy"
+msgstr "Extra Heavyweight Paper"
+
+#. TRANSLATORS: Intermediate Paper
+msgid "media-type.com.hp.intermediate"
+msgstr "Intermediate Paper"
+
+#. TRANSLATORS: Mid-Weight Paper
+msgid "media-type.com.hp.mid-weight"
+msgstr "Mid-Weight Paper"
+
+#. TRANSLATORS: Inkjet Premium Paper
+msgid "media-type.com.hp.premium-inkjet"
+msgstr "Inkjet Premium Paper"
+
+#. TRANSLATORS: Photo Premium Paper
+msgid "media-type.com.hp.premium-photo"
+msgstr "Photo Premium Paper"
+
+#. TRANSLATORS: Premium Matte Presentation Paper
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr "Premium Matte Presentation Paper"
+
 #. TRANSLATORS: Continuous
 msgid "media-type.continuous"
 msgstr "Continuous"
@@ -9214,6 +9292,22 @@ msgstr "Image Setter Paper"
 msgid "media-type.imaging-cylinder"
 msgstr "Imaging Cylinder"
 
+#. TRANSLATORS: Photo Paper Plus Glossy II
+msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
+msgstr "Photo Paper Plus Glossy II"
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
+msgstr "Photo Paper Pro Platinum"
+
+#. TRANSLATORS: Photo Paper Plus Glossy II
+msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
+msgstr "Photo Paper Plus Glossy II"
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
+msgstr "Photo Paper Pro Platinum"
+
 #. TRANSLATORS: Labels
 msgid "media-type.labels"
 msgstr "Labels"
@@ -12870,15 +12964,15 @@ msgstr "Ink missing"
 msgid "printer-state-reasons.marker-opc-missing"
 msgstr "OPC missing"
 
-#. TRANSLATORS: Print ribbon Almost Empty
+#. TRANSLATORS: Marker Print Ribbon Almost Empty
 msgid "printer-state-reasons.marker-print-ribbon-almost-empty"
 msgstr "Print ribbon Almost Empty"
 
-#. TRANSLATORS: Print ribbon Empty
+#. TRANSLATORS: Marker Print Ribbon Empty
 msgid "printer-state-reasons.marker-print-ribbon-empty"
 msgstr "Print ribbon Empty"
 
-#. TRANSLATORS: Print ribbon Missing
+#. TRANSLATORS: Marker Print Ribbon Missing
 msgid "printer-state-reasons.marker-print-ribbon-missing"
 msgstr "Print ribbon missing"
 
@@ -15210,3 +15304,6 @@ msgstr "{}                      URI"
 
 msgid "~/.cups/lpoptions file names default destination that does not exist."
 msgstr "~/.cups/lpoptions file names default destination that does not exist."
+
+#~ msgid "Dymo"
+#~ msgstr "Dymo"
index 6bf48312d892cd1bb8838f8821c700a58446bf9e..3a31f4d8d7df44e3dc4079602ce39a61b2a2b063 100644 (file)
@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 2.3\n"
 "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-08-23 09:13-0400\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
 "PO-Revision-Date: 2016-06-26 21:17+0100\n"
 "Last-Translator: Juan Pablo González Riopedre <jpgriopedre@yahoo.es>\n"
 "Language-Team: Spanish\n"
@@ -1582,6 +1582,9 @@ msgstr ""
 msgid "--not expression        Unary NOT of expression"
 msgstr ""
 
+msgid "--pam-service service   Use the named PAM service"
+msgstr ""
+
 msgid "--path regex            Match resource path to regular expression"
 msgstr ""
 
@@ -1752,6 +1755,9 @@ msgstr "-90"
 msgid "-95"
 msgstr "-95"
 
+msgid "-A                      Enable authentication"
+msgstr ""
+
 msgid "-C                      Send requests using chunking (default)"
 msgstr ""
 
@@ -1923,6 +1929,9 @@ msgstr ""
 msgid "-d destination          Set the named destination as the server default"
 msgstr ""
 
+msgid "-d destination          Specify the destination"
+msgstr ""
+
 msgid "-d name=value           Set named variable to value"
 msgstr ""
 
@@ -2532,6 +2541,9 @@ msgstr "300 mm/seg"
 msgid "300dpi"
 msgstr "300ppp"
 
+msgid "30859 Paint Can Label"
+msgstr ""
+
 msgid "35"
 msgstr "35"
 
@@ -3182,6 +3194,9 @@ msgstr "Cortar"
 msgid "Cutter"
 msgstr "Cortadora"
 
+msgid "DYMO"
+msgstr ""
+
 msgid "Dark"
 msgstr "Oscuro"
 
@@ -3271,9 +3286,6 @@ msgstr "Borrador"
 msgid "Duplexer"
 msgstr "Unidad de impresión dúplex"
 
-msgid "Dymo"
-msgstr "Dymo"
-
 msgid "EPL1 Label Printer"
 msgstr "Impresora de etiquetas EPL1"
 
@@ -3928,6 +3940,9 @@ msgstr "Lado largo (retrato)"
 msgid "Looking for printer."
 msgstr ""
 
+msgid "Main Roll"
+msgstr ""
+
 msgid "Manual Feed"
 msgstr "Alimentación manual"
 
@@ -4465,6 +4480,9 @@ msgstr "SEQUENCE usa una longitud indefinida"
 msgid "SSL/TLS Negotiation Error"
 msgstr "Error en negociación SSL/TLS"
 
+msgid "Second Roll (DUO/Twin Only)"
+msgstr ""
+
 msgid "See Other"
 msgstr "Ver otros"
 
@@ -6612,6 +6630,14 @@ msgstr ""
 msgid "finishing-template.trim-after-pages"
 msgstr ""
 
+#. TRANSLATORS: Trim After Every Set
+msgid "finishing-template.trim-after-sets"
+msgstr ""
+
+#. TRANSLATORS: Trim After Every Page
+msgid "finishing-template.trim-after-sheets"
+msgstr ""
+
 #. TRANSLATORS: Finishings
 msgid "finishings"
 msgstr ""
@@ -8953,6 +8979,58 @@ msgstr ""
 msgid "media-type.cd"
 msgstr ""
 
+#. TRANSLATORS: Photo Advanced Paper
+msgid "media-type.com.hp.advanced-photo"
+msgstr ""
+
+#. TRANSLATORS: Brochure Glossy Paper
+msgid "media-type.com.hp.brochure-glossy"
+msgstr ""
+
+#. TRANSLATORS: Brochure Matte Paper
+msgid "media-type.com.hp.brochure-matte"
+msgstr ""
+
+#. TRANSLATORS: Matte Coverstock
+msgid "media-type.com.hp.cover-matte"
+msgstr ""
+
+#. TRANSLATORS: EcoSMART Lite Paper
+msgid "media-type.com.hp.ecosmart-lite"
+msgstr ""
+
+#. TRANSLATORS: Everyday Glossy Paper
+msgid "media-type.com.hp.everyday-glossy"
+msgstr ""
+
+#. TRANSLATORS: Everyday Matte Paper
+msgid "media-type.com.hp.everyday-matte"
+msgstr ""
+
+#. TRANSLATORS: Extra Heavyweight Paper
+msgid "media-type.com.hp.extra-heavy"
+msgstr ""
+
+#. TRANSLATORS: Intermediate Paper
+msgid "media-type.com.hp.intermediate"
+msgstr ""
+
+#. TRANSLATORS: Mid-Weight Paper
+msgid "media-type.com.hp.mid-weight"
+msgstr ""
+
+#. TRANSLATORS: Inkjet Premium Paper
+msgid "media-type.com.hp.premium-inkjet"
+msgstr ""
+
+#. TRANSLATORS: Photo Premium Paper
+msgid "media-type.com.hp.premium-photo"
+msgstr ""
+
+#. TRANSLATORS: Premium Matte Presentation Paper
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr ""
+
 #. TRANSLATORS: Continuous
 msgid "media-type.continuous"
 msgstr ""
@@ -9145,6 +9223,22 @@ msgstr ""
 msgid "media-type.imaging-cylinder"
 msgstr ""
 
+#. TRANSLATORS: Photo Paper Plus Glossy II
+msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Plus Glossy II
+msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
+msgstr ""
+
 #. TRANSLATORS: Labels
 msgid "media-type.labels"
 msgstr ""
@@ -15172,6 +15266,9 @@ msgstr ""
 #~ "Se requiere un nombre de usuario Samba para exportar los controladores de "
 #~ "impresora"
 
+#~ msgid "Dymo"
+#~ msgstr "Dymo"
+
 #~ msgid "Export Printers to Samba"
 #~ msgstr "Exportar impresoras a Samba"
 
index f965def75a298e41f396df767f20cf5a85291eab..7d228282c1c80a08d967ff9d237ea2c0309648a0 100644 (file)
@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 2.3\n"
 "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-08-23 09:13-0400\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
 "PO-Revision-Date: 2012-12-12 11:12+0100\n"
 "Last-Translator: Stéphane Blondon <stephane.blondon@gmail.com>\n"
 "Language-Team: French <LL@li.org>\n"
@@ -1439,6 +1439,9 @@ msgstr ""
 msgid "--not expression        Unary NOT of expression"
 msgstr ""
 
+msgid "--pam-service service   Use the named PAM service"
+msgstr ""
+
 msgid "--path regex            Match resource path to regular expression"
 msgstr ""
 
@@ -1609,6 +1612,9 @@ msgstr "-90"
 msgid "-95"
 msgstr "-95"
 
+msgid "-A                      Enable authentication"
+msgstr ""
+
 msgid "-C                      Send requests using chunking (default)"
 msgstr ""
 
@@ -1780,6 +1786,9 @@ msgstr ""
 msgid "-d destination          Set the named destination as the server default"
 msgstr ""
 
+msgid "-d destination          Specify the destination"
+msgstr ""
+
 msgid "-d name=value           Set named variable to value"
 msgstr ""
 
@@ -2389,6 +2398,9 @@ msgstr "300 mm/s"
 msgid "300dpi"
 msgstr "300 ppp"
 
+msgid "30859 Paint Can Label"
+msgstr ""
+
 msgid "35"
 msgstr "35"
 
@@ -3035,6 +3047,9 @@ msgstr "Couper"
 msgid "Cutter"
 msgstr "Cutter"
 
+msgid "DYMO"
+msgstr ""
+
 msgid "Dark"
 msgstr "Foncé"
 
@@ -3120,9 +3135,6 @@ msgstr "Brouillon"
 msgid "Duplexer"
 msgstr "Duplexeur"
 
-msgid "Dymo"
-msgstr "Dymo"
-
 msgid "EPL1 Label Printer"
 msgstr "Imprimante pour étiquettes EPL1"
 
@@ -3775,6 +3787,9 @@ msgstr "Bord le plus long (Portrait)"
 msgid "Looking for printer."
 msgstr "Recherche d'imprimante en cours."
 
+msgid "Main Roll"
+msgstr ""
+
 msgid "Manual Feed"
 msgstr ""
 
@@ -4306,6 +4321,9 @@ msgstr "SEQUENCE s’avère être de longueur indéfinie"
 msgid "SSL/TLS Negotiation Error"
 msgstr "Erreur de négotiation SSL/TLS"
 
+msgid "Second Roll (DUO/Twin Only)"
+msgstr ""
+
 msgid "See Other"
 msgstr "Autres"
 
@@ -6412,6 +6430,14 @@ msgstr ""
 msgid "finishing-template.trim-after-pages"
 msgstr ""
 
+#. TRANSLATORS: Trim After Every Set
+msgid "finishing-template.trim-after-sets"
+msgstr ""
+
+#. TRANSLATORS: Trim After Every Page
+msgid "finishing-template.trim-after-sheets"
+msgstr ""
+
 #. TRANSLATORS: Finishings
 msgid "finishings"
 msgstr ""
@@ -8738,6 +8764,58 @@ msgstr ""
 msgid "media-type.cd"
 msgstr ""
 
+#. TRANSLATORS: Photo Advanced Paper
+msgid "media-type.com.hp.advanced-photo"
+msgstr ""
+
+#. TRANSLATORS: Brochure Glossy Paper
+msgid "media-type.com.hp.brochure-glossy"
+msgstr ""
+
+#. TRANSLATORS: Brochure Matte Paper
+msgid "media-type.com.hp.brochure-matte"
+msgstr ""
+
+#. TRANSLATORS: Matte Coverstock
+msgid "media-type.com.hp.cover-matte"
+msgstr ""
+
+#. TRANSLATORS: EcoSMART Lite Paper
+msgid "media-type.com.hp.ecosmart-lite"
+msgstr ""
+
+#. TRANSLATORS: Everyday Glossy Paper
+msgid "media-type.com.hp.everyday-glossy"
+msgstr ""
+
+#. TRANSLATORS: Everyday Matte Paper
+msgid "media-type.com.hp.everyday-matte"
+msgstr ""
+
+#. TRANSLATORS: Extra Heavyweight Paper
+msgid "media-type.com.hp.extra-heavy"
+msgstr ""
+
+#. TRANSLATORS: Intermediate Paper
+msgid "media-type.com.hp.intermediate"
+msgstr ""
+
+#. TRANSLATORS: Mid-Weight Paper
+msgid "media-type.com.hp.mid-weight"
+msgstr ""
+
+#. TRANSLATORS: Inkjet Premium Paper
+msgid "media-type.com.hp.premium-inkjet"
+msgstr ""
+
+#. TRANSLATORS: Photo Premium Paper
+msgid "media-type.com.hp.premium-photo"
+msgstr ""
+
+#. TRANSLATORS: Premium Matte Presentation Paper
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr ""
+
 #. TRANSLATORS: Continuous
 msgid "media-type.continuous"
 msgstr ""
@@ -8930,6 +9008,22 @@ msgstr ""
 msgid "media-type.imaging-cylinder"
 msgstr ""
 
+#. TRANSLATORS: Photo Paper Plus Glossy II
+msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Plus Glossy II
+msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
+msgstr ""
+
 #. TRANSLATORS: Labels
 msgid "media-type.labels"
 msgstr ""
@@ -14921,5 +15015,8 @@ msgstr ""
 msgid "~/.cups/lpoptions file names default destination that does not exist."
 msgstr ""
 
+#~ msgid "Dymo"
+#~ msgstr "Dymo"
+
 #~ msgid "Export Printers to Samba"
 #~ msgstr "Exporter les imprimantes vers SAMBA"
index ff5e45f547323d7e0010c79a1d0e703df2911a3b..90bcb38ab7206a8ac7dbf824ec659e79338cb0d4 100644 (file)
@@ -12,7 +12,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 2.3\n"
 "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-08-23 09:13-0400\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
 "PO-Revision-Date: 2013-07-14 12:00+0200\n"
 "Last-Translator: Giovanni Scafora <giovanni@archlinux.org>\n"
 "Language-Team: Italian - Arch Linux Italian Team <giovanni@archlinux.org>\n"
@@ -1579,6 +1579,9 @@ msgstr ""
 msgid "--not expression        Unary NOT of expression"
 msgstr ""
 
+msgid "--pam-service service   Use the named PAM service"
+msgstr ""
+
 msgid "--path regex            Match resource path to regular expression"
 msgstr ""
 
@@ -1749,6 +1752,9 @@ msgstr "-90"
 msgid "-95"
 msgstr "-95"
 
+msgid "-A                      Enable authentication"
+msgstr ""
+
 msgid "-C                      Send requests using chunking (default)"
 msgstr ""
 
@@ -1920,6 +1926,9 @@ msgstr ""
 msgid "-d destination          Set the named destination as the server default"
 msgstr ""
 
+msgid "-d destination          Specify the destination"
+msgstr ""
+
 msgid "-d name=value           Set named variable to value"
 msgstr ""
 
@@ -2529,6 +2538,9 @@ msgstr "300 mm/sec."
 msgid "300dpi"
 msgstr "300dpi"
 
+msgid "30859 Paint Can Label"
+msgstr ""
+
 msgid "35"
 msgstr "35"
 
@@ -3178,6 +3190,9 @@ msgstr "Taglia"
 msgid "Cutter"
 msgstr "Taglierino"
 
+msgid "DYMO"
+msgstr ""
+
 msgid "Dark"
 msgstr "Scuro"
 
@@ -3268,9 +3283,6 @@ msgstr ""
 msgid "Duplexer"
 msgstr "Duplexer"
 
-msgid "Dymo"
-msgstr "Dymo"
-
 msgid "EPL1 Label Printer"
 msgstr "EPL1 Label Printer"
 
@@ -3925,6 +3937,9 @@ msgstr "Long-Edge (Portrait)"
 msgid "Looking for printer."
 msgstr "Cerca una stampante."
 
+msgid "Main Roll"
+msgstr ""
+
 msgid "Manual Feed"
 msgstr "Alimentazione manuale"
 
@@ -4462,6 +4477,9 @@ msgstr "SEQUENZA utilizza una lunghezza indefinita"
 msgid "SSL/TLS Negotiation Error"
 msgstr "Errore di negoziazione SSL/TLS"
 
+msgid "Second Roll (DUO/Twin Only)"
+msgstr ""
+
 msgid "See Other"
 msgstr "Vedi altro"
 
@@ -6597,6 +6615,14 @@ msgstr ""
 msgid "finishing-template.trim-after-pages"
 msgstr ""
 
+#. TRANSLATORS: Trim After Every Set
+msgid "finishing-template.trim-after-sets"
+msgstr ""
+
+#. TRANSLATORS: Trim After Every Page
+msgid "finishing-template.trim-after-sheets"
+msgstr ""
+
 #. TRANSLATORS: Finishings
 msgid "finishings"
 msgstr ""
@@ -8935,6 +8961,58 @@ msgstr ""
 msgid "media-type.cd"
 msgstr ""
 
+#. TRANSLATORS: Photo Advanced Paper
+msgid "media-type.com.hp.advanced-photo"
+msgstr ""
+
+#. TRANSLATORS: Brochure Glossy Paper
+msgid "media-type.com.hp.brochure-glossy"
+msgstr ""
+
+#. TRANSLATORS: Brochure Matte Paper
+msgid "media-type.com.hp.brochure-matte"
+msgstr ""
+
+#. TRANSLATORS: Matte Coverstock
+msgid "media-type.com.hp.cover-matte"
+msgstr ""
+
+#. TRANSLATORS: EcoSMART Lite Paper
+msgid "media-type.com.hp.ecosmart-lite"
+msgstr ""
+
+#. TRANSLATORS: Everyday Glossy Paper
+msgid "media-type.com.hp.everyday-glossy"
+msgstr ""
+
+#. TRANSLATORS: Everyday Matte Paper
+msgid "media-type.com.hp.everyday-matte"
+msgstr ""
+
+#. TRANSLATORS: Extra Heavyweight Paper
+msgid "media-type.com.hp.extra-heavy"
+msgstr ""
+
+#. TRANSLATORS: Intermediate Paper
+msgid "media-type.com.hp.intermediate"
+msgstr ""
+
+#. TRANSLATORS: Mid-Weight Paper
+msgid "media-type.com.hp.mid-weight"
+msgstr ""
+
+#. TRANSLATORS: Inkjet Premium Paper
+msgid "media-type.com.hp.premium-inkjet"
+msgstr ""
+
+#. TRANSLATORS: Photo Premium Paper
+msgid "media-type.com.hp.premium-photo"
+msgstr ""
+
+#. TRANSLATORS: Premium Matte Presentation Paper
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr ""
+
 #. TRANSLATORS: Continuous
 msgid "media-type.continuous"
 msgstr ""
@@ -9127,6 +9205,22 @@ msgstr ""
 msgid "media-type.imaging-cylinder"
 msgstr ""
 
+#. TRANSLATORS: Photo Paper Plus Glossy II
+msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Plus Glossy II
+msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
+msgstr ""
+
 #. TRANSLATORS: Labels
 msgid "media-type.labels"
 msgstr ""
@@ -15151,6 +15245,9 @@ msgstr ""
 #~ msgstr ""
 #~ "Per esportare i driver della stampante è richiesto un username di Samba"
 
+#~ msgid "Dymo"
+#~ msgstr "Dymo"
+
 #~ msgid "Export Printers to Samba"
 #~ msgstr "Esporta le stampanti per Samba"
 
index b47e7f15dfb95ed1ec83b7d506cc1d2012ea1f37..a287be291894ee56674bab22656b9eda5990dec0 100644 (file)
@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 2.3\n"
 "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-08-23 09:13-0400\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
 "PO-Revision-Date: 2014-11-15 19:27+0900\n"
 "Last-Translator: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
 "Language-Team: Japanese - OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
@@ -1573,6 +1573,9 @@ msgstr ""
 msgid "--not expression        Unary NOT of expression"
 msgstr ""
 
+msgid "--pam-service service   Use the named PAM service"
+msgstr ""
+
 msgid "--path regex            Match resource path to regular expression"
 msgstr ""
 
@@ -1743,6 +1746,9 @@ msgstr "-90"
 msgid "-95"
 msgstr "-95"
 
+msgid "-A                      Enable authentication"
+msgstr ""
+
 msgid "-C                      Send requests using chunking (default)"
 msgstr ""
 
@@ -1914,6 +1920,9 @@ msgstr ""
 msgid "-d destination          Set the named destination as the server default"
 msgstr ""
 
+msgid "-d destination          Specify the destination"
+msgstr ""
+
 msgid "-d name=value           Set named variable to value"
 msgstr ""
 
@@ -2523,6 +2532,9 @@ msgstr "300 ミリメートル/秒"
 msgid "300dpi"
 msgstr "300dpi"
 
+msgid "30859 Paint Can Label"
+msgstr ""
+
 msgid "35"
 msgstr "35"
 
@@ -3172,6 +3184,9 @@ msgstr "カット"
 msgid "Cutter"
 msgstr "カッター"
 
+msgid "DYMO"
+msgstr ""
+
 msgid "Dark"
 msgstr "濃い"
 
@@ -3264,9 +3279,6 @@ msgstr ""
 msgid "Duplexer"
 msgstr "両面オプション"
 
-msgid "Dymo"
-msgstr "Dymo"
-
 msgid "EPL1 Label Printer"
 msgstr "EPL1 ラベルプリンター"
 
@@ -3923,6 +3935,9 @@ msgstr "長辺給紙 (縦向き)"
 msgid "Looking for printer."
 msgstr "プリンターを探しています。"
 
+msgid "Main Roll"
+msgstr ""
+
 msgid "Manual Feed"
 msgstr "手差し"
 
@@ -4458,6 +4473,9 @@ msgstr "SEQUENCE は不定長を使用しています"
 msgid "SSL/TLS Negotiation Error"
 msgstr "SSL/TLS のネゴシエーションエラー"
 
+msgid "Second Roll (DUO/Twin Only)"
+msgstr ""
+
 msgid "See Other"
 msgstr "残りを見てください"
 
@@ -6580,6 +6598,14 @@ msgstr ""
 msgid "finishing-template.trim-after-pages"
 msgstr ""
 
+#. TRANSLATORS: Trim After Every Set
+msgid "finishing-template.trim-after-sets"
+msgstr ""
+
+#. TRANSLATORS: Trim After Every Page
+msgid "finishing-template.trim-after-sheets"
+msgstr ""
+
 #. TRANSLATORS: Finishings
 msgid "finishings"
 msgstr ""
@@ -8927,6 +8953,58 @@ msgstr ""
 msgid "media-type.cd"
 msgstr ""
 
+#. TRANSLATORS: Photo Advanced Paper
+msgid "media-type.com.hp.advanced-photo"
+msgstr ""
+
+#. TRANSLATORS: Brochure Glossy Paper
+msgid "media-type.com.hp.brochure-glossy"
+msgstr ""
+
+#. TRANSLATORS: Brochure Matte Paper
+msgid "media-type.com.hp.brochure-matte"
+msgstr ""
+
+#. TRANSLATORS: Matte Coverstock
+msgid "media-type.com.hp.cover-matte"
+msgstr ""
+
+#. TRANSLATORS: EcoSMART Lite Paper
+msgid "media-type.com.hp.ecosmart-lite"
+msgstr ""
+
+#. TRANSLATORS: Everyday Glossy Paper
+msgid "media-type.com.hp.everyday-glossy"
+msgstr ""
+
+#. TRANSLATORS: Everyday Matte Paper
+msgid "media-type.com.hp.everyday-matte"
+msgstr ""
+
+#. TRANSLATORS: Extra Heavyweight Paper
+msgid "media-type.com.hp.extra-heavy"
+msgstr ""
+
+#. TRANSLATORS: Intermediate Paper
+msgid "media-type.com.hp.intermediate"
+msgstr ""
+
+#. TRANSLATORS: Mid-Weight Paper
+msgid "media-type.com.hp.mid-weight"
+msgstr ""
+
+#. TRANSLATORS: Inkjet Premium Paper
+msgid "media-type.com.hp.premium-inkjet"
+msgstr ""
+
+#. TRANSLATORS: Photo Premium Paper
+msgid "media-type.com.hp.premium-photo"
+msgstr ""
+
+#. TRANSLATORS: Premium Matte Presentation Paper
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr ""
+
 #. TRANSLATORS: Continuous
 msgid "media-type.continuous"
 msgstr ""
@@ -9119,6 +9197,22 @@ msgstr ""
 msgid "media-type.imaging-cylinder"
 msgstr ""
 
+#. TRANSLATORS: Photo Paper Plus Glossy II
+msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Plus Glossy II
+msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
+msgstr ""
+
 #. TRANSLATORS: Labels
 msgid "media-type.labels"
 msgstr ""
@@ -15169,6 +15263,9 @@ msgstr ""
 #~ msgstr ""
 #~ "プリンタードライバーをエクスポートするには、Samba のユーザー名が必要です。"
 
+#~ msgid "Dymo"
+#~ msgstr "Dymo"
+
 #~ msgid "Export Printers to Samba"
 #~ msgstr "Samba へプリンターをエクスポート"
 
index e5fd7686daec891f21050602788ebeafeeefef85..cdb4392621d83285945945224f455dc1e9e8007a 100644 (file)
@@ -22,7 +22,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 2.3\n"
 "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-08-23 09:13-0400\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
 "PO-Revision-Date: 2016-01-31 16:45-0200\n"
 "Last-Translator: Rafael Fontenelle <rffontenelle@gmail.com>\n"
 "Language-Team: Brazilian Portuguese <traducao-cups-pt-br@googlegroups.com>\n"
@@ -1586,6 +1586,9 @@ msgstr ""
 msgid "--not expression        Unary NOT of expression"
 msgstr ""
 
+msgid "--pam-service service   Use the named PAM service"
+msgstr ""
+
 msgid "--path regex            Match resource path to regular expression"
 msgstr ""
 
@@ -1756,6 +1759,9 @@ msgstr "-90"
 msgid "-95"
 msgstr "-95"
 
+msgid "-A                      Enable authentication"
+msgstr ""
+
 msgid "-C                      Send requests using chunking (default)"
 msgstr ""
 
@@ -1927,6 +1933,9 @@ msgstr ""
 msgid "-d destination          Set the named destination as the server default"
 msgstr ""
 
+msgid "-d destination          Specify the destination"
+msgstr ""
+
 msgid "-d name=value           Set named variable to value"
 msgstr ""
 
@@ -2536,6 +2545,9 @@ msgstr "300 mm/s"
 msgid "300dpi"
 msgstr "300dpi"
 
+msgid "30859 Paint Can Label"
+msgstr ""
+
 msgid "35"
 msgstr "35"
 
@@ -3186,6 +3198,9 @@ msgstr "Cortar"
 msgid "Cutter"
 msgstr "Cortador"
 
+msgid "DYMO"
+msgstr ""
+
 msgid "Dark"
 msgstr "Escuro"
 
@@ -3275,9 +3290,6 @@ msgstr ""
 msgid "Duplexer"
 msgstr "Duplexador"
 
-msgid "Dymo"
-msgstr "Dymo"
-
 msgid "EPL1 Label Printer"
 msgstr "Impressora de etiqueta EPL1"
 
@@ -3932,6 +3944,9 @@ msgstr "Borda maior (retrato)"
 msgid "Looking for printer."
 msgstr "Procurando impressoras."
 
+msgid "Main Roll"
+msgstr ""
+
 msgid "Manual Feed"
 msgstr "Alimentação manual"
 
@@ -4470,6 +4485,9 @@ msgstr "SEQUENCE usa comprimento indefinido"
 msgid "SSL/TLS Negotiation Error"
 msgstr "Erro de negociação SSL/TLS"
 
+msgid "Second Roll (DUO/Twin Only)"
+msgstr ""
+
 msgid "See Other"
 msgstr "Veja outro"
 
@@ -6607,6 +6625,14 @@ msgstr ""
 msgid "finishing-template.trim-after-pages"
 msgstr ""
 
+#. TRANSLATORS: Trim After Every Set
+msgid "finishing-template.trim-after-sets"
+msgstr ""
+
+#. TRANSLATORS: Trim After Every Page
+msgid "finishing-template.trim-after-sheets"
+msgstr ""
+
 #. TRANSLATORS: Finishings
 msgid "finishings"
 msgstr ""
@@ -8944,6 +8970,58 @@ msgstr ""
 msgid "media-type.cd"
 msgstr ""
 
+#. TRANSLATORS: Photo Advanced Paper
+msgid "media-type.com.hp.advanced-photo"
+msgstr ""
+
+#. TRANSLATORS: Brochure Glossy Paper
+msgid "media-type.com.hp.brochure-glossy"
+msgstr ""
+
+#. TRANSLATORS: Brochure Matte Paper
+msgid "media-type.com.hp.brochure-matte"
+msgstr ""
+
+#. TRANSLATORS: Matte Coverstock
+msgid "media-type.com.hp.cover-matte"
+msgstr ""
+
+#. TRANSLATORS: EcoSMART Lite Paper
+msgid "media-type.com.hp.ecosmart-lite"
+msgstr ""
+
+#. TRANSLATORS: Everyday Glossy Paper
+msgid "media-type.com.hp.everyday-glossy"
+msgstr ""
+
+#. TRANSLATORS: Everyday Matte Paper
+msgid "media-type.com.hp.everyday-matte"
+msgstr ""
+
+#. TRANSLATORS: Extra Heavyweight Paper
+msgid "media-type.com.hp.extra-heavy"
+msgstr ""
+
+#. TRANSLATORS: Intermediate Paper
+msgid "media-type.com.hp.intermediate"
+msgstr ""
+
+#. TRANSLATORS: Mid-Weight Paper
+msgid "media-type.com.hp.mid-weight"
+msgstr ""
+
+#. TRANSLATORS: Inkjet Premium Paper
+msgid "media-type.com.hp.premium-inkjet"
+msgstr ""
+
+#. TRANSLATORS: Photo Premium Paper
+msgid "media-type.com.hp.premium-photo"
+msgstr ""
+
+#. TRANSLATORS: Premium Matte Presentation Paper
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr ""
+
 #. TRANSLATORS: Continuous
 msgid "media-type.continuous"
 msgstr ""
@@ -9136,6 +9214,22 @@ msgstr ""
 msgid "media-type.imaging-cylinder"
 msgstr ""
 
+#. TRANSLATORS: Photo Paper Plus Glossy II
+msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Plus Glossy II
+msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
+msgstr ""
+
 #. TRANSLATORS: Labels
 msgid "media-type.labels"
 msgstr ""
@@ -15148,6 +15242,9 @@ msgstr ""
 #~ "Um nome de usuário do Samba é necessário para exportar drivers de "
 #~ "impressora"
 
+#~ msgid "Dymo"
+#~ msgstr "Dymo"
+
 #~ msgid "Export Printers to Samba"
 #~ msgstr "Exportar impressoras para o Samba"
 
index dc078f6fb7d6cc9f47bc6a6014e5af4911e179be..5a0d0da53ef03d80fdfd24e3b150d50570baf513 100644 (file)
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 2.0\n"
 "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-08-23 09:13-0400\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
 "PO-Revision-Date: 2015-01-28 12:00-0800\n"
 "Last-Translator: Aleksandr Proklov\n"
 "Language-Team: Russian - PuppyRus Linux Team\n"
@@ -1554,6 +1554,9 @@ msgstr ""
 msgid "--not expression        Unary NOT of expression"
 msgstr ""
 
+msgid "--pam-service service   Use the named PAM service"
+msgstr ""
+
 msgid "--path regex            Match resource path to regular expression"
 msgstr ""
 
@@ -1724,6 +1727,9 @@ msgstr "-90"
 msgid "-95"
 msgstr "-95"
 
+msgid "-A                      Enable authentication"
+msgstr ""
+
 msgid "-C                      Send requests using chunking (default)"
 msgstr ""
 
@@ -1895,6 +1901,9 @@ msgstr ""
 msgid "-d destination          Set the named destination as the server default"
 msgstr ""
 
+msgid "-d destination          Specify the destination"
+msgstr ""
+
 msgid "-d name=value           Set named variable to value"
 msgstr ""
 
@@ -2504,6 +2513,9 @@ msgstr "300 мм/с"
 msgid "300dpi"
 msgstr "300dpi"
 
+msgid "30859 Paint Can Label"
+msgstr ""
+
 msgid "35"
 msgstr "35"
 
@@ -3153,6 +3165,9 @@ msgstr "Обрезать"
 msgid "Cutter"
 msgstr "Резак"
 
+msgid "DYMO"
+msgstr ""
+
 msgid "Dark"
 msgstr "Темный"
 
@@ -3236,9 +3251,6 @@ msgstr ""
 msgid "Duplexer"
 msgstr "Дуплексер"
 
-msgid "Dymo"
-msgstr "Dymo"
-
 msgid "EPL1 Label Printer"
 msgstr "Принтер для печати этикеток EPL1"
 
@@ -3893,6 +3905,9 @@ msgstr "По длинной стороне (книжная)"
 msgid "Looking for printer."
 msgstr "Поиск принтера."
 
+msgid "Main Roll"
+msgstr ""
+
 msgid "Manual Feed"
 msgstr "Ручная подача"
 
@@ -4430,6 +4445,9 @@ msgstr "Для SEQUENCE длина не установлена"
 msgid "SSL/TLS Negotiation Error"
 msgstr "SSL/TLS Negotiation Error"
 
+msgid "Second Roll (DUO/Twin Only)"
+msgstr ""
+
 msgid "See Other"
 msgstr "Посмотреть другие"
 
@@ -6556,6 +6574,14 @@ msgstr ""
 msgid "finishing-template.trim-after-pages"
 msgstr ""
 
+#. TRANSLATORS: Trim After Every Set
+msgid "finishing-template.trim-after-sets"
+msgstr ""
+
+#. TRANSLATORS: Trim After Every Page
+msgid "finishing-template.trim-after-sheets"
+msgstr ""
+
 #. TRANSLATORS: Finishings
 msgid "finishings"
 msgstr ""
@@ -8892,6 +8918,58 @@ msgstr ""
 msgid "media-type.cd"
 msgstr ""
 
+#. TRANSLATORS: Photo Advanced Paper
+msgid "media-type.com.hp.advanced-photo"
+msgstr ""
+
+#. TRANSLATORS: Brochure Glossy Paper
+msgid "media-type.com.hp.brochure-glossy"
+msgstr ""
+
+#. TRANSLATORS: Brochure Matte Paper
+msgid "media-type.com.hp.brochure-matte"
+msgstr ""
+
+#. TRANSLATORS: Matte Coverstock
+msgid "media-type.com.hp.cover-matte"
+msgstr ""
+
+#. TRANSLATORS: EcoSMART Lite Paper
+msgid "media-type.com.hp.ecosmart-lite"
+msgstr ""
+
+#. TRANSLATORS: Everyday Glossy Paper
+msgid "media-type.com.hp.everyday-glossy"
+msgstr ""
+
+#. TRANSLATORS: Everyday Matte Paper
+msgid "media-type.com.hp.everyday-matte"
+msgstr ""
+
+#. TRANSLATORS: Extra Heavyweight Paper
+msgid "media-type.com.hp.extra-heavy"
+msgstr ""
+
+#. TRANSLATORS: Intermediate Paper
+msgid "media-type.com.hp.intermediate"
+msgstr ""
+
+#. TRANSLATORS: Mid-Weight Paper
+msgid "media-type.com.hp.mid-weight"
+msgstr ""
+
+#. TRANSLATORS: Inkjet Premium Paper
+msgid "media-type.com.hp.premium-inkjet"
+msgstr ""
+
+#. TRANSLATORS: Photo Premium Paper
+msgid "media-type.com.hp.premium-photo"
+msgstr ""
+
+#. TRANSLATORS: Premium Matte Presentation Paper
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr ""
+
 #. TRANSLATORS: Continuous
 msgid "media-type.continuous"
 msgstr ""
@@ -9084,6 +9162,22 @@ msgstr ""
 msgid "media-type.imaging-cylinder"
 msgstr ""
 
+#. TRANSLATORS: Photo Paper Plus Glossy II
+msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Plus Glossy II
+msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
+msgstr ""
+
 #. TRANSLATORS: Labels
 msgid "media-type.labels"
 msgstr ""
@@ -15098,6 +15192,9 @@ msgstr ""
 #~ msgid "A Samba username is required to export printer drivers"
 #~ msgstr "Для экспорта драйверов принтера требуется имя пользователя Samba"
 
+#~ msgid "Dymo"
+#~ msgstr "Dymo"
+
 #~ msgid "Export Printers to Samba"
 #~ msgstr "Экспортировать принтеры в Samba"
 
index 818df30e93cd23d2d68b246d8fa9a84933e38889..c1dd080d73d1a36e7675d0629788047ef0fefbf6 100644 (file)
@@ -12,7 +12,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 2.3\n"
 "Report-Msgid-Bugs-To: https://github.com/apple/cups/issues\n"
-"POT-Creation-Date: 2019-08-23 09:13-0400\n"
+"POT-Creation-Date: 2019-12-18 20:19-0500\n"
 "PO-Revision-Date: 2018-10-09 00:21-0500\n"
 "Last-Translator: Mingcong Bai <jeffbai@aosc.io>\n"
 "Language-Team: Chinese (Simplified)\n"
@@ -1538,6 +1538,9 @@ msgstr ""
 msgid "--not expression        Unary NOT of expression"
 msgstr ""
 
+msgid "--pam-service service   Use the named PAM service"
+msgstr ""
+
 msgid "--path regex            Match resource path to regular expression"
 msgstr ""
 
@@ -1708,6 +1711,9 @@ msgstr "-90"
 msgid "-95"
 msgstr "-95"
 
+msgid "-A                      Enable authentication"
+msgstr ""
+
 msgid "-C                      Send requests using chunking (default)"
 msgstr ""
 
@@ -1879,6 +1885,9 @@ msgstr ""
 msgid "-d destination          Set the named destination as the server default"
 msgstr ""
 
+msgid "-d destination          Specify the destination"
+msgstr ""
+
 msgid "-d name=value           Set named variable to value"
 msgstr ""
 
@@ -2488,6 +2497,9 @@ msgstr "300 毫米/秒"
 msgid "300dpi"
 msgstr "300 dpi"
 
+msgid "30859 Paint Can Label"
+msgstr ""
+
 msgid "35"
 msgstr "35"
 
@@ -3137,6 +3149,9 @@ msgstr "剪切"
 msgid "Cutter"
 msgstr "车床刀具"
 
+msgid "DYMO"
+msgstr ""
+
 msgid "Dark"
 msgstr "暗色"
 
@@ -3226,9 +3241,6 @@ msgstr "草稿"
 msgid "Duplexer"
 msgstr "双工器"
 
-msgid "Dymo"
-msgstr "Dymo"
-
 msgid "EPL1 Label Printer"
 msgstr "EPL1 标签打印机"
 
@@ -3882,6 +3894,9 @@ msgstr "长边缘(竖直)"
 msgid "Looking for printer."
 msgstr "正在寻找打印机。"
 
+msgid "Main Roll"
+msgstr ""
+
 msgid "Manual Feed"
 msgstr "手动喂纸"
 
@@ -4420,6 +4435,9 @@ msgstr "SEQUENCE 使用不定长度"
 msgid "SSL/TLS Negotiation Error"
 msgstr "SSL/TLS 协商错误"
 
+msgid "Second Roll (DUO/Twin Only)"
+msgstr ""
+
 msgid "See Other"
 msgstr "查看其他"
 
@@ -6526,6 +6544,14 @@ msgstr ""
 msgid "finishing-template.trim-after-pages"
 msgstr ""
 
+#. TRANSLATORS: Trim After Every Set
+msgid "finishing-template.trim-after-sets"
+msgstr ""
+
+#. TRANSLATORS: Trim After Every Page
+msgid "finishing-template.trim-after-sheets"
+msgstr ""
+
 #. TRANSLATORS: Finishings
 msgid "finishings"
 msgstr ""
@@ -8860,6 +8886,58 @@ msgstr ""
 msgid "media-type.cd"
 msgstr ""
 
+#. TRANSLATORS: Photo Advanced Paper
+msgid "media-type.com.hp.advanced-photo"
+msgstr ""
+
+#. TRANSLATORS: Brochure Glossy Paper
+msgid "media-type.com.hp.brochure-glossy"
+msgstr ""
+
+#. TRANSLATORS: Brochure Matte Paper
+msgid "media-type.com.hp.brochure-matte"
+msgstr ""
+
+#. TRANSLATORS: Matte Coverstock
+msgid "media-type.com.hp.cover-matte"
+msgstr ""
+
+#. TRANSLATORS: EcoSMART Lite Paper
+msgid "media-type.com.hp.ecosmart-lite"
+msgstr ""
+
+#. TRANSLATORS: Everyday Glossy Paper
+msgid "media-type.com.hp.everyday-glossy"
+msgstr ""
+
+#. TRANSLATORS: Everyday Matte Paper
+msgid "media-type.com.hp.everyday-matte"
+msgstr ""
+
+#. TRANSLATORS: Extra Heavyweight Paper
+msgid "media-type.com.hp.extra-heavy"
+msgstr ""
+
+#. TRANSLATORS: Intermediate Paper
+msgid "media-type.com.hp.intermediate"
+msgstr ""
+
+#. TRANSLATORS: Mid-Weight Paper
+msgid "media-type.com.hp.mid-weight"
+msgstr ""
+
+#. TRANSLATORS: Inkjet Premium Paper
+msgid "media-type.com.hp.premium-inkjet"
+msgstr ""
+
+#. TRANSLATORS: Photo Premium Paper
+msgid "media-type.com.hp.premium-photo"
+msgstr ""
+
+#. TRANSLATORS: Premium Matte Presentation Paper
+msgid "media-type.com.hp.premium-presentation-matte"
+msgstr ""
+
 #. TRANSLATORS: Continuous
 msgid "media-type.continuous"
 msgstr ""
@@ -9052,6 +9130,22 @@ msgstr ""
 msgid "media-type.imaging-cylinder"
 msgstr ""
 
+#. TRANSLATORS: Photo Paper Plus Glossy II
+msgid "media-type.jp.co.canon-photo-paper-plus-glossy-ii"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+msgid "media-type.jp.co.canon-photo-paper-pro-platinum"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Plus Glossy II
+msgid "media-type.jp.co.canon_photo-paper-plus-glossy-ii"
+msgstr ""
+
+#. TRANSLATORS: Photo Paper Pro Platinum
+msgid "media-type.jp.co.canon_photo-paper-pro-platinum"
+msgstr ""
+
 #. TRANSLATORS: Labels
 msgid "media-type.labels"
 msgstr ""
@@ -15054,6 +15148,9 @@ msgstr "~/.cups/lpoptions 文件所指定的默认目标不存在。"
 #~ msgid "A Samba username is required to export printer drivers"
 #~ msgstr "需要 Samba 用户名以导出打印机驱动"
 
+#~ msgid "Dymo"
+#~ msgstr "Dymo"
+
 #~ msgid "Export Printers to Samba"
 #~ msgstr "将打印机导出到 Samba"
 
index 0e7c09c63124fc9baa37f0dade8643574c7e57b6..40b246ce86f0cd2686a74d49b87a00110d48d1a9 100644 (file)
@@ -576,6 +576,10 @@ _("finishing-template.trim-after-documents");
 _("finishing-template.trim-after-job");
 /* TRANSLATORS: Trim After Every Page */
 _("finishing-template.trim-after-pages");
+/* TRANSLATORS: Trim After Every Set */
+_("finishing-template.trim-after-sets");
+/* TRANSLATORS: Trim After Every Page */
+_("finishing-template.trim-after-sheets");
 /* TRANSLATORS: Finishings */
 _("finishings");
 /* TRANSLATORS: Finishings */
@@ -1578,6 +1582,32 @@ _("media-type.cardboard");
 _("media-type.cardstock");
 /* TRANSLATORS: CD */
 _("media-type.cd");
+/* TRANSLATORS: Photo Advanced Paper */
+_("media-type.com.hp.advanced-photo");
+/* TRANSLATORS: Brochure Glossy Paper */
+_("media-type.com.hp.brochure-glossy");
+/* TRANSLATORS: Brochure Matte Paper */
+_("media-type.com.hp.brochure-matte");
+/* TRANSLATORS: Matte Coverstock */
+_("media-type.com.hp.cover-matte");
+/* TRANSLATORS: EcoSMART Lite Paper */
+_("media-type.com.hp.ecosmart-lite");
+/* TRANSLATORS: Everyday Glossy Paper */
+_("media-type.com.hp.everyday-glossy");
+/* TRANSLATORS: Everyday Matte Paper */
+_("media-type.com.hp.everyday-matte");
+/* TRANSLATORS: Extra Heavyweight Paper */
+_("media-type.com.hp.extra-heavy");
+/* TRANSLATORS: Intermediate Paper */
+_("media-type.com.hp.intermediate");
+/* TRANSLATORS: Mid-Weight Paper */
+_("media-type.com.hp.mid-weight");
+/* TRANSLATORS: Inkjet Premium Paper */
+_("media-type.com.hp.premium-inkjet");
+/* TRANSLATORS: Photo Premium Paper */
+_("media-type.com.hp.premium-photo");
+/* TRANSLATORS: Premium Matte Presentation Paper */
+_("media-type.com.hp.premium-presentation-matte");
 /* TRANSLATORS: Continuous */
 _("media-type.continuous");
 /* TRANSLATORS: Continuous Long */
@@ -1674,6 +1704,14 @@ _("media-type.gravure-cylinder");
 _("media-type.image-setter-paper");
 /* TRANSLATORS: Imaging Cylinder */
 _("media-type.imaging-cylinder");
+/* TRANSLATORS: Photo Paper Plus Glossy II*/
+_("media-type.jp.co.canon-photo-paper-plus-glossy-ii");
+/* TRANSLATORS: Photo Paper Pro Platinum*/
+_("media-type.jp.co.canon-photo-paper-pro-platinum");
+/* TRANSLATORS: Photo Paper Plus Glossy II*/
+_("media-type.jp.co.canon_photo-paper-plus-glossy-ii");
+/* TRANSLATORS: Photo Paper Pro Platinum*/
+_("media-type.jp.co.canon_photo-paper-pro-platinum");
 /* TRANSLATORS: Labels */
 _("media-type.labels");
 /* TRANSLATORS: Colored Labels */
index 00b1a22d66af8ef410a5337f516e810a2be0e3ba..beeccc69a51bea1a9b2720beca9534c265540324 100644 (file)
@@ -1,13 +1,13 @@
 .\"
 .\" cupsd.conf man page for CUPS.
 .\"
-.\" Copyright © 2007-2019 by Apple Inc.
+.\" Copyright © 2007-2021 by Apple Inc.
 .\" Copyright © 1997-2006 by Easy Software Products.
 .\"
 .\" Licensed under Apache License v2.0.  See the file "LICENSE" for more
 .\" information.
 .\"
-.TH cupsd.conf 5 "CUPS" "16 July 2019" "Apple Inc."
+.TH cupsd.conf 5 "CUPS" "1 October 2021" "Apple Inc."
 .SH NAME
 cupsd.conf \- server configuration file for cups
 .SH DESCRIPTION
@@ -212,11 +212,6 @@ The default is "5".
 \fBKeepAlive No\fR
 Specifies whether to support HTTP keep-alive connections.
 The default is "Yes".
-.\"#KeepAliveTimeout
-.TP 5
-\fBKeepAliveTimeout \fIseconds\fR
-Specifies how long an idle client connection remains open.
-The default is "30".
 .\"#LimitIPP
 .TP 5
 \fB<Limit \fIoperation \fR...\fB> \fR... \fB</Limit>\fR
@@ -245,13 +240,6 @@ The default is "0" which disables the limit check.
 Listens to the specified address and port or domain socket path for connections.
 Multiple Listen directives can be provided to listen on multiple addresses.
 The Listen directive is similar to the Port directive but allows you to restrict access to specific interfaces or networks.
-.\"#ListenBackLog
-.TP 5
-\fBListenBackLog \fInumber\fR
-Specifies the number of pending connections that will be allowed.
-This normally only affects very busy servers that have reached the MaxClients limit, but can also be triggered by large numbers of simultaneous connections.
-When the limit is reached, the operating system will refuse additional connections until the scheduler can accept the pending ones.
-The default is the OS-defined default limit, typically either "5" for older operating systems or "128" for newer operating systems.
 .\"#Location
 .TP 5
 \fB<Location \fI/path\fB> \fR... \fB</Location>\fR
@@ -829,6 +817,11 @@ The default is no classification banner.
 .br
 Specifies whether users may override the classification (cover page) of individual print jobs using the "job-sheets" option.
 The default is "No".
+.\"#ListenBackLog
+.TP 5
+\fBListenBackLog \fInumber\fR
+Specified the number of pending connections that will be allowed.
+The scheduler now uses the value "128" on all platforms.
 .\"#PageLogFormat
 .TP 5
 \fBPageLogFormat \fIformat-string\fR
@@ -902,4 +895,4 @@ Require authentication for accesses from outside the 10. network:
 .BR subscriptions.conf (5),
 CUPS Online Help (http://localhost:631/help)
 .SH COPYRIGHT
-Copyright \[co] 2007-2019 by Apple Inc.
+Copyright \[co] 2007-2021 by Apple Inc.
index 5753c69da6f6d9ec0e6eea6e0c3e39595c282114..fa32efb2e5e1bef9c4e078ae63648b279f68100f 100644 (file)
@@ -6,7 +6,7 @@
 .\" Licensed under Apache License v2.0.  See the file "LICENSE" for more
 .\" information.
 .\"
-.TH ippeveprinter 1 "CUPS" "17 May 2019" "Apple Inc."
+.TH ippeveprinter 1 "CUPS" "2 December 2019" "Apple Inc."
 .SH NAME
 ippeveprinter \- an ipp everywhere printer application for cups
 .SH SYNOPSIS
@@ -16,10 +16,15 @@ ippeveprinter \- an ipp everywhere printer application for cups
 ] [
 .B \-\-no\-web\-forms
 ] [
+.B \-\-pam\-service
+.I service
+] [
 .B \-\-version
 ] [
 .B \-2
 ] [
+.B \-A
+] [
 .B \-D
 .I device-uri
 ] [
@@ -89,12 +94,21 @@ Show program usage.
 .B \-\-no\-web\-forms
 Disable the web interface forms used to update the media and supply levels.
 .TP 5
+\fB\-\-pam\-service \fIservice\fR
+Set the PAM service name.
+The default service is "cups".
+.TP 5
 .B \-\-version
 Show the CUPS version.
 .TP 5
 .B \-2
 Report support for two-sided (duplex) printing.
 .TP 5
+.B \-A
+Enable authentication for the created printer.
+.B ippeveprinter
+uses PAM to authenticate HTTP Basic credentials.
+.TP 5
 \fB\-D \fIdevice-uri\fR
 Set the device URI for print output.
 The URI can be a filename, directory, or a network socket URI of the form "socket://ADDRESS[:PORT]" (where the default port number is 9100).
@@ -168,6 +182,9 @@ command.
 Specifies the port number to listen on.
 The default is a user-specific number from 8000 to 8999.
 .TP 5
+.B \-r off
+Turns off DNS-SD service advertisements entirely.
+.TP 5
 \fB\-r \fIsubtype[,subtype]\fR
 Specifies the DNS-SD subtype(s) to advertise.
 Separate multiple subtypes with a comma.
index ce858da596247a709b90d044a78317f09a068a1b..7d2cca562f0805d67e8b82e64aff6b572f5d362b 100644 (file)
@@ -1,12 +1,12 @@
 .\"
 .\" ipptool man page.
 .\"
-.\" Copyright © 2010-2019 by Apple Inc.
+.\" Copyright © 2010-2021 by Apple Inc.
 .\"
 .\" Licensed under Apache License v2.0.  See the file "LICENSE" for more
 .\" information.
 .\"
-.TH ipptool 1 "CUPS" "26 April 2019" "Apple Inc."
+.TH ipptool 1 "CUPS" "5 April 2021" "Apple Inc."
 .SH NAME
 ipptool \- perform internet printing protocol requests
 .SH SYNOPSIS
@@ -36,6 +36,8 @@ ipptool \- perform internet printing protocol requests
 .B \-P
 .I filename.plist
 ] [
+.B \-R
+] [
 .B \-S
 ] [
 .B \-T
@@ -139,6 +141,9 @@ The default is to use "Transfer\-Encoding: chunked" for requests with attached f
 Specifies that the test results should be written to the named XML (Apple plist) file in addition to the regular test report (\fB\-t\fR).
 This option is incompatible with the \fB\-i\fR (interval) and \fB\-n\fR (repeat\-count) options.
 .TP 5
+.B \-R
+Retries tests when the "server-error-busy" status code is returned.
+.TP 5
 .B \-S
 Forces (dedicated) TLS encryption when connecting to the server.
 .TP 5
@@ -249,4 +254,4 @@ IANA IPP Registry (http://www.iana.org/assignments/ipp\-registrations),
 PWG Internet Printing Protocol Workgroup (http://www.pwg.org/ipp)
 RFC 8011 (http://tools.ietf.org/html/rfc8011),
 .SH COPYRIGHT
-Copyright \[co] 2007-2019 by Apple Inc.
+Copyright \[co] 2007-2021 by Apple Inc.
index 700101773c8f7a8a24b6f709d3a6ce0a7135a8b3..b4b08c056102ed72595394db1a51acff0822ae47 100644 (file)
@@ -1,12 +1,12 @@
 .\"
 .\" ipptoolfile man page.
 .\"
-.\" Copyright © 2010-2019 by Apple Inc.
+.\" Copyright © 2010-2021 by Apple Inc.
 .\"
 .\" Licensed under Apache License v2.0.  See the file "LICENSE" for more
 .\" information.
 .\"
-.TH ipptoolfile 5 "CUPS" "15 August 2019" "Apple Inc."
+.TH ipptoolfile 5 "CUPS" "12 May 2021" "Apple Inc."
 .SH NAME
 ipptoolfile \- ipptool file format
 .SH DESCRIPTION
@@ -214,6 +214,10 @@ Specifies whether
 .BR ipptool (8)
 will ignore errors and continue with subsequent tests.
 .TP 5
+\fBMONITOR-PRINTER-STATE \fR[ \fIprinter-uri \fR] \fB{ EXPECT \fIattribute-name \fR[ \fIpredicate(s) \fR] \fB}\fR
+Specifies printer state monitoring tests to run in parallel with the test operation.
+The monitoring tests will run until all of the \fBEXPECT\fR conditions are satisfied or the primary test operation has completed, whichever occurs first.
+.TP 5
 \fBNAME "\fIliteral string\fB"\fR
 Specifies the human-readable name of the test.
 .TP 5
@@ -277,13 +281,19 @@ The following predicates are understood following the \fBEXPECT\fR test directiv
 Requires the \fBEXPECT\fR attribute to have the specified number of values.
 .TP 5
 \fBDEFINE\-MATCH \fIvariable-name\fR
-Defines the variable to "1" when the \fBEXPECT\fR condition matches. A side-effect of this predicate is that this \fBEXPECT\fR will never fail a test.
+Defines the variable to "1" when the \fBEXPECT\fR condition matches.
+A side-effect of this predicate is that this \fBEXPECT\fR will never fail a test.
 .TP 5
 \fBDEFINE\-NO\-MATCH \fIvariable-name\fR
-Defines the variable to "1" when the \fBEXPECT\fR condition does not match. A side-effect of this predicate is that this \fBEXPECT\fR will never fail a test.
+Defines the variable to "1" when the \fBEXPECT\fR condition does not match.
+A side-effect of this predicate is that this \fBEXPECT\fR will never fail a test.
 .TP 5
 \fBDEFINE\-VALUE \fIvariable-name\fR
-Defines the variable to the value of the attribute when the \fBEXPECT\fR condition matches. A side-effect of this predicate is that this \fBEXPECT\fR will never fail a test.
+Defines the variable to the value of the attribute when the \fBEXPECT\fR condition matches.
+A side-effect of this predicate is that this \fBEXPECT\fR will never fail a test.
+.TP 5
+\fBDISPLAY\-MATCH \fI"message"\fR
+Displays the specified message when the \fBEXPECT\fR condition matches.
 .TP 5
 \fBIF\-DEFINED \fIvariable-name\fR
 Makes the \fBEXPECT\fR conditions apply only if the specified variable is defined.
@@ -294,8 +304,9 @@ Makes the \fBEXPECT\fR conditions apply only if the specified variable is not de
 \fBIN\-GROUP \fItag\fR
 Requires the \fBEXPECT\fR attribute to be in the specified group tag.
 .TP 5
-\fBOF\-TYPE \fItag[|tag,...]\fR
+\fBOF\-TYPE \fItag[(limits)|tag|...]\fR
 Requires the \fBEXPECT\fR attribute to use one of the specified value tag(s).
+Most value tags also support the specification of limits in parenthesis, for example "name(42)" would allow nameWith/WithoutLanguage strings up to 42 octets in length, "name(4:MAX)" would allow nameWith/WithoutLanguage strings between 4 and 255 octets in length, and "integer(-273:MAX)" would allow integers between -273 and 2147483647.
 .TP 5
 \fBREPEAT\-LIMIT \fInumber\fR
 .br
@@ -342,7 +353,13 @@ Requires that all values of the \fBEXPECT\fR attribute match the number(s) or nu
 Requires that all values of the \fBEXPECT\fR attribute match the boolean value given.
 .TP 5
 \fBWITH\-ALL\-VALUES "/\fIregular expression\fB/"\fR
-Requires that all values of the \fBEXPECT\fR attribute match the regular expression, which must conform to the POSIX regular expression syntax. Comparisons are case-sensitive.
+Requires that all values of the \fBEXPECT\fR attribute match the regular expression, which must conform to the POSIX regular expression syntax.
+Comparisons are case-sensitive.
+.TP 5
+\fBWITH\-DISTINCT\-VALUES\fR
+Requires that all values of the \fBEXPECT\fR attribute are unique.
+Comparisons are case-sensitive.
+Only charset, collection, enum, integer, keyword, mimeMediaType, naturalLanguage, rangeOfInteger, resolution, uriScheme attributes support this predicate.
 .TP 5
 \fBWITH\-HOSTNAME "\fIliteral string\fB"\fR
 .TP 5
@@ -652,4 +669,4 @@ IANA IPP Registry (http://www.iana.org/assignments/ipp-registrations),
 PWG Internet Printing Protocol Workgroup (http://www.pwg.org/ipp),
 RFC 8011 (http://tools.ietf.org/html/rfc8011)
 .SH COPYRIGHT
-Copyright \[co] 2007-2019 by Apple Inc.
+Copyright \[co] 2007-2021 by Apple Inc.
index 44d368c703f8c95257a272bdf0385609effcae60..516b61545859a01ce07a5e29fc59d7b589b0a89d 100644 (file)
@@ -46,7 +46,7 @@ static char           *rss_password;  /* Password for remote RSS */
  */
 
 static int             compare_rss(_cups_rss_t *a, _cups_rss_t *b);
-static void            delete_message(_cups_rss_t *rss);
+static void            delete_message(_cups_rss_t *msg);
 static void            load_rss(cups_array_t *rss, const char *filename);
 static _cups_rss_t     *new_message(int sequence_number, char *subject,
                                     char *text, char *link_url,
index 537c19450894f4c8994136d6357be372aa00520f..d674d2ac42c7acf796e28e19d0c7dfe714402d5b 100644 (file)
@@ -346,12 +346,12 @@ l 0755 root sys /usr/bsd/lprm $BINDIR/lprm
 %system darwin
 f 0555 root sys $LIBDIR/libcups.2.dylib cups/libcups.2.dylib nostrip()
 l 0755 root sys $LIBDIR/libcups.dylib libcups.2.dylib
-f 0555 root sys $LIBDIR/libcupsimage.2.dylib filter/libcupsimage.2.dylib nostrip()
+f 0555 root sys $LIBDIR/libcupsimage.2.dylib cups/libcupsimage.2.dylib nostrip()
 l 0755 root sys $LIBDIR/libcupsimage.dylib libcupsimage.2.dylib
 %system !darwin
 f 0555 root sys $LIBDIR/libcups.so.2 cups/libcups.so.2 nostrip()
 l 0755 root sys $LIBDIR/libcups.so libcups.so.2
-f 0555 root sys $LIBDIR/libcupsimage.so.2 filter/libcupsimage.so.2 nostrip()
+f 0555 root sys $LIBDIR/libcupsimage.so.2 cups/libcupsimage.so.2 nostrip()
 l 0755 root sys $LIBDIR/libcupsimage.so libcupsimage.so.2
 %system all
 %subpackage
index 04b587d7ff6d398a00c30630792855ecf74fdf03..b4a8341386d25a770f096bfeb7450fa583b6e075 100644 (file)
@@ -323,5 +323,8 @@ ppdcSource::import_ppd(const char *f)       // I - Filename
     }
   }
 
+  if (ppd)
+    ppdClose(ppd);
+
   return (1);
 }
index c25d49668e4a883a94ee26fc2cfdf3e70e0ee979..aec29131496371589021b95082a8e16d034f95ab 100644 (file)
@@ -1,7 +1,7 @@
 //
 // Source class for the CUPS PPD Compiler.
 //
-// Copyright 2007-2018 by Apple Inc.
+// Copyright 2007-2020 by Apple Inc.
 // Copyright 2002-2007 by Easy Software Products.
 //
 // Licensed under Apache License v2.0.  See the file "LICENSE" for more
@@ -537,7 +537,7 @@ ppdcSource::get_color_profile(
   for (i = 0; i < 9; i ++)
     m[i] = get_float(fp);
 
-  return (new ppdcProfile(resolution, media_type, g, d, m));
+  return (new ppdcProfile(resolution, media_type, d, g, m));
 }
 
 
@@ -1743,15 +1743,17 @@ ppdcSource::get_resolution(ppdcFile *fp)// I - File to read
 
   switch (sscanf(name, "%dx%d", &xdpi, &ydpi))
   {
-    case 0 :
-        _cupsLangPrintf(stderr,
-                       _("ppdc: Bad resolution name \"%s\" on line %d of "
-                         "%s."), name, fp->line, fp->filename);
-        break;
     case 1 :
         ydpi = xdpi;
-       break;
-  }
+        break;
+    case 2 :
+        break;
+    default :
+        _cupsLangPrintf(stderr,
+                  _("ppdc: Bad resolution name \"%s\" on line %d of "
+        "%s."), name, fp->line, fp->filename);
+        break;
+}
 
   // Create the necessary PS commands...
   snprintf(command, sizeof(command),
@@ -1878,7 +1880,7 @@ ppdcSource::get_simple_profile(ppdcFile *fp)
   }
 
   // Return the new profile...
-  return (new ppdcProfile(resolution, media_type, g, kd, m));
+  return (new ppdcProfile(resolution, media_type, kd, g, m));
 }
 
 
index 5411b5e376fab661a366623ce456fb4a74d51750..385f456413ed4c7b5354610db3a5b05545a10d62 100644 (file)
@@ -21,7 +21,7 @@
 // Local functions...
 //
 
-static void    usage(void);
+static void    usage(void) _CUPS_NORETURN;
 
 
 //
@@ -229,7 +229,6 @@ main(int  argc,                             // I - Number of command-line arguments
 
          default :                     // Unknown
              usage();
-             break;
        }
     }
     else
@@ -393,7 +392,7 @@ main(int  argc,                             // I - Number of command-line arguments
        return (1);
       }
 
-      if (templocales != locales)
+      if (templocales && templocales != locales)
         templocales->release();
 
       cupsFileClose(fp);
index 506e6616620ba08be8458e54983049adc58b8f03..75636a9447bbc9e0d38fb809c048328184f02a36 100644 (file)
@@ -20,7 +20,7 @@
 // Local functions...
 //
 
-static void    usage(void);
+static void    usage(void) _CUPS_NORETURN;
 
 
 //
index e5bb0469aaa82fd8d7eabaad8c872184c5ab82b1..a2f9648f28f7a0190adeb7120f508c46099c37f7 100644 (file)
@@ -21,7 +21,7 @@
 // Local functions...
 //
 
-static void    usage(void);
+static void    usage(void) _CUPS_NORETURN;
 
 
 //
index 94d67ff839a34e38b102f175f34e0dc533193505..1ab804399d6cf2eda53cc6971dfb2fa6488f6e28 100644 (file)
@@ -22,7 +22,7 @@
 //
 
 static const char      *ppd_locale(ppd_file_t *ppd);
-static void            usage(void);
+static void            usage(void) _CUPS_NORETURN;
 
 
 //
index 244aaf186c7511cd27277e272c3996faaeba1ac4..498b34e3d7f0d3c7ab4d3ac67c921f8cd99aa796 100644 (file)
@@ -21,7 +21,7 @@
 //
 
 static void    add_ui_strings(ppdcDriver *d, ppdcCatalog *catalog);
-static void    usage(void);
+static void    usage(void) _CUPS_NORETURN;
 
 
 //
index 7ac2cb27b58363c2bcef47d05f7f2f2d4a680da4..416e545d1cd082981e66275ce362d5d7c3a4a060 100644 (file)
@@ -56,6 +56,7 @@
 #media "w108h36/1.50x0.50\"" 108 36
 #media "w108h72/1.50x1.00\"" 108 72
 #media "w108h144/1.50x2.00\"" 108 144
+#media "w142h227/80x50mm" 142 227
 #media "w144h26/2.00x0.37\"" 144 26
 #media "w144h36/2.00x0.50\"" 144 36
 #media "w144h72/2.00x1.00\"" 144 72
 #media "w216h90/3.00x1.25\"" 216 90
 #media "w216h144/3.00x2.00\"" 216 144
 #media "w216h216/3.00x3.00\"" 216 216
+#media "w216h288/3.00x4.00\"" 216 288
 #media "w216h360/3.00x5.00\"" 216 360
+#media "w216h432/3.00x6.00\"" 216 432
+#media "w216h576/3.00x8.00\"" 216 576
 #media "w234h144/3.25x2.00\"" 234 144
 #media "w234h360/3.25x5.00\"" 234 360
 #media "w234h396/3.25x5.50\"" 234 396
@@ -93,6 +97,7 @@
 #media "w288h360/4.00x5.00\"" 288 360
 #media "w288h432/4.00x6.00\"" 288 432
 #media "w288h468/4.00x6.50\"" 288 468
+#media "w288h576/4.00x8.00\"" 288 576
 #media "w288h936/4.00x13.00\"" 288 936
 #media "w432h72/6.00x1.00\"" 432 72
 #media "w432h144/6.00x2.00\"" 432 144
 #media "w432h360/6.00x5.00\"" 432 360
 #media "w432h432/6.00x6.00\"" 432 432
 #media "w432h468/6.00x6.50\"" 432 468
+#media "w432h576/6.00x8.00\"" 432 576
 #media "w576h72/8.00x1.00\"" 576 72
 #media "w576h144/8.00x2.00\"" 576 144
 #media "w576h216/8.00x3.00\"" 576 216
 #media "w576h360/8.00x5.00\"" 576 360
 #media "w576h432/8.00x6.00\"" 576 432
 #media "w576h468/8.00x6.50\"" 576 468
+#media "w595h72/8.26x1.00\"" 595 72
 
 // Common stuff for all drivers...
 Attribute "cupsVersion" "" "2.3"
@@ -115,7 +122,7 @@ Attribute "FileSystem" "" "False"
 Attribute "LandscapeOrientation" "" "Plus90"
 Attribute "TTRasterizer" "" "Type42"
 
-Copyright "Copyright (c) 2007-2018 by Apple Inc."
+Copyright "Copyright (c) 2007-2021 by Apple Inc."
 Copyright "Copyright (c) 1997-2007 by Easy Software Products."
 Copyright ""
 Copyright "Licensed under Apache License v2.0.  See the file \"LICENSE\" for more"
@@ -125,11 +132,11 @@ Font *
 
 Version "2.3"
 
-// Dymo Label Printer
+// DYMO Label Printer
 {
-  Manufacturer "Dymo"
+  Manufacturer "DYMO"
   ModelName "Label Printer"
-  Attribute NickName "" "Dymo Label Printer"
+  Attribute NickName "" "DYMO Label Printer"
   PCFileName "dymo.ppd"
   DriverType label
   ModelNumber $DYMO_3x0
@@ -155,6 +162,9 @@ Version "2.3"
   Resolution k 1 0 0 0 203dpi
   *Resolution k 1 0 0 0 300dpi
 
+  *InputSlot 0 "Roll/Main Roll"
+  InputSlot 1 "Roll2/Second Roll (DUO/Twin Only)"
+
   Darkness 0 Light
   Darkness 1 Medium
   *Darkness 2 Normal
@@ -933,12 +943,16 @@ Version "2.3"
     MinSize 36 36
     MaxSize 576 3600
 
+    MediaSize A4
+    MediaSize A5
+    MediaSize A5Rotated
     MediaSize w90h18
     MediaSize w90h162
     MediaSize w108h18
     MediaSize w108h36
     MediaSize w108h72
     MediaSize w108h144
+    MediaSize w142h227
     MediaSize w144h26
     MediaSize w144h36
     MediaSize w144h72
@@ -956,8 +970,11 @@ Version "2.3"
     MediaSize w216h72
     MediaSize w216h90
     MediaSize w216h144
+    MediaSize w216h288
     MediaSize w216h216
     MediaSize w216h360
+    MediaSize w216h432
+    MediaSize w216h576
     MediaSize w234h144
     MediaSize w234h360
     MediaSize w234h396
@@ -972,6 +989,7 @@ Version "2.3"
     *MediaSize w288h360
     MediaSize w288h432
     MediaSize w288h468
+    MediaSize w288h576
     MediaSize w288h936
     MediaSize w432h72
     MediaSize w432h144
@@ -980,6 +998,7 @@ Version "2.3"
     MediaSize w432h360
     MediaSize w432h432
     MediaSize w432h468
+    MediaSize w432h576
     MediaSize w576h72
     MediaSize w576h144
     MediaSize w576h216
@@ -987,6 +1006,7 @@ Version "2.3"
     MediaSize w576h360
     MediaSize w576h432
     MediaSize w576h468
+    MediaSize w595h72
 
     *Resolution k 1 0 0 0 203dpi
     Resolution k 1 0 0 0 300dpi
index 4fbad6e2440f38375b957de68d1b0e6f20ff2033..4fdcf1177e916191aea1c35f14d5b19b99c209c6 100644 (file)
@@ -202,7 +202,6 @@ cupsdAddNameMask(cups_array_t **masks,      /* IO - Masks array (created as needed) *
 
     if (ifptr >= ifname && *ifptr == ')')
     {
-      ifptr --;
       *ifptr = '\0';
     }
 
index 258e8fc83394e6eec96bdc192f3cc0c0f1893897..2a28b568f89f9fe95318ab517875ebcaa39bcc7d 100644 (file)
@@ -434,5 +434,9 @@ ctcompare(const char *a,            /* I - First string */
     b ++;
   }
 
+  // either both *a and *b == '\0', or one points inside a string,
+  // so factor that in.
+  result |= (*a ^ *b);
+
   return (result);
 }
index 14d2558bf0f12a97e7d3dfea359042ac4f5e80bc..8e24f9ba4187d301bf5f1b8be0c47cfb0d21d670 100644 (file)
@@ -658,13 +658,10 @@ cupsdSaveAllClasses(void)
 {
   cups_file_t          *fp;            /* classes.conf file */
   char                 filename[1024], /* classes.conf filename */
-                       temp[1024],     /* Temporary string */
                        value[2048],    /* Value string */
                        *name;          /* Current user name */
   cupsd_printer_t      *pclass;        /* Current printer class */
   int                  i;              /* Looping var */
-  time_t               curtime;        /* Current time */
-  struct tm            curdate;        /* Current date */
   cups_option_t                *option;        /* Current option */
 
 
@@ -683,12 +680,8 @@ cupsdSaveAllClasses(void)
   * Write a small header to the file...
   */
 
-  time(&curtime);
-  localtime_r(&curtime, &curdate);
-  strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", &curdate);
-
   cupsFilePuts(fp, "# Class configuration file for " CUPS_SVERSION "\n");
-  cupsFilePrintf(fp, "# Written by cupsd on %s\n", temp);
+  cupsFilePrintf(fp, "# Written by cupsd\n");
   cupsFilePuts(fp, "# DO NOT EDIT THIS FILE WHEN CUPSD IS RUNNING\n");
 
  /*
index c2ee8f12a6e3a460790a1e664efcd1180f4587a0..0126ef02daec31edd8ff9a4f0eb79bc4497787d5 100644 (file)
@@ -1,8 +1,9 @@
 /*
  * Client routines for the CUPS scheduler.
  *
- * Copyright © 2007-2019 by Apple Inc.
- * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
+ * Copyright © 2021 by OpenPrinting.
+ * Copyright © 2007-2021 by Apple Inc.
+ * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
  *
  * This file contains Kerberos support code, copyright 2006 by
  * Jelmer Vernooij.
@@ -2109,18 +2110,13 @@ cupsdSendHeader(
     }
     else if (auth_type == CUPSD_AUTH_NEGOTIATE)
     {
-#if defined(SO_PEERCRED) && defined(AF_LOCAL)
-      if (httpAddrFamily(httpGetAddress(con->http)) == AF_LOCAL)
-       strlcpy(auth_str, "PeerCred", sizeof(auth_str));
-      else
-#endif /* SO_PEERCRED && AF_LOCAL */
       strlcpy(auth_str, "Negotiate", sizeof(auth_str));
     }
 
-    if (con->best && auth_type != CUPSD_AUTH_NEGOTIATE && !con->is_browser && !_cups_strcasecmp(httpGetHostname(con->http, NULL, 0), "localhost"))
+    if (con->best && !con->is_browser && !_cups_strcasecmp(httpGetHostname(con->http, NULL, 0), "localhost"))
     {
      /*
-      * Add a "trc" (try root certification) parameter for local non-Kerberos
+      * Add a "trc" (try root certification) parameter for local
       * requests when the request requires system group membership - then the
       * client knows the root certificate can/should be used.
       *
@@ -2789,6 +2785,25 @@ get_file(cupsd_client_t *con,            /* I  - Client connection */
 
     perm_check = 0;
   }
+  else if (!strcmp(con->uri, "/admin/conf/cupsd.conf"))
+  {
+    strlcpy(filename, ConfigurationFile, len);
+
+    perm_check = 0;
+  }
+  else if (!strncmp(con->uri, "/admin/log/", 11))
+  {
+    if (!strncmp(con->uri + 11, "access_log", 10) && AccessLog[0] == '/')
+      strlcpy(filename, AccessLog, len);
+    else if (!strncmp(con->uri + 11, "error_log", 9) && ErrorLog[0] == '/')
+      strlcpy(filename, ErrorLog, len);
+    else if (!strncmp(con->uri + 11, "page_log", 8) && PageLog[0] == '/')
+      strlcpy(filename, PageLog, len);
+    else
+      return (NULL);
+
+    perm_check = 0;
+  }
   else if (!strncmp(con->uri, "/admin", 6) || !strncmp(con->uri, "/classes", 8) || !strncmp(con->uri, "/jobs", 5) || !strncmp(con->uri, "/printers", 9))
   {
    /*
@@ -2822,25 +2837,6 @@ get_file(cupsd_client_t *con,            /* I  - Client connection */
 
     perm_check = 0;
   }
-  else if (!strcmp(con->uri, "/admin/conf/cupsd.conf"))
-  {
-    strlcpy(filename, ConfigurationFile, len);
-
-    perm_check = 0;
-  }
-  else if (!strncmp(con->uri, "/admin/log/", 11))
-  {
-    if (!strncmp(con->uri + 11, "access_log", 10) && AccessLog[0] == '/')
-      strlcpy(filename, AccessLog, len);
-    else if (!strncmp(con->uri + 11, "error_log", 9) && ErrorLog[0] == '/')
-      strlcpy(filename, ErrorLog, len);
-    else if (!strncmp(con->uri + 11, "page_log", 8) && PageLog[0] == '/')
-      strlcpy(filename, PageLog, len);
-    else
-      return (NULL);
-
-    perm_check = 0;
-  }
   else if (con->language)
   {
     snprintf(language, sizeof(language), "/%s", con->language->language);
@@ -2938,7 +2934,7 @@ get_file(cupsd_client_t *con,             /* I  - Client connection */
        */
 
        if (language[3])
-         language[0] = '\0';           /* Strip country code */
+         language[3] = '\0';           /* Strip country code */
        else
          language[0] = '\0';           /* Strip language */
       }
@@ -3124,8 +3120,7 @@ is_cgi(cupsd_client_t *con,               /* I - Client connection */
     return (0);
   }
 
-  if (!_cups_strcasecmp(type->type, "x-httpd-cgi") &&
-      (filestats->st_mode & 0111))
+  if (!_cups_strcasecmp(type->type, "x-httpd-cgi") && (filestats->st_mode & 0111) && (getuid() || !(filestats->st_mode & 022)))
   {
    /*
     * "application/x-httpd-cgi" is a CGI script.
@@ -3471,8 +3466,7 @@ pipe_command(cupsd_client_t *con, /* I - Client connection */
   }
   else
   {
-    sprintf(content_length, "CONTENT_LENGTH=" CUPS_LLFMT,
-            CUPS_LLCAST con->bytes);
+    snprintf(content_length, sizeof(content_length), "CONTENT_LENGTH=" CUPS_LLFMT, CUPS_LLCAST con->bytes);
     snprintf(content_type, sizeof(content_type), "CONTENT_TYPE=%s",
              httpGetField(con->http, HTTP_FIELD_CONTENT_TYPE));
 
index bb6049b2c6ce28483ceaf21bf707d53fe6d8dca2..1180ac9b81f87bf98b274ea20addb90631790c92 100644 (file)
@@ -95,7 +95,6 @@ static const cupsd_var_t      cupsd_vars[] =
   { "JobKillDelay",            &JobKillDelay,          CUPSD_VARTYPE_TIME },
   { "JobRetryLimit",           &JobRetryLimit,         CUPSD_VARTYPE_INTEGER },
   { "JobRetryInterval",                &JobRetryInterval,      CUPSD_VARTYPE_TIME },
-  { "KeepAliveTimeout",                &KeepAliveTimeout,      CUPSD_VARTYPE_TIME },
   { "KeepAlive",               &KeepAlive,             CUPSD_VARTYPE_BOOLEAN },
 #ifdef HAVE_LAUNCHD
   { "LaunchdTimeout",          &IdleExitTimeout,       CUPSD_VARTYPE_TIME },
@@ -719,7 +718,6 @@ cupsdReadConfiguration(void)
   FilterNice               = 0;
   HostNameLookups          = FALSE;
   KeepAlive                = TRUE;
-  KeepAliveTimeout         = DEFAULT_KEEPALIVE;
   ListenBackLog            = SOMAXCONN;
   LogDebugHistory          = 200;
   LogFilePerm              = CUPS_DEFAULT_LOG_FILE_PERM;
index b4e14eed99d157b2c1e02c1e4708ca85f08678f4..791c0d360cbcb76d35985c9dc927f49b41329037 100644 (file)
@@ -199,8 +199,6 @@ VAR int                     MaxClients              VALUE(100),
                                        /* Timeout during requests */
                        KeepAlive               VALUE(TRUE),
                                        /* Support the Keep-Alive option? */
-                       KeepAliveTimeout        VALUE(DEFAULT_KEEPALIVE),
-                                       /* Timeout between requests */
                        FileDevice              VALUE(FALSE),
                                        /* Allow file: devices? */
                        FilterLimit             VALUE(0),
index 77703b98330bbf8f985871033c4dc3aa929d3b9a..14478fd990afece7781fbff3efeeaf966cd1edf7 100644 (file)
@@ -265,7 +265,7 @@ main(int  argc,                             /* I - Number of command-line args */
     * all others run as the unprivileged user...
     */
 
-    start_backend(dent->filename, !(dent->fileinfo.st_mode & (S_IWGRP | S_IRWXO)));
+    start_backend(dent->filename, !(dent->fileinfo.st_mode & (S_IWGRP | S_IWOTH | S_IXOTH)));
   }
 
   cupsDirClose(dir);
index 0da3d0c06e4e10ddcd446b87f261e8b6c15aa9a2..7b1dc4834631605bc78adbd89c9133e074e961fe 100644 (file)
@@ -1268,7 +1268,7 @@ remove_jobs(const char *dest,             /* I - Destination */
 
     request = ippNewRequest(IPP_OP_CANCEL_JOB);
 
-    sprintf(uri, "ipp://localhost/jobs/%d", id);
+    snprintf(uri, sizeof(uri), "ipp://localhost/jobs/%d", id);
     ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, uri);
 
     ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
index 2fe3bf25cc3ac6d384663a95788ae9bf6f18deb2..2e7e579171a9afb5e81c528264a64b335d551eba 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * IPP routines for the CUPS scheduler.
  *
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2007-2021 by Apple Inc.
  * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
  *
  * This file contains Kerberos support code, copyright 2006 by
@@ -72,6 +72,7 @@ static void   copy_subscription_attrs(cupsd_client_t *con,
                                        cups_array_t *ra,
                                        cups_array_t *exclude);
 static void    create_job(cupsd_client_t *con, ipp_attribute_t *uri);
+static void    *create_local_bg_thread(cupsd_printer_t *printer);
 static void    create_local_printer(cupsd_client_t *con);
 static cups_array_t *create_requested_array(ipp_t *request);
 static void    create_subscriptions(cupsd_client_t *con, ipp_attribute_t *uri);
@@ -880,7 +881,7 @@ add_class(cupsd_client_t  *con,             /* I - Client connection */
     * Class doesn't exist; see if we have a printer of the same name...
     */
 
-    if ((pclass = cupsdFindPrinter(resource + 9)) != NULL)
+    if (cupsdFindPrinter(resource + 9))
     {
      /*
       * Yes, return an error...
@@ -2273,7 +2274,7 @@ add_printer(cupsd_client_t  *con, /* I - Client connection */
     * Printer doesn't exist; see if we have a class of the same name...
     */
 
-    if ((printer = cupsdFindClass(resource + 10)) != NULL)
+    if (cupsdFindClass(resource + 10))
     {
      /*
       * Yes, return an error...
@@ -2691,7 +2692,22 @@ add_printer(cupsd_client_t  *con,        /* I - Client connection */
     need_restart_job = 1;
     changed_driver   = 1;
 
-    if (!strcmp(ppd_name, "raw"))
+    if (!strcmp(ppd_name, "everywhere"))
+    {
+      // Create IPP Everywhere PPD...
+      if (!printer->device_uri || (strncmp(printer->device_uri, "dnssd://", 8) && strncmp(printer->device_uri, "ipp://", 6) && strncmp(printer->device_uri, "ipps://", 7) && strncmp(printer->device_uri, "ippusb://", 9)))
+      {
+       send_ipp_status(con, IPP_INTERNAL_ERROR, _("IPP Everywhere driver requires an IPP connection."));
+       if (!modify)
+         cupsdDeletePrinter(printer, 0);
+
+       return;
+      }
+
+      // Run a background thread to create the PPD...
+      _cupsThreadCreate((_cups_thread_func_t)create_local_bg_thread, printer);
+    }
+    else if (!strcmp(ppd_name, "raw"))
     {
      /*
       * Raw driver, remove any existing PPD file.
@@ -4891,7 +4907,7 @@ copy_printer_attrs(
   }
 
   if (printer->alert && (!ra || cupsArrayFind(ra, "printer-alert")))
-    ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_STRING, "printer-alert", NULL, printer->alert);
+    ippAddOctetString(con->response, IPP_TAG_PRINTER, "printer-alert", printer->alert, (int)strlen(printer->alert));
 
   if (printer->alert_description && (!ra || cupsArrayFind(ra, "printer-alert-description")))
     ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-alert-description", NULL, printer->alert_description);
@@ -5016,6 +5032,9 @@ copy_printer_attrs(
   if (!ra || cupsArrayFind(ra, "queued-job-count"))
     add_queued_job_count(con, printer);
 
+  if (!ra || cupsArrayFind(ra, "uri-security-supported"))
+    ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "uri-security-supported", NULL, is_encrypted ? "tls" : "none");
+
   copy_attrs(con->response, printer->attrs, ra, IPP_TAG_ZERO, 0, NULL);
   if (printer->ppd_attrs)
     copy_attrs(con->response, printer->ppd_attrs, ra, IPP_TAG_ZERO, 0, NULL);
@@ -9353,11 +9372,10 @@ restart_job(cupsd_client_t  *con,       /* I - Client connection */
     cupsdLogJob(job, CUPSD_LOG_DEBUG,
                "Restarted by \"%s\" with job-hold-until=%s.",
                 username, attr->values[0].string.text);
-    cupsdSetJobHoldUntil(job, attr->values[0].string.text, 0);
-
-    cupsdAddEvent(CUPSD_EVENT_JOB_CONFIG_CHANGED | CUPSD_EVENT_JOB_STATE,
-                  NULL, job, "Job restarted by user with job-hold-until=%s",
-                 attr->values[0].string.text);
+    cupsdSetJobHoldUntil(job, attr->values[0].string.text, 1);
+    cupsdSetJobState(job, IPP_JOB_HELD, CUPSD_JOB_DEFAULT,
+                     "Job restarted by user with job-hold-until=%s",
+                     attr->values[0].string.text);
   }
   else
   {
@@ -10866,17 +10884,13 @@ set_printer_defaults(
 
       case IPP_TAG_INTEGER :
       case IPP_TAG_ENUM :
-          sprintf(value, "%d", attr->values[0].integer);
-          printer->num_options = cupsAddOption(name, value,
-                                              printer->num_options,
-                                              &(printer->options));
+          printer->num_options = cupsAddIntegerOption(name, attr->values[0].integer, printer->num_options, &(printer->options));
           cupsdLogMessage(CUPSD_LOG_DEBUG,
                          "Setting %s to %s...", attr->name, value);
           break;
 
       case IPP_TAG_RANGE :
-          sprintf(value, "%d-%d", attr->values[0].range.lower,
-                 attr->values[0].range.upper);
+          snprintf(value, sizeof(value), "%d-%d", attr->values[0].range.lower, attr->values[0].range.upper);
           printer->num_options = cupsAddOption(name, value,
                                               printer->num_options,
                                               &(printer->options));
@@ -10885,10 +10899,7 @@ set_printer_defaults(
           break;
 
       case IPP_TAG_RESOLUTION :
-          sprintf(value, "%dx%d%s", attr->values[0].resolution.xres,
-                 attr->values[0].resolution.yres,
-                 attr->values[0].resolution.units == IPP_RES_PER_INCH ?
-                     "dpi" : "dpcm");
+          snprintf(value, sizeof(value), "%dx%d%s", attr->values[0].resolution.xres, attr->values[0].resolution.yres, attr->values[0].resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
           printer->num_options = cupsAddOption(name, value,
                                               printer->num_options,
                                               &(printer->options));
index e20e7c563edc65340155d2ad8b8882fe24e0e10e..351d43b116209677fa4f3711da32eb669e4cf478 100644 (file)
@@ -893,7 +893,7 @@ cupsdContinueJob(cupsd_job_t *job)  /* I - Job */
     goto abort_job;
   }
 
-  sprintf(jobid, "%d", job->id);
+  snprintf(jobid, sizeof(jobid), "%d", job->id);
 
   argv[0] = job->printer->name;
   argv[1] = jobid;
@@ -1247,7 +1247,7 @@ cupsdContinueJob(cupsd_job_t *job)        /* I - Job */
       else if (stat(command, &backinfo))
        backroot = 0;
       else
-        backroot = !(backinfo.st_mode & (S_IWGRP | S_IRWXO));
+        backroot = !(backinfo.st_mode & (S_IWGRP | S_IWOTH | S_IXOTH));
 
       argv[0] = job->printer->sanitized_device_uri;
 
@@ -2179,11 +2179,8 @@ cupsdSaveAllJobs(void)
 {
   int          i;                      /* Looping var */
   cups_file_t  *fp;                    /* job.cache file */
-  char         filename[1024],         /* job.cache filename */
-               temp[1024];             /* Temporary string */
+  char         filename[1024];         /* job.cache filename */
   cupsd_job_t  *job;                   /* Current job */
-  time_t       curtime;                /* Current time */
-  struct tm    curdate;                /* Current date */
 
 
   snprintf(filename, sizeof(filename), "%s/job.cache", CacheDir);
@@ -2196,12 +2193,8 @@ cupsdSaveAllJobs(void)
   * Write a small header to the file...
   */
 
-  time(&curtime);
-  localtime_r(&curtime, &curdate);
-  strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", &curdate);
-
   cupsFilePuts(fp, "# Job cache file for " CUPS_SVERSION "\n");
-  cupsFilePrintf(fp, "# Written by cupsd on %s\n", temp);
+  cupsFilePrintf(fp, "# Written by cupsd\n");
   cupsFilePrintf(fp, "NextJobId %d\n", NextJobId);
 
  /*
@@ -2625,7 +2618,7 @@ cupsdSetJobState(
     else
       cupsdAddEvent(CUPSD_EVENT_JOB_STATE, job->printer, job, "%s", buffer);
 
-    if (newstate == IPP_JOB_STOPPED || newstate == IPP_JOB_ABORTED || newstate == IPP_JOB_HELD)
+    if (newstate == IPP_JOB_STOPPED || newstate == IPP_JOB_ABORTED)
       cupsdLogJob(job, CUPSD_LOG_ERROR, "%s", buffer);
     else
       cupsdLogJob(job, CUPSD_LOG_INFO, "%s", buffer);
@@ -3119,8 +3112,7 @@ finalize_job(cupsd_job_t *job,            /* I - Job */
   * rarely have current information for network devices...
   */
 
-  if (strncmp(job->printer->device_uri, "usb:", 4) &&
-      strncmp(job->printer->device_uri, "ippusb:", 7))
+  if (!strstr(job->printer->device_uri, "usb:"))
     cupsdSetPrinterReasons(job->printer, "-offline-report");
 
  /*
@@ -3229,7 +3221,7 @@ finalize_job(cupsd_job_t *job,            /* I - Job */
       exit_code = job->status;
     }
 
-    cupsdLogJob(job, CUPSD_LOG_INFO, "Backend returned status %d (%s)",
+    cupsdLogJob(job, CUPSD_LOG_WARN, "Backend returned status %d (%s)",
                exit_code,
                exit_code == CUPS_BACKEND_FAILED ? "failed" :
                    exit_code == CUPS_BACKEND_AUTH_REQUIRED ?
index 92c7c626b182accfae0af62f21eb2cff94d7c0bb..dbf959b25aac2a32c55464472789b38d62d1ad89 100644 (file)
@@ -160,7 +160,7 @@ cupsdStartListening(void)
 
       if (lis->fd == -1)
       {
-       cupsdLogMessage(CUPSD_LOG_ERROR,
+       cupsdLogMessage(errno == EAFNOSUPPORT ? CUPSD_LOG_INFO : CUPSD_LOG_ERROR,
                        "Unable to open listen socket for address %s:%d - %s.",
                        s, p, strerror(errno));
 
index 2bd1952f7d1decd39edf1d1a699e4795504a426b..efc16ad9db0c03cae2f8936db9b704c3c0780ba7 100644 (file)
@@ -569,11 +569,7 @@ cupsdLogJob(cupsd_job_t *job,              /* I - Job */
   * Format and write the log message...
   */
 
-#ifdef HAVE_SYSTEMD_SD_JOURNAL_H
-  if (job && strcmp(ErrorLog, "syslog"))
-#else
   if (job)
-#endif /* HAVE_SYSTEMD_SD_JOURNAL_H */
     snprintf(jobmsg, sizeof(jobmsg), "[Job %d] %s", job->id, message);
   else
     strlcpy(jobmsg, message, sizeof(jobmsg));
index d5fdf971a8acee0ac51bf9e5f353828c4ae3f2bc..edd49d906a935cabd469de4fb26a3840f254022a 100644 (file)
@@ -232,7 +232,6 @@ main(int  argc,                             /* I - Number of command-line args */
 
           case 'h' : /* Show usage/help */
              usage(0);
-             break;
 
           case 'l' : /* Started by launchd/systemd/upstart... */
 #ifdef HAVE_ONDEMAND
@@ -312,7 +311,6 @@ main(int  argc,                             /* I - Number of command-line args */
               _cupsLangPrintf(stderr, _("cupsd: Unknown option \"%c\" - "
                                        "aborting."), *opt);
              usage(1);
-             break;
        }
       }
     }
@@ -581,7 +579,7 @@ main(int  argc,                             /* I - Number of command-line args */
   * Clean out old temp files and printer cache data.
   */
 
-  if (!strncmp(TempDir, RequestRoot, strlen(RequestRoot)))
+  if (!RequestRoot || !strncmp(TempDir, RequestRoot, strlen(RequestRoot)))
     cupsdCleanFiles(TempDir, NULL);
 
   cupsdCleanFiles(CacheDir, "*.ipp");
@@ -1888,7 +1886,6 @@ service_add_listener(int fd,              /* I - Socket file descriptor */
     {
       cupsdLogMessage(CUPSD_LOG_ERROR, "service_add_listener: Unable to allocate listener: %s.", strerror(errno));
       exit(EXIT_FAILURE);
-      return;
     }
 
     cupsArrayAdd(Listeners, lis);
@@ -1940,7 +1937,6 @@ service_checkin(void)
     {
       cupsdLogMessage(CUPSD_LOG_ERROR, "service_checkin: Unable to get listener sockets: %s", strerror(error));
       exit(EXIT_FAILURE);
-      return; /* anti-compiler-warning */
     }
 
    /*
index 80690397da3ef0e6a13af92f373c2daacca7c0fc..991a17eb1989706dd9b1c43b34f1bf13e6e1f3a0 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Printer routines for the CUPS scheduler.
  *
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2007-2020 by Apple Inc.
  * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
  *
  * Licensed under Apache License v2.0.  See the file "LICENSE" for more
@@ -446,7 +446,7 @@ cupsdCreateCommonData(void)
 
   /* cups-version */
   ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_TEXT | IPP_TAG_COPY,
-               "cups-version", NULL, CUPS_SVERSION + 6);
+               "cups-version", NULL, &CUPS_SVERSION[6]);
 
   /* generated-natural-language-supported (no IPP_TAG_COPY) */
   ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_LANGUAGE,
@@ -822,12 +822,15 @@ cupsdDeletePrinter(
   ippDelete(p->attrs);
   ippDelete(p->ppd_attrs);
 
+  _ppdCacheDestroy(p->pc);
+
   mimeDeleteType(MimeDatabase, p->filetype);
   mimeDeleteType(MimeDatabase, p->prefiltertype);
 
   cupsdFreeStrings(&(p->users));
   cupsdFreeQuotas(p);
 
+  cupsdClearString(&p->uuid);
   cupsdClearString(&p->uri);
   cupsdClearString(&p->hostname);
   cupsdClearString(&p->name);
@@ -1472,13 +1475,10 @@ cupsdSaveAllPrinters(void)
   int                  i;              /* Looping var */
   cups_file_t          *fp;            /* printers.conf file */
   char                 filename[1024], /* printers.conf filename */
-                       temp[1024],     /* Temporary string */
                        value[2048],    /* Value string */
                        *ptr,           /* Pointer into value */
                        *name;          /* Current user/group name */
   cupsd_printer_t      *printer;       /* Current printer class */
-  time_t               curtime;        /* Current time */
-  struct tm            curdate;        /* Current date */
   cups_option_t                *option;        /* Current option */
   ipp_attribute_t      *marker;        /* Current marker attribute */
 
@@ -1498,12 +1498,8 @@ cupsdSaveAllPrinters(void)
   * Write a small header to the file...
   */
 
-  time(&curtime);
-  localtime_r(&curtime, &curdate);
-  strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", &curdate);
-
   cupsFilePuts(fp, "# Printer configuration file for " CUPS_SVERSION "\n");
-  cupsFilePrintf(fp, "# Written by cupsd on %s\n", temp);
+  cupsFilePrintf(fp, "# Written by cupsd\n");
   cupsFilePuts(fp, "# DO NOT EDIT THIS FILE WHEN CUPSD IS RUNNING\n");
 
   cupsFilePrintf(fp, "NextPrinterId %d\n", NextPrinterId);
@@ -2316,8 +2312,6 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)/* I - Printer to setup */
 
   ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
                "uri-authentication-supported", NULL, auth_supported);
-  ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
-               "uri-security-supported", NULL, "none");
   if (p->printer_id)
     ippAddInteger(p->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-id", p->printer_id);
   ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_NAME, "printer-name", NULL,
@@ -4016,7 +4010,8 @@ load_ppd(cupsd_printer_t *p)              /* I - Printer */
 
     num_qualities = 0;
 
-    if ((output_mode = ppdFindOption(ppd, "OutputMode")) != NULL)
+    if ((output_mode = ppdFindOption(ppd, "OutputMode")) ||
+        (output_mode = ppdFindOption(ppd, "cupsPrintQuality")))
     {
       if (ppdFindChoice(output_mode, "draft") ||
           ppdFindChoice(output_mode, "fast"))
index 15acedca8d07a5b9ce6af4b23fc75aa5ac38e00c..2dbb28f85b146d35abcaf98c0c2c9ddde21bd2ab 100644 (file)
@@ -1021,11 +1021,8 @@ cupsdSaveAllSubscriptions(void)
 {
   int                  i;              /* Looping var */
   cups_file_t          *fp;            /* subscriptions.conf file */
-  char                 filename[1024], /* subscriptions.conf filename */
-                       temp[1024];     /* Temporary string */
+  char                 filename[1024]; /* subscriptions.conf filename */
   cupsd_subscription_t *sub;           /* Current subscription */
-  time_t               curtime;        /* Current time */
-  struct tm            curdate;        /* Current date */
   unsigned             mask;           /* Current event mask */
   const char           *name;          /* Current event name */
   int                  hex;            /* Non-zero if we are writing hex data */
@@ -1046,12 +1043,8 @@ cupsdSaveAllSubscriptions(void)
   * Write a small header to the file...
   */
 
-  time(&curtime);
-  localtime_r(&curtime, &curdate);
-  strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", &curdate);
-
   cupsFilePuts(fp, "# Subscription configuration file for " CUPS_SVERSION "\n");
-  cupsFilePrintf(fp, "# Written by cupsd on %s\n", temp);
+  cupsFilePrintf(fp, "# Written by cupsd\n");
 
   cupsFilePrintf(fp, "NextSubscriptionId %d\n", NextSubscriptionId);
 
index 56eb4e32a057e458aeb0f20eddc9538a6ccb6e97..81e3ed43bfc5c21fee9acc74c0f4865bceaf9cf6 100644 (file)
@@ -425,7 +425,7 @@ sysEventThreadEntry(void)
   * Register for power state change notifications
   */
 
-  bzero(&threadData, sizeof(threadData));
+  memset(&threadData, 0, sizeof(threadData));
 
   threadData.sysevent.powerKernelPort =
       IORegisterForSystemPower(&threadData, &powerNotifierPort,
@@ -441,7 +441,7 @@ sysEventThreadEntry(void)
   * Register for system configuration change notifications
   */
 
-  bzero(&storeContext, sizeof(storeContext));
+  memset(&storeContext, 0, sizeof(storeContext));
   storeContext.info = &threadData;
 
   store = SCDynamicStoreCreate(kCFAllocatorDefault, CFSTR("cupsd"),
@@ -536,7 +536,7 @@ sysEventThreadEntry(void)
   * this later.
   */
 
-  bzero(&timerContext, sizeof(timerContext));
+  memset(&timerContext, 0, sizeof(timerContext));
   timerContext.info = &threadData;
 
   threadData.timerRef =
index 865690444d113d4816fc4043c15f177f16f0c5e1..228733f38885f76851331290bab6b9e5be60010c 100644 (file)
@@ -108,7 +108,7 @@ cupsdCompareNames(const char *s,    /* I - First string */
         return (-1);
       else if (digits > 0)
         return (1);
-      else if (diff)
+      else
         return (diff);
     }
     else if (tolower(*s) < tolower(*t))
@@ -142,10 +142,10 @@ cupsdCompareNames(const char *s,  /* I - First string */
 cups_array_t *                         /* O - CUPS array */
 cupsdCreateStringsArray(const char *s) /* I - Comma-delimited strings */
 {
-  if (!s || !*s)
-    return (NULL);
-  else
+  if (s && *s)
     return (_cupsArrayNewStrings(s, ','));
+  else
+    return (NULL);
 }
 
 
diff --git a/scripts/makecups b/scripts/makecups
new file mode 100755 (executable)
index 0000000..3c0cc95
--- /dev/null
@@ -0,0 +1,48 @@
+#!/bin/sh
+#
+# Script to configure and make CUPS with the standard build options.  When no
+# targets are specified, the "clean" and "check" targets are used.
+#
+# Usage:
+#
+#   scripts/makecups [configure option(s)] [make target(s)]
+#
+
+# Scan the command-line arguments...
+confopts="--enable-debug --enable-debug-guards --enable-debug-printfs --enable-sanitizer --enable-unit-tests"
+makeopts=""
+
+while test $# -gt 0; do
+       opt="$1"
+       shift
+
+       case "$opt" in
+               -*)
+                       confopts="$confopts $opt"
+                       ;;
+               *)
+                       makeopts="$makeopts $opt"
+                       ;;
+       esac
+done
+
+if test "x$makeopts" = x; then
+       makeopts="clean check"
+fi
+
+case "`uname`" in
+       Darwin)
+               makeopts="-j`sysctl -n hw.activecpu` $makeopts"
+               ;;
+       Linux*)
+               ASAN_OPTIONS="leak_check_at_exit=false"; export ASAN_OPTIONS
+               ;;
+esac
+
+# Run the configure script...
+echo ./configure $confopts
+./configure $confopts || exit 1
+
+# Build the software...
+echo make $makeopts
+make $makeopts
index 33b2f37cc69d7ff73f5ce61a02db0a415b1c97a7..fa8dd4efd5ef4e1a158845270e1432547243399e 100755 (executable)
@@ -59,7 +59,7 @@ else
                exit 1
        fi
 
-       temp=`head -1 README.md | awk '{print $4}'`
+       temp=`head -1 README.md | awk '{print $5}'`
        if test "$temp" != "v$version"; then
                echo "Still need to update version to v$version in README.md (saw $temp)"
                exit 1
index c85a86e0cac3402b934413f305efe5d0032f95a4..0f303886d3086a3f43d936fb83b9e4db8e502108 100644 (file)
@@ -274,7 +274,7 @@ main(int  argc,                             /* I - Number of command-line arguments */
       }
       else
       {
-        sprintf(uri, "ipp://localhost/jobs/%d", job_id);
+        snprintf(uri, sizeof(uri), "ipp://localhost/jobs/%d", job_id);
        ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL,
                     uri);
       }
@@ -311,8 +311,7 @@ main(int  argc,                             /* I - Number of command-line arguments */
                        op == IPP_PURGE_JOBS ? "purge-jobs" : "cancel-job",
                        cupsLastErrorString());
 
-       if (response)
-         ippDelete(response);
+          ippDelete(response);
 
        return (1);
       }
@@ -375,8 +374,7 @@ main(int  argc,                             /* I - Number of command-line arguments */
                      op == IPP_PURGE_JOBS ? "purge-jobs" : "cancel-job",
                      cupsLastErrorString());
 
-      if (response)
-       ippDelete(response);
+      ippDelete(response);
 
       return (1);
     }
index b94cae94408aa76cffad1a80e252634daeb9bf54..c3a2d19dce002ce1bb1cbe98ec89946bf49789a6 100644 (file)
@@ -261,7 +261,6 @@ main(int  argc,                             /* I - Number of command-line args */
 
          default :
              usage();
-             break;
        }
     }
     else
index 298c158257ea90f100b5e345a64f705fcc3b7885..fd818a56d5a715bc2c48a6a403ede5309bcff5e2 100644 (file)
@@ -161,6 +161,12 @@ main(int  argc,                            /* I - Number of command-line arguments */
                                  "name."), argv[0]);
                return (1);
              }
+             else if (cupsLastError() == IPP_STATUS_ERROR_NOT_FOUND)
+             {
+               _cupsLangPrintf(stderr,
+                               _("%s: Error - The printer or class does not exist."), argv[0]);
+               return (1);
+             }
              break;
 
          case 'f' : /* Form */
@@ -280,9 +286,7 @@ main(int  argc,                             /* I - Number of command-line arguments */
                return (1);
              }
 
-             sprintf(buffer, "%d", num_copies);
-             num_options = cupsAddOption("copies", buffer, num_options,
-                                         &options);
+             num_options = cupsAddIntegerOption("copies", num_copies, num_options, &options);
              break;
 
          case 'o' : /* Option */
@@ -342,9 +346,7 @@ main(int  argc,                             /* I - Number of command-line arguments */
                return (1);
              }
 
-             sprintf(buffer, "%d", priority);
-             num_options = cupsAddOption("job-priority", buffer, num_options,
-                                         &options);
+             num_options = cupsAddIntegerOption("job-priority", priority, num_options, &options);
              break;
 
          case 's' : /* Silent */
@@ -660,7 +662,7 @@ restart_job(const char *command,    /* I - Command name */
 
   request = ippNewRequest(IPP_RESTART_JOB);
 
-  sprintf(uri, "ipp://localhost/jobs/%d", job_id);
+  snprintf(uri, sizeof(uri), "ipp://localhost/jobs/%d", job_id);
 
   ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
                "job-uri", NULL, uri);
@@ -708,7 +710,7 @@ set_job_attrs(
 
   request = ippNewRequest(IPP_SET_JOB_ATTRIBUTES);
 
-  sprintf(uri, "ipp://localhost/jobs/%d", job_id);
+  snprintf(uri, sizeof(uri), "ipp://localhost/jobs/%d", job_id);
 
   ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
                "job-uri", NULL, uri);
index ca6d386b2e12ebb0b51b6bf874be54144b4df714..dc875cb8c79d7733570f6b7de9bc78a2839b6cb7 100644 (file)
@@ -1,7 +1,8 @@
 /*
  * "lpadmin" command for CUPS.
  *
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2021 by OpenPrinting.
+ * Copyright © 2007-2021 by Apple Inc.
  * Copyright © 1997-2006 by Easy Software Products.
  *
  * Licensed under Apache License v2.0.  See the file "LICENSE" for more
@@ -28,7 +29,6 @@ static int            delete_printer_from_class(http_t *http, char *printer,
 static int             delete_printer_option(http_t *http, char *printer,
                                              char *option);
 static int             enable_printer(http_t *http, char *printer);
-static char            *get_printer_ppd(const char *uri, char *buffer, size_t bufsize, int *num_options, cups_option_t **options);
 static cups_ptype_t    get_printer_type(http_t *http, char *printer, char *uri,
                                         size_t urisize);
 static int             set_printer_options(http_t *http, char *printer,
@@ -240,14 +240,14 @@ main(int  argc,                           /* I - Number of command-line arguments */
          case 'E' : /* Enable the printer/enable encryption */
              if (printer == NULL)
              {
-#ifdef HAVE_SSL
+#ifdef HAVE_TLS
                cupsSetEncryption(HTTP_ENCRYPTION_REQUIRED);
 
                if (http)
                  httpEncryption(http, HTTP_ENCRYPTION_REQUIRED);
 #else
                _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."), argv[0]);
-#endif /* HAVE_SSL */
+#endif /* HAVE_TLS */
                break;
              }
 
@@ -625,14 +625,7 @@ main(int  argc,                            /* I - Number of command-line arguments */
     return (1);
 #endif /* __APPLE__ */
   }
-  else if (ppd_name && !strcmp(ppd_name, "everywhere") && device_uri)
-  {
-    if ((file = get_printer_ppd(device_uri, evefile, sizeof(evefile), &num_options, &options)) == NULL)
-      return (1);
-
-    num_options = cupsRemoveOption("ppd-name", num_options, &options);
-  }
-  else if (ppd_name || file)
+  else if ((ppd_name && strcmp(ppd_name, "everywhere")) || file)
   {
     _cupsLangPuts(stderr, _("lpadmin: Printer drivers are deprecated and will stop working in a future version of CUPS."));
   }
@@ -1156,105 +1149,6 @@ enable_printer(http_t *http,            /* I - Server connection */
 }
 
 
-/*
- * 'get_printer_ppd()' - Get an IPP Everywhere PPD file for the given URI.
- */
-
-static char *                          /* O  - Filename or NULL */
-get_printer_ppd(
-    const char    *uri,                        /* I  - Printer URI */
-    char          *buffer,             /* I  - Filename buffer */
-    size_t        bufsize,             /* I  - Size of filename buffer */
-    int           *num_options,                /* IO - Number of options */
-    cups_option_t **options)           /* IO - Options */
-{
-  http_t       *http;                  /* Connection to printer */
-  ipp_t                *request,               /* Get-Printer-Attributes request */
-               *response;              /* Get-Printer-Attributes response */
-  ipp_attribute_t *attr;               /* Attribute from response */
-  char         resolved[1024],         /* Resolved URI */
-               scheme[32],             /* URI scheme */
-               userpass[256],          /* Username:password */
-               host[256],              /* Hostname */
-               resource[256];          /* Resource path */
-  int          port;                   /* Port number */
-  static const char * const pattrs[] = /* Attributes to use */
-  {
-    "all",
-    "media-col-database"
-  };
-
-
- /*
-  * Connect to the printer...
-  */
-
-  if (strstr(uri, "._tcp"))
-  {
-   /*
-    * Resolve URI...
-    */
-
-    if (!_httpResolveURI(uri, resolved, sizeof(resolved), _HTTP_RESOLVE_DEFAULT, NULL, NULL))
-    {
-      _cupsLangPrintf(stderr, _("%s: Unable to resolve \"%s\"."), "lpadmin", uri);
-      return (NULL);
-    }
-
-    uri = resolved;
-  }
-
-  if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK)
-  {
-    _cupsLangPrintf(stderr, _("%s: Bad printer URI \"%s\"."), "lpadmin", uri);
-    return (NULL);
-  }
-
-  http = httpConnect2(host, port, NULL, AF_UNSPEC, !strcmp(scheme, "ipps") ? HTTP_ENCRYPTION_ALWAYS : HTTP_ENCRYPTION_IF_REQUESTED, 1, 30000, NULL);
-  if (!http)
-  {
-    _cupsLangPrintf(stderr, _("%s: Unable to connect to \"%s:%d\": %s"), "lpadmin", host, port, cupsLastErrorString());
-    return (NULL);
-  }
-
- /*
-  * Send a Get-Printer-Attributes request...
-  */
-
-  request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
-  ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
-  ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", sizeof(pattrs) / sizeof(pattrs[0]), NULL, pattrs);
-  response = cupsDoRequest(http, request, resource);
-
-  if (cupsLastError() >= IPP_STATUS_REDIRECTION_OTHER_SITE)
-  {
-    _cupsLangPrintf(stderr, _("%s: Unable to query printer: %s"), "lpadmin", cupsLastErrorString());
-    buffer[0] = '\0';
-  }
-  else if (_ppdCreateFromIPP(buffer, bufsize, response))
-  {
-    if (!cupsGetOption("printer-geo-location", *num_options, *options) && (attr = ippFindAttribute(response, "printer-geo-location", IPP_TAG_URI)) != NULL)
-      *num_options = cupsAddOption("printer-geo-location", ippGetString(attr, 0, NULL), *num_options, options);
-
-    if (!cupsGetOption("printer-info", *num_options, *options) && (attr = ippFindAttribute(response, "printer-info", IPP_TAG_TEXT)) != NULL)
-      *num_options = cupsAddOption("printer-info", ippGetString(attr, 0, NULL), *num_options, options);
-
-    if (!cupsGetOption("printer-location", *num_options, *options) && (attr = ippFindAttribute(response, "printer-location", IPP_TAG_TEXT)) != NULL)
-      *num_options = cupsAddOption("printer-location", ippGetString(attr, 0, NULL), *num_options, options);
-  }
-  else
-    _cupsLangPrintf(stderr, _("%s: Unable to create PPD file: %s"), "lpadmin", strerror(errno));
-
-  ippDelete(response);
-  httpClose(http);
-
-  if (buffer[0])
-    return (buffer);
-  else
-    return (NULL);
-}
-
-
 /*
  * 'get_printer_type()' - Determine the printer type and URI.
  */
@@ -1373,7 +1267,7 @@ set_printer_options(
 
   if (file)
     ppdfile = file;
-  else if ((ppdname = cupsGetOption("ppd-name", num_options, options)) != NULL && strcmp(ppdname, "raw") && num_options > 1)
+  else if ((ppdname = cupsGetOption("ppd-name", num_options, options)) != NULL && strcmp(ppdname, "everywhere") && strcmp(ppdname, "raw") && num_options > 1)
   {
     if ((ppdfile = cupsGetServerPPD(http, ppdname)) != NULL)
     {
index 1d14cb8e07b7210d0335d898a1cbc4e320df5521..86e7a7ca33361566623cbb9481d37ebece973de3 100644 (file)
@@ -634,7 +634,7 @@ match_list(const char *list,                /* I - List of names */
   if (!name)
     return (0);
 
-  while (*list)
+  do
   {
    /*
     * Skip leading whitespace and commas...
@@ -660,6 +660,7 @@ match_list(const char *list,                /* I - List of names */
     while (*list && !isspace(*list & 255) && *list != ',')
       list ++;
   }
+  while (*list);
 
   return (0);
 }
@@ -810,8 +811,8 @@ show_accepting(const char  *printers,       /* I - Destinations */
          _cupsLangPrintf(stdout, _("%s not accepting requests since %s -"),
                          printer, printer_state_time);
          _cupsLangPrintf(stdout, _("\t%s"),
-                         (message == NULL || !*message) ?
-                             "reason unknown" : message);
+                         (message && *message) ?
+                             message : "reason unknown");
         }
 
         for (i = 0; i < num_dests; i ++)
@@ -826,8 +827,8 @@ show_accepting(const char  *printers,       /* I - Destinations */
                              _("%s/%s not accepting requests since %s -"),
                              printer, dests[i].instance, printer_state_time);
              _cupsLangPrintf(stdout, _("\t%s"),
-                             (message == NULL || !*message) ?
-                                 "reason unknown" : message);
+                             (message && *message) ?
+                                 message : "reason unknown");
             }
          }
       }
@@ -950,7 +951,7 @@ show_classes(const char *dests)             /* I - Destinations */
       printer_uri = NULL;
       members     = NULL;
 
-      while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER)
+      do
       {
         if (!strcmp(attr->name, "printer-name") &&
            attr->value_tag == IPP_TAG_NAME)
@@ -966,6 +967,7 @@ show_classes(const char *dests)             /* I - Destinations */
 
         attr = attr->next;
       }
+         while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER);
 
      /*
       * If this is a remote class, grab the class info from the
@@ -1789,10 +1791,10 @@ show_printers(const char  *printers,    /* I - Destinations */
 
         if ((message && *message) || pstate == IPP_PRINTER_STOPPED)
        {
-         if (!message || !*message)
-           _cupsLangPuts(stdout, _("\treason unknown"));
+         if (message && *message)
+               _cupsLangPrintf(stdout, "\t%s", message);
          else
-           _cupsLangPrintf(stdout, "\t%s", message);
+           _cupsLangPuts(stdout, _("\treason unknown"));
        }
 
         if (long_status > 1)
@@ -1909,10 +1911,10 @@ show_printers(const char  *printers,    /* I - Destinations */
 
             if ((message && *message) || pstate == IPP_PRINTER_STOPPED)
            {
-             if (!message || !*message)
-               _cupsLangPuts(stdout, _("\treason unknown"));
-             else
+             if (message && *message)
                _cupsLangPrintf(stdout, "\t%s", message);
+             else
+               _cupsLangPuts(stdout, _("\treason unknown"));
             }
 
             if (long_status > 1)
index 59720bd686f989f57f86fa371c5773de89d580ba..b0a47dee8b49eeef51ca410744178e3f55a1ac86 100644 (file)
@@ -73,8 +73,6 @@ FILES =       \
                printers.tmpl \
                printers-header.tmpl \
                restart.tmpl \
-               samba-export.tmpl \
-               samba-exported.tmpl \
                search.tmpl \
                set-printer-options-header.tmpl \
                set-printer-options-trailer.tmpl \
index e916cf8a092a8dbc34f5b0ba3ca6251b1d2d4bb9..9c9b71f22c7e4f04b14aa14e1e66a2161f4b40e1 100644 (file)
@@ -39,7 +39,7 @@
 <TD>
 <SELECT NAME="PPD_NAME" SIZE="10">
 {op=add-printer?:<OPTION VALUE="__no_change__" SELECTED>Current Driver - {current_make_and_model}</OPTION>:}
-{show_ipp_everywhere?<OPTION VALUE="everywhere" SELECTED>{current_make_and_model} - IPP Everywhere &trade;</OPTION>:}
+{show_ipp_everywhere?<OPTION VALUE="everywhere" SELECTED>{current_make_and_model?{current_make_and_model} -:} IPP Everywhere &trade;</OPTION>:}
 {[ppd_name]<OPTION VALUE="{ppd_name}" {op=modify-printer?:{?current_make_and_model={ppd_make_and_model}?SELECTED:}}>{ppd_make_and_model} ({ppd_natural_language})
 }</SELECT>
 </TD>
index 8d787572d94b2c137fe7b555a45ceb815d5dedfd..353767cbab58a5f628ba05291132546cfce43d3c 100644 (file)
@@ -20,7 +20,7 @@
 <FORM ACTION="/jobs/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="org.cups.sid" VALUE="{$org.cups.sid}"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="restart-job"><INPUT TYPE="HIDDEN" NAME="job_id" VALUE="{job_id}"><INPUT TYPE="HIDDEN" NAME="job_printer_uri" VALUE="{job_printer_uri}"><INPUT TYPE="SUBMIT" VALUE="Reprint Job"></FORM>:}:}
 {job_state=4?{job_hold_until=auth-info-required?Held for authentication.:
 <FORM ACTION="/jobs/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="org.cups.sid" VALUE="{$org.cups.sid}"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="release-job"><INPUT TYPE="HIDDEN" NAME="job_id" VALUE="{job_id}"><INPUT TYPE="HIDDEN" NAME="job_printer_uri" VALUE="{job_printer_uri}">
-<INPUT TYPE="SUBMIT" VALUE="Release Job"></FORM>:}}
+<INPUT TYPE="SUBMIT" VALUE="Release Job"></FORM>:}:}
 {job_state=3?
 <FORM ACTION="/jobs/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="org.cups.sid" VALUE="{$org.cups.sid}"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="hold-job"><INPUT TYPE="HIDDEN" NAME="job_id" VALUE="{job_id}"><INPUT TYPE="HIDDEN" NAME="job_printer_uri" VALUE="{job_printer_uri}">
 <INPUT TYPE="SUBMIT" VALUE="Hold Job"></FORM>:}
index 2f9630f5242ccd7a7318c505469ad0d4a14ca049..58d2692f5b47d98824b6a833c017a5d1f9ecad3b 100755 (executable)
@@ -3,7 +3,7 @@
 # Perform the complete set of IPP compliance tests specified in the
 # CUPS Software Test Plan.
 #
-# Copyright © 2007-2019 by Apple Inc.
+# Copyright © 2007-2021 by Apple Inc.
 # Copyright © 1997-2007 by Easy Software Products, all rights reserved.
 #
 # Licensed under Apache License v2.0.  See the file "LICENSE" for more
@@ -356,6 +356,7 @@ cat >$BASE/share/banners/classified <<EOF
 EOF
 ln -s $root/data $BASE/share
 ln -s $root/ppdc/sample.drv $BASE/share/drv
+ln -s $root/conf/cgi.types $BASE/share/mime
 ln -s $root/conf/mime.types $BASE/share/mime
 ln -s $root/conf/mime.convs $BASE/share/mime
 ln -s $root/data/*.h $BASE/share/ppdc
index be9cba3663ef9d34cc68213ee477001b9d6408ca..f1781ef0b892bede201f440cd2ed162918fec7d2 100644 (file)
@@ -147,7 +147,7 @@ local:      ippeveprinter-static ipptool-static
 
 ippeveprinter: ippeveprinter.o ../cups/$(LIBCUPS)
        echo Linking $@...
-       $(LD_CC) $(ALL_LDFLAGS) -o $@ ippeveprinter.o $(DNSSDLIBS) $(LINKCUPS)
+       $(LD_CC) $(ALL_LDFLAGS) -o $@ ippeveprinter.o $(DNSSDLIBS) $(PAMLIBS) $(LINKCUPS)
        $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
 
 
@@ -157,7 +157,7 @@ ippeveprinter:      ippeveprinter.o ../cups/$(LIBCUPS)
 
 ippeveprinter-static:  ippeveprinter.o ../cups/$(LIBCUPSSTATIC)
        echo Linking $@...
-       $(LD_CC) $(ALL_LDFLAGS) -o $@ ippeveprinter.o $(LINKCUPSSTATIC)
+       $(LD_CC) $(ALL_LDFLAGS) -o $@ ippeveprinter.o $(PAMLIBS) $(LINKCUPSSTATIC)
        $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
 
 
index 2b921e235410f8db876d8901aabd759a860b5bf1..15caa69d850d5aeaacfd41be357fdabefaf74b5a 100644 (file)
@@ -1,10 +1,12 @@
 /*
  * IPP Everywhere printer application for CUPS.
  *
- * Copyright © 2010-2019 by Apple Inc.
+ * Copyright © 2021 by OpenPrinting.
+ * Copyright © 2020 by the IEEE-ISTO Printer Working Group.
+ * Copyright © 2010-2021 by Apple Inc.
  *
  * Licensed under Apache License v2.0.  See the file "LICENSE" for more
- * information.º
+ * information.
  *
  * Note: This program began life as the "ippserver" sample code that first
  * appeared in CUPS 1.4.  The name has been changed in order to distinguish it
@@ -38,6 +40,7 @@ typedef ULONG nfds_t;
 #else
 extern char **environ;
 
+#  include <spawn.h>
 #  include <sys/fcntl.h>
 #  include <sys/wait.h>
 #  include <poll.h>
@@ -48,9 +51,12 @@ extern char **environ;
 #elif defined(HAVE_AVAHI)
 #  include <avahi-client/client.h>
 #  include <avahi-client/publish.h>
+#  include <avahi-common/alternative.h>
 #  include <avahi-common/error.h>
+#  include <avahi-common/malloc.h>
 #  include <avahi-common/thread-watch.h>
 #endif /* HAVE_DNSSD */
+
 #ifdef HAVE_SYS_MOUNT_H
 #  include <sys/mount.h>
 #endif /* HAVE_SYS_MOUNT_H */
@@ -64,7 +70,17 @@ extern char **environ;
 #  include <sys/vfs.h>
 #endif /* HAVE_SYS_VFS_H */
 
+#if HAVE_LIBPAM
+#  ifdef HAVE_PAM_PAM_APPL_H
+#    include <pam/pam_appl.h>
+#  else
+#    include <security/pam_appl.h>
+#  endif /* HAVE_PAM_PAM_APPL_H */
+#endif /* HAVE_LIBPAM */
+
 #include "printer-png.h"
+#include "printer-lg-png.h"
+#include "printer-sm-png.h"
 
 
 /*
@@ -148,6 +164,14 @@ typedef void *ippeve_srv_t;                /* Service reference */
 typedef void *ippeve_txt_t;            /* TXT record */
 #endif /* HAVE_DNSSD */
 
+#if HAVE_LIBPAM
+typedef struct ippeve_authdata_s       /* Authentication data */
+{
+  char username[HTTP_MAX_VALUE],       /* Username string */
+       *password;                      /* Password string */
+} ippeve_authdata_t;
+#endif /* HAVE_LIBPAM */
+
 typedef struct ippeve_filter_s         /**** Attribute filter ****/
 {
   cups_array_t         *ra;            /* Requested attributes */
@@ -161,16 +185,22 @@ typedef struct ippeve_printer_s           /**** Printer data ****/
   /* TODO: One IPv4 and one IPv6 listener are really not sufficient */
   int                  ipv4,           /* IPv4 listener */
                        ipv6;           /* IPv6 listener */
-  ippeve_srv_t         ipp_ref,        /* Bonjour IPP service */
-                       ipps_ref,       /* Bonjour IPPS service */
-                       http_ref,       /* Bonjour HTTP service */
-                       printer_ref;    /* Bonjour LPD service */
-  char                 *dnssd_name,    /* printer-dnssd-name */
+#ifdef HAVE_DNSSD
+  ippeve_srv_t         ipp_ref,        /* DNS-SD IPP service */
+                       ipps_ref,       /* DNS-SD IPPS service */
+                       http_ref,       /* DNS-SD HTTP service */
+                       printer_ref;    /* DNS-SD LPD service */
+#elif defined(HAVE_AVAHI)
+  ippeve_srv_t         dnssd_ref;      /* DNS-SD services */
+#endif /* HAVE_DNSSD */
+  char                 *dnssd_subtypes;/* DNS-SD subtypes */
+  int                  dnssd_collision;/* Name collision? */
+  char                 *dnssd_name,    /* printer-dns-sd-name */
                        *name,          /* printer-name */
-                       *icon,          /* Icon filename */
+                       *icons[3],      /* Icon filenames */
+                       *strings,       /* Strings filename */
                        *directory,     /* Spool directory */
                        *hostname,      /* Hostname */
-                       *uri,           /* printer-uri-supported */
                        *device_uri,    /* Device URI (if any) */
                        *output_format, /* Output format */
 #if !CUPS_LITE
@@ -222,9 +252,14 @@ typedef struct ippeve_client_s             /**** Client data ****/
   http_state_t         operation;      /* Request operation */
   ipp_op_t             operation_id;   /* IPP operation-id */
   char                 uri[1024],      /* Request URI */
-                       *options;       /* URI options */
+                       *options,       /* URI options */
+                       host_field[HTTP_MAX_VALUE];
+                                       /* Host: header */
+  int                  host_port;      /* Port number from Host: header */
   http_addr_t          addr;           /* Client address */
-  char                 hostname[256];  /* Client hostname */
+  char                 hostname[256],  /* Client hostname */
+                       username[HTTP_MAX_VALUE];
+                                       /* Authenticated username, if any */
   ippeve_printer_t     *printer;       /* Printer */
   ippeve_job_t         *job;           /* Current job, if any */
 } ippeve_client_t;
@@ -234,6 +269,7 @@ typedef struct ippeve_client_s              /**** Client data ****/
  * Local functions...
  */
 
+static http_status_t   authenticate_request(ippeve_client_t *client);
 static void            clean_jobs(ippeve_printer_t *printer);
 static int             compare_jobs(ippeve_job_t *a, ippeve_job_t *b);
 static void            copy_attributes(ipp_t *to, ipp_t *from, cups_array_t *ra, ipp_tag_t group_tag, int quickcopy);
@@ -244,7 +280,7 @@ static int          create_job_file(ippeve_job_t *job, char *fname, size_t fnamesize, co
 static int             create_listener(const char *name, int port, int family);
 static ipp_t           *create_media_col(const char *media, const char *source, const char *type, int width, int length, int bottom, int left, int right, int top);
 static ipp_t           *create_media_size(int width, int length);
-static ippeve_printer_t        *create_printer(const char *servername, int serverport, const char *name, const char *location, const char *icon, cups_array_t *docformats, const char *subtypes, const char *directory, const char *command, const char *device_uri, const char *output_format, ipp_t *attrs);
+static ippeve_printer_t        *create_printer(const char *servername, int serverport, const char *name, const char *location, const char *icons, const char *strings, cups_array_t *docformats, const char *subtypes, const char *directory, const char *command, const char *device_uri, const char *output_format, ipp_t *attrs);
 static void            debug_attributes(const char *title, ipp_t *ipp, int response);
 static void            delete_client(ippeve_client_t *client);
 static void            delete_job(ippeve_job_t *job);
@@ -260,11 +296,14 @@ static int                filter_cb(ippeve_filter_t *filter, ipp_t *dst, ipp_attribute_t *attr
 static ippeve_job_t    *find_job(ippeve_client_t *client);
 static void            finish_document_data(ippeve_client_t *client, ippeve_job_t *job);
 static void            finish_document_uri(ippeve_client_t *client, ippeve_job_t *job);
+static void            flush_document_data(ippeve_client_t *client);
+static int             have_document_data(ippeve_client_t *client);
 static void            html_escape(ippeve_client_t *client, const char *s, size_t slen);
 static void            html_footer(ippeve_client_t *client);
 static void            html_header(ippeve_client_t *client, const char *title, int refresh);
 static void            html_printf(ippeve_client_t *client, const char *format, ...) _CUPS_FORMAT(2, 3);
 static void            ipp_cancel_job(ippeve_client_t *client);
+static void            ipp_cancel_my_jobs(ippeve_client_t *client);
 static void            ipp_close_job(ippeve_client_t *client);
 static void            ipp_create_job(ippeve_client_t *client);
 static void            ipp_get_job_attributes(ippeve_client_t *client);
@@ -281,6 +320,9 @@ static ipp_t                *load_legacy_attributes(const char *make, const char *model, int p
 #if !CUPS_LITE
 static ipp_t           *load_ppd_attributes(const char *ppdfile, cups_array_t *docformats);
 #endif /* !CUPS_LITE */
+#if HAVE_LIBPAM
+static int             pam_func(int, const struct pam_message **, struct pam_response **, void *);
+#endif /* HAVE_LIBPAM */
 static int             parse_options(ippeve_client_t *client, cups_option_t **options);
 static void            process_attr_message(ippeve_job_t *job, char *message);
 static void            *process_client(ippeve_client_t *client);
@@ -288,7 +330,7 @@ static int          process_http(ippeve_client_t *client);
 static int             process_ipp(ippeve_client_t *client);
 static void            *process_job(ippeve_job_t *job);
 static void            process_state_message(ippeve_job_t *job, char *message);
-static int             register_printer(ippeve_printer_t *printer, const char *subtypes);
+static int             register_printer(ippeve_printer_t *printer);
 static int             respond_http(ippeve_client_t *client, http_status_t code, const char *content_coding, const char *type, size_t length);
 static void            respond_ipp(ippeve_client_t *client, ipp_status_t status, const char *message, ...) _CUPS_FORMAT(3, 4);
 static void            respond_unsupported(ippeve_client_t *client, ipp_attribute_t *attr);
@@ -316,6 +358,8 @@ static AvahiClient  *DNSSDClient = NULL;
 static int             KeepFiles = 0,  /* Keep spooled job files? */
                        MaxVersion = 20,/* Maximum IPP version (20 = 2.0, 11 = 1.1, etc.) */
                        Verbosity = 0;  /* Verbosity level */
+static const char      *PAMService = NULL;
+                                       /* PAM service */
 
 
 /*
@@ -343,6 +387,7 @@ main(int  argc,                             /* I - Number of command-line args */
 #if !CUPS_LITE
                *ppdfile = NULL,        /* PPD file */
 #endif /* !CUPS_LITE */
+               *strings = NULL,        /* Strings file */
                *subtypes = "_print";   /* DNS-SD service subtype */
   int          legacy = 0,             /* Legacy mode? */
                duplex = 0,             /* Duplex mode */
@@ -371,6 +416,14 @@ main(int  argc,                            /* I - Number of command-line args */
     {
       web_forms = 0;
     }
+    else if (!strcmp(argv[i], "--pam-service"))
+    {
+      i ++;
+      if (i >= argc)
+        usage(1);
+
+      PAMService = argv[i];
+    }
     else if (!strcmp(argv[i], "--version"))
     {
       puts(CUPS_SVERSION);
@@ -392,6 +445,11 @@ main(int  argc,                            /* I - Number of command-line args */
              legacy = 1;
              break;
 
+          case 'A' : /* -A (enable authentication) */
+              if (!PAMService)
+                PAMService = "cups";
+             break;
+
           case 'D' : /* -D device-uri */
              i ++;
              if (i >= argc)
@@ -437,6 +495,14 @@ main(int  argc,                            /* I - Number of command-line args */
               break;
 #endif /* !CUPS_LITE */
 
+         case 'S' : /* -S filename.strings */
+             i ++;
+             if (i >= argc)
+               usage(1);
+
+             strings = argv[i];
+             break;
+
           case 'V' : /* -V max-version */
              i ++;
              if (i >= argc)
@@ -583,27 +649,6 @@ main(int  argc,                            /* I - Number of command-line args */
   * Apply defaults as needed...
   */
 
-  if (!serverport)
-  {
-#ifdef _WIN32
-   /*
-    * Windows is almost always used as a single user system, so use a default
-    * port number of 8631.
-    */
-
-    serverport = 8631;
-
-#else
-   /*
-    * Use 8000 + UID mod 1000 for the default port number...
-    */
-
-    serverport = 8000 + ((int)getuid() % 1000);
-#endif /* _WIN32 */
-
-    _cupsLangPrintf(stderr, _("Listening on port %d."), serverport);
-  }
-
   if (!directory[0])
   {
     const char *tmpdir;                        /* Temporary directory */
@@ -661,7 +706,7 @@ main(int  argc,                             /* I - Number of command-line args */
   else
     attrs = load_legacy_attributes(make, model, ppm, ppm_color, duplex, docformats);
 
-  if ((printer = create_printer(servername, serverport, name, location, icon, docformats, subtypes, directory, command, device_uri, output_format, attrs)) == NULL)
+  if ((printer = create_printer(servername, serverport, name, location, icon, strings, docformats, subtypes, directory, command, device_uri, output_format, attrs)) == NULL)
     return (1);
 
   printer->web_forms = web_forms;
@@ -691,6 +736,105 @@ main(int  argc,                           /* I - Number of command-line args */
 }
 
 
+/*
+ * 'authenticate_request()' - Try to authenticate the request.
+ */
+
+static http_status_t                   /* O - HTTP_STATUS_CONTINUE to keep going, otherwise status to return */
+authenticate_request(
+    ippeve_client_t *client)           /* I - Client */
+{
+#if HAVE_LIBPAM
+ /*
+  * If PAM isn't enabled, return 'continue' now...
+  */
+
+  const char           *authorization; /* Pointer into Authorization string */
+  int                  userlen;        /* Username:password length */
+  pam_handle_t         *pamh;          /* PAM authentication handle */
+  int                  pamerr;         /* PAM error code */
+  struct pam_conv      pamdata;        /* PAM conversation data */
+  ippeve_authdata_t    data;           /* Authentication data */
+
+
+  if (!PAMService)
+    return (HTTP_STATUS_CONTINUE);
+
+ /*
+  * Try authenticating using PAM...
+  */
+
+  authorization = httpGetField(client->http, HTTP_FIELD_AUTHORIZATION);
+
+  if (!*authorization)
+    return (HTTP_STATUS_UNAUTHORIZED);
+
+  if (strncmp(authorization, "Basic ", 6))
+  {
+    fputs("Unsupported scheme in Authorization header.\n", stderr);
+    return (HTTP_STATUS_BAD_REQUEST);
+  }
+
+  authorization += 5;
+  while (isspace(*authorization & 255))
+    authorization ++;
+
+  userlen = sizeof(data.username);
+  httpDecode64_2(data.username, &userlen, authorization);
+
+  if ((data.password = strchr(data.username, ':')) == NULL)
+  {
+    fputs("No password in Authorization header.\n", stderr);
+    return (HTTP_STATUS_BAD_REQUEST);
+  }
+
+  *(data.password)++ = '\0';
+
+  if (!data.username[0])
+  {
+    fputs("No username in Authorization header.\n", stderr);
+    return (HTTP_STATUS_BAD_REQUEST);
+  }
+
+  pamdata.conv        = pam_func;
+  pamdata.appdata_ptr = &data;
+
+  if ((pamerr = pam_start(PAMService, data.username, &pamdata, &pamh)) != PAM_SUCCESS)
+  {
+    fprintf(stderr, "pam_start() returned %d (%s)\n", pamerr, pam_strerror(pamh, pamerr));
+    return (HTTP_STATUS_SERVER_ERROR);
+  }
+
+  if ((pamerr = pam_authenticate(pamh, PAM_SILENT)) != PAM_SUCCESS)
+  {
+    fprintf(stderr, "pam_authenticate() returned %d (%s)\n", pamerr, pam_strerror(pamh, pamerr));
+    pam_end(pamh, 0);
+    return (HTTP_STATUS_UNAUTHORIZED);
+  }
+
+  if ((pamerr = pam_acct_mgmt(pamh, PAM_SILENT)) != PAM_SUCCESS)
+  {
+    fprintf(stderr, "pam_acct_mgmt() returned %d (%s)\n", pamerr, pam_strerror(pamh, pamerr));
+    pam_end(pamh, 0);
+    return (HTTP_STATUS_SERVER_ERROR);
+  }
+
+  strlcpy(client->username, data.username, sizeof(client->username));
+
+  pam_end(pamh, PAM_SUCCESS);
+
+  return (HTTP_STATUS_CONTINUE);
+
+#else
+ /*
+  * No authentication support built-in, return 'continue'...
+  */
+
+  return (HTTP_STATUS_CONTINUE);
+#endif /* HAVE_LIBPAM */
+}
+
+
 /*
  * 'clean_jobs()' - Clean out old (completed) jobs.
  */
@@ -1040,7 +1184,11 @@ create_job(ippeve_client_t *client)      /* I - Client */
 
   job->id = client->printer->next_job_id ++;
 
-  snprintf(uri, sizeof(uri), "%s/%d", client->printer->uri, job->id);
+  if ((attr = ippFindAttribute(client->request, "printer-uri", IPP_TAG_URI)) != NULL)
+    snprintf(uri, sizeof(uri), "%s/%d", ippGetString(attr, 0, NULL), job->id);
+  else
+    httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, client->printer->hostname, client->printer->port, "/ipp/print/%d", job->id);
+
   httpAssembleUUID(client->printer->hostname, client->printer->port, client->printer->name, job->id, uuid, sizeof(uuid));
 
   ippAddDate(job->attrs, IPP_TAG_JOB, "date-time-at-creation", ippTimeToDate(time(&job->created)));
@@ -1048,9 +1196,17 @@ create_job(ippeve_client_t *client)      /* I - Client */
   ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-uri", NULL, uri);
   ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-uuid", NULL, uuid);
   if ((attr = ippFindAttribute(client->request, "printer-uri", IPP_TAG_URI)) != NULL)
+  {
     ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-printer-uri", NULL, ippGetString(attr, 0, NULL));
+  }
   else
-    ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-printer-uri", NULL, client->printer->uri);
+  {
+    char printer_uri[1024];            /* job-printer-uri value */
+
+    httpAssembleURI(HTTP_URI_CODING_ALL, printer_uri, sizeof(printer_uri), "ipp", NULL, client->printer->hostname, client->printer->port, "/ipp/print");
+    ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-printer-uri", NULL, printer_uri);
+  }
+
   ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "time-at-creation", (int)(job->created - client->printer->start_time));
 
   cupsArrayAdd(client->printer->jobs, job);
@@ -1248,9 +1404,10 @@ create_printer(
     int          serverport,           /* I - Server port */
     const char   *name,                        /* I - printer-name */
     const char   *location,            /* I - printer-location */
-    const char   *icon,                        /* I - printer-icons */
+    const char   *icons,               /* I - printer-icons */
+    const char   *strings,             /* I - printer-strings-uri */
     cups_array_t *docformats,          /* I - document-format-supported */
-    const char   *subtypes,            /* I - Bonjour service subtype(s) */
+    const char   *subtypes,            /* I - DNS-SD service subtype(s) */
     const char   *directory,           /* I - Spool directory */
     const char   *command,             /* I - Command to run on job files, if any */
     const char   *device_uri,          /* I - Output device, if any */
@@ -1262,15 +1419,10 @@ create_printer(
 #ifndef _WIN32
   char                 path[1024];     /* Full path to command */
 #endif /* !_WIN32 */
-  char                 uri[1024],      /* Printer URI */
-#ifdef HAVE_SSL
-                       securi[1024],   /* Secure printer URI */
-                       *uris[2],       /* All URIs */
-#endif /* HAVE_SSL */
-                       icons[1024],    /* printer-icons URI */
-                       adminurl[1024], /* printer-more-info URI */
-                       supplyurl[1024],/* printer-supply-info-uri URI */
-                       uuid[128];      /* printer-uuid */
+  unsigned char                sha256[32];     /* SHA-256 digest/sum */
+  char                 uuid_data[1024],/* Data to hash for printer-uuid */
+                       uuid[128],      /* printer-uuid */
+                       *iconsptr;      /* Pointer into icons string */
   int                  k_supported;    /* Maximum file size supported */
   int                  num_formats;    /* Number of supported document formats */
   const char           *formats[100],  /* Supported document formats */
@@ -1427,6 +1579,11 @@ create_printer(
     "none",
     "none"
   };
+  static const char * const uri_authentication_basic[] =
+  {                                    /* uri-authentication-supported values with authentication */
+    "basic",
+    "basic"
+  };
   static const char * const uri_security_supported[] =
   {                                    /* uri-security-supported values */
     "none",
@@ -1487,23 +1644,47 @@ create_printer(
     return (NULL);
   }
 
-  printer->ipv4          = -1;
-  printer->ipv6          = -1;
-  printer->name          = strdup(name);
-  printer->dnssd_name    = strdup(name);
-  printer->command       = command ? strdup(command) : NULL;
-  printer->device_uri    = device_uri ? strdup(device_uri) : NULL;
-  printer->output_format = output_format ? strdup(output_format) : NULL;
-  printer->directory     = strdup(directory);
-  printer->icon          = icon ? strdup(icon) : NULL;
-  printer->port          = serverport;
-  printer->start_time    = time(NULL);
-  printer->config_time   = printer->start_time;
-  printer->state         = IPP_PSTATE_IDLE;
-  printer->state_reasons = IPPEVE_PREASON_NONE;
-  printer->state_time    = printer->start_time;
-  printer->jobs          = cupsArrayNew((cups_array_func_t)compare_jobs, NULL);
-  printer->next_job_id   = 1;
+  printer->ipv4           = -1;
+  printer->ipv6           = -1;
+  printer->name           = strdup(name);
+  printer->dnssd_name     = strdup(name);
+  printer->dnssd_subtypes = subtypes ? strdup(subtypes) : NULL;
+  printer->command        = command ? strdup(command) : NULL;
+  printer->device_uri     = device_uri ? strdup(device_uri) : NULL;
+  printer->output_format  = output_format ? strdup(output_format) : NULL;
+  printer->directory      = strdup(directory);
+  printer->icons[0]       = icons ? strdup(icons) : NULL;
+  printer->strings        = strings ? strdup(strings) : NULL;
+  printer->port           = serverport;
+  printer->start_time     = time(NULL);
+  printer->config_time    = printer->start_time;
+  printer->state          = IPP_PSTATE_IDLE;
+  printer->state_reasons  = IPPEVE_PREASON_NONE;
+  printer->state_time     = printer->start_time;
+  printer->jobs           = cupsArrayNew((cups_array_func_t)compare_jobs, NULL);
+  printer->next_job_id    = 1;
+
+  if (printer->icons[0])
+  {
+   /*
+    * Extract up to 3 icons...
+    */
+
+    for (i = 1, iconsptr = strchr(icons, ','); iconsptr && i < 3; i ++, iconsptr = strchr(iconsptr, ','))
+    {
+      *iconsptr++ = '\0';
+      printer->icons[i] = iconsptr;
+    }
+
+    if (iconsptr)
+      *iconsptr = '\0';                        /* Strip any icons after the third... */
+
+    while (i < 3)
+    {
+      printer->icons[i] = printer->icons[i - 1];
+      i ++;
+    }
+  }
 
   if (servername)
   {
@@ -1511,9 +1692,21 @@ create_printer(
   }
   else
   {
-    char       temp[1024];             /* Temporary string */
+    char       temp[1024],             /* Temporary string */
+               *tempptr;               /* Pointer into temporary string */
+
+#ifdef HAVE_AVAHI
+    const char *avahi_name = avahi_client_get_host_name_fqdn(DNSSDClient);
+
+    if (avahi_name)
+      strlcpy(temp, avahi_name, sizeof(temp));
+    else
+#endif /* HAVE_AVAHI */
 
-    printer->hostname = strdup(httpGetHostname(NULL, temp, sizeof(temp)));
+    if ((tempptr = strstr(httpGetHostname(NULL, temp, sizeof(temp)), ".lan")) != NULL && !tempptr[5])
+      strlcpy(tempptr, ".local", sizeof(temp) - (size_t)(tempptr - temp));
+
+    printer->hostname = strdup(temp);
   }
 
   _cupsRWInit(&(printer->rwlock));
@@ -1522,10 +1715,50 @@ create_printer(
   * Create the listener sockets...
   */
 
-  if ((printer->ipv4 = create_listener(servername, printer->port, AF_INET)) < 0)
+  if (printer->port)
   {
-    perror("Unable to create IPv4 listener");
-    goto bad_printer;
+    if ((printer->ipv4 = create_listener(servername, printer->port, AF_INET)) < 0)
+    {
+      perror("Unable to create IPv4 listener");
+      goto bad_printer;
+    }
+  }
+  else
+  {
+#ifdef _WIN32
+   /*
+    * Windows is almost always used as a single user system, so use a default
+    * port number of 8631.
+    */
+
+    serverport = 8631;
+
+#else
+   /*
+    * Use 8000 + UID mod 1000 for the default port number...
+    */
+
+    serverport = 8000 + ((int)getuid() % 1000);
+#endif /* _WIN32 */
+
+    while (serverport < 10000)
+    {
+      if ((printer->ipv4 = create_listener(servername, serverport, AF_INET)) >= 0)
+        break;
+
+      serverport ++;
+    }
+
+    if (serverport < 10000)
+    {
+      _cupsLangPrintf(stderr, _("Listening on port %d."), serverport);
+      printer->port = serverport;
+    }
+    else
+    {
+      perror("Unable to create IPv4 listener");
+      goto bad_printer;
+    }
   }
 
   if ((printer->ipv6 = create_listener(servername, printer->port, AF_INET6)) < 0)
@@ -1535,31 +1768,21 @@ create_printer(
   }
 
  /*
-  * Prepare URI values for the printer attributes...
+  * Prepare values for the printer attributes...
   */
 
-  httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, printer->hostname, printer->port, "/ipp/print");
-  printer->uri    = strdup(uri);
-  printer->urilen = strlen(uri);
-
-#ifdef HAVE_SSL
-  httpAssembleURI(HTTP_URI_CODING_ALL, securi, sizeof(securi), "ipps", NULL, printer->hostname, printer->port, "/ipp/print");
-#endif /* HAVE_SSL */
-
-  httpAssembleURI(HTTP_URI_CODING_ALL, icons, sizeof(icons), WEB_SCHEME, NULL, printer->hostname, printer->port, "/icon.png");
-  httpAssembleURI(HTTP_URI_CODING_ALL, adminurl, sizeof(adminurl), WEB_SCHEME, NULL, printer->hostname, printer->port, "/");
-  httpAssembleURI(HTTP_URI_CODING_ALL, supplyurl, sizeof(supplyurl), WEB_SCHEME, NULL, printer->hostname, printer->port, "/supplies");
-  httpAssembleUUID(printer->hostname, serverport, name, 0, uuid, sizeof(uuid));
+  snprintf(uuid_data, sizeof(uuid_data), "_IPPEVEPRINTER_:%s:%d:%s", printer->hostname, printer->port, printer->name);
+  cupsHashData("sha2-256", (unsigned char *)uuid_data, strlen(uuid_data), sha256, sizeof(sha256));
+  snprintf(uuid, sizeof(uuid), "urn:uuid:%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x", sha256[0], sha256[1], sha256[3], sha256[4], sha256[5], sha256[6], (sha256[10] & 15) | 0x30, sha256[11], (sha256[15] & 0x3f) | 0x40, sha256[16], sha256[20], sha256[21], sha256[25], sha256[26], sha256[30], sha256[31]);
 
   if (Verbosity)
   {
-    fprintf(stderr, "printer-more-info=\"%s\"\n", adminurl);
-    fprintf(stderr, "printer-supply-info-uri=\"%s\"\n", supplyurl);
 #ifdef HAVE_SSL
-    fprintf(stderr, "printer-uri=\"%s\",\"%s\"\n", uri, securi);
+    fprintf(stderr, "printer-uri-supported=\"ipp://%s:%d/ipp/print\",\"ipps://%s:%d/ipp/print\"\n", printer->hostname, printer->port, printer->hostname, printer->port);
 #else
-    fprintf(stderr, "printer-uri=\"%s\"\n", uri);
+    fprintf(stderr, "printer-uri-supported=\"ipp://%s:%d/ipp/print\"\n", printer->hostname, printer->port);
 #endif /* HAVE_SSL */
+    fprintf(stderr, "printer-uuid=\"%s\"\n", uuid);
   }
 
  /*
@@ -1717,9 +1940,6 @@ create_printer(
   /* printer-geo-location */
   ippAddOutOfBand(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_UNKNOWN, "printer-geo-location");
 
-  /* printer-icons */
-  ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-icons", NULL, icons);
-
   /* printer-is-accepting-jobs */
   ippAddBoolean(printer->attrs, IPP_TAG_PRINTER, "printer-is-accepting-jobs", 1);
 
@@ -1729,9 +1949,6 @@ create_printer(
   /* printer-location */
   ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-location", NULL, location);
 
-  /* printer-more-info */
-  ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-more-info", NULL, adminurl);
-
   /* printer-name */
   ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_NAME, "printer-name", NULL, name);
 
@@ -1741,19 +1958,8 @@ create_printer(
   /* printer-organizational-unit */
   ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_TEXT), "printer-organizational-unit", NULL, "");
 
-  /* printer-supply-info-uri */
-  ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-supply-info-uri", NULL, supplyurl);
-
-  /* printer-uri-supported */
-#ifdef HAVE_SSL
-  uris[0] = uri;
-  uris[1] = securi;
-
-  ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uri-supported", 2, NULL, (const char **)uris);
-
-#else
-  ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uri-supported", NULL, uri);
-#endif /* HAVE_SSL */
+  /* printer-strings-languages-supported */
+  ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_LANGUAGE, "printer-strings-languages-supported", NULL, "en");
 
   /* printer-uuid */
   ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uuid", NULL, uuid);
@@ -1763,9 +1969,15 @@ create_printer(
 
   /* uri-authentication-supported */
 #ifdef HAVE_SSL
-  ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "uri-authentication-supported", 2, NULL, uri_authentication_supported);
+  if (PAMService)
+    ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "uri-authentication-supported", 2, NULL, uri_authentication_basic);
+  else
+    ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "uri-authentication-supported", 2, NULL, uri_authentication_supported);
 #else
-  ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "uri-authentication-supported", NULL, "none");
+  if (PAMService)
+    ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "uri-authentication-supported", NULL, "basic");
+  else
+    ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "uri-authentication-supported", NULL, "none");
 #endif /* HAVE_SSL */
 
   /* uri-security-supported */
@@ -1781,10 +1993,10 @@ create_printer(
   debug_attributes("Printer", printer->attrs, 0);
 
  /*
-  * Register the printer with Bonjour...
+  * Register the printer with DNS-SD...
   */
 
-  if (!register_printer(printer, subtypes))
+  if (!register_printer(printer))
     goto bad_printer;
 
  /*
@@ -1940,14 +2152,8 @@ delete_printer(ippeve_printer_t *printer)        /* I - Printer */
 #elif defined(HAVE_AVAHI)
   avahi_threaded_poll_lock(DNSSDMaster);
 
-  if (printer->printer_ref)
-    avahi_entry_group_free(printer->printer_ref);
-  if (printer->ipp_ref)
-    avahi_entry_group_free(printer->ipp_ref);
-  if (printer->ipps_ref)
-    avahi_entry_group_free(printer->ipps_ref);
-  if (printer->http_ref)
-    avahi_entry_group_free(printer->http_ref);
+  if (printer->dnssd_ref)
+    avahi_entry_group_free(printer->dnssd_ref);
 
   avahi_threaded_poll_unlock(DNSSDMaster);
 #endif /* HAVE_DNSSD */
@@ -1956,8 +2162,10 @@ delete_printer(ippeve_printer_t *printer)        /* I - Printer */
     free(printer->dnssd_name);
   if (printer->name)
     free(printer->name);
-  if (printer->icon)
-    free(printer->icon);
+  if (printer->icons[0])
+    free(printer->icons[0]);
+  if (printer->strings)
+    free(printer->strings);
   if (printer->command)
     free(printer->command);
   if (printer->device_uri)
@@ -1970,8 +2178,6 @@ delete_printer(ippeve_printer_t *printer) /* I - Printer */
     free(printer->directory);
   if (printer->hostname)
     free(printer->hostname);
-  if (printer->uri)
-    free(printer->uri);
 
   ippDelete(printer->attrs);
   cupsArrayDelete(printer->jobs);
@@ -1982,7 +2188,7 @@ delete_printer(ippeve_printer_t *printer) /* I - Printer */
 
 #ifdef HAVE_DNSSD
 /*
- * 'dnssd_callback()' - Handle Bonjour registration events.
+ * 'dnssd_callback()' - Handle DNS-SD registration events.
  */
 
 static void DNSSD_API
@@ -1993,32 +2199,29 @@ dnssd_callback(
     const char          *name,         /* I - Service name */
     const char          *regtype,      /* I - Service type */
     const char          *domain,       /* I - Domain for service */
-    ippeve_printer_t      *printer)    /* I - Printer */
+    ippeve_printer_t    *printer)      /* I - Printer */
 {
   (void)sdRef;
   (void)flags;
   (void)domain;
+  (void)name;
 
-  if (errorCode)
+  if (errorCode == kDNSServiceErr_NameConflict)
   {
-    fprintf(stderr, "DNSServiceRegister for %s failed with error %d.\n", regtype, (int)errorCode);
-    return;
+    fputs("DNS-SD service name collision detected.\n", stderr);
+    printer->dnssd_collision = 1;
   }
-  else if (strcasecmp(name, printer->dnssd_name))
+  else if (errorCode)
   {
-    if (Verbosity)
-      fprintf(stderr, "Now using DNS-SD service name \"%s\".\n", name);
-
-    /* No lock needed since only the main thread accesses/changes this */
-    free(printer->dnssd_name);
-    printer->dnssd_name = strdup(name);
+    fprintf(stderr, "DNSServiceRegister for %s failed with error %d.\n", regtype, (int)errorCode);
+    return;
   }
 }
 
 
 #elif defined(HAVE_AVAHI)
 /*
- * 'dnssd_callback()' - Handle Bonjour registration events.
+ * 'dnssd_callback()' - Handle DNS-SD registration events.
  */
 
 static void
@@ -2027,9 +2230,17 @@ dnssd_callback(
     AvahiEntryGroupState state,                /* I - Registration state */
     void                 *context)     /* I - Printer */
 {
+  ippeve_printer_t *printer = (ippeve_printer_t *)context;
+                                       /* Printer */
+
+
   (void)srv;
-  (void)state;
-  (void)context;
+
+  if (state == AVAHI_ENTRY_GROUP_COLLISION)
+  {
+    fputs("DNS-SD service name collision detected.\n", stderr);
+    printer->dnssd_collision = 1;
+  }
 }
 
 
@@ -2043,10 +2254,8 @@ static void
 dnssd_client_cb(
     AvahiClient      *c,               /* I - Client */
     AvahiClientState state,            /* I - Current state */
-    void             *userdata)                /* I - User data (unused) */
+    void             *userdata)                /* I - User data (printer) */
 {
-  (void)userdata;
-
   if (!c)
     return;
 
@@ -2078,7 +2287,7 @@ dnssd_init(void)
 #ifdef HAVE_DNSSD
   if (DNSServiceCreateConnection(&DNSSDMaster) != kDNSServiceErr_NoError)
   {
-    fputs("Error: Unable to initialize Bonjour.\n", stderr);
+    fputs("Error: Unable to initialize DNS-SD.\n", stderr);
     exit(1);
   }
 
@@ -2087,13 +2296,13 @@ dnssd_init(void)
 
   if ((DNSSDMaster = avahi_threaded_poll_new()) == NULL)
   {
-    fputs("Error: Unable to initialize Bonjour.\n", stderr);
+    fputs("Error: Unable to initialize DNS-SD.\n", stderr);
     exit(1);
   }
 
   if ((DNSSDClient = avahi_client_new(avahi_threaded_poll_get(DNSSDMaster), AVAHI_CLIENT_NO_FAIL, dnssd_client_cb, NULL, &error)) == NULL)
   {
-    fputs("Error: Unable to initialize Bonjour.\n", stderr);
+    fputs("Error: Unable to initialize DNS-SD.\n", stderr);
     exit(1);
   }
 
@@ -2144,10 +2353,12 @@ find_job(ippeve_client_t *client)               /* I - Client */
   if ((attr = ippFindAttribute(client->request, "job-uri", IPP_TAG_URI)) != NULL)
   {
     const char *uri = ippGetString(attr, 0, NULL);
+                                       /* URI value */
+    const char *uriptr = strrchr(uri, '/');
+                                       /* Pointer to the last slash in the URI */
 
-    if (!strncmp(uri, client->printer->uri, client->printer->urilen) &&
-        uri[client->printer->urilen] == '/')
-      key.id = atoi(uri + client->printer->urilen + 1);
+    if (uriptr && isdigit(uriptr[1] & 255))
+      key.id = atoi(uriptr + 1);
     else
       return (NULL);
   }
@@ -2328,8 +2539,9 @@ finish_document_uri(
   * Do we have a file to print?
   */
 
-  if (httpGetState(client->http) == HTTP_STATE_POST_RECV)
+  if (have_document_data(client))
   {
+    flush_document_data(client);
     respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Unexpected document data following request.");
 
     goto abort_job;
@@ -2579,6 +2791,42 @@ finish_document_uri(
 }
 
 
+/*
+ * 'flush_document_data()' - Safely flush remaining document data.
+ */
+
+static void
+flush_document_data(
+    ippeve_client_t *client)           /* I - Client */
+{
+  char buffer[8192];                   /* Read buffer */
+
+
+  if (httpGetState(client->http) == HTTP_STATE_POST_RECV)
+  {
+    while (httpRead2(client->http, buffer, sizeof(buffer)) > 0);
+  }
+}
+
+
+/*
+ * 'have_document_data()' - Determine whether we have more document data.
+ */
+
+static int                             /* O - 1 if data is present, 0 otherwise */
+have_document_data(
+    ippeve_client_t *client)           /* I - Client */
+{
+  char temp;                           /* Data */
+
+
+  if (httpGetState(client->http) != HTTP_STATE_POST_RECV)
+    return (0);
+  else
+    return (httpPeek(client->http, &temp, 1) > 0);
+}
+
+
 /*
  * 'html_escape()' - Write a HTML-safe string.
  */
@@ -2841,7 +3089,7 @@ html_printf(ippeve_client_t *client,      /* I - Client */
            if ((size_t)(width + 2) > sizeof(temp))
              break;
 
-           sprintf(temp, tformat, va_arg(ap, double));
+           snprintf(temp, sizeof(temp), tformat, va_arg(ap, double));
 
             httpWrite2(client->http, temp, strlen(temp));
            break;
@@ -2859,13 +3107,13 @@ html_printf(ippeve_client_t *client,    /* I - Client */
 
 #  ifdef HAVE_LONG_LONG
             if (size == 'L')
-             sprintf(temp, tformat, va_arg(ap, long long));
+             snprintf(temp, sizeof(temp), tformat, va_arg(ap, long long));
            else
 #  endif /* HAVE_LONG_LONG */
             if (size == 'l')
-             sprintf(temp, tformat, va_arg(ap, long));
+             snprintf(temp, sizeof(temp), tformat, va_arg(ap, long));
            else
-             sprintf(temp, tformat, va_arg(ap, int));
+             snprintf(temp, sizeof(temp), tformat, va_arg(ap, int));
 
             httpWrite2(client->http, temp, strlen(temp));
            break;
@@ -2874,7 +3122,7 @@ html_printf(ippeve_client_t *client,      /* I - Client */
            if ((size_t)(width + 2) > sizeof(temp))
              break;
 
-           sprintf(temp, tformat, va_arg(ap, void *));
+           snprintf(temp, sizeof(temp), tformat, va_arg(ap, void *));
 
             httpWrite2(client->http, temp, strlen(temp));
            break;
@@ -2975,6 +3223,53 @@ ipp_cancel_job(ippeve_client_t *client)  /* I - Client */
 }
 
 
+/*
+ * 'ipp_cancel_my_jobs()' - Cancel all jobs.
+ *
+ * Note: Since ippeveprinter doesn't do spooling, this really just cancels the
+ * current job.
+ */
+
+static void
+ipp_cancel_my_jobs(
+    ippeve_client_t *client)           /* I - Client */
+{
+  ippeve_job_t         *job;           /* Job information */
+
+
+  _cupsRWLockWrite(&client->printer->rwlock);
+
+  if ((job = client->printer->active_job) != NULL)
+  {
+   /*
+    * See if the job is already completed, canceled, or aborted; if so,
+    * we can't cancel...
+    */
+
+    if (job->state < IPP_JSTATE_CANCELED)
+    {
+     /*
+      * Cancel the job...
+      */
+
+      if (job->state == IPP_JSTATE_PROCESSING || (job->state == IPP_JSTATE_HELD && job->fd >= 0))
+      {
+       job->cancel = 1;
+      }
+      else
+      {
+       job->state     = IPP_JSTATE_CANCELED;
+       job->completed = time(NULL);
+      }
+    }
+  }
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+
+  _cupsRWUnlock(&client->printer->rwlock);
+}
+
+
 /*
  * 'ipp_close_job()' - Close an open job.
  */
@@ -3042,25 +3337,23 @@ ipp_create_job(ippeve_client_t *client) /* I - Client */
 
 
  /*
-  * Validate print job attributes...
+  * Do we have a file to print?
   */
 
-  if (!valid_job_attributes(client))
+  if (have_document_data(client))
   {
-    httpFlush(client->http);
+    flush_document_data(client);
+    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+                "Unexpected document data following request.");
     return;
   }
 
  /*
-  * Do we have a file to print?
+  * Validate print job attributes...
   */
 
-  if (httpGetState(client->http) == HTTP_STATE_POST_RECV)
-  {
-    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
-                "Unexpected document data following request.");
+  if (!valid_job_attributes(client))
     return;
-  }
 
  /*
   * Create the job...
@@ -3329,6 +3622,29 @@ ipp_get_printer_attributes(
   if (!ra || cupsArrayFind(ra, "printer-current-time"))
     ippAddDate(client->response, IPP_TAG_PRINTER, "printer-current-time", ippTimeToDate(time(NULL)));
 
+  if (!ra || cupsArrayFind(ra, "printer-icons"))
+  {
+    char       uris[3][1024];          /* Buffers for URIs */
+    const char *values[3];             /* Values for attribute */
+
+    httpAssembleURI(HTTP_URI_CODING_ALL, uris[0], sizeof(uris[0]), WEB_SCHEME, NULL, client->host_field, client->host_port, "/icon-sm.png");
+    httpAssembleURI(HTTP_URI_CODING_ALL, uris[1], sizeof(uris[1]), WEB_SCHEME, NULL, client->host_field, client->host_port, "/icon.png");
+    httpAssembleURI(HTTP_URI_CODING_ALL, uris[2], sizeof(uris[2]), WEB_SCHEME, NULL, client->host_field, client->host_port, "/icon-lg.png");
+
+    values[0] = uris[0];
+    values[1] = uris[1];
+    values[2] = uris[2];
+
+    ippAddStrings(client->response, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-icons", 3, NULL, values);
+  }
+
+  if (!ra || cupsArrayFind(ra, "printer-more-info"))
+  {
+    char       uri[1024];              /* URI value */
+
+    httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), WEB_SCHEME, NULL, client->host_field, client->host_port, "/");
+    ippAddString(client->response, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-more-info", NULL, uri);
+  }
 
   if (!ra || cupsArrayFind(ra, "printer-state"))
     ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", (int)printer->state);
@@ -3373,9 +3689,42 @@ ipp_get_printer_attributes(
     }
   }
 
+  if (!ra || cupsArrayFind(ra, "printer-strings-uri"))
+  {
+    char       uri[1024];              /* URI value */
+
+    httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), WEB_SCHEME, NULL, client->host_field, client->host_port, "/en.strings");
+    ippAddString(client->response, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-strings-uri", NULL, uri);
+  }
+
+  if (!ra || cupsArrayFind(ra, "printer-supply-info-uri"))
+  {
+    char       uri[1024];              /* URI value */
+
+    httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), WEB_SCHEME, NULL, client->host_field, client->host_port, "/supplies");
+    ippAddString(client->response, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-supply-info-uri", NULL, uri);
+  }
+
   if (!ra || cupsArrayFind(ra, "printer-up-time"))
     ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-up-time", (int)(time(NULL) - printer->start_time));
 
+  if (!ra || cupsArrayFind(ra, "printer-uri-supported"))
+  {
+    char       uris[2][1024];          /* Buffers for URIs */
+    const char *values[2];             /* Values for attribute */
+    int                num_values = 0;         /* Number of values */
+
+    httpAssembleURI(HTTP_URI_CODING_ALL, uris[0], sizeof(uris[0]), "ipp", NULL, client->host_field, client->host_port, "/ipp/print");
+    values[num_values ++] = uris[0];
+
+#ifdef HAVE_SSL
+    httpAssembleURI(HTTP_URI_CODING_ALL, uris[1], sizeof(uris[1]), "ipps", NULL, client->host_field, client->host_port, "/ipp/print");
+    values[num_values ++] = uris[1];
+#endif /* HAVE_SSL */
+
+    ippAddStrings(client->response, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uri-supported", num_values, NULL, values);
+  }
+
   if (!ra || cupsArrayFind(ra, "queued-job-count"))
     ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "queued-job-count", printer->active_job && printer->active_job->state < IPP_JSTATE_CANCELED);
 
@@ -3402,8 +3751,21 @@ ipp_identify_printer(
 
   if (!actions || ippContainsString(actions, "sound"))
   {
+#ifdef __APPLE__
+    pid_t      pid;                    /* Process ID for "afplay" utility */
+    static const char * const afplay[3] =
+    {                                  /* Arguments for "afplay" utility */
+      "/usr/bin/afplay",
+      "/System/Library/Sounds/Ping.aiff",
+      NULL
+    };
+
+    posix_spawn(&pid, afplay[0], NULL, NULL, (char **)afplay, NULL);
+
+#else
     putchar(0x07);
     fflush(stdout);
+#endif /* __APPLE__ */
   }
 
   if (ippContainsString(actions, "display"))
@@ -3429,7 +3791,7 @@ ipp_print_job(ippeve_client_t *client)    /* I - Client */
 
   if (!valid_job_attributes(client))
   {
-    httpFlush(client->http);
+    flush_document_data(client);
     return;
   }
 
@@ -3437,7 +3799,7 @@ ipp_print_job(ippeve_client_t *client)    /* I - Client */
   * Do we have a file to print?
   */
 
-  if (httpGetState(client->http) == HTTP_STATE_POST_SEND)
+  if (!have_document_data(client))
   {
     respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "No file in request.");
     return;
@@ -3477,7 +3839,7 @@ ipp_print_uri(ippeve_client_t *client)    /* I - Client */
 
   if (!valid_job_attributes(client))
   {
-    httpFlush(client->http);
+    flush_document_data(client);
     return;
   }
 
@@ -3510,6 +3872,7 @@ ipp_send_document(
 {
   ippeve_job_t         *job;           /* Job information */
   ipp_attribute_t      *attr;          /* Current attribute */
+  int                  have_data;      /* Have document data? */
 
 
  /*
@@ -3518,26 +3881,28 @@ ipp_send_document(
 
   if ((job = find_job(client)) == NULL)
   {
+    flush_document_data(client);
     respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job does not exist.");
-    httpFlush(client->http);
     return;
   }
 
  /*
   * See if we already have a document for this job or the job has already
-  * in a non-pending state...
+  * in a terminating state...
   */
 
-  if (job->state > IPP_JSTATE_HELD)
+  have_data = have_document_data(client);
+
+  if ((job->filename || job->fd >= 0) && have_data)
   {
-    respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job is not in a pending state.");
-    httpFlush(client->http);
+    flush_document_data(client);
+    respond_ipp(client, IPP_STATUS_ERROR_MULTIPLE_JOBS_NOT_SUPPORTED, "Multiple document jobs are not supported.");
     return;
   }
-  else if (job->filename || job->fd >= 0)
+  else if (job->state > IPP_JSTATE_HELD && have_data)
   {
-    respond_ipp(client, IPP_STATUS_ERROR_MULTIPLE_JOBS_NOT_SUPPORTED, "Multiple document jobs are not supported.");
-    httpFlush(client->http);
+    flush_document_data(client);
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job is not in a pending state.");
     return;
   }
 
@@ -3547,20 +3912,20 @@ ipp_send_document(
 
   if ((attr = ippFindAttribute(client->request, "last-document", IPP_TAG_ZERO)) == NULL)
   {
+    flush_document_data(client);
     respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Missing required last-document attribute.");
-    httpFlush(client->http);
     return;
   }
   else if (ippGetGroupTag(attr) != IPP_TAG_OPERATION)
   {
+    flush_document_data(client);
     respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "The last-document attribute is not in the operation group.");
-    httpFlush(client->http);
     return;
   }
-  else if (ippGetValueTag(attr) != IPP_TAG_BOOLEAN || ippGetCount(attr) != 1 || !ippGetBoolean(attr, 0))
+  else if (ippGetValueTag(attr) != IPP_TAG_BOOLEAN || ippGetCount(attr) != 1)
   {
+    flush_document_data(client);
     respond_unsupported(client, attr);
-    httpFlush(client->http);
     return;
   }
 
@@ -3568,12 +3933,15 @@ ipp_send_document(
   * Validate document attributes...
   */
 
-  if (!valid_doc_attributes(client))
+  if (have_data && !valid_doc_attributes(client))
   {
-    httpFlush(client->http);
+    flush_document_data(client);
     return;
   }
 
+  if (!have_data && !job->filename)
+    job->state = IPP_JSTATE_ABORTED;
+
  /*
   * Then finish getting the document data and process things...
   */
@@ -3591,7 +3959,8 @@ ipp_send_document(
 
   _cupsRWUnlock(&(client->printer->rwlock));
 
-  finish_document_data(client, job);
+  if (have_data)
+    finish_document_data(client, job);
 }
 
 
@@ -3614,44 +3983,39 @@ ipp_send_uri(ippeve_client_t *client)   /* I - Client */
   if ((job = find_job(client)) == NULL)
   {
     respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job does not exist.");
-    httpFlush(client->http);
     return;
   }
 
  /*
   * See if we already have a document for this job or the job has already
-  * in a non-pending state...
+  * in a non-terminating state...
   */
 
-  if (job->state > IPP_JSTATE_HELD)
+  if (job->filename || job->fd >= 0)
   {
-    respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job is not in a pending state.");
-    httpFlush(client->http);
+    respond_ipp(client, IPP_STATUS_ERROR_MULTIPLE_JOBS_NOT_SUPPORTED, "Multiple document jobs are not supported.");
     return;
   }
-  else if (job->filename || job->fd >= 0)
+  else if (job->state > IPP_JSTATE_HELD)
   {
-    respond_ipp(client, IPP_STATUS_ERROR_MULTIPLE_JOBS_NOT_SUPPORTED, "Multiple document jobs are not supported.");
-    httpFlush(client->http);
+    flush_document_data(client);
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job is not in a pending state.");
     return;
   }
 
   if ((attr = ippFindAttribute(client->request, "last-document", IPP_TAG_ZERO)) == NULL)
   {
     respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Missing required last-document attribute.");
-    httpFlush(client->http);
     return;
   }
   else if (ippGetGroupTag(attr) != IPP_TAG_OPERATION)
   {
     respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "The last-document attribute is not in the operation group.");
-    httpFlush(client->http);
     return;
   }
-  else if (ippGetValueTag(attr) != IPP_TAG_BOOLEAN || ippGetCount(attr) != 1 || !ippGetBoolean(attr, 0))
+  else if (ippGetValueTag(attr) != IPP_TAG_BOOLEAN || ippGetCount(attr) != 1)
   {
     respond_unsupported(client, attr);
-    httpFlush(client->http);
     return;
   }
 
@@ -3661,7 +4025,7 @@ ipp_send_uri(ippeve_client_t *client)     /* I - Client */
 
   if (!valid_doc_attributes(client))
   {
-    httpFlush(client->http);
+    flush_document_data(client);
     return;
   }
 
@@ -3957,7 +4321,7 @@ load_legacy_attributes(
     "oe_photo-l_3.5x5in",              /* Photo L */
     "na_index-4x6_4x6in",              /* Photo 4x6 */
     "iso_a6_105x148mm",                        /* A6 */
-    "na_5x7_5x7in"                     /* Photo 5x7 aka 2L */
+    "na_5x7_5x7in",                    /* Photo 5x7 aka 2L */
     "iso_a5_148x210mm",                        /* A5 */
   };
   static const char * const media_ready[] =
@@ -4211,9 +4575,36 @@ load_legacy_attributes(
   if (cupsArrayFind(docformats, (void *)"application/pdf"))
     ippAddInteger(attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "document-password-supported", 1023);
 
+  /* finishing-template-supported */
+  ippAddString(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "finishing-template-supported", NULL, "none");
+
+  /* finishings-col-database */
+  col = ippNew();
+  ippAddString(col, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "finishing-template", NULL, "none");
+  ippAddCollection(attrs, IPP_TAG_PRINTER, "finishings-col-database", col);
+  ippDelete(col);
+
+  /* finishings-col-default */
+  col = ippNew();
+  ippAddString(col, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "finishing-template", NULL, "none");
+  ippAddCollection(attrs, IPP_TAG_PRINTER, "finishings-col-default", col);
+  ippDelete(col);
+
+  /* finishings-col-ready */
+  col = ippNew();
+  ippAddString(col, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "finishing-template", NULL, "none");
+  ippAddCollection(attrs, IPP_TAG_PRINTER, "finishings-col-ready", col);
+  ippDelete(col);
+
+  /* finishings-col-supported */
+  ippAddString(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "finishings-col-supported", NULL, "finishing-template");
+
   /* finishings-default */
   ippAddInteger(attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "finishings-default", IPP_FINISHINGS_NONE);
 
+  /* finishings-ready */
+  ippAddInteger(attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "finishings-ready", IPP_FINISHINGS_NONE);
+
   /* finishings-supported */
   ippAddInteger(attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "finishings-supported", IPP_FINISHINGS_NONE);
 
@@ -4852,7 +5243,7 @@ load_ppd_attributes(
   }
 
   /* finishings-col-supported */
-  ippAddString(attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "finishings-col-supported", NULL, "finishing-template");
+  ippAddString(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "finishings-col-supported", NULL, "finishing-template");
 
   /* finishings-default */
   ippAddInteger(attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "finishings-default", IPP_FINISHINGS_NONE);
@@ -5226,6 +5617,78 @@ load_ppd_attributes(
 #endif /* !CUPS_LITE */
 
 
+#if HAVE_LIBPAM
+/*
+ * 'pam_func()' - PAM conversation function.
+ */
+
+static int                             /* O - Success or failure */
+pam_func(
+    int                      num_msg,  /* I - Number of messages */
+    const struct pam_message **msg,    /* I - Messages */
+    struct pam_response      **resp,   /* O - Responses */
+    void                     *appdata_ptr)
+                                       /* I - Pointer to connection */
+{
+  int                  i;              /* Looping var */
+  struct pam_response  *replies;       /* Replies */
+  ippeve_authdata_t    *data;          /* Pointer to auth data */
+
+
+ /*
+  * Allocate memory for the responses...
+  */
+
+  if ((replies = malloc(sizeof(struct pam_response) * (size_t)num_msg)) == NULL)
+    return (PAM_CONV_ERR);
+
+ /*
+  * Answer all of the messages...
+  */
+
+  data = (ippeve_authdata_t *)appdata_ptr;
+
+  for (i = 0; i < num_msg; i ++)
+  {
+    switch (msg[i]->msg_style)
+    {
+      case PAM_PROMPT_ECHO_ON:
+          replies[i].resp_retcode = PAM_SUCCESS;
+          replies[i].resp         = strdup(data->username);
+          break;
+
+      case PAM_PROMPT_ECHO_OFF:
+          replies[i].resp_retcode = PAM_SUCCESS;
+          replies[i].resp         = strdup(data->password);
+          break;
+
+      case PAM_TEXT_INFO:
+          replies[i].resp_retcode = PAM_SUCCESS;
+          replies[i].resp         = NULL;
+          break;
+
+      case PAM_ERROR_MSG:
+          replies[i].resp_retcode = PAM_SUCCESS;
+          replies[i].resp         = NULL;
+          break;
+
+      default:
+          free(replies);
+          return (PAM_CONV_ERR);
+    }
+  }
+
+ /*
+  * Return the responses back to PAM...
+  */
+
+  *resp = replies;
+
+  return (PAM_SUCCESS);
+}
+#endif /* HAVE_LIBPAM */
+
+
 /*
  * 'parse_options()' - Parse URL options into CUPS options.
  *
@@ -5403,8 +5866,9 @@ process_http(ippeve_client_t *client)     /* I - Client connection */
   ipp_state_t          ipp_state;      /* State of IPP transfer */
   char                 scheme[32],     /* Method/scheme */
                        userpass[128],  /* Username:password */
-                       hostname[HTTP_MAX_HOST];
+                       hostname[HTTP_MAX_HOST],
                                        /* Hostname */
+                       *ptr;           /* Pointer into value */
   int                  port;           /* Port number */
   static const char * const http_states[] =
   {                                    /* Strings for logging HTTP method */
@@ -5431,6 +5895,8 @@ process_http(ippeve_client_t *client)     /* I - Client connection */
   * Clear state variables...
   */
 
+  client->username[0] = '\0';
+
   ippDelete(client->request);
   ippDelete(client->response);
 
@@ -5511,6 +5977,10 @@ process_http(ippeve_client_t *client)    /* I - Client connection */
     return (0);
   }
 
+ /*
+  * Validate the host header...
+  */
+
   if (!httpGetField(client->http, HTTP_FIELD_HOST)[0] &&
       httpGetVersion(client->http) >= HTTP_VERSION_1_1)
   {
@@ -5518,6 +5988,36 @@ process_http(ippeve_client_t *client)    /* I - Client connection */
     * HTTP/1.1 and higher require the "Host:" field...
     */
 
+    fprintf(stderr, "%s Missing Host: header.\n", client->hostname);
+    respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0);
+    return (0);
+  }
+
+  strlcpy(client->host_field, httpGetField(client->http, HTTP_FIELD_HOST), sizeof(client->host_field));
+  if ((ptr = strrchr(client->host_field, ':')) != NULL)
+  {
+   /*
+    * Grab port number from Host: header...
+    */
+
+    *ptr++ = '\0';
+    client->host_port = atoi(ptr);
+  }
+  else
+  {
+   /*
+    * Use the default port number...
+    */
+
+    client->host_port = client->printer->port;
+  }
+
+  ptr = strrchr(client->host_field, '.');
+
+  if (!isdigit(client->host_field[0] & 255) && client->host_field[0] != '[' && strcmp(client->host_field, client->printer->hostname) && strcmp(client->host_field, "localhost") &&
+      (!ptr || (strcmp(ptr, ".local") && strcmp(ptr, ".local."))))
+  {
+    fprintf(stderr, "%s Bad Host: header '%s'.\n", client->hostname, client->host_field);
     respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0);
     return (0);
   }
@@ -5526,8 +6026,7 @@ process_http(ippeve_client_t *client)     /* I - Client connection */
   * Handle HTTP Upgrade...
   */
 
-  if (!strcasecmp(httpGetField(client->http, HTTP_FIELD_CONNECTION),
-                        "Upgrade"))
+  if (!strcasecmp(httpGetField(client->http, HTTP_FIELD_CONNECTION), "Upgrade"))
   {
 #ifdef HAVE_SSL
     if (strstr(httpGetField(client->http, HTTP_FIELD_UPGRADE), "TLS/") != NULL && !httpIsEncrypted(client->http))
@@ -5552,34 +6051,6 @@ process_http(ippeve_client_t *client)    /* I - Client connection */
       return (0);
   }
 
- /*
-  * Handle HTTP Expect...
-  */
-
-  if (httpGetExpect(client->http) &&
-      (client->operation == HTTP_STATE_POST ||
-       client->operation == HTTP_STATE_PUT))
-  {
-    if (httpGetExpect(client->http) == HTTP_STATUS_CONTINUE)
-    {
-     /*
-      * Send 100-continue header...
-      */
-
-      if (!respond_http(client, HTTP_STATUS_CONTINUE, NULL, NULL, 0))
-       return (0);
-    }
-    else
-    {
-     /*
-      * Send 417-expectation-failed header...
-      */
-
-      if (!respond_http(client, HTTP_STATUS_EXPECTATION_FAILED, NULL, NULL, 0))
-       return (0);
-    }
-  }
-
  /*
   * Handle new transfers...
   */
@@ -5594,7 +6065,9 @@ process_http(ippeve_client_t *client)     /* I - Client connection */
        return (respond_http(client, HTTP_STATUS_OK, NULL, NULL, 0));
 
     case HTTP_STATE_HEAD :
-        if (!strcmp(client->uri, "/icon.png"))
+        if (!strcmp(client->uri, "/en.strings"))
+         return (respond_http(client, HTTP_STATUS_OK, NULL, "text/strings", 0));
+        else if (!strcmp(client->uri, "/icon.png") || !strcmp(client->uri, "/icon-lg.png") || !strcmp(client->uri, "/icon-sm.png"))
          return (respond_http(client, HTTP_STATUS_OK, NULL, "image/png", 0));
        else if (!strcmp(client->uri, "/") || !strcmp(client->uri, "/media") || !strcmp(client->uri, "/supplies"))
          return (respond_http(client, HTTP_STATUS_OK, NULL, "text/html", 0));
@@ -5602,22 +6075,54 @@ process_http(ippeve_client_t *client)   /* I - Client connection */
          return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0));
 
     case HTTP_STATE_GET :
-        if (!strcmp(client->uri, "/icon.png"))
+        if (!strcmp(client->uri, "/en.strings"))
        {
         /*
-         * Send PNG icon file.
+         * Send strings file.
          */
 
-          if (client->printer->icon)
+          if (client->printer->strings)
           {
            int         fd;             /* Icon file */
            struct stat fileinfo;       /* Icon file information */
            char        buffer[4096];   /* Copy buffer */
            ssize_t     bytes;          /* Bytes */
 
-           fprintf(stderr, "Icon file is \"%s\".\n", client->printer->icon);
+           if (!stat(client->printer->strings, &fileinfo) && (fd = open(client->printer->strings, O_RDONLY)) >= 0)
+           {
+             if (!respond_http(client, HTTP_STATUS_OK, NULL, "text/strings", (size_t)fileinfo.st_size))
+             {
+               close(fd);
+               return (0);
+             }
+
+             while ((bytes = read(fd, buffer, sizeof(buffer))) > 0)
+               httpWrite2(client->http, buffer, (size_t)bytes);
+
+             httpFlushWrite(client->http);
+
+             close(fd);
+           }
+           else
+             return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0));
+         }
+         else
+           return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0));
+        }
+        else if (!strcmp(client->uri, "/icon.png"))
+       {
+        /*
+         * Send medium PNG icon file.
+         */
+
+          if (client->printer->icons[1])
+          {
+           int         fd;             /* Icon file */
+           struct stat fileinfo;       /* Icon file information */
+           char        buffer[4096];   /* Copy buffer */
+           ssize_t     bytes;          /* Bytes */
 
-           if (!stat(client->printer->icon, &fileinfo) && (fd = open(client->printer->icon, O_RDONLY)) >= 0)
+           if (!stat(client->printer->icons[1], &fileinfo) && (fd = open(client->printer->icons[1], O_RDONLY)) >= 0)
            {
              if (!respond_http(client, HTTP_STATUS_OK, NULL, "image/png", (size_t)fileinfo.st_size))
              {
@@ -5646,32 +6151,128 @@ process_http(ippeve_client_t *client)  /* I - Client connection */
            httpFlushWrite(client->http);
          }
        }
-       else if (!strcmp(client->uri, "/"))
+        else if (!strcmp(client->uri, "/icon-lg.png"))
        {
         /*
-         * Show web status page...
+         * Send large PNG icon file.
          */
 
-          return (show_status(client));
+          if (client->printer->icons[2])
+          {
+           int         fd;             /* Icon file */
+           struct stat fileinfo;       /* Icon file information */
+           char        buffer[4096];   /* Copy buffer */
+           ssize_t     bytes;          /* Bytes */
+
+           if (!stat(client->printer->icons[2], &fileinfo) && (fd = open(client->printer->icons[2], O_RDONLY)) >= 0)
+           {
+             if (!respond_http(client, HTTP_STATUS_OK, NULL, "image/png", (size_t)fileinfo.st_size))
+             {
+               close(fd);
+               return (0);
+             }
+
+             while ((bytes = read(fd, buffer, sizeof(buffer))) > 0)
+               httpWrite2(client->http, buffer, (size_t)bytes);
+
+             httpFlushWrite(client->http);
+
+             close(fd);
+           }
+           else
+             return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0));
+         }
+         else
+         {
+           fputs("Icon file is internal printer-lg.png.\n", stderr);
+
+           if (!respond_http(client, HTTP_STATUS_OK, NULL, "image/png", sizeof(printer_lg_png)))
+             return (0);
+
+            httpWrite2(client->http, (const char *)printer_lg_png, sizeof(printer_lg_png));
+           httpFlushWrite(client->http);
+         }
        }
-       else if (!strcmp(client->uri, "/media"))
+        else if (!strcmp(client->uri, "/icon-sm.png"))
        {
         /*
-         * Show web media page...
+         * Send small PNG icon file.
          */
 
-          return (show_media(client));
+          if (client->printer->icons[0])
+          {
+           int         fd;             /* Icon file */
+           struct stat fileinfo;       /* Icon file information */
+           char        buffer[4096];   /* Copy buffer */
+           ssize_t     bytes;          /* Bytes */
+
+           if (!stat(client->printer->icons[0], &fileinfo) && (fd = open(client->printer->icons[0], O_RDONLY)) >= 0)
+           {
+             if (!respond_http(client, HTTP_STATUS_OK, NULL, "image/png", (size_t)fileinfo.st_size))
+             {
+               close(fd);
+               return (0);
+             }
+
+             while ((bytes = read(fd, buffer, sizeof(buffer))) > 0)
+               httpWrite2(client->http, buffer, (size_t)bytes);
+
+             httpFlushWrite(client->http);
+
+             close(fd);
+           }
+           else
+             return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0));
+         }
+         else
+         {
+           fputs("Icon file is internal printer-sm.png.\n", stderr);
+
+           if (!respond_http(client, HTTP_STATUS_OK, NULL, "image/png", sizeof(printer_sm_png)))
+             return (0);
+
+            httpWrite2(client->http, (const char *)printer_sm_png, sizeof(printer_sm_png));
+           httpFlushWrite(client->http);
+         }
        }
-       else if (!strcmp(client->uri, "/supplies"))
+       else
        {
         /*
-         * Show web supplies page...
+         * Authenticate if needed...
          */
 
-          return (show_supplies(client));
+         if ((http_status = authenticate_request(client)) != HTTP_STATUS_CONTINUE)
+         {
+           return (respond_http(client, http_status, NULL, NULL, 0));
+         }
+
+         if (!strcmp(client->uri, "/"))
+         {
+          /*
+           * Show web status page...
+           */
+
+           return (show_status(client));
+         }
+         else if (!strcmp(client->uri, "/media"))
+         {
+          /*
+           * Show web media page...
+           */
+
+           return (show_media(client));
+         }
+         else if (!strcmp(client->uri, "/supplies"))
+         {
+          /*
+           * Show web supplies page...
+           */
+
+           return (show_supplies(client));
+         }
+         else
+           return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0));
        }
-       else
-         return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0));
        break;
 
     case HTTP_STATE_POST :
@@ -5730,6 +6331,7 @@ process_ipp(ippeve_client_t *client)      /* I - Client */
   ipp_attribute_t      *uri;           /* Printer URI attribute */
   int                  major, minor;   /* Version number */
   const char           *name;          /* Name of attribute */
+  http_status_t                status;         /* Authentication status */
 
 
   debug_attributes("Request", client->request, 1);
@@ -5877,16 +6479,52 @@ process_ipp(ippeve_client_t *client)    /* I - Client */
         else if ((!strcmp(name, "job-uri") &&
                   strncmp(resource, "/ipp/print/", 11)) ||
                  (!strcmp(name, "printer-uri") &&
-                  strcmp(resource, "/ipp/print")))
+                  strcmp(resource, "/ipp/print") &&
+                  (strcmp(resource, "/") || ippGetOperation(client->request) != IPP_OP_GET_PRINTER_ATTRIBUTES)))
          respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "%s %s not found.",
                      name, ippGetString(uri, 0, NULL));
-       else
+       else if (client->operation_id != IPP_OP_GET_PRINTER_ATTRIBUTES && (status = authenticate_request(client)) != HTTP_STATUS_CONTINUE)
+        {
+          flush_document_data(client);
+
+          return (respond_http(client, status, NULL, NULL, 0));
+        }
+        else
        {
+        /*
+         * Handle HTTP Expect...
+         */
+
+         if (httpGetExpect(client->http))
+         {
+           if (httpGetExpect(client->http) == HTTP_STATUS_CONTINUE)
+           {
+            /*
+             * Send 100-continue header...
+             */
+
+             if (!respond_http(client, HTTP_STATUS_CONTINUE, NULL, NULL, 0))
+               return (0);
+           }
+           else
+           {
+            /*
+             * Send 417-expectation-failed header...
+             */
+
+             if (!respond_http(client, HTTP_STATUS_EXPECTATION_FAILED, NULL, NULL, 0))
+               return (0);
+
+             flush_document_data(client);
+             return (1);
+           }
+         }
+
         /*
          * Try processing the operation...
          */
 
-         switch (ippGetOperation(client->request))
+         switch (client->operation_id)
          {
            case IPP_OP_PRINT_JOB :
                ipp_print_job(client);
@@ -5916,6 +6554,10 @@ process_ipp(ippeve_client_t *client)     /* I - Client */
                ipp_cancel_job(client);
                break;
 
+           case IPP_OP_CANCEL_MY_JOBS :
+               ipp_cancel_my_jobs(client);
+               break;
+
            case IPP_OP_GET_JOB_ATTRIBUTES :
                ipp_get_job_attributes(client);
                break;
@@ -6504,40 +7146,44 @@ process_state_message(
 
 
 /*
- * 'register_printer()' - Register a printer object via Bonjour.
+ * 'register_printer()' - Register a printer object via DNS-SD.
  */
 
 static int                             /* O - 1 on success, 0 on error */
 register_printer(
-    ippeve_printer_t *printer,         /* I - Printer */
-    const char       *subtypes)                /* I - Service subtype(s) */
+    ippeve_printer_t *printer)         /* I - Printer */
 {
 #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
-  ippeve_txt_t         ipp_txt;        /* Bonjour IPP TXT record */
+  ippeve_txt_t         ipp_txt;        /* DNS-SD IPP TXT record */
   int                  i,              /* Looping var */
                        count;          /* Number of values */
   ipp_attribute_t      *color_supported,
                        *document_format_supported,
                        *printer_location,
                        *printer_make_and_model,
-                       *printer_more_info,
                        *printer_uuid,
                        *sides_supported,
                        *urf_supported; /* Printer attributes */
   const char           *value;         /* Value string */
-  char                 formats[252],   /* List of supported formats */
+  char                 adminurl[247],  /* adminurl value */
+                       formats[252],   /* List of supported formats */
                        urf[252],       /* List of supported URF values */
                        *ptr;           /* Pointer into string */
 
+
+  if (printer->dnssd_subtypes && !strcmp(printer->dnssd_subtypes, "off"))
+    return (1);
+
   color_supported           = ippFindAttribute(printer->attrs, "color-supported", IPP_TAG_BOOLEAN);
   document_format_supported = ippFindAttribute(printer->attrs, "document-format-supported", IPP_TAG_MIMETYPE);
   printer_location          = ippFindAttribute(printer->attrs, "printer-location", IPP_TAG_TEXT);
   printer_make_and_model    = ippFindAttribute(printer->attrs, "printer-make-and-model", IPP_TAG_TEXT);
-  printer_more_info         = ippFindAttribute(printer->attrs, "printer-more-info", IPP_TAG_URI);
   printer_uuid              = ippFindAttribute(printer->attrs, "printer-uuid", IPP_TAG_URI);
   sides_supported           = ippFindAttribute(printer->attrs, "sides-supported", IPP_TAG_KEYWORD);
   urf_supported             = ippFindAttribute(printer->attrs, "urf-supported", IPP_TAG_KEYWORD);
 
+  httpAssembleURI(HTTP_URI_CODING_ALL, adminurl, sizeof(adminurl), WEB_SCHEME, NULL, printer->hostname, printer->port, "/");
+
   for (i = 0, count = ippGetCount(document_format_supported), ptr = formats; i < count; i ++)
   {
     value = ippGetString(document_format_supported, i, NULL);
@@ -6570,10 +7216,35 @@ register_printer(
       break;
   }
 
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+ /*
+  * Rename the service as needed...
+  */
+
+  if (printer->dnssd_collision)
+  {
+    char       new_dnssd_name[256];    /* New DNS-SD name */
+    const char *uuid = ippGetString(printer_uuid, 0, NULL);
+                                       /* "printer-uuid" value */
+
+    _cupsRWLockWrite(&printer->rwlock);
+
+    snprintf(new_dnssd_name, sizeof(new_dnssd_name), "%s (%c%c%c%c%c%c)", printer->dnssd_name, toupper(uuid[39]), toupper(uuid[40]), toupper(uuid[41]), toupper(uuid[42]), toupper(uuid[43]), toupper(uuid[44]));
+
+    free(printer->dnssd_name);
+    printer->dnssd_name = strdup(new_dnssd_name);
+
+    fprintf(stderr, "DNS-SD name collision, trying new DNS-SD service name '%s'.\n", printer->dnssd_name);
+
+    _cupsRWUnlock(&printer->rwlock);
+
+    printer->dnssd_collision = 0;
+  }
+#endif /* HAVE_DNSSD || HAVE_AVAHI  */
+
 #ifdef HAVE_DNSSD
-  DNSServiceErrorType  error;          /* Error from Bonjour */
-  char                 regtype[256];   /* Bonjour service type */
+  DNSServiceErrorType  error;          /* Error from DNS-SD */
+  char                 regtype[256];   /* DNS-SD service type */
+  uint32_t             ifindex;        /* Interface index */
 
 
  /*
@@ -6584,8 +7255,7 @@ register_printer(
   TXTRecordSetValue(&ipp_txt, "rp", 9, "ipp/print");
   if ((value = ippGetString(printer_make_and_model, 0, NULL)) != NULL)
     TXTRecordSetValue(&ipp_txt, "ty", (uint8_t)strlen(value), value);
-  if ((value = ippGetString(printer_more_info, 0, NULL)) != NULL)
-    TXTRecordSetValue(&ipp_txt, "adminurl", (uint8_t)strlen(value), value);
+  TXTRecordSetValue(&ipp_txt, "adminurl", (uint8_t)strlen(adminurl), adminurl);
   if ((value = ippGetString(printer_location, 0, NULL)) != NULL)
     TXTRecordSetValue(&ipp_txt, "note", (uint8_t)strlen(value), value);
   TXTRecordSetValue(&ipp_txt, "pdl", (uint8_t)strlen(formats), formats);
@@ -6606,9 +7276,14 @@ register_printer(
   * defend our service name but not actually support LPD...
   */
 
+  ifindex = !strcmp(printer->hostname, "localhost") ? kDNSServiceInterfaceIndexLocalOnly : kDNSServiceInterfaceIndexAny;
+
+  if (printer->printer_ref)
+    DNSServiceRefDeallocate(printer->printer_ref);
+
   printer->printer_ref = DNSSDMaster;
 
-  if ((error = DNSServiceRegister(&(printer->printer_ref), kDNSServiceFlagsShareConnection, 0 /* interfaceIndex */, printer->dnssd_name, "_printer._tcp", NULL /* domain */, NULL /* host */, 0 /* port */, 0 /* txtLen */, NULL /* txtRecord */, (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
+  if ((error = DNSServiceRegister(&(printer->printer_ref), kDNSServiceFlagsShareConnection | kDNSServiceFlagsNoAutoRename, ifindex, printer->dnssd_name, "_printer._tcp", NULL /* domain */, NULL /* host */, 0 /* port */, 0 /* txtLen */, NULL /* txtRecord */, (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
   {
     _cupsLangPrintf(stderr, _("Unable to register \"%s.%s\": %d"), printer->dnssd_name, "_printer._tcp", error);
     return (0);
@@ -6619,14 +7294,17 @@ register_printer(
   * advertise our IPP printer...
   */
 
+  if (printer->ipp_ref)
+    DNSServiceRefDeallocate(printer->ipp_ref);
+
   printer->ipp_ref = DNSSDMaster;
 
-  if (subtypes && *subtypes)
-    snprintf(regtype, sizeof(regtype), "_ipp._tcp,%s", subtypes);
+  if (printer->dnssd_subtypes && *(printer->dnssd_subtypes))
+    snprintf(regtype, sizeof(regtype), "_ipp._tcp,%s", printer->dnssd_subtypes);
   else
     strlcpy(regtype, "_ipp._tcp", sizeof(regtype));
 
-  if ((error = DNSServiceRegister(&(printer->ipp_ref), kDNSServiceFlagsShareConnection, 0 /* interfaceIndex */, printer->dnssd_name, regtype, NULL /* domain */, NULL /* host */, htons(printer->port), TXTRecordGetLength(&ipp_txt), TXTRecordGetBytesPtr(&ipp_txt), (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
+  if ((error = DNSServiceRegister(&(printer->ipp_ref), kDNSServiceFlagsShareConnection | kDNSServiceFlagsNoAutoRename, ifindex, printer->dnssd_name, regtype, NULL /* domain */, NULL /* host */, htons(printer->port), TXTRecordGetLength(&ipp_txt), TXTRecordGetBytesPtr(&ipp_txt), (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
   {
     _cupsLangPrintf(stderr, _("Unable to register \"%s.%s\": %d"), printer->dnssd_name, regtype, error);
     return (0);
@@ -6638,14 +7316,17 @@ register_printer(
   * advertise our IPPS printer...
   */
 
+  if (printer->ipps_ref)
+    DNSServiceRefDeallocate(printer->ipps_ref);
+
   printer->ipps_ref = DNSSDMaster;
 
-  if (subtypes && *subtypes)
-    snprintf(regtype, sizeof(regtype), "_ipps._tcp,%s", subtypes);
+  if (printer->dnssd_subtypes && *(printer->dnssd_subtypes))
+    snprintf(regtype, sizeof(regtype), "_ipps._tcp,%s", printer->dnssd_subtypes);
   else
     strlcpy(regtype, "_ipps._tcp", sizeof(regtype));
 
-  if ((error = DNSServiceRegister(&(printer->ipps_ref), kDNSServiceFlagsShareConnection, 0 /* interfaceIndex */, printer->dnssd_name, regtype, NULL /* domain */, NULL /* host */, htons(printer->port), TXTRecordGetLength(&ipp_txt), TXTRecordGetBytesPtr(&ipp_txt), (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
+  if ((error = DNSServiceRegister(&(printer->ipps_ref), kDNSServiceFlagsShareConnection | kDNSServiceFlagsNoAutoRename, ifindex, printer->dnssd_name, regtype, NULL /* domain */, NULL /* host */, htons(printer->port), TXTRecordGetLength(&ipp_txt), TXTRecordGetBytesPtr(&ipp_txt), (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
   {
     _cupsLangPrintf(stderr, _("Unable to register \"%s.%s\": %d"), printer->dnssd_name, regtype, error);
     return (0);
@@ -6657,9 +7338,12 @@ register_printer(
   * real port number to advertise our IPP printer...
   */
 
+  if (printer->http_ref)
+    DNSServiceRefDeallocate(printer->http_ref);
+
   printer->http_ref = DNSSDMaster;
 
-  if ((error = DNSServiceRegister(&(printer->http_ref), kDNSServiceFlagsShareConnection, 0 /* interfaceIndex */, printer->dnssd_name, "_http._tcp,_printer", NULL /* domain */, NULL /* host */, htons(printer->port), 0 /* txtLen */, NULL /* txtRecord */, (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
+  if ((error = DNSServiceRegister(&(printer->http_ref), kDNSServiceFlagsShareConnection | kDNSServiceFlagsNoAutoRename, ifindex, printer->dnssd_name, "_http._tcp,_printer", NULL /* domain */, NULL /* host */, htons(printer->port), 0 /* txtLen */, NULL /* txtRecord */, (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError)
   {
     _cupsLangPrintf(stderr, _("Unable to register \"%s.%s\": %d"), printer->dnssd_name, "_http._tcp,_printer", error);
     return (0);
@@ -6678,8 +7362,7 @@ register_printer(
   ipp_txt = avahi_string_list_add_printf(ipp_txt, "rp=ipp/print");
   if ((value = ippGetString(printer_make_and_model, 0, NULL)) != NULL)
     ipp_txt = avahi_string_list_add_printf(ipp_txt, "ty=%s", value);
-  if ((value = ippGetString(printer_more_info, 0, NULL)) != NULL)
-    ipp_txt = avahi_string_list_add_printf(ipp_txt, "adminurl=%s", value);
+  ipp_txt = avahi_string_list_add_printf(ipp_txt, "adminurl=%s", adminurl);
   if ((value = ippGetString(printer_location, 0, NULL)) != NULL)
     ipp_txt = avahi_string_list_add_printf(ipp_txt, "note=%s", value);
   ipp_txt = avahi_string_list_add_printf(ipp_txt, "pdl=%s", formats);
@@ -6701,18 +7384,21 @@ register_printer(
 
   avahi_threaded_poll_lock(DNSSDMaster);
 
-  printer->ipp_ref = avahi_entry_group_new(DNSSDClient, dnssd_callback, NULL);
+  if (printer->dnssd_ref)
+    avahi_entry_group_free(printer->dnssd_ref);
+
+  printer->dnssd_ref = avahi_entry_group_new(DNSSDClient, dnssd_callback, printer);
 
-  avahi_entry_group_add_service_strlst(printer->ipp_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_printer._tcp", NULL, NULL, 0, NULL);
+  avahi_entry_group_add_service_strlst(printer->dnssd_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_printer._tcp", NULL, NULL, 0, NULL);
 
  /*
   * Then register the _ipp._tcp (IPP)...
   */
 
-  avahi_entry_group_add_service_strlst(printer->ipp_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_ipp._tcp", NULL, NULL, printer->port, ipp_txt);
-  if (subtypes && *subtypes)
+  avahi_entry_group_add_service_strlst(printer->dnssd_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_ipp._tcp", NULL, NULL, printer->port, ipp_txt);
+  if (printer->dnssd_subtypes && *(printer->dnssd_subtypes))
   {
-    char *temptypes = strdup(subtypes), *start, *end;
+    char *temptypes = strdup(printer->dnssd_subtypes), *start, *end;
 
     for (start = temptypes; *start; start = end)
     {
@@ -6722,7 +7408,7 @@ register_printer(
         end = start + strlen(start);
 
       snprintf(temp, sizeof(temp), "%s._sub._ipp._tcp", start);
-      avahi_entry_group_add_service_subtype(printer->ipp_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_ipp._tcp", NULL, temp);
+      avahi_entry_group_add_service_subtype(printer->dnssd_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_ipp._tcp", NULL, temp);
     }
 
     free(temptypes);
@@ -6733,10 +7419,10 @@ register_printer(
   * _ipps._tcp (IPPS) for secure printing...
   */
 
-  avahi_entry_group_add_service_strlst(printer->ipp_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_ipps._tcp", NULL, NULL, printer->port, ipp_txt);
-  if (subtypes && *subtypes)
+  avahi_entry_group_add_service_strlst(printer->dnssd_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_ipps._tcp", NULL, NULL, printer->port, ipp_txt);
+  if (printer->dnssd_subtypes && *(printer->dnssd_subtypes))
   {
-    char *temptypes = strdup(subtypes), *start, *end;
+    char *temptypes = strdup(printer->dnssd_subtypes), *start, *end;
 
     for (start = temptypes; *start; start = end)
     {
@@ -6746,7 +7432,7 @@ register_printer(
         end = start + strlen(start);
 
       snprintf(temp, sizeof(temp), "%s._sub._ipps._tcp", start);
-      avahi_entry_group_add_service_subtype(printer->ipp_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_ipps._tcp", NULL, temp);
+      avahi_entry_group_add_service_subtype(printer->dnssd_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_ipps._tcp", NULL, temp);
     }
 
     free(temptypes);
@@ -6757,14 +7443,14 @@ register_printer(
   * Finally _http.tcp (HTTP) for the web interface...
   */
 
-  avahi_entry_group_add_service_strlst(printer->ipp_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_http._tcp", NULL, NULL, printer->port, NULL);
-  avahi_entry_group_add_service_subtype(printer->ipp_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_http._tcp", NULL, "_printer._sub._http._tcp");
+  avahi_entry_group_add_service_strlst(printer->dnssd_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_http._tcp", NULL, NULL, printer->port, NULL);
+  avahi_entry_group_add_service_subtype(printer->dnssd_ref, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, printer->dnssd_name, "_http._tcp", NULL, "_printer._sub._http._tcp");
 
  /*
   * Commit it...
   */
 
-  avahi_entry_group_commit(printer->ipp_ref);
+  avahi_entry_group_commit(printer->dnssd_ref);
   avahi_threaded_poll_unlock(DNSSDMaster);
 
   avahi_string_list_free(ipp_txt);
@@ -6824,6 +7510,14 @@ respond_http(
       client->operation == HTTP_STATE_OPTIONS)
     httpSetField(client->http, HTTP_FIELD_ALLOW, "GET, HEAD, OPTIONS, POST");
 
+  if (code == HTTP_STATUS_UNAUTHORIZED)
+  {
+    char value[256];                   /* WWW-Authenticate value */
+
+    snprintf(value, sizeof(value), "Basic realm=\"%s\"", PAMService);
+    httpSetField(client->http, HTTP_FIELD_WWW_AUTHENTICATE, value);
+  }
+
   if (type)
   {
     if (!strcmp(type, "text/html"))
@@ -6938,14 +7632,13 @@ respond_unsupported(
 static void
 run_printer(ippeve_printer_t *printer) /* I - Printer */
 {
-  int          num_fds;                /* Number of file descriptors */
-  struct pollfd        polldata[3];            /* poll() data */
-  int          timeout;                /* Timeout for poll() */
-  ippeve_client_t      *client;                /* New client */
+  int                  num_fds;        /* Number of file descriptors */
+  struct pollfd                polldata[3];    /* poll() data */
+  ippeve_client_t      *client;        /* New client */
 
 
  /*
-  * Setup poll() data for the Bonjour service socket and IPv4/6 listeners...
+  * Setup poll() data for the DNS-SD service socket and IPv4/6 listeners...
   */
 
   polldata[0].fd     = printer->ipv4;
@@ -6967,12 +7660,7 @@ run_printer(ippeve_printer_t *printer)   /* I - Printer */
 
   for (;;)
   {
-    if (cupsArrayCount(printer->jobs))
-      timeout = 10;
-    else
-      timeout = -1;
-
-    if (poll(polldata, (nfds_t)num_fds, timeout) < 0 && errno != EINTR)
+    if (poll(polldata, (nfds_t)num_fds, 1000) < 0 && errno != EINTR)
     {
       perror("poll() failed");
       break;
@@ -7014,11 +7702,20 @@ run_printer(ippeve_printer_t *printer)  /* I - Printer */
       }
     }
 
+   /*
+    * Process DNS-SD messages...
+    */
+
 #ifdef HAVE_DNSSD
     if (polldata[2].revents & POLLIN)
       DNSServiceProcessResult(DNSSDMaster);
 #endif /* HAVE_DNSSD */
 
+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+    if (printer->dnssd_collision)
+      register_printer(printer);
+#endif /* HAVE_DNSSD || HAVE_AVAHI */
+
    /*
     * Clean out old jobs...
     */
@@ -7664,23 +8361,28 @@ usage(int status)                       /* O - Exit status */
 {
   _cupsLangPuts(stdout, _("Usage: ippeveprinter [options] \"name\""));
   _cupsLangPuts(stdout, _("Options:"));
-  _cupsLangPuts(stderr, _("--help                  Show program help"));
-  _cupsLangPuts(stderr, _("--no-web-forms          Disable web forms for media and supplies"));
-  _cupsLangPuts(stderr, _("--version               Show program version"));
+  _cupsLangPuts(stdout, _("--help                  Show program help"));
+  _cupsLangPuts(stdout, _("--no-web-forms          Disable web forms for media and supplies"));
+  _cupsLangPuts(stdout, _("--pam-service service   Use the named PAM service"));
+  _cupsLangPuts(stdout, _("--version               Show program version"));
   _cupsLangPuts(stdout, _("-2                      Set 2-sided printing support (default=1-sided)"));
+  _cupsLangPuts(stdout, _("-A                      Enable authentication"));
   _cupsLangPuts(stdout, _("-D device-uri           Set the device URI for the printer"));
   _cupsLangPuts(stdout, _("-F output-type/subtype  Set the output format for the printer"));
 #ifdef HAVE_SSL
   _cupsLangPuts(stdout, _("-K keypath              Set location of server X.509 certificates and keys."));
 #endif /* HAVE_SSL */
   _cupsLangPuts(stdout, _("-M manufacturer         Set manufacturer name (default=Test)"));
+#if !CUPS_LITE
   _cupsLangPuts(stdout, _("-P filename.ppd         Load printer attributes from PPD file"));
+#endif /* !CUPS_LITE */
+  _cupsLangPuts(stdout, _("-S filename.strings     Set strings file"));
   _cupsLangPuts(stdout, _("-V version              Set default IPP version"));
   _cupsLangPuts(stdout, _("-a filename.conf        Load printer attributes from conf file"));
   _cupsLangPuts(stdout, _("-c command              Set print command"));
   _cupsLangPuts(stdout, _("-d spool-directory      Set spool directory"));
   _cupsLangPuts(stdout, _("-f type/subtype[,...]   Set supported file types"));
-  _cupsLangPuts(stdout, _("-i iconfile.png         Set icon file"));
+  _cupsLangPuts(stdout, _("-i iconfile.png[,...]   Set icon file(s)"));
   _cupsLangPuts(stdout, _("-k                      Keep job spool files"));
   _cupsLangPuts(stdout, _("-l location             Set location of printer"));
   _cupsLangPuts(stdout, _("-m model                Set model name (default=Printer)"));
@@ -7688,7 +8390,7 @@ usage(int status)                 /* O - Exit status */
   _cupsLangPuts(stdout, _("-p port                 Set port number for printer"));
   _cupsLangPuts(stdout, _("-r subtype,[subtype]    Set DNS-SD service subtype"));
   _cupsLangPuts(stdout, _("-s speed[,color-speed]  Set speed in pages per minute"));
-  _cupsLangPuts(stderr, _("-v                      Be verbose"));
+  _cupsLangPuts(stdout, _("-v                      Be verbose"));
 
   exit(status);
 }
@@ -7798,6 +8500,7 @@ valid_doc_attributes(
     memset(header, 0, sizeof(header));
     httpPeek(client->http, (char *)header, sizeof(header));
 
+    fprintf(stderr, "%s %s Auto-type header: %02X%02X%02X%02X%02X%02X%02X%02X\n", client->hostname, op_name, header[0], header[1], header[2], header[3], header[4], header[5], header[6], header[7]);
     if (!memcmp(header, "%PDF", 4))
       format = "application/pdf";
     else if (!memcmp(header, "%!", 2))
@@ -7806,7 +8509,7 @@ valid_doc_attributes(
       format = "image/jpeg";
     else if (!memcmp(header, "\211PNG", 4))
       format = "image/png";
-    else if (!memcmp(header, "RAS2", 4))
+    else if (!memcmp(header, "RaS2PwgR", 8))
       format = "image/pwg-raster";
     else if (!memcmp(header, "UNIRAST", 8))
       format = "image/urf";
index 52e14ee167b774c8e42a0f2f6bcbe60a6923fe25..cdedc8899a564244d669c19e6f553cbc21e2f9d5 100644 (file)
@@ -185,7 +185,7 @@ ascii85(const unsigned char *data,  /* I - Data to write */
   if (length > 0)
   {
     // Copy any remainder into the leftdata array...
-    if ((length - leftcount) > 0)
+    if (length > leftcount)
       memcpy(leftdata + leftcount, data, (size_t)(length - leftcount));
 
     memset(leftdata + length, 0, (size_t)(4 - length));
index 246ab4dba87363dd3a09e58fc41c09916a842f5c..ae5af7d40dd2196b5f4267f36ba5cb33b5253281 100644 (file)
@@ -3,6 +3,8 @@
  * commands such as IPP and Bonjour conformance tests.  This tool is
  * inspired by the UNIX "find" command, thus its name.
  *
+ * Copyright © 2021 by OpenPrinting.
+ * Copyright © 2020 by the IEEE-ISTO Printer Working Group
  * Copyright © 2008-2018 by Apple Inc.
  *
  * Licensed under Apache License v2.0.  See the file "LICENSE" for more
@@ -159,7 +161,7 @@ static void         browse_callback(AvahiServiceBrowser *browser,
 static void            client_callback(AvahiClient *client,
                                        AvahiClientState state,
                                        void *context);
-#endif /* HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
 
 static int             compare_services(ippfind_srv_t *a, ippfind_srv_t *b);
 static const char      *dnssd_error_string(int error);
@@ -1273,6 +1275,16 @@ main(int  argc,                          /* I - Number of command-line args */
       }
 
 #elif defined(HAVE_AVAHI)
+      char     *subtype,               /* Sub-type, if any */
+               subtype_buf[256];       /* Sub-type buffer */
+
+      if ((subtype = strstr(regtype, ",_")) != NULL)
+      {
+        *subtype++ = '\0';
+        snprintf(subtype_buf, sizeof(subtype_buf), "%s._sub.%s", subtype, regtype);
+        regtype = subtype_buf;
+      }
+
       if (avahi_service_browser_new(avahi_client, AVAHI_IF_UNSPEC,
                                     AVAHI_PROTO_UNSPEC, regtype, domain, 0,
                                     browse_callback, services))
@@ -2774,6 +2786,7 @@ show_usage(void)
   _cupsLangPuts(stderr, _("-h regex                Match hostname to regular expression"));
   _cupsLangPuts(stderr, _("-l                      List attributes"));
   _cupsLangPuts(stderr, _("-n regex                Match service name to regular expression"));
+  _cupsLangPuts(stderr, _("-N name                 Match service name to literal name value"));
   _cupsLangPuts(stderr, _("-p                      Print URI if true"));
   _cupsLangPuts(stderr, _("-q                      Quietly report match via exit code"));
   _cupsLangPuts(stderr, _("-r                      True if service is remote"));
@@ -2786,8 +2799,9 @@ show_usage(void)
   _cupsLangPuts(stderr, _("--exec utility [argument ...] ;\n"
                           "                        Execute program if true"));
   _cupsLangPuts(stderr, _("--host regex            Match hostname to regular expression"));
-  _cupsLangPuts(stderr, _("--ls                    List attributes"));
+  _cupsLangPuts(stderr, _("--literal-name name     Match service name to literal name value"));
   _cupsLangPuts(stderr, _("--local                 True if service is local"));
+  _cupsLangPuts(stderr, _("--ls                    List attributes"));
   _cupsLangPuts(stderr, _("--name regex            Match service name to regular expression"));
   _cupsLangPuts(stderr, _("--path regex            Match resource path to regular expression"));
   _cupsLangPuts(stderr, _("--port number[-number]  Match port to number or range"));
index a3a694d5fa4e312b3f3323d1930f886ac38ad5c8..e89fb5bcad8f5bcd39ce0e90668abd09b9631a37 100644 (file)
@@ -1,7 +1,9 @@
 /*
  * ipptool command for CUPS.
  *
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2021 by OpenPrinting.
+ * Copyright © 2020 by The Printer Working Group.
+ * Copyright © 2007-2021 by Apple Inc.
  * Copyright © 1997-2007 by Easy Software Products.
  *
  * Licensed under Apache License v2.0.  See the file "LICENSE" for more
 #endif /* !O_BINARY */
 
 
+/*
+ * Limits...
+ */
+
+#define MAX_EXPECT     200             // Maximum number of EXPECT directives
+#define MAX_DISPLAY    200             // Maximum number of DISPLAY directives
+#define MAX_MONITOR    10              // Maximum number of MONITOR-PRINTER-STATE EXPECT directives
+
+
 /*
  * Types...
  */
 
-typedef enum _cups_transfer_e          /**** How to send request data ****/
+typedef enum ipptool_transfer_e                /**** How to send request data ****/
 {
-  _CUPS_TRANSFER_AUTO,                 /* Chunk for files, length for static */
-  _CUPS_TRANSFER_CHUNKED,              /* Chunk always */
-  _CUPS_TRANSFER_LENGTH                        /* Length always */
-} _cups_transfer_t;
+  IPPTOOL_TRANSFER_AUTO,               /* Chunk for files, length for static */
+  IPPTOOL_TRANSFER_CHUNKED,            /* Chunk always */
+  IPPTOOL_TRANSFER_LENGTH              /* Length always */
+} ipptool_transfer_t;
 
-typedef enum _cups_output_e            /**** Output mode ****/
+typedef enum ipptool_output_e          /**** Output mode ****/
 {
-  _CUPS_OUTPUT_QUIET,                  /* No output */
-  _CUPS_OUTPUT_TEST,                   /* Traditional CUPS test output */
-  _CUPS_OUTPUT_PLIST,                  /* XML plist test output */
-  _CUPS_OUTPUT_IPPSERVER,              /* ippserver attribute file output */
-  _CUPS_OUTPUT_LIST,                   /* Tabular list output */
-  _CUPS_OUTPUT_CSV                     /* Comma-separated values output */
-} _cups_output_t;
-
-typedef enum _cups_with_e              /**** WITH flags ****/
+  IPPTOOL_OUTPUT_QUIET,                        /* No output */
+  IPPTOOL_OUTPUT_TEST,                 /* Traditional CUPS test output */
+  IPPTOOL_OUTPUT_PLIST,                        /* XML plist test output */
+  IPPTOOL_OUTPUT_IPPSERVER,            /* ippserver attribute file output */
+  IPPTOOL_OUTPUT_LIST,                 /* Tabular list output */
+  IPPTOOL_OUTPUT_CSV                   /* Comma-separated values output */
+} ipptool_output_t;
+
+typedef enum ipptool_with_e            /**** WITH flags ****/
 {
-  _CUPS_WITH_LITERAL = 0,              /* Match string is a literal value */
-  _CUPS_WITH_ALL = 1,                  /* Must match all values */
-  _CUPS_WITH_REGEX = 2,                        /* Match string is a regular expression */
-  _CUPS_WITH_HOSTNAME = 4,             /* Match string is a URI hostname */
-  _CUPS_WITH_RESOURCE = 8,             /* Match string is a URI resource */
-  _CUPS_WITH_SCHEME = 16               /* Match string is a URI scheme */
-} _cups_with_t;
-
-typedef struct _cups_expect_s          /**** Expected attribute info ****/
+  IPPTOOL_WITH_LITERAL = 0,            /* Match string is a literal value */
+  IPPTOOL_WITH_ALL = 1,                        /* Must match all values */
+  IPPTOOL_WITH_REGEX = 2,              /* Match string is a regular expression */
+  IPPTOOL_WITH_HOSTNAME = 4,           /* Match string is a URI hostname */
+  IPPTOOL_WITH_RESOURCE = 8,           /* Match string is a URI resource */
+  IPPTOOL_WITH_SCHEME = 16             /* Match string is a URI scheme */
+} ipptool_with_t;
+
+typedef struct ipptool_expect_s                /**** Expected attribute info ****/
 {
   int          optional,               /* Optional attribute? */
                not_expect,             /* Don't expect attribute? */
@@ -74,16 +85,18 @@ typedef struct _cups_expect_s               /**** Expected attribute info ****/
                *with_value_from,       /* Attribute must have one of the values in this attribute */
                *define_match,          /* Variable to define on match */
                *define_no_match,       /* Variable to define on no-match */
-               *define_value;          /* Variable to define with value */
+               *define_value,          /* Variable to define with value */
+               *display_match;         /* Message to display on a match */
   int          repeat_limit,           /* Maximum number of times to repeat */
                repeat_match,           /* Repeat test on match */
                repeat_no_match,        /* Repeat test on no match */
-               with_flags,             /* WITH flags  */
+               with_distinct,          /* WITH-DISTINCT-VALUES? */
+               with_flags,             /* WITH flags */
                count;                  /* Expected count if > 0 */
   ipp_tag_t    in_group;               /* IN-GROUP value */
-} _cups_expect_t;
+} ipptool_expect_t;
 
-typedef struct _cups_status_s          /**** Status info ****/
+typedef struct ipptool_status_s                /**** Status info ****/
 {
   ipp_status_t status;                 /* Expected status code */
   char         *if_defined,            /* Only if variable is defined */
@@ -94,14 +107,16 @@ typedef struct _cups_status_s              /**** Status info ****/
   int          repeat_limit,           /* Maximum number of times to repeat */
                repeat_match,           /* Repeat the test when it does not match */
                repeat_no_match;        /* Repeat the test when it matches */
-} _cups_status_t;
+} ipptool_status_t;
 
-typedef struct _cups_testdata_s                /**** Test Data ****/
+typedef struct ipptool_test_s          /**** Test Data ****/
 {
   /* Global Options */
+  _ipp_vars_t  *vars;                  /* Variables */
   http_encryption_t encryption;                /* Encryption for connection */
   int          family;                 /* Address family */
-  _cups_output_t output;               /* Output mode */
+  ipptool_output_t output;             /* Output mode */
+  int          repeat_on_busy;         /* Repeat tests on server-error-busy */
   int          stop_after_include_error;
                                        /* Stop after include errors? */
   double       timeout;                /* Timeout for connection */
@@ -110,7 +125,7 @@ typedef struct _cups_testdata_s             /**** Test Data ****/
 
   /* Test Defaults */
   int          def_ignore_errors;      /* Default IGNORE-ERRORS value */
-  _cups_transfer_t def_transfer;       /* Default TRANSFER value */
+  ipptool_transfer_t def_transfer;     /* Default TRANSFER value */
   int          def_version;            /* Default IPP version */
 
   /* Global State */
@@ -131,26 +146,36 @@ typedef struct _cups_testdata_s           /**** Test Data ****/
   char         compression[16];        /* COMPRESSION value */
   useconds_t   delay;                  /* Initial delay */
   int          num_displayed;          /* Number of displayed attributes */
-  char         *displayed[200];        /* Displayed attributes */
+  char         *displayed[MAX_DISPLAY];/* Displayed attributes */
   int          num_expects;            /* Number of expected attributes */
-  _cups_expect_t expects[200],         /* Expected attributes */
+  ipptool_expect_t expects[MAX_EXPECT],        /* Expected attributes */
                *expect,                /* Current expected attribute */
                *last_expect;           /* Last EXPECT (for predicates) */
   char         file[1024],             /* Data filename */
                file_id[1024];          /* File identifier */
   int          ignore_errors;          /* Ignore test failures? */
   char         name[1024];             /* Test name */
+  char         pause[1024];            /* PAUSE value */
   useconds_t   repeat_interval;        /* Repeat interval (delay) */
   int          request_id;             /* Current request ID */
   char         resource[512];          /* Resource for request */
-  int          skip_test,              /* Skip this test? */
+  int          pass_test,              /* Pass this test? */
+               skip_test,              /* Skip this test? */
                num_statuses;           /* Number of valid status codes */
-  _cups_status_t statuses[100],                /* Valid status codes */
+  ipptool_status_t statuses[100],      /* Valid status codes */
                *last_status;           /* Last STATUS (for predicates) */
   char         test_id[1024];          /* Test identifier */
-  _cups_transfer_t transfer;           /* To chunk or not to chunk */
+  ipptool_transfer_t transfer;         /* To chunk or not to chunk */
   int          version;                /* IPP version number to use */
-} _cups_testdata_t;
+  _cups_thread_t monitor_thread;       /* Monitoring thread ID */
+  int          monitor_done;           /* Set to 1 to stop monitor thread */
+  char         *monitor_uri;           /* MONITOR-PRINTER-STATE URI */
+  useconds_t   monitor_delay,          /* MONITOR-PRINTER-STATE DELAY value, if any */
+               monitor_interval;       /* MONITOR-PRINTER-STATE DELAY interval */
+  int          num_monitor_expects;    /* Number MONITOR-PRINTER-STATE EXPECTs */
+  ipptool_expect_t monitor_expects[MAX_MONITOR];
+                                       /* MONITOR-PRINTER-STATE EXPECTs */
+} ipptool_test_t;
 
 
 /*
@@ -167,32 +192,35 @@ static int        Cancel = 0;             /* Cancel test? */
 static void    add_stringf(cups_array_t *a, const char *s, ...) _CUPS_FORMAT(2, 3);
 static int      compare_uris(const char *a, const char *b);
 static void    copy_hex_string(char *buffer, unsigned char *data, int datalen, size_t bufsize);
-static int     do_test(_ipp_file_t *f, _ipp_vars_t *vars, _cups_testdata_t *data);
-static int     do_tests(const char *testfile, _ipp_vars_t *vars, _cups_testdata_t *data);
-static int     error_cb(_ipp_file_t *f, _cups_testdata_t *data, const char *error);
-static int      expect_matches(_cups_expect_t *expect, ipp_tag_t value_tag);
+static void    *do_monitor_printer_state(ipptool_test_t *data);
+static int     do_test(_ipp_file_t *f, ipptool_test_t *data);
+static int     do_tests(const char *testfile, ipptool_test_t *data);
+static int     error_cb(_ipp_file_t *f, ipptool_test_t *data, const char *error);
+static int      expect_matches(ipptool_expect_t *expect, ipp_attribute_t *attr);
 static char    *get_filename(const char *testfile, char *dst, const char *src, size_t dstsize);
 static const char *get_string(ipp_attribute_t *attr, int element, int flags, char *buffer, size_t bufsize);
-static void    init_data(_cups_testdata_t *data);
+static void    init_data(ipptool_test_t *data);
 static char    *iso_date(const ipp_uchar_t *date);
+static int     parse_monitor_printer_state(_ipp_file_t *f, ipptool_test_t *data);
 static void    pause_message(const char *message);
-static void    print_attr(cups_file_t *outfile, _cups_output_t output, ipp_attribute_t *attr, ipp_tag_t *group);
-static void    print_csv(_cups_testdata_t *data, ipp_t *ipp, ipp_attribute_t *attr, int num_displayed, char **displayed, size_t *widths);
-static void    print_fatal_error(_cups_testdata_t *data, const char *s, ...) _CUPS_FORMAT(2, 3);
-static void    print_ippserver_attr(_cups_testdata_t *data, ipp_attribute_t *attr, int indent);
-static void    print_ippserver_string(_cups_testdata_t *data, const char *s, size_t len);
-static void    print_line(_cups_testdata_t *data, ipp_t *ipp, ipp_attribute_t *attr, int num_displayed, char **displayed, size_t *widths);
-static void    print_xml_header(_cups_testdata_t *data);
+static void    print_attr(cups_file_t *outfile, ipptool_output_t output, ipp_attribute_t *attr, ipp_tag_t *group);
+static ipp_attribute_t *print_csv(ipptool_test_t *data, ipp_t *ipp, ipp_attribute_t *attr, int num_displayed, char **displayed, size_t *widths);
+static void    print_fatal_error(ipptool_test_t *data, const char *s, ...) _CUPS_FORMAT(2, 3);
+static void    print_ippserver_attr(ipptool_test_t *data, ipp_attribute_t *attr, int indent);
+static void    print_ippserver_string(ipptool_test_t *data, const char *s, size_t len);
+static ipp_attribute_t *print_line(ipptool_test_t *data, ipp_t *ipp, ipp_attribute_t *attr, int num_displayed, char **displayed, size_t *widths);
+static void    print_xml_header(ipptool_test_t *data);
 static void    print_xml_string(cups_file_t *outfile, const char *element, const char *s);
-static void    print_xml_trailer(_cups_testdata_t *data, int success, const char *message);
+static void    print_xml_trailer(ipptool_test_t *data, int success, const char *message);
 #ifndef _WIN32
 static void    sigterm_handler(int sig);
 #endif /* _WIN32 */
 static int     timeout_cb(http_t *http, void *user_data);
-static int     token_cb(_ipp_file_t *f, _ipp_vars_t *vars, _cups_testdata_t *data, const char *token);
+static int     token_cb(_ipp_file_t *f, _ipp_vars_t *vars, ipptool_test_t *data, const char *token);
 static void    usage(void) _CUPS_NORETURN;
+static int     with_distinct_values(cups_array_t *errors, ipp_attribute_t *attr);
 static const char *with_flags_string(int flags);
-static int      with_value(_cups_testdata_t *data, cups_array_t *errors, char *value, int flags, ipp_attribute_t *attr, char *matchbuf, size_t matchlen);
+static int      with_value(ipptool_test_t *data, cups_array_t *errors, char *value, int flags, ipp_attribute_t *attr, char *matchbuf, size_t matchlen);
 static int      with_value_from(cups_array_t *errors, ipp_attribute_t *fromattr, ipp_attribute_t *attr, char *matchbuf, size_t matchlen);
 
 
@@ -215,8 +243,8 @@ main(int  argc,                             /* I - Number of command-line args */
                        *testfile;      /* Test file to use */
   int                  interval,       /* Test interval in microseconds */
                        repeat;         /* Repeat count */
-  _cups_testdata_t     data;           /* Test data */
   _ipp_vars_t          vars;           /* Variables */
+  ipptool_test_t       data;           /* Test data */
   _cups_globals_t      *cg = _cupsGlobals();
                                        /* Global data */
 
@@ -239,8 +267,9 @@ main(int  argc,                             /* I - Number of command-line args */
   init_data(&data);
 
   _ippVarsInit(&vars, NULL, (_ipp_ferror_cb_t)error_cb, (_ipp_ftoken_cb_t)token_cb);
+  data.vars = &vars;
 
-  _ippVarsSet(&vars, "date-start", iso_date(ippTimeToDate(time(NULL))));
+  _ippVarsSet(data.vars, "date-start", iso_date(ippTimeToDate(time(NULL))));
 
  /*
   * We need at least:
@@ -278,7 +307,7 @@ main(int  argc,                             /* I - Number of command-line args */
        exit(1);
       }
 
-      data.output = _CUPS_OUTPUT_IPPSERVER;
+      data.output = IPPTOOL_OUTPUT_IPPSERVER;
     }
     else if (!strcmp(argv[i], "--stop-after-include-error"))
     {
@@ -306,16 +335,16 @@ main(int  argc,                           /* I - Number of command-line args */
 #endif /* AF_INET6 */
 
           case 'C' : /* Enable HTTP chunking */
-              data.def_transfer = _CUPS_TRANSFER_CHUNKED;
+              data.def_transfer = IPPTOOL_TRANSFER_CHUNKED;
               break;
 
          case 'E' : /* Encrypt with TLS */
-#ifdef HAVE_SSL
+#ifdef HAVE_TLS
              data.encryption = HTTP_ENCRYPT_REQUIRED;
 #else
              _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."),
                              argv[0]);
-#endif /* HAVE_SSL */
+#endif /* HAVE_TLS */
              break;
 
           case 'I' : /* Ignore errors */
@@ -323,7 +352,7 @@ main(int  argc,                             /* I - Number of command-line args */
              break;
 
           case 'L' : /* Disable HTTP chunking */
-              data.def_transfer = _CUPS_TRANSFER_LENGTH;
+              data.def_transfer = IPPTOOL_TRANSFER_LENGTH;
               break;
 
           case 'P' : /* Output to plist file */
@@ -344,7 +373,7 @@ main(int  argc,                             /* I - Number of command-line args */
                 exit(1);
               }
 
-             data.output = _CUPS_OUTPUT_PLIST;
+             data.output = IPPTOOL_OUTPUT_PLIST;
 
               if (interval || repeat)
              {
@@ -353,13 +382,16 @@ main(int  argc,                           /* I - Number of command-line args */
              }
               break;
 
+          case 'R' : /* Repeat on server-error-busy */
+              data.repeat_on_busy = 1;
+              break;
+
          case 'S' : /* Encrypt with SSL */
-#ifdef HAVE_SSL
+#ifdef HAVE_TLS
              data.encryption = HTTP_ENCRYPT_ALWAYS;
 #else
-             _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."),
-                             argv[0]);
-#endif /* HAVE_SSL */
+             _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."), "ipptool");
+#endif /* HAVE_TLS */
              break;
 
          case 'T' : /* Set timeout */
@@ -367,9 +399,7 @@ main(int  argc,                             /* I - Number of command-line args */
 
              if (i >= argc)
              {
-               _cupsLangPrintf(stderr,
-                               _("%s: Missing timeout for \"-T\"."),
-                               "ipptool");
+               _cupsLangPrintf(stderr, _("%s: Missing timeout for \"-T\"."), "ipptool");
                usage();
               }
 
@@ -381,9 +411,7 @@ main(int  argc,                             /* I - Number of command-line args */
 
              if (i >= argc)
              {
-               _cupsLangPrintf(stderr,
-                               _("%s: Missing version for \"-V\"."),
-                               "ipptool");
+               _cupsLangPrintf(stderr, _("%s: Missing version for \"-V\"."), "ipptool");
                usage();
               }
 
@@ -415,7 +443,7 @@ main(int  argc,                             /* I - Number of command-line args */
              break;
 
           case 'X' : /* Produce XML output */
-             data.output = _CUPS_OUTPUT_PLIST;
+             data.output = IPPTOOL_OUTPUT_PLIST;
 
               if (interval || repeat)
              {
@@ -425,7 +453,7 @@ main(int  argc,                             /* I - Number of command-line args */
              break;
 
           case 'c' : /* CSV output */
-              data.output = _CUPS_OUTPUT_CSV;
+              data.output = IPPTOOL_OUTPUT_CSV;
               break;
 
           case 'd' : /* Define a variable */
@@ -433,8 +461,7 @@ main(int  argc,                             /* I - Number of command-line args */
 
              if (i >= argc)
              {
-               _cupsLangPuts(stderr,
-                             _("ipptool: Missing name=value for \"-d\"."));
+               _cupsLangPuts(stderr, _("ipptool: Missing name=value for \"-d\"."));
                usage();
               }
 
@@ -444,7 +471,7 @@ main(int  argc,                             /* I - Number of command-line args */
              else
                value = name + strlen(name);
 
-             _ippVarsSet(&vars, name, value);
+             _ippVarsSet(data.vars, name, value);
              break;
 
           case 'f' : /* Set the default test filename */
@@ -452,8 +479,7 @@ main(int  argc,                             /* I - Number of command-line args */
 
              if (i >= argc)
              {
-               _cupsLangPuts(stderr,
-                             _("ipptool: Missing filename for \"-f\"."));
+               _cupsLangPuts(stderr, _("ipptool: Missing filename for \"-f\"."));
                usage();
               }
 
@@ -482,7 +508,7 @@ main(int  argc,                             /* I - Number of command-line args */
               else
                strlcpy(filename, argv[i], sizeof(filename));
 
-             _ippVarsSet(&vars, "filename", filename);
+             _ippVarsSet(data.vars, "filename", filename);
 
               if ((ext = strrchr(filename, '.')) != NULL)
               {
@@ -491,43 +517,43 @@ main(int  argc,                           /* I - Number of command-line args */
                 */
 
                 if (!_cups_strcasecmp(ext, ".gif"))
-                  _ippVarsSet(&vars, "filetype", "image/gif");
+                  _ippVarsSet(data.vars, "filetype", "image/gif");
                 else if (!_cups_strcasecmp(ext, ".htm") ||
                          !_cups_strcasecmp(ext, ".htm.gz") ||
                          !_cups_strcasecmp(ext, ".html") ||
                          !_cups_strcasecmp(ext, ".html.gz"))
-                  _ippVarsSet(&vars, "filetype", "text/html");
+                  _ippVarsSet(data.vars, "filetype", "text/html");
                 else if (!_cups_strcasecmp(ext, ".jpg") ||
                          !_cups_strcasecmp(ext, ".jpeg"))
-                  _ippVarsSet(&vars, "filetype", "image/jpeg");
+                  _ippVarsSet(data.vars, "filetype", "image/jpeg");
                 else if (!_cups_strcasecmp(ext, ".pcl") ||
                          !_cups_strcasecmp(ext, ".pcl.gz"))
-                  _ippVarsSet(&vars, "filetype", "application/vnd.hp-PCL");
+                  _ippVarsSet(data.vars, "filetype", "application/vnd.hp-PCL");
                 else if (!_cups_strcasecmp(ext, ".pdf"))
-                  _ippVarsSet(&vars, "filetype", "application/pdf");
+                  _ippVarsSet(data.vars, "filetype", "application/pdf");
                 else if (!_cups_strcasecmp(ext, ".png"))
-                  _ippVarsSet(&vars, "filetype", "image/png");
+                  _ippVarsSet(data.vars, "filetype", "image/png");
                 else if (!_cups_strcasecmp(ext, ".ps") ||
                          !_cups_strcasecmp(ext, ".ps.gz"))
-                  _ippVarsSet(&vars, "filetype", "application/postscript");
+                  _ippVarsSet(data.vars, "filetype", "application/postscript");
                 else if (!_cups_strcasecmp(ext, ".pwg") ||
                          !_cups_strcasecmp(ext, ".pwg.gz") ||
                          !_cups_strcasecmp(ext, ".ras") ||
                          !_cups_strcasecmp(ext, ".ras.gz"))
-                  _ippVarsSet(&vars, "filetype", "image/pwg-raster");
+                  _ippVarsSet(data.vars, "filetype", "image/pwg-raster");
                 else if (!_cups_strcasecmp(ext, ".tif") ||
                          !_cups_strcasecmp(ext, ".tiff"))
-                  _ippVarsSet(&vars, "filetype", "image/tiff");
+                  _ippVarsSet(data.vars, "filetype", "image/tiff");
                 else if (!_cups_strcasecmp(ext, ".txt") ||
                          !_cups_strcasecmp(ext, ".txt.gz"))
-                  _ippVarsSet(&vars, "filetype", "text/plain");
+                  _ippVarsSet(data.vars, "filetype", "text/plain");
                 else if (!_cups_strcasecmp(ext, ".urf") ||
                          !_cups_strcasecmp(ext, ".urf.gz"))
-                  _ippVarsSet(&vars, "filetype", "image/urf");
+                  _ippVarsSet(data.vars, "filetype", "image/urf");
                 else if (!_cups_strcasecmp(ext, ".xps"))
-                  _ippVarsSet(&vars, "filetype", "application/openxps");
+                  _ippVarsSet(data.vars, "filetype", "application/openxps");
                 else
-                 _ippVarsSet(&vars, "filetype", "application/octet-stream");
+                 _ippVarsSet(data.vars, "filetype", "application/octet-stream");
               }
               else
               {
@@ -535,7 +561,7 @@ main(int  argc,                             /* I - Number of command-line args */
                 * Use the "auto-type" MIME media type...
                 */
 
-               _ippVarsSet(&vars, "filetype", "application/octet-stream");
+               _ippVarsSet(data.vars, "filetype", "application/octet-stream");
               }
              break;
 
@@ -561,7 +587,7 @@ main(int  argc,                             /* I - Number of command-line args */
                }
               }
 
-              if ((data.output == _CUPS_OUTPUT_PLIST || data.output == _CUPS_OUTPUT_IPPSERVER) && interval)
+              if ((data.output == IPPTOOL_OUTPUT_PLIST || data.output == IPPTOOL_OUTPUT_IPPSERVER) && interval)
              {
                _cupsLangPuts(stderr, _("ipptool: \"-i\" and \"-n\" are incompatible with \"--ippserver\", \"-P\", and \"-X\"."));
                usage();
@@ -569,7 +595,7 @@ main(int  argc,                             /* I - Number of command-line args */
              break;
 
           case 'l' : /* List as a table */
-              data.output = _CUPS_OUTPUT_LIST;
+              data.output = IPPTOOL_OUTPUT_LIST;
               break;
 
           case 'n' : /* Repeat count */
@@ -583,7 +609,7 @@ main(int  argc,                             /* I - Number of command-line args */
              else
                repeat = atoi(argv[i]);
 
-              if ((data.output == _CUPS_OUTPUT_PLIST || data.output == _CUPS_OUTPUT_IPPSERVER) && repeat)
+              if ((data.output == IPPTOOL_OUTPUT_PLIST || data.output == IPPTOOL_OUTPUT_IPPSERVER) && repeat)
              {
                _cupsLangPuts(stderr, _("ipptool: \"-i\" and \"-n\" are incompatible with \"--ippserver\", \"-P\", and \"-X\"."));
                usage();
@@ -591,11 +617,11 @@ main(int  argc,                           /* I - Number of command-line args */
              break;
 
           case 'q' : /* Be quiet */
-              data.output = _CUPS_OUTPUT_QUIET;
+              data.output = IPPTOOL_OUTPUT_QUIET;
               break;
 
           case 't' : /* CUPS test output */
-              data.output = _CUPS_OUTPUT_TEST;
+              data.output = IPPTOOL_OUTPUT_TEST;
               break;
 
           case 'v' : /* Be verbose */
@@ -609,34 +635,34 @@ main(int  argc,                           /* I - Number of command-line args */
       }
     }
     else if (!strncmp(argv[i], "ipp://", 6) || !strncmp(argv[i], "http://", 7)
-#ifdef HAVE_SSL
+#ifdef HAVE_TLS
             || !strncmp(argv[i], "ipps://", 7) || !strncmp(argv[i], "https://", 8)
-#endif /* HAVE_SSL */
+#endif /* HAVE_TLS */
             )
     {
      /*
       * Set URI...
       */
 
-      if (vars.uri)
+      if (data.vars->uri)
       {
         _cupsLangPuts(stderr, _("ipptool: May only specify a single URI."));
         usage();
       }
 
-#ifdef HAVE_SSL
+#ifdef HAVE_TLS
       if (!strncmp(argv[i], "ipps://", 7) || !strncmp(argv[i], "https://", 8))
         data.encryption = HTTP_ENCRYPT_ALWAYS;
-#endif /* HAVE_SSL */
+#endif /* HAVE_TLS */
 
-      if (!_ippVarsSet(&vars, "uri", argv[i]))
+      if (!_ippVarsSet(data.vars, "uri", argv[i]))
       {
         _cupsLangPrintf(stderr, _("ipptool: Bad URI \"%s\"."), argv[i]);
         return (1);
       }
 
-      if (vars.username[0] && vars.password)
-       cupsSetPasswordCB2(_ippVarsPasswordCB, &vars);
+      if (data.vars->username[0] && data.vars->password)
+       cupsSetPasswordCB2(_ippVarsPasswordCB, data.vars);
     }
     else
     {
@@ -644,7 +670,7 @@ main(int  argc,                             /* I - Number of command-line args */
       * Run test...
       */
 
-      if (!vars.uri)
+      if (!data.vars->uri)
       {
         _cupsLangPuts(stderr, _("ipptool: URI required before test file."));
         _cupsLangPuts(stderr, argv[i]);
@@ -666,26 +692,31 @@ main(int  argc,                           /* I - Number of command-line args */
       else
         testfile = argv[i];
 
-      if (!do_tests(testfile, &vars, &data))
+      if (access(testfile, 0))
+      {
+        _cupsLangPrintf(stderr, _("%s: Unable to open \"%s\": %s"), "ipptool", testfile, strerror(errno));
+        status = 1;
+      }
+      else if (!do_tests(testfile, &data))
         status = 1;
     }
   }
 
-  if (!vars.uri || !testfile)
+  if (!data.vars->uri || !testfile)
     usage();
 
  /*
   * Loop if the interval is set...
   */
 
-  if (data.output == _CUPS_OUTPUT_PLIST)
+  if (data.output == IPPTOOL_OUTPUT_PLIST)
     print_xml_trailer(&data, !status, NULL);
   else if (interval > 0 && repeat > 0)
   {
     while (repeat > 1)
     {
       usleep((useconds_t)interval);
-      do_tests(testfile, &vars, &data);
+      do_tests(testfile, &data);
       repeat --;
     }
   }
@@ -694,11 +725,11 @@ main(int  argc,                           /* I - Number of command-line args */
     for (;;)
     {
       usleep((useconds_t)interval);
-      do_tests(testfile, &vars, &data);
+      do_tests(testfile, &data);
     }
   }
 
-  if ((data.output == _CUPS_OUTPUT_TEST || (data.output == _CUPS_OUTPUT_PLIST && data.outfile)) && data.test_count > 1)
+  if ((data.output == IPPTOOL_OUTPUT_TEST || (data.output == IPPTOOL_OUTPUT_PLIST && data.outfile)) && data.test_count > 1)
   {
    /*
     * Show a summary report if there were multiple tests...
@@ -709,7 +740,7 @@ main(int  argc,                             /* I - Number of command-line args */
 
   cupsFileClose(data.outfile);
 
-/*
+ /*
   * Exit...
   */
 
@@ -881,21 +912,259 @@ copy_hex_string(char          *buffer,   /* I - String buffer */
 }
 
 
+/*
+ * 'do_monitor_printer_state()' - Do the MONITOR-PRINTER-STATE tests in the background.
+ */
+
+static void *                          // O - Thread exit status
+do_monitor_printer_state(
+    ipptool_test_t *data)              // I - Test data
+{
+  int          i, j;                   // Looping vars
+  char         scheme[32],             // URI scheme
+               userpass[32],           // URI username:password
+               host[256],              // URI hostname/IP address
+               resource[256];          // URI resource path
+  int          port;                   // URI port number
+  http_encryption_t encryption;                // Encryption to use
+  http_t       *http;                  // Connection to printer
+  ipp_t                *request,               // IPP request
+               *response = NULL;       // IPP response
+  http_status_t        status;                 // Request status
+  ipp_attribute_t *found;              // Found attribute
+  ipptool_expect_t *expect;            // Current EXPECT test
+  char         buffer[131072];         // Copy buffer
+  int          num_pattrs;             // Number of printer attributes
+  const char   *pattrs[100];           // Printer attributes we care about
+
+
+  // Connect to the printer...
+  if (httpSeparateURI(HTTP_URI_CODING_ALL, data->monitor_uri, scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK)
+  {
+    print_fatal_error(data, "Bad printer URI \"%s\".", data->monitor_uri);
+    return (NULL);
+  }
+
+  if (!_cups_strcasecmp(scheme, "https") || !_cups_strcasecmp(scheme, "ipps") || port == 443)
+    encryption = HTTP_ENCRYPTION_ALWAYS;
+  else
+    encryption = data->encryption;
+
+  if ((http = httpConnect2(host, port, NULL, data->family, encryption, 1, 30000, NULL)) == NULL)
+  {
+    print_fatal_error(data, "Unable to connect to \"%s\" on port %d - %s", host, port, cupsLastErrorString());
+    return (0);
+  }
+
+#ifdef HAVE_LIBZ
+  httpSetDefaultField(http, HTTP_FIELD_ACCEPT_ENCODING, "deflate, gzip, identity");
+#else
+  httpSetDefaultField(http, HTTP_FIELD_ACCEPT_ENCODING, "identity");
+#endif /* HAVE_LIBZ */
+
+  if (data->timeout > 0.0)
+    httpSetTimeout(http, data->timeout, timeout_cb, NULL);
+
+  // Wait for the initial delay as needed...
+  if (data->monitor_delay)
+    usleep(data->monitor_delay);
+
+  // Create a query request that we'll reuse...
+  request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
+  ippSetRequestId(request, data->request_id * 100 - 1);
+  ippSetVersion(request, data->version / 10, data->version % 10);
+  ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, data->monitor_uri);
+  ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
+
+  for (i = data->num_monitor_expects, expect = data->monitor_expects, num_pattrs = 0; i > 0; i --, expect ++)
+  {
+    // Add EXPECT attribute names...
+    for (j = 0; j < num_pattrs; j ++)
+    {
+      if (!strcmp(expect->name, pattrs[j]))
+        break;
+    }
+
+    if (j >= num_pattrs && num_pattrs < (int)(sizeof(pattrs) / sizeof(pattrs[0])))
+      pattrs[num_pattrs ++] = expect->name;
+  }
+
+  if (num_pattrs > 0)
+    ippAddStrings(request, IPP_TAG_OPERATION, IPP_CONST_TAG(IPP_TAG_KEYWORD), "requested-attributes", num_pattrs, NULL, pattrs);
+
+  // Loop until we need to stop...
+  while (!data->monitor_done && !Cancel)
+  {
+    // Poll the printer state...
+    ippSetRequestId(request, ippGetRequestId(request) + 1);
+
+    if ((status = cupsSendRequest(http, request, resource, ippLength(request))) != HTTP_STATUS_ERROR)
+    {
+      response = cupsGetResponse(http, resource);
+      status   = httpGetStatus(http);
+    }
+
+    if (!data->monitor_done && !Cancel && status == HTTP_STATUS_ERROR && httpError(data->http) != EINVAL &&
+#ifdef _WIN32
+       httpError(data->http) != WSAETIMEDOUT)
+#else
+       httpError(data->http) != ETIMEDOUT)
+#endif // _WIN32
+    {
+      if (httpReconnect2(http, 30000, NULL))
+       break;
+    }
+    else if (status == HTTP_STATUS_ERROR || status == HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED)
+    {
+      break;
+    }
+    else if (status != HTTP_STATUS_OK)
+    {
+      httpFlush(http);
+
+      if (status == HTTP_STATUS_UNAUTHORIZED)
+       continue;
+
+      break;
+    }
+
+    for (i = data->num_monitor_expects, expect = data->monitor_expects; i > 0; i --, expect ++)
+    {
+      if (expect->if_defined && !_ippVarsGet(data->vars, expect->if_defined))
+       continue;
+
+      if (expect->if_not_defined && _ippVarsGet(data->vars, expect->if_not_defined))
+       continue;
+
+      found = ippFindAttribute(response, expect->name, IPP_TAG_ZERO);
+
+      if ((found && expect->not_expect) ||
+         (!found && !(expect->not_expect || expect->optional)) ||
+         (found && !expect_matches(expect, found)) ||
+         (expect->in_group && ippGetGroupTag(found) != expect->in_group) ||
+         (expect->with_distinct && !with_distinct_values(NULL, found)))
+      {
+       if (expect->define_no_match)
+       {
+         _ippVarsSet(data->vars, expect->define_no_match, "1");
+         data->monitor_done = 1;
+       }
+       break;
+      }
+
+      if (found)
+       ippAttributeString(found, buffer, sizeof(buffer));
+
+      if (found && !with_value(data, NULL, expect->with_value, expect->with_flags, found, buffer, sizeof(buffer)))
+      {
+       if (expect->define_no_match)
+       {
+         _ippVarsSet(data->vars, expect->define_no_match, "1");
+         data->monitor_done = 1;
+       }
+       break;
+      }
+
+      if (found && expect->count > 0 && ippGetCount(found) != expect->count)
+      {
+       if (expect->define_no_match)
+       {
+         _ippVarsSet(data->vars, expect->define_no_match, "1");
+         data->monitor_done = 1;
+       }
+       break;
+      }
+
+      if (found && expect->display_match && (data->output == IPPTOOL_OUTPUT_TEST || (data->output == IPPTOOL_OUTPUT_PLIST && data->outfile != cupsFileStdout())))
+       cupsFilePrintf(cupsFileStdout(), "CONT]\n\n%s\n\n    %-68.68s [", expect->display_match, data->name);
+
+      if (found && expect->define_match)
+      {
+       _ippVarsSet(data->vars, expect->define_match, "1");
+       data->monitor_done = 1;
+      }
+
+      if (found && expect->define_value)
+      {
+       if (!expect->with_value)
+       {
+         int last = ippGetCount(found) - 1;
+                                       // Last element in attribute
+
+         switch (ippGetValueTag(found))
+         {
+           case IPP_TAG_ENUM :
+           case IPP_TAG_INTEGER :
+               snprintf(buffer, sizeof(buffer), "%d", ippGetInteger(found, last));
+               break;
+
+           case IPP_TAG_BOOLEAN :
+               if (ippGetBoolean(found, last))
+                 strlcpy(buffer, "true", sizeof(buffer));
+               else
+                 strlcpy(buffer, "false", sizeof(buffer));
+               break;
+
+           case IPP_TAG_CHARSET :
+           case IPP_TAG_KEYWORD :
+           case IPP_TAG_LANGUAGE :
+           case IPP_TAG_MIMETYPE :
+           case IPP_TAG_NAME :
+           case IPP_TAG_NAMELANG :
+           case IPP_TAG_TEXT :
+           case IPP_TAG_TEXTLANG :
+           case IPP_TAG_URI :
+           case IPP_TAG_URISCHEME :
+               strlcpy(buffer, ippGetString(found, last, NULL), sizeof(buffer));
+               break;
+
+           default :
+               ippAttributeString(found, buffer, sizeof(buffer));
+               break;
+         }
+       }
+
+       _ippVarsSet(data->vars, expect->define_value, buffer);
+       data->monitor_done = 1;
+      }
+    }
+
+    if (i == 0)
+      data->monitor_done = 1;          // All tests passed
+
+    ippDelete(response);
+    response = NULL;
+
+    // Sleep between requests...
+    if (data->monitor_done || Cancel)
+      break;
+
+    usleep(data->monitor_interval);
+  }
+
+  // Close the connection to the printer and return...
+  httpClose(http);
+  ippDelete(request);
+  ippDelete(response);
+
+  return (NULL);
+}
+
+
 /*
  * 'do_test()' - Do a single test from the test file.
  */
 
 static int                             /* O - 1 on success, 0 on failure */
-do_test(_ipp_file_t      *f,           /* I - IPP data file */
-        _ipp_vars_t      *vars,                /* I - IPP variables */
-        _cups_testdata_t *data)                /* I - Test data */
+do_test(_ipp_file_t    *f,             /* I - IPP data file */
+        ipptool_test_t *data)          /* I - Test data */
 
 {
   int          i,                      /* Looping var */
                status_ok,              /* Did we get a matching status? */
                repeat_count = 0,       /* Repeat count */
                repeat_test;            /* Repeat the test? */
-  _cups_expect_t *expect;              /* Current expected attribute */
+  ipptool_expect_t *expect;            /* Current expected attribute */
   ipp_t                *request,               /* IPP request */
                *response;              /* IPP response */
   size_t       length;                 /* Length of IPP request */
@@ -915,6 +1184,28 @@ do_test(_ipp_file_t      *f,              /* I - IPP data file */
   if (Cancel)
     return (0);
 
+ /*
+  * Show any PAUSE message, as needed...
+  */
+
+  if (data->pause[0])
+  {
+    if (!data->skip_test && !data->pass_test)
+      pause_message(data->pause);
+
+    data->pause[0] = '\0';
+  }
+
+ /*
+  * Start the background thread as needed...
+  */
+
+  if (data->monitor_uri)
+  {
+    data->monitor_done   = 0;
+    data->monitor_thread = _cupsThreadCreate((_cups_thread_func_t)do_monitor_printer_state, data);
+  }
+
  /*
   * Take over control of the attributes in the request...
   */
@@ -931,7 +1222,7 @@ do_test(_ipp_file_t      *f,               /* I - IPP data file */
   ippSetVersion(request, data->version / 10, data->version % 10);
   ippSetRequestId(request, data->request_id);
 
-  if (data->output == _CUPS_OUTPUT_PLIST)
+  if (data->output == IPPTOOL_OUTPUT_PLIST)
   {
     cupsFilePuts(data->outfile, "<dict>\n");
     cupsFilePuts(data->outfile, "<key>Name</key>\n");
@@ -964,46 +1255,58 @@ do_test(_ipp_file_t      *f,             /* I - IPP data file */
     cupsFilePuts(data->outfile, "</array>\n");
   }
 
-  if (data->output == _CUPS_OUTPUT_TEST || (data->output == _CUPS_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
+  if (data->output == IPPTOOL_OUTPUT_TEST || (data->output == IPPTOOL_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
   {
     if (data->verbosity)
     {
       cupsFilePrintf(cupsFileStdout(), "    %s:\n", ippOpString(ippGetOperation(request)));
 
       for (attrptr = ippFirstAttribute(request); attrptr; attrptr = ippNextAttribute(request))
-       print_attr(cupsFileStdout(), _CUPS_OUTPUT_TEST, attrptr, NULL);
+       print_attr(cupsFileStdout(), IPPTOOL_OUTPUT_TEST, attrptr, NULL);
     }
 
     cupsFilePrintf(cupsFileStdout(), "    %-68.68s [", data->name);
   }
 
-  if ((data->skip_previous && !data->prev_pass) || data->skip_test)
+  if ((data->skip_previous && !data->prev_pass) || data->skip_test || data->pass_test)
   {
-    data->skip_count ++;
+    if (!data->pass_test)
+      data->skip_count ++;
 
     ippDelete(request);
     request  = NULL;
     response = NULL;
 
-    if (data->output == _CUPS_OUTPUT_PLIST)
+    if (data->output == IPPTOOL_OUTPUT_PLIST)
     {
       cupsFilePuts(data->outfile, "<key>Successful</key>\n");
       cupsFilePuts(data->outfile, "<true />\n");
       cupsFilePuts(data->outfile, "<key>Skipped</key>\n");
-      cupsFilePuts(data->outfile, "<true />\n");
+      if (data->pass_test)
+       cupsFilePuts(data->outfile, "<false />\n");
+      else
+       cupsFilePuts(data->outfile, "<true />\n");
       cupsFilePuts(data->outfile, "<key>StatusCode</key>\n");
-      print_xml_string(data->outfile, "string", "skip");
+      if (data->pass_test)
+       print_xml_string(data->outfile, "string", "pass");
+      else
+       print_xml_string(data->outfile, "string", "skip");
       cupsFilePuts(data->outfile, "<key>ResponseAttributes</key>\n");
       cupsFilePuts(data->outfile, "<dict />\n");
     }
 
-    if (data->output == _CUPS_OUTPUT_TEST || (data->output == _CUPS_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
-      cupsFilePuts(cupsFileStdout(), "SKIP]\n");
+    if (data->output == IPPTOOL_OUTPUT_TEST || (data->output == IPPTOOL_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
+    {
+      if (data->pass_test)
+       cupsFilePuts(cupsFileStdout(), "PASS]\n");
+      else
+       cupsFilePuts(cupsFileStdout(), "SKIP]\n");
+    }
 
     goto skip_error;
   }
 
-  vars->password_tries = 0;
+  data->vars->password_tries = 0;
 
   do
   {
@@ -1015,7 +1318,7 @@ do_test(_ipp_file_t      *f,              /* I - IPP data file */
 
     status = HTTP_STATUS_OK;
 
-    if (data->transfer == _CUPS_TRANSFER_CHUNKED || (data->transfer == _CUPS_TRANSFER_AUTO && data->file[0]))
+    if (data->transfer == IPPTOOL_TRANSFER_CHUNKED || (data->transfer == IPPTOOL_TRANSFER_AUTO && data->file[0]))
     {
      /*
       * Send request using chunking - a 0 length means "chunk".
@@ -1056,6 +1359,8 @@ do_test(_ipp_file_t      *f,              /* I - IPP data file */
     {
       while (!response && !Cancel && data->prev_pass)
       {
+        ippSetRequestId(request, ++ data->request_id);
+
        status = cupsSendRequest(data->http, request, data->resource, length);
 
 #ifdef HAVE_LIBZ
@@ -1185,16 +1490,16 @@ do_test(_ipp_file_t      *f,            /* I - IPP data file */
       if ((attrptr = ippFindAttribute(response, "job-id", IPP_TAG_INTEGER)) != NULL)
       {
        snprintf(temp, sizeof(temp), "%d", ippGetInteger(attrptr, 0));
-       _ippVarsSet(vars, "job-id", temp);
+       _ippVarsSet(data->vars, "job-id", temp);
       }
 
       if ((attrptr = ippFindAttribute(response, "job-uri", IPP_TAG_URI)) != NULL)
-       _ippVarsSet(vars, "job-uri", ippGetString(attrptr, 0, NULL));
+       _ippVarsSet(data->vars, "job-uri", ippGetString(attrptr, 0, NULL));
 
       if ((attrptr = ippFindAttribute(response, "notify-subscription-id", IPP_TAG_INTEGER)) != NULL)
       {
        snprintf(temp, sizeof(temp), "%d", ippGetInteger(attrptr, 0));
-       _ippVarsSet(vars, "notify-subscription-id", temp);
+       _ippVarsSet(data->vars, "notify-subscription-id", temp);
       }
 
      /*
@@ -1212,27 +1517,27 @@ do_test(_ipp_file_t      *f,            /* I - IPP data file */
         major = ippGetVersion(response, &minor);
 
         if (major != (data->version / 10) || minor != (data->version % 10))
-         add_stringf(data->errors, "Bad version %d.%d in response - expected %d.%d (RFC 2911 section 3.1.8).", major, minor, data->version / 10, data->version % 10);
+         add_stringf(data->errors, "Bad version %d.%d in response - expected %d.%d (RFC 8011 section 4.1.8).", major, minor, data->version / 10, data->version % 10);
       }
 
       if (ippGetRequestId(response) != data->request_id)
-       add_stringf(data->errors, "Bad request ID %d in response - expected %d (RFC 2911 section 3.1.1)", ippGetRequestId(response), data->request_id);
+       add_stringf(data->errors, "Bad request ID %d in response - expected %d (RFC 8011 section 4.1.1)", ippGetRequestId(response), data->request_id);
 
       attrptr = ippFirstAttribute(response);
       if (!attrptr)
       {
-       add_stringf(data->errors, "Missing first attribute \"attributes-charset (charset)\" in group operation-attributes-tag (RFC 2911 section 3.1.4).");
+       add_stringf(data->errors, "Missing first attribute \"attributes-charset (charset)\" in group operation-attributes-tag (RFC 8011 section 4.1.4).");
       }
       else
       {
        if (!ippGetName(attrptr) || ippGetValueTag(attrptr) != IPP_TAG_CHARSET || ippGetGroupTag(attrptr) != IPP_TAG_OPERATION || ippGetCount(attrptr) != 1 ||strcmp(ippGetName(attrptr), "attributes-charset"))
-         add_stringf(data->errors, "Bad first attribute \"%s (%s%s)\" in group %s, expected \"attributes-charset (charset)\" in group operation-attributes-tag (RFC 2911 section 3.1.4).", ippGetName(attrptr) ? ippGetName(attrptr) : "(null)", ippGetCount(attrptr) > 1 ? "1setOf " : "", ippTagString(ippGetValueTag(attrptr)), ippTagString(ippGetGroupTag(attrptr)));
+         add_stringf(data->errors, "Bad first attribute \"%s (%s%s)\" in group %s, expected \"attributes-charset (charset)\" in group operation-attributes-tag (RFC 8011 section 4.1.4).", ippGetName(attrptr) ? ippGetName(attrptr) : "(null)", ippGetCount(attrptr) > 1 ? "1setOf " : "", ippTagString(ippGetValueTag(attrptr)), ippTagString(ippGetGroupTag(attrptr)));
 
        attrptr = ippNextAttribute(response);
        if (!attrptr)
-         add_stringf(data->errors, "Missing second attribute \"attributes-natural-language (naturalLanguage)\" in group operation-attributes-tag (RFC 2911 section 3.1.4).");
+         add_stringf(data->errors, "Missing second attribute \"attributes-natural-language (naturalLanguage)\" in group operation-attributes-tag (RFC 8011 section 4.1.4).");
        else if (!ippGetName(attrptr) || ippGetValueTag(attrptr) != IPP_TAG_LANGUAGE || ippGetGroupTag(attrptr) != IPP_TAG_OPERATION || ippGetCount(attrptr) != 1 || strcmp(ippGetName(attrptr), "attributes-natural-language"))
-         add_stringf(data->errors, "Bad first attribute \"%s (%s%s)\" in group %s, expected \"attributes-natural-language (naturalLanguage)\" in group operation-attributes-tag (RFC 2911 section 3.1.4).", ippGetName(attrptr) ? ippGetName(attrptr) : "(null)", ippGetCount(attrptr) > 1 ? "1setOf " : "", ippTagString(ippGetValueTag(attrptr)), ippTagString(ippGetGroupTag(attrptr)));
+         add_stringf(data->errors, "Bad first attribute \"%s (%s%s)\" in group %s, expected \"attributes-natural-language (naturalLanguage)\" in group operation-attributes-tag (RFC 8011 section 4.1.4).", ippGetName(attrptr) ? ippGetName(attrptr) : "(null)", ippGetCount(attrptr) > 1 ? "1setOf " : "", ippTagString(ippGetValueTag(attrptr)), ippTagString(ippGetGroupTag(attrptr)));
       }
 
       if ((attrptr = ippFindAttribute(response, "status-message", IPP_TAG_ZERO)) != NULL)
@@ -1241,13 +1546,13 @@ do_test(_ipp_file_t      *f,            /* I - IPP data file */
                                                /* String value */
 
        if (ippGetValueTag(attrptr) != IPP_TAG_TEXT)
-         add_stringf(data->errors, "status-message (text(255)) has wrong value tag %s (RFC 2911 section 3.1.6.2).", ippTagString(ippGetValueTag(attrptr)));
+         add_stringf(data->errors, "status-message (text(255)) has wrong value tag %s (RFC 8011 section 4.1.6.2).", ippTagString(ippGetValueTag(attrptr)));
        if (ippGetGroupTag(attrptr) != IPP_TAG_OPERATION)
-         add_stringf(data->errors, "status-message (text(255)) has wrong group tag %s (RFC 2911 section 3.1.6.2).", ippTagString(ippGetGroupTag(attrptr)));
+         add_stringf(data->errors, "status-message (text(255)) has wrong group tag %s (RFC 8011 section 4.1.6.2).", ippTagString(ippGetGroupTag(attrptr)));
        if (ippGetCount(attrptr) != 1)
-         add_stringf(data->errors, "status-message (text(255)) has %d values (RFC 2911 section 3.1.6.2).", ippGetCount(attrptr));
+         add_stringf(data->errors, "status-message (text(255)) has %d values (RFC 8011 section 4.1.6.2).", ippGetCount(attrptr));
        if (status_message && strlen(status_message) > 255)
-         add_stringf(data->errors, "status-message (text(255)) has bad length %d (RFC 2911 section 3.1.6.2).", (int)strlen(status_message));
+         add_stringf(data->errors, "status-message (text(255)) has bad length %d (RFC 8011 section 4.1.6.2).", (int)strlen(status_message));
       }
 
       if ((attrptr = ippFindAttribute(response, "detailed-status-message",
@@ -1257,25 +1562,13 @@ do_test(_ipp_file_t      *f,            /* I - IPP data file */
                                                /* String value */
 
        if (ippGetValueTag(attrptr) != IPP_TAG_TEXT)
-         add_stringf(data->errors,
-                     "detailed-status-message (text(MAX)) has wrong "
-                     "value tag %s (RFC 2911 section 3.1.6.3).",
-                     ippTagString(ippGetValueTag(attrptr)));
+         add_stringf(data->errors, "detailed-status-message (text(MAX)) has wrong value tag %s (RFC 8011 section 4.1.6.3).", ippTagString(ippGetValueTag(attrptr)));
        if (ippGetGroupTag(attrptr) != IPP_TAG_OPERATION)
-         add_stringf(data->errors,
-                     "detailed-status-message (text(MAX)) has wrong "
-                     "group tag %s (RFC 2911 section 3.1.6.3).",
-                     ippTagString(ippGetGroupTag(attrptr)));
+         add_stringf(data->errors, "detailed-status-message (text(MAX)) has wrong group tag %s (RFC 8011 section 4.1.6.3).", ippTagString(ippGetGroupTag(attrptr)));
        if (ippGetCount(attrptr) != 1)
-         add_stringf(data->errors,
-                     "detailed-status-message (text(MAX)) has %d values"
-                     " (RFC 2911 section 3.1.6.3).",
-                     ippGetCount(attrptr));
+         add_stringf(data->errors, "detailed-status-message (text(MAX)) has %d values (RFC 8011 section 4.1.6.3).", ippGetCount(attrptr));
        if (detailed_status_message && strlen(detailed_status_message) > 1023)
-         add_stringf(data->errors,
-                     "detailed-status-message (text(MAX)) has bad "
-                     "length %d (RFC 2911 section 3.1.6.3).",
-                     (int)strlen(detailed_status_message));
+         add_stringf(data->errors, "detailed-status-message (text(MAX)) has bad length %d (RFC 8011 section 4.1.6.3).", (int)strlen(detailed_status_message));
       }
 
       a = cupsArrayNew((cups_array_func_t)strcmp, NULL);
@@ -1321,9 +1614,7 @@ do_test(_ipp_file_t      *f,              /* I - IPP data file */
          }
 
          if (out_of_order)
-           add_stringf(data->errors, "Attribute groups out of order (%s < %s)",
-                       ippTagString(ippGetGroupTag(attrptr)),
-                       ippTagString(group));
+           add_stringf(data->errors, "Attribute groups out of order (%s < %s)", ippTagString(ippGetGroupTag(attrptr)), ippTagString(group));
 
          if (ippGetGroupTag(attrptr) != IPP_TAG_ZERO)
            group = ippGetGroupTag(attrptr);
@@ -1334,9 +1625,8 @@ do_test(_ipp_file_t      *f,              /* I - IPP data file */
 
        if (ippGetName(attrptr))
        {
-         if (cupsArrayFind(a, (void *)ippGetName(attrptr)) && data->output < _CUPS_OUTPUT_LIST)
-           add_stringf(data->errors, "Duplicate \"%s\" attribute in %s group",
-                       ippGetName(attrptr), ippTagString(group));
+         if (cupsArrayFind(a, (void *)ippGetName(attrptr)) && data->output < IPPTOOL_OUTPUT_LIST)
+           add_stringf(data->errors, "Duplicate \"%s\" attribute in %s group", ippGetName(attrptr), ippTagString(group));
 
          cupsArrayAdd(a, (void *)ippGetName(attrptr));
        }
@@ -1349,14 +1639,21 @@ do_test(_ipp_file_t      *f,            /* I - IPP data file */
       * values...
       */
 
+      if (ippGetStatusCode(response) == IPP_STATUS_ERROR_BUSY && data->repeat_on_busy)
+      {
+        // Repeat on a server-error-busy status code...
+        status_ok   = 1;
+        repeat_test = 1;
+      }
+
       for (i = 0, status_ok = 0; i < data->num_statuses; i ++)
       {
        if (data->statuses[i].if_defined &&
-           !_ippVarsGet(vars, data->statuses[i].if_defined))
+           !_ippVarsGet(data->vars, data->statuses[i].if_defined))
          continue;
 
        if (data->statuses[i].if_not_defined &&
-           _ippVarsGet(vars, data->statuses[i].if_not_defined))
+           _ippVarsGet(data->vars, data->statuses[i].if_not_defined))
          continue;
 
        if (ippGetStatusCode(response) == data->statuses[i].status)
@@ -1367,7 +1664,7 @@ do_test(_ipp_file_t      *f,              /* I - IPP data file */
            repeat_test = 1;
 
          if (data->statuses[i].define_match)
-           _ippVarsSet(vars, data->statuses[i].define_match, "1");
+           _ippVarsSet(data->vars, data->statuses[i].define_match, "1");
        }
        else
        {
@@ -1376,7 +1673,7 @@ do_test(_ipp_file_t      *f,              /* I - IPP data file */
 
          if (data->statuses[i].define_no_match)
          {
-           _ippVarsSet(vars, data->statuses[i].define_no_match, "1");
+           _ippVarsSet(data->vars, data->statuses[i].define_no_match, "1");
            status_ok = 1;
          }
        }
@@ -1387,21 +1684,18 @@ do_test(_ipp_file_t      *f,            /* I - IPP data file */
        for (i = 0; i < data->num_statuses; i ++)
        {
          if (data->statuses[i].if_defined &&
-             !_ippVarsGet(vars, data->statuses[i].if_defined))
+             !_ippVarsGet(data->vars, data->statuses[i].if_defined))
            continue;
 
          if (data->statuses[i].if_not_defined &&
-             _ippVarsGet(vars, data->statuses[i].if_not_defined))
+             _ippVarsGet(data->vars, data->statuses[i].if_not_defined))
            continue;
 
          if (!data->statuses[i].repeat_match || repeat_count >= data->statuses[i].repeat_limit)
-           add_stringf(data->errors, "EXPECTED: STATUS %s (got %s)",
-                       ippErrorString(data->statuses[i].status),
-                       ippErrorString(cupsLastError()));
+           add_stringf(data->errors, "EXPECTED: STATUS %s (got %s)", ippErrorString(data->statuses[i].status), ippErrorString(cupsLastError()));
        }
 
-       if ((attrptr = ippFindAttribute(response, "status-message",
-                                       IPP_TAG_TEXT)) != NULL)
+       if ((attrptr = ippFindAttribute(response, "status-message", IPP_TAG_TEXT)) != NULL)
          add_stringf(data->errors, "status-message=\"%s\"", ippGetString(attrptr, 0, NULL));
       }
 
@@ -1409,11 +1703,11 @@ do_test(_ipp_file_t      *f,            /* I - IPP data file */
       {
        ipp_attribute_t *group_found;   /* Found parent attribute for group tests */
 
-       if (expect->if_defined && !_ippVarsGet(vars, expect->if_defined))
+       if (expect->if_defined && !_ippVarsGet(data->vars, expect->if_defined))
          continue;
 
        if (expect->if_not_defined &&
-           _ippVarsGet(vars, expect->if_not_defined))
+           _ippVarsGet(data->vars, expect->if_not_defined))
          continue;
 
        if ((found = ippFindAttribute(response, expect->name, IPP_TAG_ZERO)) != NULL && expect->in_group && expect->in_group != ippGetGroupTag(found))
@@ -1441,11 +1735,12 @@ do_test(_ipp_file_t      *f,            /* I - IPP data file */
 
          if ((found && expect->not_expect) ||
              (!found && !(expect->not_expect || expect->optional)) ||
-             (found && !expect_matches(expect, ippGetValueTag(found))) ||
-             (group_found && expect->in_group && ippGetGroupTag(group_found) != expect->in_group))
+             (found && !expect_matches(expect, found)) ||
+             (group_found && expect->in_group && ippGetGroupTag(group_found) != expect->in_group) ||
+             (expect->with_distinct && !with_distinct_values(NULL, found)))
          {
            if (expect->define_no_match)
-             _ippVarsSet(vars, expect->define_no_match, "1");
+             _ippVarsSet(data->vars, expect->define_no_match, "1");
            else if (!expect->define_match && !expect->define_value)
            {
              if (found && expect->not_expect && !expect->with_value && !expect->with_value_from)
@@ -1454,7 +1749,7 @@ do_test(_ipp_file_t      *f,              /* I - IPP data file */
                add_stringf(data->errors, "EXPECTED: %s", expect->name);
              else if (found)
              {
-               if (!expect_matches(expect, ippGetValueTag(found)))
+               if (!expect_matches(expect, found))
                  add_stringf(data->errors, "EXPECTED: %s OF-TYPE %s (got %s)",
                              expect->name, expect->of_type,
                              ippTagString(ippGetValueTag(found)));
@@ -1463,6 +1758,9 @@ do_test(_ipp_file_t      *f,              /* I - IPP data file */
                  add_stringf(data->errors, "EXPECTED: %s IN-GROUP %s (got %s).",
                              expect->name, ippTagString(expect->in_group),
                              ippTagString(ippGetGroupTag(group_found)));
+
+                if (expect->with_distinct)
+                  with_distinct_values(data->errors, found);
              }
            }
 
@@ -1477,7 +1775,7 @@ do_test(_ipp_file_t      *f,              /* I - IPP data file */
          if (found && expect->with_value_from && !with_value_from(NULL, ippFindAttribute(response, expect->with_value_from, IPP_TAG_ZERO), found, buffer, sizeof(buffer)))
          {
            if (expect->define_no_match)
-             _ippVarsSet(vars, expect->define_no_match, "1");
+             _ippVarsSet(data->vars, expect->define_no_match, "1");
            else if (!expect->define_match && !expect->define_value && ((!expect->repeat_match && !expect->repeat_no_match) || repeat_count >= expect->repeat_limit))
            {
              add_stringf(data->errors, "EXPECTED: %s WITH-VALUES-FROM %s", expect->name, expect->with_value_from);
@@ -1493,11 +1791,11 @@ do_test(_ipp_file_t      *f,            /* I - IPP data file */
          else if (found && !with_value(data, NULL, expect->with_value, expect->with_flags, found, buffer, sizeof(buffer)))
          {
            if (expect->define_no_match)
-             _ippVarsSet(vars, expect->define_no_match, "1");
+             _ippVarsSet(data->vars, expect->define_no_match, "1");
            else if (!expect->define_match && !expect->define_value &&
                     !expect->repeat_match && (!expect->repeat_no_match || repeat_count >= expect->repeat_limit))
            {
-             if (expect->with_flags & _CUPS_WITH_REGEX)
+             if (expect->with_flags & IPPTOOL_WITH_REGEX)
                add_stringf(data->errors, "EXPECTED: %s %s /%s/", expect->name, with_flags_string(expect->with_flags), expect->with_value);
              else
                add_stringf(data->errors, "EXPECTED: %s %s \"%s\"", expect->name, with_flags_string(expect->with_flags), expect->with_value);
@@ -1515,11 +1813,10 @@ do_test(_ipp_file_t      *f,            /* I - IPP data file */
          if (found && expect->count > 0 && ippGetCount(found) != expect->count)
          {
            if (expect->define_no_match)
-             _ippVarsSet(vars, expect->define_no_match, "1");
+             _ippVarsSet(data->vars, expect->define_no_match, "1");
            else if (!expect->define_match && !expect->define_value)
            {
-             add_stringf(data->errors, "EXPECTED: %s COUNT %d (got %d)", expect->name,
-                         expect->count, ippGetCount(found));
+             add_stringf(data->errors, "EXPECTED: %s COUNT %d (got %d)", expect->name, expect->count, ippGetCount(found));
            }
 
            if (expect->repeat_no_match &&
@@ -1537,19 +1834,13 @@ do_test(_ipp_file_t      *f,            /* I - IPP data file */
            if (!attrptr || ippGetCount(attrptr) != ippGetCount(found))
            {
              if (expect->define_no_match)
-               _ippVarsSet(vars, expect->define_no_match, "1");
+               _ippVarsSet(data->vars, expect->define_no_match, "1");
              else if (!expect->define_match && !expect->define_value)
              {
                if (!attrptr)
-                 add_stringf(data->errors,
-                             "EXPECTED: %s (%d values) SAME-COUNT-AS %s "
-                             "(not returned)", expect->name,
-                             ippGetCount(found), expect->same_count_as);
+                 add_stringf(data->errors, "EXPECTED: %s (%d values) SAME-COUNT-AS %s (not returned)", expect->name, ippGetCount(found), expect->same_count_as);
                else if (ippGetCount(attrptr) != ippGetCount(found))
-                 add_stringf(data->errors,
-                             "EXPECTED: %s (%d values) SAME-COUNT-AS %s "
-                             "(%d values)", expect->name, ippGetCount(found),
-                             expect->same_count_as, ippGetCount(attrptr));
+                 add_stringf(data->errors, "EXPECTED: %s (%d values) SAME-COUNT-AS %s (%d values)", expect->name, ippGetCount(found), expect->same_count_as, ippGetCount(attrptr));
              }
 
              if (expect->repeat_no_match &&
@@ -1560,8 +1851,11 @@ do_test(_ipp_file_t      *f,             /* I - IPP data file */
            }
          }
 
+         if (found && expect->display_match && (data->output == IPPTOOL_OUTPUT_TEST || (data->output == IPPTOOL_OUTPUT_PLIST && data->outfile != cupsFileStdout())))
+           cupsFilePrintf(cupsFileStdout(), "\n%s\n\n", expect->display_match);
+
          if (found && expect->define_match)
-           _ippVarsSet(vars, expect->define_match, "1");
+           _ippVarsSet(data->vars, expect->define_match, "1");
 
          if (found && expect->define_value)
          {
@@ -1618,7 +1912,7 @@ do_test(_ipp_file_t      *f,              /* I - IPP data file */
              }
            }
 
-           _ippVarsSet(vars, expect->define_value, buffer);
+           _ippVarsSet(data->vars, expect->define_value, buffer);
          }
 
          if (found && expect->repeat_match &&
@@ -1635,7 +1929,7 @@ do_test(_ipp_file_t      *f,              /* I - IPP data file */
 
     if (repeat_test)
     {
-      if (data->output == _CUPS_OUTPUT_TEST || (data->output == _CUPS_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
+      if (data->output == IPPTOOL_OUTPUT_TEST || (data->output == IPPTOOL_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
       {
        cupsFilePrintf(cupsFileStdout(), "%04d]\n", repeat_count);
 \
@@ -1650,7 +1944,7 @@ do_test(_ipp_file_t      *f,              /* I - IPP data file */
              {
                if (!strcmp(data->displayed[i], attrname))
                {
-                 print_attr(cupsFileStdout(), _CUPS_OUTPUT_TEST, attrptr, NULL);
+                 print_attr(cupsFileStdout(), IPPTOOL_OUTPUT_TEST, attrptr, NULL);
                  break;
                }
              }
@@ -1659,7 +1953,7 @@ do_test(_ipp_file_t      *f,              /* I - IPP data file */
        }
       }
 
-      if (data->output == _CUPS_OUTPUT_TEST || (data->output == _CUPS_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
+      if (data->output == IPPTOOL_OUTPUT_TEST || (data->output == IPPTOOL_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
       {
        cupsFilePrintf(cupsFileStdout(), "    %-68.68s [", data->name);
       }
@@ -1682,7 +1976,7 @@ do_test(_ipp_file_t      *f,              /* I - IPP data file */
   else
     data->fail_count ++;
 
-  if (data->output == _CUPS_OUTPUT_PLIST)
+  if (data->output == IPPTOOL_OUTPUT_PLIST)
   {
     cupsFilePuts(data->outfile, "<key>Successful</key>\n");
     cupsFilePuts(data->outfile, data->prev_pass ? "<true />\n" : "<false />\n");
@@ -1698,7 +1992,7 @@ do_test(_ipp_file_t      *f,              /* I - IPP data file */
     cupsFilePuts(data->outfile, "</dict>\n");
     cupsFilePuts(data->outfile, "</array>\n");
   }
-  else if (data->output == _CUPS_OUTPUT_IPPSERVER && response)
+  else if (data->output == IPPTOOL_OUTPUT_IPPSERVER && response)
   {
     for (attrptr = ippFirstAttribute(response); attrptr; attrptr = ippNextAttribute(response))
     {
@@ -1709,7 +2003,7 @@ do_test(_ipp_file_t      *f,              /* I - IPP data file */
     }
   }
 
-  if (data->output == _CUPS_OUTPUT_TEST || (data->output == _CUPS_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
+  if (data->output == IPPTOOL_OUTPUT_TEST || (data->output == IPPTOOL_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
   {
     cupsFilePuts(cupsFileStdout(), data->prev_pass ? "PASS]\n" : "FAIL]\n");
 
@@ -1721,14 +2015,14 @@ do_test(_ipp_file_t      *f,            /* I - IPP data file */
       if (data->verbosity && response)
       {
        for (attrptr = ippFirstAttribute(response); attrptr; attrptr = ippNextAttribute(response))
-         print_attr(cupsFileStdout(), _CUPS_OUTPUT_TEST, attrptr, NULL);
+         print_attr(cupsFileStdout(), IPPTOOL_OUTPUT_TEST, attrptr, NULL);
       }
     }
   }
-  else if (!data->prev_pass && data->output != _CUPS_OUTPUT_QUIET)
+  else if (!data->prev_pass && data->output != IPPTOOL_OUTPUT_QUIET)
     fprintf(stderr, "%s\n", cupsLastErrorString());
 
-  if (data->prev_pass && data->output >= _CUPS_OUTPUT_LIST && !data->verbosity && data->num_displayed > 0)
+  if (data->prev_pass && data->output >= IPPTOOL_OUTPUT_LIST && !data->verbosity && data->num_displayed > 0)
   {
     size_t     width;                  /* Length of value */
 
@@ -1746,7 +2040,7 @@ do_test(_ipp_file_t      *f,              /* I - IPP data file */
       }
     }
 
-    if (data->output == _CUPS_OUTPUT_CSV)
+    if (data->output == IPPTOOL_OUTPUT_CSV)
       print_csv(data, NULL, NULL, data->num_displayed, data->displayed, widths);
     else
       print_line(data, NULL, NULL, data->num_displayed, data->displayed, widths);
@@ -1760,10 +2054,10 @@ do_test(_ipp_file_t      *f,            /* I - IPP data file */
 
       if (attrptr)
       {
-       if (data->output == _CUPS_OUTPUT_CSV)
-         print_csv(data, response, attrptr, data->num_displayed, data->displayed, widths);
+       if (data->output == IPPTOOL_OUTPUT_CSV)
+         attrptr = print_csv(data, response, attrptr, data->num_displayed, data->displayed, widths);
        else
-         print_line(data, response, attrptr, data->num_displayed, data->displayed, widths);
+         attrptr = print_line(data, response, attrptr, data->num_displayed, data->displayed, widths);
 
        while (attrptr && ippGetGroupTag(attrptr) > IPP_TAG_OPERATION)
          attrptr = ippNextAttribute(response);
@@ -1772,7 +2066,7 @@ do_test(_ipp_file_t      *f,              /* I - IPP data file */
   }
   else if (!data->prev_pass)
   {
-    if (data->output == _CUPS_OUTPUT_PLIST)
+    if (data->output == IPPTOOL_OUTPUT_PLIST)
     {
       cupsFilePuts(data->outfile, "<key>Errors</key>\n");
       cupsFilePuts(data->outfile, "<array>\n");
@@ -1785,7 +2079,7 @@ do_test(_ipp_file_t      *f,              /* I - IPP data file */
       cupsFilePuts(data->outfile, "</array>\n");
     }
 
-    if (data->output == _CUPS_OUTPUT_TEST || (data->output == _CUPS_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
+    if (data->output == IPPTOOL_OUTPUT_TEST || (data->output == IPPTOOL_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
     {
       for (error = (char *)cupsArrayFirst(data->errors);
           error;
@@ -1794,7 +2088,7 @@ do_test(_ipp_file_t      *f,              /* I - IPP data file */
     }
   }
 
-  if (data->num_displayed > 0 && !data->verbosity && response && (data->output == _CUPS_OUTPUT_TEST || (data->output == _CUPS_OUTPUT_PLIST && data->outfile != cupsFileStdout())))
+  if (data->num_displayed > 0 && !data->verbosity && response && (data->output == IPPTOOL_OUTPUT_TEST || (data->output == IPPTOOL_OUTPUT_PLIST && data->outfile != cupsFileStdout())))
   {
     for (attrptr = ippFirstAttribute(response); attrptr; attrptr = ippNextAttribute(response))
     {
@@ -1814,7 +2108,13 @@ do_test(_ipp_file_t      *f,             /* I - IPP data file */
 
   skip_error:
 
-  if (data->output == _CUPS_OUTPUT_PLIST)
+  if (data->monitor_thread)
+  {
+    data->monitor_done = 1;
+    _cupsThreadWait(data->monitor_thread);
+  }
+
+  if (data->output == IPPTOOL_OUTPUT_PLIST)
     cupsFilePuts(data->outfile, "</dict>\n");
 
   ippDelete(response);
@@ -1822,36 +2122,25 @@ do_test(_ipp_file_t      *f,            /* I - IPP data file */
 
   for (i = 0; i < data->num_statuses; i ++)
   {
-    if (data->statuses[i].if_defined)
-      free(data->statuses[i].if_defined);
-    if (data->statuses[i].if_not_defined)
-      free(data->statuses[i].if_not_defined);
-    if (data->statuses[i].define_match)
-      free(data->statuses[i].define_match);
-    if (data->statuses[i].define_no_match)
-      free(data->statuses[i].define_no_match);
+    free(data->statuses[i].if_defined);
+    free(data->statuses[i].if_not_defined);
+    free(data->statuses[i].define_match);
+    free(data->statuses[i].define_no_match);
   }
   data->num_statuses = 0;
 
   for (i = data->num_expects, expect = data->expects; i > 0; i --, expect ++)
   {
     free(expect->name);
-    if (expect->of_type)
-      free(expect->of_type);
-    if (expect->same_count_as)
-      free(expect->same_count_as);
-    if (expect->if_defined)
-      free(expect->if_defined);
-    if (expect->if_not_defined)
-      free(expect->if_not_defined);
-    if (expect->with_value)
-      free(expect->with_value);
-    if (expect->define_match)
-      free(expect->define_match);
-    if (expect->define_no_match)
-      free(expect->define_no_match);
-    if (expect->define_value)
-      free(expect->define_value);
+    free(expect->of_type);
+    free(expect->same_count_as);
+    free(expect->if_defined);
+    free(expect->if_not_defined);
+    free(expect->with_value);
+    free(expect->define_match);
+    free(expect->define_no_match);
+    free(expect->define_value);
+    free(expect->display_match);
   }
   data->num_expects = 0;
 
@@ -1859,6 +2148,24 @@ do_test(_ipp_file_t      *f,             /* I - IPP data file */
     free(data->displayed[i]);
   data->num_displayed = 0;
 
+  free(data->monitor_uri);
+  data->monitor_uri = NULL;
+
+  for (i = data->num_monitor_expects, expect = data->monitor_expects; i > 0; i --, expect ++)
+  {
+    free(expect->name);
+    free(expect->of_type);
+    free(expect->same_count_as);
+    free(expect->if_defined);
+    free(expect->if_not_defined);
+    free(expect->with_value);
+    free(expect->define_match);
+    free(expect->define_no_match);
+    free(expect->define_value);
+    free(expect->display_match);
+  }
+  data->num_monitor_expects = 0;
+
   return (data->ignore_errors || data->prev_pass);
 }
 
@@ -1868,9 +2175,8 @@ do_test(_ipp_file_t      *f,              /* I - IPP data file */
  */
 
 static int                             /* O - 1 on success, 0 on failure */
-do_tests(const char       *testfile,   /* I - Test file to use */
-         _ipp_vars_t      *vars,       /* I - Variables */
-         _cups_testdata_t *data)       /* I - Test data */
+do_tests(const char     *testfile,     /* I - Test file to use */
+         ipptool_test_t *data)         /* I - Test data */
 {
   http_encryption_t encryption;                /* Encryption mode */
 
@@ -1879,14 +2185,14 @@ do_tests(const char       *testfile,    /* I - Test file to use */
   * Connect to the printer/server...
   */
 
-  if (!_cups_strcasecmp(vars->scheme, "https") || !_cups_strcasecmp(vars->scheme, "ipps"))
+  if (!_cups_strcasecmp(data->vars->scheme, "https") || !_cups_strcasecmp(data->vars->scheme, "ipps") || data->vars->port == 443)
     encryption = HTTP_ENCRYPTION_ALWAYS;
   else
     encryption = data->encryption;
 
-  if ((data->http = httpConnect2(vars->host, vars->port, NULL, data->family, encryption, 1, 30000, NULL)) == NULL)
+  if ((data->http = httpConnect2(data->vars->host, data->vars->port, NULL, data->family, encryption, 1, 30000, NULL)) == NULL)
   {
-    print_fatal_error(data, "Unable to connect to \"%s\" on port %d - %s", vars->host, vars->port, cupsLastErrorString());
+    print_fatal_error(data, "Unable to connect to \"%s\" on port %d - %s", data->vars->host, data->vars->port, cupsLastErrorString());
     return (0);
   }
 
@@ -1903,7 +2209,7 @@ do_tests(const char       *testfile,      /* I - Test file to use */
   * Run tests...
   */
 
-  _ippFileParse(vars, testfile, (void *)data);
+  _ippFileParse(data->vars, testfile, (void *)data);
 
  /*
   * Close connection and return...
@@ -1922,7 +2228,7 @@ do_tests(const char       *testfile,      /* I - Test file to use */
 
 static int                             /* O - 1 to continue, 0 to stop */
 error_cb(_ipp_file_t      *f,          /* I - IPP file data */
-         _cups_testdata_t *data,       /* I - Test data */
+         ipptool_test_t *data, /* I - Test data */
          const char       *error)      /* I - Error message */
 {
   (void)f;
@@ -1939,13 +2245,18 @@ error_cb(_ipp_file_t      *f,           /* I - IPP file data */
 
 static int                             /* O - 1 if matches, 0 otherwise */
 expect_matches(
-    _cups_expect_t *expect,            /* I - Expected attribute */
-    ipp_tag_t      value_tag)          /* I - Value tag for attribute */
+    ipptool_expect_t *expect,          /* I - Expected attribute */
+    ipp_attribute_t  *attr)            /* I - Attribute */
 {
-  int  match;                          /* Match? */
-  char *of_type,                       /* Type name to match */
-       *next,                          /* Next name to match */
-       sep;                            /* Separator character */
+  int          i,                      /* Looping var */
+               count,                  /* Number of values */
+               match;                  /* Match? */
+  char         *of_type,               /* Type name to match */
+               *paren,                 /* Pointer to opening parenthesis */
+               *next,                  /* Next name to match */
+               sep;                    /* Separator character */
+  ipp_tag_t    value_tag;              /* Syntax/value tag */
+  int          lower, upper;           /* Lower and upper bounds for syntax */
 
 
  /*
@@ -1960,6 +2271,9 @@ expect_matches(
   * types separated by "," or "|"...
   */
 
+  value_tag = ippGetValueTag(attr);
+  count     = ippGetCount(attr);
+
   for (of_type = expect->of_type, match = 0; !match && *of_type; of_type = next)
   {
    /*
@@ -1975,19 +2289,154 @@ expect_matches(
     * Support some meta-types to make it easier to write the test file.
     */
 
+    if ((paren = strchr(of_type, '(')) != NULL)
+    {
+      char *ptr;                       // Pointer into syntax string
+
+      *paren = '\0';
+
+      if (!strncmp(paren + 1, "MIN:", 4))
+      {
+        lower = INT_MIN;
+        ptr   = paren + 5;
+      }
+      else if ((ptr = strchr(paren + 1, ':')) != NULL)
+      {
+        lower = atoi(paren + 1);
+      }
+      else
+      {
+        lower = 0;
+        ptr   = paren + 1;
+      }
+
+      if (!strcmp(ptr, "MAX)"))
+        upper = INT_MAX;
+      else
+        upper = atoi(ptr);
+    }
+    else
+    {
+      lower = INT_MIN;
+      upper = INT_MAX;
+    }
+
     if (!strcmp(of_type, "text"))
-      match = value_tag == IPP_TAG_TEXTLANG || value_tag == IPP_TAG_TEXT;
+    {
+      if (upper == INT_MAX)
+        upper = 1023;
+
+      if (value_tag == IPP_TAG_TEXTLANG || value_tag == IPP_TAG_TEXT)
+      {
+        for (i = 0; i < count; i ++)
+       {
+         if (strlen(ippGetString(attr, i, NULL)) > (size_t)upper)
+           break;
+       }
+
+       match = (i == count);
+      }
+    }
     else if (!strcmp(of_type, "name"))
-      match = value_tag == IPP_TAG_NAMELANG || value_tag == IPP_TAG_NAME;
+    {
+      if (upper == INT_MAX)
+        upper = 255;
+
+      if (value_tag == IPP_TAG_NAMELANG || value_tag == IPP_TAG_NAME)
+      {
+        for (i = 0; i < count; i ++)
+       {
+         if (strlen(ippGetString(attr, i, NULL)) > (size_t)upper)
+           break;
+       }
+
+       match = (i == count);
+      }
+    }
     else if (!strcmp(of_type, "collection"))
+    {
       match = value_tag == IPP_TAG_BEGIN_COLLECTION;
-    else
-      match = value_tag == ippTagValue(of_type);
+    }
+    else if (value_tag == ippTagValue(of_type))
+    {
+      switch (value_tag)
+      {
+        case IPP_TAG_KEYWORD :
+        case IPP_TAG_URI :
+            if (upper == INT_MAX)
+            {
+              if (value_tag == IPP_TAG_KEYWORD)
+               upper = 255;
+             else
+               upper = 1023;
+           }
+
+           for (i = 0; i < count; i ++)
+           {
+             if (strlen(ippGetString(attr, i, NULL)) > (size_t)upper)
+               break;
+           }
+
+           match = (i == count);
+           break;
+
+        case IPP_TAG_STRING :
+            if (upper == INT_MAX)
+             upper = 1023;
+
+           for (i = 0; i < count; i ++)
+           {
+             int       datalen;        // Length of octetString value
+
+             ippGetOctetString(attr, i, &datalen);
+
+             if (datalen > upper)
+               break;
+           }
+
+           match = (i == count);
+           break;
+
+       case IPP_TAG_INTEGER :
+           for (i = 0; i < count; i ++)
+           {
+             int value = ippGetInteger(attr, i);
+                                       // Integer value
+
+             if (value < lower || value > upper)
+               break;
+           }
+
+           match = (i == count);
+           break;
+
+       case IPP_TAG_RANGE :
+           for (i = 0; i < count; i ++)
+           {
+             int vupper, vlower = ippGetRange(attr, i, &vupper);
+                                       // Range value
+
+             if (vlower < lower || vlower > upper || vupper < lower || vupper > upper)
+               break;
+           }
+
+           match = (i == count);
+           break;
+
+       default :
+           // No other constraints, so this is a match
+           match = 1;
+           break;
+      }
+    }
 
    /*
-    * Restore the separator if we have one...
+    * Restore the separators if we have them...
     */
 
+    if (paren)
+      *paren = '(';
+
     if (sep)
       *next++ = sep;
   }
@@ -2047,6 +2496,21 @@ get_filename(const char *testfile,       /* I - Current test file */
       dstptr = dst; /* Should never happen */
 
     strlcpy(dstptr, src, dstsize - (size_t)(dstptr - dst));
+
+#if _WIN32
+    if (_access(dst, 0))
+    {
+     /*
+      * Not available relative to the testfile, see if it can be found on the
+      * desktop...
+      */
+      const char *userprofile = getenv("USERPROFILE");
+                                       /* User home directory */
+
+      if (userprofile)
+        snprintf(dst, dstsize, "%s/Desktop/%s", userprofile, src);
+    }
+#endif /* _WIN32 */
   }
 
   return (dst);
@@ -2075,7 +2539,7 @@ get_string(ipp_attribute_t *attr, /* I - IPP attribute */
 
   value = ippGetString(attr, element, NULL);
 
-  if (flags & _CUPS_WITH_HOSTNAME)
+  if (flags & IPPTOOL_WITH_HOSTNAME)
   {
     if (httpSeparateURI(HTTP_URI_CODING_ALL, value, scheme, sizeof(scheme), userpass, sizeof(userpass), buffer, (int)bufsize, &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK)
       buffer[0] = '\0';
@@ -2086,14 +2550,14 @@ get_string(ipp_attribute_t *attr,       /* I - IPP attribute */
 
     return (buffer);
   }
-  else if (flags & _CUPS_WITH_RESOURCE)
+  else if (flags & IPPTOOL_WITH_RESOURCE)
   {
     if (httpSeparateURI(HTTP_URI_CODING_ALL, value, scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, buffer, (int)bufsize) < HTTP_URI_STATUS_OK)
       buffer[0] = '\0';
 
     return (buffer);
   }
-  else if (flags & _CUPS_WITH_SCHEME)
+  else if (flags & IPPTOOL_WITH_SCHEME)
   {
     if (httpSeparateURI(HTTP_URI_CODING_ALL, value, buffer, (int)bufsize, userpass, sizeof(userpass), hostname, sizeof(hostname), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK)
       buffer[0] = '\0';
@@ -2124,56 +2588,492 @@ get_string(ipp_attribute_t *attr,      /* I - IPP attribute */
       httpAssembleURI(HTTP_URI_CODING_ALL, buffer, (int)bufsize, scheme, userpass, hostname, port, resource);
     }
 
-    return (buffer);
-  }
-  else
-    return (value);
-}
+    return (buffer);
+  }
+  else
+    return (value);
+}
+
+
+/*
+ * 'init_data()' - Initialize test data.
+ */
+
+static void
+init_data(ipptool_test_t *data)        /* I - Data */
+{
+  memset(data, 0, sizeof(ipptool_test_t));
+
+  data->output       = IPPTOOL_OUTPUT_LIST;
+  data->outfile      = cupsFileStdout();
+  data->family       = AF_UNSPEC;
+  data->def_transfer = IPPTOOL_TRANSFER_AUTO;
+  data->def_version  = 11;
+  data->errors       = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free);
+  data->pass         = 1;
+  data->prev_pass    = 1;
+  data->request_id   = (CUPS_RAND() % 1000) * 137;
+  data->show_header  = 1;
+}
+
+
+/*
+ * 'iso_date()' - Return an ISO 8601 date/time string for the given IPP dateTime
+ *                value.
+ */
+
+static char *                          /* O - ISO 8601 date/time string */
+iso_date(const ipp_uchar_t *date)      /* I - IPP (RFC 1903) date/time value */
+{
+  time_t       utctime;                /* UTC time since 1970 */
+  struct tm    utcdate;                /* UTC date/time */
+  static char  buffer[255];            /* String buffer */
+
+
+  utctime = ippDateToTime(date);
+  gmtime_r(&utctime, &utcdate);
+
+  snprintf(buffer, sizeof(buffer), "%04d-%02d-%02dT%02d:%02d:%02dZ",
+          utcdate.tm_year + 1900, utcdate.tm_mon + 1, utcdate.tm_mday,
+          utcdate.tm_hour, utcdate.tm_min, utcdate.tm_sec);
+
+  return (buffer);
+}
+
+
+/*
+ * 'parse_monitor_printer_state()' - Parse the MONITOR-PRINTER-STATE directive.
+ *
+ * MONITOR-PRINTER-STATE [printer-uri] {
+ *     DELAY nnn
+ *     EXPECT attribute-name ...
+ * }
+ */
+
+static int                             /* O - 1 to continue, 0 to stop */
+parse_monitor_printer_state(
+    _ipp_file_t    *f,                 /* I - IPP file data */
+    ipptool_test_t *data)              /* I - Test data */
+{
+  char token[256],                     /* Token string */
+       name[1024],                     /* Name string */
+       temp[1024],                     /* Temporary string */
+       value[1024],                    /* Value string */
+       *ptr;                           /* Pointer into value */
+
+
+  if (!_ippFileReadToken(f, temp, sizeof(temp)))
+  {
+    print_fatal_error(data, "Missing printer URI on line %d of \"%s\".", f->linenum, f->filename);
+    return (0);
+  }
+
+  if (strcmp(temp, "{"))
+  {
+    // Got a printer URI so copy it...
+    _ippVarsExpand(data->vars, value, temp, sizeof(value));
+    data->monitor_uri = strdup(value);
+
+    // Then see if we have an opening brace...
+    if (!_ippFileReadToken(f, temp, sizeof(temp)) || strcmp(temp, "{"))
+    {
+      print_fatal_error(data, "Missing opening brace on line %d of \"%s\".", f->linenum, f->filename);
+      return (0);
+    }
+  }
+  else
+  {
+    // Use the default printer URI...
+    data->monitor_uri = strdup(data->vars->uri);
+  }
+
+  // Loop until we get a closing brace...
+  while (_ippFileReadToken(f, token, sizeof(token)))
+  {
+    if (_cups_strcasecmp(token, "COUNT") &&
+       _cups_strcasecmp(token, "DEFINE-MATCH") &&
+       _cups_strcasecmp(token, "DEFINE-NO-MATCH") &&
+       _cups_strcasecmp(token, "DEFINE-VALUE") &&
+       _cups_strcasecmp(token, "DISPLAY-MATCH") &&
+       _cups_strcasecmp(token, "IF-DEFINED") &&
+       _cups_strcasecmp(token, "IF-NOT-DEFINED") &&
+       _cups_strcasecmp(token, "IN-GROUP") &&
+       _cups_strcasecmp(token, "OF-TYPE") &&
+       _cups_strcasecmp(token, "WITH-DISTINCT-VALUES") &&
+       _cups_strcasecmp(token, "WITH-VALUE"))
+      data->last_expect = NULL;
+
+    if (!strcmp(token, "}"))
+      return (1);
+    else if (!_cups_strcasecmp(token, "EXPECT"))
+    {
+     /*
+      * Expected attributes...
+      */
+
+      if (data->num_monitor_expects >= (int)(sizeof(data->monitor_expects) / sizeof(data->monitor_expects[0])))
+      {
+       print_fatal_error(data, "Too many EXPECT's on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+
+      if (!_ippFileReadToken(f, name, sizeof(name)))
+      {
+       print_fatal_error(data, "Missing EXPECT name on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+
+      data->last_expect = data->monitor_expects + data->num_monitor_expects;
+      data->num_monitor_expects ++;
+
+      memset(data->last_expect, 0, sizeof(ipptool_expect_t));
+      data->last_expect->repeat_limit = 1000;
+
+      if (name[0] == '!')
+      {
+       data->last_expect->not_expect = 1;
+       data->last_expect->name       = strdup(name + 1);
+      }
+      else if (name[0] == '?')
+      {
+       data->last_expect->optional = 1;
+       data->last_expect->name     = strdup(name + 1);
+      }
+      else
+       data->last_expect->name = strdup(name);
+    }
+    else if (!_cups_strcasecmp(token, "COUNT"))
+    {
+      int      count;                  /* Count value */
+
+      if (!_ippFileReadToken(f, temp, sizeof(temp)))
+      {
+       print_fatal_error(data, "Missing COUNT number on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+
+      if ((count = atoi(temp)) <= 0)
+      {
+       print_fatal_error(data, "Bad COUNT \"%s\" on line %d of \"%s\".", temp, f->linenum, f->filename);
+       return (0);
+      }
+
+      if (data->last_expect)
+      {
+       data->last_expect->count = count;
+      }
+      else
+      {
+       print_fatal_error(data, "COUNT without a preceding EXPECT on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+    }
+    else if (!_cups_strcasecmp(token, "DEFINE-MATCH"))
+    {
+      if (!_ippFileReadToken(f, temp, sizeof(temp)))
+      {
+       print_fatal_error(data, "Missing DEFINE-MATCH variable on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+
+      if (data->last_expect)
+      {
+       data->last_expect->define_match = strdup(temp);
+      }
+      else
+      {
+       print_fatal_error(data, "DEFINE-MATCH without a preceding EXPECT on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+    }
+    else if (!_cups_strcasecmp(token, "DEFINE-NO-MATCH"))
+    {
+      if (!_ippFileReadToken(f, temp, sizeof(temp)))
+      {
+       print_fatal_error(data, "Missing DEFINE-NO-MATCH variable on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+
+      if (data->last_expect)
+      {
+       data->last_expect->define_no_match = strdup(temp);
+      }
+      else
+      {
+       print_fatal_error(data, "DEFINE-NO-MATCH without a preceding EXPECT on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+    }
+    else if (!_cups_strcasecmp(token, "DEFINE-VALUE"))
+    {
+      if (!_ippFileReadToken(f, temp, sizeof(temp)))
+      {
+       print_fatal_error(data, "Missing DEFINE-VALUE variable on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+
+      if (data->last_expect)
+      {
+       data->last_expect->define_value = strdup(temp);
+      }
+      else
+      {
+       print_fatal_error(data, "DEFINE-VALUE without a preceding EXPECT on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+    }
+    else if (!_cups_strcasecmp(token, "DISPLAY-MATCH"))
+    {
+      if (!_ippFileReadToken(f, temp, sizeof(temp)))
+      {
+       print_fatal_error(data, "Missing DISPLAY-MATCH message on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+
+      if (data->last_expect)
+      {
+       data->last_expect->display_match = strdup(temp);
+      }
+      else
+      {
+       print_fatal_error(data, "DISPLAY-MATCH without a preceding EXPECT on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+    }
+    else if (!_cups_strcasecmp(token, "DELAY"))
+    {
+     /*
+      * Delay before operation...
+      */
+
+      double dval;                    /* Delay value */
+
+      if (!_ippFileReadToken(f, temp, sizeof(temp)))
+      {
+       print_fatal_error(data, "Missing DELAY value on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+
+      _ippVarsExpand(data->vars, value, temp, sizeof(value));
+
+      if ((dval = _cupsStrScand(value, &ptr, localeconv())) < 0.0 || (*ptr && *ptr != ','))
+      {
+       print_fatal_error(data, "Bad DELAY value \"%s\" on line %d of \"%s\".", value, f->linenum, f->filename);
+       return (0);
+      }
+
+      data->monitor_delay = (useconds_t)(1000000.0 * dval);
+
+      if (*ptr == ',')
+      {
+       if ((dval = _cupsStrScand(ptr + 1, &ptr, localeconv())) <= 0.0 || *ptr)
+       {
+         print_fatal_error(data, "Bad DELAY value \"%s\" on line %d of \"%s\".", value, f->linenum, f->filename);
+         return (0);
+       }
+
+       data->monitor_interval = (useconds_t)(1000000.0 * dval);
+      }
+      else
+       data->monitor_interval = data->monitor_delay;
+    }
+    else if (!_cups_strcasecmp(token, "OF-TYPE"))
+    {
+      if (!_ippFileReadToken(f, temp, sizeof(temp)))
+      {
+       print_fatal_error(data, "Missing OF-TYPE value tag(s) on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+
+      if (data->last_expect)
+      {
+       data->last_expect->of_type = strdup(temp);
+      }
+      else
+      {
+       print_fatal_error(data, "OF-TYPE without a preceding EXPECT on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+    }
+    else if (!_cups_strcasecmp(token, "IN-GROUP"))
+    {
+      ipp_tag_t        in_group;               /* IN-GROUP value */
+
+      if (!_ippFileReadToken(f, temp, sizeof(temp)))
+      {
+       print_fatal_error(data, "Missing IN-GROUP group tag on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+
+      if ((in_group = ippTagValue(temp)) == IPP_TAG_ZERO || in_group >= IPP_TAG_UNSUPPORTED_VALUE)
+      {
+       print_fatal_error(data, "Bad IN-GROUP group tag \"%s\" on line %d of \"%s\".", temp, f->linenum, f->filename);
+       return (0);
+      }
+      else if (data->last_expect)
+      {
+       data->last_expect->in_group = in_group;
+      }
+      else
+      {
+       print_fatal_error(data, "IN-GROUP without a preceding EXPECT on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+    }
+    else if (!_cups_strcasecmp(token, "IF-DEFINED"))
+    {
+      if (!_ippFileReadToken(f, temp, sizeof(temp)))
+      {
+       print_fatal_error(data, "Missing IF-DEFINED name on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+
+      if (data->last_expect)
+      {
+       data->last_expect->if_defined = strdup(temp);
+      }
+      else
+      {
+       print_fatal_error(data, "IF-DEFINED without a preceding EXPECT on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+    }
+    else if (!_cups_strcasecmp(token, "IF-NOT-DEFINED"))
+    {
+      if (!_ippFileReadToken(f, temp, sizeof(temp)))
+      {
+       print_fatal_error(data, "Missing IF-NOT-DEFINED name on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+
+      if (data->last_expect)
+      {
+       data->last_expect->if_not_defined = strdup(temp);
+      }
+      else
+      {
+       print_fatal_error(data, "IF-NOT-DEFINED without a preceding EXPECT on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+    }
+    else if (!_cups_strcasecmp(token, "WITH-DISTINCT-VALUES"))
+    {
+      if (data->last_expect)
+      {
+        data->last_expect->with_distinct = 1;
+      }
+      else
+      {
+       print_fatal_error(data, "%s without a preceding EXPECT on line %d of \"%s\".", token, f->linenum, f->filename);
+       return (0);
+      }
+    }
+    else if (!_cups_strcasecmp(token, "WITH-VALUE"))
+    {
+      off_t    lastpos;                /* Last file position */
+      int      lastline;               /* Last line number */
+
+      if (!_ippFileReadToken(f, temp, sizeof(temp)))
+      {
+       print_fatal_error(data, "Missing %s value on line %d of \"%s\".", token, f->linenum, f->filename);
+       return (0);
+      }
+
+     /*
+      * Read additional comma-delimited values - needed since legacy test files
+      * will have unquoted WITH-VALUE values with commas...
+      */
+
+      ptr = temp + strlen(temp);
+
+      for (;;)
+      {
+        lastpos  = cupsFileTell(f->fp);
+        lastline = f->linenum;
+        ptr      += strlen(ptr);
+
+       if (!_ippFileReadToken(f, ptr, (sizeof(temp) - (size_t)(ptr - temp))))
+         break;
+
+        if (!strcmp(ptr, ","))
+        {
+         /*
+          * Append a value...
+          */
+
+         ptr += strlen(ptr);
+
+         if (!_ippFileReadToken(f, ptr, (sizeof(temp) - (size_t)(ptr - temp))))
+           break;
+        }
+        else
+        {
+         /*
+          * Not another value, stop here...
+          */
+
+          cupsFileSeek(f->fp, lastpos);
+          f->linenum = lastline;
+          *ptr = '\0';
+          break;
+       }
+      }
 
+      if (data->last_expect)
+      {
+       /*
+       * Expand any variables in the value and then save it.
+       */
 
-/*
- * 'init_data()' - Initialize test data.
- */
+       _ippVarsExpand(data->vars, value, temp, sizeof(value));
 
-static void
-init_data(_cups_testdata_t *data)      /* I - Data */
-{
-  memset(data, 0, sizeof(_cups_testdata_t));
+       ptr = value + strlen(value) - 1;
 
-  data->output       = _CUPS_OUTPUT_LIST;
-  data->outfile      = cupsFileStdout();
-  data->family       = AF_UNSPEC;
-  data->def_transfer = _CUPS_TRANSFER_AUTO;
-  data->def_version  = 11;
-  data->errors       = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free);
-  data->pass         = 1;
-  data->prev_pass    = 1;
-  data->request_id   = (CUPS_RAND() % 1000) * 137 + 1;
-  data->show_header  = 1;
-}
+       if (value[0] == '/' && ptr > value && *ptr == '/')
+       {
+        /*
+         * WITH-VALUE is a POSIX extended regular expression.
+         */
 
+         data->last_expect->with_value = calloc(1, (size_t)(ptr - value));
+         data->last_expect->with_flags |= IPPTOOL_WITH_REGEX;
 
-/*
- * 'iso_date()' - Return an ISO 8601 date/time string for the given IPP dateTime
- *                value.
- */
+         if (data->last_expect->with_value)
+           memcpy(data->last_expect->with_value, value + 1, (size_t)(ptr - value - 1));
+       }
+       else
+       {
+        /*
+         * WITH-VALUE is a literal value...
+         */
 
-static char *                          /* O - ISO 8601 date/time string */
-iso_date(const ipp_uchar_t *date)      /* I - IPP (RFC 1903) date/time value */
-{
-  time_t       utctime;                /* UTC time since 1970 */
-  struct tm    utcdate;                /* UTC date/time */
-  static char  buffer[255];            /* String buffer */
+         for (ptr = value; *ptr; ptr ++)
+         {
+           if (*ptr == '\\' && ptr[1])
+           {
+            /*
+             * Remove \ from \foo...
+             */
 
+             _cups_strcpy(ptr, ptr + 1);
+           }
+         }
 
-  utctime = ippDateToTime(date);
-  gmtime_r(&utctime, &utcdate);
+         data->last_expect->with_value = strdup(value);
+         data->last_expect->with_flags |= IPPTOOL_WITH_LITERAL;
+       }
+      }
+      else
+      {
+       print_fatal_error(data, "%s without a preceding EXPECT on line %d of \"%s\".", token, f->linenum, f->filename);
+       return (0);
+      }
+    }
+  }
 
-  snprintf(buffer, sizeof(buffer), "%04d-%02d-%02dT%02d:%02d:%02dZ",
-          utcdate.tm_year + 1900, utcdate.tm_mon + 1, utcdate.tm_mday,
-          utcdate.tm_hour, utcdate.tm_min, utcdate.tm_sec);
+  print_fatal_error(data, "Missing closing brace on line %d of \"%s\".", f->linenum, f->filename);
 
-  return (buffer);
+  return (0);
 }
 
 
@@ -2238,7 +3138,7 @@ pause_message(const char *message)        /* I - Message */
   * Display the prompt...
   */
 
-  cupsFilePrintf(cupsFileStdout(), "%s\n---- PRESS ANY KEY ----", message);
+  cupsFilePrintf(cupsFileStdout(), "\n%s\n\n---- PRESS ANY KEY ----", message);
 
 #ifdef _WIN32
  /*
@@ -2281,17 +3181,17 @@ pause_message(const char *message)      /* I - Message */
  */
 
 static void
-print_attr(cups_file_t     *outfile,   /* I  - Output file */
-           _cups_output_t  output,     /* I  - Output format */
-           ipp_attribute_t *attr,      /* I  - Attribute to print */
-           ipp_tag_t       *group)     /* IO - Current group */
+print_attr(cups_file_t      *outfile,  /* I  - Output file */
+           ipptool_output_t output,    /* I  - Output format */
+           ipp_attribute_t  *attr,     /* I  - Attribute to print */
+           ipp_tag_t        *group)    /* IO - Current group */
 {
   int                  i,              /* Looping var */
                        count;          /* Number of values */
   ipp_attribute_t      *colattr;       /* Collection attribute */
 
 
-  if (output == _CUPS_OUTPUT_PLIST)
+  if (output == IPPTOOL_OUTPUT_PLIST)
   {
     if (!ippGetName(attr) || (group && *group != ippGetGroupTag(attr)))
     {
@@ -2417,7 +3317,7 @@ print_attr(cups_file_t     *outfile,      /* I  - Output file */
   {
     char       buffer[131072];         /* Value buffer */
 
-    if (output == _CUPS_OUTPUT_TEST)
+    if (output == IPPTOOL_OUTPUT_TEST)
     {
       if (!ippGetName(attr))
       {
@@ -2438,21 +3338,20 @@ print_attr(cups_file_t     *outfile,    /* I  - Output file */
  * 'print_csv()' - Print a line of CSV text.
  */
 
-static void
+static ipp_attribute_t *               /* O - Next attribute */
 print_csv(
-    _cups_testdata_t *data,            /* I - Test data */
-    ipp_t            *ipp,             /* I - Response message */
-    ipp_attribute_t  *attr,            /* I - First attribute for line */
-    int              num_displayed,    /* I - Number of attributes to display */
-    char             **displayed,      /* I - Attributes to display */
-    size_t           *widths)          /* I - Column widths */
+    ipptool_test_t  *data,             /* I - Test data */
+    ipp_t           *ipp,              /* I - Response message */
+    ipp_attribute_t *attr,             /* I - First attribute for line */
+    int             num_displayed,     /* I - Number of attributes to display */
+    char            **displayed,       /* I - Attributes to display */
+    size_t          *widths)           /* I - Column widths */
 {
   int          i;                      /* Looping var */
   size_t       maxlength;              /* Max length of all columns */
-  char         *buffer,                /* String buffer */
-               *bufptr;                /* Pointer into buffer */
-  ipp_attribute_t *current;            /* Current attribute */
-
+  ipp_attribute_t *current = attr;     /* Current attribute */
+  char         *values[MAX_DISPLAY],   /* Strings to display */
+               *valptr;                /* Pointer into value */
 
  /*
   * Get the maximum string length we have to show and allocate...
@@ -2464,63 +3363,76 @@ print_csv(
 
   maxlength += 2;
 
-  if ((buffer = malloc(maxlength)) == NULL)
-    return;
-
  /*
   * Loop through the attributes to display...
   */
 
   if (attr)
   {
-    for (i = 0; i < num_displayed; i ++)
-    {
-      if (i)
-        cupsFilePutChar(data->outfile, ',');
+    // Collect the values...
+    memset(values, 0, sizeof(values));
 
-      buffer[0] = '\0';
+    for (; current; current = ippNextAttribute(ipp))
+    {
+      if (!ippGetName(current))
+       break;
 
-      for (current = attr; current; current = ippNextAttribute(ipp))
+      for (i = 0; i < num_displayed; i ++)
       {
-        if (!ippGetName(current))
-          break;
-        else if (!strcmp(ippGetName(current), displayed[i]))
+        if (!strcmp(ippGetName(current), displayed[i]))
         {
-          ippAttributeString(current, buffer, maxlength);
+          if ((values[i] = (char *)calloc(1, maxlength)) != NULL)
+           ippAttributeString(current, values[i], maxlength);
           break;
-        }
+       }
       }
+    }
 
-      if (strchr(buffer, ',') != NULL || strchr(buffer, '\"') != NULL ||
-         strchr(buffer, '\\') != NULL)
+    // Output the line...
+    for (i = 0; i < num_displayed; i ++)
+    {
+      if (i)
+        cupsFilePutChar(data->outfile, ',');
+
+      if (!values[i])
+        continue;
+
+      if (strchr(values[i], ',') != NULL || strchr(values[i], '\"') != NULL || strchr(values[i], '\\') != NULL)
       {
-        cupsFilePutChar(cupsFileStdout(), '\"');
-        for (bufptr = buffer; *bufptr; bufptr ++)
+        // Quoted value...
+        cupsFilePutChar(data->outfile, '\"');
+        for (valptr = values[i]; *valptr; valptr ++)
         {
-          if (*bufptr == '\\' || *bufptr == '\"')
-            cupsFilePutChar(cupsFileStdout(), '\\');
-          cupsFilePutChar(cupsFileStdout(), *bufptr);
+          if (*valptr == '\\' || *valptr == '\"')
+            cupsFilePutChar(data->outfile, '\\');
+          cupsFilePutChar(data->outfile, *valptr);
         }
-        cupsFilePutChar(cupsFileStdout(), '\"');
+        cupsFilePutChar(data->outfile, '\"');
       }
       else
-        cupsFilePuts(data->outfile, buffer);
+      {
+        // Unquoted value...
+        cupsFilePuts(data->outfile, values[i]);
+      }
+
+      free(values[i]);
     }
-    cupsFilePutChar(cupsFileStdout(), '\n');
+    cupsFilePutChar(data->outfile, '\n');
   }
   else
   {
+    // Show column headings...
     for (i = 0; i < num_displayed; i ++)
     {
       if (i)
-        cupsFilePutChar(cupsFileStdout(), ',');
+        cupsFilePutChar(data->outfile, ',');
 
       cupsFilePuts(data->outfile, displayed[i]);
     }
-    cupsFilePutChar(cupsFileStdout(), '\n');
+    cupsFilePutChar(data->outfile, '\n');
   }
 
-  free(buffer);
+  return (current);
 }
 
 
@@ -2530,7 +3442,7 @@ print_csv(
 
 static void
 print_fatal_error(
-    _cups_testdata_t *data,            /* I - Test data */
+    ipptool_test_t *data,              /* I - Test data */
     const char       *s,               /* I - Printf-style format string */
     ...)                               /* I - Additional arguments as needed */
 {
@@ -2550,7 +3462,7 @@ print_fatal_error(
   * Then output it...
   */
 
-  if (data->output == _CUPS_OUTPUT_PLIST)
+  if (data->output == IPPTOOL_OUTPUT_PLIST)
   {
     print_xml_header(data);
     print_xml_trailer(data, 0, buffer);
@@ -2566,7 +3478,7 @@ print_fatal_error(
 
 static void
 print_ippserver_attr(
-    _cups_testdata_t *data,            /* I - Test data */
+    ipptool_test_t *data,              /* I - Test data */
     ipp_attribute_t  *attr,            /* I - Attribute to print */
     int              indent)           /* I - Indentation level */
 {
@@ -2677,7 +3589,7 @@ print_ippserver_attr(
 
 static void
 print_ippserver_string(
-    _cups_testdata_t *data,            /* I - Test data */
+    ipptool_test_t *data,              /* I - Test data */
     const char       *s,               /* I - String to print */
     size_t           len)              /* I - Length of string */
 {
@@ -2699,9 +3611,9 @@ print_ippserver_string(
  * 'print_line()' - Print a line of formatted or CSV text.
  */
 
-static void
+static ipp_attribute_t *               /* O - Next attribute */
 print_line(
-    _cups_testdata_t *data,            /* I - Test data */
+    ipptool_test_t *data,              /* I - Test data */
     ipp_t            *ipp,             /* I - Response message */
     ipp_attribute_t  *attr,            /* I - First attribute for line */
     int              num_displayed,    /* I - Number of attributes to display */
@@ -2710,8 +3622,8 @@ print_line(
 {
   int          i;                      /* Looping var */
   size_t       maxlength;              /* Max length of all columns */
-  char         *buffer;                /* String buffer */
-  ipp_attribute_t *current;            /* Current attribute */
+  ipp_attribute_t *current = attr;     /* Current attribute */
+  char         *values[MAX_DISPLAY];   /* Strings to display */
 
 
  /*
@@ -2724,61 +3636,74 @@ print_line(
 
   maxlength += 2;
 
-  if ((buffer = malloc(maxlength)) == NULL)
-    return;
-
  /*
   * Loop through the attributes to display...
   */
 
   if (attr)
   {
-    for (i = 0; i < num_displayed; i ++)
-    {
-      if (i)
-        cupsFilePutChar(cupsFileStdout(), ' ');
+    // Collect the values...
+    memset(values, 0, sizeof(values));
 
-      buffer[0] = '\0';
+    for (; current; current = ippNextAttribute(ipp))
+    {
+      if (!ippGetName(current))
+       break;
 
-      for (current = attr; current; current = ippNextAttribute(ipp))
+      for (i = 0; i < num_displayed; i ++)
       {
-        if (!ippGetName(current))
-          break;
-        else if (!strcmp(ippGetName(current), displayed[i]))
+        if (!strcmp(ippGetName(current), displayed[i]))
         {
-          ippAttributeString(current, buffer, maxlength);
+          if ((values[i] = (char *)calloc(1, maxlength)) != NULL)
+           ippAttributeString(current, values[i], maxlength);
           break;
-        }
+       }
       }
+    }
+
+    // Output the line...
+    for (i = 0; i < num_displayed; i ++)
+    {
+      if (i)
+        cupsFilePutChar(data->outfile, ' ');
 
-      cupsFilePrintf(data->outfile, "%*s", (int)-widths[i], buffer);
+      cupsFilePrintf(data->outfile, "%*s", (int)-widths[i], values[i] ? values[i] : "");
+      free(values[i]);
     }
-    cupsFilePutChar(cupsFileStdout(), '\n');
+    cupsFilePutChar(data->outfile, '\n');
   }
   else
   {
+    // Show column headings...
+    char *buffer = (char *)malloc(maxlength);
+                                       // Buffer for separator lines
+
+    if (!buffer)
+      return (current);
+
     for (i = 0; i < num_displayed; i ++)
     {
       if (i)
-        cupsFilePutChar(cupsFileStdout(), ' ');
+        cupsFilePutChar(data->outfile, ' ');
 
       cupsFilePrintf(data->outfile, "%*s", (int)-widths[i], displayed[i]);
     }
-    cupsFilePutChar(cupsFileStdout(), '\n');
+    cupsFilePutChar(data->outfile, '\n');
 
     for (i = 0; i < num_displayed; i ++)
     {
       if (i)
-       cupsFilePutChar(cupsFileStdout(), ' ');
+       cupsFilePutChar(data->outfile, ' ');
 
       memset(buffer, '-', widths[i]);
       buffer[widths[i]] = '\0';
       cupsFilePuts(data->outfile, buffer);
     }
-    cupsFilePutChar(cupsFileStdout(), '\n');
+    cupsFilePutChar(data->outfile, '\n');
+    free(buffer);
   }
 
-  free(buffer);
+  return (current);
 }
 
 
@@ -2787,7 +3712,7 @@ print_line(
  */
 
 static void
-print_xml_header(_cups_testdata_t *data)/* I - Test data */
+print_xml_header(ipptool_test_t *data)/* I - Test data */
 {
   if (!data->xml_header)
   {
@@ -2798,7 +3723,7 @@ print_xml_header(_cups_testdata_t *data)/* I - Test data */
     cupsFilePuts(data->outfile, "<key>ipptoolVersion</key>\n");
     cupsFilePuts(data->outfile, "<string>" CUPS_SVERSION "</string>\n");
     cupsFilePuts(data->outfile, "<key>Transfer</key>\n");
-    cupsFilePrintf(data->outfile, "<string>%s</string>\n", data->transfer == _CUPS_TRANSFER_AUTO ? "auto" : data->transfer == _CUPS_TRANSFER_CHUNKED ? "chunked" : "length");
+    cupsFilePrintf(data->outfile, "<string>%s</string>\n", data->transfer == IPPTOOL_TRANSFER_AUTO ? "auto" : data->transfer == IPPTOOL_TRANSFER_CHUNKED ? "chunked" : "length");
     cupsFilePuts(data->outfile, "<key>Tests</key>\n");
     cupsFilePuts(data->outfile, "<array>\n");
 
@@ -2907,7 +3832,7 @@ print_xml_string(cups_file_t *outfile,    /* I - Test data */
 
 static void
 print_xml_trailer(
-    _cups_testdata_t *data,            /* I - Test data */
+    ipptool_test_t *data,              /* I - Test data */
     int              success,          /* I - 1 on success, 0 on failure */
     const char       *message)         /* I - Error message or NULL */
 {
@@ -2989,10 +3914,10 @@ timeout_cb(http_t *http,                /* I - Connection to server */
  */
 
 static int                             /* O - 1 to continue, 0 to stop */
-token_cb(_ipp_file_t      *f,          /* I - IPP file data */
-         _ipp_vars_t      *vars,       /* I - IPP variables */
-         _cups_testdata_t *data,       /* I - Test data */
-         const char       *token)      /* I - Current token */
+token_cb(_ipp_file_t    *f,            /* I - IPP file data */
+         _ipp_vars_t    *vars,         /* I - IPP variables */
+         ipptool_test_t *data,         /* I - Test data */
+         const char     *token)                /* I - Current token */
 {
   char name[1024],                     /* Name string */
        temp[1024],                     /* Temporary string */
@@ -3018,6 +3943,7 @@ token_cb(_ipp_file_t      *f,             /* I - IPP file data */
        _cups_strcasecmp(token, "DEFINE-MATCH") &&
        _cups_strcasecmp(token, "DEFINE-NO-MATCH") &&
        _cups_strcasecmp(token, "DEFINE-VALUE") &&
+       _cups_strcasecmp(token, "DISPLAY-MATCH") &&
        _cups_strcasecmp(token, "IF-DEFINED") &&
        _cups_strcasecmp(token, "IF-NOT-DEFINED") &&
        _cups_strcasecmp(token, "IN-GROUP") &&
@@ -3030,6 +3956,7 @@ token_cb(_ipp_file_t      *f,             /* I - IPP file data */
        _cups_strcasecmp(token, "WITH-ALL-HOSTNAMES") &&
        _cups_strcasecmp(token, "WITH-ALL-RESOURCES") &&
        _cups_strcasecmp(token, "WITH-ALL-SCHEMES") &&
+       _cups_strcasecmp(token, "WITH-DISTINCT-VALUES") &&
        _cups_strcasecmp(token, "WITH-HOSTNAME") &&
        _cups_strcasecmp(token, "WITH-RESOURCE") &&
        _cups_strcasecmp(token, "WITH-SCHEME") &&
@@ -3048,7 +3975,17 @@ token_cb(_ipp_file_t      *f,            /* I - IPP file data */
 
     if (!strcmp(token, "}"))
     {
-      return (do_test(f, vars, data));
+      return (do_test(f, data));
+    }
+    else if (!strcmp(token, "MONITOR-PRINTER-STATE"))
+    {
+      if (data->monitor_uri)
+      {
+       print_fatal_error(data, "Extra MONITOR-PRINTER-STATE seen on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+
+      return (parse_monitor_printer_state(f, data));
     }
     else if (!strcmp(token, "COMPRESSION"))
     {
@@ -3132,7 +4069,7 @@ token_cb(_ipp_file_t      *f,             /* I - IPP file data */
 
       if (_ippFileReadToken(f, temp, sizeof(temp)))
       {
-        pause_message(temp);
+        strlcpy(data->pause, temp, sizeof(data->pause));
       }
       else
       {
@@ -3151,11 +4088,11 @@ token_cb(_ipp_file_t      *f,           /* I - IPP file data */
       {
        if (isdigit(temp[0] & 255))
        {
-         data->request_id = atoi(temp);
+         data->request_id = atoi(temp) - 1;
        }
        else if (!_cups_strcasecmp(temp, "random"))
        {
-         data->request_id = (CUPS_RAND() % 1000) * 137 + 1;
+         data->request_id = (CUPS_RAND() % 1000) * 137;
        }
        else
        {
@@ -3169,6 +4106,40 @@ token_cb(_ipp_file_t      *f,            /* I - IPP file data */
        return (0);
       }
     }
+    else if (!strcmp(token, "PASS-IF-DEFINED"))
+    {
+     /*
+      * PASS-IF-DEFINED variable
+      */
+
+      if (_ippFileReadToken(f, name, sizeof(name)))
+      {
+       if (_ippVarsGet(vars, name))
+         data->pass_test = 1;
+      }
+      else
+      {
+       print_fatal_error(data, "Missing PASS-IF-DEFINED value on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+    }
+    else if (!strcmp(token, "PASS-IF-NOT-DEFINED"))
+    {
+     /*
+      * PASS-IF-NOT-DEFINED variable
+      */
+
+      if (_ippFileReadToken(f, name, sizeof(name)))
+      {
+       if (!_ippVarsGet(vars, name))
+         data->pass_test = 1;
+      }
+      else
+      {
+       print_fatal_error(data, "Missing PASS-IF-NOT-DEFINED value on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+    }
     else if (!strcmp(token, "SKIP-IF-DEFINED"))
     {
      /*
@@ -3270,15 +4241,15 @@ token_cb(_ipp_file_t      *f,           /* I - IPP file data */
       {
        if (!strcmp(temp, "auto"))
        {
-         data->transfer = _CUPS_TRANSFER_AUTO;
+         data->transfer = IPPTOOL_TRANSFER_AUTO;
        }
        else if (!strcmp(temp, "chunked"))
        {
-         data->transfer = _CUPS_TRANSFER_CHUNKED;
+         data->transfer = IPPTOOL_TRANSFER_CHUNKED;
        }
        else if (!strcmp(temp, "length"))
        {
-         data->transfer = _CUPS_TRANSFER_LENGTH;
+         data->transfer = IPPTOOL_TRANSFER_LENGTH;
        }
        else
        {
@@ -3509,7 +4480,7 @@ token_cb(_ipp_file_t      *f,             /* I - IPP file data */
       data->last_expect = data->expects + data->num_expects;
       data->num_expects ++;
 
-      memset(data->last_expect, 0, sizeof(_cups_expect_t));
+      memset(data->last_expect, 0, sizeof(ipptool_expect_t));
       data->last_expect->repeat_limit = 1000;
       data->last_expect->expect_all   = expect_all;
 
@@ -3614,6 +4585,24 @@ token_cb(_ipp_file_t      *f,            /* I - IPP file data */
        return (0);
       }
     }
+    else if (!_cups_strcasecmp(token, "DISPLAY-MATCH"))
+    {
+      if (!_ippFileReadToken(f, temp, sizeof(temp)))
+      {
+       print_fatal_error(data, "Missing DISPLAY-MATCH mesaage on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+
+      if (data->last_expect)
+      {
+       data->last_expect->display_match = strdup(temp);
+      }
+      else
+      {
+       print_fatal_error(data, "DISPLAY-MATCH without a preceding EXPECT on line %d of \"%s\".", f->linenum, f->filename);
+       return (0);
+      }
+    }
     else if (!_cups_strcasecmp(token, "OF-TYPE"))
     {
       if (!_ippFileReadToken(f, temp, sizeof(temp)))
@@ -3778,6 +4767,18 @@ token_cb(_ipp_file_t      *f,            /* I - IPP file data */
        return (0);
       }
     }
+    else if (!_cups_strcasecmp(token, "WITH-DISTINCT-VALUES"))
+    {
+      if (data->last_expect)
+      {
+        data->last_expect->with_distinct = 1;
+      }
+      else
+      {
+       print_fatal_error(data, "%s without a preceding EXPECT on line %d of \"%s\".", token, f->linenum, f->filename);
+       return (0);
+      }
+    }
     else if (!_cups_strcasecmp(token, "WITH-ALL-VALUES") ||
             !_cups_strcasecmp(token, "WITH-ALL-HOSTNAMES") ||
             !_cups_strcasecmp(token, "WITH-ALL-RESOURCES") ||
@@ -3793,14 +4794,14 @@ token_cb(_ipp_file_t      *f,           /* I - IPP file data */
       if (data->last_expect)
       {
        if (!_cups_strcasecmp(token, "WITH-ALL-HOSTNAMES") || !_cups_strcasecmp(token, "WITH-HOSTNAME"))
-         data->last_expect->with_flags = _CUPS_WITH_HOSTNAME;
+         data->last_expect->with_flags = IPPTOOL_WITH_HOSTNAME;
        else if (!_cups_strcasecmp(token, "WITH-ALL-RESOURCES") || !_cups_strcasecmp(token, "WITH-RESOURCE"))
-         data->last_expect->with_flags = _CUPS_WITH_RESOURCE;
+         data->last_expect->with_flags = IPPTOOL_WITH_RESOURCE;
        else if (!_cups_strcasecmp(token, "WITH-ALL-SCHEMES") || !_cups_strcasecmp(token, "WITH-SCHEME"))
-         data->last_expect->with_flags = _CUPS_WITH_SCHEME;
+         data->last_expect->with_flags = IPPTOOL_WITH_SCHEME;
 
        if (!_cups_strncasecmp(token, "WITH-ALL-", 9))
-         data->last_expect->with_flags |= _CUPS_WITH_ALL;
+         data->last_expect->with_flags |= IPPTOOL_WITH_ALL;
       }
 
       if (!_ippFileReadToken(f, temp, sizeof(temp)))
@@ -3866,7 +4867,7 @@ token_cb(_ipp_file_t      *f,             /* I - IPP file data */
          */
 
          data->last_expect->with_value = calloc(1, (size_t)(ptr - value));
-         data->last_expect->with_flags |= _CUPS_WITH_REGEX;
+         data->last_expect->with_flags |= IPPTOOL_WITH_REGEX;
 
          if (data->last_expect->with_value)
            memcpy(data->last_expect->with_value, value + 1, (size_t)(ptr - value - 1));
@@ -3890,7 +4891,7 @@ token_cb(_ipp_file_t      *f,             /* I - IPP file data */
          }
 
          data->last_expect->with_value = strdup(value);
-         data->last_expect->with_flags |= _CUPS_WITH_LITERAL;
+         data->last_expect->with_flags |= IPPTOOL_WITH_LITERAL;
        }
       }
       else
@@ -3916,7 +4917,7 @@ token_cb(_ipp_file_t      *f,             /* I - IPP file data */
        _ippVarsExpand(vars, value, temp, sizeof(value));
 
        data->last_expect->with_value_from = strdup(value);
-       data->last_expect->with_flags      = _CUPS_WITH_LITERAL;
+       data->last_expect->with_flags      = IPPTOOL_WITH_LITERAL;
       }
       else
       {
@@ -3965,10 +4966,10 @@ token_cb(_ipp_file_t      *f,           /* I - IPP file data */
 
       if (data->show_header)
       {
-       if (data->output == _CUPS_OUTPUT_PLIST)
+       if (data->output == IPPTOOL_OUTPUT_PLIST)
          print_xml_header(data);
 
-       if (data->output == _CUPS_OUTPUT_TEST || (data->output == _CUPS_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
+       if (data->output == IPPTOOL_OUTPUT_TEST || (data->output == IPPTOOL_OUTPUT_PLIST && data->outfile != cupsFileStdout()))
          cupsFilePrintf(cupsFileStdout(), "\"%s\":\n", f->filename);
 
        data->show_header = 0;
@@ -3984,9 +4985,9 @@ token_cb(_ipp_file_t      *f,             /* I - IPP file data */
       if ((ptr = strrchr(data->name, '.')) != NULL)
         *ptr = '\0';
       data->repeat_interval = 5000000;
-      data->request_id ++;
-      strlcpy(data->resource, vars->resource, sizeof(data->resource));
+      strlcpy(data->resource, data->vars->resource, sizeof(data->resource));
       data->skip_previous = 0;
+      data->pass_test     = 0;
       data->skip_test     = 0;
       data->num_statuses  = 0;
       data->last_status   = NULL;
@@ -3994,6 +4995,12 @@ token_cb(_ipp_file_t      *f,            /* I - IPP file data */
       data->transfer      = data->def_transfer;
       data->version       = data->def_version;
 
+      free(data->monitor_uri);
+      data->monitor_uri         = NULL;
+      data->monitor_delay       = 0;
+      data->monitor_interval    = 5000000;
+      data->num_monitor_expects = 0;
+
       _ippVarsSet(vars, "date-current", iso_date(ippTimeToDate(time(NULL))));
 
       f->attrs     = ippNew();
@@ -4085,7 +5092,7 @@ token_cb(_ipp_file_t      *f,             /* I - IPP file data */
         * Map the filename to and then run the tests...
        */
 
-        _cups_testdata_t inc_data;     /* Data for included file */
+        ipptool_test_t inc_data;       /* Data for included file */
         char           filename[1024]; /* Mapped filename */
 
         memcpy(&inc_data, data, sizeof(inc_data));
@@ -4094,7 +5101,7 @@ token_cb(_ipp_file_t      *f,             /* I - IPP file data */
        inc_data.prev_pass   = 1;
        inc_data.show_header = 1;
 
-        if (!do_tests(get_filename(f->filename, filename, temp, sizeof(filename)), vars, &inc_data) && data->stop_after_include_error)
+        if (!do_tests(get_filename(f->filename, filename, temp, sizeof(filename)), &inc_data) && data->stop_after_include_error)
         {
           data->pass = data->prev_pass = 0;
           return (0);
@@ -4121,7 +5128,7 @@ token_cb(_ipp_file_t      *f,             /* I - IPP file data */
         * Map the filename to and then run the tests...
        */
 
-        _cups_testdata_t inc_data;     /* Data for included file */
+        ipptool_test_t inc_data;       /* Data for included file */
         char           filename[1024]; /* Mapped filename */
 
         memcpy(&inc_data, data, sizeof(inc_data));
@@ -4130,7 +5137,7 @@ token_cb(_ipp_file_t      *f,             /* I - IPP file data */
        inc_data.prev_pass   = 1;
        inc_data.show_header = 1;
 
-        if (!do_tests(get_filename(f->filename, filename, temp, sizeof(filename)), vars, &inc_data) && data->stop_after_include_error)
+        if (!do_tests(get_filename(f->filename, filename, temp, sizeof(filename)), &inc_data) && data->stop_after_include_error)
         {
           data->pass = data->prev_pass = 0;
           return (0);
@@ -4157,7 +5164,7 @@ token_cb(_ipp_file_t      *f,             /* I - IPP file data */
         * Map the filename to and then run the tests...
        */
 
-        _cups_testdata_t inc_data;     /* Data for included file */
+        ipptool_test_t inc_data;       /* Data for included file */
         char           filename[1024]; /* Mapped filename */
 
         memcpy(&inc_data, data, sizeof(inc_data));
@@ -4166,7 +5173,7 @@ token_cb(_ipp_file_t      *f,             /* I - IPP file data */
        inc_data.prev_pass   = 1;
        inc_data.show_header = 1;
 
-        if (!do_tests(get_filename(f->filename, filename, temp, sizeof(filename)), vars, &inc_data) && data->stop_after_include_error)
+        if (!do_tests(get_filename(f->filename, filename, temp, sizeof(filename)), &inc_data) && data->stop_after_include_error)
         {
           data->pass = data->prev_pass = 0;
           return (0);
@@ -4242,11 +5249,11 @@ token_cb(_ipp_file_t      *f,           /* I - IPP file data */
       if (_ippFileReadToken(f, temp, sizeof(temp)))
       {
         if (!strcmp(temp, "auto"))
-         data->def_transfer = _CUPS_TRANSFER_AUTO;
+         data->def_transfer = IPPTOOL_TRANSFER_AUTO;
        else if (!strcmp(temp, "chunked"))
-         data->def_transfer = _CUPS_TRANSFER_CHUNKED;
+         data->def_transfer = IPPTOOL_TRANSFER_CHUNKED;
        else if (!strcmp(temp, "length"))
-         data->def_transfer = _CUPS_TRANSFER_LENGTH;
+         data->def_transfer = IPPTOOL_TRANSFER_LENGTH;
        else
        {
          print_fatal_error(data, "Bad TRANSFER value \"%s\" on line %d of \"%s\".", temp, f->linenum, f->filename);
@@ -4316,6 +5323,7 @@ usage(void)
   _cupsLangPuts(stderr, _("-I                      Ignore errors"));
   _cupsLangPuts(stderr, _("-L                      Send requests using content-length"));
   _cupsLangPuts(stderr, _("-P filename.plist       Produce XML plist to a file and test report to standard output"));
+  _cupsLangPuts(stderr, _("-R                      Repeat tests on server-error-busy"));
   _cupsLangPuts(stderr, _("-S                      Test with encryption using HTTPS"));
   _cupsLangPuts(stderr, _("-T seconds              Set the receive/send timeout in seconds"));
   _cupsLangPuts(stderr, _("-V version              Set default IPP version"));
@@ -4335,30 +5343,155 @@ usage(void)
 }
 
 
+/*
+ * 'with_distinct_values()' - Verify that an attribute contains unique values.
+ */
+
+static int                             // O - 1 if distinct, 0 if duplicate
+with_distinct_values(
+    cups_array_t    *errors,           // I - Array of errors
+    ipp_attribute_t *attr)             // I - Attribute to test
+{
+  int          i,                      // Looping var
+               count;                  // Number of values
+  ipp_tag_t    value_tag;              // Value syntax
+  const char   *value;                 // Current value
+  char         buffer[8192];           // Temporary buffer
+  cups_array_t *values;                // Array of values as strings
+
+
+  // If there is only 1 value, it must be distinct
+  if ((count = ippGetCount(attr)) == 1)
+    return (1);
+
+  // Only check integers, enums, rangeOfInteger, resolution, and nul-terminated
+  // strings...
+  switch (value_tag = ippGetValueTag(attr))
+  {
+    case IPP_TAG_INTEGER :
+    case IPP_TAG_ENUM :
+    case IPP_TAG_RANGE :
+    case IPP_TAG_RESOLUTION :
+    case IPP_TAG_KEYWORD :
+    case IPP_TAG_URISCHEME :
+    case IPP_TAG_CHARSET :
+    case IPP_TAG_LANGUAGE :
+    case IPP_TAG_MIMETYPE :
+    case IPP_TAG_BEGIN_COLLECTION :
+        break;
+
+    default :
+        add_stringf(errors, "WITH-DISTINCT-VALUES %s not supported for 1setOf %s", ippGetName(attr), ippTagString(value_tag));
+        return (0);
+  }
+
+  // Collect values and determine they are all unique...
+  values = cupsArrayNew3((cups_array_func_t)strcmp, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free);
+
+  for (i = 0; i < count; i ++)
+  {
+    switch (value_tag)
+    {
+      case IPP_TAG_INTEGER :
+      case IPP_TAG_ENUM :
+          snprintf(buffer, sizeof(buffer), "%d", ippGetInteger(attr, i));
+          value = buffer;
+          break;
+      case IPP_TAG_RANGE :
+          {
+            int upper, lower = ippGetRange(attr, i, &upper);
+                                       // Range values
+
+            snprintf(buffer, sizeof(buffer), "%d-%d", lower, upper);
+            value = buffer;
+         }
+          break;
+      case IPP_TAG_RESOLUTION :
+          {
+            ipp_res_t units;           // Resolution units
+            int yres, xres = ippGetResolution(attr, i, &yres, &units);
+                                       // Resolution values
+
+            if (xres == yres)
+              snprintf(buffer, sizeof(buffer), "%d%s", xres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+           else
+              snprintf(buffer, sizeof(buffer), "%dx%d%s", xres, yres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+            value = buffer;
+         }
+          break;
+      case IPP_TAG_KEYWORD :
+      case IPP_TAG_URISCHEME :
+      case IPP_TAG_CHARSET :
+      case IPP_TAG_LANGUAGE :
+      case IPP_TAG_MIMETYPE :
+          value = ippGetString(attr, i, NULL);
+          break;
+      case IPP_TAG_BEGIN_COLLECTION :
+          {
+            ipp_t      *col = ippGetCollection(attr, i);
+                                       // Collection value
+            ipp_attribute_t *member;   // Member attribute
+            char       *bufptr,        // Pointer into buffer
+                       *bufend,        // End of buffer
+                       prefix;         // Prefix character
+
+            for (prefix = '{', bufptr = buffer, bufend = buffer + sizeof(buffer) - 2, member = ippFirstAttribute(col); member && bufptr < bufend; member = ippNextAttribute(col))
+            {
+              *bufptr++ = prefix;
+              prefix    = ' ';
+
+              ippAttributeString(member, bufptr, (size_t)(bufend - bufptr));
+              bufptr += strlen(bufptr);
+            }
+
+            *bufptr++ = '}';
+            *bufptr   = '\0';
+            value     = buffer;
+          }
+          break;
+      default : // Should never happen
+          value = "unsupported";
+          break;
+    }
+
+    if (cupsArrayFind(values, (void *)value))
+      add_stringf(errors, "DUPLICATE: %s=%s", ippGetName(attr), value);
+    else
+      cupsArrayAdd(values, (void *)value);
+  }
+
+  // Cleanup...
+  i = cupsArrayCount(values) == count;
+  cupsArrayDelete(values);
+
+  return (i);
+}
+
+
 /*
  * 'with_flags_string()' - Return the "WITH-xxx" predicate that corresponds to
                          the flags.
*                         the flags.
  */
 
 static const char *                     /* O - WITH-xxx string */
 with_flags_string(int flags)            /* I - WITH flags */
 {
-  if (flags & _CUPS_WITH_ALL)
+  if (flags & IPPTOOL_WITH_ALL)
   {
-    if (flags & _CUPS_WITH_HOSTNAME)
+    if (flags & IPPTOOL_WITH_HOSTNAME)
       return ("WITH-ALL-HOSTNAMES");
-    else if (flags & _CUPS_WITH_RESOURCE)
+    else if (flags & IPPTOOL_WITH_RESOURCE)
       return ("WITH-ALL-RESOURCES");
-    else if (flags & _CUPS_WITH_SCHEME)
+    else if (flags & IPPTOOL_WITH_SCHEME)
       return ("WITH-ALL-SCHEMES");
     else
       return ("WITH-ALL-VALUES");
   }
-  else if (flags & _CUPS_WITH_HOSTNAME)
+  else if (flags & IPPTOOL_WITH_HOSTNAME)
     return ("WITH-HOSTNAME");
-  else if (flags & _CUPS_WITH_RESOURCE)
+  else if (flags & IPPTOOL_WITH_RESOURCE)
     return ("WITH-RESOURCE");
-  else if (flags & _CUPS_WITH_SCHEME)
+  else if (flags & IPPTOOL_WITH_SCHEME)
     return ("WITH-SCHEME");
   else
     return ("WITH-VALUE");
@@ -4370,7 +5503,7 @@ with_flags_string(int flags)            /* I - WITH flags */
  */
 
 static int                             /* O - 1 on match, 0 on non-match */
-with_value(_cups_testdata_t *data,     /* I - Test data */
+with_value(ipptool_test_t *data,       /* I - Test data */
            cups_array_t     *errors,   /* I - Errors array */
            char             *value,    /* I - Value string */
            int              flags,     /* I - Flags for match */
@@ -4387,7 +5520,7 @@ with_value(_cups_testdata_t *data,        /* I - Test data */
 
 
   *matchbuf = '\0';
-  match     = (flags & _CUPS_WITH_ALL) ? 1 : 0;
+  match     = (flags & IPPTOOL_WITH_ALL) ? 1 : 0;
 
  /*
   * NULL matches everything.
@@ -4450,7 +5583,7 @@ with_value(_cups_testdata_t *data,        /* I - Test data */
            }
          }
 
-          if (flags & _CUPS_WITH_ALL)
+          if (flags & IPPTOOL_WITH_ALL)
           {
             if (!valmatch)
             {
@@ -4517,7 +5650,7 @@ with_value(_cups_testdata_t *data,        /* I - Test data */
            }
          }
 
-          if (flags & _CUPS_WITH_ALL)
+          if (flags & IPPTOOL_WITH_ALL)
           {
             if (!valmatch)
             {
@@ -4552,13 +5685,13 @@ with_value(_cups_testdata_t *data,      /* I - Test data */
             if (!matchbuf[0])
              strlcpy(matchbuf, value, matchlen);
 
-           if (!(flags & _CUPS_WITH_ALL))
+           if (!(flags & IPPTOOL_WITH_ALL))
            {
              match = 1;
              break;
            }
          }
-         else if (flags & _CUPS_WITH_ALL)
+         else if (flags & IPPTOOL_WITH_ALL)
          {
            match = 0;
            break;
@@ -4589,13 +5722,13 @@ with_value(_cups_testdata_t *data,      /* I - Test data */
             if (!matchbuf[0])
              strlcpy(matchbuf, value, matchlen);
 
-           if (!(flags & _CUPS_WITH_ALL))
+           if (!(flags & IPPTOOL_WITH_ALL))
            {
              match = 1;
              break;
            }
          }
-         else if (flags & _CUPS_WITH_ALL)
+         else if (flags & IPPTOOL_WITH_ALL)
          {
            match = 0;
            break;
@@ -4635,7 +5768,7 @@ with_value(_cups_testdata_t *data,        /* I - Test data */
     case IPP_TAG_TEXTLANG :
     case IPP_TAG_URI :
     case IPP_TAG_URISCHEME :
-        if (flags & _CUPS_WITH_REGEX)
+        if (flags & IPPTOOL_WITH_REGEX)
        {
         /*
          * Value is an extended, case-sensitive POSIX regular expression...
@@ -4663,13 +5796,13 @@ with_value(_cups_testdata_t *data,      /* I - Test data */
              if (!matchbuf[0])
                strlcpy(matchbuf, get_string(attr, i, flags, temp, sizeof(temp)), matchlen);
 
-             if (!(flags & _CUPS_WITH_ALL))
+             if (!(flags & IPPTOOL_WITH_ALL))
              {
                match = 1;
                break;
              }
            }
-           else if (flags & _CUPS_WITH_ALL)
+           else if (flags & IPPTOOL_WITH_ALL)
            {
              match = 0;
              break;
@@ -4678,7 +5811,7 @@ with_value(_cups_testdata_t *data,        /* I - Test data */
 
          regfree(&re);
        }
-       else if (ippGetValueTag(attr) == IPP_TAG_URI && !(flags & (_CUPS_WITH_SCHEME | _CUPS_WITH_HOSTNAME | _CUPS_WITH_RESOURCE)))
+       else if (ippGetValueTag(attr) == IPP_TAG_URI && !(flags & (IPPTOOL_WITH_SCHEME | IPPTOOL_WITH_HOSTNAME | IPPTOOL_WITH_RESOURCE)))
        {
         /*
          * Value is a literal URI string, see if the value(s) match...
@@ -4691,13 +5824,13 @@ with_value(_cups_testdata_t *data,      /* I - Test data */
              if (!matchbuf[0])
                strlcpy(matchbuf, get_string(attr, i, flags, temp, sizeof(temp)), matchlen);
 
-             if (!(flags & _CUPS_WITH_ALL))
+             if (!(flags & IPPTOOL_WITH_ALL))
              {
                match = 1;
                break;
              }
            }
-           else if (flags & _CUPS_WITH_ALL)
+           else if (flags & IPPTOOL_WITH_ALL)
            {
              match = 0;
              break;
@@ -4721,7 +5854,7 @@ with_value(_cups_testdata_t *data,        /* I - Test data */
                   * Some URI components are case-sensitive, some not...
                   */
 
-                  if (flags & (_CUPS_WITH_SCHEME | _CUPS_WITH_HOSTNAME))
+                  if (flags & (IPPTOOL_WITH_SCHEME | IPPTOOL_WITH_HOSTNAME))
                     result = _cups_strcasecmp(value, get_string(attr, i, flags, temp, sizeof(temp)));
                   else
                     result = strcmp(value, get_string(attr, i, flags, temp, sizeof(temp)));
@@ -4756,13 +5889,13 @@ with_value(_cups_testdata_t *data,      /* I - Test data */
              if (!matchbuf[0])
                strlcpy(matchbuf, get_string(attr, i, flags, temp, sizeof(temp)), matchlen);
 
-             if (!(flags & _CUPS_WITH_ALL))
+             if (!(flags & IPPTOOL_WITH_ALL))
              {
                match = 1;
                break;
              }
            }
-           else if (flags & _CUPS_WITH_ALL)
+           else if (flags & IPPTOOL_WITH_ALL)
            {
              match = 0;
              break;
@@ -4778,7 +5911,7 @@ with_value(_cups_testdata_t *data,        /* I - Test data */
        break;
 
     case IPP_TAG_STRING :
-        if (flags & _CUPS_WITH_REGEX)
+        if (flags & IPPTOOL_WITH_REGEX)
        {
         /*
          * Value is an extended, case-sensitive POSIX regular expression...
@@ -4815,13 +5948,13 @@ with_value(_cups_testdata_t *data,      /* I - Test data */
              if (!matchbuf[0])
                strlcpy(matchbuf, temp, matchlen);
 
-             if (!(flags & _CUPS_WITH_ALL))
+             if (!(flags & IPPTOOL_WITH_ALL))
              {
                match = 1;
                break;
              }
            }
-           else if (flags & _CUPS_WITH_ALL)
+           else if (flags & IPPTOOL_WITH_ALL)
            {
              match = 0;
              break;
@@ -4912,13 +6045,13 @@ with_value(_cups_testdata_t *data,      /* I - Test data */
              if (!matchbuf[0])
                 copy_hex_string(matchbuf, adata, adatalen, matchlen);
 
-             if (!(flags & _CUPS_WITH_ALL))
+             if (!(flags & IPPTOOL_WITH_ALL))
              {
                match = 1;
                break;
              }
            }
-           else if (flags & _CUPS_WITH_ALL)
+           else if (flags & IPPTOOL_WITH_ALL)
            {
              match = 0;
              break;
diff --git a/tools/printer-lg-png.h b/tools/printer-lg-png.h
new file mode 100644 (file)
index 0000000..a7d328d
--- /dev/null
@@ -0,0 +1,1850 @@
+static const unsigned char printer_lg_png[] =
+{
+  0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,
+  0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x08,0x06,0x00,0x00,0x00,0xf4,0x78,0xd4,
+  0xfa,0x00,0x00,0x04,0x19,0x69,0x43,0x43,0x50,0x6b,0x43,0x47,0x43,0x6f,0x6c,0x6f,
+  0x72,0x53,0x70,0x61,0x63,0x65,0x47,0x65,0x6e,0x65,0x72,0x69,0x63,0x52,0x47,0x42,
+  0x00,0x00,0x38,0x8d,0x8d,0x55,0x5d,0x68,0x1c,0x55,0x14,0x3e,0xbb,0x73,0x67,0x23,
+  0x24,0xce,0x53,0x6c,0x34,0x85,0x74,0xa8,0x3f,0x0d,0x25,0x0d,0x93,0x56,0x34,0xa1,
+  0xb4,0xba,0x7f,0xdd,0xdd,0x36,0x6e,0x96,0x49,0x36,0xda,0x22,0xe8,0x64,0xf6,0xee,
+  0xce,0x98,0xc9,0xce,0x38,0x33,0xbb,0xfd,0xa1,0x4f,0x45,0x50,0x7c,0x31,0xea,0x9b,
+  0x14,0xc4,0xbf,0xb7,0x80,0x20,0x28,0xf5,0x0f,0xdb,0x3e,0xb4,0x2f,0x95,0x0a,0x25,
+  0xda,0xd4,0x20,0x28,0x3e,0xb4,0xf8,0x83,0x50,0xe8,0x8b,0xa6,0xeb,0x99,0x3b,0x33,
+  0x99,0x69,0xba,0xb1,0xde,0x65,0xee,0x7c,0xf3,0x9d,0xef,0x9e,0x7b,0xee,0xb9,0x67,
+  0xef,0x05,0xe8,0xb9,0xaa,0x58,0x96,0x91,0x14,0x01,0x16,0x9a,0xae,0x2d,0x17,0x32,
+  0xe2,0x73,0x87,0x8f,0x88,0x3d,0x2b,0x90,0x84,0x87,0xa0,0x17,0x06,0xa1,0x57,0x51,
+  0x1d,0x2b,0x5d,0xa9,0x4c,0x02,0x36,0x4f,0x0b,0x77,0xb5,0x5b,0xdf,0x43,0xc2,0x7b,
+  0x5f,0xd9,0xd5,0xdd,0xfe,0x9f,0xad,0xb7,0x46,0x1d,0x15,0x20,0x71,0x1f,0x62,0xb3,
+  0xe6,0xa8,0x0b,0x88,0x8f,0x01,0xf0,0xa7,0x55,0xcb,0x76,0x01,0x7a,0xfa,0x91,0x1f,
+  0x3f,0xea,0x5a,0x1e,0xf6,0x62,0xe8,0xb7,0x31,0x40,0xc4,0x2f,0x7a,0xb8,0xe1,0x63,
+  0xd7,0xc3,0x73,0x3e,0x7e,0x8d,0x69,0x66,0xe4,0x2c,0xe2,0xd3,0x88,0x05,0x55,0x53,
+  0x6a,0x88,0x97,0x10,0x8f,0xcc,0xc5,0xf8,0x46,0x0c,0xfb,0x31,0xb0,0xd6,0x5f,0xa0,
+  0x4d,0x6a,0xeb,0xaa,0xe8,0xe5,0xa2,0x62,0x9b,0x75,0xdd,0xa0,0xb1,0x70,0xef,0x61,
+  0xfe,0x9f,0x6d,0xc1,0x68,0x85,0xf3,0x6d,0xc3,0xa7,0xcf,0x99,0x9f,0x3e,0x84,0xef,
+  0x61,0x5c,0xfb,0x2b,0x35,0x25,0xe7,0xe1,0x51,0xc4,0x4b,0xaa,0x92,0x9f,0x46,0xfc,
+  0x08,0xe2,0x6b,0x6d,0x7d,0xb6,0x1c,0xe0,0xdb,0x96,0x9b,0x91,0x11,0x3f,0x06,0x90,
+  0xdc,0xde,0x9a,0xaf,0xa6,0x11,0xef,0x44,0x5c,0xac,0xdb,0x07,0xaa,0xbe,0x9f,0xa4,
+  0xad,0xb5,0x8a,0x21,0x7e,0xe7,0x84,0x36,0xf3,0x2c,0xe2,0x2d,0x88,0xcf,0x37,0xe7,
+  0xca,0x53,0xc1,0xd8,0xab,0xaa,0x93,0xc5,0x9c,0xc1,0x76,0xc4,0xb7,0x35,0x5a,0xf2,
+  0xf2,0x3b,0x04,0xc0,0x89,0xba,0x5b,0x9a,0xf1,0xc7,0x72,0xfb,0x6d,0x53,0x9e,0xf2,
+  0xe7,0xe5,0xea,0x35,0x9a,0xcb,0x7b,0x79,0x44,0xfc,0xfa,0xbc,0x79,0x48,0xf6,0x7d,
+  0x72,0x9f,0x39,0xed,0xe9,0x7c,0xe8,0xf3,0x84,0x96,0x2d,0x07,0xfc,0xa5,0x97,0x94,
+  0x83,0x15,0xc4,0x83,0x88,0x7f,0xa1,0x46,0x41,0xf6,0xe7,0xe2,0xfe,0xb1,0xdc,0x4a,
+  0x10,0x03,0x19,0x6a,0x1a,0xe5,0x49,0x7f,0x2e,0x92,0xa3,0x0e,0x5b,0x2f,0xe3,0x5d,
+  0x6d,0xa6,0xe8,0xcf,0x4b,0x0c,0x17,0x37,0xd4,0x1f,0x4b,0x16,0xeb,0xfa,0x81,0x52,
+  0xa0,0xff,0x44,0xb3,0x8b,0x72,0x80,0xaf,0x59,0x06,0xab,0x51,0x8c,0x8d,0x4f,0xda,
+  0x2d,0xb9,0xea,0xeb,0xf9,0x51,0xc5,0xce,0x17,0x7c,0x9f,0x7c,0x85,0x36,0xab,0x81,
+  0x7f,0xbe,0x0d,0xb3,0x09,0x05,0x28,0x98,0x30,0x87,0xbd,0x0a,0x4d,0x58,0x03,0x11,
+  0x64,0x28,0x40,0x06,0xdf,0x16,0xd8,0x68,0xa9,0x83,0x0e,0x06,0x32,0x14,0xad,0x14,
+  0x19,0x8a,0x5f,0xa1,0x66,0x17,0x1b,0xe7,0xc0,0x3c,0xf2,0x3a,0xb4,0x99,0xcd,0xc1,
+  0xbe,0xc2,0x94,0xfe,0xc8,0xc8,0x5f,0x83,0xf9,0xb8,0xce,0xb4,0x2a,0x64,0x87,0x3e,
+  0x82,0x16,0xb2,0x1a,0xfc,0x8e,0xac,0x16,0xd3,0x65,0xf1,0xab,0x85,0x5c,0x63,0x13,
+  0x3f,0x7e,0x2c,0x37,0x02,0x3f,0x26,0x19,0x20,0x12,0xd9,0x83,0xcf,0x5e,0x32,0x49,
+  0xf6,0x91,0x71,0x32,0x01,0x22,0x79,0x8a,0x3c,0x4d,0xf6,0x93,0x1c,0xb2,0x13,0x64,
+  0xef,0xfa,0xd8,0x4a,0x6c,0x45,0x5e,0x3c,0x37,0xd6,0xfd,0xbc,0x8c,0x33,0x52,0xa6,
+  0x9b,0x45,0xdd,0x39,0xb4,0xbb,0xa0,0x60,0xff,0x33,0x2a,0x4c,0x5c,0x53,0xd7,0xac,
+  0x2c,0x0e,0xb6,0x86,0x23,0xcb,0x29,0xfb,0x05,0x5d,0xbd,0xfc,0xc6,0x5f,0xb1,0x5c,
+  0xe9,0x2c,0x37,0x51,0xb6,0xe2,0x19,0x9d,0xba,0x57,0xce,0xf9,0x5f,0xf9,0xeb,0xfc,
+  0x32,0xf6,0x2b,0xfc,0x6a,0xa4,0xe0,0x7f,0xe4,0x57,0xf1,0xb7,0x72,0xc7,0x5a,0xcc,
+  0xbb,0xb2,0x4c,0xc3,0xec,0x6c,0x58,0x73,0x77,0x55,0x1a,0x6d,0x06,0xe3,0x16,0xf0,
+  0xd1,0x99,0xc5,0x89,0xc5,0x1d,0xf3,0x71,0xf1,0xe4,0x57,0x0f,0x46,0x7e,0x96,0xc9,
+  0x99,0xe7,0xaf,0xf4,0x5d,0x3c,0x59,0x6f,0x2e,0x0e,0x46,0xac,0x97,0x05,0xfa,0x6a,
+  0xf9,0x56,0x19,0x4e,0x8d,0x44,0xac,0xf4,0x83,0xf4,0x87,0xb4,0x2c,0xbd,0x27,0x7d,
+  0x28,0xfd,0xc6,0xbd,0xcd,0x7d,0xca,0x7d,0xcd,0x7d,0xce,0x7d,0xc1,0x5d,0x02,0x91,
+  0x3b,0xcb,0x9d,0xe3,0xbe,0xe1,0x2e,0x70,0x1f,0x73,0x5f,0xc6,0xf6,0x6a,0xf3,0x1a,
+  0x5a,0xdf,0x7b,0x16,0x79,0x18,0xb7,0x67,0xe9,0x96,0x6b,0xac,0x4a,0x21,0x23,0x6c,
+  0x15,0x1e,0x16,0x72,0xc2,0x36,0xe1,0x51,0x61,0x32,0xf2,0x27,0x0c,0x08,0x63,0x42,
+  0x51,0xd8,0x81,0x96,0xad,0xeb,0xfb,0x16,0x9f,0x2f,0x9e,0x3d,0x1d,0x0e,0x63,0x1f,
+  0xe6,0xa7,0xfb,0x5c,0xbe,0x2e,0x56,0x01,0x89,0xfb,0xb1,0x02,0xf4,0x4d,0xfe,0x55,
+  0x55,0x54,0xe9,0x70,0x94,0x29,0x1d,0x56,0x6f,0x4d,0x38,0xbe,0x41,0x13,0x8c,0x24,
+  0x43,0x64,0x8c,0x94,0x36,0x54,0xf7,0xb8,0x57,0xf3,0xa1,0x22,0x95,0x4f,0xe5,0x52,
+  0x69,0x10,0x53,0x3b,0x53,0x13,0xa9,0xb1,0xd4,0x41,0x0f,0x87,0xb3,0xa6,0x76,0xa0,
+  0x6d,0x02,0xfb,0xfc,0x1d,0xd5,0xa9,0x6e,0xb2,0x52,0xea,0xd2,0x63,0xde,0x7d,0x02,
+  0x59,0xd3,0x3a,0x6e,0xeb,0x0d,0xcd,0x15,0x77,0x4b,0xd2,0x93,0x62,0x1a,0xaf,0x36,
+  0x2a,0x96,0x9a,0xea,0xe8,0x88,0xa8,0x18,0x86,0xc8,0x4c,0x8e,0x68,0x53,0x87,0xda,
+  0x6d,0x5a,0x1b,0x05,0xef,0xde,0xf4,0x8f,0xf4,0x9b,0x32,0xbb,0x0f,0x13,0x5b,0x2e,
+  0x47,0x9c,0xfb,0x0c,0xc0,0xbe,0x3f,0xf1,0xec,0xfb,0x2e,0xe2,0x8e,0xb4,0x00,0x96,
+  0x1c,0x80,0x81,0xc7,0x23,0x6e,0x18,0xcf,0xca,0x07,0xde,0x05,0x38,0xf3,0x84,0xda,
+  0xb2,0xdb,0xc1,0x1d,0x91,0x48,0x7c,0x0b,0xe0,0xd4,0xf7,0xec,0xf6,0xbf,0xfa,0x32,
+  0x78,0x7e,0xfd,0xd4,0xe9,0xdc,0xc4,0x73,0xac,0xe7,0x2d,0x80,0xb5,0x37,0x3b,0x9d,
+  0xbf,0xdf,0xef,0x74,0xd6,0x3e,0x40,0xff,0xab,0x00,0x67,0x8d,0x7f,0x01,0xa0,0x9f,
+  0x7c,0x55,0x03,0x5c,0x0b,0xef,0x00,0x00,0x00,0x38,0x65,0x58,0x49,0x66,0x4d,0x4d,
+  0x00,0x2a,0x00,0x00,0x00,0x08,0x00,0x01,0x87,0x69,0x00,0x04,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x00,0x00,0x02,0xa0,0x02,0x00,0x04,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x02,0x00,0xa0,0x03,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x02,0x00,0x00,0x00,0x00,0x00,0x28,0x30,0x97,0xbf,0x00,0x00,0x03,0x62,0x69,0x54,
+  0x58,0x74,0x58,0x4d,0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,
+  0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00,0x3c,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,
+  0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,
+  0x65,0x3a,0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20,0x78,0x3a,0x78,0x6d,
+  0x70,0x74,0x6b,0x3d,0x22,0x58,0x4d,0x50,0x20,0x43,0x6f,0x72,0x65,0x20,0x35,0x2e,
+  0x34,0x2e,0x30,0x22,0x3e,0x0a,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52,0x44,
+  0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72,0x64,0x66,0x3d,0x22,0x68,0x74,0x74,
+  0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,
+  0x39,0x39,0x39,0x2f,0x30,0x32,0x2f,0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,
+  0x6e,0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,
+  0x6e,0x20,0x72,0x64,0x66,0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x0a,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,
+  0x3a,0x64,0x63,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x70,0x75,0x72,0x6c,
+  0x2e,0x6f,0x72,0x67,0x2f,0x64,0x63,0x2f,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,
+  0x2f,0x31,0x2e,0x31,0x2f,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x49,0x70,0x74,0x63,0x34,0x78,0x6d,
+  0x70,0x45,0x78,0x74,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x69,0x70,0x74,
+  0x63,0x2e,0x6f,0x72,0x67,0x2f,0x73,0x74,0x64,0x2f,0x49,0x70,0x74,0x63,0x34,0x78,
+  0x6d,0x70,0x45,0x78,0x74,0x2f,0x32,0x30,0x30,0x38,0x2d,0x30,0x32,0x2d,0x32,0x39,
+  0x2f,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78,
+  0x6d,0x6c,0x6e,0x73,0x3a,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3d,0x22,
+  0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,
+  0x63,0x6f,0x6d,0x2f,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x2f,0x31,0x2e,
+  0x30,0x2f,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,
+  0x63,0x3a,0x63,0x72,0x65,0x61,0x74,0x6f,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x53,0x65,0x71,0x3e,
+  0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+  0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x4d,0x69,0x63,0x68,0x61,0x65,0x6c,0x20,
+  0x53,0x77,0x65,0x65,0x74,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,
+  0x3a,0x53,0x65,0x71,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,
+  0x2f,0x64,0x63,0x3a,0x63,0x72,0x65,0x61,0x74,0x6f,0x72,0x3e,0x0a,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,0x72,0x69,0x67,0x68,0x74,0x73,
+  0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,
+  0x64,0x66,0x3a,0x41,0x6c,0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x20,0x78,
+  0x6d,0x6c,0x3a,0x6c,0x61,0x6e,0x67,0x3d,0x22,0x78,0x2d,0x64,0x65,0x66,0x61,0x75,
+  0x6c,0x74,0x22,0x3e,0x43,0x6f,0x70,0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x32,0x30,
+  0x31,0x30,0x20,0x41,0x70,0x70,0x6c,0x65,0x20,0x49,0x6e,0x63,0x2e,0x3c,0x2f,0x72,
+  0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x41,0x6c,0x74,0x3e,0x0a,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x63,0x3a,0x72,0x69,0x67,0x68,
+  0x74,0x73,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x49,0x70,
+  0x74,0x63,0x34,0x78,0x6d,0x70,0x45,0x78,0x74,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,
+  0x6e,0x65,0x3e,0x4e,0x65,0x77,0x20,0x49,0x6d,0x61,0x67,0x65,0x3c,0x2f,0x49,0x70,
+  0x74,0x63,0x34,0x78,0x6d,0x70,0x45,0x78,0x74,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,
+  0x6e,0x65,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x68,
+  0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,0x6e,0x65,
+  0x3e,0x4e,0x65,0x77,0x20,0x49,0x6d,0x61,0x67,0x65,0x3c,0x2f,0x70,0x68,0x6f,0x74,
+  0x6f,0x73,0x68,0x6f,0x70,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,0x6e,0x65,0x3e,0x0a,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,
+  0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,
+  0x66,0x3a,0x52,0x44,0x46,0x3e,0x0a,0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,
+  0x74,0x61,0x3e,0x0a,0xa0,0x50,0x98,0x64,0x00,0x00,0x6b,0x41,0x49,0x44,0x41,0x54,
+  0x78,0xda,0xed,0x9d,0x07,0xfc,0x1c,0x55,0xb9,0xb0,0x4f,0x7a,0xef,0x40,0x0a,0x49,
+  0x20,0x10,0x9a,0x54,0xe9,0x46,0x7a,0x13,0x14,0x2e,0x52,0x42,0x53,0x54,0x04,0x2f,
+  0x28,0x02,0xf7,0x7e,0x82,0x15,0x51,0x51,0x11,0x14,0x6c,0x28,0xc2,0xfd,0x79,0x51,
+  0x41,0x41,0xa4,0x37,0xf9,0x40,0x3a,0x48,0x07,0x29,0x86,0x96,0x90,0x00,0x09,0x24,
+  0x90,0x46,0x7a,0xcf,0x7e,0xe7,0x1d,0x32,0xff,0x6f,0x72,0x72,0xce,0x9c,0x33,0xbb,
+  0x33,0xbb,0xb3,0xbb,0xcf,0x93,0xdf,0xc9,0xee,0x7f,0x77,0x76,0x66,0xce,0xb4,0xb7,
+  0x9c,0xf7,0x7d,0x4f,0x27,0x55,0x52,0x2a,0x95,0x4a,0x1f,0xfd,0xb2,0xad,0x6e,0xdb,
+  0xe9,0x36,0x56,0xb7,0x31,0xba,0x8d,0xd4,0x6d,0x3d,0xdd,0x06,0xeb,0xd6,0x4b,0xb7,
+  0xee,0xba,0x75,0x51,0x00,0x00,0x00,0xf5,0x67,0x95,0x6e,0xcb,0x75,0x5b,0xa2,0xdb,
+  0x1c,0xdd,0x66,0xe9,0x36,0x4d,0xb7,0x29,0xba,0x4d,0xd2,0xed,0x45,0xdd,0x5e,0xea,
+  0xd4,0xa9,0xd3,0xa2,0x32,0xee,0x7c,0xa7,0x12,0x09,0xfc,0x7e,0xfa,0x65,0x7f,0xdd,
+  0x0e,0xd0,0x6d,0x8f,0x35,0xc2,0xbf,0x33,0xd7,0x17,0x00,0x00,0x34,0x31,0xab,0x45,
+  0x09,0xd0,0xed,0x51,0xdd,0xee,0xd5,0xed,0x3e,0xad,0x10,0x2c,0x68,0x7b,0x05,0x40,
+  0x0b,0xfd,0x41,0xfa,0xe5,0x08,0xdd,0x8e,0xd5,0x6d,0x5f,0xdd,0xba,0x71,0xad,0x00,
+  0x00,0x40,0x0b,0xb3,0x42,0xb7,0x07,0x74,0xbb,0x4e,0xb7,0x9b,0xb5,0x32,0x30,0xb7,
+  0xad,0x14,0x00,0x2d,0xf8,0xf7,0xd4,0x2f,0xa7,0xea,0x76,0xb4,0x6e,0x3d,0xb8,0x1e,
+  0x00,0x00,0xa0,0x0d,0x59,0xaa,0xdb,0x8d,0xba,0x5d,0xa1,0x15,0x81,0x47,0x5a,0x56,
+  0x01,0xd0,0x42,0x5f,0xdc,0xf9,0xe3,0x75,0x3b,0x5b,0xb7,0x9d,0x39,0xef,0x00,0x00,
+  0x00,0x1d,0x3c,0xa3,0xdb,0xc5,0xba,0x5d,0xaf,0x95,0x81,0xd5,0x2d,0xa3,0x00,0x68,
+  0xe1,0x7f,0xa4,0x7e,0x39,0x5f,0xb7,0xad,0x39,0xc7,0x00,0x00,0x00,0x4e,0x26,0xe8,
+  0x76,0x9e,0x56,0x02,0x6e,0x6a,0x6a,0x05,0x40,0x0b,0xfe,0x2d,0xf5,0xcb,0x65,0xea,
+  0xc3,0xf1,0x7d,0x00,0x00,0x00,0x08,0x43,0xe2,0x04,0xbe,0xa2,0x15,0x81,0x57,0x8b,
+  0xda,0x40,0x21,0x51,0xf6,0x5a,0xf0,0xf7,0xd6,0xed,0x02,0xfd,0xf6,0x05,0x84,0x3f,
+  0x00,0x00,0x40,0x66,0x44,0x76,0xbe,0x20,0xb2,0x54,0x64,0x6a,0x53,0x78,0x00,0xf4,
+  0x8e,0xee,0xae,0x5f,0xae,0x51,0x1f,0xe6,0xed,0x03,0x00,0x00,0x40,0x6d,0x48,0x5d,
+  0x81,0x13,0xb4,0x37,0xe0,0x89,0xd2,0x7a,0x00,0xb4,0xf0,0xff,0x9a,0x7e,0x79,0x18,
+  0xe1,0x0f,0x00,0x00,0x90,0x1b,0x22,0x53,0x1f,0x5e,0x23,0x63,0xcb,0xe5,0x01,0xd0,
+  0x3b,0x25,0x95,0xf9,0xfe,0xa8,0xdb,0x61,0x9c,0x27,0x00,0x00,0x80,0xc2,0xb8,0x5d,
+  0xb7,0x2f,0x68,0x6f,0xc0,0x9c,0x86,0x2b,0x00,0x5a,0xf8,0x8b,0x66,0x72,0x8f,0xfa,
+  0xb0,0x5c,0x2f,0x00,0x00,0x00,0x14,0x8b,0x94,0x19,0x3e,0x48,0x2b,0x01,0x53,0x6a,
+  0x59,0x49,0x4d,0x43,0x00,0x5a,0xf8,0x6f,0xaf,0x5f,0x1e,0x43,0xf8,0x03,0x00,0x00,
+  0xd4,0x0d,0x91,0xb9,0x8f,0xad,0x91,0xc1,0xf5,0x57,0x00,0xf4,0x86,0xf7,0xd6,0x2f,
+  0x0f,0xe9,0x36,0x8c,0x73,0x01,0x00,0x00,0x50,0x57,0x44,0xf6,0x3e,0xb4,0x46,0x16,
+  0x57,0x45,0x55,0x43,0x00,0x6b,0x36,0xf8,0x7f,0x75,0xeb,0xc9,0x39,0x00,0x00,0x00,
+  0x68,0x18,0x52,0x4e,0xf8,0x60,0x3d,0x1c,0xf0,0x50,0xe1,0x0a,0xc0,0x1a,0x97,0x83,
+  0x6c,0x68,0x00,0xc7,0x1d,0x00,0x00,0xa0,0xe1,0xcc,0xd3,0x6d,0x6f,0xad,0x04,0xbc,
+  0x50,0x98,0x02,0xb0,0x26,0xe0,0x4f,0xc6,0xfc,0x71,0xfb,0x03,0x00,0x00,0x94,0x87,
+  0x19,0xba,0x8d,0xcb,0x12,0x18,0x18,0xac,0x00,0xac,0x49,0xf5,0x7b,0x52,0x11,0xf0,
+  0x07,0x00,0x00,0x50,0x46,0x24,0x3b,0x60,0xb7,0xd0,0x14,0xc1,0x2c,0x41,0x80,0x7f,
+  0x44,0xf8,0x03,0x00,0x00,0x94,0x96,0xb1,0x6b,0x64,0x75,0x10,0x41,0x0a,0xc0,0x9a,
+  0xea,0x43,0x14,0xf9,0x01,0x00,0x00,0x28,0x37,0x87,0x85,0x56,0x0c,0xf4,0x0e,0x01,
+  0xac,0xa9,0xed,0x2f,0xe5,0x7d,0xbb,0x71,0x5c,0x01,0x00,0x00,0x4a,0xcf,0x0a,0xdd,
+  0xf6,0xf2,0xcd,0x1d,0xd0,0xc9,0x23,0xfc,0x65,0x06,0xa2,0x7f,0x2b,0x6a,0xfb,0x03,
+  0x00,0x00,0x34,0x13,0x12,0x0c,0xb8,0x8d,0x56,0x02,0x16,0xbb,0x16,0xf0,0x0d,0x01,
+  0x9c,0x8b,0xf0,0x07,0x00,0x00,0x68,0x3a,0xc6,0xac,0x91,0xe1,0xd9,0x3d,0x00,0xda,
+  0xfa,0xdf,0x52,0xbf,0x48,0x4e,0x61,0x77,0x8e,0x23,0x00,0x00,0x40,0xd3,0xb1,0x5c,
+  0xb7,0xed,0xb5,0x17,0xe0,0xd5,0xac,0x0a,0xc0,0xfd,0xfa,0x65,0xdf,0x5a,0xb7,0xbe,
+  0x72,0xe5,0x4a,0x35,0x77,0xee,0xdc,0xd4,0x65,0xba,0x75,0xeb,0xa6,0x06,0x0e,0x1c,
+  0xc8,0xa9,0x02,0x00,0x00,0xc8,0x97,0x07,0xb4,0x02,0xb0,0x5f,0xb0,0x02,0xa0,0x85,
+  0xff,0x51,0xfa,0xe5,0x86,0x3c,0xb6,0x7c,0xe9,0xa5,0x97,0xaa,0x33,0xcf,0x3c,0x33,
+  0x75,0x99,0xee,0xdd,0xbb,0xab,0x65,0xcb,0x96,0x71,0x9a,0x00,0x00,0x00,0xf2,0xe7,
+  0x68,0xad,0x04,0xdc,0x68,0x7e,0xd8,0xd9,0x22,0xfc,0xe5,0xb3,0x1f,0xe4,0xb5,0xd5,
+  0xe5,0xcb,0x97,0xe7,0xb2,0x0c,0x00,0x00,0x00,0x54,0xc5,0x0f,0xd6,0xc8,0xf6,0x74,
+  0x05,0x40,0x33,0x5e,0xb7,0xad,0x39,0x5e,0x00,0x00,0x00,0x2d,0xc1,0xd6,0x6b,0x64,
+  0xbb,0x57,0x01,0x38,0x9b,0x63,0x05,0x00,0x00,0xd0,0x52,0x9c,0x9d,0xaa,0x00,0x68,
+  0x17,0xc1,0x9e,0xfa,0x65,0x67,0x8e,0x13,0x00,0x00,0x40,0x4b,0xb1,0xf3,0x1a,0x19,
+  0xef,0xf4,0x00,0x9c,0xca,0x31,0x02,0x00,0x00,0x68,0x49,0x4e,0xb5,0x2a,0x00,0x5a,
+  0x33,0x18,0xa4,0x5f,0x8e,0xe2,0xf8,0x00,0x00,0x00,0xb4,0x24,0x47,0xad,0x91,0xf5,
+  0xeb,0x78,0x00,0x8e,0xd0,0xad,0x27,0xc7,0x07,0x00,0x00,0xa0,0x25,0xe9,0xb9,0x46,
+  0xd6,0xaf,0xa3,0x00,0x1c,0xcb,0xb1,0x01,0x00,0x00,0x68,0x69,0x3a,0x64,0x7d,0x57,
+  0xf9,0x4f,0xbb,0x04,0xfa,0xa9,0x1c,0xaa,0xfe,0xd9,0x18,0x3f,0x7e,0xbc,0xda,0x60,
+  0x83,0x0d,0x52,0x97,0xe9,0xdb,0xb7,0x2f,0xa7,0x04,0x00,0x00,0xa0,0x78,0xf6,0x15,
+  0x99,0xaf,0x0b,0x03,0x2d,0xe8,0xb4,0x46,0x01,0x10,0x97,0xc0,0x4d,0x1c,0x17,0x00,
+  0x00,0x80,0x96,0xe7,0x08,0xad,0x00,0xdc,0x12,0x0f,0x01,0xec,0xcf,0xf1,0x00,0x00,
+  0x00,0x68,0x0b,0x0e,0x90,0xff,0x62,0x05,0x60,0x0f,0x8e,0x07,0x00,0x00,0x40,0x5b,
+  0x10,0xc9,0xfc,0x4e,0xda,0xfd,0x2f,0x03,0xf0,0xf3,0x94,0xbd,0x2a,0x20,0x00,0x00,
+  0x00,0xb4,0x16,0xab,0x75,0xeb,0x2f,0x42,0x7f,0x1b,0x84,0x3f,0x00,0x00,0x40,0xdb,
+  0x20,0x32,0x7f,0x5b,0xf9,0x6f,0x3b,0x8e,0x05,0x00,0x00,0x40,0x5b,0xb1,0x9d,0xa4,
+  0x01,0x8e,0xe5,0x38,0xb8,0x99,0x37,0x6f,0x9e,0x7a,0xf3,0xcd,0x37,0xa3,0xf6,0xd6,
+  0x5b,0x6f,0xa9,0xd5,0xab,0x57,0xab,0xa1,0x43,0x87,0xaa,0xe1,0xc3,0x87,0xab,0x61,
+  0xc3,0x86,0xa9,0x51,0xa3,0x46,0xa9,0x3e,0x7d,0xfa,0xd0,0xcf,0x12,0xb0,0x68,0xd1,
+  0x22,0x35,0x75,0xea,0x54,0x35,0x7d,0xfa,0x74,0xf5,0xee,0xbb,0xef,0x46,0xaf,0x0b,
+  0x17,0x2e,0x54,0x43,0x86,0x0c,0x89,0xfa,0x20,0x6d,0xc4,0x88,0x11,0x6a,0x93,0x4d,
+  0x36,0x51,0x3a,0x02,0x96,0x8b,0x9b,0x73,0x01,0xd0,0xce,0x8c,0x15,0x05,0x60,0x4c,
+  0x91,0x5b,0x98,0x32,0x65,0x8a,0x7a,0xe0,0x81,0x07,0x52,0x97,0x11,0xc1,0x72,0xec,
+  0xb1,0xc7,0x96,0x62,0x3b,0x2b,0x57,0xae,0x54,0x37,0xde,0x78,0xa3,0xfa,0xdd,0xef,
+  0x7e,0xa7,0x5e,0x78,0xe1,0x05,0xf5,0xc1,0x07,0x1f,0xa4,0x2e,0xdf,0xb5,0x6b,0x57,
+  0xb5,0xef,0xbe,0xfb,0xaa,0xa3,0x8e,0x3a,0x4a,0x1d,0x71,0xc4,0x11,0xde,0x9a,0x07,
+  0x65,0x39,0x9e,0x65,0xef,0x67,0x28,0xb3,0x67,0xcf,0x56,0xb7,0xde,0x7a,0xab,0xba,
+  0xfe,0xfa,0xeb,0xd5,0x7d,0xf7,0xdd,0xa7,0x56,0xac,0x58,0xe1,0xfd,0x8d,0x28,0x33,
+  0xd2,0x87,0x23,0x8f,0x3c,0x52,0xed,0xb1,0xc7,0x1e,0xaa,0x4b,0x97,0x2e,0x35,0xed,
+  0xc3,0x8b,0x2f,0xbe,0xa8,0x9e,0x79,0xe6,0x99,0xd4,0x65,0x06,0x0c,0x18,0x10,0x1d,
+  0xbb,0x7a,0x72,0xd7,0x5d,0x77,0x45,0x82,0xd7,0x45,0xe7,0xce,0x9d,0xd5,0xe7,0x3e,
+  0xf7,0xb9,0xe8,0xb5,0x55,0xce,0x05,0x00,0x04,0x33,0x46,0x6a,0x00,0x3c,0x5e,0x29,
+  0x90,0x8b,0x2f,0xbe,0xb8,0xa2,0x37,0xe4,0x6d,0x8d,0xde,0x8e,0x7e,0x78,0x55,0x7e,
+  0xf2,0x93,0x9f,0x54,0x46,0x8e,0x1c,0x19,0xb4,0x1e,0x5b,0xd3,0x0f,0xd2,0xca,0xf1,
+  0xc7,0x1f,0x5f,0xd1,0x0f,0xdd,0xd2,0x1e,0xcf,0x66,0xe9,0xa7,0x8f,0x89,0x13,0x27,
+  0x56,0x0e,0x3f,0xfc,0xf0,0x8a,0x56,0x4c,0xaa,0xee,0x87,0xb4,0x8d,0x37,0xde,0xb8,
+  0x72,0xc7,0x1d,0x77,0xd4,0xb4,0x2f,0xe7,0x9c,0x73,0x4e,0xd0,0x31,0x7b,0xfb,0xed,
+  0xb7,0xeb,0x76,0x7c,0xb4,0x47,0xa7,0xd2,0xbb,0x77,0xef,0xd4,0x7d,0x92,0x63,0x37,
+  0x73,0xe6,0xcc,0x96,0x3a,0x17,0x00,0x10,0xcc,0xe3,0x22,0x29,0x26,0xb6,0xbb,0x02,
+  0x70,0xd3,0x4d,0x37,0x55,0xb4,0xd5,0x5c,0xd3,0xc3,0x2b,0xd9,0xb4,0xb5,0x57,0xb9,
+  0xec,0xb2,0xcb,0x2a,0xab,0x56,0xad,0x2a,0xd5,0xf1,0x6c,0xa6,0x7e,0xba,0x58,0xba,
+  0x74,0x69,0xe5,0x7b,0xdf,0xfb,0x5e,0xa5,0x47,0x8f,0x1e,0xb9,0xf5,0x43,0x9a,0xb6,
+  0x40,0x2b,0xd3,0xa6,0x4d,0xab,0x6a,0x9f,0x9e,0x7b,0xee,0xb9,0xa0,0x6d,0x5c,0x70,
+  0xc1,0x05,0x75,0x3b,0x4e,0x97,0x5f,0x7e,0xb9,0x77,0x7f,0x44,0x68,0xb7,0xda,0xb9,
+  0x00,0x80,0x70,0xdd,0x5d,0x24,0xc5,0xec,0x76,0x56,0x00,0xe4,0x77,0x62,0x9d,0xe5,
+  0xf9,0x00,0x8b,0xdb,0x21,0x87,0x1c,0x12,0x3d,0x24,0xcb,0x70,0x3c,0x9b,0xad,0x9f,
+  0x36,0x9e,0x7d,0xf6,0xd9,0xca,0xd8,0xb1,0x63,0x0b,0xe9,0x83,0xb4,0xf5,0xd6,0x5b,
+  0xaf,0xf2,0xd2,0x4b,0x2f,0x55,0xb5,0x6f,0xdb,0x6d,0xb7,0x9d,0x77,0xfd,0x5b,0x6e,
+  0xb9,0x65,0xdd,0xee,0xec,0x5d,0x76,0xd9,0xc5,0xbb,0x3f,0xb5,0x58,0xdb,0x65,0x3e,
+  0x17,0x00,0x10,0xc4,0x6c,0x19,0xfc,0xeb,0xd5,0x8e,0x83,0x1f,0x32,0x06,0x7e,0xda,
+  0x69,0xa7,0xa9,0xb3,0xcf,0x3e,0x3b,0x0a,0x78,0x2b,0x6a,0x0c,0x56,0xc6,0x7d,0x97,
+  0x2f,0x5f,0x4e,0x3f,0x6b,0xe4,0x89,0x27,0x9e,0x50,0xfb,0xed,0xb7,0x9f,0x9a,0x34,
+  0x69,0x52,0x61,0xdb,0x98,0x35,0x6b,0x96,0x3a,0xe0,0x80,0x03,0xd4,0x6b,0xaf,0xbd,
+  0x96,0xf9,0xb7,0x9f,0xff,0xfc,0xe7,0xbd,0xcb,0xbc,0xfa,0xea,0xab,0xea,0xa9,0xa7,
+  0x9e,0x2a,0xfc,0x9c,0x4b,0x4c,0xc2,0xd3,0x4f,0x3f,0x9d,0xba,0x8c,0x1e,0x02,0x52,
+  0x07,0x1f,0x7c,0x70,0x4b,0x9e,0x0b,0x00,0x08,0xa2,0x97,0x28,0x00,0xdd,0xdb,0xb1,
+  0xe7,0x9f,0xfd,0xec,0x67,0xd5,0x15,0x57,0x5c,0x51,0xf8,0x76,0xee,0xbc,0xf3,0x4e,
+  0x75,0xcc,0x31,0xc7,0x04,0x05,0x44,0xd1,0x4f,0x3b,0x0f,0x3f,0xfc,0xb0,0x3a,0xe8,
+  0xa0,0x83,0xa2,0x4c,0x85,0xa2,0x79,0xef,0xbd,0xf7,0xd4,0xfe,0xfb,0xef,0x1f,0x65,
+  0x43,0x64,0xe1,0x84,0x13,0x4e,0x88,0x02,0x25,0x7d,0xfc,0xe9,0x4f,0x7f,0x2a,0xbc,
+  0x0f,0xff,0xfb,0xbf,0xff,0xeb,0x5d,0xe6,0x8b,0x5f,0xfc,0x62,0x55,0x01,0x77,0xcd,
+  0x70,0x2e,0x00,0x20,0x88,0xee,0xa2,0x00,0xb4,0x5d,0xd8,0xed,0xd5,0x57,0x5f,0xad,
+  0xae,0xbb,0xee,0xba,0xba,0x6d,0x4f,0x22,0xa3,0x7f,0xf4,0xa3,0x1f,0xd1,0xcf,0x2a,
+  0x78,0xf4,0xd1,0x47,0x95,0x1e,0x62,0x50,0x0b,0x16,0x2c,0x08,0xfe,0x4d,0xb7,0x6e,
+  0xdd,0xd4,0xe8,0xd1,0xa3,0xd5,0x8e,0x3b,0xee,0xa8,0xb6,0xde,0x7a,0xeb,0x28,0xf5,
+  0x2c,0x0b,0xef,0xbc,0xf3,0x8e,0x3a,0xf9,0xe4,0x93,0x33,0xfd,0x46,0xd2,0xda,0x42,
+  0x2c,0xea,0xbf,0xfe,0xf5,0xaf,0x85,0x7a,0x4a,0x96,0x2d,0x5b,0xa6,0xfe,0xfc,0xe7,
+  0x3f,0xa7,0x2e,0x23,0x51,0xff,0x59,0xfb,0xd7,0x4c,0xe7,0x02,0x00,0x82,0xe8,0xa2,
+  0x8a,0x1e,0x64,0x28,0x5b,0x0c,0x80,0xce,0x4d,0xae,0x0c,0x1c,0x38,0x30,0x73,0xd4,
+  0xbb,0xaa,0x71,0x4c,0xb3,0x7b,0xf7,0xee,0x95,0x97,0x5f,0x7e,0x99,0x7e,0x66,0x40,
+  0xa7,0x26,0x56,0x74,0x9a,0x58,0xd0,0x76,0x75,0x2e,0x79,0x45,0x5b,0xe1,0x15,0xad,
+  0x84,0x54,0x74,0x0e,0xfa,0x3a,0xeb,0xd2,0xae,0xe4,0xca,0x4f,0x7f,0xfa,0xd3,0xca,
+  0x86,0x1b,0x6e,0x18,0xdc,0x97,0x6b,0xae,0xb9,0x26,0xd3,0xfe,0xea,0xf4,0xb7,0xa0,
+  0xf5,0xea,0xf4,0xcb,0xc2,0xee,0xb7,0x6b,0xaf,0xbd,0xd6,0xbb,0x7d,0xad,0xa8,0xb4,
+  0xfc,0xb9,0x00,0x00,0x3f,0x6d,0xa7,0x00,0x68,0xf7,0xa5,0x77,0x19,0x79,0xd0,0x9d,
+  0x7f,0xfe,0xf9,0x95,0x7f,0xfc,0xe3,0x1f,0x95,0xc9,0x93,0x27,0x57,0xf4,0x38,0x7a,
+  0x47,0xd4,0xf3,0x2b,0xaf,0xbc,0x12,0x45,0x73,0x6f,0xb3,0xcd,0x36,0x99,0x85,0xe3,
+  0x9e,0x7b,0xee,0x59,0xd1,0xe3,0xf0,0xf4,0x33,0x90,0x13,0x4f,0x3c,0x31,0x68,0x7b,
+  0x3b,0xec,0xb0,0x43,0x45,0x8f,0x79,0x07,0xad,0x53,0x5b,0xaf,0x95,0x33,0xce,0x38,
+  0x23,0x68,0xbd,0xba,0x08,0x52,0x94,0x4e,0x97,0x25,0x2a,0x7e,0xd0,0xa0,0x41,0x85,
+  0x47,0xdf,0xa7,0xa1,0x5d,0xe6,0x85,0x28,0x20,0xcd,0x76,0x2e,0x00,0x00,0x05,0x20,
+  0x53,0x3b,0xf0,0xc0,0x03,0x2b,0xb7,0xdc,0x72,0x4b,0x87,0x20,0xf4,0xa1,0x8b,0xe8,
+  0x64,0x4e,0xab,0xd3,0x6e,0x79,0xfa,0x19,0xc0,0x0d,0x37,0xdc,0x10,0xb4,0x1d,0x5d,
+  0x3c,0xa6,0x2a,0xc1,0xf0,0x9d,0xef,0x7c,0x27,0x68,0xfd,0xdf,0xff,0xfe,0xf7,0x33,
+  0xad,0xf7,0xcb,0x5f,0xfe,0xb2,0x77,0x9d,0xda,0x2d,0x9e,0x4b,0xfe,0xbd,0xc9,0x1b,
+  0x6f,0xbc,0x11,0x59,0xdf,0x69,0xdb,0xd6,0xd5,0x1d,0x2b,0x3a,0x4e,0xa3,0x2d,0xce,
+  0x05,0x00,0xa0,0x00,0x78,0x9b,0x1e,0x97,0xac,0xda,0x2d,0xab,0x23,0xbb,0x2b,0xeb,
+  0xaf,0xbf,0x7e,0xf0,0xb6,0x3e,0xf6,0xb1,0x8f,0xd1,0xcf,0x00,0xcb,0x50,0xd2,0xc0,
+  0x7c,0xdb,0xd0,0x65,0x64,0xa3,0x65,0xab,0xe5,0xb0,0xc3,0x0e,0x0b,0xda,0x46,0x16,
+  0x9e,0x7c,0xf2,0xc9,0xa0,0xe3,0xf3,0xeb,0x5f,0xff,0x3a,0xf7,0x7b,0xed,0xdc,0x73,
+  0xcf,0xf5,0x6e,0xf7,0x9b,0xdf,0xfc,0x66,0xdb,0x9c,0x0b,0x00,0x40,0x01,0xf0,0x8e,
+  0x87,0xea,0x5a,0xe5,0x35,0x6d,0xfb,0x9f,0xff,0xfc,0x67,0xa6,0x62,0x28,0xb5,0x8c,
+  0x91,0xb7,0x43,0x3f,0x2f,0xbd,0xf4,0xd2,0xa0,0x71,0xe6,0x87,0x1e,0x7a,0xa8,0xa6,
+  0xfe,0x48,0x05,0x3b,0x89,0x59,0xf0,0x6d,0x4b,0x07,0xbf,0x65,0x5a,0xaf,0xe4,0xfb,
+  0xfb,0xd6,0xb9,0xd3,0x4e,0x3b,0xe5,0x7a,0x9f,0x89,0x37,0xc7,0x57,0xdd,0x51,0x8e,
+  0x99,0x4e,0xdd,0x6b,0xab,0x73,0x01,0x00,0x6e,0xda,0x7a,0x1a,0xe0,0x8b,0x2e,0xba,
+  0x28,0xca,0x61,0x97,0x09,0x6f,0x6a,0x61,0xdc,0xb8,0x71,0x4a,0xbb,0x27,0x83,0x97,
+  0xbf,0xf2,0xca,0x2b,0xe9,0xa7,0x03,0x51,0x4a,0xb5,0x75,0xec,0x5d,0x4e,0xea,0xc7,
+  0xef,0xb5,0xd7,0x5e,0x35,0xf5,0x47,0x17,0xb2,0x51,0xe3,0xc7,0x8f,0xf7,0x2e,0x77,
+  0xd5,0x55,0x57,0x65,0x5a,0x6f,0x48,0x4d,0x00,0x5d,0x48,0x47,0x69,0x05,0x29,0xb7,
+  0x73,0x7c,0xf7,0xdd,0x77,0x2b,0x5d,0x3d,0x2f,0x75,0x19,0x99,0xcb,0x61,0xd3,0x4d,
+  0x37,0x6d,0xab,0x73,0x01,0x00,0xe9,0x37,0x79,0x5b,0x7a,0x00,0xf2,0x76,0xc1,0xea,
+  0x99,0xce,0x2a,0x7a,0x82,0x9c,0xa0,0x6d,0xcb,0x38,0x6c,0xb5,0x41,0x72,0xad,0xde,
+  0xcf,0xdb,0x6f,0xbf,0x3d,0x68,0xdd,0x7a,0x42,0xa4,0x5c,0xfa,0x73,0xdb,0x6d,0xb7,
+  0x79,0xb7,0x35,0x78,0xf0,0xe0,0x4c,0xfd,0x90,0x0c,0x8c,0x90,0x8c,0x8a,0xaf,0x7f,
+  0xfd,0xeb,0xb9,0x9d,0x17,0x2d,0x84,0xbd,0xdb,0x93,0x0c,0x81,0x76,0x3b,0x17,0x00,
+  0x80,0x07,0x60,0x2d,0x7e,0xf3,0x9b,0xdf,0x28,0x1d,0x7d,0x9c,0xeb,0x3a,0x65,0x06,
+  0xbe,0xaf,0x7d,0xed,0x6b,0x41,0xcb,0x4a,0x81,0x13,0x1d,0xb0,0x45,0x3f,0x2d,0x68,
+  0x97,0xb3,0x77,0x99,0xcd,0x36,0xdb,0x4c,0xed,0xb3,0xcf,0x3e,0xb9,0xf4,0xe7,0x13,
+  0x9f,0xf8,0x84,0xea,0xd9,0xb3,0x67,0xea,0x32,0x73,0xe6,0xcc,0x89,0x66,0x61,0x0c,
+  0x45,0xaa,0xec,0x49,0x01,0x1b,0x1f,0x7f,0xf9,0xcb,0x5f,0x72,0xa9,0xce,0x28,0xc7,
+  0x59,0x97,0xf5,0x4d,0x5d,0x46,0xf2,0xef,0xc5,0x52,0x6f,0xb7,0x73,0x01,0x00,0x6e,
+  0xda,0x4e,0x01,0xd0,0x93,0xd7,0xa8,0xd3,0x4f,0x3f,0xbd,0x90,0x75,0x4b,0x25,0xbc,
+  0x50,0x7c,0xd3,0xc7,0xb6,0x63,0x3f,0x75,0x1a,0x9d,0x7a,0xf0,0xc1,0x07,0xbd,0xcb,
+  0xe9,0x2c,0x86,0xdc,0xfa,0xa2,0xc7,0x9d,0xd5,0x56,0x5b,0x6d,0xe5,0x5d,0xee,0xf9,
+  0xe7,0x9f,0xcf,0xb4,0xde,0x2f,0x7c,0xe1,0x0b,0xde,0x65,0xa4,0xc8,0xcd,0xbd,0xf7,
+  0xde,0x5b,0x73,0x1f,0xc4,0x2d,0xee,0xab,0xc0,0x28,0xd3,0xfe,0xea,0xf8,0x8d,0xb6,
+  0x3c,0x17,0x00,0x80,0x02,0x10,0xa1,0xd3,0xb4,0x0a,0x5b,0xb7,0x9e,0xce,0x54,0xe9,
+  0xbc,0xf9,0x52,0x28,0x00,0xcd,0xd8,0x4f,0xa9,0x5f,0x1f,0x52,0x25,0x2f,0xc4,0xba,
+  0xce,0x42,0x48,0x5f,0xb2,0x0a,0x9d,0x4f,0x7f,0xfa,0xd3,0xaa,0x7f,0xff,0xfe,0x41,
+  0xc2,0xbb,0x56,0x42,0x4a,0xff,0x7e,0xe9,0x4b,0x5f,0xca,0xb4,0xce,0x56,0x3a,0x17,
+  0x00,0x80,0x02,0x50,0x17,0x42,0x27,0x58,0x29,0x5a,0x01,0x68,0xc6,0x7e,0x4a,0xa9,
+  0xd9,0x10,0x76,0xdb,0x6d,0xb7,0x5c,0xfb,0x32,0x66,0xcc,0x98,0xdc,0x85,0x4e,0xef,
+  0xde,0xbd,0x83,0x82,0xda,0x6e,0xbe,0xf9,0xe6,0x4c,0xa5,0x75,0x6d,0xc7,0xcc,0x37,
+  0x61,0x8e,0xce,0xcf,0x0f,0xb2,0xac,0x5b,0xf5,0x5c,0x00,0x00,0x0a,0x40,0x5d,0x08,
+  0xb5,0x8c,0x75,0xa5,0x3d,0xfa,0x59,0x85,0xd0,0x91,0x31,0xe2,0x11,0x23,0x46,0xe4,
+  0xda,0x97,0x7e,0xfd,0xfa,0x79,0x97,0x79,0xfd,0xf5,0xd7,0x33,0xaf,0x37,0x24,0x1b,
+  0x60,0xf1,0xe2,0xc5,0x4a,0x17,0xda,0xa9,0x7a,0xdf,0x7f,0xff,0xfb,0xdf,0xe7,0x6e,
+  0xfd,0xb7,0xe2,0xb9,0x00,0x80,0x75,0xe9,0xca,0x21,0xc8,0x97,0x2d,0xb6,0xd8,0x22,
+  0x68,0xb9,0xb9,0x73,0xe7,0xd2,0x4f,0x83,0x90,0xa9,0x72,0x57,0xad,0x5a,0x15,0xcd,
+  0x48,0x97,0x27,0x13,0x26,0x4c,0xf0,0x2e,0x53,0xcd,0xec,0x77,0x62,0x79,0xeb,0xe2,
+  0x35,0x4a,0x97,0x59,0x4e,0x5d,0x4e,0x66,0x08,0x3c,0xe9,0xa4,0x93,0x32,0xaf,0x7f,
+  0xfe,0xfc,0xf9,0x4a,0xcf,0x3f,0x90,0xba,0xcc,0x80,0x01,0x03,0x82,0x3c,0x11,0xad,
+  0x7e,0x2e,0xfe,0xfe,0xf7,0xbf,0xab,0xc7,0x1e,0x7b,0xac,0xb4,0xf7,0x93,0x78,0x3e,
+  0x98,0xf4,0x08,0x50,0x00,0xda,0x44,0x01,0x90,0xa0,0xad,0x25,0x4b,0x96,0xa8,0x5e,
+  0xbd,0x7a,0xd1,0x4f,0x8d,0x2e,0x64,0xa3,0x66,0xcf,0x9e,0x1d,0xb4,0xbe,0xbc,0xa2,
+  0xce,0xb3,0x0a,0xdb,0xac,0xe8,0x02,0x39,0x51,0xf0,0x9d,0xaf,0x76,0x82,0x08,0x51,
+  0x99,0xf2,0x56,0x62,0x2b,0xb2,0xa0,0xd3,0xfa,0x22,0x0f,0x42,0x1a,0x32,0x1d,0x74,
+  0xd6,0x6b,0xac,0x15,0xcf,0x85,0xcc,0x90,0x28,0xc7,0xab,0xac,0xc8,0x10,0x0d,0x0a,
+  0x00,0xd4,0x1b,0x86,0x00,0x72,0x46,0x4f,0x06,0x13,0x1c,0x6d,0x5d,0x8f,0x39,0xd5,
+  0x9b,0xa5,0x9f,0x7a,0xb6,0xb9,0xa8,0xf0,0x4c,0x59,0x11,0x41,0x2b,0x16,0x6f,0x56,
+  0xf4,0x24,0x3a,0x91,0x22,0x90,0x86,0xf4,0x5b,0xa6,0x6e,0xce,0x4a,0x11,0xc1,0x7f,
+  0xad,0x7c,0x2e,0x00,0x00,0x05,0xa0,0x70,0x24,0x57,0x3e,0xf4,0x41,0x4b,0x3f,0x3f,
+  0x24,0xc4,0xe2,0x6c,0x34,0xd5,0x58,0x9e,0x32,0x04,0x10,0x52,0x25,0x2f,0xab,0x02,
+  0xf0,0xe2,0x8b,0x2f,0x46,0x91,0xfa,0x69,0xec,0xb2,0xcb,0x2e,0x6a,0xfb,0xed,0xb7,
+  0xcf,0xbc,0xcf,0xad,0x7a,0x2e,0x00,0x00,0x05,0xa0,0x34,0x82,0xb1,0x96,0xe8,0xef,
+  0x56,0xeb,0xa7,0x14,0x78,0x29,0x3b,0xd5,0x9e,0xaf,0x90,0x60,0x40,0x5d,0x0b,0x3f,
+  0xd3,0x18,0x75,0x51,0xd6,0x7f,0xab,0x9f,0x0b,0x00,0x40,0x01,0x28,0x14,0x49,0x01,
+  0x0b,0xa1,0x6b,0xd7,0xae,0xf4,0x73,0x0d,0xcd,0x10,0x14,0x59,0x6d,0xd5,0xbe,0xa3,
+  0x8f,0x3e,0x3a,0xe8,0x58,0x85,0xd6,0x04,0x58,0xb6,0x6c,0x59,0x34,0xa6,0x9d,0x46,
+  0xdf,0xbe,0x7d,0xd5,0xf1,0xc7,0x1f,0x5f,0xd5,0xfe,0xb6,0xf2,0xb9,0x00,0x00,0x14,
+  0x80,0x42,0xf1,0x55,0x65,0x8b,0x91,0x08,0x6d,0xfa,0xd9,0x3c,0x0f,0xf4,0x6a,0x15,
+  0x36,0x49,0x6d,0x3b,0xf2,0xc8,0x23,0xbd,0xcb,0x5d,0x77,0xdd,0x75,0x91,0x70,0xf7,
+  0x71,0xd3,0x4d,0x37,0x79,0xad,0x74,0x11,0xfe,0xa2,0x04,0xb4,0xaa,0x70,0x6d,0x76,
+  0xe5,0x19,0xa0,0x14,0xf7,0x11,0x87,0x20,0x7f,0x16,0x2d,0x5a,0x14,0xb4,0xdc,0xc0,
+  0x81,0x03,0xe9,0xe7,0x1a,0xf4,0x24,0x2f,0x2d,0x2d,0x74,0xa4,0x34,0xb0,0xcf,0x6a,
+  0x97,0x58,0x09,0x3d,0x21,0x8e,0x37,0x6d,0xaf,0x48,0xf7,0x7f,0xab,0x9e,0x8b,0xdd,
+  0x77,0xdf,0x5d,0xcd,0x9a,0x35,0xab,0xb4,0xfd,0xc9,0x5a,0xa8,0x09,0x00,0x05,0xa0,
+  0xc9,0x05,0x63,0xb3,0x7b,0x00,0xf2,0xec,0xe7,0x7a,0xeb,0xad,0x17,0xb4,0xae,0xef,
+  0x7d,0xef,0x7b,0x99,0xa6,0x24,0x2e,0x0b,0x32,0x15,0xef,0xa8,0x51,0xa3,0x94,0x9e,
+  0x29,0x30,0x75,0x39,0xa9,0x09,0x90,0xa6,0x00,0x48,0x4d,0x81,0xfb,0xef,0xbf,0x3f,
+  0x75,0x1d,0x12,0xf8,0x27,0x01,0x80,0xd5,0xd2,0x8a,0xe7,0xe2,0xcc,0x33,0xcf,0x8c,
+  0x1a,0x00,0xfc,0x7f,0x18,0x02,0x28,0x00,0x5f,0x6e,0xb6,0x20,0x6e,0xe1,0x2e,0x5d,
+  0xba,0xd0,0xcf,0x8c,0x42,0x27,0xa4,0x50,0x4c,0x29,0x6f,0xb4,0xce,0x9d,0xa3,0x94,
+  0x40,0x1f,0x77,0xdf,0x7d,0xb7,0x7a,0xff,0xfd,0xf7,0x9d,0xdf,0xff,0xe1,0x0f,0x7f,
+  0xf0,0xa6,0xe8,0xd5,0x62,0xfd,0xb7,0xc3,0xb9,0x00,0x00,0x14,0x80,0x42,0x90,0xa9,
+  0x59,0x43,0xc6,0x50,0x9b,0xdd,0xfd,0x9f,0x77,0x3f,0xa5,0xae,0x40,0x88,0xa2,0xd0,
+  0xcc,0x42,0x47,0x8a,0x02,0xf9,0x90,0x22,0x3c,0x32,0x4d,0xb0,0x0d,0xc9,0x7d,0x17,
+  0x05,0x20,0x0d,0x29,0xfa,0xf3,0x99,0xcf,0x7c,0xa6,0xa6,0xfd,0x6c,0x87,0x73,0x01,
+  0x00,0x28,0x00,0xb9,0xe3,0x9b,0x98,0x25,0x66,0xf3,0xcd,0x37,0xa7,0x9f,0x09,0xa4,
+  0x58,0x8e,0xcc,0x59,0xef,0x43,0xd2,0xe5,0x42,0x87,0x1e,0xca,0x86,0x54,0x4f,0x94,
+  0xb1,0x68,0x1f,0xae,0x6c,0x00,0xf1,0x0e,0xc8,0x14,0xc2,0x69,0xc8,0xf0,0x41,0xad,
+  0xca,0x65,0x3b,0x9c,0x0b,0x00,0x40,0x01,0x68,0x98,0x60,0xac,0x65,0x8c,0xb6,0x55,
+  0xfb,0xb9,0xd3,0x4e,0x3b,0x05,0x59,0xc8,0x22,0x08,0x9b,0x15,0x09,0x06,0xf4,0x21,
+  0xb3,0xdd,0x49,0xa1,0x1f,0x93,0xa2,0x26,0xfe,0x69,0xd7,0x73,0x01,0x80,0x02,0x00,
+  0x28,0x00,0x25,0xe9,0x67,0xe8,0xdc,0xf2,0xb7,0xdc,0x72,0x4b,0xd3,0x1e,0xb7,0x63,
+  0x8e,0x39,0x26,0xa8,0x84,0xb2,0xe9,0x05,0x90,0x21,0x97,0x3b,0xee,0xb8,0x23,0xf5,
+  0x37,0x12,0x49,0x2e,0x13,0x10,0xe5,0x41,0x3b,0x9c,0x0b,0x00,0x14,0x00,0xc8,0x95,
+  0xd0,0x79,0xd4,0x9b,0x5d,0x01,0x28,0xa2,0x9f,0xfb,0xed,0xb7,0x5f,0xd0,0x72,0x77,
+  0xde,0x79,0x67,0x64,0x7d,0x36,0x23,0x32,0xbe,0x7e,0xf8,0xe1,0x87,0x7b,0x97,0x93,
+  0x38,0x80,0x64,0xbd,0x7b,0x51,0x08,0x7c,0x75,0x17,0xf2,0xb2,0xfe,0xdb,0xe5,0x5c,
+  0x00,0xa0,0x00,0x40,0x6e,0x48,0xf4,0xb6,0xaf,0x3e,0xbb,0x30,0x74,0xe8,0xd0,0x28,
+  0x25,0x8c,0x7e,0xae,0x8d,0xa4,0xaf,0x85,0x8c,0x3d,0x4b,0x11,0x9c,0xbf,0xfd,0xed,
+  0x6f,0x4d,0x7b,0xfc,0x42,0x4a,0x03,0xcf,0x98,0x31,0x43,0xdd,0x73,0xcf,0x3d,0x1d,
+  0x7f,0xfb,0x72,0xff,0xc5,0xab,0x10,0x12,0x64,0xc8,0xb9,0x00,0x00,0x14,0x80,0x02,
+  0x90,0x39,0xc7,0x43,0x22,0xe3,0x0f,0x39,0xe4,0x10,0xfa,0x69,0xbb,0x18,0x75,0xaa,
+  0x5c,0xa8,0xe5,0x79,0xfe,0xf9,0xe7,0x37,0xed,0x8c,0x70,0x07,0x1d,0x74,0x90,0x1a,
+  0x36,0x6c,0x98,0x77,0x39,0xa9,0x09,0x20,0x88,0xb7,0xc5,0x37,0xe4,0x72,0xc4,0x11,
+  0x47,0x04,0x09,0x6c,0xce,0x05,0x00,0xa0,0x00,0x14,0x80,0x2b,0x7d,0xcb,0xe4,0x94,
+  0x53,0x4e,0xa1,0x9f,0x0e,0xce,0x38,0xe3,0x8c,0xa0,0xe5,0x44,0x20,0x5e,0x73,0xcd,
+  0x35,0x4d,0x79,0xfc,0xa4,0x8a,0x5d,0x48,0xaa,0xde,0xad,0xb7,0xde,0x1a,0x4d,0xa5,
+  0x5c,0xcf,0xe0,0xbf,0x76,0x3b,0x17,0x00,0x28,0x00,0x6d,0xc4,0xd2,0xa5,0x4b,0x0b,
+  0x59,0xaf,0x58,0x69,0xf7,0xde,0x7b,0xaf,0x77,0xb9,0x2d,0xb7,0xdc,0x52,0x7d,0xfc,
+  0xe3,0x1f,0xa7,0x9f,0x0e,0xf6,0xdc,0x73,0x4f,0xb5,0xf7,0xde,0x7b,0x07,0x2d,0x7b,
+  0xce,0x39,0xe7,0xa8,0x77,0xdf,0x7d,0xb7,0x29,0xaf,0xc3,0x10,0x77,0xbd,0x9c,0x43,
+  0x11,0xfe,0xd7,0x5f,0x7f,0x7d,0xea,0x72,0x9b,0x6e,0xba,0x69,0x54,0x69,0x30,0x6f,
+  0xda,0xe5,0x5c,0x00,0xa0,0x00,0xb4,0x09,0x22,0x94,0xde,0x7a,0xeb,0xad,0xdc,0xd7,
+  0x7b,0xde,0x79,0xe7,0x05,0x2d,0x77,0xf2,0xc9,0x27,0xd3,0x4f,0x0f,0xe7,0x9e,0x7b,
+  0x6e,0xd0,0x72,0x12,0x19,0x2f,0x33,0xed,0x2d,0x5f,0xbe,0xbc,0xe9,0xae,0xc3,0xed,
+  0xb6,0xdb,0x4e,0xed,0xb8,0xe3,0x8e,0xde,0xe5,0xce,0x3e,0xfb,0x6c,0x6f,0xc5,0x45,
+  0xf1,0xb4,0x48,0xee,0x7e,0x11,0xb4,0xc3,0xb9,0x00,0x40,0x01,0x68,0x13,0x9e,0x7b,
+  0xee,0xb9,0x28,0xc7,0x39,0xc4,0x8a,0x0d,0xe5,0xb2,0xcb,0x2e,0x53,0x0f,0x3c,0xf0,
+  0x80,0x77,0xb9,0x9e,0x3d,0x7b,0xe6,0x1a,0xa8,0xd5,0xaa,0xfd,0x3c,0xe0,0x80,0x03,
+  0xd4,0x6e,0xbb,0xed,0x16,0xb4,0xec,0xe3,0x8f,0x3f,0x1e,0x09,0xc0,0xd0,0x99,0x09,
+  0xcb,0x44,0x48,0x30,0xa0,0x0f,0x19,0x4e,0x08,0xa9,0x2d,0xc0,0xb9,0x00,0x80,0xb6,
+  0x57,0x00,0x84,0xd9,0xb3,0x67,0xab,0x83,0x0f,0x3e,0x38,0x9a,0xc8,0xa4,0x56,0x57,
+  0xb9,0x44,0x6a,0x9f,0x75,0xd6,0x59,0xc1,0xd6,0xd4,0x06,0x1b,0x6c,0x40,0x3f,0x03,
+  0xb8,0xf4,0xd2,0x4b,0x55,0xf7,0xee,0xdd,0x83,0x96,0xbd,0xfa,0xea,0xab,0x23,0x41,
+  0x35,0x73,0xe6,0xcc,0x42,0x8e,0xa3,0x04,0xb8,0xf9,0xa6,0xdf,0xad,0x06,0x99,0xb2,
+  0xb7,0x5b,0xb7,0x6e,0x35,0xad,0xe3,0xb0,0xc3,0x0e,0x0b,0x0a,0x28,0xe4,0x5c,0x00,
+  0xc0,0x3a,0x54,0x0a,0xe6,0xe2,0x8b,0x2f,0x96,0x99,0x4b,0xbc,0xad,0x5e,0xdb,0x31,
+  0xdb,0x46,0x1b,0x6d,0x54,0xd1,0x63,0xac,0x55,0x6d,0x53,0xd7,0x65,0xaf,0xe8,0x39,
+  0xd7,0x83,0xb6,0xf3,0x91,0x8f,0x7c,0xa4,0xa2,0xdd,0xa3,0xf4,0x33,0x03,0xda,0xe3,
+  0x90,0xa9,0x8f,0xa3,0x47,0x8f,0xae,0xe8,0x60,0xb4,0x8a,0x16,0x12,0x35,0x6f,0x5b,
+  0x4f,0xcd,0x5b,0xb9,0xee,0xba,0xeb,0x2a,0x9f,0xfd,0xec,0x67,0x2b,0x3a,0xba,0xbe,
+  0xb2,0xe1,0x86,0x1b,0x16,0x72,0x7f,0xe8,0x9a,0x00,0x55,0x9d,0xcf,0xb8,0xdd,0x75,
+  0xd7,0x5d,0x95,0x7a,0xd0,0x0e,0xe7,0x02,0xa0,0xdd,0x68,0x7b,0x05,0x20,0x6e,0xba,
+  0x82,0x5a,0x45,0xcf,0xd7,0x5e,0x59,0xb8,0x70,0xa1,0x77,0x5b,0x2f,0xbf,0xfc,0x72,
+  0x45,0xa7,0x5d,0x05,0xaf,0x5b,0x8f,0xcf,0x56,0x1e,0x79,0xe4,0x91,0xba,0x1e,0xcf,
+  0x66,0xef,0x67,0x8c,0x9e,0x41,0x2f,0x73,0x1f,0x75,0xcd,0xfd,0x48,0x69,0xd1,0x56,
+  0x68,0xa6,0x6d,0x4d,0x9a,0x34,0xa9,0xf2,0x8b,0x5f,0xfc,0xa2,0xa2,0xab,0xe0,0x55,
+  0xb4,0x65,0xbe,0xd6,0x3a,0x75,0x4d,0x83,0x42,0xee,0x8f,0x9b,0x6f,0xbe,0xb9,0xea,
+  0x73,0x29,0x42,0x36,0x0f,0x01,0xcb,0xb9,0x00,0x68,0x4f,0xba,0xe2,0x03,0xf9,0x10,
+  0x89,0x6e,0x97,0xd6,0xa7,0x4f,0x9f,0xa8,0x52,0x9b,0x8c,0x7b,0x6a,0xab,0x59,0x69,
+  0x6b,0x23,0x72,0x9f,0x4b,0x84,0xb3,0x7e,0x28,0x45,0x11,0xd9,0x52,0xab,0x3d,0x0b,
+  0xa7,0x9e,0x7a,0x6a,0x6e,0x25,0x5a,0xdb,0xad,0x9f,0x97,0x5f,0x7e,0x79,0xb4,0x1f,
+  0x2f,0xbd,0xf4,0x52,0xf0,0x6f,0x24,0x2d,0xed,0xa4,0x93,0x4e,0x8a,0x02,0xe3,0x24,
+  0xd8,0x6e,0x9f,0x7d,0xf6,0x51,0x9b,0x6c,0xb2,0x49,0x94,0x27,0xdf,0xbb,0x77,0xef,
+  0x68,0x02,0x9b,0xb9,0x73,0xe7,0x46,0x41,0x92,0xd2,0xde,0x7e,0xfb,0xed,0xe8,0x55,
+  0x02,0xd9,0xea,0xcd,0x27,0x3f,0xf9,0xc9,0x68,0xfa,0xdd,0x59,0xb3,0x66,0x65,0xfe,
+  0xad,0x04,0x5a,0x4a,0xbe,0x7e,0xbd,0x68,0xf5,0x73,0x01,0xc0,0x10,0x40,0x9b,0x7a,
+  0x00,0x8a,0x6a,0x87,0x1e,0x7a,0x68,0x6e,0x2e,0xf1,0x76,0xea,0x67,0x12,0x5d,0x15,
+  0xaf,0xb2,0xeb,0xae,0xbb,0x36,0xb4,0x7f,0x45,0x5a,0x9d,0x3a,0xdf,0x3e,0xf3,0xfe,
+  0xe8,0xe9,0x7a,0x2b,0x53,0xa7,0x4e,0xad,0xbb,0xc5,0xd0,0xea,0xe7,0x02,0xa0,0x9d,
+  0x68,0xbb,0x20,0xc0,0x6f,0x7f,0xfb,0xdb,0x75,0xdb,0x96,0x54,0x52,0x13,0x4b,0xba,
+  0xd6,0x40,0xaf,0x76,0xef,0xa7,0x94,0x14,0x7e,0xf0,0xc1,0x07,0xd5,0x51,0x47,0x1d,
+  0xd5,0x92,0xd7,0x64,0x35,0xd9,0x00,0x12,0xdc,0x39,0x72,0xe4,0xc8,0xba,0xef,0x6b,
+  0xab,0x9f,0x0b,0x80,0x76,0xa2,0xed,0x14,0x80,0x1f,0xff,0xf8,0xc7,0xea,0x82,0x0b,
+  0x2e,0x28,0x7c,0x3b,0xe3,0xc6,0x8d,0x53,0xb7,0xdd,0x76,0x5b,0x94,0x12,0x47,0x3f,
+  0x6b,0xa7,0x57,0xaf,0x5e,0x91,0x92,0x21,0x05,0x67,0x5a,0x0d,0x49,0xd7,0xdc,0x7a,
+  0xeb,0xad,0x33,0xfd,0xa6,0x88,0xca,0x7f,0x9c,0x0b,0x00,0x14,0x80,0x96,0xe7,0x5b,
+  0xdf,0xfa,0x96,0xd2,0x81,0x49,0xd1,0xcc,0x6c,0x79,0xa3,0x5d,0xb3,0xea,0x1b,0xdf,
+  0xf8,0x86,0xba,0xef,0xbe,0xfb,0xa2,0x71,0x76,0xfa,0x99,0x1f,0x32,0x8e,0xfc,0xd3,
+  0x9f,0xfe,0x54,0xe9,0xc8,0xf7,0x68,0x3c,0xb9,0x95,0xc8,0x92,0xcb,0x3f,0x7c,0xf8,
+  0x70,0xf5,0xa9,0x4f,0x7d,0xaa,0xa1,0xfb,0xdb,0xca,0xe7,0x02,0x00,0x05,0xa0,0xc5,
+  0x91,0x07,0xae,0x04,0x28,0xc9,0x6b,0x5e,0x55,0xd4,0xb6,0xdd,0x76,0x5b,0xf5,0xe4,
+  0x93,0x4f,0xaa,0x0b,0x2f,0xbc,0xb0,0x61,0x96,0x7f,0x3b,0xf4,0x53,0xdc,0xdf,0xff,
+  0xfa,0xd7,0xbf,0xa2,0x29,0x72,0x25,0x80,0xb1,0x48,0x64,0x58,0x43,0xbc,0x1c,0xa7,
+  0x9f,0x7e,0x7a,0xa1,0xdb,0x39,0xe1,0x84,0x13,0x22,0xa5,0x2a,0x04,0x09,0xaa,0x93,
+  0x02,0x40,0x65,0xa0,0x15,0xcf,0x05,0x40,0xdb,0x50,0x74,0x90,0x81,0x8e,0x1c,0xf6,
+  0x06,0xf5,0x68,0x0b,0xb2,0xa1,0xc1,0x86,0x3a,0x2a,0xbe,0x32,0x7e,0xfc,0xf8,0x68,
+  0x3f,0x54,0xc6,0x80,0x24,0x1d,0x85,0x5d,0xd1,0x63,0xe0,0x15,0x5d,0xb3,0xbd,0xb0,
+  0x20,0xb8,0x76,0xec,0x67,0x28,0x3a,0x73,0xa1,0x72,0xe5,0x95,0x57,0x46,0xe9,0x8a,
+  0xfd,0xfa,0xf5,0xab,0x39,0xc0,0x4c,0x2b,0x34,0x15,0x5d,0xff,0xbe,0xa2,0x4b,0x1e,
+  0x57,0x74,0x15,0xc5,0x8a,0x8e,0x52,0xaf,0x5b,0x5f,0xf4,0xec,0x89,0x41,0xa9,0x96,
+  0x93,0x27,0x4f,0x2e,0x65,0x40,0x51,0x2b,0x9d,0x0b,0x80,0x76,0xa0,0x93,0xfc,0xd7,
+  0x0a,0x8a,0xcc,0x25,0x97,0x5c,0x12,0xd5,0x4d,0x0f,0x50,0x78,0x9c,0xdf,0x2d,0x59,
+  0xb2,0x24,0x72,0x69,0xea,0xdc,0xec,0xc8,0x6a,0x96,0x94,0x38,0x49,0x47,0x5a,0xb9,
+  0x72,0x65,0x34,0xdf,0xba,0x94,0x38,0x95,0x0a,0x77,0x23,0x46,0x8c,0x88,0x02,0xb0,
+  0x24,0xf8,0xed,0x98,0x63,0x8e,0x89,0x5c,0xb2,0xf4,0xb3,0xf1,0xc8,0x7e,0xeb,0x3a,
+  0x04,0xd1,0x74,0xc5,0x92,0xaa,0xf6,0xfe,0xfb,0xef,0x47,0x4d,0xaa,0xd2,0xc9,0x77,
+  0xd2,0xb7,0x65,0xcb,0x96,0x29,0x2d,0x9c,0xa2,0xbe,0x48,0x05,0x3d,0x79,0x95,0x26,
+  0x69,0x90,0x92,0x12,0xa9,0x23,0xdc,0xa3,0xe5,0x80,0x73,0x01,0xd0,0xea,0xa0,0x00,
+  0x78,0x90,0x79,0xef,0x25,0x4f,0x59,0x5c,0xae,0x32,0xd6,0xdd,0x68,0xd7,0x6b,0xbb,
+  0xf4,0x33,0x67,0x2f,0x57,0xd4,0x37,0x71,0xb1,0xc7,0xfd,0x03,0xce,0x05,0x40,0xbb,
+  0x43,0x21,0x20,0x0f,0x52,0x68,0x45,0x8a,0x96,0xd0,0xcf,0x26,0xd6,0x72,0x75,0xec,
+  0xc3,0xe0,0xc1,0x83,0xb9,0x98,0x39,0x17,0x00,0x90,0x7c,0xee,0x73,0x08,0x00,0x00,
+  0x00,0x50,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+  0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,
+  0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x50,0x00,0x00,
+  0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x00,0x05,0x00,
+  0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x20,0x23,0x2d,0x33,0x1d,0xf0,0x56,0x5b,
+  0x6d,0xa5,0xf6,0xdd,0x77,0xdf,0xd4,0x65,0xfa,0xf6,0xed,0x4b,0x3f,0x01,0x00,0x00,
+  0x34,0x9d,0x2a,0x1a,0x0e,0x03,0x00,0x00,0x40,0x7b,0xc1,0x10,0x00,0x00,0x00,0x00,
+  0x0a,0x00,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x00,
+  0xa0,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x00,
+  0x00,0x0a,0x00,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+  0x00,0xa0,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+  0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,
+  0x00,0x00,0xa0,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,
+  0x00,0x00,0xa0,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0xa0,0x00,0x00,
+  0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,
+  0x00,0x00,0x00,0x94,0x8a,0xae,0x1c,0x02,0x00,0x28,0x33,0x2b,0x57,0xae,0x54,0x73,
+  0xe7,0xce,0x4d,0x5d,0xa6,0x5b,0xb7,0x6e,0x6a,0xe0,0xc0,0x81,0x1c,0x2c,0x00,0x14,
+  0x00,0x00,0x68,0x15,0x7e,0xf7,0xbb,0xdf,0xa9,0x33,0xcf,0x3c,0x33,0x75,0x99,0xee,
+  0xdd,0xbb,0xab,0x65,0xcb,0x96,0x71,0xb0,0x00,0x32,0xc0,0x10,0x00,0x00,0x94,0x9a,
+  0xe5,0xcb,0x97,0xe7,0xb2,0x0c,0x00,0xa0,0x00,0x00,0x00,0x00,0xa0,0x00,0x70,0x08,
+  0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x50,0x00,
+  0x00,0x00,0x00,0xa0,0x25,0x20,0x0d,0x10,0x00,0xa0,0x4d,0x59,0xb0,0x60,0x81,0x7a,
+  0xf3,0xcd,0x37,0xa3,0x36,0x65,0xca,0x94,0xe8,0x75,0xda,0xb4,0x69,0xea,0xdc,0x73,
+  0xcf,0x55,0xdb,0x6d,0xb7,0x1d,0x07,0x08,0x05,0x00,0x00,0x00,0x5a,0x81,0xf9,0xf3,
+  0xe7,0xab,0x93,0x4f,0x3e,0xb9,0x43,0xe0,0xcf,0x9e,0x3d,0xdb,0xba,0xdc,0xe1,0x87,
+  0x1f,0x8e,0x02,0x80,0x02,0x00,0x00,0xd0,0x58,0xc6,0x8f,0x1f,0xaf,0x36,0xd8,0x60,
+  0x83,0xd4,0x65,0xfa,0xf6,0xed,0xcb,0x81,0x0a,0x60,0xc9,0x92,0x25,0xea,0x86,0x1b,
+  0x6e,0xe0,0x40,0x00,0x0a,0x00,0x00,0x94,0x9f,0xd1,0xa3,0x47,0xab,0x13,0x4f,0x3c,
+  0x91,0x03,0x01,0x90,0x33,0x04,0x01,0x02,0x00,0x00,0xa0,0x00,0x00,0x00,0x00,0x00,
+  0x0a,0x00,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x00,
+  0x34,0x29,0x64,0x01,0x00,0x34,0x88,0x79,0xf3,0xe6,0x75,0x14,0x61,0x79,0xeb,0xad,
+  0xb7,0xd4,0xea,0xd5,0xab,0xd5,0xd0,0xa1,0x43,0xd5,0xf0,0xe1,0xc3,0xd5,0xb0,0x61,
+  0xc3,0xd4,0xa8,0x51,0xa3,0x54,0x9f,0x3e,0x7d,0x9a,0xba,0x8f,0x92,0x76,0x36,0x79,
+  0xf2,0xe4,0xa8,0x49,0xde,0xf9,0xaa,0x55,0xab,0xd4,0x7a,0xeb,0xad,0x17,0xb5,0xfd,
+  0xf7,0xdf,0x5f,0x75,0xef,0xde,0xbd,0x6d,0xce,0x75,0x7c,0x1c,0xde,0x7e,0xfb,0x6d,
+  0xd5,0xb9,0x73,0x67,0xb5,0xfe,0xfa,0xeb,0x47,0xe9,0x8d,0x5b,0x6c,0xb1,0x45,0x74,
+  0xae,0xc1,0xcf,0xa2,0x45,0x8b,0xd4,0xd4,0xa9,0x53,0xd5,0xf4,0xe9,0xd3,0xd5,0xbb,
+  0xef,0xbe,0x1b,0xbd,0x2e,0x5c,0xb8,0x50,0x0d,0x19,0x32,0x24,0xba,0x67,0xa4,0x8d,
+  0x18,0x31,0x42,0x6d,0xb2,0xc9,0x26,0xaa,0x53,0xa7,0x4e,0xdc,0x3b,0x28,0x00,0x00,
+  0xb5,0x21,0x37,0xdf,0x03,0x0f,0x3c,0x90,0xba,0x8c,0x08,0xea,0x63,0x8f,0x3d,0x36,
+  0x75,0x99,0x95,0x2b,0x57,0xaa,0x1b,0x6f,0xbc,0x51,0xfd,0xee,0x77,0xbf,0x53,0x2f,
+  0xbc,0xf0,0x82,0xfa,0xe0,0x83,0x0f,0xd2,0x6f,0xce,0xae,0x5d,0xd5,0xbe,0xfb,0xee,
+  0xab,0x8e,0x3a,0xea,0x28,0x75,0xc4,0x11,0x47,0x78,0x73,0xe1,0xcb,0xd2,0xcf,0xd7,
+  0x5f,0x7f,0x5d,0xfd,0xec,0x67,0x3f,0x53,0x7f,0xff,0xfb,0xdf,0xa3,0x07,0x74,0xa5,
+  0x52,0xb1,0x2e,0xf7,0xce,0x3b,0xef,0x44,0x0f,0xeb,0x7a,0xed,0x57,0x3d,0xb7,0x23,
+  0x0f,0xeb,0xdb,0x6e,0xbb,0x4d,0x5d,0x76,0xd9,0x65,0xea,0xd9,0x67,0x9f,0x55,0x73,
+  0xe7,0xce,0x4d,0x5d,0x7e,0xab,0xad,0xb6,0x52,0x07,0x1f,0x7c,0xb0,0xfa,0xea,0x57,
+  0xbf,0x1a,0x09,0xaf,0x3c,0x84,0xc7,0x5f,0xff,0xfa,0xd7,0x75,0x8e,0xfd,0xcc,0x99,
+  0x33,0x83,0x7e,0x7f,0xe7,0x9d,0x77,0xaa,0x65,0xcb,0x96,0x65,0xda,0xe6,0xae,0xbb,
+  0xee,0xaa,0xb6,0xd9,0x66,0x9b,0xdc,0xaf,0x4b,0x29,0x56,0x74,0xeb,0xad,0xb7,0xaa,
+  0xeb,0xaf,0xbf,0x5e,0xdd,0x77,0xdf,0x7d,0x6a,0xc5,0x8a,0x15,0xde,0xdf,0x88,0x42,
+  0x25,0xf7,0xcc,0x91,0x47,0x1e,0xa9,0xf6,0xd8,0x63,0x0f,0xd5,0xa5,0x4b,0x97,0xb6,
+  0xbc,0x77,0xbc,0x54,0x00,0x20,0x95,0x8b,0x2f,0xbe,0x58,0xee,0x42,0x6f,0x73,0xa1,
+  0x1f,0x60,0x95,0x9f,0xfc,0xe4,0x27,0x95,0x91,0x23,0x47,0x06,0xad,0xc7,0xd6,0xb4,
+  0xc5,0x58,0x39,0xfe,0xf8,0xe3,0x2b,0xfa,0xa1,0x50,0xda,0x7e,0x3e,0xf5,0xd4,0x53,
+  0x15,0xad,0xac,0x44,0xfb,0x1a,0xb2,0x1e,0xfd,0x10,0xab,0xcb,0x7e,0xd5,0xab,0xff,
+  0xf1,0xb9,0xbe,0xe8,0xa2,0x8b,0x2a,0x1b,0x6d,0xb4,0x51,0x55,0xe7,0xb9,0x5b,0xb7,
+  0x6e,0x95,0xaf,0x7c,0xe5,0x2b,0x15,0x2d,0xa8,0x6b,0xea,0xcb,0x33,0xcf,0x3c,0x53,
+  0xf5,0xb5,0x56,0x6d,0x3b,0xeb,0xac,0xb3,0x72,0xbd,0x1e,0x27,0x4e,0x9c,0x58,0xd1,
+  0x15,0x09,0x2b,0x5a,0x11,0xae,0x69,0xbf,0x36,0xde,0x78,0xe3,0xca,0x1d,0x77,0xdc,
+  0x51,0xea,0x67,0x44,0x51,0xf7,0x8e,0x0f,0x62,0x00,0x00,0x0a,0xe4,0xe6,0x9b,0x6f,
+  0x8e,0x0a,0xd9,0x7c,0xeb,0x5b,0xdf,0x8a,0x6a,0xac,0x57,0x8b,0x0c,0x0f,0x5c,0x7b,
+  0xed,0xb5,0x6a,0xcb,0x2d,0xb7,0x8c,0x3c,0x08,0xf2,0x77,0x59,0x90,0x7d,0x39,0xfd,
+  0xf4,0xd3,0x23,0x0b,0x50,0x3c,0x1c,0x65,0xda,0xb7,0x7a,0xf2,0xe7,0x3f,0xff,0x39,
+  0x3a,0xd7,0xdf,0xf8,0xc6,0x37,0xa2,0x21,0x9d,0x6a,0x10,0xeb,0x56,0xbc,0x06,0xbb,
+  0xec,0xb2,0x8b,0x7a,0xf9,0xe5,0x97,0xdb,0xf2,0x38,0x8a,0xe7,0xe1,0xfb,0xdf,0xff,
+  0x7e,0xe4,0x4d,0x10,0xcb,0x5f,0x3c,0x67,0xb5,0x20,0x43,0x6c,0x87,0x1e,0x7a,0x68,
+  0xe4,0x49,0x13,0xcb,0xb9,0x4c,0x34,0xfa,0xde,0x41,0x01,0x00,0x28,0x88,0x4b,0x2e,
+  0xb9,0x44,0x1d,0x7d,0xf4,0xd1,0xd1,0xb8,0x65,0x5e,0xc8,0x58,0xb2,0xb6,0x10,0xa3,
+  0x07,0x5a,0x56,0x17,0x6d,0x51,0x0f,0x6b,0x71,0x6b,0x8a,0xd0,0x6a,0x57,0x44,0x68,
+  0x8b,0xeb,0x5e,0xaa,0x15,0xe6,0x75,0xae,0x45,0x68,0x8d,0x1b,0x37,0x4e,0x3d,0xfe,
+  0xf8,0xe3,0x6d,0x75,0x2c,0x9f,0x7b,0xee,0xb9,0x48,0xf0,0xff,0xe0,0x07,0x3f,0xc8,
+  0xfd,0xfa,0xbe,0xe9,0xa6,0x9b,0xd4,0x0e,0x3b,0xec,0xa0,0xfe,0xfd,0xef,0x7f,0x97,
+  0x46,0xd1,0x69,0xf4,0xbd,0x83,0x02,0x00,0x90,0x33,0x62,0xb1,0x9c,0x76,0xda,0x69,
+  0xea,0xec,0xb3,0xcf,0x2e,0x4c,0xa3,0xbf,0xeb,0xae,0xbb,0x22,0x8b,0x66,0xf9,0xf2,
+  0xe5,0x0d,0xeb,0xa7,0x4c,0x2c,0x73,0xc8,0x21,0x87,0xb4,0x75,0x6d,0x79,0xb1,0x28,
+  0xf7,0xde,0x7b,0x6f,0xf5,0xdb,0xdf,0xfe,0x36,0xf7,0x75,0x8b,0xb2,0x27,0x0a,0x64,
+  0xe8,0xb8,0x7d,0xb3,0xf3,0xc4,0x13,0x4f,0xa8,0xfd,0xf6,0xdb,0x4f,0x4d,0x9a,0x34,
+  0xa9,0xb0,0x6d,0xcc,0x9a,0x35,0x4b,0x1d,0x70,0xc0,0x01,0xea,0xb5,0xd7,0x5e,0x6b,
+  0x68,0x5f,0xcb,0x72,0xef,0xa0,0x00,0x00,0xe4,0xcc,0x67,0x3f,0xfb,0x59,0x75,0xc5,
+  0x15,0x57,0x14,0xbe,0x1d,0x09,0xd4,0x3a,0xe6,0x98,0x63,0x82,0x82,0xa2,0xf2,0x46,
+  0x82,0xdc,0x24,0x68,0xcd,0x17,0xf8,0xd4,0xca,0xbc,0xf1,0xc6,0x1b,0x6a,0xa7,0x9d,
+  0x76,0x2a,0xd4,0x4a,0x97,0x48,0x77,0xb9,0x9e,0x5a,0x9d,0x87,0x1f,0x7e,0x58,0x1d,
+  0x74,0xd0,0x41,0x91,0xd2,0x53,0x34,0xef,0xbd,0xf7,0x5e,0x14,0x45,0x2f,0x5e,0x96,
+  0x46,0x50,0xa6,0x7b,0x07,0x05,0x00,0x20,0x47,0xae,0xbe,0xfa,0x6a,0x75,0xdd,0x75,
+  0xd7,0xd5,0x6d,0x7b,0x32,0x46,0xfa,0xa3,0x1f,0xfd,0xa8,0xee,0xfd,0xfc,0xf9,0xcf,
+  0x7f,0xde,0x76,0xee,0x69,0xd3,0x82,0x3b,0xec,0xb0,0xc3,0x22,0x61,0x52,0x34,0xf7,
+  0xdc,0x73,0x8f,0xfa,0xc7,0x3f,0xfe,0xd1,0xb2,0xc7,0xf2,0xd1,0x47,0x1f,0x8d,0xac,
+  0xe1,0x05,0x0b,0x16,0x04,0xff,0x46,0x07,0x4b,0x46,0xf1,0x16,0x3b,0xee,0xb8,0xa3,
+  0xda,0x7a,0xeb,0xad,0xa3,0x34,0xc0,0x2c,0x88,0xe7,0x46,0xa6,0x45,0x6e,0x04,0x65,
+  0xba,0x77,0x48,0x03,0x04,0xc8,0x09,0x09,0xf2,0x3b,0xf3,0xcc,0x33,0xb3,0x69,0xe0,
+  0x3a,0x1f,0xbc,0xd6,0x61,0x82,0x0b,0x2f,0xbc,0x50,0x1d,0x77,0xdc,0x71,0x51,0x2a,
+  0x59,0x3d,0xd0,0xd1,0xd9,0xea,0xbc,0xf3,0xce,0xcb,0xf4,0x1b,0xc9,0x59,0x6e,0xe4,
+  0x70,0x45,0x9e,0xc8,0xf9,0xd2,0x19,0x19,0xea,0x95,0x57,0x5e,0xc9,0xf4,0x3b,0xc9,
+  0xfb,0x97,0xdf,0x4a,0x5a,0x5b,0x35,0xe7,0xf8,0xc0,0x03,0x0f,0x0c,0x5e,0x7e,0xd0,
+  0xa0,0x41,0x6a,0xec,0xd8,0xb1,0xeb,0xa4,0x91,0x2d,0x5e,0xbc,0x38,0x4a,0x2f,0xf3,
+  0xd1,0xbb,0x77,0xef,0xa8,0x1e,0x45,0x16,0x74,0xe6,0x43,0xe6,0x7e,0x89,0xc5,0x7f,
+  0xc2,0x09,0x27,0x44,0xfb,0xe5,0x43,0xf2,0xfa,0xe5,0xb8,0xcb,0xb8,0xb9,0xb8,0xf1,
+  0x65,0x1f,0x93,0x48,0x0a,0x9d,0x28,0xc4,0xbf,0xfa,0xd5,0xaf,0x82,0x82,0xfd,0xee,
+  0xbf,0xff,0xfe,0x28,0xb0,0x56,0xd6,0x59,0x2f,0x4a,0x77,0xef,0x90,0xe4,0x05,0x90,
+  0x4f,0x8a,0x8f,0x76,0x61,0x7a,0x97,0xd1,0xf9,0xc9,0x95,0xf3,0xcf,0x3f,0xbf,0xa2,
+  0x2d,0xba,0x8a,0x2e,0xf0,0x51,0xd1,0xf1,0x02,0xd1,0x36,0x96,0x2e,0x5d,0x5a,0xd1,
+  0x02,0xa5,0x72,0xc1,0x05,0x17,0x54,0x74,0x10,0x54,0xe6,0x54,0xa7,0x3d,0xf7,0xdc,
+  0xb3,0xa2,0x85,0x4b,0x5d,0xfa,0x29,0xdb,0xf2,0x2d,0xb3,0xd7,0x5e,0x7b,0x55,0xf4,
+  0xb8,0x78,0x45,0xe7,0x6d,0x77,0xa4,0x2c,0xe9,0x5c,0xf8,0xca,0x83,0x0f,0x3e,0x58,
+  0xf9,0xc5,0x2f,0x7e,0x51,0x39,0xe7,0x9c,0x73,0x2a,0xfa,0xa1,0xdf,0x94,0x69,0x80,
+  0x3a,0xb6,0x23,0x68,0x39,0x9d,0xb1,0x51,0xb9,0xf4,0xd2,0x4b,0x2b,0xda,0xbd,0x5d,
+  0xd1,0x63,0xcf,0x1d,0xdb,0xd1,0x6e,0xfd,0x8a,0xce,0xf3,0xae,0x6c,0xbf,0xfd,0xf6,
+  0x99,0xce,0xb1,0x16,0x70,0x35,0xf7,0x71,0xc6,0x8c,0x19,0x41,0xdb,0xd2,0x19,0x0d,
+  0x75,0xb9,0xb7,0x74,0xe0,0x64,0xd0,0xfe,0xe8,0xe0,0xbd,0xca,0xd3,0x4f,0x3f,0x1d,
+  0xb4,0x4e,0xed,0x49,0xa8,0x9c,0x71,0xc6,0x19,0x41,0xeb,0xd5,0x4a,0x4e,0x45,0x2b,
+  0x21,0x75,0xbb,0x76,0xea,0x7d,0xef,0xf8,0x40,0x01,0x00,0xc8,0xe9,0xe6,0x4e,0x6b,
+  0xda,0x7a,0xab,0xdc,0x72,0xcb,0x2d,0x1d,0x02,0xdf,0x87,0x4e,0xf5,0xab,0xe8,0xc2,
+  0x21,0x99,0xb6,0xa1,0x87,0x1f,0x1a,0xde,0x4f,0x1d,0xb9,0x5e,0xb9,0xf7,0xde,0x7b,
+  0x4b,0x95,0x63,0x5d,0xcf,0xfe,0x4b,0xd3,0x85,0x7c,0x2a,0x7f,0xfa,0xd3,0x9f,0xbc,
+  0xe7,0x5a,0x57,0xb0,0x8b,0x72,0xbf,0x43,0xd7,0xab,0xe3,0x4a,0x5a,0x4a,0x01,0xd0,
+  0x01,0x70,0x41,0xfb,0xa2,0x0b,0xf9,0x54,0x25,0xa4,0xbf,0xf3,0x9d,0xef,0x04,0xad,
+  0x5f,0xa7,0x1c,0x96,0xe2,0xda,0x29,0xe2,0xde,0xa1,0x0e,0x00,0x40,0x03,0x91,0xb1,
+  0x49,0xc9,0xef,0x95,0x71,0x5c,0x5d,0xd4,0x24,0xb8,0x22,0x99,0x64,0x11,0x48,0x05,
+  0x39,0x71,0x1b,0x87,0xd2,0xc8,0x74,0xa2,0xfe,0xfd,0xfb,0x47,0x95,0xef,0xfe,0xf9,
+  0xcf,0x7f,0x46,0x01,0x56,0xed,0x88,0x8c,0x4b,0xff,0xfa,0xd7,0xbf,0x8e,0x22,0xcc,
+  0x3f,0xf7,0xb9,0xcf,0x79,0xcf,0xb5,0x54,0x86,0x93,0xea,0x76,0x52,0xdb,0x21,0x84,
+  0x87,0x1e,0x7a,0xa8,0x65,0x8e,0x95,0x94,0xef,0x95,0x6b,0xdc,0x87,0x54,0x45,0x94,
+  0x8c,0x17,0xb9,0xbe,0xb2,0x22,0xb1,0x31,0x12,0xa7,0xe1,0xe3,0xaa,0xab,0xae,0x6a,
+  0xe8,0xb1,0x68,0xe4,0xbd,0x83,0x02,0x00,0x50,0x10,0x12,0xe9,0xfb,0xd2,0x4b,0x2f,
+  0x45,0xe5,0x48,0xab,0x41,0x6a,0xc4,0x6b,0xaf,0x81,0xea,0xd1,0xa3,0x47,0xd0,0xf2,
+  0x12,0x58,0x94,0x75,0x5c,0x3a,0x0f,0xa4,0x36,0xb9,0x44,0x34,0x87,0x3c,0x6c,0x5b,
+  0x95,0x7e,0xfd,0xfa,0x45,0x59,0x19,0xda,0xf5,0x1c,0x95,0x70,0x0e,0x45,0xc6,0xb5,
+  0xbf,0xf8,0xc5,0x2f,0x06,0x2d,0x2b,0xe5,0xa3,0x5b,0x85,0x3f,0xfe,0xf1,0x8f,0x51,
+  0x4a,0x9e,0xef,0xd8,0xfc,0xe1,0x0f,0x7f,0x50,0x7d,0xfb,0xf6,0xad,0x7a,0x3b,0x12,
+  0x70,0xe7,0xab,0x99,0x2f,0xb5,0xf6,0x45,0xf8,0x36,0x82,0x46,0xdf,0x3b,0x28,0x00,
+  0x00,0x05,0xa0,0xcb,0xc1,0x46,0x96,0x4b,0xd6,0x40,0x2a,0x13,0x29,0x06,0x23,0x55,
+  0xd1,0x42,0xb9,0xf2,0xca,0x2b,0xeb,0xda,0x4f,0x5d,0xde,0x58,0x3d,0xf2,0xc8,0x23,
+  0x51,0x34,0x76,0xbb,0x22,0x35,0xd9,0xe5,0x18,0x64,0x09,0xd2,0x4b,0x22,0xde,0x82,
+  0x10,0xa5,0xa1,0x9a,0xe0,0xc1,0x32,0x22,0x43,0xcf,0xe2,0x29,0xf1,0x21,0xb5,0xfc,
+  0xf5,0x78,0x78,0x4d,0xdb,0x92,0x40,0xc8,0xf1,0xe3,0xc7,0x97,0xd2,0x0b,0x50,0x86,
+  0x7b,0x07,0x05,0x00,0x20,0x67,0xe4,0xe1,0xf6,0xf5,0xaf,0x7f,0x3d,0xb7,0xf5,0x89,
+  0x55,0x19,0x3a,0x11,0x90,0xa4,0x21,0x56,0x1c,0x13,0x88,0xe4,0x8d,0xcc,0xbc,0x26,
+  0x96,0x53,0xa8,0x0b,0xbb,0x15,0x91,0xbe,0x4b,0x01,0x1b,0x1d,0xd0,0x57,0xf5,0x3a,
+  0x64,0x06,0xc8,0x10,0x21,0x30,0x67,0xce,0x9c,0x96,0x38,0x66,0xe2,0x29,0x91,0x68,
+  0xf8,0x90,0xeb,0x3e,0x0f,0x42,0x26,0x6f,0x92,0x82,0x3c,0xf5,0xba,0x6f,0xca,0x74,
+  0xef,0xa0,0x00,0x00,0xe4,0xc8,0x6f,0x7e,0xf3,0x9b,0xdc,0x1e,0x5c,0x31,0x32,0x56,
+  0xfc,0xb5,0xaf,0x7d,0x2d,0x68,0x59,0xc9,0x4b,0x97,0x02,0x35,0xf5,0xe0,0xf7,0xbf,
+  0xff,0x7d,0x94,0x8b,0xdd,0xae,0x0c,0x1c,0x38,0x50,0xe9,0x49,0x66,0x72,0x99,0xca,
+  0x57,0x04,0x82,0x0f,0x49,0x05,0x93,0x59,0xfe,0x9a,0x1d,0x9d,0x19,0xe1,0x5d,0x66,
+  0xb3,0xcd,0x36,0x53,0xfb,0xec,0xb3,0x4f,0x2e,0xdb,0xfb,0xc4,0x27,0x3e,0xa1,0x7a,
+  0xf6,0xec,0xe9,0x55,0xae,0x64,0x46,0xbf,0x7a,0x51,0x96,0x7b,0x07,0x05,0x00,0x20,
+  0x27,0x24,0x08,0x4f,0x26,0xf6,0x28,0x02,0xa9,0xf8,0x17,0x8a,0x9e,0x09,0xae,0xf0,
+  0xbe,0x9e,0x72,0xca,0x29,0xea,0x53,0x9f,0xfa,0x54,0xdb,0x9e,0x6b,0x19,0x9f,0x96,
+  0xc9,0x7f,0x36,0xdd,0x74,0xd3,0x5c,0xd6,0x17,0x1a,0xec,0x59,0x4f,0x2b,0xb5,0x08,
+  0x74,0xba,0xab,0xd2,0xe9,0x6c,0xde,0xe5,0xaa,0x1d,0x4e,0xb1,0x21,0x31,0x00,0x21,
+  0x35,0x32,0x9e,0x7f,0xfe,0xf9,0xba,0x1c,0x83,0x32,0xdd,0x3b,0x28,0x00,0x00,0x39,
+  0xf1,0xe5,0x2f,0x7f,0xb9,0xb0,0x75,0xeb,0x29,0x4d,0x83,0xe7,0x5a,0x2f,0x5a,0x01,
+  0x18,0x33,0x66,0x8c,0xd2,0xf9,0xc8,0x6d,0x7d,0xae,0xbf,0xfb,0xdd,0xef,0xe6,0xfa,
+  0x10,0x0f,0x1d,0xe2,0x69,0x76,0x74,0x2e,0x7f,0x50,0x51,0x9b,0xbc,0xa3,0xe1,0x43,
+  0xee,0x9d,0x7a,0x28,0x00,0x65,0xbb,0x77,0x50,0x00,0x00,0x9a,0x04,0xc9,0x2a,0x28,
+  0x83,0x02,0xa0,0x73,0xdc,0x6b,0x8a,0xcc,0x6e,0x76,0xa4,0x6c,0xed,0xf7,0xbe,0xf7,
+  0xbd,0x5c,0xd7,0xd9,0x2e,0x0a,0x80,0x94,0xfd,0x0d,0x61,0xb7,0xdd,0x76,0xcb,0x5d,
+  0xf0,0x96,0x41,0x01,0x28,0xdb,0xbd,0x83,0x02,0x00,0xd0,0x24,0x84,0x7a,0x00,0x8a,
+  0x4e,0x05,0xd4,0xd5,0xcc,0xda,0xfa,0x3c,0xfc,0xe5,0x2f,0x7f,0x89,0x4a,0x38,0xe7,
+  0x89,0x6f,0x8c,0xba,0x9d,0x14,0x00,0x39,0x16,0x92,0x59,0x91,0x27,0x92,0xa6,0xe9,
+  0x43,0x4a,0x09,0x17,0x4d,0xd9,0xee,0x1d,0xe6,0x02,0x00,0x68,0x12,0xa4,0x2e,0x40,
+  0x08,0xba,0x6c,0x28,0x07,0xab,0x40,0xa4,0xce,0x3e,0x54,0xc7,0x53,0x4f,0x3d,0xe5,
+  0x5d,0x46,0x66,0xcb,0x93,0xd9,0x01,0xf3,0x64,0xc2,0x84,0x09,0xde,0x65,0xea,0x31,
+  0x13,0x61,0xd9,0x40,0x01,0x00,0x68,0x31,0x05,0x40,0xa6,0x07,0x96,0x68,0xf1,0x5e,
+  0xbd,0x7a,0x71,0xd0,0xa0,0x34,0xe8,0xd2,0xc8,0x41,0xb5,0x0c,0xe4,0xfa,0xcd,0x2b,
+  0x03,0x20,0x0b,0x32,0xc3,0x63,0xbb,0xc1,0x10,0x00,0x40,0x13,0x59,0x9e,0xa1,0x55,
+  0x01,0xdb,0xd1,0x9a,0x81,0x72,0xf3,0xc1,0x07,0x1f,0x94,0x3a,0x8b,0x41,0x66,0x24,
+  0x14,0xef,0x03,0x0a,0x00,0x00,0x94,0x12,0xa9,0x09,0x10,0xfa,0xb0,0x05,0x28,0x13,
+  0xcd,0x50,0xc9,0xb0,0xdd,0xbc,0x00,0x28,0x00,0x00,0x2d,0xa8,0x00,0xe8,0x29,0x51,
+  0x39,0x58,0x50,0x2a,0x9a,0xa1,0x92,0x61,0xbb,0xdd,0x37,0x28,0x00,0x00,0x4d,0x44,
+  0xef,0xde,0xbd,0x83,0x96,0xcb,0x32,0x21,0x0d,0x40,0x3d,0x68,0x86,0xe0,0xd4,0xd5,
+  0xab,0x57,0xa3,0x00,0x00,0x40,0x39,0x91,0x00,0xa9,0x10,0x06,0x0c,0x18,0xc0,0xc1,
+  0x02,0x84,0x6b,0x46,0xda,0x4d,0x71,0x46,0x01,0x00,0x68,0x22,0x16,0x2d,0x5a,0x14,
+  0xb4,0x9c,0xd4,0xa9,0x07,0x28,0x13,0x83,0x07,0x0f,0x46,0x01,0x40,0x01,0x00,0x80,
+  0xa2,0x15,0x00,0x3c,0x00,0x50,0x36,0xd6,0x5b,0x6f,0xbd,0xa0,0xe5,0xa4,0xca,0xa2,
+  0x64,0x0b,0x34,0xa2,0x85,0x4c,0xca,0x84,0x02,0x00,0x00,0x0d,0x41,0x52,0x95,0x7c,
+  0x48,0xd5,0xb3,0x2e,0x5d,0xba,0x70,0xb0,0xa0,0x29,0x15,0x80,0x90,0xa2,0x3d,0x80,
+  0x02,0x00,0xd0,0x56,0xc8,0x54,0xbf,0x21,0xe3,0xa8,0xb8,0xff,0xa1,0x8c,0x48,0x1d,
+  0x8b,0x10,0xc5,0x14,0x05,0x00,0x05,0x00,0x00,0x0c,0x5e,0x7b,0xed,0xb5,0xa0,0xe5,
+  0x36,0xdf,0x7c,0x73,0x0e,0x16,0x94,0x0e,0x99,0x42,0x79,0xc8,0x90,0x21,0xde,0xe5,
+  0x26,0x4e,0x9c,0x18,0x3c,0xd4,0x05,0x28,0x00,0x00,0x28,0x00,0x09,0x76,0xd9,0x65,
+  0x17,0x0e,0x16,0x94,0x92,0x9d,0x76,0xda,0xc9,0xbb,0x8c,0x94,0x0c,0xbe,0xfb,0xee,
+  0xbb,0x39,0x58,0x28,0x00,0x00,0x80,0x02,0x00,0xad,0xc2,0xfe,0xfb,0xef,0x1f,0xb4,
+  0xdc,0x2d,0xb7,0xdc,0xc2,0xc1,0x42,0x01,0x00,0x80,0x98,0xd0,0xb9,0xd4,0x51,0x00,
+  0xa0,0xac,0xec,0xb7,0xdf,0x7e,0x41,0xcb,0xdd,0x79,0xe7,0x9d,0x91,0x27,0x00,0x50,
+  0x00,0x00,0xda,0x9e,0xf7,0xdf,0x7f,0x5f,0x3d,0xfd,0xf4,0xd3,0xde,0xe5,0x86,0x0e,
+  0x1d,0xaa,0x46,0x8d,0x1a,0xc5,0x01,0x83,0x9a,0x58,0xb6,0x6c,0x59,0x21,0xeb,0xdd,
+  0x7e,0xfb,0xed,0x83,0xe2,0x00,0xa4,0x6c,0xf0,0xdf,0xfe,0xf6,0x37,0x4e,0x04,0x0a,
+  0x00,0x00,0xfc,0xfd,0xef,0x7f,0x0f,0xca,0x00,0x38,0xe4,0x90,0x43,0x38,0x58,0x50,
+  0x33,0xef,0xbe,0xfb,0x6e,0x31,0x02,0xa7,0x73,0xe7,0x60,0x2f,0xc0,0xf9,0xe7,0x9f,
+  0xdf,0x76,0xb3,0xf3,0xa1,0x00,0x00,0xc0,0x3a,0xfc,0xe5,0x2f,0x7f,0x09,0x5a,0xee,
+  0x94,0x53,0x4e,0xe1,0x60,0x81,0x93,0xd0,0xfa,0x10,0xd3,0xa6,0x4d,0x2b,0x6c,0x1f,
+  0xce,0x38,0xe3,0x8c,0xa0,0xe5,0x24,0xe6,0xe5,0x9a,0x6b,0xae,0xe1,0xa4,0xa1,0x00,
+  0x00,0x94,0x9f,0xa5,0x4b,0x97,0x16,0xb2,0x5e,0x19,0xfb,0xbf,0xf7,0xde,0x7b,0xbd,
+  0xcb,0x6d,0xb9,0xe5,0x96,0xea,0xe3,0x1f,0xff,0x38,0x27,0x02,0x9c,0x48,0x8d,0x08,
+  0x49,0xc7,0xf3,0xf1,0xce,0x3b,0xef,0x14,0xb6,0x0f,0x7b,0xee,0xb9,0xa7,0xda,0x7b,
+  0xef,0xbd,0x83,0x96,0x3d,0xe7,0x9c,0x73,0x0a,0xf3,0x46,0x00,0x0a,0x00,0x40,0x6e,
+  0x88,0xf0,0x7d,0xeb,0xad,0xb7,0x72,0x5f,0xef,0x79,0xe7,0x9d,0x17,0xb4,0xdc,0xc9,
+  0x27,0x9f,0xcc,0x49,0x80,0x54,0xa4,0xd6,0xbd,0x14,0xe4,0xf1,0xf1,0xe6,0x9b,0x6f,
+  0x16,0xba,0x1f,0xe7,0x9e,0x7b,0x6e,0xd0,0x72,0x52,0xfc,0xea,0xe8,0xa3,0x8f,0x56,
+  0xcb,0x97,0x2f,0xe7,0xe4,0xa1,0x00,0x00,0x94,0x97,0xe7,0x9e,0x7b,0x2e,0xca,0x73,
+  0x0e,0xb1,0xd6,0x43,0xb9,0xec,0xb2,0xcb,0xd4,0x03,0x0f,0x3c,0xe0,0x5d,0xae,0x67,
+  0xcf,0x9e,0xea,0x73,0x9f,0xfb,0x1c,0x27,0x01,0xbc,0xac,0xbf,0xfe,0xfa,0xde,0x65,
+  0xfe,0xfd,0xef,0x7f,0xab,0x27,0x9f,0x7c,0xb2,0xb0,0x7d,0x38,0xe0,0x80,0x03,0xd4,
+  0x6e,0xbb,0xed,0x16,0xb4,0xec,0xe3,0x8f,0x3f,0x1e,0x0d,0x6d,0x85,0xce,0x84,0x09,
+  0x28,0x00,0x00,0x0d,0x61,0xf6,0xec,0xd9,0xea,0xe0,0x83,0x0f,0x56,0xdf,0xff,0xfe,
+  0xf7,0x6b,0x1e,0x12,0xb8,0xe7,0x9e,0x7b,0xd4,0x59,0x67,0x9d,0x15,0x6c,0x51,0x6d,
+  0xb0,0xc1,0x06,0x9c,0x00,0xf0,0xb2,0xd9,0x66,0x9b,0x05,0x2d,0xf7,0xa3,0x1f,0xfd,
+  0xa8,0xd0,0xfd,0xb8,0xf4,0xd2,0x4b,0x55,0xf7,0xee,0xdd,0x83,0x96,0xbd,0xfa,0xea,
+  0xab,0x23,0xa5,0x61,0xe6,0xcc,0x99,0x85,0xec,0x8b,0x04,0x1b,0x4a,0xe6,0x01,0x0a,
+  0x00,0x00,0xd4,0xfc,0x30,0xf9,0xc1,0x0f,0x7e,0x10,0x8d,0xc9,0xdf,0x70,0xc3,0x0d,
+  0x55,0xad,0xe3,0x8f,0x7f,0xfc,0xa3,0x3a,0xea,0xa8,0xa3,0x82,0x72,0xa1,0x3f,0xf2,
+  0x91,0x8f,0xa8,0xaf,0x7f,0xfd,0xeb,0x1c,0x78,0x08,0x22,0x34,0x53,0xe4,0x8e,0x3b,
+  0xee,0x50,0xf7,0xdf,0x7f,0x7f,0x61,0xfb,0x21,0xf5,0x2a,0x7e,0xf9,0xcb,0x5f,0x06,
+  0x2f,0xff,0xf0,0xc3,0x0f,0xab,0x9d,0x77,0xde,0x59,0x5d,0x7b,0xed,0xb5,0x41,0x19,
+  0x31,0x3e,0xe6,0xcd,0x9b,0x17,0xa5,0x1a,0x9e,0x78,0xe2,0x89,0x51,0xfa,0xec,0x76,
+  0xdb,0x6d,0xd7,0x76,0xd7,0x42,0x57,0x6e,0x87,0xe6,0x44,0xdc,0x73,0x7f,0xfd,0xeb,
+  0x5f,0xd5,0xeb,0xaf,0xbf,0xae,0xfa,0xf4,0xe9,0xa3,0x7a,0xf7,0xee,0xad,0x7a,0xf5,
+  0xea,0x15,0xbd,0x97,0x57,0xf9,0x3b,0xd9,0x42,0xbe,0x93,0x14,0x1d,0xc8,0x0f,0x89,
+  0x07,0x18,0x3f,0x7e,0xbc,0xda,0x63,0x8f,0x3d,0xd4,0x69,0xa7,0x9d,0xa6,0x3e,0xfd,
+  0xe9,0x4f,0x47,0xc7,0x39,0x8d,0x57,0x5e,0x79,0x45,0x7d,0xe7,0x3b,0xdf,0x51,0x37,
+  0xdf,0x7c,0x73,0xd0,0x36,0x24,0xa0,0xeb,0x8a,0x2b,0xae,0x50,0xdd,0xba,0x75,0xe3,
+  0x80,0x43,0x10,0x9f,0xfc,0xe4,0x27,0x83,0x97,0x3d,0xf0,0xc0,0x03,0xa3,0xa8,0xfd,
+  0x1f,0xff,0xf8,0xc7,0xde,0x6b,0xb7,0x1a,0xbe,0xfc,0xe5,0x2f,0x47,0x2e,0x7e,0xb1,
+  0xf0,0x43,0x78,0xfb,0xed,0xb7,0xd5,0x09,0x27,0x9c,0x10,0x29,0xd8,0xdf,0xfc,0xe6,
+  0x37,0xd5,0xa1,0x87,0x1e,0x1a,0x3c,0xcb,0xa0,0xf0,0xc6,0x1b,0x6f,0xa8,0xdb,0x6f,
+  0xbf,0x3d,0x52,0x6e,0x44,0xa1,0x48,0x0e,0x2b,0x88,0x12,0x80,0x02,0x00,0xa5,0x45,
+  0xb4,0x5e,0x19,0x0f,0xbe,0xee,0xba,0xeb,0xd4,0x94,0x29,0x53,0xa2,0x87,0xbf,0xcc,
+  0x61,0x2d,0x17,0xf1,0x07,0x1f,0x7c,0x10,0xbd,0x8f,0x3f,0x8b,0x85,0x43,0xfc,0x59,
+  0x08,0xb2,0xac,0x6c,0x43,0xac,0x4e,0xb1,0x62,0xa5,0xc9,0xba,0xe3,0x57,0x69,0xb1,
+  0x45,0x2a,0xcb,0xc5,0xdb,0x49,0x6e,0x43,0xd2,0x8c,0x7a,0xf4,0xe8,0x11,0xb9,0xf6,
+  0x64,0x5c,0x3a,0x56,0x38,0x62,0x25,0x45,0xa6,0xaa,0xed,0xdb,0xb7,0x6f,0xf4,0x2a,
+  0x4d,0xe6,0xad,0x8f,0x9b,0x44,0x28,0x4b,0x80,0x92,0x34,0xf9,0x2e,0x74,0xbf,0xcb,
+  0x8e,0x44,0xf1,0x4b,0x93,0x63,0x70,0xf8,0xe1,0x87,0x47,0x63,0x9f,0x1b,0x6d,0xb4,
+  0x91,0xda,0x70,0xc3,0x0d,0xa3,0x61,0x02,0x89,0x72,0x9e,0x34,0x69,0x92,0xba,0xfe,
+  0xfa,0xeb,0xd5,0xf3,0xcf,0x3f,0x9f,0x69,0xdd,0xa7,0x9e,0x7a,0x6a,0xa4,0x60,0x00,
+  0x84,0xb2,0xf1,0xc6,0x1b,0x47,0xd6,0x77,0x48,0x61,0x29,0xb9,0xcf,0x7f,0xf5,0xab,
+  0x5f,0x45,0x0a,0xe9,0x41,0x07,0x1d,0x14,0x79,0xb5,0xb6,0xd8,0x62,0x8b,0x68,0x1d,
+  0xe2,0x8e,0x7f,0xf9,0xe5,0x97,0x23,0xa5,0x55,0x84,0xe7,0x77,0xbf,0xfb,0xdd,0xaa,
+  0xf6,0xe7,0xf2,0xcb,0x2f,0x8f,0xae,0xfb,0x97,0x5e,0x7a,0x29,0xf8,0x37,0x92,0x22,
+  0x78,0xd2,0x49,0x27,0x45,0xcf,0x08,0xb1,0xdc,0xf7,0xd9,0x67,0x1f,0xb5,0xc9,0x26,
+  0x9b,0x44,0x45,0x86,0xe4,0x39,0x23,0x93,0x09,0xcd,0x9d,0x3b,0x37,0x52,0xc2,0xa5,
+  0x89,0xe2,0x20,0xaf,0x12,0x54,0x08,0x28,0x00,0x4d,0x41,0x2c,0x60,0xa5,0x2a,0x97,
+  0x4c,0x8e,0x21,0xee,0x64,0xa9,0x08,0x97,0x14,0xb8,0x49,0x21,0x29,0x16,0xbc,0x7c,
+  0x17,0x5b,0xf2,0xf1,0xfb,0x78,0x3d,0x3e,0x64,0x59,0x59,0x9f,0x44,0x0a,0x27,0x05,
+  0x7b,0xa8,0x42,0x91,0x5c,0x5e,0x9a,0x28,0x0b,0xd2,0xe4,0x46,0x94,0x87,0x85,0x28,
+  0x12,0xf1,0x67,0xf1,0x7b,0xf3,0xb3,0x58,0xe1,0x90,0xdf,0xf7,0xef,0xdf,0xbf,0x43,
+  0x29,0x10,0x2d,0x5f,0x9a,0x04,0x30,0x49,0x93,0x07,0x8e,0x8c,0x79,0xcb,0xeb,0xb0,
+  0x61,0xc3,0xa2,0xef,0xca,0xee,0xc1,0x90,0x87,0x92,0xe4,0x35,0xe7,0x95,0xdb,0x2c,
+  0xd6,0xcf,0xaf,0x7f,0xfd,0x6b,0x6e,0x14,0xc8,0xcc,0x25,0x97,0x5c,0xa2,0xf6,0xda,
+  0x6b,0xaf,0xe0,0xe5,0x45,0x80,0xfe,0xfe,0xf7,0xbf,0x77,0x7e,0x2f,0xca,0x6c,0xb5,
+  0x0a,0x80,0x08,0xec,0x7f,0xfc,0xe3,0x1f,0xea,0x3f,0xfe,0xe3,0x3f,0xd4,0x53,0x4f,
+  0x3d,0x95,0xf9,0x19,0xf9,0xc2,0x0b,0x2f,0x44,0x0d,0x50,0x00,0x5a,0x4a,0xf0,0x2f,
+  0x58,0xb0,0x40,0xdd,0x7a,0xeb,0xad,0x91,0xf6,0x9d,0x9c,0x1e,0x33,0xcd,0x32,0x4e,
+  0x7e,0x67,0x53,0x12,0x7c,0xf8,0x7e,0x1f,0xb2,0x6d,0x79,0x95,0x26,0x5e,0x80,0xd0,
+  0x20,0x1f,0xdf,0xf1,0x98,0x3f,0x7f,0x7e,0x14,0xa4,0x23,0xd6,0x46,0xac,0x30,0x24,
+  0x15,0x08,0xb1,0x54,0xc4,0xdb,0x20,0x9e,0x03,0x51,0x1a,0xc4,0x12,0x10,0x05,0x61,
+  0xc4,0x88,0x11,0x6a,0xf4,0xe8,0xd1,0x91,0xc5,0x3d,0x76,0xec,0xd8,0xe8,0xbb,0xa2,
+  0xf8,0xf6,0xb7,0xbf,0xad,0x2e,0xb8,0xe0,0x82,0xba,0x5c,0x23,0x52,0x4d,0x4d,0x3c,
+  0x06,0xb8,0xfe,0xa1,0x1a,0x24,0x17,0xff,0xd8,0x63,0x8f,0x8d,0xbc,0x89,0x65,0x40,
+  0x14,0xf9,0x07,0x1f,0x7c,0x30,0x1a,0x8f,0xbf,0xf1,0xc6,0x1b,0x39,0x41,0x28,0x00,
+  0xed,0x29,0xf4,0x45,0xa0,0x89,0x36,0x2c,0xd6,0xbe,0x54,0xe3,0x4a,0x5a,0xe0,0x36,
+  0x81,0x9b,0xb4,0xc8,0x4d,0x8b,0x3d,0xeb,0xf2,0xd5,0x0c,0x19,0xd4,0xf2,0xfb,0xd0,
+  0xf5,0x0b,0x22,0xe8,0x4c,0x61,0xe7,0xea,0x8f,0x78,0x11,0x66,0xcc,0x98,0x11,0xb5,
+  0x17,0x5f,0x7c,0x31,0xfa,0x4e,0x14,0x08,0x19,0x92,0x88,0x83,0x9a,0x8a,0x18,0x5e,
+  0x90,0x71,0x52,0x19,0xde,0x10,0x45,0xa0,0x48,0xc6,0x8d,0x1b,0xa7,0x6e,0xbb,0xed,
+  0xb6,0xa8,0x3f,0x00,0xd5,0x22,0x51,0xf8,0x13,0x26,0x4c,0x88,0x52,0xfe,0xca,0x80,
+  0x28,0xf0,0xa2,0xd4,0x7e,0xe3,0x1b,0xdf,0x50,0x3f,0xfb,0xd9,0xcf,0x38,0x41,0x75,
+  0x80,0xa8,0xaf,0x12,0x08,0xfe,0x25,0x4b,0x96,0x44,0x17,0xfe,0x71,0xc7,0x1d,0xa7,
+  0x3e,0xf6,0xb1,0x8f,0x45,0x91,0xb1,0x52,0x89,0x2b,0x76,0x69,0xcb,0x6b,0xec,0x9e,
+  0x8f,0x5f,0x5d,0x43,0x00,0xb5,0x2c,0x9f,0xfc,0xcc,0x66,0xd1,0x67,0xfd,0x7d,0xcd,
+  0x17,0x67,0x0e,0xfd,0x17,0x2f,0xca,0xc2,0x85,0x0b,0xd5,0xc8,0x91,0x23,0x23,0xaf,
+  0x40,0x32,0x6e,0x21,0x6e,0x79,0xf2,0xad,0x6f,0x7d,0x4b,0xfd,0xe1,0x0f,0x7f,0x08,
+  0x2a,0xb6,0x92,0x15,0x89,0xaf,0x90,0x87,0xe3,0x7d,0xf7,0xdd,0x57,0x48,0x40,0x16,
+  0xb4,0x17,0x32,0x94,0x26,0x0a,0xf1,0xb6,0xdb,0x6e,0x5b,0x9a,0x7d,0x92,0x7b,0xf6,
+  0xa7,0x3f,0xfd,0xa9,0xba,0xeb,0xae,0xbb,0xda,0x32,0x2a,0x1f,0x05,0xa0,0x4d,0x84,
+  0xbe,0xb4,0x7f,0xfe,0xf3,0x9f,0xea,0x8b,0x5f,0xfc,0xa2,0xda,0x7c,0xf3,0xcd,0xd5,
+  0x45,0x17,0x5d,0x14,0x59,0xa9,0xf1,0x58,0x76,0x9a,0xfb,0x3d,0x16,0x80,0x66,0xcb,
+  0x7b,0xf9,0x5a,0xbf,0xaf,0xb5,0xd5,0xd2,0x1f,0x09,0x8a,0x94,0x21,0x83,0xe1,0xc3,
+  0x87,0x47,0xc3,0x00,0xe6,0xb1,0x4f,0x0a,0xfe,0xbc,0x95,0x80,0x2f,0x7c,0xe1,0x0b,
+  0x51,0x90,0x92,0xbc,0xe6,0xe5,0x69,0x90,0x87,0xb4,0x64,0x7e,0x5c,0x78,0xe1,0x85,
+  0x58,0xfe,0x90,0xab,0x12,0x20,0x81,0xc5,0x5f,0xf9,0xca,0x57,0x72,0x19,0xae,0xcb,
+  0x0b,0xa9,0xa5,0xf1,0xaf,0x7f,0xfd,0x4b,0x5d,0x75,0xd5,0x55,0xd1,0xf0,0x5d,0x91,
+  0x88,0x67,0x51,0xbc,0x6a,0xa7,0x9f,0x7e,0x3a,0x0a,0x00,0x14,0x2b,0xf4,0xc5,0xc5,
+  0x2f,0xb9,0xa7,0x62,0xe9,0x1f,0x79,0xe4,0x91,0xea,0xd5,0x57,0x5f,0x8d,0x1e,0xee,
+  0x32,0x06,0x66,0x0a,0xb4,0xa4,0xd5,0x6b,0xb3,0x80,0xf3,0x6e,0xb5,0x6e,0x2f,0xef,
+  0xfd,0xad,0x66,0x7d,0x12,0x70,0x38,0x7d,0xfa,0xf4,0x68,0xfc,0x5f,0xc6,0xfe,0x93,
+  0x41,0x89,0xf1,0x79,0x88,0x33,0x18,0xcc,0xcf,0xf3,0x54,0x04,0xe4,0xc1,0x2a,0x9e,
+  0x80,0x47,0x1e,0x79,0x24,0x4a,0x05,0xac,0xc6,0x62,0x8f,0x67,0x4e,0x93,0xe0,0xab,
+  0x67,0x9f,0x7d,0x36,0xaa,0x32,0x58,0x24,0x32,0x7c,0xe1,0xa3,0x11,0x9e,0x87,0x7a,
+  0xed,0x57,0x23,0xfb,0x1f,0xb2,0x5e,0x51,0xfc,0x42,0x27,0xf3,0xc9,0x82,0x78,0xc6,
+  0x7e,0xfb,0xdb,0xdf,0x46,0x29,0xc5,0x62,0x90,0x14,0xb1,0x8d,0x6a,0x3d,0x80,0x12,
+  0x13,0x20,0xca,0xf4,0x95,0x57,0x5e,0xa9,0x8e,0x38,0xe2,0x88,0x28,0xc6,0xa7,0x56,
+  0xe4,0x38,0xca,0x5c,0x04,0x52,0x62,0x5b,0xaa,0x76,0x8a,0xb1,0x20,0xc6,0x58,0xb5,
+  0x41,0x8c,0x65,0xbe,0x77,0xbc,0x1e,0x97,0x4a,0xde,0xe6,0x0f,0xac,0x23,0xf8,0x63,
+  0x64,0x6c,0x5f,0x5c,0xc4,0x92,0x8a,0xb2,0xe9,0xa6,0x9b,0x06,0x5d,0x34,0xf5,0xde,
+  0xd7,0x6a,0xa3,0xfe,0x43,0x96,0x2f,0x12,0xb1,0xf6,0xc5,0x83,0x22,0xd6,0x42,0x7c,
+  0xa3,0xd9,0x62,0x22,0x24,0x02,0xdf,0xe6,0x35,0x48,0x0b,0x74,0x94,0x88,0xe9,0xb3,
+  0xcf,0x3e,0x3b,0xd3,0xb9,0x36,0x91,0x61,0x1e,0x71,0x6b,0x4a,0x40,0xa7,0x3c,0xd0,
+  0x24,0xf5,0x4f,0xae,0x03,0x09,0x60,0x94,0xb4,0x49,0x89,0x5b,0x88,0x83,0x16,0x65,
+  0xb8,0x42,0x04,0xff,0x31,0xc7,0x1c,0x13,0x79,0x30,0x00,0xea,0xc9,0xc4,0x89,0x13,
+  0xa3,0x40,0x3c,0xc9,0x99,0x97,0xf4,0x54,0x69,0x32,0x24,0x29,0x1e,0x02,0xc9,0x48,
+  0x12,0x05,0x61,0xf0,0xe0,0xc1,0x6a,0xcc,0x98,0x31,0x51,0x61,0x1e,0x49,0x43,0x95,
+  0x34,0xbc,0x7a,0x5c,0xab,0x72,0x9f,0x88,0x52,0x2d,0xd3,0x63,0x4b,0xda,0xa0,0x64,
+  0x45,0x49,0x93,0x2c,0x23,0xf9,0x4e,0xee,0x25,0xd9,0x47,0x51,0x14,0x64,0x7f,0x24,
+  0x43,0x48,0x5e,0xa5,0x49,0xa6,0x82,0xa4,0xe0,0xee,0xba,0xeb,0xae,0xd1,0x72,0x80,
+  0x02,0x50,0x17,0xc1,0x2f,0x0f,0xfa,0xaf,0x7e,0xf5,0xab,0x91,0x15,0x27,0xb9,0xaa,
+  0xb1,0x0b,0xb7,0xd6,0xa0,0x3c,0xdf,0xf2,0x59,0x83,0x02,0x6b,0x5d,0x7f,0xbd,0x83,
+  0x12,0xe5,0xbb,0x38,0xc5,0x50,0xf2,0x92,0xa5,0x96,0x80,0x0f,0x29,0x38,0x92,0xe6,
+  0x45,0x28,0x4a,0x01,0xb0,0x21,0x9e,0x08,0xd9,0x7f,0x49,0xbb,0x14,0xa5,0x25,0x4e,
+  0xbf,0x04,0x28,0x1b,0x52,0xaf,0x42,0x04,0xab,0x5c,0xb3,0xa1,0x33,0x0a,0xd6,0xfb,
+  0x79,0x2b,0xf7,0x92,0x28,0x27,0xf1,0xfd,0x04,0x7e,0x78,0xe2,0x14,0x28,0xf8,0xe5,
+  0xfd,0x2d,0xb7,0xdc,0xa2,0x7e,0xf8,0xc3,0x1f,0x46,0xd6,0xdd,0x36,0xdb,0x6c,0xb3,
+  0x8e,0xc0,0x4b,0xe6,0xe9,0x9b,0x02,0xc8,0x7c,0xb5,0x09,0xc8,0xb4,0x57,0x9b,0x30,
+  0xb3,0x09,0x61,0xdf,0x77,0xae,0xf5,0x65,0xfd,0xde,0x26,0xf0,0xab,0xed,0xbf,0x58,
+  0xfc,0x62,0x95,0x88,0x9b,0x7f,0xfb,0xed,0xb7,0xcf,0x24,0x74,0xe3,0x75,0xda,0x02,
+  0x16,0xeb,0xe9,0xc5,0x90,0xed,0x8b,0xfb,0x15,0xa0,0xec,0x88,0xd1,0x52,0xe6,0xd8,
+  0x13,0xb9,0x5f,0xc5,0x2b,0x01,0x28,0x00,0xa5,0x10,0xfc,0x62,0x95,0x4a,0x49,0x57,
+  0x71,0xf5,0x8a,0x4b,0x37,0x54,0xe0,0x9a,0xc2,0x27,0x4b,0x5e,0x7f,0xde,0x16,0x7b,
+  0x11,0x69,0x81,0xb5,0xf6,0x5f,0x04,0xbf,0x54,0xf4,0x12,0x57,0xb9,0x54,0x33,0x33,
+  0x8f,0xbb,0xaf,0x7f,0x71,0x91,0x21,0x33,0x6b,0xc1,0x3c,0x06,0x00,0x00,0x28,0x00,
+  0x10,0x2c,0xfc,0xe5,0x55,0x2a,0x66,0xdd,0x74,0xd3,0x4d,0x51,0x51,0x0b,0x41,0x5c,
+  0x52,0xd5,0x16,0xee,0xa9,0x46,0x20,0x9b,0xdf,0xf9,0x2c,0xf2,0x5a,0x3c,0x08,0xd5,
+  0x78,0x24,0xaa,0xed,0xbf,0x08,0xfe,0xc9,0x93,0x27,0x47,0x9e,0x14,0x11,0xfc,0x49,
+  0xcf,0x41,0x16,0x85,0x46,0xc6,0xdc,0xcd,0x20,0x27,0x9b,0x17,0x02,0x45,0x00,0x00,
+  0x50,0x00,0x20,0x48,0xf0,0x4b,0x60,0x97,0x08,0xfe,0xb8,0x94,0x65,0x2c,0x78,0xd2,
+  0x4a,0xf1,0xd6,0xea,0x62,0x0f,0x59,0x9f,0x8f,0x5a,0x84,0x5c,0x56,0x17,0x7f,0x35,
+  0xfd,0x97,0xe9,0x75,0x25,0x08,0x49,0xc6,0x1d,0x45,0xf0,0x27,0x8b,0x01,0x85,0xc4,
+  0x1c,0x98,0xdb,0xb6,0xcd,0xae,0x67,0xfe,0x06,0xc1,0x0f,0x00,0x28,0x00,0x90,0x2a,
+  0xf8,0x85,0x67,0x9e,0x79,0x26,0x12,0xfc,0x32,0x29,0x46,0x1e,0x02,0x39,0xeb,0x7e,
+  0x14,0xe9,0xd2,0xaf,0x45,0x29,0xa8,0xb5,0xff,0x22,0xf8,0x45,0xa9,0x92,0x3a,0xe1,
+  0x92,0xfe,0x26,0x55,0xc2,0xd2,0x14,0x30,0xdb,0xb9,0xb1,0x1d,0x0f,0x51,0x00,0xcc,
+  0xe8,0x7f,0x89,0x0b,0x70,0x29,0x31,0x00,0x00,0x28,0x00,0xd0,0x21,0x5c,0x44,0x60,
+  0xc8,0x54,0x92,0x92,0xd2,0x25,0xe3,0xd1,0x59,0x2c,0x52,0x9f,0xf0,0xcc,0x1a,0x45,
+  0x9f,0x66,0x41,0xfb,0x26,0x07,0xaa,0x75,0x7f,0x6b,0xdd,0x7f,0xdb,0xef,0x67,0xcd,
+  0x9a,0x15,0x09,0x7e,0x71,0xd3,0x4b,0x70,0x5f,0x48,0x64,0x7f,0x88,0x87,0x26,0xe9,
+  0x01,0xb0,0x15,0x14,0x92,0x73,0x2a,0xdb,0x44,0xf8,0x03,0x00,0x0a,0x00,0xac,0x23,
+  0x48,0x96,0x2f,0x5f,0x1e,0xe5,0xf2,0x4b,0x1d,0x76,0x09,0xf2,0xb3,0xb9,0xb8,0x8b,
+  0x9e,0x8c,0x27,0xab,0xc0,0xad,0x25,0x6a,0xbf,0x88,0xed,0xa5,0x59,0xfc,0x52,0x14,
+  0x49,0x04,0xb4,0x64,0x4b,0xc8,0x58,0x7f,0x11,0xc8,0xfa,0x93,0x45,0x85,0x62,0xeb,
+  0x1f,0xcb,0x1f,0x00,0x50,0x00,0x60,0x1d,0xab,0x51,0xea,0xc9,0x4b,0xe1,0x09,0x29,
+  0xe4,0x32,0x6f,0xde,0xbc,0x60,0x01,0x19,0xb2,0x8d,0x5a,0x5d,0xf4,0x59,0xa3,0xea,
+  0xb3,0x1e,0x83,0x5a,0x3c,0x18,0x21,0xeb,0x8f,0x67,0xf8,0x5b,0xbc,0x78,0xb1,0xda,
+  0x7a,0xeb,0xad,0xa3,0x8c,0x89,0x22,0xb3,0x12,0x92,0x0a,0x80,0x58,0xfc,0xa2,0x00,
+  0xc4,0x4a,0x9c,0x59,0x1d,0x10,0x65,0x00,0x00,0x50,0x00,0xda,0x54,0xf0,0x8b,0x3b,
+  0xfa,0xf6,0xdb,0x6f,0x8f,0xac,0x7e,0x29,0x84,0xe1,0x2a,0x18,0x93,0x25,0xe8,0x2d,
+  0xcf,0x34,0x3f,0x13,0x9f,0xcb,0xbf,0x1a,0x01,0x9e,0x25,0x8b,0x20,0x4b,0xff,0xe5,
+  0xd8,0x8a,0xc5,0x2f,0x0a,0xd5,0x16,0x5b,0x6c,0x11,0x55,0x46,0x34,0xf3,0xf2,0x7d,
+  0x1e,0x8b,0x6a,0x14,0x04,0x49,0x03,0x94,0x26,0xc2,0x5f,0x5e,0x63,0x2f,0x40,0x96,
+  0xe3,0x04,0x00,0x80,0x02,0xd0,0xa2,0x82,0x7f,0xea,0xd4,0xa9,0xea,0xd6,0x5b,0x6f,
+  0x8d,0xc6,0xf9,0x45,0x48,0x84,0x08,0xe7,0xac,0xcb,0x84,0x08,0xb8,0x22,0xd6,0x9f,
+  0xc5,0xa3,0x50,0xc4,0xfe,0xc5,0xae,0x7e,0xb1,0xfc,0xa5,0x2a,0xe2,0xee,0xbb,0xef,
+  0xde,0x51,0x01,0x2f,0xab,0x00,0xce,0x9a,0x05,0x10,0x07,0x01,0xc6,0xc2,0x3f,0x1e,
+  0xf3,0x37,0xe7,0x04,0x00,0x00,0x40,0x01,0x68,0x33,0xc1,0x2f,0x82,0x49,0x2a,0xf7,
+  0x49,0xc9,0xde,0x32,0xb8,0x81,0x8b,0xae,0xcd,0x5f,0xcf,0x2c,0x01,0xb1,0xf8,0xc5,
+  0xd5,0x2f,0xaf,0xa3,0x46,0x8d,0x52,0x07,0x1e,0x78,0x60,0x14,0xe1,0x5f,0x4b,0xa1,
+  0xa2,0xb4,0x2c,0x00,0x89,0xd7,0x88,0x67,0x57,0x4c,0x2a,0x0c,0xb1,0x07,0x20,0x9e,
+  0x10,0xc8,0x35,0x31,0x10,0x31,0x01,0x00,0x80,0x02,0xd0,0x06,0x82,0x5f,0x04,0xbe,
+  0x08,0x7e,0x51,0x00,0x42,0x2c,0xdd,0x7a,0x91,0x87,0x05,0x9e,0xe7,0xf2,0xd5,0x0a,
+  0x7e,0x49,0x91,0x94,0xa0,0x49,0x09,0xec,0x93,0x49,0x6e,0xfa,0xf7,0xef,0xef,0x15,
+  0xe0,0x21,0xdf,0xdb,0xfa,0x23,0x13,0x82,0xc8,0xb0,0xc2,0xa2,0x45,0x8b,0xd6,0x0a,
+  0xee,0x8b,0x7f,0x1b,0x0b,0xff,0xb8,0xe5,0x3d,0x0b,0x20,0x00,0x00,0x0a,0x40,0xc9,
+  0x05,0xbf,0x3c,0xfc,0x1f,0x7d,0xf4,0xd1,0xc8,0xd5,0x2f,0xd5,0xfb,0xaa,0xb1,0x80,
+  0xeb,0x9d,0x67,0x9f,0x77,0x50,0x9c,0x4d,0x80,0xe6,0xd5,0xff,0x58,0xf0,0xcb,0x4c,
+  0x5d,0x52,0xc4,0x47,0x66,0x0c,0x13,0x6b,0xbc,0xa8,0xe3,0x25,0x82,0x5d,0x2c,0x7e,
+  0x09,0xd8,0x4c,0x4e,0x01,0x6c,0xf6,0xd5,0x26,0xfc,0x6d,0x01,0x80,0x00,0x00,0x28,
+  0x00,0x2d,0x26,0xf8,0x65,0x5a,0xd6,0xeb,0xaf,0xbf,0x3e,0x2a,0xd5,0xbb,0x70,0xe1,
+  0x42,0xab,0x25,0x5c,0x6d,0x1e,0x7e,0xd6,0xdf,0x87,0x78,0x00,0x7c,0xb5,0xf4,0xab,
+  0x19,0xdf,0x4f,0xcb,0x62,0xa8,0xb5,0xff,0x49,0xc1,0x2f,0x2e,0x7e,0x99,0x2e,0x54,
+  0x5c,0xfe,0xb6,0xdf,0xe5,0x31,0x5b,0xa0,0x08,0x7e,0x11,0xfa,0x62,0xf1,0xbb,0x84,
+  0x7a,0x72,0x7d,0xc9,0x65,0xf0,0x00,0x00,0x00,0x0a,0x40,0x0b,0x0b,0x7d,0x79,0xc8,
+  0xbf,0xf8,0xe2,0x8b,0xea,0xf1,0xc7,0x1f,0x8f,0xca,0xf4,0x8a,0xd0,0x37,0x27,0x80,
+  0x71,0x09,0xd4,0x5a,0xa3,0xf2,0xf3,0xa8,0x04,0x98,0x57,0x65,0xbd,0x22,0xb6,0x97,
+  0xec,0x7f,0x52,0xf0,0xcb,0xbc,0xe1,0x92,0xcb,0x2f,0x91,0xfd,0xb5,0x44,0xed,0xa7,
+  0x05,0xf5,0xc9,0x79,0x15,0xa1,0x2f,0xe7,0x33,0x2e,0xef,0x1b,0x9f,0xef,0xe4,0x72,
+  0xb6,0xdf,0xc7,0x82,0x3f,0xb9,0x9c,0xa9,0x08,0x30,0xfe,0x0f,0x00,0x28,0x00,0x4d,
+  0x28,0xf4,0x25,0x00,0xec,0xa1,0x87,0x1e,0x52,0x0f,0x3c,0xf0,0x80,0x7a,0xf2,0xc9,
+  0x27,0xa3,0x68,0xef,0x78,0x0e,0xeb,0x64,0xaa,0x59,0x1e,0x41,0x72,0x59,0x26,0xf3,
+  0xa9,0xc6,0xc2,0xad,0x65,0xff,0x6a,0x75,0xf9,0x87,0xec,0x8f,0x08,0xfe,0x09,0x13,
+  0x26,0x44,0x82,0x5f,0x8e,0xf3,0x66,0x9b,0x6d,0xa6,0x36,0xdf,0x7c,0xf3,0xb5,0x6a,
+  0xf6,0xe7,0x55,0xaa,0x38,0xb6,0xe0,0xa5,0x66,0x80,0x8c,0xf3,0x8b,0xf5,0x9f,0x74,
+  0xf7,0x9b,0x0a,0x42,0xf2,0xef,0xa4,0x90,0xf7,0x45,0xfe,0x9b,0xfb,0xb0,0xd5,0x56,
+  0x5b,0xa9,0x7d,0xf7,0xdd,0x37,0xf5,0xba,0xeb,0xdb,0xb7,0x2f,0x4f,0x13,0x00,0x40,
+  0x01,0x68,0x84,0xd0,0x17,0x9e,0x7f,0xfe,0xf9,0xa8,0x3c,0xef,0xfd,0xf7,0xdf,0x1f,
+  0x05,0x83,0xc9,0xfc,0xd0,0xeb,0xaf,0xbf,0x7e,0xb0,0xc5,0x6b,0xe2,0xcb,0xab,0x0f,
+  0x29,0xb5,0x6b,0xbe,0xa6,0x4d,0x96,0x93,0x75,0x48,0xa1,0xd6,0xd9,0xfc,0x6a,0xe9,
+  0xbf,0x08,0x61,0x49,0xe9,0x13,0xcf,0x8a,0xac,0x63,0xf4,0xe8,0xd1,0x91,0xa0,0xb4,
+  0xd5,0xec,0x37,0xcf,0x53,0xb5,0x41,0x7f,0x62,0xf1,0xcb,0x38,0xbf,0x9c,0xdb,0xa4,
+  0xe0,0x77,0x59,0xf4,0x2e,0x85,0xc7,0x54,0x06,0x6c,0xfb,0x98,0xe4,0x93,0x9f,0xfc,
+  0x64,0xd4,0x00,0x00,0x50,0x00,0x4a,0x24,0xf4,0xe5,0xe1,0x7f,0xef,0xbd,0xf7,0xaa,
+  0xab,0xaf,0xbe,0x3a,0xb2,0x44,0x45,0x00,0x0d,0x19,0x32,0x44,0xf5,0xe9,0xd3,0xa7,
+  0x2a,0x8b,0x36,0x4d,0x40,0x56,0x13,0x65,0xef,0x1b,0xc3,0xcf,0xb2,0x7c,0x9e,0xd3,
+  0xeb,0x56,0xdb,0x7f,0x11,0xfc,0x62,0xf5,0x4b,0x2c,0x85,0x20,0x91,0xfd,0x52,0xc1,
+  0xcf,0x56,0xb3,0x3f,0xaf,0x20,0x49,0x29,0xc2,0x24,0x16,0xbf,0xb8,0xfa,0xd3,0x82,
+  0xf7,0x62,0x65,0x20,0xf6,0x14,0x98,0xa4,0x8d,0xf9,0x13,0x07,0x00,0x00,0x28,0x00,
+  0x4d,0x22,0xf8,0x05,0xb1,0x3e,0x7f,0xf5,0xab,0x5f,0xa9,0xd7,0x5f,0x7f,0xbd,0xe3,
+  0x33,0x11,0x4c,0xd3,0xa6,0x4d,0xe3,0xcc,0xd6,0x89,0x71,0xe3,0xc6,0x79,0x95,0x87,
+  0x6a,0x2b,0xf9,0x2d,0x5b,0xb6,0x2c,0x12,0xfc,0x32,0xa4,0x63,0x0a,0xf1,0xa4,0x90,
+  0xb7,0x8d,0xfd,0xbb,0x3c,0x00,0x00,0x00,0xd0,0x64,0x0a,0x40,0xf2,0x81,0x2e,0xae,
+  0xe7,0x0b,0x2f,0xbc,0x50,0xdd,0x77,0xdf,0x7d,0x9c,0xc1,0x12,0x9c,0x97,0x6a,0x63,
+  0x0e,0x5c,0x1e,0x8a,0xb8,0x88,0x8f,0x28,0x00,0xb6,0x31,0x7d,0x9b,0xb5,0x1f,0xbf,
+  0x4f,0x7e,0x67,0x5e,0x37,0x28,0x00,0x00,0x00,0x4d,0xa4,0x00,0x98,0xe3,0xc1,0x92,
+  0xbb,0x7f,0xde,0x79,0xe7,0x45,0x96,0x21,0x94,0x9b,0xac,0x41,0x89,0x71,0x2e,0xbf,
+  0x78,0x71,0x4c,0x57,0xbe,0x29,0xf8,0x93,0x9f,0x99,0x55,0xfd,0xd2,0x66,0x28,0x04,
+  0x00,0x80,0x92,0x2b,0x00,0xb6,0x40,0xb0,0x2b,0xae,0xb8,0x42,0xfd,0xcf,0xff,0xfc,
+  0x0f,0x67,0xad,0x84,0x42,0x3e,0x44,0xe0,0xbb,0xbe,0x97,0xb1,0x7d,0x49,0xe7,0x93,
+  0x20,0xbf,0xd8,0xda,0xb7,0x09,0xfa,0xf8,0xbd,0x4d,0x39,0x30,0x3d,0x00,0x71,0xd5,
+  0x3f,0xf3,0x5a,0x02,0x00,0x80,0x12,0x2b,0x00,0xe6,0x38,0xae,0x3c,0xc8,0x7f,0xf8,
+  0xc3,0x1f,0x46,0x33,0xf3,0x41,0xf9,0x15,0xb5,0xd0,0xd2,0xbd,0xc9,0x5c,0x7e,0x9b,
+  0x90,0x37,0xd7,0xe9,0x1a,0xe7,0x4f,0x0b,0x0a,0x4c,0x7a,0x00,0x50,0x04,0x00,0x00,
+  0x4a,0xac,0x00,0x98,0x0f,0x75,0xb1,0x0e,0xbf,0xfb,0xdd,0xef,0x46,0x53,0xf2,0x42,
+  0x6b,0x28,0x0b,0xa2,0xd0,0x25,0x05,0x7f,0xd2,0xa2,0x4f,0xcb,0xe7,0xb7,0xb9,0xfe,
+  0x6d,0xd5,0xfd,0x5c,0xb5,0x01,0x00,0x00,0xa0,0x84,0x0a,0x80,0xab,0x60,0xcb,0x45,
+  0x17,0x5d,0x84,0xf0,0x6f,0x22,0x01,0xef,0x73,0xf9,0x4b,0x1a,0xa1,0x08,0xfe,0x78,
+  0x52,0x1e,0x57,0xe0,0x9e,0xcd,0xda,0x4f,0x2a,0x05,0xbe,0x3a,0x00,0x71,0x60,0x20,
+  0x00,0x00,0x94,0x58,0x01,0x70,0xb9,0x74,0xaf,0xbd,0xf6,0xda,0xa8,0xb0,0x0f,0x34,
+  0x07,0x69,0x75,0x07,0x24,0xb0,0x2f,0x59,0xb6,0xd7,0x96,0xcf,0xef,0xf2,0x04,0xb8,
+  0x14,0x04,0xd7,0xf0,0x80,0xd9,0x18,0x02,0x00,0x09,0x2e,0x9d,0x31,0x63,0x46,0xd4,
+  0xde,0x7b,0xef,0xbd,0x8e,0xf7,0x71,0x93,0xcc,0x93,0xe3,0x8f,0x3f,0x5e,0x1d,0x77,
+  0xdc,0x71,0xd1,0x1c,0x16,0x00,0x28,0x00,0x0d,0x12,0xfe,0xf2,0x30,0x7f,0xec,0xb1,
+  0xc7,0xd4,0x2f,0x7f,0xf9,0x4b,0xce,0x50,0x93,0x7b,0x00,0x44,0xf0,0x8b,0xbb,0x3f,
+  0xce,0xe5,0x4f,0x5a,0xef,0xf1,0xfb,0xb8,0xa4,0x6f,0x52,0x80,0xbb,0xb2,0x00,0x4c,
+  0x21,0x9f,0x54,0x26,0x4c,0x0f,0x80,0x29,0xf0,0xc9,0x06,0x68,0x2d,0xe4,0x9a,0x32,
+  0x05,0xb9,0xab,0xc5,0x85,0xab,0x4c,0x06,0x0d,0x1a,0xa4,0xfe,0xcf,0xff,0xf9,0x3f,
+  0xea,0xcc,0x33,0xcf,0x54,0xfd,0xfa,0xf5,0xe3,0x1a,0x01,0x14,0x80,0x46,0x08,0xff,
+  0x64,0x93,0xb9,0xe3,0x65,0xdc,0x1f,0x17,0x6e,0x73,0x08,0x7d,0xdb,0xdf,0xf2,0x70,
+  0x16,0x8b,0x5f,0xca,0xf6,0x26,0xdd,0xf1,0xb6,0x68,0x7d,0x53,0x60,0xbb,0xaa,0xfd,
+  0x99,0xc3,0x02,0xbe,0x21,0x83,0xe4,0xb6,0xa0,0x39,0x90,0x73,0x26,0x95,0x26,0x43,
+  0x84,0xfa,0xdc,0xb9,0x73,0xab,0xde,0x8e,0x08,0xfe,0xff,0xfe,0xef,0xff,0x5e,0x47,
+  0xf0,0x93,0x3e,0x0a,0x28,0x00,0x0d,0x14,0xfe,0xf2,0x00,0x90,0x88,0x7f,0x99,0xe2,
+  0x15,0x9a,0x03,0xd3,0xe5,0x2f,0xe7,0x70,0xce,0x9c,0x39,0xce,0x40,0x3c,0x9b,0x80,
+  0x77,0x09,0x74,0xdb,0xb0,0x80,0x29,0xd8,0x6d,0xf1,0x01,0xb1,0xd2,0xc1,0x10,0x40,
+  0x39,0x48,0xba,0xe0,0xd3,0x9a,0x4c,0x2a,0x15,0xa7,0x6f,0x16,0x41,0x2c,0xf8,0xbf,
+  0xfa,0xd5,0xaf,0xaa,0xfe,0xfd,0xfb,0xaf,0xf3,0x3c,0xb2,0x55,0xaa,0x04,0x40,0x01,
+  0x28,0x48,0xf8,0x27,0x1f,0xe0,0xf2,0xc0,0x96,0xea,0x7e,0x4f,0x3c,0xf1,0x04,0x67,
+  0xa6,0x49,0xbd,0x00,0xbe,0x4a,0x7d,0x49,0xc1,0x6e,0x73,0xf3,0x9b,0x02,0xdd,0xe7,
+  0x11,0xf0,0xa5,0x04,0x22,0xf8,0x8b,0x23,0x0f,0x17,0x7c,0xbd,0x10,0xc1,0xff,0x5f,
+  0xff,0xf5,0x5f,0xea,0xf4,0xd3,0x4f,0xef,0x10,0xfc,0x69,0xd7,0x85,0xa9,0xd4,0x02,
+  0xa0,0x00,0x14,0xe8,0x01,0x90,0x87,0xb9,0x3c,0x24,0x18,0xf7,0x6f,0x5e,0x05,0x20,
+  0x39,0xb6,0x6f,0x56,0xe7,0xf3,0xa5,0xe9,0xb9,0x82,0xf7,0x42,0x32,0x03,0xd2,0xd6,
+  0x05,0xd9,0xa8,0x97,0x0b,0xbe,0xde,0x82,0xff,0xb4,0xd3,0x4e,0xeb,0x10,0xfc,0xc9,
+  0x6b,0x30,0xf9,0x6a,0xfb,0x0c,0x25,0x00,0x50,0x00,0x0a,0xb4,0x16,0x63,0x61,0x21,
+  0xed,0xa6,0x9b,0x6e,0x8a,0xc6,0xff,0xa1,0xb9,0x30,0x1f,0x94,0xe2,0xc2,0xb5,0x59,
+  0xe8,0x36,0xeb,0xdd,0x54,0x0a,0x6c,0x31,0x02,0xae,0xc0,0xc0,0xb4,0xba,0x01,0xb6,
+  0x99,0xff,0xda,0xf9,0x21,0x5e,0x16,0x17,0x7c,0xe8,0xf5,0x24,0xd3,0x4e,0xbb,0x9a,
+  0x7c,0x2f,0x33,0x44,0x26,0xe7,0x8a,0xb0,0x09,0xfe,0xb3,0xce,0x3a,0x4b,0x9d,0x7a,
+  0xea,0xa9,0xaa,0x6f,0xdf,0xbe,0x6b,0x05,0x9b,0xc6,0x2d,0xde,0x96,0x39,0x59,0x95,
+  0x4d,0x09,0x00,0x40,0x01,0xc8,0xd9,0xea,0x4f,0x36,0xb9,0xa1,0xff,0xfc,0xe7,0x3f,
+  0x73,0x46,0x5a,0x40,0x11,0xb0,0x09,0x77,0x5b,0x10,0xa0,0x2b,0x9f,0xdf,0x15,0x1f,
+  0x10,0x62,0xed,0xb7,0x53,0x10,0x60,0x33,0xb9,0xe0,0x85,0x58,0x80,0x77,0xe9,0xd2,
+  0x65,0x1d,0xa1,0x2e,0x9f,0xc5,0x82,0xdf,0x14,0xba,0xc9,0x6b,0x44,0xea,0x48,0x48,
+  0x4b,0x13,0xfc,0x12,0xd8,0x77,0xca,0x29,0xa7,0x38,0x05,0xbf,0xa9,0x04,0xd8,0xae,
+  0x63,0x53,0xf8,0xa3,0x0c,0x00,0x0a,0x40,0x4e,0x4a,0x40,0xf2,0x81,0x2f,0x4d,0x6e,
+  0xd0,0x7b,0xee,0xb9,0xa7,0x29,0x5c,0x8a,0xe0,0xf6,0xe8,0xc4,0xc4,0x45,0x7e,0x4c,
+  0x45,0x20,0x79,0xfe,0x5d,0x13,0xf8,0xd8,0xd2,0xfe,0xd2,0x84,0xbd,0x2b,0x33,0x20,
+  0xb9,0xed,0x66,0x0a,0x02,0x6c,0x36,0x17,0xbc,0x29,0xc4,0x6d,0x7f,0xcb,0xf1,0x97,
+  0xf7,0xae,0x02,0x51,0xb6,0x6b,0xca,0x0c,0xf2,0x94,0x54,0x52,0x9f,0xe0,0x3f,0xe3,
+  0x8c,0x33,0xd4,0x49,0x27,0x9d,0xa4,0xfa,0xf4,0xe9,0xd3,0x31,0xc7,0x84,0x4b,0xf0,
+  0xc7,0xfb,0x15,0xbf,0xf7,0x79,0xb5,0x00,0x50,0x00,0x72,0x12,0x14,0x36,0x25,0x80,
+  0x82,0x3f,0xad,0xe1,0x01,0xc8,0x9a,0xba,0x67,0xfb,0x4d,0xda,0xf2,0x49,0x2f,0x82,
+  0x99,0x19,0x60,0x7a,0x18,0x7c,0xb3,0x0f,0xd6,0x93,0x66,0x73,0xc1,0x27,0x85,0xb9,
+  0xeb,0x7d,0x52,0x88,0x86,0x4c,0x02,0x15,0x0b,0xda,0xf8,0x7d,0xda,0xb4,0xd1,0x49,
+  0xc1,0x2f,0x2d,0x4d,0xf0,0x4b,0x60,0xdf,0x89,0x27,0x9e,0x18,0x59,0xfc,0x42,0x5c,
+  0x6c,0x2a,0x4d,0xe0,0xc7,0xfb,0x20,0x4d,0xae,0x99,0xa4,0x12,0x80,0xf0,0x07,0x14,
+  0x80,0x3a,0x59,0xff,0xd2,0x26,0x4f,0x9e,0xac,0x5e,0x7b,0xed,0x35,0xce,0x46,0x8b,
+  0x78,0x03,0xe4,0x01,0x9c,0xf4,0x00,0x98,0x82,0xd9,0xb4,0xd0,0x6d,0x4a,0x81,0x4d,
+  0x71,0x08,0xcd,0x02,0xb0,0x0d,0x17,0x14,0x41,0x33,0xb9,0xe0,0x63,0xc1,0x17,0x0b,
+  0x70,0x79,0x75,0xbd,0x77,0xb9,0xe0,0x43,0xa7,0x75,0xce,0xe3,0x3a,0x92,0x34,0x60,
+  0x69,0x69,0x82,0xff,0x2b,0x5f,0xf9,0x8a,0x3a,0xe1,0x84,0x13,0x3a,0x2a,0xf7,0x49,
+  0xcd,0x09,0x53,0xf0,0xc7,0xfd,0x8e,0x85,0x7c,0x2c,0xe8,0x93,0x7d,0x4c,0x2a,0x23,
+  0xa6,0xe2,0x02,0x80,0x02,0x90,0xa3,0xe0,0x37,0x1f,0xe0,0x62,0xed,0x3c,0xfc,0xf0,
+  0xc3,0x9c,0x89,0x16,0x22,0x1e,0x02,0xf0,0x95,0xe8,0x75,0x55,0xef,0x73,0x95,0x05,
+  0x0e,0x59,0x97,0x4d,0x29,0xc8,0x7a,0xad,0x8a,0x15,0x2e,0xc1,0xa8,0x52,0x32,0xd6,
+  0x56,0x36,0xb6,0x6c,0x2e,0xf8,0x58,0x80,0xc7,0x42,0xbc,0x6b,0xd7,0xae,0xd6,0xcf,
+  0x6b,0xb9,0x7f,0x93,0x42,0x32,0x69,0x41,0xe7,0x89,0x9c,0x3b,0x11,0xfa,0xe2,0x2d,
+  0x49,0x13,0xfc,0x12,0xd1,0x7f,0xcc,0x31,0xc7,0x74,0x08,0x7e,0x51,0xc4,0x92,0x63,
+  0xfa,0xa6,0xb5,0x1f,0x0b,0xff,0xe4,0xb5,0x12,0x0f,0x49,0x98,0x59,0x27,0x21,0x43,
+  0x13,0x00,0x28,0x00,0x35,0x2a,0x03,0x49,0x0f,0xc0,0xa3,0x8f,0x3e,0xca,0x99,0x68,
+  0x01,0xcb,0x3f,0x7e,0x80,0xda,0xb2,0x00,0x7c,0x56,0x7e,0x5a,0xb3,0xb9,0xfe,0x4d,
+  0x61,0x6f,0x0b,0x2e,0x4c,0x56,0x92,0x14,0xeb,0x50,0x02,0x4d,0x27,0x4e,0x9c,0x18,
+  0x55,0x28,0xfc,0xe0,0x83,0x0f,0xa2,0x62,0x45,0x32,0xde,0x2e,0x02,0x3f,0x16,0xf6,
+  0x65,0x70,0xc1,0xc7,0x96,0xaa,0x08,0x72,0x9f,0x50,0xaf,0x87,0x40,0x32,0xe7,0x78,
+  0xc8,0xdb,0x3a,0x96,0xf3,0x24,0x42,0x5f,0x84,0xbf,0xab,0xfa,0xa7,0x08,0xfe,0xff,
+  0xfc,0xcf,0xff,0x54,0x47,0x1e,0x79,0xa4,0xea,0xd5,0xab,0x57,0x87,0xe0,0xb7,0x59,
+  0xfc,0xc9,0x2c,0x02,0x59,0x9f,0x1c,0x2b,0xb3,0x3f,0xae,0xe1,0x27,0x02,0x00,0x01,
+  0x05,0xa0,0x00,0xe1,0xe0,0x0a,0xfe,0x93,0x07,0xf1,0xeb,0xaf,0xbf,0xce,0x99,0x68,
+  0x62,0x4c,0xd7,0x70,0x5c,0xfe,0xd7,0x67,0xe5,0xa7,0x05,0xf5,0xa5,0xcd,0x01,0xe0,
+  0xca,0x24,0x48,0x2e,0x23,0x81,0x60,0xa3,0x46,0x8d,0x52,0xaf,0xbe,0xfa,0xaa,0x7a,
+  0xeb,0xad,0xb7,0x3a,0x84,0xc5,0x83,0x0f,0x3e,0xd8,0xb0,0x63,0x94,0x14,0xde,0x66,
+  0x4b,0x0a,0xf8,0xd8,0x5a,0x6d,0x94,0xd0,0x09,0x99,0xd5,0x31,0xed,0xfb,0x2c,0x82,
+  0x7f,0xde,0xbc,0x79,0x91,0xf0,0x4f,0x13,0xfc,0x5f,0xfa,0xd2,0x97,0xd4,0x61,0x87,
+  0x1d,0xa6,0x7a,0xf6,0xec,0x19,0x24,0xf8,0x93,0x0a,0x80,0x4d,0xf8,0x53,0x2b,0x02,
+  0xa0,0x8e,0x1e,0x80,0x34,0x25,0xe0,0x95,0x57,0x5e,0xe1,0x2c,0x34,0xb9,0xf5,0x6f,
+  0x5a,0x88,0xb1,0x07,0xc0,0x1c,0x8f,0xb7,0x59,0xfb,0xa6,0x65,0xef,0x8a,0x15,0x48,
+  0x2e,0x17,0xbf,0xb7,0x15,0x19,0xea,0xd6,0xad,0x9b,0x1a,0x3e,0x7c,0x78,0x24,0x54,
+  0x9e,0x7d,0xf6,0xd9,0xc2,0x1f,0xf0,0x36,0x41,0x6e,0x7e,0x26,0xfb,0x94,0x74,0x51,
+  0x87,0x8c,0xa1,0x67,0x11,0xa6,0x79,0x8f,0xd1,0xfb,0x2c,0xfe,0xac,0x1e,0x01,0x73,
+  0xff,0xe4,0xfa,0x10,0xc1,0x2f,0x2d,0x4d,0xf0,0x9f,0x7c,0xf2,0xc9,0xea,0x90,0x43,
+  0x0e,0x51,0x3d,0x7a,0xf4,0x58,0x47,0xf0,0xc7,0xaf,0x49,0x81,0x9f,0x14,0xfc,0xb6,
+  0x7d,0xb5,0x15,0xa0,0x4a,0xbe,0xe6,0x71,0x2e,0x00,0x50,0x00,0x02,0x04,0x7f,0xec,
+  0x01,0x98,0x34,0x69,0x12,0x67,0xa1,0xc5,0x94,0x81,0x38,0x08,0x30,0xc4,0xca,0x4f,
+  0x2b,0xfa,0x13,0xe2,0x01,0x48,0x5a,0xa1,0x43,0x86,0x0c,0x89,0xdc,0xc8,0x2f,0xbf,
+  0xfc,0x72,0x4d,0xfd,0x88,0x2d,0xc7,0xa4,0x30,0x37,0xdf,0xc7,0x6e,0xf9,0x10,0xe1,
+  0x60,0x0a,0xe4,0xbc,0xc7,0xd0,0xcd,0x31,0x7a,0x53,0x40,0x67,0x4d,0xbb,0xcb,0xdb,
+  0xe2,0x8f,0xf7,0x2f,0xf6,0xf8,0xf9,0x04,0xbf,0xa4,0xf2,0x1d,0x70,0xc0,0x01,0x1d,
+  0x82,0x5f,0x0a,0xfe,0x98,0xc5,0x7b,0x6c,0x82,0x3f,0x69,0xed,0x27,0x05,0x7e,0x16,
+  0x45,0x07,0x45,0x00,0x50,0x00,0xea,0xa0,0x04,0xc8,0xc3,0x40,0xda,0xdb,0x6f,0xbf,
+  0xcd,0x59,0x68,0x01,0xc1,0x9f,0x7c,0x2f,0x0a,0x40,0x5a,0x0c,0x40,0x68,0xb3,0x29,
+  0x0c,0xb6,0x6b,0x49,0x66,0x73,0x13,0x8b,0xff,0xcd,0x37,0xdf,0x4c,0x7d,0x78,0x27,
+  0x05,0x79,0xda,0x6b,0xde,0x0f,0xfa,0xa2,0xc7,0xd0,0x7d,0x02,0x3f,0x34,0xed,0x2e,
+  0x2f,0x8b,0xdf,0x44,0xce,0x91,0x08,0x7e,0x09,0x9a,0x4c,0x13,0xfc,0x9f,0xff,0xfc,
+  0xe7,0xd5,0x3e,0xfb,0xec,0xa3,0xba,0x77,0xef,0xbe,0x8e,0xc5,0xef,0x1a,0xe3,0x4f,
+  0x2a,0x52,0x66,0xff,0x43,0x5c,0xfc,0xb6,0x8a,0x80,0x08,0x7a,0x40,0x01,0xc8,0x59,
+  0x40,0x98,0xd6,0x7f,0xac,0x04,0x4c,0x9f,0x3e,0x9d,0xb3,0xd0,0x62,0x24,0x3d,0x00,
+  0x69,0x2e,0xfd,0xac,0xb9,0xfe,0xe6,0xb5,0x24,0x82,0x42,0x72,0xc4,0x25,0x22,0xdf,
+  0x85,0xb8,0xdf,0x45,0xb8,0x48,0x1d,0xf8,0xd8,0x42,0xcc,0x6b,0x0c,0xbb,0x5a,0x0b,
+  0xda,0x26,0x84,0xf2,0x1c,0xf3,0xf7,0x45,0xed,0xe7,0x39,0x86,0x2f,0xe7,0x5a,0x9a,
+  0xdc,0xcb,0xf1,0x6b,0xfc,0x3e,0xf9,0x79,0x5a,0x54,0xbf,0xe4,0xf0,0xef,0xb1,0xc7,
+  0x1e,0xd1,0xb9,0x92,0xe5,0x5c,0x82,0x3f,0x69,0xed,0x9b,0x25,0x9e,0x6d,0x65,0x9f,
+  0xb3,0x34,0xac,0x7c,0x40,0x01,0x28,0xd8,0xf2,0x37,0x03,0x00,0xa5,0x49,0x14,0x36,
+  0xb4,0x96,0x37,0x20,0x8e,0xa2,0x77,0x4d,0x02,0x64,0xcb,0x02,0xb0,0x59,0xf7,0xae,
+  0xef,0x44,0x00,0x88,0x5b,0x58,0x84,0xbf,0x0b,0x49,0x11,0x13,0xe1,0x12,0x97,0x83,
+  0x2d,0xd2,0x22,0xaf,0xc6,0x82,0x4e,0x53,0x00,0x1a,0x39,0x86,0x1f,0x0b,0x75,0x9b,
+  0x10,0x37,0xdf,0xd7,0x12,0x5f,0x21,0xe7,0xe6,0x33,0x9f,0xf9,0x8c,0xda,0x7d,0xf7,
+  0xdd,0x3b,0x04,0x7f,0x5a,0x1e,0x7f,0xac,0xbc,0x98,0xe9,0x7c,0x36,0x81,0x6f,0xa6,
+  0x01,0xa6,0xcd,0x2d,0x60,0x53,0x04,0x7c,0xa5,0x82,0x01,0x50,0x00,0x32,0x28,0x01,
+  0x69,0x5e,0x00,0x19,0xb3,0x85,0xe6,0x16,0xf8,0xc9,0x07,0x65,0x32,0x05,0x30,0x69,
+  0xc9,0x87,0xb8,0xfa,0xcd,0xc0,0xc0,0xe4,0xe7,0xf1,0x67,0x62,0x1d,0xa6,0x09,0x9f,
+  0x01,0x03,0x06,0xa8,0xc1,0x83,0x07,0x77,0xa4,0x8a,0x55,0x63,0xf1,0xd6,0xdb,0x43,
+  0x90,0x55,0x61,0xc8,0x4a,0xac,0x6c,0x8b,0x80,0x35,0xad,0xf5,0x58,0x98,0xe7,0x21,
+  0xd4,0x43,0x05,0xbf,0x14,0xef,0xd9,0x79,0xe7,0x9d,0xa3,0xe1,0x16,0x97,0xe0,0x4f,
+  0x0a,0x6e,0x53,0x51,0x72,0x59,0xf8,0xb6,0xf9,0x05,0x5c,0x73,0x0f,0xd8,0x84,0xbf,
+  0x4d,0xe8,0x33,0x2c,0x00,0x28,0x00,0x35,0x0a,0x08,0x33,0x22,0x3c,0x7e,0x20,0x49,
+  0x8b,0xdd,0x7d,0xd0,0x1a,0xb8,0x02,0x00,0x4d,0x97,0xbe,0xaf,0x78,0x8f,0xe9,0x01,
+  0x10,0x21,0x21,0xcd,0x26,0xa0,0xe4,0x01,0x2f,0x82,0x45,0x04,0xbf,0x58,0x93,0x26,
+  0x36,0x17,0x78,0x2d,0x63,0xe2,0xb5,0x5a,0xe4,0x79,0x58,0xfc,0xa6,0xab,0x3d,0xad,
+  0x95,0x21,0xd5,0x4d,0xce,0xcd,0xb1,0xc7,0x1e,0xab,0x3e,0xfa,0xd1,0x8f,0xae,0x25,
+  0xf8,0x5d,0x6e,0xfe,0xf8,0xbc,0xd9,0x8e,0xa1,0x29,0xec,0x5d,0x69,0x95,0xae,0x94,
+  0xcb,0x50,0x65,0x00,0x00,0x05,0x20,0x27,0xe1,0xef,0xca,0x02,0x68,0x74,0xd1,0x15,
+  0xc8,0xd7,0xd3,0x93,0x54,0x00,0x92,0x1e,0x80,0xf8,0xbd,0x39,0xf9,0x4f,0x52,0xc8,
+  0x27,0xd7,0x15,0xff,0x4e,0x14,0x44,0x69,0x36,0x21,0x26,0x31,0x00,0xeb,0xad,0xb7,
+  0x5e,0x24,0xfc,0x93,0xc2,0xc2,0x66,0x71,0xa7,0xbd,0xd6,0xea,0x21,0xb0,0x09,0x7c,
+  0x9f,0x80,0xb7,0x29,0x17,0xb1,0x50,0xf4,0x09,0x76,0x97,0x22,0x54,0x6f,0xe4,0x98,
+  0x4b,0xa4,0xbe,0xe4,0xe7,0x9b,0xaf,0xf1,0xfb,0xf8,0x6f,0x39,0x57,0x52,0x64,0xe9,
+  0xee,0xbb,0xef,0x6e,0xb8,0xb7,0xaa,0x9e,0x9e,0x9d,0x32,0x7a,0xeb,0xe8,0x7f,0xfd,
+  0xfb,0x3f,0x62,0xc4,0x88,0x48,0x29,0xfd,0xf9,0xcf,0x7f,0xde,0xfa,0x0a,0x80,0x6d,
+  0x26,0x37,0xd3,0xf5,0x1f,0x2b,0x00,0xd0,0xfc,0x24,0x05,0x98,0x2d,0xf8,0x2f,0x64,
+  0x82,0x20,0x53,0xf0,0x8b,0xa0,0x13,0xc1,0x6f,0x8b,0x1a,0x97,0x22,0x3f,0xeb,0xaf,
+  0xbf,0x7e,0x14,0xfd,0x6f,0xbb,0xd9,0xaa,0xc9,0x53,0xaf,0x75,0x79,0xd7,0x32,0x36,
+  0x61,0x1e,0xbb,0xe2,0xcb,0x2c,0xd4,0x6d,0x82,0xdd,0xfc,0x3c,0x8e,0xd6,0x0f,0xc1,
+  0x76,0x1e,0xeb,0x91,0x7e,0x68,0xfe,0x3e,0xa9,0x90,0xd6,0x52,0x32,0xda,0xa6,0xfc,
+  0x66,0x5d,0x1f,0xfd,0x6f,0xfd,0xfe,0x4b,0x6a,0xb2,0xb4,0x97,0x5e,0x7a,0xc9,0x1a,
+  0xb7,0xd2,0x76,0x1e,0x80,0x64,0x1a,0xa0,0x2b,0x25,0x08,0x9a,0xd7,0x03,0x10,0x0b,
+  0x32,0x9b,0xeb,0xdf,0x25,0xec,0xcd,0xe5,0xe3,0x71,0x7e,0x13,0xb1,0xf4,0x45,0xf0,
+  0xc7,0x35,0xe0,0xeb,0x65,0x89,0x98,0xeb,0x4f,0x0a,0xf5,0xd8,0x62,0x4f,0x0a,0xf5,
+  0xf8,0x7d,0x99,0x84,0xba,0x08,0xeb,0xd8,0x12,0x37,0x05,0x7a,0xdc,0xe4,0x3b,0x69,
+  0xa1,0x9e,0x8d,0xd8,0x85,0x1f,0xda,0xc7,0x7a,0x5b,0x9c,0x8d,0xf0,0xec,0xd0,0x7f,
+  0xfa,0x1f,0xdf,0x1b,0x52,0xef,0x42,0x26,0x01,0x7b,0xf7,0xdd,0x77,0x9d,0xfb,0xd2,
+  0x68,0x65,0xa0,0xae,0x31,0x00,0xa6,0x85,0x88,0x02,0xd0,0x1a,0xc2,0x3f,0x79,0xf1,
+  0x26,0x67,0x02,0x4c,0x9e,0x7f,0x9f,0x47,0x20,0x4e,0xff,0x32,0xc7,0xac,0x65,0xcc,
+  0x56,0x84,0xbe,0xb8,0xfa,0xe3,0xc2,0x30,0xb5,0xa6,0xdd,0xd9,0x6e,0xec,0x38,0x28,
+  0x4e,0x6e,0x5c,0xd9,0x8f,0x38,0x3e,0x25,0x29,0xd4,0x63,0xc1,0x5e,0x86,0xeb,0x36,
+  0x16,0xea,0xa6,0x00,0x77,0x09,0xf5,0xd0,0x07,0x62,0x5a,0xdf,0x6c,0x16,0x4e,0x16,
+  0x05,0xc7,0x36,0x47,0x43,0x96,0x07,0xac,0x69,0xc1,0x85,0xac,0x2f,0x6d,0x79,0x57,
+  0xdd,0x7f,0xfa,0x4f,0xff,0xab,0xed,0x7f,0x5c,0xf3,0x42,0xbc,0x93,0x62,0xb0,0x98,
+  0xbf,0x33,0x97,0x6f,0xf4,0xd4,0xd3,0x85,0xa7,0x01,0x9a,0x42,0xc0,0x6c,0xd0,0xdc,
+  0x98,0x17,0x6d,0x2c,0xc0,0x5d,0xd1,0xfc,0xb6,0x80,0x3f,0x11,0xb4,0xa6,0xb5,0x2c,
+  0xc2,0x6b,0xe8,0xd0,0xa1,0x91,0xfb,0xcc,0x56,0xcf,0xdd,0xdc,0xb6,0x2b,0xa5,0x2d,
+  0x29,0xb8,0x6d,0xef,0xcb,0x2a,0xd4,0xcd,0xd7,0xb8,0x49,0x90,0xa3,0x58,0xf0,0xb6,
+  0x60,0x47,0x9f,0xfb,0xbd,0x56,0x8b,0xad,0x56,0x0b,0xc9,0x7c,0x20,0xd7,0x2a,0x20,
+  0xb2,0x3e,0xb0,0xe9,0x3f,0xfd,0x2f,0xb2,0xff,0x22,0xf8,0xc5,0x3b,0x39,0x70,0xe0,
+  0xc0,0x75,0xac,0x7c,0x33,0x05,0x3a,0x6f,0xef,0x48,0xa9,0x87,0x00,0x4c,0x4f,0x80,
+  0x39,0x55,0x2c,0xb4,0x86,0xfb,0x3f,0x16,0xe6,0xa6,0x07,0xc0,0x2c,0xe8,0x13,0x5f,
+  0x07,0xb1,0x00,0x4e,0x5e,0x07,0xa2,0x39,0x0f,0x1b,0x36,0x2c,0xba,0x89,0x6c,0x37,
+  0x5e,0xec,0x7e,0x8f,0xad,0xf3,0xa4,0x20,0x37,0x5b,0x99,0xdc,0xef,0x49,0x6b,0x3c,
+  0x29,0xd8,0x63,0x81,0x2e,0x7f,0xc7,0x55,0x08,0x43,0x3c,0x1b,0x21,0xf1,0x33,0xb5,
+  0x8e,0xa9,0xda,0x2c,0x26,0x73,0x0c,0xd5,0xb7,0xbe,0xe4,0x39,0xf0,0x59,0x60,0xbe,
+  0xf5,0xf9,0x04,0x04,0xfd,0xa7,0xff,0x8d,0xe8,0xbf,0x54,0x21,0x95,0xfb,0x37,0xb6,
+  0xf8,0x93,0x9e,0x4e,0xb3,0x48,0x55,0xfc,0x7b,0xb3,0xee,0x44,0xc8,0x74,0xd4,0x4d,
+  0x39,0x04,0x60,0x1b,0x06,0x60,0x08,0xa0,0x35,0xbd,0x00,0xc9,0xa9,0x80,0xd3,0xa6,
+  0xe9,0x8d,0xdd,0xec,0xc9,0xf3,0x2f,0x05,0x7b,0xc4,0xda,0x97,0x1b,0x49,0xbe,0x97,
+  0x71,0x33,0x53,0xa0,0xbb,0xb2,0x01,0x1a,0x25,0xd4,0xa5,0x89,0x00,0x4f,0x0a,0x77,
+  0xb3,0x89,0x50,0x0f,0x7d,0x20,0xc5,0xc7,0x2e,0x4f,0x8b,0x2b,0xcf,0x31,0xdb,0xbc,
+  0x2b,0x1e,0x96,0x6d,0x7d,0xf4,0x9f,0xfe,0x67,0x59,0xbf,0x8c,0xef,0x0b,0xb1,0xc5,
+  0xef,0xf2,0x7e,0xdb,0x94,0x0a,0x57,0x8d,0x8b,0x7a,0x2b,0x01,0x85,0x65,0x01,0x98,
+  0x82,0xdf,0xa6,0x08,0xa0,0x00,0xb4,0x9e,0x17,0x20,0xad,0x0e,0x40,0x5a,0x80,0xdf,
+  0xc2,0x85,0x0b,0xa3,0xd6,0x48,0xa1,0x2e,0xc2,0xdc,0x14,0xe0,0xb6,0xcf,0x92,0x42,
+  0x3d,0xd4,0xfd,0x5e,0xc4,0x03,0x29,0xab,0x45,0x54,0xab,0x8b,0x33,0x0f,0x45,0x91,
+  0xfe,0xd3,0xff,0x66,0xef,0x7f,0x3c,0x64,0x29,0x71,0x49,0xe6,0xba,0xcc,0xe7,0xa2,
+  0x29,0xc8,0x45,0xc9,0x4f,0xd6,0xba,0x48,0x2a,0x02,0x2d,0x1b,0x03,0xe0,0xf2,0x02,
+  0x30,0x17,0x77,0x6b,0xb1,0x74,0xe9,0xd2,0x8e,0xb9,0xdd,0x4d,0xa5,0x4f,0x4a,0xf7,
+  0xd6,0xbb,0x28,0x4d,0x52,0xa8,0x27,0x05,0xb9,0x29,0xd4,0xe5,0xef,0xa4,0xfb,0xdd,
+  0xf7,0x40,0x08,0x75,0x61,0x16,0xfd,0x40,0xf2,0xb9,0x64,0xab,0xd9,0x7e,0x96,0xf5,
+  0xd1,0x7f,0xfa,0xdf,0x4e,0xfd,0x97,0xe7,0x97,0x3c,0xe3,0x24,0x28,0x59,0xe2,0x92,
+  0x7c,0xc1,0x90,0xb6,0x00,0x3f,0x59,0x47,0x5c,0x8c,0x2a,0x7e,0x46,0xd9,0x02,0x03,
+  0xeb,0xe5,0x05,0xa8,0x6b,0x16,0x80,0x4d,0x11,0x80,0xe6,0xb7,0xfe,0xa5,0x9c,0xf3,
+  0x94,0x29,0x53,0x22,0xb7,0x7d,0x5c,0x7b,0x3f,0x3e,0xb7,0x22,0xf8,0xf3,0x1c,0x8f,
+  0x8f,0x85,0xba,0x29,0xd8,0x6d,0xaf,0xd5,0x5a,0xea,0x45,0x51,0x6f,0x8b,0xab,0x6c,
+  0xd0,0x7f,0xfa,0xdf,0x8c,0xfd,0x97,0xfd,0x93,0x79,0x47,0xc4,0xe2,0x97,0x52,0xe3,
+  0x2e,0x81,0x6f,0xeb,0x53,0x72,0x5a,0x6a,0x79,0x4d,0xce,0x93,0x62,0x3e,0xd7,0x5a,
+  0xc2,0x03,0x90,0xa6,0x15,0xe1,0x01,0x68,0x2d,0xc1,0x2f,0xd6,0xbe,0x4c,0xe7,0x3c,
+  0x67,0xce,0x9c,0x75,0xbe,0x8b,0xdd,0x64,0x21,0x82,0x35,0x2e,0x3e,0x63,0x4b,0x6b,
+  0x13,0x8d,0x5b,0xd6,0x13,0x97,0xf9,0xcd,0x22,0xd4,0x6d,0x43,0x0d,0x00,0x00,0xa1,
+  0x88,0xe0,0x97,0xd8,0xa4,0xe1,0xc3,0x87,0x07,0x3d,0x13,0x5d,0x55,0x46,0x63,0x25,
+  0x20,0xf6,0x82,0xc6,0x1e,0x47,0xd7,0xd4,0xd5,0x4d,0x1d,0x03,0x90,0xc5,0x0b,0x00,
+  0xcd,0x85,0x08,0x74,0x11,0xf8,0x33,0x67,0xce,0x8c,0xac,0x7b,0x9b,0xd0,0x8d,0x3f,
+  0x77,0x09,0x75,0xf3,0xbd,0x4d,0xa8,0x4b,0x4a,0x8d,0x78,0x16,0x92,0xe3,0x6c,0x66,
+  0x1a,0x61,0xbd,0x27,0xf5,0x09,0x7d,0x00,0xd4,0xab,0x20,0x11,0xfd,0xa7,0xff,0xf4,
+  0xbf,0x98,0xfe,0x4b,0x80,0x9f,0x4c,0x21,0x3e,0x72,0xe4,0xc8,0x54,0x41,0x9f,0x26,
+  0xf4,0x6d,0x1e,0x8e,0xd8,0x28,0xf1,0xcd,0x0f,0xd2,0xb4,0x1e,0x80,0x34,0x8f,0x00,
+  0xc2,0xbf,0x79,0x11,0x2b,0x7c,0xf6,0xec,0xd9,0x51,0x75,0x2b,0xb9,0x48,0x45,0x70,
+  0x8b,0xbb,0x5f,0x52,0x5f,0x92,0xa9,0x6d,0x71,0x8e,0x7a,0x48,0x9e,0xba,0xcd,0x25,
+  0x28,0x37,0x9e,0x6c,0x43,0xc6,0xc9,0x64,0x5d,0xa6,0x07,0x21,0x6b,0xe9,0xd1,0x5a,
+  0x4a,0x95,0xe6,0xe5,0x01,0xcb,0x73,0x7b,0xf4,0x9f,0xfe,0xd3,0xff,0xe2,0xfa,0x2f,
+  0xc6,0x8b,0xcc,0x24,0x6a,0x13,0xfc,0x69,0xbf,0xf5,0xd5,0x27,0x48,0xc6,0x00,0x24,
+  0xd3,0x00,0x6d,0x05,0xd2,0x5a,0x2e,0x0d,0x30,0x54,0x39,0x80,0xf2,0x22,0x02,0x59,
+  0xf2,0xf3,0xa5,0x25,0x49,0x73,0x8d,0xf9,0xc6,0xfc,0x92,0xaf,0x32,0x64,0x20,0x59,
+  0x00,0x72,0x43,0xb8,0xdc,0xfc,0x8c,0xa1,0xd2,0x7f,0xfa,0x4f,0xff,0x8b,0xe8,0x7f,
+  0x5c,0xd6,0x7a,0xc3,0x0d,0x37,0xb4,0x0a,0x72,0x57,0x8d,0x03,0x9b,0xa5,0x6f,0xfb,
+  0x2c,0x19,0x48,0x98,0x4c,0x03,0x94,0xe7,0x5d,0x1c,0x08,0x68,0x2e,0xdb,0xb4,0x41,
+  0x80,0x36,0x0b,0x1f,0xcb,0xbf,0xb9,0x49,0xe6,0xac,0x66,0x55,0xf0,0x5c,0xaf,0x71,
+  0x09,0xde,0x38,0x43,0x20,0x9e,0x9a,0xd5,0x76,0x83,0x95,0xe1,0x81,0x51,0xf4,0xfa,
+  0x5c,0x56,0x05,0xfd,0xa7,0xff,0xf4,0xbf,0x98,0xfd,0x8d,0x4b,0x7e,0x8b,0x61,0x63,
+  0x7b,0xf6,0xb8,0x66,0xed,0x0c,0x11,0xce,0x36,0x2f,0x40,0xf2,0x39,0x17,0xb7,0x58,
+  0x09,0xc8,0xb2,0xee,0xa6,0xf0,0x00,0xa4,0xb9,0x4b,0x50,0x06,0xda,0x8f,0xe4,0x78,
+  0x97,0x5c,0xf4,0x22,0xf8,0xcd,0xe2,0x3e,0xc9,0x1b,0x34,0xd6,0x8c,0x5d,0xca,0x47,
+  0xc8,0x18,0x9f,0xed,0x7d,0x2d,0x63,0x86,0x69,0xeb,0xab,0x66,0xcc,0xd1,0x65,0x51,
+  0xd0,0x7f,0xfa,0x4f,0xff,0x8b,0xeb,0xbf,0x2c,0xb7,0x78,0xf1,0xe2,0x28,0xa5,0x2f,
+  0x1e,0xae,0x34,0xc7,0xf3,0x5d,0x0a,0x88,0x69,0xd9,0x9b,0xcb,0xb8,0x9e,0x67,0x71,
+  0x10,0xa0,0x78,0x53,0xa5,0x25,0xa7,0x47,0x6f,0x94,0x3c,0xac,0x5b,0x10,0x20,0xb4,
+  0x2e,0x59,0x83,0x72,0xc4,0xdd,0x26,0xc2,0xdf,0xa6,0x65,0x9b,0xcb,0x27,0xf3,0x64,
+  0x6b,0x2d,0xed,0xe9,0xb3,0x28,0x7c,0x0f,0x1c,0xdf,0xfa,0xcc,0xdf,0xfb,0xf6,0x3f,
+  0x64,0xfd,0xf4,0x9f,0xfe,0xd3,0xff,0x7c,0xfb,0x2f,0xc1,0xc5,0x92,0x55,0x14,0x57,
+  0xf0,0xb3,0x3d,0x87,0x5c,0x55,0xf9,0xd2,0x94,0x01,0x73,0x9a,0x61,0xdb,0xf2,0xe2,
+  0x71,0x88,0x5b,0x5c,0x4b,0xc0,0xd6,0xea,0x15,0x14,0xd8,0x15,0xf1,0x05,0xb5,0x0a,
+  0xff,0x2c,0xb5,0xbc,0x45,0xf0,0x27,0x0b,0xe9,0x84,0x7a,0x0c,0x42,0x2d,0x9a,0x10,
+  0x6b,0x23,0xd4,0x22,0xc9,0xe2,0xd1,0xc8,0x63,0xff,0xe8,0x3f,0xfd,0xa7,0xff,0xc5,
+  0xad,0x5f,0x2c,0x7e,0x09,0xf0,0x1b,0x31,0x62,0x84,0xd7,0x8b,0x60,0x13,0xf0,0xb6,
+  0xdf,0x84,0xce,0x8c,0x98,0xac,0x03,0x20,0xcd,0x56,0x2d,0xb5,0x11,0xa0,0x00,0x40,
+  0xcd,0x6e,0x7d,0x9f,0x86,0x1e,0xcf,0xca,0x17,0x47,0xbc,0x9a,0xb3,0xfb,0x99,0xeb,
+  0x2a,0x4b,0xed,0xf2,0x46,0x1d,0x4b,0xfa,0x4f,0xff,0xe9,0x7f,0x7e,0xfd,0x97,0x5c,
+  0x7e,0x79,0xe6,0xc8,0xec,0xa2,0xa6,0xd1,0x62,0xfe,0xd6,0x25,0xdc,0xcd,0x67,0x5d,
+  0x5a,0xaa,0x9f,0x4d,0xf0,0xc7,0xdb,0x8b,0x85,0x7f,0xb2,0x35,0x52,0x11,0x40,0x01,
+  0x80,0x9a,0x3d,0x00,0xe6,0xfb,0xe4,0x67,0xc9,0x62,0x40,0xa6,0x6b,0xd1,0xf6,0x80,
+  0xf2,0x69,0xfc,0x3e,0x17,0x5f,0xd2,0x65,0xe8,0x73,0x49,0x66,0x75,0x79,0x16,0xe5,
+  0x3d,0xa1,0xff,0xf4,0x9f,0xfe,0xe7,0xdf,0xff,0x78,0x02,0x31,0x29,0xe4,0x13,0x62,
+  0xf1,0xa7,0x79,0x02,0x6c,0x16,0x7e,0x48,0x5a,0xa1,0xcd,0x18,0x2a,0x53,0x41,0x3c,
+  0x14,0x00,0x28,0x04,0xb9,0xd0,0x45,0xdb,0x4d,0x1b,0xe3,0x0f,0x19,0x33,0xcc,0xf2,
+  0x40,0xa8,0xc6,0xe2,0xc9,0x73,0x8c,0x2d,0xab,0x05,0x43,0xff,0xe9,0x3f,0xfd,0xcf,
+  0xbf,0xff,0x22,0xf8,0xe3,0x0a,0x7e,0xae,0xe7,0x4f,0x9a,0x80,0x77,0xd5,0xf5,0x0f,
+  0x71,0xf1,0xbb,0xde,0x27,0xff,0x4e,0x2a,0x01,0xf1,0x67,0x21,0x13,0x09,0xa1,0x00,
+  0x40,0x29,0x3d,0x00,0x66,0x90,0x8c,0x69,0xf1,0x67,0x19,0x73,0xcc,0xd3,0xe2,0x71,
+  0x3d,0x3c,0x8a,0xbc,0xb1,0xb2,0x6e,0x8f,0xfe,0xd3,0x7f,0xfa,0x9f,0x4f,0xff,0x65,
+  0x39,0x29,0x22,0x26,0xc1,0x7d,0x32,0xd6,0x1f,0x52,0x99,0xaf,0x16,0xeb,0x3f,0x4d,
+  0xe0,0x9b,0x25,0x80,0x93,0x53,0xa2,0xbb,0xac,0x7f,0x73,0x78,0x01,0x0f,0x00,0x94,
+  0x16,0x29,0xd6,0xd3,0xa7,0x4f,0x1f,0xeb,0x0d,0xec,0x1a,0xe3,0xaf,0x37,0x14,0x4e,
+  0xa1,0xff,0xf4,0xbf,0x3d,0xfa,0x3f,0x77,0xee,0x5c,0xd5,0xbb,0x77,0xef,0x75,0x4a,
+  0x87,0x9b,0xc7,0xc1,0xf5,0x59,0x68,0x30,0x5f,0x9a,0xa2,0x63,0x4b,0x23,0x74,0x6d,
+  0xcb,0x65,0xfd,0x13,0x03,0x00,0xa5,0x46,0x72,0x66,0xa5,0x04,0xb0,0x94,0xe9,0x8d,
+  0xc7,0xb4,0xcc,0x22,0x16,0x79,0xd5,0xea,0xce,0xe3,0xfb,0x34,0x97,0x62,0xad,0x69,
+  0x53,0x79,0xa7,0x65,0xd1,0x7f,0xfa,0x4f,0xff,0xb3,0xf5,0x4f,0x26,0x24,0x93,0x3e,
+  0x4a,0x5a,0x9f,0x6f,0x3c,0xdd,0x66,0xe1,0xfb,0xac,0xfe,0x2c,0xfb,0x1e,0x32,0x4c,
+  0xe0,0xb3,0xfe,0xeb,0x6e,0xc8,0x21,0xd2,0x20,0x0b,0x32,0xbe,0x26,0xda,0x36,0x00,
+  0x40,0xa3,0x89,0x4b,0x91,0xbb,0x02,0x0a,0x93,0x82,0xd6,0x15,0xdd,0xef,0x12,0xc0,
+  0x21,0x63,0xfa,0x69,0x93,0x02,0xd9,0xb6,0x5f,0x36,0x3a,0x73,0x09,0x01,0x00,0x40,
+  0xb3,0x62,0x0b,0xde,0xb3,0x09,0x5e,0xdf,0xb8,0xbe,0xb9,0x2e,0x9f,0x77,0xc0,0x15,
+  0x34,0x68,0x5a,0xf8,0xae,0xed,0xa3,0x00,0x00,0x00,0x00,0xd4,0x28,0xfc,0xd3,0x8a,
+  0x01,0xa5,0x0d,0x61,0x98,0xcb,0x25,0xad,0x78,0xdf,0x04,0x3f,0x69,0xef,0x43,0xb6,
+  0x8f,0x02,0x00,0x00,0x00,0x90,0x93,0x22,0x10,0x62,0xe9,0xa7,0xd5,0xed,0x37,0xbd,
+  0x00,0xa1,0xc3,0x06,0x65,0x18,0xcf,0x47,0x01,0x00,0x00,0x00,0x70,0x58,0xfa,0x69,
+  0x15,0xfb,0xd2,0xfe,0xb6,0xb9,0xf1,0xd3,0x52,0x18,0x51,0x00,0x00,0x00,0x00,0x1a,
+  0xe4,0x09,0x30,0x3f,0xb3,0x15,0xe5,0xb1,0xa5,0xe8,0xd9,0x52,0xf9,0xd2,0x3c,0x05,
+  0xc9,0xed,0xf8,0xb6,0x8f,0x02,0x00,0x00,0x00,0x50,0xb0,0x22,0xe0,0x4a,0x7f,0x0c,
+  0x15,0xc4,0xa1,0xde,0x82,0x50,0x4f,0x01,0x59,0x00,0x00,0x00,0x00,0x39,0x5b,0xfc,
+  0x36,0xeb,0xdd,0x54,0x06,0xcc,0xc9,0x7e,0x4c,0x2f,0x80,0x4d,0xc0,0xa7,0xd5,0x01,
+  0x48,0xfb,0xcc,0xdc,0x46,0xa3,0x6b,0xfe,0xa3,0x00,0x00,0x00,0x40,0x4b,0x61,0x96,
+  0xdd,0x4d,0x0a,0x63,0xb3,0x70,0x50,0x48,0x3a,0x60,0x35,0x11,0xfc,0xb6,0xe8,0x7f,
+  0x5b,0x49,0x60,0x3c,0x00,0x00,0x00,0x00,0x39,0x7a,0x00,0xcc,0x48,0xfd,0x34,0x4b,
+  0xbc,0x1a,0xcb,0xde,0xf4,0x34,0x98,0xca,0x84,0x2b,0x7b,0x20,0xb9,0x7d,0x3c,0x00,
+  0x00,0x00,0x00,0x05,0x79,0x02,0x6c,0x02,0xd9,0x25,0xf4,0x43,0x2d,0x7b,0x5b,0x1c,
+  0x41,0xc8,0xac,0x80,0xe6,0x90,0x43,0x9a,0xd2,0x81,0x02,0x00,0x00,0x00,0x50,0x85,
+  0xe0,0x37,0x05,0xad,0xab,0x86,0x7f,0x56,0x0b,0xdc,0xcc,0x18,0xb0,0x09,0xf8,0x90,
+  0xed,0x93,0x05,0x00,0x00,0x00,0x50,0x20,0xb5,0x14,0xe3,0xf1,0x15,0xf5,0x31,0x2d,
+  0x7f,0x9f,0x82,0xe1,0xaa,0x23,0x50,0x36,0xda,0x76,0x32,0xa0,0x85,0x0b,0x17,0xaa,
+  0x19,0x33,0x66,0x70,0xd7,0x00,0x00,0x14,0x44,0x8f,0x1e,0x3d,0xd4,0xa8,0x51,0xa3,
+  0x0a,0x17,0xfa,0xae,0xb2,0xbc,0xe6,0xb2,0x69,0x13,0xfc,0x98,0x16,0x7e,0xb2,0x1c,
+  0xb0,0x6b,0x08,0x20,0x74,0xfb,0x65,0xad,0x0e,0xd8,0x16,0x0a,0x80,0xcc,0x5d,0x3f,
+  0x70,0xe0,0xc0,0xb5,0x3e,0x93,0x79,0xa3,0x37,0xde,0x78,0x63,0xe7,0x6f,0x1a,0x3d,
+  0x97,0x76,0xad,0x53,0x75,0xe6,0xbd,0x7d,0xfa,0x4f,0xff,0xe9,0x3f,0xfd,0xaf,0x66,
+  0x7b,0x32,0x83,0xe8,0xbc,0x79,0xf3,0x0a,0xdd,0xcf,0x10,0xeb,0xdf,0x95,0x31,0xe0,
+  0x9a,0xd1,0x2f,0x6d,0x1e,0x80,0x6a,0xb6,0x8f,0x02,0xd0,0x20,0x7a,0xf7,0xee,0x5d,
+  0x95,0x0b,0x26,0xed,0x37,0xbe,0x1b,0x34,0xaf,0x8b,0xdb,0xf7,0x5d,0x23,0xb7,0x4f,
+  0xff,0xe9,0x3f,0xfd,0xa7,0xff,0x3e,0x96,0x2d,0x5b,0x56,0xb8,0x07,0x20,0xd4,0xca,
+  0x77,0x29,0x34,0xe6,0xe4,0x3f,0xa1,0xde,0x86,0x90,0x80,0x40,0x14,0x80,0x06,0x5b,
+  0xff,0x3d,0x7b,0xf6,0xcc,0xac,0xe1,0x86,0x68,0xe0,0x9d,0x3b,0x77,0xce,0xb4,0x7c,
+  0xd6,0xf5,0xa7,0x5d,0x90,0xb5,0x6a,0xe8,0xf4,0x9f,0xfe,0xd3,0x7f,0xfa,0x5f,0x74,
+  0xff,0xe5,0xb3,0x22,0x15,0x80,0x34,0xa5,0x25,0x2d,0x55,0xcf,0xd5,0x7f,0xdb,0x6f,
+  0xcd,0xdf,0x64,0x39,0xc6,0x65,0x57,0x04,0x5a,0x5e,0x01,0xe8,0xd3,0xa7,0x8f,0xf3,
+  0xe0,0xdb,0x4e,0x78,0xda,0xb4,0x92,0x3e,0x0d,0x3c,0xcf,0xe5,0xe3,0x9b,0x4b,0x5e,
+  0x5d,0x37,0x78,0xf2,0xf7,0x21,0xcb,0xd3,0x7f,0xfa,0x4f,0xff,0xe9,0x7f,0x3d,0xfb,
+  0xbf,0x64,0xc9,0x92,0xc2,0x5d,0xe2,0x3e,0x45,0x26,0x74,0x1c,0xdf,0xe5,0x59,0xc8,
+  0x22,0xf8,0x43,0xb6,0x8f,0x02,0x50,0x27,0xba,0x74,0xe9,0xa2,0x7a,0xf5,0xea,0xd5,
+  0xb4,0xfb,0x9f,0xbc,0x60,0x44,0x8b,0x5e,0xb4,0x68,0x51,0x74,0x43,0x2d,0x5f,0xbe,
+  0x5c,0xad,0x5e,0xbd,0xba,0xe1,0x63,0x4d,0xf2,0xb0,0xe9,0xde,0xbd,0xbb,0xea,0xdb,
+  0xb7,0xaf,0xea,0xdf,0xbf,0x7f,0x74,0xbc,0x8b,0xd6,0xe6,0x43,0x1e,0x4a,0xf5,0x72,
+  0x91,0x36,0xc2,0x9a,0xa1,0xff,0xf4,0xbf,0x99,0xfa,0x2f,0xcf,0xab,0x7a,0xe1,0x9a,
+  0xb0,0xc7,0x14,0xc2,0xbe,0xc0,0xbd,0x10,0x05,0xc1,0xa7,0x88,0xb8,0xb6,0x8f,0x02,
+  0x50,0x47,0x44,0x30,0x55,0xeb,0x92,0xab,0xd5,0x65,0x97,0xd7,0xf2,0x0b,0x16,0x2c,
+  0x50,0x73,0xe7,0xce,0xb5,0xba,0xd1,0x5c,0xa5,0x27,0xf3,0xd8,0x7e,0xc8,0xfa,0x62,
+  0xf7,0x9e,0xb4,0x0f,0x3e,0xf8,0x40,0x0d,0x1b,0x36,0xac,0x43,0xe1,0xca,0xfb,0x78,
+  0x55,0xa3,0x79,0x17,0xdd,0xff,0x7a,0x9c,0x7f,0xfa,0x4f,0xff,0x9b,0xb5,0xff,0xf2,
+  0x5c,0x58,0xb9,0x72,0x65,0xdd,0xac,0xff,0xb4,0x59,0xfe,0x7c,0x0a,0x43,0x16,0x81,
+  0xef,0x1a,0x3a,0xc8,0xba,0x7d,0x14,0x80,0x82,0xad,0x7f,0x09,0xfe,0xcb,0xe2,0x62,
+  0x4b,0x8e,0x69,0xf9,0xbe,0x77,0xd5,0x99,0x4e,0x5e,0x04,0xbe,0x31,0xb2,0x34,0x8d,
+  0x7d,0xe9,0xd2,0xa5,0x6a,0xe6,0xcc,0x99,0x6b,0x34,0x68,0xad,0x41,0x76,0x1e,0xa0,
+  0xbf,0x13,0x85,0xa6,0x97,0x6e,0x5d,0xa3,0xcf,0x72,0xbc,0x8d,0xd6,0xac,0x2f,0xbe,
+  0x50,0x3b,0x25,0x3e,0x73,0x2d,0x2f,0x1e,0x88,0x65,0xda,0x13,0x31,0x4f,0x55,0x74,
+  0x5b,0xb5,0x6a,0x95,0x9a,0x3e,0x7d,0x7a,0x94,0xf2,0x23,0xa9,0x3f,0xb5,0xf6,0x3f,
+  0xeb,0x03,0xc8,0x77,0xfc,0x9b,0xed,0xfc,0xd3,0x7f,0xfa,0xdf,0xec,0xfd,0x5f,0xbc,
+  0x78,0x71,0x5d,0xad,0xff,0xb4,0x4a,0x7f,0x59,0xc7,0xef,0x43,0xbc,0x0c,0x59,0xb7,
+  0x8f,0x02,0x50,0x47,0xfa,0xf5,0xeb,0xd7,0x71,0xf1,0x56,0xeb,0x32,0x2b,0x72,0x8c,
+  0xcc,0x76,0xe3,0xc4,0x17,0x91,0xa4,0xcc,0xbc,0xf7,0xde,0x7b,0x4a,0xae,0xa1,0x2e,
+  0x5d,0xd7,0x53,0x9d,0xbb,0x0c,0xd1,0xa2,0xb8,0x6b,0x87,0x80,0x36,0xc5,0xf5,0x3a,
+  0xdb,0x36,0xc4,0xb7,0x7f,0x79,0x7d,0x63,0xeb,0x7f,0x9d,0xd6,0xd4,0x85,0x8a,0xdf,
+  0x57,0x1c,0xbf,0xd0,0xea,0x88,0xfe,0xa6,0xb3,0xfe,0xd7,0x55,0x2b,0x5a,0x7d,0xb4,
+  0x12,0x30,0x40,0xad,0x5a,0x39,0x35,0xda,0xff,0xd9,0xb3,0x67,0xab,0x0d,0x37,0xdc,
+  0xb0,0xa6,0xfe,0xdb,0x1e,0x80,0x59,0x6f,0xa2,0x3c,0x5c,0xa6,0x8d,0x3a,0xff,0xf4,
+  0x9f,0xfe,0x37,0x7b,0xff,0xeb,0x15,0xfc,0x97,0xe6,0xda,0x4f,0x9b,0x07,0x20,0xab,
+  0x20,0x77,0x79,0x40,0xab,0xd9,0x3e,0x0a,0x40,0xc1,0x88,0xe0,0x4f,0x0b,0xfe,0x2b,
+  0x83,0xcb,0xce,0x75,0x31,0x8b,0xd5,0x3f,0x67,0xce,0x1c,0xdd,0x87,0x1e,0xaa,0x5b,
+  0x8f,0xd1,0xfa,0xb5,0xa7,0xea,0xd6,0xbd,0x97,0x1a,0x32,0x64,0x13,0xd5,0xb7,0xff,
+  0x50,0x6d,0x5d,0xf7,0xd5,0x42,0xb7,0x5b,0x6d,0xdb,0xce,0x6a,0xf0,0x1b,0xac,0x5a,
+  0xb5,0x42,0x2d,0x59,0x3c,0x57,0xbd,0x37,0xe3,0x15,0xb5,0x68,0xe1,0x2c,0xd5,0x45,
+  0x89,0x77,0x42,0xbb,0xfb,0x56,0xbc,0x17,0x69,0xfd,0xe2,0x0d,0x90,0xec,0x8b,0x6a,
+  0xfa,0x9f,0xe5,0x01,0x96,0x87,0xc5,0x50,0xb6,0xf3,0x4f,0xff,0xe9,0x7f,0x2b,0xf4,
+  0x5f,0xe2,0x95,0xea,0x29,0xf4,0x7c,0x81,0x7c,0x21,0x9f,0xdb,0x3c,0x30,0xbe,0xac,
+  0x82,0x6a,0xbc,0x05,0x28,0x00,0x75,0xb0,0xfe,0xcd,0x13,0x54,0x6f,0x97,0x5d,0x9a,
+  0xa6,0xea,0xba,0xa1,0x44,0xf8,0xcb,0x78,0x7f,0x97,0xae,0xfd,0x54,0xf7,0x9e,0x1b,
+  0xe9,0xfd,0xe9,0xa6,0x86,0x0d,0xdf,0x5a,0xad,0x3f,0x74,0x33,0xfd,0x7d,0x9e,0x55,
+  0x9b,0x3d,0x3e,0x02,0x8f,0x82,0xd0,0xa5,0x6b,0x17,0xd5,0xbd,0xc7,0x70,0xd5,0x7f,
+  0xe0,0x30,0x35,0x79,0xd2,0x23,0x6a,0xc1,0xfc,0xf7,0x54,0xd7,0xee,0x43,0xb4,0x17,
+  0xe0,0xfd,0xa8,0x3f,0x12,0xa4,0x68,0x2a,0x00,0x45,0x8f,0xb1,0x66,0x3d,0xfe,0x65,
+  0x3c,0xff,0xf4,0x9f,0xfe,0xb7,0x4a,0xff,0xeb,0xe5,0xfe,0xb7,0xf5,0x3b,0x4b,0xb4,
+  0x7e,0x9a,0xa5,0xef,0x2b,0xfe,0x13,0xb2,0x7d,0x62,0x00,0xea,0x8c,0x1c,0x70,0x57,
+  0xf0,0x5f,0xd6,0xb4,0x9b,0xac,0x63,0x62,0x69,0x2e,0x3d,0xdb,0xf6,0x93,0x7f,0x8b,
+  0xdb,0x5f,0x2c,0xff,0x2e,0x5d,0xfb,0xaa,0xee,0xbd,0xc6,0xa8,0x6e,0xdd,0x7a,0xab,
+  0x4d,0x37,0xdb,0x53,0xf5,0xee,0x33,0xd8,0x2b,0x91,0x65,0x35,0xb2,0x1b,0xf1,0xea,
+  0xe2,0xf7,0xa1,0xd7,0x9d,0xef,0xf7,0x69,0xea,0xc2,0x88,0x91,0xdb,0xaa,0x89,0xaf,
+  0xce,0xd4,0xef,0xba,0xeb,0x0f,0xbb,0xea,0xcf,0x57,0xae,0x75,0xbc,0x42,0xfb,0x1f,
+  0x32,0x06,0x9a,0xf6,0x1a,0x62,0x2d,0x95,0xf9,0xfc,0xd3,0x7f,0xfa,0xdf,0x2a,0xfd,
+  0x97,0xf8,0xa5,0xa2,0x83,0xff,0xf2,0xb4,0xb4,0x6d,0xe7,0xc9,0x54,0x02,0x5c,0xdb,
+  0xb2,0x0d,0xd3,0x34,0x53,0x55,0xc0,0x96,0x53,0x00,0xc4,0xf5,0x5f,0x6d,0x3a,0x9a,
+  0x6f,0x8c,0x2e,0xcf,0x1b,0x2e,0xb9,0x3e,0x19,0x2b,0x7b,0xff,0xfd,0xf7,0x75,0xa0,
+  0x5f,0x37,0xd5,0xa3,0xf7,0x87,0xc2,0x7f,0xf3,0x8f,0xec,0xaf,0x23,0xea,0x07,0x04,
+  0x5a,0x0f,0x1e,0x01,0x5e,0x6b,0xd1,0x90,0x14,0x05,0xa0,0x4f,0xbf,0xc1,0x3a,0x46,
+  0xa1,0xf3,0x5a,0xdb,0x8c,0xad,0xff,0x3c,0xc7,0x48,0xeb,0xe1,0x32,0x6d,0xd4,0xf9,
+  0xa7,0xff,0xf4,0xbf,0x95,0xfa,0x2f,0x99,0x4b,0x65,0xc3,0x56,0xe3,0x3f,0xcd,0xb3,
+  0x92,0x66,0xc1,0x9b,0xb3,0x00,0x86,0x0e,0x3b,0x50,0x07,0xa0,0x0e,0x48,0x3e,0x7a,
+  0x11,0xc5,0x17,0xaa,0xd1,0xf8,0x43,0x5d,0x78,0xe2,0xfa,0x97,0xf7,0xbd,0xfb,0x8d,
+  0xd1,0xae,0xf4,0x1e,0x6a,0xd3,0x2d,0x3e,0xae,0x06,0x0e,0xde,0xc0,0x69,0x81,0x7b,
+  0xa3,0xfc,0x8c,0xef,0xd7,0x55,0x08,0xd6,0x56,0x18,0xd6,0xdd,0xd9,0xf4,0xf5,0x25,
+  0xbf,0xef,0xb4,0x6c,0x55,0x34,0x24,0x50,0x59,0xbd,0x4a,0xff,0xbd,0xaa,0xa3,0xf6,
+  0x82,0xad,0x22,0x58,0x9e,0x69,0x47,0x59,0x5d,0xa4,0x65,0x3e,0xff,0xf4,0x9f,0xfe,
+  0xb7,0x4a,0xff,0x25,0xfe,0x47,0x3c,0x00,0x8d,0x16,0xf4,0xe6,0xdf,0xbe,0xf3,0xe4,
+  0x9a,0xe2,0x37,0xcd,0xf5,0x1f,0xe2,0xe6,0xb7,0xc5,0x12,0xa0,0x00,0x14,0x84,0x08,
+  0x1e,0x29,0x4c,0x13,0xe2,0x52,0xab,0x56,0x3b,0x4e,0x8b,0xda,0xad,0x26,0xed,0x46,
+  0x66,0x25,0x94,0x80,0x99,0x6e,0xdd,0xfb,0xab,0x6e,0x3d,0x07,0xaa,0x01,0x03,0x86,
+  0xe9,0x31,0xff,0x31,0x1e,0x81,0xed,0x93,0xf0,0x3e,0x05,0x21,0x9b,0xcf,0x3f,0xed,
+  0xeb,0x45,0x73,0x66,0x69,0xcf,0x45,0x67,0xb5,0x72,0xf9,0xdc,0xd4,0xe1,0x97,0x5a,
+  0x5d,0x8c,0xb6,0xf3,0x91,0xe7,0x18,0x6d,0xa3,0xce,0x3f,0xfd,0xa7,0xff,0xad,0xd4,
+  0x7f,0xc9,0x02,0x6a,0x24,0x2e,0xc1,0x6e,0x73,0xed,0xbb,0xbe,0x77,0x1d,0xab,0x3c,
+  0x82,0x0a,0x51,0x00,0xea,0x60,0xfd,0xe7,0xe1,0x22,0xcb,0x9a,0x96,0xe3,0x5b,0xbf,
+  0xcb,0x85,0x26,0xe3,0xfe,0xf2,0xda,0xa3,0xcf,0x88,0xe8,0x06,0x1a,0xb9,0xf1,0xf6,
+  0xaa,0x6b,0xb7,0xae,0x3e,0x35,0x37,0xd5,0xa4,0x5f,0x47,0xfe,0x9b,0xfb,0xee,0x75,
+  0x01,0x84,0x33,0x67,0xf6,0x9b,0xaa,0xb3,0x5e,0xcf,0x8a,0xe5,0x1f,0xde,0xf8,0x32,
+  0xeb,0x62,0x5a,0xfc,0x45,0xb5,0x63,0xa2,0x45,0xaf,0xaf,0x51,0xe7,0x9f,0xfe,0xd3,
+  0xff,0x56,0xe9,0xbf,0x7c,0x27,0x41,0xcc,0x32,0x04,0x58,0x6f,0x61,0x17,0x3a,0xd5,
+  0xaf,0xcf,0xb5,0xef,0x12,0xea,0x21,0x13,0x05,0x85,0x4c,0x42,0x84,0x02,0x50,0x10,
+  0xe2,0x7a,0x96,0xf1,0xff,0xa2,0xb4,0x49,0xdf,0x0d,0x14,0xe2,0x82,0x33,0xdf,0x4b,
+  0xb4,0xbc,0x44,0xcb,0x76,0xe9,0xda,0x53,0x47,0xfd,0x0f,0xd4,0x1e,0x8c,0xfe,0x6a,
+  0xc8,0x06,0xeb,0xce,0x9d,0xbd,0x6e,0x96,0xde,0xda,0x9f,0x7c,0x98,0xb7,0xdf,0xc9,
+  0x99,0xb7,0x9f,0xfd,0x6e,0x5a,0xdb,0x63,0xb0,0x8e,0xc3,0x60,0xcd,0xd7,0x8b,0x17,
+  0xcf,0x57,0xf3,0xe7,0xcd,0xd0,0xdf,0x2d,0xd7,0x1e,0x80,0xf9,0x1d,0x65,0x81,0xab,
+  0xb1,0x50,0x8a,0x3e,0x3f,0x65,0x3c,0xff,0xf4,0x9f,0xfe,0xb7,0x52,0xff,0x65,0xec,
+  0x5f,0xa6,0xfe,0x15,0x43,0x26,0xef,0xb2,0xe0,0x59,0x85,0xbf,0xad,0x04,0xb0,0x4d,
+  0x90,0x87,0x94,0x02,0x8e,0x97,0x0b,0x55,0x32,0x5c,0xdb,0xa7,0x14,0x70,0x81,0xc4,
+  0xae,0xe7,0x22,0xf3,0x74,0xf3,0xbe,0x61,0xa4,0x7c,0xae,0xbc,0xf6,0xea,0x33,0x3c,
+  0xd2,0x9a,0x47,0x8d,0xd9,0x56,0xf5,0xe8,0xd9,0xc3,0x27,0x8f,0xbd,0x31,0x01,0xbe,
+  0x11,0x01,0xef,0xfa,0x4d,0x07,0x81,0x23,0x4b,0x70,0xea,0xdb,0x93,0x55,0x67,0x3d,
+  0xfe,0xbf,0x64,0xd1,0xcc,0xe8,0xf3,0xc1,0x83,0x07,0xa7,0x06,0x0d,0x65,0x7d,0x60,
+  0x56,0xf3,0x10,0x68,0xa6,0xf3,0x4f,0xff,0xe9,0x7f,0x2b,0xf5,0x5f,0xbc,0x99,0x82,
+  0x64,0x00,0xd4,0x53,0x01,0xb0,0x29,0x02,0x2e,0x81,0xee,0x1a,0x0e,0x08,0x89,0xdc,
+  0xb7,0x05,0x11,0x26,0xcf,0xb1,0x6f,0xfb,0x0c,0x01,0x14,0x48,0x32,0xf8,0x2f,0xe4,
+  0xa0,0xe7,0xad,0x95,0x65,0x1d,0xc3,0x93,0xcf,0x25,0xf5,0xaf,0x73,0xe7,0xae,0xaa,
+  0x57,0xbf,0xa1,0xda,0x0b,0xd0,0x4d,0x8d,0x18,0xbd,0x95,0xea,0xa2,0xdd,0xff,0x99,
+  0x03,0x86,0x3c,0x02,0xde,0x94,0xe8,0x59,0x7f,0x6f,0x53,0x40,0x56,0xad,0x5a,0xa9,
+  0x66,0xce,0x98,0xa4,0xd7,0xa3,0xf3,0xfe,0x17,0xcf,0x8a,0x14,0x98,0x41,0x83,0x06,
+  0x75,0xdc,0xf8,0x21,0x63,0x98,0x3e,0x17,0x66,0x35,0x0f,0xdf,0x66,0x39,0xff,0xf4,
+  0x9f,0xfe,0xb7,0x52,0xff,0xc5,0xf2,0x97,0x58,0x26,0x41,0x26,0x2a,0xab,0xa7,0xd0,
+  0x4f,0xfb,0xdb,0xf7,0xbb,0x50,0xb7,0x7e,0x88,0xc2,0x15,0xb2,0x3e,0x14,0x80,0x22,
+  0x3a,0xa1,0x85,0x4f,0xcf,0x9e,0x3d,0x53,0x35,0xf2,0x90,0x1b,0xb0,0x9e,0x16,0x80,
+  0xb8,0xcb,0x24,0x62,0xb6,0x67,0x1f,0x11,0xfe,0xdd,0xd5,0xf0,0x91,0x9b,0xab,0x9e,
+  0xbd,0x7a,0xdb,0x4d,0xfa,0x8c,0x95,0xfa,0x2c,0x57,0x5e,0x7a,0x61,0x00,0x5f,0x4c,
+  0x80,0x25,0xe6,0xe0,0x7d,0x2d,0xfc,0x57,0xad,0x5a,0xae,0x96,0x2f,0x9d,0xad,0x3f,
+  0x5e,0xa9,0x83,0x17,0x07,0xae,0x55,0xfc,0xa7,0x0c,0xb3,0x91,0x95,0xf9,0xfc,0xd3,
+  0x7f,0xfa,0xdf,0x4a,0xfd,0x9f,0x35,0x6b,0xd6,0x5a,0x82,0x4e,0x94,0x00,0x5f,0x29,
+  0xf6,0x3c,0xfb,0x99,0x16,0xdc,0x57,0x6b,0xe0,0x63,0x5a,0xd6,0x80,0xcb,0xf5,0x6f,
+  0x53,0x32,0xf0,0x00,0x14,0x84,0xad,0xf2,0x5f,0x51,0xee,0xa5,0xbc,0x2a,0x77,0xc5,
+  0xee,0xb2,0x3e,0x03,0x46,0x44,0x51,0xf4,0xa3,0x36,0xd9,0x36,0xb2,0xfe,0x83,0x4c,
+  0xf0,0x75,0xae,0x54,0x95,0x29,0x2d,0x30,0x8e,0x17,0xe8,0xe4,0x8a,0x21,0x08,0x48,
+  0x03,0x9c,0xfe,0xce,0xab,0xd1,0x7e,0x2f,0x5d,0x38,0x23,0xfa,0x68,0xc8,0x90,0x21,
+  0x35,0xcd,0x4e,0x58,0x76,0xca,0x58,0x3a,0x96,0xfe,0xd3,0xff,0x32,0xf4,0x5f,0x84,
+  0xbd,0x04,0xff,0x25,0xa9,0x97,0x02,0xe0,0x12,0xf4,0x21,0x69,0x7a,0x2e,0xa1,0x6d,
+  0xf6,0xd3,0x57,0x10,0xc8,0xdc,0x7e,0x51,0x13,0x11,0xa1,0x00,0x38,0x88,0x03,0xcf,
+  0x42,0x35,0xb4,0x6a,0x6f,0xc8,0xbc,0xa2,0x74,0x65,0x86,0x3f,0xc9,0x95,0xed,0xde,
+  0xb3,0xbf,0xea,0xd9,0x7b,0xa0,0xea,0x3f,0x68,0x03,0xb5,0xfe,0xb0,0x51,0x89,0x20,
+  0x3e,0xa3,0xd2,0x5f,0x36,0xf9,0xee,0xbf,0x99,0x55,0x70,0x9a,0xbf,0xf5,0xfb,0x0f,
+  0xe6,0xea,0x9a,0xff,0x0b,0x67,0xab,0xd5,0xab,0x16,0xeb,0xe0,0xbf,0x85,0xd1,0xac,
+  0x8b,0xe6,0xcc,0x8b,0xd5,0x4c,0x1e,0x52,0x4b,0x29,0xd5,0x66,0x3a,0xff,0xf4,0x9f,
+  0xfe,0xb7,0x52,0xff,0x25,0x96,0x49,0xbc,0x99,0x66,0x7f,0xea,0xa5,0x98,0xa4,0x09,
+  0xf9,0xb4,0x7d,0xb1,0xa5,0x4a,0xda,0xac,0xff,0x10,0x2f,0x43,0x5a,0x10,0x21,0xa5,
+  0x80,0x0b,0x24,0x9e,0xf8,0xc7,0x76,0xe0,0x6b,0x99,0xcd,0xaa,0xd6,0x1b,0x3a,0x8d,
+  0xd8,0xfa,0xef,0x3b,0x68,0x64,0x64,0x45,0x6f,0x3c,0x76,0x87,0xa8,0x98,0x8e,0x5b,
+  0x40,0xa7,0x5b,0xec,0xd9,0x67,0xff,0xab,0x6d,0x7d,0xd3,0xdf,0x7e,0x39,0xda,0xef,
+  0xc5,0xf3,0xdf,0xb5,0x5a,0xff,0xb5,0xb8,0xdb,0x42,0x2b,0x9f,0xd9,0xc6,0x5c,0x9b,
+  0xe5,0xfc,0xd3,0x7f,0xfa,0xdf,0x4a,0xfd,0x4f,0xba,0xff,0x93,0x1e,0x80,0x7a,0x7b,
+  0x28,0x42,0x2c,0xfc,0xe4,0xe7,0xe6,0x7b,0x97,0x3b,0xdf,0x65,0xbd,0xbb,0x84,0x7c,
+  0x33,0x4c,0x02,0xd4,0x32,0x0a,0x80,0x59,0x75,0xae,0x2c,0xb3,0x67,0xb9,0x10,0x4d,
+  0x79,0xfe,0xfc,0xf9,0xfa,0xc6,0xd5,0x69,0x8b,0xfd,0x87,0xe9,0x71,0x73,0x3d,0xfe,
+  0xbf,0xd1,0x16,0x5a,0x01,0xe8,0x9a,0x10,0xc0,0x6b,0x0b,0xe8,0xec,0x4f,0x93,0x8c,
+  0x1a,0x41,0x06,0x9f,0xc2,0xd2,0xc5,0x0b,0xd4,0xf4,0x77,0x27,0xea,0xca,0x7f,0xcb,
+  0xd5,0x92,0x05,0xef,0x45,0xa9,0x7f,0xae,0xdc,0xff,0x7a,0xb8,0xff,0xb2,0x3c,0x40,
+  0xcb,0x70,0xfe,0xe9,0x3f,0xfd,0x6f,0xa5,0xfe,0x4b,0xe0,0x9f,0x6d,0xe2,0x9f,0x7a,
+  0x2b,0x00,0xa1,0x4a,0x4b,0xd6,0x69,0x80,0x4d,0x8f,0x4a,0xda,0xd0,0x42,0xd9,0x27,
+  0xfe,0x69,0x49,0x05,0x20,0x76,0x3d,0x17,0x3d,0xdb,0x96,0xef,0x86,0x0b,0x8d,0xdc,
+  0x97,0xca,0x7f,0x72,0x73,0xf4,0xec,0x33,0x44,0xd7,0xd0,0xef,0xaa,0x06,0x0e,0x19,
+  0xa6,0x03,0x18,0x7b,0xa7,0xbb,0xef,0x7c,0x63,0xf4,0xb5,0xdf,0x29,0xc1,0xb3,0x09,
+  0xbd,0x36,0xe1,0x51,0xb9,0xbd,0xd5,0xfc,0xd9,0x53,0xa2,0x1d,0x18,0x3a,0x74,0x68,
+  0x14,0xf9,0x9f,0xf7,0x6c,0x65,0x79,0xbb,0x48,0xcb,0x72,0xfe,0xe9,0x3f,0xfd,0x6f,
+  0xa5,0xfe,0x4f,0x9f,0x3e,0xdd,0xb9,0xbe,0x7a,0x06,0x02,0xfa,0x04,0x79,0x9a,0x27,
+  0x20,0xad,0xef,0x69,0xa5,0x7f,0x7d,0xb5,0x02,0x6c,0xdb,0x47,0x01,0x28,0x40,0x01,
+  0x88,0x2f,0x32,0xdf,0x0d,0x9a,0xa5,0x54,0xa7,0x4d,0x9b,0x4e,0xfb,0x3b,0x74,0xb6,
+  0xac,0xb8,0x4e,0x76,0xf7,0x9e,0x7d,0xa2,0x8a,0x7f,0x3d,0x7b,0xeb,0xf2,0xc5,0x3a,
+  0xf7,0x3f,0x7d,0xf6,0xbe,0xb5,0x25,0xfe,0xba,0x0a,0x42,0xb6,0x98,0x80,0x75,0xe4,
+  0xbb,0x27,0xe9,0x20,0x5e,0x7e,0xd2,0x2b,0x4f,0xab,0xf7,0xa7,0x4f,0x56,0xcb,0x16,
+  0xcf,0x56,0x8b,0xe6,0xbd,0x1b,0x0d,0xbd,0x48,0xea,0x5f,0x96,0xfe,0x87,0x96,0x52,
+  0x0d,0x79,0x00,0x65,0x7d,0x40,0x97,0xe1,0xfc,0xd3,0x7f,0xfa,0xdf,0x2a,0xfd,0x17,
+  0x4f,0xa6,0xb4,0x2c,0x6e,0xf9,0x7a,0x0f,0x09,0xf8,0xf2,0xf5,0xb3,0x0e,0x2b,0x84,
+  0xf6,0x2b,0x6d,0xfb,0x28,0x00,0x39,0xd2,0xa3,0x47,0x8f,0xaa,0xdc,0x41,0x59,0x6b,
+  0x79,0xe7,0x35,0x3b,0x97,0x14,0xc9,0x88,0x22,0x4b,0xf5,0xb6,0x3a,0x75,0xd6,0x1e,
+  0x81,0x05,0x73,0xa2,0xf1,0xff,0x0f,0x17,0x0b,0xf3,0xd9,0x67,0x4e,0x0a,0xf0,0xcd,
+  0x0e,0xe8,0xf1,0x30,0xc8,0x62,0x13,0x27,0x3c,0xa5,0x5e,0x79,0xe1,0x21,0x1d,0xf4,
+  0xb7,0x40,0xcd,0x7e,0xe7,0xdf,0x51,0xca,0xdf,0xe8,0xd1,0xa3,0x9d,0x0f,0x8c,0x3c,
+  0x8e,0x57,0x91,0x63,0x98,0x8d,0x3a,0xff,0xf4,0x9f,0xfe,0xb7,0x42,0xff,0xc5,0xba,
+  0x7f,0xfb,0xed,0xb7,0x53,0xb7,0x29,0xcb,0x14,0x5d,0x10,0x28,0xab,0xf5,0x6e,0x5a,
+  0xe3,0x36,0xcf,0x4a,0xa8,0x80,0x77,0x79,0x5d,0x6c,0xdb,0x60,0x08,0xa0,0xa0,0x31,
+  0x1e,0x19,0x83,0x0e,0xd5,0xe6,0xb2,0xce,0xaf,0x9d,0xd7,0x85,0x98,0x44,0x6e,0x08,
+  0xf9,0x6c,0xc5,0xd2,0x85,0xfa,0x55,0xa7,0xd1,0x2d,0x59,0xa4,0xa6,0x4e,0x7e,0x49,
+  0x6d,0xbc,0xf9,0x0e,0xa5,0x4c,0x29,0x5a,0xb2,0x68,0xbe,0x7a,0xf1,0xe9,0x7b,0xd5,
+  0xbb,0x6f,0xbf,0xa6,0xf7,0x79,0x81,0x9a,0x31,0xe5,0x99,0x48,0x55,0xd8,0x64,0x93,
+  0x4d,0xd6,0xaa,0xbd,0x90,0xb7,0xcb,0xb1,0x1e,0x95,0xd2,0x1a,0x71,0xfe,0xe9,0x3f,
+  0xfd,0x6f,0x85,0xfe,0xbf,0xf5,0xd6,0x5b,0xd1,0x34,0xe6,0x3e,0x05,0xa0,0x1e,0x32,
+  0xc0,0xe6,0x09,0xb1,0xb9,0xf7,0x43,0xa6,0xf0,0xcd,0xea,0xaa,0x77,0x55,0x07,0x74,
+  0x05,0x20,0xa2,0x00,0xe4,0x48,0x2c,0x4c,0x43,0x6e,0xa0,0xac,0x95,0xba,0x7c,0x17,
+  0x5a,0xb5,0xeb,0x8f,0x85,0xe6,0xd2,0x45,0x73,0xd4,0xaa,0x15,0x8b,0xf5,0x0c,0x80,
+  0x7d,0xd5,0x8b,0xcf,0xfc,0x43,0x2d,0x5e,0x32,0x5f,0x8d,0xd9,0x6c,0x3b,0xd5,0xa7,
+  0xef,0x20,0x1d,0x1b,0xd0,0xc5,0x67,0xd3,0x67,0xf2,0x10,0xac,0x1b,0x54,0xb8,0xf6,
+  0x12,0xe6,0xf2,0xcb,0x97,0x2e,0x56,0x73,0x67,0xcf,0x50,0xef,0xbc,0xf9,0x8a,0x56,
+  0x4e,0x26,0x44,0x55,0xff,0x16,0xcc,0x9d,0xa6,0x66,0x4d,0x9d,0xa0,0xfb,0xd4,0x49,
+  0x8d,0xd1,0xc2,0x5f,0xdc,0xff,0xb5,0x1c,0x5f,0x9f,0x45,0xe3,0x73,0x49,0x66,0x7d,
+  0x80,0x96,0xe5,0xfc,0xd3,0x7f,0xfa,0xdf,0xec,0xfd,0x7f,0xff,0xfd,0xf7,0xa3,0xe6,
+  0xa3,0x1e,0x0a,0x40,0x5a,0x6a,0x5e,0x9a,0x25,0x9e,0x56,0x1b,0x20,0xc4,0xe2,0xf7,
+  0x29,0x6a,0xd5,0x2a,0x14,0x28,0x00,0x19,0xb5,0xbf,0x50,0x97,0x59,0x88,0x8b,0xad,
+  0xd6,0xd9,0xbf,0x42,0xd2,0x74,0x64,0xcc,0x5c,0x02,0x67,0xe4,0xe6,0x78,0xef,0xad,
+  0x7f,0xa9,0x91,0x9b,0x8f,0x8b,0x2a,0x01,0x4e,0x7e,0xf5,0x69,0x35,0x45,0xb7,0x10,
+  0x17,0x7f,0xee,0xc7,0x31,0x45,0xbd,0x58,0xb6,0x78,0x9e,0x9a,0x39,0x6d,0x82,0x4e,
+  0xf9,0x9b,0x15,0x29,0x2f,0x63,0xc6,0x8c,0x59,0x6b,0xd8,0x25,0x6b,0xff,0xb3,0x3c,
+  0x70,0x92,0xaf,0x3e,0x0b,0xa6,0x59,0xce,0x3f,0xfd,0xa7,0xff,0xcd,0xdc,0x7f,0xc9,
+  0xf9,0x7f,0xe3,0x8d,0x37,0x82,0xbd,0xae,0xf5,0xb2,0x80,0x6d,0x53,0xf9,0xfa,0x5c,
+  0xff,0x2e,0x21,0x6f,0x2a,0x03,0x21,0x25,0xe6,0x43,0xb7,0x8f,0x02,0x50,0x80,0xf6,
+  0x97,0xe5,0x22,0xc9,0xba,0x6c,0xde,0xb3,0x75,0x75,0xeb,0xd6,0x4d,0x0d,0x1f,0x3e,
+  0x5c,0xbd,0xfb,0xee,0xbb,0x6a,0xf9,0x92,0x05,0xea,0xad,0x09,0x0f,0xa8,0xc1,0xc3,
+  0xc7,0xaa,0x3e,0x03,0x87,0xa9,0x6e,0x3d,0x7a,0x47,0xe9,0x81,0x9d,0x12,0x82,0xb9,
+  0x6e,0xca,0xd4,0x9a,0xd7,0x55,0x2b,0x57,0xa8,0x95,0x2b,0x96,0xa8,0xc5,0xf3,0x66,
+  0x6a,0xab,0x7f,0xba,0x4e,0xf5,0x9b,0x1d,0xed,0xfb,0x06,0x1b,0x6c,0xa0,0x86,0x0d,
+  0x1b,0x96,0x69,0x4c,0xaf,0xd6,0x34,0x25,0xdf,0xf8,0x69,0x33,0x9e,0x7f,0xfa,0x4f,
+  0xff,0x9b,0xb5,0xff,0x92,0xc1,0xf4,0xec,0xb3,0xcf,0x66,0x9a,0x75,0xb5,0xe8,0x38,
+  0x00,0x9b,0xf5,0xed,0x52,0xb6,0x7c,0xca,0x97,0x2b,0xe8,0x31,0x6b,0x31,0xa0,0x6a,
+  0xb7,0x8f,0x02,0x90,0x91,0xb8,0xfa,0x94,0x2f,0x95,0xa3,0x1a,0x17,0x5c,0x91,0x48,
+  0xea,0x5c,0xe4,0x01,0x78,0xef,0x3d,0x2d,0x70,0x97,0xab,0x99,0x53,0x5f,0x8e,0x5a,
+  0x19,0x3d,0x2c,0x32,0xc3,0x9f,0x08,0x7f,0xa9,0xb7,0x50,0x86,0xfd,0xc9,0x62,0x21,
+  0x95,0xf5,0xfc,0xd3,0x7f,0xfa,0xdf,0x6c,0xfd,0x97,0x5c,0xff,0xc7,0x1e,0x7b,0xcc,
+  0x3a,0xe7,0x4a,0x23,0x15,0x00,0x97,0x80,0xcd,0x2a,0x6c,0x43,0xa7,0xfa,0xb5,0x29,
+  0x1e,0x21,0xdb,0x27,0x0d,0xb0,0xa0,0x13,0x2e,0x81,0x28,0xc9,0x62,0x40,0xb5,0xb8,
+  0xb8,0xaa,0xd1,0x3c,0xab,0x5d,0xdf,0x86,0x1b,0x6e,0x18,0x15,0xd0,0x91,0xaa,0x80,
+  0x92,0x4a,0xb3,0x7c,0xf9,0xf2,0x86,0x5f,0x20,0xb2,0xff,0xe2,0xa1,0x90,0xe3,0x29,
+  0xf3,0x2b,0xc8,0xfe,0xc9,0xdf,0x45,0xf4,0xbf,0x9a,0x3c,0x69,0xdf,0xf9,0x6d,0xa6,
+  0xf3,0x4f,0xff,0xe9,0x7f,0xb3,0xf4,0x7f,0xf6,0xec,0xd9,0xea,0xc9,0x27,0x9f,0xec,
+  0x78,0x3e,0x64,0x55,0x00,0xea,0x21,0xf4,0xd3,0xc6,0xe1,0xb3,0x0a,0x79,0x73,0xac,
+  0xdf,0x15,0xdd,0x9f,0x65,0xfb,0xcc,0x05,0x50,0x10,0xe2,0x96,0x32,0xeb,0xd0,0x17,
+  0xe5,0x92,0xcb,0x7b,0x7d,0xe2,0x4a,0xcb,0xe2,0x4e,0x6b,0x26,0x8b,0xa4,0x11,0xe7,
+  0xa3,0xd9,0xce,0x3f,0xfd,0xa7,0xff,0x65,0xef,0xff,0x9b,0x6f,0xbe,0xa9,0xfe,0xf5,
+  0xaf,0x7f,0x45,0xb1,0x0c,0x71,0xcd,0x8f,0x32,0x29,0x00,0x59,0xac,0x7f,0x57,0xc4,
+  0xbe,0x4d,0x41,0xf0,0xa5,0x16,0x9a,0xeb,0x0c,0xdd,0x3e,0x0a,0x40,0xce,0xcc,0x9c,
+  0x39,0x33,0x72,0xa9,0xe7,0x71,0x01,0x15,0x99,0x96,0x53,0xf6,0xd9,0xc1,0xe8,0x3f,
+  0xfd,0xa7,0xff,0xf4,0x3f,0xde,0x3f,0xa9,0x57,0xf2,0xfc,0xf3,0xcf,0x77,0xe4,0xfa,
+  0xf7,0xef,0xdf,0xbf,0xaa,0xaa,0x7e,0x45,0x07,0x02,0x86,0xd6,0xf9,0x4f,0xab,0x02,
+  0xe8,0x52,0x24,0x42,0xbc,0x0d,0xbe,0xe5,0xcb,0x3e,0xac,0xd4,0xf4,0x0a,0x80,0x0c,
+  0x01,0x48,0x4e,0xea,0x46,0x1b,0x6d,0x54,0x93,0x0b,0xce,0xa7,0x21,0xfb,0x2a,0x6b,
+  0x85,0xdc,0xd0,0x59,0x34,0xf0,0xbc,0x67,0x07,0xa3,0xff,0xf4,0x9f,0xfe,0xd3,0xff,
+  0x90,0xfe,0x8b,0xd5,0x3f,0x61,0xc2,0x84,0x8e,0xaa,0xa5,0x32,0xdb,0x6a,0x56,0xd7,
+  0xbf,0xe9,0x05,0x28,0x2a,0x0e,0x20,0xad,0x5a,0x61,0xa8,0xf0,0xf7,0x05,0xf7,0xd9,
+  0x82,0xfc,0xb2,0xec,0x5b,0x99,0x15,0x81,0x96,0x98,0x0e,0x78,0xd2,0xa4,0x49,0x51,
+  0x6a,0x9a,0x44,0xd7,0x67,0x49,0xbb,0xa9,0xa5,0xd2,0x56,0xde,0x79,0xbf,0x21,0xeb,
+  0x4f,0x4b,0x4b,0xaa,0x26,0xed,0x88,0xfe,0xd3,0x7f,0xfa,0x4f,0xff,0x63,0xa6,0x4e,
+  0x9d,0xaa,0x5e,0x79,0xe5,0x15,0xb5,0x60,0xc1,0x82,0x8e,0xdf,0x49,0x3c,0x50,0xe8,
+  0x10,0x6b,0x23,0x14,0x00,0x97,0xa5,0x6f,0xa6,0xf0,0xf9,0xdc,0xfb,0xa6,0x35,0x1f,
+  0x5a,0xfb,0x3f,0xc4,0x53,0x54,0xe6,0x82,0x40,0x2d,0xa1,0x00,0xc8,0x81,0x7d,0xea,
+  0xa9,0xa7,0xd4,0xa6,0x9b,0x6e,0xaa,0xb6,0xdc,0x72,0xcb,0xb5,0xaa,0x03,0x16,0x55,
+  0x59,0x2b,0xab,0x46,0x5f,0x8d,0x8b,0xd0,0x67,0x81,0xd4,0xba,0x3c,0xfd,0xa7,0xff,
+  0xf4,0xbf,0xbd,0xfb,0x2f,0x79,0xfd,0xd3,0xa6,0x4d,0x8b,0xac,0xfe,0xd8,0xe2,0x8f,
+  0xbf,0x17,0xa3,0x4a,0xac,0xff,0x5a,0x69,0x44,0x1c,0x80,0x4b,0xd0,0xfb,0x52,0xf8,
+  0xcc,0xf7,0x69,0x6e,0x7e,0xf3,0x5c,0xa7,0x4d,0x2d,0x4c,0x16,0x40,0x91,0x9d,0xd0,
+  0x75,0xe9,0xe5,0x00,0x4f,0x9e,0x3c,0x39,0x1a,0x0e,0x18,0x31,0x62,0x44,0x94,0xba,
+  0x26,0x91,0xec,0x12,0x64,0x27,0xdf,0x9b,0x13,0x06,0xf9,0x5c,0x78,0xb5,0xce,0xee,
+  0x95,0xd5,0x65,0x97,0xb5,0xf2,0x57,0xc8,0xe4,0x23,0xb6,0x0b,0x92,0xfe,0xd3,0x7f,
+  0xfa,0xdf,0x7e,0xfd,0x97,0x94,0x69,0x19,0x2e,0x95,0xa0,0x69,0xc9,0x3a,0x92,0xc8,
+  0xfe,0x59,0xb3,0x66,0x59,0xa7,0xf2,0x15,0xc4,0x88,0x92,0xe7,0x67,0x1e,0x56,0x6b,
+  0x91,0x0a,0x80,0xcf,0x0a,0x4f,0x73,0xdb,0xbb,0x84,0xbc,0x39,0x4f,0x40,0x88,0xc7,
+  0xc1,0xa5,0x6c,0x51,0x09,0xb0,0x0e,0x24,0x2b,0xd3,0xc9,0x85,0x2e,0xae,0x2c,0x69,
+  0x69,0x48,0x90,0x4b,0xb3,0xcd,0xdd,0x0c,0x00,0x50,0x34,0xe2,0xf6,0x8f,0x4b,0x7d,
+  0xe7,0x25,0xa4,0xeb,0xed,0x02,0x0f,0x89,0xd6,0xcf,0xe2,0xe1,0xf1,0x79,0x03,0x5c,
+  0x55,0x04,0x6d,0xde,0x88,0x32,0xd1,0xb9,0x15,0x2e,0x58,0xb1,0xf0,0xa5,0x55,0xeb,
+  0xbe,0x03,0x00,0x68,0x77,0xe4,0x99,0x28,0x56,0xbf,0xb8,0xfd,0xf3,0x7e,0x3e,0x16,
+  0xe5,0x05,0xb0,0x59,0xfa,0x36,0x41,0x1c,0x2a,0x7c,0xd3,0xf2,0xf7,0x4d,0x77,0xbe,
+  0xcb,0xd3,0xd0,0x4c,0x33,0x02,0x76,0x6d,0x95,0x8b,0x57,0x2e,0xdc,0xb9,0x73,0xe7,
+  0x86,0x6b,0x3e,0x6b,0xdc,0x65,0x65,0x4f,0xcf,0xa9,0x87,0xa6,0x4c,0xff,0xe9,0x3f,
+  0xfd,0x6f,0xef,0xfe,0x4b,0x90,0x9e,0x3c,0x43,0xb3,0x1a,0x52,0x65,0xea,0x47,0x11,
+  0xc7,0x25,0x2d,0xab,0xc0,0x17,0x27,0xd0,0x0c,0x1e,0xe6,0x96,0x51,0x00,0xc4,0x6d,
+  0xb5,0x64,0xc9,0x92,0x68,0x9c,0x2b,0xcb,0x0d,0xdc,0x8c,0x25,0x41,0xf3,0xd6,0xa0,
+  0xe9,0x3f,0xfd,0xa7,0xff,0xed,0xd9,0x7f,0x31,0x84,0x24,0xca,0x5f,0x4a,0xfc,0x36,
+  0x63,0xbf,0x43,0x85,0xb1,0xeb,0x77,0xe6,0x6f,0x5c,0x53,0x08,0xdb,0xbc,0x0e,0x21,
+  0xdb,0x27,0x06,0xa0,0x8e,0x48,0xe9,0x5a,0xf1,0x02,0x48,0x59,0xdd,0x90,0x1b,0x5f,
+  0x2e,0xfe,0x7a,0x45,0xa8,0x02,0x00,0x94,0x49,0xf1,0x11,0xa3,0x49,0x04,0x7f,0x35,
+  0x05,0x7e,0x5a,0xc9,0xfa,0xb7,0xd5,0x43,0xb0,0x05,0x17,0xc6,0xcb,0xa6,0x15,0x0f,
+  0xaa,0x46,0x19,0x41,0x01,0xc8,0x51,0x9b,0x95,0xc9,0x6b,0x16,0x2d,0x5a,0x14,0x45,
+  0xbb,0xfa,0x0e,0x7e,0x72,0x18,0x00,0x00,0xa0,0xd5,0x91,0x82,0x3e,0x12,0x34,0x2d,
+  0xad,0x9e,0x16,0x7f,0xa3,0x95,0x0c,0x5b,0x8d,0x7f,0x9b,0x05,0x6f,0xab,0xb5,0x60,
+  0x93,0x0f,0x69,0xf3,0x0d,0x84,0x28,0x19,0x28,0x00,0x05,0x6a,0xb6,0x12,0xc4,0x22,
+  0x6e,0x2d,0x19,0x0e,0x90,0x26,0x11,0xff,0x92,0x1d,0x60,0x0a,0xfb,0xd8,0x0b,0x10,
+  0xcf,0x2a,0x08,0x00,0xd0,0x2a,0xcf,0x41,0x79,0xb6,0xc9,0xd8,0xbe,0x34,0x19,0xdb,
+  0x17,0xe1,0xdf,0x08,0x41,0xec,0xaa,0xbd,0x5f,0x94,0x27,0xc0,0x36,0x8d,0xaf,0x19,
+  0x98,0x67,0xab,0x20,0x68,0xc6,0x84,0xf9,0x5c,0xff,0x3e,0x65,0x20,0x29,0xf8,0xa9,
+  0x04,0xd8,0x00,0x6f,0x80,0xb8,0xb8,0x42,0xa6,0xb1,0x15,0x25,0xa1,0x0c,0x4a,0x00,
+  0x9e,0x88,0xda,0x1e,0x32,0x00,0x50,0x3e,0xea,0x35,0x1d,0xb0,0xab,0x2c,0x70,0xd6,
+  0x62,0x40,0xa1,0xf3,0x04,0x84,0x56,0x5b,0x34,0x15,0x13,0x14,0x80,0x92,0x21,0x45,
+  0x2f,0x44,0x09,0x68,0x74,0x3c,0x00,0x42,0x0c,0x00,0x5a,0x8d,0x7a,0x64,0x16,0x98,
+  0xc5,0x79,0x6c,0xd6,0xbe,0xcf,0x6a,0xcf,0x3a,0x76,0x5f,0xcd,0x24,0x44,0xa5,0x33,
+  0x94,0xb9,0x3c,0xff,0x7f,0xd9,0x4b,0x04,0x30,0x00,0x40,0xbe,0xd6,0x7f,0xd1,0xc3,
+  0x0e,0x3e,0xe1,0x9b,0x56,0xd7,0x3f,0x8b,0xd7,0xd5,0x54,0x10,0x6c,0x15,0x03,0x43,
+  0x26,0x15,0x42,0x01,0x40,0x09,0x00,0x00,0x68,0x79,0x6a,0x99,0x45,0xb0,0x16,0x45,
+  0xc0,0x25,0x90,0x6d,0xe3,0xfa,0x59,0x64,0x84,0xcd,0x9d,0xef,0x2a,0x0b,0x6c,0x2b,
+  0x16,0x84,0x02,0x50,0x62,0x44,0x53,0x95,0xb4,0x98,0x7a,0x8d,0x59,0x01,0x00,0xb4,
+  0x2a,0x32,0xb4,0x5a,0x0f,0xeb,0xdf,0xfc,0x3b,0x4b,0x66,0x57,0xe8,0x30,0x40,0xda,
+  0xf8,0xbf,0xcd,0x33,0xd0,0x2c,0x85,0x81,0x50,0x00,0x2c,0x5a,0x9e,0x5c,0xb8,0xf5,
+  0xd4,0x5c,0x01,0x00,0x5a,0x4d,0xf8,0xd7,0xab,0xaa,0xa0,0xcd,0xc2,0x4e,0xab,0xcb,
+  0xef,0x5b,0x57,0x9a,0x65,0x6f,0xf3,0x2a,0xd8,0x26,0x9e,0x72,0x15,0x19,0x42,0x01,
+  0x68,0x12,0x25,0x40,0x14,0x00,0xbc,0x01,0x00,0x00,0xd9,0x9e,0x9d,0x32,0x94,0x5a,
+  0x6f,0xe1,0x9f,0x66,0xb1,0xbb,0x04,0x6f,0xda,0xef,0x92,0x56,0x7c,0x5a,0x6d,0x00,
+  0xdb,0xf6,0x6d,0xe9,0xe6,0x65,0xf5,0x00,0x90,0x05,0x90,0xa6,0x1d,0x69,0xf7,0x95,
+  0x5c,0xcc,0x92,0x1d,0xb0,0x62,0xc5,0x0a,0xea,0x05,0x00,0x00,0xb8,0x84,0xc9,0x9a,
+  0x5a,0x03,0x8d,0x98,0xf5,0xcf,0x97,0x8b,0xef,0xb3,0xf6,0x6d,0xcb,0xb9,0xac,0xfc,
+  0xb4,0x14,0x42,0xdb,0xbe,0x50,0x0a,0xb8,0x45,0x14,0x01,0x39,0x91,0xa2,0x04,0x88,
+  0x42,0x20,0x8d,0x2a,0x82,0x00,0xd0,0xce,0xcf,0xc5,0x78,0x22,0x21,0x69,0x8d,0x74,
+  0x71,0xbb,0xc6,0xdc,0x5d,0xe5,0x7c,0x6d,0x41,0x82,0xae,0xcf,0x42,0xc6,0xf4,0x5d,
+  0x5e,0x84,0xb2,0x07,0x95,0xa3,0x00,0x64,0x40,0x4e,0x66,0xb3,0xce,0x96,0x05,0x00,
+  0xd0,0x6e,0xcf,0x6b,0xd3,0xd2,0xaf,0x36,0x38,0x30,0x4d,0x11,0xf0,0x6d,0xbf,0xd4,
+  0x4a,0x1c,0x97,0x09,0x00,0x00,0x34,0x2b,0xbe,0x68,0x7d,0xd3,0x22,0xf7,0x59,0xfa,
+  0x66,0x2a,0x9f,0xb9,0xde,0x34,0xc1,0xee,0xdb,0x3e,0x1e,0x00,0x00,0x00,0x80,0x9c,
+  0x2d,0x7d,0x9b,0x20,0x0e,0x89,0xea,0x77,0x09,0xe7,0xac,0x31,0x05,0xa1,0xdb,0xc7,
+  0x03,0x00,0x00,0x00,0x90,0x93,0xf5,0x9f,0x56,0x74,0x27,0x99,0x9b,0x6f,0x2b,0x0c,
+  0x14,0xa2,0x0c,0xa4,0x6d,0x37,0xf9,0x99,0x6b,0xd8,0xa1,0xac,0xf1,0x62,0x28,0x00,
+  0x00,0x00,0xd0,0xb4,0xd6,0xbf,0xe9,0xda,0x37,0xdd,0xfa,0xb6,0xea,0x80,0xd5,0x5a,
+  0xff,0xae,0xed,0xdb,0x84,0xbe,0x6b,0xfb,0x28,0x00,0x00,0x00,0x00,0x39,0x78,0x00,
+  0xd2,0xea,0xfb,0x57,0x33,0x8e,0x6f,0xfb,0xde,0x5c,0x87,0x2d,0x8e,0x20,0xcb,0xf6,
+  0x51,0x00,0x00,0x00,0x00,0x72,0xf2,0x04,0x24,0x05,0x72,0xfc,0xde,0x25,0xf4,0x43,
+  0xac,0x7e,0xb3,0x18,0x90,0x29,0xd0,0x6b,0xd9,0x3e,0x0a,0x00,0x00,0x00,0x40,0x0e,
+  0x5e,0x80,0x90,0x29,0x78,0x7d,0xae,0x7f,0xf3,0x37,0xf1,0xb0,0x82,0x2d,0x93,0xc0,
+  0x8c,0x27,0xa8,0x66,0xfb,0x28,0x00,0x00,0x00,0x00,0x35,0x5a,0xfe,0xa6,0x80,0x0d,
+  0x11,0xb6,0xb6,0x40,0x3d,0xdb,0xfb,0xa4,0x22,0x10,0x2a,0xe0,0x6b,0x99,0x75,0x10,
+  0x05,0x00,0x00,0x00,0x20,0xc0,0xfa,0xaf,0x66,0xd9,0x34,0x21,0x6f,0xa6,0xee,0xa5,
+  0xd5,0xf5,0x0f,0x4d,0xf7,0x23,0x0b,0x00,0x00,0x00,0xa0,0x81,0xde,0x82,0xa4,0xc0,
+  0xb6,0x05,0xfa,0x99,0x63,0xfd,0xb6,0xb4,0x41,0x9b,0x65,0x1f,0xe2,0x7d,0x20,0x06,
+  0x00,0x00,0x00,0xa0,0x20,0x0f,0x80,0xaf,0x3e,0xbf,0xf9,0xb7,0x2b,0xf0,0xaf,0xda,
+  0x92,0xc1,0xcd,0x32,0x09,0x10,0x0a,0x00,0x00,0x00,0x34,0xbd,0x55,0x9f,0x14,0xb6,
+  0x21,0x95,0xff,0x5c,0xb3,0xfa,0xb9,0xdc,0xf8,0xd5,0xd6,0xff,0x2f,0xf3,0x34,0xc0,
+  0x28,0x00,0x00,0x00,0xd0,0x12,0x5e,0x00,0xdb,0xd8,0xbc,0x6b,0x7a,0x5e,0xd7,0xd4,
+  0xbd,0x2e,0xeb,0xdd,0xe5,0xba,0x4f,0xfb,0x5d,0xda,0xf6,0xcb,0x04,0x73,0x01,0x00,
+  0x00,0x40,0x4b,0x28,0x02,0xa6,0x35,0x6e,0xb3,0xf2,0x6d,0x82,0x39,0x4d,0x48,0x87,
+  0x8e,0xe9,0xa7,0x05,0x0b,0x96,0x55,0x09,0xc0,0x03,0x00,0x00,0x00,0x4d,0x6d,0xfd,
+  0xdb,0x22,0xf9,0x6d,0x9e,0x01,0x97,0xc0,0x4e,0xfb,0xde,0x37,0xce,0x6f,0xdb,0xbe,
+  0xcb,0x33,0x81,0x02,0x00,0x00,0x00,0x50,0xa0,0x17,0x20,0x24,0x5a,0xdf,0x87,0x6b,
+  0x62,0x9f,0x6a,0xbd,0x11,0x28,0x00,0x00,0x00,0x00,0x05,0x79,0x01,0x5c,0x02,0x3b,
+  0x4d,0x70,0xfb,0xb2,0x05,0x5c,0xf5,0x02,0x4c,0xeb,0xdf,0xac,0x08,0x58,0xf6,0x79,
+  0x00,0x50,0x00,0x00,0x00,0xa0,0x69,0xc9,0xc3,0xc5,0x9e,0x56,0xb8,0xc7,0x9c,0x65,
+  0x30,0xa9,0x08,0xa4,0x59,0xfc,0x65,0x16,0xfa,0x28,0x00,0x00,0x00,0xd0,0x32,0xd6,
+  0x7f,0x88,0xe0,0x75,0x45,0xeb,0x9b,0x02,0xdf,0x96,0x36,0x98,0x6c,0xbe,0xb2,0xc0,
+  0xcd,0x20,0xf8,0x51,0x00,0x00,0x00,0xa0,0x25,0x94,0x80,0x90,0xcf,0x6c,0x96,0xbe,
+  0x19,0xc0,0x97,0xfc,0xcc,0x14,0xf0,0x2e,0x6f,0x43,0xd9,0x67,0xfc,0x4b,0x83,0x34,
+  0x40,0x00,0x00,0x68,0x29,0x5c,0x65,0x7e,0xb3,0xa4,0x00,0xba,0xea,0xfe,0xa7,0xfd,
+  0x26,0xcd,0xfb,0x40,0x29,0x60,0x00,0x00,0x80,0x82,0x3c,0x01,0xae,0x09,0x7f,0x6c,
+  0x11,0xfd,0xbe,0xf7,0x69,0x25,0x81,0x43,0x84,0xbf,0x6d,0xfb,0x78,0x00,0x00,0x00,
+  0x00,0x72,0x14,0xfc,0xb6,0xc9,0x7d,0x5c,0xc5,0x78,0x7c,0x9e,0x00,0x73,0x19,0xdf,
+  0x76,0x5d,0x5e,0x87,0xb4,0x32,0xc5,0x78,0x00,0x00,0x00,0x00,0x6a,0x24,0x29,0xb8,
+  0x4d,0xcb,0xdb,0x57,0xa0,0xc7,0x65,0xc1,0x87,0x04,0xf2,0xb9,0xea,0x03,0xf8,0xb6,
+  0x8f,0x02,0x00,0x00,0x00,0x90,0xb3,0x07,0xc0,0xac,0xbe,0x67,0x9b,0x07,0x20,0x29,
+  0xb0,0xb3,0x08,0x65,0x9f,0x90,0x77,0x79,0x05,0x98,0x0c,0x08,0x00,0x00,0xa0,0x0e,
+  0x8a,0x40,0x9a,0xa0,0xaf,0xa5,0x42,0x9f,0xab,0xd8,0x90,0x4d,0xf8,0xdb,0xbc,0x12,
+  0x0c,0x01,0x00,0x00,0x00,0xe4,0x28,0xf4,0xcd,0xbf,0xcd,0xe0,0xbd,0x34,0xc1,0xbb,
+  0x7a,0xf5,0xea,0x54,0x2b,0x3f,0x6d,0x3b,0xa6,0x90,0xf7,0x6d,0x9f,0x21,0x00,0x00,
+  0x00,0x80,0x1c,0xb1,0x15,0xef,0x09,0xad,0xdf,0xef,0x0a,0xdc,0x73,0x59,0xf6,0xa6,
+  0xf0,0xcf,0xb2,0x7d,0x3c,0x00,0x00,0x00,0x00,0x39,0x0b,0x7f,0x9f,0xc5,0x9e,0xe6,
+  0x3d,0x70,0x55,0x08,0x74,0xd5,0x09,0x70,0x65,0x11,0xb8,0xb6,0x8f,0x07,0x00,0x00,
+  0x00,0x20,0x67,0xf2,0x9c,0x03,0xc0,0x16,0x1f,0xe0,0x9a,0xf4,0xc7,0xa6,0x08,0x84,
+  0xae,0x17,0x05,0x00,0x00,0x00,0xa0,0x0e,0xca,0x81,0xab,0x74,0xaf,0x4d,0xb8,0x9b,
+  0x82,0x3e,0xcd,0x7a,0xf7,0xc5,0x0b,0x94,0x7d,0x26,0x40,0x14,0x00,0x00,0x00,0x68,
+  0x49,0x6c,0xd5,0xff,0x42,0x83,0x03,0x5d,0xd9,0x02,0x59,0x84,0xb9,0x6d,0xfb,0x65,
+  0x83,0x4a,0x80,0x00,0x00,0xd0,0xd4,0x96,0x7e,0x5a,0xc0,0x5e,0x9a,0x20,0xb7,0xb9,
+  0xf6,0x93,0xcb,0x66,0xb5,0xe2,0x5d,0xdb,0x2f,0x6b,0x3d,0x00,0x14,0x00,0x00,0x00,
+  0x68,0x7a,0x4b,0xdf,0x66,0xc1,0xbb,0xa6,0xf7,0x35,0x05,0xb2,0x2d,0xc8,0xaf,0x16,
+  0x81,0x1d,0x12,0x1b,0x50,0x06,0x18,0x02,0x00,0x00,0x80,0xa6,0xb5,0xfe,0xe3,0xd7,
+  0xb4,0xa2,0x3b,0xc9,0xfc,0x7c,0x5f,0x59,0xe0,0x6a,0x32,0x08,0x6c,0xf1,0x04,0xb6,
+  0x6d,0xa3,0x00,0x00,0x00,0x00,0xe4,0x64,0xfd,0x27,0x03,0xf8,0xd2,0xea,0xfe,0xbb,
+  0xc6,0xf1,0xb3,0x4c,0xeb,0xeb,0xdb,0xbe,0xf9,0x99,0x6d,0xfb,0x65,0x82,0x21,0x00,
+  0x00,0x00,0x68,0x5a,0x0f,0x80,0x2f,0x35,0xcf,0x36,0x8e,0xef,0x1b,0x93,0xf7,0x8d,
+  0xe3,0xbb,0xe6,0x1b,0x48,0xab,0x19,0x80,0x07,0x00,0x00,0x00,0xa0,0x00,0x4f,0x80,
+  0x69,0xf1,0xa7,0xb9,0xdd,0x5d,0x56,0xbf,0xad,0xac,0xaf,0x69,0xdd,0x57,0xbb,0x7d,
+  0x3c,0x00,0x00,0x00,0x00,0x39,0x7b,0x01,0x92,0xd6,0x76,0xb5,0x11,0xfb,0xae,0xb2,
+  0xc0,0xbe,0x8c,0x01,0xdb,0xf6,0x6d,0x1e,0x06,0x3c,0x00,0x00,0x00,0x00,0x39,0x5b,
+  0xfe,0x69,0x56,0x7d,0xe8,0x6f,0x5d,0x01,0x85,0x49,0xe1,0x6e,0x2a,0x0e,0xae,0xed,
+  0x97,0xb9,0xf8,0x0f,0x0a,0x00,0x00,0x00,0xb4,0x8c,0xf5,0x9f,0x26,0xe4,0x5d,0xb5,
+  0xfa,0x4d,0x81,0xee,0x9b,0xd4,0xc7,0xe6,0x15,0xc8,0x32,0xd1,0x0f,0x1e,0x00,0x00,
+  0x00,0x80,0x06,0x78,0x09,0x5c,0xb5,0xfb,0x93,0x02,0xda,0x5c,0x36,0xb4,0xac,0x6f,
+  0x88,0x70,0xa7,0x0e,0x00,0x00,0x00,0x40,0x41,0x1e,0x00,0x5f,0x7d,0x7e,0x53,0xd8,
+  0xdb,0x3e,0xcf,0x12,0xbc,0x57,0xed,0xf6,0x51,0x00,0x00,0x00,0x00,0x72,0xb0,0xee,
+  0xd3,0x2a,0xef,0xf9,0x2a,0x01,0xfa,0x5c,0xff,0xa1,0x71,0x04,0xa1,0xdb,0x47,0x01,
+  0x00,0x00,0x00,0xc8,0xc9,0x0b,0x60,0x1b,0x9b,0x0f,0xc9,0xcd,0x4f,0x8b,0x11,0xf0,
+  0x79,0x00,0xd2,0x7e,0x97,0xb6,0xfd,0x32,0x41,0x1a,0x20,0x00,0x00,0xb4,0x84,0x22,
+  0x60,0x5a,0xe3,0x69,0x82,0x3e,0xad,0x80,0x4f,0xda,0x7a,0x5d,0x8a,0x81,0x4d,0x69,
+  0x28,0xbb,0x12,0x80,0x07,0x00,0x00,0x00,0x9a,0xda,0xfa,0xb7,0x45,0xf2,0xdb,0x3c,
+  0x03,0x59,0xd2,0xf6,0x5c,0x81,0x7f,0xe6,0xef,0x6c,0xdb,0x77,0x79,0x26,0x50,0x00,
+  0x00,0x00,0x00,0x0a,0xf4,0x02,0xf8,0xa6,0x01,0x0e,0xc1,0x97,0xeb,0x5f,0xcd,0xf6,
+  0xcb,0x06,0x43,0x00,0x00,0x00,0xd0,0x12,0x5e,0x80,0x50,0x81,0x6c,0xfb,0xbd,0xf9,
+  0x3e,0x44,0x91,0xb0,0x55,0x07,0xb4,0x7d,0x46,0x0c,0x00,0x00,0x00,0x40,0x8e,0xd8,
+  0xca,0xff,0x66,0x1d,0x6f,0x77,0xd5,0x04,0x48,0xfb,0xce,0x55,0x0e,0xd8,0xb6,0x8e,
+  0x32,0xc3,0x10,0x00,0x00,0x00,0x34,0xb5,0xf5,0x1f,0x22,0x78,0x5d,0xd1,0xfa,0xf1,
+  0xab,0x2d,0x76,0x20,0xf9,0x9d,0xad,0xce,0x7f,0xb5,0xdb,0x47,0x01,0x00,0x00,0x00,
+  0xc8,0x41,0x09,0x08,0xf9,0xcc,0x66,0xcd,0x9b,0x01,0x7c,0xa6,0x07,0xc1,0x56,0xf7,
+  0x3f,0x2d,0x28,0x30,0x6d,0xac,0x9f,0xd9,0x00,0x01,0x00,0x00,0x0a,0xc6,0x66,0x95,
+  0xbb,0xd2,0xfe,0x5c,0x43,0x06,0xae,0xba,0xff,0x59,0x95,0x11,0x97,0xa7,0x00,0x05,
+  0x20,0xc1,0xca,0x95,0x2b,0xb9,0x6a,0x01,0x00,0x20,0x98,0xb9,0x73,0xe7,0x46,0xaf,
+  0x83,0x06,0x0d,0x4a,0x2d,0xfc,0x63,0x5a,0xfc,0x21,0xef,0xb3,0xba,0xec,0x5d,0x01,
+  0x84,0x49,0xef,0x02,0x0a,0x00,0x00,0x00,0x40,0x81,0x56,0x7f,0x5a,0xbe,0xbf,0x2b,
+  0x80,0x2f,0x29,0xf8,0x43,0x02,0x09,0x6d,0x35,0x00,0xd2,0x3c,0x08,0x4c,0x06,0x04,
+  0x00,0x00,0x90,0x33,0xe6,0xcc,0x7d,0x69,0x55,0xff,0x6c,0xe3,0xfa,0x36,0x45,0x21,
+  0x54,0xe1,0xb0,0x29,0x14,0xae,0xa9,0x86,0x51,0x00,0x00,0x00,0x00,0x72,0xb6,0xfe,
+  0x6d,0xd5,0xff,0x7c,0x56,0x79,0x16,0xa1,0xec,0x13,0xf2,0xb6,0x6d,0x96,0x79,0x1e,
+  0x00,0xa1,0x34,0x43,0x00,0x5d,0xbb,0x32,0x1a,0x01,0x00,0x00,0xe1,0xf4,0xeb,0xd7,
+  0x6f,0x1d,0x41,0x9c,0x7c,0xb5,0xa5,0xfb,0xd5,0xa2,0x64,0xa4,0x59,0xf4,0xb6,0xed,
+  0x9b,0xdf,0xe1,0x01,0x00,0x00,0x00,0xc8,0x01,0x57,0x4a,0x5e,0x68,0x6a,0x9e,0xaf,
+  0xce,0x7f,0xda,0x72,0x2e,0x25,0xc0,0xb5,0x7d,0x86,0x00,0x00,0x00,0x00,0x72,0xc4,
+  0x56,0xbc,0x27,0xb4,0x7e,0x7f,0x5a,0xa0,0x9e,0x19,0x14,0xe8,0x12,0xfe,0xa1,0xdb,
+  0x27,0x0d,0x10,0x00,0x00,0xa0,0x00,0x2f,0x40,0x48,0x10,0x9f,0x4f,0x78,0xdb,0xbe,
+  0xb7,0x59,0xf4,0x69,0xd3,0x0c,0xbb,0xb6,0x5f,0x46,0x0f,0x00,0x0a,0x00,0x00,0x00,
+  0xb4,0x8d,0xb7,0xc0,0x65,0x8d,0xdb,0x26,0xfe,0x09,0x99,0xf4,0xa7,0x99,0x61,0x08,
+  0x00,0x00,0x00,0x9a,0xda,0xfa,0xf7,0x79,0x06,0x5c,0xf3,0x00,0xd8,0x72,0xf9,0xf3,
+  0x9a,0xec,0xa7,0xec,0x33,0x01,0xa2,0x00,0x00,0x00,0x40,0xd3,0x5b,0xf4,0x3e,0x6b,
+  0xdf,0xe5,0xca,0xf7,0x09,0x6f,0xdf,0x3c,0x00,0xd5,0x7a,0x1b,0xca,0x02,0x43,0x00,
+  0x00,0x00,0xd0,0xd4,0x5e,0x00,0x57,0x1e,0xbe,0xcd,0xad,0x6f,0x0a,0xf8,0xb4,0xca,
+  0x7f,0x69,0x56,0xbc,0x6b,0x26,0xc0,0xd0,0x00,0x44,0x14,0x00,0x00,0x00,0x80,0x9c,
+  0xbd,0x00,0x69,0x11,0xfa,0x79,0x05,0xe8,0x85,0x7a,0x10,0xca,0x5a,0x03,0x40,0x60,
+  0x08,0x00,0x00,0x00,0x9a,0xd6,0xfa,0x8f,0x5f,0x6d,0x95,0xf9,0x92,0xcb,0xa5,0xa5,
+  0xf4,0xd5,0xb2,0xdd,0xe4,0xfa,0x5d,0x02,0xbf,0x9a,0xc9,0x85,0x50,0x00,0x00,0x00,
+  0x00,0x52,0xac,0x70,0x73,0xd6,0x3d,0x5f,0xdd,0xff,0xb4,0xe2,0x3f,0x59,0x3d,0x02,
+  0xb6,0xc9,0x80,0x42,0xe6,0x1d,0x28,0x0b,0x0c,0x01,0x00,0x00,0x40,0xd3,0x7a,0x00,
+  0x5c,0xd3,0xf7,0xd6,0x52,0xf7,0xdf,0x55,0xc8,0x27,0xeb,0xfb,0x6a,0xb7,0x8f,0x07,
+  0x00,0x00,0x00,0x20,0xa3,0xc0,0x4e,0x0a,0xee,0xac,0x93,0xfd,0xd8,0x26,0xfc,0x31,
+  0xad,0x7b,0xdb,0x36,0x6d,0x41,0x88,0x65,0x75,0xfb,0xe3,0x01,0x00,0x00,0x80,0x96,
+  0xf1,0x02,0x98,0xd6,0x77,0x16,0xef,0x81,0x4b,0x89,0x08,0xcd,0x18,0x30,0xbf,0x6f,
+  0xa6,0xe2,0x40,0x78,0x00,0x00,0x00,0xa0,0x65,0x14,0x01,0xdf,0x67,0x36,0x81,0x6f,
+  0x06,0x11,0x9a,0x6e,0xfb,0x90,0x71,0xfd,0x66,0xac,0x0a,0x88,0x02,0x00,0x00,0x00,
+  0x2d,0x49,0x5a,0xad,0x7e,0x53,0xa0,0xbb,0xe6,0x05,0x48,0xf3,0x0a,0x64,0xf5,0x38,
+  0xa0,0x00,0x00,0x00,0x00,0xd4,0x51,0x09,0x30,0x95,0x01,0x57,0x9a,0x9e,0x2b,0x63,
+  0xa0,0xd6,0x40,0xbe,0xb2,0xd6,0x02,0x40,0x01,0x00,0x00,0x80,0xa6,0xc4,0x96,0xd2,
+  0x17,0x32,0x3b,0x5f,0xda,0xac,0x7f,0x59,0xc6,0xf1,0xd3,0x52,0x0a,0xcd,0x7d,0x59,
+  0xbd,0x7a,0x35,0x0a,0x00,0x00,0x00,0x40,0x9e,0xd6,0xbd,0x59,0x0b,0x20,0x69,0xf1,
+  0xbb,0x8a,0xff,0xa4,0x55,0xeb,0x0b,0xb5,0xd6,0x7d,0xb3,0x0a,0x96,0x55,0xf0,0xc7,
+  0x90,0x05,0x00,0x00,0x00,0x4d,0xed,0x05,0x30,0xc7,0xed,0x5d,0xb9,0xf8,0x49,0x81,
+  0x6f,0xbe,0xf7,0xcd,0xfe,0xe7,0xda,0xae,0xf9,0x3b,0xf9,0x4c,0x84,0x7e,0x72,0xbf,
+  0xe4,0x6f,0x0a,0x01,0x01,0x00,0x00,0x14,0xa4,0x08,0x98,0xd6,0x79,0x9a,0xa0,0x77,
+  0x7d,0x1f,0xba,0x1d,0xd3,0xc3,0x60,0x1b,0x3a,0xc8,0xaa,0x54,0xd4,0x1b,0x86,0x00,
+  0x00,0x00,0xa0,0xa9,0xad,0x7f,0x57,0xae,0xbe,0x6d,0x88,0x20,0x54,0x38,0x9b,0x69,
+  0x81,0xa6,0x02,0x21,0x56,0x7d,0xec,0xde,0x4f,0xfe,0x3e,0xb6,0xfe,0xe3,0xd7,0xac,
+  0x71,0x05,0x78,0x00,0x00,0x00,0x00,0x32,0xe0,0x72,0xe7,0xa7,0x79,0x09,0x42,0xbd,
+  0x09,0xa6,0x70,0x37,0x97,0x35,0x15,0x11,0x9b,0x72,0x81,0x02,0x00,0x00,0x00,0x50,
+  0xa0,0x17,0x20,0x54,0xe0,0x9b,0x9e,0x02,0x9b,0x17,0x21,0x19,0xc0,0xe7,0x2b,0xf3,
+  0x6b,0xfb,0xcc,0xfc,0x3d,0x0a,0x00,0x00,0x00,0x40,0x8e,0x56,0x7f,0x35,0xc2,0xd5,
+  0x36,0x1c,0x60,0x9b,0xde,0xd7,0xf6,0xb9,0x4b,0xc9,0x30,0xe3,0x01,0x5c,0xd3,0x03,
+  0xa3,0x00,0x00,0x00,0x00,0xd4,0x68,0xfd,0x67,0xf5,0x10,0xd8,0xca,0xfa,0x26,0x05,
+  0xb6,0x39,0xae,0x9f,0x65,0xfa,0x60,0xd7,0x70,0x40,0x59,0x63,0x00,0x08,0x02,0x04,
+  0x00,0x80,0x96,0x55,0x0c,0x4c,0x37,0xbf,0x29,0x8c,0x6d,0x6e,0xfa,0xb4,0x57,0x73,
+  0x1d,0xb6,0xb8,0x00,0x5b,0x70,0x20,0x1e,0x00,0x00,0x00,0x80,0x3a,0x92,0x14,0xc6,
+  0xa6,0x85,0x1e,0xe7,0xe7,0xbb,0x2c,0x74,0xd7,0x04,0x41,0xb6,0xdf,0xd8,0x0a,0xfe,
+  0x94,0x3d,0x0d,0x10,0x05,0x00,0x00,0x00,0x5a,0xc6,0xea,0x4f,0x13,0xe8,0x66,0x60,
+  0x9f,0xcd,0xca,0x77,0x09,0x6f,0x5b,0x51,0xa1,0xd0,0x54,0x42,0x3c,0x00,0x00,0x00,
+  0x00,0x05,0x08,0xfd,0x50,0x21,0xec,0x9b,0xdc,0xc7,0x55,0x4f,0x20,0x2d,0x66,0xc0,
+  0x37,0xe7,0x00,0x0a,0x00,0x00,0x00,0x40,0x81,0x4a,0x80,0x2b,0x75,0xcf,0xb6,0x7c,
+  0x68,0xce,0x7e,0xb2,0x84,0xaf,0x6b,0x38,0xc0,0xa5,0x00,0x54,0x5b,0x69,0x10,0x05,
+  0x00,0x00,0x00,0x20,0x40,0xf8,0xbb,0xd2,0xf5,0xd2,0x84,0x72,0x9a,0x7b,0xdf,0x14,
+  0xd6,0xc9,0x18,0x02,0xd7,0x30,0x40,0x9a,0x27,0x20,0xa9,0x4c,0xa0,0x00,0x00,0x00,
+  0x00,0xe4,0x6c,0xfd,0x87,0x4c,0xff,0xeb,0xf2,0x0e,0xd8,0x4a,0xfd,0xfa,0xaa,0xf9,
+  0xd9,0x3c,0x09,0xc9,0xbf,0xcb,0x5e,0x04,0x08,0x05,0x00,0x00,0x00,0x9a,0x16,0x9b,
+  0x8b,0x3e,0x8b,0xd5,0x6f,0xce,0xd2,0x17,0x32,0x9e,0x9f,0xfc,0x9d,0x99,0x02,0x98,
+  0x26,0xf4,0x19,0x02,0x00,0x00,0x00,0x28,0xc0,0x0b,0xe0,0x12,0xba,0x3e,0xd7,0xbc,
+  0xed,0x33,0x9b,0x52,0xe1,0xf2,0x14,0x84,0x2a,0x22,0x9f,0xf9,0xcc,0x67,0x50,0x00,
+  0x00,0x00,0x00,0x8a,0x52,0x00,0x92,0xae,0xfe,0x58,0x28,0x27,0xf3,0xfd,0x43,0x14,
+  0x88,0xb4,0xd8,0x02,0x73,0xfd,0xbe,0xcc,0x02,0xe1,0xd8,0x63,0x8f,0x55,0xbb,0xec,
+  0xb2,0x4b,0xe9,0x8e,0x1d,0x95,0x00,0x01,0x00,0xa0,0x69,0x85,0xbf,0x59,0x91,0xcf,
+  0x35,0x69,0x8f,0x2f,0x8a,0xdf,0x35,0xe5,0x6f,0x48,0x6c,0x80,0x6b,0x5d,0xf2,0xfb,
+  0xa3,0x8f,0x3e,0x5a,0x7d,0xf4,0xa3,0x1f,0x2d,0xe5,0x7c,0x00,0x78,0x00,0x00,0x00,
+  0xa0,0x29,0xb1,0x59,0xf6,0xc9,0xf1,0x79,0xd3,0x82,0x77,0x59,0xec,0x49,0xa5,0xc1,
+  0x5c,0xa7,0xf9,0x77,0x9a,0x17,0x21,0xb9,0x5d,0xf9,0xec,0xa8,0xa3,0x8e,0x52,0xdb,
+  0x6c,0xb3,0x4d,0xc7,0x72,0xf2,0x79,0xdc,0x92,0xc4,0x7f,0xd7,0x5b,0x49,0x40,0x01,
+  0x00,0x00,0x80,0x96,0xf0,0x02,0xb8,0x2c,0xf3,0xe4,0x72,0x69,0x69,0x83,0xbe,0x39,
+  0x00,0x6c,0xdb,0x76,0xcd,0x35,0xb0,0xf7,0xde,0x7b,0xab,0x2d,0xb7,0xdc,0x32,0x55,
+  0xe8,0xa7,0x29,0x03,0x28,0x00,0x00,0x00,0x00,0x29,0xc2,0xdf,0xf6,0x3e,0xe9,0x0d,
+  0x30,0xbf,0xb3,0xcd,0xfe,0x67,0xce,0x0d,0x90,0xb6,0x7e,0x33,0x06,0x20,0x7e,0x9f,
+  0xcc,0x00,0x18,0x31,0x62,0x84,0xda,0x75,0xd7,0x5d,0xd7,0x12,0xf2,0x66,0x33,0x49,
+  0x7e,0x56,0x2f,0x25,0x00,0x05,0x00,0x00,0x00,0x5a,0x46,0x09,0x48,0x2b,0xd5,0x6b,
+  0x0a,0xea,0x90,0x71,0x7d,0x53,0x20,0x27,0x87,0x18,0x5c,0xeb,0x91,0x71,0xff,0xce,
+  0x9d,0x3b,0xa7,0x2a,0x00,0x3e,0x85,0xa0,0x1e,0x10,0x04,0x08,0x00,0x00,0x4d,0x89,
+  0x6d,0xa6,0x3f,0xdb,0x67,0xf1,0xe7,0xb6,0x80,0x41,0x73,0x7a,0x5f,0xdb,0xdf,0xb2,
+  0x7c,0xdc,0x92,0xdb,0x35,0xd7,0x33,0x7f,0xfe,0x7c,0x75,0xf2,0xc9,0x27,0xab,0xae,
+  0x5d,0xbb,0x5a,0x85,0xbc,0x4d,0x29,0x68,0x24,0x0d,0x57,0x00,0xe4,0x40,0x01,0x00,
+  0x00,0x54,0x23,0xfc,0xcd,0x62,0x3c,0xa6,0x62,0x60,0xbe,0xda,0x04,0xbd,0x2b,0x86,
+  0xc0,0x35,0xee,0x6f,0xcb,0x3e,0x98,0x33,0x67,0x8e,0xfa,0xc2,0x17,0xbe,0xa0,0xfa,
+  0xf4,0xe9,0xd3,0x21,0xec,0xcd,0xe6,0x52,0x02,0x1a,0xa5,0x10,0x34,0x5c,0x01,0xe8,
+  0xdb,0xb7,0x2f,0x57,0x32,0x00,0x00,0x64,0x56,0x00,0x92,0x6e,0xf8,0xa4,0x35,0xee,
+  0xb2,0xe4,0xd3,0xd2,0xfe,0xe2,0xdf,0xbb,0xbc,0x0a,0xa6,0x17,0x21,0xf9,0xfb,0xd9,
+  0xb3,0x67,0x47,0x85,0x7e,0x86,0x0f,0x1f,0x1e,0x09,0xf8,0x2e,0x5d,0xba,0x74,0xbc,
+  0xc6,0xcd,0x54,0x02,0x4c,0x45,0x20,0xa6,0x9e,0x19,0x01,0x0d,0x57,0x00,0x7a,0xf5,
+  0xea,0xc5,0x95,0x0c,0x00,0x00,0x99,0x58,0xb5,0x6a,0x95,0xd5,0x92,0x77,0xb5,0xa4,
+  0x05,0x6f,0x0a,0x79,0xdb,0xe7,0xb1,0x82,0xe1,0xab,0x06,0x28,0x96,0xbf,0x14,0xfa,
+  0xd9,0x78,0xe3,0x8d,0xd7,0x11,0xfe,0x49,0xeb,0xdf,0x54,0x06,0x4c,0xe1,0xdf,0x96,
+  0x1e,0x80,0x81,0x03,0x07,0x72,0x25,0x03,0x00,0x40,0x4d,0x0a,0x40,0x88,0x32,0x60,
+  0x0a,0x78,0xf3,0xf7,0x69,0x7f,0xdb,0x94,0x85,0x79,0xf3,0xe6,0xa9,0xcf,0x7f,0xfe,
+  0xf3,0x6a,0xec,0xd8,0xb1,0xeb,0x08,0x79,0x69,0x32,0xc4,0x2d,0xcd,0xf4,0x02,0x98,
+  0xc3,0x02,0x8d,0x8a,0x07,0x68,0xb8,0x02,0xb0,0xe1,0x86,0x1b,0x72,0x25,0x03,0x00,
+  0x40,0x26,0x42,0x2c,0xfe,0xb4,0x21,0x80,0xf8,0x33,0xc1,0x15,0x14,0x98,0xf6,0xfb,
+  0xa5,0x4b,0x97,0xaa,0x2f,0x7d,0xe9,0x4b,0x6b,0xb9,0xfd,0x5d,0x82,0x3f,0xf9,0xde,
+  0x36,0x1c,0x60,0xba,0xfd,0xdb,0x26,0x0d,0x70,0x83,0x0d,0x36,0xe0,0x4a,0x06,0x00,
+  0x80,0x4c,0xd6,0x7f,0xf7,0xee,0xdd,0xd7,0x49,0xf7,0x33,0x0b,0xf3,0x98,0x42,0xde,
+  0x95,0xef,0x9f,0x5c,0xce,0xf5,0x3e,0xb9,0x1e,0x09,0xf4,0x93,0x80,0xbf,0x1e,0x3d,
+  0x7a,0x58,0x05,0xbf,0xad,0xb9,0xbc,0x00,0xb6,0xa1,0x80,0x7a,0xd1,0x70,0x05,0x60,
+  0xe8,0xd0,0xa1,0x5c,0xcd,0x00,0x00,0x10,0x2c,0xfc,0x63,0x8b,0x3d,0x6d,0x32,0x9e,
+  0x90,0x7c,0x7f,0x73,0xaa,0x60,0x57,0xc9,0xdf,0xe4,0x3a,0xb7,0xda,0x6a,0x2b,0xb5,
+  0xe7,0x9e,0x7b,0xae,0x35,0xd6,0xef,0x12,0xfa,0xdd,0xba,0x75,0xf3,0x2a,0x02,0x8d,
+  0xcc,0x02,0x28,0x85,0x07,0x40,0x0e,0x46,0x3c,0x9e,0x03,0x00,0x00,0x90,0x26,0xfc,
+  0x93,0xc5,0x78,0x42,0xa6,0xe5,0xf5,0x59,0xf5,0xf1,0x7b,0x9b,0x17,0x21,0xb9,0xcc,
+  0xc1,0x07,0x1f,0xac,0x46,0x8f,0x1e,0x6d,0xb5,0xf8,0x45,0xd8,0xbb,0x9a,0x29,0xfc,
+  0x93,0x81,0x80,0x49,0x45,0xa0,0xde,0xd4,0x25,0x06,0xc0,0xd5,0x31,0xf9,0x5c,0x0e,
+  0x8e,0xd4,0x4b,0x06,0x00,0x00,0x48,0x13,0xfe,0x2b,0x57,0xae,0xb4,0x96,0xf7,0x75,
+  0xa5,0xe7,0xb9,0xc6,0xf1,0x4d,0xcb,0xdf,0x57,0x37,0x40,0xda,0xa7,0x3f,0xfd,0xe9,
+  0xb5,0x84,0x7f,0x52,0x01,0x48,0x0a,0x7b,0x19,0x9a,0x88,0x9b,0x4d,0x09,0x90,0x96,
+  0xcc,0x12,0x68,0x64,0x26,0x40,0xa1,0x0a,0x80,0xab,0xde,0xb1,0xd9,0xc9,0xad,0xb7,
+  0xde,0x9a,0xab,0x1b,0x00,0x00,0xac,0x88,0xe0,0x97,0x96,0x14,0xd8,0xb6,0xbc,0x7f,
+  0x9b,0xd0,0xb7,0x7d,0x66,0x56,0x05,0x34,0x97,0x31,0x97,0x17,0xe1,0xbf,0xfe,0xfa,
+  0xeb,0x7b,0x85,0xbf,0xcf,0x03,0xe0,0x1b,0x02,0xf0,0x19,0xcd,0x79,0x53,0xc8,0x10,
+  0x40,0xda,0xcc,0x47,0xb6,0x65,0x37,0xdb,0x6c,0x33,0xae,0x70,0x00,0x00,0x70,0x0a,
+  0xff,0xa4,0x30,0x37,0x05,0xbb,0xe9,0xaa,0x37,0x95,0x02,0x73,0xd2,0x1f,0xdf,0x94,
+  0xc0,0xc9,0x75,0x1d,0x71,0xc4,0x11,0x1d,0x43,0xd5,0x49,0xe1,0x6f,0x13,0xf4,0x36,
+  0xeb,0xdf,0x14,0xfe,0xb6,0xca,0x80,0x8d,0xb0,0xfe,0x0b,0xf7,0x00,0x84,0x7a,0x01,
+  0xa4,0x18,0xd0,0x76,0xdb,0x6d,0xc7,0x95,0x0e,0x00,0x00,0x6b,0x09,0xff,0x15,0x2b,
+  0x56,0xac,0x25,0xa4,0x6d,0x29,0x7b,0x2e,0x8b,0x3e,0x7e,0x75,0xe5,0xff,0xbb,0xaa,
+  0x07,0xc6,0xef,0x45,0xf8,0x4b,0xa0,0x7a,0x9a,0xf0,0x4f,0x0a,0xfd,0xa4,0xf0,0xb7,
+  0x0d,0x01,0xb8,0x52,0x01,0x1b,0x61,0xfd,0x17,0xe6,0x01,0x70,0x29,0x01,0x69,0x9e,
+  0x01,0x99,0x3a,0xf1,0xc5,0x17,0x5f,0xe4,0x8a,0x07,0x00,0x80,0x48,0xf0,0xc7,0x96,
+  0xbf,0xad,0x5e,0xbf,0x29,0xe4,0x93,0xd6,0xbd,0x6b,0x26,0xc0,0xb4,0x38,0x81,0x78,
+  0xf9,0xfe,0xfd,0xfb,0xab,0x71,0xe3,0xc6,0x75,0x8c,0xf7,0x27,0x23,0xfd,0xe5,0xd5,
+  0x27,0xfc,0x5d,0xe3,0xff,0x69,0x95,0x00,0x1b,0x55,0x08,0xa8,0x6e,0x59,0x00,0xa6,
+  0x86,0x63,0x36,0x29,0xa6,0x30,0x72,0xe4,0x48,0x35,0x6d,0xda,0x34,0xae,0x7c,0x00,
+  0x80,0x36,0x17,0xfe,0xb1,0xe5,0x6f,0x0a,0xef,0xe4,0x54,0xbc,0x49,0xd7,0x7e,0x32,
+  0xed,0x2f,0x29,0xd8,0x4d,0x65,0xc0,0x1c,0x06,0x88,0x3f,0xfb,0xe8,0x47,0x3f,0x1a,
+  0xc5,0xa3,0xf5,0xee,0xdd,0x3b,0xfa,0xcc,0x55,0xdc,0xc7,0x25,0xfc,0xa5,0x26,0x80,
+  0x4d,0x09,0xf0,0x0d,0x01,0x34,0xaa,0x06,0x40,0x21,0x0a,0x80,0x79,0xa0,0x6d,0xd6,
+  0xbe,0xab,0xed,0xb7,0xdf,0x7e,0xea,0xaa,0xab,0xae,0xe2,0xea,0x07,0x00,0x68,0x73,
+  0xe1,0x6f,0x0a,0xe8,0x18,0xd3,0xc5,0xef,0xca,0xdd,0x37,0x2d,0x7e,0x9b,0xe5,0x2f,
+  0x95,0x68,0xc5,0xfb,0x2c,0x01,0x7e,0x49,0x19,0x95,0xac,0xdf,0x9f,0xb4,0xfc,0x63,
+  0x05,0x20,0x4d,0xf8,0xdb,0x02,0x00,0x7d,0xf3,0x00,0x34,0x8a,0xc2,0x3d,0x00,0xae,
+  0x09,0x0f,0x6c,0xf3,0x24,0x0f,0x1b,0x36,0x4c,0x6d,0xb2,0xc9,0x26,0x6a,0xf2,0xe4,
+  0xc9,0xdc,0x05,0x00,0x00,0x6d,0xc6,0xf2,0xe5,0xcb,0xad,0x96,0xbf,0x59,0xac,0x27,
+  0x69,0xf5,0xbb,0x02,0x00,0x6d,0x7f,0xcb,0xfb,0x9e,0x3d,0x7b,0xaa,0xdd,0x76,0xdb,
+  0x4d,0x6d,0xba,0xe9,0xa6,0x91,0x40,0x8e,0x89,0x05,0xb3,0x39,0x93,0x9f,0x2f,0xd5,
+  0xaf,0x1a,0xcb,0xbf,0x0c,0xd6,0x7f,0xa1,0x0a,0x40,0x88,0xf5,0x6f,0x1e,0x04,0x39,
+  0x48,0x07,0x1d,0x74,0x90,0xba,0xfc,0xf2,0xcb,0xb9,0x13,0x00,0x00,0xda,0xd0,0xf2,
+  0x8f,0x05,0xb5,0x6d,0x0c,0xdf,0x66,0xd5,0x27,0x5d,0xff,0xae,0xdf,0x08,0x9b,0x6f,
+  0xbe,0x79,0xe4,0xe6,0x97,0x31,0xfe,0x58,0x71,0x30,0x65,0x51,0x56,0xe1,0x5f,0xcd,
+  0xd8,0x7f,0x59,0x84,0x7f,0x61,0x0a,0x40,0xb2,0x8a,0x92,0xaf,0x99,0x1a,0x91,0xd4,
+  0x58,0x96,0xa1,0x80,0xfb,0xef,0xbf,0x9f,0x3b,0x02,0x00,0xa0,0x4d,0x2c,0x7f,0x69,
+  0xa6,0xf0,0xb7,0xb9,0xf0,0x6d,0xa9,0x7a,0x36,0x17,0xbf,0x2c,0x27,0xc2,0xfe,0x63,
+  0x1f,0xfb,0x58,0x14,0x5f,0x96,0x5c,0x36,0x29,0x84,0x4d,0xcb,0x3c,0xe9,0xf6,0xb7,
+  0x09,0xff,0xf8,0xd5,0x74,0xfb,0x9b,0xc2,0xdf,0x9c,0x19,0xd0,0x55,0xf6,0xb7,0x91,
+  0xc3,0x00,0x0d,0xc9,0x02,0xb0,0x1d,0xf4,0xe4,0x67,0x12,0x88,0x31,0x71,0xe2,0x44,
+  0x35,0x75,0xea,0x54,0xee,0x0c,0x00,0x80,0x36,0x10,0xfe,0xb6,0x2a,0x7d,0x36,0x81,
+  0x6f,0xab,0xe7,0x9f,0xfc,0x3c,0x19,0xd0,0x27,0x42,0xda,0x26,0x83,0xcc,0x99,0xf8,
+  0x5c,0x96,0xbf,0x19,0xf4,0x97,0x96,0xf6,0x67,0x0a,0x7f,0xd3,0xf5,0x6f,0x7a,0xbd,
+  0x1b,0x2d,0xfc,0x0b,0x55,0x00,0x7c,0xd6,0xbe,0x4d,0xeb,0x4a,0xfe,0x2d,0x35,0x97,
+  0xaf,0xbe,0xfa,0xea,0x68,0xca,0x45,0x00,0x00,0x68,0x4d,0xe1,0x2f,0xcf,0xf8,0xa4,
+  0x40,0xf4,0x05,0xf2,0x99,0xc2,0x3f,0x1e,0x02,0x18,0x31,0x62,0x44,0x34,0xb6,0xbf,
+  0xde,0x7a,0xeb,0xad,0xa5,0x0c,0xa4,0xc9,0xa2,0x50,0xe1,0xef,0x52,0x00,0x92,0x9f,
+  0x27,0x27,0xff,0x49,0x5a,0xfd,0xf2,0x5a,0x46,0xe1,0x1f,0x2b,0x00,0x32,0x0b,0x4f,
+  0x97,0xa2,0xad,0xff,0x34,0x97,0x8b,0xa9,0x04,0xc8,0xab,0x1c,0xd4,0xa3,0x8e,0x3a,
+  0x4a,0x5d,0x73,0xcd,0x35,0xce,0x31,0x1d,0x00,0x00,0x68,0x4e,0x96,0x2d,0x5b,0xd6,
+  0xe1,0xf6,0x77,0x4d,0xe2,0x63,0x8b,0xf4,0x4f,0x0a,0x4e,0x91,0x13,0xbb,0xef,0xbe,
+  0x7b,0x14,0x3c,0x2e,0x82,0x37,0x5e,0x26,0x59,0x5d,0xcf,0x74,0xbd,0xdb,0xe4,0x4e,
+  0x48,0x89,0x5f,0x53,0xe0,0xbb,0x6a,0xfd,0xdb,0xc6,0xfb,0xcd,0xc9,0x7e,0xca,0x20,
+  0xfc,0x45,0xf6,0x8b,0x02,0x20,0x67,0xa0,0x57,0x91,0x5b,0xf1,0x79,0x01,0x4c,0x6d,
+  0x29,0xfe,0xbc,0x6f,0xdf,0xbe,0xea,0xc8,0x23,0x8f,0x54,0x37,0xde,0x78,0x23,0x77,
+  0x0b,0x00,0x40,0x8b,0x20,0x56,0x7f,0x72,0xcc,0xdf,0x25,0xf8,0xcd,0xef,0x63,0x8b,
+  0x7f,0x8b,0x2d,0xb6,0xe8,0x08,0xe8,0x4b,0x0e,0x03,0xd8,0x84,0xbd,0x4f,0xf6,0xc8,
+  0x6b,0x72,0xcc,0xdf,0xa7,0x00,0x98,0xef,0x6d,0x75,0xfe,0xcd,0xd9,0xfe,0xca,0x64,
+  0xf5,0x27,0x1d,0x30,0xa2,0x00,0x2c,0x29,0x4a,0x01,0x70,0x45,0xfd,0xbb,0x34,0x2f,
+  0xd3,0x15,0x23,0xef,0x07,0x0d,0x1a,0xa4,0x0e,0x3d,0xf4,0x50,0x75,0xc7,0x1d,0x77,
+  0x70,0xd7,0x00,0x00,0xb4,0x80,0xe5,0x2f,0xcd,0xb4,0xec,0xcd,0xbf,0xcd,0x98,0x80,
+  0x01,0x03,0x06,0x44,0x01,0x7d,0xa3,0x46,0x8d,0x5a,0x6b,0x7d,0xae,0xaa,0x7a,0xa6,
+  0xbc,0x09,0xb5,0xfc,0x43,0x14,0x00,0x97,0xcb,0x3f,0x44,0xf8,0x97,0x48,0x09,0x58,
+  0xd2,0x49,0x1f,0xd8,0x89,0xfa,0xcd,0xd8,0xbc,0xd7,0x1c,0xd7,0x59,0x8e,0x5b,0x3c,
+  0x95,0x63,0x9c,0xea,0x11,0x5f,0x04,0xd2,0x44,0x1b,0x34,0x5b,0xfc,0x5d,0x9c,0x17,
+  0x3a,0x6f,0xde,0x3c,0x75,0xf3,0xcd,0x37,0x33,0x1c,0x00,0x00,0xd0,0xc4,0x96,0xbf,
+  0x3c,0xd7,0x6d,0x81,0x7c,0xb6,0xb2,0xbe,0xf2,0xba,0xe3,0x8e,0x3b,0xa6,0x06,0xf4,
+  0xb9,0x02,0xfb,0x42,0x05,0xbf,0x2d,0xea,0x3f,0xa9,0x00,0xd8,0x94,0x01,0x53,0x59,
+  0x30,0x3d,0xd8,0x4d,0x20,0xfc,0x85,0x49,0xe2,0x01,0x98,0x55,0x84,0x02,0x60,0x3b,
+  0x41,0x3e,0xeb,0xdf,0xd5,0x44,0x81,0xe8,0xd7,0xaf,0x9f,0x1a,0x3f,0x7e,0xbc,0xba,
+  0xed,0xb6,0xdb,0x08,0x0c,0x04,0x00,0x68,0x42,0xe1,0x9f,0x7c,0x76,0xbb,0x66,0xea,
+  0x13,0xa4,0x34,0xbc,0x8c,0xed,0x87,0x06,0xf4,0xf9,0x04,0xbf,0xe9,0x5d,0x76,0x09,
+  0xff,0xa4,0xf5,0x6f,0x53,0x02,0x6c,0x82,0xdf,0x37,0xe6,0x5f,0x52,0xe1,0x2f,0xcc,
+  0x12,0x05,0xa0,0xd0,0xe2,0xfb,0x21,0xc1,0x17,0xe6,0x41,0x95,0x26,0x1e,0x03,0x69,
+  0x49,0x2f,0x82,0x54,0x70,0x3a,0xfa,0xe8,0xa3,0xd5,0x43,0x0f,0x3d,0x44,0x8a,0x20,
+  0x00,0x40,0x93,0x09,0x7f,0x33,0x72,0x3f,0xf9,0x5e,0x5c,0xec,0x12,0xc5,0x3f,0x76,
+  0xec,0xd8,0xcc,0x01,0x7d,0xa6,0x7c,0x49,0x0a,0x64,0xdb,0xf0,0x72,0x9a,0xf0,0x37,
+  0x95,0x00,0xf3,0x7d,0xf2,0x77,0x65,0xad,0xf0,0x17,0xc8,0x34,0x51,0x00,0xa6,0x14,
+  0x29,0xfc,0x6d,0x05,0x81,0x42,0xc6,0x5f,0x62,0x05,0x40,0x5a,0xec,0x05,0x88,0xc7,
+  0x84,0xf6,0xda,0x6b,0xaf,0x68,0xd2,0x20,0x51,0x04,0x00,0x00,0xa0,0xbc,0x2c,0x59,
+  0xb2,0x24,0x72,0xfb,0xbb,0xca,0xf6,0xca,0x74,0xbb,0xfb,0xee,0xbb,0x6f,0x47,0x40,
+  0x5f,0x4c,0x48,0x40,0x9f,0xe9,0x55,0x0e,0xb1,0xf8,0x6d,0xc2,0xdf,0xa5,0x04,0xd8,
+  0x84,0xbe,0xcf,0xe5,0xdf,0x24,0xc2,0x5f,0x98,0x22,0x0a,0xc0,0xa4,0xa2,0x85,0x7f,
+  0xfc,0xea,0xaa,0xb8,0x14,0x0b,0xfa,0x58,0xd3,0x4a,0x0a,0xff,0xd8,0x0b,0x60,0xce,
+  0xfb,0x2c,0x39,0x9f,0xc7,0x1d,0x77,0x9c,0x7a,0xf2,0xc9,0x27,0xd5,0x94,0x29,0x53,
+  0xb8,0xcb,0x00,0x00,0x4a,0x28,0xfc,0xa5,0x25,0x05,0x7e,0x5c,0x89,0x4f,0x82,0xf9,
+  0x0e,0x38,0xe0,0x00,0x6b,0x3d,0xfe,0xac,0x01,0x7d,0xa1,0x42,0x3f,0x44,0x01,0x70,
+  0x7d,0xe7,0xca,0x56,0x2b,0x63,0x85,0xbf,0x40,0xa2,0x18,0x80,0x17,0x8b,0xde,0x8a,
+  0x2b,0x06,0x40,0x84,0x79,0x52,0x09,0x88,0x85,0x7f,0xfc,0x1a,0xbb,0xfe,0x4d,0xe1,
+  0x1f,0x5f,0x48,0xf2,0xf7,0x2e,0xbb,0xec,0xa2,0x76,0xd8,0x61,0x07,0xf5,0xd4,0x53,
+  0x4f,0xa9,0x77,0xde,0x79,0x87,0x3b,0x0e,0x00,0xa0,0xa4,0xc2,0x5f,0x9e,0xed,0x5b,
+  0x6d,0xb5,0x55,0x14,0xcd,0x9f,0x4c,0xdf,0xab,0x25,0xa0,0xcf,0x14,0xfa,0xe6,0xf0,
+  0x72,0x9a,0xf0,0x4f,0x7b,0xef,0xb2,0xf6,0xd3,0xac,0xfe,0x26,0x12,0xfe,0xc2,0x8b,
+  0x92,0x05,0xd0,0x57,0xbf,0x99,0x27,0xca,0x57,0xde,0x6b,0x37,0x85,0x75,0x9c,0x0d,
+  0x60,0x66,0x04,0xc4,0xa5,0x20,0x93,0x59,0x01,0xc9,0x2c,0x81,0x64,0x36,0x40,0xdc,
+  0xe2,0x75,0x24,0xd7,0x2b,0xdb,0x79,0xf5,0xd5,0x57,0xd5,0x84,0x09,0x13,0xb8,0xfb,
+  0x00,0x00,0x1a,0x2c,0xfc,0x63,0x21,0x2f,0xee,0xfd,0x71,0xe3,0xc6,0xa9,0x8d,0x36,
+  0xda,0x68,0x9d,0x89,0x78,0xd2,0xaa,0xf4,0x85,0x08,0x7d,0x5f,0x70,0x5f,0xe8,0xe7,
+  0xae,0x66,0x6e,0xd7,0x54,0x4c,0x92,0x0a,0x4c,0x13,0x09,0x7f,0x09,0xbc,0xe8,0xdf,
+  0x55,0xef,0xec,0x42,0x7d,0x92,0x5e,0xd2,0x7f,0x6c,0x5f,0x84,0xe5,0x6f,0x46,0x70,
+  0xca,0x01,0x8b,0x5d,0x40,0xb1,0x17,0x40,0x4e,0x48,0x2c,0xc4,0x93,0xaf,0xa6,0x07,
+  0xc0,0x9c,0x16,0x52,0x90,0x65,0x93,0x0a,0x87,0x68,0x97,0xdb,0x6c,0xb3,0x8d,0x9a,
+  0x3f,0x7f,0xbe,0x7a,0xf3,0xcd,0x37,0xd5,0xeb,0xaf,0xbf,0xbe,0xd6,0x32,0x00,0x00,
+  0x50,0x1c,0x8b,0x17,0x2f,0x8e,0x8c,0x38,0x99,0xd8,0x6d,0xfb,0xed,0xb7,0x8f,0x9e,
+  0xc9,0xb1,0xa0,0x34,0x27,0xe2,0xa9,0x36,0x8a,0x3f,0x74,0x7c,0xdf,0xf5,0xb9,0xaf,
+  0x0e,0x8d,0xcd,0xcd,0x1f,0x32,0xd6,0xdf,0x24,0xc2,0x5f,0x78,0x49,0xef,0xeb,0xa2,
+  0x78,0x2e,0x80,0x47,0x8b,0x50,0x00,0x92,0x8a,0x80,0xa9,0x04,0x24,0x15,0x80,0xa4,
+  0x12,0x20,0x4d,0xa2,0x41,0xd3,0x84,0xbe,0xa9,0x71,0xc5,0x7f,0xc7,0xd1,0xa4,0xf2,
+  0x2a,0x17,0xdf,0x47,0x3e,0xf2,0x91,0x28,0x7f,0x54,0x7e,0x2b,0xda,0xa8,0xd4,0x12,
+  0x98,0x39,0x73,0x66,0xa4,0x1c,0xc8,0xdf,0x8b,0x16,0x2d,0x8a,0xbc,0x08,0x00,0x00,
+  0x90,0x1d,0xc9,0xcd,0x17,0xeb,0x5e,0xd2,0xb4,0xa5,0x50,0x4f,0x3c,0xac,0x3b,0x66,
+  0xcc,0x98,0x75,0x02,0xc0,0xe3,0xe7,0xb4,0x2f,0x98,0xcf,0x26,0xf4,0x43,0xc7,0xf6,
+  0xb3,0x58,0xf7,0xa6,0x42,0x91,0x45,0xe8,0x9b,0xfd,0x6a,0x32,0xe1,0x1f,0xcb,0xfc,
+  0x8e,0xc9,0x80,0xee,0xd5,0xed,0xf4,0xa2,0x84,0xbf,0x2d,0x8f,0x33,0xf6,0x04,0xc8,
+  0x01,0x4f,0x8e,0xf1,0xc7,0x16,0xbf,0x69,0xfd,0xc7,0xda,0xa3,0x4b,0xa9,0x88,0x3d,
+  0x07,0xf1,0xf6,0x92,0xbf,0x95,0xcf,0x7a,0xf5,0xea,0x15,0x35,0x89,0x38,0x4d,0x42,
+  0x61,0x21,0x00,0x80,0xda,0x8c,0x3b,0xd7,0x73,0x39,0xeb,0xd8,0x7e,0x35,0x42,0x3f,
+  0x8b,0xf0,0xf7,0x59,0xf8,0xb6,0xc0,0x3e,0xdf,0x38,0x7f,0x93,0x09,0x7e,0x95,0x90,
+  0xf9,0x1d,0x0a,0xc0,0x7d,0xba,0xad,0xd0,0xad,0x5b,0x3d,0xbd,0x00,0x49,0x05,0x20,
+  0xf6,0x02,0xd8,0xac,0xfe,0x34,0xc1,0x2f,0x16,0xbc,0xbc,0xc6,0xc2,0x3f,0x56,0x1c,
+  0x64,0xfd,0xe6,0xf0,0x81,0xb9,0xae,0x64,0x10,0x0a,0x00,0x00,0xd4,0xa6,0x04,0xa4,
+  0x29,0x00,0x45,0x8d,0xeb,0xa7,0x09,0xfe,0xb4,0xb9,0x66,0xd2,0x2c,0xfd,0x34,0xa1,
+  0xdf,0xc4,0x56,0x7f,0xcc,0x8a,0x35,0x32,0xff,0x43,0x05,0x40,0x77,0x62,0x81,0x16,
+  0x86,0x0f,0xe8,0xb7,0x07,0xd5,0xc3,0x0b,0x90,0x1c,0x0f,0x32,0xbd,0x00,0x3e,0x05,
+  0xc0,0x54,0x22,0x4c,0x57,0x52,0x32,0x7e,0xc0,0x54,0x02,0x92,0xdb,0xc4,0x03,0x00,
+  0x00,0x90,0xbf,0xe0,0xf7,0x3d,0xa3,0xab,0x4d,0xdd,0x0b,0x15,0xfe,0x79,0x0a,0x7d,
+  0x97,0xb5,0xdf,0xe4,0x86,0xe3,0x03,0x22,0xf3,0x93,0x1e,0x00,0xe1,0xba,0xa2,0x14,
+  0x00,0xd7,0x05,0x13,0x2b,0x02,0x49,0xc1,0xec,0x1a,0xf7,0xf7,0x69,0x94,0x71,0x56,
+  0x40,0x2c,0xf4,0xd3,0x82,0x08,0x6d,0x9e,0x00,0x00,0x00,0xc8,0xd7,0xf2,0x4f,0xab,
+  0xd2,0xe7,0xab,0xce,0x17,0xf2,0x99,0xed,0xf7,0xa1,0xee,0xfd,0xb4,0x71,0x7d,0x57,
+  0x54,0x7f,0x8b,0x78,0x8c,0xaf,0x8b,0xdf,0x24,0x15,0x80,0x9b,0x75,0xfb,0xad,0x6e,
+  0x3d,0x8b,0xf6,0x02,0x24,0x15,0x80,0x64,0x46,0x80,0x2d,0xd8,0xcf,0xb6,0x1e,0xdb,
+  0x05,0x15,0x0b,0x7f,0x5b,0x09,0x61,0x33,0x26,0x20,0x29,0xf4,0x6d,0xdb,0x43,0x21,
+  0x00,0x00,0x70,0x0b,0x7c,0x9f,0xe0,0x0f,0x99,0xfe,0x3d,0xc4,0xd2,0x0f,0x0d,0xea,
+  0x73,0x55,0x02,0x34,0x15,0x90,0x90,0x80,0xbe,0x16,0x16,0xfc,0xc2,0xd2,0x35,0xb2,
+  0x7e,0x6d,0x05,0x40,0x77,0x70,0xae,0x16,0x7c,0x37,0xea,0xb7,0x9f,0xa9,0xe7,0x45,
+  0x94,0x1c,0x0e,0x48,0x56,0x84,0xb2,0x09,0xfd,0x34,0x8d,0x32,0x6e,0x66,0x05,0x41,
+  0x5b,0x31,0xa1,0xa4,0xc7,0x01,0xa1,0x0f,0x00,0x50,0x9b,0xf5,0x1f,0x22,0xfc,0x43,
+  0x2d,0xfe,0x50,0x05,0x20,0x34,0x65,0xcf,0x15,0xd0,0x67,0xee,0xbb,0x4d,0x3e,0xb5,
+  0x60,0x8c,0xd8,0x8d,0x22,0xeb,0x6d,0x1e,0x00,0xe1,0x8a,0x22,0x15,0x80,0x64,0x59,
+  0x60,0x53,0x01,0x08,0xb1,0xfa,0x4d,0x05,0x20,0xbe,0x10,0xa4,0x30,0x50,0x7c,0xb1,
+  0x88,0x27,0x20,0xa9,0x00,0xc4,0x05,0x82,0x4c,0x4f,0x80,0xcb,0x0b,0x80,0x22,0x00,
+  0x00,0x10,0x26,0xf8,0x93,0xcf,0xe7,0xf8,0x79,0x6e,0x7b,0x4e,0xa7,0x59,0xfe,0x21,
+  0x95,0xf8,0xb2,0x8c,0xed,0xdb,0x04,0x7f,0x9b,0x5a,0xfb,0x36,0xae,0x48,0xfe,0xd1,
+  0xd5,0x38,0xb9,0x8f,0x68,0x01,0xf8,0x8c,0x7e,0xbb,0x73,0x3d,0x95,0x00,0x33,0x1e,
+  0x20,0x4d,0x01,0x48,0x5e,0x54,0x22,0xf8,0x93,0x43,0x00,0xd2,0x92,0x4a,0x80,0x19,
+  0x0b,0x10,0x12,0x0f,0x80,0x22,0x00,0x00,0xa0,0x52,0x2d,0x61,0x5f,0xd0,0x5f,0x16,
+  0xb7,0xbf,0xad,0xde,0x7e,0x88,0x9b,0xbf,0xd6,0x28,0xfe,0x36,0x12,0xfa,0x31,0xcf,
+  0x88,0x8c,0x77,0x2a,0x00,0x6b,0xb8,0x58,0xb7,0xbf,0x16,0x7d,0x31,0x25,0x95,0x80,
+  0x38,0x70,0xcf,0xa6,0x04,0xa4,0xb9,0x95,0xe2,0x0b,0x23,0x16,0xfe,0xb1,0xe0,0x4f,
+  0x2a,0x00,0xe6,0x9c,0x02,0xc4,0x02,0x00,0x00,0x54,0x2f,0xfc,0x6d,0x82,0xdf,0xe6,
+  0xa5,0xb5,0x4d,0xc9,0x9b,0xc5,0xfd,0x6f,0x2b,0xd4,0x53,0x6d,0x40,0x5f,0x9b,0x5a,
+  0xfb,0x36,0xd9,0xbe,0xf6,0x79,0xb4,0x08,0x3d,0x91,0xc2,0x32,0x41,0xd0,0xd6,0x45,
+  0xee,0x89,0x4d,0x00,0x27,0x85,0x74,0x52,0x80,0x27,0x85,0x7a,0x52,0xd8,0xdb,0x9a,
+  0x6d,0x26,0x41,0xdf,0x30,0x80,0x29,0xe8,0x11,0xfc,0x00,0x00,0x6e,0x45,0xc0,0xa7,
+  0x00,0x84,0xa6,0xfa,0xb9,0xac,0x7e,0x57,0x50,0x1f,0x01,0x7d,0x55,0x23,0x13,0xe4,
+  0x6c,0xa7,0xfb,0xbe,0x3a,0xd5,0x03,0x20,0x0b,0x68,0x01,0xf8,0x3d,0xfd,0xf6,0x86,
+  0x7a,0x79,0x01,0x92,0xd3,0x05,0x27,0x3d,0x01,0x3e,0xf7,0x92,0x79,0x21,0xb9,0x14,
+  0x80,0x90,0x79,0x05,0xd2,0x84,0x3e,0x0a,0x01,0x00,0x60,0xf9,0xfb,0x3d,0x00,0x69,
+  0x41,0xda,0x21,0x19,0x00,0xa1,0x82,0x9f,0x80,0xbe,0xcc,0x9c,0x67,0x0a,0x7f,0xab,
+  0x07,0x20,0x21,0xf4,0xee,0xd7,0x2f,0xfb,0x16,0xbd,0x57,0x36,0x4f,0x40,0xb2,0x14,
+  0x70,0xb2,0x99,0xc2,0xdd,0xf4,0x0e,0xf8,0x84,0x7f,0xa8,0x02,0x80,0xc0,0x07,0x00,
+  0xc8,0xc7,0x03,0x10,0x32,0x6d,0xaf,0x4d,0xf0,0x63,0xed,0xe7,0x86,0x14,0xfe,0xd9,
+  0xcf,0x7a,0x4e,0x53,0x04,0xf3,0x96,0xfa,0xe5,0x05,0xdd,0xba,0x37,0x4a,0x09,0xf0,
+  0x29,0x02,0x2e,0xa5,0xc0,0x36,0xa3,0xa0,0x2d,0x06,0x00,0xe1,0x0f,0x00,0x50,0xbd,
+  0x12,0x90,0x25,0x08,0x30,0xed,0x35,0x6b,0x3d,0x7e,0xdb,0xf6,0x11,0xfa,0x56,0x96,
+  0xeb,0xb6,0xbd,0x3e,0x26,0xaf,0xda,0xbe,0xec,0x9a,0x72,0xa2,0x5f,0xd5,0xc2,0xf0,
+  0x12,0xfd,0xf6,0x5b,0xf5,0xb8,0xa8,0x5c,0x75,0xf9,0x5d,0x5a,0x5f,0x72,0xb8,0x20,
+  0xce,0xff,0x77,0x09,0xfe,0x34,0xeb,0x1f,0xe1,0x0f,0x00,0x50,0x9b,0x12,0x10,0x5a,
+  0xf3,0x3f,0x8f,0x2a,0x7d,0x58,0xfb,0x99,0xb8,0xc4,0x25,0xfc,0x53,0x3d,0x00,0x6b,
+  0x04,0x62,0x6f,0xfd,0xf2,0x6f,0xdd,0xc6,0xd4,0x6b,0x6f,0x6d,0xc1,0x79,0xa6,0xe5,
+  0xee,0x12,0xf0,0x69,0x82,0x1f,0xf7,0x3f,0x00,0x40,0xbe,0xc2,0x3f,0xab,0x12,0xe0,
+  0x52,0x0c,0xd2,0x52,0xf8,0xb0,0xf6,0xab,0x66,0x8a,0x6e,0xdb,0xe8,0x63,0xb4,0xb8,
+  0x2a,0x05,0x60,0x8d,0x40,0xdc,0x5d,0xbf,0x3c,0xac,0x0a,0x9c,0x29,0x30,0x4d,0x09,
+  0x48,0x2a,0x03,0xe6,0xd0,0x80,0x6b,0x0a,0x61,0x53,0xe8,0x23,0xfc,0x01,0x00,0x1a,
+  0xa7,0x04,0xd8,0xc6,0xf3,0xb3,0x58,0xfb,0x04,0xf4,0x65,0x46,0x66,0xfc,0xdb,0x4b,
+  0x1f,0xa7,0x27,0x52,0xcf,0x65,0xa0,0x40,0xfe,0x9a,0xb2,0xe4,0x10,0xd6,0x43,0x09,
+  0x08,0x55,0x04,0x5c,0x02,0xdf,0x57,0xfc,0x27,0x24,0x0b,0x00,0x00,0x00,0x94,0x55,
+  0xf0,0xdb,0x2c,0x74,0x9b,0x60,0x77,0x09,0x7c,0x57,0x34,0x3f,0xd6,0x7e,0x4d,0x9c,
+  0xad,0x8f,0xd7,0x25,0xde,0xf3,0x98,0x41,0x20,0xdf,0xa6,0x5f,0x0e,0xab,0x77,0x2f,
+  0x4c,0x45,0x20,0x4d,0x19,0x70,0x29,0x07,0xb6,0xe5,0x6d,0x42,0x1f,0x25,0x00,0x00,
+  0xa0,0x3a,0x0f,0x80,0xcb,0x13,0x10,0xda,0x6c,0xeb,0x43,0xf0,0x57,0xc5,0xed,0xfa,
+  0x98,0xfd,0x47,0xd0,0xb9,0xcc,0x20,0x88,0x07,0xeb,0x97,0x27,0x75,0x1b,0xdb,0x88,
+  0x1e,0xf9,0x3c,0x02,0x2e,0xa5,0xc0,0xb5,0x5c,0x9a,0xd0,0x47,0x11,0x00,0x00,0x70,
+  0x0b,0x7e,0x97,0x32,0x90,0x96,0x93,0x4f,0x69,0xde,0xba,0x30,0x49,0xb7,0xdd,0xf4,
+  0xf1,0x9b,0x93,0xab,0x02,0xb0,0x46,0x30,0x4a,0x30,0xe0,0x63,0xba,0x0d,0x6b,0x54,
+  0xef,0x5c,0x8a,0x80,0xcd,0x43,0x90,0xf6,0x19,0x02,0x1f,0x00,0x20,0x3f,0x85,0x20,
+  0x64,0x58,0xc0,0xb5,0x1c,0x82,0x3f,0x17,0x66,0xe8,0x36,0x4e,0x1f,0xc3,0x29,0xc1,
+  0xe7,0xb0,0x0a,0x01,0xbc,0xbd,0x7e,0x79,0x48,0xb7,0x01,0x8d,0xec,0xa9,0x4b,0x88,
+  0xa7,0x59,0xf9,0xa1,0x01,0x7f,0x28,0x04,0x00,0x00,0x7e,0x0f,0x80,0xcb,0x13,0xe0,
+  0x13,0xf0,0x04,0xf5,0xe5,0xce,0x3c,0xdd,0xf6,0xd6,0xc7,0xf1,0x85,0x4c,0xe7,0xb4,
+  0x4a,0xe1,0xbb,0xb7,0x7e,0xf9,0xbf,0xba,0xf5,0x2c,0x43,0xcf,0x7d,0x16,0x7d,0x88,
+  0xe0,0x47,0xe8,0x03,0x00,0xd4,0xa6,0x0c,0xa4,0x59,0xf3,0x08,0xfd,0xc2,0x58,0xaa,
+  0xdb,0xc1,0xfa,0x78,0x3e,0x94,0xf9,0x3c,0xd6,0x20,0x74,0x45,0x09,0xb8,0xb5,0xd1,
+  0x9e,0x80,0x2c,0xc2,0x3c,0x54,0xc8,0xa3,0x0c,0x00,0x00,0x84,0x7b,0x00,0xb2,0x2a,
+  0x07,0x90,0xab,0xe5,0x7f,0x78,0x35,0xc2,0xbf,0x26,0x05,0x60,0x8d,0xa0,0xdc,0x7e,
+  0x8d,0x27,0x60,0x58,0x33,0x1d,0x31,0x04,0x3c,0x00,0x40,0x63,0x14,0x04,0xc8,0x8d,
+  0x19,0x6b,0x2c,0xff,0x17,0xaa,0x3e,0x67,0x39,0x08,0x53,0x09,0x0c,0xbc,0x47,0x35,
+  0x28,0x3b,0x00,0x00,0x00,0xa0,0xcd,0x90,0x68,0xff,0x83,0xb2,0x04,0xfc,0xd9,0xe8,
+  0x9c,0x83,0xd6,0x27,0x3b,0xb0,0x9b,0x6e,0xb7,0x73,0x4e,0x00,0x00,0x00,0x0a,0x45,
+  0x64,0xed,0x6e,0xb5,0x0a,0xff,0x5c,0x14,0x80,0x35,0x4a,0xc0,0x9c,0x35,0x85,0x07,
+  0xce,0x56,0x1f,0x96,0x20,0x04,0x00,0x00,0x80,0xfc,0x10,0xd9,0x2a,0x15,0xfe,0xfe,
+  0x23,0x34,0xcf,0xdf,0x2b,0xbb,0xf3,0xde,0xc3,0x35,0x73,0x07,0x5c,0xa3,0xea,0x38,
+  0x81,0x10,0x00,0x00,0x40,0x0b,0x23,0xd6,0xfe,0x09,0xbe,0xda,0xfe,0x0d,0xf1,0x00,
+  0x18,0xde,0x00,0xd9,0xc1,0x6d,0x74,0xfb,0x89,0xfa,0x70,0x2e,0x62,0x00,0x00,0x00,
+  0xc8,0xce,0xf2,0x35,0xb2,0x74,0x9b,0xbc,0x85,0x7f,0x21,0x1e,0x00,0xc3,0x1b,0xb0,
+  0xa5,0x7e,0xb9,0x4c,0xb7,0x7d,0x39,0x8f,0x00,0x00,0x00,0xc1,0x3c,0xa0,0xdb,0x57,
+  0xb4,0xe0,0x7f,0xb5,0xa8,0x0d,0x74,0x2e,0x72,0xef,0x65,0xc7,0x75,0xdb,0x4f,0xbf,
+  0x3d,0x5a,0xb7,0x09,0x9c,0x4f,0x00,0x00,0x80,0x54,0x44,0x56,0x1e,0x2d,0xb2,0xb3,
+  0x48,0xe1,0x5f,0xb8,0x07,0xc0,0xf0,0x06,0x88,0xb2,0x31,0x5e,0x7d,0x18,0x28,0xb8,
+  0x33,0xe7,0x18,0x00,0x00,0xa0,0x83,0x67,0x74,0xbb,0x58,0xb7,0xeb,0xb5,0xe0,0x5f,
+  0x5d,0x8f,0x0d,0x36,0xa4,0x72,0x83,0x56,0x06,0xf6,0xd4,0x2f,0xa7,0xea,0x76,0x94,
+  0x2a,0x49,0x39,0x61,0x00,0x00,0x80,0x3a,0x23,0x65,0x7c,0x6f,0xd4,0xed,0x0a,0x2d,
+  0xf4,0x1f,0xa9,0xf7,0xc6,0x1b,0x5a,0xba,0x49,0x2b,0x02,0x83,0xf4,0xcb,0x11,0xba,
+  0x1d,0xab,0x3e,0x8c,0x13,0xe8,0xc6,0xf5,0x00,0x00,0x00,0x2d,0x8c,0xa4,0xf3,0xc9,
+  0xf8,0xfe,0x75,0xba,0xdd,0xac,0x05,0xff,0xdc,0x46,0xed,0x48,0x69,0x6a,0x37,0x6a,
+  0x65,0xa0,0x9f,0x7e,0x39,0x40,0xb7,0xfd,0x75,0xdb,0x43,0xb7,0x6d,0x55,0xc1,0x31,
+  0x0a,0x00,0x00,0x00,0x05,0x23,0xee,0xfc,0x97,0x74,0x7b,0x54,0xb7,0xfb,0x74,0xbb,
+  0x57,0x0b,0xfd,0x05,0x65,0xd8,0xb1,0xd2,0x16,0x6f,0xd6,0x0a,0x41,0x5f,0xf5,0x61,
+  0x3a,0xe1,0x76,0xea,0xc3,0x32,0xc3,0x52,0x57,0x60,0xa4,0x6e,0xeb,0xe9,0x36,0x58,
+  0xb7,0x5e,0xba,0x75,0xd7,0xad,0x0b,0xd7,0x17,0x00,0x00,0x34,0x80,0x55,0xea,0xc3,
+  0x54,0xbd,0x25,0xba,0x49,0x71,0x9e,0x59,0xba,0x4d,0x53,0x1f,0xe6,0xed,0x4b,0xb9,
+  0xde,0x17,0x45,0xf8,0x6b,0x81,0xbf,0xa8,0x8c,0x3b,0xff,0xff,0x00,0xa9,0xd9,0x66,
+  0x33,0x79,0x3c,0x5d,0x0d,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,
+  0x82,
+  
+};
diff --git a/tools/printer-lg.png b/tools/printer-lg.png
new file mode 100644 (file)
index 0000000..439c59c
Binary files /dev/null and b/tools/printer-lg.png differ
index 95c42c5c966650f8a7d1055db8a995d27ee4ae2a..192b1fd6b461b551fe7269f0fca04c8fa6e25e88 100644 (file)
@@ -2,304 +2,450 @@ static const unsigned char printer_png[] =
 {
   0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,
   0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x08,0x06,0x00,0x00,0x00,0xc3,0x3e,0x61,
-  0xcb,0x00,0x00,0x12,0x8c,0x49,0x44,0x41,0x54,0x78,0x01,0xec,0xd5,0x01,0x44,0x2c,
-  0x51,0x14,0xc6,0xf1,0xcf,0x06,0x10,0x25,0x45,0xa9,0x01,0x12,0x48,0x02,0x01,0x10,
-  0x64,0x42,0x28,0x28,0x03,0xa1,0x24,0x01,0xc5,0x14,0x04,0x29,0x50,0x29,0x54,0x01,
-  0x50,0x51,0xa0,0xc8,0xc0,0x50,0xa1,0x28,0x80,0x0a,0x02,0x01,0xad,0x10,0xb2,0xc4,
-  0x32,0xbb,0xcb,0xff,0xed,0xbb,0x76,0xc7,0x1a,0xdb,0xbe,0x17,0xc0,0x6d,0x7e,0x1c,
-  0xec,0x39,0xe3,0x0c,0xf7,0xdb,0xbb,0xab,0x46,0x00,0x07,0xf0,0x81,0x10,0xc8,0x02,
-  0x11,0x16,0xb0,0x5c,0x54,0xc9,0x2a,0xac,0x64,0xe7,0xe8,0xa7,0x80,0x6e,0xe0,0x18,
-  0x28,0x61,0x3b,0xfb,0x95,0x2a,0x59,0x76,0xff,0x6f,0xf8,0x2e,0x90,0xc3,0x36,0xa9,
-  0x1c,0xe0,0xaa,0x11,0x60,0xce,0xea,0x5b,0x9f,0x2a,0x01,0x73,0x8d,0x6e,0x7e,0x09,
-  0xdb,0xa5,0x4a,0x80,0x5b,0xef,0x3f,0x3f,0xc7,0x6f,0x91,0xca,0x01,0xdd,0xaa,0x02,
-  0x8e,0x49,0x18,0x1c,0x1c,0xa4,0xa7,0xa7,0x87,0xf5,0xf5,0x75,0xac,0x94,0x3a,0x56,
-  0x59,0x06,0x70,0x24,0x79,0x4a,0xc8,0x66,0xb3,0xa6,0x3e,0x3f,0x3f,0x65,0xa5,0x94,
-  0x67,0xb2,0x07,0x7c,0xea,0x58,0x5e,0x5e,0x66,0x7e,0x7e,0x9e,0xf3,0xf3,0x73,0x52,
-  0xd6,0xf2,0x05,0x84,0xa4,0x7e,0xab,0x30,0x23,0xa9,0x5f,0x75,0x1c,0x1c,0x1c,0x68,
-  0x73,0x73,0x53,0xb7,0xb7,0xb7,0xaa,0xf5,0xfc,0xfc,0x6c,0xfa,0x5b,0x5b,0x5b,0x2a,
-  0x16,0x8b,0xfa,0xf8,0xf8,0xd0,0xc9,0xc9,0x89,0xa6,0xa7,0xa7,0x35,0x35,0x35,0xa5,
-  0xed,0xed,0x6d,0xbd,0xbf,0xbf,0xeb,0x5f,0x3b,0x01,0x3d,0x3c,0x3c,0x68,0x6d,0x6d,
-  0x4d,0x63,0x63,0x63,0x5a,0x5a,0x5a,0x52,0x10,0x04,0x6a,0xe4,0xed,0xed,0x4d,0xbb,
-  0xbb,0xbb,0xf2,0x3c,0x4f,0x13,0x13,0x13,0xda,0xd8,0xd8,0xd0,0xeb,0xeb,0xab,0x6a,
-  0xed,0xed,0xed,0x99,0x77,0x5c,0x5d,0x5d,0xe9,0x3b,0x37,0x37,0x37,0xe6,0x99,0xa3,
-  0xa3,0x23,0x25,0x5d,0x5e,0x5e,0xca,0xf7,0x7d,0x8d,0x8e,0x8e,0x6a,0x61,0x61,0x41,
-  0xa7,0xa7,0xa7,0x02,0x64,0xa9,0x7e,0x01,0x11,0x75,0xb4,0xb7,0xb7,0x23,0x89,0xc5,
-  0xc5,0x45,0x6a,0xed,0xef,0xef,0x23,0xc9,0xd4,0xd3,0xd3,0x13,0x9d,0x9d,0x9d,0x48,
-  0xaa,0x2d,0xd3,0x2b,0x87,0xdb,0x70,0xe7,0xca,0xca,0x0a,0x92,0x48,0xd6,0xec,0xec,
-  0x2c,0x85,0x42,0x81,0xa4,0x30,0x0c,0x69,0x6b,0x6b,0x23,0xf9,0x7c,0x4b,0x4b,0x8b,
-  0x99,0x55,0xb9,0xae,0x6b,0xfa,0xbd,0xbd,0xbd,0x7c,0xa7,0xaf,0xaf,0x0f,0x49,0x94,
-  0x03,0xa6,0xea,0xeb,0xeb,0x8b,0xc9,0xc9,0x49,0xd3,0x4f,0xd6,0xf8,0xf8,0x38,0xf9,
-  0x7c,0x1e,0x0b,0x45,0x22,0xf6,0xf3,0x2f,0x40,0x57,0x57,0x17,0x99,0x4c,0x86,0xa1,
-  0xa1,0x21,0x73,0x98,0xc3,0xc3,0xc3,0xf1,0xcc,0x71,0x1c,0xa2,0x28,0xaa,0xbb,0xb3,
-  0xb5,0xb5,0x15,0x49,0x7f,0x3f,0x9b,0x43,0x9f,0x99,0x99,0xa9,0xce,0x4c,0x1d,0x1e,
-  0x1e,0x52,0xeb,0xe5,0xe5,0x85,0xa6,0xa6,0x26,0x33,0x1b,0x19,0x19,0x21,0x08,0x02,
-  0x2e,0x2e,0x2e,0x18,0x18,0x18,0x30,0xbd,0x8e,0x8e,0x8e,0x38,0xa0,0xb3,0xb3,0xb3,
-  0x78,0xcf,0xfd,0xfd,0x3d,0x49,0x77,0x77,0x77,0xf1,0xfc,0xf1,0xf1,0x91,0x2a,0xcf,
-  0xf3,0x4c,0xaf,0xb9,0xb9,0x99,0x9d,0x9d,0x1d,0xae,0xaf,0xaf,0x59,0x5d,0x5d,0x8d,
-  0xdf,0x5b,0xfe,0xc5,0xc3,0x46,0x7f,0xd8,0x33,0x03,0x8f,0xda,0x82,0x20,0x8c,0x7f,
-  0x3d,0xb7,0xaa,0x22,0x88,0x50,0x54,0x49,0x52,0x10,0x08,0x55,0x55,0x10,0x08,0x22,
-  0x80,0x0a,0xa8,0xa0,0x84,0x82,0x42,0xe8,0x9f,0xa8,0x92,0x84,0x90,0x00,0xa9,0x28,
-  0x54,0x14,0x92,0x84,0x40,0x44,0x29,0x52,0xa9,0x54,0x29,0x85,0x6a,0xde,0x67,0x98,
-  0x63,0x9d,0xb7,0x75,0xea,0x7a,0x91,0xea,0xc7,0x70,0xdf,0xee,0xdb,0xdd,0x75,0x76,
-  0x76,0x67,0xbe,0x29,0x6e,0x07,0xb0,0xdb,0xb7,0xb8,0xb8,0x28,0x0e,0xea,0x08,0xd6,
-  0x3f,0x3a,0x3a,0xea,0x9b,0x53,0xad,0xb9,0xb9,0x59,0xee,0xef,0xef,0xc5,0xd8,0xdb,
-  0xdb,0x93,0x8c,0x8c,0x8c,0xc0,0x79,0x18,0x5e,0xc4,0x68,0x6c,0x6c,0xd4,0xf6,0xd2,
-  0xd2,0x52,0x79,0x7a,0x7a,0x12,0x83,0xa1,0x46,0x92,0x92,0x92,0xb4,0x8f,0xe1,0x45,
-  0xdb,0x1e,0x1e,0x1e,0x74,0x5f,0x00,0xa4,0xb3,0xb3,0x53,0xc2,0x30,0x54,0x69,0x5f,
-  0x79,0x79,0xb9,0x18,0x9b,0x9b,0x9b,0x92,0x90,0x90,0x20,0x00,0xd4,0x81,0x5c,0xba,
-  0xba,0xba,0xcc,0xd9,0x6d,0x4f,0xc6,0xaf,0x03,0x6c,0x6f,0x6f,0x4b,0x98,0xe3,0xe3,
-  0xe3,0xe0,0xd6,0xb4,0xb4,0xb4,0x78,0xe7,0x6c,0x6a,0x6a,0x92,0x97,0x97,0x17,0x09,
-  0xa1,0xaa,0xc3,0xe6,0x66,0x6c,0xd7,0xb6,0xf3,0xf3,0xf3,0xa0,0x8d,0xf9,0x85,0x84,
-  0xa9,0xaa,0xaa,0xd2,0xbe,0xb6,0xb6,0x36,0x31,0x3a,0x3a,0x3a,0x82,0x97,0xe6,0xf1,
-  0xf1,0x51,0x8c,0x9b,0x9b,0x1b,0x49,0x4b,0x4b,0xd3,0xbe,0xb1,0xb1,0xb1,0xf0,0x21,
-  0xab,0x03,0x86,0xf7,0xc5,0x5c,0x22,0x58,0x7f,0x7f,0x7f,0xdf,0xe9,0xf9,0x75,0x00,
-  0xfd,0xa0,0x3e,0x72,0x73,0x73,0xb5,0x9f,0x87,0x13,0x39,0xa7,0xcb,0xc4,0xc4,0x84,
-  0xcd,0xad,0x1f,0x9e,0xe8,0x33,0x6e,0x6d,0x65,0x65,0x65,0xc2,0xe4,0xcf,0x35,0xc9,
-  0xcc,0xcc,0xd4,0xbe,0xfa,0xfa,0x7a,0x31,0xdc,0x31,0x33,0x33,0x33,0x62,0x8c,0x8c,
-  0x8c,0xd8,0x33,0xaf,0x31,0xdf,0x68,0x68,0x68,0xd0,0xf6,0xc4,0xc4,0xc4,0x7f,0xe6,
-  0xaf,0xae,0xae,0x0e,0xe6,0x5a,0x5d,0x5d,0x15,0x63,0x7a,0x7a,0x5a,0xd7,0x8c,0xb2,
-  0x9e,0x9e,0x1e,0xf9,0xca,0xfc,0xc1,0x27,0xc0,0x83,0x06,0xc1,0xc5,0xc5,0x45,0x5c,
-  0xe3,0xdc,0xb1,0xbc,0x75,0xae,0x02,0x01,0x63,0xbf,0x6b,0xb8,0xbc,0xbc,0x04,0x51,
-  0x35,0x62,0x54,0x56,0x56,0xa2,0xa8,0xa8,0x08,0xc4,0xcd,0xf4,0x31,0x3e,0x3e,0x0e,
-  0xa2,0x6a,0x85,0x4e,0x00,0xe2,0xae,0xa1,0xaa,0x26,0x3c,0xff,0xfa,0xfa,0x3a,0x0c,
-  0x77,0x8d,0x83,0x83,0x03,0xd0,0x21,0x22,0x6d,0x6b,0x6b,0x0b,0x5f,0x99,0x4f,0x71,
-  0x80,0xdb,0xdb,0x5b,0x10,0xb0,0x94,0x1c,0xd7,0x38,0x77,0x2c,0x13,0x3c,0x18,0x94,
-  0x8c,0x58,0x59,0x59,0xf1,0xda,0xe4,0xe4,0x24,0x5c,0x18,0x12,0x40,0xc0,0x1c,0x05,
-  0x67,0x67,0x67,0xea,0x3c,0x76,0x18,0xed,0xed,0xed,0x30,0xdc,0x35,0x0a,0x0a,0x0a,
-  0xbc,0x73,0x9b,0xf1,0x46,0x83,0xd8,0x1c,0x3a,0x67,0x84,0xa9,0x44,0xfe,0xca,0xc4,
-  0xf0,0x9f,0x61,0x92,0x86,0x93,0x93,0x93,0xe0,0x83,0x7e,0x84,0xa3,0xa3,0x23,0x18,
-  0x36,0x96,0x89,0x1f,0x0c,0x11,0xb1,0x43,0x88,0xa4,0xb5,0xb5,0x15,0x83,0x83,0x83,
-  0xba,0x1f,0x6a,0x79,0xbd,0xb1,0x04,0x54,0x0e,0xa0,0x6a,0x81,0x61,0x6b,0x6c,0x6c,
-  0x6c,0xe8,0xbe,0x2b,0x2a,0x2a,0x90,0x9c,0x9c,0x8c,0x28,0x18,0x7a,0xd4,0xe2,0xe0,
-  0xfb,0xbc,0x00,0xd4,0xeb,0x08,0x33,0x3f,0x3f,0x0f,0x66,0xf7,0x20,0x60,0x0e,0x10,
-  0x3d,0xce,0x81,0xf1,0x3a,0x38,0xfc,0xec,0xec,0x6c,0x80,0x50,0x11,0x20,0x3f,0x3f,
-  0x1f,0x20,0xc3,0xc3,0xc3,0xb8,0xbe,0xbe,0xc6,0x7b,0xc8,0xcb,0xcb,0x03,0x65,0x29,
-  0x40,0x98,0xf0,0x61,0x6a,0x6a,0xca,0x77,0xfb,0x95,0x9a,0x9a,0x1a,0x80,0x30,0x61,
-  0x04,0x25,0x20,0xe2,0xe0,0x67,0x3a,0x40,0x6d,0x6d,0xad,0x1b,0xe3,0xb4,0x52,0xc7,
-  0x02,0x0f,0x88,0x1e,0x1a,0x55,0x00,0x7c,0x30,0x19,0x43,0x7f,0x7f,0xbf,0xeb,0x08,
-  0x5a,0x99,0x63,0x61,0x09,0x20,0x03,0x03,0x03,0xa0,0x2c,0x83,0x5b,0xdd,0x23,0xfa,
-  0x94,0xb3,0x28,0x83,0xc3,0xc3,0x43,0x18,0xcf,0xcf,0xcf,0x3a,0x6e,0x69,0x69,0x09,
-  0x61,0x28,0xf9,0x00,0xb2,0xbb,0xbb,0x8b,0xab,0xab,0x2b,0xa4,0xa6,0xa6,0xfa,0xf6,
-  0xa4,0xe1,0x82,0xb2,0x10,0x20,0x43,0x43,0x43,0xea,0x30,0x22,0x02,0x83,0x4a,0x04,
-  0x73,0x73,0x73,0xfa,0x42,0x7c,0x3b,0xe2,0x55,0x01,0xae,0x15,0x17,0x17,0x0b,0x6f,
-  0x91,0xa4,0xa7,0xa7,0xeb,0xbf,0xf9,0x84,0xca,0xec,0xec,0xec,0x6b,0x73,0x9a,0x69,
-  0x36,0x5e,0x57,0x57,0xa7,0x55,0x3b,0x6b,0xa3,0x53,0x79,0x2b,0x81,0xdd,0xdd,0xdd,
-  0xc1,0xff,0xa1,0xf6,0x57,0x45,0xc0,0xa7,0xdc,0xd6,0xd4,0xdf,0x61,0xee,0xee,0xee,
-  0x74,0x0d,0x00,0x8e,0x54,0xf4,0xb3,0xb3,0xb3,0x23,0x39,0x39,0x39,0x6e,0x91,0x4b,
-  0x55,0x4c,0x61,0x61,0x61,0xd0,0xb6,0xb0,0xb0,0xf0,0x73,0x64,0x60,0x56,0x56,0x96,
-  0x00,0x90,0xde,0xde,0xde,0x57,0x1d,0x60,0x79,0x79,0x59,0x4a,0x4a,0x4a,0xdc,0x43,
-  0xd5,0x0f,0xc6,0xcc,0xf9,0x2d,0xa7,0x52,0xdd,0xdd,0xd7,0xd7,0x27,0x29,0x29,0x29,
-  0xc1,0x38,0xfe,0x16,0x3e,0xcf,0x56,0x3d,0xf4,0xc2,0x3a,0xbd,0xeb,0x2c,0x6a,0xb1,
-  0x58,0x4c,0x0b,0x44,0x7c,0x79,0x44,0xf1,0x17,0x7e,0xd4,0xd6,0xd6,0xd6,0xe4,0x2d,
-  0xf8,0xa7,0x6f,0xad,0x5d,0x58,0xad,0xc0,0x8c,0xb1,0x5e,0x25,0x1d,0x93,0xba,0x6f,
-  0xea,0x00,0x1f,0xc0,0x57,0x07,0x38,0x3d,0x3d,0xd5,0x43,0xe7,0x13,0x29,0xca,0x3b,
-  0x5f,0x15,0xde,0x74,0x2d,0xc7,0xd2,0xf4,0xf7,0x7b,0x61,0x1e,0x20,0x4c,0xda,0x74,
-  0xdc,0x5f,0x76,0xce,0x40,0x23,0xde,0x26,0x0a,0xe3,0x07,0xdd,0x40,0xd7,0x51,0xa1,
-  0x44,0x00,0x54,0x20,0x29,0x50,0x04,0xd0,0x05,0xa4,0x1b,0x88,0x80,0x82,0xa8,0x00,
-  0xba,0x82,0x84,0x2e,0x23,0x21,0x20,0x52,0x74,0x2d,0xf3,0xfd,0x3c,0x3c,0x2c,0x8d,
-  0xf5,0x1d,0xbb,0xfd,0x8d,0xed,0xfc,0x18,0x6f,0x6f,0xb3,0xdb,0xf6,0xce,0x9c,0x9d,
-  0x99,0x39,0xe7,0x3c,0x23,0x47,0xcf,0x9c,0x61,0x5a,0x69,0x9f,0x9f,0x9f,0x0d,0x83,
-  0x91,0xb7,0x71,0x3a,0x65,0x00,0xd3,0x48,0x39,0x82,0x8a,0xa1,0x1d,0x41,0x45,0xed,
-  0x02,0x8a,0x32,0x00,0x56,0xed,0x71,0x7b,0x7b,0x1b,0x77,0x77,0x77,0xc1,0x62,0x29,
-  0x32,0x5c,0x5d,0x5d,0xe9,0xbd,0xf8,0xd8,0xa3,0x18,0x84,0x56,0xfc,0x69,0xa2,0xf5,
-  0x29,0xca,0x00,0x8a,0x32,0x80,0xa2,0x0c,0xa0,0x28,0x03,0x28,0xca,0x11,0x54,0xac,
-  0xaf,0xaf,0x2b,0x34,0x8d,0x16,0xe1,0x2f,0xfa,0x01,0x8a,0xdf,0xd4,0x4a,0x92,0x88,
-  0x3a,0xba,0x01,0x14,0xa7,0xa7,0xa7,0x41,0xd6,0x72,0x90,0x24,0x1a,0x73,0x42,0x0e,
-  0xb1,0xe5,0xe5,0x65,0xe5,0x2d,0xfc,0x41,0x47,0x50,0xb1,0xb2,0xb2,0xd2,0x22,0x42,
-  0xa2,0x94,0x24,0xb5,0x06,0x98,0x5d,0x77,0xd8,0xd7,0x3a,0x32,0xcc,0x2b,0xf5,0x0c,
-  0xe1,0x8a,0x32,0x97,0xb2,0x5a,0x49,0x84,0x29,0xca,0x1e,0x3a,0x3b,0x3b,0x8b,0xc3,
-  0xc3,0xc3,0x40,0x5d,0xe4,0xcc,0x65,0xe1,0x0c,0x25,0xde,0xa3,0x0c,0xa7,0x80,0xf7,
-  0xf7,0xf7,0xe0,0x5e,0xe5,0xfe,0xfe,0x3e,0xaf,0x89,0xcc,0x3f,0xcf,0xe2,0x8d,0x00,
-  0x39,0xdd,0x61,0x3f,0xbc,0x4d,0x8e,0x81,0x65,0x6b,0xd6,0x0e,0xa6,0x32,0xa4,0x48,
-  0x3c,0x6d,0x9b,0x9b,0x9b,0xbe,0x9f,0xcc,0x2e,0x92,0xc0,0xc5,0x90,0x9f,0xd8,0xfd,
-  0xff,0x9c,0x25,0x95,0xd7,0x44,0xe6,0x9f,0xc7,0x2c,0x9c,0x01,0x24,0x75,0x87,0x6e,
-  0x30,0x6b,0x0c,0x2d,0x40,0x51,0x63,0xd1,0x51,0x09,0x03,0x90,0x20,0xd5,0x1d,0x2e,
-  0x63,0x5b,0x5d,0x5d,0x75,0x9d,0x32,0xa0,0xcc,0xc7,0xc7,0x47,0xbb,0xbe,0xbe,0xf6,
-  0xdf,0x6c,0x6b,0x6b,0x6b,0xba,0xa7,0x34,0x82,0x65,0x69,0x4d,0x64,0xe2,0x79,0x16,
-  0xdb,0x00,0x12,0xba,0xc3,0x5e,0x83,0x49,0xe8,0xfa,0xfc,0xfc,0x3c,0x53,0x8e,0x24,
-  0xd3,0x8d,0x32,0x8a,0x40,0x57,0xe7,0x24,0x92,0xa1,0x9c,0x5e,0x03,0x24,0x34,0x91,
-  0x89,0xe7,0x59,0x70,0x3f,0x00,0xba,0xc3,0x78,0x7a,0x7a,0x72,0xa8,0x5a,0xf0,0xcd,
-  0xd4,0xfc,0xe9,0xf9,0x54,0x59,0xc5,0x1d,0x98,0x37,0xf5,0xfe,0x59,0x76,0x0a,0x37,
-  0x37,0x37,0x41,0xc3,0x07,0xe8,0xba,0xb1,0xb1,0x11,0xa0,0x75,0x40,0x06,0x94,0x51,
-  0x4a,0xb1,0xf7,0xdf,0x65,0x24,0x08,0xc3,0x08,0xe3,0x2c,0xe6,0x78,0x7d,0x7d,0x0d,
-  0x48,0x3c,0xcf,0x82,0x6f,0x03,0xd1,0x14,0x38,0xa5,0xdc,0x08,0x8b,0x41,0x2c,0xeb,
-  0xea,0xc1,0xb0,0x1d,0x33,0xa0,0xce,0x37,0x86,0xb3,0x12,0x22,0x0d,0x7c,0x7d,0x7d,
-  0x85,0x41,0x5d,0xa4,0x45,0xdc,0x64,0x61,0x21,0xf9,0x43,0x4c,0x93,0x7e,0x1e,0x58,
-  0x8a,0x45,0x23,0xa1,0x3b,0x9c,0x37,0xfa,0xe6,0xcf,0x4e,0x4f,0x13,0xa9,0xd2,0x43,
-  0x7a,0xc5,0x72,0x04,0xe5,0x75,0x87,0xa3,0x93,0xd3,0x44,0x4e,0xa1,0x46,0x80,0xbe,
-  0xee,0x70,0x24,0xac,0x42,0x32,0x79,0x4d,0x64,0x8d,0x00,0x69,0xdd,0xe1,0x08,0x78,
-  0x61,0xf7,0xfd,0xfd,0x1d,0x06,0xf2,0x9a,0xc8,0x32,0x80,0xbc,0xee,0x70,0x00,0xb4,
-  0x3b,0x09,0x78,0x7b,0x7b,0xeb,0xcc,0xe5,0x09,0x4d,0xe4,0xe0,0x06,0xa0,0x68,0xd7,
-  0xe3,0xe3,0xa3,0x24,0xdb,0x7b,0x7b,0x7b,0xe1,0xc2,0x89,0x5e,0x81,0x83,0x23,0x76,
-  0x76,0x76,0x54,0x76,0x77,0x77,0x55,0xf8,0x9d,0x5c,0xb8,0x47,0x47,0x47,0x0a,0x94,
-  0x70,0xca,0x46,0x5c,0x5e,0x5e,0x06,0x7b,0xdc,0x60,0x5f,0x1b,0x34,0x98,0xc4,0x9e,
-  0x1d,0xd4,0x30,0x38,0x54,0x24,0xdd,0x66,0xd8,0xd4,0x41,0x11,0x78,0x06,0x2d,0x66,
-  0xd5,0xdf,0x1b,0x04,0x3d,0xa3,0xff,0x67,0x9c,0x46,0xc1,0xbd,0x5c,0xc8,0x66,0x7f,
-  0x7f,0x3f,0xd0,0x44,0x06,0xe8,0xb0,0x09,0x4e,0x37,0x0b,0x8e,0xf0,0x8d,0xad,0xad,
-  0xad,0xc0,0x13,0xa8,0x10,0xf5,0xc5,0xc5,0xc5,0x98,0xc1,0x20,0x3a,0xbd,0xe1,0x37,
-  0x97,0x53,0x86,0x8e,0x68,0x9c,0xbb,0xa7,0x42,0xa7,0xfb,0xda,0x2d,0xae,0x9b,0xf6,
-  0x7a,0x4e,0x00,0x91,0x63,0x85,0x86,0xd3,0xe7,0xcc,0xa0,0x3b,0x94,0x67,0xd0,0xaf,
-  0x63,0xa1,0xd8,0xfe,0x97,0x56,0x32,0xf1,0xfe,0x93,0x93,0x13,0xd5,0xd1,0x71,0xad,
-  0x07,0x1d,0x68,0x51,0xaa,0x0a,0x9d,0x9b,0xd6,0x44,0xe6,0x9f,0x47,0x88,0xf8,0x8d,
-  0x8e,0xe7,0xdb,0xd9,0x8e,0x8f,0x8f,0x1b,0xdf,0x6a,0x79,0xb3,0x26,0x0b,0x56,0xed,
-  0xeb,0xe4,0xcf,0xbd,0xfa,0x1f,0x85,0x50,0xac,0x3a,0x1f,0xa3,0x52,0x21,0xf0,0x22,
-  0x0f,0x19,0x9f,0x99,0xd0,0x1d,0x8e,0x86,0xda,0x4c,0xea,0x64,0x8e,0xb0,0x93,0x40,
-  0x35,0xaf,0x89,0x1c,0x23,0x25,0x4c,0x5a,0x41,0x9c,0x16,0x8d,0x28,0x58,0x3b,0x38,
-  0x38,0x98,0x57,0x51,0xc7,0xe3,0xf9,0xd2,0xe9,0x62,0x93,0x07,0x38,0xb1,0x9f,0x57,
-  0x43,0x30,0x12,0xe4,0x75,0x87,0xa2,0x58,0x8a,0x39,0x40,0xa4,0x4b,0xe1,0x56,0x0e,
-  0x57,0x0c,0x3a,0x64,0x5e,0x0e,0x11,0x39,0x6c,0xd0,0xf8,0x6b,0xdf,0xce,0x09,0x5e,
-  0x61,0x0c,0x75,0x3a,0xce,0x85,0xe1,0x30,0x8a,0x7f,0xeb,0x07,0xd0,0xc2,0xe5,0xe5,
-  0xe5,0x45,0xb1,0x6f,0x5c,0xab,0xba,0xf7,0xd6,0xa6,0xb5,0xd6,0x5d,0x69,0x83,0xeb,
-  0x74,0x05,0xff,0xac,0xab,0xeb,0xf1,0x9b,0xcb,0xa8,0xd8,0x0a,0x69,0x31,0xe7,0xd7,
-  0xf8,0x24,0x2f,0x46,0x1a,0x79,0xf6,0x98,0x02,0x82,0x29,0x40,0x75,0x22,0x4f,0x91,
-  0x9d,0xab,0x58,0x81,0xb7,0xf3,0xf3,0x73,0x0d,0xc7,0x84,0x5b,0x7f,0x14,0xe6,0x7e,
-  0x5f,0xbb,0xc5,0x75,0xbd,0xd7,0x33,0xcf,0xeb,0x1c,0xdf,0xed,0xed,0xed,0xc6,0xb6,
-  0x47,0x9f,0xe1,0x2b,0x53,0x81,0x16,0x93,0x04,0x57,0x14,0xde,0xe4,0x77,0x9a,0x37,
-  0x31,0x16,0x45,0xf7,0x1e,0x1e,0x1e,0x14,0x4a,0xfd,0xaf,0xbd,0x73,0x80,0xb5,0x2d,
-  0x87,0xc2,0x70,0xc7,0x7c,0xf6,0xbb,0x1a,0xdb,0xb6,0xad,0x60,0x3c,0xc1,0xd8,0x88,
-  0x86,0xe1,0x8d,0xed,0x0c,0xc3,0x61,0xcc,0xb1,0x1d,0x8c,0x6d,0xdb,0xf3,0x6c,0xf5,
-  0x7b,0xc9,0x9f,0xa4,0x3b,0xdd,0x39,0x7d,0xa7,0xe9,0x3e,0xf7,0xec,0xbb,0xfe,0x64,
-  0xa5,0x3d,0xdd,0x3c,0xfd,0x57,0xd7,0xaa,0x76,0xcb,0x37,0xfd,0x05,0x60,0x2e,0x00,
-  0xd3,0xce,0x4c,0x14,0x46,0xa8,0x0a,0x42,0x3d,0x60,0x28,0xa6,0x9a,0x90,0x98,0x7a,
-  0x4a,0x3d,0xa5,0x1f,0x4b,0x83,0x70,0x5c,0x92,0x31,0x90,0x63,0xd8,0x38,0xc1,0x42,
-  0x40,0x3e,0xed,0xd3,0xd2,0xe4,0x83,0x80,0x58,0x3f,0xd9,0xc1,0xb1,0xf4,0x3c,0x75,
-  0x01,0xde,0xc1,0x37,0xe3,0x1c,0x1d,0x3c,0x84,0xbd,0x06,0x4a,0xe8,0x57,0x46,0x71,
-  0x7e,0x25,0x91,0xf6,0xd6,0x01,0x20,0x81,0x3f,0xca,0xa7,0xe0,0x6f,0xbf,0xfd,0x76,
-  0x63,0xfd,0xe2,0x90,0x4c,0x89,0x87,0x68,0x9e,0x4f,0x88,0x25,0x20,0x8e,0xcf,0x27,
-  0x2c,0x05,0xba,0x5c,0x21,0x56,0xc2,0xca,0x60,0x28,0x21,0xbd,0x70,0xcc,0xaf,0xa3,
-  0x57,0x8e,0xa9,0xe1,0xbc,0x07,0x56,0xc7,0xef,0xac,0xa2,0x3a,0x4c,0xfb,0x14,0x80,
-  0x4c,0xf7,0xb3,0x69,0xe8,0xc5,0x6b,0x74,0x60,0x84,0x6e,0x51,0x9e,0x2d,0xb2,0x31,
-  0xfd,0x8a,0x13,0x72,0x0c,0x49,0x04,0xd6,0x23,0x20,0x54,0x71,0x48,0x65,0x82,0x08,
-  0x69,0x58,0x19,0xc8,0xa7,0x05,0xc3,0x72,0x72,0x6a,0x59,0xe8,0xf9,0x00,0xc5,0xe4,
-  0xfd,0x98,0xa0,0x01,0xf1,0x4c,0xcc,0xa0,0xd2,0xcb,0xbb,0x70,0x1d,0x4a,0xd0,0x1a,
-  0x05,0x10,0x01,0x74,0xbd,0x36,0x5d,0xcb,0x26,0xa3,0xe5,0xeb,0x45,0x3c,0x69,0x22,
-  0x5f,0x35,0x7f,0x08,0xc3,0x52,0x30,0xd4,0x8b,0xd2,0x40,0x2a,0x84,0x32,0xf2,0x47,
-  0xa9,0x25,0x8d,0xd2,0x0a,0x81,0xcc,0x10,0xf2,0xd3,0xa8,0x20,0x4a,0x56,0x86,0x38,
-  0x04,0x22,0x34,0x33,0x99,0xbc,0x11,0x90,0x28,0x05,0x40,0x81,0x68,0x71,0xd0,0x95,
-  0xcd,0xb7,0x01,0x0c,0xd5,0x72,0x2f,0xd2,0x7c,0x2f,0x23,0xd7,0xa8,0xe9,0xdb,0x2a,
-  0x05,0xc0,0xf4,0xf6,0x64,0xb1,0x63,0x99,0x7e,0x44,0xa4,0x4b,0x01,0xc8,0x78,0x32,
-  0xdd,0xaf,0xd9,0xc7,0x78,0x38,0x71,0xc8,0x83,0xd4,0xa0,0x29,0x8a,0x50,0x8a,0x21,
-  0x95,0x78,0x2a,0x20,0x53,0xf7,0x62,0xc5,0x53,0x2a,0xa0,0xbe,0x85,0xe2,0xce,0x3b,
-  0xef,0x3c,0xe7,0x27,0x9c,0xf2,0x2e,0x28,0x9c,0xf3,0xeb,0x13,0x42,0x3a,0xef,0xd3,
-  0xbe,0x3a,0x80,0x32,0x00,0x0d,0xf7,0xeb,0xff,0x37,0xdd,0x2c,0x0d,0x2c,0x80,0x94,
-  0x00,0x62,0x10,0x4a,0x3d,0x5f,0xd3,0x30,0xc8,0x03,0xc1,0x9d,0xfa,0x15,0xaa,0xf7,
-  0xd6,0xfd,0x24,0x58,0x07,0x14,0x84,0xf3,0x65,0x5d,0x28,0xf1,0xa4,0x33,0x18,0xe5,
-  0x97,0x92,0x67,0x65,0x71,0x8e,0x51,0x29,0x85,0x78,0x07,0xa4,0x60,0xfd,0x6a,0xfa,
-  0x85,0x8d,0x68,0x0b,0xc6,0x4a,0x3f,0xe4,0xe3,0x17,0x99,0x54,0xd8,0x24,0x18,0xab,
-  0xf7,0x1b,0x51,0x88,0x0c,0x85,0x10,0x87,0xe9,0x85,0x7c,0x99,0x5b,0x91,0x1a,0x90,
-  0xa9,0x50,0xd7,0xe8,0xb7,0xd2,0x20,0x8d,0xde,0x43,0x59,0x12,0x84,0xdf,0x31,0xa9,
-  0x27,0x36,0xde,0x81,0xa5,0xb4,0xfa,0xf3,0xd3,0x3a,0xc8,0x72,0x81,0xd5,0xe2,0xff,
-  0xfa,0xb1,0x05,0xee,0xd9,0x9d,0x05,0x20,0xb3,0x7a,0xd5,0xdc,0xc2,0x02,0xc8,0xec,
-  0x53,0x1a,0xfd,0x87,0x11,0xf8,0x70,0x7d,0xe9,0x12,0x25,0x15,0x42,0x25,0x90,0xc7,
-  0xf9,0x8a,0x13,0x4a,0xc8,0x90,0x14,0x2b,0xc4,0x7f,0xcf,0x21,0x38,0x83,0xd0,0x6e,
-  0x15,0x48,0xf9,0x45,0xef,0x29,0x8a,0xcd,0x6f,0xf2,0x46,0x2e,0x30,0xdd,0x02,0x90,
-  0xa9,0x7e,0x47,0x0d,0x2a,0x52,0x5a,0x5c,0xb9,0x09,0xf0,0xf2,0xf8,0x5d,0x2c,0x0f,
-  0xa5,0x57,0x04,0xe2,0xe3,0x51,0x08,0xe2,0xf2,0xf9,0x1c,0x23,0x44,0xc8,0x94,0x08,
-  0x01,0xe9,0xae,0xa1,0xfc,0xf9,0x65,0x15,0x48,0x95,0x64,0x2c,0xa4,0xf2,0x02,0x3c,
-  0xfa,0xe8,0xa3,0x2a,0x08,0xa4,0xa5,0x5b,0x00,0xbd,0x00,0x99,0xde,0x14,0x78,0x16,
-  0xcf,0xc4,0xb7,0xfb,0x0f,0x26,0xe4,0x93,0x35,0xf1,0x03,0xb3,0x9f,0xff,0x69,0x75,
-  0x79,0xc2,0x1b,0xaf,0x2f,0xe1,0xaa,0xfd,0x5c,0x05,0x0a,0x42,0x90,0x2e,0x57,0x40,
-  0x7a,0xdc,0x0a,0x24,0x28,0x00,0xd2,0x14,0xd4,0xfe,0xa6,0x94,0xf3,0x5c,0x2c,0x10,
-  0x69,0x94,0x78,0x90,0x5b,0xc2,0x0b,0x12,0x5a,0xbe,0xc4,0x47,0xce,0xa7,0x25,0x42,
-  0xab,0x84,0x3a,0x51,0xec,0x3a,0xf5,0xa4,0x4e,0x98,0x30,0x81,0x78,0x5f,0xcc,0x0a,
-  0x46,0x53,0x71,0x03,0x68,0x2d,0xca,0x90,0x91,0x81,0x79,0xc7,0x13,0x90,0xa7,0x90,
-  0x19,0xef,0x43,0xc1,0x20,0x7f,0x66,0xcd,0x9a,0x15,0xdc,0x2b,0xf6,0x7e,0xaa,0x4b,
-  0xf5,0xcd,0xb4,0x70,0xea,0x1e,0x32,0xf9,0x06,0x21,0xf9,0x4b,0xa3,0xaa,0x32,0x49,
-  0x5a,0x3a,0x2b,0xd8,0x20,0x72,0x43,0xa2,0x23,0xbf,0x4d,0x01,0x5a,0x48,0x3c,0xa2,
-  0xb8,0x10,0x4b,0x2b,0xa6,0x00,0x34,0x2d,0x68,0x76,0x98,0x94,0x11,0xa6,0x7d,0x47,
-  0x50,0x5b,0xd2,0xc3,0xb0,0xec,0x94,0x30,0x7c,0x0c,0x2f,0x48,0x65,0x24,0xb5,0x62,
-  0x44,0x73,0x05,0xe9,0xf8,0x82,0x54,0xfe,0x68,0xbb,0xf6,0x15,0x0a,0x74,0x06,0x31,
-  0xc8,0x15,0x83,0xee,0x59,0x7d,0x66,0xfc,0x78,0x21,0x0b,0x00,0x41,0x34,0xcf,0x34,
-  0x9a,0x46,0x88,0xf0,0x60,0x85,0x8a,0x83,0xbf,0xfe,0x5e,0xe4,0x96,0x2c,0x1f,0x70,
-  0xdb,0x4c,0x3a,0xc1,0xcb,0x89,0x0e,0xd9,0x76,0xb2,0x42,0xc4,0x8b,0x8f,0x6f,0xb9,
-  0xed,0x91,0xfe,0xdc,0x95,0xea,0x9f,0xaf,0x4a,0xf5,0x79,0x41,0x5a,0x81,0xf3,0x25,
-  0x75,0xd7,0xa7,0xfc,0x7f,0xc2,0xe4,0xe7,0x4b,0xf8,0xff,0xd4,0xe0,0x37,0xd4,0xff,
-  0x57,0x95,0xaf,0x98,0x05,0xf0,0xab,0x6d,0x24,0x0f,0x7f,0xfe,0xfd,0xcf,0x02,0x37,
-  0x77,0xe4,0x14,0x37,0x77,0x70,0x5f,0xe7,0x5f,0xd5,0xf9,0xac,0x71,0x80,0xc0,0xff,
-  0x24,0x0c,0xb0,0x62,0xf9,0x6f,0x2c,0xa7,0xc0,0xfd,0xfb,0xb7,0x04,0xe7,0x7f,0xc9,
-  0x9c,0x40,0x7e,0x7d,0x9a,0xe2,0x45,0x14,0x80,0x92,0xcf,0x88,0x58,0x0a,0xd0,0xe4,
-  0xb5,0x9b,0x4c,0x75,0xbb,0xec,0x75,0xa4,0xdb,0xa8,0x23,0xa1,0x90,0xbf,0xc4,0xad,
-  0x5e,0x33,0x0f,0x05,0x23,0xe3,0x73,0x08,0xeb,0x5b,0x97,0x41,0x3b,0x9f,0xee,0xf0,
-  0xf8,0x54,0xf7,0xfa,0x52,0xae,0x74,0x42,0xc5,0x4b,0x28,0x00,0x3d,0x4b,0x98,0xa9,
-  0xa4,0xce,0x8c,0xff,0xe7,0xcd,0x77,0x7b,0x1d,0x74,0xa1,0x9b,0x39,0x94,0xb6,0x4a,
-  0xc6,0xd7,0x9f,0xbe,0xe9,0x26,0x6c,0xbd,0x9a,0xfb,0xa7,0x76,0xa6,0x60,0x29,0x82,
-  0xe7,0x2b,0x2c,0xdf,0x59,0x53,0xe4,0x7e,0x9a,0x0d,0x95,0x66,0x01,0xe2,0xc7,0x8a,
-  0xba,0x00,0x4a,0x3f,0x95,0xbf,0xa4,0x3f,0xb8,0x6a,0xed,0x96,0x6e,0xbb,0xdd,0xf6,
-  0x71,0x13,0xa6,0x4c,0x8c,0xa9,0x3f,0x17,0x10,0x3a,0xb0,0x64,0xd1,0x3c,0xf7,0xc3,
-  0x97,0x2f,0xb9,0x99,0x33,0xa6,0xa7,0x29,0x58,0x01,0xf4,0xb8,0x7b,0x19,0xd3,0x4f,
-  0xe9,0x97,0xfb,0x4b,0xb7,0x00,0x21,0xf9,0x65,0x15,0x40,0x93,0x20,0x92,0xb0,0x66,
-  0x99,0xfb,0xfa,0x93,0x57,0xdd,0xc0,0x0e,0x7b,0x05,0x99,0x53,0xad,0x02,0x2c,0x5e,
-  0xf0,0x8f,0xfb,0xf2,0x83,0x17,0xdc,0xa4,0xad,0x56,0x78,0xe5,0xda,0xba,0xbc,0xc9,
-  0x2f,0x74,0xbf,0x9c,0xe7,0x51,0xea,0x7f,0xf8,0xe1,0x07,0x92,0x89,0xeb,0x58,0xf2,
-  0xb0,0x70,0x24,0xad,0x8c,0x02,0xa0,0xa1,0xb8,0x81,0x14,0x0c,0x0d,0xcc,0x72,0x7f,
-  0x7d,0xf3,0xb2,0xfb,0xe3,0xab,0x17,0x6b,0x4b,0x88,0xfa,0x14,0x66,0xae,0x9f,0xe8,
-  0x31,0xa1,0xe9,0x01,0x9b,0xc0,0x85,0x28,0x4e,0x98,0x8f,0xf4,0xe7,0x21,0xfe,0x83,
-  0x4f,0xea,0x4c,0x1d,0x09,0xcd,0xef,0x00,0xca,0x54,0x00,0x96,0x28,0xc5,0x05,0xf0,
-  0x69,0x16,0xa6,0x5a,0xa4,0x44,0x10,0x0c,0xea,0x44,0x50,0x74,0x00,0xa7,0xbc,0xcf,
-  0xce,0x9f,0x05,0xc4,0xa4,0x13,0x26,0xb2,0xb2,0xe2,0x57,0x75,0xc8,0x56,0x33,0x8d,
-  0x53,0xfa,0xfd,0xeb,0xd3,0x0b,0x35,0x03,0xd9,0x6b,0x1f,0x68,0xae,0x7e,0xea,0xc3,
-  0x9a,0xaf,0x64,0x35,0x72,0x7e,0xce,0xff,0x87,0x78,0x5a,0x3d,0x01,0xf9,0xca,0xdb,
-  0x84,0x0a,0x20,0xe7,0x05,0xef,0xa1,0x78,0xa9,0x3a,0x00,0x9d,0x40,0x9a,0x30,0x9a,
-  0xdc,0xec,0x50,0x66,0x25,0xa7,0xe7,0xfb,0xda,0x84,0x4a,0x53,0xde,0x00,0x4c,0xee,
-  0x71,0x08,0xd7,0x9c,0x44,0xde,0x2f,0x3f,0x5f,0x9a,0xa9,0x04,0xf2,0x62,0x68,0x2c,
-  0x12,0x4c,0x1f,0xcf,0xce,0x5c,0x83,0x20,0x05,0x49,0xb1,0x42,0x4a,0x8b,0x59,0xce,
-  0x66,0x46,0x03,0x35,0x6b,0x07,0x53,0xc6,0x43,0x0d,0xf9,0xf9,0xc9,0xac,0xa8,0x14,
-  0xff,0x1f,0x49,0xcf,0xe8,0x07,0xc8,0x34,0xb9,0x45,0x3f,0x90,0x30,0xa4,0x5a,0x83,
-  0x8c,0xe1,0xe0,0xd6,0xc0,0xe6,0x03,0x80,0xd6,0x29,0x80,0x21,0x7d,0x3e,0x80,0x59,
-  0x80,0xf6,0x2b,0x80,0xc2,0x68,0x85,0xb0,0xfd,0x16,0xc0,0x90,0x3e,0x1f,0xc0,0x14,
-  0xa0,0xa5,0xe4,0x27,0xa4,0xb5,0x4d,0x01,0x0c,0xa1,0xe9,0x4f,0xa8,0x03,0xb4,0x60,
-  0xb9,0x78,0x43,0xde,0x7c,0x80,0xf6,0x5b,0x00,0x6b,0x05,0x44,0x49,0x6f,0x9f,0x02,
-  0x18,0xa2,0xa6,0x3f,0x85,0x70,0x73,0x01,0xed,0xaf,0x00,0x8e,0xe3,0x8e,0x20,0xeb,
-  0x0d,0x14,0xac,0x23,0x68,0x1c,0x12,0xaf,0x79,0x03,0x4a,0xb3,0x7e,0x80,0x71,0xaa,
-  0x14,0xe5,0x46,0x03,0xf9,0x64,0xbb,0x3f,0x60,0x23,0x80,0xa4,0x87,0xf1,0x7c,0x05,
-  0xe8,0x93,0xb5,0xf8,0xad,0x22,0x68,0xcd,0x40,0x1b,0x18,0x1a,0x17,0xeb,0x03,0x18,
-  0x6c,0x3e,0x80,0x91,0x2f,0xd8,0x58,0x80,0x55,0x02,0x15,0x0f,0xd6,0x0c,0x54,0xfa,
-  0xf8,0x50,0x00,0x53,0x04,0x48,0x8f,0xc5,0xcd,0x05,0xb4,0x14,0xfa,0x96,0x50,0x02,
-  0xe9,0x92,0x60,0x6d,0xe5,0xf6,0x29,0x80,0x41,0x24,0x8b,0x68,0x91,0x1d,0x84,0xed,
-  0x55,0x00,0x43,0x95,0xf8,0x5a,0x61,0xff,0xe5,0xf6,0x29,0x80,0x21,0x20,0xbe,0xae,
-  0xf4,0x8f,0x8c,0x8c,0xb8,0xa3,0x8f,0x3e,0x5a,0x6b,0x14,0x65,0x29,0xc0,0x18,0x5b,
-  0xb1,0xcb,0xcc,0xbf,0x56,0x06,0xaf,0xf3,0xfb,0x2c,0xad,0xef,0xb7,0xd5,0xd5,0x2a,
-  0xeb,0xfa,0x82,0xbb,0x7b,0x05,0x60,0x4d,0x5a,0xc3,0xd8,0x40,0xb5,0xa4,0x57,0xdd,
-  0x81,0xdf,0x61,0xdc,0x5d,0x72,0xc9,0x25,0xac,0xdf,0x80,0x68,0xf3,0xab,0xee,0x14,
-  0x80,0x8b,0x90,0xbd,0xf7,0xde,0xdb,0xf5,0x1c,0x06,0x11,0x0e,0xd1,0x0a,0x83,0xb4,
-  0x53,0x4f,0x3d,0x15,0xbf,0xcf,0x0a,0xe2,0x6c,0x18,0xc1,0x2a,0xe2,0x5a,0xce,0xa7,
-  0x7b,0x05,0xc0,0x7c,0xb0,0x93,0x27,0x61,0xef,0x60,0xd0,0x3e,0x46,0xd5,0x5a,0x3e,
-  0x04,0xb3,0xa7,0xd1,0xd5,0x57,0x5f,0xed,0x76,0xdd,0x75,0x57,0xcc,0x3f,0x7b,0x07,
-  0x60,0xb5,0x51,0x00,0x2c,0x40,0x77,0x2e,0x40,0xe4,0x63,0x3e,0xb8,0xd1,0x69,0xa7,
-  0x9d,0xe6,0x7a,0x02,0x83,0xb6,0x81,0x09,0x9a,0x7f,0xfb,0xed,0xb7,0x1f,0x5b,0xd8,
-  0xb9,0x8b,0x2f,0xbe,0xd8,0xed,0xb8,0xe3,0x8e,0x70,0xc4,0x8a,0x2d,0xac,0x24,0x8e,
-  0x10,0xc7,0x05,0x68,0x9b,0xbc,0x8e,0x3d,0x81,0x2b,0x58,0xa6,0x27,0xa6,0x00,0x54,
-  0x24,0xd0,0xa2,0xdd,0x76,0xdb,0x8d,0xe5,0xcb,0x1a,0xda,0x3d,0xd4,0x20,0x68,0xbb,
-  0x5c,0xd5,0xc5,0x0e,0x3b,0xec,0x30,0x42,0xed,0x73,0xc8,0x67,0xf9,0x54,0xd2,0x59,
-  0xab,0x81,0xd2,0x0f,0xf1,0x84,0x90,0x0f,0x77,0x1d,0x4b,0x3f,0xdc,0xa3,0x1e,0x7f,
-  0xc7,0x2c,0x00,0xa5,0x1f,0xf2,0xb9,0x19,0x0f,0x38,0xf0,0xc0,0x03,0xf1,0x31,0xe6,
-  0x0e,0x1a,0x24,0x1f,0xa1,0x84,0x5f,0x76,0xd9,0x65,0xec,0xde,0xc6,0x76,0xfa,0x6c,
-  0x61,0x07,0xc9,0x28,0x02,0x3b,0xac,0x91,0xe6,0x86,0x87,0x87,0xdd,0xc0,0xc0,0x00,
-  0x8b,0x4c,0xc3,0x55,0x2a,0xf9,0xe0,0x6f,0x36,0x8d,0x7a,0xc6,0x47,0x4e,0x8d,0xf9,
-  0x1d,0xb6,0x1c,0x61,0x2f,0x7f,0xf6,0x0e,0xd4,0x26,0xce,0xa4,0x61,0x0d,0xbe,0xfa,
-  0xea,0x2b,0xf6,0xf8,0xe7,0xb7,0xcb,0x87,0x41,0x80,0x60,0x0a,0x1e,0x15,0xb9,0x7d,
-  0xf6,0xd9,0x47,0x3b,0xa2,0x51,0xda,0x49,0xc7,0xef,0x73,0x4e,0x20,0xa4,0x71,0x8c,
-  0x73,0x36,0x70,0x2f,0xc3,0x67,0x71,0x01,0x2f,0xc6,0x14,0x40,0x2e,0x00,0x0b,0x80,
-  0x69,0x41,0x21,0x00,0x3b,0x7a,0x70,0x8c,0x34,0x6d,0xe3,0x0e,0x08,0x0d,0xf9,0xeb,
-  0x1a,0x11,0x42,0xa0,0x88,0x17,0xe9,0xf0,0x00,0xd9,0x84,0xfc,0xc6,0xf4,0x73,0x4c,
-  0xdb,0xe2,0x89,0x78,0x24,0x15,0x70,0xbf,0xc9,0xe8,0xe8,0xe8,0xcf,0x3e,0x72,0x0b,
-  0x15,0xc2,0x48,0x33,0x10,0xb2,0x03,0xe1,0x41,0xda,0xae,0x4d,0xdb,0xba,0x21,0x68,
-  0x9f,0x49,0xd7,0xa2,0x3c,0x0c,0x08,0x97,0x5f,0xc7,0xdc,0x53,0xbb,0xc7,0xc4,0x63,
-  0x19,0x58,0xaa,0x9f,0xe3,0x28,0x41,0xa4,0xc3,0x27,0x15,0x0c,0x16,0x5c,0xbd,0xb1,
-  0xbf,0x08,0x05,0x78,0xcc,0x45,0xa0,0xbd,0x71,0x65,0x05,0xf0,0x33,0xf8,0x1b,0x09,
-  0xfe,0x67,0x70,0x70,0x10,0xe1,0x58,0x86,0x98,0x28,0x1f,0x11,0xf2,0x95,0xee,0x5c,
-  0x09,0x69,0xec,0x54,0x8e,0x02,0xd0,0xce,0x57,0x27,0x4f,0x97,0xc4,0x0b,0x8f,0xc1,
-  0xbd,0xe6,0x03,0xdc,0xe5,0xe5,0x1c,0x2f,0x93,0xaa,0x56,0x40,0x4a,0xa0,0x10,0xad,
-  0xa3,0xd9,0x41,0xed,0x94,0x95,0x2d,0xb5,0xac,0xa9,0x21,0x1f,0xca,0x6f,0xb9,0x5f,
-  0x44,0xd6,0x41,0x64,0xcb,0xbf,0x67,0x62,0x3e,0x9c,0x13,0xd1,0x9d,0x20,0x91,0xc6,
-  0xfe,0x13,0xb8,0xff,0x9a,0x31,0xe8,0xea,0x20,0x44,0xc1,0x3a,0x80,0xd5,0x01,0xe4,
-  0x6e,0x09,0x11,0xd2,0x91,0x4c,0xc8,0xf4,0x9f,0xe5,0xef,0xf5,0x8c,0x14,0x40,0x80,
-  0xc4,0x6b,0x7c,0x70,0x4f,0x8d,0x12,0xe8,0x9c,0x40,0x0c,0x45,0x94,0x21,0x90,0x00,
-  0xf9,0xe4,0xdf,0xe0,0xef,0xf9,0x80,0xab,0x03,0x96,0xc0,0xcb,0xbc,0xb5,0x6d,0x83,
-  0x61,0x1e,0xdc,0xa6,0x4e,0x39,0x1a,0xf0,0xf2,0x90,0x97,0x55,0x96,0x6f,0x7d,0x0f,
-  0x38,0x84,0xcb,0x81,0x6e,0xe6,0x9e,0x0d,0x79,0xb9,0x8d,0xce,0x22,0x2f,0xbf,0x78,
-  0x59,0x6e,0xf9,0x39,0xe6,0xb1,0x1c,0xae,0xe0,0x0c,0xee,0xe0,0xd0,0xd5,0xc3,0xad,
-  0x03,0x63,0x75,0xc1,0xae,0xdd,0xd9,0xb0,0x20,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,
-  0x44,0xae,0x42,0x60,0x82,
+  0xcb,0x00,0x00,0x04,0x19,0x69,0x43,0x43,0x50,0x6b,0x43,0x47,0x43,0x6f,0x6c,0x6f,
+  0x72,0x53,0x70,0x61,0x63,0x65,0x47,0x65,0x6e,0x65,0x72,0x69,0x63,0x52,0x47,0x42,
+  0x00,0x00,0x38,0x8d,0x8d,0x55,0x5d,0x68,0x1c,0x55,0x14,0x3e,0xbb,0x73,0x67,0x23,
+  0x24,0xce,0x53,0x6c,0x34,0x85,0x74,0xa8,0x3f,0x0d,0x25,0x0d,0x93,0x56,0x34,0xa1,
+  0xb4,0xba,0x7f,0xdd,0xdd,0x36,0x6e,0x96,0x49,0x36,0xda,0x22,0xe8,0x64,0xf6,0xee,
+  0xce,0x98,0xc9,0xce,0x38,0x33,0xbb,0xfd,0xa1,0x4f,0x45,0x50,0x7c,0x31,0xea,0x9b,
+  0x14,0xc4,0xbf,0xb7,0x80,0x20,0x28,0xf5,0x0f,0xdb,0x3e,0xb4,0x2f,0x95,0x0a,0x25,
+  0xda,0xd4,0x20,0x28,0x3e,0xb4,0xf8,0x83,0x50,0xe8,0x8b,0xa6,0xeb,0x99,0x3b,0x33,
+  0x99,0x69,0xba,0xb1,0xde,0x65,0xee,0x7c,0xf3,0x9d,0xef,0x9e,0x7b,0xee,0xb9,0x67,
+  0xef,0x05,0xe8,0xb9,0xaa,0x58,0x96,0x91,0x14,0x01,0x16,0x9a,0xae,0x2d,0x17,0x32,
+  0xe2,0x73,0x87,0x8f,0x88,0x3d,0x2b,0x90,0x84,0x87,0xa0,0x17,0x06,0xa1,0x57,0x51,
+  0x1d,0x2b,0x5d,0xa9,0x4c,0x02,0x36,0x4f,0x0b,0x77,0xb5,0x5b,0xdf,0x43,0xc2,0x7b,
+  0x5f,0xd9,0xd5,0xdd,0xfe,0x9f,0xad,0xb7,0x46,0x1d,0x15,0x20,0x71,0x1f,0x62,0xb3,
+  0xe6,0xa8,0x0b,0x88,0x8f,0x01,0xf0,0xa7,0x55,0xcb,0x76,0x01,0x7a,0xfa,0x91,0x1f,
+  0x3f,0xea,0x5a,0x1e,0xf6,0x62,0xe8,0xb7,0x31,0x40,0xc4,0x2f,0x7a,0xb8,0xe1,0x63,
+  0xd7,0xc3,0x73,0x3e,0x7e,0x8d,0x69,0x66,0xe4,0x2c,0xe2,0xd3,0x88,0x05,0x55,0x53,
+  0x6a,0x88,0x97,0x10,0x8f,0xcc,0xc5,0xf8,0x46,0x0c,0xfb,0x31,0xb0,0xd6,0x5f,0xa0,
+  0x4d,0x6a,0xeb,0xaa,0xe8,0xe5,0xa2,0x62,0x9b,0x75,0xdd,0xa0,0xb1,0x70,0xef,0x61,
+  0xfe,0x9f,0x6d,0xc1,0x68,0x85,0xf3,0x6d,0xc3,0xa7,0xcf,0x99,0x9f,0x3e,0x84,0xef,
+  0x61,0x5c,0xfb,0x2b,0x35,0x25,0xe7,0xe1,0x51,0xc4,0x4b,0xaa,0x92,0x9f,0x46,0xfc,
+  0x08,0xe2,0x6b,0x6d,0x7d,0xb6,0x1c,0xe0,0xdb,0x96,0x9b,0x91,0x11,0x3f,0x06,0x90,
+  0xdc,0xde,0x9a,0xaf,0xa6,0x11,0xef,0x44,0x5c,0xac,0xdb,0x07,0xaa,0xbe,0x9f,0xa4,
+  0xad,0xb5,0x8a,0x21,0x7e,0xe7,0x84,0x36,0xf3,0x2c,0xe2,0x2d,0x88,0xcf,0x37,0xe7,
+  0xca,0x53,0xc1,0xd8,0xab,0xaa,0x93,0xc5,0x9c,0xc1,0x76,0xc4,0xb7,0x35,0x5a,0xf2,
+  0xf2,0x3b,0x04,0xc0,0x89,0xba,0x5b,0x9a,0xf1,0xc7,0x72,0xfb,0x6d,0x53,0x9e,0xf2,
+  0xe7,0xe5,0xea,0x35,0x9a,0xcb,0x7b,0x79,0x44,0xfc,0xfa,0xbc,0x79,0x48,0xf6,0x7d,
+  0x72,0x9f,0x39,0xed,0xe9,0x7c,0xe8,0xf3,0x84,0x96,0x2d,0x07,0xfc,0xa5,0x97,0x94,
+  0x83,0x15,0xc4,0x83,0x88,0x7f,0xa1,0x46,0x41,0xf6,0xe7,0xe2,0xfe,0xb1,0xdc,0x4a,
+  0x10,0x03,0x19,0x6a,0x1a,0xe5,0x49,0x7f,0x2e,0x92,0xa3,0x0e,0x5b,0x2f,0xe3,0x5d,
+  0x6d,0xa6,0xe8,0xcf,0x4b,0x0c,0x17,0x37,0xd4,0x1f,0x4b,0x16,0xeb,0xfa,0x81,0x52,
+  0xa0,0xff,0x44,0xb3,0x8b,0x72,0x80,0xaf,0x59,0x06,0xab,0x51,0x8c,0x8d,0x4f,0xda,
+  0x2d,0xb9,0xea,0xeb,0xf9,0x51,0xc5,0xce,0x17,0x7c,0x9f,0x7c,0x85,0x36,0xab,0x81,
+  0x7f,0xbe,0x0d,0xb3,0x09,0x05,0x28,0x98,0x30,0x87,0xbd,0x0a,0x4d,0x58,0x03,0x11,
+  0x64,0x28,0x40,0x06,0xdf,0x16,0xd8,0x68,0xa9,0x83,0x0e,0x06,0x32,0x14,0xad,0x14,
+  0x19,0x8a,0x5f,0xa1,0x66,0x17,0x1b,0xe7,0xc0,0x3c,0xf2,0x3a,0xb4,0x99,0xcd,0xc1,
+  0xbe,0xc2,0x94,0xfe,0xc8,0xc8,0x5f,0x83,0xf9,0xb8,0xce,0xb4,0x2a,0x64,0x87,0x3e,
+  0x82,0x16,0xb2,0x1a,0xfc,0x8e,0xac,0x16,0xd3,0x65,0xf1,0xab,0x85,0x5c,0x63,0x13,
+  0x3f,0x7e,0x2c,0x37,0x02,0x3f,0x26,0x19,0x20,0x12,0xd9,0x83,0xcf,0x5e,0x32,0x49,
+  0xf6,0x91,0x71,0x32,0x01,0x22,0x79,0x8a,0x3c,0x4d,0xf6,0x93,0x1c,0xb2,0x13,0x64,
+  0xef,0xfa,0xd8,0x4a,0x6c,0x45,0x5e,0x3c,0x37,0xd6,0xfd,0xbc,0x8c,0x33,0x52,0xa6,
+  0x9b,0x45,0xdd,0x39,0xb4,0xbb,0xa0,0x60,0xff,0x33,0x2a,0x4c,0x5c,0x53,0xd7,0xac,
+  0x2c,0x0e,0xb6,0x86,0x23,0xcb,0x29,0xfb,0x05,0x5d,0xbd,0xfc,0xc6,0x5f,0xb1,0x5c,
+  0xe9,0x2c,0x37,0x51,0xb6,0xe2,0x19,0x9d,0xba,0x57,0xce,0xf9,0x5f,0xf9,0xeb,0xfc,
+  0x32,0xf6,0x2b,0xfc,0x6a,0xa4,0xe0,0x7f,0xe4,0x57,0xf1,0xb7,0x72,0xc7,0x5a,0xcc,
+  0xbb,0xb2,0x4c,0xc3,0xec,0x6c,0x58,0x73,0x77,0x55,0x1a,0x6d,0x06,0xe3,0x16,0xf0,
+  0xd1,0x99,0xc5,0x89,0xc5,0x1d,0xf3,0x71,0xf1,0xe4,0x57,0x0f,0x46,0x7e,0x96,0xc9,
+  0x99,0xe7,0xaf,0xf4,0x5d,0x3c,0x59,0x6f,0x2e,0x0e,0x46,0xac,0x97,0x05,0xfa,0x6a,
+  0xf9,0x56,0x19,0x4e,0x8d,0x44,0xac,0xf4,0x83,0xf4,0x87,0xb4,0x2c,0xbd,0x27,0x7d,
+  0x28,0xfd,0xc6,0xbd,0xcd,0x7d,0xca,0x7d,0xcd,0x7d,0xce,0x7d,0xc1,0x5d,0x02,0x91,
+  0x3b,0xcb,0x9d,0xe3,0xbe,0xe1,0x2e,0x70,0x1f,0x73,0x5f,0xc6,0xf6,0x6a,0xf3,0x1a,
+  0x5a,0xdf,0x7b,0x16,0x79,0x18,0xb7,0x67,0xe9,0x96,0x6b,0xac,0x4a,0x21,0x23,0x6c,
+  0x15,0x1e,0x16,0x72,0xc2,0x36,0xe1,0x51,0x61,0x32,0xf2,0x27,0x0c,0x08,0x63,0x42,
+  0x51,0xd8,0x81,0x96,0xad,0xeb,0xfb,0x16,0x9f,0x2f,0x9e,0x3d,0x1d,0x0e,0x63,0x1f,
+  0xe6,0xa7,0xfb,0x5c,0xbe,0x2e,0x56,0x01,0x89,0xfb,0xb1,0x02,0xf4,0x4d,0xfe,0x55,
+  0x55,0x54,0xe9,0x70,0x94,0x29,0x1d,0x56,0x6f,0x4d,0x38,0xbe,0x41,0x13,0x8c,0x24,
+  0x43,0x64,0x8c,0x94,0x36,0x54,0xf7,0xb8,0x57,0xf3,0xa1,0x22,0x95,0x4f,0xe5,0x52,
+  0x69,0x10,0x53,0x3b,0x53,0x13,0xa9,0xb1,0xd4,0x41,0x0f,0x87,0xb3,0xa6,0x76,0xa0,
+  0x6d,0x02,0xfb,0xfc,0x1d,0xd5,0xa9,0x6e,0xb2,0x52,0xea,0xd2,0x63,0xde,0x7d,0x02,
+  0x59,0xd3,0x3a,0x6e,0xeb,0x0d,0xcd,0x15,0x77,0x4b,0xd2,0x93,0x62,0x1a,0xaf,0x36,
+  0x2a,0x96,0x9a,0xea,0xe8,0x88,0xa8,0x18,0x86,0xc8,0x4c,0x8e,0x68,0x53,0x87,0xda,
+  0x6d,0x5a,0x1b,0x05,0xef,0xde,0xf4,0x8f,0xf4,0x9b,0x32,0xbb,0x0f,0x13,0x5b,0x2e,
+  0x47,0x9c,0xfb,0x0c,0xc0,0xbe,0x3f,0xf1,0xec,0xfb,0x2e,0xe2,0x8e,0xb4,0x00,0x96,
+  0x1c,0x80,0x81,0xc7,0x23,0x6e,0x18,0xcf,0xca,0x07,0xde,0x05,0x38,0xf3,0x84,0xda,
+  0xb2,0xdb,0xc1,0x1d,0x91,0x48,0x7c,0x0b,0xe0,0xd4,0xf7,0xec,0xf6,0xbf,0xfa,0x32,
+  0x78,0x7e,0xfd,0xd4,0xe9,0xdc,0xc4,0x73,0xac,0xe7,0x2d,0x80,0xb5,0x37,0x3b,0x9d,
+  0xbf,0xdf,0xef,0x74,0xd6,0x3e,0x40,0xff,0xab,0x00,0x67,0x8d,0x7f,0x01,0xa0,0x9f,
+  0x7c,0x55,0x03,0x5c,0x0b,0xef,0x00,0x00,0x00,0x38,0x65,0x58,0x49,0x66,0x4d,0x4d,
+  0x00,0x2a,0x00,0x00,0x00,0x08,0x00,0x01,0x87,0x69,0x00,0x04,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x00,0x00,0x02,0xa0,0x02,0x00,0x04,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x80,0xa0,0x03,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x80,0x00,0x00,0x00,0x00,0x6b,0x46,0x26,0x4d,0x00,0x00,0x03,0x62,0x69,0x54,
+  0x58,0x74,0x58,0x4d,0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,
+  0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00,0x3c,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,
+  0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,
+  0x65,0x3a,0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20,0x78,0x3a,0x78,0x6d,
+  0x70,0x74,0x6b,0x3d,0x22,0x58,0x4d,0x50,0x20,0x43,0x6f,0x72,0x65,0x20,0x35,0x2e,
+  0x34,0x2e,0x30,0x22,0x3e,0x0a,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52,0x44,
+  0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72,0x64,0x66,0x3d,0x22,0x68,0x74,0x74,
+  0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,
+  0x39,0x39,0x39,0x2f,0x30,0x32,0x2f,0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,
+  0x6e,0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,
+  0x6e,0x20,0x72,0x64,0x66,0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x0a,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,
+  0x3a,0x64,0x63,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x70,0x75,0x72,0x6c,
+  0x2e,0x6f,0x72,0x67,0x2f,0x64,0x63,0x2f,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,
+  0x2f,0x31,0x2e,0x31,0x2f,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x49,0x70,0x74,0x63,0x34,0x78,0x6d,
+  0x70,0x45,0x78,0x74,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x69,0x70,0x74,
+  0x63,0x2e,0x6f,0x72,0x67,0x2f,0x73,0x74,0x64,0x2f,0x49,0x70,0x74,0x63,0x34,0x78,
+  0x6d,0x70,0x45,0x78,0x74,0x2f,0x32,0x30,0x30,0x38,0x2d,0x30,0x32,0x2d,0x32,0x39,
+  0x2f,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78,
+  0x6d,0x6c,0x6e,0x73,0x3a,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3d,0x22,
+  0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,
+  0x63,0x6f,0x6d,0x2f,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x2f,0x31,0x2e,
+  0x30,0x2f,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,
+  0x63,0x3a,0x63,0x72,0x65,0x61,0x74,0x6f,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x53,0x65,0x71,0x3e,
+  0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+  0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x4d,0x69,0x63,0x68,0x61,0x65,0x6c,0x20,
+  0x53,0x77,0x65,0x65,0x74,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,
+  0x3a,0x53,0x65,0x71,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,
+  0x2f,0x64,0x63,0x3a,0x63,0x72,0x65,0x61,0x74,0x6f,0x72,0x3e,0x0a,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,0x72,0x69,0x67,0x68,0x74,0x73,
+  0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,
+  0x64,0x66,0x3a,0x41,0x6c,0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x20,0x78,
+  0x6d,0x6c,0x3a,0x6c,0x61,0x6e,0x67,0x3d,0x22,0x78,0x2d,0x64,0x65,0x66,0x61,0x75,
+  0x6c,0x74,0x22,0x3e,0x43,0x6f,0x70,0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x32,0x30,
+  0x31,0x30,0x20,0x41,0x70,0x70,0x6c,0x65,0x20,0x49,0x6e,0x63,0x2e,0x3c,0x2f,0x72,
+  0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x41,0x6c,0x74,0x3e,0x0a,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x63,0x3a,0x72,0x69,0x67,0x68,
+  0x74,0x73,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x49,0x70,
+  0x74,0x63,0x34,0x78,0x6d,0x70,0x45,0x78,0x74,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,
+  0x6e,0x65,0x3e,0x4e,0x65,0x77,0x20,0x49,0x6d,0x61,0x67,0x65,0x3c,0x2f,0x49,0x70,
+  0x74,0x63,0x34,0x78,0x6d,0x70,0x45,0x78,0x74,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,
+  0x6e,0x65,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x68,
+  0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,0x6e,0x65,
+  0x3e,0x4e,0x65,0x77,0x20,0x49,0x6d,0x61,0x67,0x65,0x3c,0x2f,0x70,0x68,0x6f,0x74,
+  0x6f,0x73,0x68,0x6f,0x70,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,0x6e,0x65,0x3e,0x0a,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,
+  0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,
+  0x66,0x3a,0x52,0x44,0x46,0x3e,0x0a,0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,
+  0x74,0x61,0x3e,0x0a,0xa0,0x50,0x98,0x64,0x00,0x00,0x13,0xdb,0x49,0x44,0x41,0x54,
+  0x78,0xda,0xed,0x9d,0x07,0x90,0x55,0x35,0x17,0xc7,0xd7,0x5e,0xc7,0xde,0xd7,0x55,
+  0xec,0xbd,0x0b,0x0a,0x28,0x88,0x88,0xae,0x05,0x7b,0xd7,0xc1,0xbe,0x2a,0x28,0x22,
+  0xba,0xe8,0x88,0x8d,0xcf,0x82,0x34,0xa5,0x0a,0xa2,0x28,0xae,0xa8,0x58,0x41,0x71,
+  0x64,0x11,0x07,0xc5,0x2e,0xa2,0xa0,0xa8,0xe8,0x88,0xd8,0x16,0x15,0xb0,0x20,0x56,
+  0x14,0xcd,0xb7,0xbf,0xb8,0xe7,0x9a,0xcd,0xe6,0xbe,0x77,0xef,0x6b,0xbb,0xdc,0x97,
+  0xcc,0xfc,0x27,0xf7,0xdd,0x92,0x77,0x6f,0xce,0x3f,0x27,0x27,0xc9,0x49,0x52,0x52,
+  0x92,0x22,0x28,0xa5,0xca,0x6a,0x51,0x59,0x8b,0xea,0x5a,0xd4,0xd4,0x62,0x89,0xf2,
+  0xa1,0xa9,0x87,0x25,0x75,0xb2,0xaa,0xae,0x93,0x5d,0x59,0x49,0xdc,0x50,0xfb,0x50,
+  0x69,0x2d,0xaa,0x6a,0xb1,0xd4,0xe7,0xe7,0x32,0x1f,0x96,0xd6,0xc9,0xb2,0x34,0xaa,
+  0xf0,0xcb,0x6b,0xb1,0xc8,0xe7,0x5b,0xe2,0x02,0x32,0x2d,0x4f,0x27,0xfc,0x0a,0x5f,
+  0xea,0x13,0xaf,0x0d,0x2a,0x52,0x95,0x7c,0x2f,0xfc,0xe2,0x20,0x41,0xb9,0xab,0xce,
+  0xf7,0x6a,0xbf,0xb8,0xaa,0x83,0x52,0x93,0x00,0x55,0xf6,0x1d,0x7b,0xee,0xb9,0xa7,
+  0xda,0x7c,0xf3,0xcd,0xd5,0x4d,0x37,0xdd,0xe4,0xb3,0x2b,0x99,0xa1,0xca,0x6c,0xea,
+  0x35,0x50,0xfd,0x1b,0x6c,0xb0,0x81,0xe2,0xf2,0xe5,0x97,0x5f,0xee,0xb3,0x2a,0xb9,
+  0x55,0x41,0x59,0x49,0x5d,0x5b,0xb1,0x41,0xe8,0xd1,0xa3,0x87,0xba,0xe8,0xa2,0x8b,
+  0xd4,0x13,0x4f,0x3c,0xe1,0xb3,0x2a,0xb9,0xa1,0xb2,0xa4,0xae,0xc3,0xc0,0x87,0xe2,
+  0x0c,0xd5,0x10,0xa0,0xc6,0x75,0x65,0xe8,0xd0,0xa1,0xaa,0x4f,0x9f,0x3e,0xea,0xc5,
+  0x17,0x5f,0xac,0x77,0x7e,0xe6,0xcc,0x99,0xfa,0x7c,0xdf,0xbe,0x7d,0xd5,0x9f,0x7f,
+  0xfe,0xa9,0xe6,0xcf,0x9f,0xaf,0xaa,0xaa,0xaa,0x54,0xa7,0x4e,0x9d,0xd4,0x29,0xa7,
+  0x9c,0xa2,0xfa,0xf5,0xeb,0xa7,0xe6,0xcd,0x9b,0xa7,0xd2,0xa5,0xf9,0xcf,0x3f,0xff,
+  0xa8,0x57,0x5f,0x7d,0x55,0xdd,0x78,0xe3,0x8d,0xea,0xa8,0xa3,0x8e,0xd2,0x55,0xcd,
+  0xd3,0x4f,0x3f,0x9d,0xf2,0x6d,0xbf,0xfc,0xf2,0x4b,0x75,0xfb,0xed,0xb7,0xab,0xd3,
+  0x4e,0x3b,0x4d,0x1d,0x77,0xdc,0x71,0xda,0x3e,0xf9,0xe4,0x93,0x4f,0xea,0xdd,0x33,
+  0x78,0xf0,0x60,0xfd,0x1f,0xcf,0x3d,0xf7,0x5c,0x68,0x3a,0xcf,0x3f,0xff,0xbc,0xbe,
+  0x67,0xf4,0xe8,0xd1,0x0d,0xae,0x8d,0x1f,0x3f,0x5e,0x5d,0x79,0xe5,0x95,0xaa,0xbc,
+  0xbc,0x5c,0x5d,0x7c,0xf1,0xc5,0xea,0xc1,0x07,0x1f,0xd4,0xef,0x9a,0xd0,0x50,0x03,
+  0x01,0x9c,0xdd,0xbb,0x61,0x36,0x00,0x42,0xe4,0x3c,0x80,0x0c,0x9b,0x6c,0xb2,0x49,
+  0xf0,0x5b,0xc0,0xb9,0xd7,0x5e,0x7b,0x2d,0x65,0x9a,0x57,0x5d,0x75,0x55,0x83,0xe7,
+  0xc0,0xf9,0xe7,0x9f,0xaf,0x89,0xd5,0x80,0xaa,0xd5,0xd5,0x6a,0xbd,0xf5,0xd6,0x6b,
+  0x70,0xff,0xda,0x6b,0xaf,0xad,0xaf,0x49,0x40,0x70,0x9c,0xdf,0x76,0xdb,0x6d,0x43,
+  0xbf,0x7a,0xfb,0xed,0xb7,0xd7,0xf7,0x74,0xee,0xdc,0x39,0x38,0xf7,0xf3,0xcf,0x3f,
+  0x6b,0x02,0xbb,0xde,0x09,0xb2,0xfd,0xf6,0xdb,0x6f,0x49,0x24,0xc0,0x92,0x92,0xb0,
+  0x2b,0x51,0x08,0xb0,0xe9,0xa6,0x9b,0xaa,0xe5,0x97,0x5f,0x5e,0xb5,0x68,0xd1,0x42,
+  0x67,0x66,0xbb,0x76,0xed,0x82,0x6b,0x65,0x65,0x65,0x6a,0xc9,0x92,0x25,0xce,0x34,
+  0xd7,0x59,0x67,0x1d,0x1d,0xf3,0x9b,0x4c,0x3f,0xef,0xbc,0xf3,0x82,0x6b,0xe0,0xce,
+  0x3b,0xef,0xac,0xf7,0xdc,0x87,0x1f,0x7e,0xa8,0x56,0x58,0x61,0x05,0x7d,0xed,0xd0,
+  0x43,0x0f,0x55,0x13,0x26,0x4c,0x50,0x4f,0x3e,0xf9,0xa4,0xda,0x7d,0xf7,0xdd,0xf5,
+  0xb9,0x0d,0x37,0xdc,0x30,0x10,0xd0,0xc3,0x0f,0x3f,0x1c,0xa4,0x83,0x86,0xb1,0xc3,
+  0x4b,0x2f,0xbd,0x14,0x5c,0x9f,0x31,0x63,0x46,0x70,0xfe,0xf4,0xd3,0x4f,0xd7,0xe7,
+  0xd6,0x5c,0x73,0x4d,0xad,0x65,0xd0,0x12,0xd7,0x5e,0x7b,0x6d,0xf0,0xbf,0x68,0xb6,
+  0x24,0x86,0xac,0x08,0x40,0xe9,0x9b,0x34,0x69,0x52,0xbd,0xeb,0x10,0x41,0xae,0xdf,
+  0x75,0xd7,0x5d,0xce,0x34,0xc1,0x09,0x27,0x9c,0xa0,0x7e,0xfd,0xf5,0xd7,0xe0,0x1a,
+  0xaa,0x7c,0xad,0xb5,0xd6,0x0a,0xc8,0xf3,0xd7,0x5f,0x7f,0x05,0xd7,0x8e,0x3c,0xf2,
+  0x48,0x7d,0x7e,0xe7,0x9d,0x77,0x56,0x4b,0x97,0xfe,0xd7,0x60,0xf9,0xfa,0xeb,0xaf,
+  0xd5,0xca,0x2b,0xaf,0xac,0xaf,0x0d,0x1b,0x36,0x4c,0x9f,0xfb,0xfd,0xf7,0xdf,0xf5,
+  0x7b,0x71,0xee,0xc2,0x0b,0x2f,0x6c,0xf0,0x5d,0x67,0x9d,0x75,0x96,0xbe,0xd6,0xbc,
+  0x79,0xf3,0xe0,0xdc,0xb4,0x69,0xd3,0xd4,0x72,0xcb,0x2d,0xa7,0xcf,0x43,0x20,0x33,
+  0x5c,0x72,0xc9,0x25,0x01,0xd9,0xcd,0x77,0xf2,0x04,0xa8,0xc5,0x3b,0xef,0xbc,0xd3,
+  0xe0,0x39,0xea,0x7f,0x29,0x35,0x67,0x9e,0x79,0xa6,0x33,0xcd,0x63,0x8f,0x3d,0xd6,
+  0x59,0xaf,0xd2,0xea,0x90,0xb4,0xe7,0xcc,0x99,0xa3,0xcf,0x2d,0x5c,0xb8,0x30,0x38,
+  0xd7,0xbf,0x7f,0xff,0x06,0xcf,0xb4,0x6e,0xdd,0x5a,0x5f,0xc3,0x06,0x91,0x50,0x51,
+  0x51,0x11,0x68,0x9a,0x3f,0xfe,0xf8,0x23,0x38,0xff,0xd3,0x4f,0x3f,0xa9,0xd5,0x57,
+  0x5f,0x5d,0x5f,0x1b,0x39,0x72,0x64,0x03,0x21,0x43,0x40,0xfb,0xbd,0x26,0x4f,0x9e,
+  0x1c,0xfc,0xff,0xdc,0xb9,0x73,0x3d,0x01,0x4c,0x02,0x90,0xa1,0xae,0xb0,0xc5,0x16,
+  0x5b,0xe8,0xeb,0x08,0x27,0x4e,0xdf,0xc2,0xbd,0xf7,0xde,0x1b,0xa4,0x4d,0xc6,0x13,
+  0x50,0xe3,0x72,0x6e,0x8f,0x3d,0xf6,0x50,0xc7,0x1f,0x7f,0x7c,0x3d,0xac,0xbf,0xfe,
+  0xfa,0xfa,0xda,0x41,0x07,0x1d,0x14,0xa4,0x63,0x3e,0xf3,0xe8,0xa3,0x8f,0x06,0xe7,
+  0x47,0x8c,0x18,0x11,0xa8,0x79,0xea,0x7c,0x09,0x1d,0x3a,0x74,0xd0,0xe7,0x57,0x5a,
+  0x69,0xa5,0x06,0xe9,0x1f,0x70,0xc0,0x01,0x41,0x5a,0xa6,0x41,0x3c,0x76,0xec,0x58,
+  0xfd,0x9f,0xe9,0x70,0xd9,0x65,0x97,0x15,0x1f,0x01,0xf6,0xde,0x7b,0x6f,0x7d,0x7d,
+  0x87,0x1d,0x76,0x88,0x45,0x00,0x5a,0x01,0x92,0xb6,0xa8,0xe2,0x07,0x1e,0x78,0xc0,
+  0x69,0x98,0xd9,0xa0,0x7a,0x30,0xc3,0x76,0xdb,0x6d,0xa7,0xcf,0x53,0x7d,0x48,0xd8,
+  0x77,0xdf,0x7d,0x03,0x43,0xd3,0x0c,0xdb,0x6c,0xb3,0x4d,0xa4,0xff,0x30,0xc9,0xd4,
+  0xbb,0x77,0xef,0x48,0xcf,0xd8,0x85,0xa0,0x28,0x08,0x80,0x05,0xce,0xf5,0xf6,0xed,
+  0xdb,0xc7,0x22,0xc0,0x98,0x31,0x63,0x82,0xb4,0x5f,0x7e,0xf9,0xe5,0xc0,0xfa,0x97,
+  0x73,0xbd,0x7a,0xf5,0x52,0x2f,0xbc,0xf0,0x82,0x13,0xd4,0xe3,0x66,0xa0,0x89,0xc8,
+  0x33,0x2b,0xae,0xb8,0xa2,0xfa,0xf6,0xdb,0x6f,0x75,0x8b,0x45,0xd2,0x79,0xf3,0xcd,
+  0x37,0xeb,0xdd,0xbb,0xff,0xfe,0xfb,0xeb,0xf3,0x5b,0x6d,0xb5,0x55,0x68,0xfa,0x60,
+  0xc1,0x82,0x05,0xc1,0x33,0xdf,0x7d,0xf7,0x9d,0x7a,0xf7,0xdd,0x77,0xd3,0xa2,0xa9,
+  0x57,0x1b,0x39,0x27,0x00,0x86,0xd2,0x1a,0x6b,0xac,0xe1,0x2c,0x69,0xe9,0x08,0x70,
+  0xeb,0xad,0xb7,0x06,0x69,0xd7,0xd4,0xd4,0x04,0x6d,0x7f,0x39,0x47,0x9f,0x41,0xd4,
+  0xf0,0xf9,0xe7,0x9f,0x07,0x86,0x1d,0x56,0xfd,0xa5,0x97,0x5e,0xaa,0x8f,0x69,0x39,
+  0xd8,0xe1,0xdc,0x73,0xcf,0xd5,0xd7,0x56,0x5d,0x75,0xd5,0x7a,0x36,0x43,0x31,0x84,
+  0xac,0x08,0x80,0x81,0xe6,0xea,0x48,0x91,0xeb,0xf7,0xdd,0x77,0x9f,0x33,0xcd,0x2e,
+  0x5d,0xba,0x38,0xff,0x93,0x01,0x28,0x29,0x89,0xa6,0x31,0xd6,0xac,0x59,0x33,0x7d,
+  0x7e,0xe3,0x8d,0x37,0x56,0x3f,0xfe,0xf8,0x63,0xe4,0x8f,0x3b,0xf8,0xe0,0x83,0xf5,
+  0x73,0x3b,0xee,0xb8,0xa3,0x5a,0x77,0xdd,0x75,0xf5,0xf1,0x90,0x21,0x43,0x1a,0xdc,
+  0xc7,0x7b,0xca,0x3b,0x43,0x42,0x4f,0x80,0x88,0x04,0xd8,0x69,0xa7,0x9d,0xd4,0x5b,
+  0x6f,0xbd,0x55,0xaf,0xa7,0x8e,0x7a,0x9f,0x6b,0x08,0xcd,0x6e,0x36,0x49,0x9a,0xb4,
+  0x12,0xae,0xbe,0xfa,0xea,0x7a,0xfd,0x04,0xf4,0xcc,0x49,0xba,0x77,0xdf,0x7d,0x77,
+  0xbd,0xe7,0x68,0xf7,0xcb,0x35,0x0c,0x2b,0x4a,0xb7,0x04,0x9a,0x85,0xb4,0xe7,0xed,
+  0xe6,0x28,0xe1,0xfe,0xfb,0xef,0xaf,0x57,0x1f,0xaf,0xb6,0xda,0x6a,0x4e,0x02,0xfd,
+  0xfd,0xf7,0xdf,0xba,0x59,0x28,0x5a,0x80,0xe6,0xab,0x49,0x40,0x54,0x3f,0xef,0x40,
+  0xb3,0xd3,0x13,0xc0,0x20,0x80,0x00,0xa1,0x1f,0x78,0xe0,0x81,0x81,0xea,0x5f,0x65,
+  0x95,0x55,0x9c,0xdd,0xba,0x66,0x3f,0x80,0x58,0xe3,0x6d,0xdb,0xb6,0x0d,0x6c,0x06,
+  0xd0,0xa6,0x4d,0x1b,0x67,0x4f,0xa0,0xa8,0x70,0x40,0xdb,0x9f,0x16,0x01,0x1d,0x50,
+  0xf2,0x9f,0x1c,0xdb,0xe1,0x97,0x5f,0x7e,0xd1,0xff,0x21,0xcf,0x99,0x4d,0x45,0x3b,
+  0xbc,0xf7,0xde,0x7b,0xaa,0xb4,0xb4,0xb4,0x5e,0x27,0x17,0x06,0x9c,0x69,0x20,0x3e,
+  0xfb,0xec,0xb3,0xc5,0x43,0x80,0x8d,0x36,0xda,0x48,0x7f,0xf4,0x15,0x57,0x5c,0x11,
+  0x4a,0x80,0x29,0x53,0xa6,0x68,0x2d,0x60,0x0a,0x95,0x0c,0x7b,0xe5,0x95,0x57,0x52,
+  0x92,0x8a,0x76,0x37,0xfd,0xed,0x94,0x36,0x79,0x8e,0xe3,0x0b,0x2e,0xb8,0xa0,0x41,
+  0xef,0xa1,0x19,0x9e,0x7a,0xea,0xa9,0x7a,0x64,0x11,0x23,0x8f,0x16,0x00,0x5d,0xcb,
+  0xae,0x20,0x1d,0x3f,0xa6,0x61,0x19,0x16,0x7e,0xf8,0xe1,0x07,0xdd,0x77,0x21,0x7d,
+  0x05,0x02,0x9a,0x9a,0x68,0x1e,0x8c,0xba,0xa2,0x21,0x40,0x58,0x70,0x19,0x81,0x58,
+  0xd9,0x08,0xfd,0x9b,0x6f,0xbe,0x49,0xf9,0xac,0xad,0x55,0x28,0xe9,0xa8,0x6f,0xe0,
+  0x2a,0xf5,0x61,0x61,0xd1,0xa2,0x45,0xea,0x8d,0x37,0xde,0xd0,0xcf,0xe5,0xc3,0x68,
+  0xa3,0x4a,0xf8,0xf8,0xe3,0x8f,0x35,0x61,0x92,0xa8,0xf6,0x73,0x4e,0x80,0xa8,0xc1,
+  0x3b,0x99,0x78,0x02,0x78,0x02,0x78,0x02,0x78,0x02,0x2c,0xd3,0x04,0x98,0x35,0x6b,
+  0x96,0x1a,0x38,0x70,0xa0,0x1a,0x34,0x68,0x50,0xec,0xd1,0x31,0x9a,0x77,0x3c,0x9b,
+  0xce,0x18,0xf3,0xa1,0x09,0x13,0xc0,0x07,0x4f,0x00,0x1f,0x3c,0x01,0x7c,0xf0,0x04,
+  0xf0,0xc1,0x13,0xc0,0x07,0x4f,0x00,0x1f,0x3c,0x01,0x8a,0x23,0x24,0x75,0xae,0xa4,
+  0x27,0x40,0xc4,0x90,0xcf,0x4e,0x2c,0xc6,0x1e,0x3c,0x01,0x9a,0x78,0xc8,0xc7,0x5c,
+  0x49,0x26,0x9c,0xe0,0xb9,0x6c,0x7b,0x4f,0x7b,0x02,0x14,0x49,0xd8,0x65,0x97,0x5d,
+  0xb4,0x56,0x61,0x52,0x8a,0x27,0x40,0x96,0x21,0xd3,0x79,0x87,0xf6,0x5c,0xc7,0xaf,
+  0xbe,0xfa,0x4a,0xcf,0x4c,0xc2,0x25,0x7c,0xf8,0xf0,0xe1,0xce,0xf4,0x53,0x3d,0xcf,
+  0x0c,0x25,0xbc,0x87,0x70,0x60,0x39,0xfa,0xe8,0xa3,0x55,0xcf,0x9e,0x3d,0xb5,0x03,
+  0xa9,0x19,0x66,0xcf,0x9e,0xad,0x9f,0x91,0x6a,0x05,0x3f,0x45,0x7e,0x03,0xba,0xd8,
+  0xed,0x10,0x65,0x4e,0x64,0xdc,0xef,0x49,0x1c,0x01,0x32,0x9d,0x77,0x68,0x0e,0x6e,
+  0xe1,0x63,0x20,0xd3,0xd6,0xec,0xb9,0x83,0x51,0x3c,0xa4,0x3e,0xfb,0xec,0xb3,0xc0,
+  0xf5,0xdc,0x04,0xde,0x45,0xa6,0xff,0xa4,0xe9,0xfd,0x6c,0x03,0x0f,0x26,0x33,0x44,
+  0x9d,0x13,0x19,0xf7,0x7b,0x12,0x4b,0x80,0xb8,0xf3,0x0e,0xcd,0x0c,0x63,0x8e,0xa1,
+  0x4c,0x40,0x21,0xb3,0x10,0x54,0x1c,0x02,0x88,0xb7,0x12,0x02,0x87,0x6c,0xbb,0xee,
+  0xba,0x6b,0x70,0x0d,0x0f,0x28,0x53,0x03,0xdc,0x76,0xdb,0x6d,0x41,0x9a,0xbb,0xed,
+  0xb6,0x9b,0xfe,0x0d,0x18,0x2c,0x93,0x10,0x67,0x4e,0x64,0xdc,0xef,0x49,0x2c,0x01,
+  0xe2,0xce,0x3b,0x34,0x33,0x8c,0x89,0xae,0xe3,0xc6,0x8d,0x8b,0xd5,0x0a,0xb0,0x7d,
+  0x24,0xbb,0x77,0xef,0x1e,0x58,0xf5,0xc4,0xe2,0x93,0xc8,0xc4,0xd9,0xb8,0x36,0x40,
+  0x9c,0x39,0x91,0x71,0xbf,0x27,0xb1,0x04,0x88,0x33,0xef,0xd0,0xce,0xb0,0x01,0x03,
+  0x06,0xc4,0x6e,0x06,0x9a,0xcf,0x33,0xbf,0xc0,0x0e,0x38,0xb9,0x86,0xcd,0x47,0x48,
+  0x45,0x80,0x4c,0xe6,0x44,0xc6,0xf9,0x9e,0x44,0xdb,0x00,0xae,0xe0,0x9a,0x77,0x68,
+  0x67,0x58,0x2a,0x07,0x97,0x28,0x04,0x70,0xb9,0x9c,0x9f,0x7c,0xf2,0xc9,0x19,0x11,
+  0x20,0x93,0x39,0x91,0x71,0xbe,0xa7,0xe8,0x08,0xe0,0x9a,0x77,0x98,0x6b,0x02,0xb8,
+  0x9e,0xcf,0x94,0x00,0x99,0xce,0x89,0xf4,0x04,0x88,0x31,0xef,0xb0,0x29,0x13,0x20,
+  0xd3,0x39,0x91,0x9e,0x00,0x31,0xe6,0x1d,0x36,0x15,0x02,0xd0,0xbe,0x77,0xb5,0xfd,
+  0x33,0x99,0x13,0x59,0xf4,0x04,0x88,0x3b,0xef,0xb0,0x31,0x09,0x20,0xcd,0x39,0xd7,
+  0xac,0x26,0x42,0x26,0x73,0x22,0x8b,0x9e,0x00,0x71,0xe7,0x1d,0x36,0x26,0x01,0x30,
+  0xe6,0xe4,0x9d,0x59,0x6d,0xcd,0x0e,0x99,0xcc,0x89,0x6c,0x92,0x04,0xa0,0x3d,0xcc,
+  0x8a,0x1a,0x0c,0x7a,0x1c,0x7e,0xf8,0xe1,0x01,0x0e,0x3b,0xec,0x30,0xbd,0x3a,0x07,
+  0xb3,0x78,0x01,0xeb,0x09,0x00,0xce,0xd1,0x85,0x7b,0xe2,0x89,0x27,0xea,0x66,0x4e,
+  0xd7,0xae,0x5d,0xd5,0x0d,0x37,0xdc,0xa0,0x67,0xf6,0xd2,0x11,0x32,0x7d,0xfa,0x74,
+  0x3d,0x8d,0x2b,0xac,0x1f,0x20,0xce,0xbc,0xc3,0xc6,0x24,0x80,0x39,0x2b,0x99,0x4e,
+  0x1b,0xbe,0x99,0x2e,0x64,0x33,0xc4,0x9d,0x13,0xd9,0x64,0x08,0x80,0x9a,0x9d,0x3a,
+  0x75,0xaa,0xee,0x94,0x81,0xbd,0x22,0x74,0x96,0x71,0x93,0xd8,0x05,0xf3,0x9e,0xb0,
+  0xfb,0x5b,0xb5,0x6a,0xa5,0x3b,0x56,0x20,0x96,0xa8,0xf3,0x4c,0xe7,0x1d,0xd2,0x33,
+  0x28,0xf7,0x2d,0x5e,0xbc,0x38,0xf4,0x7b,0xc2,0xe6,0x4a,0xa6,0x7b,0x9e,0xfa,0x9d,
+  0x6b,0x54,0x41,0xae,0x70,0xdd,0x75,0xd7,0xd5,0x9b,0x94,0xba,0xdf,0x7e,0xfb,0x35,
+  0xb8,0x27,0xce,0x9c,0xc8,0xa8,0xdf,0x93,0x37,0x02,0x20,0x10,0xea,0x2b,0x98,0x4f,
+  0x69,0xa6,0x37,0xcb,0x04,0x2c,0x97,0xd8,0x3c,0x0e,0xbb,0x6e,0x82,0xf5,0x7a,0x10,
+  0x3e,0xa4,0x02,0xac,0x08,0x86,0x2a,0xe4,0x3f,0x73,0x35,0xef,0xb0,0x31,0x02,0xef,
+  0xcf,0xec,0x64,0x96,0xb0,0xb3,0x35,0x9b,0x19,0xf2,0x31,0x27,0x32,0xa7,0x04,0x40,
+  0xe5,0xd0,0x7e,0x3d,0xe6,0x98,0x63,0xf4,0x48,0x58,0xae,0x80,0xe0,0x99,0xbf,0x4f,
+  0x2f,0x9f,0xd9,0x19,0xc2,0x28,0x1b,0x19,0x81,0x26,0xf0,0xb3,0x8e,0x1a,0x91,0x00,
+  0x2c,0xa0,0x30,0x6a,0xd4,0xa8,0x60,0xb8,0x32,0x57,0x60,0xcd,0x81,0xbd,0xf6,0xda,
+  0x4b,0x75,0xec,0xd8,0xb1,0x41,0x4f,0x18,0xc0,0x28,0x62,0xb5,0x2f,0xb4,0x80,0x27,
+  0x40,0x81,0x09,0x40,0xa6,0xd3,0xa1,0x42,0x1d,0x84,0xba,0x17,0xb5,0x8c,0xe1,0x26,
+  0xb1,0x0b,0xe6,0x3d,0xae,0xfb,0xc5,0x66,0xa0,0x8d,0x4c,0x7d,0x4f,0xa9,0x37,0x49,
+  0x41,0x55,0x00,0x31,0x38,0x66,0x54,0x8d,0xea,0x86,0xc1,0x1d,0x4f,0x80,0x02,0x10,
+  0x80,0xba,0xea,0xed,0xb7,0xdf,0x56,0xdd,0xba,0x75,0xd3,0x82,0x61,0xb8,0xd5,0x06,
+  0x64,0x90,0xd8,0x05,0xf3,0x1e,0xfb,0x7e,0x84,0xcb,0x3a,0xbe,0xb4,0x08,0x10,0xb0,
+  0x08,0x9f,0x98,0xaa,0x00,0x62,0xb0,0x04,0x1d,0x96,0x30,0xe7,0xa8,0x37,0xbf,0xff,
+  0xfe,0x7b,0x4d,0x00,0x3f,0xef,0x30,0xcf,0x04,0xc0,0xe0,0xc2,0xbb,0x05,0x6b,0x36,
+  0x9f,0x40,0xb0,0x26,0xb0,0x27,0x30,0x26,0x71,0xb4,0x40,0xf0,0x8c,0xb1,0xb3,0x2a,
+  0x09,0xe7,0x59,0xb1,0x03,0x3b,0x20,0x89,0x4b,0xb8,0x36,0x19,0x02,0x50,0xea,0x11,
+  0x3e,0xcd,0xa8,0x7c,0x0b,0x1f,0x20,0x58,0x01,0x4e,0x10,0x18,0x7f,0x22,0x78,0x56,
+  0xfb,0x42,0x43,0x6c,0xbd,0xf5,0xd6,0x8d,0x4e,0x00,0xaa,0x40,0x56,0x44,0xf9,0xe8,
+  0xa3,0x8f,0x92,0x4b,0x00,0x84,0x4f,0xe6,0xe2,0xa9,0x52,0x08,0xe1,0x03,0x54,0x3d,
+  0x75,0x7f,0xcb,0x96,0x2d,0x03,0x75,0x2f,0x82,0x67,0xfd,0xa1,0x2d,0xb7,0xdc,0x52,
+  0xfb,0xe7,0xe7,0x8b,0x00,0xd8,0x14,0xd8,0x16,0x0c,0xb4,0x30,0x6a,0x88,0x2f,0x1e,
+  0xfd,0x0a,0x27,0x9d,0x74,0x92,0x7e,0x27,0xc8,0x87,0xd7,0x11,0x1d,0x4d,0x54,0x85,
+  0x38,0x67,0x2c,0xcb,0xfb,0x09,0x94,0xa4,0x63,0x39,0x6e,0x49,0x58,0xe2,0x85,0x22,
+  0x00,0x16,0x3f,0x82,0xe7,0x58,0xd4,0xbd,0x29,0x78,0xf6,0x22,0xa0,0x53,0x86,0xfb,
+  0xa2,0x12,0x00,0x0d,0x86,0xbf,0xde,0xeb,0xaf,0xbf,0xae,0x7b,0x12,0xe9,0x2c,0xb9,
+  0xfe,0xfa,0xeb,0xf5,0x02,0x52,0xd8,0x1b,0xfc,0x07,0x3d,0x71,0xac,0x15,0xcc,0x0a,
+  0x67,0x08,0x18,0xa3,0x12,0xb0,0xbe,0x20,0xc2,0x06,0xf4,0xc4,0x71,0x0f,0xab,0x90,
+  0x7f,0xfa,0xe9,0xa7,0xda,0x1d,0x8b,0xce,0x25,0xe9,0x8b,0x48,0x14,0x01,0x68,0x5b,
+  0xd3,0xc6,0xbe,0xe5,0x96,0x5b,0x0a,0x26,0x7c,0x21,0x80,0x08,0x5e,0xd4,0x3d,0xc2,
+  0xc7,0xcf,0x0e,0x21,0xe1,0x08,0x81,0x43,0x24,0x06,0x23,0x3d,0x8d,0x74,0x9e,0x3c,
+  0xf3,0xcc,0x33,0xda,0xe1,0x83,0x11,0x3f,0x76,0xf9,0xa0,0x23,0x09,0xd2,0xd2,0xc3,
+  0xc6,0xda,0x80,0xf4,0x9a,0xe1,0x12,0x86,0x40,0x21,0x0f,0xe9,0x90,0x06,0xc2,0xe5,
+  0x1c,0x83,0x2d,0x9b,0x6d,0xb6,0x99,0x76,0x17,0x63,0xa1,0x6b,0x13,0xa4,0xc1,0x7f,
+  0xb2,0x72,0x18,0xfe,0x85,0xac,0x8b,0x48,0xf3,0x93,0x92,0x8f,0x01,0x8a,0xeb,0x19,
+  0x1d,0x4d,0x89,0x23,0x00,0xa5,0x8a,0x8e,0x1d,0xac,0xf0,0x42,0x13,0x80,0x85,0x9e,
+  0x45,0xf0,0x08,0x00,0xe1,0x8b,0xe0,0x11,0x1e,0x02,0xc3,0xdf,0x8d,0xfe,0x70,0xce,
+  0xa3,0x15,0x38,0x27,0xa5,0x56,0x04,0x8a,0x00,0x19,0xfd,0xa3,0x1b,0x35,0x2a,0xf8,
+  0x6f,0x62,0x9e,0x83,0x2c,0x08,0xfe,0xec,0xb3,0xcf,0xd6,0x24,0x63,0x25,0x34,0xd6,
+  0x19,0xa6,0xf5,0x81,0x06,0x60,0x75,0x34,0xfa,0x21,0x12,0x47,0x00,0x3e,0x86,0xd2,
+  0xcf,0x07,0x32,0xd8,0x50,0x48,0x02,0x50,0xb2,0x45,0xdd,0x23,0x78,0x84,0x80,0x5b,
+  0x34,0x82,0x46,0x35,0xa3,0x82,0x39,0xc7,0xe2,0x94,0xf4,0x15,0xd0,0x1f,0x2e,0xb1,
+  0x79,0x4c,0x6c,0x83,0xf3,0x3c,0x27,0x55,0x0a,0xe4,0x22,0x2d,0xfe,0x07,0xc2,0x40,
+  0x24,0x08,0x84,0xba,0xa7,0x2a,0x60,0xf0,0x8a,0xd5,0x46,0x99,0x0d,0x84,0x47,0x11,
+  0xfb,0x10,0xe1,0xaa,0x05,0x01,0xd0,0x02,0x54,0x3f,0x68,0x00,0x0a,0x4b,0xa2,0x08,
+  0x80,0xfa,0x67,0x95,0x4d,0x3e,0xb2,0x90,0xc2,0x07,0x47,0x1c,0x71,0x44,0x50,0xcf,
+  0x23,0x78,0x31,0xb8,0x50,0xe5,0x94,0x68,0x8c,0x42,0xd4,0xbb,0x40,0x6c,0x05,0x0c,
+  0x45,0x11,0x2c,0xc2,0xe4,0x79,0xd1,0x1a,0x94,0x62,0x88,0xc3,0xe2,0xd1,0xc4,0xa4,
+  0x47,0xda,0xdc,0x87,0xa6,0xa1,0xba,0x21,0x1d,0x06,0x62,0x18,0x31,0x94,0xd1,0x48,
+  0xb4,0x51,0x18,0x30,0x56,0x25,0x36,0x8f,0xa3,0xde,0x6f,0x23,0xdd,0xf3,0x71,0xc0,
+  0x40,0x19,0xdd,0xe7,0x51,0x48,0x59,0x12,0x66,0xfc,0x31,0xf0,0xc0,0x62,0x89,0x8d,
+  0x41,0x00,0x11,0x3c,0x82,0x43,0xd5,0x53,0x2a,0x11,0xbe,0x59,0x15,0xd8,0x42,0xa5,
+  0x3a,0xa0,0x4e,0x47,0xfd,0x73,0x2f,0x6a,0x9c,0x12,0x0f,0x49,0x10,0x2c,0xbd,0x87,
+  0xf4,0x27,0x1c,0x72,0xc8,0x21,0x91,0x00,0x09,0x24,0x36,0x8f,0x73,0x75,0x7f,0x5c,
+  0xd8,0xe9,0xdb,0xe0,0x1a,0xe4,0x45,0x63,0xcb,0x48,0x2a,0x5a,0xdc,0x74,0x27,0x8f,
+  0x4c,0x00,0x54,0x1a,0xa3,0x52,0xef,0xbf,0xff,0x7e,0x41,0x85,0x4f,0x29,0xc6,0x10,
+  0xa3,0xb4,0x63,0x71,0x53,0x52,0xa5,0x8e,0xa7,0x44,0x73,0x8d,0x3a,0x1a,0xc1,0x72,
+  0x3f,0x7d,0x04,0x8c,0x0e,0xe2,0x22,0x0d,0xe3,0x25,0x36,0x8f,0x89,0x5d,0xd7,0x6d,
+  0x14,0xfa,0x7e,0x1b,0xe9,0xde,0x3f,0x15,0xd8,0xef,0x80,0x96,0x13,0xfe,0x15,0xe6,
+  0x50,0x3a,0x32,0x84,0x04,0xa9,0x34,0x41,0x28,0x01,0xb0,0x70,0xa9,0xeb,0x0a,0x25,
+  0x7c,0x1c,0x26,0xa8,0x9f,0x69,0x96,0xc9,0x47,0xf0,0x41,0x30,0x1a,0xf0,0x91,0xb9,
+  0x04,0x5a,0x41,0x62,0xf3,0x38,0x57,0xf7,0x17,0x02,0xfc,0x3f,0xf9,0x46,0xe9,0x37,
+  0x1d,0x6d,0xc4,0x6f,0x02,0xbf,0x42,0x19,0x2c,0x8b,0x4d,0x00,0xd9,0x11,0xa3,0xd0,
+  0x55,0x80,0x7c,0x00,0xec,0x47,0xa5,0x09,0xf0,0xee,0x91,0xd8,0x3c,0x0e,0xbb,0x9e,
+  0x0e,0xd9,0x3e,0x1f,0x37,0x7d,0x1b,0xe9,0xbe,0x27,0xdd,0xfd,0x54,0x6d,0xd4,0xf5,
+  0x61,0x0e,0x36,0x14,0x1e,0x7a,0x29,0x65,0xb0,0x6c,0x99,0x20,0x00,0xfd,0xfd,0x7c,
+  0x14,0x5d,0xc0,0xd4,0x6b,0x12,0xbb,0x60,0xde,0xe3,0xba,0x3f,0xdb,0xeb,0xe9,0x10,
+  0x37,0x7d,0x1b,0x99,0xbe,0x0f,0x25,0x1f,0x7b,0x26,0xcc,0xa3,0xca,0x84,0x39,0x58,
+  0xb6,0xcc,0x68,0x00,0x8f,0xd4,0x48,0x25,0x70,0x4a,0xbd,0xd8,0x01,0xc4,0x51,0x7a,
+  0x4a,0x3d,0x01,0x96,0x61,0x02,0x98,0xc2,0xb6,0x81,0xf6,0xf0,0x04,0x48,0x28,0x01,
+  0x5c,0x02,0x17,0xa1,0x4b,0x9c,0x77,0x02,0x60,0x99,0x47,0xad,0x2f,0x3d,0xe2,0x03,
+  0x43,0xcf,0x95,0xef,0xb6,0xc0,0x6d,0xa1,0x9b,0xc8,0x1b,0x01,0xb0,0x40,0x79,0x49,
+  0x3a,0x6d,0x4c,0x30,0x08,0x23,0xb1,0x79,0x4c,0x8c,0x71,0x67,0x36,0xa3,0xc2,0x80,
+  0xd7,0x8f,0x9d,0xee,0xb2,0x82,0x54,0xdf,0x1f,0x17,0x61,0x5d,0xf0,0x22,0x70,0x57,
+  0x89,0xb7,0x0d,0xc9,0xbc,0x11,0x80,0xce,0x07,0xba,0x1c,0xa5,0xbb,0xd4,0xe5,0xc2,
+  0x6d,0xba,0x7d,0xef,0xdb,0xbc,0x8d,0xda,0xaf,0xd5,0x99,0xaa,0xfd,0x61,0xd7,0xa8,
+  0x83,0x0f,0xfd,0x17,0x72,0x4c,0xac,0x51,0x7b,0xdc,0xb6,0x7d,0x77,0xb5,0xf3,0x2e,
+  0xad,0xf5,0x47,0xb8,0xba,0x38,0xed,0xff,0x33,0xcf,0xe5,0xe3,0x7e,0x1b,0xf6,0xf3,
+  0x51,0xbe,0x3f,0xd5,0xf3,0x61,0xe0,0xfb,0xc3,0x34,0x6f,0x2a,0xa1,0xdb,0xad,0x88,
+  0xbc,0x11,0x80,0x76,0xa7,0xe9,0xb9,0x93,0x0a,0xad,0x5a,0xb7,0x53,0x47,0x9f,0x78,
+  0xb3,0xba,0xa8,0xdb,0x04,0x75,0x61,0xb7,0xa7,0x75,0xac,0x71,0xb9,0x11,0x1b,0x68,
+  0x79,0xc0,0xa9,0xfa,0xe5,0xa3,0xa6,0x9f,0x4b,0x88,0x0b,0x9a,0xe9,0x8e,0x26,0x71,
+  0x21,0x81,0x26,0x4c,0x45,0x00,0x57,0x93,0xd2,0x6e,0x4e,0xe6,0x8d,0x00,0xa8,0xf1,
+  0x30,0x8f,0x5f,0x1b,0x7c,0x4c,0xcb,0x36,0x27,0xa8,0x2b,0x6f,0x7c,0x41,0x55,0xfe,
+  0x6f,0x6a,0x5a,0x5c,0xd6,0x73,0xa2,0x6a,0xd1,0xaa,0x3c,0xa5,0x57,0xb1,0x09,0xbc,
+  0x74,0x24,0x36,0x8f,0xa3,0xbe,0x5f,0x63,0xc3,0xf5,0xfe,0x94,0x6e,0x06,0xb7,0xc2,
+  0x08,0x60,0x97,0x72,0x7b,0xec,0xc1,0x3c,0xce,0x0b,0x01,0x48,0x38,0xcc,0x03,0xd8,
+  0xf6,0xf8,0x6d,0x7f,0x48,0x07,0x75,0x41,0xf7,0x7b,0x54,0xdf,0x51,0xb3,0x23,0x81,
+  0x7b,0x79,0x26,0x2c,0xbd,0x5c,0x7a,0x20,0x67,0x92,0x7e,0x21,0xd2,0xc3,0xbe,0x92,
+  0xb1,0x8e,0x30,0x02,0x84,0x0d,0x06,0xd9,0x83,0x4f,0x79,0x21,0x00,0x2a,0x91,0x71,
+  0x72,0x17,0xce,0x38,0xe3,0x8c,0x20,0x06,0x6d,0xdb,0x77,0x54,0xb7,0x8c,0x9c,0xa6,
+  0x86,0x3f,0x39,0xaf,0x21,0xc6,0x7d,0xfd,0x5f,0x5c,0x8b,0x01,0x0f,0x7c,0xa8,0x3a,
+  0x1c,0x79,0xba,0x9e,0x5c,0x12,0x96,0x9e,0x79,0x2e,0x1f,0xc8,0xf6,0xff,0xb2,0x7d,
+  0x9e,0xe1,0x60,0xbc,0xa0,0x18,0x14,0x0b,0x23,0x80,0x5d,0xd2,0xc3,0xc0,0xc8,0x67,
+  0x5e,0x08,0x20,0x33,0x76,0xa3,0xa0,0x6d,0xbb,0x0e,0xea,0xec,0xae,0xfd,0x54,0xcf,
+  0x81,0x13,0xd5,0x35,0x77,0x3c,0x1b,0xc4,0xfa,0xd8,0x88,0xbb,0xf5,0xaa,0x52,0x87,
+  0x1f,0xd7,0x29,0x6d,0xda,0xf8,0xf0,0x49,0x6c,0x1e,0x47,0x7d,0x9f,0x7c,0xa7,0x97,
+  0xcd,0xff,0x41,0x00,0x06,0x76,0x20,0x00,0xc0,0xef,0x21,0x4c,0x03,0xb8,0x4a,0xbb,
+  0x3d,0xd4,0x9d,0x37,0x02,0x60,0x00,0x9e,0x73,0xce,0x39,0x91,0xc0,0x47,0xd1,0xa4,
+  0x09,0xeb,0xb9,0x92,0xf3,0x30,0x9f,0x8c,0xb0,0x9f,0xc7,0x15,0x4b,0x62,0xf3,0x38,
+  0xea,0xff,0xa7,0x43,0xbe,0xd3,0x8f,0xfa,0x7f,0x10,0x00,0x8f,0x25,0x11,0x3e,0x80,
+  0x0c,0x61,0x1a,0xc0,0x55,0xda,0x5d,0xc8,0x0b,0x01,0x18,0x8f,0x47,0x60,0x2c,0x89,
+  0xc6,0x5c,0x81,0x8a,0x8a,0x0a,0x1d,0xbb,0x20,0xd7,0x88,0x5d,0xb0,0x9f,0xb7,0xef,
+  0x8f,0x7b,0x3d,0xdd,0xff,0xa7,0x4b,0x2f,0xdb,0xf7,0x8b,0xfb,0xfd,0x90,0x9e,0x82,
+  0x80,0x17,0x13,0xde,0x4c,0x26,0x01,0xc2,0x0c,0x41,0x5b,0xe8,0x36,0x01,0xcc,0xb5,
+  0x16,0xf2,0x46,0x00,0x9c,0x33,0x80,0xb8,0x4d,0xe3,0xc1,0x93,0x09,0xe4,0x59,0x62,
+  0xf3,0x38,0xea,0xf5,0xb8,0xe9,0x15,0xfa,0xfe,0x28,0xdf,0x8f,0x93,0xab,0x2d,0x7c,
+  0x10,0x66,0x08,0xda,0xa5,0x5c,0x84,0x6d,0x2e,0xb0,0x21,0x24,0xc8,0x0b,0x01,0xa8,
+  0x9b,0xf0,0xa3,0xc3,0x3d,0x0b,0xf7,0x2b,0x3c,0x76,0xc4,0x69,0x33,0x15,0xc4,0x63,
+  0xd7,0x06,0x19,0x90,0x6b,0x08,0x41,0xc5,0x05,0xdc,0x3c,0xce,0x16,0x61,0xdf,0x21,
+  0x48,0x97,0x0f,0x22,0x7c,0xd2,0x12,0x0f,0x27,0x5b,0xf8,0x80,0x2a,0x21,0x2e,0x01,
+  0x4c,0xd0,0xf3,0x5a,0x90,0xc1,0x20,0xf1,0xe4,0x71,0x7d,0x84,0x47,0xe6,0x08,0xb3,
+  0x01,0x52,0x09,0xdc,0x3e,0x2e,0xd8,0x68,0x20,0x5a,0x41,0x5c,0xae,0xbd,0xf0,0xb2,
+  0x03,0x4d,0x40,0x16,0x8f,0x0e,0xcb,0x6b,0x5b,0xf0,0xa6,0xd0,0x6d,0xf8,0xe1,0xe0,
+  0x04,0xc2,0x55,0xea,0x6d,0xc1,0x33,0xa0,0x06,0x3c,0x01,0x12,0x4a,0x00,0x57,0x69,
+  0x17,0xc1,0x7b,0x02,0x24,0x1c,0xae,0x92,0x6e,0x1e,0x03,0x7c,0x09,0x3c,0x01,0x12,
+  0x0a,0x5b,0xe0,0x2e,0xe1,0x7b,0x02,0x14,0x01,0x01,0x44,0xc8,0x66,0x89,0x37,0x63,
+  0xe0,0x09,0x90,0x50,0x02,0x98,0xc2,0x36,0x05,0xee,0x09,0x50,0x04,0x08,0x13,0xbc,
+  0x6b,0x92,0x89,0x27,0x40,0x42,0x09,0x10,0x75,0x26,0x92,0x27,0x40,0x02,0x61,0x97,
+  0xf4,0x30,0x30,0x7b,0xc8,0x13,0x20,0xa1,0x1a,0x20,0x4c,0xe0,0x9e,0x00,0x45,0xa2,
+  0x01,0x5c,0xc2,0x77,0xc1,0x13,0x20,0xc1,0x04,0x10,0x21,0xdb,0x04,0x90,0xf5,0x05,
+  0x3c,0x01,0x12,0x0a,0xbb,0x94,0x8b,0xb0,0x25,0x36,0x49,0xe0,0x09,0x50,0x24,0x04,
+  0x08,0x5b,0x91,0x24,0x27,0x04,0xc0,0x35,0xc9,0xa3,0xe9,0xc0,0x2c,0xf1,0xae,0x25,
+  0x68,0xcc,0x63,0xaf,0x01,0x12,0x88,0x54,0x25,0xde,0x86,0x27,0x40,0xc2,0x09,0x10,
+  0xb6,0x90,0x14,0x0b,0x67,0x01,0x4f,0x80,0x84,0x12,0x20,0x6c,0xb5,0x30,0x59,0x31,
+  0xcd,0x13,0x20,0xc1,0x70,0x95,0x74,0xf3,0x18,0xb0,0xaa,0xb9,0x27,0x40,0x42,0x61,
+  0x0b,0xdc,0x16,0xbe,0xb9,0x8c,0x9d,0x27,0x40,0x82,0x09,0x20,0xa5,0x5c,0x84,0x2e,
+  0x8b,0x6f,0xb0,0xd2,0x1a,0x0b,0x68,0x12,0x7b,0x02,0x24,0x94,0x00,0xa6,0xd0,0x81,
+  0x29,0x74,0x56,0x0c,0x95,0x75,0x94,0x3d,0x01,0x12,0x08,0x11,0xbc,0x08,0x1c,0x98,
+  0x8b,0x67,0x33,0x9f,0x00,0xb7,0x72,0x62,0x4f,0x80,0x04,0x42,0x04,0x6f,0x0b,0x5d,
+  0x20,0xcb,0xe2,0xb3,0xcd,0x8d,0x27,0x40,0x02,0xe1,0x2a,0xe9,0xe6,0x3e,0x09,0x4c,
+  0xce,0x61,0x06,0x37,0xfb,0x0d,0xcf,0x9a,0x35,0x2b,0xfb,0x95,0x42,0xa9,0x6f,0x7c,
+  0xc6,0x37,0x0d,0x88,0xc0,0xcd,0x0d,0x30,0x88,0x99,0x4d,0x84,0xe0,0x01,0xc6,0x21,
+  0x7b,0x28,0x56,0x57,0x57,0xeb,0xb5,0x82,0x59,0xf6,0x3f,0xab,0xc5,0xa2,0x0b,0xbd,
+  0x65,0x8c,0x47,0x38,0xd8,0xd8,0x02,0x81,0x8b,0xb0,0x45,0xf0,0xb2,0xdd,0x0d,0x2b,
+  0xb2,0x0d,0x19,0x32,0x44,0x8d,0x1d,0x3b,0x56,0xef,0x6c,0xf2,0xc5,0x17,0x5f,0xe8,
+  0x8d,0x3f,0xd8,0x00,0x24,0xe3,0xe5,0xe2,0xd9,0x5d,0xcb,0x67,0x7e,0xe3,0x83,0x81,
+  0x20,0x11,0xba,0xec,0x6b,0x24,0x7b,0x1c,0xb1,0xbf,0x51,0x97,0x2e,0x5d,0xd4,0xa0,
+  0x41,0x83,0xf4,0xe6,0xdd,0x93,0x27,0x4f,0xd6,0xbb,0xbd,0x51,0x88,0xd9,0xd5,0x2c,
+  0xa3,0xfd,0x02,0xd8,0x6c,0xe0,0x83,0x0f,0x3e,0xd0,0x6c,0xda,0x67,0x9f,0x7d,0xbc,
+  0x10,0x1a,0x59,0xf8,0xe6,0xc6,0x56,0x08,0x1c,0x30,0x29,0xb7,0x73,0xe7,0xce,0x7a,
+  0xb7,0xb4,0xc1,0x83,0x07,0x6b,0xe1,0x4f,0x9a,0x34,0x49,0x17,0x5c,0x36,0xb5,0x64,
+  0x3f,0xa3,0x8c,0x76,0x0c,0xe1,0x21,0x76,0x0c,0x63,0xcb,0x18,0x12,0x2c,0xc4,0x96,
+  0xb1,0x1e,0x6e,0x50,0xcf,0x8b,0xd0,0x59,0x97,0x01,0x50,0x2d,0xa3,0x99,0xd9,0xd0,
+  0x73,0xc0,0x80,0x01,0x6a,0xf8,0xf0,0xe1,0xea,0xa1,0x87,0x1e,0xd2,0x25,0x9f,0x6a,
+  0x9b,0x2d,0xed,0x50,0xfd,0x51,0x36,0xb3,0x82,0x00,0x4b,0x52,0x6d,0x1a,0xc5,0xbe,
+  0x7c,0x30,0xab,0x50,0x5b,0xc7,0x7a,0xd4,0xdf,0x42,0x47,0x4a,0x3b,0x6d,0x7f,0x76,
+  0x2a,0xed,0xdd,0xbb,0xb7,0xea,0xdb,0xb7,0xaf,0xba,0xe3,0x8e,0x3b,0xb4,0xe0,0xd9,
+  0xd5,0x6c,0xdc,0xb8,0x71,0x7a,0x0f,0x45,0x34,0x36,0x25,0x3f,0xaa,0xf0,0x91,0x3d,
+  0x04,0xa8,0x09,0xdb,0x36,0x6e,0xfe,0xfc,0xf9,0x6a,0xc6,0x8c,0x19,0xba,0x49,0x31,
+  0x62,0xc4,0x08,0xd5,0xa3,0x47,0x0f,0x5f,0x1d,0x14,0x50,0xf8,0xcd,0x9a,0x35,0xd3,
+  0x6b,0x00,0xf5,0xea,0xd5,0x2b,0x28,0xed,0x18,0x79,0xf7,0xdc,0x73,0x8f,0x2e,0xf1,
+  0xc8,0x65,0xca,0x94,0x29,0x7a,0x47,0xf7,0x39,0x73,0xe6,0xa8,0x05,0x0b,0x16,0xc4,
+  0xdd,0xc6,0xae,0x06,0x02,0x54,0xa7,0xda,0x38,0x72,0xee,0xdc,0xb9,0x7a,0x4b,0xf6,
+  0x47,0x1e,0x79,0x44,0x0d,0x1b,0x36,0x4c,0xf5,0xeb,0xd7,0x4f,0x55,0x56,0x56,0xfe,
+  0xbb,0x0c,0xac,0x6f,0x22,0xe6,0x65,0xb8,0x97,0x25,0xe0,0x4e,0x3d,0xf5,0x54,0x5d,
+  0xb7,0x53,0xda,0x07,0x0e,0x1c,0xa8,0x0b,0x20,0xa5,0xfd,0xf1,0xc7,0x1f,0xd7,0x4d,
+  0x3c,0x36,0xb1,0x9c,0x39,0x73,0xa6,0x16,0x3c,0xa5,0x9e,0xe6,0x9e,0xec,0x12,0x16,
+  0x63,0x0f,0xc3,0x6a,0x08,0x50,0x99,0x6a,0xf3,0xc8,0x85,0x0b,0x17,0x06,0x9b,0x29,
+  0x43,0x02,0x5e,0x84,0x0d,0x95,0xfb,0xf4,0xe9,0xa3,0x5f,0x90,0xad,0x65,0xc1,0xcd,
+  0x37,0xdf,0xec,0x91,0x05,0x24,0x1f,0xc9,0x53,0x4a,0x7b,0xff,0xfe,0xfd,0xb5,0x61,
+  0x47,0x9b,0x9e,0xd2,0x3e,0x61,0xc2,0x04,0x2d,0x83,0xe9,0xd3,0xa7,0x6b,0x79,0xd0,
+  0xc4,0xa3,0xc4,0x53,0x48,0xd9,0x1b,0x99,0x02,0x9b,0xaa,0xb9,0x17,0x12,0x2a,0x21,
+  0x40,0x19,0x76,0x5f,0x98,0x31,0xc8,0x06,0xc9,0x54,0x05,0xfc,0x29,0x9a,0x00,0xb5,
+  0x33,0x66,0xcc,0x18,0xfd,0x62,0x6c,0xc2,0x3c,0x74,0xe8,0x50,0xad,0x96,0x3c,0xb2,
+  0x07,0x79,0x49,0x9e,0x8e,0x1c,0x39,0x52,0x8d,0x1e,0x3d,0x5a,0x3d,0xf6,0xd8,0x63,
+  0x6a,0xe2,0xc4,0x89,0xc1,0x6e,0xa5,0x6c,0x57,0x4b,0x69,0xa7,0x85,0x46,0x3d,0x9f,
+  0xe5,0xc6,0xd5,0xc8,0xbc,0xac,0x84,0x50,0x7b,0x50,0x15,0xa6,0x05,0x84,0x04,0x68,
+  0x02,0xaa,0x03,0x6c,0x02,0x0c,0x43,0x5a,0x07,0xb0,0x72,0xfc,0xf8,0xf1,0xda,0x08,
+  0x61,0x57,0x6e,0x8f,0xcc,0x41,0x1e,0x92,0x97,0x6c,0x51,0x8b,0xd0,0x29,0xed,0xd3,
+  0xa6,0x4d,0xd3,0xed,0x79,0x4a,0x3b,0xf9,0xbf,0x78,0xf1,0xe2,0x7a,0xa5,0x3d,0xcb,
+  0xed,0x6a,0xab,0x4a,0x24,0xd4,0xfe,0x28,0xad,0xc5,0xa2,0x54,0x24,0xa0,0x3a,0x40,
+  0xdd,0xb0,0x9f,0x30,0xad,0x03,0x9a,0x88,0x6c,0x2c,0x09,0x33,0x69,0x7a,0x78,0x64,
+  0x0f,0xf2,0x92,0x3c,0x45,0xdb,0x52,0xd8,0xe6,0xcd,0x9b,0xa7,0x3b,0xe4,0x72,0x50,
+  0xda,0xed,0x80,0xac,0x4b,0x4b,0xcc,0x50,0x7b,0xa2,0x3c,0xac,0x2a,0x10,0x22,0xc0,
+  0x3c,0x88,0xc0,0x0b,0x41,0x06,0x54,0x11,0x2f,0x08,0xe8,0x75,0xf2,0xc8,0x1c,0x92,
+  0x8f,0xe4,0x29,0x06,0x1d,0x1b,0x3e,0x52,0xda,0xd9,0x99,0x3c,0x07,0xa5,0xdd,0x56,
+  0xfd,0xe5,0x25,0xae,0x50,0x7b,0xa1,0x22,0x15,0x09,0x84,0x08,0xbc,0x10,0x6c,0x84,
+  0x10,0x1e,0xb9,0x07,0x79,0x9b,0x63,0xa1,0x9b,0xc2,0xaf,0x28,0x49,0x15,0xea,0x34,
+  0xc1,0x22,0xe5,0x43,0xd2,0xc2,0xa2,0xd0,0x92,0xef,0x20,0x41,0x69,0x9d,0x61,0xb8,
+  0xd4,0xe7,0xdb,0x32,0x1f,0x96,0xd6,0xc9,0xb2,0xb4,0x24,0x6e,0xa8,0x6b,0x22,0x56,
+  0xd6,0x75,0x16,0xd5,0xb8,0xba,0x8d,0x7d,0x68,0x72,0x61,0x49,0x9d,0xac,0xaa,0xeb,
+  0x64,0x57,0x96,0x4a,0xc6,0xff,0x07,0x09,0xd2,0xdd,0xcf,0xb2,0x57,0xe1,0x2d,0x00,
+  0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82,
   
 };
diff --git a/tools/printer-sm-png.h b/tools/printer-sm-png.h
new file mode 100644 (file)
index 0000000..033ccc8
--- /dev/null
@@ -0,0 +1,235 @@
+static const unsigned char printer_sm_png[] =
+{
+  0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,
+  0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x30,0x08,0x03,0x00,0x00,0x00,0x60,0xdc,0x09,
+  0xb5,0x00,0x00,0x04,0x19,0x69,0x43,0x43,0x50,0x6b,0x43,0x47,0x43,0x6f,0x6c,0x6f,
+  0x72,0x53,0x70,0x61,0x63,0x65,0x47,0x65,0x6e,0x65,0x72,0x69,0x63,0x52,0x47,0x42,
+  0x00,0x00,0x38,0x8d,0x8d,0x55,0x5d,0x68,0x1c,0x55,0x14,0x3e,0xbb,0x73,0x67,0x23,
+  0x24,0xce,0x53,0x6c,0x34,0x85,0x74,0xa8,0x3f,0x0d,0x25,0x0d,0x93,0x56,0x34,0xa1,
+  0xb4,0xba,0x7f,0xdd,0xdd,0x36,0x6e,0x96,0x49,0x36,0xda,0x22,0xe8,0x64,0xf6,0xee,
+  0xce,0x98,0xc9,0xce,0x38,0x33,0xbb,0xfd,0xa1,0x4f,0x45,0x50,0x7c,0x31,0xea,0x9b,
+  0x14,0xc4,0xbf,0xb7,0x80,0x20,0x28,0xf5,0x0f,0xdb,0x3e,0xb4,0x2f,0x95,0x0a,0x25,
+  0xda,0xd4,0x20,0x28,0x3e,0xb4,0xf8,0x83,0x50,0xe8,0x8b,0xa6,0xeb,0x99,0x3b,0x33,
+  0x99,0x69,0xba,0xb1,0xde,0x65,0xee,0x7c,0xf3,0x9d,0xef,0x9e,0x7b,0xee,0xb9,0x67,
+  0xef,0x05,0xe8,0xb9,0xaa,0x58,0x96,0x91,0x14,0x01,0x16,0x9a,0xae,0x2d,0x17,0x32,
+  0xe2,0x73,0x87,0x8f,0x88,0x3d,0x2b,0x90,0x84,0x87,0xa0,0x17,0x06,0xa1,0x57,0x51,
+  0x1d,0x2b,0x5d,0xa9,0x4c,0x02,0x36,0x4f,0x0b,0x77,0xb5,0x5b,0xdf,0x43,0xc2,0x7b,
+  0x5f,0xd9,0xd5,0xdd,0xfe,0x9f,0xad,0xb7,0x46,0x1d,0x15,0x20,0x71,0x1f,0x62,0xb3,
+  0xe6,0xa8,0x0b,0x88,0x8f,0x01,0xf0,0xa7,0x55,0xcb,0x76,0x01,0x7a,0xfa,0x91,0x1f,
+  0x3f,0xea,0x5a,0x1e,0xf6,0x62,0xe8,0xb7,0x31,0x40,0xc4,0x2f,0x7a,0xb8,0xe1,0x63,
+  0xd7,0xc3,0x73,0x3e,0x7e,0x8d,0x69,0x66,0xe4,0x2c,0xe2,0xd3,0x88,0x05,0x55,0x53,
+  0x6a,0x88,0x97,0x10,0x8f,0xcc,0xc5,0xf8,0x46,0x0c,0xfb,0x31,0xb0,0xd6,0x5f,0xa0,
+  0x4d,0x6a,0xeb,0xaa,0xe8,0xe5,0xa2,0x62,0x9b,0x75,0xdd,0xa0,0xb1,0x70,0xef,0x61,
+  0xfe,0x9f,0x6d,0xc1,0x68,0x85,0xf3,0x6d,0xc3,0xa7,0xcf,0x99,0x9f,0x3e,0x84,0xef,
+  0x61,0x5c,0xfb,0x2b,0x35,0x25,0xe7,0xe1,0x51,0xc4,0x4b,0xaa,0x92,0x9f,0x46,0xfc,
+  0x08,0xe2,0x6b,0x6d,0x7d,0xb6,0x1c,0xe0,0xdb,0x96,0x9b,0x91,0x11,0x3f,0x06,0x90,
+  0xdc,0xde,0x9a,0xaf,0xa6,0x11,0xef,0x44,0x5c,0xac,0xdb,0x07,0xaa,0xbe,0x9f,0xa4,
+  0xad,0xb5,0x8a,0x21,0x7e,0xe7,0x84,0x36,0xf3,0x2c,0xe2,0x2d,0x88,0xcf,0x37,0xe7,
+  0xca,0x53,0xc1,0xd8,0xab,0xaa,0x93,0xc5,0x9c,0xc1,0x76,0xc4,0xb7,0x35,0x5a,0xf2,
+  0xf2,0x3b,0x04,0xc0,0x89,0xba,0x5b,0x9a,0xf1,0xc7,0x72,0xfb,0x6d,0x53,0x9e,0xf2,
+  0xe7,0xe5,0xea,0x35,0x9a,0xcb,0x7b,0x79,0x44,0xfc,0xfa,0xbc,0x79,0x48,0xf6,0x7d,
+  0x72,0x9f,0x39,0xed,0xe9,0x7c,0xe8,0xf3,0x84,0x96,0x2d,0x07,0xfc,0xa5,0x97,0x94,
+  0x83,0x15,0xc4,0x83,0x88,0x7f,0xa1,0x46,0x41,0xf6,0xe7,0xe2,0xfe,0xb1,0xdc,0x4a,
+  0x10,0x03,0x19,0x6a,0x1a,0xe5,0x49,0x7f,0x2e,0x92,0xa3,0x0e,0x5b,0x2f,0xe3,0x5d,
+  0x6d,0xa6,0xe8,0xcf,0x4b,0x0c,0x17,0x37,0xd4,0x1f,0x4b,0x16,0xeb,0xfa,0x81,0x52,
+  0xa0,0xff,0x44,0xb3,0x8b,0x72,0x80,0xaf,0x59,0x06,0xab,0x51,0x8c,0x8d,0x4f,0xda,
+  0x2d,0xb9,0xea,0xeb,0xf9,0x51,0xc5,0xce,0x17,0x7c,0x9f,0x7c,0x85,0x36,0xab,0x81,
+  0x7f,0xbe,0x0d,0xb3,0x09,0x05,0x28,0x98,0x30,0x87,0xbd,0x0a,0x4d,0x58,0x03,0x11,
+  0x64,0x28,0x40,0x06,0xdf,0x16,0xd8,0x68,0xa9,0x83,0x0e,0x06,0x32,0x14,0xad,0x14,
+  0x19,0x8a,0x5f,0xa1,0x66,0x17,0x1b,0xe7,0xc0,0x3c,0xf2,0x3a,0xb4,0x99,0xcd,0xc1,
+  0xbe,0xc2,0x94,0xfe,0xc8,0xc8,0x5f,0x83,0xf9,0xb8,0xce,0xb4,0x2a,0x64,0x87,0x3e,
+  0x82,0x16,0xb2,0x1a,0xfc,0x8e,0xac,0x16,0xd3,0x65,0xf1,0xab,0x85,0x5c,0x63,0x13,
+  0x3f,0x7e,0x2c,0x37,0x02,0x3f,0x26,0x19,0x20,0x12,0xd9,0x83,0xcf,0x5e,0x32,0x49,
+  0xf6,0x91,0x71,0x32,0x01,0x22,0x79,0x8a,0x3c,0x4d,0xf6,0x93,0x1c,0xb2,0x13,0x64,
+  0xef,0xfa,0xd8,0x4a,0x6c,0x45,0x5e,0x3c,0x37,0xd6,0xfd,0xbc,0x8c,0x33,0x52,0xa6,
+  0x9b,0x45,0xdd,0x39,0xb4,0xbb,0xa0,0x60,0xff,0x33,0x2a,0x4c,0x5c,0x53,0xd7,0xac,
+  0x2c,0x0e,0xb6,0x86,0x23,0xcb,0x29,0xfb,0x05,0x5d,0xbd,0xfc,0xc6,0x5f,0xb1,0x5c,
+  0xe9,0x2c,0x37,0x51,0xb6,0xe2,0x19,0x9d,0xba,0x57,0xce,0xf9,0x5f,0xf9,0xeb,0xfc,
+  0x32,0xf6,0x2b,0xfc,0x6a,0xa4,0xe0,0x7f,0xe4,0x57,0xf1,0xb7,0x72,0xc7,0x5a,0xcc,
+  0xbb,0xb2,0x4c,0xc3,0xec,0x6c,0x58,0x73,0x77,0x55,0x1a,0x6d,0x06,0xe3,0x16,0xf0,
+  0xd1,0x99,0xc5,0x89,0xc5,0x1d,0xf3,0x71,0xf1,0xe4,0x57,0x0f,0x46,0x7e,0x96,0xc9,
+  0x99,0xe7,0xaf,0xf4,0x5d,0x3c,0x59,0x6f,0x2e,0x0e,0x46,0xac,0x97,0x05,0xfa,0x6a,
+  0xf9,0x56,0x19,0x4e,0x8d,0x44,0xac,0xf4,0x83,0xf4,0x87,0xb4,0x2c,0xbd,0x27,0x7d,
+  0x28,0xfd,0xc6,0xbd,0xcd,0x7d,0xca,0x7d,0xcd,0x7d,0xce,0x7d,0xc1,0x5d,0x02,0x91,
+  0x3b,0xcb,0x9d,0xe3,0xbe,0xe1,0x2e,0x70,0x1f,0x73,0x5f,0xc6,0xf6,0x6a,0xf3,0x1a,
+  0x5a,0xdf,0x7b,0x16,0x79,0x18,0xb7,0x67,0xe9,0x96,0x6b,0xac,0x4a,0x21,0x23,0x6c,
+  0x15,0x1e,0x16,0x72,0xc2,0x36,0xe1,0x51,0x61,0x32,0xf2,0x27,0x0c,0x08,0x63,0x42,
+  0x51,0xd8,0x81,0x96,0xad,0xeb,0xfb,0x16,0x9f,0x2f,0x9e,0x3d,0x1d,0x0e,0x63,0x1f,
+  0xe6,0xa7,0xfb,0x5c,0xbe,0x2e,0x56,0x01,0x89,0xfb,0xb1,0x02,0xf4,0x4d,0xfe,0x55,
+  0x55,0x54,0xe9,0x70,0x94,0x29,0x1d,0x56,0x6f,0x4d,0x38,0xbe,0x41,0x13,0x8c,0x24,
+  0x43,0x64,0x8c,0x94,0x36,0x54,0xf7,0xb8,0x57,0xf3,0xa1,0x22,0x95,0x4f,0xe5,0x52,
+  0x69,0x10,0x53,0x3b,0x53,0x13,0xa9,0xb1,0xd4,0x41,0x0f,0x87,0xb3,0xa6,0x76,0xa0,
+  0x6d,0x02,0xfb,0xfc,0x1d,0xd5,0xa9,0x6e,0xb2,0x52,0xea,0xd2,0x63,0xde,0x7d,0x02,
+  0x59,0xd3,0x3a,0x6e,0xeb,0x0d,0xcd,0x15,0x77,0x4b,0xd2,0x93,0x62,0x1a,0xaf,0x36,
+  0x2a,0x96,0x9a,0xea,0xe8,0x88,0xa8,0x18,0x86,0xc8,0x4c,0x8e,0x68,0x53,0x87,0xda,
+  0x6d,0x5a,0x1b,0x05,0xef,0xde,0xf4,0x8f,0xf4,0x9b,0x32,0xbb,0x0f,0x13,0x5b,0x2e,
+  0x47,0x9c,0xfb,0x0c,0xc0,0xbe,0x3f,0xf1,0xec,0xfb,0x2e,0xe2,0x8e,0xb4,0x00,0x96,
+  0x1c,0x80,0x81,0xc7,0x23,0x6e,0x18,0xcf,0xca,0x07,0xde,0x05,0x38,0xf3,0x84,0xda,
+  0xb2,0xdb,0xc1,0x1d,0x91,0x48,0x7c,0x0b,0xe0,0xd4,0xf7,0xec,0xf6,0xbf,0xfa,0x32,
+  0x78,0x7e,0xfd,0xd4,0xe9,0xdc,0xc4,0x73,0xac,0xe7,0x2d,0x80,0xb5,0x37,0x3b,0x9d,
+  0xbf,0xdf,0xef,0x74,0xd6,0x3e,0x40,0xff,0xab,0x00,0x67,0x8d,0x7f,0x01,0xa0,0x9f,
+  0x7c,0x55,0x03,0x5c,0x0b,0xef,0x00,0x00,0x00,0x38,0x65,0x58,0x49,0x66,0x4d,0x4d,
+  0x00,0x2a,0x00,0x00,0x00,0x08,0x00,0x01,0x87,0x69,0x00,0x04,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x00,0x00,0x02,0xa0,0x02,0x00,0x04,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x30,0xa0,0x03,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x30,0x00,0x00,0x00,0x00,0xf8,0xff,0x4e,0x36,0x00,0x00,0x03,0x62,0x69,0x54,
+  0x58,0x74,0x58,0x4d,0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,
+  0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00,0x3c,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,
+  0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,
+  0x65,0x3a,0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20,0x78,0x3a,0x78,0x6d,
+  0x70,0x74,0x6b,0x3d,0x22,0x58,0x4d,0x50,0x20,0x43,0x6f,0x72,0x65,0x20,0x35,0x2e,
+  0x34,0x2e,0x30,0x22,0x3e,0x0a,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52,0x44,
+  0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72,0x64,0x66,0x3d,0x22,0x68,0x74,0x74,
+  0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,
+  0x39,0x39,0x39,0x2f,0x30,0x32,0x2f,0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,
+  0x6e,0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,
+  0x6e,0x20,0x72,0x64,0x66,0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x0a,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,
+  0x3a,0x64,0x63,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x70,0x75,0x72,0x6c,
+  0x2e,0x6f,0x72,0x67,0x2f,0x64,0x63,0x2f,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,
+  0x2f,0x31,0x2e,0x31,0x2f,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x49,0x70,0x74,0x63,0x34,0x78,0x6d,
+  0x70,0x45,0x78,0x74,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x69,0x70,0x74,
+  0x63,0x2e,0x6f,0x72,0x67,0x2f,0x73,0x74,0x64,0x2f,0x49,0x70,0x74,0x63,0x34,0x78,
+  0x6d,0x70,0x45,0x78,0x74,0x2f,0x32,0x30,0x30,0x38,0x2d,0x30,0x32,0x2d,0x32,0x39,
+  0x2f,0x22,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78,
+  0x6d,0x6c,0x6e,0x73,0x3a,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3d,0x22,
+  0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,
+  0x63,0x6f,0x6d,0x2f,0x70,0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x2f,0x31,0x2e,
+  0x30,0x2f,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,
+  0x63,0x3a,0x63,0x72,0x65,0x61,0x74,0x6f,0x72,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x53,0x65,0x71,0x3e,
+  0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+  0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x4d,0x69,0x63,0x68,0x61,0x65,0x6c,0x20,
+  0x53,0x77,0x65,0x65,0x74,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,
+  0x3a,0x53,0x65,0x71,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,
+  0x2f,0x64,0x63,0x3a,0x63,0x72,0x65,0x61,0x74,0x6f,0x72,0x3e,0x0a,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x64,0x63,0x3a,0x72,0x69,0x67,0x68,0x74,0x73,
+  0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,
+  0x64,0x66,0x3a,0x41,0x6c,0x74,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x6c,0x69,0x20,0x78,
+  0x6d,0x6c,0x3a,0x6c,0x61,0x6e,0x67,0x3d,0x22,0x78,0x2d,0x64,0x65,0x66,0x61,0x75,
+  0x6c,0x74,0x22,0x3e,0x43,0x6f,0x70,0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x32,0x30,
+  0x31,0x30,0x20,0x41,0x70,0x70,0x6c,0x65,0x20,0x49,0x6e,0x63,0x2e,0x3c,0x2f,0x72,
+  0x64,0x66,0x3a,0x6c,0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+  0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x41,0x6c,0x74,0x3e,0x0a,0x20,0x20,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x64,0x63,0x3a,0x72,0x69,0x67,0x68,
+  0x74,0x73,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x49,0x70,
+  0x74,0x63,0x34,0x78,0x6d,0x70,0x45,0x78,0x74,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,
+  0x6e,0x65,0x3e,0x4e,0x65,0x77,0x20,0x49,0x6d,0x61,0x67,0x65,0x3c,0x2f,0x49,0x70,
+  0x74,0x63,0x34,0x78,0x6d,0x70,0x45,0x78,0x74,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,
+  0x6e,0x65,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x68,
+  0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,0x6e,0x65,
+  0x3e,0x4e,0x65,0x77,0x20,0x49,0x6d,0x61,0x67,0x65,0x3c,0x2f,0x70,0x68,0x6f,0x74,
+  0x6f,0x73,0x68,0x6f,0x70,0x3a,0x48,0x65,0x61,0x64,0x6c,0x69,0x6e,0x65,0x3e,0x0a,
+  0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,
+  0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,
+  0x66,0x3a,0x52,0x44,0x46,0x3e,0x0a,0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,
+  0x74,0x61,0x3e,0x0a,0xa0,0x50,0x98,0x64,0x00,0x00,0x02,0xa0,0x50,0x4c,0x54,0x45,
+  0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfe,0xff,
+  0xff,0xff,0xfc,0xfc,0xfc,0xff,0xff,0xff,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,
+  0x02,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x07,
+  0x08,0x08,0x08,0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0c,0x0c,0x0c,0x0d,
+  0x0d,0x0d,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x11,0x11,0x11,0x12,0x12,0x12,0x13,0x13,
+  0x13,0x14,0x14,0x14,0x15,0x15,0x15,0x16,0x16,0x16,0x18,0x18,0x18,0x19,0x19,0x19,
+  0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x21,
+  0x21,0x21,0x22,0x22,0x22,0x23,0x23,0x23,0x24,0x24,0x24,0x25,0x25,0x25,0x26,0x26,
+  0x26,0x27,0x27,0x27,0x28,0x28,0x28,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2c,0x2c,0x2c,
+  0x2d,0x2d,0x2d,0x2d,0x2e,0x39,0x2e,0x2e,0x2e,0x2e,0x2e,0x39,0x2e,0x2f,0x35,0x2f,
+  0x2f,0x2f,0x2f,0x2f,0x3a,0x30,0x30,0x30,0x31,0x31,0x31,0x32,0x32,0x32,0x33,0x33,
+  0x33,0x34,0x34,0x34,0x35,0x35,0x35,0x36,0x36,0x36,0x37,0x37,0x37,0x38,0x38,0x38,
+  0x38,0x3c,0x55,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3c,0x3b,0x3b,0x3b,0x3c,
+  0x3c,0x3c,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x43,0x60,0x3f,0x3f,0x3f,0x40,0x40,
+  0x40,0x41,0x41,0x41,0x41,0x42,0x45,0x41,0x44,0x4c,0x42,0x42,0x42,0x43,0x43,0x43,
+  0x44,0x44,0x44,0x45,0x45,0x45,0x46,0x46,0x46,0x47,0x47,0x47,0x48,0x48,0x48,0x49,
+  0x49,0x49,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4e,0x4e,
+  0x4e,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x51,0x51,0x51,0x52,0x52,0x52,0x53,0x53,0x53,
+  0x54,0x54,0x54,0x55,0x55,0x55,0x56,0x56,0x56,0x57,0x57,0x57,0x58,0x58,0x58,0x59,
+  0x59,0x59,0x5a,0x5a,0x5a,0x5b,0x5b,0x5b,0x5c,0x5c,0x5c,0x5e,0x5e,0x5e,0x5f,0x5f,
+  0x5f,0x5f,0x6e,0x90,0x60,0x60,0x60,0x60,0x69,0xa2,0x61,0x61,0x61,0x62,0x62,0x62,
+  0x63,0x63,0x63,0x65,0x65,0x65,0x66,0x66,0x66,0x67,0x67,0x67,0x68,0x68,0x68,0x6a,
+  0x6a,0x6a,0x6a,0x7a,0xa0,0x6b,0x6b,0x6b,0x6c,0x6c,0x6c,0x6d,0x6d,0x6d,0x71,0x71,
+  0x71,0x71,0x82,0xab,0x71,0x83,0xac,0x72,0x72,0x72,0x74,0x74,0x74,0x76,0x76,0x76,
+  0x77,0x77,0x77,0x79,0x79,0x79,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7f,0x7f,0x7f,0x80,
+  0x80,0x80,0x81,0x81,0x81,0x82,0x82,0x82,0x83,0x83,0x83,0x84,0x84,0x84,0x85,0x85,
+  0x85,0x86,0x86,0x86,0x87,0x87,0x87,0x8a,0x8a,0x8a,0x8c,0x8c,0x8c,0x8d,0x8d,0x8d,
+  0x8e,0x8e,0x8e,0x90,0x90,0x90,0x91,0x91,0x91,0x92,0x92,0x92,0x93,0x93,0x93,0x96,
+  0x96,0x96,0x98,0x98,0x98,0x9b,0x9b,0x9b,0x9d,0x9d,0x9d,0x9f,0x9f,0x9f,0xa0,0xa0,
+  0xa0,0xa2,0xa2,0xa2,0xa3,0xa3,0xa3,0xa6,0xa6,0xa6,0xa7,0xa7,0xa7,0xa8,0xa8,0xa8,
+  0xaa,0xaa,0xaa,0xab,0xab,0xab,0xad,0xad,0xad,0xae,0xae,0xae,0xaf,0xaf,0xaf,0xb0,
+  0xb0,0xb0,0xb2,0xb2,0xb2,0xb4,0xb4,0xb4,0xb7,0xb7,0xb7,0xb9,0xb9,0xb9,0xba,0xba,
+  0xba,0xbb,0xbb,0xbb,0xbc,0xbc,0xbc,0xbd,0xbd,0xbd,0xbe,0xbe,0xbe,0xc0,0xc0,0xc0,
+  0xc2,0xc2,0xc2,0xc3,0xc3,0xc3,0xc4,0xc4,0xc4,0xc5,0xc5,0xc5,0xc6,0xc6,0xc6,0xc7,
+  0xc7,0xc7,0xc9,0xc9,0xc9,0xca,0xca,0xca,0xcc,0xcc,0xcc,0xcd,0xcd,0xcd,0xce,0xce,
+  0xce,0xd0,0xd0,0xd0,0xd1,0xd1,0xd1,0xd4,0xd4,0xd4,0xd8,0xd8,0xd8,0xd9,0xd9,0xd9,
+  0xda,0xda,0xda,0xdb,0xdb,0xdb,0xdc,0xdc,0xdc,0xdd,0xdd,0xdd,0xde,0xde,0xde,0xdf,
+  0xdf,0xdf,0xe0,0xe0,0xe0,0xe2,0xe2,0xe2,0xe3,0xe3,0xe3,0xe5,0xe5,0xe5,0xe6,0xe6,
+  0xe6,0xe9,0xe9,0xe9,0xea,0xea,0xea,0xeb,0xeb,0xeb,0xed,0xed,0xed,0xee,0xee,0xee,
+  0xef,0xef,0xef,0xf0,0xf0,0xf0,0xf1,0xf1,0xf1,0xf2,0xf2,0xf2,0xf3,0xf3,0xf3,0xf4,
+  0xf4,0xf4,0xf6,0xf6,0xf6,0xf7,0xf7,0xf7,0xf8,0xf8,0xf8,0xf9,0xf9,0xf9,0xfa,0xfa,
+  0xfa,0xfb,0xfb,0xfb,0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfe,0xfe,0xfe,0xff,0xff,0xff,
+  0x96,0xb7,0x1b,0xef,0x00,0x00,0x00,0x08,0x74,0x52,0x4e,0x53,0x00,0x08,0x7f,0xc4,
+  0xdc,0xdc,0xfc,0xfc,0x86,0xfa,0x37,0x3a,0x00,0x00,0x03,0x97,0x49,0x44,0x41,0x54,
+  0x18,0x19,0x95,0xc1,0x6f,0x68,0xd4,0x75,0x1c,0xc0,0xf1,0xf7,0xe7,0xfb,0xfb,0xfe,
+  0xee,0xcf,0xe6,0xb1,0x73,0x53,0xdb,0xfa,0xc3,0xc2,0x1d,0x35,0xcc,0x1c,0x4a,0x60,
+  0x89,0x3e,0x50,0xfa,0x43,0x52,0x4a,0x52,0x94,0x48,0x33,0x0c,0x1f,0x84,0x21,0x3d,
+  0xe8,0x0f,0xe1,0xa3,0x20,0x0c,0x83,0x11,0x42,0x04,0xd2,0x1f,0xb0,0x7a,0x12,0x14,
+  0x66,0xd1,0x13,0x35,0x08,0x4b,0x4b,0x54,0xc4,0xd4,0x5c,0x63,0x78,0xe8,0x6a,0x59,
+  0x6a,0xdb,0xed,0x76,0xdb,0xfd,0xee,0xee,0xf7,0xfd,0xf4,0xbb,0x6d,0xa2,0x79,0x3a,
+  0xcf,0xd7,0x4b,0x10,0xf1,0x4c,0x2f,0xf5,0xe8,0x74,0xa1,0xaa,0x88,0xe9,0xa7,0x7e,
+  0x19,0x67,0xe4,0xf0,0xaf,0xd4,0xaf,0x5f,0x8c,0x37,0x36,0xc0,0x2d,0xf0,0xac,0xa9,
+  0x8c,0xd1,0x73,0xcf,0x2f,0xab,0x16,0x1f,0xb8,0x74,0xac,0x7d,0xf5,0xcc,0x93,0xbb,
+  0x16,0x3c,0xf1,0xc1,0x86,0xc6,0x3d,0x6d,0xb3,0x76,0xf9,0x6b,0x5a,0xa8,0x61,0x4c,
+  0x6f,0xe1,0x08,0x9f,0x8d,0x3c,0xf7,0x6a,0xe9,0xfc,0xce,0x55,0x43,0x7b,0x83,0x2d,
+  0x2f,0x1d,0x3f,0x65,0x0e,0xba,0xf7,0xdb,0x7b,0x96,0xb7,0xed,0xa3,0x56,0xaf,0x25,
+  0x92,0x5c,0x47,0x7b,0x96,0x75,0x0b,0x83,0xdd,0x99,0x0b,0xef,0x5c,0x1c,0x5c,0xbe,
+  0xa3,0x69,0x59,0x7c,0xaf,0x16,0xe6,0x0d,0xf6,0xc0,0x83,0xcf,0xf0,0x3f,0x96,0x88,
+  0x2b,0xc6,0x06,0xdb,0x4f,0x16,0xf9,0xa7,0xab,0x63,0xc6,0x36,0x0b,0xd9,0x1d,0xaf,
+  0xc4,0xbb,0x36,0xcd,0x85,0x1e,0x6a,0x58,0x22,0xe1,0xd6,0x73,0x9b,0x13,0x7c,0x7d,
+  0xac,0xfc,0x7a,0xd3,0xcb,0x2f,0xb6,0x3e,0xf2,0x70,0xf7,0xa7,0xf7,0xb3,0x79,0x5b,
+  0x3a,0xb3,0x91,0x5a,0x92,0x05,0x1e,0xfa,0xb9,0x98,0xe0,0x2b,0x59,0x99,0x00,0x2a,
+  0xe5,0x24,0x93,0xf2,0x29,0xae,0xc3,0x12,0x79,0x96,0x04,0xb4,0x49,0x82,0x88,0xb5,
+  0x4c,0x49,0x71,0x3d,0x92,0xe5,0xd6,0x18,0x6e,0x91,0xe1,0xc6,0x8e,0x0f,0x53,0xcb,
+  0x70,0x63,0x03,0xe3,0x4c,0xf8,0x84,0xab,0x58,0x6a,0x7c,0x91,0xda,0xbf,0xec,0xf1,
+  0x81,0x1f,0x87,0x17,0x15,0x2a,0x67,0x0f,0x94,0xb2,0x1b,0xb2,0xef,0x9d,0x5b,0x9f,
+  0xd8,0xe5,0xaf,0x69,0xe9,0xe9,0x18,0x5f,0x8b,0xa1,0xc6,0xe1,0x43,0x2f,0x7c,0x7e,
+  0xaa,0xb0,0x7d,0xc9,0xc2,0xc3,0x85,0xc2,0xbb,0x99,0xfb,0xbe,0x5f,0xd2,0xf8,0x5a,
+  0x7b,0xcf,0xf2,0xb6,0x7d,0xec,0xf4,0x56,0x82,0x65,0x8a,0x73,0x0a,0x82,0x88,0xb0,
+  0xb6,0xf3,0xd1,0xfe,0x7b,0x57,0x2c,0x22,0xf2,0xd8,0xd2,0x83,0x87,0x62,0xd2,0x18,
+  0xec,0xd5,0xc2,0x3c,0x1a,0x9f,0x04,0x2c,0x13,0xb4,0xd2,0xff,0xe5,0x88,0xb1,0x5e,
+  0x43,0x73,0x6b,0xa7,0x16,0x39,0xf3,0x34,0x57,0xf1,0x82,0x78,0xd7,0xa6,0xb9,0x4c,
+  0xb2,0x44,0x34,0x1c,0xf9,0xb6,0x8f,0x18,0x12,0x8e,0xe6,0x8e,0xfc,0xe0,0x3e,0x72,
+  0xed,0xf3,0x7f,0xe7,0x8a,0xe7,0xdf,0x7c,0x63,0xf3,0xb6,0x74,0x66,0xa3,0x10,0x91,
+  0x2c,0x1a,0x9e,0xf9,0x69,0x80,0x2a,0x1d,0x1d,0x6b,0xca,0xcd,0xba,0xb8,0xa9,0x23,
+  0x01,0xaa,0xea,0xb4,0x70,0x62,0xe6,0x7c,0x81,0xe1,0x34,0xe4,0x53,0x4c,0xb0,0x50,
+  0xd9,0xff,0x21,0x53,0x32,0x7a,0x36,0xd7,0xfc,0x40,0xd2,0x2f,0xeb,0xd8,0xf1,0xd3,
+  0x47,0x7f,0xcb,0xb9,0xa7,0xb6,0xa8,0x40,0x1a,0x48,0x31,0xc9,0xe2,0x8a,0xdf,0x71,
+  0x99,0xeb,0x1b,0xaf,0x54,0x5a,0xf7,0x1c,0x3d,0x9d,0xab,0x58,0x5f,0xc6,0x1a,0xb6,
+  0x76,0x71,0x2d,0x8b,0x2b,0x0e,0x72,0x99,0x1b,0x2d,0xbb,0x6f,0x76,0x83,0xe7,0x25,
+  0x5c,0xe0,0x56,0x74,0xb7,0x18,0x57,0x12,0x2e,0x13,0xf1,0x0c,0x16,0x57,0x62,0x4a,
+  0x30,0x32,0x98,0x0f,0xed,0x0c,0xdf,0x7a,0x7e,0xcc,0x4b,0xfa,0x7e,0xe9,0x63,0x15,
+  0xae,0x08,0x0b,0xa9,0xed,0x09,0x63,0xa1,0xc2,0xa4,0x20,0x48,0xde,0x19,0x36,0x59,
+  0xae,0x6f,0xd8,0xcd,0x69,0xd6,0x51,0xdf,0x58,0x54,0x99,0x14,0x8f,0x13,0x70,0x89,
+  0x1b,0xb8,0x0b,0x55,0x2d,0x2a,0x96,0x2a,0xef,0x76,0x95,0xa1,0x7c,0xd9,0xc8,0x1d,
+  0x56,0x14,0x51,0xe1,0x1a,0xa5,0xbf,0x55,0x41,0x9d,0x62,0x89,0xd8,0xbb,0x8d,0x14,
+  0xfc,0xc5,0x70,0x22,0x96,0x04,0x54,0x94,0x2a,0x51,0x41,0x45,0x89,0x5c,0xc0,0x89,
+  0x52,0x65,0x89,0xa4,0x1b,0xe0,0xdf,0x8e,0x26,0x2d,0xa7,0xd2,0x5c,0x45,0x54,0x50,
+  0x51,0x60,0x30,0xef,0x2b,0x4a,0x95,0x25,0x92,0x68,0x74,0x6e,0xf6,0x5f,0x7f,0x3a,
+  0x3b,0xdb,0x29,0xaa,0xa2,0xa2,0x22,0x88,0x08,0x46,0xc4,0x9a,0x7c,0xdf,0x25,0xdf,
+  0xc7,0x81,0x02,0x96,0xc8,0x1f,0xd9,0xc0,0xa9,0xa2,0x0a,0x28,0x53,0x04,0x04,0x41,
+  0x04,0x35,0x80,0x03,0x42,0xc0,0x52,0xe5,0x7b,0x65,0xa6,0x63,0x7c,0x20,0x54,0x01,
+  0x2c,0x13,0x4c,0x9c,0x9b,0x08,0x15,0x71,0x80,0xa5,0x4e,0xaa,0x28,0x11,0x4b,0x9d,
+  0xd4,0xa1,0x02,0x18,0xea,0xe4,0x50,0x14,0xb0,0x40,0x91,0x3a,0x9c,0xbf,0x4d,0x95,
+  0x88,0x05,0x12,0xd4,0x21,0xe5,0x84,0x2a,0x4b,0xbd,0x1c,0x04,0x80,0xa5,0x4e,0x61,
+  0x09,0x19,0x17,0xb0,0xd4,0x29,0x07,0x41,0xe8,0x09,0x16,0x31,0x4d,0x39,0x6e,0x2e,
+  0x20,0xf0,0xde,0x8a,0x1b,0x4c,0xa7,0xd8,0xa5,0xdc,0xdc,0x50,0xb9,0x65,0xfd,0xdb,
+  0xad,0x0d,0x5e,0xa7,0x75,0x26,0xbe,0x40,0x0f,0xe4,0x98,0x5e,0xbe,0xb9,0x7b,0x56,
+  0x3a,0x95,0x4a,0x88,0xb3,0xa1,0x69,0x98,0xb3,0x28,0x53,0x72,0x4c,0x47,0x6c,0x43,
+  0x7a,0x46,0x32,0xee,0x1b,0x42,0x11,0xd3,0x17,0x8c,0x05,0x65,0x65,0x3a,0x62,0x63,
+  0xc9,0x98,0x35,0x90,0x71,0x82,0x88,0x31,0x27,0x55,0x99,0x96,0x18,0x4f,0xe8,0x74,
+  0xa1,0xea,0x7f,0x66,0xc2,0x6f,0x17,0x59,0xdf,0xbf,0x1b,0x00,0x00,0x00,0x00,0x49,
+  0x45,0x4e,0x44,0xae,0x42,0x60,0x82,
+  
+};
diff --git a/tools/printer-sm.png b/tools/printer-sm.png
new file mode 100644 (file)
index 0000000..e87527e
Binary files /dev/null and b/tools/printer-sm.png differ
index 9bb5196aa1f1ae2537e5547d8923ee1174b6028f..1d499b63296f902cbb0b165a8b868530ed5e0840 100644 (file)
Binary files a/tools/printer.png and b/tools/printer.png differ
index 4ad1dc8f13b8aa046bd8c715a8d252cd557c115b..b74bf2e09af77bd653561b92c492c155796382ad 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Configuration file for CUPS on Windows.
  *
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2007-2022 by Apple Inc.
  * Copyright © 1997-2007 by Easy Software Products.
  *
  * Licensed under Apache License v2.0.  See the file "LICENSE" for more
@@ -97,8 +97,8 @@ typedef unsigned long useconds_t;
  * Version of software...
  */
 
-#define CUPS_SVERSION "CUPS v2.3.1"
-#define CUPS_MINIMAL "CUPS/2.3.1"
+#define CUPS_SVERSION "CUPS v2.3.6"
+#define CUPS_MINIMAL "CUPS/2.3.6"
 
 
 /*
@@ -330,9 +330,8 @@ typedef unsigned long useconds_t;
  * Do we have the (v)snprintf() functions?
  */
 
-/* Windows snprintf/vsnprintf are non-conforming */
-/* #undef HAVE_SNPRINTF */
-/* #undef HAVE_VSNPRINTF */
+#define HAVE_SNPRINTF 1
+#define HAVE_VSNPRINTF 1
 
 
 /*
index 25131dd6ccc50d4a7da099f26b812048605ac10a..952367928af3d2c3c3bcb8168d612a8278ac3200 100644 (file)
@@ -102,7 +102,7 @@ DNSServiceErrorType DNSSD_API DNSServiceAddRecord
   if (dnssd_add_record)
     return (*dnssd_add_record)(sdRef, RecordRef, flags, rrtype, rdlen, rdata, ttl);
   else
-    return (-1);
+    return (kDNSServiceErr_ServiceNotRunning);
 }
 
 
@@ -124,7 +124,7 @@ DNSServiceErrorType DNSSD_API DNSServiceBrowse
   if (dnssd_browse)
     return (*dnssd_browse)(sdRef, flags, interfaceIndex, regtype, domain, callBack, context);
   else
-    return (-1);
+    return (kDNSServiceErr_ServiceNotRunning);
 }
 
 
@@ -156,7 +156,7 @@ DNSServiceErrorType DNSSD_API DNSServiceCreateConnection(DNSServiceRef *sdRef)
   if (dnssd_create_connection)
     return (*dnssd_create_connection)(sdRef);
   else
-    return (-1);
+    return (kDNSServiceErr_ServiceNotRunning);
 }
 
 
@@ -169,7 +169,7 @@ DNSServiceErrorType DNSSD_API DNSServiceProcessResult(DNSServiceRef sdRef)
   if (dnssd_process_result)
     return (*dnssd_process_result)(sdRef);
   else
-    return (-1);
+    return (kDNSServiceErr_ServiceNotRunning);
 }
 
 
@@ -192,7 +192,7 @@ DNSServiceErrorType DNSSD_API DNSServiceQueryRecord
   if (dnssd_query_record)
     return (*dnssd_query_record)(sdRef, flags, interfaceIndex, fullname, rrtype, rrclass, callBack, context);
   else
-    return (-1);
+    return (kDNSServiceErr_ServiceNotRunning);
 }
 
 
@@ -216,7 +216,7 @@ int DNSSD_API DNSServiceRefSockFD(DNSServiceRef sdRef)
   if (dnssd_sock_fd)
     return (*dnssd_sock_fd)(sdRef);
   else
-    return (-1);
+    return (kDNSServiceErr_ServiceNotRunning);
 }
 
 
@@ -243,7 +243,7 @@ DNSServiceErrorType DNSSD_API DNSServiceRegister
   if (dnssd_register)
     return (*dnssd_register)(sdRef, flags, interfaceIndex, name, regtype, domain, host, port, txtLen, txtRecord, callBack, context);
   else
-    return (-1);
+    return (kDNSServiceErr_ServiceNotRunning);
 }
 
 
@@ -261,7 +261,7 @@ DNSServiceErrorType DNSSD_API DNSServiceRemoveRecord
   if (dnssd_remove_record)
     return (*dnssd_remove_record)(sdRef, RecordRef, flags);
   else
-    return (-1);
+    return (kDNSServiceErr_ServiceNotRunning);
 }
 
 
@@ -284,7 +284,7 @@ DNSServiceErrorType DNSSD_API DNSServiceResolve
   if (dnssd_resolve)
     return (*dnssd_resolve)(sdRef, flags, interfaceIndex, name, regtype, domain, callBack, context);
   else
-    return (-1);
+    return (kDNSServiceErr_ServiceNotRunning);
 }
 
 
@@ -305,7 +305,7 @@ DNSServiceErrorType DNSSD_API DNSServiceUpdateRecord
   if (dnssd_update_record)
     return (*dnssd_update_record)(sdRef, RecordRef, flags, rdlen, rdata, ttl);
   else
-    return (-1);
+    return (kDNSServiceErr_ServiceNotRunning);
 }
 
 
index a5a4767676fe73bd180493497fa52072547f5e97..21b1212d9eaaa27db6319944c5875052ade0c18b 100644 (file)
                278C58EA136B64B000836530 /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; };
                278C58EB136B64B000836530 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; };
                278C58EC136B64B000836530 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; };
+               279AE6F52395B80F004DD600 /* libpam.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 279AE6F42395B80F004DD600 /* libpam.tbd */; };
                27A034821A8BDC3A00650675 /* lpadmin.c in Sources */ = {isa = PBXBuildFile; fileRef = 2732E08D137A3F5200FAFEF6 /* lpadmin.c */; };
                27A034851A8BDC5C00650675 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; };
                7200511218F492F200E7B81B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; };
                278C58E6136B64B000836530 /* Kerberos.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Kerberos.framework; path = /System/Library/Frameworks/Kerberos.framework; sourceTree = "<absolute>"; };
                278C58E7136B64B000836530 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = /System/Library/Frameworks/Security.framework; sourceTree = "<absolute>"; };
                278C58E8136B64B000836530 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = /System/Library/Frameworks/SystemConfiguration.framework; sourceTree = "<absolute>"; };
+               279AE6F42395B80F004DD600 /* libpam.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libpam.tbd; path = usr/lib/libpam.tbd; sourceTree = SDKROOT; };
                27A0347B1A8BDB1300650675 /* lpadmin */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = lpadmin; sourceTree = BUILT_PRODUCTS_DIR; };
                27D3037D134148CB00F022B1 /* libcups2.def */ = {isa = PBXFileReference; lastKnownFileType = text; name = libcups2.def; path = ../cups/libcups2.def; sourceTree = "<group>"; };
                27F89DA21B3AC43B00E5A4B7 /* testraster.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testraster.c; path = ../cups/testraster.c; sourceTree = "<group>"; };
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               279AE6F52395B80F004DD600 /* libpam.tbd in Frameworks */,
                                273B1ECA226B420C00428143 /* libcups.dylib in Frameworks */,
                                2767FC6619267538000F61D3 /* CoreFoundation.framework in Frameworks */,
                                2767FC6719267538000F61D3 /* libresolv.dylib in Frameworks */,
                72220FB113330B4A00FCA411 /* Frameworks */ = {
                        isa = PBXGroup;
                        children = (
+                               279AE6F42395B80F004DD600 /* libpam.tbd */,
                                2767FC591926750C000F61D3 /* CoreFoundation.framework */,
                                2767FC5A1926750C000F61D3 /* libiconv.dylib */,
                                2767FC5B1926750C000F61D3 /* libresolv.dylib */,
index 38998eee645d423f8ee0259070947531849d0e13..f05007751f52a1268e0aedba4eef3a3e1f1b071f 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Configuration file for CUPS and Xcode.
  *
- * Copyright 2007-2019 by Apple Inc.
+ * Copyright 2007-2022 by Apple Inc.
  * Copyright 1997-2007 by Easy Software Products.
  *
  * Licensed under Apache License v2.0.  See the file "LICENSE" for more information.
@@ -18,8 +18,8 @@
  * Version of software...
  */
 
-#define CUPS_SVERSION "CUPS v2.3.1"
-#define CUPS_MINIMAL "CUPS/2.3.1"
+#define CUPS_SVERSION "CUPS v2.3.6"
+#define CUPS_MINIMAL "CUPS/2.3.6"
 
 
 /*