(example 48)" was fixed (was introduced in 5.8.046).
+
+5.9.046 (2011-01-18)
+ - PDF view/print layers are now automatically turned off if not used (see setVisibility() method).
+
+5.9.045 (2011-01-17)
+ - HTML list support were improved.
+
+5.9.044 (2011-01-15)
+ - Bug #3158422 "writeHTMLCell Loop" was fixed.
+ - Some HTML image alignment problems were fixed.
+
+5.9.043 (2011-01-14)
+ - Bug #3158178 "PHP Notice" was fixed.
+ - Bug #3158193 "Endless loop in writeHTML" was fixed.
+ - Bug #3157764 "SVG Pie chart incorrectly rendered2".
+
+5.9.042 (2011-01-14)
+ - Some problems of the PHP4 version were fixed.
+
+5.9.041 (2011-01-13)
+ - A problem with SVG elliptical arc path was fixed (ref. bug #3156574).
+ - A problem related to font weight on HTML table headers was fixed.
+
+5.9.040 (2011-01-12)
+ - A bug related to empty pages after table was fixed.
+
+5.9.039 (2011-01-12)
+ - Bug item #3155759 "openssl_random_pseudo_bytes() slow under Windows" was fixed.
+
+5.9.038 (2011-01-11)
+ - Minor bugs were fixed.
+
+5.9.037 (2011-01-09)
+ - An alignment problem for HTML texts was fixed.
+
+5.9.036 (2011-01-07)
+ - A bug related to HTML tables on header was fixed.
+
+5.9.035 (2011-01-03)
+ - A problem related to HTML table border alignment was fixed.
+ - Bug #2996366 "FastCGI and Header Problems" was fixed.
+
+5.9.034 (2010-12-19)
+ - DejaVu and GNU Free fonts were updated.
+
+5.9.033 (2010-12-18)
+ - Source code documetnation was improved.
+
+5.9.032 (2010-12-18)
+ - Default font stretching and spacing values are now inherited by HTML methods.
+
+5.9.031 (2010-12-16)
+ - Source code documentation errors were fixed.
+
+5.9.030 (2010-12-16)
+ - Several source code documentation errors were fixed.
+ - Source code style was changed for Doxygen.
+ - Source code documentation was moved online to http://www.tcpdf.org
+
+5.9.029 (2010-12-04)
+ - The $fitbox parameter on Image() method was extended to specify image alignment inside the box (check the example n. 9).
+
+5.9.028 (2010-12-03)
+ - Font utils makefont.php and makeallttffonts.php were updated.
+
+5.9.027 (2010-12-01)
+ - Spot Colors are now better integrated with HTML mode.
+ - Method SetDocInfoUnicode() was added to turn on/off Unicode mode for document information dictionary (meta tags) - check the example n. 19.
+
+5.9.026 (2010-12-01)
+ - A problem with mixed text directions on HTML was fixed.
+
+5.9.025 (2010-12-01)
+ - The AddSpotColor() now automatically fills the spotcolor array (defined on spotcolors.php file).
+
+5.9.024 (2010-11-30)
+ - Bug item #3123612 "SVG not use gradientTransform in percentage mode" was fixed.
+
+5.9.023 (2010-11-25)
+ - A potential bug on SVG transcoder was fixed.
+
+5.9.022 (2010-11-21)
+ - Method ImageEPS includes support for EPS/AI Spot colors.
+ - Method ImageEPS includes a new parameter $fixoutvals to remove values outside the bounding box.
+
+5.9.021 (2010-11-20)
+ - Support for custom bullet points images was added (check the example n.6)
+ - Examples n. 6 and 61 were update (check the comments inside).
+
+5.9.020 (2010-11-19)
+ - A problem related to additional page when using multicolumn mode was fixed.
+
+5.9.019 (2010-11-19)
+ - An SVG bug was fixed.
+ - ImageSVG() and ImageEPS() methods now accepts image data streams (put the string on the $file parameter preceded by '@' character).
+ - Option 'E' was added to the $dest parameter of Output() method to return the document as base64 mime multi-part email attachment (RFC 2045).
+
+5.9.018 (2010-11-19)
+ - An SVG bug was fixed.
+
+5.9.017 (2010-11-16)
+ - Tagline color was set to transparent.
+ - The method fixHTMLCode() was added to automatically clean up HTML code (requires HTML Tidy).
+
+5.9.016 (2010-11-16)
+ - Bug item #3109705 "list item page break hanging bullet" was fixed.
+
+5.9.015 (2010-11-16)
+ - Bug item affecting QRCode was fixed.
+ - Some bugs affecting HTML lists were fixed.
+ - ImageSVG() and fitBlock() methods were improved to handle some SVG problems.
+ - Some problems with PHP4 compatibility were fixed.
+
+5.9.014 (2010-11-15)
+ - Bug item #3109464 "QRCode error" was fixed.
+
+5.9.013 (2010-11-15)
+ - Bug item #3109257 "Problem with interlaced GIFs and PNGs" was fixed.
+ - Image function now accepts image data streams (check example n. 9).
+
+5.9.012 (2010-11-12)
+ - Method getTCPDFVersion() was added.
+ - PDF_PRODUCER constant was removed.
+ - Method convertHTMLColorToDec() was improved.
+ - HTML colors now support spot color names defined on the new spotcolors.php file.
+ - The default method Header() was improved to support SVG and EPS/AI images.
+ - A bug on SVG importer was fixed.
+
+5.9.011 (2010-11-02)
+ - Bug item #3101486 "Bug Fix for image loading" was fixed.
+
+5.9.010 (2010-10-27)
+ - Support for CSS properties 'border-spacing' and 'padding' for tables were added.
+ - Several language files were added.
+
+5.9.009 (2010-10-21)
+ - HTML text alignment was improved to include the case of RTL text on LTR direction and LTR text on RTL direction.
+
+5.9.008 (2010-10-21)
+ - Bug item #3091502 "Bookmark oddity" was fixed.
+ - HTML internal links now accepts page number and Y position.
+ - The method write1DBarcode() was improved to accept separate horizontal and vertical padding (see example n. 27).
+
+5.9.007 (2010-10-20)
+ - Method adjustCellPadding() was fixed to handle bad input.
+
+5.9.006 (2010-10-19)
+ - Support for AES 256 bit encryption was added (see example n. 16).
+ - Method getNumLines() was fixed for the empty string case.
+
+5.9.005 (2010-10-18)
+ - Method addPageRegion() was changed to accept regions starting exactly from the top of the page.
+
+5.9.004 (2010-10-18)
+ - A bug related to annotations was fixed.
+ - The file unicode_data.php was canged to encapsulate all data in a class.
+ - The file htmlcolors.php was changed to remove the global variable.
+
+5.9.003 (2010-10-15)
+ - Support for no-write page regions was added. Check the example n. 64 and new methods setPageRegions(), addPageRegion(), getPageRegions(), removePageRegion().
+ - A bug on Right-To-Left alignment was fixed.
+
+5.9.002 (2010-10-08)
+ - Cell method was improved to preserve the font stretching and spacing values when using the $stretch parameter (see example n. 4).
+
+5.9.001 (2010-10-07)
+ - The problem of blank page for nobr table higher than a single page was fixed.
+
+5.9.000 (2010-10-06)
+ - Support for text stretching and spacing (kerning) was added, see example n. 63 and methods setFontStretching(), getFontStretching(), setFontSpacing(), getFontSpacing().
+ - Support for CSS properties 'font-stretch' and 'letter-spacing' was added (see example n. 63).
+ - The cMargin state was replaced by cell_padding array that can be set/get using setCellPadding() and getCellPadding() methods.
+ - Methods getCellPaddings() and setCellPaddings() were added to fine tune cell paddings (see example n. 5).
+ - Methods getCellMargins() and setCellMargins() were added to fine tune cell margins (see example n. 5).
+ - Method write1DBarcode() was improved to permit custom labels (see example n. 27).
+ - Method ImagePngAlpha() now includes support for ImageMagick to improve performances.
+ - XObject Template support was extended to support Multicell(), writeHTML() and writeHTMLCell() methods.
+ - The signature of getNumLines() and getStringHeight() methods is changed.
+ - Example n. 57 was updated.
+
+// -------------------------------------------------------------------
+
+5.8.034 (2010-09-27)
+ - A bug related to SetFont on XObject templates was fixed.
+
+5.8.033 (2010-09-25)
+ - A problem with Footer() and multiple columns was fixed.
+
+5.8.032 (2010-09-22)
+ - Bug #3073165 "Issues with changes to addHTMLVertSpace()" was fixed.
+
+5.8.031 (2010-09-20)
+ - Bug #3071961 "Spaces in HTML" was fixed.
+
+5.8.030 (2010-09-17)
+ - SVG support was improved and some bugs were fixed.
+
+5.8.029 (2010-09-16)
+ - A problem with HTML borders was fixed.
+
+5.8.028 (2010-09-13)
+ - Bug #3065224 "mcrypt_create_iv error on TCPDF 5.8.027 on PHP 5.3.2" was fixed.
+
+5.8.027 (2010-09-13)
+ - Bug #3065118 "mcrypt_decrypt error on TCPDF 5.8.026 on PHP 5.3.2" was fixed.
+
+5.8.026 (2010-09-13)
+ - A bug on addHTMLTOC() method was fixed. Note: be sure that the #TOC_PAGE_NUMBER# template has enough width to be printed correctly.
+
+5.8.025 (2010-09-09)
+ - Bug #3062692 "Textarea inside a table" was fixed.
+
+5.8.024 (2010-09-08)
+ - Bug #3062005 "Undefined variable: ann_obj_id" was fixed.
+
+5.8.023 (2010-08-31)
+ - Forms bug added on version 5.8.019 was fixed.
+
+5.8.022 (2010-08-31)
+ - Bug #3056632 "SVG rendered vertically flipped" was fixed.
+
+5.8.021 (2010-08-30)
+ - A new CID-0 'chinese' font was added for traditional Chinese.
+ - Bug #3054287 'Inner tags are ignored due to "align" attribute' was fixed.
+
+5.8.020 (2010-08-26)
+ - CSS "catch-all" class selector is now supported.
+
+5.8.019 (2010-08-26)
+ - XObject Templates now includes support for links and annotations.
+ - A problem related to link alignment on cell was fixed.
+ - A problem related to SVG styles was fixed.
+
+5.8.018 (2010-08-25)
+ - Method getNumberOfColumns() was added.
+ - A problem related to table header was fixed.
+ - Method getSVGTransformMatrix() was fixed to apply SVG transformations in the correct order.
+ - SVG support was improved and several bugs were fixed.
+
+5.8.017 (2010-08-25)
+ - This version includes support for XObject Templates (see the new example n. 62).
+ - Methods starttemplate(), endTemplate() and printTemplate() were added (see the new example n. 62).
+
+5.8.016 (2010-08-24)
+ - Alignment problem on write2DBarcode was fixed.
+
+5.8.015 (2010-08-24)
+ - A problem arised with the latest bugfix was fixed.
+
+5.8.014 (2010-08-23)
+ - Method _getxobjectdict() was added for better compatibility with external extensions.
+ - A bug related to radiobuttons was fixed.
+ - Bug #3051509 "new line after punctuation marks" was fixed (partially).
+
+5.8.013 (2010-08-23)
+ - SVG support for 'direction' property was added.
+ - A problem on default width calculation for linear barcodes was fixed.
+ - New option was added to write1DBarcode() method to improve alignments (see example n. 27).
+ - Bug #3050896 "Nested HTML tables: styles are not applied" was fixed.
+ - Method _putresourcedict() was improved to include external XObject templates.
+
+5.8.012 (2010-08-22)
+ - Support for SVG 'text-anchor' property was added.
+
+5.8.011 (2010-08-21)
+ - Method write1DBarcode() was improved to be backward compatible (check the new example n. 27).
+ - Support for CSS width and height properties on images were added.
+
+5.8.010 (2010-08-20)
+ - Documentation of unhtmlentities() was fixed.
+ - The 'fitwidth' option was added and border color problem was fixed on write1DBarcode() method (check the example n. 27).
+
+5.8.009 (2010-08-20)
+ - Internal object numbering was improved.
+ - Some errors in object encryption were fixed.
+
+5.8.008 (2010-08-19)
+ - Method write1DBarcode() was changed, check the example n. 27.
+ - Method Footer() was changed to account for barcode changes.
+ - Automatic calculation of K_PATH_URL constant was fixed on configuration file.
+ - Method setEqualColumns() was fixed for $width=0 case.
+ - Method AddTOC() was fixed for multipage and multicolumn modes.
+ - Better support for SVG "font-family" property.
+ - A problem on default Page Zoom mode was fixed.
+ - Several Annotation bugs were fixed.
+
+5.8.007 (2010-08-18)
+ - A bug affecting HTML tables was fixed.
+ - Bug #3047500 "SVG not rendering paths properly" was fixed.
+
+5.8.006 (2010-08-17)
+ - A bug affecting HTML table nesting was fixed.
+
+5.8.005 (2010-08-17)
+ - A bug affecting the HTML 'select' tag in certain conditions was fixed.
+
+5.8.004 (2010-08-17)
+ - Better support for HTML "font-family" property.
+ - A bug related to HTML multicolumn was fixed.
+
+5.8.003 (2010-08-16)
+ - Better support for HTML "font-family" property.
+
+5.8.002 (2010-08-14)
+ - HTML alignments were improved
+ - IMPORTANT: Default regular expression to find spaces has been changed to exclude the non-breaking-space (160 DEC- A0 HEX). If you are using setSpacesRE() method, please read the new documentation.
+ - Example n. 1 was updated.
+
+5.8.001 (2010-08-12)
+ - Bug #3043650 "subsetchars incorrectly cached" was fixed.
+
+5.8.000 (2010-08-11)
+ - A control to avoid bookmarking page 0 was added.
+ - addTOC() method now includes support for multicolumn mode.
+ - Support for tables in multicolumn mode was improved.
+ - Example n.10 was updated.
+ - All trimming functions were replaced with stringLeftTrim(), stringRightTrim() and stringTrim().
+ - HTML alignments were improved.
+
+------------------------------------------------------------
+
+5.7.003 (2010-08-08)
+ - Bug #3041263 "php source ending is bad" was fixed (all PHP files were updated, including fonts).
+
+5.7.002 (2010-08-06)
+ - Methods copyPage(), movePage() and deletePage() were changed to account for internal markings.
+
+5.7.001 (2010-08-05)
+ - Bug #3040105 "Broken PDF when using TOC (example 45)" was fixed.
+
+5.7.000 (2010-08-03)
+ - CSS borders are now supported for HTML tables and other block tags (see example n. 61);
+ - Cell borders were improved (see example n. 57);
+ - Minor bugs were fixed.
+
+------------------------------------------------------------
+
+5.6.000 (2010-07-31)
+ - A bug with object IDs was fixes.
+ - Performances were improved.
+
+------------------------------------------------------------
+
+5.5.015 (2010-07-29)
+ - Automatic fix for unclosed self-closing tag.
+ - Support for deprecated 's' and 'strike' tags was added.
+ - Empty list items problem was fixed.
+
+5.5.014 (2010-07-15)
+ - Support for external images was improved.
+
+5.5.013 (2010-07-14)
+ - Bug #3029338 "FI and FO output destination filename bug" was fixed (previous fix was wrong).
+
+5.5.012 (2010-07-14)
+ - Bug #3029310 "Font baseline inconsistencies with line-height and font-size" was fixed.
+ - Bug #3029338 "FI and FO output destination filename bug" was fixed.
+
+5.5.011 (2010-07-09)
+ - Support for multiple CSS classes was added.
+ - The method getColumn() was added to return the current column number.
+ - Some regular Expressions were fixed to be more compatible with UTF-8.
+
+5.5.010 (2010-07-06)
+ - Bug item #3025772 "Borders in all image functions are still flawed" was fixed.
+
+5.5.009 (2010-07-05)
+ - A problem related to last page footer was fixed.
+ - Image alignments and fit-on-page features were improved.
+
+5.5.008 (2010-07-02)
+ - A problem on table header alignment in booklet mode was fixed.
+ - Default graphic vars are now applied for setHeader();
+
+5.5.007 (2010-07-02)
+ - Attribute "readonly" was added to input and textarea form fields.
+ - Vertical alignment feature was added on MultiCell() method only for simple text mode (see example n. 5).
+ - Text-Fit feature was added on MultiCell() method only for simple text mode (see example n. 5).
+
+5.5.006 (2010-06-29)
+ - getStringHeight() and getNumLines() methods were fixed.
+
+5.5.005 (2010-06-28)
+ - Bug #3022170 "getFontDescent() does not return correct descent value" was fixed.
+ - Some problems with multicolumn mode were fixed.
+
+5.5.004 (2010-06-27)
+ - Bug #3021803 "SVG Border" was fixed.
+
+5.5.003 (2010-06-26)
+ - On Write() method, blank lines at the beginning of a page or column are now automatically removed.
+
+5.5.002 (2010-06-24)
+ - ToUnicode Identity-H name was replaced with a full CMap (to avoid preflight syntax error).
+ - Bug #3020638 "str_split() not available in php4" was fixed.
+ - Bug #3020665 "file_get_contents() too many parameters for php4" was fixed.
+
+5.5.001 (2010-06-23)
+ - A problem on image streams was fixed.
+
+5.5.000 (2010-06-22)
+ - Several PDF syntax errors (and related bugs) were fixed.
+ - Bug #3019090 "/Length values are wrong if AES encryption is used" was fixed.
+
+------------------------------------------------------------
+
+5.4.003 (2010-06-19)
+ - A problem related to page boxes was fixed.
+ - Bug #3016920 "Font subsetting issues when editing pdf" was partially fixed (Note that flattening transparency layers is currently incompatible with TrueTypeUnicode fonts).
+
+5.4.002 (2010-06-18)
+ - A problem related with setProtection() method was fixed.
+
+5.4.001 (2010-06-18)
+ - A problem related with setProtection() method was fixed.
+
+5.4.000 (2010-06-18)
+ - The method setSignatureAppearance() was added, check the example n. 52.
+ - Several problems related to font subsetting were fixed.
+
+------------------------------------------------------------
+
+5.3.010 (2010-06-15)
+ - Previous release was corrupted.
+
+5.3.009 (2010-06-15)
+ - Bug #3015934 "Bullets don't display correctly" was fixed.
+
+5.3.008 (2010-06-13)
+ - This version fixes some problems of SVG rasterization.
+
+5.3.007 (2010-06-13)
+ - This version improves SVG support.
+
+5.3.006 (2010-06-10)
+ - This version includes a change in uniqid calls for backward compatibility with PHP4.
+
+5.3.005 (2010-06-09)
+ - The method getPageSizeFromFormat() was changed to include all standard page formats (includes 281 page formats + variation).
+
+5.3.004 (2010-06-08)
+ - Bug #3013291 "HTML table cell width" was fixed.
+ - Bug #3013294 "HTML table cell alignment" was fixed.
+ - The columns widths of HTML tables are now inherited from the first row.
+
+5.3.003 (2010-06-08)
+ - Bug #3013102 "HTML table header misaligned after page break" was fixed.
+
+5.3.002 (2010-06-07)
+ - The methods setFontSubsetting() and setFontSubsetting() were added to control the default font subsetting mode (see example n. 1).
+ - Bug #3012596 "Whitespace should not appeared after use Thai top characters" was fixed.
+ - Examples n. 1, 14, and 54 were updated.
+
+5.3.001 (2010-06-06)
+ - Barcode PDF417 was improved to support Macro Code Blocks (see example n. 50).
+
+5.3.000 (2010-06-05)
+ - License was changed to GNU-LGPLv3 (see the updated LICENSE.TXT file).
+ - PDF417 barcode support was added (check the example n. 50).
+ - The method write2DBarcode() was improved (some parameters were added and other changed - check example n. 50).
+
+------------------------------------------------------------
+
+5.2.000 (2010-06-02)
+ - IMPORTANT: Support for font subsetting was added by default to reduce the size of documents using large unicode font files.
+ If you embed the whole font in the PDF, the person on the other end can make changes to it even if he didn't have your font.
+ If you subset the font, file size of the PDF will be smaller but the person who receives your PDF would need to have your same font in order to make changes to your PDF.
+ - The signature of the SetFont() and AddFont() methods were changed to include the font subsetting option (subsetting is applied by default).
+ - Examples 14 and 54 were updated.
+
+------------------------------------------------------------
+
+5.1.002 (2010-05-27)
+ - Bug #3007818 "SetAutoPageBreak fails with MultiCell" was fixed.
+ - A bug related to MultiCell() minimun height was fixed.
+
+5.1.001 (2010-05-26)
+ - The problem of blank page after table was fixed.
+
+5.1.000 (2010-05-25)
+ - This version includes support for CSS (Cascading Style Sheets) (see example n. 61).
+ - The convertHTMLColorToDec() method was improved.
+
+------------------------------------------------------------
+
+5.0.014 (2010-05-21)
+ - A problem on color and style of HTML links was fixed.
+ - A bug relative to gradients was fixed.
+ - The getStringHeight() method was added and getNumLines() method was improved.
+ - All examples were updated.
+
+5.0.013 (2010-05-19)
+ - A bug related to page-breaks and table cells was fixed.
+
+5.0.012 (2010-05-19)
+ - Page orientation bug was fixed.
+ - The access to method setPageFormat() was changed to 'protected' because it is not intended to be directly called.
+
+5.0.011 (2010-05-19)
+ - Page orientation bug was fixed.
+ - Bug #3003966 "Multiple columns and nested lists" was fixed.
+
+5.0.010 (2010-05-17)
+ - The methods setPageFormat(), setPageOrientation() and related methods were extended to include page boxes, page rotations and page transitions.
+ - The method setPageBoxes() was added to set page boundaries (MediaBox, CropBox, BleedBox, TrimBox, ArtBox);
+ - A bug relative to underline, overline and linethrough was fixed.
+
+5.0.009 (2010-05-16)
+ - Bug #3002381 "Multiple columns and nested lists" was fixed.
+
+5.0.008 (2010-05-15)
+ - Bug "Columns WriteHTML and Justification" was fixed.
+
+5.0.007 (2010-05-14)
+ - Bug #3001347 "Bug when using WriteHTML with setEqualColumns()" was fixed.
+ - Bug #3001505 "problem with sup and sub tags at the beginning of a line" was fixed.
+
+5.0.006 (2010-05-13)
+ - Length of hr tag was fixed.
+ - An error on 2d barcode method was fixed.
+
+5.0.005 (2010-05-12)
+ - WARNING: The logic of permissions on the SetProtection() method has been inverted and extended (see example 16). Now you have to specify the features you want to block.
+ - SetProtection() method was extended to support RSA and AES 128 encryption and public-keys (see example 16).
+ - Bug #2999489 "setEqualColumns() and TOC uses wrong columns" was fixed (see the example 10).
+
+5.0.004 (2010-05-10)
+ - HTML line alignment when using sub and sup tags was fixed.
+
+5.0.003 (2010-05-07)
+ - Horizontal alignment was fixed for images and barcodes. Now the X coordinate is always relative to the left margin. Use GetAbsX() instead of GetX() to get the X relative to left margin.
+ - Header() method was changed to account for new image alignment rules.
+
+5.0.002 (2010-05-06)
+ - Bookmark() and related methods were fixed to accept HTML code.
+ - A problem on HTML links was fixed.
+
+5.0.001 (2010-05-06)
+ - Protected method _putstream was re-added for backward compatibility.
+ - The following method were added to display HTML Table Of Content (see example n. 59):
+ addTOCPage(), endTOCPage(), addHTMLTOC().
+
+5.0.000 (2010-05-05)
+ - Method ImageSVG() was added to embedd SVG images (see example n. 58). Note that not all SVG images are supported.
+ - Method setRasterizeVectorImages() was added to enable/disable rasterization for vector images via ImageMagick library.
+ - Method RoundedRectXY() was added.
+ - Method PieSectorXY() was added.
+ - Gradient() method is now public and support new features.
+ - Shading to transparency is now supported.
+ - Image alignments were fixed.
+ - Support for dynamic images were improved.
+ - PDF_IMAGE_SCALE_RATIO has been changed to 1.25 for better compatibility with SVG.
+ - RAW and RAW2 modes were added to 2D Barcodes (see example n. 50).
+ - Automatic padding feature was added on barcodes (see examples n. 27 and 50).
+ - Bug #2995003 "Reproduced thead bug" was fixed.
+ - The Output() method now accepts FI and FD destinations to save the document on server before sending it to the client.
+ - Ellipse() method was improved and fixed (see page 2 of example n. 12).
+
+------------------------------------------------------------
+
+4.9.018 (2010-04-21)
+ - Bug item #2990356 "Current font size not respected with more than two HTML " was fixed.
+
+4.9.017 (2010-04-21)
+ - Bug item #2990224 "Different behaviour for equivalent HTML strings" was fixed.
+ - Bug item #2990314 "Dash is not appearing with SHY character" was fixed.
+
+4.9.016 (2010-04-20)
+ - An error on htmlcolors.php was fixed.
+ - getImageFileType() method was improved.
+ - GIF images with transparency are now better supported.
+ - Automatic page orientation was improved.
+
+4.9.015 (2010-04-20)
+ - A new method copyPage() was added to clone pages (see example n. 44).
+ - Support for text overline was added.
+ - Underline and linethrough methods were fixed.
+ - Bug #2989058 "SHY character causes unnecessary word-wrapping" was fixed.
+
+4.9.014 (2010-04-18)
+ - Bug item #2988845 was fixed.
+
+4.9.013 (2010-04-15)
+ - Image() and ImageEPS() methods were fixed and improved; $fitonpage parameter was added.
+
+4.9.012 (2010-04-12)
+ - The hyphenateText() method was added to automatically hyphenate text (see example n. 46).
+
+4.9.011 (2010-04-07)
+ - Vertical alignments for Cell() method were improved (see example n. 57).
+
+4.9.010 (2010-04-06)
+ - Signature of Cell() method now includes new parameters for vertical alignment (see example n. 57).
+ - Text() method was extended to include all Cell() parameters.
+ - HTML line alignment procedure was changed to fix some bugs.
+
+4.9.009 (2010-04-05)
+ - Text() method was fixed for backward compatibility.
+
+4.9.008 (2010-04-03)
+ - Additional line space after table header was removed.
+ - Support for HTML lists in multicolumn mode was added.
+ - The method setTextRenderingMode() was added to set text rendering modes (see the example n. 26).
+ - The following HTML attributes were added to set text rendering modes (see the example n. 26): stroke, strokecolor, fill.
+
+4.9.007 (2010-04-03)
+ - Font Descent computation was fixed (patch #2981441).
+
+4.9.006 (2010-04-02)
+ - The constant K_TCPDF_CALLS_IN_HTML was added on configuration file to enable/disable the ability to call TCPDF methods in HTML.
+ - The usage of tcpdf tag in HTML mode was changed to remove the possible security flaw offered by the eval() function (thanks to Matthias Hecker for spotting this security problem). See the new example n. 49 for further information.
+
+4.9.005 (2010-04-01)
+ - Bug# 2980354 "Wrong File attachment description with security" was fixed.
+ - Several problems with HTML line alignment were fixed.
+ - The constant K_THAI_TOPCHAR was added on configuration file to enable/disable the special procedure used to avoid the overlappind of symbols on Thai language.
+ - A problem with font name directory was fixed.
+ - A bug on _destroy() method was fixed.
+
+4.9.004 (2010-03-31)
+ - Patch #979681 "GetCharWidth - default character width" was applied (bugfix).
+
+4.9.003 (2010-03-30)
+ - Problem of first on multiple columns was fixed.
+ - HTML line alignment was fixed.
+ - A QR-code bug was fixed.
+
+4.9.002 (2010-03-29)
+ - Patch #2978349 "$ignore_min_height is ignored in function Cell()" was applied.
+ - Bug #2978607 "2D Barcodes are wrong" was fixed.
+ - A problem with HTML block tags was fixed.
+ - Artificial italic for CID-0 fonts was added.
+ - Several multicolumn bugs were fixed.
+ - Support for HTML tables on multicolumn was added.
+
+4.9.001 (2010-03-28)
+ - QR Code minor bug was fixed.
+ - Multicolumn mode was added (see the new example n. 10).
+ - The following methods were added: setEqualColumns(), setColumnsArray(), selectColumn().
+ - Thai diacritics support were changed (note that this is incompatible with html justification).
+
+4.9.000 (2010-03-27)
+ - QR Code (2D barcode) support was added (see example n. 50).
+ - The following methods were added to print crop and registration marks (see example n. 56): colorRegistrationBar(), cropMark(), registrationMark().
+ - Limited support for CSS line-height property was added.
+ - Gradient method now supports Gray, RGB and CMYK space color.
+ - Example n. 51 was updated.
+ - Vertical alignment of font inside cell was fixed.
+ - Support for multiple Thai diacritics was added.
+ - Bug item #2974929 "Duplicate case values" was fixed.
+ - Bug item #2976729 "File attachment not working with security" was fixed.
+
+------------------------------------------------------------
+
+4.8.039 (2010-03-20)
+ - Problems related to custom locale settings were fixed.
+ - Problems related to HTML on Header and Footer were fixed.
+
+4.8.038 (2010-03-13)
+ - Various bugs related to page-break in HTML mode were fixed.
+ - Bug item #2968974 "Another pagebreak problem" was fixed.
+ - Bug item #2969276 "justification problem" was fixed.
+ - Bug item #2969289 "bug when using justified text and custom headers" was fixed.
+ - Images are now automatically resized to be contained on the page.
+ - Some HTML line alignments were fixed.
+ - Signature of AddPage() and SetMargins() methods were changed to include an option to set default page margins.
+
+4.8.037 (2010-03-03)
+ - Bug item #2962068 was fixed.
+ - Bug item #2967017 "Problems with and pagebreaks" was fixed.
+ - Bug item #2967023 "table header lost with pagebreak" was fixed.
+ - Bug item #2967032 "Header lost with nested tables" was fixed.
+
+4.8.036 (2010-02-24)
+ - Automatic page break for HTML images was improved.
+ - Example 10 was updated.
+ - Japanese was removed from example 8 because the freeserif font doesn't contain japanese (you can display it using arialunicid0 font).
+
+4.8.035 (2010-02-23)
+ - Automatic page break for HTML images was added.
+ - Support for multicolumn HTML was added (example 10 was updated).
+
+4.8.034 (2010-02-17)
+ - Language files were updated.
+
+4.8.033 (2010-02-12)
+ - A bug related to protection mode with links was fixed.
+
+4.8.032 (2010-02-04)
+ - A bug related to $maxh parameter on Write() and MultiCell() was fixed.
+ - Support for body tag was added.
+
+4.8.031 (2010-01-30)
+ - Bug item #2941589 "paragraph justify not working on some non-C locales" was fixed.
+
+4.8.030 (2010-01-27)
+ - Some text alignment cases were fixed.
+
+4.8.029 (2010-01-27)
+ - Bug item #2941057 "TOC Error in PDF File Output" was fixed.
+ - Some text alignment cases were fixed.
+
+4.8.028 (2010-01-26)
+ - Text alignment for RTL mode was fixed.
+
+4.8.027 (2010-01-25)
+ - Bug item #2938412 "Table related problems - thead, nobr, table width" was fixed.
+
+4.8.026 (2010-01-19)
+ - The misspelled word "lenght" was replaced with "length" in some variables and comments.
+
+4.8.025 (2010-01-18)
+ - addExtGState() method was improved to reuse existing ExtGState objects.
+
+4.8.024 (2010-01-15)
+ - Justification mode for HTML was fixed (Bug item #2932470).
+
+4.8.023 (2010-01-15)
+ - Bug item #2932470 "Some HTML entities breaks justification" was fixed.
+
+4.8.022 (2010-01-14)
+ - Source code documentation was fixed.
+
+4.8.021 (2010-01-03)
+ - A Bug relative to Table Of Content index was fixed.
+
+4.8.020 (2009-12-21)
+ - Bug item #2918545 "Display problem of the first row of a table with larger font" was fixed.
+ - A Bug relative to table rowspan mode was fixed.
+
+4.8.019 (2009-12-16)
+ - Bug item #2915684 "Image size" was fixed.
+ - Bug item #2914995 "Image jpeg quality" was fixed.
+ - The signature of the Image() method was changed (check the documentation for the $resize parameter).
+
+4.8.018 (2009-12-15)
+ - Bug item #2914352 "write error" was fixed.
+
+4.8.017 (2009-11-27)
+ - THEAD problem when table is used on header/footer was fixed.
+ - A first line alignment on HTML justification was fixed.
+ - Method getImageFileType() was added.
+ - Images with unknown extension and type are now supported via ImageMagick PHP extension.
+
+4.8.016 (2009-11-21)
+ - Document Information Dictionary was fixed.
+ - CSS attributes 'page-break-before', 'page-break-after' and 'page-break-inside' are now supported.
+ - Problem of unclosed last page was fixed.
+ - Problem of 'thead' unnecessarily repeated on the next page was fixed.
+
+4.8.015 (2009-11-20)
+ - A problem with some PNG transparency images was fixed.
+ - Bug #2900762 "Sort issues in Bookmarks" was fixed.
+ - Text justification was fixed for various modes: underline, strikeout and background.
+
4.8.014 (2009-11-04)
- Bug item #2891316 "writeHTML, underlining replacing spaces" was fixed.
- The handling of temporary RTL text direction mode was fixed.
-
+
4.8.013 (2009-10-26)
- Bug item #2884729 "Problem with word-wrap and hyphen" was fixed.
-
+
4.8.012 (2009-10-23)
- Table cell alignments for RTL booklet mode were fixed.
- Images and barcode alignments for booklet mode were fixed.
-
+
4.8.011 (2009-10-22)
- DejaVu fonts were updated to latest version.
-
+
4.8.010 (2009-10-21)
- Bookmark for TOC page was added.
- Signature of addTOC() method is changed.
- Bookmarks are now automatically sorted by page and Y position.
- Example n. 45 was updated.
- Example n. 55 was added to display all charactes available on core fonts.
-
+
4.8.009 (2009-09-30)
- Compatibility with PHP 5.3 was improved.
- All examples were updated.
- Index file for examples was added.
-
+
4.8.008 (2009-09-29)
- Example 49 was updated.
- Underline and linethrough now works with cell stretching mode.
-
+
4.8.007 (2009-09-23)
- Infinite loop problem caused by nobr attribute was fixed.
-
+
4.8.006 (2009-09-23)
- Bug item #2864522 "No images if DOCUMENT_ROOT=='/'" was fixed.
- Support for text-indent CSS attribute was added.
@@ -66,28 +1126,28 @@
- Signature of Image() method was changed.
- htmlcolors.php file was updated.
---------------------------------------------------------------------------------
+------------------------------------------------------------
4.7.003 (2009-09-03)
- Support for TCPDF methods on HTML was improved (see example n. 49).
-
+
4.7.002 (2009-09-02)
- Bug item #2848892 "writeHTML + table: Gaps between rows" was fixed.
- JavaScript support was fixed (see example n. 53).
-
+
4.7.001 (2009-08-30)
- The Polygon() and Arrow() methods were fixed and improved (see example n. 12).
-
+
4.7.000 (2009-08-29)
- This is a major release.
- Some procedures were internally optimized.
- The problem of mixed signature and annotations was fixed (example n. 52).
-
+
4.6.030 (2009-08-29)
- IMPORTANT: percentages on table cell widths are now relative to the full table width (as in standard HTML).
- Various minor bugs were fixed.
- Example n. 52 (digital signature) was updated.
-
+
4.6.029 (2009-08-26)
- PHP4 version was fixed.
@@ -122,26 +1182,26 @@
- Bug item #2824036 "Image as hyperlink in table, text displaced at page break" was fixed.
- Links alignment on justified text was fixed.
- Unicode "\u" modifier was added to re_spaces variable by default.
-
+
4.6.020 (2009-07-16)
- Bug item #2821921 "issue in example 18" was fixed.
- Signature of SetRTL() method was changed.
-
+
4.6.019 (2009-07-13)
- Bug item #2820703 "xref table broken" was fixed.
-
+
4.6.018 (2009-07-10)
- Bug item #2819319 "Text over text" was fixed.
- Method Arrow() was added to print graphic arrows (example 12 was updated).
-
+
4.6.017 (2009-07-05)
- Bug item #2816079 "Example 48 not working" was fixed.
- The signature of the checkPageBreak() was changed. The parameter $addpage was added to turn off the automatic page creation.
-
+
4.6.016 (2009-06-16)
- Method setSpacesRE() was added to set the regular expression used for detecting withespaces or word separators. If you are using chinese, try: setSpacesRE('/[\s\p{Z}\p{Lo}]/');, otherwise you can use setSpacesRE('/[\s\p{Z}]/');
- The method _putinfo() now automatically fills the metadata with '?' in case of empty string.
-
+
4.6.015 (2009-06-11)
- Bug #2804667 "word wrap bug" was fixed.
@@ -271,26 +1331,26 @@
- Bug #2717436 "writeHTML rowspan problem (continued)" was fixed.
- Bug #2719090 "writeHTML fix follow up" was fixed.
- The method _putuserrights() was changed to avoid Adobe Reader 9.1 crash. This broken the 'trick' that was used to display forms in Acrobat Reader.
-
+
4.5.034 (2009-03-27)
- Bug #2716914 "Bug writeHTML of a table in body and footer related with pb" was fixed.
- Bug #2717056 ] "writeHTML problem when setting tr style" was fixed.
- The signature of the Cell() method was changed.
-
+
4.5.033 (2009-03-27)
- The support for rowspan/colspan on HTML tables was improved (see example n. 48).
-
+
4.5.032 (2009-03-23)
- setPrintFooter(false) bug was fixed.
-
+
4.5.031 (2009-03-20)
- Table header support was extended to multiple pages.
-
+
4.5.030 (2009-03-20)
- thead tag is now supported on HTML tables (header rows are repeated after page breaks).
- The startTransaction() was improved to autocommit.
- List bullets now uses the foreground color (putHtmlListBullet()).
-
+
4.5.029 (2009-03-19)
- The following methods were added to UNDO commands (see example 47): startTransaction(), commitTransaction(), rollbackTransaction().
- All examples were updated.
@@ -330,44 +1390,44 @@
4.5.019 (2009-02-28)
- The problem of decimal separator using different locale was fixed.
- The text hyphenation is now supported (see example n. 46).
-
+
4.5.018 (2009-02-26)
- The _destroy() method was added to unset all class variables and frees memory.
- Now it's possible to call Output() method multiple times.
-
+
4.5.017 (2009-02-24)
- A minor bug that raises a PHP warning was fixed.
-
+
4.5.016 (2009-02-24)
- Bug item #2631200 "getNumLines() counts wrong" was fixed.
- Multiple attachments bug was fixed.
- All class variables are now cleared on Output() for memory otpimization.
-
+
4.5.015 (2009-02-18)
- Bug item #2612553 "function Write() must not break a line on character" was fixed.
-
+
4.5.014 (2009-02-13)
- Bug item #2595015 "POSTNET Barcode Checksum Error" was fixed (on barcode.php).
- Pagebreak bug for barcode was fixed.
-
+
4.5.013 (2009-02-12)
- border attribute is now supported on HTML images (only accepts the same values accepted by Cell()).
-
+
4.5.012 (2009-02-12)
- An error on image border feature was fixed.
-
+
4.5.011 (2009-02-12)
- HTML links for images are now supported.
- height attribute is now supported on HTML cells.
- $border parameter was added to Image() and ImageEps() methods.
- The method getNumLines() was added to estimate the number of lines required for the specified text.
-
+
4.5.010 (2009-01-29)
- Bug n. 2546108 "BarCode Y position" was fixed.
-
+
4.5.009 (2009-01-26)
- Bug n. 2538094 "Empty pdf file created" was fixed.
-
+
4.5.008 (2009-01-26)
- setPage() method was fixed to correctly restore graphic states.
- Source code was cleaned up for performances.
@@ -398,7 +1458,7 @@
- Method Footer() was improved to automatically print page or page-group number (see example n. 23).
- Protected method formatTOCPageNumber() was added to customize the format of page numbers on the Table Of Content.
- The signature of addTOC() was changed to include the font used for page numbers.
-
+
4.5.000 (2009-01-03)
- A new $diskcache parameter was added to class constructor to enable disk caching and reduce RAM memory usage (see example n. 43).
- The method movePageTo() was added to move pages to previous positions (see example n. 44).
@@ -433,20 +1493,20 @@
- Bug item #2412147 "Warning on line 3367" was fixed.
- Method setHtmlLinksStyle() was added to set default HTML link colors and font style.
- Method addHtmlLink() was changed to use color and style defined on the inline CSS.
-
+
4.4.002 (2008-12-09)
- Borders on Multicell() were fixed.
- Problem of Multicell() on Header function (Bug item #2407579) was fixed.
- Problem on graphics tranformations applied to Multicell() was fixed.
- Support for ImageMagick was added.
- Width calculation for nested tables was fixed.
-
+
4.4.001 (2008-12-08)
- Some missing core fonts were added on fonts directory.
- CID0 fonts rendering was fixed.
- HTML support was improved ( and tags are now supported).
- Bug item #2406022 "Left padding bug in MultiCell with maxh" was fixed.
-
+
4.4.000 (2008-12-07)
- File attachments are now supported (see example n. 41).
- Font functions were optimized to reduce document size.
@@ -458,20 +1518,20 @@
4.3.009 (2008-12-05)
- Bug item #2392989 (Custom header + setlinewidth + cell border bug) was fixed.
-
+
4.3.008 (2008-12-05)
- Bug item #2390566 "rect bug" was fixed.
- File path was fixed for font embedded files.
- SetFont() method signature was changed to include the font filename.
- Some font-related methods were improved.
- Methods getFontFamily() and getFontStyle() were added.
-
+
4.3.007 (2008-12-03)
- PNG alpha channel is now supported (GD library is required).
- AddFont() function now support custom font file path on $file parameter.
- The default width variable ($dw) is now always defined for any font.
- The 'Style' attribute on CID-0 fonts was removed because of protection bug.
-
+
4.3.006 (2008-12-01)
- A regular expression on getHtmlDomArray() to find HTML tags was fixed.
@@ -493,52 +1553,52 @@
4.3.002 (2008-11-17)
- Bug item #2305518 "CID-0 font don't work with encryption" was fixed.
-
+
4.3.001 (2008-11-17)
- Bug item #2300007 "download mimetype pdf" was fixed.
- Double quotes were replaced by single quotes to improve PHP performances.
- A bug relative to HTML cell borders was fixed.
-
+
4.3.000 (2008-11-14)
- The function setOpenCell() was added to set the top/bottom cell sides to be open or closed when the cell cross the page.
- A bug relative to list items indentation was fixed.
- A bug relative to borders on HTML tables and Multicell was fixed.
- A bug relative to rowspanned cells was fixed.
- A bug relative to html images across pages was fixed.
-
+
4.2.009 (2008-11-13)
- Spaces between li tags are now automatically removed.
-
+
4.2.008 (2008-11-12)
- A bug relative to fill color on next page was fixed.
-
+
4.2.007 (2008-11-12)
- The function setListIndentWidth() was added to set custom indentation widht for HTML lists.
-
+
4.2.006 (2008-11-06)
- A bug relative to HTML justification was fixed.
-
+
4.2.005 (2008-11-06)
- A bug relative to HTML justification was fixed.
- The methods formatPageNumber() and PageNoFormatted() were added to format page numbers.
- Default Footer() method was changed to use PageNoFormatted() instead of PageNo().
- Example 6 was updated.
-
+
4.2.004 (2008-11-04)
- Bug item n. 2217039 "filename handling improvement" was fixed.
-
+
4.2.003 (2008-10-31)
- Font style bug was fixed.
-
+
4.2.002 (2008-10-31)
- Bug item #2210922 (htm element br not work) was fixed.
- Write() function was improved to support margin changes.
-
+
4.2.001 (2008-10-30)
- setHtmlVSpace($tagvs) function was added to set custom vertical spaces for HTML tags.
- writeHTML() function now support margin changes during execution.
- Signature of addHTMLVertSpace() function is changed.
-
+
4.2.000 (2008-10-29)
- htmlcolors.php was changed to support class-loaders.
- ImageEps() function was improved in performances.
@@ -552,33 +1612,33 @@
- Some functions were fixed to better support RTL mode.
- Example n. 10 was changed to support RTL mode.
- All examples were updated.
-
+
4.1.004 (2008-10-23)
- unicode_data.php was changed to support class-loaders.
- Bug item #2186040/2 (writeHTML margin problem) was fixed.
-
+
4.1.003 (2008-10-22)
- Bug item #2185399 was fixed (rowspan and page break).
- Bugs item #2186040 was fixed (writeHTML margin problem).
- Newline after table was removed.
-
+
4.1.002 (2008-10-21)
- Bug item #2184525 was fixed (rowspan on HTML cell).
-
+
4.1.001 (2008-10-21)
- Support for "start" attribute was added to HTML ordered list.
- unicode_data.php file was changed to include UTF-8 to ASCII table.
- Some functions were modified to better support UTF-8 extensions to core fonts.
- Support for images on HTML lists was improved.
- Examples n. 1 and 6 were updated.
-
+
4.1.000 (2008-10-18)
- Page-break bug using HTML content was fixed.
- The "false" parameter was reintroduced to class_exists function on PHP5 version to avoid autoload.
- addHtmlLink() function was improved to support internal links (i.e.: link to page 23 ).
- Justification alignment is now supported on HTML (see example n. 39).
- example_006.php was updated.
-
+
4.0.033 (2008-10-13)
- Bug n. 2157099 was fixed.
- SetX() and SetY() functions were improved.
@@ -601,26 +1661,26 @@
4.0.029 (2008-09-27)
- Infinite loop bug was fixed [Bug item #130309].
- Multicell() problem on Header() was fixed.
-
+
4.0.028 (2008-09-26)
- setLIsymbol() was added to set the LI symbol used on UL lists.
- Missing $padding and $encryption_key variables declarations were added [Bug item #2129058].
-
+
4.0.027 (2008-09-19)
- Bug #2118588 "Undefined offset in tcpdf.php on line 9581" was fixed.
- arailunicid0.php font was updated.
- The problem of javascript form fields duplication after saving was fixed.
-
+
4.0.026 (2008-09-17)
- convertHTMLColorToDec() function was improved to support rgb(RR,GG,BB) notation.
- The following inline CSS attributes are now supported: text-decoration, color, background-color and font-size names: xx-small, x-small, small, medium, large, x-large, xx-large
- Example n. 6 was updated.
-
+
4.0.025 (2008-09-15)
- _putcidfont0 function was improved to include CJK fonts (Chinese, Japanese, Korean, CJK, Asian fonts) without embedding.
- arialunicid0 font was added (see the new example n. 38).
- - The following Unicode to CID-0 tables were added on fonts folder: uni2cid_ak12.php, uni2cid_aj16.php, uni2cid_ag15.php, uni2cid_ac15.php.
-
+ - The following Unicode to CID-0 tables were added on fonts folder: uni2cid_ak12.php, uni2cid_aj16.php, uni2cid_ag15.php, uni2cid_ac15.php.
+
4.0.024 (2008-09-12)
- "stripos" function was replaced with "strpos + strtolower" for backward compatibility with PHP4.
- support for Spot Colors were added. Check the new example n. 37 and the following new functions:
@@ -631,16 +1691,16 @@
_putspotcolors()
- Bookmark() function was improved to fix wrong levels.
- $lasth changes after header/footer calls were fixed.
-
+
4.0.023 (2008-09-05)
- Some HTML related problems were fixed.
- Image alignment on HTML was changed, now it always defaults to the normal mode (see example_006.php).
-
+
4.0.022 (2008-08-28)
- Line height on HTML was fixed.
- Image inside an HTML cell problem was fixed.
- A new "zarbold" persian font was added.
-
+
4.0.021 (2008-08-24)
- HTTP headers were fixed on Output function().
- getAliasNbPages() and getPageGroupAlias() functions were changed to support non-unicode fonts on unicode documents.
@@ -691,7 +1751,7 @@
4.0.012 (2008-07-24)
- Addpage(), Header() and Footer() functions were changed to simplify the implementation of external header/footer functions.
- - The following functions were added:
+ - The following functions were added:
setHeader()
setFooter()
getImageRBX()
@@ -704,7 +1764,7 @@
getHeaderData()
getHeaderMargin()
getFooterMargin()
-
+
4.0.011 (2008-07-23)
- Font support was improved.
- The folder /fonts/utils contains new utilities and instructions for embedd font files.
@@ -745,7 +1805,7 @@
4.0.002 (2008-07-07)
- Bug [2000861] was still unfixed and has been fixed.
-
+
4.0.001 (2008-07-05)
- Bug [2000861] was fixed.
@@ -763,7 +1823,7 @@
- Several minor bugs were fixed.
- barcodes.php was updated.
- All examples were updated.
-
+
------------------------------------------------------------
3.1.001 (2008-06-13)
@@ -771,7 +1831,7 @@
- Vera font was removed, DejaVu font and Free fonts were updated.
- Image handling was improved.
- All examples were updated.
-
+
3.1.000 (2008-06-11)
- setPDFVersion() was added to change the default PDF version (currently 1.7).
- setViewerPreferences() was added to control the way the document is to be presented on the screen or printed (see example 29).
@@ -790,7 +1850,7 @@
- example 18 was updated (Farsi and Arabic languages).
- source code cleanup.
- All examples were updated and new examples were added.
-
+
3.0.015 (2008-06-06)
- AddPage() function signature is changed to include page format.
- example 28 was added to show page format changes.
@@ -821,7 +1881,7 @@
3.0.011 (2008-05-23)
- CMYK color support was added to all graphic functions.
- - HTML table support was improved:
+ - HTML table support was improved:
-- now it's possible to include additional html tags inside a cell;
-- colspan attribute was added.
- example 006 was updated.
@@ -843,7 +1903,7 @@
- Arabic support was fixed and improved.
- AlMohanad (arabic) font was added.
- C128 barcode bugs were fixed.
-
+
3.0.006 (2008-04-21)
- Condition to check negative width values was added.
@@ -861,13 +1921,13 @@
3.0.002 (2008-04-01)
- Write() functions now return the number of cells and not the number of lines.
- TCPDF is released under LGPL 2.1, or any later version.
-
+
3.0.001 (2008-05-28)
- _legacyparsejpeg() and _legacyparsepng() were renamed _parsejpeg() and _parsepng().
- function writeBarcode() was fixed.
- all examples were updated.
- example 27 was added to show various barcodes.
-
+
3.0.000 (2008-03-27)
- private function pixelsToMillimeters() was changed to public function pixelsToUnits() to fix html image size bug.
- Image-related functions were rewritten.
@@ -890,7 +1950,7 @@
- Write() function were fixed.
- example_006.php was updated.
- private function setUserRights() was added to release user rights on Acrobat Reader (this allows to display forms, see example 14)
-
+
2.8.000 (2008-03-20)
- Private variables were changed to protected.
- Function Write() was fixed and improved.
@@ -898,10 +1958,10 @@
- Line-trought mode was added for HTML and text.
- Text vertical alignment on cells were fixed.
- Examples were updated to reflect changes.
-
+
2.7.002 (2008-03-13)
- Bug "[1912142] Encrypted PDF created/modified date" was fixed.
-
+
2.7.001 (2008-03-10)
- Cell justification was fixed for non-unicode mode.
@@ -911,10 +1971,10 @@
- Multicell() has a new parameter $ishtml to act as writeHTMLCell().
- Write() speed was improved for non-arabic strings.
- Example n. 20 was changed.
-
+
2.6.000 (2008-03-07)
- various alignments bugs were fixed.
-
+
2.5.000 (2008-03-07)
- Several bugs were fixed.
- example_019.php was added to test non-unicode mode using old fonts.
@@ -937,12 +1997,12 @@
- Several examples were added.
- AddPage() Header() and Footer() were fixed.
- Documentation is now available on http://www.tcpdf.org
-
+
2.2.003 (2008-03-03)
- [1894853] Performance of MultiCell() was improved.
- RadioButton and ListBox functions were added.
- javascript form functions were rewritten and properties names are changed. The properties function supported by form fields are listed on Possible values are listed on http://www.adobe.com/devnet/acrobat/pdfs/js_developer_guide.pdf.
-
+
2.2.002 (2008-02-28)
- [1900495] html images path was fixed.
- Legacy image functions were reintroduced to allow PNG and JPEG support without GD library.
@@ -950,7 +2010,7 @@
2.2.001 (2008-02-16)
- The bug "[1894700] bug with replace relative path" was fixed
- Justification was fixed
-
+
2.2.000 (2008-02-12)
- fixed javascript bug introduced with latest release
@@ -958,10 +2018,10 @@
- Justify function was fixed on PHP4 version.
- Bookmank function was added ([1578250] Table of contents).
- Javascript and Form fields support was added ([1796359] Form fields).
-
+
2.1.001 (2008-02-10)
- The bug "[1885776] Race Condition in function justitfy" was fixed.
- - The bug "[1890217] xpdf complains that pdf is incorrect" was fixed.
+ - The bug "[1890217] xpdf complains that pdf is incorrect" was fixed.
2.1.000 (2008-01-07)
- FPDF_FONTPATH constant was changed to K_PATH_FONTS on config file
@@ -1020,7 +2080,7 @@
Circle
Polygon
RegularPolygon
-
+
2.0.000 (2008-01-04)
- RTL (Right-To-Left) languages support was added. Language direction is set using the $l['a_meta_dir'] setting on /configure/language/xxx.php language files.
- setRTL($enable) method was added to manually enable/disable the RTL text direction.
@@ -1047,7 +2107,7 @@
1.53.0.TC034 (2007-07-30)
- fixed htmlentities conversion.
- MultiCell() function returns the number of cells.
-
+
1.53.0.TC033 (2007-07-30)
- fixed bug 1762550: case sensitive for font files
- NOTE: all fonts files names must be in lowercase!
@@ -1060,13 +2120,13 @@
1.53.0.TC031 (2007-03-20)
- ToUnicode CMap were added on _puttruetypeunicode function. Now you may search and copy unicode text.
-
+
1.53.0.TC030 (2007-03-06)
- fixed bug on PHP4 version.
-
+
1.53.0.TC029 (2007-03-06)
- DejaVu Fonts were added.
-
+
1.53.0.TC028 (2007-03-03)
- MultiCell function signature were changed: the $ln parameter were added. Check documentation for further information.
- Greek language were added on example sentences.
@@ -1075,79 +2135,79 @@
1.53.0.TC027 (2006-12-14)
- $attr['face'] bug were fixed.
- K_TCPDF_EXTERNAL_CONFIG control where introduced on /config/tcpdf_config.php to use external configuration files.
-
+
1.53.0.TC026 (2006-10-28)
- writeHTML function call were fixed on examples.
1.53.0.TC025 (2006-10-27)
- Bugs item #1421290 were fixed (0D - 0A substitution in some characters)
- Bugs item #1573174 were fixed (MultiCell documentation)
-
+
1.53.0.TC024 (2006-09-26)
- getPageHeight() function were fixed (bug 1543476).
- fixed missing breaks on closedHTMLTagHandler function (bug 1535263).
- fixed extra spaces on Write function (bug 1535262).
-
+
1.53.0.TC023 (2006-08-04)
- paths to barcode directory were fixed.
- documentation were updated.
-
+
1.53.0.TC022 (2006-07-16)
- - fixed bug: [ 1516858 ] Probs with PHP autoloader and class_exists()
+ - fixed bug: [ 1516858 ] Probs with PHP autoloader and class_exists()
1.53.0.TC021 (2006-07-01)
- HTML attributes with whitespaces are now supported (thanks to Nelson Benitez for his support)
-
+
1.53.0.TC020 (2006-06-23)
- code cleanup
-
+
1.53.0.TC019 (2006-05-21)
- fixed and closing tags
-
+
1.53.0.TC018 (2006-05-18)
- fixed font names bug
-
+
1.53.0.TC017 (2006-05-18)
- the TTF2UFM utility to convert True Type fonts for TCPDF were included on fonts folder.
- new free unicode fonts were included on /fonts/freefont.
- test_unicode.php example were exended.
- parameter $fill were added on Write, writeHTML and writeHTMLCell functions.
- documentation were updated.
-
+
1.53.0.TC016 (2006-03-09)
- fixed closing tag on html parser.
-
+
1.53.0.TC016 (2005-08-28)
- fpdf.php and tcpdf.php files were joined in one single class (you can still extend TCPDF with your own class).
- fixed problem when mb_internal_encoding is set.
1.53.0.TC014 (2005-05-29)
- fixed WriteHTMLCell new page issue.
-
+
1.53.0.TC013 (2005-05-29)
- fixed WriteHTMLCell across pages.
-
+
1.53.0.TC012 (2005-05-29)
- font color attribute bug were fixed.
-
+
1.53.0.TC011 (2005-03-31)
- SetFont function were fixed (thank Sjaak Lauwers for bug notice).
-
+
1.53.0.TC010 (2005-03-22)
- the html functions were improved (thanks to Manfred Vervuert for bug reporting).
-
+
1.53.0.TC009 (2005-03-19)
- a wrong reference to convertColorHexToDec were fixed.
-
+
1.53.0.TC008 (2005-02-07)
- removed some extra bytes from PHP files.
-
+
1.53.0.TC007 (2005-01-08)
- fill attribute were removed from writeHTMLCell method.
-
+
1.53.0.TC006 (2005-01-08)
- the documentation were updated.
-
+
1.53.0.TC005 (2005-01-05)
- Steven Wittens's unicode methods were removed.
- All unicode methods were rewritten from scratch.
@@ -1159,4 +2219,4 @@
- Bitstream Vera Fonts were added (http://www.bitstream.com/font_rendering/products/dev_fonts/vera.html).
- Now the AddFont and SetFont functions returns the basic font if the styled version do not exist.
-EOF ----------------------------------------------------------------------------
+EOF --------------------------------------------------------
diff --git a/lib/tcpdf/LICENSE.TXT b/lib/tcpdf/LICENSE.TXT
index b1e3f5a2638..26adda0b39f 100644
--- a/lib/tcpdf/LICENSE.TXT
+++ b/lib/tcpdf/LICENSE.TXT
@@ -1,504 +1,860 @@
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
+**********************************************************************
+* TCPDF LICENSE
+**********************************************************************
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ TCPDF is free software: you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version. Additionally,
+ YOU CAN'T REMOVE ANY TCPDF COPYRIGHT NOTICE OR LINK FROM THE
+ GENERATED PDF DOCUMENTS.
+
+**********************************************************************
+**********************************************************************
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
- Preamble
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
+ 0. Additional Definitions.
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
- When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
+ 1. Exception to Section 3 of the GNU GPL.
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
+ 2. Conveying Modified Versions.
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
- GNU LESSER GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+ 3. Object Code Incorporating Material from Library Header Files.
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
+ 4. Combined Works.
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
Library.
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
+**********************************************************************
+**********************************************************************
- a) The modified work must itself be a software library.
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
+ Preamble
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
+ The precise terms and conditions for copying, distribution and
+modification follow.
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
+ TERMS AND CONDITIONS
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
+ 0. Definitions.
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
+ "This License" refers to version 3 of the GNU General Public License.
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
- c) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
+ 1. Source Code.
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
+ 13. Use with the GNU Affero General Public License.
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
+ 14. Revised Versions of this License.
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
- NO WARRANTY
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+ 15. Disclaimer of Warranty.
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Libraries
+ 16. Limitation of Liability.
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
+ 17. Interpretation of Sections 15 and 16.
-
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
Copyright (C)
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
- This library is distributed in the hope that it will be useful,
+ This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
Also add information on how to contact you by electronic and paper mail.
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+ Copyright (C)
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
- , 1 April 1990
- Ty Coon, President of Vice
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
-That's all there is to it!
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+ .
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+.
+**********************************************************************
+**********************************************************************
diff --git a/lib/tcpdf/README.TXT b/lib/tcpdf/README.TXT
index ba64a088085..7a3ab8b1633 100644
--- a/lib/tcpdf/README.TXT
+++ b/lib/tcpdf/README.TXT
@@ -1,87 +1,91 @@
TCPDF - README
============================================================
-IF YOU'D LIKE TO SUPPORT TCPDF, PLEASE CONSIDER MAKING A
-DONATION:
+I WISH TO IMPROVE AND EXPAND TCPDF BUT I NEED YOUR SUPPORT.
+PLEASE MAKE A DONATION:
http://sourceforge.net/donate/index.php?group_id=128076
------------------------------------------------------------
Name: TCPDF
-Version: 4.8.014
-Release date: 2009-11-04
+Version: 5.9.133
+Release date: 2011-10-26
Author: Nicola Asuni
-
-Copyright (c) 2001-2009:
+
+Copyright (c) 2002-2011:
Nicola Asuni
Tecnick.com s.r.l.
Via Della Pace, 11
09044 Quartucciu (CA)
ITALY
www.tecnick.com
-
+
URLs:
- http://www.tcpdf.org
- http://www.sourceforge.net/projects/tcpdf
-
+ http: www.tcpdf.org
+ http: www.sourceforge.net/projects/tcpdf
+
Description:
TCPDF is a PHP class for generating PDF files on-the-fly without requiring external extensions.
- TCPDF has been originally derived from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org).
-
-Main Features:
-// * no external libraries are required for the basic functions;
-// * supports all ISO page formats;
-// * supports custom page formats, margins and units of measure;
-// * supports UTF-8 Unicode and Right-To-Left languages;
-// * supports TrueTypeUnicode, OpenTypeUnicode, TrueType, OpenType, Type1 and CID-0 fonts;
-// * supports document encryption;
-// * includes methods to publish some XHTML code, including forms;
-// * includes graphic (geometric) and transformation methods;
-// * includes Javascript and Forms support;
-// * includes a method to print various barcode formats: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extention, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS;
-// * includes methods to set Bookmarks and print a Table of Content;
-// * includes methods to move and delete pages;
-// * includes methods for automatic page header and footer management;
-// * supports automatic page break;
-// * supports automatic page numbering and page groups;
-// * supports automatic line break and text justification;
-// * supports JPEG and PNG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http://www.imagemagick.org/www/formats.html)
-// * supports stroke and clipping mode for text;
-// * supports clipping masks;
-// * supports Grayscale, RGB, CMYK, Spot Colors and Transparencies;
-// * supports several annotations, including links, text and file attachments;
-// * supports page compression (requires zlib extension);
-// * supports text hyphenation.
-// * supports transactions to UNDO commands.
-// * supports signature certifications.
-Installation (full instructions on http://www.tcpdf.org):
+Main Features:
+ * no external libraries are required for the basic functions;
+ * all standard page formats, custom page formats, custom margins and units of measure;
+ * UTF-8 Unicode and Right-To-Left languages;
+ * TrueTypeUnicode, OpenTypeUnicode v1, TrueType, OpenType v1, Type1 and CID-0 fonts;
+ * font subsetting;
+ * methods to publish some XHTML + CSS code, Javascript and Forms;
+ * images, graphic (geometric figures) and transformation methods;
+ * supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http: www.imagemagick.org/www/formats.html)
+ * 1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extention, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, Datamatrix, QR-Code, PDF417;
+ * JPEG and PNG ICC profiles, Grayscale, RGB, CMYK, Spot Colors and Transparencies;
+ * automatic page header and footer management;
+ * document encryption up to 256 bit and digital signature certifications;
+ * transactions to UNDO commands;
+ * PDF annotations, including links, text and file attachments;
+ * text rendering modes (fill, stroke and clipping);
+ * multiple columns mode;
+ * no-write page regions;
+ * bookmarks, named destinations and table of content;
+ * text hyphenation;
+ * text stretching and spacing (tracking/kerning);
+ * automatic page break, line break and text alignments including justification;
+ * automatic page numbering and page groups;
+ * move and delete pages;
+ * page compression (requires php-zlib extension);
+ * XOBject Templates;
+ * Layers and object visibility.
+ * PDF/A-1b support.
+
+Installation (full instructions on http: www.tcpdf.org):
1. copy the folder on your Web server
2. set your installation path and other parameters on the config/tcpdf_config.php
3. call the examples/example_001.php page with your browser to see an example
Source Code Documentation:
- doc/index.html
-
+ http://www.tcpdf.org
+
For Additional Documentation:
http://www.tcpdf.org
License
- Copyright (C) 2002-2009 Nicola Asuni - Tecnick.com S.r.l.
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as published by
- the Free Software Foundation, either version 2.1 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with this program. If not, see .
-
+ Copyright (C) 2002-2011 Nicola Asuni - Tecnick.com S.r.l.
+
+ TCPDF is free software: you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version. Additionally,
+ YOU CAN'T REMOVE ANY TCPDF COPYRIGHT NOTICE OR LINK FROM THE
+ GENERATED PDF DOCUMENTS.
+
+ TCPDF is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the License
+ along with TCPDF. If not, see
+ .
+
See LICENSE.TXT file for more information.
-
+
============================================================
diff --git a/lib/tcpdf/barcodes.php b/lib/tcpdf/barcodes.php
index c8595957938..e444ca0f19b 100644
--- a/lib/tcpdf/barcodes.php
+++ b/lib/tcpdf/barcodes.php
@@ -1,103 +1,235 @@
.
-//
-// See LICENSE.TXT file for more information.
-// ----------------------------------------------------------------------------
+// Last Update : 2011-09-15
+// Author : Nicola Asuni - Tecnick.com S.r.l - Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com
+// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html)
+// -------------------------------------------------------------------
+// Copyright (C) 2008-2011 Nicola Asuni - Tecnick.com S.r.l.
//
-// Description : PHP class to creates array representations for
+// This file is part of TCPDF software library.
+//
+// TCPDF is free software: you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// TCPDF is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with TCPDF. If not, see .
+//
+// See LICENSE.TXT file for more information.
+// -------------------------------------------------------------------
+//
+// Description : PHP class to creates array representations for
// common 1D barcodes to be used with TCPDF.
//
-// Author: Nicola Asuni
-//
-// (c) Copyright:
-// Nicola Asuni
-// Tecnick.com S.r.l.
-// Via della Pace, 11
-// 09044 Quartucciu (CA)
-// ITALY
-// www.tecnick.com
-// info@tecnick.com
//============================================================+
/**
+ * @file
* PHP class to creates array representations for common 1D barcodes to be used with TCPDF.
* @package com.tecnick.tcpdf
- * @abstract Functions for generating string representation of common 1D barcodes.
* @author Nicola Asuni
- * @copyright 2008-2009 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com
- * @link http://www.tcpdf.org
- * @license http://www.gnu.org/copyleft/lesser.html LGPL
- * @version 1.0.008
+ * @version 1.0.021
*/
- /**
- * PHP class to creates array representations for common 1D barcodes to be used with TCPDF (http://www.tcpdf.org).
- * @name TCPDFBarcode
- * @package com.tecnick.tcpdf
- * @version 1.0.008
- * @author Nicola Asuni
- * @link http://www.tcpdf.org
- * @license http://www.gnu.org/copyleft/lesser.html LGPL
- */
+/**
+ * @class TCPDFBarcode
+ * PHP class to creates array representations for common 1D barcodes to be used with TCPDF (http://www.tcpdf.org).
+ * @package com.tecnick.tcpdf
+ * @version 1.0.021
+ * @author Nicola Asuni
+ */
class TCPDFBarcode {
-
+
/**
- * @var array representation of barcode.
- * @access protected
+ * Array representation of barcode.
+ * @protected
*/
protected $barcode_array;
-
+
/**
- * This is the class constructor.
+ * This is the class constructor.
* Return an array representations for common 1D barcodes:
* $arrcode['code'] code to be printed on text label
- * $arrcode['maxh'] max bar height
- * $arrcode['maxw'] max bar width
+ * $arrcode['maxh'] max barcode height
+ * $arrcode['maxw'] max barcode width
* $arrcode['bcode'][$k] single bar or space in $k position
* $arrcode['bcode'][$k]['t'] bar type: true = bar, false = space.
* $arrcode['bcode'][$k]['w'] bar width in units.
* $arrcode['bcode'][$k]['h'] bar height in units.
* $arrcode['bcode'][$k]['p'] bar top position (0 = top, 1 = middle)
- * @param string $code code to print
- * @param string $type type of barcode: C39 : CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9. C39+ : CODE 39 with checksum C39E : CODE 39 EXTENDED C39E+ : CODE 39 EXTENDED + CHECKSUM C93 : CODE 93 - USS-93 S25 : Standard 2 of 5 S25+ : Standard 2 of 5 + CHECKSUM I25 : Interleaved 2 of 5 I25+ : Interleaved 2 of 5 + CHECKSUM C128A : CODE 128 A C128B : CODE 128 B C128C : CODE 128 C EAN2 : 2-Digits UPC-Based Extention EAN5 : 5-Digits UPC-Based Extention EAN8 : EAN 8 EAN13 : EAN 13 UPCA : UPC-A UPCE : UPC-E MSI : MSI (Variation of Plessey code) MSI+ : MSI + CHECKSUM (modulo 11) POSTNET : POSTNET PLANET : PLANET RMS4CC : RMS4CC (Royal Mail 4-state Customer Code) - CBC (Customer Bar Code) KIX : KIX (Klant index - Customer index) IMB: Intelligent Mail Barcode - Onecode - USPS-B-3200 CODABAR : CODABAR CODE11 : CODE 11 PHARMA : PHARMACODE PHARMA2T : PHARMACODE TWO-TRACKS
+ * @param $code (string) code to print
+ * @param $type (string) type of barcode: C39 : CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9. C39+ : CODE 39 with checksum C39E : CODE 39 EXTENDED C39E+ : CODE 39 EXTENDED + CHECKSUM C93 : CODE 93 - USS-93 S25 : Standard 2 of 5 S25+ : Standard 2 of 5 + CHECKSUM I25 : Interleaved 2 of 5 I25+ : Interleaved 2 of 5 + CHECKSUM C128 : CODE 128 C128A : CODE 128 A C128B : CODE 128 B C128C : CODE 128 C EAN2 : 2-Digits UPC-Based Extention EAN5 : 5-Digits UPC-Based Extention EAN8 : EAN 8 EAN13 : EAN 13 UPCA : UPC-A UPCE : UPC-E MSI : MSI (Variation of Plessey code) MSI+ : MSI + CHECKSUM (modulo 11) POSTNET : POSTNET PLANET : PLANET RMS4CC : RMS4CC (Royal Mail 4-state Customer Code) - CBC (Customer Bar Code) KIX : KIX (Klant index - Customer index) IMB: Intelligent Mail Barcode - Onecode - USPS-B-3200 CODABAR : CODABAR CODE11 : CODE 11 PHARMA : PHARMACODE PHARMA2T : PHARMACODE TWO-TRACKS
+ * @public
*/
public function __construct($code, $type) {
$this->setBarcode($code, $type);
}
-
- /**
+
+ /**
* Return an array representations of barcode.
* @return array
+ * @public
*/
public function getBarcodeArray() {
return $this->barcode_array;
}
-
- /**
+
+ /**
+ * Send barcode as SVG image object to the standard output.
+ * @param $w (int) Minimum width of a single bar in user units.
+ * @param $h (int) Height of barcode in user units.
+ * @param $color (string) Foreground color (in SVG format) for bar elements (background is transparent).
+ * @public
+ */
+ public function getBarcodeSVG($w=2, $h=30, $color='black') {
+ // send headers
+ $code = $this->getBarcodeSVGcode($w, $h, $color);
+ header('Content-Type: application/svg+xml');
+ header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1
+ header('Pragma: public');
+ header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
+ header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
+ header('Content-Disposition: inline; filename="'.md5($code).'.svg";');
+ //header('Content-Length: '.strlen($code));
+ echo $code;
+ }
+
+ /**
+ * Return a SVG string representation of barcode.
+ * @param $w (int) Minimum width of a single bar in user units.
+ * @param $h (int) Height of barcode in user units.
+ * @param $color (string) Foreground color (in SVG format) for bar elements (background is transparent).
+ * @return string SVG code.
+ * @public
+ */
+ public function getBarcodeSVGcode($w=2, $h=30, $color='black') {
+ // replace table for special characters
+ $repstr = array("\0" => '', '&' => '&', '<' => '<', '>' => '>');
+ $svg = '<'.'?'.'xml version="1.0" standalone="no"'.'?'.'>'."\n";
+ $svg .= ''."\n";
+ $svg .= ''."\n";
+ $svg .= "\t".''.strtr($this->barcode_array['code'], $repstr).' '."\n";
+ $svg .= "\t".''."\n";
+ // print bars
+ $x = 0;
+ foreach ($this->barcode_array['bcode'] as $k => $v) {
+ $bw = round(($v['w'] * $w), 3);
+ $bh = round(($v['h'] * $h / $this->barcode_array['maxh']), 3);
+ if ($v['t']) {
+ $y = round(($v['p'] * $h / $this->barcode_array['maxh']), 3);
+ // draw a vertical bar
+ $svg .= "\t\t".' '."\n";
+ }
+ $x += $bw;
+ }
+ $svg .= "\t".' '."\n";
+ $svg .= ' '."\n";
+ return $svg;
+ }
+
+ /**
+ * Return an HTML representation of barcode.
+ * @param $w (int) Width of a single bar element in pixels.
+ * @param $h (int) Height of a single bar element in pixels.
+ * @param $color (string) Foreground color for bar elements (background is transparent).
+ * @return string HTML code.
+ * @public
+ */
+ public function getBarcodeHTML($w=2, $h=30, $color='black') {
+ // replace table for special characters
+ $html = ''."\n";
+ // print bars
+ $x = 0;
+ foreach ($this->barcode_array['bcode'] as $k => $v) {
+ $bw = round(($v['w'] * $w), 3);
+ $bh = round(($v['h'] * $h / $this->barcode_array['maxh']), 3);
+ if ($v['t']) {
+ $y = round(($v['p'] * $h / $this->barcode_array['maxh']), 3);
+ // draw a vertical bar
+ $html .= '
'."\n";
+ }
+ $x += $bw;
+ }
+ $html .= '
'."\n";
+ return $html;
+ }
+
+ /**
+ * Return a PNG image representation of barcode (requires GD or Imagick library).
+ * @param $w (int) Width of a single bar element in pixels.
+ * @param $h (int) Height of a single bar element in pixels.
+ * @param $color (array) RGB (0-255) foreground color for bar elements (background is transparent).
+ * @return image or false in case of error.
+ * @public
+ */
+ public function getBarcodePNG($w=2, $h=30, $color=array(0,0,0)) {
+ // calculate image size
+ $width = ($this->barcode_array['maxw'] * $w);
+ $height = $h;
+ if (function_exists('imagecreate')) {
+ // GD library
+ $imagick = false;
+ $png = imagecreate($width, $height);
+ $bgcol = imagecolorallocate($png, 255, 255, 255);
+ imagecolortransparent($png, $bgcol);
+ $fgcol = imagecolorallocate($png, $color[0], $color[1], $color[2]);
+ } elseif (extension_loaded('imagick')) {
+ $imagick = true;
+ $bgcol = new imagickpixel('rgb(255,255,255');
+ $fgcol = new imagickpixel('rgb('.$color[0].','.$color[1].','.$color[2].')');
+ $png = new Imagick();
+ $png->newImage($width, $height, 'none', 'png');
+ $bar = new imagickdraw();
+ $bar->setfillcolor($fgcol);
+ } else {
+ return false;
+ }
+ // print bars
+ $x = 0;
+ foreach ($this->barcode_array['bcode'] as $k => $v) {
+ $bw = round(($v['w'] * $w), 3);
+ $bh = round(($v['h'] * $h / $this->barcode_array['maxh']), 3);
+ if ($v['t']) {
+ $y = round(($v['p'] * $h / $this->barcode_array['maxh']), 3);
+ // draw a vertical bar
+ if ($imagick) {
+ $bar->rectangle($x, $y, ($x + $bw), ($y + $bh));
+ } else {
+ imagefilledrectangle($png, $x, $y, ($x + $bw), ($y + $bh), $fgcol);
+ }
+ }
+ $x += $bw;
+ }
+ // send headers
+ header('Content-Type: image/png');
+ header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1
+ header('Pragma: public');
+ header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
+ header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
+ if ($imagick) {
+ $png->drawimage($bar);
+ echo $png;
+ } else {
+ imagepng($png);
+ imagedestroy($png);
+ }
+ }
+
+ /**
* Set the barcode.
- * @param string $code code to print
- * @param string $type type of barcode: C39 : CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9. C39+ : CODE 39 with checksum C39E : CODE 39 EXTENDED C39E+ : CODE 39 EXTENDED + CHECKSUM C93 : CODE 93 - USS-93 S25 : Standard 2 of 5 S25+ : Standard 2 of 5 + CHECKSUM I25 : Interleaved 2 of 5 I25+ : Interleaved 2 of 5 + CHECKSUM C128A : CODE 128 A C128B : CODE 128 B C128C : CODE 128 C EAN2 : 2-Digits UPC-Based Extention EAN5 : 5-Digits UPC-Based Extention EAN8 : EAN 8 EAN13 : EAN 13 UPCA : UPC-A UPCE : UPC-E MSI : MSI (Variation of Plessey code) MSI+ : MSI + CHECKSUM (modulo 11) POSTNET : POSTNET PLANET : PLANET RMS4CC : RMS4CC (Royal Mail 4-state Customer Code) - CBC (Customer Bar Code) KIX : KIX (Klant index - Customer index) IMB: Intelligent Mail Barcode - Onecode - USPS-B-3200 CODABAR : CODABAR CODE11 : CODE 11 PHARMA : PHARMACODE PHARMA2T : PHARMACODE TWO-TRACKS
- * @return array
+ * @param $code (string) code to print
+ * @param $type (string) type of barcode: C39 : CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9. C39+ : CODE 39 with checksum C39E : CODE 39 EXTENDED C39E+ : CODE 39 EXTENDED + CHECKSUM C93 : CODE 93 - USS-93 S25 : Standard 2 of 5 S25+ : Standard 2 of 5 + CHECKSUM I25 : Interleaved 2 of 5 I25+ : Interleaved 2 of 5 + CHECKSUM C128 : CODE 128 C128A : CODE 128 A C128B : CODE 128 B C128C : CODE 128 C EAN2 : 2-Digits UPC-Based Extention EAN5 : 5-Digits UPC-Based Extention EAN8 : EAN 8 EAN13 : EAN 13 UPCA : UPC-A UPCE : UPC-E MSI : MSI (Variation of Plessey code) MSI+ : MSI + CHECKSUM (modulo 11) POSTNET : POSTNET PLANET : PLANET RMS4CC : RMS4CC (Royal Mail 4-state Customer Code) - CBC (Customer Bar Code) KIX : KIX (Klant index - Customer index) IMB: Intelligent Mail Barcode - Onecode - USPS-B-3200 CODABAR : CODABAR CODE11 : CODE 11 PHARMA : PHARMACODE PHARMA2T : PHARMACODE TWO-TRACKS
+ * @return array barcode array
+ * @public
*/
public function setBarcode($code, $type) {
switch (strtoupper($type)) {
@@ -137,6 +269,10 @@ class TCPDFBarcode {
$arrcode = $this->barcode_i25($code, true);
break;
}
+ case 'C128': { // CODE 128
+ $arrcode = $this->barcode_c128($code, '');
+ break;
+ }
case 'C128A': { // CODE 128 A
$arrcode = $this->barcode_c128($code, 'A');
break;
@@ -225,61 +361,61 @@ class TCPDFBarcode {
}
$this->barcode_array = $arrcode;
}
-
+
/**
* CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9.
* General-purpose code in very wide use world-wide
- * @param string $code code to represent.
- * @param boolean $checksum if true add a checksum to the code
+ * @param $code (string) code to represent.
+ * @param $extended (boolean) if true uses the extended mode.
+ * @param $checksum (boolean) if true add a checksum to the code.
* @return array barcode representation.
- * @access protected
+ * @protected
*/
protected function barcode_code39($code, $extended=false, $checksum=false) {
- $chr['0'] = '111221211';
- $chr['1'] = '211211112';
- $chr['2'] = '112211112';
- $chr['3'] = '212211111';
- $chr['4'] = '111221112';
- $chr['5'] = '211221111';
- $chr['6'] = '112221111';
- $chr['7'] = '111211212';
- $chr['8'] = '211211211';
- $chr['9'] = '112211211';
- $chr['A'] = '211112112';
- $chr['B'] = '112112112';
- $chr['C'] = '212112111';
- $chr['D'] = '111122112';
- $chr['E'] = '211122111';
- $chr['F'] = '112122111';
- $chr['G'] = '111112212';
- $chr['H'] = '211112211';
- $chr['I'] = '112112211';
- $chr['J'] = '111122211';
- $chr['K'] = '211111122';
- $chr['L'] = '112111122';
- $chr['M'] = '212111121';
- $chr['N'] = '111121122';
- $chr['O'] = '211121121';
- $chr['P'] = '112121121';
- $chr['Q'] = '111111222';
- $chr['R'] = '211111221';
- $chr['S'] = '112111221';
- $chr['T'] = '111121221';
- $chr['U'] = '221111112';
- $chr['V'] = '122111112';
- $chr['W'] = '222111111';
- $chr['X'] = '121121112';
- $chr['Y'] = '221121111';
- $chr['Z'] = '122121111';
- $chr['-'] = '121111212';
- $chr['.'] = '221111211';
- $chr[' '] = '122111211';
- $chr['$'] = '121212111';
- $chr['/'] = '121211121';
- $chr['+'] = '121112121';
- $chr['%'] = '111212121';
- $chr['*'] = '121121211';
-
+ $chr['0'] = '111331311';
+ $chr['1'] = '311311113';
+ $chr['2'] = '113311113';
+ $chr['3'] = '313311111';
+ $chr['4'] = '111331113';
+ $chr['5'] = '311331111';
+ $chr['6'] = '113331111';
+ $chr['7'] = '111311313';
+ $chr['8'] = '311311311';
+ $chr['9'] = '113311311';
+ $chr['A'] = '311113113';
+ $chr['B'] = '113113113';
+ $chr['C'] = '313113111';
+ $chr['D'] = '111133113';
+ $chr['E'] = '311133111';
+ $chr['F'] = '113133111';
+ $chr['G'] = '111113313';
+ $chr['H'] = '311113311';
+ $chr['I'] = '113113311';
+ $chr['J'] = '111133311';
+ $chr['K'] = '311111133';
+ $chr['L'] = '113111133';
+ $chr['M'] = '313111131';
+ $chr['N'] = '111131133';
+ $chr['O'] = '311131131';
+ $chr['P'] = '113131131';
+ $chr['Q'] = '111111333';
+ $chr['R'] = '311111331';
+ $chr['S'] = '113111331';
+ $chr['T'] = '111131331';
+ $chr['U'] = '331111113';
+ $chr['V'] = '133111113';
+ $chr['W'] = '333111111';
+ $chr['X'] = '131131113';
+ $chr['Y'] = '331131111';
+ $chr['Z'] = '133131111';
+ $chr['-'] = '131111313';
+ $chr['.'] = '331111311';
+ $chr[' '] = '133111311';
+ $chr['$'] = '131313111';
+ $chr['/'] = '131311131';
+ $chr['+'] = '131113131';
+ $chr['%'] = '111313131';
+ $chr['*'] = '131131311';
$code = strtoupper($code);
if ($extended) {
// extended mode
@@ -294,7 +430,6 @@ class TCPDFBarcode {
}
// add start and stop codes
$code = '*'.$code.'*';
-
$bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array());
$k = 0;
$clen = strlen($code);
@@ -315,18 +450,19 @@ class TCPDFBarcode {
$bararray['maxw'] += $w;
++$k;
}
+ // intercharacter gap
$bararray['bcode'][$k] = array('t' => false, 'w' => 1, 'h' => 1, 'p' => 0);
$bararray['maxw'] += 1;
++$k;
}
return $bararray;
}
-
+
/**
* Encode a string to be used for CODE 39 Extended mode.
- * @param string $code code to represent.
+ * @param $code (string) code to represent.
* @return encoded string.
- * @access protected
+ * @protected
*/
protected function encode_code39_ext($code) {
$encode = array(
@@ -372,12 +508,12 @@ class TCPDFBarcode {
}
return $code_ext;
}
-
+
/**
* Calculate CODE 39 checksum (modulo 43).
- * @param string $code code to represent.
+ * @param $code (string) code to represent.
* @return char checksum.
- * @access protected
+ * @protected
*/
protected function checksum_code39($code) {
$chars = array(
@@ -394,64 +530,63 @@ class TCPDFBarcode {
$j = ($sum % 43);
return $chars[$j];
}
-
+
/**
* CODE 93 - USS-93
* Compact code similar to Code 39
- * @param string $code code to represent.
- * @param boolean $checksum if true add a checksum to the code
+ * @param $code (string) code to represent.
* @return array barcode representation.
- * @access protected
+ * @protected
*/
protected function barcode_code93($code) {
- $chr['0'] = '131112';
- $chr['1'] = '111213';
- $chr['2'] = '111312';
- $chr['3'] = '111411';
- $chr['4'] = '121113';
- $chr['5'] = '121212';
- $chr['6'] = '121311';
- $chr['7'] = '111114';
- $chr['8'] = '131211';
- $chr['9'] = '141111';
- $chr['A'] = '211113';
- $chr['B'] = '211212';
- $chr['C'] = '211311';
- $chr['D'] = '221112';
- $chr['E'] = '221211';
- $chr['F'] = '231111';
- $chr['G'] = '112113';
- $chr['H'] = '112212';
- $chr['I'] = '112311';
- $chr['J'] = '122112';
- $chr['K'] = '132111';
- $chr['L'] = '111123';
- $chr['M'] = '111222';
- $chr['N'] = '111321';
- $chr['O'] = '121122';
- $chr['P'] = '131121';
- $chr['Q'] = '212112';
- $chr['R'] = '212211';
- $chr['S'] = '211122';
- $chr['T'] = '211221';
- $chr['U'] = '221121';
- $chr['V'] = '222111';
- $chr['W'] = '112122';
- $chr['X'] = '112221';
- $chr['Y'] = '122121';
- $chr['Z'] = '123111';
- $chr['-'] = '121131';
- $chr['.'] = '311112';
- $chr[' '] = '311211';
- $chr['$'] = '321111';
- $chr['/'] = '112131';
- $chr['+'] = '113121';
- $chr['%'] = '211131';
+ $chr[48] = '131112'; // 0
+ $chr[49] = '111213'; // 1
+ $chr[50] = '111312'; // 2
+ $chr[51] = '111411'; // 3
+ $chr[52] = '121113'; // 4
+ $chr[53] = '121212'; // 5
+ $chr[54] = '121311'; // 6
+ $chr[55] = '111114'; // 7
+ $chr[56] = '131211'; // 8
+ $chr[57] = '141111'; // 9
+ $chr[65] = '211113'; // A
+ $chr[66] = '211212'; // B
+ $chr[67] = '211311'; // C
+ $chr[68] = '221112'; // D
+ $chr[69] = '221211'; // E
+ $chr[70] = '231111'; // F
+ $chr[71] = '112113'; // G
+ $chr[72] = '112212'; // H
+ $chr[73] = '112311'; // I
+ $chr[74] = '122112'; // J
+ $chr[75] = '132111'; // K
+ $chr[76] = '111123'; // L
+ $chr[77] = '111222'; // M
+ $chr[78] = '111321'; // N
+ $chr[79] = '121122'; // O
+ $chr[80] = '131121'; // P
+ $chr[81] = '212112'; // Q
+ $chr[82] = '212211'; // R
+ $chr[83] = '211122'; // S
+ $chr[84] = '211221'; // T
+ $chr[85] = '221121'; // U
+ $chr[86] = '222111'; // V
+ $chr[87] = '112122'; // W
+ $chr[88] = '112221'; // X
+ $chr[89] = '122121'; // Y
+ $chr[90] = '123111'; // Z
+ $chr[45] = '121131'; // -
+ $chr[46] = '311112'; // .
+ $chr[32] = '311211'; //
+ $chr[36] = '321111'; // $
+ $chr[47] = '112131'; // /
+ $chr[43] = '113121'; // +
+ $chr[37] = '211131'; // %
$chr[128] = '121221'; // ($)
$chr[129] = '311121'; // (/)
$chr[130] = '122211'; // (+)
$chr[131] = '312111'; // (%)
- $chr['*'] = '111141';
+ $chr[42] = '111141'; // start-stop
$code = strtoupper($code);
$encode = array(
chr(0) => chr(131).'U', chr(1) => chr(128).'A', chr(2) => chr(128).'B', chr(3) => chr(128).'C',
@@ -495,14 +630,14 @@ class TCPDFBarcode {
$code_ext .= $encode[$code{$i}];
}
// checksum
- $code .= $this->checksum_code93($code);
+ $code_ext .= $this->checksum_code93($code_ext);
// add start and stop codes
- $code = '*'.$code.'*';
+ $code = '*'.$code_ext.'*';
$bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array());
$k = 0;
$clen = strlen($code);
for ($i = 0; $i < $clen; ++$i) {
- $char = $code{$i};
+ $char = ord($code{$i});
if(!isset($chr[$char])) {
// invalid character
return false;
@@ -521,24 +656,25 @@ class TCPDFBarcode {
}
$bararray['bcode'][$k] = array('t' => true, 'w' => 1, 'h' => 1, 'p' => 0);
$bararray['maxw'] += 1;
- ++$k;
+ ++$k;
return $bararray;
}
-
+
/**
* Calculate CODE 93 checksum (modulo 47).
- * @param string $code code to represent.
+ * @param $code (string) code to represent.
* @return string checksum code.
- * @access protected
+ * @protected
*/
protected function checksum_code93($code) {
$chars = array(
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K',
'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
- 'W', 'X', 'Y', 'Z', '-', '.', ' ', '$', '/', '+', '%');
+ 'W', 'X', 'Y', 'Z', '-', '.', ' ', '$', '/', '+', '%',
+ '<', '=', '>', '?');
// translate special characters
- $code = strtr($code, chr(128).chr(129).chr(130).chr(131), '$/+%');
+ $code = strtr($code, chr(128).chr(131).chr(129).chr(130), '<=>?');
$len = strlen($code);
// calculate check digit C
$p = 1;
@@ -567,14 +703,17 @@ class TCPDFBarcode {
}
$check %= 47;
$k = $chars[$check];
- return $c.$k;
+ $checksum = $c.$k;
+ // resto respecial characters
+ $checksum = strtr($checksum, '<=>?', chr(128).chr(131).chr(129).chr(130));
+ return $checksum;
}
-
+
/**
* Checksum for standard 2 of 5 barcodes.
- * @param string $code code to process.
+ * @param $code (string) code to process.
* @return int checksum.
- * @access protected
+ * @protected
*/
protected function checksum_s25($code) {
$len = strlen($code);
@@ -592,15 +731,15 @@ class TCPDFBarcode {
}
return $r;
}
-
+
/**
* MSI.
- * Variation of Plessey code, with similar applications
+ * Variation of Plessey code, with similar applications
* Contains digits (0 to 9) and encodes the data only in the width of bars.
- * @param string $code code to represent.
- * @param boolean $checksum if true add a checksum to the code (modulo 11)
+ * @param $code (string) code to represent.
+ * @param $checksum (boolean) if true add a checksum to the code (modulo 11)
* @return array barcode representation.
- * @access protected
+ * @protected
*/
protected function barcode_msi($code, $checksum=false) {
$chr['0'] = '100100100100';
@@ -646,20 +785,20 @@ class TCPDFBarcode {
return false;
}
$seq .= $chr[$digit];
- }
+ }
$seq .= '1001'; // right guard
$bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array());
return $this->binseq_to_array($seq, $bararray);
}
-
+
/**
* Standard 2 of 5 barcodes.
* Used in airline ticket marking, photofinishing
* Contains digits (0 to 9) and encodes the data only in the width of bars.
- * @param string $code code to represent.
- * @param boolean $checksum if true add a checksum to the code
+ * @param $code (string) code to represent.
+ * @param $checksum (boolean) if true add a checksum to the code
* @return array barcode representation.
- * @access protected
+ * @protected
*/
protected function barcode_s25($code, $checksum=false) {
$chr['0'] = '10101110111010';
@@ -689,18 +828,19 @@ class TCPDFBarcode {
return false;
}
$seq .= $chr[$digit];
- }
+ }
$seq .= '1101011';
$bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array());
return $this->binseq_to_array($seq, $bararray);
}
-
+
/**
- * Convert binary barcode sequence to TCPDF barcode array
- * @param string $seq barcode as binary sequence
+ * Convert binary barcode sequence to TCPDF barcode array.
+ * @param $seq (string) barcode as binary sequence.
+ * @param $bararray (array) barcode array.
* òparam array $bararray TCPDF barcode array to fill up
* @return array barcode representation.
- * @access protected
+ * @protected
*/
protected function binseq_to_array($seq, $bararray) {
$len = strlen($seq);
@@ -722,15 +862,15 @@ class TCPDFBarcode {
}
return $bararray;
}
-
+
/**
* Interleaved 2 of 5 barcodes.
* Compact numeric code, widely used in industry, air cargo
* Contains digits (0 to 9) and encodes the data in the width of both bars and spaces.
- * @param string $code code to represent.
- * @param boolean $checksum if true add a checksum to the code
+ * @param $code (string) code to represent.
+ * @param $checksum (boolean) if true add a checksum to the code
* @return array barcode representation.
- * @access protected
+ * @protected
*/
protected function barcode_i25($code, $checksum=false) {
$chr['0'] = '11221';
@@ -755,7 +895,7 @@ class TCPDFBarcode {
}
// add start and stop codes
$code = 'AA'.strtolower($code).'ZA';
-
+
$bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array());
$k = 0;
$clen = strlen($code);
@@ -787,16 +927,16 @@ class TCPDFBarcode {
}
return $bararray;
}
-
+
/**
- * C128 barcodes.
+ * C128 barcodes.
* Very capable code, excellent density, high reliability; in very wide use world-wide
- * @param string $code code to represent.
- * @param string $type barcode type: A, B or C
+ * @param $code (string) code to represent.
+ * @param $type (string) barcode type: A, B, C or empty for automatic switch (AUTO mode)
* @return array barcode representation.
- * @access protected
+ * @protected
*/
- protected function barcode_c128($code, $type='B') {
+ protected function barcode_c128($code, $type='') {
$chr = array(
'212222', /* 00 */
'222122', /* 01 */
@@ -902,71 +1042,210 @@ class TCPDFBarcode {
'311141', /* 101 */
'411131', /* 102 */
'211412', /* 103 START A */
- '211214', /* 104 START B */
- '211232', /* 105 START C */
+ '211214', /* 104 START B */
+ '211232', /* 105 START C */
'233111', /* STOP */
'200000' /* END */
);
- $keys = '';
+ // ASCII characters for code A (ASCII 00 - 95)
+ $keys_a = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_';
+ $keys_a .= chr(0).chr(1).chr(2).chr(3).chr(4).chr(5).chr(6).chr(7).chr(8).chr(9);
+ $keys_a .= chr(10).chr(11).chr(12).chr(13).chr(14).chr(15).chr(16).chr(17).chr(18).chr(19);
+ $keys_a .= chr(20).chr(21).chr(22).chr(23).chr(24).chr(25).chr(26).chr(27).chr(28).chr(29);
+ $keys_a .= chr(30).chr(31);
+ // ASCII characters for code B (ASCII 32 - 127)
+ $keys_b = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~'.chr(127);
+ // special codes
+ $fnc_a = array(241 => 102, 242 => 97, 243 => 96, 244 => 101);
+ $fnc_b = array(241 => 102, 242 => 97, 243 => 96, 244 => 100);
+ // array of symbols
+ $code_data = array();
+ // lenght of the code
+ $len = strlen($code);
switch(strtoupper($type)) {
- case 'A': {
+ case 'A': { // MODE A
$startid = 103;
- $keys = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_';
- for ($i = 0; $i < 32; ++$i) {
- $keys .= chr($i);
+ for ($i = 0; $i < $len; ++$i) {
+ $char = $code{$i};
+ $char_id = ord($char);
+ if (($char_id >= 241) AND ($char_id <= 244)) {
+ $code_data[] = $fnc_a[$char_id];
+ } elseif (($char_id >= 0) AND ($char_id <= 95)) {
+ $code_data[] = strpos($keys_a, $char);
+ } else {
+ return false;
+ }
}
break;
}
- case 'B': {
+ case 'B': { // MODE B
$startid = 104;
- $keys = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~'.chr(127);
+ for ($i = 0; $i < $len; ++$i) {
+ $char = $code{$i};
+ $char_id = ord($char);
+ if (($char_id >= 241) AND ($char_id <= 244)) {
+ $code_data[] = $fnc_b[$char_id];
+ } elseif (($char_id >= 32) AND ($char_id <= 127)) {
+ $code_data[] = strpos($keys_b, $char);
+ } else {
+ return false;
+ }
+ }
break;
}
- case 'C': {
+ case 'C': { // MODE C
$startid = 105;
- $keys = '';
- if ((strlen($code) % 2) != 0) {
- // The length of barcode value must be even ($code). You must pad the number with zeros
+ if (ord($code{0}) == 241) {
+ $code_data[] = 102;
+ $code = substr($code, 1);
+ --$len;
+ }
+ if (($len % 2) != 0) {
+ // the length must be even
return false;
}
- for ($i = 0; $i <= 99; ++$i) {
- $keys .= chr($i);
+ for ($i = 0; $i < $len; $i+=2) {
+ $chrnum = $code{$i}.$code{$i+1};
+ if (preg_match('/([0-9]{2})/', $chrnum) > 0) {
+ $code_data[] = intval($chrnum);
+ } else {
+ return false;
+ }
}
- $new_code = '';
- $hclen = (strlen($code) / 2);
- for ($i = 0; $i < $hclen; ++$i) {
- $new_code .= chr(intval($code{(2 * $i)}.$code{(2 * $i + 1)}));
- }
- $code = $new_code;
break;
}
- default: {
- return false;
+ default: { // MODE AUTO
+ // split code into sequences
+ $sequence = array();
+ // get numeric sequences (if any)
+ $numseq = array();
+ preg_match_all('/([0-9]{4,})/', $code, $numseq, PREG_OFFSET_CAPTURE);
+ if (isset($numseq[1]) AND !empty($numseq[1])) {
+ $end_offset = 0;
+ foreach ($numseq[1] as $val) {
+ $offset = $val[1];
+ if ($offset > $end_offset) {
+ // non numeric sequence
+ $sequence = array_merge($sequence, $this->get128ABsequence(substr($code, $end_offset, ($offset - $end_offset))));
+ }
+ // numeric sequence
+ $slen = strlen($val[0]);
+ if (($slen % 2) != 0) {
+ // the length must be even
+ --$slen;
+ }
+ $sequence[] = array('C', substr($code, $offset, $slen), $slen);
+ $end_offset = $offset + $slen;
+ }
+ if ($end_offset < $len) {
+ $sequence = array_merge($sequence, $this->get128ABsequence(substr($code, $end_offset)));
+ }
+ } else {
+ // text code (non C mode)
+ $sequence = array_merge($sequence, $this->get128ABsequence($code));
+ }
+ // process the sequence
+ foreach ($sequence as $key => $seq) {
+ switch($seq[0]) {
+ case 'A': {
+ if ($key == 0) {
+ $startid = 103;
+ } elseif ($sequence[($key - 1)][0] != 'A') {
+ if (($seq[2] == 1) AND ($key > 0) AND ($sequence[($key - 1)][0] == 'B') AND (!isset($sequence[($key - 1)][3]))) {
+ // single character shift
+ $code_data[] = 98;
+ // mark shift
+ $sequence[$key][3] = true;
+ } elseif (!isset($sequence[($key - 1)][3])) {
+ $code_data[] = 101;
+ }
+ }
+ for ($i = 0; $i < $seq[2]; ++$i) {
+ $char = $seq[1]{$i};
+ $char_id = ord($char);
+ if (($char_id >= 241) AND ($char_id <= 244)) {
+ $code_data[] = $fnc_a[$char_id];
+ } else {
+ $code_data[] = strpos($keys_a, $char);
+ }
+ }
+ break;
+ }
+ case 'B': {
+ if ($key == 0) {
+ $tmpchr = ord($seq[1]{0});
+ if (($seq[2] == 1) AND ($tmpchr >= 241) AND ($tmpchr <= 244) AND isset($sequence[($key + 1)]) AND ($sequence[($key + 1)][0] != 'B')) {
+ switch ($sequence[($key + 1)][0]) {
+ case 'A': {
+ $startid = 103;
+ $sequence[$key][0] = 'A';
+ $code_data[] = $fnc_a[$tmpchr];
+ break;
+ }
+ case 'C': {
+ $startid = 105;
+ $sequence[$key][0] = 'C';
+ $code_data[] = $fnc_a[$tmpchr];
+ break;
+ }
+ }
+ break;
+ } else {
+ $startid = 104;
+ }
+ } elseif ($sequence[($key - 1)][0] != 'B') {
+ if (($seq[2] == 1) AND ($key > 0) AND ($sequence[($key - 1)][0] == 'A') AND (!isset($sequence[($key - 1)][3]))) {
+ // single character shift
+ $code_data[] = 98;
+ // mark shift
+ $sequence[$key][3] = true;
+ } elseif (!isset($sequence[($key - 1)][3])) {
+ $code_data[] = 100;
+ }
+ }
+ for ($i = 0; $i < $seq[2]; ++$i) {
+ $char = $seq[1]{$i};
+ $char_id = ord($char);
+ if (($char_id >= 241) AND ($char_id <= 244)) {
+ $code_data[] = $fnc_b[$char_id];
+ } else {
+ $code_data[] = strpos($keys_b, $char);
+ }
+ }
+ break;
+ }
+ case 'C': {
+ if ($key == 0) {
+ $startid = 105;
+ } elseif ($sequence[($key - 1)][0] != 'C') {
+ $code_data[] = 99;
+ }
+ for ($i = 0; $i < $seq[2]; $i+=2) {
+ $chrnum = $seq[1]{$i}.$seq[1]{$i+1};
+ $code_data[] = intval($chrnum);
+ }
+ break;
+ }
+ }
+ }
}
}
// calculate check character
$sum = $startid;
- $clen = strlen($code);
- for ($i = 0; $i < $clen; ++$i) {
- $sum += (strpos($keys, $code{$i}) * ($i+1));
+ foreach ($code_data as $key => $val) {
+ $sum += ($val * ($key + 1));
}
- $check = ($sum % 103);
- // add start, check and stop codes
- $code = chr($startid).$code.chr($check).chr(106).chr(107);
+ // add check character
+ $code_data[] = ($sum % 103);
+ // add stop sequence
+ $code_data[] = 106;
+ $code_data[] = 107;
+ // add start code at the beginning
+ array_unshift($code_data, $startid);
+ // build barcode array
$bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array());
- $k = 0;
- $len = strlen($code);
- for ($i = 0; $i < $len; ++$i) {
- $ck = strpos($keys, $code{$i});
- if (($i == 0) OR ($i > ($len-4))) {
- $char_num = ord($code{$i});
- $seq = $chr[$char_num];
- } elseif(($ck >= 0) AND isset($chr[$ck])) {
- $seq = $chr[$ck];
- } else {
- // invalid character
- return false;
- }
+ foreach ($code_data as $val) {
+ $seq = $chr[$val];
for ($j = 0; $j < 6; ++$j) {
if (($j % 2) == 0) {
$t = true; // bar
@@ -974,23 +1253,57 @@ class TCPDFBarcode {
$t = false; // space
}
$w = $seq{$j};
- $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0);
+ $bararray['bcode'][] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0);
$bararray['maxw'] += $w;
- ++$k;
}
}
- return $bararray;
+ return $bararray;
}
-
+
+ /**
+ * Split text code in A/B sequence for 128 code
+ * @param $code (string) code to split.
+ * @return array sequence
+ * @protected
+ */
+ protected function get128ABsequence($code) {
+ $len = strlen($code);
+ $sequence = array();
+ // get A sequences (if any)
+ $numseq = array();
+ preg_match_all('/([\0-\31])/', $code, $numseq, PREG_OFFSET_CAPTURE);
+ if (isset($numseq[1]) AND !empty($numseq[1])) {
+ $end_offset = 0;
+ foreach ($numseq[1] as $val) {
+ $offset = $val[1];
+ if ($offset > $end_offset) {
+ // B sequence
+ $sequence[] = array('B', substr($code, $end_offset, ($offset - $end_offset)), ($offset - $end_offset));
+ }
+ // A sequence
+ $slen = strlen($val[0]);
+ $sequence[] = array('A', substr($code, $offset, $slen), $slen);
+ $end_offset = $offset + $slen;
+ }
+ if ($end_offset < $len) {
+ $sequence[] = array('B', substr($code, $end_offset), ($len - $end_offset));
+ }
+ } else {
+ // only B sequence
+ $sequence[] = array('B', $code, $len);
+ }
+ return $sequence;
+ }
+
/**
* EAN13 and UPC-A barcodes.
* EAN13: European Article Numbering international retail product code
* UPC-A: Universal product code seen on almost all retail products in the USA and Canada
* UPC-E: Short version of UPC symbol
- * @param string $code code to represent.
- * @param string $len barcode type: 6 = UPC-E, 8 = EAN8, 13 = EAN13, 12 = UPC-A
+ * @param $code (string) code to represent.
+ * @param $len (string) barcode type: 6 = UPC-E, 8 = EAN8, 13 = EAN13, 12 = UPC-A
* @return array barcode representation.
- * @access protected
+ * @protected
*/
protected function barcode_eanupc($code, $len=13) {
$upce = false;
@@ -1175,15 +1488,15 @@ class TCPDFBarcode {
}
return $bararray;
}
-
+
/**
* UPC-Based Extentions
* 2-Digit Ext.: Used to indicate magazines and newspaper issue numbers
* 5-Digit Ext.: Used to mark suggested retail price of books
- * @param string $code code to represent.
- * @param string $len barcode type: 2 = 2-Digit, 5 = 5-Digit
+ * @param $code (string) code to represent.
+ * @param $len (string) barcode type: 2 = 2-Digit, 5 = 5-Digit
* @return array barcode representation.
- * @access protected
+ * @protected
*/
protected function barcode_eanext($code, $len=5) {
//Padding
@@ -1240,7 +1553,7 @@ class TCPDFBarcode {
'7'=>array('A','B','A','B','A'),
'8'=>array('A','B','A','A','B'),
'9'=>array('A','A','B','A','B')
- );
+ );
$p = $parities[$len][$r];
$seq = '1011'; // left guard bar
$seq .= $codes[$p[0]][$code{0}];
@@ -1251,14 +1564,14 @@ class TCPDFBarcode {
$bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array());
return $this->binseq_to_array($seq, $bararray);
}
-
+
/**
* POSTNET and PLANET barcodes.
* Used by U.S. Postal Service for automated mail sorting
- * @param string $code zip code to represent. Must be a string containing a zip code of the form DDDDD or DDDDD-DDDD.
- * @param boolean $planet if true print the PLANET barcode, otherwise print POSTNET
+ * @param $code (string) zip code to represent. Must be a string containing a zip code of the form DDDDD or DDDDD-DDDD.
+ * @param $planet (boolean) if true print the PLANET barcode, otherwise print POSTNET
* @return array barcode representation.
- * @access protected
+ * @protected
*/
protected function barcode_postnet($code, $planet=false) {
// bar lenght
@@ -1323,15 +1636,15 @@ class TCPDFBarcode {
$bararray['maxw'] += 1;
return $bararray;
}
-
+
/**
* RMS4CC - CBC - KIX
* RMS4CC (Royal Mail 4-state Customer Code) - CBC (Customer Bar Code) - KIX (Klant index - Customer index)
* RM4SCC is the name of the barcode symbology used by the Royal Mail for its Cleanmail service.
- * @param string $code code to print
- * @param boolean $kix if true prints the KIX variation (doesn't use the start and end symbols, and the checksum) - in this case the house number must be sufficed with an X and placed at the end of the code.
+ * @param $code (string) code to print
+ * @param $kix (boolean) if true prints the KIX variation (doesn't use the start and end symbols, and the checksum) - in this case the house number must be sufficed with an X and placed at the end of the code.
* @return array barcode representation.
- * @access protected
+ * @protected
*/
protected function barcode_rms4cc($code, $kix=false) {
$notkix = !$kix;
@@ -1376,7 +1689,7 @@ class TCPDFBarcode {
'W' => array(1,2,4,3),
'X' => array(2,1,3,4),
'Y' => array(2,1,4,3),
- 'Z' => array(2,2,3,3)
+ 'Z' => array(2,2,3,3)
);
$code = strtoupper($code);
$len = strlen($code);
@@ -1476,13 +1789,13 @@ class TCPDFBarcode {
}
return $bararray;
}
-
+
/**
* CODABAR barcodes.
* Older code often used in library systems, sometimes in blood banks
- * @param string $code code to represent.
+ * @param $code (string) code to represent.
* @return array barcode representation.
- * @access protected
+ * @protected
*/
protected function barcode_codabar($code) {
$chr = array(
@@ -1532,13 +1845,13 @@ class TCPDFBarcode {
}
return $bararray;
}
-
+
/**
* CODE11 barcodes.
* Used primarily for labeling telecommunications equipment
- * @param string $code code to represent.
+ * @param $code (string) code to represent.
* @return array barcode representation.
- * @access protected
+ * @protected
*/
protected function barcode_code11($code) {
$chr = array(
@@ -1555,7 +1868,6 @@ class TCPDFBarcode {
'-' => '112111',
'S' => '112211'
);
-
$bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array());
$k = 0;
$w = 0;
@@ -1580,7 +1892,7 @@ class TCPDFBarcode {
$check %= 11;
if ($check == 10) {
$check = '-';
- }
+ }
$code .= $check;
if ($len > 10) {
// calculate check digit K
@@ -1624,13 +1936,13 @@ class TCPDFBarcode {
}
return $bararray;
}
-
+
/**
* Pharmacode
* Contains digits (0 to 9)
- * @param string $code code to represent.
+ * @param $code (string) code to represent.
* @return array barcode representation.
- * @access protected
+ * @protected
*/
protected function barcode_pharmacode($code) {
$seq = '';
@@ -1650,13 +1962,13 @@ class TCPDFBarcode {
$bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array());
return $this->binseq_to_array($seq, $bararray);
}
-
+
/**
* Pharmacode two-track
* Contains digits (0 to 9)
- * @param string $code code to represent.
+ * @param $code (string) code to represent.
* @return array barcode representation.
- * @access protected
+ * @protected
*/
protected function barcode_pharmacode2t($code) {
$seq = '';
@@ -1710,16 +2022,16 @@ class TCPDFBarcode {
--$bararray['maxw'];
return $bararray;
}
-
-
+
+
/**
* IMB - Intelligent Mail Barcode - Onecode - USPS-B-3200
- * (requires PHP bcmath extension)
+ * (requires PHP bcmath extension)
* Intelligent Mail barcode is a 65-bar code for use on mail in the United States.
* The fields are described as follows:The Barcode Identifier shall be assigned by USPS to encode the presort identification that is currently printed in human readable form on the optional endorsement line (OEL) as well as for future USPS use. This shall be two digits, with the second digit in the range of 0–4. The allowable encoding ranges shall be 00–04, 10–14, 20–24, 30–34, 40–44, 50–54, 60–64, 70–74, 80–84, and 90–94. The Service Type Identifier shall be assigned by USPS for any combination of services requested on the mailpiece. The allowable encoding range shall be 000http://it2.php.net/manual/en/function.dechex.php–999. Each 3-digit value shall correspond to a particular mail class with a particular combination of service(s). Each service program, such as OneCode Confirm and OneCode ACS, shall provide the list of Service Type Identifier values. The Mailer or Customer Identifier shall be assigned by USPS as a unique, 6 or 9 digit number that identifies a business entity. The allowable encoding range for the 6 digit Mailer ID shall be 000000- 899999, while the allowable encoding range for the 9 digit Mailer ID shall be 900000000-999999999. The Serial or Sequence Number shall be assigned by the mailer for uniquely identifying and tracking mailpieces. The allowable encoding range shall be 000000000–999999999 when used with a 6 digit Mailer ID and 000000-999999 when used with a 9 digit Mailer ID. e. The Delivery Point ZIP Code shall be assigned by the mailer for routing the mailpiece. This shall replace POSTNET for routing the mailpiece to its final delivery point. The length may be 0, 5, 9, or 11 digits. The allowable encoding ranges shall be no ZIP Code, 00000–99999, 000000000–999999999, and 00000000000–99999999999.
- * @param string $code code to print, separate the ZIP (routing code) from the rest using a minus char '-' (BarcodeID_ServiceTypeID_MailerID_SerialNumber-RoutingCode)
+ * @param $code (string) code to print, separate the ZIP (routing code) from the rest using a minus char '-' (BarcodeID_ServiceTypeID_MailerID_SerialNumber-RoutingCode)
* @return array barcode representation.
- * @access protected
+ * @protected
*/
protected function barcode_imb($code) {
$asc_chr = array(4,0,2,6,3,5,1,9,8,7,1,2,0,6,4,8,2,9,5,3,0,1,3,7,4,6,8,9,2,0,5,1,9,4,3,8,6,7,1,2,4,3,9,5,7,8,3,0,2,1,4,0,9,1,7,0,2,4,6,3,7,1,9,5,8);
@@ -1838,11 +2150,11 @@ class TCPDFBarcode {
--$bararray['maxw'];
return $bararray;
}
-
+
/**
* Convert large integer number to hexadecimal representation.
- * (requires PHP bcmath extension)
- * @param string $number number to convert specified as a string
+ * (requires PHP bcmath extension)
+ * @param $number (string) number to convert specified as a string
* @return string hexadecimal representation
*/
public function dec_to_hex($number) {
@@ -1862,11 +2174,11 @@ class TCPDFBarcode {
$hex = array_reverse($hex);
return implode($hex);
}
-
+
/**
* Convert large hexadecimal number to decimal representation (string).
- * (requires PHP bcmath extension)
- * @param string $hex hexadecimal number to convert specified as a string
+ * (requires PHP bcmath extension)
+ * @param $hex (string) hexadecimal number to convert specified as a string
* @return string hexadecimal representation
*/
public function hex_to_dec($hex) {
@@ -1878,13 +2190,13 @@ class TCPDFBarcode {
$bitval = bcmul($bitval, 16);
}
return $dec;
- }
-
+ }
+
/**
* Intelligent Mail Barcode calculation of Frame Check Sequence
- * @param string $code_arr array of hexadecimal values (13 bytes holding 102 bits right justified).
+ * @param $code_arr (string) array of hexadecimal values (13 bytes holding 102 bits right justified).
* @return int 11 bit Frame Check Sequence as integer (decimal base)
- * @access protected
+ * @protected
*/
protected function imb_crc11fcs($code_arr) {
$genpoly = 0x0F35; // generator polynomial
@@ -1913,14 +2225,14 @@ class TCPDFBarcode {
$data <<= 1;
}
}
- return $fcs;
+ return $fcs;
}
-
+
/**
* Reverse unsigned short value
- * @param int $num value to reversr
+ * @param $num (int) value to reversr
* @return int reversed value
- * @access protected
+ * @protected
*/
protected function imb_reverse_us($num) {
$rev = 0;
@@ -1931,13 +2243,13 @@ class TCPDFBarcode {
}
return $rev;
}
-
+
/**
* generate Nof13 tables used for Intelligent Mail Barcode
- * @param int $n is the type of table: 2 for 2of13 table, 5 for 5of13table
- * @param int $size size of table (78 for n=2 and 1287 for n=5)
+ * @param $n (int) is the type of table: 2 for 2of13 table, 5 for 5of13table
+ * @param $size (int) size of table (78 for n=2 and 1287 for n=5)
* @return array requested table
- * @access protected
+ * @protected
*/
protected function imb_tables($n, $size) {
$table = array();
@@ -1969,10 +2281,8 @@ class TCPDFBarcode {
}
return $table;
}
-
-} // end of class
+} // end of class
//============================================================+
-// END OF FILE
+// END OF FILE
//============================================================+
-?>
diff --git a/lib/tcpdf/config/tcpdf_config.php b/lib/tcpdf/config/tcpdf_config.php
index 88c30ec46c5..811145f7671 100644
--- a/lib/tcpdf/config/tcpdf_config.php
+++ b/lib/tcpdf/config/tcpdf_config.php
@@ -2,7 +2,7 @@
//============================================================+
// File name : tcpdf_config.php
// Begin : 2004-06-11
-// Last Update : 2009-09-30
+// Last Update : 2011-04-15
//
// Description : Configuration file for TCPDF.
//
@@ -21,43 +21,41 @@
/**
* Configuration file for TCPDF.
* @author Nicola Asuni
- * @copyright 2004-2008 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com
* @package com.tecnick.tcpdf
- * @version 4.0.014
- * @link http://tcpdf.sourceforge.net
- * @license http://www.gnu.org/copyleft/lesser.html LGPL
+ * @version 4.9.005
* @since 2004-10-27
*/
// If you define the constant K_TCPDF_EXTERNAL_CONFIG, the following settings will be ignored.
if (!defined('K_TCPDF_EXTERNAL_CONFIG')) {
-
+
// DOCUMENT_ROOT fix for IIS Webserver
if ((!isset($_SERVER['DOCUMENT_ROOT'])) OR (empty($_SERVER['DOCUMENT_ROOT']))) {
if(isset($_SERVER['SCRIPT_FILENAME'])) {
$_SERVER['DOCUMENT_ROOT'] = str_replace( '\\', '/', substr($_SERVER['SCRIPT_FILENAME'], 0, 0-strlen($_SERVER['PHP_SELF'])));
} elseif(isset($_SERVER['PATH_TRANSLATED'])) {
$_SERVER['DOCUMENT_ROOT'] = str_replace( '\\', '/', substr(str_replace('\\\\', '\\', $_SERVER['PATH_TRANSLATED']), 0, 0-strlen($_SERVER['PHP_SELF'])));
- } else {
- // define here your DOCUMENT_ROOT path if the previous fails
- $_SERVER['DOCUMENT_ROOT'] = '/var/www';
+ } else {
+ // define here your DOCUMENT_ROOT path if the previous fails (e.g. '/var/www')
+ $_SERVER['DOCUMENT_ROOT'] = '/';
}
}
-
+
// Automatic calculation for the following K_PATH_MAIN constant
$k_path_main = str_replace( '\\', '/', realpath(substr(dirname(__FILE__), 0, 0-strlen('config'))));
if (substr($k_path_main, -1) != '/') {
$k_path_main .= '/';
}
-
+
/**
* Installation path (/var/www/tcpdf/).
* By default it is automatically calculated but you can also set it as a fixed string to improve performances.
*/
define ('K_PATH_MAIN', $k_path_main);
-
+
// Automatic calculation for the following K_PATH_URL constant
+ $k_path_url = $k_path_main; // default value for console mode
if (isset($_SERVER['HTTP_HOST']) AND (!empty($_SERVER['HTTP_HOST']))) {
if(isset($_SERVER['HTTPS']) AND (!empty($_SERVER['HTTPS'])) AND strtolower($_SERVER['HTTPS'])!='off') {
$k_path_url = 'https://';
@@ -65,168 +63,178 @@ if (!defined('K_TCPDF_EXTERNAL_CONFIG')) {
$k_path_url = 'http://';
}
$k_path_url .= $_SERVER['HTTP_HOST'];
- $k_path_url .= str_replace( '\\', '/', substr($_SERVER['PHP_SELF'], 0, -24));
+ $k_path_url .= str_replace( '\\', '/', substr(K_PATH_MAIN, (strlen($_SERVER['DOCUMENT_ROOT']) - 1)));
}
-
+
/**
* URL path to tcpdf installation folder (http://localhost/tcpdf/).
* By default it is automatically calculated but you can also set it as a fixed string to improve performances.
*/
define ('K_PATH_URL', $k_path_url);
-
+
/**
* path for PDF fonts
* use K_PATH_MAIN.'fonts/old/' for old non-UTF8 fonts
*/
define ('K_PATH_FONTS', K_PATH_MAIN.'fonts/');
-
+
/**
* cache directory for temporary files (full path)
*/
define ('K_PATH_CACHE', K_PATH_MAIN.'cache/');
-
+
/**
* cache directory for temporary files (url path)
*/
define ('K_PATH_URL_CACHE', K_PATH_URL.'cache/');
-
+
/**
*images directory
*/
define ('K_PATH_IMAGES', K_PATH_MAIN.'images/');
-
+
/**
* blank image
*/
define ('K_BLANK_IMAGE', K_PATH_IMAGES.'_blank.png');
-
+
/**
* page format
*/
define ('PDF_PAGE_FORMAT', 'A4');
-
+
/**
* page orientation (P=portrait, L=landscape)
*/
define ('PDF_PAGE_ORIENTATION', 'P');
-
+
/**
* document creator
*/
define ('PDF_CREATOR', 'TCPDF');
-
+
/**
* document author
*/
define ('PDF_AUTHOR', 'TCPDF');
-
+
/**
* header title
*/
define ('PDF_HEADER_TITLE', 'TCPDF Example');
-
+
/**
* header description string
*/
define ('PDF_HEADER_STRING', "by Nicola Asuni - Tecnick.com\nwww.tcpdf.org");
-
+
/**
* image logo
*/
define ('PDF_HEADER_LOGO', 'tcpdf_logo.jpg');
-
+
/**
* header logo image width [mm]
*/
define ('PDF_HEADER_LOGO_WIDTH', 30);
-
+
/**
* document unit of measure [pt=point, mm=millimeter, cm=centimeter, in=inch]
*/
define ('PDF_UNIT', 'mm');
-
+
/**
* header margin
*/
define ('PDF_MARGIN_HEADER', 5);
-
+
/**
* footer margin
*/
define ('PDF_MARGIN_FOOTER', 10);
-
+
/**
* top margin
*/
define ('PDF_MARGIN_TOP', 27);
-
+
/**
* bottom margin
*/
define ('PDF_MARGIN_BOTTOM', 25);
-
+
/**
* left margin
*/
define ('PDF_MARGIN_LEFT', 15);
-
+
/**
* right margin
*/
define ('PDF_MARGIN_RIGHT', 15);
-
+
/**
* default main font name
*/
define ('PDF_FONT_NAME_MAIN', 'helvetica');
-
+
/**
* default main font size
*/
define ('PDF_FONT_SIZE_MAIN', 10);
-
+
/**
* default data font name
*/
define ('PDF_FONT_NAME_DATA', 'helvetica');
-
+
/**
* default data font size
*/
define ('PDF_FONT_SIZE_DATA', 8);
-
+
/**
* default monospaced font name
*/
define ('PDF_FONT_MONOSPACED', 'courier');
-
+
/**
* ratio used to adjust the conversion of pixels to user units
*/
- define ('PDF_IMAGE_SCALE_RATIO', 1);
-
+ define ('PDF_IMAGE_SCALE_RATIO', 1.25);
+
/**
* magnification factor for titles
*/
define('HEAD_MAGNIFICATION', 1.1);
-
+
/**
* height of cell repect font height
*/
define('K_CELL_HEIGHT_RATIO', 1.25);
-
+
/**
* title magnification respect main font size
*/
define('K_TITLE_MAGNIFICATION', 1.3);
-
+
/**
* reduction factor for small font
*/
define('K_SMALL_RATIO', 2/3);
+
+ /**
+ * set to true to enable the special procedure used to avoid the overlappind of symbols on Thai language
+ */
+ define('K_THAI_TOPCHARS', true);
+
+ /**
+ * if true allows to call TCPDF methods using HTML syntax
+ * IMPORTANT: For security reason, disable this feature if you are printing user HTML content.
+ */
+ define('K_TCPDF_CALLS_IN_HTML', true);
}
//============================================================+
-// END OF FILE
+// END OF FILE
//============================================================+
-?>
diff --git a/lib/tcpdf/datamatrix.php b/lib/tcpdf/datamatrix.php
new file mode 100644
index 00000000000..fc78bbbee7f
--- /dev/null
+++ b/lib/tcpdf/datamatrix.php
@@ -0,0 +1,1148 @@
+.
+//
+// See LICENSE.TXT file for more information.
+// -------------------------------------------------------------------
+//
+// DESCRIPTION :
+//
+// Class to create DataMatrix ECC 200 barcode arrays for TCPDF class.
+// DataMatrix (ISO/IEC 16022:2006) is a 2-dimensional bar code.
+//============================================================+
+
+/**
+ * @file
+ * Class to create DataMatrix ECC 200 barcode arrays for TCPDF class.
+ * DataMatrix (ISO/IEC 16022:2006) is a 2-dimensional bar code.
+ *
+ * @package com.tecnick.tcpdf
+ * @author Nicola Asuni
+ * @version 1.0.001
+ */
+
+// custom definitions
+if (!defined('DATAMATRIXDEFS')) {
+
+ /**
+ * Indicate that definitions for this class are set
+ */
+ define('DATAMATRIXDEFS', true);
+
+ // -----------------------------------------------------
+
+} // end of custom definitions
+
+// #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+
+
+/**
+ * ASCII encoding: ASCII character 0 to 127 (1 byte per CW)
+ */
+define('ENC_ASCII', 0);
+
+/**
+ * C40 encoding: Upper-case alphanumeric (3/2 bytes per CW)
+ */
+define('ENC_C40', 1);
+
+/**
+ * TEXT encoding: Lower-case alphanumeric (3/2 bytes per CW)
+ */
+define('ENC_TXT', 2);
+
+/**
+ * X12 encoding: ANSI X12 (3/2 byte per CW)
+ */
+define('ENC_X12', 3);
+
+/**
+ * EDIFACT encoding: ASCII character 32 to 94 (4/3 bytes per CW)
+ */
+define('ENC_EDF', 4);
+
+/**
+ * BASE 256 encoding: ASCII character 0 to 255 (1 byte per CW)
+ */
+define('ENC_BASE256', 5);
+
+/**
+ * ASCII extended encoding: ASCII character 128 to 255 (1/2 byte per CW)
+ */
+define('ENC_ASCII_EXT', 6);
+
+/**
+ * ASCII number encoding: ASCII digits (2 bytes per CW)
+ */
+define('ENC_ASCII_NUM', 7);
+
+/**
+ * @class Datamatrix
+ * Class to create DataMatrix ECC 200 barcode arrays for TCPDF class.
+ * DataMatrix (ISO/IEC 16022:2006) is a 2-dimensional bar code.
+ *
+ * @package com.tecnick.tcpdf
+ * @author Nicola Asuni
+ * @version 1.0.001
+ */
+class Datamatrix {
+
+ /**
+ * Barcode array to be returned which is readable by TCPDF.
+ * @protected
+ */
+ protected $barcode_array = array();
+
+ /**
+ * Store last used encoding for data codewords.
+ * @protected
+ */
+ protected $last_enc = ENC_ASCII;
+
+ /**
+ * Table of Data Matrix ECC 200 Symbol Attributes:
+ * total matrix rows (including finder pattern)
+ * total matrix cols (including finder pattern)
+ * total matrix rows (without finder pattern)
+ * total matrix cols (without finder pattern)
+ * region data rows (with finder pattern)
+ * region data col (with finder pattern)
+ * region data rows (without finder pattern)
+ * region data col (without finder pattern)
+ * horizontal regions
+ * vertical regions
+ * regions
+ * data codewords
+ * error codewords
+ * blocks
+ * data codewords per block
+ * error codewords per block
+ *
+ * @protected
+ */
+ protected $symbattr = array(
+ // square form ---------------------------------------------------------------------------------------
+ array(0x00a,0x00a,0x008,0x008,0x00a,0x00a,0x008,0x008,0x001,0x001,0x001,0x003,0x005,0x001,0x003,0x005), // 10x10
+ array(0x00c,0x00c,0x00a,0x00a,0x00c,0x00c,0x00a,0x00a,0x001,0x001,0x001,0x005,0x007,0x001,0x005,0x007), // 12x12
+ array(0x00e,0x00e,0x00c,0x00c,0x00e,0x00e,0x00c,0x00c,0x001,0x001,0x001,0x008,0x00a,0x001,0x008,0x00a), // 14x14
+ array(0x010,0x010,0x00e,0x00e,0x010,0x010,0x00e,0x00e,0x001,0x001,0x001,0x00c,0x00c,0x001,0x00c,0x00c), // 16x16
+ array(0x012,0x012,0x010,0x010,0x012,0x012,0x010,0x010,0x001,0x001,0x001,0x012,0x00e,0x001,0x012,0x00e), // 18x18
+ array(0x014,0x014,0x012,0x012,0x014,0x014,0x012,0x012,0x001,0x001,0x001,0x016,0x012,0x001,0x016,0x012), // 20x20
+ array(0x016,0x016,0x014,0x014,0x016,0x016,0x014,0x014,0x001,0x001,0x001,0x01e,0x014,0x001,0x01e,0x014), // 22x22
+ array(0x018,0x018,0x016,0x016,0x018,0x018,0x016,0x016,0x001,0x001,0x001,0x024,0x018,0x001,0x024,0x018), // 24x24
+ array(0x01a,0x01a,0x018,0x018,0x01a,0x01a,0x018,0x018,0x001,0x001,0x001,0x02c,0x01c,0x001,0x02c,0x01c), // 26x26
+ array(0x020,0x020,0x01c,0x01c,0x010,0x010,0x00e,0x00e,0x002,0x002,0x004,0x03e,0x024,0x001,0x03e,0x024), // 32x32
+ array(0x024,0x024,0x020,0x020,0x012,0x012,0x010,0x010,0x002,0x002,0x004,0x056,0x02a,0x001,0x056,0x02a), // 36x36
+ array(0x028,0x028,0x024,0x024,0x014,0x014,0x012,0x012,0x002,0x002,0x004,0x072,0x030,0x001,0x072,0x030), // 40x40
+ array(0x02c,0x02c,0x028,0x028,0x016,0x016,0x014,0x014,0x002,0x002,0x004,0x090,0x038,0x001,0x090,0x038), // 44x44
+ array(0x030,0x030,0x02c,0x02c,0x018,0x018,0x016,0x016,0x002,0x002,0x004,0x0ae,0x044,0x001,0x0ae,0x044), // 48x48
+ array(0x034,0x034,0x030,0x030,0x01a,0x01a,0x018,0x018,0x002,0x002,0x004,0x0cc,0x054,0x002,0x066,0x02a), // 52x52
+ array(0x040,0x040,0x038,0x038,0x010,0x010,0x00e,0x00e,0x004,0x004,0x010,0x118,0x070,0x002,0x08c,0x038), // 64x64
+ array(0x048,0x048,0x040,0x040,0x012,0x012,0x010,0x010,0x004,0x004,0x010,0x170,0x090,0x004,0x05c,0x024), // 72x72
+ array(0x050,0x050,0x048,0x048,0x014,0x014,0x012,0x012,0x004,0x004,0x010,0x1c8,0x0c0,0x004,0x072,0x030), // 80x80
+ array(0x058,0x058,0x050,0x050,0x016,0x016,0x014,0x014,0x004,0x004,0x010,0x240,0x0e0,0x004,0x090,0x038), // 88x88
+ array(0x060,0x060,0x058,0x058,0x018,0x018,0x016,0x016,0x004,0x004,0x010,0x2b8,0x110,0x004,0x0ae,0x044), // 96x96
+ array(0x068,0x068,0x060,0x060,0x01a,0x01a,0x018,0x018,0x004,0x004,0x010,0x330,0x150,0x006,0x088,0x038), // 104x104
+ array(0x078,0x078,0x06c,0x06c,0x014,0x014,0x012,0x012,0x006,0x006,0x024,0x41a,0x198,0x006,0x0af,0x044), // 120x120
+ array(0x084,0x084,0x078,0x078,0x016,0x016,0x014,0x014,0x006,0x006,0x024,0x518,0x1f0,0x008,0x0a3,0x03e), // 132x132
+ array(0x090,0x090,0x084,0x084,0x018,0x018,0x016,0x016,0x006,0x006,0x024,0x616,0x26c,0x00a,0x09c,0x03e), // 144x144
+ // rectangular form (currently unused) ---------------------------------------------------------------------------
+ array(0x008,0x012,0x006,0x010,0x008,0x012,0x006,0x010,0x001,0x001,0x001,0x005,0x007,0x001,0x005,0x007), // 8x18
+ array(0x008,0x020,0x006,0x01c,0x008,0x010,0x006,0x00e,0x001,0x002,0x002,0x00a,0x00b,0x001,0x00a,0x00b), // 8x32
+ array(0x00c,0x01a,0x00a,0x018,0x00c,0x01a,0x00a,0x018,0x001,0x001,0x001,0x010,0x00e,0x001,0x010,0x00e), // 12x26
+ array(0x00c,0x024,0x00a,0x020,0x00c,0x012,0x00a,0x010,0x001,0x002,0x002,0x00c,0x012,0x001,0x00c,0x012), // 12x36
+ array(0x010,0x024,0x00e,0x020,0x010,0x012,0x00e,0x010,0x001,0x002,0x002,0x020,0x018,0x001,0x020,0x018), // 16x36
+ array(0x010,0x030,0x00e,0x02c,0x010,0x018,0x00e,0x016,0x001,0x002,0x002,0x031,0x01c,0x001,0x031,0x01c) // 16x48
+ );
+
+ /**
+ * Map encodation modes whit character sets.
+ * @protected
+ */
+ protected $chset_id = array(ENC_C40 => 'C40', ENC_TXT => 'TXT', ENC_X12 =>'X12');
+
+ /**
+ * Basic set of charactes for each encodation mode.
+ * @protected
+ */
+ protected $chset = array(
+ 'C40' => array( // Basic set for C40 ----------------------------------------------------------------------------
+ 'S1'=>0x00,'S2'=>0x01,'S3'=>0x02,0x20=>0x03,0x30=>0x04,0x31=>0x05,0x32=>0x06,0x33=>0x07,0x34=>0x08,0x35=>0x09, //
+ 0x36=>0x0a,0x37=>0x0b,0x38=>0x0c,0x39=>0x0d,0x41=>0x0e,0x42=>0x0f,0x43=>0x10,0x44=>0x11,0x45=>0x12,0x46=>0x13, //
+ 0x47=>0x14,0x48=>0x15,0x49=>0x16,0x4a=>0x17,0x4b=>0x18,0x4c=>0x19,0x4d=>0x1a,0x4e=>0x1b,0x4f=>0x1c,0x50=>0x1d, //
+ 0x51=>0x1e,0x52=>0x1f,0x53=>0x20,0x54=>0x21,0x55=>0x22,0x56=>0x23,0x57=>0x24,0x58=>0x25,0x59=>0x26,0x5a=>0x27),//
+ 'TXT' => array( // Basic set for TEXT ---------------------------------------------------------------------------
+ 'S1'=>0x00,'S2'=>0x01,'S3'=>0x02,0x20=>0x03,0x30=>0x04,0x31=>0x05,0x32=>0x06,0x33=>0x07,0x34=>0x08,0x35=>0x09, //
+ 0x36=>0x0a,0x37=>0x0b,0x38=>0x0c,0x39=>0x0d,0x61=>0x0e,0x62=>0x0f,0x63=>0x10,0x64=>0x11,0x65=>0x12,0x66=>0x13, //
+ 0x67=>0x14,0x68=>0x15,0x69=>0x16,0x6a=>0x17,0x6b=>0x18,0x6c=>0x19,0x6d=>0x1a,0x6e=>0x1b,0x6f=>0x1c,0x70=>0x1d, //
+ 0x71=>0x1e,0x72=>0x1f,0x73=>0x20,0x74=>0x21,0x75=>0x22,0x76=>0x23,0x77=>0x24,0x78=>0x25,0x79=>0x26,0x7a=>0x27),//
+ 'SH1' => array( // Shift 1 set ----------------------------------------------------------------------------------
+ 0x00=>0x00,0x01=>0x01,0x02=>0x02,0x03=>0x03,0x04=>0x04,0x05=>0x05,0x06=>0x06,0x07=>0x07,0x08=>0x08,0x09=>0x09, //
+ 0x0a=>0x0a,0x0b=>0x0b,0x0c=>0x0c,0x0d=>0x0d,0x0e=>0x0e,0x0f=>0x0f,0x10=>0x10,0x11=>0x11,0x12=>0x12,0x13=>0x13, //
+ 0x14=>0x14,0x15=>0x15,0x16=>0x16,0x17=>0x17,0x18=>0x18,0x19=>0x19,0x1a=>0x1a,0x1b=>0x1b,0x1c=>0x1c,0x1d=>0x1d, //
+ 0x1e=>0x1e,0x1f=>0x1f), //
+ 'SH2' => array( // Shift 2 set ----------------------------------------------------------------------------------
+ 0x21=>0x00,0x22=>0x01,0x23=>0x02,0x24=>0x03,0x25=>0x04,0x26=>0x05,0x27=>0x06,0x28=>0x07,0x29=>0x08,0x2a=>0x09, //
+ 0x2b=>0x0a,0x2c=>0x0b,0x2d=>0x0c,0x2e=>0x0d,0x2f=>0x0e,0x3a=>0x0f,0x3b=>0x10,0x3c=>0x11,0x3d=>0x12,0x3e=>0x13, //
+ 0x3f=>0x14,0x40=>0x15,0x5b=>0x16,0x5c=>0x17,0x5d=>0x18,0x5e=>0x19,0x5f=>0x1a,'F1'=>0x1b,'US'=>0x1e), //
+ 'S3C' => array( // Shift 3 set for C40 --------------------------------------------------------------------------
+ 0x60=>0x00,0x61=>0x01,0x62=>0x02,0x63=>0x03,0x64=>0x04,0x65=>0x05,0x66=>0x06,0x67=>0x07,0x68=>0x08,0x69=>0x09, //
+ 0x6a=>0x0a,0x6b=>0x0b,0x6c=>0x0c,0x6d=>0x0d,0x6e=>0x0e,0x6f=>0x0f,0x70=>0x10,0x71=>0x11,0x72=>0x12,0x73=>0x13, //
+ 0x74=>0x14,0x75=>0x15,0x76=>0x16,0x77=>0x17,0x78=>0x18,0x79=>0x19,0x7a=>0x1a,0x7b=>0x1b,0x7c=>0x1c,0x7d=>0x1d, //
+ 0x7e=>0x1e,0x7f=>0x1f),
+ 'S3T' => array( // Shift 3 set for TEXT -------------------------------------------------------------------------
+ 0x60=>0x00,0x41=>0x01,0x42=>0x02,0x43=>0x03,0x44=>0x04,0x45=>0x05,0x46=>0x06,0x47=>0x07,0x48=>0x08,0x49=>0x09, //
+ 0x4a=>0x0a,0x4b=>0x0b,0x4c=>0x0c,0x4d=>0x0d,0x4e=>0x0e,0x4f=>0x0f,0x50=>0x10,0x51=>0x11,0x52=>0x12,0x53=>0x13, //
+ 0x54=>0x14,0x55=>0x15,0x56=>0x16,0x57=>0x17,0x58=>0x18,0x59=>0x19,0x5a=>0x1a,0x7b=>0x1b,0x7c=>0x1c,0x7d=>0x1d, //
+ 0x7e=>0x1e,0x7f=>0x1f), //
+ 'X12' => array( // Set for X12 ----------------------------------------------------------------------------------
+ 0x0d=>0x00,0x2a=>0x01,0x3e=>0x02,0x20=>0x03,0x30=>0x04,0x31=>0x05,0x32=>0x06,0x33=>0x07,0x34=>0x08,0x35=>0x09, //
+ 0x36=>0x0a,0x37=>0x0b,0x38=>0x0c,0x39=>0x0d,0x41=>0x0e,0x42=>0x0f,0x43=>0x10,0x44=>0x11,0x45=>0x12,0x46=>0x13, //
+ 0x47=>0x14,0x48=>0x15,0x49=>0x16,0x4a=>0x17,0x4b=>0x18,0x4c=>0x19,0x4d=>0x1a,0x4e=>0x1b,0x4f=>0x1c,0x50=>0x1d, //
+ 0x51=>0x1e,0x52=>0x1f,0x53=>0x20,0x54=>0x21,0x55=>0x22,0x56=>0x23,0x57=>0x24,0x58=>0x25,0x59=>0x26,0x5a=>0x27) //
+ );
+
+// -----------------------------------------------------------------------------
+
+ /**
+ * This is the class constructor.
+ * Creates a datamatrix object
+ * @param $code (string) Code to represent using Datamatrix.
+ * @public
+ */
+ public function __construct($code) {
+ $barcode_array = array();
+ if ((is_null($code)) OR ($code == '\0') OR ($code == '')) {
+ return false;
+ }
+ // get data codewords
+ $cw = $this->getHighLevelEncoding($code);
+ // number of data codewords
+ $nd = count($cw);
+ // check size
+ if ($nd > 1558) {
+ return false;
+ }
+ // get minimum required matrix size.
+ foreach ($this->symbattr as $params) {
+ if ($params[11] >= $nd) {
+ break;
+ }
+ }
+ if ($params[11] < $nd) {
+ // too much data
+ return false;
+ } elseif ($params[11] > $nd) {
+ // add padding
+ if ($this->last_enc == ENC_EDF) {
+ // switch to ASCII encoding
+ $cw[] = 124;
+ ++$nd;
+ } elseif (($this->last_enc != ENC_ASCII) AND ($this->last_enc != ENC_BASE256)) {
+ // switch to ASCII encoding
+ $cw[] = 254;
+ ++$nd;
+ }
+ if ($params[11] > $nd) {
+ // add first pad
+ $cw[] = 129;
+ ++$nd;
+ // add remaining pads
+ for ($i = $nd; $i <= $params[11]; ++$i) {
+ $cw[] = $this->get253StateCodeword(129, $i);
+ }
+ }
+ }
+ // add error correction codewords
+ $cw = $this->getErrorCorrection($cw, $params[13], $params[14], $params[15]);
+ // initialize empty arrays
+ $grid = array_fill(0, ($params[2] * $params[3]), 0);
+ // get placement map
+ $places = $this->getPlacemetMap($params[2], $params[3]);
+ // fill the grid with data
+ $grid = array();
+ $i = 0;
+ // region data row max index
+ $rdri = ($params[4] - 1);
+ // region data column max index
+ $rdci = ($params[5] - 1);
+ // for each vertical region
+ for ($vr = 0; $vr < $params[9]; ++$vr) {
+ // for each row on region
+ for ($r = 0; $r < $params[4]; ++$r) {
+ // get row
+ $row = (($vr * $params[4]) + $r);
+ // for each horizontal region
+ for ($hr = 0; $hr < $params[8]; ++$hr) {
+ // for each column on region
+ for ($c = 0; $c < $params[5]; ++$c) {
+ // get column
+ $col = (($hr * $params[5]) + $c);
+ // braw bits by case
+ if ($r == 0) {
+ // top finder pattern
+ if ($c % 2) {
+ $grid[$row][$col] = 0;
+ } else {
+ $grid[$row][$col] = 1;
+ }
+ } elseif ($r == $rdri) {
+ // bottom finder pattern
+ $grid[$row][$col] = 1;
+ } elseif ($c == 0) {
+ // left finder pattern
+ $grid[$row][$col] = 1;
+ } elseif ($c == $rdci) {
+ // right finder pattern
+ if ($r % 2) {
+ $grid[$row][$col] = 1;
+ } else {
+ $grid[$row][$col] = 0;
+ }
+ } else { // data bit
+ if ($places[$i] < 2) {
+ $grid[$row][$col] = $places[$i];
+ } else {
+ // codeword ID
+ $cw_id = (floor($places[$i] / 10) - 1);
+ // codeword BIT mask
+ $cw_bit = pow(2, (8 - ($places[$i] % 10)));
+ $grid[$row][$col] = (($cw[$cw_id] & $cw_bit) == 0) ? 0 : 1;
+ }
+ ++$i;
+ }
+ }
+ }
+ }
+ }
+ $this->barcode_array['num_rows'] = $params[0];
+ $this->barcode_array['num_cols'] = $params[1];
+ $this->barcode_array['bcode'] = $grid;
+ }
+
+ /**
+ * Returns a barcode array which is readable by TCPDF
+ * @return array barcode array readable by TCPDF;
+ * @public
+ */
+ public function getBarcodeArray() {
+ return $this->barcode_array;
+ }
+
+ /**
+ * Product of two numbers in a Power-of-Two Galois Field
+ * @param $a (int) first number to multiply.
+ * @param $b (int) second number to multiply.
+ * @param $log (array) Log table.
+ * @param $alog (array) Anti-Log table.
+ * @param $gf (array) Number of Factors of the Reed-Solomon polynomial.
+ * @return int product
+ * @protected
+ */
+ protected function getGFProduct($a, $b, $log, $alog, $gf) {
+ if (($a == 0) OR ($b == 0)) {
+ return 0;
+ }
+ return $alog[($log[$a] + $log[$b]) % ($gf - 1)];
+ }
+
+ /**
+ * Add error correction codewords to data codewords array (ANNEX E).
+ * @param $wd (array) Array of datacodewords.
+ * @param $nb (int) Number of blocks.
+ * @param $nd (int) Number of data codewords per block.
+ * @param $nc (int) Number of correction codewords per block.
+ * @param $gf (int) numner of fields on log/antilog table (power of 2).
+ * @param $pp (int) The value of its prime modulus polynomial (301 for ECC200).
+ * @return array data codewords + error codewords
+ * @protected
+ */
+ protected function getErrorCorrection($wd, $nb, $nd, $nc, $gf=256, $pp=301) {
+ // generate the log ($log) and antilog ($alog) tables
+ $log[0] = 0;
+ $alog[0] = 1;
+ for ($i = 1; $i < $gf; ++$i) {
+ $alog[$i] = ($alog[($i - 1)] * 2);
+ if ($alog[$i] >= $gf) {
+ $alog[$i] ^= $pp;
+ }
+ $log[$alog[$i]] = $i;
+ }
+ ksort($log);
+ // generate the polynomial coefficients (c)
+ $c = array_fill(0, ($nc + 1), 0);
+ $c[0] = 1;
+ for ($i = 1; $i <= $nc; ++$i) {
+ $c[$i] = $c[($i-1)];
+ for ($j = ($i - 1); $j >= 1; --$j) {
+ $c[$j] = $c[($j - 1)] ^ $this->getGFProduct($c[$j], $alog[$i], $log, $alog, $gf);
+ }
+ $c[0] = $this->getGFProduct($c[0], $alog[$i], $log, $alog, $gf);
+ }
+ ksort($c);
+ // total number of data codewords
+ $num_wd = ($nb * $nd);
+ // total number of error codewords
+ $num_we = ($nb * $nc);
+ // for each block
+ for ($b = 0; $b < $nb; ++$b) {
+ // create interleaved data block
+ $block = array();
+ for ($n = $b; $n < $num_wd; $n += $nb) {
+ $block[] = $wd[$n];
+ }
+ // initialize error codewords
+ $we = array_fill(0, ($nc + 1), 0);
+ // calculate error correction codewords for this block
+ for ($i = 0; $i < $nd; ++$i) {
+ $k = ($we[0] ^ $block[$i]);
+ for ($j = 0; $j < $nc; ++$j) {
+ $we[$j] = ($we[($j + 1)] ^ $this->getGFProduct($k, $c[($nc - $j - 1)], $log, $alog, $gf));
+ }
+ }
+ // add error codewords at the end of data codewords
+ $j = 0;
+ for ($i = $b; $i < $num_we; $i += $nb) {
+ $wd[($num_wd + $i)] = $we[$j];
+ ++$j;
+ }
+ }
+ // reorder codewords
+ ksort($wd);
+ return $wd;
+ }
+
+ /**
+ * Return the 253-state codeword
+ * @param $cwpad (int) Pad codeword.
+ * @param $cwpos (int) Number of data codewords from the beginning of encoded data.
+ * @return pad codeword
+ * @protected
+ */
+ protected function get253StateCodeword($cwpad, $cwpos) {
+ $pad = ($cwpad + (((149 * $cwpos) % 253) + 1));
+ if ($pad > 254) {
+ $pad -= 254;
+ }
+ return $pad;
+ }
+
+ /**
+ * Return the 255-state codeword
+ * @param $cwpad (int) Pad codeword.
+ * @param $cwpos (int) Number of data codewords from the beginning of encoded data.
+ * @return pad codeword
+ * @protected
+ */
+ protected function get255StateCodeword($cwpad, $cwpos) {
+ $pad = ($cwpad + (((149 * $cwpos) % 255) + 1));
+ if ($pad > 255) {
+ $pad -= 256;
+ }
+ return $pad;
+ }
+
+ /**
+ * Returns true if the char belongs to the selected mode
+ * @param $chr (int) Character (byte) to check.
+ * @param $mode (int) Current encoding mode.
+ * @return boolean true if the char is of the selected mode.
+ * @protected
+ */
+ protected function isCharMode($chr, $mode) {
+ $status = false;
+ switch ($mode) {
+ case ENC_ASCII: { // ASCII character 0 to 127
+ $status = (($chr >= 0) AND ($chr <= 127));
+ break;
+ }
+ case ENC_C40: { // Upper-case alphanumeric
+ $status = (($chr == 32) OR (($chr >= 48) AND ($chr <= 57)) OR (($chr >= 65) AND ($chr <= 90)));
+ break;
+ }
+ case ENC_TXT: { // Lower-case alphanumeric
+ $status = (($chr == 32) OR (($chr >= 48) AND ($chr <= 57)) OR (($chr >= 97) AND ($chr <= 122)));
+ break;
+ }
+ case ENC_X12: { // ANSI X12
+ $status = (($chr == 13) OR ($chr == 42) OR ($chr == 62));
+ break;
+ }
+ case ENC_EDF: { // ASCII character 32 to 94
+ $status = (($chr >= 32) AND ($chr <= 94));
+ break;
+ }
+ case ENC_BASE256: { // Function character (FNC1, Structured Append, Reader Program, or Code Page)
+ $status = (($chr == 232) OR ($chr == 233) OR ($chr == 234) OR ($chr == 241));
+ break;
+ }
+ case ENC_ASCII_EXT: { // ASCII character 128 to 255
+ $status = (($chr >= 128) AND ($chr <= 255));
+ break;
+ }
+ case ENC_ASCII_NUM: { // ASCII digits
+ $status = (($chr >= 48) AND ($chr <= 57));
+ break;
+ }
+ }
+ return $status;
+ }
+
+ /**
+ * The look-ahead test scans the data to be encoded to find the best mode (Annex P - steps from J to S).
+ * @param $data (string) data to encode
+ * @param $pos (int) current position
+ * @param $mode (int) current encoding mode
+ * @return int encoding mode
+ * @protected
+ */
+ protected function lookAheadTest($data, $pos, $mode) {
+ $data_length = strlen($data);
+ if ($pos >= $data_length) {
+ return $mode;
+ }
+ $charscount = 0; // count processed chars
+ // STEP J
+ if ($mode == ENC_ASCII) {
+ $numch = array(0, 1, 1, 1, 1, 1.25);
+ } else {
+ $numch = array(1, 2, 2, 2, 2, 2.25);
+ $numch[$mode] = 0;
+ }
+ while (true) {
+ // STEP K
+ if (($pos + $charscount) == $data_length) {
+ if ($numch[ENC_ASCII] <= ceil(min($numch[ENC_C40], $numch[ENC_TXT], $numch[ENC_X12], $numch[ENC_EDF], $numch[ENC_BASE256]))) {
+ return ENC_ASCII;
+ }
+ if ($numch[ENC_BASE256] < ceil(min($numch[ENC_ASCII], $numch[ENC_C40], $numch[ENC_TXT], $numch[ENC_X12], $numch[ENC_EDF]))) {
+ return ENC_BASE256;
+ }
+ if ($numch[ENC_EDF] < ceil(min($numch[ENC_ASCII], $numch[ENC_C40], $numch[ENC_TXT], $numch[ENC_X12], $numch[ENC_BASE256]))) {
+ return ENC_EDF;
+ }
+ if ($numch[ENC_TXT] < ceil(min($numch[ENC_ASCII], $numch[ENC_C40], $numch[ENC_X12], $numch[ENC_EDF], $numch[ENC_BASE256]))) {
+ return ENC_TXT;
+ }
+ if ($numch[ENC_X12] < ceil(min($numch[ENC_ASCII], $numch[ENC_C40], $numch[ENC_TXT], $numch[ENC_EDF], $numch[ENC_BASE256]))) {
+ return ENC_X12;
+ }
+ return ENC_C40;
+ }
+ // get char
+ $chr = ord($data{($pos + $charscount)});
+ $charscount++;
+ // STEP L
+ if ($this->isCharMode($chr, ENC_ASCII_NUM)) {
+ $numch[ENC_ASCII] += (1 / 2);
+ } elseif ($this->isCharMode($chr, ENC_ASCII_EXT)) {
+ $numch[ENC_ASCII] = ceil($numch[ENC_ASCII]);
+ $numch[ENC_ASCII] += 2;
+ } else {
+ $numch[ENC_ASCII] = ceil($numch[ENC_ASCII]);
+ $numch[ENC_ASCII] += 1;
+ }
+ // STEP M
+ if ($this->isCharMode($chr, ENC_C40)) {
+ $numch[ENC_C40] += (2 / 3);
+ } elseif ($this->isCharMode($chr, ENC_ASCII_EXT)) {
+ $numch[ENC_C40] += (8 / 3);
+ } else {
+ $numch[ENC_C40] += (4 / 3);
+ }
+ // STEP N
+ if ($this->isCharMode($chr, ENC_TXT)) {
+ $numch[ENC_TXT] += (2 / 3);
+ } elseif ($this->isCharMode($chr, ENC_ASCII_EXT)) {
+ $numch[ENC_TXT] += (8 / 3);
+ } else {
+ $numch[ENC_TXT] += (4 / 3);
+ }
+ // STEP O
+ if ($this->isCharMode($chr, ENC_X12) OR $this->isCharMode($chr, ENC_C40)) {
+ $numch[ENC_X12] += (2 / 3);
+ } elseif ($this->isCharMode($chr, ENC_ASCII_EXT)) {
+ $numch[ENC_X12] += (13 / 3);
+ } else {
+ $numch[ENC_X12] += (10 / 3);
+ }
+ // STEP P
+ if ($this->isCharMode($chr, ENC_EDF)) {
+ $numch[ENC_EDF] += (3 / 4);
+ } elseif ($this->isCharMode($chr, ENC_ASCII_EXT)) {
+ $numch[ENC_EDF] += (17 / 4);
+ } else {
+ $numch[ENC_EDF] += (13 / 4);
+ }
+ // STEP Q
+ if ($this->isCharMode($chr, ENC_BASE256)) {
+ $numch[ENC_BASE256] += 4;
+ } else {
+ $numch[ENC_BASE256] += 1;
+ }
+ // STEP R
+ if ($charscount >= 4) {
+ if (($numch[ENC_ASCII] + 1) <= min($numch[ENC_C40], $numch[ENC_TXT], $numch[ENC_X12], $numch[ENC_EDF], $numch[ENC_BASE256])) {
+ return ENC_ASCII;
+ }
+ if ((($numch[ENC_BASE256] + 1) <= $numch[ENC_ASCII])
+ OR (($numch[ENC_BASE256] + 1) < min($numch[ENC_C40], $numch[ENC_TXT], $numch[ENC_X12], $numch[ENC_EDF]))) {
+ return ENC_BASE256;
+ }
+ if (($numch[ENC_EDF] + 1) < min($numch[ENC_ASCII], $numch[ENC_C40], $numch[ENC_TXT], $numch[ENC_X12], $numch[ENC_BASE256])) {
+ return ENC_EDF;
+ }
+ if (($numch[ENC_TXT] + 1) < min($numch[ENC_ASCII], $numch[ENC_C40], $numch[ENC_X12], $numch[ENC_EDF], $numch[ENC_BASE256])) {
+ return ENC_TXT;
+ }
+ if (($numch[ENC_X12] + 1) < min($numch[ENC_ASCII], $numch[ENC_C40], $numch[ENC_TXT], $numch[ENC_EDF], $numch[ENC_BASE256])) {
+ return ENC_X12;
+ }
+ if (($numch[ENC_C40] + 1) < min($numch[ENC_ASCII], $numch[ENC_TXT], $numch[ENC_EDF], $numch[ENC_BASE256])) {
+ if ($numch[ENC_C40] < $numch[ENC_X12]) {
+ return ENC_C40;
+ }
+ if ($numch[ENC_C40] == $numch[ENC_X12]) {
+ $k = ($pos + $charscount + 1);
+ while ($k < $data_length) {
+ $tmpchr = ord($data{$k});
+ if ($this->isCharMode($tmpchr, ENC_X12)) {
+ return ENC_X12;
+ } elseif (!($this->isCharMode($tmpchr, ENC_X12) OR $this->isCharMode($tmpchr, ENC_C40))) {
+ break;
+ }
+ ++$k;
+ }
+ return ENC_C40;
+ }
+ }
+ }
+ } // end of while
+ }
+
+ /**
+ * Get the switching codeword to a new encoding mode (latch codeword)
+ * @param $mode (int) New encoding mode.
+ * @return (int) Switch codeword.
+ * @protected
+ */
+ protected function getSwitchEncodingCodeword($mode) {
+ switch ($mode) {
+ case ENC_ASCII: { // ASCII character 0 to 127
+ $cw = 254;
+ break;
+ }
+ case ENC_C40: { // Upper-case alphanumeric
+ $cw = 230;
+ break;
+ }
+ case ENC_TXT: { // Lower-case alphanumeric
+ $cw = 239;
+ break;
+ }
+ case ENC_X12: { // ANSI X12
+ $cw = 238;
+ break;
+ }
+ case ENC_EDF: { // ASCII character 32 to 94
+ $cw = 240;
+ break;
+ }
+ case ENC_BASE256: { // Function character (FNC1, Structured Append, Reader Program, or Code Page)
+ $cw = 231;
+ break;
+ }
+ }
+ return $cw;
+ }
+
+ /**
+ * Choose the minimum matrix size and return the max number of data codewords.
+ * @param $numcw (int) Number of current codewords.
+ * @return number of data codewords in matrix
+ * @protected
+ */
+ protected function getMaxDataCodewords($numcw) {
+ foreach ($this->symbattr as $key => $matrix) {
+ if ($matrix[11] >= $numcw) {
+ return $matrix[11];
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * Get high level encoding using the minimum symbol data characters for ECC 200
+ * @param $data (string) data to encode
+ * @return array of codewords
+ * @protected
+ */
+ protected function getHighLevelEncoding($data) {
+ // STEP A. Start in ASCII encodation.
+ $enc = ENC_ASCII; // current encoding mode
+ $pos = 0; // current position
+ $cw = array(); // array of codewords to be returned
+ $cw_num = 0; // number of data codewords
+ $data_lenght = strlen($data); // number of chars
+ while ($pos < $data_lenght) {
+ switch ($enc) {
+ case ENC_ASCII: { // STEP B. While in ASCII encodation
+ if (($data_lenght > 1) AND ($pos < ($data_lenght - 1)) AND ($this->isCharMode(ord($data{($pos)}), ENC_ASCII_NUM) AND $this->isCharMode(ord($data{($pos + 1)}), ENC_ASCII_NUM))) {
+ // 1. If the next data sequence is at least 2 consecutive digits, encode the next two digits as a double digit in ASCII mode.
+ $cw[] = (intval(substr($data, $pos, 2)) + 130);
+ ++$cw_num;
+ $pos += 2;
+ } else {
+ // 2. If the look-ahead test (starting at step J) indicates another mode, switch to that mode.
+ $newenc = $this->lookAheadTest($data, $pos, $enc);
+ if ($newenc != $enc) {
+ // switch to new encoding
+ $enc = $newenc;
+ $cw[] = $this->getSwitchEncodingCodeword($enc);
+ ++$cw_num;
+ } else {
+ // get new byte
+ $chr = ord($data{($pos)});
+ ++$pos;
+ if ($this->isCharMode($chr, ENC_ASCII_EXT)) {
+ // 3. If the next data character is extended ASCII (greater than 127) encode it in ASCII mode first using the Upper Shift (value 235) character.
+ $cw[] = 235;
+ $cw[] = ($chr - 127);
+ $cw_num += 2;
+ } else {
+ // 4. Otherwise process the next data character in ASCII encodation.
+ $cw[] = ($chr + 1);
+ ++$cw_num;
+ }
+ }
+ }
+ break;
+ }
+ case ENC_C40 : // Upper-case alphanumeric
+ case ENC_TXT : // Lower-case alphanumeric
+ case ENC_X12 : { // ANSI X12
+ $temp_cw = array();
+ $p = 0;
+ $epos = $pos;
+ // get charset ID
+ $set_id = $this->chset_id[$enc];
+ // get basic charset for current encoding
+ $charset = $this->chset[$set_id];
+ do {
+ // 2. process the next character in C40 encodation.
+ $chr = ord($data{($epos)});
+ ++$epos;
+ // check for extended character
+ if ($chr & 0x80) {
+ if ($enc == ENC_X12) {
+ return false;
+ }
+ $chr = ($chr & 0x7f);
+ $temp_cw[] = 1; // shift 2
+ $temp_cw[] = 30; // upper shift
+ $p += 2;
+ }
+ if (isset($charset[$chr])) {
+ $temp_cw[] = $charset[$chr];
+ ++$p;
+ } else {
+ if (isset($this->chset['SH1'][$chr])) {
+ $temp_cw[] = 0; // shift 1
+ $shiftset = $this->chset['SH1'];
+ } elseif (isset($chr, $this->chset['SH2'][$chr])) {
+ $temp_cw[] = 1; // shift 2
+ $shiftset = $this->chset['SH2'];
+ } elseif (($enc == ENC_C40) AND isset($this->chset['S3C'][$chr])) {
+ $temp_cw[] = 2; // shift 3
+ $shiftset = $this->chset['S3C'];
+ } elseif (($enc == ENC_TXT) AND isset($this->chset['S3T'][$chr])) {
+ $temp_cw[] = 2; // shift 3
+ $shiftset = $this->chset['S3T'];
+ } else {
+ return false;
+ }
+ $temp_cw[] = $shiftset[$chr];
+ $p += 2;
+ }
+ if ($p >= 3) {
+ $c1 = array_shift($temp_cw);
+ $c2 = array_shift($temp_cw);
+ $c3 = array_shift($temp_cw);
+ $p -= 3;
+ $tmp = ((1600 * $c1) + (40 * $c2) + $c3 + 1);
+ $cw[] = ($tmp >> 8);
+ $cw[] = ($tmp % 256);
+ $cw_num += 2;
+ $pos = $epos;
+ // 1. If the C40 encoding is at the point of starting a new double symbol character and if the look-ahead test (starting at step J) indicates another mode, switch to that mode.
+ $newenc = $this->lookAheadTest($data, $pos, $enc);
+ if ($newenc != $enc) {
+ $enc = $newenc;
+ $cw[] = $this->getSwitchEncodingCodeword($enc);
+ ++$cw_num;
+ break;
+ }
+ }
+ } while (($p > 0) AND ($epos < $data_lenght));
+ // process last data (if any)
+ if ($p > 0) {
+ // get remaining number of data symbols
+ $cwr = ($this->getMaxDataCodewords($cw_num + 2) - $cw_num);
+ if (($cwr == 1) AND ($p == 1)) {
+ // d. If one symbol character remains and one C40 value (data character) remains to be encoded
+ $c1 = array_shift($temp_cw);
+ --$p;
+ $cw[] = ($c1 + 1);
+ ++$cw_num;
+ } elseif (($cwr == 2) AND ($p == 1)) {
+ // c. If two symbol characters remain and only one C40 value (data character) remains to be encoded
+ $c1 = array_shift($temp_cw);
+ --$p;
+ $cw[] = 254;
+ $cw[] = ($c1 + 1);
+ $cw_num += 2;
+ } elseif (($cwr == 2) AND ($p == 2)) {
+ // b. If two symbol characters remain and two C40 values remain to be encoded
+ $c1 = array_shift($temp_cw);
+ $c2 = array_shift($temp_cw);
+ $p -= 2;
+ $tmp = ((1600 * $c1) + (40 * $c2) + 1);
+ $cw[] = ($tmp >> 8);
+ $cw[] = ($tmp % 256);
+ $cw_num += 2;
+ } else {
+ // switch to ASCII encoding
+ $enc = ENC_ASCII;
+ $cw[] = $this->getSwitchEncodingCodeword($enc);
+ ++$cw_num;
+ }
+ }
+ break;
+ }
+ case ENC_EDF: { // F. While in EDIFACT (EDF) encodation
+ // initialize temporary array with 0 lenght
+ $temp_cw = array();
+ $epos = $pos;
+ $field_lenght = 0;
+ while ($epos < $data_lenght) {
+ // 2. process the next character in EDIFACT encodation.
+ $chr = ord($data{($epos)});
+ ++$epos;
+ $temp_cw[] = $chr;
+ ++$field_lenght;
+ if (($field_lenght == 4) OR ($epos == $data_lenght)) {
+ if ($field_lenght < 4) {
+ // set unlatch character
+ $temp_cw[] = 0x1f;
+ ++$field_lenght;
+ $enc = ENC_ASCII;
+ // fill empty characters
+ for ($i = $field_lenght; $i < 4; ++$i) {
+ $temp_cw[] = 0;
+ }
+ }
+ // encodes four data characters in three codewords
+ $cw[] = (($temp_cw[0] & 0x3F) << 2) + (($temp_cw[1] & 0x30) >> 4);
+ $cw[] = (($temp_cw[1] & 0x0F) << 4) + (($temp_cw[2] & 0x3C) >> 2);
+ $cw[] = (($temp_cw[2] & 0x03) << 6) + ($temp_cw[3] & 0x3F);
+ $cw_num += 3;
+ $temp_cw = array();
+ $pos = $epos;
+ $field_lenght = 0;
+ }
+ // 1. If the EDIFACT encoding is at the point of starting a new triple symbol character and if the look-ahead test (starting at step J) indicates another mode, switch to that mode.
+ if ($field_lenght == 0) {
+ // get remaining number of data symbols
+ $cwr = ($this->getMaxDataCodewords($cw_num + 2) - $cw_num);
+ if ($cwr < 3) {
+ // return to ascii without unlatch
+ $enc = ENC_ASCII;
+ break; // exit from EDIFACT mode
+ } else {
+ $newenc = $this->lookAheadTest($data, $pos, $enc);
+ if ($newenc != $enc) {
+ // 1. If the look-ahead test (starting at step J) indicates another mode, switch to that mode.
+ $enc = $newenc;
+ $cw[] = $this->getSwitchEncodingCodeword($enc);
+ ++$cw_num;
+ break; // exit from EDIFACT mode
+ }
+ }
+ }
+ }
+ break;
+ }
+ case ENC_BASE256: { // G. While in Base 256 (B256) encodation
+ // initialize temporary array with 0 lenght
+ $temp_cw = array();
+ $field_lenght = 0;
+ while (($pos < $data_lenght) AND ($field_lenght <= 1555)) {
+ $newenc = $this->lookAheadTest($data, $pos, $enc);
+ if ($newenc != $enc) {
+ // 1. If the look-ahead test (starting at step J) indicates another mode, switch to that mode.
+ $enc = $newenc;
+ $cw[] = $this->getSwitchEncodingCodeword($enc);
+ ++$cw_num;
+ break; // exit from B256 mode
+ } else {
+ // 2. Otherwise, process the next character in Base 256 encodation.
+ $chr = ord($data{($pos)});
+ ++$pos;
+ $temp_cw[] = $chr;
+ ++$field_lenght;
+ }
+ }
+ // set field lenght
+ if ($field_lenght <= 249) {
+ $cw[] = $field_lenght;
+ ++$cw_num;
+ } else {
+ $cw[] = (floor($field_lenght / 250) + 249);
+ $cw[] = ($field_lenght % 250);
+ $cw_num += 2;
+ }
+ if (!empty($temp_cw)) {
+ // add B256 field
+ foreach ($temp_cw as $p => $cht) {
+ $cw[] = $this->get255StateCodeword($chr, ($cw_num + $p));
+ }
+ }
+ break;
+ }
+ } // end of switch enc
+ } // end of while
+ // set last used encoding
+ $this->last_enc = $enc;
+ return $cw;
+ }
+
+ /**
+ * Places "chr+bit" with appropriate wrapping within array[].
+ * (Annex F - ECC 200 symbol character placement)
+ * @param $marr array Array of symbols.
+ * @param $nrow (int) Number of rows.
+ * @param $ncol (int) Number of columns.
+ * @param $row (int) Row number.
+ * @param $col (int) Column number.
+ * @param $chr (int) Char byte.
+ * @param $bit (int) Bit.
+ * @return array
+ * @protected
+ */
+ protected function placeModule($marr, $nrow, $ncol, $row, $col, $chr, $bit) {
+ if ($row < 0) {
+ $row += $nrow;
+ $col += (4 - (($nrow + 4) % 8));
+ }
+ if ($col < 0) {
+ $col += $ncol;
+ $row += (4 - (($ncol + 4) % 8));
+ }
+ $marr[(($row * $ncol) + $col)] = ((10 * $chr) + $bit);
+ return $marr;
+ }
+
+ /**
+ * Places the 8 bits of a utah-shaped symbol character.
+ * (Annex F - ECC 200 symbol character placement)
+ * @param $marr array Array of symbols.
+ * @param $nrow (int) Number of rows.
+ * @param $ncol (int) Number of columns.
+ * @param $row (int) Row number.
+ * @param $col (int) Column number.
+ * @param $chr (int) Char byte.
+ * @return array
+ * @protected
+ */
+ protected function placeUtah($marr, $nrow, $ncol, $row, $col, $chr) {
+ $marr = $this->placeModule($marr, $nrow, $ncol, $row-2, $col-2, $chr, 1);
+ $marr = $this->placeModule($marr, $nrow, $ncol, $row-2, $col-1, $chr, 2);
+ $marr = $this->placeModule($marr, $nrow, $ncol, $row-1, $col-2, $chr, 3);
+ $marr = $this->placeModule($marr, $nrow, $ncol, $row-1, $col-1, $chr, 4);
+ $marr = $this->placeModule($marr, $nrow, $ncol, $row-1, $col, $chr, 5);
+ $marr = $this->placeModule($marr, $nrow, $ncol, $row, $col-2, $chr, 6);
+ $marr = $this->placeModule($marr, $nrow, $ncol, $row, $col-1, $chr, 7);
+ $marr = $this->placeModule($marr, $nrow, $ncol, $row, $col, $chr, 8);
+ return $marr;
+ }
+
+ /**
+ * Places the 8 bits of the first special corner case.
+ * (Annex F - ECC 200 symbol character placement)
+ * @param $marr array Array of symbols.
+ * @param $nrow (int) Number of rows.
+ * @param $ncol (int) Number of columns.
+ * @param $chr (int) Char byte.
+ * @return array
+ * @protected
+ */
+ protected function placeCornerA($marr, $nrow, $ncol, $chr) {
+ $marr = $this->placeModule($marr, $nrow, $ncol, $nrow-1, 0, $chr, 1);
+ $marr = $this->placeModule($marr, $nrow, $ncol, $nrow-1, 1, $chr, 2);
+ $marr = $this->placeModule($marr, $nrow, $ncol, $nrow-1, 2, $chr, 3);
+ $marr = $this->placeModule($marr, $nrow, $ncol, 0, $ncol-2, $chr, 4);
+ $marr = $this->placeModule($marr, $nrow, $ncol, 0, $ncol-1, $chr, 5);
+ $marr = $this->placeModule($marr, $nrow, $ncol, 1, $ncol-1, $chr, 6);
+ $marr = $this->placeModule($marr, $nrow, $ncol, 2, $ncol-1, $chr, 7);
+ $marr = $this->placeModule($marr, $nrow, $ncol, 3, $ncol-1, $chr, 8);
+ return $marr;
+ }
+
+ /**
+ * Places the 8 bits of the second special corner case.
+ * (Annex F - ECC 200 symbol character placement)
+ * @param $marr array Array of symbols.
+ * @param $nrow (int) Number of rows.
+ * @param $ncol (int) Number of columns.
+ * @param $chr (int) Char byte.
+ * @return array
+ * @protected
+ */
+ protected function placeCornerB($marr, $nrow, $ncol, $chr) {
+ $marr = $this->placeModule($marr, $nrow, $ncol, $nrow-3, 0, $chr, 1);
+ $marr = $this->placeModule($marr, $nrow, $ncol, $nrow-2, 0, $chr, 2);
+ $marr = $this->placeModule($marr, $nrow, $ncol, $nrow-1, 0, $chr, 3);
+ $marr = $this->placeModule($marr, $nrow, $ncol, 0, $ncol-4, $chr, 4);
+ $marr = $this->placeModule($marr, $nrow, $ncol, 0, $ncol-3, $chr, 5);
+ $marr = $this->placeModule($marr, $nrow, $ncol, 0, $ncol-2, $chr, 6);
+ $marr = $this->placeModule($marr, $nrow, $ncol, 0, $ncol-1, $chr, 7);
+ $marr = $this->placeModule($marr, $nrow, $ncol, 1, $ncol-1, $chr, 8);
+ return $marr;
+ }
+
+ /**
+ * Places the 8 bits of the third special corner case.
+ * (Annex F - ECC 200 symbol character placement)
+ * @param $marr array Array of symbols.
+ * @param $nrow (int) Number of rows.
+ * @param $ncol (int) Number of columns.
+ * @param $chr (int) Char byte.
+ * @return array
+ * @protected
+ */
+ protected function placeCornerC($marr, $nrow, $ncol, $chr) {
+ $marr = $this->placeModule($marr, $nrow, $ncol, $nrow-3, 0, $chr, 1);
+ $marr = $this->placeModule($marr, $nrow, $ncol, $nrow-2, 0, $chr, 2);
+ $marr = $this->placeModule($marr, $nrow, $ncol, $nrow-1, 0, $chr, 3);
+ $marr = $this->placeModule($marr, $nrow, $ncol, 0, $ncol-2, $chr, 4);
+ $marr = $this->placeModule($marr, $nrow, $ncol, 0, $ncol-1, $chr, 5);
+ $marr = $this->placeModule($marr, $nrow, $ncol, 1, $ncol-1, $chr, 6);
+ $marr = $this->placeModule($marr, $nrow, $ncol, 2, $ncol-1, $chr, 7);
+ $marr = $this->placeModule($marr, $nrow, $ncol, 3, $ncol-1, $chr, 8);
+ return $marr;
+ }
+
+ /**
+ * Places the 8 bits of the fourth special corner case.
+ * (Annex F - ECC 200 symbol character placement)
+ * @param $marr array Array of symbols.
+ * @param $nrow (int) Number of rows.
+ * @param $ncol (int) Number of columns.
+ * @param $chr (int) Char byte.
+ * @return array
+ * @protected
+ */
+ protected function placeCornerD($marr, $nrow, $ncol, $chr) {
+ $marr = $this->placeModule($marr, $nrow, $ncol, $nrow-1, 0, $chr, 1);
+ $marr = $this->placeModule($marr, $nrow, $ncol, $nrow-1, $ncol-1, $chr, 2);
+ $marr = $this->placeModule($marr, $nrow, $ncol, 0, $ncol-3, $chr, 3);
+ $marr = $this->placeModule($marr, $nrow, $ncol, 0, $ncol-2, $chr, 4);
+ $marr = $this->placeModule($marr, $nrow, $ncol, 0, $ncol-1, $chr, 5);
+ $marr = $this->placeModule($marr, $nrow, $ncol, 1, $ncol-3, $chr, 6);
+ $marr = $this->placeModule($marr, $nrow, $ncol, 1, $ncol-2, $chr, 7);
+ $marr = $this->placeModule($marr, $nrow, $ncol, 1, $ncol-1, $chr, 8);
+ return $marr;
+ }
+
+
+ /**
+ * Build a placement map.
+ * (Annex F - ECC 200 symbol character placement)
+ * @param $nrow (int) Number of rows.
+ * @param $ncol (int) Number of columns.
+ * @return array
+ * @protected
+ */
+ protected function getPlacemetMap($nrow, $ncol) {
+ // initialize array with zeros
+ $marr = array_fill(0, ($nrow * $ncol), 0);
+ // set starting values
+ $chr = 1;
+ $row = 4;
+ $col = 0;
+ do {
+ // repeatedly first check for one of the special corner cases, then
+ if (($row == $nrow) AND ($col == 0)) {
+ $marr = $this->placeCornerA($marr, $nrow, $ncol, $chr);
+ ++$chr;
+ }
+ if (($row == ($nrow - 2)) AND ($col == 0) AND ($ncol % 4)) {
+ $marr = $this->placeCornerB($marr, $nrow, $ncol, $chr);
+ ++$chr;
+ }
+ if (($row == ($nrow - 2)) AND ($col == 0) AND (($ncol % 8) == 4)) {
+ $marr = $this->placeCornerC($marr, $nrow, $ncol, $chr);
+ ++$chr;
+ }
+ if (($row == ($nrow + 4)) AND ($col == 2) AND (!($ncol % 8))) {
+ $marr = $this->placeCornerD($marr, $nrow, $ncol, $chr);
+ ++$chr;
+ }
+ // sweep upward diagonally, inserting successive characters,
+ do {
+ if (($row < $nrow) AND ($col >= 0) AND (!$marr[(($row * $ncol) + $col)])) {
+ $marr = $this->placeUtah($marr, $nrow, $ncol, $row, $col, $chr);
+ ++$chr;
+ }
+ $row -= 2;
+ $col += 2;
+ } while (($row >= 0) AND ($col < $ncol));
+ ++$row;
+ $col += 3;
+ // & then sweep downward diagonally, inserting successive characters,...
+ do {
+ if (($row >= 0) AND ($col < $ncol) AND (!$marr[(($row * $ncol) + $col)])) {
+ $marr = $this->placeUtah($marr, $nrow, $ncol, $row, $col, $chr);
+ ++$chr;
+ }
+ $row += 2;
+ $col -= 2;
+ } while (($row < $nrow) AND ($col >= 0));
+ $row += 3;
+ ++$col;
+ // ... until the entire array is scanned
+ } while (($row < $nrow) OR ($col < $ncol));
+ // lastly, if the lower righthand corner is untouched, fill in fixed pattern
+ if (!$marr[(($nrow * $ncol) - 1)]) {
+ $marr[(($nrow * $ncol) - 1)] = 1;
+ $marr[(($nrow * $ncol) - $ncol - 2)] = 1;
+ }
+ return $marr;
+ }
+
+} // end DataMatrix class
+//============================================================+
+// END OF FILE
+//============================================================+
diff --git a/lib/tcpdf/encodings_maps.php b/lib/tcpdf/encodings_maps.php
new file mode 100644
index 00000000000..11b824aa670
--- /dev/null
+++ b/lib/tcpdf/encodings_maps.php
@@ -0,0 +1,880 @@
+.
+//
+// See LICENSE.TXT file for more information.
+// -------------------------------------------------------------------
+//
+// Description : Unicode data for TCPDF library.
+//
+//============================================================+
+
+/**
+ * @file
+ * Font encodings maps class for TCPDF library.
+ * @author Nicola Asuni
+ * @package com.tecnick.tcpdf
+ * @since 5.9.123 (2011-10-01)
+ */
+
+/**
+ * @class TCPDF_ENCODING_MAPS
+ * This is a PHP class containing Font encodings maps class for TCPDF library.
+ * @package com.tecnick.tcpdf
+ * @version 1.0.000
+ * @author Nicola Asuni - info@tecnick.com
+ */
+class TCPDF_ENCODING_MAPS {
+
+/**
+ * Array of Encoding Maps.
+ * @public
+ */
+public $encmap = array(
+
+// encoding map for: cp1251
+'cp1251' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',
+40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',
+72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',
+80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',
+88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',
+96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',
+104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',
+112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',
+120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',
+128=>'afii10051',129=>'afii10052',130=>'quotesinglbase',131=>'afii10100',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',
+136=>'Euro',137=>'perthousand',138=>'afii10058',139=>'guilsinglleft',140=>'afii10059',141=>'afii10061',142=>'afii10060',143=>'afii10145',
+144=>'afii10099',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',
+152=>'.notdef',153=>'trademark',154=>'afii10106',155=>'guilsinglright',156=>'afii10107',157=>'afii10109',158=>'afii10108',159=>'afii10193',
+160=>'space',161=>'afii10062',162=>'afii10110',163=>'afii10057',164=>'currency',165=>'afii10050',166=>'brokenbar',167=>'section',
+168=>'afii10023',169=>'copyright',170=>'afii10053',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'afii10056',
+176=>'degree',177=>'plusminus',178=>'afii10055',179=>'afii10103',180=>'afii10098',181=>'mu',182=>'paragraph',183=>'periodcentered',
+184=>'afii10071',185=>'afii61352',186=>'afii10101',187=>'guillemotright',188=>'afii10105',189=>'afii10054',190=>'afii10102',191=>'afii10104',
+192=>'afii10017',193=>'afii10018',194=>'afii10019',195=>'afii10020',196=>'afii10021',197=>'afii10022',198=>'afii10024',199=>'afii10025',
+200=>'afii10026',201=>'afii10027',202=>'afii10028',203=>'afii10029',204=>'afii10030',205=>'afii10031',206=>'afii10032',207=>'afii10033',
+208=>'afii10034',209=>'afii10035',210=>'afii10036',211=>'afii10037',212=>'afii10038',213=>'afii10039',214=>'afii10040',215=>'afii10041',
+216=>'afii10042',217=>'afii10043',218=>'afii10044',219=>'afii10045',220=>'afii10046',221=>'afii10047',222=>'afii10048',223=>'afii10049',
+224=>'afii10065',225=>'afii10066',226=>'afii10067',227=>'afii10068',228=>'afii10069',229=>'afii10070',230=>'afii10072',231=>'afii10073',
+232=>'afii10074',233=>'afii10075',234=>'afii10076',235=>'afii10077',236=>'afii10078',237=>'afii10079',238=>'afii10080',239=>'afii10081',
+240=>'afii10082',241=>'afii10083',242=>'afii10084',243=>'afii10085',244=>'afii10086',245=>'afii10087',246=>'afii10088',247=>'afii10089',
+248=>'afii10090',249=>'afii10091',250=>'afii10092',251=>'afii10093',252=>'afii10094',253=>'afii10095',254=>'afii10096',255=>'afii10097'),
+
+// encoding map for: iso-8859-4
+'iso-8859-4' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',
+40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',
+72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',
+80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',
+88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',
+96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',
+104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',
+112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',
+120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',
+128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',
+136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',
+144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',
+152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',
+160=>'space',161=>'Aogonek',162=>'kgreenlandic',163=>'Rcommaaccent',164=>'currency',165=>'Itilde',166=>'Lcommaaccent',167=>'section',
+168=>'dieresis',169=>'Scaron',170=>'Emacron',171=>'Gcommaaccent',172=>'Tbar',173=>'hyphen',174=>'Zcaron',175=>'macron',
+176=>'degree',177=>'aogonek',178=>'ogonek',179=>'rcommaaccent',180=>'acute',181=>'itilde',182=>'lcommaaccent',183=>'caron',
+184=>'cedilla',185=>'scaron',186=>'emacron',187=>'gcommaaccent',188=>'tbar',189=>'Eng',190=>'zcaron',191=>'eng',
+192=>'Amacron',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Iogonek',
+200=>'Ccaron',201=>'Eacute',202=>'Eogonek',203=>'Edieresis',204=>'Edotaccent',205=>'Iacute',206=>'Icircumflex',207=>'Imacron',
+208=>'Dcroat',209=>'Ncommaaccent',210=>'Omacron',211=>'Kcommaaccent',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',
+216=>'Oslash',217=>'Uogonek',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Utilde',222=>'Umacron',223=>'germandbls',
+224=>'amacron',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'iogonek',
+232=>'ccaron',233=>'eacute',234=>'eogonek',235=>'edieresis',236=>'edotaccent',237=>'iacute',238=>'icircumflex',239=>'imacron',
+240=>'dcroat',241=>'ncommaaccent',242=>'omacron',243=>'kcommaaccent',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',
+248=>'oslash',249=>'uogonek',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'utilde',254=>'umacron',255=>'dotaccent'),
+
+// encoding map for: cp1255
+'cp1255' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',
+40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',
+72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',
+80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',
+88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',
+96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',
+104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',
+112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',
+120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',
+128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',
+136=>'circumflex',137=>'perthousand',138=>'.notdef',139=>'guilsinglleft',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',
+144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',
+152=>'tilde',153=>'trademark',154=>'.notdef',155=>'guilsinglright',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',
+160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'afii57636',165=>'yen',166=>'brokenbar',167=>'section',
+168=>'dieresis',169=>'copyright',170=>'multiply',171=>'guillemotleft',172=>'logicalnot',173=>'sfthyphen',174=>'registered',175=>'macron',
+176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'middot',
+184=>'cedilla',185=>'onesuperior',186=>'divide',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',
+192=>'afii57799',193=>'afii57801',194=>'afii57800',195=>'afii57802',196=>'afii57793',197=>'afii57794',198=>'afii57795',199=>'afii57798',
+200=>'afii57797',201=>'afii57806',202=>'.notdef',203=>'afii57796',204=>'afii57807',205=>'afii57839',206=>'afii57645',207=>'afii57841',
+208=>'afii57842',209=>'afii57804',210=>'afii57803',211=>'afii57658',212=>'afii57716',213=>'afii57717',214=>'afii57718',215=>'gereshhebrew',
+216=>'gershayimhebrew',217=>'.notdef',218=>'.notdef',219=>'.notdef',220=>'.notdef',221=>'.notdef',222=>'.notdef',223=>'.notdef',
+224=>'afii57664',225=>'afii57665',226=>'afii57666',227=>'afii57667',228=>'afii57668',229=>'afii57669',230=>'afii57670',231=>'afii57671',
+232=>'afii57672',233=>'afii57673',234=>'afii57674',235=>'afii57675',236=>'afii57676',237=>'afii57677',238=>'afii57678',239=>'afii57679',
+240=>'afii57680',241=>'afii57681',242=>'afii57682',243=>'afii57683',244=>'afii57684',245=>'afii57685',246=>'afii57686',247=>'afii57687',
+248=>'afii57688',249=>'afii57689',250=>'afii57690',251=>'.notdef',252=>'.notdef',253=>'afii299',254=>'afii300',255=>'.notdef'),
+
+// encoding map for: iso-8859-11
+'iso-8859-11' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',
+40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',
+72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',
+80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',
+88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',
+96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',
+104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',
+112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',
+120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',
+128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',
+136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',
+144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',
+152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',
+160=>'space',161=>'kokaithai',162=>'khokhaithai',163=>'khokhuatthai',164=>'khokhwaithai',165=>'khokhonthai',166=>'khorakhangthai',167=>'ngonguthai',
+168=>'chochanthai',169=>'chochingthai',170=>'chochangthai',171=>'sosothai',172=>'chochoethai',173=>'yoyingthai',174=>'dochadathai',175=>'topatakthai',
+176=>'thothanthai',177=>'thonangmonthothai',178=>'thophuthaothai',179=>'nonenthai',180=>'dodekthai',181=>'totaothai',182=>'thothungthai',183=>'thothahanthai',
+184=>'thothongthai',185=>'nonuthai',186=>'bobaimaithai',187=>'poplathai',188=>'phophungthai',189=>'fofathai',190=>'phophanthai',191=>'fofanthai',
+192=>'phosamphaothai',193=>'momathai',194=>'yoyakthai',195=>'roruathai',196=>'ruthai',197=>'lolingthai',198=>'luthai',199=>'wowaenthai',
+200=>'sosalathai',201=>'sorusithai',202=>'sosuathai',203=>'hohipthai',204=>'lochulathai',205=>'oangthai',206=>'honokhukthai',207=>'paiyannoithai',
+208=>'saraathai',209=>'maihanakatthai',210=>'saraaathai',211=>'saraamthai',212=>'saraithai',213=>'saraiithai',214=>'sarauethai',215=>'saraueethai',
+216=>'sarauthai',217=>'sarauuthai',218=>'phinthuthai',219=>'.notdef',220=>'.notdef',221=>'.notdef',222=>'.notdef',223=>'bahtthai',
+224=>'saraethai',225=>'saraaethai',226=>'saraothai',227=>'saraaimaimuanthai',228=>'saraaimaimalaithai',229=>'lakkhangyaothai',230=>'maiyamokthai',231=>'maitaikhuthai',
+232=>'maiekthai',233=>'maithothai',234=>'maitrithai',235=>'maichattawathai',236=>'thanthakhatthai',237=>'nikhahitthai',238=>'yamakkanthai',239=>'fongmanthai',
+240=>'zerothai',241=>'onethai',242=>'twothai',243=>'threethai',244=>'fourthai',245=>'fivethai',246=>'sixthai',247=>'seventhai',
+248=>'eightthai',249=>'ninethai',250=>'angkhankhuthai',251=>'khomutthai',252=>'.notdef',253=>'.notdef',254=>'.notdef',255=>'.notdef'),
+
+// encoding map for: cp1257
+'cp1257' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',
+40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',
+72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',
+80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',
+88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',
+96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',
+104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',
+112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',
+120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',
+128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'.notdef',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',
+136=>'.notdef',137=>'perthousand',138=>'.notdef',139=>'guilsinglleft',140=>'.notdef',141=>'dieresis',142=>'caron',143=>'cedilla',
+144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',
+152=>'.notdef',153=>'trademark',154=>'.notdef',155=>'guilsinglright',156=>'.notdef',157=>'macron',158=>'ogonek',159=>'.notdef',
+160=>'space',161=>'.notdef',162=>'cent',163=>'sterling',164=>'currency',165=>'.notdef',166=>'brokenbar',167=>'section',
+168=>'Oslash',169=>'copyright',170=>'Rcommaaccent',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'AE',
+176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',
+184=>'oslash',185=>'onesuperior',186=>'rcommaaccent',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'ae',
+192=>'Aogonek',193=>'Iogonek',194=>'Amacron',195=>'Cacute',196=>'Adieresis',197=>'Aring',198=>'Eogonek',199=>'Emacron',
+200=>'Ccaron',201=>'Eacute',202=>'Zacute',203=>'Edotaccent',204=>'Gcommaaccent',205=>'Kcommaaccent',206=>'Imacron',207=>'Lcommaaccent',
+208=>'Scaron',209=>'Nacute',210=>'Ncommaaccent',211=>'Oacute',212=>'Omacron',213=>'Otilde',214=>'Odieresis',215=>'multiply',
+216=>'Uogonek',217=>'Lslash',218=>'Sacute',219=>'Umacron',220=>'Udieresis',221=>'Zdotaccent',222=>'Zcaron',223=>'germandbls',
+224=>'aogonek',225=>'iogonek',226=>'amacron',227=>'cacute',228=>'adieresis',229=>'aring',230=>'eogonek',231=>'emacron',
+232=>'ccaron',233=>'eacute',234=>'zacute',235=>'edotaccent',236=>'gcommaaccent',237=>'kcommaaccent',238=>'imacron',239=>'lcommaaccent',
+240=>'scaron',241=>'nacute',242=>'ncommaaccent',243=>'oacute',244=>'omacron',245=>'otilde',246=>'odieresis',247=>'divide',
+248=>'uogonek',249=>'lslash',250=>'sacute',251=>'umacron',252=>'udieresis',253=>'zdotaccent',254=>'zcaron',255=>'dotaccent'),
+
+// encoding map for: cp1258
+'cp1258' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',
+40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',
+72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',
+80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',
+88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',
+96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',
+104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',
+112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',
+120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',
+128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',
+136=>'circumflex',137=>'perthousand',138=>'.notdef',139=>'guilsinglleft',140=>'OE',141=>'.notdef',142=>'.notdef',143=>'.notdef',
+144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',
+152=>'tilde',153=>'trademark',154=>'.notdef',155=>'guilsinglright',156=>'oe',157=>'.notdef',158=>'.notdef',159=>'Ydieresis',
+160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',
+168=>'dieresis',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',
+176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',
+184=>'cedilla',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',
+192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Abreve',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',
+200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'gravecomb',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',
+208=>'Dcroat',209=>'Ntilde',210=>'hookabovecomb',211=>'Oacute',212=>'Ocircumflex',213=>'Ohorn',214=>'Odieresis',215=>'multiply',
+216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Uhorn',222=>'tildecomb',223=>'germandbls',
+224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'abreve',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',
+232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'acutecomb',237=>'iacute',238=>'icircumflex',239=>'idieresis',
+240=>'dcroat',241=>'ntilde',242=>'dotbelowcomb',243=>'oacute',244=>'ocircumflex',245=>'ohorn',246=>'odieresis',247=>'divide',
+248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'uhorn',254=>'dong',255=>'ydieresis'),
+
+// encoding map for: cp1253
+'cp1253' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',
+40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',
+72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',
+80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',
+88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',
+96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',
+104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',
+112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',
+120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',
+128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',
+136=>'.notdef',137=>'perthousand',138=>'.notdef',139=>'guilsinglleft',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',
+144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',
+152=>'.notdef',153=>'trademark',154=>'.notdef',155=>'guilsinglright',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',
+160=>'space',161=>'dieresistonos',162=>'Alphatonos',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',
+168=>'dieresis',169=>'copyright',170=>'.notdef',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'afii00208',
+176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'tonos',181=>'mu',182=>'paragraph',183=>'periodcentered',
+184=>'Epsilontonos',185=>'Etatonos',186=>'Iotatonos',187=>'guillemotright',188=>'Omicrontonos',189=>'onehalf',190=>'Upsilontonos',191=>'Omegatonos',
+192=>'iotadieresistonos',193=>'Alpha',194=>'Beta',195=>'Gamma',196=>'Delta',197=>'Epsilon',198=>'Zeta',199=>'Eta',
+200=>'Theta',201=>'Iota',202=>'Kappa',203=>'Lambda',204=>'Mu',205=>'Nu',206=>'Xi',207=>'Omicron',
+208=>'Pi',209=>'Rho',210=>'.notdef',211=>'Sigma',212=>'Tau',213=>'Upsilon',214=>'Phi',215=>'Chi',
+216=>'Psi',217=>'Omega',218=>'Iotadieresis',219=>'Upsilondieresis',220=>'alphatonos',221=>'epsilontonos',222=>'etatonos',223=>'iotatonos',
+224=>'upsilondieresistonos',225=>'alpha',226=>'beta',227=>'gamma',228=>'delta',229=>'epsilon',230=>'zeta',231=>'eta',
+232=>'theta',233=>'iota',234=>'kappa',235=>'lambda',236=>'mu',237=>'nu',238=>'xi',239=>'omicron',
+240=>'pi',241=>'rho',242=>'sigma1',243=>'sigma',244=>'tau',245=>'upsilon',246=>'phi',247=>'chi',
+248=>'psi',249=>'omega',250=>'iotadieresis',251=>'upsilondieresis',252=>'omicrontonos',253=>'upsilontonos',254=>'omegatonos',255=>'.notdef'),
+
+// encoding map for: cp874
+'cp874' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',
+40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',
+72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',
+80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',
+88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',
+96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',
+104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',
+112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',
+120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',
+128=>'Euro',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'ellipsis',134=>'.notdef',135=>'.notdef',
+136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',
+144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',
+152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',
+160=>'space',161=>'kokaithai',162=>'khokhaithai',163=>'khokhuatthai',164=>'khokhwaithai',165=>'khokhonthai',166=>'khorakhangthai',167=>'ngonguthai',
+168=>'chochanthai',169=>'chochingthai',170=>'chochangthai',171=>'sosothai',172=>'chochoethai',173=>'yoyingthai',174=>'dochadathai',175=>'topatakthai',
+176=>'thothanthai',177=>'thonangmonthothai',178=>'thophuthaothai',179=>'nonenthai',180=>'dodekthai',181=>'totaothai',182=>'thothungthai',183=>'thothahanthai',
+184=>'thothongthai',185=>'nonuthai',186=>'bobaimaithai',187=>'poplathai',188=>'phophungthai',189=>'fofathai',190=>'phophanthai',191=>'fofanthai',
+192=>'phosamphaothai',193=>'momathai',194=>'yoyakthai',195=>'roruathai',196=>'ruthai',197=>'lolingthai',198=>'luthai',199=>'wowaenthai',
+200=>'sosalathai',201=>'sorusithai',202=>'sosuathai',203=>'hohipthai',204=>'lochulathai',205=>'oangthai',206=>'honokhukthai',207=>'paiyannoithai',
+208=>'saraathai',209=>'maihanakatthai',210=>'saraaathai',211=>'saraamthai',212=>'saraithai',213=>'saraiithai',214=>'sarauethai',215=>'saraueethai',
+216=>'sarauthai',217=>'sarauuthai',218=>'phinthuthai',219=>'.notdef',220=>'.notdef',221=>'.notdef',222=>'.notdef',223=>'bahtthai',
+224=>'saraethai',225=>'saraaethai',226=>'saraothai',227=>'saraaimaimuanthai',228=>'saraaimaimalaithai',229=>'lakkhangyaothai',230=>'maiyamokthai',231=>'maitaikhuthai',
+232=>'maiekthai',233=>'maithothai',234=>'maitrithai',235=>'maichattawathai',236=>'thanthakhatthai',237=>'nikhahitthai',238=>'yamakkanthai',239=>'fongmanthai',
+240=>'zerothai',241=>'onethai',242=>'twothai',243=>'threethai',244=>'fourthai',245=>'fivethai',246=>'sixthai',247=>'seventhai',
+248=>'eightthai',249=>'ninethai',250=>'angkhankhuthai',251=>'khomutthai',252=>'.notdef',253=>'.notdef',254=>'.notdef',255=>'.notdef'),
+
+// encoding map for: iso-8859-2
+'iso-8859-2' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',
+40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',
+72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',
+80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',
+88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',
+96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',
+104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',
+112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',
+120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',
+128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',
+136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',
+144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',
+152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',
+160=>'space',161=>'Aogonek',162=>'breve',163=>'Lslash',164=>'currency',165=>'Lcaron',166=>'Sacute',167=>'section',
+168=>'dieresis',169=>'Scaron',170=>'Scedilla',171=>'Tcaron',172=>'Zacute',173=>'hyphen',174=>'Zcaron',175=>'Zdotaccent',
+176=>'degree',177=>'aogonek',178=>'ogonek',179=>'lslash',180=>'acute',181=>'lcaron',182=>'sacute',183=>'caron',
+184=>'cedilla',185=>'scaron',186=>'scedilla',187=>'tcaron',188=>'zacute',189=>'hungarumlaut',190=>'zcaron',191=>'zdotaccent',
+192=>'Racute',193=>'Aacute',194=>'Acircumflex',195=>'Abreve',196=>'Adieresis',197=>'Lacute',198=>'Cacute',199=>'Ccedilla',
+200=>'Ccaron',201=>'Eacute',202=>'Eogonek',203=>'Edieresis',204=>'Ecaron',205=>'Iacute',206=>'Icircumflex',207=>'Dcaron',
+208=>'Dcroat',209=>'Nacute',210=>'Ncaron',211=>'Oacute',212=>'Ocircumflex',213=>'Ohungarumlaut',214=>'Odieresis',215=>'multiply',
+216=>'Rcaron',217=>'Uring',218=>'Uacute',219=>'Uhungarumlaut',220=>'Udieresis',221=>'Yacute',222=>'Tcommaaccent',223=>'germandbls',
+224=>'racute',225=>'aacute',226=>'acircumflex',227=>'abreve',228=>'adieresis',229=>'lacute',230=>'cacute',231=>'ccedilla',
+232=>'ccaron',233=>'eacute',234=>'eogonek',235=>'edieresis',236=>'ecaron',237=>'iacute',238=>'icircumflex',239=>'dcaron',
+240=>'dcroat',241=>'nacute',242=>'ncaron',243=>'oacute',244=>'ocircumflex',245=>'ohungarumlaut',246=>'odieresis',247=>'divide',
+248=>'rcaron',249=>'uring',250=>'uacute',251=>'uhungarumlaut',252=>'udieresis',253=>'yacute',254=>'tcommaaccent',255=>'dotaccent'),
+
+// encoding map for: cp1250
+'cp1250' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',
+40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',
+72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',
+80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',
+88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',
+96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',
+104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',
+112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',
+120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',
+128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'.notdef',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',
+136=>'.notdef',137=>'perthousand',138=>'Scaron',139=>'guilsinglleft',140=>'Sacute',141=>'Tcaron',142=>'Zcaron',143=>'Zacute',
+144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',
+152=>'.notdef',153=>'trademark',154=>'scaron',155=>'guilsinglright',156=>'sacute',157=>'tcaron',158=>'zcaron',159=>'zacute',
+160=>'space',161=>'caron',162=>'breve',163=>'Lslash',164=>'currency',165=>'Aogonek',166=>'brokenbar',167=>'section',
+168=>'dieresis',169=>'copyright',170=>'Scedilla',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'Zdotaccent',
+176=>'degree',177=>'plusminus',178=>'ogonek',179=>'lslash',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',
+184=>'cedilla',185=>'aogonek',186=>'scedilla',187=>'guillemotright',188=>'Lcaron',189=>'hungarumlaut',190=>'lcaron',191=>'zdotaccent',
+192=>'Racute',193=>'Aacute',194=>'Acircumflex',195=>'Abreve',196=>'Adieresis',197=>'Lacute',198=>'Cacute',199=>'Ccedilla',
+200=>'Ccaron',201=>'Eacute',202=>'Eogonek',203=>'Edieresis',204=>'Ecaron',205=>'Iacute',206=>'Icircumflex',207=>'Dcaron',
+208=>'Dcroat',209=>'Nacute',210=>'Ncaron',211=>'Oacute',212=>'Ocircumflex',213=>'Ohungarumlaut',214=>'Odieresis',215=>'multiply',
+216=>'Rcaron',217=>'Uring',218=>'Uacute',219=>'Uhungarumlaut',220=>'Udieresis',221=>'Yacute',222=>'Tcommaaccent',223=>'germandbls',
+224=>'racute',225=>'aacute',226=>'acircumflex',227=>'abreve',228=>'adieresis',229=>'lacute',230=>'cacute',231=>'ccedilla',
+232=>'ccaron',233=>'eacute',234=>'eogonek',235=>'edieresis',236=>'ecaron',237=>'iacute',238=>'icircumflex',239=>'dcaron',
+240=>'dcroat',241=>'nacute',242=>'ncaron',243=>'oacute',244=>'ocircumflex',245=>'ohungarumlaut',246=>'odieresis',247=>'divide',
+248=>'rcaron',249=>'uring',250=>'uacute',251=>'uhungarumlaut',252=>'udieresis',253=>'yacute',254=>'tcommaaccent',255=>'dotaccent'),
+
+// encoding map for: iso-8859-7
+'iso-8859-7' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',
+40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',
+72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',
+80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',
+88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',
+96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',
+104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',
+112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',
+120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',
+128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',
+136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',
+144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',
+152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',
+160=>'space',161=>'quoteleft',162=>'quoteright',163=>'sterling',164=>'.notdef',165=>'.notdef',166=>'brokenbar',167=>'section',
+168=>'dieresis',169=>'copyright',170=>'.notdef',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'.notdef',175=>'afii00208',
+176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'tonos',181=>'dieresistonos',182=>'Alphatonos',183=>'periodcentered',
+184=>'Epsilontonos',185=>'Etatonos',186=>'Iotatonos',187=>'guillemotright',188=>'Omicrontonos',189=>'onehalf',190=>'Upsilontonos',191=>'Omegatonos',
+192=>'iotadieresistonos',193=>'Alpha',194=>'Beta',195=>'Gamma',196=>'Delta',197=>'Epsilon',198=>'Zeta',199=>'Eta',
+200=>'Theta',201=>'Iota',202=>'Kappa',203=>'Lambda',204=>'Mu',205=>'Nu',206=>'Xi',207=>'Omicron',
+208=>'Pi',209=>'Rho',210=>'.notdef',211=>'Sigma',212=>'Tau',213=>'Upsilon',214=>'Phi',215=>'Chi',
+216=>'Psi',217=>'Omega',218=>'Iotadieresis',219=>'Upsilondieresis',220=>'alphatonos',221=>'epsilontonos',222=>'etatonos',223=>'iotatonos',
+224=>'upsilondieresistonos',225=>'alpha',226=>'beta',227=>'gamma',228=>'delta',229=>'epsilon',230=>'zeta',231=>'eta',
+232=>'theta',233=>'iota',234=>'kappa',235=>'lambda',236=>'mu',237=>'nu',238=>'xi',239=>'omicron',
+240=>'pi',241=>'rho',242=>'sigma1',243=>'sigma',244=>'tau',245=>'upsilon',246=>'phi',247=>'chi',
+248=>'psi',249=>'omega',250=>'iotadieresis',251=>'upsilondieresis',252=>'omicrontonos',253=>'upsilontonos',254=>'omegatonos',255=>'.notdef'),
+
+// encoding map for: iso-8859-9
+'iso-8859-9' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',
+40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',
+72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',
+80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',
+88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',
+96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',
+104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',
+112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',
+120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',
+128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',
+136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',
+144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',
+152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',
+160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',
+168=>'dieresis',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',
+176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',
+184=>'cedilla',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',
+192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',
+200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',
+208=>'Gbreve',209=>'Ntilde',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',
+216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Idotaccent',222=>'Scedilla',223=>'germandbls',
+224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',
+232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',
+240=>'gbreve',241=>'ntilde',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',
+248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'dotlessi',254=>'scedilla',255=>'ydieresis'),
+
+// encoding map for: cp1252
+'cp1252' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',
+40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',
+72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',
+80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',
+88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',
+96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',
+104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',
+112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',
+120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',
+128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',
+136=>'circumflex',137=>'perthousand',138=>'Scaron',139=>'guilsinglleft',140=>'OE',141=>'.notdef',142=>'Zcaron',143=>'.notdef',
+144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',
+152=>'tilde',153=>'trademark',154=>'scaron',155=>'guilsinglright',156=>'oe',157=>'.notdef',158=>'zcaron',159=>'Ydieresis',
+160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',
+168=>'dieresis',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',
+176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',
+184=>'cedilla',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',
+192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',
+200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',
+208=>'Eth',209=>'Ntilde',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',
+216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Yacute',222=>'Thorn',223=>'germandbls',
+224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',
+232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',
+240=>'eth',241=>'ntilde',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',
+248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'yacute',254=>'thorn',255=>'ydieresis'),
+
+// encoding map for: cp1254
+'cp1254' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',
+40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',
+72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',
+80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',
+88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',
+96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',
+104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',
+112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',
+120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',
+128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',
+136=>'circumflex',137=>'perthousand',138=>'Scaron',139=>'guilsinglleft',140=>'OE',141=>'.notdef',142=>'.notdef',143=>'.notdef',
+144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',
+152=>'tilde',153=>'trademark',154=>'scaron',155=>'guilsinglright',156=>'oe',157=>'.notdef',158=>'.notdef',159=>'Ydieresis',
+160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',
+168=>'dieresis',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',
+176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',
+184=>'cedilla',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',
+192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',
+200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',
+208=>'Gbreve',209=>'Ntilde',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',
+216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Idotaccent',222=>'Scedilla',223=>'germandbls',
+224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',
+232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',
+240=>'gbreve',241=>'ntilde',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',
+248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'dotlessi',254=>'scedilla',255=>'ydieresis'),
+
+// encoding map for: cp1254
+'cp1254' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',
+40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',
+72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',
+80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',
+88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',
+96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',
+104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',
+112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',
+120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',
+128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',
+136=>'circumflex',137=>'perthousand',138=>'Scaron',139=>'guilsinglleft',140=>'OE',141=>'.notdef',142=>'.notdef',143=>'.notdef',
+144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',
+152=>'tilde',153=>'trademark',154=>'scaron',155=>'guilsinglright',156=>'oe',157=>'.notdef',158=>'.notdef',159=>'Ydieresis',
+160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',
+168=>'dieresis',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',
+176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',
+184=>'cedilla',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',
+192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',
+200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',
+208=>'Gbreve',209=>'Ntilde',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',
+216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Idotaccent',222=>'Scedilla',223=>'germandbls',
+224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',
+232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',
+240=>'gbreve',241=>'ntilde',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',
+248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'dotlessi',254=>'scedilla',255=>'ydieresis'),
+
+// encoding map for: iso-8859-1
+'iso-8859-1' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',
+40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',
+72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',
+80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',
+88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',
+96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',
+104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',
+112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',
+120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',
+128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',
+136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',
+144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',
+152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',
+160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',
+168=>'dieresis',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',
+176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',
+184=>'cedilla',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',
+192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',
+200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',
+208=>'Eth',209=>'Ntilde',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',
+216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Yacute',222=>'Thorn',223=>'germandbls',
+224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',
+232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',
+240=>'eth',241=>'ntilde',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',
+248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'yacute',254=>'thorn',255=>'ydieresis'),
+
+// encoding map for: iso-8859-15
+'iso-8859-15' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',
+40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',
+72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',
+80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',
+88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',
+96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',
+104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',
+112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',
+120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',
+128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',
+136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',
+144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',
+152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',
+160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'Euro',165=>'yen',166=>'Scaron',167=>'section',
+168=>'scaron',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',
+176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'Zcaron',181=>'mu',182=>'paragraph',183=>'periodcentered',
+184=>'zcaron',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'OE',189=>'oe',190=>'Ydieresis',191=>'questiondown',
+192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',
+200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',
+208=>'Eth',209=>'Ntilde',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',
+216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Yacute',222=>'Thorn',223=>'germandbls',
+224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',
+232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',
+240=>'eth',241=>'ntilde',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',
+248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'yacute',254=>'thorn',255=>'ydieresis'),
+
+// encoding map for: iso-8859-5
+'iso-8859-5' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',
+40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',
+72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',
+80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',
+88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',
+96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',
+104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',
+112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',
+120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',
+128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',
+136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',
+144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',
+152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',
+160=>'space',161=>'afii10023',162=>'afii10051',163=>'afii10052',164=>'afii10053',165=>'afii10054',166=>'afii10055',167=>'afii10056',
+168=>'afii10057',169=>'afii10058',170=>'afii10059',171=>'afii10060',172=>'afii10061',173=>'hyphen',174=>'afii10062',175=>'afii10145',
+176=>'afii10017',177=>'afii10018',178=>'afii10019',179=>'afii10020',180=>'afii10021',181=>'afii10022',182=>'afii10024',183=>'afii10025',
+184=>'afii10026',185=>'afii10027',186=>'afii10028',187=>'afii10029',188=>'afii10030',189=>'afii10031',190=>'afii10032',191=>'afii10033',
+192=>'afii10034',193=>'afii10035',194=>'afii10036',195=>'afii10037',196=>'afii10038',197=>'afii10039',198=>'afii10040',199=>'afii10041',
+200=>'afii10042',201=>'afii10043',202=>'afii10044',203=>'afii10045',204=>'afii10046',205=>'afii10047',206=>'afii10048',207=>'afii10049',
+208=>'afii10065',209=>'afii10066',210=>'afii10067',211=>'afii10068',212=>'afii10069',213=>'afii10070',214=>'afii10072',215=>'afii10073',
+216=>'afii10074',217=>'afii10075',218=>'afii10076',219=>'afii10077',220=>'afii10078',221=>'afii10079',222=>'afii10080',223=>'afii10081',
+224=>'afii10082',225=>'afii10083',226=>'afii10084',227=>'afii10085',228=>'afii10086',229=>'afii10087',230=>'afii10088',231=>'afii10089',
+232=>'afii10090',233=>'afii10091',234=>'afii10092',235=>'afii10093',236=>'afii10094',237=>'afii10095',238=>'afii10096',239=>'afii10097',
+240=>'afii61352',241=>'afii10071',242=>'afii10099',243=>'afii10100',244=>'afii10101',245=>'afii10102',246=>'afii10103',247=>'afii10104',
+248=>'afii10105',249=>'afii10106',250=>'afii10107',251=>'afii10108',252=>'afii10109',253=>'section',254=>'afii10110',255=>'afii10193'),
+
+// encoding map for: iso-8859-5
+'iso-8859-5' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',
+40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',
+72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',
+80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',
+88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',
+96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',
+104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',
+112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',
+120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',
+128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',
+136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',
+144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',
+152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',
+160=>'space',161=>'afii10023',162=>'afii10051',163=>'afii10052',164=>'afii10053',165=>'afii10054',166=>'afii10055',167=>'afii10056',
+168=>'afii10057',169=>'afii10058',170=>'afii10059',171=>'afii10060',172=>'afii10061',173=>'hyphen',174=>'afii10062',175=>'afii10145',
+176=>'afii10017',177=>'afii10018',178=>'afii10019',179=>'afii10020',180=>'afii10021',181=>'afii10022',182=>'afii10024',183=>'afii10025',
+184=>'afii10026',185=>'afii10027',186=>'afii10028',187=>'afii10029',188=>'afii10030',189=>'afii10031',190=>'afii10032',191=>'afii10033',
+192=>'afii10034',193=>'afii10035',194=>'afii10036',195=>'afii10037',196=>'afii10038',197=>'afii10039',198=>'afii10040',199=>'afii10041',
+200=>'afii10042',201=>'afii10043',202=>'afii10044',203=>'afii10045',204=>'afii10046',205=>'afii10047',206=>'afii10048',207=>'afii10049',
+208=>'afii10065',209=>'afii10066',210=>'afii10067',211=>'afii10068',212=>'afii10069',213=>'afii10070',214=>'afii10072',215=>'afii10073',
+216=>'afii10074',217=>'afii10075',218=>'afii10076',219=>'afii10077',220=>'afii10078',221=>'afii10079',222=>'afii10080',223=>'afii10081',
+224=>'afii10082',225=>'afii10083',226=>'afii10084',227=>'afii10085',228=>'afii10086',229=>'afii10087',230=>'afii10088',231=>'afii10089',
+232=>'afii10090',233=>'afii10091',234=>'afii10092',235=>'afii10093',236=>'afii10094',237=>'afii10095',238=>'afii10096',239=>'afii10097',
+240=>'afii61352',241=>'afii10071',242=>'afii10099',243=>'afii10100',244=>'afii10101',245=>'afii10102',246=>'afii10103',247=>'afii10104',
+248=>'afii10105',249=>'afii10106',250=>'afii10107',251=>'afii10108',252=>'afii10109',253=>'section',254=>'afii10110',255=>'afii10193'),
+
+// encoding map for: koi8-r
+'koi8-r' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',
+40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',
+72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',
+80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',
+88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',
+96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',
+104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',
+112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',
+120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',
+128=>'SF100000',129=>'SF110000',130=>'SF010000',131=>'SF030000',132=>'SF020000',133=>'SF040000',134=>'SF080000',135=>'SF090000',
+136=>'SF060000',137=>'SF070000',138=>'SF050000',139=>'upblock',140=>'dnblock',141=>'block',142=>'lfblock',143=>'rtblock',
+144=>'ltshade',145=>'shade',146=>'dkshade',147=>'integraltp',148=>'filledbox',149=>'periodcentered',150=>'radical',151=>'approxequal',
+152=>'lessequal',153=>'greaterequal',154=>'space',155=>'integralbt',156=>'degree',157=>'twosuperior',158=>'periodcentered',159=>'divide',
+160=>'SF430000',161=>'SF240000',162=>'SF510000',163=>'afii10071',164=>'SF520000',165=>'SF390000',166=>'SF220000',167=>'SF210000',
+168=>'SF250000',169=>'SF500000',170=>'SF490000',171=>'SF380000',172=>'SF280000',173=>'SF270000',174=>'SF260000',175=>'SF360000',
+176=>'SF370000',177=>'SF420000',178=>'SF190000',179=>'afii10023',180=>'SF200000',181=>'SF230000',182=>'SF470000',183=>'SF480000',
+184=>'SF410000',185=>'SF450000',186=>'SF460000',187=>'SF400000',188=>'SF540000',189=>'SF530000',190=>'SF440000',191=>'copyright',
+192=>'afii10096',193=>'afii10065',194=>'afii10066',195=>'afii10088',196=>'afii10069',197=>'afii10070',198=>'afii10086',199=>'afii10068',
+200=>'afii10087',201=>'afii10074',202=>'afii10075',203=>'afii10076',204=>'afii10077',205=>'afii10078',206=>'afii10079',207=>'afii10080',
+208=>'afii10081',209=>'afii10097',210=>'afii10082',211=>'afii10083',212=>'afii10084',213=>'afii10085',214=>'afii10072',215=>'afii10067',
+216=>'afii10094',217=>'afii10093',218=>'afii10073',219=>'afii10090',220=>'afii10095',221=>'afii10091',222=>'afii10089',223=>'afii10092',
+224=>'afii10048',225=>'afii10017',226=>'afii10018',227=>'afii10040',228=>'afii10021',229=>'afii10022',230=>'afii10038',231=>'afii10020',
+232=>'afii10039',233=>'afii10026',234=>'afii10027',235=>'afii10028',236=>'afii10029',237=>'afii10030',238=>'afii10031',239=>'afii10032',
+240=>'afii10033',241=>'afii10049',242=>'afii10034',243=>'afii10035',244=>'afii10036',245=>'afii10037',246=>'afii10024',247=>'afii10019',
+248=>'afii10046',249=>'afii10045',250=>'afii10025',251=>'afii10042',252=>'afii10047',253=>'afii10043',254=>'afii10041',255=>'afii10044'),
+
+// encoding map for: koi8-r
+'koi8-r' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',
+40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',
+72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',
+80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',
+88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',
+96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',
+104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',
+112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',
+120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',
+128=>'SF100000',129=>'SF110000',130=>'SF010000',131=>'SF030000',132=>'SF020000',133=>'SF040000',134=>'SF080000',135=>'SF090000',
+136=>'SF060000',137=>'SF070000',138=>'SF050000',139=>'upblock',140=>'dnblock',141=>'block',142=>'lfblock',143=>'rtblock',
+144=>'ltshade',145=>'shade',146=>'dkshade',147=>'integraltp',148=>'filledbox',149=>'periodcentered',150=>'radical',151=>'approxequal',
+152=>'lessequal',153=>'greaterequal',154=>'space',155=>'integralbt',156=>'degree',157=>'twosuperior',158=>'periodcentered',159=>'divide',
+160=>'SF430000',161=>'SF240000',162=>'SF510000',163=>'afii10071',164=>'SF520000',165=>'SF390000',166=>'SF220000',167=>'SF210000',
+168=>'SF250000',169=>'SF500000',170=>'SF490000',171=>'SF380000',172=>'SF280000',173=>'SF270000',174=>'SF260000',175=>'SF360000',
+176=>'SF370000',177=>'SF420000',178=>'SF190000',179=>'afii10023',180=>'SF200000',181=>'SF230000',182=>'SF470000',183=>'SF480000',
+184=>'SF410000',185=>'SF450000',186=>'SF460000',187=>'SF400000',188=>'SF540000',189=>'SF530000',190=>'SF440000',191=>'copyright',
+192=>'afii10096',193=>'afii10065',194=>'afii10066',195=>'afii10088',196=>'afii10069',197=>'afii10070',198=>'afii10086',199=>'afii10068',
+200=>'afii10087',201=>'afii10074',202=>'afii10075',203=>'afii10076',204=>'afii10077',205=>'afii10078',206=>'afii10079',207=>'afii10080',
+208=>'afii10081',209=>'afii10097',210=>'afii10082',211=>'afii10083',212=>'afii10084',213=>'afii10085',214=>'afii10072',215=>'afii10067',
+216=>'afii10094',217=>'afii10093',218=>'afii10073',219=>'afii10090',220=>'afii10095',221=>'afii10091',222=>'afii10089',223=>'afii10092',
+224=>'afii10048',225=>'afii10017',226=>'afii10018',227=>'afii10040',228=>'afii10021',229=>'afii10022',230=>'afii10038',231=>'afii10020',
+232=>'afii10039',233=>'afii10026',234=>'afii10027',235=>'afii10028',236=>'afii10029',237=>'afii10030',238=>'afii10031',239=>'afii10032',
+240=>'afii10033',241=>'afii10049',242=>'afii10034',243=>'afii10035',244=>'afii10036',245=>'afii10037',246=>'afii10024',247=>'afii10019',
+248=>'afii10046',249=>'afii10045',250=>'afii10025',251=>'afii10042',252=>'afii10047',253=>'afii10043',254=>'afii10041',255=>'afii10044'),
+
+// encoding map for: iso-8859-16
+'iso-8859-16' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',
+40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',
+72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',
+80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',
+88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',
+96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',
+104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',
+112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',
+120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',
+128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',
+136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',
+144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',
+152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',
+160=>'space',161=>'Aogonek',162=>'aogonek',163=>'Lslash',164=>'Euro',165=>'quotedblbase',166=>'Scaron',167=>'section',
+168=>'scaron',169=>'copyright',170=>'Scommaaccent',171=>'guillemotleft',172=>'Zacute',173=>'hyphen',174=>'zacute',175=>'Zdotaccent',
+176=>'degree',177=>'plusminus',178=>'Ccaron',179=>'lslash',180=>'Zcaron',181=>'quotedblright',182=>'paragraph',183=>'periodcentered',
+184=>'zcaron',185=>'ccaron',186=>'scommaaccent',187=>'guillemotright',188=>'OE',189=>'oe',190=>'Ydieresis',191=>'zdotaccent',
+192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Abreve',196=>'Adieresis',197=>'Cacute',198=>'AE',199=>'Ccedilla',
+200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',
+208=>'Dcroat',209=>'Nacute',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Ohungarumlaut',214=>'Odieresis',215=>'Sacute',
+216=>'Uhungarumlaut',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Eogonek',222=>'Tcommaaccent',223=>'germandbls',
+224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'abreve',228=>'adieresis',229=>'cacute',230=>'ae',231=>'ccedilla',
+232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',
+240=>'dcroat',241=>'nacute',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'ohungarumlaut',246=>'odieresis',247=>'sacute',
+248=>'uhungarumlaut',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'eogonek',254=>'tcommaaccent',255=>'ydieresis'),
+
+// encoding map for: koi8-u
+'koi8-u' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',
+40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',
+72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',
+80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',
+88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',
+96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',
+104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',
+112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',
+120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',
+128=>'SF100000',129=>'SF110000',130=>'SF010000',131=>'SF030000',132=>'SF020000',133=>'SF040000',134=>'SF080000',135=>'SF090000',
+136=>'SF060000',137=>'SF070000',138=>'SF050000',139=>'upblock',140=>'dnblock',141=>'block',142=>'lfblock',143=>'rtblock',
+144=>'ltshade',145=>'shade',146=>'dkshade',147=>'integraltp',148=>'filledbox',149=>'bullet',150=>'radical',151=>'approxequal',
+152=>'lessequal',153=>'greaterequal',154=>'space',155=>'integralbt',156=>'degree',157=>'twosuperior',158=>'periodcentered',159=>'divide',
+160=>'SF430000',161=>'SF240000',162=>'SF510000',163=>'afii10071',164=>'afii10101',165=>'SF390000',166=>'afii10103',167=>'afii10104',
+168=>'SF250000',169=>'SF500000',170=>'SF490000',171=>'SF380000',172=>'SF280000',173=>'afii10098',174=>'SF260000',175=>'SF360000',
+176=>'SF370000',177=>'SF420000',178=>'SF190000',179=>'afii10023',180=>'afii10053',181=>'SF230000',182=>'afii10055',183=>'afii10056',
+184=>'SF410000',185=>'SF450000',186=>'SF460000',187=>'SF400000',188=>'SF540000',189=>'afii10050',190=>'SF440000',191=>'copyright',
+192=>'afii10096',193=>'afii10065',194=>'afii10066',195=>'afii10088',196=>'afii10069',197=>'afii10070',198=>'afii10086',199=>'afii10068',
+200=>'afii10087',201=>'afii10074',202=>'afii10075',203=>'afii10076',204=>'afii10077',205=>'afii10078',206=>'afii10079',207=>'afii10080',
+208=>'afii10081',209=>'afii10097',210=>'afii10082',211=>'afii10083',212=>'afii10084',213=>'afii10085',214=>'afii10072',215=>'afii10067',
+216=>'afii10094',217=>'afii10093',218=>'afii10073',219=>'afii10090',220=>'afii10095',221=>'afii10091',222=>'afii10089',223=>'afii10092',
+224=>'afii10048',225=>'afii10017',226=>'afii10018',227=>'afii10040',228=>'afii10021',229=>'afii10022',230=>'afii10038',231=>'afii10020',
+232=>'afii10039',233=>'afii10026',234=>'afii10027',235=>'afii10028',236=>'afii10029',237=>'afii10030',238=>'afii10031',239=>'afii10032',
+240=>'afii10033',241=>'afii10049',242=>'afii10034',243=>'afii10035',244=>'afii10036',245=>'afii10037',246=>'afii10024',247=>'afii10019',
+248=>'afii10046',249=>'afii10045',250=>'afii10025',251=>'afii10042',252=>'afii10047',253=>'afii10043',254=>'afii10041',255=>'afii10044'),
+
+// encoding map for: symbol
+'symbol' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',
+8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',
+16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',
+24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',
+32=>'space',33=>'exclam',34=>'universal',35=>'numbersign',36=>'existential',37=>'percent',38=>'ampersand',39=>'suchthat',
+40=>'parenleft',41=>'parenright',42=>'asteriskmath',43=>'plus',44=>'comma',45=>'minus',46=>'period',47=>'slash',
+48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',
+56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',
+64=>'congruent',65=>'Alpha',66=>'Beta',67=>'Chi',68=>'Delta',69=>'Epsilon',70=>'Phi',71=>'Gamma',
+72=>'Eta',73=>'Iota',74=>'theta1',75=>'Kappa',76=>'Lambda',77=>'Mu',78=>'Nu',79=>'Omicron',
+80=>'Pi',81=>'Theta',82=>'Rho',83=>'Sigma',84=>'Tau',85=>'Upsilon',86=>'sigma1',87=>'Omega',
+88=>'Xi',89=>'Psi',90=>'Zeta',91=>'bracketleft',92=>'therefore',93=>'bracketright',94=>'perpendicular',95=>'underscore',
+96=>'radicalex',97=>'alpha',98=>'beta',99=>'chi',100=>'delta',101=>'epsilon',102=>'phi',103=>'gamma',
+104=>'eta',105=>'iota',106=>'phi1',107=>'kappa',108=>'lambda',109=>'mu',110=>'nu',111=>'omicron',
+112=>'pi',113=>'theta',114=>'rho',115=>'sigma',116=>'tau',117=>'upsilon',118=>'omega1',119=>'omega',
+120=>'xi',121=>'psi',122=>'zeta',123=>'braceleft',124=>'bar',125=>'braceright',126=>'similar',127=>'.notdef',
+128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',
+136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',
+144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',
+152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',
+160=>'Euro',161=>'Upsilon1',162=>'minute',163=>'lessequal',164=>'fraction',165=>'infinity',166=>'florin',167=>'club',
+168=>'diamond',169=>'heart',170=>'spade',171=>'arrowboth',172=>'arrowleft',173=>'arrowup',174=>'arrowright',175=>'arrowdown',
+176=>'degree',177=>'plusminus',178=>'second',179=>'greaterequal',180=>'multiply',181=>'proportional',182=>'partialdiff',183=>'bullet',
+184=>'divide',185=>'notequal',186=>'equivalence',187=>'approxequal',188=>'ellipsis',189=>'arrowvertex',190=>'arrowhorizex',191=>'carriagereturn',
+192=>'aleph',193=>'Ifraktur',194=>'Rfraktur',195=>'weierstrass',196=>'circlemultiply',197=>'circleplus',198=>'emptyset',199=>'intersection',
+200=>'union',201=>'propersuperset',202=>'reflexsuperset',203=>'notsubset',204=>'propersubset',205=>'reflexsubset',206=>'element',207=>'notelement',
+208=>'angle',209=>'gradient',210=>'registerserif',211=>'copyrightserif',212=>'trademarkserif',213=>'product',214=>'radical',215=>'dotmath',
+216=>'logicalnot',217=>'logicaland',218=>'logicalor',219=>'arrowdblboth',220=>'arrowdblleft',221=>'arrowdblup',222=>'arrowdblright',223=>'arrowdbldown',
+224=>'lozenge',225=>'angleleft',226=>'registersans',227=>'copyrightsans',228=>'trademarksans',229=>'summation',230=>'parenlefttp',231=>'parenleftex',
+232=>'parenleftbt',233=>'bracketlefttp',234=>'bracketleftex',235=>'bracketleftbt',236=>'bracelefttp',237=>'braceleftmid',238=>'braceleftbt',239=>'braceex',
+240=>'.notdef',241=>'angleright',242=>'integral',243=>'integraltp',244=>'integralex',245=>'integralbt',246=>'parenrighttp',247=>'parenrightex',
+248=>'parenrightbt',249=>'bracketrighttp',250=>'bracketrightex',251=>'bracketrightbt',252=>'bracerighttp',253=>'bracerightmid',254=>'bracerightbt',255=>'.notdef',
+1226=>'registered',1227=>'copyright',1228=>'trademark')
+
+); // end of encoding maps
+
+} // --- END OF CLASS ---
+
+//============================================================+
+// END OF FILE
+//============================================================+
diff --git a/lib/tcpdf/fonts/arialunicid0.php b/lib/tcpdf/fonts/arialunicid0.php
new file mode 100644
index 00000000000..ee1dbb2d9d7
--- /dev/null
+++ b/lib/tcpdf/fonts/arialunicid0.php
@@ -0,0 +1,1769 @@
+1069,'Descent'=>-271,'CapHeight'=>1069,'Flags'=>32,'FontBBox'=>'[-1011 -330 2260 1078]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600);
+$up=-100;
+$ut=50;
+$dw=1000;
+$cw=array(
+ 32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,
+ 48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,62=>584,63=>556,
+ 64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,
+ 80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,92=>278,93=>278,94=>469,95=>500,
+ 96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556,
+ 112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,8364=>556,
+ 1027=>567,8218=>222,402=>278,8222=>333,8230=>1000,8224=>556,8225=>556,710=>333,8240=>1000,352=>667,8249=>333,338=>1000,1036=>584,381=>611,1039=>723,8216=>222,
+ 8217=>222,8220=>333,8221=>333,8226=>350,8211=>500,8212=>1000,732=>333,8482=>1000,353=>500,8250=>333,339=>944,1116=>437,382=>500,376=>667,160=>278,161=>333,
+ 162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>500,176=>400,177=>584,
+ 178=>333,179=>333,180=>333,181=>556,182=>537,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,190=>834,191=>611,192=>667,193=>667,
+ 194=>667,195=>667,196=>667,197=>667,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,
+ 210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,
+ 226=>556,227=>556,228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>556,241=>556,
+ 242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500,256=>667,257=>556,
+ 258=>667,259=>556,260=>667,261=>556,262=>722,263=>500,264=>722,265=>500,266=>722,267=>500,268=>722,269=>500,270=>722,271=>627,272=>722,273=>556,
+ 274=>667,275=>556,276=>667,277=>556,278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>556,286=>778,287=>556,288=>778,289=>556,
+ 290=>778,291=>556,292=>722,293=>556,294=>722,295=>556,296=>278,297=>222,298=>278,299=>222,300=>278,301=>222,302=>278,303=>222,304=>278,305=>278,
+ 306=>751,307=>444,308=>500,309=>222,310=>667,311=>500,312=>437,313=>556,314=>222,315=>556,316=>222,317=>556,318=>222,319=>556,320=>318,321=>556,
+ 322=>222,323=>722,324=>556,325=>722,326=>556,327=>722,328=>556,329=>626,330=>723,331=>556,332=>778,333=>556,334=>778,335=>556,336=>778,337=>556,
+ 340=>722,341=>333,342=>722,343=>333,344=>722,345=>333,346=>667,347=>500,348=>667,349=>500,350=>667,351=>500,354=>611,355=>278,356=>611,357=>406,
+ 358=>611,359=>278,360=>722,361=>556,362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556,372=>944,373=>722,
+ 374=>667,375=>500,377=>611,378=>500,379=>611,380=>500,383=>222,384=>556,385=>740,386=>655,387=>556,388=>556,389=>556,390=>722,391=>766,392=>579,
+ 393=>722,394=>789,395=>655,396=>556,397=>557,398=>667,399=>729,400=>604,401=>611,403=>791,404=>649,405=>806,406=>245,407=>322,408=>667,409=>500,
+ 410=>322,411=>500,412=>833,413=>722,414=>556,415=>778,416=>776,417=>556,418=>1019,419=>782,420=>735,421=>556,422=>722,423=>667,424=>500,425=>602,
+ 426=>366,427=>278,428=>571,429=>278,430=>611,431=>776,432=>620,433=>748,434=>667,435=>752,436=>615,437=>611,438=>500,439=>628,440=>628,441=>526,
+ 442=>480,443=>556,444=>556,445=>526,446=>556,447=>556,448=>278,449=>464,450=>474,451=>278,452=>1333,453=>1222,454=>1056,455=>1030,456=>778,457=>444,
+ 458=>1222,459=>944,460=>778,461=>667,462=>556,463=>278,464=>278,465=>778,466=>556,467=>722,468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,
+ 474=>556,475=>722,476=>556,477=>556,478=>667,479=>556,480=>667,481=>556,482=>1000,483=>889,484=>778,485=>556,486=>778,487=>556,488=>667,489=>500,
+ 490=>778,491=>556,492=>778,493=>556,494=>534,495=>534,496=>222,497=>1333,498=>1222,499=>1056,500=>778,501=>556,506=>667,507=>556,508=>1000,509=>889,
+ 510=>778,511=>611,512=>667,513=>556,514=>667,515=>556,516=>667,517=>556,518=>667,519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>556,
+ 526=>778,527=>556,528=>722,529=>333,530=>722,531=>333,532=>722,533=>556,534=>722,535=>556,592=>556,593=>556,594=>556,595=>556,596=>500,597=>500,
+ 598=>556,599=>556,600=>556,601=>556,602=>777,603=>485,604=>485,605=>686,606=>519,607=>260,608=>556,609=>556,610=>557,611=>500,612=>500,613=>556,
+ 614=>556,615=>556,616=>242,617=>282,618=>356,619=>356,620=>425,621=>222,622=>635,623=>833,624=>833,625=>833,626=>556,627=>556,628=>558,629=>556,
+ 630=>715,631=>674,632=>558,633=>333,634=>333,635=>333,636=>333,637=>333,638=>312,639=>312,640=>530,641=>530,642=>500,643=>216,644=>276,645=>216,
+ 646=>222,647=>278,648=>278,649=>596,650=>558,651=>556,652=>500,653=>722,654=>500,655=>500,656=>500,657=>564,658=>530,659=>530,660=>464,661=>464,
+ 662=>464,663=>500,664=>614,665=>526,666=>519,667=>557,668=>558,669=>222,670=>500,671=>416,672=>556,673=>464,674=>464,675=>966,676=>966,677=>1030,
+ 678=>689,679=>484,680=>718,688=>326,689=>326,690=>153,691=>201,692=>201,693=>201,694=>304,695=>389,696=>278,697=>222,698=>372,699=>222,700=>222,
+ 701=>222,702=>222,703=>222,704=>250,705=>250,706=>320,707=>320,708=>320,709=>320,711=>333,712=>192,713=>333,714=>333,715=>333,716=>192,717=>333,
+ 718=>333,719=>333,720=>300,721=>300,722=>222,723=>222,724=>340,725=>340,726=>280,727=>362,728=>333,729=>333,730=>333,731=>333,733=>333,734=>333,
+ 736=>278,737=>153,738=>270,739=>274,740=>325,741=>360,742=>360,743=>360,744=>360,745=>360,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,
+ 774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,
+ 790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,
+ 806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,
+ 822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,
+ 864=>0,865=>0,884=>308,885=>308,890=>278,894=>278,900=>278,901=>278,902=>667,903=>278,904=>704,905=>759,906=>315,908=>778,910=>746,911=>758,
+ 912=>222,913=>667,914=>667,915=>550,916=>682,917=>667,918=>611,919=>722,920=>778,921=>278,922=>667,923=>667,924=>833,925=>722,926=>650,927=>778,
+ 928=>722,929=>667,931=>602,932=>611,933=>667,934=>808,935=>667,936=>804,937=>758,938=>278,939=>667,940=>576,941=>434,942=>556,943=>222,944=>551,
+ 945=>576,946=>563,947=>500,948=>557,949=>434,950=>440,951=>556,952=>556,953=>222,954=>498,955=>500,956=>553,957=>500,958=>432,959=>556,960=>678,
+ 961=>571,962=>472,963=>619,964=>382,965=>551,966=>649,967=>522,968=>729,969=>766,970=>222,971=>551,972=>556,973=>551,974=>766,976=>563,977=>616,
+ 978=>631,979=>726,980=>631,981=>644,982=>781,986=>722,988=>578,990=>570,992=>692,994=>880,995=>833,996=>684,997=>558,998=>680,999=>529,1000=>557,
+ 1001=>505,1002=>623,1003=>603,1004=>610,1005=>611,1006=>568,1007=>434,1008=>600,1009=>571,1010=>500,1011=>222,1025=>667,1026=>865,1028=>717,1029=>667,1030=>278,
+ 1031=>278,1032=>500,1033=>1105,1034=>1009,1035=>867,1038=>635,1040=>667,1041=>655,1042=>667,1043=>567,1044=>677,1045=>667,1046=>923,1047=>604,1048=>722,1049=>722,
+ 1050=>584,1051=>705,1052=>833,1053=>722,1054=>778,1055=>723,1056=>667,1057=>722,1058=>611,1059=>635,1060=>760,1061=>667,1062=>740,1063=>684,1064=>920,1065=>939,
+ 1066=>793,1067=>883,1068=>655,1069=>717,1070=>1006,1071=>722,1072=>556,1073=>573,1074=>531,1075=>383,1076=>583,1077=>556,1078=>669,1079=>458,1080=>559,1081=>559,
+ 1082=>437,1083=>571,1084=>683,1085=>552,1086=>556,1087=>542,1088=>556,1089=>500,1090=>458,1091=>500,1092=>823,1093=>500,1094=>562,1095=>533,1096=>802,1097=>823,
+ 1098=>620,1099=>717,1100=>523,1101=>510,1102=>744,1103=>542,1105=>556,1106=>556,1107=>383,1108=>510,1109=>500,1110=>222,1111=>278,1112=>222,1113=>873,1114=>811,
+ 1115=>556,1118=>500,1119=>542,1120=>976,1121=>766,1122=>656,1123=>521,1124=>950,1125=>694,1126=>667,1127=>597,1128=>952,1129=>817,1130=>654,1131=>600,1132=>932,
+ 1133=>817,1134=>604,1135=>458,1136=>804,1137=>729,1138=>778,1139=>556,1140=>667,1141=>500,1142=>667,1143=>500,1144=>1279,1145=>1060,1146=>778,1147=>556,1148=>976,
+ 1149=>766,1150=>976,1151=>766,1152=>722,1153=>514,1154=>686,1155=>334,1156=>382,1157=>334,1158=>334,1168=>435,1169=>339,1170=>567,1171=>383,1172=>656,1173=>556,
+ 1174=>923,1175=>669,1176=>604,1177=>458,1178=>584,1179=>437,1180=>584,1181=>437,1182=>584,1183=>437,1184=>764,1185=>537,1186=>741,1187=>573,1188=>900,1189=>670,
+ 1190=>736,1191=>560,1192=>778,1193=>560,1194=>722,1195=>500,1196=>611,1197=>458,1198=>667,1199=>500,1200=>667,1201=>500,1202=>667,1203=>500,1204=>916,1205=>661,
+ 1206=>684,1207=>533,1208=>684,1209=>533,1210=>684,1211=>556,1212=>829,1213=>667,1214=>829,1215=>667,1216=>278,1217=>923,1218=>669,1219=>584,1220=>437,1223=>735,
+ 1224=>570,1227=>684,1228=>533,1232=>667,1233=>556,1234=>667,1235=>556,1236=>1000,1237=>889,1238=>667,1239=>556,1240=>729,1241=>556,1242=>729,1243=>556,1244=>923,
+ 1245=>669,1246=>604,1247=>458,1248=>604,1249=>492,1250=>722,1251=>559,1252=>722,1253=>559,1254=>778,1255=>556,1256=>778,1257=>556,1258=>778,1259=>556,1262=>635,
+ 1263=>500,1264=>635,1265=>500,1266=>635,1267=>500,1268=>684,1269=>533,1272=>883,1273=>717,1329=>635,1330=>531,1331=>583,1332=>583,1333=>531,1334=>531,1335=>427,
+ 1336=>531,1337=>750,1338=>635,1339=>531,1340=>375,1341=>583,1342=>698,1343=>531,1344=>427,1345=>531,1346=>583,1347=>531,1348=>635,1349=>698,1350=>635,1351=>635,
+ 1352=>531,1353=>531,1354=>698,1355=>531,1356=>635,1357=>531,1358=>698,1359=>583,1360=>479,1361=>583,1362=>531,1363=>698,1364=>698,1365=>635,1366=>750,1369=>271,
+ 1370=>271,1371=>150,1372=>300,1373=>271,1374=>271,1375=>420,1377=>583,1378=>427,1379=>427,1380=>427,1381=>427,1382=>427,1383=>427,1384=>427,1385=>459,1386=>427,
+ 1387=>427,1388=>323,1389=>531,1390=>427,1391=>427,1392=>427,1393=>427,1394=>427,1395=>427,1396=>427,1397=>271,1398=>427,1399=>375,1400=>427,1401=>375,1402=>583,
+ 1403=>427,1404=>427,1405=>427,1406=>427,1407=>583,1408=>427,1409=>427,1410=>323,1411=>583,1412=>375,1413=>375,1414=>583,1415=>527,1417=>271,1425=>360,1426=>360,
+ 1427=>360,1428=>360,1429=>360,1430=>360,1431=>360,1432=>360,1433=>360,1434=>360,1435=>360,1436=>360,1437=>360,1438=>360,1439=>360,1440=>360,1441=>360,1443=>360,
+ 1444=>360,1445=>360,1446=>360,1447=>360,1448=>360,1449=>360,1450=>360,1451=>360,1452=>360,1453=>360,1454=>360,1455=>360,1456=>360,1457=>360,1458=>360,1459=>360,
+ 1460=>360,1461=>360,1462=>360,1463=>360,1464=>360,1465=>360,1467=>360,1468=>360,1469=>360,1470=>366,1471=>360,1472=>225,1473=>360,1474=>360,1475=>238,1476=>360,
+ 1488=>577,1489=>563,1490=>411,1491=>512,1492=>594,1493=>316,1494=>326,1495=>594,1496=>594,1497=>316,1498=>507,1499=>527,1500=>484,1501=>594,1502=>594,1503=>316,
+ 1504=>338,1505=>604,1506=>550,1507=>567,1508=>569,1509=>505,1510=>514,1511=>583,1512=>507,1513=>700,1514=>633,1520=>590,1521=>590,1522=>590,1523=>216,1524=>412,
+ 1548=>278,1563=>278,1567=>556,1569=>529,1570=>243,1571=>243,1572=>470,1573=>243,1574=>731,1575=>243,1576=>771,1577=>514,1578=>771,1579=>771,1580=>544,1581=>544,
+ 1582=>544,1583=>430,1584=>430,1585=>421,1586=>421,1587=>1194,1588=>1194,1589=>1291,1590=>1291,1591=>843,1592=>843,1593=>594,1594=>594,1600=>279,1601=>957,1602=>800,
+ 1603=>757,1604=>662,1605=>589,1606=>692,1607=>514,1608=>470,1609=>731,1610=>731,1611=>0,1612=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,
+ 1632=>480,1633=>480,1634=>480,1635=>480,1636=>480,1637=>480,1638=>480,1639=>480,1640=>480,1641=>480,1642=>547,1643=>278,1644=>278,1645=>438,1648=>0,1649=>243,
+ 1650=>243,1651=>243,1652=>0,1653=>380,1654=>470,1655=>548,1656=>772,1657=>771,1658=>771,1659=>771,1660=>771,1661=>771,1662=>771,1663=>771,1664=>771,1665=>544,
+ 1666=>544,1667=>544,1668=>544,1669=>544,1670=>544,1671=>544,1672=>430,1673=>430,1674=>430,1675=>430,1676=>430,1677=>430,1678=>430,1679=>430,1680=>430,1681=>421,
+ 1682=>421,1683=>421,1684=>421,1685=>421,1686=>419,1687=>421,1688=>421,1689=>421,1690=>1194,1691=>1194,1692=>1194,1693=>1291,1694=>1291,1695=>843,1696=>594,1697=>957,
+ 1698=>957,1699=>957,1700=>957,1701=>957,1702=>957,1703=>800,1704=>800,1705=>828,1706=>1058,1707=>828,1708=>757,1709=>757,1710=>757,1711=>828,1712=>828,1713=>828,
+ 1714=>828,1715=>828,1716=>828,1717=>662,1718=>662,1719=>662,1722=>692,1723=>692,1724=>692,1725=>692,1726=>706,1728=>514,1729=>509,1730=>509,1731=>509,1732=>470,
+ 1733=>470,1734=>470,1735=>470,1736=>470,1737=>470,1738=>470,1739=>470,1740=>731,1741=>841,1742=>731,1744=>731,1745=>731,1746=>550,1747=>550,1748=>279,1749=>514,
+ 1750=>726,1751=>558,1752=>321,1753=>318,1754=>342,1755=>373,1756=>716,1757=>688,1758=>852,1759=>288,1760=>288,1761=>388,1762=>350,1763=>716,1764=>146,1765=>282,
+ 1766=>339,1767=>339,1768=>415,1769=>514,1770=>220,1771=>220,1772=>220,1773=>350,1776=>480,1777=>480,1778=>480,1779=>480,1780=>480,1781=>480,1782=>480,1783=>480,
+ 1784=>480,1785=>480,2305=>0,2306=>0,2307=>294,2309=>693,2310=>910,2311=>533,2312=>533,2313=>590,2314=>713,2315=>920,2316=>677,2317=>611,2318=>611,2319=>611,
+ 2320=>611,2321=>910,2322=>910,2323=>910,2324=>910,2325=>667,2326=>732,2327=>593,2328=>639,2329=>624,2330=>688,2331=>713,2332=>688,2333=>712,2334=>697,2335=>502,
+ 2336=>533,2337=>583,2338=>523,2339=>693,2340=>585,2341=>638,2342=>533,2343=>640,2344=>585,2345=>585,2346=>565,2347=>699,2348=>592,2349=>689,2350=>633,2351=>600,
+ 2352=>486,2353=>486,2354=>680,2355=>730,2356=>730,2357=>592,2358=>684,2359=>608,2360=>646,2361=>546,2364=>0,2365=>373,2366=>319,2367=>319,2368=>319,2369=>0,
+ 2370=>0,2371=>0,2372=>0,2373=>0,2374=>0,2375=>0,2376=>0,2377=>319,2378=>319,2379=>319,2380=>319,2381=>0,2384=>884,2385=>0,2386=>0,2387=>0,
+ 2388=>0,2392=>667,2393=>732,2394=>593,2395=>688,2396=>583,2397=>523,2398=>699,2399=>600,2400=>920,2401=>677,2402=>0,2403=>0,2404=>331,2405=>513,2406=>639,
+ 2407=>639,2408=>639,2409=>639,2410=>639,2411=>639,2412=>639,2413=>639,2414=>639,2415=>639,2416=>362,2433=>0,2434=>430,2435=>430,2437=>786,2438=>1030,2439=>582,
+ 2440=>603,2441=>648,2442=>757,2443=>758,2444=>630,2447=>685,2448=>746,2451=>711,2452=>776,2453=>779,2454=>655,2455=>606,2456=>645,2457=>661,2458=>554,2459=>585,
+ 2460=>729,2461=>752,2462=>893,2463=>567,2464=>625,2465=>648,2466=>567,2467=>598,2468=>680,2469=>645,2470=>609,2471=>596,2472=>595,2474=>635,2475=>780,2476=>593,
+ 2477=>677,2478=>621,2479=>601,2480=>593,2482=>640,2486=>598,2487=>596,2488=>637,2489=>582,2492=>0,2494=>245,2495=>245,2496=>245,2497=>0,2498=>0,2499=>0,
+ 2500=>0,2503=>309,2504=>309,2507=>932,2508=>932,2509=>0,2519=>245,2524=>648,2525=>553,2527=>596,2528=>758,2529=>630,2530=>0,2531=>335,2534=>610,2535=>559,
+ 2536=>595,2537=>711,2538=>610,2539=>661,2540=>661,2541=>559,2542=>661,2543=>600,2544=>593,2545=>593,2546=>601,2547=>567,2548=>601,2549=>699,2550=>661,2551=>267,
+ 2552=>610,2553=>424,2554=>548,2562=>0,2565=>691,2566=>936,2567=>803,2568=>803,2569=>678,2570=>678,2575=>557,2576=>691,2579=>678,2580=>691,2581=>602,2582=>567,
+ 2583=>641,2584=>688,2585=>565,2586=>592,2587=>603,2588=>591,2589=>541,2590=>558,2591=>543,2592=>581,2593=>596,2594=>640,2595=>640,2596=>591,2597=>564,2598=>640,
+ 2599=>564,2600=>581,2602=>564,2603=>551,2604=>560,2605=>549,2606=>558,2607=>652,2608=>540,2610=>677,2611=>677,2613=>601,2614=>558,2616=>558,2617=>549,2620=>0,
+ 2622=>246,2623=>246,2624=>246,2625=>0,2626=>0,2631=>0,2632=>0,2635=>0,2636=>0,2637=>0,2649=>567,2650=>690,2651=>591,2652=>591,2654=>581,2662=>591,
+ 2663=>591,2664=>591,2665=>591,2666=>591,2667=>591,2668=>591,2669=>591,2670=>591,2671=>591,2672=>0,2673=>0,2674=>557,2675=>678,2676=>894,2689=>0,2690=>0,
+ 2691=>300,2693=>781,2694=>1044,2695=>589,2696=>589,2697=>560,2698=>758,2699=>806,2701=>781,2703=>781,2704=>781,2705=>1044,2707=>1044,2708=>1044,2709=>413,2710=>773,
+ 2711=>606,2712=>558,2713=>483,2714=>600,2715=>691,2716=>811,2717=>647,2718=>651,2719=>453,2720=>450,2721=>425,2722=>478,2723=>694,2724=>534,2725=>553,2726=>446,
+ 2727=>541,2728=>582,2730=>572,2731=>437,2732=>663,2733=>756,2734=>594,2735=>493,2736=>392,2738=>613,2739=>656,2741=>538,2742=>611,2743=>507,2744=>663,2745=>587,
+ 2748=>0,2749=>478,2750=>273,2751=>273,2752=>273,2753=>0,2754=>0,2755=>0,2756=>0,2757=>0,2759=>0,2760=>0,2761=>273,2763=>273,2764=>273,2765=>0,
+ 2768=>843,2784=>893,2790=>625,2791=>625,2792=>625,2793=>625,2794=>625,2795=>625,2796=>625,2797=>625,2798=>625,2799=>625,2817=>0,2818=>306,2819=>391,2821=>590,
+ 2822=>808,2823=>658,2824=>658,2825=>633,2826=>654,2827=>636,2828=>540,2831=>560,2832=>938,2835=>600,2836=>973,2837=>603,2838=>620,2839=>620,2840=>605,2841=>712,
+ 2842=>579,2843=>579,2844=>593,2845=>564,2846=>581,2847=>604,2848=>578,2849=>579,2850=>579,2851=>607,2852=>579,2853=>587,2854=>579,2855=>602,2856=>579,2858=>605,
+ 2859=>728,2860=>579,2861=>643,2862=>605,2863=>628,2864=>619,2866=>653,2867=>593,2870=>620,2871=>605,2872=>605,2873=>579,2876=>0,2877=>333,2878=>218,2879=>0,
+ 2880=>294,2881=>0,2882=>0,2883=>0,2887=>479,2888=>479,2891=>1026,2892=>1026,2893=>0,2902=>0,2903=>218,2908=>579,2909=>579,2911=>599,2912=>636,2913=>540,
+ 2918=>578,2919=>480,2920=>480,2921=>622,2922=>506,2923=>605,2924=>529,2925=>548,2926=>512,2927=>528,2928=>561,2946=>0,2947=>742,2949=>1002,2950=>1118,2951=>994,
+ 2952=>660,2953=>1012,2954=>1231,2958=>726,2959=>731,2960=>870,2962=>763,2963=>763,2964=>1636,2965=>667,2969=>830,2970=>584,2972=>876,2974=>986,2975=>802,2979=>1295,
+ 2980=>656,2984=>630,2985=>1012,2986=>694,2990=>727,2991=>790,2992=>545,2993=>718,2994=>821,2995=>871,2996=>724,2997=>873,2999=>1087,3000=>1098,3001=>1274,3006=>547,
+ 3007=>172,3008=>93,3009=>519,3010=>814,3014=>748,3015=>681,3016=>956,3018=>1666,3019=>1666,3020=>1994,3021=>0,3031=>871,3047=>667,3048=>1012,3049=>751,3050=>740,
+ 3051=>924,3052=>884,3053=>726,3054=>1002,3055=>825,3056=>717,3057=>719,3058=>774,3073=>365,3074=>601,3075=>346,3077=>720,3078=>786,3079=>567,3080=>1159,3081=>690,
+ 3082=>1047,3083=>1299,3084=>913,3086=>625,3087=>625,3088=>712,3090=>655,3091=>655,3092=>862,3093=>515,3094=>680,3095=>526,3096=>943,3097=>655,3098=>684,3099=>684,
+ 3100=>670,3101=>1205,3102=>732,3103=>888,3104=>597,3105=>709,3106=>709,3107=>809,3108=>715,3109=>702,3110=>702,3111=>702,3112=>607,3114=>623,3115=>623,3116=>681,
+ 3117=>681,3118=>932,3119=>1203,3120=>597,3121=>893,3122=>631,3123=>608,3125=>620,3126=>541,3127=>667,3128=>640,3129=>911,3134=>644,3135=>298,3136=>298,3137=>361,
+ 3138=>682,3139=>342,3140=>704,3142=>624,3143=>624,3144=>900,3146=>849,3147=>849,3148=>976,3149=>669,3157=>298,3158=>119,3168=>1620,3169=>1281,3174=>840,3175=>840,
+ 3176=>840,3177=>840,3178=>840,3179=>840,3180=>840,3181=>840,3182=>840,3183=>840,3202=>440,3203=>251,3205=>654,3206=>654,3207=>631,3208=>891,3209=>957,3210=>1293,
+ 3211=>1044,3212=>744,3214=>650,3215=>650,3216=>659,3218=>667,3219=>667,3220=>667,3221=>462,3222=>749,3223=>543,3224=>779,3225=>674,3226=>682,3227=>660,3228=>667,
+ 3229=>1171,3230=>926,3231=>671,3232=>557,3233=>669,3234=>669,3235=>728,3236=>544,3237=>672,3238=>672,3239=>672,3240=>560,3242=>668,3243=>668,3244=>681,3245=>687,
+ 3246=>972,3247=>1101,3248=>556,3249=>677,3250=>661,3251=>545,3253=>666,3254=>553,3255=>670,3256=>549,3257=>716,3262=>425,3263=>341,3264=>680,3265=>354,3266=>714,
+ 3267=>386,3268=>638,3270=>307,3271=>670,3272=>462,3274=>908,3275=>1251,3276=>434,3277=>336,3285=>344,3286=>404,3294=>673,3296=>1695,3297=>978,3302=>549,3303=>549,
+ 3304=>549,3305=>549,3306=>549,3307=>549,3308=>549,3309=>549,3310=>549,3311=>549,3330=>368,3331=>305,3333=>1201,3334=>1351,3335=>905,3336=>1459,3337=>635,3338=>1198,
+ 3339=>861,3340=>957,3342=>1211,3343=>1202,3344=>1839,3346=>642,3347=>1114,3348=>1195,3349=>861,3350=>982,3351=>874,3352=>1354,3353=>957,3354=>1016,3355=>1266,3356=>712,
+ 3357=>1454,3358=>1215,3359=>563,3360=>565,3361=>1192,3362=>1244,3363=>1268,3364=>878,3365=>966,3366=>545,3367=>879,3368=>879,3370=>1031,3371=>1175,3372=>1334,3373=>546,
+ 3374=>643,3375=>949,3376=>642,3377=>555,3378=>945,3379=>631,3380=>553,3381=>959,3382=>936,3383=>1122,3384=>1190,3385=>1112,3390=>475,3391=>418,3392=>442,3393=>340,
+ 3394=>340,3395=>473,3398=>640,3399=>530,3400=>1279,3402=>1368,3403=>1258,3404=>1447,3405=>0,3415=>553,3424=>861,3425=>1100,3430=>1095,3431=>929,3432=>854,3433=>1181,
+ 3434=>658,3435=>972,3436=>1210,3437=>650,3438=>959,3439=>896,3585=>595,3586=>648,3587=>665,3588=>608,3589=>608,3590=>665,3591=>471,3592=>556,3593=>652,3594=>664,
+ 3595=>681,3596=>816,3597=>849,3598=>620,3599=>620,3600=>541,3601=>785,3602=>826,3603=>887,3604=>598,3605=>605,3606=>595,3607=>650,3608=>541,3609=>652,3610=>608,
+ 3611=>608,3612=>630,3613=>630,3614=>695,3615=>695,3616=>620,3617=>581,3618=>588,3619=>501,3620=>595,3621=>569,3622=>620,3623=>519,3624=>592,3625=>659,3626=>574,
+ 3627=>654,3628=>695,3629=>566,3630=>574,3631=>517,3632=>452,3633=>0,3634=>496,3635=>496,3636=>0,3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0,
+ 3647=>687,3648=>302,3649=>571,3650=>478,3651=>515,3652=>515,3653=>496,3654=>506,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,3660=>0,3661=>0,3662=>0,
+ 3663=>555,3664=>598,3665=>640,3666=>688,3667=>690,3668=>657,3669=>657,3670=>635,3671=>839,3672=>693,3673=>769,3674=>673,3675=>994,3713=>775,3714=>707,3716=>724,
+ 3719=>524,3720=>690,3722=>678,3725=>711,3732=>719,3733=>834,3734=>776,3735=>916,3737=>744,3738=>740,3739=>740,3740=>834,3741=>834,3742=>854,3743=>854,3745=>775,
+ 3746=>724,3747=>697,3749=>700,3751=>700,3754=>708,3755=>916,3757=>700,3758=>697,3759=>658,3760=>432,3761=>534,3762=>476,3763=>476,3764=>778,3765=>778,3766=>778,
+ 3767=>778,3768=>778,3769=>778,3771=>778,3772=>778,3773=>670,3776=>420,3777=>806,3778=>430,3779=>446,3780=>346,3782=>571,3784=>778,3785=>778,3786=>778,3787=>778,
+ 3788=>778,3789=>778,3792=>721,3793=>719,3794=>601,3795=>711,3796=>686,3797=>686,3798=>834,3799=>756,3800=>724,3801=>906,3804=>1272,3805=>1272,3840=>600,3841=>600,
+ 3842=>600,3843=>600,3844=>600,3845=>600,3846=>600,3847=>600,3848=>600,3849=>600,3850=>600,3851=>600,3852=>600,3853=>600,3854=>600,3855=>600,3856=>600,3857=>600,
+ 3858=>600,3859=>600,3860=>600,3861=>600,3862=>600,3863=>600,3864=>600,3865=>600,3866=>600,3867=>600,3868=>600,3869=>600,3870=>600,3871=>600,3872=>600,3873=>600,
+ 3874=>600,3875=>600,3876=>600,3877=>600,3878=>600,3879=>600,3880=>600,3881=>600,3882=>600,3883=>600,3884=>600,3885=>600,3886=>600,3887=>600,3888=>600,3889=>600,
+ 3890=>600,3891=>600,3892=>600,3893=>600,3894=>600,3895=>600,3896=>600,3897=>600,3898=>600,3899=>600,3900=>600,3901=>600,3902=>600,3903=>600,3904=>600,3905=>600,
+ 3906=>600,3907=>600,3908=>600,3909=>600,3910=>600,3911=>600,3913=>600,3914=>600,3915=>600,3916=>600,3917=>600,3918=>600,3919=>600,3920=>600,3921=>600,3922=>600,
+ 3923=>600,3924=>600,3925=>600,3926=>600,3927=>600,3928=>600,3929=>600,3930=>600,3931=>600,3932=>600,3933=>600,3934=>600,3935=>600,3936=>600,3937=>600,3938=>600,
+ 3939=>600,3940=>600,3941=>600,3942=>600,3943=>600,3944=>600,3945=>600,3953=>600,3954=>600,3955=>600,3956=>600,3957=>600,3958=>600,3959=>600,3960=>600,3961=>600,
+ 3962=>600,3963=>600,3964=>600,3965=>600,3966=>600,3967=>600,3968=>600,3969=>600,3970=>600,3971=>600,3972=>600,3973=>600,3974=>600,3975=>600,3976=>600,3977=>600,
+ 3978=>600,3979=>600,3984=>600,3985=>600,3986=>600,3987=>600,3988=>600,3989=>600,3991=>600,3993=>600,3994=>600,3995=>600,3996=>600,3997=>600,3998=>600,3999=>600,
+ 4000=>600,4001=>600,4002=>600,4003=>600,4004=>600,4005=>600,4006=>600,4007=>600,4008=>600,4009=>600,4010=>600,4011=>600,4012=>600,4013=>600,4017=>600,4018=>600,
+ 4019=>600,4020=>600,4021=>600,4022=>600,4023=>600,4025=>600,4256=>662,4257=>677,4258=>708,4259=>696,4260=>609,4261=>790,4262=>664,4263=>785,4264=>560,4265=>634,
+ 4266=>782,4267=>701,4268=>629,4269=>682,4270=>705,4271=>692,4272=>734,4273=>615,4274=>592,4275=>680,4276=>679,4277=>705,4278=>643,4279=>623,4280=>623,4281=>629,
+ 4282=>633,4283=>770,4284=>592,4285=>662,4286=>629,4287=>672,4288=>735,4289=>576,4290=>606,4291=>605,4292=>676,4293=>792,4304=>435,4305=>556,4306=>565,4307=>872,
+ 4308=>506,4309=>544,4310=>723,4311=>868,4312=>530,4313=>532,4314=>955,4315=>552,4316=>565,4317=>712,4318=>547,4319=>574,4320=>685,4321=>554,4322=>806,4323=>810,
+ 4324=>777,4325=>502,4326=>686,4327=>512,4328=>552,4329=>496,4330=>568,4331=>552,4332=>592,4333=>565,4334=>552,4335=>741,4336=>549,4337=>659,4338=>559,4339=>524,
+ 4340=>482,4341=>565,4342=>822,4347=>506,4352=>1000,4353=>1000,4354=>1000,4355=>1000,4356=>1000,4357=>1000,4358=>1000,4359=>1000,4360=>1000,4361=>1000,4362=>1000,4363=>1000,
+ 4364=>1000,4365=>1000,4366=>1000,4367=>1000,4368=>1000,4369=>1000,4370=>1000,4371=>1000,4372=>1000,4373=>1000,4374=>1000,4375=>1000,4376=>1000,4377=>1000,4378=>1000,4379=>1000,
+ 4380=>1000,4381=>1000,4382=>1000,4383=>1000,4384=>1000,4385=>1000,4386=>1000,4387=>1000,4388=>1000,4389=>1000,4390=>1000,4391=>1000,4392=>1000,4393=>1000,4394=>1000,4395=>1000,
+ 4396=>1000,4397=>1000,4398=>1000,4399=>1000,4400=>1000,4401=>1000,4402=>1000,4403=>1000,4404=>1000,4405=>1000,4406=>1000,4407=>1000,4408=>1000,4409=>1000,4410=>1000,4411=>1000,
+ 4412=>1000,4413=>1000,4414=>1000,4415=>1000,4416=>1000,4417=>1000,4418=>1000,4419=>1000,4420=>1000,4421=>1000,4422=>1000,4423=>1000,4424=>1000,4425=>1000,4426=>1000,4427=>1000,
+ 4428=>1000,4429=>1000,4430=>1000,4431=>1000,4432=>1000,4433=>1000,4434=>1000,4435=>1000,4436=>1000,4437=>1000,4438=>1000,4439=>1000,4440=>1000,4441=>1000,4447=>1000,4448=>1000,
+ 4449=>1000,4450=>1000,4451=>1000,4452=>1000,4453=>1000,4454=>1000,4455=>1000,4456=>1000,4457=>1000,4458=>1000,4459=>1000,4460=>1000,4461=>1000,4462=>1000,4463=>1000,4464=>1000,
+ 4465=>1000,4466=>1000,4467=>1000,4468=>1000,4469=>1000,4470=>1000,4471=>1000,4472=>1000,4473=>1000,4474=>1000,4475=>1000,4476=>1000,4477=>1000,4478=>1000,4479=>1000,4480=>1000,
+ 4481=>1000,4482=>1000,4483=>1000,4484=>1000,4485=>1000,4486=>1000,4487=>1000,4488=>1000,4489=>1000,4490=>1000,4491=>1000,4492=>1000,4493=>1000,4494=>1000,4495=>1000,4496=>1000,
+ 4497=>1000,4498=>1000,4499=>1000,4500=>1000,4501=>1000,4502=>1000,4503=>1000,4504=>1000,4505=>1000,4506=>1000,4507=>1000,4508=>1000,4509=>1000,4510=>1000,4511=>1000,4512=>1000,
+ 4513=>1000,4514=>1000,4520=>1000,4521=>1000,4522=>1000,4523=>1000,4524=>1000,4525=>1000,4526=>1000,4527=>1000,4528=>1000,4529=>1000,4530=>1000,4531=>1000,4532=>1000,4533=>1000,
+ 4534=>1000,4535=>1000,4536=>1000,4537=>1000,4538=>1000,4539=>1000,4540=>1000,4541=>1000,4542=>1000,4543=>1000,4544=>1000,4545=>1000,4546=>1000,4547=>1000,4548=>1000,4549=>1000,
+ 4550=>1000,4551=>1000,4552=>1000,4553=>1000,4554=>1000,4555=>1000,4556=>1000,4557=>1000,4558=>1000,4559=>1000,4560=>1000,4561=>1000,4562=>1000,4563=>1000,4564=>1000,4565=>1000,
+ 4566=>1000,4567=>1000,4568=>1000,4569=>1000,4570=>1000,4571=>1000,4572=>1000,4573=>1000,4574=>1000,4575=>1000,4576=>1000,4577=>1000,4578=>1000,4579=>1000,4580=>1000,4581=>1000,
+ 4582=>1000,4583=>1000,4584=>1000,4585=>1000,4586=>1000,4587=>1000,4588=>1000,4589=>1000,4590=>1000,4591=>1000,4592=>1000,4593=>1000,4594=>1000,4595=>1000,4596=>1000,4597=>1000,
+ 4598=>1000,4599=>1000,4600=>1000,4601=>1000,7680=>667,7681=>556,7682=>667,7683=>556,7684=>667,7685=>556,7686=>667,7687=>556,7688=>722,7689=>500,7690=>722,7691=>556,
+ 7692=>722,7693=>556,7694=>722,7695=>556,7696=>722,7697=>556,7698=>722,7699=>556,7700=>667,7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,7707=>556,
+ 7708=>667,7709=>556,7710=>611,7711=>278,7712=>778,7713=>556,7714=>722,7715=>556,7716=>722,7717=>556,7718=>722,7719=>556,7720=>722,7721=>556,7722=>722,7723=>556,
+ 7724=>278,7725=>222,7726=>278,7727=>278,7728=>667,7729=>500,7730=>667,7731=>500,7732=>667,7733=>500,7734=>556,7735=>222,7736=>556,7737=>222,7738=>556,7739=>222,
+ 7740=>556,7741=>222,7742=>833,7743=>833,7744=>833,7745=>833,7746=>833,7747=>833,7748=>722,7749=>556,7750=>722,7751=>556,7752=>722,7753=>556,7754=>722,7755=>556,
+ 7756=>778,7757=>556,7758=>778,7759=>556,7760=>778,7761=>556,7762=>778,7763=>556,7764=>667,7765=>556,7766=>667,7767=>556,7768=>722,7769=>333,7770=>722,7771=>333,
+ 7772=>722,7773=>333,7774=>722,7775=>333,7776=>667,7777=>500,7778=>667,7779=>500,7780=>667,7781=>500,7782=>667,7783=>500,7784=>667,7785=>500,7786=>611,7787=>278,
+ 7788=>611,7789=>278,7790=>611,7791=>278,7792=>611,7793=>278,7794=>722,7795=>556,7796=>722,7797=>556,7798=>722,7799=>556,7800=>722,7801=>556,7802=>722,7803=>556,
+ 7804=>667,7805=>500,7806=>667,7807=>500,7808=>944,7809=>722,7810=>944,7811=>722,7812=>944,7813=>722,7814=>944,7815=>722,7816=>944,7817=>722,7818=>667,7819=>500,
+ 7820=>667,7821=>500,7822=>667,7823=>500,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,7830=>556,7831=>278,7832=>722,7833=>500,7834=>556,7835=>278,
+ 7840=>667,7841=>556,7842=>667,7843=>556,7844=>667,7845=>556,7846=>667,7847=>556,7848=>667,7849=>556,7850=>667,7851=>556,7852=>667,7853=>556,7854=>667,7855=>556,
+ 7856=>667,7857=>556,7858=>667,7859=>556,7860=>667,7861=>556,7862=>667,7863=>556,7864=>667,7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,7871=>556,
+ 7872=>667,7873=>556,7874=>667,7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,7881=>278,7882=>278,7883=>222,7884=>778,7885=>556,7886=>778,7887=>556,
+ 7888=>778,7889=>556,7890=>778,7891=>556,7892=>778,7893=>556,7894=>778,7895=>556,7896=>778,7897=>556,7898=>776,7899=>556,7900=>776,7901=>556,7902=>776,7903=>556,
+ 7904=>776,7905=>556,7906=>776,7907=>556,7908=>722,7909=>556,7910=>722,7911=>556,7912=>776,7913=>620,7914=>776,7915=>620,7916=>776,7917=>620,7918=>776,7919=>620,
+ 7920=>776,7921=>620,7922=>667,7923=>500,7924=>667,7925=>500,7926=>667,7927=>500,7928=>667,7929=>500,7936=>576,7937=>576,7938=>576,7939=>576,7940=>576,7941=>576,
+ 7942=>576,7943=>576,7944=>667,7945=>667,7946=>680,7947=>680,7948=>680,7949=>680,7950=>718,7951=>718,7952=>434,7953=>434,7954=>434,7955=>434,7956=>434,7957=>434,
+ 7960=>692,7961=>692,7962=>823,7963=>823,7964=>823,7965=>823,7968=>556,7969=>556,7970=>556,7971=>556,7972=>556,7973=>556,7974=>556,7975=>556,7976=>747,7977=>747,
+ 7978=>878,7979=>878,7980=>878,7981=>878,7982=>923,7983=>923,7984=>222,7985=>222,7986=>222,7987=>222,7988=>222,7989=>222,7990=>222,7991=>222,7992=>303,7993=>303,
+ 7994=>434,7995=>434,7996=>434,7997=>434,7998=>479,7999=>479,8000=>556,8001=>556,8002=>556,8003=>556,8004=>556,8005=>556,8008=>778,8009=>778,8010=>894,8011=>894,
+ 8012=>894,8013=>894,8016=>551,8017=>551,8018=>551,8019=>551,8020=>551,8021=>551,8022=>551,8023=>551,8025=>777,8027=>893,8029=>885,8031=>940,8032=>766,8033=>766,
+ 8034=>766,8035=>766,8036=>766,8037=>766,8038=>766,8039=>766,8040=>758,8041=>758,8042=>874,8043=>874,8044=>868,8045=>867,8046=>911,8047=>911,8048=>576,8049=>576,
+ 8050=>434,8051=>434,8052=>556,8053=>556,8054=>222,8055=>222,8056=>556,8057=>556,8058=>551,8059=>551,8060=>766,8061=>766,8064=>576,8065=>576,8066=>576,8067=>576,
+ 8068=>576,8069=>576,8070=>576,8071=>576,8072=>667,8073=>667,8074=>680,8075=>680,8076=>680,8077=>680,8078=>718,8079=>718,8080=>556,8081=>556,8082=>556,8083=>556,
+ 8084=>556,8085=>556,8086=>556,8087=>556,8088=>747,8089=>747,8090=>878,8091=>878,8092=>878,8093=>878,8094=>923,8095=>923,8096=>766,8097=>766,8098=>766,8099=>766,
+ 8100=>766,8101=>766,8102=>766,8103=>766,8104=>758,8105=>758,8106=>874,8107=>874,8108=>868,8109=>867,8110=>911,8111=>911,8112=>576,8113=>576,8114=>576,8115=>576,
+ 8116=>576,8118=>576,8119=>576,8120=>667,8121=>667,8122=>667,8123=>667,8124=>667,8125=>278,8126=>278,8127=>278,8128=>278,8129=>278,8130=>556,8131=>556,8132=>556,
+ 8134=>556,8135=>556,8136=>693,8137=>704,8138=>748,8139=>759,8140=>722,8141=>278,8142=>278,8143=>278,8144=>222,8145=>222,8146=>222,8147=>222,8150=>222,8151=>222,
+ 8152=>278,8153=>278,8154=>304,8155=>304,8157=>278,8158=>278,8159=>278,8160=>551,8161=>551,8162=>551,8163=>551,8164=>571,8165=>571,8166=>551,8167=>551,8168=>667,
+ 8169=>667,8170=>742,8171=>746,8172=>693,8173=>278,8174=>278,8175=>278,8178=>766,8179=>766,8180=>766,8182=>766,8183=>766,8184=>778,8185=>778,8186=>758,8187=>758,
+ 8188=>758,8189=>278,8190=>278,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>100,8202=>50,8203=>0,8204=>0,
+ 8205=>0,8208=>333,8209=>333,8210=>556,8213=>564,8214=>428,8215=>500,8219=>222,8223=>333,8227=>350,8228=>278,8229=>556,8231=>278,8232=>0,8233=>0,8241=>1330,
+ 8242=>222,8243=>372,8244=>522,8245=>206,8246=>356,8247=>506,8248=>312,8251=>1000,8252=>471,8253=>556,8254=>500,8255=>945,8256=>945,8257=>312,8258=>820,8259=>333,
+ 8260=>167,8261=>278,8262=>278,8304=>333,8308=>333,8309=>333,8310=>333,8311=>333,8312=>333,8313=>333,8314=>333,8315=>333,8316=>333,8317=>210,8318=>210,8319=>333,
+ 8320=>333,8321=>333,8322=>333,8323=>333,8324=>333,8325=>333,8326=>333,8327=>333,8328=>333,8329=>333,8330=>333,8331=>333,8332=>333,8333=>210,8334=>210,8352=>556,
+ 8353=>556,8354=>556,8355=>556,8356=>556,8357=>833,8358=>556,8359=>556,8360=>1024,8361=>940,8362=>784,8363=>556,8400=>600,8401=>600,8402=>600,8403=>600,8404=>700,
+ 8405=>700,8406=>600,8407=>600,8408=>600,8409=>600,8410=>600,8411=>600,8412=>600,8413=>900,8414=>900,8415=>900,8416=>900,8417=>700,8448=>889,8449=>889,8450=>667,
+ 8451=>1022,8452=>611,8453=>889,8454=>889,8455=>501,8456=>667,8457=>921,8458=>510,8459=>906,8460=>988,8461=>722,8462=>500,8463=>500,8464=>688,8465=>553,8466=>708,
+ 8467=>291,8468=>778,8469=>722,8470=>1073,8471=>737,8472=>740,8473=>556,8474=>722,8475=>927,8476=>795,8477=>667,8478=>667,8479=>667,8480=>1000,8481=>1174,8483=>722,
+ 8484=>611,8485=>542,8486=>768,8487=>768,8488=>698,8489=>321,8490=>667,8491=>667,8492=>927,8493=>646,8494=>556,8495=>385,8496=>615,8497=>688,8498=>611,8499=>1115,
+ 8500=>406,8501=>688,8502=>688,8503=>344,8504=>688,8531=>834,8532=>834,8533=>834,8534=>834,8535=>834,8536=>834,8537=>834,8538=>834,8539=>834,8540=>834,8541=>834,
+ 8542=>834,8543=>834,8544=>278,8545=>555,8546=>832,8547=>933,8548=>667,8549=>934,8550=>1031,8551=>1268,8552=>944,8553=>667,8554=>944,8555=>1035,8556=>556,8557=>722,
+ 8558=>722,8559=>833,8560=>222,8561=>444,8562=>666,8563=>700,8564=>500,8565=>700,8566=>922,8567=>1144,8568=>712,8569=>500,8570=>712,8571=>934,8572=>222,8573=>500,
+ 8574=>556,8575=>833,8576=>983,8577=>722,8578=>983,8592=>713,8593=>713,8594=>713,8595=>713,8596=>713,8597=>713,8598=>713,8599=>713,8600=>713,8601=>713,8602=>713,
+ 8603=>713,8604=>713,8605=>713,8606=>713,8607=>713,8608=>713,8609=>713,8610=>713,8611=>713,8612=>713,8613=>713,8614=>713,8615=>713,8616=>713,8617=>713,8618=>713,
+ 8619=>713,8620=>713,8621=>813,8622=>813,8623=>713,8624=>713,8625=>713,8626=>713,8627=>713,8628=>713,8629=>713,8630=>713,8631=>713,8632=>713,8633=>713,8634=>800,
+ 8635=>800,8636=>713,8637=>713,8638=>713,8639=>713,8640=>713,8641=>713,8642=>713,8643=>713,8644=>713,8645=>713,8646=>713,8647=>713,8648=>713,8649=>713,8650=>713,
+ 8651=>713,8652=>713,8653=>713,8654=>950,8655=>713,8656=>713,8657=>713,8658=>713,8659=>713,8660=>863,8661=>713,8662=>713,8663=>713,8664=>713,8665=>713,8666=>713,
+ 8667=>713,8668=>813,8669=>813,8670=>713,8671=>713,8672=>713,8673=>713,8674=>713,8675=>713,8676=>713,8677=>713,8678=>713,8679=>713,8680=>713,8681=>713,8682=>713,
+ 8704=>600,8705=>600,8706=>494,8707=>600,8708=>600,8709=>800,8710=>612,8711=>612,8712=>549,8713=>549,8714=>549,8715=>549,8716=>549,8717=>549,8718=>549,8719=>823,
+ 8720=>823,8721=>713,8722=>584,8723=>584,8724=>584,8725=>167,8726=>278,8727=>389,8728=>400,8729=>400,8730=>600,8731=>600,8732=>600,8733=>549,8734=>549,8735=>584,
+ 8736=>584,8737=>584,8738=>584,8739=>260,8740=>444,8741=>418,8742=>602,8743=>561,8744=>561,8745=>561,8746=>561,8747=>506,8748=>806,8749=>1106,8750=>506,8751=>806,
+ 8752=>1106,8753=>506,8754=>506,8755=>506,8756=>561,8757=>561,8758=>422,8759=>561,8760=>584,8761=>584,8762=>584,8763=>584,8764=>584,8765=>584,8766=>584,8767=>584,
+ 8768=>422,8769=>584,8770=>584,8771=>584,8772=>584,8773=>584,8774=>584,8775=>584,8776=>584,8777=>584,8778=>584,8779=>584,8780=>584,8781=>584,8782=>584,8783=>584,
+ 8784=>584,8785=>584,8786=>584,8787=>584,8788=>737,8789=>737,8790=>584,8791=>584,8792=>584,8793=>584,8794=>584,8795=>584,8796=>584,8797=>584,8798=>584,8799=>584,
+ 8800=>584,8801=>584,8802=>584,8803=>584,8804=>584,8805=>584,8806=>584,8807=>584,8808=>584,8809=>584,8810=>969,8811=>969,8812=>584,8813=>584,8814=>584,8815=>584,
+ 8816=>584,8817=>584,8818=>584,8819=>584,8820=>584,8821=>584,8822=>584,8823=>584,8824=>584,8825=>584,8826=>584,8827=>584,8828=>584,8829=>584,8830=>584,8831=>584,
+ 8832=>584,8833=>584,8834=>678,8835=>678,8836=>678,8837=>678,8838=>678,8839=>678,8840=>678,8841=>678,8842=>678,8843=>678,8844=>561,8845=>561,8846=>561,8847=>678,
+ 8848=>678,8849=>673,8850=>673,8851=>561,8852=>561,8853=>800,8854=>800,8855=>800,8856=>800,8857=>800,8858=>800,8859=>800,8860=>800,8861=>800,8862=>800,8863=>800,
+ 8864=>800,8865=>800,8866=>549,8867=>549,8868=>549,8869=>549,8870=>399,8871=>399,8872=>549,8873=>549,8874=>549,8875=>672,8876=>549,8877=>549,8878=>549,8879=>672,
+ 8880=>549,8881=>549,8882=>549,8883=>549,8884=>549,8885=>549,8886=>713,8887=>713,8888=>713,8889=>549,8890=>549,8891=>584,8892=>584,8893=>584,8894=>584,8895=>584,
+ 8896=>561,8897=>561,8898=>561,8899=>561,8900=>549,8901=>250,8902=>549,8903=>649,8904=>630,8905=>630,8906=>630,8907=>630,8908=>630,8909=>584,8910=>561,8911=>561,
+ 8912=>668,8913=>668,8914=>668,8915=>668,8916=>561,8917=>602,8918=>584,8919=>584,8920=>1354,8921=>1354,8922=>584,8923=>584,8924=>584,8925=>584,8926=>584,8927=>584,
+ 8928=>584,8929=>584,8930=>673,8931=>673,8932=>673,8933=>673,8934=>584,8935=>584,8936=>584,8937=>584,8938=>584,8939=>584,8940=>584,8941=>584,8942=>278,8943=>1000,
+ 8944=>1000,8945=>1000,8960=>549,8962=>549,8963=>549,8964=>549,8965=>549,8966=>549,8967=>549,8968=>449,8969=>449,8970=>449,8971=>449,8972=>549,8973=>549,8974=>549,
+ 8975=>549,8976=>549,8977=>549,8978=>800,8979=>800,8980=>549,8981=>549,8982=>549,8983=>650,8984=>780,8985=>549,8986=>549,8987=>549,8988=>549,8989=>549,8990=>549,
+ 8991=>549,8992=>506,8993=>506,8994=>713,8995=>713,8996=>1000,8997=>1000,8998=>1000,8999=>1000,9000=>1000,9001=>329,9002=>329,9003=>1000,9004=>549,9005=>549,9006=>549,
+ 9007=>549,9008=>549,9009=>549,9010=>549,9011=>549,9012=>549,9013=>549,9014=>600,9015=>600,9016=>600,9017=>600,9018=>600,9019=>600,9020=>600,9021=>600,9022=>600,
+ 9023=>600,9024=>600,9025=>600,9026=>600,9027=>600,9028=>600,9029=>600,9030=>600,9031=>600,9032=>600,9033=>600,9034=>600,9035=>600,9036=>600,9037=>600,9038=>600,
+ 9039=>600,9040=>600,9041=>600,9042=>600,9043=>600,9044=>600,9045=>600,9046=>600,9047=>600,9048=>600,9049=>600,9050=>600,9051=>600,9052=>600,9053=>600,9054=>600,
+ 9055=>600,9056=>600,9057=>600,9058=>600,9059=>600,9060=>600,9061=>600,9062=>600,9063=>600,9064=>600,9065=>600,9066=>600,9067=>600,9068=>600,9069=>600,9070=>600,
+ 9071=>600,9072=>600,9073=>600,9074=>600,9075=>600,9076=>600,9077=>600,9078=>600,9079=>600,9080=>600,9081=>600,9082=>600,9109=>600,9216=>600,9217=>600,9218=>600,
+ 9219=>600,9220=>600,9221=>600,9222=>600,9223=>600,9224=>600,9225=>600,9226=>600,9227=>600,9228=>600,9229=>600,9230=>600,9231=>600,9232=>600,9233=>600,9234=>600,
+ 9235=>600,9236=>600,9237=>600,9238=>600,9239=>600,9240=>600,9241=>600,9242=>600,9243=>600,9244=>600,9245=>600,9246=>600,9247=>600,9248=>600,9249=>600,9250=>600,
+ 9251=>600,9252=>600,9280=>604,9281=>604,9282=>604,9283=>604,9284=>604,9285=>604,9286=>750,9287=>750,9288=>750,9289=>750,9290=>604,9312=>1000,9313=>1000,9314=>1000,
+ 9315=>1000,9316=>1000,9317=>1000,9318=>1000,9319=>1000,9320=>1000,9321=>1000,9322=>1000,9323=>1000,9324=>1000,9325=>1000,9326=>1000,9327=>1000,9328=>1000,9329=>1000,9330=>1000,
+ 9331=>1000,9332=>1000,9333=>1000,9334=>1000,9335=>1000,9336=>1000,9337=>1000,9338=>1000,9339=>1000,9340=>1000,9341=>1000,9342=>1000,9343=>1000,9344=>1000,9345=>1000,9346=>1000,
+ 9347=>1000,9348=>1000,9349=>1000,9350=>1000,9351=>1000,9352=>1000,9353=>1000,9354=>1000,9355=>1000,9356=>1000,9357=>1000,9358=>1000,9359=>1000,9360=>1000,9361=>1000,9362=>1000,
+ 9363=>1000,9364=>1000,9365=>1000,9366=>1000,9367=>1000,9368=>1000,9369=>1000,9370=>1000,9371=>1000,9372=>1000,9373=>1000,9374=>1000,9375=>1000,9376=>1000,9377=>1000,9378=>1000,
+ 9379=>1000,9380=>1000,9381=>1000,9382=>1000,9383=>1000,9384=>1000,9385=>1000,9386=>1000,9387=>1000,9388=>1000,9389=>1000,9390=>1000,9391=>1000,9392=>1000,9393=>1000,9394=>1000,
+ 9395=>1000,9396=>1000,9397=>1000,9398=>1000,9399=>1000,9400=>1000,9401=>1000,9402=>1000,9403=>1000,9404=>1000,9405=>1000,9406=>1000,9407=>1000,9408=>1000,9409=>1000,9410=>1000,
+ 9411=>1000,9412=>1000,9413=>1000,9414=>1000,9415=>1000,9416=>1000,9417=>1000,9418=>1000,9419=>1000,9420=>1000,9421=>1000,9422=>1000,9423=>1000,9424=>1000,9425=>1000,9426=>1000,
+ 9427=>1000,9428=>1000,9429=>1000,9430=>1000,9431=>1000,9432=>1000,9433=>1000,9434=>1000,9435=>1000,9436=>1000,9437=>1000,9438=>1000,9439=>1000,9440=>1000,9441=>1000,9442=>1000,
+ 9443=>1000,9444=>1000,9445=>1000,9446=>1000,9447=>1000,9448=>1000,9449=>1000,9450=>1000,9472=>600,9473=>600,9474=>600,9475=>600,9476=>600,9477=>600,9478=>600,9479=>600,
+ 9480=>600,9481=>600,9482=>600,9483=>600,9484=>600,9485=>600,9486=>600,9487=>600,9488=>600,9489=>600,9490=>600,9491=>600,9492=>600,9493=>600,9494=>600,9495=>600,
+ 9496=>600,9497=>600,9498=>600,9499=>600,9500=>600,9501=>600,9502=>600,9503=>600,9504=>600,9505=>600,9506=>600,9507=>600,9508=>600,9509=>600,9510=>600,9511=>600,
+ 9512=>600,9513=>600,9514=>600,9515=>600,9516=>600,9517=>600,9518=>600,9519=>600,9520=>600,9521=>600,9522=>600,9523=>600,9524=>600,9525=>600,9526=>600,9527=>600,
+ 9528=>600,9529=>600,9530=>600,9531=>600,9532=>600,9533=>600,9534=>600,9535=>600,9536=>600,9537=>600,9538=>600,9539=>600,9540=>600,9541=>600,9542=>600,9543=>600,
+ 9544=>600,9545=>600,9546=>600,9547=>600,9548=>600,9549=>600,9550=>600,9551=>600,9552=>600,9553=>600,9554=>600,9555=>600,9556=>600,9557=>600,9558=>600,9559=>600,
+ 9560=>600,9561=>600,9562=>600,9563=>600,9564=>600,9565=>600,9566=>600,9567=>600,9568=>600,9569=>600,9570=>600,9571=>600,9572=>600,9573=>600,9574=>600,9575=>600,
+ 9576=>600,9577=>600,9578=>600,9579=>600,9580=>600,9581=>600,9582=>600,9583=>600,9584=>600,9585=>600,9586=>600,9587=>600,9588=>600,9589=>600,9590=>600,9591=>600,
+ 9592=>600,9593=>600,9594=>600,9595=>600,9596=>600,9597=>600,9598=>600,9599=>600,9600=>600,9601=>600,9602=>600,9603=>600,9604=>600,9605=>600,9606=>600,9607=>600,
+ 9608=>600,9609=>600,9610=>600,9611=>600,9612=>600,9613=>600,9614=>600,9615=>600,9616=>600,9617=>600,9618=>600,9619=>600,9620=>600,9621=>600,9632=>600,9633=>600,
+ 9634=>600,9635=>600,9636=>600,9637=>600,9638=>600,9639=>600,9640=>600,9641=>600,9642=>600,9643=>600,9644=>600,9645=>600,9646=>600,9647=>600,9648=>600,9649=>600,
+ 9650=>600,9651=>600,9652=>600,9653=>600,9654=>600,9655=>600,9656=>600,9657=>600,9658=>600,9659=>600,9660=>600,9661=>600,9662=>600,9663=>600,9664=>600,9665=>600,
+ 9666=>600,9667=>600,9668=>600,9669=>600,9670=>600,9671=>600,9672=>600,9673=>600,9674=>600,9675=>600,9676=>600,9677=>600,9678=>600,9679=>600,9680=>600,9681=>600,
+ 9682=>600,9683=>600,9684=>600,9685=>600,9686=>600,9687=>600,9688=>600,9689=>600,9690=>600,9691=>600,9692=>600,9693=>600,9694=>600,9695=>600,9696=>600,9697=>600,
+ 9698=>600,9699=>600,9700=>600,9701=>600,9702=>600,9703=>600,9704=>600,9705=>600,9706=>600,9707=>600,9708=>600,9709=>600,9710=>600,9711=>600,9728=>750,9729=>1000,
+ 9730=>750,9731=>750,9732=>1000,9733=>816,9734=>823,9735=>500,9736=>500,9737=>800,9738=>800,9739=>800,9740=>800,9741=>800,9742=>719,9743=>719,9744=>734,9745=>734,
+ 9746=>734,9747=>762,9754=>960,9755=>960,9756=>939,9757=>939,9758=>939,9759=>939,9760=>750,9761=>600,9762=>750,9763=>750,9764=>580,9765=>460,9766=>444,9767=>650,
+ 9768=>444,9769=>768,9770=>800,9771=>850,9772=>675,9773=>800,9774=>750,9775=>750,9776=>900,9777=>900,9778=>900,9779=>900,9780=>900,9781=>900,9782=>900,9783=>900,
+ 9784=>750,9785=>750,9786=>750,9787=>750,9788=>750,9789=>750,9790=>750,9791=>740,9792=>740,9793=>740,9794=>740,9795=>653,9796=>490,9797=>632,9798=>780,9799=>560,
+ 9800=>838,9801=>780,9802=>734,9803=>887,9804=>780,9805=>1080,9806=>896,9807=>1080,9808=>804,9809=>868,9810=>922,9811=>696,9812=>1000,9813=>1000,9814=>1000,9815=>1000,
+ 9816=>1000,9817=>1000,9818=>1000,9819=>1000,9820=>1000,9821=>1000,9822=>1000,9823=>1000,9824=>722,9825=>734,9826=>674,9827=>804,9828=>722,9829=>734,9830=>674,9831=>804,
+ 9832=>860,9833=>423,9834=>592,9835=>750,9836=>750,9837=>439,9838=>439,9839=>439,9985=>974,9986=>961,9987=>974,9988=>980,9990=>789,9991=>790,9992=>791,9993=>690,
+ 9996=>549,9997=>855,9998=>911,9999=>933,10000=>911,10001=>945,10002=>974,10003=>755,10004=>846,10005=>762,10006=>761,10007=>571,10008=>677,10009=>763,10010=>760,10011=>759,
+ 10012=>754,10013=>494,10014=>552,10015=>537,10016=>577,10017=>692,10018=>786,10019=>788,10020=>788,10021=>790,10022=>793,10023=>794,10025=>823,10026=>789,10027=>841,10028=>823,
+ 10029=>833,10030=>816,10031=>831,10032=>923,10033=>744,10034=>723,10035=>749,10036=>790,10037=>792,10038=>695,10039=>776,10040=>768,10041=>792,10042=>759,10043=>707,10044=>708,
+ 10045=>682,10046=>701,10047=>826,10048=>815,10049=>789,10050=>789,10051=>707,10052=>687,10053=>696,10054=>689,10055=>786,10056=>787,10057=>713,10058=>791,10059=>785,10061=>873,
+ 10063=>762,10064=>762,10065=>759,10066=>759,10070=>784,10072=>138,10073=>277,10074=>415,10075=>392,10076=>392,10077=>668,10078=>668,10081=>732,10082=>544,10083=>544,10084=>910,
+ 10085=>667,10086=>760,10087=>760,10102=>788,10103=>788,10104=>788,10105=>788,10106=>788,10107=>788,10108=>788,10109=>788,10110=>788,10111=>788,10112=>788,10113=>788,10114=>788,
+ 10115=>788,10116=>788,10117=>788,10118=>788,10119=>788,10120=>788,10121=>788,10122=>788,10123=>788,10124=>788,10125=>788,10126=>788,10127=>788,10128=>788,10129=>788,10130=>788,
+ 10131=>788,10132=>894,10136=>748,10137=>924,10138=>748,10139=>918,10140=>927,10141=>928,10142=>928,10143=>834,10144=>873,10145=>828,10146=>924,10147=>924,10148=>917,10149=>930,
+ 10150=>931,10151=>463,10152=>883,10153=>836,10154=>836,10155=>867,10156=>867,10157=>696,10158=>696,10159=>874,10161=>874,10162=>760,10163=>946,10164=>771,10165=>865,10166=>771,
+ 10167=>888,10168=>967,10169=>888,10170=>831,10171=>873,10172=>927,10173=>970,10174=>918,12288=>1000,12289=>1000,12290=>1000,12291=>1000,12292=>1000,12293=>1000,12294=>1000,12295=>1000,
+ 12296=>1000,12297=>1000,12298=>1000,12299=>1000,12300=>1000,12301=>1000,12302=>1000,12303=>1000,12304=>1000,12305=>1000,12306=>1000,12307=>1000,12308=>1000,12309=>1000,12310=>1000,12311=>1000,
+ 12312=>1000,12313=>1000,12314=>1000,12315=>1000,12316=>1000,12317=>1000,12318=>1000,12319=>1000,12320=>1000,12321=>1000,12322=>1000,12323=>1000,12324=>1000,12325=>1000,12326=>1000,12327=>1000,
+ 12328=>1000,12329=>1000,12330=>1000,12331=>1000,12332=>1000,12333=>1000,12334=>1000,12335=>1000,12336=>1000,12337=>1000,12338=>1000,12339=>1000,12340=>1000,12341=>1000,12342=>1000,12343=>1000,
+ 12351=>1000,12353=>1000,12354=>1000,12355=>1000,12356=>1000,12357=>1000,12358=>1000,12359=>1000,12360=>1000,12361=>1000,12362=>1000,12363=>1000,12364=>1000,12365=>1000,12366=>1000,12367=>1000,
+ 12368=>1000,12369=>1000,12370=>1000,12371=>1000,12372=>1000,12373=>1000,12374=>1000,12375=>1000,12376=>1000,12377=>1000,12378=>1000,12379=>1000,12380=>1000,12381=>1000,12382=>1000,12383=>1000,
+ 12384=>1000,12385=>1000,12386=>1000,12387=>1000,12388=>1000,12389=>1000,12390=>1000,12391=>1000,12392=>1000,12393=>1000,12394=>1000,12395=>1000,12396=>1000,12397=>1000,12398=>1000,12399=>1000,
+ 12400=>1000,12401=>1000,12402=>1000,12403=>1000,12404=>1000,12405=>1000,12406=>1000,12407=>1000,12408=>1000,12409=>1000,12410=>1000,12411=>1000,12412=>1000,12413=>1000,12414=>1000,12415=>1000,
+ 12416=>1000,12417=>1000,12418=>1000,12419=>1000,12420=>1000,12421=>1000,12422=>1000,12423=>1000,12424=>1000,12425=>1000,12426=>1000,12427=>1000,12428=>1000,12429=>1000,12430=>1000,12431=>1000,
+ 12432=>1000,12433=>1000,12434=>1000,12435=>1000,12436=>1000,12441=>1000,12442=>1000,12443=>1000,12444=>1000,12445=>1000,12446=>1000,12449=>1000,12450=>1000,12451=>1000,12452=>1000,12453=>1000,
+ 12454=>1000,12455=>1000,12456=>1000,12457=>1000,12458=>1000,12459=>1000,12460=>1000,12461=>1000,12462=>1000,12463=>1000,12464=>1000,12465=>1000,12466=>1000,12467=>1000,12468=>1000,12469=>1000,
+ 12470=>1000,12471=>1000,12472=>1000,12473=>1000,12474=>1000,12475=>1000,12476=>1000,12477=>1000,12478=>1000,12479=>1000,12480=>1000,12481=>1000,12482=>1000,12483=>1000,12484=>1000,12485=>1000,
+ 12486=>1000,12487=>1000,12488=>1000,12489=>1000,12490=>1000,12491=>1000,12492=>1000,12493=>1000,12494=>1000,12495=>1000,12496=>1000,12497=>1000,12498=>1000,12499=>1000,12500=>1000,12501=>1000,
+ 12502=>1000,12503=>1000,12504=>1000,12505=>1000,12506=>1000,12507=>1000,12508=>1000,12509=>1000,12510=>1000,12511=>1000,12512=>1000,12513=>1000,12514=>1000,12515=>1000,12516=>1000,12517=>1000,
+ 12518=>1000,12519=>1000,12520=>1000,12521=>1000,12522=>1000,12523=>1000,12524=>1000,12525=>1000,12526=>1000,12527=>1000,12528=>1000,12529=>1000,12530=>1000,12531=>1000,12532=>1000,12533=>1000,
+ 12534=>1000,12535=>1000,12536=>1000,12537=>1000,12538=>1000,12539=>1000,12540=>1000,12541=>1000,12542=>1000,12549=>1000,12550=>1000,12551=>1000,12552=>1000,12553=>1000,12554=>1000,12555=>1000,
+ 12556=>1000,12557=>1000,12558=>1000,12559=>1000,12560=>1000,12561=>1000,12562=>1000,12563=>1000,12564=>1000,12565=>1000,12566=>1000,12567=>1000,12568=>1000,12569=>1000,12570=>1000,12571=>1000,
+ 12572=>1000,12573=>1000,12574=>1000,12575=>1000,12576=>1000,12577=>1000,12578=>1000,12579=>1000,12580=>1000,12581=>1000,12582=>1000,12583=>1000,12584=>1000,12585=>1000,12586=>1000,12587=>1000,
+ 12588=>1000,12593=>1000,12594=>1000,12595=>1000,12596=>1000,12597=>1000,12598=>1000,12599=>1000,12600=>1000,12601=>1000,12602=>1000,12603=>1000,12604=>1000,12605=>1000,12606=>1000,12607=>1000,
+ 12608=>1000,12609=>1000,12610=>1000,12611=>1000,12612=>1000,12613=>1000,12614=>1000,12615=>1000,12616=>1000,12617=>1000,12618=>1000,12619=>1000,12620=>1000,12621=>1000,12622=>1000,12623=>1000,
+ 12624=>1000,12625=>1000,12626=>1000,12627=>1000,12628=>1000,12629=>1000,12630=>1000,12631=>1000,12632=>1000,12633=>1000,12634=>1000,12635=>1000,12636=>1000,12637=>1000,12638=>1000,12639=>1000,
+ 12640=>1000,12641=>1000,12642=>1000,12643=>1000,12644=>1000,12645=>1000,12646=>1000,12647=>1000,12648=>1000,12649=>1000,12650=>1000,12651=>1000,12652=>1000,12653=>1000,12654=>1000,12655=>1000,
+ 12656=>1000,12657=>1000,12658=>1000,12659=>1000,12660=>1000,12661=>1000,12662=>1000,12663=>1000,12664=>1000,12665=>1000,12666=>1000,12667=>1000,12668=>1000,12669=>1000,12670=>1000,12671=>1000,
+ 12672=>1000,12673=>1000,12674=>1000,12675=>1000,12676=>1000,12677=>1000,12678=>1000,12679=>1000,12680=>1000,12681=>1000,12682=>1000,12683=>1000,12684=>1000,12685=>1000,12686=>1000,12688=>1000,
+ 12689=>1000,12690=>1000,12691=>1000,12692=>1000,12693=>1000,12694=>1000,12695=>1000,12696=>1000,12697=>1000,12698=>1000,12699=>1000,12700=>1000,12701=>1000,12702=>1000,12703=>1000,12800=>1000,
+ 12801=>1000,12802=>1000,12803=>1000,12804=>1000,12805=>1000,12806=>1000,12807=>1000,12808=>1000,12809=>1000,12810=>1000,12811=>1000,12812=>1000,12813=>1000,12814=>1000,12815=>1000,12816=>1000,
+ 12817=>1000,12818=>1000,12819=>1000,12820=>1000,12821=>1000,12822=>1000,12823=>1000,12824=>1000,12825=>1000,12826=>1000,12827=>1000,12828=>1000,12832=>1000,12833=>1000,12834=>1000,12835=>1000,
+ 12836=>1000,12837=>1000,12838=>1000,12839=>1000,12840=>1000,12841=>1000,12842=>1000,12843=>1000,12844=>1000,12845=>1000,12846=>1000,12847=>1000,12848=>1000,12849=>1000,12850=>1000,12851=>1000,
+ 12852=>1000,12853=>1000,12854=>1000,12855=>1000,12856=>1000,12857=>1000,12858=>1000,12859=>1000,12860=>1000,12861=>1000,12862=>1000,12863=>1000,12864=>1000,12865=>1000,12866=>1000,12867=>1000,
+ 12896=>1000,12897=>1000,12898=>1000,12899=>1000,12900=>1000,12901=>1000,12902=>1000,12903=>1000,12904=>1000,12905=>1000,12906=>1000,12907=>1000,12908=>1000,12909=>1000,12910=>1000,12911=>1000,
+ 12912=>1000,12913=>1000,12914=>1000,12915=>1000,12916=>1000,12917=>1000,12918=>1000,12919=>1000,12920=>1000,12921=>1000,12922=>1000,12923=>1000,12927=>1000,12928=>1000,12929=>1000,12930=>1000,
+ 12931=>1000,12932=>1000,12933=>1000,12934=>1000,12935=>1000,12936=>1000,12937=>1000,12938=>1000,12939=>1000,12940=>1000,12941=>1000,12942=>1000,12943=>1000,12944=>1000,12945=>1000,12946=>1000,
+ 12947=>1000,12948=>1000,12949=>1000,12950=>1000,12951=>1000,12952=>1000,12953=>1000,12954=>1000,12955=>1000,12956=>1000,12957=>1000,12958=>1000,12959=>1000,12960=>1000,12961=>1000,12962=>1000,
+ 12963=>1000,12964=>1000,12965=>1000,12966=>1000,12967=>1000,12968=>1000,12969=>1000,12970=>1000,12971=>1000,12972=>1000,12973=>1000,12974=>1000,12975=>1000,12976=>1000,12992=>1000,12993=>1000,
+ 12994=>1000,12995=>1000,12996=>1000,12997=>1000,12998=>1000,12999=>1000,13000=>1000,13001=>1000,13002=>1000,13003=>1000,13008=>1000,13009=>1000,13010=>1000,13011=>1000,13012=>1000,13013=>1000,
+ 13014=>1000,13015=>1000,13016=>1000,13017=>1000,13018=>1000,13019=>1000,13020=>1000,13021=>1000,13022=>1000,13023=>1000,13024=>1000,13025=>1000,13026=>1000,13027=>1000,13028=>1000,13029=>1000,
+ 13030=>1000,13031=>1000,13032=>1000,13033=>1000,13034=>1000,13035=>1000,13036=>1000,13037=>1000,13038=>1000,13039=>1000,13040=>1000,13041=>1000,13042=>1000,13043=>1000,13044=>1000,13045=>1000,
+ 13046=>1000,13047=>1000,13048=>1000,13049=>1000,13050=>1000,13051=>1000,13052=>1000,13053=>1000,13054=>1000,13056=>1000,13057=>1000,13058=>1000,13059=>1000,13060=>1000,13061=>1000,13062=>1000,
+ 13063=>1000,13064=>1000,13065=>1000,13066=>1000,13067=>1000,13068=>1000,13069=>1000,13070=>1000,13071=>1000,13072=>1000,13073=>1000,13074=>1000,13075=>1000,13076=>1000,13077=>1000,13078=>1000,
+ 13079=>1000,13080=>1000,13081=>1000,13082=>1000,13083=>1000,13084=>1000,13085=>1000,13086=>1000,13087=>1000,13088=>1000,13089=>1000,13090=>1000,13091=>1000,13092=>1000,13093=>1000,13094=>1000,
+ 13095=>1000,13096=>1000,13097=>1000,13098=>1000,13099=>1000,13100=>1000,13101=>1000,13102=>1000,13103=>1000,13104=>1000,13105=>1000,13106=>1000,13107=>1000,13108=>1000,13109=>1000,13110=>1000,
+ 13111=>1000,13112=>1000,13113=>1000,13114=>1000,13115=>1000,13116=>1000,13117=>1000,13118=>1000,13119=>1000,13120=>1000,13121=>1000,13122=>1000,13123=>1000,13124=>1000,13125=>1000,13126=>1000,
+ 13127=>1000,13128=>1000,13129=>1000,13130=>1000,13131=>1000,13132=>1000,13133=>1000,13134=>1000,13135=>1000,13136=>1000,13137=>1000,13138=>1000,13139=>1000,13140=>1000,13141=>1000,13142=>1000,
+ 13143=>1000,13144=>1000,13145=>1000,13146=>1000,13147=>1000,13148=>1000,13149=>1000,13150=>1000,13151=>1000,13152=>1000,13153=>1000,13154=>1000,13155=>1000,13156=>1000,13157=>1000,13158=>1000,
+ 13159=>1000,13160=>1000,13161=>1000,13162=>1000,13163=>1000,13164=>1000,13165=>1000,13166=>1000,13167=>1000,13168=>1000,13169=>1000,13170=>1000,13171=>1000,13172=>1000,13173=>1000,13174=>1000,
+ 13179=>1000,13180=>1000,13181=>1000,13182=>1000,13183=>1000,13184=>1000,13185=>1000,13186=>1000,13187=>1000,13188=>1000,13189=>1000,13190=>1000,13191=>1000,13192=>1000,13193=>1000,13194=>1000,
+ 13195=>1000,13196=>1000,13197=>1000,13198=>1000,13199=>1000,13200=>1000,13201=>1000,13202=>1000,13203=>1000,13204=>1000,13205=>1000,13206=>1000,13207=>1000,13208=>1000,13209=>1000,13210=>1000,
+ 13211=>1000,13212=>1000,13213=>1000,13214=>1000,13215=>1000,13216=>1000,13217=>1000,13218=>1000,13219=>1000,13220=>1000,13221=>1000,13222=>1000,13223=>1000,13224=>1000,13225=>1000,13226=>1000,
+ 13227=>1000,13228=>1000,13229=>1000,13230=>1000,13231=>1000,13232=>1000,13233=>1000,13234=>1000,13235=>1000,13236=>1000,13237=>1000,13238=>1000,13239=>1000,13240=>1000,13241=>1000,13242=>1000,
+ 13243=>1000,13244=>1000,13245=>1000,13246=>1000,13247=>1000,13248=>1000,13249=>1000,13250=>1000,13251=>1000,13252=>1000,13253=>1000,13254=>1000,13255=>1000,13256=>1000,13257=>1000,13258=>1000,
+ 13259=>1000,13260=>1000,13261=>1000,13262=>1000,13263=>1000,13264=>1000,13265=>1000,13266=>1000,13267=>1000,13268=>1000,13269=>1000,13270=>1000,13271=>1000,13272=>1000,13273=>1000,13274=>1000,
+ 13275=>1000,13276=>1000,13277=>1000,13280=>1000,13281=>1000,13282=>1000,13283=>1000,13284=>1000,13285=>1000,13286=>1000,13287=>1000,13288=>1000,13289=>1000,13290=>1000,13291=>1000,13292=>1000,
+ 13293=>1000,13294=>1000,13295=>1000,13296=>1000,13297=>1000,13298=>1000,13299=>1000,13300=>1000,13301=>1000,13302=>1000,13303=>1000,13304=>1000,13305=>1000,13306=>1000,13307=>1000,13308=>1000,
+ 13309=>1000,13310=>1000,59393=>316,59394=>507,59395=>507,59396=>484,59397=>484,59416=>0,59492=>480,59495=>480,59536=>458,59557=>466,59558=>480,59559=>903,61441=>500,61442=>500,
+ 63232=>541,63233=>0,63234=>0,63235=>0,63236=>0,63237=>0,63238=>0,63239=>0,63240=>0,63241=>0,63242=>0,63243=>0,63244=>0,63245=>0,63246=>0,63247=>849,
+ 63248=>0,63249=>0,63250=>0,63251=>0,63252=>0,63253=>0,63254=>0,63255=>0,63256=>0,63257=>0,63258=>0,63260=>333,63261=>287,63744=>1000,63745=>1000,63746=>1000,
+ 63747=>1000,63748=>1000,63749=>1000,63750=>1000,63751=>1000,63752=>1000,63753=>1000,63754=>1000,63755=>1000,63756=>1000,63757=>1000,63758=>1000,63759=>1000,63760=>1000,63761=>1000,63762=>1000,
+ 63763=>1000,63764=>1000,63765=>1000,63766=>1000,63767=>1000,63768=>1000,63769=>1000,63770=>1000,63771=>1000,63772=>1000,63773=>1000,63774=>1000,63775=>1000,63776=>1000,63777=>1000,63778=>1000,
+ 63779=>1000,63780=>1000,63781=>1000,63782=>1000,63783=>1000,63784=>1000,63785=>1000,63786=>1000,63787=>1000,63788=>1000,63789=>1000,63790=>1000,63791=>1000,63792=>1000,63793=>1000,63794=>1000,
+ 63795=>1000,63796=>1000,63797=>1000,63798=>1000,63799=>1000,63800=>1000,63801=>1000,63802=>1000,63803=>1000,63804=>1000,63805=>1000,63806=>1000,63807=>1000,63808=>1000,63809=>1000,63810=>1000,
+ 63811=>1000,63812=>1000,63813=>1000,63814=>1000,63815=>1000,63816=>1000,63817=>1000,63818=>1000,63819=>1000,63820=>1000,63821=>1000,63822=>1000,63823=>1000,63824=>1000,63825=>1000,63826=>1000,
+ 63827=>1000,63828=>1000,63829=>1000,63830=>1000,63831=>1000,63832=>1000,63833=>1000,63834=>1000,63835=>1000,63836=>1000,63837=>1000,63838=>1000,63839=>1000,63840=>1000,63841=>1000,63842=>1000,
+ 63843=>1000,63844=>1000,63845=>1000,63846=>1000,63847=>1000,63848=>1000,63849=>1000,63850=>1000,63851=>1000,63852=>1000,63853=>1000,63854=>1000,63855=>1000,63856=>1000,63857=>1000,63858=>1000,
+ 63859=>1000,63860=>1000,63861=>1000,63862=>1000,63863=>1000,63864=>1000,63865=>1000,63866=>1000,63867=>1000,63868=>1000,63869=>1000,63870=>1000,63871=>1000,63872=>1000,63873=>1000,63874=>1000,
+ 63875=>1000,63876=>1000,63877=>1000,63878=>1000,63879=>1000,63880=>1000,63881=>1000,63882=>1000,63883=>1000,63884=>1000,63885=>1000,63886=>1000,63887=>1000,63888=>1000,63889=>1000,63890=>1000,
+ 63891=>1000,63892=>1000,63893=>1000,63894=>1000,63895=>1000,63896=>1000,63897=>1000,63898=>1000,63899=>1000,63900=>1000,63901=>1000,63902=>1000,63903=>1000,63904=>1000,63905=>1000,63906=>1000,
+ 63907=>1000,63908=>1000,63909=>1000,63910=>1000,63911=>1000,63912=>1000,63913=>1000,63914=>1000,63915=>1000,63916=>1000,63917=>1000,63918=>1000,63919=>1000,63920=>1000,63921=>1000,63922=>1000,
+ 63923=>1000,63924=>1000,63925=>1000,63926=>1000,63927=>1000,63928=>1000,63929=>1000,63930=>1000,63931=>1000,63932=>1000,63933=>1000,63934=>1000,63935=>1000,63936=>1000,63937=>1000,63938=>1000,
+ 63939=>1000,63940=>1000,63941=>1000,63942=>1000,63943=>1000,63944=>1000,63945=>1000,63946=>1000,63947=>1000,63948=>1000,63949=>1000,63950=>1000,63951=>1000,63952=>1000,63953=>1000,63954=>1000,
+ 63955=>1000,63956=>1000,63957=>1000,63958=>1000,63959=>1000,63960=>1000,63961=>1000,63962=>1000,63963=>1000,63964=>1000,63965=>1000,63966=>1000,63967=>1000,63968=>1000,63969=>1000,63970=>1000,
+ 63971=>1000,63972=>1000,63973=>1000,63974=>1000,63975=>1000,63976=>1000,63977=>1000,63978=>1000,63979=>1000,63980=>1000,63981=>1000,63982=>1000,63983=>1000,63984=>1000,63985=>1000,63986=>1000,
+ 63987=>1000,63988=>1000,63989=>1000,63990=>1000,63991=>1000,63992=>1000,63993=>1000,63994=>1000,63995=>1000,63996=>1000,63997=>1000,63998=>1000,63999=>1000,64000=>1000,64001=>1000,64002=>1000,
+ 64003=>1000,64004=>1000,64005=>1000,64006=>1000,64007=>1000,64008=>1000,64009=>1000,64010=>1000,64011=>1000,64012=>1000,64013=>1000,64014=>1000,64015=>1000,64016=>1000,64017=>1000,64018=>1000,
+ 64019=>1000,64020=>1000,64021=>1000,64022=>1000,64023=>1000,64024=>1000,64025=>1000,64026=>1000,64027=>1000,64028=>1000,64029=>1000,64030=>1000,64031=>1000,64032=>1000,64033=>1000,64034=>1000,
+ 64035=>1000,64036=>1000,64037=>1000,64038=>1000,64039=>1000,64040=>1000,64041=>1000,64042=>1000,64043=>1000,64044=>1000,64045=>1000,64256=>537,64257=>500,64258=>500,64259=>778,64260=>750,
+ 64261=>532,64262=>758,64275=>784,64276=>784,64277=>784,64278=>784,64279=>893,64286=>333,64287=>590,64288=>550,64289=>709,64290=>649,64291=>730,64292=>656,64293=>605,64294=>730,
+ 64295=>633,64296=>794,64297=>584,64298=>700,64299=>700,64300=>700,64301=>700,64302=>577,64303=>577,64304=>577,64305=>563,64306=>411,64307=>512,64308=>594,64309=>316,64310=>326,
+ 64312=>594,64313=>316,64314=>507,64315=>527,64316=>484,64318=>594,64320=>338,64321=>604,64323=>567,64324=>569,64326=>514,64327=>583,64328=>507,64329=>700,64330=>633,64331=>316,
+ 64332=>563,64333=>527,64334=>569,64335=>577,64336=>243,64337=>273,64338=>771,64339=>788,64340=>276,64341=>243,64342=>771,64343=>788,64344=>276,64345=>243,64346=>771,64347=>788,
+ 64348=>276,64349=>243,64350=>771,64351=>788,64352=>276,64353=>243,64354=>771,64355=>788,64356=>276,64357=>243,64358=>771,64359=>788,64360=>276,64361=>243,64362=>957,64363=>903,
+ 64364=>466,64365=>480,64366=>957,64367=>903,64368=>466,64369=>480,64370=>544,64371=>658,64372=>646,64373=>637,64374=>544,64375=>658,64376=>646,64377=>637,64378=>544,64379=>658,
+ 64380=>646,64381=>637,64382=>544,64383=>658,64384=>646,64385=>637,64386=>430,64387=>458,64388=>430,64389=>458,64390=>430,64391=>458,64392=>430,64393=>458,64394=>421,64395=>436,
+ 64396=>421,64397=>436,64398=>828,64399=>942,64400=>432,64401=>549,64402=>828,64403=>942,64404=>432,64405=>549,64406=>828,64407=>942,64408=>432,64409=>549,64410=>828,64411=>942,
+ 64412=>432,64413=>549,64414=>692,64415=>723,64416=>692,64417=>723,64418=>276,64419=>243,64420=>514,64421=>477,64422=>514,64423=>509,64424=>273,64425=>427,64426=>706,64427=>706,
+ 64428=>686,64429=>686,64430=>550,64431=>461,64432=>550,64433=>461,64467=>757,64468=>733,64469=>432,64470=>549,64471=>470,64472=>466,64473=>470,64474=>466,64475=>470,64476=>466,
+ 64477=>470,64478=>470,64479=>466,64480=>470,64481=>466,64482=>470,64483=>466,64484=>781,64485=>933,64486=>276,64487=>243,64488=>276,64489=>243,64490=>547,64491=>517,64492=>783,
+ 64493=>753,64494=>740,64495=>710,64496=>740,64497=>710,64498=>740,64499=>710,64500=>740,64501=>710,64502=>1207,64503=>1177,64504=>517,64505=>1067,64506=>1037,64507=>517,64508=>731,
+ 64509=>793,64510=>276,64511=>243,64512=>932,64513=>932,64514=>914,64515=>1067,64516=>1077,64517=>935,64518=>935,64519=>935,64520=>917,64521=>1070,64522=>1080,64523=>932,64524=>932,
+ 64525=>932,64526=>914,64527=>1067,64528=>1077,64529=>932,64530=>914,64531=>1067,64532=>1077,64533=>1305,64534=>1287,64535=>1305,64536=>1287,64537=>1305,64538=>1305,64539=>1287,64540=>1429,
+ 64541=>1429,64542=>1429,64543=>1411,64544=>1476,64545=>1458,64546=>1476,64547=>1476,64548=>1476,64549=>1458,64550=>1392,64551=>1374,64552=>1374,64553=>1245,64554=>1227,64555=>1245,64556=>1227,
+ 64557=>1125,64558=>1125,64559=>1125,64560=>1107,64561=>1260,64562=>1270,64563=>1125,64564=>1107,64565=>1260,64566=>1270,64567=>706,64568=>1091,64569=>1091,64570=>1091,64571=>1106,64572=>1073,
+ 64573=>1226,64574=>1236,64575=>932,64576=>932,64577=>932,64578=>914,64579=>1067,64580=>1077,64581=>1140,64582=>1140,64583=>1140,64584=>1122,64585=>1275,64586=>1285,64587=>932,64588=>932,
+ 64589=>932,64590=>914,64591=>1067,64592=>1077,64593=>1345,64594=>1327,64595=>1480,64596=>1490,64597=>932,64598=>932,64599=>932,64600=>914,64601=>1067,64602=>1077,64603=>430,64604=>421,
+ 64605=>731,64606=>296,64607=>300,64608=>300,64609=>300,64610=>300,64611=>300,64612=>680,64613=>680,64614=>884,64615=>967,64616=>1037,64617=>1047,64618=>680,64619=>680,64620=>884,
+ 64621=>967,64622=>1037,64623=>1047,64624=>680,64625=>680,64626=>884,64627=>967,64628=>1037,64629=>1047,64630=>680,64631=>680,64632=>884,64633=>967,64634=>1037,64635=>1047,64636=>1274,
+ 64637=>1284,64638=>1274,64639=>1284,64640=>821,64641=>1221,64642=>1188,64643=>1341,64644=>1351,64645=>884,64646=>1037,64647=>1047,64648=>806,64649=>1173,64650=>680,64651=>680,64652=>884,
+ 64653=>967,64654=>1037,64655=>1047,64656=>793,64657=>680,64658=>680,64659=>884,64660=>967,64661=>1037,64662=>1047,64663=>911,64664=>911,64665=>911,64666=>806,64667=>679,64668=>911,
+ 64669=>911,64670=>911,64671=>806,64672=>679,64673=>911,64674=>911,64675=>911,64676=>806,64677=>679,64678=>806,64679=>1284,64680=>1179,64681=>1284,64682=>1179,64683=>1284,64684=>1179,
+ 64685=>1408,64686=>1408,64687=>1408,64688=>1303,64689=>1455,64690=>1455,64691=>1350,64692=>1455,64693=>1455,64694=>1455,64695=>1350,64696=>1371,64697=>1266,64698=>1224,64699=>1119,64700=>1224,
+ 64701=>1119,64702=>1104,64703=>1104,64704=>1104,64705=>999,64706=>1104,64707=>999,64708=>1070,64709=>1070,64710=>1070,64711=>676,64712=>965,64713=>911,64714=>911,64715=>911,64716=>806,
+ 64717=>679,64718=>1119,64719=>1119,64720=>1119,64721=>1014,64722=>911,64723=>911,64724=>911,64725=>806,64726=>679,64727=>1324,64728=>1219,64729=>686,64730=>911,64731=>911,64732=>911,
+ 64733=>806,64734=>679,64735=>776,64736=>649,64737=>776,64738=>649,64739=>776,64740=>649,64741=>776,64742=>649,64743=>1303,64744=>1176,64745=>1303,64746=>1176,64747=>793,64748=>1082,
+ 64749=>776,64750=>776,64751=>649,64752=>776,64753=>649,64754=>306,64755=>302,64756=>298,64757=>1527,64758=>1537,64759=>1380,64760=>1390,64761=>1380,64762=>1390,64763=>1564,64764=>1574,
+ 64765=>1564,64766=>1574,64767=>1440,64768=>1450,64769=>1440,64770=>1450,64771=>1440,64772=>1450,64773=>1611,64774=>1621,64775=>1611,64776=>1621,64777=>1429,64778=>1429,64779=>1429,64780=>1411,
+ 64781=>1207,64782=>1207,64783=>1254,64784=>1254,64785=>1527,64786=>1537,64787=>1348,64788=>1358,64789=>1348,64790=>1358,64791=>1564,64792=>1574,64793=>1564,64794=>1574,64795=>1431,64796=>1441,
+ 64797=>1431,64798=>1441,64799=>1431,64800=>1441,64801=>1611,64802=>1621,64803=>1611,64804=>1621,64805=>1429,64806=>1429,64807=>1429,64808=>1411,64809=>1207,64810=>1207,64811=>1254,64812=>1254,
+ 64813=>1408,64814=>1408,64815=>1408,64816=>1303,64817=>1176,64818=>1176,64819=>1266,64820=>1408,64821=>1408,64822=>1408,64823=>1408,64824=>1408,64825=>1408,64826=>1266,64827=>1266,64828=>273,
+ 64829=>243,64830=>600,64831=>600,64848=>1444,64849=>1541,64850=>1549,64851=>1444,64852=>1444,64853=>1444,64854=>1444,64855=>1444,64856=>1830,64857=>1817,64858=>1975,64859=>1964,64860=>2046,
+ 64861=>2046,64862=>2202,64863=>1962,64864=>1941,64865=>1941,64866=>1944,64867=>1836,64868=>2114,64869=>2093,64870=>1991,64871=>2049,64872=>1941,64873=>2212,64874=>1962,64875=>1941,64876=>1944,
+ 64877=>1836,64878=>2249,64879=>2096,64880=>1988,64881=>1925,64882=>1904,64883=>1799,64884=>2070,64885=>1833,64886=>1729,64887=>1652,64888=>1881,64889=>1729,64890=>1892,64891=>1881,64892=>1759,
+ 64893=>1637,64894=>1670,64895=>1654,64896=>1522,64897=>1686,64898=>1675,64899=>1549,64900=>1541,64901=>1522,64902=>1444,64903=>1436,64904=>1444,64905=>1757,64906=>1652,64907=>1975,64908=>1757,
+ 64909=>1652,64910=>1757,64911=>1652,64914=>1757,64915=>1857,64916=>1752,64917=>1444,64918=>1675,64919=>1522,64920=>1444,64921=>1675,64922=>1581,64923=>1570,64924=>1417,64925=>1362,64926=>1686,
+ 64927=>1686,64928=>1675,64929=>1686,64930=>1675,64931=>1581,64932=>1570,64933=>1975,64934=>2069,64935=>1964,64936=>2202,64937=>2259,64938=>2212,64939=>2259,64940=>1686,64941=>1581,64942=>1686,
+ 64943=>1686,64944=>1581,64945=>1870,64946=>1817,64947=>1686,64948=>1637,64949=>1444,64950=>1892,64951=>1886,64952=>1549,64953=>1975,64954=>1444,64955=>1723,64956=>1522,64957=>1541,64958=>2080,
+ 64959=>2080,64960=>1975,64961=>1817,64962=>1686,64963=>1499,64964=>1757,64965=>1883,64966=>2212,64967=>1686,65008=>1523,65009=>1172,65010=>1159,65011=>1356,65012=>2111,65013=>2258,65014=>2130,
+ 65015=>1552,65016=>2046,65017=>1856,65018=>1930,65019=>1070,65056=>450,65057=>450,65058=>450,65059=>450,65072=>1000,65073=>1000,65074=>1000,65075=>1000,65076=>1000,65077=>1000,65078=>1000,
+ 65079=>1000,65080=>1000,65081=>1000,65082=>1000,65083=>1000,65084=>1000,65085=>1000,65086=>1000,65087=>1000,65088=>1000,65089=>1000,65090=>1000,65091=>1000,65092=>1000,65097=>1000,65098=>1000,
+ 65099=>1000,65100=>1000,65101=>1000,65102=>1000,65103=>1000,65104=>167,65105=>250,65106=>167,65108=>167,65109=>167,65110=>334,65111=>167,65112=>600,65113=>200,65114=>200,65115=>200,
+ 65116=>200,65117=>200,65118=>200,65119=>334,65120=>400,65121=>233,65122=>350,65123=>200,65124=>350,65125=>350,65126=>350,65128=>167,65129=>334,65130=>533,65131=>609,65136=>300,
+ 65137=>298,65138=>296,65140=>298,65142=>300,65143=>298,65144=>300,65145=>302,65146=>298,65147=>296,65148=>306,65149=>306,65150=>154,65151=>154,65152=>529,65153=>243,65154=>273,
+ 65155=>243,65156=>273,65157=>470,65158=>466,65159=>243,65160=>273,65161=>731,65162=>793,65163=>276,65164=>243,65165=>243,65166=>273,65167=>771,65168=>788,65169=>276,65170=>243,
+ 65171=>514,65172=>477,65173=>771,65174=>788,65175=>276,65176=>243,65177=>771,65178=>788,65179=>276,65180=>243,65181=>544,65182=>658,65183=>646,65184=>637,65185=>544,65186=>658,
+ 65187=>646,65188=>637,65189=>544,65190=>658,65191=>646,65192=>637,65193=>430,65194=>458,65195=>430,65196=>458,65197=>421,65198=>436,65199=>421,65200=>436,65201=>1194,65202=>1194,
+ 65203=>770,65204=>770,65205=>1194,65206=>1194,65207=>770,65208=>770,65209=>1291,65210=>1291,65211=>817,65212=>817,65213=>1291,65214=>1291,65215=>817,65216=>817,65217=>843,65218=>843,
+ 65219=>733,65220=>733,65221=>843,65222=>843,65223=>733,65224=>733,65225=>594,65226=>556,65227=>586,65228=>554,65229=>594,65230=>556,65231=>586,65232=>554,65233=>957,65234=>903,
+ 65235=>466,65236=>480,65237=>800,65238=>823,65239=>466,65240=>480,65241=>757,65242=>733,65243=>432,65244=>549,65245=>662,65246=>673,65247=>273,65248=>243,65249=>589,65250=>640,
+ 65251=>481,65252=>532,65253=>692,65254=>723,65255=>276,65256=>243,65257=>514,65258=>477,65259=>686,65260=>405,65261=>470,65262=>466,65263=>731,65264=>793,65265=>731,65266=>803,
+ 65267=>276,65268=>243,65269=>551,65270=>603,65271=>551,65272=>603,65273=>551,65274=>603,65275=>551,65276=>603,65281=>1000,65282=>1000,65283=>1000,65284=>1000,65285=>1000,65286=>1000,
+ 65287=>1000,65288=>1000,65289=>1000,65290=>1000,65291=>1000,65292=>1000,65293=>1000,65294=>1000,65295=>1000,65296=>1000,65297=>1000,65298=>1000,65299=>1000,65300=>1000,65301=>1000,65302=>1000,
+ 65303=>1000,65304=>1000,65305=>1000,65306=>1000,65307=>1000,65308=>1000,65309=>1000,65310=>1000,65311=>1000,65312=>1000,65313=>1000,65314=>1000,65315=>1000,65316=>1000,65317=>1000,65318=>1000,
+ 65319=>1000,65320=>1000,65321=>1000,65322=>1000,65323=>1000,65324=>1000,65325=>1000,65326=>1000,65327=>1000,65328=>1000,65329=>1000,65330=>1000,65331=>1000,65332=>1000,65333=>1000,65334=>1000,
+ 65335=>1000,65336=>1000,65337=>1000,65338=>1000,65339=>1000,65340=>1000,65341=>1000,65342=>1000,65343=>1000,65344=>1000,65345=>1000,65346=>1000,65347=>1000,65348=>1000,65349=>1000,65350=>1000,
+ 65351=>1000,65352=>1000,65353=>1000,65354=>1000,65355=>1000,65356=>1000,65357=>1000,65358=>1000,65359=>1000,65360=>1000,65361=>1000,65362=>1000,65363=>1000,65364=>1000,65365=>1000,65366=>1000,
+ 65367=>1000,65368=>1000,65369=>1000,65370=>1000,65371=>1000,65372=>1000,65373=>1000,65374=>1000,65377=>500,65378=>500,65379=>500,65380=>500,65381=>500,65382=>500,65383=>500,65384=>500,
+ 65385=>500,65386=>500,65387=>500,65388=>500,65389=>500,65390=>500,65391=>500,65392=>500,65393=>500,65394=>500,65395=>500,65396=>500,65397=>500,65398=>500,65399=>500,65400=>500,
+ 65401=>500,65402=>500,65403=>500,65404=>500,65405=>500,65406=>500,65407=>500,65408=>500,65409=>500,65410=>500,65411=>500,65412=>500,65413=>500,65414=>500,65415=>500,65416=>500,
+ 65417=>500,65418=>500,65419=>500,65420=>500,65421=>500,65422=>500,65423=>500,65424=>500,65425=>500,65426=>500,65427=>500,65428=>500,65429=>500,65430=>500,65431=>500,65432=>500,
+ 65433=>500,65434=>500,65435=>500,65436=>500,65437=>500,65438=>500,65439=>500,65440=>500,65441=>500,65442=>500,65443=>500,65444=>500,65445=>500,65446=>500,65447=>500,65448=>500,
+ 65449=>500,65450=>500,65451=>500,65452=>500,65453=>500,65454=>500,65455=>500,65456=>500,65457=>500,65458=>500,65459=>500,65460=>500,65461=>500,65462=>500,65463=>500,65464=>500,
+ 65465=>500,65466=>500,65467=>500,65468=>500,65469=>500,65470=>500,65474=>500,65475=>500,65476=>500,65477=>500,65478=>500,65479=>500,65482=>500,65483=>500,65484=>500,65485=>500,
+ 65486=>500,65487=>500,65490=>500,65491=>500,65492=>500,65493=>500,65494=>500,65495=>500,65498=>500,65499=>500,65500=>500,65504=>1000,65505=>1000,65506=>1000,65507=>1000,65508=>1000,
+ 65509=>1000,65510=>1000,65512=>500,65513=>500,65514=>500,65515=>500,65516=>500,65517=>500,65518=>500,65532=>1000,65533=>1000,19968=>1000,19969=>1000,19970=>1000,19971=>1000,19972=>1000,
+ 19973=>1000,19974=>1000,19975=>1000,19976=>1000,19977=>1000,19978=>1000,19979=>1000,19980=>1000,19981=>1000,19982=>1000,19983=>1000,19984=>1000,19985=>1000,19986=>1000,19987=>1000,19988=>1000,
+ 19989=>1000,19990=>1000,19991=>1000,19992=>1000,19993=>1000,19994=>1000,19995=>1000,19996=>1000,19997=>1000,19998=>1000,19999=>1000,20000=>1000,20001=>1000,20002=>1000,20003=>1000,20004=>1000,
+ 20005=>1000,20006=>1000,20007=>1000,20008=>1000,20009=>1000,20010=>1000,20011=>1000,20012=>1000,20013=>1000,20014=>1000,20015=>1000,20016=>1000,20017=>1000,20018=>1000,20019=>1000,20020=>1000,
+ 20021=>1000,20022=>1000,20023=>1000,20024=>1000,20025=>1000,20026=>1000,20027=>1000,20028=>1000,20029=>1000,20030=>1000,20031=>1000,20032=>1000,20033=>1000,20034=>1000,20035=>1000,20036=>1000,
+ 20037=>1000,20038=>1000,20039=>1000,20040=>1000,20041=>1000,20042=>1000,20043=>1000,20044=>1000,20045=>1000,20046=>1000,20047=>1000,20048=>1000,20049=>1000,20050=>1000,20051=>1000,20052=>1000,
+ 20053=>1000,20054=>1000,20055=>1000,20056=>1000,20057=>1000,20058=>1000,20059=>1000,20060=>1000,20061=>1000,20062=>1000,20063=>1000,20064=>1000,20065=>1000,20066=>1000,20067=>1000,20068=>1000,
+ 20069=>1000,20070=>1000,20071=>1000,20072=>1000,20073=>1000,20074=>1000,20075=>1000,20076=>1000,20077=>1000,20078=>1000,20079=>1000,20080=>1000,20081=>1000,20082=>1000,20083=>1000,20084=>1000,
+ 20085=>1000,20086=>1000,20087=>1000,20088=>1000,20089=>1000,20090=>1000,20091=>1000,20092=>1000,20093=>1000,20094=>1000,20095=>1000,20096=>1000,20097=>1000,20098=>1000,20099=>1000,20100=>1000,
+ 20101=>1000,20102=>1000,20103=>1000,20104=>1000,20105=>1000,20106=>1000,20107=>1000,20108=>1000,20109=>1000,20110=>1000,20111=>1000,20112=>1000,20113=>1000,20114=>1000,20115=>1000,20116=>1000,
+ 20117=>1000,20118=>1000,20119=>1000,20120=>1000,20121=>1000,20122=>1000,20123=>1000,20124=>1000,20125=>1000,20126=>1000,20127=>1000,20128=>1000,20129=>1000,20130=>1000,20131=>1000,20132=>1000,
+ 20133=>1000,20134=>1000,20135=>1000,20136=>1000,20137=>1000,20138=>1000,20139=>1000,20140=>1000,20141=>1000,20142=>1000,20143=>1000,20144=>1000,20145=>1000,20146=>1000,20147=>1000,20148=>1000,
+ 20149=>1000,20150=>1000,20151=>1000,20152=>1000,20153=>1000,20154=>1000,20155=>1000,20156=>1000,20157=>1000,20158=>1000,20159=>1000,20160=>1000,20161=>1000,20162=>1000,20163=>1000,20164=>1000,
+ 20165=>1000,20166=>1000,20167=>1000,20168=>1000,20169=>1000,20170=>1000,20171=>1000,20172=>1000,20173=>1000,20174=>1000,20175=>1000,20176=>1000,20177=>1000,20178=>1000,20179=>1000,20180=>1000,
+ 20181=>1000,20182=>1000,20183=>1000,20184=>1000,20185=>1000,20186=>1000,20187=>1000,20188=>1000,20189=>1000,20190=>1000,20191=>1000,20192=>1000,20193=>1000,20194=>1000,20195=>1000,20196=>1000,
+ 20197=>1000,20198=>1000,20199=>1000,20200=>1000,20201=>1000,20202=>1000,20203=>1000,20204=>1000,20205=>1000,20206=>1000,20207=>1000,20208=>1000,20209=>1000,20210=>1000,20211=>1000,20212=>1000,
+ 20213=>1000,20214=>1000,20215=>1000,20216=>1000,20217=>1000,20218=>1000,20219=>1000,20220=>1000,20221=>1000,20222=>1000,20223=>1000,20224=>1000,20225=>1000,20226=>1000,20227=>1000,20228=>1000,
+ 20229=>1000,20230=>1000,20231=>1000,20232=>1000,20233=>1000,20234=>1000,20235=>1000,20236=>1000,20237=>1000,20238=>1000,20239=>1000,20240=>1000,20241=>1000,20242=>1000,20243=>1000,20244=>1000,
+ 20245=>1000,20246=>1000,20247=>1000,20248=>1000,20249=>1000,20250=>1000,20251=>1000,20252=>1000,20253=>1000,20254=>1000,20255=>1000,20256=>1000,20257=>1000,20258=>1000,20259=>1000,20260=>1000,
+ 20261=>1000,20262=>1000,20263=>1000,20264=>1000,20265=>1000,20266=>1000,20267=>1000,20268=>1000,20269=>1000,20270=>1000,20271=>1000,20272=>1000,20273=>1000,20274=>1000,20275=>1000,20276=>1000,
+ 20277=>1000,20278=>1000,20279=>1000,20280=>1000,20281=>1000,20282=>1000,20283=>1000,20284=>1000,20285=>1000,20286=>1000,20287=>1000,20288=>1000,20289=>1000,20290=>1000,20291=>1000,20292=>1000,
+ 20293=>1000,20294=>1000,20295=>1000,20296=>1000,20297=>1000,20298=>1000,20299=>1000,20300=>1000,20301=>1000,20302=>1000,20303=>1000,20304=>1000,20305=>1000,20306=>1000,20307=>1000,20308=>1000,
+ 20309=>1000,20310=>1000,20311=>1000,20312=>1000,20313=>1000,20314=>1000,20315=>1000,20316=>1000,20317=>1000,20318=>1000,20319=>1000,20320=>1000,20321=>1000,20322=>1000,20323=>1000,20324=>1000,
+ 20325=>1000,20326=>1000,20327=>1000,20328=>1000,20329=>1000,20330=>1000,20331=>1000,20332=>1000,20333=>1000,20334=>1000,20335=>1000,20336=>1000,20337=>1000,20338=>1000,20339=>1000,20340=>1000,
+ 20341=>1000,20342=>1000,20343=>1000,20344=>1000,20345=>1000,20346=>1000,20347=>1000,20348=>1000,20349=>1000,20350=>1000,20351=>1000,20352=>1000,20353=>1000,20354=>1000,20355=>1000,20356=>1000,
+ 20357=>1000,20358=>1000,20359=>1000,20360=>1000,20361=>1000,20362=>1000,20363=>1000,20364=>1000,20365=>1000,20366=>1000,20367=>1000,20368=>1000,20369=>1000,20370=>1000,20371=>1000,20372=>1000,
+ 20373=>1000,20374=>1000,20375=>1000,20376=>1000,20377=>1000,20378=>1000,20379=>1000,20380=>1000,20381=>1000,20382=>1000,20383=>1000,20384=>1000,20385=>1000,20386=>1000,20387=>1000,20388=>1000,
+ 20389=>1000,20390=>1000,20391=>1000,20392=>1000,20393=>1000,20394=>1000,20395=>1000,20396=>1000,20397=>1000,20398=>1000,20399=>1000,20400=>1000,20401=>1000,20402=>1000,20403=>1000,20404=>1000,
+ 20405=>1000,20406=>1000,20407=>1000,20408=>1000,20409=>1000,20410=>1000,20411=>1000,20412=>1000,20413=>1000,20414=>1000,20415=>1000,20416=>1000,20417=>1000,20418=>1000,20419=>1000,20420=>1000,
+ 20421=>1000,20422=>1000,20423=>1000,20424=>1000,20425=>1000,20426=>1000,20427=>1000,20428=>1000,20429=>1000,20430=>1000,20431=>1000,20432=>1000,20433=>1000,20434=>1000,20435=>1000,20436=>1000,
+ 20437=>1000,20438=>1000,20439=>1000,20440=>1000,20441=>1000,20442=>1000,20443=>1000,20444=>1000,20445=>1000,20446=>1000,20447=>1000,20448=>1000,20449=>1000,20450=>1000,20451=>1000,20452=>1000,
+ 20453=>1000,20454=>1000,20455=>1000,20456=>1000,20457=>1000,20458=>1000,20459=>1000,20460=>1000,20461=>1000,20462=>1000,20463=>1000,20464=>1000,20465=>1000,20466=>1000,20467=>1000,20468=>1000,
+ 20469=>1000,20470=>1000,20471=>1000,20472=>1000,20473=>1000,20474=>1000,20475=>1000,20476=>1000,20477=>1000,20478=>1000,20479=>1000,20480=>1000,20481=>1000,20482=>1000,20483=>1000,20484=>1000,
+ 20485=>1000,20486=>1000,20487=>1000,20488=>1000,20489=>1000,20490=>1000,20491=>1000,20492=>1000,20493=>1000,20494=>1000,20495=>1000,20496=>1000,20497=>1000,20498=>1000,20499=>1000,20500=>1000,
+ 20501=>1000,20502=>1000,20503=>1000,20504=>1000,20505=>1000,20506=>1000,20507=>1000,20508=>1000,20509=>1000,20510=>1000,20511=>1000,20512=>1000,20513=>1000,20514=>1000,20515=>1000,20516=>1000,
+ 20517=>1000,20518=>1000,20519=>1000,20520=>1000,20521=>1000,20522=>1000,20523=>1000,20524=>1000,20525=>1000,20526=>1000,20527=>1000,20528=>1000,20529=>1000,20530=>1000,20531=>1000,20532=>1000,
+ 20533=>1000,20534=>1000,20535=>1000,20536=>1000,20537=>1000,20538=>1000,20539=>1000,20540=>1000,20541=>1000,20542=>1000,20543=>1000,20544=>1000,20545=>1000,20546=>1000,20547=>1000,20548=>1000,
+ 20549=>1000,20550=>1000,20551=>1000,20552=>1000,20553=>1000,20554=>1000,20555=>1000,20556=>1000,20557=>1000,20558=>1000,20559=>1000,20560=>1000,20561=>1000,20562=>1000,20563=>1000,20564=>1000,
+ 20565=>1000,20566=>1000,20567=>1000,20568=>1000,20569=>1000,20570=>1000,20571=>1000,20572=>1000,20573=>1000,20574=>1000,20575=>1000,20576=>1000,20577=>1000,20578=>1000,20579=>1000,20580=>1000,
+ 20581=>1000,20582=>1000,20583=>1000,20584=>1000,20585=>1000,20586=>1000,20587=>1000,20588=>1000,20589=>1000,20590=>1000,20591=>1000,20592=>1000,20593=>1000,20594=>1000,20595=>1000,20596=>1000,
+ 20597=>1000,20598=>1000,20599=>1000,20600=>1000,20601=>1000,20602=>1000,20603=>1000,20604=>1000,20605=>1000,20606=>1000,20607=>1000,20608=>1000,20609=>1000,20610=>1000,20611=>1000,20612=>1000,
+ 20613=>1000,20614=>1000,20615=>1000,20616=>1000,20617=>1000,20618=>1000,20619=>1000,20620=>1000,20621=>1000,20622=>1000,20623=>1000,20624=>1000,20625=>1000,20626=>1000,20627=>1000,20628=>1000,
+ 20629=>1000,20630=>1000,20631=>1000,20632=>1000,20633=>1000,20634=>1000,20635=>1000,20636=>1000,20637=>1000,20638=>1000,20639=>1000,20640=>1000,20641=>1000,20642=>1000,20643=>1000,20644=>1000,
+ 20645=>1000,20646=>1000,20647=>1000,20648=>1000,20649=>1000,20650=>1000,20651=>1000,20652=>1000,20653=>1000,20654=>1000,20655=>1000,20656=>1000,20657=>1000,20658=>1000,20659=>1000,20660=>1000,
+ 20661=>1000,20662=>1000,20663=>1000,20664=>1000,20665=>1000,20666=>1000,20667=>1000,20668=>1000,20669=>1000,20670=>1000,20671=>1000,20672=>1000,20673=>1000,20674=>1000,20675=>1000,20676=>1000,
+ 20677=>1000,20678=>1000,20679=>1000,20680=>1000,20681=>1000,20682=>1000,20683=>1000,20684=>1000,20685=>1000,20686=>1000,20687=>1000,20688=>1000,20689=>1000,20690=>1000,20691=>1000,20692=>1000,
+ 20693=>1000,20694=>1000,20695=>1000,20696=>1000,20697=>1000,20698=>1000,20699=>1000,20700=>1000,20701=>1000,20702=>1000,20703=>1000,20704=>1000,20705=>1000,20706=>1000,20707=>1000,20708=>1000,
+ 20709=>1000,20710=>1000,20711=>1000,20712=>1000,20713=>1000,20714=>1000,20715=>1000,20716=>1000,20717=>1000,20718=>1000,20719=>1000,20720=>1000,20721=>1000,20722=>1000,20723=>1000,20724=>1000,
+ 20725=>1000,20726=>1000,20727=>1000,20728=>1000,20729=>1000,20730=>1000,20731=>1000,20732=>1000,20733=>1000,20734=>1000,20735=>1000,20736=>1000,20737=>1000,20738=>1000,20739=>1000,20740=>1000,
+ 20741=>1000,20742=>1000,20743=>1000,20744=>1000,20745=>1000,20746=>1000,20747=>1000,20748=>1000,20749=>1000,20750=>1000,20751=>1000,20752=>1000,20753=>1000,20754=>1000,20755=>1000,20756=>1000,
+ 20757=>1000,20758=>1000,20759=>1000,20760=>1000,20761=>1000,20762=>1000,20763=>1000,20764=>1000,20765=>1000,20766=>1000,20767=>1000,20768=>1000,20769=>1000,20770=>1000,20771=>1000,20772=>1000,
+ 20773=>1000,20774=>1000,20775=>1000,20776=>1000,20777=>1000,20778=>1000,20779=>1000,20780=>1000,20781=>1000,20782=>1000,20783=>1000,20784=>1000,20785=>1000,20786=>1000,20787=>1000,20788=>1000,
+ 20789=>1000,20790=>1000,20791=>1000,20792=>1000,20793=>1000,20794=>1000,20795=>1000,20796=>1000,20797=>1000,20798=>1000,20799=>1000,20800=>1000,20801=>1000,20802=>1000,20803=>1000,20804=>1000,
+ 20805=>1000,20806=>1000,20807=>1000,20808=>1000,20809=>1000,20810=>1000,20811=>1000,20812=>1000,20813=>1000,20814=>1000,20815=>1000,20816=>1000,20817=>1000,20818=>1000,20819=>1000,20820=>1000,
+ 20821=>1000,20822=>1000,20823=>1000,20824=>1000,20825=>1000,20826=>1000,20827=>1000,20828=>1000,20829=>1000,20830=>1000,20831=>1000,20832=>1000,20833=>1000,20834=>1000,20835=>1000,20836=>1000,
+ 20837=>1000,20838=>1000,20839=>1000,20840=>1000,20841=>1000,20842=>1000,20843=>1000,20844=>1000,20845=>1000,20846=>1000,20847=>1000,20848=>1000,20849=>1000,20850=>1000,20851=>1000,20852=>1000,
+ 20853=>1000,20854=>1000,20855=>1000,20856=>1000,20857=>1000,20858=>1000,20859=>1000,20860=>1000,20861=>1000,20862=>1000,20863=>1000,20864=>1000,20865=>1000,20866=>1000,20867=>1000,20868=>1000,
+ 20869=>1000,20870=>1000,20871=>1000,20872=>1000,20873=>1000,20874=>1000,20875=>1000,20876=>1000,20877=>1000,20878=>1000,20879=>1000,20880=>1000,20881=>1000,20882=>1000,20883=>1000,20884=>1000,
+ 20885=>1000,20886=>1000,20887=>1000,20888=>1000,20889=>1000,20890=>1000,20891=>1000,20892=>1000,20893=>1000,20894=>1000,20895=>1000,20896=>1000,20897=>1000,20898=>1000,20899=>1000,20900=>1000,
+ 20901=>1000,20902=>1000,20903=>1000,20904=>1000,20905=>1000,20906=>1000,20907=>1000,20908=>1000,20909=>1000,20910=>1000,20911=>1000,20912=>1000,20913=>1000,20914=>1000,20915=>1000,20916=>1000,
+ 20917=>1000,20918=>1000,20919=>1000,20920=>1000,20921=>1000,20922=>1000,20923=>1000,20924=>1000,20925=>1000,20926=>1000,20927=>1000,20928=>1000,20929=>1000,20930=>1000,20931=>1000,20932=>1000,
+ 20933=>1000,20934=>1000,20935=>1000,20936=>1000,20937=>1000,20938=>1000,20939=>1000,20940=>1000,20941=>1000,20942=>1000,20943=>1000,20944=>1000,20945=>1000,20946=>1000,20947=>1000,20948=>1000,
+ 20949=>1000,20950=>1000,20951=>1000,20952=>1000,20953=>1000,20954=>1000,20955=>1000,20956=>1000,20957=>1000,20958=>1000,20959=>1000,20960=>1000,20961=>1000,20962=>1000,20963=>1000,20964=>1000,
+ 20965=>1000,20966=>1000,20967=>1000,20968=>1000,20969=>1000,20970=>1000,20971=>1000,20972=>1000,20973=>1000,20974=>1000,20975=>1000,20976=>1000,20977=>1000,20978=>1000,20979=>1000,20980=>1000,
+ 20981=>1000,20982=>1000,20983=>1000,20984=>1000,20985=>1000,20986=>1000,20987=>1000,20988=>1000,20989=>1000,20990=>1000,20991=>1000,20992=>1000,20993=>1000,20994=>1000,20995=>1000,20996=>1000,
+ 20997=>1000,20998=>1000,20999=>1000,21000=>1000,21001=>1000,21002=>1000,21003=>1000,21004=>1000,21005=>1000,21006=>1000,21007=>1000,21008=>1000,21009=>1000,21010=>1000,21011=>1000,21012=>1000,
+ 21013=>1000,21014=>1000,21015=>1000,21016=>1000,21017=>1000,21018=>1000,21019=>1000,21020=>1000,21021=>1000,21022=>1000,21023=>1000,21024=>1000,21025=>1000,21026=>1000,21027=>1000,21028=>1000,
+ 21029=>1000,21030=>1000,21031=>1000,21032=>1000,21033=>1000,21034=>1000,21035=>1000,21036=>1000,21037=>1000,21038=>1000,21039=>1000,21040=>1000,21041=>1000,21042=>1000,21043=>1000,21044=>1000,
+ 21045=>1000,21046=>1000,21047=>1000,21048=>1000,21049=>1000,21050=>1000,21051=>1000,21052=>1000,21053=>1000,21054=>1000,21055=>1000,21056=>1000,21057=>1000,21058=>1000,21059=>1000,21060=>1000,
+ 21061=>1000,21062=>1000,21063=>1000,21064=>1000,21065=>1000,21066=>1000,21067=>1000,21068=>1000,21069=>1000,21070=>1000,21071=>1000,21072=>1000,21073=>1000,21074=>1000,21075=>1000,21076=>1000,
+ 21077=>1000,21078=>1000,21079=>1000,21080=>1000,21081=>1000,21082=>1000,21083=>1000,21084=>1000,21085=>1000,21086=>1000,21087=>1000,21088=>1000,21089=>1000,21090=>1000,21091=>1000,21092=>1000,
+ 21093=>1000,21094=>1000,21095=>1000,21096=>1000,21097=>1000,21098=>1000,21099=>1000,21100=>1000,21101=>1000,21102=>1000,21103=>1000,21104=>1000,21105=>1000,21106=>1000,21107=>1000,21108=>1000,
+ 21109=>1000,21110=>1000,21111=>1000,21112=>1000,21113=>1000,21114=>1000,21115=>1000,21116=>1000,21117=>1000,21118=>1000,21119=>1000,21120=>1000,21121=>1000,21122=>1000,21123=>1000,21124=>1000,
+ 21125=>1000,21126=>1000,21127=>1000,21128=>1000,21129=>1000,21130=>1000,21131=>1000,21132=>1000,21133=>1000,21134=>1000,21135=>1000,21136=>1000,21137=>1000,21138=>1000,21139=>1000,21140=>1000,
+ 21141=>1000,21142=>1000,21143=>1000,21144=>1000,21145=>1000,21146=>1000,21147=>1000,21148=>1000,21149=>1000,21150=>1000,21151=>1000,21152=>1000,21153=>1000,21154=>1000,21155=>1000,21156=>1000,
+ 21157=>1000,21158=>1000,21159=>1000,21160=>1000,21161=>1000,21162=>1000,21163=>1000,21164=>1000,21165=>1000,21166=>1000,21167=>1000,21168=>1000,21169=>1000,21170=>1000,21171=>1000,21172=>1000,
+ 21173=>1000,21174=>1000,21175=>1000,21176=>1000,21177=>1000,21178=>1000,21179=>1000,21180=>1000,21181=>1000,21182=>1000,21183=>1000,21184=>1000,21185=>1000,21186=>1000,21187=>1000,21188=>1000,
+ 21189=>1000,21190=>1000,21191=>1000,21192=>1000,21193=>1000,21194=>1000,21195=>1000,21196=>1000,21197=>1000,21198=>1000,21199=>1000,21200=>1000,21201=>1000,21202=>1000,21203=>1000,21204=>1000,
+ 21205=>1000,21206=>1000,21207=>1000,21208=>1000,21209=>1000,21210=>1000,21211=>1000,21212=>1000,21213=>1000,21214=>1000,21215=>1000,21216=>1000,21217=>1000,21218=>1000,21219=>1000,21220=>1000,
+ 21221=>1000,21222=>1000,21223=>1000,21224=>1000,21225=>1000,21226=>1000,21227=>1000,21228=>1000,21229=>1000,21230=>1000,21231=>1000,21232=>1000,21233=>1000,21234=>1000,21235=>1000,21236=>1000,
+ 21237=>1000,21238=>1000,21239=>1000,21240=>1000,21241=>1000,21242=>1000,21243=>1000,21244=>1000,21245=>1000,21246=>1000,21247=>1000,21248=>1000,21249=>1000,21250=>1000,21251=>1000,21252=>1000,
+ 21253=>1000,21254=>1000,21255=>1000,21256=>1000,21257=>1000,21258=>1000,21259=>1000,21260=>1000,21261=>1000,21262=>1000,21263=>1000,21264=>1000,21265=>1000,21266=>1000,21267=>1000,21268=>1000,
+ 21269=>1000,21270=>1000,21271=>1000,21272=>1000,21273=>1000,21274=>1000,21275=>1000,21276=>1000,21277=>1000,21278=>1000,21279=>1000,21280=>1000,21281=>1000,21282=>1000,21283=>1000,21284=>1000,
+ 21285=>1000,21286=>1000,21287=>1000,21288=>1000,21289=>1000,21290=>1000,21291=>1000,21292=>1000,21293=>994,21294=>1000,21295=>1000,21296=>1000,21297=>1000,21298=>1000,21299=>1000,21300=>1000,
+ 21301=>1000,21302=>1000,21303=>1000,21304=>1000,21305=>1000,21306=>1000,21307=>1000,21308=>1000,21309=>1000,21310=>1000,21311=>1000,21312=>1000,21313=>1000,21314=>1000,21315=>1000,21316=>1000,
+ 21317=>1000,21318=>1000,21319=>1000,21320=>1000,21321=>1000,21322=>1000,21323=>1000,21324=>1000,21325=>1000,21326=>1000,21327=>1000,21328=>1000,21329=>1000,21330=>1000,21331=>1000,21332=>1000,
+ 21333=>1000,21334=>1000,21335=>1000,21336=>1000,21337=>1000,21338=>1000,21339=>1000,21340=>1000,21341=>1000,21342=>1000,21343=>1000,21344=>1000,21345=>1000,21346=>1000,21347=>1000,21348=>1000,
+ 21349=>1000,21350=>1000,21351=>1000,21352=>1000,21353=>1000,21354=>1000,21355=>1000,21356=>1000,21357=>1000,21358=>1000,21359=>1000,21360=>1000,21361=>1000,21362=>1000,21363=>1000,21364=>1000,
+ 21365=>1000,21366=>1000,21367=>1000,21368=>1000,21369=>1000,21370=>1000,21371=>1000,21372=>1000,21373=>1000,21374=>1000,21375=>1000,21376=>1000,21377=>1000,21378=>1000,21379=>1000,21380=>1000,
+ 21381=>1000,21382=>1000,21383=>1000,21384=>1000,21385=>1000,21386=>1000,21387=>1000,21388=>1000,21389=>1000,21390=>1000,21391=>1000,21392=>1000,21393=>1000,21394=>1000,21395=>1000,21396=>1000,
+ 21397=>1000,21398=>1000,21399=>1000,21400=>1000,21401=>1000,21402=>1000,21403=>1000,21404=>1000,21405=>1000,21406=>1000,21407=>1000,21408=>1000,21409=>1000,21410=>1000,21411=>1000,21412=>1000,
+ 21413=>1000,21414=>1000,21415=>1000,21416=>1000,21417=>1000,21418=>1000,21419=>1000,21420=>1000,21421=>1000,21422=>1000,21423=>1000,21424=>1000,21425=>1000,21426=>1000,21427=>1000,21428=>1000,
+ 21429=>1000,21430=>1000,21431=>1000,21432=>1000,21433=>1000,21434=>1000,21435=>1000,21436=>1000,21437=>1000,21438=>1000,21439=>1000,21440=>1000,21441=>1000,21442=>1000,21443=>1000,21444=>1000,
+ 21445=>1000,21446=>1000,21447=>1000,21448=>1000,21449=>1000,21450=>1000,21451=>1000,21452=>1000,21453=>1000,21454=>1000,21455=>1000,21456=>1000,21457=>1000,21458=>1000,21459=>1000,21460=>1000,
+ 21461=>1000,21462=>1000,21463=>1000,21464=>1000,21465=>1000,21466=>1000,21467=>1000,21468=>1000,21469=>1000,21470=>1000,21471=>1000,21472=>1000,21473=>1000,21474=>1000,21475=>1000,21476=>1000,
+ 21477=>1000,21478=>1000,21479=>1000,21480=>1000,21481=>1000,21482=>1000,21483=>1000,21484=>1000,21485=>1000,21486=>1000,21487=>1000,21488=>1000,21489=>1000,21490=>1000,21491=>1000,21492=>1000,
+ 21493=>1000,21494=>1000,21495=>1000,21496=>1000,21497=>1000,21498=>1000,21499=>1000,21500=>1000,21501=>1000,21502=>1000,21503=>1000,21504=>1000,21505=>1000,21506=>1000,21507=>1000,21508=>1000,
+ 21509=>1000,21510=>1000,21511=>1000,21512=>1000,21513=>1000,21514=>1000,21515=>1000,21516=>1000,21517=>1000,21518=>1000,21519=>1000,21520=>1000,21521=>1000,21522=>1000,21523=>1000,21524=>1000,
+ 21525=>1000,21526=>1000,21527=>1000,21528=>1000,21529=>1000,21530=>1000,21531=>1000,21532=>1000,21533=>1000,21534=>1000,21535=>1000,21536=>1000,21537=>1000,21538=>1000,21539=>1000,21540=>1000,
+ 21541=>1000,21542=>1000,21543=>1000,21544=>1000,21545=>1000,21546=>1000,21547=>1000,21548=>1000,21549=>1000,21550=>1000,21551=>1000,21552=>1000,21553=>1000,21554=>1000,21555=>1000,21556=>1000,
+ 21557=>1000,21558=>1000,21559=>1000,21560=>1000,21561=>1000,21562=>1000,21563=>1000,21564=>1000,21565=>1000,21566=>1000,21567=>1000,21568=>1000,21569=>1000,21570=>1000,21571=>1000,21572=>1000,
+ 21573=>1000,21574=>1000,21575=>1000,21576=>1000,21577=>1000,21578=>1000,21579=>1000,21580=>1000,21581=>1000,21582=>1000,21583=>1000,21584=>1000,21585=>1000,21586=>1000,21587=>1000,21588=>1000,
+ 21589=>1000,21590=>1000,21591=>1000,21592=>1000,21593=>1000,21594=>1000,21595=>1000,21596=>1000,21597=>1000,21598=>1000,21599=>1000,21600=>1000,21601=>1000,21602=>1000,21603=>1000,21604=>1000,
+ 21605=>1000,21606=>1000,21607=>1000,21608=>1000,21609=>1000,21610=>1000,21611=>1000,21612=>1000,21613=>1000,21614=>1000,21615=>1000,21616=>1000,21617=>1000,21618=>1000,21619=>1000,21620=>1000,
+ 21621=>1000,21622=>1000,21623=>1000,21624=>1000,21625=>1000,21626=>1000,21627=>1000,21628=>1000,21629=>1000,21630=>1000,21631=>1000,21632=>1000,21633=>1000,21634=>1000,21635=>1000,21636=>1000,
+ 21637=>1000,21638=>1000,21639=>1000,21640=>1000,21641=>1000,21642=>1000,21643=>1000,21644=>1000,21645=>1000,21646=>1000,21647=>1000,21648=>1000,21649=>1000,21650=>1000,21651=>1000,21652=>1000,
+ 21653=>1000,21654=>1000,21655=>1000,21656=>1000,21657=>1000,21658=>1000,21659=>1000,21660=>1000,21661=>1000,21662=>1000,21663=>1000,21664=>1000,21665=>1000,21666=>1000,21667=>1000,21668=>1000,
+ 21669=>1000,21670=>1000,21671=>1000,21672=>1000,21673=>1000,21674=>1000,21675=>1000,21676=>1000,21677=>1000,21678=>1000,21679=>1000,21680=>1000,21681=>1000,21682=>1000,21683=>1000,21684=>1000,
+ 21685=>1000,21686=>1000,21687=>1000,21688=>1000,21689=>1000,21690=>1000,21691=>1000,21692=>1000,21693=>1000,21694=>1000,21695=>1000,21696=>1000,21697=>1000,21698=>1000,21699=>1000,21700=>1000,
+ 21701=>1000,21702=>1000,21703=>1000,21704=>1000,21705=>1000,21706=>1000,21707=>1000,21708=>1000,21709=>1000,21710=>1000,21711=>1000,21712=>1000,21713=>1000,21714=>1000,21715=>1000,21716=>1000,
+ 21717=>1000,21718=>1000,21719=>1000,21720=>1000,21721=>1000,21722=>1000,21723=>1000,21724=>1000,21725=>1000,21726=>1000,21727=>1000,21728=>1000,21729=>1000,21730=>1000,21731=>1000,21732=>1000,
+ 21733=>1000,21734=>1000,21735=>1000,21736=>1000,21737=>1000,21738=>1000,21739=>1000,21740=>1000,21741=>1000,21742=>1000,21743=>1000,21744=>1000,21745=>1000,21746=>1000,21747=>1000,21748=>1000,
+ 21749=>1000,21750=>1000,21751=>1000,21752=>1000,21753=>1000,21754=>1000,21755=>1000,21756=>1000,21757=>1000,21758=>1000,21759=>1000,21760=>1000,21761=>1000,21762=>1000,21763=>1000,21764=>1000,
+ 21765=>1000,21766=>1000,21767=>1000,21768=>1000,21769=>1000,21770=>1000,21771=>1000,21772=>1000,21773=>1000,21774=>1000,21775=>1000,21776=>1000,21777=>1000,21778=>1000,21779=>1000,21780=>1000,
+ 21781=>1000,21782=>1000,21783=>1000,21784=>1000,21785=>1000,21786=>1000,21787=>1000,21788=>1000,21789=>1000,21790=>1000,21791=>1000,21792=>1000,21793=>1000,21794=>1000,21795=>1000,21796=>1000,
+ 21797=>1000,21798=>1000,21799=>1000,21800=>1000,21801=>1000,21802=>1000,21803=>1000,21804=>1000,21805=>1000,21806=>1000,21807=>1000,21808=>1000,21809=>1000,21810=>1000,21811=>1000,21812=>1000,
+ 21813=>1000,21814=>1000,21815=>1000,21816=>1000,21817=>1000,21818=>1000,21819=>1000,21820=>1000,21821=>1000,21822=>1000,21823=>1000,21824=>1000,21825=>1000,21826=>1000,21827=>1000,21828=>1000,
+ 21829=>1000,21830=>1000,21831=>1000,21832=>1000,21833=>1000,21834=>1000,21835=>1000,21836=>1000,21837=>1000,21838=>1000,21839=>1000,21840=>1000,21841=>1000,21842=>1000,21843=>1000,21844=>1000,
+ 21845=>1000,21846=>1000,21847=>1000,21848=>1000,21849=>1000,21850=>1000,21851=>1000,21852=>1000,21853=>1000,21854=>1000,21855=>1000,21856=>1000,21857=>1000,21858=>1000,21859=>1000,21860=>1000,
+ 21861=>1000,21862=>1000,21863=>1000,21864=>1000,21865=>1000,21866=>1000,21867=>1000,21868=>1000,21869=>1000,21870=>1000,21871=>1000,21872=>1000,21873=>1000,21874=>1000,21875=>1000,21876=>1000,
+ 21877=>1000,21878=>1000,21879=>1000,21880=>1000,21881=>1000,21882=>1000,21883=>1000,21884=>1000,21885=>1000,21886=>1000,21887=>1000,21888=>1000,21889=>1000,21890=>1000,21891=>1000,21892=>1000,
+ 21893=>1000,21894=>1000,21895=>1000,21896=>1000,21897=>1000,21898=>1000,21899=>1000,21900=>1000,21901=>1000,21902=>1000,21903=>1000,21904=>1000,21905=>1000,21906=>1000,21907=>1000,21908=>1000,
+ 21909=>1000,21910=>1000,21911=>1000,21912=>1000,21913=>1000,21914=>1000,21915=>1000,21916=>1000,21917=>1000,21918=>1000,21919=>1000,21920=>1000,21921=>1000,21922=>1000,21923=>1000,21924=>1000,
+ 21925=>1000,21926=>1000,21927=>1000,21928=>1000,21929=>1000,21930=>1000,21931=>1000,21932=>1000,21933=>1000,21934=>1000,21935=>1000,21936=>1000,21937=>1000,21938=>1000,21939=>1000,21940=>1000,
+ 21941=>1000,21942=>1000,21943=>1000,21944=>1000,21945=>1000,21946=>1000,21947=>1000,21948=>1000,21949=>1000,21950=>1000,21951=>1000,21952=>1000,21953=>1000,21954=>1000,21955=>1000,21956=>1000,
+ 21957=>1000,21958=>1000,21959=>1000,21960=>1000,21961=>1000,21962=>1000,21963=>1000,21964=>1000,21965=>1000,21966=>1000,21967=>1000,21968=>1000,21969=>1000,21970=>1000,21971=>1000,21972=>1000,
+ 21973=>1000,21974=>1000,21975=>1000,21976=>1000,21977=>1000,21978=>1000,21979=>1000,21980=>1000,21981=>1000,21982=>1000,21983=>1000,21984=>1000,21985=>1000,21986=>1000,21987=>1000,21988=>1000,
+ 21989=>1000,21990=>1000,21991=>1000,21992=>1000,21993=>1000,21994=>1000,21995=>1000,21996=>1000,21997=>1000,21998=>1000,21999=>1000,22000=>1000,22001=>1000,22002=>1000,22003=>1000,22004=>1000,
+ 22005=>1000,22006=>1000,22007=>1000,22008=>1000,22009=>1000,22010=>1000,22011=>1000,22012=>1000,22013=>1000,22014=>1000,22015=>1000,22016=>1000,22017=>1000,22018=>1000,22019=>1000,22020=>1000,
+ 22021=>1000,22022=>1000,22023=>1000,22024=>1000,22025=>1000,22026=>1000,22027=>1000,22028=>1000,22029=>1000,22030=>1000,22031=>1000,22032=>1000,22033=>1000,22034=>1000,22035=>1000,22036=>1000,
+ 22037=>1000,22038=>1000,22039=>1000,22040=>1000,22041=>1000,22042=>1000,22043=>1000,22044=>1000,22045=>1000,22046=>1000,22047=>1000,22048=>1000,22049=>1000,22050=>1000,22051=>1000,22052=>1000,
+ 22053=>1000,22054=>1000,22055=>1000,22056=>1000,22057=>1000,22058=>1000,22059=>1000,22060=>1000,22061=>1000,22062=>1000,22063=>1000,22064=>1000,22065=>1000,22066=>1000,22067=>1000,22068=>1000,
+ 22069=>1000,22070=>1000,22071=>1000,22072=>1000,22073=>1000,22074=>1000,22075=>1000,22076=>1000,22077=>1000,22078=>1000,22079=>1000,22080=>1000,22081=>1000,22082=>1000,22083=>1000,22084=>1000,
+ 22085=>1000,22086=>1000,22087=>1000,22088=>1000,22089=>1000,22090=>1000,22091=>1000,22092=>1000,22093=>1000,22094=>1000,22095=>1000,22096=>1000,22097=>1000,22098=>1000,22099=>1000,22100=>1000,
+ 22101=>1000,22102=>1000,22103=>1000,22104=>1000,22105=>1000,22106=>1000,22107=>1000,22108=>1000,22109=>1000,22110=>1000,22111=>1000,22112=>1000,22113=>1000,22114=>1000,22115=>1000,22116=>1000,
+ 22117=>1000,22118=>1000,22119=>1000,22120=>1000,22121=>1000,22122=>1000,22123=>1000,22124=>1000,22125=>1000,22126=>1000,22127=>1000,22128=>1000,22129=>1000,22130=>1000,22131=>1000,22132=>1000,
+ 22133=>1000,22134=>1000,22135=>1000,22136=>1000,22137=>1000,22138=>1000,22139=>1000,22140=>1000,22141=>1000,22142=>1000,22143=>1000,22144=>1000,22145=>1000,22146=>1000,22147=>1000,22148=>1000,
+ 22149=>1000,22150=>1000,22151=>1000,22152=>1000,22153=>1000,22154=>1000,22155=>1000,22156=>1000,22157=>1000,22158=>1000,22159=>1000,22160=>1000,22161=>1000,22162=>1000,22163=>1000,22164=>1000,
+ 22165=>1000,22166=>1000,22167=>1000,22168=>1000,22169=>1000,22170=>1000,22171=>1000,22172=>1000,22173=>1000,22174=>1000,22175=>1000,22176=>1000,22177=>1000,22178=>1000,22179=>1000,22180=>1000,
+ 22181=>1000,22182=>1000,22183=>1000,22184=>1000,22185=>1000,22186=>1000,22187=>1000,22188=>1000,22189=>1000,22190=>1000,22191=>1000,22192=>1000,22193=>1000,22194=>1000,22195=>1000,22196=>1000,
+ 22197=>1000,22198=>1000,22199=>1000,22200=>1000,22201=>1000,22202=>1000,22203=>1000,22204=>1000,22205=>1000,22206=>1000,22207=>1000,22208=>1000,22209=>1000,22210=>1000,22211=>1000,22212=>1000,
+ 22213=>1000,22214=>1000,22215=>1000,22216=>1000,22217=>1000,22218=>1000,22219=>1000,22220=>1000,22221=>1000,22222=>1000,22223=>1000,22224=>1000,22225=>1000,22226=>1000,22227=>1000,22228=>1000,
+ 22229=>1000,22230=>1000,22231=>1000,22232=>1000,22233=>1000,22234=>1000,22235=>1000,22236=>1000,22237=>1000,22238=>1000,22239=>1000,22240=>1000,22241=>1000,22242=>1000,22243=>1000,22244=>1000,
+ 22245=>1000,22246=>1000,22247=>1000,22248=>1000,22249=>1000,22250=>1000,22251=>1000,22252=>1000,22253=>1000,22254=>1000,22255=>1000,22256=>1000,22257=>1000,22258=>1000,22259=>1000,22260=>1000,
+ 22261=>1000,22262=>1000,22263=>1000,22264=>1000,22265=>1000,22266=>1000,22267=>1000,22268=>1000,22269=>1000,22270=>1000,22271=>1000,22272=>1000,22273=>1000,22274=>1000,22275=>1000,22276=>1000,
+ 22277=>1000,22278=>1000,22279=>1000,22280=>1000,22281=>1000,22282=>1000,22283=>1000,22284=>1000,22285=>1000,22286=>1000,22287=>1000,22288=>1000,22289=>1000,22290=>1000,22291=>1000,22292=>1000,
+ 22293=>1000,22294=>1000,22295=>1000,22296=>1000,22297=>1000,22298=>1000,22299=>1000,22300=>1000,22301=>1000,22302=>1000,22303=>1000,22304=>1000,22305=>1000,22306=>1000,22307=>1000,22308=>1000,
+ 22309=>1000,22310=>1000,22311=>1000,22312=>1000,22313=>1000,22314=>1000,22315=>1000,22316=>1000,22317=>1000,22318=>1000,22319=>1000,22320=>1000,22321=>1000,22322=>1000,22323=>1000,22324=>1000,
+ 22325=>1000,22326=>1000,22327=>1000,22328=>1000,22329=>1000,22330=>1000,22331=>1000,22332=>1000,22333=>1000,22334=>1000,22335=>1000,22336=>1000,22337=>1000,22338=>1000,22339=>1000,22340=>1000,
+ 22341=>1000,22342=>1000,22343=>1000,22344=>1000,22345=>1000,22346=>1000,22347=>1000,22348=>1000,22349=>1000,22350=>1000,22351=>1000,22352=>1000,22353=>1000,22354=>1000,22355=>1000,22356=>1000,
+ 22357=>1000,22358=>1000,22359=>1000,22360=>1000,22361=>1000,22362=>1000,22363=>1000,22364=>1000,22365=>1000,22366=>1000,22367=>1000,22368=>1000,22369=>1000,22370=>1000,22371=>1000,22372=>1000,
+ 22373=>1000,22374=>1000,22375=>1000,22376=>1000,22377=>1000,22378=>1000,22379=>1000,22380=>1000,22381=>1000,22382=>1000,22383=>1000,22384=>1000,22385=>1000,22386=>1000,22387=>1000,22388=>1000,
+ 22389=>1000,22390=>1000,22391=>1000,22392=>1000,22393=>1000,22394=>1000,22395=>1000,22396=>1000,22397=>1000,22398=>1000,22399=>1000,22400=>1000,22401=>1000,22402=>1000,22403=>1000,22404=>1000,
+ 22405=>1000,22406=>1000,22407=>1000,22408=>1000,22409=>1000,22410=>1000,22411=>1000,22412=>1000,22413=>1000,22414=>1000,22415=>1000,22416=>1000,22417=>1000,22418=>1000,22419=>1000,22420=>1000,
+ 22421=>1000,22422=>1000,22423=>1000,22424=>1000,22425=>1000,22426=>1000,22427=>1000,22428=>1000,22429=>1000,22430=>1000,22431=>1000,22432=>1000,22433=>1000,22434=>1000,22435=>1000,22436=>1000,
+ 22437=>1000,22438=>1000,22439=>1000,22440=>1000,22441=>1000,22442=>1000,22443=>1000,22444=>1000,22445=>1000,22446=>1000,22447=>1000,22448=>1000,22449=>1000,22450=>1000,22451=>1000,22452=>1000,
+ 22453=>1000,22454=>1000,22455=>1000,22456=>1000,22457=>1000,22458=>1000,22459=>1000,22460=>1000,22461=>1000,22462=>1000,22463=>1000,22464=>1000,22465=>1000,22466=>1000,22467=>1000,22468=>1000,
+ 22469=>1000,22470=>1000,22471=>1000,22472=>1000,22473=>1000,22474=>1000,22475=>1000,22476=>1000,22477=>1000,22478=>1000,22479=>1000,22480=>1000,22481=>1000,22482=>1000,22483=>1000,22484=>1000,
+ 22485=>1000,22486=>1000,22487=>1000,22488=>1000,22489=>1000,22490=>1000,22491=>1000,22492=>1000,22493=>1000,22494=>1000,22495=>1000,22496=>1000,22497=>1000,22498=>1000,22499=>1000,22500=>1000,
+ 22501=>1000,22502=>1000,22503=>1000,22504=>1000,22505=>1000,22506=>1000,22507=>1000,22508=>1000,22509=>1000,22510=>1000,22511=>1000,22512=>1000,22513=>1000,22514=>1000,22515=>1000,22516=>1000,
+ 22517=>1000,22518=>1000,22519=>1000,22520=>1000,22521=>1000,22522=>1000,22523=>1000,22524=>1000,22525=>1000,22526=>1000,22527=>1000,22528=>1000,22529=>1000,22530=>1000,22531=>1000,22532=>1000,
+ 22533=>1000,22534=>1000,22535=>1000,22536=>1000,22537=>1000,22538=>1000,22539=>1000,22540=>1000,22541=>1000,22542=>1000,22543=>1000,22544=>1000,22545=>1000,22546=>1000,22547=>1000,22548=>1000,
+ 22549=>1000,22550=>1000,22551=>1000,22552=>1000,22553=>1000,22554=>1000,22555=>1000,22556=>1000,22557=>1000,22558=>1000,22559=>1000,22560=>1000,22561=>1000,22562=>1000,22563=>1000,22564=>1000,
+ 22565=>1000,22566=>1000,22567=>1000,22568=>1000,22569=>1000,22570=>1000,22571=>1000,22572=>1000,22573=>1000,22574=>1000,22575=>1000,22576=>1000,22577=>1000,22578=>1000,22579=>1000,22580=>1000,
+ 22581=>1000,22582=>1000,22583=>1000,22584=>1000,22585=>1000,22586=>1000,22587=>1000,22588=>1000,22589=>1000,22590=>1000,22591=>1000,22592=>1000,22593=>1000,22594=>1000,22595=>1000,22596=>1000,
+ 22597=>1000,22598=>1000,22599=>1000,22600=>1000,22601=>1000,22602=>1000,22603=>1000,22604=>1000,22605=>1000,22606=>1000,22607=>1000,22608=>1000,22609=>1000,22610=>1000,22611=>1000,22612=>1000,
+ 22613=>1000,22614=>1000,22615=>1000,22616=>1000,22617=>1000,22618=>1000,22619=>1000,22620=>1000,22621=>1000,22622=>1000,22623=>1000,22624=>1000,22625=>1000,22626=>1000,22627=>1000,22628=>1000,
+ 22629=>1000,22630=>1000,22631=>1000,22632=>1000,22633=>1000,22634=>1000,22635=>1000,22636=>1000,22637=>1000,22638=>1000,22639=>1000,22640=>1000,22641=>1000,22642=>1000,22643=>1000,22644=>1000,
+ 22645=>1000,22646=>1000,22647=>1000,22648=>1000,22649=>1000,22650=>1000,22651=>1000,22652=>1000,22653=>1000,22654=>1000,22655=>1000,22656=>1000,22657=>1000,22658=>1000,22659=>1000,22660=>1000,
+ 22661=>1000,22662=>1000,22663=>1000,22664=>1000,22665=>1000,22666=>1000,22667=>1000,22668=>1000,22669=>1000,22670=>1000,22671=>1000,22672=>1000,22673=>1000,22674=>1000,22675=>1000,22676=>1000,
+ 22677=>1000,22678=>1000,22679=>1000,22680=>1000,22681=>1000,22682=>1000,22683=>1000,22684=>1000,22685=>1000,22686=>1000,22687=>1000,22688=>1000,22689=>1000,22690=>1000,22691=>1000,22692=>1000,
+ 22693=>1000,22694=>1000,22695=>1000,22696=>1000,22697=>1000,22698=>1000,22699=>1000,22700=>1000,22701=>1000,22702=>1000,22703=>1000,22704=>1000,22705=>1000,22706=>1000,22707=>1000,22708=>1000,
+ 22709=>1000,22710=>1000,22711=>1000,22712=>1000,22713=>1000,22714=>1000,22715=>1000,22716=>1000,22717=>1000,22718=>1000,22719=>1000,22720=>1000,22721=>1000,22722=>1000,22723=>1000,22724=>1000,
+ 22725=>1000,22726=>1000,22727=>1000,22728=>1000,22729=>1000,22730=>1000,22731=>1000,22732=>1000,22733=>1000,22734=>1000,22735=>1000,22736=>1000,22737=>1000,22738=>1000,22739=>1000,22740=>1000,
+ 22741=>1000,22742=>1000,22743=>1000,22744=>1000,22745=>1000,22746=>1000,22747=>1000,22748=>1000,22749=>1000,22750=>1000,22751=>1000,22752=>1000,22753=>1000,22754=>1000,22755=>1000,22756=>1000,
+ 22757=>1000,22758=>1000,22759=>1000,22760=>1000,22761=>1000,22762=>1000,22763=>1000,22764=>1000,22765=>1000,22766=>1000,22767=>1000,22768=>1000,22769=>1000,22770=>1000,22771=>1000,22772=>1000,
+ 22773=>1000,22774=>1000,22775=>1000,22776=>1000,22777=>1000,22778=>1000,22779=>1000,22780=>1000,22781=>1000,22782=>1000,22783=>1000,22784=>1000,22785=>1000,22786=>1000,22787=>1000,22788=>1000,
+ 22789=>1000,22790=>1000,22791=>1000,22792=>1000,22793=>1000,22794=>1000,22795=>1000,22796=>1000,22797=>1000,22798=>1000,22799=>1000,22800=>1000,22801=>1000,22802=>1000,22803=>1000,22804=>1000,
+ 22805=>1000,22806=>1000,22807=>1000,22808=>1000,22809=>1000,22810=>1000,22811=>1000,22812=>1000,22813=>1000,22814=>1000,22815=>1000,22816=>1000,22817=>1000,22818=>1000,22819=>1000,22820=>1000,
+ 22821=>1000,22822=>1000,22823=>1000,22824=>1000,22825=>1000,22826=>1000,22827=>1000,22828=>1000,22829=>1000,22830=>1000,22831=>1000,22832=>1000,22833=>1000,22834=>1000,22835=>1000,22836=>1000,
+ 22837=>1000,22838=>1000,22839=>1000,22840=>1000,22841=>1000,22842=>1000,22843=>1000,22844=>1000,22845=>1000,22846=>1000,22847=>1000,22848=>1000,22849=>1000,22850=>1000,22851=>1000,22852=>1000,
+ 22853=>1000,22854=>1000,22855=>1000,22856=>1000,22857=>1000,22858=>1000,22859=>1000,22860=>1000,22861=>1000,22862=>1000,22863=>1000,22864=>1000,22865=>1000,22866=>1000,22867=>1000,22868=>1000,
+ 22869=>1000,22870=>1000,22871=>1000,22872=>1000,22873=>1000,22874=>1000,22875=>1000,22876=>1000,22877=>1000,22878=>1000,22879=>1000,22880=>1000,22881=>1000,22882=>1000,22883=>1000,22884=>1000,
+ 22885=>1000,22886=>1000,22887=>1000,22888=>1000,22889=>1000,22890=>1000,22891=>1000,22892=>1000,22893=>1000,22894=>1000,22895=>1000,22896=>1000,22897=>1000,22898=>1000,22899=>1000,22900=>1000,
+ 22901=>1000,22902=>1000,22903=>1000,22904=>1000,22905=>1000,22906=>1000,22907=>1000,22908=>1000,22909=>1000,22910=>1000,22911=>1000,22912=>1000,22913=>1000,22914=>1000,22915=>1000,22916=>1000,
+ 22917=>1000,22918=>1000,22919=>1000,22920=>1000,22921=>1000,22922=>1000,22923=>1000,22924=>1000,22925=>1000,22926=>1000,22927=>1000,22928=>1000,22929=>1000,22930=>1000,22931=>1000,22932=>1000,
+ 22933=>1000,22934=>1000,22935=>1000,22936=>1000,22937=>1000,22938=>1000,22939=>1000,22940=>1000,22941=>1000,22942=>1000,22943=>1000,22944=>1000,22945=>1000,22946=>1000,22947=>1000,22948=>1000,
+ 22949=>1000,22950=>1000,22951=>1000,22952=>1000,22953=>1000,22954=>1000,22955=>1000,22956=>1000,22957=>1000,22958=>1000,22959=>1000,22960=>1000,22961=>1000,22962=>1000,22963=>1000,22964=>1000,
+ 22965=>1000,22966=>1000,22967=>1000,22968=>1000,22969=>1000,22970=>1000,22971=>1000,22972=>1000,22973=>1000,22974=>1000,22975=>1000,22976=>1000,22977=>1000,22978=>1000,22979=>1000,22980=>1000,
+ 22981=>1000,22982=>1000,22983=>1000,22984=>1000,22985=>1000,22986=>1000,22987=>1000,22988=>1000,22989=>1000,22990=>1000,22991=>1000,22992=>1000,22993=>1000,22994=>1000,22995=>1000,22996=>1000,
+ 22997=>1000,22998=>1000,22999=>1000,23000=>1000,23001=>1000,23002=>1000,23003=>1000,23004=>1000,23005=>1000,23006=>1000,23007=>1000,23008=>1000,23009=>1000,23010=>1000,23011=>1000,23012=>1000,
+ 23013=>1000,23014=>1000,23015=>1000,23016=>1000,23017=>1000,23018=>1000,23019=>1000,23020=>1000,23021=>1000,23022=>1000,23023=>1000,23024=>1000,23025=>1000,23026=>1000,23027=>1000,23028=>1000,
+ 23029=>1000,23030=>1000,23031=>1000,23032=>1000,23033=>1000,23034=>1000,23035=>1000,23036=>1000,23037=>1000,23038=>1000,23039=>1000,23040=>1000,23041=>1000,23042=>1000,23043=>1000,23044=>1000,
+ 23045=>1000,23046=>1000,23047=>1000,23048=>1000,23049=>1000,23050=>1000,23051=>1000,23052=>1000,23053=>1000,23054=>1000,23055=>1000,23056=>1000,23057=>1000,23058=>1000,23059=>1000,23060=>1000,
+ 23061=>1000,23062=>1000,23063=>1000,23064=>1000,23065=>1000,23066=>1000,23067=>1000,23068=>1000,23069=>1000,23070=>1000,23071=>1000,23072=>1000,23073=>1000,23074=>1000,23075=>1000,23076=>1000,
+ 23077=>1000,23078=>1000,23079=>1000,23080=>1000,23081=>1000,23082=>1000,23083=>1000,23084=>1000,23085=>1000,23086=>1000,23087=>1000,23088=>1000,23089=>1000,23090=>1000,23091=>1000,23092=>1000,
+ 23093=>1000,23094=>1000,23095=>1000,23096=>1000,23097=>1000,23098=>1000,23099=>1000,23100=>1000,23101=>1000,23102=>1000,23103=>1000,23104=>1000,23105=>1000,23106=>1000,23107=>1000,23108=>1000,
+ 23109=>1000,23110=>1000,23111=>1000,23112=>1000,23113=>1000,23114=>1000,23115=>1000,23116=>1000,23117=>1000,23118=>1000,23119=>1000,23120=>1000,23121=>1000,23122=>1000,23123=>1000,23124=>1000,
+ 23125=>1000,23126=>1000,23127=>1000,23128=>1000,23129=>1000,23130=>1000,23131=>1000,23132=>1000,23133=>1000,23134=>1000,23135=>1000,23136=>1000,23137=>1000,23138=>1000,23139=>1000,23140=>1000,
+ 23141=>1000,23142=>1000,23143=>1000,23144=>1000,23145=>1000,23146=>1000,23147=>1000,23148=>1000,23149=>1000,23150=>1000,23151=>1000,23152=>1000,23153=>1000,23154=>1000,23155=>1000,23156=>1000,
+ 23157=>1000,23158=>1000,23159=>1000,23160=>1000,23161=>1000,23162=>1000,23163=>1000,23164=>1000,23165=>1000,23166=>1000,23167=>1000,23168=>1000,23169=>1000,23170=>1000,23171=>1000,23172=>1000,
+ 23173=>1000,23174=>1000,23175=>1000,23176=>1000,23177=>1000,23178=>1000,23179=>1000,23180=>1000,23181=>1000,23182=>1000,23183=>1000,23184=>1000,23185=>1000,23186=>1000,23187=>1000,23188=>1000,
+ 23189=>1000,23190=>1000,23191=>1000,23192=>1000,23193=>1000,23194=>1000,23195=>1000,23196=>1000,23197=>1000,23198=>1000,23199=>1000,23200=>1000,23201=>1000,23202=>1000,23203=>1000,23204=>1000,
+ 23205=>1000,23206=>1000,23207=>1000,23208=>1000,23209=>1000,23210=>1000,23211=>1000,23212=>1000,23213=>1000,23214=>1000,23215=>1000,23216=>1000,23217=>1000,23218=>1000,23219=>1000,23220=>1000,
+ 23221=>1000,23222=>1000,23223=>1000,23224=>1000,23225=>1000,23226=>1000,23227=>1000,23228=>1000,23229=>1000,23230=>1000,23231=>1000,23232=>1000,23233=>1000,23234=>1000,23235=>1000,23236=>1000,
+ 23237=>1000,23238=>1000,23239=>1000,23240=>1000,23241=>1000,23242=>1000,23243=>1000,23244=>1000,23245=>1000,23246=>1000,23247=>1000,23248=>1000,23249=>1000,23250=>1000,23251=>1000,23252=>1000,
+ 23253=>1000,23254=>1000,23255=>1000,23256=>1000,23257=>1000,23258=>1000,23259=>1000,23260=>1000,23261=>1000,23262=>1000,23263=>1000,23264=>1000,23265=>1000,23266=>1000,23267=>1000,23268=>1000,
+ 23269=>1000,23270=>1000,23271=>1000,23272=>1000,23273=>1000,23274=>1000,23275=>1000,23276=>1000,23277=>1000,23278=>1000,23279=>1000,23280=>1000,23281=>1000,23282=>1000,23283=>1000,23284=>1000,
+ 23285=>1000,23286=>1000,23287=>1000,23288=>1000,23289=>1000,23290=>1000,23291=>1000,23292=>1000,23293=>1000,23294=>1000,23295=>1000,23296=>1000,23297=>1000,23298=>1000,23299=>1000,23300=>1000,
+ 23301=>1000,23302=>1000,23303=>1000,23304=>1000,23305=>1000,23306=>1000,23307=>1000,23308=>1000,23309=>1000,23310=>1000,23311=>1000,23312=>1000,23313=>1000,23314=>1000,23315=>1000,23316=>1000,
+ 23317=>1000,23318=>1000,23319=>1000,23320=>1000,23321=>1000,23322=>1000,23323=>1000,23324=>1000,23325=>1000,23326=>1000,23327=>1000,23328=>1000,23329=>1000,23330=>1000,23331=>1000,23332=>1000,
+ 23333=>1000,23334=>1000,23335=>1000,23336=>1000,23337=>1000,23338=>1000,23339=>1000,23340=>1000,23341=>1000,23342=>1000,23343=>1000,23344=>1000,23345=>1000,23346=>1000,23347=>1000,23348=>1000,
+ 23349=>1000,23350=>1000,23351=>1000,23352=>1000,23353=>1000,23354=>1000,23355=>1000,23356=>1000,23357=>1000,23358=>1000,23359=>1000,23360=>1000,23361=>1000,23362=>1000,23363=>1000,23364=>1000,
+ 23365=>1000,23366=>1000,23367=>1000,23368=>1000,23369=>1000,23370=>1000,23371=>1000,23372=>1000,23373=>1000,23374=>1000,23375=>1000,23376=>1000,23377=>1000,23378=>1000,23379=>1000,23380=>1000,
+ 23381=>1000,23382=>1000,23383=>1000,23384=>1000,23385=>1000,23386=>1000,23387=>1000,23388=>1000,23389=>1000,23390=>1000,23391=>1000,23392=>1000,23393=>1000,23394=>1000,23395=>1000,23396=>1000,
+ 23397=>1000,23398=>1000,23399=>1000,23400=>1000,23401=>1000,23402=>1000,23403=>1000,23404=>1000,23405=>1000,23406=>1000,23407=>1000,23408=>1000,23409=>1000,23410=>1000,23411=>1000,23412=>1000,
+ 23413=>1000,23414=>1000,23415=>1000,23416=>1000,23417=>1000,23418=>1000,23419=>1000,23420=>1000,23421=>1000,23422=>1000,23423=>1000,23424=>1000,23425=>1000,23426=>1000,23427=>1000,23428=>1000,
+ 23429=>1000,23430=>1000,23431=>1000,23432=>1000,23433=>1000,23434=>1000,23435=>1000,23436=>1000,23437=>1000,23438=>1000,23439=>1000,23440=>1000,23441=>1000,23442=>1000,23443=>1000,23444=>1000,
+ 23445=>1000,23446=>1000,23447=>1000,23448=>1000,23449=>1000,23450=>1000,23451=>1000,23452=>1000,23453=>1000,23454=>1000,23455=>1000,23456=>1000,23457=>1000,23458=>1000,23459=>1000,23460=>1000,
+ 23461=>1000,23462=>1000,23463=>1000,23464=>1000,23465=>1000,23466=>1000,23467=>1000,23468=>1000,23469=>1000,23470=>1000,23471=>1000,23472=>1000,23473=>1000,23474=>1000,23475=>1000,23476=>1000,
+ 23477=>1000,23478=>1000,23479=>1000,23480=>1000,23481=>1000,23482=>1000,23483=>1000,23484=>1000,23485=>1000,23486=>1000,23487=>1000,23488=>1000,23489=>1000,23490=>1000,23491=>1000,23492=>1000,
+ 23493=>1000,23494=>1000,23495=>1000,23496=>1000,23497=>1000,23498=>1000,23499=>1000,23500=>1000,23501=>1000,23502=>1000,23503=>1000,23504=>1000,23505=>1000,23506=>1000,23507=>1000,23508=>1000,
+ 23509=>1000,23510=>1000,23511=>1000,23512=>1000,23513=>1000,23514=>1000,23515=>1000,23516=>1000,23517=>1000,23518=>1000,23519=>1000,23520=>1000,23521=>1000,23522=>1000,23523=>1000,23524=>1000,
+ 23525=>1000,23526=>1000,23527=>1000,23528=>1000,23529=>1000,23530=>1000,23531=>1000,23532=>1000,23533=>1000,23534=>1000,23535=>1000,23536=>1000,23537=>1000,23538=>1000,23539=>1000,23540=>1000,
+ 23541=>1000,23542=>1000,23543=>1000,23544=>1000,23545=>1000,23546=>1000,23547=>1000,23548=>1000,23549=>1000,23550=>1000,23551=>1000,23552=>1000,23553=>1000,23554=>1000,23555=>1000,23556=>1000,
+ 23557=>1000,23558=>1000,23559=>1000,23560=>1000,23561=>1000,23562=>1000,23563=>1000,23564=>1000,23565=>1000,23566=>1000,23567=>1000,23568=>1000,23569=>1000,23570=>1000,23571=>1000,23572=>1000,
+ 23573=>1000,23574=>1000,23575=>1000,23576=>1000,23577=>1000,23578=>1000,23579=>1000,23580=>1000,23581=>1000,23582=>1000,23583=>1000,23584=>1000,23585=>1000,23586=>1000,23587=>1000,23588=>1000,
+ 23589=>1000,23590=>1000,23591=>1000,23592=>1000,23593=>1000,23594=>1000,23595=>1000,23596=>1000,23597=>1000,23598=>1000,23599=>1000,23600=>1000,23601=>1000,23602=>1000,23603=>1000,23604=>1000,
+ 23605=>1000,23606=>1000,23607=>1000,23608=>1000,23609=>1000,23610=>1000,23611=>1000,23612=>1000,23613=>1000,23614=>1000,23615=>1000,23616=>1000,23617=>1000,23618=>1000,23619=>1000,23620=>1000,
+ 23621=>1000,23622=>1000,23623=>1000,23624=>1000,23625=>1000,23626=>1000,23627=>1000,23628=>1000,23629=>1000,23630=>1000,23631=>1000,23632=>1000,23633=>1000,23634=>1000,23635=>1000,23636=>1000,
+ 23637=>1000,23638=>1000,23639=>1000,23640=>1000,23641=>1000,23642=>1000,23643=>1000,23644=>1000,23645=>1000,23646=>1000,23647=>1000,23648=>1000,23649=>1000,23650=>1000,23651=>1000,23652=>1000,
+ 23653=>1000,23654=>1000,23655=>1000,23656=>1000,23657=>1000,23658=>1000,23659=>1000,23660=>1000,23661=>1000,23662=>1000,23663=>1000,23664=>1000,23665=>1000,23666=>1000,23667=>1000,23668=>1000,
+ 23669=>1000,23670=>1000,23671=>1000,23672=>1000,23673=>1000,23674=>1000,23675=>1000,23676=>1000,23677=>1000,23678=>1000,23679=>1000,23680=>1000,23681=>1000,23682=>1000,23683=>1000,23684=>1000,
+ 23685=>1000,23686=>1000,23687=>1000,23688=>1000,23689=>1000,23690=>1000,23691=>1000,23692=>1000,23693=>1000,23694=>1000,23695=>1000,23696=>1000,23697=>1000,23698=>1000,23699=>1000,23700=>1000,
+ 23701=>1000,23702=>1000,23703=>1000,23704=>1000,23705=>1000,23706=>1000,23707=>1000,23708=>1000,23709=>1000,23710=>1000,23711=>1000,23712=>1000,23713=>1000,23714=>1000,23715=>1000,23716=>1000,
+ 23717=>1000,23718=>1000,23719=>1000,23720=>1000,23721=>1000,23722=>1000,23723=>1000,23724=>1000,23725=>1000,23726=>1000,23727=>1000,23728=>1000,23729=>1000,23730=>1000,23731=>1000,23732=>1000,
+ 23733=>1000,23734=>1000,23735=>1000,23736=>1000,23737=>1000,23738=>1000,23739=>1000,23740=>1000,23741=>1000,23742=>1000,23743=>1000,23744=>1000,23745=>1000,23746=>1000,23747=>1000,23748=>1000,
+ 23749=>1000,23750=>1000,23751=>1000,23752=>1000,23753=>1000,23754=>1000,23755=>1000,23756=>1000,23757=>1000,23758=>1000,23759=>1000,23760=>1000,23761=>1000,23762=>1000,23763=>1000,23764=>1000,
+ 23765=>1000,23766=>1000,23767=>1000,23768=>1000,23769=>1000,23770=>1000,23771=>1000,23772=>1000,23773=>1000,23774=>1000,23775=>1000,23776=>1000,23777=>1000,23778=>1000,23779=>1000,23780=>1000,
+ 23781=>1000,23782=>1000,23783=>1000,23784=>1000,23785=>1000,23786=>1000,23787=>1000,23788=>1000,23789=>1000,23790=>1000,23791=>1000,23792=>1000,23793=>1000,23794=>1000,23795=>1000,23796=>1000,
+ 23797=>1000,23798=>1000,23799=>1000,23800=>1000,23801=>1000,23802=>1000,23803=>1000,23804=>1000,23805=>1000,23806=>1000,23807=>1000,23808=>1000,23809=>1000,23810=>1000,23811=>1000,23812=>1000,
+ 23813=>1000,23814=>1000,23815=>1000,23816=>1000,23817=>1000,23818=>1000,23819=>1000,23820=>1000,23821=>1000,23822=>1000,23823=>1000,23824=>1000,23825=>1000,23826=>1000,23827=>1000,23828=>1000,
+ 23829=>1000,23830=>1000,23831=>1000,23832=>1000,23833=>1000,23834=>1000,23835=>1000,23836=>1000,23837=>1000,23838=>1000,23839=>1000,23840=>1000,23841=>1000,23842=>1000,23843=>1000,23844=>1000,
+ 23845=>1000,23846=>1000,23847=>1000,23848=>1000,23849=>1000,23850=>1000,23851=>1000,23852=>1000,23853=>1000,23854=>1000,23855=>1000,23856=>1000,23857=>1000,23858=>1000,23859=>1000,23860=>1000,
+ 23861=>1000,23862=>1000,23863=>1000,23864=>1000,23865=>1000,23866=>1000,23867=>1000,23868=>1000,23869=>1000,23870=>1000,23871=>1000,23872=>1000,23873=>1000,23874=>1000,23875=>1000,23876=>1000,
+ 23877=>1000,23878=>1000,23879=>1000,23880=>1000,23881=>1000,23882=>1000,23883=>1000,23884=>1000,23885=>1000,23886=>1000,23887=>1000,23888=>1000,23889=>1000,23890=>1000,23891=>1000,23892=>1000,
+ 23893=>1000,23894=>1000,23895=>1000,23896=>1000,23897=>1000,23898=>1000,23899=>1000,23900=>1000,23901=>1000,23902=>1000,23903=>1000,23904=>1000,23905=>1000,23906=>1000,23907=>1000,23908=>1000,
+ 23909=>1000,23910=>1000,23911=>1000,23912=>1000,23913=>1000,23914=>1000,23915=>1000,23916=>1000,23917=>1000,23918=>1000,23919=>1000,23920=>1000,23921=>1000,23922=>1000,23923=>1000,23924=>1000,
+ 23925=>1000,23926=>1000,23927=>1000,23928=>1000,23929=>1000,23930=>1000,23931=>1000,23932=>1000,23933=>1000,23934=>1000,23935=>1000,23936=>1000,23937=>1000,23938=>1000,23939=>1000,23940=>1000,
+ 23941=>1000,23942=>1000,23943=>1000,23944=>1000,23945=>1000,23946=>1000,23947=>1000,23948=>1000,23949=>1000,23950=>1000,23951=>1000,23952=>1000,23953=>1000,23954=>1000,23955=>1000,23956=>1000,
+ 23957=>1000,23958=>1000,23959=>1000,23960=>1000,23961=>1000,23962=>1000,23963=>1000,23964=>1000,23965=>1000,23966=>1000,23967=>1000,23968=>1000,23969=>1000,23970=>1000,23971=>1000,23972=>1000,
+ 23973=>1000,23974=>1000,23975=>1000,23976=>1000,23977=>1000,23978=>1000,23979=>1000,23980=>1000,23981=>1000,23982=>1000,23983=>1000,23984=>1000,23985=>1000,23986=>1000,23987=>1000,23988=>1000,
+ 23989=>1000,23990=>1000,23991=>1000,23992=>1000,23993=>1000,23994=>1000,23995=>1000,23996=>1000,23997=>1000,23998=>1000,23999=>1000,24000=>1000,24001=>1000,24002=>1000,24003=>1000,24004=>1000,
+ 24005=>1000,24006=>1000,24007=>1000,24008=>1000,24009=>1000,24010=>1000,24011=>1000,24012=>1000,24013=>1000,24014=>1000,24015=>1000,24016=>1000,24017=>1000,24018=>1000,24019=>1000,24020=>1000,
+ 24021=>1000,24022=>1000,24023=>1000,24024=>1000,24025=>1000,24026=>1000,24027=>1000,24028=>1000,24029=>1000,24030=>1000,24031=>1000,24032=>1000,24033=>1000,24034=>1000,24035=>1000,24036=>1000,
+ 24037=>1000,24038=>1000,24039=>1000,24040=>1000,24041=>1000,24042=>1000,24043=>1000,24044=>1000,24045=>1000,24046=>1000,24047=>1000,24048=>1000,24049=>1000,24050=>1000,24051=>1000,24052=>1000,
+ 24053=>1000,24054=>1000,24055=>1000,24056=>1000,24057=>1000,24058=>1000,24059=>1000,24060=>1000,24061=>1000,24062=>1000,24063=>1000,24064=>1000,24065=>1000,24066=>1000,24067=>1000,24068=>1000,
+ 24069=>1000,24070=>1000,24071=>1000,24072=>1000,24073=>1000,24074=>1000,24075=>1000,24076=>1000,24077=>1000,24078=>1000,24079=>1000,24080=>1000,24081=>1000,24082=>1000,24083=>1000,24084=>1000,
+ 24085=>1000,24086=>1000,24087=>1000,24088=>1000,24089=>1000,24090=>1000,24091=>1000,24092=>1000,24093=>1000,24094=>1000,24095=>1000,24096=>1000,24097=>1000,24098=>1000,24099=>1000,24100=>1000,
+ 24101=>1000,24102=>1000,24103=>1000,24104=>1000,24105=>1000,24106=>1000,24107=>1000,24108=>1000,24109=>1000,24110=>1000,24111=>1000,24112=>1000,24113=>1000,24114=>1000,24115=>1000,24116=>1000,
+ 24117=>1000,24118=>1000,24119=>1000,24120=>1000,24121=>1000,24122=>1000,24123=>1000,24124=>1000,24125=>1000,24126=>1000,24127=>1000,24128=>1000,24129=>1000,24130=>1000,24131=>1000,24132=>1000,
+ 24133=>1000,24134=>1000,24135=>1000,24136=>1000,24137=>1000,24138=>1000,24139=>1000,24140=>1000,24141=>1000,24142=>1000,24143=>1000,24144=>1000,24145=>1000,24146=>1000,24147=>1000,24148=>1000,
+ 24149=>1000,24150=>1000,24151=>1000,24152=>1000,24153=>1000,24154=>1000,24155=>1000,24156=>1000,24157=>1000,24158=>1000,24159=>1000,24160=>1000,24161=>1000,24162=>1000,24163=>1000,24164=>1000,
+ 24165=>1000,24166=>1000,24167=>1000,24168=>1000,24169=>1000,24170=>1000,24171=>1000,24172=>1000,24173=>1000,24174=>1000,24175=>1000,24176=>1000,24177=>1000,24178=>1000,24179=>1000,24180=>1000,
+ 24181=>1000,24182=>1000,24183=>1000,24184=>1000,24185=>1000,24186=>1000,24187=>1000,24188=>1000,24189=>1000,24190=>1000,24191=>1000,24192=>1000,24193=>1000,24194=>1000,24195=>1000,24196=>1000,
+ 24197=>1000,24198=>1000,24199=>1000,24200=>1000,24201=>1000,24202=>1000,24203=>1000,24204=>1000,24205=>1000,24206=>1000,24207=>1000,24208=>1000,24209=>1000,24210=>1000,24211=>1000,24212=>1000,
+ 24213=>1000,24214=>1000,24215=>1000,24216=>1000,24217=>1000,24218=>1000,24219=>1000,24220=>1000,24221=>1000,24222=>1000,24223=>1000,24224=>1000,24225=>1000,24226=>1000,24227=>1000,24228=>1000,
+ 24229=>1000,24230=>1000,24231=>1000,24232=>1000,24233=>1000,24234=>1000,24235=>1000,24236=>1000,24237=>1000,24238=>1000,24239=>1000,24240=>1000,24241=>1000,24242=>1000,24243=>1000,24244=>1000,
+ 24245=>1000,24246=>1000,24247=>1000,24248=>1000,24249=>1000,24250=>1000,24251=>1000,24252=>1000,24253=>1000,24254=>1000,24255=>1000,24256=>1000,24257=>1000,24258=>1000,24259=>1000,24260=>1000,
+ 24261=>1000,24262=>1000,24263=>1000,24264=>1000,24265=>1000,24266=>1000,24267=>1000,24268=>1000,24269=>1000,24270=>1000,24271=>1000,24272=>1000,24273=>1000,24274=>1000,24275=>1000,24276=>1000,
+ 24277=>1000,24278=>1000,24279=>1000,24280=>1000,24281=>1000,24282=>1000,24283=>1000,24284=>1000,24285=>1000,24286=>1000,24287=>1000,24288=>1000,24289=>1000,24290=>1000,24291=>1000,24292=>1000,
+ 24293=>1000,24294=>1000,24295=>1000,24296=>1000,24297=>1000,24298=>1000,24299=>1000,24300=>1000,24301=>1000,24302=>1000,24303=>1000,24304=>1000,24305=>1000,24306=>1000,24307=>1000,24308=>1000,
+ 24309=>1000,24310=>1000,24311=>1000,24312=>1000,24313=>1000,24314=>1000,24315=>1000,24316=>1000,24317=>1000,24318=>1000,24319=>1000,24320=>1000,24321=>1000,24322=>1000,24323=>1000,24324=>1000,
+ 24325=>1000,24326=>1000,24327=>1000,24328=>1000,24329=>1000,24330=>1000,24331=>1000,24332=>1000,24333=>1000,24334=>1000,24335=>1000,24336=>1000,24337=>1000,24338=>1000,24339=>1000,24340=>1000,
+ 24341=>1000,24342=>1000,24343=>1000,24344=>1000,24345=>1000,24346=>1000,24347=>1000,24348=>1000,24349=>1000,24350=>1000,24351=>1000,24352=>1000,24353=>1000,24354=>1000,24355=>1000,24356=>1000,
+ 24357=>1000,24358=>1000,24359=>1000,24360=>1000,24361=>1000,24362=>1000,24363=>1000,24364=>1000,24365=>1000,24366=>1000,24367=>1000,24368=>1000,24369=>1000,24370=>1000,24371=>1000,24372=>1000,
+ 24373=>1000,24374=>1000,24375=>1000,24376=>1000,24377=>1000,24378=>1000,24379=>1000,24380=>1000,24381=>1000,24382=>1000,24383=>1000,24384=>1000,24385=>1000,24386=>1000,24387=>1000,24388=>1000,
+ 24389=>1000,24390=>1000,24391=>1000,24392=>1000,24393=>1000,24394=>1000,24395=>1000,24396=>1000,24397=>1000,24398=>1000,24399=>1000,24400=>1000,24401=>1000,24402=>1000,24403=>1000,24404=>1000,
+ 24405=>1000,24406=>1000,24407=>1000,24408=>1000,24409=>1000,24410=>1000,24411=>1000,24412=>1000,24413=>1000,24414=>1000,24415=>1000,24416=>1000,24417=>1000,24418=>1000,24419=>1000,24420=>1000,
+ 24421=>1000,24422=>1000,24423=>1000,24424=>1000,24425=>1000,24426=>1000,24427=>1000,24428=>1000,24429=>1000,24430=>1000,24431=>1000,24432=>1000,24433=>1000,24434=>1000,24435=>1000,24436=>1000,
+ 24437=>1000,24438=>1000,24439=>1000,24440=>1000,24441=>1000,24442=>1000,24443=>1000,24444=>1000,24445=>1000,24446=>1000,24447=>1000,24448=>1000,24449=>1000,24450=>1000,24451=>1000,24452=>1000,
+ 24453=>1000,24454=>1000,24455=>1000,24456=>1000,24457=>1000,24458=>1000,24459=>1000,24460=>1000,24461=>1000,24462=>1000,24463=>1000,24464=>1000,24465=>1000,24466=>1000,24467=>1000,24468=>1000,
+ 24469=>1000,24470=>1000,24471=>1000,24472=>1000,24473=>1000,24474=>1000,24475=>1000,24476=>1000,24477=>1000,24478=>1000,24479=>1000,24480=>1000,24481=>1000,24482=>1000,24483=>1000,24484=>1000,
+ 24485=>1000,24486=>1000,24487=>1000,24488=>1000,24489=>1000,24490=>1000,24491=>1000,24492=>1000,24493=>1000,24494=>1000,24495=>1000,24496=>1000,24497=>1000,24498=>1000,24499=>1000,24500=>1000,
+ 24501=>1000,24502=>1000,24503=>1000,24504=>1000,24505=>1000,24506=>1000,24507=>1000,24508=>1000,24509=>1000,24510=>1000,24511=>1000,24512=>1000,24513=>1000,24514=>1000,24515=>1000,24516=>1000,
+ 24517=>1000,24518=>1000,24519=>1000,24520=>1000,24521=>1000,24522=>1000,24523=>1000,24524=>1000,24525=>1000,24526=>1000,24527=>1000,24528=>1000,24529=>1000,24530=>1000,24531=>1000,24532=>1000,
+ 24533=>1000,24534=>1000,24535=>1000,24536=>1000,24537=>1000,24538=>1000,24539=>1000,24540=>1000,24541=>1000,24542=>1000,24543=>1000,24544=>1000,24545=>1000,24546=>1000,24547=>1000,24548=>1000,
+ 24549=>1000,24550=>1000,24551=>1000,24552=>1000,24553=>1000,24554=>1000,24555=>1000,24556=>1000,24557=>1000,24558=>1000,24559=>1000,24560=>1000,24561=>1000,24562=>1000,24563=>1000,24564=>1000,
+ 24565=>1000,24566=>1000,24567=>1000,24568=>1000,24569=>1000,24570=>1000,24571=>1000,24572=>1000,24573=>1000,24574=>1000,24575=>1000,24576=>1000,24577=>1000,24578=>1000,24579=>1000,24580=>1000,
+ 24581=>1000,24582=>1000,24583=>1000,24584=>1000,24585=>1000,24586=>1000,24587=>1000,24588=>1000,24589=>1000,24590=>1000,24591=>1000,24592=>1000,24593=>1000,24594=>1000,24595=>1000,24596=>1000,
+ 24597=>1000,24598=>1000,24599=>1000,24600=>1000,24601=>1000,24602=>1000,24603=>1000,24604=>1000,24605=>1000,24606=>1000,24607=>1000,24608=>1000,24609=>1000,24610=>1000,24611=>1000,24612=>1000,
+ 24613=>1000,24614=>1000,24615=>1000,24616=>1000,24617=>1000,24618=>1000,24619=>1000,24620=>1000,24621=>1000,24622=>1000,24623=>1000,24624=>1000,24625=>1000,24626=>1000,24627=>1000,24628=>1000,
+ 24629=>1000,24630=>1000,24631=>1000,24632=>1000,24633=>1000,24634=>1000,24635=>1000,24636=>1000,24637=>1000,24638=>1000,24639=>1000,24640=>1000,24641=>1000,24642=>1000,24643=>1000,24644=>1000,
+ 24645=>1000,24646=>1000,24647=>1000,24648=>1000,24649=>1000,24650=>1000,24651=>1000,24652=>1000,24653=>1000,24654=>1000,24655=>1000,24656=>1000,24657=>1000,24658=>1000,24659=>1000,24660=>1000,
+ 24661=>1000,24662=>1000,24663=>1000,24664=>1000,24665=>1000,24666=>1000,24667=>1000,24668=>1000,24669=>1000,24670=>1000,24671=>1000,24672=>1000,24673=>1000,24674=>1000,24675=>1000,24676=>1000,
+ 24677=>1000,24678=>1000,24679=>1000,24680=>1000,24681=>1000,24682=>1000,24683=>1000,24684=>1000,24685=>1000,24686=>1000,24687=>1000,24688=>1000,24689=>1000,24690=>1000,24691=>1000,24692=>1000,
+ 24693=>1000,24694=>1000,24695=>1000,24696=>1000,24697=>1000,24698=>1000,24699=>1000,24700=>1000,24701=>1000,24702=>1000,24703=>1000,24704=>1000,24705=>1000,24706=>1000,24707=>1000,24708=>1000,
+
+ 24709=>1000,24710=>1000,24711=>1000,24712=>1000,24713=>1000,24714=>1000,24715=>1000,24716=>1000,24717=>1000,24718=>1000,24719=>1000,24720=>1000,24721=>1000,24722=>1000,24723=>1000,24724=>1000,
+ 24725=>1000,24726=>1000,24727=>1000,24728=>1000,24729=>1000,24730=>1000,24731=>1000,24732=>1000,24733=>1000,24734=>1000,24735=>1000,24736=>1000,24737=>1000,24738=>1000,24739=>1000,24740=>1000,
+ 24741=>1000,24742=>1000,24743=>1000,24744=>1000,24745=>1000,24746=>1000,24747=>1000,24748=>1000,24749=>1000,24750=>1000,24751=>1000,24752=>1000,24753=>1000,24754=>1000,24755=>1000,24756=>1000,
+ 24757=>1000,24758=>1000,24759=>1000,24760=>1000,24761=>1000,24762=>1000,24763=>1000,24764=>1000,24765=>1000,24766=>1000,24767=>1000,24768=>1000,24769=>1000,24770=>1000,24771=>1000,24772=>1000,
+ 24773=>1000,24774=>1000,24775=>1000,24776=>1000,24777=>1000,24778=>1000,24779=>1000,24780=>1000,24781=>1000,24782=>1000,24783=>1000,24784=>1000,24785=>1000,24786=>1000,24787=>1000,24788=>1000,
+ 24789=>1000,24790=>1000,24791=>1000,24792=>1000,24793=>1000,24794=>1000,24795=>1000,24796=>1000,24797=>1000,24798=>1000,24799=>1000,24800=>1000,24801=>1000,24802=>1000,24803=>1000,24804=>1000,
+ 24805=>1000,24806=>1000,24807=>1000,24808=>1000,24809=>1000,24810=>1000,24811=>1000,24812=>1000,24813=>1000,24814=>1000,24815=>1000,24816=>1000,24817=>1000,24818=>1000,24819=>1000,24820=>1000,
+ 24821=>1000,24822=>1000,24823=>1000,24824=>1000,24825=>1000,24826=>1000,24827=>1000,24828=>1000,24829=>1000,24830=>1000,24831=>1000,24832=>1000,24833=>1000,24834=>1000,24835=>1000,24836=>1000,
+ 24837=>1000,24838=>1000,24839=>1000,24840=>1000,24841=>1000,24842=>1000,24843=>1000,24844=>1000,24845=>1000,24846=>1000,24847=>1000,24848=>1000,24849=>1000,24850=>1000,24851=>1000,24852=>1000,
+ 24853=>1000,24854=>1000,24855=>1000,24856=>1000,24857=>1000,24858=>1000,24859=>1000,24860=>1000,24861=>1000,24862=>1000,24863=>1000,24864=>1000,24865=>1000,24866=>1000,24867=>1000,24868=>1000,
+ 24869=>1000,24870=>1000,24871=>1000,24872=>1000,24873=>1000,24874=>1000,24875=>1000,24876=>1000,24877=>1000,24878=>1000,24879=>1000,24880=>1000,24881=>1000,24882=>1000,24883=>1000,24884=>1000,
+ 24885=>1000,24886=>1000,24887=>1000,24888=>1000,24889=>1000,24890=>1000,24891=>1000,24892=>1000,24893=>1000,24894=>1000,24895=>1000,24896=>1000,24897=>1000,24898=>1000,24899=>1000,24900=>1000,
+ 24901=>1000,24902=>1000,24903=>1000,24904=>1000,24905=>1000,24906=>1000,24907=>1000,24908=>1000,24909=>1000,24910=>1000,24911=>1000,24912=>1000,24913=>1000,24914=>1000,24915=>1000,24916=>1000,
+ 24917=>1000,24918=>1000,24919=>1000,24920=>1000,24921=>1000,24922=>1000,24923=>1000,24924=>1000,24925=>1000,24926=>1000,24927=>1000,24928=>1000,24929=>1000,24930=>1000,24931=>1000,24932=>1000,
+ 24933=>1000,24934=>1000,24935=>1000,24936=>1000,24937=>1000,24938=>1000,24939=>1000,24940=>1000,24941=>1000,24942=>1000,24943=>1000,24944=>1000,24945=>1000,24946=>1000,24947=>1000,24948=>1000,
+ 24949=>1000,24950=>1000,24951=>1000,24952=>1000,24953=>1000,24954=>1000,24955=>1000,24956=>1000,24957=>1000,24958=>1000,24959=>1000,24960=>1000,24961=>1001,24962=>1000,24963=>1000,24964=>1000,
+ 24965=>1000,24966=>1000,24967=>1000,24968=>1000,24969=>1000,24970=>1000,24971=>1000,24972=>1000,24973=>1000,24974=>1000,24975=>1000,24976=>1000,24977=>1000,24978=>1000,24979=>1000,24980=>1000,
+ 24981=>1000,24982=>1000,24983=>1000,24984=>1000,24985=>1000,24986=>1000,24987=>1000,24988=>1000,24989=>1000,24990=>1000,24991=>1000,24992=>1000,24993=>1000,24994=>1000,24995=>1000,24996=>1000,
+ 24997=>1000,24998=>1000,24999=>1000,25000=>1000,25001=>1000,25002=>1000,25003=>1000,25004=>1000,25005=>1000,25006=>1000,25007=>1000,25008=>1000,25009=>1000,25010=>1000,25011=>1000,25012=>1000,
+ 25013=>1000,25014=>1000,25015=>1000,25016=>1000,25017=>1000,25018=>1000,25019=>1000,25020=>1000,25021=>1000,25022=>1000,25023=>1000,25024=>1000,25025=>1000,25026=>1000,25027=>1000,25028=>1000,
+ 25029=>1000,25030=>1000,25031=>1000,25032=>1000,25033=>1000,25034=>1000,25035=>1000,25036=>1000,25037=>1000,25038=>1000,25039=>1000,25040=>1000,25041=>1000,25042=>1000,25043=>1000,25044=>1000,
+ 25045=>1000,25046=>1000,25047=>1000,25048=>1000,25049=>1000,25050=>1000,25051=>1000,25052=>1000,25053=>1000,25054=>1000,25055=>1000,25056=>1000,25057=>1000,25058=>1000,25059=>1000,25060=>1000,
+ 25061=>1000,25062=>1000,25063=>1000,25064=>1000,25065=>1000,25066=>1000,25067=>1000,25068=>1000,25069=>1000,25070=>1000,25071=>1000,25072=>1000,25073=>1000,25074=>1000,25075=>1000,25076=>1000,
+ 25077=>1000,25078=>1000,25079=>1000,25080=>1000,25081=>1000,25082=>1000,25083=>1000,25084=>1000,25085=>1000,25086=>1000,25087=>1000,25088=>1000,25089=>1000,25090=>1000,25091=>1000,25092=>1000,
+ 25093=>1000,25094=>1000,25095=>1000,25096=>1000,25097=>1000,25098=>1000,25099=>1000,25100=>1000,25101=>1000,25102=>1000,25103=>1000,25104=>1000,25105=>1000,25106=>1000,25107=>1000,25108=>1000,
+ 25109=>1000,25110=>1000,25111=>1000,25112=>1000,25113=>1000,25114=>1000,25115=>1000,25116=>1000,25117=>1000,25118=>1000,25119=>1000,25120=>1000,25121=>1000,25122=>1000,25123=>1000,25124=>1000,
+ 25125=>1000,25126=>1000,25127=>1000,25128=>1000,25129=>1000,25130=>1000,25131=>1000,25132=>1000,25133=>1000,25134=>1000,25135=>1000,25136=>1000,25137=>1000,25138=>1000,25139=>1000,25140=>1000,
+ 25141=>1000,25142=>1000,25143=>1000,25144=>1000,25145=>1000,25146=>1000,25147=>1000,25148=>1000,25149=>1000,25150=>1000,25151=>1000,25152=>1000,25153=>1000,25154=>1000,25155=>1000,25156=>1000,
+ 25157=>1000,25158=>1000,25159=>1000,25160=>1000,25161=>1000,25162=>1000,25163=>1000,25164=>1000,25165=>1000,25166=>1000,25167=>1000,25168=>1000,25169=>1000,25170=>1000,25171=>1000,25172=>1000,
+ 25173=>1000,25174=>1000,25175=>1000,25176=>1000,25177=>1000,25178=>1000,25179=>1000,25180=>1000,25181=>1000,25182=>1000,25183=>1000,25184=>1000,25185=>1000,25186=>1000,25187=>1000,25188=>1000,
+ 25189=>1000,25190=>1000,25191=>1000,25192=>1000,25193=>1000,25194=>1000,25195=>1000,25196=>1000,25197=>1000,25198=>1000,25199=>1000,25200=>1000,25201=>1000,25202=>1000,25203=>1000,25204=>1000,
+ 25205=>1000,25206=>1000,25207=>1000,25208=>1000,25209=>1000,25210=>1000,25211=>1000,25212=>1000,25213=>1000,25214=>1000,25215=>1000,25216=>1000,25217=>1000,25218=>1000,25219=>1000,25220=>1000,
+ 25221=>1000,25222=>1000,25223=>1000,25224=>1000,25225=>1000,25226=>1000,25227=>1000,25228=>1000,25229=>1000,25230=>1000,25231=>1000,25232=>1000,25233=>1000,25234=>1000,25235=>1000,25236=>1000,
+ 25237=>1000,25238=>1000,25239=>1000,25240=>1000,25241=>1000,25242=>1000,25243=>1000,25244=>1000,25245=>1000,25246=>1000,25247=>1000,25248=>1000,25249=>1000,25250=>1000,25251=>1000,25252=>1000,
+ 25253=>1000,25254=>1000,25255=>1000,25256=>1000,25257=>1000,25258=>1000,25259=>1000,25260=>1000,25261=>1000,25262=>1000,25263=>1000,25264=>1000,25265=>1000,25266=>1000,25267=>1000,25268=>1000,
+ 25269=>1000,25270=>1000,25271=>1000,25272=>1000,25273=>1000,25274=>1000,25275=>1000,25276=>1000,25277=>1000,25278=>1000,25279=>1000,25280=>1000,25281=>1000,25282=>1000,25283=>1000,25284=>1000,
+ 25285=>1000,25286=>1000,25287=>1000,25288=>1000,25289=>1000,25290=>1000,25291=>1000,25292=>1000,25293=>1000,25294=>1000,25295=>1000,25296=>1000,25297=>1000,25298=>1000,25299=>1000,25300=>1000,
+ 25301=>1000,25302=>1000,25303=>1000,25304=>1000,25305=>1000,25306=>1000,25307=>1000,25308=>1000,25309=>1000,25310=>1000,25311=>1000,25312=>1000,25313=>1000,25314=>1000,25315=>1000,25316=>1000,
+ 25317=>1000,25318=>1000,25319=>1000,25320=>1000,25321=>1000,25322=>1000,25323=>1000,25324=>1000,25325=>1000,25326=>1000,25327=>1000,25328=>1000,25329=>1000,25330=>1000,25331=>1000,25332=>1000,
+ 25333=>1000,25334=>1000,25335=>1000,25336=>1000,25337=>1000,25338=>1000,25339=>1000,25340=>1000,25341=>1000,25342=>1000,25343=>1000,25344=>1000,25345=>1000,25346=>1000,25347=>1000,25348=>1000,
+ 25349=>1000,25350=>1000,25351=>1000,25352=>1000,25353=>1000,25354=>1000,25355=>1000,25356=>1000,25357=>1000,25358=>1000,25359=>1000,25360=>1000,25361=>1000,25362=>1000,25363=>1000,25364=>1000,
+ 25365=>1000,25366=>1000,25367=>1000,25368=>1000,25369=>1000,25370=>1000,25371=>1000,25372=>1000,25373=>1000,25374=>1000,25375=>1000,25376=>1000,25377=>1000,25378=>1000,25379=>1000,25380=>1000,
+ 25381=>1000,25382=>1000,25383=>1000,25384=>1000,25385=>1000,25386=>1000,25387=>1000,25388=>1000,25389=>1000,25390=>1000,25391=>1000,25392=>1000,25393=>1000,25394=>1000,25395=>1000,25396=>1000,
+ 25397=>1000,25398=>1000,25399=>1000,25400=>1000,25401=>1000,25402=>1000,25403=>1000,25404=>1000,25405=>1000,25406=>1000,25407=>1000,25408=>1000,25409=>1000,25410=>1000,25411=>1000,25412=>1000,
+ 25413=>1000,25414=>1000,25415=>1000,25416=>1000,25417=>1000,25418=>1000,25419=>1000,25420=>1000,25421=>1000,25422=>1000,25423=>1000,25424=>1000,25425=>1000,25426=>1000,25427=>1000,25428=>1000,
+ 25429=>1000,25430=>1000,25431=>1000,25432=>1000,25433=>1000,25434=>1000,25435=>1000,25436=>1000,25437=>1000,25438=>1000,25439=>1000,25440=>1000,25441=>1000,25442=>1000,25443=>1000,25444=>1000,
+ 25445=>1000,25446=>1000,25447=>1000,25448=>1000,25449=>1000,25450=>1000,25451=>1000,25452=>1000,25453=>1000,25454=>1000,25455=>1000,25456=>1000,25457=>1000,25458=>1000,25459=>1000,25460=>1000,
+ 25461=>1000,25462=>1000,25463=>1000,25464=>1000,25465=>1000,25466=>1000,25467=>1000,25468=>1000,25469=>1000,25470=>1000,25471=>1000,25472=>1000,25473=>1000,25474=>1000,25475=>1000,25476=>1000,
+ 25477=>1000,25478=>1000,25479=>1000,25480=>1000,25481=>1000,25482=>1000,25483=>1000,25484=>1000,25485=>1000,25486=>1000,25487=>1000,25488=>1000,25489=>1000,25490=>1000,25491=>1000,25492=>1000,
+ 25493=>1000,25494=>1000,25495=>1000,25496=>1000,25497=>1000,25498=>1000,25499=>1000,25500=>1000,25501=>1000,25502=>1000,25503=>1000,25504=>1000,25505=>1000,25506=>1000,25507=>1000,25508=>1000,
+ 25509=>1000,25510=>1000,25511=>1000,25512=>1000,25513=>1000,25514=>1000,25515=>1000,25516=>1000,25517=>1000,25518=>1000,25519=>1000,25520=>1000,25521=>1000,25522=>1000,25523=>1000,25524=>1000,
+ 25525=>1000,25526=>1000,25527=>1000,25528=>1000,25529=>1000,25530=>1000,25531=>1000,25532=>1000,25533=>1000,25534=>1000,25535=>1000,25536=>1000,25537=>1000,25538=>1000,25539=>1000,25540=>1000,
+ 25541=>1000,25542=>1000,25543=>1000,25544=>1000,25545=>1000,25546=>1000,25547=>1000,25548=>1000,25549=>1000,25550=>1000,25551=>1000,25552=>1000,25553=>1000,25554=>1000,25555=>1000,25556=>1000,
+ 25557=>1000,25558=>1000,25559=>1000,25560=>1000,25561=>1000,25562=>1000,25563=>1000,25564=>1000,25565=>1000,25566=>1000,25567=>1000,25568=>1000,25569=>1000,25570=>1000,25571=>1000,25572=>1000,
+ 25573=>1000,25574=>1000,25575=>1000,25576=>1000,25577=>1000,25578=>1000,25579=>1000,25580=>1000,25581=>1000,25582=>1000,25583=>1000,25584=>1000,25585=>1000,25586=>1000,25587=>1000,25588=>1000,
+ 25589=>1000,25590=>1000,25591=>1000,25592=>1000,25593=>1000,25594=>1000,25595=>1000,25596=>1000,25597=>1000,25598=>1000,25599=>1000,25600=>1000,25601=>1000,25602=>1000,25603=>1000,25604=>1000,
+ 25605=>1000,25606=>1000,25607=>1000,25608=>1000,25609=>1000,25610=>1000,25611=>1000,25612=>1000,25613=>1000,25614=>1000,25615=>1000,25616=>1000,25617=>1000,25618=>1000,25619=>1000,25620=>1000,
+ 25621=>1000,25622=>1000,25623=>1000,25624=>1000,25625=>1000,25626=>1000,25627=>1000,25628=>1000,25629=>1000,25630=>1000,25631=>1000,25632=>1000,25633=>1000,25634=>1000,25635=>1000,25636=>1000,
+ 25637=>1000,25638=>1000,25639=>1000,25640=>1000,25641=>1000,25642=>1000,25643=>1000,25644=>1000,25645=>1000,25646=>1000,25647=>1000,25648=>1000,25649=>1000,25650=>1000,25651=>1000,25652=>1000,
+ 25653=>1000,25654=>1000,25655=>1000,25656=>1000,25657=>1000,25658=>1000,25659=>1000,25660=>1000,25661=>1000,25662=>1000,25663=>1000,25664=>1000,25665=>1000,25666=>1000,25667=>1000,25668=>1000,
+ 25669=>1000,25670=>1000,25671=>1000,25672=>1000,25673=>1000,25674=>1000,25675=>1000,25676=>1000,25677=>1000,25678=>1000,25679=>1000,25680=>1000,25681=>1000,25682=>1000,25683=>1000,25684=>1000,
+ 25685=>1000,25686=>1000,25687=>1000,25688=>1000,25689=>1000,25690=>1000,25691=>1000,25692=>1000,25693=>1000,25694=>1000,25695=>1000,25696=>1000,25697=>1000,25698=>1000,25699=>1000,25700=>1000,
+ 25701=>1000,25702=>1000,25703=>1000,25704=>1000,25705=>1000,25706=>1000,25707=>1000,25708=>1000,25709=>1000,25710=>1000,25711=>1000,25712=>1000,25713=>1000,25714=>1000,25715=>1000,25716=>1000,
+ 25717=>1000,25718=>1000,25719=>1000,25720=>1000,25721=>1000,25722=>1000,25723=>1000,25724=>1000,25725=>1000,25726=>1000,25727=>1000,25728=>1000,25729=>1000,25730=>1000,25731=>1000,25732=>1000,
+ 25733=>1000,25734=>1000,25735=>1000,25736=>1000,25737=>1000,25738=>1000,25739=>1000,25740=>1000,25741=>1000,25742=>1000,25743=>1000,25744=>1000,25745=>1000,25746=>1000,25747=>1000,25748=>1000,
+ 25749=>1000,25750=>1000,25751=>1000,25752=>1000,25753=>1000,25754=>1000,25755=>1000,25756=>1000,25757=>1000,25758=>1000,25759=>1000,25760=>1000,25761=>1000,25762=>1000,25763=>1000,25764=>1000,
+ 25765=>1000,25766=>1000,25767=>1000,25768=>1000,25769=>1000,25770=>1000,25771=>1000,25772=>1000,25773=>1000,25774=>1000,25775=>1000,25776=>1000,25777=>1000,25778=>1000,25779=>1000,25780=>1000,
+ 25781=>1000,25782=>1000,25783=>1000,25784=>1000,25785=>1000,25786=>1000,25787=>1000,25788=>1000,25789=>1000,25790=>1000,25791=>1000,25792=>1000,25793=>1000,25794=>1000,25795=>1000,25796=>1000,
+ 25797=>1000,25798=>1000,25799=>1000,25800=>1000,25801=>1000,25802=>1000,25803=>1000,25804=>1000,25805=>1000,25806=>1000,25807=>1000,25808=>1000,25809=>1000,25810=>1000,25811=>1000,25812=>1000,
+ 25813=>1000,25814=>1000,25815=>1000,25816=>1000,25817=>1000,25818=>1000,25819=>1000,25820=>1000,25821=>1000,25822=>1000,25823=>1000,25824=>1000,25825=>1000,25826=>1000,25827=>1000,25828=>1000,
+ 25829=>1000,25830=>1000,25831=>1000,25832=>1000,25833=>1000,25834=>1000,25835=>1000,25836=>1000,25837=>1000,25838=>1000,25839=>1000,25840=>1000,25841=>1000,25842=>1000,25843=>1000,25844=>1000,
+ 25845=>1000,25846=>1000,25847=>1000,25848=>1000,25849=>1000,25850=>1000,25851=>1000,25852=>1000,25853=>1000,25854=>1000,25855=>1000,25856=>1000,25857=>1000,25858=>1000,25859=>1000,25860=>1000,
+ 25861=>1000,25862=>1000,25863=>1000,25864=>1000,25865=>1000,25866=>1000,25867=>1000,25868=>1000,25869=>1000,25870=>1000,25871=>1000,25872=>1000,25873=>1000,25874=>1000,25875=>1000,25876=>1000,
+ 25877=>1000,25878=>1000,25879=>1000,25880=>1000,25881=>1000,25882=>1000,25883=>1000,25884=>1000,25885=>1000,25886=>1000,25887=>1000,25888=>1000,25889=>1000,25890=>1000,25891=>1000,25892=>1000,
+ 25893=>1000,25894=>1000,25895=>1000,25896=>1000,25897=>1000,25898=>1000,25899=>1000,25900=>1000,25901=>1000,25902=>1000,25903=>1000,25904=>1000,25905=>1000,25906=>1000,25907=>1000,25908=>1000,
+ 25909=>1000,25910=>1000,25911=>1000,25912=>1000,25913=>1000,25914=>1000,25915=>1000,25916=>1000,25917=>1000,25918=>1000,25919=>1000,25920=>1000,25921=>1000,25922=>1000,25923=>1000,25924=>1000,
+ 25925=>1000,25926=>1000,25927=>1000,25928=>1000,25929=>1000,25930=>1000,25931=>1000,25932=>1000,25933=>1000,25934=>1000,25935=>1000,25936=>1000,25937=>1000,25938=>1000,25939=>1000,25940=>1000,
+ 25941=>1000,25942=>1000,25943=>1000,25944=>1000,25945=>1000,25946=>1000,25947=>1000,25948=>1000,25949=>1000,25950=>1000,25951=>1000,25952=>1000,25953=>1000,25954=>1000,25955=>1000,25956=>1000,
+ 25957=>1000,25958=>1000,25959=>1000,25960=>1000,25961=>1000,25962=>1000,25963=>1000,25964=>1000,25965=>1000,25966=>1000,25967=>1000,25968=>1000,25969=>1000,25970=>1000,25971=>1000,25972=>1000,
+ 25973=>1000,25974=>1000,25975=>1000,25976=>1000,25977=>1000,25978=>1000,25979=>1000,25980=>1000,25981=>1000,25982=>1000,25983=>1000,25984=>1000,25985=>1000,25986=>1000,25987=>1000,25988=>1000,
+ 25989=>1000,25990=>1000,25991=>1000,25992=>1000,25993=>1000,25994=>1000,25995=>1000,25996=>1000,25997=>1000,25998=>1000,25999=>1000,26000=>1000,26001=>1000,26002=>1000,26003=>1000,26004=>1000,
+ 26005=>1000,26006=>1000,26007=>1000,26008=>1000,26009=>1000,26010=>1000,26011=>1000,26012=>1000,26013=>1000,26014=>1000,26015=>1000,26016=>1000,26017=>1000,26018=>1000,26019=>1000,26020=>1000,
+ 26021=>1000,26022=>1000,26023=>1000,26024=>1000,26025=>1000,26026=>1000,26027=>1000,26028=>1000,26029=>1000,26030=>1000,26031=>1000,26032=>1000,26033=>1000,26034=>1000,26035=>1000,26036=>1000,
+ 26037=>1000,26038=>1000,26039=>1000,26040=>1000,26041=>1000,26042=>1000,26043=>1000,26044=>1000,26045=>1000,26046=>1000,26047=>1000,26048=>1000,26049=>1000,26050=>1000,26051=>1000,26052=>1000,
+ 26053=>1000,26054=>1000,26055=>1000,26056=>1000,26057=>1000,26058=>1000,26059=>1000,26060=>1000,26061=>1000,26062=>1000,26063=>1000,26064=>1000,26065=>1000,26066=>1000,26067=>1000,26068=>1000,
+ 26069=>1000,26070=>1000,26071=>1000,26072=>1000,26073=>1000,26074=>1000,26075=>1000,26076=>1000,26077=>1000,26078=>1000,26079=>1000,26080=>1000,26081=>1000,26082=>1000,26083=>1000,26084=>1000,
+ 26085=>1000,26086=>1000,26087=>1000,26088=>1000,26089=>1000,26090=>1000,26091=>1000,26092=>1000,26093=>1000,26094=>1000,26095=>1000,26096=>1000,26097=>1000,26098=>1000,26099=>1000,26100=>1000,
+ 26101=>1000,26102=>1000,26103=>1000,26104=>1000,26105=>1000,26106=>1000,26107=>1000,26108=>1000,26109=>1000,26110=>1000,26111=>1000,26112=>1000,26113=>1000,26114=>1000,26115=>1000,26116=>1000,
+ 26117=>1000,26118=>1000,26119=>1000,26120=>1000,26121=>1000,26122=>1000,26123=>1000,26124=>1000,26125=>1000,26126=>1000,26127=>1000,26128=>1000,26129=>1000,26130=>1000,26131=>1000,26132=>1000,
+ 26133=>1000,26134=>1000,26135=>1000,26136=>1000,26137=>1000,26138=>1000,26139=>1000,26140=>1000,26141=>1000,26142=>1000,26143=>1000,26144=>1000,26145=>1000,26146=>1000,26147=>1000,26148=>1000,
+ 26149=>1000,26150=>1000,26151=>1000,26152=>1000,26153=>1000,26154=>1000,26155=>1000,26156=>1000,26157=>1000,26158=>1000,26159=>1000,26160=>1000,26161=>1000,26162=>1000,26163=>1000,26164=>1000,
+ 26165=>1000,26166=>1000,26167=>1000,26168=>1000,26169=>1000,26170=>1000,26171=>1000,26172=>1000,26173=>1000,26174=>1000,26175=>1000,26176=>1000,26177=>1000,26178=>1000,26179=>1000,26180=>1000,
+ 26181=>1000,26182=>1000,26183=>1000,26184=>1000,26185=>1000,26186=>1000,26187=>1000,26188=>1000,26189=>1000,26190=>1000,26191=>1000,26192=>1000,26193=>1000,26194=>1000,26195=>1000,26196=>1000,
+ 26197=>1000,26198=>1000,26199=>1000,26200=>1000,26201=>1000,26202=>1000,26203=>1000,26204=>1000,26205=>1000,26206=>1000,26207=>1000,26208=>1000,26209=>1000,26210=>1000,26211=>1000,26212=>1000,
+ 26213=>1000,26214=>1000,26215=>1000,26216=>1000,26217=>1000,26218=>1000,26219=>1000,26220=>1000,26221=>1000,26222=>1000,26223=>1000,26224=>1000,26225=>1000,26226=>1000,26227=>1000,26228=>1000,
+ 26229=>1000,26230=>1000,26231=>1000,26232=>1000,26233=>1000,26234=>1000,26235=>1000,26236=>1000,26237=>1000,26238=>1000,26239=>1000,26240=>1000,26241=>1000,26242=>1000,26243=>1000,26244=>1000,
+ 26245=>1000,26246=>1000,26247=>1000,26248=>1000,26249=>1000,26250=>1000,26251=>1000,26252=>1000,26253=>1000,26254=>1000,26255=>1000,26256=>1000,26257=>1000,26258=>1000,26259=>1000,26260=>1000,
+ 26261=>1000,26262=>1000,26263=>1000,26264=>1000,26265=>1000,26266=>1000,26267=>1000,26268=>1000,26269=>1000,26270=>1000,26271=>1000,26272=>1000,26273=>1000,26274=>1000,26275=>1000,26276=>1000,
+ 26277=>1000,26278=>1000,26279=>1000,26280=>1000,26281=>1000,26282=>1000,26283=>1000,26284=>1000,26285=>1000,26286=>1000,26287=>1000,26288=>1000,26289=>1000,26290=>1000,26291=>1000,26292=>1000,
+ 26293=>1000,26294=>1000,26295=>1000,26296=>1000,26297=>1000,26298=>1000,26299=>1000,26300=>1000,26301=>1000,26302=>1000,26303=>1000,26304=>1000,26305=>1000,26306=>1000,26307=>1000,26308=>1000,
+ 26309=>1000,26310=>1000,26311=>1000,26312=>1000,26313=>1000,26314=>1000,26315=>1000,26316=>1000,26317=>1000,26318=>1000,26319=>1000,26320=>1000,26321=>1000,26322=>1000,26323=>1000,26324=>1000,
+ 26325=>1000,26326=>1000,26327=>1000,26328=>1000,26329=>1000,26330=>1000,26331=>1000,26332=>1000,26333=>1000,26334=>1000,26335=>1000,26336=>1000,26337=>1000,26338=>1000,26339=>1000,26340=>1000,
+ 26341=>1000,26342=>1000,26343=>1000,26344=>1000,26345=>1000,26346=>1000,26347=>1000,26348=>1000,26349=>1000,26350=>1000,26351=>1000,26352=>1000,26353=>1000,26354=>1000,26355=>1000,26356=>1000,
+ 26357=>1000,26358=>1000,26359=>1000,26360=>1000,26361=>1000,26362=>1000,26363=>1000,26364=>1000,26365=>1000,26366=>1000,26367=>1000,26368=>1000,26369=>1000,26370=>1000,26371=>1000,26372=>1000,
+ 26373=>1000,26374=>1000,26375=>1000,26376=>1000,26377=>1000,26378=>1000,26379=>1000,26380=>1000,26381=>1000,26382=>1000,26383=>1000,26384=>1000,26385=>1000,26386=>1000,26387=>1000,26388=>1000,
+ 26389=>1000,26390=>1000,26391=>1000,26392=>1000,26393=>1000,26394=>1000,26395=>1000,26396=>1000,26397=>1000,26398=>1000,26399=>1000,26400=>1000,26401=>1000,26402=>1000,26403=>1000,26404=>1000,
+ 26405=>1000,26406=>1000,26407=>1000,26408=>1000,26409=>1000,26410=>1000,26411=>1000,26412=>1000,26413=>1000,26414=>1000,26415=>1000,26416=>1000,26417=>1000,26418=>1000,26419=>1000,26420=>1000,
+ 26421=>1000,26422=>1000,26423=>1000,26424=>1000,26425=>1000,26426=>1000,26427=>1000,26428=>1000,26429=>1000,26430=>1000,26431=>1000,26432=>1000,26433=>1000,26434=>1000,26435=>1000,26436=>1000,
+ 26437=>1000,26438=>1000,26439=>1000,26440=>1000,26441=>1000,26442=>1000,26443=>1000,26444=>1000,26445=>1000,26446=>1000,26447=>1000,26448=>1000,26449=>1000,26450=>1000,26451=>1000,26452=>1000,
+ 26453=>1000,26454=>1000,26455=>1000,26456=>1000,26457=>1000,26458=>1000,26459=>1000,26460=>1000,26461=>1000,26462=>1000,26463=>1000,26464=>1000,26465=>1000,26466=>1000,26467=>1000,26468=>1000,
+ 26469=>1000,26470=>1000,26471=>1000,26472=>1000,26473=>1000,26474=>1000,26475=>1000,26476=>1000,26477=>1000,26478=>1000,26479=>1000,26480=>1000,26481=>1000,26482=>1000,26483=>1000,26484=>1000,
+ 26485=>1000,26486=>1000,26487=>1000,26488=>1000,26489=>1000,26490=>1000,26491=>1000,26492=>1000,26493=>1000,26494=>1000,26495=>1000,26496=>1000,26497=>1000,26498=>1000,26499=>1000,26500=>1000,
+ 26501=>1000,26502=>1000,26503=>1000,26504=>1000,26505=>1000,26506=>1000,26507=>1000,26508=>1000,26509=>1000,26510=>1000,26511=>1000,26512=>1000,26513=>1000,26514=>1000,26515=>1000,26516=>1000,
+ 26517=>1000,26518=>1000,26519=>1000,26520=>1000,26521=>1000,26522=>1000,26523=>1000,26524=>1000,26525=>1000,26526=>1000,26527=>1000,26528=>1000,26529=>1000,26530=>1000,26531=>1000,26532=>1000,
+ 26533=>1000,26534=>1000,26535=>1000,26536=>1000,26537=>1000,26538=>1000,26539=>1000,26540=>1000,26541=>1000,26542=>1000,26543=>1000,26544=>1000,26545=>1000,26546=>1000,26547=>1000,26548=>1000,
+ 26549=>1000,26550=>1000,26551=>1000,26552=>1000,26553=>1000,26554=>1000,26555=>1000,26556=>1000,26557=>1000,26558=>1000,26559=>1000,26560=>1000,26561=>1000,26562=>1000,26563=>1000,26564=>1000,
+ 26565=>1000,26566=>1000,26567=>1000,26568=>1000,26569=>1000,26570=>1000,26571=>1000,26572=>1000,26573=>1000,26574=>1000,26575=>1000,26576=>1000,26577=>1000,26578=>1000,26579=>1000,26580=>1000,
+ 26581=>1000,26582=>1000,26583=>1000,26584=>1000,26585=>1000,26586=>1000,26587=>1000,26588=>1000,26589=>1000,26590=>1000,26591=>1000,26592=>1000,26593=>1000,26594=>1000,26595=>1000,26596=>1000,
+ 26597=>1000,26598=>1000,26599=>1000,26600=>1000,26601=>1000,26602=>1000,26603=>1000,26604=>1000,26605=>1000,26606=>1000,26607=>1000,26608=>1000,26609=>1000,26610=>1000,26611=>1000,26612=>1000,
+ 26613=>1000,26614=>1000,26615=>1000,26616=>1000,26617=>1000,26618=>1000,26619=>1000,26620=>1000,26621=>1000,26622=>1000,26623=>1000,26624=>1000,26625=>1000,26626=>1000,26627=>1000,26628=>1000,
+ 26629=>1000,26630=>1000,26631=>1000,26632=>1000,26633=>1000,26634=>1000,26635=>1000,26636=>1000,26637=>1000,26638=>1000,26639=>1000,26640=>1000,26641=>1000,26642=>1000,26643=>1000,26644=>1000,
+ 26645=>1000,26646=>1000,26647=>1000,26648=>1000,26649=>1000,26650=>1000,26651=>1000,26652=>1000,26653=>1000,26654=>1000,26655=>1000,26656=>1000,26657=>1000,26658=>1000,26659=>1000,26660=>1000,
+ 26661=>1000,26662=>1000,26663=>1000,26664=>1000,26665=>1000,26666=>1000,26667=>1000,26668=>1000,26669=>1000,26670=>1000,26671=>1000,26672=>1000,26673=>1000,26674=>1000,26675=>1000,26676=>1000,
+ 26677=>1000,26678=>1000,26679=>1000,26680=>1000,26681=>1000,26682=>1000,26683=>1000,26684=>1000,26685=>1000,26686=>1000,26687=>1000,26688=>1000,26689=>1000,26690=>1000,26691=>1000,26692=>1000,
+ 26693=>1000,26694=>1000,26695=>1000,26696=>1000,26697=>1000,26698=>1000,26699=>1000,26700=>1000,26701=>1000,26702=>1000,26703=>1000,26704=>1000,26705=>1000,26706=>1000,26707=>1000,26708=>1000,
+ 26709=>1000,26710=>1000,26711=>1000,26712=>1000,26713=>1000,26714=>1000,26715=>1000,26716=>1000,26717=>1000,26718=>1000,26719=>1000,26720=>1000,26721=>1000,26722=>1000,26723=>1000,26724=>1000,
+ 26725=>1000,26726=>1000,26727=>1000,26728=>1000,26729=>1000,26730=>1000,26731=>1000,26732=>1000,26733=>1000,26734=>1000,26735=>1000,26736=>1000,26737=>1000,26738=>1000,26739=>1000,26740=>1000,
+ 26741=>1000,26742=>1000,26743=>1000,26744=>1000,26745=>1000,26746=>1000,26747=>1000,26748=>1000,26749=>1000,26750=>1000,26751=>1000,26752=>1000,26753=>1000,26754=>1000,26755=>1000,26756=>1000,
+ 26757=>1000,26758=>1000,26759=>1000,26760=>1000,26761=>1000,26762=>1000,26763=>1000,26764=>1000,26765=>1000,26766=>1000,26767=>1000,26768=>1000,26769=>1000,26770=>1000,26771=>1000,26772=>1000,
+ 26773=>1000,26774=>1000,26775=>1000,26776=>1000,26777=>1000,26778=>1000,26779=>1000,26780=>1000,26781=>1000,26782=>1000,26783=>1000,26784=>1000,26785=>1000,26786=>1000,26787=>1000,26788=>1000,
+ 26789=>1000,26790=>1000,26791=>1000,26792=>1000,26793=>1000,26794=>1000,26795=>1000,26796=>1000,26797=>1000,26798=>1000,26799=>1000,26800=>1000,26801=>1000,26802=>1000,26803=>1000,26804=>1000,
+ 26805=>1000,26806=>1000,26807=>1000,26808=>1000,26809=>1000,26810=>1000,26811=>1000,26812=>1000,26813=>1000,26814=>1000,26815=>1000,26816=>1000,26817=>1000,26818=>1000,26819=>1000,26820=>1000,
+ 26821=>1000,26822=>1000,26823=>1000,26824=>1000,26825=>1000,26826=>1000,26827=>1000,26828=>1000,26829=>1000,26830=>1000,26831=>1000,26832=>1000,26833=>1000,26834=>1000,26835=>1000,26836=>1000,
+ 26837=>1000,26838=>1000,26839=>1000,26840=>1000,26841=>1000,26842=>1000,26843=>1000,26844=>1000,26845=>1000,26846=>1000,26847=>1000,26848=>1000,26849=>1000,26850=>1000,26851=>1000,26852=>1000,
+ 26853=>1000,26854=>1000,26855=>1000,26856=>1000,26857=>1000,26858=>1000,26859=>1000,26860=>1000,26861=>1000,26862=>1000,26863=>1000,26864=>1000,26865=>1000,26866=>1000,26867=>1000,26868=>1000,
+ 26869=>1000,26870=>1000,26871=>1000,26872=>1000,26873=>1000,26874=>1000,26875=>1000,26876=>1000,26877=>1000,26878=>1000,26879=>1000,26880=>1000,26881=>1000,26882=>1000,26883=>1000,26884=>1000,
+ 26885=>1000,26886=>1000,26887=>1000,26888=>1000,26889=>1000,26890=>1000,26891=>1000,26892=>1000,26893=>1000,26894=>1000,26895=>1000,26896=>1000,26897=>1000,26898=>1000,26899=>1000,26900=>1000,
+ 26901=>1000,26902=>1000,26903=>1000,26904=>1000,26905=>1000,26906=>1000,26907=>1000,26908=>1000,26909=>1000,26910=>1000,26911=>1000,26912=>1000,26913=>1000,26914=>1000,26915=>1000,26916=>1000,
+ 26917=>1000,26918=>1000,26919=>1000,26920=>1000,26921=>1000,26922=>1000,26923=>1000,26924=>1000,26925=>1000,26926=>1000,26927=>1000,26928=>1000,26929=>1000,26930=>1000,26931=>1000,26932=>1000,
+ 26933=>1000,26934=>1000,26935=>1000,26936=>1000,26937=>1000,26938=>1000,26939=>1000,26940=>1000,26941=>1000,26942=>1000,26943=>1000,26944=>1000,26945=>1000,26946=>1000,26947=>1000,26948=>1000,
+ 26949=>1000,26950=>1000,26951=>1000,26952=>1000,26953=>1000,26954=>1000,26955=>1000,26956=>1000,26957=>1000,26958=>1000,26959=>1000,26960=>1000,26961=>1000,26962=>1000,26963=>1000,26964=>1000,
+ 26965=>1000,26966=>1000,26967=>1000,26968=>1000,26969=>1000,26970=>1000,26971=>1000,26972=>1000,26973=>1000,26974=>1000,26975=>1000,26976=>1000,26977=>1000,26978=>1000,26979=>1000,26980=>1000,
+ 26981=>1000,26982=>1000,26983=>1000,26984=>1000,26985=>1000,26986=>1000,26987=>1000,26988=>1000,26989=>1000,26990=>1000,26991=>1000,26992=>1000,26993=>1000,26994=>1000,26995=>1000,26996=>1000,
+ 26997=>1000,26998=>1000,26999=>1000,27000=>1000,27001=>1000,27002=>1000,27003=>1000,27004=>1000,27005=>1000,27006=>1000,27007=>1000,27008=>1000,27009=>1000,27010=>1000,27011=>1000,27012=>1000,
+ 27013=>1000,27014=>1000,27015=>1000,27016=>1000,27017=>1000,27018=>1000,27019=>1000,27020=>1000,27021=>1000,27022=>1000,27023=>1000,27024=>1000,27025=>1000,27026=>1000,27027=>1000,27028=>1000,
+ 27029=>1000,27030=>1000,27031=>1000,27032=>1000,27033=>1000,27034=>1000,27035=>1000,27036=>1000,27037=>1000,27038=>1000,27039=>1000,27040=>1000,27041=>1000,27042=>1000,27043=>1000,27044=>1000,
+ 27045=>1000,27046=>1000,27047=>1000,27048=>1000,27049=>1000,27050=>1000,27051=>1000,27052=>1000,27053=>1000,27054=>1000,27055=>1000,27056=>1000,27057=>1000,27058=>1000,27059=>1000,27060=>1000,
+ 27061=>1000,27062=>1000,27063=>1000,27064=>1000,27065=>1000,27066=>1000,27067=>1000,27068=>1000,27069=>1000,27070=>1000,27071=>1000,27072=>1000,27073=>1000,27074=>1000,27075=>1000,27076=>1000,
+ 27077=>1000,27078=>1000,27079=>1000,27080=>1000,27081=>1000,27082=>1000,27083=>1000,27084=>1000,27085=>1000,27086=>1000,27087=>1000,27088=>1000,27089=>1000,27090=>1000,27091=>1000,27092=>1000,
+ 27093=>1000,27094=>1000,27095=>1000,27096=>1000,27097=>1000,27098=>1000,27099=>1000,27100=>1000,27101=>1000,27102=>1000,27103=>1000,27104=>1000,27105=>1000,27106=>1000,27107=>1000,27108=>1000,
+ 27109=>1000,27110=>1000,27111=>1000,27112=>1000,27113=>1000,27114=>1000,27115=>1000,27116=>1000,27117=>1000,27118=>1000,27119=>1000,27120=>1000,27121=>1000,27122=>1000,27123=>1000,27124=>1000,
+ 27125=>1000,27126=>1000,27127=>1000,27128=>1000,27129=>1000,27130=>1000,27131=>1000,27132=>1000,27133=>1000,27134=>1000,27135=>1000,27136=>1000,27137=>1000,27138=>1000,27139=>1000,27140=>1000,
+ 27141=>1000,27142=>1000,27143=>1000,27144=>1000,27145=>1000,27146=>1000,27147=>1000,27148=>1000,27149=>1000,27150=>1000,27151=>1000,27152=>1000,27153=>1000,27154=>1000,27155=>1000,27156=>1000,
+ 27157=>1000,27158=>1000,27159=>1000,27160=>1000,27161=>1000,27162=>1000,27163=>1000,27164=>1000,27165=>1000,27166=>1000,27167=>1000,27168=>1000,27169=>1000,27170=>1000,27171=>1000,27172=>1000,
+ 27173=>1000,27174=>1000,27175=>1000,27176=>1000,27177=>1000,27178=>1000,27179=>1000,27180=>1000,27181=>1000,27182=>1000,27183=>1000,27184=>1000,27185=>1000,27186=>1000,27187=>1000,27188=>1000,
+ 27189=>1000,27190=>1000,27191=>1000,27192=>1000,27193=>1000,27194=>1000,27195=>1000,27196=>1000,27197=>1000,27198=>1000,27199=>1000,27200=>1000,27201=>1000,27202=>1000,27203=>1000,27204=>1000,
+ 27205=>1000,27206=>1000,27207=>1000,27208=>1000,27209=>1000,27210=>1000,27211=>1000,27212=>1000,27213=>1000,27214=>1000,27215=>1000,27216=>1000,27217=>1000,27218=>1000,27219=>1000,27220=>1000,
+ 27221=>1000,27222=>1000,27223=>1000,27224=>1000,27225=>1000,27226=>1000,27227=>1000,27228=>1000,27229=>1000,27230=>1000,27231=>1000,27232=>1000,27233=>1000,27234=>1000,27235=>1000,27236=>1000,
+ 27237=>1000,27238=>1000,27239=>1000,27240=>1000,27241=>1000,27242=>1000,27243=>1000,27244=>1000,27245=>1000,27246=>1000,27247=>1000,27248=>1000,27249=>1000,27250=>1000,27251=>1000,27252=>1000,
+ 27253=>1000,27254=>1000,27255=>1000,27256=>1000,27257=>1000,27258=>1000,27259=>1000,27260=>1000,27261=>1000,27262=>1000,27263=>1000,27264=>1000,27265=>1000,27266=>1000,27267=>1000,27268=>1000,
+ 27269=>1000,27270=>1000,27271=>1000,27272=>1000,27273=>1000,27274=>1000,27275=>1000,27276=>1000,27277=>1000,27278=>1000,27279=>1000,27280=>1000,27281=>1000,27282=>1000,27283=>1000,27284=>1000,
+ 27285=>1000,27286=>1000,27287=>1000,27288=>1000,27289=>1000,27290=>1000,27291=>1000,27292=>1000,27293=>1000,27294=>1000,27295=>1000,27296=>1000,27297=>1000,27298=>1000,27299=>1000,27300=>1000,
+ 27301=>1000,27302=>1000,27303=>1000,27304=>1000,27305=>1000,27306=>1000,27307=>1000,27308=>1000,27309=>1000,27310=>1000,27311=>1000,27312=>1000,27313=>1000,27314=>1000,27315=>1000,27316=>1000,
+ 27317=>1000,27318=>1000,27319=>1000,27320=>1000,27321=>1000,27322=>1000,27323=>1000,27324=>1000,27325=>1000,27326=>1000,27327=>1000,27328=>1000,27329=>1000,27330=>1000,27331=>1000,27332=>1000,
+ 27333=>1000,27334=>1000,27335=>1000,27336=>1000,27337=>1000,27338=>1000,27339=>1000,27340=>1000,27341=>1000,27342=>1000,27343=>1000,27344=>1000,27345=>1000,27346=>1000,27347=>1000,27348=>1000,
+ 27349=>1000,27350=>1000,27351=>1000,27352=>1000,27353=>1000,27354=>1000,27355=>1000,27356=>1000,27357=>1000,27358=>1000,27359=>1000,27360=>1000,27361=>1000,27362=>1000,27363=>1000,27364=>1000,
+ 27365=>1000,27366=>1000,27367=>1000,27368=>1000,27369=>1000,27370=>1000,27371=>1000,27372=>1000,27373=>1000,27374=>1000,27375=>1000,27376=>1000,27377=>1000,27378=>1000,27379=>1000,27380=>1000,
+ 27381=>1000,27382=>1000,27383=>1000,27384=>1000,27385=>1000,27386=>1000,27387=>1000,27388=>1000,27389=>1000,27390=>1000,27391=>1000,27392=>1000,27393=>1000,27394=>1000,27395=>1000,27396=>1000,
+ 27397=>1000,27398=>1000,27399=>1000,27400=>1000,27401=>1000,27402=>1000,27403=>1000,27404=>1000,27405=>1000,27406=>1000,27407=>1000,27408=>1000,27409=>1000,27410=>1000,27411=>1000,27412=>1000,
+ 27413=>1000,27414=>1000,27415=>1000,27416=>1000,27417=>1000,27418=>1000,27419=>1000,27420=>1000,27421=>1000,27422=>1000,27423=>1000,27424=>1000,27425=>1000,27426=>1000,27427=>1000,27428=>1000,
+ 27429=>1000,27430=>1000,27431=>1000,27432=>1000,27433=>1000,27434=>1000,27435=>1000,27436=>1000,27437=>1000,27438=>1000,27439=>1000,27440=>1000,27441=>1000,27442=>1000,27443=>1000,27444=>1000,
+ 27445=>1000,27446=>1000,27447=>1000,27448=>1000,27449=>1000,27450=>1000,27451=>1000,27452=>1000,27453=>1000,27454=>1000,27455=>1000,27456=>1000,27457=>1000,27458=>1000,27459=>1000,27460=>1000,
+ 27461=>1000,27462=>1000,27463=>1000,27464=>1000,27465=>1000,27466=>1000,27467=>1000,27468=>1000,27469=>1000,27470=>1000,27471=>1000,27472=>1000,27473=>1000,27474=>1000,27475=>1000,27476=>1000,
+ 27477=>1000,27478=>1000,27479=>1000,27480=>1000,27481=>1000,27482=>1000,27483=>1000,27484=>1000,27485=>1000,27486=>1000,27487=>1000,27488=>1000,27489=>1000,27490=>1000,27491=>1000,27492=>1000,
+ 27493=>1000,27494=>1000,27495=>1000,27496=>1000,27497=>1000,27498=>1000,27499=>1000,27500=>1000,27501=>1000,27502=>1000,27503=>1000,27504=>1000,27505=>1000,27506=>1000,27507=>1000,27508=>1000,
+ 27509=>1000,27510=>1000,27511=>1000,27512=>1000,27513=>1000,27514=>1000,27515=>1000,27516=>1000,27517=>1000,27518=>1000,27519=>1000,27520=>1000,27521=>1000,27522=>1000,27523=>1000,27524=>1000,
+ 27525=>1000,27526=>1000,27527=>1000,27528=>1000,27529=>1000,27530=>1000,27531=>1000,27532=>1000,27533=>1000,27534=>1000,27535=>1000,27536=>1000,27537=>1000,27538=>1000,27539=>1000,27540=>1000,
+ 27541=>1000,27542=>1000,27543=>1000,27544=>1000,27545=>1000,27546=>1000,27547=>1000,27548=>1000,27549=>1000,27550=>1000,27551=>1000,27552=>1000,27553=>1000,27554=>1000,27555=>1000,27556=>1000,
+ 27557=>1000,27558=>1000,27559=>1000,27560=>1000,27561=>1000,27562=>1000,27563=>1000,27564=>1000,27565=>1000,27566=>1000,27567=>1000,27568=>1000,27569=>1000,27570=>1000,27571=>1000,27572=>1000,
+ 27573=>1000,27574=>1000,27575=>1000,27576=>1000,27577=>1000,27578=>1000,27579=>1000,27580=>1000,27581=>1000,27582=>1000,27583=>1000,27584=>1000,27585=>1000,27586=>1000,27587=>1000,27588=>1000,
+ 27589=>1000,27590=>1000,27591=>1000,27592=>1000,27593=>1000,27594=>1000,27595=>1000,27596=>1000,27597=>1000,27598=>1000,27599=>1000,27600=>1000,27601=>1000,27602=>1000,27603=>1000,27604=>1000,
+ 27605=>1000,27606=>1000,27607=>1000,27608=>1000,27609=>1000,27610=>1000,27611=>1000,27612=>1000,27613=>1000,27614=>1000,27615=>1000,27616=>1000,27617=>1000,27618=>1000,27619=>1000,27620=>1000,
+ 27621=>1000,27622=>1000,27623=>1000,27624=>1000,27625=>1000,27626=>1000,27627=>1000,27628=>1000,27629=>1000,27630=>1000,27631=>1000,27632=>1000,27633=>1000,27634=>1000,27635=>1000,27636=>1000,
+ 27637=>1000,27638=>1000,27639=>1000,27640=>1000,27641=>1000,27642=>1000,27643=>1000,27644=>1000,27645=>1000,27646=>1000,27647=>1000,27648=>1000,27649=>1000,27650=>1000,27651=>1000,27652=>1000,
+ 27653=>1000,27654=>1000,27655=>1000,27656=>1000,27657=>1000,27658=>1000,27659=>1000,27660=>1000,27661=>1000,27662=>1000,27663=>1000,27664=>1000,27665=>1000,27666=>1000,27667=>1000,27668=>1000,
+ 27669=>1000,27670=>1000,27671=>1000,27672=>1000,27673=>1000,27674=>1000,27675=>1000,27676=>1000,27677=>1000,27678=>1000,27679=>1000,27680=>1000,27681=>1000,27682=>1000,27683=>1000,27684=>1000,
+ 27685=>1000,27686=>1000,27687=>1000,27688=>1000,27689=>1000,27690=>1000,27691=>1000,27692=>1000,27693=>1000,27694=>1000,27695=>1000,27696=>1000,27697=>1000,27698=>1000,27699=>1000,27700=>1000,
+ 27701=>1000,27702=>1000,27703=>1000,27704=>1000,27705=>1000,27706=>1000,27707=>1000,27708=>1000,27709=>1000,27710=>1000,27711=>1000,27712=>1000,27713=>1000,27714=>1000,27715=>1000,27716=>1000,
+ 27717=>1000,27718=>1000,27719=>1000,27720=>1000,27721=>1000,27722=>1000,27723=>1000,27724=>1000,27725=>1000,27726=>1000,27727=>1000,27728=>1000,27729=>1000,27730=>1000,27731=>1000,27732=>1000,
+ 27733=>1000,27734=>1000,27735=>1000,27736=>1000,27737=>1000,27738=>1000,27739=>1000,27740=>1000,27741=>1000,27742=>1000,27743=>1000,27744=>1000,27745=>1000,27746=>1000,27747=>1000,27748=>1000,
+ 27749=>1000,27750=>1000,27751=>1000,27752=>1000,27753=>1000,27754=>1000,27755=>1000,27756=>1000,27757=>1000,27758=>1000,27759=>1000,27760=>1000,27761=>1000,27762=>1000,27763=>1000,27764=>1000,
+ 27765=>1000,27766=>1000,27767=>1000,27768=>1000,27769=>1000,27770=>1000,27771=>1000,27772=>1000,27773=>1000,27774=>1000,27775=>1000,27776=>1000,27777=>1000,27778=>1000,27779=>1000,27780=>1000,
+ 27781=>1000,27782=>1000,27783=>1000,27784=>1000,27785=>1000,27786=>1000,27787=>1000,27788=>1000,27789=>1000,27790=>1000,27791=>1000,27792=>1000,27793=>1000,27794=>1000,27795=>1000,27796=>1000,
+ 27797=>1000,27798=>1000,27799=>1000,27800=>1000,27801=>1000,27802=>1000,27803=>1000,27804=>1000,27805=>1000,27806=>1000,27807=>1000,27808=>1000,27809=>1000,27810=>1000,27811=>1000,27812=>1000,
+ 27813=>1000,27814=>1000,27815=>1000,27816=>1000,27817=>1000,27818=>1000,27819=>1000,27820=>1000,27821=>1000,27822=>1000,27823=>1000,27824=>1000,27825=>1000,27826=>1000,27827=>1000,27828=>1000,
+ 27829=>1000,27830=>1000,27831=>1000,27832=>1000,27833=>1000,27834=>1000,27835=>1000,27836=>1000,27837=>1000,27838=>1000,27839=>1000,27840=>1000,27841=>1000,27842=>1000,27843=>1000,27844=>1000,
+ 27845=>1000,27846=>1000,27847=>1000,27848=>1000,27849=>1000,27850=>1000,27851=>1000,27852=>1000,27853=>1000,27854=>1000,27855=>1000,27856=>1000,27857=>1000,27858=>1000,27859=>1000,27860=>1000,
+ 27861=>1000,27862=>1000,27863=>1000,27864=>1000,27865=>1000,27866=>1000,27867=>1000,27868=>1000,27869=>1000,27870=>1000,27871=>1000,27872=>1000,27873=>1000,27874=>1000,27875=>1000,27876=>1000,
+ 27877=>1000,27878=>1000,27879=>1000,27880=>1000,27881=>1000,27882=>1000,27883=>1000,27884=>1000,27885=>1000,27886=>1000,27887=>1000,27888=>1000,27889=>1000,27890=>1000,27891=>1000,27892=>1000,
+ 27893=>1000,27894=>1000,27895=>1000,27896=>1000,27897=>1000,27898=>1000,27899=>1000,27900=>1000,27901=>1000,27902=>1000,27903=>1000,27904=>1000,27905=>1000,27906=>1000,27907=>1000,27908=>1000,
+ 27909=>1000,27910=>1000,27911=>1000,27912=>1000,27913=>1000,27914=>1000,27915=>1000,27916=>1000,27917=>1000,27918=>1000,27919=>1000,27920=>1000,27921=>1000,27922=>1000,27923=>1000,27924=>1000,
+ 27925=>1000,27926=>1000,27927=>1000,27928=>1000,27929=>1000,27930=>1000,27931=>1000,27932=>1000,27933=>1000,27934=>1000,27935=>1000,27936=>1000,27937=>1000,27938=>1000,27939=>1000,27940=>1000,
+ 27941=>1000,27942=>1000,27943=>1000,27944=>1000,27945=>1000,27946=>1000,27947=>1000,27948=>1000,27949=>1000,27950=>1000,27951=>1000,27952=>1000,27953=>1000,27954=>1000,27955=>1000,27956=>1000,
+ 27957=>1000,27958=>1000,27959=>1000,27960=>1000,27961=>1000,27962=>1000,27963=>1000,27964=>1000,27965=>1000,27966=>1000,27967=>1000,27968=>1000,27969=>1000,27970=>1000,27971=>1000,27972=>1000,
+ 27973=>1000,27974=>1000,27975=>1000,27976=>1000,27977=>1000,27978=>1000,27979=>1000,27980=>1000,27981=>1000,27982=>1000,27983=>1000,27984=>1000,27985=>1000,27986=>1000,27987=>1000,27988=>1000,
+ 27989=>1000,27990=>1000,27991=>1000,27992=>1000,27993=>1000,27994=>1000,27995=>1000,27996=>1000,27997=>1000,27998=>1000,27999=>1000,28000=>1000,28001=>1000,28002=>1000,28003=>1000,28004=>1000,
+ 28005=>1000,28006=>1000,28007=>1000,28008=>1000,28009=>1000,28010=>1000,28011=>1000,28012=>1000,28013=>1000,28014=>1000,28015=>1000,28016=>1000,28017=>1000,28018=>1000,28019=>1000,28020=>1000,
+ 28021=>1000,28022=>1000,28023=>1000,28024=>1000,28025=>1000,28026=>1000,28027=>1000,28028=>1000,28029=>1000,28030=>1000,28031=>1000,28032=>1000,28033=>1000,28034=>1000,28035=>1000,28036=>1000,
+ 28037=>1000,28038=>1000,28039=>1000,28040=>1000,28041=>1000,28042=>1000,28043=>1000,28044=>1000,28045=>1000,28046=>1000,28047=>1000,28048=>1000,28049=>1000,28050=>1000,28051=>1000,28052=>1000,
+ 28053=>1000,28054=>1000,28055=>1000,28056=>1000,28057=>1000,28058=>1000,28059=>1000,28060=>1000,28061=>1000,28062=>1000,28063=>1000,28064=>1000,28065=>1000,28066=>1000,28067=>1000,28068=>1000,
+ 28069=>1000,28070=>1000,28071=>1000,28072=>1000,28073=>1000,28074=>1000,28075=>1000,28076=>1000,28077=>1000,28078=>1000,28079=>1000,28080=>1000,28081=>1000,28082=>1000,28083=>1000,28084=>1000,
+ 28085=>1000,28086=>1000,28087=>1000,28088=>1000,28089=>1000,28090=>1000,28091=>1000,28092=>1000,28093=>1000,28094=>1000,28095=>1000,28096=>1000,28097=>1000,28098=>1000,28099=>1000,28100=>1000,
+ 28101=>1000,28102=>1000,28103=>1000,28104=>1000,28105=>1000,28106=>1000,28107=>1000,28108=>1000,28109=>1000,28110=>1000,28111=>1000,28112=>1000,28113=>1000,28114=>1000,28115=>1000,28116=>1000,
+ 28117=>1000,28118=>1000,28119=>1000,28120=>1000,28121=>1000,28122=>1000,28123=>1000,28124=>1000,28125=>1000,28126=>1000,28127=>1000,28128=>1000,28129=>1000,28130=>1000,28131=>1000,28132=>1000,
+ 28133=>1000,28134=>1000,28135=>1000,28136=>1000,28137=>1000,28138=>1000,28139=>1000,28140=>1000,28141=>1000,28142=>1000,28143=>1000,28144=>1000,28145=>1000,28146=>1000,28147=>1000,28148=>1000,
+ 28149=>1000,28150=>1000,28151=>1000,28152=>1000,28153=>1000,28154=>1000,28155=>1000,28156=>1000,28157=>1000,28158=>1000,28159=>1000,28160=>1000,28161=>1000,28162=>1000,28163=>1000,28164=>1000,
+ 28165=>1000,28166=>1000,28167=>1000,28168=>1000,28169=>1000,28170=>1000,28171=>1000,28172=>1000,28173=>1000,28174=>1000,28175=>1000,28176=>1000,28177=>1000,28178=>1000,28179=>1000,28180=>1000,
+ 28181=>1000,28182=>1000,28183=>1000,28184=>1000,28185=>1000,28186=>1000,28187=>1000,28188=>1000,28189=>1000,28190=>1000,28191=>1000,28192=>1000,28193=>1000,28194=>1000,28195=>1000,28196=>1000,
+ 28197=>1000,28198=>1000,28199=>1000,28200=>1000,28201=>1000,28202=>1000,28203=>1000,28204=>1000,28205=>1000,28206=>1000,28207=>1000,28208=>1000,28209=>1000,28210=>1000,28211=>1000,28212=>1000,
+ 28213=>1000,28214=>1000,28215=>1000,28216=>1000,28217=>1000,28218=>1000,28219=>1000,28220=>1000,28221=>1000,28222=>1000,28223=>1000,28224=>1000,28225=>1000,28226=>1000,28227=>1000,28228=>1000,
+ 28229=>1000,28230=>1000,28231=>1000,28232=>1000,28233=>1000,28234=>1000,28235=>1000,28236=>1000,28237=>1000,28238=>1000,28239=>1000,28240=>1000,28241=>1000,28242=>1000,28243=>1000,28244=>1000,
+ 28245=>1000,28246=>1000,28247=>1000,28248=>1000,28249=>1000,28250=>1000,28251=>1000,28252=>1000,28253=>1000,28254=>1000,28255=>1000,28256=>1000,28257=>1000,28258=>1000,28259=>1000,28260=>1000,
+ 28261=>1000,28262=>1000,28263=>1000,28264=>1000,28265=>1000,28266=>1000,28267=>1000,28268=>1000,28269=>1000,28270=>1000,28271=>1000,28272=>1000,28273=>1000,28274=>1000,28275=>1000,28276=>1000,
+ 28277=>1000,28278=>1000,28279=>1000,28280=>1000,28281=>1000,28282=>1000,28283=>1000,28284=>1000,28285=>1000,28286=>1000,28287=>1000,28288=>1000,28289=>1000,28290=>1000,28291=>1000,28292=>1000,
+ 28293=>1000,28294=>1000,28295=>1000,28296=>1000,28297=>1000,28298=>1000,28299=>1000,28300=>1000,28301=>1000,28302=>1000,28303=>1000,28304=>1000,28305=>1000,28306=>1000,28307=>1000,28308=>1000,
+ 28309=>1000,28310=>1000,28311=>1000,28312=>1000,28313=>1000,28314=>1000,28315=>1000,28316=>1000,28317=>1000,28318=>1000,28319=>1000,28320=>1000,28321=>1000,28322=>1000,28323=>1000,28324=>1000,
+ 28325=>1000,28326=>1000,28327=>1000,28328=>1000,28329=>1000,28330=>1000,28331=>1000,28332=>1000,28333=>1000,28334=>1000,28335=>1000,28336=>1000,28337=>1000,28338=>1000,28339=>1000,28340=>1000,
+ 28341=>1000,28342=>1000,28343=>1000,28344=>1000,28345=>1000,28346=>1000,28347=>1000,28348=>1000,28349=>1000,28350=>1000,28351=>1000,28352=>1000,28353=>1000,28354=>1000,28355=>1000,28356=>1000,
+ 28357=>1000,28358=>1000,28359=>1000,28360=>1000,28361=>1000,28362=>1000,28363=>1000,28364=>1000,28365=>1000,28366=>1000,28367=>1000,28368=>1000,28369=>1000,28370=>1000,28371=>1000,28372=>1000,
+ 28373=>1000,28374=>1000,28375=>1000,28376=>1000,28377=>1000,28378=>1000,28379=>1000,28380=>1000,28381=>1000,28382=>1000,28383=>1000,28384=>1000,28385=>1000,28386=>1000,28387=>1000,28388=>1000,
+ 28389=>1000,28390=>1000,28391=>1000,28392=>1000,28393=>1000,28394=>1000,28395=>1000,28396=>1000,28397=>1000,28398=>1000,28399=>1000,28400=>1000,28401=>1000,28402=>1000,28403=>1000,28404=>1000,
+ 28405=>1000,28406=>1000,28407=>1000,28408=>1000,28409=>1000,28410=>1000,28411=>1000,28412=>1000,28413=>1000,28414=>1000,28415=>1000,28416=>1000,28417=>1000,28418=>1000,28419=>1000,28420=>1000,
+ 28421=>1000,28422=>1000,28423=>1000,28424=>1000,28425=>1000,28426=>1000,28427=>1000,28428=>1000,28429=>1000,28430=>1000,28431=>1000,28432=>1000,28433=>1000,28434=>1000,28435=>1000,28436=>1000,
+ 28437=>1000,28438=>1000,28439=>1000,28440=>1000,28441=>1000,28442=>1000,28443=>1000,28444=>1000,28445=>1000,28446=>1000,28447=>1000,28448=>1000,28449=>1000,28450=>1000,28451=>1000,28452=>1000,
+ 28453=>1000,28454=>1000,28455=>1000,28456=>1000,28457=>1000,28458=>1000,28459=>1000,28460=>1000,28461=>1000,28462=>1000,28463=>1000,28464=>1000,28465=>1000,28466=>1000,28467=>1000,28468=>1000,
+ 28469=>1000,28470=>1000,28471=>1000,28472=>1000,28473=>1000,28474=>1000,28475=>1000,28476=>1000,28477=>1000,28478=>1000,28479=>1000,28480=>1000,28481=>1000,28482=>1000,28483=>1000,28484=>1000,
+ 28485=>1000,28486=>1000,28487=>1000,28488=>1000,28489=>1000,28490=>1000,28491=>1000,28492=>1000,28493=>1000,28494=>1000,28495=>1000,28496=>1000,28497=>1000,28498=>1000,28499=>1000,28500=>1000,
+ 28501=>1000,28502=>1000,28503=>1000,28504=>1000,28505=>1000,28506=>1000,28507=>1000,28508=>1000,28509=>1000,28510=>1000,28511=>1000,28512=>1000,28513=>1000,28514=>1000,28515=>1000,28516=>1000,
+ 28517=>1000,28518=>1000,28519=>1000,28520=>1000,28521=>1000,28522=>1000,28523=>1000,28524=>1000,28525=>1000,28526=>1000,28527=>1000,28528=>1000,28529=>1000,28530=>1000,28531=>1000,28532=>1000,
+ 28533=>1000,28534=>1000,28535=>1000,28536=>1000,28537=>1000,28538=>1000,28539=>1000,28540=>1000,28541=>1000,28542=>1000,28543=>1000,28544=>1000,28545=>1000,28546=>1000,28547=>1000,28548=>1000,
+ 28549=>1000,28550=>1000,28551=>1000,28552=>1000,28553=>1000,28554=>1000,28555=>1000,28556=>1000,28557=>1000,28558=>1000,28559=>1000,28560=>1000,28561=>1000,28562=>1000,28563=>1000,28564=>1000,
+ 28565=>1000,28566=>1000,28567=>1000,28568=>1000,28569=>1000,28570=>1000,28571=>1000,28572=>1000,28573=>1000,28574=>1000,28575=>1000,28576=>1000,28577=>1000,28578=>1000,28579=>1000,28580=>1000,
+ 28581=>1000,28582=>1000,28583=>1000,28584=>1000,28585=>1000,28586=>1000,28587=>1000,28588=>1000,28589=>1000,28590=>1000,28591=>1000,28592=>1000,28593=>1000,28594=>1000,28595=>1000,28596=>1000,
+ 28597=>1000,28598=>1000,28599=>1000,28600=>1000,28601=>1000,28602=>1000,28603=>1000,28604=>1000,28605=>1000,28606=>1000,28607=>1000,28608=>1000,28609=>1000,28610=>1000,28611=>1000,28612=>1000,
+ 28613=>1000,28614=>1000,28615=>1000,28616=>1000,28617=>1000,28618=>1000,28619=>1000,28620=>1000,28621=>1000,28622=>1000,28623=>1000,28624=>1000,28625=>1000,28626=>1000,28627=>1000,28628=>1000,
+ 28629=>1000,28630=>1000,28631=>1000,28632=>1000,28633=>1000,28634=>1000,28635=>1000,28636=>1000,28637=>1000,28638=>1000,28639=>1000,28640=>1000,28641=>1000,28642=>1000,28643=>1000,28644=>1000,
+ 28645=>1000,28646=>1000,28647=>1000,28648=>1000,28649=>1000,28650=>1000,28651=>1000,28652=>1000,28653=>1000,28654=>1000,28655=>1000,28656=>1000,28657=>1000,28658=>1000,28659=>1000,28660=>1000,
+ 28661=>1000,28662=>1000,28663=>1000,28664=>1000,28665=>1000,28666=>1000,28667=>1000,28668=>1000,28669=>1000,28670=>1000,28671=>1000,28672=>1000,28673=>1000,28674=>1000,28675=>1000,28676=>1000,
+ 28677=>1000,28678=>1000,28679=>1000,28680=>1000,28681=>1000,28682=>1000,28683=>1000,28684=>1000,28685=>1000,28686=>1000,28687=>1000,28688=>1000,28689=>1000,28690=>1000,28691=>1000,28692=>1000,
+ 28693=>1000,28694=>1000,28695=>1000,28696=>1000,28697=>1000,28698=>1000,28699=>1000,28700=>1000,28701=>1000,28702=>1000,28703=>1000,28704=>1000,28705=>1000,28706=>1000,28707=>1000,28708=>1000,
+ 28709=>1000,28710=>1000,28711=>1000,28712=>1000,28713=>1000,28714=>1000,28715=>1000,28716=>1000,28717=>1000,28718=>1000,28719=>1000,28720=>1000,28721=>1000,28722=>1000,28723=>1000,28724=>1000,
+ 28725=>1000,28726=>1000,28727=>1000,28728=>1000,28729=>1000,28730=>1000,28731=>1000,28732=>1000,28733=>1000,28734=>1000,28735=>1000,28736=>1000,28737=>1000,28738=>1000,28739=>1000,28740=>1000,
+ 28741=>1000,28742=>1000,28743=>1000,28744=>1000,28745=>1000,28746=>1000,28747=>1000,28748=>1000,28749=>1000,28750=>1000,28751=>1000,28752=>1000,28753=>1000,28754=>1000,28755=>1000,28756=>1000,
+ 28757=>1000,28758=>1000,28759=>1000,28760=>1000,28761=>1000,28762=>1000,28763=>1000,28764=>1000,28765=>1000,28766=>1000,28767=>1000,28768=>1000,28769=>1000,28770=>1000,28771=>1000,28772=>1000,
+ 28773=>1000,28774=>1000,28775=>1000,28776=>1000,28777=>1000,28778=>1000,28779=>1000,28780=>1000,28781=>1000,28782=>1000,28783=>1000,28784=>1000,28785=>1000,28786=>1000,28787=>1000,28788=>1000,
+ 28789=>1000,28790=>1000,28791=>1000,28792=>1000,28793=>1000,28794=>1000,28795=>1000,28796=>1000,28797=>1000,28798=>1000,28799=>1000,28800=>1000,28801=>1000,28802=>1000,28803=>1000,28804=>1000,
+ 28805=>1000,28806=>1000,28807=>1000,28808=>1000,28809=>1000,28810=>1000,28811=>1000,28812=>1000,28813=>1000,28814=>1000,28815=>1000,28816=>1000,28817=>1000,28818=>1000,28819=>1000,28820=>1000,
+ 28821=>1000,28822=>1000,28823=>1000,28824=>1000,28825=>1000,28826=>1000,28827=>1000,28828=>1000,28829=>1000,28830=>1000,28831=>1000,28832=>1000,28833=>1000,28834=>1000,28835=>1000,28836=>1000,
+ 28837=>1000,28838=>1000,28839=>1000,28840=>1000,28841=>1000,28842=>1000,28843=>1000,28844=>1000,28845=>1000,28846=>1000,28847=>1000,28848=>1000,28849=>1000,28850=>1000,28851=>1000,28852=>1000,
+ 28853=>1000,28854=>1000,28855=>1000,28856=>1000,28857=>1000,28858=>1000,28859=>1000,28860=>1000,28861=>1000,28862=>1000,28863=>1000,28864=>1000,28865=>1000,28866=>1000,28867=>1000,28868=>1000,
+ 28869=>1000,28870=>1000,28871=>1000,28872=>1000,28873=>1000,28874=>1000,28875=>1000,28876=>1000,28877=>1000,28878=>1000,28879=>1000,28880=>1000,28881=>1000,28882=>1000,28883=>1000,28884=>1000,
+ 28885=>1000,28886=>1000,28887=>1000,28888=>1000,28889=>1000,28890=>1000,28891=>1000,28892=>1000,28893=>1000,28894=>1000,28895=>1000,28896=>1000,28897=>1000,28898=>1000,28899=>1000,28900=>1000,
+ 28901=>1000,28902=>1000,28903=>1000,28904=>1000,28905=>1000,28906=>1000,28907=>1000,28908=>1000,28909=>1000,28910=>1000,28911=>1000,28912=>1000,28913=>1000,28914=>1000,28915=>1000,28916=>1000,
+ 28917=>1000,28918=>1000,28919=>1000,28920=>1000,28921=>1000,28922=>1000,28923=>1000,28924=>1000,28925=>1000,28926=>1000,28927=>1000,28928=>1000,28929=>1000,28930=>1000,28931=>1000,28932=>1000,
+ 28933=>1000,28934=>1000,28935=>1000,28936=>1000,28937=>1000,28938=>1000,28939=>1000,28940=>1000,28941=>1000,28942=>1000,28943=>1000,28944=>1000,28945=>1000,28946=>1000,28947=>1000,28948=>1000,
+ 28949=>1000,28950=>1000,28951=>1000,28952=>1000,28953=>1000,28954=>1000,28955=>1000,28956=>1000,28957=>1000,28958=>1000,28959=>1000,28960=>1000,28961=>1000,28962=>1000,28963=>1000,28964=>1000,
+ 28965=>1000,28966=>1000,28967=>1000,28968=>1000,28969=>1000,28970=>1000,28971=>1000,28972=>1000,28973=>1000,28974=>1000,28975=>1000,28976=>1000,28977=>1000,28978=>1000,28979=>1000,28980=>1000,
+ 28981=>1000,28982=>1000,28983=>1000,28984=>1000,28985=>1000,28986=>1000,28987=>1000,28988=>1000,28989=>1000,28990=>1000,28991=>1000,28992=>1000,28993=>1000,28994=>1000,28995=>1000,28996=>1000,
+ 28997=>1000,28998=>1000,28999=>1000,29000=>1000,29001=>1000,29002=>1000,29003=>1000,29004=>1000,29005=>1000,29006=>1000,29007=>1000,29008=>1000,29009=>1000,29010=>1000,29011=>1000,29012=>1000,
+ 29013=>1000,29014=>1000,29015=>1000,29016=>1000,29017=>1000,29018=>1000,29019=>1000,29020=>1000,29021=>1000,29022=>1000,29023=>1000,29024=>1000,29025=>1000,29026=>1000,29027=>1000,29028=>1000,
+ 29029=>1000,29030=>1000,29031=>1000,29032=>1000,29033=>1000,29034=>1000,29035=>1000,29036=>1000,29037=>1000,29038=>1000,29039=>1000,29040=>1000,29041=>1000,29042=>1000,29043=>1000,29044=>1000,
+ 29045=>1000,29046=>1000,29047=>1000,29048=>1000,29049=>1000,29050=>1000,29051=>1000,29052=>1000,29053=>1000,29054=>1000,29055=>1000,29056=>1000,29057=>1000,29058=>1000,29059=>1000,29060=>1000,
+ 29061=>1000,29062=>1000,29063=>1000,29064=>1000,29065=>1000,29066=>1000,29067=>1000,29068=>1000,29069=>1000,29070=>1000,29071=>1000,29072=>1000,29073=>1000,29074=>1000,29075=>1000,29076=>1000,
+ 29077=>1000,29078=>1000,29079=>1000,29080=>1000,29081=>1000,29082=>1000,29083=>1000,29084=>1000,29085=>1000,29086=>1000,29087=>1000,29088=>1000,29089=>1000,29090=>1000,29091=>1000,29092=>1000,
+ 29093=>1000,29094=>1000,29095=>1000,29096=>1000,29097=>1000,29098=>1000,29099=>1000,29100=>1000,29101=>1000,29102=>1000,29103=>1000,29104=>1000,29105=>1000,29106=>1000,29107=>1000,29108=>1000,
+ 29109=>1000,29110=>1000,29111=>1000,29112=>1000,29113=>1000,29114=>1000,29115=>1000,29116=>1000,29117=>1000,29118=>1000,29119=>1000,29120=>1000,29121=>1000,29122=>1000,29123=>1000,29124=>1000,
+ 29125=>1000,29126=>1000,29127=>1000,29128=>1000,29129=>1000,29130=>1000,29131=>1000,29132=>1000,29133=>1000,29134=>1000,29135=>1000,29136=>1000,29137=>1000,29138=>1000,29139=>1000,29140=>1000,
+ 29141=>1000,29142=>1000,29143=>1000,29144=>1000,29145=>1000,29146=>1000,29147=>1000,29148=>1000,29149=>1000,29150=>1000,29151=>1000,29152=>1000,29153=>1000,29154=>1000,29155=>1000,29156=>1000,
+ 29157=>1000,29158=>1000,29159=>1000,29160=>1000,29161=>1000,29162=>1000,29163=>1000,29164=>1000,29165=>1000,29166=>1000,29167=>1000,29168=>1000,29169=>1000,29170=>1000,29171=>1000,29172=>1000,
+ 29173=>1000,29174=>1000,29175=>1000,29176=>1000,29177=>1000,29178=>1000,29179=>1000,29180=>1000,29181=>1000,29182=>1000,29183=>1000,29184=>1000,29185=>1000,29186=>1000,29187=>1000,29188=>1000,
+ 29189=>1000,29190=>1000,29191=>1000,29192=>1000,29193=>1000,29194=>1000,29195=>1000,29196=>1000,29197=>1000,29198=>1000,29199=>1000,29200=>1000,29201=>1000,29202=>1000,29203=>1000,29204=>1000,
+ 29205=>1000,29206=>1000,29207=>1000,29208=>1000,29209=>1000,29210=>1000,29211=>1000,29212=>1000,29213=>1000,29214=>1000,29215=>1000,29216=>1000,29217=>1000,29218=>1000,29219=>1000,29220=>1000,
+ 29221=>1000,29222=>1000,29223=>1000,29224=>1000,29225=>1000,29226=>1000,29227=>1000,29228=>1000,29229=>1000,29230=>1000,29231=>1000,29232=>1000,29233=>1000,29234=>1000,29235=>1000,29236=>1000,
+ 29237=>1000,29238=>1000,29239=>1000,29240=>1000,29241=>1000,29242=>1000,29243=>1000,29244=>1000,29245=>1000,29246=>1000,29247=>1000,29248=>1000,29249=>1000,29250=>1000,29251=>1000,29252=>1000,
+ 29253=>1000,29254=>1000,29255=>1000,29256=>1000,29257=>1000,29258=>1000,29259=>1000,29260=>1000,29261=>1000,29262=>1000,29263=>1000,29264=>1000,29265=>1000,29266=>1000,29267=>1000,29268=>1000,
+ 29269=>1000,29270=>1000,29271=>1000,29272=>1000,29273=>1000,29274=>1000,29275=>1000,29276=>1000,29277=>1000,29278=>1000,29279=>1000,29280=>1000,29281=>1000,29282=>1000,29283=>1000,29284=>1000,
+ 29285=>1000,29286=>1000,29287=>1000,29288=>1000,29289=>1000,29290=>1000,29291=>1000,29292=>1000,29293=>1000,29294=>1000,29295=>1000,29296=>1000,29297=>1000,29298=>1000,29299=>1000,29300=>1000,
+ 29301=>1000,29302=>1000,29303=>1000,29304=>1000,29305=>1000,29306=>1000,29307=>1000,29308=>1000,29309=>1000,29310=>1000,29311=>1000,29312=>1000,29313=>1000,29314=>1000,29315=>1000,29316=>1000,
+ 29317=>1000,29318=>1000,29319=>1000,29320=>1000,29321=>1000,29322=>1000,29323=>1000,29324=>1000,29325=>1000,29326=>1000,29327=>1000,29328=>1000,29329=>1000,29330=>1000,29331=>1000,29332=>1000,
+ 29333=>1000,29334=>1000,29335=>1000,29336=>1000,29337=>1000,29338=>1000,29339=>1000,29340=>1000,29341=>1000,29342=>1000,29343=>1000,29344=>1000,29345=>1000,29346=>1000,29347=>1000,29348=>1000,
+ 29349=>1000,29350=>1000,29351=>1000,29352=>1000,29353=>1000,29354=>1000,29355=>1000,29356=>1000,29357=>1000,29358=>1000,29359=>1000,29360=>1000,29361=>1000,29362=>1000,29363=>1000,29364=>1000,
+ 29365=>1000,29366=>1000,29367=>1000,29368=>1000,29369=>1000,29370=>1000,29371=>1000,29372=>1000,29373=>1000,29374=>1000,29375=>1000,29376=>1000,29377=>1000,29378=>1000,29379=>1000,29380=>1000,
+ 29381=>1000,29382=>1000,29383=>1000,29384=>1000,29385=>1000,29386=>1000,29387=>1000,29388=>1000,29389=>1000,29390=>1000,29391=>1000,29392=>1000,29393=>1000,29394=>1000,29395=>1000,29396=>1000,
+ 29397=>1000,29398=>1000,29399=>1000,29400=>1000,29401=>1000,29402=>1000,29403=>1000,29404=>1000,29405=>1000,29406=>1000,29407=>1000,29408=>1000,29409=>1000,29410=>1000,29411=>1000,29412=>1000,
+ 29413=>1000,29414=>1000,29415=>1000,29416=>1000,29417=>1000,29418=>1000,29419=>1000,29420=>1000,29421=>1000,29422=>1000,29423=>1000,29424=>1000,29425=>1000,29426=>1000,29427=>1000,29428=>1000,
+ 29429=>1000,29430=>1000,29431=>1000,29432=>1000,29433=>1000,29434=>1000,29435=>1000,29436=>1000,29437=>1000,29438=>1000,29439=>1000,29440=>1000,29441=>1000,29442=>1000,29443=>1000,29444=>1000,
+ 29445=>1000,29446=>1000,29447=>1000,29448=>1000,29449=>1000,29450=>1000,29451=>1000,29452=>1000,29453=>1000,29454=>1000,29455=>1000,29456=>1000,29457=>1000,29458=>1000,29459=>1000,29460=>1000,
+ 29461=>1000,29462=>1000,29463=>1000,29464=>1000,29465=>1000,29466=>1000,29467=>1000,29468=>1000,29469=>1000,29470=>1000,29471=>1000,29472=>1000,29473=>1000,29474=>1000,29475=>1000,29476=>1000,
+ 29477=>1000,29478=>1000,29479=>1000,29480=>1000,29481=>1000,29482=>1000,29483=>1000,29484=>1000,29485=>1000,29486=>1000,29487=>1000,29488=>1000,29489=>1000,29490=>1000,29491=>1000,29492=>1000,
+ 29493=>1000,29494=>1000,29495=>1000,29496=>1000,29497=>1000,29498=>1000,29499=>1000,29500=>1000,29501=>1000,29502=>1000,29503=>1000,29504=>1000,29505=>1000,29506=>1000,29507=>1000,29508=>1000,
+ 29509=>1000,29510=>1000,29511=>1000,29512=>1000,29513=>1000,29514=>1000,29515=>1000,29516=>1000,29517=>1000,29518=>1000,29519=>1000,29520=>1000,29521=>1000,29522=>1000,29523=>1000,29524=>1000,
+ 29525=>1000,29526=>1000,29527=>1000,29528=>1000,29529=>1000,29530=>1000,29531=>1000,29532=>1000,29533=>1000,29534=>1000,29535=>1000,29536=>1000,29537=>1000,29538=>1000,29539=>1000,29540=>1000,
+ 29541=>1000,29542=>1000,29543=>1000,29544=>1000,29545=>1000,29546=>1000,29547=>1000,29548=>1000,29549=>1000,29550=>1000,29551=>1000,29552=>1000,29553=>1000,29554=>1000,29555=>1000,29556=>1000,
+ 29557=>1000,29558=>1000,29559=>1000,29560=>1000,29561=>1000,29562=>1000,29563=>1000,29564=>1000,29565=>1000,29566=>1000,29567=>1000,29568=>1000,29569=>1000,29570=>1000,29571=>1000,29572=>1000,
+ 29573=>1000,29574=>1000,29575=>1000,29576=>1000,29577=>1000,29578=>1000,29579=>1000,29580=>1000,29581=>1000,29582=>1000,29583=>1000,29584=>1000,29585=>1000,29586=>1000,29587=>1000,29588=>1000,
+ 29589=>1000,29590=>1000,29591=>1000,29592=>1000,29593=>1000,29594=>1000,29595=>1000,29596=>1000,29597=>1000,29598=>1000,29599=>1000,29600=>1000,29601=>1000,29602=>1000,29603=>1000,29604=>1000,
+ 29605=>1000,29606=>1000,29607=>1000,29608=>1000,29609=>1000,29610=>1000,29611=>1000,29612=>1000,29613=>1000,29614=>1000,29615=>1000,29616=>1000,29617=>1000,29618=>1000,29619=>1000,29620=>1000,
+ 29621=>1000,29622=>1000,29623=>1000,29624=>1000,29625=>1000,29626=>1000,29627=>1000,29628=>1000,29629=>1000,29630=>1000,29631=>1000,29632=>1000,29633=>1000,29634=>1000,29635=>1000,29636=>1000,
+ 29637=>1000,29638=>1000,29639=>1000,29640=>1000,29641=>1000,29642=>1000,29643=>1000,29644=>1000,29645=>1000,29646=>1000,29647=>1000,29648=>1000,29649=>1000,29650=>1000,29651=>1000,29652=>1000,
+ 29653=>1000,29654=>1000,29655=>1000,29656=>1000,29657=>1000,29658=>1000,29659=>1000,29660=>1000,29661=>1000,29662=>1000,29663=>1000,29664=>1000,29665=>1000,29666=>1000,29667=>1000,29668=>1000,
+ 29669=>1000,29670=>1000,29671=>1000,29672=>1000,29673=>1000,29674=>1000,29675=>1000,29676=>1000,29677=>1000,29678=>1000,29679=>1000,29680=>1000,29681=>1000,29682=>1000,29683=>1000,29684=>1000,
+ 29685=>1000,29686=>1000,29687=>1000,29688=>1000,29689=>1000,29690=>1000,29691=>1000,29692=>1000,29693=>1000,29694=>1000,29695=>1000,29696=>1000,29697=>1000,29698=>1000,29699=>1000,29700=>1000,
+ 29701=>1000,29702=>1000,29703=>1000,29704=>1000,29705=>1000,29706=>1000,29707=>1000,29708=>1000,29709=>1000,29710=>1000,29711=>1000,29712=>1000,29713=>1000,29714=>1000,29715=>1000,29716=>1000,
+ 29717=>1000,29718=>1000,29719=>1000,29720=>1000,29721=>1000,29722=>1000,29723=>1000,29724=>1000,29725=>1000,29726=>1000,29727=>1000,29728=>1000,29729=>1000,29730=>1000,29731=>1000,29732=>1000,
+ 29733=>1000,29734=>1000,29735=>1000,29736=>1000,29737=>1000,29738=>1000,29739=>1000,29740=>1000,29741=>1000,29742=>1000,29743=>1000,29744=>1000,29745=>1000,29746=>1000,29747=>1000,29748=>1000,
+ 29749=>1000,29750=>1000,29751=>1000,29752=>1000,29753=>1000,29754=>1000,29755=>1000,29756=>1000,29757=>1000,29758=>1000,29759=>1000,29760=>1000,29761=>1000,29762=>1000,29763=>1000,29764=>1000,
+ 29765=>1000,29766=>1000,29767=>1000,29768=>1000,29769=>1000,29770=>1000,29771=>1000,29772=>1000,29773=>1000,29774=>1000,29775=>1000,29776=>1000,29777=>1000,29778=>1000,29779=>1000,29780=>1000,
+ 29781=>1000,29782=>1000,29783=>1000,29784=>1000,29785=>1000,29786=>1000,29787=>1000,29788=>1000,29789=>1000,29790=>1000,29791=>1000,29792=>1000,29793=>1000,29794=>1000,29795=>1000,29796=>1000,
+ 29797=>1000,29798=>1000,29799=>1000,29800=>1000,29801=>1000,29802=>1000,29803=>1000,29804=>1000,29805=>1000,29806=>1000,29807=>1000,29808=>1000,29809=>1000,29810=>1000,29811=>1000,29812=>1000,
+ 29813=>1000,29814=>1000,29815=>1000,29816=>1000,29817=>1000,29818=>1000,29819=>1000,29820=>1000,29821=>1000,29822=>1000,29823=>1000,29824=>1000,29825=>1000,29826=>1000,29827=>1000,29828=>1000,
+ 29829=>1000,29830=>1000,29831=>1000,29832=>1000,29833=>1000,29834=>1000,29835=>1000,29836=>1000,29837=>1000,29838=>1000,29839=>1000,29840=>1000,29841=>1000,29842=>1000,29843=>1000,29844=>1000,
+ 29845=>1000,29846=>1000,29847=>1000,29848=>1000,29849=>1000,29850=>1000,29851=>1000,29852=>1000,29853=>1000,29854=>1000,29855=>1000,29856=>1000,29857=>1000,29858=>1000,29859=>1000,29860=>1000,
+ 29861=>1000,29862=>1000,29863=>1000,29864=>1000,29865=>1000,29866=>1000,29867=>1000,29868=>1000,29869=>1000,29870=>1000,29871=>1000,29872=>1000,29873=>1000,29874=>1000,29875=>1000,29876=>1000,
+ 29877=>1000,29878=>1000,29879=>1000,29880=>1000,29881=>1000,29882=>1000,29883=>1000,29884=>1000,29885=>1000,29886=>1000,29887=>1000,29888=>1000,29889=>1000,29890=>1000,29891=>1000,29892=>1000,
+ 29893=>1000,29894=>1000,29895=>1000,29896=>1000,29897=>1000,29898=>1000,29899=>1000,29900=>1000,29901=>1000,29902=>1000,29903=>1000,29904=>1000,29905=>1000,29906=>1000,29907=>1000,29908=>1000,
+ 29909=>1000,29910=>1000,29911=>1000,29912=>1000,29913=>1000,29914=>1000,29915=>1000,29916=>1000,29917=>1000,29918=>1000,29919=>1000,29920=>1000,29921=>1000,29922=>1000,29923=>1000,29924=>1000,
+ 29925=>1000,29926=>1000,29927=>1000,29928=>1000,29929=>1000,29930=>1000,29931=>1000,29932=>1000,29933=>1000,29934=>1000,29935=>1000,29936=>1000,29937=>1000,29938=>1000,29939=>1000,29940=>1000,
+ 29941=>1000,29942=>1000,29943=>1000,29944=>1000,29945=>1000,29946=>1000,29947=>1000,29948=>1000,29949=>1000,29950=>1000,29951=>1000,29952=>1000,29953=>1000,29954=>1000,29955=>1000,29956=>1000,
+ 29957=>1000,29958=>1000,29959=>1000,29960=>1000,29961=>1000,29962=>1000,29963=>1000,29964=>1000,29965=>1000,29966=>1000,29967=>1000,29968=>1000,29969=>1000,29970=>1000,29971=>1000,29972=>1000,
+ 29973=>1000,29974=>1000,29975=>1000,29976=>1000,29977=>1000,29978=>1000,29979=>1000,29980=>1000,29981=>1000,29982=>1000,29983=>1000,29984=>1000,29985=>1000,29986=>1000,29987=>1000,29988=>1000,
+ 29989=>1000,29990=>1000,29991=>1000,29992=>1000,29993=>1000,29994=>1000,29995=>1000,29996=>1000,29997=>1000,29998=>1000,29999=>1000,30000=>1000,30001=>1000,30002=>1000,30003=>1000,30004=>1000,
+ 30005=>1000,30006=>1000,30007=>1000,30008=>1000,30009=>1000,30010=>1000,30011=>1000,30012=>1000,30013=>1000,30014=>1000,30015=>1000,30016=>1000,30017=>1000,30018=>1000,30019=>1000,30020=>1000,
+ 30021=>1000,30022=>1000,30023=>1000,30024=>1000,30025=>1000,30026=>1000,30027=>1000,30028=>1000,30029=>1000,30030=>1000,30031=>1000,30032=>1000,30033=>1000,30034=>1000,30035=>1000,30036=>1000,
+ 30037=>1000,30038=>1000,30039=>1000,30040=>1000,30041=>1000,30042=>1000,30043=>1000,30044=>1000,30045=>1000,30046=>1000,30047=>1000,30048=>1000,30049=>1000,30050=>1000,30051=>1000,30052=>1000,
+ 30053=>1000,30054=>1000,30055=>1000,30056=>1000,30057=>1000,30058=>1000,30059=>1000,30060=>1000,30061=>1000,30062=>1000,30063=>1000,30064=>1000,30065=>1000,30066=>1000,30067=>1000,30068=>1000,
+ 30069=>1000,30070=>1000,30071=>1000,30072=>1000,30073=>1000,30074=>1000,30075=>1000,30076=>1000,30077=>1000,30078=>1000,30079=>1000,30080=>1000,30081=>1000,30082=>1000,30083=>1000,30084=>1000,
+ 30085=>1000,30086=>1000,30087=>1000,30088=>1000,30089=>1000,30090=>1000,30091=>1000,30092=>1000,30093=>1000,30094=>1000,30095=>1000,30096=>1000,30097=>1000,30098=>1000,30099=>1000,30100=>1000,
+ 30101=>1000,30102=>1000,30103=>1000,30104=>1000,30105=>1000,30106=>1000,30107=>1000,30108=>1000,30109=>1000,30110=>1000,30111=>1000,30112=>1000,30113=>1000,30114=>1000,30115=>1000,30116=>1000,
+ 30117=>1000,30118=>1000,30119=>1000,30120=>1000,30121=>1000,30122=>1000,30123=>1000,30124=>1000,30125=>1000,30126=>1000,30127=>1000,30128=>1000,30129=>1000,30130=>1000,30131=>1000,30132=>1000,
+ 30133=>1000,30134=>1000,30135=>1000,30136=>1000,30137=>1000,30138=>1000,30139=>1000,30140=>1000,30141=>1000,30142=>1000,30143=>1000,30144=>1000,30145=>1000,30146=>1000,30147=>1000,30148=>1000,
+ 30149=>1000,30150=>1000,30151=>1000,30152=>1000,30153=>1000,30154=>1000,30155=>1000,30156=>1000,30157=>1000,30158=>1000,30159=>1000,30160=>1000,30161=>1000,30162=>1000,30163=>1000,30164=>1000,
+ 30165=>1000,30166=>1000,30167=>1000,30168=>1000,30169=>1000,30170=>1000,30171=>1000,30172=>1000,30173=>1000,30174=>1000,30175=>1000,30176=>1000,30177=>1000,30178=>1000,30179=>1000,30180=>1000,
+ 30181=>1000,30182=>1000,30183=>1000,30184=>1000,30185=>1000,30186=>1000,30187=>1000,30188=>1000,30189=>1000,30190=>1000,30191=>1000,30192=>1000,30193=>1000,30194=>1000,30195=>1000,30196=>1000,
+ 30197=>1000,30198=>1000,30199=>1000,30200=>1000,30201=>1000,30202=>1000,30203=>1000,30204=>1000,30205=>1000,30206=>1000,30207=>1000,30208=>1000,30209=>1000,30210=>1000,30211=>1000,30212=>1000,
+ 30213=>1000,30214=>1000,30215=>1000,30216=>1000,30217=>1000,30218=>1000,30219=>1000,30220=>1000,30221=>1000,30222=>1000,30223=>1000,30224=>1000,30225=>1000,30226=>1000,30227=>1000,30228=>1000,
+ 30229=>1000,30230=>1000,30231=>1000,30232=>1000,30233=>1000,30234=>1000,30235=>1000,30236=>1000,30237=>1000,30238=>1000,30239=>1000,30240=>1000,30241=>1000,30242=>1000,30243=>1000,30244=>1000,
+ 30245=>1000,30246=>1000,30247=>1000,30248=>1000,30249=>1000,30250=>1000,30251=>1000,30252=>1000,30253=>1000,30254=>1000,30255=>1000,30256=>1000,30257=>1000,30258=>1000,30259=>1000,30260=>1000,
+ 30261=>1000,30262=>1000,30263=>1000,30264=>1000,30265=>1000,30266=>1000,30267=>1000,30268=>1000,30269=>1000,30270=>1000,30271=>1000,30272=>1000,30273=>1000,30274=>1000,30275=>1000,30276=>1000,
+ 30277=>1000,30278=>1000,30279=>1000,30280=>1000,30281=>1000,30282=>1000,30283=>1000,30284=>1000,30285=>1000,30286=>1000,30287=>1000,30288=>1000,30289=>1000,30290=>1000,30291=>1000,30292=>1000,
+ 30293=>1000,30294=>1000,30295=>1000,30296=>1000,30297=>1000,30298=>1000,30299=>1000,30300=>1000,30301=>1000,30302=>1000,30303=>1000,30304=>1000,30305=>1000,30306=>1000,30307=>1000,30308=>1000,
+ 30309=>1000,30310=>1000,30311=>1000,30312=>1000,30313=>1000,30314=>1000,30315=>1000,30316=>1000,30317=>1000,30318=>1000,30319=>1000,30320=>1000,30321=>1000,30322=>1000,30323=>1000,30324=>1000,
+ 30325=>1000,30326=>1000,30327=>1000,30328=>1000,30329=>1000,30330=>1000,30331=>1000,30332=>1000,30333=>1000,30334=>1000,30335=>1000,30336=>1000,30337=>1000,30338=>1000,30339=>1000,30340=>1000,
+ 30341=>1000,30342=>1000,30343=>1000,30344=>1000,30345=>1000,30346=>1000,30347=>1000,30348=>1000,30349=>1000,30350=>1000,30351=>1000,30352=>1000,30353=>1000,30354=>1000,30355=>1000,30356=>1000,
+ 30357=>1000,30358=>1000,30359=>1000,30360=>1000,30361=>1000,30362=>1000,30363=>1000,30364=>1000,30365=>1000,30366=>1000,30367=>1000,30368=>1000,30369=>1000,30370=>1000,30371=>1000,30372=>1000,
+ 30373=>1000,30374=>1000,30375=>1000,30376=>1000,30377=>1000,30378=>1000,30379=>1000,30380=>1000,30381=>1000,30382=>1000,30383=>1000,30384=>1000,30385=>1000,30386=>1000,30387=>1000,30388=>1000,
+ 30389=>1000,30390=>1000,30391=>1000,30392=>1000,30393=>1000,30394=>1000,30395=>1000,30396=>1000,30397=>1000,30398=>1000,30399=>1000,30400=>1000,30401=>1000,30402=>1000,30403=>1000,30404=>1000,
+ 30405=>1000,30406=>1000,30407=>1000,30408=>1000,30409=>1000,30410=>1000,30411=>1000,30412=>1000,30413=>1000,30414=>1000,30415=>1000,30416=>1000,30417=>1000,30418=>1000,30419=>1000,30420=>1000,
+ 30421=>1000,30422=>1000,30423=>1000,30424=>1000,30425=>1000,30426=>1000,30427=>1000,30428=>1000,30429=>1000,30430=>1000,30431=>1000,30432=>1000,30433=>1000,30434=>1000,30435=>1000,30436=>1000,
+ 30437=>1000,30438=>1000,30439=>1000,30440=>1000,30441=>1000,30442=>1000,30443=>1000,30444=>1000,30445=>1000,30446=>1000,30447=>1000,30448=>1000,30449=>1000,30450=>1000,30451=>1000,30452=>1000,
+ 30453=>1000,30454=>1000,30455=>1000,30456=>1000,30457=>1000,30458=>1000,30459=>1000,30460=>1000,30461=>1000,30462=>1000,30463=>1000,30464=>1000,30465=>1000,30466=>1000,30467=>1000,30468=>1000,
+ 30469=>1000,30470=>1000,30471=>1000,30472=>1000,30473=>1000,30474=>1000,30475=>1000,30476=>1000,30477=>1000,30478=>1000,30479=>1000,30480=>1000,30481=>1000,30482=>1000,30483=>1000,30484=>1000,
+ 30485=>1000,30486=>1000,30487=>1000,30488=>1000,30489=>1000,30490=>1000,30491=>1000,30492=>1000,30493=>1000,30494=>1000,30495=>1000,30496=>1000,30497=>1000,30498=>1000,30499=>1000,30500=>1000,
+ 30501=>1000,30502=>1000,30503=>1000,30504=>1000,30505=>1000,30506=>1000,30507=>1000,30508=>1000,30509=>1000,30510=>1000,30511=>1000,30512=>1000,30513=>1000,30514=>1000,30515=>1000,30516=>1000,
+ 30517=>1000,30518=>1000,30519=>1000,30520=>1000,30521=>1000,30522=>1000,30523=>1000,30524=>1000,30525=>1000,30526=>1000,30527=>1000,30528=>1000,30529=>1000,30530=>1000,30531=>1000,30532=>1000,
+ 30533=>1000,30534=>1000,30535=>1000,30536=>1000,30537=>1000,30538=>1000,30539=>1000,30540=>1000,30541=>1000,30542=>1000,30543=>1000,30544=>1000,30545=>1000,30546=>1000,30547=>1000,30548=>1000,
+ 30549=>1000,30550=>1000,30551=>1000,30552=>1000,30553=>1000,30554=>1000,30555=>1000,30556=>1000,30557=>1000,30558=>1000,30559=>1000,30560=>1000,30561=>1000,30562=>1000,30563=>1000,30564=>1000,
+ 30565=>1000,30566=>1000,30567=>1000,30568=>1000,30569=>1000,30570=>1000,30571=>1000,30572=>1000,30573=>1000,30574=>1000,30575=>1000,30576=>1000,30577=>1000,30578=>1000,30579=>1000,30580=>1000,
+ 30581=>1000,30582=>1000,30583=>1000,30584=>1000,30585=>1000,30586=>1000,30587=>1000,30588=>1000,30589=>1000,30590=>1000,30591=>1000,30592=>1000,30593=>1000,30594=>1000,30595=>1000,30596=>1000,
+ 30597=>1000,30598=>1000,30599=>1000,30600=>1000,30601=>1000,30602=>1000,30603=>1000,30604=>1000,30605=>1000,30606=>1000,30607=>1000,30608=>1000,30609=>1000,30610=>1000,30611=>1000,30612=>1000,
+ 30613=>1000,30614=>1000,30615=>1000,30616=>1000,30617=>1000,30618=>1000,30619=>1000,30620=>1000,30621=>1000,30622=>1000,30623=>1000,30624=>1000,30625=>1000,30626=>1000,30627=>1000,30628=>1000,
+ 30629=>1000,30630=>1000,30631=>1000,30632=>1000,30633=>1000,30634=>1000,30635=>1000,30636=>1000,30637=>1000,30638=>1000,30639=>1000,30640=>1000,30641=>1000,30642=>1000,30643=>1000,30644=>1000,
+ 30645=>1000,30646=>1000,30647=>1000,30648=>1000,30649=>1000,30650=>1000,30651=>1000,30652=>1000,30653=>1000,30654=>1000,30655=>1000,30656=>1000,30657=>1000,30658=>1000,30659=>1000,30660=>1000,
+ 30661=>1000,30662=>1000,30663=>1000,30664=>1000,30665=>1000,30666=>1000,30667=>1000,30668=>1000,30669=>1000,30670=>1000,30671=>1000,30672=>1000,30673=>1000,30674=>1000,30675=>1000,30676=>1000,
+ 30677=>1000,30678=>1000,30679=>1000,30680=>1000,30681=>1000,30682=>1000,30683=>1000,30684=>1000,30685=>1000,30686=>1000,30687=>1000,30688=>1000,30689=>1000,30690=>1000,30691=>1000,30692=>1000,
+ 30693=>1000,30694=>1000,30695=>1000,30696=>1000,30697=>1000,30698=>1000,30699=>1000,30700=>1000,30701=>1000,30702=>1000,30703=>1000,30704=>1000,30705=>1000,30706=>1000,30707=>1000,30708=>1000,
+ 30709=>1000,30710=>1000,30711=>1000,30712=>1000,30713=>1000,30714=>1000,30715=>1000,30716=>1000,30717=>1000,30718=>1000,30719=>1000,30720=>1000,30721=>1000,30722=>1000,30723=>1000,30724=>1000,
+ 30725=>1000,30726=>1000,30727=>1000,30728=>1000,30729=>1000,30730=>1000,30731=>1000,30732=>1000,30733=>1000,30734=>1000,30735=>1000,30736=>1000,30737=>1000,30738=>1000,30739=>1000,30740=>1000,
+ 30741=>1000,30742=>1000,30743=>1000,30744=>1000,30745=>1000,30746=>1000,30747=>1000,30748=>1000,30749=>1000,30750=>1000,30751=>1000,30752=>1000,30753=>1000,30754=>1000,30755=>1000,30756=>1000,
+ 30757=>1000,30758=>1000,30759=>1000,30760=>1000,30761=>1000,30762=>1000,30763=>1000,30764=>1000,30765=>1000,30766=>1000,30767=>1000,30768=>1000,30769=>1000,30770=>1000,30771=>1000,30772=>1000,
+ 30773=>1000,30774=>1000,30775=>1000,30776=>1000,30777=>1000,30778=>1000,30779=>1000,30780=>1000,30781=>1000,30782=>1000,30783=>1000,30784=>1000,30785=>1000,30786=>1000,30787=>1000,30788=>1000,
+ 30789=>1000,30790=>1000,30791=>1000,30792=>1000,30793=>1000,30794=>1000,30795=>1000,30796=>1000,30797=>1000,30798=>1000,30799=>1000,30800=>1000,30801=>1000,30802=>1000,30803=>1000,30804=>1000,
+ 30805=>1000,30806=>1000,30807=>1000,30808=>1000,30809=>1000,30810=>1000,30811=>1000,30812=>1000,30813=>1000,30814=>1000,30815=>1000,30816=>1000,30817=>1000,30818=>1000,30819=>1000,30820=>1000,
+ 30821=>1000,30822=>1000,30823=>1000,30824=>1000,30825=>1000,30826=>1000,30827=>1000,30828=>1000,30829=>1000,30830=>1000,30831=>1000,30832=>1000,30833=>1000,30834=>1000,30835=>1000,30836=>1000,
+ 30837=>1000,30838=>1000,30839=>1000,30840=>1000,30841=>1000,30842=>1000,30843=>1000,30844=>1000,30845=>1000,30846=>1000,30847=>1000,30848=>1000,30849=>1000,30850=>1000,30851=>1000,30852=>1000,
+ 30853=>1000,30854=>1000,30855=>1000,30856=>1000,30857=>1000,30858=>1000,30859=>1000,30860=>1000,30861=>1000,30862=>1000,30863=>1000,30864=>1000,30865=>1000,30866=>1000,30867=>1000,30868=>1000,
+ 30869=>1000,30870=>1000,30871=>1000,30872=>1000,30873=>1000,30874=>1000,30875=>1000,30876=>1000,30877=>1000,30878=>1000,30879=>1000,30880=>1000,30881=>1000,30882=>1000,30883=>1000,30884=>1000,
+ 30885=>1000,30886=>1000,30887=>1000,30888=>1000,30889=>1000,30890=>1000,30891=>1000,30892=>1000,30893=>1000,30894=>1000,30895=>1000,30896=>1000,30897=>1000,30898=>1000,30899=>1000,30900=>1000,
+ 30901=>1000,30902=>1000,30903=>1000,30904=>1000,30905=>1000,30906=>1000,30907=>1000,30908=>1000,30909=>1000,30910=>1000,30911=>1000,30912=>1000,30913=>1000,30914=>1000,30915=>1000,30916=>1000,
+ 30917=>1000,30918=>1000,30919=>1000,30920=>1000,30921=>1000,30922=>1000,30923=>1000,30924=>1000,30925=>1000,30926=>1000,30927=>1000,30928=>1000,30929=>1000,30930=>1000,30931=>1000,30932=>1000,
+ 30933=>1000,30934=>1000,30935=>1000,30936=>1000,30937=>1000,30938=>1000,30939=>1000,30940=>1000,30941=>1000,30942=>1000,30943=>1000,30944=>1000,30945=>1000,30946=>1000,30947=>1000,30948=>1000,
+ 30949=>1000,30950=>1000,30951=>1000,30952=>1000,30953=>1000,30954=>1000,30955=>1000,30956=>1000,30957=>1000,30958=>1000,30959=>1000,30960=>1000,30961=>1000,30962=>1000,30963=>1000,30964=>1000,
+ 30965=>1000,30966=>1000,30967=>1000,30968=>1000,30969=>1000,30970=>1000,30971=>1000,30972=>1000,30973=>1000,30974=>1000,30975=>1000,30976=>1000,30977=>1000,30978=>1000,30979=>1000,30980=>1000,
+ 30981=>1000,30982=>1000,30983=>1000,30984=>1000,30985=>1000,30986=>1000,30987=>1000,30988=>1000,30989=>1000,30990=>1000,30991=>1000,30992=>1000,30993=>1000,30994=>1000,30995=>1000,30996=>1000,
+ 30997=>1000,30998=>1000,30999=>1000,31000=>1000,31001=>1000,31002=>1000,31003=>1000,31004=>1000,31005=>1000,31006=>1000,31007=>1000,31008=>1000,31009=>1000,31010=>1000,31011=>1000,31012=>1000,
+ 31013=>1000,31014=>1000,31015=>1000,31016=>1000,31017=>1000,31018=>1000,31019=>1000,31020=>1000,31021=>1000,31022=>1000,31023=>1000,31024=>1000,31025=>1000,31026=>1000,31027=>1000,31028=>1000,
+ 31029=>1000,31030=>1000,31031=>1000,31032=>1000,31033=>1000,31034=>1000,31035=>1000,31036=>1000,31037=>1000,31038=>1000,31039=>1000,31040=>1000,31041=>1000,31042=>1000,31043=>1000,31044=>1000,
+ 31045=>1000,31046=>1000,31047=>1000,31048=>1000,31049=>1000,31050=>1000,31051=>1000,31052=>1000,31053=>1000,31054=>1000,31055=>1000,31056=>1000,31057=>1000,31058=>1000,31059=>1000,31060=>1000,
+ 31061=>1000,31062=>1000,31063=>1000,31064=>1000,31065=>1000,31066=>1000,31067=>1000,31068=>1000,31069=>1000,31070=>1000,31071=>1000,31072=>1000,31073=>1000,31074=>1000,31075=>1000,31076=>1000,
+ 31077=>1000,31078=>1000,31079=>1000,31080=>1000,31081=>1000,31082=>1000,31083=>1000,31084=>1000,31085=>1000,31086=>1000,31087=>1000,31088=>1000,31089=>1000,31090=>1000,31091=>1000,31092=>1000,
+ 31093=>1000,31094=>1000,31095=>1000,31096=>1000,31097=>1000,31098=>1000,31099=>1000,31100=>1000,31101=>1000,31102=>1000,31103=>1000,31104=>1000,31105=>1000,31106=>1000,31107=>1000,31108=>1000,
+ 31109=>1000,31110=>1000,31111=>1000,31112=>1000,31113=>1000,31114=>1000,31115=>1000,31116=>1000,31117=>1000,31118=>1000,31119=>1000,31120=>1000,31121=>1000,31122=>1000,31123=>1000,31124=>1000,
+ 31125=>1000,31126=>1000,31127=>1000,31128=>1000,31129=>1000,31130=>1000,31131=>1000,31132=>1000,31133=>1000,31134=>1000,31135=>1000,31136=>1000,31137=>1000,31138=>1000,31139=>1000,31140=>1000,
+ 31141=>1000,31142=>1000,31143=>1000,31144=>1000,31145=>1000,31146=>1000,31147=>1000,31148=>1000,31149=>1000,31150=>1000,31151=>1000,31152=>1000,31153=>1000,31154=>1000,31155=>1000,31156=>1000,
+ 31157=>1000,31158=>1000,31159=>1000,31160=>1000,31161=>1000,31162=>1000,31163=>1000,31164=>1000,31165=>1000,31166=>1000,31167=>1000,31168=>1000,31169=>1000,31170=>1000,31171=>1000,31172=>1000,
+ 31173=>1000,31174=>1000,31175=>1000,31176=>1000,31177=>1000,31178=>1000,31179=>1000,31180=>1000,31181=>1000,31182=>1000,31183=>1000,31184=>1000,31185=>1000,31186=>1000,31187=>1000,31188=>1000,
+ 31189=>1000,31190=>1000,31191=>1000,31192=>1000,31193=>1000,31194=>1000,31195=>1000,31196=>1000,31197=>1000,31198=>1000,31199=>1000,31200=>1000,31201=>1000,31202=>1000,31203=>1000,31204=>1000,
+ 31205=>1000,31206=>1000,31207=>1000,31208=>1000,31209=>1000,31210=>1000,31211=>1000,31212=>1000,31213=>1000,31214=>1000,31215=>1000,31216=>1000,31217=>1000,31218=>1000,31219=>1000,31220=>1000,
+ 31221=>1000,31222=>1000,31223=>1000,31224=>1000,31225=>1000,31226=>1000,31227=>1000,31228=>1000,31229=>1000,31230=>1000,31231=>1000,31232=>1000,31233=>1000,31234=>1000,31235=>1000,31236=>1000,
+ 31237=>1000,31238=>1000,31239=>1000,31240=>1000,31241=>1000,31242=>1000,31243=>1000,31244=>1000,31245=>1000,31246=>1000,31247=>1000,31248=>1000,31249=>1000,31250=>1000,31251=>1000,31252=>1000,
+ 31253=>1000,31254=>1000,31255=>1000,31256=>1000,31257=>1000,31258=>1000,31259=>1000,31260=>1000,31261=>1000,31262=>1000,31263=>1000,31264=>1000,31265=>1000,31266=>1000,31267=>1000,31268=>1000,
+ 31269=>1000,31270=>1000,31271=>1000,31272=>1000,31273=>1000,31274=>1000,31275=>1000,31276=>1000,31277=>1000,31278=>1000,31279=>1000,31280=>1000,31281=>1000,31282=>1000,31283=>1000,31284=>1000,
+ 31285=>1000,31286=>1000,31287=>1000,31288=>1000,31289=>1000,31290=>1000,31291=>1000,31292=>1000,31293=>1000,31294=>1000,31295=>1000,31296=>1000,31297=>1000,31298=>1000,31299=>1000,31300=>1000,
+ 31301=>1000,31302=>1000,31303=>1000,31304=>1000,31305=>1000,31306=>1000,31307=>1000,31308=>1000,31309=>1000,31310=>1000,31311=>1000,31312=>1000,31313=>1000,31314=>1000,31315=>1000,31316=>1000,
+ 31317=>1000,31318=>1000,31319=>1000,31320=>1000,31321=>1000,31322=>1000,31323=>1000,31324=>1000,31325=>1000,31326=>1000,31327=>1000,31328=>1000,31329=>1000,31330=>1000,31331=>1000,31332=>1000,
+ 31333=>1000,31334=>1000,31335=>1000,31336=>1000,31337=>1000,31338=>1000,31339=>1000,31340=>1000,31341=>1000,31342=>1000,31343=>1000,31344=>1000,31345=>1000,31346=>1000,31347=>1000,31348=>1000,
+ 31349=>1000,31350=>1000,31351=>1000,31352=>1000,31353=>1000,31354=>1000,31355=>1000,31356=>1000,31357=>1000,31358=>1000,31359=>1000,31360=>1000,31361=>1000,31362=>1000,31363=>1000,31364=>1000,
+ 31365=>1000,31366=>1000,31367=>1000,31368=>1000,31369=>1000,31370=>1000,31371=>1000,31372=>1000,31373=>1000,31374=>1000,31375=>1000,31376=>1000,31377=>1000,31378=>1000,31379=>1000,31380=>1000,
+ 31381=>1000,31382=>1000,31383=>1000,31384=>1000,31385=>1000,31386=>1000,31387=>1000,31388=>1000,31389=>1000,31390=>1000,31391=>1000,31392=>1000,31393=>1000,31394=>1000,31395=>1000,31396=>1000,
+ 31397=>1000,31398=>1000,31399=>1000,31400=>1000,31401=>1000,31402=>1000,31403=>1000,31404=>1000,31405=>1000,31406=>1000,31407=>1000,31408=>1000,31409=>1000,31410=>1000,31411=>1000,31412=>1000,
+ 31413=>1000,31414=>1000,31415=>1000,31416=>1000,31417=>1000,31418=>1000,31419=>1000,31420=>1000,31421=>1000,31422=>1000,31423=>1000,31424=>1000,31425=>1000,31426=>1000,31427=>1000,31428=>1000,
+ 31429=>1000,31430=>1000,31431=>1000,31432=>1000,31433=>1000,31434=>1000,31435=>1000,31436=>1000,31437=>1000,31438=>1000,31439=>1000,31440=>1000,31441=>1000,31442=>1000,31443=>1000,31444=>1000,
+ 31445=>1000,31446=>1000,31447=>1000,31448=>1000,31449=>1000,31450=>1000,31451=>1000,31452=>1000,31453=>1000,31454=>1000,31455=>1000,31456=>1000,31457=>1000,31458=>1000,31459=>1000,31460=>1000,
+ 31461=>1000,31462=>1000,31463=>1000,31464=>1000,31465=>1000,31466=>1000,31467=>1000,31468=>1000,31469=>1000,31470=>1000,31471=>1000,31472=>1000,31473=>1000,31474=>1000,31475=>1000,31476=>1000,
+ 31477=>1000,31478=>1000,31479=>1000,31480=>1000,31481=>1000,31482=>1000,31483=>1000,31484=>1000,31485=>1000,31486=>1000,31487=>1000,31488=>1000,31489=>1000,31490=>1000,31491=>1000,31492=>1000,
+ 31493=>1000,31494=>1000,31495=>1000,31496=>1000,31497=>1000,31498=>1000,31499=>1000,31500=>1000,31501=>1000,31502=>1000,31503=>1000,31504=>1000,31505=>1000,31506=>1000,31507=>1000,31508=>1000,
+ 31509=>1000,31510=>1000,31511=>1000,31512=>1000,31513=>1000,31514=>1000,31515=>1000,31516=>1000,31517=>1000,31518=>1000,31519=>1000,31520=>1000,31521=>1000,31522=>1000,31523=>1000,31524=>1000,
+ 31525=>1000,31526=>1000,31527=>1000,31528=>1000,31529=>1000,31530=>1000,31531=>1000,31532=>1000,31533=>1000,31534=>1000,31535=>1000,31536=>1000,31537=>1000,31538=>1000,31539=>1000,31540=>1000,
+ 31541=>1000,31542=>1000,31543=>1000,31544=>1000,31545=>1000,31546=>1000,31547=>1000,31548=>1000,31549=>1000,31550=>1000,31551=>1000,31552=>1000,31553=>1000,31554=>1000,31555=>1000,31556=>1000,
+ 31557=>1000,31558=>1000,31559=>1000,31560=>1000,31561=>1000,31562=>1000,31563=>1000,31564=>1000,31565=>1000,31566=>1000,31567=>1000,31568=>1000,31569=>1000,31570=>1000,31571=>1000,31572=>1000,
+ 31573=>1000,31574=>1000,31575=>1000,31576=>1000,31577=>1000,31578=>1000,31579=>1000,31580=>1000,31581=>1000,31582=>1000,31583=>1000,31584=>1000,31585=>1000,31586=>1000,31587=>1000,31588=>1000,
+ 31589=>1000,31590=>1000,31591=>1000,31592=>1000,31593=>1000,31594=>1000,31595=>1000,31596=>1000,31597=>1000,31598=>1000,31599=>1000,31600=>1000,31601=>1000,31602=>1000,31603=>1000,31604=>1000,
+ 31605=>1000,31606=>1000,31607=>1000,31608=>1000,31609=>1000,31610=>1000,31611=>1000,31612=>1000,31613=>1000,31614=>1000,31615=>1000,31616=>1000,31617=>1000,31618=>1000,31619=>1000,31620=>1000,
+ 31621=>1000,31622=>1000,31623=>1000,31624=>1000,31625=>1000,31626=>1000,31627=>1000,31628=>1000,31629=>1000,31630=>1000,31631=>1000,31632=>1000,31633=>1000,31634=>1000,31635=>1000,31636=>1000,
+ 31637=>1000,31638=>1000,31639=>1000,31640=>1000,31641=>1000,31642=>1000,31643=>1000,31644=>1000,31645=>1000,31646=>1000,31647=>1000,31648=>1000,31649=>1000,31650=>1000,31651=>1000,31652=>1000,
+ 31653=>1000,31654=>1000,31655=>1000,31656=>1000,31657=>1000,31658=>1000,31659=>1000,31660=>1000,31661=>1000,31662=>1000,31663=>1000,31664=>1000,31665=>1000,31666=>1000,31667=>1000,31668=>1000,
+ 31669=>1000,31670=>1000,31671=>1000,31672=>1000,31673=>1000,31674=>1000,31675=>1000,31676=>1000,31677=>1000,31678=>1000,31679=>1000,31680=>1000,31681=>1000,31682=>1000,31683=>1000,31684=>1000,
+ 31685=>1000,31686=>1000,31687=>1000,31688=>1000,31689=>1000,31690=>1000,31691=>1000,31692=>1000,31693=>1000,31694=>1000,31695=>1000,31696=>1000,31697=>1000,31698=>1000,31699=>1000,31700=>1000,
+ 31701=>1000,31702=>1000,31703=>1000,31704=>1000,31705=>1000,31706=>1000,31707=>1000,31708=>1000,31709=>1000,31710=>1000,31711=>1000,31712=>1000,31713=>1000,31714=>1000,31715=>1000,31716=>1000,
+ 31717=>1000,31718=>1000,31719=>1000,31720=>1000,31721=>1000,31722=>1000,31723=>1000,31724=>1000,31725=>1000,31726=>1000,31727=>1000,31728=>1000,31729=>1000,31730=>1000,31731=>1000,31732=>1000,
+ 31733=>1000,31734=>1000,31735=>1000,31736=>1000,31737=>1000,31738=>1000,31739=>1000,31740=>1000,31741=>1000,31742=>1000,31743=>1000,31744=>1000,31745=>1000,31746=>1000,31747=>1000,31748=>1000,
+ 31749=>1000,31750=>1000,31751=>1000,31752=>1000,31753=>1000,31754=>1000,31755=>1000,31756=>1000,31757=>1000,31758=>1000,31759=>1000,31760=>1000,31761=>1000,31762=>1000,31763=>1000,31764=>1000,
+ 31765=>1000,31766=>1000,31767=>1000,31768=>1000,31769=>1000,31770=>1000,31771=>1000,31772=>1000,31773=>1000,31774=>1000,31775=>1000,31776=>1000,31777=>1000,31778=>1000,31779=>1000,31780=>1000,
+ 31781=>1000,31782=>1000,31783=>1000,31784=>1000,31785=>1000,31786=>1000,31787=>1000,31788=>1000,31789=>1000,31790=>1000,31791=>1000,31792=>1000,31793=>1000,31794=>1000,31795=>1000,31796=>1000,
+ 31797=>1000,31798=>1000,31799=>1000,31800=>1000,31801=>1000,31802=>1000,31803=>1000,31804=>1000,31805=>1000,31806=>1000,31807=>1000,31808=>1000,31809=>1000,31810=>1000,31811=>1000,31812=>1000,
+ 31813=>1000,31814=>1000,31815=>1000,31816=>1000,31817=>1000,31818=>1000,31819=>1000,31820=>1000,31821=>1000,31822=>1000,31823=>1000,31824=>1000,31825=>1000,31826=>1000,31827=>1000,31828=>1000,
+ 31829=>1000,31830=>1000,31831=>1000,31832=>1000,31833=>1000,31834=>1000,31835=>1000,31836=>1000,31837=>1000,31838=>1000,31839=>1000,31840=>1000,31841=>1000,31842=>1000,31843=>1000,31844=>1000,
+ 31845=>1000,31846=>1000,31847=>1000,31848=>1000,31849=>1000,31850=>1000,31851=>1000,31852=>1000,31853=>1000,31854=>1000,31855=>1000,31856=>1000,31857=>1000,31858=>1000,31859=>1000,31860=>1000,
+ 31861=>1000,31862=>1000,31863=>1000,31864=>1000,31865=>1000,31866=>1000,31867=>1000,31868=>1000,31869=>1000,31870=>1000,31871=>1000,31872=>1000,31873=>1000,31874=>1000,31875=>1000,31876=>1000,
+ 31877=>1000,31878=>1000,31879=>1000,31880=>1000,31881=>1000,31882=>1000,31883=>1000,31884=>1000,31885=>1000,31886=>1000,31887=>1000,31888=>1000,31889=>1000,31890=>1000,31891=>1000,31892=>1000,
+ 31893=>1000,31894=>1000,31895=>1000,31896=>1000,31897=>1000,31898=>1000,31899=>1000,31900=>1000,31901=>1000,31902=>1000,31903=>1000,31904=>1000,31905=>1000,31906=>1000,31907=>1000,31908=>1000,
+ 31909=>1000,31910=>1000,31911=>1000,31912=>1000,31913=>1000,31914=>1000,31915=>1000,31916=>1000,31917=>1000,31918=>1000,31919=>1000,31920=>1000,31921=>1000,31922=>1000,31923=>1000,31924=>1000,
+ 31925=>1000,31926=>1000,31927=>1000,31928=>1000,31929=>1000,31930=>1000,31931=>1000,31932=>1000,31933=>1000,31934=>1000,31935=>1000,31936=>1000,31937=>1000,31938=>1000,31939=>1000,31940=>1000,
+ 31941=>1000,31942=>1000,31943=>1000,31944=>1000,31945=>1000,31946=>1000,31947=>1000,31948=>1000,31949=>1000,31950=>1000,31951=>1000,31952=>1000,31953=>1000,31954=>1000,31955=>1000,31956=>1000,
+ 31957=>1000,31958=>1000,31959=>1000,31960=>1000,31961=>1000,31962=>1000,31963=>1000,31964=>1000,31965=>1000,31966=>1000,31967=>1000,31968=>1000,31969=>1000,31970=>1000,31971=>1000,31972=>1000,
+ 31973=>1000,31974=>1000,31975=>1000,31976=>1000,31977=>1000,31978=>1000,31979=>1000,31980=>1000,31981=>1000,31982=>1000,31983=>1000,31984=>1000,31985=>1000,31986=>1000,31987=>1000,31988=>1000,
+ 31989=>1000,31990=>1000,31991=>1000,31992=>1000,31993=>1000,31994=>1000,31995=>1000,31996=>1000,31997=>1000,31998=>1000,31999=>1000,32000=>1000,32001=>1000,32002=>1000,32003=>1000,32004=>1000,
+ 32005=>1000,32006=>1000,32007=>1000,32008=>1000,32009=>1000,32010=>1000,32011=>1000,32012=>1000,32013=>1000,32014=>1000,32015=>1000,32016=>1000,32017=>1000,32018=>1000,32019=>1000,32020=>1000,
+ 32021=>1000,32022=>1000,32023=>1000,32024=>1000,32025=>1000,32026=>1000,32027=>1000,32028=>1000,32029=>1000,32030=>1000,32031=>1000,32032=>1000,32033=>1000,32034=>1000,32035=>1000,32036=>1000,
+ 32037=>1000,32038=>1000,32039=>1000,32040=>1000,32041=>1000,32042=>1000,32043=>1000,32044=>1000,32045=>1000,32046=>1000,32047=>1000,32048=>1000,32049=>1000,32050=>1000,32051=>1000,32052=>1000,
+ 32053=>1000,32054=>1000,32055=>1000,32056=>1000,32057=>1000,32058=>1000,32059=>1000,32060=>1000,32061=>1000,32062=>1000,32063=>1000,32064=>1000,32065=>1000,32066=>1000,32067=>1000,32068=>1000,
+ 32069=>1000,32070=>1000,32071=>1000,32072=>1000,32073=>1000,32074=>1000,32075=>1000,32076=>1000,32077=>1000,32078=>1000,32079=>1000,32080=>1000,32081=>1000,32082=>1000,32083=>1000,32084=>1000,
+ 32085=>1000,32086=>1000,32087=>1000,32088=>1000,32089=>1000,32090=>1000,32091=>1000,32092=>1000,32093=>1000,32094=>1000,32095=>1000,32096=>1000,32097=>1000,32098=>1000,32099=>1000,32100=>1000,
+ 32101=>1000,32102=>1000,32103=>1000,32104=>1000,32105=>1000,32106=>1000,32107=>1000,32108=>1000,32109=>1000,32110=>1000,32111=>1000,32112=>1000,32113=>1000,32114=>1000,32115=>1000,32116=>1000,
+ 32117=>1000,32118=>1000,32119=>1000,32120=>1000,32121=>1000,32122=>1000,32123=>1000,32124=>1000,32125=>1000,32126=>1000,32127=>1000,32128=>1000,32129=>1000,32130=>1000,32131=>1000,32132=>1000,
+ 32133=>1000,32134=>1000,32135=>1000,32136=>1000,32137=>1000,32138=>1000,32139=>1000,32140=>1000,32141=>1000,32142=>1000,32143=>1000,32144=>1000,32145=>1000,32146=>1000,32147=>1000,32148=>1000,
+ 32149=>1000,32150=>1000,32151=>1000,32152=>1000,32153=>1000,32154=>1000,32155=>1000,32156=>1000,32157=>1000,32158=>1000,32159=>1000,32160=>1000,32161=>1000,32162=>1000,32163=>1000,32164=>1000,
+ 32165=>1000,32166=>1000,32167=>1000,32168=>1000,32169=>1000,32170=>1000,32171=>1000,32172=>1000,32173=>1000,32174=>1000,32175=>1000,32176=>1000,32177=>1000,32178=>1000,32179=>1000,32180=>1000,
+ 32181=>1000,32182=>1000,32183=>1000,32184=>1000,32185=>1000,32186=>1000,32187=>1000,32188=>1000,32189=>1000,32190=>1000,32191=>1000,32192=>1000,32193=>1000,32194=>1000,32195=>1000,32196=>1000,
+ 32197=>1000,32198=>1000,32199=>1000,32200=>1000,32201=>1000,32202=>1000,32203=>1000,32204=>1000,32205=>1000,32206=>1000,32207=>1000,32208=>1000,32209=>1000,32210=>1000,32211=>1000,32212=>1000,
+ 32213=>1000,32214=>1000,32215=>1000,32216=>1000,32217=>1000,32218=>1000,32219=>1000,32220=>1000,32221=>1000,32222=>1000,32223=>1000,32224=>1000,32225=>1000,32226=>1000,32227=>1000,32228=>1000,
+ 32229=>1000,32230=>1000,32231=>1000,32232=>1000,32233=>1000,32234=>1000,32235=>1000,32236=>1000,32237=>1000,32238=>1000,32239=>1000,32240=>1000,32241=>1000,32242=>1000,32243=>1000,32244=>1000,
+ 32245=>1000,32246=>1000,32247=>1000,32248=>1000,32249=>1000,32250=>1000,32251=>1000,32252=>1000,32253=>1000,32254=>1000,32255=>1000,32256=>1000,32257=>1000,32258=>1000,32259=>1000,32260=>1000,
+ 32261=>1000,32262=>1000,32263=>1000,32264=>1000,32265=>1000,32266=>1000,32267=>1000,32268=>1000,32269=>1000,32270=>1000,32271=>1000,32272=>1000,32273=>1000,32274=>1000,32275=>1000,32276=>1000,
+ 32277=>1000,32278=>1000,32279=>1000,32280=>1000,32281=>1000,32282=>1000,32283=>1000,32284=>1000,32285=>1000,32286=>1000,32287=>1000,32288=>1000,32289=>1000,32290=>1000,32291=>1000,32292=>1000,
+ 32293=>1000,32294=>1000,32295=>1000,32296=>1000,32297=>1000,32298=>1000,32299=>1000,32300=>1000,32301=>1000,32302=>1000,32303=>1000,32304=>1000,32305=>1000,32306=>1000,32307=>1000,32308=>1000,
+ 32309=>1000,32310=>1000,32311=>1000,32312=>1000,32313=>1000,32314=>1000,32315=>1000,32316=>1000,32317=>1000,32318=>1000,32319=>1000,32320=>1000,32321=>1000,32322=>1000,32323=>1000,32324=>1000,
+ 32325=>1000,32326=>1000,32327=>1000,32328=>1000,32329=>1000,32330=>1000,32331=>1000,32332=>1000,32333=>1000,32334=>1000,32335=>1000,32336=>1000,32337=>1000,32338=>1000,32339=>1000,32340=>1000,
+ 32341=>1000,32342=>1000,32343=>1000,32344=>1000,32345=>1000,32346=>1000,32347=>1000,32348=>1000,32349=>1000,32350=>1000,32351=>1000,32352=>1000,32353=>1000,32354=>1000,32355=>1000,32356=>1000,
+ 32357=>1000,32358=>1000,32359=>1000,32360=>1000,32361=>1000,32362=>1000,32363=>1000,32364=>1000,32365=>1000,32366=>1000,32367=>1000,32368=>1000,32369=>1000,32370=>1000,32371=>1000,32372=>1000,
+ 32373=>1000,32374=>1000,32375=>1000,32376=>1000,32377=>1000,32378=>1000,32379=>1000,32380=>1000,32381=>1000,32382=>1000,32383=>1000,32384=>1000,32385=>1000,32386=>1000,32387=>1000,32388=>1000,
+ 32389=>1000,32390=>1000,32391=>1000,32392=>1000,32393=>1000,32394=>1000,32395=>1000,32396=>1000,32397=>1000,32398=>1000,32399=>1000,32400=>1000,32401=>1000,32402=>1000,32403=>1000,32404=>1000,
+ 32405=>1000,32406=>1000,32407=>1000,32408=>1000,32409=>1000,32410=>1000,32411=>1000,32412=>1000,32413=>1000,32414=>1000,32415=>1000,32416=>1000,32417=>1000,32418=>1000,32419=>1000,32420=>1000,
+ 32421=>1000,32422=>1000,32423=>1000,32424=>1000,32425=>1000,32426=>1000,32427=>1000,32428=>1000,32429=>1000,32430=>1000,32431=>1000,32432=>1000,32433=>1000,32434=>1000,32435=>1000,32436=>1000,
+ 32437=>1000,32438=>1000,32439=>1000,32440=>1000,32441=>1000,32442=>1000,32443=>1000,32444=>1000,32445=>1000,32446=>1000,32447=>1000,32448=>1000,32449=>1000,32450=>1000,32451=>1000,32452=>1000,
+ 32453=>1000,32454=>1000,32455=>1000,32456=>1000,32457=>1000,32458=>1000,32459=>1000,32460=>1000,32461=>1000,32462=>1000,32463=>1000,32464=>1000,32465=>1000,32466=>1000,32467=>1000,32468=>1000,
+ 32469=>1000,32470=>1000,32471=>1000,32472=>1000,32473=>1000,32474=>1000,32475=>1000,32476=>1000,32477=>1000,32478=>1000,32479=>1000,32480=>1000,32481=>1000,32482=>1000,32483=>1000,32484=>1000,
+ 32485=>1000,32486=>1000,32487=>1000,32488=>1000,32489=>1000,32490=>1000,32491=>1000,32492=>1000,32493=>1000,32494=>1000,32495=>1000,32496=>1000,32497=>1000,32498=>1000,32499=>1000,32500=>1000,
+ 32501=>1000,32502=>1000,32503=>1000,32504=>1000,32505=>1000,32506=>1000,32507=>1000,32508=>1000,32509=>1000,32510=>1000,32511=>1000,32512=>1000,32513=>1000,32514=>1000,32515=>1000,32516=>1000,
+ 32517=>1000,32518=>1000,32519=>1000,32520=>1000,32521=>1000,32522=>1000,32523=>1000,32524=>1000,32525=>1000,32526=>1000,32527=>1000,32528=>1000,32529=>1000,32530=>1000,32531=>1000,32532=>1000,
+ 32533=>1000,32534=>1000,32535=>1000,32536=>1000,32537=>1000,32538=>1000,32539=>1000,32540=>1000,32541=>1000,32542=>1000,32543=>1000,32544=>1000,32545=>1000,32546=>1000,32547=>1000,32548=>1000,
+ 32549=>1000,32550=>1000,32551=>1000,32552=>1000,32553=>1000,32554=>1000,32555=>1000,32556=>1000,32557=>1000,32558=>1000,32559=>1000,32560=>1000,32561=>1000,32562=>1000,32563=>1000,32564=>1000,
+ 32565=>1000,32566=>1000,32567=>1000,32568=>1000,32569=>1000,32570=>1000,32571=>1000,32572=>1000,32573=>1000,32574=>1000,32575=>1000,32576=>1000,32577=>1000,32578=>1000,32579=>1000,32580=>1000,
+ 32581=>1000,32582=>1000,32583=>1000,32584=>1000,32585=>1000,32586=>1000,32587=>1000,32588=>1000,32589=>1000,32590=>1000,32591=>1000,32592=>1000,32593=>1000,32594=>1000,32595=>1000,32596=>1000,
+ 32597=>1000,32598=>1000,32599=>1000,32600=>1000,32601=>1000,32602=>1000,32603=>1000,32604=>1000,32605=>1000,32606=>1000,32607=>1000,32608=>1000,32609=>1000,32610=>1000,32611=>1000,32612=>1000,
+ 32613=>1000,32614=>1000,32615=>1000,32616=>1000,32617=>1000,32618=>1000,32619=>1000,32620=>1000,32621=>1000,32622=>1000,32623=>1000,32624=>1000,32625=>1000,32626=>1000,32627=>1000,32628=>1000,
+ 32629=>1000,32630=>1000,32631=>1000,32632=>1000,32633=>1000,32634=>1000,32635=>1000,32636=>1000,32637=>1000,32638=>1000,32639=>1000,32640=>1000,32641=>1000,32642=>1000,32643=>1000,32644=>1000,
+ 32645=>1000,32646=>1000,32647=>1000,32648=>1000,32649=>1000,32650=>1000,32651=>1000,32652=>1000,32653=>1000,32654=>1000,32655=>1000,32656=>1000,32657=>1000,32658=>1000,32659=>1000,32660=>1000,
+ 32661=>1000,32662=>1000,32663=>1000,32664=>1000,32665=>1000,32666=>1000,32667=>1000,32668=>1000,32669=>1000,32670=>1000,32671=>1000,32672=>1000,32673=>1000,32674=>1000,32675=>1000,32676=>1000,
+ 32677=>1000,32678=>1000,32679=>1000,32680=>1000,32681=>1000,32682=>1000,32683=>1000,32684=>1000,32685=>1000,32686=>1000,32687=>1000,32688=>1000,32689=>1000,32690=>1000,32691=>1000,32692=>1000,
+ 32693=>1000,32694=>1000,32695=>1000,32696=>1000,32697=>1000,32698=>1000,32699=>1000,32700=>1000,32701=>1000,32702=>1000,32703=>1000,32704=>1000,32705=>1000,32706=>1000,32707=>1000,32708=>1000,
+ 32709=>1000,32710=>1000,32711=>1000,32712=>1000,32713=>1000,32714=>1000,32715=>1000,32716=>1000,32717=>1000,32718=>1000,32719=>1000,32720=>1000,32721=>1000,32722=>1000,32723=>1000,32724=>1000,
+ 32725=>1000,32726=>1000,32727=>1000,32728=>1000,32729=>1000,32730=>1000,32731=>1000,32732=>1000,32733=>1000,32734=>1000,32735=>1000,32736=>1000,32737=>1000,32738=>1000,32739=>1000,32740=>1000,
+ 32741=>1000,32742=>1000,32743=>1000,32744=>1000,32745=>1000,32746=>1000,32747=>1000,32748=>1000,32749=>1000,32750=>1000,32751=>1000,32752=>1000,32753=>1000,32754=>1000,32755=>1000,32756=>1000,
+ 32757=>1000,32758=>1000,32759=>1000,32760=>1000,32761=>1000,32762=>1000,32763=>1000,32764=>1000,32765=>1000,32766=>1000,32767=>1000,32768=>1000,32769=>1000,32770=>1000,32771=>1000,32772=>1000,
+ 32773=>1000,32774=>1000,32775=>1000,32776=>1000,32777=>1000,32778=>1000,32779=>1000,32780=>1000,32781=>1000,32782=>1000,32783=>1000,32784=>1000,32785=>1000,32786=>1000,32787=>1000,32788=>1000,
+ 32789=>1000,32790=>1000,32791=>1000,32792=>1000,32793=>1000,32794=>1000,32795=>1000,32796=>1000,32797=>1000,32798=>1000,32799=>1000,32800=>1000,32801=>1000,32802=>1000,32803=>1000,32804=>1000,
+ 32805=>1000,32806=>1000,32807=>1000,32808=>1000,32809=>1000,32810=>1000,32811=>1000,32812=>1000,32813=>1000,32814=>1000,32815=>1000,32816=>1000,32817=>1000,32818=>1000,32819=>1000,32820=>1000,
+ 32821=>1000,32822=>1000,32823=>1000,32824=>1000,32825=>1000,32826=>1000,32827=>1000,32828=>1000,32829=>1000,32830=>1000,32831=>1000,32832=>1000,32833=>1000,32834=>1000,32835=>1000,32836=>1000,
+ 32837=>1000,32838=>1000,32839=>1000,32840=>1000,32841=>1000,32842=>1000,32843=>1000,32844=>1000,32845=>1000,32846=>1000,32847=>1000,32848=>1000,32849=>1000,32850=>1000,32851=>1000,32852=>1000,
+ 32853=>1000,32854=>1000,32855=>1000,32856=>1000,32857=>1000,32858=>1000,32859=>1000,32860=>1000,32861=>1000,32862=>1000,32863=>1000,32864=>1000,32865=>1000,32866=>1000,32867=>1000,32868=>1000,
+ 32869=>1000,32870=>1000,32871=>1000,32872=>1000,32873=>1000,32874=>1000,32875=>1000,32876=>1000,32877=>1000,32878=>1000,32879=>1000,32880=>1000,32881=>1000,32882=>1000,32883=>1000,32884=>1000,
+ 32885=>1000,32886=>1000,32887=>1000,32888=>1000,32889=>1000,32890=>1000,32891=>1000,32892=>1000,32893=>1000,32894=>1000,32895=>1000,32896=>1000,32897=>1000,32898=>1000,32899=>1000,32900=>1000,
+ 32901=>1000,32902=>1000,32903=>1000,32904=>1000,32905=>1000,32906=>1000,32907=>1000,32908=>1000,32909=>1000,32910=>1000,32911=>1000,32912=>1000,32913=>1000,32914=>1000,32915=>1000,32916=>1000,
+ 32917=>1000,32918=>1000,32919=>1000,32920=>1000,32921=>1000,32922=>1000,32923=>1000,32924=>1000,32925=>1000,32926=>1000,32927=>1000,32928=>1000,32929=>1000,32930=>1000,32931=>1000,32932=>1000,
+ 32933=>1000,32934=>1000,32935=>1000,32936=>1000,32937=>1000,32938=>1000,32939=>1000,32940=>1000,32941=>1000,32942=>1000,32943=>1000,32944=>1000,32945=>1000,32946=>1000,32947=>1000,32948=>1000,
+ 32949=>1000,32950=>1000,32951=>1000,32952=>1000,32953=>1000,32954=>1000,32955=>1000,32956=>1000,32957=>1000,32958=>1000,32959=>1000,32960=>1000,32961=>1000,32962=>1000,32963=>1000,32964=>1000,
+ 32965=>1000,32966=>1000,32967=>1000,32968=>1000,32969=>1000,32970=>1000,32971=>1000,32972=>1000,32973=>1000,32974=>1000,32975=>1000,32976=>1000,32977=>1000,32978=>1000,32979=>1000,32980=>1000,
+ 32981=>1000,32982=>1000,32983=>1000,32984=>1000,32985=>1000,32986=>1000,32987=>1000,32988=>1000,32989=>1000,32990=>1000,32991=>1000,32992=>1000,32993=>1000,32994=>1000,32995=>1000,32996=>1000,
+ 32997=>1000,32998=>1000,32999=>1000,33000=>1000,33001=>1000,33002=>1000,33003=>1000,33004=>1000,33005=>1000,33006=>1000,33007=>1000,33008=>1000,33009=>1000,33010=>1000,33011=>1000,33012=>1000,
+ 33013=>1000,33014=>1000,33015=>1000,33016=>1000,33017=>1000,33018=>1000,33019=>1000,33020=>1000,33021=>1000,33022=>1000,33023=>1000,33024=>1000,33025=>1000,33026=>1000,33027=>1000,33028=>1000,
+ 33029=>1000,33030=>1000,33031=>1000,33032=>1000,33033=>1000,33034=>1000,33035=>1000,33036=>1000,33037=>1000,33038=>1000,33039=>1000,33040=>1000,33041=>1000,33042=>1000,33043=>1000,33044=>1000,
+ 33045=>1000,33046=>1000,33047=>1000,33048=>1000,33049=>1000,33050=>1000,33051=>1000,33052=>1000,33053=>1000,33054=>1000,33055=>1000,33056=>1000,33057=>1000,33058=>1000,33059=>1000,33060=>1000,
+ 33061=>1000,33062=>1000,33063=>1000,33064=>1000,33065=>1000,33066=>1000,33067=>1000,33068=>1000,33069=>1000,33070=>1000,33071=>1000,33072=>1000,33073=>1000,33074=>1000,33075=>1000,33076=>1000,
+ 33077=>1000,33078=>1000,33079=>1000,33080=>1000,33081=>1000,33082=>1000,33083=>1000,33084=>1000,33085=>1000,33086=>1000,33087=>1000,33088=>1000,33089=>1000,33090=>1000,33091=>1000,33092=>1000,
+ 33093=>1000,33094=>1000,33095=>1000,33096=>1000,33097=>1000,33098=>1000,33099=>1000,33100=>1000,33101=>1000,33102=>1000,33103=>1000,33104=>1000,33105=>1000,33106=>1000,33107=>1000,33108=>1000,
+ 33109=>1000,33110=>1000,33111=>1000,33112=>1000,33113=>1000,33114=>1000,33115=>1000,33116=>1000,33117=>1000,33118=>1000,33119=>1000,33120=>1000,33121=>1000,33122=>1000,33123=>1000,33124=>1000,
+ 33125=>1000,33126=>1000,33127=>1000,33128=>1000,33129=>1000,33130=>1000,33131=>1000,33132=>1000,33133=>1000,33134=>1000,33135=>1000,33136=>1000,33137=>1000,33138=>1000,33139=>1000,33140=>1000,
+ 33141=>1000,33142=>1000,33143=>1000,33144=>1000,33145=>1000,33146=>1000,33147=>1000,33148=>1000,33149=>1000,33150=>1000,33151=>1000,33152=>1000,33153=>1000,33154=>1000,33155=>1000,33156=>1000,
+ 33157=>1000,33158=>1000,33159=>1000,33160=>1000,33161=>1000,33162=>1000,33163=>1000,33164=>1000,33165=>1000,33166=>1000,33167=>1000,33168=>1000,33169=>1000,33170=>1000,33171=>1000,33172=>1000,
+ 33173=>1000,33174=>1000,33175=>1000,33176=>1000,33177=>1000,33178=>1000,33179=>1000,33180=>1000,33181=>1000,33182=>1000,33183=>1000,33184=>1000,33185=>1000,33186=>1000,33187=>1000,33188=>1000,
+ 33189=>1000,33190=>1000,33191=>1000,33192=>1000,33193=>1000,33194=>1000,33195=>1000,33196=>1000,33197=>1000,33198=>1000,33199=>1000,33200=>1000,33201=>1000,33202=>1000,33203=>1000,33204=>1000,
+ 33205=>1000,33206=>1000,33207=>1000,33208=>1000,33209=>1000,33210=>1000,33211=>1000,33212=>1000,33213=>1000,33214=>1000,33215=>1000,33216=>1000,33217=>1000,33218=>1000,33219=>1000,33220=>1000,
+ 33221=>1000,33222=>1000,33223=>1000,33224=>1000,33225=>1000,33226=>1000,33227=>1000,33228=>1000,33229=>1000,33230=>1000,33231=>1000,33232=>1000,33233=>1000,33234=>1000,33235=>1000,33236=>1000,
+ 33237=>1000,33238=>1000,33239=>1000,33240=>1000,33241=>1000,33242=>1000,33243=>1000,33244=>1000,33245=>1000,33246=>1000,33247=>1000,33248=>1000,33249=>1000,33250=>1000,33251=>1000,33252=>1000,
+ 33253=>1000,33254=>1000,33255=>1000,33256=>1000,33257=>1000,33258=>1000,33259=>1000,33260=>1000,33261=>1000,33262=>1000,33263=>1000,33264=>1000,33265=>1000,33266=>1000,33267=>1000,33268=>1000,
+ 33269=>1000,33270=>1000,33271=>1000,33272=>1000,33273=>1000,33274=>1000,33275=>1000,33276=>1000,33277=>1000,33278=>1000,33279=>1000,33280=>1000,33281=>1000,33282=>1000,33283=>1000,33284=>1000,
+ 33285=>1000,33286=>1000,33287=>1000,33288=>1000,33289=>1000,33290=>1000,33291=>1000,33292=>1000,33293=>1000,33294=>1000,33295=>1000,33296=>1000,33297=>1000,33298=>1000,33299=>1000,33300=>1000,
+ 33301=>1000,33302=>1000,33303=>1000,33304=>1000,33305=>1000,33306=>1000,33307=>1000,33308=>1000,33309=>1000,33310=>1000,33311=>1000,33312=>1000,33313=>1000,33314=>1000,33315=>1000,33316=>1000,
+ 33317=>1000,33318=>1000,33319=>1000,33320=>1000,33321=>1000,33322=>1000,33323=>1000,33324=>1000,33325=>1000,33326=>1000,33327=>1000,33328=>1000,33329=>1000,33330=>1000,33331=>1000,33332=>1000,
+ 33333=>1000,33334=>1000,33335=>1000,33336=>1000,33337=>1000,33338=>1000,33339=>1000,33340=>1000,33341=>1000,33342=>1000,33343=>1000,33344=>1000,33345=>1000,33346=>1000,33347=>1000,33348=>1000,
+ 33349=>1000,33350=>1000,33351=>1000,33352=>1000,33353=>1000,33354=>1000,33355=>1000,33356=>1000,33357=>1000,33358=>1000,33359=>1000,33360=>1000,33361=>1000,33362=>1000,33363=>1000,33364=>1000,
+ 33365=>1000,33366=>1000,33367=>1000,33368=>1000,33369=>1000,33370=>1000,33371=>1000,33372=>1000,33373=>1000,33374=>1000,33375=>1000,33376=>1000,33377=>1000,33378=>1000,33379=>1000,33380=>1000,
+ 33381=>1000,33382=>1000,33383=>1000,33384=>1000,33385=>1000,33386=>1000,33387=>1000,33388=>1000,33389=>1000,33390=>1000,33391=>1000,33392=>1000,33393=>1000,33394=>1000,33395=>1000,33396=>1000,
+ 33397=>1000,33398=>1000,33399=>1000,33400=>1000,33401=>1000,33402=>1000,33403=>1000,33404=>1000,33405=>1000,33406=>1000,33407=>1000,33408=>1000,33409=>1000,33410=>1000,33411=>1000,33412=>1000,
+ 33413=>1000,33414=>1000,33415=>1000,33416=>1000,33417=>1000,33418=>1000,33419=>1000,33420=>1000,33421=>1000,33422=>1000,33423=>1000,33424=>1000,33425=>1000,33426=>1000,33427=>1000,33428=>1000,
+ 33429=>1000,33430=>1000,33431=>1000,33432=>1000,33433=>1000,33434=>1000,33435=>1000,33436=>1000,33437=>1000,33438=>1000,33439=>1000,33440=>1000,33441=>1000,33442=>1000,33443=>1000,33444=>1000,
+ 33445=>1000,33446=>1000,33447=>1000,33448=>1000,33449=>1000,33450=>1000,33451=>1000,33452=>1000,33453=>1000,33454=>1000,33455=>1000,33456=>1000,33457=>1000,33458=>1000,33459=>1000,33460=>1000,
+ 33461=>1000,33462=>1000,33463=>1000,33464=>1000,33465=>1000,33466=>1000,33467=>1000,33468=>1000,33469=>1000,33470=>1000,33471=>1000,33472=>1000,33473=>1000,33474=>1000,33475=>1000,33476=>1000,
+ 33477=>1000,33478=>1000,33479=>1000,33480=>1000,33481=>1000,33482=>1000,33483=>1000,33484=>1000,33485=>1000,33486=>1000,33487=>1000,33488=>1000,33489=>1000,33490=>1000,33491=>1000,33492=>1000,
+ 33493=>1000,33494=>1000,33495=>1000,33496=>1000,33497=>1000,33498=>1000,33499=>1000,33500=>1000,33501=>1000,33502=>1000,33503=>1000,33504=>1000,33505=>1000,33506=>1000,33507=>1000,33508=>1000,
+ 33509=>1000,33510=>1000,33511=>1000,33512=>1000,33513=>1000,33514=>1000,33515=>1000,33516=>1000,33517=>1000,33518=>1000,33519=>1000,33520=>1000,33521=>1000,33522=>1000,33523=>1000,33524=>1000,
+ 33525=>1000,33526=>1000,33527=>1000,33528=>1000,33529=>1000,33530=>1000,33531=>1000,33532=>1000,33533=>1000,33534=>1000,33535=>1000,33536=>1000,33537=>1000,33538=>1000,33539=>1000,33540=>1000,
+ 33541=>1000,33542=>1000,33543=>1000,33544=>1000,33545=>1000,33546=>1000,33547=>1000,33548=>1000,33549=>1000,33550=>1000,33551=>1000,33552=>1000,33553=>1000,33554=>1000,33555=>1000,33556=>1000,
+ 33557=>1000,33558=>1000,33559=>1000,33560=>1000,33561=>1000,33562=>1000,33563=>1000,33564=>1000,33565=>1000,33566=>1000,33567=>1000,33568=>1000,33569=>1000,33570=>1000,33571=>1000,33572=>1000,
+ 33573=>1000,33574=>1000,33575=>1000,33576=>1000,33577=>1000,33578=>1000,33579=>1000,33580=>1000,33581=>1000,33582=>1000,33583=>1000,33584=>1000,33585=>1000,33586=>1000,33587=>1000,33588=>1000,
+ 33589=>1000,33590=>1000,33591=>1000,33592=>1000,33593=>1000,33594=>1000,33595=>1000,33596=>1000,33597=>1000,33598=>1000,33599=>1000,33600=>1000,33601=>1000,33602=>1000,33603=>1000,33604=>1000,
+ 33605=>1000,33606=>1000,33607=>1000,33608=>1000,33609=>1000,33610=>1000,33611=>1000,33612=>1000,33613=>1000,33614=>1000,33615=>1000,33616=>1000,33617=>1000,33618=>1000,33619=>1000,33620=>1000,
+ 33621=>1000,33622=>1000,33623=>1000,33624=>1000,33625=>1000,33626=>1000,33627=>1000,33628=>1000,33629=>1000,33630=>1000,33631=>1000,33632=>1000,33633=>1000,33634=>1000,33635=>1000,33636=>1000,
+ 33637=>1000,33638=>1000,33639=>1000,33640=>1000,33641=>1000,33642=>1000,33643=>1000,33644=>1000,33645=>1000,33646=>1000,33647=>1000,33648=>1000,33649=>1000,33650=>1000,33651=>1000,33652=>1000,
+ 33653=>1000,33654=>1000,33655=>1000,33656=>1000,33657=>1000,33658=>1000,33659=>1000,33660=>1000,33661=>1000,33662=>1000,33663=>1000,33664=>1000,33665=>1000,33666=>1000,33667=>1000,33668=>1000,
+ 33669=>1000,33670=>1000,33671=>1000,33672=>1000,33673=>1000,33674=>1000,33675=>1000,33676=>1000,33677=>1000,33678=>1000,33679=>1000,33680=>1000,33681=>1000,33682=>1000,33683=>1000,33684=>1000,
+ 33685=>1000,33686=>1000,33687=>1000,33688=>1000,33689=>1000,33690=>1000,33691=>1000,33692=>1000,33693=>1000,33694=>1000,33695=>1000,33696=>1000,33697=>1000,33698=>1000,33699=>1000,33700=>1000,
+ 33701=>1000,33702=>1000,33703=>1000,33704=>1000,33705=>1000,33706=>1000,33707=>1000,33708=>1000,33709=>1000,33710=>1000,33711=>1000,33712=>1000,33713=>1000,33714=>1000,33715=>1000,33716=>1000,
+ 33717=>1000,33718=>1000,33719=>1000,33720=>1000,33721=>1000,33722=>1000,33723=>1000,33724=>1000,33725=>1000,33726=>1000,33727=>1000,33728=>1000,33729=>1000,33730=>1000,33731=>1000,33732=>1000,
+ 33733=>1000,33734=>1000,33735=>1000,33736=>1000,33737=>1000,33738=>1000,33739=>1000,33740=>1000,33741=>1000,33742=>1000,33743=>1000,33744=>1000,33745=>1000,33746=>1000,33747=>1000,33748=>1000,
+ 33749=>1000,33750=>1000,33751=>1000,33752=>1000,33753=>1000,33754=>1000,33755=>1000,33756=>1000,33757=>1000,33758=>1000,33759=>1000,33760=>1000,33761=>1000,33762=>1000,33763=>1000,33764=>1000,
+ 33765=>1000,33766=>1000,33767=>1000,33768=>1000,33769=>1000,33770=>1000,33771=>1000,33772=>1000,33773=>1000,33774=>1000,33775=>1000,33776=>1000,33777=>1000,33778=>1000,33779=>1000,33780=>1000,
+ 33781=>1000,33782=>1000,33783=>1000,33784=>1000,33785=>1000,33786=>1000,33787=>1000,33788=>1000,33789=>1000,33790=>1000,33791=>1000,33792=>1000,33793=>1000,33794=>1000,33795=>1000,33796=>1000,
+ 33797=>1000,33798=>1000,33799=>1000,33800=>1000,33801=>1000,33802=>1000,33803=>1000,33804=>1000,33805=>1000,33806=>1000,33807=>1000,33808=>1000,33809=>1000,33810=>1000,33811=>1000,33812=>1000,
+ 33813=>1000,33814=>1000,33815=>1000,33816=>1000,33817=>1000,33818=>1000,33819=>1000,33820=>1000,33821=>1000,33822=>1000,33823=>1000,33824=>1000,33825=>1000,33826=>1000,33827=>1000,33828=>1000,
+ 33829=>1000,33830=>1000,33831=>1000,33832=>1000,33833=>1000,33834=>1000,33835=>1000,33836=>1000,33837=>1000,33838=>1000,33839=>1000,33840=>1000,33841=>1000,33842=>1000,33843=>1000,33844=>1000,
+ 33845=>1000,33846=>1000,33847=>1000,33848=>1000,33849=>1000,33850=>1000,33851=>1000,33852=>1000,33853=>1000,33854=>1000,33855=>1000,33856=>1000,33857=>1000,33858=>1000,33859=>1000,33860=>1000,
+ 33861=>1000,33862=>1000,33863=>1000,33864=>1000,33865=>1000,33866=>1000,33867=>1000,33868=>1000,33869=>1000,33870=>1000,33871=>1000,33872=>1000,33873=>1000,33874=>1000,33875=>1000,33876=>1000,
+ 33877=>1000,33878=>1000,33879=>1000,33880=>1000,33881=>1000,33882=>1000,33883=>1000,33884=>1000,33885=>1000,33886=>1000,33887=>1000,33888=>1000,33889=>1000,33890=>1000,33891=>1000,33892=>1000,
+ 33893=>1000,33894=>1000,33895=>1000,33896=>1000,33897=>1000,33898=>1000,33899=>1000,33900=>1000,33901=>1000,33902=>1000,33903=>1000,33904=>1000,33905=>1000,33906=>1000,33907=>1000,33908=>1000,
+ 33909=>1000,33910=>1000,33911=>1000,33912=>1000,33913=>1000,33914=>1000,33915=>1000,33916=>1000,33917=>1000,33918=>1000,33919=>1000,33920=>1000,33921=>1000,33922=>1000,33923=>1000,33924=>1000,
+ 33925=>1000,33926=>1000,33927=>1000,33928=>1000,33929=>1000,33930=>1000,33931=>1000,33932=>1000,33933=>1000,33934=>1000,33935=>1000,33936=>1000,33937=>1000,33938=>1000,33939=>1000,33940=>1000,
+ 33941=>1000,33942=>1000,33943=>1000,33944=>1000,33945=>1000,33946=>1000,33947=>1000,33948=>1000,33949=>1000,33950=>1000,33951=>1000,33952=>1000,33953=>1000,33954=>1000,33955=>1000,33956=>1000,
+ 33957=>1000,33958=>1000,33959=>1000,33960=>1000,33961=>1000,33962=>1000,33963=>1000,33964=>1000,33965=>1000,33966=>1000,33967=>1000,33968=>1000,33969=>1000,33970=>1000,33971=>1000,33972=>1000,
+ 33973=>1000,33974=>1000,33975=>1000,33976=>1000,33977=>1000,33978=>1000,33979=>1000,33980=>1000,33981=>1000,33982=>1000,33983=>1000,33984=>1000,33985=>1000,33986=>1000,33987=>1000,33988=>1000,
+ 33989=>1000,33990=>1000,33991=>1000,33992=>1000,33993=>1000,33994=>1000,33995=>1000,33996=>1000,33997=>1000,33998=>1000,33999=>1000,34000=>1000,34001=>1000,34002=>1000,34003=>1000,34004=>1000,
+ 34005=>1000,34006=>1000,34007=>1000,34008=>1000,34009=>1000,34010=>1000,34011=>1000,34012=>1000,34013=>1000,34014=>1000,34015=>1000,34016=>1000,34017=>1000,34018=>1000,34019=>1000,34020=>1000,
+ 34021=>1000,34022=>1000,34023=>1000,34024=>1000,34025=>1000,34026=>1000,34027=>1000,34028=>1000,34029=>1000,34030=>1000,34031=>1000,34032=>1000,34033=>1000,34034=>1000,34035=>1000,34036=>1000,
+ 34037=>1000,34038=>1000,34039=>1000,34040=>1000,34041=>1000,34042=>1000,34043=>1000,34044=>1000,34045=>1000,34046=>1000,34047=>1000,34048=>1000,34049=>1000,34050=>1000,34051=>1000,34052=>1000,
+ 34053=>1000,34054=>1000,34055=>1000,34056=>1000,34057=>1000,34058=>1000,34059=>1000,34060=>1000,34061=>1000,34062=>1000,34063=>1000,34064=>1000,34065=>1000,34066=>1000,34067=>1000,34068=>1000,
+ 34069=>1000,34070=>1000,34071=>1000,34072=>1000,34073=>1000,34074=>1000,34075=>1000,34076=>1000,34077=>1000,34078=>1000,34079=>1000,34080=>1000,34081=>1000,34082=>1000,34083=>1000,34084=>1000,
+ 34085=>1000,34086=>1000,34087=>1000,34088=>1000,34089=>1000,34090=>1000,34091=>1000,34092=>1000,34093=>1000,34094=>1000,34095=>1000,34096=>1000,34097=>1000,34098=>1000,34099=>1000,34100=>1000,
+ 34101=>1000,34102=>1000,34103=>1000,34104=>1000,34105=>1000,34106=>1000,34107=>1000,34108=>1000,34109=>1000,34110=>1000,34111=>1000,34112=>1000,34113=>1000,34114=>1000,34115=>1000,34116=>1000,
+ 34117=>1000,34118=>1000,34119=>1000,34120=>1000,34121=>1000,34122=>1000,34123=>1000,34124=>1000,34125=>1000,34126=>1000,34127=>1000,34128=>1000,34129=>1000,34130=>1000,34131=>1000,34132=>1000,
+ 34133=>1000,34134=>1000,34135=>1000,34136=>1000,34137=>1000,34138=>1000,34139=>1000,34140=>1000,34141=>1000,34142=>1000,34143=>1000,34144=>1000,34145=>1000,34146=>1000,34147=>1000,34148=>1000,
+ 34149=>1000,34150=>1000,34151=>1000,34152=>1000,34153=>1000,34154=>1000,34155=>1000,34156=>1000,34157=>1000,34158=>1000,34159=>1000,34160=>1000,34161=>1000,34162=>1000,34163=>1000,34164=>1000,
+ 34165=>1000,34166=>1000,34167=>1000,34168=>1000,34169=>1000,34170=>1000,34171=>1000,34172=>1000,34173=>1000,34174=>1000,34175=>1000,34176=>1000,34177=>1000,34178=>1000,34179=>1000,34180=>1000,
+ 34181=>1000,34182=>1000,34183=>1000,34184=>1000,34185=>1000,34186=>1000,34187=>1000,34188=>1000,34189=>1000,34190=>1000,34191=>1000,34192=>1000,34193=>1000,34194=>1000,34195=>1000,34196=>1000,
+ 34197=>1000,34198=>1000,34199=>1000,34200=>1000,34201=>1000,34202=>1000,34203=>1000,34204=>1000,34205=>1000,34206=>1000,34207=>1000,34208=>1000,34209=>1000,34210=>1000,34211=>1000,34212=>1000,
+ 34213=>1000,34214=>1000,34215=>1000,34216=>1000,34217=>1000,34218=>1000,34219=>1000,34220=>1000,34221=>1000,34222=>1000,34223=>1000,34224=>1000,34225=>1000,34226=>1000,34227=>1000,34228=>1000,
+ 34229=>1000,34230=>1000,34231=>1000,34232=>1000,34233=>1000,34234=>1000,34235=>1000,34236=>1000,34237=>1000,34238=>1000,34239=>1000,34240=>1000,34241=>1000,34242=>1000,34243=>1000,34244=>1000,
+ 34245=>1000,34246=>1000,34247=>1000,34248=>1000,34249=>1000,34250=>1000,34251=>1000,34252=>1000,34253=>1000,34254=>1000,34255=>1000,34256=>1000,34257=>1000,34258=>1000,34259=>1000,34260=>1000,
+ 34261=>1000,34262=>1000,34263=>1000,34264=>1000,34265=>1000,34266=>1000,34267=>1000,34268=>1000,34269=>1000,34270=>1000,34271=>1000,34272=>1000,34273=>1000,34274=>1000,34275=>1000,34276=>1000,
+ 34277=>1000,34278=>1000,34279=>1000,34280=>1000,34281=>1000,34282=>1000,34283=>1000,34284=>1000,34285=>1000,34286=>1000,34287=>1000,34288=>1000,34289=>1000,34290=>1000,34291=>1000,34292=>1000,
+ 34293=>1000,34294=>1000,34295=>1000,34296=>1000,34297=>1000,34298=>1000,34299=>1000,34300=>1000,34301=>1000,34302=>1000,34303=>1000,34304=>1000,34305=>1000,34306=>1000,34307=>1000,34308=>1000,
+ 34309=>1000,34310=>1000,34311=>1000,34312=>1000,34313=>1000,34314=>1000,34315=>1000,34316=>1000,34317=>1000,34318=>1000,34319=>1000,34320=>1000,34321=>1000,34322=>1000,34323=>1000,34324=>1000,
+ 34325=>1000,34326=>1000,34327=>1000,34328=>1000,34329=>1000,34330=>1000,34331=>1000,34332=>1000,34333=>1000,34334=>1000,34335=>1000,34336=>1000,34337=>1000,34338=>1000,34339=>1000,34340=>1000,
+ 34341=>1000,34342=>1000,34343=>1000,34344=>1000,34345=>1000,34346=>1000,34347=>1000,34348=>1000,34349=>1000,34350=>1000,34351=>1000,34352=>1000,34353=>1000,34354=>1000,34355=>1000,34356=>1000,
+ 34357=>1000,34358=>1000,34359=>1000,34360=>1000,34361=>1000,34362=>1000,34363=>1000,34364=>1000,34365=>1000,34366=>1000,34367=>1000,34368=>1000,34369=>1000,34370=>1000,34371=>1000,34372=>1000,
+ 34373=>1000,34374=>1000,34375=>1000,34376=>1000,34377=>1000,34378=>1000,34379=>1000,34380=>1000,34381=>1000,34382=>1000,34383=>1000,34384=>1000,34385=>1000,34386=>1000,34387=>1000,34388=>1000,
+ 34389=>1000,34390=>1000,34391=>1000,34392=>1000,34393=>1000,34394=>1000,34395=>1000,34396=>1000,34397=>1000,34398=>1000,34399=>1000,34400=>1000,34401=>1000,34402=>1000,34403=>1000,34404=>1000,
+ 34405=>1000,34406=>1000,34407=>1000,34408=>1000,34409=>1000,34410=>1000,34411=>1000,34412=>1000,34413=>1000,34414=>1000,34415=>1000,34416=>1000,34417=>1000,34418=>1000,34419=>1000,34420=>1000,
+ 34421=>1000,34422=>1000,34423=>1000,34424=>1000,34425=>1000,34426=>1000,34427=>1000,34428=>1000,34429=>1000,34430=>1000,34431=>1000,34432=>1000,34433=>1000,34434=>1000,34435=>1000,34436=>1000,
+ 34437=>1000,34438=>1000,34439=>1000,34440=>1000,34441=>1000,34442=>1000,34443=>1000,34444=>1000,34445=>1000,34446=>1000,34447=>1000,34448=>1000,34449=>1000,34450=>1000,34451=>1000,34452=>1000,
+ 34453=>1000,34454=>1000,34455=>1000,34456=>1000,34457=>1000,34458=>1000,34459=>1000,34460=>1000,34461=>1000,34462=>1000,34463=>1000,34464=>1000,34465=>1000,34466=>1000,34467=>1000,34468=>1000,
+ 34469=>1000,34470=>1000,34471=>1000,34472=>1000,34473=>1000,34474=>1000,34475=>1000,34476=>1000,34477=>1000,34478=>1000,34479=>1000,34480=>1000,34481=>1000,34482=>1000,34483=>1000,34484=>1000,
+ 34485=>1000,34486=>1000,34487=>1000,34488=>1000,34489=>1000,34490=>1000,34491=>1000,34492=>1000,34493=>1000,34494=>1000,34495=>1000,34496=>1000,34497=>1000,34498=>1000,34499=>1000,34500=>1000,
+ 34501=>1000,34502=>1000,34503=>1000,34504=>1000,34505=>1000,34506=>1000,34507=>1000,34508=>1000,34509=>1000,34510=>1000,34511=>1000,34512=>1000,34513=>1000,34514=>1000,34515=>1000,34516=>1000,
+ 34517=>1000,34518=>1000,34519=>1000,34520=>1000,34521=>1000,34522=>1000,34523=>1000,34524=>1000,34525=>1000,34526=>1000,34527=>1000,34528=>1000,34529=>1000,34530=>1000,34531=>1000,34532=>1000,
+ 34533=>1000,34534=>1000,34535=>1000,34536=>1000,34537=>1000,34538=>1000,34539=>1000,34540=>1000,34541=>1000,34542=>1000,34543=>1000,34544=>1000,34545=>1000,34546=>1000,34547=>1000,34548=>1000,
+ 34549=>1000,34550=>1000,34551=>1000,34552=>1000,34553=>1000,34554=>1000,34555=>1000,34556=>1000,34557=>1000,34558=>1000,34559=>1000,34560=>1000,34561=>1000,34562=>1000,34563=>1000,34564=>1000,
+ 34565=>1000,34566=>1000,34567=>1000,34568=>1000,34569=>1000,34570=>1000,34571=>1000,34572=>1000,34573=>1000,34574=>1000,34575=>1000,34576=>1000,34577=>1000,34578=>1000,34579=>1000,34580=>1000,
+ 34581=>1000,34582=>1000,34583=>1000,34584=>1000,34585=>1000,34586=>1000,34587=>1000,34588=>1000,34589=>1000,34590=>1000,34591=>1000,34592=>1000,34593=>1000,34594=>1000,34595=>1000,34596=>1000,
+ 34597=>1000,34598=>1000,34599=>1000,34600=>1000,34601=>1000,34602=>1000,34603=>1000,34604=>1000,34605=>1000,34606=>1000,34607=>1000,34608=>1000,34609=>1000,34610=>1000,34611=>1000,34612=>1000,
+ 34613=>1000,34614=>1000,34615=>1000,34616=>1000,34617=>1000,34618=>1000,34619=>1000,34620=>1000,34621=>1000,34622=>1000,34623=>1000,34624=>1000,34625=>1000,34626=>1000,34627=>1000,34628=>1000,
+ 34629=>1000,34630=>1000,34631=>1000,34632=>1000,34633=>1000,34634=>1000,34635=>1000,34636=>1000,34637=>1000,34638=>1000,34639=>1000,34640=>1000,34641=>1000,34642=>1000,34643=>1000,34644=>1000,
+ 34645=>1000,34646=>1000,34647=>1000,34648=>1000,34649=>1000,34650=>1000,34651=>1000,34652=>1000,34653=>1000,34654=>1000,34655=>1000,34656=>1000,34657=>1000,34658=>1000,34659=>1000,34660=>1000,
+ 34661=>1000,34662=>1000,34663=>1000,34664=>1000,34665=>1000,34666=>1000,34667=>1000,34668=>1000,34669=>1000,34670=>1000,34671=>1000,34672=>1000,34673=>1000,34674=>1000,34675=>1000,34676=>1000,
+ 34677=>1000,34678=>1000,34679=>1000,34680=>1000,34681=>1000,34682=>1000,34683=>1000,34684=>1000,34685=>1000,34686=>1000,34687=>1000,34688=>1000,34689=>1000,34690=>1000,34691=>1000,34692=>1000,
+ 34693=>1000,34694=>1000,34695=>1000,34696=>1000,34697=>1000,34698=>1000,34699=>1000,34700=>1000,34701=>1000,34702=>1000,34703=>1000,34704=>1000,34705=>1000,34706=>1000,34707=>1000,34708=>1000,
+ 34709=>1000,34710=>1000,34711=>1000,34712=>1000,34713=>1000,34714=>1000,34715=>1000,34716=>1000,34717=>1000,34718=>1000,34719=>1000,34720=>1000,34721=>1000,34722=>1000,34723=>1000,34724=>1000,
+ 34725=>1000,34726=>1000,34727=>1000,34728=>1000,34729=>1000,34730=>1000,34731=>1000,34732=>1000,34733=>1000,34734=>1000,34735=>1000,34736=>1000,34737=>1000,34738=>1000,34739=>1000,34740=>1000,
+ 34741=>1000,34742=>1000,34743=>1000,34744=>1000,34745=>1000,34746=>1000,34747=>1000,34748=>1000,34749=>1000,34750=>1000,34751=>1000,34752=>1000,34753=>1000,34754=>1000,34755=>1000,34756=>1000,
+ 34757=>1000,34758=>1000,34759=>1000,34760=>1000,34761=>1000,34762=>1000,34763=>1000,34764=>1000,34765=>1000,34766=>1000,34767=>1000,34768=>1000,34769=>1000,34770=>1000,34771=>1000,34772=>1000,
+ 34773=>1000,34774=>1000,34775=>1000,34776=>1000,34777=>1000,34778=>1000,34779=>1000,34780=>1000,34781=>1000,34782=>1000,34783=>1000,34784=>1000,34785=>1000,34786=>1000,34787=>1000,34788=>1000,
+ 34789=>1000,34790=>1000,34791=>1000,34792=>1000,34793=>1000,34794=>1000,34795=>1000,34796=>1000,34797=>1000,34798=>1000,34799=>1000,34800=>1000,34801=>1000,34802=>1000,34803=>1000,34804=>1000,
+ 34805=>1000,34806=>1000,34807=>1000,34808=>1000,34809=>1000,34810=>1000,34811=>1000,34812=>1000,34813=>1000,34814=>1000,34815=>1000,34816=>1000,34817=>1000,34818=>1000,34819=>1000,34820=>1000,
+ 34821=>1000,34822=>1000,34823=>1000,34824=>1000,34825=>1000,34826=>1000,34827=>1000,34828=>1000,34829=>1000,34830=>1000,34831=>1000,34832=>1000,34833=>1000,34834=>1000,34835=>1000,34836=>1000,
+ 34837=>1000,34838=>1000,34839=>1000,34840=>1000,34841=>1000,34842=>1000,34843=>1000,34844=>1000,34845=>1000,34846=>1000,34847=>1000,34848=>1000,34849=>1000,34850=>1000,34851=>1000,34852=>1000,
+ 34853=>1000,34854=>1000,34855=>1000,34856=>1000,34857=>1000,34858=>1000,34859=>1000,34860=>1000,34861=>1000,34862=>1000,34863=>1000,34864=>1000,34865=>1000,34866=>1000,34867=>1000,34868=>1000,
+ 34869=>1000,34870=>1000,34871=>1000,34872=>1000,34873=>1000,34874=>1000,34875=>1000,34876=>1000,34877=>1000,34878=>1000,34879=>1000,34880=>1000,34881=>1000,34882=>1000,34883=>1000,34884=>1000,
+ 34885=>1000,34886=>1000,34887=>1000,34888=>1000,34889=>1000,34890=>1000,34891=>1000,34892=>1000,34893=>1000,34894=>1000,34895=>1000,34896=>1000,34897=>1000,34898=>1000,34899=>1000,34900=>1000,
+ 34901=>1000,34902=>1000,34903=>1000,34904=>1000,34905=>1000,34906=>1000,34907=>1000,34908=>1000,34909=>1000,34910=>1000,34911=>1000,34912=>1000,34913=>1000,34914=>1000,34915=>1000,34916=>1000,
+ 34917=>1000,34918=>1000,34919=>1000,34920=>1000,34921=>1000,34922=>1000,34923=>1000,34924=>1000,34925=>1000,34926=>1000,34927=>1000,34928=>1000,34929=>1000,34930=>1000,34931=>1000,34932=>1000,
+ 34933=>1000,34934=>1000,34935=>1000,34936=>1000,34937=>1000,34938=>1000,34939=>1000,34940=>1000,34941=>1000,34942=>1000,34943=>1000,34944=>1000,34945=>1000,34946=>1000,34947=>1000,34948=>1000,
+ 34949=>1000,34950=>1000,34951=>1000,34952=>1000,34953=>1000,34954=>1000,34955=>1000,34956=>1000,34957=>1000,34958=>1000,34959=>1000,34960=>1000,34961=>1000,34962=>1000,34963=>1000,34964=>1000,
+ 34965=>1000,34966=>1000,34967=>1000,34968=>1000,34969=>1000,34970=>1000,34971=>1000,34972=>1000,34973=>1000,34974=>1000,34975=>1000,34976=>1000,34977=>1000,34978=>1000,34979=>1000,34980=>1000,
+ 34981=>1000,34982=>1000,34983=>1000,34984=>1000,34985=>1000,34986=>1000,34987=>1000,34988=>1000,34989=>1000,34990=>1000,34991=>1000,34992=>1000,34993=>1000,34994=>1000,34995=>1000,34996=>1000,
+ 34997=>1000,34998=>1000,34999=>1000,35000=>1000,35001=>1000,35002=>1000,35003=>1000,35004=>1000,35005=>1000,35006=>1000,35007=>1000,35008=>1000,35009=>1000,35010=>1000,35011=>1000,35012=>1000,
+ 35013=>1000,35014=>1000,35015=>1000,35016=>1000,35017=>1000,35018=>1000,35019=>1000,35020=>1000,35021=>1000,35022=>1000,35023=>1000,35024=>1000,35025=>1000,35026=>1000,35027=>1000,35028=>1000,
+ 35029=>1000,35030=>1000,35031=>1000,35032=>1000,35033=>1000,35034=>1000,35035=>1000,35036=>1000,35037=>1000,35038=>1000,35039=>1000,35040=>1000,35041=>1000,35042=>1000,35043=>1000,35044=>1000,
+ 35045=>1000,35046=>1000,35047=>1000,35048=>1000,35049=>1000,35050=>1000,35051=>1000,35052=>1000,35053=>1000,35054=>1000,35055=>1000,35056=>1000,35057=>1000,35058=>1000,35059=>1000,35060=>1000,
+ 35061=>1000,35062=>1000,35063=>1000,35064=>1000,35065=>1000,35066=>1000,35067=>1000,35068=>1000,35069=>1000,35070=>1000,35071=>1000,35072=>1000,35073=>1000,35074=>1000,35075=>1000,35076=>1000,
+ 35077=>1000,35078=>1000,35079=>1000,35080=>1000,35081=>1000,35082=>1000,35083=>1000,35084=>1000,35085=>1000,35086=>1000,35087=>1000,35088=>1000,35089=>1000,35090=>1000,35091=>1000,35092=>1000,
+ 35093=>1000,35094=>1000,35095=>1000,35096=>1000,35097=>1000,35098=>1000,35099=>1000,35100=>1000,35101=>1000,35102=>1000,35103=>1000,35104=>1000,35105=>1000,35106=>1000,35107=>1000,35108=>1000,
+ 35109=>1000,35110=>1000,35111=>1000,35112=>1000,35113=>1000,35114=>1000,35115=>1000,35116=>1000,35117=>1000,35118=>1000,35119=>1000,35120=>1000,35121=>1000,35122=>1000,35123=>1000,35124=>1000,
+ 35125=>1000,35126=>1000,35127=>1000,35128=>1000,35129=>1000,35130=>1000,35131=>1000,35132=>1000,35133=>1000,35134=>1000,35135=>1000,35136=>1000,35137=>1000,35138=>1000,35139=>1000,35140=>1000,
+ 35141=>1000,35142=>1000,35143=>1000,35144=>1000,35145=>1000,35146=>1000,35147=>1000,35148=>1000,35149=>1000,35150=>1000,35151=>1000,35152=>1000,35153=>1000,35154=>1000,35155=>1000,35156=>1000,
+ 35157=>1000,35158=>1000,35159=>1000,35160=>1000,35161=>1000,35162=>1000,35163=>1000,35164=>1000,35165=>1000,35166=>1000,35167=>1000,35168=>1000,35169=>1000,35170=>1000,35171=>1000,35172=>1000,
+ 35173=>1000,35174=>1000,35175=>1000,35176=>1000,35177=>1000,35178=>1000,35179=>1000,35180=>1000,35181=>1000,35182=>1000,35183=>1000,35184=>1000,35185=>1000,35186=>1000,35187=>1000,35188=>1000,
+ 35189=>1000,35190=>1000,35191=>1000,35192=>1000,35193=>1000,35194=>1000,35195=>1000,35196=>1000,35197=>1000,35198=>1000,35199=>1000,35200=>1000,35201=>1000,35202=>1000,35203=>1000,35204=>1000,
+ 35205=>1000,35206=>1000,35207=>1000,35208=>1000,35209=>1000,35210=>1000,35211=>1000,35212=>1000,35213=>1000,35214=>1000,35215=>1000,35216=>1000,35217=>1000,35218=>1000,35219=>1000,35220=>1000,
+ 35221=>1000,35222=>1000,35223=>1000,35224=>1000,35225=>1000,35226=>1000,35227=>1000,35228=>1000,35229=>1000,35230=>1000,35231=>1000,35232=>1000,35233=>1000,35234=>1000,35235=>1000,35236=>1000,
+ 35237=>1000,35238=>1000,35239=>1000,35240=>1000,35241=>1000,35242=>1000,35243=>1000,35244=>1000,35245=>1000,35246=>1000,35247=>1000,35248=>1000,35249=>1000,35250=>1000,35251=>1000,35252=>1000,
+ 35253=>1000,35254=>1000,35255=>1000,35256=>1000,35257=>1000,35258=>1000,35259=>1000,35260=>1000,35261=>1000,35262=>1000,35263=>1000,35264=>1000,35265=>1000,35266=>1000,35267=>1000,35268=>1000,
+ 35269=>1000,35270=>1000,35271=>1000,35272=>1000,35273=>1000,35274=>1000,35275=>1000,35276=>1000,35277=>1000,35278=>1000,35279=>1000,35280=>1000,35281=>1000,35282=>1000,35283=>1000,35284=>1000,
+ 35285=>1000,35286=>1000,35287=>1000,35288=>1000,35289=>1000,35290=>1000,35291=>1000,35292=>1000,35293=>1000,35294=>1000,35295=>1000,35296=>1000,35297=>1000,35298=>1000,35299=>1000,35300=>1000,
+ 35301=>1000,35302=>1000,35303=>1000,35304=>1000,35305=>1000,35306=>1000,35307=>1000,35308=>1000,35309=>1000,35310=>1000,35311=>1000,35312=>1000,35313=>1000,35314=>1000,35315=>1000,35316=>1000,
+ 35317=>1000,35318=>1000,35319=>1000,35320=>1000,35321=>1000,35322=>1000,35323=>1000,35324=>1000,35325=>1000,35326=>1000,35327=>1000,35328=>1000,35329=>1000,35330=>1000,35331=>1000,35332=>1000,
+ 35333=>1000,35334=>1000,35335=>1000,35336=>1000,35337=>1000,35338=>1000,35339=>1000,35340=>1000,35341=>1000,35342=>1000,35343=>1000,35344=>1000,35345=>1000,35346=>1000,35347=>1000,35348=>1000,
+ 35349=>1000,35350=>1000,35351=>1000,35352=>1000,35353=>1000,35354=>1000,35355=>1000,35356=>1000,35357=>1000,35358=>1000,35359=>1000,35360=>1000,35361=>1000,35362=>1000,35363=>1000,35364=>1000,
+ 35365=>1000,35366=>1000,35367=>1000,35368=>1000,35369=>1000,35370=>1000,35371=>1000,35372=>1000,35373=>1000,35374=>1000,35375=>1000,35376=>1000,35377=>1000,35378=>1000,35379=>1000,35380=>1000,
+ 35381=>1000,35382=>1000,35383=>1000,35384=>1000,35385=>1000,35386=>1000,35387=>1000,35388=>1000,35389=>1000,35390=>1000,35391=>1000,35392=>1000,35393=>1000,35394=>1000,35395=>1000,35396=>1000,
+ 35397=>1000,35398=>1000,35399=>1000,35400=>1000,35401=>1000,35402=>1000,35403=>1000,35404=>1000,35405=>1000,35406=>1000,35407=>1000,35408=>1000,35409=>1000,35410=>1000,35411=>1000,35412=>1000,
+ 35413=>1000,35414=>1000,35415=>1000,35416=>1000,35417=>1000,35418=>1000,35419=>1000,35420=>1000,35421=>1000,35422=>1000,35423=>1000,35424=>1000,35425=>1000,35426=>1000,35427=>1000,35428=>1000,
+ 35429=>1000,35430=>1000,35431=>1000,35432=>1000,35433=>1000,35434=>1000,35435=>1000,35436=>1000,35437=>1000,35438=>1000,35439=>1000,35440=>1000,35441=>1000,35442=>1000,35443=>1000,35444=>1000,
+ 35445=>1000,35446=>1000,35447=>1000,35448=>1000,35449=>1000,35450=>1000,35451=>1000,35452=>1000,35453=>1000,35454=>1000,35455=>1000,35456=>1000,35457=>1000,35458=>1000,35459=>1000,35460=>1000,
+ 35461=>1000,35462=>1000,35463=>1000,35464=>1000,35465=>1000,35466=>1000,35467=>1000,35468=>1000,35469=>1000,35470=>1000,35471=>1000,35472=>1000,35473=>1000,35474=>1000,35475=>1000,35476=>1000,
+ 35477=>1000,35478=>1000,35479=>1000,35480=>1000,35481=>1000,35482=>1000,35483=>1000,35484=>1000,35485=>1000,35486=>1000,35487=>1000,35488=>1000,35489=>1000,35490=>1000,35491=>1000,35492=>1000,
+ 35493=>1000,35494=>1000,35495=>1000,35496=>1000,35497=>1000,35498=>1000,35499=>1000,35500=>1000,35501=>1000,35502=>1000,35503=>1000,35504=>1000,35505=>1000,35506=>1000,35507=>1000,35508=>1000,
+ 35509=>1000,35510=>1000,35511=>1000,35512=>1000,35513=>1000,35514=>1000,35515=>1000,35516=>1000,35517=>1000,35518=>1000,35519=>1000,35520=>1000,35521=>1000,35522=>1000,35523=>1000,35524=>1000,
+ 35525=>1000,35526=>1000,35527=>1000,35528=>1000,35529=>1000,35530=>1000,35531=>1000,35532=>1000,35533=>1000,35534=>1000,35535=>1000,35536=>1000,35537=>1000,35538=>1000,35539=>1000,35540=>1000,
+ 35541=>1000,35542=>1000,35543=>1000,35544=>1000,35545=>1000,35546=>1000,35547=>1000,35548=>1000,35549=>1000,35550=>1000,35551=>1000,35552=>1000,35553=>1000,35554=>1000,35555=>1000,35556=>1000,
+ 35557=>1000,35558=>1000,35559=>1000,35560=>1000,35561=>1000,35562=>1000,35563=>1000,35564=>1000,35565=>1000,35566=>1000,35567=>1000,35568=>1000,35569=>1000,35570=>1000,35571=>1000,35572=>1000,
+ 35573=>1000,35574=>1000,35575=>1000,35576=>1000,35577=>1000,35578=>1000,35579=>1000,35580=>1000,35581=>1000,35582=>1000,35583=>1000,35584=>1000,35585=>1000,35586=>1000,35587=>1000,35588=>1000,
+ 35589=>1000,35590=>1000,35591=>1000,35592=>1000,35593=>1000,35594=>1000,35595=>1000,35596=>1000,35597=>1000,35598=>1000,35599=>1000,35600=>1000,35601=>1000,35602=>1000,35603=>1000,35604=>1000,
+ 35605=>1000,35606=>1000,35607=>1000,35608=>1000,35609=>1000,35610=>1000,35611=>1000,35612=>1000,35613=>1000,35614=>1000,35615=>1000,35616=>1000,35617=>1000,35618=>1000,35619=>1000,35620=>1000,
+ 35621=>1000,35622=>1000,35623=>1000,35624=>1000,35625=>1000,35626=>1000,35627=>1000,35628=>1000,35629=>1000,35630=>1000,35631=>1000,35632=>1000,35633=>1000,35634=>1000,35635=>1000,35636=>1000,
+ 35637=>1000,35638=>1000,35639=>1000,35640=>1000,35641=>1000,35642=>1000,35643=>1000,35644=>1000,35645=>1000,35646=>1000,35647=>1000,35648=>1000,35649=>1000,35650=>1000,35651=>1000,35652=>1000,
+ 35653=>1000,35654=>1000,35655=>1000,35656=>1000,35657=>1000,35658=>1000,35659=>1000,35660=>1000,35661=>1000,35662=>1000,35663=>1000,35664=>1000,35665=>1000,35666=>1000,35667=>1000,35668=>1000,
+ 35669=>1000,35670=>1000,35671=>1000,35672=>1000,35673=>1000,35674=>1000,35675=>1000,35676=>1000,35677=>1000,35678=>1000,35679=>1000,35680=>1000,35681=>1000,35682=>1000,35683=>1000,35684=>1000,
+ 35685=>1000,35686=>1000,35687=>1000,35688=>1000,35689=>1000,35690=>1000,35691=>1000,35692=>1000,35693=>1000,35694=>1000,35695=>1000,35696=>1000,35697=>1000,35698=>1000,35699=>1000,35700=>1000,
+ 35701=>1000,35702=>1000,35703=>1000,35704=>1000,35705=>1000,35706=>1000,35707=>1000,35708=>1000,35709=>1000,35710=>1000,35711=>1000,35712=>1000,35713=>1000,35714=>1000,35715=>1000,35716=>1000,
+ 35717=>1000,35718=>1000,35719=>1000,35720=>1000,35721=>1000,35722=>1000,35723=>1000,35724=>1000,35725=>1000,35726=>1000,35727=>1000,35728=>1000,35729=>1000,35730=>1000,35731=>1000,35732=>1000,
+ 35733=>1000,35734=>1000,35735=>1000,35736=>1000,35737=>1000,35738=>1000,35739=>1000,35740=>1000,35741=>1000,35742=>1000,35743=>1000,35744=>1000,35745=>1000,35746=>1000,35747=>1000,35748=>1000,
+ 35749=>1000,35750=>1000,35751=>1000,35752=>1000,35753=>1000,35754=>1000,35755=>1000,35756=>1000,35757=>1000,35758=>1000,35759=>1000,35760=>1000,35761=>1000,35762=>1000,35763=>1000,35764=>1000,
+ 35765=>1000,35766=>1000,35767=>1000,35768=>1000,35769=>1000,35770=>1000,35771=>1000,35772=>1000,35773=>1000,35774=>1000,35775=>1000,35776=>1000,35777=>1000,35778=>1000,35779=>1000,35780=>1000,
+ 35781=>1000,35782=>1000,35783=>1000,35784=>1000,35785=>1000,35786=>1000,35787=>1000,35788=>1000,35789=>1000,35790=>1000,35791=>1000,35792=>1000,35793=>1000,35794=>1000,35795=>1000,35796=>1000,
+ 35797=>1000,35798=>1000,35799=>1000,35800=>1000,35801=>1000,35802=>1000,35803=>1000,35804=>1000,35805=>1000,35806=>1000,35807=>1000,35808=>1000,35809=>1000,35810=>1000,35811=>1000,35812=>1000,
+ 35813=>1000,35814=>1000,35815=>1000,35816=>1000,35817=>1000,35818=>1000,35819=>1000,35820=>1000,35821=>1000,35822=>1000,35823=>1000,35824=>1000,35825=>1000,35826=>1000,35827=>1000,35828=>1000,
+ 35829=>1000,35830=>1000,35831=>1000,35832=>1000,35833=>1000,35834=>1000,35835=>1000,35836=>1000,35837=>1000,35838=>1000,35839=>1000,35840=>1000,35841=>1000,35842=>1000,35843=>1000,35844=>1000,
+ 35845=>1000,35846=>1000,35847=>1000,35848=>1000,35849=>1000,35850=>1000,35851=>1000,35852=>1000,35853=>1000,35854=>1000,35855=>1000,35856=>1000,35857=>1000,35858=>1000,35859=>1000,35860=>1000,
+ 35861=>1000,35862=>1000,35863=>1000,35864=>1000,35865=>1000,35866=>1000,35867=>1000,35868=>1000,35869=>1000,35870=>1000,35871=>1000,35872=>1000,35873=>1000,35874=>1000,35875=>1000,35876=>1000,
+ 35877=>1000,35878=>1000,35879=>1000,35880=>1000,35881=>1000,35882=>1000,35883=>1000,35884=>1000,35885=>1000,35886=>1000,35887=>1000,35888=>1000,35889=>1000,35890=>1000,35891=>1000,35892=>1000,
+ 35893=>1000,35894=>1000,35895=>1000,35896=>1000,35897=>1000,35898=>1000,35899=>1000,35900=>1000,35901=>1000,35902=>1000,35903=>1000,35904=>1000,35905=>1000,35906=>1000,35907=>1000,35908=>1000,
+ 35909=>1000,35910=>1000,35911=>1000,35912=>1000,35913=>1000,35914=>1000,35915=>1000,35916=>1000,35917=>1000,35918=>1000,35919=>1000,35920=>1000,35921=>1000,35922=>1000,35923=>1000,35924=>1000,
+ 35925=>1000,35926=>1000,35927=>1000,35928=>1000,35929=>1000,35930=>1000,35931=>1000,35932=>1000,35933=>1000,35934=>1000,35935=>1000,35936=>1000,35937=>1000,35938=>1000,35939=>1000,35940=>1000,
+ 35941=>1000,35942=>1000,35943=>1000,35944=>1000,35945=>1000,35946=>1000,35947=>1000,35948=>1000,35949=>1000,35950=>1000,35951=>1000,35952=>1000,35953=>1000,35954=>1000,35955=>1000,35956=>1000,
+ 35957=>1000,35958=>1000,35959=>1000,35960=>1000,35961=>1000,35962=>1000,35963=>1000,35964=>1000,35965=>1000,35966=>1000,35967=>1000,35968=>1000,35969=>1000,35970=>1000,35971=>1000,35972=>1000,
+ 35973=>1000,35974=>1000,35975=>1000,35976=>1000,35977=>1000,35978=>1000,35979=>1000,35980=>1000,35981=>1000,35982=>1000,35983=>1000,35984=>1000,35985=>1000,35986=>1000,35987=>1000,35988=>1000,
+ 35989=>1000,35990=>1000,35991=>1000,35992=>1000,35993=>1000,35994=>1000,35995=>1000,35996=>1000,35997=>1000,35998=>1000,35999=>1000,36000=>1000,36001=>1000,36002=>1000,36003=>1000,36004=>1000,
+ 36005=>1000,36006=>1000,36007=>1000,36008=>1000,36009=>1000,36010=>1000,36011=>1000,36012=>1000,36013=>1000,36014=>1000,36015=>1000,36016=>1000,36017=>1000,36018=>1000,36019=>1000,36020=>1000,
+ 36021=>1000,36022=>1000,36023=>1000,36024=>1000,36025=>1000,36026=>1000,36027=>1000,36028=>1000,36029=>1000,36030=>1000,36031=>1000,36032=>1000,36033=>1000,36034=>1000,36035=>1000,36036=>1000,
+ 36037=>1000,36038=>1000,36039=>1000,36040=>1000,36041=>1000,36042=>1000,36043=>1000,36044=>1000,36045=>1000,36046=>1000,36047=>1000,36048=>1000,36049=>1000,36050=>1000,36051=>1000,36052=>1000,
+ 36053=>1000,36054=>1000,36055=>1000,36056=>1000,36057=>1000,36058=>1000,36059=>1000,36060=>1000,36061=>1000,36062=>1000,36063=>1000,36064=>1000,36065=>1000,36066=>1000,36067=>1000,36068=>1000,
+ 36069=>1000,36070=>1000,36071=>1000,36072=>1000,36073=>1000,36074=>1000,36075=>1000,36076=>1000,36077=>1000,36078=>1000,36079=>1000,36080=>1000,36081=>1000,36082=>1000,36083=>1000,36084=>1000,
+ 36085=>1000,36086=>1000,36087=>1000,36088=>1000,36089=>1000,36090=>1000,36091=>1000,36092=>1000,36093=>1000,36094=>1000,36095=>1000,36096=>1000,36097=>1000,36098=>1000,36099=>1000,36100=>1000,
+ 36101=>1000,36102=>1000,36103=>1000,36104=>1000,36105=>1000,36106=>1000,36107=>1000,36108=>1000,36109=>1000,36110=>1000,36111=>1000,36112=>1000,36113=>1000,36114=>1000,36115=>1000,36116=>1000,
+ 36117=>1000,36118=>1000,36119=>1000,36120=>1000,36121=>1000,36122=>1000,36123=>1000,36124=>1000,36125=>1000,36126=>1000,36127=>1000,36128=>1000,36129=>1000,36130=>1000,36131=>1000,36132=>1000,
+ 36133=>1000,36134=>1000,36135=>1000,36136=>1000,36137=>1000,36138=>1000,36139=>1000,36140=>1000,36141=>1000,36142=>1000,36143=>1000,36144=>1000,36145=>1000,36146=>1000,36147=>1000,36148=>1000,
+ 36149=>1000,36150=>1000,36151=>1000,36152=>1000,36153=>1000,36154=>1000,36155=>1000,36156=>1000,36157=>1000,36158=>1000,36159=>1000,36160=>1000,36161=>1000,36162=>1000,36163=>1000,36164=>1000,
+ 36165=>1000,36166=>1000,36167=>1000,36168=>1000,36169=>1000,36170=>1000,36171=>1000,36172=>1000,36173=>1000,36174=>1000,36175=>1000,36176=>1000,36177=>1000,36178=>1000,36179=>1000,36180=>1000,
+ 36181=>1000,36182=>1000,36183=>1000,36184=>1000,36185=>1000,36186=>1000,36187=>1000,36188=>1000,36189=>1000,36190=>1000,36191=>1000,36192=>1000,36193=>1000,36194=>1000,36195=>1000,36196=>1000,
+ 36197=>1000,36198=>1000,36199=>1000,36200=>1000,36201=>1000,36202=>1000,36203=>1000,36204=>1000,36205=>1000,36206=>1000,36207=>1000,36208=>1000,36209=>1000,36210=>1000,36211=>1000,36212=>1000,
+ 36213=>1000,36214=>1000,36215=>1000,36216=>1000,36217=>1000,36218=>1000,36219=>1000,36220=>1000,36221=>1000,36222=>1000,36223=>1000,36224=>1000,36225=>1000,36226=>1000,36227=>1000,36228=>1000,
+ 36229=>1000,36230=>1000,36231=>1000,36232=>1000,36233=>1000,36234=>1000,36235=>1000,36236=>1000,36237=>1000,36238=>1000,36239=>1000,36240=>1000,36241=>1000,36242=>1000,36243=>1000,36244=>1000,
+ 36245=>1000,36246=>1000,36247=>1000,36248=>1000,36249=>1000,36250=>1000,36251=>1000,36252=>1000,36253=>1000,36254=>1000,36255=>1000,36256=>1000,36257=>1000,36258=>1000,36259=>1000,36260=>1000,
+ 36261=>1000,36262=>1000,36263=>1000,36264=>1000,36265=>1000,36266=>1000,36267=>1000,36268=>1000,36269=>1000,36270=>1000,36271=>1000,36272=>1000,36273=>1000,36274=>1000,36275=>1000,36276=>1000,
+ 36277=>1000,36278=>1000,36279=>1000,36280=>1000,36281=>1000,36282=>1000,36283=>1000,36284=>1000,36285=>1000,36286=>1000,36287=>1000,36288=>1000,36289=>1000,36290=>1000,36291=>1000,36292=>1000,
+ 36293=>1000,36294=>1000,36295=>1000,36296=>1000,36297=>1000,36298=>1000,36299=>1000,36300=>1000,36301=>1000,36302=>1000,36303=>1000,36304=>1000,36305=>1000,36306=>1000,36307=>1000,36308=>1000,
+ 36309=>1000,36310=>1000,36311=>1000,36312=>1000,36313=>1000,36314=>1000,36315=>1000,36316=>1000,36317=>1000,36318=>1000,36319=>1000,36320=>1000,36321=>1000,36322=>1000,36323=>1000,36324=>1000,
+ 36325=>1000,36326=>1000,36327=>1000,36328=>1000,36329=>1000,36330=>1000,36331=>1000,36332=>1000,36333=>1000,36334=>1000,36335=>1000,36336=>1000,36337=>1000,36338=>1000,36339=>1000,36340=>1000,
+ 36341=>1000,36342=>1000,36343=>1000,36344=>1000,36345=>1000,36346=>1000,36347=>1000,36348=>1000,36349=>1000,36350=>1000,36351=>1000,36352=>1000,36353=>1000,36354=>1000,36355=>1000,36356=>1000,
+ 36357=>1000,36358=>1000,36359=>1000,36360=>1000,36361=>1000,36362=>1000,36363=>1000,36364=>1000,36365=>1000,36366=>1000,36367=>1000,36368=>1000,36369=>1000,36370=>1000,36371=>1000,36372=>1000,
+ 36373=>1000,36374=>1000,36375=>1000,36376=>1000,36377=>1000,36378=>1000,36379=>1000,36380=>1000,36381=>1000,36382=>1000,36383=>1000,36384=>1000,36385=>1000,36386=>1000,36387=>1000,36388=>1000,
+ 36389=>1000,36390=>1000,36391=>1000,36392=>1000,36393=>1000,36394=>1000,36395=>1000,36396=>1000,36397=>1000,36398=>1000,36399=>1000,36400=>1000,36401=>1000,36402=>1000,36403=>1000,36404=>1000,
+ 36405=>1000,36406=>1000,36407=>1000,36408=>1000,36409=>1000,36410=>1000,36411=>1000,36412=>1000,36413=>1000,36414=>1000,36415=>1000,36416=>1000,36417=>1000,36418=>1000,36419=>1000,36420=>1000,
+ 36421=>1000,36422=>1000,36423=>1000,36424=>1000,36425=>1000,36426=>1000,36427=>1000,36428=>1000,36429=>1000,36430=>1000,36431=>1000,36432=>1000,36433=>1000,36434=>1000,36435=>1000,36436=>1000,
+ 36437=>1000,36438=>1000,36439=>1000,36440=>1000,36441=>1000,36442=>1000,36443=>1000,36444=>1000,36445=>1000,36446=>1000,36447=>1000,36448=>1000,36449=>1000,36450=>1000,36451=>1000,36452=>1000,
+ 36453=>1000,36454=>1000,36455=>1000,36456=>1000,36457=>1000,36458=>1000,36459=>1000,36460=>1000,36461=>1000,36462=>1000,36463=>1000,36464=>1000,36465=>1000,36466=>1000,36467=>1000,36468=>1000,
+ 36469=>1000,36470=>1000,36471=>1000,36472=>1000,36473=>1000,36474=>1000,36475=>1000,36476=>1000,36477=>1000,36478=>1000,36479=>1000,36480=>1000,36481=>1000,36482=>1000,36483=>1000,36484=>1000,
+ 36485=>1000,36486=>1000,36487=>1000,36488=>1000,36489=>1000,36490=>1000,36491=>1000,36492=>1000,36493=>1000,36494=>1000,36495=>1000,36496=>1000,36497=>1000,36498=>1000,36499=>1000,36500=>1000,
+ 36501=>1000,36502=>1000,36503=>1000,36504=>1000,36505=>1000,36506=>1000,36507=>1000,36508=>1000,36509=>1000,36510=>1000,36511=>1000,36512=>1000,36513=>1000,36514=>1000,36515=>1000,36516=>1000,
+ 36517=>1000,36518=>1000,36519=>1000,36520=>1000,36521=>1000,36522=>1000,36523=>1000,36524=>1000,36525=>1000,36526=>1000,36527=>1000,36528=>1000,36529=>1000,36530=>1000,36531=>1000,36532=>1000,
+ 36533=>1000,36534=>1000,36535=>1000,36536=>1000,36537=>1000,36538=>1000,36539=>1000,36540=>1000,36541=>1000,36542=>1000,36543=>1000,36544=>1000,36545=>1000,36546=>1000,36547=>1000,36548=>1000,
+ 36549=>1000,36550=>1000,36551=>1000,36552=>1000,36553=>1000,36554=>1000,36555=>1000,36556=>1000,36557=>1000,36558=>1000,36559=>1000,36560=>1000,36561=>1000,36562=>1000,36563=>1000,36564=>1000,
+ 36565=>1000,36566=>1000,36567=>1000,36568=>1000,36569=>1000,36570=>1000,36571=>1000,36572=>1000,36573=>1000,36574=>1000,36575=>1000,36576=>1000,36577=>1000,36578=>1000,36579=>1000,36580=>1000,
+ 36581=>1000,36582=>1000,36583=>1000,36584=>1000,36585=>1000,36586=>1000,36587=>1000,36588=>1000,36589=>1000,36590=>1000,36591=>1000,36592=>1000,36593=>1000,36594=>1000,36595=>1000,36596=>1000,
+ 36597=>1000,36598=>1000,36599=>1000,36600=>1000,36601=>1000,36602=>1000,36603=>1000,36604=>1000,36605=>1000,36606=>1000,36607=>1000,36608=>1000,36609=>1000,36610=>1000,36611=>1000,36612=>1000,
+ 36613=>1000,36614=>1000,36615=>1000,36616=>1000,36617=>1000,36618=>1000,36619=>1000,36620=>1000,36621=>1000,36622=>1000,36623=>1000,36624=>1000,36625=>1000,36626=>1000,36627=>1000,36628=>1000,
+ 36629=>1000,36630=>1000,36631=>1000,36632=>1000,36633=>1000,36634=>1000,36635=>1000,36636=>1000,36637=>1000,36638=>1000,36639=>1000,36640=>1000,36641=>1000,36642=>1000,36643=>1000,36644=>1000,
+ 36645=>1000,36646=>1000,36647=>1000,36648=>1000,36649=>1000,36650=>1000,36651=>1000,36652=>1000,36653=>1000,36654=>1000,36655=>1000,36656=>1000,36657=>1000,36658=>1000,36659=>1000,36660=>1000,
+ 36661=>1000,36662=>1000,36663=>1000,36664=>1000,36665=>1000,36666=>1000,36667=>1000,36668=>1000,36669=>1000,36670=>1000,36671=>1000,36672=>1000,36673=>1000,36674=>1000,36675=>1000,36676=>1000,
+ 36677=>1000,36678=>1000,36679=>1000,36680=>1000,36681=>1000,36682=>1000,36683=>1000,36684=>1000,36685=>1000,36686=>1000,36687=>1000,36688=>1000,36689=>1000,36690=>1000,36691=>1000,36692=>1000,
+ 36693=>1000,36694=>1000,36695=>1000,36696=>1000,36697=>1000,36698=>1000,36699=>1000,36700=>1000,36701=>1000,36702=>1000,36703=>1000,36704=>1000,36705=>1000,36706=>1000,36707=>1000,36708=>1000,
+ 36709=>1000,36710=>1000,36711=>1000,36712=>1000,36713=>1000,36714=>1000,36715=>1000,36716=>1000,36717=>1000,36718=>1000,36719=>1000,36720=>1000,36721=>1000,36722=>1000,36723=>1000,36724=>1000,
+ 36725=>1000,36726=>1000,36727=>1000,36728=>1000,36729=>1000,36730=>1000,36731=>1000,36732=>1000,36733=>1000,36734=>1000,36735=>1000,36736=>1000,36737=>1000,36738=>1000,36739=>1000,36740=>1000,
+ 36741=>1000,36742=>1000,36743=>1000,36744=>1000,36745=>1000,36746=>1000,36747=>1000,36748=>1000,36749=>1000,36750=>1000,36751=>1000,36752=>1000,36753=>1000,36754=>1000,36755=>1000,36756=>1000,
+ 36757=>1000,36758=>1000,36759=>1000,36760=>1000,36761=>1000,36762=>1000,36763=>1000,36764=>1000,36765=>1000,36766=>1000,36767=>1000,36768=>1000,36769=>1000,36770=>1000,36771=>1000,36772=>1000,
+ 36773=>1000,36774=>1000,36775=>1000,36776=>1000,36777=>1000,36778=>1000,36779=>1000,36780=>1000,36781=>1000,36782=>1000,36783=>1000,36784=>1000,36785=>1000,36786=>1000,36787=>1000,36788=>1000,
+ 36789=>1000,36790=>1000,36791=>1000,36792=>1000,36793=>1000,36794=>1000,36795=>1000,36796=>1000,36797=>1000,36798=>1000,36799=>1000,36800=>1000,36801=>1000,36802=>1000,36803=>1000,36804=>1000,
+ 36805=>1000,36806=>1000,36807=>1000,36808=>1000,36809=>1000,36810=>1000,36811=>1000,36812=>1000,36813=>1000,36814=>1000,36815=>1000,36816=>1000,36817=>1000,36818=>1000,36819=>1000,36820=>1000,
+ 36821=>1000,36822=>1000,36823=>1000,36824=>1000,36825=>1000,36826=>1000,36827=>1000,36828=>1000,36829=>1000,36830=>1000,36831=>1000,36832=>1000,36833=>1000,36834=>1000,36835=>1000,36836=>1000,
+ 36837=>1000,36838=>1000,36839=>1000,36840=>1000,36841=>1000,36842=>1000,36843=>1000,36844=>1000,36845=>1000,36846=>1000,36847=>1000,36848=>1000,36849=>1000,36850=>1000,36851=>1000,36852=>1000,
+ 36853=>1000,36854=>1000,36855=>1000,36856=>1000,36857=>1000,36858=>1000,36859=>1000,36860=>1000,36861=>1000,36862=>1000,36863=>1000,36864=>1000,36865=>1000,36866=>1000,36867=>1000,36868=>1000,
+ 36869=>1000,36870=>1000,36871=>1000,36872=>1000,36873=>1000,36874=>1000,36875=>1000,36876=>1000,36877=>1000,36878=>1000,36879=>1000,36880=>1000,36881=>1000,36882=>1000,36883=>1000,36884=>1000,
+ 36885=>1000,36886=>1000,36887=>1000,36888=>1000,36889=>1000,36890=>1000,36891=>1000,36892=>1000,36893=>1000,36894=>1000,36895=>1000,36896=>1000,36897=>1000,36898=>1000,36899=>1000,36900=>1000,
+ 36901=>1000,36902=>1000,36903=>1000,36904=>1000,36905=>1000,36906=>1000,36907=>1000,36908=>1000,36909=>1000,36910=>1000,36911=>1000,36912=>1000,36913=>1000,36914=>1000,36915=>1000,36916=>1000,
+ 36917=>1000,36918=>1000,36919=>1000,36920=>1000,36921=>1000,36922=>1000,36923=>1000,36924=>1000,36925=>1000,36926=>1000,36927=>1000,36928=>1000,36929=>1000,36930=>1000,36931=>1000,36932=>1000,
+ 36933=>1000,36934=>1000,36935=>1000,36936=>1000,36937=>1000,36938=>1000,36939=>1000,36940=>1000,36941=>1000,36942=>1000,36943=>1000,36944=>1000,36945=>1000,36946=>1000,36947=>1000,36948=>1000,
+ 36949=>1000,36950=>1000,36951=>1000,36952=>1000,36953=>1000,36954=>1000,36955=>1000,36956=>1000,36957=>1000,36958=>1000,36959=>1000,36960=>1000,36961=>1000,36962=>1000,36963=>1000,36964=>1000,
+ 36965=>1000,36966=>1000,36967=>1000,36968=>1000,36969=>1000,36970=>1000,36971=>1000,36972=>1000,36973=>1000,36974=>1000,36975=>1000,36976=>1000,36977=>1000,36978=>1000,36979=>1000,36980=>1000,
+ 36981=>1000,36982=>1000,36983=>1000,36984=>1000,36985=>1000,36986=>1000,36987=>1000,36988=>1000,36989=>1000,36990=>1000,36991=>1000,36992=>1000,36993=>1000,36994=>1000,36995=>1000,36996=>1000,
+ 36997=>1000,36998=>1000,36999=>1000,37000=>1000,37001=>1000,37002=>1000,37003=>1000,37004=>1000,37005=>1000,37006=>1000,37007=>1000,37008=>1000,37009=>1000,37010=>1000,37011=>1000,37012=>1000,
+ 37013=>1000,37014=>1000,37015=>1000,37016=>1000,37017=>1000,37018=>1000,37019=>1000,37020=>1000,37021=>1000,37022=>1000,37023=>1000,37024=>1000,37025=>1000,37026=>1000,37027=>1000,37028=>1000,
+ 37029=>1000,37030=>1000,37031=>1000,37032=>1000,37033=>1000,37034=>1000,37035=>1000,37036=>1000,37037=>1000,37038=>1000,37039=>1000,37040=>1000,37041=>1000,37042=>1000,37043=>1000,37044=>1000,
+ 37045=>1000,37046=>1000,37047=>1000,37048=>1000,37049=>1000,37050=>1000,37051=>1000,37052=>1000,37053=>1000,37054=>1000,37055=>1000,37056=>1000,37057=>1000,37058=>1000,37059=>1000,37060=>1000,
+ 37061=>1000,37062=>1000,37063=>1000,37064=>1000,37065=>1000,37066=>1000,37067=>1000,37068=>1000,37069=>1000,37070=>1000,37071=>1000,37072=>1000,37073=>1000,37074=>1000,37075=>1000,37076=>1000,
+ 37077=>1000,37078=>1000,37079=>1000,37080=>1000,37081=>1000,37082=>1000,37083=>1000,37084=>1000,37085=>1000,37086=>1000,37087=>1000,37088=>1000,37089=>1000,37090=>1000,37091=>1000,37092=>1000,
+ 37093=>1000,37094=>1000,37095=>1000,37096=>1000,37097=>1000,37098=>1000,37099=>1000,37100=>1000,37101=>1000,37102=>1000,37103=>1000,37104=>1000,37105=>1000,37106=>1000,37107=>1000,37108=>1000,
+ 37109=>1000,37110=>1000,37111=>1000,37112=>1000,37113=>1000,37114=>1000,37115=>1000,37116=>1000,37117=>1000,37118=>1000,37119=>1000,37120=>1000,37121=>1000,37122=>1000,37123=>1000,37124=>1000,
+ 37125=>1000,37126=>1000,37127=>1000,37128=>1000,37129=>1000,37130=>1000,37131=>1000,37132=>1000,37133=>1000,37134=>1000,37135=>1000,37136=>1000,37137=>1000,37138=>1000,37139=>1000,37140=>1000,
+ 37141=>1000,37142=>1000,37143=>1000,37144=>1000,37145=>1000,37146=>1000,37147=>1000,37148=>1000,37149=>1000,37150=>1000,37151=>1000,37152=>1000,37153=>1000,37154=>1000,37155=>1000,37156=>1000,
+ 37157=>1000,37158=>1000,37159=>1000,37160=>1000,37161=>1000,37162=>1000,37163=>1000,37164=>1000,37165=>1000,37166=>1000,37167=>1000,37168=>1000,37169=>1000,37170=>1000,37171=>1000,37172=>1000,
+ 37173=>1000,37174=>1000,37175=>1000,37176=>1000,37177=>1000,37178=>1000,37179=>1000,37180=>1000,37181=>1000,37182=>1000,37183=>1000,37184=>1000,37185=>1000,37186=>1000,37187=>1000,37188=>1000,
+ 37189=>1000,37190=>1000,37191=>1000,37192=>1000,37193=>1000,37194=>1000,37195=>1000,37196=>1000,37197=>1000,37198=>1000,37199=>1000,37200=>1000,37201=>1000,37202=>1000,37203=>1000,37204=>1000,
+ 37205=>1000,37206=>1000,37207=>1000,37208=>1000,37209=>1000,37210=>1000,37211=>1000,37212=>1000,37213=>1000,37214=>1000,37215=>1000,37216=>1000,37217=>1000,37218=>1000,37219=>1000,37220=>1000,
+ 37221=>1000,37222=>1000,37223=>1000,37224=>1000,37225=>1000,37226=>1000,37227=>1000,37228=>1000,37229=>1000,37230=>1000,37231=>1000,37232=>1000,37233=>1000,37234=>1000,37235=>1000,37236=>1000,
+ 37237=>1000,37238=>1000,37239=>1000,37240=>1000,37241=>1000,37242=>1000,37243=>1000,37244=>1000,37245=>1000,37246=>1000,37247=>1000,37248=>1000,37249=>1000,37250=>1000,37251=>1000,37252=>1000,
+ 37253=>1000,37254=>1000,37255=>1000,37256=>1000,37257=>1000,37258=>1000,37259=>1000,37260=>1000,37261=>1000,37262=>1000,37263=>1000,37264=>1000,37265=>1000,37266=>1000,37267=>1000,37268=>1000,
+ 37269=>1000,37270=>1000,37271=>1000,37272=>1000,37273=>1000,37274=>1000,37275=>1000,37276=>1000,37277=>1000,37278=>1000,37279=>1000,37280=>1000,37281=>1000,37282=>1000,37283=>1000,37284=>1000,
+ 37285=>1000,37286=>1000,37287=>1000,37288=>1000,37289=>1000,37290=>1000,37291=>1000,37292=>1000,37293=>1000,37294=>1000,37295=>1000,37296=>1000,37297=>1000,37298=>1000,37299=>1000,37300=>1000,
+ 37301=>1000,37302=>1000,37303=>1000,37304=>1000,37305=>1000,37306=>1000,37307=>1000,37308=>1000,37309=>1000,37310=>1000,37311=>1000,37312=>1000,37313=>1000,37314=>1000,37315=>1000,37316=>1000,
+ 37317=>1000,37318=>1000,37319=>1000,37320=>1000,37321=>1000,37322=>1000,37323=>1000,37324=>1000,37325=>1000,37326=>1000,37327=>1000,37328=>1000,37329=>1000,37330=>1000,37331=>1000,37332=>1000,
+ 37333=>1000,37334=>1000,37335=>1000,37336=>1000,37337=>1000,37338=>1000,37339=>1000,37340=>1000,37341=>1000,37342=>1000,37343=>1000,37344=>1000,37345=>1000,37346=>1000,37347=>1000,37348=>1000,
+ 37349=>1000,37350=>1000,37351=>1000,37352=>1000,37353=>1000,37354=>1000,37355=>1000,37356=>1000,37357=>1000,37358=>1000,37359=>1000,37360=>1000,37361=>1000,37362=>1000,37363=>1000,37364=>1000,
+ 37365=>1000,37366=>1000,37367=>1000,37368=>1000,37369=>1000,37370=>1000,37371=>1000,37372=>1000,37373=>1000,37374=>1000,37375=>1000,37376=>1000,37377=>1000,37378=>1000,37379=>1000,37380=>1000,
+ 37381=>1000,37382=>1000,37383=>1000,37384=>1000,37385=>1000,37386=>1000,37387=>1000,37388=>1000,37389=>1000,37390=>1000,37391=>1000,37392=>1000,37393=>1000,37394=>1000,37395=>1000,37396=>1000,
+ 37397=>1000,37398=>1000,37399=>1000,37400=>1000,37401=>1000,37402=>1000,37403=>1000,37404=>1000,37405=>1000,37406=>1000,37407=>1000,37408=>1000,37409=>1000,37410=>1000,37411=>1000,37412=>1000,
+ 37413=>1000,37414=>1000,37415=>1000,37416=>1000,37417=>1000,37418=>1000,37419=>1000,37420=>1000,37421=>1000,37422=>1000,37423=>1000,37424=>1000,37425=>1000,37426=>1000,37427=>1000,37428=>1000,
+ 37429=>1000,37430=>1000,37431=>1000,37432=>1000,37433=>1000,37434=>1000,37435=>1000,37436=>1000,37437=>1000,37438=>1000,37439=>1000,37440=>1000,37441=>1000,37442=>1000,37443=>1000,37444=>1000,
+ 37445=>1000,37446=>1000,37447=>1000,37448=>1000,37449=>1000,37450=>1000,37451=>1000,37452=>1000,37453=>1000,37454=>1000,37455=>1000,37456=>1000,37457=>1000,37458=>1000,37459=>1000,37460=>1000,
+ 37461=>1000,37462=>1000,37463=>1000,37464=>1000,37465=>1000,37466=>1000,37467=>1000,37468=>1000,37469=>1000,37470=>1000,37471=>1000,37472=>1000,37473=>1000,37474=>1000,37475=>1000,37476=>1000,
+ 37477=>1000,37478=>1000,37479=>1000,37480=>1000,37481=>1000,37482=>1000,37483=>1000,37484=>1000,37485=>1000,37486=>1000,37487=>1000,37488=>1000,37489=>1000,37490=>1000,37491=>1000,37492=>1000,
+ 37493=>1000,37494=>1000,37495=>1000,37496=>1000,37497=>1000,37498=>1000,37499=>1000,37500=>1000,37501=>1000,37502=>1000,37503=>1000,37504=>1000,37505=>1000,37506=>1000,37507=>1000,37508=>1000,
+ 37509=>1000,37510=>1000,37511=>1000,37512=>1000,37513=>1000,37514=>1000,37515=>1000,37516=>1000,37517=>1000,37518=>1000,37519=>1000,37520=>1000,37521=>1000,37522=>1000,37523=>1000,37524=>1000,
+ 37525=>1000,37526=>1000,37527=>1000,37528=>1000,37529=>1000,37530=>1000,37531=>1000,37532=>1000,37533=>1000,37534=>1000,37535=>1000,37536=>1000,37537=>1000,37538=>1000,37539=>1000,37540=>1000,
+ 37541=>1000,37542=>1000,37543=>1000,37544=>1000,37545=>1000,37546=>1000,37547=>1000,37548=>1000,37549=>1000,37550=>1000,37551=>1000,37552=>1000,37553=>1000,37554=>1000,37555=>1000,37556=>1000,
+ 37557=>1000,37558=>1000,37559=>1000,37560=>1000,37561=>1000,37562=>1000,37563=>1000,37564=>1000,37565=>1000,37566=>1000,37567=>1000,37568=>1000,37569=>1000,37570=>1000,37571=>1000,37572=>1000,
+ 37573=>1000,37574=>1000,37575=>1000,37576=>1000,37577=>1000,37578=>1000,37579=>1000,37580=>1000,37581=>1000,37582=>1000,37583=>1000,37584=>1000,37585=>1000,37586=>1000,37587=>1000,37588=>1000,
+ 37589=>1000,37590=>1000,37591=>1000,37592=>1000,37593=>1000,37594=>1000,37595=>1000,37596=>1000,37597=>1000,37598=>1000,37599=>1000,37600=>1000,37601=>1000,37602=>1000,37603=>1000,37604=>1000,
+ 37605=>1000,37606=>1000,37607=>1000,37608=>1000,37609=>1000,37610=>1000,37611=>1000,37612=>1000,37613=>1000,37614=>1000,37615=>1000,37616=>1000,37617=>1000,37618=>1000,37619=>1000,37620=>1000,
+ 37621=>1000,37622=>1000,37623=>1000,37624=>1000,37625=>1000,37626=>1000,37627=>1000,37628=>1000,37629=>1000,37630=>1000,37631=>1000,37632=>1000,37633=>1000,37634=>1000,37635=>1000,37636=>1000,
+ 37637=>1000,37638=>1000,37639=>1000,37640=>1000,37641=>1000,37642=>1000,37643=>1000,37644=>1000,37645=>1000,37646=>1000,37647=>1000,37648=>1000,37649=>1000,37650=>1000,37651=>1000,37652=>1000,
+ 37653=>1000,37654=>1000,37655=>1000,37656=>1000,37657=>1000,37658=>1000,37659=>1000,37660=>1000,37661=>1000,37662=>1000,37663=>1000,37664=>1000,37665=>1000,37666=>1000,37667=>1000,37668=>1000,
+ 37669=>1000,37670=>1000,37671=>1000,37672=>1000,37673=>1000,37674=>1000,37675=>1000,37676=>1000,37677=>1000,37678=>1000,37679=>1000,37680=>1000,37681=>1000,37682=>1000,37683=>1000,37684=>1000,
+ 37685=>1000,37686=>1000,37687=>1000,37688=>1000,37689=>1000,37690=>1000,37691=>1000,37692=>1000,37693=>1000,37694=>1000,37695=>1000,37696=>1000,37697=>1000,37698=>1000,37699=>1000,37700=>1000,
+ 37701=>1000,37702=>1000,37703=>1000,37704=>1000,37705=>1000,37706=>1000,37707=>1000,37708=>1000,37709=>1000,37710=>1000,37711=>1000,37712=>1000,37713=>1000,37714=>1000,37715=>1000,37716=>1000,
+ 37717=>1000,37718=>1000,37719=>1000,37720=>1000,37721=>1000,37722=>1000,37723=>1000,37724=>1000,37725=>1000,37726=>1000,37727=>1000,37728=>1000,37729=>1000,37730=>1000,37731=>1000,37732=>1000,
+ 37733=>1000,37734=>1000,37735=>1000,37736=>1000,37737=>1000,37738=>1000,37739=>1000,37740=>1000,37741=>1000,37742=>1000,37743=>1000,37744=>1000,37745=>1000,37746=>1000,37747=>1000,37748=>1000,
+ 37749=>1000,37750=>1000,37751=>1000,37752=>1000,37753=>1000,37754=>1000,37755=>1000,37756=>1000,37757=>1000,37758=>1000,37759=>1000,37760=>1000,37761=>1000,37762=>1000,37763=>1000,37764=>1000,
+ 37765=>1000,37766=>1000,37767=>1000,37768=>1000,37769=>1000,37770=>1000,37771=>1000,37772=>1000,37773=>1000,37774=>1000,37775=>1000,37776=>1000,37777=>1000,37778=>1000,37779=>1000,37780=>1000,
+ 37781=>1000,37782=>1000,37783=>1000,37784=>1000,37785=>1000,37786=>1000,37787=>1000,37788=>1000,37789=>1000,37790=>1000,37791=>1000,37792=>1000,37793=>1000,37794=>1000,37795=>1000,37796=>1000,
+ 37797=>1000,37798=>1000,37799=>1000,37800=>1000,37801=>1000,37802=>1000,37803=>1000,37804=>1000,37805=>1000,37806=>1000,37807=>1000,37808=>1000,37809=>1000,37810=>1000,37811=>1000,37812=>1000,
+ 37813=>1000,37814=>1000,37815=>1000,37816=>1000,37817=>1000,37818=>1000,37819=>1000,37820=>1000,37821=>1000,37822=>1000,37823=>1000,37824=>1000,37825=>1000,37826=>1000,37827=>1000,37828=>1000,
+ 37829=>1000,37830=>1000,37831=>1000,37832=>1000,37833=>1000,37834=>1000,37835=>1000,37836=>1000,37837=>1000,37838=>1000,37839=>1000,37840=>1000,37841=>1000,37842=>1000,37843=>1000,37844=>1000,
+ 37845=>1000,37846=>1000,37847=>1000,37848=>1000,37849=>1000,37850=>1000,37851=>1000,37852=>1000,37853=>1000,37854=>1000,37855=>1000,37856=>1000,37857=>1000,37858=>1000,37859=>1000,37860=>1000,
+ 37861=>1000,37862=>1000,37863=>1000,37864=>1000,37865=>1000,37866=>1000,37867=>1000,37868=>1000,37869=>1000,37870=>1000,37871=>1000,37872=>1000,37873=>1000,37874=>1000,37875=>1000,37876=>1000,
+ 37877=>1000,37878=>1000,37879=>1000,37880=>1000,37881=>1000,37882=>1000,37883=>1000,37884=>1000,37885=>1000,37886=>1000,37887=>1000,37888=>1000,37889=>1000,37890=>1000,37891=>1000,37892=>1000,
+ 37893=>1000,37894=>1000,37895=>1000,37896=>1000,37897=>1000,37898=>1000,37899=>1000,37900=>1000,37901=>1000,37902=>1000,37903=>1000,37904=>1000,37905=>1000,37906=>1000,37907=>1000,37908=>1000,
+ 37909=>1000,37910=>1000,37911=>1000,37912=>1000,37913=>1000,37914=>1000,37915=>1000,37916=>1000,37917=>1000,37918=>1000,37919=>1000,37920=>1000,37921=>1000,37922=>1000,37923=>1000,37924=>1000,
+ 37925=>1000,37926=>1000,37927=>998,37928=>1000,37929=>1000,37930=>1000,37931=>1000,37932=>1000,37933=>1000,37934=>1000,37935=>1000,37936=>1000,37937=>1000,37938=>1000,37939=>1000,37940=>1000,
+ 37941=>1000,37942=>1000,37943=>1000,37944=>1000,37945=>1000,37946=>1000,37947=>1000,37948=>1000,37949=>1000,37950=>1000,37951=>1000,37952=>1000,37953=>1000,37954=>1000,37955=>1000,37956=>1000,
+ 37957=>1000,37958=>1000,37959=>1000,37960=>1000,37961=>1000,37962=>1000,37963=>1000,37964=>1000,37965=>1000,37966=>1000,37967=>1000,37968=>1000,37969=>1000,37970=>1000,37971=>1000,37972=>1000,
+ 37973=>1000,37974=>1000,37975=>1000,37976=>1000,37977=>1000,37978=>1000,37979=>1000,37980=>1000,37981=>1000,37982=>1000,37983=>1000,37984=>1000,37985=>1000,37986=>1000,37987=>1000,37988=>1000,
+ 37989=>1000,37990=>1000,37991=>1000,37992=>1000,37993=>1000,37994=>1000,37995=>1000,37996=>1000,37997=>1000,37998=>1000,37999=>1000,38000=>1000,38001=>1000,38002=>1000,38003=>1000,38004=>1000,
+ 38005=>1000,38006=>1000,38007=>1000,38008=>1000,38009=>1000,38010=>1000,38011=>1000,38012=>1000,38013=>1000,38014=>1000,38015=>1000,38016=>1000,38017=>1000,38018=>1000,38019=>1000,38020=>1000,
+ 38021=>1000,38022=>1000,38023=>1000,38024=>1000,38025=>1000,38026=>1000,38027=>1000,38028=>1000,38029=>1000,38030=>1000,38031=>1000,38032=>1000,38033=>1000,38034=>1000,38035=>1000,38036=>1000,
+ 38037=>1000,38038=>1000,38039=>1000,38040=>1000,38041=>1000,38042=>1000,38043=>1000,38044=>1000,38045=>1000,38046=>1000,38047=>1000,38048=>1000,38049=>1000,38050=>1000,38051=>1000,38052=>1000,
+ 38053=>1000,38054=>1000,38055=>1000,38056=>1000,38057=>1000,38058=>1000,38059=>1000,38060=>1000,38061=>1000,38062=>1000,38063=>1000,38064=>1000,38065=>1000,38066=>1000,38067=>1000,38068=>1000,
+ 38069=>1000,38070=>1000,38071=>1000,38072=>1000,38073=>1000,38074=>1000,38075=>1000,38076=>1000,38077=>1000,38078=>1000,38079=>1000,38080=>1000,38081=>1000,38082=>1000,38083=>1000,38084=>1000,
+ 38085=>1000,38086=>1000,38087=>1000,38088=>1000,38089=>1000,38090=>1000,38091=>1000,38092=>1000,38093=>1000,38094=>1000,38095=>1000,38096=>1000,38097=>1000,38098=>1000,38099=>1000,38100=>1000,
+ 38101=>1000,38102=>1000,38103=>1000,38104=>1000,38105=>1000,38106=>1000,38107=>1000,38108=>1000,38109=>1000,38110=>1000,38111=>1000,38112=>1000,38113=>1000,38114=>1000,38115=>1000,38116=>1000,
+ 38117=>1000,38118=>1000,38119=>1000,38120=>1000,38121=>1000,38122=>1000,38123=>1000,38124=>1000,38125=>1000,38126=>1000,38127=>1000,38128=>1000,38129=>1000,38130=>1000,38131=>1000,38132=>1000,
+ 38133=>1000,38134=>1000,38135=>1000,38136=>1000,38137=>1000,38138=>1000,38139=>1000,38140=>1000,38141=>1000,38142=>1000,38143=>1000,38144=>1000,38145=>1000,38146=>1000,38147=>1000,38148=>1000,
+ 38149=>1000,38150=>1000,38151=>1000,38152=>1000,38153=>1000,38154=>1000,38155=>1000,38156=>1000,38157=>1000,38158=>1000,38159=>1000,38160=>1000,38161=>1000,38162=>1000,38163=>1000,38164=>1000,
+ 38165=>1000,38166=>1000,38167=>1000,38168=>1000,38169=>1000,38170=>1000,38171=>1000,38172=>1000,38173=>1000,38174=>1000,38175=>1000,38176=>1000,38177=>1000,38178=>1000,38179=>1000,38180=>1000,
+ 38181=>1000,38182=>1000,38183=>1000,38184=>1000,38185=>1000,38186=>1000,38187=>1000,38188=>1000,38189=>1000,38190=>1000,38191=>1000,38192=>1000,38193=>1000,38194=>1000,38195=>1000,38196=>1000,
+ 38197=>1000,38198=>1000,38199=>1000,38200=>1000,38201=>1000,38202=>1000,38203=>1000,38204=>1000,38205=>1000,38206=>1000,38207=>1000,38208=>1000,38209=>1000,38210=>1000,38211=>1000,38212=>1000,
+ 38213=>1000,38214=>1000,38215=>1000,38216=>1000,38217=>1000,38218=>1000,38219=>1000,38220=>1000,38221=>1000,38222=>1000,38223=>1000,38224=>1000,38225=>1000,38226=>1000,38227=>1000,38228=>1000,
+ 38229=>1000,38230=>1000,38231=>1000,38232=>1000,38233=>1000,38234=>1000,38235=>1000,38236=>1000,38237=>1000,38238=>1000,38239=>1000,38240=>1000,38241=>1000,38242=>1000,38243=>1000,38244=>1000,
+ 38245=>1000,38246=>1000,38247=>1000,38248=>1000,38249=>1000,38250=>1000,38251=>1000,38252=>1000,38253=>1000,38254=>1000,38255=>1000,38256=>1000,38257=>1000,38258=>1000,38259=>1000,38260=>1000,
+ 38261=>1000,38262=>1000,38263=>1000,38264=>1000,38265=>1000,38266=>1000,38267=>1000,38268=>1000,38269=>1000,38270=>1000,38271=>1000,38272=>1000,38273=>1000,38274=>1000,38275=>1000,38276=>1000,
+ 38277=>1000,38278=>1000,38279=>1000,38280=>1000,38281=>1000,38282=>1000,38283=>1000,38284=>1000,38285=>1000,38286=>1000,38287=>1000,38288=>1000,38289=>1000,38290=>1000,38291=>1000,38292=>1000,
+ 38293=>1000,38294=>1000,38295=>1000,38296=>1000,38297=>1000,38298=>1000,38299=>1000,38300=>1000,38301=>1000,38302=>1000,38303=>1000,38304=>1000,38305=>1000,38306=>1000,38307=>1000,38308=>1000,
+ 38309=>1000,38310=>1000,38311=>1000,38312=>1000,38313=>1000,38314=>1000,38315=>1000,38316=>1000,38317=>1000,38318=>1000,38319=>1000,38320=>1000,38321=>1000,38322=>1000,38323=>1000,38324=>1000,
+ 38325=>1000,38326=>1000,38327=>1000,38328=>1000,38329=>1000,38330=>1000,38331=>1000,38332=>1000,38333=>1000,38334=>1000,38335=>1000,38336=>1000,38337=>1000,38338=>1000,38339=>1000,38340=>1000,
+ 38341=>1000,38342=>1000,38343=>1000,38344=>1000,38345=>1000,38346=>1000,38347=>1000,38348=>1000,38349=>1000,38350=>1000,38351=>1000,38352=>1000,38353=>1000,38354=>1000,38355=>1000,38356=>1000,
+ 38357=>1000,38358=>1000,38359=>1000,38360=>1000,38361=>1000,38362=>1000,38363=>1000,38364=>1000,38365=>1000,38366=>1000,38367=>1000,38368=>1000,38369=>1000,38370=>1000,38371=>1000,38372=>1000,
+ 38373=>1000,38374=>1000,38375=>1000,38376=>1000,38377=>1000,38378=>1000,38379=>1000,38380=>1000,38381=>1000,38382=>1000,38383=>1000,38384=>1000,38385=>1000,38386=>1000,38387=>1000,38388=>1000,
+ 38389=>1000,38390=>1000,38391=>1000,38392=>1000,38393=>1000,38394=>1000,38395=>1000,38396=>1000,38397=>1000,38398=>1000,38399=>1000,38400=>1000,38401=>1000,38402=>1000,38403=>1000,38404=>1000,
+ 38405=>1000,38406=>1000,38407=>1000,38408=>1000,38409=>1000,38410=>1000,38411=>1000,38412=>1000,38413=>1000,38414=>1000,38415=>1000,38416=>1000,38417=>1000,38418=>1000,38419=>1000,38420=>1000,
+ 38421=>1000,38422=>1000,38423=>1000,38424=>1000,38425=>1000,38426=>1000,38427=>1000,38428=>1000,38429=>1000,38430=>1000,38431=>1000,38432=>1000,38433=>1000,38434=>1000,38435=>1000,38436=>1000,
+ 38437=>1000,38438=>1000,38439=>1000,38440=>1000,38441=>1000,38442=>1000,38443=>1000,38444=>1000,38445=>1000,38446=>1000,38447=>1000,38448=>1000,38449=>1000,38450=>1000,38451=>1000,38452=>1000,
+ 38453=>1000,38454=>1000,38455=>1000,38456=>1000,38457=>1000,38458=>1000,38459=>1000,38460=>1000,38461=>1000,38462=>1000,38463=>1000,38464=>1000,38465=>1000,38466=>1000,38467=>1000,38468=>1000,
+ 38469=>1000,38470=>1000,38471=>1000,38472=>1000,38473=>1000,38474=>1000,38475=>1000,38476=>1000,38477=>1000,38478=>1000,38479=>1000,38480=>1000,38481=>1000,38482=>1000,38483=>1000,38484=>1000,
+ 38485=>1000,38486=>1000,38487=>1000,38488=>1000,38489=>1000,38490=>1000,38491=>1000,38492=>1000,38493=>1000,38494=>1000,38495=>1000,38496=>1000,38497=>1000,38498=>1000,38499=>1000,38500=>1000,
+ 38501=>1000,38502=>1000,38503=>1000,38504=>1000,38505=>1000,38506=>1000,38507=>1000,38508=>1000,38509=>1000,38510=>1000,38511=>1000,38512=>1000,38513=>1000,38514=>1000,38515=>1000,38516=>1000,
+ 38517=>1000,38518=>1000,38519=>1000,38520=>1000,38521=>1000,38522=>1000,38523=>1000,38524=>1000,38525=>1000,38526=>1000,38527=>1000,38528=>1000,38529=>1000,38530=>1000,38531=>1000,38532=>1000,
+ 38533=>1000,38534=>1000,38535=>1000,38536=>1000,38537=>1000,38538=>1000,38539=>1000,38540=>1000,38541=>1000,38542=>1000,38543=>1000,38544=>1000,38545=>1000,38546=>1000,38547=>1000,38548=>1000,
+ 38549=>1000,38550=>1000,38551=>1000,38552=>1000,38553=>1000,38554=>1000,38555=>1000,38556=>1000,38557=>1000,38558=>1000,38559=>1000,38560=>1000,38561=>1000,38562=>1000,38563=>1000,38564=>1000,
+ 38565=>1000,38566=>1000,38567=>1000,38568=>1000,38569=>1000,38570=>1000,38571=>1000,38572=>1000,38573=>1000,38574=>1000,38575=>1000,38576=>1000,38577=>1000,38578=>1000,38579=>1000,38580=>1000,
+ 38581=>1000,38582=>1000,38583=>1000,38584=>1000,38585=>1000,38586=>1000,38587=>1000,38588=>1000,38589=>1000,38590=>1000,38591=>1000,38592=>1000,38593=>1000,38594=>1000,38595=>1000,38596=>1000,
+ 38597=>1000,38598=>1000,38599=>1000,38600=>1000,38601=>1000,38602=>1000,38603=>1000,38604=>1000,38605=>1000,38606=>1000,38607=>1000,38608=>1000,38609=>1000,38610=>1000,38611=>1000,38612=>1000,
+ 38613=>1000,38614=>1000,38615=>1000,38616=>1000,38617=>1000,38618=>1000,38619=>1000,38620=>1000,38621=>1000,38622=>1000,38623=>1000,38624=>1000,38625=>1000,38626=>1000,38627=>1000,38628=>1000,
+ 38629=>1000,38630=>1000,38631=>1000,38632=>1000,38633=>1000,38634=>1000,38635=>1000,38636=>1000,38637=>1000,38638=>1000,38639=>1000,38640=>1000,38641=>1000,38642=>1000,38643=>1000,38644=>1000,
+ 38645=>1000,38646=>1000,38647=>1000,38648=>1000,38649=>1000,38650=>1000,38651=>1000,38652=>1000,38653=>1000,38654=>1000,38655=>1000,38656=>1000,38657=>1000,38658=>1000,38659=>1000,38660=>1000,
+ 38661=>1000,38662=>1000,38663=>1000,38664=>1000,38665=>1000,38666=>1000,38667=>1000,38668=>1000,38669=>1000,38670=>1000,38671=>1000,38672=>1000,38673=>1000,38674=>1000,38675=>1000,38676=>1000,
+ 38677=>1000,38678=>1000,38679=>1000,38680=>1000,38681=>1000,38682=>1000,38683=>1000,38684=>1000,38685=>1000,38686=>1000,38687=>1000,38688=>1000,38689=>1000,38690=>1000,38691=>1000,38692=>1000,
+ 38693=>1000,38694=>1000,38695=>1000,38696=>1000,38697=>1000,38698=>1000,38699=>1000,38700=>1000,38701=>1000,38702=>1000,38703=>1000,38704=>1000,38705=>1000,38706=>1000,38707=>1000,38708=>1000,
+ 38709=>1000,38710=>1000,38711=>1000,38712=>1000,38713=>1000,38714=>1000,38715=>1000,38716=>1000,38717=>1000,38718=>1000,38719=>1000,38720=>1000,38721=>1000,38722=>1000,38723=>1000,38724=>1000,
+ 38725=>1000,38726=>1000,38727=>1000,38728=>1000,38729=>1000,38730=>1000,38731=>1000,38732=>1000,38733=>1000,38734=>1000,38735=>1000,38736=>1000,38737=>1000,38738=>1000,38739=>1000,38740=>1000,
+ 38741=>1000,38742=>1000,38743=>1000,38744=>1000,38745=>1000,38746=>1000,38747=>1000,38748=>1000,38749=>1000,38750=>1000,38751=>1000,38752=>1000,38753=>1000,38754=>1000,38755=>1000,38756=>1000,
+ 38757=>1000,38758=>1000,38759=>1000,38760=>1000,38761=>1000,38762=>1000,38763=>1000,38764=>1000,38765=>1000,38766=>1000,38767=>1000,38768=>1000,38769=>1000,38770=>1000,38771=>1000,38772=>1000,
+ 38773=>1000,38774=>1000,38775=>1000,38776=>1000,38777=>1000,38778=>1000,38779=>1000,38780=>1000,38781=>1000,38782=>1000,38783=>1000,38784=>1000,38785=>1000,38786=>1000,38787=>1000,38788=>1000,
+ 38789=>1000,38790=>1000,38791=>1000,38792=>1000,38793=>1000,38794=>1000,38795=>1000,38796=>1000,38797=>1000,38798=>1000,38799=>1000,38800=>1000,38801=>1000,38802=>1000,38803=>1000,38804=>1000,
+ 38805=>1000,38806=>1000,38807=>1000,38808=>1000,38809=>1000,38810=>1000,38811=>1000,38812=>1000,38813=>1000,38814=>1000,38815=>1000,38816=>1000,38817=>1000,38818=>1000,38819=>1000,38820=>1000,
+ 38821=>1000,38822=>1000,38823=>1000,38824=>1000,38825=>1000,38826=>1000,38827=>1000,38828=>1000,38829=>1000,38830=>1000,38831=>1000,38832=>1000,38833=>1000,38834=>1000,38835=>1000,38836=>1000,
+ 38837=>1000,38838=>1000,38839=>1000,38840=>1000,38841=>1000,38842=>1000,38843=>1000,38844=>1000,38845=>1000,38846=>1000,38847=>1000,38848=>1000,38849=>1000,38850=>1000,38851=>1000,38852=>1000,
+ 38853=>1000,38854=>1000,38855=>1000,38856=>1000,38857=>1000,38858=>1000,38859=>1000,38860=>1000,38861=>1000,38862=>1000,38863=>1000,38864=>1000,38865=>1000,38866=>1000,38867=>1000,38868=>1000,
+ 38869=>1000,38870=>1000,38871=>1000,38872=>1000,38873=>1000,38874=>1000,38875=>1000,38876=>1000,38877=>1000,38878=>1000,38879=>1000,38880=>1000,38881=>1000,38882=>1000,38883=>1000,38884=>1000,
+ 38885=>1000,38886=>1000,38887=>1000,38888=>1000,38889=>1000,38890=>1000,38891=>1000,38892=>1000,38893=>1000,38894=>1000,38895=>1000,38896=>1000,38897=>1000,38898=>1000,38899=>1000,38900=>1000,
+ 38901=>1000,38902=>1000,38903=>1000,38904=>1000,38905=>1000,38906=>1000,38907=>1000,38908=>1000,38909=>1000,38910=>1000,38911=>1000,38912=>1000,38913=>1000,38914=>1000,38915=>1000,38916=>1000,
+ 38917=>1000,38918=>1000,38919=>1000,38920=>1000,38921=>1000,38922=>1000,38923=>1000,38924=>1000,38925=>1000,38926=>1000,38927=>1000,38928=>1000,38929=>1000,38930=>1000,38931=>1000,38932=>1000,
+ 38933=>1000,38934=>1000,38935=>1000,38936=>1000,38937=>1000,38938=>1000,38939=>1000,38940=>1000,38941=>1000,38942=>1000,38943=>1000,38944=>1000,38945=>1000,38946=>1000,38947=>1000,38948=>1000,
+ 38949=>1000,38950=>1000,38951=>1000,38952=>1000,38953=>1000,38954=>1000,38955=>1000,38956=>1000,38957=>1000,38958=>1000,38959=>1000,38960=>1000,38961=>1000,38962=>1000,38963=>1000,38964=>1000,
+ 38965=>1000,38966=>1000,38967=>1000,38968=>1000,38969=>1000,38970=>1000,38971=>1000,38972=>1000,38973=>1000,38974=>1000,38975=>1000,38976=>1000,38977=>1000,38978=>1000,38979=>1000,38980=>1000,
+ 38981=>1000,38982=>1000,38983=>1000,38984=>1000,38985=>1000,38986=>1000,38987=>1000,38988=>1000,38989=>1000,38990=>1000,38991=>1000,38992=>1000,38993=>1000,38994=>1000,38995=>1000,38996=>1000,
+ 38997=>1000,38998=>1000,38999=>1000,39000=>1000,39001=>1000,39002=>1000,39003=>1000,39004=>1000,39005=>1000,39006=>1000,39007=>1000,39008=>1000,39009=>1000,39010=>1000,39011=>1000,39012=>1000,
+ 39013=>1000,39014=>1000,39015=>1000,39016=>1000,39017=>1000,39018=>1000,39019=>1000,39020=>1000,39021=>1000,39022=>1000,39023=>1000,39024=>1000,39025=>1000,39026=>1000,39027=>1000,39028=>1000,
+ 39029=>1000,39030=>1000,39031=>1000,39032=>1000,39033=>1000,39034=>1000,39035=>1000,39036=>1000,39037=>1000,39038=>1000,39039=>1000,39040=>1000,39041=>1000,39042=>1000,39043=>1000,39044=>1000,
+ 39045=>1000,39046=>1000,39047=>1000,39048=>1000,39049=>1000,39050=>1000,39051=>1000,39052=>1000,39053=>1000,39054=>1000,39055=>1000,39056=>1000,39057=>1000,39058=>1000,39059=>1000,39060=>1000,
+ 39061=>1000,39062=>1000,39063=>1000,39064=>1000,39065=>1000,39066=>1000,39067=>1000,39068=>1000,39069=>1000,39070=>1000,39071=>1000,39072=>1000,39073=>1000,39074=>1000,39075=>1000,39076=>1000,
+ 39077=>1000,39078=>1000,39079=>1000,39080=>1000,39081=>1000,39082=>1000,39083=>1000,39084=>1000,39085=>1000,39086=>1000,39087=>1000,39088=>1000,39089=>1000,39090=>1000,39091=>1000,39092=>1000,
+ 39093=>1000,39094=>1000,39095=>1000,39096=>1000,39097=>1000,39098=>1000,39099=>1000,39100=>1000,39101=>1000,39102=>1000,39103=>1000,39104=>1000,39105=>1000,39106=>1000,39107=>1000,39108=>1000,
+ 39109=>1000,39110=>1000,39111=>1000,39112=>1000,39113=>1000,39114=>1000,39115=>1000,39116=>1000,39117=>1000,39118=>1000,39119=>1000,39120=>1000,39121=>1000,39122=>1000,39123=>1000,39124=>1000,
+ 39125=>1000,39126=>1000,39127=>1000,39128=>1000,39129=>1000,39130=>1000,39131=>1000,39132=>1000,39133=>1000,39134=>1000,39135=>1000,39136=>1000,39137=>1000,39138=>1000,39139=>1000,39140=>1000,
+ 39141=>1000,39142=>1000,39143=>1000,39144=>1000,39145=>1000,39146=>1000,39147=>1000,39148=>1000,39149=>1000,39150=>1000,39151=>1000,39152=>1000,39153=>1000,39154=>1000,39155=>1000,39156=>1000,
+ 39157=>1000,39158=>1000,39159=>1000,39160=>1000,39161=>1000,39162=>1000,39163=>1000,39164=>1000,39165=>1000,39166=>1000,39167=>1000,39168=>1000,39169=>1000,39170=>1000,39171=>1000,39172=>1000,
+ 39173=>1000,39174=>1000,39175=>1000,39176=>1000,39177=>1000,39178=>1000,39179=>1000,39180=>1000,39181=>1000,39182=>1000,39183=>1000,39184=>1000,39185=>1000,39186=>1000,39187=>1000,39188=>1000,
+ 39189=>1000,39190=>1000,39191=>1000,39192=>1000,39193=>1000,39194=>1000,39195=>1000,39196=>1000,39197=>1000,39198=>1000,39199=>1000,39200=>1000,39201=>1000,39202=>1000,39203=>1000,39204=>1000,
+ 39205=>1000,39206=>1000,39207=>1000,39208=>1000,39209=>1000,39210=>1000,39211=>1000,39212=>1000,39213=>1000,39214=>1000,39215=>1000,39216=>1000,39217=>1000,39218=>1000,39219=>1000,39220=>1000,
+ 39221=>1000,39222=>1000,39223=>1000,39224=>1000,39225=>1000,39226=>1000,39227=>1000,39228=>1000,39229=>1000,39230=>1000,39231=>1000,39232=>1000,39233=>1000,39234=>1000,39235=>1000,39236=>1000,
+ 39237=>1000,39238=>1000,39239=>1000,39240=>1000,39241=>1000,39242=>1000,39243=>1000,39244=>1000,39245=>1000,39246=>1000,39247=>1000,39248=>1000,39249=>1000,39250=>1000,39251=>1000,39252=>1000,
+ 39253=>1000,39254=>1000,39255=>1000,39256=>1000,39257=>1000,39258=>1000,39259=>1000,39260=>1000,39261=>1000,39262=>1000,39263=>1000,39264=>1000,39265=>1000,39266=>1000,39267=>1000,39268=>1000,
+ 39269=>1000,39270=>1000,39271=>1000,39272=>1000,39273=>1000,39274=>1000,39275=>1000,39276=>1000,39277=>1000,39278=>1000,39279=>1000,39280=>1000,39281=>1000,39282=>1000,39283=>1000,39284=>1000,
+ 39285=>1000,39286=>1000,39287=>1000,39288=>1000,39289=>1000,39290=>1000,39291=>1000,39292=>1000,39293=>1000,39294=>1000,39295=>1000,39296=>1000,39297=>1000,39298=>1000,39299=>1000,39300=>1000,
+ 39301=>1000,39302=>1000,39303=>1000,39304=>1000,39305=>1000,39306=>1000,39307=>1000,39308=>1000,39309=>1000,39310=>1000,39311=>1000,39312=>1000,39313=>1000,39314=>1000,39315=>1000,39316=>1000,
+ 39317=>1000,39318=>1000,39319=>1000,39320=>1000,39321=>1000,39322=>1000,39323=>1000,39324=>1000,39325=>1000,39326=>1000,39327=>1000,39328=>1000,39329=>1000,39330=>1000,39331=>1000,39332=>1000,
+ 39333=>1000,39334=>1000,39335=>1000,39336=>1000,39337=>1000,39338=>1000,39339=>1000,39340=>1000,39341=>1000,39342=>1000,39343=>1000,39344=>1000,39345=>1000,39346=>1000,39347=>1000,39348=>1000,
+ 39349=>1000,39350=>1000,39351=>1000,39352=>1000,39353=>1000,39354=>1000,39355=>1000,39356=>1000,39357=>1000,39358=>1000,39359=>1000,39360=>1000,39361=>1000,39362=>1000,39363=>1000,39364=>1000,
+ 39365=>1000,39366=>1000,39367=>1000,39368=>1000,39369=>1000,39370=>1000,39371=>1000,39372=>1000,39373=>1000,39374=>1000,39375=>1000,39376=>1000,39377=>1000,39378=>1000,39379=>1000,39380=>1000,
+ 39381=>1000,39382=>1000,39383=>1000,39384=>1000,39385=>1000,39386=>1000,39387=>1000,39388=>1000,39389=>1000,39390=>1000,39391=>1000,39392=>1000,39393=>1000,39394=>1000,39395=>1000,39396=>1000,
+ 39397=>1000,39398=>1000,39399=>1000,39400=>1000,39401=>1000,39402=>1000,39403=>1000,39404=>1000,39405=>1000,39406=>1000,39407=>1000,39408=>1000,39409=>1000,39410=>1000,39411=>1000,39412=>1000,
+ 39413=>1000,39414=>1000,39415=>1000,39416=>1000,39417=>1000,39418=>1000,39419=>1000,39420=>1000,39421=>1000,39422=>1000,39423=>1000,39424=>1000,39425=>1000,39426=>1000,39427=>1000,39428=>1000,
+ 39429=>1000,39430=>1000,39431=>1000,39432=>1000,39433=>1000,39434=>1000,39435=>1000,39436=>1000,39437=>1000,39438=>1000,39439=>1000,39440=>1000,39441=>1000,39442=>1000,39443=>1000,39444=>1000,
+ 39445=>1000,39446=>1000,39447=>1000,39448=>1000,39449=>1000,39450=>1000,39451=>1000,39452=>1000,39453=>1000,39454=>1000,39455=>1000,39456=>1000,39457=>1000,39458=>1000,39459=>1000,39460=>1000,
+ 39461=>1000,39462=>1000,39463=>1000,39464=>1000,39465=>1000,39466=>1000,39467=>1000,39468=>1000,39469=>1000,39470=>1000,39471=>1000,39472=>1000,39473=>1000,39474=>1000,39475=>1000,39476=>1000,
+ 39477=>1000,39478=>1000,39479=>1000,39480=>1000,39481=>1000,39482=>1000,39483=>1000,39484=>1000,39485=>1000,39486=>1000,39487=>1000,39488=>1000,39489=>1000,39490=>1000,39491=>1000,39492=>1000,
+ 39493=>1000,39494=>1000,39495=>1000,39496=>1000,39497=>1000,39498=>1000,39499=>1000,39500=>1000,39501=>1000,39502=>1000,39503=>1000,39504=>1000,39505=>1000,39506=>1000,39507=>1000,39508=>1000,
+ 39509=>1000,39510=>1000,39511=>1000,39512=>1000,39513=>1000,39514=>1000,39515=>1000,39516=>1000,39517=>1000,39518=>1000,39519=>1000,39520=>1000,39521=>1000,39522=>1000,39523=>1000,39524=>1000,
+ 39525=>1000,39526=>1000,39527=>1000,39528=>1000,39529=>1000,39530=>1000,39531=>1000,39532=>1000,39533=>1000,39534=>1000,39535=>1000,39536=>1000,39537=>1000,39538=>1000,39539=>1000,39540=>1000,
+ 39541=>1000,39542=>1000,39543=>1000,39544=>1000,39545=>1000,39546=>1000,39547=>1000,39548=>1000,39549=>1000,39550=>1000,39551=>1000,39552=>1000,39553=>1000,39554=>1000,39555=>1000,39556=>1000,
+ 39557=>1000,39558=>1000,39559=>1000,39560=>1000,39561=>1000,39562=>1000,39563=>1000,39564=>1000,39565=>1000,39566=>1000,39567=>1000,39568=>1000,39569=>1000,39570=>1000,39571=>1000,39572=>1000,
+ 39573=>1000,39574=>1000,39575=>1000,39576=>1000,39577=>1000,39578=>1000,39579=>1000,39580=>1000,39581=>1000,39582=>1000,39583=>1000,39584=>1000,39585=>1000,39586=>1000,39587=>1000,39588=>1000,
+ 39589=>1000,39590=>1000,39591=>1000,39592=>1000,39593=>1000,39594=>1000,39595=>1000,39596=>1000,39597=>1000,39598=>1000,39599=>1000,39600=>1000,39601=>1000,39602=>1000,39603=>1000,39604=>1000,
+ 39605=>1000,39606=>1000,39607=>1000,39608=>1000,39609=>1000,39610=>1000,39611=>1000,39612=>1000,39613=>1000,39614=>1000,39615=>1000,39616=>1000,39617=>1000,39618=>1000,39619=>1000,39620=>1000,
+ 39621=>1000,39622=>1000,39623=>1000,39624=>1000,39625=>1000,39626=>1000,39627=>1000,39628=>1000,39629=>1000,39630=>1000,39631=>1000,39632=>1000,39633=>1000,39634=>1000,39635=>1000,39636=>1000,
+ 39637=>1000,39638=>1000,39639=>1000,39640=>1000,39641=>1000,39642=>1000,39643=>1000,39644=>1000,39645=>1000,39646=>1000,39647=>1000,39648=>1000,39649=>1000,39650=>1000,39651=>1000,39652=>1000,
+ 39653=>1000,39654=>1000,39655=>1000,39656=>1000,39657=>1000,39658=>1000,39659=>1000,39660=>1000,39661=>1000,39662=>1000,39663=>1000,39664=>1000,39665=>1000,39666=>1000,39667=>1000,39668=>1000,
+ 39669=>1000,39670=>1000,39671=>1000,39672=>1000,39673=>1000,39674=>1000,39675=>1000,39676=>1000,39677=>1000,39678=>1000,39679=>1000,39680=>1000,39681=>1000,39682=>1000,39683=>1000,39684=>1000,
+ 39685=>1000,39686=>1000,39687=>1000,39688=>1000,39689=>1000,39690=>1000,39691=>1000,39692=>1000,39693=>1000,39694=>1000,39695=>1000,39696=>1000,39697=>1000,39698=>1000,39699=>1000,39700=>1000,
+ 39701=>1000,39702=>1000,39703=>1000,39704=>1000,39705=>1000,39706=>1000,39707=>1000,39708=>1000,39709=>1000,39710=>1000,39711=>1000,39712=>1000,39713=>1000,39714=>1000,39715=>1000,39716=>1000,
+ 39717=>1000,39718=>1000,39719=>1000,39720=>1000,39721=>1000,39722=>1000,39723=>1000,39724=>1000,39725=>1000,39726=>1000,39727=>1000,39728=>1000,39729=>1000,39730=>1000,39731=>1000,39732=>1000,
+ 39733=>1000,39734=>1000,39735=>1000,39736=>1000,39737=>1000,39738=>1000,39739=>1000,39740=>1000,39741=>1000,39742=>1000,39743=>1000,39744=>1000,39745=>1000,39746=>1000,39747=>1000,39748=>1000,
+ 39749=>1000,39750=>1000,39751=>1000,39752=>1000,39753=>1000,39754=>1000,39755=>1000,39756=>1000,39757=>1000,39758=>1000,39759=>1000,39760=>1000,39761=>1000,39762=>1000,39763=>1000,39764=>1000,
+ 39765=>1000,39766=>1000,39767=>1000,39768=>1000,39769=>1000,39770=>1000,39771=>1000,39772=>1000,39773=>1000,39774=>1000,39775=>1000,39776=>1000,39777=>1000,39778=>1000,39779=>1000,39780=>1000,
+ 39781=>1000,39782=>1000,39783=>1000,39784=>1000,39785=>1000,39786=>1000,39787=>1000,39788=>1000,39789=>1000,39790=>1000,39791=>1000,39792=>1000,39793=>1000,39794=>1000,39795=>1000,39796=>1000,
+ 39797=>1000,39798=>1000,39799=>1000,39800=>1000,39801=>1000,39802=>1000,39803=>1000,39804=>1000,39805=>1000,39806=>1000,39807=>1000,39808=>1000,39809=>1000,39810=>1000,39811=>1000,39812=>1000,
+ 39813=>1000,39814=>1000,39815=>1000,39816=>1000,39817=>1000,39818=>1000,39819=>1000,39820=>1000,39821=>1000,39822=>1000,39823=>1000,39824=>1000,39825=>1000,39826=>1000,39827=>1000,39828=>1000,
+ 39829=>1000,39830=>1000,39831=>1000,39832=>1000,39833=>1000,39834=>1000,39835=>1000,39836=>1000,39837=>1000,39838=>1000,39839=>1000,39840=>1000,39841=>1000,39842=>1000,39843=>1000,39844=>1000,
+ 39845=>1000,39846=>1000,39847=>1000,39848=>1000,39849=>1000,39850=>1000,39851=>1000,39852=>1000,39853=>1000,39854=>1000,39855=>1000,39856=>1000,39857=>1000,39858=>1000,39859=>1000,39860=>1000,
+ 39861=>1000,39862=>1000,39863=>1000,39864=>1000,39865=>1000,39866=>1000,39867=>1000,39868=>1000,39869=>1000,39870=>1000,39871=>1000,39872=>1000,39873=>1000,39874=>1000,39875=>1000,39876=>1000,
+ 39877=>1000,39878=>1000,39879=>1000,39880=>1000,39881=>1000,39882=>1000,39883=>1000,39884=>1000,39885=>1000,39886=>1000,39887=>1000,39888=>1000,39889=>1000,39890=>1000,39891=>1000,39892=>1000,
+ 39893=>1000,39894=>1000,39895=>1000,39896=>1000,39897=>1000,39898=>1000,39899=>1000,39900=>1000,39901=>1000,39902=>1000,39903=>1000,39904=>1000,39905=>1000,39906=>1000,39907=>1000,39908=>1000,
+ 39909=>1000,39910=>1000,39911=>1000,39912=>1000,39913=>1000,39914=>1000,39915=>1000,39916=>1000,39917=>1000,39918=>1000,39919=>1000,39920=>1000,39921=>1000,39922=>1000,39923=>1000,39924=>1000,
+ 39925=>1000,39926=>1000,39927=>1000,39928=>1000,39929=>1000,39930=>1000,39931=>1000,39932=>1000,39933=>1000,39934=>1000,39935=>1000,39936=>1000,39937=>1000,39938=>1000,39939=>1000,39940=>1000,
+ 39941=>1000,39942=>1000,39943=>1000,39944=>1000,39945=>1000,39946=>1000,39947=>1000,39948=>1000,39949=>1000,39950=>1000,39951=>1000,39952=>1000,39953=>1000,39954=>1000,39955=>1000,39956=>1000,
+ 39957=>1000,39958=>1000,39959=>1000,39960=>1000,39961=>1000,39962=>1000,39963=>1000,39964=>1000,39965=>1000,39966=>1000,39967=>1000,39968=>1000,39969=>1000,39970=>1000,39971=>1000,39972=>1000,
+ 39973=>1000,39974=>1000,39975=>1000,39976=>1000,39977=>1000,39978=>1000,39979=>1000,39980=>1000,39981=>1000,39982=>1000,39983=>1000,39984=>1000,39985=>1000,39986=>1000,39987=>1000,39988=>1000,
+ 39989=>1000,39990=>1000,39991=>1000,39992=>1000,39993=>1000,39994=>1000,39995=>1000,39996=>1000,39997=>1000,39998=>1000,39999=>1000,40000=>1000,40001=>1000,40002=>1000,40003=>1000,40004=>1000,
+ 40005=>1000,40006=>1000,40007=>1000,40008=>1000,40009=>1000,40010=>1000,40011=>1000,40012=>1000,40013=>1000,40014=>1000,40015=>1000,40016=>1000,40017=>1000,40018=>1000,40019=>1000,40020=>1000,
+ 40021=>1000,40022=>1000,40023=>1000,40024=>1000,40025=>1000,40026=>1000,40027=>1000,40028=>1000,40029=>1000,40030=>1000,40031=>1000,40032=>1000,40033=>1000,40034=>1000,40035=>1000,40036=>1000,
+ 40037=>1000,40038=>1000,40039=>1000,40040=>1000,40041=>1000,40042=>1000,40043=>1000,40044=>1000,40045=>1000,40046=>1000,40047=>1000,40048=>1000,40049=>1000,40050=>1000,40051=>1000,40052=>1000,
+ 40053=>1000,40054=>1000,40055=>1000,40056=>1000,40057=>1000,40058=>1000,40059=>1000,40060=>1000,40061=>1000,40062=>1000,40063=>1000,40064=>1000,40065=>1000,40066=>1000,40067=>1000,40068=>1000,
+ 40069=>1000,40070=>1000,40071=>1000,40072=>1000,40073=>1000,40074=>1000,40075=>1000,40076=>1000,40077=>1000,40078=>1000,40079=>1000,40080=>1000,40081=>1000,40082=>1000,40083=>1000,40084=>1000,
+ 40085=>1000,40086=>1000,40087=>1000,40088=>1000,40089=>1000,40090=>1000,40091=>1000,40092=>1000,40093=>1000,40094=>1000,40095=>1000,40096=>1000,40097=>1000,40098=>1000,40099=>1000,40100=>1000,
+ 40101=>1000,40102=>1000,40103=>1000,40104=>1000,40105=>1000,40106=>1000,40107=>1000,40108=>1000,40109=>1000,40110=>1000,40111=>1000,40112=>1000,40113=>1000,40114=>1000,40115=>1000,40116=>1000,
+ 40117=>1000,40118=>1000,40119=>1000,40120=>1000,40121=>1000,40122=>1000,40123=>1000,40124=>1000,40125=>1000,40126=>1000,40127=>1000,40128=>1000,40129=>1000,40130=>1000,40131=>1000,40132=>1000,
+ 40133=>1000,40134=>1000,40135=>1000,40136=>1000,40137=>1000,40138=>1000,40139=>1000,40140=>1000,40141=>1000,40142=>1000,40143=>1000,40144=>1000,40145=>1000,40146=>1000,40147=>1000,40148=>1000,
+ 40149=>1000,40150=>1000,40151=>1000,40152=>1000,40153=>1000,40154=>1000,40155=>1000,40156=>1000,40157=>1000,40158=>1000,40159=>1000,40160=>1000,40161=>1000,40162=>1000,40163=>1000,40164=>1000,
+ 40165=>1000,40166=>1000,40167=>1000,40168=>1000,40169=>1000,40170=>1000,40171=>1000,40172=>1000,40173=>1000,40174=>1000,40175=>1000,40176=>1000,40177=>1000,40178=>1000,40179=>1000,40180=>1000,
+ 40181=>1000,40182=>1000,40183=>1000,40184=>1000,40185=>1000,40186=>1000,40187=>1000,40188=>1000,40189=>1000,40190=>1000,40191=>1000,40192=>1000,40193=>1000,40194=>1000,40195=>1000,40196=>1000,
+ 40197=>1000,40198=>1000,40199=>1000,40200=>1000,40201=>1000,40202=>1000,40203=>1000,40204=>1000,40205=>1000,40206=>1000,40207=>1000,40208=>1000,40209=>1000,40210=>1000,40211=>1000,40212=>1000,
+ 40213=>1000,40214=>1000,40215=>1000,40216=>1000,40217=>1000,40218=>1000,40219=>1000,40220=>1000,40221=>1000,40222=>1000,40223=>1000,40224=>1000,40225=>1000,40226=>1000,40227=>1000,40228=>1000,
+ 40229=>1000,40230=>1000,40231=>1000,40232=>1000,40233=>1000,40234=>1000,40235=>1000,40236=>1000,40237=>1000,40238=>1000,40239=>1000,40240=>1000,40241=>1000,40242=>1000,40243=>1000,40244=>1000,
+ 40245=>1000,40246=>1000,40247=>1000,40248=>1000,40249=>1000,40250=>1000,40251=>1000,40252=>1000,40253=>1000,40254=>1000,40255=>1000,40256=>1000,40257=>1000,40258=>1000,40259=>1000,40260=>1000,
+ 40261=>1000,40262=>1000,40263=>1000,40264=>1000,40265=>1000,40266=>1000,40267=>1000,40268=>1000,40269=>1000,40270=>1000,40271=>1000,40272=>1000,40273=>1000,40274=>1000,40275=>1000,40276=>1000,
+ 40277=>1000,40278=>1000,40279=>1000,40280=>1000,40281=>1000,40282=>1000,40283=>1000,40284=>1000,40285=>1000,40286=>1000,40287=>1000,40288=>1000,40289=>1000,40290=>1000,40291=>1000,40292=>1000,
+ 40293=>1000,40294=>1000,40295=>1000,40296=>1000,40297=>1000,40298=>1000,40299=>1000,40300=>1000,40301=>1000,40302=>1000,40303=>1000,40304=>1000,40305=>1000,40306=>1000,40307=>1000,40308=>1000,
+ 40309=>1000,40310=>1000,40311=>1000,40312=>1000,40313=>1000,40314=>1000,40315=>1000,40316=>1000,40317=>1000,40318=>1000,40319=>1000,40320=>1000,40321=>1000,40322=>1000,40323=>1000,40324=>1000,
+ 40325=>1000,40326=>1000,40327=>1000,40328=>1000,40329=>1000,40330=>1000,40331=>1000,40332=>1000,40333=>1000,40334=>1000,40335=>1000,40336=>1000,40337=>1000,40338=>1000,40339=>1000,40340=>1000,
+ 40341=>1000,40342=>1000,40343=>1000,40344=>1000,40345=>1000,40346=>1000,40347=>1000,40348=>1000,40349=>1000,40350=>1000,40351=>1000,40352=>1000,40353=>1000,40354=>1000,40355=>1000,40356=>1000,
+ 40357=>1000,40358=>1000,40359=>1000,40360=>1000,40361=>1000,40362=>1000,40363=>1000,40364=>1000,40365=>1000,40366=>1000,40367=>1000,40368=>1000,40369=>1000,40370=>1000,40371=>1000,40372=>1000,
+ 40373=>1000,40374=>1000,40375=>1000,40376=>1000,40377=>1000,40378=>1000,40379=>1000,40380=>1000,40381=>1000,40382=>1000,40383=>1000,40384=>1000,40385=>1000,40386=>1000,40387=>1000,40388=>1000,
+ 40389=>1000,40390=>1000,40391=>1000,40392=>1000,40393=>1000,40394=>1000,40395=>1000,40396=>1000,40397=>1000,40398=>1000,40399=>1000,40400=>1000,40401=>1000,40402=>1000,40403=>1000,40404=>1000,
+ 40405=>1000,40406=>1000,40407=>1000,40408=>1000,40409=>1000,40410=>1000,40411=>1000,40412=>1000,40413=>1000,40414=>1000,40415=>1000,40416=>1000,40417=>1000,40418=>1000,40419=>1000,40420=>1000,
+ 40421=>1000,40422=>1000,40423=>1000,40424=>1000,40425=>1000,40426=>1000,40427=>1000,40428=>1000,40429=>1000,40430=>1000,40431=>1000,40432=>1000,40433=>1000,40434=>1000,40435=>1000,40436=>1000,
+ 40437=>1000,40438=>1000,40439=>1000,40440=>1000,40441=>1000,40442=>1000,40443=>1000,40444=>1000,40445=>1000,40446=>1000,40447=>1000,40448=>1000,40449=>1000,40450=>1000,40451=>1000,40452=>1000,
+ 40453=>1000,40454=>1000,40455=>1000,40456=>1000,40457=>1000,40458=>1000,40459=>1000,40460=>1000,40461=>1000,40462=>1000,40463=>1000,40464=>1000,40465=>1000,40466=>1000,40467=>1000,40468=>1000,
+ 40469=>1000,40470=>1000,40471=>1000,40472=>1000,40473=>1000,40474=>1000,40475=>1000,40476=>1000,40477=>1000,40478=>1000,40479=>1000,40480=>1000,40481=>1000,40482=>1000,40483=>1000,40484=>1000,
+ 40485=>1000,40486=>1000,40487=>1000,40488=>1000,40489=>1000,40490=>1000,40491=>1000,40492=>1000,40493=>1000,40494=>1000,40495=>1000,40496=>1000,40497=>1000,40498=>1000,40499=>1000,40500=>1000,
+ 40501=>1000,40502=>1000,40503=>1000,40504=>1000,40505=>1000,40506=>1000,40507=>1000,40508=>1000,40509=>1000,40510=>1000,40511=>1000,40512=>1000,40513=>1000,40514=>1000,40515=>1000,40516=>1000,
+ 40517=>1000,40518=>1000,40519=>1000,40520=>1000,40521=>1000,40522=>1000,40523=>1000,40524=>1000,40525=>1000,40526=>1000,40527=>1000,40528=>1000,40529=>1000,40530=>1000,40531=>1000,40532=>1000,
+ 40533=>1000,40534=>1000,40535=>1000,40536=>1000,40537=>1000,40538=>1000,40539=>1000,40540=>1000,40541=>1000,40542=>1000,40543=>1000,40544=>1000,40545=>1000,40546=>1000,40547=>1000,40548=>1000,
+ 40549=>1000,40550=>1000,40551=>1000,40552=>1000,40553=>1000,40554=>1000,40555=>1000,40556=>1000,40557=>1000,40558=>1000,40559=>1000,40560=>1000,40561=>1000,40562=>1000,40563=>1000,40564=>1000,
+ 40565=>1000,40566=>1000,40567=>1000,40568=>1000,40569=>1000,40570=>1000,40571=>1000,40572=>1000,40573=>1000,40574=>1000,40575=>1000,40576=>1000,40577=>1000,40578=>1000,40579=>1000,40580=>1000,
+ 40581=>1000,40582=>1000,40583=>1000,40584=>1000,40585=>1000,40586=>1000,40587=>1000,40588=>1000,40589=>1000,40590=>1000,40591=>1000,40592=>1000,40593=>1000,40594=>1000,40595=>1000,40596=>1000,
+ 40597=>1000,40598=>1000,40599=>1000,40600=>1000,40601=>1000,40602=>1000,40603=>1000,40604=>1000,40605=>1000,40606=>1000,40607=>1000,40608=>1000,40609=>1000,40610=>1000,40611=>1000,40612=>1000,
+ 40613=>1000,40614=>1000,40615=>1000,40616=>1000,40617=>1000,40618=>1000,40619=>1000,40620=>1000,40621=>1000,40622=>1000,40623=>1000,40624=>1000,40625=>1000,40626=>1000,40627=>1000,40628=>1000,
+ 40629=>1000,40630=>1000,40631=>1000,40632=>1000,40633=>1000,40634=>1000,40635=>1000,40636=>1000,40637=>1000,40638=>1000,40639=>1000,40640=>1000,40641=>1000,40642=>1000,40643=>1000,40644=>1000,
+ 40645=>1000,40646=>1000,40647=>1000,40648=>1000,40649=>1000,40650=>1000,40651=>1000,40652=>1000,40653=>1000,40654=>1000,40655=>1000,40656=>1000,40657=>1000,40658=>1000,40659=>1000,40660=>1000,
+ 40661=>1000,40662=>1000,40663=>1000,40664=>1000,40665=>1000,40666=>1000,40667=>1000,40668=>1000,40669=>1000,40670=>1000,40671=>1000,40672=>1000,40673=>1000,40674=>1000,40675=>1000,40676=>1000,
+ 40677=>1000,40678=>1000,40679=>1000,40680=>1000,40681=>1000,40682=>1000,40683=>1000,40684=>1000,40685=>1000,40686=>1000,40687=>1000,40688=>1000,40689=>1000,40690=>1000,40691=>1000,40692=>1000,
+ 40693=>1000,40694=>1000,40695=>1000,40696=>1000,40697=>1000,40698=>1000,40699=>1000,40700=>1000,40701=>1000,40702=>1000,40703=>1000,40704=>1000,40705=>1000,40706=>1000,40707=>1000,40708=>1000,
+ 40709=>1000,40710=>1000,40711=>1000,40712=>1000,40713=>1000,40714=>1000,40715=>1000,40716=>1000,40717=>1000,40718=>1000,40719=>1000,40720=>1000,40721=>1000,40722=>1000,40723=>1000,40724=>1000,
+ 40725=>1000,40726=>1000,40727=>1000,40728=>1000,40729=>1000,40730=>1000,40731=>1000,40732=>1000,40733=>1000,40734=>1000,40735=>1000,40736=>1000,40737=>1000,40738=>1000,40739=>1000,40740=>1000,
+ 40741=>1000,40742=>1000,40743=>1000,40744=>1000,40745=>1000,40746=>1000,40747=>1000,40748=>1000,40749=>1000,40750=>1000,40751=>1000,40752=>1000,40753=>1000,40754=>1000,40755=>1000,40756=>1000,
+ 40757=>1000,40758=>1000,40759=>1000,40760=>1000,40761=>1000,40762=>1000,40763=>1000,40764=>1000,40765=>1000,40766=>1000,40767=>1000,40768=>1000,40769=>1000,40770=>1000,40771=>1000,40772=>1000,
+ 40773=>1000,40774=>1000,40775=>1000,40776=>1000,40777=>1000,40778=>1000,40779=>1000,40780=>1000,40781=>1000,40782=>1000,40783=>1000,40784=>1000,40785=>1000,40786=>1000,40787=>1000,40788=>1000,
+ 40789=>1000,40790=>1000,40791=>1000,40792=>1000,40793=>1000,40794=>1000,40795=>1000,40796=>1000,40797=>1000,40798=>1000,40799=>1000,40800=>1000,40801=>1000,40802=>1000,40803=>1000,40804=>1000,
+ 40805=>1000,40806=>1000,40807=>1000,40808=>1000,40809=>1000,40810=>1000,40811=>1000,40812=>1000,40813=>1000,40814=>1000,40815=>1000,40816=>1000,40817=>1000,40818=>1000,40819=>1000,40820=>1000,
+ 40821=>1000,40822=>1000,40823=>1000,40824=>1000,40825=>1000,40826=>1000,40827=>1000,40828=>1000,40829=>1000,40830=>1000,40831=>1000,40832=>1000,40833=>1000,40834=>1000,40835=>1000,40836=>1000,
+ 40837=>1000,40838=>1000,40839=>1000,40840=>1000,40841=>1000,40842=>1000,40843=>1000,40844=>1000,40845=>1000,40846=>1000,40847=>1000,40848=>1000,40849=>1000,40850=>1000,40851=>1000,40852=>1000,
+ 40853=>1000,40854=>1000,40855=>1000,40856=>1000,40857=>1000,40858=>1000,40859=>1000,40860=>1000,40861=>1000,40862=>1000,40863=>1000,40864=>1000,40865=>1000,40866=>1000,40867=>1000,40868=>1000,
+ 40869=>1000);
+$diff='';
+$originalsize=23275812;
+
+// CID Information
+// Select your language
+// unicode to cid conversion table is from
+// ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/
+// cid2code.txt in ac16.tar.Z,ag15.tar.Z,ak12.tar.Z and aj16.tar.Z.
+
+//$enc='UniCNS-UTF16-H';
+//$cidinfo=array('Registry'=>'Adobe','Ordering'=>'CNS1','Supplement'=>0);
+//include(dirname(__FILE__).'/uni2cid_ac15.php');
+
+//$enc='UniGB-UTF16-H';
+//$cidinfo=array('Registry'=>'Adobe','Ordering'=>'GB1','Supplement'=>2);
+//include(dirname(__FILE__).'/uni2cid_ag15.php');
+
+//$enc='UniKS-UTF16-H';
+//$cidinfo=array('Registry'=>'Adobe','Ordering'=>'Korea1','Supplement'=>0);
+//include(dirname(__FILE__).'/uni2cid_ak12.php');
+
+$enc='UniJIS-UTF16-H';
+$cidinfo=array('Registry'=>'Adobe','Ordering'=>'Japan1','Supplement'=>5);
+include(dirname(__FILE__).'/uni2cid_aj16.php');
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/courier.php b/lib/tcpdf/fonts/courier.php
index 1ce3afc8c15..e935b67681c 100644
--- a/lib/tcpdf/fonts/courier.php
+++ b/lib/tcpdf/fonts/courier.php
@@ -1,33 +1,12 @@
600,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>600,9=>600,
-10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600,
-20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>600,
-30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,
-40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,
-50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,
-60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,
-70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,
-80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,
-90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,
-100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,
-109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,
-118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,
-127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600,
-136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600,
-145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600,
-154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600,
-163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,
-172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,
-181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,
-190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,
-199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,
-208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,
-217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,
-226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,
-235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,
-244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,
-253=>600,254=>600,255=>600);
-?>
+$diff='';
+$enc='';
+$desc=array('Flags'=>33,'FontBBox'=>'[-23 -250 715 805]','ItalicAngle'=>0,'Ascent'=>805,'Descent'=>-250,'Leading'=>0,'CapHeight'=>562,'XHeight'=>426,'StemV'=>51,'StemH'=>51,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600);
+$cw=array(0=>600,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>600,9=>600,10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600,20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>600,30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600,136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600,145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600,154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/courierb.php b/lib/tcpdf/fonts/courierb.php
new file mode 100644
index 00000000000..acb01b0d68d
--- /dev/null
+++ b/lib/tcpdf/fonts/courierb.php
@@ -0,0 +1,12 @@
+33,'FontBBox'=>'[-113 -250 749 801]','ItalicAngle'=>0,'Ascent'=>801,'Descent'=>-250,'Leading'=>0,'CapHeight'=>562,'XHeight'=>439,'StemV'=>106,'StemH'=>84,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600);
+$cw=array(0=>600,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>600,9=>600,10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600,20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>600,30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600,136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600,145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600,154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/courierbi.php b/lib/tcpdf/fonts/courierbi.php
new file mode 100644
index 00000000000..631c623e908
--- /dev/null
+++ b/lib/tcpdf/fonts/courierbi.php
@@ -0,0 +1,12 @@
+97,'FontBBox'=>'[-57 -250 869 801]','ItalicAngle'=>-12,'Ascent'=>801,'Descent'=>-250,'Leading'=>0,'CapHeight'=>562,'XHeight'=>439,'StemV'=>106,'StemH'=>84,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600);
+$cw=array(0=>600,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>600,9=>600,10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600,20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>600,30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600,136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600,145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600,154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/courieri.php b/lib/tcpdf/fonts/courieri.php
new file mode 100644
index 00000000000..5ae725d4ad2
--- /dev/null
+++ b/lib/tcpdf/fonts/courieri.php
@@ -0,0 +1,12 @@
+97,'FontBBox'=>'[-27 -250 849 805]','ItalicAngle'=>-12,'Ascent'=>805,'Descent'=>-250,'Leading'=>0,'CapHeight'=>562,'XHeight'=>426,'StemV'=>51,'StemH'=>51,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600);
+$cw=array(0=>600,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>600,9=>600,10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600,20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>600,30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600,136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600,145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600,154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/freefont-20090104/AUTHORS b/lib/tcpdf/fonts/freefont-20100919/AUTHORS
similarity index 82%
rename from lib/tcpdf/fonts/freefont-20090104/AUTHORS
rename to lib/tcpdf/fonts/freefont-20100919/AUTHORS
index ee800a48ca6..d369db63b92 100644
--- a/lib/tcpdf/fonts/freefont-20090104/AUTHORS
+++ b/lib/tcpdf/fonts/freefont-20100919/AUTHORS
@@ -30,6 +30,10 @@ particular ISO 10646 blocks.
Arabic Presentation Forms-A (U+FB50-U+FDFF)
Arabic Presentation Forms-B (U+FE70-U+FEFF)
+* Yannis Haralambous and Wellcome Institute
+
+ Sinhala (U+0D80-U+0DFF)
+
* Young U. Ryu
Arrows (U+2190-U+21FF)
@@ -183,7 +187,15 @@ particular ISO 10646 blocks.
* Daniel Johnson
+ Armenian (serif) (U+0530-U+058F)
Cherokee (U+13A0-U+13FF)
+ Unified Canadian Aboriginal Syllabics (U+1400-U+167F)
+ UCAS Extended (U+18B0-U+18F5)
+ Tifinagh (U+2D30-U+2D7F)
+ Vai (U+A500-U+A62B)
+ Latin Extended-D (Mayanist letters) (U+A720-U+A7FF)
+ Kayah Li (U+A900-U+A92F)
+ Osmanya (U+10480-U+104a7)
* George Douros
@@ -196,8 +208,23 @@ particular ISO 10646 blocks.
Dominoes (U+1F030-U+1F093)
* Steve White
+ Glagolitic (U+2C00-U+2C5F)
Coptic (U+2C80-U+2CFF)
+* Pavel Skrylev is responsible for
+ Cyrillic Extended-A (U+2DEO-U+2DFF)
+ as well as many of the additions to
+ Cyrillic Extended-B (U+A640-U+A65F)
+
+* Mark Williamson
+ Made the MPH 2 Damase font, from which
+ Hanunóo (U+1720-U+173F)
+ Buginese (U+1A00-U+1A1F)
+ Tai Le (U+1950-U+197F)
+ Ugaritic (U+10380-U+1039F)
+ Old Persian (U+103A0-U+103DF)
+
+
* Primož Peterlin
maintained FreeFont for several years, and is thanked for all his work.
@@ -205,4 +232,4 @@ Please see the CREDITS file for details on who contributed particular
subsets of the glyphs in font files.
--------------------------------------------------------------------------
-$Id$
+$Id: AUTHORS,v 1.23 2010/09/11 13:24:11 Stevan_White Exp $
diff --git a/lib/tcpdf/fonts/freefont-20090104/COPYING b/lib/tcpdf/fonts/freefont-20100919/COPYING
similarity index 100%
rename from lib/tcpdf/fonts/freefont-20090104/COPYING
rename to lib/tcpdf/fonts/freefont-20100919/COPYING
diff --git a/lib/tcpdf/fonts/freefont-20090104/CREDITS b/lib/tcpdf/fonts/freefont-20100919/CREDITS
similarity index 89%
rename from lib/tcpdf/fonts/freefont-20090104/CREDITS
rename to lib/tcpdf/fonts/freefont-20100919/CREDITS
index 8b13098745d..66396e721b2 100644
--- a/lib/tcpdf/fonts/freefont-20090104/CREDITS
+++ b/lib/tcpdf/fonts/freefont-20100919/CREDITS
@@ -122,7 +122,6 @@ intlfonts 1.2 package and is available under the GPL at
Thai (U+0E00-U+0E7F)
-
* Shaheed R. Haque
Shaheed Haque has developed a basic set of basic Bengali glyphs
@@ -353,10 +352,16 @@ please contact mssridhar AT vsnl.com.
Noah Levitt found out that the Sinhalese fonts available on the site
are released under GNU GPL, or,
-precisely, "Public Domain under GNU Licence Produced by DMS
+precisely, "Public Domain under GNU Licence
Produced by DMS
Electronics for The Sri Lanka Tipitaka Project" (taken from the font
comment), and took the effort of recoding the font to Unicode.
+These glyphs were later replaced by those from the LKLUG font
+
+
+Finally the range was completely replaced by glyphs from the sinh TeX
+font, with much help and advice from Harshula Jayasuriya.
+
Sinhala (U+0D80-U+0DFF)
@@ -515,8 +520,56 @@ of ancient sources.
Created by hand a Cherokee range specially for FreeFont to be "in line with
the classic Cherokee typefaces used in 19th century printing", but also to
-fit well with ranges previously in FreeFont.
+fit well with ranges previously in FreeFont. Then he made Unified Canadian
+Syllabics in Sans, and a Cherokee and Kayah Li in Mono! And never to be
+outdone by himself, then did UCAS Extended and Osmanya.... What next?
+
+ Armenian (serif) (U+0530-U+058F)
Cherokee (U+13A0-U+13FF)
+ Unified Canadian Aboriginal Syllabics (U+1400-U+167F)
+ UCAS Extended (U+18B0-U+18F5)
+ Kayah Li (U+A900-U+A92F)
+ Tifinagh (U+2D30-U+2D7F)
+ Vai (U+A500-U+A62B)
+ Latin Extended-D (Mayanist letters) (U+A720-U+A7FF)
+ Osmanya (U+10480-U+104a7)
+
+* Yannis Haralambous and Wellcome Institute
+
+In 1994, The Wellcome Library
+ The Wellcome Institute for the History of Medicine
+ 183 Euston Road, London NW1 2BE, England.
+commissioned Mr. Haralambous to produce a Sinhalese font for them.
+
+We have received 03/09 official notice from Robert Kiley, Head of e-Strategy
+for the Wellcome Library, that Yannis' font could be included in GNU
+FreeFont under its GNU license.
+
+Thanks to Dominik Wujastyk, for providing us with feedback and contacts
+to repsonsible people at the Trust.
+
+ Sinhala (U+0D80-U+0DFF)
+
+* The Sinhala font project http://sinhala.sourceforge.net/
+
+The Sinhala font project has taken the glyphs from Yannis Haralambous'
+Sinhala font, to produce a Unicode TrueType font, LKLUG. These glyphs
+were for a while included in FreeFont.
+
+ Sinhala (U+0D80-U+0DFF)
+
+* Steve White
+
+Filled in a lot of missing characters, got some font features working,
+left fingerprints almost everywhere, and is responsible for these blocks:
+
+ Glagolitic (U+2C00-U+2C5F)
+ Coptic (U+2C80-U+2CFF)
+
+* Pavel Skrylev is responsible for
+ Cyrillic Extended-A (U+2DEO-U+2DFF)
+ as well as many of the additions to
+ Cyrillic Extended-B (U+A640-U+A65F)
Notes:
@@ -525,4 +578,4 @@ Notes:
this glyph collection.
--------------------------------------------------------------------------
-$Id$
+$Id: CREDITS,v 1.28 2010/09/11 13:24:11 Stevan_White Exp $
diff --git a/lib/tcpdf/fonts/freefont-20090104/ChangeLog b/lib/tcpdf/fonts/freefont-20100919/ChangeLog
similarity index 73%
rename from lib/tcpdf/fonts/freefont-20090104/ChangeLog
rename to lib/tcpdf/fonts/freefont-20100919/ChangeLog
index 9ab101bd64a..114032794e7 100644
--- a/lib/tcpdf/fonts/freefont-20090104/ChangeLog
+++ b/lib/tcpdf/fonts/freefont-20100919/ChangeLog
@@ -1,4 +1,1722 @@
-$Id$
+$Id: ChangeLog,v 1.257 2010/09/19 13:15:07 Stevan_White Exp $
+2010-09-19 Stevan_White
+ * FreeSerif.sfd:
+
+ Sinhala: Fixed one lookup table mistake, and a couple of glpyh
+ omissions, that Harshula pointed out.
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Sans: Applied Daniel Johnsons improvement to capital Eng to Sans, as
+ described in previous commits.
+
+ * FreeSerif.sfd, FreeSerifBold.sfd:
+
+ Coptic: added alphabet to bold. Accent marks not working -- a mystery.
+ Some tweeks in medium face as well.
+
+ glyph cleanup -- points too close, some glyphs outside bounding boxes.
+
+2010-09-17 Stevan_White
+ * FreeSerif.sfd:
+
+ Sinhala: tightened up left side of na and derivatives.
+ tighened up left sides of u, lla, na, dha, ndha, nya, jnya
+ tightened up some of the vowel conjuncts, and left side of nna.
+
+2010-09-16 Stevan_White
+ * FreeSerif.sfd:
+
+ Coptic: fiddled about with letter forms, striving for a kind of
+ consistency.
+
+ Sinhala: Harshula noticed four incorrect combined forms. Fixed these.
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ Latin Extended-A: Applied Daniel Johnson's patch that made two versions
+ of capital Eng. His explanation:
+ '
+ http://en.wikipedia.org/wiki/%C5%8A
+
+ The form of capital Eng currently in all three FreeFont faces
+ is that used by the Sami people, resembling a capital N with a
+ hooked right descender.
+ However, the form preferred for African and Amerindian
+ languages resembles a tall lowercase n with a hook that almost
+ meets the left vertical. (See wikipedia link above for a
+ visual.)
+
+ Recommend moving the existing Sami-style Eng to a PUA or
+ non-Unicode slot, creating African-style Eng at U+014A, and
+ adding a LOCL table with substitution rules for
+ Inari Sami (ISM), Lule Sami (LSM),
+ Northern Sami (NSM) and Skolt Sami (SKS).
+ '
+ Latin Extended-B: Also in his patch:
+ added U+0220 (Latin Capital Letter N with long leg)
+
+2010-09-15 Stevan_White
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Latin for Sami: Daniel Johnson's patch added alternative form of Eng for
+ African languages and a 'local' table for the Sami form.
+
+ * FreeSerif.sfd:
+
+ Sinhala: regularized kundaliya a bit.
+ re-named a few more ligature glyphs, for consistency
+
+ * FreeSans.sfd:
+
+ Put stray lookup into its proper subtable.
+
+ Gurmukhi: improved some names of ligature glyphs, and found one
+ apparently doubled table entry (kagurmukhi_nuktagurmukhi.nukt now
+ gur_ka.nukt)
+
+ * FreeSans.sfd, FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ Various measures to fix problems FontForge Find Problems reports under
+ ATT, including a mass glyph rename of Sinhala ligatures.
+
+2010-09-15 Stevan_White
+ * to0ls/GenerateTrueType:
+
+ prev. commit had one space too many
+
+2010-09-14 Stevan_White
+ * tools-- GenerateMacTT, GenerateOpenType, GenerateTrueType, checkGlyphNumbers.py, findBackLayers.py, hex_range.py, isMonoMono.py, ligatureLookups.py, nameBySlot.py, range_report.py, ranges.py, validate.py, OpenType.py:
+
+ Added license and other tags to python files.
+
+2010-09-13 Stevan_White
+ * tools/OpenType.py:
+
+ updated some Web links.
+
+ * FreeMono.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Cyrillic: A few more old letters.
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ Supplemental Punctuation: One character for consistency with other faces.
+
+2010-09-12 Stevan_White
+ * FreeMono.sfd, FreeSans.sfd:
+
+ Control Pictures: Added because it was easy.
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Alphabetic Presentation Forms: filled out range in sans faces.
+
+ * FreeMono.sfd, FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBoldItalic.sfd:
+
+ Cleared hints.
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Dozens of measures to pass general validation tests, including
+ . cleanup of many glyphs for extrema and self-intersection problmes
+ . re-naming glyphs whose PS names are too long.
+ . removing blank glyphs
+ . giving Unicode points to glyphs missing them.
+
+ There are still a few lookup table issues in FreeSerif and FreeSans though.
+
+ * FreeSerif.sfd:
+
+ Re-named some of the Sinhala lookups in somewhat better way.
+ Control Pictures: added a bunch (but... is it worth it?)
+
+ * tools/nameBySlot.py:
+
+ Corrected output for high Unicode.
+
+ * tools/checkGlyphNumbers.py:
+
+ Made aware of special TrueType slots.
+
+ * tools/range_report.py:
+
+ Added a Private Use total and better explanation of totals generally.
+ Some code clean-up.
+
+2010-09-11 Stevan_White
+ * tools/OpenType.py:
+
+ made not to complain about extra TrueType characters.
+
+ * FreeSerif.sfd:
+
+ Coptic: Widened bowl of Khei.
+ Deepened descenders of small letters to same depth as in Latin
+ Expanded bowl of Fei and fei to resemble other samples.
+
+2010-09-10 Stevan_White
+ * FreeSerif.sfd:
+
+ Cyrillic: mostly positioning of marks for old Cyrillic alphabets
+
+ Coptic: Replaced acoptic with something more dramatic, fiddled with
+ kerning, tidied some other letters
+
+2010-09-09 Stevan_White
+ * FreeSerifBold.sfd, FreeSans.sfd, FreeSerif.sfd:
+
+ Block Elements: replaced long-missing shade blocks
+
+2010-09-08 Stevan_White
+ * tools/range_report.py:
+
+ More explanation in output.
+
+ * tools/range_report.py, OpenType.py:
+
+ another consistency check
+ added UCAS Extended range
+
+2010-09-07 Stevan_White
+ * FreeSerif.sfd:
+
+ Buginese: lookup tables and glyphs to re-order vowels, courtesy of
+ Mohammad Anwari.
+
+ Sinhala: complete replacement of range with glyphs extracted more
+ directly from Yannis Haralambous' sinha TeX font (last version was
+ also derived from this font, but had undergone detrimental processing).
+ Implements "rak" glyphs using three GSUB lookup steps.
+
+ * FreeSans.sfd:
+
+ Osmanya: courtesy of Daniel Johnson.
+
+ Note this script is slanted in every sample I've seen. That is
+ justification enough that the glyphs in this range look slated,
+ although the face isn't oblique.
+
+ UCAS Extended: by Daniel Johnson
+
+2010-09-05 Stevan_White
+ * FreeSerif.sfd:
+
+ Fix for FontForge warning (v 20090923)
+
+ "On Windows many apps will have problems with this font's kerning,
+ because because 58 of its glyph kern pairs cannot be mapped to
+ unicode-BMP kern pairs"
+
+ This was due to kern tables for the Musical Symbols range, which isn't
+ in the Unicode Basic Multilingual Plane.
+
+ Removed this lookup. Might consider another way to position these
+ symbols.
+
+2010-08-30 Stevan_White
+ * FreeSerif.sfd:
+
+ Sinhala: patch by Harshula Jayasuriya to correct the writing system
+ direction in some lookups.
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Currency Symbols: additions and tweeking
+
+2010-08-24 Stevan_White
+ * FreeSerif.sfd:
+
+ Sinhala: added one ligature glyph, from Harshula Jayasuriya
+
+2010-08-20 Stevan_White
+ * FreeSerif.sfd:
+
+ Resolves class of validation problems in Sinhala: Bad Glyph Name.
+
+ This is a FontForge bug, that appears when certain types of problems
+ occur in the glyph contours. Probably an arithmetic error causes some
+ corruption.
+
+ Corrected missing extrema in recent Latin Extended-D range
+
+ Sinhala: re-did previous patch using a more recent one.
+ Un-did some other glyph changes that didn't help much anyway.
+
+ * FreeMono.sfd:
+
+ Named letters in several ranges... should write a script for this...
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Added full GNU copyright announcement to TT Names.
+ Updated Copyright date.
+
+ * FreeSerif.sfd:
+
+ Sinhala: Applied a patch from Harshula Jayasuriya, improving glyph
+ names.
+ I tried to tidy up some of the glyphs, but it's a big job...
+
+ Latin Extended B: fixed one case of missing extrema
+
+2010-08-18 Stevan_White
+ * FreeSerif.sfd:
+
+ Latin Extended-D: yet a few more easily made letters
+
+ Latin Extended-D: made a few more letters
+
+2010-08-09 Stevan_White
+ * FreeSerif.sfd:
+
+ Supplemental Arrows-A: completed
+
+ Arrows: completed
+
+2010-08-04 Stevan_White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd:
+
+ Combining Diacritics: some additions in BoldOblique, corrections in
+ other faces.
+ Several improvements to Greek letter forms in BoldOblique
+
+2010-08-03 Stevan_White
+ * FreeMonoBold.sfd:
+
+ Arrows, a few math operators, and one more combining diacritical
+
+ * FreeMono.sfd, FreeMonoBold.sfd:
+
+ Added some combining diacriticals to bold, touched up some spacing
+ modifiers.
+ Minor corrections to roman.
+
+ * FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ Marks, spacing modifier letters: corrected placement of marks,
+ added some spacing modifier letters and combining marks.
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ Better Vietnamese support, using 'ccmp' and 'mark' lookup tables.
+ MonoBoldOblique: added Extended Latin ranges
+
+ * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd:
+
+ Vietnamese: Much adjustment of horn letters,
+ also general adjustement of marks
+
+2010-08-02 Stevan_White
+ * FreeSerif.sfd:
+
+ Vietnamese: inadvertently broke the main face. This fixes it.
+
+ * FreeMono.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Vietamese: In roman and sans, lookups are basically functional now.
+ Used 'ccmp' Ligature Substitution to form stacked marks (inasmuch as
+ glyphs for the stacked Unicode codepoints are available)
+ Adjusted positioning of some marks.
+ Named many letters and combining marks.
+
+ roman italic. Re-designed horn of O and U. Other roman faces could also
+ benefit from a horn job.
+
+ * FreeMono.sfd, FreeSerif.sfd:
+
+ roman: correction to one math operator
+ mono: Mathematical Operators complete (up to some pre-5.2 Unicode version)
+
+ * FreeMono.sfd:
+
+ Mathematical Symbols: range nearly finished
+
+ * tools/OpenType.py:
+
+ Correction regarding NKo range.
+
+ * tools/range_report.py:
+
+ made not to complain about special TrueType slots 0x00, 0x01, 0x0D
+
+2010-08-01 Stevan_White
+ * FreeMono.sfd, FreeSerif.sfd:
+
+ roman: corrected direction of 2 math operators
+ mono: added several math operators
+
+ Worked on mark positioning for Vietnamese, Cyrillic
+
+2010-07-30 Stevan_White
+ * FreeMono.sfd:
+
+ Reduced height of two-part Summation symbols
+ https://savannah.gnu.org/bugs/?23064
+
+ Corrected U+2626 Orthodox Cross
+ https://savannah.gnu.org/bugs/?27579#discussion
+
+ * FreeSerif.sfd:
+
+ Added some Miscellaneous Technical Symbols
+
+2010-07-29 Stevan_White
+ * FreeSerif.sfd:
+
+ Put in some scan lines 23BA-23BD, based on 2500, as discussed in
+ https://savannah.gnu.org/bugs/?23064
+ I still have no idea what the application for these glyphs would be...
+
+2010-07-17 Stevan_White
+ * FreeSerif.sfd:
+
+ added mark anchors for acute, grave in cyrillic (other faces already
+ had them)
+
+2010-07-13 Stevan_White
+ * FreeMono.sfd:
+
+ Made germandbls (ess-zet) a bit wider, moved a bit to left
+
+2010-07-10 Stevan_White
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd:
+
+ Resolves bug 30344: "Greek Final Sigma could be shortened"
+ https://savannah.gnu.org/bugs/index.php?30344
+ Problem only affected roman, but touched up other faces anyway.
+
+2010-05-30 Stevan_White
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Latin-extended-B: fiddled with some of the horizontal strokes
+
+2010-05-29 Stevan_White
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Latin: accents on ogonek letters (for Navaho)
+ a little adjustment of apostrophe (Navaho, Hawaiian)
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Latin mark problems
+ * low dots in bold uneven
+ * ring in bold smaller than in roman, and not heavier
+ * apostrophe in italic too far to right (Navaho, Hawaiian)
+
+ * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Latin: fixed problems with various marks: ogonek, hook, comma below,
+ some kerning, esp. of non-ascii characters
+
+ * FreeSans.sfd, FreeSerif.sfd:
+
+ Sans: made dot accents same height as i-dot, kerned y with comma
+ Both: made low comma accent lower, smaller (esp. for Romanian)
+
+2010-05-27 Stevan_White
+ * FreeSans.sfd:
+
+ Latin: make caron of more uniform height
+
+ Latin: i was somehow displaced, dotlessi was much too wide for Turkish
+
+ * FreeSans.sfd, FreeSansOblique.sfd:
+
+ Latin: made ring accent heavier, esp. for Swedish
+
+
+2010-05-10 Stevan_White
+ * FreeSans.sfd, FreeSerif.sfd:
+
+ Latin: kerning tweeks
+
+2010-05-09 Stevan_White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ As discussed in freefont-bugs mailing list, Thu, May 6, 2010
+ "FreeMono affected by OS X 10.6 nested character references bug"
+ reduced reference nesting in multiple quote characters, as a courtesy
+ to Mac OS 10.6 users, who suffer from a bug.
+
+2010-05-04 Stevan_White
+ * FreeSerif.sfd:
+
+ Latin: kerning tweeks
+
+2010-05-03 Stevan_White
+ * FreeSerifBold.sfd:
+
+ Latin: spacing of round small letters, kerning tweeks, fiddled with
+ ligatures
+
+2010-04-17 Stevan_White
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Daniel Johnson improved Cherokee Da
+
+2010-04-10 Stevan_White
+ * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd:
+
+ Emboldened underscore and related glyphs. Resolves issue 22999
+ https://savannah.gnu.org/bugs/index.php?22999
+ Low line (005F) in bold fonts do not have heavier weight
+
+2010-04-09 Stevan_White
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Serif: Added Thai TTF names
+
+2010-04-08 Stevan_White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Corrected some language names
+ A bit o kerning
+
+ * FreeSerifBold.sfd:
+
+ Fixed problem with name. This should be the same as before the revision
+ except for the fix.
+ The KDE font installer was saying this face was incorrectly named
+ Free Serif Bold Italic, but this wasn't quite correct. One of the other
+ language names said it was named Free Serif Halvfett Kursiv, which
+ conflicted with that language name for the real Free Serif Bold Italic.
+
+ Regression: for some unknown reason, previous release gets built so
+ that my system thinks it is Free Serif Bold Italic.
+ This is a mystery. There is nothing about Italic in the file.
+
+2010-04-06 Stevan_White
+ * Makefile:
+
+ Made graceful in absence of Fontforge
+
+2010-03-29 Stevan_White
+ * FreeSerifBold.sfd:
+
+ Adjusted some accent marks, named a few characters
+
+2010-03-25 Stevan_White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ added Ukrainian TTF names
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ added bahasa indonesian TTF names
+
+2010-03-21 Stevan_White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Added several TTF Names. (Need to check with native speakers.)
+
+2010-03-20 Stevan_White
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Fill out TTF Names tables regarding font names
+
+2010-03-19 Stevan_White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Removed TTF Names for 'sample text' and all 'license URL' except English,
+ 1) in response to FontForge complain that large names tables conflict
+ with recent Windows patches
+ 2) because they are redundant and inappropriate
+ (Hope to post the list of sample texts elsewhere, because I like the idea.)
+
+2010-03-02 Stevan_White
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Latin standard ligatures: in non-bold, promoted dlig to liga.
+ Put standard Dutch IJ in all; Adjusted spacing a bit
+
+2010-02-28 Stevan_White
+ * FreeSerifBold.sfd, FreeSerifItalic.sfd:
+
+ Cyrillic: further revision of spacing, in direction of loosening.
+ bold ze was strangely thin; made bolder.
+
+2010-02-27 Stevan_White
+ * FreeSerif.sfd:
+
+ Cyrillic: reviewed spacing of whole range, generally loosened slightly
+ tidied a couple of ugly glyphs
+
+2010-02-09 Stevan_White
+ * FreeSerifBoldItalic.sfd:
+
+ tweeks to kerning in Latin
+
+ * FreeSerifBold.sfd:
+
+ Tweeks to kerning in Latin
+
+2010-01-28 Stevan_White
+ * tools/isMonoMono.py:
+
+ Implement FontForge handling of magic characters
+ .notdef, .null, nonmarkingreturn
+ at
+ 0x0000 0x0001 0x000D
+
+2010-01-27 Stevan_White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Improved magic characters for FreeMono, inserted them for other faces
+ https://savannah.gnu.org/bugs/index.php?28742
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ Added at 0x0000 0x0001 0x000D characters
+ .notdef .null nonmarkingreturn
+ These are NOT UNICODE they are to satisfy an essentially undocumented
+ "feature" of FontForge, ( in source tottf.c, AssignNotdefNull() )
+ And a funny strong suggestion of TrueType fonts, that they begin with
+ three special characters (evidently different from encoding slots)
+ http://www.microsoft.com/typography/otspec/recom.htm
+
+ FontForge looks for these glyphs in certain places and copies them.
+ Otherwise, apparently, it will find a glyph elsewhere (unclear how) and
+ copy it there, possibly resulting in something quite wrong
+ (such as a non-monospace font).
+
+ The three are copied to the end of TTF fonts (only one to the end of OTF
+ fonts)
+
+2009-12-31 Stevan_White
+ * FreeSans.sfd:
+
+ Tamil: deletd Unicode range due to absence of necessary ligatures
+
+ * FreeSerifBold.sfd:
+
+ Cyrillic tweek to spacing
+
+2009-12-29 Stevan_White
+ * FreeSans.sfd, FreeSansBold.sfd:
+
+ Gurmukhi: added 2 characters to complete range
+
+ * FreeSans.sfd, FreeSerif.sfd:
+
+ Devanagari: filled out sans, some corrections in serif
+
+ * FreeSerif.sfd:
+
+ Devanagari: Drew and constructed glyphs to complete range.
+
+2009-12-28 Stevan_White
+ * OpenType.py:
+
+ Added/corrected some ranges
+
+2009-12-27 Stevan_White
+ * tools -- CheckConformance.pl, GenerateTrueType, MES-1.lst, MES-1.txt, MES-2.lst, MES-2.txt, MES-3B.lst, MES-3B.txt, WGL4.lst, mes-list-expand.pl:
+
+ disabled build of Mac TT
+
+ * tools/ligatureLookups.py:
+
+ better sanity check
+
+ * tools/range_report.py:
+
+ more generic title
+
+ * tools/OpenType.py:
+
+ correction to Tamil
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Resolves bug #23049
+ Replacement character (U+FFFD) not properly styled
+ https://savannah.gnu.org/bugs/index.php?23049
+
+ * FreeSerif.sfd:
+
+ Devanagari: added letters, completing Unicode range
+
+ * FreeSerif.sfd:
+
+ Tamil: added 2 monster glyphs, completing range
+ (0bc1-2 still questionable)
+
+2009-12-26 Stevan_White
+ * FreeSerif.sfd:
+
+ Indic ranges: named lots of characters
+ Tamil: corrected and added a few letters
+
+ Tamil: added digits
+
+ Tamil: a few more symbols. Only a couple of monster signs still
+ missing, and a couple of marks seem just wrong...
+
+ Malayalam: completed Unicode range, also moving some Chillu letters from
+ Private Use area to Unicode, and re-establishing ligatures
+
+ * FreeSans.sfd:
+
+ Tamil: completed digits, added some other chars
+
+2009-12-25 Stevan_White
+ * FreeSans.sfd:
+
+ Indic ranges, esp.
+ Devanagari: added several new Unicode (not yet complete)
+ tidied letters
+ Bengali: tidying, made some refs
+
+2009-12-24 Stevan_White
+ * FreeSans.sfd:
+
+ Indic ranges: named most of the Unicode characters
+ Tried to improve a few bad names for ligatures
+ in Private Use Area
+ Made a few references: not clearly an improvement.
+ This stuff is still a mess...
+
+ Devanagari: added an obviously missing nukta ligature
+
+ Gujarati: added some subvocalic letters for Sanskrit. Quality is low.
+
+ Filled out Geometric Shapes.
+
+ * tools/ligatureLookups.py:
+
+ fixed syntax error
+
+ * tools/LigatureList.pl:
+
+ no longer relevant.
+
+2009-12-23 Stevan_White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ cosmetic re-name and re-order of lookups
+
+ * tools/OpenType.py:
+
+ removed links to disappeared web pages
+
+2009-12-22 Stevan_White
+ * FreeMonoOblique.sfd:
+
+ Diagonal Fractions lookup didn't make much sense in mono anyway,
+ much less in just one style.
+
+2009-12-20 Stevan_White
+ * FreeSerif.sfd:
+
+ split Diagonal Fractions lookup into two tables
+
+ re-encoded some characters
+ adjusted some marks
+ corrected two wrongly-placed glyphs in Phonetic Extensions Supplement
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ General Punctuation: Got rid of deprecated subrange 0x206A-0x206F
+
+ * tools/range_report.py:
+
+ corrected script name
+
+ * tools/OpenType.py:
+
+ numerous changes, some reflecting changes to Unicode standard
+
+2009-12-14 Stevan_White
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Unicode 5.2 corrections of Abkhasian letters from Daniel Johnson.
+ Got rid of some old glyph names.
+
+2009-12-06 Stevan_White
+ * FreeSans.sfd, FreeSansOblique.sfd:
+
+ Cherokee: fixed previous commit of a partial, and old range in
+ medium weight
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Cherokee, courtesy of Daniel Johnson.
+
+2009-11-20 Stevan_White
+ * FreeSans.sfd:
+
+ New glyphs for Unified Canadian Aboriginal Syllabics as defined in Unicode 5.2
+ by Daniel Johnson
+
+2009-11-14 Stevan_White
+ * FreeSerif.sfd:
+
+ Resolves bug #27842: FreeSerif U+1F016 (Mahjong Tile Seven of Bamboos) Wrong
+ https://savannah.gnu.org/bugs/?27842
+ has one extra bamboo in it for a total of eight.
+ The bamboo on the top left needs to be removed
+
+ Resolves bug #27579: Orthodox cross has wrong glyph
+ http://savannah.gnu.org/bugs/?27579
+ U+2626 Orthodox Cross should slope downwards from left to right.
+
+2009-11-13 Stevan_White
+ * FreeSerifBold.sfd, FreeSerifItalic.sfd:
+
+ Cyrillic: corrections to Abkhazian letters by Daniel Johnson
+
+2009-11-05 Stevan_White
+ * FreeSerif.sfd:
+
+ Cyrillic: corrections to Abkhazian letters by Daniel Johnson
+
+2009-10-16 Stevan_White
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Cyrillic: tweeks to brev, based on Unicode 5.2 samples
+
+2009-10-08 Stevan_White
+ * FreeSerif.sfd:
+
+ Currency Symbols: tidied
+
+ Number Forms: three new vulgar fractions
+
+ Currency Symbols: added "Tenga" of Kazakhstan
+
+ Latin Extended: corrected a couple of wrong bearings
+ some fiddling with Vienamese letters with hook
+
+2009-10-01 Stevan_White
+ * FreeSerif.sfd:
+
+ added missing accent
+
+2009-09-17 Stevan_White
+ * FreeSerif.sfd:
+
+ Latin kerning: gave qj positive kerning (it must happen sometimes)
+
+ Latin kerning: differentiated grave and dieresis vowels in some combos.
+ (also, adieresis hadn't been kerned at all...)
+
+ Made ref of one Sinhala letter
+
+2009-07-30 Stevan_White
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd:
+
+ kerning
+
+2009-07-26 Stevan_White
+ * FreeSansBold.sfd:
+
+ kerning
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ added some space in diaeresis
+ did some kerning
+
+ * FreeSansBold.sfd:
+
+ Revert serious mistake with previous commit: had somehow set splines
+ quadratic.
+ Here, the GaspTable from that commit is preserved,
+ However there were evidently numerous other changes that weren't
+ documented, and these are lost.
+
+2009-07-12 Stevan_White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Added GASP tables for control of hinting/smoothing (anti-alising) of
+ TrueType.
+ Now the values are better suited to the EM size of the fonts.
+ Further adjustment (based say on stem width) might still be profitable.
+
+ * FreeSans.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ More tweeks on accents, especially Maltese letters.
+
+2009-07-11 Stevan_White
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Maltese Hbar, hbar, Improved, made more consistent.
+
+ * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Latin: various corrections and tweeks for consistency in accented letters.
+
+ * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ more space to accent on lcaron
+ tightened DZ etc ligatures
+ in SerifItalic faces made references etc in Spacing Modifiers and Combining
+ further kerning
+
+ * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ kerning
+ Sans: decided dots and some other marks needed more room.
+
+2009-07-10 Stevan_White
+ * FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ IPA. Phonetics: tweeks
+
+ * FreeSerif.sfd:
+
+ Tweeked some math symbols
+
+ * FreeSans.sfd, FreeSansOblique.sfd:
+
+ Letterlike: additions
+
+ * FreeMonoOblique.sfd:
+
+ IPA
+
+ * FreeSerifBoldItalic.sfd:
+
+ Another IPA symbol
+
+ * FreeSerifBoldItalic.sfd:
+
+ IPA and Spacing Modifier Letters: added a few
+
+2009-07-09 Stevan_White
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd:
+
+ Latin: various horizontal spacing and positioning issues
+ Replaced Tz and tz ligatures with the originals of Danial Johnson.
+ (range is "Mayanist" and despite Unicode samples, current usage
+ uses normal z in glyph)
+ Put stylized Tz tz in a discretionary ligature lookup.
+
+2009-07-08 Stevan_White
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Cyrillic yi_yi Ukrainian ligature
+ Latin various pointwise cleanup, made some references, horizontal adjustments
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Cyrillic: Special ligature for Ukrainian yi_yi, also some kerning
+
+2009-07-07 Stevan_White
+ * FreeSerif.sfd:
+
+ Latin: kerning; made accents on i tighter to avoid collisions
+
+2009-07-05 Stevan_White
+ * FreeSansBold.sfd, FreeSansBoldOblique.sfd:
+
+ Made lookup tables for Dutch IJ
+
+ Re-did Dutch digraph IJ in bold faces as "broken-U", because I
+ thought it was cool and nobody was there to stop me.
+
+ * FreeSerif.sfd:
+
+ Corrected ligatures Tz tz; put them in special lookup
+ Latin Extended Additional: added medevalist letters, completing range
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Cyrillic: added yi_yi ligature for Ukrainian in roman. Not sure
+ if it's right.
+ Latin: kerning. Added longs_t ligature, and historic ligature tables
+ IPA: in bolditalic, added a letter or two
+
+ * FreeSerif.sfd:
+
+ Kerning for hbar
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd:
+
+ Kerning for Western Slavic languages
+ Added a couple of IPA to BI
+
+2009-07-04 Stevan_White
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Combined letters ae, oe, ij had incorrect horizontal spacing
+
+ * FreeMono.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Combining Diacritical Marks for Symbols: additions and fiddling.
+ Also related circles, arrows.
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Letterlike Symbols: various additions and adjustments
+ Number Forms: Completed range in serif roman. Adjusted spacing
+ of Latin numerals in serif faces.
+ Diacritics for Symbols: various additions
+ Geometric shapes: thought it best for circle to be round even in
+ oblique faces. It's a choice of course.
+ Added to several faces.
+ Made all to pass tests (except Sinhala)
+
+2009-07-02 Stevan_White
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Letterlike Symbols: more additions, adjustments
+ Also fiddled with some math symbols in Sans faces
+
+ * FreeSans.sfd, FreeSansOblique.sfd:
+
+ Letterlike Symbols; additions and adjustments
+ Note: Pango is rendering very strangely: many glyphs in the font are
+ being stolen from some other fonts instead: All the script in
+ blackletter, and some others as well. Is there a cache in the system
+ somewhere? Or what?
+
+2009-06-28 Stevan_White
+ * FreeSerif.sfd:
+
+ Modified glyph. From patch by Pavel Skrylev.
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Superscritps and Subscripts: made glyphs to complete range in all faces
+
+ * FreeSans.sfd, FreeSansOblique.sfd:
+
+ Added some combining marks for symbols and Blackboard Bold letters to
+ letterlike symbols
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Various adjustments regarding superscript and subscript characters in
+ several ranges.
+
+2009-06-27 Stevan_White
+ * FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ More fiddling with super/subscripts
+ Tidied points in Serif to make fontforge "wrong direction" complaint
+ in scaled reference go away.
+ Made some other references in basic latin ranges.
+
+ * FreeSerif.sfd:
+
+ Superscripts and subscripts (in various ranges): tried to systematize
+ sizing and vertical placement. Note: most letters are still simply
+ scaled.
+ This is practical maintenance-wise, but isn't typographically optimal.
+
+ * FreeSerif.sfd:
+
+ Cyrillic Extended A: altered mark positions
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Phonetic Extensions: various corrections and fiddling
+ Changed Blues values in FreeSerifBoldItalic
+
+2009-06-25 Stevan_White
+ * FreeSansBold.sfd, FreeSansBoldOblique.sfd:
+
+ Combining Diacritical Marks for Symbols: added to bold oblique
+ added placement mark to many
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ IPA Extensions: completed in bold and boldoblique, completing range for face.
+
+ All faces: deleted 'cvt', 'prep', 'fpgm' TrueType tables, because
+ FontForge was complaining about them (legacy hinting that could
+ interfere, possibly lower quality code, etc)
+
+ * FreeSansBold.sfd, FreeSansBoldOblique.sfd:
+
+ IPA Extensions: made several characters
+
+ * FreeSerif.sfd, FreeSerifBold.sfd:
+
+ IPA Extensions: completed range in bold
+
+2009-06-23 Stevan_White
+ * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd:
+
+ Spacing Modifiers: added a couple
+ Combining Diacriticals: brought range to par with FreeSans
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Same correction as for FreeSerif
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Corrected descender of 027f
+
+ * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd:
+
+ IPA and related: made lots of additional glyphs
+
+2009-06-22 Stevan_White
+ * FreeSerif.sfd:
+
+ Latin: further clean-up
+
+2009-06-21 Stevan_White
+ * FreeSerif.sfd:
+
+ General pointwise clean-up of Latin and Latin Extended.
+ No visible changes were intended besides changed policy on
+ horizontal placement of some horned letters
+
+ * FreeSerif.sfd:
+
+ Latin Extended-C: constructed glyphs to complete range.
+ Latin Extended-D: constructed a bunch of glyphs; some related changes elsewhere.
+
+2009-06-20 Stevan_White
+ * FreeSerif.sfd:
+
+ Latin Extended-C: added most of range
+
+ Modifier Tone Letters: added glyphs to complete range.
+ This should also complete all the IPA/Phonetic extenseions ranges.
+
+ Phonetic Extensions Supplement: added letters completing range
+ Note the superscript ones are simply scaled, so stem width is
+ not quite right...
+
+2009-06-19 Stevan_White
+ * FreeSerif.sfd:
+
+ Phonetic Extensions: made letters to complete range
+
+2009-06-18 Stevan_White
+ * FreeSans.sfd:
+
+ IPA Extensions: clean-up, fix some horizontal spacing issues
+
+ * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Some glyph problems clean-up, made to pass validate (BlueValues)
+
+2009-06-17 Stevan_White
+ * FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ IPA Extensions: Improved spacing and horizontal positioning
+
+ * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Georgian: added missing letter
+
+ * FreeSansBold.sfd, FreeSansBoldOblique.sfd:
+
+ IPA: made curls on some glyphs more distinct.
+ note horizontal placement in BO is chaotic--needs work
+
+2009-06-14 Stevan_White
+ * FreeSerif.sfd:
+
+ Musical Symbols: various experiments with lookups.
+ calt: should have allowed isolatef forms of combining marks,
+ (but can't see application support...)
+ aalt, hist: for alterntative characters
+ Added some historical glyphs
+ Math Alphanumeric: some clean-up.
+
+2009-06-11 Stevan_White
+ * FreeSerif.sfd:
+
+ Musical Symbols: various tweeks. Failed attempt to use 'isol'
+ lookup to put isolated combining marks above the baseline.
+
+ More fiddling with mark placement, strengthened ornamental endings
+
+ mkmk positioning of augmentation dot
+
+2009-06-10 Stevan_White
+ * FreeSerif.sfd:
+
+ Musical Symbols: combining marks above and below notes now working
+ somewhat
+
+2009-06-08 Stevan_White
+ * FreeSerif.sfd:
+
+ Musical Symbols: more adjustments of size and placement
+
+2009-06-07 Stevan_White
+ * FreeSerif.sfd:
+
+ Musical Symbols: mostly work on lookups. Made tablature symbols
+ thinner.
+
+2009-06-06 Stevan_White
+ * FreeSerif.sfd:
+
+ Musical Symbols: more fiddling with sizes and positions
+
+ Byzantine Musical Symbols: minor clean-ups
+
+ Fixed some ATT problems with 'kern' lookups for Cyrillic
+
+2009-06-05 Stevan_White
+ * FreeSerif.sfd:
+
+ Musical Symbols: many changes to glyph positions and shapes
+
+2009-05-28 Stevan_White
+ * FreeSerif.sfd:
+
+ Cyrillic: additions and re-naming by Pavel Skrylev.
+ * Added Cyrillic-B Ext glyphs, and Cyrillic-A Ext glyphs.
+ * Added cyr_above anchor to all cyrillic glyphs, some glyphs
+ was changed
+ * To all Cyrillic letters I've given proper names based on old
+ Slavic language which is source of all modern slavic languages.
+
+ (the naming is contentious, and there are a couple of technical
+ problems...under consideration)
+
+2009-05-27 Stevan_White
+ * FreeSerif.sfd:
+
+ Musical Symbols:
+ Scaled up accidentals a bit.
+ Reduced width of repeated figure marks
+ Reduced width of caesura even more
+ Tried to implement mark positioning...not working everywhere
+ made references
+
+2009-05-26 Stevan_White
+ * FreeSerif.sfd:
+
+ Made all letterlike glyph parts more like those from Serif and
+ Serif Italic.
+ (Except for Ped. U+1d1ae)
+
+2009-05-20 Stevan_White
+ * FreeSerif.sfd:
+
+ Corrected DPOS lookup for Music range to be in script 'musi'
+
+ Western Musical Symbols: fiddling
+ Miscellaneous Symbols: re-design of musical flat symbol.
+
+2009-05-19 Stevan_White
+ * FreeSerif.sfd:
+
+ Western Musical Symbols: Revised horizontal placement of notes.
+ Altered many combining symbols to be more like Unicode sample.
+ Corrected many symbols that should be spacing but had 0 width.
+ Raised many symbols that were far lower than in Unicode
+ samples.
+
+2009-05-18 Stevan_White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ U+0354 and U+0355 (combining left/right arrowhead below) were switched
+
+2009-05-11 Stevan_White
+ * FreeSans.sfd, FreeSerif.sfd:
+
+ Hebrew: Moved vowel below mark for esh (05e8) and dalet (05d3) as
+ recommended in bug report #25887
+ "FreeSans Hebrew most nonspacing marks are spacing"
+ https://savannah.gnu.org/bugs/?25887
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Put PS Private BlueScale back to default. (Was really experiment to
+ alleviate excessive overshoot. Didn't work and FontForge complained.)
+
+ * FreeSerif.sfd:
+
+ Geometric Shapes: made two 'bullet' shapes to be consistent with 'bullet'
+ Blues values: put Std VH W into Stem Snap values
+
+ * FreeSans.sfd:
+
+ More Geometric Shapes. also worked on character widths.
+
+2009-05-09 Stevan_White
+ * FreeSans.sfd:
+
+ More Geometric Shapes
+
+2009-05-02 Stevan_White
+ * FreeSansOblique.sfd:
+
+ Had misplaced Tifinagh range.
+
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ The rest of Tifinagh, courtesy of Daniel Johnson.
+ + a few adjustments.
+
+2009-05-01 Stevan_White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Explicitly disabled PS Private dictionary entry BlueFuzz
+ as recommended in Adobe Type 1 Font Format, sect. 5.8.
+
+ * FreeSans.sfd:
+
+ Tifinagh range, courtesy of Daniel Johnson.
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Adjusted PS Private values according to understanding of
+ Adobe Type 1 Font Format (Ch. 5, Private Dictionary)
+
+ Not completely clear on BlueScale, and StemSnap values are still a
+ mystery. (FontForge 'guess' seems to do little or nothing, and I
+ don't know where these values came from)
+
+ Original hope was to improve appearance of overshoot in Sans, but it
+ seems that my renderers ignore this information.
+
+ * tools/ranges.py:
+
+ Corrections for Georgian and Tifinagh ranges
+
+2009-04-28 Stevan_White
+ * FreeSans.sfd:
+
+ More Geometric Shapes
+
+2009-04-27 Stevan_White
+ * FreeSans.sfd:
+
+ Added U+25D0-3 (half-black circles)
+ Note the Geometric Shapes range is still in poor shape in Sans.
+
+2009-04-25 Stevan_White
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Serif: fiddled with mark positioning in Cyrillic and Glagolitic
+ Non-roman faces: Added 'mark' positioning for Cyrillic
+
+2009-04-14 Stevan_White
+ * FreeSerif.sfd:
+
+ Cyrillic Extended-B more additions. Now has all except payerok
+ punctuation and Old Abkhasian letters.
+
+2009-04-13 Stevan_White
+ * FreeSerif.sfd:
+
+ Cyrillic Extended-B a few more letters
+
+ * FreeSans.sfd, FreeSerif.sfd:
+
+ kerning: tweeks
+
+2009-04-11 Stevan_White
+ * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Georgian: additions and improvements.
+ Serif now has full compliment.
+ Note uppercase is questionable, being a simple scaling...
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ Latin Extended-D added u+a788-c
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Latin Extended-D
+ corrected slots for Mayanist letters in roman
+ added modifier letters u+a788-c
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Latin Extended-D Mayanist letters by Daniel Johnson
+
+ * tools/ranges.py:
+
+ Corrected Vai range
+
+2009-04-10 Stevan_White
+ * FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ Letterlike Symbols: additions and improvements
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ Letterlike Symbols: additions, improvements
+
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ Reconsidered numeral 1. Made angle more like other angles in font.
+
+2009-04-09 Stevan_White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ Increased angle of hook on numeral 'one', to improve distinction from
+ letter 'l' at small point sizes. (Noticed that on some systems, even
+ at 12 point the distinction had not been obvious.)
+
+2009-03-29 Stevan_White
+ * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
+
+ General Punctuation: Adjust position, shape of quotes, fiddle with
+ others.
+
+ * FreeSans.sfd:
+
+ Kerning: Had grouped letters with round bowls on left (e,c,0,d,q)
+ together, but now see the original Nimbus fonts had left bounds that
+ vary by 10 EM or more, which is quite visible. I am correcting a
+ flaw in the original font in a very difficult and complex way.
+ It would be much better to make the bounds of these similar letters
+ to be equal.
+ To do: same for punctuation, copy to other styles of Sans.
+
+ * FreeSerif.sfd:
+
+ Kerning tweeks.
+
+2009-03-22 Stevan_White
+ * FreeMono.sfd:
+
+ clean-up of some of the basic Nimbus glyphs
+
+ * FreeSans.sfd, FreeSerif.sfd:
+
+ Hebrew: more work on lookups regarding vowel marks
+
+ * FreeSans.sfd:
+
+ Hebrew: vowel mark positioning
+
+2009-03-16 Stevan_White
+ * FreeSerif.sfd, FreeSerifItalic.sfd:
+
+ re-named some lookup tables (Sinhala, Hebrew)
+
+2009-03-15 Stevan_White
+ * FreeSerif.sfd:
+
+ Georgian: point-wise cleanup
+ note: doubts about spacing and glyph bounds in capitals
+
+ * FreeSerif.sfd:
+
+ Greek Extended: corrected u+1fd3
+
+2009-03-13 Stevan_White
+ * FreeSerif.sfd:
+
+ Cyrillic (and extensions) various tweeks to old Cyrillic letters,
+ spacing.
+
+2009-03-07 Stevan_White
+ * FreeMonoBoldOblique.sfd:
+
+ correct direction braceleft
+
+ * FreeSerif.sfd:
+
+ Glagolitic: tweeks
+
+ * FreeMonoBold.sfd:
+
+ correct direction of braceleft
+
+2009-03-05 Stevan_White
+ * FreeSerif.sfd:
+
+ Glagolitic: more fiddling. Raised small letters so their tops are
+ even with the tops of the big letters, which is more in line with
+ their "hanging" nature, and with most manuscripts.
+
+2009-03-04 Stevan_White
+ * tools/ranges.py:
+
+ ranges for Sinhala
+
+2009-03-03 Stevan_White
+ * FreeSerif.sfd:
+
+ Glagolitic: More tweeks. Added Djervi (I think)
+
+2009-03-02 Stevan_White
+ * FreeSerif.sfd:
+
+ Glagolitic: tweeks
+
+2009-02-28 Stevan_White
+ * FreeSerif.sfd:
+
+ Sinhala: replaced U+0DD0-1 with ones from sinha font
+
+ Glagolitic: Additions, improvements (Note: the characters still missing
+ I simply haven't yet recognized in a manuscript or found in an on-line
+ HTML encoded text. I would like to see real ones rather than copying
+ out of the Unicode samples.)
+
+ Cyrillic Extended-B: Assembled Monograph Uk, uk. See discussion
+ http://en.wikipedia.org/wiki/Uk_(Cyrillic)
+
+2009-02-27 Stevan_White
+ * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ Made braces more distinctive.
+
+2009-02-26 Stevan_White
+ * FreeMono.sfd:
+
+ ASCII: Accentuated braces (for better readability in terminals)
+
+2009-02-24 Stevan_White
+ * FreeSerif.sfd:
+
+ Cherokee: Daniel improved U+13d2
+
+ Sinhala: Copied most Unicode glyphs directly from Yannis Haralambous
+ sinhala MetaFont files. These are: all but 0dd0 0dd1 0df4.
+ Gave Unicode characters names, based on a transliteration scheme from
+ Harshula.
+ The auxiliary Sinhala are all from the LKLUG font.
+
+2009-02-23 Stevan_White
+ * FreeSerif.sfd:
+
+ Copied glyphs from LKLUG font, as discussed with Harshula Jayasuriya.
+ http://sinhala.cvs.sourceforge.net/viewvc/sinhala/sinhala/fonts/
+
+ This font is derived from a Metafont font: This package was
+ originally developed by Yannis Haralambous (Yannis.Haralambous at
+ univ-lille1 fr), with funding from the Wellcome Institute for the
+ History of Medicine, 183 Euston Road, London NW1 2BE, England (Contact
+ person: Dominik Wujastyk (D.Wujastyk at ucl ac uk)), which is using
+ the font in its Catalogue of Sinhala Manuscript. The original package
+ was available by ftp at ftp.bcc.ac.uk in:
+ /pub/users/ucgadkw/indology/software/sinhala1-TeX.zip
+
+ The hope is to eventually pull glyphs directly from the original MF
+ files.
+
+2009-02-21 Stevan_White
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd:
+
+ tidying previous commits
+
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Serif: Revised letter spacing in Armenian.
+ Serif roman: Added initial version of Glagolitic (by me)
+
+2009-02-18 Stevan_White
+ * FreeSerif.sfd:
+
+ Armenian: spacing changes
+ Sinhala: deleted range, for usual reasons:
+ It doesn't even contain the full set of Unicode letters, and Sinhala
+ requires auxiliary characters and lookup tables for proper
+ representation.
+ (Found what I think are the originals at
+ http://www.mettanet.org/fonts/ )
+
+2009-02-12 Stevan_White
+ * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ SerifBoldItalic - Armenian oblique from Daniel Johnson's bold version
+ Added ligatures (by Daniel) and lookup tables.
+
+ * FreeSerifItalic.sfd:
+
+ Armenian: Made oblique version of Daniel Johnson's range
+
+ * FreeSerifBold.sfd:
+
+ Armenian by Daniel Johnson
+
+ * FreeSerif.sfd:
+
+ Improvements of a couple of Armenian characters, from Daniel Johnson.
+
+ * tools-- GenerateOpenType, GenerateTrueType, checkGlyphNumbers.py, findBackLayers.py, isMonoMono.py, range_report.py, ranges.py, validate.py:
+
+ Changed /usr/local/bin/fontforge to /usr/bin/fontforge
+ (to work with the update-alternatives mechanism, whereby a link is made
+ /usr/bin/fontforge -> /etc/alternatives/fontforge -> preferred binary )
+
+2009-02-07 Stevan_White
+ * FreeSerifItalic.sfd:
+
+ Latin: Kerning. Fixed some missing extrema
+ Made some more delicate italic IPA letters
+
+2009-02-06 Stevan_White
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd:
+
+ Latin: kerning
+
+ * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd:
+
+ Adjusted ff etc ligatures in Italic
+
+2009-02-05 Stevan_White
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Thai sample text (means something like
+ Mr Sangkapan who sells bottles was picked up by the police because he
+ stole the wash of ms. .....)
+
+2009-02-04 Stevan_White
+ * FreeSans.sfd:
+
+ Vai range, by Daniel Johnson
+
+ * FreeSerifBoldItalic.sfd:
+
+ Latin: kerning
+
+2009-02-03 Stevan_White
+ * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd:
+
+ Latin: kerning
+
+2009-01-26 Stevan_White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd:
+
+ Made nu distinct from v.
+ Remedies bug #25376: https://savannah.gnu.org/bugs/?25376
+ greek letter 'nu' [U+03bd] same as latin 'v' [U+0076] in FreeMono
+
+2009-01-22 Stevan_White
+ * FreeSans.sfd:
+
+ Kerning. Need to copy to other faces
+
+ Arabic ligatures: turned on "ignore combining marks" on advice of
+ Khaled Hosny.
+
+2009-01-20 Stevan_White
+ * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Drew U+1e9C-F in Latin Extended Additional (including capital ess-zet)
+
+2009-01-19 Stevan_White
+ * FreeMono.sfd:
+
+ Update of Kayah Li from Daniel Johnson
+
+2009-01-18 Stevan_White
+ * FreeSerif.sfd:
+
+ Latin: kerning
+
+ Coptic: Laula to be same height as Phi Psi (higher than other letters).
+ Dei and dei also to be higher letters, adjusted widths too.
+
+ Unified Canadian Aboriginal Syllabics: moved the non-Unicode letter
+ part glyphs ucas.ring ucas.horizline ucas.shortvert ucas.righttack
+ ucas.lefttack to the Private Use area
+ 59664-59668
+ Technique was to edit the SFD file directly: It seems the encoding
+ slot for the glyph is the first field of the "Encoding:" line for
+ the character.
+
+ * FreeMono.sfd:
+
+ Cherokee: improvements from D. Johnson.
+
+2009-01-17 Stevan_White
+ * FreeSerif.sfd:
+
+ Cyrillic: Kerning.
+
+ Re-linked Ezh/Yogh and re-made reversed Ezh.
+
+2009-01-16 Stevan_White
+ * FreeSerif.sfd:
+
+ Fiddled with Coptic glyphs: Longer tail on Shei, less droopy Alfa.
+ Made Armenian Aiw to be a link to Phi (on Daniel Johnson's advice )
+
+ * FreeMono.sfd:
+
+ Kayah Li by Daniel Johnson
+
+ Cherokee, by Daniel Johnson
+
+ Made references of some Armenian punctuation,
+ Made primereversed to be really the reverse of prime.
+
+ Removed hints
+
+ * tools/ranges.py:
+
+ corrected Unified Canadian Aboriginal Syllabics
+
+2009-01-13 Stevan_White
+ * FreeSans.sfd:
+
+ named some Armenian letters
+
+ * FreeSerif.sfd:
+
+ Armenian range by Daniel Johnson, with ligatures.
+
+2009-01-12 Stevan_White
+ * FreeSerif.sfd:
+
+ Coptic: Raised top of laula above common top, as it appears in most
+ other fonts. Makes it easier to distinguish from alfa.
+ A little more space around Iauda and iauda.
+ Kerned Dei.
+
+2009-01-11 Stevan_White
+ * FreeSerif.sfd:
+
+ Coptic: Made capital Alpha is distinct in printed form.
+ Made more angular vida with flattened top and bottom.
+ Made small hori more curvy.
+ More fiddling with Hori, made Kapa much wider.
+
+ Reduced width of small letter straight stems to match small letters
+ in Latin.
+ Kerning for capitals.
+
+ Revised:
+ Added a few dialectic letters and kai symbol
+ Removed many "ear" serifs, preferring a slashing continuation of
+ long decenders and diagonals as in some manuscripts
+ Made Kai and kai not to go below baseline
+ Made Psi a little broader
+ Made small khei distinct from cap,
+ Revised Hori and hori.
+ Some of this toward https://savannah.gnu.org/bugs/?25289
+
+ Greek: Made archaic letters u+0370-3 (understand are used for
+ old numbering)
+
+2009-01-08 Stevan_White
+ * FreeSerif.sfd:
+
+ Various alterations to Coptic: Re-worked K and M, added kern table.
+
+2009-01-07 Stevan_White
+ * FreeSans.sfd:
+
+ Daniel Johnson's fix of TT reference transformation bug in
+ Unified Canadian Aboriginal Syllabics,
+
+2009-01-06 Stevan_White
+ * FreeSans.sfd:
+
+ Unified Canadian Aboriginal Syllabics range, courtesy of Daniel Johnson.
+
+2009-01-04 Stevan_White
+ * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Added 2009 to copyright dates
+
+ * FreeSans.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
+
+ Added some TrueType names
+
2009-01-04 Stevan_White
* FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
@@ -15,7 +1733,7 @@ $Id$
2009-01-01 Stevan_White
* FreeSerif.sfd:
- Removde Glagolitic range, since have not (yet) received OK from author.
+ Removed Glagolitic range, since have not (yet) received OK from author.
Added some TrueType Names
@@ -51,6 +1769,12 @@ $Id$
Extensible bracket characters didn't exactly line up. Fixed.
Mono: a couple of glyphs had gotten out of their bounding boxes again.
+ * tools/isMonoMono.py:
+
+ 900 EM -> 800
+
+ check that glyphs lie in vertical bounding boxes
+
2008-12-26 Stevan_White
* FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
@@ -87,6 +1811,10 @@ $Id$
Handles one common case: short letter followed by a tall one with
an overhang to the left.
+ * tools/ranges.py:
+
+ some changes to explanatory text
+
2008-12-25 Stevan_White
* FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd:
@@ -283,6 +2011,11 @@ $Id$
Much fiddling with kerning, tables, and generating fonts whose kerning
tables work with OpenOffice.
+ * tools/GenerateTrueType:
+
+ Made to include old-style kerning
+ Converted to Python
+
2008-11-24 Stevan_White
* FreeSerif.sfd:
@@ -313,6 +2046,10 @@ $Id$
Finished with Hebrew Pointed letters in all faces.
+ * tools/range_report:
+
+ preferred to keep the file ending
+
2008-11-22 Stevan_White
* FreeSans.sfd:
@@ -761,6 +2498,10 @@ $Id$
Made a few repeated glyphs into references in Musical Symbols
+ * tools/ranges.py, tools/validate.py:
+
+ tweeked some ranges, format of output
+
2008-10-19 Stevan_White
* FreeSerif.sfd:
@@ -835,6 +2576,13 @@ $Id$
and IPA and Phonetic Extensions
2008-10-16 Stevan_White
+ * tools/ranges.py:
+
+ un-grayed totals rows
+
+ Fiddled Cyrillic
+ made output prettier
+
* FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd:
Added some Superscripts and Subscripts
@@ -1015,6 +2763,12 @@ $Id$
Besides scaling and converting to cubic, performed much clean-up of
glyphs, added an r2 character, and re-named a bunch of characters.
+2008-09-23 Stevan_White
+ * tools/ranges.py:
+
+ Corrections and additions to several ranges,
+ put extra row in table with character totals
+
2008-09-22 Stevan_White
* FreeSerif.sfd:
@@ -1041,6 +2795,10 @@ $Id$
Built some Phonetic Extensions letters, those with middle tilde
+ * tools/GenerateOpenType:
+
+ Replaced bash version with Python
+
2008-09-21 Stevan_White
* FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd:
@@ -1096,6 +2854,11 @@ $Id$
Made Mahjong tiles to take up less space using references
Cleaned up several validation problems
+2008-09-20 Stevan_White
+ * tools/checkGlyphNumbers.py:
+
+ included other Private Use Ranges
+
2008-09-19 Stevan_White
* FreeSerif.sfd:
@@ -1128,6 +2891,34 @@ $Id$
Added Domino Tiles. Domino outline is copied from George Douros'
Unicode Symbols, but the rest I preferred to do with references.
+2008-09-19 Stevan_White
+ * tools/ranges.py:
+
+ corrected and simplified calculation of whether OS/2 bit is set.
+ Now works mostly perfectly, except for some high Unicode ranges...
+
+ * tools/GenerateOpenType:
+
+ Made to output old-style kerning tables for Windows
+ (FontForge complains though)
+
+ * tools/GenerateTrueType:
+
+ Made to hint before instructing: FontForge bases TT instructions on hints
+ although hints are not put into TrueType fonts.
+
+ * tools/hex_range.py:
+
+ cosmetic tweek
+
+ * tools/isMonoMono.py:
+
+ re-worked to take a list of files as input
+
+ * tools/ranges.py:
+
+ re-structured code and corrected a few ranges
+
2008-09-18 Stevan_White
* FreeSerif.sfd:
@@ -1289,6 +3080,10 @@ $Id$
Fixed missing extrema in TrueType versions
+ * isMonoMono.py, validate.py:
+
+ restructured validation to look in a directory
+
2008-08-15 Stevan_White
* FreeSans.sfd:
@@ -1355,6 +3150,11 @@ $Id$
Reverse a mistake from last commit: somehow this file was converted to
quadratic, or something.
+ * tools/GenerateTrueType:
+
+ For TrueType, one puts in Instructions, not Hints.
+ This vastly improves look of TrueType fonts in Windows.
+
2008-08-11 Stevan_White
* FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd:
diff --git a/lib/tcpdf/fonts/freefont-20090104/INSTALL b/lib/tcpdf/fonts/freefont-20100919/INSTALL
similarity index 97%
rename from lib/tcpdf/fonts/freefont-20090104/INSTALL
rename to lib/tcpdf/fonts/freefont-20100919/INSTALL
index bad7da09b18..fbbbe804b5d 100644
--- a/lib/tcpdf/fonts/freefont-20090104/INSTALL
+++ b/lib/tcpdf/fonts/freefont-20100919/INSTALL
@@ -83,4 +83,4 @@ depending on whether they should be available to all users on your system
or just to yourself.
--------------------------------------------------------------------------
-$Id$
+$Id: INSTALL,v 1.7 2008/12/26 12:33:31 Stevan_White Exp $
diff --git a/lib/tcpdf/fonts/freefont-20090104/README b/lib/tcpdf/fonts/freefont-20100919/README
similarity index 97%
rename from lib/tcpdf/fonts/freefont-20090104/README
rename to lib/tcpdf/fonts/freefont-20100919/README
index b8865a25da2..8c970cbcf4c 100644
--- a/lib/tcpdf/fonts/freefont-20090104/README
+++ b/lib/tcpdf/fonts/freefont-20100919/README
@@ -63,7 +63,7 @@ Licensing
Free UCS scalable fonts is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as published
-by the Free Software Foundation; either version 2 of the License, or
+by the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
The fonts are distributed in the hope that they will be useful, but
@@ -105,4 +105,4 @@ Primoz Peterlin,
Steve White
Free UCS scalable fonts: http://savannah.gnu.org/projects/freefont/
-$Id$
+$Id: README,v 1.7 2009/01/13 08:43:23 Stevan_White Exp $
diff --git a/lib/tcpdf/fonts/freemono.ctg.z b/lib/tcpdf/fonts/freemono.ctg.z
index 93b7b3cf4ce..a6ec150303c 100644
Binary files a/lib/tcpdf/fonts/freemono.ctg.z and b/lib/tcpdf/fonts/freemono.ctg.z differ
diff --git a/lib/tcpdf/fonts/freemono.php b/lib/tcpdf/fonts/freemono.php
index 123b3bf26bf..fe446e75187 100644
--- a/lib/tcpdf/fonts/freemono.php
+++ b/lib/tcpdf/fonts/freemono.php
@@ -1,348 +1,15 @@
800,'Descent'=>-200,'CapHeight'=>40,'Flags'=>32,'FontBBox'=>'[-793 -200 699 800]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600);
$up=-125;
$ut=50;
$dw=600;
-$cw=array(
-32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,
-42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,
-52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,
-62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,
-72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,
-82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,
-92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,
-102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,
-112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,
-122=>600,123=>600,124=>600,125=>600,126=>600,8364=>600,8218=>600,402=>600,8222=>600,8230=>600,
-8224=>600,8225=>600,710=>600,8240=>600,352=>600,8249=>600,338=>600,381=>600,8216=>600,8217=>600,
-8220=>600,8221=>600,8226=>600,8211=>600,8212=>600,732=>600,8482=>600,353=>600,8250=>600,339=>600,
-382=>600,376=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,
-168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,
-178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,
-188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,
-198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,
-208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,
-218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,
-228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,
-238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,
-248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,257=>600,
-258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,267=>600,
-268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,277=>600,
-278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,287=>600,
-288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,297=>600,
-298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,307=>600,
-308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,317=>600,
-318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,327=>600,
-328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,337=>600,
-340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,349=>600,
-350=>600,351=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,361=>600,
-362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,371=>600,
-372=>600,373=>600,374=>600,375=>600,377=>600,378=>600,379=>600,380=>600,383=>600,384=>600,
-385=>600,386=>600,387=>600,388=>600,389=>600,390=>600,391=>600,392=>600,393=>600,394=>600,
-395=>600,396=>600,397=>600,398=>600,399=>600,400=>600,401=>600,403=>600,404=>600,405=>600,
-406=>600,407=>600,408=>600,409=>600,410=>600,411=>600,412=>600,413=>600,414=>600,415=>600,
-416=>600,417=>600,418=>600,419=>600,420=>600,421=>600,422=>600,423=>600,424=>600,425=>600,
-426=>600,427=>600,428=>600,429=>600,430=>600,431=>600,432=>600,433=>600,434=>600,435=>600,
-436=>600,437=>600,438=>600,439=>600,440=>600,441=>600,442=>600,443=>600,444=>600,445=>600,
-446=>600,447=>600,448=>600,449=>600,450=>600,451=>600,452=>600,453=>600,454=>600,455=>600,
-456=>600,457=>600,458=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,465=>600,
-466=>600,467=>600,468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,475=>600,
-476=>600,477=>600,478=>600,479=>600,480=>600,481=>600,482=>600,483=>600,484=>600,485=>600,
-486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,492=>600,493=>600,494=>600,495=>600,
-496=>600,497=>600,498=>600,499=>600,500=>600,501=>600,502=>600,503=>600,504=>600,505=>600,
-506=>600,507=>600,508=>600,509=>600,510=>600,511=>600,512=>600,513=>600,514=>600,515=>600,
-516=>600,517=>600,518=>600,519=>600,520=>600,521=>600,522=>600,523=>600,524=>600,525=>600,
-526=>600,527=>600,528=>600,529=>600,530=>600,531=>600,532=>600,533=>600,534=>600,535=>600,
-536=>600,537=>600,538=>600,539=>600,540=>600,541=>600,542=>600,543=>600,548=>600,549=>600,
-550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,556=>600,557=>600,558=>600,559=>600,
-560=>600,561=>600,562=>600,563=>600,567=>600,592=>600,593=>600,594=>600,595=>600,596=>600,
-597=>600,598=>600,599=>600,600=>600,601=>600,602=>600,603=>600,604=>600,605=>600,606=>600,
-607=>600,608=>600,609=>600,610=>600,611=>600,612=>600,613=>600,614=>600,615=>600,616=>600,
-617=>600,618=>600,619=>600,620=>600,621=>600,622=>600,623=>600,624=>600,625=>600,626=>600,
-627=>600,628=>600,629=>600,630=>600,631=>600,632=>600,633=>600,634=>600,635=>600,636=>600,
-637=>600,638=>600,639=>600,640=>600,641=>600,642=>600,643=>600,644=>600,645=>600,646=>600,
-647=>600,648=>600,649=>600,650=>600,651=>600,652=>600,653=>600,654=>600,655=>600,656=>600,
-657=>600,658=>600,659=>600,660=>600,661=>600,662=>600,663=>600,664=>600,665=>600,666=>600,
-667=>600,668=>600,669=>600,670=>600,671=>600,672=>600,673=>600,674=>600,675=>600,676=>600,
-677=>600,678=>600,679=>600,680=>600,681=>600,682=>600,683=>600,684=>600,685=>600,686=>600,
-687=>600,688=>600,689=>600,690=>600,691=>600,692=>600,693=>600,694=>600,695=>600,696=>600,
-697=>600,698=>600,699=>600,700=>600,701=>600,702=>600,703=>600,704=>600,705=>600,706=>600,
-707=>600,708=>600,709=>600,711=>600,712=>600,713=>600,714=>600,715=>600,716=>600,717=>600,
-718=>600,719=>600,720=>600,721=>600,722=>600,723=>600,724=>600,725=>600,726=>600,727=>600,
-728=>600,729=>600,730=>600,731=>600,733=>600,734=>600,735=>600,736=>600,737=>600,738=>600,
-739=>600,740=>600,741=>600,742=>600,743=>600,744=>600,745=>600,746=>600,747=>600,748=>600,
-749=>600,750=>600,751=>600,752=>600,753=>600,754=>600,755=>600,756=>600,757=>600,758=>600,
-759=>600,760=>600,761=>600,762=>600,763=>600,764=>600,765=>600,766=>600,767=>600,768=>0,
-769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,
-779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,
-789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,
-799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,
-809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,
-819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,
-829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,
-839=>0,840=>0,841=>0,843=>0,844=>0,845=>0,848=>0,849=>0,850=>0,851=>0,
-852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,884=>600,885=>600,890=>600,
-894=>600,900=>600,901=>600,902=>600,903=>600,904=>600,905=>600,906=>600,908=>600,910=>600,
-911=>600,912=>600,913=>600,914=>600,915=>600,916=>600,917=>600,918=>600,919=>600,920=>600,
-921=>600,922=>600,923=>600,924=>600,925=>600,926=>600,927=>600,928=>600,929=>600,931=>600,
-932=>600,933=>600,934=>600,935=>600,936=>600,937=>600,938=>600,939=>600,940=>600,941=>600,
-942=>600,943=>600,944=>600,945=>600,946=>600,947=>600,948=>600,949=>600,950=>600,951=>600,
-952=>600,953=>600,954=>600,955=>600,956=>600,957=>600,958=>600,959=>600,960=>600,961=>600,
-962=>600,963=>600,964=>600,965=>600,966=>600,967=>600,968=>600,969=>600,970=>600,971=>600,
-972=>600,973=>600,974=>600,976=>600,977=>600,978=>600,979=>600,980=>600,981=>600,982=>600,
-986=>600,987=>600,988=>600,1008=>600,1009=>600,1012=>600,1013=>600,1024=>600,1025=>600,1026=>600,
-1027=>600,1028=>600,1029=>600,1030=>600,1031=>600,1032=>600,1033=>600,1034=>600,1035=>600,1036=>600,
-1037=>600,1038=>600,1039=>600,1040=>600,1041=>600,1042=>600,1043=>600,1044=>600,1045=>600,1046=>600,
-1047=>600,1048=>600,1049=>600,1050=>600,1051=>600,1052=>600,1053=>600,1054=>600,1055=>600,1056=>600,
-1057=>600,1058=>600,1059=>600,1060=>600,1061=>600,1062=>600,1063=>600,1064=>600,1065=>600,1066=>600,
-1067=>600,1068=>600,1069=>600,1070=>600,1071=>600,1072=>600,1073=>600,1074=>600,1075=>600,1076=>600,
-1077=>600,1078=>600,1079=>600,1080=>600,1081=>600,1082=>600,1083=>600,1084=>600,1085=>600,1086=>600,
-1087=>600,1088=>600,1089=>600,1090=>600,1091=>600,1092=>600,1093=>600,1094=>600,1095=>600,1096=>600,
-1097=>600,1098=>600,1099=>600,1100=>600,1101=>600,1102=>600,1103=>600,1104=>600,1105=>600,1106=>600,
-1107=>600,1108=>600,1109=>600,1110=>600,1111=>600,1112=>600,1113=>600,1114=>600,1115=>600,1116=>600,
-1117=>600,1118=>600,1119=>600,1120=>600,1121=>600,1122=>600,1123=>600,1124=>600,1126=>600,1127=>600,
-1128=>600,1130=>600,1131=>600,1132=>600,1133=>600,1136=>600,1137=>600,1138=>600,1140=>600,1141=>600,
-1142=>600,1143=>600,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1162=>600,1163=>600,1164=>600,
-1165=>600,1166=>600,1167=>600,1168=>600,1169=>600,1170=>600,1171=>600,1172=>600,1173=>600,1174=>600,
-1175=>600,1176=>600,1177=>600,1178=>600,1179=>600,1180=>600,1181=>600,1182=>600,1183=>600,1184=>600,
-1185=>600,1186=>600,1187=>600,1188=>600,1189=>600,1190=>600,1191=>600,1192=>600,1193=>600,1194=>600,
-1195=>600,1196=>600,1197=>600,1198=>600,1199=>600,1200=>600,1201=>600,1202=>600,1203=>600,1204=>600,
-1205=>600,1206=>600,1207=>600,1208=>600,1209=>600,1210=>600,1211=>600,1212=>600,1213=>600,1214=>600,
-1215=>600,1216=>600,1217=>600,1218=>600,1219=>600,1220=>600,1221=>600,1222=>600,1223=>600,1224=>600,
-1225=>600,1226=>600,1227=>600,1228=>600,1229=>600,1230=>600,1231=>600,1232=>600,1233=>600,1234=>600,
-1235=>600,1236=>600,1237=>600,1238=>600,1239=>600,1240=>600,1241=>600,1242=>600,1243=>600,1244=>600,
-1245=>600,1246=>600,1247=>600,1248=>600,1249=>600,1250=>600,1251=>600,1252=>600,1253=>600,1254=>600,
-1255=>600,1256=>600,1257=>600,1258=>600,1259=>600,1260=>600,1261=>600,1262=>600,1263=>600,1264=>600,
-1265=>600,1266=>600,1267=>600,1268=>600,1269=>600,1270=>600,1271=>600,1272=>600,1273=>600,1296=>600,
-1297=>600,1298=>600,1299=>600,1306=>600,1307=>600,1308=>600,1309=>600,1310=>600,1311=>600,1329=>600,
-1330=>600,1331=>600,1332=>600,1333=>600,1334=>600,1335=>600,1336=>600,1337=>600,1338=>600,1339=>600,
-1340=>600,1341=>600,1342=>600,1343=>600,1344=>600,1345=>600,1346=>600,1347=>600,1348=>600,1349=>600,
-1350=>600,1351=>600,1352=>600,1353=>600,1354=>600,1355=>600,1356=>600,1357=>600,1358=>600,1359=>600,
-1360=>600,1361=>600,1362=>600,1363=>600,1364=>600,1365=>600,1366=>600,1369=>600,1370=>600,1371=>600,
-1372=>600,1373=>600,1374=>600,1375=>600,1377=>600,1378=>600,1379=>600,1380=>600,1381=>600,1382=>600,
-1383=>600,1384=>600,1385=>600,1386=>600,1387=>600,1388=>600,1389=>600,1390=>600,1391=>600,1392=>600,
-1393=>600,1394=>600,1395=>600,1396=>600,1397=>600,1398=>600,1399=>600,1400=>600,1401=>600,1402=>600,
-1403=>600,1404=>600,1405=>600,1406=>600,1407=>600,1408=>600,1409=>600,1410=>600,1411=>600,1412=>600,
-1413=>600,1414=>600,1415=>600,1417=>600,1418=>600,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,
-1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0,1470=>600,1471=>0,
-1472=>600,1473=>0,1474=>0,1475=>600,1476=>0,1488=>600,1489=>600,1490=>600,1491=>600,1492=>600,
-1493=>600,1494=>600,1495=>600,1496=>600,1497=>600,1498=>600,1499=>600,1500=>600,1501=>600,1502=>600,
-1503=>600,1504=>600,1505=>600,1506=>600,1507=>600,1508=>600,1509=>600,1510=>600,1511=>600,1512=>600,
-1513=>600,1514=>600,1520=>600,1521=>600,1522=>600,1523=>600,1524=>600,4304=>600,4305=>600,4306=>600,
-4307=>600,4308=>600,4309=>600,4310=>600,4311=>600,4312=>600,4313=>600,4314=>600,4315=>600,4316=>600,
-4317=>600,4318=>600,4319=>600,4320=>600,4321=>600,4322=>600,4323=>600,4324=>600,4325=>600,4326=>600,
-4327=>600,4328=>600,4329=>600,4330=>600,4331=>600,4332=>600,4333=>600,4334=>600,4335=>600,4336=>600,
-4337=>600,4338=>600,4339=>600,4340=>600,4341=>600,4345=>600,4347=>600,5792=>600,5793=>600,5794=>600,
-5795=>600,5796=>600,5797=>600,5798=>600,5799=>600,5800=>600,5801=>600,5802=>600,5803=>600,5804=>600,
-5805=>600,5806=>600,5807=>600,5808=>600,5809=>600,5810=>600,5811=>600,5812=>600,5813=>600,5814=>600,
-5815=>600,5816=>600,5817=>600,5818=>600,5819=>600,5820=>600,5821=>600,5822=>600,5823=>600,5824=>600,
-5825=>600,5826=>600,5827=>600,5828=>600,5829=>600,5830=>600,5831=>600,5832=>600,5833=>600,5834=>600,
-5835=>600,5836=>600,5837=>600,5838=>600,5839=>600,5840=>600,5841=>600,5842=>600,5843=>600,5844=>600,
-5845=>600,5846=>600,5847=>600,5848=>600,5849=>600,5850=>600,5851=>600,5852=>600,5853=>600,5854=>600,
-5855=>600,5856=>600,5857=>600,5858=>600,5859=>600,5860=>600,5861=>600,5862=>600,5863=>600,5864=>600,
-5865=>600,5866=>600,5867=>600,5868=>600,5869=>600,5870=>600,5871=>600,5872=>600,7680=>600,7681=>600,
-7682=>600,7683=>600,7684=>600,7685=>600,7686=>600,7687=>600,7688=>600,7689=>600,7690=>600,7691=>600,
-7692=>600,7693=>600,7694=>600,7695=>600,7696=>600,7697=>600,7698=>600,7699=>600,7700=>600,7701=>600,
-7702=>600,7703=>600,7704=>600,7705=>600,7706=>600,7707=>600,7708=>600,7709=>600,7710=>600,7711=>600,
-7712=>600,7713=>600,7714=>600,7715=>600,7716=>600,7717=>600,7718=>600,7719=>600,7720=>600,7721=>600,
-7722=>600,7723=>600,7724=>600,7725=>600,7726=>600,7727=>600,7728=>600,7729=>600,7730=>600,7731=>600,
-7732=>600,7733=>600,7734=>600,7735=>600,7736=>600,7737=>600,7738=>600,7739=>600,7740=>600,7741=>600,
-7742=>600,7743=>600,7744=>600,7745=>600,7746=>600,7747=>600,7748=>600,7749=>600,7750=>600,7751=>600,
-7752=>600,7753=>600,7754=>600,7755=>600,7756=>600,7757=>600,7758=>600,7759=>600,7760=>600,7761=>600,
-7762=>600,7763=>600,7764=>600,7765=>600,7766=>600,7767=>600,7768=>600,7769=>600,7770=>600,7771=>600,
-7772=>600,7773=>600,7774=>600,7775=>600,7776=>600,7777=>600,7778=>600,7779=>600,7780=>600,7781=>600,
-7782=>600,7783=>600,7784=>600,7785=>600,7786=>600,7787=>600,7788=>600,7789=>600,7790=>600,7791=>600,
-7792=>600,7793=>600,7794=>600,7795=>600,7796=>600,7797=>600,7798=>600,7799=>600,7800=>600,7801=>600,
-7802=>600,7803=>600,7804=>600,7805=>600,7806=>600,7807=>600,7808=>600,7809=>600,7810=>600,7811=>600,
-7812=>600,7813=>600,7814=>600,7815=>600,7816=>600,7817=>600,7818=>600,7819=>600,7820=>600,7821=>600,
-7822=>600,7823=>600,7824=>600,7825=>600,7826=>600,7827=>600,7828=>600,7829=>600,7830=>600,7831=>600,
-7832=>600,7833=>600,7834=>600,7835=>600,7840=>600,7841=>600,7842=>600,7843=>600,7844=>600,7845=>600,
-7846=>600,7847=>600,7848=>600,7849=>600,7850=>600,7851=>600,7852=>600,7853=>600,7854=>600,7855=>600,
-7856=>600,7857=>600,7858=>600,7859=>600,7860=>600,7861=>600,7862=>600,7863=>600,7864=>600,7865=>600,
-7866=>600,7867=>600,7868=>600,7869=>600,7870=>600,7871=>600,7872=>600,7873=>600,7874=>600,7875=>600,
-7876=>600,7877=>600,7878=>600,7879=>600,7880=>600,7881=>600,7882=>600,7883=>600,7884=>600,7885=>600,
-7886=>600,7887=>600,7888=>600,7889=>600,7890=>600,7891=>600,7892=>600,7893=>600,7894=>600,7895=>600,
-7896=>600,7897=>600,7898=>600,7899=>600,7900=>600,7901=>600,7902=>600,7903=>600,7904=>600,7905=>600,
-7906=>600,7907=>600,7908=>600,7909=>600,7910=>600,7911=>600,7912=>600,7913=>600,7914=>600,7915=>600,
-7916=>600,7917=>600,7918=>600,7919=>600,7920=>600,7921=>600,7922=>600,7923=>600,7924=>600,7925=>600,
-7926=>600,7927=>600,7928=>600,7929=>600,7936=>600,7937=>600,7938=>600,7939=>600,7940=>600,7941=>600,
-7942=>600,7943=>600,7944=>600,7945=>600,7946=>600,7947=>600,7948=>600,7949=>600,7950=>600,7951=>600,
-7952=>600,7953=>600,7954=>600,7955=>600,7956=>600,7957=>600,7960=>600,7961=>600,7962=>600,7963=>600,
-7964=>600,7965=>600,7968=>600,7969=>600,7970=>600,7971=>600,7972=>600,7973=>600,7974=>600,7975=>600,
-7976=>600,7977=>600,7978=>600,7979=>600,7980=>600,7981=>600,7982=>600,7983=>600,7984=>600,7985=>600,
-7986=>600,7987=>600,7988=>600,7989=>600,7990=>600,7991=>600,7992=>600,7993=>600,7994=>600,7995=>600,
-7996=>600,7997=>600,7998=>600,7999=>600,8000=>600,8001=>600,8002=>600,8003=>600,8004=>600,8005=>600,
-8008=>600,8009=>600,8010=>600,8011=>600,8012=>600,8013=>600,8016=>600,8017=>600,8018=>600,8019=>600,
-8020=>600,8021=>600,8022=>600,8023=>600,8025=>600,8027=>600,8029=>600,8031=>600,8032=>600,8033=>600,
-8034=>600,8035=>600,8036=>600,8037=>600,8038=>600,8039=>600,8040=>600,8041=>600,8042=>600,8043=>600,
-8044=>600,8045=>600,8046=>600,8047=>600,8048=>600,8049=>600,8050=>600,8051=>600,8052=>600,8053=>600,
-8054=>600,8055=>600,8056=>600,8057=>600,8058=>600,8059=>600,8060=>600,8061=>600,8064=>600,8065=>600,
-8066=>600,8067=>600,8068=>600,8069=>600,8070=>600,8071=>600,8072=>600,8073=>600,8074=>600,8075=>600,
-8076=>600,8077=>600,8078=>600,8079=>600,8080=>600,8081=>600,8082=>600,8083=>600,8084=>600,8085=>600,
-8086=>600,8087=>600,8088=>600,8089=>600,8090=>600,8091=>600,8092=>600,8093=>600,8094=>600,8095=>600,
-8096=>600,8097=>600,8098=>600,8099=>600,8100=>600,8101=>600,8102=>600,8103=>600,8104=>600,8105=>600,
-8106=>600,8107=>600,8108=>600,8109=>600,8110=>600,8111=>600,8112=>600,8113=>600,8114=>600,8115=>600,
-8116=>600,8118=>600,8119=>600,8120=>600,8121=>600,8122=>600,8123=>600,8124=>600,8125=>600,8126=>600,
-8127=>600,8128=>600,8129=>600,8130=>600,8131=>600,8132=>600,8134=>600,8135=>600,8136=>600,8137=>600,
-8138=>600,8139=>600,8140=>600,8141=>600,8142=>600,8143=>600,8144=>600,8145=>600,8146=>600,8147=>600,
-8150=>600,8151=>600,8152=>600,8153=>600,8154=>600,8155=>600,8157=>600,8158=>600,8159=>600,8160=>600,
-8161=>600,8162=>600,8163=>600,8164=>600,8165=>600,8166=>600,8167=>600,8168=>600,8169=>600,8170=>600,
-8171=>600,8172=>600,8173=>600,8174=>600,8175=>600,8178=>600,8179=>600,8180=>600,8182=>600,8183=>600,
-8184=>600,8185=>600,8186=>600,8187=>600,8188=>600,8189=>600,8190=>600,8192=>600,8193=>600,8194=>600,
-8195=>600,8196=>600,8197=>600,8198=>600,8199=>600,8200=>600,8201=>600,8202=>600,8203=>600,8204=>0,
-8205=>0,8206=>0,8207=>0,8208=>600,8209=>600,8210=>600,8213=>600,8214=>600,8215=>600,8219=>600,
-8223=>600,8227=>600,8228=>600,8229=>600,8231=>600,8232=>600,8233=>600,8234=>600,8235=>600,8236=>600,
-8237=>600,8238=>600,8239=>600,8241=>600,8242=>600,8243=>600,8244=>600,8245=>600,8246=>600,8247=>600,
-8248=>600,8251=>600,8252=>600,8253=>600,8254=>600,8255=>600,8256=>600,8257=>600,8258=>600,8259=>600,
-8260=>600,8261=>600,8262=>600,8263=>600,8264=>600,8265=>600,8266=>600,8267=>600,8268=>600,8269=>600,
-8270=>600,8271=>600,8272=>600,8273=>600,8274=>600,8275=>600,8276=>600,8277=>600,8278=>600,8279=>600,
-8280=>600,8281=>600,8282=>600,8283=>600,8284=>600,8285=>600,8286=>600,8287=>600,8288=>600,8289=>600,
-8290=>600,8291=>600,8292=>600,8298=>600,8299=>600,8300=>600,8301=>600,8302=>600,8303=>600,8304=>600,
-8305=>600,8308=>600,8309=>600,8310=>600,8311=>600,8312=>600,8313=>600,8314=>600,8315=>600,8316=>600,
-8317=>600,8318=>600,8319=>600,8320=>600,8321=>600,8322=>600,8323=>600,8324=>600,8325=>600,8326=>600,
-8327=>600,8328=>600,8329=>600,8330=>600,8331=>600,8332=>600,8333=>600,8334=>600,8336=>600,8337=>600,
-8338=>600,8339=>600,8340=>600,8353=>600,8354=>600,8355=>600,8356=>600,8357=>600,8358=>600,8359=>600,
-8360=>600,8361=>600,8362=>600,8363=>600,8365=>600,8366=>600,8368=>600,8369=>600,8370=>600,8371=>600,
-8372=>600,8373=>600,8400=>0,8401=>0,8402=>0,8406=>0,8407=>0,8411=>0,8412=>0,8413=>0,
-8414=>0,8415=>0,8416=>0,8417=>0,8418=>0,8419=>0,8428=>0,8429=>0,8430=>0,8431=>0,
-8448=>600,8449=>600,8450=>600,8451=>600,8453=>600,8454=>600,8455=>600,8457=>600,8461=>600,8463=>600,
-8464=>600,8465=>600,8466=>600,8467=>600,8468=>600,8469=>600,8470=>600,8471=>600,8472=>600,8473=>600,
-8474=>600,8476=>600,8477=>600,8478=>600,8481=>600,8484=>600,8486=>600,8487=>600,8489=>600,8490=>600,
-8491=>600,8498=>600,8501=>600,8502=>600,8503=>600,8504=>600,8505=>600,8506=>600,8507=>600,8523=>600,
-8526=>600,8531=>600,8532=>600,8533=>600,8534=>600,8535=>600,8536=>600,8537=>600,8538=>600,8539=>600,
-8540=>600,8541=>600,8542=>600,8543=>600,8544=>600,8545=>600,8546=>600,8547=>600,8548=>600,8549=>600,
-8550=>600,8551=>600,8552=>600,8553=>600,8554=>600,8555=>600,8556=>600,8557=>600,8558=>600,8559=>600,
-8560=>600,8561=>600,8562=>600,8563=>600,8564=>600,8565=>600,8566=>600,8567=>600,8568=>600,8569=>600,
-8570=>600,8571=>600,8572=>600,8573=>600,8574=>600,8575=>600,8592=>600,8593=>600,8594=>600,8595=>600,
-8596=>600,8597=>600,8598=>600,8599=>600,8600=>600,8601=>600,8602=>600,8603=>600,8604=>600,8605=>600,
-8606=>600,8607=>600,8608=>600,8609=>600,8610=>600,8611=>600,8612=>600,8613=>600,8614=>600,8615=>600,
-8616=>600,8617=>600,8618=>600,8619=>600,8620=>600,8621=>600,8622=>600,8623=>600,8624=>600,8625=>600,
-8626=>600,8627=>600,8628=>600,8629=>600,8630=>600,8631=>600,8632=>600,8633=>600,8634=>600,8635=>600,
-8636=>600,8637=>600,8638=>600,8639=>600,8640=>600,8641=>600,8642=>600,8643=>600,8644=>600,8645=>600,
-8646=>600,8647=>600,8648=>600,8649=>600,8650=>600,8651=>600,8652=>600,8653=>600,8654=>600,8655=>600,
-8656=>600,8657=>600,8658=>600,8659=>600,8660=>600,8661=>600,8669=>600,8678=>600,8679=>600,8680=>600,
-8681=>600,8691=>600,8704=>600,8705=>600,8706=>600,8707=>600,8708=>600,8709=>600,8710=>600,8711=>600,
-8712=>600,8713=>600,8714=>600,8715=>600,8716=>600,8717=>600,8718=>600,8719=>600,8720=>600,8721=>600,
-8722=>600,8723=>600,8724=>600,8725=>600,8726=>600,8727=>600,8728=>600,8729=>600,8730=>600,8731=>600,
-8732=>600,8733=>600,8734=>600,8735=>600,8736=>600,8737=>600,8738=>600,8739=>600,8740=>600,8741=>600,
-8742=>600,8743=>600,8744=>600,8745=>600,8746=>600,8747=>600,8748=>600,8749=>600,8750=>600,8751=>600,
-8752=>600,8754=>600,8755=>600,8756=>600,8757=>600,8758=>600,8759=>600,8760=>600,8761=>600,8762=>600,
-8763=>600,8764=>600,8765=>600,8768=>600,8769=>600,8770=>600,8771=>600,8772=>600,8773=>600,8774=>600,
-8775=>600,8776=>600,8777=>600,8778=>600,8779=>600,8780=>600,8781=>600,8784=>600,8785=>600,8786=>600,
-8787=>600,8788=>600,8789=>600,8790=>600,8791=>600,8792=>600,8793=>600,8794=>600,8795=>600,8796=>600,
-8797=>600,8798=>600,8799=>600,8800=>600,8801=>600,8802=>600,8803=>600,8804=>600,8805=>600,8806=>600,
-8807=>600,8808=>600,8809=>600,8810=>600,8811=>600,8812=>600,8813=>600,8814=>600,8815=>600,8816=>600,
-8817=>600,8818=>600,8819=>600,8820=>600,8821=>600,8822=>600,8823=>600,8824=>600,8825=>600,8826=>600,
-8827=>600,8828=>600,8829=>600,8830=>600,8831=>600,8832=>600,8833=>600,8834=>600,8835=>600,8836=>600,
-8837=>600,8838=>600,8839=>600,8840=>600,8841=>600,8842=>600,8843=>600,8844=>600,8845=>600,8846=>600,
-8847=>600,8848=>600,8849=>600,8850=>600,8851=>600,8852=>600,8853=>600,8854=>600,8855=>600,8856=>600,
-8857=>600,8858=>600,8859=>600,8860=>600,8861=>600,8862=>600,8863=>600,8866=>600,8867=>600,8868=>600,
-8869=>600,8870=>600,8871=>600,8872=>600,8873=>600,8874=>600,8875=>600,8876=>600,8877=>600,8878=>600,
-8879=>600,8882=>600,8883=>600,8884=>600,8885=>600,8891=>600,8892=>600,8893=>600,8894=>600,8896=>600,
-8897=>600,8898=>600,8899=>600,8900=>600,8901=>600,8902=>600,8903=>600,8904=>600,8909=>600,8910=>600,
-8911=>600,8912=>600,8913=>600,8914=>600,8915=>600,8924=>600,8925=>600,8926=>600,8927=>600,8928=>600,
-8929=>600,8930=>600,8931=>600,8938=>600,8939=>600,8940=>600,8941=>600,8942=>600,8943=>600,8944=>600,
-8945=>600,8960=>600,8962=>600,8963=>600,8964=>600,8965=>600,8966=>600,8968=>600,8969=>600,8970=>600,
-8971=>600,8972=>600,8973=>600,8974=>600,8975=>600,8976=>600,8978=>600,8980=>600,8981=>600,8984=>600,
-8985=>600,8988=>600,8989=>600,8990=>600,8991=>600,8992=>600,8993=>600,8994=>600,8995=>600,8996=>600,
-8997=>600,8998=>600,8999=>600,9001=>600,9002=>600,9003=>600,9004=>600,9014=>600,9015=>600,9016=>600,
-9017=>600,9018=>600,9019=>600,9020=>600,9021=>600,9022=>600,9023=>600,9024=>600,9025=>600,9026=>600,
-9027=>600,9028=>600,9029=>600,9030=>600,9031=>600,9032=>600,9033=>600,9034=>600,9035=>600,9036=>600,
-9037=>600,9038=>600,9039=>600,9040=>600,9041=>600,9042=>600,9043=>600,9044=>600,9045=>600,9046=>600,
-9047=>600,9048=>600,9049=>600,9050=>600,9051=>600,9052=>600,9053=>600,9054=>600,9055=>600,9056=>600,
-9057=>600,9058=>600,9059=>600,9060=>600,9061=>600,9062=>600,9063=>600,9064=>600,9065=>600,9066=>600,
-9067=>600,9068=>600,9069=>600,9070=>600,9071=>600,9072=>600,9073=>600,9074=>600,9075=>600,9076=>600,
-9077=>600,9078=>600,9079=>600,9080=>600,9081=>600,9082=>600,9084=>600,9085=>600,9086=>600,9087=>600,
-9088=>600,9089=>600,9090=>600,9091=>600,9092=>600,9093=>600,9094=>600,9095=>600,9096=>600,9097=>600,
-9098=>600,9099=>600,9100=>600,9101=>600,9102=>600,9103=>600,9104=>600,9105=>600,9106=>600,9107=>600,
-9108=>600,9109=>600,9110=>600,9111=>600,9112=>600,9113=>600,9114=>600,9115=>600,9116=>600,9117=>600,
-9118=>600,9119=>600,9120=>600,9121=>600,9122=>600,9123=>600,9124=>600,9125=>600,9126=>600,9127=>600,
-9128=>600,9129=>600,9130=>600,9131=>600,9132=>600,9133=>600,9134=>600,9135=>600,9136=>600,9137=>600,
-9138=>600,9139=>600,9140=>600,9141=>600,9142=>600,9143=>600,9146=>600,9147=>600,9148=>600,9149=>600,
-9150=>600,9151=>600,9152=>600,9153=>600,9154=>600,9155=>600,9156=>600,9157=>600,9158=>600,9159=>600,
-9160=>600,9161=>600,9162=>600,9163=>600,9164=>600,9165=>600,9166=>600,9167=>600,9178=>600,9179=>600,
-9182=>600,9183=>600,9186=>600,9187=>600,9188=>600,9189=>600,9190=>600,9251=>600,9280=>600,9281=>600,
-9282=>600,9283=>600,9284=>600,9285=>600,9286=>600,9287=>600,9288=>600,9289=>600,9290=>600,9312=>600,
-9313=>600,9314=>600,9315=>600,9316=>600,9317=>600,9318=>600,9319=>600,9320=>600,9321=>600,9472=>600,
-9473=>600,9474=>600,9475=>600,9476=>600,9477=>600,9478=>600,9479=>600,9480=>600,9481=>600,9482=>600,
-9483=>600,9484=>600,9485=>600,9486=>600,9487=>600,9488=>600,9489=>600,9490=>600,9491=>600,9492=>600,
-9493=>600,9494=>600,9495=>600,9496=>600,9497=>600,9498=>600,9499=>600,9500=>600,9501=>600,9502=>600,
-9503=>600,9504=>600,9505=>600,9506=>600,9507=>600,9508=>600,9509=>600,9510=>600,9511=>600,9512=>600,
-9513=>600,9514=>600,9515=>600,9516=>600,9517=>600,9518=>600,9519=>600,9520=>600,9521=>600,9522=>600,
-9523=>600,9524=>600,9525=>600,9526=>600,9527=>600,9528=>600,9529=>600,9530=>600,9531=>600,9532=>600,
-9533=>600,9534=>600,9535=>600,9536=>600,9537=>600,9538=>600,9539=>600,9540=>600,9541=>600,9542=>600,
-9543=>600,9544=>600,9545=>600,9546=>600,9547=>600,9548=>600,9549=>600,9550=>600,9551=>600,9552=>600,
-9553=>600,9554=>600,9555=>600,9556=>600,9557=>600,9558=>600,9559=>600,9560=>600,9561=>600,9562=>600,
-9563=>600,9564=>600,9565=>600,9566=>600,9567=>600,9568=>600,9569=>600,9570=>600,9571=>600,9572=>600,
-9573=>600,9574=>600,9575=>600,9576=>600,9577=>600,9578=>600,9579=>600,9580=>600,9581=>600,9582=>600,
-9583=>600,9584=>600,9585=>600,9586=>600,9587=>600,9588=>600,9589=>600,9590=>600,9591=>600,9592=>600,
-9593=>600,9594=>600,9595=>600,9596=>600,9597=>600,9598=>600,9599=>600,9600=>600,9601=>600,9602=>600,
-9603=>600,9604=>600,9605=>600,9606=>600,9607=>600,9608=>600,9609=>600,9610=>600,9611=>600,9612=>600,
-9613=>600,9614=>600,9615=>600,9616=>600,9617=>600,9618=>600,9619=>600,9620=>600,9621=>600,9622=>600,
-9623=>600,9624=>600,9625=>600,9626=>600,9627=>600,9628=>600,9629=>600,9630=>600,9631=>600,9632=>600,
-9633=>600,9634=>600,9635=>600,9636=>600,9637=>600,9638=>600,9639=>600,9640=>600,9641=>600,9642=>600,
-9643=>600,9644=>600,9645=>600,9646=>600,9647=>600,9648=>600,9649=>600,9650=>600,9651=>600,9652=>600,
-9653=>600,9654=>600,9655=>600,9656=>600,9657=>600,9658=>600,9659=>600,9660=>600,9661=>600,9662=>600,
-9663=>600,9664=>600,9665=>600,9666=>600,9667=>600,9668=>600,9669=>600,9670=>600,9671=>600,9672=>600,
-9673=>600,9674=>600,9675=>600,9676=>600,9677=>600,9678=>600,9679=>600,9680=>600,9681=>600,9682=>600,
-9683=>600,9684=>600,9685=>600,9686=>600,9687=>600,9688=>600,9689=>600,9690=>600,9691=>600,9692=>600,
-9693=>600,9694=>600,9695=>600,9696=>600,9697=>600,9698=>600,9699=>600,9700=>600,9701=>600,9702=>600,
-9703=>600,9704=>600,9705=>600,9706=>600,9707=>600,9708=>600,9709=>600,9710=>600,9711=>600,9712=>600,
-9713=>600,9714=>600,9715=>600,9716=>600,9717=>600,9718=>600,9719=>600,9720=>600,9721=>600,9722=>600,
-9723=>600,9724=>600,9725=>600,9726=>600,9727=>600,9728=>600,9729=>600,9730=>600,9731=>600,9733=>600,
-9734=>600,9735=>600,9736=>600,9737=>600,9744=>600,9745=>600,9746=>600,9754=>600,9755=>600,9756=>600,
-9757=>600,9758=>600,9759=>600,9766=>600,9768=>600,9769=>600,9774=>600,9775=>600,9776=>600,9777=>600,
-9778=>600,9779=>600,9780=>600,9781=>600,9782=>600,9783=>600,9785=>600,9786=>600,9787=>600,9788=>600,
-9789=>600,9790=>600,9791=>600,9792=>600,9793=>600,9794=>600,9795=>600,9796=>600,9797=>600,9798=>600,
-9799=>600,9800=>600,9801=>600,9802=>600,9803=>600,9804=>600,9805=>600,9806=>600,9807=>600,9808=>600,
-9809=>600,9810=>600,9811=>600,9824=>600,9825=>600,9826=>600,9827=>600,9828=>600,9829=>600,9830=>600,
-9831=>600,9833=>600,9834=>600,9835=>600,9836=>600,9837=>600,9838=>600,9839=>600,9856=>600,9857=>600,
-9858=>600,9859=>600,9860=>600,9861=>600,10176=>600,10177=>600,10178=>600,10179=>600,10180=>600,10181=>600,
-10182=>600,10183=>600,10184=>600,10185=>600,10186=>600,10188=>600,10192=>600,10193=>600,10194=>600,10195=>600,
-10196=>600,10197=>600,10198=>600,10199=>600,10212=>600,10213=>600,10214=>600,10215=>600,10216=>600,10217=>600,
-10218=>600,10219=>600,10226=>600,10227=>600,10229=>600,10230=>600,10231=>600,10232=>600,10233=>600,10234=>600,
-10235=>600,10236=>600,10240=>600,10241=>600,10242=>600,10243=>600,10244=>600,10245=>600,10246=>600,10247=>600,
-10248=>600,10249=>600,10250=>600,10251=>600,10252=>600,10253=>600,10254=>600,10255=>600,10256=>600,10257=>600,
-10258=>600,10259=>600,10260=>600,10261=>600,10262=>600,10263=>600,10264=>600,10265=>600,10266=>600,10267=>600,
-10268=>600,10269=>600,10270=>600,10271=>600,10272=>600,10273=>600,10274=>600,10275=>600,10276=>600,10277=>600,
-10278=>600,10279=>600,10280=>600,10281=>600,10282=>600,10283=>600,10284=>600,10285=>600,10286=>600,10287=>600,
-10288=>600,10289=>600,10290=>600,10291=>600,10292=>600,10293=>600,10294=>600,10295=>600,10296=>600,10297=>600,
-10298=>600,10299=>600,10300=>600,10301=>600,10302=>600,10303=>600,10304=>600,10305=>600,10306=>600,10307=>600,
-10308=>600,10309=>600,10310=>600,10311=>600,10312=>600,10313=>600,10314=>600,10315=>600,10316=>600,10317=>600,
-10318=>600,10319=>600,10320=>600,10321=>600,10322=>600,10323=>600,10324=>600,10325=>600,10326=>600,10327=>600,
-10328=>600,10329=>600,10330=>600,10331=>600,10332=>600,10333=>600,10334=>600,10335=>600,10336=>600,10337=>600,
-10338=>600,10339=>600,10340=>600,10341=>600,10342=>600,10343=>600,10344=>600,10345=>600,10346=>600,10347=>600,
-10348=>600,10349=>600,10350=>600,10351=>600,10352=>600,10353=>600,10354=>600,10355=>600,10356=>600,10357=>600,
-10358=>600,10359=>600,10360=>600,10361=>600,10362=>600,10363=>600,10364=>600,10365=>600,10366=>600,10367=>600,
-10368=>600,10369=>600,10370=>600,10371=>600,10372=>600,10373=>600,10374=>600,10375=>600,10376=>600,10377=>600,
-10378=>600,10379=>600,10380=>600,10381=>600,10382=>600,10383=>600,10384=>600,10385=>600,10386=>600,10387=>600,
-10388=>600,10389=>600,10390=>600,10391=>600,10392=>600,10393=>600,10394=>600,10395=>600,10396=>600,10397=>600,
-10398=>600,10399=>600,10400=>600,10401=>600,10402=>600,10403=>600,10404=>600,10405=>600,10406=>600,10407=>600,
-10408=>600,10409=>600,10410=>600,10411=>600,10412=>600,10413=>600,10414=>600,10415=>600,10416=>600,10417=>600,
-10418=>600,10419=>600,10420=>600,10421=>600,10422=>600,10423=>600,10424=>600,10425=>600,10426=>600,10427=>600,
-10428=>600,10429=>600,10430=>600,10431=>600,10432=>600,10433=>600,10434=>600,10435=>600,10436=>600,10437=>600,
-10438=>600,10439=>600,10440=>600,10441=>600,10442=>600,10443=>600,10444=>600,10445=>600,10446=>600,10447=>600,
-10448=>600,10449=>600,10450=>600,10451=>600,10452=>600,10453=>600,10454=>600,10455=>600,10456=>600,10457=>600,
-10458=>600,10459=>600,10460=>600,10461=>600,10462=>600,10463=>600,10464=>600,10465=>600,10466=>600,10467=>600,
-10468=>600,10469=>600,10470=>600,10471=>600,10472=>600,10473=>600,10474=>600,10475=>600,10476=>600,10477=>600,
-10478=>600,10479=>600,10480=>600,10481=>600,10482=>600,10483=>600,10484=>600,10485=>600,10486=>600,10487=>600,
-10488=>600,10489=>600,10490=>600,10491=>600,10492=>600,10493=>600,10494=>600,10495=>600,10752=>600,10753=>600,
-10754=>600,10755=>600,10756=>600,10757=>600,10758=>600,10781=>600,10815=>600,11008=>600,11009=>600,11010=>600,
-11011=>600,11012=>600,11013=>600,11014=>600,11015=>600,11016=>600,11017=>600,11018=>600,11019=>600,11020=>600,
-11021=>600,11026=>600,11027=>600,11028=>600,11029=>600,11030=>600,11031=>600,11032=>600,11033=>600,11035=>600,
-11036=>600,11037=>600,11038=>600,11039=>600,11040=>600,11041=>600,11042=>600,11043=>600,11044=>600,11045=>600,
-11046=>600,11047=>600,11048=>600,11049=>600,11050=>600,11051=>600,11091=>600,11092=>600,64256=>600,64257=>600,
-64258=>600,64259=>600,64260=>600,64261=>600,64285=>600,64286=>600,64287=>600,64288=>600,64289=>600,64290=>600,
-64291=>600,64292=>600,64293=>600,64294=>600,64295=>600,64296=>600,64297=>600,64298=>600,64299=>600,64300=>600,
-64301=>600,64302=>600,64303=>600,64304=>600,64305=>600,64306=>600,64307=>600,64308=>600,64309=>600,64310=>600,
-64312=>600,64313=>600,64314=>600,64315=>600,64316=>600,64318=>600,64320=>600,64321=>600,64323=>600,64324=>600,
-64326=>600,64327=>600,64328=>600,64329=>600,64330=>600,64331=>600,64332=>600,64333=>600,64334=>600,64335=>600,
-65533=>600);
-$enc='';
$diff='';
+$originalsize=343980;
+$enc='';
$file='freemono.z';
$ctg='freemono.ctg.z';
-$originalsize=314348;
-?>
\ No newline at end of file
+$desc=array('Flags'=>33,'FontBBox'=>'[-793 -200 699 800]','ItalicAngle'=>0,'Ascent'=>800,'Descent'=>-200,'Leading'=>90,'CapHeight'=>563,'XHeight'=>417,'StemV'=>70,'StemH'=>30,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600);
+$cw=array(0=>0,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>0,9=>600,10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600,20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>0,30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600,136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600,145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600,154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,257=>600,258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,267=>600,268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,277=>600,278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,287=>600,288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,297=>600,298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,307=>600,308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,317=>600,318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,327=>600,328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,337=>600,338=>600,339=>600,340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,349=>600,350=>600,351=>600,352=>600,353=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,361=>600,362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,371=>600,372=>600,373=>600,374=>600,375=>600,376=>600,377=>600,378=>600,379=>600,380=>600,381=>600,382=>600,383=>600,384=>600,385=>600,386=>600,387=>600,388=>600,389=>600,390=>600,391=>600,392=>600,393=>600,394=>600,395=>600,396=>600,397=>600,398=>600,399=>600,400=>600,401=>600,402=>600,403=>600,404=>600,405=>600,406=>600,407=>600,408=>600,409=>600,410=>600,411=>600,412=>600,413=>600,414=>600,415=>600,416=>600,417=>600,418=>600,419=>600,420=>600,421=>600,422=>600,423=>600,424=>600,425=>600,426=>600,427=>600,428=>600,429=>600,430=>600,431=>600,432=>600,433=>600,434=>600,435=>600,436=>600,437=>600,438=>600,439=>600,440=>600,441=>600,442=>600,443=>600,444=>600,445=>600,446=>600,447=>600,448=>600,449=>600,450=>600,451=>600,452=>600,453=>600,454=>600,455=>600,456=>600,457=>600,458=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,465=>600,466=>600,467=>600,468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,475=>600,476=>600,477=>600,478=>600,479=>600,480=>600,481=>600,482=>600,483=>600,484=>600,485=>600,486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,492=>600,493=>600,494=>600,495=>600,496=>600,497=>600,498=>600,499=>600,500=>600,501=>600,502=>600,503=>600,504=>600,505=>600,506=>600,507=>600,508=>600,509=>600,510=>600,511=>600,512=>600,513=>600,514=>600,515=>600,516=>600,517=>600,518=>600,519=>600,520=>600,521=>600,522=>600,523=>600,524=>600,525=>600,526=>600,527=>600,528=>600,529=>600,530=>600,531=>600,532=>600,533=>600,534=>600,535=>600,536=>600,537=>600,538=>600,539=>600,540=>600,541=>600,542=>600,543=>600,544=>600,548=>600,549=>600,550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,556=>600,557=>600,558=>600,559=>600,560=>600,561=>600,562=>600,563=>600,567=>600,592=>600,593=>600,594=>600,595=>600,596=>600,597=>600,598=>600,599=>600,600=>600,601=>600,602=>600,603=>600,604=>600,605=>600,606=>600,607=>600,608=>600,609=>600,610=>600,611=>600,612=>600,613=>600,614=>600,615=>600,616=>600,617=>600,618=>600,619=>600,620=>600,621=>600,622=>600,623=>600,624=>600,625=>600,626=>600,627=>600,628=>600,629=>600,630=>600,631=>600,632=>600,633=>600,634=>600,635=>600,636=>600,637=>600,638=>600,639=>600,640=>600,641=>600,642=>600,643=>600,644=>600,645=>600,646=>600,647=>600,648=>600,649=>600,650=>600,651=>600,652=>600,653=>600,654=>600,655=>600,656=>600,657=>600,658=>600,659=>600,660=>600,661=>600,662=>600,663=>600,664=>600,665=>600,666=>600,667=>600,668=>600,669=>600,670=>600,671=>600,672=>600,673=>600,674=>600,675=>600,676=>600,677=>600,678=>600,679=>600,680=>600,681=>600,682=>600,683=>600,684=>600,685=>600,686=>600,687=>600,688=>600,689=>600,690=>600,691=>600,692=>600,693=>600,694=>600,695=>600,696=>600,697=>600,698=>600,699=>600,700=>600,701=>600,702=>600,703=>600,704=>600,705=>600,706=>600,707=>600,708=>600,709=>600,710=>600,711=>600,712=>600,713=>600,714=>600,715=>600,716=>600,717=>600,718=>600,719=>600,720=>600,721=>600,722=>600,723=>600,724=>600,725=>600,726=>600,727=>600,728=>600,729=>600,730=>600,731=>600,732=>600,733=>600,734=>600,735=>600,736=>600,737=>600,738=>600,739=>600,740=>600,741=>600,742=>600,743=>600,744=>600,745=>600,746=>600,747=>600,748=>600,749=>600,750=>600,751=>600,752=>600,753=>600,754=>600,755=>600,756=>600,757=>600,758=>600,759=>600,760=>600,761=>600,762=>600,763=>600,764=>600,765=>600,766=>600,767=>600,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,843=>0,844=>0,845=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,884=>600,885=>600,890=>600,894=>600,900=>600,901=>600,902=>600,903=>600,904=>600,905=>600,906=>600,908=>600,910=>600,911=>600,912=>600,913=>600,914=>600,915=>600,916=>600,917=>600,918=>600,919=>600,920=>600,921=>600,922=>600,923=>600,924=>600,925=>600,926=>600,927=>600,928=>600,929=>600,931=>600,932=>600,933=>600,934=>600,935=>600,936=>600,937=>600,938=>600,939=>600,940=>600,941=>600,942=>600,943=>600,944=>600,945=>600,946=>600,947=>600,948=>600,949=>600,950=>600,951=>600,952=>600,953=>600,954=>600,955=>600,956=>600,957=>600,958=>600,959=>600,960=>600,961=>600,962=>600,963=>600,964=>600,965=>600,966=>600,967=>600,968=>600,969=>600,970=>600,971=>600,972=>600,973=>600,974=>600,976=>600,977=>600,978=>600,979=>600,980=>600,981=>600,982=>600,986=>600,987=>600,988=>600,1008=>600,1009=>600,1012=>600,1013=>600,1024=>600,1025=>600,1026=>600,1027=>600,1028=>600,1029=>600,1030=>600,1031=>600,1032=>600,1033=>600,1034=>600,1035=>600,1036=>600,1037=>600,1038=>600,1039=>600,1040=>600,1041=>600,1042=>600,1043=>600,1044=>600,1045=>600,1046=>600,1047=>600,1048=>600,1049=>600,1050=>600,1051=>600,1052=>600,1053=>600,1054=>600,1055=>600,1056=>600,1057=>600,1058=>600,1059=>600,1060=>600,1061=>600,1062=>600,1063=>600,1064=>600,1065=>600,1066=>600,1067=>600,1068=>600,1069=>600,1070=>600,1071=>600,1072=>600,1073=>600,1074=>600,1075=>600,1076=>600,1077=>600,1078=>600,1079=>600,1080=>600,1081=>600,1082=>600,1083=>600,1084=>600,1085=>600,1086=>600,1087=>600,1088=>600,1089=>600,1090=>600,1091=>600,1092=>600,1093=>600,1094=>600,1095=>600,1096=>600,1097=>600,1098=>600,1099=>600,1100=>600,1101=>600,1102=>600,1103=>600,1104=>600,1105=>600,1106=>600,1107=>600,1108=>600,1109=>600,1110=>600,1111=>600,1112=>600,1113=>600,1114=>600,1115=>600,1116=>600,1117=>600,1118=>600,1119=>600,1120=>600,1121=>600,1122=>600,1123=>600,1124=>600,1126=>600,1127=>600,1128=>600,1130=>600,1131=>600,1132=>600,1133=>600,1136=>600,1137=>600,1138=>600,1140=>600,1141=>600,1142=>600,1143=>600,1148=>600,1149=>600,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1162=>600,1163=>600,1164=>600,1165=>600,1166=>600,1167=>600,1168=>600,1169=>600,1170=>600,1171=>600,1172=>600,1173=>600,1174=>600,1175=>600,1176=>600,1177=>600,1178=>600,1179=>600,1180=>600,1181=>600,1182=>600,1183=>600,1184=>600,1185=>600,1186=>600,1187=>600,1188=>600,1189=>600,1190=>600,1191=>600,1192=>600,1193=>600,1194=>600,1195=>600,1196=>600,1197=>600,1198=>600,1199=>600,1200=>600,1201=>600,1202=>600,1203=>600,1204=>600,1205=>600,1206=>600,1207=>600,1208=>600,1209=>600,1210=>600,1211=>600,1212=>600,1213=>600,1214=>600,1215=>600,1216=>600,1217=>600,1218=>600,1219=>600,1220=>600,1221=>600,1222=>600,1223=>600,1224=>600,1225=>600,1226=>600,1227=>600,1228=>600,1229=>600,1230=>600,1231=>600,1232=>600,1233=>600,1234=>600,1235=>600,1236=>600,1237=>600,1238=>600,1239=>600,1240=>600,1241=>600,1242=>600,1243=>600,1244=>600,1245=>600,1246=>600,1247=>600,1248=>600,1249=>600,1250=>600,1251=>600,1252=>600,1253=>600,1254=>600,1255=>600,1256=>600,1257=>600,1258=>600,1259=>600,1260=>600,1261=>600,1262=>600,1263=>600,1264=>600,1265=>600,1266=>600,1267=>600,1268=>600,1269=>600,1270=>600,1271=>600,1272=>600,1273=>600,1296=>600,1297=>600,1298=>600,1299=>600,1306=>600,1307=>600,1308=>600,1309=>600,1310=>600,1311=>600,1329=>600,1330=>600,1331=>600,1332=>600,1333=>600,1334=>600,1335=>600,1336=>600,1337=>600,1338=>600,1339=>600,1340=>600,1341=>600,1342=>600,1343=>600,1344=>600,1345=>600,1346=>600,1347=>600,1348=>600,1349=>600,1350=>600,1351=>600,1352=>600,1353=>600,1354=>600,1355=>600,1356=>600,1357=>600,1358=>600,1359=>600,1360=>600,1361=>600,1362=>600,1363=>600,1364=>600,1365=>600,1366=>600,1369=>600,1370=>600,1371=>600,1372=>600,1373=>600,1374=>600,1375=>600,1377=>600,1378=>600,1379=>600,1380=>600,1381=>600,1382=>600,1383=>600,1384=>600,1385=>600,1386=>600,1387=>600,1388=>600,1389=>600,1390=>600,1391=>600,1392=>600,1393=>600,1394=>600,1395=>600,1396=>600,1397=>600,1398=>600,1399=>600,1400=>600,1401=>600,1402=>600,1403=>600,1404=>600,1405=>600,1406=>600,1407=>600,1408=>600,1409=>600,1410=>600,1411=>600,1412=>600,1413=>600,1414=>600,1415=>600,1417=>600,1418=>600,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0,1470=>600,1471=>0,1472=>600,1473=>0,1474=>0,1475=>600,1476=>0,1488=>600,1489=>600,1490=>600,1491=>600,1492=>600,1493=>600,1494=>600,1495=>600,1496=>600,1497=>600,1498=>600,1499=>600,1500=>600,1501=>600,1502=>600,1503=>600,1504=>600,1505=>600,1506=>600,1507=>600,1508=>600,1509=>600,1510=>600,1511=>600,1512=>600,1513=>600,1514=>600,1520=>600,1521=>600,1522=>600,1523=>600,1524=>600,4304=>600,4305=>600,4306=>600,4307=>600,4308=>600,4309=>600,4310=>600,4311=>600,4312=>600,4313=>600,4314=>600,4315=>600,4316=>600,4317=>600,4318=>600,4319=>600,4320=>600,4321=>600,4322=>600,4323=>600,4324=>600,4325=>600,4326=>600,4327=>600,4328=>600,4329=>600,4330=>600,4331=>600,4332=>600,4333=>600,4334=>600,4335=>600,4336=>600,4337=>600,4338=>600,4339=>600,4340=>600,4341=>600,4345=>600,4347=>600,4348=>600,5024=>600,5025=>600,5026=>600,5027=>600,5028=>600,5029=>600,5030=>600,5031=>600,5032=>600,5033=>600,5034=>600,5035=>600,5036=>600,5037=>600,5038=>600,5039=>600,5040=>600,5041=>600,5042=>600,5043=>600,5044=>600,5045=>600,5046=>600,5047=>600,5048=>600,5049=>600,5050=>600,5051=>600,5052=>600,5053=>600,5054=>600,5055=>600,5056=>600,5057=>600,5058=>600,5059=>600,5060=>600,5061=>600,5062=>600,5063=>600,5064=>600,5065=>600,5066=>600,5067=>600,5068=>600,5069=>600,5070=>600,5071=>600,5072=>600,5073=>600,5074=>600,5075=>600,5076=>600,5077=>600,5078=>600,5079=>600,5080=>600,5081=>600,5082=>600,5083=>600,5084=>600,5085=>600,5086=>600,5087=>600,5088=>600,5089=>600,5090=>600,5091=>600,5092=>600,5093=>600,5094=>600,5095=>600,5096=>600,5097=>600,5098=>600,5099=>600,5100=>600,5101=>600,5102=>600,5103=>600,5104=>600,5105=>600,5106=>600,5107=>600,5108=>600,5792=>600,5793=>600,5794=>600,5795=>600,5796=>600,5797=>600,5798=>600,5799=>600,5800=>600,5801=>600,5802=>600,5803=>600,5804=>600,5805=>600,5806=>600,5807=>600,5808=>600,5809=>600,5810=>600,5811=>600,5812=>600,5813=>600,5814=>600,5815=>600,5816=>600,5817=>600,5818=>600,5819=>600,5820=>600,5821=>600,5822=>600,5823=>600,5824=>600,5825=>600,5826=>600,5827=>600,5828=>600,5829=>600,5830=>600,5831=>600,5832=>600,5833=>600,5834=>600,5835=>600,5836=>600,5837=>600,5838=>600,5839=>600,5840=>600,5841=>600,5842=>600,5843=>600,5844=>600,5845=>600,5846=>600,5847=>600,5848=>600,5849=>600,5850=>600,5851=>600,5852=>600,5853=>600,5854=>600,5855=>600,5856=>600,5857=>600,5858=>600,5859=>600,5860=>600,5861=>600,5862=>600,5863=>600,5864=>600,5865=>600,5866=>600,5867=>600,5868=>600,5869=>600,5870=>600,5871=>600,5872=>600,7680=>600,7681=>600,7682=>600,7683=>600,7684=>600,7685=>600,7686=>600,7687=>600,7688=>600,7689=>600,7690=>600,7691=>600,7692=>600,7693=>600,7694=>600,7695=>600,7696=>600,7697=>600,7698=>600,7699=>600,7700=>600,7701=>600,7702=>600,7703=>600,7704=>600,7705=>600,7706=>600,7707=>600,7708=>600,7709=>600,7710=>600,7711=>600,7712=>600,7713=>600,7714=>600,7715=>600,7716=>600,7717=>600,7718=>600,7719=>600,7720=>600,7721=>600,7722=>600,7723=>600,7724=>600,7725=>600,7726=>600,7727=>600,7728=>600,7729=>600,7730=>600,7731=>600,7732=>600,7733=>600,7734=>600,7735=>600,7736=>600,7737=>600,7738=>600,7739=>600,7740=>600,7741=>600,7742=>600,7743=>600,7744=>600,7745=>600,7746=>600,7747=>600,7748=>600,7749=>600,7750=>600,7751=>600,7752=>600,7753=>600,7754=>600,7755=>600,7756=>600,7757=>600,7758=>600,7759=>600,7760=>600,7761=>600,7762=>600,7763=>600,7764=>600,7765=>600,7766=>600,7767=>600,7768=>600,7769=>600,7770=>600,7771=>600,7772=>600,7773=>600,7774=>600,7775=>600,7776=>600,7777=>600,7778=>600,7779=>600,7780=>600,7781=>600,7782=>600,7783=>600,7784=>600,7785=>600,7786=>600,7787=>600,7788=>600,7789=>600,7790=>600,7791=>600,7792=>600,7793=>600,7794=>600,7795=>600,7796=>600,7797=>600,7798=>600,7799=>600,7800=>600,7801=>600,7802=>600,7803=>600,7804=>600,7805=>600,7806=>600,7807=>600,7808=>600,7809=>600,7810=>600,7811=>600,7812=>600,7813=>600,7814=>600,7815=>600,7816=>600,7817=>600,7818=>600,7819=>600,7820=>600,7821=>600,7822=>600,7823=>600,7824=>600,7825=>600,7826=>600,7827=>600,7828=>600,7829=>600,7830=>600,7831=>600,7832=>600,7833=>600,7834=>600,7835=>600,7840=>600,7841=>600,7842=>600,7843=>600,7844=>600,7845=>600,7846=>600,7847=>600,7848=>600,7849=>600,7850=>600,7851=>600,7852=>600,7853=>600,7854=>600,7855=>600,7856=>600,7857=>600,7858=>600,7859=>600,7860=>600,7861=>600,7862=>600,7863=>600,7864=>600,7865=>600,7866=>600,7867=>600,7868=>600,7869=>600,7870=>600,7871=>600,7872=>600,7873=>600,7874=>600,7875=>600,7876=>600,7877=>600,7878=>600,7879=>600,7880=>600,7881=>600,7882=>600,7883=>600,7884=>600,7885=>600,7886=>600,7887=>600,7888=>600,7889=>600,7890=>600,7891=>600,7892=>600,7893=>600,7894=>600,7895=>600,7896=>600,7897=>600,7898=>600,7899=>600,7900=>600,7901=>600,7902=>600,7903=>600,7904=>600,7905=>600,7906=>600,7907=>600,7908=>600,7909=>600,7910=>600,7911=>600,7912=>600,7913=>600,7914=>600,7915=>600,7916=>600,7917=>600,7918=>600,7919=>600,7920=>600,7921=>600,7922=>600,7923=>600,7924=>600,7925=>600,7926=>600,7927=>600,7928=>600,7929=>600,7936=>600,7937=>600,7938=>600,7939=>600,7940=>600,7941=>600,7942=>600,7943=>600,7944=>600,7945=>600,7946=>600,7947=>600,7948=>600,7949=>600,7950=>600,7951=>600,7952=>600,7953=>600,7954=>600,7955=>600,7956=>600,7957=>600,7960=>600,7961=>600,7962=>600,7963=>600,7964=>600,7965=>600,7968=>600,7969=>600,7970=>600,7971=>600,7972=>600,7973=>600,7974=>600,7975=>600,7976=>600,7977=>600,7978=>600,7979=>600,7980=>600,7981=>600,7982=>600,7983=>600,7984=>600,7985=>600,7986=>600,7987=>600,7988=>600,7989=>600,7990=>600,7991=>600,7992=>600,7993=>600,7994=>600,7995=>600,7996=>600,7997=>600,7998=>600,7999=>600,8000=>600,8001=>600,8002=>600,8003=>600,8004=>600,8005=>600,8008=>600,8009=>600,8010=>600,8011=>600,8012=>600,8013=>600,8016=>600,8017=>600,8018=>600,8019=>600,8020=>600,8021=>600,8022=>600,8023=>600,8025=>600,8027=>600,8029=>600,8031=>600,8032=>600,8033=>600,8034=>600,8035=>600,8036=>600,8037=>600,8038=>600,8039=>600,8040=>600,8041=>600,8042=>600,8043=>600,8044=>600,8045=>600,8046=>600,8047=>600,8048=>600,8049=>600,8050=>600,8051=>600,8052=>600,8053=>600,8054=>600,8055=>600,8056=>600,8057=>600,8058=>600,8059=>600,8060=>600,8061=>600,8064=>600,8065=>600,8066=>600,8067=>600,8068=>600,8069=>600,8070=>600,8071=>600,8072=>600,8073=>600,8074=>600,8075=>600,8076=>600,8077=>600,8078=>600,8079=>600,8080=>600,8081=>600,8082=>600,8083=>600,8084=>600,8085=>600,8086=>600,8087=>600,8088=>600,8089=>600,8090=>600,8091=>600,8092=>600,8093=>600,8094=>600,8095=>600,8096=>600,8097=>600,8098=>600,8099=>600,8100=>600,8101=>600,8102=>600,8103=>600,8104=>600,8105=>600,8106=>600,8107=>600,8108=>600,8109=>600,8110=>600,8111=>600,8112=>600,8113=>600,8114=>600,8115=>600,8116=>600,8118=>600,8119=>600,8120=>600,8121=>600,8122=>600,8123=>600,8124=>600,8125=>600,8126=>600,8127=>600,8128=>600,8129=>600,8130=>600,8131=>600,8132=>600,8134=>600,8135=>600,8136=>600,8137=>600,8138=>600,8139=>600,8140=>600,8141=>600,8142=>600,8143=>600,8144=>600,8145=>600,8146=>600,8147=>600,8150=>600,8151=>600,8152=>600,8153=>600,8154=>600,8155=>600,8157=>600,8158=>600,8159=>600,8160=>600,8161=>600,8162=>600,8163=>600,8164=>600,8165=>600,8166=>600,8167=>600,8168=>600,8169=>600,8170=>600,8171=>600,8172=>600,8173=>600,8174=>600,8175=>600,8178=>600,8179=>600,8180=>600,8182=>600,8183=>600,8184=>600,8185=>600,8186=>600,8187=>600,8188=>600,8189=>600,8190=>600,8192=>600,8193=>600,8194=>600,8195=>600,8196=>600,8197=>600,8198=>600,8199=>600,8200=>600,8201=>600,8202=>600,8203=>600,8204=>0,8205=>0,8206=>0,8207=>0,8208=>600,8209=>600,8210=>600,8211=>600,8212=>600,8213=>600,8214=>600,8215=>600,8216=>600,8217=>600,8218=>600,8219=>600,8220=>600,8221=>600,8222=>600,8223=>600,8224=>600,8225=>600,8226=>600,8227=>600,8228=>600,8229=>600,8230=>600,8231=>600,8232=>600,8233=>600,8234=>600,8235=>600,8236=>600,8237=>600,8238=>600,8239=>600,8240=>600,8241=>600,8242=>600,8243=>600,8244=>600,8245=>600,8246=>600,8247=>600,8248=>600,8249=>600,8250=>600,8251=>600,8252=>600,8253=>600,8254=>600,8255=>600,8256=>600,8257=>600,8258=>600,8259=>600,8260=>600,8261=>600,8262=>600,8263=>600,8264=>600,8265=>600,8266=>600,8267=>600,8268=>600,8269=>600,8270=>600,8271=>600,8272=>600,8273=>600,8274=>600,8275=>600,8276=>600,8277=>600,8278=>600,8279=>600,8280=>600,8281=>600,8282=>600,8283=>600,8284=>600,8285=>600,8286=>600,8287=>600,8288=>600,8289=>600,8290=>600,8291=>600,8292=>600,8304=>600,8305=>600,8308=>600,8309=>600,8310=>600,8311=>600,8312=>600,8313=>600,8314=>600,8315=>600,8316=>600,8317=>600,8318=>600,8319=>600,8320=>600,8321=>600,8322=>600,8323=>600,8324=>600,8325=>600,8326=>600,8327=>600,8328=>600,8329=>600,8330=>600,8331=>600,8332=>600,8333=>600,8334=>600,8336=>600,8337=>600,8338=>600,8339=>600,8340=>600,8353=>600,8354=>600,8355=>600,8356=>600,8357=>600,8358=>600,8359=>600,8360=>600,8361=>600,8362=>600,8363=>600,8364=>600,8365=>600,8366=>600,8368=>600,8369=>600,8370=>600,8371=>600,8372=>600,8373=>600,8400=>0,8401=>0,8402=>0,8406=>0,8407=>0,8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8418=>0,8419=>0,8421=>0,8422=>0,8424=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8448=>600,8449=>600,8450=>600,8451=>600,8452=>600,8453=>600,8454=>600,8455=>600,8456=>600,8457=>600,8461=>600,8462=>600,8463=>600,8464=>600,8465=>600,8466=>600,8467=>600,8468=>600,8469=>600,8470=>600,8471=>600,8472=>600,8473=>600,8474=>600,8476=>600,8477=>600,8478=>600,8480=>600,8481=>600,8482=>600,8484=>600,8486=>600,8487=>600,8489=>600,8490=>600,8491=>600,8494=>600,8498=>600,8501=>600,8502=>600,8503=>600,8504=>600,8505=>600,8506=>600,8507=>600,8513=>600,8514=>600,8515=>600,8516=>600,8523=>600,8525=>600,8526=>600,8531=>600,8532=>600,8533=>600,8534=>600,8535=>600,8536=>600,8537=>600,8538=>600,8539=>600,8540=>600,8541=>600,8542=>600,8543=>600,8544=>600,8545=>600,8546=>600,8547=>600,8548=>600,8549=>600,8550=>600,8551=>600,8552=>600,8553=>600,8554=>600,8555=>600,8556=>600,8557=>600,8558=>600,8559=>600,8560=>600,8561=>600,8562=>600,8563=>600,8564=>600,8565=>600,8566=>600,8567=>600,8568=>600,8569=>600,8570=>600,8571=>600,8572=>600,8573=>600,8574=>600,8575=>600,8592=>600,8593=>600,8594=>600,8595=>600,8596=>600,8597=>600,8598=>600,8599=>600,8600=>600,8601=>600,8602=>600,8603=>600,8604=>600,8605=>600,8606=>600,8607=>600,8608=>600,8609=>600,8610=>600,8611=>600,8612=>600,8613=>600,8614=>600,8615=>600,8616=>600,8617=>600,8618=>600,8619=>600,8620=>600,8621=>600,8622=>600,8623=>600,8624=>600,8625=>600,8626=>600,8627=>600,8628=>600,8629=>600,8630=>600,8631=>600,8632=>600,8633=>600,8634=>600,8635=>600,8636=>600,8637=>600,8638=>600,8639=>600,8640=>600,8641=>600,8642=>600,8643=>600,8644=>600,8645=>600,8646=>600,8647=>600,8648=>600,8649=>600,8650=>600,8651=>600,8652=>600,8653=>600,8654=>600,8655=>600,8656=>600,8657=>600,8658=>600,8659=>600,8660=>600,8661=>600,8669=>600,8678=>600,8679=>600,8680=>600,8681=>600,8691=>600,8704=>600,8705=>600,8706=>600,8707=>600,8708=>600,8709=>600,8710=>600,8711=>600,8712=>600,8713=>600,8714=>600,8715=>600,8716=>600,8717=>600,8718=>600,8719=>600,8720=>600,8721=>600,8722=>600,8723=>600,8724=>600,8725=>600,8726=>600,8727=>600,8728=>600,8729=>600,8730=>600,8731=>600,8732=>600,8733=>600,8734=>600,8735=>600,8736=>600,8737=>600,8738=>600,8739=>600,8740=>600,8741=>600,8742=>600,8743=>600,8744=>600,8745=>600,8746=>600,8747=>600,8748=>600,8749=>600,8750=>600,8751=>600,8752=>600,8753=>600,8754=>600,8755=>600,8756=>600,8757=>600,8758=>600,8759=>600,8760=>600,8761=>600,8762=>600,8763=>600,8764=>600,8765=>600,8766=>600,8767=>600,8768=>600,8769=>600,8770=>600,8771=>600,8772=>600,8773=>600,8774=>600,8775=>600,8776=>600,8777=>600,8778=>600,8779=>600,8780=>600,8781=>600,8782=>600,8783=>600,8784=>600,8785=>600,8786=>600,8787=>600,8788=>600,8789=>600,8790=>600,8791=>600,8792=>600,8793=>600,8794=>600,8795=>600,8796=>600,8797=>600,8798=>600,8799=>600,8800=>600,8801=>600,8802=>600,8803=>600,8804=>600,8805=>600,8806=>600,8807=>600,8808=>600,8809=>600,8810=>600,8811=>600,8812=>600,8813=>600,8814=>600,8815=>600,8816=>600,8817=>600,8818=>600,8819=>600,8820=>600,8821=>600,8822=>600,8823=>600,8824=>600,8825=>600,8826=>600,8827=>600,8828=>600,8829=>600,8830=>600,8831=>600,8832=>600,8833=>600,8834=>600,8835=>600,8836=>600,8837=>600,8838=>600,8839=>600,8840=>600,8841=>600,8842=>600,8843=>600,8844=>600,8845=>600,8846=>600,8847=>600,8848=>600,8849=>600,8850=>600,8851=>600,8852=>600,8853=>600,8854=>600,8855=>600,8856=>600,8857=>600,8858=>600,8859=>600,8860=>600,8861=>600,8862=>600,8863=>600,8864=>600,8865=>600,8866=>600,8867=>600,8868=>600,8869=>600,8870=>600,8871=>600,8872=>600,8873=>600,8874=>600,8875=>600,8876=>600,8877=>600,8878=>600,8879=>600,8880=>600,8881=>600,8882=>600,8883=>600,8884=>600,8885=>600,8886=>600,8887=>600,8888=>600,8889=>600,8890=>600,8891=>600,8892=>600,8893=>600,8894=>600,8895=>600,8896=>600,8897=>600,8898=>600,8899=>600,8900=>600,8901=>600,8902=>600,8903=>600,8904=>600,8905=>600,8906=>600,8907=>600,8908=>600,8909=>600,8910=>600,8911=>600,8912=>600,8913=>600,8914=>600,8915=>600,8916=>600,8917=>600,8918=>600,8919=>600,8920=>600,8921=>600,8922=>600,8923=>600,8924=>600,8925=>600,8926=>600,8927=>600,8928=>600,8929=>600,8930=>600,8931=>600,8932=>600,8933=>600,8934=>600,8935=>600,8936=>600,8937=>600,8938=>600,8939=>600,8940=>600,8941=>600,8942=>600,8943=>600,8944=>600,8945=>600,8960=>600,8962=>600,8963=>600,8964=>600,8965=>600,8966=>600,8968=>600,8969=>600,8970=>600,8971=>600,8972=>600,8973=>600,8974=>600,8975=>600,8976=>600,8978=>600,8980=>600,8981=>600,8984=>600,8985=>600,8988=>600,8989=>600,8990=>600,8991=>600,8992=>600,8993=>600,8994=>600,8995=>600,8996=>600,8997=>600,8998=>600,8999=>600,9001=>600,9002=>600,9003=>600,9004=>600,9014=>600,9015=>600,9016=>600,9017=>600,9018=>600,9019=>600,9020=>600,9021=>600,9022=>600,9023=>600,9024=>600,9025=>600,9026=>600,9027=>600,9028=>600,9029=>600,9030=>600,9031=>600,9032=>600,9033=>600,9034=>600,9035=>600,9036=>600,9037=>600,9038=>600,9039=>600,9040=>600,9041=>600,9042=>600,9043=>600,9044=>600,9045=>600,9046=>600,9047=>600,9048=>600,9049=>600,9050=>600,9051=>600,9052=>600,9053=>600,9054=>600,9055=>600,9056=>600,9057=>600,9058=>600,9059=>600,9060=>600,9061=>600,9062=>600,9063=>600,9064=>600,9065=>600,9066=>600,9067=>600,9068=>600,9069=>600,9070=>600,9071=>600,9072=>600,9073=>600,9074=>600,9075=>600,9076=>600,9077=>600,9078=>600,9079=>600,9080=>600,9081=>600,9082=>600,9084=>600,9085=>600,9086=>600,9087=>600,9088=>600,9089=>600,9090=>600,9091=>600,9092=>600,9093=>600,9094=>600,9095=>600,9096=>600,9097=>600,9098=>600,9099=>600,9100=>600,9101=>600,9102=>600,9103=>600,9104=>600,9105=>600,9106=>600,9107=>600,9108=>600,9109=>600,9110=>600,9111=>600,9112=>600,9113=>600,9114=>600,9115=>600,9116=>600,9117=>600,9118=>600,9119=>600,9120=>600,9121=>600,9122=>600,9123=>600,9124=>600,9125=>600,9126=>600,9127=>600,9128=>600,9129=>600,9130=>600,9131=>600,9132=>600,9133=>600,9134=>600,9135=>600,9136=>600,9137=>600,9138=>600,9139=>600,9140=>600,9141=>600,9142=>600,9143=>600,9146=>600,9147=>600,9148=>600,9149=>600,9150=>600,9151=>600,9152=>600,9153=>600,9154=>600,9155=>600,9156=>600,9157=>600,9158=>600,9159=>600,9160=>600,9161=>600,9162=>600,9163=>600,9164=>600,9165=>600,9166=>600,9167=>600,9178=>600,9179=>600,9182=>600,9183=>600,9186=>600,9187=>600,9188=>600,9189=>600,9190=>600,9216=>600,9217=>600,9218=>600,9219=>600,9220=>600,9221=>600,9222=>600,9223=>600,9224=>600,9225=>600,9226=>600,9227=>600,9228=>600,9229=>600,9230=>600,9231=>600,9232=>600,9233=>600,9234=>600,9235=>600,9236=>600,9237=>600,9238=>600,9239=>600,9240=>600,9241=>600,9242=>600,9243=>600,9244=>600,9245=>600,9246=>600,9247=>600,9248=>600,9249=>600,9251=>600,9252=>600,9280=>600,9281=>600,9282=>600,9283=>600,9284=>600,9285=>600,9286=>600,9287=>600,9288=>600,9289=>600,9290=>600,9312=>600,9313=>600,9314=>600,9315=>600,9316=>600,9317=>600,9318=>600,9319=>600,9320=>600,9321=>600,9472=>600,9473=>600,9474=>600,9475=>600,9476=>600,9477=>600,9478=>600,9479=>600,9480=>600,9481=>600,9482=>600,9483=>600,9484=>600,9485=>600,9486=>600,9487=>600,9488=>600,9489=>600,9490=>600,9491=>600,9492=>600,9493=>600,9494=>600,9495=>600,9496=>600,9497=>600,9498=>600,9499=>600,9500=>600,9501=>600,9502=>600,9503=>600,9504=>600,9505=>600,9506=>600,9507=>600,9508=>600,9509=>600,9510=>600,9511=>600,9512=>600,9513=>600,9514=>600,9515=>600,9516=>600,9517=>600,9518=>600,9519=>600,9520=>600,9521=>600,9522=>600,9523=>600,9524=>600,9525=>600,9526=>600,9527=>600,9528=>600,9529=>600,9530=>600,9531=>600,9532=>600,9533=>600,9534=>600,9535=>600,9536=>600,9537=>600,9538=>600,9539=>600,9540=>600,9541=>600,9542=>600,9543=>600,9544=>600,9545=>600,9546=>600,9547=>600,9548=>600,9549=>600,9550=>600,9551=>600,9552=>600,9553=>600,9554=>600,9555=>600,9556=>600,9557=>600,9558=>600,9559=>600,9560=>600,9561=>600,9562=>600,9563=>600,9564=>600,9565=>600,9566=>600,9567=>600,9568=>600,9569=>600,9570=>600,9571=>600,9572=>600,9573=>600,9574=>600,9575=>600,9576=>600,9577=>600,9578=>600,9579=>600,9580=>600,9581=>600,9582=>600,9583=>600,9584=>600,9585=>600,9586=>600,9587=>600,9588=>600,9589=>600,9590=>600,9591=>600,9592=>600,9593=>600,9594=>600,9595=>600,9596=>600,9597=>600,9598=>600,9599=>600,9600=>600,9601=>600,9602=>600,9603=>600,9604=>600,9605=>600,9606=>600,9607=>600,9608=>600,9609=>600,9610=>600,9611=>600,9612=>600,9613=>600,9614=>600,9615=>600,9616=>600,9617=>600,9618=>600,9619=>600,9620=>600,9621=>600,9622=>600,9623=>600,9624=>600,9625=>600,9626=>600,9627=>600,9628=>600,9629=>600,9630=>600,9631=>600,9632=>600,9633=>600,9634=>600,9635=>600,9636=>600,9637=>600,9638=>600,9639=>600,9640=>600,9641=>600,9642=>600,9643=>600,9644=>600,9645=>600,9646=>600,9647=>600,9648=>600,9649=>600,9650=>600,9651=>600,9652=>600,9653=>600,9654=>600,9655=>600,9656=>600,9657=>600,9658=>600,9659=>600,9660=>600,9661=>600,9662=>600,9663=>600,9664=>600,9665=>600,9666=>600,9667=>600,9668=>600,9669=>600,9670=>600,9671=>600,9672=>600,9673=>600,9674=>600,9675=>600,9676=>600,9677=>600,9678=>600,9679=>600,9680=>600,9681=>600,9682=>600,9683=>600,9684=>600,9685=>600,9686=>600,9687=>600,9688=>600,9689=>600,9690=>600,9691=>600,9692=>600,9693=>600,9694=>600,9695=>600,9696=>600,9697=>600,9698=>600,9699=>600,9700=>600,9701=>600,9702=>600,9703=>600,9704=>600,9705=>600,9706=>600,9707=>600,9708=>600,9709=>600,9710=>600,9711=>600,9712=>600,9713=>600,9714=>600,9715=>600,9716=>600,9717=>600,9718=>600,9719=>600,9720=>600,9721=>600,9722=>600,9723=>600,9724=>600,9725=>600,9726=>600,9727=>600,9728=>600,9729=>600,9730=>600,9731=>600,9733=>600,9734=>600,9735=>600,9736=>600,9737=>600,9744=>600,9745=>600,9746=>600,9754=>600,9755=>600,9756=>600,9757=>600,9758=>600,9759=>600,9766=>600,9768=>600,9769=>600,9774=>600,9775=>600,9776=>600,9777=>600,9778=>600,9779=>600,9780=>600,9781=>600,9782=>600,9783=>600,9785=>600,9786=>600,9787=>600,9788=>600,9789=>600,9790=>600,9791=>600,9792=>600,9793=>600,9794=>600,9795=>600,9796=>600,9797=>600,9798=>600,9799=>600,9800=>600,9801=>600,9802=>600,9803=>600,9804=>600,9805=>600,9806=>600,9807=>600,9808=>600,9809=>600,9810=>600,9811=>600,9824=>600,9825=>600,9826=>600,9827=>600,9828=>600,9829=>600,9830=>600,9831=>600,9833=>600,9834=>600,9835=>600,9836=>600,9837=>600,9838=>600,9839=>600,9856=>600,9857=>600,9858=>600,9859=>600,9860=>600,9861=>600,10176=>600,10177=>600,10178=>600,10179=>600,10180=>600,10181=>600,10182=>600,10183=>600,10184=>600,10185=>600,10186=>600,10188=>600,10192=>600,10193=>600,10194=>600,10195=>600,10196=>600,10197=>600,10198=>600,10199=>600,10212=>600,10213=>600,10214=>600,10215=>600,10216=>600,10217=>600,10218=>600,10219=>600,10226=>600,10227=>600,10229=>600,10230=>600,10231=>600,10232=>600,10233=>600,10234=>600,10235=>600,10236=>600,10240=>600,10241=>600,10242=>600,10243=>600,10244=>600,10245=>600,10246=>600,10247=>600,10248=>600,10249=>600,10250=>600,10251=>600,10252=>600,10253=>600,10254=>600,10255=>600,10256=>600,10257=>600,10258=>600,10259=>600,10260=>600,10261=>600,10262=>600,10263=>600,10264=>600,10265=>600,10266=>600,10267=>600,10268=>600,10269=>600,10270=>600,10271=>600,10272=>600,10273=>600,10274=>600,10275=>600,10276=>600,10277=>600,10278=>600,10279=>600,10280=>600,10281=>600,10282=>600,10283=>600,10284=>600,10285=>600,10286=>600,10287=>600,10288=>600,10289=>600,10290=>600,10291=>600,10292=>600,10293=>600,10294=>600,10295=>600,10296=>600,10297=>600,10298=>600,10299=>600,10300=>600,10301=>600,10302=>600,10303=>600,10304=>600,10305=>600,10306=>600,10307=>600,10308=>600,10309=>600,10310=>600,10311=>600,10312=>600,10313=>600,10314=>600,10315=>600,10316=>600,10317=>600,10318=>600,10319=>600,10320=>600,10321=>600,10322=>600,10323=>600,10324=>600,10325=>600,10326=>600,10327=>600,10328=>600,10329=>600,10330=>600,10331=>600,10332=>600,10333=>600,10334=>600,10335=>600,10336=>600,10337=>600,10338=>600,10339=>600,10340=>600,10341=>600,10342=>600,10343=>600,10344=>600,10345=>600,10346=>600,10347=>600,10348=>600,10349=>600,10350=>600,10351=>600,10352=>600,10353=>600,10354=>600,10355=>600,10356=>600,10357=>600,10358=>600,10359=>600,10360=>600,10361=>600,10362=>600,10363=>600,10364=>600,10365=>600,10366=>600,10367=>600,10368=>600,10369=>600,10370=>600,10371=>600,10372=>600,10373=>600,10374=>600,10375=>600,10376=>600,10377=>600,10378=>600,10379=>600,10380=>600,10381=>600,10382=>600,10383=>600,10384=>600,10385=>600,10386=>600,10387=>600,10388=>600,10389=>600,10390=>600,10391=>600,10392=>600,10393=>600,10394=>600,10395=>600,10396=>600,10397=>600,10398=>600,10399=>600,10400=>600,10401=>600,10402=>600,10403=>600,10404=>600,10405=>600,10406=>600,10407=>600,10408=>600,10409=>600,10410=>600,10411=>600,10412=>600,10413=>600,10414=>600,10415=>600,10416=>600,10417=>600,10418=>600,10419=>600,10420=>600,10421=>600,10422=>600,10423=>600,10424=>600,10425=>600,10426=>600,10427=>600,10428=>600,10429=>600,10430=>600,10431=>600,10432=>600,10433=>600,10434=>600,10435=>600,10436=>600,10437=>600,10438=>600,10439=>600,10440=>600,10441=>600,10442=>600,10443=>600,10444=>600,10445=>600,10446=>600,10447=>600,10448=>600,10449=>600,10450=>600,10451=>600,10452=>600,10453=>600,10454=>600,10455=>600,10456=>600,10457=>600,10458=>600,10459=>600,10460=>600,10461=>600,10462=>600,10463=>600,10464=>600,10465=>600,10466=>600,10467=>600,10468=>600,10469=>600,10470=>600,10471=>600,10472=>600,10473=>600,10474=>600,10475=>600,10476=>600,10477=>600,10478=>600,10479=>600,10480=>600,10481=>600,10482=>600,10483=>600,10484=>600,10485=>600,10486=>600,10487=>600,10488=>600,10489=>600,10490=>600,10491=>600,10492=>600,10493=>600,10494=>600,10495=>600,10752=>600,10753=>600,10754=>600,10755=>600,10756=>600,10757=>600,10758=>600,10781=>600,10815=>600,11008=>600,11009=>600,11010=>600,11011=>600,11012=>600,11013=>600,11014=>600,11015=>600,11016=>600,11017=>600,11018=>600,11019=>600,11020=>600,11021=>600,11026=>600,11027=>600,11028=>600,11029=>600,11030=>600,11031=>600,11032=>600,11033=>600,11035=>600,11036=>600,11037=>600,11038=>600,11039=>600,11040=>600,11041=>600,11042=>600,11043=>600,11044=>600,11045=>600,11046=>600,11047=>600,11048=>600,11049=>600,11050=>600,11051=>600,11091=>600,11092=>600,11799=>600,42888=>600,42889=>600,42890=>600,42891=>600,42892=>600,43264=>600,43265=>600,43266=>600,43267=>600,43268=>600,43269=>600,43270=>600,43271=>600,43272=>600,43273=>600,43274=>600,43275=>600,43276=>600,43277=>600,43278=>600,43279=>600,43280=>600,43281=>600,43282=>600,43283=>600,43284=>600,43285=>600,43286=>600,43287=>600,43288=>600,43289=>600,43290=>600,43291=>600,43292=>600,43293=>600,43294=>600,43295=>600,43296=>600,43297=>600,43298=>600,43299=>600,43300=>600,43301=>600,43302=>0,43303=>0,43304=>0,43305=>0,43306=>0,43307=>0,43308=>0,43309=>0,43310=>600,43311=>600,64256=>600,64257=>600,64258=>600,64259=>600,64260=>600,64261=>600,64285=>600,64286=>600,64287=>600,64288=>600,64289=>600,64290=>600,64291=>600,64292=>600,64293=>600,64294=>600,64295=>600,64296=>600,64297=>600,64298=>600,64299=>600,64300=>600,64301=>600,64302=>600,64303=>600,64304=>600,64305=>600,64306=>600,64307=>600,64308=>600,64309=>600,64310=>600,64312=>600,64313=>600,64314=>600,64315=>600,64316=>600,64318=>600,64320=>600,64321=>600,64323=>600,64324=>600,64326=>600,64327=>600,64328=>600,64329=>600,64330=>600,64331=>600,64332=>600,64333=>600,64334=>600,64335=>600,65533=>600,65535=>600);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/freemono.z b/lib/tcpdf/fonts/freemono.z
index 0353139dcea..838e966810a 100644
Binary files a/lib/tcpdf/fonts/freemono.z and b/lib/tcpdf/fonts/freemono.z differ
diff --git a/lib/tcpdf/fonts/freemonob.ctg.z b/lib/tcpdf/fonts/freemonob.ctg.z
index 40443bbefa6..c7b4fca69f9 100644
Binary files a/lib/tcpdf/fonts/freemonob.ctg.z and b/lib/tcpdf/fonts/freemonob.ctg.z differ
diff --git a/lib/tcpdf/fonts/freemonob.php b/lib/tcpdf/fonts/freemonob.php
index 3d4cfe40a3d..9e36ea91237 100644
--- a/lib/tcpdf/fonts/freemonob.php
+++ b/lib/tcpdf/fonts/freemonob.php
@@ -1,204 +1,15 @@
800,'Descent'=>-200,'CapHeight'=>10,'Flags'=>32,'FontBBox'=>'[-604 -200 754 800]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600);
$up=-125;
$ut=50;
$dw=600;
-$cw=array(
-32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,
-42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,
-52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,
-62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,
-72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,
-82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,
-92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,
-102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,
-112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,
-122=>600,123=>600,124=>600,125=>600,126=>600,8364=>600,8218=>600,402=>600,8222=>600,8230=>600,
-8224=>600,8225=>600,710=>600,8240=>600,352=>600,8249=>600,338=>600,381=>600,8216=>600,8217=>600,
-8220=>600,8221=>600,8226=>600,8211=>600,8212=>600,732=>600,8482=>600,353=>600,8250=>600,339=>600,
-382=>600,376=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,
-168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,
-178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,
-188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,
-198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,
-208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,
-218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,
-228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,
-238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,
-248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,257=>600,
-258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,267=>600,
-268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,277=>600,
-278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,287=>600,
-288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,297=>600,
-298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,307=>600,
-308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,317=>600,
-318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,327=>600,
-328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,337=>600,
-340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,349=>600,
-350=>600,351=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,361=>600,
-362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,371=>600,
-372=>600,373=>600,374=>600,375=>600,377=>600,378=>600,379=>600,380=>600,383=>600,384=>600,
-385=>600,386=>600,387=>600,388=>600,389=>600,390=>600,391=>600,392=>600,393=>600,394=>600,
-395=>600,396=>600,397=>600,398=>600,399=>600,400=>600,401=>600,403=>600,404=>600,405=>600,
-406=>600,407=>600,408=>600,409=>600,410=>600,411=>600,412=>600,413=>600,414=>600,415=>600,
-416=>600,417=>600,418=>600,419=>600,420=>600,421=>600,422=>600,423=>600,424=>600,425=>600,
-426=>600,427=>600,428=>600,429=>600,430=>600,431=>600,432=>600,433=>600,434=>600,435=>600,
-436=>600,437=>600,438=>600,439=>600,440=>600,441=>600,442=>600,443=>600,444=>600,445=>600,
-446=>600,447=>600,448=>600,449=>600,450=>600,451=>600,452=>600,453=>600,454=>600,455=>600,
-456=>600,457=>600,458=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,465=>600,
-466=>600,467=>600,468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,475=>600,
-476=>600,477=>600,478=>600,479=>600,480=>600,481=>600,482=>600,483=>600,484=>600,485=>600,
-486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,492=>600,493=>600,494=>600,495=>600,
-496=>600,497=>600,498=>600,499=>600,500=>600,501=>600,502=>600,503=>600,504=>600,505=>600,
-506=>600,507=>600,508=>600,509=>600,510=>600,511=>600,512=>600,513=>600,514=>600,515=>600,
-516=>600,517=>600,518=>600,519=>600,520=>600,521=>600,522=>600,523=>600,524=>600,525=>600,
-526=>600,527=>600,528=>600,529=>600,530=>600,531=>600,532=>600,533=>600,534=>600,535=>600,
-536=>600,537=>600,538=>600,539=>600,540=>600,541=>600,542=>600,543=>600,548=>600,549=>600,
-550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,556=>600,557=>600,558=>600,559=>600,
-560=>600,561=>600,562=>600,563=>600,567=>600,592=>600,593=>600,594=>600,595=>600,596=>600,
-598=>600,599=>600,600=>600,601=>600,603=>600,604=>600,607=>600,608=>600,609=>600,613=>600,
-614=>600,615=>600,616=>600,617=>600,618=>600,619=>600,621=>600,623=>600,624=>600,625=>600,
-626=>600,627=>600,628=>600,629=>600,633=>600,634=>600,635=>600,636=>600,637=>600,638=>600,
-639=>600,640=>600,641=>600,642=>600,643=>600,644=>600,645=>600,647=>600,648=>600,649=>600,
-652=>600,653=>600,654=>600,656=>600,657=>600,658=>600,659=>600,660=>600,661=>600,662=>600,
-663=>600,664=>600,665=>600,666=>600,667=>600,668=>600,669=>600,670=>600,671=>600,672=>600,
-673=>600,674=>600,688=>600,689=>600,690=>600,691=>600,692=>600,693=>600,694=>600,695=>600,
-696=>600,697=>600,698=>600,699=>600,700=>600,701=>600,702=>600,703=>600,704=>600,705=>600,
-706=>600,707=>600,708=>600,709=>600,711=>600,712=>600,713=>600,714=>600,715=>600,716=>600,
-717=>600,718=>600,719=>600,720=>600,721=>600,722=>600,723=>600,724=>600,725=>600,726=>600,
-727=>600,728=>600,729=>600,730=>600,731=>600,733=>600,734=>600,735=>600,736=>600,737=>600,
-738=>600,739=>600,740=>600,741=>600,742=>600,743=>600,744=>600,745=>600,746=>600,747=>600,
-748=>600,749=>600,750=>600,751=>600,752=>600,753=>600,754=>600,755=>600,756=>600,757=>600,
-758=>600,759=>600,760=>600,761=>600,762=>600,763=>600,764=>600,765=>600,766=>600,767=>600,
-768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,
-778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,
-788=>0,789=>0,790=>0,791=>0,795=>0,796=>0,800=>0,801=>0,802=>0,803=>0,
-804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,812=>0,813=>0,814=>0,
-815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,826=>0,
-827=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,838=>0,839=>0,840=>0,
-844=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,884=>600,885=>600,
-890=>600,894=>600,900=>600,901=>600,902=>600,903=>600,904=>600,905=>600,906=>600,908=>600,
-910=>600,911=>600,912=>600,913=>600,914=>600,915=>600,916=>600,917=>600,918=>600,919=>600,
-920=>600,921=>600,922=>600,923=>600,924=>600,925=>600,926=>600,927=>600,928=>600,929=>600,
-931=>600,932=>600,933=>600,934=>600,935=>600,936=>600,937=>600,938=>600,939=>600,940=>600,
-941=>600,942=>600,943=>600,944=>600,945=>600,946=>600,947=>600,948=>600,949=>600,950=>600,
-951=>600,952=>600,953=>600,954=>600,955=>600,956=>600,957=>600,958=>600,959=>600,960=>600,
-961=>600,962=>600,963=>600,964=>600,965=>600,966=>600,967=>600,968=>600,969=>600,970=>600,
-971=>600,972=>600,973=>600,974=>600,976=>600,977=>600,978=>600,979=>600,980=>600,981=>600,
-982=>600,986=>600,987=>600,988=>600,1008=>600,1009=>600,1012=>600,1013=>600,1024=>600,1025=>600,
-1026=>600,1027=>600,1028=>600,1029=>600,1030=>600,1031=>600,1032=>600,1033=>600,1034=>600,1035=>600,
-1036=>600,1037=>600,1038=>600,1039=>600,1040=>600,1041=>600,1042=>600,1043=>600,1044=>600,1045=>600,
-1046=>600,1047=>600,1048=>600,1049=>600,1050=>600,1051=>600,1052=>600,1053=>600,1054=>600,1055=>600,
-1056=>600,1057=>600,1058=>600,1059=>600,1060=>600,1061=>600,1062=>600,1063=>600,1064=>600,1065=>600,
-1066=>600,1067=>600,1068=>600,1069=>600,1070=>600,1071=>600,1072=>600,1073=>600,1074=>600,1075=>600,
-1076=>600,1077=>600,1078=>600,1079=>600,1080=>600,1081=>600,1082=>600,1083=>600,1084=>600,1085=>600,
-1086=>600,1087=>600,1088=>600,1089=>600,1090=>600,1091=>600,1092=>600,1093=>600,1094=>600,1095=>600,
-1096=>600,1097=>600,1098=>600,1099=>600,1100=>600,1101=>600,1102=>600,1103=>600,1104=>600,1105=>600,
-1106=>600,1107=>600,1108=>600,1109=>600,1110=>600,1111=>600,1112=>600,1113=>600,1114=>600,1115=>600,
-1116=>600,1117=>600,1118=>600,1119=>600,1136=>600,1137=>600,1138=>600,1156=>0,1157=>0,1158=>0,
-1162=>600,1163=>600,1164=>600,1165=>600,1166=>600,1167=>600,1168=>600,1169=>600,1170=>600,1171=>600,
-1172=>600,1173=>600,1174=>600,1175=>600,1176=>600,1177=>600,1178=>600,1179=>600,1180=>600,1181=>600,
-1182=>600,1183=>600,1184=>600,1185=>600,1186=>600,1187=>600,1188=>600,1189=>600,1190=>600,1191=>600,
-1192=>600,1193=>600,1194=>600,1195=>600,1196=>600,1197=>600,1198=>600,1199=>600,1200=>600,1201=>600,
-1202=>600,1203=>600,1204=>600,1205=>600,1206=>600,1207=>600,1208=>600,1209=>600,1210=>600,1211=>600,
-1212=>600,1213=>600,1214=>600,1215=>600,1216=>600,1217=>600,1218=>600,1219=>600,1220=>600,1221=>600,
-1222=>600,1223=>600,1224=>600,1225=>600,1226=>600,1227=>600,1228=>600,1229=>600,1230=>600,1231=>600,
-1232=>600,1233=>600,1234=>600,1235=>600,1236=>600,1237=>600,1238=>600,1239=>600,1240=>600,1241=>600,
-1242=>600,1243=>600,1244=>600,1245=>600,1246=>600,1247=>600,1248=>600,1249=>600,1250=>600,1251=>600,
-1252=>600,1253=>600,1254=>600,1255=>600,1256=>600,1257=>600,1258=>600,1259=>600,1260=>600,1261=>600,
-1262=>600,1263=>600,1264=>600,1265=>600,1266=>600,1267=>600,1268=>600,1269=>600,1270=>600,1271=>600,
-1272=>600,1273=>600,1296=>600,1297=>600,1298=>600,1299=>600,1306=>600,1307=>600,1308=>600,1309=>600,
-1310=>600,1311=>600,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,
-1464=>0,1465=>0,1467=>0,1468=>0,1469=>0,1470=>600,1471=>0,1472=>600,1473=>0,1474=>0,
-1475=>600,1476=>0,1488=>600,1489=>600,1490=>600,1491=>600,1492=>600,1493=>600,1494=>600,1495=>600,
-1496=>600,1497=>600,1498=>600,1499=>600,1500=>600,1501=>600,1502=>600,1503=>600,1504=>600,1505=>600,
-1506=>600,1507=>600,1508=>600,1509=>600,1510=>600,1511=>600,1512=>600,1513=>600,1514=>600,1520=>600,
-1521=>600,1522=>600,1523=>600,1524=>600,4304=>600,4305=>600,4306=>600,4307=>600,4308=>600,4309=>600,
-4310=>600,4311=>600,4312=>600,4313=>600,4314=>600,4315=>600,4316=>600,4317=>600,4318=>600,4319=>600,
-4320=>600,4321=>600,4322=>600,4323=>600,4324=>600,4325=>600,4326=>600,4327=>600,4328=>600,4329=>600,
-4330=>600,4331=>600,4332=>600,4333=>600,4334=>600,4335=>600,4336=>600,4337=>600,4338=>600,4339=>600,
-4340=>600,4341=>600,4345=>600,4347=>600,7680=>600,7681=>600,7682=>600,7683=>600,7684=>600,7685=>600,
-7686=>600,7687=>600,7688=>600,7689=>600,7690=>600,7691=>600,7692=>600,7693=>600,7694=>600,7695=>600,
-7696=>600,7697=>600,7698=>600,7699=>600,7700=>600,7701=>600,7702=>600,7703=>600,7704=>600,7705=>600,
-7706=>600,7707=>600,7708=>600,7709=>600,7710=>600,7711=>600,7712=>600,7713=>600,7714=>600,7715=>600,
-7716=>600,7717=>600,7718=>600,7719=>600,7720=>600,7721=>600,7722=>600,7723=>600,7724=>600,7725=>600,
-7726=>600,7727=>600,7728=>600,7729=>600,7730=>600,7731=>600,7732=>600,7733=>600,7734=>600,7735=>600,
-7736=>600,7737=>600,7738=>600,7739=>600,7740=>600,7741=>600,7742=>600,7743=>600,7744=>600,7745=>600,
-7746=>600,7747=>600,7748=>600,7749=>600,7750=>600,7751=>600,7752=>600,7753=>600,7754=>600,7755=>600,
-7756=>600,7757=>600,7758=>600,7759=>600,7760=>600,7761=>600,7762=>600,7763=>600,7764=>600,7765=>600,
-7766=>600,7767=>600,7768=>600,7769=>600,7770=>600,7771=>600,7772=>600,7773=>600,7774=>600,7775=>600,
-7776=>600,7777=>600,7778=>600,7779=>600,7780=>600,7781=>600,7782=>600,7783=>600,7784=>600,7785=>600,
-7786=>600,7787=>600,7788=>600,7789=>600,7790=>600,7791=>600,7792=>600,7793=>600,7794=>600,7795=>600,
-7796=>600,7797=>600,7798=>600,7799=>600,7800=>600,7801=>600,7802=>600,7803=>600,7804=>600,7805=>600,
-7806=>600,7807=>600,7808=>600,7809=>600,7810=>600,7811=>600,7812=>600,7813=>600,7814=>600,7815=>600,
-7816=>600,7817=>600,7818=>600,7819=>600,7820=>600,7821=>600,7822=>600,7823=>600,7824=>600,7825=>600,
-7826=>600,7827=>600,7828=>600,7829=>600,7830=>600,7831=>600,7832=>600,7833=>600,7834=>600,7835=>600,
-7840=>600,7841=>600,7842=>600,7843=>600,7844=>600,7845=>600,7846=>600,7847=>600,7848=>600,7849=>600,
-7850=>600,7851=>600,7852=>600,7853=>600,7854=>600,7855=>600,7856=>600,7857=>600,7858=>600,7859=>600,
-7860=>600,7861=>600,7862=>600,7863=>600,7864=>600,7865=>600,7866=>600,7867=>600,7868=>600,7869=>600,
-7870=>600,7871=>600,7872=>600,7873=>600,7874=>600,7875=>600,7876=>600,7877=>600,7878=>600,7879=>600,
-7880=>600,7881=>600,7882=>600,7883=>600,7884=>600,7885=>600,7886=>600,7887=>600,7888=>600,7889=>600,
-7890=>600,7891=>600,7892=>600,7893=>600,7894=>600,7895=>600,7896=>600,7897=>600,7898=>600,7899=>600,
-7900=>600,7901=>600,7902=>600,7903=>600,7904=>600,7905=>600,7906=>600,7907=>600,7908=>600,7909=>600,
-7910=>600,7911=>600,7912=>600,7913=>600,7914=>600,7915=>600,7916=>600,7917=>600,7918=>600,7919=>600,
-7920=>600,7921=>600,7922=>600,7923=>600,7924=>600,7925=>600,7926=>600,7927=>600,7928=>600,7929=>600,
-8192=>600,8193=>600,8194=>600,8195=>600,8196=>600,8197=>600,8198=>600,8199=>600,8200=>600,8201=>600,
-8202=>600,8203=>600,8204=>0,8205=>0,8206=>0,8207=>0,8208=>600,8209=>600,8210=>600,8213=>600,
-8214=>600,8215=>600,8219=>600,8223=>600,8227=>600,8228=>600,8229=>600,8231=>600,8232=>600,8233=>600,
-8234=>600,8235=>600,8236=>600,8237=>600,8238=>600,8239=>600,8241=>600,8242=>600,8243=>600,8244=>600,
-8245=>600,8246=>600,8247=>600,8248=>600,8251=>600,8252=>600,8253=>600,8254=>600,8255=>600,8256=>600,
-8257=>600,8258=>600,8259=>600,8260=>600,8261=>600,8262=>600,8263=>600,8264=>600,8265=>600,8266=>600,
-8267=>600,8268=>600,8269=>600,8270=>600,8271=>600,8272=>600,8273=>600,8274=>600,8275=>600,8276=>600,
-8277=>600,8278=>600,8279=>600,8280=>600,8281=>600,8282=>600,8283=>600,8284=>600,8285=>600,8286=>600,
-8287=>600,8288=>600,8289=>600,8290=>600,8291=>600,8292=>600,8298=>600,8299=>600,8300=>600,8301=>600,
-8302=>600,8303=>600,8304=>600,8305=>600,8308=>600,8309=>600,8310=>600,8311=>600,8312=>600,8313=>600,
-8314=>600,8315=>600,8316=>600,8317=>600,8318=>600,8319=>600,8320=>600,8321=>600,8322=>600,8323=>600,
-8324=>600,8325=>600,8326=>600,8327=>600,8328=>600,8329=>600,8330=>600,8331=>600,8332=>600,8333=>600,
-8334=>600,8336=>600,8337=>600,8338=>600,8339=>600,8340=>600,8355=>600,8356=>600,8362=>600,8373=>600,
-8448=>600,8449=>600,8451=>600,8453=>600,8454=>600,8457=>600,8465=>600,8466=>600,8470=>600,8472=>600,
-8476=>600,8481=>600,8486=>600,8487=>600,8489=>600,8490=>600,8491=>600,8498=>600,8501=>600,8502=>600,
-8503=>600,8504=>600,8506=>600,8507=>600,8523=>600,8531=>600,8532=>600,8533=>600,8534=>600,8535=>600,
-8536=>600,8537=>600,8538=>600,8539=>600,8540=>600,8541=>600,8542=>600,8543=>600,8544=>600,8545=>600,
-8546=>600,8547=>600,8548=>600,8549=>600,8550=>600,8553=>600,8556=>600,8557=>600,8558=>600,8559=>600,
-8560=>600,8564=>600,8569=>600,8572=>600,8573=>600,8574=>600,8575=>600,8592=>600,8593=>600,8594=>600,
-8595=>600,8704=>600,8706=>600,8707=>600,8709=>600,8710=>600,8711=>600,8712=>600,8713=>600,8715=>600,
-8716=>600,8721=>600,8722=>600,8723=>600,8725=>600,8730=>600,8733=>600,8734=>600,8735=>600,8756=>600,
-8800=>600,8801=>600,8804=>600,8805=>600,8834=>600,8835=>600,8836=>600,8837=>600,8838=>600,8839=>600,
-8869=>600,8976=>600,9001=>600,9002=>600,9251=>600,9472=>600,9473=>600,9474=>600,9475=>600,9476=>600,
-9477=>600,9478=>600,9479=>600,9480=>600,9481=>600,9482=>600,9483=>600,9484=>600,9485=>600,9486=>600,
-9487=>600,9488=>600,9489=>600,9490=>600,9491=>600,9492=>600,9493=>600,9494=>600,9495=>600,9496=>600,
-9497=>600,9498=>600,9499=>600,9500=>600,9501=>600,9502=>600,9503=>600,9504=>600,9505=>600,9506=>600,
-9507=>600,9508=>600,9509=>600,9510=>600,9511=>600,9512=>600,9513=>600,9514=>600,9515=>600,9516=>600,
-9517=>600,9518=>600,9519=>600,9520=>600,9521=>600,9522=>600,9523=>600,9524=>600,9525=>600,9526=>600,
-9527=>600,9528=>600,9529=>600,9530=>600,9531=>600,9532=>600,9533=>600,9534=>600,9535=>600,9536=>600,
-9537=>600,9538=>600,9539=>600,9540=>600,9541=>600,9542=>600,9543=>600,9544=>600,9545=>600,9546=>600,
-9547=>600,9548=>600,9549=>600,9550=>600,9551=>600,9552=>600,9553=>600,9554=>600,9555=>600,9556=>600,
-9557=>600,9558=>600,9559=>600,9560=>600,9561=>600,9562=>600,9563=>600,9564=>600,9565=>600,9566=>600,
-9567=>600,9568=>600,9569=>600,9570=>600,9571=>600,9572=>600,9573=>600,9574=>600,9575=>600,9576=>600,
-9577=>600,9578=>600,9579=>600,9580=>600,9581=>600,9582=>600,9583=>600,9584=>600,9585=>600,9586=>600,
-9587=>600,9588=>600,9589=>600,9590=>600,9591=>600,9592=>600,9593=>600,9594=>600,9595=>600,9596=>600,
-9597=>600,9598=>600,9599=>600,9600=>600,9601=>600,9602=>600,9603=>600,9604=>600,9605=>600,9606=>600,
-9607=>600,9608=>600,9609=>600,9610=>600,9611=>600,9612=>600,9613=>600,9614=>600,9615=>600,9616=>600,
-9617=>600,9618=>600,9619=>600,9620=>600,9621=>600,9632=>600,9633=>600,9635=>600,9636=>600,9637=>600,
-9638=>600,9639=>600,9640=>600,9641=>600,9642=>600,9643=>600,9644=>600,9645=>600,9646=>600,9647=>600,
-9648=>600,9649=>600,9650=>600,9651=>600,9652=>600,9653=>600,9654=>600,9655=>600,9656=>600,9657=>600,
-9658=>600,9660=>600,9661=>600,9662=>600,9663=>600,9664=>600,9665=>600,9666=>600,9667=>600,9668=>600,
-9669=>600,9670=>600,9671=>600,9673=>600,9674=>600,9675=>600,9677=>600,9679=>600,9680=>600,9681=>600,
-9682=>600,9683=>600,9684=>600,9685=>600,9686=>600,9687=>600,9688=>600,9689=>600,9698=>600,9699=>600,
-9700=>600,9701=>600,9702=>600,9703=>600,9704=>600,9705=>600,9706=>600,9707=>600,9708=>600,9709=>600,
-9710=>600,9712=>600,9713=>600,9714=>600,9715=>600,9716=>600,9717=>600,9718=>600,9719=>600,9735=>600,
-9736=>600,9737=>600,9776=>600,9777=>600,9778=>600,9779=>600,9780=>600,9781=>600,9782=>600,9783=>600,
-9785=>600,9786=>600,9787=>600,9824=>600,9825=>600,9826=>600,9827=>600,9828=>600,9829=>600,9830=>600,
-9831=>600,9833=>600,9834=>600,9835=>600,9836=>600,9837=>600,9838=>600,9839=>600,64256=>600,64257=>600,
-64258=>600,64285=>600,64287=>600,64288=>600,64298=>600,64299=>600,64300=>600,64301=>600,64302=>600,64303=>600,
-64304=>600,64305=>600,64306=>600,64307=>600,64308=>600,64309=>600,64310=>600,64312=>600,64313=>600,64314=>600,
-64315=>600,64316=>600,64318=>600,64320=>600,64321=>600,64323=>600,64324=>600,64326=>600,64327=>600,64328=>600,
-64329=>600,64330=>600,64331=>600,64332=>600,64333=>600,64334=>600,64335=>600,65533=>600);
-$enc='';
$diff='';
+$originalsize=173608;
+$enc='';
$file='freemonob.z';
$ctg='freemonob.ctg.z';
-$originalsize=164212;
-?>
\ No newline at end of file
+$desc=array('Flags'=>33,'FontBBox'=>'[-600 -200 736 800]','ItalicAngle'=>0,'Ascent'=>800,'Descent'=>-200,'Leading'=>90,'CapHeight'=>583,'XHeight'=>437,'StemV'=>123,'StemH'=>53,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600);
+$cw=array(0=>0,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>0,9=>600,10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600,20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>0,30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600,136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600,145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600,154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,257=>600,258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,267=>600,268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,277=>600,278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,287=>600,288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,297=>600,298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,307=>600,308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,317=>600,318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,327=>600,328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,337=>600,338=>600,339=>600,340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,349=>600,350=>600,351=>600,352=>600,353=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,361=>600,362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,371=>600,372=>600,373=>600,374=>600,375=>600,376=>600,377=>600,378=>600,379=>600,380=>600,381=>600,382=>600,383=>600,384=>600,385=>600,386=>600,387=>600,388=>600,389=>600,390=>600,391=>600,392=>600,393=>600,394=>600,395=>600,396=>600,397=>600,398=>600,399=>600,400=>600,401=>600,402=>600,403=>600,404=>600,405=>600,406=>600,407=>600,408=>600,409=>600,410=>600,411=>600,412=>600,413=>600,414=>600,415=>600,416=>600,417=>600,418=>600,419=>600,420=>600,421=>600,422=>600,423=>600,424=>600,425=>600,426=>600,427=>600,428=>600,429=>600,430=>600,431=>600,432=>600,433=>600,434=>600,435=>600,436=>600,437=>600,438=>600,439=>600,440=>600,441=>600,442=>600,443=>600,444=>600,445=>600,446=>600,447=>600,448=>600,449=>600,450=>600,451=>600,452=>600,453=>600,454=>600,455=>600,456=>600,457=>600,458=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,465=>600,466=>600,467=>600,468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,475=>600,476=>600,477=>600,478=>600,479=>600,480=>600,481=>600,482=>600,483=>600,484=>600,485=>600,486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,492=>600,493=>600,494=>600,495=>600,496=>600,497=>600,498=>600,499=>600,500=>600,501=>600,502=>600,503=>600,504=>600,505=>600,506=>600,507=>600,508=>600,509=>600,510=>600,511=>600,512=>600,513=>600,514=>600,515=>600,516=>600,517=>600,518=>600,519=>600,520=>600,521=>600,522=>600,523=>600,524=>600,525=>600,526=>600,527=>600,528=>600,529=>600,530=>600,531=>600,532=>600,533=>600,534=>600,535=>600,536=>600,537=>600,538=>600,539=>600,540=>600,541=>600,542=>600,543=>600,544=>600,548=>600,549=>600,550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,556=>600,557=>600,558=>600,559=>600,560=>600,561=>600,562=>600,563=>600,567=>600,592=>600,593=>600,594=>600,595=>600,596=>600,598=>600,599=>600,600=>600,601=>600,603=>600,604=>600,607=>600,608=>600,609=>600,613=>600,614=>600,615=>600,616=>600,617=>600,618=>600,619=>600,621=>600,623=>600,624=>600,625=>600,626=>600,627=>600,628=>600,629=>600,633=>600,634=>600,635=>600,636=>600,637=>600,638=>600,639=>600,640=>600,641=>600,642=>600,643=>600,644=>600,645=>600,647=>600,648=>600,649=>600,652=>600,653=>600,654=>600,656=>600,657=>600,658=>600,659=>600,660=>600,661=>600,662=>600,663=>600,664=>600,665=>600,666=>600,667=>600,668=>600,669=>600,670=>600,671=>600,672=>600,673=>600,674=>600,688=>600,689=>600,690=>600,691=>600,692=>600,693=>600,694=>600,695=>600,696=>600,697=>600,698=>600,699=>600,700=>600,701=>600,702=>600,703=>600,704=>600,705=>600,706=>600,707=>600,708=>600,709=>600,710=>600,711=>600,712=>600,713=>600,714=>600,715=>600,716=>600,717=>600,718=>600,719=>600,720=>600,721=>600,722=>600,723=>600,724=>600,725=>600,726=>600,727=>600,728=>600,729=>600,730=>600,731=>600,732=>600,733=>600,734=>600,735=>600,736=>600,737=>600,738=>600,739=>600,740=>600,741=>600,742=>600,743=>600,744=>600,745=>600,746=>600,747=>600,748=>600,749=>600,750=>600,751=>600,752=>600,753=>600,754=>600,755=>600,756=>600,757=>600,758=>600,759=>600,760=>600,761=>600,762=>600,763=>600,764=>600,765=>600,766=>600,767=>600,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,843=>0,844=>0,845=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,884=>600,885=>600,890=>600,894=>600,900=>600,901=>600,902=>600,903=>600,904=>600,905=>600,906=>600,908=>600,910=>600,911=>600,912=>600,913=>600,914=>600,915=>600,916=>600,917=>600,918=>600,919=>600,920=>600,921=>600,922=>600,923=>600,924=>600,925=>600,926=>600,927=>600,928=>600,929=>600,931=>600,932=>600,933=>600,934=>600,935=>600,936=>600,937=>600,938=>600,939=>600,940=>600,941=>600,942=>600,943=>600,944=>600,945=>600,946=>600,947=>600,948=>600,949=>600,950=>600,951=>600,952=>600,953=>600,954=>600,955=>600,956=>600,957=>600,958=>600,959=>600,960=>600,961=>600,962=>600,963=>600,964=>600,965=>600,966=>600,967=>600,968=>600,969=>600,970=>600,971=>600,972=>600,973=>600,974=>600,976=>600,977=>600,978=>600,979=>600,980=>600,981=>600,982=>600,986=>600,987=>600,988=>600,1008=>600,1009=>600,1012=>600,1013=>600,1024=>600,1025=>600,1026=>600,1027=>600,1028=>600,1029=>600,1030=>600,1031=>600,1032=>600,1033=>600,1034=>600,1035=>600,1036=>600,1037=>600,1038=>600,1039=>600,1040=>600,1041=>600,1042=>600,1043=>600,1044=>600,1045=>600,1046=>600,1047=>600,1048=>600,1049=>600,1050=>600,1051=>600,1052=>600,1053=>600,1054=>600,1055=>600,1056=>600,1057=>600,1058=>600,1059=>600,1060=>600,1061=>600,1062=>600,1063=>600,1064=>600,1065=>600,1066=>600,1067=>600,1068=>600,1069=>600,1070=>600,1071=>600,1072=>600,1073=>600,1074=>600,1075=>600,1076=>600,1077=>600,1078=>600,1079=>600,1080=>600,1081=>600,1082=>600,1083=>600,1084=>600,1085=>600,1086=>600,1087=>600,1088=>600,1089=>600,1090=>600,1091=>600,1092=>600,1093=>600,1094=>600,1095=>600,1096=>600,1097=>600,1098=>600,1099=>600,1100=>600,1101=>600,1102=>600,1103=>600,1104=>600,1105=>600,1106=>600,1107=>600,1108=>600,1109=>600,1110=>600,1111=>600,1112=>600,1113=>600,1114=>600,1115=>600,1116=>600,1117=>600,1118=>600,1119=>600,1136=>600,1137=>600,1138=>600,1156=>0,1157=>0,1158=>0,1162=>600,1163=>600,1164=>600,1165=>600,1166=>600,1167=>600,1168=>600,1169=>600,1170=>600,1171=>600,1172=>600,1173=>600,1174=>600,1175=>600,1176=>600,1177=>600,1178=>600,1179=>600,1180=>600,1181=>600,1182=>600,1183=>600,1184=>600,1185=>600,1186=>600,1187=>600,1188=>600,1189=>600,1190=>600,1191=>600,1192=>600,1193=>600,1194=>600,1195=>600,1196=>600,1197=>600,1198=>600,1199=>600,1200=>600,1201=>600,1202=>600,1203=>600,1204=>600,1205=>600,1206=>600,1207=>600,1208=>600,1209=>600,1210=>600,1211=>600,1212=>600,1213=>600,1214=>600,1215=>600,1216=>600,1217=>600,1218=>600,1219=>600,1220=>600,1221=>600,1222=>600,1223=>600,1224=>600,1225=>600,1226=>600,1227=>600,1228=>600,1229=>600,1230=>600,1231=>600,1232=>600,1233=>600,1234=>600,1235=>600,1236=>600,1237=>600,1238=>600,1239=>600,1240=>600,1241=>600,1242=>600,1243=>600,1244=>600,1245=>600,1246=>600,1247=>600,1248=>600,1249=>600,1250=>600,1251=>600,1252=>600,1253=>600,1254=>600,1255=>600,1256=>600,1257=>600,1258=>600,1259=>600,1260=>600,1261=>600,1262=>600,1263=>600,1264=>600,1265=>600,1266=>600,1267=>600,1268=>600,1269=>600,1270=>600,1271=>600,1272=>600,1273=>600,1296=>600,1297=>600,1298=>600,1299=>600,1306=>600,1307=>600,1308=>600,1309=>600,1310=>600,1311=>600,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0,1470=>600,1471=>0,1472=>600,1473=>0,1474=>0,1475=>600,1476=>0,1488=>600,1489=>600,1490=>600,1491=>600,1492=>600,1493=>600,1494=>600,1495=>600,1496=>600,1497=>600,1498=>600,1499=>600,1500=>600,1501=>600,1502=>600,1503=>600,1504=>600,1505=>600,1506=>600,1507=>600,1508=>600,1509=>600,1510=>600,1511=>600,1512=>600,1513=>600,1514=>600,1520=>600,1521=>600,1522=>600,1523=>600,1524=>600,4304=>600,4305=>600,4306=>600,4307=>600,4308=>600,4309=>600,4310=>600,4311=>600,4312=>600,4313=>600,4314=>600,4315=>600,4316=>600,4317=>600,4318=>600,4319=>600,4320=>600,4321=>600,4322=>600,4323=>600,4324=>600,4325=>600,4326=>600,4327=>600,4328=>600,4329=>600,4330=>600,4331=>600,4332=>600,4333=>600,4334=>600,4335=>600,4336=>600,4337=>600,4338=>600,4339=>600,4340=>600,4341=>600,4345=>600,4347=>600,4348=>600,7680=>600,7681=>600,7682=>600,7683=>600,7684=>600,7685=>600,7686=>600,7687=>600,7688=>600,7689=>600,7690=>600,7691=>600,7692=>600,7693=>600,7694=>600,7695=>600,7696=>600,7697=>600,7698=>600,7699=>600,7700=>600,7701=>600,7702=>600,7703=>600,7704=>600,7705=>600,7706=>600,7707=>600,7708=>600,7709=>600,7710=>600,7711=>600,7712=>600,7713=>600,7714=>600,7715=>600,7716=>600,7717=>600,7718=>600,7719=>600,7720=>600,7721=>600,7722=>600,7723=>600,7724=>600,7725=>600,7726=>600,7727=>600,7728=>600,7729=>600,7730=>600,7731=>600,7732=>600,7733=>600,7734=>600,7735=>600,7736=>600,7737=>600,7738=>600,7739=>600,7740=>600,7741=>600,7742=>600,7743=>600,7744=>600,7745=>600,7746=>600,7747=>600,7748=>600,7749=>600,7750=>600,7751=>600,7752=>600,7753=>600,7754=>600,7755=>600,7756=>600,7757=>600,7758=>600,7759=>600,7760=>600,7761=>600,7762=>600,7763=>600,7764=>600,7765=>600,7766=>600,7767=>600,7768=>600,7769=>600,7770=>600,7771=>600,7772=>600,7773=>600,7774=>600,7775=>600,7776=>600,7777=>600,7778=>600,7779=>600,7780=>600,7781=>600,7782=>600,7783=>600,7784=>600,7785=>600,7786=>600,7787=>600,7788=>600,7789=>600,7790=>600,7791=>600,7792=>600,7793=>600,7794=>600,7795=>600,7796=>600,7797=>600,7798=>600,7799=>600,7800=>600,7801=>600,7802=>600,7803=>600,7804=>600,7805=>600,7806=>600,7807=>600,7808=>600,7809=>600,7810=>600,7811=>600,7812=>600,7813=>600,7814=>600,7815=>600,7816=>600,7817=>600,7818=>600,7819=>600,7820=>600,7821=>600,7822=>600,7823=>600,7824=>600,7825=>600,7826=>600,7827=>600,7828=>600,7829=>600,7830=>600,7831=>600,7832=>600,7833=>600,7834=>600,7835=>600,7840=>600,7841=>600,7842=>600,7843=>600,7844=>600,7845=>600,7846=>600,7847=>600,7848=>600,7849=>600,7850=>600,7851=>600,7852=>600,7853=>600,7854=>600,7855=>600,7856=>600,7857=>600,7858=>600,7859=>600,7860=>600,7861=>600,7862=>600,7863=>600,7864=>600,7865=>600,7866=>600,7867=>600,7868=>600,7869=>600,7870=>600,7871=>600,7872=>600,7873=>600,7874=>600,7875=>600,7876=>600,7877=>600,7878=>600,7879=>600,7880=>600,7881=>600,7882=>600,7883=>600,7884=>600,7885=>600,7886=>600,7887=>600,7888=>600,7889=>600,7890=>600,7891=>600,7892=>600,7893=>600,7894=>600,7895=>600,7896=>600,7897=>600,7898=>600,7899=>600,7900=>600,7901=>600,7902=>600,7903=>600,7904=>600,7905=>600,7906=>600,7907=>600,7908=>600,7909=>600,7910=>600,7911=>600,7912=>600,7913=>600,7914=>600,7915=>600,7916=>600,7917=>600,7918=>600,7919=>600,7920=>600,7921=>600,7922=>600,7923=>600,7924=>600,7925=>600,7926=>600,7927=>600,7928=>600,7929=>600,8192=>600,8193=>600,8194=>600,8195=>600,8196=>600,8197=>600,8198=>600,8199=>600,8200=>600,8201=>600,8202=>600,8203=>600,8204=>0,8205=>0,8206=>0,8207=>0,8208=>600,8209=>600,8210=>600,8211=>600,8212=>600,8213=>600,8214=>600,8215=>600,8216=>600,8217=>600,8218=>600,8219=>600,8220=>600,8221=>600,8222=>600,8223=>600,8224=>600,8225=>600,8226=>600,8227=>600,8228=>600,8229=>600,8230=>600,8231=>600,8232=>600,8233=>600,8234=>600,8235=>600,8236=>600,8237=>600,8238=>600,8239=>600,8240=>600,8241=>600,8242=>600,8243=>600,8244=>600,8245=>600,8246=>600,8247=>600,8248=>600,8249=>600,8250=>600,8251=>600,8252=>600,8253=>600,8254=>600,8255=>600,8256=>600,8257=>600,8258=>600,8259=>600,8260=>600,8261=>600,8262=>600,8263=>600,8264=>600,8265=>600,8266=>600,8267=>600,8268=>600,8269=>600,8270=>600,8271=>600,8272=>600,8273=>600,8274=>600,8275=>600,8276=>600,8277=>600,8278=>600,8279=>600,8280=>600,8281=>600,8282=>600,8283=>600,8284=>600,8285=>600,8286=>600,8287=>600,8288=>600,8289=>600,8290=>600,8291=>600,8292=>600,8304=>600,8305=>600,8308=>600,8309=>600,8310=>600,8311=>600,8312=>600,8313=>600,8314=>600,8315=>600,8316=>600,8317=>600,8318=>600,8319=>600,8320=>600,8321=>600,8322=>600,8323=>600,8324=>600,8325=>600,8326=>600,8327=>600,8328=>600,8329=>600,8330=>600,8331=>600,8332=>600,8333=>600,8334=>600,8336=>600,8337=>600,8338=>600,8339=>600,8340=>600,8355=>600,8356=>600,8362=>600,8364=>600,8373=>600,8448=>600,8449=>600,8451=>600,8453=>600,8454=>600,8455=>600,8457=>600,8462=>600,8465=>600,8466=>600,8467=>600,8470=>600,8472=>600,8476=>600,8480=>600,8481=>600,8482=>600,8486=>600,8487=>600,8489=>600,8490=>600,8491=>600,8494=>600,8498=>600,8501=>600,8502=>600,8503=>600,8504=>600,8506=>600,8507=>600,8513=>600,8514=>600,8515=>600,8516=>600,8523=>600,8525=>600,8526=>600,8531=>600,8532=>600,8533=>600,8534=>600,8535=>600,8536=>600,8537=>600,8538=>600,8539=>600,8540=>600,8541=>600,8542=>600,8543=>600,8544=>600,8545=>600,8546=>600,8547=>600,8548=>600,8549=>600,8550=>600,8553=>600,8556=>600,8557=>600,8558=>600,8559=>600,8560=>600,8564=>600,8569=>600,8572=>600,8573=>600,8574=>600,8575=>600,8592=>600,8593=>600,8594=>600,8595=>600,8596=>600,8597=>600,8598=>600,8599=>600,8600=>600,8601=>600,8612=>600,8613=>600,8614=>600,8615=>600,8633=>600,8636=>600,8637=>600,8638=>600,8639=>600,8640=>600,8641=>600,8642=>600,8643=>600,8644=>600,8645=>600,8646=>600,8647=>600,8648=>600,8649=>600,8650=>600,8651=>600,8652=>600,8704=>600,8706=>600,8707=>600,8709=>600,8710=>600,8711=>600,8712=>600,8713=>600,8714=>600,8715=>600,8716=>600,8717=>600,8719=>600,8720=>600,8721=>600,8722=>600,8723=>600,8725=>600,8727=>600,8729=>600,8730=>600,8731=>600,8732=>600,8733=>600,8734=>600,8735=>600,8756=>600,8800=>600,8801=>600,8804=>600,8805=>600,8834=>600,8835=>600,8836=>600,8837=>600,8838=>600,8839=>600,8869=>600,8976=>600,9001=>600,9002=>600,9251=>600,9472=>600,9473=>600,9474=>600,9475=>600,9476=>600,9477=>600,9478=>600,9479=>600,9480=>600,9481=>600,9482=>600,9483=>600,9484=>600,9485=>600,9486=>600,9487=>600,9488=>600,9489=>600,9490=>600,9491=>600,9492=>600,9493=>600,9494=>600,9495=>600,9496=>600,9497=>600,9498=>600,9499=>600,9500=>600,9501=>600,9502=>600,9503=>600,9504=>600,9505=>600,9506=>600,9507=>600,9508=>600,9509=>600,9510=>600,9511=>600,9512=>600,9513=>600,9514=>600,9515=>600,9516=>600,9517=>600,9518=>600,9519=>600,9520=>600,9521=>600,9522=>600,9523=>600,9524=>600,9525=>600,9526=>600,9527=>600,9528=>600,9529=>600,9530=>600,9531=>600,9532=>600,9533=>600,9534=>600,9535=>600,9536=>600,9537=>600,9538=>600,9539=>600,9540=>600,9541=>600,9542=>600,9543=>600,9544=>600,9545=>600,9546=>600,9547=>600,9548=>600,9549=>600,9550=>600,9551=>600,9552=>600,9553=>600,9554=>600,9555=>600,9556=>600,9557=>600,9558=>600,9559=>600,9560=>600,9561=>600,9562=>600,9563=>600,9564=>600,9565=>600,9566=>600,9567=>600,9568=>600,9569=>600,9570=>600,9571=>600,9572=>600,9573=>600,9574=>600,9575=>600,9576=>600,9577=>600,9578=>600,9579=>600,9580=>600,9581=>600,9582=>600,9583=>600,9584=>600,9585=>600,9586=>600,9587=>600,9588=>600,9589=>600,9590=>600,9591=>600,9592=>600,9593=>600,9594=>600,9595=>600,9596=>600,9597=>600,9598=>600,9599=>600,9600=>600,9601=>600,9602=>600,9603=>600,9604=>600,9605=>600,9606=>600,9607=>600,9608=>600,9609=>600,9610=>600,9611=>600,9612=>600,9613=>600,9614=>600,9615=>600,9616=>600,9617=>600,9618=>600,9619=>600,9620=>600,9621=>600,9632=>600,9633=>600,9635=>600,9636=>600,9637=>600,9638=>600,9639=>600,9640=>600,9641=>600,9642=>600,9643=>600,9644=>600,9645=>600,9646=>600,9647=>600,9648=>600,9649=>600,9650=>600,9651=>600,9652=>600,9653=>600,9654=>600,9655=>600,9656=>600,9657=>600,9658=>600,9660=>600,9661=>600,9662=>600,9663=>600,9664=>600,9665=>600,9666=>600,9667=>600,9668=>600,9669=>600,9670=>600,9671=>600,9673=>600,9674=>600,9675=>600,9677=>600,9679=>600,9680=>600,9681=>600,9682=>600,9683=>600,9684=>600,9685=>600,9686=>600,9687=>600,9688=>600,9689=>600,9698=>600,9699=>600,9700=>600,9701=>600,9702=>600,9703=>600,9704=>600,9705=>600,9706=>600,9707=>600,9708=>600,9709=>600,9710=>600,9712=>600,9713=>600,9714=>600,9715=>600,9716=>600,9717=>600,9718=>600,9719=>600,9735=>600,9736=>600,9737=>600,9776=>600,9777=>600,9778=>600,9779=>600,9780=>600,9781=>600,9782=>600,9783=>600,9785=>600,9786=>600,9787=>600,9824=>600,9825=>600,9826=>600,9827=>600,9828=>600,9829=>600,9830=>600,9831=>600,9833=>600,9834=>600,9835=>600,9836=>600,9837=>600,9838=>600,9839=>600,11799=>600,42888=>600,42889=>600,42890=>600,42891=>600,42892=>600,64256=>600,64257=>600,64258=>600,64285=>600,64287=>600,64288=>600,64298=>600,64299=>600,64300=>600,64301=>600,64302=>600,64303=>600,64304=>600,64305=>600,64306=>600,64307=>600,64308=>600,64309=>600,64310=>600,64312=>600,64313=>600,64314=>600,64315=>600,64316=>600,64318=>600,64320=>600,64321=>600,64323=>600,64324=>600,64326=>600,64327=>600,64328=>600,64329=>600,64330=>600,64331=>600,64332=>600,64333=>600,64334=>600,64335=>600,65533=>600,65535=>600);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/freemonob.z b/lib/tcpdf/fonts/freemonob.z
index 84b1dec7c4e..bea5fdb8b02 100644
Binary files a/lib/tcpdf/fonts/freemonob.z and b/lib/tcpdf/fonts/freemonob.z differ
diff --git a/lib/tcpdf/fonts/freemonobi.ctg.z b/lib/tcpdf/fonts/freemonobi.ctg.z
index efaebb08fea..eb1ff39cdb5 100644
Binary files a/lib/tcpdf/fonts/freemonobi.ctg.z and b/lib/tcpdf/fonts/freemonobi.ctg.z differ
diff --git a/lib/tcpdf/fonts/freemonobi.php b/lib/tcpdf/fonts/freemonobi.php
index 05e95d42ef5..73422a4176a 100644
--- a/lib/tcpdf/fonts/freemonobi.php
+++ b/lib/tcpdf/fonts/freemonobi.php
@@ -1,153 +1,15 @@
800,'Descent'=>-200,'CapHeight'=>19,'Flags'=>96,'FontBBox'=>'[-644 -200 833 800]','ItalicAngle'=>-12,'StemV'=>120,'MissingWidth'=>600);
$up=-125;
$ut=50;
$dw=600;
-$cw=array(
-32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,
-42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,
-52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,
-62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,
-72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,
-82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,
-92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,
-102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,
-112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,
-122=>600,123=>600,124=>600,125=>600,126=>600,8364=>600,8218=>600,402=>600,8222=>600,8230=>600,
-8224=>600,8225=>600,710=>600,8240=>600,352=>600,8249=>600,338=>600,381=>600,8216=>600,8217=>600,
-8220=>600,8221=>600,8226=>600,8211=>600,8212=>600,732=>600,8482=>600,353=>600,8250=>600,339=>600,
-382=>600,376=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,
-168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,
-178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,
-188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,
-198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,
-208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,
-218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,
-228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,
-238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,
-248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,257=>600,
-258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,267=>600,
-268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,277=>600,
-278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,287=>600,
-288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,297=>600,
-298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,307=>600,
-308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,317=>600,
-318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,327=>600,
-328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,337=>600,
-340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,349=>600,
-350=>600,351=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,361=>600,
-362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,371=>600,
-372=>600,373=>600,374=>600,375=>600,377=>600,378=>600,379=>600,380=>600,383=>600,384=>600,
-385=>600,386=>600,387=>600,388=>600,389=>600,390=>600,391=>600,392=>600,393=>600,394=>600,
-395=>600,396=>600,397=>600,398=>600,399=>600,400=>600,401=>600,403=>600,404=>600,405=>600,
-406=>600,407=>600,408=>600,409=>600,410=>600,411=>600,412=>600,413=>600,414=>600,415=>600,
-416=>600,417=>600,418=>600,419=>600,420=>600,421=>600,422=>600,423=>600,424=>600,425=>600,
-426=>600,427=>600,428=>600,429=>600,430=>600,431=>600,432=>600,433=>600,434=>600,435=>600,
-436=>600,437=>600,438=>600,439=>600,440=>600,441=>600,442=>600,443=>600,444=>600,445=>600,
-446=>600,447=>600,448=>600,449=>600,450=>600,451=>600,452=>600,453=>600,454=>600,455=>600,
-456=>600,457=>600,458=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,465=>600,
-466=>600,467=>600,468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,475=>600,
-476=>600,477=>600,478=>600,479=>600,480=>600,481=>600,482=>600,483=>600,484=>600,485=>600,
-486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,492=>600,493=>600,494=>600,495=>600,
-496=>600,497=>600,498=>600,499=>600,500=>600,501=>600,502=>600,503=>600,504=>600,505=>600,
-506=>600,507=>600,508=>600,509=>600,510=>600,511=>600,512=>600,513=>600,514=>600,515=>600,
-516=>600,517=>600,518=>600,519=>600,520=>600,521=>600,522=>600,523=>600,524=>600,525=>600,
-526=>600,527=>600,528=>600,529=>600,530=>600,531=>600,532=>600,533=>600,534=>600,535=>600,
-536=>600,537=>600,538=>600,539=>600,540=>600,541=>600,542=>600,543=>600,548=>600,549=>600,
-550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,556=>600,557=>600,558=>600,559=>600,
-560=>600,561=>600,562=>600,563=>600,567=>600,592=>600,593=>600,594=>600,595=>600,596=>600,
-598=>600,599=>600,600=>600,601=>600,603=>600,604=>600,607=>600,608=>600,609=>600,613=>600,
-614=>600,615=>600,616=>600,617=>600,618=>600,619=>600,621=>600,623=>600,624=>600,625=>600,
-626=>600,627=>600,628=>600,629=>600,633=>600,634=>600,635=>600,636=>600,637=>600,638=>600,
-639=>600,640=>600,641=>600,642=>600,643=>600,644=>600,645=>600,647=>600,648=>600,649=>600,
-652=>600,653=>600,654=>600,656=>600,657=>600,658=>600,659=>600,660=>600,661=>600,662=>600,
-663=>600,664=>600,665=>600,666=>600,667=>600,668=>600,669=>600,670=>600,671=>600,672=>600,
-673=>600,674=>600,697=>600,698=>600,699=>600,700=>600,701=>600,702=>600,703=>600,704=>600,
-705=>600,706=>600,707=>600,708=>600,709=>600,711=>600,712=>600,713=>600,714=>600,715=>600,
-716=>600,717=>600,718=>600,719=>600,720=>600,721=>600,722=>600,723=>600,724=>600,725=>600,
-726=>600,727=>600,728=>600,729=>600,730=>600,731=>600,733=>600,734=>600,735=>600,741=>600,
-742=>600,743=>600,744=>600,745=>600,746=>600,747=>600,748=>600,749=>600,750=>600,751=>600,
-752=>600,753=>600,754=>600,755=>600,756=>600,757=>600,758=>600,759=>600,760=>600,761=>600,
-762=>600,763=>600,764=>600,765=>600,766=>600,767=>600,768=>0,769=>0,770=>0,771=>0,
-772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,
-782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,
-795=>0,796=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,
-808=>0,809=>0,810=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,
-819=>0,820=>0,821=>0,822=>0,825=>0,826=>0,827=>0,831=>0,832=>0,833=>0,
-834=>0,835=>0,836=>0,838=>0,839=>0,840=>0,844=>0,849=>0,850=>0,851=>0,
-852=>0,853=>0,854=>0,855=>0,884=>600,885=>600,890=>600,894=>600,900=>600,901=>600,
-902=>600,903=>600,904=>600,905=>600,906=>600,908=>600,910=>600,911=>600,912=>600,913=>600,
-914=>600,915=>600,916=>600,917=>600,918=>600,919=>600,920=>600,921=>600,922=>600,923=>600,
-924=>600,925=>600,926=>600,927=>600,928=>600,929=>600,931=>600,932=>600,933=>600,934=>600,
-935=>600,936=>600,937=>600,938=>600,939=>600,940=>600,941=>600,942=>600,943=>600,944=>600,
-945=>600,946=>600,947=>600,948=>600,949=>600,950=>600,951=>600,952=>600,953=>600,954=>600,
-955=>600,956=>600,957=>600,958=>600,959=>600,960=>600,961=>600,962=>600,963=>600,964=>600,
-965=>600,966=>600,967=>600,968=>600,969=>600,970=>600,971=>600,972=>600,973=>600,974=>600,
-976=>600,977=>600,978=>600,979=>600,980=>600,981=>600,982=>600,986=>600,987=>600,988=>600,
-1008=>600,1009=>600,1012=>600,1013=>600,1024=>600,1025=>600,1026=>600,1027=>600,1028=>600,1029=>600,
-1030=>600,1031=>600,1032=>600,1033=>600,1034=>600,1035=>600,1036=>600,1037=>600,1038=>600,1039=>600,
-1040=>600,1041=>600,1042=>600,1043=>600,1044=>600,1045=>600,1046=>600,1047=>600,1048=>600,1049=>600,
-1050=>600,1051=>600,1052=>600,1053=>600,1054=>600,1055=>600,1056=>600,1057=>600,1058=>600,1059=>600,
-1060=>600,1061=>600,1062=>600,1063=>600,1064=>600,1065=>600,1066=>600,1067=>600,1068=>600,1069=>600,
-1070=>600,1071=>600,1072=>600,1073=>600,1074=>600,1075=>600,1076=>600,1077=>600,1078=>600,1079=>600,
-1080=>600,1081=>600,1082=>600,1083=>600,1084=>600,1085=>600,1086=>600,1087=>600,1088=>600,1089=>600,
-1090=>600,1091=>600,1092=>600,1093=>600,1094=>600,1095=>600,1096=>600,1097=>600,1098=>600,1099=>600,
-1100=>600,1101=>600,1102=>600,1103=>600,1104=>600,1105=>600,1106=>600,1107=>600,1108=>600,1109=>600,
-1110=>600,1111=>600,1112=>600,1113=>600,1114=>600,1115=>600,1116=>600,1117=>600,1118=>600,1119=>600,
-1136=>600,1137=>600,1138=>600,1156=>0,1157=>0,1158=>0,1162=>600,1163=>600,1164=>600,1165=>600,
-1166=>600,1167=>600,1168=>600,1169=>600,1170=>600,1171=>600,1172=>600,1173=>600,1174=>600,1175=>600,
-1176=>600,1177=>600,1178=>600,1179=>600,1180=>600,1181=>600,1182=>600,1183=>600,1184=>600,1185=>600,
-1186=>600,1187=>600,1188=>600,1189=>600,1190=>600,1191=>600,1192=>600,1193=>600,1194=>600,1195=>600,
-1196=>600,1197=>600,1198=>600,1199=>600,1200=>600,1201=>600,1202=>600,1203=>600,1204=>600,1205=>600,
-1206=>600,1207=>600,1208=>600,1209=>600,1210=>600,1211=>600,1212=>600,1213=>600,1214=>600,1215=>600,
-1216=>600,1217=>600,1218=>600,1219=>600,1220=>600,1221=>600,1222=>600,1223=>600,1224=>600,1225=>600,
-1226=>600,1227=>600,1228=>600,1229=>600,1230=>600,1231=>600,1232=>600,1233=>600,1234=>600,1235=>600,
-1236=>600,1237=>600,1238=>600,1239=>600,1240=>600,1241=>600,1242=>600,1243=>600,1244=>600,1245=>600,
-1246=>600,1247=>600,1248=>600,1249=>600,1250=>600,1251=>600,1252=>600,1253=>600,1254=>600,1255=>600,
-1256=>600,1257=>600,1258=>600,1259=>600,1260=>600,1261=>600,1262=>600,1263=>600,1264=>600,1265=>600,
-1266=>600,1267=>600,1268=>600,1269=>600,1270=>600,1271=>600,1272=>600,1273=>600,1296=>600,1297=>600,
-1298=>600,1299=>600,1306=>600,1307=>600,1308=>600,1309=>600,1310=>600,1311=>600,1456=>0,1457=>0,
-1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,
-1469=>0,1470=>0,1471=>0,1472=>600,1473=>0,1474=>0,1475=>600,1476=>0,1488=>600,1489=>600,
-1490=>600,1491=>600,1492=>600,1493=>600,1494=>600,1495=>600,1496=>600,1497=>600,1498=>600,1499=>600,
-1500=>600,1501=>600,1502=>600,1503=>600,1504=>600,1505=>600,1506=>600,1507=>600,1508=>600,1509=>600,
-1510=>600,1511=>600,1512=>600,1513=>600,1514=>600,1520=>600,1521=>600,1522=>600,1523=>600,1524=>600,
-4304=>600,4305=>600,4306=>600,4307=>600,4308=>600,4309=>600,4310=>600,4311=>600,4312=>600,4313=>600,
-4314=>600,4315=>600,4316=>600,4317=>600,4318=>600,4319=>600,4320=>600,4321=>600,4322=>600,4323=>600,
-4324=>600,4325=>600,4326=>600,4327=>600,4328=>600,4329=>600,4330=>600,4331=>600,4332=>600,4333=>600,
-4334=>600,4335=>600,4336=>600,4337=>600,4338=>600,4339=>600,4340=>600,4341=>600,4345=>600,4347=>600,
-8192=>600,8193=>600,8194=>600,8195=>600,8196=>600,8197=>600,8198=>600,8199=>600,8200=>600,8201=>600,
-8202=>600,8203=>600,8204=>0,8205=>0,8206=>0,8207=>0,8208=>600,8209=>600,8210=>600,8213=>600,
-8214=>600,8215=>600,8219=>600,8223=>600,8227=>600,8228=>600,8229=>600,8231=>600,8232=>600,8233=>600,
-8234=>600,8235=>600,8236=>600,8237=>600,8238=>600,8239=>600,8241=>600,8242=>600,8243=>600,8244=>600,
-8245=>600,8246=>600,8247=>600,8248=>600,8251=>600,8252=>600,8253=>600,8254=>600,8255=>600,8256=>600,
-8257=>600,8258=>600,8259=>600,8260=>600,8261=>600,8262=>600,8263=>600,8264=>600,8265=>600,8266=>600,
-8267=>600,8268=>600,8269=>600,8270=>600,8271=>600,8272=>600,8273=>600,8274=>600,8275=>600,8276=>600,
-8277=>600,8278=>600,8279=>600,8280=>600,8281=>600,8282=>600,8283=>600,8284=>600,8285=>600,8286=>600,
-8287=>600,8288=>600,8289=>600,8290=>600,8291=>600,8292=>600,8298=>600,8299=>600,8300=>600,8301=>600,
-8302=>600,8303=>600,8304=>600,8305=>600,8308=>600,8309=>600,8310=>600,8311=>600,8312=>600,8313=>600,
-8314=>600,8315=>600,8316=>600,8317=>600,8318=>600,8319=>600,8320=>600,8321=>600,8322=>600,8323=>600,
-8324=>600,8325=>600,8326=>600,8327=>600,8328=>600,8329=>600,8330=>600,8331=>600,8332=>600,8333=>600,
-8334=>600,8336=>600,8337=>600,8338=>600,8339=>600,8340=>600,8362=>600,8373=>600,8448=>600,8449=>600,
-8451=>600,8453=>600,8454=>600,8457=>600,8465=>600,8466=>600,8470=>600,8472=>600,8476=>600,8481=>600,
-8486=>600,8487=>600,8489=>600,8490=>600,8491=>600,8498=>600,8501=>600,8502=>600,8503=>600,8504=>600,
-8506=>600,8507=>600,8523=>600,8531=>600,8532=>600,8533=>600,8534=>600,8535=>600,8536=>600,8537=>600,
-8538=>600,8539=>600,8540=>600,8541=>600,8542=>600,8543=>600,8544=>600,8545=>600,8546=>600,8547=>600,
-8548=>600,8549=>600,8550=>600,8553=>600,8556=>600,8557=>600,8558=>600,8559=>600,8560=>600,8564=>600,
-8569=>600,8572=>600,8573=>600,8574=>600,8575=>600,8592=>600,8593=>600,8594=>600,8595=>600,8704=>600,
-8706=>600,8707=>600,8710=>600,8711=>600,8712=>600,8713=>600,8715=>600,8716=>600,8721=>600,8722=>600,
-8723=>600,8725=>600,8730=>600,8733=>600,8734=>600,8756=>600,8800=>600,8801=>600,8804=>600,8805=>600,
-9251=>600,9674=>600,9824=>600,9825=>600,9826=>600,9827=>600,9828=>600,9829=>600,9830=>600,9831=>600,
-9833=>600,9834=>600,9835=>600,9836=>600,9837=>600,9838=>600,9839=>600,64256=>600,64257=>600,64258=>600,
-64285=>600,64287=>600,64288=>600,64298=>600,64299=>600,64300=>600,64301=>600,64302=>600,64303=>600,64304=>600,
-64305=>600,64306=>600,64307=>600,64308=>600,64309=>600,64310=>600,64312=>600,64313=>600,64314=>600,64315=>600,
-64316=>600,64318=>600,64320=>600,64321=>600,64323=>600,64324=>600,64326=>600,64327=>600,64328=>600,64329=>600,
-64330=>600,64331=>600,64332=>600,64333=>600,64334=>600,64335=>600,65533=>600);
-$enc='';
$diff='';
+$originalsize=169936;
+$enc='';
$file='freemonobi.z';
$ctg='freemonobi.ctg.z';
-$originalsize=145080;
-?>
\ No newline at end of file
+$desc=array('Flags'=>97,'FontBBox'=>'[-642 -200 834 800]','ItalicAngle'=>-12,'Ascent'=>800,'Descent'=>-200,'Leading'=>90,'CapHeight'=>583,'XHeight'=>437,'StemV'=>123,'StemH'=>53,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600);
+$cw=array(0=>0,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>0,9=>600,10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600,20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>0,30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600,136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600,145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600,154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,257=>600,258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,267=>600,268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,277=>600,278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,287=>600,288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,297=>600,298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,307=>600,308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,317=>600,318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,327=>600,328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,337=>600,338=>600,339=>600,340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,349=>600,350=>600,351=>600,352=>600,353=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,361=>600,362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,371=>600,372=>600,373=>600,374=>600,375=>600,376=>600,377=>600,378=>600,379=>600,380=>600,381=>600,382=>600,383=>600,384=>600,385=>600,386=>600,387=>600,388=>600,389=>600,390=>600,391=>600,392=>600,393=>600,394=>600,395=>600,396=>600,397=>600,398=>600,399=>600,400=>600,401=>600,402=>600,403=>600,404=>600,405=>600,406=>600,407=>600,408=>600,409=>600,410=>600,411=>600,412=>600,413=>600,414=>600,415=>600,416=>600,417=>600,418=>600,419=>600,420=>600,421=>600,422=>600,423=>600,424=>600,425=>600,426=>600,427=>600,428=>600,429=>600,430=>600,431=>600,432=>600,433=>600,434=>600,435=>600,436=>600,437=>600,438=>600,439=>600,440=>600,441=>600,442=>600,443=>600,444=>600,445=>600,446=>600,447=>600,448=>600,449=>600,450=>600,451=>600,452=>600,453=>600,454=>600,455=>600,456=>600,457=>600,458=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,465=>600,466=>600,467=>600,468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,475=>600,476=>600,477=>600,478=>600,479=>600,480=>600,481=>600,482=>600,483=>600,484=>600,485=>600,486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,492=>600,493=>600,494=>600,495=>600,496=>600,497=>600,498=>600,499=>600,500=>600,501=>600,502=>600,503=>600,504=>600,505=>600,506=>600,507=>600,508=>600,509=>600,510=>600,511=>600,512=>600,513=>600,514=>600,515=>600,516=>600,517=>600,518=>600,519=>600,520=>600,521=>600,522=>600,523=>600,524=>600,525=>600,526=>600,527=>600,528=>600,529=>600,530=>600,531=>600,532=>600,533=>600,534=>600,535=>600,536=>600,537=>600,538=>600,539=>600,540=>600,541=>600,542=>600,543=>600,544=>600,548=>600,549=>600,550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,556=>600,557=>600,558=>600,559=>600,560=>600,561=>600,562=>600,563=>600,567=>600,592=>600,593=>600,594=>600,595=>600,596=>600,598=>600,599=>600,600=>600,601=>600,603=>600,604=>600,607=>600,608=>600,609=>600,613=>600,614=>600,615=>600,616=>600,617=>600,618=>600,619=>600,621=>600,623=>600,624=>600,625=>600,626=>600,627=>600,628=>600,629=>600,633=>600,634=>600,635=>600,636=>600,637=>600,638=>600,639=>600,640=>600,641=>600,642=>600,643=>600,644=>600,645=>600,647=>600,648=>600,649=>600,652=>600,653=>600,654=>600,656=>600,657=>600,658=>600,659=>600,660=>600,661=>600,662=>600,663=>600,664=>600,665=>600,666=>600,667=>600,668=>600,669=>600,670=>600,671=>600,672=>600,673=>600,674=>600,688=>600,689=>600,690=>600,691=>600,692=>600,693=>600,694=>600,695=>600,696=>600,697=>600,698=>600,699=>600,700=>600,701=>600,702=>600,703=>600,704=>600,705=>600,706=>600,707=>600,708=>600,709=>600,710=>600,711=>600,712=>600,713=>600,714=>600,715=>600,716=>600,717=>600,718=>600,719=>600,720=>600,721=>600,722=>600,723=>600,724=>600,725=>600,726=>600,727=>600,728=>600,729=>600,730=>600,731=>600,732=>600,733=>600,734=>600,735=>600,736=>600,737=>600,738=>600,739=>600,740=>600,741=>600,742=>600,743=>600,744=>600,745=>600,746=>600,747=>600,748=>600,749=>600,750=>600,751=>600,752=>600,753=>600,754=>600,755=>600,756=>600,757=>600,758=>600,759=>600,760=>600,761=>600,762=>600,763=>600,764=>600,765=>600,766=>600,767=>600,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,843=>0,844=>0,845=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,884=>600,885=>600,890=>600,894=>600,900=>600,901=>600,902=>600,903=>600,904=>600,905=>600,906=>600,908=>600,910=>600,911=>600,912=>600,913=>600,914=>600,915=>600,916=>600,917=>600,918=>600,919=>600,920=>600,921=>600,922=>600,923=>600,924=>600,925=>600,926=>600,927=>600,928=>600,929=>600,931=>600,932=>600,933=>600,934=>600,935=>600,936=>600,937=>600,938=>600,939=>600,940=>600,941=>600,942=>600,943=>600,944=>600,945=>600,946=>600,947=>600,948=>600,949=>600,950=>600,951=>600,952=>600,953=>600,954=>600,955=>600,956=>600,957=>600,958=>600,959=>600,960=>600,961=>600,962=>600,963=>600,964=>600,965=>600,966=>600,967=>600,968=>600,969=>600,970=>600,971=>600,972=>600,973=>600,974=>600,976=>600,977=>600,978=>600,979=>600,980=>600,981=>600,982=>600,986=>600,987=>600,988=>600,1008=>600,1009=>600,1012=>600,1013=>600,1024=>600,1025=>600,1026=>600,1027=>600,1028=>600,1029=>600,1030=>600,1031=>600,1032=>600,1033=>600,1034=>600,1035=>600,1036=>600,1037=>600,1038=>600,1039=>600,1040=>600,1041=>600,1042=>600,1043=>600,1044=>600,1045=>600,1046=>600,1047=>600,1048=>600,1049=>600,1050=>600,1051=>600,1052=>600,1053=>600,1054=>600,1055=>600,1056=>600,1057=>600,1058=>600,1059=>600,1060=>600,1061=>600,1062=>600,1063=>600,1064=>600,1065=>600,1066=>600,1067=>600,1068=>600,1069=>600,1070=>600,1071=>600,1072=>600,1073=>600,1074=>600,1075=>600,1076=>600,1077=>600,1078=>600,1079=>600,1080=>600,1081=>600,1082=>600,1083=>600,1084=>600,1085=>600,1086=>600,1087=>600,1088=>600,1089=>600,1090=>600,1091=>600,1092=>600,1093=>600,1094=>600,1095=>600,1096=>600,1097=>600,1098=>600,1099=>600,1100=>600,1101=>600,1102=>600,1103=>600,1104=>600,1105=>600,1106=>600,1107=>600,1108=>600,1109=>600,1110=>600,1111=>600,1112=>600,1113=>600,1114=>600,1115=>600,1116=>600,1117=>600,1118=>600,1119=>600,1136=>600,1137=>600,1138=>600,1156=>0,1157=>0,1158=>0,1162=>600,1163=>600,1164=>600,1165=>600,1166=>600,1167=>600,1168=>600,1169=>600,1170=>600,1171=>600,1172=>600,1173=>600,1174=>600,1175=>600,1176=>600,1177=>600,1178=>600,1179=>600,1180=>600,1181=>600,1182=>600,1183=>600,1184=>600,1185=>600,1186=>600,1187=>600,1188=>600,1189=>600,1190=>600,1191=>600,1192=>600,1193=>600,1194=>600,1195=>600,1196=>600,1197=>600,1198=>600,1199=>600,1200=>600,1201=>600,1202=>600,1203=>600,1204=>600,1205=>600,1206=>600,1207=>600,1208=>600,1209=>600,1210=>600,1211=>600,1212=>600,1213=>600,1214=>600,1215=>600,1216=>600,1217=>600,1218=>600,1219=>600,1220=>600,1221=>600,1222=>600,1223=>600,1224=>600,1225=>600,1226=>600,1227=>600,1228=>600,1229=>600,1230=>600,1231=>600,1232=>600,1233=>600,1234=>600,1235=>600,1236=>600,1237=>600,1238=>600,1239=>600,1240=>600,1241=>600,1242=>600,1243=>600,1244=>600,1245=>600,1246=>600,1247=>600,1248=>600,1249=>600,1250=>600,1251=>600,1252=>600,1253=>600,1254=>600,1255=>600,1256=>600,1257=>600,1258=>600,1259=>600,1260=>600,1261=>600,1262=>600,1263=>600,1264=>600,1265=>600,1266=>600,1267=>600,1268=>600,1269=>600,1270=>600,1271=>600,1272=>600,1273=>600,1296=>600,1297=>600,1298=>600,1299=>600,1306=>600,1307=>600,1308=>600,1309=>600,1310=>600,1311=>600,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0,1470=>0,1471=>0,1472=>600,1473=>0,1474=>0,1475=>600,1476=>0,1488=>600,1489=>600,1490=>600,1491=>600,1492=>600,1493=>600,1494=>600,1495=>600,1496=>600,1497=>600,1498=>600,1499=>600,1500=>600,1501=>600,1502=>600,1503=>600,1504=>600,1505=>600,1506=>600,1507=>600,1508=>600,1509=>600,1510=>600,1511=>600,1512=>600,1513=>600,1514=>600,1520=>600,1521=>600,1522=>600,1523=>600,1524=>600,4304=>600,4305=>600,4306=>600,4307=>600,4308=>600,4309=>600,4310=>600,4311=>600,4312=>600,4313=>600,4314=>600,4315=>600,4316=>600,4317=>600,4318=>600,4319=>600,4320=>600,4321=>600,4322=>600,4323=>600,4324=>600,4325=>600,4326=>600,4327=>600,4328=>600,4329=>600,4330=>600,4331=>600,4332=>600,4333=>600,4334=>600,4335=>600,4336=>600,4337=>600,4338=>600,4339=>600,4340=>600,4341=>600,4345=>600,4347=>600,4348=>600,7680=>600,7681=>600,7682=>600,7683=>600,7684=>600,7685=>600,7686=>600,7687=>600,7688=>600,7689=>600,7690=>600,7691=>600,7692=>600,7693=>600,7694=>600,7695=>600,7696=>600,7697=>600,7698=>600,7699=>600,7700=>600,7701=>600,7702=>600,7703=>600,7704=>600,7705=>600,7706=>600,7707=>600,7708=>600,7709=>600,7710=>600,7711=>600,7712=>600,7713=>600,7714=>600,7715=>600,7716=>600,7717=>600,7718=>600,7719=>600,7720=>600,7721=>600,7722=>600,7723=>600,7724=>600,7725=>600,7726=>600,7727=>600,7728=>600,7729=>600,7730=>600,7731=>600,7732=>600,7733=>600,7734=>600,7735=>600,7736=>600,7737=>600,7738=>600,7739=>600,7740=>600,7741=>600,7742=>600,7743=>600,7744=>600,7745=>600,7746=>600,7747=>600,7748=>600,7749=>600,7750=>600,7751=>600,7752=>600,7753=>600,7754=>600,7755=>600,7756=>600,7757=>600,7758=>600,7759=>600,7760=>600,7761=>600,7762=>600,7763=>600,7764=>600,7765=>600,7766=>600,7767=>600,7768=>600,7769=>600,7770=>600,7771=>600,7772=>600,7773=>600,7774=>600,7775=>600,7776=>600,7777=>600,7778=>600,7779=>600,7780=>600,7781=>600,7782=>600,7783=>600,7784=>600,7785=>600,7786=>600,7787=>600,7788=>600,7789=>600,7790=>600,7791=>600,7792=>600,7793=>600,7794=>600,7795=>600,7796=>600,7797=>600,7798=>600,7799=>600,7800=>600,7801=>600,7802=>600,7803=>600,7804=>600,7805=>600,7806=>600,7807=>600,7808=>600,7809=>600,7810=>600,7811=>600,7812=>600,7813=>600,7814=>600,7815=>600,7816=>600,7817=>600,7818=>600,7819=>600,7820=>600,7821=>600,7822=>600,7823=>600,7824=>600,7825=>600,7826=>600,7827=>600,7828=>600,7829=>600,7830=>600,7831=>600,7832=>600,7833=>600,7834=>600,7835=>600,7840=>600,7841=>600,7842=>600,7843=>600,7844=>600,7845=>600,7846=>600,7847=>600,7848=>600,7849=>600,7850=>600,7851=>600,7852=>600,7853=>600,7854=>600,7855=>600,7856=>600,7857=>600,7858=>600,7859=>600,7860=>600,7861=>600,7862=>600,7863=>600,7864=>600,7865=>600,7866=>600,7867=>600,7868=>600,7869=>600,7870=>600,7871=>600,7872=>600,7873=>600,7874=>600,7875=>600,7876=>600,7877=>600,7878=>600,7879=>600,7880=>600,7881=>600,7882=>600,7883=>600,7884=>600,7885=>600,7886=>600,7887=>600,7888=>600,7889=>600,7890=>600,7891=>600,7892=>600,7893=>600,7894=>600,7895=>600,7896=>600,7897=>600,7898=>600,7899=>600,7900=>600,7901=>600,7902=>600,7903=>600,7904=>600,7905=>600,7906=>600,7907=>600,7908=>600,7909=>600,7910=>600,7911=>600,7912=>600,7913=>600,7914=>600,7915=>600,7916=>600,7917=>600,7918=>600,7919=>600,7920=>600,7921=>600,7922=>600,7923=>600,7924=>600,7925=>600,7926=>600,7927=>600,7928=>600,7929=>600,8192=>600,8193=>600,8194=>600,8195=>600,8196=>600,8197=>600,8198=>600,8199=>600,8200=>600,8201=>600,8202=>600,8203=>600,8204=>0,8205=>0,8206=>0,8207=>0,8208=>600,8209=>600,8210=>600,8211=>600,8212=>600,8213=>600,8214=>600,8215=>600,8216=>600,8217=>600,8218=>600,8219=>600,8220=>600,8221=>600,8222=>600,8223=>600,8224=>600,8225=>600,8226=>600,8227=>600,8228=>600,8229=>600,8230=>600,8231=>600,8232=>600,8233=>600,8234=>600,8235=>600,8236=>600,8237=>600,8238=>600,8239=>600,8240=>600,8241=>600,8242=>600,8243=>600,8244=>600,8245=>600,8246=>600,8247=>600,8248=>600,8249=>600,8250=>600,8251=>600,8252=>600,8253=>600,8254=>600,8255=>600,8256=>600,8257=>600,8258=>600,8259=>600,8260=>600,8261=>600,8262=>600,8263=>600,8264=>600,8265=>600,8266=>600,8267=>600,8268=>600,8269=>600,8270=>600,8271=>600,8272=>600,8273=>600,8274=>600,8275=>600,8276=>600,8277=>600,8278=>600,8279=>600,8280=>600,8281=>600,8282=>600,8283=>600,8284=>600,8285=>600,8286=>600,8287=>600,8288=>600,8289=>600,8290=>600,8291=>600,8292=>600,8304=>600,8305=>600,8308=>600,8309=>600,8310=>600,8311=>600,8312=>600,8313=>600,8314=>600,8315=>600,8316=>600,8317=>600,8318=>600,8319=>600,8320=>600,8321=>600,8322=>600,8323=>600,8324=>600,8325=>600,8326=>600,8327=>600,8328=>600,8329=>600,8330=>600,8331=>600,8332=>600,8333=>600,8334=>600,8336=>600,8337=>600,8338=>600,8339=>600,8340=>600,8362=>600,8364=>600,8373=>600,8448=>600,8449=>600,8451=>600,8453=>600,8454=>600,8455=>600,8457=>600,8462=>600,8465=>600,8466=>600,8467=>600,8470=>600,8472=>600,8476=>600,8480=>600,8481=>600,8482=>600,8486=>600,8487=>600,8489=>600,8490=>600,8491=>600,8494=>600,8498=>600,8501=>600,8502=>600,8503=>600,8504=>600,8506=>600,8507=>600,8513=>600,8514=>600,8515=>600,8516=>600,8523=>600,8525=>600,8526=>600,8531=>600,8532=>600,8533=>600,8534=>600,8535=>600,8536=>600,8537=>600,8538=>600,8539=>600,8540=>600,8541=>600,8542=>600,8543=>600,8544=>600,8545=>600,8546=>600,8547=>600,8548=>600,8549=>600,8550=>600,8553=>600,8556=>600,8557=>600,8558=>600,8559=>600,8560=>600,8564=>600,8569=>600,8572=>600,8573=>600,8574=>600,8575=>600,8592=>600,8593=>600,8594=>600,8595=>600,8596=>600,8704=>600,8706=>600,8707=>600,8709=>600,8710=>600,8711=>600,8712=>600,8713=>600,8714=>600,8715=>600,8716=>600,8717=>600,8719=>600,8720=>600,8721=>600,8722=>600,8723=>600,8725=>600,8727=>600,8729=>600,8730=>600,8731=>600,8732=>600,8733=>600,8734=>600,8756=>600,8800=>600,8801=>600,8804=>600,8805=>600,9251=>600,9674=>600,9824=>600,9825=>600,9826=>600,9827=>600,9828=>600,9829=>600,9830=>600,9831=>600,9833=>600,9834=>600,9835=>600,9836=>600,9837=>600,9838=>600,9839=>600,11799=>600,42888=>600,42889=>600,42890=>600,42891=>600,42892=>600,64256=>600,64257=>600,64258=>600,64285=>600,64287=>600,64288=>600,64298=>600,64299=>600,64300=>600,64301=>600,64302=>600,64303=>600,64304=>600,64305=>600,64306=>600,64307=>600,64308=>600,64309=>600,64310=>600,64312=>600,64313=>600,64314=>600,64315=>600,64316=>600,64318=>600,64320=>600,64321=>600,64323=>600,64324=>600,64326=>600,64327=>600,64328=>600,64329=>600,64330=>600,64331=>600,64332=>600,64333=>600,64334=>600,64335=>600,65533=>600,65535=>600);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/freemonobi.z b/lib/tcpdf/fonts/freemonobi.z
index b31acfb16f2..d66026f1dea 100644
Binary files a/lib/tcpdf/fonts/freemonobi.z and b/lib/tcpdf/fonts/freemonobi.z differ
diff --git a/lib/tcpdf/fonts/freemonoi.ctg.z b/lib/tcpdf/fonts/freemonoi.ctg.z
index 36e92ec0da7..68f60c2b98c 100644
Binary files a/lib/tcpdf/fonts/freemonoi.ctg.z and b/lib/tcpdf/fonts/freemonoi.ctg.z differ
diff --git a/lib/tcpdf/fonts/freemonoi.php b/lib/tcpdf/fonts/freemonoi.php
index 11cc061bd4f..7609953bf82 100644
--- a/lib/tcpdf/fonts/freemonoi.php
+++ b/lib/tcpdf/fonts/freemonoi.php
@@ -1,221 +1,15 @@
800,'Descent'=>-200,'CapHeight'=>44,'Flags'=>96,'FontBBox'=>'[-644 -200 816 800]','ItalicAngle'=>-12,'StemV'=>70,'MissingWidth'=>600);
$up=-125;
$ut=50;
$dw=600;
-$cw=array(
-32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,
-42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,
-52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,
-62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,
-72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,
-82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,
-92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,
-102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,
-112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,
-122=>600,123=>600,124=>600,125=>600,126=>600,8364=>600,8218=>600,402=>600,8222=>600,8230=>600,
-8224=>600,8225=>600,710=>600,8240=>600,352=>600,8249=>600,338=>600,381=>600,8216=>600,8217=>600,
-8220=>600,8221=>600,8226=>600,8211=>600,8212=>600,732=>600,8482=>600,353=>600,8250=>600,339=>600,
-382=>600,376=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,
-168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,
-178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,
-188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,
-198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,
-208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,
-218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,
-228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,
-238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,
-248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,257=>600,
-258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,267=>600,
-268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,277=>600,
-278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,287=>600,
-288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,297=>600,
-298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,307=>600,
-308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,317=>600,
-318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,327=>600,
-328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,337=>600,
-340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,349=>600,
-350=>600,351=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,361=>600,
-362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,371=>600,
-372=>600,373=>600,374=>600,375=>600,377=>600,378=>600,379=>600,380=>600,383=>600,384=>600,
-385=>600,386=>600,387=>600,388=>600,389=>600,390=>600,391=>600,392=>600,393=>600,394=>600,
-395=>600,396=>600,397=>600,398=>600,399=>600,400=>600,401=>600,403=>600,404=>600,405=>600,
-406=>600,407=>600,408=>600,409=>600,410=>600,411=>600,412=>600,413=>600,414=>600,415=>600,
-416=>600,417=>600,418=>600,419=>600,420=>600,421=>600,422=>600,423=>600,424=>600,425=>600,
-426=>600,427=>600,428=>600,429=>600,430=>600,431=>600,432=>600,433=>600,434=>600,435=>600,
-436=>600,437=>600,438=>600,439=>600,440=>600,441=>600,442=>600,443=>600,444=>600,445=>600,
-446=>600,447=>600,448=>600,449=>600,450=>600,451=>600,452=>600,453=>600,454=>600,455=>600,
-456=>600,457=>600,458=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,465=>600,
-466=>600,467=>600,468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,475=>600,
-476=>600,477=>600,478=>600,479=>600,480=>600,481=>600,482=>600,483=>600,484=>600,485=>600,
-486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,492=>600,493=>600,494=>600,495=>600,
-496=>600,497=>600,498=>600,499=>600,500=>600,501=>600,502=>600,503=>600,504=>600,505=>600,
-506=>600,507=>600,508=>600,509=>600,510=>600,511=>600,512=>600,513=>600,514=>600,515=>600,
-516=>600,517=>600,518=>600,519=>600,520=>600,521=>600,522=>600,523=>600,524=>600,525=>600,
-526=>600,527=>600,528=>600,529=>600,530=>600,531=>600,532=>600,533=>600,534=>600,535=>600,
-536=>600,537=>600,538=>600,539=>600,540=>600,541=>600,542=>600,543=>600,548=>600,549=>600,
-550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,556=>600,557=>600,558=>600,559=>600,
-560=>600,561=>600,562=>600,563=>600,567=>600,592=>600,593=>600,594=>600,595=>600,596=>600,
-597=>600,598=>600,599=>600,600=>600,601=>600,602=>600,603=>600,604=>600,607=>600,608=>600,
-609=>600,610=>600,611=>600,612=>600,613=>600,614=>600,615=>600,616=>600,617=>600,618=>600,
-619=>600,620=>600,621=>600,622=>600,623=>600,624=>600,625=>600,626=>600,627=>600,628=>600,
-629=>600,630=>600,632=>600,633=>600,634=>600,635=>600,636=>600,637=>600,638=>600,639=>600,
-640=>600,641=>600,642=>600,643=>600,644=>600,645=>600,646=>600,647=>600,648=>600,649=>600,
-651=>600,652=>600,653=>600,654=>600,655=>600,656=>600,657=>600,658=>600,660=>600,661=>600,
-662=>600,663=>600,664=>600,665=>600,667=>600,668=>600,669=>600,670=>600,671=>600,672=>600,
-673=>600,674=>600,679=>600,688=>600,689=>600,690=>600,691=>600,692=>600,693=>600,694=>600,
-695=>600,696=>600,697=>600,698=>600,699=>600,700=>600,701=>600,702=>600,703=>600,704=>600,
-705=>600,706=>600,707=>600,708=>600,709=>600,711=>600,712=>600,713=>600,714=>600,715=>600,
-716=>600,717=>600,718=>600,719=>600,720=>600,721=>600,722=>600,723=>600,724=>600,725=>600,
-726=>600,727=>600,728=>600,729=>600,730=>600,731=>600,733=>600,734=>600,735=>600,736=>600,
-737=>600,738=>600,739=>600,740=>600,741=>600,742=>600,743=>600,744=>600,745=>600,746=>600,
-747=>600,748=>600,749=>600,750=>600,751=>600,752=>600,753=>600,754=>600,755=>600,756=>600,
-757=>600,758=>600,759=>600,760=>600,761=>600,762=>600,763=>600,764=>600,765=>600,766=>600,
-767=>600,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,
-777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,
-787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,795=>0,796=>0,800=>0,
-803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,812=>0,813=>0,
-814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,
-824=>0,825=>0,826=>0,827=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,
-838=>0,839=>0,840=>0,844=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,
-855=>0,884=>600,885=>600,890=>600,894=>600,900=>600,901=>600,902=>600,903=>600,904=>600,
-905=>600,906=>600,908=>600,910=>600,911=>600,912=>600,913=>600,914=>600,915=>600,916=>600,
-917=>600,918=>600,919=>600,920=>600,921=>600,922=>600,923=>600,924=>600,925=>600,926=>600,
-927=>600,928=>600,929=>600,931=>600,932=>600,933=>600,934=>600,935=>600,936=>600,937=>600,
-938=>600,939=>600,940=>600,941=>600,942=>600,943=>600,944=>600,945=>600,946=>600,947=>600,
-948=>600,949=>600,950=>600,951=>600,952=>600,953=>600,954=>600,955=>600,956=>600,957=>600,
-958=>600,959=>600,960=>600,961=>600,962=>600,963=>600,964=>600,965=>600,966=>600,967=>600,
-968=>600,969=>600,970=>600,971=>600,972=>600,973=>600,974=>600,976=>600,977=>600,978=>600,
-979=>600,980=>600,981=>600,982=>600,986=>600,987=>600,988=>600,1008=>600,1009=>600,1012=>600,
-1013=>600,1024=>600,1025=>600,1026=>600,1027=>600,1028=>600,1029=>600,1030=>600,1031=>600,1032=>600,
-1033=>600,1034=>600,1035=>600,1036=>600,1037=>600,1038=>600,1039=>600,1040=>600,1041=>600,1042=>600,
-1043=>600,1044=>600,1045=>600,1046=>600,1047=>600,1048=>600,1049=>600,1050=>600,1051=>600,1052=>600,
-1053=>600,1054=>600,1055=>600,1056=>600,1057=>600,1058=>600,1059=>600,1060=>600,1061=>600,1062=>600,
-1063=>600,1064=>600,1065=>600,1066=>600,1067=>600,1068=>600,1069=>600,1070=>600,1071=>600,1072=>600,
-1073=>600,1074=>600,1075=>600,1076=>600,1077=>600,1078=>600,1079=>600,1080=>600,1081=>600,1082=>600,
-1083=>600,1084=>600,1085=>600,1086=>600,1087=>600,1088=>600,1089=>600,1090=>600,1091=>600,1092=>600,
-1093=>600,1094=>600,1095=>600,1096=>600,1097=>600,1098=>600,1099=>600,1100=>600,1101=>600,1102=>600,
-1103=>600,1104=>600,1105=>600,1106=>600,1107=>600,1108=>600,1109=>600,1110=>600,1111=>600,1112=>600,
-1113=>600,1114=>600,1115=>600,1116=>600,1117=>600,1118=>600,1119=>600,1120=>600,1121=>600,1122=>600,
-1123=>600,1124=>600,1126=>600,1127=>600,1128=>600,1130=>600,1131=>600,1132=>600,1133=>600,1136=>600,
-1137=>600,1138=>600,1140=>600,1141=>600,1142=>600,1143=>600,1155=>0,1156=>0,1157=>0,1158=>0,
-1159=>0,1162=>600,1163=>600,1164=>600,1165=>600,1166=>600,1167=>600,1168=>600,1169=>600,1170=>600,
-1171=>600,1172=>600,1173=>600,1174=>600,1175=>600,1176=>600,1177=>600,1178=>600,1179=>600,1180=>600,
-1181=>600,1182=>600,1183=>600,1184=>600,1185=>600,1186=>600,1187=>600,1188=>600,1189=>600,1190=>600,
-1191=>600,1192=>600,1193=>600,1194=>600,1195=>600,1196=>600,1197=>600,1198=>600,1199=>600,1200=>600,
-1201=>600,1202=>600,1203=>600,1204=>600,1205=>600,1206=>600,1207=>600,1208=>600,1209=>600,1210=>600,
-1211=>600,1212=>600,1213=>600,1214=>600,1215=>600,1216=>600,1217=>600,1218=>600,1219=>600,1220=>600,
-1221=>600,1222=>600,1223=>600,1224=>600,1225=>600,1226=>600,1227=>600,1228=>600,1229=>600,1230=>600,
-1231=>600,1232=>600,1233=>600,1234=>600,1235=>600,1236=>600,1237=>600,1238=>600,1239=>600,1240=>600,
-1241=>600,1242=>600,1243=>600,1244=>600,1245=>600,1246=>600,1247=>600,1248=>600,1249=>600,1250=>600,
-1251=>600,1252=>600,1253=>600,1254=>600,1255=>600,1256=>600,1257=>600,1258=>600,1259=>600,1260=>600,
-1261=>600,1262=>600,1263=>600,1264=>600,1265=>600,1266=>600,1267=>600,1268=>600,1269=>600,1270=>600,
-1271=>600,1272=>600,1273=>600,1296=>600,1297=>600,1298=>600,1299=>600,1306=>600,1307=>600,1308=>600,
-1309=>600,1310=>600,1311=>600,1329=>600,1330=>600,1331=>600,1332=>600,1333=>600,1334=>600,1335=>600,
-1336=>600,1337=>600,1338=>600,1339=>600,1340=>600,1341=>600,1342=>600,1343=>600,1344=>600,1345=>600,
-1346=>600,1347=>600,1348=>600,1349=>600,1350=>600,1351=>600,1352=>600,1353=>600,1354=>600,1355=>600,
-1356=>600,1357=>600,1358=>600,1359=>600,1360=>600,1361=>600,1362=>600,1363=>600,1364=>600,1365=>600,
-1366=>600,1369=>600,1370=>600,1371=>600,1372=>600,1373=>600,1374=>600,1375=>600,1377=>600,1378=>600,
-1379=>600,1380=>600,1381=>600,1382=>600,1383=>600,1384=>600,1385=>600,1386=>600,1387=>600,1388=>600,
-1389=>600,1390=>600,1391=>600,1392=>600,1393=>600,1394=>600,1395=>600,1396=>600,1397=>600,1398=>600,
-1399=>600,1400=>600,1401=>600,1402=>600,1403=>600,1404=>600,1405=>600,1406=>600,1407=>600,1408=>600,
-1409=>600,1410=>600,1411=>600,1412=>600,1413=>600,1414=>600,1415=>600,1417=>600,1418=>600,1456=>0,
-1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,
-1468=>0,1469=>0,1470=>600,1471=>0,1472=>600,1473=>0,1474=>0,1475=>600,1476=>0,1488=>600,
-1489=>600,1490=>600,1491=>600,1492=>600,1493=>600,1494=>600,1495=>600,1496=>600,1497=>600,1498=>600,
-1499=>600,1500=>600,1501=>600,1502=>600,1503=>600,1504=>600,1505=>600,1506=>600,1507=>600,1508=>600,
-1509=>600,1510=>600,1511=>600,1512=>600,1513=>600,1514=>600,1520=>600,1521=>600,1522=>600,1523=>600,
-1524=>600,4304=>600,4305=>600,4306=>600,4307=>600,4308=>600,4309=>600,4310=>600,4311=>600,4312=>600,
-4313=>600,4314=>600,4315=>600,4316=>600,4317=>600,4318=>600,4319=>600,4320=>600,4321=>600,4322=>600,
-4323=>600,4324=>600,4325=>600,4326=>600,4327=>600,4328=>600,4329=>600,4330=>600,4331=>600,4332=>600,
-4333=>600,4334=>600,4335=>600,4336=>600,4337=>600,4338=>600,4339=>600,4340=>600,4341=>600,4345=>600,
-4347=>600,7680=>600,7681=>600,7682=>600,7683=>600,7684=>600,7685=>600,7686=>600,7687=>600,7688=>600,
-7689=>600,7690=>600,7691=>600,7692=>600,7693=>600,7694=>600,7695=>600,7696=>600,7697=>600,7698=>600,
-7699=>600,7700=>600,7701=>600,7702=>600,7703=>600,7704=>600,7705=>600,7706=>600,7707=>600,7708=>600,
-7709=>600,7710=>600,7711=>600,7712=>600,7713=>600,7714=>600,7715=>600,7716=>600,7717=>600,7718=>600,
-7719=>600,7720=>600,7721=>600,7722=>600,7723=>600,7724=>600,7725=>600,7726=>600,7727=>600,7728=>600,
-7729=>600,7730=>600,7731=>600,7732=>600,7733=>600,7734=>600,7735=>600,7736=>600,7737=>600,7738=>600,
-7739=>600,7740=>600,7741=>600,7742=>600,7743=>600,7744=>600,7745=>600,7746=>600,7747=>600,7748=>600,
-7749=>600,7750=>600,7751=>600,7752=>600,7753=>600,7754=>600,7755=>600,7756=>600,7757=>600,7758=>600,
-7759=>600,7760=>600,7761=>600,7762=>600,7763=>600,7764=>600,7765=>600,7766=>600,7767=>600,7768=>600,
-7769=>600,7770=>600,7771=>600,7772=>600,7773=>600,7774=>600,7775=>600,7776=>600,7777=>600,7778=>600,
-7779=>600,7780=>600,7781=>600,7782=>600,7783=>600,7784=>600,7785=>600,7786=>600,7787=>600,7788=>600,
-7789=>600,7790=>600,7791=>600,7792=>600,7793=>600,7794=>600,7795=>600,7796=>600,7797=>600,7798=>600,
-7799=>600,7800=>600,7801=>600,7802=>600,7803=>600,7804=>600,7805=>600,7806=>600,7807=>600,7808=>600,
-7809=>600,7810=>600,7811=>600,7812=>600,7813=>600,7814=>600,7815=>600,7816=>600,7817=>600,7818=>600,
-7819=>600,7820=>600,7821=>600,7822=>600,7823=>600,7824=>600,7825=>600,7826=>600,7827=>600,7828=>600,
-7829=>600,7830=>600,7831=>600,7832=>600,7833=>600,7834=>600,7835=>600,7840=>600,7841=>600,7842=>600,
-7843=>600,7844=>600,7845=>600,7846=>600,7847=>600,7848=>600,7849=>600,7850=>600,7851=>600,7852=>600,
-7853=>600,7854=>600,7855=>600,7856=>600,7857=>600,7858=>600,7859=>600,7860=>600,7861=>600,7862=>600,
-7863=>600,7864=>600,7865=>600,7866=>600,7867=>600,7868=>600,7869=>600,7870=>600,7871=>600,7872=>600,
-7873=>600,7874=>600,7875=>600,7876=>600,7877=>600,7878=>600,7879=>600,7880=>600,7881=>600,7882=>600,
-7883=>600,7884=>600,7885=>600,7886=>600,7887=>600,7888=>600,7889=>600,7890=>600,7891=>600,7892=>600,
-7893=>600,7894=>600,7895=>600,7896=>600,7897=>600,7898=>600,7899=>600,7900=>600,7901=>600,7902=>600,
-7903=>600,7904=>600,7905=>600,7906=>600,7907=>600,7908=>600,7909=>600,7910=>600,7911=>600,7912=>600,
-7913=>600,7914=>600,7915=>600,7916=>600,7917=>600,7918=>600,7919=>600,7920=>600,7921=>600,7922=>600,
-7923=>600,7924=>600,7925=>600,7926=>600,7927=>600,7928=>600,7929=>600,7936=>600,7937=>600,7938=>600,
-7939=>600,7940=>600,7941=>600,7942=>600,7943=>600,7944=>600,7945=>600,7946=>600,7947=>600,7948=>600,
-7949=>600,7950=>600,7951=>600,7952=>600,7953=>600,7954=>600,7955=>600,7956=>600,7957=>600,7960=>600,
-7961=>600,7962=>600,7963=>600,7964=>600,7965=>600,7968=>600,7969=>600,7970=>600,7971=>600,7972=>600,
-7973=>600,7974=>600,7975=>600,7976=>600,7977=>600,7978=>600,7979=>600,7980=>600,7981=>600,7982=>600,
-7983=>600,7984=>600,7985=>600,7986=>600,7987=>600,7988=>600,7989=>600,7990=>600,7991=>600,7992=>600,
-7993=>600,7994=>600,7995=>600,7996=>600,7997=>600,7998=>600,7999=>600,8000=>600,8001=>600,8002=>600,
-8003=>600,8004=>600,8005=>600,8008=>600,8009=>600,8010=>600,8011=>600,8012=>600,8013=>600,8016=>600,
-8017=>600,8018=>600,8019=>600,8020=>600,8021=>600,8022=>600,8023=>600,8025=>600,8027=>600,8029=>600,
-8031=>600,8032=>600,8033=>600,8034=>600,8035=>600,8036=>600,8037=>600,8038=>600,8039=>600,8040=>600,
-8041=>600,8042=>600,8043=>600,8044=>600,8045=>600,8046=>600,8047=>600,8048=>600,8049=>600,8050=>600,
-8051=>600,8052=>600,8053=>600,8054=>600,8055=>600,8056=>600,8057=>600,8058=>600,8059=>600,8060=>600,
-8061=>600,8064=>600,8065=>600,8066=>600,8067=>600,8068=>600,8069=>600,8070=>600,8071=>600,8072=>600,
-8073=>600,8074=>600,8075=>600,8076=>600,8077=>600,8078=>600,8079=>600,8080=>600,8081=>600,8082=>600,
-8083=>600,8084=>600,8085=>600,8086=>600,8087=>600,8088=>600,8089=>600,8090=>600,8091=>600,8092=>600,
-8093=>600,8094=>600,8095=>600,8096=>600,8097=>600,8098=>600,8099=>600,8100=>600,8101=>600,8102=>600,
-8103=>600,8104=>600,8105=>600,8106=>600,8107=>600,8108=>600,8109=>600,8110=>600,8111=>600,8112=>600,
-8113=>600,8114=>600,8115=>600,8116=>600,8118=>600,8119=>600,8120=>600,8121=>600,8122=>600,8123=>600,
-8124=>600,8125=>600,8126=>600,8127=>600,8128=>600,8129=>600,8130=>600,8131=>600,8132=>600,8134=>600,
-8135=>600,8136=>600,8137=>600,8138=>600,8139=>600,8140=>600,8141=>600,8142=>600,8143=>600,8144=>600,
-8145=>600,8146=>600,8147=>600,8150=>600,8151=>600,8152=>600,8153=>600,8154=>600,8155=>600,8157=>600,
-8158=>600,8159=>600,8160=>600,8161=>600,8162=>600,8163=>600,8164=>600,8165=>600,8166=>600,8167=>600,
-8168=>600,8169=>600,8170=>600,8171=>600,8172=>600,8173=>600,8174=>600,8175=>600,8178=>600,8179=>600,
-8180=>600,8182=>600,8183=>600,8184=>600,8185=>600,8186=>600,8187=>600,8188=>600,8189=>600,8190=>600,
-8192=>600,8193=>600,8194=>600,8195=>600,8196=>600,8197=>600,8198=>600,8199=>600,8200=>600,8201=>600,
-8202=>600,8203=>600,8204=>0,8205=>0,8206=>0,8207=>0,8208=>600,8209=>600,8210=>600,8213=>600,
-8214=>600,8215=>600,8219=>600,8223=>600,8227=>600,8228=>600,8229=>600,8231=>600,8232=>600,8233=>600,
-8234=>600,8235=>600,8236=>600,8237=>600,8238=>600,8239=>600,8241=>600,8242=>600,8243=>600,8244=>600,
-8245=>600,8246=>600,8247=>600,8248=>600,8251=>600,8252=>600,8253=>600,8254=>600,8255=>600,8256=>600,
-8257=>600,8258=>600,8259=>600,8260=>600,8261=>600,8262=>600,8263=>600,8264=>600,8265=>600,8266=>600,
-8267=>600,8268=>600,8269=>600,8270=>600,8271=>600,8272=>600,8273=>600,8274=>600,8275=>600,8276=>600,
-8277=>600,8278=>600,8279=>600,8280=>600,8281=>600,8282=>600,8283=>600,8284=>600,8285=>600,8286=>600,
-8287=>600,8288=>600,8289=>600,8290=>600,8291=>600,8292=>600,8298=>600,8299=>600,8300=>600,8301=>600,
-8302=>600,8303=>600,8304=>600,8305=>600,8308=>600,8309=>600,8310=>600,8311=>600,8312=>600,8313=>600,
-8314=>600,8315=>600,8316=>600,8317=>600,8318=>600,8319=>600,8320=>600,8321=>600,8322=>600,8323=>600,
-8324=>600,8325=>600,8326=>600,8327=>600,8328=>600,8329=>600,8330=>600,8331=>600,8332=>600,8333=>600,
-8334=>600,8336=>600,8337=>600,8338=>600,8339=>600,8340=>600,8355=>600,8356=>600,8359=>600,8362=>600,
-8373=>600,8448=>600,8449=>600,8450=>600,8451=>600,8453=>600,8454=>600,8455=>600,8457=>600,8461=>600,
-8464=>600,8465=>600,8466=>600,8467=>600,8468=>600,8469=>600,8470=>600,8471=>600,8472=>600,8473=>600,
-8474=>600,8476=>600,8477=>600,8478=>600,8481=>600,8484=>600,8486=>600,8487=>600,8489=>600,8490=>600,
-8491=>600,8498=>600,8501=>600,8502=>600,8503=>600,8504=>600,8506=>600,8507=>600,8523=>600,8525=>600,
-8526=>600,8531=>600,8532=>600,8533=>600,8534=>600,8535=>600,8536=>600,8537=>600,8538=>600,8539=>600,
-8540=>600,8541=>600,8542=>600,8543=>600,8544=>600,8545=>600,8546=>600,8547=>600,8548=>600,8549=>600,
-8550=>600,8551=>600,8552=>600,8553=>600,8554=>600,8555=>600,8556=>600,8557=>600,8558=>600,8559=>600,
-8560=>600,8561=>600,8562=>600,8563=>600,8564=>600,8565=>600,8566=>600,8567=>600,8568=>600,8569=>600,
-8570=>600,8571=>600,8572=>600,8573=>600,8574=>600,8575=>600,8592=>600,8593=>600,8594=>600,8595=>600,
-8596=>600,8597=>600,8598=>600,8599=>600,8600=>600,8601=>600,8616=>600,8704=>600,8706=>600,8707=>600,
-8709=>600,8710=>600,8711=>600,8712=>600,8713=>600,8715=>600,8716=>600,8721=>600,8722=>600,8723=>600,
-8725=>600,8729=>600,8730=>600,8733=>600,8734=>600,8745=>600,8746=>600,8747=>600,8756=>600,8764=>600,
-8769=>600,8770=>600,8773=>600,8776=>600,8800=>600,8801=>600,8804=>600,8805=>600,8834=>600,8835=>600,
-8836=>600,8837=>600,8838=>600,8839=>600,9001=>600,9002=>600,9251=>600,9674=>600,9824=>600,9825=>600,
-9826=>600,9827=>600,9828=>600,9829=>600,9830=>600,9831=>600,9833=>600,9834=>600,9835=>600,9836=>600,
-9837=>600,9838=>600,9839=>600,64256=>600,64257=>600,64258=>600,64285=>600,64286=>600,64287=>600,64288=>600,
-64289=>600,64290=>600,64291=>600,64292=>600,64293=>600,64294=>600,64295=>600,64296=>600,64297=>600,64298=>600,
-64299=>600,64300=>600,64301=>600,64302=>600,64303=>600,64304=>600,64305=>600,64306=>600,64307=>600,64308=>600,
-64309=>600,64310=>600,64312=>600,64313=>600,64314=>600,64315=>600,64316=>600,64318=>600,64320=>600,64321=>600,
-64323=>600,64324=>600,64326=>600,64327=>600,64328=>600,64329=>600,64330=>600,64331=>600,64332=>600,64333=>600,
-64334=>600,64335=>600,65533=>600);
-$enc='';
$diff='';
+$originalsize=208128;
+$enc='';
$file='freemonoi.z';
$ctg='freemonoi.ctg.z';
-$originalsize=196732;
-?>
\ No newline at end of file
+$desc=array('Flags'=>97,'FontBBox'=>'[-644 -200 816 800]','ItalicAngle'=>-12,'Ascent'=>800,'Descent'=>-200,'Leading'=>90,'CapHeight'=>563,'XHeight'=>417,'StemV'=>70,'StemH'=>30,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600);
+$cw=array(0=>0,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>0,9=>600,10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600,20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>0,30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600,136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600,145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600,154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,257=>600,258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,267=>600,268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,277=>600,278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,287=>600,288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,297=>600,298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,307=>600,308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,317=>600,318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,327=>600,328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,337=>600,338=>600,339=>600,340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,349=>600,350=>600,351=>600,352=>600,353=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,361=>600,362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,371=>600,372=>600,373=>600,374=>600,375=>600,376=>600,377=>600,378=>600,379=>600,380=>600,381=>600,382=>600,383=>600,384=>600,385=>600,386=>600,387=>600,388=>600,389=>600,390=>600,391=>600,392=>600,393=>600,394=>600,395=>600,396=>600,397=>600,398=>600,399=>600,400=>600,401=>600,402=>600,403=>600,404=>600,405=>600,406=>600,407=>600,408=>600,409=>600,410=>600,411=>600,412=>600,413=>600,414=>600,415=>600,416=>600,417=>600,418=>600,419=>600,420=>600,421=>600,422=>600,423=>600,424=>600,425=>600,426=>600,427=>600,428=>600,429=>600,430=>600,431=>600,432=>600,433=>600,434=>600,435=>600,436=>600,437=>600,438=>600,439=>600,440=>600,441=>600,442=>600,443=>600,444=>600,445=>600,446=>600,447=>600,448=>600,449=>600,450=>600,451=>600,452=>600,453=>600,454=>600,455=>600,456=>600,457=>600,458=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,465=>600,466=>600,467=>600,468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,475=>600,476=>600,477=>600,478=>600,479=>600,480=>600,481=>600,482=>600,483=>600,484=>600,485=>600,486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,492=>600,493=>600,494=>600,495=>600,496=>600,497=>600,498=>600,499=>600,500=>600,501=>600,502=>600,503=>600,504=>600,505=>600,506=>600,507=>600,508=>600,509=>600,510=>600,511=>600,512=>600,513=>600,514=>600,515=>600,516=>600,517=>600,518=>600,519=>600,520=>600,521=>600,522=>600,523=>600,524=>600,525=>600,526=>600,527=>600,528=>600,529=>600,530=>600,531=>600,532=>600,533=>600,534=>600,535=>600,536=>600,537=>600,538=>600,539=>600,540=>600,541=>600,542=>600,543=>600,544=>600,548=>600,549=>600,550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,556=>600,557=>600,558=>600,559=>600,560=>600,561=>600,562=>600,563=>600,567=>600,592=>600,593=>600,594=>600,595=>600,596=>600,597=>600,598=>600,599=>600,600=>600,601=>600,602=>600,603=>600,604=>600,605=>600,606=>600,607=>600,608=>600,609=>600,610=>600,611=>600,612=>600,613=>600,614=>600,615=>600,616=>600,617=>600,618=>600,619=>600,620=>600,621=>600,622=>600,623=>600,624=>600,625=>600,626=>600,627=>600,628=>600,629=>600,630=>600,631=>600,632=>600,633=>600,634=>600,635=>600,636=>600,637=>600,638=>600,639=>600,640=>600,641=>600,642=>600,643=>600,644=>600,645=>600,646=>600,647=>600,648=>600,649=>600,650=>600,651=>600,652=>600,653=>600,654=>600,655=>600,656=>600,657=>600,658=>600,659=>600,660=>600,661=>600,662=>600,663=>600,664=>600,665=>600,666=>600,667=>600,668=>600,669=>600,670=>600,671=>600,672=>600,673=>600,674=>600,675=>600,676=>600,677=>600,678=>600,679=>600,680=>600,681=>600,682=>600,683=>600,684=>600,685=>600,686=>600,687=>600,688=>600,689=>600,690=>600,691=>600,692=>600,693=>600,694=>600,695=>600,696=>600,697=>600,698=>600,699=>600,700=>600,701=>600,702=>600,703=>600,704=>600,705=>600,706=>600,707=>600,708=>600,709=>600,710=>600,711=>600,712=>600,713=>600,714=>600,715=>600,716=>600,717=>600,718=>600,719=>600,720=>600,721=>600,722=>600,723=>600,724=>600,725=>600,726=>600,727=>600,728=>600,729=>600,730=>600,731=>600,732=>600,733=>600,734=>600,735=>600,736=>600,737=>600,738=>600,739=>600,740=>600,741=>600,742=>600,743=>600,744=>600,745=>600,746=>600,747=>600,748=>600,749=>600,750=>600,751=>600,752=>600,753=>600,754=>600,755=>600,756=>600,757=>600,758=>600,759=>600,760=>600,761=>600,762=>600,763=>600,764=>600,765=>600,766=>600,767=>600,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,843=>0,844=>0,845=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,884=>600,885=>600,890=>600,894=>600,900=>600,901=>600,902=>600,903=>600,904=>600,905=>600,906=>600,908=>600,910=>600,911=>600,912=>600,913=>600,914=>600,915=>600,916=>600,917=>600,918=>600,919=>600,920=>600,921=>600,922=>600,923=>600,924=>600,925=>600,926=>600,927=>600,928=>600,929=>600,931=>600,932=>600,933=>600,934=>600,935=>600,936=>600,937=>600,938=>600,939=>600,940=>600,941=>600,942=>600,943=>600,944=>600,945=>600,946=>600,947=>600,948=>600,949=>600,950=>600,951=>600,952=>600,953=>600,954=>600,955=>600,956=>600,957=>600,958=>600,959=>600,960=>600,961=>600,962=>600,963=>600,964=>600,965=>600,966=>600,967=>600,968=>600,969=>600,970=>600,971=>600,972=>600,973=>600,974=>600,976=>600,977=>600,978=>600,979=>600,980=>600,981=>600,982=>600,986=>600,987=>600,988=>600,1008=>600,1009=>600,1012=>600,1013=>600,1024=>600,1025=>600,1026=>600,1027=>600,1028=>600,1029=>600,1030=>600,1031=>600,1032=>600,1033=>600,1034=>600,1035=>600,1036=>600,1037=>600,1038=>600,1039=>600,1040=>600,1041=>600,1042=>600,1043=>600,1044=>600,1045=>600,1046=>600,1047=>600,1048=>600,1049=>600,1050=>600,1051=>600,1052=>600,1053=>600,1054=>600,1055=>600,1056=>600,1057=>600,1058=>600,1059=>600,1060=>600,1061=>600,1062=>600,1063=>600,1064=>600,1065=>600,1066=>600,1067=>600,1068=>600,1069=>600,1070=>600,1071=>600,1072=>600,1073=>600,1074=>600,1075=>600,1076=>600,1077=>600,1078=>600,1079=>600,1080=>600,1081=>600,1082=>600,1083=>600,1084=>600,1085=>600,1086=>600,1087=>600,1088=>600,1089=>600,1090=>600,1091=>600,1092=>600,1093=>600,1094=>600,1095=>600,1096=>600,1097=>600,1098=>600,1099=>600,1100=>600,1101=>600,1102=>600,1103=>600,1104=>600,1105=>600,1106=>600,1107=>600,1108=>600,1109=>600,1110=>600,1111=>600,1112=>600,1113=>600,1114=>600,1115=>600,1116=>600,1117=>600,1118=>600,1119=>600,1120=>600,1121=>600,1122=>600,1123=>600,1124=>600,1126=>600,1127=>600,1128=>600,1130=>600,1131=>600,1132=>600,1133=>600,1136=>600,1137=>600,1138=>600,1140=>600,1141=>600,1142=>600,1143=>600,1148=>600,1149=>600,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1162=>600,1163=>600,1164=>600,1165=>600,1166=>600,1167=>600,1168=>600,1169=>600,1170=>600,1171=>600,1172=>600,1173=>600,1174=>600,1175=>600,1176=>600,1177=>600,1178=>600,1179=>600,1180=>600,1181=>600,1182=>600,1183=>600,1184=>600,1185=>600,1186=>600,1187=>600,1188=>600,1189=>600,1190=>600,1191=>600,1192=>600,1193=>600,1194=>600,1195=>600,1196=>600,1197=>600,1198=>600,1199=>600,1200=>600,1201=>600,1202=>600,1203=>600,1204=>600,1205=>600,1206=>600,1207=>600,1208=>600,1209=>600,1210=>600,1211=>600,1212=>600,1213=>600,1214=>600,1215=>600,1216=>600,1217=>600,1218=>600,1219=>600,1220=>600,1221=>600,1222=>600,1223=>600,1224=>600,1225=>600,1226=>600,1227=>600,1228=>600,1229=>600,1230=>600,1231=>600,1232=>600,1233=>600,1234=>600,1235=>600,1236=>600,1237=>600,1238=>600,1239=>600,1240=>600,1241=>600,1242=>600,1243=>600,1244=>600,1245=>600,1246=>600,1247=>600,1248=>600,1249=>600,1250=>600,1251=>600,1252=>600,1253=>600,1254=>600,1255=>600,1256=>600,1257=>600,1258=>600,1259=>600,1260=>600,1261=>600,1262=>600,1263=>600,1264=>600,1265=>600,1266=>600,1267=>600,1268=>600,1269=>600,1270=>600,1271=>600,1272=>600,1273=>600,1296=>600,1297=>600,1298=>600,1299=>600,1306=>600,1307=>600,1308=>600,1309=>600,1310=>600,1311=>600,1329=>600,1330=>600,1331=>600,1332=>600,1333=>600,1334=>600,1335=>600,1336=>600,1337=>600,1338=>600,1339=>600,1340=>600,1341=>600,1342=>600,1343=>600,1344=>600,1345=>600,1346=>600,1347=>600,1348=>600,1349=>600,1350=>600,1351=>600,1352=>600,1353=>600,1354=>600,1355=>600,1356=>600,1357=>600,1358=>600,1359=>600,1360=>600,1361=>600,1362=>600,1363=>600,1364=>600,1365=>600,1366=>600,1369=>600,1370=>600,1371=>600,1372=>600,1373=>600,1374=>600,1375=>600,1377=>600,1378=>600,1379=>600,1380=>600,1381=>600,1382=>600,1383=>600,1384=>600,1385=>600,1386=>600,1387=>600,1388=>600,1389=>600,1390=>600,1391=>600,1392=>600,1393=>600,1394=>600,1395=>600,1396=>600,1397=>600,1398=>600,1399=>600,1400=>600,1401=>600,1402=>600,1403=>600,1404=>600,1405=>600,1406=>600,1407=>600,1408=>600,1409=>600,1410=>600,1411=>600,1412=>600,1413=>600,1414=>600,1415=>600,1417=>600,1418=>600,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0,1470=>600,1471=>0,1472=>600,1473=>0,1474=>0,1475=>600,1476=>0,1488=>600,1489=>600,1490=>600,1491=>600,1492=>600,1493=>600,1494=>600,1495=>600,1496=>600,1497=>600,1498=>600,1499=>600,1500=>600,1501=>600,1502=>600,1503=>600,1504=>600,1505=>600,1506=>600,1507=>600,1508=>600,1509=>600,1510=>600,1511=>600,1512=>600,1513=>600,1514=>600,1520=>600,1521=>600,1522=>600,1523=>600,1524=>600,4304=>600,4305=>600,4306=>600,4307=>600,4308=>600,4309=>600,4310=>600,4311=>600,4312=>600,4313=>600,4314=>600,4315=>600,4316=>600,4317=>600,4318=>600,4319=>600,4320=>600,4321=>600,4322=>600,4323=>600,4324=>600,4325=>600,4326=>600,4327=>600,4328=>600,4329=>600,4330=>600,4331=>600,4332=>600,4333=>600,4334=>600,4335=>600,4336=>600,4337=>600,4338=>600,4339=>600,4340=>600,4341=>600,4345=>600,4347=>600,4348=>600,7680=>600,7681=>600,7682=>600,7683=>600,7684=>600,7685=>600,7686=>600,7687=>600,7688=>600,7689=>600,7690=>600,7691=>600,7692=>600,7693=>600,7694=>600,7695=>600,7696=>600,7697=>600,7698=>600,7699=>600,7700=>600,7701=>600,7702=>600,7703=>600,7704=>600,7705=>600,7706=>600,7707=>600,7708=>600,7709=>600,7710=>600,7711=>600,7712=>600,7713=>600,7714=>600,7715=>600,7716=>600,7717=>600,7718=>600,7719=>600,7720=>600,7721=>600,7722=>600,7723=>600,7724=>600,7725=>600,7726=>600,7727=>600,7728=>600,7729=>600,7730=>600,7731=>600,7732=>600,7733=>600,7734=>600,7735=>600,7736=>600,7737=>600,7738=>600,7739=>600,7740=>600,7741=>600,7742=>600,7743=>600,7744=>600,7745=>600,7746=>600,7747=>600,7748=>600,7749=>600,7750=>600,7751=>600,7752=>600,7753=>600,7754=>600,7755=>600,7756=>600,7757=>600,7758=>600,7759=>600,7760=>600,7761=>600,7762=>600,7763=>600,7764=>600,7765=>600,7766=>600,7767=>600,7768=>600,7769=>600,7770=>600,7771=>600,7772=>600,7773=>600,7774=>600,7775=>600,7776=>600,7777=>600,7778=>600,7779=>600,7780=>600,7781=>600,7782=>600,7783=>600,7784=>600,7785=>600,7786=>600,7787=>600,7788=>600,7789=>600,7790=>600,7791=>600,7792=>600,7793=>600,7794=>600,7795=>600,7796=>600,7797=>600,7798=>600,7799=>600,7800=>600,7801=>600,7802=>600,7803=>600,7804=>600,7805=>600,7806=>600,7807=>600,7808=>600,7809=>600,7810=>600,7811=>600,7812=>600,7813=>600,7814=>600,7815=>600,7816=>600,7817=>600,7818=>600,7819=>600,7820=>600,7821=>600,7822=>600,7823=>600,7824=>600,7825=>600,7826=>600,7827=>600,7828=>600,7829=>600,7830=>600,7831=>600,7832=>600,7833=>600,7834=>600,7835=>600,7840=>600,7841=>600,7842=>600,7843=>600,7844=>600,7845=>600,7846=>600,7847=>600,7848=>600,7849=>600,7850=>600,7851=>600,7852=>600,7853=>600,7854=>600,7855=>600,7856=>600,7857=>600,7858=>600,7859=>600,7860=>600,7861=>600,7862=>600,7863=>600,7864=>600,7865=>600,7866=>600,7867=>600,7868=>600,7869=>600,7870=>600,7871=>600,7872=>600,7873=>600,7874=>600,7875=>600,7876=>600,7877=>600,7878=>600,7879=>600,7880=>600,7881=>600,7882=>600,7883=>600,7884=>600,7885=>600,7886=>600,7887=>600,7888=>600,7889=>600,7890=>600,7891=>600,7892=>600,7893=>600,7894=>600,7895=>600,7896=>600,7897=>600,7898=>600,7899=>600,7900=>600,7901=>600,7902=>600,7903=>600,7904=>600,7905=>600,7906=>600,7907=>600,7908=>600,7909=>600,7910=>600,7911=>600,7912=>600,7913=>600,7914=>600,7915=>600,7916=>600,7917=>600,7918=>600,7919=>600,7920=>600,7921=>600,7922=>600,7923=>600,7924=>600,7925=>600,7926=>600,7927=>600,7928=>600,7929=>600,7936=>600,7937=>600,7938=>600,7939=>600,7940=>600,7941=>600,7942=>600,7943=>600,7944=>600,7945=>600,7946=>600,7947=>600,7948=>600,7949=>600,7950=>600,7951=>600,7952=>600,7953=>600,7954=>600,7955=>600,7956=>600,7957=>600,7960=>600,7961=>600,7962=>600,7963=>600,7964=>600,7965=>600,7968=>600,7969=>600,7970=>600,7971=>600,7972=>600,7973=>600,7974=>600,7975=>600,7976=>600,7977=>600,7978=>600,7979=>600,7980=>600,7981=>600,7982=>600,7983=>600,7984=>600,7985=>600,7986=>600,7987=>600,7988=>600,7989=>600,7990=>600,7991=>600,7992=>600,7993=>600,7994=>600,7995=>600,7996=>600,7997=>600,7998=>600,7999=>600,8000=>600,8001=>600,8002=>600,8003=>600,8004=>600,8005=>600,8008=>600,8009=>600,8010=>600,8011=>600,8012=>600,8013=>600,8016=>600,8017=>600,8018=>600,8019=>600,8020=>600,8021=>600,8022=>600,8023=>600,8025=>600,8027=>600,8029=>600,8031=>600,8032=>600,8033=>600,8034=>600,8035=>600,8036=>600,8037=>600,8038=>600,8039=>600,8040=>600,8041=>600,8042=>600,8043=>600,8044=>600,8045=>600,8046=>600,8047=>600,8048=>600,8049=>600,8050=>600,8051=>600,8052=>600,8053=>600,8054=>600,8055=>600,8056=>600,8057=>600,8058=>600,8059=>600,8060=>600,8061=>600,8064=>600,8065=>600,8066=>600,8067=>600,8068=>600,8069=>600,8070=>600,8071=>600,8072=>600,8073=>600,8074=>600,8075=>600,8076=>600,8077=>600,8078=>600,8079=>600,8080=>600,8081=>600,8082=>600,8083=>600,8084=>600,8085=>600,8086=>600,8087=>600,8088=>600,8089=>600,8090=>600,8091=>600,8092=>600,8093=>600,8094=>600,8095=>600,8096=>600,8097=>600,8098=>600,8099=>600,8100=>600,8101=>600,8102=>600,8103=>600,8104=>600,8105=>600,8106=>600,8107=>600,8108=>600,8109=>600,8110=>600,8111=>600,8112=>600,8113=>600,8114=>600,8115=>600,8116=>600,8118=>600,8119=>600,8120=>600,8121=>600,8122=>600,8123=>600,8124=>600,8125=>600,8126=>600,8127=>600,8128=>600,8129=>600,8130=>600,8131=>600,8132=>600,8134=>600,8135=>600,8136=>600,8137=>600,8138=>600,8139=>600,8140=>600,8141=>600,8142=>600,8143=>600,8144=>600,8145=>600,8146=>600,8147=>600,8150=>600,8151=>600,8152=>600,8153=>600,8154=>600,8155=>600,8157=>600,8158=>600,8159=>600,8160=>600,8161=>600,8162=>600,8163=>600,8164=>600,8165=>600,8166=>600,8167=>600,8168=>600,8169=>600,8170=>600,8171=>600,8172=>600,8173=>600,8174=>600,8175=>600,8178=>600,8179=>600,8180=>600,8182=>600,8183=>600,8184=>600,8185=>600,8186=>600,8187=>600,8188=>600,8189=>600,8190=>600,8192=>600,8193=>600,8194=>600,8195=>600,8196=>600,8197=>600,8198=>600,8199=>600,8200=>600,8201=>600,8202=>600,8203=>600,8204=>0,8205=>0,8206=>0,8207=>0,8208=>600,8209=>600,8210=>600,8211=>600,8212=>600,8213=>600,8214=>600,8215=>600,8216=>600,8217=>600,8218=>600,8219=>600,8220=>600,8221=>600,8222=>600,8223=>600,8224=>600,8225=>600,8226=>600,8227=>600,8228=>600,8229=>600,8230=>600,8231=>600,8232=>600,8233=>600,8234=>600,8235=>600,8236=>600,8237=>600,8238=>600,8239=>600,8240=>600,8241=>600,8242=>600,8243=>600,8244=>600,8245=>600,8246=>600,8247=>600,8248=>600,8249=>600,8250=>600,8251=>600,8252=>600,8253=>600,8254=>600,8255=>600,8256=>600,8257=>600,8258=>600,8259=>600,8260=>600,8261=>600,8262=>600,8263=>600,8264=>600,8265=>600,8266=>600,8267=>600,8268=>600,8269=>600,8270=>600,8271=>600,8272=>600,8273=>600,8274=>600,8275=>600,8276=>600,8277=>600,8278=>600,8279=>600,8280=>600,8281=>600,8282=>600,8283=>600,8284=>600,8285=>600,8286=>600,8287=>600,8288=>600,8289=>600,8290=>600,8291=>600,8292=>600,8304=>600,8305=>600,8308=>600,8309=>600,8310=>600,8311=>600,8312=>600,8313=>600,8314=>600,8315=>600,8316=>600,8317=>600,8318=>600,8319=>600,8320=>600,8321=>600,8322=>600,8323=>600,8324=>600,8325=>600,8326=>600,8327=>600,8328=>600,8329=>600,8330=>600,8331=>600,8332=>600,8333=>600,8334=>600,8336=>600,8337=>600,8338=>600,8339=>600,8340=>600,8355=>600,8356=>600,8359=>600,8362=>600,8364=>600,8373=>600,8448=>600,8449=>600,8450=>600,8451=>600,8452=>600,8453=>600,8454=>600,8455=>600,8456=>600,8457=>600,8461=>600,8462=>600,8463=>600,8464=>600,8465=>600,8466=>600,8467=>600,8468=>600,8469=>600,8470=>600,8471=>600,8472=>600,8473=>600,8474=>600,8476=>600,8477=>600,8478=>600,8480=>600,8481=>600,8482=>600,8484=>600,8486=>600,8487=>600,8489=>600,8490=>600,8491=>600,8494=>600,8498=>600,8501=>600,8502=>600,8503=>600,8504=>600,8505=>600,8506=>600,8507=>600,8513=>600,8514=>600,8515=>600,8516=>600,8523=>600,8525=>600,8526=>600,8531=>600,8532=>600,8533=>600,8534=>600,8535=>600,8536=>600,8537=>600,8538=>600,8539=>600,8540=>600,8541=>600,8542=>600,8543=>600,8544=>600,8545=>600,8546=>600,8547=>600,8548=>600,8549=>600,8550=>600,8551=>600,8552=>600,8553=>600,8554=>600,8555=>600,8556=>600,8557=>600,8558=>600,8559=>600,8560=>600,8561=>600,8562=>600,8563=>600,8564=>600,8565=>600,8566=>600,8567=>600,8568=>600,8569=>600,8570=>600,8571=>600,8572=>600,8573=>600,8574=>600,8575=>600,8592=>600,8593=>600,8594=>600,8595=>600,8596=>600,8597=>600,8598=>600,8599=>600,8600=>600,8601=>600,8616=>600,8704=>600,8706=>600,8707=>600,8709=>600,8710=>600,8711=>600,8712=>600,8713=>600,8715=>600,8716=>600,8721=>600,8722=>600,8723=>600,8725=>600,8729=>600,8730=>600,8733=>600,8734=>600,8745=>600,8746=>600,8747=>600,8756=>600,8764=>600,8769=>600,8770=>600,8773=>600,8776=>600,8800=>600,8801=>600,8804=>600,8805=>600,8834=>600,8835=>600,8836=>600,8837=>600,8838=>600,8839=>600,9001=>600,9002=>600,9251=>600,9674=>600,9675=>600,9711=>600,9824=>600,9825=>600,9826=>600,9827=>600,9828=>600,9829=>600,9830=>600,9831=>600,9833=>600,9834=>600,9835=>600,9836=>600,9837=>600,9838=>600,9839=>600,11799=>600,42888=>600,42889=>600,42890=>600,42891=>600,42892=>600,64256=>600,64257=>600,64258=>600,64285=>600,64286=>600,64287=>600,64288=>600,64289=>600,64290=>600,64291=>600,64292=>600,64293=>600,64294=>600,64295=>600,64296=>600,64297=>600,64298=>600,64299=>600,64300=>600,64301=>600,64302=>600,64303=>600,64304=>600,64305=>600,64306=>600,64307=>600,64308=>600,64309=>600,64310=>600,64312=>600,64313=>600,64314=>600,64315=>600,64316=>600,64318=>600,64320=>600,64321=>600,64323=>600,64324=>600,64326=>600,64327=>600,64328=>600,64329=>600,64330=>600,64331=>600,64332=>600,64333=>600,64334=>600,64335=>600,65533=>600,65535=>600);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/freemonoi.z b/lib/tcpdf/fonts/freemonoi.z
index 93bf7d35e92..9418d5fa215 100644
Binary files a/lib/tcpdf/fonts/freemonoi.z and b/lib/tcpdf/fonts/freemonoi.z differ
diff --git a/lib/tcpdf/fonts/freesans.ctg.z b/lib/tcpdf/fonts/freesans.ctg.z
index b3bf68c3d39..60e1fffe6c2 100644
Binary files a/lib/tcpdf/fonts/freesans.ctg.z and b/lib/tcpdf/fonts/freesans.ctg.z differ
diff --git a/lib/tcpdf/fonts/freesans.php b/lib/tcpdf/fonts/freesans.php
index d10a3219737..0de080770c7 100644
--- a/lib/tcpdf/fonts/freesans.php
+++ b/lib/tcpdf/fonts/freesans.php
@@ -1,311 +1,15 @@
1000,'Descent'=>-300,'CapHeight'=>22,'Flags'=>32,'FontBBox'=>'[-958 -550 1632 1050]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600);
$up=-176;
$ut=50;
-$dw=600;
-$cw=array(
-32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,
-42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,
-52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,
-62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,
-72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778,
-82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,
-92=>278,93=>277,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,
-102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556,
-112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,
-122=>500,123=>334,124=>260,125=>334,126=>584,8364=>655,8218=>222,402=>278,8222=>333,8230=>1000,
-8224=>556,8225=>556,710=>333,8240=>1000,352=>667,8249=>250,338=>1000,381=>611,8216=>222,8217=>221,
-8220=>333,8221=>333,8226=>350,8211=>556,8212=>1000,732=>333,8482=>1000,353=>500,8250=>250,339=>944,
-382=>500,376=>667,160=>278,161=>278,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,
-168=>333,169=>737,170=>370,171=>448,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584,
-178=>350,179=>350,180=>333,181=>556,182=>537,183=>278,184=>333,185=>350,186=>365,187=>448,
-188=>869,189=>869,190=>869,191=>556,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,
-198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,
-208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,
-218=>722,219=>722,220=>722,221=>667,222=>666,223=>611,224=>556,225=>556,226=>556,227=>556,
-228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,
-238=>278,239=>278,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,
-248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>555,255=>500,256=>667,257=>556,
-258=>667,259=>556,260=>667,261=>556,262=>722,263=>500,264=>722,265=>500,266=>722,267=>500,
-268=>722,269=>500,270=>722,271=>722,272=>722,273=>556,274=>667,275=>556,276=>667,277=>556,
-278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>556,286=>778,287=>556,
-288=>778,289=>556,290=>778,291=>556,292=>722,293=>556,294=>722,295=>556,296=>278,297=>278,
-298=>278,299=>278,300=>278,301=>278,302=>278,303=>222,304=>278,305=>278,306=>700,307=>374,
-308=>500,309=>222,310=>667,311=>500,312=>500,313=>556,314=>222,315=>556,316=>222,317=>556,
-318=>387,319=>556,320=>500,321=>556,322=>222,323=>722,324=>556,325=>722,326=>556,327=>722,
-328=>556,329=>722,330=>722,331=>556,332=>778,333=>556,334=>778,335=>556,336=>778,337=>556,
-340=>722,341=>333,342=>722,343=>333,344=>722,345=>333,346=>667,347=>500,348=>667,349=>500,
-350=>667,351=>500,354=>611,355=>278,356=>611,357=>443,358=>611,359=>278,360=>722,361=>556,
-362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556,
-372=>944,373=>722,374=>667,375=>500,377=>611,378=>500,379=>611,380=>500,383=>278,384=>556,
-385=>854,386=>668,387=>556,388=>667,389=>556,390=>722,391=>722,392=>500,393=>722,394=>899,
-395=>667,396=>556,397=>564,398=>667,399=>722,400=>667,401=>611,403=>778,404=>667,405=>889,
-406=>278,407=>333,408=>667,409=>500,410=>333,411=>560,412=>833,413=>722,414=>556,415=>778,
-416=>788,417=>565,418=>944,419=>722,420=>842,421=>556,422=>666,423=>667,424=>500,425=>611,
-426=>333,427=>278,428=>611,429=>278,430=>611,431=>776,432=>624,433=>778,434=>722,435=>722,
-436=>556,437=>611,438=>500,439=>611,440=>611,441=>500,442=>500,443=>556,446=>556,447=>556,
-448=>260,449=>370,450=>584,451=>278,452=>1311,453=>1208,454=>1056,455=>1056,456=>778,457=>444,
-458=>1158,459=>944,460=>778,461=>667,462=>556,463=>278,464=>278,465=>778,466=>556,467=>722,
-468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722,476=>556,477=>556,
-478=>667,479=>556,480=>667,481=>556,482=>1000,483=>889,484=>778,485=>556,486=>778,487=>556,
-488=>667,489=>500,490=>778,491=>556,492=>778,493=>556,494=>611,495=>500,496=>222,497=>1333,
-498=>1222,499=>1056,500=>778,501=>556,503=>630,504=>722,505=>556,506=>667,507=>556,508=>1000,
-509=>889,510=>778,511=>611,512=>667,513=>556,514=>667,515=>556,516=>667,517=>556,518=>667,
-519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>556,526=>778,527=>556,528=>722,
-529=>333,530=>722,531=>333,532=>722,533=>556,534=>722,535=>556,536=>667,537=>500,538=>611,
-539=>278,540=>521,541=>393,542=>722,543=>556,548=>611,549=>500,550=>667,551=>556,552=>667,
-553=>556,554=>778,555=>556,556=>778,557=>556,558=>778,559=>556,560=>778,561=>556,562=>667,
-563=>500,567=>222,592=>556,593=>556,594=>556,595=>556,596=>500,597=>500,598=>556,599=>556,
-600=>556,601=>556,602=>804,603=>500,604=>499,605=>742,606=>500,607=>222,608=>556,609=>556,
-610=>546,611=>500,612=>556,613=>556,614=>556,615=>556,616=>222,617=>222,618=>278,619=>473,
-620=>427,621=>222,622=>611,623=>833,624=>833,625=>833,626=>556,627=>556,628=>567,629=>556,
-630=>778,631=>722,632=>741,633=>333,634=>333,635=>333,636=>333,637=>333,638=>384,639=>369,
-640=>546,641=>546,642=>500,643=>278,644=>278,645=>278,646=>444,647=>278,648=>278,649=>556,
-650=>626,651=>539,652=>500,653=>722,654=>500,655=>556,656=>500,657=>500,658=>500,659=>552,
-660=>556,661=>556,662=>556,663=>722,664=>778,665=>506,666=>500,667=>546,668=>558,669=>444,
-670=>500,671=>430,672=>556,673=>556,674=>556,675=>944,676=>944,677=>944,678=>689,679=>506,
-680=>764,681=>766,682=>660,683=>577,684=>530,685=>486,686=>565,687=>621,688=>333,689=>333,
-690=>167,691=>236,692=>236,693=>276,694=>359,695=>500,696=>330,697=>278,698=>454,699=>278,
-700=>278,701=>278,702=>333,703=>333,704=>333,705=>333,706=>333,707=>333,708=>333,709=>333,
-711=>333,712=>333,713=>333,714=>333,715=>333,716=>272,717=>333,718=>333,719=>333,720=>333,
-721=>333,722=>333,723=>333,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,
-731=>333,733=>333,734=>333,735=>510,736=>333,737=>186,738=>333,739=>333,740=>334,741=>526,
-742=>526,743=>526,744=>526,745=>526,746=>519,747=>519,748=>333,749=>333,750=>333,751=>333,
-752=>333,753=>333,754=>333,755=>327,756=>261,757=>437,758=>437,759=>333,760=>278,761=>200,
-762=>200,763=>200,764=>200,765=>333,766=>333,767=>333,768=>0,769=>0,770=>0,771=>0,
-772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,
-782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,
-792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,
-802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,
-812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,
-822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,
-832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,
-842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0,
-852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,
-862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0,
-872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,878=>0,879=>0,884=>278,885=>199,
-890=>332,894=>278,900=>333,901=>333,902=>667,903=>275,904=>786,905=>828,906=>369,908=>833,
-910=>845,911=>778,912=>286,913=>667,914=>667,915=>582,916=>778,917=>667,918=>628,919=>722,
-920=>778,921=>278,922=>667,923=>667,924=>833,925=>722,926=>630,927=>778,928=>722,929=>667,
-931=>628,932=>611,933=>667,934=>717,935=>667,936=>745,937=>778,938=>278,939=>667,940=>608,
-941=>528,942=>548,943=>307,944=>538,945=>596,946=>542,947=>531,948=>564,949=>512,950=>455,
-951=>548,952=>525,953=>286,954=>510,955=>551,956=>540,957=>500,958=>470,959=>546,960=>619,
-961=>569,962=>547,963=>620,964=>492,965=>538,966=>741,967=>571,968=>662,969=>740,970=>286,
-971=>538,972=>546,973=>538,974=>740,977=>580,978=>742,979=>845,980=>620,981=>741,982=>740,
-983=>556,1008=>556,1009=>566,1012=>778,1013=>328,1024=>667,1025=>657,1026=>766,1027=>582,1028=>722,
-1029=>667,1030=>278,1031=>278,1032=>500,1033=>1080,1034=>1014,1035=>766,1036=>628,1037=>730,1038=>613,
-1039=>722,1040=>666,1041=>668,1042=>668,1043=>582,1044=>812,1045=>657,1046=>905,1047=>667,1048=>730,
-1049=>730,1050=>632,1051=>674,1052=>846,1053=>721,1054=>796,1055=>721,1056=>654,1057=>722,1058=>611,
-1059=>613,1060=>861,1061=>657,1062=>742,1063=>626,1064=>830,1065=>851,1066=>841,1067=>874,1068=>670,
-1069=>717,1070=>1001,1071=>686,1072=>552,1073=>550,1074=>506,1075=>404,1076=>602,1077=>547,1078=>755,
-1079=>499,1080=>567,1081=>567,1082=>489,1083=>517,1084=>618,1085=>558,1086=>550,1087=>557,1088=>577,
-1089=>520,1090=>444,1091=>468,1092=>865,1093=>466,1094=>578,1095=>498,1096=>692,1097=>712,1098=>664,
-1099=>690,1100=>521,1101=>520,1102=>759,1103=>543,1104=>549,1105=>549,1106=>577,1107=>404,1108=>519,
-1109=>502,1110=>224,1111=>278,1112=>223,1113=>813,1114=>853,1115=>577,1116=>489,1117=>567,1118=>468,
-1119=>558,1120=>942,1121=>693,1136=>762,1137=>662,1138=>800,1139=>550,1148=>942,1149=>693,1150=>942,
-1151=>693,1154=>468,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>763,
-1163=>583,1164=>689,1165=>526,1166=>652,1167=>572,1168=>601,1169=>397,1170=>589,1171=>392,1172=>591,
-1173=>475,1174=>927,1175=>830,1176=>661,1177=>493,1178=>658,1179=>510,1180=>675,1181=>519,1182=>684,
-1183=>514,1184=>839,1185=>653,1186=>740,1187=>570,1188=>987,1189=>714,1190=>1058,1191=>808,1192=>722,
-1193=>510,1194=>722,1195=>516,1196=>611,1197=>402,1198=>668,1199=>578,1200=>668,1201=>588,1202=>664,
-1203=>488,1204=>936,1205=>679,1206=>638,1207=>521,1208=>630,1209=>498,1210=>630,1211=>498,1212=>927,
-1213=>699,1214=>919,1215=>703,1216=>254,1217=>905,1218=>755,1219=>668,1220=>512,1221=>696,1222=>524,
-1223=>721,1224=>558,1225=>744,1226=>571,1227=>630,1228=>498,1229=>869,1230=>631,1231=>254,1232=>666,
-1233=>552,1234=>666,1235=>552,1236=>1000,1237=>879,1238=>657,1239=>547,1240=>722,1241=>543,1242=>722,
-1243=>543,1244=>905,1245=>755,1246=>667,1247=>499,1248=>611,1249=>540,1250=>730,1251=>567,1252=>730,
-1253=>567,1254=>796,1255=>550,1256=>800,1257=>550,1258=>800,1259=>550,1260=>717,1261=>520,1262=>613,
-1263=>468,1264=>613,1265=>468,1266=>613,1267=>468,1268=>626,1269=>498,1270=>582,1271=>395,1272=>874,
-1273=>690,1296=>667,1297=>491,1298=>665,1299=>509,1306=>778,1307=>575,1308=>934,1309=>712,1310=>627,
-1311=>489,1329=>720,1330=>696,1331=>750,1332=>725,1333=>699,1334=>751,1335=>446,1336=>703,1337=>790,
-1338=>656,1339=>697,1340=>390,1341=>852,1342=>791,1343=>698,1344=>585,1345=>656,1346=>651,1347=>658,
-1348=>759,1349=>595,1350=>772,1351=>603,1352=>703,1353=>648,1354=>698,1355=>744,1356=>738,1357=>703,
-1358=>739,1359=>660,1360=>693,1361=>623,1362=>385,1363=>788,1364=>632,1365=>775,1366=>714,1369=>333,
-1370=>222,1371=>200,1372=>333,1373=>333,1374=>333,1375=>333,1377=>833,1378=>551,1379=>572,1380=>569,
-1381=>546,1382=>581,1383=>353,1384=>551,1385=>568,1386=>569,1387=>552,1388=>276,1389=>795,1390=>535,
-1391=>553,1392=>537,1393=>512,1394=>568,1395=>552,1396=>531,1397=>249,1398=>527,1399=>405,1400=>551,
-1401=>390,1402=>833,1403=>509,1404=>523,1405=>545,1406=>584,1407=>879,1408=>552,1409=>552,1410=>301,
-1411=>884,1412=>578,1413=>556,1414=>668,1415=>544,1417=>278,1418=>333,1456=>0,1457=>0,1458=>0,
-1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0,
-1470=>488,1471=>0,1472=>212,1473=>0,1474=>0,1475=>278,1476=>0,1488=>640,1489=>591,1490=>466,
-1491=>598,1492=>622,1493=>212,1494=>351,1495=>623,1496=>608,1497=>200,1498=>526,1499=>550,1500=>600,
-1501=>623,1502=>621,1503=>212,1504=>378,1505=>607,1506=>587,1507=>575,1508=>568,1509=>540,1510=>590,
-1511=>606,1512=>547,1513=>776,1514=>687,1520=>424,1521=>412,1522=>400,1523=>184,1524=>344,1792=>600,
-1793=>201,1794=>201,1795=>201,1796=>201,1797=>500,1798=>500,1799=>500,1800=>370,1801=>370,1802=>574,
-1803=>574,1804=>645,1805=>574,1807=>0,1808=>452,1809=>452,1810=>574,1811=>645,1812=>645,1813=>509,
-1814=>509,1815=>682,1816=>585,1817=>404,1818=>627,1819=>718,1820=>718,1821=>484,1822=>682,1823=>600,
-1824=>660,1825=>682,1826=>538,1827=>718,1828=>718,1829=>718,1830=>574,1831=>574,1832=>638,1833=>585,
-1834=>509,1835=>682,1836=>682,1840=>0,1841=>0,1842=>0,1843=>0,1844=>0,1845=>0,1846=>0,
-1847=>0,1848=>0,1849=>0,1850=>0,1851=>0,1852=>0,1853=>0,1854=>0,1855=>0,1856=>0,
-1857=>0,1858=>0,1859=>0,1860=>0,1861=>0,1862=>0,1863=>0,1864=>0,1865=>0,1866=>0,
-2305=>6,2306=>0,2307=>305,2308=>717,2309=>717,2310=>829,2311=>463,2312=>463,2313=>581,2314=>803,
-2315=>920,2316=>639,2317=>430,2318=>430,2319=>430,2320=>430,2321=>856,2322=>828,2323=>837,2324=>856,
-2325=>749,2326=>779,2327=>522,2328=>587,2329=>650,2330=>619,2331=>641,2332=>703,2333=>691,2334=>677,
-2335=>568,2336=>529,2337=>611,2338=>536,2339=>607,2340=>564,2341=>659,2342=>500,2343=>591,2344=>521,
-2345=>568,2346=>477,2347=>728,2348=>490,2349=>577,2350=>517,2351=>554,2352=>433,2353=>433,2354=>656,
-2355=>660,2356=>660,2357=>490,2358=>645,2359=>477,2360=>666,2361=>484,2364=>6,2365=>442,2366=>211,
-2367=>211,2368=>211,2369=>6,2370=>3,2371=>6,2372=>0,2373=>6,2374=>84,2375=>6,2376=>6,
-2377=>224,2378=>234,2379=>211,2380=>211,2381=>6,2384=>839,2385=>15,2386=>0,2387=>9,2388=>9,
-2392=>750,2393=>779,2394=>522,2395=>703,2396=>613,2397=>536,2398=>728,2399=>554,2400=>899,2401=>625,
-2402=>625,2403=>625,2404=>674,2405=>674,2406=>575,2407=>575,2408=>575,2409=>575,2410=>575,2411=>575,
-2412=>575,2413=>575,2414=>575,2415=>575,2416=>365,2417=>387,2418=>717,2433=>0,2434=>300,2435=>264,
-2437=>594,2438=>790,2439=>469,2440=>513,2441=>520,2442=>549,2443=>594,2444=>481,2447=>580,2448=>627,
-2451=>540,2452=>613,2453=>570,2454=>467,2455=>471,2456=>428,2457=>483,2458=>408,2459=>509,2460=>591,
-2461=>563,2462=>771,2463=>381,2464=>404,2465=>522,2466=>408,2467=>450,2468=>543,2469=>477,2470=>418,
-2471=>433,2472=>445,2474=>499,2475=>584,2476=>377,2477=>555,2478=>448,2479=>423,2480=>390,2482=>498,
-2486=>498,2487=>425,2488=>495,2489=>440,2492=>22,2493=>440,2494=>193,2495=>189,2496=>180,2497=>0,
-2498=>0,2499=>0,2500=>0,2503=>252,2504=>243,2507=>889,2508=>865,2509=>0,2510=>356,2519=>219,
-2524=>523,2525=>408,2527=>428,2528=>594,2529=>481,2530=>0,2531=>0,2534=>500,2535=>437,2536=>479,
-2537=>530,2538=>497,2539=>500,2540=>482,2541=>503,2542=>517,2543=>481,2544=>377,2545=>377,2546=>429,
-2547=>383,2548=>429,2549=>478,2550=>545,2551=>158,2552=>365,2553=>280,2554=>357,2561=>0,2562=>0,
-2563=>351,2565=>860,2566=>1088,2567=>869,2568=>928,2569=>723,2570=>723,2575=>665,2576=>857,2579=>716,
-2580=>858,2581=>682,2582=>634,2583=>696,2584=>744,2585=>649,2586=>674,2587=>656,2588=>653,2589=>629,
-2590=>639,2591=>641,2592=>657,2593=>650,2594=>653,2595=>651,2596=>640,2597=>634,2598=>662,2599=>630,
-2600=>625,2602=>645,2603=>653,2604=>624,2605=>613,2606=>658,2607=>734,2608=>620,2610=>676,2611=>719,
-2613=>626,2614=>666,2616=>666,2617=>614,2620=>0,2622=>286,2623=>322,2624=>301,2625=>0,2626=>0,
-2631=>0,2632=>0,2635=>0,2636=>0,2637=>0,2649=>636,2650=>762,2651=>652,2652=>653,2654=>656,
-2662=>672,2663=>543,2664=>622,2665=>622,2666=>576,2667=>589,2668=>509,2669=>645,2670=>661,2671=>655,
-2672=>0,2673=>0,2674=>666,2675=>726,2676=>1217,2689=>22,2690=>23,2691=>0,2693=>775,2694=>979,
-2695=>588,2696=>563,2697=>525,2698=>724,2699=>942,2701=>775,2703=>775,2704=>775,2705=>979,2707=>979,
-2708=>979,2709=>610,2710=>706,2711=>623,2712=>610,2713=>601,2714=>614,2715=>642,2716=>684,2717=>634,
-2718=>644,2719=>509,2720=>541,2721=>539,2722=>524,2723=>657,2724=>547,2725=>616,2726=>494,2727=>601,
-2728=>627,2730=>524,2731=>620,2732=>691,2733=>687,2734=>468,2735=>590,2736=>509,2738=>571,2739=>687,
-2741=>526,2742=>620,2743=>575,2744=>620,2745=>549,2748=>53,2749=>415,2750=>241,2751=>186,2752=>217,
-2753=>32,2754=>21,2755=>38,2756=>27,2757=>45,2759=>41,2760=>46,2761=>207,2763=>190,2764=>182,
-2765=>16,2768=>962,2784=>949,2790=>479,2791=>502,2792=>484,2793=>471,2794=>501,2795=>527,2796=>462,
-2797=>524,2798=>454,2799=>495,2801=>752,2946=>479,2947=>893,2949=>1018,2950=>1170,2951=>916,2952=>676,
-2953=>836,2954=>1225,2958=>744,2959=>744,2960=>848,2962=>813,2963=>813,2964=>813,2965=>688,2969=>744,
-2970=>676,2972=>848,2974=>984,2975=>777,2979=>1338,2980=>664,2984=>561,2985=>1029,2986=>607,2990=>697,
-2991=>697,2992=>434,2993=>617,2994=>869,2995=>859,2996=>697,2997=>869,2999=>1145,3000=>1064,3001=>1316,
-3006=>424,3007=>125,3008=>596,3009=>539,3014=>596,3015=>650,3016=>973,3018=>1286,3019=>1286,3020=>1706,
-3021=>333,3031=>859,3050=>778,3051=>881,3052=>876,3053=>648,3057=>744,4256=>587,4257=>620,4258=>642,
-4259=>815,4260=>600,4261=>595,4262=>799,4263=>893,4264=>622,4265=>597,4266=>939,4267=>602,4268=>603,
-4269=>790,4270=>587,4271=>623,4272=>799,4273=>601,4274=>792,4275=>724,4276=>847,4277=>599,4278=>812,
-4279=>603,4280=>653,4281=>590,4282=>754,4283=>596,4284=>653,4285=>651,4286=>596,4287=>888,4288=>593,
-4304=>436,4305=>491,4306=>528,4307=>692,4308=>447,4309=>447,4310=>628,4311=>734,4312=>449,4313=>445,
-4314=>843,4315=>449,4316=>449,4317=>682,4318=>449,4319=>480,4320=>682,4321=>468,4322=>710,4323=>623,
-4324=>697,4325=>447,4326=>702,4327=>447,4328=>470,4329=>440,4330=>632,4331=>449,4332=>470,4333=>536,
-4334=>449,4335=>656,4336=>474,4337=>630,4338=>394,4339=>419,4340=>422,4341=>436,4345=>528,4347=>515,
-7680=>667,7681=>556,7682=>667,7683=>556,7684=>667,7685=>556,7686=>667,7687=>556,7688=>722,7689=>500,
-7690=>722,7691=>556,7692=>722,7693=>556,7694=>722,7695=>556,7696=>722,7697=>556,7698=>722,7699=>556,
-7700=>667,7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,7707=>556,7708=>667,7709=>556,
-7710=>611,7711=>278,7712=>778,7713=>556,7714=>722,7715=>556,7716=>722,7717=>556,7718=>722,7719=>556,
-7720=>722,7721=>556,7722=>722,7723=>556,7724=>278,7725=>222,7726=>278,7727=>278,7728=>667,7729=>500,
-7730=>667,7731=>500,7732=>667,7733=>500,7734=>556,7735=>222,7736=>556,7737=>222,7738=>556,7739=>222,
-7740=>556,7741=>222,7742=>833,7743=>833,7744=>833,7745=>833,7746=>833,7747=>833,7748=>722,7749=>556,
-7750=>722,7751=>556,7752=>722,7753=>556,7754=>722,7755=>556,7756=>778,7757=>556,7758=>778,7759=>556,
-7760=>778,7761=>556,7762=>778,7763=>556,7764=>667,7765=>556,7766=>667,7767=>556,7768=>722,7769=>333,
-7770=>722,7771=>333,7772=>722,7773=>333,7774=>722,7775=>333,7776=>667,7777=>500,7778=>667,7779=>500,
-7780=>667,7781=>500,7782=>667,7783=>500,7784=>667,7785=>500,7786=>611,7787=>278,7788=>611,7789=>278,
-7790=>611,7791=>278,7792=>611,7793=>278,7794=>722,7795=>556,7796=>722,7797=>556,7798=>722,7799=>556,
-7800=>722,7801=>556,7802=>722,7803=>556,7804=>667,7805=>500,7806=>667,7807=>500,7808=>944,7809=>722,
-7810=>944,7811=>722,7812=>944,7813=>722,7814=>944,7815=>722,7816=>944,7817=>722,7818=>667,7819=>500,
-7820=>667,7821=>500,7822=>667,7823=>500,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,
-7830=>556,7831=>278,7832=>722,7833=>500,7834=>555,7835=>278,7840=>667,7841=>556,7842=>667,7843=>556,
-7844=>667,7845=>556,7846=>667,7847=>556,7848=>667,7849=>556,7850=>667,7851=>556,7852=>667,7853=>556,
-7854=>667,7855=>556,7856=>667,7857=>556,7858=>667,7859=>556,7860=>667,7861=>556,7862=>667,7863=>556,
-7864=>667,7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,7871=>556,7872=>667,7873=>556,
-7874=>667,7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,7881=>278,7882=>278,7883=>222,
-7884=>778,7885=>556,7886=>778,7887=>556,7888=>778,7889=>556,7890=>778,7891=>556,7892=>778,7893=>556,
-7894=>778,7895=>556,7896=>778,7897=>556,7898=>788,7899=>565,7900=>788,7901=>565,7902=>788,7903=>565,
-7904=>788,7905=>565,7906=>788,7907=>565,7908=>722,7909=>556,7910=>722,7911=>556,7912=>776,7913=>624,
-7914=>776,7915=>624,7916=>776,7917=>624,7918=>776,7919=>624,7920=>776,7921=>624,7922=>667,7923=>500,
-7924=>667,7925=>500,7926=>667,7927=>500,7928=>667,7929=>500,7936=>596,7937=>596,7938=>596,7939=>596,
-7940=>596,7941=>596,7942=>596,7943=>596,7944=>667,7945=>667,7946=>742,7947=>756,7948=>692,7949=>699,
-7950=>673,7951=>667,7952=>512,7953=>512,7954=>512,7955=>512,7956=>512,7957=>512,7960=>730,7961=>714,
-7962=>900,7963=>882,7964=>867,7965=>879,7968=>548,7969=>548,7970=>548,7971=>548,7972=>548,7973=>548,
-7974=>548,7975=>548,7976=>772,7977=>778,7978=>945,7979=>947,7980=>943,7981=>946,7982=>853,7983=>853,
-7984=>286,7985=>286,7986=>286,7987=>286,7988=>286,7989=>286,7990=>286,7991=>286,7992=>322,7993=>321,
-7994=>482,7995=>485,7996=>477,7997=>484,7998=>394,7999=>390,8000=>546,8001=>546,8002=>546,8003=>546,
-8004=>546,8005=>546,8008=>775,8009=>784,8010=>990,8011=>987,8012=>887,8013=>897,8016=>538,8017=>538,
-8018=>538,8019=>538,8020=>538,8021=>538,8022=>538,8023=>538,8025=>747,8027=>915,8029=>971,8031=>863,
-8032=>740,8033=>740,8034=>740,8035=>740,8036=>740,8037=>740,8038=>740,8039=>740,8040=>769,8041=>774,
-8042=>972,8043=>970,8044=>879,8045=>918,8046=>901,8047=>901,8048=>596,8049=>596,8050=>512,8051=>512,
-8052=>548,8053=>548,8054=>286,8055=>286,8056=>546,8057=>546,8058=>538,8059=>538,8060=>740,8061=>740,
-8064=>596,8065=>596,8066=>596,8067=>596,8068=>596,8069=>596,8070=>596,8071=>596,8072=>830,8073=>828,
-8074=>916,8075=>916,8076=>853,8077=>860,8078=>835,8079=>827,8080=>548,8081=>548,8082=>548,8083=>548,
-8084=>548,8085=>548,8086=>548,8087=>548,8088=>928,8089=>931,8090=>1104,8091=>1109,8092=>1099,8093=>1102,
-8094=>1009,8095=>1012,8096=>740,8097=>740,8098=>740,8099=>740,8100=>740,8101=>740,8102=>740,8103=>740,
-8104=>934,8105=>934,8106=>1130,8107=>1128,8108=>1045,8109=>1077,8110=>1062,8111=>1065,8112=>596,8113=>596,
-8114=>596,8115=>596,8116=>596,8118=>596,8119=>596,8120=>667,8121=>667,8122=>667,8123=>667,8124=>832,
-8125=>333,8126=>200,8127=>333,8128=>333,8129=>333,8130=>548,8131=>548,8132=>548,8134=>548,8135=>548,
-8136=>833,8137=>776,8138=>944,8139=>896,8140=>875,8141=>400,8142=>400,8143=>333,8144=>286,8145=>286,
-8146=>286,8147=>286,8150=>286,8151=>286,8152=>278,8153=>278,8154=>385,8155=>376,8157=>400,8158=>400,
-8159=>333,8160=>538,8161=>538,8162=>538,8163=>538,8164=>569,8165=>569,8166=>538,8167=>514,8168=>667,
-8169=>667,8170=>817,8171=>827,8172=>741,8173=>393,8174=>393,8175=>333,8178=>740,8179=>740,8180=>740,
-8182=>740,8183=>740,8184=>833,8185=>833,8186=>848,8187=>814,8188=>939,8189=>333,8190=>333,8192=>500,
-8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>200,8202=>100,
-8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>556,8213=>1000,8214=>312,
-8215=>566,8219=>221,8223=>333,8227=>350,8228=>278,8229=>666,8231=>278,8232=>0,8233=>0,8234=>0,
-8235=>0,8236=>0,8237=>0,8238=>0,8239=>500,8241=>1360,8242=>278,8243=>469,8244=>680,8245=>278,
-8246=>469,8247=>680,8248=>376,8251=>622,8252=>556,8253=>556,8254=>556,8255=>658,8256=>658,8257=>438,
-8258=>840,8259=>400,8260=>167,8261=>334,8262=>334,8263=>1112,8264=>834,8265=>834,8266=>556,8267=>537,
-8268=>537,8269=>537,8270=>389,8271=>278,8272=>658,8273=>389,8274=>634,8275=>500,8276=>658,8277=>787,
-8278=>515,8279=>855,8280=>722,8281=>725,8282=>224,8283=>722,8284=>604,8285=>224,8286=>224,8287=>0,
-8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>350,8305=>350,8308=>350,8309=>350,8310=>350,
-8311=>350,8312=>350,8313=>350,8314=>350,8315=>350,8316=>350,8317=>350,8318=>350,8319=>350,8320=>350,
-8321=>350,8322=>350,8323=>350,8324=>350,8325=>350,8326=>350,8327=>350,8328=>350,8329=>350,8330=>350,
-8331=>350,8332=>350,8333=>350,8334=>350,8336=>350,8337=>349,8338=>350,8339=>350,8340=>350,8353=>615,
-8354=>601,8355=>611,8356=>556,8357=>833,8358=>682,8359=>1317,8360=>1202,8361=>879,8362=>869,8363=>538,
-8365=>667,8366=>611,8368=>570,8369=>684,8370=>717,8371=>667,8372=>667,8373=>640,8400=>0,8401=>0,
-8402=>0,8403=>0,8406=>0,8407=>0,8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,
-8417=>0,8421=>0,8422=>0,8423=>0,8424=>0,8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,
-8430=>0,8431=>0,8432=>0,8448=>970,8449=>979,8451=>1017,8452=>556,8453=>876,8454=>922,8455=>667,
-8457=>919,8459=>969,8460=>615,8462=>556,8463=>572,8464=>809,8465=>606,8466=>874,8467=>417,8468=>747,
-8470=>934,8471=>737,8472=>600,8475=>850,8476=>699,8480=>1000,8481=>1230,8486=>778,8487=>778,8488=>512,
-8489=>286,8490=>667,8491=>667,8492=>908,8493=>623,8494=>556,8495=>444,8496=>562,8497=>895,8498=>588,
-8499=>1080,8501=>640,8502=>592,8503=>466,8504=>598,8505=>278,8506=>871,8507=>1230,8513=>778,8514=>556,
-8515=>556,8516=>667,8522=>516,8523=>655,8525=>936,8526=>482,8531=>869,8532=>869,8533=>869,8534=>869,
-8535=>869,8536=>869,8537=>869,8538=>869,8539=>869,8540=>869,8541=>869,8542=>869,8543=>869,8544=>278,
-8545=>556,8546=>834,8547=>945,8548=>667,8549=>945,8550=>1223,8551=>1501,8552=>945,8553=>667,8554=>945,
-8555=>1223,8556=>556,8557=>722,8558=>722,8559=>833,8560=>222,8561=>444,8562=>666,8563=>722,8564=>500,
-8565=>722,8566=>944,8567=>1166,8568=>722,8569=>500,8570=>722,8571=>944,8572=>222,8573=>500,8574=>556,
-8575=>833,8592=>987,8593=>603,8594=>987,8595=>603,8596=>1042,8597=>1042,8598=>800,8599=>800,8600=>800,
-8601=>800,8614=>987,8617=>987,8618=>987,8629=>658,8636=>987,8637=>987,8638=>380,8639=>393,8640=>987,
-8641=>987,8642=>380,8643=>379,8652=>987,8656=>987,8657=>603,8658=>987,8659=>603,8660=>1042,8661=>603,
-8669=>1092,8704=>667,8706=>556,8707=>667,8709=>823,8710=>711,8711=>711,8712=>584,8713=>584,8714=>584,
-8715=>584,8716=>584,8717=>713,8719=>823,8720=>823,8721=>804,8722=>584,8723=>584,8724=>584,8725=>510,
-8726=>392,8727=>584,8729=>584,8730=>542,8733=>713,8734=>713,8736=>768,8739=>200,8740=>288,8741=>312,
-8742=>340,8743=>603,8744=>603,8745=>768,8746=>768,8747=>556,8748=>796,8749=>956,8750=>556,8756=>863,
-8764=>584,8765=>584,8766=>573,8768=>244,8769=>584,8770=>584,8771=>584,8772=>584,8773=>584,8774=>584,
-8775=>584,8776=>584,8777=>584,8781=>554,8784=>584,8800=>584,8801=>584,8802=>584,8804=>584,8805=>584,
-8810=>955,8811=>955,8813=>554,8814=>584,8815=>584,8816=>584,8817=>584,8818=>584,8819=>584,8826=>584,
-8827=>584,8828=>584,8829=>584,8832=>584,8833=>584,8834=>584,8835=>584,8836=>584,8837=>584,8838=>584,
-8839=>584,8840=>584,8841=>584,8844=>768,8847=>636,8848=>636,8849=>636,8850=>636,8851=>636,8852=>636,
-8853=>768,8854=>768,8855=>768,8856=>768,8857=>768,8866=>658,8867=>658,8868=>658,8869=>658,8870=>600,
-8871=>608,8882=>636,8883=>636,8884=>636,8885=>636,8896=>744,8897=>744,8898=>764,8899=>764,8901=>278,
-8902=>471,8904=>710,8928=>584,8929=>584,8930=>636,8931=>636,8960=>823,8968=>456,8969=>455,8970=>455,
-8971=>456,8992=>556,8993=>556,8994=>658,8995=>658,9001=>329,9002=>329,9115=>384,9116=>384,9117=>384,
-9118=>384,9119=>384,9120=>384,9121=>388,9122=>388,9123=>388,9124=>388,9125=>388,9126=>388,9134=>556,
-9250=>556,9251=>500,9312=>788,9313=>788,9314=>788,9315=>788,9316=>788,9317=>788,9318=>788,9319=>788,
-9320=>788,9321=>788,9472=>1000,9473=>1000,9474=>1000,9475=>1000,9476=>1000,9477=>1000,9478=>1000,9479=>1000,
-9480=>1000,9481=>1000,9482=>1000,9483=>1000,9484=>1000,9485=>1000,9486=>1000,9487=>1000,9488=>1000,9489=>1000,
-9490=>1000,9491=>1000,9492=>1000,9493=>1000,9494=>1000,9495=>1000,9496=>1000,9497=>1000,9498=>1000,9499=>1000,
-9500=>1000,9501=>1000,9502=>1000,9503=>1000,9504=>1000,9505=>1000,9506=>1000,9507=>1000,9508=>1000,9509=>1000,
-9510=>1000,9511=>1000,9512=>1000,9513=>1000,9514=>1000,9515=>1000,9516=>1000,9517=>1000,9518=>1000,9519=>1000,
-9520=>1000,9521=>1000,9522=>1000,9523=>1000,9524=>1000,9525=>1000,9526=>1000,9527=>1000,9528=>1000,9529=>1000,
-9530=>1000,9531=>1000,9532=>1000,9533=>1000,9534=>1000,9535=>1000,9536=>1000,9537=>1000,9538=>1000,9539=>1000,
-9540=>1000,9541=>1000,9542=>1000,9543=>1000,9544=>1000,9545=>1000,9546=>1000,9547=>1000,9552=>1000,9553=>1000,
-9554=>1000,9555=>1000,9556=>1000,9557=>1000,9558=>1000,9559=>1000,9560=>1000,9561=>1000,9562=>1000,9563=>1000,
-9564=>1000,9565=>1000,9566=>1000,9567=>1000,9568=>1000,9569=>1000,9570=>1000,9571=>1000,9572=>1000,9573=>1000,
-9574=>1000,9575=>1000,9576=>1000,9577=>1000,9578=>1000,9579=>1000,9580=>1000,9600=>1000,9601=>1000,9602=>1000,
-9603=>1000,9604=>1000,9605=>1000,9606=>1000,9607=>1000,9608=>1000,9609=>1000,9610=>1000,9611=>1000,9612=>1000,
-9613=>1000,9614=>1000,9615=>1000,9616=>1000,9617=>1000,9618=>1000,9619=>1000,9620=>1000,9621=>1000,9622=>1000,
-9623=>1000,9624=>1000,9625=>1000,9626=>1000,9627=>1000,9628=>1000,9629=>1000,9630=>1000,9631=>1000,9632=>1000,
-9633=>1000,9635=>1000,9636=>1000,9637=>1000,9642=>1000,9644=>1000,9651=>892,9661=>892,9671=>788,9674=>489,
-9675=>791,9711=>882,9772=>929,9824=>626,9825=>694,9826=>595,9827=>776,9828=>626,9829=>694,9830=>595,
-9831=>776,9833=>333,9834=>555,9835=>722,9836=>722,9837=>415,9838=>377,9839=>402,10048=>1161,10752=>791,
-10753=>791,10754=>791,10755=>764,10756=>764,10761=>584,11799=>333,64256=>495,64257=>460,64258=>465,64259=>652,
-64260=>645,64261=>520,64275=>1004,64276=>1044,64277=>1042,64278=>1037,64279=>1256,64285=>200,64286=>305,64287=>400,
-64288=>587,64289=>890,64290=>848,64291=>872,64292=>800,64293=>850,64294=>873,64295=>797,64296=>937,64297=>584,
-64298=>776,64299=>776,64300=>776,64301=>776,64302=>640,64303=>640,64304=>640,64305=>591,64306=>466,64307=>598,
-64308=>622,64309=>262,64310=>351,64312=>608,64313=>270,64314=>526,64315=>550,64316=>600,64318=>621,64320=>378,
-64321=>607,64323=>575,64324=>568,64326=>590,64327=>606,64328=>547,64329=>776,64330=>687,64331=>212,64332=>591,
-64333=>550,64334=>568,64335=>640,65533=>788);
-$enc='';
+$dw=700;
$diff='';
+$originalsize=714456;
+$enc='';
$file='freesans.z';
$ctg='freesans.ctg.z';
-$originalsize=568896;
-?>
\ No newline at end of file
+$desc=array('Flags'=>32,'FontBBox'=>'[-1166 -469 1518 1050]','ItalicAngle'=>0,'Ascent'=>1000,'Descent'=>-300,'Leading'=>90,'CapHeight'=>729,'XHeight'=>524,'StemV'=>70,'StemH'=>30,'AvgWidth'=>441,'MaxWidth'=>1501,'MissingWidth'=>700);
+$cw=array(0=>0,1=>700,2=>700,3=>700,4=>700,5=>700,6=>700,7=>700,8=>0,9=>600,10=>700,11=>700,12=>700,13=>600,14=>700,15=>700,16=>700,17=>700,18=>700,19=>700,20=>700,21=>700,22=>700,23=>700,24=>700,25=>700,26=>700,27=>700,28=>700,29=>0,30=>700,31=>700,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,92=>278,93=>277,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,127=>700,128=>667,129=>667,130=>722,131=>667,132=>722,133=>778,134=>722,135=>556,136=>556,137=>556,138=>556,139=>556,140=>556,141=>500,142=>556,143=>556,144=>556,145=>556,146=>251,147=>251,148=>251,149=>251,150=>556,151=>556,152=>556,153=>556,154=>556,155=>556,156=>556,157=>556,158=>556,159=>556,160=>278,161=>278,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>448,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584,178=>350,179=>350,180=>333,181=>556,182=>537,183=>278,184=>333,185=>350,186=>365,187=>448,188=>869,189=>869,190=>879,191=>556,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>666,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>896,231=>500,232=>556,233=>556,234=>556,235=>556,236=>251,237=>251,238=>251,239=>251,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>555,255=>500,256=>667,257=>556,258=>667,259=>556,260=>667,261=>556,262=>722,263=>500,264=>722,265=>500,266=>722,267=>500,268=>722,269=>500,270=>722,271=>722,272=>722,273=>556,274=>667,275=>556,276=>667,277=>556,278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>556,286=>778,287=>556,288=>778,289=>556,290=>778,291=>556,292=>722,293=>556,294=>722,295=>556,296=>278,297=>251,298=>278,299=>251,300=>278,301=>251,302=>278,303=>222,304=>278,305=>251,306=>740,307=>384,308=>500,309=>222,310=>667,311=>500,312=>500,313=>556,314=>222,315=>556,316=>222,317=>556,318=>367,319=>556,320=>500,321=>556,322=>222,323=>722,324=>556,325=>722,326=>556,327=>722,328=>556,329=>702,330=>710,331=>556,332=>778,333=>556,334=>778,335=>556,336=>778,337=>556,338=>1000,339=>938,340=>722,341=>333,342=>722,343=>333,344=>722,345=>333,346=>667,347=>500,348=>667,349=>500,350=>667,351=>500,352=>667,353=>500,354=>611,355=>278,356=>611,357=>443,358=>611,359=>278,360=>722,361=>556,362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556,372=>944,373=>722,374=>667,375=>500,376=>667,377=>611,378=>500,379=>611,380=>500,381=>611,382=>500,383=>278,384=>556,385=>854,386=>668,387=>556,388=>717,389=>596,390=>722,391=>767,392=>575,393=>722,394=>899,395=>667,396=>556,397=>564,398=>667,399=>722,400=>667,401=>611,402=>278,403=>802,404=>667,405=>889,406=>278,407=>345,408=>667,409=>500,410=>345,411=>560,412=>833,413=>722,414=>556,415=>778,416=>788,417=>565,418=>944,419=>722,420=>842,421=>556,422=>666,423=>667,424=>500,425=>611,426=>333,427=>278,428=>611,429=>278,430=>611,431=>776,432=>624,433=>778,434=>722,435=>722,436=>556,437=>611,438=>500,439=>611,440=>611,441=>500,442=>500,443=>556,446=>556,447=>556,448=>260,449=>370,450=>584,451=>278,452=>1311,453=>1208,454=>1056,455=>1056,456=>778,457=>444,458=>1158,459=>944,460=>778,461=>667,462=>556,463=>278,464=>251,465=>778,466=>556,467=>722,468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722,476=>556,477=>556,478=>667,479=>556,480=>667,481=>556,482=>1000,483=>896,484=>778,485=>556,486=>778,487=>556,488=>667,489=>500,490=>778,491=>556,492=>778,493=>556,494=>611,495=>526,496=>222,497=>1333,498=>1222,499=>1056,500=>778,501=>556,503=>630,504=>722,505=>556,506=>667,507=>556,508=>1000,509=>896,510=>778,511=>611,512=>667,513=>556,514=>667,515=>556,516=>667,517=>556,518=>667,519=>556,520=>278,521=>251,522=>278,523=>251,524=>778,525=>556,526=>778,527=>556,528=>722,529=>333,530=>722,531=>333,532=>722,533=>556,534=>722,535=>556,536=>667,537=>500,538=>611,539=>278,540=>521,541=>393,542=>722,543=>556,548=>611,549=>500,550=>667,551=>556,552=>667,553=>556,554=>778,555=>556,556=>778,557=>556,558=>778,559=>556,560=>778,561=>556,562=>667,563=>500,567=>222,592=>556,593=>562,594=>571,595=>556,596=>500,597=>500,598=>608,599=>602,600=>556,601=>556,602=>804,603=>500,604=>499,605=>742,606=>510,607=>283,608=>596,609=>556,610=>556,611=>500,612=>556,613=>556,614=>556,615=>556,616=>268,617=>255,618=>278,619=>473,620=>427,621=>260,622=>618,623=>833,624=>833,625=>833,626=>594,627=>596,628=>567,629=>556,630=>778,631=>722,632=>730,633=>333,634=>333,635=>372,636=>333,637=>333,638=>386,639=>371,640=>546,641=>546,642=>500,643=>299,644=>298,645=>309,646=>463,647=>278,648=>278,649=>596,650=>626,651=>539,652=>500,653=>722,654=>500,655=>556,656=>565,657=>508,658=>526,659=>552,660=>556,661=>556,662=>556,663=>722,664=>778,665=>506,666=>520,667=>623,668=>558,669=>469,670=>550,671=>430,672=>602,673=>556,674=>556,675=>940,676=>956,677=>944,678=>689,679=>515,680=>764,681=>786,682=>660,683=>597,684=>530,685=>486,686=>570,687=>631,688=>333,689=>333,690=>167,691=>236,692=>236,693=>276,694=>359,695=>500,696=>330,697=>278,698=>454,699=>278,700=>278,701=>278,702=>333,703=>333,704=>333,705=>333,706=>333,707=>333,708=>333,709=>333,710=>333,711=>333,712=>333,713=>333,714=>333,715=>333,716=>272,717=>333,718=>333,719=>333,720=>333,721=>333,722=>333,723=>333,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,731=>333,732=>333,733=>333,734=>333,735=>510,736=>333,737=>186,738=>333,739=>333,740=>334,741=>526,742=>526,743=>526,744=>526,745=>526,746=>519,747=>519,748=>333,749=>333,750=>333,751=>333,752=>333,753=>333,754=>333,755=>327,756=>261,757=>437,758=>437,759=>333,760=>278,761=>200,762=>200,763=>200,764=>200,765=>333,766=>333,767=>333,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,878=>0,879=>0,884=>278,885=>199,890=>332,894=>278,900=>333,901=>333,902=>667,903=>275,904=>786,905=>828,906=>369,908=>833,910=>845,911=>778,912=>286,913=>667,914=>667,915=>582,916=>778,917=>667,918=>628,919=>722,920=>778,921=>278,922=>667,923=>667,924=>833,925=>722,926=>630,927=>778,928=>722,929=>667,931=>628,932=>611,933=>667,934=>717,935=>667,936=>745,937=>778,938=>278,939=>667,940=>596,941=>528,942=>548,943=>307,944=>538,945=>596,946=>542,947=>531,948=>564,949=>512,950=>455,951=>548,952=>525,953=>286,954=>510,955=>551,956=>540,957=>500,958=>470,959=>546,960=>619,961=>569,962=>547,963=>620,964=>492,965=>538,966=>741,967=>571,968=>662,969=>740,970=>286,971=>538,972=>546,973=>538,974=>740,977=>580,978=>742,979=>845,980=>620,981=>741,982=>740,983=>556,1008=>556,1009=>566,1012=>778,1013=>328,1024=>667,1025=>657,1026=>766,1027=>582,1028=>722,1029=>667,1030=>278,1031=>278,1032=>500,1033=>1080,1034=>1014,1035=>766,1036=>628,1037=>730,1038=>613,1039=>722,1040=>666,1041=>668,1042=>668,1043=>582,1044=>812,1045=>657,1046=>905,1047=>667,1048=>730,1049=>730,1050=>632,1051=>674,1052=>846,1053=>721,1054=>796,1055=>721,1056=>654,1057=>722,1058=>611,1059=>613,1060=>861,1061=>657,1062=>742,1063=>626,1064=>830,1065=>851,1066=>841,1067=>874,1068=>670,1069=>717,1070=>1001,1071=>686,1072=>552,1073=>550,1074=>506,1075=>404,1076=>602,1077=>547,1078=>755,1079=>499,1080=>567,1081=>567,1082=>489,1083=>517,1084=>618,1085=>558,1086=>550,1087=>557,1088=>577,1089=>520,1090=>444,1091=>468,1092=>865,1093=>466,1094=>578,1095=>498,1096=>692,1097=>712,1098=>664,1099=>690,1100=>521,1101=>520,1102=>759,1103=>543,1104=>549,1105=>549,1106=>577,1107=>404,1108=>519,1109=>502,1110=>224,1111=>251,1112=>223,1113=>813,1114=>853,1115=>577,1116=>489,1117=>567,1118=>468,1119=>558,1120=>942,1121=>693,1136=>762,1137=>662,1138=>800,1139=>550,1148=>942,1149=>693,1150=>942,1151=>693,1154=>468,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>763,1163=>583,1164=>689,1165=>526,1166=>652,1167=>572,1168=>601,1169=>397,1170=>589,1171=>392,1172=>591,1173=>475,1174=>927,1175=>830,1176=>661,1177=>493,1178=>658,1179=>510,1180=>675,1181=>519,1182=>684,1183=>514,1184=>839,1185=>653,1186=>740,1187=>570,1188=>987,1189=>714,1190=>1058,1191=>808,1192=>810,1193=>645,1194=>722,1195=>516,1196=>611,1197=>402,1198=>668,1199=>578,1200=>668,1201=>588,1202=>664,1203=>488,1204=>936,1205=>679,1206=>638,1207=>521,1208=>630,1209=>498,1210=>630,1211=>498,1212=>927,1213=>699,1214=>927,1215=>699,1216=>254,1217=>905,1218=>755,1219=>668,1220=>512,1221=>696,1222=>524,1223=>721,1224=>558,1225=>744,1226=>571,1227=>630,1228=>498,1229=>869,1230=>631,1231=>254,1232=>666,1233=>552,1234=>666,1235=>552,1236=>1000,1237=>879,1238=>657,1239=>547,1240=>722,1241=>543,1242=>722,1243=>543,1244=>905,1245=>755,1246=>667,1247=>499,1248=>611,1249=>540,1250=>730,1251=>567,1252=>730,1253=>567,1254=>796,1255=>550,1256=>800,1257=>550,1258=>800,1259=>550,1260=>717,1261=>520,1262=>613,1263=>468,1264=>613,1265=>468,1266=>613,1267=>468,1268=>626,1269=>498,1270=>582,1271=>395,1272=>874,1273=>690,1296=>667,1297=>491,1298=>665,1299=>509,1306=>778,1307=>575,1308=>934,1309=>712,1310=>627,1311=>489,1329=>720,1330=>696,1331=>750,1332=>725,1333=>699,1334=>751,1335=>446,1336=>703,1337=>790,1338=>656,1339=>697,1340=>390,1341=>852,1342=>791,1343=>698,1344=>585,1345=>656,1346=>651,1347=>658,1348=>759,1349=>595,1350=>772,1351=>603,1352=>703,1353=>648,1354=>698,1355=>744,1356=>738,1357=>703,1358=>739,1359=>660,1360=>693,1361=>623,1362=>385,1363=>788,1364=>632,1365=>775,1366=>714,1369=>333,1370=>222,1371=>200,1372=>333,1373=>333,1374=>333,1375=>333,1377=>833,1378=>551,1379=>572,1380=>569,1381=>546,1382=>581,1383=>353,1384=>551,1385=>568,1386=>569,1387=>552,1388=>276,1389=>795,1390=>535,1391=>553,1392=>537,1393=>512,1394=>568,1395=>552,1396=>531,1397=>249,1398=>527,1399=>405,1400=>551,1401=>390,1402=>833,1403=>509,1404=>523,1405=>545,1406=>584,1407=>879,1408=>552,1409=>552,1410=>301,1411=>884,1412=>578,1413=>556,1414=>668,1415=>544,1417=>278,1418=>333,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0,1470=>488,1471=>0,1472=>212,1473=>0,1474=>0,1475=>278,1476=>0,1488=>640,1489=>591,1490=>466,1491=>598,1492=>622,1493=>212,1494=>351,1495=>623,1496=>608,1497=>200,1498=>526,1499=>550,1500=>600,1501=>623,1502=>621,1503=>212,1504=>378,1505=>607,1506=>587,1507=>575,1508=>568,1509=>540,1510=>590,1511=>606,1512=>547,1513=>776,1514=>687,1520=>424,1521=>412,1522=>400,1523=>184,1524=>344,1792=>600,1793=>201,1794=>201,1795=>201,1796=>201,1797=>500,1798=>500,1799=>500,1800=>370,1801=>370,1802=>574,1803=>574,1804=>645,1805=>574,1807=>0,1808=>452,1809=>452,1810=>574,1811=>645,1812=>645,1813=>509,1814=>509,1815=>682,1816=>585,1817=>404,1818=>627,1819=>718,1820=>718,1821=>484,1822=>682,1823=>600,1824=>660,1825=>682,1826=>538,1827=>718,1828=>718,1829=>718,1830=>574,1831=>574,1832=>638,1833=>585,1834=>509,1835=>682,1836=>682,1840=>0,1841=>0,1842=>0,1843=>0,1844=>0,1845=>0,1846=>0,1847=>0,1848=>0,1849=>0,1850=>0,1851=>0,1852=>0,1853=>0,1854=>0,1855=>0,1856=>0,1857=>0,1858=>0,1859=>0,1860=>0,1861=>0,1862=>0,1863=>0,1864=>0,1865=>0,1866=>0,2304=>0,2305=>0,2306=>0,2307=>305,2308=>702,2309=>717,2310=>828,2311=>464,2312=>464,2313=>582,2314=>804,2315=>921,2316=>641,2317=>433,2318=>433,2319=>433,2320=>433,2321=>856,2322=>827,2323=>837,2324=>856,2325=>749,2326=>780,2327=>522,2328=>590,2329=>650,2330=>620,2331=>644,2332=>703,2333=>692,2334=>680,2335=>568,2336=>531,2337=>611,2338=>538,2339=>608,2340=>564,2341=>660,2342=>500,2343=>593,2344=>568,2345=>568,2346=>479,2347=>733,2348=>492,2349=>578,2350=>518,2351=>556,2352=>435,2353=>435,2354=>656,2355=>661,2356=>661,2357=>492,2358=>646,2359=>479,2360=>667,2361=>486,2364=>6,2365=>442,2366=>211,2367=>226,2368=>225,2369=>0,2370=>0,2371=>0,2372=>0,2373=>0,2374=>84,2375=>0,2376=>0,2377=>226,2378=>225,2379=>226,2380=>226,2381=>0,2382=>0,2384=>839,2385=>0,2386=>0,2387=>0,2388=>0,2389=>0,2392=>749,2393=>780,2394=>522,2395=>703,2396=>611,2397=>538,2398=>733,2399=>556,2400=>900,2401=>626,2402=>625,2403=>625,2404=>674,2405=>674,2406=>575,2407=>575,2408=>575,2409=>575,2410=>575,2411=>575,2412=>575,2413=>575,2414=>575,2415=>575,2416=>365,2417=>387,2418=>717,2425=>814,2426=>556,2427=>568,2428=>703,2429=>575,2430=>611,2431=>492,2433=>0,2434=>300,2435=>264,2437=>656,2438=>829,2439=>507,2440=>564,2441=>539,2442=>559,2443=>600,2444=>481,2447=>580,2448=>627,2451=>540,2452=>613,2453=>570,2454=>467,2455=>481,2456=>438,2457=>483,2458=>408,2459=>509,2460=>601,2461=>563,2462=>771,2463=>401,2464=>404,2465=>540,2466=>408,2467=>460,2468=>543,2469=>477,2470=>418,2471=>433,2472=>445,2474=>499,2475=>594,2476=>397,2477=>565,2478=>458,2479=>433,2480=>410,2482=>508,2486=>518,2487=>445,2488=>508,2489=>460,2492=>0,2493=>440,2494=>193,2495=>189,2496=>180,2497=>0,2498=>0,2499=>0,2500=>0,2503=>295,2504=>303,2507=>0,2508=>0,2509=>0,2510=>356,2519=>219,2524=>553,2525=>408,2527=>439,2528=>594,2529=>481,2530=>0,2531=>0,2534=>500,2535=>437,2536=>479,2537=>530,2538=>497,2539=>500,2540=>482,2541=>503,2542=>517,2543=>481,2544=>377,2545=>377,2546=>429,2547=>383,2548=>429,2549=>478,2550=>545,2551=>158,2552=>365,2553=>280,2554=>357,2561=>0,2562=>0,2563=>351,2565=>860,2566=>1088,2567=>869,2568=>928,2569=>723,2570=>723,2575=>665,2576=>857,2579=>716,2580=>858,2581=>682,2582=>634,2583=>696,2584=>744,2585=>649,2586=>674,2587=>656,2588=>653,2589=>629,2590=>639,2591=>641,2592=>657,2593=>650,2594=>653,2595=>651,2596=>640,2597=>634,2598=>662,2599=>630,2600=>625,2602=>645,2603=>653,2604=>624,2605=>613,2606=>658,2607=>734,2608=>620,2610=>676,2611=>719,2613=>626,2614=>666,2616=>666,2617=>614,2620=>0,2622=>286,2623=>322,2624=>301,2625=>0,2626=>0,2631=>0,2632=>0,2635=>0,2636=>0,2637=>0,2641=>0,2649=>636,2650=>762,2651=>652,2652=>653,2654=>656,2662=>672,2663=>543,2664=>622,2665=>622,2666=>576,2667=>589,2668=>509,2669=>645,2670=>661,2671=>655,2672=>0,2673=>0,2674=>666,2675=>726,2676=>1217,2677=>0,2689=>22,2690=>23,2691=>0,2693=>775,2694=>979,2695=>594,2696=>568,2697=>525,2698=>724,2699=>942,2700=>558,2701=>775,2703=>775,2704=>775,2705=>979,2707=>979,2708=>979,2709=>610,2710=>706,2711=>623,2712=>610,2713=>601,2714=>614,2715=>642,2716=>684,2717=>634,2718=>644,2719=>509,2720=>541,2721=>539,2722=>524,2723=>657,2724=>547,2725=>616,2726=>494,2727=>601,2728=>627,2730=>524,2731=>620,2732=>691,2733=>687,2734=>468,2735=>590,2736=>509,2738=>571,2739=>687,2741=>526,2742=>620,2743=>575,2744=>620,2745=>549,2748=>53,2749=>415,2750=>241,2751=>186,2752=>217,2753=>32,2754=>21,2755=>38,2756=>27,2757=>45,2759=>41,2760=>46,2761=>207,2763=>190,2764=>182,2765=>16,2768=>962,2784=>949,2785=>609,2786=>0,2787=>0,2790=>479,2791=>502,2792=>484,2793=>471,2794=>501,2795=>527,2796=>462,2797=>524,2798=>454,2799=>495,2801=>752,4256=>587,4257=>620,4258=>642,4259=>815,4260=>600,4261=>595,4262=>799,4263=>893,4264=>622,4265=>597,4266=>939,4267=>602,4268=>603,4269=>790,4270=>587,4271=>623,4272=>799,4273=>601,4274=>792,4275=>724,4276=>847,4277=>599,4278=>812,4279=>603,4280=>653,4281=>590,4282=>754,4283=>596,4284=>653,4285=>651,4286=>596,4287=>888,4288=>593,4304=>436,4305=>491,4306=>528,4307=>692,4308=>447,4309=>447,4310=>628,4311=>734,4312=>449,4313=>445,4314=>843,4315=>449,4316=>449,4317=>682,4318=>449,4319=>480,4320=>682,4321=>468,4322=>710,4323=>623,4324=>697,4325=>447,4326=>702,4327=>447,4328=>470,4329=>440,4330=>632,4331=>449,4332=>470,4333=>536,4334=>449,4335=>656,4336=>474,4337=>630,4338=>394,4339=>419,4340=>422,4341=>436,4345=>528,4347=>515,4348=>449,5024=>678,5025=>756,5026=>604,5027=>770,5028=>969,5029=>207,5030=>633,5031=>800,5032=>474,5033=>689,5034=>672,5035=>446,5036=>637,5037=>776,5038=>511,5039=>723,5040=>528,5041=>591,5042=>839,5043=>963,5044=>615,5045=>563,5046=>705,5047=>800,5048=>558,5049=>880,5050=>966,5051=>675,5052=>527,5053=>733,5054=>779,5055=>547,5056=>756,5057=>834,5058=>604,5059=>632,5060=>605,5061=>1051,5062=>657,5063=>842,5064=>748,5065=>1192,5066=>842,5067=>632,5068=>668,5069=>928,5070=>626,5071=>655,5072=>502,5073=>696,5074=>642,5075=>518,5076=>952,5077=>622,5078=>710,5079=>521,5080=>556,5081=>656,5082=>622,5083=>881,5084=>760,5085=>564,5086=>567,5087=>712,5088=>717,5089=>838,5090=>617,5091=>689,5092=>767,5093=>728,5094=>690,5095=>551,5096=>859,5097=>957,5098=>900,5099=>779,5100=>805,5101=>621,5102=>604,5103=>842,5104=>653,5105=>737,5106=>601,5107=>901,5108=>655,5121=>941,5122=>941,5123=>941,5124=>941,5125=>726,5126=>726,5127=>726,5128=>726,5129=>726,5130=>726,5131=>726,5132=>941,5133=>941,5134=>941,5135=>941,5136=>941,5137=>941,5138=>882,5139=>882,5140=>882,5141=>882,5142=>726,5143=>882,5144=>882,5145=>882,5146=>882,5147=>726,5148=>494,5149=>347,5150=>447,5151=>329,5152=>329,5153=>452,5154=>452,5155=>276,5156=>451,5157=>463,5158=>289,5159=>216,5160=>400,5161=>400,5162=>400,5163=>1169,5164=>941,5165=>810,5166=>1012,5167=>941,5168=>941,5169=>941,5170=>941,5171=>726,5172=>726,5173=>726,5174=>726,5175=>726,5176=>726,5177=>726,5178=>941,5179=>941,5180=>941,5181=>941,5182=>941,5183=>941,5184=>726,5185=>882,5186=>726,5187=>882,5188=>882,5189=>726,5190=>882,5191=>726,5192=>726,5193=>390,5194=>159,5195=>332,5196=>742,5197=>742,5198=>742,5199=>742,5200=>744,5201=>744,5202=>744,5203=>744,5204=>744,5205=>744,5206=>744,5207=>914,5208=>912,5209=>912,5210=>914,5211=>912,5212=>914,5213=>744,5214=>916,5215=>744,5216=>916,5217=>916,5218=>744,5219=>916,5220=>744,5221=>915,5222=>477,5223=>855,5224=>855,5225=>855,5226=>855,5227=>592,5228=>592,5229=>592,5230=>592,5231=>592,5232=>610,5233=>713,5234=>592,5235=>608,5236=>718,5237=>764,5238=>764,5239=>718,5240=>764,5241=>718,5242=>718,5243=>763,5244=>735,5245=>763,5246=>764,5247=>718,5248=>764,5249=>734,5250=>763,5251=>361,5252=>361,5253=>708,5254=>708,5255=>708,5256=>651,5257=>592,5258=>592,5259=>592,5260=>592,5261=>592,5262=>610,5263=>713,5264=>592,5265=>608,5266=>608,5267=>763,5268=>763,5269=>608,5270=>763,5271=>608,5272=>609,5273=>763,5274=>627,5275=>763,5276=>763,5277=>609,5278=>763,5279=>625,5280=>763,5281=>361,5282=>361,5283=>592,5284=>592,5285=>592,5286=>592,5287=>592,5288=>610,5289=>713,5290=>592,5291=>608,5292=>592,5293=>763,5294=>763,5295=>592,5296=>763,5297=>592,5298=>592,5299=>763,5300=>610,5301=>763,5302=>763,5303=>592,5304=>763,5305=>608,5306=>763,5307=>346,5308=>276,5309=>346,5310=>331,5311=>562,5312=>712,5313=>712,5314=>712,5315=>712,5316=>712,5317=>712,5318=>712,5319=>712,5320=>712,5321=>868,5322=>828,5323=>828,5324=>712,5325=>828,5326=>712,5327=>712,5328=>466,5329=>452,5330=>466,5331=>712,5332=>712,5333=>712,5334=>712,5335=>712,5336=>712,5337=>712,5338=>712,5339=>712,5340=>868,5341=>828,5342=>828,5343=>868,5344=>828,5345=>868,5346=>712,5347=>828,5348=>712,5349=>828,5350=>828,5351=>712,5352=>828,5353=>712,5354=>466,5355=>262,5356=>624,5357=>504,5358=>524,5359=>504,5360=>521,5361=>504,5362=>520,5363=>624,5364=>504,5365=>520,5366=>620,5367=>660,5368=>659,5369=>620,5370=>676,5371=>620,5372=>620,5373=>660,5374=>637,5375=>676,5376=>659,5377=>620,5378=>659,5379=>636,5380=>659,5381=>309,5382=>365,5383=>309,5384=>458,5385=>315,5386=>315,5387=>347,5388=>1010,5389=>1020,5390=>872,5391=>872,5392=>830,5393=>830,5394=>830,5395=>854,5396=>854,5397=>854,5398=>854,5399=>1001,5400=>1002,5401=>1001,5402=>1002,5403=>1001,5404=>1002,5405=>998,5406=>998,5407=>998,5408=>998,5409=>998,5410=>998,5411=>998,5412=>998,5413=>594,5414=>516,5415=>516,5416=>516,5417=>516,5418=>516,5419=>532,5420=>636,5421=>516,5422=>532,5423=>671,5424=>672,5425=>671,5426=>672,5427=>671,5428=>672,5429=>671,5430=>672,5431=>687,5432=>672,5433=>671,5434=>672,5435=>671,5436=>688,5437=>671,5438=>372,5439=>505,5440=>464,5441=>460,5442=>830,5443=>830,5444=>830,5445=>830,5446=>830,5447=>830,5448=>556,5449=>556,5450=>556,5451=>556,5452=>556,5453=>556,5454=>691,5455=>712,5456=>343,5457=>362,5458=>624,5459=>817,5460=>817,5461=>817,5462=>817,5463=>824,5464=>824,5465=>824,5466=>824,5467=>980,5468=>972,5469=>465,5470=>742,5471=>742,5472=>742,5473=>742,5474=>742,5475=>742,5476=>742,5477=>742,5478=>742,5479=>742,5480=>898,5481=>848,5482=>410,5483=>742,5484=>742,5485=>744,5486=>744,5487=>825,5488=>742,5489=>742,5490=>744,5491=>744,5492=>800,5493=>800,5494=>800,5495=>800,5496=>800,5497=>800,5498=>800,5499=>493,5500=>592,5501=>460,5502=>875,5503=>875,5504=>875,5505=>777,5506=>795,5507=>875,5508=>875,5509=>644,5510=>592,5511=>592,5512=>592,5513=>592,5514=>782,5515=>782,5516=>782,5517=>782,5518=>1056,5519=>1056,5520=>1056,5521=>687,5522=>705,5523=>1056,5524=>1056,5525=>524,5526=>782,5527=>646,5528=>646,5529=>646,5530=>646,5531=>712,5532=>712,5533=>712,5534=>712,5535=>466,5536=>772,5537=>772,5538=>772,5539=>772,5540=>772,5541=>772,5542=>466,5543=>638,5544=>638,5545=>638,5546=>638,5547=>638,5548=>638,5549=>638,5550=>388,5551=>488,5552=>515,5553=>515,5554=>515,5555=>515,5556=>592,5557=>592,5558=>592,5559=>592,5560=>542,5561=>542,5562=>542,5563=>542,5564=>561,5565=>561,5566=>561,5567=>561,5568=>630,5569=>630,5570=>630,5571=>630,5572=>941,5573=>941,5574=>726,5575=>726,5576=>726,5577=>726,5578=>941,5579=>941,5580=>726,5581=>726,5582=>726,5583=>726,5584=>941,5585=>941,5586=>726,5587=>726,5588=>730,5589=>726,5590=>941,5591=>941,5592=>726,5593=>726,5594=>730,5595=>726,5596=>830,5597=>830,5598=>830,5599=>830,5600=>830,5601=>830,5602=>830,5603=>830,5604=>830,5605=>830,5606=>830,5607=>830,5608=>830,5609=>830,5610=>830,5611=>830,5612=>830,5613=>830,5614=>400,5615=>722,5616=>722,5617=>722,5618=>722,5619=>722,5620=>722,5621=>722,5622=>722,5623=>722,5624=>722,5625=>722,5626=>722,5627=>722,5628=>722,5629=>722,5630=>722,5631=>722,5632=>722,5633=>522,5634=>592,5635=>592,5636=>712,5637=>712,5638=>712,5639=>712,5640=>722,5641=>722,5642=>722,5643=>722,5644=>722,5645=>722,5646=>830,5647=>830,5648=>704,5649=>704,5650=>704,5651=>704,5652=>647,5653=>647,5654=>647,5655=>830,5656=>830,5657=>830,5658=>830,5659=>830,5660=>647,5661=>647,5662=>830,5663=>830,5664=>830,5665=>830,5666=>830,5667=>830,5668=>465,5669=>465,5670=>465,5671=>465,5672=>830,5673=>830,5674=>574,5675=>574,5676=>574,5677=>574,5678=>609,5679=>609,5680=>647,5681=>647,5682=>647,5683=>647,5684=>739,5685=>739,5686=>754,5687=>754,5688=>754,5689=>754,5690=>830,5691=>830,5692=>755,5693=>755,5694=>755,5695=>755,5696=>830,5697=>830,5698=>830,5699=>830,5700=>830,5701=>830,5702=>427,5703=>427,5704=>830,5705=>830,5706=>830,5707=>830,5708=>830,5709=>830,5710=>830,5711=>830,5712=>718,5713=>718,5714=>718,5715=>718,5716=>830,5717=>830,5718=>718,5719=>718,5720=>718,5721=>718,5722=>525,5723=>830,5724=>830,5725=>718,5726=>718,5727=>718,5728=>718,5729=>830,5730=>830,5731=>718,5732=>718,5733=>718,5734=>718,5735=>722,5736=>722,5737=>722,5738=>722,5739=>722,5740=>722,5741=>822,5742=>370,5743=>875,5744=>1056,5745=>1316,5746=>1314,5747=>963,5748=>981,5749=>1314,5750=>1330,5751=>668,5752=>778,5753=>778,5754=>698,5755=>698,5756=>778,5757=>778,5758=>400,5759=>400,6320=>726,6321=>726,6322=>726,6323=>882,6324=>726,6325=>726,6326=>786,6327=>744,6328=>592,6329=>764,6330=>592,6331=>712,6332=>712,6333=>712,6334=>504,6335=>504,6336=>830,6337=>830,6338=>1001,6339=>516,6340=>516,6341=>556,6342=>824,6343=>892,6344=>824,6345=>892,6346=>712,6347=>824,6348=>712,6349=>824,6350=>996,6351=>964,6352=>964,6353=>726,6354=>726,6355=>686,6356=>525,6357=>452,6358=>361,6359=>361,6360=>346,6361=>466,6362=>310,6363=>486,6364=>575,6365=>575,6366=>223,6367=>216,6368=>984,6369=>556,6370=>556,6371=>906,6372=>858,6373=>906,6374=>744,6375=>744,6376=>758,6377=>592,6378=>808,6379=>646,6380=>630,6381=>906,6382=>722,6383=>722,6384=>906,6385=>647,6386=>984,6387=>280,6388=>319,6389=>355,7680=>667,7681=>556,7682=>667,7683=>556,7684=>667,7685=>556,7686=>667,7687=>556,7688=>722,7689=>500,7690=>722,7691=>556,7692=>722,7693=>556,7694=>722,7695=>556,7696=>722,7697=>556,7698=>722,7699=>556,7700=>667,7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,7707=>556,7708=>667,7709=>556,7710=>611,7711=>278,7712=>778,7713=>556,7714=>722,7715=>556,7716=>722,7717=>556,7718=>722,7719=>556,7720=>722,7721=>556,7722=>722,7723=>556,7724=>278,7725=>222,7726=>278,7727=>251,7728=>667,7729=>500,7730=>667,7731=>500,7732=>667,7733=>500,7734=>556,7735=>222,7736=>556,7737=>222,7738=>556,7739=>222,7740=>556,7741=>222,7742=>833,7743=>833,7744=>833,7745=>833,7746=>833,7747=>833,7748=>722,7749=>556,7750=>722,7751=>556,7752=>722,7753=>556,7754=>722,7755=>556,7756=>778,7757=>556,7758=>778,7759=>556,7760=>778,7761=>556,7762=>778,7763=>556,7764=>667,7765=>556,7766=>667,7767=>556,7768=>722,7769=>333,7770=>722,7771=>333,7772=>722,7773=>333,7774=>722,7775=>333,7776=>667,7777=>500,7778=>667,7779=>500,7780=>667,7781=>500,7782=>667,7783=>500,7784=>667,7785=>500,7786=>611,7787=>278,7788=>611,7789=>278,7790=>611,7791=>278,7792=>611,7793=>278,7794=>722,7795=>556,7796=>722,7797=>556,7798=>722,7799=>556,7800=>722,7801=>556,7802=>722,7803=>556,7804=>667,7805=>500,7806=>667,7807=>500,7808=>944,7809=>722,7810=>944,7811=>722,7812=>944,7813=>722,7814=>944,7815=>722,7816=>944,7817=>722,7818=>667,7819=>500,7820=>667,7821=>500,7822=>667,7823=>500,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,7830=>556,7831=>278,7832=>722,7833=>500,7834=>555,7835=>278,7840=>667,7841=>556,7842=>667,7843=>556,7844=>667,7845=>556,7846=>667,7847=>556,7848=>667,7849=>556,7850=>667,7851=>556,7852=>667,7853=>556,7854=>667,7855=>556,7856=>667,7857=>556,7858=>667,7859=>556,7860=>667,7861=>556,7862=>667,7863=>556,7864=>667,7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,7871=>556,7872=>667,7873=>556,7874=>667,7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,7881=>251,7882=>278,7883=>222,7884=>778,7885=>556,7886=>778,7887=>556,7888=>778,7889=>556,7890=>778,7891=>556,7892=>778,7893=>556,7894=>778,7895=>556,7896=>778,7897=>556,7898=>788,7899=>565,7900=>788,7901=>565,7902=>788,7903=>565,7904=>788,7905=>565,7906=>788,7907=>565,7908=>722,7909=>556,7910=>722,7911=>556,7912=>776,7913=>624,7914=>776,7915=>624,7916=>776,7917=>624,7918=>776,7919=>624,7920=>776,7921=>624,7922=>667,7923=>500,7924=>667,7925=>500,7926=>667,7927=>500,7928=>667,7929=>500,7936=>596,7937=>596,7938=>596,7939=>596,7940=>596,7941=>596,7942=>596,7943=>596,7944=>667,7945=>667,7946=>742,7947=>756,7948=>692,7949=>699,7950=>673,7951=>667,7952=>512,7953=>512,7954=>512,7955=>512,7956=>512,7957=>512,7960=>730,7961=>714,7962=>900,7963=>882,7964=>867,7965=>879,7968=>548,7969=>548,7970=>548,7971=>548,7972=>548,7973=>548,7974=>548,7975=>548,7976=>772,7977=>778,7978=>945,7979=>947,7980=>943,7981=>946,7982=>853,7983=>853,7984=>286,7985=>286,7986=>286,7987=>286,7988=>286,7989=>286,7990=>286,7991=>286,7992=>322,7993=>321,7994=>482,7995=>485,7996=>477,7997=>484,7998=>394,7999=>390,8000=>546,8001=>546,8002=>546,8003=>546,8004=>546,8005=>546,8008=>775,8009=>784,8010=>990,8011=>987,8012=>887,8013=>897,8016=>538,8017=>538,8018=>538,8019=>538,8020=>538,8021=>538,8022=>538,8023=>538,8025=>747,8027=>915,8029=>971,8031=>863,8032=>740,8033=>740,8034=>740,8035=>740,8036=>740,8037=>740,8038=>740,8039=>740,8040=>769,8041=>774,8042=>972,8043=>970,8044=>879,8045=>918,8046=>901,8047=>901,8048=>596,8049=>596,8050=>512,8051=>512,8052=>548,8053=>548,8054=>286,8055=>286,8056=>546,8057=>546,8058=>538,8059=>538,8060=>740,8061=>740,8064=>596,8065=>596,8066=>596,8067=>596,8068=>596,8069=>596,8070=>596,8071=>596,8072=>830,8073=>828,8074=>916,8075=>916,8076=>853,8077=>860,8078=>835,8079=>827,8080=>548,8081=>548,8082=>548,8083=>548,8084=>548,8085=>548,8086=>548,8087=>548,8088=>928,8089=>931,8090=>1104,8091=>1109,8092=>1099,8093=>1102,8094=>1009,8095=>1012,8096=>740,8097=>740,8098=>740,8099=>740,8100=>740,8101=>740,8102=>740,8103=>740,8104=>934,8105=>934,8106=>1130,8107=>1128,8108=>1045,8109=>1077,8110=>1062,8111=>1065,8112=>596,8113=>596,8114=>596,8115=>596,8116=>596,8118=>596,8119=>596,8120=>667,8121=>667,8122=>667,8123=>667,8124=>832,8125=>333,8126=>200,8127=>333,8128=>333,8129=>333,8130=>548,8131=>548,8132=>548,8134=>548,8135=>548,8136=>833,8137=>776,8138=>944,8139=>896,8140=>875,8141=>400,8142=>400,8143=>333,8144=>286,8145=>286,8146=>286,8147=>286,8150=>286,8151=>286,8152=>278,8153=>278,8154=>385,8155=>376,8157=>400,8158=>400,8159=>333,8160=>538,8161=>538,8162=>538,8163=>538,8164=>569,8165=>569,8166=>538,8167=>514,8168=>667,8169=>667,8170=>817,8171=>827,8172=>741,8173=>393,8174=>393,8175=>333,8178=>740,8179=>740,8180=>740,8182=>740,8183=>740,8184=>833,8185=>833,8186=>848,8187=>814,8188=>939,8189=>333,8190=>333,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>556,8211=>556,8212=>1000,8213=>1000,8214=>312,8215=>566,8216=>222,8217=>221,8218=>222,8219=>221,8220=>333,8221=>333,8222=>333,8223=>333,8224=>556,8225=>556,8226=>350,8227=>350,8228=>278,8229=>666,8230=>1000,8231=>278,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>500,8240=>1000,8241=>1360,8242=>278,8243=>469,8244=>680,8245=>278,8246=>469,8247=>680,8248=>376,8249=>250,8250=>250,8251=>622,8252=>556,8253=>556,8254=>556,8255=>658,8256=>658,8257=>438,8258=>840,8259=>400,8260=>167,8261=>334,8262=>334,8263=>1112,8264=>834,8265=>834,8266=>556,8267=>537,8268=>537,8269=>537,8270=>389,8271=>278,8272=>658,8273=>389,8274=>634,8275=>500,8276=>658,8277=>787,8278=>515,8279=>855,8280=>722,8281=>725,8282=>224,8283=>722,8284=>604,8285=>224,8286=>224,8287=>0,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>350,8305=>140,8308=>350,8309=>350,8310=>350,8311=>350,8312=>350,8313=>350,8314=>350,8315=>350,8316=>350,8317=>350,8318=>350,8319=>360,8320=>350,8321=>350,8322=>350,8323=>350,8324=>350,8325=>350,8326=>350,8327=>350,8328=>350,8329=>350,8330=>350,8331=>350,8332=>350,8333=>350,8334=>350,8336=>363,8337=>366,8338=>360,8339=>325,8340=>350,8353=>615,8354=>601,8355=>611,8356=>556,8357=>833,8358=>682,8359=>1317,8360=>1202,8361=>879,8362=>869,8363=>538,8364=>655,8365=>667,8366=>611,8368=>570,8369=>684,8370=>717,8371=>667,8372=>667,8373=>640,8376=>516,8400=>0,8401=>0,8402=>0,8403=>0,8404=>0,8405=>0,8406=>0,8407=>0,8408=>0,8409=>0,8410=>0,8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8420=>0,8421=>0,8422=>0,8423=>0,8424=>0,8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8432=>0,8448=>870,8449=>859,8450=>722,8451=>1017,8452=>556,8453=>796,8454=>832,8455=>667,8456=>722,8457=>919,8459=>969,8460=>615,8461=>647,8462=>556,8463=>572,8464=>809,8465=>606,8466=>900,8467=>481,8468=>747,8469=>722,8470=>934,8471=>882,8472=>600,8473=>667,8474=>778,8475=>850,8476=>699,8477=>722,8478=>834,8479=>722,8480=>1043,8481=>1261,8482=>1000,8483=>667,8484=>611,8486=>778,8487=>778,8488=>512,8489=>286,8490=>667,8491=>667,8492=>908,8493=>623,8494=>556,8495=>469,8496=>562,8497=>895,8498=>588,8499=>1080,8501=>640,8502=>592,8503=>466,8504=>598,8505=>278,8506=>868,8507=>1338,8508=>619,8510=>582,8511=>722,8513=>778,8514=>556,8515=>556,8516=>667,8522=>516,8523=>655,8525=>1200,8526=>435,8531=>869,8532=>869,8533=>869,8534=>869,8535=>869,8536=>869,8537=>869,8538=>869,8539=>869,8540=>869,8541=>869,8542=>869,8543=>869,8544=>278,8545=>556,8546=>834,8547=>945,8548=>667,8549=>945,8550=>1223,8551=>1501,8552=>945,8553=>667,8554=>945,8555=>1223,8556=>556,8557=>722,8558=>722,8559=>833,8560=>222,8561=>444,8562=>666,8563=>722,8564=>500,8565=>722,8566=>944,8567=>1166,8568=>722,8569=>500,8570=>722,8571=>944,8572=>222,8573=>500,8574=>556,8575=>833,8592=>987,8593=>603,8594=>987,8595=>603,8596=>1042,8597=>1042,8598=>800,8599=>800,8600=>800,8601=>800,8614=>987,8617=>987,8618=>987,8629=>658,8636=>987,8637=>987,8638=>380,8639=>393,8640=>987,8641=>987,8642=>380,8643=>379,8652=>987,8656=>987,8657=>603,8658=>987,8659=>603,8660=>1042,8661=>603,8669=>1092,8704=>667,8706=>556,8707=>667,8709=>823,8710=>711,8711=>711,8712=>584,8713=>584,8714=>584,8715=>584,8716=>584,8717=>713,8719=>823,8720=>823,8721=>804,8722=>584,8723=>584,8724=>584,8725=>510,8726=>392,8727=>584,8729=>584,8730=>542,8733=>713,8734=>713,8736=>768,8739=>200,8740=>288,8741=>312,8742=>340,8743=>603,8744=>603,8745=>768,8746=>768,8747=>556,8748=>796,8749=>956,8750=>556,8756=>863,8764=>584,8765=>584,8766=>573,8768=>244,8769=>584,8770=>584,8771=>584,8772=>584,8773=>584,8774=>584,8775=>584,8776=>584,8777=>584,8781=>554,8784=>584,8800=>584,8801=>584,8802=>584,8804=>584,8805=>584,8810=>955,8811=>955,8813=>554,8814=>584,8815=>584,8816=>584,8817=>584,8818=>584,8819=>584,8826=>584,8827=>584,8828=>584,8829=>584,8832=>584,8833=>584,8834=>584,8835=>584,8836=>584,8837=>584,8838=>584,8839=>584,8840=>584,8841=>584,8844=>768,8847=>636,8848=>636,8849=>636,8850=>636,8851=>636,8852=>636,8853=>768,8854=>768,8855=>768,8856=>768,8857=>768,8866=>658,8867=>658,8868=>658,8869=>658,8870=>600,8871=>608,8882=>636,8883=>636,8884=>636,8885=>636,8896=>744,8897=>744,8898=>764,8899=>764,8901=>278,8902=>471,8904=>710,8928=>584,8929=>584,8930=>636,8931=>636,8960=>823,8968=>456,8969=>455,8970=>455,8971=>456,8992=>556,8993=>556,8994=>658,8995=>658,9001=>329,9002=>329,9115=>384,9116=>384,9117=>384,9118=>384,9119=>384,9120=>384,9121=>388,9122=>388,9123=>388,9124=>388,9125=>388,9126=>388,9134=>556,9216=>800,9217=>800,9218=>800,9219=>800,9220=>800,9221=>800,9222=>800,9223=>800,9224=>800,9225=>800,9226=>800,9227=>800,9228=>800,9229=>800,9230=>800,9231=>800,9232=>800,9233=>800,9234=>800,9235=>800,9236=>800,9237=>800,9238=>800,9239=>800,9240=>800,9241=>800,9242=>800,9243=>800,9244=>800,9245=>800,9246=>800,9247=>800,9248=>800,9249=>800,9250=>556,9251=>500,9252=>800,9312=>788,9313=>788,9314=>788,9315=>788,9316=>788,9317=>788,9318=>788,9319=>788,9320=>788,9321=>788,9472=>1000,9473=>1000,9474=>1000,9475=>1000,9476=>1000,9477=>1000,9478=>1000,9479=>1000,9480=>1000,9481=>1000,9482=>1000,9483=>1000,9484=>1000,9485=>1000,9486=>1000,9487=>1000,9488=>1000,9489=>1000,9490=>1000,9491=>1000,9492=>1000,9493=>1000,9494=>1000,9495=>1000,9496=>1000,9497=>1000,9498=>1000,9499=>1000,9500=>1000,9501=>1000,9502=>1000,9503=>1000,9504=>1000,9505=>1000,9506=>1000,9507=>1000,9508=>1000,9509=>1000,9510=>1000,9511=>1000,9512=>1000,9513=>1000,9514=>1000,9515=>1000,9516=>1000,9517=>1000,9518=>1000,9519=>1000,9520=>1000,9521=>1000,9522=>1000,9523=>1000,9524=>1000,9525=>1000,9526=>1000,9527=>1000,9528=>1000,9529=>1000,9530=>1000,9531=>1000,9532=>1000,9533=>1000,9534=>1000,9535=>1000,9536=>1000,9537=>1000,9538=>1000,9539=>1000,9540=>1000,9541=>1000,9542=>1000,9543=>1000,9544=>1000,9545=>1000,9546=>1000,9547=>1000,9552=>1000,9553=>1000,9554=>1000,9555=>1000,9556=>1000,9557=>1000,9558=>1000,9559=>1000,9560=>1000,9561=>1000,9562=>1000,9563=>1000,9564=>1000,9565=>1000,9566=>1000,9567=>1000,9568=>1000,9569=>1000,9570=>1000,9571=>1000,9572=>1000,9573=>1000,9574=>1000,9575=>1000,9576=>1000,9577=>1000,9578=>1000,9579=>1000,9580=>1000,9600=>1000,9601=>1000,9602=>1000,9603=>1000,9604=>1000,9605=>1000,9606=>1000,9607=>1000,9608=>1000,9609=>1000,9610=>1000,9611=>1000,9612=>1000,9613=>1000,9614=>1000,9615=>1000,9616=>1000,9617=>1000,9618=>1000,9619=>1000,9620=>1000,9621=>1000,9622=>1000,9623=>1000,9624=>1000,9625=>1000,9626=>1000,9627=>1000,9628=>1000,9629=>1000,9630=>1000,9631=>1000,9632=>800,9633=>800,9634=>800,9635=>800,9636=>800,9637=>800,9638=>800,9639=>800,9640=>800,9641=>800,9642=>625,9643=>625,9644=>800,9645=>800,9646=>800,9647=>800,9648=>1000,9649=>1000,9650=>892,9651=>892,9652=>669,9653=>669,9654=>892,9655=>892,9656=>669,9657=>669,9658=>891,9659=>891,9660=>892,9661=>892,9662=>669,9663=>669,9664=>892,9665=>892,9666=>669,9667=>669,9668=>891,9669=>891,9670=>788,9671=>788,9672=>788,9673=>800,9674=>489,9675=>800,9676=>800,9677=>800,9678=>800,9679=>800,9680=>800,9681=>800,9682=>800,9683=>800,9684=>800,9685=>800,9686=>800,9687=>800,9688=>350,9689=>800,9690=>800,9691=>800,9692=>800,9693=>800,9694=>800,9695=>799,9696=>800,9697=>800,9698=>1000,9699=>1000,9700=>1000,9701=>1000,9702=>350,9703=>800,9704=>800,9705=>800,9706=>800,9707=>800,9708=>892,9709=>892,9710=>892,9711=>882,9712=>800,9713=>800,9714=>800,9715=>800,9716=>800,9717=>800,9718=>800,9719=>800,9720=>800,9721=>800,9722=>800,9723=>800,9724=>800,9725=>800,9726=>800,9727=>800,9772=>929,9824=>626,9825=>694,9826=>595,9827=>776,9828=>626,9829=>694,9830=>595,9831=>776,9833=>333,9834=>555,9835=>722,9836=>722,9837=>415,9838=>377,9839=>402,10048=>1161,10752=>791,10753=>791,10754=>791,10755=>764,10756=>764,10761=>584,11568=>352,11569=>872,11570=>872,11571=>720,11572=>720,11573=>720,11574=>544,11575=>709,11576=>709,11577=>720,11578=>720,11579=>596,11580=>698,11581=>742,11582=>574,11583=>742,11584=>872,11585=>872,11586=>292,11587=>696,11588=>696,11589=>720,11590=>544,11591=>724,11592=>756,11593=>600,11594=>672,11595=>888,11596=>836,11597=>524,11598=>720,11599=>260,11600=>836,11601=>224,11602=>678,11603=>380,11604=>872,11605=>872,11606=>720,11607=>268,11608=>640,11609=>872,11610=>872,11611=>770,11612=>424,11613=>720,11614=>770,11615=>720,11616=>709,11617=>720,11618=>541,11619=>828,11620=>454,11621=>828,11631=>442,11799=>333,42240=>698,42241=>698,42242=>676,42243=>800,42244=>800,42245=>850,42246=>930,42247=>720,42248=>756,42249=>750,42250=>750,42251=>750,42252=>540,42253=>540,42254=>780,42255=>780,42256=>1082,42257=>1082,42258=>780,42259=>780,42260=>720,42261=>774,42262=>600,42263=>600,42264=>600,42265=>600,42266=>983,42267=>983,42268=>749,42269=>749,42270=>1080,42271=>890,42272=>869,42273=>720,42274=>739,42275=>983,42276=>780,42277=>840,42278=>780,42279=>424,42280=>840,42281=>967,42282=>462,42283=>952,42284=>735,42285=>735,42286=>780,42287=>750,42288=>869,42289=>772,42290=>772,42291=>676,42292=>762,42293=>674,42294=>674,42295=>488,42296=>604,42297=>822,42298=>1059,42299=>851,42300=>851,42301=>689,42302=>844,42303=>708,42304=>907,42305=>907,42306=>907,42307=>612,42308=>612,42309=>840,42310=>775,42311=>544,42312=>774,42313=>540,42314=>704,42315=>723,42316=>887,42317=>887,42318=>676,42319=>817,42320=>762,42321=>887,42322=>824,42323=>890,42324=>705,42325=>780,42326=>705,42327=>533,42328=>523,42329=>694,42330=>772,42331=>772,42332=>772,42333=>892,42334=>711,42335=>711,42336=>832,42337=>832,42338=>944,42339=>944,42340=>832,42341=>928,42342=>743,42343=>735,42344=>731,42345=>782,42346=>595,42347=>890,42348=>680,42349=>887,42350=>815,42351=>510,42352=>848,42353=>700,42354=>700,42355=>700,42356=>724,42357=>724,42358=>633,42359=>633,42360=>813,42361=>834,42362=>625,42363=>887,42364=>592,42365=>772,42366=>772,42367=>639,42368=>639,42369=>887,42370=>887,42371=>717,42372=>717,42373=>786,42374=>891,42375=>780,42376=>841,42377=>500,42378=>792,42379=>522,42380=>522,42381=>647,42382=>361,42383=>815,42384=>850,42385=>683,42386=>834,42387=>898,42388=>522,42389=>820,42390=>820,42391=>808,42392=>864,42393=>772,42394=>808,42395=>869,42396=>900,42397=>844,42398=>844,42399=>812,42400=>812,42401=>812,42402=>930,42403=>990,42404=>540,42405=>608,42406=>630,42407=>910,42408=>687,42409=>687,42410=>744,42411=>687,42412=>724,42413=>742,42414=>724,42415=>742,42416=>744,42417=>744,42418=>744,42419=>744,42420=>780,42421=>540,42422=>540,42423=>595,42424=>740,42425=>620,42426=>772,42427=>914,42428=>914,42429=>857,42430=>800,42431=>772,42432=>887,42433=>990,42434=>1005,42435=>799,42436=>799,42437=>948,42438=>948,42439=>906,42440=>1044,42441=>600,42442=>600,42443=>574,42444=>742,42445=>574,42446=>742,42447=>500,42448=>604,42449=>704,42450=>704,42451=>746,42452=>820,42453=>731,42454=>805,42455=>606,42456=>726,42457=>726,42458=>500,42459=>813,42460=>939,42461=>898,42462=>660,42463=>633,42464=>914,42465=>689,42466=>1231,42467=>784,42468=>710,42469=>982,42470=>704,42471=>782,42472=>591,42473=>770,42474=>620,42475=>620,42476=>930,42477=>930,42478=>930,42479=>785,42480=>785,42481=>813,42482=>813,42483=>971,42484=>971,42485=>721,42486=>801,42487=>582,42488=>604,42489=>618,42490=>582,42491=>1059,42492=>1059,42493=>1059,42494=>1059,42495=>720,42496=>789,42497=>723,42498=>721,42499=>772,42500=>772,42501=>772,42502=>772,42503=>772,42504=>620,42505=>634,42506=>806,42507=>825,42508=>670,42509=>521,42510=>512,42511=>1134,42512=>1324,42513=>772,42514=>1091,42515=>445,42516=>811,42517=>776,42518=>614,42519=>720,42520=>902,42521=>765,42522=>920,42523=>1024,42524=>735,42525=>742,42526=>816,42527=>715,42528=>692,42529=>200,42530=>677,42531=>770,42532=>640,42533=>595,42534=>526,42535=>677,42536=>500,42537=>715,42538=>1143,42539=>560,42888=>333,42889=>276,42890=>342,42891=>194,42892=>194,64256=>495,64257=>460,64258=>465,64259=>652,64260=>645,64261=>520,64275=>1004,64276=>1044,64277=>1042,64278=>1037,64279=>1256,64285=>200,64286=>305,64287=>400,64288=>587,64289=>890,64290=>848,64291=>872,64292=>800,64293=>850,64294=>873,64295=>797,64296=>937,64297=>584,64298=>776,64299=>776,64300=>776,64301=>776,64302=>640,64303=>640,64304=>640,64305=>591,64306=>466,64307=>598,64308=>622,64309=>262,64310=>351,64312=>608,64313=>270,64314=>526,64315=>550,64316=>600,64318=>621,64320=>378,64321=>607,64323=>575,64324=>568,64326=>590,64327=>606,64328=>547,64329=>776,64330=>687,64331=>212,64332=>591,64333=>550,64334=>568,64335=>640,65533=>900,65535=>700);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/freesans.z b/lib/tcpdf/fonts/freesans.z
index 2bcdd56f2e2..1e0585a41cf 100644
Binary files a/lib/tcpdf/fonts/freesans.z and b/lib/tcpdf/fonts/freesans.z differ
diff --git a/lib/tcpdf/fonts/freesansb.ctg.z b/lib/tcpdf/fonts/freesansb.ctg.z
index 8c0510dc3a9..744d3dd3761 100644
Binary files a/lib/tcpdf/fonts/freesansb.ctg.z and b/lib/tcpdf/fonts/freesansb.ctg.z differ
diff --git a/lib/tcpdf/fonts/freesansb.php b/lib/tcpdf/fonts/freesansb.php
index ea53a175734..17add193f70 100644
--- a/lib/tcpdf/fonts/freesansb.php
+++ b/lib/tcpdf/fonts/freesansb.php
@@ -1,236 +1,15 @@
1000,'Descent'=>-300,'CapHeight'=>22,'Flags'=>32,'FontBBox'=>'[-967 -1175 1556 1639]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600);
$up=-189;
$ut=69;
-$dw=600;
-$cw=array(
-32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238,40=>333,41=>333,
-42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,
-52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333,60=>584,61=>584,
-62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667,70=>611,71=>778,
-72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778,80=>667,81=>778,
-82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>333,
-92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556,100=>611,101=>556,
-102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278,109=>889,110=>611,111=>611,
-112=>611,113=>611,114=>389,115=>556,116=>333,117=>611,118=>556,119=>778,120=>556,121=>556,
-122=>500,123=>389,124=>280,125=>389,126=>584,8364=>640,8218=>278,402=>333,8222=>500,8230=>1000,
-8224=>556,8225=>556,710=>333,8240=>1000,352=>667,8249=>333,338=>1000,381=>611,8216=>278,8217=>278,
-8220=>500,8221=>500,8226=>350,8211=>556,8212=>1000,732=>333,8482=>1000,353=>556,8250=>333,339=>944,
-382=>500,376=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>280,167=>556,
-168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584,
-178=>351,179=>351,180=>333,181=>611,182=>556,183=>278,184=>333,185=>300,186=>365,187=>556,
-188=>869,189=>869,190=>869,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,
-198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,
-208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,
-218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,
-228=>556,229=>556,230=>889,231=>556,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,
-238=>278,239=>278,240=>611,241=>611,242=>611,243=>611,244=>611,245=>611,246=>611,247=>584,
-248=>611,249=>611,250=>611,251=>611,252=>611,253=>556,254=>611,255=>556,256=>722,257=>556,
-258=>722,259=>556,260=>722,261=>556,262=>722,263=>556,264=>722,265=>556,266=>722,267=>556,
-268=>722,269=>556,270=>722,271=>723,272=>722,273=>611,274=>667,275=>556,276=>667,277=>556,
-278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>611,286=>778,287=>611,
-288=>778,289=>611,290=>778,291=>611,292=>722,293=>611,294=>722,295=>611,296=>278,297=>278,
-298=>278,299=>278,300=>278,301=>278,302=>278,303=>278,304=>278,305=>278,306=>808,307=>492,
-308=>556,309=>278,310=>722,311=>556,312=>559,313=>611,314=>278,315=>611,316=>278,317=>611,
-318=>362,319=>611,320=>556,321=>611,322=>278,323=>722,324=>611,325=>722,326=>611,327=>722,
-328=>611,329=>611,330=>722,331=>611,332=>778,333=>611,334=>778,335=>611,336=>778,337=>611,
-340=>722,341=>389,342=>722,343=>389,344=>722,345=>389,346=>667,347=>556,348=>667,349=>556,
-350=>667,351=>556,354=>611,355=>333,356=>611,357=>414,358=>611,359=>333,360=>722,361=>611,
-362=>722,363=>611,364=>722,365=>611,366=>722,367=>611,368=>722,369=>611,370=>722,371=>611,
-372=>944,373=>778,374=>667,375=>556,377=>611,378=>500,379=>611,380=>500,383=>333,384=>611,
-385=>963,386=>704,387=>611,388=>687,389=>611,390=>722,391=>752,392=>562,393=>722,394=>968,
-395=>722,396=>611,397=>609,398=>667,399=>778,400=>672,401=>611,403=>778,404=>667,405=>889,
-406=>278,407=>395,408=>778,409=>556,410=>333,411=>620,412=>944,413=>722,414=>611,415=>778,
-416=>791,417=>653,418=>1111,419=>722,420=>914,421=>611,422=>647,423=>667,424=>556,425=>673,
-426=>441,427=>333,428=>742,429=>333,430=>611,431=>769,432=>656,433=>766,434=>722,435=>667,
-436=>620,437=>611,438=>500,439=>556,440=>556,441=>645,442=>569,443=>579,446=>611,447=>608,
-448=>260,449=>370,450=>584,451=>278,452=>1333,453=>1222,454=>1111,455=>1167,456=>889,457=>556,
-458=>1278,459=>1000,460=>889,461=>722,462=>556,463=>278,464=>278,465=>778,466=>611,467=>722,
-468=>611,469=>722,470=>611,471=>722,472=>611,473=>722,474=>611,475=>722,476=>611,477=>556,
-478=>722,479=>556,480=>722,481=>556,482=>1000,483=>889,484=>778,485=>611,486=>778,487=>611,
-488=>722,489=>556,490=>778,491=>611,492=>778,493=>611,494=>556,495=>556,496=>278,497=>1333,
-498=>1222,499=>1111,500=>778,501=>611,503=>630,504=>722,505=>611,506=>722,507=>556,508=>1000,
-509=>889,510=>778,511=>611,512=>722,513=>556,514=>722,515=>556,516=>667,517=>556,518=>667,
-519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>611,526=>778,527=>611,528=>722,
-529=>389,530=>722,531=>389,532=>722,533=>611,534=>722,535=>611,536=>667,537=>556,538=>611,
-539=>333,540=>569,541=>486,542=>722,543=>611,548=>645,549=>500,550=>722,551=>556,552=>667,
-553=>556,554=>778,555=>611,556=>778,557=>611,558=>778,559=>611,560=>778,561=>611,562=>667,
-563=>556,567=>278,592=>556,593=>667,594=>667,595=>611,596=>556,597=>600,598=>611,599=>611,
-600=>556,601=>556,602=>834,603=>541,604=>557,605=>820,606=>570,607=>278,608=>611,609=>611,
-610=>556,611=>556,612=>656,613=>619,614=>611,615=>611,616=>278,617=>344,618=>278,619=>473,
-620=>527,621=>298,622=>778,623=>889,624=>889,625=>889,626=>611,627=>611,628=>615,629=>606,
-630=>878,631=>822,632=>778,633=>389,634=>389,635=>389,636=>389,637=>389,638=>455,639=>455,
-640=>620,641=>620,642=>556,643=>333,644=>278,645=>333,646=>544,647=>328,648=>333,649=>623,
-650=>726,651=>639,652=>556,653=>778,654=>556,655=>556,656=>500,657=>571,658=>556,659=>642,
-660=>611,661=>611,662=>611,664=>611,665=>554,666=>570,667=>616,668=>603,669=>552,670=>556,
-671=>454,672=>611,673=>611,674=>611,684=>522,688=>377,689=>377,690=>202,691=>272,692=>272,
-693=>299,694=>395,695=>534,696=>364,697=>278,698=>454,699=>278,700=>278,701=>278,702=>333,
-703=>333,704=>333,705=>333,706=>333,707=>333,708=>333,709=>333,711=>333,712=>333,713=>333,
-714=>333,715=>333,716=>272,717=>333,718=>333,719=>333,720=>333,721=>333,722=>333,723=>333,
-724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,731=>333,733=>333,734=>333,
-735=>510,736=>372,737=>210,738=>363,739=>373,740=>334,741=>526,742=>526,743=>526,744=>526,
-745=>526,746=>519,747=>519,748=>333,749=>333,750=>333,751=>333,752=>333,753=>333,754=>333,
-755=>333,756=>333,757=>437,758=>437,759=>400,760=>333,761=>200,762=>200,763=>200,764=>200,
-765=>333,766=>333,767=>333,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,
-775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,
-785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,
-795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,
-805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,
-815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,
-825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,
-835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,
-845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,
-855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,
-865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0,
-875=>0,876=>0,877=>0,878=>0,879=>0,884=>379,885=>379,890=>333,894=>333,900=>363,
-901=>333,902=>761,903=>333,904=>864,905=>903,906=>454,908=>796,910=>991,911=>867,912=>315,
-913=>696,914=>640,915=>585,916=>726,917=>589,918=>581,919=>654,920=>783,921=>215,922=>648,
-923=>710,924=>829,925=>683,926=>645,927=>738,928=>726,929=>645,931=>673,932=>674,933=>771,
-934=>773,935=>780,936=>778,937=>766,938=>263,939=>771,940=>660,941=>541,942=>560,943=>356,
-944=>568,945=>632,946=>560,947=>591,948=>609,949=>541,950=>488,951=>608,952=>562,953=>315,
-954=>533,955=>603,956=>582,957=>586,958=>513,959=>611,960=>658,961=>595,962=>590,963=>657,
-964=>557,965=>568,966=>768,967=>632,968=>708,969=>778,970=>315,971=>568,972=>599,973=>568,
-974=>778,977=>580,978=>742,979=>857,980=>620,981=>706,982=>740,983=>556,1008=>556,1009=>566,
-1012=>778,1013=>328,1024=>670,1025=>670,1026=>800,1027=>611,1028=>714,1029=>667,1030=>314,1031=>300,
-1032=>576,1033=>1100,1034=>1114,1035=>806,1036=>740,1037=>757,1038=>711,1039=>754,1040=>707,1041=>704,
-1042=>704,1043=>611,1044=>900,1045=>670,1046=>1076,1047=>667,1048=>757,1049=>757,1050=>740,1051=>729,
-1052=>874,1053=>753,1054=>774,1055=>753,1056=>675,1057=>711,1058=>611,1059=>711,1060=>904,1061=>666,
-1062=>816,1063=>698,1064=>1057,1065=>1157,1066=>837,1067=>980,1068=>675,1069=>711,1070=>1093,1071=>708,
-1072=>552,1073=>593,1074=>554,1075=>423,1076=>685,1077=>573,1078=>782,1079=>557,1080=>615,1081=>615,
-1082=>559,1083=>568,1084=>666,1085=>603,1086=>606,1087=>603,1088=>612,1089=>556,1090=>440,1091=>549,
-1092=>964,1093=>539,1094=>652,1095=>554,1096=>886,1097=>968,1098=>699,1099=>778,1100=>568,1101=>556,
-1102=>848,1103=>586,1104=>573,1105=>573,1106=>606,1107=>423,1108=>556,1109=>555,1110=>260,1111=>278,
-1112=>270,1113=>898,1114=>898,1115=>626,1116=>559,1117=>615,1118=>549,1119=>604,1136=>832,1137=>748,
-1138=>774,1139=>606,1154=>449,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,
-1162=>832,1163=>675,1164=>678,1165=>611,1166=>675,1167=>612,1168=>636,1169=>440,1170=>622,1171=>449,
-1172=>647,1173=>574,1174=>1096,1175=>803,1176=>683,1177=>555,1178=>759,1179=>573,1180=>730,1181=>554,
-1182=>737,1183=>555,1184=>892,1185=>680,1186=>825,1187=>653,1188=>999,1189=>763,1190=>1105,1191=>925,
-1192=>714,1193=>558,1194=>722,1195=>558,1196=>614,1197=>438,1198=>643,1199=>573,1200=>643,1201=>603,
-1202=>670,1203=>548,1204=>952,1205=>738,1206=>781,1207=>615,1208=>698,1209=>588,1210=>687,1211=>588,
-1212=>993,1213=>761,1214=>965,1215=>759,1216=>314,1217=>1076,1218=>809,1219=>700,1220=>543,1221=>793,
-1222=>634,1223=>753,1224=>603,1225=>819,1226=>663,1227=>706,1228=>588,1229=>935,1230=>720,1231=>314,
-1232=>707,1233=>564,1234=>707,1235=>566,1236=>1004,1237=>898,1238=>670,1239=>573,1240=>722,1241=>573,
-1242=>722,1243=>573,1244=>1076,1245=>782,1246=>667,1247=>557,1248=>556,1249=>552,1250=>757,1251=>615,
-1252=>757,1253=>615,1254=>778,1255=>611,1256=>774,1257=>606,1258=>774,1259=>606,1260=>711,1261=>556,
-1262=>700,1263=>544,1264=>701,1265=>539,1266=>700,1267=>537,1268=>698,1269=>554,1270=>611,1271=>432,
-1272=>980,1273=>778,1296=>672,1297=>546,1298=>729,1299=>577,1306=>778,1307=>612,1308=>944,1309=>776,
-1310=>730,1311=>554,1329=>730,1330=>713,1331=>765,1332=>752,1333=>708,1334=>801,1335=>496,1336=>713,
-1337=>855,1338=>686,1339=>727,1340=>420,1341=>897,1342=>841,1343=>708,1344=>660,1345=>666,1346=>747,
-1347=>698,1348=>757,1349=>630,1350=>747,1351=>651,1352=>743,1353=>657,1354=>728,1355=>799,1356=>752,
-1357=>743,1358=>768,1359=>691,1360=>713,1361=>640,1362=>425,1363=>818,1364=>672,1365=>805,1366=>754,
-1369=>333,1370=>222,1371=>250,1372=>333,1373=>333,1374=>352,1375=>362,1377=>873,1378=>613,1379=>634,
-1380=>636,1381=>593,1382=>639,1383=>417,1384=>613,1385=>658,1386=>711,1387=>609,1388=>318,1389=>836,
-1390=>670,1391=>613,1392=>607,1393=>611,1394=>626,1395=>619,1396=>618,1397=>324,1398=>613,1399=>540,
-1400=>591,1401=>392,1402=>873,1403=>577,1404=>603,1405=>600,1406=>626,1407=>951,1408=>613,1409=>612,
-1410=>348,1411=>951,1412=>616,1413=>606,1414=>763,1415=>626,1417=>333,1418=>398,1456=>0,1457=>0,
-1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,
-1469=>0,1470=>516,1471=>0,1472=>297,1473=>0,1474=>0,1475=>333,1476=>0,1488=>714,1489=>651,
-1490=>557,1491=>638,1492=>682,1493=>297,1494=>443,1495=>682,1496=>670,1497=>284,1498=>590,1499=>595,
-1500=>667,1501=>683,1502=>704,1503=>297,1504=>429,1505=>670,1506=>653,1507=>661,1508=>660,1509=>616,
-1510=>671,1511=>672,1512=>600,1513=>840,1514=>756,1520=>554,1521=>550,1522=>542,1523=>238,1524=>474,
-2561=>0,2562=>122,2563=>313,2565=>897,2566=>1157,2567=>930,2568=>966,2569=>762,2570=>762,2575=>729,
-2576=>904,2579=>773,2580=>903,2581=>726,2582=>672,2583=>741,2584=>790,2585=>702,2586=>723,2587=>693,
-2588=>688,2589=>673,2590=>683,2591=>686,2592=>711,2593=>680,2594=>693,2595=>729,2596=>691,2597=>694,
-2598=>699,2599=>666,2600=>669,2602=>683,2603=>690,2604=>660,2605=>659,2606=>692,2607=>772,2608=>673,
-2610=>731,2611=>814,2613=>663,2614=>704,2616=>702,2617=>650,2620=>0,2622=>307,2623=>304,2624=>306,
-2625=>7,2626=>7,2631=>7,2632=>8,2635=>6,2636=>5,2637=>8,2649=>684,2650=>813,2651=>715,
-2652=>695,2654=>709,2662=>697,2663=>630,2664=>696,2665=>690,2666=>646,2667=>636,2668=>571,2669=>682,
-2670=>718,2671=>730,2672=>9,2673=>162,2674=>722,2675=>760,2676=>1110,4256=>616,4257=>645,4258=>664,
-4259=>839,4260=>627,4261=>630,4262=>827,4263=>928,4264=>639,4265=>630,4266=>951,4267=>606,4268=>608,
-4269=>835,4270=>630,4271=>610,4272=>804,4273=>615,4274=>823,4275=>747,4276=>870,4277=>627,4278=>840,
-4279=>627,4280=>665,4281=>610,4282=>799,4283=>598,4284=>665,4285=>664,4286=>608,4287=>886,4288=>629,
-4304=>463,4305=>516,4306=>564,4307=>706,4308=>459,4309=>476,4310=>623,4311=>711,4312=>494,4313=>476,
-4314=>894,4315=>500,4316=>500,4317=>712,4318=>493,4319=>503,4320=>712,4321=>503,4322=>710,4323=>670,
-4324=>707,4325=>459,4326=>691,4327=>465,4328=>492,4329=>480,4330=>656,4331=>500,4332=>492,4333=>524,
-4334=>500,4335=>688,4336=>510,4337=>739,4338=>450,4339=>479,4340=>502,4341=>501,4345=>564,4347=>515,
-7680=>722,7681=>556,7682=>722,7683=>611,7684=>722,7685=>611,7686=>722,7687=>611,7688=>722,7689=>556,
-7690=>722,7691=>611,7692=>722,7693=>611,7694=>722,7695=>611,7696=>722,7697=>611,7698=>722,7699=>611,
-7700=>667,7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,7707=>556,7708=>667,7709=>556,
-7710=>611,7711=>333,7712=>778,7713=>611,7714=>722,7715=>611,7716=>722,7717=>611,7718=>722,7719=>611,
-7720=>722,7721=>611,7722=>722,7723=>611,7724=>278,7725=>278,7726=>278,7727=>278,7728=>722,7729=>556,
-7730=>722,7731=>556,7732=>722,7733=>556,7734=>611,7735=>278,7736=>611,7737=>278,7738=>611,7739=>278,
-7740=>611,7741=>278,7742=>833,7743=>889,7744=>833,7745=>889,7746=>833,7747=>889,7748=>722,7749=>611,
-7750=>722,7751=>611,7752=>722,7753=>611,7754=>722,7755=>611,7756=>778,7757=>611,7758=>778,7759=>611,
-7760=>778,7761=>611,7762=>778,7763=>611,7764=>667,7765=>611,7766=>667,7767=>611,7768=>722,7769=>389,
-7770=>722,7771=>389,7772=>722,7773=>389,7774=>722,7775=>389,7776=>667,7777=>556,7778=>667,7779=>556,
-7780=>667,7781=>556,7782=>667,7783=>556,7784=>667,7785=>556,7786=>611,7787=>333,7788=>611,7789=>333,
-7790=>611,7791=>333,7792=>611,7793=>333,7794=>722,7795=>611,7796=>722,7797=>611,7798=>722,7799=>611,
-7800=>722,7801=>611,7802=>722,7803=>611,7804=>667,7805=>556,7806=>667,7807=>556,7808=>944,7809=>778,
-7810=>944,7811=>778,7812=>944,7813=>778,7814=>944,7815=>778,7816=>944,7817=>778,7818=>667,7819=>556,
-7820=>667,7821=>556,7822=>667,7823=>556,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,
-7830=>611,7831=>333,7832=>778,7833=>556,7834=>555,7835=>333,7840=>722,7841=>556,7842=>722,7843=>556,
-7844=>722,7845=>556,7846=>722,7847=>556,7848=>667,7849=>556,7850=>722,7851=>556,7852=>722,7853=>556,
-7854=>722,7855=>556,7856=>722,7857=>556,7858=>722,7859=>556,7860=>722,7861=>556,7862=>722,7863=>556,
-7864=>667,7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,7871=>556,7872=>667,7873=>556,
-7874=>667,7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,7881=>278,7882=>278,7883=>278,
-7884=>778,7885=>611,7886=>778,7887=>611,7888=>778,7889=>611,7890=>778,7891=>611,7892=>778,7893=>611,
-7894=>778,7895=>611,7896=>778,7897=>611,7898=>791,7899=>653,7900=>791,7901=>653,7902=>791,7903=>653,
-7904=>791,7905=>653,7906=>791,7907=>653,7908=>722,7909=>611,7910=>722,7911=>611,7912=>769,7913=>656,
-7914=>769,7915=>656,7916=>769,7917=>656,7918=>769,7919=>656,7920=>769,7921=>656,7922=>667,7923=>556,
-7924=>667,7925=>556,7926=>667,7927=>556,7928=>667,7929=>556,7936=>632,7937=>632,7938=>632,7939=>632,
-7940=>632,7941=>632,7942=>632,7943=>632,7944=>696,7945=>696,7946=>865,7947=>849,7948=>796,7949=>807,
-7950=>730,7951=>750,7952=>541,7953=>541,7954=>541,7955=>541,7956=>541,7957=>541,7960=>758,7961=>760,
-7962=>957,7963=>943,7964=>939,7965=>945,7968=>608,7969=>608,7970=>608,7971=>608,7972=>608,7973=>608,
-7974=>608,7975=>608,7976=>823,7977=>831,7978=>1026,7979=>1017,7980=>1002,7981=>1024,7982=>908,7983=>909,
-7984=>315,7985=>315,7986=>373,7987=>375,7988=>378,7989=>374,7990=>370,7991=>384,7992=>378,7993=>383,
-7994=>596,7995=>579,7996=>572,7997=>576,7998=>474,7999=>459,8000=>610,8001=>610,8002=>610,8003=>610,
-8004=>610,8005=>610,8008=>800,8009=>871,8010=>1084,8011=>1079,8012=>975,8013=>973,8016=>568,8017=>568,
-8018=>568,8019=>568,8020=>568,8021=>568,8022=>568,8023=>568,8025=>906,8027=>1080,8029=>1115,8031=>977,
-8032=>778,8033=>778,8034=>778,8035=>778,8036=>778,8037=>778,8038=>778,8039=>778,8040=>837,8041=>860,
-8042=>1062,8043=>1072,8044=>962,8045=>985,8046=>922,8047=>959,8048=>632,8049=>632,8050=>541,8051=>541,
-8052=>608,8053=>608,8054=>315,8055=>315,8056=>610,8057=>610,8058=>568,8059=>568,8060=>778,8061=>778,
-8064=>632,8065=>632,8066=>632,8067=>632,8068=>632,8069=>632,8070=>632,8071=>632,8072=>909,8073=>906,
-8074=>1061,8075=>1035,8076=>984,8077=>994,8078=>910,8079=>916,8080=>608,8081=>608,8082=>608,8083=>608,
-8084=>608,8085=>608,8086=>608,8087=>608,8088=>1006,8089=>1015,8090=>1204,8091=>1207,8092=>1188,8093=>1209,
-8094=>1096,8095=>1105,8096=>778,8097=>778,8098=>778,8099=>778,8100=>778,8101=>778,8102=>778,8103=>778,
-8104=>1026,8105=>1048,8106=>1251,8107=>1260,8108=>1150,8109=>1177,8110=>1106,8111=>1142,8112=>632,8113=>632,
-8114=>632,8115=>632,8116=>660,8118=>632,8119=>632,8120=>696,8121=>696,8122=>696,8123=>696,8124=>907,
-8125=>278,8126=>346,8127=>278,8128=>278,8129=>333,8130=>608,8131=>608,8132=>560,8134=>608,8135=>608,
-8136=>776,8137=>793,8138=>847,8139=>854,8140=>848,8141=>492,8142=>489,8143=>394,8144=>335,8145=>354,
-8146=>367,8147=>368,8150=>353,8151=>366,8152=>240,8153=>259,8154=>418,8155=>416,8157=>481,8158=>589,
-8159=>333,8160=>568,8161=>568,8162=>568,8163=>568,8164=>595,8165=>595,8166=>568,8167=>568,8168=>771,
-8169=>771,8170=>951,8171=>982,8172=>806,8173=>333,8174=>333,8175=>333,8178=>778,8179=>778,8180=>778,
-8182=>778,8183=>778,8184=>909,8185=>809,8186=>897,8187=>825,8188=>978,8189=>333,8190=>278,8192=>500,
-8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>200,8202=>100,
-8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>556,8213=>1000,8214=>437,
-8215=>556,8219=>278,8223=>500,8227=>350,8228=>278,8229=>666,8231=>278,8232=>0,8233=>0,8234=>0,
-8235=>0,8236=>0,8237=>0,8238=>0,8239=>500,8241=>1367,8242=>238,8243=>426,8244=>614,8245=>238,
-8246=>379,8247=>571,8248=>450,8251=>622,8252=>666,8253=>614,8254=>556,8255=>658,8256=>658,8257=>438,
-8258=>840,8259=>400,8260=>167,8261=>334,8262=>334,8263=>1222,8264=>944,8265=>944,8266=>556,8267=>537,
-8268=>537,8269=>537,8270=>389,8271=>333,8272=>658,8273=>389,8274=>634,8275=>568,8276=>658,8277=>793,
-8278=>515,8279=>855,8280=>722,8281=>725,8282=>224,8283=>722,8284=>604,8285=>224,8286=>224,8287=>0,
-8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>351,8305=>351,8308=>351,8309=>351,8310=>351,
-8311=>351,8312=>351,8313=>351,8314=>351,8315=>351,8316=>351,8317=>351,8318=>351,8319=>351,8320=>351,
-8321=>301,8322=>351,8323=>351,8324=>351,8325=>351,8326=>351,8327=>351,8328=>351,8329=>351,8330=>350,
-8331=>350,8332=>350,8333=>350,8334=>350,8355=>611,8356=>591,8357=>889,8358=>727,8360=>1265,8362=>1049,
-8363=>580,8368=>605,8373=>591,8400=>0,8401=>0,8402=>0,8403=>0,8406=>0,8407=>0,8411=>0,
-8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8421=>0,8422=>0,8423=>0,8424=>0,
-8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8432=>0,8448=>985,8449=>1007,
-8451=>1034,8453=>981,8454=>1042,8455=>667,8457=>919,8465=>606,8468=>881,8470=>979,8471=>784,8476=>699,
-8480=>1000,8481=>1230,8486=>766,8487=>778,8489=>315,8490=>741,8491=>729,8494=>556,8498=>588,8501=>714,
-8502=>651,8503=>557,8504=>638,8506=>871,8507=>1230,8513=>778,8514=>611,8515=>611,8516=>667,8523=>669,
-8525=>1072,8526=>482,8531=>869,8532=>869,8533=>869,8534=>869,8535=>869,8536=>869,8537=>869,8538=>869,
-8539=>869,8540=>869,8541=>869,8542=>869,8543=>869,8544=>278,8545=>556,8546=>834,8547=>945,8548=>667,
-8549=>945,8550=>1223,8551=>1501,8552=>945,8553=>667,8554=>945,8555=>1223,8556=>611,8557=>722,8558=>722,
-8559=>833,8560=>278,8561=>556,8562=>834,8563=>834,8564=>556,8565=>834,8566=>1112,8567=>1390,8568=>834,
-8569=>556,8570=>834,8571=>1112,8572=>278,8573=>556,8574=>611,8575=>889,8592=>964,8593=>964,8594=>964,
-8595=>964,8596=>964,8597=>964,8598=>964,8599=>964,8600=>964,8601=>964,8602=>964,8603=>964,8606=>964,
-8607=>964,8608=>964,8609=>964,8610=>964,8611=>964,8612=>964,8613=>964,8614=>964,8615=>964,8616=>964,
-8644=>964,8645=>964,8646=>964,8647=>964,8648=>964,8649=>964,8650=>964,8704=>722,8706=>556,8707=>667,
-8710=>729,8711=>729,8721=>856,8722=>584,8725=>869,8730=>594,8747=>608,8800=>548,8804=>584,8805=>584,
-9251=>500,9674=>541,9772=>923,9824=>626,9825=>694,9826=>595,9827=>776,9828=>626,9829=>694,9830=>595,
-9831=>776,9833=>333,9834=>556,9835=>778,9836=>778,9837=>556,9838=>556,9839=>556,10048=>1453,11799=>333,
-64256=>607,64257=>576,64258=>603,64259=>849,64260=>849,64275=>1243,64276=>1226,64277=>1233,64278=>1238,64279=>1448,
-64285=>284,64286=>305,64287=>542,64288=>653,64289=>964,64290=>888,64291=>932,64292=>845,64293=>917,64294=>933,
-64295=>850,64296=>1006,64297=>584,64298=>840,64299=>840,64300=>840,64301=>840,64302=>714,64303=>714,64304=>714,
-64305=>651,64306=>557,64307=>638,64308=>682,64309=>348,64310=>443,64312=>670,64313=>354,64314=>590,64315=>595,
-64316=>667,64318=>704,64320=>429,64321=>670,64323=>661,64324=>660,64326=>671,64327=>672,64328=>600,64329=>840,
-64330=>756,64331=>212,64332=>591,64333=>550,64334=>568,64335=>714,65533=>788);
-$enc='';
+$dw=700;
$diff='';
+$originalsize=359272;
+$enc='';
$file='freesansb.z';
$ctg='freesansb.ctg.z';
-$originalsize=283180;
-?>
\ No newline at end of file
+$desc=array('Flags'=>32,'FontBBox'=>'[-968 -460 1556 1072]','ItalicAngle'=>0,'Ascent'=>1000,'Descent'=>-300,'Leading'=>90,'CapHeight'=>729,'XHeight'=>540,'StemV'=>123,'StemH'=>53,'AvgWidth'=>478,'MaxWidth'=>1501,'MissingWidth'=>700);
+$cw=array(0=>0,1=>700,2=>700,3=>700,4=>700,5=>700,6=>700,7=>700,8=>0,9=>600,10=>700,11=>700,12=>700,13=>600,14=>700,15=>700,16=>700,17=>700,18=>700,19=>700,20=>700,21=>700,22=>700,23=>700,24=>700,25=>700,26=>700,27=>700,28=>700,29=>0,30=>700,31=>700,32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333,60=>584,61=>584,62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>333,92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556,100=>611,101=>556,102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278,109=>889,110=>611,111=>611,112=>611,113=>611,114=>389,115=>556,116=>333,117=>611,118=>556,119=>778,120=>556,121=>556,122=>500,123=>389,124=>280,125=>389,126=>584,127=>700,128=>722,129=>722,130=>722,131=>667,132=>722,133=>778,134=>722,135=>556,136=>556,137=>556,138=>556,139=>556,140=>556,141=>556,142=>556,143=>556,144=>556,145=>556,146=>278,147=>278,148=>278,149=>278,150=>611,151=>611,152=>611,153=>611,154=>611,155=>611,156=>611,157=>611,158=>611,159=>611,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>280,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584,178=>351,179=>351,180=>333,181=>611,182=>556,183=>278,184=>333,185=>300,186=>365,187=>556,188=>869,189=>869,190=>869,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>889,231=>556,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>611,241=>611,242=>611,243=>611,244=>611,245=>611,246=>611,247=>584,248=>611,249=>611,250=>611,251=>611,252=>611,253=>556,254=>611,255=>556,256=>722,257=>556,258=>722,259=>556,260=>722,261=>556,262=>722,263=>556,264=>722,265=>556,266=>722,267=>556,268=>722,269=>556,270=>722,271=>723,272=>722,273=>611,274=>667,275=>556,276=>667,277=>556,278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>611,286=>778,287=>611,288=>778,289=>611,290=>778,291=>611,292=>722,293=>611,294=>722,295=>611,296=>278,297=>278,298=>278,299=>278,300=>278,301=>278,302=>278,303=>278,304=>278,305=>278,306=>593,307=>486,308=>556,309=>278,310=>722,311=>556,312=>559,313=>611,314=>278,315=>611,316=>278,317=>611,318=>422,319=>611,320=>556,321=>611,322=>278,323=>722,324=>611,325=>722,326=>611,327=>722,328=>611,329=>701,330=>720,331=>611,332=>778,333=>611,334=>778,335=>611,336=>778,337=>611,338=>1000,339=>953,340=>722,341=>389,342=>722,343=>389,344=>722,345=>389,346=>667,347=>556,348=>667,349=>556,350=>667,351=>556,352=>667,353=>556,354=>611,355=>333,356=>611,357=>414,358=>611,359=>333,360=>722,361=>611,362=>722,363=>611,364=>722,365=>611,366=>722,367=>611,368=>722,369=>611,370=>722,371=>611,372=>944,373=>778,374=>667,375=>556,376=>667,377=>611,378=>500,379=>611,380=>500,381=>611,382=>500,383=>333,384=>611,385=>963,386=>704,387=>611,388=>687,389=>611,390=>722,391=>752,392=>562,393=>722,394=>968,395=>722,396=>611,397=>609,398=>667,399=>778,400=>672,401=>611,402=>333,403=>778,404=>667,405=>940,406=>278,407=>395,408=>778,409=>556,410=>333,411=>620,412=>944,413=>722,414=>611,415=>778,416=>811,417=>673,418=>1111,419=>722,420=>914,421=>611,422=>647,423=>667,424=>556,425=>673,426=>441,427=>333,428=>742,429=>333,430=>611,431=>789,432=>676,433=>766,434=>722,435=>839,436=>620,437=>611,438=>500,439=>556,440=>556,441=>645,442=>569,443=>579,446=>611,447=>608,448=>260,449=>370,450=>584,451=>278,452=>1333,453=>1222,454=>1111,455=>1167,456=>889,457=>556,458=>1278,459=>1000,460=>889,461=>722,462=>556,463=>278,464=>278,465=>778,466=>611,467=>722,468=>611,469=>722,470=>611,471=>722,472=>611,473=>722,474=>611,475=>722,476=>611,477=>556,478=>722,479=>556,480=>722,481=>556,482=>1000,483=>889,484=>778,485=>611,486=>778,487=>611,488=>722,489=>556,490=>778,491=>611,492=>778,493=>611,494=>556,495=>556,496=>278,497=>1333,498=>1222,499=>1111,500=>778,501=>611,503=>630,504=>722,505=>611,506=>722,507=>556,508=>1000,509=>889,510=>778,511=>611,512=>722,513=>556,514=>722,515=>556,516=>667,517=>556,518=>667,519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>611,526=>778,527=>611,528=>722,529=>389,530=>722,531=>389,532=>722,533=>611,534=>722,535=>611,536=>667,537=>556,538=>611,539=>333,540=>569,541=>486,542=>722,543=>611,548=>645,549=>500,550=>722,551=>556,552=>667,553=>556,554=>778,555=>611,556=>778,557=>611,558=>778,559=>611,560=>778,561=>611,562=>667,563=>556,567=>278,592=>556,593=>677,594=>678,595=>611,596=>556,597=>600,598=>625,599=>625,600=>556,601=>556,602=>834,603=>571,604=>557,605=>820,606=>570,607=>316,608=>619,609=>611,610=>566,611=>556,612=>656,613=>619,614=>611,615=>611,616=>300,617=>344,618=>300,619=>473,620=>527,621=>298,622=>778,623=>893,624=>889,625=>889,626=>628,627=>626,628=>615,629=>606,630=>878,631=>839,632=>738,633=>411,634=>406,635=>426,636=>396,637=>396,638=>455,639=>475,640=>620,641=>620,642=>610,643=>333,644=>331,645=>333,646=>553,647=>328,648=>333,649=>643,650=>726,651=>639,652=>556,653=>778,654=>556,655=>556,656=>551,657=>591,658=>556,659=>642,660=>611,661=>611,662=>611,663=>556,664=>611,665=>554,666=>590,667=>616,668=>603,669=>552,670=>588,671=>454,672=>626,673=>611,674=>611,675=>1004,676=>1018,677=>1097,678=>804,679=>593,680=>840,681=>866,682=>752,683=>668,684=>525,685=>486,686=>659,687=>679,688=>377,689=>377,690=>202,691=>272,692=>272,693=>299,694=>395,695=>534,696=>364,697=>278,698=>454,699=>278,700=>278,701=>278,702=>333,703=>333,704=>333,705=>333,706=>333,707=>333,708=>333,709=>333,710=>333,711=>333,712=>333,713=>333,714=>333,715=>333,716=>272,717=>333,718=>333,719=>333,720=>333,721=>333,722=>333,723=>333,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,731=>333,732=>333,733=>333,734=>333,735=>510,736=>372,737=>210,738=>363,739=>373,740=>334,741=>526,742=>526,743=>526,744=>526,745=>526,746=>519,747=>519,748=>333,749=>333,750=>333,751=>333,752=>333,753=>333,754=>333,755=>333,756=>333,757=>437,758=>437,759=>400,760=>333,761=>200,762=>200,763=>200,764=>200,765=>333,766=>333,767=>333,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,878=>0,879=>0,884=>379,885=>379,890=>333,894=>333,900=>363,901=>333,902=>761,903=>333,904=>864,905=>903,906=>454,908=>796,910=>991,911=>867,912=>315,913=>696,914=>640,915=>585,916=>726,917=>589,918=>581,919=>654,920=>783,921=>215,922=>648,923=>710,924=>829,925=>683,926=>645,927=>738,928=>726,929=>645,931=>673,932=>674,933=>771,934=>773,935=>780,936=>778,937=>766,938=>263,939=>771,940=>660,941=>541,942=>560,943=>356,944=>568,945=>632,946=>560,947=>591,948=>609,949=>541,950=>488,951=>608,952=>562,953=>315,954=>533,955=>603,956=>582,957=>586,958=>513,959=>611,960=>658,961=>595,962=>590,963=>657,964=>557,965=>568,966=>768,967=>632,968=>708,969=>778,970=>315,971=>568,972=>599,973=>568,974=>778,977=>580,978=>742,979=>857,980=>620,981=>706,982=>740,983=>556,1008=>556,1009=>566,1012=>778,1013=>328,1024=>670,1025=>670,1026=>800,1027=>611,1028=>714,1029=>667,1030=>314,1031=>300,1032=>576,1033=>1100,1034=>1114,1035=>806,1036=>740,1037=>757,1038=>711,1039=>754,1040=>707,1041=>704,1042=>704,1043=>611,1044=>900,1045=>670,1046=>1076,1047=>667,1048=>757,1049=>757,1050=>740,1051=>729,1052=>874,1053=>753,1054=>774,1055=>753,1056=>675,1057=>711,1058=>611,1059=>711,1060=>904,1061=>666,1062=>816,1063=>698,1064=>1057,1065=>1157,1066=>837,1067=>980,1068=>675,1069=>711,1070=>1093,1071=>708,1072=>552,1073=>593,1074=>554,1075=>423,1076=>685,1077=>573,1078=>782,1079=>557,1080=>615,1081=>615,1082=>559,1083=>568,1084=>666,1085=>603,1086=>606,1087=>603,1088=>612,1089=>556,1090=>440,1091=>549,1092=>964,1093=>539,1094=>652,1095=>554,1096=>886,1097=>968,1098=>699,1099=>778,1100=>568,1101=>556,1102=>848,1103=>586,1104=>573,1105=>573,1106=>606,1107=>423,1108=>556,1109=>555,1110=>260,1111=>278,1112=>270,1113=>898,1114=>898,1115=>626,1116=>559,1117=>615,1118=>549,1119=>604,1120=>986,1121=>736,1136=>832,1137=>748,1138=>774,1139=>606,1148=>942,1149=>736,1150=>986,1151=>736,1154=>449,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>832,1163=>675,1164=>678,1165=>611,1166=>675,1167=>612,1168=>636,1169=>440,1170=>622,1171=>449,1172=>647,1173=>574,1174=>1096,1175=>803,1176=>683,1177=>555,1178=>759,1179=>573,1180=>730,1181=>554,1182=>737,1183=>555,1184=>892,1185=>680,1186=>825,1187=>653,1188=>999,1189=>763,1190=>1105,1191=>925,1192=>963,1193=>766,1194=>722,1195=>558,1196=>614,1197=>438,1198=>643,1199=>573,1200=>643,1201=>603,1202=>670,1203=>548,1204=>952,1205=>738,1206=>781,1207=>615,1208=>698,1209=>588,1210=>687,1211=>588,1212=>993,1213=>761,1214=>993,1215=>761,1216=>314,1217=>1076,1218=>809,1219=>700,1220=>543,1221=>793,1222=>634,1223=>753,1224=>603,1225=>819,1226=>663,1227=>706,1228=>588,1229=>935,1230=>720,1231=>314,1232=>707,1233=>564,1234=>707,1235=>566,1236=>1004,1237=>898,1238=>670,1239=>573,1240=>722,1241=>573,1242=>722,1243=>573,1244=>1076,1245=>782,1246=>667,1247=>557,1248=>556,1249=>552,1250=>757,1251=>615,1252=>757,1253=>615,1254=>778,1255=>611,1256=>774,1257=>606,1258=>774,1259=>606,1260=>711,1261=>556,1262=>700,1263=>544,1264=>701,1265=>539,1266=>700,1267=>537,1268=>698,1269=>554,1270=>611,1271=>432,1272=>980,1273=>778,1296=>672,1297=>546,1298=>729,1299=>577,1306=>778,1307=>612,1308=>944,1309=>776,1310=>730,1311=>554,1329=>730,1330=>713,1331=>765,1332=>752,1333=>708,1334=>801,1335=>496,1336=>713,1337=>855,1338=>686,1339=>727,1340=>420,1341=>897,1342=>841,1343=>708,1344=>660,1345=>666,1346=>747,1347=>698,1348=>757,1349=>630,1350=>747,1351=>651,1352=>743,1353=>657,1354=>728,1355=>799,1356=>752,1357=>743,1358=>768,1359=>691,1360=>713,1361=>640,1362=>425,1363=>818,1364=>672,1365=>805,1366=>754,1369=>333,1370=>222,1371=>250,1372=>333,1373=>333,1374=>352,1375=>362,1377=>873,1378=>613,1379=>634,1380=>636,1381=>593,1382=>639,1383=>417,1384=>613,1385=>658,1386=>711,1387=>609,1388=>318,1389=>836,1390=>670,1391=>613,1392=>607,1393=>611,1394=>626,1395=>619,1396=>618,1397=>324,1398=>613,1399=>540,1400=>591,1401=>392,1402=>873,1403=>577,1404=>603,1405=>600,1406=>626,1407=>951,1408=>613,1409=>612,1410=>348,1411=>951,1412=>616,1413=>606,1414=>763,1415=>626,1417=>333,1418=>398,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0,1470=>516,1471=>0,1472=>297,1473=>0,1474=>0,1475=>333,1476=>0,1488=>714,1489=>651,1490=>557,1491=>638,1492=>682,1493=>297,1494=>443,1495=>682,1496=>670,1497=>284,1498=>590,1499=>595,1500=>667,1501=>683,1502=>704,1503=>297,1504=>429,1505=>670,1506=>653,1507=>661,1508=>660,1509=>616,1510=>671,1511=>672,1512=>600,1513=>840,1514=>756,1520=>554,1521=>550,1522=>542,1523=>238,1524=>474,2561=>0,2562=>122,2563=>313,2565=>897,2566=>1157,2567=>930,2568=>966,2569=>762,2570=>762,2575=>729,2576=>904,2579=>773,2580=>903,2581=>726,2582=>672,2583=>741,2584=>790,2585=>702,2586=>723,2587=>693,2588=>688,2589=>673,2590=>683,2591=>686,2592=>711,2593=>680,2594=>693,2595=>729,2596=>691,2597=>694,2598=>699,2599=>666,2600=>669,2602=>683,2603=>690,2604=>660,2605=>659,2606=>692,2607=>772,2608=>673,2610=>731,2611=>814,2613=>663,2614=>704,2616=>702,2617=>650,2620=>0,2622=>307,2623=>304,2624=>306,2625=>7,2626=>7,2631=>7,2632=>8,2635=>6,2636=>5,2637=>0,2641=>0,2649=>684,2650=>813,2651=>715,2652=>695,2654=>709,2662=>697,2663=>630,2664=>696,2665=>690,2666=>646,2667=>636,2668=>571,2669=>682,2670=>718,2671=>730,2672=>9,2673=>162,2674=>722,2675=>760,2676=>1110,2677=>0,4256=>616,4257=>645,4258=>664,4259=>839,4260=>627,4261=>630,4262=>827,4263=>928,4264=>639,4265=>630,4266=>951,4267=>606,4268=>608,4269=>835,4270=>630,4271=>610,4272=>804,4273=>615,4274=>823,4275=>747,4276=>870,4277=>627,4278=>840,4279=>627,4280=>665,4281=>610,4282=>799,4283=>598,4284=>665,4285=>664,4286=>608,4287=>886,4288=>629,4304=>463,4305=>516,4306=>564,4307=>706,4308=>459,4309=>476,4310=>623,4311=>711,4312=>494,4313=>476,4314=>894,4315=>500,4316=>500,4317=>712,4318=>493,4319=>503,4320=>712,4321=>503,4322=>710,4323=>670,4324=>707,4325=>459,4326=>691,4327=>465,4328=>492,4329=>480,4330=>656,4331=>500,4332=>492,4333=>524,4334=>500,4335=>688,4336=>510,4337=>739,4338=>450,4339=>479,4340=>502,4341=>501,4345=>564,4347=>515,4348=>449,5024=>714,5025=>731,5026=>624,5027=>908,5028=>1040,5029=>271,5030=>654,5031=>863,5032=>604,5033=>791,5034=>714,5035=>522,5036=>661,5037=>926,5038=>615,5039=>811,5040=>538,5041=>633,5042=>979,5043=>964,5044=>635,5045=>607,5046=>753,5047=>831,5048=>566,5049=>977,5050=>958,5051=>710,5052=>616,5053=>834,5054=>790,5055=>612,5056=>766,5057=>857,5058=>627,5059=>649,5060=>607,5061=>1127,5062=>680,5063=>920,5064=>928,5065=>1333,5066=>920,5067=>705,5068=>695,5069=>1074,5070=>672,5071=>672,5072=>667,5073=>819,5074=>679,5075=>575,5076=>903,5077=>652,5078=>776,5079=>643,5080=>670,5081=>660,5082=>648,5083=>934,5084=>909,5085=>613,5086=>615,5087=>735,5088=>900,5089=>1024,5090=>647,5091=>760,5092=>829,5093=>824,5094=>756,5095=>625,5096=>981,5097=>1014,5098=>1040,5099=>790,5100=>926,5101=>686,5102=>656,5103=>920,5104=>741,5105=>890,5106=>626,5107=>974,5108=>699,7680=>722,7681=>556,7682=>722,7683=>611,7684=>722,7685=>611,7686=>722,7687=>611,7688=>722,7689=>556,7690=>722,7691=>611,7692=>722,7693=>611,7694=>722,7695=>611,7696=>722,7697=>611,7698=>722,7699=>611,7700=>667,7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,7707=>556,7708=>667,7709=>556,7710=>611,7711=>333,7712=>778,7713=>611,7714=>722,7715=>611,7716=>722,7717=>611,7718=>722,7719=>611,7720=>722,7721=>611,7722=>722,7723=>611,7724=>278,7725=>278,7726=>278,7727=>278,7728=>722,7729=>556,7730=>722,7731=>556,7732=>722,7733=>556,7734=>611,7735=>278,7736=>611,7737=>278,7738=>611,7739=>278,7740=>611,7741=>278,7742=>833,7743=>889,7744=>833,7745=>889,7746=>833,7747=>889,7748=>722,7749=>611,7750=>722,7751=>611,7752=>722,7753=>611,7754=>722,7755=>611,7756=>778,7757=>611,7758=>778,7759=>611,7760=>778,7761=>611,7762=>778,7763=>611,7764=>667,7765=>611,7766=>667,7767=>611,7768=>722,7769=>389,7770=>722,7771=>389,7772=>722,7773=>389,7774=>722,7775=>389,7776=>667,7777=>556,7778=>667,7779=>556,7780=>667,7781=>556,7782=>667,7783=>556,7784=>667,7785=>556,7786=>611,7787=>333,7788=>611,7789=>333,7790=>611,7791=>333,7792=>611,7793=>333,7794=>722,7795=>611,7796=>722,7797=>611,7798=>722,7799=>611,7800=>722,7801=>611,7802=>722,7803=>611,7804=>667,7805=>556,7806=>667,7807=>556,7808=>944,7809=>778,7810=>944,7811=>778,7812=>944,7813=>778,7814=>944,7815=>778,7816=>944,7817=>778,7818=>667,7819=>556,7820=>667,7821=>556,7822=>667,7823=>556,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,7830=>611,7831=>333,7832=>778,7833=>556,7834=>555,7835=>333,7840=>722,7841=>556,7842=>722,7843=>556,7844=>722,7845=>556,7846=>722,7847=>556,7848=>667,7849=>556,7850=>722,7851=>556,7852=>722,7853=>556,7854=>722,7855=>556,7856=>722,7857=>556,7858=>722,7859=>556,7860=>722,7861=>556,7862=>722,7863=>556,7864=>667,7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,7871=>556,7872=>667,7873=>556,7874=>667,7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,7881=>278,7882=>278,7883=>278,7884=>778,7885=>611,7886=>778,7887=>611,7888=>778,7889=>611,7890=>778,7891=>611,7892=>778,7893=>611,7894=>778,7895=>611,7896=>778,7897=>611,7898=>811,7899=>673,7900=>811,7901=>673,7902=>811,7903=>673,7904=>811,7905=>673,7906=>811,7907=>673,7908=>722,7909=>611,7910=>722,7911=>611,7912=>789,7913=>676,7914=>789,7915=>676,7916=>789,7917=>676,7918=>789,7919=>676,7920=>789,7921=>676,7922=>667,7923=>556,7924=>667,7925=>556,7926=>667,7927=>556,7928=>667,7929=>556,7936=>632,7937=>632,7938=>632,7939=>632,7940=>632,7941=>632,7942=>632,7943=>632,7944=>696,7945=>696,7946=>865,7947=>849,7948=>796,7949=>807,7950=>730,7951=>750,7952=>541,7953=>541,7954=>541,7955=>541,7956=>541,7957=>541,7960=>758,7961=>760,7962=>957,7963=>943,7964=>939,7965=>945,7968=>608,7969=>608,7970=>608,7971=>608,7972=>608,7973=>608,7974=>608,7975=>608,7976=>823,7977=>831,7978=>1026,7979=>1017,7980=>1002,7981=>1024,7982=>908,7983=>909,7984=>315,7985=>315,7986=>373,7987=>375,7988=>378,7989=>374,7990=>370,7991=>384,7992=>378,7993=>383,7994=>596,7995=>579,7996=>572,7997=>576,7998=>474,7999=>459,8000=>610,8001=>610,8002=>610,8003=>610,8004=>610,8005=>610,8008=>800,8009=>871,8010=>1084,8011=>1079,8012=>975,8013=>973,8016=>568,8017=>568,8018=>568,8019=>568,8020=>568,8021=>568,8022=>568,8023=>568,8025=>906,8027=>1080,8029=>1115,8031=>977,8032=>778,8033=>778,8034=>778,8035=>778,8036=>778,8037=>778,8038=>778,8039=>778,8040=>837,8041=>860,8042=>1062,8043=>1072,8044=>962,8045=>985,8046=>922,8047=>959,8048=>632,8049=>632,8050=>541,8051=>541,8052=>608,8053=>608,8054=>315,8055=>315,8056=>610,8057=>610,8058=>568,8059=>568,8060=>778,8061=>778,8064=>632,8065=>632,8066=>632,8067=>632,8068=>632,8069=>632,8070=>632,8071=>632,8072=>909,8073=>906,8074=>1061,8075=>1035,8076=>984,8077=>994,8078=>910,8079=>916,8080=>608,8081=>608,8082=>608,8083=>608,8084=>608,8085=>608,8086=>608,8087=>608,8088=>1006,8089=>1015,8090=>1204,8091=>1207,8092=>1188,8093=>1209,8094=>1096,8095=>1105,8096=>778,8097=>778,8098=>778,8099=>778,8100=>778,8101=>778,8102=>778,8103=>778,8104=>1026,8105=>1048,8106=>1251,8107=>1260,8108=>1150,8109=>1177,8110=>1106,8111=>1142,8112=>632,8113=>632,8114=>632,8115=>632,8116=>660,8118=>632,8119=>632,8120=>696,8121=>696,8122=>696,8123=>696,8124=>907,8125=>278,8126=>346,8127=>278,8128=>278,8129=>333,8130=>608,8131=>608,8132=>560,8134=>608,8135=>608,8136=>776,8137=>793,8138=>847,8139=>854,8140=>848,8141=>492,8142=>489,8143=>394,8144=>335,8145=>354,8146=>367,8147=>368,8150=>353,8151=>366,8152=>240,8153=>259,8154=>418,8155=>416,8157=>481,8158=>589,8159=>333,8160=>568,8161=>568,8162=>568,8163=>568,8164=>595,8165=>595,8166=>568,8167=>568,8168=>771,8169=>771,8170=>951,8171=>982,8172=>806,8173=>333,8174=>333,8175=>333,8178=>778,8179=>778,8180=>778,8182=>778,8183=>778,8184=>909,8185=>809,8186=>897,8187=>825,8188=>978,8189=>333,8190=>278,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>556,8211=>556,8212=>1000,8213=>1000,8214=>437,8215=>556,8216=>278,8217=>278,8218=>278,8219=>278,8220=>500,8221=>500,8222=>500,8223=>500,8224=>556,8225=>556,8226=>350,8227=>350,8228=>278,8229=>666,8230=>1000,8231=>278,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>500,8240=>1000,8241=>1367,8242=>238,8243=>426,8244=>614,8245=>238,8246=>379,8247=>571,8248=>450,8249=>333,8250=>333,8251=>622,8252=>666,8253=>614,8254=>556,8255=>658,8256=>658,8257=>438,8258=>840,8259=>400,8260=>167,8261=>334,8262=>334,8263=>1222,8264=>944,8265=>944,8266=>556,8267=>537,8268=>537,8269=>537,8270=>389,8271=>333,8272=>658,8273=>389,8274=>634,8275=>568,8276=>658,8277=>793,8278=>515,8279=>855,8280=>722,8281=>725,8282=>224,8283=>722,8284=>604,8285=>224,8286=>224,8287=>0,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>351,8305=>200,8308=>351,8309=>351,8310=>351,8311=>351,8312=>351,8313=>351,8314=>351,8315=>351,8316=>351,8317=>216,8318=>218,8319=>391,8320=>351,8321=>301,8322=>351,8323=>351,8324=>351,8325=>351,8326=>351,8327=>351,8328=>351,8329=>351,8330=>350,8331=>350,8332=>350,8333=>216,8334=>216,8336=>363,8337=>366,8338=>394,8339=>360,8340=>355,8355=>611,8356=>591,8357=>889,8358=>727,8360=>1265,8362=>1049,8363=>580,8364=>640,8368=>605,8373=>591,8376=>612,8400=>0,8401=>0,8402=>0,8403=>0,8406=>0,8407=>0,8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8421=>0,8422=>0,8423=>0,8424=>0,8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8432=>0,8448=>945,8449=>968,8451=>1034,8453=>981,8454=>1002,8455=>667,8456=>722,8457=>919,8462=>611,8465=>606,8467=>608,8468=>881,8470=>999,8471=>860,8476=>699,8480=>1000,8481=>1370,8482=>1000,8486=>766,8487=>778,8489=>315,8490=>741,8491=>729,8494=>556,8498=>588,8501=>714,8502=>651,8503=>557,8504=>638,8506=>871,8507=>1431,8513=>778,8514=>611,8515=>611,8516=>667,8523=>669,8525=>1242,8526=>482,8531=>869,8532=>869,8533=>869,8534=>869,8535=>869,8536=>869,8537=>869,8538=>869,8539=>869,8540=>869,8541=>869,8542=>869,8543=>869,8544=>278,8545=>556,8546=>834,8547=>945,8548=>667,8549=>945,8550=>1223,8551=>1501,8552=>945,8553=>667,8554=>945,8555=>1223,8556=>611,8557=>722,8558=>722,8559=>833,8560=>278,8561=>556,8562=>834,8563=>834,8564=>556,8565=>834,8566=>1112,8567=>1390,8568=>834,8569=>556,8570=>834,8571=>1112,8572=>278,8573=>556,8574=>611,8575=>889,8592=>964,8593=>964,8594=>964,8595=>964,8596=>964,8597=>964,8598=>964,8599=>964,8600=>964,8601=>964,8602=>964,8603=>964,8606=>964,8607=>964,8608=>964,8609=>964,8610=>964,8611=>964,8612=>964,8613=>964,8614=>964,8615=>964,8616=>964,8644=>964,8645=>964,8646=>964,8647=>964,8648=>964,8649=>964,8650=>964,8704=>722,8706=>556,8707=>667,8710=>729,8711=>729,8721=>856,8722=>584,8725=>869,8730=>594,8747=>608,8800=>548,8804=>584,8805=>584,9251=>500,9674=>541,9675=>860,9711=>1020,9772=>923,9824=>626,9825=>694,9826=>595,9827=>776,9828=>626,9829=>694,9830=>595,9831=>776,9833=>333,9834=>556,9835=>778,9836=>778,9837=>556,9838=>556,9839=>556,10048=>1453,11568=>352,11569=>872,11570=>872,11571=>720,11572=>720,11573=>720,11574=>664,11575=>752,11576=>752,11577=>720,11578=>720,11579=>596,11580=>698,11581=>742,11582=>574,11583=>742,11584=>872,11585=>872,11586=>312,11587=>720,11588=>696,11589=>720,11590=>584,11591=>742,11592=>796,11593=>613,11594=>672,11595=>888,11596=>836,11597=>524,11598=>720,11599=>300,11600=>836,11601=>300,11602=>718,11603=>388,11604=>872,11605=>872,11606=>696,11607=>308,11608=>640,11609=>872,11610=>872,11611=>762,11612=>424,11613=>720,11614=>762,11615=>720,11616=>709,11617=>720,11618=>541,11619=>828,11620=>454,11621=>828,11631=>482,11799=>333,42888=>333,42889=>276,42890=>342,42891=>258,42892=>258,64256=>607,64257=>576,64258=>603,64259=>849,64260=>849,64261=>627,64275=>1243,64276=>1226,64277=>1233,64278=>1238,64279=>1448,64285=>284,64286=>305,64287=>542,64288=>653,64289=>964,64290=>888,64291=>932,64292=>845,64293=>917,64294=>933,64295=>850,64296=>1006,64297=>584,64298=>840,64299=>840,64300=>840,64301=>840,64302=>714,64303=>714,64304=>714,64305=>651,64306=>557,64307=>638,64308=>682,64309=>348,64310=>443,64312=>670,64313=>354,64314=>590,64315=>595,64316=>667,64318=>704,64320=>429,64321=>670,64323=>661,64324=>660,64326=>671,64327=>672,64328=>600,64329=>840,64330=>756,64331=>212,64332=>591,64333=>550,64334=>568,64335=>714,65533=>900,65535=>700);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/freesansb.z b/lib/tcpdf/fonts/freesansb.z
index 800fed290e7..302a3305dae 100644
Binary files a/lib/tcpdf/fonts/freesansb.z and b/lib/tcpdf/fonts/freesansb.z differ
diff --git a/lib/tcpdf/fonts/freesansbi.ctg.z b/lib/tcpdf/fonts/freesansbi.ctg.z
index 9e8a3c725a7..d8967942a68 100644
Binary files a/lib/tcpdf/fonts/freesansbi.ctg.z and b/lib/tcpdf/fonts/freesansbi.ctg.z differ
diff --git a/lib/tcpdf/fonts/freesansbi.php b/lib/tcpdf/fonts/freesansbi.php
index 783eb3cd394..a924c9bc9a2 100644
--- a/lib/tcpdf/fonts/freesansbi.php
+++ b/lib/tcpdf/fonts/freesansbi.php
@@ -1,225 +1,15 @@
1000,'Descent'=>-300,'CapHeight'=>22,'Flags'=>96,'FontBBox'=>'[-769 -1175 1591 1639]','ItalicAngle'=>-12,'StemV'=>120,'MissingWidth'=>600);
$up=-145;
$ut=69;
-$dw=600;
-$cw=array(
-32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238,40=>333,41=>333,
-42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,
-52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333,60=>584,61=>584,
-62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667,70=>611,71=>778,
-72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778,80=>667,81=>778,
-82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>333,
-92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556,100=>611,101=>556,
-102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278,109=>889,110=>611,111=>611,
-112=>611,113=>611,114=>389,115=>556,116=>333,117=>611,118=>556,119=>778,120=>556,121=>556,
-122=>500,123=>389,124=>280,125=>389,126=>584,8364=>640,8218=>278,402=>556,8222=>500,8230=>1000,
-8224=>556,8225=>556,710=>333,8240=>1000,352=>667,8249=>333,338=>1000,381=>611,8216=>278,8217=>278,
-8220=>500,8221=>500,8226=>350,8211=>556,8212=>1000,732=>333,8482=>1000,353=>556,8250=>333,339=>944,
-382=>500,376=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>280,167=>556,
-168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584,
-178=>350,179=>350,180=>333,181=>667,182=>556,183=>278,184=>333,185=>248,186=>365,187=>556,
-188=>869,189=>869,190=>869,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,
-198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,
-208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,
-218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,
-228=>556,229=>556,230=>889,231=>556,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,
-238=>278,239=>278,240=>611,241=>611,242=>611,243=>611,244=>611,245=>611,246=>611,247=>584,
-248=>611,249=>611,250=>611,251=>611,252=>611,253=>556,254=>611,255=>556,256=>722,257=>556,
-258=>722,259=>556,260=>722,261=>556,262=>722,263=>556,264=>722,265=>556,266=>722,267=>556,
-268=>722,269=>556,270=>722,271=>722,272=>722,273=>611,274=>667,275=>556,276=>667,277=>556,
-278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>611,286=>778,287=>611,
-288=>778,289=>611,290=>778,291=>611,292=>722,293=>611,294=>722,295=>611,296=>278,297=>278,
-298=>278,299=>278,300=>278,301=>278,302=>278,303=>268,304=>278,305=>278,306=>796,307=>487,
-308=>556,309=>278,310=>722,311=>556,312=>529,313=>611,314=>278,315=>611,316=>278,317=>611,
-318=>384,319=>611,320=>556,321=>611,322=>278,323=>722,324=>611,325=>722,326=>611,327=>722,
-328=>611,329=>611,330=>722,331=>611,332=>778,333=>611,334=>778,335=>611,336=>778,337=>611,
-340=>722,341=>389,342=>722,343=>389,344=>722,345=>389,346=>667,347=>556,348=>667,349=>556,
-350=>667,351=>556,354=>611,355=>333,356=>611,357=>404,358=>611,359=>404,360=>722,361=>611,
-362=>722,363=>611,364=>722,365=>611,366=>722,367=>611,368=>722,369=>611,370=>722,371=>611,
-372=>944,373=>778,374=>667,375=>556,377=>611,378=>500,379=>611,380=>500,383=>333,384=>611,
-385=>963,386=>722,387=>611,388=>687,389=>611,390=>722,391=>752,392=>562,393=>722,394=>968,
-395=>722,396=>611,397=>609,398=>667,399=>778,400=>672,401=>611,403=>778,404=>667,405=>889,
-406=>278,407=>395,408=>778,409=>556,410=>333,411=>620,412=>889,413=>722,414=>611,415=>778,
-416=>778,417=>611,418=>1111,419=>722,420=>914,421=>611,422=>647,423=>667,424=>556,425=>688,
-426=>441,427=>333,428=>742,429=>333,430=>611,431=>722,432=>611,433=>780,434=>722,435=>667,
-436=>706,437=>611,438=>500,439=>556,440=>556,441=>645,442=>569,443=>579,446=>611,447=>608,
-448=>260,449=>370,450=>584,451=>278,452=>1333,453=>1222,454=>1111,455=>1167,456=>889,457=>556,
-458=>1278,459=>1000,460=>889,461=>722,462=>556,463=>278,464=>278,465=>778,466=>611,467=>722,
-468=>611,469=>722,470=>611,471=>722,472=>611,473=>722,474=>611,475=>722,476=>611,477=>556,
-478=>722,479=>556,480=>722,481=>556,482=>1000,483=>889,484=>811,485=>641,486=>778,487=>611,
-488=>722,489=>556,490=>778,491=>611,492=>778,493=>611,494=>556,495=>556,496=>278,497=>1333,
-498=>1222,499=>1111,500=>778,501=>611,503=>630,504=>722,505=>611,506=>722,507=>556,508=>1000,
-509=>889,510=>778,511=>611,512=>722,513=>556,514=>722,515=>556,516=>667,517=>556,518=>667,
-519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>611,526=>778,527=>611,528=>722,
-529=>389,530=>722,531=>389,532=>722,533=>611,534=>722,535=>611,536=>667,537=>556,538=>611,
-539=>333,540=>569,541=>486,542=>722,543=>611,548=>645,549=>500,550=>722,551=>556,552=>667,
-553=>556,554=>778,555=>611,556=>778,557=>611,558=>778,559=>611,560=>778,561=>611,562=>667,
-563=>556,567=>278,592=>556,593=>611,594=>611,595=>611,596=>556,597=>600,598=>611,599=>611,
-600=>556,601=>556,602=>834,603=>570,604=>546,605=>820,606=>570,607=>278,608=>611,609=>611,
-610=>556,611=>556,612=>656,613=>619,614=>611,615=>611,616=>278,617=>344,618=>278,619=>473,
-620=>527,621=>298,622=>778,623=>889,624=>889,625=>889,626=>611,627=>611,628=>615,629=>590,
-630=>878,631=>822,632=>778,633=>389,634=>389,635=>389,636=>389,637=>389,638=>455,639=>455,
-640=>620,641=>586,642=>556,643=>333,644=>278,645=>333,646=>544,647=>328,648=>333,649=>623,
-650=>726,651=>639,652=>556,653=>778,654=>556,655=>556,656=>500,657=>571,658=>556,659=>642,
-660=>611,661=>611,662=>611,664=>611,665=>572,666=>570,667=>616,668=>603,669=>552,670=>556,
-671=>454,672=>611,673=>611,674=>611,684=>520,688=>500,689=>500,690=>167,691=>333,692=>333,
-693=>333,694=>348,695=>500,696=>345,697=>278,698=>454,699=>278,700=>333,701=>278,702=>333,
-703=>333,704=>333,705=>333,706=>333,707=>333,708=>333,709=>333,711=>333,712=>333,713=>333,
-714=>333,715=>333,716=>272,717=>333,718=>333,719=>333,720=>333,721=>333,722=>333,723=>333,
-724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,731=>333,733=>333,734=>333,
-735=>510,736=>333,737=>333,738=>333,739=>357,740=>334,741=>526,742=>526,743=>526,744=>526,
-745=>526,746=>519,747=>519,748=>333,749=>333,750=>333,751=>333,752=>333,753=>333,754=>333,
-755=>333,756=>333,757=>437,758=>437,759=>400,760=>333,761=>200,762=>200,763=>200,764=>200,
-765=>332,766=>333,767=>333,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,
-775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,
-785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,
-795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,
-805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,
-815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,
-825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,
-835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,
-845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,
-855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,
-865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0,
-875=>0,876=>0,877=>0,878=>0,879=>0,884=>208,885=>247,890=>364,894=>333,900=>239,
-901=>446,902=>688,903=>333,904=>903,905=>962,906=>448,908=>904,910=>991,911=>932,912=>346,
-913=>764,914=>688,915=>642,916=>744,917=>710,918=>688,919=>743,920=>810,921=>296,922=>744,
-923=>744,924=>860,925=>714,926=>690,927=>822,928=>781,929=>698,931=>688,932=>688,933=>744,
-934=>777,935=>783,936=>805,937=>780,938=>296,939=>744,940=>640,941=>530,942=>597,943=>339,
-944=>575,945=>656,946=>576,947=>591,948=>620,949=>570,950=>522,951=>586,952=>586,953=>346,
-954=>576,955=>620,956=>667,957=>564,958=>530,959=>610,960=>721,961=>626,962=>595,963=>676,
-964=>592,965=>575,966=>801,967=>632,968=>722,969=>800,970=>346,971=>575,972=>609,973=>604,
-974=>769,977=>580,978=>742,979=>857,980=>620,981=>778,982=>740,983=>601,1008=>556,1009=>566,
-1012=>778,1013=>328,1024=>667,1025=>667,1026=>790,1027=>617,1028=>731,1029=>667,1030=>278,1031=>278,
-1032=>556,1033=>1110,1034=>1088,1035=>790,1036=>722,1037=>757,1038=>698,1039=>722,1040=>722,1041=>722,
-1042=>722,1043=>617,1044=>876,1045=>667,1046=>1100,1047=>670,1048=>757,1049=>757,1050=>722,1051=>715,
-1052=>874,1053=>753,1054=>778,1055=>753,1056=>680,1057=>722,1058=>611,1059=>698,1060=>909,1061=>657,
-1062=>845,1063=>688,1064=>1132,1065=>1217,1066=>835,1067=>980,1068=>678,1069=>735,1070=>1142,1071=>708,
-1072=>553,1073=>591,1074=>574,1075=>429,1076=>745,1077=>572,1078=>792,1079=>554,1080=>603,1081=>603,
-1082=>559,1083=>583,1084=>664,1085=>603,1086=>588,1087=>603,1088=>605,1089=>549,1090=>440,1091=>541,
-1092=>948,1093=>539,1094=>690,1095=>564,1096=>901,1097=>987,1098=>692,1099=>806,1100=>572,1101=>546,
-1102=>893,1103=>586,1104=>572,1105=>572,1106=>616,1107=>429,1108=>549,1109=>562,1110=>281,1111=>281,
-1112=>282,1113=>888,1114=>897,1115=>606,1116=>559,1117=>603,1118=>541,1119=>603,1136=>830,1137=>761,
-1138=>778,1139=>590,1154=>456,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,
-1162=>791,1163=>662,1164=>639,1165=>581,1166=>670,1167=>649,1168=>623,1169=>450,1170=>623,1171=>472,
-1172=>674,1173=>528,1174=>1091,1175=>803,1176=>659,1177=>548,1178=>739,1179=>569,1180=>742,1181=>560,
-1182=>737,1183=>559,1184=>900,1185=>679,1186=>808,1187=>673,1188=>1004,1189=>761,1190=>1114,1191=>876,
-1192=>721,1193=>548,1194=>724,1195=>554,1196=>611,1197=>454,1198=>667,1199=>584,1200=>652,1201=>632,
-1202=>667,1203=>550,1204=>951,1205=>748,1206=>759,1207=>630,1208=>669,1209=>580,1210=>672,1211=>576,
-1212=>977,1213=>752,1214=>957,1215=>752,1216=>318,1217=>1087,1218=>792,1219=>726,1220=>530,1221=>782,
-1222=>674,1223=>749,1224=>603,1225=>823,1226=>682,1227=>675,1228=>573,1229=>941,1230=>754,1231=>310,
-1232=>704,1233=>553,1234=>711,1235=>553,1236=>1000,1237=>889,1238=>667,1239=>569,1240=>738,1241=>561,
-1242=>738,1243=>561,1244=>1086,1245=>792,1246=>670,1247=>554,1248=>558,1249=>546,1250=>753,1251=>603,
-1252=>753,1253=>603,1254=>778,1255=>588,1256=>778,1257=>590,1258=>778,1259=>590,1260=>735,1261=>546,
-1262=>698,1263=>541,1264=>698,1265=>541,1266=>698,1267=>541,1268=>686,1269=>564,1270=>617,1271=>475,
-1272=>976,1273=>806,1296=>672,1297=>546,1298=>729,1299=>577,1306=>778,1307=>611,1308=>944,1309=>776,
-1310=>750,1311=>573,1329=>730,1330=>713,1331=>765,1332=>752,1333=>708,1334=>801,1335=>496,1336=>713,
-1337=>855,1338=>686,1339=>727,1340=>420,1341=>897,1342=>841,1343=>708,1344=>660,1345=>666,1346=>747,
-1347=>698,1348=>757,1349=>630,1350=>747,1351=>651,1352=>743,1353=>657,1354=>728,1355=>799,1356=>752,
-1357=>743,1358=>768,1359=>691,1360=>713,1361=>640,1362=>425,1363=>818,1364=>672,1365=>805,1366=>754,
-1369=>333,1370=>222,1371=>250,1372=>333,1373=>333,1374=>352,1375=>362,1377=>873,1378=>613,1379=>634,
-1380=>636,1381=>593,1382=>639,1383=>417,1384=>613,1385=>658,1386=>711,1387=>609,1388=>318,1389=>836,
-1390=>670,1391=>613,1392=>607,1393=>611,1394=>626,1395=>619,1396=>618,1397=>324,1398=>613,1399=>540,
-1400=>591,1401=>392,1402=>873,1403=>577,1404=>603,1405=>600,1406=>626,1407=>951,1408=>613,1409=>612,
-1410=>348,1411=>951,1412=>616,1413=>606,1414=>763,1415=>626,1417=>333,1418=>398,1456=>0,1457=>0,
-1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,
-1469=>0,1470=>516,1471=>0,1472=>297,1473=>0,1474=>0,1475=>333,1476=>0,1488=>714,1489=>651,
-1490=>557,1491=>638,1492=>682,1493=>297,1494=>443,1495=>682,1496=>670,1497=>284,1498=>590,1499=>595,
-1500=>667,1501=>683,1502=>704,1503=>297,1504=>429,1505=>670,1506=>653,1507=>661,1508=>660,1509=>616,
-1510=>671,1511=>672,1512=>600,1513=>840,1514=>756,1520=>554,1521=>550,1522=>542,1523=>238,1524=>474,
-4256=>616,4257=>645,4258=>664,4259=>839,4260=>627,4261=>630,4262=>827,4263=>928,4264=>639,4265=>630,
-4266=>951,4267=>606,4268=>608,4269=>835,4270=>630,4271=>610,4272=>804,4273=>615,4274=>823,4275=>747,
-4276=>870,4277=>627,4278=>840,4279=>627,4280=>665,4281=>610,4282=>799,4283=>598,4284=>665,4285=>664,
-4286=>608,4287=>886,4288=>629,4304=>463,4305=>516,4306=>564,4307=>706,4308=>459,4309=>476,4310=>623,
-4311=>711,4312=>494,4313=>476,4314=>894,4315=>500,4316=>500,4317=>712,4318=>493,4319=>503,4320=>712,
-4321=>503,4322=>710,4323=>670,4324=>707,4325=>459,4326=>691,4327=>465,4328=>492,4329=>480,4330=>656,
-4331=>500,4332=>492,4333=>524,4334=>500,4335=>688,4336=>510,4337=>739,4338=>450,4339=>479,4340=>502,
-4341=>501,4345=>564,4347=>515,7680=>722,7681=>556,7682=>722,7683=>611,7684=>722,7685=>611,7686=>722,
-7687=>611,7688=>722,7689=>556,7690=>722,7691=>611,7692=>722,7693=>611,7694=>722,7695=>611,7696=>722,
-7697=>611,7698=>722,7699=>611,7700=>667,7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,
-7707=>556,7708=>667,7709=>556,7710=>611,7711=>333,7712=>778,7713=>611,7714=>722,7715=>611,7716=>722,
-7717=>611,7718=>722,7719=>611,7720=>722,7721=>611,7722=>722,7723=>611,7724=>278,7725=>278,7726=>278,
-7727=>278,7728=>722,7729=>556,7730=>722,7731=>556,7732=>722,7733=>556,7734=>611,7735=>278,7736=>611,
-7737=>278,7738=>611,7739=>278,7740=>611,7741=>278,7742=>833,7743=>889,7744=>833,7745=>889,7746=>833,
-7747=>889,7748=>722,7749=>611,7750=>722,7751=>611,7752=>722,7753=>611,7754=>722,7755=>611,7756=>778,
-7757=>611,7758=>778,7759=>611,7760=>778,7761=>611,7762=>778,7763=>611,7764=>667,7765=>611,7766=>667,
-7767=>611,7768=>722,7769=>389,7770=>722,7771=>389,7772=>722,7773=>389,7774=>722,7775=>389,7776=>667,
-7777=>556,7778=>667,7779=>556,7780=>667,7781=>556,7782=>667,7783=>556,7784=>667,7785=>556,7786=>611,
-7787=>333,7788=>611,7789=>333,7790=>611,7791=>333,7792=>611,7793=>333,7794=>722,7795=>611,7796=>722,
-7797=>611,7798=>722,7799=>611,7800=>722,7801=>611,7802=>722,7803=>611,7804=>667,7805=>556,7806=>667,
-7807=>556,7808=>944,7809=>778,7810=>944,7811=>778,7812=>944,7813=>778,7814=>944,7815=>778,7816=>944,
-7817=>778,7818=>667,7819=>556,7820=>667,7821=>556,7822=>667,7823=>556,7824=>611,7825=>500,7826=>611,
-7827=>500,7828=>611,7829=>500,7830=>611,7831=>333,7832=>778,7833=>556,7834=>555,7835=>333,7840=>722,
-7841=>556,7842=>722,7843=>556,7844=>722,7845=>556,7846=>722,7847=>556,7848=>722,7849=>556,7850=>722,
-7851=>556,7852=>722,7853=>556,7854=>722,7855=>556,7856=>722,7857=>556,7858=>722,7859=>556,7860=>722,
-7861=>556,7862=>722,7863=>556,7864=>667,7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,
-7871=>556,7872=>667,7873=>556,7874=>667,7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,
-7881=>278,7882=>278,7883=>278,7884=>778,7885=>611,7886=>778,7887=>611,7888=>778,7889=>611,7890=>778,
-7891=>611,7892=>778,7893=>611,7894=>778,7895=>611,7896=>778,7897=>611,7898=>778,7899=>611,7900=>778,
-7901=>611,7902=>778,7903=>611,7904=>778,7905=>611,7906=>778,7907=>611,7908=>722,7909=>611,7910=>722,
-7911=>611,7912=>722,7913=>611,7914=>722,7915=>611,7916=>722,7917=>611,7918=>722,7919=>611,7920=>722,
-7921=>611,7922=>667,7923=>556,7924=>667,7925=>556,7926=>667,7927=>556,7928=>667,7929=>556,7936=>656,
-7937=>656,7938=>656,7939=>656,7940=>656,7941=>656,7942=>656,7943=>656,7944=>764,7945=>764,7946=>916,
-7947=>940,7948=>908,7949=>891,7950=>844,7951=>869,7952=>570,7953=>570,7954=>570,7955=>570,7956=>570,
-7957=>570,7960=>842,7961=>836,7962=>1025,7963=>1051,7964=>1035,7965=>1049,7968=>586,7969=>586,7970=>586,
-7971=>586,7972=>586,7973=>586,7974=>586,7975=>586,7976=>891,7977=>886,7978=>1081,7979=>1108,7980=>1085,
-7981=>1096,7982=>1009,7983=>1023,7984=>346,7985=>346,7986=>346,7987=>346,7988=>346,7989=>346,7990=>346,
-7991=>346,7992=>467,7993=>476,7994=>631,7995=>661,7996=>631,7997=>633,7998=>568,7999=>571,8000=>610,
-8001=>610,8002=>610,8003=>610,8004=>610,8005=>610,8008=>945,8009=>905,8010=>1118,8011=>1121,8012=>1064,
-8013=>1062,8016=>575,8017=>575,8018=>575,8019=>575,8020=>575,8021=>575,8022=>575,8023=>575,8025=>964,
-8027=>1148,8029=>1162,8031=>1081,8032=>800,8033=>800,8034=>800,8035=>800,8036=>800,8037=>800,8038=>800,
-8039=>800,8040=>904,8041=>875,8042=>1092,8043=>1087,8044=>1003,8045=>1002,8046=>1001,8047=>1025,8048=>656,
-8049=>656,8050=>570,8051=>570,8052=>586,8053=>586,8054=>346,8055=>346,8056=>610,8057=>610,8058=>575,
-8059=>575,8060=>800,8061=>800,8064=>656,8065=>656,8066=>656,8067=>656,8068=>656,8069=>656,8070=>656,
-8071=>656,8072=>854,8073=>855,8074=>1006,8075=>1030,8076=>996,8077=>977,8078=>938,8079=>959,8080=>586,
-8081=>586,8082=>586,8083=>586,8084=>586,8085=>586,8086=>586,8087=>586,8088=>960,8089=>960,8090=>1155,
-8091=>1186,8092=>1161,8093=>1171,8094=>1087,8095=>1102,8096=>800,8097=>800,8098=>800,8099=>800,8100=>800,
-8101=>800,8102=>800,8103=>800,8104=>1005,8105=>980,8106=>1201,8107=>1192,8108=>1109,8109=>1108,8110=>1106,
-8111=>1130,8112=>656,8113=>656,8114=>656,8115=>656,8116=>640,8118=>656,8119=>656,8120=>764,8121=>764,
-8122=>764,8123=>764,8124=>854,8125=>278,8126=>201,8127=>147,8128=>278,8129=>333,8130=>586,8131=>586,
-8132=>597,8134=>586,8135=>586,8136=>911,8137=>925,8138=>941,8139=>948,8140=>826,8141=>402,8142=>403,
-8143=>147,8144=>346,8145=>346,8146=>346,8147=>346,8150=>346,8151=>346,8152=>296,8153=>296,8154=>511,
-8155=>521,8157=>434,8158=>433,8159=>333,8160=>575,8161=>575,8162=>575,8163=>575,8164=>626,8165=>626,
-8166=>575,8167=>575,8168=>744,8169=>744,8170=>901,8171=>975,8172=>837,8173=>353,8174=>351,8175=>303,
-8178=>800,8179=>800,8180=>800,8182=>800,8183=>800,8184=>979,8185=>918,8186=>936,8187=>877,8188=>895,
-8189=>333,8190=>159,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,
-8200=>278,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,
-8210=>556,8213=>1000,8214=>437,8215=>556,8219=>278,8223=>503,8227=>350,8228=>278,8229=>666,8231=>278,
-8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>500,8241=>1372,8242=>238,
-8243=>426,8244=>614,8245=>238,8246=>379,8247=>571,8248=>450,8251=>622,8252=>666,8253=>617,8254=>556,
-8255=>658,8256=>658,8257=>438,8258=>840,8259=>400,8260=>167,8261=>334,8262=>334,8263=>1222,8264=>944,
-8265=>944,8266=>556,8267=>556,8268=>537,8269=>537,8270=>389,8271=>333,8272=>658,8273=>389,8274=>634,
-8275=>568,8276=>658,8277=>793,8278=>515,8279=>855,8280=>722,8281=>725,8282=>224,8283=>722,8284=>604,
-8285=>224,8286=>224,8287=>0,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>351,8305=>351,
-8308=>351,8309=>351,8310=>351,8311=>351,8312=>351,8313=>351,8314=>351,8315=>351,8316=>351,8317=>351,
-8318=>351,8319=>351,8320=>351,8321=>251,8322=>351,8323=>351,8324=>351,8325=>351,8326=>351,8327=>351,
-8328=>351,8329=>351,8330=>350,8331=>350,8332=>350,8333=>350,8334=>350,8355=>611,8356=>576,8357=>833,
-8358=>724,8360=>1286,8362=>1049,8363=>571,8368=>594,8373=>591,8448=>985,8449=>1007,8451=>1020,8453=>981,
-8454=>1042,8455=>667,8457=>930,8465=>606,8468=>883,8470=>1006,8471=>784,8476=>699,8480=>1000,8481=>1230,
-8486=>780,8487=>780,8489=>286,8490=>722,8491=>722,8494=>556,8498=>626,8501=>714,8502=>651,8503=>557,
-8504=>638,8506=>906,8507=>1155,8513=>778,8514=>611,8515=>611,8516=>667,8523=>710,8525=>1072,8526=>500,
-8531=>869,8532=>869,8533=>869,8534=>869,8535=>869,8536=>869,8537=>869,8538=>869,8539=>869,8540=>869,
-8541=>869,8542=>869,8543=>869,8544=>278,8545=>556,8546=>834,8547=>945,8548=>667,8549=>945,8550=>1223,
-8551=>1501,8552=>945,8553=>667,8554=>945,8555=>1223,8556=>611,8557=>722,8558=>722,8559=>833,8560=>278,
-8561=>556,8562=>834,8563=>834,8564=>556,8565=>834,8566=>1112,8567=>1390,8568=>834,8569=>556,8570=>834,
-8571=>1112,8572=>278,8573=>556,8574=>611,8575=>889,8592=>964,8593=>964,8594=>964,8595=>964,8596=>964,
-8597=>964,8598=>964,8599=>964,8600=>964,8601=>964,8602=>964,8603=>964,8606=>964,8607=>964,8608=>964,
-8609=>964,8610=>964,8611=>964,8612=>964,8613=>964,8614=>964,8615=>964,8616=>964,8644=>964,8645=>964,
-8646=>964,8647=>964,8648=>964,8649=>964,8650=>964,8706=>608,8710=>729,8721=>856,8722=>584,8723=>584,
-8725=>1107,8730=>597,8800=>584,8804=>584,8805=>584,9251=>500,9674=>489,9824=>626,9825=>694,9826=>595,
-9827=>776,9828=>626,9829=>694,9830=>595,9831=>776,9833=>333,9834=>556,9835=>778,9836=>778,9837=>556,
-9838=>556,9839=>556,11799=>333,64256=>607,64257=>576,64258=>603,64259=>849,64260=>849,64275=>1243,64276=>1226,
-64277=>1233,64278=>1238,64279=>1448,64285=>284,64286=>305,64287=>542,64288=>653,64289=>964,64290=>888,64291=>932,
-64292=>845,64293=>917,64294=>933,64295=>850,64296=>1006,64297=>584,64298=>840,64299=>840,64300=>840,64301=>840,
-64302=>714,64303=>714,64304=>714,64305=>651,64306=>557,64307=>638,64308=>682,64309=>348,64310=>443,64312=>670,
-64313=>354,64314=>590,64315=>595,64316=>667,64318=>704,64320=>429,64321=>670,64323=>661,64324=>660,64326=>671,
-64327=>672,64328=>600,64329=>840,64330=>756,64331=>212,64332=>591,64333=>550,64334=>568,64335=>714,65533=>788);
-$enc='';
+$dw=700;
$diff='';
+$originalsize=301188;
+$enc='';
$file='freesansbi.z';
$ctg='freesansbi.ctg.z';
-$originalsize=269952;
-?>
\ No newline at end of file
+$desc=array('Flags'=>96,'FontBBox'=>'[-908 -313 1591 1076]','ItalicAngle'=>-12,'Ascent'=>1000,'Descent'=>-300,'Leading'=>90,'CapHeight'=>729,'XHeight'=>540,'StemV'=>123,'StemH'=>53,'AvgWidth'=>478,'MaxWidth'=>1501,'MissingWidth'=>700);
+$cw=array(0=>0,1=>700,2=>700,3=>700,4=>700,5=>700,6=>700,7=>700,8=>0,9=>600,10=>700,11=>700,12=>700,13=>600,14=>700,15=>700,16=>700,17=>700,18=>700,19=>700,20=>700,21=>700,22=>700,23=>700,24=>700,25=>700,26=>700,27=>700,28=>700,29=>0,30=>700,31=>700,32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333,60=>584,61=>584,62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>333,92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556,100=>611,101=>556,102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278,109=>889,110=>611,111=>611,112=>611,113=>611,114=>389,115=>556,116=>333,117=>611,118=>556,119=>778,120=>556,121=>556,122=>500,123=>389,124=>280,125=>389,126=>584,127=>700,128=>722,129=>722,130=>722,131=>667,132=>722,133=>778,134=>722,135=>556,136=>556,137=>556,138=>556,139=>556,140=>556,141=>556,142=>556,143=>556,144=>556,145=>556,146=>278,147=>278,148=>278,149=>278,150=>611,151=>611,152=>611,153=>611,154=>611,155=>611,156=>611,157=>611,158=>611,159=>611,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>280,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584,178=>350,179=>350,180=>333,181=>667,182=>556,183=>278,184=>333,185=>248,186=>365,187=>556,188=>869,189=>869,190=>869,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>892,231=>556,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>611,241=>611,242=>611,243=>611,244=>611,245=>611,246=>611,247=>584,248=>611,249=>611,250=>611,251=>611,252=>611,253=>556,254=>611,255=>556,256=>722,257=>556,258=>722,259=>556,260=>722,261=>556,262=>722,263=>556,264=>722,265=>556,266=>722,267=>556,268=>722,269=>556,270=>722,271=>722,272=>722,273=>611,274=>667,275=>556,276=>667,277=>556,278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>611,286=>778,287=>611,288=>778,289=>611,290=>778,291=>611,292=>722,293=>611,294=>722,295=>611,296=>278,297=>278,298=>278,299=>278,300=>278,301=>278,302=>278,303=>268,304=>278,305=>278,306=>595,307=>488,308=>556,309=>278,310=>722,311=>556,312=>529,313=>611,314=>278,315=>611,316=>278,317=>611,318=>444,319=>611,320=>556,321=>611,322=>278,323=>722,324=>611,325=>722,326=>611,327=>722,328=>611,329=>656,330=>720,331=>611,332=>778,333=>611,334=>778,335=>611,336=>778,337=>611,338=>1000,339=>962,340=>722,341=>389,342=>722,343=>389,344=>722,345=>389,346=>667,347=>556,348=>667,349=>556,350=>667,351=>556,352=>667,353=>556,354=>611,355=>333,356=>611,357=>444,358=>611,359=>404,360=>722,361=>611,362=>722,363=>611,364=>722,365=>611,366=>722,367=>611,368=>722,369=>611,370=>722,371=>611,372=>944,373=>778,374=>667,375=>556,376=>667,377=>611,378=>500,379=>611,380=>500,381=>611,382=>500,383=>333,384=>611,385=>963,386=>722,387=>611,388=>687,389=>611,390=>722,391=>752,392=>562,393=>722,394=>968,395=>722,396=>611,397=>609,398=>667,399=>778,400=>672,401=>611,402=>333,403=>778,404=>667,405=>940,406=>278,407=>395,408=>778,409=>556,410=>333,411=>620,412=>889,413=>722,414=>611,415=>778,416=>808,417=>673,418=>1111,419=>722,420=>914,421=>611,422=>647,423=>667,424=>556,425=>688,426=>441,427=>333,428=>742,429=>333,430=>611,431=>789,432=>684,433=>780,434=>722,435=>762,436=>706,437=>611,438=>500,439=>556,440=>556,441=>645,442=>569,443=>579,446=>611,447=>608,448=>258,449=>443,450=>584,451=>278,452=>1333,453=>1222,454=>1111,455=>1167,456=>889,457=>556,458=>1278,459=>1000,460=>889,461=>722,462=>556,463=>278,464=>278,465=>778,466=>611,467=>722,468=>611,469=>722,470=>611,471=>722,472=>611,473=>722,474=>611,475=>722,476=>611,477=>556,478=>722,479=>556,480=>722,481=>556,482=>1000,483=>892,484=>811,485=>641,486=>778,487=>611,488=>722,489=>556,490=>778,491=>611,492=>778,493=>611,494=>556,495=>556,496=>278,497=>1333,498=>1222,499=>1111,500=>778,501=>611,503=>630,504=>722,505=>611,506=>722,507=>556,508=>1000,509=>892,510=>778,511=>611,512=>722,513=>556,514=>722,515=>556,516=>667,517=>556,518=>667,519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>611,526=>778,527=>611,528=>722,529=>389,530=>722,531=>389,532=>722,533=>611,534=>722,535=>611,536=>667,537=>556,538=>611,539=>333,540=>569,541=>486,542=>722,543=>611,548=>645,549=>500,550=>722,551=>556,552=>667,553=>556,554=>778,555=>611,556=>778,557=>611,558=>778,559=>611,560=>778,561=>611,562=>667,563=>556,567=>278,592=>556,593=>611,594=>671,595=>611,596=>556,597=>600,598=>595,599=>611,600=>556,601=>556,602=>834,603=>570,604=>546,605=>820,606=>570,607=>278,608=>611,609=>611,610=>556,611=>556,612=>646,613=>619,614=>611,615=>611,616=>278,617=>326,618=>278,619=>473,620=>527,621=>298,622=>778,623=>889,624=>889,625=>889,626=>611,627=>611,628=>615,629=>590,630=>878,631=>822,632=>778,633=>389,634=>389,635=>406,636=>419,637=>389,638=>455,639=>455,640=>620,641=>586,642=>606,643=>333,644=>302,645=>333,646=>556,647=>328,648=>333,649=>623,650=>686,651=>630,652=>556,653=>778,654=>556,655=>556,656=>519,657=>571,658=>556,659=>632,660=>611,661=>611,662=>611,663=>556,664=>579,665=>572,666=>570,667=>616,668=>603,669=>552,670=>556,671=>454,672=>611,673=>611,674=>611,675=>1004,676=>1018,677=>1097,678=>804,679=>593,680=>840,681=>866,682=>752,683=>668,684=>536,685=>486,686=>659,687=>679,688=>377,689=>377,690=>202,691=>272,692=>272,693=>299,694=>395,695=>534,696=>364,697=>278,698=>454,699=>278,700=>333,701=>278,702=>333,703=>333,704=>333,705=>333,706=>333,707=>333,708=>333,709=>333,710=>333,711=>333,712=>333,713=>333,714=>333,715=>333,716=>272,717=>333,718=>333,719=>333,720=>333,721=>333,722=>333,723=>333,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,731=>333,732=>333,733=>333,734=>333,735=>510,736=>372,737=>210,738=>363,739=>373,740=>334,741=>526,742=>526,743=>526,744=>526,745=>526,746=>519,747=>519,748=>333,749=>333,750=>333,751=>333,752=>333,753=>333,754=>333,755=>333,756=>333,757=>437,758=>437,759=>400,760=>333,761=>200,762=>200,763=>200,764=>200,765=>332,766=>333,767=>333,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,878=>0,879=>0,884=>208,885=>247,890=>364,894=>333,900=>239,901=>446,902=>688,903=>333,904=>903,905=>962,906=>448,908=>904,910=>991,911=>932,912=>346,913=>764,914=>688,915=>642,916=>744,917=>710,918=>688,919=>743,920=>810,921=>296,922=>744,923=>744,924=>860,925=>714,926=>690,927=>822,928=>781,929=>698,931=>688,932=>688,933=>744,934=>777,935=>783,936=>805,937=>780,938=>296,939=>744,940=>640,941=>530,942=>597,943=>339,944=>575,945=>656,946=>576,947=>591,948=>620,949=>570,950=>522,951=>586,952=>586,953=>346,954=>576,955=>620,956=>667,957=>564,958=>530,959=>610,960=>721,961=>626,962=>595,963=>676,964=>592,965=>575,966=>801,967=>632,968=>722,969=>800,970=>346,971=>575,972=>609,973=>604,974=>769,977=>580,978=>742,979=>857,980=>620,981=>778,982=>740,983=>601,1008=>556,1009=>566,1012=>778,1013=>328,1024=>667,1025=>667,1026=>790,1027=>617,1028=>731,1029=>667,1030=>278,1031=>278,1032=>556,1033=>1110,1034=>1088,1035=>790,1036=>722,1037=>757,1038=>698,1039=>722,1040=>722,1041=>722,1042=>722,1043=>617,1044=>876,1045=>667,1046=>1100,1047=>670,1048=>757,1049=>757,1050=>722,1051=>715,1052=>874,1053=>753,1054=>778,1055=>753,1056=>680,1057=>722,1058=>611,1059=>698,1060=>909,1061=>657,1062=>845,1063=>688,1064=>1132,1065=>1217,1066=>835,1067=>980,1068=>678,1069=>735,1070=>1142,1071=>708,1072=>553,1073=>591,1074=>574,1075=>429,1076=>745,1077=>572,1078=>792,1079=>554,1080=>603,1081=>603,1082=>559,1083=>583,1084=>664,1085=>603,1086=>588,1087=>603,1088=>605,1089=>549,1090=>440,1091=>541,1092=>948,1093=>539,1094=>690,1095=>564,1096=>901,1097=>987,1098=>692,1099=>806,1100=>572,1101=>546,1102=>893,1103=>586,1104=>572,1105=>572,1106=>616,1107=>429,1108=>549,1109=>562,1110=>281,1111=>281,1112=>282,1113=>888,1114=>897,1115=>606,1116=>559,1117=>603,1118=>541,1119=>603,1120=>986,1121=>736,1136=>830,1137=>761,1138=>778,1139=>590,1148=>942,1149=>736,1150=>986,1151=>736,1154=>456,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>791,1163=>662,1164=>639,1165=>581,1166=>670,1167=>649,1168=>623,1169=>450,1170=>623,1171=>472,1172=>674,1173=>528,1174=>1091,1175=>803,1176=>659,1177=>548,1178=>739,1179=>569,1180=>742,1181=>560,1182=>737,1183=>559,1184=>900,1185=>679,1186=>808,1187=>673,1188=>1004,1189=>761,1190=>1114,1191=>876,1192=>963,1193=>766,1194=>724,1195=>554,1196=>611,1197=>454,1198=>667,1199=>584,1200=>652,1201=>632,1202=>667,1203=>550,1204=>951,1205=>748,1206=>759,1207=>630,1208=>669,1209=>580,1210=>672,1211=>576,1212=>977,1213=>752,1214=>993,1215=>761,1216=>318,1217=>1087,1218=>792,1219=>726,1220=>530,1221=>782,1222=>674,1223=>749,1224=>603,1225=>823,1226=>682,1227=>675,1228=>573,1229=>941,1230=>754,1231=>310,1232=>704,1233=>553,1234=>711,1235=>553,1236=>1000,1237=>892,1238=>667,1239=>569,1240=>738,1241=>561,1242=>738,1243=>561,1244=>1086,1245=>792,1246=>670,1247=>554,1248=>558,1249=>546,1250=>753,1251=>603,1252=>753,1253=>603,1254=>778,1255=>588,1256=>778,1257=>590,1258=>778,1259=>590,1260=>735,1261=>546,1262=>698,1263=>541,1264=>698,1265=>541,1266=>698,1267=>541,1268=>686,1269=>564,1270=>617,1271=>475,1272=>976,1273=>806,1296=>672,1297=>546,1298=>729,1299=>577,1306=>778,1307=>611,1308=>944,1309=>776,1310=>750,1311=>573,1329=>730,1330=>713,1331=>765,1332=>752,1333=>708,1334=>801,1335=>496,1336=>713,1337=>855,1338=>686,1339=>727,1340=>420,1341=>897,1342=>841,1343=>708,1344=>660,1345=>666,1346=>747,1347=>698,1348=>757,1349=>630,1350=>747,1351=>651,1352=>743,1353=>657,1354=>728,1355=>799,1356=>752,1357=>743,1358=>768,1359=>691,1360=>713,1361=>640,1362=>425,1363=>818,1364=>672,1365=>805,1366=>754,1369=>333,1370=>222,1371=>250,1372=>333,1373=>333,1374=>352,1375=>362,1377=>873,1378=>613,1379=>634,1380=>636,1381=>593,1382=>639,1383=>417,1384=>613,1385=>658,1386=>711,1387=>609,1388=>318,1389=>836,1390=>670,1391=>613,1392=>607,1393=>611,1394=>626,1395=>619,1396=>618,1397=>324,1398=>613,1399=>540,1400=>591,1401=>392,1402=>873,1403=>577,1404=>603,1405=>600,1406=>626,1407=>951,1408=>613,1409=>612,1410=>348,1411=>951,1412=>616,1413=>606,1414=>763,1415=>626,1417=>333,1418=>398,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0,1470=>516,1471=>0,1472=>297,1473=>0,1474=>0,1475=>333,1476=>0,1488=>714,1489=>651,1490=>557,1491=>638,1492=>682,1493=>297,1494=>443,1495=>682,1496=>670,1497=>284,1498=>590,1499=>595,1500=>667,1501=>683,1502=>704,1503=>297,1504=>429,1505=>670,1506=>653,1507=>661,1508=>660,1509=>616,1510=>671,1511=>672,1512=>600,1513=>840,1514=>756,1520=>554,1521=>550,1522=>542,1523=>238,1524=>474,4256=>616,4257=>645,4258=>664,4259=>839,4260=>627,4261=>630,4262=>827,4263=>928,4264=>639,4265=>630,4266=>951,4267=>606,4268=>608,4269=>835,4270=>630,4271=>610,4272=>804,4273=>615,4274=>823,4275=>747,4276=>870,4277=>627,4278=>840,4279=>627,4280=>665,4281=>610,4282=>799,4283=>598,4284=>665,4285=>664,4286=>608,4287=>886,4288=>629,4304=>463,4305=>516,4306=>564,4307=>706,4308=>459,4309=>476,4310=>623,4311=>711,4312=>494,4313=>476,4314=>894,4315=>500,4316=>500,4317=>712,4318=>493,4319=>503,4320=>712,4321=>503,4322=>710,4323=>670,4324=>707,4325=>459,4326=>691,4327=>465,4328=>492,4329=>480,4330=>656,4331=>500,4332=>492,4333=>524,4334=>500,4335=>688,4336=>510,4337=>739,4338=>450,4339=>479,4340=>502,4341=>501,4345=>564,4347=>515,4348=>449,5024=>714,5025=>731,5026=>624,5027=>908,5028=>1040,5029=>271,5030=>654,5031=>863,5032=>604,5033=>791,5034=>714,5035=>522,5036=>661,5037=>926,5038=>615,5039=>811,5040=>538,5041=>633,5042=>979,5043=>964,5044=>635,5045=>607,5046=>753,5047=>831,5048=>566,5049=>977,5050=>958,5051=>710,5052=>616,5053=>834,5054=>790,5055=>612,5056=>766,5057=>857,5058=>627,5059=>649,5060=>607,5061=>1127,5062=>680,5063=>920,5064=>928,5065=>1333,5066=>920,5067=>705,5068=>695,5069=>1074,5070=>672,5071=>672,5072=>667,5073=>819,5074=>679,5075=>575,5076=>903,5077=>652,5078=>776,5079=>643,5080=>670,5081=>660,5082=>648,5083=>934,5084=>909,5085=>613,5086=>615,5087=>735,5088=>900,5089=>1024,5090=>647,5091=>760,5092=>829,5093=>824,5094=>756,5095=>625,5096=>981,5097=>1014,5098=>1040,5099=>790,5100=>926,5101=>686,5102=>656,5103=>920,5104=>741,5105=>890,5106=>626,5107=>974,5108=>699,7680=>722,7681=>556,7682=>722,7683=>611,7684=>722,7685=>611,7686=>722,7687=>611,7688=>722,7689=>556,7690=>722,7691=>611,7692=>722,7693=>611,7694=>722,7695=>611,7696=>722,7697=>611,7698=>722,7699=>611,7700=>667,7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,7707=>556,7708=>667,7709=>556,7710=>611,7711=>333,7712=>778,7713=>611,7714=>722,7715=>611,7716=>722,7717=>611,7718=>722,7719=>611,7720=>722,7721=>611,7722=>722,7723=>611,7724=>278,7725=>278,7726=>278,7727=>278,7728=>722,7729=>556,7730=>722,7731=>556,7732=>722,7733=>556,7734=>611,7735=>278,7736=>611,7737=>278,7738=>611,7739=>278,7740=>611,7741=>278,7742=>833,7743=>889,7744=>833,7745=>889,7746=>833,7747=>889,7748=>722,7749=>611,7750=>722,7751=>611,7752=>722,7753=>611,7754=>722,7755=>611,7756=>778,7757=>611,7758=>778,7759=>611,7760=>778,7761=>611,7762=>778,7763=>611,7764=>667,7765=>611,7766=>667,7767=>611,7768=>722,7769=>389,7770=>722,7771=>389,7772=>722,7773=>389,7774=>722,7775=>389,7776=>667,7777=>556,7778=>667,7779=>556,7780=>667,7781=>556,7782=>667,7783=>556,7784=>667,7785=>556,7786=>611,7787=>333,7788=>611,7789=>333,7790=>611,7791=>333,7792=>611,7793=>333,7794=>722,7795=>611,7796=>722,7797=>611,7798=>722,7799=>611,7800=>722,7801=>611,7802=>722,7803=>611,7804=>667,7805=>556,7806=>667,7807=>556,7808=>944,7809=>778,7810=>944,7811=>778,7812=>944,7813=>778,7814=>944,7815=>778,7816=>944,7817=>778,7818=>667,7819=>556,7820=>667,7821=>556,7822=>667,7823=>556,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,7830=>611,7831=>333,7832=>778,7833=>556,7834=>555,7835=>333,7840=>722,7841=>556,7842=>722,7843=>556,7844=>722,7845=>556,7846=>722,7847=>556,7848=>722,7849=>556,7850=>722,7851=>556,7852=>722,7853=>556,7854=>722,7855=>556,7856=>722,7857=>556,7858=>722,7859=>556,7860=>722,7861=>556,7862=>722,7863=>556,7864=>667,7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,7871=>556,7872=>667,7873=>556,7874=>667,7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,7881=>278,7882=>278,7883=>278,7884=>778,7885=>611,7886=>778,7887=>611,7888=>778,7889=>611,7890=>778,7891=>611,7892=>778,7893=>611,7894=>778,7895=>611,7896=>778,7897=>611,7898=>808,7899=>673,7900=>808,7901=>673,7902=>808,7903=>673,7904=>808,7905=>673,7906=>808,7907=>673,7908=>722,7909=>611,7910=>722,7911=>611,7912=>789,7913=>684,7914=>789,7915=>684,7916=>789,7917=>684,7918=>789,7919=>684,7920=>789,7921=>684,7922=>667,7923=>556,7924=>667,7925=>556,7926=>667,7927=>556,7928=>667,7929=>556,7936=>656,7937=>656,7938=>656,7939=>656,7940=>656,7941=>656,7942=>656,7943=>656,7944=>764,7945=>764,7946=>916,7947=>940,7948=>908,7949=>891,7950=>844,7951=>869,7952=>570,7953=>570,7954=>570,7955=>570,7956=>570,7957=>570,7960=>842,7961=>836,7962=>1025,7963=>1051,7964=>1035,7965=>1049,7968=>586,7969=>586,7970=>586,7971=>586,7972=>586,7973=>586,7974=>586,7975=>586,7976=>891,7977=>886,7978=>1081,7979=>1108,7980=>1085,7981=>1096,7982=>1009,7983=>1023,7984=>346,7985=>346,7986=>346,7987=>346,7988=>346,7989=>346,7990=>346,7991=>346,7992=>467,7993=>476,7994=>631,7995=>661,7996=>631,7997=>633,7998=>568,7999=>571,8000=>610,8001=>610,8002=>610,8003=>610,8004=>610,8005=>610,8008=>945,8009=>905,8010=>1118,8011=>1121,8012=>1064,8013=>1062,8016=>575,8017=>575,8018=>575,8019=>575,8020=>575,8021=>575,8022=>575,8023=>575,8025=>964,8027=>1148,8029=>1162,8031=>1081,8032=>800,8033=>800,8034=>800,8035=>800,8036=>800,8037=>800,8038=>800,8039=>800,8040=>904,8041=>875,8042=>1092,8043=>1087,8044=>1003,8045=>1002,8046=>1001,8047=>1025,8048=>656,8049=>656,8050=>570,8051=>570,8052=>586,8053=>586,8054=>346,8055=>346,8056=>610,8057=>610,8058=>575,8059=>575,8060=>800,8061=>800,8064=>656,8065=>656,8066=>656,8067=>656,8068=>656,8069=>656,8070=>656,8071=>656,8072=>854,8073=>855,8074=>1006,8075=>1030,8076=>996,8077=>977,8078=>938,8079=>959,8080=>586,8081=>586,8082=>586,8083=>586,8084=>586,8085=>586,8086=>586,8087=>586,8088=>960,8089=>960,8090=>1155,8091=>1186,8092=>1161,8093=>1171,8094=>1087,8095=>1102,8096=>800,8097=>800,8098=>800,8099=>800,8100=>800,8101=>800,8102=>800,8103=>800,8104=>1005,8105=>980,8106=>1201,8107=>1192,8108=>1109,8109=>1108,8110=>1106,8111=>1130,8112=>656,8113=>656,8114=>656,8115=>656,8116=>640,8118=>656,8119=>656,8120=>764,8121=>764,8122=>764,8123=>764,8124=>854,8125=>278,8126=>201,8127=>147,8128=>278,8129=>333,8130=>586,8131=>586,8132=>597,8134=>586,8135=>586,8136=>911,8137=>925,8138=>941,8139=>948,8140=>826,8141=>402,8142=>403,8143=>147,8144=>346,8145=>346,8146=>346,8147=>346,8150=>346,8151=>346,8152=>296,8153=>296,8154=>511,8155=>521,8157=>434,8158=>433,8159=>333,8160=>575,8161=>575,8162=>575,8163=>575,8164=>626,8165=>626,8166=>575,8167=>575,8168=>744,8169=>744,8170=>901,8171=>975,8172=>837,8173=>353,8174=>351,8175=>303,8178=>800,8179=>800,8180=>800,8182=>800,8183=>800,8184=>979,8185=>918,8186=>936,8187=>877,8188=>895,8189=>333,8190=>159,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>556,8211=>556,8212=>1000,8213=>1000,8214=>437,8215=>556,8216=>278,8217=>278,8218=>278,8219=>278,8220=>500,8221=>500,8222=>500,8223=>503,8224=>556,8225=>556,8226=>350,8227=>350,8228=>278,8229=>666,8230=>1000,8231=>278,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>500,8240=>1000,8241=>1372,8242=>238,8243=>426,8244=>614,8245=>238,8246=>379,8247=>571,8248=>450,8249=>333,8250=>333,8251=>622,8252=>666,8253=>617,8254=>556,8255=>658,8256=>658,8257=>438,8258=>840,8259=>400,8260=>167,8261=>334,8262=>334,8263=>1222,8264=>944,8265=>944,8266=>556,8267=>556,8268=>537,8269=>537,8270=>389,8271=>333,8272=>658,8273=>389,8274=>634,8275=>568,8276=>658,8277=>793,8278=>515,8279=>855,8280=>722,8281=>725,8282=>224,8283=>722,8284=>604,8285=>224,8286=>224,8287=>0,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>351,8305=>200,8308=>351,8309=>351,8310=>351,8311=>351,8312=>351,8313=>351,8314=>351,8315=>351,8316=>351,8317=>270,8318=>270,8319=>391,8320=>351,8321=>251,8322=>351,8323=>351,8324=>351,8325=>351,8326=>351,8327=>351,8328=>351,8329=>351,8330=>350,8331=>350,8332=>350,8333=>270,8334=>270,8336=>363,8337=>366,8338=>394,8339=>360,8340=>355,8355=>611,8356=>576,8357=>833,8358=>724,8360=>1286,8362=>1049,8363=>571,8364=>640,8368=>594,8373=>591,8376=>612,8400=>0,8401=>0,8402=>0,8403=>0,8406=>0,8407=>0,8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8421=>0,8422=>0,8423=>0,8424=>0,8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8432=>0,8448=>945,8449=>1007,8451=>1020,8453=>981,8454=>1002,8455=>667,8456=>722,8457=>930,8462=>611,8465=>606,8467=>608,8468=>883,8470=>1006,8471=>860,8476=>699,8480=>1000,8481=>1330,8482=>1000,8486=>780,8487=>780,8489=>286,8490=>722,8491=>722,8494=>556,8498=>626,8501=>714,8502=>651,8503=>557,8504=>638,8506=>906,8507=>1425,8513=>778,8514=>611,8515=>611,8516=>667,8523=>710,8525=>1242,8526=>460,8531=>869,8532=>869,8533=>869,8534=>869,8535=>869,8536=>869,8537=>869,8538=>869,8539=>869,8540=>869,8541=>869,8542=>869,8543=>869,8544=>278,8545=>556,8546=>834,8547=>945,8548=>667,8549=>945,8550=>1223,8551=>1501,8552=>945,8553=>667,8554=>945,8555=>1223,8556=>611,8557=>722,8558=>722,8559=>833,8560=>278,8561=>556,8562=>834,8563=>834,8564=>556,8565=>834,8566=>1112,8567=>1390,8568=>834,8569=>556,8570=>834,8571=>1112,8572=>278,8573=>556,8574=>611,8575=>889,8592=>964,8593=>964,8594=>964,8595=>964,8596=>964,8597=>964,8598=>964,8599=>964,8600=>964,8601=>964,8602=>964,8603=>964,8606=>964,8607=>964,8608=>964,8609=>964,8610=>964,8611=>964,8612=>964,8613=>964,8614=>964,8615=>964,8616=>964,8644=>964,8645=>964,8646=>964,8647=>964,8648=>964,8649=>964,8650=>964,8706=>608,8710=>729,8721=>856,8722=>584,8723=>584,8725=>1107,8730=>597,8800=>584,8804=>584,8805=>584,9251=>500,9674=>541,9675=>860,9711=>1020,9824=>626,9825=>694,9826=>595,9827=>776,9828=>626,9829=>694,9830=>595,9831=>776,9833=>333,9834=>556,9835=>778,9836=>778,9837=>556,9838=>556,9839=>556,11568=>352,11569=>872,11570=>872,11571=>720,11572=>720,11573=>720,11574=>664,11575=>752,11576=>752,11577=>720,11578=>720,11579=>596,11580=>698,11581=>742,11582=>574,11583=>742,11584=>872,11585=>872,11586=>312,11587=>720,11588=>696,11589=>720,11590=>584,11591=>742,11592=>796,11593=>613,11594=>672,11595=>888,11596=>836,11597=>524,11598=>720,11599=>300,11600=>836,11601=>300,11602=>718,11603=>388,11604=>872,11605=>872,11606=>696,11607=>308,11608=>640,11609=>872,11610=>872,11611=>762,11612=>424,11613=>720,11614=>762,11615=>720,11616=>709,11617=>720,11618=>541,11619=>828,11620=>454,11621=>828,11631=>482,11799=>333,42888=>333,42889=>276,42890=>342,42891=>258,42892=>258,64256=>607,64257=>576,64258=>603,64259=>849,64260=>849,64261=>627,64275=>1243,64276=>1226,64277=>1233,64278=>1238,64279=>1448,64285=>284,64286=>305,64287=>542,64288=>653,64289=>964,64290=>888,64291=>932,64292=>845,64293=>917,64294=>933,64295=>850,64296=>1006,64297=>584,64298=>840,64299=>840,64300=>840,64301=>840,64302=>714,64303=>714,64304=>714,64305=>651,64306=>557,64307=>638,64308=>682,64309=>348,64310=>443,64312=>670,64313=>354,64314=>590,64315=>595,64316=>667,64318=>704,64320=>429,64321=>670,64323=>661,64324=>660,64326=>671,64327=>672,64328=>600,64329=>840,64330=>756,64331=>212,64332=>591,64333=>550,64334=>568,64335=>714,65533=>900,65535=>700);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/freesansbi.z b/lib/tcpdf/fonts/freesansbi.z
index 62a3322592d..13e82b5037e 100644
Binary files a/lib/tcpdf/fonts/freesansbi.z and b/lib/tcpdf/fonts/freesansbi.z differ
diff --git a/lib/tcpdf/fonts/freesansi.ctg.z b/lib/tcpdf/fonts/freesansi.ctg.z
index fe5d471764c..185c732c1f3 100644
Binary files a/lib/tcpdf/fonts/freesansi.ctg.z and b/lib/tcpdf/fonts/freesansi.ctg.z differ
diff --git a/lib/tcpdf/fonts/freesansi.php b/lib/tcpdf/fonts/freesansi.php
index 5b9c3541cbc..4d2694bb9f1 100644
--- a/lib/tcpdf/fonts/freesansi.php
+++ b/lib/tcpdf/fonts/freesansi.php
@@ -1,239 +1,15 @@
1000,'Descent'=>-300,'CapHeight'=>22,'Flags'=>96,'FontBBox'=>'[-898 -431 1572 1072]','ItalicAngle'=>-12,'StemV'=>70,'MissingWidth'=>600);
$up=-176;
$ut=50;
-$dw=600;
-$cw=array(
-32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,
-42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,
-52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,
-62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,
-72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778,
-82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,
-92=>278,93=>278,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,
-102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556,
-112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,
-122=>500,123=>334,124=>260,125=>334,126=>584,8364=>655,8218=>222,402=>278,8222=>333,8230=>1000,
-8224=>556,8225=>556,710=>333,8240=>1000,352=>667,8249=>250,338=>1000,381=>611,8216=>222,8217=>222,
-8220=>333,8221=>333,8226=>350,8211=>556,8212=>1000,732=>333,8482=>1000,353=>500,8250=>250,339=>944,
-382=>500,376=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,
-168=>333,169=>737,170=>370,171=>444,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584,
-178=>352,179=>352,180=>333,181=>556,182=>537,183=>278,184=>333,185=>250,186=>365,187=>444,
-188=>947,189=>947,190=>947,191=>611,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,
-198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,
-208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,
-218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,
-228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,
-238=>278,239=>278,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,
-248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500,256=>667,257=>556,
-258=>667,259=>556,260=>667,261=>556,262=>722,263=>500,264=>722,265=>500,266=>722,267=>500,
-268=>722,269=>500,270=>722,271=>722,272=>722,273=>556,274=>667,275=>556,276=>667,277=>556,
-278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>556,286=>778,287=>556,
-288=>778,289=>556,290=>778,291=>527,292=>722,293=>556,294=>722,295=>556,296=>278,297=>278,
-298=>278,299=>278,300=>278,301=>278,302=>278,303=>222,304=>278,305=>278,306=>742,307=>362,
-308=>500,309=>222,310=>667,311=>500,312=>510,313=>556,314=>222,315=>556,316=>222,317=>556,
-318=>387,319=>556,320=>409,321=>556,322=>222,323=>722,324=>556,325=>722,326=>556,327=>722,
-328=>556,329=>722,330=>722,331=>556,332=>778,333=>556,334=>778,335=>556,336=>778,337=>556,
-340=>722,341=>333,342=>722,343=>333,344=>722,345=>333,346=>667,347=>500,348=>667,349=>500,
-350=>667,351=>500,354=>611,355=>278,356=>611,357=>443,358=>611,359=>278,360=>722,361=>556,
-362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556,
-372=>944,373=>722,374=>667,375=>500,377=>611,378=>500,379=>611,380=>500,383=>278,384=>556,
-385=>854,386=>667,387=>556,388=>667,389=>556,390=>722,391=>722,392=>500,393=>722,394=>899,
-395=>667,396=>556,397=>566,398=>667,399=>778,400=>667,401=>611,403=>778,404=>667,405=>889,
-406=>278,407=>333,408=>741,409=>500,410=>333,411=>560,412=>833,413=>722,414=>556,415=>778,
-416=>778,417=>556,418=>944,419=>722,420=>842,421=>556,422=>666,423=>667,424=>500,425=>611,
-426=>333,427=>278,428=>611,429=>278,430=>611,431=>722,432=>556,433=>768,434=>722,435=>788,
-436=>616,437=>611,438=>500,439=>611,440=>611,441=>500,442=>500,443=>556,446=>556,447=>556,
-448=>260,449=>520,450=>584,451=>278,452=>1311,453=>1208,454=>1056,455=>1056,456=>778,457=>444,
-458=>1158,459=>944,460=>778,461=>667,462=>556,463=>278,464=>278,465=>778,466=>556,467=>722,
-468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722,476=>556,477=>556,
-478=>667,479=>556,480=>667,481=>556,482=>1000,483=>889,484=>778,485=>556,486=>778,487=>556,
-488=>667,489=>500,490=>778,491=>556,492=>778,493=>556,494=>611,495=>500,496=>222,497=>1333,
-498=>1222,499=>1056,500=>778,501=>556,503=>630,504=>722,505=>556,506=>667,507=>556,508=>1000,
-509=>889,510=>778,511=>611,512=>667,513=>556,514=>667,515=>556,516=>667,517=>556,518=>667,
-519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>556,526=>778,527=>556,528=>722,
-529=>333,530=>722,531=>333,532=>722,533=>556,534=>722,535=>556,536=>667,537=>500,538=>611,
-539=>278,540=>521,541=>393,542=>722,543=>556,548=>611,549=>500,550=>667,551=>556,552=>667,
-553=>556,554=>778,555=>556,556=>778,557=>556,558=>778,559=>556,560=>778,561=>556,562=>667,
-563=>500,567=>222,592=>556,593=>556,594=>659,595=>556,596=>500,597=>500,598=>556,599=>556,
-600=>556,601=>556,602=>804,603=>500,604=>500,605=>742,606=>500,607=>222,608=>556,609=>556,
-610=>546,611=>621,612=>556,613=>556,614=>556,615=>556,616=>222,617=>222,618=>278,619=>473,
-620=>427,621=>222,622=>611,623=>833,624=>833,625=>833,626=>556,627=>556,628=>560,629=>556,
-630=>778,631=>722,632=>728,633=>333,634=>333,635=>393,636=>333,637=>333,638=>384,639=>369,
-640=>546,641=>546,642=>500,643=>278,644=>278,645=>278,646=>444,647=>278,648=>278,649=>556,
-650=>626,651=>539,652=>500,653=>722,654=>500,655=>556,656=>500,657=>500,658=>500,659=>552,
-660=>556,661=>556,662=>556,663=>1000,664=>556,665=>521,666=>500,667=>546,668=>500,669=>444,
-670=>500,671=>430,672=>556,673=>556,674=>556,675=>944,676=>944,677=>944,678=>689,679=>506,
-680=>764,681=>766,682=>660,683=>577,684=>476,685=>486,686=>565,687=>621,688=>500,689=>500,
-690=>167,691=>333,692=>333,693=>393,694=>500,695=>500,696=>330,697=>278,698=>454,699=>278,
-700=>278,701=>278,702=>333,703=>333,704=>333,705=>333,706=>333,707=>333,708=>333,709=>333,
-711=>333,712=>333,713=>333,714=>333,715=>333,716=>333,717=>333,718=>333,719=>333,720=>333,
-721=>333,722=>333,723=>333,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,
-731=>333,733=>333,734=>333,735=>510,736=>333,737=>333,738=>333,739=>333,740=>334,741=>526,
-742=>526,743=>526,744=>526,745=>526,746=>519,747=>519,748=>333,749=>333,750=>333,751=>333,
-752=>383,753=>294,754=>294,755=>327,756=>261,757=>437,758=>437,759=>333,760=>278,761=>200,
-762=>200,763=>200,764=>200,765=>333,766=>333,767=>333,768=>0,769=>0,770=>0,771=>0,
-772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,
-782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,
-792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,
-802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,
-812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,
-822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,
-832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,
-842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0,
-852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,
-862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0,
-872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,878=>0,879=>0,884=>199,885=>199,
-890=>332,894=>278,900=>291,901=>624,902=>659,903=>278,904=>870,905=>870,906=>315,908=>876,
-910=>903,911=>882,912=>333,913=>765,914=>643,915=>589,916=>760,917=>659,918=>682,919=>707,
-920=>769,921=>256,922=>689,923=>765,924=>825,925=>687,926=>649,927=>766,928=>730,929=>649,
-931=>678,932=>655,933=>733,934=>753,935=>783,936=>773,937=>768,938=>285,939=>733,940=>593,
-941=>523,942=>595,943=>271,944=>549,945=>596,946=>534,947=>531,948=>566,949=>523,950=>470,
-951=>557,952=>547,953=>293,954=>516,955=>579,956=>571,957=>518,958=>499,959=>561,960=>636,
-961=>551,962=>564,963=>627,964=>505,965=>549,966=>715,967=>579,968=>662,969=>746,970=>335,
-971=>549,972=>535,973=>503,974=>725,977=>580,978=>742,979=>809,980=>620,981=>728,982=>740,
-983=>556,1008=>556,1009=>566,1012=>778,1013=>328,1024=>657,1025=>657,1026=>781,1027=>590,1028=>709,
-1029=>655,1030=>254,1031=>254,1032=>532,1033=>1002,1034=>1166,1035=>772,1036=>674,1037=>730,1038=>605,
-1039=>721,1040=>667,1041=>665,1042=>665,1043=>590,1044=>807,1045=>657,1046=>914,1047=>653,1048=>730,
-1049=>730,1050=>674,1051=>656,1052=>846,1053=>721,1054=>778,1055=>720,1056=>649,1057=>709,1058=>606,
-1059=>605,1060=>875,1061=>660,1062=>754,1063=>612,1064=>830,1065=>872,1066=>839,1067=>885,1068=>668,
-1069=>708,1070=>1099,1071=>676,1072=>556,1073=>545,1074=>521,1075=>375,1076=>572,1077=>538,1078=>815,
-1079=>488,1080=>557,1081=>557,1082=>519,1083=>508,1084=>618,1085=>558,1086=>533,1087=>557,1088=>569,
-1089=>511,1090=>392,1091=>469,1092=>922,1093=>475,1094=>588,1095=>482,1096=>693,1097=>722,1098=>644,
-1099=>731,1100=>521,1101=>509,1102=>790,1103=>550,1104=>538,1105=>538,1106=>566,1107=>375,1108=>506,
-1109=>488,1110=>224,1111=>272,1112=>226,1113=>793,1114=>849,1115=>576,1116=>519,1117=>557,1118=>469,
-1119=>557,1120=>942,1121=>693,1136=>749,1137=>666,1138=>785,1139=>528,1154=>456,1155=>0,1156=>0,
-1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>751,1163=>588,1164=>685,1165=>554,1166=>656,
-1167=>606,1168=>598,1169=>396,1170=>611,1171=>409,1172=>592,1173=>448,1174=>921,1175=>826,1176=>657,
-1177=>493,1178=>680,1179=>529,1180=>678,1181=>524,1182=>695,1183=>528,1184=>846,1185=>650,1186=>741,
-1187=>578,1188=>992,1189=>700,1190=>1047,1191=>778,1192=>687,1193=>507,1194=>709,1195=>509,1196=>611,
-1197=>393,1198=>664,1199=>580,1200=>668,1201=>617,1202=>664,1203=>489,1204=>905,1205=>662,1206=>631,
-1207=>498,1208=>597,1209=>472,1210=>597,1211=>471,1212=>927,1213=>716,1214=>927,1215=>716,1216=>254,
-1217=>915,1218=>815,1219=>665,1220=>510,1221=>678,1222=>533,1223=>721,1224=>558,1225=>751,1226=>589,
-1227=>599,1228=>472,1229=>876,1230=>649,1231=>254,1232=>667,1233=>552,1234=>667,1235=>552,1236=>1000,
-1237=>889,1238=>657,1239=>538,1240=>722,1241=>511,1242=>722,1243=>511,1244=>914,1245=>815,1246=>653,
-1247=>488,1248=>611,1249=>546,1250=>730,1251=>557,1252=>730,1253=>557,1254=>774,1255=>529,1256=>785,
-1257=>528,1258=>785,1259=>528,1260=>708,1261=>509,1262=>605,1263=>469,1264=>605,1265=>469,1266=>605,
-1267=>469,1268=>612,1269=>482,1270=>601,1271=>430,1272=>885,1273=>731,1296=>667,1297=>500,1298=>673,
-1299=>557,1306=>778,1307=>556,1308=>944,1309=>722,1310=>667,1311=>510,1329=>722,1330=>705,1331=>774,
-1332=>754,1333=>722,1334=>751,1335=>485,1336=>722,1337=>782,1338=>655,1339=>699,1340=>417,1341=>853,
-1342=>791,1343=>711,1344=>588,1345=>663,1346=>665,1347=>665,1348=>756,1349=>623,1350=>773,1351=>603,
-1352=>722,1353=>648,1354=>722,1355=>751,1356=>750,1357=>722,1358=>748,1359=>667,1360=>699,1361=>623,
-1362=>417,1363=>785,1364=>638,1365=>778,1366=>716,1369=>333,1370=>222,1371=>133,1372=>325,1373=>333,
-1374=>333,1375=>333,1377=>833,1378=>556,1379=>572,1380=>581,1381=>546,1382=>588,1383=>448,1384=>556,
-1385=>568,1386=>582,1387=>552,1388=>301,1389=>799,1390=>556,1391=>554,1392=>533,1393=>548,1394=>552,
-1395=>552,1396=>544,1397=>222,1398=>544,1399=>456,1400=>556,1401=>390,1402=>833,1403=>509,1404=>547,
-1405=>533,1406=>610,1407=>887,1408=>556,1409=>545,1410=>301,1411=>853,1412=>632,1413=>579,1414=>690,
-1415=>545,1417=>278,1418=>367,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,
-1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0,1470=>488,1471=>0,1472=>212,1473=>0,
-1474=>0,1475=>278,1476=>0,1488=>640,1489=>591,1490=>466,1491=>598,1492=>622,1493=>212,1494=>351,
-1495=>623,1496=>608,1497=>200,1498=>526,1499=>550,1500=>600,1501=>623,1502=>621,1503=>212,1504=>378,
-1505=>607,1506=>587,1507=>575,1508=>568,1509=>540,1510=>590,1511=>606,1512=>547,1513=>776,1514=>687,
-1520=>424,1521=>412,1522=>400,1523=>184,1524=>344,2433=>0,2434=>300,2435=>264,2437=>594,2438=>790,
-2439=>469,2440=>513,2441=>520,2442=>549,2443=>594,2444=>481,2447=>580,2448=>627,2451=>540,2452=>613,
-2453=>570,2454=>467,2455=>471,2456=>428,2457=>483,2458=>408,2459=>509,2460=>591,2461=>563,2462=>771,
-2463=>381,2464=>404,2465=>522,2466=>408,2467=>450,2468=>543,2469=>477,2470=>418,2471=>433,2472=>445,
-2474=>499,2475=>584,2476=>377,2477=>555,2478=>448,2479=>423,2480=>390,2482=>498,2486=>498,2487=>425,
-2488=>495,2489=>440,2492=>22,2493=>440,2494=>193,2495=>189,2496=>180,2497=>0,2498=>0,2499=>0,
-2500=>0,2503=>252,2504=>243,2507=>889,2508=>865,2509=>0,2510=>356,2519=>219,2524=>523,2525=>408,
-2527=>428,2528=>594,2529=>481,2530=>0,2531=>0,2534=>500,2535=>437,2536=>479,2537=>530,2538=>497,
-2539=>500,2540=>482,2541=>503,2542=>517,2543=>481,2544=>377,2545=>377,2546=>429,2547=>383,2548=>429,
-2549=>478,2550=>545,2551=>158,2552=>365,2553=>280,2554=>357,4256=>587,4257=>620,4258=>642,4259=>815,
-4260=>600,4261=>595,4262=>799,4263=>893,4264=>622,4265=>597,4266=>939,4267=>602,4268=>603,4269=>790,
-4270=>587,4271=>623,4272=>799,4273=>601,4274=>792,4275=>724,4276=>847,4277=>599,4278=>812,4279=>603,
-4280=>653,4281=>590,4282=>754,4283=>596,4284=>653,4285=>651,4286=>596,4287=>888,4288=>593,4304=>436,
-4305=>491,4306=>528,4307=>692,4308=>447,4309=>447,4310=>628,4311=>734,4312=>449,4313=>445,4314=>843,
-4315=>449,4316=>449,4317=>682,4318=>449,4319=>480,4320=>682,4321=>468,4322=>710,4323=>623,4324=>697,
-4325=>447,4326=>702,4327=>447,4328=>470,4329=>440,4330=>632,4331=>449,4332=>470,4333=>536,4334=>449,
-4335=>656,4336=>474,4337=>630,4338=>394,4339=>419,4340=>422,4341=>436,4345=>528,4347=>515,7680=>667,
-7681=>556,7682=>667,7683=>556,7684=>667,7685=>556,7686=>667,7687=>556,7688=>722,7689=>500,7690=>722,
-7691=>556,7692=>722,7693=>556,7694=>722,7695=>556,7696=>722,7697=>556,7698=>722,7699=>556,7700=>667,
-7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,7707=>556,7708=>667,7709=>556,7710=>611,
-7711=>278,7712=>778,7713=>556,7714=>722,7715=>556,7716=>722,7717=>556,7718=>722,7719=>556,7720=>722,
-7721=>556,7722=>722,7723=>556,7724=>278,7725=>222,7726=>278,7727=>278,7728=>667,7729=>500,7730=>667,
-7731=>500,7732=>667,7733=>500,7734=>556,7735=>222,7736=>556,7737=>222,7738=>556,7739=>222,7740=>556,
-7741=>222,7742=>833,7743=>833,7744=>833,7745=>833,7746=>833,7747=>833,7748=>722,7749=>556,7750=>722,
-7751=>556,7752=>722,7753=>556,7754=>722,7755=>556,7756=>778,7757=>556,7758=>778,7759=>556,7760=>778,
-7761=>556,7762=>778,7763=>556,7764=>667,7765=>556,7766=>667,7767=>556,7768=>722,7769=>333,7770=>722,
-7771=>333,7772=>722,7773=>333,7774=>722,7775=>333,7776=>667,7777=>500,7778=>667,7779=>500,7780=>667,
-7781=>500,7782=>667,7783=>500,7784=>667,7785=>500,7786=>611,7787=>278,7788=>611,7789=>278,7790=>611,
-7791=>278,7792=>611,7793=>278,7794=>722,7795=>556,7796=>722,7797=>556,7798=>722,7799=>556,7800=>722,
-7801=>556,7802=>722,7803=>556,7804=>667,7805=>500,7806=>667,7807=>500,7808=>944,7809=>722,7810=>944,
-7811=>722,7812=>944,7813=>722,7814=>944,7815=>722,7816=>944,7817=>722,7818=>667,7819=>500,7820=>667,
-7821=>500,7822=>667,7823=>500,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,7830=>556,
-7831=>278,7832=>722,7833=>500,7834=>555,7835=>278,7840=>667,7841=>556,7842=>667,7843=>556,7844=>667,
-7845=>556,7846=>667,7847=>556,7848=>667,7849=>556,7850=>667,7851=>556,7852=>667,7853=>556,7854=>667,
-7855=>556,7856=>667,7857=>556,7858=>667,7859=>556,7860=>667,7861=>556,7862=>667,7863=>556,7864=>667,
-7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,7871=>556,7872=>667,7873=>556,7874=>667,
-7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,7881=>278,7882=>278,7883=>222,7884=>778,
-7885=>556,7886=>778,7887=>556,7888=>778,7889=>556,7890=>778,7891=>556,7892=>778,7893=>556,7894=>778,
-7895=>556,7896=>778,7897=>556,7898=>778,7899=>556,7900=>778,7901=>556,7902=>778,7903=>556,7904=>778,
-7905=>556,7906=>778,7907=>556,7908=>722,7909=>556,7910=>722,7911=>556,7912=>722,7913=>556,7914=>722,
-7915=>556,7916=>722,7917=>556,7918=>722,7919=>556,7920=>722,7921=>556,7922=>667,7923=>500,7924=>667,
-7925=>500,7926=>667,7927=>500,7928=>667,7929=>500,7936=>596,7937=>596,7938=>596,7939=>596,7940=>596,
-7941=>596,7942=>596,7943=>596,7944=>718,7945=>718,7946=>796,7947=>780,7948=>746,7949=>744,7950=>718,
-7951=>718,7952=>523,7953=>523,7954=>523,7955=>523,7956=>523,7957=>523,7960=>759,7961=>751,7962=>962,
-7963=>957,7964=>958,7965=>947,7968=>557,7969=>557,7970=>557,7971=>557,7972=>557,7973=>557,7974=>557,
-7975=>557,7976=>807,7977=>796,7978=>1013,7979=>1002,7980=>1009,7981=>1000,7982=>882,7983=>919,7984=>293,
-7985=>293,7986=>361,7987=>382,7988=>347,7989=>329,7990=>352,7991=>347,7992=>353,7993=>348,7994=>555,
-7995=>557,7996=>557,7997=>545,7998=>435,7999=>448,8000=>561,8001=>561,8002=>561,8003=>561,8004=>561,
-8005=>561,8008=>792,8009=>801,8010=>1031,8011=>1029,8012=>931,8013=>931,8016=>549,8017=>549,8018=>549,
-8019=>549,8020=>549,8021=>549,8022=>549,8023=>549,8025=>838,8027=>1004,8029=>1036,8031=>936,8032=>746,
-8033=>746,8034=>746,8035=>746,8036=>746,8037=>746,8038=>746,8039=>746,8040=>768,8041=>794,8042=>1003,
-8043=>1002,8044=>922,8045=>918,8046=>871,8047=>893,8048=>596,8049=>596,8050=>523,8051=>523,8052=>557,
-8053=>557,8054=>293,8055=>293,8056=>561,8057=>561,8058=>549,8059=>549,8060=>746,8061=>746,8064=>596,
-8065=>596,8066=>596,8067=>596,8068=>596,8069=>596,8070=>596,8071=>596,8072=>859,8073=>861,8074=>948,
-8075=>928,8076=>886,8077=>895,8078=>865,8079=>864,8080=>557,8081=>557,8082=>557,8083=>557,8084=>557,
-8085=>557,8086=>557,8087=>557,8088=>890,8089=>894,8090=>1092,8091=>1084,8092=>1095,8093=>1080,8094=>953,
-8095=>986,8096=>746,8097=>746,8098=>746,8099=>746,8100=>746,8101=>746,8102=>746,8103=>746,8104=>892,
-8105=>907,8106=>1113,8107=>1095,8108=>1034,8109=>1030,8110=>983,8111=>1002,8112=>596,8113=>596,8114=>596,
-8115=>596,8116=>593,8118=>596,8119=>596,8120=>765,8121=>765,8122=>765,8123=>765,8124=>861,8125=>147,
-8126=>201,8127=>147,8128=>278,8129=>333,8130=>557,8131=>557,8132=>595,8134=>557,8135=>557,8136=>835,
-8137=>849,8138=>895,8139=>861,8140=>786,8141=>602,8142=>601,8143=>333,8144=>335,8145=>322,8146=>357,
-8147=>336,8150=>340,8151=>320,8152=>300,8153=>298,8154=>439,8155=>408,8157=>434,8158=>433,8159=>333,
-8160=>549,8161=>549,8162=>549,8163=>549,8164=>551,8165=>551,8166=>549,8167=>549,8168=>733,8169=>733,
-8170=>794,8171=>832,8172=>739,8173=>333,8174=>624,8175=>303,8178=>746,8179=>746,8180=>725,8182=>746,
-8183=>746,8184=>889,8185=>828,8186=>836,8187=>811,8188=>867,8189=>333,8190=>159,8192=>500,8193=>1000,
-8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>200,8202=>100,8203=>0,
-8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>556,8213=>1000,8214=>312,8215=>567,
-8219=>221,8223=>333,8227=>350,8228=>278,8229=>666,8231=>278,8232=>0,8233=>0,8234=>0,8235=>0,
-8236=>0,8237=>0,8238=>0,8239=>500,8241=>1360,8242=>278,8243=>469,8244=>680,8245=>278,8246=>469,
-8247=>680,8248=>376,8251=>622,8252=>556,8253=>556,8254=>556,8255=>658,8256=>658,8257=>438,8258=>840,
-8259=>400,8260=>167,8261=>334,8262=>334,8263=>1112,8264=>834,8265=>834,8266=>556,8267=>537,8268=>537,
-8269=>537,8270=>389,8271=>278,8272=>658,8273=>389,8274=>634,8275=>500,8276=>658,8277=>1000,8278=>515,
-8279=>855,8280=>722,8281=>725,8282=>224,8283=>722,8284=>604,8285=>224,8286=>224,8287=>0,8288=>0,
-8289=>0,8290=>0,8291=>0,8292=>0,8304=>351,8305=>350,8308=>351,8309=>351,8310=>351,8311=>351,
-8312=>351,8313=>351,8314=>350,8315=>350,8316=>350,8317=>350,8318=>350,8319=>350,8320=>351,8321=>251,
-8322=>351,8323=>351,8324=>351,8325=>353,8326=>351,8327=>351,8328=>351,8329=>351,8330=>350,8331=>350,
-8332=>350,8333=>350,8334=>350,8353=>615,8354=>601,8355=>611,8356=>556,8357=>833,8358=>682,8359=>1205,
-8360=>1222,8361=>879,8362=>869,8363=>538,8365=>667,8366=>611,8368=>570,8369=>684,8370=>717,8371=>667,
-8372=>667,8373=>640,8400=>0,8401=>0,8402=>0,8403=>0,8406=>0,8407=>0,8411=>0,8412=>0,
-8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8421=>0,8422=>0,8423=>0,8424=>0,8425=>0,
-8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8432=>0,8448=>970,8449=>979,8451=>1019,
-8452=>556,8453=>876,8454=>922,8455=>667,8457=>867,8459=>969,8460=>615,8462=>556,8463=>572,8464=>809,
-8465=>606,8466=>874,8468=>747,8470=>934,8471=>737,8472=>600,8475=>850,8476=>699,8480=>1000,8481=>1220,
-8486=>768,8487=>744,8488=>512,8489=>286,8490=>722,8491=>722,8492=>908,8493=>623,8494=>556,8496=>562,
-8498=>556,8499=>1080,8501=>520,8502=>591,8503=>456,8504=>598,8506=>843,8507=>1220,8513=>778,8514=>556,
-8515=>556,8516=>667,8522=>516,8523=>640,8525=>936,8526=>477,8531=>869,8532=>869,8533=>869,8534=>869,
-8535=>869,8536=>869,8537=>869,8538=>869,8539=>869,8540=>869,8541=>869,8542=>869,8543=>869,8544=>278,
-8545=>556,8546=>834,8547=>945,8548=>667,8549=>945,8550=>1223,8551=>1501,8552=>945,8553=>667,8554=>945,
-8555=>1223,8556=>556,8557=>722,8558=>722,8559=>833,8560=>222,8561=>444,8562=>666,8563=>722,8564=>500,
-8565=>722,8566=>944,8567=>1166,8568=>722,8569=>500,8570=>722,8571=>944,8572=>222,8573=>500,8574=>556,
-8575=>833,8592=>987,8593=>603,8594=>987,8595=>603,8596=>1042,8597=>1042,8706=>556,8710=>712,8721=>804,
-8722=>584,8725=>947,8730=>542,8739=>200,8741=>312,8800=>584,8804=>584,8805=>584,9251=>500,9674=>489,
-9824=>626,9825=>694,9826=>595,9827=>776,9828=>626,9829=>694,9830=>595,9831=>776,9833=>333,9834=>556,
-9835=>722,9836=>722,9837=>415,9838=>377,9839=>402,11799=>333,64256=>494,64257=>471,64258=>474,64259=>659,
-64260=>654,64261=>530,64275=>1027,64276=>1056,64277=>1058,64278=>1073,64279=>1301,64285=>200,64286=>305,64287=>400,
-64288=>587,64289=>890,64290=>848,64291=>872,64292=>800,64293=>850,64294=>873,64295=>797,64296=>937,64297=>584,
-64298=>776,64299=>776,64300=>776,64301=>776,64302=>640,64303=>640,64304=>640,64305=>591,64306=>466,64307=>598,
-64308=>622,64309=>262,64310=>351,64312=>608,64313=>270,64314=>526,64315=>550,64316=>600,64318=>621,64320=>378,
-64321=>607,64323=>575,64324=>568,64326=>590,64327=>606,64328=>547,64329=>776,64330=>687,64331=>212,64332=>591,
-64333=>550,64334=>568,64335=>640,65533=>788);
-$enc='';
+$dw=700;
$diff='';
+$originalsize=441432;
+$enc='';
$file='freesansi.z';
$ctg='freesansi.ctg.z';
-$originalsize=410728;
-?>
\ No newline at end of file
+$desc=array('Flags'=>96,'FontBBox'=>'[-1166 -431 1572 1072]','ItalicAngle'=>-12,'Ascent'=>1000,'Descent'=>-300,'Leading'=>90,'CapHeight'=>729,'XHeight'=>524,'StemV'=>70,'StemH'=>30,'AvgWidth'=>441,'MaxWidth'=>1501,'MissingWidth'=>700);
+$cw=array(0=>0,1=>700,2=>700,3=>700,4=>700,5=>700,6=>700,7=>700,8=>0,9=>500,10=>700,11=>700,12=>700,13=>500,14=>700,15=>700,16=>700,17=>700,18=>700,19=>700,20=>700,21=>700,22=>700,23=>700,24=>700,25=>700,26=>700,27=>700,28=>700,29=>0,30=>700,31=>700,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,92=>278,93=>278,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,127=>700,128=>667,129=>667,130=>722,131=>667,132=>722,133=>778,134=>722,135=>556,136=>556,137=>556,138=>556,139=>556,140=>556,141=>500,142=>556,143=>556,144=>556,145=>556,146=>278,147=>278,148=>278,149=>278,150=>556,151=>556,152=>556,153=>556,154=>556,155=>556,156=>556,157=>556,158=>556,159=>556,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>444,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584,178=>352,179=>352,180=>333,181=>556,182=>537,183=>278,184=>333,185=>250,186=>365,187=>444,188=>947,189=>947,190=>947,191=>611,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>897,231=>500,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500,256=>667,257=>556,258=>667,259=>556,260=>667,261=>556,262=>722,263=>500,264=>722,265=>500,266=>722,267=>500,268=>722,269=>500,270=>722,271=>722,272=>722,273=>556,274=>667,275=>556,276=>667,277=>556,278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>556,286=>778,287=>556,288=>778,289=>556,290=>778,291=>556,292=>722,293=>556,294=>722,295=>556,296=>278,297=>278,298=>278,299=>278,300=>278,301=>278,302=>278,303=>222,304=>278,305=>278,306=>742,307=>387,308=>500,309=>222,310=>667,311=>500,312=>510,313=>556,314=>222,315=>556,316=>222,317=>556,318=>377,319=>556,320=>409,321=>556,322=>222,323=>722,324=>556,325=>722,326=>556,327=>722,328=>556,329=>692,330=>670,331=>556,332=>778,333=>556,334=>778,335=>556,336=>778,337=>556,338=>1000,339=>937,340=>722,341=>333,342=>722,343=>333,344=>722,345=>333,346=>667,347=>500,348=>667,349=>500,350=>667,351=>500,352=>667,353=>500,354=>611,355=>278,356=>611,357=>443,358=>611,359=>278,360=>722,361=>556,362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556,372=>944,373=>722,374=>667,375=>500,376=>667,377=>611,378=>500,379=>611,380=>500,381=>611,382=>500,383=>278,384=>556,385=>854,386=>667,387=>556,388=>667,389=>556,390=>722,391=>722,392=>530,393=>722,394=>869,395=>667,396=>556,397=>566,398=>667,399=>778,400=>667,401=>611,402=>278,403=>778,404=>667,405=>889,406=>278,407=>333,408=>741,409=>500,410=>333,411=>560,412=>833,413=>722,414=>556,415=>778,416=>778,417=>556,418=>944,419=>722,420=>842,421=>556,422=>666,423=>667,424=>500,425=>611,426=>333,427=>278,428=>611,429=>278,430=>611,431=>773,432=>623,433=>768,434=>722,435=>793,436=>616,437=>611,438=>500,439=>611,440=>611,441=>500,442=>500,443=>556,446=>556,447=>556,448=>260,449=>520,450=>584,451=>278,452=>1311,453=>1208,454=>1056,455=>1056,456=>778,457=>444,458=>1158,459=>944,460=>778,461=>667,462=>556,463=>278,464=>278,465=>778,466=>556,467=>722,468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722,476=>556,477=>556,478=>667,479=>556,480=>667,481=>556,482=>1000,483=>897,484=>778,485=>556,486=>778,487=>556,488=>667,489=>500,490=>778,491=>556,492=>778,493=>556,494=>611,495=>560,496=>222,497=>1333,498=>1222,499=>1056,500=>778,501=>556,503=>630,504=>722,505=>556,506=>667,507=>556,508=>1000,509=>897,510=>778,511=>611,512=>667,513=>556,514=>667,515=>556,516=>667,517=>556,518=>667,519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>556,526=>778,527=>556,528=>722,529=>333,530=>722,531=>333,532=>722,533=>556,534=>722,535=>556,536=>667,537=>500,538=>611,539=>278,540=>521,541=>393,542=>722,543=>556,548=>611,549=>500,550=>667,551=>556,552=>667,553=>556,554=>778,555=>556,556=>778,557=>556,558=>778,559=>556,560=>778,561=>556,562=>667,563=>500,567=>222,592=>556,593=>556,594=>589,595=>556,596=>500,597=>500,598=>581,599=>564,600=>556,601=>556,602=>773,603=>500,604=>500,605=>742,606=>500,607=>246,608=>556,609=>556,610=>546,611=>551,612=>556,613=>556,614=>556,615=>556,616=>245,617=>222,618=>278,619=>473,620=>427,621=>229,622=>611,623=>833,624=>803,625=>833,626=>566,627=>576,628=>560,629=>556,630=>778,631=>722,632=>728,633=>333,634=>333,635=>393,636=>333,637=>333,638=>384,639=>369,640=>546,641=>546,642=>550,643=>328,644=>298,645=>298,646=>444,647=>278,648=>278,649=>579,650=>626,651=>539,652=>500,653=>722,654=>500,655=>538,656=>510,657=>520,658=>560,659=>552,660=>556,661=>556,662=>556,663=>1000,664=>526,665=>501,666=>520,667=>575,668=>520,669=>444,670=>500,671=>430,672=>556,673=>521,674=>516,675=>934,676=>944,677=>944,678=>689,679=>506,680=>764,681=>766,682=>660,683=>577,684=>475,685=>486,686=>565,687=>621,688=>333,689=>333,690=>167,691=>236,692=>236,693=>276,694=>359,695=>500,696=>330,697=>278,698=>454,699=>278,700=>278,701=>278,702=>333,703=>333,704=>333,705=>333,706=>333,707=>333,708=>333,709=>333,710=>333,711=>333,712=>333,713=>333,714=>333,715=>333,716=>333,717=>333,718=>333,719=>333,720=>333,721=>333,722=>333,723=>333,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,731=>333,732=>333,733=>333,734=>333,735=>510,736=>333,737=>186,738=>333,739=>333,740=>334,741=>526,742=>526,743=>526,744=>526,745=>526,746=>519,747=>519,748=>333,749=>333,750=>333,751=>333,752=>383,753=>294,754=>294,755=>327,756=>261,757=>437,758=>437,759=>333,760=>278,761=>200,762=>200,763=>200,764=>200,765=>333,766=>333,767=>333,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,878=>0,879=>0,884=>199,885=>199,890=>332,894=>278,900=>291,901=>624,902=>659,903=>278,904=>870,905=>870,906=>315,908=>876,910=>903,911=>882,912=>333,913=>765,914=>643,915=>589,916=>760,917=>659,918=>682,919=>707,920=>769,921=>256,922=>689,923=>765,924=>825,925=>687,926=>649,927=>766,928=>730,929=>649,931=>678,932=>655,933=>733,934=>753,935=>783,936=>773,937=>768,938=>285,939=>733,940=>593,941=>523,942=>595,943=>271,944=>549,945=>596,946=>534,947=>531,948=>566,949=>523,950=>470,951=>557,952=>547,953=>293,954=>516,955=>579,956=>571,957=>518,958=>499,959=>561,960=>636,961=>551,962=>564,963=>627,964=>505,965=>549,966=>715,967=>579,968=>662,969=>746,970=>335,971=>549,972=>535,973=>503,974=>725,977=>580,978=>742,979=>809,980=>620,981=>728,982=>740,983=>556,1008=>556,1009=>566,1012=>778,1013=>328,1024=>657,1025=>657,1026=>781,1027=>590,1028=>709,1029=>655,1030=>254,1031=>254,1032=>532,1033=>1002,1034=>1166,1035=>772,1036=>674,1037=>730,1038=>605,1039=>721,1040=>667,1041=>665,1042=>665,1043=>590,1044=>807,1045=>657,1046=>914,1047=>653,1048=>730,1049=>730,1050=>674,1051=>656,1052=>846,1053=>721,1054=>778,1055=>720,1056=>649,1057=>709,1058=>606,1059=>605,1060=>875,1061=>660,1062=>754,1063=>612,1064=>830,1065=>872,1066=>839,1067=>885,1068=>668,1069=>708,1070=>1099,1071=>676,1072=>556,1073=>545,1074=>521,1075=>375,1076=>572,1077=>538,1078=>815,1079=>488,1080=>557,1081=>557,1082=>519,1083=>508,1084=>618,1085=>558,1086=>533,1087=>557,1088=>569,1089=>511,1090=>392,1091=>469,1092=>922,1093=>475,1094=>588,1095=>482,1096=>693,1097=>722,1098=>644,1099=>731,1100=>521,1101=>509,1102=>790,1103=>550,1104=>538,1105=>538,1106=>566,1107=>375,1108=>506,1109=>488,1110=>224,1111=>272,1112=>226,1113=>793,1114=>849,1115=>576,1116=>519,1117=>557,1118=>469,1119=>557,1120=>942,1121=>693,1136=>749,1137=>666,1138=>785,1139=>528,1148=>942,1149=>736,1150=>947,1151=>686,1154=>456,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>751,1163=>588,1164=>685,1165=>554,1166=>656,1167=>606,1168=>598,1169=>396,1170=>611,1171=>409,1172=>592,1173=>448,1174=>921,1175=>826,1176=>657,1177=>493,1178=>680,1179=>529,1180=>678,1181=>524,1182=>695,1183=>528,1184=>846,1185=>650,1186=>741,1187=>578,1188=>992,1189=>700,1190=>1047,1191=>778,1192=>810,1193=>645,1194=>709,1195=>509,1196=>611,1197=>393,1198=>664,1199=>580,1200=>668,1201=>617,1202=>664,1203=>489,1204=>905,1205=>662,1206=>631,1207=>498,1208=>597,1209=>472,1210=>597,1211=>471,1212=>927,1213=>716,1214=>927,1215=>699,1216=>254,1217=>915,1218=>815,1219=>665,1220=>510,1221=>678,1222=>533,1223=>721,1224=>558,1225=>751,1226=>589,1227=>599,1228=>472,1229=>876,1230=>649,1231=>254,1232=>667,1233=>552,1234=>667,1235=>552,1236=>1000,1237=>897,1238=>657,1239=>538,1240=>722,1241=>511,1242=>722,1243=>511,1244=>914,1245=>815,1246=>653,1247=>488,1248=>611,1249=>546,1250=>730,1251=>557,1252=>730,1253=>557,1254=>774,1255=>529,1256=>785,1257=>528,1258=>785,1259=>528,1260=>708,1261=>509,1262=>605,1263=>469,1264=>605,1265=>469,1266=>605,1267=>469,1268=>612,1269=>482,1270=>601,1271=>430,1272=>885,1273=>731,1296=>667,1297=>500,1298=>673,1299=>557,1306=>778,1307=>556,1308=>944,1309=>722,1310=>667,1311=>510,1329=>722,1330=>705,1331=>774,1332=>754,1333=>722,1334=>751,1335=>485,1336=>722,1337=>782,1338=>655,1339=>699,1340=>417,1341=>853,1342=>791,1343=>711,1344=>588,1345=>663,1346=>665,1347=>665,1348=>756,1349=>623,1350=>773,1351=>603,1352=>722,1353=>648,1354=>722,1355=>751,1356=>750,1357=>722,1358=>748,1359=>667,1360=>699,1361=>623,1362=>417,1363=>785,1364=>638,1365=>778,1366=>716,1369=>333,1370=>222,1371=>133,1372=>325,1373=>333,1374=>333,1375=>333,1377=>833,1378=>556,1379=>572,1380=>581,1381=>546,1382=>588,1383=>448,1384=>556,1385=>568,1386=>582,1387=>552,1388=>301,1389=>799,1390=>556,1391=>554,1392=>533,1393=>548,1394=>552,1395=>552,1396=>544,1397=>222,1398=>544,1399=>456,1400=>556,1401=>390,1402=>833,1403=>509,1404=>547,1405=>533,1406=>610,1407=>887,1408=>556,1409=>545,1410=>301,1411=>853,1412=>632,1413=>579,1414=>690,1415=>545,1417=>278,1418=>367,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0,1470=>488,1471=>0,1472=>212,1473=>0,1474=>0,1475=>278,1476=>0,1488=>640,1489=>591,1490=>466,1491=>598,1492=>622,1493=>212,1494=>351,1495=>623,1496=>608,1497=>200,1498=>526,1499=>550,1500=>600,1501=>623,1502=>621,1503=>212,1504=>378,1505=>607,1506=>587,1507=>575,1508=>568,1509=>540,1510=>590,1511=>606,1512=>547,1513=>776,1514=>687,1520=>424,1521=>412,1522=>400,1523=>184,1524=>344,2433=>0,2434=>300,2435=>264,2437=>594,2438=>790,2439=>469,2440=>513,2441=>520,2442=>549,2443=>594,2444=>481,2447=>580,2448=>627,2451=>540,2452=>613,2453=>570,2454=>467,2455=>471,2456=>428,2457=>483,2458=>408,2459=>509,2460=>591,2461=>563,2462=>771,2463=>381,2464=>404,2465=>522,2466=>408,2467=>450,2468=>543,2469=>477,2470=>418,2471=>433,2472=>445,2474=>499,2475=>584,2476=>377,2477=>555,2478=>448,2479=>423,2480=>390,2482=>498,2486=>498,2487=>425,2488=>495,2489=>440,2492=>22,2493=>440,2494=>193,2495=>189,2496=>180,2497=>0,2498=>0,2499=>0,2500=>0,2503=>252,2504=>243,2507=>889,2508=>865,2509=>0,2510=>356,2519=>219,2524=>523,2525=>408,2527=>428,2528=>594,2529=>481,2530=>0,2531=>0,2534=>500,2535=>437,2536=>479,2537=>530,2538=>497,2539=>500,2540=>482,2541=>503,2542=>517,2543=>481,2544=>377,2545=>377,2546=>429,2547=>383,2548=>429,2549=>478,2550=>545,2551=>158,2552=>365,2553=>280,2554=>357,4256=>587,4257=>620,4258=>642,4259=>815,4260=>600,4261=>595,4262=>799,4263=>893,4264=>622,4265=>597,4266=>939,4267=>602,4268=>603,4269=>790,4270=>587,4271=>623,4272=>799,4273=>601,4274=>792,4275=>724,4276=>847,4277=>599,4278=>812,4279=>603,4280=>653,4281=>590,4282=>754,4283=>596,4284=>653,4285=>651,4286=>596,4287=>888,4288=>593,4304=>436,4305=>491,4306=>528,4307=>692,4308=>447,4309=>447,4310=>628,4311=>734,4312=>449,4313=>445,4314=>843,4315=>449,4316=>449,4317=>682,4318=>449,4319=>480,4320=>682,4321=>468,4322=>710,4323=>623,4324=>697,4325=>447,4326=>702,4327=>447,4328=>470,4329=>440,4330=>632,4331=>449,4332=>470,4333=>536,4334=>449,4335=>656,4336=>474,4337=>630,4338=>394,4339=>419,4340=>422,4341=>436,4345=>528,4347=>515,4348=>449,5024=>678,5025=>756,5026=>604,5027=>770,5028=>969,5029=>207,5030=>633,5031=>800,5032=>474,5033=>689,5034=>672,5035=>446,5036=>637,5037=>776,5038=>511,5039=>723,5040=>528,5041=>591,5042=>839,5043=>963,5044=>615,5045=>563,5046=>705,5047=>800,5048=>558,5049=>880,5050=>966,5051=>675,5052=>527,5053=>733,5054=>779,5055=>547,5056=>756,5057=>834,5058=>604,5059=>632,5060=>605,5061=>1051,5062=>657,5063=>842,5064=>748,5065=>1192,5066=>842,5067=>632,5068=>668,5069=>928,5070=>626,5071=>655,5072=>502,5073=>696,5074=>642,5075=>518,5076=>952,5077=>622,5078=>710,5079=>521,5080=>556,5081=>656,5082=>622,5083=>881,5084=>760,5085=>564,5086=>567,5087=>712,5088=>717,5089=>838,5090=>617,5091=>689,5092=>767,5093=>728,5094=>690,5095=>551,5096=>859,5097=>957,5098=>900,5099=>779,5100=>805,5101=>621,5102=>604,5103=>842,5104=>653,5105=>737,5106=>601,5107=>901,5108=>655,7680=>667,7681=>556,7682=>667,7683=>556,7684=>667,7685=>556,7686=>667,7687=>556,7688=>722,7689=>500,7690=>722,7691=>556,7692=>722,7693=>556,7694=>722,7695=>556,7696=>722,7697=>556,7698=>722,7699=>556,7700=>667,7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,7707=>556,7708=>667,7709=>556,7710=>611,7711=>278,7712=>778,7713=>556,7714=>722,7715=>556,7716=>722,7717=>556,7718=>722,7719=>556,7720=>722,7721=>556,7722=>722,7723=>556,7724=>278,7725=>222,7726=>278,7727=>278,7728=>667,7729=>500,7730=>667,7731=>500,7732=>667,7733=>500,7734=>556,7735=>222,7736=>556,7737=>222,7738=>556,7739=>222,7740=>556,7741=>222,7742=>833,7743=>833,7744=>833,7745=>833,7746=>833,7747=>833,7748=>722,7749=>556,7750=>722,7751=>556,7752=>722,7753=>556,7754=>722,7755=>556,7756=>778,7757=>556,7758=>778,7759=>556,7760=>778,7761=>556,7762=>778,7763=>556,7764=>667,7765=>556,7766=>667,7767=>556,7768=>722,7769=>333,7770=>722,7771=>333,7772=>722,7773=>333,7774=>722,7775=>333,7776=>667,7777=>500,7778=>667,7779=>500,7780=>667,7781=>500,7782=>667,7783=>500,7784=>667,7785=>500,7786=>611,7787=>278,7788=>611,7789=>278,7790=>611,7791=>278,7792=>611,7793=>278,7794=>722,7795=>556,7796=>722,7797=>556,7798=>722,7799=>556,7800=>722,7801=>556,7802=>722,7803=>556,7804=>667,7805=>500,7806=>667,7807=>500,7808=>944,7809=>722,7810=>944,7811=>722,7812=>944,7813=>722,7814=>944,7815=>722,7816=>944,7817=>722,7818=>667,7819=>500,7820=>667,7821=>500,7822=>667,7823=>500,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,7830=>556,7831=>278,7832=>722,7833=>500,7834=>555,7835=>278,7840=>667,7841=>556,7842=>667,7843=>556,7844=>667,7845=>556,7846=>667,7847=>556,7848=>667,7849=>556,7850=>667,7851=>556,7852=>667,7853=>556,7854=>667,7855=>556,7856=>667,7857=>556,7858=>667,7859=>556,7860=>667,7861=>556,7862=>667,7863=>556,7864=>667,7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,7871=>556,7872=>667,7873=>556,7874=>667,7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,7881=>278,7882=>278,7883=>222,7884=>778,7885=>556,7886=>778,7887=>556,7888=>778,7889=>556,7890=>778,7891=>556,7892=>778,7893=>556,7894=>778,7895=>556,7896=>778,7897=>556,7898=>778,7899=>556,7900=>778,7901=>556,7902=>778,7903=>556,7904=>778,7905=>556,7906=>778,7907=>556,7908=>722,7909=>556,7910=>722,7911=>556,7912=>773,7913=>623,7914=>773,7915=>623,7916=>773,7917=>623,7918=>773,7919=>623,7920=>773,7921=>623,7922=>667,7923=>500,7924=>667,7925=>500,7926=>667,7927=>500,7928=>667,7929=>500,7936=>596,7937=>596,7938=>596,7939=>596,7940=>596,7941=>596,7942=>596,7943=>596,7944=>718,7945=>718,7946=>796,7947=>780,7948=>746,7949=>744,7950=>718,7951=>718,7952=>523,7953=>523,7954=>523,7955=>523,7956=>523,7957=>523,7960=>759,7961=>751,7962=>962,7963=>957,7964=>958,7965=>947,7968=>557,7969=>557,7970=>557,7971=>557,7972=>557,7973=>557,7974=>557,7975=>557,7976=>807,7977=>796,7978=>1013,7979=>1002,7980=>1009,7981=>1000,7982=>882,7983=>919,7984=>293,7985=>293,7986=>361,7987=>382,7988=>347,7989=>329,7990=>352,7991=>347,7992=>353,7993=>348,7994=>555,7995=>557,7996=>557,7997=>545,7998=>435,7999=>448,8000=>561,8001=>561,8002=>561,8003=>561,8004=>561,8005=>561,8008=>792,8009=>801,8010=>1031,8011=>1029,8012=>931,8013=>931,8016=>549,8017=>549,8018=>549,8019=>549,8020=>549,8021=>549,8022=>549,8023=>549,8025=>838,8027=>1004,8029=>1036,8031=>936,8032=>746,8033=>746,8034=>746,8035=>746,8036=>746,8037=>746,8038=>746,8039=>746,8040=>768,8041=>794,8042=>1003,8043=>1002,8044=>922,8045=>918,8046=>871,8047=>893,8048=>596,8049=>596,8050=>523,8051=>523,8052=>557,8053=>557,8054=>293,8055=>293,8056=>561,8057=>561,8058=>549,8059=>549,8060=>746,8061=>746,8064=>596,8065=>596,8066=>596,8067=>596,8068=>596,8069=>596,8070=>596,8071=>596,8072=>859,8073=>861,8074=>948,8075=>928,8076=>886,8077=>895,8078=>865,8079=>864,8080=>557,8081=>557,8082=>557,8083=>557,8084=>557,8085=>557,8086=>557,8087=>557,8088=>890,8089=>894,8090=>1092,8091=>1084,8092=>1095,8093=>1080,8094=>953,8095=>986,8096=>746,8097=>746,8098=>746,8099=>746,8100=>746,8101=>746,8102=>746,8103=>746,8104=>892,8105=>907,8106=>1113,8107=>1095,8108=>1034,8109=>1030,8110=>983,8111=>1002,8112=>596,8113=>596,8114=>596,8115=>596,8116=>593,8118=>596,8119=>596,8120=>765,8121=>765,8122=>765,8123=>765,8124=>861,8125=>147,8126=>201,8127=>147,8128=>278,8129=>333,8130=>557,8131=>557,8132=>595,8134=>557,8135=>557,8136=>835,8137=>849,8138=>895,8139=>861,8140=>786,8141=>602,8142=>601,8143=>333,8144=>335,8145=>322,8146=>357,8147=>336,8150=>340,8151=>320,8152=>300,8153=>298,8154=>439,8155=>408,8157=>434,8158=>433,8159=>333,8160=>549,8161=>549,8162=>549,8163=>549,8164=>551,8165=>551,8166=>549,8167=>549,8168=>733,8169=>733,8170=>794,8171=>832,8172=>739,8173=>333,8174=>624,8175=>303,8178=>746,8179=>746,8180=>725,8182=>746,8183=>746,8184=>889,8185=>828,8186=>836,8187=>811,8188=>867,8189=>333,8190=>159,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>556,8211=>556,8212=>1000,8213=>1000,8214=>312,8215=>567,8216=>222,8217=>222,8218=>222,8219=>221,8220=>333,8221=>333,8222=>333,8223=>333,8224=>556,8225=>556,8226=>350,8227=>350,8228=>278,8229=>666,8230=>1000,8231=>278,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>500,8240=>1000,8241=>1360,8242=>278,8243=>469,8244=>680,8245=>278,8246=>469,8247=>680,8248=>376,8249=>250,8250=>250,8251=>622,8252=>556,8253=>556,8254=>556,8255=>658,8256=>658,8257=>438,8258=>840,8259=>400,8260=>167,8261=>334,8262=>334,8263=>1112,8264=>834,8265=>834,8266=>556,8267=>537,8268=>537,8269=>537,8270=>389,8271=>278,8272=>658,8273=>389,8274=>634,8275=>500,8276=>658,8277=>1000,8278=>515,8279=>855,8280=>722,8281=>725,8282=>224,8283=>722,8284=>604,8285=>224,8286=>224,8287=>0,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>351,8305=>140,8308=>351,8309=>351,8310=>351,8311=>351,8312=>351,8313=>351,8314=>350,8315=>350,8316=>350,8317=>350,8318=>350,8319=>360,8320=>351,8321=>251,8322=>351,8323=>351,8324=>351,8325=>353,8326=>351,8327=>351,8328=>351,8329=>351,8330=>350,8331=>350,8332=>350,8333=>350,8334=>350,8336=>363,8337=>366,8338=>360,8339=>325,8340=>350,8353=>615,8354=>601,8355=>611,8356=>556,8357=>833,8358=>682,8359=>1205,8360=>1222,8361=>879,8362=>869,8363=>538,8364=>655,8365=>667,8366=>611,8368=>570,8369=>684,8370=>717,8371=>667,8372=>667,8373=>640,8376=>516,8400=>0,8401=>0,8402=>0,8403=>0,8404=>0,8405=>0,8406=>0,8407=>0,8408=>0,8409=>0,8410=>0,8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8420=>0,8421=>0,8422=>0,8423=>0,8424=>0,8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8432=>0,8448=>900,8449=>889,8450=>722,8451=>1019,8452=>556,8453=>836,8454=>862,8455=>667,8456=>722,8457=>867,8459=>969,8460=>615,8461=>647,8462=>556,8463=>572,8464=>809,8465=>606,8466=>900,8467=>481,8468=>747,8469=>722,8470=>934,8471=>882,8472=>600,8473=>667,8474=>778,8475=>850,8476=>699,8477=>722,8478=>834,8479=>722,8480=>1043,8481=>1261,8482=>1000,8483=>667,8484=>611,8486=>768,8487=>744,8488=>512,8489=>286,8490=>722,8491=>722,8492=>908,8493=>623,8494=>556,8495=>469,8496=>562,8497=>895,8498=>556,8499=>1080,8501=>520,8502=>591,8503=>456,8504=>598,8505=>278,8506=>848,8507=>1338,8508=>619,8510=>582,8511=>722,8513=>778,8514=>556,8515=>556,8516=>667,8522=>516,8523=>640,8525=>1160,8526=>435,8531=>869,8532=>869,8533=>869,8534=>869,8535=>869,8536=>869,8537=>869,8538=>869,8539=>869,8540=>869,8541=>869,8542=>869,8543=>869,8544=>278,8545=>556,8546=>834,8547=>945,8548=>667,8549=>945,8550=>1223,8551=>1501,8552=>945,8553=>667,8554=>945,8555=>1223,8556=>556,8557=>722,8558=>722,8559=>833,8560=>222,8561=>444,8562=>666,8563=>722,8564=>500,8565=>722,8566=>944,8567=>1166,8568=>722,8569=>500,8570=>722,8571=>944,8572=>222,8573=>500,8574=>556,8575=>833,8592=>987,8593=>603,8594=>987,8595=>603,8596=>1042,8597=>1042,8706=>556,8710=>712,8721=>804,8722=>584,8725=>947,8730=>542,8739=>200,8741=>312,8800=>584,8804=>584,8805=>584,9251=>500,9674=>489,9675=>800,9711=>882,9824=>626,9825=>694,9826=>595,9827=>776,9828=>626,9829=>694,9830=>595,9831=>776,9833=>333,9834=>556,9835=>722,9836=>722,9837=>415,9838=>377,9839=>402,11568=>352,11569=>872,11570=>872,11571=>720,11572=>720,11573=>720,11574=>544,11575=>709,11576=>709,11577=>720,11578=>720,11579=>596,11580=>698,11581=>742,11582=>574,11583=>742,11584=>872,11585=>872,11586=>292,11587=>696,11588=>696,11589=>720,11590=>544,11591=>724,11592=>756,11593=>600,11594=>672,11595=>888,11596=>836,11597=>524,11598=>720,11599=>260,11600=>836,11601=>224,11602=>678,11603=>380,11604=>872,11605=>872,11606=>720,11607=>268,11608=>640,11609=>872,11610=>872,11611=>770,11612=>424,11613=>720,11614=>770,11615=>720,11616=>709,11617=>720,11618=>541,11619=>828,11620=>454,11621=>828,11631=>442,11799=>333,42888=>333,42889=>276,42890=>342,42891=>194,42892=>194,64256=>494,64257=>471,64258=>474,64259=>659,64260=>654,64261=>530,64275=>1027,64276=>1056,64277=>1058,64278=>1073,64279=>1301,64285=>200,64286=>305,64287=>400,64288=>587,64289=>890,64290=>848,64291=>872,64292=>800,64293=>850,64294=>873,64295=>797,64296=>937,64297=>584,64298=>776,64299=>776,64300=>776,64301=>776,64302=>640,64303=>640,64304=>640,64305=>591,64306=>466,64307=>598,64308=>622,64309=>262,64310=>351,64312=>608,64313=>270,64314=>526,64315=>550,64316=>600,64318=>621,64320=>378,64321=>607,64323=>575,64324=>568,64326=>590,64327=>606,64328=>547,64329=>776,64330=>687,64331=>212,64332=>591,64333=>550,64334=>568,64335=>640,65533=>788,65535=>700);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/freesansi.z b/lib/tcpdf/fonts/freesansi.z
index d675eb2666e..075c2edd280 100644
Binary files a/lib/tcpdf/fonts/freesansi.z and b/lib/tcpdf/fonts/freesansi.z differ
diff --git a/lib/tcpdf/fonts/freeserif.ctg.z b/lib/tcpdf/fonts/freeserif.ctg.z
index 06f25fc8ab5..f85cbbb7dc9 100644
Binary files a/lib/tcpdf/fonts/freeserif.ctg.z and b/lib/tcpdf/fonts/freeserif.ctg.z differ
diff --git a/lib/tcpdf/fonts/freeserif.php b/lib/tcpdf/fonts/freeserif.php
index aedc388484e..cc1aa8bb05e 100644
--- a/lib/tcpdf/fonts/freeserif.php
+++ b/lib/tcpdf/fonts/freeserif.php
@@ -1,504 +1,15 @@
900,'Descent'=>-300,'CapHeight'=>10,'Flags'=>96,'FontBBox'=>'[-879 -1201 1767 2606]','ItalicAngle'=>-33.2,'StemV'=>70,'MissingWidth'=>600);
$up=-125;
$ut=50;
-$dw=600;
-$cw=array(
-32=>250,33=>333,34=>408,35=>500,36=>500,37=>833,38=>778,39=>180,40=>333,41=>333,
-42=>500,43=>564,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,
-52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>278,59=>278,60=>564,61=>564,
-62=>564,63=>444,64=>921,65=>722,66=>667,67=>667,68=>722,69=>611,70=>556,71=>722,
-72=>722,73=>333,74=>389,75=>722,76=>611,77=>889,78=>722,79=>722,80=>556,81=>722,
-82=>667,83=>556,84=>611,85=>722,86=>722,87=>944,88=>722,89=>722,90=>611,91=>333,
-92=>278,93=>333,94=>469,95=>500,96=>333,97=>444,98=>500,99=>444,100=>500,101=>444,
-102=>333,103=>500,104=>500,105=>278,106=>278,107=>500,108=>278,109=>778,110=>500,111=>500,
-112=>500,113=>500,114=>333,115=>389,116=>278,117=>500,118=>500,119=>722,120=>500,121=>500,
-122=>444,123=>480,124=>200,125=>480,126=>541,8364=>741,8218=>250,402=>333,8222=>444,8230=>1000,
-8224=>500,8225=>500,710=>333,8240=>1000,352=>556,8249=>250,338=>889,381=>611,8216=>250,8217=>250,
-8220=>444,8221=>444,8226=>350,8211=>500,8212=>1000,732=>333,8482=>980,353=>389,8250=>250,339=>722,
-382=>444,376=>722,160=>250,161=>333,162=>500,163=>500,164=>500,165=>500,166=>200,167=>500,
-168=>333,169=>760,170=>276,171=>444,172=>564,173=>333,174=>760,175=>333,176=>400,177=>564,
-178=>320,179=>320,180=>333,181=>500,182=>453,183=>250,184=>333,185=>320,186=>310,187=>441,
-188=>750,189=>750,190=>750,191=>444,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,
-198=>889,199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333,
-208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>564,216=>722,217=>722,
-218=>722,219=>722,220=>722,221=>722,222=>576,223=>500,224=>444,225=>444,226=>444,227=>444,
-228=>444,229=>444,230=>667,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,
-238=>278,239=>278,240=>501,241=>500,242=>500,243=>500,244=>500,245=>500,246=>500,247=>564,
-248=>500,249=>500,250=>500,251=>500,252=>500,253=>500,254=>496,255=>500,256=>722,257=>444,
-258=>722,259=>444,260=>722,261=>444,262=>667,263=>444,264=>667,265=>444,266=>667,267=>444,
-268=>667,269=>444,270=>722,271=>600,272=>722,273=>500,274=>611,275=>444,276=>611,277=>444,
-278=>611,279=>444,280=>611,281=>444,282=>611,283=>444,284=>722,285=>500,286=>722,287=>500,
-288=>722,289=>500,290=>722,291=>500,292=>722,293=>500,294=>722,295=>548,296=>333,297=>278,
-298=>333,299=>278,300=>333,301=>278,302=>333,303=>278,304=>333,305=>278,306=>703,307=>529,
-308=>389,309=>278,310=>722,311=>500,312=>500,313=>611,314=>278,315=>611,316=>278,317=>611,
-318=>348,319=>611,320=>444,321=>611,322=>278,323=>722,324=>500,325=>722,326=>500,327=>722,
-328=>500,329=>556,330=>722,331=>500,332=>722,333=>500,334=>722,335=>500,336=>722,337=>500,
-340=>667,341=>333,342=>667,343=>333,344=>667,345=>333,346=>556,347=>389,348=>556,349=>389,
-350=>556,351=>389,354=>611,355=>278,356=>611,357=>278,358=>611,359=>278,360=>722,361=>500,
-362=>722,363=>500,364=>722,365=>500,366=>722,367=>500,368=>722,369=>500,370=>722,371=>500,
-372=>944,373=>722,374=>722,375=>500,377=>611,378=>444,379=>611,380=>444,383=>333,384=>500,
-385=>667,386=>576,387=>500,388=>646,389=>500,390=>667,391=>667,392=>444,393=>722,394=>722,
-395=>646,396=>500,397=>534,398=>611,399=>722,400=>518,401=>556,403=>722,404=>665,405=>729,
-406=>333,407=>333,408=>810,409=>500,410=>278,411=>480,412=>944,413=>722,414=>500,415=>726,
-416=>722,417=>516,418=>1043,419=>778,420=>556,421=>500,422=>667,423=>556,424=>389,425=>627,
-426=>592,427=>278,428=>611,429=>278,430=>611,431=>800,432=>518,433=>743,434=>722,435=>822,
-436=>667,437=>611,438=>444,439=>530,440=>556,441=>389,442=>394,443=>500,444=>615,445=>439,
-446=>421,447=>500,448=>200,449=>400,450=>600,451=>333,452=>1333,453=>1166,454=>944,455=>1000,
-456=>889,457=>556,458=>1111,459=>1000,460=>778,461=>722,462=>444,463=>333,464=>278,465=>722,
-466=>500,467=>722,468=>500,469=>722,470=>500,471=>722,472=>500,473=>722,474=>500,475=>722,
-476=>500,477=>444,478=>722,479=>444,480=>722,481=>444,482=>889,483=>667,484=>722,485=>500,
-486=>722,487=>500,488=>722,489=>500,490=>722,491=>500,492=>722,493=>500,494=>530,495=>389,
-496=>278,497=>1333,498=>1166,499=>944,500=>722,501=>500,502=>944,503=>522,504=>722,505=>500,
-506=>722,507=>444,508=>889,509=>667,510=>722,511=>500,512=>722,513=>444,514=>722,515=>444,
-516=>611,517=>444,518=>611,519=>444,520=>333,521=>278,522=>333,523=>278,524=>722,525=>500,
-526=>722,527=>500,528=>667,529=>333,530=>667,531=>333,532=>500,533=>500,534=>722,535=>500,
-536=>556,537=>389,538=>611,539=>278,540=>424,541=>455,542=>722,543=>500,544=>715,545=>588,
-546=>565,547=>468,548=>611,549=>444,550=>722,551=>444,552=>611,553=>444,554=>722,555=>500,
-556=>722,557=>500,558=>722,559=>500,560=>722,561=>500,562=>722,563=>500,564=>407,565=>597,
-566=>379,567=>278,568=>771,569=>760,570=>722,571=>667,572=>444,573=>611,574=>611,575=>389,
-576=>444,577=>444,578=>444,579=>667,580=>722,581=>722,582=>611,583=>444,584=>389,585=>278,
-586=>796,587=>590,588=>667,589=>333,590=>722,591=>500,592=>444,593=>500,594=>507,595=>500,
-596=>444,597=>444,598=>500,599=>500,600=>444,601=>444,602=>722,603=>426,604=>426,605=>674,
-606=>454,607=>278,608=>500,609=>500,610=>484,611=>500,612=>582,613=>500,614=>500,615=>500,
-616=>278,617=>278,618=>278,619=>278,620=>278,621=>278,622=>556,623=>778,624=>778,625=>778,
-626=>500,627=>500,628=>500,629=>491,630=>668,631=>693,632=>640,633=>333,634=>333,635=>333,
-636=>333,637=>333,638=>333,639=>333,640=>446,641=>446,642=>389,643=>333,644=>500,645=>333,
-646=>500,647=>278,648=>278,649=>500,650=>517,651=>514,652=>500,653=>722,654=>500,655=>510,
-656=>524,657=>444,658=>389,659=>456,660=>444,661=>444,662=>444,663=>444,664=>722,665=>468,
-666=>454,667=>665,668=>524,669=>347,670=>500,671=>443,672=>500,673=>444,674=>444,675=>798,
-676=>795,677=>805,678=>554,679=>561,680=>678,681=>722,682=>554,683=>554,684=>500,685=>500,
-686=>611,687=>611,688=>300,689=>300,690=>278,691=>278,692=>278,693=>309,694=>306,695=>432,
-696=>310,697=>250,698=>408,699=>333,700=>333,701=>333,702=>333,703=>333,704=>258,705=>258,
-706=>374,707=>374,708=>383,709=>383,711=>333,712=>250,713=>333,714=>333,715=>333,716=>250,
-717=>333,718=>333,719=>333,720=>278,721=>278,722=>333,723=>333,724=>333,725=>333,726=>333,
-727=>333,728=>333,729=>333,730=>333,731=>333,733=>382,734=>336,735=>352,736=>311,737=>200,
-738=>243,739=>328,740=>300,741=>460,742=>460,743=>460,744=>460,745=>460,746=>477,747=>475,
-748=>339,749=>333,750=>444,751=>383,752=>383,753=>294,754=>294,755=>327,756=>261,757=>437,
-758=>437,759=>333,760=>278,761=>175,762=>175,763=>175,764=>175,765=>337,766=>337,767=>326,
-768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,
-778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,
-788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,
-798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,
-808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,
-818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,
-828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,
-838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,
-848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,
-858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,
-868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,
-878=>0,879=>0,884=>199,885=>199,890=>332,894=>278,900=>267,901=>333,902=>722,903=>250,
-904=>800,905=>902,906=>507,908=>818,910=>861,911=>871,912=>286,913=>722,914=>667,915=>586,
-916=>660,917=>611,918=>611,919=>722,920=>726,921=>333,922=>722,923=>722,924=>889,925=>722,
-926=>628,927=>722,928=>722,929=>556,931=>627,932=>611,933=>696,934=>742,935=>722,936=>808,
-937=>743,938=>333,939=>718,940=>583,941=>426,942=>536,943=>286,944=>514,945=>583,946=>527,
-947=>480,948=>534,949=>426,950=>466,951=>536,952=>534,953=>286,954=>544,955=>476,956=>536,
-957=>480,958=>514,959=>500,960=>587,961=>528,962=>452,963=>537,964=>420,965=>514,966=>643,
-967=>480,968=>693,969=>693,970=>286,971=>514,972=>500,973=>514,974=>693,976=>534,977=>587,
-978=>620,979=>809,980=>620,981=>640,982=>684,983=>534,984=>556,985=>500,986=>594,987=>426,
-988=>556,989=>445,990=>656,991=>400,992=>722,993=>570,994=>960,995=>673,996=>581,997=>429,
-998=>560,999=>407,1000=>450,1001=>321,1002=>842,1003=>593,1004=>564,1005=>413,1006=>618,1007=>438,
-1008=>534,1009=>534,1010=>485,1011=>278,1012=>726,1013=>361,1014=>361,1015=>576,1016=>542,1017=>667,
-1018=>889,1019=>709,1020=>534,1021=>667,1022=>1000,1023=>1000,1024=>615,1025=>613,1026=>748,1027=>570,
-1028=>659,1029=>487,1030=>329,1031=>329,1032=>381,1033=>943,1034=>985,1035=>827,1036=>669,1037=>723,
-1038=>709,1039=>723,1040=>711,1041=>576,1042=>626,1043=>570,1044=>639,1045=>613,1046=>937,1047=>580,
-1048=>723,1049=>723,1050=>669,1051=>684,1052=>891,1053=>723,1054=>722,1055=>723,1056=>576,1057=>659,
-1058=>608,1059=>709,1060=>750,1061=>714,1062=>728,1063=>682,1064=>984,1065=>988,1066=>725,1067=>863,
-1068=>576,1069=>659,1070=>966,1071=>648,1072=>434,1073=>495,1074=>468,1075=>386,1076=>488,1077=>436,
-1078=>662,1079=>404,1080=>524,1081=>524,1082=>498,1083=>490,1084=>632,1085=>524,1086=>491,1087=>524,
-1088=>500,1089=>422,1090=>422,1091=>471,1092=>694,1093=>482,1094=>522,1095=>506,1096=>756,1097=>754,
-1098=>503,1099=>626,1100=>431,1101=>430,1102=>664,1103=>492,1104=>434,1105=>434,1106=>479,1107=>386,
-1108=>430,1109=>347,1110=>269,1111=>278,1112=>278,1113=>677,1114=>711,1115=>514,1116=>498,1117=>524,
-1118=>471,1119=>524,1120=>978,1121=>664,1122=>718,1123=>506,1124=>939,1125=>647,1126=>912,1127=>643,
-1128=>1248,1129=>894,1130=>948,1131=>662,1132=>1299,1133=>911,1134=>516,1135=>391,1136=>870,1137=>694,
-1138=>726,1139=>491,1140=>780,1141=>550,1142=>780,1143=>550,1144=>1207,1145=>946,1146=>877,1147=>611,
-1148=>978,1149=>664,1150=>978,1151=>664,1152=>594,1153=>428,1154=>232,1155=>0,1156=>0,1157=>0,
-1158=>0,1159=>0,1160=>0,1161=>0,1162=>715,1163=>522,1164=>562,1165=>430,1166=>556,1167=>511,
-1168=>564,1169=>398,1170=>586,1171=>402,1172=>573,1173=>463,1174=>1001,1175=>688,1176=>580,1177=>414,
-1178=>698,1179=>517,1180=>734,1181=>537,1182=>671,1183=>498,1184=>842,1185=>573,1186=>732,1187=>524,
-1188=>926,1189=>652,1190=>1014,1191=>721,1192=>671,1193=>531,1194=>667,1195=>437,1196=>611,1197=>454,
-1198=>722,1199=>563,1200=>722,1201=>562,1202=>783,1203=>517,1204=>967,1205=>693,1206=>691,1207=>510,
-1208=>718,1209=>538,1210=>674,1211=>508,1212=>866,1213=>566,1214=>866,1215=>566,1216=>333,1217=>937,
-1218=>662,1219=>626,1220=>446,1221=>702,1222=>489,1223=>722,1224=>497,1225=>823,1226=>545,1227=>674,
-1228=>504,1229=>889,1230=>630,1231=>333,1232=>711,1233=>434,1234=>711,1235=>434,1236=>889,1237=>644,
-1238=>613,1239=>449,1240=>722,1241=>449,1242=>722,1243=>449,1244=>937,1245=>662,1246=>580,1247=>404,
-1248=>530,1249=>366,1250=>723,1251=>524,1252=>723,1253=>524,1254=>722,1255=>491,1256=>722,1257=>491,
-1258=>722,1259=>491,1260=>659,1261=>430,1262=>709,1263=>471,1264=>709,1265=>471,1266=>709,1267=>471,
-1268=>682,1269=>506,1270=>564,1271=>388,1272=>863,1273=>626,1274=>556,1275=>388,1276=>720,1277=>445,
-1278=>722,1279=>495,1280=>556,1281=>504,1282=>900,1283=>634,1284=>553,1285=>471,1286=>803,1287=>518,
-1288=>964,1289=>637,1290=>968,1291=>682,1292=>722,1293=>433,1294=>710,1295=>504,1296=>532,1297=>409,
-1298=>702,1299=>489,1300=>960,1301=>644,1302=>823,1303=>702,1304=>961,1305=>766,1306=>722,1307=>504,
-1308=>944,1309=>693,1310=>690,1311=>502,1312=>994,1313=>695,1314=>1011,1315=>727,1425=>0,1426=>0,
-1427=>0,1428=>0,1429=>0,1430=>0,1431=>418,1432=>0,1433=>0,1434=>0,1435=>0,1436=>0,
-1437=>0,1438=>0,1439=>0,1440=>0,1441=>0,1442=>0,1443=>0,1444=>0,1445=>0,1446=>0,
-1447=>0,1448=>0,1449=>0,1450=>0,1451=>0,1452=>0,1453=>0,1454=>0,1455=>0,1456=>0,
-1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0,
-1467=>0,1468=>0,1469=>0,1470=>440,1471=>0,1472=>126,1473=>0,1474=>0,1475=>418,1476=>0,
-1477=>0,1478=>350,1479=>0,1488=>537,1489=>537,1490=>350,1491=>537,1492=>537,1493=>350,1494=>350,
-1495=>537,1496=>537,1497=>350,1498=>537,1499=>537,1500=>537,1501=>537,1502=>537,1503=>350,1504=>350,
-1505=>537,1506=>537,1507=>537,1508=>537,1509=>537,1510=>537,1511=>537,1512=>537,1513=>537,1514=>537,
-1520=>537,1521=>537,1522=>537,1523=>396,1524=>396,1548=>226,1563=>250,1567=>473,1569=>350,1570=>321,
-1571=>249,1572=>399,1573=>249,1574=>776,1575=>249,1576=>950,1577=>424,1578=>925,1579=>924,1580=>738,
-1581=>748,1582=>701,1583=>397,1584=>399,1585=>328,1586=>331,1587=>951,1588=>949,1589=>949,1590=>949,
-1591=>557,1592=>550,1593=>625,1594=>602,1601=>801,1602=>696,1603=>757,1604=>655,1605=>549,1606=>651,
-1607=>424,1608=>399,1609=>776,1610=>776,1611=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,
-1618=>0,1619=>0,1620=>0,1621=>0,1632=>297,1633=>254,1634=>427,1635=>497,1636=>440,1637=>465,
-1638=>466,1639=>421,1640=>459,1641=>424,1643=>212,1652=>300,1662=>926,1670=>750,1688=>338,1711=>874,
-1740=>776,1748=>176,1920=>450,1921=>501,1922=>582,1923=>544,1924=>482,1925=>433,1926=>448,1927=>462,
-1928=>474,1929=>471,1930=>469,1931=>537,1932=>499,1933=>514,1934=>471,1935=>572,1936=>880,1937=>440,
-1938=>476,1939=>594,1940=>469,1941=>448,1942=>441,1943=>519,1944=>573,1945=>459,1946=>447,1947=>496,
-1948=>541,1949=>887,1950=>883,1951=>964,1952=>558,1953=>505,1954=>471,1955=>554,1956=>459,1957=>486,
-1958=>36,1959=>36,1960=>43,1961=>45,1962=>43,1963=>45,1964=>45,1965=>45,1966=>45,1967=>45,
-1968=>0,2305=>415,2306=>398,2307=>398,2309=>862,2310=>1042,2311=>553,2312=>553,2313=>597,2314=>848,
-2315=>967,2316=>828,2317=>654,2319=>654,2321=>1042,2323=>1042,2324=>1042,2325=>743,2326=>798,2327=>694,
-2328=>694,2329=>730,2330=>734,2331=>888,2332=>814,2333=>834,2334=>734,2335=>629,2336=>629,2337=>653,
-2338=>609,2339=>694,2340=>654,2341=>694,2342=>588,2343=>694,2344=>654,2345=>654,2346=>615,2347=>788,
-2348=>621,2349=>694,2350=>694,2351=>694,2352=>575,2353=>575,2354=>787,2355=>848,2356=>848,2357=>621,
-2359=>615,2360=>734,2361=>609,2364=>398,2365=>569,2366=>341,2367=>341,2368=>341,2369=>0,2370=>0,
-2371=>0,2372=>0,2373=>415,2375=>615,2376=>615,2377=>341,2379=>341,2380=>341,2381=>0,2384=>1047,
-2392=>743,2393=>798,2394=>694,2395=>814,2396=>653,2397=>609,2398=>788,2400=>967,2401=>828,2402=>0,
-2403=>0,2404=>398,2405=>478,2406=>455,2407=>420,2408=>569,2409=>509,2410=>702,2411=>629,2412=>569,
-2413=>702,2414=>609,2415=>609,2416=>626,2433=>0,2434=>300,2435=>312,2437=>594,2438=>776,2439=>469,
-2440=>513,2441=>535,2442=>561,2443=>604,2444=>481,2447=>580,2448=>604,2451=>540,2452=>620,2453=>570,
-2454=>485,2455=>484,2456=>471,2457=>457,2458=>408,2459=>452,2460=>591,2461=>551,2462=>771,2463=>414,
-2464=>404,2465=>522,2466=>415,2467=>450,2468=>551,2469=>477,2470=>478,2471=>449,2472=>448,2474=>535,
-2475=>611,2476=>443,2477=>534,2478=>492,2479=>474,2480=>442,2482=>542,2486=>507,2487=>467,2488=>523,
-2489=>419,2492=>0,2493=>419,2494=>202,2495=>189,2496=>202,2497=>0,2498=>0,2499=>0,2500=>0,
-2503=>294,2504=>289,2507=>774,2508=>825,2509=>0,2510=>356,2519=>219,2524=>523,2525=>420,2527=>469,
-2528=>604,2529=>481,2530=>0,2531=>0,2534=>500,2535=>437,2536=>479,2537=>507,2538=>497,2539=>500,
-2540=>482,2541=>503,2542=>517,2543=>481,2544=>443,2545=>443,2546=>429,2547=>383,2548=>432,2549=>478,
-2550=>539,2551=>158,2552=>365,2553=>280,2554=>357,2561=>0,2562=>0,2563=>385,2565=>728,2566=>884,
-2567=>656,2568=>656,2569=>580,2570=>580,2575=>482,2576=>728,2579=>580,2580=>728,2581=>534,2582=>518,
-2583=>602,2584=>674,2585=>530,2586=>502,2587=>576,2588=>476,2589=>558,2590=>501,2591=>510,2592=>540,
-2593=>508,2594=>512,2595=>558,2596=>468,2597=>518,2598=>488,2599=>518,2600=>522,2602=>518,2603=>490,
-2604=>546,2605=>500,2606=>530,2607=>654,2608=>522,2610=>710,2611=>710,2613=>498,2614=>530,2616=>530,
-2617=>501,2620=>286,2622=>156,2623=>174,2624=>174,2625=>0,2626=>0,2631=>0,2632=>0,2635=>0,
-2636=>0,2637=>0,2641=>0,2649=>534,2650=>618,2651=>492,2652=>484,2654=>506,2662=>616,2663=>480,
-2664=>560,2665=>480,2666=>468,2667=>492,2668=>514,2669=>538,2670=>572,2671=>560,2672=>0,2673=>0,
-2674=>498,2675=>596,2676=>900,2677=>0,2946=>345,2947=>616,2949=>910,2950=>1072,2951=>848,2952=>591,
-2953=>492,2954=>1123,2958=>602,2959=>602,2960=>691,2962=>753,2963=>753,2964=>1597,2965=>677,2969=>697,
-2970=>607,2972=>691,2974=>871,2975=>589,2979=>1230,2980=>688,2984=>560,2985=>911,2986=>477,2990=>625,
-2991=>672,2992=>452,2993=>553,2994=>651,2995=>804,2996=>645,2997=>740,2999=>865,3000=>870,3001=>1067,
-3006=>452,3007=>176,3008=>293,3009=>404,3010=>601,3014=>690,3015=>503,3016=>839,3018=>1188,3019=>982,
-3020=>1519,3021=>234,3031=>804,3330=>417,3331=>221,3333=>1055,3334=>1195,3335=>792,3336=>1467,3337=>569,
-3338=>1243,3339=>676,3340=>897,3342=>1008,3343=>1004,3344=>1538,3346=>585,3347=>981,3348=>1254,3349=>775,
-3350=>798,3351=>691,3352=>1095,3353=>809,3354=>726,3355=>963,3356=>703,3357=>1244,3358=>1103,3359=>462,
-3360=>531,3361=>983,3362=>1027,3363=>1102,3364=>779,3365=>731,3366=>485,3367=>737,3368=>747,3370=>779,
-3371=>961,3372=>1023,3373=>500,3374=>510,3375=>792,3376=>527,3377=>511,3378=>713,3379=>553,3380=>516,
-3381=>715,3382=>785,3383=>920,3384=>977,3385=>977,3389=>375,3390=>403,3391=>283,3392=>323,3393=>275,
-3394=>258,3395=>378,3396=>378,3398=>542,3399=>478,3400=>1069,3402=>1127,3403=>1038,3404=>676,3405=>89,
-3415=>676,3424=>676,3425=>1006,3430=>559,3431=>659,3432=>674,3433=>933,3434=>671,3435=>699,3436=>703,
-3437=>688,3438=>677,3439=>684,3440=>375,3458=>355,3459=>241,3461=>501,3465=>591,3466=>613,3467=>630,
-3473=>636,3476=>653,3481=>760,3482=>739,3483=>653,3484=>757,3486=>562,3488=>636,3489=>673,3490=>673,
-3492=>984,3493=>984,3495=>636,3496=>653,3497=>653,3498=>653,3499=>1066,3501=>739,3502=>636,3503=>501,
-3504=>653,3505=>739,3507=>501,3508=>673,3509=>636,3510=>653,3511=>739,3512=>636,3513=>653,3514=>673,
-3515=>613,3517=>630,3520=>636,3521=>739,3522=>673,3523=>673,3524=>739,3525=>630,3526=>739,3530=>0,
-3535=>328,3536=>288,3537=>319,3538=>0,3539=>0,3540=>0,3542=>0,3544=>380,3545=>495,3551=>492,
-3585=>532,3586=>472,3587=>534,3588=>532,3589=>544,3590=>583,3591=>417,3592=>488,3593=>604,3594=>472,
-3595=>534,3596=>716,3597=>717,3598=>568,3599=>568,3600=>457,3601=>637,3602=>731,3603=>790,3604=>531,
-3605=>542,3606=>522,3607=>577,3608=>468,3609=>603,3610=>554,3611=>554,3612=>556,3613=>556,3614=>604,
-3615=>604,3616=>568,3617=>542,3618=>496,3619=>442,3620=>530,3621=>512,3622=>568,3623=>478,3624=>543,
-3625=>614,3626=>525,3627=>578,3628=>659,3629=>514,3630=>514,3631=>450,3632=>402,3633=>0,3634=>378,
-3635=>415,3636=>0,3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0,3647=>620,3648=>286,
-3649=>521,3650=>447,3651=>426,3652=>424,3653=>333,3654=>453,3655=>0,3656=>0,3657=>0,3658=>0,
-3659=>0,3660=>0,3661=>0,3662=>0,3663=>657,3664=>528,3665=>528,3666=>571,3667=>594,3668=>631,
-3669=>632,3670=>478,3671=>713,3672=>597,3673=>565,3674=>615,3675=>1381,4256=>453,4257=>448,4258=>546,
-4259=>619,4260=>478,4261=>481,4262=>459,4263=>707,4264=>467,4265=>471,4266=>842,4267=>464,4268=>443,
-4269=>707,4270=>460,4271=>465,4272=>686,4273=>440,4274=>550,4275=>561,4276=>580,4277=>467,4278=>630,
-4279=>466,4280=>517,4281=>456,4282=>502,4283=>464,4284=>534,4285=>440,4286=>443,4287=>522,4288=>460,
-4289=>463,4290=>536,4291=>455,4292=>468,4293=>449,4304=>454,4305=>452,4306=>544,4307=>629,4308=>451,
-4309=>452,4310=>452,4311=>702,4312=>451,4313=>452,4314=>820,4315=>451,4316=>453,4317=>695,4318=>449,
-4319=>448,4320=>694,4321=>501,4322=>544,4323=>517,4324=>560,4325=>450,4326=>627,4327=>452,4328=>491,
-4329=>452,4330=>485,4331=>452,4332=>485,4333=>443,4334=>500,4335=>582,4336=>455,4337=>451,4338=>480,
-4339=>414,4340=>453,4341=>418,4345=>528,4347=>410,4608=>583,4609=>770,4610=>560,4611=>525,4612=>525,
-4613=>583,4614=>758,4616=>598,4617=>787,4618=>817,4619=>583,4620=>758,4621=>612,4622=>875,4623=>817,
-4624=>817,4625=>1050,4626=>1050,4627=>817,4628=>1050,4629=>817,4630=>787,4631=>1021,4632=>933,4633=>1137,
-4634=>1067,4635=>980,4636=>1065,4637=>962,4638=>962,4639=>1097,4640=>831,4641=>1021,4642=>851,4643=>735,
-4644=>875,4645=>968,4646=>817,4647=>881,4648=>583,4649=>642,4650=>583,4651=>758,4652=>700,4653=>583,
-4654=>700,4655=>758,4656=>583,4657=>787,4658=>787,4659=>583,4660=>729,4661=>583,4662=>583,4663=>817,
-4664=>642,4665=>817,4666=>846,4667=>642,4668=>758,4669=>744,4670=>642,4671=>817,4672=>700,4673=>700,
-4674=>700,4675=>758,4676=>700,4677=>700,4678=>729,4680=>846,4682=>1079,4683=>700,4684=>700,4685=>1021,
-4688=>700,4689=>700,4690=>700,4691=>758,4692=>700,4693=>758,4694=>729,4696=>846,4698=>1079,4699=>700,
-4700=>700,4701=>1021,4704=>525,4705=>758,4706=>758,4707=>525,4708=>700,4709=>773,4710=>525,4711=>787,
-4712=>525,4713=>758,4714=>758,4715=>525,4716=>700,4717=>773,4718=>525,4719=>525,4720=>729,4721=>729,
-4722=>729,4723=>802,4724=>729,4725=>729,4726=>758,4727=>729,4728=>758,4729=>758,4730=>758,4731=>817,
-4732=>758,4733=>817,4734=>758,4735=>758,4736=>612,4737=>817,4738=>817,4739=>612,4740=>787,4741=>583,
-4742=>875,4744=>962,4746=>992,4747=>700,4748=>758,4749=>904,4752=>408,4753=>583,4754=>525,4755=>554,
-4756=>481,4757=>554,4758=>642,4759=>671,4760=>700,4761=>758,4762=>729,4763=>700,4764=>671,4765=>700,
-4766=>758,4767=>700,4768=>583,4769=>735,4770=>822,4771=>583,4772=>793,4773=>583,4774=>583,4775=>694,
-4776=>554,4777=>729,4778=>773,4779=>554,4780=>700,4781=>554,4782=>554,4784=>992,4786=>1021,4787=>671,
-4788=>787,4789=>904,4792=>729,4793=>904,4794=>948,4795=>729,4796=>875,4797=>729,4798=>729,4800=>1137,
-4802=>1167,4803=>758,4804=>875,4805=>1108,4808=>758,4809=>875,4810=>700,4811=>700,4812=>700,4813=>992,
-4814=>758,4816=>554,4817=>787,4818=>758,4819=>583,4820=>758,4821=>496,4822=>612,4824=>525,4825=>700,
-4826=>700,4827=>525,4828=>685,4829=>729,4830=>510,4831=>729,4832=>962,4833=>962,4834=>962,4835=>962,
-4836=>962,4837=>1021,4838=>962,4839=>962,4840=>467,4841=>525,4842=>671,4843=>612,4844=>612,4845=>671,
-4846=>671,4848=>612,4849=>875,4850=>817,4851=>642,4852=>729,4853=>729,4854=>758,4855=>817,4856=>700,
-4857=>758,4858=>715,4859=>700,4860=>700,4861=>787,4862=>758,4863=>700,4864=>700,4865=>758,4866=>715,
-4867=>700,4868=>700,4869=>787,4870=>758,4871=>700,4872=>467,4873=>671,4874=>671,4875=>612,4876=>612,
-4877=>583,4878=>525,4880=>846,4882=>904,4883=>554,4884=>700,4885=>817,4888=>525,4889=>729,4890=>729,
-4891=>612,4892=>671,4893=>583,4894=>525,4896=>817,4897=>1021,4898=>1021,4899=>817,4900=>992,4901=>758,
-4902=>817,4903=>1021,4904=>1079,4905=>1137,4906=>1137,4907=>1050,4908=>1312,4909=>1050,4910=>1050,4911=>1123,
-4912=>647,4913=>793,4914=>822,4915=>647,4916=>793,4917=>764,4918=>583,4919=>647,4920=>583,4921=>793,
-4922=>822,4923=>583,4924=>793,4925=>764,4926=>583,4927=>793,4928=>540,4929=>758,4930=>583,4931=>467,
-4932=>583,4933=>481,4934=>612,4936=>758,4937=>700,4938=>758,4939=>700,4940=>831,4941=>671,4942=>758,
-4943=>700,4944=>758,4945=>758,4946=>758,4947=>817,4948=>758,4949=>758,4950=>817,4951=>758,4952=>642,
-4953=>980,4954=>758,4961=>233,4962=>583,4963=>408,4964=>408,4965=>525,4966=>525,4967=>233,4968=>700,
-4969=>671,4970=>612,4971=>642,4972=>642,4973=>642,4974=>583,4975=>700,4976=>758,4977=>642,4978=>583,
-4979=>700,4980=>729,4981=>720,4982=>583,4983=>758,4984=>700,4985=>904,4986=>612,4987=>583,4988=>875,
-5024=>711,5025=>678,5026=>604,5027=>667,5028=>796,5029=>301,5030=>516,5031=>544,5032=>457,5033=>716,
-5034=>703,5035=>383,5036=>628,5037=>709,5038=>455,5039=>601,5040=>472,5041=>574,5042=>730,5043=>939,
-5044=>498,5045=>528,5046=>667,5047=>891,5048=>505,5049=>792,5050=>957,5051=>725,5052=>595,5053=>733,
-5054=>698,5055=>638,5056=>720,5057=>732,5058=>624,5059=>638,5060=>565,5061=>903,5062=>655,5063=>681,
-5064=>675,5065=>949,5066=>683,5067=>547,5068=>693,5069=>732,5070=>529,5071=>569,5072=>536,5073=>677,
-5074=>631,5075=>382,5076=>973,5077=>543,5078=>607,5079=>652,5080=>652,5081=>693,5082=>514,5083=>803,
-5084=>658,5085=>597,5086=>627,5087=>659,5088=>679,5089=>706,5090=>563,5091=>618,5092=>767,5093=>776,
-5094=>731,5095=>492,5096=>808,5097=>823,5098=>796,5099=>689,5100=>716,5101=>518,5102=>521,5103=>719,
-5104=>563,5105=>776,5106=>634,5107=>822,5108=>621,5920=>502,5921=>502,5922=>500,5923=>498,5924=>500,
-5925=>502,5926=>502,5927=>502,5928=>500,5929=>503,5930=>502,5931=>502,5932=>500,5933=>500,5934=>500,
-5935=>796,5936=>500,5937=>502,5938=>0,5939=>0,5940=>0,5941=>230,5942=>397,6480=>537,6481=>537,
-6482=>531,6483=>678,6484=>682,6485=>628,6486=>732,6487=>721,6488=>598,6489=>583,6490=>702,6491=>554,
-6492=>683,6493=>554,6494=>710,6495=>695,6496=>523,6497=>678,6498=>589,6499=>272,6500=>506,6501=>515,
-6502=>515,6503=>210,6504=>210,6505=>515,6506=>515,6507=>515,6508=>229,6509=>705,6512=>649,6513=>538,
-6514=>568,6515=>520,6516=>544,6656=>820,6657=>958,6658=>758,6659=>859,6660=>958,6661=>727,6662=>904,
-6663=>940,6664=>850,6665=>905,6666=>838,6667=>961,6668=>1000,6669=>880,6670=>1189,6671=>1246,6672=>1177,
-6673=>757,6674=>1246,6675=>1192,6676=>709,6677=>1192,6678=>1075,6679=>0,6680=>0,6681=>534,6682=>690,
-6683=>0,6686=>697,6687=>500,7424=>484,7425=>595,7426=>667,7427=>446,7428=>446,7429=>483,7430=>483,
-7431=>409,7432=>426,7433=>278,7434=>260,7435=>483,7436=>409,7437=>595,7438=>483,7439=>483,7440=>426,
-7441=>500,7442=>489,7443=>668,7444=>722,7445=>378,7448=>372,7449=>446,7450=>446,7451=>409,7452=>483,
-7453=>488,7454=>660,7455=>500,7456=>483,7457=>632,7458=>409,7459=>355,7462=>392,7463=>483,7464=>483,
-7465=>372,7466=>541,7467=>470,7468=>484,7469=>595,7470=>446,7471=>446,7472=>483,7473=>409,7474=>409,
-7475=>483,7476=>483,7477=>223,7478=>260,7479=>483,7480=>409,7481=>595,7482=>483,7483=>483,7484=>483,
-7485=>378,7486=>372,7487=>446,7488=>409,7489=>483,7490=>632,7491=>297,7492=>297,7493=>335,7494=>446,
-7495=>335,7496=>335,7497=>297,7498=>297,7499=>285,7500=>285,7501=>335,7502=>186,7503=>335,7504=>521,
-7505=>335,7506=>335,7507=>297,7510=>335,7511=>186,7512=>335,7513=>326,7514=>521,7515=>335,7517=>353,
-7518=>321,7519=>357,7520=>430,7521=>321,7522=>186,7523=>223,7524=>335,7525=>335,7526=>353,7527=>321,
-7528=>353,7529=>430,7530=>321,7531=>754,7532=>500,7533=>500,7534=>333,7535=>778,7536=>500,7537=>500,
-7538=>333,7539=>333,7540=>389,7541=>278,7542=>444,7543=>500,7544=>483,7546=>774,7547=>217,7548=>278,
-7549=>500,7550=>483,7551=>514,7552=>500,7553=>500,7554=>333,7555=>676,7556=>525,7557=>278,7558=>802,
-7559=>507,7560=>500,7561=>333,7562=>389,7563=>384,7564=>500,7565=>500,7566=>444,7680=>722,7681=>444,
-7682=>667,7683=>500,7684=>667,7685=>500,7686=>667,7687=>500,7688=>667,7689=>444,7690=>722,7691=>500,
-7692=>722,7693=>500,7694=>722,7695=>500,7696=>720,7697=>500,7698=>722,7699=>500,7700=>611,7701=>444,
-7702=>611,7703=>444,7704=>611,7705=>444,7706=>611,7707=>444,7708=>611,7709=>444,7710=>556,7711=>333,
-7712=>722,7713=>500,7714=>722,7715=>500,7716=>722,7717=>500,7718=>722,7719=>500,7720=>722,7721=>500,
-7722=>722,7723=>500,7724=>333,7725=>278,7726=>333,7727=>278,7728=>722,7729=>500,7730=>722,7731=>500,
-7732=>722,7733=>500,7734=>611,7735=>278,7736=>611,7737=>278,7738=>611,7739=>278,7740=>611,7741=>278,
-7742=>889,7743=>778,7744=>889,7745=>778,7746=>889,7747=>778,7748=>722,7749=>500,7750=>722,7751=>500,
-7752=>722,7753=>500,7754=>722,7755=>500,7756=>722,7757=>500,7758=>722,7759=>500,7760=>722,7761=>500,
-7762=>722,7763=>500,7764=>556,7765=>500,7766=>556,7767=>500,7768=>667,7769=>333,7770=>667,7771=>333,
-7772=>667,7773=>333,7774=>667,7775=>333,7776=>556,7777=>389,7778=>556,7779=>389,7780=>556,7781=>389,
-7782=>556,7783=>389,7784=>556,7785=>389,7786=>611,7787=>278,7788=>611,7789=>278,7790=>611,7791=>278,
-7792=>611,7793=>278,7794=>722,7795=>500,7796=>722,7797=>500,7798=>722,7799=>500,7800=>722,7801=>500,
-7802=>722,7803=>500,7804=>722,7805=>500,7806=>722,7807=>500,7808=>944,7809=>722,7810=>944,7811=>722,
-7812=>944,7813=>722,7814=>944,7815=>722,7816=>944,7817=>722,7818=>722,7819=>500,7820=>722,7821=>500,
-7822=>722,7823=>500,7824=>611,7825=>444,7826=>611,7827=>444,7828=>611,7829=>444,7830=>500,7831=>278,
-7832=>722,7833=>500,7834=>444,7835=>333,7840=>722,7841=>444,7842=>807,7843=>529,7844=>722,7845=>444,
-7846=>722,7847=>444,7848=>722,7849=>454,7850=>722,7851=>444,7852=>722,7853=>444,7854=>722,7855=>444,
-7856=>722,7857=>444,7858=>722,7859=>454,7860=>722,7861=>444,7862=>722,7863=>444,7864=>611,7865=>444,
-7866=>611,7867=>444,7868=>611,7869=>444,7870=>611,7871=>444,7872=>611,7873=>444,7874=>613,7875=>444,
-7876=>611,7877=>444,7878=>611,7879=>444,7880=>333,7881=>278,7882=>333,7883=>278,7884=>722,7885=>500,
-7886=>722,7887=>500,7888=>722,7889=>500,7890=>722,7891=>500,7892=>722,7893=>500,7894=>722,7895=>500,
-7896=>722,7897=>500,7898=>722,7899=>516,7900=>722,7901=>516,7902=>720,7903=>516,7904=>722,7905=>516,
-7906=>722,7907=>516,7908=>722,7909=>500,7910=>717,7911=>500,7912=>800,7913=>518,7914=>800,7915=>518,
-7916=>800,7917=>518,7918=>800,7919=>518,7920=>800,7921=>518,7922=>722,7923=>500,7924=>722,7925=>500,
-7926=>722,7927=>501,7928=>722,7929=>500,7936=>583,7937=>583,7938=>583,7939=>583,7940=>583,7941=>583,
-7942=>583,7943=>583,7944=>722,7945=>722,7946=>813,7947=>817,7948=>763,7949=>765,7950=>720,7951=>722,
-7952=>426,7953=>426,7954=>426,7955=>426,7956=>426,7957=>426,7960=>770,7961=>770,7962=>902,7963=>919,
-7964=>940,7965=>936,7968=>536,7969=>536,7970=>536,7971=>536,7972=>536,7973=>536,7974=>536,7975=>536,
-7976=>847,7977=>859,7978=>986,7979=>1010,7980=>1026,7981=>1029,7982=>918,7983=>921,7984=>286,7985=>286,
-7986=>302,7987=>320,7988=>300,7989=>306,7990=>312,7991=>303,7992=>475,7993=>507,7994=>617,7995=>654,
-7996=>655,7997=>660,7998=>551,7999=>566,8000=>500,8001=>500,8002=>500,8003=>500,8004=>500,8005=>500,
-8008=>816,8009=>825,8010=>969,8011=>995,8012=>938,8013=>955,8016=>514,8017=>514,8018=>514,8019=>514,
-8020=>514,8021=>514,8022=>514,8023=>514,8025=>818,8027=>988,8029=>989,8031=>893,8032=>693,8033=>693,
-8034=>693,8035=>693,8036=>693,8037=>693,8038=>693,8039=>693,8040=>836,8041=>843,8042=>1006,8043=>1024,
-8044=>974,8045=>986,8046=>905,8047=>896,8048=>583,8049=>583,8050=>426,8051=>426,8052=>536,8053=>536,
-8054=>286,8055=>286,8056=>500,8057=>500,8058=>514,8059=>514,8060=>693,8061=>693,8064=>583,8065=>583,
-8066=>583,8067=>583,8068=>583,8069=>583,8070=>583,8071=>583,8072=>888,8073=>889,8074=>984,8075=>991,
-8076=>943,8077=>948,8078=>884,8079=>886,8080=>536,8081=>536,8082=>536,8083=>536,8084=>536,8085=>536,
-8086=>536,8087=>536,8088=>1017,8089=>1026,8090=>1153,8091=>1179,8092=>1195,8093=>1199,8094=>1088,8095=>1088,
-8096=>693,8097=>693,8098=>693,8099=>693,8100=>693,8101=>693,8102=>693,8103=>693,8104=>1034,8105=>1040,
-8106=>1210,8107=>1229,8108=>1176,8109=>1186,8110=>1098,8111=>1090,8112=>583,8113=>583,8114=>583,8115=>583,
-8116=>583,8118=>583,8119=>583,8120=>722,8121=>722,8122=>722,8123=>722,8124=>889,8125=>250,8126=>332,
-8127=>500,8128=>500,8129=>534,8130=>536,8131=>536,8132=>536,8134=>536,8135=>536,8136=>761,8137=>800,
-8138=>829,8139=>893,8140=>883,8141=>500,8142=>500,8143=>500,8144=>286,8145=>286,8146=>286,8147=>286,
-8150=>286,8151=>286,8152=>333,8153=>333,8154=>447,8155=>537,8157=>500,8158=>500,8159=>500,8160=>514,
-8161=>514,8162=>514,8163=>514,8164=>528,8165=>528,8166=>514,8167=>514,8168=>696,8169=>696,8170=>816,
-8171=>828,8172=>721,8173=>333,8174=>333,8175=>500,8178=>693,8179=>693,8180=>693,8182=>693,8183=>693,
-8184=>832,8185=>899,8186=>847,8187=>852,8188=>928,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,
-8195=>1000,8196=>333,8197=>250,8198=>167,8199=>500,8200=>250,8201=>200,8202=>100,8203=>0,8204=>0,
-8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>500,8213=>1000,8214=>293,8215=>478,8219=>250,
-8223=>444,8227=>350,8228=>620,8229=>620,8231=>250,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,
-8237=>0,8238=>0,8239=>250,8241=>1363,8242=>247,8243=>411,8244=>611,8245=>220,8246=>440,8247=>660,
-8248=>469,8251=>629,8252=>666,8253=>444,8254=>500,8255=>953,8256=>953,8257=>314,8258=>931,8259=>333,
-8260=>167,8261=>383,8262=>383,8263=>888,8264=>777,8265=>777,8266=>500,8267=>453,8268=>453,8269=>450,
-8270=>500,8271=>278,8272=>882,8273=>500,8274=>497,8275=>500,8276=>953,8277=>512,8278=>410,8279=>855,
-8280=>620,8281=>620,8282=>179,8283=>621,8284=>564,8285=>179,8286=>179,8287=>111,8288=>0,8289=>0,
-8290=>0,8291=>0,8292=>0,8304=>320,8305=>300,8308=>320,8309=>320,8310=>320,8311=>320,8312=>320,
-8313=>320,8314=>300,8315=>300,8316=>300,8317=>216,8318=>216,8319=>300,8320=>320,8321=>320,8322=>320,
-8323=>320,8324=>320,8325=>320,8326=>320,8327=>320,8328=>320,8329=>320,8330=>300,8331=>300,8332=>300,
-8333=>216,8334=>216,8336=>320,8337=>320,8338=>320,8339=>320,8340=>320,8352=>698,8353=>667,8354=>667,
-8355=>556,8356=>500,8357=>778,8358=>722,8359=>940,8360=>1026,8361=>813,8362=>869,8363=>512,8365=>722,
-8366=>611,8367=>1340,8368=>489,8369=>601,8370=>619,8371=>722,8372=>556,8373=>611,8400=>0,8401=>0,
-8402=>0,8403=>0,8404=>0,8405=>0,8406=>0,8407=>0,8408=>0,8409=>0,8410=>0,8411=>0,
-8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8418=>0,8419=>0,8420=>0,8421=>0,
-8422=>0,8423=>0,8424=>0,8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,
-8432=>0,8448=>751,8449=>723,8450=>674,8451=>954,8452=>556,8453=>781,8454=>806,8455=>518,8456=>667,
-8457=>822,8458=>490,8459=>824,8460=>663,8461=>818,8462=>500,8463=>500,8464=>578,8465=>613,8466=>715,
-8467=>417,8468=>778,8469=>751,8470=>880,8471=>760,8472=>832,8473=>589,8474=>729,8475=>892,8476=>711,
-8477=>755,8478=>667,8479=>667,8480=>879,8481=>1156,8483=>722,8484=>659,8485=>389,8486=>743,8487=>757,
-8488=>663,8489=>286,8490=>722,8491=>722,8492=>846,8493=>613,8494=>533,8495=>363,8496=>587,8497=>690,
-8498=>556,8499=>1021,8500=>387,8501=>537,8502=>537,8503=>350,8504=>537,8505=>417,8506=>906,8507=>1155,
-8513=>663,8514=>485,8515=>485,8516=>637,8522=>516,8523=>778,8525=>899,8526=>500,8531=>750,8532=>750,
-8533=>750,8534=>750,8535=>750,8536=>750,8537=>750,8538=>750,8539=>750,8540=>750,8541=>750,8542=>750,
-8543=>750,8544=>333,8545=>630,8546=>927,8547=>1019,8548=>722,8549=>1019,8550=>1316,8551=>1629,8552=>1019,
-8553=>722,8554=>1019,8555=>1316,8556=>611,8557=>667,8558=>722,8559=>889,8560=>278,8561=>556,8562=>834,
-8563=>778,8564=>500,8565=>778,8566=>1056,8567=>1334,8568=>778,8569=>500,8570=>778,8571=>1056,8572=>278,
-8573=>444,8574=>500,8575=>778,8592=>964,8593=>472,8594=>964,8595=>500,8596=>964,8597=>499,8598=>964,
-8599=>964,8600=>964,8601=>964,8602=>964,8603=>964,8604=>1009,8605=>1009,8606=>964,8607=>500,8608=>964,
-8609=>499,8610=>1093,8611=>1093,8612=>1093,8613=>500,8614=>1093,8615=>500,8616=>500,8617=>964,8618=>964,
-8619=>964,8620=>964,8621=>1151,8622=>964,8624=>482,8625=>482,8626=>482,8627=>482,8628=>658,8629=>658,
-8630=>1069,8631=>1069,8634=>939,8635=>939,8636=>964,8637=>964,8638=>499,8639=>499,8640=>964,8641=>964,
-8642=>499,8643=>499,8644=>964,8645=>840,8646=>964,8647=>964,8648=>840,8649=>964,8650=>840,8651=>964,
-8652=>964,8653=>964,8654=>964,8655=>964,8656=>964,8657=>550,8658=>964,8659=>550,8660=>964,8661=>550,
-8662=>1047,8663=>1047,8664=>1047,8665=>1047,8666=>964,8667=>964,8668=>1092,8669=>1092,8672=>964,8674=>964,
-8704=>587,8705=>716,8706=>494,8707=>587,8708=>587,8709=>746,8710=>612,8711=>612,8712=>536,8713=>536,
-8714=>439,8715=>536,8716=>536,8717=>439,8718=>506,8719=>823,8720=>823,8721=>713,8722=>564,8723=>564,
-8724=>564,8725=>636,8726=>636,8727=>471,8728=>497,8729=>497,8730=>549,8731=>549,8732=>549,8733=>636,
-8734=>853,8735=>509,8736=>575,8737=>559,8738=>509,8739=>200,8740=>250,8741=>320,8742=>320,8743=>564,
-8744=>564,8745=>654,8746=>654,8747=>416,8748=>750,8749=>1083,8750=>722,8751=>750,8752=>1083,8753=>697,
-8754=>722,8755=>722,8756=>565,8757=>568,8758=>250,8759=>629,8760=>564,8761=>758,8762=>564,8763=>636,
-8764=>636,8765=>636,8766=>503,8767=>614,8768=>636,8769=>636,8770=>636,8771=>636,8772=>636,8773=>636,
-8774=>636,8775=>636,8776=>636,8777=>636,8778=>636,8779=>636,8780=>636,8781=>636,8782=>636,8783=>636,
-8784=>564,8785=>564,8786=>564,8787=>564,8788=>735,8789=>755,8790=>564,8791=>564,8792=>564,8793=>564,
-8794=>564,8795=>564,8796=>600,8797=>564,8798=>564,8799=>564,8800=>564,8801=>636,8802=>636,8803=>636,
-8804=>636,8805=>636,8806=>636,8807=>636,8808=>636,8809=>636,8810=>900,8811=>899,8812=>410,8813=>636,
-8814=>636,8815=>636,8816=>636,8817=>636,8818=>636,8819=>636,8820=>636,8821=>636,8822=>636,8823=>636,
-8824=>636,8825=>636,8826=>636,8827=>636,8828=>636,8829=>636,8830=>636,8831=>636,8832=>636,8833=>636,
-8834=>636,8835=>636,8836=>636,8837=>636,8838=>636,8839=>636,8840=>636,8841=>636,8842=>636,8843=>636,
-8844=>654,8845=>654,8846=>654,8847=>636,8848=>636,8849=>636,8850=>636,8851=>636,8852=>636,8853=>636,
-8854=>636,8855=>636,8856=>636,8857=>636,8858=>636,8859=>636,8860=>636,8861=>636,8862=>636,8863=>636,
-8864=>636,8865=>636,8866=>600,8867=>600,8868=>712,8869=>712,8870=>466,8871=>466,8872=>595,8873=>588,
-8874=>710,8875=>706,8876=>595,8877=>596,8878=>588,8879=>706,8880=>636,8881=>636,8882=>636,8883=>636,
-8884=>636,8885=>636,8886=>1296,8887=>1296,8888=>966,8889=>564,8890=>626,8891=>564,8892=>564,8893=>566,
-8894=>570,8895=>582,8896=>744,8897=>744,8898=>764,8899=>764,8900=>512,8901=>250,8902=>471,8903=>629,
-8904=>636,8905=>636,8906=>636,8907=>816,8908=>816,8909=>636,8910=>636,8911=>636,8912=>636,8913=>636,
-8914=>654,8915=>654,8916=>654,8917=>636,8918=>564,8919=>564,8920=>1215,8921=>1215,8922=>636,8923=>636,
-8924=>636,8925=>636,8926=>636,8927=>636,8928=>636,8929=>636,8930=>636,8931=>636,8932=>636,8933=>636,
-8934=>636,8935=>636,8936=>636,8937=>636,8938=>636,8939=>636,8940=>636,8941=>636,8942=>250,8943=>1000,
-8944=>1000,8945=>1000,8946=>601,8947=>536,8948=>464,8949=>536,8950=>536,8951=>464,8952=>536,8953=>536,
-8954=>601,8955=>536,8956=>464,8957=>536,8958=>464,8959=>600,8960=>780,8961=>442,8962=>794,8968=>474,
-8969=>474,8970=>474,8971=>474,8976=>564,8977=>503,8978=>791,8979=>791,8980=>593,8981=>560,8982=>563,
-8983=>563,8984=>800,8985=>564,8986=>805,8988=>474,8989=>474,8990=>474,8991=>474,8992=>686,8993=>686,
-8994=>658,8995=>658,8996=>800,9000=>800,9001=>329,9002=>329,9031=>777,9032=>777,9040=>777,9047=>777,
-9054=>777,9088=>800,9089=>800,9090=>800,9091=>800,9094=>800,9095=>800,9096=>800,9097=>800,9098=>800,
-9100=>800,9103=>788,9104=>788,9105=>788,9106=>788,9108=>800,9109=>800,9110=>800,9111=>800,9112=>800,
-9113=>800,9114=>800,9115=>384,9116=>384,9117=>384,9118=>384,9119=>384,9120=>384,9121=>388,9122=>388,
-9123=>388,9124=>388,9125=>388,9126=>388,9127=>494,9128=>494,9129=>494,9130=>494,9131=>494,9132=>494,
-9133=>494,9134=>686,9138=>1287,9139=>1287,9140=>860,9141=>861,9166=>800,9167=>800,9180=>896,9181=>896,
-9182=>903,9183=>904,9184=>910,9185=>910,9186=>761,9187=>910,9189=>942,9190=>817,9251=>500,9312=>788,
-9313=>788,9314=>788,9315=>788,9316=>788,9317=>788,9318=>788,9319=>788,9320=>788,9321=>788,9472=>889,
-9473=>889,9474=>889,9475=>889,9484=>889,9485=>889,9486=>889,9487=>889,9488=>889,9489=>889,9490=>889,
-9491=>889,9492=>889,9493=>889,9494=>889,9495=>889,9496=>889,9497=>889,9498=>889,9499=>889,9500=>889,
-9501=>889,9502=>889,9503=>889,9504=>889,9505=>889,9506=>889,9507=>889,9508=>889,9509=>889,9510=>889,
-9511=>889,9512=>889,9513=>889,9514=>889,9515=>889,9516=>889,9517=>889,9518=>889,9519=>889,9520=>889,
-9521=>889,9522=>889,9523=>889,9524=>889,9525=>889,9526=>889,9527=>889,9528=>889,9529=>889,9530=>889,
-9531=>889,9532=>889,9533=>889,9534=>889,9535=>889,9536=>889,9537=>889,9538=>889,9539=>889,9540=>889,
-9541=>889,9542=>889,9543=>889,9544=>889,9545=>889,9546=>889,9547=>889,9552=>889,9553=>889,9554=>889,
-9555=>889,9556=>889,9557=>889,9558=>889,9559=>889,9560=>889,9561=>889,9562=>889,9563=>889,9564=>889,
-9565=>889,9566=>889,9567=>889,9568=>889,9569=>889,9570=>889,9571=>889,9572=>889,9573=>889,9574=>889,
-9575=>889,9576=>889,9577=>889,9578=>889,9579=>889,9580=>889,9581=>889,9582=>889,9583=>889,9584=>889,
-9585=>889,9586=>889,9587=>889,9588=>889,9589=>889,9590=>889,9591=>889,9592=>889,9593=>889,9594=>889,
-9595=>889,9596=>600,9597=>889,9598=>600,9599=>889,9600=>761,9601=>761,9602=>761,9603=>761,9604=>761,
-9605=>761,9606=>761,9607=>761,9608=>761,9609=>761,9610=>761,9611=>761,9612=>761,9613=>761,9614=>761,
-9615=>761,9616=>761,9617=>1000,9619=>1000,9620=>761,9621=>761,9622=>761,9623=>761,9624=>761,9625=>761,
-9626=>761,9627=>761,9628=>761,9629=>761,9630=>761,9631=>761,9632=>761,9633=>761,9634=>761,9635=>761,
-9636=>761,9637=>761,9638=>761,9639=>761,9640=>761,9641=>761,9642=>532,9643=>532,9644=>761,9645=>761,
-9646=>761,9647=>761,9648=>761,9649=>761,9650=>892,9651=>892,9652=>446,9653=>446,9654=>892,9655=>892,
-9656=>446,9657=>446,9658=>892,9659=>892,9660=>892,9661=>892,9662=>446,9663=>446,9664=>892,9665=>892,
-9666=>446,9667=>446,9668=>892,9669=>892,9670=>788,9671=>788,9672=>788,9673=>791,9674=>494,9675=>791,
-9676=>791,9677=>785,9678=>791,9679=>791,9680=>791,9681=>791,9682=>791,9683=>791,9684=>791,9685=>791,
-9686=>791,9687=>791,9688=>761,9689=>761,9690=>761,9691=>761,9692=>791,9693=>791,9694=>791,9695=>791,
-9696=>791,9697=>791,9698=>761,9699=>761,9700=>761,9701=>761,9702=>791,9703=>761,9704=>761,9705=>761,
-9706=>761,9707=>761,9708=>892,9709=>892,9710=>892,9711=>851,9712=>761,9713=>761,9714=>761,9715=>761,
-9716=>791,9717=>791,9718=>791,9719=>791,9720=>761,9721=>761,9722=>761,9723=>761,9724=>761,9725=>570,
-9726=>570,9727=>761,9728=>800,9729=>800,9730=>748,9731=>800,9732=>800,9733=>811,9734=>816,9735=>468,
-9736=>677,9737=>724,9738=>944,9739=>944,9740=>686,9741=>944,9742=>715,9743=>715,9744=>757,9745=>755,
-9746=>755,9747=>756,9748=>800,9749=>837,9750=>719,9751=>719,9752=>782,9753=>822,9754=>954,9755=>954,
-9756=>933,9757=>489,9758=>933,9759=>489,9760=>517,9761=>660,9762=>724,9763=>732,9764=>886,9765=>577,
-9766=>489,9767=>563,9768=>490,9769=>770,9770=>725,9771=>860,9772=>668,9773=>753,9774=>724,9775=>730,
-9776=>600,9777=>600,9778=>600,9779=>600,9780=>600,9781=>600,9782=>600,9783=>600,9784=>730,9785=>724,
-9786=>724,9787=>724,9788=>799,9789=>659,9790=>659,9791=>495,9792=>495,9793=>495,9794=>686,9795=>661,
-9796=>544,9797=>608,9798=>605,9799=>545,9800=>804,9801=>583,9802=>796,9803=>1006,9804=>825,9805=>1189,
-9806=>1144,9807=>1189,9808=>683,9809=>808,9810=>1146,9811=>797,9812=>758,9813=>757,9814=>758,9815=>758,
-9816=>758,9817=>758,9818=>758,9819=>758,9820=>758,9821=>758,9822=>758,9823=>758,9824=>770,9825=>770,
-9826=>770,9827=>770,9828=>770,9829=>770,9830=>770,9831=>770,9832=>895,9833=>333,9834=>555,9835=>722,
-9836=>722,9837=>415,9838=>377,9839=>402,9840=>642,9841=>655,9842=>869,9843=>905,9844=>905,9845=>905,
-9846=>905,9847=>905,9848=>905,9849=>905,9850=>905,9851=>1016,9852=>1064,9853=>1064,9854=>954,9855=>606,
-9856=>522,9857=>522,9858=>522,9859=>522,9860=>522,9861=>522,9862=>845,9863=>844,9864=>844,9865=>844,
-9866=>748,9867=>748,9868=>748,9869=>748,9870=>748,9871=>748,9872=>726,9873=>726,9874=>963,9875=>770,
-9876=>1038,9877=>388,9878=>997,9879=>787,9880=>508,9881=>809,9882=>1014,9883=>859,9884=>818,9885=>972,
-9888=>1000,9889=>546,9890=>784,9891=>786,9892=>738,9893=>542,9894=>601,9895=>700,9896=>511,9897=>861,
-9898=>611,9899=>611,9900=>544,9901=>782,9902=>1025,9903=>1141,9904=>1000,9905=>513,9906=>510,9907=>642,
-9908=>722,9909=>719,9910=>777,9911=>495,9912=>602,9913=>836,9914=>666,9915=>666,9916=>691,9920=>689,
-9921=>689,9922=>689,9923=>689,9985=>974,9986=>961,9987=>974,9988=>980,9990=>789,9991=>790,9992=>791,
-9993=>690,9996=>549,9997=>855,9998=>911,9999=>933,10000=>911,10001=>945,10002=>974,10003=>755,10004=>846,
-10005=>762,10006=>761,10007=>571,10008=>677,10009=>763,10010=>760,10011=>759,10012=>754,10013=>494,10014=>552,
-10015=>537,10016=>577,10017=>692,10018=>786,10019=>788,10020=>788,10021=>790,10022=>793,10023=>794,10025=>823,
-10026=>789,10027=>841,10028=>823,10029=>833,10030=>816,10031=>831,10032=>923,10033=>744,10034=>723,10035=>749,
-10036=>790,10037=>792,10038=>695,10039=>776,10040=>768,10041=>792,10042=>759,10043=>707,10044=>708,10045=>682,
-10046=>701,10047=>826,10048=>815,10049=>789,10050=>789,10051=>707,10052=>687,10053=>696,10054=>689,10055=>786,
-10056=>787,10057=>713,10058=>791,10059=>785,10061=>873,10063=>762,10064=>762,10065=>759,10066=>759,10070=>784,
-10072=>138,10073=>277,10074=>415,10075=>392,10076=>392,10077=>668,10078=>668,10081=>732,10082=>544,10083=>544,
-10084=>910,10085=>667,10086=>760,10087=>760,10088=>390,10089=>390,10090=>317,10091=>317,10092=>276,10093=>276,
-10094=>509,10095=>509,10096=>410,10097=>410,10098=>234,10099=>234,10100=>334,10101=>334,10102=>788,10103=>788,
-10104=>788,10105=>788,10106=>788,10107=>788,10108=>788,10109=>788,10110=>788,10111=>788,10112=>788,10113=>788,
-10114=>788,10115=>788,10116=>788,10117=>788,10118=>788,10119=>788,10120=>788,10121=>788,10122=>788,10123=>788,
-10124=>788,10125=>788,10126=>788,10127=>788,10128=>788,10129=>788,10130=>788,10131=>788,10132=>894,10136=>748,
-10137=>924,10138=>748,10139=>918,10140=>927,10141=>928,10142=>928,10143=>834,10144=>873,10145=>828,10146=>924,
-10147=>924,10148=>917,10149=>930,10150=>931,10151=>463,10152=>883,10153=>836,10154=>836,10155=>867,10156=>867,
-10157=>696,10158=>696,10159=>874,10161=>874,10162=>760,10163=>946,10164=>771,10165=>865,10166=>771,10167=>888,
-10168=>967,10169=>888,10170=>831,10171=>873,10172=>927,10173=>970,10174=>918,10214=>545,10215=>545,10216=>329,
-10217=>329,10218=>496,10219=>496,10229=>1000,10230=>1000,10231=>1000,10232=>1000,10233=>1000,10234=>1000,10235=>1000,
-10236=>1000,10752=>860,10753=>860,10754=>860,10755=>766,10756=>766,10757=>756,10758=>756,10761=>745,10781=>702,
-10815=>722,11008=>1000,11009=>1000,11010=>1000,11011=>1000,11012=>1222,11013=>1000,11014=>1000,11015=>1000,11016=>1000,
-11017=>1000,11018=>1000,11019=>1000,11020=>1244,11021=>1000,11026=>770,11027=>770,11028=>770,11029=>770,11030=>770,
-11031=>770,11032=>770,11033=>770,11034=>770,11035=>1000,11036=>1000,11037=>283,11038=>283,11039=>846,11040=>846,
-11041=>799,11042=>799,11043=>807,11044=>1000,11045=>461,11046=>461,11047=>461,11048=>461,11049=>360,11050=>360,
-11051=>283,11052=>854,11053=>854,11054=>628,11055=>628,11088=>589,11089=>443,11090=>443,11091=>802,11092=>803,
-11392=>677,11393=>463,11394=>532,11395=>381,11396=>615,11397=>438,11398=>969,11399=>660,11400=>647,11401=>440,
-11402=>593,11403=>402,11404=>573,11405=>407,11406=>698,11407=>512,11408=>726,11409=>493,11410=>267,11411=>201,
-11412=>610,11413=>433,11414=>654,11415=>468,11416=>735,11417=>536,11418=>698,11419=>511,11420=>555,11421=>378,
-11422=>722,11423=>489,11424=>724,11425=>528,11426=>517,11427=>388,11428=>647,11429=>438,11430=>615,11431=>436,
-11432=>651,11433=>462,11434=>762,11435=>538,11436=>654,11437=>461,11438=>635,11439=>461,11440=>964,11441=>677,
-11456=>689,11457=>464,11493=>499,11494=>496,11495=>986,11496=>466,11497=>444,11498=>934,11517=>256,11518=>617,
-11519=>287,11799=>333,42560=>611,42561=>444,42562=>611,42563=>444,42564=>556,42565=>389,42566=>368,42567=>286,
-42572=>1145,42573=>775,42576=>1016,42577=>736,42578=>915,42579=>684,42580=>966,42581=>664,42582=>1042,42583=>648,
-42584=>722,42585=>491,42588=>1042,42589=>648,42590=>780,42591=>550,42594=>911,42595=>633,42596=>957,42597=>635,
-42598=>1139,42599=>777,42607=>0,42608=>0,42609=>0,42610=>0,42611=>519,42620=>0,42622=>510,64256=>589,
-64257=>534,64258=>530,64259=>805,64260=>799,64262=>677,64285=>350,64286=>0,64287=>537,64288=>537,64297=>564,
-64298=>537,64299=>537,64300=>537,64301=>537,64302=>537,64303=>537,64304=>537,64305=>537,64306=>350,64307=>537,
-64308=>537,64309=>350,64310=>350,64312=>537,64313=>350,64314=>537,64315=>537,64316=>537,64318=>537,64320=>350,
-64321=>537,64323=>537,64324=>537,64326=>537,64327=>537,64328=>537,64329=>537,64330=>537,64331=>350,64332=>537,
-64333=>537,64334=>537,64335=>537,64342=>926,64343=>926,64344=>308,64345=>308,64378=>750,64379=>750,64380=>580,
-64381=>580,64394=>338,64395=>338,64402=>874,64403=>874,64404=>329,64405=>329,64508=>776,64509=>700,64510=>304,
-64511=>304,65010=>640,65020=>837,65136=>300,65140=>300,65142=>300,65144=>300,65146=>300,65148=>300,65152=>724,
-65153=>321,65154=>275,65155=>249,65156=>275,65157=>399,65158=>399,65159=>249,65160=>275,65161=>776,65162=>776,
-65163=>301,65164=>264,65165=>249,65166=>275,65167=>950,65168=>950,65169=>293,65170=>293,65171=>424,65172=>622,
-65173=>925,65174=>925,65175=>308,65176=>308,65177=>924,65178=>924,65179=>298,65180=>298,65181=>738,65182=>738,
-65183=>574,65184=>574,65185=>748,65186=>750,65187=>600,65188=>600,65189=>701,65190=>775,65191=>596,65192=>596,
-65193=>397,65194=>397,65195=>399,65196=>399,65197=>328,65198=>328,65199=>331,65200=>331,65201=>951,65202=>951,
-65203=>600,65204=>600,65205=>949,65206=>949,65207=>649,65208=>649,65209=>949,65210=>949,65211=>823,65212=>823,
-65213=>949,65214=>949,65215=>805,65216=>805,65217=>557,65218=>557,65219=>460,65220=>460,65221=>550,65222=>550,
-65223=>455,65224=>550,65225=>625,65226=>575,65227=>674,65228=>550,65229=>602,65230=>577,65231=>578,65232=>577,
-65233=>801,65234=>801,65235=>300,65236=>300,65237=>696,65238=>696,65239=>650,65240=>650,65241=>757,65242=>757,
-65243=>318,65244=>318,65245=>655,65246=>655,65247=>206,65248=>206,65249=>549,65250=>549,65251=>403,65252=>403,
-65253=>651,65254=>651,65255=>323,65256=>323,65257=>424,65258=>622,65259=>525,65260=>476,65261=>399,65262=>399,
-65263=>776,65264=>776,65265=>776,65266=>776,65267=>296,65268=>264,65269=>676,65270=>724,65271=>676,65272=>724,
-65273=>676,65274=>724,65275=>676,65276=>724,65279=>0,65533=>788);
-$enc='';
+$dw=700;
$diff='';
+$originalsize=1687516;
+$enc='';
$file='freeserif.z';
$ctg='freeserif.ctg.z';
-$originalsize=1483772;
-?>
\ No newline at end of file
+$desc=array('Flags'=>32,'FontBBox'=>'[-879 -545 1767 934]','ItalicAngle'=>0,'Ascent'=>900,'Descent'=>-300,'Leading'=>90,'CapHeight'=>662,'XHeight'=>450,'StemV'=>70,'StemH'=>30,'AvgWidth'=>401,'MaxWidth'=>1752,'MissingWidth'=>700);
+$cw=array(0=>0,1=>700,2=>700,3=>700,4=>700,5=>700,6=>700,7=>700,8=>0,9=>600,10=>700,11=>700,12=>700,13=>600,14=>700,15=>700,16=>700,17=>700,18=>700,19=>700,20=>700,21=>700,22=>700,23=>700,24=>700,25=>700,26=>700,27=>700,28=>700,29=>0,30=>700,31=>700,32=>250,33=>333,34=>408,35=>500,36=>500,37=>833,38=>778,39=>180,40=>333,41=>333,42=>500,43=>564,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>278,59=>278,60=>564,61=>564,62=>564,63=>444,64=>921,65=>722,66=>667,67=>667,68=>722,69=>611,70=>556,71=>722,72=>722,73=>333,74=>389,75=>722,76=>611,77=>889,78=>722,79=>722,80=>556,81=>722,82=>667,83=>556,84=>611,85=>722,86=>722,87=>944,88=>722,89=>722,90=>611,91=>333,92=>296,93=>333,94=>469,95=>500,96=>333,97=>444,98=>500,99=>444,100=>500,101=>444,102=>333,103=>500,104=>500,105=>278,106=>278,107=>500,108=>278,109=>778,110=>500,111=>500,112=>500,113=>500,114=>333,115=>389,116=>278,117=>500,118=>500,119=>722,120=>500,121=>500,122=>444,123=>480,124=>200,125=>480,126=>541,127=>700,128=>722,129=>722,130=>667,131=>611,132=>722,133=>722,134=>722,135=>444,136=>444,137=>444,138=>444,139=>444,140=>444,141=>444,142=>444,143=>444,144=>444,145=>444,146=>278,147=>278,148=>278,149=>278,150=>500,151=>500,152=>500,153=>500,154=>500,155=>500,156=>500,157=>500,158=>500,159=>500,160=>250,161=>333,162=>500,163=>500,164=>500,165=>500,166=>200,167=>500,168=>333,169=>793,170=>276,171=>444,172=>564,173=>333,174=>792,175=>333,176=>400,177=>564,178=>320,179=>320,180=>333,181=>500,182=>483,183=>250,184=>333,185=>320,186=>310,187=>441,188=>750,189=>750,190=>750,191=>444,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>889,199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333,208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>564,216=>722,217=>722,218=>722,219=>722,220=>722,221=>722,222=>576,223=>500,224=>444,225=>444,226=>444,227=>444,228=>444,229=>444,230=>651,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,238=>278,239=>278,240=>501,241=>500,242=>500,243=>500,244=>500,245=>500,246=>500,247=>564,248=>500,249=>500,250=>500,251=>500,252=>500,253=>500,254=>496,255=>500,256=>722,257=>444,258=>722,259=>444,260=>722,261=>444,262=>667,263=>444,264=>667,265=>444,266=>667,267=>444,268=>667,269=>444,270=>722,271=>630,272=>722,273=>500,274=>611,275=>444,276=>611,277=>444,278=>611,279=>444,280=>611,281=>444,282=>611,283=>444,284=>722,285=>500,286=>722,287=>500,288=>722,289=>500,290=>722,291=>500,292=>722,293=>500,294=>722,295=>500,296=>333,297=>278,298=>333,299=>278,300=>333,301=>278,302=>333,303=>278,304=>333,305=>278,306=>703,307=>529,308=>389,309=>278,310=>722,311=>500,312=>500,313=>611,314=>278,315=>611,316=>278,317=>611,318=>396,319=>611,320=>444,321=>611,322=>278,323=>722,324=>500,325=>722,326=>500,327=>722,328=>500,329=>556,330=>721,331=>500,332=>722,333=>500,334=>722,335=>500,336=>722,337=>500,338=>889,339=>709,340=>667,341=>333,342=>667,343=>333,344=>667,345=>333,346=>556,347=>389,348=>556,349=>389,350=>556,351=>389,352=>556,353=>389,354=>611,355=>278,356=>611,357=>415,358=>611,359=>278,360=>722,361=>500,362=>722,363=>500,364=>722,365=>500,366=>722,367=>500,368=>722,369=>500,370=>722,371=>500,372=>944,373=>722,374=>722,375=>500,376=>722,377=>611,378=>444,379=>611,380=>444,381=>611,382=>444,383=>333,384=>500,385=>777,386=>576,387=>520,388=>646,389=>520,390=>667,391=>811,392=>558,393=>722,394=>830,395=>646,396=>500,397=>534,398=>611,399=>710,400=>518,401=>629,402=>358,403=>824,404=>665,405=>729,406=>333,407=>336,408=>810,409=>500,410=>286,411=>480,412=>944,413=>798,414=>500,415=>726,416=>722,417=>540,418=>1043,419=>778,420=>667,421=>500,422=>667,423=>556,424=>389,425=>627,426=>592,427=>285,428=>626,429=>376,430=>611,431=>782,432=>544,433=>743,434=>722,435=>813,436=>657,437=>611,438=>444,439=>530,440=>556,441=>389,442=>394,443=>500,444=>615,445=>439,446=>421,447=>500,448=>190,449=>350,450=>600,451=>333,452=>1333,453=>1166,454=>944,455=>1000,456=>889,457=>556,458=>1111,459=>1000,460=>778,461=>722,462=>444,463=>333,464=>278,465=>722,466=>500,467=>722,468=>500,469=>722,470=>500,471=>722,472=>500,473=>722,474=>500,475=>722,476=>500,477=>444,478=>722,479=>444,480=>722,481=>444,482=>889,483=>651,484=>722,485=>500,486=>722,487=>500,488=>722,489=>500,490=>722,491=>500,492=>722,493=>500,494=>530,495=>389,496=>278,497=>1333,498=>1166,499=>944,500=>722,501=>500,502=>944,503=>522,504=>722,505=>500,506=>722,507=>444,508=>889,509=>651,510=>722,511=>500,512=>722,513=>444,514=>722,515=>444,516=>611,517=>444,518=>611,519=>444,520=>333,521=>278,522=>333,523=>278,524=>722,525=>500,526=>722,527=>500,528=>667,529=>333,530=>667,531=>333,532=>722,533=>500,534=>722,535=>500,536=>556,537=>389,538=>611,539=>279,540=>424,541=>455,542=>722,543=>500,544=>715,545=>588,546=>565,547=>468,548=>611,549=>444,550=>722,551=>444,552=>611,553=>444,554=>722,555=>500,556=>722,557=>500,558=>722,559=>500,560=>722,561=>500,562=>722,563=>500,564=>407,565=>597,566=>379,567=>278,568=>771,569=>760,570=>722,571=>667,572=>444,573=>611,574=>611,575=>389,576=>444,577=>444,578=>444,579=>667,580=>722,581=>722,582=>611,583=>444,584=>389,585=>278,586=>810,587=>601,588=>667,589=>333,590=>722,591=>500,592=>444,593=>500,594=>507,595=>500,596=>444,597=>444,598=>606,599=>624,600=>444,601=>444,602=>703,603=>426,604=>426,605=>662,606=>454,607=>353,608=>624,609=>500,610=>484,611=>500,612=>582,613=>500,614=>500,615=>500,616=>278,617=>306,618=>278,619=>340,620=>294,621=>364,622=>556,623=>778,624=>778,625=>778,626=>596,627=>599,628=>500,629=>491,630=>668,631=>693,632=>640,633=>336,634=>339,635=>444,636=>338,637=>339,638=>372,639=>372,640=>457,641=>456,642=>389,643=>466,644=>483,645=>466,646=>506,647=>278,648=>336,649=>512,650=>517,651=>514,652=>500,653=>722,654=>500,655=>510,656=>600,657=>444,658=>389,659=>456,660=>444,661=>444,662=>444,663=>444,664=>722,665=>468,666=>454,667=>623,668=>524,669=>354,670=>505,671=>443,672=>625,673=>444,674=>444,675=>798,676=>795,677=>805,678=>539,679=>549,680=>678,681=>722,682=>533,683=>554,684=>500,685=>500,686=>611,687=>716,688=>332,689=>333,690=>240,691=>228,692=>228,693=>299,694=>300,695=>477,696=>328,697=>250,698=>408,699=>333,700=>333,701=>333,702=>333,703=>333,704=>258,705=>258,706=>374,707=>374,708=>383,709=>383,710=>333,711=>333,712=>250,713=>333,714=>333,715=>333,716=>250,717=>333,718=>333,719=>333,720=>278,721=>278,722=>333,723=>333,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,731=>333,732=>333,733=>382,734=>336,735=>352,736=>331,737=>187,738=>263,739=>332,740=>300,741=>460,742=>460,743=>460,744=>460,745=>460,746=>477,747=>475,748=>339,749=>333,750=>444,751=>383,752=>383,753=>294,754=>294,755=>327,756=>261,757=>437,758=>437,759=>333,760=>278,761=>175,762=>175,763=>175,764=>175,765=>337,766=>337,767=>326,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,878=>0,879=>0,880=>535,881=>433,882=>537,883=>497,884=>199,885=>199,890=>332,894=>278,900=>267,901=>333,902=>722,903=>250,904=>800,905=>902,906=>507,908=>818,910=>861,911=>871,912=>286,913=>722,914=>667,915=>586,916=>660,917=>611,918=>611,919=>722,920=>726,921=>333,922=>722,923=>722,924=>889,925=>722,926=>628,927=>722,928=>722,929=>556,931=>627,932=>611,933=>696,934=>742,935=>722,936=>808,937=>743,938=>333,939=>718,940=>583,941=>426,942=>536,943=>286,944=>514,945=>583,946=>527,947=>480,948=>534,949=>426,950=>466,951=>536,952=>534,953=>286,954=>544,955=>476,956=>536,957=>480,958=>514,959=>500,960=>587,961=>528,962=>452,963=>537,964=>420,965=>514,966=>643,967=>480,968=>693,969=>693,970=>286,971=>514,972=>500,973=>514,974=>693,976=>534,977=>587,978=>620,979=>809,980=>620,981=>640,982=>684,983=>534,984=>556,985=>500,986=>594,987=>426,988=>556,989=>445,990=>656,991=>400,992=>722,993=>570,994=>960,995=>673,996=>592,997=>522,998=>580,999=>460,1000=>500,1001=>338,1002=>842,1003=>593,1004=>564,1005=>412,1006=>634,1007=>447,1008=>534,1009=>534,1010=>485,1011=>278,1012=>726,1013=>361,1014=>361,1015=>576,1016=>542,1017=>667,1018=>889,1019=>709,1020=>534,1021=>667,1022=>1000,1023=>1000,1024=>613,1025=>613,1026=>748,1027=>570,1028=>659,1029=>487,1030=>337,1031=>337,1032=>385,1033=>943,1034=>985,1035=>827,1036=>669,1037=>723,1038=>709,1039=>723,1040=>711,1041=>576,1042=>626,1043=>570,1044=>639,1045=>613,1046=>937,1047=>580,1048=>723,1049=>723,1050=>669,1051=>684,1052=>891,1053=>723,1054=>722,1055=>723,1056=>576,1057=>659,1058=>608,1059=>709,1060=>750,1061=>714,1062=>728,1063=>682,1064=>984,1065=>988,1066=>725,1067=>863,1068=>576,1069=>659,1070=>966,1071=>648,1072=>434,1073=>495,1074=>468,1075=>388,1076=>490,1077=>436,1078=>662,1079=>406,1080=>524,1081=>524,1082=>498,1083=>490,1084=>632,1085=>524,1086=>491,1087=>524,1088=>500,1089=>424,1090=>422,1091=>471,1092=>694,1093=>482,1094=>524,1095=>506,1096=>756,1097=>756,1098=>505,1099=>626,1100=>431,1101=>432,1102=>664,1103=>492,1104=>434,1105=>434,1106=>479,1107=>388,1108=>432,1109=>347,1110=>269,1111=>278,1112=>278,1113=>677,1114=>711,1115=>514,1116=>498,1117=>524,1118=>471,1119=>524,1120=>978,1121=>664,1122=>718,1123=>506,1124=>947,1125=>647,1126=>901,1127=>635,1128=>1248,1129=>894,1130=>937,1131=>654,1132=>1278,1133=>907,1134=>516,1135=>391,1136=>870,1137=>694,1138=>726,1139=>491,1140=>780,1141=>550,1142=>780,1143=>550,1144=>1207,1145=>946,1146=>877,1147=>611,1148=>978,1149=>664,1150=>978,1151=>664,1152=>594,1153=>428,1154=>232,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>715,1163=>522,1164=>562,1165=>430,1166=>556,1167=>511,1168=>564,1169=>398,1170=>586,1171=>392,1172=>623,1173=>463,1174=>1001,1175=>688,1176=>580,1177=>401,1178=>696,1179=>517,1180=>713,1181=>532,1182=>669,1183=>498,1184=>813,1185=>572,1186=>730,1187=>524,1188=>934,1189=>652,1190=>1030,1191=>722,1192=>750,1193=>516,1194=>659,1195=>424,1196=>608,1197=>452,1198=>722,1199=>563,1200=>722,1201=>562,1202=>773,1203=>518,1204=>972,1205=>693,1206=>681,1207=>506,1208=>726,1209=>540,1210=>682,1211=>510,1212=>866,1213=>553,1214=>866,1215=>553,1216=>333,1217=>937,1218=>662,1219=>618,1220=>448,1221=>702,1222=>490,1223=>723,1224=>499,1225=>723,1226=>547,1227=>682,1228=>506,1229=>891,1230=>632,1231=>337,1232=>711,1233=>434,1234=>711,1235=>434,1236=>891,1237=>630,1238=>623,1239=>436,1240=>710,1241=>436,1242=>710,1243=>436,1244=>937,1245=>662,1246=>580,1247=>406,1248=>530,1249=>366,1250=>723,1251=>524,1252=>723,1253=>524,1254=>722,1255=>491,1256=>722,1257=>491,1258=>722,1259=>491,1260=>659,1261=>432,1262=>709,1263=>471,1264=>709,1265=>471,1266=>709,1267=>471,1268=>682,1269=>506,1270=>572,1271=>388,1272=>863,1273=>626,1274=>572,1275=>388,1276=>720,1277=>445,1278=>722,1279=>495,1280=>556,1281=>504,1282=>900,1283=>634,1284=>803,1285=>518,1286=>553,1287=>471,1288=>964,1289=>637,1290=>968,1291=>682,1292=>722,1293=>433,1294=>714,1295=>504,1296=>532,1297=>407,1298=>702,1299=>489,1300=>960,1301=>644,1302=>823,1303=>698,1304=>961,1305=>748,1306=>722,1307=>505,1308=>947,1309=>693,1310=>669,1311=>498,1312=>992,1313=>710,1314=>1029,1315=>742,1329=>794,1330=>712,1331=>782,1332=>854,1333=>711,1334=>702,1335=>707,1336=>655,1337=>777,1338=>782,1339=>710,1340=>663,1341=>830,1342=>917,1343=>672,1344=>469,1345=>666,1346=>858,1347=>685,1348=>856,1349=>618,1350=>858,1351=>709,1352=>719,1353=>714,1354=>731,1355=>702,1356=>874,1357=>719,1358=>844,1359=>519,1360=>703,1361=>608,1362=>586,1363=>750,1364=>780,1365=>714,1366=>684,1369=>120,1370=>120,1371=>269,1372=>307,1373=>241,1374=>312,1375=>300,1377=>786,1378=>506,1379=>542,1380=>541,1381=>506,1382=>503,1383=>478,1384=>499,1385=>541,1386=>539,1387=>508,1388=>289,1389=>750,1390=>540,1391=>513,1392=>508,1393=>503,1394=>531,1395=>518,1396=>500,1397=>243,1398=>473,1399=>406,1400=>499,1401=>407,1402=>793,1403=>414,1404=>463,1405=>500,1406=>516,1407=>758,1408=>504,1409=>466,1410=>288,1411=>758,1412=>510,1413=>501,1414=>562,1415=>543,1417=>278,1418=>280,1425=>0,1426=>0,1427=>0,1428=>0,1429=>0,1430=>0,1431=>418,1432=>0,1433=>0,1434=>0,1435=>0,1436=>0,1437=>0,1438=>0,1439=>0,1440=>0,1441=>0,1442=>0,1443=>0,1444=>0,1445=>0,1446=>0,1447=>0,1448=>0,1449=>0,1450=>0,1451=>0,1452=>0,1453=>0,1454=>0,1455=>0,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>440,1471=>0,1472=>126,1473=>0,1474=>0,1475=>418,1476=>0,1477=>0,1478=>350,1479=>0,1488=>537,1489=>537,1490=>350,1491=>537,1492=>537,1493=>350,1494=>350,1495=>537,1496=>537,1497=>350,1498=>537,1499=>537,1500=>537,1501=>537,1502=>537,1503=>350,1504=>350,1505=>537,1506=>537,1507=>537,1508=>537,1509=>537,1510=>537,1511=>537,1512=>537,1513=>537,1514=>537,1520=>537,1521=>537,1522=>537,1523=>396,1524=>396,1548=>226,1563=>250,1567=>473,1569=>350,1570=>321,1571=>249,1572=>399,1573=>249,1574=>776,1575=>249,1576=>950,1577=>424,1578=>925,1579=>924,1580=>738,1581=>748,1582=>701,1583=>397,1584=>399,1585=>328,1586=>331,1587=>951,1588=>949,1589=>949,1590=>949,1591=>557,1592=>550,1593=>625,1594=>602,1601=>801,1602=>696,1603=>757,1604=>655,1605=>549,1606=>651,1607=>424,1608=>399,1609=>776,1610=>776,1611=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1619=>0,1620=>0,1621=>0,1632=>297,1633=>254,1634=>427,1635=>497,1636=>440,1637=>465,1638=>466,1639=>421,1640=>459,1641=>424,1643=>212,1652=>300,1662=>926,1670=>750,1688=>338,1711=>874,1740=>776,1748=>176,1920=>450,1921=>501,1922=>582,1923=>544,1924=>482,1925=>433,1926=>448,1927=>462,1928=>474,1929=>471,1930=>469,1931=>537,1932=>499,1933=>514,1934=>471,1935=>572,1936=>880,1937=>440,1938=>476,1939=>594,1940=>469,1941=>448,1942=>441,1943=>519,1944=>573,1945=>459,1946=>447,1947=>496,1948=>541,1949=>887,1950=>883,1951=>964,1952=>558,1953=>505,1954=>471,1955=>554,1956=>459,1957=>486,1958=>36,1959=>36,1960=>43,1961=>45,1962=>43,1963=>45,1964=>45,1965=>45,1966=>45,1967=>45,1968=>0,2304=>0,2305=>0,2306=>398,2307=>398,2308=>862,2309=>862,2310=>1042,2311=>553,2312=>553,2313=>597,2314=>848,2315=>967,2316=>828,2317=>654,2318=>654,2319=>654,2320=>654,2321=>1042,2322=>1042,2323=>1042,2324=>1042,2325=>743,2326=>798,2327=>694,2328=>694,2329=>730,2330=>734,2331=>888,2332=>814,2333=>834,2334=>734,2335=>629,2336=>629,2337=>653,2338=>609,2339=>694,2340=>654,2341=>694,2342=>588,2343=>694,2344=>654,2345=>654,2346=>615,2347=>788,2348=>621,2349=>694,2350=>694,2351=>694,2352=>575,2353=>575,2354=>787,2355=>848,2356=>848,2357=>621,2358=>654,2359=>615,2360=>734,2361=>609,2364=>398,2365=>569,2366=>341,2367=>341,2368=>341,2369=>0,2370=>0,2371=>0,2372=>0,2373=>0,2374=>0,2375=>615,2376=>615,2377=>341,2378=>341,2379=>341,2380=>341,2381=>0,2382=>0,2384=>1047,2385=>0,2386=>0,2387=>0,2388=>0,2389=>0,2392=>743,2393=>798,2394=>694,2395=>814,2396=>653,2397=>609,2398=>788,2399=>694,2400=>967,2401=>828,2402=>0,2403=>0,2404=>398,2405=>478,2406=>455,2407=>420,2408=>569,2409=>509,2410=>702,2411=>629,2412=>569,2413=>702,2414=>609,2415=>609,2416=>626,2417=>398,2418=>862,2425=>814,2426=>694,2427=>654,2428=>814,2429=>569,2430=>730,2431=>621,2433=>0,2434=>300,2435=>312,2437=>594,2438=>776,2439=>469,2440=>513,2441=>535,2442=>561,2443=>604,2444=>481,2447=>580,2448=>604,2451=>540,2452=>620,2453=>570,2454=>485,2455=>484,2456=>471,2457=>457,2458=>408,2459=>452,2460=>591,2461=>551,2462=>771,2463=>414,2464=>404,2465=>522,2466=>415,2467=>450,2468=>551,2469=>477,2470=>478,2471=>449,2472=>448,2474=>535,2475=>611,2476=>443,2477=>534,2478=>492,2479=>474,2480=>442,2482=>542,2486=>507,2487=>467,2488=>523,2489=>419,2492=>0,2493=>419,2494=>202,2495=>189,2496=>202,2497=>0,2498=>0,2499=>0,2500=>0,2503=>294,2504=>289,2507=>774,2508=>825,2509=>0,2510=>356,2519=>219,2524=>523,2525=>420,2527=>469,2528=>604,2529=>481,2530=>0,2531=>0,2534=>500,2535=>437,2536=>479,2537=>507,2538=>497,2539=>500,2540=>482,2541=>503,2542=>517,2543=>481,2544=>443,2545=>443,2546=>429,2547=>383,2548=>432,2549=>478,2550=>539,2551=>158,2552=>365,2553=>280,2554=>357,2561=>0,2562=>0,2563=>385,2565=>728,2566=>884,2567=>656,2568=>656,2569=>580,2570=>580,2575=>482,2576=>728,2579=>580,2580=>728,2581=>534,2582=>518,2583=>602,2584=>674,2585=>530,2586=>502,2587=>576,2588=>476,2589=>558,2590=>501,2591=>510,2592=>540,2593=>508,2594=>512,2595=>558,2596=>468,2597=>518,2598=>488,2599=>518,2600=>522,2602=>518,2603=>490,2604=>546,2605=>500,2606=>530,2607=>654,2608=>522,2610=>710,2611=>710,2613=>498,2614=>530,2616=>530,2617=>501,2620=>286,2622=>156,2623=>174,2624=>174,2625=>0,2626=>0,2631=>0,2632=>0,2635=>0,2636=>0,2637=>0,2641=>0,2649=>534,2650=>618,2651=>492,2652=>484,2654=>506,2662=>616,2663=>480,2664=>560,2665=>480,2666=>468,2667=>492,2668=>514,2669=>538,2670=>572,2671=>560,2672=>0,2673=>0,2674=>498,2675=>596,2676=>900,2677=>0,2946=>0,2947=>616,2949=>910,2950=>1072,2951=>848,2952=>591,2953=>492,2954=>1123,2958=>602,2959=>602,2960=>691,2962=>753,2963=>753,2964=>1597,2965=>677,2969=>697,2970=>607,2972=>691,2974=>871,2975=>589,2979=>1230,2980=>688,2984=>560,2985=>911,2986=>477,2990=>625,2991=>672,2992=>452,2993=>553,2994=>651,2995=>804,2996=>645,2997=>740,2998=>767,2999=>865,3000=>870,3001=>1067,3006=>452,3007=>176,3008=>0,3009=>404,3010=>601,3014=>690,3015=>500,3016=>840,3018=>1150,3019=>1000,3020=>1488,3021=>0,3024=>753,3031=>844,3046=>500,3047=>677,3048=>829,3049=>673,3050=>793,3051=>845,3052=>861,3053=>602,3054=>910,3055=>807,3056=>553,3057=>697,3058=>906,3059=>609,3060=>853,3061=>1585,3062=>664,3063=>978,3064=>1325,3065=>845,3066=>731,3330=>417,3331=>221,3333=>1055,3334=>1195,3335=>792,3336=>1469,3337=>570,3338=>1244,3339=>676,3340=>897,3342=>1008,3343=>1008,3344=>1538,3346=>586,3347=>981,3348=>1254,3349=>776,3350=>798,3351=>691,3352=>1095,3353=>811,3354=>728,3355=>963,3356=>704,3357=>1245,3358=>1106,3359=>466,3360=>531,3361=>984,3362=>1028,3363=>1102,3364=>780,3365=>732,3366=>485,3367=>737,3368=>747,3370=>780,3371=>962,3372=>1023,3373=>500,3374=>511,3375=>792,3376=>530,3377=>512,3378=>712,3379=>556,3380=>519,3381=>716,3382=>786,3383=>921,3384=>977,3385=>978,3389=>375,3390=>403,3391=>283,3392=>323,3393=>275,3394=>258,3395=>378,3396=>378,3398=>542,3399=>478,3400=>1070,3402=>0,3403=>0,3404=>0,3405=>89,3415=>677,3424=>676,3425=>1006,3426=>0,3427=>0,3430=>559,3431=>660,3432=>674,3433=>933,3434=>671,3435=>699,3436=>704,3437=>694,3438=>678,3439=>684,3440=>981,3441=>742,3442=>1056,3443=>660,3444=>664,3445=>870,3449=>864,3450=>1137,3451=>776,3452=>534,3453=>860,3454=>780,3455=>866,3458=>254,3459=>254,3461=>616,3462=>922,3463=>908,3464=>907,3465=>626,3466=>615,3467=>763,3468=>1109,3469=>1019,3470=>1311,3471=>1050,3472=>1477,3473=>677,3474=>746,3475=>1314,3476=>741,3477=>741,3478=>1170,3482=>894,3483=>715,3484=>715,3485=>719,3486=>741,3487=>834,3488=>719,3489=>677,3490=>677,3491=>1302,3492=>1005,3493=>919,3494=>677,3495=>719,3496=>677,3497=>741,3498=>677,3499=>1123,3500=>743,3501=>779,3502=>677,3503=>444,3504=>741,3505=>921,3507=>444,3508=>677,3509=>677,3510=>715,3511=>787,3512=>719,3513=>741,3514=>719,3515=>604,3517=>763,3520=>719,3521=>715,3522=>677,3523=>719,3524=>787,3525=>763,3526=>677,3530=>0,3535=>329,3536=>319,3537=>319,3538=>0,3539=>0,3540=>0,3542=>0,3544=>329,3545=>691,3546=>1062,3547=>1333,3548=>1278,3549=>1235,3550=>1292,3551=>461,3570=>680,3571=>481,3572=>948,3585=>532,3586=>472,3587=>534,3588=>532,3589=>544,3590=>583,3591=>417,3592=>488,3593=>604,3594=>472,3595=>534,3596=>716,3597=>717,3598=>568,3599=>568,3600=>457,3601=>637,3602=>731,3603=>790,3604=>531,3605=>542,3606=>522,3607=>577,3608=>468,3609=>603,3610=>554,3611=>554,3612=>556,3613=>556,3614=>604,3615=>604,3616=>568,3617=>542,3618=>496,3619=>442,3620=>530,3621=>512,3622=>568,3623=>478,3624=>543,3625=>614,3626=>525,3627=>578,3628=>659,3629=>514,3630=>514,3631=>450,3632=>402,3633=>0,3634=>378,3635=>415,3636=>0,3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0,3647=>620,3648=>286,3649=>521,3650=>447,3651=>426,3652=>424,3653=>333,3654=>453,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,3660=>0,3661=>0,3662=>0,3663=>657,3664=>528,3665=>528,3666=>571,3667=>594,3668=>631,3669=>632,3670=>478,3671=>713,3672=>597,3673=>565,3674=>615,3675=>1381,4256=>453,4257=>448,4258=>546,4259=>619,4260=>478,4261=>481,4262=>459,4263=>707,4264=>467,4265=>471,4266=>842,4267=>464,4268=>443,4269=>707,4270=>460,4271=>465,4272=>686,4273=>440,4274=>550,4275=>561,4276=>580,4277=>467,4278=>630,4279=>466,4280=>517,4281=>456,4282=>502,4283=>464,4284=>534,4285=>440,4286=>443,4287=>522,4288=>460,4289=>463,4290=>536,4291=>455,4292=>468,4293=>449,4304=>454,4305=>452,4306=>544,4307=>629,4308=>451,4309=>452,4310=>452,4311=>702,4312=>451,4313=>452,4314=>820,4315=>451,4316=>453,4317=>695,4318=>449,4319=>448,4320=>694,4321=>501,4322=>544,4323=>518,4324=>560,4325=>450,4326=>627,4327=>452,4328=>490,4329=>452,4330=>485,4331=>452,4332=>485,4333=>443,4334=>500,4335=>582,4336=>455,4337=>451,4338=>482,4339=>414,4340=>453,4341=>418,4342=>741,4343=>452,4344=>452,4345=>544,4346=>454,4347=>410,4348=>339,4608=>583,4609=>770,4610=>560,4611=>525,4612=>525,4613=>583,4614=>758,4616=>598,4617=>787,4618=>817,4619=>583,4620=>758,4621=>612,4622=>875,4623=>817,4624=>817,4625=>1050,4626=>1050,4627=>817,4628=>1050,4629=>817,4630=>787,4631=>1021,4632=>933,4633=>1137,4634=>1067,4635=>980,4636=>1065,4637=>962,4638=>962,4639=>1097,4640=>831,4641=>1021,4642=>851,4643=>735,4644=>875,4645=>968,4646=>817,4647=>881,4648=>583,4649=>642,4650=>583,4651=>758,4652=>700,4653=>583,4654=>700,4655=>758,4656=>583,4657=>787,4658=>787,4659=>583,4660=>729,4661=>583,4662=>583,4663=>817,4664=>642,4665=>817,4666=>846,4667=>642,4668=>758,4669=>744,4670=>642,4671=>817,4672=>700,4673=>700,4674=>700,4675=>758,4676=>700,4677=>700,4678=>729,4680=>846,4682=>1079,4683=>700,4684=>700,4685=>1021,4688=>700,4689=>700,4690=>700,4691=>758,4692=>700,4693=>758,4694=>729,4696=>846,4698=>1079,4699=>700,4700=>700,4701=>1021,4704=>525,4705=>758,4706=>758,4707=>525,4708=>700,4709=>773,4710=>525,4711=>787,4712=>525,4713=>758,4714=>758,4715=>525,4716=>700,4717=>773,4718=>525,4719=>525,4720=>729,4721=>729,4722=>729,4723=>802,4724=>729,4725=>729,4726=>758,4727=>729,4728=>758,4729=>758,4730=>758,4731=>817,4732=>758,4733=>817,4734=>758,4735=>758,4736=>612,4737=>817,4738=>817,4739=>612,4740=>787,4741=>583,4742=>875,4744=>962,4746=>992,4747=>700,4748=>758,4749=>904,4752=>408,4753=>583,4754=>525,4755=>554,4756=>481,4757=>554,4758=>642,4759=>671,4760=>700,4761=>758,4762=>729,4763=>700,4764=>671,4765=>700,4766=>758,4767=>700,4768=>583,4769=>735,4770=>822,4771=>583,4772=>793,4773=>583,4774=>583,4775=>694,4776=>554,4777=>729,4778=>773,4779=>554,4780=>700,4781=>554,4782=>554,4784=>992,4786=>1021,4787=>671,4788=>787,4789=>904,4792=>729,4793=>904,4794=>948,4795=>729,4796=>875,4797=>729,4798=>729,4800=>1137,4802=>1167,4803=>758,4804=>875,4805=>1108,4808=>758,4809=>875,4810=>700,4811=>700,4812=>700,4813=>992,4814=>758,4816=>554,4817=>787,4818=>758,4819=>583,4820=>758,4821=>496,4822=>612,4824=>525,4825=>700,4826=>700,4827=>525,4828=>685,4829=>729,4830=>510,4831=>729,4832=>962,4833=>962,4834=>962,4835=>962,4836=>962,4837=>1021,4838=>962,4839=>962,4840=>467,4841=>525,4842=>671,4843=>612,4844=>612,4845=>671,4846=>671,4848=>612,4849=>875,4850=>817,4851=>642,4852=>729,4853=>729,4854=>758,4855=>817,4856=>700,4857=>758,4858=>715,4859=>700,4860=>700,4861=>787,4862=>758,4863=>700,4864=>700,4865=>758,4866=>715,4867=>700,4868=>700,4869=>787,4870=>758,4871=>700,4872=>467,4873=>671,4874=>671,4875=>612,4876=>612,4877=>583,4878=>525,4880=>846,4882=>904,4883=>554,4884=>700,4885=>817,4888=>525,4889=>729,4890=>729,4891=>612,4892=>671,4893=>583,4894=>525,4896=>817,4897=>1021,4898=>1021,4899=>817,4900=>992,4901=>758,4902=>817,4903=>1021,4904=>1079,4905=>1137,4906=>1137,4907=>1050,4908=>1312,4909=>1050,4910=>1050,4911=>1123,4912=>647,4913=>793,4914=>822,4915=>647,4916=>793,4917=>764,4918=>583,4919=>647,4920=>583,4921=>793,4922=>822,4923=>583,4924=>793,4925=>764,4926=>583,4927=>793,4928=>540,4929=>758,4930=>583,4931=>467,4932=>583,4933=>481,4934=>612,4936=>758,4937=>700,4938=>758,4939=>700,4940=>831,4941=>671,4942=>758,4943=>700,4944=>758,4945=>758,4946=>758,4947=>817,4948=>758,4949=>758,4950=>817,4951=>758,4952=>642,4953=>980,4954=>758,4961=>233,4962=>583,4963=>408,4964=>408,4965=>525,4966=>525,4967=>233,4968=>700,4969=>671,4970=>612,4971=>642,4972=>642,4973=>642,4974=>583,4975=>700,4976=>758,4977=>642,4978=>583,4979=>700,4980=>729,4981=>720,4982=>583,4983=>758,4984=>700,4985=>904,4986=>612,4987=>583,4988=>875,5024=>711,5025=>678,5026=>604,5027=>667,5028=>796,5029=>301,5030=>516,5031=>544,5032=>457,5033=>716,5034=>703,5035=>383,5036=>628,5037=>709,5038=>455,5039=>601,5040=>472,5041=>574,5042=>730,5043=>939,5044=>498,5045=>528,5046=>667,5047=>891,5048=>505,5049=>792,5050=>957,5051=>725,5052=>595,5053=>733,5054=>698,5055=>638,5056=>720,5057=>732,5058=>624,5059=>638,5060=>565,5061=>903,5062=>655,5063=>681,5064=>675,5065=>949,5066=>683,5067=>547,5068=>693,5069=>732,5070=>529,5071=>569,5072=>536,5073=>677,5074=>631,5075=>542,5076=>973,5077=>543,5078=>607,5079=>652,5080=>652,5081=>693,5082=>514,5083=>803,5084=>658,5085=>597,5086=>627,5087=>659,5088=>679,5089=>706,5090=>563,5091=>618,5092=>767,5093=>776,5094=>731,5095=>492,5096=>808,5097=>823,5098=>796,5099=>689,5100=>716,5101=>518,5102=>521,5103=>719,5104=>563,5105=>776,5106=>634,5107=>822,5108=>621,5920=>502,5921=>502,5922=>500,5923=>498,5924=>500,5925=>502,5926=>502,5927=>502,5928=>500,5929=>503,5930=>502,5931=>502,5932=>500,5933=>500,5934=>500,5935=>796,5936=>500,5937=>502,5938=>0,5939=>0,5940=>0,5941=>230,5942=>397,6480=>537,6481=>537,6482=>531,6483=>678,6484=>682,6485=>628,6486=>732,6487=>721,6488=>598,6489=>583,6490=>702,6491=>554,6492=>683,6493=>554,6494=>710,6495=>695,6496=>523,6497=>678,6498=>589,6499=>272,6500=>506,6501=>515,6502=>515,6503=>210,6504=>210,6505=>515,6506=>515,6507=>515,6508=>229,6509=>705,6512=>649,6513=>538,6514=>568,6515=>520,6516=>544,6656=>820,6657=>958,6658=>758,6659=>859,6660=>958,6661=>727,6662=>904,6663=>940,6664=>850,6665=>905,6666=>838,6667=>961,6668=>1000,6669=>880,6670=>1189,6671=>1246,6672=>1177,6673=>757,6674=>1246,6675=>1192,6676=>709,6677=>1192,6678=>1075,6679=>0,6680=>0,6681=>534,6682=>690,6683=>0,6686=>697,6687=>500,7424=>484,7425=>595,7426=>651,7427=>446,7428=>446,7429=>483,7430=>483,7431=>409,7432=>426,7433=>278,7434=>260,7435=>483,7436=>409,7437=>595,7438=>483,7439=>483,7440=>435,7441=>507,7442=>507,7443=>673,7444=>709,7445=>378,7446=>483,7447=>483,7448=>372,7449=>456,7450=>446,7451=>409,7452=>483,7453=>488,7454=>660,7455=>500,7456=>483,7457=>632,7458=>409,7459=>355,7460=>444,7461=>681,7462=>392,7463=>483,7464=>483,7465=>372,7466=>541,7467=>470,7468=>484,7469=>595,7470=>446,7471=>446,7472=>483,7473=>409,7474=>409,7475=>483,7476=>483,7477=>223,7478=>260,7479=>483,7480=>409,7481=>595,7482=>483,7483=>483,7484=>483,7485=>378,7486=>372,7487=>446,7488=>409,7489=>483,7490=>632,7491=>297,7492=>297,7493=>335,7494=>440,7495=>335,7496=>335,7497=>297,7498=>297,7499=>285,7500=>285,7501=>335,7502=>186,7503=>335,7504=>521,7505=>335,7506=>335,7507=>297,7508=>483,7509=>483,7510=>335,7511=>186,7512=>335,7513=>326,7514=>521,7515=>335,7516=>442,7517=>353,7518=>321,7519=>357,7520=>430,7521=>321,7522=>186,7523=>223,7524=>335,7525=>335,7526=>353,7527=>321,7528=>353,7529=>430,7530=>321,7531=>754,7532=>500,7533=>500,7534=>333,7535=>778,7536=>500,7537=>500,7538=>333,7539=>333,7540=>389,7541=>278,7542=>444,7543=>500,7544=>483,7545=>447,7546=>774,7547=>280,7548=>278,7549=>500,7550=>483,7551=>514,7552=>500,7553=>500,7554=>333,7555=>676,7556=>525,7557=>278,7558=>802,7559=>507,7560=>500,7561=>333,7562=>389,7563=>384,7564=>500,7565=>500,7566=>444,7567=>602,7568=>637,7569=>648,7570=>590,7571=>559,7572=>426,7573=>590,7574=>413,7575=>444,7576=>360,7577=>638,7578=>389,7579=>335,7580=>293,7581=>283,7582=>337,7583=>299,7584=>229,7585=>251,7586=>335,7587=>322,7588=>188,7589=>212,7590=>278,7591=>182,7592=>240,7593=>233,7594=>208,7595=>287,7596=>499,7597=>533,7598=>401,7599=>374,7600=>330,7601=>329,7602=>426,7603=>262,7604=>312,7605=>197,7606=>344,7607=>336,7608=>323,7609=>334,7610=>325,7611=>293,7612=>403,7613=>288,7614=>257,7615=>354,7680=>722,7681=>444,7682=>667,7683=>500,7684=>667,7685=>500,7686=>667,7687=>500,7688=>667,7689=>444,7690=>722,7691=>500,7692=>722,7693=>500,7694=>722,7695=>500,7696=>720,7697=>500,7698=>722,7699=>500,7700=>611,7701=>444,7702=>611,7703=>444,7704=>611,7705=>444,7706=>611,7707=>444,7708=>611,7709=>444,7710=>556,7711=>333,7712=>722,7713=>500,7714=>722,7715=>500,7716=>722,7717=>500,7718=>722,7719=>500,7720=>722,7721=>500,7722=>722,7723=>500,7724=>333,7725=>278,7726=>333,7727=>278,7728=>722,7729=>500,7730=>722,7731=>500,7732=>722,7733=>500,7734=>611,7735=>278,7736=>611,7737=>278,7738=>611,7739=>278,7740=>611,7741=>278,7742=>889,7743=>778,7744=>889,7745=>778,7746=>889,7747=>778,7748=>722,7749=>500,7750=>722,7751=>500,7752=>722,7753=>500,7754=>722,7755=>500,7756=>722,7757=>500,7758=>722,7759=>500,7760=>722,7761=>500,7762=>722,7763=>500,7764=>556,7765=>500,7766=>556,7767=>500,7768=>667,7769=>333,7770=>667,7771=>333,7772=>667,7773=>333,7774=>667,7775=>333,7776=>556,7777=>389,7778=>556,7779=>389,7780=>556,7781=>389,7782=>556,7783=>389,7784=>556,7785=>389,7786=>611,7787=>278,7788=>611,7789=>278,7790=>611,7791=>278,7792=>611,7793=>278,7794=>722,7795=>500,7796=>722,7797=>500,7798=>722,7799=>500,7800=>722,7801=>500,7802=>722,7803=>500,7804=>722,7805=>500,7806=>722,7807=>500,7808=>944,7809=>722,7810=>944,7811=>722,7812=>944,7813=>722,7814=>944,7815=>722,7816=>944,7817=>722,7818=>722,7819=>500,7820=>722,7821=>500,7822=>722,7823=>500,7824=>611,7825=>444,7826=>611,7827=>444,7828=>611,7829=>444,7830=>500,7831=>278,7832=>722,7833=>500,7834=>444,7835=>333,7836=>333,7837=>333,7838=>659,7839=>534,7840=>722,7841=>444,7842=>722,7843=>444,7844=>722,7845=>444,7846=>722,7847=>444,7848=>722,7849=>454,7850=>722,7851=>444,7852=>722,7853=>444,7854=>722,7855=>444,7856=>722,7857=>444,7858=>722,7859=>454,7860=>722,7861=>444,7862=>722,7863=>444,7864=>611,7865=>444,7866=>611,7867=>444,7868=>611,7869=>444,7870=>611,7871=>444,7872=>611,7873=>444,7874=>613,7875=>444,7876=>611,7877=>444,7878=>611,7879=>444,7880=>333,7881=>278,7882=>333,7883=>278,7884=>722,7885=>500,7886=>722,7887=>500,7888=>722,7889=>500,7890=>722,7891=>500,7892=>722,7893=>500,7894=>722,7895=>500,7896=>722,7897=>500,7898=>722,7899=>540,7900=>722,7901=>540,7902=>720,7903=>540,7904=>722,7905=>540,7906=>722,7907=>540,7908=>722,7909=>500,7910=>717,7911=>500,7912=>782,7913=>544,7914=>782,7915=>544,7916=>782,7917=>544,7918=>782,7919=>544,7920=>782,7921=>544,7922=>722,7923=>500,7924=>722,7925=>500,7926=>722,7927=>501,7928=>722,7929=>500,7930=>914,7931=>514,7932=>500,7933=>342,7934=>722,7935=>530,7936=>583,7937=>583,7938=>583,7939=>583,7940=>583,7941=>583,7942=>583,7943=>583,7944=>722,7945=>722,7946=>813,7947=>817,7948=>763,7949=>765,7950=>720,7951=>722,7952=>426,7953=>426,7954=>426,7955=>426,7956=>426,7957=>426,7960=>770,7961=>770,7962=>902,7963=>919,7964=>940,7965=>936,7968=>536,7969=>536,7970=>536,7971=>536,7972=>536,7973=>536,7974=>536,7975=>536,7976=>847,7977=>859,7978=>986,7979=>1010,7980=>1026,7981=>1029,7982=>918,7983=>921,7984=>286,7985=>286,7986=>302,7987=>320,7988=>300,7989=>306,7990=>312,7991=>303,7992=>475,7993=>507,7994=>617,7995=>654,7996=>655,7997=>660,7998=>551,7999=>566,8000=>500,8001=>500,8002=>500,8003=>500,8004=>500,8005=>500,8008=>816,8009=>825,8010=>969,8011=>995,8012=>938,8013=>955,8016=>514,8017=>514,8018=>514,8019=>514,8020=>514,8021=>514,8022=>514,8023=>514,8025=>818,8027=>988,8029=>989,8031=>893,8032=>693,8033=>693,8034=>693,8035=>693,8036=>693,8037=>693,8038=>693,8039=>693,8040=>836,8041=>843,8042=>1006,8043=>1024,8044=>974,8045=>986,8046=>905,8047=>896,8048=>583,8049=>583,8050=>426,8051=>426,8052=>536,8053=>536,8054=>286,8055=>286,8056=>500,8057=>500,8058=>514,8059=>514,8060=>693,8061=>693,8064=>583,8065=>583,8066=>583,8067=>583,8068=>583,8069=>583,8070=>583,8071=>583,8072=>888,8073=>889,8074=>984,8075=>991,8076=>943,8077=>948,8078=>884,8079=>886,8080=>536,8081=>536,8082=>536,8083=>536,8084=>536,8085=>536,8086=>536,8087=>536,8088=>1017,8089=>1026,8090=>1153,8091=>1179,8092=>1195,8093=>1199,8094=>1088,8095=>1088,8096=>693,8097=>693,8098=>693,8099=>693,8100=>693,8101=>693,8102=>693,8103=>693,8104=>1034,8105=>1040,8106=>1210,8107=>1229,8108=>1176,8109=>1186,8110=>1098,8111=>1090,8112=>583,8113=>583,8114=>583,8115=>583,8116=>583,8118=>583,8119=>583,8120=>722,8121=>722,8122=>722,8123=>722,8124=>889,8125=>250,8126=>332,8127=>500,8128=>500,8129=>534,8130=>536,8131=>536,8132=>536,8134=>536,8135=>536,8136=>761,8137=>800,8138=>829,8139=>893,8140=>883,8141=>500,8142=>500,8143=>500,8144=>286,8145=>286,8146=>286,8147=>286,8150=>286,8151=>286,8152=>333,8153=>333,8154=>447,8155=>537,8157=>500,8158=>500,8159=>500,8160=>514,8161=>514,8162=>514,8163=>514,8164=>528,8165=>528,8166=>514,8167=>514,8168=>696,8169=>696,8170=>816,8171=>828,8172=>721,8173=>333,8174=>333,8175=>500,8178=>693,8179=>693,8180=>693,8182=>693,8183=>693,8184=>832,8185=>899,8186=>847,8187=>852,8188=>928,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>500,8200=>250,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>500,8211=>500,8212=>1000,8213=>1000,8214=>293,8215=>478,8216=>250,8217=>250,8218=>250,8219=>250,8220=>444,8221=>444,8222=>444,8223=>444,8224=>500,8225=>500,8226=>350,8227=>350,8228=>620,8229=>620,8230=>1000,8231=>250,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>250,8240=>1000,8241=>1363,8242=>247,8243=>411,8244=>611,8245=>247,8246=>411,8247=>611,8248=>469,8249=>250,8250=>250,8251=>629,8252=>666,8253=>444,8254=>500,8255=>953,8256=>953,8257=>314,8258=>931,8259=>333,8260=>167,8261=>383,8262=>383,8263=>888,8264=>777,8265=>777,8266=>500,8267=>453,8268=>453,8269=>450,8270=>500,8271=>278,8272=>882,8273=>500,8274=>497,8275=>500,8276=>953,8277=>512,8278=>410,8279=>855,8280=>620,8281=>620,8282=>179,8283=>621,8284=>564,8285=>179,8286=>179,8287=>111,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>320,8305=>180,8308=>320,8309=>320,8310=>320,8311=>320,8312=>320,8313=>320,8314=>300,8315=>300,8316=>300,8317=>216,8318=>216,8319=>335,8320=>320,8321=>320,8322=>320,8323=>320,8324=>320,8325=>320,8326=>320,8327=>320,8328=>320,8329=>320,8330=>300,8331=>300,8332=>300,8333=>216,8334=>216,8336=>320,8337=>304,8338=>340,8339=>337,8340=>298,8352=>698,8353=>667,8354=>667,8355=>556,8356=>500,8357=>778,8358=>722,8359=>940,8360=>1026,8361=>813,8362=>869,8363=>512,8364=>741,8365=>722,8366=>611,8367=>1340,8368=>489,8369=>601,8370=>619,8371=>722,8372=>556,8373=>611,8374=>498,8376=>524,8400=>0,8401=>0,8402=>0,8403=>0,8404=>0,8405=>0,8406=>0,8407=>0,8408=>0,8409=>0,8410=>0,8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8418=>0,8419=>0,8420=>0,8421=>0,8422=>0,8423=>0,8424=>0,8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8432=>0,8448=>751,8449=>723,8450=>674,8451=>954,8452=>556,8453=>781,8454=>806,8455=>518,8456=>667,8457=>822,8458=>490,8459=>824,8460=>663,8461=>818,8462=>500,8463=>500,8464=>578,8465=>613,8466=>715,8467=>417,8468=>778,8469=>751,8470=>880,8471=>792,8472=>832,8473=>589,8474=>729,8475=>892,8476=>711,8477=>755,8478=>667,8479=>667,8480=>939,8481=>1156,8482=>1008,8483=>722,8484=>659,8485=>389,8486=>743,8487=>757,8488=>663,8489=>286,8490=>722,8491=>722,8492=>846,8493=>613,8494=>533,8495=>363,8496=>587,8497=>690,8498=>556,8499=>1021,8500=>387,8501=>537,8502=>537,8503=>350,8504=>537,8505=>417,8506=>906,8507=>1155,8508=>655,8510=>586,8511=>722,8513=>663,8514=>485,8515=>485,8516=>637,8522=>516,8523=>778,8525=>899,8526=>386,8528=>780,8529=>770,8530=>980,8531=>750,8532=>750,8533=>750,8534=>750,8535=>750,8536=>750,8537=>750,8538=>750,8539=>750,8540=>750,8541=>750,8542=>750,8543=>750,8544=>333,8545=>658,8546=>977,8547=>1041,8548=>722,8549=>1040,8550=>1363,8551=>1679,8552=>1051,8553=>722,8554=>1046,8555=>1366,8556=>611,8557=>667,8558=>722,8559=>889,8560=>278,8561=>536,8562=>794,8563=>734,8564=>500,8565=>758,8566=>1016,8567=>1274,8568=>754,8569=>500,8570=>764,8571=>1022,8572=>278,8573=>444,8574=>500,8575=>778,8576=>1082,8577=>722,8578=>1090,8579=>667,8580=>444,8581=>667,8582=>528,8583=>722,8584=>1093,8585=>771,8592=>964,8593=>472,8594=>964,8595=>500,8596=>964,8597=>499,8598=>964,8599=>964,8600=>964,8601=>964,8602=>964,8603=>964,8604=>1009,8605=>1009,8606=>964,8607=>500,8608=>964,8609=>499,8610=>1093,8611=>1093,8612=>1093,8613=>500,8614=>1093,8615=>500,8616=>500,8617=>964,8618=>964,8619=>964,8620=>964,8621=>1151,8622=>964,8623=>592,8624=>482,8625=>482,8626=>482,8627=>482,8628=>658,8629=>658,8630=>1069,8631=>1069,8632=>836,8633=>964,8634=>939,8635=>939,8636=>964,8637=>964,8638=>499,8639=>499,8640=>964,8641=>964,8642=>499,8643=>499,8644=>964,8645=>840,8646=>964,8647=>964,8648=>840,8649=>964,8650=>840,8651=>964,8652=>964,8653=>964,8654=>964,8655=>964,8656=>964,8657=>550,8658=>964,8659=>550,8660=>964,8661=>550,8662=>1047,8663=>1047,8664=>1047,8665=>1047,8666=>964,8667=>964,8668=>1092,8669=>1092,8670=>500,8671=>500,8672=>964,8673=>500,8674=>964,8675=>500,8676=>964,8677=>964,8678=>964,8679=>596,8680=>964,8681=>596,8682=>594,8683=>594,8684=>594,8685=>595,8686=>596,8687=>596,8688=>966,8689=>926,8690=>926,8691=>596,8692=>964,8693=>842,8694=>964,8695=>964,8696=>964,8697=>964,8698=>964,8699=>964,8700=>964,8701=>964,8702=>964,8703=>964,8704=>587,8705=>716,8706=>494,8707=>587,8708=>587,8709=>746,8710=>612,8711=>612,8712=>536,8713=>536,8714=>439,8715=>536,8716=>536,8717=>439,8718=>506,8719=>823,8720=>823,8721=>713,8722=>564,8723=>564,8724=>564,8725=>636,8726=>636,8727=>471,8728=>497,8729=>497,8730=>549,8731=>549,8732=>549,8733=>636,8734=>853,8735=>509,8736=>575,8737=>559,8738=>509,8739=>200,8740=>250,8741=>320,8742=>320,8743=>564,8744=>564,8745=>654,8746=>654,8747=>416,8748=>750,8749=>1083,8750=>722,8751=>750,8752=>1083,8753=>697,8754=>722,8755=>722,8756=>565,8757=>568,8758=>250,8759=>629,8760=>564,8761=>758,8762=>564,8763=>636,8764=>636,8765=>636,8766=>503,8767=>614,8768=>636,8769=>636,8770=>636,8771=>636,8772=>636,8773=>636,8774=>636,8775=>636,8776=>636,8777=>636,8778=>636,8779=>636,8780=>636,8781=>636,8782=>636,8783=>636,8784=>564,8785=>564,8786=>564,8787=>564,8788=>735,8789=>755,8790=>564,8791=>564,8792=>564,8793=>564,8794=>564,8795=>564,8796=>600,8797=>564,8798=>564,8799=>564,8800=>564,8801=>636,8802=>636,8803=>636,8804=>636,8805=>636,8806=>636,8807=>636,8808=>636,8809=>636,8810=>900,8811=>899,8812=>410,8813=>636,8814=>636,8815=>636,8816=>636,8817=>636,8818=>636,8819=>636,8820=>636,8821=>636,8822=>636,8823=>636,8824=>636,8825=>636,8826=>636,8827=>636,8828=>636,8829=>636,8830=>636,8831=>636,8832=>636,8833=>636,8834=>636,8835=>636,8836=>636,8837=>636,8838=>636,8839=>636,8840=>636,8841=>636,8842=>636,8843=>636,8844=>654,8845=>654,8846=>654,8847=>636,8848=>636,8849=>636,8850=>636,8851=>636,8852=>636,8853=>636,8854=>636,8855=>636,8856=>636,8857=>636,8858=>636,8859=>636,8860=>636,8861=>636,8862=>636,8863=>636,8864=>636,8865=>636,8866=>600,8867=>600,8868=>712,8869=>712,8870=>466,8871=>466,8872=>595,8873=>588,8874=>710,8875=>706,8876=>595,8877=>596,8878=>588,8879=>706,8880=>636,8881=>636,8882=>636,8883=>636,8884=>636,8885=>636,8886=>1296,8887=>1296,8888=>966,8889=>564,8890=>626,8891=>564,8892=>564,8893=>566,8894=>570,8895=>582,8896=>744,8897=>744,8898=>764,8899=>764,8900=>512,8901=>250,8902=>471,8903=>629,8904=>636,8905=>636,8906=>636,8907=>816,8908=>816,8909=>636,8910=>636,8911=>636,8912=>636,8913=>636,8914=>654,8915=>654,8916=>654,8917=>564,8918=>564,8919=>564,8920=>1215,8921=>1215,8922=>636,8923=>636,8924=>636,8925=>636,8926=>636,8927=>636,8928=>636,8929=>636,8930=>636,8931=>636,8932=>636,8933=>636,8934=>636,8935=>636,8936=>636,8937=>636,8938=>636,8939=>636,8940=>636,8941=>636,8942=>250,8943=>1000,8944=>1000,8945=>1000,8946=>601,8947=>536,8948=>464,8949=>536,8950=>536,8951=>464,8952=>536,8953=>536,8954=>601,8955=>536,8956=>464,8957=>536,8958=>464,8959=>600,8960=>780,8961=>442,8962=>794,8968=>474,8969=>474,8970=>474,8971=>474,8976=>564,8977=>503,8978=>791,8979=>791,8980=>593,8981=>560,8982=>563,8983=>563,8984=>800,8985=>564,8986=>800,8987=>632,8988=>474,8989=>474,8990=>474,8991=>474,8992=>686,8993=>686,8994=>658,8995=>658,8996=>800,8997=>800,8998=>800,8999=>800,9000=>800,9001=>329,9002=>329,9003=>800,9004=>800,9031=>777,9032=>777,9040=>777,9047=>777,9054=>777,9088=>800,9089=>800,9090=>800,9091=>800,9094=>800,9095=>800,9096=>800,9097=>800,9098=>800,9100=>800,9103=>788,9104=>788,9105=>788,9106=>788,9108=>800,9109=>800,9110=>800,9111=>800,9112=>800,9113=>800,9114=>800,9115=>384,9116=>384,9117=>384,9118=>384,9119=>384,9120=>384,9121=>388,9122=>388,9123=>388,9124=>388,9125=>388,9126=>388,9127=>494,9128=>494,9129=>494,9130=>494,9131=>494,9132=>494,9133=>494,9134=>686,9138=>1287,9139=>1287,9140=>860,9141=>861,9142=>861,9144=>889,9145=>889,9146=>889,9147=>889,9148=>889,9149=>889,9166=>800,9167=>800,9180=>896,9181=>896,9182=>903,9183=>904,9184=>910,9185=>910,9186=>761,9187=>910,9189=>942,9190=>817,9216=>800,9217=>800,9218=>800,9219=>800,9220=>800,9221=>800,9222=>800,9223=>800,9224=>800,9225=>800,9226=>800,9227=>800,9228=>800,9229=>800,9230=>800,9231=>800,9232=>800,9233=>800,9234=>800,9235=>800,9236=>800,9237=>800,9238=>800,9239=>800,9240=>800,9241=>800,9242=>800,9243=>800,9244=>800,9245=>800,9246=>800,9247=>800,9248=>800,9249=>800,9251=>500,9252=>800,9312=>788,9313=>788,9314=>788,9315=>788,9316=>788,9317=>788,9318=>788,9319=>788,9320=>788,9321=>788,9472=>889,9473=>889,9474=>889,9475=>889,9484=>889,9485=>889,9486=>889,9487=>889,9488=>889,9489=>889,9490=>889,9491=>889,9492=>889,9493=>889,9494=>889,9495=>889,9496=>889,9497=>889,9498=>889,9499=>889,9500=>889,9501=>889,9502=>889,9503=>889,9504=>889,9505=>889,9506=>889,9507=>889,9508=>889,9509=>889,9510=>889,9511=>889,9512=>889,9513=>889,9514=>889,9515=>889,9516=>889,9517=>889,9518=>889,9519=>889,9520=>889,9521=>889,9522=>889,9523=>889,9524=>889,9525=>889,9526=>889,9527=>889,9528=>889,9529=>889,9530=>889,9531=>889,9532=>889,9533=>889,9534=>889,9535=>889,9536=>889,9537=>889,9538=>889,9539=>889,9540=>889,9541=>889,9542=>889,9543=>889,9544=>889,9545=>889,9546=>889,9547=>889,9552=>889,9553=>889,9554=>889,9555=>889,9556=>889,9557=>889,9558=>889,9559=>889,9560=>889,9561=>889,9562=>889,9563=>889,9564=>889,9565=>889,9566=>889,9567=>889,9568=>889,9569=>889,9570=>889,9571=>889,9572=>889,9573=>889,9574=>889,9575=>889,9576=>889,9577=>889,9578=>889,9579=>889,9580=>889,9581=>889,9582=>889,9583=>889,9584=>889,9585=>889,9586=>889,9587=>889,9588=>889,9589=>889,9590=>889,9591=>889,9592=>889,9593=>889,9594=>889,9595=>889,9596=>600,9597=>889,9598=>600,9599=>889,9600=>761,9601=>761,9602=>761,9603=>761,9604=>761,9605=>761,9606=>761,9607=>761,9608=>761,9609=>761,9610=>761,9611=>761,9612=>761,9613=>761,9614=>761,9615=>761,9616=>761,9617=>1000,9618=>1000,9619=>1000,9620=>761,9621=>761,9622=>761,9623=>761,9624=>761,9625=>761,9626=>761,9627=>761,9628=>761,9629=>761,9630=>761,9631=>761,9632=>761,9633=>761,9634=>761,9635=>761,9636=>761,9637=>761,9638=>761,9639=>761,9640=>761,9641=>761,9642=>532,9643=>532,9644=>761,9645=>761,9646=>761,9647=>761,9648=>761,9649=>761,9650=>892,9651=>892,9652=>446,9653=>446,9654=>892,9655=>892,9656=>446,9657=>446,9658=>892,9659=>892,9660=>892,9661=>892,9662=>446,9663=>446,9664=>892,9665=>892,9666=>446,9667=>446,9668=>892,9669=>892,9670=>788,9671=>788,9672=>788,9673=>791,9674=>494,9675=>791,9676=>791,9677=>785,9678=>791,9679=>791,9680=>791,9681=>791,9682=>791,9683=>791,9684=>791,9685=>791,9686=>791,9687=>791,9688=>350,9689=>761,9690=>761,9691=>761,9692=>791,9693=>791,9694=>791,9695=>791,9696=>791,9697=>791,9698=>761,9699=>761,9700=>761,9701=>761,9702=>350,9703=>761,9704=>761,9705=>761,9706=>761,9707=>761,9708=>892,9709=>892,9710=>892,9711=>885,9712=>761,9713=>761,9714=>761,9715=>761,9716=>791,9717=>791,9718=>791,9719=>791,9720=>761,9721=>761,9722=>761,9723=>761,9724=>761,9725=>570,9726=>570,9727=>761,9728=>800,9729=>800,9730=>748,9731=>800,9732=>800,9733=>811,9734=>816,9735=>468,9736=>677,9737=>724,9738=>944,9739=>944,9740=>686,9741=>944,9742=>715,9743=>715,9744=>757,9745=>755,9746=>755,9747=>756,9748=>800,9749=>837,9750=>719,9751=>719,9752=>782,9753=>822,9754=>954,9755=>954,9756=>933,9757=>489,9758=>933,9759=>489,9760=>517,9761=>660,9762=>724,9763=>732,9764=>886,9765=>577,9766=>489,9767=>563,9768=>490,9769=>770,9770=>725,9771=>860,9772=>668,9773=>753,9774=>724,9775=>730,9776=>600,9777=>600,9778=>600,9779=>600,9780=>600,9781=>600,9782=>600,9783=>600,9784=>730,9785=>724,9786=>724,9787=>724,9788=>799,9789=>659,9790=>659,9791=>495,9792=>495,9793=>495,9794=>686,9795=>661,9796=>544,9797=>608,9798=>605,9799=>545,9800=>804,9801=>583,9802=>796,9803=>1006,9804=>825,9805=>1189,9806=>1144,9807=>1189,9808=>683,9809=>808,9810=>1146,9811=>797,9812=>758,9813=>757,9814=>758,9815=>758,9816=>758,9817=>758,9818=>758,9819=>758,9820=>758,9821=>758,9822=>758,9823=>758,9824=>770,9825=>770,9826=>770,9827=>770,9828=>770,9829=>770,9830=>770,9831=>770,9832=>895,9833=>333,9834=>513,9835=>722,9836=>722,9837=>371,9838=>377,9839=>402,9840=>642,9841=>655,9842=>869,9843=>905,9844=>905,9845=>905,9846=>905,9847=>905,9848=>905,9849=>905,9850=>905,9851=>1016,9852=>1064,9853=>1064,9854=>954,9855=>606,9856=>522,9857=>522,9858=>522,9859=>522,9860=>522,9861=>522,9862=>845,9863=>844,9864=>844,9865=>844,9866=>748,9867=>748,9868=>748,9869=>748,9870=>748,9871=>748,9872=>726,9873=>726,9874=>963,9875=>770,9876=>1038,9877=>388,9878=>997,9879=>787,9880=>508,9881=>809,9882=>1014,9883=>859,9884=>818,9885=>972,9888=>1000,9889=>546,9890=>784,9891=>786,9892=>738,9893=>542,9894=>601,9895=>700,9896=>511,9897=>861,9898=>611,9899=>611,9900=>544,9901=>782,9902=>1025,9903=>1141,9904=>1000,9905=>513,9906=>510,9907=>642,9908=>722,9909=>719,9910=>777,9911=>495,9912=>602,9913=>836,9914=>666,9915=>666,9916=>691,9920=>689,9921=>689,9922=>689,9923=>689,9985=>974,9986=>961,9987=>974,9988=>980,9990=>789,9991=>790,9992=>791,9993=>690,9996=>549,9997=>855,9998=>911,9999=>933,10000=>911,10001=>945,10002=>974,10003=>755,10004=>846,10005=>762,10006=>761,10007=>571,10008=>677,10009=>763,10010=>760,10011=>759,10012=>754,10013=>494,10014=>552,10015=>537,10016=>577,10017=>692,10018=>786,10019=>788,10020=>788,10021=>790,10022=>793,10023=>794,10025=>823,10026=>789,10027=>841,10028=>823,10029=>833,10030=>816,10031=>831,10032=>923,10033=>744,10034=>723,10035=>749,10036=>790,10037=>792,10038=>695,10039=>776,10040=>768,10041=>792,10042=>759,10043=>707,10044=>708,10045=>682,10046=>701,10047=>826,10048=>815,10049=>789,10050=>789,10051=>707,10052=>687,10053=>696,10054=>689,10055=>786,10056=>787,10057=>713,10058=>791,10059=>785,10061=>873,10063=>762,10064=>762,10065=>759,10066=>759,10070=>784,10072=>138,10073=>277,10074=>415,10075=>392,10076=>392,10077=>668,10078=>668,10081=>732,10082=>544,10083=>544,10084=>910,10085=>667,10086=>760,10087=>760,10088=>390,10089=>390,10090=>317,10091=>317,10092=>276,10093=>276,10094=>509,10095=>509,10096=>410,10097=>410,10098=>234,10099=>234,10100=>334,10101=>334,10102=>788,10103=>788,10104=>788,10105=>788,10106=>788,10107=>788,10108=>788,10109=>788,10110=>788,10111=>788,10112=>788,10113=>788,10114=>788,10115=>788,10116=>788,10117=>788,10118=>788,10119=>788,10120=>788,10121=>788,10122=>788,10123=>788,10124=>788,10125=>788,10126=>788,10127=>788,10128=>788,10129=>788,10130=>788,10131=>788,10132=>894,10136=>748,10137=>924,10138=>748,10139=>918,10140=>927,10141=>928,10142=>928,10143=>834,10144=>873,10145=>828,10146=>924,10147=>924,10148=>917,10149=>930,10150=>931,10151=>463,10152=>883,10153=>836,10154=>836,10155=>867,10156=>867,10157=>696,10158=>696,10159=>874,10161=>874,10162=>760,10163=>946,10164=>771,10165=>865,10166=>771,10167=>888,10168=>967,10169=>888,10170=>831,10171=>873,10172=>927,10173=>970,10174=>918,10214=>545,10215=>545,10216=>329,10217=>329,10218=>496,10219=>496,10224=>1000,10225=>1000,10226=>1104,10227=>1102,10228=>964,10229=>1000,10230=>1000,10231=>1000,10232=>1000,10233=>1000,10234=>1000,10235=>1000,10236=>1000,10237=>1000,10238=>1000,10239=>1392,10752=>860,10753=>860,10754=>860,10755=>766,10756=>766,10757=>756,10758=>756,10761=>745,10781=>702,10815=>722,11008=>1000,11009=>1000,11010=>1000,11011=>1000,11012=>1222,11013=>1000,11014=>1000,11015=>1000,11016=>1000,11017=>1000,11018=>1000,11019=>1000,11020=>1244,11021=>1000,11026=>770,11027=>770,11028=>770,11029=>770,11030=>770,11031=>770,11032=>770,11033=>770,11034=>770,11035=>1000,11036=>1000,11037=>283,11038=>283,11039=>846,11040=>846,11041=>799,11042=>799,11043=>807,11044=>1000,11045=>461,11046=>461,11047=>461,11048=>461,11049=>360,11050=>360,11051=>283,11052=>854,11053=>854,11054=>628,11055=>628,11088=>589,11089=>443,11090=>443,11091=>802,11092=>803,11264=>645,11265=>793,11266=>851,11267=>700,11268=>851,11269=>640,11270=>774,11271=>665,11272=>733,11273=>834,11274=>834,11275=>734,11276=>790,11277=>580,11278=>834,11279=>979,11280=>738,11281=>410,11282=>775,11283=>471,11284=>734,11285=>851,11286=>895,11287=>722,11288=>638,11289=>620,11290=>721,11291=>793,11292=>821,11293=>699,11294=>793,11295=>682,11296=>569,11297=>791,11299=>751,11300=>705,11301=>874,11302=>665,11303=>1139,11304=>1023,11305=>1238,11306=>762,11310=>759,11312=>484,11313=>595,11314=>638,11315=>525,11316=>638,11317=>480,11318=>580,11319=>499,11320=>550,11321=>625,11322=>626,11323=>550,11324=>592,11325=>435,11326=>626,11327=>734,11328=>553,11329=>308,11330=>581,11331=>353,11332=>550,11333=>638,11334=>671,11335=>542,11336=>478,11337=>465,11338=>540,11339=>594,11340=>616,11341=>524,11342=>594,11343=>512,11344=>427,11345=>589,11347=>564,11348=>529,11349=>655,11350=>499,11351=>854,11352=>767,11353=>929,11354=>571,11358=>569,11360=>611,11361=>289,11362=>627,11363=>556,11364=>667,11365=>447,11366=>303,11367=>728,11368=>500,11369=>734,11370=>511,11371=>611,11372=>444,11373=>680,11374=>889,11375=>722,11377=>651,11378=>1075,11379=>881,11380=>500,11381=>557,11382=>383,11383=>643,11384=>559,11385=>339,11386=>722,11387=>397,11388=>180,11389=>469,11392=>719,11393=>499,11394=>532,11395=>381,11396=>615,11397=>433,11398=>969,11399=>680,11400=>647,11401=>443,11402=>593,11403=>402,11404=>573,11405=>405,11406=>698,11407=>509,11408=>726,11409=>493,11410=>283,11411=>238,11412=>628,11413=>455,11414=>653,11415=>471,11416=>819,11417=>589,11418=>698,11419=>507,11420=>546,11421=>378,11422=>722,11423=>489,11424=>724,11425=>524,11426=>526,11427=>375,11428=>647,11429=>438,11430=>615,11431=>433,11432=>719,11433=>519,11434=>762,11435=>538,11436=>649,11437=>461,11438=>721,11439=>519,11440=>964,11441=>681,11456=>689,11457=>464,11464=>579,11465=>391,11466=>493,11467=>355,11492=>408,11493=>499,11494=>496,11495=>986,11496=>466,11497=>461,11498=>934,11517=>256,11518=>617,11519=>266,11744=>0,11745=>0,11746=>0,11747=>0,11748=>0,11749=>0,11750=>0,11751=>0,11752=>0,11753=>0,11754=>0,11755=>0,11756=>0,11757=>0,11758=>0,11759=>0,11760=>0,11761=>0,11762=>0,11763=>0,11764=>0,11765=>0,11766=>0,11767=>0,11768=>0,11769=>0,11770=>0,11771=>0,11772=>0,11773=>0,11774=>0,11775=>0,11799=>333,42560=>607,42561=>411,42562=>611,42563=>410,42564=>487,42565=>347,42566=>368,42567=>286,42568=>722,42569=>519,42570=>550,42571=>468,42572=>1145,42573=>775,42574=>665,42575=>548,42576=>1014,42577=>736,42578=>910,42579=>675,42580=>966,42581=>677,42582=>1042,42583=>648,42584=>722,42585=>513,42586=>932,42587=>700,42588=>1042,42589=>749,42590=>780,42591=>550,42594=>896,42595=>635,42596=>933,42597=>635,42598=>1139,42599=>777,42600=>722,42601=>500,42602=>790,42603=>560,42604=>1262,42605=>850,42606=>734,42607=>0,42608=>0,42609=>0,42610=>0,42611=>519,42620=>0,42621=>0,42622=>510,42623=>201,42624=>639,42625=>488,42626=>475,42627=>347,42628=>1160,42629=>842,42630=>1000,42631=>768,42632=>737,42633=>531,42634=>827,42635=>530,42636=>608,42637=>438,42638=>742,42639=>545,42640=>608,42641=>480,42642=>926,42643=>654,42644=>671,42645=>518,42646=>992,42647=>780,42752=>318,42753=>318,42754=>318,42755=>318,42756=>318,42757=>318,42758=>318,42759=>318,42760=>307,42761=>307,42762=>307,42763=>307,42764=>307,42765=>307,42766=>307,42767=>307,42768=>307,42769=>307,42770=>460,42771=>460,42772=>460,42773=>460,42774=>460,42775=>374,42776=>445,42777=>564,42778=>564,42779=>354,42780=>354,42781=>243,42782=>243,42783=>243,42784=>564,42785=>564,42786=>276,42787=>242,42788=>386,42789=>276,42790=>722,42791=>500,42792=>895,42793=>703,42794=>532,42795=>409,42796=>437,42797=>389,42798=>592,42799=>600,42800=>378,42801=>378,42802=>1183,42803=>708,42804=>1154,42805=>758,42806=>1089,42807=>716,42808=>902,42809=>586,42810=>902,42811=>586,42812=>912,42813=>572,42814=>667,42815=>444,42816=>722,42817=>500,42818=>722,42819=>500,42820=>722,42821=>500,42822=>713,42823=>361,42824=>611,42825=>289,42826=>750,42827=>544,42828=>918,42829=>658,42830=>1262,42831=>848,42832=>556,42833=>500,42838=>722,42839=>500,42852=>576,42853=>496,42854=>576,42855=>496,42873=>722,42874=>500,42875=>483,42876=>341,42877=>611,42878=>611,42879=>447,42880=>611,42881=>278,42882=>689,42883=>500,42884=>483,42885=>341,42886=>667,42887=>444,42888=>333,42889=>278,42890=>282,42891=>286,42892=>278,43003=>556,43004=>556,43005=>889,43006=>333,43007=>1298,64256=>589,64257=>534,64258=>530,64259=>805,64260=>799,64261=>586,64262=>677,64275=>971,64276=>969,64277=>978,64278=>971,64279=>1219,64285=>350,64286=>0,64287=>537,64288=>537,64297=>564,64298=>537,64299=>537,64300=>537,64301=>537,64302=>537,64303=>537,64304=>537,64305=>537,64306=>350,64307=>537,64308=>537,64309=>350,64310=>350,64312=>537,64313=>350,64314=>537,64315=>537,64316=>537,64318=>537,64320=>350,64321=>537,64323=>537,64324=>537,64326=>537,64327=>537,64328=>537,64329=>537,64330=>537,64331=>350,64332=>537,64333=>537,64334=>537,64335=>537,64342=>926,64343=>926,64344=>308,64345=>308,64378=>750,64379=>750,64380=>580,64381=>580,64394=>338,64395=>338,64402=>874,64403=>874,64404=>329,64405=>329,64508=>776,64509=>700,64510=>304,64511=>304,65010=>640,65020=>837,65136=>300,65140=>300,65142=>300,65144=>300,65146=>300,65148=>300,65152=>724,65153=>321,65154=>275,65155=>249,65156=>275,65157=>399,65158=>399,65159=>249,65160=>275,65161=>776,65162=>776,65163=>301,65164=>264,65165=>249,65166=>275,65167=>950,65168=>950,65169=>293,65170=>293,65171=>424,65172=>622,65173=>925,65174=>925,65175=>308,65176=>308,65177=>924,65178=>924,65179=>298,65180=>298,65181=>738,65182=>738,65183=>574,65184=>574,65185=>748,65186=>750,65187=>600,65188=>600,65189=>701,65190=>775,65191=>596,65192=>596,65193=>397,65194=>397,65195=>399,65196=>399,65197=>328,65198=>328,65199=>331,65200=>331,65201=>951,65202=>951,65203=>600,65204=>600,65205=>949,65206=>949,65207=>649,65208=>649,65209=>949,65210=>949,65211=>823,65212=>823,65213=>949,65214=>949,65215=>805,65216=>805,65217=>557,65218=>557,65219=>460,65220=>460,65221=>550,65222=>550,65223=>455,65224=>550,65225=>625,65226=>575,65227=>674,65228=>550,65229=>602,65230=>577,65231=>578,65232=>577,65233=>801,65234=>801,65235=>300,65236=>300,65237=>696,65238=>696,65239=>650,65240=>650,65241=>757,65242=>757,65243=>318,65244=>318,65245=>655,65246=>655,65247=>206,65248=>206,65249=>549,65250=>549,65251=>403,65252=>403,65253=>651,65254=>651,65255=>323,65256=>323,65257=>424,65258=>622,65259=>525,65260=>476,65261=>399,65262=>399,65263=>776,65264=>776,65265=>776,65266=>776,65267=>296,65268=>264,65269=>676,65270=>724,65271=>676,65272=>724,65273=>676,65274=>724,65275=>676,65276=>724,65279=>0,65533=>900,65535=>700);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/freeserif.z b/lib/tcpdf/fonts/freeserif.z
index 67f609700b6..426020a793e 100644
Binary files a/lib/tcpdf/fonts/freeserif.z and b/lib/tcpdf/fonts/freeserif.z differ
diff --git a/lib/tcpdf/fonts/freeserifb.ctg.z b/lib/tcpdf/fonts/freeserifb.ctg.z
index 77bfed16b5f..c65ce5d5e02 100644
Binary files a/lib/tcpdf/fonts/freeserifb.ctg.z and b/lib/tcpdf/fonts/freeserifb.ctg.z differ
diff --git a/lib/tcpdf/fonts/freeserifb.php b/lib/tcpdf/fonts/freeserifb.php
index f3b98c5868b..b48fb4ece1a 100644
--- a/lib/tcpdf/fonts/freeserifb.php
+++ b/lib/tcpdf/fonts/freeserifb.php
@@ -1,282 +1,15 @@
900,'Descent'=>-300,'CapHeight'=>16,'Flags'=>32,'FontBBox'=>'[-796 -306 1860 932]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600);
$up=-125;
$ut=50;
-$dw=600;
-$cw=array(
-32=>250,33=>333,34=>555,35=>500,36=>500,37=>1000,38=>833,39=>278,40=>333,41=>333,
-42=>507,43=>676,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,
-52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>676,61=>676,
-62=>676,63=>500,64=>930,65=>722,66=>667,67=>722,68=>724,69=>667,70=>611,71=>778,
-72=>774,73=>386,74=>500,75=>764,76=>664,77=>943,78=>722,79=>778,80=>611,81=>778,
-82=>712,83=>556,84=>667,85=>722,86=>722,87=>1000,88=>722,89=>722,90=>667,91=>333,
-92=>278,93=>333,94=>581,95=>500,96=>333,97=>500,98=>556,99=>444,100=>556,101=>444,
-102=>333,103=>500,104=>556,105=>278,106=>333,107=>556,108=>278,109=>833,110=>556,111=>500,
-112=>556,113=>556,114=>444,115=>389,116=>333,117=>556,118=>500,119=>722,120=>500,121=>500,
-122=>444,123=>394,124=>220,125=>394,126=>520,8364=>761,8218=>250,402=>333,8222=>500,8230=>1000,
-8224=>500,8225=>500,710=>333,8240=>1000,352=>556,8249=>333,338=>1000,381=>667,8216=>250,8217=>250,
-8220=>500,8221=>500,8226=>524,8211=>500,8212=>1000,732=>333,8482=>1000,353=>389,8250=>333,339=>722,
-382=>444,376=>722,160=>250,161=>333,162=>500,163=>500,164=>500,165=>500,166=>220,167=>500,
-168=>333,169=>747,170=>300,171=>500,172=>680,173=>333,174=>747,175=>333,176=>400,177=>676,
-178=>300,179=>300,180=>333,181=>556,182=>540,183=>250,184=>333,185=>270,186=>330,187=>500,
-188=>750,189=>750,190=>750,191=>500,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,
-198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389,
-208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>676,216=>778,217=>722,
-218=>722,219=>722,220=>722,221=>722,222=>632,223=>556,224=>500,225=>500,226=>500,227=>500,
-228=>500,229=>500,230=>722,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,
-238=>278,239=>278,240=>500,241=>556,242=>500,243=>500,244=>500,245=>500,246=>500,247=>676,
-248=>500,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500,256=>722,257=>500,
-258=>722,259=>500,260=>722,261=>500,262=>722,263=>444,264=>722,265=>444,266=>722,267=>444,
-268=>722,269=>444,270=>722,271=>616,272=>722,273=>556,274=>667,275=>444,276=>667,277=>444,
-278=>667,279=>444,280=>667,281=>444,282=>667,283=>444,284=>778,285=>500,286=>778,287=>500,
-288=>778,289=>500,290=>778,291=>500,292=>778,293=>556,294=>778,295=>556,296=>389,297=>278,
-298=>389,299=>278,300=>389,301=>278,302=>389,303=>278,304=>389,305=>278,306=>882,307=>486,
-308=>500,309=>338,310=>778,311=>556,312=>534,313=>667,314=>278,315=>667,316=>278,317=>667,
-318=>398,319=>667,320=>528,321=>667,322=>278,323=>722,324=>556,325=>722,326=>556,327=>722,
-328=>556,329=>556,330=>722,331=>556,332=>778,333=>500,334=>778,335=>500,336=>778,337=>500,
-340=>722,341=>444,342=>722,343=>444,344=>722,345=>444,346=>556,347=>389,348=>556,349=>389,
-350=>556,351=>389,354=>667,355=>333,356=>667,357=>449,358=>667,359=>333,360=>722,361=>556,
-362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556,
-372=>1000,373=>722,374=>722,375=>500,377=>667,378=>444,379=>667,380=>444,383=>333,384=>556,
-385=>805,386=>648,387=>556,388=>667,389=>556,390=>722,391=>915,392=>605,393=>722,394=>862,
-395=>667,396=>556,397=>550,398=>667,399=>778,400=>631,401=>611,403=>903,404=>776,405=>807,
-406=>327,407=>389,408=>887,409=>556,410=>278,411=>495,412=>1000,413=>864,414=>556,415=>778,
-416=>778,417=>550,418=>1192,419=>795,420=>749,421=>556,422=>748,423=>556,424=>389,425=>650,
-426=>465,427=>333,428=>667,429=>333,430=>667,431=>839,432=>629,433=>811,434=>685,435=>853,
-436=>705,437=>667,438=>444,439=>593,440=>654,441=>508,442=>500,443=>500,444=>654,445=>520,
-446=>444,447=>611,448=>220,449=>418,450=>570,451=>333,452=>1391,453=>1168,454=>1000,455=>1164,
-456=>997,457=>611,458=>1222,459=>1055,460=>889,461=>722,462=>500,463=>386,464=>278,465=>778,
-466=>500,467=>722,468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722,
-476=>556,477=>444,478=>722,479=>500,480=>722,481=>500,482=>1000,483=>722,484=>778,485=>500,
-486=>778,487=>500,488=>764,489=>556,490=>778,491=>500,492=>778,493=>500,494=>593,495=>502,
-496=>338,497=>1391,498=>1168,499=>1000,500=>778,501=>500,502=>995,503=>603,504=>722,505=>556,
-506=>722,507=>500,508=>1000,509=>722,510=>778,511=>500,512=>722,513=>500,514=>722,515=>500,
-516=>667,517=>444,518=>667,519=>444,520=>386,521=>278,522=>386,523=>278,524=>778,525=>500,
-526=>778,527=>500,528=>712,529=>444,530=>712,531=>444,532=>722,533=>556,534=>722,535=>556,
-536=>556,537=>389,538=>667,539=>333,540=>464,541=>455,542=>774,543=>556,544=>731,545=>649,
-546=>568,547=>494,548=>667,549=>444,550=>722,551=>500,552=>667,553=>444,554=>778,555=>500,
-556=>778,557=>500,558=>778,559=>500,560=>778,561=>500,562=>722,563=>500,564=>437,565=>636,
-566=>415,567=>338,568=>776,569=>760,570=>722,571=>722,572=>444,573=>664,574=>667,575=>389,
-576=>451,577=>505,578=>479,579=>686,580=>750,581=>722,582=>667,583=>478,584=>500,585=>333,
-586=>808,587=>608,588=>712,589=>444,590=>757,591=>500,592=>500,593=>523,594=>523,595=>556,
-596=>444,598=>556,599=>556,600=>444,601=>444,602=>611,603=>440,604=>440,605=>611,607=>333,
-608=>500,609=>500,610=>556,613=>556,614=>556,615=>556,616=>278,617=>333,618=>278,619=>278,
-621=>278,622=>667,623=>833,624=>833,625=>833,626=>556,627=>556,628=>556,629=>500,631=>715,
-632=>667,633=>444,634=>444,635=>444,636=>444,637=>444,638=>394,639=>394,640=>556,641=>556,
-642=>389,643=>333,644=>333,645=>433,647=>333,648=>333,649=>500,650=>557,651=>529,652=>500,
-653=>722,654=>500,655=>500,656=>444,658=>502,660=>500,661=>500,662=>500,664=>778,665=>510,
-667=>722,668=>556,670=>556,671=>444,672=>556,673=>500,674=>500,686=>611,687=>722,697=>250,
-698=>408,699=>250,700=>250,701=>250,702=>300,703=>300,706=>333,707=>333,708=>333,709=>333,
-711=>333,712=>333,713=>333,714=>333,715=>333,716=>300,717=>333,718=>333,719=>333,720=>278,
-721=>278,722=>300,723=>300,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,
-731=>333,733=>400,734=>333,735=>352,741=>526,742=>526,743=>526,744=>526,745=>526,746=>519,
-747=>519,748=>333,749=>333,750=>480,751=>333,752=>333,753=>333,754=>333,755=>327,756=>261,
-757=>437,758=>437,759=>400,760=>278,761=>175,762=>175,763=>175,764=>175,765=>333,766=>337,
-767=>432,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,
-777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,
-787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,
-797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,
-807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,
-817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,
-827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,
-837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,
-847=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,
-857=>0,858=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,884=>199,885=>199,
-890=>0,894=>333,900=>330,901=>415,902=>722,903=>250,904=>811,905=>938,906=>556,908=>840,
-910=>886,911=>879,912=>330,913=>722,914=>667,915=>611,916=>759,917=>667,918=>667,919=>774,
-920=>778,921=>386,922=>777,923=>722,924=>943,925=>722,926=>650,927=>778,928=>812,929=>611,
-931=>650,932=>667,933=>738,934=>868,935=>722,936=>924,937=>811,938=>386,939=>738,940=>605,
-941=>440,942=>605,943=>330,944=>550,945=>605,946=>550,947=>550,948=>550,949=>440,950=>495,
-951=>605,952=>550,953=>330,954=>608,955=>495,956=>605,957=>495,958=>495,959=>550,960=>605,
-961=>550,962=>440,963=>550,964=>440,965=>550,966=>660,967=>495,968=>715,969=>715,970=>330,
-971=>550,972=>550,973=>550,974=>715,976=>550,977=>605,978=>722,979=>871,980=>722,981=>660,
-982=>715,983=>550,984=>611,985=>550,986=>650,987=>514,988=>611,989=>513,990=>715,991=>439,
-992=>722,993=>605,1008=>550,1009=>550,1010=>477,1011=>333,1012=>778,1013=>424,1014=>424,1015=>632,
-1016=>575,1017=>722,1018=>943,1019=>809,1020=>550,1021=>722,1022=>722,1023=>722,1024=>667,1025=>667,
-1026=>848,1027=>611,1028=>722,1029=>556,1030=>386,1031=>386,1032=>500,1033=>1042,1034=>1032,1035=>912,
-1036=>770,1037=>774,1038=>738,1039=>778,1040=>722,1041=>648,1042=>667,1043=>599,1044=>708,1045=>667,
-1046=>1106,1047=>652,1048=>774,1049=>774,1050=>770,1051=>788,1052=>943,1053=>774,1054=>778,1055=>812,
-1056=>611,1057=>722,1058=>667,1059=>738,1060=>868,1061=>722,1062=>774,1063=>754,1064=>1115,1065=>1115,
-1066=>782,1067=>970,1068=>630,1069=>722,1070=>1114,1071=>729,1072=>500,1073=>500,1074=>510,1075=>430,
-1076=>545,1077=>438,1078=>781,1079=>445,1080=>556,1081=>556,1082=>556,1083=>542,1084=>668,1085=>558,
-1086=>500,1087=>558,1088=>549,1089=>444,1090=>494,1091=>486,1092=>809,1093=>500,1094=>560,1095=>556,
-1096=>818,1097=>820,1098=>612,1099=>756,1100=>512,1101=>496,1102=>770,1103=>546,1104=>438,1105=>444,
-1106=>549,1107=>430,1108=>488,1109=>386,1110=>272,1111=>278,1112=>333,1113=>784,1114=>786,1115=>552,
-1116=>556,1117=>556,1118=>484,1119=>556,1120=>1018,1121=>699,1122=>781,1123=>612,1124=>1033,1125=>778,
-1126=>993,1127=>692,1128=>1371,1129=>975,1130=>1106,1131=>781,1132=>1474,1133=>1066,1134=>650,1135=>424,
-1136=>970,1137=>769,1138=>770,1139=>590,1140=>808,1141=>578,1142=>808,1143=>650,1144=>1284,1145=>973,
-1146=>928,1147=>672,1148=>1018,1149=>693,1150=>1018,1151=>699,1152=>650,1153=>444,1154=>258,1155=>0,
-1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>774,1163=>558,1164=>630,1165=>512,
-1166=>611,1167=>556,1168=>614,1169=>458,1170=>614,1171=>443,1172=>631,1173=>562,1174=>1155,1175=>828,
-1176=>652,1177=>452,1178=>819,1179=>600,1180=>816,1181=>590,1182=>920,1183=>664,1184=>967,1185=>633,
-1186=>774,1187=>562,1188=>984,1189=>698,1190=>1069,1191=>841,1192=>722,1193=>524,1194=>722,1195=>444,
-1196=>667,1197=>494,1198=>722,1199=>606,1200=>722,1201=>606,1202=>722,1203=>560,1204=>1046,1205=>778,
-1206=>754,1207=>560,1208=>810,1209=>590,1210=>754,1211=>556,1212=>945,1213=>606,1214=>945,1215=>606,
-1216=>386,1217=>1106,1218=>781,1219=>770,1220=>534,1221=>788,1222=>550,1223=>774,1224=>556,1225=>774,
-1226=>558,1227=>778,1228=>556,1229=>943,1230=>677,1231=>386,1232=>722,1233=>500,1234=>722,1235=>500,
-1236=>1000,1237=>722,1238=>667,1239=>444,1240=>778,1241=>444,1242=>778,1243=>444,1244=>1106,1245=>781,
-1246=>652,1247=>445,1248=>654,1249=>389,1250=>774,1251=>556,1252=>774,1253=>556,1254=>778,1255=>500,
-1256=>778,1257=>500,1258=>778,1259=>500,1260=>722,1261=>496,1262=>738,1263=>500,1264=>738,1265=>500,
-1266=>738,1267=>500,1268=>754,1269=>556,1270=>599,1271=>443,1272=>970,1273=>756,1296=>652,1297=>452,
-1298=>788,1299=>550,1306=>778,1307=>556,1308=>1000,1309=>722,1310=>770,1311=>558,1425=>0,1426=>0,
-1427=>0,1428=>0,1429=>0,1430=>0,1431=>0,1432=>0,1433=>0,1434=>0,1435=>0,1436=>0,
-1437=>0,1438=>0,1439=>0,1440=>0,1441=>0,1442=>0,1443=>0,1444=>0,1445=>0,1446=>0,
-1447=>0,1448=>0,1449=>0,1450=>0,1451=>0,1452=>0,1453=>0,1454=>0,1455=>0,1456=>0,
-1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0,
-1467=>0,1468=>0,1469=>0,1470=>433,1471=>0,1472=>155,1473=>0,1474=>0,1475=>400,1476=>0,
-1477=>0,1478=>347,1479=>0,1488=>593,1489=>498,1490=>339,1491=>523,1492=>561,1493=>266,1494=>291,
-1495=>559,1496=>576,1497=>266,1498=>496,1499=>501,1500=>510,1501=>542,1502=>581,1503=>273,1504=>347,
-1505=>512,1506=>552,1507=>493,1508=>491,1509=>537,1510=>561,1511=>544,1512=>502,1513=>716,1514=>571,
-1520=>532,1521=>532,1522=>532,1523=>396,1524=>432,3585=>590,3586=>578,3587=>661,3588=>592,3589=>592,
-3590=>699,3591=>447,3592=>534,3593=>692,3594=>578,3595=>659,3596=>899,3597=>804,3598=>633,3599=>637,
-3600=>484,3601=>730,3602=>876,3603=>915,3604=>592,3605=>592,3606=>578,3607=>670,3608=>542,3609=>671,
-3610=>621,3611=>618,3612=>621,3613=>617,3614=>708,3615=>708,3616=>637,3617=>589,3618=>552,3619=>484,
-3620=>590,3621=>569,3622=>637,3623=>526,3624=>599,3625=>802,3626=>579,3627=>668,3628=>778,3629=>560,
-3630=>514,3631=>510,3632=>412,3633=>0,3634=>423,3635=>452,3636=>0,3637=>0,3638=>0,3639=>0,
-3640=>0,3641=>0,3642=>0,3647=>665,3648=>357,3649=>624,3650=>529,3651=>486,3652=>475,3653=>423,
-3654=>500,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,3660=>0,3661=>0,3662=>0,3663=>657,
-3664=>548,3665=>548,3666=>592,3667=>614,3668=>631,3669=>643,3670=>508,3671=>744,3672=>622,3673=>585,
-3674=>721,3675=>1381,4256=>475,4257=>469,4258=>573,4259=>650,4260=>502,4261=>506,4262=>481,4263=>746,
-4264=>491,4265=>495,4266=>888,4267=>488,4268=>464,4269=>745,4270=>483,4271=>489,4272=>721,4273=>464,
-4274=>578,4275=>590,4276=>611,4277=>491,4278=>663,4279=>489,4280=>544,4281=>479,4282=>527,4283=>488,
-4284=>560,4285=>461,4286=>467,4287=>546,4288=>483,4289=>487,4290=>562,4291=>477,4292=>491,4293=>471,
-4304=>522,4305=>518,4306=>621,4307=>716,4308=>517,4309=>519,4310=>518,4311=>796,4312=>518,4313=>518,
-4314=>934,4315=>517,4316=>519,4317=>787,4318=>515,4319=>514,4320=>788,4321=>573,4322=>620,4323=>593,
-4324=>639,4325=>516,4326=>714,4327=>518,4328=>572,4329=>518,4330=>555,4331=>518,4332=>562,4333=>509,
-4334=>572,4335=>677,4336=>523,4337=>517,4338=>595,4339=>480,4340=>519,4341=>484,4345=>621,4347=>450,
-5024=>718,5025=>768,5026=>633,5027=>878,5028=>1001,5029=>371,5030=>576,5031=>754,5032=>531,5033=>774,
-5034=>692,5035=>499,5036=>668,5037=>829,5038=>575,5039=>681,5040=>485,5041=>607,5042=>885,5043=>974,
-5044=>588,5045=>583,5046=>726,5047=>947,5048=>558,5049=>832,5050=>1096,5051=>780,5052=>595,5053=>869,
-5054=>752,5055=>710,5056=>761,5057=>802,5058=>760,5059=>656,5060=>655,5061=>982,5062=>684,5063=>801,
-5064=>805,5065=>1042,5066=>755,5067=>612,5068=>707,5069=>889,5070=>584,5071=>623,5072=>536,5073=>763,
-5074=>763,5075=>498,5076=>1052,5077=>600,5078=>730,5079=>714,5080=>714,5081=>697,5082=>543,5083=>943,
-5084=>718,5085=>630,5086=>660,5087=>692,5088=>841,5089=>861,5090=>617,5091=>733,5092=>898,5093=>896,
-5094=>781,5095=>612,5096=>830,5097=>948,5098=>886,5099=>757,5100=>796,5101=>578,5102=>601,5103=>797,
-5104=>623,5105=>886,5106=>730,5107=>827,5108=>648,7680=>722,7681=>500,7682=>667,7683=>556,7684=>667,
-7685=>556,7686=>667,7687=>556,7688=>722,7689=>444,7690=>724,7691=>556,7692=>724,7693=>556,7694=>724,
-7695=>556,7696=>724,7697=>556,7698=>724,7699=>556,7700=>667,7701=>444,7702=>667,7703=>444,7704=>667,
-7705=>444,7706=>667,7707=>444,7708=>667,7709=>444,7710=>611,7711=>333,7712=>778,7713=>500,7714=>774,
-7715=>556,7716=>774,7717=>556,7718=>774,7719=>556,7720=>774,7721=>556,7722=>774,7723=>556,7724=>386,
-7725=>278,7726=>389,7727=>278,7728=>764,7729=>556,7730=>764,7731=>556,7732=>764,7733=>556,7734=>664,
-7735=>278,7736=>664,7737=>278,7738=>664,7739=>278,7740=>664,7741=>278,7742=>943,7743=>833,7744=>943,
-7745=>833,7746=>943,7747=>833,7748=>722,7749=>556,7750=>722,7751=>556,7752=>722,7753=>556,7754=>722,
-7755=>556,7756=>778,7757=>500,7758=>778,7759=>500,7760=>778,7761=>500,7762=>778,7763=>500,7764=>611,
-7765=>556,7766=>611,7767=>556,7768=>712,7769=>444,7770=>712,7771=>444,7772=>712,7773=>444,7774=>712,
-7775=>444,7776=>556,7777=>389,7778=>556,7779=>389,7780=>556,7781=>389,7782=>556,7783=>389,7784=>556,
-7785=>389,7786=>667,7787=>333,7788=>667,7789=>333,7790=>667,7791=>333,7792=>667,7793=>333,7794=>722,
-7795=>556,7796=>722,7797=>556,7798=>722,7799=>556,7800=>722,7801=>556,7802=>722,7803=>556,7804=>722,
-7805=>500,7806=>722,7807=>500,7808=>1000,7809=>722,7810=>1000,7811=>722,7812=>1000,7813=>722,7814=>1000,
-7815=>722,7816=>1000,7817=>722,7818=>722,7819=>500,7820=>722,7821=>500,7822=>722,7823=>500,7824=>667,
-7825=>444,7826=>667,7827=>444,7828=>667,7829=>444,7830=>556,7831=>333,7832=>722,7833=>500,7834=>507,
-7835=>333,7840=>722,7841=>500,7842=>722,7843=>500,7844=>722,7845=>500,7846=>722,7847=>500,7848=>722,
-7849=>500,7850=>722,7851=>500,7852=>722,7853=>500,7854=>722,7855=>500,7856=>722,7857=>500,7858=>825,
-7859=>603,7860=>722,7861=>500,7862=>722,7863=>500,7864=>667,7865=>444,7866=>667,7867=>444,7868=>667,
-7869=>444,7870=>667,7871=>444,7872=>667,7873=>444,7874=>667,7875=>444,7876=>667,7877=>444,7878=>667,
-7879=>444,7880=>386,7881=>278,7882=>386,7883=>278,7884=>778,7885=>500,7886=>778,7887=>500,7888=>778,
-7889=>500,7890=>778,7891=>500,7892=>778,7893=>500,7894=>778,7895=>500,7896=>778,7897=>500,7898=>774,
-7899=>550,7900=>774,7901=>550,7902=>774,7903=>549,7904=>778,7905=>550,7906=>778,7907=>550,7908=>722,
-7909=>556,7910=>722,7911=>556,7912=>838,7913=>672,7914=>838,7915=>672,7916=>825,7917=>659,7918=>839,
-7919=>629,7920=>839,7921=>629,7922=>722,7923=>500,7924=>722,7925=>500,7926=>722,7927=>500,7928=>722,
-7929=>500,7936=>605,7937=>605,7938=>605,7939=>605,7940=>605,7941=>605,7942=>605,7943=>605,7944=>722,
-7945=>722,7946=>830,7947=>833,7948=>761,7949=>798,7950=>721,7951=>722,7952=>440,7953=>440,7954=>440,
-7955=>440,7956=>440,7957=>440,7960=>817,7961=>826,7962=>944,7963=>970,7964=>964,7965=>1009,7968=>605,
-7969=>605,7970=>605,7971=>605,7972=>605,7973=>605,7974=>605,7975=>605,7976=>926,7977=>921,7978=>1038,
-7979=>1064,7980=>1092,7981=>1102,7982=>1005,7983=>991,7984=>330,7985=>330,7986=>330,7987=>330,7988=>330,
-7989=>330,7990=>330,7991=>330,7992=>534,7993=>541,7994=>653,7995=>659,7996=>705,7997=>714,7998=>612,
-7999=>614,8000=>550,8001=>550,8002=>550,8003=>550,8004=>550,8005=>550,8008=>885,8009=>886,8010=>1038,
-8011=>1052,8012=>997,8013=>1021,8016=>550,8017=>550,8018=>550,8019=>550,8020=>550,8021=>550,8022=>550,
-8023=>550,8025=>870,8027=>1014,8029=>1043,8031=>944,8032=>715,8033=>715,8034=>715,8035=>715,8036=>715,
-8037=>715,8038=>715,8039=>715,8040=>905,8041=>913,8042=>1066,8043=>1085,8044=>1034,8045=>1044,8046=>980,
-8047=>961,8048=>605,8049=>605,8050=>440,8051=>440,8052=>605,8053=>605,8054=>330,8055=>330,8056=>550,
-8057=>550,8058=>550,8059=>550,8060=>715,8061=>715,8064=>605,8065=>605,8066=>605,8067=>605,8068=>605,
-8069=>605,8070=>605,8071=>605,8072=>886,8073=>887,8074=>985,8075=>993,8076=>937,8077=>956,8078=>874,
-8079=>878,8080=>605,8081=>605,8082=>605,8083=>605,8084=>605,8085=>605,8086=>605,8087=>605,8088=>1096,
-8089=>1092,8090=>1223,8091=>1250,8092=>1270,8093=>1283,8094=>1174,8095=>1162,8096=>715,8097=>715,8098=>715,
-8099=>715,8100=>715,8101=>715,8102=>715,8103=>715,8104=>1057,8105=>1073,8106=>1228,8107=>1251,8108=>1202,
-8109=>1210,8110=>1151,8111=>1131,8112=>605,8113=>605,8114=>605,8115=>605,8116=>605,8118=>605,8119=>605,
-8120=>722,8121=>722,8122=>722,8123=>722,8124=>883,8125=>500,8126=>0,8127=>500,8128=>500,8129=>550,
-8130=>605,8131=>605,8132=>605,8134=>605,8135=>605,8136=>790,8137=>830,8138=>909,8139=>931,8140=>950,
-8141=>500,8142=>500,8143=>500,8144=>330,8145=>330,8146=>330,8147=>330,8150=>330,8151=>330,8152=>386,
-8153=>386,8154=>506,8155=>550,8157=>500,8158=>500,8159=>500,8160=>550,8161=>550,8162=>550,8163=>550,
-8164=>550,8165=>550,8166=>550,8167=>550,8168=>738,8169=>738,8170=>858,8171=>880,8172=>764,8173=>550,
-8174=>550,8175=>500,8178=>715,8179=>715,8180=>715,8182=>715,8183=>715,8184=>884,8185=>857,8186=>927,
-8187=>892,8188=>988,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,
-8198=>167,8199=>500,8200=>250,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,
-8208=>333,8209=>333,8210=>500,8213=>1000,8214=>333,8215=>478,8219=>250,8223=>500,8227=>560,8228=>250,
-8229=>500,8231=>250,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>250,
-8241=>1588,8242=>270,8243=>492,8244=>714,8245=>270,8246=>484,8247=>693,8248=>469,8251=>727,8252=>666,
-8253=>695,8254=>500,8255=>953,8256=>953,8257=>338,8258=>931,8259=>333,8260=>167,8261=>332,8262=>332,
-8263=>1000,8264=>833,8265=>833,8266=>500,8267=>540,8268=>528,8269=>523,8270=>500,8271=>333,8272=>953,
-8273=>500,8274=>497,8275=>576,8276=>953,8277=>785,8278=>450,8279=>881,8280=>620,8281=>620,8282=>179,
-8283=>621,8284=>569,8285=>179,8286=>179,8287=>111,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,
-8304=>300,8305=>278,8308=>300,8309=>300,8310=>300,8311=>300,8312=>300,8313=>300,8314=>300,8315=>300,
-8316=>300,8317=>216,8318=>216,8319=>318,8320=>300,8321=>274,8322=>300,8323=>300,8324=>300,8325=>300,
-8326=>300,8327=>300,8328=>300,8329=>300,8330=>300,8331=>300,8332=>300,8333=>216,8334=>216,8352=>710,
-8353=>722,8354=>783,8355=>611,8356=>500,8357=>833,8358=>722,8359=>960,8360=>1101,8361=>1000,8362=>889,
-8363=>532,8365=>742,8366=>631,8369=>609,8370=>639,8371=>660,8372=>556,8373=>500,8448=>752,8449=>746,
-8451=>1009,8457=>923,8458=>500,8459=>1035,8462=>556,8463=>556,8464=>792,8465=>737,8466=>800,8467=>427,
-8468=>835,8470=>879,8471=>1048,8472=>666,8475=>747,8476=>955,8478=>722,8479=>722,8480=>891,8481=>1156,
-8483=>722,8486=>811,8487=>811,8489=>333,8490=>764,8491=>722,8492=>806,8494=>551,8497=>723,8498=>611,
-8499=>1203,8501=>593,8502=>498,8503=>339,8504=>523,8506=>906,8507=>1156,8523=>778,8525=>866,8526=>500,
-8531=>750,8532=>750,8533=>750,8534=>750,8535=>750,8536=>750,8537=>750,8538=>750,8539=>750,8540=>750,
-8541=>750,8542=>750,8543=>750,8544=>386,8545=>772,8546=>1158,8547=>1108,8548=>722,8549=>1108,8550=>1494,
-8551=>1880,8552=>1108,8553=>722,8554=>1108,8555=>1494,8556=>664,8557=>722,8558=>724,8559=>943,8560=>278,
-8561=>556,8562=>834,8563=>778,8564=>500,8565=>778,8566=>1056,8567=>1334,8568=>778,8569=>500,8570=>778,
-8571=>1056,8572=>278,8573=>444,8574=>556,8575=>833,8592=>964,8593=>523,8594=>964,8595=>523,8596=>964,
-8597=>964,8598=>964,8599=>964,8600=>964,8601=>964,8602=>964,8603=>964,8604=>1152,8605=>1152,8606=>964,
-8607=>964,8608=>964,8609=>964,8610=>1078,8611=>1078,8612=>964,8613=>964,8614=>964,8615=>964,8616=>964,
-8617=>964,8618=>964,8619=>964,8620=>964,8621=>1168,8622=>964,8624=>622,8625=>622,8630=>1069,8631=>1069,
-8632=>964,8633=>964,8634=>980,8635=>980,8636=>964,8637=>964,8638=>557,8639=>556,8640=>964,8641=>964,
-8642=>557,8643=>556,8644=>964,8645=>964,8646=>964,8647=>964,8648=>964,8649=>964,8650=>964,8651=>964,
-8652=>964,8653=>964,8654=>964,8655=>964,8656=>964,8657=>630,8658=>964,8659=>630,8660=>964,8661=>630,
-8662=>1063,8663=>1063,8664=>1063,8665=>1063,8666=>964,8667=>964,8668=>1100,8669=>1100,8672=>964,8674=>964,
-8676=>964,8677=>964,8704=>627,8705=>716,8706=>558,8707=>627,8708=>627,8709=>500,8710=>612,8711=>719,
-8713=>576,8714=>576,8716=>576,8717=>576,8720=>733,8721=>713,8722=>676,8723=>676,8724=>676,8725=>750,
-8727=>570,8729=>570,8730=>549,8733=>676,8734=>752,8736=>555,8737=>555,8738=>555,8739=>240,8740=>531,
-8741=>478,8742=>705,8743=>694,8744=>694,8745=>694,8746=>694,8747=>323,8756=>629,8757=>629,8761=>947,
-8764=>676,8765=>676,8766=>763,8768=>305,8769=>676,8770=>676,8771=>676,8773=>676,8776=>676,8777=>676,
-8778=>676,8781=>676,8782=>676,8783=>676,8784=>676,8785=>676,8786=>676,8787=>676,8788=>947,8789=>947,
-8790=>676,8791=>676,8796=>676,8800=>570,8801=>676,8802=>676,8804=>570,8805=>570,8806=>676,8807=>676,
-8808=>676,8809=>676,8810=>1047,8811=>1047,8812=>450,8813=>676,8814=>676,8815=>676,8816=>676,8817=>676,
-8818=>676,8819=>676,8820=>676,8821=>676,8822=>676,8823=>676,8824=>676,8825=>676,8826=>676,8827=>676,
-8828=>676,8829=>676,8830=>676,8831=>676,8832=>676,8833=>676,8834=>676,8835=>676,8836=>676,8837=>676,
-8838=>676,8839=>676,8840=>676,8841=>676,8842=>676,8843=>676,8846=>694,8847=>676,8848=>676,8849=>676,
-8850=>676,8851=>694,8852=>694,8853=>738,8854=>738,8855=>738,8856=>738,8857=>738,8858=>738,8859=>738,
-8861=>738,8862=>678,8863=>678,8864=>678,8865=>678,8866=>487,8867=>487,8868=>752,8869=>752,8871=>487,
-8873=>659,8874=>831,8876=>487,8877=>487,8878=>659,8879=>659,8882=>676,8883=>676,8884=>676,8885=>676,
-8886=>1380,8887=>1380,8888=>1027,8890=>626,8891=>694,8892=>694,8893=>694,8900=>512,8903=>676,8904=>759,
-8905=>632,8906=>632,8907=>1000,8908=>1000,8909=>676,8910=>694,8911=>694,8912=>676,8913=>676,8914=>694,
-8915=>694,8916=>694,8918=>676,8919=>676,8920=>1441,8921=>1441,8922=>676,8923=>676,8924=>676,8925=>676,
-8926=>676,8927=>676,8928=>676,8929=>676,8930=>676,8931=>676,8934=>676,8935=>676,8936=>676,8937=>676,
-8938=>676,8939=>676,8940=>676,8941=>676,8960=>737,8968=>411,8969=>411,8970=>411,8971=>411,8976=>680,
-8994=>951,8995=>951,9001=>398,9002=>398,9251=>500,9472=>1000,9473=>1000,9474=>1000,9475=>1000,9476=>1000,
-9477=>1000,9478=>1000,9479=>1000,9480=>1000,9481=>1000,9482=>1000,9483=>1000,9484=>1000,9485=>1000,9486=>1000,
-9487=>1000,9488=>1000,9489=>1000,9490=>1000,9491=>1000,9492=>1000,9493=>1000,9494=>1000,9495=>1000,9496=>1000,
-9497=>1000,9498=>1000,9499=>1000,9500=>1000,9501=>1000,9502=>1000,9503=>1000,9504=>1000,9505=>1000,9506=>1000,
-9507=>1000,9508=>1000,9509=>1000,9510=>1000,9511=>1000,9512=>1000,9513=>1000,9514=>1000,9515=>1000,9516=>1000,
-9517=>1000,9518=>1000,9519=>1000,9520=>1000,9521=>1000,9522=>1000,9523=>1000,9524=>1000,9525=>1000,9526=>1000,
-9527=>1000,9528=>1000,9529=>1000,9530=>1000,9531=>1000,9532=>1000,9533=>1000,9534=>1000,9535=>1000,9536=>1000,
-9537=>1000,9538=>1000,9539=>1000,9540=>1000,9541=>1000,9542=>1000,9543=>1000,9544=>1000,9545=>1000,9546=>1000,
-9547=>1000,9552=>1000,9553=>1000,9554=>1000,9555=>1000,9556=>1000,9557=>1000,9558=>1000,9559=>1000,9560=>1000,
-9561=>1000,9562=>1000,9563=>1000,9564=>1000,9565=>1000,9566=>1000,9567=>1000,9568=>1000,9569=>1000,9570=>1000,
-9571=>1000,9572=>1000,9573=>1000,9574=>1000,9575=>1000,9576=>1000,9577=>1000,9578=>1000,9579=>1000,9580=>1000,
-9600=>1000,9601=>1000,9602=>1000,9603=>1000,9604=>1000,9605=>1000,9606=>1000,9607=>1000,9608=>1000,9609=>1000,
-9610=>1000,9611=>1000,9612=>1000,9613=>1000,9614=>1000,9615=>1000,9616=>1000,9617=>1000,9618=>1000,9620=>1000,
-9621=>1000,9622=>1000,9623=>1000,9624=>1000,9625=>1000,9626=>1000,9627=>1000,9628=>1000,9629=>1000,9630=>1000,
-9631=>1000,9632=>678,9633=>678,9642=>309,9650=>681,9651=>681,9654=>681,9655=>681,9660=>681,9661=>681,
-9664=>681,9665=>681,9670=>580,9671=>580,9674=>494,9675=>738,9676=>732,9679=>738,9702=>524,9711=>851,
-9733=>1003,9734=>1003,9824=>618,9825=>645,9826=>587,9827=>582,9828=>582,9829=>645,9830=>587,9831=>618,
-9833=>333,9834=>556,9835=>778,9836=>778,9837=>556,9838=>556,9839=>556,10214=>561,10215=>561,11799=>333,
-64256=>613,64257=>559,64258=>559,64259=>846,64260=>836,64262=>723,64285=>266,64286=>0,64287=>532,64288=>552,
-64297=>570,64298=>716,64299=>716,64300=>716,64301=>716,64302=>593,64303=>593,64304=>593,64305=>498,64306=>339,
-64307=>523,64308=>561,64309=>266,64310=>291,64312=>576,64313=>266,64314=>496,64315=>501,64316=>510,64318=>581,
-64320=>347,64321=>512,64323=>493,64324=>491,64326=>561,64327=>544,64328=>502,64329=>716,64330=>571,64331=>266,
-64332=>498,64333=>501,64334=>491,64335=>593,65533=>788);
-$enc='';
+$dw=700;
$diff='';
+$originalsize=615292;
+$enc='';
$file='freeserifb.z';
$ctg='freeserifb.ctg.z';
-$originalsize=467208;
-?>
\ No newline at end of file
+$desc=array('Flags'=>32,'FontBBox'=>'[-796 -306 1830 932]','ItalicAngle'=>0,'Ascent'=>900,'Descent'=>-300,'Leading'=>90,'CapHeight'=>676,'XHeight'=>461,'StemV'=>123,'StemH'=>53,'AvgWidth'=>426,'MaxWidth'=>1850,'MissingWidth'=>700);
+$cw=array(0=>0,1=>700,2=>700,3=>700,4=>700,5=>700,6=>700,7=>700,8=>0,9=>600,10=>700,11=>700,12=>700,13=>600,14=>700,15=>700,16=>700,17=>700,18=>700,19=>700,20=>700,21=>700,22=>700,23=>700,24=>700,25=>700,26=>700,27=>700,28=>700,29=>0,30=>700,31=>700,32=>250,33=>333,34=>555,35=>500,36=>500,37=>1000,38=>833,39=>278,40=>333,41=>333,42=>507,43=>676,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>676,61=>676,62=>676,63=>500,64=>930,65=>722,66=>667,67=>722,68=>724,69=>667,70=>611,71=>778,72=>774,73=>386,74=>500,75=>764,76=>664,77=>943,78=>722,79=>778,80=>611,81=>778,82=>712,83=>556,84=>667,85=>722,86=>722,87=>1000,88=>722,89=>722,90=>667,91=>333,92=>278,93=>333,94=>581,95=>500,96=>333,97=>500,98=>546,99=>444,100=>556,101=>444,102=>333,103=>500,104=>556,105=>278,106=>333,107=>556,108=>278,109=>833,110=>556,111=>500,112=>549,113=>547,114=>444,115=>389,116=>333,117=>556,118=>500,119=>722,120=>500,121=>500,122=>444,123=>394,124=>220,125=>394,126=>520,127=>700,128=>722,129=>722,130=>722,131=>667,132=>722,133=>778,134=>722,135=>500,136=>500,137=>500,138=>500,139=>500,140=>500,141=>444,142=>444,143=>444,144=>444,145=>444,146=>278,147=>278,148=>278,149=>278,150=>556,151=>500,152=>500,153=>500,154=>500,155=>500,156=>556,157=>556,158=>556,159=>556,160=>250,161=>333,162=>500,163=>500,164=>500,165=>500,166=>220,167=>500,168=>333,169=>747,170=>300,171=>500,172=>680,173=>333,174=>747,175=>333,176=>400,177=>676,178=>300,179=>300,180=>333,181=>556,182=>540,183=>250,184=>333,185=>270,186=>330,187=>500,188=>750,189=>750,190=>750,191=>500,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>676,216=>778,217=>722,218=>722,219=>722,220=>722,221=>722,222=>632,223=>556,224=>500,225=>500,226=>500,227=>500,228=>500,229=>500,230=>703,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>556,242=>500,243=>500,244=>500,245=>500,246=>500,247=>676,248=>500,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500,256=>722,257=>500,258=>722,259=>500,260=>722,261=>500,262=>722,263=>444,264=>722,265=>444,266=>722,267=>444,268=>722,269=>444,270=>722,271=>692,272=>722,273=>556,274=>667,275=>444,276=>667,277=>444,278=>667,279=>444,280=>667,281=>444,282=>667,283=>444,284=>778,285=>500,286=>778,287=>500,288=>778,289=>500,290=>778,291=>500,292=>778,293=>556,294=>778,295=>556,296=>389,297=>278,298=>389,299=>278,300=>389,301=>278,302=>389,303=>278,304=>389,305=>278,306=>882,307=>533,308=>500,309=>338,310=>778,311=>556,312=>534,313=>667,314=>278,315=>667,316=>278,317=>667,318=>433,319=>667,320=>528,321=>667,322=>278,323=>722,324=>556,325=>722,326=>556,327=>722,328=>556,329=>666,330=>829,331=>556,332=>778,333=>500,334=>778,335=>500,336=>778,337=>500,338=>1000,339=>717,340=>722,341=>444,342=>722,343=>444,344=>722,345=>444,346=>556,347=>389,348=>556,349=>389,350=>556,351=>389,352=>556,353=>389,354=>667,355=>333,356=>667,357=>488,358=>667,359=>333,360=>722,361=>556,362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556,372=>1000,373=>722,374=>722,375=>500,376=>722,377=>667,378=>444,379=>667,380=>444,381=>667,382=>444,383=>333,384=>556,385=>805,386=>659,387=>556,388=>667,389=>556,390=>722,391=>915,392=>605,393=>722,394=>862,395=>667,396=>556,397=>550,398=>667,399=>818,400=>631,401=>611,402=>333,403=>903,404=>776,405=>807,406=>327,407=>389,408=>887,409=>556,410=>278,411=>495,412=>1000,413=>864,414=>556,415=>828,416=>793,417=>584,418=>1192,419=>795,420=>749,421=>556,422=>748,423=>556,424=>389,425=>650,426=>465,427=>333,428=>667,429=>333,430=>667,431=>768,432=>620,433=>811,434=>685,435=>853,436=>705,437=>667,438=>444,439=>593,440=>654,441=>508,442=>500,443=>500,444=>654,445=>520,446=>444,447=>611,448=>220,449=>418,450=>570,451=>333,452=>1331,453=>1158,454=>990,455=>1134,456=>977,457=>611,458=>1200,459=>1015,460=>879,461=>722,462=>500,463=>386,464=>278,465=>778,466=>500,467=>722,468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722,476=>556,477=>444,478=>722,479=>500,480=>722,481=>500,482=>1000,483=>703,484=>778,485=>500,486=>778,487=>500,488=>764,489=>556,490=>778,491=>500,492=>778,493=>500,494=>593,495=>502,496=>338,497=>1331,498=>1158,499=>990,500=>778,501=>500,502=>995,503=>603,504=>722,505=>556,506=>722,507=>500,508=>1000,509=>703,510=>778,511=>500,512=>722,513=>500,514=>722,515=>500,516=>667,517=>444,518=>667,519=>444,520=>386,521=>278,522=>386,523=>278,524=>778,525=>500,526=>778,527=>500,528=>712,529=>444,530=>712,531=>444,532=>722,533=>556,534=>722,535=>556,536=>556,537=>389,538=>667,539=>333,540=>464,541=>455,542=>774,543=>556,544=>731,545=>649,546=>568,547=>494,548=>667,549=>444,550=>722,551=>500,552=>667,553=>444,554=>778,555=>500,556=>778,557=>500,558=>778,559=>500,560=>778,561=>500,562=>722,563=>500,564=>437,565=>636,566=>415,567=>338,568=>776,569=>760,570=>722,571=>722,572=>444,573=>664,574=>667,575=>389,576=>451,577=>505,578=>479,579=>686,580=>750,581=>722,582=>667,583=>478,584=>500,585=>333,586=>808,587=>608,588=>712,589=>444,590=>722,591=>500,592=>500,593=>523,594=>523,595=>556,596=>444,597=>468,598=>658,599=>659,600=>444,601=>444,602=>611,603=>440,604=>440,605=>611,606=>459,607=>333,608=>665,609=>500,610=>556,611=>550,612=>582,613=>556,614=>556,615=>556,616=>293,617=>333,618=>278,619=>369,620=>397,621=>389,622=>667,623=>833,624=>833,625=>833,626=>556,627=>673,628=>589,629=>500,630=>744,631=>715,632=>667,633=>444,634=>444,635=>564,636=>444,637=>444,638=>394,639=>394,640=>556,641=>556,642=>389,643=>503,644=>507,645=>507,646=>560,647=>333,648=>394,649=>500,650=>557,651=>529,652=>500,653=>722,654=>500,655=>500,656=>672,657=>492,658=>502,659=>502,660=>500,661=>500,662=>500,663=>444,664=>778,665=>545,666=>460,667=>722,668=>556,669=>438,670=>556,671=>444,672=>666,673=>500,674=>500,675=>872,676=>878,677=>926,678=>645,679=>634,680=>724,681=>825,682=>636,683=>604,684=>490,685=>500,686=>611,687=>722,688=>378,689=>378,690=>226,691=>301,692=>301,693=>301,694=>378,695=>490,696=>340,697=>250,698=>408,699=>250,700=>250,701=>250,702=>300,703=>300,704=>340,705=>340,706=>333,707=>333,708=>333,709=>333,710=>333,711=>333,712=>333,713=>333,714=>333,715=>333,716=>300,717=>333,718=>333,719=>333,720=>278,721=>278,722=>300,723=>300,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,731=>333,732=>333,733=>400,734=>333,735=>352,736=>374,737=>189,738=>264,739=>340,740=>340,741=>526,742=>526,743=>526,744=>526,745=>526,746=>519,747=>519,748=>333,749=>333,750=>480,751=>333,752=>333,753=>333,754=>333,755=>327,756=>261,757=>437,758=>437,759=>400,760=>278,761=>175,762=>175,763=>175,764=>175,765=>333,766=>337,767=>432,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,884=>199,885=>199,890=>0,894=>333,900=>330,901=>415,902=>722,903=>250,904=>811,905=>938,906=>556,908=>840,910=>886,911=>879,912=>330,913=>722,914=>667,915=>611,916=>759,917=>667,918=>667,919=>774,920=>778,921=>386,922=>777,923=>722,924=>943,925=>722,926=>650,927=>778,928=>812,929=>611,931=>650,932=>667,933=>738,934=>868,935=>722,936=>924,937=>811,938=>386,939=>738,940=>605,941=>440,942=>605,943=>330,944=>550,945=>605,946=>550,947=>550,948=>550,949=>440,950=>495,951=>605,952=>550,953=>330,954=>608,955=>495,956=>605,957=>495,958=>495,959=>550,960=>605,961=>550,962=>440,963=>550,964=>440,965=>550,966=>660,967=>495,968=>715,969=>715,970=>330,971=>550,972=>550,973=>550,974=>715,976=>550,977=>605,978=>722,979=>871,980=>722,981=>660,982=>715,983=>550,984=>611,985=>550,986=>650,987=>514,988=>611,989=>513,990=>715,991=>439,992=>722,993=>605,994=>1022,995=>715,996=>626,997=>576,998=>616,999=>544,1000=>539,1001=>441,1002=>932,1003=>653,1004=>593,1005=>513,1006=>654,1007=>517,1008=>550,1009=>550,1010=>477,1011=>333,1012=>828,1013=>424,1014=>424,1015=>632,1016=>575,1017=>722,1018=>943,1019=>809,1020=>550,1021=>722,1022=>722,1023=>722,1024=>666,1025=>666,1026=>852,1027=>617,1028=>733,1029=>568,1030=>400,1031=>400,1032=>513,1033=>1062,1034=>1057,1035=>899,1036=>769,1037=>788,1038=>731,1039=>788,1040=>704,1041=>659,1042=>678,1043=>617,1044=>718,1045=>666,1046=>1104,1047=>654,1048=>788,1049=>788,1050=>769,1051=>793,1052=>957,1053=>788,1054=>828,1055=>814,1056=>659,1057=>733,1058=>649,1059=>731,1060=>864,1061=>715,1062=>788,1063=>768,1064=>1129,1065=>1129,1066=>794,1067=>984,1068=>659,1069=>747,1070=>1136,1071=>734,1072=>528,1073=>567,1074=>545,1075=>439,1076=>565,1077=>511,1078=>805,1079=>495,1080=>572,1081=>572,1082=>566,1083=>551,1084=>682,1085=>572,1086=>571,1087=>572,1088=>591,1089=>495,1090=>501,1091=>496,1092=>879,1093=>502,1094=>566,1095=>564,1096=>833,1097=>827,1098=>647,1099=>764,1100=>545,1101=>539,1102=>800,1103=>563,1104=>511,1105=>511,1106=>592,1107=>439,1108=>539,1109=>436,1110=>291,1111=>291,1112=>333,1113=>812,1114=>824,1115=>570,1116=>566,1117=>572,1118=>496,1119=>572,1120=>1066,1121=>769,1122=>796,1123=>648,1124=>1033,1125=>778,1126=>977,1127=>685,1128=>1363,1129=>971,1130=>1086,1131=>778,1132=>1466,1133=>1062,1134=>650,1135=>462,1136=>974,1137=>771,1138=>828,1139=>661,1140=>808,1141=>578,1142=>808,1143=>590,1144=>1318,1145=>1014,1146=>992,1147=>744,1148=>1066,1149=>769,1150=>1066,1151=>769,1152=>694,1153=>483,1154=>258,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>788,1163=>569,1164=>659,1165=>548,1166=>659,1167=>594,1168=>618,1169=>459,1170=>618,1171=>439,1172=>666,1173=>585,1174=>1155,1175=>843,1176=>670,1177=>495,1178=>833,1179=>610,1180=>815,1181=>597,1182=>901,1183=>676,1184=>874,1185=>636,1186=>788,1187=>572,1188=>986,1189=>693,1190=>1086,1191=>864,1192=>913,1193=>666,1194=>733,1195=>495,1196=>649,1197=>501,1198=>712,1199=>609,1200=>712,1201=>609,1202=>790,1203=>567,1204=>1043,1205=>785,1206=>768,1207=>562,1208=>824,1209=>598,1210=>768,1211=>570,1212=>960,1213=>637,1214=>960,1215=>637,1216=>400,1217=>1104,1218=>805,1219=>742,1220=>557,1221=>793,1222=>551,1223=>788,1224=>570,1225=>788,1226=>572,1227=>768,1228=>564,1229=>957,1230=>682,1231=>400,1232=>704,1233=>528,1234=>704,1235=>528,1236=>989,1237=>725,1238=>667,1239=>511,1240=>818,1241=>511,1242=>818,1243=>511,1244=>1104,1245=>805,1246=>654,1247=>495,1248=>644,1249=>472,1250=>788,1251=>572,1252=>788,1253=>572,1254=>828,1255=>571,1256=>828,1257=>571,1258=>828,1259=>571,1260=>747,1261=>539,1262=>731,1263=>496,1264=>731,1265=>496,1266=>731,1267=>500,1268=>768,1269=>564,1270=>627,1271=>435,1272=>984,1273=>764,1296=>660,1297=>495,1298=>793,1299=>551,1306=>818,1307=>588,1308=>994,1309=>716,1310=>769,1311=>566,1329=>889,1330=>787,1331=>858,1332=>941,1333=>775,1334=>765,1335=>805,1336=>762,1337=>938,1338=>869,1339=>765,1340=>756,1341=>966,1342=>992,1343=>748,1344=>469,1345=>731,1346=>941,1347=>745,1348=>966,1349=>641,1350=>929,1351=>774,1352=>779,1353=>784,1354=>841,1355=>775,1356=>955,1357=>779,1358=>927,1359=>555,1360=>763,1361=>641,1362=>656,1363=>824,1364=>869,1365=>768,1366=>754,1369=>300,1370=>300,1371=>270,1372=>307,1373=>270,1374=>324,1375=>322,1377=>818,1378=>548,1379=>601,1380=>608,1381=>551,1382=>547,1383=>496,1384=>548,1385=>586,1386=>585,1387=>548,1388=>269,1389=>798,1390=>594,1391=>544,1392=>548,1393=>513,1394=>583,1395=>560,1396=>551,1397=>397,1398=>567,1399=>447,1400=>548,1401=>411,1402=>810,1403=>464,1404=>548,1405=>551,1406=>595,1407=>821,1408=>548,1409=>557,1410=>312,1411=>821,1412=>550,1413=>511,1414=>668,1415=>602,1417=>333,1418=>349,1425=>0,1426=>0,1427=>0,1428=>0,1429=>0,1430=>0,1431=>0,1432=>0,1433=>0,1434=>0,1435=>0,1436=>0,1437=>0,1438=>0,1439=>0,1440=>0,1441=>0,1442=>0,1443=>0,1444=>0,1445=>0,1446=>0,1447=>0,1448=>0,1449=>0,1450=>0,1451=>0,1452=>0,1453=>0,1454=>0,1455=>0,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>433,1471=>0,1472=>155,1473=>0,1474=>0,1475=>400,1476=>0,1477=>0,1478=>347,1479=>0,1488=>593,1489=>498,1490=>339,1491=>523,1492=>561,1493=>266,1494=>291,1495=>559,1496=>576,1497=>266,1498=>496,1499=>501,1500=>510,1501=>542,1502=>581,1503=>273,1504=>347,1505=>512,1506=>552,1507=>493,1508=>491,1509=>537,1510=>561,1511=>544,1512=>502,1513=>716,1514=>571,1520=>532,1521=>532,1522=>532,1523=>396,1524=>432,3585=>590,3586=>578,3587=>661,3588=>592,3589=>592,3590=>699,3591=>447,3592=>534,3593=>692,3594=>578,3595=>659,3596=>899,3597=>804,3598=>633,3599=>637,3600=>484,3601=>730,3602=>876,3603=>915,3604=>592,3605=>592,3606=>578,3607=>670,3608=>542,3609=>671,3610=>621,3611=>618,3612=>621,3613=>617,3614=>708,3615=>708,3616=>637,3617=>589,3618=>552,3619=>484,3620=>590,3621=>569,3622=>637,3623=>526,3624=>599,3625=>802,3626=>579,3627=>668,3628=>778,3629=>560,3630=>514,3631=>510,3632=>412,3633=>0,3634=>423,3635=>452,3636=>0,3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0,3647=>665,3648=>357,3649=>624,3650=>529,3651=>486,3652=>475,3653=>423,3654=>500,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,3660=>0,3661=>0,3662=>0,3663=>657,3664=>548,3665=>548,3666=>592,3667=>614,3668=>631,3669=>643,3670=>508,3671=>744,3672=>622,3673=>585,3674=>721,3675=>1381,4256=>540,4257=>544,4258=>639,4259=>718,4260=>553,4261=>545,4262=>541,4263=>810,4264=>540,4265=>541,4266=>921,4267=>540,4268=>529,4269=>810,4270=>540,4271=>540,4272=>810,4273=>545,4274=>642,4275=>643,4276=>659,4277=>538,4278=>718,4279=>541,4280=>592,4281=>535,4282=>586,4283=>540,4284=>628,4285=>521,4286=>548,4287=>630,4288=>541,4289=>541,4290=>660,4291=>544,4292=>542,4293=>498,4304=>522,4305=>518,4306=>621,4307=>716,4308=>517,4309=>519,4310=>518,4311=>796,4312=>518,4313=>518,4314=>934,4315=>517,4316=>519,4317=>787,4318=>515,4319=>514,4320=>788,4321=>573,4322=>620,4323=>593,4324=>639,4325=>516,4326=>714,4327=>518,4328=>572,4329=>518,4330=>555,4331=>518,4332=>559,4333=>509,4334=>572,4335=>677,4336=>523,4337=>517,4338=>595,4339=>480,4340=>519,4341=>484,4342=>838,4343=>517,4344=>516,4345=>621,4346=>522,4347=>450,4348=>389,5024=>718,5025=>768,5026=>633,5027=>878,5028=>1001,5029=>371,5030=>576,5031=>754,5032=>531,5033=>774,5034=>692,5035=>499,5036=>668,5037=>829,5038=>575,5039=>681,5040=>485,5041=>607,5042=>885,5043=>974,5044=>588,5045=>583,5046=>726,5047=>947,5048=>558,5049=>832,5050=>1096,5051=>780,5052=>595,5053=>869,5054=>752,5055=>710,5056=>761,5057=>802,5058=>760,5059=>656,5060=>655,5061=>982,5062=>684,5063=>801,5064=>805,5065=>1042,5066=>755,5067=>612,5068=>707,5069=>889,5070=>584,5071=>623,5072=>536,5073=>763,5074=>763,5075=>581,5076=>1052,5077=>600,5078=>730,5079=>714,5080=>714,5081=>697,5082=>543,5083=>943,5084=>718,5085=>630,5086=>660,5087=>692,5088=>841,5089=>861,5090=>617,5091=>733,5092=>898,5093=>896,5094=>781,5095=>612,5096=>830,5097=>948,5098=>886,5099=>757,5100=>796,5101=>578,5102=>601,5103=>797,5104=>623,5105=>886,5106=>730,5107=>827,5108=>648,7680=>722,7681=>500,7682=>667,7683=>546,7684=>667,7685=>546,7686=>667,7687=>546,7688=>722,7689=>444,7690=>724,7691=>556,7692=>724,7693=>556,7694=>724,7695=>556,7696=>724,7697=>556,7698=>724,7699=>556,7700=>667,7701=>444,7702=>667,7703=>444,7704=>667,7705=>444,7706=>667,7707=>444,7708=>667,7709=>444,7710=>611,7711=>333,7712=>778,7713=>500,7714=>774,7715=>556,7716=>774,7717=>556,7718=>774,7719=>556,7720=>774,7721=>556,7722=>774,7723=>556,7724=>386,7725=>278,7726=>389,7727=>278,7728=>764,7729=>556,7730=>764,7731=>556,7732=>764,7733=>556,7734=>664,7735=>278,7736=>664,7737=>278,7738=>664,7739=>278,7740=>664,7741=>278,7742=>943,7743=>833,7744=>943,7745=>833,7746=>943,7747=>833,7748=>722,7749=>556,7750=>722,7751=>556,7752=>722,7753=>556,7754=>722,7755=>556,7756=>778,7757=>500,7758=>778,7759=>500,7760=>778,7761=>500,7762=>778,7763=>500,7764=>611,7765=>549,7766=>611,7767=>549,7768=>712,7769=>444,7770=>712,7771=>444,7772=>712,7773=>444,7774=>712,7775=>444,7776=>556,7777=>389,7778=>556,7779=>389,7780=>556,7781=>389,7782=>556,7783=>389,7784=>556,7785=>389,7786=>667,7787=>333,7788=>667,7789=>333,7790=>667,7791=>333,7792=>667,7793=>333,7794=>722,7795=>556,7796=>722,7797=>556,7798=>722,7799=>556,7800=>722,7801=>556,7802=>722,7803=>556,7804=>722,7805=>500,7806=>722,7807=>500,7808=>1000,7809=>722,7810=>1000,7811=>722,7812=>1000,7813=>722,7814=>1000,7815=>722,7816=>1000,7817=>722,7818=>722,7819=>500,7820=>722,7821=>500,7822=>722,7823=>500,7824=>667,7825=>444,7826=>667,7827=>444,7828=>667,7829=>444,7830=>556,7831=>333,7832=>722,7833=>500,7834=>507,7835=>333,7836=>333,7837=>333,7838=>792,7839=>534,7840=>722,7841=>500,7842=>722,7843=>500,7844=>722,7845=>500,7846=>722,7847=>500,7848=>722,7849=>500,7850=>722,7851=>500,7852=>722,7853=>500,7854=>722,7855=>500,7856=>722,7857=>500,7858=>722,7859=>603,7860=>722,7861=>500,7862=>722,7863=>500,7864=>667,7865=>444,7866=>667,7867=>444,7868=>667,7869=>444,7870=>667,7871=>444,7872=>667,7873=>444,7874=>667,7875=>444,7876=>667,7877=>444,7878=>667,7879=>444,7880=>386,7881=>278,7882=>386,7883=>278,7884=>778,7885=>500,7886=>778,7887=>500,7888=>778,7889=>500,7890=>778,7891=>500,7892=>778,7893=>500,7894=>778,7895=>500,7896=>778,7897=>500,7898=>774,7899=>584,7900=>774,7901=>584,7902=>774,7903=>549,7904=>793,7905=>584,7906=>793,7907=>584,7908=>722,7909=>556,7910=>722,7911=>556,7912=>838,7913=>672,7914=>838,7915=>672,7916=>825,7917=>659,7918=>768,7919=>620,7920=>768,7921=>620,7922=>722,7923=>500,7924=>722,7925=>500,7926=>722,7927=>500,7928=>722,7929=>500,7936=>605,7937=>605,7938=>605,7939=>605,7940=>605,7941=>605,7942=>605,7943=>605,7944=>722,7945=>722,7946=>830,7947=>833,7948=>761,7949=>798,7950=>721,7951=>722,7952=>440,7953=>440,7954=>440,7955=>440,7956=>440,7957=>440,7960=>817,7961=>826,7962=>944,7963=>970,7964=>964,7965=>1009,7968=>605,7969=>605,7970=>605,7971=>605,7972=>605,7973=>605,7974=>605,7975=>605,7976=>926,7977=>921,7978=>1038,7979=>1064,7980=>1092,7981=>1102,7982=>1005,7983=>991,7984=>330,7985=>330,7986=>330,7987=>330,7988=>330,7989=>330,7990=>330,7991=>330,7992=>534,7993=>541,7994=>653,7995=>659,7996=>705,7997=>714,7998=>612,7999=>614,8000=>550,8001=>550,8002=>550,8003=>550,8004=>550,8005=>550,8008=>885,8009=>886,8010=>1038,8011=>1052,8012=>997,8013=>1021,8016=>550,8017=>550,8018=>550,8019=>550,8020=>550,8021=>550,8022=>550,8023=>550,8025=>870,8027=>1014,8029=>1043,8031=>944,8032=>715,8033=>715,8034=>715,8035=>715,8036=>715,8037=>715,8038=>715,8039=>715,8040=>905,8041=>913,8042=>1066,8043=>1085,8044=>1034,8045=>1044,8046=>980,8047=>961,8048=>605,8049=>605,8050=>440,8051=>440,8052=>605,8053=>605,8054=>330,8055=>330,8056=>550,8057=>550,8058=>550,8059=>550,8060=>715,8061=>715,8064=>605,8065=>605,8066=>605,8067=>605,8068=>605,8069=>605,8070=>605,8071=>605,8072=>886,8073=>887,8074=>985,8075=>993,8076=>937,8077=>956,8078=>874,8079=>878,8080=>605,8081=>605,8082=>605,8083=>605,8084=>605,8085=>605,8086=>605,8087=>605,8088=>1096,8089=>1092,8090=>1223,8091=>1250,8092=>1270,8093=>1283,8094=>1174,8095=>1162,8096=>715,8097=>715,8098=>715,8099=>715,8100=>715,8101=>715,8102=>715,8103=>715,8104=>1057,8105=>1073,8106=>1228,8107=>1251,8108=>1202,8109=>1210,8110=>1151,8111=>1131,8112=>605,8113=>605,8114=>605,8115=>605,8116=>605,8118=>605,8119=>605,8120=>722,8121=>722,8122=>722,8123=>722,8124=>883,8125=>500,8126=>0,8127=>500,8128=>500,8129=>550,8130=>605,8131=>605,8132=>605,8134=>605,8135=>605,8136=>790,8137=>830,8138=>909,8139=>931,8140=>950,8141=>500,8142=>500,8143=>500,8144=>330,8145=>330,8146=>330,8147=>330,8150=>330,8151=>330,8152=>386,8153=>386,8154=>506,8155=>550,8157=>500,8158=>500,8159=>500,8160=>550,8161=>550,8162=>550,8163=>550,8164=>550,8165=>550,8166=>550,8167=>550,8168=>738,8169=>738,8170=>858,8171=>880,8172=>764,8173=>550,8174=>550,8175=>500,8178=>715,8179=>715,8180=>715,8182=>715,8183=>715,8184=>884,8185=>857,8186=>927,8187=>892,8188=>988,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>500,8200=>250,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>500,8211=>500,8212=>1000,8213=>1000,8214=>333,8215=>478,8216=>250,8217=>250,8218=>250,8219=>250,8220=>500,8221=>500,8222=>500,8223=>500,8224=>500,8225=>500,8226=>524,8227=>560,8228=>250,8229=>500,8230=>1000,8231=>250,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>250,8240=>1000,8241=>1588,8242=>270,8243=>492,8244=>714,8245=>270,8246=>484,8247=>693,8248=>469,8249=>333,8250=>333,8251=>727,8252=>666,8253=>695,8254=>500,8255=>953,8256=>953,8257=>338,8258=>931,8259=>333,8260=>167,8261=>332,8262=>332,8263=>1000,8264=>833,8265=>833,8266=>500,8267=>540,8268=>528,8269=>523,8270=>500,8271=>333,8272=>953,8273=>500,8274=>497,8275=>576,8276=>953,8277=>785,8278=>450,8279=>881,8280=>620,8281=>620,8282=>179,8283=>621,8284=>569,8285=>179,8286=>179,8287=>111,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>300,8305=>185,8308=>300,8309=>300,8310=>300,8311=>300,8312=>300,8313=>300,8314=>300,8315=>300,8316=>300,8317=>216,8318=>216,8319=>325,8320=>300,8321=>274,8322=>300,8323=>300,8324=>300,8325=>300,8326=>300,8327=>300,8328=>300,8329=>300,8330=>300,8331=>300,8332=>300,8333=>216,8334=>216,8336=>344,8337=>304,8338=>340,8339=>337,8340=>308,8352=>710,8353=>722,8354=>783,8355=>611,8356=>500,8357=>833,8358=>722,8359=>960,8360=>1101,8361=>1000,8362=>889,8363=>532,8364=>761,8365=>742,8366=>631,8367=>1435,8368=>579,8369=>609,8370=>639,8371=>660,8372=>556,8373=>500,8376=>524,8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8421=>0,8423=>0,8424=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8448=>624,8449=>625,8451=>1009,8453=>623,8454=>737,8455=>631,8456=>709,8457=>923,8458=>500,8459=>1035,8462=>556,8463=>556,8464=>792,8465=>737,8466=>800,8467=>427,8468=>835,8470=>896,8471=>855,8472=>666,8475=>747,8476=>955,8478=>722,8479=>722,8480=>991,8481=>1186,8482=>1086,8483=>722,8486=>811,8487=>811,8489=>333,8490=>764,8491=>722,8492=>806,8494=>551,8495=>444,8497=>723,8498=>611,8499=>1203,8501=>593,8502=>498,8503=>339,8504=>523,8506=>906,8507=>1181,8523=>778,8525=>1028,8526=>408,8531=>750,8532=>750,8533=>750,8534=>750,8535=>750,8536=>750,8537=>750,8538=>750,8539=>750,8540=>750,8541=>750,8542=>750,8543=>750,8544=>386,8545=>760,8546=>1138,8547=>1098,8548=>722,8549=>1098,8550=>1474,8551=>1850,8552=>1096,8553=>722,8554=>1095,8555=>1472,8556=>664,8557=>722,8558=>724,8559=>943,8560=>278,8561=>545,8562=>812,8563=>758,8564=>500,8565=>769,8566=>1036,8567=>1298,8568=>768,8569=>500,8570=>768,8571=>1034,8572=>278,8573=>444,8574=>556,8575=>833,8592=>964,8593=>523,8594=>964,8595=>523,8596=>964,8597=>964,8598=>964,8599=>964,8600=>964,8601=>964,8602=>964,8603=>964,8604=>1152,8605=>1152,8606=>964,8607=>964,8608=>964,8609=>964,8610=>1078,8611=>1078,8612=>964,8613=>964,8614=>964,8615=>964,8616=>964,8617=>964,8618=>964,8619=>964,8620=>964,8621=>1168,8622=>964,8624=>622,8625=>622,8630=>1069,8631=>1069,8632=>964,8633=>964,8634=>980,8635=>980,8636=>964,8637=>964,8638=>557,8639=>556,8640=>964,8641=>964,8642=>557,8643=>556,8644=>964,8645=>964,8646=>964,8647=>964,8648=>964,8649=>964,8650=>964,8651=>964,8652=>964,8653=>964,8654=>964,8655=>964,8656=>964,8657=>630,8658=>964,8659=>630,8660=>964,8661=>630,8662=>1063,8663=>1063,8664=>1063,8665=>1063,8666=>964,8667=>964,8668=>1100,8669=>1100,8672=>964,8674=>964,8676=>964,8677=>964,8704=>627,8705=>716,8706=>558,8707=>627,8708=>627,8709=>746,8710=>612,8711=>719,8713=>576,8714=>576,8716=>576,8717=>576,8720=>733,8721=>713,8722=>676,8723=>676,8724=>676,8725=>750,8727=>570,8729=>570,8730=>549,8733=>676,8734=>752,8736=>555,8737=>555,8738=>555,8739=>240,8740=>531,8741=>478,8742=>705,8743=>694,8744=>694,8745=>694,8746=>694,8747=>323,8756=>629,8757=>629,8761=>947,8764=>676,8765=>676,8766=>763,8768=>305,8769=>676,8770=>676,8771=>676,8773=>676,8776=>676,8777=>676,8778=>676,8781=>676,8782=>676,8783=>676,8784=>676,8785=>676,8786=>676,8787=>676,8788=>947,8789=>947,8790=>676,8791=>676,8796=>676,8800=>570,8801=>676,8802=>676,8804=>570,8805=>570,8806=>676,8807=>676,8808=>676,8809=>676,8810=>1047,8811=>1047,8812=>450,8813=>676,8814=>676,8815=>676,8816=>676,8817=>676,8818=>676,8819=>676,8820=>676,8821=>676,8822=>676,8823=>676,8824=>676,8825=>676,8826=>676,8827=>676,8828=>676,8829=>676,8830=>676,8831=>676,8832=>676,8833=>676,8834=>676,8835=>676,8836=>676,8837=>676,8838=>676,8839=>676,8840=>676,8841=>676,8842=>676,8843=>676,8846=>694,8847=>676,8848=>676,8849=>676,8850=>676,8851=>694,8852=>694,8853=>738,8854=>738,8855=>738,8856=>738,8857=>738,8858=>738,8859=>738,8861=>738,8862=>678,8863=>678,8864=>678,8865=>678,8866=>487,8867=>487,8868=>752,8869=>752,8871=>487,8873=>659,8874=>831,8876=>487,8877=>487,8878=>659,8879=>659,8882=>676,8883=>676,8884=>676,8885=>676,8886=>1380,8887=>1380,8888=>1027,8890=>626,8891=>694,8892=>694,8893=>694,8900=>512,8903=>676,8904=>759,8905=>632,8906=>632,8907=>1000,8908=>1000,8909=>676,8910=>694,8911=>694,8912=>676,8913=>676,8914=>694,8915=>694,8916=>694,8918=>676,8919=>676,8920=>1441,8921=>1441,8922=>676,8923=>676,8924=>676,8925=>676,8926=>676,8927=>676,8928=>676,8929=>676,8930=>676,8931=>676,8934=>676,8935=>676,8936=>676,8937=>676,8938=>676,8939=>676,8940=>676,8941=>676,8960=>737,8968=>411,8969=>411,8970=>411,8971=>411,8976=>680,8994=>951,8995=>951,9001=>398,9002=>398,9251=>500,9472=>1000,9473=>1000,9474=>1000,9475=>1000,9476=>1000,9477=>1000,9478=>1000,9479=>1000,9480=>1000,9481=>1000,9482=>1000,9483=>1000,9484=>1000,9485=>1000,9486=>1000,9487=>1000,9488=>1000,9489=>1000,9490=>1000,9491=>1000,9492=>1000,9493=>1000,9494=>1000,9495=>1000,9496=>1000,9497=>1000,9498=>1000,9499=>1000,9500=>1000,9501=>1000,9502=>1000,9503=>1000,9504=>1000,9505=>1000,9506=>1000,9507=>1000,9508=>1000,9509=>1000,9510=>1000,9511=>1000,9512=>1000,9513=>1000,9514=>1000,9515=>1000,9516=>1000,9517=>1000,9518=>1000,9519=>1000,9520=>1000,9521=>1000,9522=>1000,9523=>1000,9524=>1000,9525=>1000,9526=>1000,9527=>1000,9528=>1000,9529=>1000,9530=>1000,9531=>1000,9532=>1000,9533=>1000,9534=>1000,9535=>1000,9536=>1000,9537=>1000,9538=>1000,9539=>1000,9540=>1000,9541=>1000,9542=>1000,9543=>1000,9544=>1000,9545=>1000,9546=>1000,9547=>1000,9552=>1000,9553=>1000,9554=>1000,9555=>1000,9556=>1000,9557=>1000,9558=>1000,9559=>1000,9560=>1000,9561=>1000,9562=>1000,9563=>1000,9564=>1000,9565=>1000,9566=>1000,9567=>1000,9568=>1000,9569=>1000,9570=>1000,9571=>1000,9572=>1000,9573=>1000,9574=>1000,9575=>1000,9576=>1000,9577=>1000,9578=>1000,9579=>1000,9580=>1000,9600=>1000,9601=>1000,9602=>1000,9603=>1000,9604=>1000,9605=>1000,9606=>1000,9607=>1000,9608=>1000,9609=>1000,9610=>1000,9611=>1000,9612=>1000,9613=>1000,9614=>1000,9615=>1000,9616=>1000,9617=>1000,9618=>1000,9619=>1000,9620=>1000,9621=>1000,9622=>1000,9623=>1000,9624=>1000,9625=>1000,9626=>1000,9627=>1000,9628=>1000,9629=>1000,9630=>1000,9631=>1000,9632=>678,9633=>678,9642=>309,9650=>681,9651=>681,9654=>681,9655=>681,9660=>681,9661=>681,9664=>681,9665=>681,9670=>580,9671=>580,9674=>494,9675=>738,9676=>732,9679=>738,9702=>524,9711=>855,9733=>1003,9734=>1003,9824=>618,9825=>645,9826=>587,9827=>582,9828=>582,9829=>645,9830=>587,9831=>618,9833=>333,9834=>556,9835=>778,9836=>778,9837=>556,9838=>556,9839=>556,10214=>561,10215=>561,11392=>760,11393=>568,11394=>545,11395=>444,11396=>598,11397=>433,11398=>1039,11399=>760,11400=>681,11401=>502,11402=>572,11403=>405,11404=>583,11405=>463,11406=>698,11407=>529,11408=>754,11409=>555,11410=>338,11411=>258,11412=>688,11413=>524,11414=>700,11415=>521,11416=>799,11417=>609,11418=>708,11419=>537,11420=>546,11421=>411,11422=>778,11423=>541,11424=>724,11425=>524,11426=>545,11427=>446,11428=>676,11429=>498,11430=>615,11431=>433,11432=>759,11433=>589,11434=>800,11435=>670,11436=>669,11437=>512,11438=>801,11439=>609,11440=>1003,11441=>743,11517=>266,11518=>617,11519=>307,11799=>333,42790=>774,42791=>551,42792=>964,42793=>754,42794=>652,42795=>452,42796=>478,42797=>422,42798=>662,42799=>612,42888=>333,42889=>278,42890=>282,42891=>349,42892=>278,64256=>613,64257=>559,64258=>559,64259=>846,64260=>836,64261=>603,64262=>723,64275=>1105,64276=>1105,64277=>1099,64278=>1105,64279=>1361,64285=>266,64286=>0,64287=>532,64288=>552,64297=>570,64298=>716,64299=>716,64300=>716,64301=>716,64302=>593,64303=>593,64304=>593,64305=>498,64306=>339,64307=>523,64308=>561,64309=>266,64310=>291,64312=>576,64313=>266,64314=>496,64315=>501,64316=>510,64318=>581,64320=>347,64321=>512,64323=>493,64324=>491,64326=>561,64327=>544,64328=>502,64329=>716,64330=>571,64331=>266,64332=>498,64333=>501,64334=>491,64335=>593,65533=>900,65535=>700);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/freeserifb.z b/lib/tcpdf/fonts/freeserifb.z
index 95e31362ff3..a7a00206f4f 100644
Binary files a/lib/tcpdf/fonts/freeserifb.z and b/lib/tcpdf/fonts/freeserifb.z differ
diff --git a/lib/tcpdf/fonts/freeserifbi.ctg.z b/lib/tcpdf/fonts/freeserifbi.ctg.z
index 86d46ef3034..b135555e01f 100644
Binary files a/lib/tcpdf/fonts/freeserifbi.ctg.z and b/lib/tcpdf/fonts/freeserifbi.ctg.z differ
diff --git a/lib/tcpdf/fonts/freeserifbi.php b/lib/tcpdf/fonts/freeserifbi.php
index 79a17352391..ad45bc9c8a2 100644
--- a/lib/tcpdf/fonts/freeserifbi.php
+++ b/lib/tcpdf/fonts/freeserifbi.php
@@ -1,238 +1,15 @@
900,'Descent'=>-300,'CapHeight'=>-24,'Flags'=>96,'FontBBox'=>'[-787 -1120 1867 1571]','ItalicAngle'=>-16.3,'StemV'=>120,'MissingWidth'=>600);
$up=-125;
$ut=50;
-$dw=600;
-$cw=array(
-32=>250,33=>389,34=>555,35=>500,36=>500,37=>833,38=>778,39=>278,40=>333,41=>333,
-42=>500,43=>570,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,
-52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>570,61=>570,
-62=>570,63=>500,64=>832,65=>667,66=>667,67=>667,68=>744,69=>670,70=>656,71=>722,
-72=>778,73=>393,74=>500,75=>664,76=>609,77=>896,78=>722,79=>722,80=>614,81=>722,
-82=>672,83=>556,84=>611,85=>722,86=>667,87=>889,88=>667,89=>611,90=>611,91=>333,
-92=>278,93=>333,94=>570,95=>500,96=>333,97=>500,98=>500,99=>444,100=>500,101=>444,
-102=>333,103=>500,104=>556,105=>278,106=>278,107=>500,108=>278,109=>778,110=>556,111=>500,
-112=>500,113=>500,114=>389,115=>389,116=>278,117=>556,118=>444,119=>667,120=>500,121=>444,
-122=>389,123=>348,124=>220,125=>348,126=>570,8364=>761,8218=>250,402=>333,8222=>500,8230=>1000,
-8224=>500,8225=>500,710=>333,8240=>1000,352=>556,8249=>333,338=>944,381=>611,8216=>250,8217=>250,
-8220=>500,8221=>500,8226=>350,8211=>500,8212=>1000,732=>333,8482=>1000,353=>389,8250=>333,339=>722,
-382=>389,376=>611,160=>250,161=>389,162=>500,163=>500,164=>500,165=>500,166=>220,167=>500,
-168=>333,169=>747,170=>266,171=>500,172=>606,173=>333,174=>747,175=>333,176=>400,177=>570,
-178=>300,179=>300,180=>333,181=>576,182=>500,183=>250,184=>333,185=>272,186=>300,187=>500,
-188=>750,189=>750,190=>750,191=>500,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,
-198=>944,199=>667,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389,
-208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>570,216=>722,217=>722,
-218=>722,219=>722,220=>722,221=>611,222=>609,223=>500,224=>500,225=>500,226=>500,227=>500,
-228=>500,229=>500,230=>722,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,
-238=>278,239=>278,240=>500,241=>556,242=>500,243=>500,244=>500,245=>500,246=>500,247=>570,
-248=>500,249=>556,250=>556,251=>556,252=>556,253=>444,254=>500,255=>444,256=>667,257=>500,
-258=>667,259=>500,260=>667,261=>500,262=>667,263=>444,264=>667,265=>444,266=>667,267=>444,
-268=>667,269=>444,270=>722,271=>616,272=>722,273=>500,274=>667,275=>444,276=>667,277=>444,
-278=>667,279=>444,280=>667,281=>444,282=>667,283=>444,284=>722,285=>500,286=>722,287=>500,
-288=>722,289=>500,290=>722,291=>500,292=>778,293=>556,294=>778,295=>556,296=>389,297=>278,
-298=>389,299=>278,300=>389,301=>278,302=>389,303=>278,304=>389,305=>278,306=>826,307=>547,
-308=>500,309=>278,310=>667,311=>500,312=>534,313=>611,314=>278,315=>611,316=>278,317=>638,
-318=>424,319=>611,320=>424,321=>611,322=>278,323=>722,324=>556,325=>722,326=>556,327=>722,
-328=>556,329=>556,330=>722,331=>547,332=>722,333=>500,334=>722,335=>500,336=>722,337=>500,
-340=>667,341=>389,342=>667,343=>389,344=>667,345=>389,346=>556,347=>389,348=>556,349=>389,
-350=>556,351=>389,354=>611,355=>278,356=>611,357=>308,358=>611,359=>278,360=>722,361=>556,
-362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556,
-372=>889,373=>667,374=>611,375=>444,377=>611,378=>389,379=>611,380=>389,383=>333,384=>500,
-385=>850,386=>667,387=>575,388=>630,389=>500,390=>722,391=>929,392=>654,393=>722,394=>864,
-395=>684,396=>500,397=>546,398=>670,399=>722,400=>631,401=>769,403=>929,404=>716,405=>745,
-406=>278,407=>389,408=>829,409=>500,410=>278,411=>495,412=>853,413=>919,414=>556,415=>722,
-416=>908,417=>640,418=>1014,419=>778,420=>757,421=>500,422=>611,423=>556,424=>389,425=>730,
-426=>455,427=>349,428=>611,429=>298,430=>611,431=>902,432=>714,433=>811,434=>678,435=>611,
-436=>581,437=>611,438=>389,439=>619,440=>614,441=>461,442=>445,443=>500,444=>614,445=>500,
-446=>389,447=>504,448=>220,449=>418,450=>570,451=>333,452=>1355,453=>1133,454=>889,455=>1109,
-456=>887,457=>556,458=>1222,459=>1000,460=>834,461=>667,462=>500,463=>393,464=>278,465=>722,
-466=>500,467=>722,468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722,
-476=>556,477=>444,478=>667,479=>500,480=>667,481=>500,482=>944,483=>722,484=>722,485=>500,
-486=>722,487=>500,488=>664,489=>500,490=>722,491=>500,492=>722,493=>500,494=>619,495=>513,
-496=>278,497=>1355,498=>1133,499=>889,500=>722,501=>500,502=>944,503=>660,504=>722,505=>556,
-506=>667,507=>500,508=>944,509=>722,510=>722,511=>500,512=>667,513=>500,514=>667,515=>500,
-516=>670,517=>444,518=>670,519=>444,520=>393,521=>278,522=>393,523=>278,524=>722,525=>500,
-526=>722,527=>500,528=>672,529=>389,530=>672,531=>389,532=>722,533=>556,534=>722,535=>556,
-536=>556,537=>389,538=>611,539=>278,540=>424,541=>455,542=>778,543=>556,544=>731,545=>618,
-546=>568,547=>500,548=>667,549=>444,550=>667,551=>500,552=>670,553=>444,554=>722,555=>500,
-556=>722,557=>500,558=>722,559=>500,560=>722,561=>500,562=>611,563=>444,564=>422,565=>621,
-566=>413,567=>278,568=>800,569=>784,570=>644,571=>667,572=>444,573=>664,574=>611,575=>389,
-576=>451,577=>444,578=>444,579=>667,580=>722,581=>722,582=>670,583=>444,584=>500,585=>278,
-586=>808,587=>608,588=>672,589=>389,590=>611,591=>444,592=>500,593=>590,594=>590,595=>500,
-596=>444,599=>668,600=>444,601=>444,603=>430,608=>569,609=>500,613=>556,616=>278,617=>320,
-618=>278,623=>778,629=>500,633=>389,643=>333,648=>278,649=>500,650=>557,651=>492,652=>444,
-653=>667,654=>444,658=>513,670=>500,697=>250,698=>408,699=>250,700=>250,701=>250,702=>300,
-703=>300,706=>333,707=>333,708=>333,709=>333,711=>333,712=>333,713=>333,714=>333,715=>333,
-716=>300,717=>333,718=>333,719=>333,720=>278,721=>278,722=>300,723=>300,724=>333,725=>333,
-726=>333,727=>333,728=>333,729=>333,730=>333,731=>333,733=>333,734=>333,735=>352,741=>526,
-742=>526,743=>526,744=>526,745=>526,746=>519,747=>519,748=>333,749=>333,750=>480,751=>333,
-752=>333,753=>333,754=>333,755=>327,756=>261,757=>437,758=>437,759=>400,760=>278,761=>175,
-762=>175,763=>175,764=>175,765=>0,766=>337,767=>432,768=>0,769=>0,770=>0,771=>0,
-772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,
-782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,
-792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,
-802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,
-812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,
-822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,
-832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,
-842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0,
-852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,860=>0,861=>0,862=>0,
-863=>0,864=>0,865=>0,884=>199,885=>199,890=>0,894=>333,900=>330,901=>333,902=>667,
-903=>250,904=>819,905=>955,906=>539,908=>835,910=>961,911=>889,912=>320,913=>667,914=>667,
-915=>637,916=>740,917=>667,918=>611,919=>778,920=>722,921=>389,922=>677,923=>667,924=>889,
-925=>722,926=>650,927=>722,928=>778,929=>611,931=>730,932=>621,933=>722,934=>748,935=>667,
-936=>858,937=>741,938=>389,939=>722,940=>590,941=>430,942=>548,943=>320,944=>536,945=>590,
-946=>536,947=>548,948=>550,949=>430,950=>482,951=>548,952=>525,953=>320,954=>564,955=>510,
-956=>589,957=>522,958=>482,959=>536,960=>629,961=>536,962=>470,963=>536,964=>464,965=>536,
-966=>643,967=>482,968=>715,969=>715,970=>320,971=>536,972=>536,973=>536,974=>715,976=>508,
-977=>589,978=>722,979=>931,980=>722,981=>660,982=>715,983=>536,984=>611,985=>536,986=>620,
-987=>524,988=>667,989=>535,990=>708,991=>428,992=>671,993=>633,1008=>550,1009=>550,1010=>477,
-1011=>278,1012=>722,1013=>411,1014=>411,1015=>609,1016=>500,1017=>667,1018=>896,1019=>769,1020=>536,
-1021=>667,1022=>667,1023=>667,1024=>670,1025=>670,1026=>762,1027=>637,1028=>667,1029=>556,1030=>393,
-1031=>393,1032=>500,1033=>1085,1034=>1049,1035=>747,1036=>736,1037=>778,1038=>746,1039=>778,1040=>667,
-1041=>667,1042=>667,1043=>637,1044=>778,1045=>670,1046=>1044,1047=>650,1048=>778,1049=>778,1050=>736,
-1051=>814,1052=>896,1053=>778,1054=>722,1055=>778,1056=>614,1057=>667,1058=>611,1059=>746,1060=>748,
-1061=>667,1062=>778,1063=>742,1064=>1136,1065=>1135,1066=>779,1067=>984,1068=>664,1069=>732,1070=>1069,
-1071=>779,1072=>500,1073=>508,1074=>486,1075=>414,1076=>486,1077=>444,1078=>982,1079=>476,1080=>556,
-1081=>556,1082=>564,1083=>585,1084=>757,1085=>552,1086=>500,1087=>556,1088=>500,1089=>444,1090=>778,
-1091=>532,1092=>764,1093=>500,1094=>556,1095=>556,1096=>806,1097=>806,1098=>644,1099=>744,1100=>470,
-1101=>488,1102=>757,1103=>586,1104=>444,1105=>444,1106=>524,1107=>414,1108=>488,1109=>389,1110=>278,
-1111=>278,1112=>278,1113=>772,1114=>745,1115=>556,1116=>564,1117=>556,1118=>532,1119=>556,1120=>990,
-1121=>690,1122=>804,1123=>751,1124=>1017,1125=>752,1126=>900,1127=>728,1128=>1236,1129=>927,1130=>1044,
-1131=>826,1132=>1401,1133=>1016,1134=>620,1135=>476,1136=>858,1137=>769,1138=>722,1139=>544,1140=>796,
-1141=>584,1142=>796,1143=>584,1144=>1268,1145=>1023,1146=>895,1147=>612,1148=>990,1149=>690,1150=>990,
-1151=>635,1152=>620,1153=>444,1154=>372,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,
-1161=>0,1162=>778,1163=>556,1164=>664,1165=>470,1166=>614,1167=>473,1168=>624,1169=>448,1170=>624,
-1171=>448,1172=>733,1173=>485,1174=>1080,1175=>982,1176=>650,1177=>476,1178=>772,1179=>564,1180=>772,
-1181=>590,1182=>738,1183=>499,1184=>862,1185=>718,1186=>778,1187=>552,1188=>976,1189=>682,1190=>1085,
-1191=>787,1192=>667,1193=>480,1194=>667,1195=>444,1196=>534,1197=>778,1198=>611,1199=>640,1200=>611,
-1201=>640,1202=>694,1203=>500,1204=>1004,1205=>518,1206=>742,1207=>556,1208=>742,1209=>556,1210=>716,
-1211=>556,1212=>844,1213=>530,1214=>844,1215=>530,1216=>393,1217=>1044,1218=>982,1219=>736,1220=>534,
-1221=>814,1222=>585,1223=>778,1224=>552,1225=>778,1226=>552,1227=>742,1228=>556,1229=>896,1230=>757,
-1231=>393,1232=>667,1233=>500,1234=>667,1235=>500,1236=>891,1237=>646,1238=>670,1239=>444,1240=>659,
-1241=>372,1242=>619,1243=>372,1244=>1044,1245=>994,1246=>650,1247=>476,1248=>604,1249=>459,1250=>778,
-1251=>539,1252=>778,1253=>539,1254=>722,1255=>500,1256=>722,1257=>500,1258=>722,1259=>500,1260=>732,
-1261=>488,1262=>746,1263=>532,1264=>746,1265=>532,1266=>746,1267=>532,1268=>742,1269=>556,1270=>637,
-1271=>448,1272=>984,1273=>744,1296=>652,1297=>452,1298=>814,1299=>585,1306=>722,1307=>500,1308=>889,
-1309=>656,1310=>736,1311=>564,1425=>0,1426=>0,1427=>0,1428=>0,1429=>0,1430=>0,1431=>0,
-1432=>0,1433=>0,1434=>0,1435=>0,1436=>0,1437=>0,1438=>0,1439=>0,1440=>0,1441=>0,
-1442=>0,1443=>0,1444=>0,1445=>0,1446=>0,1447=>0,1448=>0,1449=>0,1450=>0,1451=>0,
-1452=>0,1453=>0,1454=>0,1455=>0,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,
-1462=>0,1463=>0,1464=>0,1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>433,1471=>0,
-1472=>155,1473=>0,1474=>0,1475=>400,1476=>0,1477=>0,1478=>347,1479=>0,1488=>593,1489=>498,
-1490=>339,1491=>523,1492=>561,1493=>266,1494=>291,1495=>559,1496=>576,1497=>266,1498=>496,1499=>501,
-1500=>510,1501=>542,1502=>581,1503=>273,1504=>347,1505=>512,1506=>552,1507=>493,1508=>491,1509=>537,
-1510=>561,1511=>544,1512=>502,1513=>716,1514=>571,1520=>532,1521=>532,1522=>532,1523=>396,1524=>432,
-3585=>590,3586=>578,3587=>661,3588=>592,3589=>592,3590=>699,3591=>447,3592=>534,3593=>692,3594=>578,
-3595=>659,3596=>899,3597=>804,3598=>633,3599=>637,3600=>484,3601=>730,3602=>876,3603=>915,3604=>592,
-3605=>592,3606=>578,3607=>670,3608=>542,3609=>671,3610=>621,3611=>618,3612=>621,3613=>617,3614=>708,
-3615=>708,3616=>637,3617=>589,3618=>552,3619=>484,3620=>590,3621=>569,3622=>637,3623=>526,3624=>599,
-3625=>802,3626=>579,3627=>668,3628=>778,3629=>560,3630=>514,3631=>510,3632=>442,3633=>0,3634=>423,
-3635=>452,3636=>0,3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0,3647=>665,3648=>357,
-3649=>624,3650=>529,3651=>486,3652=>475,3653=>423,3654=>500,3655=>0,3656=>0,3657=>0,3658=>0,
-3659=>0,3660=>0,3661=>0,3662=>0,3663=>657,3664=>548,3665=>548,3666=>592,3667=>614,3668=>631,
-3669=>643,3670=>508,3671=>744,3672=>622,3673=>585,3674=>721,3675=>1381,4256=>475,4257=>469,4258=>573,
-4259=>650,4260=>502,4261=>506,4262=>481,4263=>746,4264=>491,4265=>495,4266=>888,4267=>488,4268=>464,
-4269=>745,4270=>483,4271=>489,4272=>721,4273=>464,4274=>578,4275=>590,4276=>611,4277=>491,4278=>663,
-4279=>489,4280=>544,4281=>479,4282=>527,4283=>488,4284=>560,4285=>461,4286=>467,4287=>546,4288=>483,
-4289=>487,4290=>562,4291=>477,4292=>491,4293=>471,4304=>522,4305=>518,4306=>621,4307=>716,4308=>517,
-4309=>519,4310=>518,4311=>796,4312=>518,4313=>518,4314=>934,4315=>517,4316=>519,4317=>787,4318=>515,
-4319=>514,4320=>788,4321=>573,4322=>620,4323=>593,4324=>639,4325=>516,4326=>714,4327=>518,4328=>572,
-4329=>518,4330=>555,4331=>518,4332=>562,4333=>509,4334=>572,4335=>677,4336=>523,4337=>517,4338=>595,
-4339=>480,4340=>519,4341=>484,4345=>621,4347=>410,5024=>718,5025=>768,5026=>633,5027=>878,5028=>1001,
-5029=>371,5030=>576,5031=>754,5032=>531,5033=>774,5034=>692,5035=>499,5036=>668,5037=>829,5038=>575,
-5039=>681,5040=>485,5041=>607,5042=>885,5043=>974,5044=>588,5045=>583,5046=>726,5047=>947,5048=>558,
-5049=>832,5050=>1096,5051=>780,5052=>595,5053=>869,5054=>752,5055=>710,5056=>761,5057=>802,5058=>760,
-5059=>656,5060=>655,5061=>982,5062=>684,5063=>801,5064=>805,5065=>1042,5066=>755,5067=>612,5068=>707,
-5069=>889,5070=>584,5071=>623,5072=>536,5073=>763,5074=>763,5075=>498,5076=>1052,5077=>600,5078=>730,
-5079=>714,5080=>714,5081=>697,5082=>543,5083=>943,5084=>718,5085=>630,5086=>660,5087=>692,5088=>841,
-5089=>861,5090=>617,5091=>733,5092=>898,5093=>896,5094=>781,5095=>612,5096=>830,5097=>948,5098=>886,
-5099=>757,5100=>796,5101=>578,5102=>601,5103=>797,5104=>623,5105=>886,5106=>730,5107=>827,5108=>648,
-7680=>667,7681=>500,7682=>667,7683=>500,7684=>667,7685=>500,7686=>667,7687=>500,7688=>667,7689=>444,
-7690=>744,7691=>500,7692=>744,7693=>500,7694=>744,7695=>500,7696=>744,7697=>500,7698=>744,7699=>500,
-7700=>667,7701=>444,7702=>667,7703=>444,7704=>670,7705=>444,7706=>670,7707=>444,7708=>670,7709=>444,
-7710=>656,7711=>333,7712=>722,7713=>500,7714=>778,7715=>556,7716=>778,7717=>556,7718=>778,7719=>556,
-7720=>778,7721=>556,7722=>778,7723=>556,7724=>393,7725=>278,7726=>389,7727=>278,7728=>664,7729=>500,
-7730=>664,7731=>500,7732=>664,7733=>500,7734=>609,7735=>278,7736=>609,7737=>278,7738=>609,7739=>278,
-7740=>609,7741=>278,7742=>896,7743=>778,7744=>896,7745=>778,7746=>896,7747=>778,7748=>722,7749=>556,
-7750=>722,7751=>556,7752=>722,7753=>556,7754=>722,7755=>556,7756=>722,7757=>500,7758=>722,7759=>500,
-7760=>722,7761=>500,7762=>722,7763=>500,7764=>614,7765=>500,7766=>614,7767=>500,7768=>672,7769=>389,
-7770=>672,7771=>389,7772=>672,7773=>389,7774=>672,7775=>389,7776=>556,7777=>389,7778=>556,7779=>389,
-7780=>556,7781=>389,7782=>556,7783=>389,7784=>556,7785=>389,7786=>611,7787=>278,7788=>611,7789=>278,
-7790=>611,7791=>278,7792=>611,7793=>278,7794=>722,7795=>556,7796=>722,7797=>556,7798=>722,7799=>556,
-7800=>722,7801=>556,7802=>722,7803=>556,7804=>667,7805=>444,7806=>667,7807=>444,7808=>889,7809=>667,
-7810=>889,7811=>667,7812=>889,7813=>667,7814=>889,7815=>667,7816=>889,7817=>667,7818=>667,7819=>500,
-7820=>667,7821=>500,7822=>611,7823=>444,7824=>611,7825=>389,7826=>611,7827=>389,7828=>611,7829=>389,
-7830=>556,7831=>278,7832=>667,7833=>444,7834=>507,7835=>333,7840=>667,7841=>500,7842=>667,7843=>500,
-7844=>667,7845=>500,7846=>667,7847=>500,7848=>667,7849=>500,7850=>667,7851=>500,7852=>667,7853=>500,
-7854=>667,7855=>500,7856=>667,7857=>500,7858=>667,7859=>500,7860=>667,7861=>500,7862=>667,7863=>500,
-7864=>670,7865=>444,7866=>670,7867=>444,7868=>670,7869=>444,7870=>667,7871=>444,7872=>667,7873=>444,
-7874=>667,7875=>444,7876=>667,7877=>444,7878=>670,7879=>444,7880=>393,7881=>278,7882=>393,7883=>278,
-7884=>722,7885=>500,7886=>722,7887=>500,7888=>722,7889=>500,7890=>722,7891=>500,7892=>722,7893=>500,
-7894=>722,7895=>500,7896=>722,7897=>500,7898=>908,7899=>640,7900=>908,7901=>640,7902=>908,7903=>640,
-7904=>908,7905=>640,7906=>908,7907=>640,7908=>722,7909=>556,7910=>722,7911=>556,7912=>902,7913=>714,
-7914=>902,7915=>714,7916=>902,7917=>714,7918=>902,7919=>714,7920=>902,7921=>714,7922=>611,7923=>444,
-7924=>611,7925=>444,7926=>611,7927=>444,7928=>611,7929=>444,7936=>590,7937=>590,7938=>590,7939=>590,
-7940=>590,7941=>590,7942=>590,7943=>590,7944=>724,7945=>753,7946=>891,7947=>912,7948=>822,7949=>853,
-7950=>796,7951=>787,7952=>430,7953=>430,7954=>430,7955=>430,7956=>430,7957=>430,7960=>864,7961=>905,
-7962=>1034,7963=>1038,7964=>1031,7965=>1045,7968=>548,7969=>548,7970=>548,7971=>548,7972=>548,7973=>548,
-7974=>548,7975=>548,7976=>976,7977=>1009,7978=>1132,7979=>1141,7980=>1138,7981=>1154,7982=>1079,7983=>1071,
-7984=>320,7985=>320,7986=>320,7987=>320,7988=>320,7989=>320,7990=>320,7991=>320,7992=>593,7993=>620,
-7994=>746,7995=>762,7996=>742,7997=>773,7998=>691,7999=>683,8000=>536,8001=>536,8002=>536,8003=>536,
-8004=>536,8005=>536,8008=>899,8009=>928,8010=>1086,8011=>1118,8012=>1020,8013=>1028,8016=>536,8017=>536,
-8018=>536,8019=>536,8020=>536,8021=>536,8022=>536,8023=>536,8025=>959,8027=>1085,8029=>1108,8031=>1027,
-8032=>715,8033=>715,8034=>715,8035=>715,8036=>715,8037=>715,8038=>715,8039=>715,8040=>946,8041=>960,
-8042=>1133,8043=>1148,8044=>1059,8045=>1081,8046=>1020,8047=>1016,8048=>590,8049=>590,8050=>430,8051=>430,
-8052=>548,8053=>548,8054=>320,8055=>320,8056=>536,8057=>536,8058=>536,8059=>536,8060=>715,8061=>715,
-8064=>590,8065=>590,8066=>590,8067=>590,8068=>590,8069=>590,8070=>590,8071=>590,8072=>842,8073=>877,
-8074=>1011,8075=>1031,8076=>947,8077=>975,8078=>907,8079=>893,8080=>548,8081=>548,8082=>548,8083=>548,
-8084=>548,8085=>548,8086=>548,8087=>548,8088=>1030,8089=>1066,8090=>1188,8091=>1199,8092=>1196,8093=>1211,
-8094=>1134,8095=>1129,8096=>715,8097=>715,8098=>715,8099=>715,8100=>715,8101=>715,8102=>715,8103=>715,
-8104=>1060,8105=>1076,8106=>1264,8107=>1287,8108=>1179,8109=>1204,8110=>1137,8111=>1135,8112=>590,8113=>590,
-8114=>590,8115=>590,8116=>590,8118=>590,8119=>590,8120=>667,8121=>667,8122=>752,8123=>728,8124=>775,
-8125=>250,8126=>0,8127=>500,8128=>500,8129=>550,8130=>548,8131=>548,8132=>548,8134=>548,8135=>548,
-8136=>884,8137=>859,8138=>982,8139=>968,8140=>839,8141=>500,8142=>500,8143=>500,8144=>320,8145=>320,
-8146=>320,8147=>320,8150=>320,8151=>320,8152=>389,8153=>389,8154=>599,8155=>592,8157=>500,8158=>500,
-8159=>500,8160=>536,8161=>536,8162=>536,8163=>536,8164=>536,8165=>536,8166=>536,8167=>536,8168=>722,
-8169=>722,8170=>1007,8171=>932,8172=>842,8173=>550,8174=>550,8175=>500,8178=>715,8179=>715,8180=>715,
-8182=>715,8183=>715,8184=>971,8185=>853,8186=>1004,8187=>875,8188=>862,8189=>500,8190=>500,8192=>500,
-8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>500,8200=>250,8201=>200,8202=>100,
-8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>500,8213=>1000,8214=>333,
-8215=>478,8219=>250,8223=>500,8227=>560,8228=>250,8229=>478,8231=>0,8232=>0,8233=>0,8234=>0,
-8235=>0,8236=>0,8237=>0,8238=>250,8239=>0,8241=>1618,8242=>278,8243=>556,8244=>834,8245=>270,
-8246=>468,8247=>630,8248=>469,8251=>727,8252=>778,8253=>733,8254=>500,8255=>953,8256=>953,8257=>338,
-8258=>931,8259=>333,8260=>167,8261=>332,8262=>332,8263=>1000,8264=>889,8265=>889,8266=>500,8267=>453,
-8268=>479,8269=>492,8270=>500,8271=>333,8272=>953,8273=>500,8274=>521,8275=>576,8276=>953,8277=>785,
-8278=>410,8279=>881,8280=>620,8281=>620,8282=>179,8283=>621,8284=>569,8285=>179,8286=>179,8287=>111,
-8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>300,8305=>219,8308=>300,8309=>300,8310=>300,
-8311=>300,8312=>300,8313=>300,8314=>300,8315=>300,8316=>300,8317=>216,8318=>216,8319=>300,8320=>300,
-8321=>274,8322=>300,8323=>300,8324=>300,8325=>300,8326=>300,8327=>300,8328=>300,8329=>300,8330=>300,
-8331=>300,8332=>300,8333=>216,8334=>216,8352=>667,8353=>667,8354=>667,8355=>667,8356=>500,8357=>742,
-8358=>722,8359=>1008,8360=>953,8361=>889,8362=>889,8363=>532,8365=>742,8366=>631,8369=>609,8370=>639,
-8371=>742,8372=>576,8373=>500,8448=>664,8449=>665,8451=>925,8453=>693,8454=>787,8455=>631,8457=>867,
-8462=>556,8463=>556,8468=>778,8470=>806,8471=>747,8480=>879,8481=>1050,8483=>667,8486=>741,8487=>741,
-8489=>320,8490=>664,8491=>667,8494=>551,8495=>444,8498=>667,8500=>500,8501=>537,8502=>537,8503=>350,
-8504=>537,8506=>942,8507=>1050,8523=>698,8525=>856,8526=>462,8531=>750,8532=>750,8533=>750,8534=>750,
-8535=>750,8536=>750,8537=>750,8538=>750,8539=>750,8540=>750,8541=>750,8542=>750,8543=>750,8544=>393,
-8545=>786,8546=>1179,8547=>1060,8548=>667,8549=>1060,8550=>1453,8551=>1846,8552=>1060,8553=>667,8554=>1060,
-8555=>1453,8556=>609,8557=>667,8558=>744,8559=>896,8560=>278,8561=>556,8562=>834,8563=>722,8564=>444,
-8565=>722,8566=>1000,8567=>1278,8568=>778,8569=>500,8570=>778,8571=>1056,8572=>278,8573=>444,8574=>500,
-8575=>778,8592=>964,8593=>964,8594=>964,8595=>964,8596=>964,8597=>964,8598=>964,8599=>964,8600=>964,
-8601=>964,8602=>964,8603=>964,8606=>964,8607=>964,8608=>964,8609=>964,8610=>964,8611=>964,8612=>964,
-8613=>964,8614=>964,8615=>964,8616=>964,8633=>964,8634=>964,8644=>964,8645=>964,8646=>964,8647=>964,
-8648=>964,8649=>964,8650=>964,8676=>964,8677=>964,8706=>494,8710=>612,8721=>713,8722=>606,8725=>750,
-8730=>549,8734=>752,8800=>570,8804=>570,8805=>570,9251=>500,9674=>494,9676=>732,9824=>618,9825=>645,
-9826=>587,9827=>582,9828=>582,9829=>645,9830=>587,9831=>618,9833=>333,9834=>556,9835=>778,9836=>778,
-9837=>556,9838=>556,9839=>556,11799=>333,64256=>583,64257=>558,64258=>551,64259=>822,64260=>818,64262=>662,
-64285=>266,64286=>0,64287=>532,64288=>552,64297=>570,64298=>716,64299=>716,64300=>716,64301=>716,64302=>593,
-64303=>593,64304=>593,64305=>498,64306=>339,64307=>523,64308=>561,64309=>266,64310=>291,64312=>576,64313=>266,
-64314=>496,64315=>501,64316=>510,64318=>581,64320=>347,64321=>512,64323=>493,64324=>491,64326=>561,64327=>544,
-64328=>502,64329=>716,64330=>571,64331=>266,64332=>498,64333=>501,64334=>491,64335=>593,65533=>788);
-$enc='';
+$dw=700;
$diff='';
+$originalsize=508412;
+$enc='';
$file='freeserifbi.z';
$ctg='freeserifbi.ctg.z';
-$originalsize=452752;
-?>
\ No newline at end of file
+$desc=array('Flags'=>96,'FontBBox'=>'[-787 -300 1678 924]','ItalicAngle'=>-16.45875,'Ascent'=>900,'Descent'=>-300,'Leading'=>90,'CapHeight'=>669,'XHeight'=>475,'StemV'=>123,'StemH'=>53,'AvgWidth'=>412,'MaxWidth'=>1657,'MissingWidth'=>700);
+$cw=array(0=>0,1=>700,2=>700,3=>700,4=>700,5=>700,6=>700,7=>700,8=>0,9=>600,10=>700,11=>700,12=>700,13=>600,14=>700,15=>700,16=>700,17=>700,18=>700,19=>700,20=>700,21=>700,22=>700,23=>700,24=>700,25=>700,26=>700,27=>700,28=>700,29=>0,30=>700,31=>700,32=>250,33=>389,34=>555,35=>500,36=>500,37=>833,38=>778,39=>278,40=>333,41=>333,42=>500,43=>570,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>570,61=>570,62=>570,63=>500,64=>832,65=>667,66=>667,67=>667,68=>744,69=>670,70=>656,71=>722,72=>778,73=>393,74=>500,75=>664,76=>609,77=>896,78=>722,79=>722,80=>614,81=>722,82=>672,83=>556,84=>611,85=>722,86=>667,87=>889,88=>667,89=>611,90=>611,91=>333,92=>278,93=>333,94=>570,95=>500,96=>333,97=>500,98=>500,99=>444,100=>500,101=>444,102=>333,103=>500,104=>556,105=>278,106=>278,107=>500,108=>278,109=>778,110=>556,111=>500,112=>500,113=>500,114=>389,115=>389,116=>278,117=>556,118=>444,119=>667,120=>500,121=>444,122=>389,123=>348,124=>220,125=>348,126=>570,127=>700,128=>667,129=>667,130=>667,131=>667,132=>722,133=>722,134=>722,135=>500,136=>500,137=>500,138=>500,139=>500,140=>500,141=>444,142=>444,143=>444,144=>444,145=>444,146=>278,147=>278,148=>278,149=>278,150=>556,151=>500,152=>500,153=>500,154=>500,155=>500,156=>556,157=>556,158=>556,159=>556,160=>250,161=>389,162=>500,163=>500,164=>500,165=>500,166=>220,167=>500,168=>333,169=>747,170=>266,171=>500,172=>606,173=>333,174=>747,175=>333,176=>400,177=>570,178=>300,179=>300,180=>333,181=>576,182=>500,183=>250,184=>333,185=>272,186=>300,187=>500,188=>750,189=>750,190=>750,191=>500,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>944,199=>667,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389,208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>570,216=>722,217=>722,218=>722,219=>722,220=>722,221=>611,222=>609,223=>500,224=>500,225=>500,226=>500,227=>500,228=>500,229=>500,230=>703,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>556,242=>500,243=>500,244=>500,245=>500,246=>500,247=>570,248=>500,249=>556,250=>556,251=>556,252=>556,253=>444,254=>500,255=>444,256=>667,257=>500,258=>667,259=>500,260=>667,261=>500,262=>667,263=>444,264=>667,265=>444,266=>667,267=>444,268=>667,269=>444,270=>722,271=>609,272=>722,273=>500,274=>667,275=>444,276=>667,277=>444,278=>667,279=>444,280=>667,281=>444,282=>667,283=>444,284=>722,285=>500,286=>722,287=>500,288=>722,289=>500,290=>722,291=>500,292=>778,293=>556,294=>778,295=>556,296=>389,297=>278,298=>389,299=>278,300=>389,301=>278,302=>389,303=>278,304=>389,305=>278,306=>834,307=>545,308=>500,309=>278,310=>667,311=>500,312=>534,313=>611,314=>278,315=>611,316=>278,317=>638,318=>382,319=>611,320=>424,321=>611,322=>278,323=>722,324=>556,325=>722,326=>556,327=>722,328=>556,329=>646,330=>829,331=>547,332=>722,333=>500,334=>722,335=>500,336=>722,337=>500,338=>944,339=>711,340=>667,341=>389,342=>667,343=>389,344=>667,345=>389,346=>556,347=>389,348=>556,349=>389,350=>556,351=>389,352=>556,353=>389,354=>611,355=>278,356=>611,357=>426,358=>611,359=>278,360=>722,361=>556,362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556,372=>889,373=>667,374=>611,375=>444,376=>611,377=>611,378=>389,379=>611,380=>389,381=>611,382=>389,383=>333,384=>500,385=>850,386=>667,387=>575,388=>630,389=>500,390=>722,391=>929,392=>654,393=>722,394=>864,395=>684,396=>500,397=>546,398=>670,399=>722,400=>631,401=>769,402=>333,403=>929,404=>716,405=>745,406=>278,407=>389,408=>829,409=>500,410=>278,411=>495,412=>853,413=>919,414=>556,415=>722,416=>868,417=>603,418=>1014,419=>778,420=>757,421=>500,422=>611,423=>556,424=>389,425=>730,426=>455,427=>349,428=>611,429=>298,430=>611,431=>879,432=>704,433=>811,434=>678,435=>611,436=>581,437=>611,438=>389,439=>619,440=>614,441=>461,442=>445,443=>500,444=>614,445=>500,446=>389,447=>504,448=>220,449=>418,450=>570,451=>333,452=>1355,453=>1133,454=>889,455=>1109,456=>887,457=>556,458=>1152,459=>1000,460=>834,461=>667,462=>500,463=>393,464=>278,465=>722,466=>500,467=>722,468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722,476=>556,477=>444,478=>667,479=>500,480=>667,481=>500,482=>944,483=>703,484=>722,485=>500,486=>722,487=>500,488=>664,489=>500,490=>722,491=>500,492=>722,493=>500,494=>619,495=>513,496=>278,497=>1355,498=>1133,499=>889,500=>722,501=>500,502=>944,503=>660,504=>722,505=>556,506=>667,507=>500,508=>944,509=>703,510=>722,511=>500,512=>667,513=>500,514=>667,515=>500,516=>670,517=>444,518=>670,519=>444,520=>393,521=>278,522=>393,523=>278,524=>722,525=>500,526=>722,527=>500,528=>672,529=>389,530=>672,531=>389,532=>722,533=>556,534=>722,535=>556,536=>556,537=>389,538=>611,539=>278,540=>424,541=>455,542=>778,543=>556,544=>731,545=>618,546=>568,547=>500,548=>667,549=>444,550=>667,551=>500,552=>670,553=>444,554=>722,555=>500,556=>722,557=>500,558=>722,559=>500,560=>722,561=>500,562=>611,563=>444,564=>422,565=>621,566=>413,567=>278,568=>800,569=>784,570=>644,571=>667,572=>444,573=>664,574=>611,575=>389,576=>451,577=>444,578=>444,579=>667,580=>722,581=>722,582=>670,583=>444,584=>500,585=>278,586=>808,587=>608,588=>672,589=>389,590=>611,591=>444,592=>500,593=>590,594=>590,595=>510,596=>444,598=>516,599=>552,600=>444,601=>444,603=>430,604=>440,606=>440,607=>278,608=>569,609=>500,610=>504,612=>582,613=>556,614=>556,615=>556,616=>288,617=>320,618=>278,619=>278,621=>516,622=>559,623=>778,624=>778,625=>778,626=>556,627=>556,628=>500,629=>500,630=>732,631=>715,632=>667,633=>389,634=>389,635=>495,636=>389,637=>389,638=>394,639=>394,640=>556,641=>556,642=>389,643=>333,644=>333,645=>433,647=>333,648=>278,649=>500,650=>557,651=>492,652=>444,653=>667,654=>444,655=>406,656=>604,658=>513,660=>500,661=>500,662=>500,663=>444,664=>778,665=>445,667=>700,668=>542,670=>500,671=>429,672=>560,673=>500,675=>752,676=>807,678=>609,679=>510,681=>815,682=>606,683=>525,684=>490,686=>556,687=>556,688=>396,689=>397,690=>172,691=>243,692=>267,693=>341,694=>368,695=>440,696=>300,697=>250,698=>408,699=>250,700=>250,701=>250,702=>300,703=>300,704=>340,705=>340,706=>333,707=>333,708=>333,709=>333,710=>333,711=>333,712=>333,713=>333,714=>333,715=>333,716=>300,717=>333,718=>333,719=>333,720=>278,721=>278,722=>300,723=>300,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,731=>333,732=>333,733=>333,734=>333,735=>352,736=>374,737=>227,738=>264,739=>340,740=>340,741=>526,742=>526,743=>526,744=>526,745=>526,746=>519,747=>519,748=>333,749=>333,750=>480,751=>333,752=>333,753=>333,754=>333,755=>327,756=>261,757=>437,758=>437,759=>400,760=>278,761=>175,762=>175,763=>175,764=>175,765=>0,766=>337,767=>432,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,884=>199,885=>199,890=>0,894=>333,900=>330,901=>333,902=>667,903=>250,904=>819,905=>955,906=>539,908=>835,910=>961,911=>889,912=>320,913=>667,914=>667,915=>637,916=>740,917=>667,918=>611,919=>778,920=>722,921=>389,922=>677,923=>667,924=>889,925=>722,926=>650,927=>722,928=>778,929=>611,931=>730,932=>621,933=>722,934=>748,935=>667,936=>858,937=>741,938=>389,939=>722,940=>590,941=>430,942=>548,943=>320,944=>536,945=>590,946=>536,947=>548,948=>550,949=>430,950=>482,951=>548,952=>525,953=>320,954=>564,955=>510,956=>589,957=>522,958=>482,959=>536,960=>629,961=>536,962=>470,963=>536,964=>464,965=>536,966=>643,967=>482,968=>715,969=>715,970=>320,971=>536,972=>536,973=>536,974=>715,976=>508,977=>589,978=>722,979=>931,980=>722,981=>660,982=>715,983=>536,984=>611,985=>536,986=>620,987=>524,988=>667,989=>535,990=>708,991=>428,992=>671,993=>633,1008=>550,1009=>550,1010=>477,1011=>278,1012=>722,1013=>411,1014=>411,1015=>609,1016=>500,1017=>667,1018=>896,1019=>769,1020=>536,1021=>667,1022=>667,1023=>667,1024=>670,1025=>670,1026=>762,1027=>637,1028=>667,1029=>556,1030=>393,1031=>393,1032=>500,1033=>1085,1034=>1049,1035=>747,1036=>736,1037=>778,1038=>746,1039=>778,1040=>667,1041=>667,1042=>667,1043=>637,1044=>778,1045=>670,1046=>1044,1047=>650,1048=>778,1049=>778,1050=>736,1051=>814,1052=>896,1053=>778,1054=>722,1055=>778,1056=>614,1057=>667,1058=>611,1059=>746,1060=>748,1061=>667,1062=>778,1063=>742,1064=>1136,1065=>1135,1066=>779,1067=>984,1068=>664,1069=>732,1070=>1069,1071=>779,1072=>500,1073=>508,1074=>486,1075=>414,1076=>486,1077=>444,1078=>982,1079=>476,1080=>556,1081=>556,1082=>564,1083=>585,1084=>757,1085=>552,1086=>500,1087=>556,1088=>500,1089=>444,1090=>778,1091=>532,1092=>764,1093=>500,1094=>556,1095=>556,1096=>806,1097=>806,1098=>644,1099=>744,1100=>470,1101=>488,1102=>757,1103=>586,1104=>444,1105=>444,1106=>524,1107=>414,1108=>488,1109=>389,1110=>278,1111=>278,1112=>278,1113=>772,1114=>745,1115=>556,1116=>564,1117=>556,1118=>532,1119=>556,1120=>990,1121=>690,1122=>804,1123=>751,1124=>1017,1125=>752,1126=>900,1127=>728,1128=>1236,1129=>927,1130=>1044,1131=>826,1132=>1401,1133=>1016,1134=>620,1135=>476,1136=>858,1137=>769,1138=>722,1139=>544,1140=>796,1141=>584,1142=>796,1143=>584,1144=>1268,1145=>1023,1146=>895,1147=>612,1148=>990,1149=>690,1150=>990,1151=>635,1152=>620,1153=>444,1154=>372,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>778,1163=>556,1164=>664,1165=>470,1166=>614,1167=>473,1168=>624,1169=>448,1170=>624,1171=>448,1172=>733,1173=>485,1174=>1080,1175=>982,1176=>650,1177=>476,1178=>772,1179=>564,1180=>772,1181=>590,1182=>738,1183=>499,1184=>862,1185=>718,1186=>778,1187=>552,1188=>976,1189=>682,1190=>1085,1191=>787,1192=>667,1193=>480,1194=>667,1195=>444,1196=>534,1197=>778,1198=>611,1199=>640,1200=>611,1201=>640,1202=>694,1203=>500,1204=>1004,1205=>518,1206=>742,1207=>556,1208=>742,1209=>556,1210=>716,1211=>556,1212=>844,1213=>530,1214=>844,1215=>530,1216=>393,1217=>1044,1218=>982,1219=>736,1220=>534,1221=>814,1222=>585,1223=>778,1224=>552,1225=>778,1226=>552,1227=>742,1228=>556,1229=>896,1230=>757,1231=>393,1232=>667,1233=>500,1234=>667,1235=>500,1236=>891,1237=>646,1238=>670,1239=>444,1240=>659,1241=>372,1242=>619,1243=>372,1244=>1044,1245=>994,1246=>650,1247=>476,1248=>604,1249=>459,1250=>778,1251=>539,1252=>778,1253=>539,1254=>722,1255=>500,1256=>722,1257=>500,1258=>722,1259=>500,1260=>732,1261=>488,1262=>746,1263=>532,1264=>746,1265=>532,1266=>746,1267=>532,1268=>742,1269=>556,1270=>637,1271=>448,1272=>984,1273=>744,1296=>652,1297=>452,1298=>814,1299=>585,1306=>722,1307=>500,1308=>889,1309=>656,1310=>736,1311=>564,1329=>889,1330=>787,1331=>858,1332=>941,1333=>775,1334=>765,1335=>805,1336=>762,1337=>938,1338=>869,1339=>765,1340=>756,1341=>966,1342=>992,1343=>748,1344=>469,1345=>731,1346=>941,1347=>745,1348=>966,1349=>641,1350=>929,1351=>774,1352=>779,1353=>784,1354=>841,1355=>775,1356=>955,1357=>779,1358=>927,1359=>555,1360=>763,1361=>641,1362=>656,1363=>824,1364=>869,1365=>768,1366=>754,1369=>300,1370=>300,1371=>270,1372=>307,1373=>270,1374=>324,1375=>322,1377=>818,1378=>548,1379=>601,1380=>608,1381=>551,1382=>547,1383=>496,1384=>548,1385=>586,1386=>585,1387=>548,1388=>269,1389=>798,1390=>594,1391=>544,1392=>548,1393=>513,1394=>583,1395=>560,1396=>551,1397=>397,1398=>567,1399=>447,1400=>548,1401=>411,1402=>810,1403=>464,1404=>548,1405=>551,1406=>595,1407=>821,1408=>548,1409=>557,1410=>312,1411=>821,1412=>550,1413=>511,1414=>668,1415=>602,1417=>333,1418=>349,1425=>0,1426=>0,1427=>0,1428=>0,1429=>0,1430=>0,1431=>0,1432=>0,1433=>0,1434=>0,1435=>0,1436=>0,1437=>0,1438=>0,1439=>0,1440=>0,1441=>0,1442=>0,1443=>0,1444=>0,1445=>0,1446=>0,1447=>0,1448=>0,1449=>0,1450=>0,1451=>0,1452=>0,1453=>0,1454=>0,1455=>0,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>433,1471=>0,1472=>155,1473=>0,1474=>0,1475=>400,1476=>0,1477=>0,1478=>347,1479=>0,1488=>593,1489=>498,1490=>339,1491=>523,1492=>561,1493=>266,1494=>291,1495=>559,1496=>576,1497=>266,1498=>496,1499=>501,1500=>510,1501=>542,1502=>581,1503=>273,1504=>347,1505=>512,1506=>552,1507=>493,1508=>491,1509=>537,1510=>561,1511=>544,1512=>502,1513=>716,1514=>571,1520=>532,1521=>532,1522=>532,1523=>396,1524=>432,3585=>590,3586=>578,3587=>661,3588=>592,3589=>592,3590=>699,3591=>447,3592=>534,3593=>692,3594=>578,3595=>659,3596=>899,3597=>804,3598=>633,3599=>637,3600=>484,3601=>730,3602=>876,3603=>915,3604=>592,3605=>592,3606=>578,3607=>670,3608=>542,3609=>671,3610=>621,3611=>618,3612=>621,3613=>617,3614=>708,3615=>708,3616=>637,3617=>589,3618=>552,3619=>484,3620=>590,3621=>569,3622=>637,3623=>526,3624=>599,3625=>802,3626=>579,3627=>668,3628=>778,3629=>560,3630=>514,3631=>510,3632=>442,3633=>0,3634=>423,3635=>452,3636=>0,3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0,3647=>665,3648=>357,3649=>624,3650=>529,3651=>486,3652=>475,3653=>423,3654=>500,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,3660=>0,3661=>0,3662=>0,3663=>657,3664=>548,3665=>548,3666=>592,3667=>614,3668=>631,3669=>643,3670=>508,3671=>744,3672=>622,3673=>585,3674=>721,3675=>1381,4256=>475,4257=>469,4258=>573,4259=>650,4260=>502,4261=>506,4262=>481,4263=>746,4264=>491,4265=>495,4266=>888,4267=>488,4268=>464,4269=>745,4270=>483,4271=>489,4272=>721,4273=>464,4274=>578,4275=>590,4276=>611,4277=>491,4278=>663,4279=>489,4280=>544,4281=>479,4282=>527,4283=>488,4284=>560,4285=>461,4286=>467,4287=>546,4288=>483,4289=>487,4290=>562,4291=>477,4292=>491,4293=>471,4304=>522,4305=>518,4306=>621,4307=>716,4308=>517,4309=>519,4310=>518,4311=>796,4312=>518,4313=>518,4314=>934,4315=>517,4316=>519,4317=>787,4318=>515,4319=>514,4320=>788,4321=>573,4322=>620,4323=>593,4324=>639,4325=>516,4326=>714,4327=>518,4328=>572,4329=>518,4330=>555,4331=>518,4332=>562,4333=>509,4334=>572,4335=>677,4336=>523,4337=>517,4338=>595,4339=>480,4340=>519,4341=>484,4342=>838,4343=>517,4344=>516,4345=>621,4346=>522,4347=>410,4348=>389,5024=>718,5025=>768,5026=>633,5027=>878,5028=>1001,5029=>371,5030=>576,5031=>754,5032=>531,5033=>774,5034=>692,5035=>499,5036=>668,5037=>829,5038=>575,5039=>681,5040=>485,5041=>607,5042=>885,5043=>974,5044=>588,5045=>583,5046=>726,5047=>947,5048=>558,5049=>832,5050=>1096,5051=>780,5052=>595,5053=>869,5054=>752,5055=>710,5056=>761,5057=>802,5058=>760,5059=>656,5060=>655,5061=>982,5062=>684,5063=>801,5064=>805,5065=>1042,5066=>755,5067=>612,5068=>707,5069=>889,5070=>584,5071=>623,5072=>536,5073=>763,5074=>763,5075=>549,5076=>1052,5077=>600,5078=>730,5079=>714,5080=>714,5081=>697,5082=>543,5083=>943,5084=>718,5085=>630,5086=>660,5087=>692,5088=>841,5089=>861,5090=>617,5091=>733,5092=>898,5093=>896,5094=>781,5095=>612,5096=>830,5097=>948,5098=>886,5099=>757,5100=>796,5101=>578,5102=>601,5103=>797,5104=>623,5105=>886,5106=>730,5107=>827,5108=>648,7680=>667,7681=>500,7682=>667,7683=>500,7684=>667,7685=>500,7686=>667,7687=>500,7688=>667,7689=>444,7690=>744,7691=>500,7692=>744,7693=>500,7694=>744,7695=>500,7696=>744,7697=>500,7698=>744,7699=>500,7700=>667,7701=>444,7702=>667,7703=>444,7704=>670,7705=>444,7706=>670,7707=>444,7708=>670,7709=>444,7710=>656,7711=>333,7712=>722,7713=>500,7714=>778,7715=>556,7716=>778,7717=>556,7718=>778,7719=>556,7720=>778,7721=>556,7722=>778,7723=>556,7724=>393,7725=>278,7726=>389,7727=>278,7728=>664,7729=>500,7730=>664,7731=>500,7732=>664,7733=>500,7734=>609,7735=>278,7736=>609,7737=>278,7738=>609,7739=>278,7740=>609,7741=>278,7742=>896,7743=>778,7744=>896,7745=>778,7746=>896,7747=>778,7748=>722,7749=>556,7750=>722,7751=>556,7752=>722,7753=>556,7754=>722,7755=>556,7756=>722,7757=>500,7758=>722,7759=>500,7760=>722,7761=>500,7762=>722,7763=>500,7764=>614,7765=>500,7766=>614,7767=>500,7768=>672,7769=>389,7770=>672,7771=>389,7772=>672,7773=>389,7774=>672,7775=>389,7776=>556,7777=>389,7778=>556,7779=>389,7780=>556,7781=>389,7782=>556,7783=>389,7784=>556,7785=>389,7786=>611,7787=>278,7788=>611,7789=>278,7790=>611,7791=>278,7792=>611,7793=>278,7794=>722,7795=>556,7796=>722,7797=>556,7798=>722,7799=>556,7800=>722,7801=>556,7802=>722,7803=>556,7804=>667,7805=>444,7806=>667,7807=>444,7808=>889,7809=>667,7810=>889,7811=>667,7812=>889,7813=>667,7814=>889,7815=>667,7816=>889,7817=>667,7818=>667,7819=>500,7820=>667,7821=>500,7822=>611,7823=>444,7824=>611,7825=>389,7826=>611,7827=>389,7828=>611,7829=>389,7830=>556,7831=>278,7832=>667,7833=>444,7834=>507,7835=>333,7836=>333,7837=>333,7838=>792,7839=>534,7840=>667,7841=>500,7842=>667,7843=>500,7844=>667,7845=>500,7846=>667,7847=>500,7848=>667,7849=>500,7850=>667,7851=>500,7852=>667,7853=>500,7854=>667,7855=>500,7856=>667,7857=>500,7858=>667,7859=>500,7860=>667,7861=>500,7862=>667,7863=>500,7864=>670,7865=>444,7866=>670,7867=>444,7868=>670,7869=>444,7870=>667,7871=>444,7872=>667,7873=>444,7874=>667,7875=>444,7876=>667,7877=>444,7878=>670,7879=>444,7880=>393,7881=>278,7882=>393,7883=>278,7884=>722,7885=>500,7886=>722,7887=>500,7888=>722,7889=>500,7890=>722,7891=>500,7892=>722,7893=>500,7894=>722,7895=>500,7896=>722,7897=>500,7898=>868,7899=>603,7900=>868,7901=>603,7902=>868,7903=>603,7904=>868,7905=>603,7906=>868,7907=>603,7908=>722,7909=>556,7910=>722,7911=>556,7912=>879,7913=>704,7914=>879,7915=>704,7916=>879,7917=>704,7918=>879,7919=>704,7920=>879,7921=>704,7922=>611,7923=>444,7924=>611,7925=>444,7926=>611,7927=>444,7928=>611,7929=>444,7936=>590,7937=>590,7938=>590,7939=>590,7940=>590,7941=>590,7942=>590,7943=>590,7944=>724,7945=>753,7946=>891,7947=>912,7948=>822,7949=>853,7950=>796,7951=>787,7952=>430,7953=>430,7954=>430,7955=>430,7956=>430,7957=>430,7960=>864,7961=>905,7962=>1034,7963=>1038,7964=>1031,7965=>1045,7968=>548,7969=>548,7970=>548,7971=>548,7972=>548,7973=>548,7974=>548,7975=>548,7976=>976,7977=>1009,7978=>1132,7979=>1141,7980=>1138,7981=>1154,7982=>1079,7983=>1071,7984=>320,7985=>320,7986=>320,7987=>320,7988=>320,7989=>320,7990=>320,7991=>320,7992=>593,7993=>620,7994=>746,7995=>762,7996=>742,7997=>773,7998=>691,7999=>683,8000=>536,8001=>536,8002=>536,8003=>536,8004=>536,8005=>536,8008=>899,8009=>928,8010=>1086,8011=>1118,8012=>1020,8013=>1028,8016=>536,8017=>536,8018=>536,8019=>536,8020=>536,8021=>536,8022=>536,8023=>536,8025=>959,8027=>1085,8029=>1108,8031=>1027,8032=>715,8033=>715,8034=>715,8035=>715,8036=>715,8037=>715,8038=>715,8039=>715,8040=>946,8041=>960,8042=>1133,8043=>1148,8044=>1059,8045=>1081,8046=>1020,8047=>1016,8048=>590,8049=>590,8050=>430,8051=>430,8052=>548,8053=>548,8054=>320,8055=>320,8056=>536,8057=>536,8058=>536,8059=>536,8060=>715,8061=>715,8064=>590,8065=>590,8066=>590,8067=>590,8068=>590,8069=>590,8070=>590,8071=>590,8072=>842,8073=>877,8074=>1011,8075=>1031,8076=>947,8077=>975,8078=>907,8079=>893,8080=>548,8081=>548,8082=>548,8083=>548,8084=>548,8085=>548,8086=>548,8087=>548,8088=>1030,8089=>1066,8090=>1188,8091=>1199,8092=>1196,8093=>1211,8094=>1134,8095=>1129,8096=>715,8097=>715,8098=>715,8099=>715,8100=>715,8101=>715,8102=>715,8103=>715,8104=>1060,8105=>1076,8106=>1264,8107=>1287,8108=>1179,8109=>1204,8110=>1137,8111=>1135,8112=>590,8113=>590,8114=>590,8115=>590,8116=>590,8118=>590,8119=>590,8120=>667,8121=>667,8122=>752,8123=>728,8124=>775,8125=>250,8126=>0,8127=>500,8128=>500,8129=>550,8130=>548,8131=>548,8132=>548,8134=>548,8135=>548,8136=>884,8137=>859,8138=>982,8139=>968,8140=>839,8141=>500,8142=>500,8143=>500,8144=>320,8145=>320,8146=>320,8147=>320,8150=>320,8151=>320,8152=>389,8153=>389,8154=>599,8155=>592,8157=>500,8158=>500,8159=>500,8160=>536,8161=>536,8162=>536,8163=>536,8164=>536,8165=>536,8166=>536,8167=>536,8168=>722,8169=>722,8170=>1007,8171=>932,8172=>842,8173=>550,8174=>550,8175=>500,8178=>715,8179=>715,8180=>715,8182=>715,8183=>715,8184=>971,8185=>853,8186=>1004,8187=>875,8188=>862,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>500,8200=>250,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>500,8211=>500,8212=>1000,8213=>1000,8214=>333,8215=>478,8216=>250,8217=>250,8218=>250,8219=>250,8220=>500,8221=>500,8222=>500,8223=>500,8224=>500,8225=>500,8226=>350,8227=>560,8228=>250,8229=>478,8230=>1000,8231=>0,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>250,8239=>0,8240=>1000,8241=>1618,8242=>278,8243=>556,8244=>834,8245=>270,8246=>468,8247=>630,8248=>469,8249=>333,8250=>333,8251=>727,8252=>778,8253=>733,8254=>500,8255=>953,8256=>953,8257=>338,8258=>931,8259=>333,8260=>167,8261=>332,8262=>332,8263=>1000,8264=>889,8265=>889,8266=>500,8267=>453,8268=>479,8269=>492,8270=>500,8271=>333,8272=>953,8273=>500,8274=>521,8275=>576,8276=>953,8277=>785,8278=>410,8279=>881,8280=>620,8281=>620,8282=>179,8283=>621,8284=>569,8285=>179,8286=>179,8287=>111,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>300,8305=>219,8308=>300,8309=>300,8310=>300,8311=>300,8312=>300,8313=>300,8314=>300,8315=>300,8316=>300,8317=>216,8318=>216,8319=>362,8320=>300,8321=>274,8322=>300,8323=>300,8324=>300,8325=>300,8326=>300,8327=>300,8328=>300,8329=>300,8330=>300,8331=>300,8332=>300,8333=>216,8334=>216,8336=>350,8337=>296,8338=>320,8339=>337,8340=>298,8352=>667,8353=>667,8354=>667,8355=>667,8356=>500,8357=>742,8358=>722,8359=>1008,8360=>953,8361=>889,8362=>889,8363=>532,8364=>761,8365=>742,8366=>631,8367=>1435,8368=>579,8369=>609,8370=>639,8371=>742,8372=>576,8373=>500,8376=>524,8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8421=>0,8423=>0,8424=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8448=>624,8449=>625,8451=>925,8453=>623,8454=>737,8455=>631,8456=>709,8457=>867,8458=>500,8459=>1035,8462=>556,8463=>556,8464=>792,8465=>737,8466=>800,8467=>427,8468=>835,8470=>806,8471=>855,8472=>666,8475=>747,8476=>955,8478=>722,8479=>722,8480=>991,8481=>1050,8482=>1086,8483=>667,8486=>741,8487=>741,8489=>320,8490=>664,8491=>667,8492=>806,8494=>551,8495=>444,8497=>723,8498=>595,8499=>1203,8501=>537,8502=>537,8503=>350,8504=>537,8506=>942,8507=>1050,8523=>698,8525=>1028,8526=>396,8531=>750,8532=>750,8533=>750,8534=>750,8535=>750,8536=>750,8537=>750,8538=>750,8539=>750,8540=>750,8541=>750,8542=>750,8543=>750,8544=>393,8545=>716,8546=>1039,8547=>1040,8548=>667,8549=>1016,8550=>1334,8551=>1657,8552=>1005,8553=>667,8554=>1024,8555=>1353,8556=>609,8557=>667,8558=>744,8559=>896,8560=>278,8561=>556,8562=>834,8563=>722,8564=>444,8565=>722,8566=>1000,8567=>1278,8568=>778,8569=>500,8570=>778,8571=>1056,8572=>278,8573=>444,8574=>500,8575=>778,8592=>964,8593=>964,8594=>964,8595=>964,8596=>964,8597=>964,8598=>964,8599=>964,8600=>964,8601=>964,8602=>964,8603=>964,8606=>964,8607=>964,8608=>964,8609=>964,8610=>964,8611=>964,8612=>964,8613=>964,8614=>964,8615=>964,8616=>964,8632=>964,8633=>964,8636=>964,8637=>964,8638=>964,8639=>964,8640=>964,8641=>964,8642=>964,8643=>964,8644=>964,8645=>964,8646=>964,8647=>964,8648=>964,8649=>964,8650=>964,8676=>964,8677=>964,8706=>494,8710=>612,8721=>713,8722=>606,8725=>750,8730=>549,8734=>752,8800=>570,8804=>570,8805=>570,9251=>500,9674=>494,9675=>738,9676=>732,9711=>855,9824=>618,9825=>645,9826=>587,9827=>582,9828=>582,9829=>645,9830=>587,9831=>618,9833=>333,9834=>556,9835=>778,9836=>778,9837=>556,9838=>556,9839=>556,11799=>333,42790=>778,42791=>548,42792=>839,42793=>615,42794=>652,42795=>452,42796=>478,42797=>422,42798=>675,42799=>627,42888=>333,42889=>278,42890=>282,42891=>349,42892=>278,64256=>602,64257=>572,64258=>569,64259=>842,64260=>838,64261=>577,64262=>662,64275=>1105,64276=>1105,64277=>1099,64278=>1105,64279=>1361,64285=>266,64286=>0,64287=>532,64288=>552,64297=>570,64298=>716,64299=>716,64300=>716,64301=>716,64302=>593,64303=>593,64304=>593,64305=>498,64306=>339,64307=>523,64308=>561,64309=>266,64310=>291,64312=>576,64313=>266,64314=>496,64315=>501,64316=>510,64318=>581,64320=>347,64321=>512,64323=>493,64324=>491,64326=>561,64327=>544,64328=>502,64329=>716,64330=>571,64331=>266,64332=>498,64333=>501,64334=>491,64335=>593,65533=>900,65535=>700);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/freeserifbi.z b/lib/tcpdf/fonts/freeserifbi.z
index 63125cf5432..e46c737394c 100644
Binary files a/lib/tcpdf/fonts/freeserifbi.z and b/lib/tcpdf/fonts/freeserifbi.z differ
diff --git a/lib/tcpdf/fonts/freeserifi.ctg.z b/lib/tcpdf/fonts/freeserifi.ctg.z
index 1a99cb55f52..11176cfa32d 100644
Binary files a/lib/tcpdf/fonts/freeserifi.ctg.z and b/lib/tcpdf/fonts/freeserifi.ctg.z differ
diff --git a/lib/tcpdf/fonts/freeserifi.php b/lib/tcpdf/fonts/freeserifi.php
index df824e2749a..d9a71f6b2b0 100644
--- a/lib/tcpdf/fonts/freeserifi.php
+++ b/lib/tcpdf/fonts/freeserifi.php
@@ -1,259 +1,15 @@
900,'Descent'=>-300,'CapHeight'=>-29,'Flags'=>96,'FontBBox'=>'[-879 -434 1673 900]','ItalicAngle'=>-16.5,'StemV'=>70,'MissingWidth'=>600);
$up=-125;
$ut=50;
-$dw=600;
-$cw=array(
-32=>250,33=>333,34=>420,35=>500,36=>500,37=>833,38=>778,39=>214,40=>333,41=>333,
-42=>500,43=>675,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,
-52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>675,61=>675,
-62=>675,63=>500,64=>920,65=>611,66=>611,67=>667,68=>722,69=>604,70=>611,71=>722,
-72=>722,73=>339,74=>444,75=>652,76=>556,77=>828,78=>657,79=>722,80=>603,81=>722,
-82=>616,83=>500,84=>556,85=>722,86=>611,87=>833,88=>611,89=>556,90=>556,91=>389,
-92=>278,93=>389,94=>422,95=>500,96=>333,97=>500,98=>500,99=>444,100=>500,101=>444,
-102=>278,103=>500,104=>500,105=>278,106=>278,107=>444,108=>278,109=>722,110=>500,111=>500,
-112=>500,113=>500,114=>389,115=>389,116=>278,117=>500,118=>444,119=>667,120=>444,121=>444,
-122=>389,123=>400,124=>275,125=>400,126=>541,8364=>741,8218=>250,402=>278,8222=>444,8230=>889,
-8224=>500,8225=>500,710=>333,8240=>1000,352=>500,8249=>250,338=>944,381=>556,8216=>250,8217=>250,
-8220=>444,8221=>444,8226=>350,8211=>500,8212=>1000,732=>333,8482=>980,353=>389,8250=>250,339=>667,
-382=>389,376=>556,160=>250,161=>389,162=>500,163=>500,164=>500,165=>500,166=>275,167=>500,
-168=>333,169=>760,170=>276,171=>444,172=>675,173=>333,174=>760,175=>333,176=>400,177=>675,
-178=>300,179=>300,180=>333,181=>500,182=>523,183=>250,184=>333,185=>250,186=>310,187=>444,
-188=>750,189=>750,190=>750,191=>500,192=>611,193=>611,194=>611,195=>611,196=>611,197=>611,
-198=>889,199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333,
-208=>722,209=>667,210=>722,211=>722,212=>722,213=>722,214=>722,215=>675,216=>722,217=>722,
-218=>722,219=>722,220=>722,221=>556,222=>611,223=>500,224=>500,225=>500,226=>500,227=>500,
-228=>500,229=>500,230=>667,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,
-238=>278,239=>278,240=>500,241=>500,242=>500,243=>500,244=>500,245=>500,246=>500,247=>675,
-248=>500,249=>500,250=>500,251=>500,252=>500,253=>444,254=>500,255=>444,256=>611,257=>500,
-258=>611,259=>500,260=>611,261=>500,262=>667,263=>444,264=>667,265=>444,266=>667,267=>444,
-268=>667,269=>444,270=>722,271=>500,272=>722,273=>500,274=>611,275=>444,276=>611,277=>444,
-278=>611,279=>444,280=>611,281=>444,282=>611,283=>444,284=>722,285=>500,286=>722,287=>500,
-288=>722,289=>500,290=>722,291=>500,292=>722,293=>500,294=>722,295=>500,296=>333,297=>278,
-298=>333,299=>278,300=>333,301=>278,302=>333,303=>278,304=>333,305=>278,306=>707,307=>553,
-308=>444,309=>278,310=>667,311=>444,312=>444,313=>556,314=>278,315=>556,316=>278,317=>556,
-318=>278,319=>556,320=>278,321=>556,322=>278,323=>667,324=>500,325=>667,326=>500,327=>667,
-328=>500,329=>500,330=>667,331=>500,332=>722,333=>500,334=>722,335=>500,336=>722,337=>500,
-340=>611,341=>389,342=>611,343=>389,344=>611,345=>389,346=>500,347=>389,348=>500,349=>389,
-350=>500,351=>389,354=>556,355=>278,356=>556,357=>278,358=>556,359=>278,360=>722,361=>500,
-362=>722,363=>500,364=>722,365=>500,366=>722,367=>500,368=>722,369=>500,370=>722,371=>500,
-372=>833,373=>667,374=>556,375=>444,377=>556,378=>389,379=>556,380=>389,383=>278,384=>500,
-385=>781,386=>610,387=>551,388=>611,389=>549,390=>667,391=>866,392=>703,393=>722,394=>892,
-395=>682,396=>500,397=>520,398=>611,399=>722,400=>518,401=>611,403=>863,404=>611,405=>728,
-406=>278,407=>333,408=>792,409=>444,410=>278,411=>480,412=>900,413=>779,414=>500,415=>722,
-416=>932,417=>608,418=>908,419=>722,420=>772,421=>500,422=>611,423=>500,424=>389,425=>657,
-426=>461,427=>313,428=>556,429=>335,430=>556,431=>948,432=>721,433=>747,434=>755,435=>636,
-436=>549,437=>556,438=>389,439=>525,440=>556,441=>424,442=>416,443=>500,444=>615,445=>439,
-446=>389,447=>500,448=>275,449=>500,450=>600,451=>333,452=>1278,453=>1111,454=>889,455=>1000,
-456=>834,457=>556,458=>1101,459=>935,460=>778,461=>611,462=>500,463=>339,464=>278,465=>722,
-466=>500,467=>722,468=>500,469=>722,470=>500,471=>722,472=>500,473=>722,474=>500,475=>722,
-476=>500,477=>444,478=>611,479=>500,480=>611,481=>500,482=>889,483=>667,484=>722,485=>500,
-486=>722,487=>500,488=>652,489=>444,490=>730,491=>500,492=>730,493=>500,494=>525,495=>446,
-496=>278,497=>1278,498=>1111,499=>889,500=>817,501=>595,502=>944,503=>607,504=>657,505=>500,
-506=>611,507=>500,508=>889,509=>667,510=>722,511=>500,512=>611,513=>500,514=>611,515=>500,
-516=>604,517=>444,518=>604,519=>444,520=>339,521=>278,522=>339,523=>278,524=>722,525=>500,
-526=>722,527=>500,528=>616,529=>389,530=>616,531=>389,532=>722,533=>500,534=>722,535=>500,
-536=>500,537=>389,538=>556,539=>278,540=>424,541=>455,542=>722,543=>500,544=>781,545=>588,
-546=>568,547=>468,548=>611,549=>444,550=>611,551=>500,552=>604,553=>444,554=>722,555=>500,
-556=>722,557=>500,558=>722,559=>500,560=>722,561=>500,562=>556,563=>444,564=>405,565=>597,
-566=>377,567=>278,568=>775,569=>767,570=>722,571=>667,572=>444,573=>611,574=>611,575=>389,
-576=>444,577=>444,578=>444,579=>667,580=>750,581=>697,582=>611,583=>444,584=>389,585=>278,
-586=>796,587=>590,588=>667,589=>333,590=>722,591=>500,592=>500,593=>564,594=>564,595=>500,
-596=>444,597=>444,598=>500,599=>697,600=>444,601=>444,602=>722,603=>416,604=>426,605=>674,
-606=>454,607=>278,608=>640,609=>500,610=>484,611=>500,612=>582,613=>500,614=>500,615=>500,
-616=>278,617=>278,618=>278,619=>278,620=>278,621=>278,622=>556,623=>722,624=>722,625=>716,
-626=>500,627=>500,628=>500,629=>500,630=>668,631=>693,632=>640,633=>389,634=>389,635=>333,
-636=>389,637=>333,638=>333,639=>333,640=>487,641=>487,642=>389,643=>278,644=>500,645=>333,
-646=>500,647=>278,648=>278,649=>500,650=>517,651=>500,652=>444,653=>667,654=>444,655=>510,
-656=>524,657=>444,658=>446,659=>456,660=>444,661=>444,662=>444,663=>444,664=>722,665=>442,
-666=>454,667=>665,668=>585,669=>347,670=>444,671=>443,672=>500,673=>444,674=>444,675=>798,
-676=>795,677=>805,678=>554,679=>561,680=>678,681=>614,682=>554,683=>554,684=>500,685=>500,
-686=>611,687=>611,688=>300,689=>300,690=>278,691=>278,692=>278,693=>309,694=>306,695=>432,
-696=>310,697=>250,698=>408,699=>333,700=>500,701=>500,702=>333,703=>333,704=>258,705=>258,
-706=>374,707=>374,708=>383,709=>383,711=>333,712=>250,713=>333,714=>333,715=>333,716=>250,
-717=>333,718=>333,719=>333,720=>278,721=>278,722=>333,723=>333,724=>333,725=>333,726=>333,
-727=>333,728=>333,729=>333,730=>333,731=>333,733=>333,734=>336,735=>352,736=>311,737=>200,
-738=>243,739=>328,740=>300,741=>460,742=>460,743=>460,744=>460,745=>460,746=>477,747=>475,
-748=>339,749=>330,750=>444,751=>383,752=>383,753=>294,754=>294,755=>327,756=>261,757=>437,
-758=>437,759=>333,760=>278,761=>175,762=>175,763=>175,764=>175,765=>337,766=>337,767=>326,
-768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,
-778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,
-788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,
-798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,
-808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,
-818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,
-828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,
-838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,
-848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,
-858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,
-868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,
-878=>0,879=>0,884=>199,885=>199,890=>332,894=>333,900=>257,901=>333,902=>661,903=>250,
-904=>841,905=>950,906=>559,908=>815,910=>877,911=>899,912=>270,913=>661,914=>581,915=>611,
-916=>660,917=>611,918=>606,919=>742,920=>672,921=>333,922=>667,923=>641,924=>833,925=>657,
-926=>678,927=>682,928=>749,929=>611,931=>657,932=>596,933=>676,934=>722,935=>611,936=>812,
-937=>743,938=>333,939=>696,940=>564,941=>416,942=>506,943=>270,944=>504,945=>564,946=>509,
-947=>496,948=>520,949=>416,950=>398,951=>506,952=>533,953=>270,954=>491,955=>488,956=>501,
-957=>486,958=>430,959=>510,960=>608,961=>506,962=>423,963=>524,964=>425,965=>504,966=>618,
-967=>459,968=>693,969=>693,970=>270,971=>504,972=>510,973=>504,974=>693,976=>534,977=>587,
-978=>620,979=>820,980=>620,981=>640,982=>684,983=>504,984=>555,985=>534,986=>548,987=>496,
-988=>610,989=>470,990=>633,991=>410,992=>687,993=>544,1008=>534,1009=>534,1010=>485,1011=>278,
-1012=>722,1013=>280,1014=>280,1015=>610,1016=>500,1017=>704,1018=>832,1019=>703,1020=>533,1021=>704,
-1022=>704,1023=>704,1024=>604,1025=>604,1026=>668,1027=>611,1028=>666,1029=>500,1030=>339,1031=>339,
-1032=>444,1033=>972,1034=>977,1035=>703,1036=>664,1037=>720,1038=>728,1039=>728,1040=>611,1041=>610,
-1042=>611,1043=>611,1044=>682,1045=>604,1046=>976,1047=>592,1048=>720,1049=>720,1050=>664,1051=>719,
-1052=>828,1053=>722,1054=>722,1055=>749,1056=>603,1057=>667,1058=>556,1059=>728,1060=>722,1061=>611,
-1062=>728,1063=>666,1064=>997,1065=>1005,1066=>710,1067=>891,1068=>594,1069=>632,1070=>1024,1071=>696,
-1072=>500,1073=>500,1074=>442,1075=>344,1076=>503,1077=>440,1078=>932,1079=>402,1080=>500,1081=>500,
-1082=>491,1083=>487,1084=>624,1085=>500,1086=>500,1087=>500,1088=>500,1089=>441,1090=>722,1091=>500,
-1092=>741,1093=>444,1094=>500,1095=>500,1096=>750,1097=>750,1098=>545,1099=>683,1100=>433,1101=>432,
-1102=>700,1103=>503,1104=>440,1105=>440,1106=>500,1107=>344,1108=>442,1109=>389,1110=>278,1111=>278,
-1112=>278,1113=>686,1114=>696,1115=>500,1116=>491,1117=>500,1118=>500,1119=>500,1120=>964,1121=>684,
-1122=>708,1123=>690,1124=>975,1125=>646,1126=>800,1127=>628,1128=>1096,1129=>795,1130=>952,1131=>730,
-1132=>1260,1133=>892,1134=>574,1135=>400,1136=>812,1137=>694,1138=>721,1139=>500,1140=>745,1141=>533,
-1142=>745,1143=>533,1144=>1193,1145=>967,1146=>868,1147=>602,1148=>964,1149=>684,1150=>964,1151=>684,
-1152=>548,1153=>443,1154=>320,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,
-1162=>720,1163=>500,1164=>602,1165=>433,1166=>611,1167=>500,1168=>552,1169=>424,1170=>593,1171=>424,
-1172=>611,1173=>432,1174=>992,1175=>932,1176=>592,1177=>396,1178=>681,1179=>491,1180=>700,1181=>532,
-1182=>664,1183=>491,1184=>776,1185=>690,1186=>729,1187=>500,1188=>908,1189=>660,1190=>1034,1191=>694,
-1192=>667,1193=>531,1194=>666,1195=>443,1196=>556,1197=>775,1198=>556,1199=>574,1200=>555,1201=>574,
-1202=>660,1203=>443,1204=>798,1205=>581,1206=>674,1207=>500,1208=>690,1209=>516,1210=>640,1211=>500,
-1212=>785,1213=>558,1214=>787,1215=>559,1216=>339,1217=>976,1218=>932,1219=>664,1220=>491,1221=>719,
-1222=>487,1223=>722,1224=>500,1225=>722,1226=>500,1227=>666,1228=>500,1229=>828,1230=>624,1231=>339,
-1232=>611,1233=>500,1234=>611,1235=>500,1236=>889,1237=>667,1238=>604,1239=>444,1240=>722,1241=>444,
-1242=>722,1243=>444,1244=>976,1245=>932,1246=>592,1247=>402,1248=>525,1249=>446,1250=>720,1251=>500,
-1252=>720,1253=>500,1254=>722,1255=>500,1256=>722,1257=>500,1258=>722,1259=>500,1260=>632,1261=>432,
-1262=>728,1263=>500,1264=>728,1265=>500,1266=>728,1267=>500,1268=>666,1269=>500,1270=>611,1271=>424,
-1272=>891,1273=>683,1296=>532,1297=>409,1298=>719,1299=>487,1306=>722,1307=>500,1308=>833,1309=>656,
-1310=>664,1311=>491,1425=>0,1426=>0,1427=>0,1428=>0,1429=>0,1430=>0,1431=>418,1432=>0,
-1433=>0,1434=>0,1435=>0,1436=>0,1437=>0,1438=>0,1439=>0,1440=>0,1441=>0,1442=>0,
-1443=>0,1444=>0,1445=>0,1446=>0,1447=>0,1448=>0,1449=>0,1450=>0,1451=>0,1452=>0,
-1453=>0,1454=>0,1455=>0,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,
-1463=>0,1464=>0,1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>440,1471=>0,1472=>126,
-1473=>0,1474=>0,1475=>418,1476=>0,1477=>0,1478=>350,1479=>0,1488=>537,1489=>537,1490=>350,
-1491=>537,1492=>537,1493=>350,1494=>350,1495=>537,1496=>537,1497=>350,1498=>537,1499=>537,1500=>537,
-1501=>537,1502=>537,1503=>350,1504=>350,1505=>537,1506=>537,1507=>537,1508=>537,1509=>537,1510=>537,
-1511=>537,1512=>537,1513=>537,1514=>537,1520=>537,1521=>537,1522=>537,1523=>396,1524=>396,2404=>318,
-2405=>446,2433=>0,2434=>300,2435=>312,2437=>594,2438=>776,2439=>469,2440=>513,2441=>535,2442=>561,
-2443=>604,2444=>481,2447=>580,2448=>604,2451=>540,2452=>620,2453=>570,2454=>485,2455=>484,2456=>471,
-2457=>457,2458=>408,2459=>452,2460=>591,2461=>551,2462=>771,2463=>414,2464=>404,2465=>522,2466=>415,
-2467=>450,2468=>551,2469=>477,2470=>478,2471=>449,2472=>448,2474=>535,2475=>611,2476=>443,2477=>534,
-2478=>492,2479=>474,2480=>442,2482=>542,2486=>507,2487=>467,2488=>523,2489=>419,2492=>0,2493=>419,
-2494=>202,2495=>189,2496=>202,2497=>0,2498=>0,2499=>0,2500=>0,2503=>294,2504=>289,2507=>774,
-2508=>825,2509=>0,2510=>356,2519=>219,2524=>523,2525=>420,2527=>469,2528=>604,2529=>481,2530=>0,
-2531=>0,2534=>500,2535=>437,2536=>479,2537=>507,2538=>497,2539=>500,2540=>482,2541=>503,2542=>517,
-2543=>481,2544=>443,2545=>443,2546=>429,2547=>383,2548=>432,2549=>478,2550=>539,2551=>158,2552=>365,
-2553=>280,2554=>357,3585=>512,3586=>453,3587=>512,3588=>519,3589=>529,3590=>561,3591=>411,3592=>437,
-3593=>552,3594=>452,3595=>509,3596=>707,3597=>707,3598=>574,3599=>570,3600=>406,3601=>607,3602=>686,
-3603=>749,3604=>494,3605=>497,3606=>509,3607=>552,3608=>461,3609=>565,3610=>527,3611=>523,3612=>556,
-3613=>551,3614=>570,3615=>570,3616=>571,3617=>531,3618=>493,3619=>433,3620=>513,3621=>491,3622=>571,
-3623=>439,3624=>510,3625=>594,3626=>484,3627=>554,3628=>616,3629=>493,3630=>496,3631=>417,3632=>392,
-3633=>0,3634=>366,3635=>366,3636=>0,3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0,
-3647=>662,3648=>297,3649=>544,3650=>298,3651=>329,3652=>328,3653=>326,3654=>488,3655=>0,3656=>0,
-3657=>0,3658=>0,3659=>0,3660=>0,3661=>0,3662=>0,3663=>725,3664=>624,3665=>624,3666=>624,
-3667=>624,3668=>624,3669=>624,3670=>624,3671=>624,3672=>624,3673=>624,3674=>645,3675=>872,4256=>453,
-4257=>448,4258=>546,4259=>619,4260=>478,4261=>481,4262=>459,4263=>707,4264=>467,4265=>471,4266=>842,
-4267=>464,4268=>443,4269=>707,4270=>460,4271=>465,4272=>686,4273=>440,4274=>550,4275=>561,4276=>580,
-4277=>467,4278=>630,4279=>466,4280=>517,4281=>456,4282=>502,4283=>464,4284=>534,4285=>440,4286=>443,
-4287=>522,4288=>460,4289=>463,4290=>536,4291=>455,4292=>468,4293=>449,4304=>454,4305=>452,4306=>544,
-4307=>629,4308=>451,4309=>452,4310=>452,4311=>702,4312=>451,4313=>452,4314=>820,4315=>451,4316=>453,
-4317=>695,4318=>449,4319=>448,4320=>694,4321=>501,4322=>544,4323=>517,4324=>560,4325=>450,4326=>627,
-4327=>452,4328=>491,4329=>452,4330=>485,4331=>452,4332=>485,4333=>443,4334=>500,4335=>582,4336=>455,
-4337=>451,4338=>480,4339=>414,4340=>453,4341=>418,4345=>544,4347=>410,5024=>711,5025=>678,5026=>604,
-5027=>667,5028=>796,5029=>301,5030=>516,5031=>544,5032=>457,5033=>716,5034=>703,5035=>383,5036=>628,
-5037=>709,5038=>455,5039=>601,5040=>472,5041=>574,5042=>730,5043=>939,5044=>498,5045=>528,5046=>667,
-5047=>891,5048=>505,5049=>792,5050=>957,5051=>725,5052=>595,5053=>733,5054=>698,5055=>638,5056=>720,
-5057=>732,5058=>624,5059=>638,5060=>565,5061=>903,5062=>655,5063=>681,5064=>675,5065=>949,5066=>683,
-5067=>547,5068=>693,5069=>732,5070=>529,5071=>569,5072=>536,5073=>677,5074=>631,5075=>382,5076=>973,
-5077=>543,5078=>607,5079=>652,5080=>652,5081=>693,5082=>514,5083=>803,5084=>658,5085=>597,5086=>627,
-5087=>659,5088=>679,5089=>706,5090=>563,5091=>618,5092=>767,5093=>776,5094=>731,5095=>492,5096=>808,
-5097=>823,5098=>796,5099=>689,5100=>716,5101=>518,5102=>521,5103=>719,5104=>563,5105=>776,5106=>634,
-5107=>822,5108=>621,7680=>611,7681=>500,7682=>611,7683=>500,7684=>611,7685=>500,7686=>611,7687=>500,
-7688=>667,7689=>444,7690=>722,7691=>500,7692=>722,7693=>500,7694=>722,7695=>500,7696=>722,7697=>500,
-7698=>722,7699=>500,7700=>611,7701=>444,7702=>611,7703=>444,7704=>604,7705=>444,7706=>604,7707=>444,
-7708=>604,7709=>444,7710=>611,7711=>278,7712=>722,7713=>500,7714=>722,7715=>500,7716=>722,7717=>500,
-7718=>722,7719=>500,7720=>722,7721=>500,7722=>722,7723=>500,7724=>339,7725=>278,7726=>333,7727=>278,
-7728=>652,7729=>444,7730=>652,7731=>444,7732=>652,7733=>444,7734=>556,7735=>278,7736=>556,7737=>278,
-7738=>556,7739=>278,7740=>556,7741=>278,7742=>828,7743=>722,7744=>828,7745=>722,7746=>828,7747=>722,
-7748=>657,7749=>500,7750=>657,7751=>500,7752=>657,7753=>500,7754=>657,7755=>500,7756=>722,7757=>500,
-7758=>722,7759=>500,7760=>722,7761=>500,7762=>722,7763=>500,7764=>603,7765=>500,7766=>603,7767=>500,
-7768=>616,7769=>389,7770=>616,7771=>389,7772=>616,7773=>389,7774=>616,7775=>389,7776=>500,7777=>389,
-7778=>500,7779=>389,7780=>500,7781=>389,7782=>500,7783=>389,7784=>500,7785=>389,7786=>556,7787=>278,
-7788=>556,7789=>278,7790=>556,7791=>278,7792=>556,7793=>278,7794=>722,7795=>500,7796=>722,7797=>500,
-7798=>722,7799=>500,7800=>722,7801=>500,7802=>722,7803=>500,7804=>611,7805=>444,7806=>611,7807=>444,
-7808=>833,7809=>667,7810=>833,7811=>667,7812=>833,7813=>667,7814=>833,7815=>667,7816=>833,7817=>667,
-7818=>611,7819=>444,7820=>611,7821=>444,7822=>556,7823=>444,7824=>556,7825=>389,7826=>556,7827=>389,
-7828=>556,7829=>389,7830=>500,7831=>278,7832=>667,7833=>444,7834=>444,7835=>278,7840=>611,7841=>500,
-7842=>611,7843=>500,7844=>611,7845=>500,7846=>611,7847=>500,7848=>611,7849=>500,7850=>611,7851=>500,
-7852=>611,7853=>500,7854=>611,7855=>500,7856=>611,7857=>500,7858=>611,7859=>500,7860=>611,7861=>500,
-7862=>611,7863=>500,7864=>604,7865=>444,7866=>604,7867=>444,7868=>604,7869=>444,7870=>611,7871=>444,
-7872=>611,7873=>444,7874=>611,7875=>444,7876=>611,7877=>444,7878=>604,7879=>444,7880=>339,7881=>278,
-7882=>339,7883=>278,7884=>722,7885=>500,7886=>722,7887=>500,7888=>722,7889=>500,7890=>722,7891=>500,
-7892=>722,7893=>500,7894=>722,7895=>500,7896=>722,7897=>500,7898=>932,7899=>608,7900=>932,7901=>608,
-7902=>807,7903=>585,7904=>932,7905=>608,7906=>932,7907=>608,7908=>722,7909=>500,7910=>722,7911=>500,
-7912=>948,7913=>721,7914=>948,7915=>721,7916=>807,7917=>585,7918=>948,7919=>721,7920=>948,7921=>721,
-7922=>556,7923=>444,7924=>556,7925=>444,7926=>556,7927=>444,7928=>556,7929=>444,7936=>564,7937=>564,
-7938=>564,7939=>564,7940=>564,7941=>564,7942=>564,7943=>564,7944=>661,7945=>661,7946=>794,7947=>811,
-7948=>792,7949=>803,7950=>661,7951=>648,7952=>416,7953=>416,7954=>416,7955=>416,7956=>416,7957=>416,
-7960=>740,7961=>795,7962=>923,7963=>940,7964=>996,7965=>986,7968=>506,7969=>506,7970=>506,7971=>506,
-7972=>506,7973=>506,7974=>506,7975=>506,7976=>879,7977=>901,7978=>1036,7979=>1035,7980=>1099,7981=>1100,
-7982=>954,7983=>959,7984=>270,7985=>270,7986=>267,7987=>267,7988=>267,7989=>267,7990=>267,7991=>267,
-7992=>490,7993=>529,7994=>655,7995=>654,7996=>705,7997=>713,7998=>570,7999=>573,8000=>558,8001=>510,
-8002=>510,8003=>510,8004=>510,8005=>510,8008=>797,8009=>867,8010=>1026,8011=>1022,8012=>993,8013=>1017,
-8016=>504,8017=>504,8018=>504,8019=>504,8020=>504,8021=>504,8022=>504,8023=>504,8025=>916,8027=>1062,
-8029=>1100,8031=>933,8032=>693,8033=>693,8034=>693,8035=>693,8036=>693,8037=>693,8038=>693,8039=>693,
-8040=>852,8041=>909,8042=>1072,8043=>1072,8044=>1032,8045=>1047,8046=>930,8047=>946,8048=>564,8049=>564,
-8050=>416,8051=>416,8052=>506,8053=>506,8054=>270,8055=>270,8056=>510,8057=>510,8058=>504,8059=>504,
-8060=>693,8061=>693,8064=>564,8065=>564,8066=>564,8067=>564,8068=>564,8069=>564,8070=>564,8071=>564,
-8072=>821,8073=>854,8074=>998,8075=>1011,8076=>992,8077=>1001,8078=>866,8079=>858,8080=>506,8081=>506,
-8082=>506,8083=>506,8084=>506,8085=>506,8086=>506,8087=>506,8088=>999,8089=>1044,8090=>1179,8091=>1165,
-8092=>1227,8093=>1229,8094=>1080,8095=>1085,8096=>693,8097=>693,8098=>693,8099=>693,8100=>693,8101=>693,
-8102=>693,8103=>693,8104=>1037,8105=>1113,8106=>1264,8107=>1264,8108=>1219,8109=>1241,8110=>1120,8111=>1132,
-8112=>564,8113=>564,8114=>564,8115=>564,8116=>564,8118=>564,8119=>564,8120=>661,8121=>661,8122=>661,
-8123=>661,8124=>831,8125=>192,8126=>332,8127=>500,8128=>500,8129=>534,8130=>506,8131=>506,8132=>506,
-8134=>506,8135=>506,8136=>611,8137=>816,8138=>889,8139=>908,8140=>881,8141=>500,8142=>500,8143=>500,
-8144=>270,8145=>270,8146=>270,8147=>270,8150=>270,8151=>270,8152=>333,8153=>333,8154=>497,8155=>521,
-8157=>500,8158=>500,8159=>500,8160=>504,8161=>504,8162=>504,8163=>504,8164=>506,8165=>506,8166=>504,
-8167=>504,8168=>676,8169=>676,8170=>905,8171=>901,8172=>783,8173=>333,8174=>333,8175=>500,8178=>693,
-8179=>693,8180=>693,8182=>693,8183=>693,8184=>907,8185=>833,8186=>963,8187=>875,8188=>952,8189=>500,
-8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>500,8200=>250,
-8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>500,
-8213=>1000,8214=>293,8215=>465,8219=>250,8223=>444,8227=>350,8228=>250,8229=>500,8231=>250,8232=>0,
-8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>250,8241=>1601,8242=>247,8243=>411,
-8244=>611,8245=>220,8246=>440,8247=>660,8248=>469,8251=>629,8252=>666,8253=>500,8254=>500,8255=>953,
-8256=>1000,8257=>314,8258=>931,8259=>333,8260=>167,8261=>480,8262=>480,8263=>1000,8264=>833,8265=>833,
-8266=>500,8267=>453,8268=>453,8269=>450,8270=>500,8271=>278,8272=>882,8273=>500,8274=>497,8275=>500,
-8276=>953,8277=>512,8278=>410,8279=>855,8280=>620,8281=>620,8282=>179,8283=>621,8284=>564,8285=>179,
-8286=>179,8287=>111,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>300,8305=>235,8308=>300,
-8309=>300,8310=>300,8311=>300,8312=>300,8313=>300,8314=>300,8315=>300,8316=>300,8317=>216,8318=>216,
-8319=>318,8320=>300,8321=>250,8322=>300,8323=>300,8324=>300,8325=>300,8326=>300,8327=>300,8328=>300,
-8329=>300,8330=>300,8331=>300,8332=>300,8333=>216,8334=>216,8352=>698,8353=>667,8354=>667,8355=>611,
-8356=>500,8357=>722,8358=>667,8359=>988,8360=>953,8361=>833,8362=>869,8363=>512,8365=>722,8366=>611,
-8369=>589,8370=>619,8371=>722,8372=>556,8373=>611,8400=>0,8401=>0,8402=>0,8403=>0,8404=>0,
-8405=>0,8406=>0,8407=>0,8408=>0,8409=>0,8410=>0,8411=>0,8412=>0,8413=>0,8414=>0,
-8415=>0,8416=>0,8417=>0,8418=>0,8419=>0,8420=>0,8421=>0,8422=>0,8423=>0,8424=>0,
-8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8432=>0,8448=>664,8449=>665,
-8451=>954,8453=>693,8454=>787,8457=>822,8462=>500,8463=>500,8468=>777,8470=>823,8471=>760,8478=>616,
-8479=>610,8480=>879,8481=>1156,8483=>611,8486=>743,8487=>743,8489=>286,8490=>722,8491=>722,8494=>533,
-8498=>556,8501=>537,8502=>537,8503=>350,8504=>537,8506=>906,8507=>1155,8523=>778,8525=>856,8526=>500,
-8531=>750,8532=>750,8533=>750,8534=>750,8535=>750,8536=>750,8537=>750,8538=>750,8539=>750,8540=>750,
-8541=>750,8542=>750,8543=>750,8544=>339,8545=>678,8546=>1017,8547=>950,8548=>611,8549=>950,8550=>1289,
-8551=>1628,8552=>950,8553=>611,8554=>950,8555=>1289,8556=>556,8557=>667,8558=>722,8559=>828,8560=>278,
-8561=>556,8562=>834,8563=>722,8564=>444,8565=>722,8566=>1000,8567=>1278,8568=>722,8569=>444,8570=>722,
-8571=>1000,8572=>278,8573=>444,8574=>500,8575=>722,8592=>964,8593=>499,8594=>964,8595=>499,8706=>494,
-8710=>612,8721=>713,8722=>675,8723=>675,8725=>750,8730=>549,8734=>677,8747=>416,8748=>750,8749=>1083,
-8750=>722,8751=>750,8800=>564,8804=>675,8805=>675,8992=>686,8993=>686,9251=>500,9674=>494,9676=>791,
-9824=>626,9825=>694,9826=>595,9827=>776,9828=>626,9829=>694,9830=>595,9831=>776,9833=>333,9834=>555,
-9835=>722,9836=>722,9837=>415,9838=>377,9839=>402,11799=>333,64256=>526,64257=>500,64258=>500,64259=>747,
-64260=>748,64262=>665,64285=>350,64286=>0,64287=>537,64288=>537,64297=>564,64298=>537,64299=>537,64300=>537,
-64301=>537,64302=>537,64303=>537,64304=>537,64305=>537,64306=>350,64307=>537,64308=>537,64309=>350,64310=>350,
-64312=>537,64313=>350,64314=>537,64315=>537,64316=>537,64318=>537,64320=>350,64321=>537,64323=>537,64324=>537,
-64326=>537,64327=>537,64328=>537,64329=>537,64330=>537,64331=>350,64332=>537,64333=>537,64334=>537,64335=>537,
-65533=>788);
-$enc='';
+$dw=700;
$diff='';
+$originalsize=691448;
+$enc='';
$file='freeserifi.z';
$ctg='freeserifi.ctg.z';
-$originalsize=629968;
-?>
\ No newline at end of file
+$desc=array('Flags'=>96,'FontBBox'=>'[-879 -434 1558 900]','ItalicAngle'=>-16.32768,'Ascent'=>900,'Descent'=>-300,'Leading'=>90,'CapHeight'=>653,'XHeight'=>452,'StemV'=>70,'StemH'=>30,'AvgWidth'=>402,'MaxWidth'=>1601,'MissingWidth'=>700);
+$cw=array(0=>0,1=>700,2=>700,3=>700,4=>700,5=>700,6=>700,7=>700,8=>0,9=>600,10=>700,11=>700,12=>700,13=>600,14=>700,15=>700,16=>700,17=>700,18=>700,19=>700,20=>700,21=>700,22=>700,23=>700,24=>700,25=>700,26=>700,27=>700,28=>700,29=>0,30=>700,31=>700,32=>250,33=>333,34=>420,35=>500,36=>500,37=>833,38=>778,39=>214,40=>333,41=>333,42=>500,43=>675,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>675,61=>675,62=>675,63=>500,64=>920,65=>611,66=>611,67=>667,68=>722,69=>604,70=>611,71=>722,72=>722,73=>339,74=>444,75=>652,76=>556,77=>828,78=>657,79=>722,80=>603,81=>722,82=>616,83=>500,84=>556,85=>722,86=>611,87=>833,88=>611,89=>556,90=>556,91=>389,92=>278,93=>389,94=>422,95=>500,96=>333,97=>500,98=>500,99=>444,100=>500,101=>444,102=>278,103=>500,104=>500,105=>278,106=>278,107=>444,108=>278,109=>722,110=>500,111=>500,112=>500,113=>500,114=>389,115=>389,116=>278,117=>500,118=>444,119=>667,120=>444,121=>444,122=>389,123=>400,124=>275,125=>400,126=>541,127=>700,128=>611,129=>611,130=>667,131=>611,132=>667,133=>722,134=>722,135=>500,136=>500,137=>500,138=>500,139=>500,140=>500,141=>444,142=>444,143=>444,144=>444,145=>444,146=>278,147=>278,148=>278,149=>278,150=>500,151=>500,152=>500,153=>500,154=>500,155=>500,156=>500,157=>500,158=>500,159=>500,160=>250,161=>389,162=>500,163=>500,164=>500,165=>500,166=>275,167=>500,168=>333,169=>760,170=>276,171=>444,172=>675,173=>333,174=>760,175=>333,176=>400,177=>675,178=>300,179=>300,180=>333,181=>500,182=>523,183=>250,184=>333,185=>250,186=>310,187=>444,188=>750,189=>750,190=>750,191=>500,192=>611,193=>611,194=>611,195=>611,196=>611,197=>611,198=>889,199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333,208=>722,209=>667,210=>722,211=>722,212=>722,213=>722,214=>722,215=>675,216=>722,217=>722,218=>722,219=>722,220=>722,221=>556,222=>611,223=>500,224=>500,225=>500,226=>500,227=>500,228=>500,229=>500,230=>673,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>500,242=>500,243=>500,244=>500,245=>500,246=>500,247=>675,248=>500,249=>500,250=>500,251=>500,252=>500,253=>444,254=>500,255=>444,256=>611,257=>500,258=>611,259=>500,260=>611,261=>500,262=>667,263=>444,264=>667,265=>444,266=>667,267=>444,268=>667,269=>444,270=>722,271=>611,272=>722,273=>500,274=>611,275=>444,276=>611,277=>444,278=>611,279=>444,280=>611,281=>444,282=>611,283=>444,284=>722,285=>500,286=>722,287=>500,288=>722,289=>500,290=>722,291=>500,292=>722,293=>500,294=>722,295=>500,296=>333,297=>278,298=>333,299=>278,300=>333,301=>278,302=>333,303=>278,304=>333,305=>278,306=>707,307=>506,308=>444,309=>278,310=>667,311=>444,312=>444,313=>556,314=>278,315=>556,316=>278,317=>556,318=>361,319=>556,320=>278,321=>556,322=>278,323=>667,324=>500,325=>667,326=>500,327=>667,328=>500,329=>550,330=>721,331=>500,332=>722,333=>500,334=>722,335=>500,336=>722,337=>500,338=>944,339=>694,340=>611,341=>389,342=>611,343=>389,344=>611,345=>389,346=>500,347=>389,348=>500,349=>389,350=>500,351=>389,352=>500,353=>389,354=>556,355=>278,356=>556,357=>447,358=>556,359=>278,360=>722,361=>500,362=>722,363=>500,364=>722,365=>500,366=>722,367=>500,368=>722,369=>500,370=>722,371=>500,372=>833,373=>667,374=>556,375=>444,376=>556,377=>556,378=>389,379=>556,380=>389,381=>556,382=>389,383=>278,384=>500,385=>781,386=>610,387=>551,388=>611,389=>549,390=>667,391=>866,392=>703,393=>722,394=>892,395=>682,396=>500,397=>520,398=>611,399=>722,400=>518,401=>611,402=>278,403=>863,404=>611,405=>728,406=>278,407=>333,408=>792,409=>444,410=>278,411=>480,412=>900,413=>779,414=>500,415=>722,416=>759,417=>546,418=>908,419=>722,420=>772,421=>500,422=>611,423=>500,424=>389,425=>657,426=>461,427=>313,428=>556,429=>335,430=>556,431=>778,432=>584,433=>747,434=>755,435=>636,436=>549,437=>556,438=>389,439=>525,440=>558,441=>424,442=>416,443=>500,444=>615,445=>439,446=>389,447=>500,448=>275,449=>500,450=>600,451=>333,452=>1268,453=>1091,454=>869,455=>1000,456=>824,457=>506,458=>1101,459=>895,460=>748,461=>611,462=>500,463=>339,464=>278,465=>722,466=>500,467=>722,468=>500,469=>722,470=>500,471=>722,472=>500,473=>722,474=>500,475=>722,476=>500,477=>444,478=>611,479=>500,480=>611,481=>500,482=>889,483=>673,484=>722,485=>500,486=>722,487=>500,488=>652,489=>444,490=>730,491=>500,492=>730,493=>500,494=>525,495=>446,496=>278,497=>1258,498=>1091,499=>859,500=>817,501=>595,502=>1024,503=>607,504=>657,505=>500,506=>611,507=>500,508=>889,509=>673,510=>722,511=>500,512=>611,513=>500,514=>611,515=>500,516=>604,517=>444,518=>604,519=>444,520=>339,521=>278,522=>339,523=>278,524=>722,525=>500,526=>722,527=>500,528=>616,529=>389,530=>616,531=>389,532=>722,533=>500,534=>722,535=>500,536=>500,537=>389,538=>556,539=>278,540=>424,541=>465,542=>722,543=>500,544=>781,545=>588,546=>568,547=>468,548=>611,549=>444,550=>611,551=>500,552=>604,553=>444,554=>722,555=>500,556=>722,557=>500,558=>722,559=>500,560=>722,561=>500,562=>556,563=>444,564=>405,565=>597,566=>377,567=>278,568=>775,569=>767,570=>722,571=>667,572=>444,573=>611,574=>611,575=>389,576=>444,577=>444,578=>444,579=>667,580=>750,581=>697,582=>611,583=>444,584=>389,585=>278,586=>796,587=>590,588=>667,589=>333,590=>722,591=>500,592=>500,593=>564,594=>564,595=>500,596=>444,597=>444,598=>524,599=>559,600=>444,601=>444,602=>722,603=>416,604=>426,605=>674,606=>454,607=>353,608=>624,609=>500,610=>452,611=>500,612=>582,613=>500,614=>500,615=>500,616=>278,617=>306,618=>278,619=>278,620=>278,621=>364,622=>556,623=>722,624=>778,625=>778,626=>614,627=>599,628=>500,629=>500,630=>668,631=>693,632=>640,633=>389,634=>389,635=>444,636=>389,637=>333,638=>333,639=>333,640=>434,641=>456,642=>389,643=>278,644=>500,645=>466,646=>500,647=>278,648=>278,649=>500,650=>517,651=>500,652=>444,653=>667,654=>444,655=>510,656=>510,657=>432,658=>446,659=>439,660=>444,661=>444,662=>444,663=>444,664=>722,665=>402,666=>454,667=>665,668=>476,669=>347,670=>444,671=>363,672=>590,673=>444,674=>444,675=>798,676=>795,677=>805,678=>554,679=>561,680=>678,681=>614,682=>554,683=>554,684=>500,685=>500,686=>611,687=>716,688=>300,689=>300,690=>258,691=>278,692=>278,693=>309,694=>306,695=>432,696=>310,697=>250,698=>408,699=>333,700=>333,701=>333,702=>333,703=>333,704=>258,705=>258,706=>374,707=>374,708=>383,709=>383,710=>333,711=>333,712=>250,713=>333,714=>333,715=>333,716=>250,717=>333,718=>333,719=>333,720=>278,721=>278,722=>333,723=>333,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,731=>333,732=>333,733=>333,734=>336,735=>352,736=>311,737=>200,738=>243,739=>328,740=>300,741=>460,742=>460,743=>460,744=>460,745=>460,746=>477,747=>475,748=>339,749=>330,750=>444,751=>383,752=>383,753=>294,754=>294,755=>327,756=>261,757=>437,758=>437,759=>333,760=>278,761=>175,762=>175,763=>175,764=>175,765=>337,766=>337,767=>326,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,878=>0,879=>0,884=>199,885=>199,890=>332,894=>333,900=>257,901=>333,902=>661,903=>250,904=>841,905=>950,906=>559,908=>815,910=>877,911=>899,912=>270,913=>661,914=>581,915=>611,916=>660,917=>611,918=>606,919=>742,920=>672,921=>333,922=>667,923=>641,924=>833,925=>657,926=>678,927=>682,928=>749,929=>611,931=>657,932=>596,933=>676,934=>722,935=>611,936=>812,937=>743,938=>333,939=>696,940=>564,941=>416,942=>506,943=>270,944=>504,945=>564,946=>509,947=>496,948=>520,949=>416,950=>398,951=>506,952=>533,953=>270,954=>491,955=>488,956=>501,957=>486,958=>430,959=>510,960=>608,961=>506,962=>423,963=>524,964=>425,965=>504,966=>618,967=>459,968=>693,969=>693,970=>270,971=>504,972=>510,973=>504,974=>693,976=>534,977=>587,978=>620,979=>820,980=>620,981=>640,982=>684,983=>504,984=>555,985=>534,986=>548,987=>496,988=>610,989=>470,990=>633,991=>410,992=>687,993=>544,1008=>534,1009=>534,1010=>485,1011=>278,1012=>722,1013=>280,1014=>280,1015=>610,1016=>500,1017=>704,1018=>832,1019=>703,1020=>533,1021=>704,1022=>704,1023=>704,1024=>604,1025=>604,1026=>668,1027=>611,1028=>666,1029=>500,1030=>339,1031=>339,1032=>444,1033=>972,1034=>977,1035=>703,1036=>664,1037=>720,1038=>728,1039=>728,1040=>611,1041=>610,1042=>611,1043=>611,1044=>682,1045=>604,1046=>976,1047=>592,1048=>720,1049=>720,1050=>664,1051=>719,1052=>828,1053=>722,1054=>722,1055=>749,1056=>603,1057=>667,1058=>556,1059=>728,1060=>722,1061=>611,1062=>728,1063=>666,1064=>997,1065=>1005,1066=>710,1067=>891,1068=>594,1069=>632,1070=>1024,1071=>696,1072=>500,1073=>500,1074=>442,1075=>344,1076=>503,1077=>440,1078=>932,1079=>402,1080=>500,1081=>500,1082=>491,1083=>487,1084=>624,1085=>500,1086=>500,1087=>500,1088=>500,1089=>441,1090=>722,1091=>500,1092=>741,1093=>444,1094=>500,1095=>500,1096=>750,1097=>750,1098=>545,1099=>683,1100=>433,1101=>432,1102=>700,1103=>503,1104=>440,1105=>440,1106=>500,1107=>344,1108=>442,1109=>389,1110=>278,1111=>278,1112=>278,1113=>686,1114=>696,1115=>500,1116=>491,1117=>500,1118=>500,1119=>500,1120=>964,1121=>684,1122=>708,1123=>690,1124=>975,1125=>646,1126=>800,1127=>628,1128=>1096,1129=>795,1130=>952,1131=>730,1132=>1260,1133=>892,1134=>574,1135=>400,1136=>812,1137=>694,1138=>721,1139=>500,1140=>745,1141=>533,1142=>745,1143=>533,1144=>1193,1145=>967,1146=>868,1147=>602,1148=>964,1149=>684,1150=>964,1151=>684,1152=>548,1153=>443,1154=>320,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>720,1163=>500,1164=>602,1165=>433,1166=>611,1167=>500,1168=>552,1169=>424,1170=>593,1171=>424,1172=>611,1173=>432,1174=>992,1175=>932,1176=>592,1177=>396,1178=>681,1179=>491,1180=>700,1181=>532,1182=>664,1183=>491,1184=>776,1185=>690,1186=>729,1187=>500,1188=>908,1189=>660,1190=>1034,1191=>694,1192=>730,1193=>543,1194=>666,1195=>443,1196=>556,1197=>775,1198=>556,1199=>574,1200=>555,1201=>574,1202=>660,1203=>443,1204=>798,1205=>581,1206=>674,1207=>500,1208=>690,1209=>516,1210=>640,1211=>500,1212=>785,1213=>558,1214=>785,1215=>558,1216=>339,1217=>976,1218=>932,1219=>664,1220=>491,1221=>719,1222=>487,1223=>722,1224=>500,1225=>722,1226=>500,1227=>666,1228=>500,1229=>828,1230=>624,1231=>339,1232=>611,1233=>500,1234=>611,1235=>500,1236=>889,1237=>673,1238=>604,1239=>444,1240=>722,1241=>444,1242=>722,1243=>444,1244=>976,1245=>932,1246=>592,1247=>402,1248=>525,1249=>446,1250=>720,1251=>500,1252=>720,1253=>500,1254=>722,1255=>500,1256=>722,1257=>500,1258=>722,1259=>500,1260=>632,1261=>432,1262=>728,1263=>500,1264=>728,1265=>500,1266=>728,1267=>500,1268=>666,1269=>500,1270=>611,1271=>424,1272=>891,1273=>683,1296=>532,1297=>409,1298=>719,1299=>487,1306=>722,1307=>500,1308=>833,1309=>656,1310=>664,1311=>491,1329=>794,1330=>712,1331=>782,1332=>854,1333=>711,1334=>702,1335=>707,1336=>655,1337=>777,1338=>782,1339=>710,1340=>663,1341=>830,1342=>917,1343=>672,1344=>469,1345=>666,1346=>858,1347=>685,1348=>856,1349=>618,1350=>858,1351=>709,1352=>719,1353=>714,1354=>731,1355=>702,1356=>874,1357=>719,1358=>844,1359=>519,1360=>703,1361=>608,1362=>586,1363=>750,1364=>780,1365=>714,1366=>684,1369=>120,1370=>120,1371=>269,1372=>307,1373=>241,1374=>312,1375=>300,1377=>786,1378=>506,1379=>542,1380=>541,1381=>506,1382=>503,1383=>478,1384=>499,1385=>541,1386=>539,1387=>508,1388=>289,1389=>750,1390=>540,1391=>513,1392=>508,1393=>503,1394=>531,1395=>518,1396=>500,1397=>243,1398=>473,1399=>406,1400=>499,1401=>407,1402=>793,1403=>414,1404=>463,1405=>500,1406=>516,1407=>758,1408=>504,1409=>466,1410=>288,1411=>758,1412=>510,1413=>501,1414=>562,1415=>543,1417=>278,1418=>280,1425=>0,1426=>0,1427=>0,1428=>0,1429=>0,1430=>0,1431=>418,1432=>0,1433=>0,1434=>0,1435=>0,1436=>0,1437=>0,1438=>0,1439=>0,1440=>0,1441=>0,1442=>0,1443=>0,1444=>0,1445=>0,1446=>0,1447=>0,1448=>0,1449=>0,1450=>0,1451=>0,1452=>0,1453=>0,1454=>0,1455=>0,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>440,1471=>0,1472=>126,1473=>0,1474=>0,1475=>418,1476=>0,1477=>0,1478=>350,1479=>0,1488=>537,1489=>537,1490=>350,1491=>537,1492=>537,1493=>350,1494=>350,1495=>537,1496=>537,1497=>350,1498=>537,1499=>537,1500=>537,1501=>537,1502=>537,1503=>350,1504=>350,1505=>537,1506=>537,1507=>537,1508=>537,1509=>537,1510=>537,1511=>537,1512=>537,1513=>537,1514=>537,1520=>537,1521=>537,1522=>537,1523=>396,1524=>396,2404=>318,2405=>446,2433=>0,2434=>300,2435=>312,2437=>594,2438=>776,2439=>469,2440=>513,2441=>535,2442=>561,2443=>604,2444=>481,2447=>580,2448=>604,2451=>540,2452=>620,2453=>570,2454=>485,2455=>484,2456=>471,2457=>457,2458=>408,2459=>452,2460=>591,2461=>551,2462=>771,2463=>414,2464=>404,2465=>522,2466=>415,2467=>450,2468=>551,2469=>477,2470=>478,2471=>449,2472=>448,2474=>535,2475=>611,2476=>443,2477=>534,2478=>492,2479=>474,2480=>442,2482=>542,2486=>507,2487=>467,2488=>523,2489=>419,2492=>0,2493=>419,2494=>202,2495=>189,2496=>202,2497=>0,2498=>0,2499=>0,2500=>0,2503=>294,2504=>289,2507=>774,2508=>825,2509=>0,2510=>356,2519=>219,2524=>523,2525=>420,2527=>469,2528=>604,2529=>481,2530=>0,2531=>0,2534=>500,2535=>437,2536=>479,2537=>507,2538=>497,2539=>500,2540=>482,2541=>503,2542=>517,2543=>481,2544=>443,2545=>443,2546=>429,2547=>383,2548=>432,2549=>478,2550=>539,2551=>158,2552=>365,2553=>280,2554=>357,3585=>512,3586=>453,3587=>512,3588=>519,3589=>529,3590=>561,3591=>411,3592=>437,3593=>552,3594=>452,3595=>509,3596=>707,3597=>707,3598=>574,3599=>570,3600=>406,3601=>607,3602=>686,3603=>749,3604=>494,3605=>497,3606=>509,3607=>552,3608=>461,3609=>565,3610=>527,3611=>523,3612=>556,3613=>551,3614=>570,3615=>570,3616=>571,3617=>531,3618=>493,3619=>433,3620=>513,3621=>491,3622=>571,3623=>439,3624=>510,3625=>594,3626=>484,3627=>554,3628=>616,3629=>493,3630=>496,3631=>417,3632=>392,3633=>0,3634=>366,3635=>366,3636=>0,3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0,3647=>662,3648=>297,3649=>544,3650=>298,3651=>329,3652=>328,3653=>326,3654=>488,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,3660=>0,3661=>0,3662=>0,3663=>725,3664=>624,3665=>624,3666=>624,3667=>624,3668=>624,3669=>624,3670=>624,3671=>624,3672=>624,3673=>624,3674=>645,3675=>872,4256=>453,4257=>448,4258=>546,4259=>619,4260=>478,4261=>481,4262=>459,4263=>707,4264=>467,4265=>471,4266=>842,4267=>464,4268=>443,4269=>707,4270=>460,4271=>465,4272=>686,4273=>440,4274=>550,4275=>561,4276=>580,4277=>467,4278=>630,4279=>466,4280=>517,4281=>456,4282=>502,4283=>464,4284=>534,4285=>440,4286=>443,4287=>522,4288=>460,4289=>463,4290=>536,4291=>455,4292=>468,4293=>449,4304=>454,4305=>452,4306=>544,4307=>629,4308=>451,4309=>452,4310=>452,4311=>702,4312=>451,4313=>452,4314=>820,4315=>451,4316=>453,4317=>695,4318=>449,4319=>448,4320=>694,4321=>501,4322=>544,4323=>517,4324=>560,4325=>450,4326=>627,4327=>452,4328=>491,4329=>452,4330=>485,4331=>452,4332=>485,4333=>443,4334=>500,4335=>582,4336=>455,4337=>451,4338=>480,4339=>414,4340=>453,4341=>418,4342=>741,4343=>452,4344=>452,4345=>544,4346=>454,4347=>410,4348=>339,5024=>711,5025=>678,5026=>604,5027=>667,5028=>796,5029=>301,5030=>516,5031=>544,5032=>457,5033=>716,5034=>703,5035=>383,5036=>628,5037=>709,5038=>455,5039=>601,5040=>472,5041=>574,5042=>730,5043=>939,5044=>498,5045=>528,5046=>667,5047=>891,5048=>505,5049=>792,5050=>957,5051=>725,5052=>595,5053=>733,5054=>698,5055=>638,5056=>720,5057=>732,5058=>624,5059=>638,5060=>565,5061=>903,5062=>655,5063=>681,5064=>675,5065=>949,5066=>683,5067=>547,5068=>693,5069=>732,5070=>529,5071=>569,5072=>536,5073=>677,5074=>631,5075=>495,5076=>973,5077=>543,5078=>607,5079=>652,5080=>652,5081=>693,5082=>514,5083=>803,5084=>658,5085=>597,5086=>627,5087=>659,5088=>679,5089=>706,5090=>563,5091=>618,5092=>767,5093=>776,5094=>731,5095=>492,5096=>808,5097=>823,5098=>796,5099=>689,5100=>716,5101=>518,5102=>521,5103=>719,5104=>563,5105=>776,5106=>634,5107=>822,5108=>621,7680=>611,7681=>500,7682=>611,7683=>500,7684=>611,7685=>500,7686=>611,7687=>500,7688=>667,7689=>444,7690=>722,7691=>500,7692=>722,7693=>500,7694=>722,7695=>500,7696=>722,7697=>500,7698=>722,7699=>500,7700=>611,7701=>444,7702=>611,7703=>444,7704=>604,7705=>444,7706=>604,7707=>444,7708=>604,7709=>444,7710=>611,7711=>278,7712=>722,7713=>500,7714=>722,7715=>500,7716=>722,7717=>500,7718=>722,7719=>500,7720=>722,7721=>500,7722=>722,7723=>500,7724=>339,7725=>278,7726=>333,7727=>278,7728=>652,7729=>444,7730=>652,7731=>444,7732=>652,7733=>444,7734=>556,7735=>278,7736=>556,7737=>278,7738=>556,7739=>278,7740=>556,7741=>278,7742=>828,7743=>722,7744=>828,7745=>722,7746=>828,7747=>722,7748=>657,7749=>500,7750=>657,7751=>500,7752=>657,7753=>500,7754=>657,7755=>500,7756=>722,7757=>500,7758=>722,7759=>500,7760=>722,7761=>500,7762=>722,7763=>500,7764=>603,7765=>500,7766=>603,7767=>500,7768=>616,7769=>389,7770=>616,7771=>389,7772=>616,7773=>389,7774=>616,7775=>389,7776=>500,7777=>389,7778=>500,7779=>389,7780=>500,7781=>389,7782=>500,7783=>389,7784=>500,7785=>389,7786=>556,7787=>278,7788=>556,7789=>278,7790=>556,7791=>278,7792=>556,7793=>278,7794=>722,7795=>500,7796=>722,7797=>500,7798=>722,7799=>500,7800=>722,7801=>500,7802=>722,7803=>500,7804=>611,7805=>444,7806=>611,7807=>444,7808=>833,7809=>667,7810=>833,7811=>667,7812=>833,7813=>667,7814=>833,7815=>667,7816=>833,7817=>667,7818=>611,7819=>444,7820=>611,7821=>444,7822=>556,7823=>444,7824=>556,7825=>389,7826=>556,7827=>389,7828=>556,7829=>389,7830=>500,7831=>278,7832=>667,7833=>444,7834=>444,7835=>278,7836=>333,7837=>278,7838=>659,7839=>534,7840=>611,7841=>500,7842=>611,7843=>500,7844=>611,7845=>500,7846=>611,7847=>500,7848=>611,7849=>500,7850=>611,7851=>500,7852=>611,7853=>500,7854=>611,7855=>500,7856=>611,7857=>500,7858=>611,7859=>500,7860=>611,7861=>500,7862=>611,7863=>500,7864=>604,7865=>444,7866=>604,7867=>444,7868=>604,7869=>444,7870=>611,7871=>444,7872=>611,7873=>444,7874=>611,7875=>444,7876=>611,7877=>444,7878=>604,7879=>444,7880=>339,7881=>278,7882=>339,7883=>278,7884=>722,7885=>500,7886=>722,7887=>500,7888=>722,7889=>500,7890=>722,7891=>500,7892=>722,7893=>500,7894=>722,7895=>500,7896=>722,7897=>500,7898=>759,7899=>546,7900=>759,7901=>546,7902=>807,7903=>585,7904=>759,7905=>546,7906=>759,7907=>546,7908=>722,7909=>500,7910=>722,7911=>500,7912=>778,7913=>584,7914=>778,7915=>584,7916=>807,7917=>585,7918=>778,7919=>584,7920=>778,7921=>584,7922=>556,7923=>444,7924=>556,7925=>444,7926=>556,7927=>444,7928=>556,7929=>444,7936=>564,7937=>564,7938=>564,7939=>564,7940=>564,7941=>564,7942=>564,7943=>564,7944=>661,7945=>661,7946=>794,7947=>811,7948=>792,7949=>803,7950=>661,7951=>648,7952=>416,7953=>416,7954=>416,7955=>416,7956=>416,7957=>416,7960=>740,7961=>795,7962=>923,7963=>940,7964=>996,7965=>986,7968=>506,7969=>506,7970=>506,7971=>506,7972=>506,7973=>506,7974=>506,7975=>506,7976=>879,7977=>901,7978=>1036,7979=>1035,7980=>1099,7981=>1100,7982=>954,7983=>959,7984=>270,7985=>270,7986=>267,7987=>267,7988=>267,7989=>267,7990=>267,7991=>267,7992=>490,7993=>529,7994=>655,7995=>654,7996=>705,7997=>713,7998=>570,7999=>573,8000=>558,8001=>510,8002=>510,8003=>510,8004=>510,8005=>510,8008=>797,8009=>867,8010=>1026,8011=>1022,8012=>993,8013=>1017,8016=>504,8017=>504,8018=>504,8019=>504,8020=>504,8021=>504,8022=>504,8023=>504,8025=>916,8027=>1062,8029=>1100,8031=>933,8032=>693,8033=>693,8034=>693,8035=>693,8036=>693,8037=>693,8038=>693,8039=>693,8040=>852,8041=>909,8042=>1072,8043=>1072,8044=>1032,8045=>1047,8046=>930,8047=>946,8048=>564,8049=>564,8050=>416,8051=>416,8052=>506,8053=>506,8054=>270,8055=>270,8056=>510,8057=>510,8058=>504,8059=>504,8060=>693,8061=>693,8064=>564,8065=>564,8066=>564,8067=>564,8068=>564,8069=>564,8070=>564,8071=>564,8072=>821,8073=>854,8074=>998,8075=>1011,8076=>992,8077=>1001,8078=>866,8079=>858,8080=>506,8081=>506,8082=>506,8083=>506,8084=>506,8085=>506,8086=>506,8087=>506,8088=>999,8089=>1044,8090=>1179,8091=>1165,8092=>1227,8093=>1229,8094=>1080,8095=>1085,8096=>693,8097=>693,8098=>693,8099=>693,8100=>693,8101=>693,8102=>693,8103=>693,8104=>1037,8105=>1113,8106=>1264,8107=>1264,8108=>1219,8109=>1241,8110=>1120,8111=>1132,8112=>564,8113=>564,8114=>564,8115=>564,8116=>564,8118=>564,8119=>564,8120=>661,8121=>661,8122=>661,8123=>661,8124=>831,8125=>192,8126=>332,8127=>500,8128=>500,8129=>534,8130=>506,8131=>506,8132=>506,8134=>506,8135=>506,8136=>611,8137=>816,8138=>889,8139=>908,8140=>881,8141=>500,8142=>500,8143=>500,8144=>270,8145=>270,8146=>270,8147=>270,8150=>270,8151=>270,8152=>333,8153=>333,8154=>497,8155=>521,8157=>500,8158=>500,8159=>500,8160=>504,8161=>504,8162=>504,8163=>504,8164=>506,8165=>506,8166=>504,8167=>504,8168=>676,8169=>676,8170=>905,8171=>901,8172=>783,8173=>333,8174=>333,8175=>500,8178=>693,8179=>693,8180=>693,8182=>693,8183=>693,8184=>907,8185=>833,8186=>963,8187=>875,8188=>952,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>500,8200=>250,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>500,8211=>500,8212=>1000,8213=>1000,8214=>293,8215=>465,8216=>250,8217=>250,8218=>250,8219=>250,8220=>444,8221=>444,8222=>444,8223=>444,8224=>500,8225=>500,8226=>350,8227=>350,8228=>250,8229=>500,8230=>889,8231=>250,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>250,8240=>1000,8241=>1601,8242=>247,8243=>411,8244=>611,8245=>220,8246=>440,8247=>660,8248=>469,8249=>250,8250=>250,8251=>629,8252=>666,8253=>500,8254=>500,8255=>953,8256=>1000,8257=>314,8258=>931,8259=>333,8260=>167,8261=>480,8262=>480,8263=>1000,8264=>833,8265=>833,8266=>500,8267=>453,8268=>453,8269=>450,8270=>500,8271=>278,8272=>882,8273=>500,8274=>497,8275=>500,8276=>953,8277=>512,8278=>410,8279=>855,8280=>620,8281=>620,8282=>179,8283=>621,8284=>564,8285=>179,8286=>179,8287=>111,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>300,8305=>235,8308=>300,8309=>300,8310=>300,8311=>300,8312=>300,8313=>300,8314=>300,8315=>300,8316=>300,8317=>216,8318=>216,8319=>318,8320=>300,8321=>250,8322=>300,8323=>300,8324=>300,8325=>300,8326=>300,8327=>300,8328=>300,8329=>300,8330=>300,8331=>300,8332=>300,8333=>216,8334=>216,8336=>350,8337=>304,8338=>340,8339=>317,8340=>278,8352=>698,8353=>667,8354=>667,8355=>611,8356=>500,8357=>722,8358=>667,8359=>988,8360=>953,8361=>833,8362=>869,8363=>512,8364=>741,8365=>722,8366=>611,8367=>1340,8368=>489,8369=>589,8370=>619,8371=>722,8372=>556,8373=>611,8374=>408,8376=>524,8400=>0,8401=>0,8402=>0,8403=>0,8404=>0,8405=>0,8406=>0,8407=>0,8408=>0,8409=>0,8410=>0,8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8418=>0,8419=>0,8420=>0,8421=>0,8422=>0,8423=>0,8424=>0,8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8432=>0,8448=>604,8449=>605,8450=>674,8451=>954,8452=>556,8453=>573,8454=>667,8455=>518,8456=>667,8457=>822,8458=>490,8459=>824,8460=>663,8461=>818,8462=>500,8463=>500,8464=>578,8465=>613,8466=>715,8467=>417,8468=>777,8469=>751,8470=>783,8471=>792,8472=>832,8473=>589,8474=>729,8475=>892,8476=>711,8477=>755,8478=>616,8479=>610,8480=>879,8481=>1156,8482=>920,8483=>611,8484=>659,8485=>389,8486=>743,8487=>743,8488=>663,8489=>286,8490=>722,8491=>722,8492=>846,8493=>613,8494=>533,8495=>363,8496=>587,8497=>690,8498=>556,8499=>1021,8500=>387,8501=>537,8502=>537,8503=>350,8504=>537,8505=>417,8506=>906,8507=>1155,8508=>655,8510=>586,8511=>722,8513=>663,8514=>485,8515=>485,8516=>637,8522=>516,8523=>778,8525=>906,8526=>378,8531=>750,8532=>750,8533=>750,8534=>750,8535=>750,8536=>750,8537=>750,8538=>750,8539=>750,8540=>750,8541=>750,8542=>750,8543=>750,8544=>339,8545=>608,8546=>877,8547=>940,8548=>611,8549=>910,8550=>1176,8551=>1439,8552=>940,8553=>611,8554=>936,8555=>1204,8556=>556,8557=>667,8558=>722,8559=>828,8560=>278,8561=>526,8562=>774,8563=>712,8564=>444,8565=>702,8566=>950,8567=>1198,8568=>712,8569=>444,8570=>692,8571=>970,8572=>278,8573=>444,8574=>500,8575=>722,8592=>964,8593=>499,8594=>964,8595=>499,8706=>494,8710=>612,8721=>713,8722=>675,8723=>675,8725=>750,8730=>549,8734=>677,8747=>416,8748=>750,8749=>1083,8750=>722,8751=>750,8800=>564,8804=>675,8805=>675,8992=>686,8993=>686,9251=>500,9674=>494,9675=>791,9676=>791,9824=>626,9825=>694,9826=>595,9827=>776,9828=>626,9829=>694,9830=>595,9831=>776,9833=>333,9834=>555,9835=>722,9836=>722,9837=>415,9838=>377,9839=>402,11799=>333,42790=>722,42791=>491,42792=>770,42793=>586,42794=>532,42795=>409,42796=>437,42797=>389,42798=>578,42799=>580,42888=>333,42889=>278,42890=>282,42891=>286,42892=>278,64256=>526,64257=>500,64258=>500,64259=>747,64260=>748,64261=>518,64262=>665,64275=>971,64276=>969,64277=>978,64278=>971,64279=>1219,64285=>350,64286=>0,64287=>537,64288=>537,64297=>564,64298=>537,64299=>537,64300=>537,64301=>537,64302=>537,64303=>537,64304=>537,64305=>537,64306=>350,64307=>537,64308=>537,64309=>350,64310=>350,64312=>537,64313=>350,64314=>537,64315=>537,64316=>537,64318=>537,64320=>350,64321=>537,64323=>537,64324=>537,64326=>537,64327=>537,64328=>537,64329=>537,64330=>537,64331=>350,64332=>537,64333=>537,64334=>537,64335=>537,65533=>900,65535=>700);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/freeserifi.z b/lib/tcpdf/fonts/freeserifi.z
index c191bde42aa..899617dd396 100644
Binary files a/lib/tcpdf/fonts/freeserifi.z and b/lib/tcpdf/fonts/freeserifi.z differ
diff --git a/lib/tcpdf/fonts/helvetica.php b/lib/tcpdf/fonts/helvetica.php
index 09ddd5d99c6..d1aa6d851d3 100644
--- a/lib/tcpdf/fonts/helvetica.php
+++ b/lib/tcpdf/fonts/helvetica.php
@@ -1,33 +1,13 @@
278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278,
-10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278,
-20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278,
-30=>278,31=>278,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,
-40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,
-50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,
-60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,
-70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,
-80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,
-90=>611,91=>278,92=>278,93=>278,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,
-100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,
-109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,
-118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,
-127=>350,128=>556,129=>350,130=>222,131=>556,132=>333,133=>1000,134=>556,135=>556,
-136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350,
-145=>222,146=>222,147=>333,148=>333,149=>350,150=>556,151=>1000,152=>333,153=>1000,
-154=>500,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556,
-163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>556,
-172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333,
-181=>556,182=>537,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,
-190=>834,191=>611,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000,
-199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,
-208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,
-217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,
-226=>556,227=>556,228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556,
-235=>556,236=>278,237=>278,238=>278,239=>278,240=>556,241=>556,242=>556,243=>556,
-244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,
-253=>500,254=>556,255=>500);
-?>
+$name='Helvetica';
+$up=-100;
+$ut=50;
+$dw=513;
+$diff='';
+$enc='';
+$desc=array('Flags'=>32,'FontBBox'=>'[-166 -225 1000 931]','ItalicAngle'=>0,'Ascent'=>931,'Descent'=>-225,'Leading'=>0,'CapHeight'=>718,'XHeight'=>523,'StemV'=>88,'StemH'=>76,'AvgWidth'=>513,'MaxWidth'=>1015,'MissingWidth'=>513);
+$cw=array(0=>500,1=>500,2=>500,3=>500,4=>500,5=>500,6=>500,7=>500,8=>500,9=>500,10=>500,11=>500,12=>500,13=>500,14=>500,15=>500,16=>500,17=>500,18=>500,19=>500,20=>500,21=>500,22=>500,23=>500,24=>500,25=>500,26=>500,27=>500,28=>500,29=>500,30=>500,31=>500,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,92=>278,93=>277,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,127=>500,128=>655,129=>500,130=>222,131=>278,132=>333,133=>1000,134=>556,135=>556,136=>333,137=>1000,138=>667,139=>250,140=>1000,141=>500,142=>611,143=>500,144=>500,145=>222,146=>221,147=>333,148=>333,149=>350,150=>556,151=>1000,152=>333,153=>1000,154=>500,155=>250,156=>938,157=>500,158=>500,159=>667,160=>278,161=>278,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>448,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584,178=>350,179=>350,180=>333,181=>556,182=>537,183=>278,184=>333,185=>350,186=>365,187=>448,188=>869,189=>869,190=>879,191=>556,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>666,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>896,231=>500,232=>556,233=>556,234=>556,235=>556,236=>251,237=>251,238=>251,239=>251,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>555,255=>500);
+
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/helveticab.php b/lib/tcpdf/fonts/helveticab.php
index 0a8565a6580..8d6047f6ab5 100644
--- a/lib/tcpdf/fonts/helveticab.php
+++ b/lib/tcpdf/fonts/helveticab.php
@@ -1,33 +1,12 @@
278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278,
-10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278,
-20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278,
-30=>278,31=>278,32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238,
-40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,
-50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333,
-60=>584,61=>584,62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667,
-70=>611,71=>778,72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778,
-80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,
-90=>611,91=>333,92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556,
-100=>611,101=>556,102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278,
-109=>889,110=>611,111=>611,112=>611,113=>611,114=>389,115=>556,116=>333,117=>611,
-118=>556,119=>778,120=>556,121=>556,122=>500,123=>389,124=>280,125=>389,126=>584,
-127=>350,128=>556,129=>350,130=>278,131=>556,132=>500,133=>1000,134=>556,135=>556,
-136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350,
-145=>278,146=>278,147=>500,148=>500,149=>350,150=>556,151=>1000,152=>333,153=>1000,
-154=>556,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556,
-163=>556,164=>556,165=>556,166=>280,167=>556,168=>333,169=>737,170=>370,171=>556,
-172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333,
-181=>611,182=>556,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,
-190=>834,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000,
-199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,
-208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,
-217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,
-226=>556,227=>556,228=>556,229=>556,230=>889,231=>556,232=>556,233=>556,234=>556,
-235=>556,236=>278,237=>278,238=>278,239=>278,240=>611,241=>611,242=>611,243=>611,
-244=>611,245=>611,246=>611,247=>584,248=>611,249=>611,250=>611,251=>611,252=>611,
-253=>556,254=>611,255=>556);
-?>
+$name='Helvetica-Bold';
+$up=-100;
+$ut=50;
+$dw=535;
+$diff='';
+$enc='';
+$desc=array('Flags'=>32,'FontBBox'=>'[-170 -228 1003 962]','ItalicAngle'=>0,'Ascent'=>962,'Descent'=>-228,'Leading'=>0,'CapHeight'=>718,'XHeight'=>532,'StemV'=>140,'StemH'=>118,'AvgWidth'=>535,'MaxWidth'=>1000,'MissingWidth'=>535);
+$cw=array(0=>278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278,10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278,20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278,30=>278,31=>278,32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333,60=>584,61=>584,62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>333,92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556,100=>611,101=>556,102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278,109=>889,110=>611,111=>611,112=>611,113=>611,114=>389,115=>556,116=>333,117=>611,118=>556,119=>778,120=>556,121=>556,122=>500,123=>389,124=>280,125=>389,126=>584,127=>350,128=>556,129=>350,130=>278,131=>556,132=>500,133=>1000,134=>556,135=>556,136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350,145=>278,146=>278,147=>500,148=>500,149=>350,150=>556,151=>1000,152=>333,153=>1000,154=>556,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>280,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333,181=>611,182=>556,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,190=>834,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>889,231=>556,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>611,241=>611,242=>611,243=>611,244=>611,245=>611,246=>611,247=>584,248=>611,249=>611,250=>611,251=>611,252=>611,253=>556,254=>611,255=>556);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/helveticabi.php b/lib/tcpdf/fonts/helveticabi.php
index 0a8565a6580..e2ecf38dfe4 100644
--- a/lib/tcpdf/fonts/helveticabi.php
+++ b/lib/tcpdf/fonts/helveticabi.php
@@ -1,33 +1,12 @@
278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278,
-10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278,
-20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278,
-30=>278,31=>278,32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238,
-40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,
-50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333,
-60=>584,61=>584,62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667,
-70=>611,71=>778,72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778,
-80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,
-90=>611,91=>333,92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556,
-100=>611,101=>556,102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278,
-109=>889,110=>611,111=>611,112=>611,113=>611,114=>389,115=>556,116=>333,117=>611,
-118=>556,119=>778,120=>556,121=>556,122=>500,123=>389,124=>280,125=>389,126=>584,
-127=>350,128=>556,129=>350,130=>278,131=>556,132=>500,133=>1000,134=>556,135=>556,
-136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350,
-145=>278,146=>278,147=>500,148=>500,149=>350,150=>556,151=>1000,152=>333,153=>1000,
-154=>556,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556,
-163=>556,164=>556,165=>556,166=>280,167=>556,168=>333,169=>737,170=>370,171=>556,
-172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333,
-181=>611,182=>556,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,
-190=>834,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000,
-199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,
-208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,
-217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,
-226=>556,227=>556,228=>556,229=>556,230=>889,231=>556,232=>556,233=>556,234=>556,
-235=>556,236=>278,237=>278,238=>278,239=>278,240=>611,241=>611,242=>611,243=>611,
-244=>611,245=>611,246=>611,247=>584,248=>611,249=>611,250=>611,251=>611,252=>611,
-253=>556,254=>611,255=>556);
-?>
+$name='Helvetica-BoldOblique';
+$up=-100;
+$ut=50;
+$dw=535;
+$diff='';
+$enc='';
+$desc=array('Flags'=>96,'FontBBox'=>'[-174 -228 1114 962]','ItalicAngle'=>-12,'Ascent'=>962,'Descent'=>-228,'Leading'=>0,'CapHeight'=>718,'XHeight'=>532,'StemV'=>140,'StemH'=>118,'AvgWidth'=>535,'MaxWidth'=>1000,'MissingWidth'=>535);
+$cw=array(0=>278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278,10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278,20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278,30=>278,31=>278,32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333,60=>584,61=>584,62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>333,92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556,100=>611,101=>556,102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278,109=>889,110=>611,111=>611,112=>611,113=>611,114=>389,115=>556,116=>333,117=>611,118=>556,119=>778,120=>556,121=>556,122=>500,123=>389,124=>280,125=>389,126=>584,127=>350,128=>556,129=>350,130=>278,131=>556,132=>500,133=>1000,134=>556,135=>556,136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350,145=>278,146=>278,147=>500,148=>500,149=>350,150=>556,151=>1000,152=>333,153=>1000,154=>556,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>280,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333,181=>611,182=>556,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,190=>834,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>889,231=>556,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>611,241=>611,242=>611,243=>611,244=>611,245=>611,246=>611,247=>584,248=>611,249=>611,250=>611,251=>611,252=>611,253=>556,254=>611,255=>556);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/helveticai.php b/lib/tcpdf/fonts/helveticai.php
index 09ddd5d99c6..0404aebd6ab 100644
--- a/lib/tcpdf/fonts/helveticai.php
+++ b/lib/tcpdf/fonts/helveticai.php
@@ -1,33 +1,12 @@
278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278,
-10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278,
-20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278,
-30=>278,31=>278,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,
-40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,
-50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,
-60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,
-70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,
-80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,
-90=>611,91=>278,92=>278,93=>278,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,
-100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,
-109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,
-118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,
-127=>350,128=>556,129=>350,130=>222,131=>556,132=>333,133=>1000,134=>556,135=>556,
-136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350,
-145=>222,146=>222,147=>333,148=>333,149=>350,150=>556,151=>1000,152=>333,153=>1000,
-154=>500,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556,
-163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>556,
-172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333,
-181=>556,182=>537,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,
-190=>834,191=>611,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000,
-199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,
-208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,
-217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,
-226=>556,227=>556,228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556,
-235=>556,236=>278,237=>278,238=>278,239=>278,240=>556,241=>556,242=>556,243=>556,
-244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,
-253=>500,254=>556,255=>500);
-?>
+$name='Helvetica-Oblique';
+$up=-100;
+$ut=50;
+$dw=513;
+$diff='';
+$enc='';
+$desc=array('Flags'=>96,'FontBBox'=>'[-170 -225 1116 931]','ItalicAngle'=>-12,'Ascent'=>931,'Descent'=>-225,'Leading'=>0,'CapHeight'=>718,'XHeight'=>523,'StemV'=>88,'StemH'=>76,'AvgWidth'=>513,'MaxWidth'=>1015,'MissingWidth'=>513);
+$cw=array(0=>278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278,10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278,20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278,30=>278,31=>278,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,92=>278,93=>278,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,127=>350,128=>556,129=>350,130=>222,131=>556,132=>333,133=>1000,134=>556,135=>556,136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350,145=>222,146=>222,147=>333,148=>333,149=>350,150=>556,151=>1000,152=>333,153=>1000,154=>500,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333,181=>556,182=>537,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,190=>834,191=>611,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/hysmyeongjostdmedium.php b/lib/tcpdf/fonts/hysmyeongjostdmedium.php
new file mode 100644
index 00000000000..9e8b23b426d
--- /dev/null
+++ b/lib/tcpdf/fonts/hysmyeongjostdmedium.php
@@ -0,0 +1,48 @@
+ 880,
+ 'Descent' => -120,
+ 'CapHeight' => 720,
+ 'Flags' => 6,
+ 'FontBBox' => '[-28 -148 1001 880]',
+ 'ItalicAngle' => 0,
+ 'StemV' => 60,
+ 'Style' => '<< /Panose <000000000600000000000000> >>',
+);
+$cidinfo = array(
+ 'Registry' => 'Adobe',
+ 'Ordering' => 'Korea1',
+ 'Supplement' => '1',
+);
+$enc = 'UniKS-UCS2-H';
+
+// underline position, needs checking:
+$up = -130;
+$ut = 40;
+
+$dw = 1000;
+$cw = array(
+ 32 => 333, 33 => 416, 34 => 416, 35 => 833, 36 => 625, 37 => 916, 38 => 833, 39 => 250, 40 => 500, 41 => 500,
+ 42 => 500, 43 => 833, 44 => 291, 45 => 450, 46 => 291, 47 => 375, 48 => 625, 49 => 625, 50 => 625, 51 => 625,
+ 52 => 625, 53 => 625, 54 => 625, 55 => 625, 56 => 625, 57 => 625, 58 => 333, 59 => 333, 60 => 833, 61 => 833,
+ 62 => 916, 63 => 500, 64 => 1000, 65 => 791, 66 => 708, 67 => 708, 68 => 750, 69 => 708, 70 => 666, 71 => 750,
+ 72 => 791, 73 => 375, 74 => 500, 75 => 791, 76 => 666, 77 => 916, 78 => 791, 79 => 750, 80 => 666, 81 => 750,
+ 82 => 708, 83 => 666, 84 => 791, 85 => 791, 86 => 750, 87 => 1000, 88 => 708, 89 => 708, 90 => 666, 91 => 500,
+ 92 => 375, 93 => 500, 94 => 500, 95 => 500, 96 => 333, 97 => 541, 98 => 583, 99 => 541, 100 => 583, 101 => 583,
+ 102 => 375, 103 => 583, 104 => 583, 105 => 291, 106 => 333, 107 => 583, 108 => 291, 109 => 875, 110 => 583, 111 => 583,
+ 112 => 583, 113 => 583, 114 => 458, 115 => 541, 116 => 375, 117 => 583, 118 => 583, 119 => 833, 120 => 625, 121 => 625,
+ 122 => 500, 123 => 583, 124 => 583, 125 => 583, 126 => 750,
+);
+$_cr = array(
+ //array(97, 97, 500),
+ array(8094, 8190, 500)
+);
+foreach($_cr as $_r) {
+ for($i = $_r[0]; $i <= $_r[1]; $i++) {
+ $cw[$i+31] = $_r[2];
+ }
+}
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/symbol.php b/lib/tcpdf/fonts/symbol.php
index 9068a79af67..15f7f1ddd32 100644
--- a/lib/tcpdf/fonts/symbol.php
+++ b/lib/tcpdf/fonts/symbol.php
@@ -1,32 +1,12 @@
250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250,
-10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250,
-20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250,
-30=>250,31=>250,32=>250,33=>333,34=>713,35=>500,36=>549,37=>833,38=>778,39=>439,
-40=>333,41=>333,42=>500,43=>549,44=>250,45=>549,46=>250,47=>278,48=>500,49=>500,
-50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>278,59=>278,
-60=>549,61=>549,62=>549,63=>444,64=>549,65=>722,66=>667,67=>722,68=>612,69=>611,
-70=>763,71=>603,72=>722,73=>333,74=>631,75=>722,76=>686,77=>889,78=>722,79=>722,
-80=>768,81=>741,82=>556,83=>592,84=>611,85=>690,86=>439,87=>768,88=>645,89=>795,
-90=>611,91=>333,92=>863,93=>333,94=>658,95=>500,96=>500,97=>631,98=>549,99=>549,
-100=>494,101=>439,102=>521,103=>411,104=>603,105=>329,106=>603,107=>549,108=>549,
-109=>576,110=>521,111=>549,112=>549,113=>521,114=>549,115=>603,116=>439,117=>576,
-118=>713,119=>686,120=>493,121=>686,122=>494,123=>480,124=>200,125=>480,126=>549,
-127=>0,128=>0,129=>0,130=>0,131=>0,132=>0,133=>0,134=>0,135=>0,136=>0,137=>0,
-138=>0,139=>0,140=>0,141=>0,142=>0,143=>0,144=>0,145=>0,146=>0,147=>0,148=>0,
-149=>0,150=>0,151=>0,152=>0,153=>0,154=>0,155=>0,156=>0,157=>0,158=>0,159=>0,
-160=>750,161=>620,162=>247,163=>549,164=>167,165=>713,166=>500,167=>753,168=>753,
-169=>753,170=>753,171=>1042,172=>987,173=>603,174=>987,175=>603,176=>400,177=>549,
-178=>411,179=>549,180=>549,181=>713,182=>494,183=>460,184=>549,185=>549,186=>549,
-187=>549,188=>1000,189=>603,190=>1000,191=>658,192=>823,193=>686,194=>795,195=>987,
-196=>768,197=>768,198=>823,199=>768,200=>768,201=>713,202=>713,203=>713,204=>713,
-205=>713,206=>713,207=>713,208=>768,209=>713,210=>790,211=>790,212=>890,213=>823,
-214=>549,215=>250,216=>713,217=>603,218=>603,219=>1042,220=>987,221=>603,222=>987,
-223=>603,224=>494,225=>329,226=>790,227=>790,228=>786,229=>713,230=>384,231=>384,
-232=>384,233=>384,234=>384,235=>384,236=>494,237=>494,238=>494,239=>494,240=>0,
-241=>329,242=>274,243=>686,244=>686,245=>686,246=>384,247=>384,248=>384,249=>384,
-250=>384,251=>384,252=>494,253=>494,254=>494,255=>0);
-?>
+$name='Symbol';
+$up=-100;
+$ut=50;
+$dw=587;
+$diff='';
+$enc='';
+$desc=array('Flags'=>4,'FontBBox'=>'[-180 -293 1090 1010]','ItalicAngle'=>0,'Ascent'=>1010,'Descent'=>-293,'Leading'=>0,'CapHeight'=>1010,'StemV'=>85,'StemH'=>92,'AvgWidth'=>587,'MaxWidth'=>1042,'MissingWidth'=>587);
+$cw=array(0=>587,1=>587,2=>587,3=>587,4=>587,5=>587,6=>587,7=>587,8=>587,9=>587,10=>587,11=>587,12=>587,13=>587,14=>587,15=>587,16=>587,17=>587,18=>587,19=>587,20=>587,21=>587,22=>587,23=>587,24=>587,25=>587,26=>587,27=>587,28=>587,29=>587,30=>587,31=>587,32=>250,33=>333,34=>713,35=>500,36=>549,37=>833,38=>778,39=>439,40=>333,41=>333,42=>500,43=>549,44=>250,45=>549,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>278,59=>278,60=>549,61=>549,62=>549,63=>444,64=>549,65=>722,66=>667,67=>722,68=>612,69=>611,70=>763,71=>603,72=>722,73=>333,74=>631,75=>722,76=>686,77=>889,78=>722,79=>722,80=>768,81=>741,82=>556,83=>592,84=>611,85=>690,86=>439,87=>768,88=>645,89=>795,90=>611,91=>333,92=>863,93=>333,94=>658,95=>500,96=>500,97=>631,98=>549,99=>549,100=>494,101=>439,102=>521,103=>411,104=>603,105=>329,106=>603,107=>549,108=>549,109=>576,110=>521,111=>549,112=>549,113=>521,114=>549,115=>603,116=>439,117=>576,118=>713,119=>686,120=>493,121=>686,122=>494,123=>480,124=>200,125=>480,126=>549,127=>587,128=>587,129=>587,130=>587,131=>587,132=>587,133=>587,134=>587,135=>587,136=>587,137=>587,138=>587,139=>587,140=>587,141=>587,142=>587,143=>587,144=>587,145=>587,146=>587,147=>587,148=>587,149=>587,150=>587,151=>587,152=>587,153=>587,154=>587,155=>587,156=>587,157=>587,158=>587,159=>587,160=>750,161=>620,162=>247,163=>549,164=>167,165=>713,166=>500,167=>753,168=>753,169=>753,170=>753,171=>1042,172=>987,173=>603,174=>987,175=>603,176=>400,177=>549,178=>411,179=>549,180=>549,181=>713,182=>494,183=>460,184=>549,185=>549,186=>549,187=>549,188=>1000,189=>603,190=>1000,191=>658,192=>823,193=>686,194=>795,195=>987,196=>768,197=>768,198=>823,199=>768,200=>768,201=>713,202=>713,203=>713,204=>713,205=>713,206=>713,207=>713,208=>768,209=>713,210=>790,211=>790,212=>890,213=>823,214=>549,215=>250,216=>713,217=>603,218=>603,219=>1042,220=>987,221=>603,222=>987,223=>603,224=>494,225=>329,226=>790,227=>790,228=>786,229=>713,230=>384,231=>384,232=>384,233=>384,234=>384,235=>384,236=>494,237=>494,238=>494,239=>494,240=>587,241=>329,242=>274,243=>686,244=>686,245=>686,246=>384,247=>384,248=>384,249=>384,250=>384,251=>384,252=>494,253=>494,254=>494,255=>587);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/times.php b/lib/tcpdf/fonts/times.php
index 8cae5a7b585..cfcaf06cc5d 100644
--- a/lib/tcpdf/fonts/times.php
+++ b/lib/tcpdf/fonts/times.php
@@ -1,33 +1,12 @@
250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250,
-10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250,
-20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250,
-30=>250,31=>250,32=>250,33=>333,34=>408,35=>500,36=>500,37=>833,38=>778,39=>180,
-40=>333,41=>333,42=>500,43=>564,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,
-50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>278,59=>278,
-60=>564,61=>564,62=>564,63=>444,64=>921,65=>722,66=>667,67=>667,68=>722,69=>611,
-70=>556,71=>722,72=>722,73=>333,74=>389,75=>722,76=>611,77=>889,78=>722,79=>722,
-80=>556,81=>722,82=>667,83=>556,84=>611,85=>722,86=>722,87=>944,88=>722,89=>722,
-90=>611,91=>333,92=>278,93=>333,94=>469,95=>500,96=>333,97=>444,98=>500,99=>444,
-100=>500,101=>444,102=>333,103=>500,104=>500,105=>278,106=>278,107=>500,108=>278,
-109=>778,110=>500,111=>500,112=>500,113=>500,114=>333,115=>389,116=>278,117=>500,
-118=>500,119=>722,120=>500,121=>500,122=>444,123=>480,124=>200,125=>480,126=>541,
-127=>350,128=>500,129=>350,130=>333,131=>500,132=>444,133=>1000,134=>500,135=>500,
-136=>333,137=>1000,138=>556,139=>333,140=>889,141=>350,142=>611,143=>350,144=>350,
-145=>333,146=>333,147=>444,148=>444,149=>350,150=>500,151=>1000,152=>333,153=>980,
-154=>389,155=>333,156=>722,157=>350,158=>444,159=>722,160=>250,161=>333,162=>500,
-163=>500,164=>500,165=>500,166=>200,167=>500,168=>333,169=>760,170=>276,171=>500,
-172=>564,173=>333,174=>760,175=>333,176=>400,177=>564,178=>300,179=>300,180=>333,
-181=>500,182=>453,183=>250,184=>333,185=>300,186=>310,187=>500,188=>750,189=>750,
-190=>750,191=>444,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>889,
-199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333,
-208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>564,216=>722,
-217=>722,218=>722,219=>722,220=>722,221=>722,222=>556,223=>500,224=>444,225=>444,
-226=>444,227=>444,228=>444,229=>444,230=>667,231=>444,232=>444,233=>444,234=>444,
-235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>500,242=>500,243=>500,
-244=>500,245=>500,246=>500,247=>564,248=>500,249=>500,250=>500,251=>500,252=>500,
-253=>500,254=>500,255=>500);
-?>
+$name='Times-Roman';
+$up=-100;
+$ut=50;
+$dw=495;
+$diff='';
+$enc='';
+$desc=array('Flags'=>32,'FontBBox'=>'[-168 -218 1000 898]','ItalicAngle'=>0,'Ascent'=>898,'Descent'=>-218,'Leading'=>0,'CapHeight'=>662,'XHeight'=>450,'StemV'=>84,'StemH'=>28,'AvgWidth'=>495,'MaxWidth'=>1000,'MissingWidth'=>495);
+$cw=array(0=>250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250,10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250,20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250,30=>250,31=>250,32=>250,33=>333,34=>408,35=>500,36=>500,37=>833,38=>778,39=>180,40=>333,41=>333,42=>500,43=>564,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>278,59=>278,60=>564,61=>564,62=>564,63=>444,64=>921,65=>722,66=>667,67=>667,68=>722,69=>611,70=>556,71=>722,72=>722,73=>333,74=>389,75=>722,76=>611,77=>889,78=>722,79=>722,80=>556,81=>722,82=>667,83=>556,84=>611,85=>722,86=>722,87=>944,88=>722,89=>722,90=>611,91=>333,92=>278,93=>333,94=>469,95=>500,96=>333,97=>444,98=>500,99=>444,100=>500,101=>444,102=>333,103=>500,104=>500,105=>278,106=>278,107=>500,108=>278,109=>778,110=>500,111=>500,112=>500,113=>500,114=>333,115=>389,116=>278,117=>500,118=>500,119=>722,120=>500,121=>500,122=>444,123=>480,124=>200,125=>480,126=>541,127=>350,128=>500,129=>350,130=>333,131=>500,132=>444,133=>1000,134=>500,135=>500,136=>333,137=>1000,138=>556,139=>333,140=>889,141=>350,142=>611,143=>350,144=>350,145=>333,146=>333,147=>444,148=>444,149=>350,150=>500,151=>1000,152=>333,153=>980,154=>389,155=>333,156=>722,157=>350,158=>444,159=>722,160=>250,161=>333,162=>500,163=>500,164=>500,165=>500,166=>200,167=>500,168=>333,169=>760,170=>276,171=>500,172=>564,173=>333,174=>760,175=>333,176=>400,177=>564,178=>300,179=>300,180=>333,181=>500,182=>453,183=>250,184=>333,185=>300,186=>310,187=>500,188=>750,189=>750,190=>750,191=>444,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>889,199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333,208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>564,216=>722,217=>722,218=>722,219=>722,220=>722,221=>722,222=>556,223=>500,224=>444,225=>444,226=>444,227=>444,228=>444,229=>444,230=>667,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>500,242=>500,243=>500,244=>500,245=>500,246=>500,247=>564,248=>500,249=>500,250=>500,251=>500,252=>500,253=>500,254=>500,255=>500);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/timesb.php b/lib/tcpdf/fonts/timesb.php
index 68766ca5d13..9c41a7b51f5 100644
--- a/lib/tcpdf/fonts/timesb.php
+++ b/lib/tcpdf/fonts/timesb.php
@@ -1,33 +1,12 @@
250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250,
-10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250,
-20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250,
-30=>250,31=>250,32=>250,33=>333,34=>555,35=>500,36=>500,37=>1000,38=>833,39=>278,
-40=>333,41=>333,42=>500,43=>570,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,
-50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,
-60=>570,61=>570,62=>570,63=>500,64=>930,65=>722,66=>667,67=>722,68=>722,69=>667,
-70=>611,71=>778,72=>778,73=>389,74=>500,75=>778,76=>667,77=>944,78=>722,79=>778,
-80=>611,81=>778,82=>722,83=>556,84=>667,85=>722,86=>722,87=>1000,88=>722,89=>722,
-90=>667,91=>333,92=>278,93=>333,94=>581,95=>500,96=>333,97=>500,98=>556,99=>444,
-100=>556,101=>444,102=>333,103=>500,104=>556,105=>278,106=>333,107=>556,108=>278,
-109=>833,110=>556,111=>500,112=>556,113=>556,114=>444,115=>389,116=>333,117=>556,
-118=>500,119=>722,120=>500,121=>500,122=>444,123=>394,124=>220,125=>394,126=>520,
-127=>350,128=>500,129=>350,130=>333,131=>500,132=>500,133=>1000,134=>500,135=>500,
-136=>333,137=>1000,138=>556,139=>333,140=>1000,141=>350,142=>667,143=>350,144=>350,
-145=>333,146=>333,147=>500,148=>500,149=>350,150=>500,151=>1000,152=>333,153=>1000,
-154=>389,155=>333,156=>722,157=>350,158=>444,159=>722,160=>250,161=>333,162=>500,
-163=>500,164=>500,165=>500,166=>220,167=>500,168=>333,169=>747,170=>300,171=>500,
-172=>570,173=>333,174=>747,175=>333,176=>400,177=>570,178=>300,179=>300,180=>333,
-181=>556,182=>540,183=>250,184=>333,185=>300,186=>330,187=>500,188=>750,189=>750,
-190=>750,191=>500,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000,
-199=>722,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389,
-208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>570,216=>778,
-217=>722,218=>722,219=>722,220=>722,221=>722,222=>611,223=>556,224=>500,225=>500,
-226=>500,227=>500,228=>500,229=>500,230=>722,231=>444,232=>444,233=>444,234=>444,
-235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>556,242=>500,243=>500,
-244=>500,245=>500,246=>500,247=>570,248=>500,249=>556,250=>556,251=>556,252=>556,
-253=>500,254=>556,255=>500);
-?>
+$name='Times-Bold';
+$up=-100;
+$ut=50;
+$dw=516;
+$diff='';
+$enc='';
+$desc=array('Flags'=>32,'FontBBox'=>'[-168 -218 1000 935]','ItalicAngle'=>0,'Ascent'=>935,'Descent'=>-218,'Leading'=>0,'CapHeight'=>676,'XHeight'=>461,'StemV'=>139,'StemH'=>44,'AvgWidth'=>516,'MaxWidth'=>1000,'MissingWidth'=>516);
+$cw=array(0=>250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250,10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250,20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250,30=>250,31=>250,32=>250,33=>333,34=>555,35=>500,36=>500,37=>1000,38=>833,39=>278,40=>333,41=>333,42=>500,43=>570,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>570,61=>570,62=>570,63=>500,64=>930,65=>722,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,72=>778,73=>389,74=>500,75=>778,76=>667,77=>944,78=>722,79=>778,80=>611,81=>778,82=>722,83=>556,84=>667,85=>722,86=>722,87=>1000,88=>722,89=>722,90=>667,91=>333,92=>278,93=>333,94=>581,95=>500,96=>333,97=>500,98=>556,99=>444,100=>556,101=>444,102=>333,103=>500,104=>556,105=>278,106=>333,107=>556,108=>278,109=>833,110=>556,111=>500,112=>556,113=>556,114=>444,115=>389,116=>333,117=>556,118=>500,119=>722,120=>500,121=>500,122=>444,123=>394,124=>220,125=>394,126=>520,127=>350,128=>500,129=>350,130=>333,131=>500,132=>500,133=>1000,134=>500,135=>500,136=>333,137=>1000,138=>556,139=>333,140=>1000,141=>350,142=>667,143=>350,144=>350,145=>333,146=>333,147=>500,148=>500,149=>350,150=>500,151=>1000,152=>333,153=>1000,154=>389,155=>333,156=>722,157=>350,158=>444,159=>722,160=>250,161=>333,162=>500,163=>500,164=>500,165=>500,166=>220,167=>500,168=>333,169=>747,170=>300,171=>500,172=>570,173=>333,174=>747,175=>333,176=>400,177=>570,178=>300,179=>300,180=>333,181=>556,182=>540,183=>250,184=>333,185=>300,186=>330,187=>500,188=>750,189=>750,190=>750,191=>500,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>570,216=>778,217=>722,218=>722,219=>722,220=>722,221=>722,222=>611,223=>556,224=>500,225=>500,226=>500,227=>500,228=>500,229=>500,230=>722,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>556,242=>500,243=>500,244=>500,245=>500,246=>500,247=>570,248=>500,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/timesbi.php b/lib/tcpdf/fonts/timesbi.php
index e2190e07c1d..4feed7489c7 100644
--- a/lib/tcpdf/fonts/timesbi.php
+++ b/lib/tcpdf/fonts/timesbi.php
@@ -1,33 +1,12 @@
250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250,
-10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250,
-20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250,
-30=>250,31=>250,32=>250,33=>389,34=>555,35=>500,36=>500,37=>833,38=>778,39=>278,
-40=>333,41=>333,42=>500,43=>570,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,
-50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,
-60=>570,61=>570,62=>570,63=>500,64=>832,65=>667,66=>667,67=>667,68=>722,69=>667,
-70=>667,71=>722,72=>778,73=>389,74=>500,75=>667,76=>611,77=>889,78=>722,79=>722,
-80=>611,81=>722,82=>667,83=>556,84=>611,85=>722,86=>667,87=>889,88=>667,89=>611,
-90=>611,91=>333,92=>278,93=>333,94=>570,95=>500,96=>333,97=>500,98=>500,99=>444,
-100=>500,101=>444,102=>333,103=>500,104=>556,105=>278,106=>278,107=>500,108=>278,
-109=>778,110=>556,111=>500,112=>500,113=>500,114=>389,115=>389,116=>278,117=>556,
-118=>444,119=>667,120=>500,121=>444,122=>389,123=>348,124=>220,125=>348,126=>570,
-127=>350,128=>500,129=>350,130=>333,131=>500,132=>500,133=>1000,134=>500,135=>500,
-136=>333,137=>1000,138=>556,139=>333,140=>944,141=>350,142=>611,143=>350,144=>350,
-145=>333,146=>333,147=>500,148=>500,149=>350,150=>500,151=>1000,152=>333,153=>1000,
-154=>389,155=>333,156=>722,157=>350,158=>389,159=>611,160=>250,161=>389,162=>500,
-163=>500,164=>500,165=>500,166=>220,167=>500,168=>333,169=>747,170=>266,171=>500,
-172=>606,173=>333,174=>747,175=>333,176=>400,177=>570,178=>300,179=>300,180=>333,
-181=>576,182=>500,183=>250,184=>333,185=>300,186=>300,187=>500,188=>750,189=>750,
-190=>750,191=>500,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>944,
-199=>667,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389,
-208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>570,216=>722,
-217=>722,218=>722,219=>722,220=>722,221=>611,222=>611,223=>500,224=>500,225=>500,
-226=>500,227=>500,228=>500,229=>500,230=>722,231=>444,232=>444,233=>444,234=>444,
-235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>556,242=>500,243=>500,
-244=>500,245=>500,246=>500,247=>570,248=>500,249=>556,250=>556,251=>556,252=>556,
-253=>444,254=>500,255=>444);
-?>
+$name='Times-BoldItalic';
+$up=-100;
+$ut=50;
+$dw=501;
+$diff='';
+$enc='';
+$desc=array('Flags'=>96,'FontBBox'=>'[-200 -218 996 921]','ItalicAngle'=>-15,'Ascent'=>921,'Descent'=>-218,'Leading'=>0,'CapHeight'=>669,'XHeight'=>462,'StemV'=>121,'StemH'=>42,'AvgWidth'=>501,'MaxWidth'=>1000,'MissingWidth'=>501);
+$cw=array(0=>250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250,10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250,20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250,30=>250,31=>250,32=>250,33=>389,34=>555,35=>500,36=>500,37=>833,38=>778,39=>278,40=>333,41=>333,42=>500,43=>570,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>570,61=>570,62=>570,63=>500,64=>832,65=>667,66=>667,67=>667,68=>722,69=>667,70=>667,71=>722,72=>778,73=>389,74=>500,75=>667,76=>611,77=>889,78=>722,79=>722,80=>611,81=>722,82=>667,83=>556,84=>611,85=>722,86=>667,87=>889,88=>667,89=>611,90=>611,91=>333,92=>278,93=>333,94=>570,95=>500,96=>333,97=>500,98=>500,99=>444,100=>500,101=>444,102=>333,103=>500,104=>556,105=>278,106=>278,107=>500,108=>278,109=>778,110=>556,111=>500,112=>500,113=>500,114=>389,115=>389,116=>278,117=>556,118=>444,119=>667,120=>500,121=>444,122=>389,123=>348,124=>220,125=>348,126=>570,127=>350,128=>500,129=>350,130=>333,131=>500,132=>500,133=>1000,134=>500,135=>500,136=>333,137=>1000,138=>556,139=>333,140=>944,141=>350,142=>611,143=>350,144=>350,145=>333,146=>333,147=>500,148=>500,149=>350,150=>500,151=>1000,152=>333,153=>1000,154=>389,155=>333,156=>722,157=>350,158=>389,159=>611,160=>250,161=>389,162=>500,163=>500,164=>500,165=>500,166=>220,167=>500,168=>333,169=>747,170=>266,171=>500,172=>606,173=>333,174=>747,175=>333,176=>400,177=>570,178=>300,179=>300,180=>333,181=>576,182=>500,183=>250,184=>333,185=>300,186=>300,187=>500,188=>750,189=>750,190=>750,191=>500,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>944,199=>667,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389,208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>570,216=>722,217=>722,218=>722,219=>722,220=>722,221=>611,222=>611,223=>500,224=>500,225=>500,226=>500,227=>500,228=>500,229=>500,230=>722,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>556,242=>500,243=>500,244=>500,245=>500,246=>500,247=>570,248=>500,249=>556,250=>556,251=>556,252=>556,253=>444,254=>500,255=>444);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/timesi.php b/lib/tcpdf/fonts/timesi.php
index 19a5973910b..1e8b673498c 100644
--- a/lib/tcpdf/fonts/timesi.php
+++ b/lib/tcpdf/fonts/timesi.php
@@ -1,33 +1,12 @@
250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250,
-10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250,
-20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250,
-30=>250,31=>250,32=>250,33=>333,34=>420,35=>500,36=>500,37=>833,38=>778,39=>214,
-40=>333,41=>333,42=>500,43=>675,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,
-50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,
-60=>675,61=>675,62=>675,63=>500,64=>920,65=>611,66=>611,67=>667,68=>722,69=>611,
-70=>611,71=>722,72=>722,73=>333,74=>444,75=>667,76=>556,77=>833,78=>667,79=>722,
-80=>611,81=>722,82=>611,83=>500,84=>556,85=>722,86=>611,87=>833,88=>611,89=>556,
-90=>556,91=>389,92=>278,93=>389,94=>422,95=>500,96=>333,97=>500,98=>500,99=>444,
-100=>500,101=>444,102=>278,103=>500,104=>500,105=>278,106=>278,107=>444,108=>278,
-109=>722,110=>500,111=>500,112=>500,113=>500,114=>389,115=>389,116=>278,117=>500,
-118=>444,119=>667,120=>444,121=>444,122=>389,123=>400,124=>275,125=>400,126=>541,
-127=>350,128=>500,129=>350,130=>333,131=>500,132=>556,133=>889,134=>500,135=>500,
-136=>333,137=>1000,138=>500,139=>333,140=>944,141=>350,142=>556,143=>350,144=>350,
-145=>333,146=>333,147=>556,148=>556,149=>350,150=>500,151=>889,152=>333,153=>980,
-154=>389,155=>333,156=>667,157=>350,158=>389,159=>556,160=>250,161=>389,162=>500,
-163=>500,164=>500,165=>500,166=>275,167=>500,168=>333,169=>760,170=>276,171=>500,
-172=>675,173=>333,174=>760,175=>333,176=>400,177=>675,178=>300,179=>300,180=>333,
-181=>500,182=>523,183=>250,184=>333,185=>300,186=>310,187=>500,188=>750,189=>750,
-190=>750,191=>500,192=>611,193=>611,194=>611,195=>611,196=>611,197=>611,198=>889,
-199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333,
-208=>722,209=>667,210=>722,211=>722,212=>722,213=>722,214=>722,215=>675,216=>722,
-217=>722,218=>722,219=>722,220=>722,221=>556,222=>611,223=>500,224=>500,225=>500,
-226=>500,227=>500,228=>500,229=>500,230=>667,231=>444,232=>444,233=>444,234=>444,
-235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>500,242=>500,243=>500,
-244=>500,245=>500,246=>500,247=>675,248=>500,249=>500,250=>500,251=>500,252=>500,
-253=>444,254=>500,255=>444);
-?>
+$name='Times-Italic';
+$up=-100;
+$ut=50;
+$dw=491;
+$diff='';
+$enc='';
+$desc=array('Flags'=>96,'FontBBox'=>'[-169 -217 1010 883]','ItalicAngle'=>-15.5,'Ascent'=>883,'Descent'=>-217,'Leading'=>0,'CapHeight'=>653,'XHeight'=>441,'StemV'=>76,'StemH'=>32,'AvgWidth'=>491,'MaxWidth'=>1000,'MissingWidth'=>491);
+$cw=array(0=>250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250,10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250,20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250,30=>250,31=>250,32=>250,33=>333,34=>420,35=>500,36=>500,37=>833,38=>778,39=>214,40=>333,41=>333,42=>500,43=>675,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>675,61=>675,62=>675,63=>500,64=>920,65=>611,66=>611,67=>667,68=>722,69=>611,70=>611,71=>722,72=>722,73=>333,74=>444,75=>667,76=>556,77=>833,78=>667,79=>722,80=>611,81=>722,82=>611,83=>500,84=>556,85=>722,86=>611,87=>833,88=>611,89=>556,90=>556,91=>389,92=>278,93=>389,94=>422,95=>500,96=>333,97=>500,98=>500,99=>444,100=>500,101=>444,102=>278,103=>500,104=>500,105=>278,106=>278,107=>444,108=>278,109=>722,110=>500,111=>500,112=>500,113=>500,114=>389,115=>389,116=>278,117=>500,118=>444,119=>667,120=>444,121=>444,122=>389,123=>400,124=>275,125=>400,126=>541,127=>350,128=>500,129=>350,130=>333,131=>500,132=>556,133=>889,134=>500,135=>500,136=>333,137=>1000,138=>500,139=>333,140=>944,141=>350,142=>556,143=>350,144=>350,145=>333,146=>333,147=>556,148=>556,149=>350,150=>500,151=>889,152=>333,153=>980,154=>389,155=>333,156=>667,157=>350,158=>389,159=>556,160=>250,161=>389,162=>500,163=>500,164=>500,165=>500,166=>275,167=>500,168=>333,169=>760,170=>276,171=>500,172=>675,173=>333,174=>760,175=>333,176=>400,177=>675,178=>300,179=>300,180=>333,181=>500,182=>523,183=>250,184=>333,185=>300,186=>310,187=>500,188=>750,189=>750,190=>750,191=>500,192=>611,193=>611,194=>611,195=>611,196=>611,197=>611,198=>889,199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333,208=>722,209=>667,210=>722,211=>722,212=>722,213=>722,214=>722,215=>675,216=>722,217=>722,218=>722,219=>722,220=>722,221=>556,222=>611,223=>500,224=>500,225=>500,226=>500,227=>500,228=>500,229=>500,230=>667,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>500,242=>500,243=>500,244=>500,245=>500,246=>500,247=>675,248=>500,249=>500,250=>500,251=>500,252=>500,253=>444,254=>500,255=>444);
+// --- EOF ---
diff --git a/lib/tcpdf/fonts/zapfdingbats.php b/lib/tcpdf/fonts/zapfdingbats.php
index d3b7c56c867..4c0bd75d520 100644
--- a/lib/tcpdf/fonts/zapfdingbats.php
+++ b/lib/tcpdf/fonts/zapfdingbats.php
@@ -1,32 +1,12 @@
0,1=>0,2=>0,3=>0,4=>0,5=>0,6=>0,7=>0,8=>0,9=>0,10=>0,11=>0,12=>0,
-13=>0,14=>0,15=>0,16=>0,17=>0,18=>0,19=>0,20=>0,21=>0,22=>0,23=>0,24=>0,25=>0,
-26=>0,27=>0,28=>0,29=>0,30=>0,31=>0,32=>278,33=>974,34=>961,35=>974,36=>980,
-37=>719,38=>789,39=>790,40=>791,41=>690,42=>960,43=>939,44=>549,45=>855,46=>911,
-47=>933,48=>911,49=>945,50=>974,51=>755,52=>846,53=>762,54=>761,55=>571,56=>677,
-57=>763,58=>760,59=>759,60=>754,61=>494,62=>552,63=>537,64=>577,65=>692,66=>786,
-67=>788,68=>788,69=>790,70=>793,71=>794,72=>816,73=>823,74=>789,75=>841,76=>823,
-77=>833,78=>816,79=>831,80=>923,81=>744,82=>723,83=>749,84=>790,85=>792,86=>695,
-87=>776,88=>768,89=>792,90=>759,91=>707,92=>708,93=>682,94=>701,95=>826,96=>815,
-97=>789,98=>789,99=>707,100=>687,101=>696,102=>689,103=>786,104=>787,105=>713,
-106=>791,107=>785,108=>791,109=>873,110=>761,111=>762,112=>762,113=>759,114=>759,
-115=>892,116=>892,117=>788,118=>784,119=>438,120=>138,121=>277,122=>415,123=>392,
-124=>392,125=>668,126=>668,127=>0,128=>390,129=>390,130=>317,131=>317,132=>276,
-133=>276,134=>509,135=>509,136=>410,137=>410,138=>234,139=>234,140=>334,141=>334,
-142=>0,143=>0,144=>0,145=>0,146=>0,147=>0,148=>0,149=>0,150=>0,151=>0,152=>0,
-153=>0,154=>0,155=>0,156=>0,157=>0,158=>0,159=>0,160=>0,161=>732,162=>544,163=>544,
-164=>910,165=>667,166=>760,167=>760,168=>776,169=>595,170=>694,171=>626,172=>788,
-173=>788,174=>788,175=>788,176=>788,177=>788,178=>788,179=>788,180=>788,181=>788,
-182=>788,183=>788,184=>788,185=>788,186=>788,187=>788,188=>788,189=>788,190=>788,
-191=>788,192=>788,193=>788,194=>788,195=>788,196=>788,197=>788,198=>788,199=>788,
-200=>788,201=>788,202=>788,203=>788,204=>788,205=>788,206=>788,207=>788,208=>788,
-209=>788,210=>788,211=>788,212=>894,213=>838,214=>1016,215=>458,216=>748,217=>924,
-218=>748,219=>918,220=>927,221=>928,222=>928,223=>834,224=>873,225=>828,226=>924,
-227=>924,228=>917,229=>930,230=>931,231=>463,232=>883,233=>836,234=>836,235=>867,
-236=>867,237=>696,238=>696,239=>874,240=>0,241=>874,242=>760,243=>946,244=>771,
-245=>865,246=>771,247=>888,248=>967,249=>888,250=>831,251=>873,252=>927,253=>970,
-254=>918,255=>0);
-?>
+$name='ZapfDingbats';
+$up=-100;
+$ut=50;
+$dw=746;
+$diff='';
+$enc='';
+$desc=array('Flags'=>4,'FontBBox'=>'[-1 -143 981 820]','ItalicAngle'=>0,'Ascent'=>820,'Descent'=>-143,'Leading'=>0,'CapHeight'=>820,'StemV'=>90,'StemH'=>28,'AvgWidth'=>746,'MaxWidth'=>1016,'MissingWidth'=>746);
+$cw=array(0=>746,1=>746,2=>746,3=>746,4=>746,5=>746,6=>746,7=>746,8=>746,9=>746,10=>746,11=>746,12=>746,13=>746,14=>746,15=>746,16=>746,17=>746,18=>746,19=>746,20=>746,21=>746,22=>746,23=>746,24=>746,25=>746,26=>746,27=>746,28=>746,29=>746,30=>746,31=>746,32=>278,33=>974,34=>961,35=>974,36=>980,37=>719,38=>789,39=>790,40=>791,41=>690,42=>960,43=>939,44=>549,45=>855,46=>911,47=>933,48=>911,49=>945,50=>974,51=>755,52=>846,53=>762,54=>761,55=>571,56=>677,57=>763,58=>760,59=>759,60=>754,61=>494,62=>552,63=>537,64=>577,65=>692,66=>786,67=>788,68=>788,69=>790,70=>793,71=>794,72=>816,73=>823,74=>789,75=>841,76=>823,77=>833,78=>816,79=>831,80=>923,81=>744,82=>723,83=>749,84=>790,85=>792,86=>695,87=>776,88=>768,89=>792,90=>759,91=>707,92=>708,93=>682,94=>701,95=>826,96=>815,97=>789,98=>789,99=>707,100=>687,101=>696,102=>689,103=>786,104=>787,105=>713,106=>791,107=>785,108=>791,109=>873,110=>761,111=>762,112=>762,113=>759,114=>759,115=>892,116=>892,117=>788,118=>784,119=>438,120=>138,121=>277,122=>415,123=>392,124=>392,125=>668,126=>668,127=>746,128=>390,129=>390,130=>317,131=>317,132=>276,133=>276,134=>509,135=>509,136=>410,137=>410,138=>234,139=>234,140=>334,141=>334,142=>746,143=>746,144=>746,145=>746,146=>746,147=>746,148=>746,149=>746,150=>746,151=>746,152=>746,153=>746,154=>746,155=>746,156=>746,157=>746,158=>746,159=>746,160=>746,161=>732,162=>544,163=>544,164=>910,165=>667,166=>760,167=>760,168=>776,169=>595,170=>694,171=>626,172=>788,173=>788,174=>788,175=>788,176=>788,177=>788,178=>788,179=>788,180=>788,181=>788,182=>788,183=>788,184=>788,185=>788,186=>788,187=>788,188=>788,189=>788,190=>788,191=>788,192=>788,193=>788,194=>788,195=>788,196=>788,197=>788,198=>788,199=>788,200=>788,201=>788,202=>788,203=>788,204=>788,205=>788,206=>788,207=>788,208=>788,209=>788,210=>788,211=>788,212=>894,213=>838,214=>1016,215=>458,216=>748,217=>924,218=>748,219=>918,220=>927,221=>928,222=>928,223=>834,224=>873,225=>828,226=>924,227=>924,228=>917,229=>930,230=>931,231=>463,232=>883,233=>836,234=>836,235=>867,236=>867,237=>696,238=>696,239=>874,240=>746,241=>874,242=>760,243=>946,244=>771,245=>865,246=>771,247=>888,248=>967,249=>888,250=>831,251=>873,252=>927,253=>970,254=>918,255=>746);
+// --- EOF ---
diff --git a/lib/tcpdf/htmlcolors.php b/lib/tcpdf/htmlcolors.php
index 61ab5c553ae..d1075dd4749 100644
--- a/lib/tcpdf/htmlcolors.php
+++ b/lib/tcpdf/htmlcolors.php
@@ -1,57 +1,47 @@
.
-//
-// See LICENSE.TXT file for more information.
-// ----------------------------------------------------------------------------
+// Last Update : 2010-12-16
+// Author : Nicola Asuni - Tecnick.com S.r.l - Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com
+// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html)
+// -------------------------------------------------------------------
+// Copyright (C) 2002-2010 Nicola Asuni - Tecnick.com S.r.l.
+//
+// This file is part of TCPDF software library.
+//
+// TCPDF is free software: you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// TCPDF is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with TCPDF. If not, see .
+//
+// See LICENSE.TXT file for more information.
+// -------------------------------------------------------------------
//
// Description : Array of WEB safe colors
//
-// Author: Nicola Asuni
-//
-// (c) Copyright:
-// Nicola Asuni
-// Tecnick.com S.r.l.
-// Via della Pace, 11
-// 09044 Quartucciu (CA)
-// ITALY
-// www.tecnick.com
-// info@tecnick.com
//============================================================+
/**
- * Array of WEB safe colors.
+ * @file
+ * Array of WEB safe colors
* @author Nicola Asuni
- * @copyright 2004-2009 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com
* @package com.tecnick.tcpdf
- * @link http://www.tcpdf.org
- * @license http://www.gnu.org/copyleft/lesser.html LGPL
* @since 2.9.000 (2008-03-26)
-*/
+ */
/**
* Array of WEB safe colors
*/
-global $webcolor;
$webcolor = array (
'aliceblue' => 'f0f8ff',
'antiquewhite' => 'faebd7',
@@ -113,8 +103,8 @@ $webcolor = array (
'greenyellow' => 'adff2f',
'honeydew' => 'f0fff0',
'hotpink' => 'ff69b4',
-'indianred ' => 'cd5c5c',
-'indigo ' => '4b0082',
+'indianred' => 'cd5c5c',
+'indigo' => '4b0082',
'ivory' => 'fffff0',
'khaki' => 'f0e68c',
'lavender' => 'e6e6fa',
@@ -205,6 +195,5 @@ $webcolor = array (
);
//============================================================+
-// END OF FILE
+// END OF FILE
//============================================================+
-?>
diff --git a/lib/tcpdf/pdf417.php b/lib/tcpdf/pdf417.php
new file mode 100644
index 00000000000..995daa261bb
--- /dev/null
+++ b/lib/tcpdf/pdf417.php
@@ -0,0 +1,991 @@
+.
+//
+// See LICENSE.TXT file for more information.
+// -------------------------------------------------------------------
+//
+// DESCRIPTION :
+//
+// Class to create PDF417 barcode arrays for TCPDF class.
+// PDF417 (ISO/IEC 15438:2006) is a 2-dimensional stacked bar code created by Symbol Technologies in 1991.
+// It is one of the most popular 2D codes because of its ability to be read with slightly modified handheld laser or linear CCD scanners.
+// TECHNICAL DATA / FEATURES OF PDF417:
+// Encodable Character Set: All 128 ASCII Characters (including extended)
+// Code Type: Continuous, Multi-Row
+// Symbol Height: 3 - 90 Rows
+// Symbol Width: 90X - 583X
+// Bidirectional Decoding: Yes
+// Error Correction Characters: 2 - 512
+// Maximum Data Characters: 1850 text, 2710 digits, 1108 bytes
+//
+//============================================================+
+
+/**
+ * @file
+ * Class to create PDF417 barcode arrays for TCPDF class.
+ * PDF417 (ISO/IEC 15438:2006) is a 2-dimensional stacked bar code created by Symbol Technologies in 1991.
+ * (requires PHP bcmath extension)
+ * @package com.tecnick.tcpdf
+ * @author Nicola Asuni
+ * @version 1.0.003
+ */
+
+// definitions
+if (!defined('PDF417DEFS')) {
+
+ /**
+ * Indicate that definitions for this class are set
+ */
+ define('PDF417DEFS', true);
+
+ // -----------------------------------------------------
+
+ /**
+ * Row height respect X dimension of single module
+ */
+ define('ROWHEIGHT', 4);
+
+ /**
+ * Horizontal quiet zone in modules
+ */
+ define('QUIETH', 2);
+
+ /**
+ * Vertical quiet zone in modules
+ */
+ define('QUIETV', 2);
+
+} // end of definitions
+
+// #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+
+/**
+ * @class PDF417
+ * Class to create PDF417 barcode arrays for TCPDF class.
+ * PDF417 (ISO/IEC 15438:2006) is a 2-dimensional stacked bar code created by Symbol Technologies in 1991.
+ * @package com.tecnick.tcpdf
+ * @author Nicola Asuni
+ * @version 1.0.003
+ */
+class PDF417 {
+
+ /**
+ * Barcode array to be returned which is readable by TCPDF.
+ * @protected
+ */
+ protected $barcode_array = array();
+
+ /**
+ * Start pattern.
+ * @protected
+ */
+ protected $start_pattern = '11111111010101000';
+
+ /**
+ * Stop pattern.
+ * @protected
+ */
+ protected $stop_pattern = '111111101000101001';
+
+ /**
+ * Array of text Compaction Sub-Modes (values 0xFB - 0xFF are used for submode changers).
+ * @protected
+ */
+ protected $textsubmodes = array(
+ array(0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x20,0xFD,0xFE,0xFF), // Alpha
+ array(0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x20,0xFD,0xFE,0xFF), // Lower
+ array(0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x26,0x0d,0x09,0x2c,0x3a,0x23,0x2d,0x2e,0x24,0x2f,0x2b,0x25,0x2a,0x3d,0x5e,0xFB,0x20,0xFD,0xFE,0xFF), // Mixed
+ array(0x3b,0x3c,0x3e,0x40,0x5b,0x5c,0x5d,0x5f,0x60,0x7e,0x21,0x0d,0x09,0x2c,0x3a,0x0a,0x2d,0x2e,0x24,0x2f,0x22,0x7c,0x2a,0x28,0x29,0x3f,0x7b,0x7d,0x27,0xFF) // Puntuaction
+ );
+
+ /**
+ * Array of switching codes for Text Compaction Sub-Modes.
+ * @protected
+ */
+ protected $textlatch = array(
+ '01' => array(27), '02' => array(28), '03' => array(28,25), //
+ '10' => array(28,28), '12' => array(28), '13' => array(28,25), //
+ '20' => array(28), '21' => array(27), '23' => array(25), //
+ '30' => array(29), '31' => array(29,27), '32' => array(29,28) //
+ );
+
+ /**
+ * Clusters of codewords (0, 3, 6)
+ * Values are hex equivalents of binary representation of bars (1 = bar, 0 = space).
+ * The codewords numbered from 900 to 928 have special meaning, some enable to switch between modes in order to optimise the code:
+ * 900 : Switch to "Text" mode
+ * 901 : Switch to "Byte" mode
+ * 902 : Switch to "Numeric" mode
+ * 903 - 912 : Reserved
+ * 913 : Switch to "Octet" only for the next codeword
+ * 914 - 920 : Reserved
+ * 921 : Initialization
+ * 922 : Terminator codeword for Macro PDF control block
+ * 923 : Sequence tag to identify the beginning of optional fields in the Macro PDF control block
+ * 924 : Switch to "Byte" mode (If the total number of byte is multiple of 6)
+ * 925 : Identifier for a user defined Extended Channel Interpretation (ECI)
+ * 926 : Identifier for a general purpose ECI format
+ * 927 : Identifier for an ECI of a character set or code page
+ * 928 : Macro marker codeword to indicate the beginning of a Macro PDF Control Block
+ *
+ * @protected
+ */
+ protected $clusters = array(
+ array( // cluster 0 -----------------------------------------------------------------------
+ 0x1d5c0,0x1eaf0,0x1f57c,0x1d4e0,0x1ea78,0x1f53e,0x1a8c0,0x1d470,0x1a860,0x15040, // 10
+ 0x1a830,0x15020,0x1adc0,0x1d6f0,0x1eb7c,0x1ace0,0x1d678,0x1eb3e,0x158c0,0x1ac70, // 20
+ 0x15860,0x15dc0,0x1aef0,0x1d77c,0x15ce0,0x1ae78,0x1d73e,0x15c70,0x1ae3c,0x15ef0, // 30
+ 0x1af7c,0x15e78,0x1af3e,0x15f7c,0x1f5fa,0x1d2e0,0x1e978,0x1f4be,0x1a4c0,0x1d270, // 40
+ 0x1e93c,0x1a460,0x1d238,0x14840,0x1a430,0x1d21c,0x14820,0x1a418,0x14810,0x1a6e0, // 50
+ 0x1d378,0x1e9be,0x14cc0,0x1a670,0x1d33c,0x14c60,0x1a638,0x1d31e,0x14c30,0x1a61c, // 60
+ 0x14ee0,0x1a778,0x1d3be,0x14e70,0x1a73c,0x14e38,0x1a71e,0x14f78,0x1a7be,0x14f3c, // 70
+ 0x14f1e,0x1a2c0,0x1d170,0x1e8bc,0x1a260,0x1d138,0x1e89e,0x14440,0x1a230,0x1d11c, // 80
+ 0x14420,0x1a218,0x14410,0x14408,0x146c0,0x1a370,0x1d1bc,0x14660,0x1a338,0x1d19e, // 90
+ 0x14630,0x1a31c,0x14618,0x1460c,0x14770,0x1a3bc,0x14738,0x1a39e,0x1471c,0x147bc, // 100
+ 0x1a160,0x1d0b8,0x1e85e,0x14240,0x1a130,0x1d09c,0x14220,0x1a118,0x1d08e,0x14210, // 110
+ 0x1a10c,0x14208,0x1a106,0x14360,0x1a1b8,0x1d0de,0x14330,0x1a19c,0x14318,0x1a18e, // 120
+ 0x1430c,0x14306,0x1a1de,0x1438e,0x14140,0x1a0b0,0x1d05c,0x14120,0x1a098,0x1d04e, // 130
+ 0x14110,0x1a08c,0x14108,0x1a086,0x14104,0x141b0,0x14198,0x1418c,0x140a0,0x1d02e, // 140
+ 0x1a04c,0x1a046,0x14082,0x1cae0,0x1e578,0x1f2be,0x194c0,0x1ca70,0x1e53c,0x19460, // 150
+ 0x1ca38,0x1e51e,0x12840,0x19430,0x12820,0x196e0,0x1cb78,0x1e5be,0x12cc0,0x19670, // 160
+ 0x1cb3c,0x12c60,0x19638,0x12c30,0x12c18,0x12ee0,0x19778,0x1cbbe,0x12e70,0x1973c, // 170
+ 0x12e38,0x12e1c,0x12f78,0x197be,0x12f3c,0x12fbe,0x1dac0,0x1ed70,0x1f6bc,0x1da60, // 180
+ 0x1ed38,0x1f69e,0x1b440,0x1da30,0x1ed1c,0x1b420,0x1da18,0x1ed0e,0x1b410,0x1da0c, // 190
+ 0x192c0,0x1c970,0x1e4bc,0x1b6c0,0x19260,0x1c938,0x1e49e,0x1b660,0x1db38,0x1ed9e, // 200
+ 0x16c40,0x12420,0x19218,0x1c90e,0x16c20,0x1b618,0x16c10,0x126c0,0x19370,0x1c9bc, // 210
+ 0x16ec0,0x12660,0x19338,0x1c99e,0x16e60,0x1b738,0x1db9e,0x16e30,0x12618,0x16e18, // 220
+ 0x12770,0x193bc,0x16f70,0x12738,0x1939e,0x16f38,0x1b79e,0x16f1c,0x127bc,0x16fbc, // 230
+ 0x1279e,0x16f9e,0x1d960,0x1ecb8,0x1f65e,0x1b240,0x1d930,0x1ec9c,0x1b220,0x1d918, // 240
+ 0x1ec8e,0x1b210,0x1d90c,0x1b208,0x1b204,0x19160,0x1c8b8,0x1e45e,0x1b360,0x19130, // 250
+ 0x1c89c,0x16640,0x12220,0x1d99c,0x1c88e,0x16620,0x12210,0x1910c,0x16610,0x1b30c, // 260
+ 0x19106,0x12204,0x12360,0x191b8,0x1c8de,0x16760,0x12330,0x1919c,0x16730,0x1b39c, // 270
+ 0x1918e,0x16718,0x1230c,0x12306,0x123b8,0x191de,0x167b8,0x1239c,0x1679c,0x1238e, // 280
+ 0x1678e,0x167de,0x1b140,0x1d8b0,0x1ec5c,0x1b120,0x1d898,0x1ec4e,0x1b110,0x1d88c, // 290
+ 0x1b108,0x1d886,0x1b104,0x1b102,0x12140,0x190b0,0x1c85c,0x16340,0x12120,0x19098, // 300
+ 0x1c84e,0x16320,0x1b198,0x1d8ce,0x16310,0x12108,0x19086,0x16308,0x1b186,0x16304, // 310
+ 0x121b0,0x190dc,0x163b0,0x12198,0x190ce,0x16398,0x1b1ce,0x1638c,0x12186,0x16386, // 320
+ 0x163dc,0x163ce,0x1b0a0,0x1d858,0x1ec2e,0x1b090,0x1d84c,0x1b088,0x1d846,0x1b084, // 330
+ 0x1b082,0x120a0,0x19058,0x1c82e,0x161a0,0x12090,0x1904c,0x16190,0x1b0cc,0x19046, // 340
+ 0x16188,0x12084,0x16184,0x12082,0x120d8,0x161d8,0x161cc,0x161c6,0x1d82c,0x1d826, // 350
+ 0x1b042,0x1902c,0x12048,0x160c8,0x160c4,0x160c2,0x18ac0,0x1c570,0x1e2bc,0x18a60, // 360
+ 0x1c538,0x11440,0x18a30,0x1c51c,0x11420,0x18a18,0x11410,0x11408,0x116c0,0x18b70, // 370
+ 0x1c5bc,0x11660,0x18b38,0x1c59e,0x11630,0x18b1c,0x11618,0x1160c,0x11770,0x18bbc, // 380
+ 0x11738,0x18b9e,0x1171c,0x117bc,0x1179e,0x1cd60,0x1e6b8,0x1f35e,0x19a40,0x1cd30, // 390
+ 0x1e69c,0x19a20,0x1cd18,0x1e68e,0x19a10,0x1cd0c,0x19a08,0x1cd06,0x18960,0x1c4b8, // 400
+ 0x1e25e,0x19b60,0x18930,0x1c49c,0x13640,0x11220,0x1cd9c,0x1c48e,0x13620,0x19b18, // 410
+ 0x1890c,0x13610,0x11208,0x13608,0x11360,0x189b8,0x1c4de,0x13760,0x11330,0x1cdde, // 420
+ 0x13730,0x19b9c,0x1898e,0x13718,0x1130c,0x1370c,0x113b8,0x189de,0x137b8,0x1139c, // 430
+ 0x1379c,0x1138e,0x113de,0x137de,0x1dd40,0x1eeb0,0x1f75c,0x1dd20,0x1ee98,0x1f74e, // 440
+ 0x1dd10,0x1ee8c,0x1dd08,0x1ee86,0x1dd04,0x19940,0x1ccb0,0x1e65c,0x1bb40,0x19920, // 450
+ 0x1eedc,0x1e64e,0x1bb20,0x1dd98,0x1eece,0x1bb10,0x19908,0x1cc86,0x1bb08,0x1dd86, // 460
+ 0x19902,0x11140,0x188b0,0x1c45c,0x13340,0x11120,0x18898,0x1c44e,0x17740,0x13320, // 470
+ 0x19998,0x1ccce,0x17720,0x1bb98,0x1ddce,0x18886,0x17710,0x13308,0x19986,0x17708, // 480
+ 0x11102,0x111b0,0x188dc,0x133b0,0x11198,0x188ce,0x177b0,0x13398,0x199ce,0x17798, // 490
+ 0x1bbce,0x11186,0x13386,0x111dc,0x133dc,0x111ce,0x177dc,0x133ce,0x1dca0,0x1ee58, // 500
+ 0x1f72e,0x1dc90,0x1ee4c,0x1dc88,0x1ee46,0x1dc84,0x1dc82,0x198a0,0x1cc58,0x1e62e, // 510
+ 0x1b9a0,0x19890,0x1ee6e,0x1b990,0x1dccc,0x1cc46,0x1b988,0x19884,0x1b984,0x19882, // 520
+ 0x1b982,0x110a0,0x18858,0x1c42e,0x131a0,0x11090,0x1884c,0x173a0,0x13190,0x198cc, // 530
+ 0x18846,0x17390,0x1b9cc,0x11084,0x17388,0x13184,0x11082,0x13182,0x110d8,0x1886e, // 540
+ 0x131d8,0x110cc,0x173d8,0x131cc,0x110c6,0x173cc,0x131c6,0x110ee,0x173ee,0x1dc50, // 550
+ 0x1ee2c,0x1dc48,0x1ee26,0x1dc44,0x1dc42,0x19850,0x1cc2c,0x1b8d0,0x19848,0x1cc26, // 560
+ 0x1b8c8,0x1dc66,0x1b8c4,0x19842,0x1b8c2,0x11050,0x1882c,0x130d0,0x11048,0x18826, // 570
+ 0x171d0,0x130c8,0x19866,0x171c8,0x1b8e6,0x11042,0x171c4,0x130c2,0x171c2,0x130ec, // 580
+ 0x171ec,0x171e6,0x1ee16,0x1dc22,0x1cc16,0x19824,0x19822,0x11028,0x13068,0x170e8, // 590
+ 0x11022,0x13062,0x18560,0x10a40,0x18530,0x10a20,0x18518,0x1c28e,0x10a10,0x1850c, // 600
+ 0x10a08,0x18506,0x10b60,0x185b8,0x1c2de,0x10b30,0x1859c,0x10b18,0x1858e,0x10b0c, // 610
+ 0x10b06,0x10bb8,0x185de,0x10b9c,0x10b8e,0x10bde,0x18d40,0x1c6b0,0x1e35c,0x18d20, // 620
+ 0x1c698,0x18d10,0x1c68c,0x18d08,0x1c686,0x18d04,0x10940,0x184b0,0x1c25c,0x11b40, // 630
+ 0x10920,0x1c6dc,0x1c24e,0x11b20,0x18d98,0x1c6ce,0x11b10,0x10908,0x18486,0x11b08, // 640
+ 0x18d86,0x10902,0x109b0,0x184dc,0x11bb0,0x10998,0x184ce,0x11b98,0x18dce,0x11b8c, // 650
+ 0x10986,0x109dc,0x11bdc,0x109ce,0x11bce,0x1cea0,0x1e758,0x1f3ae,0x1ce90,0x1e74c, // 660
+ 0x1ce88,0x1e746,0x1ce84,0x1ce82,0x18ca0,0x1c658,0x19da0,0x18c90,0x1c64c,0x19d90, // 670
+ 0x1cecc,0x1c646,0x19d88,0x18c84,0x19d84,0x18c82,0x19d82,0x108a0,0x18458,0x119a0, // 680
+ 0x10890,0x1c66e,0x13ba0,0x11990,0x18ccc,0x18446,0x13b90,0x19dcc,0x10884,0x13b88, // 690
+ 0x11984,0x10882,0x11982,0x108d8,0x1846e,0x119d8,0x108cc,0x13bd8,0x119cc,0x108c6, // 700
+ 0x13bcc,0x119c6,0x108ee,0x119ee,0x13bee,0x1ef50,0x1f7ac,0x1ef48,0x1f7a6,0x1ef44, // 710
+ 0x1ef42,0x1ce50,0x1e72c,0x1ded0,0x1ef6c,0x1e726,0x1dec8,0x1ef66,0x1dec4,0x1ce42, // 720
+ 0x1dec2,0x18c50,0x1c62c,0x19cd0,0x18c48,0x1c626,0x1bdd0,0x19cc8,0x1ce66,0x1bdc8, // 730
+ 0x1dee6,0x18c42,0x1bdc4,0x19cc2,0x1bdc2,0x10850,0x1842c,0x118d0,0x10848,0x18426, // 740
+ 0x139d0,0x118c8,0x18c66,0x17bd0,0x139c8,0x19ce6,0x10842,0x17bc8,0x1bde6,0x118c2, // 750
+ 0x17bc4,0x1086c,0x118ec,0x10866,0x139ec,0x118e6,0x17bec,0x139e6,0x17be6,0x1ef28, // 760
+ 0x1f796,0x1ef24,0x1ef22,0x1ce28,0x1e716,0x1de68,0x1ef36,0x1de64,0x1ce22,0x1de62, // 770
+ 0x18c28,0x1c616,0x19c68,0x18c24,0x1bce8,0x19c64,0x18c22,0x1bce4,0x19c62,0x1bce2, // 780
+ 0x10828,0x18416,0x11868,0x18c36,0x138e8,0x11864,0x10822,0x179e8,0x138e4,0x11862, // 790
+ 0x179e4,0x138e2,0x179e2,0x11876,0x179f6,0x1ef12,0x1de34,0x1de32,0x19c34,0x1bc74, // 800
+ 0x1bc72,0x11834,0x13874,0x178f4,0x178f2,0x10540,0x10520,0x18298,0x10510,0x10508, // 810
+ 0x10504,0x105b0,0x10598,0x1058c,0x10586,0x105dc,0x105ce,0x186a0,0x18690,0x1c34c, // 820
+ 0x18688,0x1c346,0x18684,0x18682,0x104a0,0x18258,0x10da0,0x186d8,0x1824c,0x10d90, // 830
+ 0x186cc,0x10d88,0x186c6,0x10d84,0x10482,0x10d82,0x104d8,0x1826e,0x10dd8,0x186ee, // 840
+ 0x10dcc,0x104c6,0x10dc6,0x104ee,0x10dee,0x1c750,0x1c748,0x1c744,0x1c742,0x18650, // 850
+ 0x18ed0,0x1c76c,0x1c326,0x18ec8,0x1c766,0x18ec4,0x18642,0x18ec2,0x10450,0x10cd0, // 860
+ 0x10448,0x18226,0x11dd0,0x10cc8,0x10444,0x11dc8,0x10cc4,0x10442,0x11dc4,0x10cc2, // 870
+ 0x1046c,0x10cec,0x10466,0x11dec,0x10ce6,0x11de6,0x1e7a8,0x1e7a4,0x1e7a2,0x1c728, // 880
+ 0x1cf68,0x1e7b6,0x1cf64,0x1c722,0x1cf62,0x18628,0x1c316,0x18e68,0x1c736,0x19ee8, // 890
+ 0x18e64,0x18622,0x19ee4,0x18e62,0x19ee2,0x10428,0x18216,0x10c68,0x18636,0x11ce8, // 900
+ 0x10c64,0x10422,0x13de8,0x11ce4,0x10c62,0x13de4,0x11ce2,0x10436,0x10c76,0x11cf6, // 910
+ 0x13df6,0x1f7d4,0x1f7d2,0x1e794,0x1efb4,0x1e792,0x1efb2,0x1c714,0x1cf34,0x1c712, // 920
+ 0x1df74,0x1cf32,0x1df72,0x18614,0x18e34,0x18612,0x19e74,0x18e32,0x1bef4), // 929
+ array( // cluster 3 -----------------------------------------------------------------------
+ 0x1f560,0x1fab8,0x1ea40,0x1f530,0x1fa9c,0x1ea20,0x1f518,0x1fa8e,0x1ea10,0x1f50c, // 10
+ 0x1ea08,0x1f506,0x1ea04,0x1eb60,0x1f5b8,0x1fade,0x1d640,0x1eb30,0x1f59c,0x1d620, // 20
+ 0x1eb18,0x1f58e,0x1d610,0x1eb0c,0x1d608,0x1eb06,0x1d604,0x1d760,0x1ebb8,0x1f5de, // 30
+ 0x1ae40,0x1d730,0x1eb9c,0x1ae20,0x1d718,0x1eb8e,0x1ae10,0x1d70c,0x1ae08,0x1d706, // 40
+ 0x1ae04,0x1af60,0x1d7b8,0x1ebde,0x15e40,0x1af30,0x1d79c,0x15e20,0x1af18,0x1d78e, // 50
+ 0x15e10,0x1af0c,0x15e08,0x1af06,0x15f60,0x1afb8,0x1d7de,0x15f30,0x1af9c,0x15f18, // 60
+ 0x1af8e,0x15f0c,0x15fb8,0x1afde,0x15f9c,0x15f8e,0x1e940,0x1f4b0,0x1fa5c,0x1e920, // 70
+ 0x1f498,0x1fa4e,0x1e910,0x1f48c,0x1e908,0x1f486,0x1e904,0x1e902,0x1d340,0x1e9b0, // 80
+ 0x1f4dc,0x1d320,0x1e998,0x1f4ce,0x1d310,0x1e98c,0x1d308,0x1e986,0x1d304,0x1d302, // 90
+ 0x1a740,0x1d3b0,0x1e9dc,0x1a720,0x1d398,0x1e9ce,0x1a710,0x1d38c,0x1a708,0x1d386, // 100
+ 0x1a704,0x1a702,0x14f40,0x1a7b0,0x1d3dc,0x14f20,0x1a798,0x1d3ce,0x14f10,0x1a78c, // 110
+ 0x14f08,0x1a786,0x14f04,0x14fb0,0x1a7dc,0x14f98,0x1a7ce,0x14f8c,0x14f86,0x14fdc, // 120
+ 0x14fce,0x1e8a0,0x1f458,0x1fa2e,0x1e890,0x1f44c,0x1e888,0x1f446,0x1e884,0x1e882, // 130
+ 0x1d1a0,0x1e8d8,0x1f46e,0x1d190,0x1e8cc,0x1d188,0x1e8c6,0x1d184,0x1d182,0x1a3a0, // 140
+ 0x1d1d8,0x1e8ee,0x1a390,0x1d1cc,0x1a388,0x1d1c6,0x1a384,0x1a382,0x147a0,0x1a3d8, // 150
+ 0x1d1ee,0x14790,0x1a3cc,0x14788,0x1a3c6,0x14784,0x14782,0x147d8,0x1a3ee,0x147cc, // 160
+ 0x147c6,0x147ee,0x1e850,0x1f42c,0x1e848,0x1f426,0x1e844,0x1e842,0x1d0d0,0x1e86c, // 170
+ 0x1d0c8,0x1e866,0x1d0c4,0x1d0c2,0x1a1d0,0x1d0ec,0x1a1c8,0x1d0e6,0x1a1c4,0x1a1c2, // 180
+ 0x143d0,0x1a1ec,0x143c8,0x1a1e6,0x143c4,0x143c2,0x143ec,0x143e6,0x1e828,0x1f416, // 190
+ 0x1e824,0x1e822,0x1d068,0x1e836,0x1d064,0x1d062,0x1a0e8,0x1d076,0x1a0e4,0x1a0e2, // 200
+ 0x141e8,0x1a0f6,0x141e4,0x141e2,0x1e814,0x1e812,0x1d034,0x1d032,0x1a074,0x1a072, // 210
+ 0x1e540,0x1f2b0,0x1f95c,0x1e520,0x1f298,0x1f94e,0x1e510,0x1f28c,0x1e508,0x1f286, // 220
+ 0x1e504,0x1e502,0x1cb40,0x1e5b0,0x1f2dc,0x1cb20,0x1e598,0x1f2ce,0x1cb10,0x1e58c, // 230
+ 0x1cb08,0x1e586,0x1cb04,0x1cb02,0x19740,0x1cbb0,0x1e5dc,0x19720,0x1cb98,0x1e5ce, // 240
+ 0x19710,0x1cb8c,0x19708,0x1cb86,0x19704,0x19702,0x12f40,0x197b0,0x1cbdc,0x12f20, // 250
+ 0x19798,0x1cbce,0x12f10,0x1978c,0x12f08,0x19786,0x12f04,0x12fb0,0x197dc,0x12f98, // 260
+ 0x197ce,0x12f8c,0x12f86,0x12fdc,0x12fce,0x1f6a0,0x1fb58,0x16bf0,0x1f690,0x1fb4c, // 270
+ 0x169f8,0x1f688,0x1fb46,0x168fc,0x1f684,0x1f682,0x1e4a0,0x1f258,0x1f92e,0x1eda0, // 280
+ 0x1e490,0x1fb6e,0x1ed90,0x1f6cc,0x1f246,0x1ed88,0x1e484,0x1ed84,0x1e482,0x1ed82, // 290
+ 0x1c9a0,0x1e4d8,0x1f26e,0x1dba0,0x1c990,0x1e4cc,0x1db90,0x1edcc,0x1e4c6,0x1db88, // 300
+ 0x1c984,0x1db84,0x1c982,0x1db82,0x193a0,0x1c9d8,0x1e4ee,0x1b7a0,0x19390,0x1c9cc, // 310
+ 0x1b790,0x1dbcc,0x1c9c6,0x1b788,0x19384,0x1b784,0x19382,0x1b782,0x127a0,0x193d8, // 320
+ 0x1c9ee,0x16fa0,0x12790,0x193cc,0x16f90,0x1b7cc,0x193c6,0x16f88,0x12784,0x16f84, // 330
+ 0x12782,0x127d8,0x193ee,0x16fd8,0x127cc,0x16fcc,0x127c6,0x16fc6,0x127ee,0x1f650, // 340
+ 0x1fb2c,0x165f8,0x1f648,0x1fb26,0x164fc,0x1f644,0x1647e,0x1f642,0x1e450,0x1f22c, // 350
+ 0x1ecd0,0x1e448,0x1f226,0x1ecc8,0x1f666,0x1ecc4,0x1e442,0x1ecc2,0x1c8d0,0x1e46c, // 360
+ 0x1d9d0,0x1c8c8,0x1e466,0x1d9c8,0x1ece6,0x1d9c4,0x1c8c2,0x1d9c2,0x191d0,0x1c8ec, // 370
+ 0x1b3d0,0x191c8,0x1c8e6,0x1b3c8,0x1d9e6,0x1b3c4,0x191c2,0x1b3c2,0x123d0,0x191ec, // 380
+ 0x167d0,0x123c8,0x191e6,0x167c8,0x1b3e6,0x167c4,0x123c2,0x167c2,0x123ec,0x167ec, // 390
+ 0x123e6,0x167e6,0x1f628,0x1fb16,0x162fc,0x1f624,0x1627e,0x1f622,0x1e428,0x1f216, // 400
+ 0x1ec68,0x1f636,0x1ec64,0x1e422,0x1ec62,0x1c868,0x1e436,0x1d8e8,0x1c864,0x1d8e4, // 410
+ 0x1c862,0x1d8e2,0x190e8,0x1c876,0x1b1e8,0x1d8f6,0x1b1e4,0x190e2,0x1b1e2,0x121e8, // 420
+ 0x190f6,0x163e8,0x121e4,0x163e4,0x121e2,0x163e2,0x121f6,0x163f6,0x1f614,0x1617e, // 430
+ 0x1f612,0x1e414,0x1ec34,0x1e412,0x1ec32,0x1c834,0x1d874,0x1c832,0x1d872,0x19074, // 440
+ 0x1b0f4,0x19072,0x1b0f2,0x120f4,0x161f4,0x120f2,0x161f2,0x1f60a,0x1e40a,0x1ec1a, // 450
+ 0x1c81a,0x1d83a,0x1903a,0x1b07a,0x1e2a0,0x1f158,0x1f8ae,0x1e290,0x1f14c,0x1e288, // 460
+ 0x1f146,0x1e284,0x1e282,0x1c5a0,0x1e2d8,0x1f16e,0x1c590,0x1e2cc,0x1c588,0x1e2c6, // 470
+ 0x1c584,0x1c582,0x18ba0,0x1c5d8,0x1e2ee,0x18b90,0x1c5cc,0x18b88,0x1c5c6,0x18b84, // 480
+ 0x18b82,0x117a0,0x18bd8,0x1c5ee,0x11790,0x18bcc,0x11788,0x18bc6,0x11784,0x11782, // 490
+ 0x117d8,0x18bee,0x117cc,0x117c6,0x117ee,0x1f350,0x1f9ac,0x135f8,0x1f348,0x1f9a6, // 500
+ 0x134fc,0x1f344,0x1347e,0x1f342,0x1e250,0x1f12c,0x1e6d0,0x1e248,0x1f126,0x1e6c8, // 510
+ 0x1f366,0x1e6c4,0x1e242,0x1e6c2,0x1c4d0,0x1e26c,0x1cdd0,0x1c4c8,0x1e266,0x1cdc8, // 520
+ 0x1e6e6,0x1cdc4,0x1c4c2,0x1cdc2,0x189d0,0x1c4ec,0x19bd0,0x189c8,0x1c4e6,0x19bc8, // 530
+ 0x1cde6,0x19bc4,0x189c2,0x19bc2,0x113d0,0x189ec,0x137d0,0x113c8,0x189e6,0x137c8, // 540
+ 0x19be6,0x137c4,0x113c2,0x137c2,0x113ec,0x137ec,0x113e6,0x137e6,0x1fba8,0x175f0, // 550
+ 0x1bafc,0x1fba4,0x174f8,0x1ba7e,0x1fba2,0x1747c,0x1743e,0x1f328,0x1f996,0x132fc, // 560
+ 0x1f768,0x1fbb6,0x176fc,0x1327e,0x1f764,0x1f322,0x1767e,0x1f762,0x1e228,0x1f116, // 570
+ 0x1e668,0x1e224,0x1eee8,0x1f776,0x1e222,0x1eee4,0x1e662,0x1eee2,0x1c468,0x1e236, // 580
+ 0x1cce8,0x1c464,0x1dde8,0x1cce4,0x1c462,0x1dde4,0x1cce2,0x1dde2,0x188e8,0x1c476, // 590
+ 0x199e8,0x188e4,0x1bbe8,0x199e4,0x188e2,0x1bbe4,0x199e2,0x1bbe2,0x111e8,0x188f6, // 600
+ 0x133e8,0x111e4,0x177e8,0x133e4,0x111e2,0x177e4,0x133e2,0x177e2,0x111f6,0x133f6, // 610
+ 0x1fb94,0x172f8,0x1b97e,0x1fb92,0x1727c,0x1723e,0x1f314,0x1317e,0x1f734,0x1f312, // 620
+ 0x1737e,0x1f732,0x1e214,0x1e634,0x1e212,0x1ee74,0x1e632,0x1ee72,0x1c434,0x1cc74, // 630
+ 0x1c432,0x1dcf4,0x1cc72,0x1dcf2,0x18874,0x198f4,0x18872,0x1b9f4,0x198f2,0x1b9f2, // 640
+ 0x110f4,0x131f4,0x110f2,0x173f4,0x131f2,0x173f2,0x1fb8a,0x1717c,0x1713e,0x1f30a, // 650
+ 0x1f71a,0x1e20a,0x1e61a,0x1ee3a,0x1c41a,0x1cc3a,0x1dc7a,0x1883a,0x1987a,0x1b8fa, // 660
+ 0x1107a,0x130fa,0x171fa,0x170be,0x1e150,0x1f0ac,0x1e148,0x1f0a6,0x1e144,0x1e142, // 670
+ 0x1c2d0,0x1e16c,0x1c2c8,0x1e166,0x1c2c4,0x1c2c2,0x185d0,0x1c2ec,0x185c8,0x1c2e6, // 680
+ 0x185c4,0x185c2,0x10bd0,0x185ec,0x10bc8,0x185e6,0x10bc4,0x10bc2,0x10bec,0x10be6, // 690
+ 0x1f1a8,0x1f8d6,0x11afc,0x1f1a4,0x11a7e,0x1f1a2,0x1e128,0x1f096,0x1e368,0x1e124, // 700
+ 0x1e364,0x1e122,0x1e362,0x1c268,0x1e136,0x1c6e8,0x1c264,0x1c6e4,0x1c262,0x1c6e2, // 710
+ 0x184e8,0x1c276,0x18de8,0x184e4,0x18de4,0x184e2,0x18de2,0x109e8,0x184f6,0x11be8, // 720
+ 0x109e4,0x11be4,0x109e2,0x11be2,0x109f6,0x11bf6,0x1f9d4,0x13af8,0x19d7e,0x1f9d2, // 730
+ 0x13a7c,0x13a3e,0x1f194,0x1197e,0x1f3b4,0x1f192,0x13b7e,0x1f3b2,0x1e114,0x1e334, // 740
+ 0x1e112,0x1e774,0x1e332,0x1e772,0x1c234,0x1c674,0x1c232,0x1cef4,0x1c672,0x1cef2, // 750
+ 0x18474,0x18cf4,0x18472,0x19df4,0x18cf2,0x19df2,0x108f4,0x119f4,0x108f2,0x13bf4, // 760
+ 0x119f2,0x13bf2,0x17af0,0x1bd7c,0x17a78,0x1bd3e,0x17a3c,0x17a1e,0x1f9ca,0x1397c, // 770
+ 0x1fbda,0x17b7c,0x1393e,0x17b3e,0x1f18a,0x1f39a,0x1f7ba,0x1e10a,0x1e31a,0x1e73a, // 780
+ 0x1ef7a,0x1c21a,0x1c63a,0x1ce7a,0x1defa,0x1843a,0x18c7a,0x19cfa,0x1bdfa,0x1087a, // 790
+ 0x118fa,0x139fa,0x17978,0x1bcbe,0x1793c,0x1791e,0x138be,0x179be,0x178bc,0x1789e, // 800
+ 0x1785e,0x1e0a8,0x1e0a4,0x1e0a2,0x1c168,0x1e0b6,0x1c164,0x1c162,0x182e8,0x1c176, // 810
+ 0x182e4,0x182e2,0x105e8,0x182f6,0x105e4,0x105e2,0x105f6,0x1f0d4,0x10d7e,0x1f0d2, // 820
+ 0x1e094,0x1e1b4,0x1e092,0x1e1b2,0x1c134,0x1c374,0x1c132,0x1c372,0x18274,0x186f4, // 830
+ 0x18272,0x186f2,0x104f4,0x10df4,0x104f2,0x10df2,0x1f8ea,0x11d7c,0x11d3e,0x1f0ca, // 840
+ 0x1f1da,0x1e08a,0x1e19a,0x1e3ba,0x1c11a,0x1c33a,0x1c77a,0x1823a,0x1867a,0x18efa, // 850
+ 0x1047a,0x10cfa,0x11dfa,0x13d78,0x19ebe,0x13d3c,0x13d1e,0x11cbe,0x13dbe,0x17d70, // 860
+ 0x1bebc,0x17d38,0x1be9e,0x17d1c,0x17d0e,0x13cbc,0x17dbc,0x13c9e,0x17d9e,0x17cb8, // 870
+ 0x1be5e,0x17c9c,0x17c8e,0x13c5e,0x17cde,0x17c5c,0x17c4e,0x17c2e,0x1c0b4,0x1c0b2, // 880
+ 0x18174,0x18172,0x102f4,0x102f2,0x1e0da,0x1c09a,0x1c1ba,0x1813a,0x1837a,0x1027a, // 890
+ 0x106fa,0x10ebe,0x11ebc,0x11e9e,0x13eb8,0x19f5e,0x13e9c,0x13e8e,0x11e5e,0x13ede, // 900
+ 0x17eb0,0x1bf5c,0x17e98,0x1bf4e,0x17e8c,0x17e86,0x13e5c,0x17edc,0x13e4e,0x17ece, // 910
+ 0x17e58,0x1bf2e,0x17e4c,0x17e46,0x13e2e,0x17e6e,0x17e2c,0x17e26,0x10f5e,0x11f5c, // 920
+ 0x11f4e,0x13f58,0x19fae,0x13f4c,0x13f46,0x11f2e,0x13f6e,0x13f2c,0x13f26), // 929
+ array( // cluster 6 -----------------------------------------------------------------------
+ 0x1abe0,0x1d5f8,0x153c0,0x1a9f0,0x1d4fc,0x151e0,0x1a8f8,0x1d47e,0x150f0,0x1a87c, // 10
+ 0x15078,0x1fad0,0x15be0,0x1adf8,0x1fac8,0x159f0,0x1acfc,0x1fac4,0x158f8,0x1ac7e, // 20
+ 0x1fac2,0x1587c,0x1f5d0,0x1faec,0x15df8,0x1f5c8,0x1fae6,0x15cfc,0x1f5c4,0x15c7e, // 30
+ 0x1f5c2,0x1ebd0,0x1f5ec,0x1ebc8,0x1f5e6,0x1ebc4,0x1ebc2,0x1d7d0,0x1ebec,0x1d7c8, // 40
+ 0x1ebe6,0x1d7c4,0x1d7c2,0x1afd0,0x1d7ec,0x1afc8,0x1d7e6,0x1afc4,0x14bc0,0x1a5f0, // 50
+ 0x1d2fc,0x149e0,0x1a4f8,0x1d27e,0x148f0,0x1a47c,0x14878,0x1a43e,0x1483c,0x1fa68, // 60
+ 0x14df0,0x1a6fc,0x1fa64,0x14cf8,0x1a67e,0x1fa62,0x14c7c,0x14c3e,0x1f4e8,0x1fa76, // 70
+ 0x14efc,0x1f4e4,0x14e7e,0x1f4e2,0x1e9e8,0x1f4f6,0x1e9e4,0x1e9e2,0x1d3e8,0x1e9f6, // 80
+ 0x1d3e4,0x1d3e2,0x1a7e8,0x1d3f6,0x1a7e4,0x1a7e2,0x145e0,0x1a2f8,0x1d17e,0x144f0, // 90
+ 0x1a27c,0x14478,0x1a23e,0x1443c,0x1441e,0x1fa34,0x146f8,0x1a37e,0x1fa32,0x1467c, // 100
+ 0x1463e,0x1f474,0x1477e,0x1f472,0x1e8f4,0x1e8f2,0x1d1f4,0x1d1f2,0x1a3f4,0x1a3f2, // 110
+ 0x142f0,0x1a17c,0x14278,0x1a13e,0x1423c,0x1421e,0x1fa1a,0x1437c,0x1433e,0x1f43a, // 120
+ 0x1e87a,0x1d0fa,0x14178,0x1a0be,0x1413c,0x1411e,0x141be,0x140bc,0x1409e,0x12bc0, // 130
+ 0x195f0,0x1cafc,0x129e0,0x194f8,0x1ca7e,0x128f0,0x1947c,0x12878,0x1943e,0x1283c, // 140
+ 0x1f968,0x12df0,0x196fc,0x1f964,0x12cf8,0x1967e,0x1f962,0x12c7c,0x12c3e,0x1f2e8, // 150
+ 0x1f976,0x12efc,0x1f2e4,0x12e7e,0x1f2e2,0x1e5e8,0x1f2f6,0x1e5e4,0x1e5e2,0x1cbe8, // 160
+ 0x1e5f6,0x1cbe4,0x1cbe2,0x197e8,0x1cbf6,0x197e4,0x197e2,0x1b5e0,0x1daf8,0x1ed7e, // 170
+ 0x169c0,0x1b4f0,0x1da7c,0x168e0,0x1b478,0x1da3e,0x16870,0x1b43c,0x16838,0x1b41e, // 180
+ 0x1681c,0x125e0,0x192f8,0x1c97e,0x16de0,0x124f0,0x1927c,0x16cf0,0x1b67c,0x1923e, // 190
+ 0x16c78,0x1243c,0x16c3c,0x1241e,0x16c1e,0x1f934,0x126f8,0x1937e,0x1fb74,0x1f932, // 200
+ 0x16ef8,0x1267c,0x1fb72,0x16e7c,0x1263e,0x16e3e,0x1f274,0x1277e,0x1f6f4,0x1f272, // 210
+ 0x16f7e,0x1f6f2,0x1e4f4,0x1edf4,0x1e4f2,0x1edf2,0x1c9f4,0x1dbf4,0x1c9f2,0x1dbf2, // 220
+ 0x193f4,0x193f2,0x165c0,0x1b2f0,0x1d97c,0x164e0,0x1b278,0x1d93e,0x16470,0x1b23c, // 230
+ 0x16438,0x1b21e,0x1641c,0x1640e,0x122f0,0x1917c,0x166f0,0x12278,0x1913e,0x16678, // 240
+ 0x1b33e,0x1663c,0x1221e,0x1661e,0x1f91a,0x1237c,0x1fb3a,0x1677c,0x1233e,0x1673e, // 250
+ 0x1f23a,0x1f67a,0x1e47a,0x1ecfa,0x1c8fa,0x1d9fa,0x191fa,0x162e0,0x1b178,0x1d8be, // 260
+ 0x16270,0x1b13c,0x16238,0x1b11e,0x1621c,0x1620e,0x12178,0x190be,0x16378,0x1213c, // 270
+ 0x1633c,0x1211e,0x1631e,0x121be,0x163be,0x16170,0x1b0bc,0x16138,0x1b09e,0x1611c, // 280
+ 0x1610e,0x120bc,0x161bc,0x1209e,0x1619e,0x160b8,0x1b05e,0x1609c,0x1608e,0x1205e, // 290
+ 0x160de,0x1605c,0x1604e,0x115e0,0x18af8,0x1c57e,0x114f0,0x18a7c,0x11478,0x18a3e, // 300
+ 0x1143c,0x1141e,0x1f8b4,0x116f8,0x18b7e,0x1f8b2,0x1167c,0x1163e,0x1f174,0x1177e, // 310
+ 0x1f172,0x1e2f4,0x1e2f2,0x1c5f4,0x1c5f2,0x18bf4,0x18bf2,0x135c0,0x19af0,0x1cd7c, // 320
+ 0x134e0,0x19a78,0x1cd3e,0x13470,0x19a3c,0x13438,0x19a1e,0x1341c,0x1340e,0x112f0, // 330
+ 0x1897c,0x136f0,0x11278,0x1893e,0x13678,0x19b3e,0x1363c,0x1121e,0x1361e,0x1f89a, // 340
+ 0x1137c,0x1f9ba,0x1377c,0x1133e,0x1373e,0x1f13a,0x1f37a,0x1e27a,0x1e6fa,0x1c4fa, // 350
+ 0x1cdfa,0x189fa,0x1bae0,0x1dd78,0x1eebe,0x174c0,0x1ba70,0x1dd3c,0x17460,0x1ba38, // 360
+ 0x1dd1e,0x17430,0x1ba1c,0x17418,0x1ba0e,0x1740c,0x132e0,0x19978,0x1ccbe,0x176e0, // 370
+ 0x13270,0x1993c,0x17670,0x1bb3c,0x1991e,0x17638,0x1321c,0x1761c,0x1320e,0x1760e, // 380
+ 0x11178,0x188be,0x13378,0x1113c,0x17778,0x1333c,0x1111e,0x1773c,0x1331e,0x1771e, // 390
+ 0x111be,0x133be,0x177be,0x172c0,0x1b970,0x1dcbc,0x17260,0x1b938,0x1dc9e,0x17230, // 400
+ 0x1b91c,0x17218,0x1b90e,0x1720c,0x17206,0x13170,0x198bc,0x17370,0x13138,0x1989e, // 410
+ 0x17338,0x1b99e,0x1731c,0x1310e,0x1730e,0x110bc,0x131bc,0x1109e,0x173bc,0x1319e, // 420
+ 0x1739e,0x17160,0x1b8b8,0x1dc5e,0x17130,0x1b89c,0x17118,0x1b88e,0x1710c,0x17106, // 430
+ 0x130b8,0x1985e,0x171b8,0x1309c,0x1719c,0x1308e,0x1718e,0x1105e,0x130de,0x171de, // 440
+ 0x170b0,0x1b85c,0x17098,0x1b84e,0x1708c,0x17086,0x1305c,0x170dc,0x1304e,0x170ce, // 450
+ 0x17058,0x1b82e,0x1704c,0x17046,0x1302e,0x1706e,0x1702c,0x17026,0x10af0,0x1857c, // 460
+ 0x10a78,0x1853e,0x10a3c,0x10a1e,0x10b7c,0x10b3e,0x1f0ba,0x1e17a,0x1c2fa,0x185fa, // 470
+ 0x11ae0,0x18d78,0x1c6be,0x11a70,0x18d3c,0x11a38,0x18d1e,0x11a1c,0x11a0e,0x10978, // 480
+ 0x184be,0x11b78,0x1093c,0x11b3c,0x1091e,0x11b1e,0x109be,0x11bbe,0x13ac0,0x19d70, // 490
+ 0x1cebc,0x13a60,0x19d38,0x1ce9e,0x13a30,0x19d1c,0x13a18,0x19d0e,0x13a0c,0x13a06, // 500
+ 0x11970,0x18cbc,0x13b70,0x11938,0x18c9e,0x13b38,0x1191c,0x13b1c,0x1190e,0x13b0e, // 510
+ 0x108bc,0x119bc,0x1089e,0x13bbc,0x1199e,0x13b9e,0x1bd60,0x1deb8,0x1ef5e,0x17a40, // 520
+ 0x1bd30,0x1de9c,0x17a20,0x1bd18,0x1de8e,0x17a10,0x1bd0c,0x17a08,0x1bd06,0x17a04, // 530
+ 0x13960,0x19cb8,0x1ce5e,0x17b60,0x13930,0x19c9c,0x17b30,0x1bd9c,0x19c8e,0x17b18, // 540
+ 0x1390c,0x17b0c,0x13906,0x17b06,0x118b8,0x18c5e,0x139b8,0x1189c,0x17bb8,0x1399c, // 550
+ 0x1188e,0x17b9c,0x1398e,0x17b8e,0x1085e,0x118de,0x139de,0x17bde,0x17940,0x1bcb0, // 560
+ 0x1de5c,0x17920,0x1bc98,0x1de4e,0x17910,0x1bc8c,0x17908,0x1bc86,0x17904,0x17902, // 570
+ 0x138b0,0x19c5c,0x179b0,0x13898,0x19c4e,0x17998,0x1bcce,0x1798c,0x13886,0x17986, // 580
+ 0x1185c,0x138dc,0x1184e,0x179dc,0x138ce,0x179ce,0x178a0,0x1bc58,0x1de2e,0x17890, // 590
+ 0x1bc4c,0x17888,0x1bc46,0x17884,0x17882,0x13858,0x19c2e,0x178d8,0x1384c,0x178cc, // 600
+ 0x13846,0x178c6,0x1182e,0x1386e,0x178ee,0x17850,0x1bc2c,0x17848,0x1bc26,0x17844, // 610
+ 0x17842,0x1382c,0x1786c,0x13826,0x17866,0x17828,0x1bc16,0x17824,0x17822,0x13816, // 620
+ 0x17836,0x10578,0x182be,0x1053c,0x1051e,0x105be,0x10d70,0x186bc,0x10d38,0x1869e, // 630
+ 0x10d1c,0x10d0e,0x104bc,0x10dbc,0x1049e,0x10d9e,0x11d60,0x18eb8,0x1c75e,0x11d30, // 640
+ 0x18e9c,0x11d18,0x18e8e,0x11d0c,0x11d06,0x10cb8,0x1865e,0x11db8,0x10c9c,0x11d9c, // 650
+ 0x10c8e,0x11d8e,0x1045e,0x10cde,0x11dde,0x13d40,0x19eb0,0x1cf5c,0x13d20,0x19e98, // 660
+ 0x1cf4e,0x13d10,0x19e8c,0x13d08,0x19e86,0x13d04,0x13d02,0x11cb0,0x18e5c,0x13db0, // 670
+ 0x11c98,0x18e4e,0x13d98,0x19ece,0x13d8c,0x11c86,0x13d86,0x10c5c,0x11cdc,0x10c4e, // 680
+ 0x13ddc,0x11cce,0x13dce,0x1bea0,0x1df58,0x1efae,0x1be90,0x1df4c,0x1be88,0x1df46, // 690
+ 0x1be84,0x1be82,0x13ca0,0x19e58,0x1cf2e,0x17da0,0x13c90,0x19e4c,0x17d90,0x1becc, // 700
+ 0x19e46,0x17d88,0x13c84,0x17d84,0x13c82,0x17d82,0x11c58,0x18e2e,0x13cd8,0x11c4c, // 710
+ 0x17dd8,0x13ccc,0x11c46,0x17dcc,0x13cc6,0x17dc6,0x10c2e,0x11c6e,0x13cee,0x17dee, // 720
+ 0x1be50,0x1df2c,0x1be48,0x1df26,0x1be44,0x1be42,0x13c50,0x19e2c,0x17cd0,0x13c48, // 730
+ 0x19e26,0x17cc8,0x1be66,0x17cc4,0x13c42,0x17cc2,0x11c2c,0x13c6c,0x11c26,0x17cec, // 740
+ 0x13c66,0x17ce6,0x1be28,0x1df16,0x1be24,0x1be22,0x13c28,0x19e16,0x17c68,0x13c24, // 750
+ 0x17c64,0x13c22,0x17c62,0x11c16,0x13c36,0x17c76,0x1be14,0x1be12,0x13c14,0x17c34, // 760
+ 0x13c12,0x17c32,0x102bc,0x1029e,0x106b8,0x1835e,0x1069c,0x1068e,0x1025e,0x106de, // 770
+ 0x10eb0,0x1875c,0x10e98,0x1874e,0x10e8c,0x10e86,0x1065c,0x10edc,0x1064e,0x10ece, // 780
+ 0x11ea0,0x18f58,0x1c7ae,0x11e90,0x18f4c,0x11e88,0x18f46,0x11e84,0x11e82,0x10e58, // 790
+ 0x1872e,0x11ed8,0x18f6e,0x11ecc,0x10e46,0x11ec6,0x1062e,0x10e6e,0x11eee,0x19f50, // 800
+ 0x1cfac,0x19f48,0x1cfa6,0x19f44,0x19f42,0x11e50,0x18f2c,0x13ed0,0x19f6c,0x18f26, // 810
+ 0x13ec8,0x11e44,0x13ec4,0x11e42,0x13ec2,0x10e2c,0x11e6c,0x10e26,0x13eec,0x11e66, // 820
+ 0x13ee6,0x1dfa8,0x1efd6,0x1dfa4,0x1dfa2,0x19f28,0x1cf96,0x1bf68,0x19f24,0x1bf64, // 830
+ 0x19f22,0x1bf62,0x11e28,0x18f16,0x13e68,0x11e24,0x17ee8,0x13e64,0x11e22,0x17ee4, // 840
+ 0x13e62,0x17ee2,0x10e16,0x11e36,0x13e76,0x17ef6,0x1df94,0x1df92,0x19f14,0x1bf34, // 850
+ 0x19f12,0x1bf32,0x11e14,0x13e34,0x11e12,0x17e74,0x13e32,0x17e72,0x1df8a,0x19f0a, // 860
+ 0x1bf1a,0x11e0a,0x13e1a,0x17e3a,0x1035c,0x1034e,0x10758,0x183ae,0x1074c,0x10746, // 870
+ 0x1032e,0x1076e,0x10f50,0x187ac,0x10f48,0x187a6,0x10f44,0x10f42,0x1072c,0x10f6c, // 880
+ 0x10726,0x10f66,0x18fa8,0x1c7d6,0x18fa4,0x18fa2,0x10f28,0x18796,0x11f68,0x18fb6, // 890
+ 0x11f64,0x10f22,0x11f62,0x10716,0x10f36,0x11f76,0x1cfd4,0x1cfd2,0x18f94,0x19fb4, // 900
+ 0x18f92,0x19fb2,0x10f14,0x11f34,0x10f12,0x13f74,0x11f32,0x13f72,0x1cfca,0x18f8a, // 910
+ 0x19f9a,0x10f0a,0x11f1a,0x13f3a,0x103ac,0x103a6,0x107a8,0x183d6,0x107a4,0x107a2, // 920
+ 0x10396,0x107b6,0x187d4,0x187d2,0x10794,0x10fb4,0x10792,0x10fb2,0x1c7ea) // 929
+ ); // end of $clusters array
+
+ /**
+ * Array of factors of the Reed-Solomon polynomial equations used for error correction; one sub array for each correction level (0-8).
+ * @protected
+ */
+ protected $rsfactors = array(
+ array( // ECL 0 (2 factors) -------------------------------------------------------------------------------
+ 0x01b,0x395), // 2
+ array( // ECL 1 (4 factors) -------------------------------------------------------------------------------
+ 0x20a,0x238,0x2d3,0x329), // 4
+ array( // ECL 2 (8 factors) -------------------------------------------------------------------------------
+ 0x0ed,0x134,0x1b4,0x11c,0x286,0x28d,0x1ac,0x17b), // 8
+ array( // ECL 3 (16 factors) ------------------------------------------------------------------------------
+ 0x112,0x232,0x0e8,0x2f3,0x257,0x20c,0x321,0x084,0x127,0x074,0x1ba,0x1ac,0x127,0x02a,0x0b0,0x041),// 16
+ array( // ECL 4 (32 factors) ------------------------------------------------------------------------------
+ 0x169,0x23f,0x39a,0x20d,0x0b0,0x24a,0x280,0x141,0x218,0x2e6,0x2a5,0x2e6,0x2af,0x11c,0x0c1,0x205, // 16
+ 0x111,0x1ee,0x107,0x093,0x251,0x320,0x23b,0x140,0x323,0x085,0x0e7,0x186,0x2ad,0x14a,0x03f,0x19a),// 32
+ array( // ECL 5 (64 factors) ------------------------------------------------------------------------------
+ 0x21b,0x1a6,0x006,0x05d,0x35e,0x303,0x1c5,0x06a,0x262,0x11f,0x06b,0x1f9,0x2dd,0x36d,0x17d,0x264, // 16
+ 0x2d3,0x1dc,0x1ce,0x0ac,0x1ae,0x261,0x35a,0x336,0x21f,0x178,0x1ff,0x190,0x2a0,0x2fa,0x11b,0x0b8, // 32
+ 0x1b8,0x023,0x207,0x01f,0x1cc,0x252,0x0e1,0x217,0x205,0x160,0x25d,0x09e,0x28b,0x0c9,0x1e8,0x1f6, // 48
+ 0x288,0x2dd,0x2cd,0x053,0x194,0x061,0x118,0x303,0x348,0x275,0x004,0x17d,0x34b,0x26f,0x108,0x21f),// 64
+ array( // ECL 6 (128 factors) -----------------------------------------------------------------------------
+ 0x209,0x136,0x360,0x223,0x35a,0x244,0x128,0x17b,0x035,0x30b,0x381,0x1bc,0x190,0x39d,0x2ed,0x19f, // 16
+ 0x336,0x05d,0x0d9,0x0d0,0x3a0,0x0f4,0x247,0x26c,0x0f6,0x094,0x1bf,0x277,0x124,0x38c,0x1ea,0x2c0, // 32
+ 0x204,0x102,0x1c9,0x38b,0x252,0x2d3,0x2a2,0x124,0x110,0x060,0x2ac,0x1b0,0x2ae,0x25e,0x35c,0x239, // 48
+ 0x0c1,0x0db,0x081,0x0ba,0x0ec,0x11f,0x0c0,0x307,0x116,0x0ad,0x028,0x17b,0x2c8,0x1cf,0x286,0x308, // 64
+ 0x0ab,0x1eb,0x129,0x2fb,0x09c,0x2dc,0x05f,0x10e,0x1bf,0x05a,0x1fb,0x030,0x0e4,0x335,0x328,0x382, // 80
+ 0x310,0x297,0x273,0x17a,0x17e,0x106,0x17c,0x25a,0x2f2,0x150,0x059,0x266,0x057,0x1b0,0x29e,0x268, // 96
+ 0x09d,0x176,0x0f2,0x2d6,0x258,0x10d,0x177,0x382,0x34d,0x1c6,0x162,0x082,0x32e,0x24b,0x324,0x022, // 112
+ 0x0d3,0x14a,0x21b,0x129,0x33b,0x361,0x025,0x205,0x342,0x13b,0x226,0x056,0x321,0x004,0x06c,0x21b),// 128
+ array( // ECL 7 (256 factors) -----------------------------------------------------------------------------
+ 0x20c,0x37e,0x04b,0x2fe,0x372,0x359,0x04a,0x0cc,0x052,0x24a,0x2c4,0x0fa,0x389,0x312,0x08a,0x2d0, // 16
+ 0x35a,0x0c2,0x137,0x391,0x113,0x0be,0x177,0x352,0x1b6,0x2dd,0x0c2,0x118,0x0c9,0x118,0x33c,0x2f5, // 32
+ 0x2c6,0x32e,0x397,0x059,0x044,0x239,0x00b,0x0cc,0x31c,0x25d,0x21c,0x391,0x321,0x2bc,0x31f,0x089, // 48
+ 0x1b7,0x1a2,0x250,0x29c,0x161,0x35b,0x172,0x2b6,0x145,0x0f0,0x0d8,0x101,0x11c,0x225,0x0d1,0x374, // 64
+ 0x13b,0x046,0x149,0x319,0x1ea,0x112,0x36d,0x0a2,0x2ed,0x32c,0x2ac,0x1cd,0x14e,0x178,0x351,0x209, // 80
+ 0x133,0x123,0x323,0x2c8,0x013,0x166,0x18f,0x38c,0x067,0x1ff,0x033,0x008,0x205,0x0e1,0x121,0x1d6, // 96
+ 0x27d,0x2db,0x042,0x0ff,0x395,0x10d,0x1cf,0x33e,0x2da,0x1b1,0x350,0x249,0x088,0x21a,0x38a,0x05a, // 112
+ 0x002,0x122,0x2e7,0x0c7,0x28f,0x387,0x149,0x031,0x322,0x244,0x163,0x24c,0x0bc,0x1ce,0x00a,0x086, // 128
+ 0x274,0x140,0x1df,0x082,0x2e3,0x047,0x107,0x13e,0x176,0x259,0x0c0,0x25d,0x08e,0x2a1,0x2af,0x0ea, // 144
+ 0x2d2,0x180,0x0b1,0x2f0,0x25f,0x280,0x1c7,0x0c1,0x2b1,0x2c3,0x325,0x281,0x030,0x03c,0x2dc,0x26d, // 160
+ 0x37f,0x220,0x105,0x354,0x28f,0x135,0x2b9,0x2f3,0x2f4,0x03c,0x0e7,0x305,0x1b2,0x1a5,0x2d6,0x210, // 176
+ 0x1f7,0x076,0x031,0x31b,0x020,0x090,0x1f4,0x0ee,0x344,0x18a,0x118,0x236,0x13f,0x009,0x287,0x226, // 192
+ 0x049,0x392,0x156,0x07e,0x020,0x2a9,0x14b,0x318,0x26c,0x03c,0x261,0x1b9,0x0b4,0x317,0x37d,0x2f2, // 208
+ 0x25d,0x17f,0x0e4,0x2ed,0x2f8,0x0d5,0x036,0x129,0x086,0x036,0x342,0x12b,0x39a,0x0bf,0x38e,0x214, // 224
+ 0x261,0x33d,0x0bd,0x014,0x0a7,0x01d,0x368,0x1c1,0x053,0x192,0x029,0x290,0x1f9,0x243,0x1e1,0x0ad, // 240
+ 0x194,0x0fb,0x2b0,0x05f,0x1f1,0x22b,0x282,0x21f,0x133,0x09f,0x39c,0x22e,0x288,0x037,0x1f1,0x00a),// 256
+ array( // ECL 8 (512 factors) -----------------------------------------------------------------------------
+ 0x160,0x04d,0x175,0x1f8,0x023,0x257,0x1ac,0x0cf,0x199,0x23e,0x076,0x1f2,0x11d,0x17c,0x15e,0x1ec, // 16
+ 0x0c5,0x109,0x398,0x09b,0x392,0x12b,0x0e5,0x283,0x126,0x367,0x132,0x058,0x057,0x0c1,0x160,0x30d, // 32
+ 0x34e,0x04b,0x147,0x208,0x1b3,0x21f,0x0cb,0x29a,0x0f9,0x15a,0x30d,0x26d,0x280,0x10c,0x31a,0x216, // 48
+ 0x21b,0x30d,0x198,0x186,0x284,0x066,0x1dc,0x1f3,0x122,0x278,0x221,0x025,0x35a,0x394,0x228,0x029, // 64
+ 0x21e,0x121,0x07a,0x110,0x17f,0x320,0x1e5,0x062,0x2f0,0x1d8,0x2f9,0x06b,0x310,0x35c,0x292,0x2e5, // 80
+ 0x122,0x0cc,0x2a9,0x197,0x357,0x055,0x063,0x03e,0x1e2,0x0b4,0x014,0x129,0x1c3,0x251,0x391,0x08e, // 96
+ 0x328,0x2ac,0x11f,0x218,0x231,0x04c,0x28d,0x383,0x2d9,0x237,0x2e8,0x186,0x201,0x0c0,0x204,0x102, // 112
+ 0x0f0,0x206,0x31a,0x18b,0x300,0x350,0x033,0x262,0x180,0x0a8,0x0be,0x33a,0x148,0x254,0x312,0x12f, // 128
+ 0x23a,0x17d,0x19f,0x281,0x09c,0x0ed,0x097,0x1ad,0x213,0x0cf,0x2a4,0x2c6,0x059,0x0a8,0x130,0x192, // 144
+ 0x028,0x2c4,0x23f,0x0a2,0x360,0x0e5,0x041,0x35d,0x349,0x200,0x0a4,0x1dd,0x0dd,0x05c,0x166,0x311, // 160
+ 0x120,0x165,0x352,0x344,0x33b,0x2e0,0x2c3,0x05e,0x008,0x1ee,0x072,0x209,0x002,0x1f3,0x353,0x21f, // 176
+ 0x098,0x2d9,0x303,0x05f,0x0f8,0x169,0x242,0x143,0x358,0x31d,0x121,0x033,0x2ac,0x1d2,0x215,0x334, // 192
+ 0x29d,0x02d,0x386,0x1c4,0x0a7,0x156,0x0f4,0x0ad,0x023,0x1cf,0x28b,0x033,0x2bb,0x24f,0x1c4,0x242, // 208
+ 0x025,0x07c,0x12a,0x14c,0x228,0x02b,0x1ab,0x077,0x296,0x309,0x1db,0x352,0x2fc,0x16c,0x242,0x38f, // 224
+ 0x11b,0x2c7,0x1d8,0x1a4,0x0f5,0x120,0x252,0x18a,0x1ff,0x147,0x24d,0x309,0x2bb,0x2b0,0x02b,0x198, // 240
+ 0x34a,0x17f,0x2d1,0x209,0x230,0x284,0x2ca,0x22f,0x03e,0x091,0x369,0x297,0x2c9,0x09f,0x2a0,0x2d9, // 256
+ 0x270,0x03b,0x0c1,0x1a1,0x09e,0x0d1,0x233,0x234,0x157,0x2b5,0x06d,0x260,0x233,0x16d,0x0b5,0x304, // 272
+ 0x2a5,0x136,0x0f8,0x161,0x2c4,0x19a,0x243,0x366,0x269,0x349,0x278,0x35c,0x121,0x218,0x023,0x309, // 288
+ 0x26a,0x24a,0x1a8,0x341,0x04d,0x255,0x15a,0x10d,0x2f5,0x278,0x2b7,0x2ef,0x14b,0x0f7,0x0b8,0x02d, // 304
+ 0x313,0x2a8,0x012,0x042,0x197,0x171,0x036,0x1ec,0x0e4,0x265,0x33e,0x39a,0x1b5,0x207,0x284,0x389, // 320
+ 0x315,0x1a4,0x131,0x1b9,0x0cf,0x12c,0x37c,0x33b,0x08d,0x219,0x17d,0x296,0x201,0x038,0x0fc,0x155, // 336
+ 0x0f2,0x31d,0x346,0x345,0x2d0,0x0e0,0x133,0x277,0x03d,0x057,0x230,0x136,0x2f4,0x299,0x18d,0x328, // 352
+ 0x353,0x135,0x1d9,0x31b,0x17a,0x01f,0x287,0x393,0x1cb,0x326,0x24e,0x2db,0x1a9,0x0d8,0x224,0x0f9, // 368
+ 0x141,0x371,0x2bb,0x217,0x2a1,0x30e,0x0d2,0x32f,0x389,0x12f,0x34b,0x39a,0x119,0x049,0x1d5,0x317, // 384
+ 0x294,0x0a2,0x1f2,0x134,0x09b,0x1a6,0x38b,0x331,0x0bb,0x03e,0x010,0x1a9,0x217,0x150,0x11e,0x1b5, // 400
+ 0x177,0x111,0x262,0x128,0x0b7,0x39b,0x074,0x29b,0x2ef,0x161,0x03e,0x16e,0x2b3,0x17b,0x2af,0x34a, // 416
+ 0x025,0x165,0x2d0,0x2e6,0x14a,0x005,0x027,0x39b,0x137,0x1a8,0x0f2,0x2ed,0x141,0x036,0x29d,0x13c, // 432
+ 0x156,0x12b,0x216,0x069,0x29b,0x1e8,0x280,0x2a0,0x240,0x21c,0x13c,0x1e6,0x2d1,0x262,0x02e,0x290, // 448
+ 0x1bf,0x0ab,0x268,0x1d0,0x0be,0x213,0x129,0x141,0x2fa,0x2f0,0x215,0x0af,0x086,0x00e,0x17d,0x1b1, // 464
+ 0x2cd,0x02d,0x06f,0x014,0x254,0x11c,0x2e0,0x08a,0x286,0x19b,0x36d,0x29d,0x08d,0x397,0x02d,0x30c, // 480
+ 0x197,0x0a4,0x14c,0x383,0x0a5,0x2d6,0x258,0x145,0x1f2,0x28f,0x165,0x2f0,0x300,0x0df,0x351,0x287, // 496
+ 0x03f,0x136,0x35f,0x0fb,0x16e,0x130,0x11a,0x2e2,0x2a3,0x19a,0x185,0x0f4,0x01f,0x079,0x12f,0x107) // 512
+ );
+
+ /**
+ * This is the class constructor.
+ * Creates a PDF417 object
+ * @param $code (string) code to represent using PDF417
+ * @param $ecl (int) error correction level (0-8); default -1 = automatic correction level
+ * @param $aspectratio (float) the width to height of the symbol (excluding quiet zones)
+ * @param $macro (array) information for macro block
+ * @public
+ */
+ public function __construct($code, $ecl=-1, $aspectratio=2, $macro=array()) {
+ $barcode_array = array();
+ if ((is_null($code)) OR ($code == '\0') OR ($code == '')) {
+ return false;
+ }
+ // get the input sequence array
+ $sequence = $this->getInputSequences($code);
+ $codewords = array(); // array of code-words
+ foreach($sequence as $seq) {
+ $cw = $this->getCompaction($seq[0], $seq[1], true);
+ $codewords = array_merge($codewords, $cw);
+ }
+ if ($codewords[0] == 900) {
+ // Text Alpha is the default mode, so remove the first code
+ array_shift($codewords);
+ }
+ // count number of codewords
+ $numcw = count($codewords);
+ if ($numcw > 925) {
+ // reached maximum data codeword capacity
+ return false;
+ }
+ // build macro control block codewords
+ if (!empty($macro)) {
+ $macrocw = array();
+ // beginning of macro control block
+ $macrocw[] = 928;
+ // segment index
+ $cw = $this->getCompaction(902, sprintf('%05d', $macro['segment_index']), false);
+ $macrocw = array_merge($macrocw, $cw);
+ // file ID
+ $cw = $this->getCompaction(900, $macro['file_id'], false);
+ $macrocw = array_merge($macrocw, $cw);
+ // optional fields
+ $optmodes = array(900,902,902,900,900,902,902);
+ $optsize = array(-1,2,4,-1,-1,-1,2);
+ foreach ($optmodes as $k => $omode) {
+ if (isset($macro['option_'.$k])) {
+ $macrocw[] = 923;
+ $macrocw[] = $k;
+ if ($optsize[$k] == 2) {
+ $macro['option_'.$k] = sprintf('%05d', $macro['option_'.$k]);
+ } elseif ($optsize[$k] == 4) {
+ $macro['option_'.$k] = sprintf('%010d', $macro['option_'.$k]);
+ }
+ $cw = $this->getCompaction($omode, $macro['option_'.$k], false);
+ $macrocw = array_merge($macrocw, $cw);
+ }
+ }
+ if ($macro['segment_index'] == ($macro['segment_total'] - 1)) {
+ // end of control block
+ $macrocw[] = 922;
+ }
+ // update total codewords
+ $numcw += count($macrocw);
+ }
+ // set error correction level
+ $ecl = $this->getErrorCorrectionLevel($ecl, $numcw);
+ // number of codewords for error correction
+ $errsize = (2 << $ecl);
+ // calculate number of columns (number of codewords per row) and rows
+ $nce = ($numcw + $errsize + 1);
+ $cols = round((sqrt(4761 + (68 * $aspectratio * ROWHEIGHT * $nce)) - 69) / 34);
+ // adjust cols
+ if ($cols < 1) {
+ $cols = 1;
+ } elseif ($cols > 30) {
+ $cols = 30;
+ }
+ $rows = ceil($nce / $cols);
+ $size = ($cols * $rows);
+ // adjust rows
+ if (($rows < 3) OR ($rows > 90)) {
+ if ($rows < 3) {
+ $rows = 3;
+ } elseif ($rows > 90) {
+ $rows = 90;
+ }
+ $cols = ceil($size / $rows);
+ $size = ($cols * $rows);
+ }
+ if ($size > 928) {
+ // set dimensions to get maximum capacity
+ if (abs($aspectratio - (17 * 29 / 32)) < abs($aspectratio - (17 * 16 / 58))) {
+ $cols = 29;
+ $rows = 32;
+ } else {
+ $cols = 16;
+ $rows = 58;
+ }
+ $size = 928;
+ }
+ // calculate padding
+ $pad = ($size - $nce);
+ if ($pad > 0) {
+ if (($size - $rows) == $nce) {
+ --$rows;
+ $size -= $rows;
+ } else {
+ // add pading
+ $codewords = array_merge($codewords, array_fill(0, $pad, 900));
+ }
+ }
+ if (!empty($macro)) {
+ // add macro section
+ $codewords = array_merge($codewords, $macrocw);
+ }
+ // Symbol Lenght Descriptor (number of data codewords including Symbol Lenght Descriptor and pad codewords)
+ $sld = $size - $errsize;
+ // add symbol length description
+ array_unshift($codewords, $sld);
+ // calculate error correction
+ $ecw = $this->getErrorCorrection($codewords, $ecl);
+ // add error correction codewords
+ $codewords = array_merge($codewords, $ecw);
+ // add horizontal quiet zones to start and stop patterns
+ $pstart = str_repeat('0', QUIETH).$this->start_pattern;
+ $pstop = $this->stop_pattern.str_repeat('0', QUIETH);
+ $barcode_array['num_rows'] = ($rows * ROWHEIGHT) + (2 * QUIETV);
+ $barcode_array['num_cols'] = (($cols + 2) * 17) + 35 + (2 * QUIETH);
+ $barcode_array['bcode'] = array();
+ // build rows for vertical quiet zone
+ if (QUIETV > 0) {
+ $empty_row = array_fill(0, $barcode_array['num_cols'], 0);
+ for ($i = 0; $i < QUIETV; ++$i) {
+ // add vertical quiet rows
+ $barcode_array['bcode'][] = $empty_row;
+ }
+ }
+ $k = 0; // codeword index
+ $cid = 0; // initial cluster
+ // for each row
+ for ($r = 0; $r < $rows; ++$r) {
+ // row start code
+ $row = $pstart;
+ switch ($cid) {
+ case 0: {
+ $L = ((30 * intval($r / 3)) + intval(($rows - 1) / 3));
+ break;
+ }
+ case 1: {
+ $L = ((30 * intval($r / 3)) + ($ecl * 3) + (($rows - 1) % 3));
+ break;
+ }
+ case 2: {
+ $L = ((30 * intval($r / 3)) + ($cols - 1));
+ break;
+ }
+ }
+ // left row indicator
+ $row .= sprintf('%17b', $this->clusters[$cid][$L]);
+ // for each column
+ for ($c = 0; $c < $cols; ++$c) {
+ $row .= sprintf('%17b', $this->clusters[$cid][$codewords[$k]]);
+ ++$k;
+ }
+ switch ($cid) {
+ case 0: {
+ $L = ((30 * intval($r / 3)) + ($cols - 1));
+ break;
+ }
+ case 1: {
+ $L = ((30 * intval($r / 3)) + intval(($rows - 1) / 3));
+ break;
+ }
+ case 2: {
+ $L = ((30 * intval($r / 3)) + ($ecl * 3) + (($rows - 1) % 3));
+ break;
+ }
+ }
+ // right row indicator
+ $row .= sprintf('%17b', $this->clusters[$cid][$L]);
+ // row stop code
+ $row .= $pstop;
+ // convert the string to array
+ $arow = preg_split('//', $row, -1, PREG_SPLIT_NO_EMPTY);
+ // duplicate row to get the desired height
+ for ($h = 0; $h < ROWHEIGHT; ++$h) {
+ $barcode_array['bcode'][] = $arow;
+ }
+ ++$cid;
+ if ($cid > 2) {
+ $cid = 0;
+ }
+ }
+ if (QUIETV > 0) {
+ for ($i = 0; $i < QUIETV; ++$i) {
+ // add vertical quiet rows
+ $barcode_array['bcode'][] = $empty_row;
+ }
+ }
+ $this->barcode_array = $barcode_array;
+ }
+
+ /**
+ * Returns a barcode array which is readable by TCPDF
+ * @return array barcode array readable by TCPDF;
+ * @public
+ */
+ public function getBarcodeArray() {
+ return $this->barcode_array;
+ }
+
+ /**
+ * Returns the error correction level (0-8) to be used
+ * @param $ecl (int) error correction level
+ * @param $numcw (int) number of data codewords
+ * @return int error correction level
+ * @protected
+ */
+ protected function getErrorCorrectionLevel($ecl, $numcw) {
+ // get maximum correction level
+ $maxecl = 8; // starting error level
+ $maxerrsize = (928 - $numcw); // available codewords for error
+ while ($maxecl > 0) {
+ $errsize = (2 << $ecl);
+ if ($maxerrsize >= $errsize) {
+ break;
+ }
+ --$maxecl;
+ }
+ // check for automatic levels
+ if (($ecl < 0) OR ($ecl > 8)) {
+ if ($numcw < 41) {
+ $ecl = 2;
+ } elseif ($numcw < 161) {
+ $ecl = 3;
+ } elseif ($numcw < 321) {
+ $ecl = 4;
+ } elseif ($numcw < 864) {
+ $ecl = 5;
+ } else {
+ $ecl = $maxecl;
+ }
+ }
+ if ($ecl > $maxecl) {
+ $ecl = $maxecl;
+ }
+ return $ecl;
+ }
+
+ /**
+ * Returns the error correction codewords
+ * @param $cw (array) array of codewords including Symbol Lenght Descriptor and pad
+ * @param $ecl (int) error correction level 0-8
+ * @return array of error correction codewords
+ * @protected
+ */
+ protected function getErrorCorrection($cw, $ecl) {
+ // get error correction coefficients
+ $ecc = $this->rsfactors[$ecl];
+ // number of error correction factors
+ $eclsize = (2 << $ecl);
+ // maximum index for $rsfactors[$ecl]
+ $eclmaxid = ($eclsize - 1);
+ // initialize array of error correction codewords
+ $ecw = array_fill(0, $eclsize, 0);
+ // for each data codeword
+ foreach($cw as $k => $d) {
+ $t1 = ($d + $ecw[$eclmaxid]) % 929;
+ for ($j = $eclmaxid; $j > 0; --$j) {
+ $t2 = ($t1 * $ecc[$j]) % 929;
+ $t3 = 929 - $t2;
+ $ecw[$j] = ($ecw[($j - 1)] + $t3) % 929;
+ }
+ $t2 = ($t1 * $ecc[0]) % 929;
+ $t3 = 929 - $t2;
+ $ecw[0] = $t3 % 929;
+ }
+ foreach($ecw as $j => $e) {
+ if ($e != 0) {
+ $ecw[$j] = 929 - $e;
+ }
+ }
+ $ecw = array_reverse($ecw);
+ return $ecw;
+ }
+
+ /**
+ * Create array of sequences from input
+ * @param $code (string) code
+ * @return bidimensional array containing characters and classification
+ * @protected
+ */
+ protected function getInputSequences($code) {
+ $sequence_array = array(); // array to be returned
+ $numseq = array();
+ // get numeric sequences
+ preg_match_all('/([0-9]{13,})/', $code, $numseq, PREG_OFFSET_CAPTURE);
+ $numseq[1][] = array('', strlen($code));
+ $offset = 0;
+ foreach($numseq[1] as $seq) {
+ $seqlen = strlen($seq[0]);
+ if ($seq[1] > 0) {
+ // extract text sequence before the number sequence
+ $prevseq = substr($code, $offset, ($seq[1] - $offset));
+ $textseq = array();
+ // get text sequences
+ preg_match_all('/([\x09\x0a\x0d\x20-\x7e]{5,})/', $prevseq, $textseq, PREG_OFFSET_CAPTURE);
+ $textseq[1][] = array('', strlen($prevseq));
+ $txtoffset = 0;
+ foreach($textseq[1] as $txtseq) {
+ $txtseqlen = strlen($txtseq[0]);
+ if ($txtseq[1] > 0) {
+ // extract byte sequence before the text sequence
+ $prevtxtseq = substr($prevseq, $txtoffset, ($txtseq[1] - $txtoffset));
+ if (strlen($prevtxtseq) > 0) {
+ // add BYTE sequence
+ if ((strlen($prevtxtseq) == 1) AND ((count($sequence_array) > 0) AND ($sequence_array[(count($sequence_array) - 1)][0] == 900))) {
+ $sequence_array[] = array(913, $prevtxtseq);
+ } elseif ((strlen($prevtxtseq) % 6) == 0) {
+ $sequence_array[] = array(924, $prevtxtseq);
+ } else {
+ $sequence_array[] = array(901, $prevtxtseq);
+ }
+ }
+ }
+ if ($txtseqlen > 0) {
+ // add numeric sequence
+ $sequence_array[] = array(900, $txtseq[0]);
+ }
+ $txtoffset = $txtseq[1] + $txtseqlen;
+ }
+ }
+ if ($seqlen > 0) {
+ // add numeric sequence
+ $sequence_array[] = array(902, $seq[0]);
+ }
+ $offset = $seq[1] + $seqlen;
+ }
+ return $sequence_array;
+ }
+
+ /**
+ * Compact data by mode.
+ * @param $mode (int) compaction mode number
+ * @param $code (string) data to compact
+ * @param $addmode (boolean) if true add the mode codeword at first position
+ * @return array of codewords
+ * @protected
+ */
+ protected function getCompaction($mode, $code, $addmode=true) {
+ $cw = array(); // array of codewords to return
+ switch($mode) {
+ case 900: { // Text Compaction mode latch
+ $submode = 0; // default Alpha sub-mode
+ $txtarr = array(); // array of characters and sub-mode switching characters
+ $codelen = strlen($code);
+ for ($i = 0; $i < $codelen; ++$i) {
+ $chval = ord($code{$i});
+ if (($k = array_search($chval, $this->textsubmodes[$submode])) !== false) {
+ // we are on the same sub-mode
+ $txtarr[] = $k;
+ } else {
+ // the sub-mode is changed
+ for ($s = 0; $s < 4; ++$s) {
+ // search new sub-mode
+ if (($s != $submode) AND (($k = array_search($chval, $this->textsubmodes[$s])) !== false)) {
+ // $s is the new submode
+ if (((($i + 1) == $codelen) OR ((($i + 1) < $codelen) AND (array_search(ord($code{($i + 1)}), $this->textsubmodes[$submode]) !== false))) AND (($s == 3) OR (($s == 0) AND ($submode == 1)))) {
+ // shift (temporary change only for this char)
+ if ($s == 3) {
+ // shift to puntuaction
+ $txtarr[] = 29;
+ } else {
+ // shift from lower to alpha
+ $txtarr[] = 27;
+ }
+ } else {
+ // latch
+ $txtarr = array_merge($txtarr, $this->textlatch[''.$submode.$s]);
+ // set new submode
+ $submode = $s;
+ }
+ // add characted code to array
+ $txtarr[] = $k;
+ break;
+ }
+ }
+ }
+ }
+ $txtarrlen = count($txtarr);
+ if (($txtarrlen % 2) != 0) {
+ // add padding
+ $txtarr[] = 29;
+ ++$txtarrlen;
+ }
+ // calculate codewords
+ for ($i = 0; $i < $txtarrlen; $i += 2) {
+ $cw[] = (30 * $txtarr[$i]) + $txtarr[($i + 1)];
+ }
+ break;
+ }
+ case 901:
+ case 924: { // Byte Compaction mode latch
+ while (($codelen = strlen($code)) > 0) {
+ if ($codelen > 6) {
+ $rest = substr($code, 6);
+ $code = substr($code, 0, 6);
+ $sublen = 6;
+ } else {
+ $rest = '';
+ $sublen = strlen($code);
+ }
+ if ($sublen == 6) {
+ $t = bcmul(''.ord($code{0}), '1099511627776');
+ $t = bcadd($t, bcmul(''.ord($code{1}), '4294967296'));
+ $t = bcadd($t, bcmul(''.ord($code{2}), '16777216'));
+ $t = bcadd($t, bcmul(''.ord($code{3}), '65536'));
+ $t = bcadd($t, bcmul(''.ord($code{4}), '256'));
+ $t = bcadd($t, ''.ord($code{5}));
+ do {
+ $d = bcmod($t, '900');
+ $t = bcdiv($t, '900');
+ array_unshift($cw, $d);
+ } while ($t != '0');
+ } else {
+ for ($i = 0; $i < $sublen; ++$i) {
+ $cw[] = ord($code{$i});
+ }
+ }
+ $code = $rest;
+ }
+ break;
+ }
+ case 902: { // Numeric Compaction mode latch
+ while (($codelen = strlen($code)) > 0) {
+ if ($codelen > 44) {
+ $rest = substr($code, 44);
+ $code = substr($code, 0, 44);
+ } else {
+ $rest = '';
+ }
+ $t = '1'.$code;
+ do {
+ $d = bcmod($t, '900');
+ $t = bcdiv($t, '900');
+ array_unshift($cw, $d);
+ } while ($t != '0');
+ $code = $rest;
+ }
+ break;
+ }
+ case 913: { // Byte Compaction mode shift
+ $cw[] = ord($code);
+ break;
+ }
+ }
+ if ($addmode) {
+ // add the compaction mode codeword at the beginning
+ array_unshift($cw, $mode);
+ }
+ return $cw;
+ }
+
+} // end PDF417 class
+
+//============================================================+
+// END OF FILE
+//============================================================+
diff --git a/lib/tcpdf/qrcode.php b/lib/tcpdf/qrcode.php
new file mode 100644
index 00000000000..4f9167679d1
--- /dev/null
+++ b/lib/tcpdf/qrcode.php
@@ -0,0 +1,2866 @@
+.
+//
+// See LICENSE.TXT file for more information.
+// -------------------------------------------------------------------
+//
+// DESCRIPTION :
+//
+// Class to create QR-code arrays for TCPDF class.
+// QR Code symbol is a 2D barcode that can be scanned by
+// handy terminals such as a mobile phone with CCD.
+// The capacity of QR Code is up to 7000 digits or 4000
+// characters, and has high robustness.
+// This class supports QR Code model 2, described in
+// JIS (Japanese Industrial Standards) X0510:2004
+// or ISO/IEC 18004.
+// Currently the following features are not supported:
+// ECI and FNC1 mode, Micro QR Code, QR Code model 1,
+// Structured mode.
+//
+// This class is derived from the following projects:
+// ---------------------------------------------------------
+// "PHP QR Code encoder"
+// License: GNU-LGPLv3
+// Copyright (C) 2010 by Dominik Dzienia
+// http://phpqrcode.sourceforge.net/
+// https://sourceforge.net/projects/phpqrcode/
+//
+// The "PHP QR Code encoder" is based on
+// "C libqrencode library" (ver. 3.1.1)
+// License: GNU-LGPL 2.1
+// Copyright (C) 2006-2010 by Kentaro Fukuchi
+// http://megaui.net/fukuchi/works/qrencode/index.en.html
+//
+// Reed-Solomon code encoder is written by Phil Karn, KA9Q.
+// Copyright (C) 2002-2006 Phil Karn, KA9Q
+//
+// QR Code is registered trademark of DENSO WAVE INCORPORATED
+// http://www.denso-wave.com/qrcode/index-e.html
+// ---------------------------------------------------------
+//============================================================+
+
+/**
+ * @file
+ * Class to create QR-code arrays for TCPDF class.
+ * QR Code symbol is a 2D barcode that can be scanned by handy terminals such as a mobile phone with CCD.
+ * The capacity of QR Code is up to 7000 digits or 4000 characters, and has high robustness.
+ * This class supports QR Code model 2, described in JIS (Japanese Industrial Standards) X0510:2004 or ISO/IEC 18004.
+ * Currently the following features are not supported: ECI and FNC1 mode, Micro QR Code, QR Code model 1, Structured mode.
+ *
+ * This class is derived from "PHP QR Code encoder" by Dominik Dzienia (http://phpqrcode.sourceforge.net/) based on "libqrencode C library 3.1.1." by Kentaro Fukuchi (http://megaui.net/fukuchi/works/qrencode/index.en.html), contains Reed-Solomon code written by Phil Karn, KA9Q. QR Code is registered trademark of DENSO WAVE INCORPORATED (http://www.denso-wave.com/qrcode/index-e.html).
+ * Please read comments on this class source file for full copyright and license information.
+ *
+ * @package com.tecnick.tcpdf
+ * @author Nicola Asuni
+ * @version 1.0.009
+ */
+
+// definitions
+if (!defined('QRCODEDEFS')) {
+
+ /**
+ * Indicate that definitions for this class are set
+ */
+ define('QRCODEDEFS', true);
+
+ // -----------------------------------------------------
+
+ // Encoding modes (characters which can be encoded in QRcode)
+
+ /**
+ * Encoding mode
+ */
+ define('QR_MODE_NL', -1);
+
+ /**
+ * Encoding mode numeric (0-9). 3 characters are encoded to 10bit length. In theory, 7089 characters or less can be stored in a QRcode.
+ */
+ define('QR_MODE_NM', 0);
+
+ /**
+ * Encoding mode alphanumeric (0-9A-Z $%*+-./:) 45characters. 2 characters are encoded to 11bit length. In theory, 4296 characters or less can be stored in a QRcode.
+ */
+ define('QR_MODE_AN', 1);
+
+ /**
+ * Encoding mode 8bit byte data. In theory, 2953 characters or less can be stored in a QRcode.
+ */
+ define('QR_MODE_8B', 2);
+
+ /**
+ * Encoding mode KANJI. A KANJI character (multibyte character) is encoded to 13bit length. In theory, 1817 characters or less can be stored in a QRcode.
+ */
+ define('QR_MODE_KJ', 3);
+
+ /**
+ * Encoding mode STRUCTURED (currently unsupported)
+ */
+ define('QR_MODE_ST', 4);
+
+ // -----------------------------------------------------
+
+ // Levels of error correction.
+ // QRcode has a function of an error correcting for miss reading that white is black.
+ // Error correcting is defined in 4 level as below.
+
+ /**
+ * Error correction level L : About 7% or less errors can be corrected.
+ */
+ define('QR_ECLEVEL_L', 0);
+
+ /**
+ * Error correction level M : About 15% or less errors can be corrected.
+ */
+ define('QR_ECLEVEL_M', 1);
+
+ /**
+ * Error correction level Q : About 25% or less errors can be corrected.
+ */
+ define('QR_ECLEVEL_Q', 2);
+
+ /**
+ * Error correction level H : About 30% or less errors can be corrected.
+ */
+ define('QR_ECLEVEL_H', 3);
+
+ // -----------------------------------------------------
+
+ // Version. Size of QRcode is defined as version.
+ // Version is from 1 to 40.
+ // Version 1 is 21*21 matrix. And 4 modules increases whenever 1 version increases.
+ // So version 40 is 177*177 matrix.
+
+ /**
+ * Maximum QR Code version.
+ */
+ define('QRSPEC_VERSION_MAX', 40);
+
+ /**
+ * Maximum matrix size for maximum version (version 40 is 177*177 matrix).
+ */
+ define('QRSPEC_WIDTH_MAX', 177);
+
+ // -----------------------------------------------------
+
+ /**
+ * Matrix index to get width from $capacity array.
+ */
+ define('QRCAP_WIDTH', 0);
+
+ /**
+ * Matrix index to get number of words from $capacity array.
+ */
+ define('QRCAP_WORDS', 1);
+
+ /**
+ * Matrix index to get remainder from $capacity array.
+ */
+ define('QRCAP_REMINDER', 2);
+
+ /**
+ * Matrix index to get error correction level from $capacity array.
+ */
+ define('QRCAP_EC', 3);
+
+ // -----------------------------------------------------
+
+ // Structure (currently usupported)
+
+ /**
+ * Number of header bits for structured mode
+ */
+ define('STRUCTURE_HEADER_BITS', 20);
+
+ /**
+ * Max number of symbols for structured mode
+ */
+ define('MAX_STRUCTURED_SYMBOLS', 16);
+
+ // -----------------------------------------------------
+
+ // Masks
+
+ /**
+ * Down point base value for case 1 mask pattern (concatenation of same color in a line or a column)
+ */
+ define('N1', 3);
+
+ /**
+ * Down point base value for case 2 mask pattern (module block of same color)
+ */
+ define('N2', 3);
+
+ /**
+ * Down point base value for case 3 mask pattern (1:1:3:1:1(dark:bright:dark:bright:dark)pattern in a line or a column)
+ */
+ define('N3', 40);
+
+ /**
+ * Down point base value for case 4 mask pattern (ration of dark modules in whole)
+ */
+ define('N4', 10);
+
+ // -----------------------------------------------------
+
+ // Optimization settings
+
+ /**
+ * if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code
+ */
+ define('QR_FIND_BEST_MASK', true);
+
+ /**
+ * if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly
+ */
+ define('QR_FIND_FROM_RANDOM', 2);
+
+ /**
+ * when QR_FIND_BEST_MASK === false
+ */
+ define('QR_DEFAULT_MASK', 2);
+
+ // -----------------------------------------------------
+
+} // end of definitions
+
+// #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
+
+// for compatibility with PHP4
+if (!function_exists('str_split')) {
+ /**
+ * Convert a string to an array (needed for PHP4 compatibility)
+ * @param $string (string) The input string.
+ * @param $split_length (int) Maximum length of the chunk.
+ * @return If the optional split_length parameter is specified, the returned array will be broken down into chunks with each being split_length in length, otherwise each chunk will be one character in length. FALSE is returned if split_length is less than 1. If the split_length length exceeds the length of string , the entire string is returned as the first (and only) array element.
+ */
+ function str_split($string, $split_length=1) {
+ if ((strlen($string) > $split_length) OR (!$split_length)) {
+ do {
+ $c = strlen($string);
+ $parts[] = substr($string, 0, $split_length);
+ $string = substr($string, $split_length);
+ } while ($string !== false);
+ } else {
+ $parts = array($string);
+ }
+ return $parts;
+ }
+}
+
+// #####################################################
+
+/**
+ * @class QRcode
+ * Class to create QR-code arrays for TCPDF class.
+ * QR Code symbol is a 2D barcode that can be scanned by handy terminals such as a mobile phone with CCD.
+ * The capacity of QR Code is up to 7000 digits or 4000 characters, and has high robustness.
+ * This class supports QR Code model 2, described in JIS (Japanese Industrial Standards) X0510:2004 or ISO/IEC 18004.
+ * Currently the following features are not supported: ECI and FNC1 mode, Micro QR Code, QR Code model 1, Structured mode.
+ *
+ * This class is derived from "PHP QR Code encoder" by Dominik Dzienia (http://phpqrcode.sourceforge.net/) based on "libqrencode C library 3.1.1." by Kentaro Fukuchi (http://megaui.net/fukuchi/works/qrencode/index.en.html), contains Reed-Solomon code written by Phil Karn, KA9Q. QR Code is registered trademark of DENSO WAVE INCORPORATED (http://www.denso-wave.com/qrcode/index-e.html).
+ * Please read comments on this class source file for full copyright and license information.
+ *
+ * @package com.tecnick.tcpdf
+ * @author Nicola Asuni
+ * @version 1.0.009
+ */
+class QRcode {
+
+ /**
+ * Barcode array to be returned which is readable by TCPDF.
+ * @protected
+ */
+ protected $barcode_array = array();
+
+ /**
+ * QR code version. Size of QRcode is defined as version. Version is from 1 to 40. Version 1 is 21*21 matrix. And 4 modules increases whenever 1 version increases. So version 40 is 177*177 matrix.
+ * @protected
+ */
+ protected $version = 0;
+
+ /**
+ * Levels of error correction. See definitions for possible values.
+ * @protected
+ */
+ protected $level = QR_ECLEVEL_L;
+
+ /**
+ * Encoding mode.
+ * @protected
+ */
+ protected $hint = QR_MODE_8B;
+
+ /**
+ * Boolean flag, if true the input string will be converted to uppercase.
+ * @protected
+ */
+ protected $casesensitive = true;
+
+ /**
+ * Structured QR code (not supported yet).
+ * @protected
+ */
+ protected $structured = 0;
+
+ /**
+ * Mask data.
+ * @protected
+ */
+ protected $data;
+
+ // FrameFiller
+
+ /**
+ * Width.
+ * @protected
+ */
+ protected $width;
+
+ /**
+ * Frame.
+ * @protected
+ */
+ protected $frame;
+
+ /**
+ * X position of bit.
+ * @protected
+ */
+ protected $x;
+
+ /**
+ * Y position of bit.
+ * @protected
+ */
+ protected $y;
+
+ /**
+ * Direction.
+ * @protected
+ */
+ protected $dir;
+
+ /**
+ * Single bit value.
+ * @protected
+ */
+ protected $bit;
+
+ // ---- QRrawcode ----
+
+ /**
+ * Data code.
+ * @protected
+ */
+ protected $datacode = array();
+
+ /**
+ * Error correction code.
+ * @protected
+ */
+ protected $ecccode = array();
+
+ /**
+ * Blocks.
+ * @protected
+ */
+ protected $blocks;
+
+ /**
+ * Reed-Solomon blocks.
+ * @protected
+ */
+ protected $rsblocks = array(); //of RSblock
+
+ /**
+ * Counter.
+ * @protected
+ */
+ protected $count;
+
+ /**
+ * Data length.
+ * @protected
+ */
+ protected $dataLength;
+
+ /**
+ * Error correction length.
+ * @protected
+ */
+ protected $eccLength;
+
+ /**
+ * Value b1.
+ * @protected
+ */
+ protected $b1;
+
+ // ---- QRmask ----
+
+ /**
+ * Run length.
+ * @protected
+ */
+ protected $runLength = array();
+
+ // ---- QRsplit ----
+
+ /**
+ * Input data string.
+ * @protected
+ */
+ protected $dataStr = '';
+
+ /**
+ * Input items.
+ * @protected
+ */
+ protected $items;
+
+ // Reed-Solomon items
+
+ /**
+ * Reed-Solomon items.
+ * @protected
+ */
+ protected $rsitems = array();
+
+ /**
+ * Array of frames.
+ * @protected
+ */
+ protected $frames = array();
+
+ /**
+ * Alphabet-numeric convesion table.
+ * @protected
+ */
+ protected $anTable = array(
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, //
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, //
+ 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, //
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, //
+ -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, //
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, //
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, //
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 //
+ );
+
+ /**
+ * Array Table of the capacity of symbols.
+ * See Table 1 (pp.13) and Table 12-16 (pp.30-36), JIS X0510:2004.
+ * @protected
+ */
+ protected $capacity = array(
+ array( 0, 0, 0, array( 0, 0, 0, 0)), //
+ array( 21, 26, 0, array( 7, 10, 13, 17)), // 1
+ array( 25, 44, 7, array( 10, 16, 22, 28)), //
+ array( 29, 70, 7, array( 15, 26, 36, 44)), //
+ array( 33, 100, 7, array( 20, 36, 52, 64)), //
+ array( 37, 134, 7, array( 26, 48, 72, 88)), // 5
+ array( 41, 172, 7, array( 36, 64, 96, 112)), //
+ array( 45, 196, 0, array( 40, 72, 108, 130)), //
+ array( 49, 242, 0, array( 48, 88, 132, 156)), //
+ array( 53, 292, 0, array( 60, 110, 160, 192)), //
+ array( 57, 346, 0, array( 72, 130, 192, 224)), // 10
+ array( 61, 404, 0, array( 80, 150, 224, 264)), //
+ array( 65, 466, 0, array( 96, 176, 260, 308)), //
+ array( 69, 532, 0, array( 104, 198, 288, 352)), //
+ array( 73, 581, 3, array( 120, 216, 320, 384)), //
+ array( 77, 655, 3, array( 132, 240, 360, 432)), // 15
+ array( 81, 733, 3, array( 144, 280, 408, 480)), //
+ array( 85, 815, 3, array( 168, 308, 448, 532)), //
+ array( 89, 901, 3, array( 180, 338, 504, 588)), //
+ array( 93, 991, 3, array( 196, 364, 546, 650)), //
+ array( 97, 1085, 3, array( 224, 416, 600, 700)), // 20
+ array(101, 1156, 4, array( 224, 442, 644, 750)), //
+ array(105, 1258, 4, array( 252, 476, 690, 816)), //
+ array(109, 1364, 4, array( 270, 504, 750, 900)), //
+ array(113, 1474, 4, array( 300, 560, 810, 960)), //
+ array(117, 1588, 4, array( 312, 588, 870, 1050)), // 25
+ array(121, 1706, 4, array( 336, 644, 952, 1110)), //
+ array(125, 1828, 4, array( 360, 700, 1020, 1200)), //
+ array(129, 1921, 3, array( 390, 728, 1050, 1260)), //
+ array(133, 2051, 3, array( 420, 784, 1140, 1350)), //
+ array(137, 2185, 3, array( 450, 812, 1200, 1440)), // 30
+ array(141, 2323, 3, array( 480, 868, 1290, 1530)), //
+ array(145, 2465, 3, array( 510, 924, 1350, 1620)), //
+ array(149, 2611, 3, array( 540, 980, 1440, 1710)), //
+ array(153, 2761, 3, array( 570, 1036, 1530, 1800)), //
+ array(157, 2876, 0, array( 570, 1064, 1590, 1890)), // 35
+ array(161, 3034, 0, array( 600, 1120, 1680, 1980)), //
+ array(165, 3196, 0, array( 630, 1204, 1770, 2100)), //
+ array(169, 3362, 0, array( 660, 1260, 1860, 2220)), //
+ array(173, 3532, 0, array( 720, 1316, 1950, 2310)), //
+ array(177, 3706, 0, array( 750, 1372, 2040, 2430)) // 40
+ );
+
+ /**
+ * Array Length indicator.
+ * @protected
+ */
+ protected $lengthTableBits = array(
+ array(10, 12, 14),
+ array( 9, 11, 13),
+ array( 8, 16, 16),
+ array( 8, 10, 12)
+ );
+
+ /**
+ * Array Table of the error correction code (Reed-Solomon block).
+ * See Table 12-16 (pp.30-36), JIS X0510:2004.
+ * @protected
+ */
+ protected $eccTable = array(
+ array(array( 0, 0), array( 0, 0), array( 0, 0), array( 0, 0)), //
+ array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // 1
+ array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), //
+ array(array( 1, 0), array( 1, 0), array( 2, 0), array( 2, 0)), //
+ array(array( 1, 0), array( 2, 0), array( 2, 0), array( 4, 0)), //
+ array(array( 1, 0), array( 2, 0), array( 2, 2), array( 2, 2)), // 5
+ array(array( 2, 0), array( 4, 0), array( 4, 0), array( 4, 0)), //
+ array(array( 2, 0), array( 4, 0), array( 2, 4), array( 4, 1)), //
+ array(array( 2, 0), array( 2, 2), array( 4, 2), array( 4, 2)), //
+ array(array( 2, 0), array( 3, 2), array( 4, 4), array( 4, 4)), //
+ array(array( 2, 2), array( 4, 1), array( 6, 2), array( 6, 2)), // 10
+ array(array( 4, 0), array( 1, 4), array( 4, 4), array( 3, 8)), //
+ array(array( 2, 2), array( 6, 2), array( 4, 6), array( 7, 4)), //
+ array(array( 4, 0), array( 8, 1), array( 8, 4), array(12, 4)), //
+ array(array( 3, 1), array( 4, 5), array(11, 5), array(11, 5)), //
+ array(array( 5, 1), array( 5, 5), array( 5, 7), array(11, 7)), // 15
+ array(array( 5, 1), array( 7, 3), array(15, 2), array( 3, 13)), //
+ array(array( 1, 5), array(10, 1), array( 1, 15), array( 2, 17)), //
+ array(array( 5, 1), array( 9, 4), array(17, 1), array( 2, 19)), //
+ array(array( 3, 4), array( 3, 11), array(17, 4), array( 9, 16)), //
+ array(array( 3, 5), array( 3, 13), array(15, 5), array(15, 10)), // 20
+ array(array( 4, 4), array(17, 0), array(17, 6), array(19, 6)), //
+ array(array( 2, 7), array(17, 0), array( 7, 16), array(34, 0)), //
+ array(array( 4, 5), array( 4, 14), array(11, 14), array(16, 14)), //
+ array(array( 6, 4), array( 6, 14), array(11, 16), array(30, 2)), //
+ array(array( 8, 4), array( 8, 13), array( 7, 22), array(22, 13)), // 25
+ array(array(10, 2), array(19, 4), array(28, 6), array(33, 4)), //
+ array(array( 8, 4), array(22, 3), array( 8, 26), array(12, 28)), //
+ array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)), //
+ array(array( 7, 7), array(21, 7), array( 1, 37), array(19, 26)), //
+ array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), // 30
+ array(array(13, 3), array( 2, 29), array(42, 1), array(23, 28)), //
+ array(array(17, 0), array(10, 23), array(10, 35), array(19, 35)), //
+ array(array(17, 1), array(14, 21), array(29, 19), array(11, 46)), //
+ array(array(13, 6), array(14, 23), array(44, 7), array(59, 1)), //
+ array(array(12, 7), array(12, 26), array(39, 14), array(22, 41)), // 35
+ array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)), //
+ array(array(17, 4), array(29, 14), array(49, 10), array(24, 46)), //
+ array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)), //
+ array(array(20, 4), array(40, 7), array(43, 22), array(10, 67)), //
+ array(array(19, 6), array(18, 31), array(34, 34), array(20, 61)) // 40
+ );
+
+ /**
+ * Array Positions of alignment patterns.
+ * This array includes only the second and the third position of the alignment patterns. Rest of them can be calculated from the distance between them.
+ * See Table 1 in Appendix E (pp.71) of JIS X0510:2004.
+ * @protected
+ */
+ protected $alignmentPattern = array(
+ array( 0, 0),
+ array( 0, 0), array(18, 0), array(22, 0), array(26, 0), array(30, 0), // 1- 5
+ array(34, 0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10
+ array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), // 11-15
+ array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), // 16-20
+ array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), // 21-25
+ array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), // 26-30
+ array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), // 31-35
+ array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58) // 35-40
+ );
+
+ /**
+ * Array Version information pattern (BCH coded).
+ * See Table 1 in Appendix D (pp.68) of JIS X0510:2004.
+ * size: [QRSPEC_VERSION_MAX - 6]
+ * @protected
+ */
+ protected $versionPattern = array(
+ 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, //
+ 0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, //
+ 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, //
+ 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64, //
+ 0x27541, 0x28c69
+ );
+
+ /**
+ * Array Format information
+ * @protected
+ */
+ protected $formatInfo = array(
+ array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976), //
+ array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0), //
+ array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed), //
+ array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b) //
+ );
+
+
+ // -------------------------------------------------
+ // -------------------------------------------------
+
+
+ /**
+ * This is the class constructor.
+ * Creates a QRcode object
+ * @param $code (string) code to represent using QRcode
+ * @param $eclevel (string) error level: L : About 7% or less errors can be corrected. M : About 15% or less errors can be corrected. Q : About 25% or less errors can be corrected. H : About 30% or less errors can be corrected.
+ * @public
+ * @since 1.0.000
+ */
+ public function __construct($code, $eclevel = 'L') {
+ $barcode_array = array();
+ if ((is_null($code)) OR ($code == '\0') OR ($code == '')) {
+ return false;
+ }
+ // set error correction level
+ $this->level = array_search($eclevel, array('L', 'M', 'Q', 'H'));
+ if ($this->level === false) {
+ $this->level = QR_ECLEVEL_L;
+ }
+ if (($this->hint != QR_MODE_8B) AND ($this->hint != QR_MODE_KJ)) {
+ return false;
+ }
+ if (($this->version < 0) OR ($this->version > QRSPEC_VERSION_MAX)) {
+ return false;
+ }
+ $this->items = array();
+ $this->encodeString($code);
+ if (is_null($this->data)) {
+ return false;
+ }
+ $qrTab = $this->binarize($this->data);
+ $size = count($qrTab);
+ $barcode_array['num_rows'] = $size;
+ $barcode_array['num_cols'] = $size;
+ $barcode_array['bcode'] = array();
+ foreach ($qrTab as $line) {
+ $arrAdd = array();
+ foreach (str_split($line) as $char) {
+ $arrAdd[] = ($char=='1')?1:0;
+ }
+ $barcode_array['bcode'][] = $arrAdd;
+ }
+ $this->barcode_array = $barcode_array;
+ }
+
+ /**
+ * Returns a barcode array which is readable by TCPDF
+ * @return array barcode array readable by TCPDF;
+ * @public
+ */
+ public function getBarcodeArray() {
+ return $this->barcode_array;
+ }
+
+ /**
+ * Convert the frame in binary form
+ * @param $frame (array) array to binarize
+ * @return array frame in binary form
+ */
+ protected function binarize($frame) {
+ $len = count($frame);
+ // the frame is square (width = height)
+ foreach ($frame as &$frameLine) {
+ for ($i=0; $i<$len; $i++) {
+ $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0';
+ }
+ }
+ return $frame;
+ }
+
+ /**
+ * Encode the input string to QR code
+ * @param $string (string) input string to encode
+ */
+ protected function encodeString($string) {
+ $this->dataStr = $string;
+ if (!$this->casesensitive) {
+ $this->toUpper();
+ }
+ $ret = $this->splitString();
+ if ($ret < 0) {
+ return NULL;
+ }
+ $this->encodeMask(-1);
+ }
+
+ /**
+ * Encode mask
+ * @param $mask (int) masking mode
+ */
+ protected function encodeMask($mask) {
+ $spec = array(0, 0, 0, 0, 0);
+ $this->datacode = $this->getByteStream($this->items);
+ if (is_null($this->datacode)) {
+ return NULL;
+ }
+ $spec = $this->getEccSpec($this->version, $this->level, $spec);
+ $this->b1 = $this->rsBlockNum1($spec);
+ $this->dataLength = $this->rsDataLength($spec);
+ $this->eccLength = $this->rsEccLength($spec);
+ $this->ecccode = array_fill(0, $this->eccLength, 0);
+ $this->blocks = $this->rsBlockNum($spec);
+ $ret = $this->init($spec);
+ if ($ret < 0) {
+ return NULL;
+ }
+ $this->count = 0;
+ $this->width = $this->getWidth($this->version);
+ $this->frame = $this->newFrame($this->version);
+ $this->x = $this->width - 1;
+ $this->y = $this->width - 1;
+ $this->dir = -1;
+ $this->bit = -1;
+ // inteleaved data and ecc codes
+ for ($i=0; $i < ($this->dataLength + $this->eccLength); $i++) {
+ $code = $this->getCode();
+ $bit = 0x80;
+ for ($j=0; $j<8; $j++) {
+ $addr = $this->getNextPosition();
+ $this->setFrameAt($addr, 0x02 | (($bit & $code) != 0));
+ $bit = $bit >> 1;
+ }
+ }
+ // remainder bits
+ $j = $this->getRemainder($this->version);
+ for ($i=0; $i<$j; $i++) {
+ $addr = $this->getNextPosition();
+ $this->setFrameAt($addr, 0x02);
+ }
+ // masking
+ $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0);
+ if ($mask < 0) {
+ if (QR_FIND_BEST_MASK) {
+ $masked = $this->mask($this->width, $this->frame, $this->level);
+ } else {
+ $masked = $this->makeMask($this->width, $this->frame, (intval(QR_DEFAULT_MASK) % 8), $this->level);
+ }
+ } else {
+ $masked = $this->makeMask($this->width, $this->frame, $mask, $this->level);
+ }
+ if ($masked == NULL) {
+ return NULL;
+ }
+ $this->data = $masked;
+ }
+
+ // - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ // FrameFiller
+
+ /**
+ * Set frame value at specified position
+ * @param $at (array) x,y position
+ * @param $val (int) value of the character to set
+ */
+ protected function setFrameAt($at, $val) {
+ $this->frame[$at['y']][$at['x']] = chr($val);
+ }
+
+ /**
+ * Get frame value at specified position
+ * @param $at (array) x,y position
+ * @return value at specified position
+ */
+ protected function getFrameAt($at) {
+ return ord($this->frame[$at['y']][$at['x']]);
+ }
+
+ /**
+ * Return the next frame position
+ * @return array of x,y coordinates
+ */
+ protected function getNextPosition() {
+ do {
+ if ($this->bit == -1) {
+ $this->bit = 0;
+ return array('x'=>$this->x, 'y'=>$this->y);
+ }
+ $x = $this->x;
+ $y = $this->y;
+ $w = $this->width;
+ if ($this->bit == 0) {
+ $x--;
+ $this->bit++;
+ } else {
+ $x++;
+ $y += $this->dir;
+ $this->bit--;
+ }
+ if ($this->dir < 0) {
+ if ($y < 0) {
+ $y = 0;
+ $x -= 2;
+ $this->dir = 1;
+ if ($x == 6) {
+ $x--;
+ $y = 9;
+ }
+ }
+ } else {
+ if ($y == $w) {
+ $y = $w - 1;
+ $x -= 2;
+ $this->dir = -1;
+ if ($x == 6) {
+ $x--;
+ $y -= 8;
+ }
+ }
+ }
+ if (($x < 0) OR ($y < 0)) {
+ return NULL;
+ }
+ $this->x = $x;
+ $this->y = $y;
+ } while(ord($this->frame[$y][$x]) & 0x80);
+ return array('x'=>$x, 'y'=>$y);
+ }
+
+ // - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ // QRrawcode
+
+ /**
+ * Initialize code.
+ * @param $spec (array) array of ECC specification
+ * @return 0 in case of success, -1 in case of error
+ */
+ protected function init($spec) {
+ $dl = $this->rsDataCodes1($spec);
+ $el = $this->rsEccCodes1($spec);
+ $rs = $this->init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el);
+ $blockNo = 0;
+ $dataPos = 0;
+ $eccPos = 0;
+ $endfor = $this->rsBlockNum1($spec);
+ for ($i=0; $i < $endfor; ++$i) {
+ $ecc = array_slice($this->ecccode, $eccPos);
+ $this->rsblocks[$blockNo] = array();
+ $this->rsblocks[$blockNo]['dataLength'] = $dl;
+ $this->rsblocks[$blockNo]['data'] = array_slice($this->datacode, $dataPos);
+ $this->rsblocks[$blockNo]['eccLength'] = $el;
+ $ecc = $this->encode_rs_char($rs, $this->rsblocks[$blockNo]['data'], $ecc);
+ $this->rsblocks[$blockNo]['ecc'] = $ecc;
+ $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc);
+ $dataPos += $dl;
+ $eccPos += $el;
+ $blockNo++;
+ }
+ if ($this->rsBlockNum2($spec) == 0) {
+ return 0;
+ }
+ $dl = $this->rsDataCodes2($spec);
+ $el = $this->rsEccCodes2($spec);
+ $rs = $this->init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el);
+ if ($rs == NULL) {
+ return -1;
+ }
+ $endfor = $this->rsBlockNum2($spec);
+ for ($i=0; $i < $endfor; ++$i) {
+ $ecc = array_slice($this->ecccode, $eccPos);
+ $this->rsblocks[$blockNo] = array();
+ $this->rsblocks[$blockNo]['dataLength'] = $dl;
+ $this->rsblocks[$blockNo]['data'] = array_slice($this->datacode, $dataPos);
+ $this->rsblocks[$blockNo]['eccLength'] = $el;
+ $ecc = $this->encode_rs_char($rs, $this->rsblocks[$blockNo]['data'], $ecc);
+ $this->rsblocks[$blockNo]['ecc'] = $ecc;
+ $this->ecccode = array_merge(array_slice($this->ecccode, 0, $eccPos), $ecc);
+ $dataPos += $dl;
+ $eccPos += $el;
+ $blockNo++;
+ }
+ return 0;
+ }
+
+ /**
+ * Return Reed-Solomon block code.
+ * @return array rsblocks
+ */
+ protected function getCode() {
+ if ($this->count < $this->dataLength) {
+ $row = $this->count % $this->blocks;
+ $col = $this->count / $this->blocks;
+ if ($col >= $this->rsblocks[0]['dataLength']) {
+ $row += $this->b1;
+ }
+ $ret = $this->rsblocks[$row]['data'][$col];
+ } elseif ($this->count < $this->dataLength + $this->eccLength) {
+ $row = ($this->count - $this->dataLength) % $this->blocks;
+ $col = ($this->count - $this->dataLength) / $this->blocks;
+ $ret = $this->rsblocks[$row]['ecc'][$col];
+ } else {
+ return 0;
+ }
+ $this->count++;
+ return $ret;
+ }
+
+ // - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ // QRmask
+
+ /**
+ * Write Format Information on frame and returns the number of black bits
+ * @param $width (int) frame width
+ * @param $frame (array) frame
+ * @param $mask (array) masking mode
+ * @param $level (int) error correction level
+ * @return int blacks
+ */
+ protected function writeFormatInformation($width, &$frame, $mask, $level) {
+ $blacks = 0;
+ $format = $this->getFormatInfo($mask, $level);
+ for ($i=0; $i<8; ++$i) {
+ if ($format & 1) {
+ $blacks += 2;
+ $v = 0x85;
+ } else {
+ $v = 0x84;
+ }
+ $frame[8][$width - 1 - $i] = chr($v);
+ if ($i < 6) {
+ $frame[$i][8] = chr($v);
+ } else {
+ $frame[$i + 1][8] = chr($v);
+ }
+ $format = $format >> 1;
+ }
+ for ($i=0; $i<7; ++$i) {
+ if ($format & 1) {
+ $blacks += 2;
+ $v = 0x85;
+ } else {
+ $v = 0x84;
+ }
+ $frame[$width - 7 + $i][8] = chr($v);
+ if ($i == 0) {
+ $frame[8][7] = chr($v);
+ } else {
+ $frame[8][6 - $i] = chr($v);
+ }
+ $format = $format >> 1;
+ }
+ return $blacks;
+ }
+
+ /**
+ * mask0
+ * @param $x (int) X position
+ * @param $y (int) Y position
+ * @return int mask
+ */
+ protected function mask0($x, $y) {
+ return ($x + $y) & 1;
+ }
+
+ /**
+ * mask1
+ * @param $x (int) X position
+ * @param $y (int) Y position
+ * @return int mask
+ */
+ protected function mask1($x, $y) {
+ return ($y & 1);
+ }
+
+ /**
+ * mask2
+ * @param $x (int) X position
+ * @param $y (int) Y position
+ * @return int mask
+ */
+ protected function mask2($x, $y) {
+ return ($x % 3);
+ }
+
+ /**
+ * mask3
+ * @param $x (int) X position
+ * @param $y (int) Y position
+ * @return int mask
+ */
+ protected function mask3($x, $y) {
+ return ($x + $y) % 3;
+ }
+
+ /**
+ * mask4
+ * @param $x (int) X position
+ * @param $y (int) Y position
+ * @return int mask
+ */
+ protected function mask4($x, $y) {
+ return (((int)($y / 2)) + ((int)($x / 3))) & 1;
+ }
+
+ /**
+ * mask5
+ * @param $x (int) X position
+ * @param $y (int) Y position
+ * @return int mask
+ */
+ protected function mask5($x, $y) {
+ return (($x * $y) & 1) + ($x * $y) % 3;
+ }
+
+ /**
+ * mask6
+ * @param $x (int) X position
+ * @param $y (int) Y position
+ * @return int mask
+ */
+ protected function mask6($x, $y) {
+ return ((($x * $y) & 1) + ($x * $y) % 3) & 1;
+ }
+
+ /**
+ * mask7
+ * @param $x (int) X position
+ * @param $y (int) Y position
+ * @return int mask
+ */
+ protected function mask7($x, $y) {
+ return ((($x * $y) % 3) + (($x + $y) & 1)) & 1;
+ }
+
+ /**
+ * Return bitmask
+ * @param $maskNo (int) mask number
+ * @param $width (int) width
+ * @param $frame (array) frame
+ * @return array bitmask
+ */
+ protected function generateMaskNo($maskNo, $width, $frame) {
+ $bitMask = array_fill(0, $width, array_fill(0, $width, 0));
+ for ($y=0; $y<$width; ++$y) {
+ for ($x=0; $x<$width; ++$x) {
+ if (ord($frame[$y][$x]) & 0x80) {
+ $bitMask[$y][$x] = 0;
+ } else {
+ $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y);
+ $bitMask[$y][$x] = ($maskFunc == 0)?1:0;
+ }
+ }
+ }
+ return $bitMask;
+ }
+
+ /**
+ * makeMaskNo
+ * @param $maskNo (int)
+ * @param $width (int)
+ * @param $s (int)
+ * @param $d (int)
+ * @param $maskGenOnly (boolean)
+ * @return int b
+ */
+ protected function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly=false) {
+ $b = 0;
+ $bitMask = array();
+ $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d);
+ if ($maskGenOnly) {
+ return;
+ }
+ $d = $s;
+ for ($y=0; $y<$width; ++$y) {
+ for ($x=0; $x<$width; ++$x) {
+ if ($bitMask[$y][$x] == 1) {
+ $d[$y][$x] = chr(ord($s[$y][$x]) ^ ((int)($bitMask[$y][$x])));
+ }
+ $b += (int)(ord($d[$y][$x]) & 1);
+ }
+ }
+ return $b;
+ }
+
+ /**
+ * makeMask
+ * @param $width (int)
+ * @param $frame (array)
+ * @param $maskNo (int)
+ * @param $level (int)
+ * @return array mask
+ */
+ protected function makeMask($width, $frame, $maskNo, $level) {
+ $masked = array_fill(0, $width, str_repeat("\0", $width));
+ $this->makeMaskNo($maskNo, $width, $frame, $masked);
+ $this->writeFormatInformation($width, $masked, $maskNo, $level);
+ return $masked;
+ }
+
+ /**
+ * calcN1N3
+ * @param $length (int)
+ * @return int demerit
+ */
+ protected function calcN1N3($length) {
+ $demerit = 0;
+ for ($i=0; $i<$length; ++$i) {
+ if ($this->runLength[$i] >= 5) {
+ $demerit += (N1 + ($this->runLength[$i] - 5));
+ }
+ if ($i & 1) {
+ if (($i >= 3) AND ($i < ($length-2)) AND ($this->runLength[$i] % 3 == 0)) {
+ $fact = (int)($this->runLength[$i] / 3);
+ if (($this->runLength[$i-2] == $fact)
+ AND ($this->runLength[$i-1] == $fact)
+ AND ($this->runLength[$i+1] == $fact)
+ AND ($this->runLength[$i+2] == $fact)) {
+ if (($this->runLength[$i-3] < 0) OR ($this->runLength[$i-3] >= (4 * $fact))) {
+ $demerit += N3;
+ } elseif ((($i+3) >= $length) OR ($this->runLength[$i+3] >= (4 * $fact))) {
+ $demerit += N3;
+ }
+ }
+ }
+ }
+ }
+ return $demerit;
+ }
+
+ /**
+ * evaluateSymbol
+ * @param $width (int)
+ * @param $frame (array)
+ * @return int demerit
+ */
+ protected function evaluateSymbol($width, $frame) {
+ $head = 0;
+ $demerit = 0;
+ for ($y=0; $y<$width; ++$y) {
+ $head = 0;
+ $this->runLength[0] = 1;
+ $frameY = $frame[$y];
+ if ($y > 0) {
+ $frameYM = $frame[$y-1];
+ }
+ for ($x=0; $x<$width; ++$x) {
+ if (($x > 0) AND ($y > 0)) {
+ $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]);
+ $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]);
+ if (($b22 | ($w22 ^ 1)) & 1) {
+ $demerit += N2;
+ }
+ }
+ if (($x == 0) AND (ord($frameY[$x]) & 1)) {
+ $this->runLength[0] = -1;
+ $head = 1;
+ $this->runLength[$head] = 1;
+ } elseif ($x > 0) {
+ if ((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) {
+ $head++;
+ $this->runLength[$head] = 1;
+ } else {
+ $this->runLength[$head]++;
+ }
+ }
+ }
+ $demerit += $this->calcN1N3($head+1);
+ }
+ for ($x=0; $x<$width; ++$x) {
+ $head = 0;
+ $this->runLength[0] = 1;
+ for ($y=0; $y<$width; ++$y) {
+ if (($y == 0) AND (ord($frame[$y][$x]) & 1)) {
+ $this->runLength[0] = -1;
+ $head = 1;
+ $this->runLength[$head] = 1;
+ } elseif ($y > 0) {
+ if ((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) {
+ $head++;
+ $this->runLength[$head] = 1;
+ } else {
+ $this->runLength[$head]++;
+ }
+ }
+ }
+ $demerit += $this->calcN1N3($head+1);
+ }
+ return $demerit;
+ }
+
+ /**
+ * mask
+ * @param $width (int)
+ * @param $frame (array)
+ * @param $level (int)
+ * @return array best mask
+ */
+ protected function mask($width, $frame, $level) {
+ $minDemerit = PHP_INT_MAX;
+ $bestMaskNum = 0;
+ $bestMask = array();
+ $checked_masks = array(0, 1, 2, 3, 4, 5, 6, 7);
+ if (QR_FIND_FROM_RANDOM !== false) {
+ $howManuOut = 8 - (QR_FIND_FROM_RANDOM % 9);
+ for ($i = 0; $i < $howManuOut; ++$i) {
+ $remPos = rand (0, count($checked_masks)-1);
+ unset($checked_masks[$remPos]);
+ $checked_masks = array_values($checked_masks);
+ }
+ }
+ $bestMask = $frame;
+ foreach ($checked_masks as $i) {
+ $mask = array_fill(0, $width, str_repeat("\0", $width));
+ $demerit = 0;
+ $blacks = 0;
+ $blacks = $this->makeMaskNo($i, $width, $frame, $mask);
+ $blacks += $this->writeFormatInformation($width, $mask, $i, $level);
+ $blacks = (int)(100 * $blacks / ($width * $width));
+ $demerit = (int)((int)(abs($blacks - 50) / 5) * N4);
+ $demerit += $this->evaluateSymbol($width, $mask);
+ if ($demerit < $minDemerit) {
+ $minDemerit = $demerit;
+ $bestMask = $mask;
+ $bestMaskNum = $i;
+ }
+ }
+ return $bestMask;
+ }
+
+ // - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ // QRsplit
+
+ /**
+ * Return true if the character at specified position is a number
+ * @param $str (string) string
+ * @param $pos (int) characted position
+ * @return boolean true of false
+ */
+ protected function isdigitat($str, $pos) {
+ if ($pos >= strlen($str)) {
+ return false;
+ }
+ return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9')));
+ }
+
+ /**
+ * Return true if the character at specified position is an alphanumeric character
+ * @param $str (string) string
+ * @param $pos (int) characted position
+ * @return boolean true of false
+ */
+ protected function isalnumat($str, $pos) {
+ if ($pos >= strlen($str)) {
+ return false;
+ }
+ return ($this->lookAnTable(ord($str[$pos])) >= 0);
+ }
+
+ /**
+ * identifyMode
+ * @param $pos (int)
+ * @return int mode
+ */
+ protected function identifyMode($pos) {
+ if ($pos >= strlen($this->dataStr)) {
+ return QR_MODE_NL;
+ }
+ $c = $this->dataStr[$pos];
+ if ($this->isdigitat($this->dataStr, $pos)) {
+ return QR_MODE_NM;
+ } elseif ($this->isalnumat($this->dataStr, $pos)) {
+ return QR_MODE_AN;
+ } elseif ($this->hint == QR_MODE_KJ) {
+ if ($pos+1 < strlen($this->dataStr)) {
+ $d = $this->dataStr[$pos+1];
+ $word = (ord($c) << 8) | ord($d);
+ if (($word >= 0x8140 && $word <= 0x9ffc) OR ($word >= 0xe040 && $word <= 0xebbf)) {
+ return QR_MODE_KJ;
+ }
+ }
+ }
+ return QR_MODE_8B;
+ }
+
+ /**
+ * eatNum
+ * @return int run
+ */
+ protected function eatNum() {
+ $ln = $this->lengthIndicator(QR_MODE_NM, $this->version);
+ $p = 0;
+ while($this->isdigitat($this->dataStr, $p)) {
+ $p++;
+ }
+ $run = $p;
+ $mode = $this->identifyMode($p);
+ if ($mode == QR_MODE_8B) {
+ $dif = $this->estimateBitsModeNum($run) + 4 + $ln
+ + $this->estimateBitsMode8(1) // + 4 + l8
+ - $this->estimateBitsMode8($run + 1); // - 4 - l8
+ if ($dif > 0) {
+ return $this->eat8();
+ }
+ }
+ if ($mode == QR_MODE_AN) {
+ $dif = $this->estimateBitsModeNum($run) + 4 + $ln
+ + $this->estimateBitsModeAn(1) // + 4 + la
+ - $this->estimateBitsModeAn($run + 1);// - 4 - la
+ if ($dif > 0) {
+ return $this->eatAn();
+ }
+ }
+ $this->items = $this->appendNewInputItem($this->items, QR_MODE_NM, $run, str_split($this->dataStr));
+ return $run;
+ }
+
+ /**
+ * eatAn
+ * @return int run
+ */
+ protected function eatAn() {
+ $la = $this->lengthIndicator(QR_MODE_AN, $this->version);
+ $ln = $this->lengthIndicator(QR_MODE_NM, $this->version);
+ $p =1 ;
+ while($this->isalnumat($this->dataStr, $p)) {
+ if ($this->isdigitat($this->dataStr, $p)) {
+ $q = $p;
+ while($this->isdigitat($this->dataStr, $q)) {
+ $q++;
+ }
+ $dif = $this->estimateBitsModeAn($p) // + 4 + la
+ + $this->estimateBitsModeNum($q - $p) + 4 + $ln
+ - $this->estimateBitsModeAn($q); // - 4 - la
+ if ($dif < 0) {
+ break;
+ } else {
+ $p = $q;
+ }
+ } else {
+ $p++;
+ }
+ }
+ $run = $p;
+ if (!$this->isalnumat($this->dataStr, $p)) {
+ $dif = $this->estimateBitsModeAn($run) + 4 + $la
+ + $this->estimateBitsMode8(1) // + 4 + l8
+ - $this->estimateBitsMode8($run + 1); // - 4 - l8
+ if ($dif > 0) {
+ return $this->eat8();
+ }
+ }
+ $this->items = $this->appendNewInputItem($this->items, QR_MODE_AN, $run, str_split($this->dataStr));
+ return $run;
+ }
+
+ /**
+ * eatKanji
+ * @return int run
+ */
+ protected function eatKanji() {
+ $p = 0;
+ while($this->identifyMode($p) == QR_MODE_KJ) {
+ $p += 2;
+ }
+ $this->items = $this->appendNewInputItem($this->items, QR_MODE_KJ, $p, str_split($this->dataStr));
+ return $run;
+ }
+
+ /**
+ * eat8
+ * @return int run
+ */
+ protected function eat8() {
+ $la = $this->lengthIndicator(QR_MODE_AN, $this->version);
+ $ln = $this->lengthIndicator(QR_MODE_NM, $this->version);
+ $p = 1;
+ $dataStrLen = strlen($this->dataStr);
+ while($p < $dataStrLen) {
+ $mode = $this->identifyMode($p);
+ if ($mode == QR_MODE_KJ) {
+ break;
+ }
+ if ($mode == QR_MODE_NM) {
+ $q = $p;
+ while($this->isdigitat($this->dataStr, $q)) {
+ $q++;
+ }
+ $dif = $this->estimateBitsMode8($p) // + 4 + l8
+ + $this->estimateBitsModeNum($q - $p) + 4 + $ln
+ - $this->estimateBitsMode8($q); // - 4 - l8
+ if ($dif < 0) {
+ break;
+ } else {
+ $p = $q;
+ }
+ } elseif ($mode == QR_MODE_AN) {
+ $q = $p;
+ while($this->isalnumat($this->dataStr, $q)) {
+ $q++;
+ }
+ $dif = $this->estimateBitsMode8($p) // + 4 + l8
+ + $this->estimateBitsModeAn($q - $p) + 4 + $la
+ - $this->estimateBitsMode8($q); // - 4 - l8
+ if ($dif < 0) {
+ break;
+ } else {
+ $p = $q;
+ }
+ } else {
+ $p++;
+ }
+ }
+ $run = $p;
+ $this->items = $this->appendNewInputItem($this->items, QR_MODE_8B, $run, str_split($this->dataStr));
+ return $run;
+ }
+
+ /**
+ * splitString
+ */
+ protected function splitString() {
+ while (strlen($this->dataStr) > 0) {
+ if ($this->dataStr == '') {
+ return 0;
+ }
+ $mode = $this->identifyMode(0);
+ switch ($mode) {
+ case QR_MODE_NM: {
+ $length = $this->eatNum();
+ break;
+ }
+ case QR_MODE_AN: {
+ $length = $this->eatAn();
+ break;
+ }
+ case QR_MODE_KJ: {
+ if ($hint == QR_MODE_KJ) {
+ $length = $this->eatKanji();
+ } else {
+ $length = $this->eat8();
+ }
+ break;
+ }
+ default: {
+ $length = $this->eat8();
+ break;
+ }
+ }
+ if ($length == 0) {
+ return 0;
+ }
+ if ($length < 0) {
+ return -1;
+ }
+ $this->dataStr = substr($this->dataStr, $length);
+ }
+ }
+
+ /**
+ * toUpper
+ */
+ protected function toUpper() {
+ $stringLen = strlen($this->dataStr);
+ $p = 0;
+ while ($p < $stringLen) {
+ $mode = $this->identifyMode(substr($this->dataStr, $p), $this->hint);
+ if ($mode == QR_MODE_KJ) {
+ $p += 2;
+ } else {
+ if ((ord($this->dataStr[$p]) >= ord('a')) AND (ord($this->dataStr[$p]) <= ord('z'))) {
+ $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32);
+ }
+ $p++;
+ }
+ }
+ return $this->dataStr;
+ }
+
+ // - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ // QRinputItem
+
+ /**
+ * newInputItem
+ * @param $mode (int)
+ * @param $size (int)
+ * @param $data (array)
+ * @param $bstream (array)
+ * @return array input item
+ */
+ protected function newInputItem($mode, $size, $data, $bstream=null) {
+ $setData = array_slice($data, 0, $size);
+ if (count($setData) < $size) {
+ $setData = array_merge($setData, array_fill(0, ($size - count($setData)), 0));
+ }
+ if (!$this->check($mode, $size, $setData)) {
+ return NULL;
+ }
+ $inputitem = array();
+ $inputitem['mode'] = $mode;
+ $inputitem['size'] = $size;
+ $inputitem['data'] = $setData;
+ $inputitem['bstream'] = $bstream;
+ return $inputitem;
+ }
+
+ /**
+ * encodeModeNum
+ * @param $inputitem (array)
+ * @param $version (int)
+ * @return array input item
+ */
+ protected function encodeModeNum($inputitem, $version) {
+ $words = (int)($inputitem['size'] / 3);
+ $inputitem['bstream'] = array();
+ $val = 0x1;
+ $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, $val);
+ $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_NM, $version), $inputitem['size']);
+ for ($i=0; $i < $words; ++$i) {
+ $val = (ord($inputitem['data'][$i*3 ]) - ord('0')) * 100;
+ $val += (ord($inputitem['data'][$i*3+1]) - ord('0')) * 10;
+ $val += (ord($inputitem['data'][$i*3+2]) - ord('0'));
+ $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 10, $val);
+ }
+ if ($inputitem['size'] - $words * 3 == 1) {
+ $val = ord($inputitem['data'][$words*3]) - ord('0');
+ $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, $val);
+ } elseif (($inputitem['size'] - ($words * 3)) == 2) {
+ $val = (ord($inputitem['data'][$words*3 ]) - ord('0')) * 10;
+ $val += (ord($inputitem['data'][$words*3+1]) - ord('0'));
+ $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 7, $val);
+ }
+ return $inputitem;
+ }
+
+ /**
+ * encodeModeAn
+ * @param $inputitem (array)
+ * @param $version (int)
+ * @return array input item
+ */
+ protected function encodeModeAn($inputitem, $version) {
+ $words = (int)($inputitem['size'] / 2);
+ $inputitem['bstream'] = array();
+ $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x02);
+ $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_AN, $version), $inputitem['size']);
+ for ($i=0; $i < $words; ++$i) {
+ $val = (int)($this->lookAnTable(ord($inputitem['data'][$i*2])) * 45);
+ $val += (int)($this->lookAnTable(ord($inputitem['data'][($i*2)+1])));
+ $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 11, $val);
+ }
+ if ($inputitem['size'] & 1) {
+ $val = $this->lookAnTable(ord($inputitem['data'][($words * 2)]));
+ $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 6, $val);
+ }
+ return $inputitem;
+ }
+
+ /**
+ * encodeMode8
+ * @param $inputitem (array)
+ * @param $version (int)
+ * @return array input item
+ */
+ protected function encodeMode8($inputitem, $version) {
+ $inputitem['bstream'] = array();
+ $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x4);
+ $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_8B, $version), $inputitem['size']);
+ for ($i=0; $i < $inputitem['size']; ++$i) {
+ $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 8, ord($inputitem['data'][$i]));
+ }
+ return $inputitem;
+ }
+
+ /**
+ * encodeModeKanji
+ * @param $inputitem (array)
+ * @param $version (int)
+ * @return array input item
+ */
+ protected function encodeModeKanji($inputitem, $version) {
+ $inputitem['bstream'] = array();
+ $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x8);
+ $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_KJ, $version), (int)($inputitem['size'] / 2));
+ for ($i=0; $i<$inputitem['size']; $i+=2) {
+ $val = (ord($inputitem['data'][$i]) << 8) | ord($inputitem['data'][$i+1]);
+ if ($val <= 0x9ffc) {
+ $val -= 0x8140;
+ } else {
+ $val -= 0xc140;
+ }
+ $h = ($val >> 8) * 0xc0;
+ $val = ($val & 0xff) + $h;
+ $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 13, $val);
+ }
+ return $inputitem;
+ }
+
+ /**
+ * encodeModeStructure
+ * @param $inputitem (array)
+ * @return array input item
+ */
+ protected function encodeModeStructure($inputitem) {
+ $inputitem['bstream'] = array();
+ $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x03);
+ $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, ord($inputitem['data'][1]) - 1);
+ $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, ord($inputitem['data'][0]) - 1);
+ $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 8, ord($inputitem['data'][2]));
+ return $inputitem;
+ }
+
+ /**
+ * encodeBitStream
+ * @param $inputitem (array)
+ * @param $version (int)
+ * @return array input item
+ */
+ protected function encodeBitStream($inputitem, $version) {
+ $inputitem['bstream'] = array();
+ $words = $this->maximumWords($inputitem['mode'], $version);
+ if ($inputitem['size'] > $words) {
+ $st1 = $this->newInputItem($inputitem['mode'], $words, $inputitem['data']);
+ $st2 = $this->newInputItem($inputitem['mode'], $inputitem['size'] - $words, array_slice($inputitem['data'], $words));
+ $st1 = $this->encodeBitStream($st1, $version);
+ $st2 = $this->encodeBitStream($st2, $version);
+ $inputitem['bstream'] = array();
+ $inputitem['bstream'] = $this->appendBitstream($inputitem['bstream'], $st1['bstream']);
+ $inputitem['bstream'] = $this->appendBitstream($inputitem['bstream'], $st2['bstream']);
+ } else {
+ switch($inputitem['mode']) {
+ case QR_MODE_NM: {
+ $inputitem = $this->encodeModeNum($inputitem, $version);
+ break;
+ }
+ case QR_MODE_AN: {
+ $inputitem = $this->encodeModeAn($inputitem, $version);
+ break;
+ }
+ case QR_MODE_8B: {
+ $inputitem = $this->encodeMode8($inputitem, $version);
+ break;
+ }
+ case QR_MODE_KJ: {
+ $inputitem = $this->encodeModeKanji($inputitem, $version);
+ break;
+ }
+ case QR_MODE_ST: {
+ $inputitem = $this->encodeModeStructure($inputitem);
+ break;
+ }
+ default: {
+ break;
+ }
+ }
+ }
+ return $inputitem;
+ }
+
+ // - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ // QRinput
+
+ /**
+ * Append data to an input object.
+ * The data is copied and appended to the input object.
+ * @param $items (arrray) input items
+ * @param $mode (int) encoding mode.
+ * @param $size (int) size of data (byte).
+ * @param $data (array) array of input data.
+ * @return items
+ *
+ */
+ protected function appendNewInputItem($items, $mode, $size, $data) {
+ $newitem = $this->newInputItem($mode, $size, $data);
+ if (!empty($newitem)) {
+ $items[] = $newitem;
+ }
+ return $items;
+ }
+
+ /**
+ * insertStructuredAppendHeader
+ * @param $items (array)
+ * @param $size (int)
+ * @param $index (int)
+ * @param $parity (int)
+ * @return array items
+ */
+ protected function insertStructuredAppendHeader($items, $size, $index, $parity) {
+ if ($size > MAX_STRUCTURED_SYMBOLS) {
+ return -1;
+ }
+ if (($index <= 0) OR ($index > MAX_STRUCTURED_SYMBOLS)) {
+ return -1;
+ }
+ $buf = array($size, $index, $parity);
+ $entry = $this->newInputItem(QR_MODE_ST, 3, buf);
+ array_unshift($items, $entry);
+ return $items;
+ }
+
+ /**
+ * calcParity
+ * @param $items (array)
+ * @return int parity
+ */
+ protected function calcParity($items) {
+ $parity = 0;
+ foreach ($items as $item) {
+ if ($item['mode'] != QR_MODE_ST) {
+ for ($i=$item['size']-1; $i>=0; --$i) {
+ $parity ^= $item['data'][$i];
+ }
+ }
+ }
+ return $parity;
+ }
+
+ /**
+ * checkModeNum
+ * @param $size (int)
+ * @param $data (array)
+ * @return boolean true or false
+ */
+ protected function checkModeNum($size, $data) {
+ for ($i=0; $i<$size; ++$i) {
+ if ((ord($data[$i]) < ord('0')) OR (ord($data[$i]) > ord('9'))){
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Look up the alphabet-numeric convesion table (see JIS X0510:2004, pp.19).
+ * @param $c (int) character value
+ * @return value
+ */
+ protected function lookAnTable($c) {
+ return (($c > 127)?-1:$this->anTable[$c]);
+ }
+
+ /**
+ * checkModeAn
+ * @param $size (int)
+ * @param $data (array)
+ * @return boolean true or false
+ */
+ protected function checkModeAn($size, $data) {
+ for ($i=0; $i<$size; ++$i) {
+ if ($this->lookAnTable(ord($data[$i])) == -1) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * estimateBitsModeNum
+ * @param $size (int)
+ * @return int number of bits
+ */
+ protected function estimateBitsModeNum($size) {
+ $w = (int)($size / 3);
+ $bits = ($w * 10);
+ switch($size - ($w * 3)) {
+ case 1: {
+ $bits += 4;
+ break;
+ }
+ case 2: {
+ $bits += 7;
+ break;
+ }
+ }
+ return $bits;
+ }
+
+ /**
+ * estimateBitsModeAn
+ * @param $size (int)
+ * @return int number of bits
+ */
+ protected function estimateBitsModeAn($size) {
+ $bits = (int)($size * 5.5); // (size / 2 ) * 11
+ if ($size & 1) {
+ $bits += 6;
+ }
+ return $bits;
+ }
+
+ /**
+ * estimateBitsMode8
+ * @param $size (int)
+ * @return int number of bits
+ */
+ protected function estimateBitsMode8($size) {
+ return (int)($size * 8);
+ }
+
+ /**
+ * estimateBitsModeKanji
+ * @param $size (int)
+ * @return int number of bits
+ */
+ protected function estimateBitsModeKanji($size) {
+ return (int)($size * 6.5); // (size / 2 ) * 13
+ }
+
+ /**
+ * checkModeKanji
+ * @param $size (int)
+ * @param $data (array)
+ * @return boolean true or false
+ */
+ protected function checkModeKanji($size, $data) {
+ if ($size & 1) {
+ return false;
+ }
+ for ($i=0; $i<$size; $i+=2) {
+ $val = (ord($data[$i]) << 8) | ord($data[$i+1]);
+ if (($val < 0x8140) OR (($val > 0x9ffc) AND ($val < 0xe040)) OR ($val > 0xebbf)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Validate the input data.
+ * @param $mode (int) encoding mode.
+ * @param $size (int) size of data (byte).
+ * @param $data (array) data to validate
+ * @return boolean true in case of valid data, false otherwise
+ */
+ protected function check($mode, $size, $data) {
+ if ($size <= 0) {
+ return false;
+ }
+ switch($mode) {
+ case QR_MODE_NM: {
+ return $this->checkModeNum($size, $data);
+ }
+ case QR_MODE_AN: {
+ return $this->checkModeAn($size, $data);
+ }
+ case QR_MODE_KJ: {
+ return $this->checkModeKanji($size, $data);
+ }
+ case QR_MODE_8B: {
+ return true;
+ }
+ case QR_MODE_ST: {
+ return true;
+ }
+ default: {
+ break;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * estimateBitStreamSize
+ * @param $items (array)
+ * @param $version (int)
+ * @return int bits
+ */
+ protected function estimateBitStreamSize($items, $version) {
+ $bits = 0;
+ if ($version == 0) {
+ $version = 1;
+ }
+ foreach ($items as $item) {
+ switch($item['mode']) {
+ case QR_MODE_NM: {
+ $bits = $this->estimateBitsModeNum($item['size']);
+ break;
+ }
+ case QR_MODE_AN: {
+ $bits = $this->estimateBitsModeAn($item['size']);
+ break;
+ }
+ case QR_MODE_8B: {
+ $bits = $this->estimateBitsMode8($item['size']);
+ break;
+ }
+ case QR_MODE_KJ: {
+ $bits = $this->estimateBitsModeKanji($item['size']);
+ break;
+ }
+ case QR_MODE_ST: {
+ return STRUCTURE_HEADER_BITS;
+ }
+ default: {
+ return 0;
+ }
+ }
+ $l = $this->lengthIndicator($item['mode'], $version);
+ $m = 1 << $l;
+ $num = (int)(($item['size'] + $m - 1) / $m);
+ $bits += $num * (4 + $l);
+ }
+ return $bits;
+ }
+
+ /**
+ * estimateVersion
+ * @param $items (array)
+ * @return int version
+ */
+ protected function estimateVersion($items) {
+ $version = 0;
+ $prev = 0;
+ do {
+ $prev = $version;
+ $bits = $this->estimateBitStreamSize($items, $prev);
+ $version = $this->getMinimumVersion((int)(($bits + 7) / 8), $this->level);
+ if ($version < 0) {
+ return -1;
+ }
+ } while ($version > $prev);
+ return $version;
+ }
+
+ /**
+ * lengthOfCode
+ * @param $mode (int)
+ * @param $version (int)
+ * @param $bits (int)
+ * @return int size
+ */
+ protected function lengthOfCode($mode, $version, $bits) {
+ $payload = $bits - 4 - $this->lengthIndicator($mode, $version);
+ switch($mode) {
+ case QR_MODE_NM: {
+ $chunks = (int)($payload / 10);
+ $remain = $payload - $chunks * 10;
+ $size = $chunks * 3;
+ if ($remain >= 7) {
+ $size += 2;
+ } elseif ($remain >= 4) {
+ $size += 1;
+ }
+ break;
+ }
+ case QR_MODE_AN: {
+ $chunks = (int)($payload / 11);
+ $remain = $payload - $chunks * 11;
+ $size = $chunks * 2;
+ if ($remain >= 6) {
+ ++$size;
+ }
+ break;
+ }
+ case QR_MODE_8B: {
+ $size = (int)($payload / 8);
+ break;
+ }
+ case QR_MODE_KJ: {
+ $size = (int)(($payload / 13) * 2);
+ break;
+ }
+ case QR_MODE_ST: {
+ $size = (int)($payload / 8);
+ break;
+ }
+ default: {
+ $size = 0;
+ break;
+ }
+ }
+ $maxsize = $this->maximumWords($mode, $version);
+ if ($size < 0) {
+ $size = 0;
+ }
+ if ($size > $maxsize) {
+ $size = $maxsize;
+ }
+ return $size;
+ }
+
+ /**
+ * createBitStream
+ * @param $items (array)
+ * @return array of items and total bits
+ */
+ protected function createBitStream($items) {
+ $total = 0;
+ foreach ($items as $key => $item) {
+ $items[$key] = $this->encodeBitStream($item, $this->version);
+ $bits = count($items[$key]['bstream']);
+ $total += $bits;
+ }
+ return array($items, $total);
+ }
+
+ /**
+ * convertData
+ * @param $items (array)
+ * @return array items
+ */
+ protected function convertData($items) {
+ $ver = $this->estimateVersion($items);
+ if ($ver > $this->version) {
+ $this->version = $ver;
+ }
+ for (;;) {
+ $cbs = $this->createBitStream($items);
+ $items = $cbs[0];
+ $bits = $cbs[1];
+ if ($bits < 0) {
+ return -1;
+ }
+ $ver = $this->getMinimumVersion((int)(($bits + 7) / 8), $this->level);
+ if ($ver < 0) {
+ return -1;
+ } elseif ($ver > $this->version) {
+ $this->version = $ver;
+ } else {
+ break;
+ }
+ }
+ return $items;
+ }
+
+ /**
+ * Append Padding Bit to bitstream
+ * @param $bstream (array)
+ * @return array bitstream
+ */
+ protected function appendPaddingBit($bstream) {
+ if (is_null($bstream)) {
+ return null;
+ }
+ $bits = count($bstream);
+ $maxwords = $this->getDataLength($this->version, $this->level);
+ $maxbits = $maxwords * 8;
+ if ($maxbits == $bits) {
+ return $bstream;
+ }
+ if ($maxbits - $bits < 5) {
+ return $this->appendNum($bstream, $maxbits - $bits, 0);
+ }
+ $bits += 4;
+ $words = (int)(($bits + 7) / 8);
+ $padding = array();
+ $padding = $this->appendNum($padding, $words * 8 - $bits + 4, 0);
+ $padlen = $maxwords - $words;
+ if ($padlen > 0) {
+ $padbuf = array();
+ for ($i=0; $i<$padlen; ++$i) {
+ $padbuf[$i] = ($i&1)?0x11:0xec;
+ }
+ $padding = $this->appendBytes($padding, $padlen, $padbuf);
+ }
+ return $this->appendBitstream($bstream, $padding);
+ }
+
+ /**
+ * mergeBitStream
+ * @param $items (array) items
+ * @return array bitstream
+ */
+ protected function mergeBitStream($items) {
+ $items = $this->convertData($items);
+ if (!is_array($items)) {
+ return null;
+ }
+ $bstream = array();
+ foreach ($items as $item) {
+ $bstream = $this->appendBitstream($bstream, $item['bstream']);
+ }
+ return $bstream;
+ }
+
+ /**
+ * Returns a stream of bits.
+ * @param $items (int)
+ * @return array padded merged byte stream
+ */
+ protected function getBitStream($items) {
+ $bstream = $this->mergeBitStream($items);
+ return $this->appendPaddingBit($bstream);
+ }
+
+ /**
+ * Pack all bit streams padding bits into a byte array.
+ * @param $items (int)
+ * @return array padded merged byte stream
+ */
+ protected function getByteStream($items) {
+ $bstream = $this->getBitStream($items);
+ return $this->bitstreamToByte($bstream);
+ }
+
+ // - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ // QRbitstream
+
+ /**
+ * Return an array with zeros
+ * @param $setLength (int) array size
+ * @return array
+ */
+ protected function allocate($setLength) {
+ return array_fill(0, $setLength, 0);
+ }
+
+ /**
+ * Return new bitstream from number
+ * @param $bits (int) number of bits
+ * @param $num (int) number
+ * @return array bitstream
+ */
+ protected function newFromNum($bits, $num) {
+ $bstream = $this->allocate($bits);
+ $mask = 1 << ($bits - 1);
+ for ($i=0; $i<$bits; ++$i) {
+ if ($num & $mask) {
+ $bstream[$i] = 1;
+ } else {
+ $bstream[$i] = 0;
+ }
+ $mask = $mask >> 1;
+ }
+ return $bstream;
+ }
+
+ /**
+ * Return new bitstream from bytes
+ * @param $size (int) size
+ * @param $data (array) bytes
+ * @return array bitstream
+ */
+ protected function newFromBytes($size, $data) {
+ $bstream = $this->allocate($size * 8);
+ $p=0;
+ for ($i=0; $i<$size; ++$i) {
+ $mask = 0x80;
+ for ($j=0; $j<8; ++$j) {
+ if ($data[$i] & $mask) {
+ $bstream[$p] = 1;
+ } else {
+ $bstream[$p] = 0;
+ }
+ $p++;
+ $mask = $mask >> 1;
+ }
+ }
+ return $bstream;
+ }
+
+ /**
+ * Append one bitstream to another
+ * @param $bitstream (array) original bitstream
+ * @param $append (array) bitstream to append
+ * @return array bitstream
+ */
+ protected function appendBitstream($bitstream, $append) {
+ if ((!is_array($append)) OR (count($append) == 0)) {
+ return $bitstream;
+ }
+ if (count($bitstream) == 0) {
+ return $append;
+ }
+ return array_values(array_merge($bitstream, $append));
+ }
+
+ /**
+ * Append one bitstream created from number to another
+ * @param $bitstream (array) original bitstream
+ * @param $bits (int) number of bits
+ * @param $num (int) number
+ * @return array bitstream
+ */
+ protected function appendNum($bitstream, $bits, $num) {
+ if ($bits == 0) {
+ return 0;
+ }
+ $b = $this->newFromNum($bits, $num);
+ return $this->appendBitstream($bitstream, $b);
+ }
+
+ /**
+ * Append one bitstream created from bytes to another
+ * @param $bitstream (array) original bitstream
+ * @param $size (int) size
+ * @param $data (array) bytes
+ * @return array bitstream
+ */
+ protected function appendBytes($bitstream, $size, $data) {
+ if ($size == 0) {
+ return 0;
+ }
+ $b = $this->newFromBytes($size, $data);
+ return $this->appendBitstream($bitstream, $b);
+ }
+
+ /**
+ * Convert bitstream to bytes
+ * @param $bstream (array) original bitstream
+ * @return array of bytes
+ */
+ protected function bitstreamToByte($bstream) {
+ if (is_null($bstream)) {
+ return null;
+ }
+ $size = count($bstream);
+ if ($size == 0) {
+ return array();
+ }
+ $data = array_fill(0, (int)(($size + 7) / 8), 0);
+ $bytes = (int)($size / 8);
+ $p = 0;
+ for ($i=0; $i<$bytes; $i++) {
+ $v = 0;
+ for ($j=0; $j<8; $j++) {
+ $v = $v << 1;
+ $v |= $bstream[$p];
+ $p++;
+ }
+ $data[$i] = $v;
+ }
+ if ($size & 7) {
+ $v = 0;
+ for ($j=0; $j<($size & 7); $j++) {
+ $v = $v << 1;
+ $v |= $bstream[$p];
+ $p++;
+ }
+ $data[$bytes] = $v;
+ }
+ return $data;
+ }
+
+ // - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ // QRspec
+
+ /**
+ * Replace a value on the array at the specified position
+ * @param $srctab (array)
+ * @param $x (int) X position
+ * @param $y (int) Y position
+ * @param $repl (string) value to replace
+ * @param $replLen (int) length of the repl string
+ * @return array srctab
+ */
+ protected function qrstrset($srctab, $x, $y, $repl, $replLen=false) {
+ $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl));
+ return $srctab;
+ }
+
+ /**
+ * Return maximum data code length (bytes) for the version.
+ * @param $version (int) version
+ * @param $level (int) error correction level
+ * @return int maximum size (bytes)
+ */
+ protected function getDataLength($version, $level) {
+ return $this->capacity[$version][QRCAP_WORDS] - $this->capacity[$version][QRCAP_EC][$level];
+ }
+
+ /**
+ * Return maximum error correction code length (bytes) for the version.
+ * @param $version (int) version
+ * @param $level (int) error correction level
+ * @return int ECC size (bytes)
+ */
+ protected function getECCLength($version, $level){
+ return $this->capacity[$version][QRCAP_EC][$level];
+ }
+
+ /**
+ * Return the width of the symbol for the version.
+ * @param $version (int) version
+ * @return int width
+ */
+ protected function getWidth($version) {
+ return $this->capacity[$version][QRCAP_WIDTH];
+ }
+
+ /**
+ * Return the numer of remainder bits.
+ * @param $version (int) version
+ * @return int number of remainder bits
+ */
+ protected function getRemainder($version) {
+ return $this->capacity[$version][QRCAP_REMINDER];
+ }
+
+ /**
+ * Return a version number that satisfies the input code length.
+ * @param $size (int) input code length (byte)
+ * @param $level (int) error correction level
+ * @return int version number
+ */
+ protected function getMinimumVersion($size, $level) {
+ for ($i=1; $i <= QRSPEC_VERSION_MAX; ++$i) {
+ $words = $this->capacity[$i][QRCAP_WORDS] - $this->capacity[$i][QRCAP_EC][$level];
+ if ($words >= $size) {
+ return $i;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * Return the size of length indicator for the mode and version.
+ * @param $mode (int) encoding mode
+ * @param $version (int) version
+ * @return int the size of the appropriate length indicator (bits).
+ */
+ protected function lengthIndicator($mode, $version) {
+ if ($mode == QR_MODE_ST) {
+ return 0;
+ }
+ if ($version <= 9) {
+ $l = 0;
+ } elseif ($version <= 26) {
+ $l = 1;
+ } else {
+ $l = 2;
+ }
+ return $this->lengthTableBits[$mode][$l];
+ }
+
+ /**
+ * Return the maximum length for the mode and version.
+ * @param $mode (int) encoding mode
+ * @param $version (int) version
+ * @return int the maximum length (bytes)
+ */
+ protected function maximumWords($mode, $version) {
+ if ($mode == QR_MODE_ST) {
+ return 3;
+ }
+ if ($version <= 9) {
+ $l = 0;
+ } else if ($version <= 26) {
+ $l = 1;
+ } else {
+ $l = 2;
+ }
+ $bits = $this->lengthTableBits[$mode][$l];
+ $words = (1 << $bits) - 1;
+ if ($mode == QR_MODE_KJ) {
+ $words *= 2; // the number of bytes is required
+ }
+ return $words;
+ }
+
+ /**
+ * Return an array of ECC specification.
+ * @param $version (int) version
+ * @param $level (int) error correction level
+ * @param $spec (array) an array of ECC specification contains as following: {# of type1 blocks, # of data code, # of ecc code, # of type2 blocks, # of data code}
+ * @return array spec
+ */
+ protected function getEccSpec($version, $level, $spec) {
+ if (count($spec) < 5) {
+ $spec = array(0, 0, 0, 0, 0);
+ }
+ $b1 = $this->eccTable[$version][$level][0];
+ $b2 = $this->eccTable[$version][$level][1];
+ $data = $this->getDataLength($version, $level);
+ $ecc = $this->getECCLength($version, $level);
+ if ($b2 == 0) {
+ $spec[0] = $b1;
+ $spec[1] = (int)($data / $b1);
+ $spec[2] = (int)($ecc / $b1);
+ $spec[3] = 0;
+ $spec[4] = 0;
+ } else {
+ $spec[0] = $b1;
+ $spec[1] = (int)($data / ($b1 + $b2));
+ $spec[2] = (int)($ecc / ($b1 + $b2));
+ $spec[3] = $b2;
+ $spec[4] = $spec[1] + 1;
+ }
+ return $spec;
+ }
+
+ /**
+ * Put an alignment marker.
+ * @param $frame (array) frame
+ * @param $ox (int) X center coordinate of the pattern
+ * @param $oy (int) Y center coordinate of the pattern
+ * @return array frame
+ */
+ protected function putAlignmentMarker($frame, $ox, $oy) {
+ $finder = array(
+ "\xa1\xa1\xa1\xa1\xa1",
+ "\xa1\xa0\xa0\xa0\xa1",
+ "\xa1\xa0\xa1\xa0\xa1",
+ "\xa1\xa0\xa0\xa0\xa1",
+ "\xa1\xa1\xa1\xa1\xa1"
+ );
+ $yStart = $oy - 2;
+ $xStart = $ox - 2;
+ for ($y=0; $y < 5; $y++) {
+ $frame = $this->qrstrset($frame, $xStart, $yStart+$y, $finder[$y]);
+ }
+ return $frame;
+ }
+
+ /**
+ * Put an alignment pattern.
+ * @param $version (int) version
+ * @param $frame (array) frame
+ * @param $width (int) width
+ * @return array frame
+ */
+ protected function putAlignmentPattern($version, $frame, $width) {
+ if ($version < 2) {
+ return $frame;
+ }
+ $d = $this->alignmentPattern[$version][1] - $this->alignmentPattern[$version][0];
+ if ($d < 0) {
+ $w = 2;
+ } else {
+ $w = (int)(($width - $this->alignmentPattern[$version][0]) / $d + 2);
+ }
+ if ($w * $w - 3 == 1) {
+ $x = $this->alignmentPattern[$version][0];
+ $y = $this->alignmentPattern[$version][0];
+ $frame = $this->putAlignmentMarker($frame, $x, $y);
+ return $frame;
+ }
+ $cx = $this->alignmentPattern[$version][0];
+ $wo = $w - 1;
+ for ($x=1; $x < $wo; ++$x) {
+ $frame = $this->putAlignmentMarker($frame, 6, $cx);
+ $frame = $this->putAlignmentMarker($frame, $cx, 6);
+ $cx += $d;
+ }
+ $cy = $this->alignmentPattern[$version][0];
+ for ($y=0; $y < $wo; ++$y) {
+ $cx = $this->alignmentPattern[$version][0];
+ for ($x=0; $x < $wo; ++$x) {
+ $frame = $this->putAlignmentMarker($frame, $cx, $cy);
+ $cx += $d;
+ }
+ $cy += $d;
+ }
+ return $frame;
+ }
+
+ /**
+ * Return BCH encoded version information pattern that is used for the symbol of version 7 or greater. Use lower 18 bits.
+ * @param $version (int) version
+ * @return BCH encoded version information pattern
+ */
+ protected function getVersionPattern($version) {
+ if (($version < 7) OR ($version > QRSPEC_VERSION_MAX)) {
+ return 0;
+ }
+ return $this->versionPattern[($version - 7)];
+ }
+
+ /**
+ * Return BCH encoded format information pattern.
+ * @param $mask (array)
+ * @param $level (int) error correction level
+ * @return BCH encoded format information pattern
+ */
+ protected function getFormatInfo($mask, $level) {
+ if (($mask < 0) OR ($mask > 7)) {
+ return 0;
+ }
+ if (($level < 0) OR ($level > 3)) {
+ return 0;
+ }
+ return $this->formatInfo[$level][$mask];
+ }
+
+ /**
+ * Put a finder pattern.
+ * @param $frame (array) frame
+ * @param $ox (int) X center coordinate of the pattern
+ * @param $oy (int) Y center coordinate of the pattern
+ * @return array frame
+ */
+ protected function putFinderPattern($frame, $ox, $oy) {
+ $finder = array(
+ "\xc1\xc1\xc1\xc1\xc1\xc1\xc1",
+ "\xc1\xc0\xc0\xc0\xc0\xc0\xc1",
+ "\xc1\xc0\xc1\xc1\xc1\xc0\xc1",
+ "\xc1\xc0\xc1\xc1\xc1\xc0\xc1",
+ "\xc1\xc0\xc1\xc1\xc1\xc0\xc1",
+ "\xc1\xc0\xc0\xc0\xc0\xc0\xc1",
+ "\xc1\xc1\xc1\xc1\xc1\xc1\xc1"
+ );
+ for ($y=0; $y < 7; $y++) {
+ $frame = $this->qrstrset($frame, $ox, ($oy + $y), $finder[$y]);
+ }
+ return $frame;
+ }
+
+ /**
+ * Return a copy of initialized frame.
+ * @param $version (int) version
+ * @return Array of unsigned char.
+ */
+ protected function createFrame($version) {
+ $width = $this->capacity[$version][QRCAP_WIDTH];
+ $frameLine = str_repeat ("\0", $width);
+ $frame = array_fill(0, $width, $frameLine);
+ // Finder pattern
+ $frame = $this->putFinderPattern($frame, 0, 0);
+ $frame = $this->putFinderPattern($frame, $width - 7, 0);
+ $frame = $this->putFinderPattern($frame, 0, $width - 7);
+ // Separator
+ $yOffset = $width - 7;
+ for ($y=0; $y < 7; ++$y) {
+ $frame[$y][7] = "\xc0";
+ $frame[$y][$width - 8] = "\xc0";
+ $frame[$yOffset][7] = "\xc0";
+ ++$yOffset;
+ }
+ $setPattern = str_repeat("\xc0", 8);
+ $frame = $this->qrstrset($frame, 0, 7, $setPattern);
+ $frame = $this->qrstrset($frame, $width-8, 7, $setPattern);
+ $frame = $this->qrstrset($frame, 0, $width - 8, $setPattern);
+ // Format info
+ $setPattern = str_repeat("\x84", 9);
+ $frame = $this->qrstrset($frame, 0, 8, $setPattern);
+ $frame = $this->qrstrset($frame, $width - 8, 8, $setPattern, 8);
+ $yOffset = $width - 8;
+ for ($y=0; $y < 8; ++$y,++$yOffset) {
+ $frame[$y][8] = "\x84";
+ $frame[$yOffset][8] = "\x84";
+ }
+ // Timing pattern
+ $wo = $width - 15;
+ for ($i=1; $i < $wo; ++$i) {
+ $frame[6][7+$i] = chr(0x90 | ($i & 1));
+ $frame[7+$i][6] = chr(0x90 | ($i & 1));
+ }
+ // Alignment pattern
+ $frame = $this->putAlignmentPattern($version, $frame, $width);
+ // Version information
+ if ($version >= 7) {
+ $vinf = $this->getVersionPattern($version);
+ $v = $vinf;
+ for ($x=0; $x<6; ++$x) {
+ for ($y=0; $y<3; ++$y) {
+ $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1));
+ $v = $v >> 1;
+ }
+ }
+ $v = $vinf;
+ for ($y=0; $y<6; ++$y) {
+ for ($x=0; $x<3; ++$x) {
+ $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1));
+ $v = $v >> 1;
+ }
+ }
+ }
+ // and a little bit...
+ $frame[$width - 8][8] = "\x81";
+ return $frame;
+ }
+
+ /**
+ * Set new frame for the specified version.
+ * @param $version (int) version
+ * @return Array of unsigned char.
+ */
+ protected function newFrame($version) {
+ if (($version < 1) OR ($version > QRSPEC_VERSION_MAX)) {
+ return NULL;
+ }
+ if (!isset($this->frames[$version])) {
+ $this->frames[$version] = $this->createFrame($version);
+ }
+ if (is_null($this->frames[$version])) {
+ return NULL;
+ }
+ return $this->frames[$version];
+ }
+
+ /**
+ * Return block number 0
+ * @param $spec (array)
+ * @return int value
+ */
+ protected function rsBlockNum($spec) {
+ return ($spec[0] + $spec[3]);
+ }
+
+ /**
+ * Return block number 1
+ * @param $spec (array)
+ * @return int value
+ */
+ protected function rsBlockNum1($spec) {
+ return $spec[0];
+ }
+
+ /**
+ * Return data codes 1
+ * @param $spec (array)
+ * @return int value
+ */
+ protected function rsDataCodes1($spec) {
+ return $spec[1];
+ }
+
+ /**
+ * Return ecc codes 1
+ * @param $spec (array)
+ * @return int value
+ */
+ protected function rsEccCodes1($spec) {
+ return $spec[2];
+ }
+
+ /**
+ * Return block number 2
+ * @param $spec (array)
+ * @return int value
+ */
+ protected function rsBlockNum2($spec) {
+ return $spec[3];
+ }
+
+ /**
+ * Return data codes 2
+ * @param $spec (array)
+ * @return int value
+ */
+ protected function rsDataCodes2($spec) {
+ return $spec[4];
+ }
+
+ /**
+ * Return ecc codes 2
+ * @param $spec (array)
+ * @return int value
+ */
+ protected function rsEccCodes2($spec) {
+ return $spec[2];
+ }
+
+ /**
+ * Return data length
+ * @param $spec (array)
+ * @return int value
+ */
+ protected function rsDataLength($spec) {
+ return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]);
+ }
+
+ /**
+ * Return ecc length
+ * @param $spec (array)
+ * @return int value
+ */
+ protected function rsEccLength($spec) {
+ return ($spec[0] + $spec[3]) * $spec[2];
+ }
+
+ // - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ // QRrs
+
+ /**
+ * Initialize a Reed-Solomon codec and add it to existing rsitems
+ * @param $symsize (int) symbol size, bits
+ * @param $gfpoly (int) Field generator polynomial coefficients
+ * @param $fcr (int) first root of RS code generator polynomial, index form
+ * @param $prim (int) primitive element to generate polynomial roots
+ * @param $nroots (int) RS code generator polynomial degree (number of roots)
+ * @param $pad (int) padding bytes at front of shortened block
+ * @return array Array of RS values:mm = Bits per symbol; nn = Symbols per block; alpha_to = log lookup table array; index_of = Antilog lookup table array; genpoly = Generator polynomial array; nroots = Number of generator; roots = number of parity symbols; fcr = First consecutive root, index form; prim = Primitive element, index form; iprim = prim-th root of 1, index form; pad = Padding bytes in shortened block; gfpoly .
+ */
+ protected function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) {
+ foreach ($this->rsitems as $rs) {
+ if (($rs['pad'] != $pad) OR ($rs['nroots'] != $nroots) OR ($rs['mm'] != $symsize)
+ OR ($rs['gfpoly'] != $gfpoly) OR ($rs['fcr'] != $fcr) OR ($rs['prim'] != $prim)) {
+ continue;
+ }
+ return $rs;
+ }
+ $rs = $this->init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad);
+ array_unshift($this->rsitems, $rs);
+ return $rs;
+ }
+
+ // - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ // QRrsItem
+
+ /**
+ * modnn
+ * @param $rs (array) RS values
+ * @param $x (int) X position
+ * @return int X osition
+ */
+ protected function modnn($rs, $x) {
+ while ($x >= $rs['nn']) {
+ $x -= $rs['nn'];
+ $x = ($x >> $rs['mm']) + ($x & $rs['nn']);
+ }
+ return $x;
+ }
+
+ /**
+ * Initialize a Reed-Solomon codec and returns an array of values.
+ * @param $symsize (int) symbol size, bits
+ * @param $gfpoly (int) Field generator polynomial coefficients
+ * @param $fcr (int) first root of RS code generator polynomial, index form
+ * @param $prim (int) primitive element to generate polynomial roots
+ * @param $nroots (int) RS code generator polynomial degree (number of roots)
+ * @param $pad (int) padding bytes at front of shortened block
+ * @return array Array of RS values:mm = Bits per symbol; nn = Symbols per block; alpha_to = log lookup table array; index_of = Antilog lookup table array; genpoly = Generator polynomial array; nroots = Number of generator; roots = number of parity symbols; fcr = First consecutive root, index form; prim = Primitive element, index form; iprim = prim-th root of 1, index form; pad = Padding bytes in shortened block; gfpoly .
+ */
+ protected function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) {
+ // Based on Reed solomon encoder by Phil Karn, KA9Q (GNU-LGPLv2)
+ $rs = null;
+ // Check parameter ranges
+ if (($symsize < 0) OR ($symsize > 8)) {
+ return $rs;
+ }
+ if (($fcr < 0) OR ($fcr >= (1<<$symsize))) {
+ return $rs;
+ }
+ if (($prim <= 0) OR ($prim >= (1<<$symsize))) {
+ return $rs;
+ }
+ if (($nroots < 0) OR ($nroots >= (1<<$symsize))) {
+ return $rs;
+ }
+ if (($pad < 0) OR ($pad >= ((1<<$symsize) -1 - $nroots))) {
+ return $rs;
+ }
+ $rs = array();
+ $rs['mm'] = $symsize;
+ $rs['nn'] = (1 << $symsize) - 1;
+ $rs['pad'] = $pad;
+ $rs['alpha_to'] = array_fill(0, ($rs['nn'] + 1), 0);
+ $rs['index_of'] = array_fill(0, ($rs['nn'] + 1), 0);
+ // PHP style macro replacement ;)
+ $NN =& $rs['nn'];
+ $A0 =& $NN;
+ // Generate Galois field lookup tables
+ $rs['index_of'][0] = $A0; // log(zero) = -inf
+ $rs['alpha_to'][$A0] = 0; // alpha**-inf = 0
+ $sr = 1;
+ for ($i=0; $i<$rs['nn']; ++$i) {
+ $rs['index_of'][$sr] = $i;
+ $rs['alpha_to'][$i] = $sr;
+ $sr <<= 1;
+ if ($sr & (1 << $symsize)) {
+ $sr ^= $gfpoly;
+ }
+ $sr &= $rs['nn'];
+ }
+ if ($sr != 1) {
+ // field generator polynomial is not primitive!
+ return NULL;
+ }
+ // Form RS code generator polynomial from its roots
+ $rs['genpoly'] = array_fill(0, ($nroots + 1), 0);
+ $rs['fcr'] = $fcr;
+ $rs['prim'] = $prim;
+ $rs['nroots'] = $nroots;
+ $rs['gfpoly'] = $gfpoly;
+ // Find prim-th root of 1, used in decoding
+ for ($iprim=1; ($iprim % $prim) != 0; $iprim += $rs['nn']) {
+ ; // intentional empty-body loop!
+ }
+ $rs['iprim'] = (int)($iprim / $prim);
+ $rs['genpoly'][0] = 1;
+ for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) {
+ $rs['genpoly'][$i+1] = 1;
+ // Multiply rs->genpoly[] by @**(root + x)
+ for ($j = $i; $j > 0; --$j) {
+ if ($rs['genpoly'][$j] != 0) {
+ $rs['genpoly'][$j] = $rs['genpoly'][$j-1] ^ $rs['alpha_to'][$this->modnn($rs, $rs['index_of'][$rs['genpoly'][$j]] + $root)];
+ } else {
+ $rs['genpoly'][$j] = $rs['genpoly'][$j-1];
+ }
+ }
+ // rs->genpoly[0] can never be zero
+ $rs['genpoly'][0] = $rs['alpha_to'][$this->modnn($rs, $rs['index_of'][$rs['genpoly'][0]] + $root)];
+ }
+ // convert rs->genpoly[] to index form for quicker encoding
+ for ($i = 0; $i <= $nroots; ++$i) {
+ $rs['genpoly'][$i] = $rs['index_of'][$rs['genpoly'][$i]];
+ }
+ return $rs;
+ }
+
+ /**
+ * Encode a Reed-Solomon codec and returns the parity array
+ * @param $rs (array) RS values
+ * @param $data (array) data
+ * @param $parity (array) parity
+ * @return parity array
+ */
+ protected function encode_rs_char($rs, $data, $parity) {
+ $MM =& $rs['mm']; // bits per symbol
+ $NN =& $rs['nn']; // the total number of symbols in a RS block
+ $ALPHA_TO =& $rs['alpha_to']; // the address of an array of NN elements to convert Galois field elements in index (log) form to polynomial form
+ $INDEX_OF =& $rs['index_of']; // the address of an array of NN elements to convert Galois field elements in polynomial form to index (log) form
+ $GENPOLY =& $rs['genpoly']; // an array of NROOTS+1 elements containing the generator polynomial in index form
+ $NROOTS =& $rs['nroots']; // the number of roots in the RS code generator polynomial, which is the same as the number of parity symbols in a block
+ $FCR =& $rs['fcr']; // first consecutive root, index form
+ $PRIM =& $rs['prim']; // primitive element, index form
+ $IPRIM =& $rs['iprim']; // prim-th root of 1, index form
+ $PAD =& $rs['pad']; // the number of pad symbols in a block
+ $A0 =& $NN;
+ $parity = array_fill(0, $NROOTS, 0);
+ for ($i=0; $i < ($NN - $NROOTS - $PAD); $i++) {
+ $feedback = $INDEX_OF[$data[$i] ^ $parity[0]];
+ if ($feedback != $A0) {
+ // feedback term is non-zero
+ // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must
+ // always be for the polynomials constructed by init_rs()
+ $feedback = $this->modnn($rs, $NN - $GENPOLY[$NROOTS] + $feedback);
+ for ($j=1; $j < $NROOTS; ++$j) {
+ $parity[$j] ^= $ALPHA_TO[$this->modnn($rs, $feedback + $GENPOLY[($NROOTS - $j)])];
+ }
+ }
+ // Shift
+ array_shift($parity);
+ if ($feedback != $A0) {
+ array_push($parity, $ALPHA_TO[$this->modnn($rs, $feedback + $GENPOLY[0])]);
+ } else {
+ array_push($parity, 0);
+ }
+ }
+ return $parity;
+ }
+
+} // end QRcode class
+
+//============================================================+
+// END OF FILE
+//============================================================+
diff --git a/lib/tcpdf/readme_moodle.txt b/lib/tcpdf/readme_moodle.txt
index ae2a2dca989..31e0c3b58d9 100644
--- a/lib/tcpdf/readme_moodle.txt
+++ b/lib/tcpdf/readme_moodle.txt
@@ -6,6 +6,11 @@ Description of TCPDF library import
timesb.php, timesi.php, times.php, zapfdingbats.php) and FreeFont
* remove font/utils/
+2011/10/29
+----------
+Upgrade to tcpdf_php5 TCPDF 5.9.133 (MDL-29283)
+by Petr Skoda
+
2009/11/19
----------
Upgrade to tcpdf_php5 TCPDF 4.8.014 (MDL-20888)
diff --git a/lib/tcpdf/spotcolors.php b/lib/tcpdf/spotcolors.php
new file mode 100644
index 00000000000..b5920ba56fe
--- /dev/null
+++ b/lib/tcpdf/spotcolors.php
@@ -0,0 +1,60 @@
+.
+//
+// See LICENSE.TXT file for more information.
+// -------------------------------------------------------------------
+//
+// Description : Array of Spot Colors for TCPDF library
+//
+//============================================================+
+
+/**
+ * @file
+ * Arrays of Spot Colors for TCPDF library
+ * @author Nicola Asuni
+ * @package com.tecnick.tcpdf
+ * @since 5.9.012 (2010-11-11)
+*/
+
+/**
+ * Array of Spot colors (C,M,Y,K,name)
+ * Color keys must be in lowercase and without spaces.
+ * As long as no open standard for spot colours exists, you have to buy a colour book by one of the colour manufacturers and insert the values and names of spot colours directly.
+ * Common industry standard spot colors are: ANPA-COLOR, DIC, FOCOLTONE, GCMI, HKS, PANTONE, TOYO, TRUMATCH.
+ */
+$spotcolor = array (
+ // the following are just examples, fill the array with your own values
+ 'mytcpdfblack' => array(0, 0, 0, 100, 'My TCPDF Black'),
+ 'mytcpdfred' => array(30, 100, 90, 10, 'My TCPDF Red'),
+ 'mytcpdfgreen' => array(100, 30, 100, 0, 'My TCPDF Green'),
+ 'mytcpdfblue' => array(100, 60, 10, 5, 'My TCPDF Blue'),
+ 'mytcpdfyellow' => array(0, 20, 100, 0, 'My TCPDF Yellow'),
+ // ...
+);
+
+//============================================================+
+// END OF FILE
+//============================================================+
diff --git a/lib/tcpdf/tcpdf.p12 b/lib/tcpdf/tcpdf.p12
new file mode 100644
index 00000000000..611f0dfb179
Binary files /dev/null and b/lib/tcpdf/tcpdf.p12 differ
diff --git a/lib/tcpdf/tcpdf.php b/lib/tcpdf/tcpdf.php
index cbed80c1a8f..b9a17725df7 100644
--- a/lib/tcpdf/tcpdf.php
+++ b/lib/tcpdf/tcpdf.php
@@ -1,68 +1,75 @@
.
-//
-// See LICENSE.TXT file for more information.
-// ----------------------------------------------------------------------------
+// Last Update : 2011-10-26
+// Author : Nicola Asuni - Tecnick.com S.r.l - Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com
+// License : http://www.tecnick.com/pagefiles/tcpdf/LICENSE.TXT GNU-LGPLv3 + YOU CAN'T REMOVE ANY TCPDF COPYRIGHT NOTICE OR LINK FROM THE GENERATED PDF DOCUMENTS.
+// -------------------------------------------------------------------
//
-// Description : This is a PHP class for generating PDF documents without
-// requiring external extensions.
+// This file is part of TCPDF software library.
+//
+// TCPDF is free software: you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version. Additionally,
+// YOU CAN'T REMOVE ANY TCPDF COPYRIGHT NOTICE OR LINK FROM THE
+// GENERATED PDF DOCUMENTS.
+//
+// TCPDF is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the License
+// along with TCPDF. If not, see
+// .
+//
+// See LICENSE.TXT file for more information.
+// -------------------------------------------------------------------
+//
+// Description :
+// This is a PHP class for generating PDF documents without requiring external extensions.
//
// NOTE:
-// This class was originally derived in 2002 from the Public
-// Domain FPDF class by Olivier Plathey (http://www.fpdf.org),
-// but now is almost entirely rewritten.
+// This class was originally derived in 2002 from the Public
+// Domain FPDF class by Olivier Plathey (http://www.fpdf.org),
+// but now is almost entirely rewritten and contains thousands of
+// new lines of code and hundreds new features.
//
// Main features:
// * no external libraries are required for the basic functions;
-// * supports all ISO page formats;
-// * supports custom page formats, margins and units of measure;
-// * supports UTF-8 Unicode and Right-To-Left languages;
-// * supports TrueTypeUnicode, OpenTypeUnicode, TrueType, OpenType, Type1 and CID-0 fonts;
-// * supports document encryption;
-// * includes methods to publish some XHTML code, including forms;
-// * includes graphic (geometric) and transformation methods;
-// * includes Javascript and Forms support;
-// * includes a method to print various barcode formats: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extention, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS;
-// * includes methods to set Bookmarks and print a Table of Content;
-// * includes methods to move and delete pages;
-// * includes methods for automatic page header and footer management;
-// * supports automatic page break;
-// * supports automatic page numbering and page groups;
-// * supports automatic line break and text justification;
-// * supports JPEG and PNG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http://www.imagemagick.org/www/formats.html)
-// * supports stroke and clipping mode for text;
-// * supports clipping masks;
-// * supports Grayscale, RGB, CMYK, Spot Colors and Transparencies;
-// * supports several annotations, including links, text and file attachments;
-// * supports page compression (requires zlib extension);
-// * supports text hyphenation.
-// * supports transactions to UNDO commands.
-// * supports signature certifications.
+// * all standard page formats, custom page formats, custom margins and units of measure;
+// * UTF-8 Unicode and Right-To-Left languages;
+// * TrueTypeUnicode, TrueType, Type1 and CID-0 fonts;
+// * font subsetting;
+// * methods to publish some XHTML + CSS code, Javascript and Forms;
+// * images, graphic (geometric figures) and transformation methods;
+// * supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http://www.imagemagick.org/www/formats.html)
+// * 1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extention, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, Datamatrix, QR-Code, PDF417;
+// * JPEG and PNG ICC profiles, Grayscale, RGB, CMYK, Spot Colors and Transparencies;
+// * automatic page header and footer management;
+// * document encryption up to 256 bit and digital signature certifications;
+// * transactions to UNDO commands;
+// * PDF annotations, including links, text and file attachments;
+// * text rendering modes (fill, stroke and clipping);
+// * multiple columns mode;
+// * no-write page regions;
+// * bookmarks, named destinations and table of content;
+// * text hyphenation;
+// * text stretching and spacing (tracking/kerning);
+// * automatic page break, line break and text alignments including justification;
+// * automatic page numbering and page groups;
+// * move and delete pages;
+// * page compression (requires php-zlib extension);
+// * XOBject Templates;
+// * Layers and object visibility.
+// * PDF/A-1b support.
//
// -----------------------------------------------------------
// THANKS TO:
-//
+//
// Olivier Plathey (http://www.fpdf.org) for original FPDF.
// Efthimios Mavrogeorgiadis (emavro@yahoo.com) for suggestions on RTL language support.
// Klemen Vodopivec (http://www.fpdf.de/downloads/addons/37/) for Encryption algorithm.
@@ -87,4351 +94,7002 @@
// Kosmas Papachristos for some CSS improvements.
// Marcel Partap for some fixes.
// Won Kyu Park for several suggestions, fixes and patches.
+// Dominik Dzienia for QR-code support.
+// Laurent Minguet for some suggestions.
+// Christian Deligant for some suggestions and fixes.
// Anyone that has reported a bug or sent a suggestion.
//============================================================+
/**
+ * @file
* This is a PHP class for generating PDF documents without requiring external extensions.
* TCPDF project (http://www.tcpdf.org) was originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.
* TCPDF main features are:
*
-* no external libraries are required for the basic functions;
-* supports all ISO page formats;
-* supports custom page formats, margins and units of measure;
-* supports UTF-8 Unicode and Right-To-Left languages;
-* supports TrueTypeUnicode, OpenTypeUnicode, TrueType, OpenType, Type1 and CID-0 fonts;
-* supports document encryption;
-* includes methods to publish some XHTML code, including forms;
-* includes graphic (geometric) and transformation methods;
-* includes Javascript and Forms support;
-* includes a method to print various barcode formats: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extention, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS;
-* includes methods to set Bookmarks and print a Table of Content;
-* includes methods to move and delete pages;
-* includes methods for automatic page header and footer management;
-* supports automatic page break;
-* supports automatic page numbering and page groups;
-* supports automatic line break and text justification;
-* supports JPEG and PNG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http://www.imagemagick.org/www/formats.html)
-* supports stroke and clipping mode for text;
-* supports clipping masks;
-* supports Grayscale, RGB, CMYK, Spot Colors and Transparencies;
-* supports several annotations, including links, text and file attachments;
-* supports page compression (requires zlib extension);
-* supports text hyphenation.
-* supports transactions to UNDO commands.
-* supports signature certifications.
+ * no external libraries are required for the basic functions;
+ * all standard page formats, custom page formats, custom margins and units of measure;
+ * UTF-8 Unicode and Right-To-Left languages;
+ * TrueTypeUnicode, TrueType, Type1 and CID-0 fonts;
+ * font subsetting;
+ * methods to publish some XHTML + CSS code, Javascript and Forms;
+ * images, graphic (geometric figures) and transformation methods;
+ * supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http://www.imagemagick.org/www/formats.html)
+ * 1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extention, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, Datamatrix, QR-Code, PDF417;
+ * JPEG and PNG ICC profiles, Grayscale, RGB, CMYK, Spot Colors and Transparencies;
+ * automatic page header and footer management;
+ * document encryption up to 256 bit and digital signature certifications;
+ * transactions to UNDO commands;
+ * PDF annotations, including links, text and file attachments;
+ * text rendering modes (fill, stroke and clipping);
+ * multiple columns mode;
+ * no-write page regions;
+ * bookmarks, named destinations and table of content;
+ * text hyphenation;
+ * text stretching and spacing (tracking/kerning);
+ * automatic page break, line break and text alignments including justification;
+ * automatic page numbering and page groups;
+ * move and delete pages;
+ * page compression (requires php-zlib extension);
+ * XOBject Templates;
+ * Layers and object visibility;
+ * PDF/A-1b support.
*
* Tools to encode your unicode fonts are on fonts/utils directory.
* @package com.tecnick.tcpdf
- * @abstract Class for generating PDF files on-the-fly without requiring external extensions.
* @author Nicola Asuni
- * @copyright 2002-2009 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com
- * @link http://www.tcpdf.org
- * @license http://www.gnu.org/copyleft/lesser.html LGPL
- * @version 4.8.014
+ * @version 5.9.133
*/
-/**
- * main configuration file
- */
+// Main configuration file. Define the K_TCPDF_EXTERNAL_CONFIG constant to skip this file.
require_once(dirname(__FILE__).'/config/tcpdf_config.php');
-// includes some support files
-
/**
- * unicode data
+ * @class TCPDF
+ * PHP class for generating PDF documents without requiring external extensions.
+ * TCPDF project (http://www.tcpdf.org) has been originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.
+ * @package com.tecnick.tcpdf
+ * @brief PHP class for generating PDF documents without requiring external extensions.
+ * @version 5.9.133
+ * @author Nicola Asuni - info@tecnick.com
*/
-require_once(dirname(__FILE__).'/unicode_data.php');
+class TCPDF {
-/**
- * html colors table
- */
-require_once(dirname(__FILE__).'/htmlcolors.php');
+ // private properties
-if (!class_exists('TCPDF', false)) {
/**
- * define default PDF document producer
- */
- define('PDF_PRODUCER', 'TCPDF 4.8.014 (http://www.tcpdf.org)');
-
+ * Current TCPDF version.
+ * @private
+ */
+ private $tcpdf_version = '5.9.133';
+
+ // Protected properties
+
/**
- * This is a PHP class for generating PDF documents without requiring external extensions.
- * TCPDF project (http://www.tcpdf.org) has been originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.
- * @name TCPDF
- * @package com.tecnick.tcpdf
- * @version 4.8.014
- * @author Nicola Asuni - info@tecnick.com
- * @link http://www.tcpdf.org
- * @license http://www.gnu.org/copyleft/lesser.html LGPL
- */
- class TCPDF {
-
- // protected or Protected properties
-
- /**
- * @var current page number
- * @access protected
- */
- protected $page;
-
- /**
- * @var current object number
- * @access protected
- */
- protected $n;
-
- /**
- * @var array of object offsets
- * @access protected
- */
- protected $offsets;
-
- /**
- * @var buffer holding in-memory PDF
- * @access protected
- */
- protected $buffer;
-
- /**
- * @var array containing pages
- * @access protected
- */
- protected $pages = array();
-
- /**
- * @var current document state
- * @access protected
- */
- protected $state;
-
- /**
- * @var compression flag
- * @access protected
- */
- protected $compress;
-
- /**
- * @var current page orientation (P = Portrait, L = Landscape)
- * @access protected
- */
- protected $CurOrientation;
-
- /**
- * @var array that stores page dimensions and graphic status.$this->pagedim[$this->page]['w'] => page_width_in_points $this->pagedim[$this->page]['h'] => height in points $this->pagedim[$this->page]['wk'] => page_width_in_points $this->pagedim[$this->page]['hk'] => height $this->pagedim[$this->page]['tm'] => top_margin $this->pagedim[$this->page]['bm'] => bottom_margin $this->pagedim[$this->page]['lm'] => left_margin $this->pagedim[$this->page]['rm'] => right_margin $this->pagedim[$this->page]['pb'] => auto_page_break $this->pagedim[$this->page]['or'] => page_orientation $this->pagedim[$this->page]['olm'] => original_left_margin $this->pagedim[$this->page]['orm'] => original_right_margin
- * @access protected
- */
- protected $pagedim = array();
-
- /**
- * @var scale factor (number of points in user unit)
- * @access protected
- */
- protected $k;
-
- /**
- * @var width of page format in points
- * @access protected
- */
- protected $fwPt;
-
- /**
- * @var height of page format in points
- * @access protected
- */
- protected $fhPt;
-
- /**
- * @var current width of page in points
- * @access protected
- */
- protected $wPt;
-
- /**
- * @var current height of page in points
- * @access protected
- */
- protected $hPt;
-
- /**
- * @var current width of page in user unit
- * @access protected
- */
- protected $w;
-
- /**
- * @var current height of page in user unit
- * @access protected
- */
- protected $h;
-
- /**
- * @var left margin
- * @access protected
- */
- protected $lMargin;
-
- /**
- * @var top margin
- * @access protected
- */
- protected $tMargin;
-
- /**
- * @var right margin
- * @access protected
- */
- protected $rMargin;
-
- /**
- * @var page break margin
- * @access protected
- */
- protected $bMargin;
-
- /**
- * @var cell internal padding
- * @access protected
- */
- //protected
- public $cMargin;
-
- /**
- * @var cell internal padding (previous value)
- * @access protected
- */
- protected $oldcMargin;
-
- /**
- * @var current horizontal position in user unit for cell positioning
- * @access protected
- */
- protected $x;
-
- /**
- * @var current vertical position in user unit for cell positioning
- * @access protected
- */
- protected $y;
-
- /**
- * @var height of last cell printed
- * @access protected
- */
- protected $lasth;
-
- /**
- * @var line width in user unit
- * @access protected
- */
- protected $LineWidth;
-
- /**
- * @var array of standard font names
- * @access protected
- */
- protected $CoreFonts;
-
- /**
- * @var array of used fonts
- * @access protected
- */
- protected $fonts = array();
-
- /**
- * @var array of font files
- * @access protected
- */
- protected $FontFiles = array();
-
- /**
- * @var array of encoding differences
- * @access protected
- */
- protected $diffs = array();
-
- /**
- * @var array of used images
- * @access protected
- */
- protected $images = array();
-
- /**
- * @var array of Annotations in pages
- * @access protected
- */
- protected $PageAnnots = array();
-
- /**
- * @var array of internal links
- * @access protected
- */
- protected $links = array();
-
- /**
- * @var current font family
- * @access protected
- */
- protected $FontFamily;
-
- /**
- * @var current font style
- * @access protected
- */
- protected $FontStyle;
-
- /**
- * @var current font ascent (distance between font top and baseline)
- * @access protected
- * @since 2.8.000 (2007-03-29)
- */
- protected $FontAscent;
-
- /**
- * @var current font descent (distance between font bottom and baseline)
- * @access protected
- * @since 2.8.000 (2007-03-29)
- */
- protected $FontDescent;
-
- /**
- * @var underlining flag
- * @access protected
- */
- protected $underline;
-
- /**
- * @var current font info
- * @access protected
- */
- protected $CurrentFont;
-
- /**
- * @var current font size in points
- * @access protected
- */
- protected $FontSizePt;
-
- /**
- * @var current font size in user unit
- * @access protected
- */
- protected $FontSize;
-
- /**
- * @var commands for drawing color
- * @access protected
- */
- protected $DrawColor;
-
- /**
- * @var commands for filling color
- * @access protected
- */
- protected $FillColor;
-
- /**
- * @var commands for text color
- * @access protected
- */
- protected $TextColor;
-
- /**
- * @var indicates whether fill and text colors are different
- * @access protected
- */
- protected $ColorFlag;
-
- /**
- * @var automatic page breaking
- * @access protected
- */
- protected $AutoPageBreak;
-
- /**
- * @var threshold used to trigger page breaks
- * @access protected
- */
- protected $PageBreakTrigger;
-
- /**
- * @var flag set when processing footer
- * @access protected
- */
- protected $InFooter = false;
-
- /**
- * @var zoom display mode
- * @access protected
- */
- protected $ZoomMode;
-
- /**
- * @var layout display mode
- * @access protected
- */
- protected $LayoutMode;
-
- /**
- * @var title
- * @access protected
- */
- protected $title = '';
-
- /**
- * @var subject
- * @access protected
- */
- protected $subject = '';
-
- /**
- * @var author
- * @access protected
- */
- protected $author = '';
-
- /**
- * @var keywords
- * @access protected
- */
- protected $keywords = '';
-
- /**
- * @var creator
- * @access protected
- */
- protected $creator = '';
-
- /**
- * @var alias for total number of pages
- * @access protected
- */
- protected $AliasNbPages = '{nb}';
-
- /**
- * @var alias for page number
- * @access protected
- */
- protected $AliasNumPage = '{pnb}';
-
- /**
- * @var right-bottom corner X coordinate of inserted image
- * @since 2002-07-31
- * @author Nicola Asuni
- * @access protected
- */
- protected $img_rb_x;
-
- /**
- * @var right-bottom corner Y coordinate of inserted image
- * @since 2002-07-31
- * @author Nicola Asuni
- * @access protected
- */
- protected $img_rb_y;
-
- /**
- * @var adjusting factor to convert pixels to user units.
- * @since 2004-06-14
- * @author Nicola Asuni
- * @access protected
- */
- protected $imgscale = 1;
-
- /**
- * @var boolean set to true when the input text is unicode (require unicode fonts)
- * @since 2005-01-02
- * @author Nicola Asuni
- * @access protected
- */
- protected $isunicode = false;
-
- /**
- * @var PDF version
- * @since 1.5.3
- * @access protected
- */
- protected $PDFVersion = '1.7';
-
-
- // ----------------------
-
- /**
- * @var Minimum distance between header and top page margin.
- * @access protected
- */
- protected $header_margin;
-
- /**
- * @var Minimum distance between footer and bottom page margin.
- * @access protected
- */
- protected $footer_margin;
-
- /**
- * @var original left margin value
- * @access protected
- * @since 1.53.0.TC013
- */
- protected $original_lMargin;
-
- /**
- * @var original right margin value
- * @access protected
- * @since 1.53.0.TC013
- */
- protected $original_rMargin;
-
- /**
- * @var Header font.
- * @access protected
- */
- protected $header_font;
-
- /**
- * @var Footer font.
- * @access protected
- */
- protected $footer_font;
-
- /**
- * @var Language templates.
- * @access protected
- */
- protected $l;
-
- /**
- * @var Barcode to print on page footer (only if set).
- * @access protected
- */
- protected $barcode = false;
-
- /**
- * @var If true prints header
- * @access protected
- */
- protected $print_header = true;
-
- /**
- * @var If true prints footer.
- * @access protected
- */
- protected $print_footer = true;
-
- /**
- * @var Header image logo.
- * @access protected
- */
- protected $header_logo = '';
-
- /**
- * @var Header image logo width in mm.
- * @access protected
- */
- protected $header_logo_width = 30;
-
- /**
- * @var String to print as title on document header.
- * @access protected
- */
- protected $header_title = '';
-
- /**
- * @var String to print on document header.
- * @access protected
- */
- protected $header_string = '';
-
- /**
- * @var Default number of columns for html table.
- * @access protected
- */
- protected $default_table_columns = 4;
-
-
- // variables for html parser
-
- /**
- * @var HTML PARSER: array to store current link and rendering styles.
- * @access protected
- */
- protected $HREF = array();
-
- /**
- * @var store a list of available fonts on filesystem.
- * @access protected
- */
- protected $fontlist = array();
-
- /**
- * @var current foreground color
- * @access protected
- */
- protected $fgcolor;
-
- /**
- * @var HTML PARSER: array of boolean values, true in case of ordered list (OL), false otherwise.
- * @access protected
- */
- protected $listordered = array();
-
- /**
- * @var HTML PARSER: array count list items on nested lists.
- * @access protected
- */
- protected $listcount = array();
-
- /**
- * @var HTML PARSER: current list nesting level.
- * @access protected
- */
- protected $listnum = 0;
-
- /**
- * @var HTML PARSER: indent amount for lists.
- * @access protected
- */
- protected $listindent;
-
- /**
- * @var current background color
- * @access protected
- */
- protected $bgcolor;
-
- /**
- * @var Store temporary font size in points.
- * @access protected
- */
- protected $tempfontsize = 10;
-
- /**
- * @var spacer for LI tags.
- * @access protected
- */
- protected $lispacer = '';
-
- /**
- * @var default encoding
- * @access protected
- * @since 1.53.0.TC010
- */
- protected $encoding = 'UTF-8';
-
- /**
- * @var PHP internal encoding
- * @access protected
- * @since 1.53.0.TC016
- */
- protected $internal_encoding;
-
- /**
- * @var indicates if the document language is Right-To-Left
- * @access protected
- * @since 2.0.000
- */
- protected $rtl = false;
-
- /**
- * @var used to force RTL or LTR string inversion
- * @access protected
- * @since 2.0.000
- */
- protected $tmprtl = false;
-
- // --- Variables used for document encryption:
-
- /**
- * Indicates whether document is protected
- * @access protected
- * @since 2.0.000 (2008-01-02)
- */
- protected $encrypted;
-
- /**
- * U entry in pdf document
- * @access protected
- * @since 2.0.000 (2008-01-02)
- */
- protected $Uvalue;
-
- /**
- * O entry in pdf document
- * @access protected
- * @since 2.0.000 (2008-01-02)
- */
- protected $Ovalue;
-
- /**
- * P entry in pdf document
- * @access protected
- * @since 2.0.000 (2008-01-02)
- */
- protected $Pvalue;
-
- /**
- * encryption object id
- * @access protected
- * @since 2.0.000 (2008-01-02)
- */
- protected $enc_obj_id;
-
- /**
- * last RC4 key encrypted (cached for optimisation)
- * @access protected
- * @since 2.0.000 (2008-01-02)
- */
- protected $last_rc4_key;
-
- /**
- * last RC4 computed key
- * @access protected
- * @since 2.0.000 (2008-01-02)
- */
- protected $last_rc4_key_c;
-
- /**
- * RC4 padding
- * @access protected
- */
- protected $padding = "\x28\xBF\x4E\x5E\x4E\x75\x8A\x41\x64\x00\x4E\x56\xFF\xFA\x01\x08\x2E\x2E\x00\xB6\xD0\x68\x3E\x80\x2F\x0C\xA9\xFE\x64\x53\x69\x7A";
-
- /**
- * RC4 encryption key
- * @access protected
- */
- protected $encryption_key;
-
- // --- bookmark ---
-
- /**
- * Outlines for bookmark
- * @access protected
- * @since 2.1.002 (2008-02-12)
- */
- protected $outlines = array();
-
- /**
- * Outline root for bookmark
- * @access protected
- * @since 2.1.002 (2008-02-12)
- */
- protected $OutlineRoot;
-
-
- // --- javascript and form ---
-
- /**
- * javascript code
- * @access protected
- * @since 2.1.002 (2008-02-12)
- */
- protected $javascript = '';
-
- /**
- * javascript counter
- * @access protected
- * @since 2.1.002 (2008-02-12)
- */
- protected $n_js;
-
- /**
- * line trough state
- * @access protected
- * @since 2.8.000 (2008-03-19)
- */
- protected $linethrough;
-
- // --- Variables used for User's Rights ---
- // See PDF reference chapter 8.7 Digital Signatures
-
- /**
- * If true enables user's rights on PDF reader
- * @access protected
- * @since 2.9.000 (2008-03-26)
- */
- protected $ur;
-
- /**
- * Names specifying additional document-wide usage rights for the document.
- * @access protected
- * @since 2.9.000 (2008-03-26)
- */
- protected $ur_document;
-
- /**
- * Names specifying additional annotation-related usage rights for the document.
- * @access protected
- * @since 2.9.000 (2008-03-26)
- */
- protected $ur_annots;
-
- /**
- * Names specifying additional form-field-related usage rights for the document.
- * @access protected
- * @since 2.9.000 (2008-03-26)
- */
- protected $ur_form;
-
- /**
- * Names specifying additional signature-related usage rights for the document.
- * @access protected
- * @since 2.9.000 (2008-03-26)
- */
- protected $ur_signature;
-
- /**
- * Dot Per Inch Document Resolution (do not change)
- * @access protected
- * @since 3.0.000 (2008-03-27)
- */
- protected $dpi = 72;
-
- /**
- * Array of page numbers were a new page group was started
- * @access protected
- * @since 3.0.000 (2008-03-27)
- */
- protected $newpagegroup = array();
-
- /**
- * Contains the number of pages of the groups
- * @access protected
- * @since 3.0.000 (2008-03-27)
- */
- protected $pagegroups;
-
- /**
- * Contains the alias of the current page group
- * @access protected
- * @since 3.0.000 (2008-03-27)
- */
- protected $currpagegroup;
-
- /**
- * Restrict the rendering of some elements to screen or printout.
- * @access protected
- * @since 3.0.000 (2008-03-27)
- */
- protected $visibility = 'all';
-
- /**
- * Print visibility.
- * @access protected
- * @since 3.0.000 (2008-03-27)
- */
- protected $n_ocg_print;
-
- /**
- * View visibility.
- * @access protected
- * @since 3.0.000 (2008-03-27)
- */
- protected $n_ocg_view;
-
- /**
- * Array of transparency objects and parameters.
- * @access protected
- * @since 3.0.000 (2008-03-27)
- */
- protected $extgstates;
-
- /**
- * Set the default JPEG compression quality (1-100)
- * @access protected
- * @since 3.0.000 (2008-03-27)
- */
- protected $jpeg_quality;
-
- /**
- * Default cell height ratio.
- * @access protected
- * @since 3.0.014 (2008-05-23)
- */
- protected $cell_height_ratio = K_CELL_HEIGHT_RATIO;
-
- /**
- * PDF viewer preferences.
- * @access protected
- * @since 3.1.000 (2008-06-09)
- */
- protected $viewer_preferences;
-
- /**
- * A name object specifying how the document should be displayed when opened.
- * @access protected
- * @since 3.1.000 (2008-06-09)
- */
- protected $PageMode;
-
- /**
- * Array for storing gradient information.
- * @access protected
- * @since 3.1.000 (2008-06-09)
- */
- protected $gradients = array();
-
- /**
- * Array used to store positions inside the pages buffer.
- * keys are the page numbers
- * @access protected
- * @since 3.2.000 (2008-06-26)
- */
- protected $intmrk = array();
-
- /**
- * Array used to store content positions inside the pages buffer.
- * keys are the page numbers
- * @access protected
- * @since 4.6.021 (2009-07-20)
- */
- protected $cntmrk = array();
-
- /**
- * Array used to store footer positions of each page.
- * @access protected
- * @since 3.2.000 (2008-07-01)
- */
- protected $footerpos = array();
-
-
- /**
- * Array used to store footer lenght of each page.
- * @access protected
- * @since 4.0.014 (2008-07-29)
- */
- protected $footerlen = array();
-
- /**
- * True if a newline is created.
- * @access protected
- * @since 3.2.000 (2008-07-01)
- */
- protected $newline = true;
-
- /**
- * End position of the latest inserted line
- * @access protected
- * @since 3.2.000 (2008-07-01)
- */
- protected $endlinex = 0;
-
- /**
- * PDF string for last line width
- * @access protected
- * @since 4.0.006 (2008-07-16)
- */
- protected $linestyleWidth = '';
-
- /**
- * PDF string for last line width
- * @access protected
- * @since 4.0.006 (2008-07-16)
- */
- protected $linestyleCap = '0 J';
-
- /**
- * PDF string for last line width
- * @access protected
- * @since 4.0.006 (2008-07-16)
- */
- protected $linestyleJoin = '0 j';
-
- /**
- * PDF string for last line width
- * @access protected
- * @since 4.0.006 (2008-07-16)
- */
- protected $linestyleDash = '[] 0 d';
-
- /**
- * True if marked-content sequence is open
- * @access protected
- * @since 4.0.013 (2008-07-28)
- */
- protected $openMarkedContent = false;
-
- /**
- * Count the latest inserted vertical spaces on HTML
- * @access protected
- * @since 4.0.021 (2008-08-24)
- */
- protected $htmlvspace = 0;
-
- /**
- * Array of Spot colors
- * @access protected
- * @since 4.0.024 (2008-09-12)
- */
- protected $spot_colors = array();
-
- /**
- * Symbol used for HTML unordered list items
- * @access protected
- * @since 4.0.028 (2008-09-26)
- */
- protected $lisymbol = '';
-
- /**
- * String used to mark the beginning and end of EPS image blocks
- * @access protected
- * @since 4.1.000 (2008-10-18)
- */
- protected $epsmarker = 'x#!#EPS#!#x';
-
- /**
- * Array of transformation matrix
- * @access protected
- * @since 4.2.000 (2008-10-29)
- */
- protected $transfmatrix = array();
-
- /**
- * Current key for transformation matrix
- * @access protected
- * @since 4.8.005 (2009-09-17)
- */
- protected $transfmatrix_key = 0;
-
- /**
- * Booklet mode for double-sided pages
- * @access protected
- * @since 4.2.000 (2008-10-29)
- */
- protected $booklet = false;
-
- /**
- * Epsilon value used for float calculations
- * @access protected
- * @since 4.2.000 (2008-10-29)
- */
- protected $feps = 0.005;
-
- /**
- * Array used for custom vertical spaces for HTML tags
- * @access protected
- * @since 4.2.001 (2008-10-30)
- */
- protected $tagvspaces = array();
-
- /**
- * @var HTML PARSER: custom indent amount for lists.
- * Negative value means disabled.
- * @access protected
- * @since 4.2.007 (2008-11-12)
- */
- protected $customlistindent = -1;
-
- /**
- * @var if true keeps the border open for the cell sides that cross the page.
- * @access protected
- * @since 4.2.010 (2008-11-14)
- */
- protected $opencell = true;
-
- /**
- * @var array of files to embedd
- * @access protected
- * @since 4.4.000 (2008-12-07)
- */
- protected $embeddedfiles = array();
-
- /**
- * @var boolean true when inside html pre tag
- * @access protected
- * @since 4.4.001 (2008-12-08)
- */
- protected $premode = false;
-
- /**
- * Array used to store positions of graphics transformation blocks inside the page buffer.
- * keys are the page numbers
- * @access protected
- * @since 4.4.002 (2008-12-09)
- */
- protected $transfmrk = array();
-
- /**
- * Default color for html links
- * @access protected
- * @since 4.4.003 (2008-12-09)
- */
- protected $htmlLinkColorArray = array(0, 0, 255);
-
- /**
- * Default font style to add to html links
- * @access protected
- * @since 4.4.003 (2008-12-09)
- */
- protected $htmlLinkFontStyle = 'U';
-
- /**
- * Counts the number of pages.
- * @access protected
- * @since 4.5.000 (2008-12-31)
- */
- protected $numpages = 0;
-
- /**
- * Array containing page lenghts in bytes.
- * @access protected
- * @since 4.5.000 (2008-12-31)
- */
- protected $pagelen = array();
-
- /**
- * Counts the number of pages.
- * @access protected
- * @since 4.5.000 (2008-12-31)
- */
- protected $numimages = 0;
-
- /**
- * Store the image keys.
- * @access protected
- * @since 4.5.000 (2008-12-31)
- */
- protected $imagekeys = array();
-
- /**
- * Lenght of the buffer in bytes.
- * @access protected
- * @since 4.5.000 (2008-12-31)
- */
- protected $bufferlen = 0;
-
- /**
- * If true enables disk caching.
- * @access protected
- * @since 4.5.000 (2008-12-31)
- */
- protected $diskcache = false;
-
- /**
- * Counts the number of fonts.
- * @access protected
- * @since 4.5.000 (2009-01-02)
- */
- protected $numfonts = 0;
-
- /**
- * Store the font keys.
- * @access protected
- * @since 4.5.000 (2009-01-02)
- */
- protected $fontkeys = array();
-
- /**
- * Store the font object IDs.
- * @access protected
- * @since 4.8.001 (2009-09-09)
- */
- protected $font_obj_ids = array();
-
- /**
- * Store the fage status (true when opened, false when closed).
- * @access protected
- * @since 4.5.000 (2009-01-02)
- */
- protected $pageopen = array();
-
- /**
- * Default monospaced font
- * @access protected
- * @since 4.5.025 (2009-03-10)
- */
- protected $default_monospaced_font = 'courier';
-
- /**
- * Used to store a cloned copy of the current class object
- * @access protected
- * @since 4.5.029 (2009-03-19)
- */
- protected $objcopy;
-
- /**
- * Array used to store the lenghts of cache files
- * @access protected
- * @since 4.5.029 (2009-03-19)
- */
- protected $cache_file_lenght = array();
-
- /**
- * Table header content to be repeated on each new page
- * @access protected
- * @since 4.5.030 (2009-03-20)
- */
- protected $thead = '';
-
- /**
- * Margins used for table header.
- * @access protected
- * @since 4.5.030 (2009-03-20)
- */
- protected $theadMargins = array();
-
- /**
- * Cache array for UTF8StringToArray() method.
- * @access protected
- * @since 4.5.037 (2009-04-07)
- */
- protected $cache_UTF8StringToArray = array();
-
- /**
- * Maximum size of cache array used for UTF8StringToArray() method.
- * @access protected
- * @since 4.5.037 (2009-04-07)
- */
- protected $cache_maxsize_UTF8StringToArray = 8;
-
- /**
- * Current size of cache array used for UTF8StringToArray() method.
- * @access protected
- * @since 4.5.037 (2009-04-07)
- */
- protected $cache_size_UTF8StringToArray = 0;
-
- /**
- * If true enables document signing
- * @access protected
- * @since 4.6.005 (2009-04-24)
- */
- protected $sign = false;
-
- /**
- * Signature data
- * @access protected
- * @since 4.6.005 (2009-04-24)
- */
- protected $signature_data = array();
-
- /**
- * Signature max lenght
- * @access protected
- * @since 4.6.005 (2009-04-24)
- */
- protected $signature_max_lenght = 11742;
-
- /**
- * Regular expression used to find blank characters used for word-wrapping.
- * @access protected
- * @since 4.6.006 (2009-04-28)
- */
- protected $re_spaces = '/[\s]/';
-
- /**
- * Signature object ID
- * @access protected
- * @since 4.6.022 (2009-06-23)
- */
- protected $sig_obj_id = 0;
-
- /**
- * ByteRange placemark used during signature process.
- * @access protected
- * @since 4.6.028 (2009-08-25)
- */
- protected $byterange_string = '/ByteRange[0 ********** ********** **********]';
-
- /**
- * Placemark used during signature process.
- * @access protected
- * @since 4.6.028 (2009-08-25)
- */
- protected $sig_annot_ref = '***SIGANNREF*** 0 R';
-
- /**
- * ID of page objects
- * @access protected
- * @since 4.7.000 (2009-08-29)
- */
- protected $page_obj_id = array();
-
- /**
- * Start ID for embedded file objects
- * @access protected
- * @since 4.7.000 (2009-08-29)
- */
- protected $embedded_start_obj_id = 100000;
-
- /**
- * Start ID for annotation objects
- * @access protected
- * @since 4.7.000 (2009-08-29)
- */
- protected $annots_start_obj_id = 200000;
-
- /**
- * Max ID of annotation object
- * @access protected
- * @since 4.7.000 (2009-08-29)
- */
- protected $annot_obj_id = 200000;
-
- /**
- * Current ID of annotation object
- * @access protected
- * @since 4.8.003 (2009-09-15)
- */
- protected $curr_annot_obj_id = 200000;
-
- /**
- * List of form annotations IDs
- * @access protected
- * @since 4.8.000 (2009-09-07)
- */
- protected $form_obj_id = array();
-
- /*
- * Deafult Javascript field properties. Possible values are described on official Javascript for Acrobat API reference. Annotation options can be directly specified using the 'aopt' entry.
- * @access protected
- * @since 4.8.000 (2009-09-07)
- */
- protected $default_form_prop = array('lineWidth'=>1, 'borderStyle'=>'solid', 'fillColor'=>array(255, 255, 255), 'strokeColor'=>array(128, 128, 128));
-
- /**
- * Javascript objects array
- * @access protected
- * @since 4.8.000 (2009-09-07)
- */
- protected $js_objects = array();
-
- /**
- * Start ID for javascript objects
- * @access protected
- * @since 4.8.000 (2009-09-07)
- */
- protected $js_start_obj_id = 300000;
-
- /**
- * Current ID of javascript object
- * @access protected
- * @since 4.8.000 (2009-09-07)
- */
- protected $js_obj_id = 300000;
-
- /**
- * Current form action (used during XHTML rendering)
- * @access protected
- * @since 4.8.000 (2009-09-07)
- */
- protected $form_action = '';
-
- /**
- * Current form encryption type (used during XHTML rendering)
- * @access protected
- * @since 4.8.000 (2009-09-07)
- */
- protected $form_enctype = 'application/x-www-form-urlencoded';
-
- /**
- * Current method to submit forms.
- * @access protected
- * @since 4.8.000 (2009-09-07)
- */
- protected $form_mode = 'post';
-
- /**
- * Start ID for appearance streams XObjects
- * @access protected
- * @since 4.8.001 (2009-09-09)
- */
- protected $apxo_start_obj_id = 400000;
-
- /**
- * Current ID of appearance streams XObjects
- * @access protected
- * @since 4.8.001 (2009-09-09)
- */
- protected $apxo_obj_id = 400000;
-
- /**
- * List of fonts used on form fields (fontname => fontkey).
- * @access protected
- * @since 4.8.001 (2009-09-09)
- */
- protected $annotation_fonts = array();
-
- /**
- * List of radio buttons parent objects.
- * @access protected
- * @since 4.8.001 (2009-09-09)
- */
- protected $radiobutton_groups = array();
-
- /**
- * List of radio group objects IDs
- * @access protected
- * @since 4.8.001 (2009-09-09)
- */
- protected $radio_groups = array();
-
- /**
- * Text indentation value (used for text-indent CSS attribute)
- * @access protected
- * @since 4.8.006 (2009-09-23)
- */
- protected $textindent = 0;
-
- /**
- * Store page number when startTransaction() is called.
- * @access protected
- * @since 4.8.006 (2009-09-23)
- */
- protected $start_transaction_page = 0;
-
- //------------------------------------------------------------
- // METHODS
- //------------------------------------------------------------
-
- /**
- * This is the class constructor.
- * It allows to set up the page format, the orientation and
- * the measure unit used in all the methods (except for the font sizes).
- * @since 1.0
- * @param string $orientation page orientation. Possible values are (case insensitive):P or Portrait (default) L or Landscape
- * @param string $unit User measure unit. Possible values are:pt: point mm: millimeter (default) cm: centimeter in: inch A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This is a very common unit in typography; font sizes are expressed in that unit.
- * @param mixed $format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).4A0 2A0 A0 A1 A2 A3 A4 (default) A5 A6 A7 A8 A9 A10 B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 RA0 RA1 RA2 RA3 RA4 SRA0 SRA1 SRA2 SRA3 SRA4 LETTER LEGAL EXECUTIVE FOLIO
- * @param boolean $unicode TRUE means that the input text is unicode (default = true)
- * @param boolean $diskcache if TRUE reduce the RAM memory usage by caching temporary data on filesystem (slower).
- * @param String $encoding charset encoding; default is UTF-8
- * @access public
- */
- public function __construct($orientation='P', $unit='mm', $format='A4', $unicode=true, $encoding='UTF-8', $diskcache=false) {
- /* Set internal character encoding to ASCII */
- if (function_exists('mb_internal_encoding') AND mb_internal_encoding()) {
- $this->internal_encoding = mb_internal_encoding();
- mb_internal_encoding('ASCII');
- }
- // set disk caching
- $this->diskcache = $diskcache ? true : false;
- // set language direction
- $this->rtl = false;
- $this->tmprtl = false;
- //Some checks
- $this->_dochecks();
- //Initialization of properties
- $this->isunicode = $unicode;
- $this->page = 0;
- $this->transfmrk[0] = array();
- $this->pagedim = array();
- $this->n = 2;
- $this->buffer = '';
- $this->pages = array();
- $this->state = 0;
- $this->fonts = array();
- $this->FontFiles = array();
- $this->diffs = array();
- $this->images = array();
- $this->links = array();
- $this->gradients = array();
- $this->InFooter = false;
- $this->lasth = 0;
- $this->FontFamily = 'helvetica';
- $this->FontStyle = '';
- $this->FontSizePt = 12;
- $this->underline = false;
- $this->linethrough = false;
- $this->DrawColor = '0 G';
- $this->FillColor = '0 g';
- $this->TextColor = '0 g';
- $this->ColorFlag = false;
- // encryption values
- $this->encrypted = false;
- $this->last_rc4_key = '';
- $this->padding = "\x28\xBF\x4E\x5E\x4E\x75\x8A\x41\x64\x00\x4E\x56\xFF\xFA\x01\x08\x2E\x2E\x00\xB6\xD0\x68\x3E\x80\x2F\x0C\xA9\xFE\x64\x53\x69\x7A";
- //Standard Unicode fonts
- $this->CoreFonts = array(
- 'courier'=>'Courier',
- 'courierB'=>'Courier-Bold',
- 'courierI'=>'Courier-Oblique',
- 'courierBI'=>'Courier-BoldOblique',
- 'helvetica'=>'Helvetica',
- 'helveticaB'=>'Helvetica-Bold',
- 'helveticaI'=>'Helvetica-Oblique',
- 'helveticaBI'=>'Helvetica-BoldOblique',
- 'times'=>'Times-Roman',
- 'timesB'=>'Times-Bold',
- 'timesI'=>'Times-Italic',
- 'timesBI'=>'Times-BoldItalic',
- 'symbol'=>'Symbol',
- 'zapfdingbats'=>'ZapfDingbats'
- );
- //Set scale factor
- $this->setPageUnit($unit);
- // set page format and orientation
- $this->setPageFormat($format, $orientation);
- //Page margins (1 cm)
- $margin = 28.35 / $this->k;
- $this->SetMargins($margin, $margin);
- //Interior cell margin
- $this->cMargin = $margin / 10;
- //Line width (0.2 mm)
- $this->LineWidth = 0.57 / $this->k;
- $this->linestyleWidth = sprintf('%.2F w', ($this->LineWidth * $this->k));
- $this->linestyleCap = '0 J';
- $this->linestyleJoin = '0 j';
- $this->linestyleDash = '[] 0 d';
- //Automatic page break
- $this->SetAutoPageBreak(true, (2 * $margin));
- //Full width display mode
- $this->SetDisplayMode('fullwidth');
- //Compression
- $this->SetCompression(true);
- //Set default PDF version number
- $this->PDFVersion = '1.7';
- $this->encoding = $encoding;
- $this->HREF = array();
- $this->getFontsList();
- $this->fgcolor = array('R' => 0, 'G' => 0, 'B' => 0);
- $this->bgcolor = array('R' => 255, 'G' => 255, 'B' => 255);
- $this->extgstates = array();
- // user's rights
- $this->sign = false;
- $this->ur = false;
- $this->ur_document = '/FullSave';
- $this->ur_annots = '/Create/Delete/Modify/Copy/Import/Export';
- $this->ur_form = '/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate';
- $this->ur_signature = '/Modify';
- // set default JPEG quality
- $this->jpeg_quality = 75;
- // initialize some settings
- $this->utf8Bidi(array(''), '');
- // set default font
- $this->SetFont($this->FontFamily, $this->FontStyle, $this->FontSizePt);
- // check if PCRE Unicode support is enabled
- if ($this->isunicode AND (@preg_match('/\pL/u', 'a') == 1)) {
- // PCRE unicode support is turned ON
- // \p{Z} or \p{Separator}: any kind of Unicode whitespace or invisible separator.
- // \p{Lo} or \p{Other_Letter}: a Unicode letter or ideograph that does not have lowercase and uppercase variants.
- // \p{Lo} is needed because Chinese characters are packed next to each other without spaces in between.
- //$this->re_spaces = '/[\s\p{Z}\p{Lo}]/u';
- $this->re_spaces = '/[\s\p{Z}]/u';
- } else {
- // PCRE unicode support is turned OFF
- $this->re_spaces = '/[\s]/';
- }
- $this->annot_obj_id = $this->annots_start_obj_id;
- $this->curr_annot_obj_id = $this->annots_start_obj_id;
- $this->apxo_obj_id = $this->apxo_start_obj_id;
- $this->js_obj_id = $this->js_start_obj_id;
- $this->default_form_prop = array('lineWidth'=>1, 'borderStyle'=>'solid', 'fillColor'=>array(255, 255, 255), 'strokeColor'=>array(128, 128, 128));
+ * Current page number.
+ * @protected
+ */
+ protected $page;
+
+ /**
+ * Current object number.
+ * @protected
+ */
+ protected $n;
+
+ /**
+ * Array of object offsets.
+ * @protected
+ */
+ protected $offsets;
+
+ /**
+ * Buffer holding in-memory PDF.
+ * @protected
+ */
+ protected $buffer;
+
+ /**
+ * Array containing pages.
+ * @protected
+ */
+ protected $pages = array();
+
+ /**
+ * Current document state.
+ * @protected
+ */
+ protected $state;
+
+ /**
+ * Compression flag.
+ * @protected
+ */
+ protected $compress;
+
+ /**
+ * Current page orientation (P = Portrait, L = Landscape).
+ * @protected
+ */
+ protected $CurOrientation;
+
+ /**
+ * Page dimensions.
+ * @protected
+ */
+ protected $pagedim = array();
+
+ /**
+ * Scale factor (number of points in user unit).
+ * @protected
+ */
+ protected $k;
+
+ /**
+ * Width of page format in points.
+ * @protected
+ */
+ protected $fwPt;
+
+ /**
+ * Height of page format in points.
+ * @protected
+ */
+ protected $fhPt;
+
+ /**
+ * Current width of page in points.
+ * @protected
+ */
+ protected $wPt;
+
+ /**
+ * Current height of page in points.
+ * @protected
+ */
+ protected $hPt;
+
+ /**
+ * Current width of page in user unit.
+ * @protected
+ */
+ protected $w;
+
+ /**
+ * Current height of page in user unit.
+ * @protected
+ */
+ protected $h;
+
+ /**
+ * Left margin.
+ * @protected
+ */
+ protected $lMargin;
+
+ /**
+ * Top margin.
+ * @protected
+ */
+ protected $tMargin;
+
+ /**
+ * Right margin.
+ * @protected
+ */
+ protected $rMargin;
+
+ /**
+ * Page break margin.
+ * @protected
+ */
+ protected $bMargin;
+
+ /**
+ * Array of cell internal paddings ('T' => top, 'R' => right, 'B' => bottom, 'L' => left).
+ * @since 5.9.000 (2010-10-03)
+ * @protected
+ */
+ protected $cell_padding = array('T' => 0, 'R' => 0, 'B' => 0, 'L' => 0);
+
+ /**
+ * Array of cell margins ('T' => top, 'R' => right, 'B' => bottom, 'L' => left).
+ * @since 5.9.000 (2010-10-04)
+ * @protected
+ */
+ protected $cell_margin = array('T' => 0, 'R' => 0, 'B' => 0, 'L' => 0);
+
+ /**
+ * Current horizontal position in user unit for cell positioning.
+ * @protected
+ */
+ protected $x;
+
+ /**
+ * Current vertical position in user unit for cell positioning.
+ * @protected
+ */
+ protected $y;
+
+ /**
+ * Height of last cell printed.
+ * @protected
+ */
+ protected $lasth;
+
+ /**
+ * Line width in user unit.
+ * @protected
+ */
+ protected $LineWidth;
+
+ /**
+ * Array of standard font names.
+ * @protected
+ */
+ protected $CoreFonts;
+
+ /**
+ * Array of used fonts.
+ * @protected
+ */
+ protected $fonts = array();
+
+ /**
+ * Array of font files.
+ * @protected
+ */
+ protected $FontFiles = array();
+
+ /**
+ * Array of encoding differences.
+ * @protected
+ */
+ protected $diffs = array();
+
+ /**
+ * Array of used images.
+ * @protected
+ */
+ protected $images = array();
+
+ /**
+ * Array of Annotations in pages.
+ * @protected
+ */
+ protected $PageAnnots = array();
+
+ /**
+ * Array of internal links.
+ * @protected
+ */
+ protected $links = array();
+
+ /**
+ * Current font family.
+ * @protected
+ */
+ protected $FontFamily;
+
+ /**
+ * Current font style.
+ * @protected
+ */
+ protected $FontStyle;
+
+ /**
+ * Current font ascent (distance between font top and baseline).
+ * @protected
+ * @since 2.8.000 (2007-03-29)
+ */
+ protected $FontAscent;
+
+ /**
+ * Current font descent (distance between font bottom and baseline).
+ * @protected
+ * @since 2.8.000 (2007-03-29)
+ */
+ protected $FontDescent;
+
+ /**
+ * Underlining flag.
+ * @protected
+ */
+ protected $underline;
+
+ /**
+ * Overlining flag.
+ * @protected
+ */
+ protected $overline;
+
+ /**
+ * Current font info.
+ * @protected
+ */
+ protected $CurrentFont;
+
+ /**
+ * Current font size in points.
+ * @protected
+ */
+ protected $FontSizePt;
+
+ /**
+ * Current font size in user unit.
+ * @protected
+ */
+ protected $FontSize;
+
+ /**
+ * Commands for drawing color.
+ * @protected
+ */
+ protected $DrawColor;
+
+ /**
+ * Commands for filling color.
+ * @protected
+ */
+ protected $FillColor;
+
+ /**
+ * Commands for text color.
+ * @protected
+ */
+ protected $TextColor;
+
+ /**
+ * Indicates whether fill and text colors are different.
+ * @protected
+ */
+ protected $ColorFlag;
+
+ /**
+ * Automatic page breaking.
+ * @protected
+ */
+ protected $AutoPageBreak;
+
+ /**
+ * Threshold used to trigger page breaks.
+ * @protected
+ */
+ protected $PageBreakTrigger;
+
+ /**
+ * Flag set when processing page header.
+ * @protected
+ */
+ protected $InHeader = false;
+
+ /**
+ * Flag set when processing page footer.
+ * @protected
+ */
+ protected $InFooter = false;
+
+ /**
+ * Zoom display mode.
+ * @protected
+ */
+ protected $ZoomMode;
+
+ /**
+ * Layout display mode.
+ * @protected
+ */
+ protected $LayoutMode;
+
+ /**
+ * If true set the document information dictionary in Unicode.
+ * @protected
+ */
+ protected $docinfounicode = true;
+
+ /**
+ * Document title.
+ * @protected
+ */
+ protected $title = '';
+
+ /**
+ * Document subject.
+ * @protected
+ */
+ protected $subject = '';
+
+ /**
+ * Document author.
+ * @protected
+ */
+ protected $author = '';
+
+ /**
+ * Document keywords.
+ * @protected
+ */
+ protected $keywords = '';
+
+ /**
+ * Document creator.
+ * @protected
+ */
+ protected $creator = '';
+
+ /**
+ * Starting page number.
+ * @protected
+ */
+ protected $starting_page_number = 1;
+
+ /**
+ * String alias for total number of pages.
+ * @protected
+ */
+ protected $alias_tot_pages = '{:ptp:}';
+
+ /**
+ * String alias for page number.
+ * @protected
+ */
+ protected $alias_num_page = '{:pnp:}';
+
+ /**
+ * String alias for total number of pages in a single group.
+ * @protected
+ */
+ protected $alias_group_tot_pages = '{:ptg:}';
+
+ /**
+ * String alias for group page number.
+ * @protected
+ */
+ protected $alias_group_num_page = '{:png:}';
+
+ /**
+ * String alias for right shift compensation used to correctly align page numbers on the right.
+ * @protected
+ */
+ protected $alias_right_shift = '{rsc:';
+
+ /**
+ * The right-bottom (or left-bottom for RTL) corner X coordinate of last inserted image.
+ * @since 2002-07-31
+ * @author Nicola Asuni
+ * @protected
+ */
+ protected $img_rb_x;
+
+ /**
+ * The right-bottom corner Y coordinate of last inserted image.
+ * @since 2002-07-31
+ * @author Nicola Asuni
+ * @protected
+ */
+ protected $img_rb_y;
+
+ /**
+ * Adjusting factor to convert pixels to user units.
+ * @since 2004-06-14
+ * @author Nicola Asuni
+ * @protected
+ */
+ protected $imgscale = 1;
+
+ /**
+ * Boolean flag set to true when the input text is unicode (require unicode fonts).
+ * @since 2005-01-02
+ * @author Nicola Asuni
+ * @protected
+ */
+ protected $isunicode = false;
+
+ /**
+ * Object containing unicode data.
+ * @since 5.9.004 (2010-10-18)
+ * @author Nicola Asuni
+ * @protected
+ */
+ protected $unicode;
+
+ /**
+ * Object containing font encoding maps.
+ * @since 5.9.123 (2011-10-01)
+ * @author Nicola Asuni
+ * @protected
+ */
+ protected $encmaps;
+
+ /**
+ * PDF version.
+ * @since 1.5.3
+ * @protected
+ */
+ protected $PDFVersion = '1.7';
+
+ /**
+ * ID of the stored default header template (-1 = not set).
+ * @protected
+ */
+ protected $header_xobjid = -1;
+
+ /**
+ * If true reset the Header Xobject template at each page
+ * @protected
+ */
+ protected $header_xobj_autoreset = false;
+
+ /**
+ * Minimum distance between header and top page margin.
+ * @protected
+ */
+ protected $header_margin;
+
+ /**
+ * Minimum distance between footer and bottom page margin.
+ * @protected
+ */
+ protected $footer_margin;
+
+ /**
+ * Original left margin value.
+ * @protected
+ * @since 1.53.0.TC013
+ */
+ protected $original_lMargin;
+
+ /**
+ * Original right margin value.
+ * @protected
+ * @since 1.53.0.TC013
+ */
+ protected $original_rMargin;
+
+ /**
+ * Default font used on page header.
+ * @protected
+ */
+ protected $header_font;
+
+ /**
+ * Default font used on page footer.
+ * @protected
+ */
+ protected $footer_font;
+
+ /**
+ * Language templates.
+ * @protected
+ */
+ protected $l;
+
+ /**
+ * Barcode to print on page footer (only if set).
+ * @protected
+ */
+ protected $barcode = false;
+
+ /**
+ * Boolean flag to print/hide page header.
+ * @protected
+ */
+ protected $print_header = true;
+
+ /**
+ * Boolean flag to print/hide page footer.
+ * @protected
+ */
+ protected $print_footer = true;
+
+ /**
+ * Header image logo.
+ * @protected
+ */
+ protected $header_logo = '';
+
+ /**
+ * Width of header image logo in user units.
+ * @protected
+ */
+ protected $header_logo_width = 30;
+
+ /**
+ * Title to be printed on default page header.
+ * @protected
+ */
+ protected $header_title = '';
+
+ /**
+ * String to pring on page header after title.
+ * @protected
+ */
+ protected $header_string = '';
+
+ /**
+ * Default number of columns for html table.
+ * @protected
+ */
+ protected $default_table_columns = 4;
+
+ // variables for html parser
+
+ /**
+ * HTML PARSER: array to store current link and rendering styles.
+ * @protected
+ */
+ protected $HREF = array();
+
+ /**
+ * List of available fonts on filesystem.
+ * @protected
+ */
+ protected $fontlist = array();
+
+ /**
+ * Current foreground color.
+ * @protected
+ */
+ protected $fgcolor;
+
+ /**
+ * HTML PARSER: array of boolean values, true in case of ordered list (OL), false otherwise.
+ * @protected
+ */
+ protected $listordered = array();
+
+ /**
+ * HTML PARSER: array count list items on nested lists.
+ * @protected
+ */
+ protected $listcount = array();
+
+ /**
+ * HTML PARSER: current list nesting level.
+ * @protected
+ */
+ protected $listnum = 0;
+
+ /**
+ * HTML PARSER: indent amount for lists.
+ * @protected
+ */
+ protected $listindent = 0;
+
+ /**
+ * HTML PARSER: current list indententation level.
+ * @protected
+ */
+ protected $listindentlevel = 0;
+
+ /**
+ * Current background color.
+ * @protected
+ */
+ protected $bgcolor;
+
+ /**
+ * Temporary font size in points.
+ * @protected
+ */
+ protected $tempfontsize = 10;
+
+ /**
+ * Spacer string for LI tags.
+ * @protected
+ */
+ protected $lispacer = '';
+
+ /**
+ * Default encoding.
+ * @protected
+ * @since 1.53.0.TC010
+ */
+ protected $encoding = 'UTF-8';
+
+ /**
+ * PHP internal encoding.
+ * @protected
+ * @since 1.53.0.TC016
+ */
+ protected $internal_encoding;
+
+ /**
+ * Boolean flag to indicate if the document language is Right-To-Left.
+ * @protected
+ * @since 2.0.000
+ */
+ protected $rtl = false;
+
+ /**
+ * Boolean flag used to force RTL or LTR string direction.
+ * @protected
+ * @since 2.0.000
+ */
+ protected $tmprtl = false;
+
+ // --- Variables used for document encryption:
+
+ /**
+ * IBoolean flag indicating whether document is protected.
+ * @protected
+ * @since 2.0.000 (2008-01-02)
+ */
+ protected $encrypted;
+
+ /**
+ * Array containing encryption settings.
+ * @protected
+ * @since 5.0.005 (2010-05-11)
+ */
+ protected $encryptdata = array();
+
+ /**
+ * Last RC4 key encrypted (cached for optimisation).
+ * @protected
+ * @since 2.0.000 (2008-01-02)
+ */
+ protected $last_enc_key;
+
+ /**
+ * Last RC4 computed key.
+ * @protected
+ * @since 2.0.000 (2008-01-02)
+ */
+ protected $last_enc_key_c;
+
+ /**
+ * Encryption padding string.
+ * @protected
+ */
+ protected $enc_padding = "\x28\xBF\x4E\x5E\x4E\x75\x8A\x41\x64\x00\x4E\x56\xFF\xFA\x01\x08\x2E\x2E\x00\xB6\xD0\x68\x3E\x80\x2F\x0C\xA9\xFE\x64\x53\x69\x7A";
+
+ /**
+ * File ID (used on document trailer).
+ * @protected
+ * @since 5.0.005 (2010-05-12)
+ */
+ protected $file_id;
+
+ // --- bookmark ---
+
+ /**
+ * Outlines for bookmark.
+ * @protected
+ * @since 2.1.002 (2008-02-12)
+ */
+ protected $outlines = array();
+
+ /**
+ * Outline root for bookmark.
+ * @protected
+ * @since 2.1.002 (2008-02-12)
+ */
+ protected $OutlineRoot;
+
+ // --- javascript and form ---
+
+ /**
+ * Javascript code.
+ * @protected
+ * @since 2.1.002 (2008-02-12)
+ */
+ protected $javascript = '';
+
+ /**
+ * Javascript counter.
+ * @protected
+ * @since 2.1.002 (2008-02-12)
+ */
+ protected $n_js;
+
+ /**
+ * line trough state
+ * @protected
+ * @since 2.8.000 (2008-03-19)
+ */
+ protected $linethrough;
+
+ /**
+ * Array with additional document-wide usage rights for the document.
+ * @protected
+ * @since 5.8.014 (2010-08-23)
+ */
+ protected $ur = array();
+
+ /**
+ * DPI (Dot Per Inch) Document Resolution (do not change).
+ * @protected
+ * @since 3.0.000 (2008-03-27)
+ */
+ protected $dpi = 72;
+
+ /**
+ * Array of page numbers were a new page group was started (the page numbers are the keys of the array).
+ * @protected
+ * @since 3.0.000 (2008-03-27)
+ */
+ protected $newpagegroup = array();
+
+ /**
+ * Array that contains the number of pages in each page group.
+ * @protected
+ * @since 3.0.000 (2008-03-27)
+ */
+ protected $pagegroups = array();
+
+ /**
+ * Current page group number.
+ * @protected
+ * @since 3.0.000 (2008-03-27)
+ */
+ protected $currpagegroup = 0;
+
+ /**
+ * Array of transparency objects and parameters.
+ * @protected
+ * @since 3.0.000 (2008-03-27)
+ */
+ protected $extgstates;
+
+ /**
+ * Set the default JPEG compression quality (1-100).
+ * @protected
+ * @since 3.0.000 (2008-03-27)
+ */
+ protected $jpeg_quality;
+
+ /**
+ * Default cell height ratio.
+ * @protected
+ * @since 3.0.014 (2008-05-23)
+ */
+ protected $cell_height_ratio = K_CELL_HEIGHT_RATIO;
+
+ /**
+ * PDF viewer preferences.
+ * @protected
+ * @since 3.1.000 (2008-06-09)
+ */
+ protected $viewer_preferences;
+
+ /**
+ * A name object specifying how the document should be displayed when opened.
+ * @protected
+ * @since 3.1.000 (2008-06-09)
+ */
+ protected $PageMode;
+
+ /**
+ * Array for storing gradient information.
+ * @protected
+ * @since 3.1.000 (2008-06-09)
+ */
+ protected $gradients = array();
+
+ /**
+ * Array used to store positions inside the pages buffer (keys are the page numbers).
+ * @protected
+ * @since 3.2.000 (2008-06-26)
+ */
+ protected $intmrk = array();
+
+ /**
+ * Array used to store positions inside the pages buffer (keys are the page numbers).
+ * @protected
+ * @since 5.7.000 (2010-08-03)
+ */
+ protected $bordermrk = array();
+
+ /**
+ * Array used to store page positions to track empty pages (keys are the page numbers).
+ * @protected
+ * @since 5.8.007 (2010-08-18)
+ */
+ protected $emptypagemrk = array();
+
+ /**
+ * Array used to store content positions inside the pages buffer (keys are the page numbers).
+ * @protected
+ * @since 4.6.021 (2009-07-20)
+ */
+ protected $cntmrk = array();
+
+ /**
+ * Array used to store footer positions of each page.
+ * @protected
+ * @since 3.2.000 (2008-07-01)
+ */
+ protected $footerpos = array();
+
+ /**
+ * Array used to store footer length of each page.
+ * @protected
+ * @since 4.0.014 (2008-07-29)
+ */
+ protected $footerlen = array();
+
+ /**
+ * Boolean flag to indicate if a new line is created.
+ * @protected
+ * @since 3.2.000 (2008-07-01)
+ */
+ protected $newline = true;
+
+ /**
+ * End position of the latest inserted line.
+ * @protected
+ * @since 3.2.000 (2008-07-01)
+ */
+ protected $endlinex = 0;
+
+ /**
+ * PDF string for width value of the last line.
+ * @protected
+ * @since 4.0.006 (2008-07-16)
+ */
+ protected $linestyleWidth = '';
+
+ /**
+ * PDF string for CAP value of the last line.
+ * @protected
+ * @since 4.0.006 (2008-07-16)
+ */
+ protected $linestyleCap = '0 J';
+
+ /**
+ * PDF string for join value of the last line.
+ * @protected
+ * @since 4.0.006 (2008-07-16)
+ */
+ protected $linestyleJoin = '0 j';
+
+ /**
+ * PDF string for dash value of the last line.
+ * @protected
+ * @since 4.0.006 (2008-07-16)
+ */
+ protected $linestyleDash = '[] 0 d';
+
+ /**
+ * Boolean flag to indicate if marked-content sequence is open.
+ * @protected
+ * @since 4.0.013 (2008-07-28)
+ */
+ protected $openMarkedContent = false;
+
+ /**
+ * Count the latest inserted vertical spaces on HTML.
+ * @protected
+ * @since 4.0.021 (2008-08-24)
+ */
+ protected $htmlvspace = 0;
+
+ /**
+ * Array of Spot colors.
+ * @protected
+ * @since 4.0.024 (2008-09-12)
+ */
+ protected $spot_colors = array();
+
+ /**
+ * Symbol used for HTML unordered list items.
+ * @protected
+ * @since 4.0.028 (2008-09-26)
+ */
+ protected $lisymbol = '';
+
+ /**
+ * String used to mark the beginning and end of EPS image blocks.
+ * @protected
+ * @since 4.1.000 (2008-10-18)
+ */
+ protected $epsmarker = 'x#!#EPS#!#x';
+
+ /**
+ * Array of transformation matrix.
+ * @protected
+ * @since 4.2.000 (2008-10-29)
+ */
+ protected $transfmatrix = array();
+
+ /**
+ * Current key for transformation matrix.
+ * @protected
+ * @since 4.8.005 (2009-09-17)
+ */
+ protected $transfmatrix_key = 0;
+
+ /**
+ * Booklet mode for double-sided pages.
+ * @protected
+ * @since 4.2.000 (2008-10-29)
+ */
+ protected $booklet = false;
+
+ /**
+ * Epsilon value used for float calculations.
+ * @protected
+ * @since 4.2.000 (2008-10-29)
+ */
+ protected $feps = 0.005;
+
+ /**
+ * Array used for custom vertical spaces for HTML tags.
+ * @protected
+ * @since 4.2.001 (2008-10-30)
+ */
+ protected $tagvspaces = array();
+
+ /**
+ * HTML PARSER: custom indent amount for lists. Negative value means disabled.
+ * @protected
+ * @since 4.2.007 (2008-11-12)
+ */
+ protected $customlistindent = -1;
+
+ /**
+ * Boolean flag to indicate if the border of the cell sides that cross the page should be removed.
+ * @protected
+ * @since 4.2.010 (2008-11-14)
+ */
+ protected $opencell = true;
+
+ /**
+ * Array of files to embedd.
+ * @protected
+ * @since 4.4.000 (2008-12-07)
+ */
+ protected $embeddedfiles = array();
+
+ /**
+ * Boolean flag to indicate if we are inside a PRE tag.
+ * @protected
+ * @since 4.4.001 (2008-12-08)
+ */
+ protected $premode = false;
+
+ /**
+ * Array used to store positions of graphics transformation blocks inside the page buffer.
+ * keys are the page numbers
+ * @protected
+ * @since 4.4.002 (2008-12-09)
+ */
+ protected $transfmrk = array();
+
+ /**
+ * Default color for html links.
+ * @protected
+ * @since 4.4.003 (2008-12-09)
+ */
+ protected $htmlLinkColorArray = array(0, 0, 255);
+
+ /**
+ * Default font style to add to html links.
+ * @protected
+ * @since 4.4.003 (2008-12-09)
+ */
+ protected $htmlLinkFontStyle = 'U';
+
+ /**
+ * Counts the number of pages.
+ * @protected
+ * @since 4.5.000 (2008-12-31)
+ */
+ protected $numpages = 0;
+
+ /**
+ * Array containing page lengths in bytes.
+ * @protected
+ * @since 4.5.000 (2008-12-31)
+ */
+ protected $pagelen = array();
+
+ /**
+ * Counts the number of pages.
+ * @protected
+ * @since 4.5.000 (2008-12-31)
+ */
+ protected $numimages = 0;
+
+ /**
+ * Store the image keys.
+ * @protected
+ * @since 4.5.000 (2008-12-31)
+ */
+ protected $imagekeys = array();
+
+ /**
+ * Length of the buffer in bytes.
+ * @protected
+ * @since 4.5.000 (2008-12-31)
+ */
+ protected $bufferlen = 0;
+
+ /**
+ * If true enables disk caching.
+ * @protected
+ * @since 4.5.000 (2008-12-31)
+ */
+ protected $diskcache = false;
+
+ /**
+ * Counts the number of fonts.
+ * @protected
+ * @since 4.5.000 (2009-01-02)
+ */
+ protected $numfonts = 0;
+
+ /**
+ * Store the font keys.
+ * @protected
+ * @since 4.5.000 (2009-01-02)
+ */
+ protected $fontkeys = array();
+
+ /**
+ * Store the font object IDs.
+ * @protected
+ * @since 4.8.001 (2009-09-09)
+ */
+ protected $font_obj_ids = array();
+
+ /**
+ * Store the fage status (true when opened, false when closed).
+ * @protected
+ * @since 4.5.000 (2009-01-02)
+ */
+ protected $pageopen = array();
+
+ /**
+ * Default monospace font.
+ * @protected
+ * @since 4.5.025 (2009-03-10)
+ */
+ protected $default_monospaced_font = 'courier';
+
+ /**
+ * Cloned copy of the current class object.
+ * @protected
+ * @since 4.5.029 (2009-03-19)
+ */
+ protected $objcopy;
+
+ /**
+ * Array used to store the lengths of cache files.
+ * @protected
+ * @since 4.5.029 (2009-03-19)
+ */
+ protected $cache_file_length = array();
+
+ /**
+ * Table header content to be repeated on each new page.
+ * @protected
+ * @since 4.5.030 (2009-03-20)
+ */
+ protected $thead = '';
+
+ /**
+ * Margins used for table header.
+ * @protected
+ * @since 4.5.030 (2009-03-20)
+ */
+ protected $theadMargins = array();
+
+ /**
+ * Cache array for UTF8StringToArray() method.
+ * @protected
+ * @since 4.5.037 (2009-04-07)
+ */
+ protected $cache_UTF8StringToArray = array();
+
+ /**
+ * Maximum size of cache array used for UTF8StringToArray() method.
+ * @protected
+ * @since 4.5.037 (2009-04-07)
+ */
+ protected $cache_maxsize_UTF8StringToArray = 8;
+
+ /**
+ * Current size of cache array used for UTF8StringToArray() method.
+ * @protected
+ * @since 4.5.037 (2009-04-07)
+ */
+ protected $cache_size_UTF8StringToArray = 0;
+
+ /**
+ * Boolean flag to enable document digital signature.
+ * @protected
+ * @since 4.6.005 (2009-04-24)
+ */
+ protected $sign = false;
+
+ /**
+ * Digital signature data.
+ * @protected
+ * @since 4.6.005 (2009-04-24)
+ */
+ protected $signature_data = array();
+
+ /**
+ * Digital signature max length.
+ * @protected
+ * @since 4.6.005 (2009-04-24)
+ */
+ protected $signature_max_length = 11742;
+
+ /**
+ * Data for digital signature appearance.
+ * @protected
+ * @since 5.3.011 (2010-06-16)
+ */
+ protected $signature_appearance = array('page' => 1, 'rect' => '0 0 0 0');
+
+ /**
+ * Array of empty digital signature appearances.
+ * @protected
+ * @since 5.9.101 (2011-07-06)
+ */
+ protected $empty_signature_appearance = array();
+
+ /**
+ * Regular expression used to find blank characters (required for word-wrapping).
+ * @protected
+ * @since 4.6.006 (2009-04-28)
+ */
+ protected $re_spaces = '/[^\S\xa0]/';
+
+ /**
+ * Array of $re_spaces parts.
+ * @protected
+ * @since 5.5.011 (2010-07-09)
+ */
+ protected $re_space = array('p' => '[^\S\xa0]', 'm' => '');
+
+ /**
+ * Digital signature object ID.
+ * @protected
+ * @since 4.6.022 (2009-06-23)
+ */
+ protected $sig_obj_id = 0;
+
+ /**
+ * ByteRange placemark used during digital signature process.
+ * @protected
+ * @since 4.6.028 (2009-08-25)
+ */
+ protected $byterange_string = '/ByteRange[0 ********** ********** **********]';
+
+ /**
+ * Placemark used during digital signature process.
+ * @protected
+ * @since 4.6.028 (2009-08-25)
+ */
+ protected $sig_annot_ref = '***SIGANNREF*** 0 R';
+
+ /**
+ * ID of page objects.
+ * @protected
+ * @since 4.7.000 (2009-08-29)
+ */
+ protected $page_obj_id = array();
+
+ /**
+ * List of form annotations IDs.
+ * @protected
+ * @since 4.8.000 (2009-09-07)
+ */
+ protected $form_obj_id = array();
+
+ /**
+ * Deafult Javascript field properties. Possible values are described on official Javascript for Acrobat API reference. Annotation options can be directly specified using the 'aopt' entry.
+ * @protected
+ * @since 4.8.000 (2009-09-07)
+ */
+ protected $default_form_prop = array('lineWidth'=>1, 'borderStyle'=>'solid', 'fillColor'=>array(255, 255, 255), 'strokeColor'=>array(128, 128, 128));
+
+ /**
+ * Javascript objects array.
+ * @protected
+ * @since 4.8.000 (2009-09-07)
+ */
+ protected $js_objects = array();
+
+ /**
+ * Current form action (used during XHTML rendering).
+ * @protected
+ * @since 4.8.000 (2009-09-07)
+ */
+ protected $form_action = '';
+
+ /**
+ * Current form encryption type (used during XHTML rendering).
+ * @protected
+ * @since 4.8.000 (2009-09-07)
+ */
+ protected $form_enctype = 'application/x-www-form-urlencoded';
+
+ /**
+ * Current method to submit forms.
+ * @protected
+ * @since 4.8.000 (2009-09-07)
+ */
+ protected $form_mode = 'post';
+
+ /**
+ * List of fonts used on form fields (fontname => fontkey).
+ * @protected
+ * @since 4.8.001 (2009-09-09)
+ */
+ protected $annotation_fonts = array();
+
+ /**
+ * List of radio buttons parent objects.
+ * @protected
+ * @since 4.8.001 (2009-09-09)
+ */
+ protected $radiobutton_groups = array();
+
+ /**
+ * List of radio group objects IDs.
+ * @protected
+ * @since 4.8.001 (2009-09-09)
+ */
+ protected $radio_groups = array();
+
+ /**
+ * Text indentation value (used for text-indent CSS attribute).
+ * @protected
+ * @since 4.8.006 (2009-09-23)
+ */
+ protected $textindent = 0;
+
+ /**
+ * Store page number when startTransaction() is called.
+ * @protected
+ * @since 4.8.006 (2009-09-23)
+ */
+ protected $start_transaction_page = 0;
+
+ /**
+ * Store Y position when startTransaction() is called.
+ * @protected
+ * @since 4.9.001 (2010-03-28)
+ */
+ protected $start_transaction_y = 0;
+
+ /**
+ * True when we are printing the thead section on a new page.
+ * @protected
+ * @since 4.8.027 (2010-01-25)
+ */
+ protected $inthead = false;
+
+ /**
+ * Array of column measures (width, space, starting Y position).
+ * @protected
+ * @since 4.9.001 (2010-03-28)
+ */
+ protected $columns = array();
+
+ /**
+ * Number of colums.
+ * @protected
+ * @since 4.9.001 (2010-03-28)
+ */
+ protected $num_columns = 1;
+
+ /**
+ * Current column number.
+ * @protected
+ * @since 4.9.001 (2010-03-28)
+ */
+ protected $current_column = 0;
+
+ /**
+ * Starting page for columns.
+ * @protected
+ * @since 4.9.001 (2010-03-28)
+ */
+ protected $column_start_page = 0;
+
+ /**
+ * Maximum page and column selected.
+ * @protected
+ * @since 5.8.000 (2010-08-11)
+ */
+ protected $maxselcol = array('page' => 0, 'column' => 0);
+
+ /**
+ * Array of: X difference between table cell x start and starting page margin, cellspacing, cellpadding.
+ * @protected
+ * @since 5.8.000 (2010-08-11)
+ */
+ protected $colxshift = array('x' => 0, 's' => array('H' => 0, 'V' => 0), 'p' => array('L' => 0, 'T' => 0, 'R' => 0, 'B' => 0));
+
+ /**
+ * Text rendering mode: 0 = Fill text; 1 = Stroke text; 2 = Fill, then stroke text; 3 = Neither fill nor stroke text (invisible); 4 = Fill text and add to path for clipping; 5 = Stroke text and add to path for clipping; 6 = Fill, then stroke text and add to path for clipping; 7 = Add text to path for clipping.
+ * @protected
+ * @since 4.9.008 (2010-04-03)
+ */
+ protected $textrendermode = 0;
+
+ /**
+ * Text stroke width in doc units.
+ * @protected
+ * @since 4.9.008 (2010-04-03)
+ */
+ protected $textstrokewidth = 0;
+
+ /**
+ * Current stroke color.
+ * @protected
+ * @since 4.9.008 (2010-04-03)
+ */
+ protected $strokecolor;
+
+ /**
+ * Default unit of measure for document.
+ * @protected
+ * @since 5.0.000 (2010-04-22)
+ */
+ protected $pdfunit = 'mm';
+
+ /**
+ * Boolean flag true when we are on TOC (Table Of Content) page.
+ * @protected
+ */
+ protected $tocpage = false;
+
+ /**
+ * Boolean flag: if true convert vector images (SVG, EPS) to raster image using GD or ImageMagick library.
+ * @protected
+ * @since 5.0.000 (2010-04-26)
+ */
+ protected $rasterize_vector_images = false;
+
+ /**
+ * Boolean flag: if true enables font subsetting by default.
+ * @protected
+ * @since 5.3.002 (2010-06-07)
+ */
+ protected $font_subsetting = true;
+
+ /**
+ * Array of default graphic settings.
+ * @protected
+ * @since 5.5.008 (2010-07-02)
+ */
+ protected $default_graphic_vars = array();
+
+ /**
+ * Array of XObjects.
+ * @protected
+ * @since 5.8.014 (2010-08-23)
+ */
+ protected $xobjects = array();
+
+ /**
+ * Boolean value true when we are inside an XObject.
+ * @protected
+ * @since 5.8.017 (2010-08-24)
+ */
+ protected $inxobj = false;
+
+ /**
+ * Current XObject ID.
+ * @protected
+ * @since 5.8.017 (2010-08-24)
+ */
+ protected $xobjid = '';
+
+ /**
+ * Percentage of character stretching.
+ * @protected
+ * @since 5.9.000 (2010-09-29)
+ */
+ protected $font_stretching = 100;
+
+ /**
+ * Increases or decreases the space between characters in a text by the specified amount (tracking/kerning).
+ * @protected
+ * @since 5.9.000 (2010-09-29)
+ */
+ protected $font_spacing = 0;
+
+ /**
+ * Array of no-write regions.
+ * ('page' => page number or empy for current page, 'xt' => X top, 'yt' => Y top, 'xb' => X bottom, 'yb' => Y bottom, 'side' => page side 'L' = left or 'R' = right)
+ * @protected
+ * @since 5.9.003 (2010-10-14)
+ */
+ protected $page_regions = array();
+
+ /**
+ * Array containing HTML color names and values.
+ * @protected
+ * @since 5.9.004 (2010-10-18)
+ */
+ protected $webcolor = array();
+
+ /**
+ * Array containing spot color names and values.
+ * @protected
+ * @since 5.9.012 (2010-11-11)
+ */
+ protected $spotcolor = array();
+
+ /**
+ * Array of PDF layers data.
+ * @protected
+ * @since 5.9.102 (2011-07-13)
+ */
+ protected $pdflayers = array();
+
+ /**
+ * A dictionary of names and corresponding destinations (Dests key on document Catalog).
+ * @protected
+ * @since 5.9.097 (2011-06-23)
+ */
+ protected $dests = array();
+
+ /**
+ * Object ID for Named Destinations
+ * @protected
+ * @since 5.9.097 (2011-06-23)
+ */
+ protected $n_dests;
+
+ /**
+ * Directory used for the last SVG image.
+ * @protected
+ * @since 5.0.000 (2010-05-05)
+ */
+ protected $svgdir = '';
+
+ /**
+ * Deafult unit of measure for SVG.
+ * @protected
+ * @since 5.0.000 (2010-05-02)
+ */
+ protected $svgunit = 'px';
+
+ /**
+ * Array of SVG gradients.
+ * @protected
+ * @since 5.0.000 (2010-05-02)
+ */
+ protected $svggradients = array();
+
+ /**
+ * ID of last SVG gradient.
+ * @protected
+ * @since 5.0.000 (2010-05-02)
+ */
+ protected $svggradientid = 0;
+
+ /**
+ * Boolean value true when in SVG defs group.
+ * @protected
+ * @since 5.0.000 (2010-05-02)
+ */
+ protected $svgdefsmode = false;
+
+ /**
+ * Array of SVG defs.
+ * @protected
+ * @since 5.0.000 (2010-05-02)
+ */
+ protected $svgdefs = array();
+
+ /**
+ * Boolean value true when in SVG clipPath tag.
+ * @protected
+ * @since 5.0.000 (2010-04-26)
+ */
+ protected $svgclipmode = false;
+
+ /**
+ * Array of SVG clipPath commands.
+ * @protected
+ * @since 5.0.000 (2010-05-02)
+ */
+ protected $svgclippaths = array();
+
+ /**
+ * Array of SVG clipPath tranformation matrix.
+ * @protected
+ * @since 5.8.022 (2010-08-31)
+ */
+ protected $svgcliptm = array();
+
+ /**
+ * ID of last SVG clipPath.
+ * @protected
+ * @since 5.0.000 (2010-05-02)
+ */
+ protected $svgclipid = 0;
+
+ /**
+ * SVG text.
+ * @protected
+ * @since 5.0.000 (2010-05-02)
+ */
+ protected $svgtext = '';
+
+ /**
+ * SVG text properties.
+ * @protected
+ * @since 5.8.013 (2010-08-23)
+ */
+ protected $svgtextmode = array();
+
+ /**
+ * Array of hinheritable SVG properties.
+ * @protected
+ * @since 5.0.000 (2010-05-02)
+ */
+ protected $svginheritprop = array('clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cursor', 'direction', 'fill', 'fill-opacity', 'fill-rule', 'font', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'image-rendering', 'kerning', 'letter-spacing', 'marker', 'marker-end', 'marker-mid', 'marker-start', 'pointer-events', 'shape-rendering', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-rendering', 'visibility', 'word-spacing', 'writing-mode');
+
+ /**
+ * Array of SVG properties.
+ * @protected
+ * @since 5.0.000 (2010-05-02)
+ */
+ protected $svgstyles = array(array(
+ 'alignment-baseline' => 'auto',
+ 'baseline-shift' => 'baseline',
+ 'clip' => 'auto',
+ 'clip-path' => 'none',
+ 'clip-rule' => 'nonzero',
+ 'color' => 'black',
+ 'color-interpolation' => 'sRGB',
+ 'color-interpolation-filters' => 'linearRGB',
+ 'color-profile' => 'auto',
+ 'color-rendering' => 'auto',
+ 'cursor' => 'auto',
+ 'direction' => 'ltr',
+ 'display' => 'inline',
+ 'dominant-baseline' => 'auto',
+ 'enable-background' => 'accumulate',
+ 'fill' => 'black',
+ 'fill-opacity' => 1,
+ 'fill-rule' => 'nonzero',
+ 'filter' => 'none',
+ 'flood-color' => 'black',
+ 'flood-opacity' => 1,
+ 'font' => '',
+ 'font-family' => 'helvetica',
+ 'font-size' => 'medium',
+ 'font-size-adjust' => 'none',
+ 'font-stretch' => 'normal',
+ 'font-style' => 'normal',
+ 'font-variant' => 'normal',
+ 'font-weight' => 'normal',
+ 'glyph-orientation-horizontal' => '0deg',
+ 'glyph-orientation-vertical' => 'auto',
+ 'image-rendering' => 'auto',
+ 'kerning' => 'auto',
+ 'letter-spacing' => 'normal',
+ 'lighting-color' => 'white',
+ 'marker' => '',
+ 'marker-end' => 'none',
+ 'marker-mid' => 'none',
+ 'marker-start' => 'none',
+ 'mask' => 'none',
+ 'opacity' => 1,
+ 'overflow' => 'auto',
+ 'pointer-events' => 'visiblePainted',
+ 'shape-rendering' => 'auto',
+ 'stop-color' => 'black',
+ 'stop-opacity' => 1,
+ 'stroke' => 'none',
+ 'stroke-dasharray' => 'none',
+ 'stroke-dashoffset' => 0,
+ 'stroke-linecap' => 'butt',
+ 'stroke-linejoin' => 'miter',
+ 'stroke-miterlimit' => 4,
+ 'stroke-opacity' => 1,
+ 'stroke-width' => 1,
+ 'text-anchor' => 'start',
+ 'text-decoration' => 'none',
+ 'text-rendering' => 'auto',
+ 'unicode-bidi' => 'normal',
+ 'visibility' => 'visible',
+ 'word-spacing' => 'normal',
+ 'writing-mode' => 'lr-tb',
+ 'text-color' => 'black',
+ 'transfmatrix' => array(1, 0, 0, 1, 0, 0)
+ ));
+
+ /**
+ * If true force sRGB color profile for all document.
+ * @protected
+ * @since 5.9.121 (2011-09-28)
+ */
+ protected $force_srgb = false;
+
+ /**
+ * If true set the document to PDF/A mode.
+ * @protected
+ * @since 5.9.121 (2011-09-27)
+ */
+ protected $pdfa_mode = false;
+
+ /**
+ * Document creation date
+ * @protected
+ * @since 5.9.121 (2011-09-28)
+ */
+ protected $doc_date;
+
+ /**
+ * Custom XMP data.
+ * @protected
+ * @since 5.9.128 (2011-10-06)
+ */
+ protected $custom_xmp = '';
+
+ //------------------------------------------------------------
+ // METHODS
+ //------------------------------------------------------------
+
+ /**
+ * This is the class constructor.
+ * It allows to set up the page format, the orientation and the measure unit used in all the methods (except for the font sizes).
+ * @param $orientation (string) page orientation. Possible values are (case insensitive):P or Portrait (default) L or Landscape '' (empty string) for automatic orientation
+ * @param $unit (string) User measure unit. Possible values are:pt: point mm: millimeter (default) cm: centimeter in: inch A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This is a very common unit in typography; font sizes are expressed in that unit.
+ * @param $format (mixed) The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat().
+ * @param $unicode (boolean) TRUE means that the input text is unicode (default = true)
+ * @param $encoding (string) Charset encoding; default is UTF-8.
+ * @param $diskcache (boolean) If TRUE reduce the RAM memory usage by caching temporary data on filesystem (slower).
+ * @param $pdfa (boolean) If TRUE set the document to PDF/A mode.
+ * @public
+ * @see getPageSizeFromFormat(), setPageFormat()
+ */
+ public function __construct($orientation='P', $unit='mm', $format='A4', $unicode=true, $encoding='UTF-8', $diskcache=false, $pdfa=false) {
+ /* Set internal character encoding to ASCII */
+ if (function_exists('mb_internal_encoding') AND mb_internal_encoding()) {
+ $this->internal_encoding = mb_internal_encoding();
+ mb_internal_encoding('ASCII');
}
-
- /**
- * Default destructor.
- * @access public
- * @since 1.53.0.TC016
- */
- public function __destruct() {
- // restore internal encoding
- if (isset($this->internal_encoding) AND !empty($this->internal_encoding)) {
- mb_internal_encoding($this->internal_encoding);
- }
- // unset all class variables
- $this->_destroy(true);
+ // get array of HTML colors
+ require(dirname(__FILE__).'/htmlcolors.php');
+ $this->webcolor = $webcolor;
+ // get array of custom spot colors
+ if (file_exists(dirname(__FILE__).'/spotcolors.php')) {
+ require(dirname(__FILE__).'/spotcolors.php');
+ $this->spotcolor = $spotcolor;
+ } else {
+ $this->spotcolor = array();
}
-
- /**
- * Set the units of measure for the document.
- * @param string $unit User measure unit. Possible values are:pt: point mm: millimeter (default) cm: centimeter in: inch A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This is a very common unit in typography; font sizes are expressed in that unit.
- * @access public
- * @since 3.0.015 (2008-06-06)
- */
- public function setPageUnit($unit) {
+ require_once(dirname(__FILE__).'/unicode_data.php');
+ $this->unicode = new TCPDF_UNICODE_DATA();
+ require_once(dirname(__FILE__).'/encodings_maps.php');
+ $this->encmaps = new TCPDF_ENCODING_MAPS();
+ $this->font_obj_ids = array();
+ $this->page_obj_id = array();
+ $this->form_obj_id = array();
+ // set pdf/a mode
+ $this->pdfa_mode = $pdfa;
+ $this->force_srgb = false;
+ // set disk caching
+ $this->diskcache = $diskcache ? true : false;
+ // set language direction
+ $this->rtl = false;
+ $this->tmprtl = false;
+ // some checks
+ $this->_dochecks();
+ // initialization of properties
+ $this->isunicode = $unicode;
+ $this->page = 0;
+ $this->transfmrk[0] = array();
+ $this->pagedim = array();
+ $this->n = 2;
+ $this->buffer = '';
+ $this->pages = array();
+ $this->state = 0;
+ $this->fonts = array();
+ $this->FontFiles = array();
+ $this->diffs = array();
+ $this->images = array();
+ $this->links = array();
+ $this->gradients = array();
+ $this->InFooter = false;
+ $this->lasth = 0;
+ $this->FontFamily = 'helvetica';
+ $this->FontStyle = '';
+ $this->FontSizePt = 12;
+ $this->underline = false;
+ $this->overline = false;
+ $this->linethrough = false;
+ $this->DrawColor = '0 G';
+ $this->FillColor = '0 g';
+ $this->TextColor = '0 g';
+ $this->ColorFlag = false;
+ $this->pdflayers = array();
+ // encryption values
+ $this->encrypted = false;
+ $this->last_enc_key = '';
+ // standard Unicode fonts
+ $this->CoreFonts = array(
+ 'courier'=>'Courier',
+ 'courierB'=>'Courier-Bold',
+ 'courierI'=>'Courier-Oblique',
+ 'courierBI'=>'Courier-BoldOblique',
+ 'helvetica'=>'Helvetica',
+ 'helveticaB'=>'Helvetica-Bold',
+ 'helveticaI'=>'Helvetica-Oblique',
+ 'helveticaBI'=>'Helvetica-BoldOblique',
+ 'times'=>'Times-Roman',
+ 'timesB'=>'Times-Bold',
+ 'timesI'=>'Times-Italic',
+ 'timesBI'=>'Times-BoldItalic',
+ 'symbol'=>'Symbol',
+ 'zapfdingbats'=>'ZapfDingbats'
+ );
+ // set scale factor
+ $this->setPageUnit($unit);
+ // set page format and orientation
+ $this->setPageFormat($format, $orientation);
+ // page margins (1 cm)
+ $margin = 28.35 / $this->k;
+ $this->SetMargins($margin, $margin);
+ // internal cell padding
+ $cpadding = $margin / 10;
+ $this->setCellPaddings($cpadding, 0, $cpadding, 0);
+ // cell margins
+ $this->setCellMargins(0, 0, 0, 0);
+ // line width (0.2 mm)
+ $this->LineWidth = 0.57 / $this->k;
+ $this->linestyleWidth = sprintf('%.2F w', ($this->LineWidth * $this->k));
+ $this->linestyleCap = '0 J';
+ $this->linestyleJoin = '0 j';
+ $this->linestyleDash = '[] 0 d';
+ // automatic page break
+ $this->SetAutoPageBreak(true, (2 * $margin));
+ // full width display mode
+ $this->SetDisplayMode('fullwidth');
+ // compression
+ $this->SetCompression();
+ // set default PDF version number
+ $this->setPDFVersion();
+ $this->encoding = $encoding;
+ $this->HREF = array();
+ $this->getFontsList();
+ $this->fgcolor = array('R' => 0, 'G' => 0, 'B' => 0);
+ $this->strokecolor = array('R' => 0, 'G' => 0, 'B' => 0);
+ $this->bgcolor = array('R' => 255, 'G' => 255, 'B' => 255);
+ $this->extgstates = array();
+ // user's rights
+ $this->sign = false;
+ $this->ur['enabled'] = false;
+ $this->ur['document'] = '/FullSave';
+ $this->ur['annots'] = '/Create/Delete/Modify/Copy/Import/Export';
+ $this->ur['form'] = '/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate';
+ $this->ur['signature'] = '/Modify';
+ $this->ur['ef'] = '/Create/Delete/Modify/Import';
+ $this->ur['formex'] = '';
+ $this->signature_appearance = array('page' => 1, 'rect' => '0 0 0 0');
+ $this->empty_signature_appearance = array();
+ // set default JPEG quality
+ $this->jpeg_quality = 75;
+ // initialize some settings
+ $this->utf8Bidi(array(''), '');
+ // set default font
+ $this->SetFont($this->FontFamily, $this->FontStyle, $this->FontSizePt);
+ // check if PCRE Unicode support is enabled
+ if ($this->isunicode AND (@preg_match('/\pL/u', 'a') == 1)) {
+ // PCRE unicode support is turned ON
+ // \p{Z} or \p{Separator}: any kind of Unicode whitespace or invisible separator.
+ // \p{Lo} or \p{Other_Letter}: a Unicode letter or ideograph that does not have lowercase and uppercase variants.
+ // \p{Lo} is needed because Chinese characters are packed next to each other without spaces in between.
+ //$this->setSpacesRE('/[^\S\P{Z}\P{Lo}\xa0]/u');
+ $this->setSpacesRE('/[^\S\P{Z}\xa0]/u');
+ } else {
+ // PCRE unicode support is turned OFF
+ $this->setSpacesRE('/[^\S\xa0]/');
+ }
+ $this->default_form_prop = array('lineWidth'=>1, 'borderStyle'=>'solid', 'fillColor'=>array(255, 255, 255), 'strokeColor'=>array(128, 128, 128));
+ // set file ID for trailer
+ $this->file_id = md5($this->getRandomSeed('TCPDF'.$orientation.$unit.$format.$encoding));
+ // set document date
+ $this->doc_date = substr_replace(date('YmdHisO'), '\'', (0 - 2), 0).'\'';
+ // get default graphic vars
+ $this->default_graphic_vars = $this->getGraphicVars();
+ $this->header_xobj_autoreset = false;
+ $this->custom_xmp = '';
+ }
+
+ /**
+ * Default destructor.
+ * @public
+ * @since 1.53.0.TC016
+ */
+ public function __destruct() {
+ // restore internal encoding
+ if (isset($this->internal_encoding) AND !empty($this->internal_encoding)) {
+ mb_internal_encoding($this->internal_encoding);
+ }
+ // unset all class variables
+ $this->_destroy(true);
+ }
+
+ /**
+ * Return the current TCPDF version.
+ * @return TCPDF version string
+ * @public
+ * @since 5.9.012 (2010-11-10)
+ */
+ public function getTCPDFVersion() {
+ return $this->tcpdf_version;
+ }
+
+ /**
+ * Set the units of measure for the document.
+ * @param $unit (string) User measure unit. Possible values are:pt: point mm: millimeter (default) cm: centimeter in: inch A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This is a very common unit in typography; font sizes are expressed in that unit.
+ * @public
+ * @since 3.0.015 (2008-06-06)
+ */
+ public function setPageUnit($unit) {
+ $unit = strtolower($unit);
//Set scale factor
- switch (strtolower($unit)) {
- // points
- case 'px':
- case 'pt': {
- $this->k = 1;
- break;
- }
- // millimeters
- case 'mm': {
- $this->k = $this->dpi / 25.4;
- break;
- }
- // centimeters
- case 'cm': {
- $this->k = $this->dpi / 2.54;
- break;
- }
- // inches
- case 'in': {
- $this->k = $this->dpi;
- break;
- }
- // unsupported unit
- default : {
- $this->Error('Incorrect unit: '.$unit);
- break;
- }
+ switch ($unit) {
+ // points
+ case 'px':
+ case 'pt': {
+ $this->k = 1;
+ break;
}
- if (isset($this->CurOrientation)) {
- $this->setPageOrientation($this->CurOrientation);
+ // millimeters
+ case 'mm': {
+ $this->k = $this->dpi / 25.4;
+ break;
+ }
+ // centimeters
+ case 'cm': {
+ $this->k = $this->dpi / 2.54;
+ break;
+ }
+ // inches
+ case 'in': {
+ $this->k = $this->dpi;
+ break;
+ }
+ // unsupported unit
+ default : {
+ $this->Error('Incorrect unit: '.$unit);
+ break;
}
}
-
- /**
- * Set the page format
- * @param mixed $format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).4A0 2A0 A0 A1 A2 A3 A4 (default) A5 A6 A7 A8 A9 A10 B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 RA0 RA1 RA2 RA3 RA4 SRA0 SRA1 SRA2 SRA3 SRA4 LETTER LEGAL EXECUTIVE FOLIO
- * @param string $orientation page orientation. Possible values are (case insensitive):P or PORTRAIT (default) L or LANDSCAPE
- * @access public
- * @since 3.0.015 (2008-06-06)
- */
- public function setPageFormat($format, $orientation='P') {
- //Page format
- if (is_string($format)) {
- // Page formats (45 standard ISO paper formats and 4 american common formats).
- // Paper cordinates are calculated in this way: (inches * 72) where (1 inch = 2.54 cm)
- switch (strtoupper($format)) {
- case '4A0': {$format = array(4767.87,6740.79); break;}
- case '2A0': {$format = array(3370.39,4767.87); break;}
- case 'A0': {$format = array(2383.94,3370.39); break;}
- case 'A1': {$format = array(1683.78,2383.94); break;}
- case 'A2': {$format = array(1190.55,1683.78); break;}
- case 'A3': {$format = array(841.89,1190.55); break;}
- case 'A4': default: {$format = array(595.28,841.89); break;}
- case 'A5': {$format = array(419.53,595.28); break;}
- case 'A6': {$format = array(297.64,419.53); break;}
- case 'A7': {$format = array(209.76,297.64); break;}
- case 'A8': {$format = array(147.40,209.76); break;}
- case 'A9': {$format = array(104.88,147.40); break;}
- case 'A10': {$format = array(73.70,104.88); break;}
- case 'B0': {$format = array(2834.65,4008.19); break;}
- case 'B1': {$format = array(2004.09,2834.65); break;}
- case 'B2': {$format = array(1417.32,2004.09); break;}
- case 'B3': {$format = array(1000.63,1417.32); break;}
- case 'B4': {$format = array(708.66,1000.63); break;}
- case 'B5': {$format = array(498.90,708.66); break;}
- case 'B6': {$format = array(354.33,498.90); break;}
- case 'B7': {$format = array(249.45,354.33); break;}
- case 'B8': {$format = array(175.75,249.45); break;}
- case 'B9': {$format = array(124.72,175.75); break;}
- case 'B10': {$format = array(87.87,124.72); break;}
- case 'C0': {$format = array(2599.37,3676.54); break;}
- case 'C1': {$format = array(1836.85,2599.37); break;}
- case 'C2': {$format = array(1298.27,1836.85); break;}
- case 'C3': {$format = array(918.43,1298.27); break;}
- case 'C4': {$format = array(649.13,918.43); break;}
- case 'C5': {$format = array(459.21,649.13); break;}
- case 'C6': {$format = array(323.15,459.21); break;}
- case 'C7': {$format = array(229.61,323.15); break;}
- case 'C8': {$format = array(161.57,229.61); break;}
- case 'C9': {$format = array(113.39,161.57); break;}
- case 'C10': {$format = array(79.37,113.39); break;}
- case 'RA0': {$format = array(2437.80,3458.27); break;}
- case 'RA1': {$format = array(1729.13,2437.80); break;}
- case 'RA2': {$format = array(1218.90,1729.13); break;}
- case 'RA3': {$format = array(864.57,1218.90); break;}
- case 'RA4': {$format = array(609.45,864.57); break;}
- case 'SRA0': {$format = array(2551.18,3628.35); break;}
- case 'SRA1': {$format = array(1814.17,2551.18); break;}
- case 'SRA2': {$format = array(1275.59,1814.17); break;}
- case 'SRA3': {$format = array(907.09,1275.59); break;}
- case 'SRA4': {$format = array(637.80,907.09); break;}
- case 'LETTER': {$format = array(612.00,792.00); break;}
- case 'LEGAL': {$format = array(612.00,1008.00); break;}
- case 'EXECUTIVE': {$format = array(521.86,756.00); break;}
- case 'FOLIO': {$format = array(612.00,936.00); break;}
- }
- $this->fwPt = $format[0];
- $this->fhPt = $format[1];
+ $this->pdfunit = $unit;
+ if (isset($this->CurOrientation)) {
+ $this->setPageOrientation($this->CurOrientation);
+ }
+ }
+
+ /**
+ * Get page dimensions from format name.
+ * @param $format (mixed) The format name. It can be:
+ * ISO 216 A Series + 2 SIS 014711 extensions
+ * A0 (841x1189 mm ; 33.11x46.81 in)
+ * A1 (594x841 mm ; 23.39x33.11 in)
+ * A2 (420x594 mm ; 16.54x23.39 in)
+ * A3 (297x420 mm ; 11.69x16.54 in)
+ * A4 (210x297 mm ; 8.27x11.69 in)
+ * A5 (148x210 mm ; 5.83x8.27 in)
+ * A6 (105x148 mm ; 4.13x5.83 in)
+ * A7 (74x105 mm ; 2.91x4.13 in)
+ * A8 (52x74 mm ; 2.05x2.91 in)
+ * A9 (37x52 mm ; 1.46x2.05 in)
+ * A10 (26x37 mm ; 1.02x1.46 in)
+ * A11 (18x26 mm ; 0.71x1.02 in)
+ * A12 (13x18 mm ; 0.51x0.71 in)
+ * ISO 216 B Series + 2 SIS 014711 extensions
+ * B0 (1000x1414 mm ; 39.37x55.67 in)
+ * B1 (707x1000 mm ; 27.83x39.37 in)
+ * B2 (500x707 mm ; 19.69x27.83 in)
+ * B3 (353x500 mm ; 13.90x19.69 in)
+ * B4 (250x353 mm ; 9.84x13.90 in)
+ * B5 (176x250 mm ; 6.93x9.84 in)
+ * B6 (125x176 mm ; 4.92x6.93 in)
+ * B7 (88x125 mm ; 3.46x4.92 in)
+ * B8 (62x88 mm ; 2.44x3.46 in)
+ * B9 (44x62 mm ; 1.73x2.44 in)
+ * B10 (31x44 mm ; 1.22x1.73 in)
+ * B11 (22x31 mm ; 0.87x1.22 in)
+ * B12 (15x22 mm ; 0.59x0.87 in)
+ * ISO 216 C Series + 2 SIS 014711 extensions + 2 EXTENSION
+ * C0 (917x1297 mm ; 36.10x51.06 in)
+ * C1 (648x917 mm ; 25.51x36.10 in)
+ * C2 (458x648 mm ; 18.03x25.51 in)
+ * C3 (324x458 mm ; 12.76x18.03 in)
+ * C4 (229x324 mm ; 9.02x12.76 in)
+ * C5 (162x229 mm ; 6.38x9.02 in)
+ * C6 (114x162 mm ; 4.49x6.38 in)
+ * C7 (81x114 mm ; 3.19x4.49 in)
+ * C8 (57x81 mm ; 2.24x3.19 in)
+ * C9 (40x57 mm ; 1.57x2.24 in)
+ * C10 (28x40 mm ; 1.10x1.57 in)
+ * C11 (20x28 mm ; 0.79x1.10 in)
+ * C12 (14x20 mm ; 0.55x0.79 in)
+ * C76 (81x162 mm ; 3.19x6.38 in)
+ * DL (110x220 mm ; 4.33x8.66 in)
+ * SIS 014711 E Series
+ * E0 (879x1241 mm ; 34.61x48.86 in)
+ * E1 (620x879 mm ; 24.41x34.61 in)
+ * E2 (440x620 mm ; 17.32x24.41 in)
+ * E3 (310x440 mm ; 12.20x17.32 in)
+ * E4 (220x310 mm ; 8.66x12.20 in)
+ * E5 (155x220 mm ; 6.10x8.66 in)
+ * E6 (110x155 mm ; 4.33x6.10 in)
+ * E7 (78x110 mm ; 3.07x4.33 in)
+ * E8 (55x78 mm ; 2.17x3.07 in)
+ * E9 (39x55 mm ; 1.54x2.17 in)
+ * E10 (27x39 mm ; 1.06x1.54 in)
+ * E11 (19x27 mm ; 0.75x1.06 in)
+ * E12 (13x19 mm ; 0.51x0.75 in)
+ * SIS 014711 G Series
+ * G0 (958x1354 mm ; 37.72x53.31 in)
+ * G1 (677x958 mm ; 26.65x37.72 in)
+ * G2 (479x677 mm ; 18.86x26.65 in)
+ * G3 (338x479 mm ; 13.31x18.86 in)
+ * G4 (239x338 mm ; 9.41x13.31 in)
+ * G5 (169x239 mm ; 6.65x9.41 in)
+ * G6 (119x169 mm ; 4.69x6.65 in)
+ * G7 (84x119 mm ; 3.31x4.69 in)
+ * G8 (59x84 mm ; 2.32x3.31 in)
+ * G9 (42x59 mm ; 1.65x2.32 in)
+ * G10 (29x42 mm ; 1.14x1.65 in)
+ * G11 (21x29 mm ; 0.83x1.14 in)
+ * G12 (14x21 mm ; 0.55x0.83 in)
+ * ISO Press
+ * RA0 (860x1220 mm ; 33.86x48.03 in)
+ * RA1 (610x860 mm ; 24.02x33.86 in)
+ * RA2 (430x610 mm ; 16.93x24.02 in)
+ * RA3 (305x430 mm ; 12.01x16.93 in)
+ * RA4 (215x305 mm ; 8.46x12.01 in)
+ * SRA0 (900x1280 mm ; 35.43x50.39 in)
+ * SRA1 (640x900 mm ; 25.20x35.43 in)
+ * SRA2 (450x640 mm ; 17.72x25.20 in)
+ * SRA3 (320x450 mm ; 12.60x17.72 in)
+ * SRA4 (225x320 mm ; 8.86x12.60 in)
+ * German DIN 476
+ * 4A0 (1682x2378 mm ; 66.22x93.62 in)
+ * 2A0 (1189x1682 mm ; 46.81x66.22 in)
+ * Variations on the ISO Standard
+ * A2_EXTRA (445x619 mm ; 17.52x24.37 in)
+ * A3+ (329x483 mm ; 12.95x19.02 in)
+ * A3_EXTRA (322x445 mm ; 12.68x17.52 in)
+ * A3_SUPER (305x508 mm ; 12.01x20.00 in)
+ * SUPER_A3 (305x487 mm ; 12.01x19.17 in)
+ * A4_EXTRA (235x322 mm ; 9.25x12.68 in)
+ * A4_SUPER (229x322 mm ; 9.02x12.68 in)
+ * SUPER_A4 (227x356 mm ; 8.94x14.02 in)
+ * A4_LONG (210x348 mm ; 8.27x13.70 in)
+ * F4 (210x330 mm ; 8.27x12.99 in)
+ * SO_B5_EXTRA (202x276 mm ; 7.95x10.87 in)
+ * A5_EXTRA (173x235 mm ; 6.81x9.25 in)
+ * ANSI Series
+ * ANSI_E (864x1118 mm ; 34.00x44.00 in)
+ * ANSI_D (559x864 mm ; 22.00x34.00 in)
+ * ANSI_C (432x559 mm ; 17.00x22.00 in)
+ * ANSI_B (279x432 mm ; 11.00x17.00 in)
+ * ANSI_A (216x279 mm ; 8.50x11.00 in)
+ * Traditional 'Loose' North American Paper Sizes
+ * LEDGER, USLEDGER (432x279 mm ; 17.00x11.00 in)
+ * TABLOID, USTABLOID, BIBLE, ORGANIZERK (279x432 mm ; 11.00x17.00 in)
+ * LETTER, USLETTER, ORGANIZERM (216x279 mm ; 8.50x11.00 in)
+ * LEGAL, USLEGAL (216x356 mm ; 8.50x14.00 in)
+ * GLETTER, GOVERNMENTLETTER (203x267 mm ; 8.00x10.50 in)
+ * JLEGAL, JUNIORLEGAL (203x127 mm ; 8.00x5.00 in)
+ * Other North American Paper Sizes
+ * QUADDEMY (889x1143 mm ; 35.00x45.00 in)
+ * SUPER_B (330x483 mm ; 13.00x19.00 in)
+ * QUARTO (229x279 mm ; 9.00x11.00 in)
+ * FOLIO, GOVERNMENTLEGAL (216x330 mm ; 8.50x13.00 in)
+ * EXECUTIVE, MONARCH (184x267 mm ; 7.25x10.50 in)
+ * MEMO, STATEMENT, ORGANIZERL (140x216 mm ; 5.50x8.50 in)
+ * FOOLSCAP (210x330 mm ; 8.27x13.00 in)
+ * COMPACT (108x171 mm ; 4.25x6.75 in)
+ * ORGANIZERJ (70x127 mm ; 2.75x5.00 in)
+ * Canadian standard CAN 2-9.60M
+ * P1 (560x860 mm ; 22.05x33.86 in)
+ * P2 (430x560 mm ; 16.93x22.05 in)
+ * P3 (280x430 mm ; 11.02x16.93 in)
+ * P4 (215x280 mm ; 8.46x11.02 in)
+ * P5 (140x215 mm ; 5.51x8.46 in)
+ * P6 (107x140 mm ; 4.21x5.51 in)
+ * North American Architectural Sizes
+ * ARCH_E (914x1219 mm ; 36.00x48.00 in)
+ * ARCH_E1 (762x1067 mm ; 30.00x42.00 in)
+ * ARCH_D (610x914 mm ; 24.00x36.00 in)
+ * ARCH_C, BROADSHEET (457x610 mm ; 18.00x24.00 in)
+ * ARCH_B (305x457 mm ; 12.00x18.00 in)
+ * ARCH_A (229x305 mm ; 9.00x12.00 in)
+ * Announcement Envelopes
+ * ANNENV_A2 (111x146 mm ; 4.37x5.75 in)
+ * ANNENV_A6 (121x165 mm ; 4.75x6.50 in)
+ * ANNENV_A7 (133x184 mm ; 5.25x7.25 in)
+ * ANNENV_A8 (140x206 mm ; 5.50x8.12 in)
+ * ANNENV_A10 (159x244 mm ; 6.25x9.62 in)
+ * ANNENV_SLIM (98x225 mm ; 3.87x8.87 in)
+ * Commercial Envelopes
+ * COMMENV_N6_1/4 (89x152 mm ; 3.50x6.00 in)
+ * COMMENV_N6_3/4 (92x165 mm ; 3.62x6.50 in)
+ * COMMENV_N8 (98x191 mm ; 3.87x7.50 in)
+ * COMMENV_N9 (98x225 mm ; 3.87x8.87 in)
+ * COMMENV_N10 (105x241 mm ; 4.12x9.50 in)
+ * COMMENV_N11 (114x263 mm ; 4.50x10.37 in)
+ * COMMENV_N12 (121x279 mm ; 4.75x11.00 in)
+ * COMMENV_N14 (127x292 mm ; 5.00x11.50 in)
+ * Catalogue Envelopes
+ * CATENV_N1 (152x229 mm ; 6.00x9.00 in)
+ * CATENV_N1_3/4 (165x241 mm ; 6.50x9.50 in)
+ * CATENV_N2 (165x254 mm ; 6.50x10.00 in)
+ * CATENV_N3 (178x254 mm ; 7.00x10.00 in)
+ * CATENV_N6 (191x267 mm ; 7.50x10.50 in)
+ * CATENV_N7 (203x279 mm ; 8.00x11.00 in)
+ * CATENV_N8 (210x286 mm ; 8.25x11.25 in)
+ * CATENV_N9_1/2 (216x267 mm ; 8.50x10.50 in)
+ * CATENV_N9_3/4 (222x286 mm ; 8.75x11.25 in)
+ * CATENV_N10_1/2 (229x305 mm ; 9.00x12.00 in)
+ * CATENV_N12_1/2 (241x318 mm ; 9.50x12.50 in)
+ * CATENV_N13_1/2 (254x330 mm ; 10.00x13.00 in)
+ * CATENV_N14_1/4 (286x311 mm ; 11.25x12.25 in)
+ * CATENV_N14_1/2 (292x368 mm ; 11.50x14.50 in)
+ * Japanese (JIS P 0138-61) Standard B-Series
+ * JIS_B0 (1030x1456 mm ; 40.55x57.32 in)
+ * JIS_B1 (728x1030 mm ; 28.66x40.55 in)
+ * JIS_B2 (515x728 mm ; 20.28x28.66 in)
+ * JIS_B3 (364x515 mm ; 14.33x20.28 in)
+ * JIS_B4 (257x364 mm ; 10.12x14.33 in)
+ * JIS_B5 (182x257 mm ; 7.17x10.12 in)
+ * JIS_B6 (128x182 mm ; 5.04x7.17 in)
+ * JIS_B7 (91x128 mm ; 3.58x5.04 in)
+ * JIS_B8 (64x91 mm ; 2.52x3.58 in)
+ * JIS_B9 (45x64 mm ; 1.77x2.52 in)
+ * JIS_B10 (32x45 mm ; 1.26x1.77 in)
+ * JIS_B11 (22x32 mm ; 0.87x1.26 in)
+ * JIS_B12 (16x22 mm ; 0.63x0.87 in)
+ * PA Series
+ * PA0 (840x1120 mm ; 33.07x44.09 in)
+ * PA1 (560x840 mm ; 22.05x33.07 in)
+ * PA2 (420x560 mm ; 16.54x22.05 in)
+ * PA3 (280x420 mm ; 11.02x16.54 in)
+ * PA4 (210x280 mm ; 8.27x11.02 in)
+ * PA5 (140x210 mm ; 5.51x8.27 in)
+ * PA6 (105x140 mm ; 4.13x5.51 in)
+ * PA7 (70x105 mm ; 2.76x4.13 in)
+ * PA8 (52x70 mm ; 2.05x2.76 in)
+ * PA9 (35x52 mm ; 1.38x2.05 in)
+ * PA10 (26x35 mm ; 1.02x1.38 in)
+ * Standard Photographic Print Sizes
+ * PASSPORT_PHOTO (35x45 mm ; 1.38x1.77 in)
+ * E (82x120 mm ; 3.25x4.72 in)
+ * 3R, L (89x127 mm ; 3.50x5.00 in)
+ * 4R, KG (102x152 mm ; 4.02x5.98 in)
+ * 4D (120x152 mm ; 4.72x5.98 in)
+ * 5R, 2L (127x178 mm ; 5.00x7.01 in)
+ * 6R, 8P (152x203 mm ; 5.98x7.99 in)
+ * 8R, 6P (203x254 mm ; 7.99x10.00 in)
+ * S8R, 6PW (203x305 mm ; 7.99x12.01 in)
+ * 10R, 4P (254x305 mm ; 10.00x12.01 in)
+ * S10R, 4PW (254x381 mm ; 10.00x15.00 in)
+ * 11R (279x356 mm ; 10.98x14.02 in)
+ * S11R (279x432 mm ; 10.98x17.01 in)
+ * 12R (305x381 mm ; 12.01x15.00 in)
+ * S12R (305x456 mm ; 12.01x17.95 in)
+ * Common Newspaper Sizes
+ * NEWSPAPER_BROADSHEET (750x600 mm ; 29.53x23.62 in)
+ * NEWSPAPER_BERLINER (470x315 mm ; 18.50x12.40 in)
+ * NEWSPAPER_COMPACT, NEWSPAPER_TABLOID (430x280 mm ; 16.93x11.02 in)
+ * Business Cards
+ * CREDIT_CARD, BUSINESS_CARD, BUSINESS_CARD_ISO7810 (54x86 mm ; 2.13x3.37 in)
+ * BUSINESS_CARD_ISO216 (52x74 mm ; 2.05x2.91 in)
+ * BUSINESS_CARD_IT, BUSINESS_CARD_UK, BUSINESS_CARD_FR, BUSINESS_CARD_DE, BUSINESS_CARD_ES (55x85 mm ; 2.17x3.35 in)
+ * BUSINESS_CARD_US, BUSINESS_CARD_CA (51x89 mm ; 2.01x3.50 in)
+ * BUSINESS_CARD_JP (55x91 mm ; 2.17x3.58 in)
+ * BUSINESS_CARD_HK (54x90 mm ; 2.13x3.54 in)
+ * BUSINESS_CARD_AU, BUSINESS_CARD_DK, BUSINESS_CARD_SE (55x90 mm ; 2.17x3.54 in)
+ * BUSINESS_CARD_RU, BUSINESS_CARD_CZ, BUSINESS_CARD_FI, BUSINESS_CARD_HU, BUSINESS_CARD_IL (50x90 mm ; 1.97x3.54 in)
+ * Billboards
+ * 4SHEET (1016x1524 mm ; 40.00x60.00 in)
+ * 6SHEET (1200x1800 mm ; 47.24x70.87 in)
+ * 12SHEET (3048x1524 mm ; 120.00x60.00 in)
+ * 16SHEET (2032x3048 mm ; 80.00x120.00 in)
+ * 32SHEET (4064x3048 mm ; 160.00x120.00 in)
+ * 48SHEET (6096x3048 mm ; 240.00x120.00 in)
+ * 64SHEET (8128x3048 mm ; 320.00x120.00 in)
+ * 96SHEET (12192x3048 mm ; 480.00x120.00 in)
+ * Old Imperial English (some are still used in USA)
+ * EN_EMPEROR (1219x1829 mm ; 48.00x72.00 in)
+ * EN_ANTIQUARIAN (787x1346 mm ; 31.00x53.00 in)
+ * EN_GRAND_EAGLE (730x1067 mm ; 28.75x42.00 in)
+ * EN_DOUBLE_ELEPHANT (679x1016 mm ; 26.75x40.00 in)
+ * EN_ATLAS (660x864 mm ; 26.00x34.00 in)
+ * EN_COLOMBIER (597x876 mm ; 23.50x34.50 in)
+ * EN_ELEPHANT (584x711 mm ; 23.00x28.00 in)
+ * EN_DOUBLE_DEMY (572x902 mm ; 22.50x35.50 in)
+ * EN_IMPERIAL (559x762 mm ; 22.00x30.00 in)
+ * EN_PRINCESS (546x711 mm ; 21.50x28.00 in)
+ * EN_CARTRIDGE (533x660 mm ; 21.00x26.00 in)
+ * EN_DOUBLE_LARGE_POST (533x838 mm ; 21.00x33.00 in)
+ * EN_ROYAL (508x635 mm ; 20.00x25.00 in)
+ * EN_SHEET, EN_HALF_POST (495x597 mm ; 19.50x23.50 in)
+ * EN_SUPER_ROYAL (483x686 mm ; 19.00x27.00 in)
+ * EN_DOUBLE_POST (483x775 mm ; 19.00x30.50 in)
+ * EN_MEDIUM (445x584 mm ; 17.50x23.00 in)
+ * EN_DEMY (445x572 mm ; 17.50x22.50 in)
+ * EN_LARGE_POST (419x533 mm ; 16.50x21.00 in)
+ * EN_COPY_DRAUGHT (406x508 mm ; 16.00x20.00 in)
+ * EN_POST (394x489 mm ; 15.50x19.25 in)
+ * EN_CROWN (381x508 mm ; 15.00x20.00 in)
+ * EN_PINCHED_POST (375x470 mm ; 14.75x18.50 in)
+ * EN_BRIEF (343x406 mm ; 13.50x16.00 in)
+ * EN_FOOLSCAP (343x432 mm ; 13.50x17.00 in)
+ * EN_SMALL_FOOLSCAP (337x419 mm ; 13.25x16.50 in)
+ * EN_POTT (318x381 mm ; 12.50x15.00 in)
+ * Old Imperial Belgian
+ * BE_GRAND_AIGLE (700x1040 mm ; 27.56x40.94 in)
+ * BE_COLOMBIER (620x850 mm ; 24.41x33.46 in)
+ * BE_DOUBLE_CARRE (620x920 mm ; 24.41x36.22 in)
+ * BE_ELEPHANT (616x770 mm ; 24.25x30.31 in)
+ * BE_PETIT_AIGLE (600x840 mm ; 23.62x33.07 in)
+ * BE_GRAND_JESUS (550x730 mm ; 21.65x28.74 in)
+ * BE_JESUS (540x730 mm ; 21.26x28.74 in)
+ * BE_RAISIN (500x650 mm ; 19.69x25.59 in)
+ * BE_GRAND_MEDIAN (460x605 mm ; 18.11x23.82 in)
+ * BE_DOUBLE_POSTE (435x565 mm ; 17.13x22.24 in)
+ * BE_COQUILLE (430x560 mm ; 16.93x22.05 in)
+ * BE_PETIT_MEDIAN (415x530 mm ; 16.34x20.87 in)
+ * BE_RUCHE (360x460 mm ; 14.17x18.11 in)
+ * BE_PROPATRIA (345x430 mm ; 13.58x16.93 in)
+ * BE_LYS (317x397 mm ; 12.48x15.63 in)
+ * BE_POT (307x384 mm ; 12.09x15.12 in)
+ * BE_ROSETTE (270x347 mm ; 10.63x13.66 in)
+ * Old Imperial French
+ * FR_UNIVERS (1000x1300 mm ; 39.37x51.18 in)
+ * FR_DOUBLE_COLOMBIER (900x1260 mm ; 35.43x49.61 in)
+ * FR_GRANDE_MONDE (900x1260 mm ; 35.43x49.61 in)
+ * FR_DOUBLE_SOLEIL (800x1200 mm ; 31.50x47.24 in)
+ * FR_DOUBLE_JESUS (760x1120 mm ; 29.92x44.09 in)
+ * FR_GRAND_AIGLE (750x1060 mm ; 29.53x41.73 in)
+ * FR_PETIT_AIGLE (700x940 mm ; 27.56x37.01 in)
+ * FR_DOUBLE_RAISIN (650x1000 mm ; 25.59x39.37 in)
+ * FR_JOURNAL (650x940 mm ; 25.59x37.01 in)
+ * FR_COLOMBIER_AFFICHE (630x900 mm ; 24.80x35.43 in)
+ * FR_DOUBLE_CAVALIER (620x920 mm ; 24.41x36.22 in)
+ * FR_CLOCHE (600x800 mm ; 23.62x31.50 in)
+ * FR_SOLEIL (600x800 mm ; 23.62x31.50 in)
+ * FR_DOUBLE_CARRE (560x900 mm ; 22.05x35.43 in)
+ * FR_DOUBLE_COQUILLE (560x880 mm ; 22.05x34.65 in)
+ * FR_JESUS (560x760 mm ; 22.05x29.92 in)
+ * FR_RAISIN (500x650 mm ; 19.69x25.59 in)
+ * FR_CAVALIER (460x620 mm ; 18.11x24.41 in)
+ * FR_DOUBLE_COURONNE (460x720 mm ; 18.11x28.35 in)
+ * FR_CARRE (450x560 mm ; 17.72x22.05 in)
+ * FR_COQUILLE (440x560 mm ; 17.32x22.05 in)
+ * FR_DOUBLE_TELLIERE (440x680 mm ; 17.32x26.77 in)
+ * FR_DOUBLE_CLOCHE (400x600 mm ; 15.75x23.62 in)
+ * FR_DOUBLE_POT (400x620 mm ; 15.75x24.41 in)
+ * FR_ECU (400x520 mm ; 15.75x20.47 in)
+ * FR_COURONNE (360x460 mm ; 14.17x18.11 in)
+ * FR_TELLIERE (340x440 mm ; 13.39x17.32 in)
+ * FR_POT (310x400 mm ; 12.20x15.75 in)
+ *
+ * @return array containing page width and height in points
+ * @public
+ * @since 5.0.010 (2010-05-17)
+ */
+ public function getPageSizeFromFormat($format) {
+ // Paper cordinates are calculated in this way: (inches * 72) where (1 inch = 25.4 mm)
+ switch (strtoupper($format)) {
+ // ISO 216 A Series + 2 SIS 014711 extensions
+ case 'A0' : {$pf = array( 2383.937, 3370.394); break;}
+ case 'A1' : {$pf = array( 1683.780, 2383.937); break;}
+ case 'A2' : {$pf = array( 1190.551, 1683.780); break;}
+ case 'A3' : {$pf = array( 841.890, 1190.551); break;}
+ case 'A4' : {$pf = array( 595.276, 841.890); break;}
+ case 'A5' : {$pf = array( 419.528, 595.276); break;}
+ case 'A6' : {$pf = array( 297.638, 419.528); break;}
+ case 'A7' : {$pf = array( 209.764, 297.638); break;}
+ case 'A8' : {$pf = array( 147.402, 209.764); break;}
+ case 'A9' : {$pf = array( 104.882, 147.402); break;}
+ case 'A10': {$pf = array( 73.701, 104.882); break;}
+ case 'A11': {$pf = array( 51.024, 73.701); break;}
+ case 'A12': {$pf = array( 36.850, 51.024); break;}
+ // ISO 216 B Series + 2 SIS 014711 extensions
+ case 'B0' : {$pf = array( 2834.646, 4008.189); break;}
+ case 'B1' : {$pf = array( 2004.094, 2834.646); break;}
+ case 'B2' : {$pf = array( 1417.323, 2004.094); break;}
+ case 'B3' : {$pf = array( 1000.630, 1417.323); break;}
+ case 'B4' : {$pf = array( 708.661, 1000.630); break;}
+ case 'B5' : {$pf = array( 498.898, 708.661); break;}
+ case 'B6' : {$pf = array( 354.331, 498.898); break;}
+ case 'B7' : {$pf = array( 249.449, 354.331); break;}
+ case 'B8' : {$pf = array( 175.748, 249.449); break;}
+ case 'B9' : {$pf = array( 124.724, 175.748); break;}
+ case 'B10': {$pf = array( 87.874, 124.724); break;}
+ case 'B11': {$pf = array( 62.362, 87.874); break;}
+ case 'B12': {$pf = array( 42.520, 62.362); break;}
+ // ISO 216 C Series + 2 SIS 014711 extensions + 2 EXTENSION
+ case 'C0' : {$pf = array( 2599.370, 3676.535); break;}
+ case 'C1' : {$pf = array( 1836.850, 2599.370); break;}
+ case 'C2' : {$pf = array( 1298.268, 1836.850); break;}
+ case 'C3' : {$pf = array( 918.425, 1298.268); break;}
+ case 'C4' : {$pf = array( 649.134, 918.425); break;}
+ case 'C5' : {$pf = array( 459.213, 649.134); break;}
+ case 'C6' : {$pf = array( 323.150, 459.213); break;}
+ case 'C7' : {$pf = array( 229.606, 323.150); break;}
+ case 'C8' : {$pf = array( 161.575, 229.606); break;}
+ case 'C9' : {$pf = array( 113.386, 161.575); break;}
+ case 'C10': {$pf = array( 79.370, 113.386); break;}
+ case 'C11': {$pf = array( 56.693, 79.370); break;}
+ case 'C12': {$pf = array( 39.685, 56.693); break;}
+ case 'C76': {$pf = array( 229.606, 459.213); break;}
+ case 'DL' : {$pf = array( 311.811, 623.622); break;}
+ // SIS 014711 E Series
+ case 'E0' : {$pf = array( 2491.654, 3517.795); break;}
+ case 'E1' : {$pf = array( 1757.480, 2491.654); break;}
+ case 'E2' : {$pf = array( 1247.244, 1757.480); break;}
+ case 'E3' : {$pf = array( 878.740, 1247.244); break;}
+ case 'E4' : {$pf = array( 623.622, 878.740); break;}
+ case 'E5' : {$pf = array( 439.370, 623.622); break;}
+ case 'E6' : {$pf = array( 311.811, 439.370); break;}
+ case 'E7' : {$pf = array( 221.102, 311.811); break;}
+ case 'E8' : {$pf = array( 155.906, 221.102); break;}
+ case 'E9' : {$pf = array( 110.551, 155.906); break;}
+ case 'E10': {$pf = array( 76.535, 110.551); break;}
+ case 'E11': {$pf = array( 53.858, 76.535); break;}
+ case 'E12': {$pf = array( 36.850, 53.858); break;}
+ // SIS 014711 G Series
+ case 'G0' : {$pf = array( 2715.591, 3838.110); break;}
+ case 'G1' : {$pf = array( 1919.055, 2715.591); break;}
+ case 'G2' : {$pf = array( 1357.795, 1919.055); break;}
+ case 'G3' : {$pf = array( 958.110, 1357.795); break;}
+ case 'G4' : {$pf = array( 677.480, 958.110); break;}
+ case 'G5' : {$pf = array( 479.055, 677.480); break;}
+ case 'G6' : {$pf = array( 337.323, 479.055); break;}
+ case 'G7' : {$pf = array( 238.110, 337.323); break;}
+ case 'G8' : {$pf = array( 167.244, 238.110); break;}
+ case 'G9' : {$pf = array( 119.055, 167.244); break;}
+ case 'G10': {$pf = array( 82.205, 119.055); break;}
+ case 'G11': {$pf = array( 59.528, 82.205); break;}
+ case 'G12': {$pf = array( 39.685, 59.528); break;}
+ // ISO Press
+ case 'RA0': {$pf = array( 2437.795, 3458.268); break;}
+ case 'RA1': {$pf = array( 1729.134, 2437.795); break;}
+ case 'RA2': {$pf = array( 1218.898, 1729.134); break;}
+ case 'RA3': {$pf = array( 864.567, 1218.898); break;}
+ case 'RA4': {$pf = array( 609.449, 864.567); break;}
+ case 'SRA0': {$pf = array( 2551.181, 3628.346); break;}
+ case 'SRA1': {$pf = array( 1814.173, 2551.181); break;}
+ case 'SRA2': {$pf = array( 1275.591, 1814.173); break;}
+ case 'SRA3': {$pf = array( 907.087, 1275.591); break;}
+ case 'SRA4': {$pf = array( 637.795, 907.087); break;}
+ // German DIN 476
+ case '4A0': {$pf = array( 4767.874, 6740.787); break;}
+ case '2A0': {$pf = array( 3370.394, 4767.874); break;}
+ // Variations on the ISO Standard
+ case 'A2_EXTRA' : {$pf = array( 1261.417, 1754.646); break;}
+ case 'A3+' : {$pf = array( 932.598, 1369.134); break;}
+ case 'A3_EXTRA' : {$pf = array( 912.756, 1261.417); break;}
+ case 'A3_SUPER' : {$pf = array( 864.567, 1440.000); break;}
+ case 'SUPER_A3' : {$pf = array( 864.567, 1380.472); break;}
+ case 'A4_EXTRA' : {$pf = array( 666.142, 912.756); break;}
+ case 'A4_SUPER' : {$pf = array( 649.134, 912.756); break;}
+ case 'SUPER_A4' : {$pf = array( 643.465, 1009.134); break;}
+ case 'A4_LONG' : {$pf = array( 595.276, 986.457); break;}
+ case 'F4' : {$pf = array( 595.276, 935.433); break;}
+ case 'SO_B5_EXTRA': {$pf = array( 572.598, 782.362); break;}
+ case 'A5_EXTRA' : {$pf = array( 490.394, 666.142); break;}
+ // ANSI Series
+ case 'ANSI_E': {$pf = array( 2448.000, 3168.000); break;}
+ case 'ANSI_D': {$pf = array( 1584.000, 2448.000); break;}
+ case 'ANSI_C': {$pf = array( 1224.000, 1584.000); break;}
+ case 'ANSI_B': {$pf = array( 792.000, 1224.000); break;}
+ case 'ANSI_A': {$pf = array( 612.000, 792.000); break;}
+ // Traditional 'Loose' North American Paper Sizes
+ case 'USLEDGER':
+ case 'LEDGER' : {$pf = array( 1224.000, 792.000); break;}
+ case 'ORGANIZERK':
+ case 'BIBLE':
+ case 'USTABLOID':
+ case 'TABLOID': {$pf = array( 792.000, 1224.000); break;}
+ case 'ORGANIZERM':
+ case 'USLETTER':
+ case 'LETTER' : {$pf = array( 612.000, 792.000); break;}
+ case 'USLEGAL':
+ case 'LEGAL' : {$pf = array( 612.000, 1008.000); break;}
+ case 'GOVERNMENTLETTER':
+ case 'GLETTER': {$pf = array( 576.000, 756.000); break;}
+ case 'JUNIORLEGAL':
+ case 'JLEGAL' : {$pf = array( 576.000, 360.000); break;}
+ // Other North American Paper Sizes
+ case 'QUADDEMY': {$pf = array( 2520.000, 3240.000); break;}
+ case 'SUPER_B': {$pf = array( 936.000, 1368.000); break;}
+ case 'QUARTO': {$pf = array( 648.000, 792.000); break;}
+ case 'GOVERNMENTLEGAL':
+ case 'FOLIO': {$pf = array( 612.000, 936.000); break;}
+ case 'MONARCH':
+ case 'EXECUTIVE': {$pf = array( 522.000, 756.000); break;}
+ case 'ORGANIZERL':
+ case 'STATEMENT':
+ case 'MEMO': {$pf = array( 396.000, 612.000); break;}
+ case 'FOOLSCAP': {$pf = array( 595.440, 936.000); break;}
+ case 'COMPACT': {$pf = array( 306.000, 486.000); break;}
+ case 'ORGANIZERJ': {$pf = array( 198.000, 360.000); break;}
+ // Canadian standard CAN 2-9.60M
+ case 'P1': {$pf = array( 1587.402, 2437.795); break;}
+ case 'P2': {$pf = array( 1218.898, 1587.402); break;}
+ case 'P3': {$pf = array( 793.701, 1218.898); break;}
+ case 'P4': {$pf = array( 609.449, 793.701); break;}
+ case 'P5': {$pf = array( 396.850, 609.449); break;}
+ case 'P6': {$pf = array( 303.307, 396.850); break;}
+ // North American Architectural Sizes
+ case 'ARCH_E' : {$pf = array( 2592.000, 3456.000); break;}
+ case 'ARCH_E1': {$pf = array( 2160.000, 3024.000); break;}
+ case 'ARCH_D' : {$pf = array( 1728.000, 2592.000); break;}
+ case 'BROADSHEET':
+ case 'ARCH_C' : {$pf = array( 1296.000, 1728.000); break;}
+ case 'ARCH_B' : {$pf = array( 864.000, 1296.000); break;}
+ case 'ARCH_A' : {$pf = array( 648.000, 864.000); break;}
+ // --- North American Envelope Sizes ---
+ // - Announcement Envelopes
+ case 'ANNENV_A2' : {$pf = array( 314.640, 414.000); break;}
+ case 'ANNENV_A6' : {$pf = array( 342.000, 468.000); break;}
+ case 'ANNENV_A7' : {$pf = array( 378.000, 522.000); break;}
+ case 'ANNENV_A8' : {$pf = array( 396.000, 584.640); break;}
+ case 'ANNENV_A10' : {$pf = array( 450.000, 692.640); break;}
+ case 'ANNENV_SLIM': {$pf = array( 278.640, 638.640); break;}
+ // - Commercial Envelopes
+ case 'COMMENV_N6_1/4': {$pf = array( 252.000, 432.000); break;}
+ case 'COMMENV_N6_3/4': {$pf = array( 260.640, 468.000); break;}
+ case 'COMMENV_N8' : {$pf = array( 278.640, 540.000); break;}
+ case 'COMMENV_N9' : {$pf = array( 278.640, 638.640); break;}
+ case 'COMMENV_N10' : {$pf = array( 296.640, 684.000); break;}
+ case 'COMMENV_N11' : {$pf = array( 324.000, 746.640); break;}
+ case 'COMMENV_N12' : {$pf = array( 342.000, 792.000); break;}
+ case 'COMMENV_N14' : {$pf = array( 360.000, 828.000); break;}
+ // - Catalogue Envelopes
+ case 'CATENV_N1' : {$pf = array( 432.000, 648.000); break;}
+ case 'CATENV_N1_3/4' : {$pf = array( 468.000, 684.000); break;}
+ case 'CATENV_N2' : {$pf = array( 468.000, 720.000); break;}
+ case 'CATENV_N3' : {$pf = array( 504.000, 720.000); break;}
+ case 'CATENV_N6' : {$pf = array( 540.000, 756.000); break;}
+ case 'CATENV_N7' : {$pf = array( 576.000, 792.000); break;}
+ case 'CATENV_N8' : {$pf = array( 594.000, 810.000); break;}
+ case 'CATENV_N9_1/2' : {$pf = array( 612.000, 756.000); break;}
+ case 'CATENV_N9_3/4' : {$pf = array( 630.000, 810.000); break;}
+ case 'CATENV_N10_1/2': {$pf = array( 648.000, 864.000); break;}
+ case 'CATENV_N12_1/2': {$pf = array( 684.000, 900.000); break;}
+ case 'CATENV_N13_1/2': {$pf = array( 720.000, 936.000); break;}
+ case 'CATENV_N14_1/4': {$pf = array( 810.000, 882.000); break;}
+ case 'CATENV_N14_1/2': {$pf = array( 828.000, 1044.000); break;}
+ // Japanese (JIS P 0138-61) Standard B-Series
+ case 'JIS_B0' : {$pf = array( 2919.685, 4127.244); break;}
+ case 'JIS_B1' : {$pf = array( 2063.622, 2919.685); break;}
+ case 'JIS_B2' : {$pf = array( 1459.843, 2063.622); break;}
+ case 'JIS_B3' : {$pf = array( 1031.811, 1459.843); break;}
+ case 'JIS_B4' : {$pf = array( 728.504, 1031.811); break;}
+ case 'JIS_B5' : {$pf = array( 515.906, 728.504); break;}
+ case 'JIS_B6' : {$pf = array( 362.835, 515.906); break;}
+ case 'JIS_B7' : {$pf = array( 257.953, 362.835); break;}
+ case 'JIS_B8' : {$pf = array( 181.417, 257.953); break;}
+ case 'JIS_B9' : {$pf = array( 127.559, 181.417); break;}
+ case 'JIS_B10': {$pf = array( 90.709, 127.559); break;}
+ case 'JIS_B11': {$pf = array( 62.362, 90.709); break;}
+ case 'JIS_B12': {$pf = array( 45.354, 62.362); break;}
+ // PA Series
+ case 'PA0' : {$pf = array( 2381.102, 3174.803,); break;}
+ case 'PA1' : {$pf = array( 1587.402, 2381.102); break;}
+ case 'PA2' : {$pf = array( 1190.551, 1587.402); break;}
+ case 'PA3' : {$pf = array( 793.701, 1190.551); break;}
+ case 'PA4' : {$pf = array( 595.276, 793.701); break;}
+ case 'PA5' : {$pf = array( 396.850, 595.276); break;}
+ case 'PA6' : {$pf = array( 297.638, 396.850); break;}
+ case 'PA7' : {$pf = array( 198.425, 297.638); break;}
+ case 'PA8' : {$pf = array( 147.402, 198.425); break;}
+ case 'PA9' : {$pf = array( 99.213, 147.402); break;}
+ case 'PA10': {$pf = array( 73.701, 99.213); break;}
+ // Standard Photographic Print Sizes
+ case 'PASSPORT_PHOTO': {$pf = array( 99.213, 127.559); break;}
+ case 'E' : {$pf = array( 233.858, 340.157); break;}
+ case 'L':
+ case '3R' : {$pf = array( 252.283, 360.000); break;}
+ case 'KG':
+ case '4R' : {$pf = array( 289.134, 430.866); break;}
+ case '4D' : {$pf = array( 340.157, 430.866); break;}
+ case '2L':
+ case '5R' : {$pf = array( 360.000, 504.567); break;}
+ case '8P':
+ case '6R' : {$pf = array( 430.866, 575.433); break;}
+ case '6P':
+ case '8R' : {$pf = array( 575.433, 720.000); break;}
+ case '6PW':
+ case 'S8R' : {$pf = array( 575.433, 864.567); break;}
+ case '4P':
+ case '10R' : {$pf = array( 720.000, 864.567); break;}
+ case '4PW':
+ case 'S10R': {$pf = array( 720.000, 1080.000); break;}
+ case '11R' : {$pf = array( 790.866, 1009.134); break;}
+ case 'S11R': {$pf = array( 790.866, 1224.567); break;}
+ case '12R' : {$pf = array( 864.567, 1080.000); break;}
+ case 'S12R': {$pf = array( 864.567, 1292.598); break;}
+ // Common Newspaper Sizes
+ case 'NEWSPAPER_BROADSHEET': {$pf = array( 2125.984, 1700.787); break;}
+ case 'NEWSPAPER_BERLINER' : {$pf = array( 1332.283, 892.913); break;}
+ case 'NEWSPAPER_TABLOID':
+ case 'NEWSPAPER_COMPACT' : {$pf = array( 1218.898, 793.701); break;}
+ // Business Cards
+ case 'CREDIT_CARD':
+ case 'BUSINESS_CARD':
+ case 'BUSINESS_CARD_ISO7810': {$pf = array( 153.014, 242.646); break;}
+ case 'BUSINESS_CARD_ISO216' : {$pf = array( 147.402, 209.764); break;}
+ case 'BUSINESS_CARD_IT':
+ case 'BUSINESS_CARD_UK':
+ case 'BUSINESS_CARD_FR':
+ case 'BUSINESS_CARD_DE':
+ case 'BUSINESS_CARD_ES' : {$pf = array( 155.906, 240.945); break;}
+ case 'BUSINESS_CARD_CA':
+ case 'BUSINESS_CARD_US' : {$pf = array( 144.567, 252.283); break;}
+ case 'BUSINESS_CARD_JP' : {$pf = array( 155.906, 257.953); break;}
+ case 'BUSINESS_CARD_HK' : {$pf = array( 153.071, 255.118); break;}
+ case 'BUSINESS_CARD_AU':
+ case 'BUSINESS_CARD_DK':
+ case 'BUSINESS_CARD_SE' : {$pf = array( 155.906, 255.118); break;}
+ case 'BUSINESS_CARD_RU':
+ case 'BUSINESS_CARD_CZ':
+ case 'BUSINESS_CARD_FI':
+ case 'BUSINESS_CARD_HU':
+ case 'BUSINESS_CARD_IL' : {$pf = array( 141.732, 255.118); break;}
+ // Billboards
+ case '4SHEET' : {$pf = array( 2880.000, 4320.000); break;}
+ case '6SHEET' : {$pf = array( 3401.575, 5102.362); break;}
+ case '12SHEET': {$pf = array( 8640.000, 4320.000); break;}
+ case '16SHEET': {$pf = array( 5760.000, 8640.000); break;}
+ case '32SHEET': {$pf = array(11520.000, 8640.000); break;}
+ case '48SHEET': {$pf = array(17280.000, 8640.000); break;}
+ case '64SHEET': {$pf = array(23040.000, 8640.000); break;}
+ case '96SHEET': {$pf = array(34560.000, 8640.000); break;}
+ // Old European Sizes
+ // - Old Imperial English Sizes
+ case 'EN_EMPEROR' : {$pf = array( 3456.000, 5184.000); break;}
+ case 'EN_ANTIQUARIAN' : {$pf = array( 2232.000, 3816.000); break;}
+ case 'EN_GRAND_EAGLE' : {$pf = array( 2070.000, 3024.000); break;}
+ case 'EN_DOUBLE_ELEPHANT' : {$pf = array( 1926.000, 2880.000); break;}
+ case 'EN_ATLAS' : {$pf = array( 1872.000, 2448.000); break;}
+ case 'EN_COLOMBIER' : {$pf = array( 1692.000, 2484.000); break;}
+ case 'EN_ELEPHANT' : {$pf = array( 1656.000, 2016.000); break;}
+ case 'EN_DOUBLE_DEMY' : {$pf = array( 1620.000, 2556.000); break;}
+ case 'EN_IMPERIAL' : {$pf = array( 1584.000, 2160.000); break;}
+ case 'EN_PRINCESS' : {$pf = array( 1548.000, 2016.000); break;}
+ case 'EN_CARTRIDGE' : {$pf = array( 1512.000, 1872.000); break;}
+ case 'EN_DOUBLE_LARGE_POST': {$pf = array( 1512.000, 2376.000); break;}
+ case 'EN_ROYAL' : {$pf = array( 1440.000, 1800.000); break;}
+ case 'EN_SHEET':
+ case 'EN_HALF_POST' : {$pf = array( 1404.000, 1692.000); break;}
+ case 'EN_SUPER_ROYAL' : {$pf = array( 1368.000, 1944.000); break;}
+ case 'EN_DOUBLE_POST' : {$pf = array( 1368.000, 2196.000); break;}
+ case 'EN_MEDIUM' : {$pf = array( 1260.000, 1656.000); break;}
+ case 'EN_DEMY' : {$pf = array( 1260.000, 1620.000); break;}
+ case 'EN_LARGE_POST' : {$pf = array( 1188.000, 1512.000); break;}
+ case 'EN_COPY_DRAUGHT' : {$pf = array( 1152.000, 1440.000); break;}
+ case 'EN_POST' : {$pf = array( 1116.000, 1386.000); break;}
+ case 'EN_CROWN' : {$pf = array( 1080.000, 1440.000); break;}
+ case 'EN_PINCHED_POST' : {$pf = array( 1062.000, 1332.000); break;}
+ case 'EN_BRIEF' : {$pf = array( 972.000, 1152.000); break;}
+ case 'EN_FOOLSCAP' : {$pf = array( 972.000, 1224.000); break;}
+ case 'EN_SMALL_FOOLSCAP' : {$pf = array( 954.000, 1188.000); break;}
+ case 'EN_POTT' : {$pf = array( 900.000, 1080.000); break;}
+ // - Old Imperial Belgian Sizes
+ case 'BE_GRAND_AIGLE' : {$pf = array( 1984.252, 2948.031); break;}
+ case 'BE_COLOMBIER' : {$pf = array( 1757.480, 2409.449); break;}
+ case 'BE_DOUBLE_CARRE': {$pf = array( 1757.480, 2607.874); break;}
+ case 'BE_ELEPHANT' : {$pf = array( 1746.142, 2182.677); break;}
+ case 'BE_PETIT_AIGLE' : {$pf = array( 1700.787, 2381.102); break;}
+ case 'BE_GRAND_JESUS' : {$pf = array( 1559.055, 2069.291); break;}
+ case 'BE_JESUS' : {$pf = array( 1530.709, 2069.291); break;}
+ case 'BE_RAISIN' : {$pf = array( 1417.323, 1842.520); break;}
+ case 'BE_GRAND_MEDIAN': {$pf = array( 1303.937, 1714.961); break;}
+ case 'BE_DOUBLE_POSTE': {$pf = array( 1233.071, 1601.575); break;}
+ case 'BE_COQUILLE' : {$pf = array( 1218.898, 1587.402); break;}
+ case 'BE_PETIT_MEDIAN': {$pf = array( 1176.378, 1502.362); break;}
+ case 'BE_RUCHE' : {$pf = array( 1020.472, 1303.937); break;}
+ case 'BE_PROPATRIA' : {$pf = array( 977.953, 1218.898); break;}
+ case 'BE_LYS' : {$pf = array( 898.583, 1125.354); break;}
+ case 'BE_POT' : {$pf = array( 870.236, 1088.504); break;}
+ case 'BE_ROSETTE' : {$pf = array( 765.354, 983.622); break;}
+ // - Old Imperial French Sizes
+ case 'FR_UNIVERS' : {$pf = array( 2834.646, 3685.039); break;}
+ case 'FR_DOUBLE_COLOMBIER' : {$pf = array( 2551.181, 3571.654); break;}
+ case 'FR_GRANDE_MONDE' : {$pf = array( 2551.181, 3571.654); break;}
+ case 'FR_DOUBLE_SOLEIL' : {$pf = array( 2267.717, 3401.575); break;}
+ case 'FR_DOUBLE_JESUS' : {$pf = array( 2154.331, 3174.803); break;}
+ case 'FR_GRAND_AIGLE' : {$pf = array( 2125.984, 3004.724); break;}
+ case 'FR_PETIT_AIGLE' : {$pf = array( 1984.252, 2664.567); break;}
+ case 'FR_DOUBLE_RAISIN' : {$pf = array( 1842.520, 2834.646); break;}
+ case 'FR_JOURNAL' : {$pf = array( 1842.520, 2664.567); break;}
+ case 'FR_COLOMBIER_AFFICHE': {$pf = array( 1785.827, 2551.181); break;}
+ case 'FR_DOUBLE_CAVALIER' : {$pf = array( 1757.480, 2607.874); break;}
+ case 'FR_CLOCHE' : {$pf = array( 1700.787, 2267.717); break;}
+ case 'FR_SOLEIL' : {$pf = array( 1700.787, 2267.717); break;}
+ case 'FR_DOUBLE_CARRE' : {$pf = array( 1587.402, 2551.181); break;}
+ case 'FR_DOUBLE_COQUILLE' : {$pf = array( 1587.402, 2494.488); break;}
+ case 'FR_JESUS' : {$pf = array( 1587.402, 2154.331); break;}
+ case 'FR_RAISIN' : {$pf = array( 1417.323, 1842.520); break;}
+ case 'FR_CAVALIER' : {$pf = array( 1303.937, 1757.480); break;}
+ case 'FR_DOUBLE_COURONNE' : {$pf = array( 1303.937, 2040.945); break;}
+ case 'FR_CARRE' : {$pf = array( 1275.591, 1587.402); break;}
+ case 'FR_COQUILLE' : {$pf = array( 1247.244, 1587.402); break;}
+ case 'FR_DOUBLE_TELLIERE' : {$pf = array( 1247.244, 1927.559); break;}
+ case 'FR_DOUBLE_CLOCHE' : {$pf = array( 1133.858, 1700.787); break;}
+ case 'FR_DOUBLE_POT' : {$pf = array( 1133.858, 1757.480); break;}
+ case 'FR_ECU' : {$pf = array( 1133.858, 1474.016); break;}
+ case 'FR_COURONNE' : {$pf = array( 1020.472, 1303.937); break;}
+ case 'FR_TELLIERE' : {$pf = array( 963.780, 1247.244); break;}
+ case 'FR_POT' : {$pf = array( 878.740, 1133.858); break;}
+ // DEFAULT ISO A4
+ default: {$pf = array( 595.276, 841.890); break;}
+ }
+ return $pf;
+ }
+
+ /**
+ * Change the format of the current page
+ * @param $format (mixed) The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() documentation or an array of two numners (width, height) or an array containing the following measures and options:
+ * ['format'] = page format name (one of the above);
+ * ['Rotate'] : The number of degrees by which the page shall be rotated clockwise when displayed or printed. The value shall be a multiple of 90.
+ * ['PZ'] : The page's preferred zoom (magnification) factor.
+ * ['MediaBox'] : the boundaries of the physical medium on which the page shall be displayed or printed:
+ * ['MediaBox']['llx'] : lower-left x coordinate in points
+ * ['MediaBox']['lly'] : lower-left y coordinate in points
+ * ['MediaBox']['urx'] : upper-right x coordinate in points
+ * ['MediaBox']['ury'] : upper-right y coordinate in points
+ * ['CropBox'] : the visible region of default user space:
+ * ['CropBox']['llx'] : lower-left x coordinate in points
+ * ['CropBox']['lly'] : lower-left y coordinate in points
+ * ['CropBox']['urx'] : upper-right x coordinate in points
+ * ['CropBox']['ury'] : upper-right y coordinate in points
+ * ['BleedBox'] : the region to which the contents of the page shall be clipped when output in a production environment:
+ * ['BleedBox']['llx'] : lower-left x coordinate in points
+ * ['BleedBox']['lly'] : lower-left y coordinate in points
+ * ['BleedBox']['urx'] : upper-right x coordinate in points
+ * ['BleedBox']['ury'] : upper-right y coordinate in points
+ * ['TrimBox'] : the intended dimensions of the finished page after trimming:
+ * ['TrimBox']['llx'] : lower-left x coordinate in points
+ * ['TrimBox']['lly'] : lower-left y coordinate in points
+ * ['TrimBox']['urx'] : upper-right x coordinate in points
+ * ['TrimBox']['ury'] : upper-right y coordinate in points
+ * ['ArtBox'] : the extent of the page's meaningful content:
+ * ['ArtBox']['llx'] : lower-left x coordinate in points
+ * ['ArtBox']['lly'] : lower-left y coordinate in points
+ * ['ArtBox']['urx'] : upper-right x coordinate in points
+ * ['ArtBox']['ury'] : upper-right y coordinate in points
+ * ['BoxColorInfo'] :specify the colours and other visual characteristics that should be used in displaying guidelines on the screen for each of the possible page boundaries other than the MediaBox:
+ * ['BoxColorInfo'][BOXTYPE]['C'] : an array of three numbers in the range 0-255, representing the components in the DeviceRGB colour space.
+ * ['BoxColorInfo'][BOXTYPE]['W'] : the guideline width in default user units
+ * ['BoxColorInfo'][BOXTYPE]['S'] : the guideline style: S = Solid; D = Dashed
+ * ['BoxColorInfo'][BOXTYPE]['D'] : dash array defining a pattern of dashes and gaps to be used in drawing dashed guidelines
+ * ['trans'] : the style and duration of the visual transition to use when moving from another page to the given page during a presentation
+ * ['trans']['Dur'] : The page's display duration (also called its advance timing): the maximum length of time, in seconds, that the page shall be displayed during presentations before the viewer application shall automatically advance to the next page.
+ * ['trans']['S'] : transition style : Split, Blinds, Box, Wipe, Dissolve, Glitter, R, Fly, Push, Cover, Uncover, Fade
+ * ['trans']['D'] : The duration of the transition effect, in seconds.
+ * ['trans']['Dm'] : (Split and Blinds transition styles only) The dimension in which the specified transition effect shall occur: H = Horizontal, V = Vertical. Default value: H.
+ * ['trans']['M'] : (Split, Box and Fly transition styles only) The direction of motion for the specified transition effect: I = Inward from the edges of the page, O = Outward from the center of the pageDefault value: I.
+ * ['trans']['Di'] : (Wipe, Glitter, Fly, Cover, Uncover and Push transition styles only) The direction in which the specified transition effect shall moves, expressed in degrees counterclockwise starting from a left-to-right direction. If the value is a number, it shall be one of: 0 = Left to right, 90 = Bottom to top (Wipe only), 180 = Right to left (Wipe only), 270 = Top to bottom, 315 = Top-left to bottom-right (Glitter only). If the value is a name, it shall be None, which is relevant only for the Fly transition when the value of SS is not 1.0. Default value: 0.
+ * ['trans']['SS'] : (Fly transition style only) The starting or ending scale at which the changes shall be drawn. If M specifies an inward transition, the scale of the changes drawn shall progress from SS to 1.0 over the course of the transition. If M specifies an outward transition, the scale of the changes drawn shall progress from 1.0 to SS over the course of the transition. Default: 1.0.
+ * ['trans']['B'] : (Fly transition style only) If true, the area that shall be flown in is rectangular and opaque. Default: false.
+ *
+ * @param $orientation (string) page orientation. Possible values are (case insensitive):
+ * P or Portrait (default)
+ * L or Landscape
+ * '' (empty string) for automatic orientation
+ *
+ * @protected
+ * @since 3.0.015 (2008-06-06)
+ * @see getPageSizeFromFormat()
+ */
+ protected function setPageFormat($format, $orientation='P') {
+ if (!empty($format) AND isset($this->pagedim[$this->page])) {
+ // remove inherited values
+ unset($this->pagedim[$this->page]);
+ }
+ if (is_string($format)) {
+ // get page measures from format name
+ $pf = $this->getPageSizeFromFormat($format);
+ $this->fwPt = $pf[0];
+ $this->fhPt = $pf[1];
+ } else {
+ // the boundaries of the physical medium on which the page shall be displayed or printed
+ if (isset($format['MediaBox'])) {
+ $this->setPageBoxes($this->page, 'MediaBox', $format['MediaBox']['llx'], $format['MediaBox']['lly'], $format['MediaBox']['urx'], $format['MediaBox']['ury'], false);
+ $this->fwPt = (($format['MediaBox']['urx'] - $format['MediaBox']['llx']) * $this->k);
+ $this->fhPt = (($format['MediaBox']['ury'] - $format['MediaBox']['lly']) * $this->k);
} else {
- $this->fwPt = $format[0] * $this->k;
- $this->fhPt = $format[1] * $this->k;
+ if (isset($format[0]) AND is_numeric($format[0]) AND isset($format[1]) AND is_numeric($format[1])) {
+ $pf = array(($format[0] * $this->k), ($format[1] * $this->k));
+ } else {
+ if (!isset($format['format'])) {
+ // default value
+ $format['format'] = 'A4';
+ }
+ $pf = $this->getPageSizeFromFormat($format['format']);
+ }
+ $this->fwPt = $pf[0];
+ $this->fhPt = $pf[1];
+ $this->setPageBoxes($this->page, 'MediaBox', 0, 0, $this->fwPt, $this->fhPt, true);
+ }
+ // the visible region of default user space
+ if (isset($format['CropBox'])) {
+ $this->setPageBoxes($this->page, 'CropBox', $format['CropBox']['llx'], $format['CropBox']['lly'], $format['CropBox']['urx'], $format['CropBox']['ury'], false);
+ }
+ // the region to which the contents of the page shall be clipped when output in a production environment
+ if (isset($format['BleedBox'])) {
+ $this->setPageBoxes($this->page, 'BleedBox', $format['BleedBox']['llx'], $format['BleedBox']['lly'], $format['BleedBox']['urx'], $format['BleedBox']['ury'], false);
+ }
+ // the intended dimensions of the finished page after trimming
+ if (isset($format['TrimBox'])) {
+ $this->setPageBoxes($this->page, 'TrimBox', $format['TrimBox']['llx'], $format['TrimBox']['lly'], $format['TrimBox']['urx'], $format['TrimBox']['ury'], false);
+ }
+ // the page's meaningful content (including potential white space)
+ if (isset($format['ArtBox'])) {
+ $this->setPageBoxes($this->page, 'ArtBox', $format['ArtBox']['llx'], $format['ArtBox']['lly'], $format['ArtBox']['urx'], $format['ArtBox']['ury'], false);
+ }
+ // specify the colours and other visual characteristics that should be used in displaying guidelines on the screen for the various page boundaries
+ if (isset($format['BoxColorInfo'])) {
+ $this->pagedim[$this->page]['BoxColorInfo'] = $format['BoxColorInfo'];
+ }
+ if (isset($format['Rotate']) AND (($format['Rotate'] % 90) == 0)) {
+ // The number of degrees by which the page shall be rotated clockwise when displayed or printed. The value shall be a multiple of 90.
+ $this->pagedim[$this->page]['Rotate'] = intval($format['Rotate']);
+ }
+ if (isset($format['PZ'])) {
+ // The page's preferred zoom (magnification) factor
+ $this->pagedim[$this->page]['PZ'] = floatval($format['PZ']);
+ }
+ if (isset($format['trans'])) {
+ // The style and duration of the visual transition to use when moving from another page to the given page during a presentation
+ if (isset($format['trans']['Dur'])) {
+ // The page's display duration
+ $this->pagedim[$this->page]['trans']['Dur'] = floatval($format['trans']['Dur']);
+ }
+ $stansition_styles = array('Split', 'Blinds', 'Box', 'Wipe', 'Dissolve', 'Glitter', 'R', 'Fly', 'Push', 'Cover', 'Uncover', 'Fade');
+ if (isset($format['trans']['S']) AND in_array($format['trans']['S'], $stansition_styles)) {
+ // The transition style that shall be used when moving to this page from another during a presentation
+ $this->pagedim[$this->page]['trans']['S'] = $format['trans']['S'];
+ $valid_effect = array('Split', 'Blinds');
+ $valid_vals = array('H', 'V');
+ if (isset($format['trans']['Dm']) AND in_array($format['trans']['S'], $valid_effect) AND in_array($format['trans']['Dm'], $valid_vals)) {
+ $this->pagedim[$this->page]['trans']['Dm'] = $format['trans']['Dm'];
+ }
+ $valid_effect = array('Split', 'Box', 'Fly');
+ $valid_vals = array('I', 'O');
+ if (isset($format['trans']['M']) AND in_array($format['trans']['S'], $valid_effect) AND in_array($format['trans']['M'], $valid_vals)) {
+ $this->pagedim[$this->page]['trans']['M'] = $format['trans']['M'];
+ }
+ $valid_effect = array('Wipe', 'Glitter', 'Fly', 'Cover', 'Uncover', 'Push');
+ if (isset($format['trans']['Di']) AND in_array($format['trans']['S'], $valid_effect)) {
+ if (((($format['trans']['Di'] == 90) OR ($format['trans']['Di'] == 180)) AND ($format['trans']['S'] == 'Wipe'))
+ OR (($format['trans']['Di'] == 315) AND ($format['trans']['S'] == 'Glitter'))
+ OR (($format['trans']['Di'] == 0) OR ($format['trans']['Di'] == 270))) {
+ $this->pagedim[$this->page]['trans']['Di'] = intval($format['trans']['Di']);
+ }
+ }
+ if (isset($format['trans']['SS']) AND ($format['trans']['S'] == 'Fly')) {
+ $this->pagedim[$this->page]['trans']['SS'] = floatval($format['trans']['SS']);
+ }
+ if (isset($format['trans']['B']) AND ($format['trans']['B'] === true) AND ($format['trans']['S'] == 'Fly')) {
+ $this->pagedim[$this->page]['trans']['B'] = 'true';
+ }
+ } else {
+ $this->pagedim[$this->page]['trans']['S'] = 'R';
+ }
+ if (isset($format['trans']['D'])) {
+ // The duration of the transition effect, in seconds
+ $this->pagedim[$this->page]['trans']['D'] = floatval($format['trans']['D']);
+ } else {
+ $this->pagedim[$this->page]['trans']['D'] = 1;
+ }
}
- $this->setPageOrientation($orientation);
}
-
- /**
- * Set page orientation.
- * @param string $orientation page orientation. Possible values are (case insensitive):P or PORTRAIT (default) L or LANDSCAPE
- * @param boolean $autopagebreak Boolean indicating if auto-page-break mode should be on or off.
- * @param float $bottommargin bottom margin of the page.
- * @access public
- * @since 3.0.015 (2008-06-06)
- */
- public function setPageOrientation($orientation, $autopagebreak='', $bottommargin='') {
- $orientation = strtoupper($orientation);
- if (($orientation == 'P') OR ($orientation == 'PORTRAIT')) {
- $this->CurOrientation = 'P';
- $this->wPt = $this->fwPt;
- $this->hPt = $this->fhPt;
- } elseif (($orientation == 'L') OR ($orientation == 'LANDSCAPE')) {
- $this->CurOrientation = 'L';
- $this->wPt = $this->fhPt;
- $this->hPt = $this->fwPt;
+ $this->setPageOrientation($orientation);
+ }
+
+ /**
+ * Set page boundaries.
+ * @param $page (int) page number
+ * @param $type (string) valid values are: 'MediaBox' : the boundaries of the physical medium on which the page shall be displayed or printed; 'CropBox' : the visible region of default user space; 'BleedBox' : the region to which the contents of the page shall be clipped when output in a production environment; 'TrimBox' : the intended dimensions of the finished page after trimming; 'ArtBox' : the page's meaningful content (including potential white space).
+ * @param $llx (float) lower-left x coordinate in user units
+ * @param $lly (float) lower-left y coordinate in user units
+ * @param $urx (float) upper-right x coordinate in user units
+ * @param $ury (float) upper-right y coordinate in user units
+ * @param $points (boolean) if true uses user units as unit of measure, otherwise uses PDF points
+ * @public
+ * @since 5.0.010 (2010-05-17)
+ */
+ public function setPageBoxes($page, $type, $llx, $lly, $urx, $ury, $points=false) {
+ if (!isset($this->pagedim[$page])) {
+ // initialize array
+ $this->pagedim[$page] = array();
+ }
+ $pageboxes = array('MediaBox', 'CropBox', 'BleedBox', 'TrimBox', 'ArtBox');
+ if (!in_array($type, $pageboxes)) {
+ return;
+ }
+ if ($points) {
+ $k = 1;
+ } else {
+ $k = $this->k;
+ }
+ $this->pagedim[$page][$type]['llx'] = ($llx * $k);
+ $this->pagedim[$page][$type]['lly'] = ($lly * $k);
+ $this->pagedim[$page][$type]['urx'] = ($urx * $k);
+ $this->pagedim[$page][$type]['ury'] = ($ury * $k);
+ }
+
+ /**
+ * Swap X and Y coordinates of page boxes (change page boxes orientation).
+ * @param $page (int) page number
+ * @protected
+ * @since 5.0.010 (2010-05-17)
+ */
+ protected function swapPageBoxCoordinates($page) {
+ $pageboxes = array('MediaBox', 'CropBox', 'BleedBox', 'TrimBox', 'ArtBox');
+ foreach ($pageboxes as $type) {
+ // swap X and Y coordinates
+ if (isset($this->pagedim[$page][$type])) {
+ $tmp = $this->pagedim[$page][$type]['llx'];
+ $this->pagedim[$page][$type]['llx'] = $this->pagedim[$page][$type]['lly'];
+ $this->pagedim[$page][$type]['lly'] = $tmp;
+ $tmp = $this->pagedim[$page][$type]['urx'];
+ $this->pagedim[$page][$type]['urx'] = $this->pagedim[$page][$type]['ury'];
+ $this->pagedim[$page][$type]['ury'] = $tmp;
+ }
+ }
+ }
+
+ /**
+ * Set page orientation.
+ * @param $orientation (string) page orientation. Possible values are (case insensitive):P or Portrait (default) L or Landscape '' (empty string) for automatic orientation
+ * @param $autopagebreak (boolean) Boolean indicating if auto-page-break mode should be on or off.
+ * @param $bottommargin (float) bottom margin of the page.
+ * @public
+ * @since 3.0.015 (2008-06-06)
+ */
+ public function setPageOrientation($orientation, $autopagebreak='', $bottommargin='') {
+ if (!isset($this->pagedim[$this->page]['MediaBox'])) {
+ // the boundaries of the physical medium on which the page shall be displayed or printed
+ $this->setPageBoxes($this->page, 'MediaBox', 0, 0, $this->fwPt, $this->fhPt, true);
+ }
+ if (!isset($this->pagedim[$this->page]['CropBox'])) {
+ // the visible region of default user space
+ $this->setPageBoxes($this->page, 'CropBox', $this->pagedim[$this->page]['MediaBox']['llx'], $this->pagedim[$this->page]['MediaBox']['lly'], $this->pagedim[$this->page]['MediaBox']['urx'], $this->pagedim[$this->page]['MediaBox']['ury'], true);
+ }
+ if (!isset($this->pagedim[$this->page]['BleedBox'])) {
+ // the region to which the contents of the page shall be clipped when output in a production environment
+ $this->setPageBoxes($this->page, 'BleedBox', $this->pagedim[$this->page]['CropBox']['llx'], $this->pagedim[$this->page]['CropBox']['lly'], $this->pagedim[$this->page]['CropBox']['urx'], $this->pagedim[$this->page]['CropBox']['ury'], true);
+ }
+ if (!isset($this->pagedim[$this->page]['TrimBox'])) {
+ // the intended dimensions of the finished page after trimming
+ $this->setPageBoxes($this->page, 'TrimBox', $this->pagedim[$this->page]['CropBox']['llx'], $this->pagedim[$this->page]['CropBox']['lly'], $this->pagedim[$this->page]['CropBox']['urx'], $this->pagedim[$this->page]['CropBox']['ury'], true);
+ }
+ if (!isset($this->pagedim[$this->page]['ArtBox'])) {
+ // the page's meaningful content (including potential white space)
+ $this->setPageBoxes($this->page, 'ArtBox', $this->pagedim[$this->page]['CropBox']['llx'], $this->pagedim[$this->page]['CropBox']['lly'], $this->pagedim[$this->page]['CropBox']['urx'], $this->pagedim[$this->page]['CropBox']['ury'], true);
+ }
+ if (!isset($this->pagedim[$this->page]['Rotate'])) {
+ // The number of degrees by which the page shall be rotated clockwise when displayed or printed. The value shall be a multiple of 90.
+ $this->pagedim[$this->page]['Rotate'] = 0;
+ }
+ if (!isset($this->pagedim[$this->page]['PZ'])) {
+ // The page's preferred zoom (magnification) factor
+ $this->pagedim[$this->page]['PZ'] = 1;
+ }
+ if ($this->fwPt > $this->fhPt) {
+ // landscape
+ $default_orientation = 'L';
+ } else {
+ // portrait
+ $default_orientation = 'P';
+ }
+ $valid_orientations = array('P', 'L');
+ if (empty($orientation)) {
+ $orientation = $default_orientation;
+ } else {
+ $orientation = strtoupper($orientation{0});
+ }
+ if (in_array($orientation, $valid_orientations) AND ($orientation != $default_orientation)) {
+ $this->CurOrientation = $orientation;
+ $this->wPt = $this->fhPt;
+ $this->hPt = $this->fwPt;
+ } else {
+ $this->CurOrientation = $default_orientation;
+ $this->wPt = $this->fwPt;
+ $this->hPt = $this->fhPt;
+ }
+ if ((abs($this->pagedim[$this->page]['MediaBox']['urx'] - $this->hPt) < $this->feps) AND (abs($this->pagedim[$this->page]['MediaBox']['ury'] - $this->wPt) < $this->feps)){
+ // swap X and Y coordinates (change page orientation)
+ $this->swapPageBoxCoordinates($this->page);
+ }
+ $this->w = $this->wPt / $this->k;
+ $this->h = $this->hPt / $this->k;
+ if ($this->empty_string($autopagebreak)) {
+ if (isset($this->AutoPageBreak)) {
+ $autopagebreak = $this->AutoPageBreak;
} else {
- $this->Error('Incorrect orientation: '.$orientation);
+ $autopagebreak = true;
}
- $this->w = $this->wPt / $this->k;
- $this->h = $this->hPt / $this->k;
- if ($this->empty_string($autopagebreak)) {
- if (isset($this->AutoPageBreak)) {
- $autopagebreak = $this->AutoPageBreak;
- } else {
- $autopagebreak = true;
+ }
+ if ($this->empty_string($bottommargin)) {
+ if (isset($this->bMargin)) {
+ $bottommargin = $this->bMargin;
+ } else {
+ // default value = 2 cm
+ $bottommargin = 2 * 28.35 / $this->k;
+ }
+ }
+ $this->SetAutoPageBreak($autopagebreak, $bottommargin);
+ // store page dimensions
+ $this->pagedim[$this->page]['w'] = $this->wPt;
+ $this->pagedim[$this->page]['h'] = $this->hPt;
+ $this->pagedim[$this->page]['wk'] = $this->w;
+ $this->pagedim[$this->page]['hk'] = $this->h;
+ $this->pagedim[$this->page]['tm'] = $this->tMargin;
+ $this->pagedim[$this->page]['bm'] = $bottommargin;
+ $this->pagedim[$this->page]['lm'] = $this->lMargin;
+ $this->pagedim[$this->page]['rm'] = $this->rMargin;
+ $this->pagedim[$this->page]['pb'] = $autopagebreak;
+ $this->pagedim[$this->page]['or'] = $this->CurOrientation;
+ $this->pagedim[$this->page]['olm'] = $this->original_lMargin;
+ $this->pagedim[$this->page]['orm'] = $this->original_rMargin;
+ }
+
+ /**
+ * Set regular expression to detect withespaces or word separators.
+ * The pattern delimiter must be the forward-slash character "/".
+ * Some example patterns are:
+ *
+ * Non-Unicode or missing PCRE unicode support: "/[^\S\xa0]/"
+ * Unicode and PCRE unicode support: "/[^\S\P{Z}\xa0]/u"
+ * Unicode and PCRE unicode support in Chinese mode: "/[^\S\P{Z}\P{Lo}\xa0]/u"
+ * if PCRE unicode support is turned ON ("\P" is the negate class of "\p"):
+ * "\p{Z}" or "\p{Separator}": any kind of Unicode whitespace or invisible separator.
+ * "\p{Lo}" or "\p{Other_Letter}": a Unicode letter or ideograph that does not have lowercase and uppercase variants.
+ * "\p{Lo}" is needed for Chinese characters because are packed next to each other without spaces in between.
+ *
+ * @param $re (string) regular expression (leave empty for default).
+ * @public
+ * @since 4.6.016 (2009-06-15)
+ */
+ public function setSpacesRE($re='/[^\S\xa0]/') {
+ $this->re_spaces = $re;
+ $re_parts = explode('/', $re);
+ // get pattern parts
+ $this->re_space = array();
+ if (isset($re_parts[1]) AND !empty($re_parts[1])) {
+ $this->re_space['p'] = $re_parts[1];
+ } else {
+ $this->re_space['p'] = '[\s]';
+ }
+ // set pattern modifiers
+ if (isset($re_parts[2]) AND !empty($re_parts[2])) {
+ $this->re_space['m'] = $re_parts[2];
+ } else {
+ $this->re_space['m'] = '';
+ }
+ }
+
+ /**
+ * Enable or disable Right-To-Left language mode
+ * @param $enable (Boolean) if true enable Right-To-Left language mode.
+ * @param $resetx (Boolean) if true reset the X position on direction change.
+ * @public
+ * @since 2.0.000 (2008-01-03)
+ */
+ public function setRTL($enable, $resetx=true) {
+ $enable = $enable ? true : false;
+ $resetx = ($resetx AND ($enable != $this->rtl));
+ $this->rtl = $enable;
+ $this->tmprtl = false;
+ if ($resetx) {
+ $this->Ln(0);
+ }
+ }
+
+ /**
+ * Return the RTL status
+ * @return boolean
+ * @public
+ * @since 4.0.012 (2008-07-24)
+ */
+ public function getRTL() {
+ return $this->rtl;
+ }
+
+ /**
+ * Force temporary RTL language direction
+ * @param $mode (mixed) can be false, 'L' for LTR or 'R' for RTL
+ * @public
+ * @since 2.1.000 (2008-01-09)
+ */
+ public function setTempRTL($mode) {
+ $newmode = false;
+ switch (strtoupper($mode)) {
+ case 'LTR':
+ case 'L': {
+ if ($this->rtl) {
+ $newmode = 'L';
}
+ break;
}
- if ($this->empty_string($bottommargin)) {
- if (isset($this->bMargin)) {
- $bottommargin = $this->bMargin;
- } else {
- // default value = 2 cm
- $bottommargin = 2 * 28.35 / $this->k;
+ case 'RTL':
+ case 'R': {
+ if (!$this->rtl) {
+ $newmode = 'R';
}
+ break;
}
- $this->SetAutoPageBreak($autopagebreak, $bottommargin);
- // store page dimensions
- $this->pagedim[$this->page] = array('w' => $this->wPt, 'h' => $this->hPt, 'wk' => $this->w, 'hk' => $this->h, 'tm' => $this->tMargin, 'bm' => $bottommargin, 'lm' => $this->lMargin, 'rm' => $this->rMargin, 'pb' => $autopagebreak, 'or' => $this->CurOrientation, 'olm' => $this->original_lMargin, 'orm' => $this->original_rMargin);
- }
-
- /**
- * Set regular expression to detect withespaces or word separators.
- * @param string $re regular expression (leave empty for default).
- * @access public
- * @since 4.6.016 (2009-06-15)
- */
- public function setSpacesRE($re='/[\s]/') {
- // if PCRE unicode support is turned ON:
- // \p{Z} or \p{Separator}: any kind of Unicode whitespace or invisible separator.
- // \p{Lo} or \p{Other_Letter}: a Unicode letter or ideograph that does not have lowercase and uppercase variants.
- // \p{Lo} is needed because Chinese characters are packed next to each other without spaces in between.
- $this->re_spaces = $re;
- }
-
- /**
- * Enable or disable Right-To-Left language mode
- * @param Boolean $enable if true enable Right-To-Left language mode.
- * @param Boolean $resetx if true reset the X position on direction change.
- * @access public
- * @since 2.0.000 (2008-01-03)
- */
- public function setRTL($enable, $resetx=true) {
- $enable = $enable ? true : false;
- $resetx = ($resetx AND ($enable != $this->rtl));
- $this->rtl = $enable;
- $this->tmprtl = false;
- if ($resetx) {
- $this->Ln(0);
+ case false:
+ default: {
+ $newmode = false;
+ break;
}
}
-
- /**
- * Return the RTL status
- * @return boolean
- * @access public
- * @since 4.0.012 (2008-07-24)
- */
- public function getRTL() {
- return $this->rtl;
+ $this->tmprtl = $newmode;
+ }
+
+ /**
+ * Return the current temporary RTL status
+ * @return boolean
+ * @public
+ * @since 4.8.014 (2009-11-04)
+ */
+ public function isRTLTextDir() {
+ return ($this->rtl OR ($this->tmprtl == 'R'));
+ }
+
+ /**
+ * Set the last cell height.
+ * @param $h (float) cell height.
+ * @author Nicola Asuni
+ * @public
+ * @since 1.53.0.TC034
+ */
+ public function setLastH($h) {
+ $this->lasth = $h;
+ }
+
+ /**
+ * Reset the last cell height.
+ * @public
+ * @since 5.9.000 (2010-10-03)
+ */
+ public function resetLastH() {
+ $this->lasth = ($this->FontSize * $this->cell_height_ratio) + $this->cell_padding['T'] + $this->cell_padding['B'];
+ }
+
+ /**
+ * Get the last cell height.
+ * @return last cell height
+ * @public
+ * @since 4.0.017 (2008-08-05)
+ */
+ public function getLastH() {
+ return $this->lasth;
+ }
+
+ /**
+ * Set the adjusting factor to convert pixels to user units.
+ * @param $scale (float) adjusting factor to convert pixels to user units.
+ * @author Nicola Asuni
+ * @public
+ * @since 1.5.2
+ */
+ public function setImageScale($scale) {
+ $this->imgscale = $scale;
+ }
+
+ /**
+ * Returns the adjusting factor to convert pixels to user units.
+ * @return float adjusting factor to convert pixels to user units.
+ * @author Nicola Asuni
+ * @public
+ * @since 1.5.2
+ */
+ public function getImageScale() {
+ return $this->imgscale;
+ }
+
+ /**
+ * Returns an array of page dimensions:
+ * $this->pagedim[$this->page]['w'] = page width in points $this->pagedim[$this->page]['h'] = height in points $this->pagedim[$this->page]['wk'] = page width in user units $this->pagedim[$this->page]['hk'] = page height in user units $this->pagedim[$this->page]['tm'] = top margin $this->pagedim[$this->page]['bm'] = bottom margin $this->pagedim[$this->page]['lm'] = left margin $this->pagedim[$this->page]['rm'] = right margin $this->pagedim[$this->page]['pb'] = auto page break $this->pagedim[$this->page]['or'] = page orientation $this->pagedim[$this->page]['olm'] = original left margin $this->pagedim[$this->page]['orm'] = original right margin $this->pagedim[$this->page]['Rotate'] = The number of degrees by which the page shall be rotated clockwise when displayed or printed. The value shall be a multiple of 90. $this->pagedim[$this->page]['PZ'] = The page's preferred zoom (magnification) factor. $this->pagedim[$this->page]['trans'] : the style and duration of the visual transition to use when moving from another page to the given page during a presentation$this->pagedim[$this->page]['trans']['Dur'] = The page's display duration (also called its advance timing): the maximum length of time, in seconds, that the page shall be displayed during presentations before the viewer application shall automatically advance to the next page. $this->pagedim[$this->page]['trans']['S'] = transition style : Split, Blinds, Box, Wipe, Dissolve, Glitter, R, Fly, Push, Cover, Uncover, Fade $this->pagedim[$this->page]['trans']['D'] = The duration of the transition effect, in seconds. $this->pagedim[$this->page]['trans']['Dm'] = (Split and Blinds transition styles only) The dimension in which the specified transition effect shall occur: H = Horizontal, V = Vertical. Default value: H. $this->pagedim[$this->page]['trans']['M'] = (Split, Box and Fly transition styles only) The direction of motion for the specified transition effect: I = Inward from the edges of the page, O = Outward from the center of the pageDefault value: I. $this->pagedim[$this->page]['trans']['Di'] = (Wipe, Glitter, Fly, Cover, Uncover and Push transition styles only) The direction in which the specified transition effect shall moves, expressed in degrees counterclockwise starting from a left-to-right direction. If the value is a number, it shall be one of: 0 = Left to right, 90 = Bottom to top (Wipe only), 180 = Right to left (Wipe only), 270 = Top to bottom, 315 = Top-left to bottom-right (Glitter only). If the value is a name, it shall be None, which is relevant only for the Fly transition when the value of SS is not 1.0. Default value: 0. $this->pagedim[$this->page]['trans']['SS'] = (Fly transition style only) The starting or ending scale at which the changes shall be drawn. If M specifies an inward transition, the scale of the changes drawn shall progress from SS to 1.0 over the course of the transition. If M specifies an outward transition, the scale of the changes drawn shall progress from 1.0 to SS over the course of the transition. Default: 1.0. $this->pagedim[$this->page]['trans']['B'] = (Fly transition style only) If true, the area that shall be flown in is rectangular and opaque. Default: false. $this->pagedim[$this->page]['MediaBox'] : the boundaries of the physical medium on which the page shall be displayed or printed$this->pagedim[$this->page]['MediaBox']['llx'] = lower-left x coordinate in points $this->pagedim[$this->page]['MediaBox']['lly'] = lower-left y coordinate in points $this->pagedim[$this->page]['MediaBox']['urx'] = upper-right x coordinate in points $this->pagedim[$this->page]['MediaBox']['ury'] = upper-right y coordinate in points $this->pagedim[$this->page]['CropBox'] : the visible region of default user space$this->pagedim[$this->page]['CropBox']['llx'] = lower-left x coordinate in points $this->pagedim[$this->page]['CropBox']['lly'] = lower-left y coordinate in points $this->pagedim[$this->page]['CropBox']['urx'] = upper-right x coordinate in points $this->pagedim[$this->page]['CropBox']['ury'] = upper-right y coordinate in points $this->pagedim[$this->page]['BleedBox'] : the region to which the contents of the page shall be clipped when output in a production environment$this->pagedim[$this->page]['BleedBox']['llx'] = lower-left x coordinate in points $this->pagedim[$this->page]['BleedBox']['lly'] = lower-left y coordinate in points $this->pagedim[$this->page]['BleedBox']['urx'] = upper-right x coordinate in points $this->pagedim[$this->page]['BleedBox']['ury'] = upper-right y coordinate in points $this->pagedim[$this->page]['TrimBox'] : the intended dimensions of the finished page after trimming$this->pagedim[$this->page]['TrimBox']['llx'] = lower-left x coordinate in points $this->pagedim[$this->page]['TrimBox']['lly'] = lower-left y coordinate in points $this->pagedim[$this->page]['TrimBox']['urx'] = upper-right x coordinate in points $this->pagedim[$this->page]['TrimBox']['ury'] = upper-right y coordinate in points $this->pagedim[$this->page]['ArtBox'] : the extent of the page's meaningful content$this->pagedim[$this->page]['ArtBox']['llx'] = lower-left x coordinate in points $this->pagedim[$this->page]['ArtBox']['lly'] = lower-left y coordinate in points $this->pagedim[$this->page]['ArtBox']['urx'] = upper-right x coordinate in points $this->pagedim[$this->page]['ArtBox']['ury'] = upper-right y coordinate in points
+ * @param $pagenum (int) page number (empty = current page)
+ * @return array of page dimensions.
+ * @author Nicola Asuni
+ * @public
+ * @since 4.5.027 (2009-03-16)
+ */
+ public function getPageDimensions($pagenum='') {
+ if (empty($pagenum)) {
+ $pagenum = $this->page;
}
-
- /**
- * Force temporary RTL language direction
- * @param mixed $mode can be false, 'L' for LTR or 'R' for RTL
- * @access public
- * @since 2.1.000 (2008-01-09)
- */
- public function setTempRTL($mode) {
- $newmode = false;
+ return $this->pagedim[$pagenum];
+ }
+
+ /**
+ * Returns the page width in units.
+ * @param $pagenum (int) page number (empty = current page)
+ * @return int page width.
+ * @author Nicola Asuni
+ * @public
+ * @since 1.5.2
+ * @see getPageDimensions()
+ */
+ public function getPageWidth($pagenum='') {
+ if (empty($pagenum)) {
+ return $this->w;
+ }
+ return $this->pagedim[$pagenum]['w'];
+ }
+
+ /**
+ * Returns the page height in units.
+ * @param $pagenum (int) page number (empty = current page)
+ * @return int page height.
+ * @author Nicola Asuni
+ * @public
+ * @since 1.5.2
+ * @see getPageDimensions()
+ */
+ public function getPageHeight($pagenum='') {
+ if (empty($pagenum)) {
+ return $this->h;
+ }
+ return $this->pagedim[$pagenum]['h'];
+ }
+
+ /**
+ * Returns the page break margin.
+ * @param $pagenum (int) page number (empty = current page)
+ * @return int page break margin.
+ * @author Nicola Asuni
+ * @public
+ * @since 1.5.2
+ * @see getPageDimensions()
+ */
+ public function getBreakMargin($pagenum='') {
+ if (empty($pagenum)) {
+ return $this->bMargin;
+ }
+ return $this->pagedim[$pagenum]['bm'];
+ }
+
+ /**
+ * Returns the scale factor (number of points in user unit).
+ * @return int scale factor.
+ * @author Nicola Asuni
+ * @public
+ * @since 1.5.2
+ */
+ public function getScaleFactor() {
+ return $this->k;
+ }
+
+ /**
+ * Defines the left, top and right margins.
+ * @param $left (float) Left margin.
+ * @param $top (float) Top margin.
+ * @param $right (float) Right margin. Default value is the left one.
+ * @param $keepmargins (boolean) if true overwrites the default page margins
+ * @public
+ * @since 1.0
+ * @see SetLeftMargin(), SetTopMargin(), SetRightMargin(), SetAutoPageBreak()
+ */
+ public function SetMargins($left, $top, $right=-1, $keepmargins=false) {
+ //Set left, top and right margins
+ $this->lMargin = $left;
+ $this->tMargin = $top;
+ if ($right == -1) {
+ $right = $left;
+ }
+ $this->rMargin = $right;
+ if ($keepmargins) {
+ // overwrite original values
+ $this->original_lMargin = $this->lMargin;
+ $this->original_rMargin = $this->rMargin;
+ }
+ }
+
+ /**
+ * Defines the left margin. The method can be called before creating the first page. If the current abscissa gets out of page, it is brought back to the margin.
+ * @param $margin (float) The margin.
+ * @public
+ * @since 1.4
+ * @see SetTopMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins()
+ */
+ public function SetLeftMargin($margin) {
+ //Set left margin
+ $this->lMargin = $margin;
+ if (($this->page > 0) AND ($this->x < $margin)) {
+ $this->x = $margin;
+ }
+ }
+
+ /**
+ * Defines the top margin. The method can be called before creating the first page.
+ * @param $margin (float) The margin.
+ * @public
+ * @since 1.5
+ * @see SetLeftMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins()
+ */
+ public function SetTopMargin($margin) {
+ //Set top margin
+ $this->tMargin = $margin;
+ if (($this->page > 0) AND ($this->y < $margin)) {
+ $this->y = $margin;
+ }
+ }
+
+ /**
+ * Defines the right margin. The method can be called before creating the first page.
+ * @param $margin (float) The margin.
+ * @public
+ * @since 1.5
+ * @see SetLeftMargin(), SetTopMargin(), SetAutoPageBreak(), SetMargins()
+ */
+ public function SetRightMargin($margin) {
+ $this->rMargin = $margin;
+ if (($this->page > 0) AND ($this->x > ($this->w - $margin))) {
+ $this->x = $this->w - $margin;
+ }
+ }
+
+ /**
+ * Set the same internal Cell padding for top, right, bottom, left-
+ * @param $pad (float) internal padding.
+ * @public
+ * @since 2.1.000 (2008-01-09)
+ * @see getCellPaddings(), setCellPaddings()
+ */
+ public function SetCellPadding($pad) {
+ if ($pad >= 0) {
+ $this->cell_padding['L'] = $pad;
+ $this->cell_padding['T'] = $pad;
+ $this->cell_padding['R'] = $pad;
+ $this->cell_padding['B'] = $pad;
+ }
+ }
+
+ /**
+ * Set the internal Cell paddings.
+ * @param $left (float) left padding
+ * @param $top (float) top padding
+ * @param $right (float) right padding
+ * @param $bottom (float) bottom padding
+ * @public
+ * @since 5.9.000 (2010-10-03)
+ * @see getCellPaddings(), SetCellPadding()
+ */
+ public function setCellPaddings($left='', $top='', $right='', $bottom='') {
+ if (($left !== '') AND ($left >= 0)) {
+ $this->cell_padding['L'] = $left;
+ }
+ if (($top !== '') AND ($top >= 0)) {
+ $this->cell_padding['T'] = $top;
+ }
+ if (($right !== '') AND ($right >= 0)) {
+ $this->cell_padding['R'] = $right;
+ }
+ if (($bottom !== '') AND ($bottom >= 0)) {
+ $this->cell_padding['B'] = $bottom;
+ }
+ }
+
+ /**
+ * Get the internal Cell padding array.
+ * @return array of padding values
+ * @public
+ * @since 5.9.000 (2010-10-03)
+ * @see setCellPaddings(), SetCellPadding()
+ */
+ public function getCellPaddings() {
+ return $this->cell_padding;
+ }
+
+ /**
+ * Set the internal Cell margins.
+ * @param $left (float) left margin
+ * @param $top (float) top margin
+ * @param $right (float) right margin
+ * @param $bottom (float) bottom margin
+ * @public
+ * @since 5.9.000 (2010-10-03)
+ * @see getCellMargins()
+ */
+ public function setCellMargins($left='', $top='', $right='', $bottom='') {
+ if (($left !== '') AND ($left >= 0)) {
+ $this->cell_margin['L'] = $left;
+ }
+ if (($top !== '') AND ($top >= 0)) {
+ $this->cell_margin['T'] = $top;
+ }
+ if (($right !== '') AND ($right >= 0)) {
+ $this->cell_margin['R'] = $right;
+ }
+ if (($bottom !== '') AND ($bottom >= 0)) {
+ $this->cell_margin['B'] = $bottom;
+ }
+ }
+
+ /**
+ * Get the internal Cell margin array.
+ * @return array of margin values
+ * @public
+ * @since 5.9.000 (2010-10-03)
+ * @see setCellMargins()
+ */
+ public function getCellMargins() {
+ return $this->cell_margin;
+ }
+
+ /**
+ * Adjust the internal Cell padding array to take account of the line width.
+ * @param $brd (mixed) Indicates if borders must be drawn around the cell. The value can be a number:0: no border (default) 1: frame or a string containing some or all of the following characters (in any order):L: left T: top R: right B: bottom or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
+ * @return array of adjustments
+ * @public
+ * @since 5.9.000 (2010-10-03)
+ */
+ protected function adjustCellPadding($brd=0) {
+ if (empty($brd)) {
+ return;
+ }
+ if (is_string($brd)) {
+ // convert string to array
+ $slen = strlen($brd);
+ $newbrd = array();
+ for ($i = 0; $i < $slen; ++$i) {
+ $newbrd[$brd{$i}] = true;
+ }
+ $brd = $newbrd;
+ } elseif (($brd === 1) OR ($brd === true) OR (is_numeric($brd) AND (intval($brd) > 0))) {
+ $brd = array('LRTB' => true);
+ }
+ if (!is_array($brd)) {
+ return;
+ }
+ // store current cell padding
+ $cp = $this->cell_padding;
+ // select border mode
+ if (isset($brd['mode'])) {
+ $mode = $brd['mode'];
+ unset($brd['mode']);
+ } else {
+ $mode = 'normal';
+ }
+ // process borders
+ foreach ($brd as $border => $style) {
+ $line_width = $this->LineWidth;
+ if (is_array($style) AND isset($style['width'])) {
+ // get border width
+ $line_width = $style['width'];
+ }
+ $adj = 0; // line width inside the cell
switch ($mode) {
- case 'ltr':
- case 'LTR':
- case 'L': {
- if ($this->rtl) {
- $newmode = 'L';
- }
+ case 'ext': {
+ $adj = 0;
break;
}
- case 'rtl':
- case 'RTL':
- case 'R': {
- if (!$this->rtl) {
- $newmode = 'R';
- }
+ case 'int': {
+ $adj = $line_width;
break;
}
- case false:
+ case 'normal':
default: {
- $newmode = false;
+ $adj = ($line_width / 2);
break;
}
}
- $this->tmprtl = $newmode;
- }
-
- /**
- * Return the current temporary RTL status
- * @return boolean
- * @access public
- * @since 4.8.014 (2009-11-04)
- */
- public function isRTLTextDir() {
- return ($this->rtl OR ($this->tmprtl == 'R'));
- }
-
- /**
- * Set the last cell height.
- * @param float $h cell height.
- * @author Nicola Asuni
- * @access public
- * @since 1.53.0.TC034
- */
- public function setLastH($h) {
- $this->lasth = $h;
- }
-
- /**
- * Get the last cell height.
- * @return last cell height
- * @access public
- * @since 4.0.017 (2008-08-05)
- */
- public function getLastH() {
- return $this->lasth;
- }
-
- /**
- * Set the adjusting factor to convert pixels to user units.
- * @param float $scale adjusting factor to convert pixels to user units.
- * @author Nicola Asuni
- * @access public
- * @since 1.5.2
- */
- public function setImageScale($scale) {
- $this->imgscale = $scale;
- }
-
- /**
- * Returns the adjusting factor to convert pixels to user units.
- * @return float adjusting factor to convert pixels to user units.
- * @author Nicola Asuni
- * @access public
- * @since 1.5.2
- */
- public function getImageScale() {
- return $this->imgscale;
- }
-
- /**
- * Returns an array of page dimensions:
- * $this->pagedim[$this->page]['w'] => page_width_in_points $this->pagedim[$this->page]['h'] => height in points $this->pagedim[$this->page]['wk'] => page_width_in_points $this->pagedim[$this->page]['hk'] => height $this->pagedim[$this->page]['tm'] => top_margin $this->pagedim[$this->page]['bm'] => bottom_margin $this->pagedim[$this->page]['lm'] => left_margin $this->pagedim[$this->page]['rm'] => right_margin $this->pagedim[$this->page]['pb'] => auto_page_break $this->pagedim[$this->page]['or'] => page_orientation $this->pagedim[$this->page]['olm'] => original_left_margin $this->pagedim[$this->page]['orm'] => original_right_margin
- * @param int $pagenum page number (empty = current page)
- * @return array of page dimensions.
- * @author Nicola Asuni
- * @access public
- * @since 4.5.027 (2009-03-16)
- */
- public function getPageDimensions($pagenum='') {
- if (empty($pagenum)) {
- $pagenum = $this->page;
+ // correct internal cell padding if required to avoid overlap between text and lines
+ if ((strpos($border,'T') !== false) AND ($this->cell_padding['T'] < $adj)) {
+ $this->cell_padding['T'] = $adj;
}
- return $this->pagedim[$pagenum];
- }
-
- /**
- * Returns the page width in units.
- * @param int $pagenum page number (empty = current page)
- * @return int page width.
- * @author Nicola Asuni
- * @access public
- * @since 1.5.2
- * @see getPageDimensions()
- */
- public function getPageWidth($pagenum='') {
- if (empty($pagenum)) {
- return $this->w;
+ if ((strpos($border,'R') !== false) AND ($this->cell_padding['R'] < $adj)) {
+ $this->cell_padding['R'] = $adj;
}
- return $this->pagedim[$pagenum]['w'];
- }
-
- /**
- * Returns the page height in units.
- * @param int $pagenum page number (empty = current page)
- * @return int page height.
- * @author Nicola Asuni
- * @access public
- * @since 1.5.2
- * @see getPageDimensions()
- */
- public function getPageHeight($pagenum='') {
- if (empty($pagenum)) {
- return $this->h;
+ if ((strpos($border,'B') !== false) AND ($this->cell_padding['B'] < $adj)) {
+ $this->cell_padding['B'] = $adj;
}
- return $this->pagedim[$pagenum]['h'];
- }
-
- /**
- * Returns the page break margin.
- * @param int $pagenum page number (empty = current page)
- * @return int page break margin.
- * @author Nicola Asuni
- * @access public
- * @since 1.5.2
- * @see getPageDimensions()
- */
- public function getBreakMargin($pagenum='') {
- if (empty($pagenum)) {
- return $this->bMargin;
- }
- return $this->pagedim[$pagenum]['bm'];
- }
-
- /**
- * Returns the scale factor (number of points in user unit).
- * @return int scale factor.
- * @author Nicola Asuni
- * @access public
- * @since 1.5.2
- */
- public function getScaleFactor() {
- return $this->k;
- }
-
- /**
- * Defines the left, top and right margins. By default, they equal 1 cm. Call this method to change them.
- * @param float $left Left margin.
- * @param float $top Top margin.
- * @param float $right Right margin. Default value is the left one.
- * @access public
- * @since 1.0
- * @see SetLeftMargin(), SetTopMargin(), SetRightMargin(), SetAutoPageBreak()
- */
- public function SetMargins($left, $top, $right=-1) {
- //Set left, top and right margins
- $this->lMargin = $left;
- $this->tMargin = $top;
- if ($right == -1) {
- $right = $left;
- }
- $this->rMargin = $right;
- }
-
- /**
- * Defines the left margin. The method can be called before creating the first page. If the current abscissa gets out of page, it is brought back to the margin.
- * @param float $margin The margin.
- * @access public
- * @since 1.4
- * @see SetTopMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins()
- */
- public function SetLeftMargin($margin) {
- //Set left margin
- $this->lMargin=$margin;
- if (($this->page > 0) AND ($this->x < $margin)) {
- $this->x = $margin;
+ if ((strpos($border,'L') !== false) AND ($this->cell_padding['L'] < $adj)) {
+ $this->cell_padding['L'] = $adj;
}
}
+ return array('T' => ($this->cell_padding['T'] - $cp['T']), 'R' => ($this->cell_padding['R'] - $cp['R']), 'B' => ($this->cell_padding['B'] - $cp['B']), 'L' => ($this->cell_padding['L'] - $cp['L']));
+ }
- /**
- * Defines the top margin. The method can be called before creating the first page.
- * @param float $margin The margin.
- * @access public
- * @since 1.5
- * @see SetLeftMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins()
- */
- public function SetTopMargin($margin) {
- //Set top margin
- $this->tMargin=$margin;
- if (($this->page > 0) AND ($this->y < $margin)) {
- $this->y = $margin;
+ /**
+ * Enables or disables the automatic page breaking mode. When enabling, the second parameter is the distance from the bottom of the page that defines the triggering limit. By default, the mode is on and the margin is 2 cm.
+ * @param $auto (boolean) Boolean indicating if mode should be on or off.
+ * @param $margin (float) Distance from the bottom of the page.
+ * @public
+ * @since 1.0
+ * @see Cell(), MultiCell(), AcceptPageBreak()
+ */
+ public function SetAutoPageBreak($auto, $margin=0) {
+ $this->AutoPageBreak = $auto ? true : false;
+ $this->bMargin = $margin;
+ $this->PageBreakTrigger = $this->h - $margin;
+ }
+
+ /**
+ * Return the auto-page-break mode (true or false).
+ * @return boolean auto-page-break mode
+ * @public
+ * @since 5.9.088
+ */
+ public function getAutoPageBreak() {
+ return $this->AutoPageBreak;
+ }
+
+ /**
+ * Defines the way the document is to be displayed by the viewer.
+ * @param $zoom (mixed) The zoom to use. It can be one of the following string values or a number indicating the zooming factor to use. fullpage: displays the entire page on screen fullwidth: uses maximum width of window real: uses real size (equivalent to 100% zoom) default: uses viewer default mode
+ * @param $layout (string) The page layout. Possible values are:SinglePage Display one page at a time OneColumn Display the pages in one column TwoColumnLeft Display the pages in two columns, with odd-numbered pages on the left TwoColumnRight Display the pages in two columns, with odd-numbered pages on the right TwoPageLeft (PDF 1.5) Display the pages two at a time, with odd-numbered pages on the left TwoPageRight (PDF 1.5) Display the pages two at a time, with odd-numbered pages on the right
+ * @param $mode (string) A name object specifying how the document should be displayed when opened:UseNone Neither document outline nor thumbnail images visible UseOutlines Document outline visible UseThumbs Thumbnail images visible FullScreen Full-screen mode, with no menu bar, window controls, or any other window visible UseOC (PDF 1.5) Optional content group panel visible UseAttachments (PDF 1.6) Attachments panel visible
+ * @public
+ * @since 1.2
+ */
+ public function SetDisplayMode($zoom, $layout='SinglePage', $mode='UseNone') {
+ if (($zoom == 'fullpage') OR ($zoom == 'fullwidth') OR ($zoom == 'real') OR ($zoom == 'default') OR (!is_string($zoom))) {
+ $this->ZoomMode = $zoom;
+ } else {
+ $this->Error('Incorrect zoom display mode: '.$zoom);
+ }
+ switch ($layout) {
+ case 'default':
+ case 'single':
+ case 'SinglePage': {
+ $this->LayoutMode = 'SinglePage';
+ break;
+ }
+ case 'continuous':
+ case 'OneColumn': {
+ $this->LayoutMode = 'OneColumn';
+ break;
+ }
+ case 'two':
+ case 'TwoColumnLeft': {
+ $this->LayoutMode = 'TwoColumnLeft';
+ break;
+ }
+ case 'TwoColumnRight': {
+ $this->LayoutMode = 'TwoColumnRight';
+ break;
+ }
+ case 'TwoPageLeft': {
+ $this->LayoutMode = 'TwoPageLeft';
+ break;
+ }
+ case 'TwoPageRight': {
+ $this->LayoutMode = 'TwoPageRight';
+ break;
+ }
+ default: {
+ $this->LayoutMode = 'SinglePage';
}
}
-
- /**
- * Defines the right margin. The method can be called before creating the first page.
- * @param float $margin The margin.
- * @access public
- * @since 1.5
- * @see SetLeftMargin(), SetTopMargin(), SetAutoPageBreak(), SetMargins()
- */
- public function SetRightMargin($margin) {
- $this->rMargin=$margin;
- if (($this->page > 0) AND ($this->x > ($this->w - $margin))) {
- $this->x = $this->w - $margin;
+ switch ($mode) {
+ case 'UseNone': {
+ $this->PageMode = 'UseNone';
+ break;
+ }
+ case 'UseOutlines': {
+ $this->PageMode = 'UseOutlines';
+ break;
+ }
+ case 'UseThumbs': {
+ $this->PageMode = 'UseThumbs';
+ break;
+ }
+ case 'FullScreen': {
+ $this->PageMode = 'FullScreen';
+ break;
+ }
+ case 'UseOC': {
+ $this->PageMode = 'UseOC';
+ break;
+ }
+ case '': {
+ $this->PageMode = 'UseAttachments';
+ break;
+ }
+ default: {
+ $this->PageMode = 'UseNone';
}
}
+ }
- /**
- * Set the internal Cell padding.
- * @param float $pad internal padding.
- * @access public
- * @since 2.1.000 (2008-01-09)
- * @see Cell(), SetLeftMargin(), SetTopMargin(), SetAutoPageBreak(), SetMargins()
- */
- public function SetCellPadding($pad) {
- $this->cMargin = $pad;
+ /**
+ * Activates or deactivates page compression. When activated, the internal representation of each page is compressed, which leads to a compression ratio of about 2 for the resulting document. Compression is on by default.
+ * Note: the Zlib extension is required for this feature. If not present, compression will be turned off.
+ * @param $compress (boolean) Boolean indicating if compression must be enabled.
+ * @public
+ * @since 1.4
+ */
+ public function SetCompression($compress=true) {
+ if (function_exists('gzcompress')) {
+ $this->compress = $compress ? true : false;
+ } else {
+ $this->compress = false;
}
+ }
- /**
- * Enables or disables the automatic page breaking mode. When enabling, the second parameter is the distance from the bottom of the page that defines the triggering limit. By default, the mode is on and the margin is 2 cm.
- * @param boolean $auto Boolean indicating if mode should be on or off.
- * @param float $margin Distance from the bottom of the page.
- * @access public
- * @since 1.0
- * @see Cell(), MultiCell(), AcceptPageBreak()
- */
- public function SetAutoPageBreak($auto, $margin=0) {
- //Set auto page break mode and triggering margin
- $this->AutoPageBreak = $auto;
- $this->bMargin = $margin;
- $this->PageBreakTrigger = $this->h - $margin;
- }
+ /**
+ * Set flag to force sRGB_IEC61966-2.1 black scaled ICC color profile for the whole document.
+ * @param $mode (boolean) If true force sRGB output intent.
+ * @public
+ * @since 5.9.121 (2011-09-28)
+ */
+ public function setSRGBmode($mode=false) {
+ $this->force_srgb = $mode ? true : false;
+ }
- /**
- * Defines the way the document is to be displayed by the viewer.
- * @param mixed $zoom The zoom to use. It can be one of the following string values or a number indicating the zooming factor to use. fullpage: displays the entire page on screen fullwidth: uses maximum width of window real: uses real size (equivalent to 100% zoom) default: uses viewer default mode
- * @param string $layout The page layout. Possible values are:SinglePage Display one page at a time OneColumn Display the pages in one column TwoColumnLeft Display the pages in two columns, with odd-numbered pages on the left TwoColumnRight Display the pages in two columns, with odd-numbered pages on the right TwoPageLeft (PDF 1.5) Display the pages two at a time, with odd-numbered pages on the left TwoPageRight (PDF 1.5) Display the pages two at a time, with odd-numbered pages on the right
- * @param string $mode A name object specifying how the document should be displayed when opened:UseNone Neither document outline nor thumbnail images visible UseOutlines Document outline visible UseThumbs Thumbnail images visible FullScreen Full-screen mode, with no menu bar, window controls, or any other window visible UseOC (PDF 1.5) Optional content group panel visible UseAttachments (PDF 1.6) Attachments panel visible
- * @access public
- * @since 1.2
- */
- public function SetDisplayMode($zoom, $layout='SinglePage', $mode='UseNone') {
- //Set display mode in viewer
- if (($zoom == 'fullpage') OR ($zoom == 'fullwidth') OR ($zoom == 'real') OR ($zoom == 'default') OR (!is_string($zoom))) {
- $this->ZoomMode = $zoom;
- } else {
- $this->Error('Incorrect zoom display mode: '.$zoom);
- }
- switch ($layout) {
- case 'default':
- case 'single':
- case 'SinglePage': {
- $this->LayoutMode = 'SinglePage';
- break;
- }
- case 'continuous':
- case 'OneColumn': {
- $this->LayoutMode = 'OneColumn';
- break;
- }
- case 'two':
- case 'TwoColumnLeft': {
- $this->LayoutMode = 'TwoColumnLeft';
- break;
- }
- case 'TwoColumnRight': {
- $this->LayoutMode = 'TwoColumnRight';
- break;
- }
- case 'TwoPageLeft': {
- $this->LayoutMode = 'TwoPageLeft';
- break;
- }
- case 'TwoPageRight': {
- $this->LayoutMode = 'TwoPageRight';
- break;
- }
- default: {
- $this->LayoutMode = 'SinglePage';
- }
- }
- switch ($mode) {
- case 'UseNone': {
- $this->PageMode = 'UseNone';
- break;
- }
- case 'UseOutlines': {
- $this->PageMode = 'UseOutlines';
- break;
- }
- case 'UseThumbs': {
- $this->PageMode = 'UseThumbs';
- break;
- }
- case 'FullScreen': {
- $this->PageMode = 'FullScreen';
- break;
- }
- case 'UseOC': {
- $this->PageMode = 'UseOC';
- break;
- }
- case '': {
- $this->PageMode = 'UseAttachments';
- break;
- }
- default: {
- $this->PageMode = 'UseNone';
- }
- }
- }
+ /**
+ * Turn on/off Unicode mode for document information dictionary (meta tags).
+ * This has effect only when unicode mode is set to false.
+ * @param $unicode (boolean) if true set the meta information in Unicode
+ * @since 5.9.027 (2010-12-01)
+ * @public
+ */
+ public function SetDocInfoUnicode($unicode=true) {
+ $this->docinfounicode = $unicode ? true : false;
+ }
- /**
- * Activates or deactivates page compression. When activated, the internal representation of each page is compressed, which leads to a compression ratio of about 2 for the resulting document. Compression is on by default.
- * Note: the Zlib extension is required for this feature. If not present, compression will be turned off.
- * @param boolean $compress Boolean indicating if compression must be enabled.
- * @access public
- * @since 1.4
- */
- public function SetCompression($compress) {
- //Set page compression
- if (function_exists('gzcompress')) {
- $this->compress = $compress;
- } else {
- $this->compress = false;
- }
- }
+ /**
+ * Defines the title of the document.
+ * @param $title (string) The title.
+ * @public
+ * @since 1.2
+ * @see SetAuthor(), SetCreator(), SetKeywords(), SetSubject()
+ */
+ public function SetTitle($title) {
+ $this->title = $title;
+ }
- /**
- * Defines the title of the document.
- * @param string $title The title.
- * @access public
- * @since 1.2
- * @see SetAuthor(), SetCreator(), SetKeywords(), SetSubject()
- */
- public function SetTitle($title) {
- //Title of document
- $this->title = $title;
- }
+ /**
+ * Defines the subject of the document.
+ * @param $subject (string) The subject.
+ * @public
+ * @since 1.2
+ * @see SetAuthor(), SetCreator(), SetKeywords(), SetTitle()
+ */
+ public function SetSubject($subject) {
+ $this->subject = $subject;
+ }
- /**
- * Defines the subject of the document.
- * @param string $subject The subject.
- * @access public
- * @since 1.2
- * @see SetAuthor(), SetCreator(), SetKeywords(), SetTitle()
- */
- public function SetSubject($subject) {
- //Subject of document
- $this->subject = $subject;
- }
+ /**
+ * Defines the author of the document.
+ * @param $author (string) The name of the author.
+ * @public
+ * @since 1.2
+ * @see SetCreator(), SetKeywords(), SetSubject(), SetTitle()
+ */
+ public function SetAuthor($author) {
+ $this->author = $author;
+ }
- /**
- * Defines the author of the document.
- * @param string $author The name of the author.
- * @access public
- * @since 1.2
- * @see SetCreator(), SetKeywords(), SetSubject(), SetTitle()
- */
- public function SetAuthor($author) {
- //Author of document
- $this->author = $author;
- }
+ /**
+ * Associates keywords with the document, generally in the form 'keyword1 keyword2 ...'.
+ * @param $keywords (string) The list of keywords.
+ * @public
+ * @since 1.2
+ * @see SetAuthor(), SetCreator(), SetSubject(), SetTitle()
+ */
+ public function SetKeywords($keywords) {
+ $this->keywords = $keywords;
+ }
- /**
- * Associates keywords with the document, generally in the form 'keyword1 keyword2 ...'.
- * @param string $keywords The list of keywords.
- * @access public
- * @since 1.2
- * @see SetAuthor(), SetCreator(), SetSubject(), SetTitle()
- */
- public function SetKeywords($keywords) {
- //Keywords of document
- $this->keywords = $keywords;
- }
+ /**
+ * Defines the creator of the document. This is typically the name of the application that generates the PDF.
+ * @param $creator (string) The name of the creator.
+ * @public
+ * @since 1.2
+ * @see SetAuthor(), SetKeywords(), SetSubject(), SetTitle()
+ */
+ public function SetCreator($creator) {
+ $this->creator = $creator;
+ }
- /**
- * Defines the creator of the document. This is typically the name of the application that generates the PDF.
- * @param string $creator The name of the creator.
- * @access public
- * @since 1.2
- * @see SetAuthor(), SetKeywords(), SetSubject(), SetTitle()
- */
- public function SetCreator($creator) {
- //Creator of document
- $this->creator = $creator;
- }
-
- /**
- * This method is automatically called in case of fatal error; it simply outputs the message and halts the execution. An inherited class may override it to customize the error handling but should always halt the script, or the resulting document would probably be invalid.
- * 2004-06-11 :: Nicola Asuni : changed bold tag with strong
- * @param string $msg The error message
- * @access public
- * @since 1.0
- */
- public function Error($msg) {
- // unset all class variables
- $this->_destroy(true);
- // exit program and print error
- die('TCPDF ERROR: '.$msg);
- }
+ /**
+ * This method is automatically called in case of fatal error; it simply outputs the message and halts the execution. An inherited class may override it to customize the error handling but should always halt the script, or the resulting document would probably be invalid.
+ * 2004-06-11 :: Nicola Asuni : changed bold tag with strong
+ * @param $msg (string) The error message
+ * @public
+ * @since 1.0
+ */
+ public function Error($msg) {
+ // unset all class variables
+ $this->_destroy(true);
+ // exit program and print error
+ die('TCPDF ERROR: '.$msg);
+ }
- /**
- * This method begins the generation of the PDF document.
- * It is not necessary to call it explicitly because AddPage() does it automatically.
- * Note: no page is created by this method
- * @access public
- * @since 1.0
- * @see AddPage(), Close()
- */
- public function Open() {
- //Begin document
- $this->state = 1;
- }
+ /**
+ * This method begins the generation of the PDF document.
+ * It is not necessary to call it explicitly because AddPage() does it automatically.
+ * Note: no page is created by this method
+ * @public
+ * @since 1.0
+ * @see AddPage(), Close()
+ */
+ public function Open() {
+ $this->state = 1;
+ }
- /**
- * Terminates the PDF document.
- * It is not necessary to call this method explicitly because Output() does it automatically.
- * If the document contains no page, AddPage() is called to prevent from getting an invalid document.
- * @access public
- * @since 1.0
- * @see Open(), Output()
- */
- public function Close() {
- if ($this->state == 3) {
- return;
- }
- if ($this->page == 0) {
- $this->AddPage();
- }
- // close page
- $this->endPage();
- // close document
- $this->_enddoc();
- // unset all class variables (except critical ones)
- $this->_destroy(false);
+ /**
+ * Terminates the PDF document.
+ * It is not necessary to call this method explicitly because Output() does it automatically.
+ * If the document contains no page, AddPage() is called to prevent from getting an invalid document.
+ * @public
+ * @since 1.0
+ * @see Open(), Output()
+ */
+ public function Close() {
+ if ($this->state == 3) {
+ return;
}
-
- /**
- * Move pointer at the specified document page and update page dimensions.
- * @param int $pnum page number
- * @param boolean $resetmargins if true reset left, right, top margins and Y position.
- * @access public
- * @since 2.1.000 (2008-01-07)
- * @see getPage(), lastpage(), getNumPages()
- */
- public function setPage($pnum, $resetmargins=false) {
- if ($pnum == $this->page) {
- return;
- }
- if (($pnum > 0) AND ($pnum <= $this->numpages)) {
- $this->state = 2;
- // save current graphic settings
- //$gvars = $this->getGraphicVars();
- $oldpage = $this->page;
- $this->page = $pnum;
- $this->wPt = $this->pagedim[$this->page]['w'];
- $this->hPt = $this->pagedim[$this->page]['h'];
- $this->w = $this->wPt / $this->k;
- $this->h = $this->hPt / $this->k;
- $this->tMargin = $this->pagedim[$this->page]['tm'];
- $this->bMargin = $this->pagedim[$this->page]['bm'];
- $this->original_lMargin = $this->pagedim[$this->page]['olm'];
- $this->original_rMargin = $this->pagedim[$this->page]['orm'];
- $this->AutoPageBreak = $this->pagedim[$this->page]['pb'];
- $this->CurOrientation = $this->pagedim[$this->page]['or'];
- $this->SetAutoPageBreak($this->AutoPageBreak, $this->bMargin);
- // restore graphic settings
- //$this->setGraphicVars($gvars);
- if ($resetmargins) {
- $this->lMargin = $this->pagedim[$this->page]['olm'];
- $this->rMargin = $this->pagedim[$this->page]['orm'];
- $this->SetY($this->tMargin);
- } else {
- // account for booklet mode
- if ($this->pagedim[$this->page]['olm'] != $this->pagedim[$oldpage]['olm']) {
- $deltam = $this->pagedim[$this->page]['olm'] - $this->pagedim[$this->page]['orm'];
- $this->lMargin += $deltam;
- $this->rMargin -= $deltam;
- }
- }
- } else {
- $this->Error('Wrong page number on setPage() function.');
- }
- }
-
- /**
- * Reset pointer to the last document page.
- * @param boolean $resetmargins if true reset left, right, top margins and Y position.
- * @access public
- * @since 2.0.000 (2008-01-04)
- * @see setPage(), getPage(), getNumPages()
- */
- public function lastPage($resetmargins=false) {
- $this->setPage($this->getNumPages(), $resetmargins);
- }
-
- /**
- * Get current document page number.
- * @return int page number
- * @access public
- * @since 2.1.000 (2008-01-07)
- * @see setPage(), lastpage(), getNumPages()
- */
- public function getPage() {
- return $this->page;
- }
-
-
- /**
- * Get the total number of insered pages.
- * @return int number of pages
- * @access public
- * @since 2.1.000 (2008-01-07)
- * @see setPage(), getPage(), lastpage()
- */
- public function getNumPages() {
- return $this->numpages;
+ if ($this->page == 0) {
+ $this->AddPage();
}
+ $this->endLayer();
+ // save current graphic settings
+ $gvars = $this->getGraphicVars();
+ $this->setEqualColumns();
+ $this->lastpage(true);
+ $this->SetAutoPageBreak(false);
+ $this->x = 0;
+ $this->y = $this->h - (1 / $this->k);
+ $this->lMargin = 0;
+ $this->_out('q');
+ $this->SetFont('helvetica', '', 1);
+ $this->setTextRenderingMode(0, false, false);
+ $msg = "\x50\x6f\x77\x65\x72\x65\x64\x20\x62\x79\x20\x54\x43\x50\x44\x46\x20\x28\x77\x77\x77\x2e\x74\x63\x70\x64\x66\x2e\x6f\x72\x67\x29";
+ $lnk = "\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x74\x63\x70\x64\x66\x2e\x6f\x72\x67";
+ $this->Cell(0, 0, $msg, 0, 0, 'L', 0, $lnk, 0, false, 'D', 'B');
+ $this->_out('Q');
+ // restore graphic settings
+ $this->setGraphicVars($gvars);
+ // close page
+ $this->endPage();
+ // close document
+ $this->_enddoc();
+ // unset all class variables (except critical ones)
+ $this->_destroy(false);
+ }
- /**
- * Adds a new page to the document. If a page is already present, the Footer() method is called first to output the footer (if enabled). Then the page is added, the current position set to the top-left corner according to the left and top margins (or top-right if in RTL mode), and Header() is called to display the header (if enabled).
- * The origin of the coordinate system is at the top-left corner (or top-right for RTL) and increasing ordinates go downwards.
- * @param string $orientation page orientation. Possible values are (case insensitive):P or PORTRAIT (default) L or LANDSCAPE
- * @param mixed $format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).4A0 2A0 A0 A1 A2 A3 A4 (default) A5 A6 A7 A8 A9 A10 B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 RA0 RA1 RA2 RA3 RA4 SRA0 SRA1 SRA2 SRA3 SRA4 LETTER LEGAL EXECUTIVE FOLIO
- * @access public
- * @since 1.0
- * @see startPage(), endPage()
- */
- public function AddPage($orientation='', $format='') {
- if (!isset($this->original_lMargin)) {
- $this->original_lMargin = $this->lMargin;
- }
- if (!isset($this->original_rMargin)) {
- $this->original_rMargin = $this->rMargin;
- }
- // terminate previous page
- $this->endPage();
- // start new page
- $this->startPage($orientation, $format);
+ /**
+ * Move pointer at the specified document page and update page dimensions.
+ * @param $pnum (int) page number (1 ... numpages)
+ * @param $resetmargins (boolean) if true reset left, right, top margins and Y position.
+ * @public
+ * @since 2.1.000 (2008-01-07)
+ * @see getPage(), lastpage(), getNumPages()
+ */
+ public function setPage($pnum, $resetmargins=false) {
+ if (($pnum == $this->page) AND ($this->state == 2)) {
+ return;
}
-
- /**
- * Terminate the current page
- * @access protected
- * @since 4.2.010 (2008-11-14)
- * @see startPage(), AddPage()
- */
- protected function endPage() {
- // check if page is already closed
- if (($this->page == 0) OR ($this->numpages > $this->page) OR (!$this->pageopen[$this->page])) {
- return;
- }
- $this->InFooter = true;
- // print page footer
- $this->setFooter();
- // close page
- $this->_endpage();
- // mark page as closed
- $this->pageopen[$this->page] = false;
- $this->InFooter = false;
- }
-
- /**
- * Starts a new page to the document. The page must be closed using the endPage() function.
- * The origin of the coordinate system is at the top-left corner and increasing ordinates go downwards.
- * @param string $orientation page orientation. Possible values are (case insensitive):P or PORTRAIT (default) L or LANDSCAPE
- * @param mixed $format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).4A0 2A0 A0 A1 A2 A3 A4 (default) A5 A6 A7 A8 A9 A10 B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 RA0 RA1 RA2 RA3 RA4 SRA0 SRA1 SRA2 SRA3 SRA4 LETTER LEGAL EXECUTIVE FOLIO
- * @access protected
- * @since 4.2.010 (2008-11-14)
- * @see endPage(), AddPage()
- */
- protected function startPage($orientation='', $format='') {
- if ($this->numpages > $this->page) {
- // this page has been already added
- $this->setPage($this->page + 1);
- $this->SetY($this->tMargin);
- return;
- }
- // start a new page
- if ($this->state == 0) {
- $this->Open();
- }
- ++$this->numpages;
- $this->swapMargins($this->booklet);
+ if (($pnum > 0) AND ($pnum <= $this->numpages)) {
+ $this->state = 2;
// save current graphic settings
- $gvars = $this->getGraphicVars();
- // start new page
- $this->_beginpage($orientation, $format);
- // mark page as open
- $this->pageopen[$this->page] = true;
+ //$gvars = $this->getGraphicVars();
+ $oldpage = $this->page;
+ $this->page = $pnum;
+ $this->wPt = $this->pagedim[$this->page]['w'];
+ $this->hPt = $this->pagedim[$this->page]['h'];
+ $this->w = $this->pagedim[$this->page]['wk'];
+ $this->h = $this->pagedim[$this->page]['hk'];
+ $this->tMargin = $this->pagedim[$this->page]['tm'];
+ $this->bMargin = $this->pagedim[$this->page]['bm'];
+ $this->original_lMargin = $this->pagedim[$this->page]['olm'];
+ $this->original_rMargin = $this->pagedim[$this->page]['orm'];
+ $this->AutoPageBreak = $this->pagedim[$this->page]['pb'];
+ $this->CurOrientation = $this->pagedim[$this->page]['or'];
+ $this->SetAutoPageBreak($this->AutoPageBreak, $this->bMargin);
// restore graphic settings
- $this->setGraphicVars($gvars);
- // mark this point
- $this->setPageMark();
- // print page header
- $this->setHeader();
- // restore graphic settings
- $this->setGraphicVars($gvars);
- // mark this point
- $this->setPageMark();
- // print table header (if any)
- $this->setTableHeader();
- }
-
- /**
- * Set start-writing mark on current page for multicell borders and fills.
- * This function must be called after calling Image() function for a background image.
- * Background images must be always inserted before calling Multicell() or WriteHTMLCell() or WriteHTML() functions.
- * @access public
- * @since 4.0.016 (2008-07-30)
- */
- public function setPageMark() {
- $this->intmrk[$this->page] = $this->pagelen[$this->page];
- $this->setContentMark();
- }
-
- /**
- * Set start-writing mark on selected page.
- * @param int $page page number (default is the current page)
- * @access protected
- * @since 4.6.021 (2009-07-20)
- */
- protected function setContentMark($page=0) {
- if ($page <= 0) {
- $page = $this->page;
- }
- if (isset($this->footerlen[$page])) {
- $this->cntmrk[$page] = $this->pagelen[$page] - $this->footerlen[$page];
+ //$this->setGraphicVars($gvars);
+ if ($resetmargins) {
+ $this->lMargin = $this->pagedim[$this->page]['olm'];
+ $this->rMargin = $this->pagedim[$this->page]['orm'];
+ $this->SetY($this->tMargin);
} else {
- $this->cntmrk[$page] = $this->pagelen[$page];
+ // account for booklet mode
+ if ($this->pagedim[$this->page]['olm'] != $this->pagedim[$oldpage]['olm']) {
+ $deltam = $this->pagedim[$this->page]['olm'] - $this->pagedim[$this->page]['orm'];
+ $this->lMargin += $deltam;
+ $this->rMargin -= $deltam;
+ }
+ }
+ } else {
+ $this->Error('Wrong page number on setPage() function: '.$pnum);
+ }
+ }
+
+ /**
+ * Reset pointer to the last document page.
+ * @param $resetmargins (boolean) if true reset left, right, top margins and Y position.
+ * @public
+ * @since 2.0.000 (2008-01-04)
+ * @see setPage(), getPage(), getNumPages()
+ */
+ public function lastPage($resetmargins=false) {
+ $this->setPage($this->getNumPages(), $resetmargins);
+ }
+
+ /**
+ * Get current document page number.
+ * @return int page number
+ * @public
+ * @since 2.1.000 (2008-01-07)
+ * @see setPage(), lastpage(), getNumPages()
+ */
+ public function getPage() {
+ return $this->page;
+ }
+
+ /**
+ * Get the total number of insered pages.
+ * @return int number of pages
+ * @public
+ * @since 2.1.000 (2008-01-07)
+ * @see setPage(), getPage(), lastpage()
+ */
+ public function getNumPages() {
+ return $this->numpages;
+ }
+
+ /**
+ * Adds a new TOC (Table Of Content) page to the document.
+ * @param $orientation (string) page orientation.
+ * @param $format (mixed) The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat().
+ * @param $keepmargins (boolean) if true overwrites the default page margins with the current margins
+ * @public
+ * @since 5.0.001 (2010-05-06)
+ * @see AddPage(), startPage(), endPage(), endTOCPage()
+ */
+ public function addTOCPage($orientation='', $format='', $keepmargins=false) {
+ $this->AddPage($orientation, $format, $keepmargins, true);
+ }
+
+ /**
+ * Terminate the current TOC (Table Of Content) page
+ * @public
+ * @since 5.0.001 (2010-05-06)
+ * @see AddPage(), startPage(), endPage(), addTOCPage()
+ */
+ public function endTOCPage() {
+ $this->endPage(true);
+ }
+
+ /**
+ * Adds a new page to the document. If a page is already present, the Footer() method is called first to output the footer (if enabled). Then the page is added, the current position set to the top-left corner according to the left and top margins (or top-right if in RTL mode), and Header() is called to display the header (if enabled).
+ * The origin of the coordinate system is at the top-left corner (or top-right for RTL) and increasing ordinates go downwards.
+ * @param $orientation (string) page orientation. Possible values are (case insensitive):P or PORTRAIT (default) L or LANDSCAPE
+ * @param $format (mixed) The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat().
+ * @param $keepmargins (boolean) if true overwrites the default page margins with the current margins
+ * @param $tocpage (boolean) if true set the tocpage state to true (the added page will be used to display Table Of Content).
+ * @public
+ * @since 1.0
+ * @see startPage(), endPage(), addTOCPage(), endTOCPage(), getPageSizeFromFormat(), setPageFormat()
+ */
+ public function AddPage($orientation='', $format='', $keepmargins=false, $tocpage=false) {
+ if ($this->inxobj) {
+ // we are inside an XObject template
+ return;
+ }
+ if (!isset($this->original_lMargin) OR $keepmargins) {
+ $this->original_lMargin = $this->lMargin;
+ }
+ if (!isset($this->original_rMargin) OR $keepmargins) {
+ $this->original_rMargin = $this->rMargin;
+ }
+ // terminate previous page
+ $this->endPage();
+ // start new page
+ $this->startPage($orientation, $format, $tocpage);
+ }
+
+ /**
+ * Terminate the current page
+ * @param $tocpage (boolean) if true set the tocpage state to false (end the page used to display Table Of Content).
+ * @public
+ * @since 4.2.010 (2008-11-14)
+ * @see AddPage(), startPage(), addTOCPage(), endTOCPage()
+ */
+ public function endPage($tocpage=false) {
+ // check if page is already closed
+ if (($this->page == 0) OR ($this->numpages > $this->page) OR (!$this->pageopen[$this->page])) {
+ return;
+ }
+ // print page footer
+ $this->setFooter();
+ // close page
+ $this->_endpage();
+ // mark page as closed
+ $this->pageopen[$this->page] = false;
+ if ($tocpage) {
+ $this->tocpage = false;
+ }
+ }
+
+ /**
+ * Starts a new page to the document. The page must be closed using the endPage() function.
+ * The origin of the coordinate system is at the top-left corner and increasing ordinates go downwards.
+ * @param $orientation (string) page orientation. Possible values are (case insensitive):P or PORTRAIT (default) L or LANDSCAPE
+ * @param $format (mixed) The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat().
+ * @param $tocpage (boolean) if true the page is designated to contain the Table-Of-Content.
+ * @since 4.2.010 (2008-11-14)
+ * @see AddPage(), endPage(), addTOCPage(), endTOCPage(), getPageSizeFromFormat(), setPageFormat()
+ * @public
+ */
+ public function startPage($orientation='', $format='', $tocpage=false) {
+ if ($tocpage) {
+ $this->tocpage = true;
+ }
+ // move page numbers of documents to be attached
+ if ($this->tocpage) {
+ // move reference to unexistent pages (used for page attachments)
+ // adjust outlines
+ $tmpoutlines = $this->outlines;
+ foreach ($tmpoutlines as $key => $outline) {
+ if ($outline['p'] > $this->numpages) {
+ $this->outlines[$key]['p'] = ($outline['p'] + 1);
+ }
+ }
+ // adjust dests
+ $tmpdests = $this->dests;
+ foreach ($tmpdests as $key => $dest) {
+ if ($dest['p'] > $this->numpages) {
+ $this->dests[$key]['p'] = ($dest['p'] + 1);
+ }
+ }
+ // adjust links
+ $tmplinks = $this->links;
+ foreach ($tmplinks as $key => $link) {
+ if ($link[0] > $this->numpages) {
+ $this->links[$key][0] = ($link[0] + 1);
+ }
}
}
-
- /**
- * Set header data.
- * @param string $ln header image logo
- * @param string $lw header image logo width in mm
- * @param string $ht string to print as title on document header
- * @param string $hs string to print on document header
- * @access public
- */
- public function setHeaderData($ln='', $lw=0, $ht='', $hs='') {
- $this->header_logo = $ln;
- $this->header_logo_width = $lw;
- $this->header_title = $ht;
- $this->header_string = $hs;
+ if ($this->numpages > $this->page) {
+ // this page has been already added
+ $this->setPage($this->page + 1);
+ $this->SetY($this->tMargin);
+ return;
}
-
- /**
- * Returns header data:
- * $ret['logo'] = logo image $ret['logo_width'] = width of the image logo in user units $ret['title'] = header title $ret['string'] = header description string
- * @return array()
- * @access public
- * @since 4.0.012 (2008-07-24)
- */
- public function getHeaderData() {
- $ret = array();
- $ret['logo'] = $this->header_logo;
- $ret['logo_width'] = $this->header_logo_width;
- $ret['title'] = $this->header_title;
- $ret['string'] = $this->header_string;
- return $ret;
+ // start a new page
+ if ($this->state == 0) {
+ $this->Open();
}
-
- /**
- * Set header margin.
- * (minimum distance between header and top page margin)
- * @param int $hm distance in user units
- * @access public
- */
- public function setHeaderMargin($hm=10) {
- $this->header_margin = $hm;
+ ++$this->numpages;
+ $this->swapMargins($this->booklet);
+ // save current graphic settings
+ $gvars = $this->getGraphicVars();
+ // start new page
+ $this->_beginpage($orientation, $format);
+ // mark page as open
+ $this->pageopen[$this->page] = true;
+ // restore graphic settings
+ $this->setGraphicVars($gvars);
+ // mark this point
+ $this->setPageMark();
+ // print page header
+ $this->setHeader();
+ // restore graphic settings
+ $this->setGraphicVars($gvars);
+ // mark this point
+ $this->setPageMark();
+ // print table header (if any)
+ $this->setTableHeader();
+ // set mark for empty page check
+ $this->emptypagemrk[$this->page]= $this->pagelen[$this->page];
+ }
+
+ /**
+ * Set start-writing mark on current page stream used to put borders and fills.
+ * Borders and fills are always created after content and inserted on the position marked by this method.
+ * This function must be called after calling Image() function for a background image.
+ * Background images must be always inserted before calling Multicell() or WriteHTMLCell() or WriteHTML() functions.
+ * @public
+ * @since 4.0.016 (2008-07-30)
+ */
+ public function setPageMark() {
+ $this->intmrk[$this->page] = $this->pagelen[$this->page];
+ $this->bordermrk[$this->page] = $this->intmrk[$this->page];
+ $this->setContentMark();
+ }
+
+ /**
+ * Set start-writing mark on selected page.
+ * Borders and fills are always created after content and inserted on the position marked by this method.
+ * @param $page (int) page number (default is the current page)
+ * @protected
+ * @since 4.6.021 (2009-07-20)
+ */
+ protected function setContentMark($page=0) {
+ if ($page <= 0) {
+ $page = $this->page;
}
-
- /**
- * Returns header margin in user units.
- * @return float
- * @since 4.0.012 (2008-07-24)
- * @access public
- */
- public function getHeaderMargin() {
- return $this->header_margin;
+ if (isset($this->footerlen[$page])) {
+ $this->cntmrk[$page] = $this->pagelen[$page] - $this->footerlen[$page];
+ } else {
+ $this->cntmrk[$page] = $this->pagelen[$page];
}
-
- /**
- * Set footer margin.
- * (minimum distance between footer and bottom page margin)
- * @param int $fm distance in user units
- * @access public
- */
- public function setFooterMargin($fm=10) {
- $this->footer_margin = $fm;
- }
-
- /**
- * Returns footer margin in user units.
- * @return float
- * @since 4.0.012 (2008-07-24)
- * @access public
- */
- public function getFooterMargin() {
- return $this->footer_margin;
- }
- /**
- * Set a flag to print page header.
- * @param boolean $val set to true to print the page header (default), false otherwise.
- * @access public
- */
- public function setPrintHeader($val=true) {
- $this->print_header = $val;
- }
-
- /**
- * Set a flag to print page footer.
- * @param boolean $value set to true to print the page footer (default), false otherwise.
- * @access public
- */
- public function setPrintFooter($val=true) {
- $this->print_footer = $val;
- }
-
- /**
- * Return the right-bottom (or left-bottom for RTL) corner X coordinate of last inserted image
- * @return float
- * @access public
- */
- public function getImageRBX() {
- return $this->img_rb_x;
- }
-
- /**
- * Return the right-bottom (or left-bottom for RTL) corner Y coordinate of last inserted image
- * @return float
- * @access public
- */
- public function getImageRBY() {
- return $this->img_rb_y;
- }
-
- /**
- * This method is used to render the page header.
- * It is automatically called by AddPage() and could be overwritten in your own inherited class.
- * @access public
- */
- public function Header() {
- $ormargins = $this->getOriginalMargins();
+ }
+
+ /**
+ * Set header data.
+ * @param $ln (string) header image logo
+ * @param $lw (string) header image logo width in mm
+ * @param $ht (string) string to print as title on document header
+ * @param $hs (string) string to print on document header
+ * @public
+ */
+ public function setHeaderData($ln='', $lw=0, $ht='', $hs='') {
+ $this->header_logo = $ln;
+ $this->header_logo_width = $lw;
+ $this->header_title = $ht;
+ $this->header_string = $hs;
+ }
+
+ /**
+ * Returns header data:
+ * $ret['logo'] = logo image $ret['logo_width'] = width of the image logo in user units $ret['title'] = header title $ret['string'] = header description string
+ * @return array()
+ * @public
+ * @since 4.0.012 (2008-07-24)
+ */
+ public function getHeaderData() {
+ $ret = array();
+ $ret['logo'] = $this->header_logo;
+ $ret['logo_width'] = $this->header_logo_width;
+ $ret['title'] = $this->header_title;
+ $ret['string'] = $this->header_string;
+ return $ret;
+ }
+
+ /**
+ * Set header margin.
+ * (minimum distance between header and top page margin)
+ * @param $hm (int) distance in user units
+ * @public
+ */
+ public function setHeaderMargin($hm=10) {
+ $this->header_margin = $hm;
+ }
+
+ /**
+ * Returns header margin in user units.
+ * @return float
+ * @since 4.0.012 (2008-07-24)
+ * @public
+ */
+ public function getHeaderMargin() {
+ return $this->header_margin;
+ }
+
+ /**
+ * Set footer margin.
+ * (minimum distance between footer and bottom page margin)
+ * @param $fm (int) distance in user units
+ * @public
+ */
+ public function setFooterMargin($fm=10) {
+ $this->footer_margin = $fm;
+ }
+
+ /**
+ * Returns footer margin in user units.
+ * @return float
+ * @since 4.0.012 (2008-07-24)
+ * @public
+ */
+ public function getFooterMargin() {
+ return $this->footer_margin;
+ }
+ /**
+ * Set a flag to print page header.
+ * @param $val (boolean) set to true to print the page header (default), false otherwise.
+ * @public
+ */
+ public function setPrintHeader($val=true) {
+ $this->print_header = $val ? true : false;
+ }
+
+ /**
+ * Set a flag to print page footer.
+ * @param $val (boolean) set to true to print the page footer (default), false otherwise.
+ * @public
+ */
+ public function setPrintFooter($val=true) {
+ $this->print_footer = $val ? true : false;
+ }
+
+ /**
+ * Return the right-bottom (or left-bottom for RTL) corner X coordinate of last inserted image
+ * @return float
+ * @public
+ */
+ public function getImageRBX() {
+ return $this->img_rb_x;
+ }
+
+ /**
+ * Return the right-bottom (or left-bottom for RTL) corner Y coordinate of last inserted image
+ * @return float
+ * @public
+ */
+ public function getImageRBY() {
+ return $this->img_rb_y;
+ }
+
+ /**
+ * Reset the xobject template used by Header() method.
+ * @public
+ */
+ public function resetHeaderTemplate() {
+ $this->header_xobjid = -1;
+ }
+
+ /**
+ * Set a flag to automatically reset the xobject template used by Header() method at each page.
+ * @param $val (boolean) set to true to reset Header xobject template at each page, false otherwise.
+ * @public
+ */
+ public function setHeaderTemplateAutoreset($val=true) {
+ $this->header_xobj_autoreset = $val ? true : false;
+ }
+
+ /**
+ * This method is used to render the page header.
+ * It is automatically called by AddPage() and could be overwritten in your own inherited class.
+ * @public
+ */
+ public function Header() {
+ if ($this->header_xobjid < 0) {
+ // start a new XObject Template
+ $this->header_xobjid = $this->startTemplate($this->w, $this->tMargin);
$headerfont = $this->getHeaderFont();
$headerdata = $this->getHeaderData();
+ $this->y = $this->header_margin;
+ if ($this->rtl) {
+ $this->x = $this->w - $this->original_rMargin;
+ } else {
+ $this->x = $this->original_lMargin;
+ }
if (($headerdata['logo']) AND ($headerdata['logo'] != K_BLANK_IMAGE)) {
- $this->Image(K_PATH_IMAGES.$headerdata['logo'], $this->GetX(), $this->getHeaderMargin(), $headerdata['logo_width']);
+ $imgtype = $this->getImageFileType(K_PATH_IMAGES.$headerdata['logo']);
+ if (($imgtype == 'eps') OR ($imgtype == 'ai')) {
+ $this->ImageEps(K_PATH_IMAGES.$headerdata['logo'], '', '', $headerdata['logo_width']);
+ } elseif ($imgtype == 'svg') {
+ $this->ImageSVG(K_PATH_IMAGES.$headerdata['logo'], '', '', $headerdata['logo_width']);
+ } else {
+ $this->Image(K_PATH_IMAGES.$headerdata['logo'], '', '', $headerdata['logo_width']);
+ }
$imgy = $this->getImageRBY();
} else {
- $imgy = $this->GetY();
+ $imgy = $this->y;
}
- $cell_height = round(($this->getCellHeightRatio() * $headerfont[2]) / $this->getScaleFactor(), 2);
+ $cell_height = round(($this->cell_height_ratio * $headerfont[2]) / $this->k, 2);
// set starting margin for text data cell
if ($this->getRTL()) {
- $header_x = $ormargins['right'] + ($headerdata['logo_width'] * 1.1);
+ $header_x = $this->original_rMargin + ($headerdata['logo_width'] * 1.1);
} else {
- $header_x = $ormargins['left'] + ($headerdata['logo_width'] * 1.1);
+ $header_x = $this->original_lMargin + ($headerdata['logo_width'] * 1.1);
}
+ $cw = $this->w - $this->original_lMargin - $this->original_rMargin - ($headerdata['logo_width'] * 1.1);
$this->SetTextColor(0, 0, 0);
// header title
$this->SetFont($headerfont[0], 'B', $headerfont[2] + 1);
- $this->SetX($header_x);
- $this->Cell(0, $cell_height, $headerdata['title'], 0, 1, '', 0, '', 0);
+ $this->SetX($header_x);
+ $this->Cell($cw, $cell_height, $headerdata['title'], 0, 1, '', 0, '', 0);
// header string
$this->SetFont($headerfont[0], $headerfont[1], $headerfont[2]);
$this->SetX($header_x);
- $this->MultiCell(0, $cell_height, $headerdata['string'], 0, '', 0, 1, '', '', true, 0, false);
+ $this->MultiCell($cw, $cell_height, $headerdata['string'], 0, '', 0, 1, '', '', true, 0, false, true, 0, 'T', false);
// print an ending header line
- $this->SetLineStyle(array('width' => 0.85 / $this->getScaleFactor(), 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)));
- $this->SetY((2.835 / $this->getScaleFactor()) + max($imgy, $this->GetY()));
- if ($this->getRTL()) {
- $this->SetX($ormargins['right']);
+ $this->SetLineStyle(array('width' => 0.85 / $this->k, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)));
+ $this->SetY((2.835 / $this->k) + max($imgy, $this->y));
+ if ($this->rtl) {
+ $this->SetX($this->original_rMargin);
} else {
- $this->SetX($ormargins['left']);
+ $this->SetX($this->original_lMargin);
}
- $this->Cell(0, 0, '', 'T', 0, 'C');
+ $this->Cell(($this->w - $this->original_lMargin - $this->original_rMargin), 0, '', 'T', 0, 'C');
+ $this->endTemplate();
}
-
- /**
- * This method is used to render the page footer.
- * It is automatically called by AddPage() and could be overwritten in your own inherited class.
- * @access public
- */
- public function Footer() {
- $cur_y = $this->GetY();
- $ormargins = $this->getOriginalMargins();
- $this->SetTextColor(0, 0, 0);
- //set style for cell border
- $line_width = 0.85 / $this->getScaleFactor();
- $this->SetLineStyle(array('width' => $line_width, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)));
- //print document barcode
- $barcode = $this->getBarcode();
- if (!empty($barcode)) {
- $this->Ln($line_width);
- $barcode_width = round(($this->getPageWidth() - $ormargins['left'] - $ormargins['right'])/3);
- $this->write1DBarcode($barcode, 'C128B', $this->GetX(), $cur_y + $line_width, $barcode_width, (($this->getFooterMargin() / 3) - $line_width), 0.3, '', '');
- }
- if (empty($this->pagegroups)) {
- $pagenumtxt = $this->l['w_page'].' '.$this->getAliasNumPage().' / '.$this->getAliasNbPages();
+ // print header template
+ $x = 0;
+ $dx = 0;
+ if ($this->booklet AND (($this->page % 2) == 0)) {
+ // adjust margins for booklet mode
+ $dx = ($this->original_lMargin - $this->original_rMargin);
+ }
+ if ($this->rtl) {
+ $x = $this->w + $dx;
+ } else {
+ $x = 0 + $dx;
+ }
+ $this->printTemplate($this->header_xobjid, $x, 0, 0, 0, '', '', false);
+ if ($this->header_xobj_autoreset) {
+ // reset header xobject template at each page
+ $this->header_xobjid = -1;
+ }
+ }
+
+ /**
+ * This method is used to render the page footer.
+ * It is automatically called by AddPage() and could be overwritten in your own inherited class.
+ * @public
+ */
+ public function Footer() {
+ $cur_y = $this->y;
+ $this->SetTextColor(0, 0, 0);
+ //set style for cell border
+ $line_width = 0.85 / $this->k;
+ $this->SetLineStyle(array('width' => $line_width, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)));
+ //print document barcode
+ $barcode = $this->getBarcode();
+ if (!empty($barcode)) {
+ $this->Ln($line_width);
+ $barcode_width = round(($this->w - $this->original_lMargin - $this->original_rMargin) / 3);
+ $style = array(
+ 'position' => $this->rtl?'R':'L',
+ 'align' => $this->rtl?'R':'L',
+ 'stretch' => false,
+ 'fitwidth' => true,
+ 'cellfitalign' => '',
+ 'border' => false,
+ 'padding' => 0,
+ 'fgcolor' => array(0,0,0),
+ 'bgcolor' => false,
+ 'text' => false
+ );
+ $this->write1DBarcode($barcode, 'C128', '', $cur_y + $line_width, '', (($this->footer_margin / 3) - $line_width), 0.3, $style, '');
+ }
+ if (empty($this->pagegroups)) {
+ $pagenumtxt = $this->l['w_page'].' '.$this->getAliasNumPage().' / '.$this->getAliasNbPages();
+ } else {
+ $pagenumtxt = $this->l['w_page'].' '.$this->getPageNumGroupAlias().' / '.$this->getPageGroupAlias();
+ }
+ $this->SetY($cur_y);
+ //Print page number
+ if ($this->getRTL()) {
+ $this->SetX($this->original_rMargin);
+ $this->Cell(0, 0, $pagenumtxt, 'T', 0, 'L');
+ } else {
+ $this->SetX($this->original_lMargin);
+ $this->Cell(0, 0, $this->getAliasRightShift().$pagenumtxt, 'T', 0, 'R');
+ }
+ }
+
+ /**
+ * This method is used to render the page header.
+ * @protected
+ * @since 4.0.012 (2008-07-24)
+ */
+ protected function setHeader() {
+ if (!$this->print_header) {
+ return;
+ }
+ $this->InHeader = true;
+ $this->setGraphicVars($this->default_graphic_vars);
+ $temp_thead = $this->thead;
+ $temp_theadMargins = $this->theadMargins;
+ $lasth = $this->lasth;
+ $this->_out('q');
+ $this->rMargin = $this->original_rMargin;
+ $this->lMargin = $this->original_lMargin;
+ $this->SetCellPadding(0);
+ //set current position
+ if ($this->rtl) {
+ $this->SetXY($this->original_rMargin, $this->header_margin);
+ } else {
+ $this->SetXY($this->original_lMargin, $this->header_margin);
+ }
+ $this->SetFont($this->header_font[0], $this->header_font[1], $this->header_font[2]);
+ $this->Header();
+ //restore position
+ if ($this->rtl) {
+ $this->SetXY($this->original_rMargin, $this->tMargin);
+ } else {
+ $this->SetXY($this->original_lMargin, $this->tMargin);
+ }
+ $this->_out('Q');
+ $this->lasth = $lasth;
+ $this->thead = $temp_thead;
+ $this->theadMargins = $temp_theadMargins;
+ $this->newline = false;
+ $this->InHeader = false;
+ }
+
+ /**
+ * This method is used to render the page footer.
+ * @protected
+ * @since 4.0.012 (2008-07-24)
+ */
+ protected function setFooter() {
+ //Page footer
+ $this->InFooter = true;
+ // save current graphic settings
+ $gvars = $this->getGraphicVars();
+ // mark this point
+ $this->footerpos[$this->page] = $this->pagelen[$this->page];
+ $this->_out("\n");
+ if ($this->print_footer) {
+ $this->setGraphicVars($this->default_graphic_vars);
+ $this->current_column = 0;
+ $this->num_columns = 1;
+ $temp_thead = $this->thead;
+ $temp_theadMargins = $this->theadMargins;
+ $lasth = $this->lasth;
+ $this->_out('q');
+ $this->rMargin = $this->original_rMargin;
+ $this->lMargin = $this->original_lMargin;
+ $this->SetCellPadding(0);
+ //set current position
+ $footer_y = $this->h - $this->footer_margin;
+ if ($this->rtl) {
+ $this->SetXY($this->original_rMargin, $footer_y);
} else {
- $pagenumtxt = $this->l['w_page'].' '.$this->getPageNumGroupAlias().' / '.$this->getPageGroupAlias();
- }
- $this->SetY($cur_y);
- //Print page number
- if ($this->getRTL()) {
- $this->SetX($ormargins['right']);
- $this->Cell(0, 0, $pagenumtxt, 'T', 0, 'L');
+ $this->SetXY($this->original_lMargin, $footer_y);
+ }
+ $this->SetFont($this->footer_font[0], $this->footer_font[1], $this->footer_font[2]);
+ $this->Footer();
+ //restore position
+ if ($this->rtl) {
+ $this->SetXY($this->original_rMargin, $this->tMargin);
} else {
- $this->SetX($ormargins['left']);
- $this->Cell(0, 0, $pagenumtxt, 'T', 0, 'R');
+ $this->SetXY($this->original_lMargin, $this->tMargin);
}
+ $this->_out('Q');
+ $this->lasth = $lasth;
+ $this->thead = $temp_thead;
+ $this->theadMargins = $temp_theadMargins;
}
-
- /**
- * This method is used to render the page header.
- * @access protected
- * @since 4.0.012 (2008-07-24)
- */
- protected function setHeader() {
- if ($this->print_header) {
- $lasth = $this->lasth;
- $this->_out('q');
- $this->rMargin = $this->original_rMargin;
- $this->lMargin = $this->original_lMargin;
- $this->cMargin = 0;
- //set current position
- if ($this->rtl) {
- $this->SetXY($this->original_rMargin, $this->header_margin);
- } else {
- $this->SetXY($this->original_lMargin, $this->header_margin);
- }
- $this->SetFont($this->header_font[0], $this->header_font[1], $this->header_font[2]);
- $this->Header();
- //restore position
- if ($this->rtl) {
- $this->SetXY($this->original_rMargin, $this->tMargin);
- } else {
- $this->SetXY($this->original_lMargin, $this->tMargin);
- }
- $this->_out('Q');
- $this->lasth = $lasth;
- }
- }
-
- /**
- * This method is used to render the page footer.
- * @access protected
- * @since 4.0.012 (2008-07-24)
- */
- protected function setFooter() {
- //Page footer
- // save current graphic settings
- $gvars = $this->getGraphicVars();
- // mark this point
- $this->footerpos[$this->page] = $this->pagelen[$this->page];
- $this->_out("\n");
- if ($this->print_footer) {
- $lasth = $this->lasth;
- $this->_out('q');
- $this->rMargin = $this->original_rMargin;
- $this->lMargin = $this->original_lMargin;
- $this->cMargin = 0;
- //set current position
- $footer_y = $this->h - $this->footer_margin;
- if ($this->rtl) {
- $this->SetXY($this->original_rMargin, $footer_y);
- } else {
- $this->SetXY($this->original_lMargin, $footer_y);
- }
- $this->SetFont($this->footer_font[0], $this->footer_font[1], $this->footer_font[2]);
- $this->Footer();
- //restore position
- if ($this->rtl) {
- $this->SetXY($this->original_rMargin, $this->tMargin);
- } else {
- $this->SetXY($this->original_lMargin, $this->tMargin);
- }
- $this->_out('Q');
- $this->lasth = $lasth;
- }
- // restore graphic settings
- $this->setGraphicVars($gvars);
- // calculate footer lenght
- $this->footerlen[$this->page] = $this->pagelen[$this->page] - $this->footerpos[$this->page] + 1;
- }
+ // restore graphic settings
+ $this->setGraphicVars($gvars);
+ $this->current_column = $gvars['current_column'];
+ $this->num_columns = $gvars['num_columns'];
+ // calculate footer length
+ $this->footerlen[$this->page] = $this->pagelen[$this->page] - $this->footerpos[$this->page] + 1;
+ $this->InFooter = false;
+ }
- /**
- * This method is used to render the table header on new page (if any).
- * @access protected
- * @since 4.5.030 (2009-03-25)
- */
- protected function setTableHeader() {
- if (isset($this->theadMargins['top'])) {
- // restore the original top-margin
- $this->tMargin = $this->theadMargins['top'];
- $this->pagedim[$this->page]['tm'] = $this->tMargin;
- $this->y = $this->tMargin;
- }
- if (!$this->empty_string($this->thead)) {
- // set margins
- $prev_lMargin = $this->lMargin;
- $prev_rMargin = $this->rMargin;
- $this->lMargin = $this->pagedim[$this->page]['olm'];
- $this->rMargin = $this->pagedim[$this->page]['orm'];
- $this->cMargin = $this->theadMargins['cmargin'];
- // print table header
- $this->writeHTML($this->thead, false, false, false, false, '');
- // set new top margin to skip the table headers
- if (!isset($this->theadMargins['top'])) {
- $this->theadMargins['top'] = $this->tMargin;
- }
- $this->tMargin = $this->y;
- $this->pagedim[$this->page]['tm'] = $this->tMargin;
- $this->lasth = 0;
- $this->lMargin = $prev_lMargin;
- $this->rMargin = $prev_rMargin;
- }
- }
-
- /**
- * Returns the current page number.
- * @return int page number
- * @access public
- * @since 1.0
- * @see AliasNbPages(), getAliasNbPages()
- */
- public function PageNo() {
- return $this->page;
- }
+ /**
+ * Check if we are on the page body (excluding page header and footer).
+ * @return true if we are not in page header nor in page footer, false otherwise.
+ * @protected
+ * @since 5.9.091 (2011-06-15)
+ */
+ protected function inPageBody() {
+ return (($this->InHeader === false) AND ($this->InFooter === false));
+ }
- /**
- * Defines a new spot color.
- * It can be expressed in RGB components or gray scale.
- * The method can be called before the first page is created and the value is retained from page to page.
- * @param int $c Cyan color for CMYK. Value between 0 and 255
- * @param int $m Magenta color for CMYK. Value between 0 and 255
- * @param int $y Yellow color for CMYK. Value between 0 and 255
- * @param int $k Key (Black) color for CMYK. Value between 0 and 255
- * @access public
- * @since 4.0.024 (2008-09-12)
- * @see SetDrawSpotColor(), SetFillSpotColor(), SetTextSpotColor()
- */
- public function AddSpotColor($name, $c, $m, $y, $k) {
- if (!isset($this->spot_colors[$name])) {
- $i = 1 + count($this->spot_colors);
- $this->spot_colors[$name] = array('i' => $i, 'c' => $c, 'm' => $m, 'y' => $y, 'k' => $k);
- }
+ /**
+ * This method is used to render the table header on new page (if any).
+ * @protected
+ * @since 4.5.030 (2009-03-25)
+ */
+ protected function setTableHeader() {
+ if ($this->num_columns > 1) {
+ // multi column mode
+ return;
}
-
- /**
- * Defines the color used for all drawing operations (lines, rectangles and cell borders).
- * It can be expressed in RGB components or gray scale.
- * The method can be called before the first page is created and the value is retained from page to page.
- * @param array $color array of colors
- * @access public
- * @since 3.1.000 (2008-06-11)
- * @see SetDrawColor()
- */
- public function SetDrawColorArray($color) {
- if (isset($color)) {
- $color = array_values($color);
- $r = isset($color[0]) ? $color[0] : -1;
- $g = isset($color[1]) ? $color[1] : -1;
- $b = isset($color[2]) ? $color[2] : -1;
- $k = isset($color[3]) ? $color[3] : -1;
- if ($r >= 0) {
- $this->SetDrawColor($r, $g, $b, $k);
- }
- }
+ if (isset($this->theadMargins['top'])) {
+ // restore the original top-margin
+ $this->tMargin = $this->theadMargins['top'];
+ $this->pagedim[$this->page]['tm'] = $this->tMargin;
+ $this->y = $this->tMargin;
}
-
- /**
- * Defines the color used for all drawing operations (lines, rectangles and cell borders). It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page.
- * @param int $col1 Gray level for single color, or Red color for RGB, or Cyan color for CMYK. Value between 0 and 255
- * @param int $col2 Green color for RGB, or Magenta color for CMYK. Value between 0 and 255
- * @param int $col3 Blue color for RGB, or Yellow color for CMYK. Value between 0 and 255
- * @param int $col4 Key (Black) color for CMYK. Value between 0 and 255
- * @access public
- * @since 1.3
- * @see SetDrawColorArray(), SetFillColor(), SetTextColor(), Line(), Rect(), Cell(), MultiCell()
- */
- public function SetDrawColor($col1=0, $col2=-1, $col3=-1, $col4=-1) {
- // set default values
- if (!is_numeric($col1)) {
- $col1 = 0;
- }
- if (!is_numeric($col2)) {
- $col2 = -1;
- }
- if (!is_numeric($col3)) {
- $col3 = -1;
- }
- if (!is_numeric($col4)) {
- $col4 = -1;
- }
- //Set color for all stroking operations
- if (($col2 == -1) AND ($col3 == -1) AND ($col4 == -1)) {
- // Grey scale
- $this->DrawColor = sprintf('%.3F G', $col1/255);
- } elseif ($col4 == -1) {
- // RGB
- $this->DrawColor = sprintf('%.3F %.3F %.3F RG', $col1/255, $col2/255, $col3/255);
+ if (!$this->empty_string($this->thead) AND (!$this->inthead)) {
+ // set margins
+ $prev_lMargin = $this->lMargin;
+ $prev_rMargin = $this->rMargin;
+ $prev_cell_padding = $this->cell_padding;
+ $this->lMargin = $this->theadMargins['lmargin'] + ($this->pagedim[$this->page]['olm'] - $this->pagedim[$this->theadMargins['page']]['olm']);
+ $this->rMargin = $this->theadMargins['rmargin'] + ($this->pagedim[$this->page]['orm'] - $this->pagedim[$this->theadMargins['page']]['orm']);
+ $this->cell_padding = $this->theadMargins['cell_padding'];
+ if ($this->rtl) {
+ $this->x = $this->w - $this->rMargin;
} else {
+ $this->x = $this->lMargin;
+ }
+ // account for special "cell" mode
+ if ($this->theadMargins['cell']) {
+ if ($this->rtl) {
+ $this->x -= $this->cell_padding['R'];
+ } else {
+ $this->x += $this->cell_padding['L'];
+ }
+ }
+ // print table header
+ $this->writeHTML($this->thead, false, false, false, false, '');
+ // set new top margin to skip the table headers
+ if (!isset($this->theadMargins['top'])) {
+ $this->theadMargins['top'] = $this->tMargin;
+ }
+ // store end of header position
+ if (!isset($this->columns[0]['th'])) {
+ $this->columns[0]['th'] = array();
+ }
+ $this->columns[0]['th']['\''.$this->page.'\''] = $this->y;
+ $this->tMargin = $this->y;
+ $this->pagedim[$this->page]['tm'] = $this->tMargin;
+ $this->lasth = 0;
+ $this->lMargin = $prev_lMargin;
+ $this->rMargin = $prev_rMargin;
+ $this->cell_padding = $prev_cell_padding;
+ }
+ }
+
+ /**
+ * Returns the current page number.
+ * @return int page number
+ * @public
+ * @since 1.0
+ * @see getAliasNbPages()
+ */
+ public function PageNo() {
+ return $this->page;
+ }
+
+ /**
+ * Defines a new spot color.
+ * It can be expressed in RGB components or gray scale.
+ * The method can be called before the first page is created and the value is retained from page to page.
+ * @param $name (string) Full name of the spot color.
+ * @param $c (float) Cyan color for CMYK. Value between 0 and 100.
+ * @param $m (float) Magenta color for CMYK. Value between 0 and 100.
+ * @param $y (float) Yellow color for CMYK. Value between 0 and 100.
+ * @param $k (float) Key (Black) color for CMYK. Value between 0 and 100.
+ * @public
+ * @since 4.0.024 (2008-09-12)
+ * @see SetDrawSpotColor(), SetFillSpotColor(), SetTextSpotColor()
+ */
+ public function AddSpotColor($name, $c, $m, $y, $k) {
+ if (!isset($this->spot_colors[$name])) {
+ $i = (1 + count($this->spot_colors));
+ $this->spot_colors[$name] = array('i' => $i, 'c' => $c, 'm' => $m, 'y' => $y, 'k' => $k);
+ }
+ }
+
+ /**
+ * Return the Spot color array.
+ * @param $name (string) Name of the spot color.
+ * @return (array) Spot color array or false if not defined.
+ * @public
+ * @since 5.9.125 (2011-10-03)
+ */
+ public function getSpotColor($name) {
+ if (isset($this->spot_colors[$name])) {
+ return $this->spot_colors[$name];
+ }
+ $color = preg_replace('/[\s]*/', '', $name); // remove extra spaces
+ $color = strtolower($color);
+ if (isset($this->spotcolor[$color])) {
+ $this->AddSpotColor($this->spotcolor[$color][4], $this->spotcolor[$color][0], $this->spotcolor[$color][1], $this->spotcolor[$color][2], $this->spotcolor[$color][3]);
+ return $this->spot_colors[$name];
+ }
+ return false;
+ }
+
+ /**
+ * Set the spot color for the specified type ('draw', 'fill', 'text').
+ * @param $type (string) Type of object affected by this color: ('draw', 'fill', 'text').
+ * @param $name (string) Name of the spot color.
+ * @param $tint (float) Intensity of the color (from 0 to 100 ; 100 = full intensity by default).
+ * @return (string) PDF color command.
+ * @public
+ * @since 5.9.125 (2011-10-03)
+ */
+ public function setSpotColor($type, $name, $tint=100) {
+ $spotcolor = $this->getSpotColor($name);
+ if ($spotcolor === false) {
+ $this->Error('Undefined spot color: '.$name.', you must add it on the spotcolors.php file.');
+ }
+ $tint = (max(0, min(100, $tint)) / 100);
+ $intcolor = array('C' => $spotcolor['c'], 'M' => $spotcolor['m'], 'Y' => $spotcolor['y'], 'K' => $spotcolor['k'], 'name' => $spotcolor['i']);
+ $pdfcolor = sprintf('/CS%d ', $this->spot_colors[$name]['i']);
+ switch ($type) {
+ case 'draw': {
+ $pdfcolor .= sprintf('CS %.3F SCN', $tint);
+ $this->DrawColor = $pdfcolor;
+ $this->strokecolor = $intcolor;
+ break;
+ }
+ case 'fill': {
+ $pdfcolor .= sprintf('cs %.3F scn', $tint);
+ $this->FillColor = $pdfcolor;
+ $this->bgcolor = $intcolor;
+ break;
+ }
+ case 'text': {
+ $pdfcolor .= sprintf('cs %.3F scn', $tint);
+ $this->TextColor = $pdfcolor;
+ $this->fgcolor = $intcolor;
+ break;
+ }
+ }
+ $this->ColorFlag = ($this->FillColor != $this->TextColor);
+ if ($this->page > 0) {
+ $this->_out($pdfcolor);
+ }
+ if ($this->inxobj) {
+ // we are inside an XObject template
+ $this->xobjects[$this->xobjid]['spot_colors'][$name] = $this->spot_colors[$name];
+ }
+ return $pdfcolor;
+ }
+
+ /**
+ * Defines the spot color used for all drawing operations (lines, rectangles and cell borders).
+ * @param $name (string) Name of the spot color.
+ * @param $tint (float) Intensity of the color (from 0 to 100 ; 100 = full intensity by default).
+ * @public
+ * @since 4.0.024 (2008-09-12)
+ * @see AddSpotColor(), SetFillSpotColor(), SetTextSpotColor()
+ */
+ public function SetDrawSpotColor($name, $tint=100) {
+ $this->setSpotColor('draw', $name, $tint);
+ }
+
+ /**
+ * Defines the spot color used for all filling operations (filled rectangles and cell backgrounds).
+ * @param $name (string) Name of the spot color.
+ * @param $tint (float) Intensity of the color (from 0 to 100 ; 100 = full intensity by default).
+ * @public
+ * @since 4.0.024 (2008-09-12)
+ * @see AddSpotColor(), SetDrawSpotColor(), SetTextSpotColor()
+ */
+ public function SetFillSpotColor($name, $tint=100) {
+ $this->setSpotColor('fill', $name, $tint);
+ }
+
+ /**
+ * Defines the spot color used for text.
+ * @param $name (string) Name of the spot color.
+ * @param $tint (int) Intensity of the color (from 0 to 100 ; 100 = full intensity by default).
+ * @public
+ * @since 4.0.024 (2008-09-12)
+ * @see AddSpotColor(), SetDrawSpotColor(), SetFillSpotColor()
+ */
+ public function SetTextSpotColor($name, $tint=100) {
+ $this->setSpotColor('text', $name, $tint);
+ }
+
+ /**
+ * Set the color array for the specified type ('draw', 'fill', 'text').
+ * It can be expressed in RGB, CMYK or GRAY SCALE components.
+ * The method can be called before the first page is created and the value is retained from page to page.
+ * @param $type (string) Type of object affected by this color: ('draw', 'fill', 'text').
+ * @param $color (array) Array of colors (1, 3 or 4 values).
+ * @param $ret (boolean) If true do not send the PDF command.
+ * @return (string) The PDF command or empty string.
+ * @public
+ * @since 3.1.000 (2008-06-11)
+ */
+ public function setColorArray($type, $color, $ret=false) {
+ if (is_array($color)) {
+ $color = array_values($color);
+ // component: grey, RGB red or CMYK cyan
+ $r = isset($color[0]) ? $color[0] : -1;
+ // component: RGB green or CMYK magenta
+ $g = isset($color[1]) ? $color[1] : -1;
+ // component: RGB blue or CMYK yellow
+ $b = isset($color[2]) ? $color[2] : -1;
+ // component: CMYK black
+ $k = isset($color[3]) ? $color[3] : -1;
+ // spot color name
+ $name = isset($color[4]) ? $color[4] : '';
+ if ($r >= 0) {
+ return $this->setColor($type, $r, $g, $b, $k, $ret, $name);
+ }
+ }
+ return '';
+ }
+
+ /**
+ * Defines the color used for all drawing operations (lines, rectangles and cell borders).
+ * It can be expressed in RGB, CMYK or GRAY SCALE components.
+ * The method can be called before the first page is created and the value is retained from page to page.
+ * @param $color (array) Array of colors (1, 3 or 4 values).
+ * @param $ret (boolean) If true do not send the PDF command.
+ * @return string the PDF command
+ * @public
+ * @since 3.1.000 (2008-06-11)
+ * @see SetDrawColor()
+ */
+ public function SetDrawColorArray($color, $ret=false) {
+ return $this->setColorArray('draw', $color, $ret);
+ }
+
+ /**
+ * Defines the color used for all filling operations (filled rectangles and cell backgrounds).
+ * It can be expressed in RGB, CMYK or GRAY SCALE components.
+ * The method can be called before the first page is created and the value is retained from page to page.
+ * @param $color (array) Array of colors (1, 3 or 4 values).
+ * @param $ret (boolean) If true do not send the PDF command.
+ * @public
+ * @since 3.1.000 (2008-6-11)
+ * @see SetFillColor()
+ */
+ public function SetFillColorArray($color, $ret=false) {
+ return $this->setColorArray('fill', $color, $ret);
+ }
+
+ /**
+ * Defines the color used for text. It can be expressed in RGB components or gray scale.
+ * The method can be called before the first page is created and the value is retained from page to page.
+ * @param $color (array) Array of colors (1, 3 or 4 values).
+ * @param $ret (boolean) If true do not send the PDF command.
+ * @public
+ * @since 3.1.000 (2008-6-11)
+ * @see SetFillColor()
+ */
+ public function SetTextColorArray($color, $ret=false) {
+ return $this->setColorArray('text', $color, $ret);
+ }
+
+ /**
+ * Defines the color used by the specified type ('draw', 'fill', 'text').
+ * @param $type (string) Type of object affected by this color: ('draw', 'fill', 'text').
+ * @param $col1 (float) GRAY level for single color, or Red color for RGB (0-255), or CYAN color for CMYK (0-100).
+ * @param $col2 (float) GREEN color for RGB (0-255), or MAGENTA color for CMYK (0-100).
+ * @param $col3 (float) BLUE color for RGB (0-255), or YELLOW color for CMYK (0-100).
+ * @param $col4 (float) KEY (BLACK) color for CMYK (0-100).
+ * @param $ret (boolean) If true do not send the command.
+ * @param $name (string) spot color name (if any)
+ * @return (string) The PDF command or empty string.
+ * @public
+ * @since 5.9.125 (2011-10-03)
+ */
+ public function setColor($type, $col1=0, $col2=-1, $col3=-1, $col4=-1, $ret=false, $name='') {
+ // set default values
+ if (!is_numeric($col1)) {
+ $col1 = 0;
+ }
+ if (!is_numeric($col2)) {
+ $col2 = -1;
+ }
+ if (!is_numeric($col3)) {
+ $col3 = -1;
+ }
+ if (!is_numeric($col4)) {
+ $col4 = -1;
+ }
+ // set color by case
+ $suffix = '';
+ if (($col2 == -1) AND ($col3 == -1) AND ($col4 == -1)) {
+ // Grey scale
+ $col1 = max(0, min(255, $col1));
+ $intcolor = array('G' => $col1);
+ $pdfcolor = sprintf('%.3F ', ($col1 / 255));
+ $suffix = 'g';
+ } elseif ($col4 == -1) {
+ // RGB
+ $col1 = max(0, min(255, $col1));
+ $col2 = max(0, min(255, $col2));
+ $col3 = max(0, min(255, $col3));
+ $intcolor = array('R' => $col1, 'G' => $col2, 'B' => $col3);
+ $pdfcolor = sprintf('%.3F %.3F %.3F ', ($col1 / 255), ($col2 / 255), ($col3 / 255));
+ $suffix = 'rg';
+ } else {
+ $col1 = max(0, min(100, $col1));
+ $col2 = max(0, min(100, $col2));
+ $col3 = max(0, min(100, $col3));
+ $col4 = max(0, min(100, $col4));
+ if (empty($name)) {
// CMYK
- $this->DrawColor = sprintf('%.3F %.3F %.3F %.3F K', $col1/100, $col2/100, $col3/100, $col4/100);
- }
- if ($this->page > 0) {
- $this->_out($this->DrawColor);
- }
- }
-
- /**
- * Defines the spot color used for all drawing operations (lines, rectangles and cell borders).
- * @param string $name name of the spot color
- * @param int $tint the intensity of the color (from 0 to 100 ; 100 = full intensity by default).
- * @access public
- * @since 4.0.024 (2008-09-12)
- * @see AddSpotColor(), SetFillSpotColor(), SetTextSpotColor()
- */
- public function SetDrawSpotColor($name, $tint=100) {
- if (!isset($this->spot_colors[$name])) {
- $this->Error('Undefined spot color: '.$name);
- }
- $this->DrawColor = sprintf('/CS%d CS %.3F SCN', $this->spot_colors[$name]['i'], $tint/100);
- if ($this->page > 0) {
- $this->_out($this->DrawColor);
- }
- }
-
- /**
- * Defines the color used for all filling operations (filled rectangles and cell backgrounds).
- * It can be expressed in RGB components or gray scale.
- * The method can be called before the first page is created and the value is retained from page to page.
- * @param array $color array of colors
- * @access public
- * @since 3.1.000 (2008-6-11)
- * @see SetFillColor()
- */
- public function SetFillColorArray($color) {
- if (isset($color)) {
- $color = array_values($color);
- $r = isset($color[0]) ? $color[0] : -1;
- $g = isset($color[1]) ? $color[1] : -1;
- $b = isset($color[2]) ? $color[2] : -1;
- $k = isset($color[3]) ? $color[3] : -1;
- if ($r >= 0) {
- $this->SetFillColor($r, $g, $b, $k);
- }
- }
- }
-
- /**
- * Defines the color used for all filling operations (filled rectangles and cell backgrounds). It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page.
- * @param int $col1 Gray level for single color, or Red color for RGB, or Cyan color for CMYK. Value between 0 and 255
- * @param int $col2 Green color for RGB, or Magenta color for CMYK. Value between 0 and 255
- * @param int $col3 Blue color for RGB, or Yellow color for CMYK. Value between 0 and 255
- * @param int $col4 Key (Black) color for CMYK. Value between 0 and 255
- * @access public
- * @since 1.3
- * @see SetFillColorArray(), SetDrawColor(), SetTextColor(), Rect(), Cell(), MultiCell()
- */
- public function SetFillColor($col1=0, $col2=-1, $col3=-1, $col4=-1) {
- // set default values
- if (!is_numeric($col1)) {
- $col1 = 0;
- }
- if (!is_numeric($col2)) {
- $col2 = -1;
- }
- if (!is_numeric($col3)) {
- $col3 = -1;
- }
- if (!is_numeric($col4)) {
- $col4 = -1;
- }
- //Set color for all filling operations
- if (($col2 == -1) AND ($col3 == -1) AND ($col4 == -1)) {
- // Grey scale
- $this->FillColor = sprintf('%.3F g', $col1/255);
- $this->bgcolor = array('G' => $col1);
- } elseif ($col4 == -1) {
- // RGB
- $this->FillColor = sprintf('%.3F %.3F %.3F rg', $col1/255, $col2/255, $col3/255);
- $this->bgcolor = array('R' => $col1, 'G' => $col2, 'B' => $col3);
+ $intcolor = array('C' => $col1, 'M' => $col2, 'Y' => $col3, 'K' => $col4);
+ $pdfcolor = sprintf('%.3F %.3F %.3F %.3F ', ($col1 / 100), ($col2 / 100), ($col3 / 100), ($col4 / 100));
+ $suffix = 'k';
} else {
- // CMYK
- $this->FillColor = sprintf('%.3F %.3F %.3F %.3F k', $col1/100, $col2/100, $col3/100, $col4/100);
- $this->bgcolor = array('C' => $col1, 'M' => $col2, 'Y' => $col3, 'K' => $col4);
- }
- $this->ColorFlag = ($this->FillColor != $this->TextColor);
- if ($this->page > 0) {
- $this->_out($this->FillColor);
+ // SPOT COLOR
+ $intcolor = array('C' => $col1, 'M' => $col2, 'Y' => $col3, 'K' => $col4, 'name' => $name);
+ $this->AddSpotColor($name, $col1, $col2, $col3, $col4);
+ $pdfcolor = $this->setSpotColor($type, $name, 100);
}
}
-
- /**
- * Defines the spot color used for all filling operations (filled rectangles and cell backgrounds).
- * @param string $name name of the spot color
- * @param int $tint the intensity of the color (from 0 to 100 ; 100 = full intensity by default).
- * @access public
- * @since 4.0.024 (2008-09-12)
- * @see AddSpotColor(), SetDrawSpotColor(), SetTextSpotColor()
- */
- public function SetFillSpotColor($name, $tint=100) {
- if (!isset($this->spot_colors[$name])) {
- $this->Error('Undefined spot color: '.$name);
+ switch ($type) {
+ case 'draw': {
+ $pdfcolor .= strtoupper($suffix);
+ $this->DrawColor = $pdfcolor;
+ $this->strokecolor = $intcolor;
+ break;
}
- $this->FillColor = sprintf('/CS%d cs %.3F scn', $this->spot_colors[$name]['i'], $tint/100);
- $this->ColorFlag = ($this->FillColor != $this->TextColor);
- if ($this->page > 0) {
- $this->_out($this->FillColor);
+ case 'fill': {
+ $pdfcolor .= $suffix;
+ $this->FillColor = $pdfcolor;
+ $this->bgcolor = $intcolor;
+ break;
+ }
+ case 'text': {
+ $pdfcolor .= $suffix;
+ $this->TextColor = $pdfcolor;
+ $this->fgcolor = $intcolor;
+ break;
}
}
-
- /**
- * Defines the color used for text. It can be expressed in RGB components or gray scale.
- * The method can be called before the first page is created and the value is retained from page to page.
- * @param array $color array of colors
- * @access public
- * @since 3.1.000 (2008-6-11)
- * @see SetFillColor()
- */
- public function SetTextColorArray($color) {
- if (isset($color)) {
- $color = array_values($color);
- $r = isset($color[0]) ? $color[0] : -1;
- $g = isset($color[1]) ? $color[1] : -1;
- $b = isset($color[2]) ? $color[2] : -1;
- $k = isset($color[3]) ? $color[3] : -1;
- if ($r >= 0) {
- $this->SetTextColor($r, $g, $b, $k);
- }
+ $this->ColorFlag = ($this->FillColor != $this->TextColor);
+ if (($type != 'text') AND ($this->page > 0)) {
+ if (!$ret) {
+ $this->_out($pdfcolor);
}
+ return $pdfcolor;
}
+ return '';
+ }
- /**
- * Defines the color used for text. It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page.
- * @param int $col1 Gray level for single color, or Red color for RGB, or Cyan color for CMYK. Value between 0 and 255
- * @param int $col2 Green color for RGB, or Magenta color for CMYK. Value between 0 and 255
- * @param int $col3 Blue color for RGB, or Yellow color for CMYK. Value between 0 and 255
- * @param int $col4 Key (Black) color for CMYK. Value between 0 and 255
- * @access public
- * @since 1.3
- * @see SetTextColorArray(), SetDrawColor(), SetFillColor(), Text(), Cell(), MultiCell()
- */
- public function SetTextColor($col1=0, $col2=-1, $col3=-1, $col4=-1) {
- // set default values
- if (!is_numeric($col1)) {
- $col1 = 0;
- }
- if (!is_numeric($col2)) {
- $col2 = -1;
- }
- if (!is_numeric($col3)) {
- $col3 = -1;
- }
- if (!is_numeric($col4)) {
- $col4 = -1;
- }
- //Set color for text
- if (($col2 == -1) AND ($col3 == -1) AND ($col4 == -1)) {
- // Grey scale
- $this->TextColor = sprintf('%.3F g', $col1/255);
- $this->fgcolor = array('G' => $col1);
- } elseif ($col4 == -1) {
- // RGB
- $this->TextColor = sprintf('%.3F %.3F %.3F rg', $col1/255, $col2/255, $col3/255);
- $this->fgcolor = array('R' => $col1, 'G' => $col2, 'B' => $col3);
- } else {
- // CMYK
- $this->TextColor = sprintf('%.3F %.3F %.3F %.3F k', $col1/100, $col2/100, $col3/100, $col4/100);
- $this->fgcolor = array('C' => $col1, 'M' => $col2, 'Y' => $col3, 'K' => $col4);
- }
- $this->ColorFlag = ($this->FillColor != $this->TextColor);
- }
-
- /**
- * Defines the spot color used for text.
- * @param string $name name of the spot color
- * @param int $tint the intensity of the color (from 0 to 100 ; 100 = full intensity by default).
- * @access public
- * @since 4.0.024 (2008-09-12)
- * @see AddSpotColor(), SetDrawSpotColor(), SetFillSpotColor()
- */
- public function SetTextSpotColor($name, $tint=100) {
- if (!isset($this->spot_colors[$name])) {
- $this->Error('Undefined spot color: '.$name);
- }
- $this->TextColor = sprintf('/CS%d cs %.3F scn', $this->spot_colors[$name]['i'], $tint/100);
- $this->ColorFlag = ($this->FillColor != $this->TextColor);
- if ($this->page > 0) {
- $this->_out($this->TextColor);
- }
- }
+ /**
+ * Defines the color used for all drawing operations (lines, rectangles and cell borders). It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page.
+ * @param $col1 (float) GRAY level for single color, or Red color for RGB (0-255), or CYAN color for CMYK (0-100).
+ * @param $col2 (float) GREEN color for RGB (0-255), or MAGENTA color for CMYK (0-100).
+ * @param $col3 (float) BLUE color for RGB (0-255), or YELLOW color for CMYK (0-100).
+ * @param $col4 (float) KEY (BLACK) color for CMYK (0-100).
+ * @param $ret (boolean) If true do not send the command.
+ * @param $name (string) spot color name (if any)
+ * @return string the PDF command
+ * @public
+ * @since 1.3
+ * @see SetDrawColorArray(), SetFillColor(), SetTextColor(), Line(), Rect(), Cell(), MultiCell()
+ */
+ public function SetDrawColor($col1=0, $col2=-1, $col3=-1, $col4=-1, $ret=false, $name='') {
+ return $this->setColor('draw', $col1, $col2, $col3, $col4, $ret, $name);
+ }
- /**
- * Returns the length of a string in user unit. A font must be selected.
- * @param string $s The string whose length is to be computed
- * @param string $fontname Family font. It can be either a name defined by AddFont() or one of the standard families. It is also possible to pass an empty string, in that case, the current family is retained.
- * @param string $fontstyle Font style. Possible values are (case insensitive):empty string: regular B: bold I: italic U: underline D: line trough or any combination. The default value is regular.
- * @param float $fontsize Font size in points. The default value is the current size.
- * @return int string length
- * @author Nicola Asuni
- * @access public
- * @since 1.2
- */
- public function GetStringWidth($s, $fontname='', $fontstyle='', $fontsize=0) {
- return $this->GetArrStringWidth($this->utf8Bidi($this->UTF8StringToArray($s), $s, $this->tmprtl), $fontname, $fontstyle, $fontsize);
+ /**
+ * Defines the color used for all filling operations (filled rectangles and cell backgrounds). It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page.
+ * @param $col1 (float) GRAY level for single color, or Red color for RGB (0-255), or CYAN color for CMYK (0-100).
+ * @param $col2 (float) GREEN color for RGB (0-255), or MAGENTA color for CMYK (0-100).
+ * @param $col3 (float) BLUE color for RGB (0-255), or YELLOW color for CMYK (0-100).
+ * @param $col4 (float) KEY (BLACK) color for CMYK (0-100).
+ * @param $ret (boolean) If true do not send the command.
+ * @param $name (string) Spot color name (if any).
+ * @return (string) The PDF command.
+ * @public
+ * @since 1.3
+ * @see SetFillColorArray(), SetDrawColor(), SetTextColor(), Rect(), Cell(), MultiCell()
+ */
+ public function SetFillColor($col1=0, $col2=-1, $col3=-1, $col4=-1, $ret=false, $name='') {
+ return $this->setColor('fill', $col1, $col2, $col3, $col4, $ret, $name);
+ }
+
+ /**
+ * Defines the color used for text. It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page.
+ * @param $col1 (float) GRAY level for single color, or Red color for RGB (0-255), or CYAN color for CMYK (0-100).
+ * @param $col2 (float) GREEN color for RGB (0-255), or MAGENTA color for CMYK (0-100).
+ * @param $col3 (float) BLUE color for RGB (0-255), or YELLOW color for CMYK (0-100).
+ * @param $col4 (float) KEY (BLACK) color for CMYK (0-100).
+ * @param $ret (boolean) If true do not send the command.
+ * @param $name (string) Spot color name (if any).
+ * @return (string) Empty string.
+ * @public
+ * @since 1.3
+ * @see SetTextColorArray(), SetDrawColor(), SetFillColor(), Text(), Cell(), MultiCell()
+ */
+ public function SetTextColor($col1=0, $col2=-1, $col3=-1, $col4=-1, $ret=false, $name='') {
+ return $this->setColor('text', $col1, $col2, $col3, $col4, $ret, $name);
+ }
+
+ /**
+ * Returns the length of a string in user unit. A font must be selected.
+ * @param $s (string) The string whose length is to be computed
+ * @param $fontname (string) Family font. It can be either a name defined by AddFont() or one of the standard families. It is also possible to pass an empty string, in that case, the current family is retained.
+ * @param $fontstyle (string) Font style. Possible values are (case insensitive):empty string: regular B: bold I: italic U: underline D: line-trough O: overline or any combination. The default value is regular.
+ * @param $fontsize (float) Font size in points. The default value is the current size.
+ * @param $getarray (boolean) if true returns an array of characters widths, if false returns the total length.
+ * @return mixed int total string length or array of characted widths
+ * @author Nicola Asuni
+ * @public
+ * @since 1.2
+ */
+ public function GetStringWidth($s, $fontname='', $fontstyle='', $fontsize=0, $getarray=false) {
+ return $this->GetArrStringWidth($this->utf8Bidi($this->UTF8StringToArray($s), $s, $this->tmprtl), $fontname, $fontstyle, $fontsize, $getarray);
+ }
+
+ /**
+ * Returns the string length of an array of chars in user unit or an array of characters widths. A font must be selected.
+ * @param $sa (string) The array of chars whose total length is to be computed
+ * @param $fontname (string) Family font. It can be either a name defined by AddFont() or one of the standard families. It is also possible to pass an empty string, in that case, the current family is retained.
+ * @param $fontstyle (string) Font style. Possible values are (case insensitive):empty string: regular B: bold I: italic U: underline D: line trough O: overline or any combination. The default value is regular.
+ * @param $fontsize (float) Font size in points. The default value is the current size.
+ * @param $getarray (boolean) if true returns an array of characters widths, if false returns the total length.
+ * @return mixed int total string length or array of characted widths
+ * @author Nicola Asuni
+ * @public
+ * @since 2.4.000 (2008-03-06)
+ */
+ public function GetArrStringWidth($sa, $fontname='', $fontstyle='', $fontsize=0, $getarray=false) {
+ // store current values
+ if (!$this->empty_string($fontname)) {
+ $prev_FontFamily = $this->FontFamily;
+ $prev_FontStyle = $this->FontStyle;
+ $prev_FontSizePt = $this->FontSizePt;
+ $this->SetFont($fontname, $fontstyle, $fontsize, '', 'default', false);
}
-
- /**
- * Returns the string length of an array of chars in user unit. A font must be selected.
- * @param string $sa The array of chars whose total length is to be computed
- * @param string $fontname Family font. It can be either a name defined by AddFont() or one of the standard families. It is also possible to pass an empty string, in that case, the current family is retained.
- * @param string $fontstyle Font style. Possible values are (case insensitive):empty string: regular B: bold I: italic U: underline D: line trough or any combination. The default value is regular.
- * @param float $fontsize Font size in points. The default value is the current size.
- * @return int string length
- * @author Nicola Asuni
- * @access public
- * @since 2.4.000 (2008-03-06)
- */
- public function GetArrStringWidth($sa, $fontname='', $fontstyle='', $fontsize=0) {
- // store current values
- if (!$this->empty_string($fontname)) {
- $prev_FontFamily = $this->FontFamily;
- $prev_FontStyle = $this->FontStyle;
- $prev_FontSizePt = $this->FontSizePt;
- $this->SetFont($fontname, $fontstyle, $fontsize);
- }
- $w = 0;
- foreach ($sa as $char) {
- $w += $this->GetCharWidth($char);
- }
- // restore previous values
- if (!$this->empty_string($fontname)) {
- $this->SetFont($prev_FontFamily, $prev_FontStyle, $prev_FontSizePt);
- }
- return $w;
+ // convert UTF-8 array to Latin1 if required
+ $sa = $this->UTF8ArrToLatin1($sa);
+ $w = 0; // total width
+ $wa = array(); // array of characters widths
+ foreach ($sa as $ck => $char) {
+ // character width
+ $cw = $this->GetCharWidth($char, isset($sa[($ck + 1)]));
+ $wa[] = $cw;
+ $w += $cw;
}
-
- /**
- * Returns the length of the char in user unit for the current font.
- * @param int $char The char code whose length is to be returned
- * @return int char width
- * @author Nicola Asuni
- * @access public
- * @since 2.4.000 (2008-03-06)
- */
- public function GetCharWidth($char) {
- if ($char == 173) {
- // SHY character will not be printed
- return (0);
+ // restore previous values
+ if (!$this->empty_string($fontname)) {
+ $this->SetFont($prev_FontFamily, $prev_FontStyle, $prev_FontSizePt, '', 'default', false);
+ }
+ if ($getarray) {
+ return $wa;
+ }
+ return $w;
+ }
+
+ /**
+ * Returns the length of the char in user unit for the current font considering current stretching and spacing (tracking/kerning).
+ * @param $char (int) The char code whose length is to be returned
+ * @param $notlast (boolean) set to false for the latest character on string, true otherwise (default)
+ * @return float char width
+ * @author Nicola Asuni
+ * @public
+ * @since 2.4.000 (2008-03-06)
+ */
+ public function GetCharWidth($char, $notlast=true) {
+ // get raw width
+ $chw = $this->getRawCharWidth($char);
+ if (($this->font_spacing != 0) AND $notlast) {
+ // increase/decrease font spacing
+ $chw += $this->font_spacing;
+ }
+ if ($this->font_stretching != 100) {
+ // fixed stretching mode
+ $chw *= ($this->font_stretching / 100);
+ }
+ return $chw;
+ }
+
+ /**
+ * Returns the length of the char in user unit for the current font.
+ * @param $char (int) The char code whose length is to be returned
+ * @return float char width
+ * @author Nicola Asuni
+ * @public
+ * @since 5.9.000 (2010-09-28)
+ */
+ public function getRawCharWidth($char) {
+ if ($char == 173) {
+ // SHY character will not be printed
+ return (0);
+ }
+ if (isset($this->CurrentFont['cw'][$char])) {
+ $w = $this->CurrentFont['cw'][$char];
+ } elseif (isset($this->CurrentFont['dw'])) {
+ // default width
+ $w = $this->CurrentFont['dw'];
+ } elseif (isset($this->CurrentFont['cw'][32])) {
+ // default width
+ $w = $this->CurrentFont['cw'][32];
+ } else {
+ $w = 600;
+ }
+ return ($w * $this->FontSize / 1000);
+ }
+
+ /**
+ * Returns the numbero of characters in a string.
+ * @param $s (string) The input string.
+ * @return int number of characters
+ * @public
+ * @since 2.0.0001 (2008-01-07)
+ */
+ public function GetNumChars($s) {
+ if ($this->isUnicodeFont()) {
+ return count($this->UTF8StringToArray($s));
+ }
+ return strlen($s);
+ }
+
+ /**
+ * Fill the list of available fonts ($this->fontlist).
+ * @protected
+ * @since 4.0.013 (2008-07-28)
+ */
+ protected function getFontsList() {
+ $fontsdir = opendir($this->_getfontpath());
+ while (($file = readdir($fontsdir)) !== false) {
+ if (substr($file, -4) == '.php') {
+ array_push($this->fontlist, strtolower(basename($file, '.php')));
}
- $cw = &$this->CurrentFont['cw'];
- if (isset($cw[$char])) {
- $w = $cw[$char];
- } elseif (isset($this->CurrentFont['dw'])) {
- // default width
- $w = $this->CurrentFont['dw'];
- } elseif (isset($cw[32])) {
- // default width
- $dw = $cw[32];
+ }
+ closedir($fontsdir);
+ }
+
+ /**
+ * Imports a TrueType, Type1, core, or CID0 font and makes it available.
+ * It is necessary to generate a font definition file first (read /fonts/utils/README.TXT).
+ * The definition file (and the font file itself when embedding) must be present either in the current directory or in the one indicated by K_PATH_FONTS if the constant is defined. If it could not be found, the error "Could not include font definition file" is generated.
+ * @param $family (string) Font family. The name can be chosen arbitrarily. If it is a standard family name, it will override the corresponding font.
+ * @param $style (string) Font style. Possible values are (case insensitive):empty string: regular (default) B: bold I: italic BI or IB: bold italic
+ * @param $fontfile (string) The font definition file. By default, the name is built from the family and style, in lower case with no spaces.
+ * @return array containing the font data, or false in case of error.
+ * @param $subset (mixed) if true embedd only a subset of the font (stores only the information related to the used characters); if false embedd full font; if 'default' uses the default value set using setFontSubsetting(). This option is valid only for TrueTypeUnicode fonts. If you want to enable users to change the document, set this parameter to false. If you subset the font, the person who receives your PDF would need to have your same font in order to make changes to your PDF. The file size of the PDF would also be smaller because you are embedding only part of a font.
+ * @public
+ * @since 1.5
+ * @see SetFont(), setFontSubsetting()
+ */
+ public function AddFont($family, $style='', $fontfile='', $subset='default') {
+ if ($subset === 'default') {
+ $subset = $this->font_subsetting;
+ }
+ if ($this->pdfa_mode) {
+ $subset = false;
+ }
+ if ($this->empty_string($family)) {
+ if (!$this->empty_string($this->FontFamily)) {
+ $family = $this->FontFamily;
} else {
- $w = 600;
+ $this->Error('Empty font family');
}
- return ($w * $this->FontSize / 1000);
}
-
- /**
- * Returns the numbero of characters in a string.
- * @param string $s The input string.
- * @return int number of characters
- * @access public
- * @since 2.0.0001 (2008-01-07)
- */
- public function GetNumChars($s) {
- if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) {
- return count($this->UTF8StringToArray($s));
- }
- return strlen($s);
+ // move embedded styles on $style
+ if (substr($family, -1) == 'I') {
+ $style .= 'I';
+ $family = substr($family, 0, -1);
}
-
- /**
- * Fill the list of available fonts ($this->fontlist).
- * @access protected
- * @since 4.0.013 (2008-07-28)
- */
- protected function getFontsList() {
- $fontsdir = opendir($this->_getfontpath());
- while (($file = readdir($fontsdir)) !== false) {
- if (substr($file, -4) == '.php') {
- array_push($this->fontlist, strtolower(basename($file, '.php')));
- }
- }
- closedir($fontsdir);
+ if (substr($family, -1) == 'B') {
+ $style .= 'B';
+ $family = substr($family, 0, -1);
}
-
- /**
- * Imports a TrueType, Type1, core, or CID0 font and makes it available.
- * It is necessary to generate a font definition file first (read /fonts/utils/README.TXT).
- * The definition file (and the font file itself when embedding) must be present either in the current directory or in the one indicated by K_PATH_FONTS if the constant is defined. If it could not be found, the error "Could not include font definition file" is generated.
- * @param string $family Font family. The name can be chosen arbitrarily. If it is a standard family name, it will override the corresponding font.
- * @param string $style Font style. Possible values are (case insensitive):empty string: regular (default) B: bold I: italic BI or IB: bold italic
- * @param string $fontfile The font definition file. By default, the name is built from the family and style, in lower case with no spaces.
- * @return array containing the font data, or false in case of error.
- * @access public
- * @since 1.5
- * @see SetFont()
- */
- public function AddFont($family, $style='', $fontfile='') {
- if ($this->empty_string($family)) {
- if (!$this->empty_string($this->FontFamily)) {
- $family = $this->FontFamily;
- } else {
- $this->Error('Empty font family');
- }
- }
- $family = strtolower($family);
- if ((!$this->isunicode) AND ($family == 'arial')) {
- $family = 'helvetica';
- }
- if (($family == 'symbol') OR ($family == 'zapfdingbats')) {
- $style = '';
- }
- $tempstyle = strtoupper($style);
+ // normalize family name
+ $family = strtolower($family);
+ if ((!$this->isunicode) AND ($family == 'arial')) {
+ $family = 'helvetica';
+ }
+ if (($family == 'symbol') OR ($family == 'zapfdingbats')) {
$style = '';
- // underline
- if (strpos($tempstyle, 'U') !== false) {
- $this->underline = true;
- } else {
- $this->underline = false;
- }
- // line through (deleted)
- if (strpos($tempstyle, 'D') !== false) {
- $this->linethrough = true;
- } else {
- $this->linethrough = false;
- }
- // bold
- if (strpos($tempstyle, 'B') !== false) {
- $style .= 'B';
- }
- // oblique
- if (strpos($tempstyle, 'I') !== false) {
- $style .= 'I';
- }
- $bistyle = $style;
- $fontkey = $family.$style;
- $font_style = $style.($this->underline ? 'U' : '').($this->linethrough ? 'D' : '');
- $fontdata = array('fontkey' => $fontkey, 'family' => $family, 'style' => $font_style);
- // check if the font has been already added
- if ($this->getFontBuffer($fontkey) !== false) {
- return $fontdata;
- }
- if (isset($type)) {
- unset($type);
- }
- if (isset($cw)) {
- unset($cw);
- }
- // get specified font directory (if any)
- $fontdir = '';
- if (!$this->empty_string($fontfile)) {
- $fontdir = dirname($fontfile);
- if ($this->empty_string($fontdir) OR ($fontdir == '.')) {
- $fontdir = '';
- } else {
- $fontdir .= '/';
- }
- }
- // search and include font file
- if ($this->empty_string($fontfile) OR (!file_exists($fontfile))) {
- // build a standard filenames for specified font
- $fontfile1 = str_replace(' ', '', $family).strtolower($style).'.php';
- $fontfile2 = str_replace(' ', '', $family).'.php';
- // search files on various directories
- if (file_exists($fontdir.$fontfile1)) {
- $fontfile = $fontdir.$fontfile1;
- } elseif (file_exists($this->_getfontpath().$fontfile1)) {
- $fontfile = $this->_getfontpath().$fontfile1;
- } elseif (file_exists($fontfile1)) {
- $fontfile = $fontfile1;
- } elseif (file_exists($fontdir.$fontfile2)) {
- $fontfile = $fontdir.$fontfile2;
- } elseif (file_exists($this->_getfontpath().$fontfile2)) {
- $fontfile = $this->_getfontpath().$fontfile2;
- } else {
- $fontfile = $fontfile2;
- }
- }
- // include font file
- if (file_exists($fontfile)) {
- include($fontfile);
- } else {
- $this->Error('Could not include font definition file: '.$family.'');
- }
- // check font parameters
- if ((!isset($type)) OR (!isset($cw))) {
- $this->Error('The font definition file has a bad format: '.$fontfile.'');
- }
- // SET default parameters
- if (!isset($file) OR $this->empty_string($file)) {
- $file = '';
- }
- if (!isset($enc) OR $this->empty_string($enc)) {
- $enc = '';
- }
- if (!isset($cidinfo) OR $this->empty_string($cidinfo)) {
- $cidinfo = array('Registry'=>'Adobe','Ordering'=>'Identity','Supplement'=>0);
- $cidinfo['uni2cid'] = array();
- }
- if (!isset($ctg) OR $this->empty_string($ctg)) {
- $ctg = '';
- }
- if (!isset($desc) OR $this->empty_string($desc)) {
- $desc = array();
- }
- if (!isset($up) OR $this->empty_string($up)) {
- $up = -100;
- }
- if (!isset($ut) OR $this->empty_string($ut)) {
- $ut = 50;
- }
- if (!isset($cw) OR $this->empty_string($cw)) {
- $cw = array();
- }
- if (!isset($dw) OR $this->empty_string($dw)) {
- // set default width
- if (isset($desc['MissingWidth']) AND ($desc['MissingWidth'] > 0)) {
- $dw = $desc['MissingWidth'];
- } elseif (isset($cw[32])) {
- $dw = $cw[32];
- } else {
- $dw = 600;
- }
- }
- ++$this->numfonts;
- if ($type == 'cidfont0') {
- // register CID font (all styles at once)
- $styles = array('' => '', 'B' => ',Bold', 'I' => ',Italic', 'BI' => ',BoldItalic');
- $sname = $name.$styles[$bistyle];
- if ((strpos($bistyle, 'B') !== false) AND (isset($desc['StemV'])) AND ($desc['StemV'] == 70)) {
- $desc['StemV'] = 120;
- }
- } elseif ($type == 'core') {
- $name = $this->CoreFonts[$fontkey];
- } elseif (($type == 'TrueType') OR ($type == 'Type1')) {
- // ...
- } elseif ($type == 'TrueTypeUnicode') {
- $enc = 'Identity-H';
- } else {
- $this->Error('Unknow font type: '.$type.'');
- }
- $this->setFontBuffer($fontkey, array('i' => $this->numfonts, 'type' => $type, 'name' => $name, 'desc' => $desc, 'up' => $up, 'ut' => $ut, 'cw' => $cw, 'dw' => $dw, 'enc' => $enc, 'cidinfo' => $cidinfo, 'file' => $file, 'ctg' => $ctg));
- if (isset($diff) AND (!empty($diff))) {
- //Search existing encodings
- $d = 0;
- $nb = count($this->diffs);
- for ($i=1; $i <= $nb; ++$i) {
- if ($this->diffs[$i] == $diff) {
- $d = $i;
- break;
- }
- }
- if ($d == 0) {
- $d = $nb + 1;
- $this->diffs[$d] = $diff;
- }
- $this->setFontSubBuffer($fontkey, 'diff', $d);
- }
- if (!$this->empty_string($file)) {
- if ((strcasecmp($type,'TrueType') == 0) OR (strcasecmp($type, 'TrueTypeUnicode') == 0)) {
- $this->FontFiles[$file] = array('length1' => $originalsize, 'fontdir' => $fontdir);
- } elseif ($type != 'core') {
- $this->FontFiles[$file] = array('length1' => $size1, 'length2' => $size2, 'fontdir' => $fontdir);
- }
+ }
+ if ($this->pdfa_mode AND (isset($this->CoreFonts[$family]))) {
+ // all fonts must be embedded
+ $family = 'pdfa'.$family;
+ }
+ $tempstyle = strtoupper($style);
+ $style = '';
+ // underline
+ if (strpos($tempstyle, 'U') !== false) {
+ $this->underline = true;
+ } else {
+ $this->underline = false;
+ }
+ // line-through (deleted)
+ if (strpos($tempstyle, 'D') !== false) {
+ $this->linethrough = true;
+ } else {
+ $this->linethrough = false;
+ }
+ // overline
+ if (strpos($tempstyle, 'O') !== false) {
+ $this->overline = true;
+ } else {
+ $this->overline = false;
+ }
+ // bold
+ if (strpos($tempstyle, 'B') !== false) {
+ $style .= 'B';
+ }
+ // oblique
+ if (strpos($tempstyle, 'I') !== false) {
+ $style .= 'I';
+ }
+ $bistyle = $style;
+ $fontkey = $family.$style;
+ $font_style = $style.($this->underline ? 'U' : '').($this->linethrough ? 'D' : '').($this->overline ? 'O' : '');
+ $fontdata = array('fontkey' => $fontkey, 'family' => $family, 'style' => $font_style);
+ // check if the font has been already added
+ $fb = $this->getFontBuffer($fontkey);
+ if ($fb !== false) {
+ if ($this->inxobj) {
+ // we are inside an XObject template
+ $this->xobjects[$this->xobjid]['fonts'][$fontkey] = $fb['i'];
}
return $fontdata;
}
-
- /**
- * Sets the font used to print character strings.
- * The font can be either a standard one or a font added via the AddFont() method. Standard fonts use Windows encoding cp1252 (Western Europe).
- * The method can be called before the first page is created and the font is retained from page to page.
- * If you just wish to change the current font size, it is simpler to call SetFontSize().
- * Note: for the standard fonts, the font metric files must be accessible. There are three possibilities for this:They are in the current directory (the one where the running script lies) They are in one of the directories defined by the include_path parameter They are in the directory defined by the K_PATH_FONTS constant
- * @param string $family Family font. It can be either a name defined by AddFont() or one of the standard Type1 families (case insensitive):times (Times-Roman) timesb (Times-Bold) timesi (Times-Italic) timesbi (Times-BoldItalic) helvetica (Helvetica) helveticab (Helvetica-Bold) helveticai (Helvetica-Oblique) helveticabi (Helvetica-BoldOblique) courier (Courier) courierb (Courier-Bold) courieri (Courier-Oblique) courierbi (Courier-BoldOblique) symbol (Symbol) zapfdingbats (ZapfDingbats) It is also possible to pass an empty string. In that case, the current family is retained.
- * @param string $style Font style. Possible values are (case insensitive):empty string: regular B: bold I: italic U: underline D: line trough or any combination. The default value is regular. Bold and italic styles do not apply to Symbol and ZapfDingbats basic fonts or other fonts when not defined.
- * @param float $size Font size in points. The default value is the current size. If no size has been specified since the beginning of the document, the value taken is 12
- * @param string $fontfile The font definition file. By default, the name is built from the family and style, in lower case with no spaces.
- * @access public
- * @since 1.0
- * @see AddFont(), SetFontSize()
- */
- public function SetFont($family, $style='', $size=0, $fontfile='') {
- //Select a font; size given in points
- if ($size == 0) {
- $size = $this->FontSizePt;
- }
- // try to add font (if not already added)
- $fontdata = $this->AddFont($family, $style, $fontfile);
- $this->FontFamily = $fontdata['family'];
- $this->FontStyle = $fontdata['style'];
- $this->CurrentFont = $this->getFontBuffer($fontdata['fontkey']);
- $this->SetFontSize($size);
+ if (isset($type)) {
+ unset($type);
}
-
- /**
- * Defines the size of the current font.
- * @param float $size The size (in points)
- * @access public
- * @since 1.0
- * @see SetFont()
- */
- public function SetFontSize($size) {
- //Set font size in points
- $this->FontSizePt = $size;
- $this->FontSize = $size / $this->k;
- if (isset($this->CurrentFont['desc']['Ascent']) AND ($this->CurrentFont['desc']['Ascent'] > 0)) {
- $this->FontAscent = $this->CurrentFont['desc']['Ascent'] * $this->FontSize / 1000;
+ if (isset($cw)) {
+ unset($cw);
+ }
+ // get specified font directory (if any)
+ $fontdir = false;
+ if (!$this->empty_string($fontfile)) {
+ $fontdir = dirname($fontfile);
+ if ($this->empty_string($fontdir) OR ($fontdir == '.')) {
+ $fontdir = '';
} else {
- $this->FontAscent = 0.8 * $this->FontSize;
+ $fontdir .= '/';
}
- if (isset($this->CurrentFont['desc']['Descent']) AND ($this->CurrentFont['desc']['Descent'] > 0)) {
- $this->FontDescent = - $this->CurrentFont['desc']['Descent'] * $this->FontSize / 1000;
+ }
+ $missing_style = false; // true when the font style variation is missing
+ // search and include font file
+ if ($this->empty_string($fontfile) OR (!file_exists($fontfile))) {
+ // build a standard filenames for specified font
+ $tmp_fontfile = str_replace(' ', '', $family).strtolower($style).'.php';
+ // search files on various directories
+ if (($fontdir !== false) AND file_exists($fontdir.$tmp_fontfile)) {
+ $fontfile = $fontdir.$tmp_fontfile;
+ } elseif (file_exists($this->_getfontpath().$tmp_fontfile)) {
+ $fontfile = $this->_getfontpath().$tmp_fontfile;
+ } elseif (file_exists($tmp_fontfile)) {
+ $fontfile = $tmp_fontfile;
+ } elseif (!$this->empty_string($style)) {
+ $missing_style = true;
+ // try to remove the style part
+ $tmp_fontfile = str_replace(' ', '', $family).'.php';
+ if (($fontdir !== false) AND file_exists($fontdir.$tmp_fontfile)) {
+ $fontfile = $fontdir.$tmp_fontfile;
+ } elseif (file_exists($this->_getfontpath().$tmp_fontfile)) {
+ $fontfile = $this->_getfontpath().$tmp_fontfile;
+ } else {
+ $fontfile = $tmp_fontfile;
+ }
+ }
+ }
+ // include font file
+ if (file_exists($fontfile)) {
+ include($fontfile);
+ } else {
+ $this->Error('Could not include font definition file: '.$family.'');
+ }
+ // check font parameters
+ if ((!isset($type)) OR (!isset($cw))) {
+ $this->Error('The font definition file has a bad format: '.$fontfile.'');
+ }
+ // SET default parameters
+ if (!isset($file) OR $this->empty_string($file)) {
+ $file = '';
+ }
+ if (!isset($enc) OR $this->empty_string($enc)) {
+ $enc = '';
+ }
+ if (!isset($cidinfo) OR $this->empty_string($cidinfo)) {
+ $cidinfo = array('Registry'=>'Adobe', 'Ordering'=>'Identity', 'Supplement'=>0);
+ $cidinfo['uni2cid'] = array();
+ }
+ if (!isset($ctg) OR $this->empty_string($ctg)) {
+ $ctg = '';
+ }
+ if (!isset($desc) OR $this->empty_string($desc)) {
+ $desc = array();
+ }
+ if (!isset($up) OR $this->empty_string($up)) {
+ $up = -100;
+ }
+ if (!isset($ut) OR $this->empty_string($ut)) {
+ $ut = 50;
+ }
+ if (!isset($cw) OR $this->empty_string($cw)) {
+ $cw = array();
+ }
+ if (!isset($dw) OR $this->empty_string($dw)) {
+ // set default width
+ if (isset($desc['MissingWidth']) AND ($desc['MissingWidth'] > 0)) {
+ $dw = $desc['MissingWidth'];
+ } elseif (isset($cw[32])) {
+ $dw = $cw[32];
} else {
- $this->FontDescent = 0.2 * $this->FontSize;
- }
- if (($this->page > 0) AND (isset($this->CurrentFont['i']))) {
- $this->_out(sprintf('BT /F%d %.2F Tf ET', $this->CurrentFont['i'], $this->FontSizePt));
+ $dw = 600;
}
}
+ ++$this->numfonts;
+ if ($type == 'core') {
+ $name = $this->CoreFonts[$fontkey];
+ $subset = false;
+ } elseif (($type == 'TrueType') OR ($type == 'Type1')) {
+ $subset = false;
+ } elseif ($type == 'TrueTypeUnicode') {
+ $enc = 'Identity-H';
+ } elseif ($type == 'cidfont0') {
+ if ($this->pdfa_mode) {
+ $this->Error('All fonts must be embedded in PDF/A mode!');
+ }
+ } else {
+ $this->Error('Unknow font type: '.$type.'');
+ }
+ // set name if unset
+ if (!isset($name) OR empty($name)) {
+ $name = $fontkey;
+ }
+ // create artificial font style variations if missing (only works with non-embedded fonts)
+ if (($type != 'core') AND $missing_style) {
+ // style variations
+ $styles = array('' => '', 'B' => ',Bold', 'I' => ',Italic', 'BI' => ',BoldItalic');
+ $name .= $styles[$bistyle];
+ // artificial bold
+ if (strpos($bistyle, 'B') !== false) {
+ if (isset($desc['StemV'])) {
+ // from normal to bold
+ $desc['StemV'] = round($desc['StemV'] * 1.75);
+ } else {
+ // bold
+ $desc['StemV'] = 123;
+ }
+ }
+ // artificial italic
+ if (strpos($bistyle, 'I') !== false) {
+ if (isset($desc['ItalicAngle'])) {
+ $desc['ItalicAngle'] -= 11;
+ } else {
+ $desc['ItalicAngle'] = -11;
+ }
+ if (isset($desc['Flags'])) {
+ $desc['Flags'] |= 64; //bit 7
+ } else {
+ $desc['Flags'] = 64;
+ }
+ }
+ }
+ // initialize subsetchars to contain default ASCII values (0-255)
+ $subsetchars = array_fill(0, 256, true);
+ $this->setFontBuffer($fontkey, array('fontkey' => $fontkey, 'i' => $this->numfonts, 'type' => $type, 'name' => $name, 'desc' => $desc, 'up' => $up, 'ut' => $ut, 'cw' => $cw, 'dw' => $dw, 'enc' => $enc, 'cidinfo' => $cidinfo, 'file' => $file, 'ctg' => $ctg, 'subset' => $subset, 'subsetchars' => $subsetchars));
+ if ($this->inxobj) {
+ // we are inside an XObject template
+ $this->xobjects[$this->xobjid]['fonts'][$fontkey] = $this->numfonts;
+ }
+ if (isset($diff) AND (!empty($diff))) {
+ //Search existing encodings
+ $d = 0;
+ $nb = count($this->diffs);
+ for ($i=1; $i <= $nb; ++$i) {
+ if ($this->diffs[$i] == $diff) {
+ $d = $i;
+ break;
+ }
+ }
+ if ($d == 0) {
+ $d = $nb + 1;
+ $this->diffs[$d] = $diff;
+ }
+ $this->setFontSubBuffer($fontkey, 'diff', $d);
+ }
+ if (!$this->empty_string($file)) {
+ if (!isset($this->FontFiles[$file])) {
+ if ((strcasecmp($type,'TrueType') == 0) OR (strcasecmp($type, 'TrueTypeUnicode') == 0)) {
+ $this->FontFiles[$file] = array('length1' => $originalsize, 'fontdir' => $fontdir, 'subset' => $subset, 'fontkeys' => array($fontkey));
+ } elseif ($type != 'core') {
+ $this->FontFiles[$file] = array('length1' => $size1, 'length2' => $size2, 'fontdir' => $fontdir, 'subset' => $subset, 'fontkeys' => array($fontkey));
+ }
+ } else {
+ // update fontkeys that are sharing this font file
+ $this->FontFiles[$file]['subset'] = ($this->FontFiles[$file]['subset'] AND $subset);
+ if (!in_array($fontkey, $this->FontFiles[$file]['fontkeys'])) {
+ $this->FontFiles[$file]['fontkeys'][] = $fontkey;
+ }
+ }
+ }
+ return $fontdata;
+ }
- /**
- * Defines the default monospaced font.
- * @param string $font Font name.
- * @access public
- * @since 4.5.025
- */
- public function SetDefaultMonospacedFont($font) {
- $this->default_monospaced_font = $font;
- }
-
- /**
- * Creates a new internal link and returns its identifier. An internal link is a clickable area which directs to another place within the document.
- * The identifier can then be passed to Cell(), Write(), Image() or Link(). The destination is defined with SetLink().
- * @access public
- * @since 1.5
- * @see Cell(), Write(), Image(), Link(), SetLink()
- */
- public function AddLink() {
- //Create a new internal link
- $n = count($this->links) + 1;
- $this->links[$n] = array(0, 0);
- return $n;
+ /**
+ * Sets the font used to print character strings.
+ * The font can be either a standard one or a font added via the AddFont() method. Standard fonts use Windows encoding cp1252 (Western Europe).
+ * The method can be called before the first page is created and the font is retained from page to page.
+ * If you just wish to change the current font size, it is simpler to call SetFontSize().
+ * Note: for the standard fonts, the font metric files must be accessible. There are three possibilities for this:They are in the current directory (the one where the running script lies) They are in one of the directories defined by the include_path parameter They are in the directory defined by the K_PATH_FONTS constant
+ * @param $family (string) Family font. It can be either a name defined by AddFont() or one of the standard Type1 families (case insensitive):times (Times-Roman) timesb (Times-Bold) timesi (Times-Italic) timesbi (Times-BoldItalic) helvetica (Helvetica) helveticab (Helvetica-Bold) helveticai (Helvetica-Oblique) helveticabi (Helvetica-BoldOblique) courier (Courier) courierb (Courier-Bold) courieri (Courier-Oblique) courierbi (Courier-BoldOblique) symbol (Symbol) zapfdingbats (ZapfDingbats) It is also possible to pass an empty string. In that case, the current family is retained.
+ * @param $style (string) Font style. Possible values are (case insensitive):empty string: regular B: bold I: italic U: underline D: line trough O: overline or any combination. The default value is regular. Bold and italic styles do not apply to Symbol and ZapfDingbats basic fonts or other fonts when not defined.
+ * @param $size (float) Font size in points. The default value is the current size. If no size has been specified since the beginning of the document, the value taken is 12
+ * @param $fontfile (string) The font definition file. By default, the name is built from the family and style, in lower case with no spaces.
+ * @param $subset (mixed) if true embedd only a subset of the font (stores only the information related to the used characters); if false embedd full font; if 'default' uses the default value set using setFontSubsetting(). This option is valid only for TrueTypeUnicode fonts. If you want to enable users to change the document, set this parameter to false. If you subset the font, the person who receives your PDF would need to have your same font in order to make changes to your PDF. The file size of the PDF would also be smaller because you are embedding only part of a font.
+ * @param $out (boolean) if true output the font size command, otherwise only set the font properties.
+ * @author Nicola Asuni
+ * @public
+ * @since 1.0
+ * @see AddFont(), SetFontSize()
+ */
+ public function SetFont($family, $style='', $size=0, $fontfile='', $subset='default', $out=true) {
+ //Select a font; size given in points
+ if ($size == 0) {
+ $size = $this->FontSizePt;
}
+ // try to add font (if not already added)
+ $fontdata = $this->AddFont($family, $style, $fontfile, $subset);
+ $this->FontFamily = $fontdata['family'];
+ $this->FontStyle = $fontdata['style'];
+ $this->CurrentFont = $this->getFontBuffer($fontdata['fontkey']);
+ $this->SetFontSize($size, $out);
+ }
- /**
- * Defines the page and position a link points to.
- * @param int $link The link identifier returned by AddLink()
- * @param float $y Ordinate of target position; -1 indicates the current position. The default value is 0 (top of page)
- * @param int $page Number of target page; -1 indicates the current page. This is the default value
- * @access public
- * @since 1.5
- * @see AddLink()
- */
- public function SetLink($link, $y=0, $page=-1) {
- if ($y == -1) {
- $y = $this->y;
- }
- if ($page == -1) {
- $page = $this->page;
- }
- $this->links[$link] = array($page, $y);
+ /**
+ * Defines the size of the current font.
+ * @param $size (float) The font size in points.
+ * @param $out (boolean) if true output the font size command, otherwise only set the font properties.
+ * @public
+ * @since 1.0
+ * @see SetFont()
+ */
+ public function SetFontSize($size, $out=true) {
+ // font size in points
+ $this->FontSizePt = $size;
+ // font size in user units
+ $this->FontSize = $size / $this->k;
+ // calculate some font metrics
+ if (isset($this->CurrentFont['desc']['FontBBox'])) {
+ $bbox = explode(' ', substr($this->CurrentFont['desc']['FontBBox'], 1, -1));
+ $font_height = ((intval($bbox[3]) - intval($bbox[1])) * $size / 1000);
+ } else {
+ $font_height = $size * 1.219;
}
+ if (isset($this->CurrentFont['desc']['Ascent']) AND ($this->CurrentFont['desc']['Ascent'] > 0)) {
+ $font_ascent = ($this->CurrentFont['desc']['Ascent'] * $size / 1000);
+ }
+ if (isset($this->CurrentFont['desc']['Descent']) AND ($this->CurrentFont['desc']['Descent'] <= 0)) {
+ $font_descent = (- $this->CurrentFont['desc']['Descent'] * $size / 1000);
+ }
+ if (!isset($font_ascent) AND !isset($font_descent)) {
+ // core font
+ $font_ascent = 0.76 * $font_height;
+ $font_descent = $font_height - $font_ascent;
+ } elseif (!isset($font_descent)) {
+ $font_descent = $font_height - $font_ascent;
+ } elseif (!isset($font_ascent)) {
+ $font_ascent = $font_height - $font_descent;
+ }
+ $this->FontAscent = ($font_ascent / $this->k);
+ $this->FontDescent = ($font_descent / $this->k);
+ if ($out AND ($this->page > 0) AND (isset($this->CurrentFont['i']))) {
+ $this->_out(sprintf('BT /F%d %.2F Tf ET', $this->CurrentFont['i'], $this->FontSizePt));
+ }
+ }
- /**
- * Puts a link on a rectangular area of the page.
- * Text or image links are generally put via Cell(), Write() or Image(), but this method can be useful for instance to define a clickable area inside an image.
- * @param float $x Abscissa of the upper-left corner of the rectangle
- * @param float $y Ordinate of the upper-left corner of the rectangle
- * @param float $w Width of the rectangle
- * @param float $h Height of the rectangle
- * @param mixed $link URL or identifier returned by AddLink()
- * @param int $spaces number of spaces on the text to link
- * @access public
- * @since 1.5
- * @see AddLink(), Annotation(), Cell(), Write(), Image()
- */
- public function Link($x, $y, $w, $h, $link, $spaces=0) {
- $this->Annotation($x, $y, $w, $h, $link, array('Subtype'=>'Link'), $spaces);
+ /**
+ * Return the font descent value
+ * @param $font (string) font name
+ * @param $style (string) font style
+ * @param $size (float) The size (in points)
+ * @return int font descent
+ * @public
+ * @author Nicola Asuni
+ * @since 4.9.003 (2010-03-30)
+ */
+ public function getFontDescent($font, $style='', $size=0) {
+ $fontdata = $this->AddFont($font, $style);
+ $fontinfo = $this->getFontBuffer($fontdata['fontkey']);
+ if (isset($fontinfo['desc']['Descent']) AND ($fontinfo['desc']['Descent'] <= 0)) {
+ $descent = (- $fontinfo['desc']['Descent'] * $size / 1000);
+ } else {
+ $descent = 1.219 * 0.24 * $size;
}
-
- /**
- * Puts a markup annotation on a rectangular area of the page.
- * !!!!THE ANNOTATION SUPPORT IS NOT YET FULLY IMPLEMENTED !!!!
- * @param float $x Abscissa of the upper-left corner of the rectangle
- * @param float $y Ordinate of the upper-left corner of the rectangle
- * @param float $w Width of the rectangle
- * @param float $h Height of the rectangle
- * @param string $text annotation text or alternate content
- * @param array $opt array of options (see section 8.4 of PDF reference 1.7).
- * @param int $spaces number of spaces on the text to link
- * @access public
- * @since 4.0.018 (2008-08-06)
- */
- public function Annotation($x='', $y='', $w, $h, $text, $opt=array('Subtype'=>'Text'), $spaces=0) {
- if ($x === '') {
- $x = $this->x;
- }
- if ($y === '') {
- $y = $this->y;
- }
- // recalculate coordinates to account for graphic transformations
- if (isset($this->transfmatrix)) {
- for ($i=$this->transfmatrix_key; $i > 0; --$i) {
- $maxid = count($this->transfmatrix[$i]) - 1;
- for ($j=$maxid; $j >= 0; --$j) {
- $ctm = $this->transfmatrix[$i][$j];
- if (isset($ctm['a'])) {
- $x = $x * $this->k;
- $y = ($this->h - $y) * $this->k;
- $w = $w * $this->k;
- $h = $h * $this->k;
- // top left
- $xt = $x;
- $yt = $y;
- $x1 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e'];
- $y1 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f'];
- // top right
- $xt = $x + $w;
- $yt = $y;
- $x2 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e'];
- $y2 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f'];
- // bottom left
- $xt = $x;
- $yt = $y - $h;
- $x3 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e'];
- $y3 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f'];
- // bottom right
- $xt = $x + $w;
- $yt = $y - $h;
- $x4 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e'];
- $y4 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f'];
- // new coordinates (rectangle area)
- $x = min($x1, $x2, $x3, $x4);
- $y = max($y1, $y2, $y3, $y4);
- $w = (max($x1, $x2, $x3, $x4) - $x) / $this->k;
- $h = ($y - min($y1, $y2, $y3, $y4)) / $this->k;
- $x = $x / $this->k;
- $y = $this->h - ($y / $this->k);
- }
+ return ($descent / $this->k);
+ }
+
+ /**
+ * Return the font ascent value
+ * @param $font (string) font name
+ * @param $style (string) font style
+ * @param $size (float) The size (in points)
+ * @return int font ascent
+ * @public
+ * @author Nicola Asuni
+ * @since 4.9.003 (2010-03-30)
+ */
+ public function getFontAscent($font, $style='', $size=0) {
+ $fontdata = $this->AddFont($font, $style);
+ $fontinfo = $this->getFontBuffer($fontdata['fontkey']);
+ if (isset($fontinfo['desc']['Ascent']) AND ($fontinfo['desc']['Ascent'] > 0)) {
+ $ascent = ($fontinfo['desc']['Ascent'] * $size / 1000);
+ } else {
+ $ascent = 1.219 * 0.76 * $size;
+ }
+ return ($ascent / $this->k);
+ }
+
+ /**
+ * Defines the default monospaced font.
+ * @param $font (string) Font name.
+ * @public
+ * @since 4.5.025
+ */
+ public function SetDefaultMonospacedFont($font) {
+ $this->default_monospaced_font = $font;
+ }
+
+ /**
+ * Creates a new internal link and returns its identifier. An internal link is a clickable area which directs to another place within the document.
+ * The identifier can then be passed to Cell(), Write(), Image() or Link(). The destination is defined with SetLink().
+ * @public
+ * @since 1.5
+ * @see Cell(), Write(), Image(), Link(), SetLink()
+ */
+ public function AddLink() {
+ //Create a new internal link
+ $n = count($this->links) + 1;
+ $this->links[$n] = array(0, 0);
+ return $n;
+ }
+
+ /**
+ * Defines the page and position a link points to.
+ * @param $link (int) The link identifier returned by AddLink()
+ * @param $y (float) Ordinate of target position; -1 indicates the current position. The default value is 0 (top of page)
+ * @param $page (int) Number of target page; -1 indicates the current page. This is the default value
+ * @public
+ * @since 1.5
+ * @see AddLink()
+ */
+ public function SetLink($link, $y=0, $page=-1) {
+ if ($y == -1) {
+ $y = $this->y;
+ }
+ if ($page == -1) {
+ $page = $this->page;
+ }
+ $this->links[$link] = array($page, $y);
+ }
+
+ /**
+ * Puts a link on a rectangular area of the page.
+ * Text or image links are generally put via Cell(), Write() or Image(), but this method can be useful for instance to define a clickable area inside an image.
+ * @param $x (float) Abscissa of the upper-left corner of the rectangle
+ * @param $y (float) Ordinate of the upper-left corner of the rectangle
+ * @param $w (float) Width of the rectangle
+ * @param $h (float) Height of the rectangle
+ * @param $link (mixed) URL or identifier returned by AddLink()
+ * @param $spaces (int) number of spaces on the text to link
+ * @public
+ * @since 1.5
+ * @see AddLink(), Annotation(), Cell(), Write(), Image()
+ */
+ public function Link($x, $y, $w, $h, $link, $spaces=0) {
+ $this->Annotation($x, $y, $w, $h, $link, array('Subtype'=>'Link'), $spaces);
+ }
+
+ /**
+ * Puts a markup annotation on a rectangular area of the page.
+ * !!!!THE ANNOTATION SUPPORT IS NOT YET FULLY IMPLEMENTED !!!!
+ * @param $x (float) Abscissa of the upper-left corner of the rectangle
+ * @param $y (float) Ordinate of the upper-left corner of the rectangle
+ * @param $w (float) Width of the rectangle
+ * @param $h (float) Height of the rectangle
+ * @param $text (string) annotation text or alternate content
+ * @param $opt (array) array of options (see section 8.4 of PDF reference 1.7).
+ * @param $spaces (int) number of spaces on the text to link
+ * @public
+ * @since 4.0.018 (2008-08-06)
+ */
+ public function Annotation($x, $y, $w, $h, $text, $opt=array('Subtype'=>'Text'), $spaces=0) {
+ if ($this->inxobj) {
+ // store parameters for later use on template
+ $this->xobjects[$this->xobjid]['annotations'][] = array('x' => $x, 'y' => $y, 'w' => $w, 'h' => $h, 'text' => $text, 'opt' => $opt, 'spaces' => $spaces);
+ return;
+ }
+ if ($x === '') {
+ $x = $this->x;
+ }
+ if ($y === '') {
+ $y = $this->y;
+ }
+ // check page for no-write regions and adapt page margins if necessary
+ list($x, $y) = $this->checkPageRegions($h, $x, $y);
+ // recalculate coordinates to account for graphic transformations
+ if (isset($this->transfmatrix) AND !empty($this->transfmatrix)) {
+ for ($i=$this->transfmatrix_key; $i > 0; --$i) {
+ $maxid = count($this->transfmatrix[$i]) - 1;
+ for ($j=$maxid; $j >= 0; --$j) {
+ $ctm = $this->transfmatrix[$i][$j];
+ if (isset($ctm['a'])) {
+ $x = $x * $this->k;
+ $y = ($this->h - $y) * $this->k;
+ $w = $w * $this->k;
+ $h = $h * $this->k;
+ // top left
+ $xt = $x;
+ $yt = $y;
+ $x1 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e'];
+ $y1 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f'];
+ // top right
+ $xt = $x + $w;
+ $yt = $y;
+ $x2 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e'];
+ $y2 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f'];
+ // bottom left
+ $xt = $x;
+ $yt = $y - $h;
+ $x3 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e'];
+ $y3 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f'];
+ // bottom right
+ $xt = $x + $w;
+ $yt = $y - $h;
+ $x4 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e'];
+ $y4 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f'];
+ // new coordinates (rectangle area)
+ $x = min($x1, $x2, $x3, $x4);
+ $y = max($y1, $y2, $y3, $y4);
+ $w = (max($x1, $x2, $x3, $x4) - $x) / $this->k;
+ $h = ($y - min($y1, $y2, $y3, $y4)) / $this->k;
+ $x = $x / $this->k;
+ $y = $this->h - ($y / $this->k);
}
}
}
- if ($this->page <= 0) {
- $page = 1;
- } else {
- $page = $this->page;
- }
- if (!isset($this->PageAnnots[$page])) {
- $this->PageAnnots[$page] = array();
- }
- $this->PageAnnots[$page][] = array('x' => $x, 'y' => $y, 'w' => $w, 'h' => $h, 'txt' => $text, 'opt' => $opt, 'numspaces' => $spaces);
- if (($opt['Subtype'] == 'FileAttachment') AND (!$this->empty_string($opt['FS'])) AND file_exists($opt['FS']) AND (!isset($this->embeddedfiles[basename($opt['FS'])]))) {
- $this->embeddedfiles[basename($opt['FS'])] = array('file' => $opt['FS'], 'n' => (count($this->embeddedfiles) + $this->embedded_start_obj_id));
- }
- // Add widgets annotation's icons
- if (isset($opt['mk']['i']) AND file_exists($opt['mk']['i'])) {
- $this->Image($opt['mk']['i'], '', '', 10, 10, '', '', '', false, 300, '', false, false, 0, false, true);
- }
- if (isset($opt['mk']['ri']) AND file_exists($opt['mk']['ri'])) {
- $this->Image($opt['mk']['ri'], '', '', 0, 0, '', '', '', false, 300, '', false, false, 0, false, true);
- }
- if (isset($opt['mk']['ix']) AND file_exists($opt['mk']['ix'])) {
- $this->Image($opt['mk']['ix'], '', '', 0, 0, '', '', '', false, 300, '', false, false, 0, false, true);
- }
- ++$this->annot_obj_id;
}
+ if ($this->page <= 0) {
+ $page = 1;
+ } else {
+ $page = $this->page;
+ }
+ if (!isset($this->PageAnnots[$page])) {
+ $this->PageAnnots[$page] = array();
+ }
+ ++$this->n;
+ $this->PageAnnots[$page][] = array('n' => $this->n, 'x' => $x, 'y' => $y, 'w' => $w, 'h' => $h, 'txt' => $text, 'opt' => $opt, 'numspaces' => $spaces);
+ if (!$this->pdfa_mode) {
+ if ((($opt['Subtype'] == 'FileAttachment') OR ($opt['Subtype'] == 'Sound')) AND (!$this->empty_string($opt['FS'])) AND file_exists($opt['FS']) AND (!isset($this->embeddedfiles[basename($opt['FS'])]))) {
+ ++$this->n;
+ $this->embeddedfiles[basename($opt['FS'])] = array('n' => $this->n, 'file' => $opt['FS']);
+ }
+ }
+ // Add widgets annotation's icons
+ if (isset($opt['mk']['i']) AND file_exists($opt['mk']['i'])) {
+ $this->Image($opt['mk']['i'], '', '', 10, 10, '', '', '', false, 300, '', false, false, 0, false, true);
+ }
+ if (isset($opt['mk']['ri']) AND file_exists($opt['mk']['ri'])) {
+ $this->Image($opt['mk']['ri'], '', '', 0, 0, '', '', '', false, 300, '', false, false, 0, false, true);
+ }
+ if (isset($opt['mk']['ix']) AND file_exists($opt['mk']['ix'])) {
+ $this->Image($opt['mk']['ix'], '', '', 0, 0, '', '', '', false, 300, '', false, false, 0, false, true);
+ }
+ }
- /**
- * Embedd the attached files.
- * @since 4.4.000 (2008-12-07)
- * @access protected
- * @see Annotation()
- */
- protected function _putEmbeddedFiles() {
- reset($this->embeddedfiles);
- foreach ($this->embeddedfiles as $filename => $filedata) {
- $data = file_get_contents($filedata['file']);
- $filter = '';
- if ($this->compress) {
- $data = gzcompress($data);
- $filter = ' /Filter /FlateDecode';
- }
- $this->offsets[$filedata['n']] = $this->bufferlen;
- $this->_out($filedata['n'].' 0 obj');
- $this->_out('<>');
- $this->_putstream($data);
- $this->_out('endobj');
- }
+ /**
+ * Embedd the attached files.
+ * @since 4.4.000 (2008-12-07)
+ * @protected
+ * @see Annotation()
+ */
+ protected function _putEmbeddedFiles() {
+ if ($this->pdfa_mode) {
+ // embedded files are not allowed in PDF/A mode
+ return;
}
-
- /**
- * Prints a character string.
- * The origin is on the left of the first charcter, on the baseline.
- * This method allows to place a string precisely on the page.
- * @param float $x Abscissa of the origin
- * @param float $y Ordinate of the origin
- * @param string $txt String to print
- * @param int $stroke outline size in points (0 = disable)
- * @param boolean $clip if true activate clipping mode (you must call StartTransform() before this function and StopTransform() to stop the clipping tranformation).
- * @access public
- * @since 1.0
- * @deprecated deprecated since version 4.3.005 (2008-11-25)
- * @see Cell(), Write(), MultiCell(), WriteHTML(), WriteHTMLCell()
- */
- public function Text($x, $y, $txt, $stroke=0, $clip=false) {
- //Output a string
- if ($this->rtl) {
- // bidirectional algorithm (some chars may be changed affecting the line length)
- $s = $this->utf8Bidi($this->UTF8StringToArray($txt), $txt, $this->tmprtl);
- $l = $this->GetArrStringWidth($s);
- $xr = $this->w - $x - $l;
- } else {
- $xr = $x;
+ reset($this->embeddedfiles);
+ foreach ($this->embeddedfiles as $filename => $filedata) {
+ $data = file_get_contents($filedata['file']);
+ $filter = '';
+ if ($this->compress) {
+ $data = gzcompress($data);
+ $filter = ' /Filter /FlateDecode';
}
- $opt = '';
- if (($stroke > 0) AND (!$clip)) {
- $opt .= '1 Tr '.intval($stroke).' w ';
- } elseif (($stroke > 0) AND $clip) {
- $opt .= '5 Tr '.intval($stroke).' w ';
- } elseif ($clip) {
- $opt .= '7 Tr ';
- }
- $s = sprintf('BT %.2F %.2F Td %s(%s) Tj ET 0 Tr', $xr * $this->k, ($this->h-$y) * $this->k, $opt, $this->_escapetext($txt));
- if ($this->underline AND ($txt!='')) {
- $s .= ' '.$this->_dounderline($xr, $y, $txt);
- }
- if ($this->linethrough AND ($txt!='')) {
- $s .= ' '.$this->_dolinethrough($xr, $y, $txt);
- }
- if ($this->ColorFlag AND (!$clip)) {
- $s='q '.$this->TextColor.' '.$s.' Q';
- }
- $this->_out($s);
+ $stream = $this->_getrawstream($data, $filedata['n']);
+ $out = $this->_getobj($filedata['n'])."\n";
+ $out .= '<< /Type /EmbeddedFile'.$filter.' /Length '.strlen($stream).' >>';
+ $out .= ' stream'."\n".$stream."\n".'endstream';
+ $out .= "\n".'endobj';
+ $this->_out($out);
}
+ }
- /**
- * Whenever a page break condition is met, the method is called, and the break is issued or not depending on the returned value.
- * The default implementation returns a value according to the mode selected by SetAutoPageBreak().
- * This method is called automatically and should not be called directly by the application.
- * @return boolean
- * @access public
- * @since 1.4
- * @see SetAutoPageBreak()
- */
- public function AcceptPageBreak() {
- return $this->AutoPageBreak;
- }
-
- /**
- * Add page if needed.
- * @param float $h Cell height. Default value: 0.
- * @param mixed $y starting y position, leave empty for current position.
- * @param boolean $addpage if true add a page, otherwise only return the true/false state
- * @return boolean true in case of page break, false otherwise.
- * @since 3.2.000 (2008-07-01)
- * @access protected
- */
- protected function checkPageBreak($h=0, $y='', $addpage=true) {
- if ($this->empty_string($y)) {
- $y = $this->y;
- }
- if ((($y + $h) > $this->PageBreakTrigger) AND (!$this->InFooter) AND ($this->AcceptPageBreak())) {
- if ($addpage) {
- //Automatic page break
- $x = $this->x;
- $this->AddPage($this->CurOrientation);
- $this->y = $this->tMargin;
- $oldpage = $this->page - 1;
- if ($this->rtl) {
- if ($this->pagedim[$this->page]['orm'] != $this->pagedim[$oldpage]['orm']) {
- $this->x = $x - ($this->pagedim[$this->page]['orm'] - $this->pagedim[$oldpage]['orm']);
- } else {
- $this->x = $x;
- }
- } else {
- if ($this->pagedim[$this->page]['olm'] != $this->pagedim[$oldpage]['olm']) {
- $this->x = $x + ($this->pagedim[$this->page]['olm'] - $this->pagedim[$oldpage]['olm']);
- } else {
- $this->x = $x;
- }
- }
- }
- return true;
+ /**
+ * Prints a text cell at the specified position.
+ * This method allows to place a string precisely on the page.
+ * @param $x (float) Abscissa of the cell origin
+ * @param $y (float) Ordinate of the cell origin
+ * @param $txt (string) String to print
+ * @param $fstroke (int) outline size in user units (false = disable)
+ * @param $fclip (boolean) if true activate clipping mode (you must call StartTransform() before this function and StopTransform() to stop the clipping tranformation).
+ * @param $ffill (boolean) if true fills the text
+ * @param $border (mixed) Indicates if borders must be drawn around the cell. The value can be a number:0: no border (default) 1: frame or a string containing some or all of the following characters (in any order):L: left T: top R: right B: bottom or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
+ * @param $ln (int) Indicates where the current position should go after the call. Possible values are:0: to the right (or left for RTL languages) 1: to the beginning of the next line 2: below Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0.
+ * @param $align (string) Allows to center or align the text. Possible values are:L or empty string: left align (default value) C: center R: right align J: justify
+ * @param $fill (boolean) Indicates if the cell background must be painted (true) or transparent (false).
+ * @param $link (mixed) URL or identifier returned by AddLink().
+ * @param $stretch (int) font stretch mode: 0 = disabled 1 = horizontal scaling only if text is larger than cell width 2 = forced horizontal scaling to fit cell width 3 = character spacing only if text is larger than cell width 4 = forced character spacing to fit cell width General font stretching and scaling values will be preserved when possible.
+ * @param $ignore_min_height (boolean) if true ignore automatic minimum height value.
+ * @param $calign (string) cell vertical alignment relative to the specified Y value. Possible values are:T : cell top A : font top L : font baseline D : font bottom B : cell bottom
+ * @param $valign (string) text vertical alignment inside the cell. Possible values are:T : top C : center B : bottom
+ * @param $rtloff (boolean) if true uses the page top-left corner as origin of axis for $x and $y initial position.
+ * @public
+ * @since 1.0
+ * @see Cell(), Write(), MultiCell(), WriteHTML(), WriteHTMLCell()
+ */
+ public function Text($x, $y, $txt, $fstroke=false, $fclip=false, $ffill=true, $border=0, $ln=0, $align='', $fill=false, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M', $rtloff=false) {
+ $textrendermode = $this->textrendermode;
+ $textstrokewidth = $this->textstrokewidth;
+ $this->setTextRenderingMode($fstroke, $ffill, $fclip);
+ $this->SetXY($x, $y, $rtloff);
+ $this->Cell(0, 0, $txt, $border, $ln, $align, $fill, $link, $stretch, $ignore_min_height, $calign, $valign);
+ // restore previous rendering mode
+ $this->textrendermode = $textrendermode;
+ $this->textstrokewidth = $textstrokewidth;
+ }
+
+ /**
+ * Whenever a page break condition is met, the method is called, and the break is issued or not depending on the returned value.
+ * The default implementation returns a value according to the mode selected by SetAutoPageBreak().
+ * This method is called automatically and should not be called directly by the application.
+ * @return boolean
+ * @public
+ * @since 1.4
+ * @see SetAutoPageBreak()
+ */
+ public function AcceptPageBreak() {
+ if ($this->num_columns > 1) {
+ // multi column mode
+ if ($this->current_column < ($this->num_columns - 1)) {
+ // go to next column
+ $this->selectColumn($this->current_column + 1);
+ } else {
+ // add a new page
+ $this->AddPage();
+ // set first column
+ $this->selectColumn(0);
}
+ // avoid page breaking from checkPageBreak()
return false;
}
+ return $this->AutoPageBreak;
+ }
- /**
- * Prints a cell (rectangular area) with optional borders, background color and character string. The upper-left corner of the cell corresponds to the current position. The text can be aligned or centered. After the call, the current position moves to the right or to the next line. It is possible to put a link on the text.
- * If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting.
- * @param float $w Cell width. If 0, the cell extends up to the right margin.
- * @param float $h Cell height. Default value: 0.
- * @param string $txt String to print. Default value: empty string.
- * @param mixed $border Indicates if borders must be drawn around the cell. The value can be either a number:0: no border (default) 1: frame or a string containing some or all of the following characters (in any order):L: left T: top R: right B: bottom
- * @param int $ln Indicates where the current position should go after the call. Possible values are:0: to the right (or left for RTL languages) 1: to the beginning of the next line 2: below
- Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0.
- * @param string $align Allows to center or align the text. Possible values are:L or empty string: left align (default value) C: center R: right align J: justify
- * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0.
- * @param mixed $link URL or identifier returned by AddLink().
- * @param int $stretch stretch carachter mode: 0 = disabled 1 = horizontal scaling only if necessary 2 = forced horizontal scaling 3 = character spacing only if necessary 4 = forced character spacing
- * @param boolean $ignore_min_height if true ignore automatic minimum height value.
- * @access public
- * @since 1.0
- * @see SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), AddLink(), Ln(), MultiCell(), Write(), SetAutoPageBreak()
- */
- public function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=0, $link='', $stretch=0, $ignore_min_height=false) {
- //$min_cell_height = $this->FontAscent + $this->FontDescent;
- $min_cell_height = $this->FontSize * $this->cell_height_ratio;
+ /**
+ * Add page if needed.
+ * @param $h (float) Cell height. Default value: 0.
+ * @param $y (mixed) starting y position, leave empty for current position.
+ * @param $addpage (boolean) if true add a page, otherwise only return the true/false state
+ * @return boolean true in case of page break, false otherwise.
+ * @since 3.2.000 (2008-07-01)
+ * @protected
+ */
+ protected function checkPageBreak($h=0, $y='', $addpage=true) {
+ if ($this->empty_string($y)) {
+ $y = $this->y;
+ }
+ $current_page = $this->page;
+ if ((($y + $h) > $this->PageBreakTrigger) AND ($this->inPageBody()) AND ($this->AcceptPageBreak())) {
+ if ($addpage) {
+ //Automatic page break
+ $x = $this->x;
+ $this->AddPage($this->CurOrientation);
+ $this->y = $this->tMargin;
+ $oldpage = $this->page - 1;
+ if ($this->rtl) {
+ if ($this->pagedim[$this->page]['orm'] != $this->pagedim[$oldpage]['orm']) {
+ $this->x = $x - ($this->pagedim[$this->page]['orm'] - $this->pagedim[$oldpage]['orm']);
+ } else {
+ $this->x = $x;
+ }
+ } else {
+ if ($this->pagedim[$this->page]['olm'] != $this->pagedim[$oldpage]['olm']) {
+ $this->x = $x + ($this->pagedim[$this->page]['olm'] - $this->pagedim[$oldpage]['olm']);
+ } else {
+ $this->x = $x;
+ }
+ }
+ }
+ return true;
+ }
+ if ($current_page != $this->page) {
+ // account for columns mode
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Removes SHY characters from text.
+ * Unicode Data:
+ * Name : SOFT HYPHEN, commonly abbreviated as SHY
+ * HTML Entity (decimal): "­"
+ * HTML Entity (hex): "­"
+ * HTML Entity (named): "­"
+ * How to type in Microsoft Windows: [Alt +00AD] or [Alt 0173]
+ * UTF-8 (hex): 0xC2 0xAD (c2ad)
+ * UTF-8 character: chr(194).chr(173)
+ *
+ * @param $txt (string) input string
+ * @return string without SHY characters.
+ * @public
+ * @since (4.5.019) 2009-02-28
+ */
+ public function removeSHY($txt='') {
+ $txt = preg_replace('/([\\xc2]{1}[\\xad]{1})/', '', $txt);
+ if (!$this->isunicode) {
+ $txt = preg_replace('/([\\xad]{1})/', '', $txt);
+ }
+ return $txt;
+ }
+
+ /**
+ * Prints a cell (rectangular area) with optional borders, background color and character string. The upper-left corner of the cell corresponds to the current position. The text can be aligned or centered. After the call, the current position moves to the right or to the next line. It is possible to put a link on the text.
+ * If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting.
+ * @param $w (float) Cell width. If 0, the cell extends up to the right margin.
+ * @param $h (float) Cell height. Default value: 0.
+ * @param $txt (string) String to print. Default value: empty string.
+ * @param $border (mixed) Indicates if borders must be drawn around the cell. The value can be a number:0: no border (default) 1: frame or a string containing some or all of the following characters (in any order):L: left T: top R: right B: bottom or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
+ * @param $ln (int) Indicates where the current position should go after the call. Possible values are:0: to the right (or left for RTL languages) 1: to the beginning of the next line 2: below Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0.
+ * @param $align (string) Allows to center or align the text. Possible values are:L or empty string: left align (default value) C: center R: right align J: justify
+ * @param $fill (boolean) Indicates if the cell background must be painted (true) or transparent (false).
+ * @param $link (mixed) URL or identifier returned by AddLink().
+ * @param $stretch (int) font stretch mode: 0 = disabled 1 = horizontal scaling only if text is larger than cell width 2 = forced horizontal scaling to fit cell width 3 = character spacing only if text is larger than cell width 4 = forced character spacing to fit cell width General font stretching and scaling values will be preserved when possible.
+ * @param $ignore_min_height (boolean) if true ignore automatic minimum height value.
+ * @param $calign (string) cell vertical alignment relative to the specified Y value. Possible values are:T : cell top C : center B : cell bottom A : font top L : font baseline D : font bottom
+ * @param $valign (string) text vertical alignment inside the cell. Possible values are:T : top C : center B : bottom
+ * @public
+ * @since 1.0
+ * @see SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), AddLink(), Ln(), MultiCell(), Write(), SetAutoPageBreak()
+ */
+ public function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M') {
+ $prev_cell_margin = $this->cell_margin;
+ $prev_cell_padding = $this->cell_padding;
+ $this->adjustCellPadding($border);
+ if (!$ignore_min_height) {
+ $min_cell_height = ($this->FontSize * $this->cell_height_ratio) + $this->cell_padding['T'] + $this->cell_padding['B'];
if ($h < $min_cell_height) {
$h = $min_cell_height;
}
- $this->checkPageBreak($h);
- $this->_out($this->getCellCode($w, $h, $txt, $border, $ln, $align, $fill, $link, $stretch, $ignore_min_height));
}
+ $this->checkPageBreak($h + $this->cell_margin['T'] + $this->cell_margin['B']);
+ $this->_out($this->getCellCode($w, $h, $txt, $border, $ln, $align, $fill, $link, $stretch, true, $calign, $valign));
+ $this->cell_padding = $prev_cell_padding;
+ $this->cell_margin = $prev_cell_margin;
+ }
- /**
- * Removes SHY characters from text.
- * @param string $txt input string
- * @return string without SHY characters.
- * @access public
- * @since (4.5.019) 2009-02-28
- */
- public function removeSHY($txt='') {
- /*
- * Unicode Data
- * Name : SOFT HYPHEN, commonly abbreviated as SHY
- * HTML Entity (decimal):
- * HTML Entity (hex):
- * HTML Entity (named):
- * How to type in Microsoft Windows: [Alt +00AD] or [Alt 0173]
- * UTF-8 (hex): 0xC2 0xAD (c2ad)
- * UTF-8 character: chr(194).chr(173)
- */
- $txt = preg_replace('/([\\xc2]{1}[\\xad]{1})/', '', $txt);
- if (!$this->isunicode) {
- $txt = preg_replace('/([\\xad]{1})/', '', $txt);
+ /**
+ * Returns the PDF string code to print a cell (rectangular area) with optional borders, background color and character string. The upper-left corner of the cell corresponds to the current position. The text can be aligned or centered. After the call, the current position moves to the right or to the next line. It is possible to put a link on the text.
+ * If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting.
+ * @param $w (float) Cell width. If 0, the cell extends up to the right margin.
+ * @param $h (float) Cell height. Default value: 0.
+ * @param $txt (string) String to print. Default value: empty string.
+ * @param $border (mixed) Indicates if borders must be drawn around the cell. The value can be a number:0: no border (default) 1: frame or a string containing some or all of the following characters (in any order):L: left T: top R: right B: bottom or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
+ * @param $ln (int) Indicates where the current position should go after the call. Possible values are:0: to the right (or left for RTL languages) 1: to the beginning of the next line 2: below Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0.
+ * @param $align (string) Allows to center or align the text. Possible values are:L or empty string: left align (default value) C: center R: right align J: justify
+ * @param $fill (boolean) Indicates if the cell background must be painted (true) or transparent (false).
+ * @param $link (mixed) URL or identifier returned by AddLink().
+ * @param $stretch (int) font stretch mode: 0 = disabled 1 = horizontal scaling only if text is larger than cell width 2 = forced horizontal scaling to fit cell width 3 = character spacing only if text is larger than cell width 4 = forced character spacing to fit cell width General font stretching and scaling values will be preserved when possible.
+ * @param $ignore_min_height (boolean) if true ignore automatic minimum height value.
+ * @param $calign (string) cell vertical alignment relative to the specified Y value. Possible values are:T : cell top C : center B : cell bottom A : font top L : font baseline D : font bottom
+ * @param $valign (string) text vertical alignment inside the cell. Possible values are:T : top M : middle B : bottom
+ * @return string containing cell code
+ * @protected
+ * @since 1.0
+ * @see Cell()
+ */
+ protected function getCellCode($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M') {
+ // replace 'NO-BREAK SPACE' (U+00A0) character with a simple space
+ $txt = str_replace($this->unichr(160), ' ', $txt);
+ $prev_cell_margin = $this->cell_margin;
+ $prev_cell_padding = $this->cell_padding;
+ $txt = $this->removeSHY($txt);
+ $rs = ''; //string to be returned
+ $this->adjustCellPadding($border);
+ if (!$ignore_min_height) {
+ $min_cell_height = ($this->FontSize * $this->cell_height_ratio) + $this->cell_padding['T'] + $this->cell_padding['B'];
+ if ($h < $min_cell_height) {
+ $h = $min_cell_height;
}
- return $txt;
}
-
- /**
- * Returns the PDF string code to print a cell (rectangular area) with optional borders, background color and character string. The upper-left corner of the cell corresponds to the current position. The text can be aligned or centered. After the call, the current position moves to the right or to the next line. It is possible to put a link on the text.
- * If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting.
- * @param float $w Cell width. If 0, the cell extends up to the right margin.
- * @param float $h Cell height. Default value: 0.
- * @param string $txt String to print. Default value: empty string.
- * @param mixed $border Indicates if borders must be drawn around the cell. The value can be either a number:0: no border (default) 1: frame or a string containing some or all of the following characters (in any order):L: left T: top R: right B: bottom
- * @param int $ln Indicates where the current position should go after the call. Possible values are:0: to the right (or left for RTL languages) 1: to the beginning of the next line 2: below Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0.
- * @param string $align Allows to center or align the text. Possible values are:L or empty string: left align (default value) C: center R: right align J: justify
- * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0.
- * @param mixed $link URL or identifier returned by AddLink().
- * @param int $stretch stretch carachter mode: 0 = disabled 1 = horizontal scaling only if necessary 2 = forced horizontal scaling 3 = character spacing only if necessary 4 = forced character spacing
- * @param boolean $ignore_min_height if true ignore automatic minimum height value.
- * @access protected
- * @since 1.0
- * @see Cell()
- */
- protected function getCellCode($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=0, $link='', $stretch=0, $ignore_min_height=false) {
- $txt = $this->removeSHY($txt);
- $rs = ''; //string to be returned
- if (!$ignore_min_height) {
- $min_cell_height = $this->FontSize * $this->cell_height_ratio;
- if ($h < $min_cell_height) {
- $h = $min_cell_height;
+ $k = $this->k;
+ // check page for no-write regions and adapt page margins if necessary
+ list($this->x, $this->y) = $this->checkPageRegions($h, $this->x, $this->y);
+ if ($this->rtl) {
+ $x = $this->x - $this->cell_margin['R'];
+ } else {
+ $x = $this->x + $this->cell_margin['L'];
+ }
+ $y = $this->y + $this->cell_margin['T'];
+ $prev_font_stretching = $this->font_stretching;
+ $prev_font_spacing = $this->font_spacing;
+ // cell vertical alignment
+ switch ($calign) {
+ case 'A': {
+ // font top
+ switch ($valign) {
+ case 'T': {
+ // top
+ $y -= $this->cell_padding['T'];
+ break;
+ }
+ case 'B': {
+ // bottom
+ $y -= ($h - $this->cell_padding['B'] - $this->FontAscent - $this->FontDescent);
+ break;
+ }
+ default:
+ case 'C':
+ case 'M': {
+ // center
+ $y -= (($h - $this->FontAscent - $this->FontDescent) / 2);
+ break;
+ }
}
+ break;
}
- $k = $this->k;
- if ($this->empty_string($w) OR ($w <= 0)) {
- if ($this->rtl) {
- $w = $this->x - $this->lMargin;
+ case 'L': {
+ // font baseline
+ switch ($valign) {
+ case 'T': {
+ // top
+ $y -= ($this->cell_padding['T'] + $this->FontAscent);
+ break;
+ }
+ case 'B': {
+ // bottom
+ $y -= ($h - $this->cell_padding['B'] - $this->FontDescent);
+ break;
+ }
+ default:
+ case 'C':
+ case 'M': {
+ // center
+ $y -= (($h + $this->FontAscent - $this->FontDescent) / 2);
+ break;
+ }
+ }
+ break;
+ }
+ case 'D': {
+ // font bottom
+ switch ($valign) {
+ case 'T': {
+ // top
+ $y -= ($this->cell_padding['T'] + $this->FontAscent + $this->FontDescent);
+ break;
+ }
+ case 'B': {
+ // bottom
+ $y -= ($h - $this->cell_padding['B']);
+ break;
+ }
+ default:
+ case 'C':
+ case 'M': {
+ // center
+ $y -= (($h + $this->FontAscent + $this->FontDescent) / 2);
+ break;
+ }
+ }
+ break;
+ }
+ case 'B': {
+ // cell bottom
+ $y -= $h;
+ break;
+ }
+ case 'C':
+ case 'M': {
+ // cell center
+ $y -= ($h / 2);
+ break;
+ }
+ default:
+ case 'T': {
+ // cell top
+ break;
+ }
+ }
+ // text vertical alignment
+ switch ($valign) {
+ case 'T': {
+ // top
+ $yt = $y + $this->cell_padding['T'];
+ break;
+ }
+ case 'B': {
+ // bottom
+ $yt = $y + $h - $this->cell_padding['B'] - $this->FontAscent - $this->FontDescent;
+ break;
+ }
+ default:
+ case 'C':
+ case 'M': {
+ // center
+ $yt = $y + (($h - $this->FontAscent - $this->FontDescent) / 2);
+ break;
+ }
+ }
+ $basefonty = $yt + $this->FontAscent;
+ if ($this->empty_string($w) OR ($w <= 0)) {
+ if ($this->rtl) {
+ $w = $x - $this->lMargin;
+ } else {
+ $w = $this->w - $this->rMargin - $x;
+ }
+ }
+ $s = '';
+ // fill and borders
+ if (is_string($border) AND (strlen($border) == 4)) {
+ // full border
+ $border = 1;
+ }
+ if ($fill OR ($border == 1)) {
+ if ($fill) {
+ $op = ($border == 1) ? 'B' : 'f';
+ } else {
+ $op = 'S';
+ }
+ if ($this->rtl) {
+ $xk = (($x - $w) * $k);
+ } else {
+ $xk = ($x * $k);
+ }
+ $s .= sprintf('%.2F %.2F %.2F %.2F re %s ', $xk, (($this->h - $y) * $k), ($w * $k), (-$h * $k), $op);
+ }
+ // draw borders
+ $s .= $this->getCellBorder($x, $y, $w, $h, $border);
+ if ($txt != '') {
+ $txt2 = $txt;
+ if ($this->isunicode) {
+ if (($this->CurrentFont['type'] == 'core') OR ($this->CurrentFont['type'] == 'TrueType') OR ($this->CurrentFont['type'] == 'Type1')) {
+ $txt2 = $this->UTF8ToLatin1($txt2);
} else {
- $w = $this->w - $this->rMargin - $this->x;
+ $unicode = $this->UTF8StringToArray($txt); // array of UTF-8 unicode values
+ $unicode = $this->utf8Bidi($unicode, '', $this->tmprtl);
+ if (defined('K_THAI_TOPCHARS') AND (K_THAI_TOPCHARS == true)) {
+ // ---- Fix for bug #2977340 "Incorrect Thai characters position arrangement" ----
+ // NOTE: this doesn't work with HTML justification
+ // Symbols that could overlap on the font top (only works in LTR)
+ $topchar = array(3611, 3613, 3615, 3650, 3651, 3652); // chars that extends on top
+ $topsym = array(3633, 3636, 3637, 3638, 3639, 3655, 3656, 3657, 3658, 3659, 3660, 3661, 3662); // symbols with top position
+ $numchars = count($unicode); // number of chars
+ $unik = 0;
+ $uniblock = array();
+ $uniblock[$unik] = array();
+ $uniblock[$unik][] = $unicode[0];
+ // resolve overlapping conflicts by splitting the string in several parts
+ for ($i = 1; $i < $numchars; ++$i) {
+ // check if symbols overlaps at top
+ if (in_array($unicode[$i], $topsym) AND (in_array($unicode[($i - 1)], $topsym) OR in_array($unicode[($i - 1)], $topchar))) {
+ // move symbols to another array
+ ++$unik;
+ $uniblock[$unik] = array();
+ $uniblock[$unik][] = $unicode[$i];
+ ++$unik;
+ $uniblock[$unik] = array();
+ $unicode[$i] = 0x200b; // Unicode Character 'ZERO WIDTH SPACE' (DEC:8203, U+200B)
+ } else {
+ $uniblock[$unik][] = $unicode[$i];
+ }
+ }
+ // ---- END OF Fix for bug #2977340
+ }
+ $txt2 = $this->arrUTF8ToUTF16BE($unicode, false);
}
}
- $s = '';
- if (($fill == 1) OR ($border == 1)) {
- if ($fill == 1) {
- $op = ($border == 1) ? 'B' : 'f';
- } else {
- $op = 'S';
- }
- if ($this->rtl) {
- $xk = (($this->x - $w) * $k);
- } else {
- $xk = ($this->x * $k);
- }
- $s .= sprintf('%.2F %.2F %.2F %.2F re %s ', $xk, (($this->h - $this->y) * $k), ($w * $k), (-$h * $k), $op);
- }
- if (is_string($border)) {
- $lm = ($this->LineWidth / 2);
- $x = $this->x;
- $y = $this->y;
- if (strpos($border,'L') !== false) {
- if ($this->rtl) {
- $xk = ($x - $w) * $k;
- } else {
- $xk = $x * $k;
- }
- $s .= sprintf('%.2F %.2F m %.2F %.2F l S ', $xk, (($this->h - $y + $lm) * $k), $xk, (($this->h - ($y + $h + $lm)) * $k));
- }
- if (strpos($border,'T') !== false) {
- if ($this->rtl) {
- $xk = ($x - $w + $lm) * $k;
- $xwk = ($x - $lm) * $k;
- } else {
- $xk = ($x - $lm) * $k;
- $xwk = ($x + $w + $lm) * $k;
- }
- $s .= sprintf('%.2F %.2F m %.2F %.2F l S ', $xk, (($this->h - $y) * $k), $xwk, (($this->h - $y) * $k));
- }
- if (strpos($border,'R') !== false) {
- if ($this->rtl) {
- $xk = $x * $k;
- } else {
- $xk = ($x + $w) * $k;
- }
- $s .= sprintf('%.2F %.2F m %.2F %.2F l S ', $xk, (($this->h - $y + $lm) * $k), $xk, (($this->h - ($y + $h + $lm))* $k));
- }
- if (strpos($border,'B') !== false) {
- if ($this->rtl) {
- $xk = ($x - $w + $lm) * $k;
- $xwk = ($x - $lm) * $k;
- } else {
- $xk = ($x - $lm) * $k;
- $xwk = ($x + $w + $lm) * $k;
- }
- $s .= sprintf('%.2F %.2F m %.2F %.2F l S ', $xk, (($this->h - ($y + $h)) * $k), $xwk, (($this->h - ($y + $h)) * $k));
- }
- }
- if ($txt != '') {
- // text lenght
- $width = $this->GetStringWidth($txt);
- // ratio between cell lenght and text lenght
+ $txt2 = $this->_escape($txt2);
+ // get current text width (considering general font stretching and spacing)
+ $txwidth = $this->GetStringWidth($txt);
+ $width = $txwidth;
+ // check for stretch mode
+ if ($stretch > 0) {
+ // calculate ratio between cell width and text width
if ($width <= 0) {
$ratio = 1;
} else {
- $ratio = ($w - (2 * $this->cMargin)) / $width;
+ $ratio = (($w - $this->cell_padding['L'] - $this->cell_padding['R']) / $width);
}
- // stretch text if required
- if (($stretch > 0) AND (($ratio < 1) OR (($ratio > 1) AND (($stretch % 2) == 0)))) {
+ // check if stretching is required
+ if (($ratio < 1) OR (($ratio > 1) AND (($stretch % 2) == 0))) {
+ // the text will be stretched to fit cell width
if ($stretch > 2) {
- // spacing
- //Calculate character spacing in points
- $char_space = (($w - $width - (2 * $this->cMargin)) * $this->k) / max($this->GetNumChars($txt)-1,1);
- //Set character spacing
- $rs .= sprintf('BT %.2F Tc ET ', $char_space);
+ // set new character spacing
+ $this->font_spacing += ($w - $this->cell_padding['L'] - $this->cell_padding['R'] - $width) / (max(($this->GetNumChars($txt) - 1), 1) * ($this->font_stretching / 100));
} else {
- // scaling
- //Calculate horizontal scaling
- $horiz_scale = $ratio * 100.0;
- //Set horizontal scaling
- $rs .= sprintf('BT %.2F Tz ET ', $horiz_scale);
+ // set new horizontal stretching
+ $this->font_stretching *= $ratio;
}
+ // recalculate text width (the text fills the entire cell)
+ $width = $w - $this->cell_padding['L'] - $this->cell_padding['R'];
+ // reset alignment
$align = '';
- $width = $w - (2 * $this->cMargin);
- } else {
- $stretch == 0;
}
- if ($align == 'L') {
- if ($this->rtl) {
- $dx = $w - $width - $this->cMargin;
- } else {
- $dx = $this->cMargin;
+ }
+ if ($this->font_stretching != 100) {
+ // apply font stretching
+ $rs .= sprintf('BT %.2F Tz ET ', $this->font_stretching);
+ }
+ if ($this->font_spacing != 0) {
+ // increase/decrease font spacing
+ $rs .= sprintf('BT %.2F Tc ET ', ($this->font_spacing * $this->k));
+ }
+ if ($this->ColorFlag AND ($this->textrendermode < 4)) {
+ $s .= 'q '.$this->TextColor.' ';
+ }
+ // rendering mode
+ $s .= sprintf('BT %d Tr %.2F w ET ', $this->textrendermode, $this->textstrokewidth);
+ // count number of spaces
+ $ns = substr_count($txt, chr(32));
+ // Justification
+ $spacewidth = 0;
+ if (($align == 'J') AND ($ns > 0)) {
+ if ($this->isUnicodeFont()) {
+ // get string width without spaces
+ $width = $this->GetStringWidth(str_replace(' ', '', $txt));
+ // calculate average space width
+ $spacewidth = -1000 * ($w - $width - $this->cell_padding['L'] - $this->cell_padding['R']) / ($ns?$ns:1) / $this->FontSize;
+ if ($this->font_stretching != 100) {
+ // word spacing is affected by stretching
+ $spacewidth /= ($this->font_stretching / 100);
}
- } elseif ($align == 'R') {
- if ($this->rtl) {
- $dx = $this->cMargin;
- } else {
- $dx = $w - $width - $this->cMargin;
+ // set word position to be used with TJ operator
+ $txt2 = str_replace(chr(0).chr(32), ') '.sprintf('%.3F', $spacewidth).' (', $txt2);
+ $unicode_justification = true;
+ } else {
+ // get string width
+ $width = $txwidth;
+ // new space width
+ $spacewidth = (($w - $width - $this->cell_padding['L'] - $this->cell_padding['R']) / ($ns?$ns:1)) * $this->k;
+ if ($this->font_stretching != 100) {
+ // word spacing (Tw) is affected by stretching
+ $spacewidth /= ($this->font_stretching / 100);
}
- } elseif ($align == 'C') {
+ // set word spacing
+ $rs .= sprintf('BT %.3F Tw ET ', $spacewidth);
+ }
+ $width = $w - $this->cell_padding['L'] - $this->cell_padding['R'];
+ }
+ // replace carriage return characters
+ $txt2 = str_replace("\r", ' ', $txt2);
+ switch ($align) {
+ case 'C': {
$dx = ($w - $width) / 2;
- } elseif ($align == 'J') {
+ break;
+ }
+ case 'R': {
if ($this->rtl) {
- $dx = $w - $width - $this->cMargin;
+ $dx = $this->cell_padding['R'];
} else {
- $dx = $this->cMargin;
+ $dx = $w - $width - $this->cell_padding['R'];
}
- } else {
- $dx = $this->cMargin;
+ break;
}
- if ($this->ColorFlag) {
- $s .= 'q '.$this->TextColor.' ';
- }
- $txt2 = $this->_escapetext($txt);
- if ($this->rtl) {
- $xdk = ($this->x - $dx - $width) * $k;
- } else {
- $xdk = ($this->x + $dx) * $k;
- }
- // Justification
- if ($align == 'J') {
- // count number of spaces
- $ns = substr_count($txt, ' ');
- if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) {
- // get string width without spaces
- $width = $this->GetStringWidth(str_replace(' ', '', $txt));
- // calculate average space width
- $spacewidth = -1000 * ($w - $width - (2 * $this->cMargin)) / ($ns?$ns:1) / $this->FontSize;
- // set word position to be used with TJ operator
- $txt2 = str_replace(chr(0).' ', ') '.($spacewidth).' (', $txt2);
- } else {
- // get string width
- $width = $this->GetStringWidth($txt);
- $spacewidth = (($w - $width - (2 * $this->cMargin)) / ($ns?$ns:1)) * $this->k;
- $rs .= sprintf('BT %.3F Tw ET ', $spacewidth);
- }
- }
- // calculate approximate position of the font base line
- //$basefonty = $this->y + (($h + $this->FontAscent - $this->FontDescent)/2);
- $basefonty = $this->y + ($h/2) + ($this->FontSize/3);
- // print text
- $s .= sprintf('BT %.2F %.2F Td [(%s)] TJ ET', $xdk, (($this->h - $basefonty) * $k), $txt2);
- if ($this->rtl) {
- $xdx = $this->x - $dx - $width;
- } else {
- $xdx = $this->x + $dx;
- }
- if ($this->underline) {
- $s .= ' '.$this->_dounderlinew($xdx, $basefonty, $width);
- }
- if ($this->linethrough) {
- $s .= ' '.$this->_dolinethroughw($xdx, $basefonty, $width);
- }
- if ($this->ColorFlag) {
- $s .= ' Q';
- }
- if ($link) {
- $this->Link($xdx, $this->y + (($h - $this->FontSize)/2), $width, $this->FontSize, $link, substr_count($txt, chr(32)));
- }
- }
- // output cell
- if ($s) {
- // output cell
- $rs .= $s;
- // reset text stretching
- if ($stretch > 2) {
- //Reset character horizontal spacing
- $rs .= ' BT 0 Tc ET';
- } elseif ($stretch > 0) {
- //Reset character horizontal scaling
- $rs .= ' BT 100 Tz ET';
- }
- }
- // reset word spacing
- if (!(($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) AND ($align == 'J')) {
- $rs .= ' BT 0 Tw ET';
- }
- $this->lasth = $h;
- if ($ln > 0) {
- //Go to the beginning of the next line
- $this->y += $h;
- if ($ln == 1) {
+ case 'L': {
if ($this->rtl) {
- $this->x = $this->w - $this->rMargin;
+ $dx = $w - $width - $this->cell_padding['L'];
} else {
- $this->x = $this->lMargin;
+ $dx = $this->cell_padding['L'];
}
+ break;
}
- } else {
- // go left or right by case
- if ($this->rtl) {
- $this->x -= $w;
- } else {
- $this->x += $w;
+ case 'J':
+ default: {
+ if ($this->rtl) {
+ $dx = $this->cell_padding['R'];
+ } else {
+ $dx = $this->cell_padding['L'];
+ }
+ break;
}
}
- $gstyles = ''.$this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor.' '.$this->FillColor."\n";
- $rs = $gstyles.$rs;
- return $rs;
- }
-
- /**
- * This method allows printing text with line breaks.
- * They can be automatic (as soon as the text reaches the right border of the cell) or explicit (via the \n character). As many cells as necessary are output, one below the other.
- * Text can be aligned, centered or justified. The cell block can be framed and the background painted.
- * @param float $w Width of cells. If 0, they extend up to the right margin of the page.
- * @param float $h Cell minimum height. The cell extends automatically if needed.
- * @param string $txt String to print
- * @param mixed $border Indicates if borders must be drawn around the cell block. The value can be either a number:0: no border (default) 1: frame or a string containing some or all of the following characters (in any order):L: left T: top R: right B: bottom
- * @param string $align Allows to center or align the text. Possible values are:L or empty string: left align C: center R: right align J: justification (default value when $ishtml=false)
- * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0.
- * @param int $ln Indicates where the current position should go after the call. Possible values are:0: to the right 1: to the beginning of the next line [DEFAULT] 2: below
- * @param float $x x position in user units
- * @param float $y y position in user units
- * @param boolean $reseth if true reset the last cell height (default true).
- * @param int $stretch stretch carachter mode: 0 = disabled 1 = horizontal scaling only if necessary 2 = forced horizontal scaling 3 = character spacing only if necessary 4 = forced character spacing
- * @param boolean $ishtml set to true if $txt is HTML content (default = false).
- * @param boolean $autopadding if true, uses internal padding and automatically adjust it to account for line width.
- * @param float $maxh maximum height. It should be >= $h and less then remaining space to the bottom of the page, or 0 for disable this feature. This feature works only when $ishtml=false.
- * @return int Return the number of cells or 1 for html mode.
- * @access public
- * @since 1.3
- * @see SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), Cell(), Write(), SetAutoPageBreak()
- */
- public function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=0, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0) {
- if ($this->empty_string($this->lasth) OR $reseth) {
- //set row height
- $this->lasth = $this->FontSize * $this->cell_height_ratio;
- }
- if (!$this->empty_string($y)) {
- $this->SetY($y);
- } else {
- $y = $this->GetY();
- }
- // check for page break
- $this->checkPageBreak($h);
- $y = $this->GetY();
- // get current page number
- $startpage = $this->page;
- if (!$this->empty_string($x)) {
- $this->SetX($x);
- } else {
- $x = $this->GetX();
- }
- if ($this->empty_string($w) OR ($w <= 0)) {
- if ($this->rtl) {
- $w = $this->x - $this->lMargin;
- } else {
- $w = $this->w - $this->rMargin - $this->x;
- }
- }
- // store original margin values
- $lMargin = $this->lMargin;
- $rMargin = $this->rMargin;
if ($this->rtl) {
- $this->SetRightMargin($this->w - $this->x);
- $this->SetLeftMargin($this->x - $w);
+ $xdx = $x - $dx - $width;
} else {
- $this->SetLeftMargin($this->x);
- $this->SetRightMargin($this->w - $this->x - $w);
+ $xdx = $x + $dx;
}
- $starty = $this->y;
- if ($autopadding) {
- // Adjust internal padding
- if ($this->cMargin < ($this->LineWidth / 2)) {
- $this->cMargin = ($this->LineWidth / 2);
- }
- // Add top space if needed
- if (($this->lasth - $this->FontSize) < $this->LineWidth) {
- $this->y += $this->LineWidth / 2;
- }
- // add top padding
- $this->y += $this->cMargin;
- }
- if ($ishtml) {
- // ******* Write HTML text
- $this->writeHTML($txt, true, 0, $reseth, true, $align);
- $nl = 1;
- } else {
- // ******* Write text
- $nl = $this->Write($this->lasth, $txt, '', 0, $align, true, $stretch, false, false, $maxh);
- }
- if ($autopadding) {
- // add bottom padding
- $this->y += $this->cMargin;
- // Add bottom space if needed
- if (($this->lasth - $this->FontSize) < $this->LineWidth) {
- $this->y += $this->LineWidth / 2;
- }
- }
- // Get end-of-text Y position
- $currentY = $this->y;
- // get latest page number
- $endpage = $this->page;
- // check if a new page has been created
- if ($endpage > $startpage) {
- // design borders around HTML cells.
- for ($page=$startpage; $page <= $endpage; ++$page) {
- $this->setPage($page);
- if ($page == $startpage) {
- $this->y = $starty; // put cursor at the beginning of cell on the first page
- $h = $this->getPageHeight() - $starty - $this->getBreakMargin();
- $cborder = $this->getBorderMode($border, $position='start');
- } elseif ($page == $endpage) {
- $this->y = $this->tMargin; // put cursor at the beginning of last page
- $h = $currentY - $this->tMargin;
- $cborder = $this->getBorderMode($border, $position='end');
- } else {
- $this->y = $this->tMargin; // put cursor at the beginning of the current page
- $h = $this->getPageHeight() - $this->tMargin - $this->getBreakMargin();
- $cborder = $this->getBorderMode($border, $position='middle');
- }
- $nx = $x;
- // account for margin changes
- if ($page > $startpage) {
- if (($this->rtl) AND ($this->pagedim[$page]['orm'] != $this->pagedim[$startpage]['orm'])) {
- $nx = $x + ($this->pagedim[$page]['orm'] - $this->pagedim[$startpage]['orm']);
- } elseif ((!$this->rtl) AND ($this->pagedim[$page]['olm'] != $this->pagedim[$startpage]['olm'])) {
- $nx = $x + ($this->pagedim[$page]['olm'] - $this->pagedim[$startpage]['olm']);
+ $xdk = $xdx * $k;
+ // print text
+ $s .= sprintf('BT %.2F %.2F Td [(%s)] TJ ET', $xdk, (($this->h - $basefonty) * $k), $txt2);
+ if (isset($uniblock)) {
+ // print overlapping characters as separate string
+ $xshift = 0; // horizontal shift
+ $ty = (($this->h - $basefonty + (0.2 * $this->FontSize)) * $k);
+ $spw = (($w - $txwidth - $this->cell_padding['L'] - $this->cell_padding['R']) / ($ns?$ns:1));
+ foreach ($uniblock as $uk => $uniarr) {
+ if (($uk % 2) == 0) {
+ // x space to skip
+ if ($spacewidth != 0) {
+ // justification shift
+ $xshift += (count(array_keys($uniarr, 32)) * $spw);
}
- }
- $this->SetX($nx);
- $ccode = $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, false);
- if ($cborder OR $fill) {
- $pagebuff = $this->getPageBuffer($this->page);
- $pstart = substr($pagebuff, 0, $this->intmrk[$this->page]);
- $pend = substr($pagebuff, $this->intmrk[$this->page]);
- $this->setPageBuffer($this->page, $pstart.$ccode."\n".$pend);
- $this->intmrk[$this->page] += strlen($ccode."\n");
+ $xshift += $this->GetArrStringWidth($uniarr); // + shift justification
+ } else {
+ // character to print
+ $topchr = $this->arrUTF8ToUTF16BE($uniarr, false);
+ $topchr = $this->_escape($topchr);
+ $s .= sprintf(' BT %.2F %.2F Td [(%s)] TJ ET', ($xdk + ($xshift * $k)), $ty, $topchr);
}
}
+ }
+ if ($this->underline) {
+ $s .= ' '.$this->_dounderlinew($xdx, $basefonty, $width);
+ }
+ if ($this->linethrough) {
+ $s .= ' '.$this->_dolinethroughw($xdx, $basefonty, $width);
+ }
+ if ($this->overline) {
+ $s .= ' '.$this->_dooverlinew($xdx, $basefonty, $width);
+ }
+ if ($this->ColorFlag AND ($this->textrendermode < 4)) {
+ $s .= ' Q';
+ }
+ if ($link) {
+ $this->Link($xdx, $yt, $width, ($this->FontAscent + $this->FontDescent), $link, $ns);
+ }
+ }
+ // output cell
+ if ($s) {
+ // output cell
+ $rs .= $s;
+ if ($this->font_spacing != 0) {
+ // reset font spacing mode
+ $rs .= ' BT 0 Tc ET';
+ }
+ if ($this->font_stretching != 100) {
+ // reset font stretching mode
+ $rs .= ' BT 100 Tz ET';
+ }
+ }
+ // reset word spacing
+ if (!$this->isUnicodeFont() AND ($align == 'J')) {
+ $rs .= ' BT 0 Tw ET';
+ }
+ // reset stretching and spacing
+ $this->font_stretching = $prev_font_stretching;
+ $this->font_spacing = $prev_font_spacing;
+ $this->lasth = $h;
+ if ($ln > 0) {
+ //Go to the beginning of the next line
+ $this->y = $y + $h + $this->cell_margin['B'];
+ if ($ln == 1) {
+ if ($this->rtl) {
+ $this->x = $this->w - $this->rMargin;
+ } else {
+ $this->x = $this->lMargin;
+ }
+ }
+ } else {
+ // go left or right by case
+ if ($this->rtl) {
+ $this->x = $x - $w - $this->cell_margin['L'];
} else {
- $h = max($h, ($currentY - $y));
- // put cursor at the beginning of text
- $this->SetY($y);
+ $this->x = $x + $w + $this->cell_margin['R'];
+ }
+ }
+ $gstyles = ''.$this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor.' '.$this->FillColor."\n";
+ $rs = $gstyles.$rs;
+ $this->cell_padding = $prev_cell_padding;
+ $this->cell_margin = $prev_cell_margin;
+ return $rs;
+ }
+
+ /**
+ * Returns the code to draw the cell border
+ * @param $x (float) X coordinate.
+ * @param $y (float) Y coordinate.
+ * @param $w (float) Cell width.
+ * @param $h (float) Cell height.
+ * @param $brd (mixed) Indicates if borders must be drawn around the cell. The value can be a number:0: no border (default) 1: frame or a string containing some or all of the following characters (in any order):L: left T: top R: right B: bottom or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
+ * @return string containing cell border code
+ * @protected
+ * @see SetLineStyle()
+ * @since 5.7.000 (2010-08-02)
+ */
+ protected function getCellBorder($x, $y, $w, $h, $brd) {
+ $s = ''; // string to be returned
+ if (empty($brd)) {
+ return $s;
+ }
+ if ($brd == 1) {
+ $brd = array('LRTB' => true);
+ }
+ // calculate coordinates for border
+ $k = $this->k;
+ if ($this->rtl) {
+ $xeL = ($x - $w) * $k;
+ $xeR = $x * $k;
+ } else {
+ $xeL = $x * $k;
+ $xeR = ($x + $w) * $k;
+ }
+ $yeL = (($this->h - ($y + $h)) * $k);
+ $yeT = (($this->h - $y) * $k);
+ $xeT = $xeL;
+ $xeB = $xeR;
+ $yeR = $yeT;
+ $yeB = $yeL;
+ if (is_string($brd)) {
+ // convert string to array
+ $slen = strlen($brd);
+ $newbrd = array();
+ for ($i = 0; $i < $slen; ++$i) {
+ $newbrd[$brd{$i}] = array('cap' => 'square', 'join' => 'miter');
+ }
+ $brd = $newbrd;
+ }
+ if (isset($brd['mode'])) {
+ $mode = $brd['mode'];
+ unset($brd['mode']);
+ } else {
+ $mode = 'normal';
+ }
+ foreach ($brd as $border => $style) {
+ if (is_array($style) AND !empty($style)) {
+ // apply border style
+ $prev_style = $this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor.' ';
+ $s .= $this->SetLineStyle($style, true)."\n";
+ }
+ switch ($mode) {
+ case 'ext': {
+ $off = (($this->LineWidth / 2) * $k);
+ $xL = $xeL - $off;
+ $xR = $xeR + $off;
+ $yT = $yeT + $off;
+ $yL = $yeL - $off;
+ $xT = $xL;
+ $xB = $xR;
+ $yR = $yT;
+ $yB = $yL;
+ $w += $this->LineWidth;
+ $h += $this->LineWidth;
+ break;
+ }
+ case 'int': {
+ $off = ($this->LineWidth / 2) * $k;
+ $xL = $xeL + $off;
+ $xR = $xeR - $off;
+ $yT = $yeT - $off;
+ $yL = $yeL + $off;
+ $xT = $xL;
+ $xB = $xR;
+ $yR = $yT;
+ $yB = $yL;
+ $w -= $this->LineWidth;
+ $h -= $this->LineWidth;
+ break;
+ }
+ case 'normal':
+ default: {
+ $xL = $xeL;
+ $xT = $xeT;
+ $xB = $xeB;
+ $xR = $xeR;
+ $yL = $yeL;
+ $yT = $yeT;
+ $yB = $yeB;
+ $yR = $yeR;
+ break;
+ }
+ }
+ // draw borders by case
+ if (strlen($border) == 4) {
+ $s .= sprintf('%.2F %.2F %.2F %.2F re S ', $xT, $yT, ($w * $k), (-$h * $k));
+ } elseif (strlen($border) == 3) {
+ if (strpos($border,'B') === false) { // LTR
+ $s .= sprintf('%.2F %.2F m ', $xL, $yL);
+ $s .= sprintf('%.2F %.2F l ', $xT, $yT);
+ $s .= sprintf('%.2F %.2F l ', $xR, $yR);
+ $s .= sprintf('%.2F %.2F l ', $xB, $yB);
+ $s .= 'S ';
+ } elseif (strpos($border,'L') === false) { // TRB
+ $s .= sprintf('%.2F %.2F m ', $xT, $yT);
+ $s .= sprintf('%.2F %.2F l ', $xR, $yR);
+ $s .= sprintf('%.2F %.2F l ', $xB, $yB);
+ $s .= sprintf('%.2F %.2F l ', $xL, $yL);
+ $s .= 'S ';
+ } elseif (strpos($border,'T') === false) { // RBL
+ $s .= sprintf('%.2F %.2F m ', $xR, $yR);
+ $s .= sprintf('%.2F %.2F l ', $xB, $yB);
+ $s .= sprintf('%.2F %.2F l ', $xL, $yL);
+ $s .= sprintf('%.2F %.2F l ', $xT, $yT);
+ $s .= 'S ';
+ } elseif (strpos($border,'R') === false) { // BLT
+ $s .= sprintf('%.2F %.2F m ', $xB, $yB);
+ $s .= sprintf('%.2F %.2F l ', $xL, $yL);
+ $s .= sprintf('%.2F %.2F l ', $xT, $yT);
+ $s .= sprintf('%.2F %.2F l ', $xR, $yR);
+ $s .= 'S ';
+ }
+ } elseif (strlen($border) == 2) {
+ if ((strpos($border,'L') !== false) AND (strpos($border,'T') !== false)) { // LT
+ $s .= sprintf('%.2F %.2F m ', $xL, $yL);
+ $s .= sprintf('%.2F %.2F l ', $xT, $yT);
+ $s .= sprintf('%.2F %.2F l ', $xR, $yR);
+ $s .= 'S ';
+ } elseif ((strpos($border,'T') !== false) AND (strpos($border,'R') !== false)) { // TR
+ $s .= sprintf('%.2F %.2F m ', $xT, $yT);
+ $s .= sprintf('%.2F %.2F l ', $xR, $yR);
+ $s .= sprintf('%.2F %.2F l ', $xB, $yB);
+ $s .= 'S ';
+ } elseif ((strpos($border,'R') !== false) AND (strpos($border,'B') !== false)) { // RB
+ $s .= sprintf('%.2F %.2F m ', $xR, $yR);
+ $s .= sprintf('%.2F %.2F l ', $xB, $yB);
+ $s .= sprintf('%.2F %.2F l ', $xL, $yL);
+ $s .= 'S ';
+ } elseif ((strpos($border,'B') !== false) AND (strpos($border,'L') !== false)) { // BL
+ $s .= sprintf('%.2F %.2F m ', $xB, $yB);
+ $s .= sprintf('%.2F %.2F l ', $xL, $yL);
+ $s .= sprintf('%.2F %.2F l ', $xT, $yT);
+ $s .= 'S ';
+ } elseif ((strpos($border,'L') !== false) AND (strpos($border,'R') !== false)) { // LR
+ $s .= sprintf('%.2F %.2F m ', $xL, $yL);
+ $s .= sprintf('%.2F %.2F l ', $xT, $yT);
+ $s .= 'S ';
+ $s .= sprintf('%.2F %.2F m ', $xR, $yR);
+ $s .= sprintf('%.2F %.2F l ', $xB, $yB);
+ $s .= 'S ';
+ } elseif ((strpos($border,'T') !== false) AND (strpos($border,'B') !== false)) { // TB
+ $s .= sprintf('%.2F %.2F m ', $xT, $yT);
+ $s .= sprintf('%.2F %.2F l ', $xR, $yR);
+ $s .= 'S ';
+ $s .= sprintf('%.2F %.2F m ', $xB, $yB);
+ $s .= sprintf('%.2F %.2F l ', $xL, $yL);
+ $s .= 'S ';
+ }
+ } else { // strlen($border) == 1
+ if (strpos($border,'L') !== false) { // L
+ $s .= sprintf('%.2F %.2F m ', $xL, $yL);
+ $s .= sprintf('%.2F %.2F l ', $xT, $yT);
+ $s .= 'S ';
+ } elseif (strpos($border,'T') !== false) { // T
+ $s .= sprintf('%.2F %.2F m ', $xT, $yT);
+ $s .= sprintf('%.2F %.2F l ', $xR, $yR);
+ $s .= 'S ';
+ } elseif (strpos($border,'R') !== false) { // R
+ $s .= sprintf('%.2F %.2F m ', $xR, $yR);
+ $s .= sprintf('%.2F %.2F l ', $xB, $yB);
+ $s .= 'S ';
+ } elseif (strpos($border,'B') !== false) { // B
+ $s .= sprintf('%.2F %.2F m ', $xB, $yB);
+ $s .= sprintf('%.2F %.2F l ', $xL, $yL);
+ $s .= 'S ';
+ }
+ }
+ if (is_array($style) AND !empty($style)) {
+ // reset border style to previous value
+ $s .= "\n".$this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor."\n";
+ }
+ }
+ return $s;
+ }
+
+ /**
+ * This method allows printing text with line breaks.
+ * They can be automatic (as soon as the text reaches the right border of the cell) or explicit (via the \n character). As many cells as necessary are output, one below the other.
+ * Text can be aligned, centered or justified. The cell block can be framed and the background painted.
+ * @param $w (float) Width of cells. If 0, they extend up to the right margin of the page.
+ * @param $h (float) Cell minimum height. The cell extends automatically if needed.
+ * @param $txt (string) String to print
+ * @param $border (mixed) Indicates if borders must be drawn around the cell. The value can be a number:0: no border (default) 1: frame or a string containing some or all of the following characters (in any order):L: left T: top R: right B: bottom or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
+ * @param $align (string) Allows to center or align the text. Possible values are:L or empty string: left align C: center R: right align J: justification (default value when $ishtml=false)
+ * @param $fill (boolean) Indicates if the cell background must be painted (true) or transparent (false).
+ * @param $ln (int) Indicates where the current position should go after the call. Possible values are:0: to the right 1: to the beginning of the next line [DEFAULT] 2: below
+ * @param $x (float) x position in user units
+ * @param $y (float) y position in user units
+ * @param $reseth (boolean) if true reset the last cell height (default true).
+ * @param $stretch (int) font stretch mode: 0 = disabled 1 = horizontal scaling only if text is larger than cell width 2 = forced horizontal scaling to fit cell width 3 = character spacing only if text is larger than cell width 4 = forced character spacing to fit cell width General font stretching and scaling values will be preserved when possible.
+ * @param $ishtml (boolean) INTERNAL USE ONLY -- set to true if $txt is HTML content (default = false). Never set this parameter to true, use instead writeHTMLCell() or writeHTML() methods.
+ * @param $autopadding (boolean) if true, uses internal padding and automatically adjust it to account for line width.
+ * @param $maxh (float) maximum height. It should be >= $h and less then remaining space to the bottom of the page, or 0 for disable this feature. This feature works only when $ishtml=false.
+ * @param $valign (string) Vertical alignment of text (requires $maxh = $h > 0). Possible values are:. This feature works only when $ishtml=false and the cell must fit in a single page.
+ * @param $fitcell (boolean) if true attempt to fit all the text within the cell by reducing the font size (do not work in HTML mode).
+ * @return int Return the number of cells or 1 for html mode.
+ * @public
+ * @since 1.3
+ * @see SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), Cell(), Write(), SetAutoPageBreak()
+ */
+ public function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=false, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0, $valign='T', $fitcell=false) {
+ $prev_cell_margin = $this->cell_margin;
+ $prev_cell_padding = $this->cell_padding;
+ // adjust internal padding
+ $this->adjustCellPadding($border);
+ $mc_padding = $this->cell_padding;
+ $mc_margin = $this->cell_margin;
+ $this->cell_padding['T'] = 0;
+ $this->cell_padding['B'] = 0;
+ $this->setCellMargins(0, 0, 0, 0);
+ if ($this->empty_string($this->lasth) OR $reseth) {
+ // reset row height
+ $this->resetLastH();
+ }
+ if (!$this->empty_string($y)) {
+ $this->SetY($y);
+ } else {
+ $y = $this->GetY();
+ }
+ $resth = 0;
+ if (($h > 0) AND $this->inPageBody() AND (($y + $h + $mc_margin['T'] + $mc_margin['B']) > $this->PageBreakTrigger)) {
+ // spit cell in more pages/columns
+ $newh = ($this->PageBreakTrigger - $y);
+ $resth = ($h - $newh); // cell to be printed on the next page/column
+ $h = $newh;
+ }
+ // get current page number
+ $startpage = $this->page;
+ // get current column
+ $startcolumn = $this->current_column;
+ if (!$this->empty_string($x)) {
+ $this->SetX($x);
+ } else {
+ $x = $this->GetX();
+ }
+ // check page for no-write regions and adapt page margins if necessary
+ list($x, $y) = $this->checkPageRegions(0, $x, $y);
+ // apply margins
+ $oy = $y + $mc_margin['T'];
+ if ($this->rtl) {
+ $ox = $this->w - $x - $mc_margin['R'];
+ } else {
+ $ox = $x + $mc_margin['L'];
+ }
+ $this->x = $ox;
+ $this->y = $oy;
+ // set width
+ if ($this->empty_string($w) OR ($w <= 0)) {
+ if ($this->rtl) {
+ $w = $this->x - $this->lMargin - $mc_margin['L'];
+ } else {
+ $w = $this->w - $this->x - $this->rMargin - $mc_margin['R'];
+ }
+ }
+ // store original margin values
+ $lMargin = $this->lMargin;
+ $rMargin = $this->rMargin;
+ if ($this->rtl) {
+ $this->rMargin = $this->w - $this->x;
+ $this->lMargin = $this->x - $w;
+ } else {
+ $this->lMargin = $this->x;
+ $this->rMargin = $this->w - $this->x - $w;
+ }
+ if ($autopadding) {
+ // add top padding
+ $this->y += $mc_padding['T'];
+ }
+ if ($ishtml) { // ******* Write HTML text
+ $this->writeHTML($txt, true, false, $reseth, true, $align);
+ $nl = 1;
+ } else { // ******* Write simple text
+ $prev_FontSizePt = $this->FontSizePt;
+ // vertical alignment
+ if ($maxh > 0) {
+ // get text height
+ $text_height = $this->getStringHeight($w, $txt, $reseth, $autopadding, $mc_padding, $border);
+ if ($fitcell) {
+ // try to reduce font size to fit text on cell (use a quick search algorithm)
+ $fmin = 1;
+ $fmax = $this->FontSizePt;
+ $prev_text_height = $text_height;
+ $maxit = 100; // max number of iterations
+ while ($maxit > 0) {
+ $fmid = (($fmax + $fmin) / 2);
+ $this->SetFontSize($fmid, false);
+ $this->resetLastH();
+ $text_height = $this->getStringHeight($w, $txt, $reseth, $autopadding, $mc_padding, $border);
+ if (($text_height == $maxh) OR (($text_height < $maxh) AND ($fmin >= ($fmax - 0.01)))) {
+ break;
+ } elseif ($text_height < $maxh) {
+ $fmin = $fmid;
+ } else {
+ $fmax = $fmid;
+ }
+ --$maxit;
+ }
+ $this->SetFontSize($this->FontSizePt);
+ }
+ if ($text_height < $maxh) {
+ if ($valign == 'M') {
+ // text vertically centered
+ $this->y += (($maxh - $text_height) / 2);
+ } elseif ($valign == 'B') {
+ // text vertically aligned on bottom
+ $this->y += ($maxh - $text_height);
+ }
+ }
+ }
+ $nl = $this->Write($this->lasth, $txt, '', 0, $align, true, $stretch, false, true, $maxh, 0, $mc_margin);
+ if ($fitcell) {
+ // restore font size
+ $this->SetFontSize($prev_FontSizePt);
+ }
+ }
+ if ($autopadding) {
+ // add bottom padding
+ $this->y += $mc_padding['B'];
+ }
+ // Get end-of-text Y position
+ $currentY = $this->y;
+ // get latest page number
+ $endpage = $this->page;
+ if ($resth > 0) {
+ $skip = ($endpage - $startpage);
+ $tmpresth = $resth;
+ while ($tmpresth > 0) {
+ if ($skip <= 0) {
+ // add a page (or trig AcceptPageBreak() for multicolumn mode)
+ $this->checkPageBreak($this->PageBreakTrigger + 1);
+ }
+ if ($this->num_columns > 1) {
+ $tmpresth -= ($this->h - $this->y - $this->bMargin);
+ } else {
+ $tmpresth -= ($this->h - $this->tMargin - $this->bMargin);
+ }
+ --$skip;
+ }
+ $currentY = $this->y;
+ $endpage = $this->page;
+ }
+ // get latest column
+ $endcolumn = $this->current_column;
+ if ($this->num_columns == 0) {
+ $this->num_columns = 1;
+ }
+ // get border modes
+ $border_start = $this->getBorderMode($border, $position='start');
+ $border_end = $this->getBorderMode($border, $position='end');
+ $border_middle = $this->getBorderMode($border, $position='middle');
+ // design borders around HTML cells.
+ for ($page = $startpage; $page <= $endpage; ++$page) { // for each page
+ $ccode = '';
+ $this->setPage($page);
+ if ($this->num_columns < 2) {
+ // single-column mode
$this->SetX($x);
- // design a cell around the text
- $ccode = $this->getCellCode($w, $h, '', $border, 1, '', $fill, '', 0, true);
- if ($border OR $fill) {
+ $this->y = $this->tMargin;
+ }
+ // account for margin changes
+ if ($page > $startpage) {
+ if (($this->rtl) AND ($this->pagedim[$page]['orm'] != $this->pagedim[$startpage]['orm'])) {
+ $this->x -= ($this->pagedim[$page]['orm'] - $this->pagedim[$startpage]['orm']);
+ } elseif ((!$this->rtl) AND ($this->pagedim[$page]['olm'] != $this->pagedim[$startpage]['olm'])) {
+ $this->x += ($this->pagedim[$page]['olm'] - $this->pagedim[$startpage]['olm']);
+ }
+ }
+ if ($startpage == $endpage) {
+ // single page
+ for ($column = $startcolumn; $column <= $endcolumn; ++$column) { // for each column
+ $this->selectColumn($column);
+ if ($this->rtl) {
+ $this->x -= $mc_margin['R'];
+ } else {
+ $this->x += $mc_margin['L'];
+ }
+ if ($startcolumn == $endcolumn) { // single column
+ $cborder = $border;
+ $h = max($h, ($currentY - $oy));
+ $this->y = $oy;
+ } elseif ($column == $startcolumn) { // first column
+ $cborder = $border_start;
+ $this->y = $oy;
+ $h = $this->h - $this->y - $this->bMargin;
+ } elseif ($column == $endcolumn) { // end column
+ $cborder = $border_end;
+ $h = $currentY - $this->y;
+ if ($resth > $h) {
+ $h = $resth;
+ }
+ } else { // middle column
+ $cborder = $border_middle;
+ $h = $this->h - $this->y - $this->bMargin;
+ $resth -= $h;
+ }
+ $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n";
+ } // end for each column
+ } elseif ($page == $startpage) { // first page
+ for ($column = $startcolumn; $column < $this->num_columns; ++$column) { // for each column
+ $this->selectColumn($column);
+ if ($this->rtl) {
+ $this->x -= $mc_margin['R'];
+ } else {
+ $this->x += $mc_margin['L'];
+ }
+ if ($column == $startcolumn) { // first column
+ $cborder = $border_start;
+ $this->y = $oy;
+ $h = $this->h - $this->y - $this->bMargin;
+ } else { // middle column
+ $cborder = $border_middle;
+ $h = $this->h - $this->y - $this->bMargin;
+ $resth -= $h;
+ }
+ $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n";
+ } // end for each column
+ } elseif ($page == $endpage) { // last page
+ for ($column = 0; $column <= $endcolumn; ++$column) { // for each column
+ $this->selectColumn($column);
+ if ($this->rtl) {
+ $this->x -= $mc_margin['R'];
+ } else {
+ $this->x += $mc_margin['L'];
+ }
+ if ($column == $endcolumn) {
+ // end column
+ $cborder = $border_end;
+ $h = $currentY - $this->y;
+ if ($resth > $h) {
+ $h = $resth;
+ }
+ } else {
+ // middle column
+ $cborder = $border_middle;
+ $h = $this->h - $this->y - $this->bMargin;
+ $resth -= $h;
+ }
+ $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n";
+ } // end for each column
+ } else { // middle page
+ for ($column = 0; $column < $this->num_columns; ++$column) { // for each column
+ $this->selectColumn($column);
+ if ($this->rtl) {
+ $this->x -= $mc_margin['R'];
+ } else {
+ $this->x += $mc_margin['L'];
+ }
+ $cborder = $border_middle;
+ $h = $this->h - $this->y - $this->bMargin;
+ $resth -= $h;
+ $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n";
+ } // end for each column
+ }
+ if ($cborder OR $fill) {
+ $offsetlen = strlen($ccode);
+ // draw border and fill
+ if ($this->inxobj) {
+ // we are inside an XObject template
+ if (end($this->xobjects[$this->xobjid]['transfmrk']) !== false) {
+ $pagemarkkey = key($this->xobjects[$this->xobjid]['transfmrk']);
+ $pagemark = $this->xobjects[$this->xobjid]['transfmrk'][$pagemarkkey];
+ $this->xobjects[$this->xobjid]['transfmrk'][$pagemarkkey] += $offsetlen;
+ } else {
+ $pagemark = $this->xobjects[$this->xobjid]['intmrk'];
+ $this->xobjects[$this->xobjid]['intmrk'] += $offsetlen;
+ }
+ $pagebuff = $this->xobjects[$this->xobjid]['outdata'];
+ $pstart = substr($pagebuff, 0, $pagemark);
+ $pend = substr($pagebuff, $pagemark);
+ $this->xobjects[$this->xobjid]['outdata'] = $pstart.$ccode.$pend;
+ } else {
if (end($this->transfmrk[$this->page]) !== false) {
$pagemarkkey = key($this->transfmrk[$this->page]);
- $pagemark = &$this->transfmrk[$this->page][$pagemarkkey];
+ $pagemark = $this->transfmrk[$this->page][$pagemarkkey];
+ $this->transfmrk[$this->page][$pagemarkkey] += $offsetlen;
} elseif ($this->InFooter) {
- $pagemark = &$this->footerpos[$this->page];
+ $pagemark = $this->footerpos[$this->page];
+ $this->footerpos[$this->page] += $offsetlen;
} else {
- $pagemark = &$this->intmrk[$this->page];
+ $pagemark = $this->intmrk[$this->page];
+ $this->intmrk[$this->page] += $offsetlen;
}
$pagebuff = $this->getPageBuffer($this->page);
$pstart = substr($pagebuff, 0, $pagemark);
$pend = substr($pagebuff, $pagemark);
- $this->setPageBuffer($this->page, $pstart.$ccode."\n".$pend);
- $pagemark += strlen($ccode."\n");
+ $this->setPageBuffer($this->page, $pstart.$ccode.$pend);
}
}
- // Get end-of-cell Y position
- $currentY = $this->GetY();
- // restore original margin values
- $this->SetLeftMargin($lMargin);
- $this->SetRightMargin($rMargin);
- if ($ln > 0) {
- //Go to the beginning of the next line
- $this->SetY($currentY);
- if ($ln == 2) {
- $this->SetX($x + $w);
+ } // end for each page
+ // Get end-of-cell Y position
+ $currentY = $this->GetY();
+ // restore previous values
+ if ($this->num_columns > 1) {
+ $this->selectColumn();
+ } else {
+ // restore original margins
+ $this->lMargin = $lMargin;
+ $this->rMargin = $rMargin;
+ if ($this->page > $startpage) {
+ // check for margin variations between pages (i.e. booklet mode)
+ $dl = ($this->pagedim[$this->page]['olm'] - $this->pagedim[$startpage]['olm']);
+ $dr = ($this->pagedim[$this->page]['orm'] - $this->pagedim[$startpage]['orm']);
+ if (($dl != 0) OR ($dr != 0)) {
+ $this->lMargin += $dl;
+ $this->rMargin += $dr;
}
- } else {
- // go left or right by case
- $this->setPage($startpage);
- $this->y = $y;
- $this->SetX($x + $w);
}
- $this->setContentMark();
- return $nl;
}
-
- /**
- * Get the border mode accounting for multicell position (opens bottom side of multicell crossing pages)
- * @param mixed $border Indicates if borders must be drawn around the cell block. The value can be either a number:0: no border (default) 1: frame or a string containing some or all of the following characters (in any order):L: left T: top R: right B: bottom
- * @param string multicell position: 'start', 'middle', 'end'
- * @return border mode
- * @access protected
- * @since 4.4.002 (2008-12-09)
- */
- protected function getBorderMode($border, $position='start') {
- if ((!$this->opencell) AND ($border == 1)) {
- return 1;
+ if ($ln > 0) {
+ //Go to the beginning of the next line
+ $this->SetY($currentY + $mc_margin['B']);
+ if ($ln == 2) {
+ $this->SetX($x + $w + $mc_margin['L'] + $mc_margin['R']);
}
- $cborder = '';
+ } else {
+ // go left or right by case
+ $this->setPage($startpage);
+ $this->y = $y;
+ $this->SetX($x + $w + $mc_margin['L'] + $mc_margin['R']);
+ }
+ $this->setContentMark();
+ $this->cell_padding = $prev_cell_padding;
+ $this->cell_margin = $prev_cell_margin;
+ return $nl;
+ }
+
+ /**
+ * Get the border mode accounting for multicell position (opens bottom side of multicell crossing pages)
+ * @param $brd (mixed) Indicates if borders must be drawn around the cell block. The value can be a number:0: no border (default) 1: frame or a string containing some or all of the following characters (in any order):L: left T: top R: right B: bottom or an array of line styles for each border group: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
+ * @param $position (string) multicell position: 'start', 'middle', 'end'
+ * @return border mode array
+ * @protected
+ * @since 4.4.002 (2008-12-09)
+ */
+ protected function getBorderMode($brd, $position='start') {
+ if ((!$this->opencell) OR empty($brd)) {
+ return $brd;
+ }
+ if ($brd == 1) {
+ $brd = 'LTRB';
+ }
+ if (is_string($brd)) {
+ // convert string to array
+ $slen = strlen($brd);
+ $newbrd = array();
+ for ($i = 0; $i < $slen; ++$i) {
+ $newbrd[$brd{$i}] = array('cap' => 'square', 'join' => 'miter');
+ }
+ $brd = $newbrd;
+ }
+ foreach ($brd as $border => $style) {
switch ($position) {
case 'start': {
- if ($border == 1) {
- $cborder = 'LTR';
- } else {
- if (!(false === strpos($border, 'L'))) {
- $cborder .= 'L';
- }
- if (!(false === strpos($border, 'T'))) {
- $cborder .= 'T';
- }
- if (!(false === strpos($border, 'R'))) {
- $cborder .= 'R';
- }
- if ((!$this->opencell) AND (!(false === strpos($border, 'B')))) {
- $cborder .= 'B';
+ if (strpos($border, 'B') !== false) {
+ // remove bottom line
+ $newkey = str_replace('B', '', $border);
+ if (strlen($newkey) > 0) {
+ $brd[$newkey] = $style;
}
+ unset($brd[$border]);
}
break;
}
case 'middle': {
- if ($border == 1) {
- $cborder = 'LR';
- } else {
- if (!(false === strpos($border, 'L'))) {
- $cborder .= 'L';
+ if (strpos($border, 'B') !== false) {
+ // remove bottom line
+ $newkey = str_replace('B', '', $border);
+ if (strlen($newkey) > 0) {
+ $brd[$newkey] = $style;
}
- if ((!$this->opencell) AND (!(false === strpos($border, 'T')))) {
- $cborder .= 'T';
- }
- if (!(false === strpos($border, 'R'))) {
- $cborder .= 'R';
- }
- if ((!$this->opencell) AND (!(false === strpos($border, 'B')))) {
- $cborder .= 'B';
+ unset($brd[$border]);
+ $border = $newkey;
+ }
+ if (strpos($border, 'T') !== false) {
+ // remove bottom line
+ $newkey = str_replace('T', '', $border);
+ if (strlen($newkey) > 0) {
+ $brd[$newkey] = $style;
}
+ unset($brd[$border]);
}
break;
}
case 'end': {
- if ($border == 1) {
- $cborder = 'LRB';
- } else {
- if (!(false === strpos($border, 'L'))) {
- $cborder .= 'L';
- }
- if ((!$this->opencell) AND (!(false === strpos($border, 'T')))) {
- $cborder .= 'T';
- }
- if (!(false === strpos($border, 'R'))) {
- $cborder .= 'R';
- }
- if (!(false === strpos($border, 'B'))) {
- $cborder .= 'B';
+ if (strpos($border, 'T') !== false) {
+ // remove bottom line
+ $newkey = str_replace('T', '', $border);
+ if (strlen($newkey) > 0) {
+ $brd[$newkey] = $style;
}
+ unset($brd[$border]);
}
break;
}
- default: {
- $cborder = $border;
- break;
- }
}
- return $cborder;
}
+ return $brd;
+ }
- /**
- * This method returns the estimated number of lines required to print the text.
- * @param string $txt text to print
- * @param float $w width of cell. If 0, they extend up to the right margin of the page.
- * @return int Return the estimated number of lines.
- * @access public
- * @since 4.5.011
- */
- public function getNumLines($txt, $w=0) {
- $lines = 0;
- if ($this->empty_string($w) OR ($w <= 0)) {
- if ($this->rtl) {
- $w = $this->x - $this->lMargin;
- } else {
- $w = $this->w - $this->rMargin - $this->x;
- }
- }
- // max column width
- $wmax = $w - (2 * $this->cMargin);
- // remove carriage returns
- $txt = str_replace("\r", '', $txt);
- // remove last newline (if any)
- if (substr($txt,-1) == "\n") {
- $txt = substr($txt, 0, -1);
- }
- // divide text in blocks
- $txtblocks = explode("\n", $txt);
- // for each block;
- foreach ($txtblocks as $block) {
- // estimate the number of lines
- $lines += $this->empty_string($block) ? 1 : (ceil($this->GetStringWidth($block) / $wmax));
- }
- return $lines;
+ /**
+ * This method return the estimated number of lines for print a simple text string using Multicell() method.
+ * @param $txt (string) String for calculating his height
+ * @param $w (float) Width of cells. If 0, they extend up to the right margin of the page.
+ * @param $reseth (boolean) if true reset the last cell height (default false).
+ * @param $autopadding (boolean) if true, uses internal padding and automatically adjust it to account for line width (default true).
+ * @param $cellpadding (float) Internal cell padding, if empty uses default cell padding.
+ * @param $border (mixed) Indicates if borders must be drawn around the cell. The value can be a number:0: no border (default) 1: frame or a string containing some or all of the following characters (in any order):L: left T: top R: right B: bottom or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
+ * @return float Return the minimal height needed for multicell method for printing the $txt param.
+ * @author Alexander Escalona Fernndez, Nicola Asuni
+ * @public
+ * @since 4.5.011
+ */
+ public function getNumLines($txt, $w=0, $reseth=false, $autopadding=true, $cellpadding='', $border=0) {
+ if ($txt === '') {
+ // empty string
+ return 1;
}
-
- /**
- * This method prints text from the current position.
- * @param float $h Line height
- * @param string $txt String to print
- * @param mixed $link URL or identifier returned by AddLink()
- * @param int $fill Indicates if the background must be painted (1) or transparent (0). Default value: 0.
- * @param string $align Allows to center or align the text. Possible values are:L or empty string: left align (default value) C: center R: right align J: justify
- * @param boolean $ln if true set cursor at the bottom of the line, otherwise set cursor at the top of the line.
- * @param int $stretch stretch carachter mode: 0 = disabled 1 = horizontal scaling only if necessary 2 = forced horizontal scaling 3 = character spacing only if necessary 4 = forced character spacing
- * @param boolean $firstline if true prints only the first line and return the remaining string.
- * @param boolean $firstblock if true the string is the starting of a line.
- * @param float $maxh maximum height. The remaining unprinted text will be returned. It should be >= $h and less then remaining space to the bottom of the page, or 0 for disable this feature.
- * @return mixed Return the number of cells or the remaining string if $firstline = true.
- * @access public
- * @since 1.5
- */
- public function Write($h, $txt, $link='', $fill=0, $align='', $ln=false, $stretch=0, $firstline=false, $firstblock=false, $maxh=0) {
- if (strlen($txt) == 0) {
- $txt = ' ';
- }
- // remove carriage returns
- $s = str_replace("\r", '', $txt);
- // check if string contains arabic text
- if (preg_match(K_RE_PATTERN_ARABIC, $s)) {
- $arabic = true;
- } else {
- $arabic = false;
- }
- // check if string contains RTL text
- if ($arabic OR ($this->tmprtl == 'R') OR preg_match(K_RE_PATTERN_RTL, $txt)) {
- $rtlmode = true;
- } else {
- $rtlmode = false;
- }
- // get a char width
- $chrwidth = $this->GetCharWidth('.');
- // get array of unicode values
- $chars = $this->UTF8StringToArray($s);
- // get array of chars
- $uchars = $this->UTF8ArrayToUniArray($chars);
- // get the number of characters
- $nb = count($chars);
- // replacement for SHY character (minus symbol)
- $shy_replacement = 45;
- $shy_replacement_char = $this->unichr($shy_replacement);
- // widht for SHY replacement
- $shy_replacement_width = $this->GetCharWidth($shy_replacement);
- // store current position
- $prevx = $this->x;
- $prevy = $this->y;
- // max Y
- $maxy = $this->y + $maxh - $h - (2 * $this->cMargin);
- // calculate remaining line width ($w)
+ // adjust internal padding
+ $prev_cell_padding = $this->cell_padding;
+ $prev_lasth = $this->lasth;
+ if (is_array($cellpadding)) {
+ $this->cell_padding = $cellpadding;
+ }
+ $this->adjustCellPadding($border);
+ if ($this->empty_string($w) OR ($w <= 0)) {
if ($this->rtl) {
$w = $this->x - $this->lMargin;
} else {
$w = $this->w - $this->rMargin - $this->x;
}
- // max column width
- $wmax = $w - (2 * $this->cMargin);
- if ((!$firstline) AND (($chrwidth > $wmax) OR ($this->GetCharWidth($chars[0]) > $wmax))) {
- // a single character do not fit on column
- return '';
+ }
+ $wmax = $w - $this->cell_padding['L'] - $this->cell_padding['R'];
+ if ($reseth) {
+ // reset row height
+ $this->resetLastH();
+ }
+ $lines = 1;
+ $sum = 0;
+ $chars = $this->utf8Bidi($this->UTF8StringToArray($txt), $txt, $this->tmprtl);
+ $charsWidth = $this->GetArrStringWidth($chars, '', '', 0, true);
+ $length = count($chars);
+ $lastSeparator = -1;
+ for ($i = 0; $i < $length; ++$i) {
+ $charWidth = $charsWidth[$i];
+ if (preg_match($this->re_spaces, $this->unichr($chars[$i]))) {
+ $lastSeparator = $i;
}
- $i = 0; // character position
- $j = 0; // current starting position
- $sep = -1; // position of the last blank space
- $shy = false; // true if the last blank is a soft hypen (SHY)
- $l = 0; // current string lenght
- $nl = 0; //number of lines
- $linebreak = false;
- $pc = 0; // previous character
- // for each character
- while ($i < $nb) {
- if (($maxh > 0) AND ($this->y >= $maxy) ) {
- $firstline = true;
+ if ((($sum + $charWidth) > $wmax) OR ($chars[$i] == 10)) {
+ ++$lines;
+ if ($chars[$i] == 10) {
+ $lastSeparator = -1;
+ $sum = 0;
+ } elseif ($lastSeparator != -1) {
+ $i = $lastSeparator;
+ $lastSeparator = -1;
+ $sum = 0;
+ } else {
+ $sum = $charWidth;
}
- //Get the current character
- $c = $chars[$i];
- if ($c == 10) { // 10 = "\n" = new line
- //Explicit line break
- if ($align == 'J') {
- if ($this->rtl) {
- $talign = 'R';
+ } else {
+ $sum += $charWidth;
+ }
+ }
+ if ($chars[($length - 1)] == 10) {
+ --$lines;
+ }
+ $this->cell_padding = $prev_cell_padding;
+ $this->lasth = $prev_lasth;
+ return $lines;
+ }
+
+ /**
+ * This method return the estimated height needed for printing a simple text string using the Multicell() method.
+ * Generally, if you want to know the exact height for a block of content you can use the following alternative technique:
+ * @pre
+ * // store current object
+ * $pdf->startTransaction();
+ * // store starting values
+ * $start_y = $pdf->GetY();
+ * $start_page = $pdf->getPage();
+ * // call your printing functions with your parameters
+ * // - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ * $pdf->MultiCell($w=0, $h=0, $txt, $border=1, $align='L', $fill=false, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0);
+ * // - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ * // get the new Y
+ * $end_y = $pdf->GetY();
+ * $end_page = $pdf->getPage();
+ * // calculate height
+ * $height = 0;
+ * if ($end_page == $start_page) {
+ * $height = $end_y - $start_y;
+ * } else {
+ * for ($page=$start_page; $page <= $end_page; ++$page) {
+ * $this->setPage($page);
+ * if ($page == $start_page) {
+ * // first page
+ * $height = $this->h - $start_y - $this->bMargin;
+ * } elseif ($page == $end_page) {
+ * // last page
+ * $height = $end_y - $this->tMargin;
+ * } else {
+ * $height = $this->h - $this->tMargin - $this->bMargin;
+ * }
+ * }
+ * }
+ * // restore previous object
+ * $pdf = $pdf->rollbackTransaction();
+ *
+ * @param $w (float) Width of cells. If 0, they extend up to the right margin of the page.
+ * @param $txt (string) String for calculating his height
+ * @param $reseth (boolean) if true reset the last cell height (default false).
+ * @param $autopadding (boolean) if true, uses internal padding and automatically adjust it to account for line width (default true).
+ * @param $cellpadding (float) Internal cell padding, if empty uses default cell padding.
+ * @param $border (mixed) Indicates if borders must be drawn around the cell. The value can be a number:0: no border (default) 1: frame or a string containing some or all of the following characters (in any order):L: left T: top R: right B: bottom or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
+ * @return float Return the minimal height needed for multicell method for printing the $txt param.
+ * @author Nicola Asuni, Alexander Escalona Fernndez
+ * @public
+ */
+ public function getStringHeight($w, $txt, $reseth=false, $autopadding=true, $cellpadding='', $border=0) {
+ // adjust internal padding
+ $prev_cell_padding = $this->cell_padding;
+ $prev_lasth = $this->lasth;
+ if (is_array($cellpadding)) {
+ $this->cell_padding = $cellpadding;
+ }
+ $this->adjustCellPadding($border);
+ $lines = $this->getNumLines($txt, $w, $reseth, $autopadding, $cellpadding, $border);
+ $height = $lines * ($this->FontSize * $this->cell_height_ratio);
+ if ($autopadding) {
+ // add top and bottom padding
+ $height += ($this->cell_padding['T'] + $this->cell_padding['B']);
+ }
+ $this->cell_padding = $prev_cell_padding;
+ $this->lasth = $prev_lasth;
+ return $height;
+ }
+
+ /**
+ * This method prints text from the current position.
+ * @param $h (float) Line height
+ * @param $txt (string) String to print
+ * @param $link (mixed) URL or identifier returned by AddLink()
+ * @param $fill (boolean) Indicates if the cell background must be painted (true) or transparent (false).
+ * @param $align (string) Allows to center or align the text. Possible values are:L or empty string: left align (default value) C: center R: right align J: justify
+ * @param $ln (boolean) if true set cursor at the bottom of the line, otherwise set cursor at the top of the line.
+ * @param $stretch (int) font stretch mode: 0 = disabled 1 = horizontal scaling only if text is larger than cell width 2 = forced horizontal scaling to fit cell width 3 = character spacing only if text is larger than cell width 4 = forced character spacing to fit cell width General font stretching and scaling values will be preserved when possible.
+ * @param $firstline (boolean) if true prints only the first line and return the remaining string.
+ * @param $firstblock (boolean) if true the string is the starting of a line.
+ * @param $maxh (float) maximum height. The remaining unprinted text will be returned. It should be >= $h and less then remaining space to the bottom of the page, or 0 for disable this feature.
+ * @param $wadj (float) first line width will be reduced by this amount (used in HTML mode).
+ * @param $margin (array) margin array of the parent container
+ * @return mixed Return the number of cells or the remaining string if $firstline = true.
+ * @public
+ * @since 1.5
+ */
+ public function Write($h, $txt, $link='', $fill=false, $align='', $ln=false, $stretch=0, $firstline=false, $firstblock=false, $maxh=0, $wadj=0, $margin='') {
+ // check page for no-write regions and adapt page margins if necessary
+ list($this->x, $this->y) = $this->checkPageRegions($h, $this->x, $this->y);
+ if (strlen($txt) == 0) {
+ // fix empty text
+ $txt = ' ';
+ }
+ if ($margin === '') {
+ // set default margins
+ $margin = $this->cell_margin;
+ }
+ // remove carriage returns
+ $s = str_replace("\r", '', $txt);
+ // check if string contains arabic text
+ if (preg_match($this->unicode->uni_RE_PATTERN_ARABIC, $s)) {
+ $arabic = true;
+ } else {
+ $arabic = false;
+ }
+ // check if string contains RTL text
+ if ($arabic OR ($this->tmprtl == 'R') OR preg_match($this->unicode->uni_RE_PATTERN_RTL, $s)) {
+ $rtlmode = true;
+ } else {
+ $rtlmode = false;
+ }
+ // get a char width
+ $chrwidth = $this->GetCharWidth(46); // dot character
+ // get array of unicode values
+ $chars = $this->UTF8StringToArray($s);
+ // get array of chars
+ $uchars = $this->UTF8ArrayToUniArray($chars);
+ // get the number of characters
+ $nb = count($chars);
+ // replacement for SHY character (minus symbol)
+ $shy_replacement = 45;
+ $shy_replacement_char = $this->unichr($shy_replacement);
+ // widht for SHY replacement
+ $shy_replacement_width = $this->GetCharWidth($shy_replacement);
+ // max Y
+ $maxy = $this->y + $maxh - $h - $this->cell_padding['T'] - $this->cell_padding['B'];
+ // page width
+ $pw = $w = $this->w - $this->lMargin - $this->rMargin;
+ // calculate remaining line width ($w)
+ if ($this->rtl) {
+ $w = $this->x - $this->lMargin;
+ } else {
+ $w = $this->w - $this->rMargin - $this->x;
+ }
+ // max column width
+ $wmax = $w - $wadj;
+ if (!$firstline) {
+ $wmax -= ($this->cell_padding['L'] + $this->cell_padding['R']);
+ }
+ if ((!$firstline) AND (($chrwidth > $wmax) OR ($this->GetCharWidth($chars[0]) > $wmax))) {
+ // a single character do not fit on column
+ return '';
+ }
+ // minimum row height
+ $row_height = max($h, $this->FontSize * $this->cell_height_ratio);
+ $start_page = $this->page;
+ $i = 0; // character position
+ $j = 0; // current starting position
+ $sep = -1; // position of the last blank space
+ $shy = false; // true if the last blank is a soft hypen (SHY)
+ $l = 0; // current string length
+ $nl = 0; //number of lines
+ $linebreak = false;
+ $pc = 0; // previous character
+ // for each character
+ while ($i < $nb) {
+ if (($maxh > 0) AND ($this->y >= $maxy) ) {
+ break;
+ }
+ //Get the current character
+ $c = $chars[$i];
+ if ($c == 10) { // 10 = "\n" = new line
+ //Explicit line break
+ if ($align == 'J') {
+ if ($this->rtl) {
+ $talign = 'R';
+ } else {
+ $talign = 'L';
+ }
+ } else {
+ $talign = $align;
+ }
+ $tmpstr = $this->UniArrSubString($uchars, $j, $i);
+ if ($firstline) {
+ $startx = $this->x;
+ $tmparr = array_slice($chars, $j, ($i - $j));
+ if ($rtlmode) {
+ $tmparr = $this->utf8Bidi($tmparr, $tmpstr, $this->tmprtl);
+ }
+ $linew = $this->GetArrStringWidth($tmparr);
+ unset($tmparr);
+ if ($this->rtl) {
+ $this->endlinex = $startx - $linew;
+ } else {
+ $this->endlinex = $startx + $linew;
+ }
+ $w = $linew;
+ $tmpcellpadding = $this->cell_padding;
+ if ($maxh == 0) {
+ $this->SetCellPadding(0);
+ }
+ }
+ if ($firstblock AND $this->isRTLTextDir()) {
+ $tmpstr = $this->stringRightTrim($tmpstr);
+ }
+ // Skip newlines at the begining of a page or column
+ if (!empty($tmpstr) OR ($this->y < ($this->PageBreakTrigger - $row_height))) {
+ $this->Cell($w, $h, $tmpstr, 0, 1, $talign, $fill, $link, $stretch);
+ }
+ unset($tmpstr);
+ if ($firstline) {
+ $this->cell_padding = $tmpcellpadding;
+ return ($this->UniArrSubString($uchars, $i));
+ }
+ ++$nl;
+ $j = $i + 1;
+ $l = 0;
+ $sep = -1;
+ $shy = false;
+ // account for margin changes
+ if ((($this->y + $this->lasth) > $this->PageBreakTrigger) AND ($this->inPageBody())) {
+ $this->AcceptPageBreak();
+ if ($this->rtl) {
+ $this->x -= $margin['R'];
+ } else {
+ $this->x += $margin['L'];
+ }
+ $this->lMargin += $margin['L'];
+ $this->rMargin += $margin['R'];
+ }
+ $w = $this->getRemainingWidth();
+ $wmax = $w - $this->cell_padding['L'] - $this->cell_padding['R'];
+ } else {
+ // 160 is the non-breaking space.
+ // 173 is SHY (Soft Hypen).
+ // \p{Z} or \p{Separator}: any kind of Unicode whitespace or invisible separator.
+ // \p{Lo} or \p{Other_Letter}: a Unicode letter or ideograph that does not have lowercase and uppercase variants.
+ // \p{Lo} is needed because Chinese characters are packed next to each other without spaces in between.
+ if (($c != 160) AND (($c == 173) OR preg_match($this->re_spaces, $this->unichr($c)))) {
+ // update last blank space position
+ $sep = $i;
+ // check if is a SHY
+ if ($c == 173) {
+ $shy = true;
+ if ($pc == 45) {
+ $tmp_shy_replacement_width = 0;
+ $tmp_shy_replacement_char = '';
} else {
- $talign = 'L';
+ $tmp_shy_replacement_width = $shy_replacement_width;
+ $tmp_shy_replacement_char = $shy_replacement_char;
}
} else {
- $talign = $align;
+ $shy = false;
}
- $tmpstr = $this->UniArrSubString($uchars, $j, $i);
- if ($firstline) {
- $startx = $this->x;
- $tmparr = array_slice($chars, $j, $i);
- if ($rtlmode) {
- $tmparr = $this->utf8Bidi($tmparr, $tmpstr, $this->tmprtl);
- }
- $linew = $this->GetArrStringWidth($tmparr);
- unset($tmparr);
- if ($this->rtl) {
- $this->endlinex = $startx - $linew;
- } else {
- $this->endlinex = $startx + $linew;
- }
- $w = $linew;
- $tmpcmargin = $this->cMargin;
- if ($maxh == 0) {
- $this->cMargin = 0;
- }
- }
- $this->Cell($w, $h, $tmpstr, 0, 1, $talign, $fill, $link, $stretch);
- unset($tmpstr);
- if ($firstline) {
- $this->cMargin = $tmpcmargin;
- return ($this->UniArrSubString($uchars, $i));
- }
- ++$nl;
- $j = $i + 1;
- $l = 0;
- $sep = -1;
- $shy = false;
- // account for margin changes
- if ((($this->y + $this->lasth) > $this->PageBreakTrigger) AND (!$this->InFooter)) {
- // AcceptPageBreak() may be overriden on extended classed to include margin changes
- $this->AcceptPageBreak();
- }
- $w = $this->getRemainingWidth();
- $wmax = $w - (2 * $this->cMargin);
+ }
+ // update string length
+ if ($this->isUnicodeFont() AND ($arabic)) {
+ // with bidirectional algorithm some chars may be changed affecting the line length
+ // *** very slow ***
+ $l = $this->GetArrStringWidth($this->utf8Bidi(array_slice($chars, $j, ($i - $j)), '', $this->tmprtl));
} else {
- // 160 is the non-breaking space.
- // 173 is SHY (Soft Hypen).
- // \p{Z} or \p{Separator}: any kind of Unicode whitespace or invisible separator.
- // \p{Lo} or \p{Other_Letter}: a Unicode letter or ideograph that does not have lowercase and uppercase variants.
- // \p{Lo} is needed because Chinese characters are packed next to each other without spaces in between.
- if (($c != 160) AND (($c == 173) OR preg_match($this->re_spaces, $this->unichr($c)))) {
- // update last blank space position
- $sep = $i;
- // check if is a SHY
- if ($c == 173) {
- $shy = true;
- if ($pc == 45) {
- $tmp_shy_replacement_width = 0;
- $tmp_shy_replacement_char = '';
- } else {
- $tmp_shy_replacement_width = $shy_replacement_width;
- $tmp_shy_replacement_char = $shy_replacement_char;
+ $l += $this->GetCharWidth($c);
+ }
+ if (($l > $wmax) OR (($c == 173) AND (($l + $tmp_shy_replacement_width) > $wmax)) ) {
+ // we have reached the end of column
+ if ($sep == -1) {
+ // check if the line was already started
+ if (($this->rtl AND ($this->x <= ($this->w - $this->rMargin - $chrwidth)))
+ OR ((!$this->rtl) AND ($this->x >= ($this->lMargin + $chrwidth)))) {
+ // print a void cell and go to next line
+ $this->Cell($w, $h, '', 0, 1);
+ $linebreak = true;
+ if ($firstline) {
+ return ($this->UniArrSubString($uchars, $j));
}
} else {
- $shy = false;
+ // truncate the word because do not fit on column
+ $tmpstr = $this->UniArrSubString($uchars, $j, $i);
+ if ($firstline) {
+ $startx = $this->x;
+ $tmparr = array_slice($chars, $j, ($i - $j));
+ if ($rtlmode) {
+ $tmparr = $this->utf8Bidi($tmparr, $tmpstr, $this->tmprtl);
+ }
+ $linew = $this->GetArrStringWidth($tmparr);
+ unset($tmparr);
+ if ($this->rtl) {
+ $this->endlinex = $startx - $linew;
+ } else {
+ $this->endlinex = $startx + $linew;
+ }
+ $w = $linew;
+ $tmpcellpadding = $this->cell_padding;
+ if ($maxh == 0) {
+ $this->SetCellPadding(0);
+ }
+ }
+ if ($firstblock AND $this->isRTLTextDir()) {
+ $tmpstr = $this->stringRightTrim($tmpstr);
+ }
+ $this->Cell($w, $h, $tmpstr, 0, 1, $align, $fill, $link, $stretch);
+ unset($tmpstr);
+ if ($firstline) {
+ $this->cell_padding = $tmpcellpadding;
+ return ($this->UniArrSubString($uchars, $i));
+ }
+ $j = $i;
+ --$i;
}
- }
- // update string length
- if ((($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) AND ($arabic)) {
- // with bidirectional algorithm some chars may be changed affecting the line length
- // *** very slow ***
- $l = $this->GetArrStringWidth($this->utf8Bidi(array_slice($chars, $j, $i-$j+1), '', $this->tmprtl));
} else {
- $l += $this->GetCharWidth($c);
- }
- if (($l > $wmax) OR ($shy AND (($l + $tmp_shy_replacement_width) > $wmax)) ) {
- // we have reached the end of column
- if ($sep == -1) {
- // check if the line was already started
- if (($this->rtl AND ($this->x <= ($this->w - $this->rMargin - $chrwidth)))
- OR ((!$this->rtl) AND ($this->x >= ($this->lMargin + $chrwidth)))) {
- // print a void cell and go to next line
- $this->Cell($w, $h, '', 0, 1);
- $linebreak = true;
- if ($firstline) {
- return ($this->UniArrSubString($uchars, $j));
+ // word wrapping
+ if ($this->rtl AND (!$firstblock) AND ($sep < $i)) {
+ $endspace = 1;
+ } else {
+ $endspace = 0;
+ }
+ // check the length of the next string
+ $strrest = $this->UniArrSubString($uchars, ($sep + $endspace));
+ $nextstr = preg_split('/'.$this->re_space['p'].'/'.$this->re_space['m'], $this->stringTrim($strrest));
+ if (isset($nextstr[0]) AND ($this->GetStringWidth($nextstr[0]) > $pw)) {
+ // truncate the word because do not fit on a full page width
+ $tmpstr = $this->UniArrSubString($uchars, $j, $i);
+ if ($firstline) {
+ $startx = $this->x;
+ $tmparr = array_slice($chars, $j, ($i - $j));
+ if ($rtlmode) {
+ $tmparr = $this->utf8Bidi($tmparr, $tmpstr, $this->tmprtl);
}
- } else {
- // truncate the word because do not fit on column
- $tmpstr = $this->UniArrSubString($uchars, $j, $i);
- if ($firstline) {
- $startx = $this->x;
- $tmparr = array_slice($chars, $j, $i);
- if ($rtlmode) {
- $tmparr = $this->utf8Bidi($tmparr, $tmpstr, $this->tmprtl);
- }
- $linew = $this->GetArrStringWidth($tmparr);
- unset($tmparr);
- if ($this->rtl) {
- $this->endlinex = $startx - $linew;
- } else {
- $this->endlinex = $startx + $linew;
- }
- $w = $linew;
- $tmpcmargin = $this->cMargin;
- if ($maxh == 0) {
- $this->cMargin = 0;
- }
+ $linew = $this->GetArrStringWidth($tmparr);
+ unset($tmparr);
+ if ($this->rtl) {
+ $this->endlinex = $startx - $linew;
+ } else {
+ $this->endlinex = $startx + $linew;
}
- $this->Cell($w, $h, $tmpstr, 0, 1, $align, $fill, $link, $stretch);
- unset($tmpstr);
- if ($firstline) {
- $this->cMargin = $tmpcmargin;
- return ($this->UniArrSubString($uchars, $i));
+ $w = $linew;
+ $tmpcellpadding = $this->cell_padding;
+ if ($maxh == 0) {
+ $this->SetCellPadding(0);
}
- $j = $i;
- --$i;
- }
+ }
+ if ($firstblock AND $this->isRTLTextDir()) {
+ $tmpstr = $this->stringRightTrim($tmpstr);
+ }
+ $this->Cell($w, $h, $tmpstr, 0, 1, $align, $fill, $link, $stretch);
+ unset($tmpstr);
+ if ($firstline) {
+ $this->cell_padding = $tmpcellpadding;
+ return ($this->UniArrSubString($uchars, $i));
+ }
+ $j = $i;
+ --$i;
} else {
// word wrapping
- if ($this->rtl AND (!$firstblock)) {
- $endspace = 1;
- } else {
- $endspace = 0;
- }
if ($shy) {
// add hypen (minus symbol) at the end of the line
$shy_width = $tmp_shy_replacement_width;
@@ -4450,7 +7108,7 @@ if (!class_exists('TCPDF', false)) {
$tmpstr = $this->UniArrSubString($uchars, $j, ($sep + $endspace));
if ($firstline) {
$startx = $this->x;
- $tmparr = array_slice($chars, $j, ($sep + $endspace));
+ $tmparr = array_slice($chars, $j, (($sep + $endspace) - $j));
if ($rtlmode) {
$tmparr = $this->utf8Bidi($tmparr, $tmpstr, $this->tmprtl);
}
@@ -4462,17 +7120,20 @@ if (!class_exists('TCPDF', false)) {
$this->endlinex = $startx + $linew + $shy_width;
}
$w = $linew;
- $tmpcmargin = $this->cMargin;
+ $tmpcellpadding = $this->cell_padding;
if ($maxh == 0) {
- $this->cMargin = 0;
+ $this->SetCellPadding(0);
}
}
// print the line
+ if ($firstblock AND $this->isRTLTextDir()) {
+ $tmpstr = $this->stringRightTrim($tmpstr);
+ }
$this->Cell($w, $h, $shy_char_left.$tmpstr.$shy_char_right, 0, 1, $align, $fill, $link, $stretch);
unset($tmpstr);
if ($firstline) {
// return the remaining text
- $this->cMargin = $tmpcmargin;
+ $this->cell_padding = $tmpcellpadding;
return ($this->UniArrSubString($uchars, ($sep + $endspace)));
}
$i = $sep;
@@ -4480,944 +7141,1471 @@ if (!class_exists('TCPDF', false)) {
$shy = false;
$j = ($i+1);
}
- // account for margin changes
- if ((($this->y + $this->lasth) > $this->PageBreakTrigger) AND (!$this->InFooter)) {
- // AcceptPageBreak() may be overriden on extended classed to include margin changes
- $this->AcceptPageBreak();
- }
- $w = $this->getRemainingWidth();
- $wmax = $w - (2 * $this->cMargin);
- if ($linebreak) {
- $linebreak = false;
+ }
+ // account for margin changes
+ if ((($this->y + $this->lasth) > $this->PageBreakTrigger) AND ($this->inPageBody())) {
+ $this->AcceptPageBreak();
+ if ($this->rtl) {
+ $this->x -= $margin['R'];
} else {
- ++$nl;
- $l = 0;
+ $this->x += $margin['L'];
}
+ $this->lMargin += $margin['L'];
+ $this->rMargin += $margin['R'];
+ }
+ $w = $this->getRemainingWidth();
+ $wmax = $w - $this->cell_padding['L'] - $this->cell_padding['R'];
+ if ($linebreak) {
+ $linebreak = false;
+ } else {
+ ++$nl;
+ $l = 0;
}
}
- // save last character
- $pc = $c;
- ++$i;
- } // end while i < nb
- // print last substring (if any)
- if ($l > 0) {
- switch ($align) {
- case 'J':
- case 'C': {
+ }
+ // save last character
+ $pc = $c;
+ ++$i;
+ } // end while i < nb
+ // print last substring (if any)
+ if ($l > 0) {
+ switch ($align) {
+ case 'J':
+ case 'C': {
+ $w = $w;
+ break;
+ }
+ case 'L': {
+ if ($this->rtl) {
$w = $w;
+ } else {
+ $w = $l;
+ }
+ break;
+ }
+ case 'R': {
+ if ($this->rtl) {
+ $w = $l;
+ } else {
+ $w = $w;
+ }
+ break;
+ }
+ default: {
+ $w = $l;
+ break;
+ }
+ }
+ $tmpstr = $this->UniArrSubString($uchars, $j, $nb);
+ if ($firstline) {
+ $startx = $this->x;
+ $tmparr = array_slice($chars, $j, ($nb - $j));
+ if ($rtlmode) {
+ $tmparr = $this->utf8Bidi($tmparr, $tmpstr, $this->tmprtl);
+ }
+ $linew = $this->GetArrStringWidth($tmparr);
+ unset($tmparr);
+ if ($this->rtl) {
+ $this->endlinex = $startx - $linew;
+ } else {
+ $this->endlinex = $startx + $linew;
+ }
+ $w = $linew;
+ $tmpcellpadding = $this->cell_padding;
+ if ($maxh == 0) {
+ $this->SetCellPadding(0);
+ }
+ }
+ if ($firstblock AND $this->isRTLTextDir()) {
+ $tmpstr = $this->stringRightTrim($tmpstr);
+ }
+ $this->Cell($w, $h, $tmpstr, 0, $ln, $align, $fill, $link, $stretch);
+ unset($tmpstr);
+ if ($firstline) {
+ $this->cell_padding = $tmpcellpadding;
+ return ($this->UniArrSubString($uchars, $nb));
+ }
+ ++$nl;
+ }
+ if ($firstline) {
+ return '';
+ }
+ return $nl;
+ }
+
+ /**
+ * Returns the remaining width between the current position and margins.
+ * @return int Return the remaining width
+ * @protected
+ */
+ protected function getRemainingWidth() {
+ list($this->x, $this->y) = $this->checkPageRegions(0, $this->x, $this->y);
+ if ($this->rtl) {
+ return ($this->x - $this->lMargin);
+ } else {
+ return ($this->w - $this->rMargin - $this->x);
+ }
+ }
+
+ /**
+ * Extract a slice of the $strarr array and return it as string.
+ * @param $strarr (string) The input array of characters.
+ * @param $start (int) the starting element of $strarr.
+ * @param $end (int) first element that will not be returned.
+ * @return Return part of a string
+ * @public
+ */
+ public function UTF8ArrSubString($strarr, $start='', $end='') {
+ if (strlen($start) == 0) {
+ $start = 0;
+ }
+ if (strlen($end) == 0) {
+ $end = count($strarr);
+ }
+ $string = '';
+ for ($i=$start; $i < $end; ++$i) {
+ $string .= $this->unichr($strarr[$i]);
+ }
+ return $string;
+ }
+
+ /**
+ * Extract a slice of the $uniarr array and return it as string.
+ * @param $uniarr (string) The input array of characters.
+ * @param $start (int) the starting element of $strarr.
+ * @param $end (int) first element that will not be returned.
+ * @return Return part of a string
+ * @public
+ * @since 4.5.037 (2009-04-07)
+ */
+ public function UniArrSubString($uniarr, $start='', $end='') {
+ if (strlen($start) == 0) {
+ $start = 0;
+ }
+ if (strlen($end) == 0) {
+ $end = count($uniarr);
+ }
+ $string = '';
+ for ($i=$start; $i < $end; ++$i) {
+ $string .= $uniarr[$i];
+ }
+ return $string;
+ }
+
+ /**
+ * Convert an array of UTF8 values to array of unicode characters
+ * @param $ta (string) The input array of UTF8 values.
+ * @return Return array of unicode characters
+ * @public
+ * @since 4.5.037 (2009-04-07)
+ */
+ public function UTF8ArrayToUniArray($ta) {
+ return array_map(array($this, 'unichr'), $ta);
+ }
+
+ /**
+ * Returns the unicode caracter specified by UTF-8 value
+ * @param $c (int) UTF-8 value
+ * @return Returns the specified character.
+ * @author Miguel Perez, Nicola Asuni
+ * @public
+ * @since 2.3.000 (2008-03-05)
+ */
+ public function unichr($c) {
+ if (!$this->isunicode) {
+ return chr($c);
+ } elseif ($c <= 0x7F) {
+ // one byte
+ return chr($c);
+ } elseif ($c <= 0x7FF) {
+ // two bytes
+ return chr(0xC0 | $c >> 6).chr(0x80 | $c & 0x3F);
+ } elseif ($c <= 0xFFFF) {
+ // three bytes
+ return chr(0xE0 | $c >> 12).chr(0x80 | $c >> 6 & 0x3F).chr(0x80 | $c & 0x3F);
+ } elseif ($c <= 0x10FFFF) {
+ // four bytes
+ return chr(0xF0 | $c >> 18).chr(0x80 | $c >> 12 & 0x3F).chr(0x80 | $c >> 6 & 0x3F).chr(0x80 | $c & 0x3F);
+ } else {
+ return '';
+ }
+ }
+
+ /**
+ * Return the image type given the file name or array returned by getimagesize() function.
+ * @param $imgfile (string) image file name
+ * @param $iminfo (array) array of image information returned by getimagesize() function.
+ * @return string image type
+ * @since 4.8.017 (2009-11-27)
+ */
+ public function getImageFileType($imgfile, $iminfo=array()) {
+ $type = '';
+ if (isset($iminfo['mime']) AND !empty($iminfo['mime'])) {
+ $mime = explode('/', $iminfo['mime']);
+ if ((count($mime) > 1) AND ($mime[0] == 'image') AND (!empty($mime[1]))) {
+ $type = strtolower(trim($mime[1]));
+ }
+ }
+ if (empty($type)) {
+ $fileinfo = pathinfo($imgfile);
+ if (isset($fileinfo['extension']) AND (!$this->empty_string($fileinfo['extension']))) {
+ $type = strtolower(trim($fileinfo['extension']));
+ }
+ }
+ if ($type == 'jpg') {
+ $type = 'jpeg';
+ }
+ return $type;
+ }
+
+ /**
+ * Set the block dimensions accounting for page breaks and page/column fitting
+ * @param $w (float) width
+ * @param $h (float) height
+ * @param $x (float) X coordinate
+ * @param $y (float) Y coodiante
+ * @param $fitonpage (boolean) if true the block is resized to not exceed page dimensions.
+ * @return array($w, $h, $x, $y)
+ * @protected
+ * @since 5.5.009 (2010-07-05)
+ */
+ protected function fitBlock($w, $h, $x, $y, $fitonpage=false) {
+ if ($w <= 0) {
+ // set maximum width
+ $w = ($this->w - $this->lMargin - $this->rMargin);
+ }
+ if ($h <= 0) {
+ // set maximum height
+ $h = ($this->PageBreakTrigger - $this->tMargin);
+ }
+ // resize the block to be vertically contained on a single page or single column
+ if ($fitonpage OR $this->AutoPageBreak) {
+ $ratio_wh = ($w / $h);
+ if ($h > ($this->PageBreakTrigger - $this->tMargin)) {
+ $h = $this->PageBreakTrigger - $this->tMargin;
+ $w = ($h * $ratio_wh);
+ }
+ // resize the block to be horizontally contained on a single page or single column
+ if ($fitonpage) {
+ $maxw = ($this->w - $this->lMargin - $this->rMargin);
+ if ($w > $maxw) {
+ $w = $maxw;
+ $h = ($w / $ratio_wh);
+ }
+ }
+ }
+ // Check whether we need a new page or new column first as this does not fit
+ $prev_x = $this->x;
+ $prev_y = $this->y;
+ if ($this->checkPageBreak($h, $y) OR ($this->y < $prev_y)) {
+ $y = $this->y;
+ if ($this->rtl) {
+ $x += ($prev_x - $this->x);
+ } else {
+ $x += ($this->x - $prev_x);
+ }
+ $this->newline = true;
+ }
+ // resize the block to be contained on the remaining available page or column space
+ if ($fitonpage) {
+ $ratio_wh = ($w / $h);
+ if (($y + $h) > $this->PageBreakTrigger) {
+ $h = $this->PageBreakTrigger - $y;
+ $w = ($h * $ratio_wh);
+ }
+ if ((!$this->rtl) AND (($x + $w) > ($this->w - $this->rMargin))) {
+ $w = $this->w - $this->rMargin - $x;
+ $h = ($w / $ratio_wh);
+ } elseif (($this->rtl) AND (($x - $w) < ($this->lMargin))) {
+ $w = $x - $this->lMargin;
+ $h = ($w / $ratio_wh);
+ }
+ }
+ return array($w, $h, $x, $y);
+ }
+
+ /**
+ * Puts an image in the page.
+ * The upper-left corner must be given.
+ * The dimensions can be specified in different ways:
+ * explicit width and height (expressed in user unit)
+ * one explicit dimension, the other being calculated automatically in order to keep the original proportions
+ * no explicit dimension, in which case the image is put at 72 dpi
+ * Supported formats are JPEG and PNG images whitout GD library and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;
+ * The format can be specified explicitly or inferred from the file extension.
+ * It is possible to put a link on the image.
+ * Remark: if an image is used several times, only one copy will be embedded in the file.
+ * @param $file (string) Name of the file containing the image or a '@' character followed by the image data string. To link an image without embedding it on the document, set an asterisk character before the URL (i.e.: '*http://www.example.com/image.jpg').
+ * @param $x (float) Abscissa of the upper-left corner (LTR) or upper-right corner (RTL).
+ * @param $y (float) Ordinate of the upper-left corner (LTR) or upper-right corner (RTL).
+ * @param $w (float) Width of the image in the page. If not specified or equal to zero, it is automatically calculated.
+ * @param $h (float) Height of the image in the page. If not specified or equal to zero, it is automatically calculated.
+ * @param $type (string) Image format. Possible values are (case insensitive): JPEG and PNG (whitout GD library) and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;. If not specified, the type is inferred from the file extension.
+ * @param $link (mixed) URL or identifier returned by AddLink().
+ * @param $align (string) Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:T: top-right for LTR or top-left for RTL M: middle-right for LTR or middle-left for RTL B: bottom-right for LTR or bottom-left for RTL N: next line
+ * @param $resize (mixed) If true resize (reduce) the image to fit $w and $h (requires GD or ImageMagick library); if false do not resize; if 2 force resize in all cases (upscaling and downscaling).
+ * @param $dpi (int) dot-per-inch resolution used on resize
+ * @param $palign (string) Allows to center or align the image on the current line. Possible values are:L : left align C : center R : right align '' : empty string : left for LTR or right for RTL
+ * @param $ismask (boolean) true if this image is a mask, false otherwise
+ * @param $imgmask (mixed) image object returned by this function or false
+ * @param $border (mixed) Indicates if borders must be drawn around the cell. The value can be a number:0: no border (default) 1: frame or a string containing some or all of the following characters (in any order):L: left T: top R: right B: bottom or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
+ * @param $fitbox (mixed) If not false scale image dimensions proportionally to fit within the ($w, $h) box. $fitbox can be true or a 2 characters string indicating the image alignment inside the box. The first character indicate the horizontal alignment (L = left, C = center, R = right) the second character indicate the vertical algnment (T = top, M = middle, B = bottom).
+ * @param $hidden (boolean) If true do not display the image.
+ * @param $fitonpage (boolean) If true the image is resized to not exceed page dimensions.
+ * @param $alt (boolean) If true the image will be added as alternative and not directly printed (the ID of the image will be returned).
+ * @param $altimgs (array) Array of alternate images IDs. Each alternative image must be an array with two values: an integer representing the image ID (the value returned by the Image method) and a boolean value to indicate if the image is the default for printing.
+ * @return image information
+ * @public
+ * @since 1.1
+ */
+ public function Image($file, $x='', $y='', $w=0, $h=0, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='', $ismask=false, $imgmask=false, $border=0, $fitbox=false, $hidden=false, $fitonpage=false, $alt=false, $altimgs=array()) {
+ if ($x === '') {
+ $x = $this->x;
+ }
+ if ($y === '') {
+ $y = $this->y;
+ }
+ // check page for no-write regions and adapt page margins if necessary
+ list($x, $y) = $this->checkPageRegions($h, $x, $y);
+ $cached_file = false; // true when the file is cached
+ $exurl = ''; // external streams
+ // check if we are passing an image as file or string
+ if ($file{0} === '@') {
+ // image from string
+ $imgdata = substr($file, 1);
+ $file = K_PATH_CACHE.'img_'.md5($imgdata);
+ $fp = fopen($file, 'w');
+ fwrite($fp, $imgdata);
+ fclose($fp);
+ unset($imgdata);
+ $cached_file = true;
+ $imsize = @getimagesize($file);
+ if ($imsize === FALSE) {
+ unlink($file);
+ $cached_file = false;
+ }
+ } else { // image file
+ if ($file{0} === '*') {
+ // image as external stream
+ $file = substr($file, 1);
+ $exurl = $file;
+ }
+ // check if is local file
+ if (!@file_exists($file)) {
+ // encode spaces on filename (file is probably an URL)
+ $file = str_replace(' ', '%20', $file);
+ }
+ if (@file_exists($file)) {
+ // get image dimensions
+ $imsize = @getimagesize($file);
+ } else {
+ $imsize = false;
+ }
+ if ($imsize === FALSE) {
+ if (function_exists('curl_init')) {
+ // try to get remote file data using cURL
+ $cs = curl_init(); // curl session
+ curl_setopt($cs, CURLOPT_URL, $file);
+ curl_setopt($cs, CURLOPT_BINARYTRANSFER, true);
+ curl_setopt($cs, CURLOPT_FAILONERROR, true);
+ curl_setopt($cs, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($cs, CURLOPT_FOLLOWLOCATION, true);
+ curl_setopt($cs, CURLOPT_CONNECTTIMEOUT, 5);
+ curl_setopt($cs, CURLOPT_TIMEOUT, 30);
+ curl_setopt($cs, CURLOPT_SSL_VERIFYPEER, false);
+ curl_setopt($cs, CURLOPT_SSL_VERIFYHOST, false);
+ curl_setopt($cs, CURLOPT_USERAGENT, 'TCPDF');
+ $imgdata = curl_exec($cs);
+ curl_close($cs);
+ if ($imgdata !== FALSE) {
+ // copy image to cache
+ $file = K_PATH_CACHE.'img_'.md5($imgdata);
+ $fp = fopen($file, 'w');
+ fwrite($fp, $imgdata);
+ fclose($fp);
+ unset($imgdata);
+ $cached_file = true;
+ $imsize = @getimagesize($file);
+ if ($imsize === FALSE) {
+ unlink($file);
+ $cached_file = false;
+ }
+ }
+ } elseif (($w > 0) AND ($h > 0)) {
+ // get measures from specified data
+ $pw = $this->getHTMLUnitToUnits($w, 0, $this->pdfunit, true) * $this->imgscale * $this->k;
+ $ph = $this->getHTMLUnitToUnits($h, 0, $this->pdfunit, true) * $this->imgscale * $this->k;
+ $imsize = array($pw, $ph);
+ }
+ }
+ }
+ if ($imsize === FALSE) {
+ if (substr($file, 0, -34) == K_PATH_CACHE.'msk') { // mask file
+ // get measures from specified data
+ $pw = $this->getHTMLUnitToUnits($w, 0, $this->pdfunit, true) * $this->imgscale * $this->k;
+ $ph = $this->getHTMLUnitToUnits($h, 0, $this->pdfunit, true) * $this->imgscale * $this->k;
+ $imsize = array($pw, $ph);
+ } else {
+ $this->Error('[Image] Unable to get image: '.$file);
+ }
+ }
+ // get original image width and height in pixels
+ list($pixw, $pixh) = $imsize;
+ // calculate image width and height on document
+ if (($w <= 0) AND ($h <= 0)) {
+ // convert image size to document unit
+ $w = $this->pixelsToUnits($pixw);
+ $h = $this->pixelsToUnits($pixh);
+ } elseif ($w <= 0) {
+ $w = $h * $pixw / $pixh;
+ } elseif ($h <= 0) {
+ $h = $w * $pixh / $pixw;
+ } elseif (($fitbox !== false) AND ($w > 0) AND ($h > 0)) {
+ if (strlen($fitbox) !== 2) {
+ // set default alignment
+ $fitbox = '--';
+ }
+ // scale image dimensions proportionally to fit within the ($w, $h) box
+ if ((($w * $pixh) / ($h * $pixw)) < 1) {
+ // store current height
+ $oldh = $h;
+ // calculate new height
+ $h = $w * $pixh / $pixw;
+ // height difference
+ $hdiff = ($oldh - $h);
+ // vertical alignment
+ switch (strtoupper($fitbox{1})) {
+ case 'T': {
break;
}
+ case 'M': {
+ $y += ($hdiff / 2);
+ break;
+ }
+ case 'B': {
+ $y += $hdiff;
+ break;
+ }
+ }
+ } else {
+ // store current width
+ $oldw = $w;
+ // calculate new width
+ $w = $h * $pixw / $pixh;
+ // width difference
+ $wdiff = ($oldw - $w);
+ // horizontal alignment
+ switch (strtoupper($fitbox{0})) {
case 'L': {
if ($this->rtl) {
- $w = $w;
+ $x -= $wdiff;
+ }
+ break;
+ }
+ case 'C': {
+ if ($this->rtl) {
+ $x -= ($wdiff / 2);
} else {
- $w = $l;
+ $x += ($wdiff / 2);
}
break;
}
case 'R': {
- if ($this->rtl) {
- $w = $l;
- } else {
- $w = $w;
+ if (!$this->rtl) {
+ $x += $wdiff;
}
break;
}
- default: {
- $w = $l;
- break;
- }
- }
- $tmpstr = $this->UniArrSubString($uchars, $j, $nb);
- if ($firstline) {
- $startx = $this->x;
- $tmparr = array_slice($chars, $j, $nb);
- if ($rtlmode) {
- $tmparr = $this->utf8Bidi($tmparr, $tmpstr, $this->tmprtl);
- }
- $linew = $this->GetArrStringWidth($tmparr);
- unset($tmparr);
- if ($this->rtl) {
- $this->endlinex = $startx - $linew;
- } else {
- $this->endlinex = $startx + $linew;
- }
- $w = $linew;
- $tmpcmargin = $this->cMargin;
- if ($maxh == 0) {
- $this->cMargin = 0;
- }
- }
- $this->Cell($w, $h, $tmpstr, 0, $ln, $align, $fill, $link, $stretch);
- unset($tmpstr);
- if ($firstline) {
- $this->cMargin = $tmpcmargin;
- return ($this->UniArrSubString($uchars, $nb));
- }
- ++$nl;
- }
- if ($firstline) {
- return '';
- }
- return $nl;
- }
-
- /**
- * Returns the remaining width between the current position and margins.
- * @return int Return the remaining width
- * @access protected
- */
- protected function getRemainingWidth() {
- if ($this->rtl) {
- return ($this->x - $this->lMargin);
- } else {
- return ($this->w - $this->rMargin - $this->x);
- }
- }
-
- /**
- * Extract a slice of the $strarr array and return it as string.
- * @param string $strarr The input array of characters.
- * @param int $start the starting element of $strarr.
- * @param int $end first element that will not be returned.
- * @return Return part of a string
- * @access public
- */
- public function UTF8ArrSubString($strarr, $start='', $end='') {
- if (strlen($start) == 0) {
- $start = 0;
- }
- if (strlen($end) == 0) {
- $end = count($strarr);
- }
- $string = '';
- for ($i=$start; $i < $end; ++$i) {
- $string .= $this->unichr($strarr[$i]);
- }
- return $string;
- }
-
- /**
- * Extract a slice of the $uniarr array and return it as string.
- * @param string $uniarr The input array of characters.
- * @param int $start the starting element of $strarr.
- * @param int $end first element that will not be returned.
- * @return Return part of a string
- * @access public
- * @since 4.5.037 (2009-04-07)
- */
- public function UniArrSubString($uniarr, $start='', $end='') {
- if (strlen($start) == 0) {
- $start = 0;
- }
- if (strlen($end) == 0) {
- $end = count($uniarr);
- }
- $string = '';
- for ($i=$start; $i < $end; ++$i) {
- $string .= $uniarr[$i];
- }
- return $string;
- }
-
- /**
- * Convert an array of UTF8 values to array of unicode characters
- * @param string $ta The input array of UTF8 values.
- * @return Return array of unicode characters
- * @access public
- * @since 4.5.037 (2009-04-07)
- */
- public function UTF8ArrayToUniArray($ta) {
- return array_map(array($this, 'unichr'), $ta);
- }
-
- /**
- * Returns the unicode caracter specified by UTF-8 code
- * @param int $c UTF-8 code
- * @return Returns the specified character.
- * @author Miguel Perez, Nicola Asuni
- * @access public
- * @since 2.3.000 (2008-03-05)
- */
- public function unichr($c) {
- if (!$this->isunicode) {
- return chr($c);
- } elseif ($c <= 0x7F) {
- // one byte
- return chr($c);
- } elseif ($c <= 0x7FF) {
- // two bytes
- return chr(0xC0 | $c >> 6).chr(0x80 | $c & 0x3F);
- } elseif ($c <= 0xFFFF) {
- // three bytes
- return chr(0xE0 | $c >> 12).chr(0x80 | $c >> 6 & 0x3F).chr(0x80 | $c & 0x3F);
- } elseif ($c <= 0x10FFFF) {
- // four bytes
- return chr(0xF0 | $c >> 18).chr(0x80 | $c >> 12 & 0x3F).chr(0x80 | $c >> 6 & 0x3F).chr(0x80 | $c & 0x3F);
- } else {
- return '';
- }
- }
-
- /**
- * Puts an image in the page.
- * The upper-left corner must be given.
- * The dimensions can be specified in different ways:
- * explicit width and height (expressed in user unit)
- * one explicit dimension, the other being calculated automatically in order to keep the original proportions
- * no explicit dimension, in which case the image is put at 72 dpi
- * Supported formats are JPEG and PNG images whitout GD library and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;
- * The format can be specified explicitly or inferred from the file extension.
- * It is possible to put a link on the image.
- * Remark: if an image is used several times, only one copy will be embedded in the file.
- * @param string $file Name of the file containing the image.
- * @param float $x Abscissa of the upper-left corner.
- * @param float $y Ordinate of the upper-left corner.
- * @param float $w Width of the image in the page. If not specified or equal to zero, it is automatically calculated.
- * @param float $h Height of the image in the page. If not specified or equal to zero, it is automatically calculated.
- * @param string $type Image format. Possible values are (case insensitive): JPEG and PNG (whitout GD library) and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;. If not specified, the type is inferred from the file extension.
- * @param mixed $link URL or identifier returned by AddLink().
- * @param string $align Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:T: top-right for LTR or top-left for RTL M: middle-right for LTR or middle-left for RTL B: bottom-right for LTR or bottom-left for RTL N: next line
- * @param boolean $resize If true resize (reduce) the image to fit $w and $h (requires GD library).
- * @param int $dpi dot-per-inch resolution used on resize
- * @param string $palign Allows to center or align the image on the current line. Possible values are:L : left align C : center R : right align '' : empty string : left for LTR or right for RTL
- * @param boolean $ismask true if this image is a mask, false otherwise
- * @param mixed $imgmask image object returned by this function or false
- * @param mixed $border Indicates if borders must be drawn around the image. The value can be either a number:0: no border (default) 1: frame or a string containing some or all of the following characters (in any order):L: left T: top R: right B: bottom
- * @param boolean $fitbox If true scale image dimensions proportionally to fit within the ($w, $h) box.
- * @param boolean $hidden if true do not display the image.
- * @return image information
- * @access public
- * @since 1.1
- */
- public function Image($file, $x='', $y='', $w=0, $h=0, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='', $ismask=false, $imgmask=false, $border=0, $fitbox=false, $hidden=false) {
- if ($x === '') {
- $x = $this->x;
- }
- if ($y === '') {
- $y = $this->y;
- }
- // get image dimensions
- $imsize = @getimagesize($file);
- if ($imsize === FALSE) {
- // encode spaces on filename
- $file = str_replace(' ', '%20', $file);
- $imsize = @getimagesize($file);
- if ($imsize === FALSE) {
- $this->Error('[Image] No such file or directory in '.$file);
}
}
- // get original image width and height in pixels
- list($pixw, $pixh) = $imsize;
- // calculate image width and height on document
- if (($w <= 0) AND ($h <= 0)) {
- // convert image size to document unit
- $w = $this->pixelsToUnits($pixw);
- $h = $this->pixelsToUnits($pixh);
- } elseif ($w <= 0) {
- $w = $h * $pixw / $pixh;
- } elseif ($h <= 0) {
- $h = $w * $pixh / $pixw;
- } elseif ($fitbox AND ($w > 0) AND ($h > 0)) {
- // scale image dimensions proportionally to fit within the ($w, $h) box
- if ((($w * $pixh) / ($h * $pixw)) < 1) {
- $h = $w * $pixh / $pixw;
+ }
+ // fit the image on available space
+ list($w, $h, $x, $y) = $this->fitBlock($w, $h, $x, $y, $fitonpage);
+ // calculate new minimum dimensions in pixels
+ $neww = round($w * $this->k * $dpi / $this->dpi);
+ $newh = round($h * $this->k * $dpi / $this->dpi);
+ // check if resize is necessary (resize is used only to reduce the image)
+ $newsize = ($neww * $newh);
+ $pixsize = ($pixw * $pixh);
+ if (intval($resize) == 2) {
+ $resize = true;
+ } elseif ($newsize >= $pixsize) {
+ $resize = false;
+ }
+ // check if image has been already added on document
+ $newimage = true;
+ if (in_array($file, $this->imagekeys)) {
+ $newimage = false;
+ // get existing image data
+ $info = $this->getImageBuffer($file);
+ if (substr($file, 0, -34) != K_PATH_CACHE.'msk') {
+ // check if the newer image is larger
+ $oldsize = ($info['w'] * $info['h']);
+ if ((($oldsize < $newsize) AND ($resize)) OR (($oldsize < $pixsize) AND (!$resize))) {
+ $newimage = true;
+ }
+ }
+ } elseif (substr($file, 0, -34) != K_PATH_CACHE.'msk') {
+ // check for cached images with alpha channel
+ $filehash = md5($file);
+ $tempfile_plain = K_PATH_CACHE.'mskp_'.$filehash;
+ $tempfile_alpha = K_PATH_CACHE.'mska_'.$filehash;
+ if (in_array($tempfile_plain, $this->imagekeys)) {
+ // get existing image data
+ $info = $this->getImageBuffer($tempfile_plain);
+ // check if the newer image is larger
+ $oldsize = ($info['w'] * $info['h']);
+ if ((($oldsize < $newsize) AND ($resize)) OR (($oldsize < $pixsize) AND (!$resize))) {
+ $newimage = true;
} else {
- $w = $h * $pixw / $pixh;
+ $newimage = false;
+ // embed mask image
+ $imgmask = $this->Image($tempfile_alpha, $x, $y, $w, $h, 'PNG', '', '', $resize, $dpi, '', true, false);
+ // embed image, masked with previously embedded mask
+ return $this->Image($tempfile_plain, $x, $y, $w, $h, $type, $link, $align, $resize, $dpi, $palign, false, $imgmask);
}
}
- // calculate new minimum dimensions in pixels
- $neww = round($w * $this->k * $dpi / $this->dpi);
- $newh = round($h * $this->k * $dpi / $this->dpi);
- // check if resize is necessary (resize is used only to reduce the image)
- if (($neww * $newh) >= ($pixw * $pixh)) {
- $resize = false;
+ }
+ if ($newimage) {
+ //First use of image, get info
+ $type = strtolower($type);
+ if ($type == '') {
+ $type = $this->getImageFileType($file, $imsize);
+ } elseif ($type == 'jpg') {
+ $type = 'jpeg';
}
- // check if image has been already added on document
- if (!in_array($file, $this->imagekeys)) {
- //First use of image, get info
- if ($type == '') {
- $fileinfo = pathinfo($file);
- if (isset($fileinfo['extension']) AND (!$this->empty_string($fileinfo['extension']))) {
- $type = $fileinfo['extension'];
- } else {
- $this->Error('Image file has no extension and no type was specified: '.$file);
- }
+ $mqr = $this->get_mqr();
+ $this->set_mqr(false);
+ // Specific image handlers
+ $mtd = '_parse'.$type;
+ // GD image handler function
+ $gdfunction = 'imagecreatefrom'.$type;
+ $info = false;
+ if ((method_exists($this, $mtd)) AND (!($resize AND (function_exists($gdfunction) OR extension_loaded('imagick'))))) {
+ // TCPDF image functions
+ $info = $this->$mtd($file);
+ if ($info == 'pngalpha') {
+ return $this->ImagePngAlpha($file, $x, $y, $pixw, $pixh, $w, $h, 'PNG', $link, $align, $resize, $dpi, $palign, $filehash);
}
- $type = strtolower($type);
- if ($type == 'jpg') {
- $type = 'jpeg';
- }
- $mqr = $this->get_mqr();
- $this->set_mqr(false);
- // Specific image handlers
- $mtd = '_parse'.$type;
- // GD image handler function
- $gdfunction = 'imagecreatefrom'.$type;
- $info = false;
- if ((method_exists($this, $mtd)) AND (!($resize AND function_exists($gdfunction)))) {
- // TCPDF image functions
- $info = $this->$mtd($file);
- if ($info == 'pngalpha') {
- return $this->ImagePngAlpha($file, $x, $y, $w, $h, 'PNG', $link, $align, $resize, $dpi, $palign);
- }
- }
- if (!$info) {
- if (function_exists($gdfunction)) {
- // GD library
- $img = $gdfunction($file);
- if ($resize) {
- $imgr = imagecreatetruecolor($neww, $newh);
- imagecopyresampled($imgr, $img, 0, 0, 0, 0, $neww, $newh, $pixw, $pixh);
+ }
+ if (!$info) {
+ if (function_exists($gdfunction)) {
+ // GD library
+ $img = $gdfunction($file);
+ if ($resize) {
+ $imgr = imagecreatetruecolor($neww, $newh);
+ if (($type == 'gif') OR ($type == 'png')) {
+ $imgr = $this->_setGDImageTransparency($imgr, $img);
+ }
+ imagecopyresampled($imgr, $img, 0, 0, 0, 0, $neww, $newh, $pixw, $pixh);
+ if (($type == 'gif') OR ($type == 'png')) {
+ $info = $this->_toPNG($imgr);
+ } else {
$info = $this->_toJPEG($imgr);
+ }
+ } else {
+ if (($type == 'gif') OR ($type == 'png')) {
+ $info = $this->_toPNG($img);
} else {
$info = $this->_toJPEG($img);
}
- } elseif (extension_loaded('imagick')) {
- // ImageMagick library
- $img = new Imagick();
- $img->readImage($file);
- if ($resize) {
- $img->resizeImage($neww, $newh, 10, 1, false);
- }
- $img->setCompressionQuality($this->jpeg_quality);
- $img->setImageFormat('jpeg');
- $tempname = tempnam(K_PATH_CACHE, 'jpg_');
- $img->writeImage($tempname);
- $info = $this->_parsejpeg($tempname);
- unlink($tempname);
- $img->destroy();
- } else {
- return;
}
- }
- if ($info === false) {
- //If false, we cannot process image
+ } elseif (extension_loaded('imagick')) {
+ // ImageMagick library
+ $img = new Imagick();
+ if ($type == 'SVG') {
+ // get SVG file content
+ $svgimg = file_get_contents($file);
+ // get width and height
+ $regs = array();
+ if (preg_match('/]*)>/si', $svgimg, $regs)) {
+ $svgtag = $regs[1];
+ $tmp = array();
+ if (preg_match('/[\s]+width[\s]*=[\s]*"([^"]*)"/si', $svgtag, $tmp)) {
+ $ow = $this->getHTMLUnitToUnits($tmp[1], 1, $this->svgunit, false);
+ $owu = sprintf('%.3F', ($ow * $dpi / 72)).$this->pdfunit;
+ $svgtag = preg_replace('/[\s]+width[\s]*=[\s]*"[^"]*"/si', ' width="'.$owu.'"', $svgtag, 1);
+ } else {
+ $ow = $w;
+ }
+ $tmp = array();
+ if (preg_match('/[\s]+height[\s]*=[\s]*"([^"]*)"/si', $svgtag, $tmp)) {
+ $oh = $this->getHTMLUnitToUnits($tmp[1], 1, $this->svgunit, false);
+ $ohu = sprintf('%.3F', ($oh * $dpi / 72)).$this->pdfunit;
+ $svgtag = preg_replace('/[\s]+height[\s]*=[\s]*"[^"]*"/si', ' height="'.$ohu.'"', $svgtag, 1);
+ } else {
+ $oh = $h;
+ }
+ $tmp = array();
+ if (!preg_match('/[\s]+viewBox[\s]*=[\s]*"[\s]*([0-9\.]+)[\s]+([0-9\.]+)[\s]+([0-9\.]+)[\s]+([0-9\.]+)[\s]*"/si', $svgtag, $tmp)) {
+ $vbw = ($ow * $this->imgscale * $this->k);
+ $vbh = ($oh * $this->imgscale * $this->k);
+ $vbox = sprintf(' viewBox="0 0 %.3F %.3F" ', $vbw, $vbh);
+ $svgtag = $vbox.$svgtag;
+ }
+ $svgimg = preg_replace('/]*)>/si', '', $svgimg, 1);
+ }
+ $img->readImageBlob($svgimg);
+ } else {
+ $img->readImage($file);
+ }
+ if ($resize) {
+ $img->resizeImage($neww, $newh, 10, 1, false);
+ }
+ $img->setCompressionQuality($this->jpeg_quality);
+ $img->setImageFormat('jpeg');
+ $tempname = tempnam(K_PATH_CACHE, 'jpg_');
+ $img->writeImage($tempname);
+ $info = $this->_parsejpeg($tempname);
+ unlink($tempname);
+ $img->destroy();
+ } else {
return;
}
- $this->set_mqr($mqr);
- if ($ismask) {
- // force grayscale
- $info['cs'] = 'DeviceGray';
- }
- $info['i'] = $this->numimages + 1;
- if ($imgmask !== false) {
- $info['masked'] = $imgmask;
- }
- // add image to document
- $this->setImageBuffer($file, $info);
+ }
+ if ($info === false) {
+ //If false, we cannot process image
+ return;
+ }
+ $this->set_mqr($mqr);
+ if ($ismask) {
+ // force grayscale
+ $info['cs'] = 'DeviceGray';
+ }
+ $info['i'] = $this->numimages;
+ if (!in_array($file, $this->imagekeys)) {
+ ++$info['i'];
+ }
+ if ($imgmask !== false) {
+ $info['masked'] = $imgmask;
+ }
+ if (!empty($exurl)) {
+ $info['exurl'] = $exurl;
+ }
+ // array of alternative images
+ $info['altimgs'] = $altimgs;
+ // add image to document
+ $this->setImageBuffer($file, $info);
+ }
+ if ($cached_file) {
+ // remove cached file
+ unlink($file);
+ }
+ // set alignment
+ $this->img_rb_y = $y + $h;
+ // set alignment
+ if ($this->rtl) {
+ if ($palign == 'L') {
+ $ximg = $this->lMargin;
+ } elseif ($palign == 'C') {
+ $ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2;
+ } elseif ($palign == 'R') {
+ $ximg = $this->w - $this->rMargin - $w;
} else {
- $info = $this->getImageBuffer($file);
+ $ximg = $x - $w;
}
- // Check whether we need a new page first as this does not fit
- $prev_x = $this->x;
- if ($this->checkPageBreak($h, $y)) {
- $y = $this->GetY() + $this->cMargin;
- if ($this->rtl) {
- $x += ($prev_x - $this->x);
- } else {
- $x += ($this->x - $prev_x);
- }
- }
- // set bottomcoordinates
- $this->img_rb_y = $y + $h;
- // set alignment
- if ($this->rtl) {
- if ($palign == 'L') {
- $ximg = $this->lMargin;
- // set right side coordinate
- $this->img_rb_x = $ximg + $w;
- } elseif ($palign == 'C') {
- $ximg = ($this->w - $x - $w) / 2;
- // set right side coordinate
- $this->img_rb_x = $ximg + $w;
- } else {
- $ximg = $this->w - $x - $w;
- // set left side coordinate
- $this->img_rb_x = $ximg;
- }
+ $this->img_rb_x = $ximg;
+ } else {
+ if ($palign == 'L') {
+ $ximg = $this->lMargin;
+ } elseif ($palign == 'C') {
+ $ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2;
+ } elseif ($palign == 'R') {
+ $ximg = $this->w - $this->rMargin - $w;
} else {
- if ($palign == 'R') {
- $ximg = $this->w - $this->rMargin - $w;
- // set left side coordinate
- $this->img_rb_x = $ximg;
- } elseif ($palign == 'C') {
- $ximg = ($this->w - $x - $w) / 2;
- // set right side coordinate
- $this->img_rb_x = $ximg + $w;
- } else {
- $ximg = $x;
- // set right side coordinate
- $this->img_rb_x = $ximg + $w;
- }
+ $ximg = $x;
}
- if ($ismask OR $hidden) {
- // image is not displayed
- return $info['i'];
- }
- $xkimg = $ximg * $this->k;
- $this->_out(sprintf('q %.2F 0 0 %.2F %.2F %.2F cm /I%d Do Q', ($w * $this->k), ($h * $this->k), $xkimg, (($this->h - ($y + $h)) * $this->k), $info['i']));
- if (!empty($border)) {
- $bx = $x;
- $by = $y;
- $this->x = $ximg;
- $this->y = $y;
- $this->Cell($w, $h, '', $border, 0, '', 0, '', 0);
- $this->x = $bx;
- $this->y = $by;
- }
- if ($link) {
- $this->Link($ximg, $y, $w, $h, $link, 0);
- }
- // set pointer to align the successive text/objects
- switch($align) {
- case 'T': {
- $this->y = $y;
- $this->x = $this->img_rb_x;
- break;
- }
- case 'M': {
- $this->y = $y + round($h/2);
- $this->x = $this->img_rb_x;
- break;
- }
- case 'B': {
- $this->y = $this->img_rb_y;
- $this->x = $this->img_rb_x;
- break;
- }
- case 'N': {
- $this->SetY($this->img_rb_y);
- break;
- }
- default:{
- break;
- }
- }
- $this->endlinex = $this->img_rb_x;
+ $this->img_rb_x = $ximg + $w;
+ }
+ if ($ismask OR $hidden) {
+ // image is not displayed
return $info['i'];
}
-
- /**
- * Sets the current active configuration setting of magic_quotes_runtime (if the set_magic_quotes_runtime function exist)
- * @param boolean $mqr FALSE for off, TRUE for on.
- * @since 4.6.025 (2009-08-17)
- */
- public function set_mqr($mqr) {
- if(!defined('PHP_VERSION_ID')) {
- $version = PHP_VERSION;
- define('PHP_VERSION_ID', (($version{0} * 10000) + ($version{2} * 100) + $version{4}));
+ $xkimg = $ximg * $this->k;
+ if (!$alt) {
+ // only non-alternative immages will be set
+ $this->_out(sprintf('q %.2F 0 0 %.2F %.2F %.2F cm /I%u Do Q', ($w * $this->k), ($h * $this->k), $xkimg, (($this->h - ($y + $h)) * $this->k), $info['i']));
+ }
+ if (!empty($border)) {
+ $bx = $this->x;
+ $by = $this->y;
+ $this->x = $ximg;
+ if ($this->rtl) {
+ $this->x += $w;
}
- if (PHP_VERSION_ID < 50300) {
- @set_magic_quotes_runtime($mqr);
+ $this->y = $y;
+ $this->Cell($w, $h, '', $border, 0, '', 0, '', 0, true);
+ $this->x = $bx;
+ $this->y = $by;
+ }
+ if ($link) {
+ $this->Link($ximg, $y, $w, $h, $link, 0);
+ }
+ // set pointer to align the next text/objects
+ switch($align) {
+ case 'T': {
+ $this->y = $y;
+ $this->x = $this->img_rb_x;
+ break;
+ }
+ case 'M': {
+ $this->y = $y + round($h/2);
+ $this->x = $this->img_rb_x;
+ break;
+ }
+ case 'B': {
+ $this->y = $this->img_rb_y;
+ $this->x = $this->img_rb_x;
+ break;
+ }
+ case 'N': {
+ $this->SetY($this->img_rb_y);
+ break;
+ }
+ default:{
+ break;
}
}
-
- /**
- * Gets the current active configuration setting of magic_quotes_runtime (if the get_magic_quotes_runtime function exist)
- * @return Returns 0 if magic quotes runtime is off or get_magic_quotes_runtime doesn't exist, 1 otherwise.
- * @since 4.6.025 (2009-08-17)
- */
- public function get_mqr() {
- if(!defined('PHP_VERSION_ID')) {
- $version = PHP_VERSION;
- define('PHP_VERSION_ID', (($version{0} * 10000) + ($version{2} * 100) + $version{4}));
- }
- if (PHP_VERSION_ID < 50300) {
- return @get_magic_quotes_runtime();
- }
- return 0;
+ $this->endlinex = $this->img_rb_x;
+ if ($this->inxobj) {
+ // we are inside an XObject template
+ $this->xobjects[$this->xobjid]['images'][] = $info['i'];
}
-
- /**
- * Convert the loaded php image to a JPEG and then return a structure for the PDF creator.
- * This function requires GD library and write access to the directory defined on K_PATH_CACHE constant.
- * @param string $file Image file name.
- * @param image $image Image object.
- * return image JPEG image object.
- * @access protected
- */
- protected function _toJPEG($image) {
- $tempname = tempnam(K_PATH_CACHE, 'jpg_');
- imagejpeg($image, $tempname, $this->jpeg_quality);
- imagedestroy($image);
- $retvars = $this->_parsejpeg($tempname);
- // tidy up by removing temporary image
- unlink($tempname);
- return $retvars;
+ return $info['i'];
+ }
+
+ /**
+ * Sets the current active configuration setting of magic_quotes_runtime (if the set_magic_quotes_runtime function exist)
+ * @param $mqr (boolean) FALSE for off, TRUE for on.
+ * @since 4.6.025 (2009-08-17)
+ */
+ public function set_mqr($mqr) {
+ if (!defined('PHP_VERSION_ID')) {
+ $version = PHP_VERSION;
+ define('PHP_VERSION_ID', (($version{0} * 10000) + ($version{2} * 100) + $version{4}));
}
-
- /**
- * Extract info from a JPEG file without using the GD library.
- * @param string $file image file to parse
- * @return array structure containing the image data
- * @access protected
- */
- protected function _parsejpeg($file) {
- $a = getimagesize($file);
- if (empty($a)) {
- $this->Error('Missing or incorrect image file: '.$file);
+ if (PHP_VERSION_ID < 50300) {
+ @set_magic_quotes_runtime($mqr);
+ }
+ }
+
+ /**
+ * Gets the current active configuration setting of magic_quotes_runtime (if the get_magic_quotes_runtime function exist)
+ * @return Returns 0 if magic quotes runtime is off or get_magic_quotes_runtime doesn't exist, 1 otherwise.
+ * @since 4.6.025 (2009-08-17)
+ */
+ public function get_mqr() {
+ if (!defined('PHP_VERSION_ID')) {
+ $version = PHP_VERSION;
+ define('PHP_VERSION_ID', (($version{0} * 10000) + ($version{2} * 100) + $version{4}));
+ }
+ if (PHP_VERSION_ID < 50300) {
+ return @get_magic_quotes_runtime();
+ }
+ return 0;
+ }
+
+ /**
+ * Convert the loaded image to a JPEG and then return a structure for the PDF creator.
+ * This function requires GD library and write access to the directory defined on K_PATH_CACHE constant.
+ * @param $image (image) Image object.
+ * return image JPEG image object.
+ * @protected
+ */
+ protected function _toJPEG($image) {
+ $tempname = tempnam(K_PATH_CACHE, 'jpg_');
+ imagejpeg($image, $tempname, $this->jpeg_quality);
+ imagedestroy($image);
+ $retvars = $this->_parsejpeg($tempname);
+ // tidy up by removing temporary image
+ unlink($tempname);
+ return $retvars;
+ }
+
+ /**
+ * Convert the loaded image to a PNG and then return a structure for the PDF creator.
+ * This function requires GD library and write access to the directory defined on K_PATH_CACHE constant.
+ * @param $image (image) Image object.
+ * return image PNG image object.
+ * @protected
+ * @since 4.9.016 (2010-04-20)
+ */
+ protected function _toPNG($image) {
+ // set temporary image file name
+ $tempname = tempnam(K_PATH_CACHE, 'jpg_');
+ // turn off interlaced mode
+ imageinterlace($image, 0);
+ // create temporary PNG image
+ imagepng($image, $tempname);
+ // remove image from memory
+ imagedestroy($image);
+ // get PNG image data
+ $retvars = $this->_parsepng($tempname);
+ // tidy up by removing temporary image
+ unlink($tempname);
+ return $retvars;
+ }
+
+ /**
+ * Set the transparency for the given GD image.
+ * @param $new_image (image) GD image object
+ * @param $image (image) GD image object.
+ * return GD image object.
+ * @protected
+ * @since 4.9.016 (2010-04-20)
+ */
+ protected function _setGDImageTransparency($new_image, $image) {
+ // transparency index
+ $tid = imagecolortransparent($image);
+ // default transparency color
+ $tcol = array('red' => 255, 'green' => 255, 'blue' => 255);
+ if ($tid >= 0) {
+ // get the colors for the transparency index
+ $tcol = imagecolorsforindex($image, $tid);
+ }
+ $tid = imagecolorallocate($new_image, $tcol['red'], $tcol['green'], $tcol['blue']);
+ imagefill($new_image, 0, 0, $tid);
+ imagecolortransparent($new_image, $tid);
+ return $new_image;
+ }
+
+ /**
+ * Extract info from a JPEG file without using the GD library.
+ * @param $file (string) image file to parse
+ * @return array structure containing the image data
+ * @protected
+ */
+ protected function _parsejpeg($file) {
+ $a = getimagesize($file);
+ if (empty($a)) {
+ $this->Error('Missing or incorrect image file: '.$file);
+ }
+ if ($a[2] != 2) {
+ $this->Error('Not a JPEG file: '.$file);
+ }
+ // bits per pixel
+ $bpc = isset($a['bits']) ? intval($a['bits']) : 8;
+ // number of image channels
+ if (!isset($a['channels'])) {
+ $channels = 3;
+ } else {
+ $channels = intval($a['channels']);
+ }
+ // default colour space
+ switch ($channels) {
+ case 1: {
+ $colspace = 'DeviceGray';
+ break;
}
- if ($a[2] != 2) {
- $this->Error('Not a JPEG file: '.$file);
- }
- if ((!isset($a['channels'])) OR ($a['channels'] == 3)) {
+ case 3: {
$colspace = 'DeviceRGB';
- } elseif ($a['channels'] == 4) {
+ break;
+ }
+ case 4: {
$colspace = 'DeviceCMYK';
- } else {
- $colspace = 'DeviceGray';
+ break;
}
- $bpc = isset($a['bits']) ? $a['bits'] : 8;
- $data = file_get_contents($file);
- return array('w' => $a[0], 'h' => $a[1], 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'DCTDecode', 'data' => $data);
- }
-
- /**
- * Extract info from a PNG file without using the GD library.
- * @param string $file image file to parse
- * @return array structure containing the image data
- * @access protected
- */
- protected function _parsepng($file) {
- $f = fopen($file, 'rb');
- if ($f === false) {
- $this->Error('Can\'t open image file: '.$file);
- }
- //Check signature
- if (fread($f, 8) != chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) {
- $this->Error('Not a PNG file: '.$file);
- }
- //Read header chunk
- fread($f, 4);
- if (fread($f, 4) != 'IHDR') {
- $this->Error('Incorrect PNG file: '.$file);
- }
- $w = $this->_freadint($f);
- $h = $this->_freadint($f);
- $bpc = ord(fread($f, 1));
- if ($bpc > 8) {
- //$this->Error('16-bit depth not supported: '.$file);
- fclose($f);
- return false;
- }
- $ct = ord(fread($f, 1));
- if ($ct == 0) {
- $colspace = 'DeviceGray';
- } elseif ($ct == 2) {
+ default: {
+ $channels = 3;
$colspace = 'DeviceRGB';
- } elseif ($ct == 3) {
- $colspace = 'Indexed';
- } else {
- // alpha channel
- fclose($f);
- return 'pngalpha';
+ break;
}
- if (ord(fread($f, 1)) != 0) {
- //$this->Error('Unknown compression method: '.$file);
- fclose($f);
- return false;
- }
- if (ord(fread($f, 1)) != 0) {
- //$this->Error('Unknown filter method: '.$file);
- fclose($f);
- return false;
- }
- if (ord(fread($f, 1)) != 0) {
- //$this->Error('Interlacing not supported: '.$file);
- fclose($f);
- return false;
- }
- fread($f, 4);
- $parms = '/DecodeParms <>';
- //Scan chunks looking for palette, transparency and image data
- $pal = '';
- $trns = '';
- $data = '';
- do {
- $n = $this->_freadint($f);
- $type = fread($f, 4);
- if ($type == 'PLTE') {
- //Read palette
- $pal = $this->rfread($f, $n);
- fread($f, 4);
- } elseif ($type == 'tRNS') {
- //Read transparency info
- $t = $this->rfread($f, $n);
- if ($ct == 0) {
- $trns = array(ord(substr($t, 1, 1)));
- } elseif ($ct == 2) {
- $trns = array(ord(substr($t, 1, 1)), ord(substr($t, 3, 1)), ord(substr($t, 5, 1)));
- } else {
- $pos = strpos($t, chr(0));
- if ($pos !== false) {
- $trns = array($pos);
- }
- }
- fread($f, 4);
- } elseif ($type == 'IDAT') {
- //Read image data block
- $data .= $this->rfread($f, $n);
- fread($f, 4);
- } elseif ($type == 'IEND') {
- break;
- } else {
- $this->rfread($f, $n + 4);
- }
- } while ($n);
- if (($colspace == 'Indexed') AND (empty($pal))) {
- //$this->Error('Missing palette in '.$file);
- fclose($f);
- return false;
+ }
+ // get file content
+ $data = file_get_contents($file);
+ // check for embedded ICC profile
+ $icc = array();
+ $offset = 0;
+ while (($pos = strpos($data, "ICC_PROFILE\0", $offset)) !== false) {
+ // get ICC sequence length
+ $length = ($this->_getUSHORT($data, ($pos - 2)) - 16);
+ // marker sequence number
+ $msn = max(1, ord($data{($pos + 12)}));
+ // number of markers (total of APP2 used)
+ $nom = max(1, ord($data{($pos + 13)}));
+ // get sequence segment
+ $icc[($msn - 1)] = substr($data, ($pos + 14), $length);
+ // move forward to next sequence
+ $offset = ($pos + 14 + $length);
+ }
+ // order and compact ICC segments
+ if (count($icc) > 0) {
+ ksort($icc);
+ $icc = implode('', $icc);
+ if ((ord($icc{36}) != 0x61) OR (ord($icc{37}) != 0x63) OR (ord($icc{38}) != 0x73) OR (ord($icc{39}) != 0x70)) {
+ // invalid ICC profile
+ $icc = false;
}
+ } else {
+ $icc = false;
+ }
+ return array('w' => $a[0], 'h' => $a[1], 'ch' => $channels, 'icc' => $icc, 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'DCTDecode', 'data' => $data);
+ }
+
+ /**
+ * Extract info from a PNG file without using the GD library.
+ * @param $file (string) image file to parse
+ * @return array structure containing the image data
+ * @protected
+ */
+ protected function _parsepng($file) {
+ $f = fopen($file, 'rb');
+ if ($f === false) {
+ $this->Error('Can\'t open image file: '.$file);
+ }
+ //Check signature
+ if (fread($f, 8) != chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) {
+ $this->Error('Not a PNG file: '.$file);
+ }
+ //Read header chunk
+ fread($f, 4);
+ if (fread($f, 4) != 'IHDR') {
+ $this->Error('Incorrect PNG file: '.$file);
+ }
+ $w = $this->_freadint($f);
+ $h = $this->_freadint($f);
+ $bpc = ord(fread($f, 1));
+ if ($bpc > 8) {
+ //$this->Error('16-bit depth not supported: '.$file);
fclose($f);
- return array('w' => $w, 'h' => $h, 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'FlateDecode', 'parms' => $parms, 'pal' => $pal, 'trns' => $trns, 'data' => $data);
+ return false;
}
-
- /**
- * Binary-safe and URL-safe file read.
- * Reads up to length bytes from the file pointer referenced by handle. Reading stops as soon as one of the following conditions is met: length bytes have been read; EOF (end of file) is reached.
- * @param resource $handle
- * @param int $length
- * @return Returns the read string or FALSE in case of error.
- * @author Nicola Asuni
- * @access protected
- * @since 4.5.027 (2009-03-16)
- */
- protected function rfread($handle, $length) {
- $data = fread($handle, $length);
- if ($data === false) {
- return false;
- }
- $rest = $length - strlen($data);
- if ($rest > 0) {
- $data .= $this->rfread($handle, $rest);
- }
- return $data;
+ $ct = ord(fread($f, 1));
+ if ($ct == 0) {
+ $colspace = 'DeviceGray';
+ } elseif ($ct == 2) {
+ $colspace = 'DeviceRGB';
+ } elseif ($ct == 3) {
+ $colspace = 'Indexed';
+ } else {
+ // alpha channel
+ fclose($f);
+ return 'pngalpha';
}
+ if (ord(fread($f, 1)) != 0) {
+ //$this->Error('Unknown compression method: '.$file);
+ fclose($f);
+ return false;
+ }
+ if (ord(fread($f, 1)) != 0) {
+ //$this->Error('Unknown filter method: '.$file);
+ fclose($f);
+ return false;
+ }
+ if (ord(fread($f, 1)) != 0) {
+ //$this->Error('Interlacing not supported: '.$file);
+ fclose($f);
+ return false;
+ }
+ fread($f, 4);
+ $channels = ($ct == 2 ? 3 : 1);
+ $parms = '/DecodeParms << /Predictor 15 /Colors '.$channels.' /BitsPerComponent '.$bpc.' /Columns '.$w.' >>';
+ //Scan chunks looking for palette, transparency and image data
+ $pal = '';
+ $trns = '';
+ $data = '';
+ $icc = false;
+ do {
+ $n = $this->_freadint($f);
+ $type = fread($f, 4);
+ if ($type == 'PLTE') {
+ // read palette
+ $pal = $this->rfread($f, $n);
+ fread($f, 4);
+ } elseif ($type == 'tRNS') {
+ // read transparency info
+ $t = $this->rfread($f, $n);
+ if ($ct == 0) {
+ $trns = array(ord($t{1}));
+ } elseif ($ct == 2) {
+ $trns = array(ord($t{1}), ord($t{3}), ord($t{5}));
+ } else {
+ $pos = strpos($t, chr(0));
+ if ($pos !== false) {
+ $trns = array($pos);
+ }
+ }
+ fread($f, 4);
+ } elseif ($type == 'IDAT') {
+ // read image data block
+ $data .= $this->rfread($f, $n);
+ fread($f, 4);
+ } elseif ($type == 'iCCP') {
+ // skip profile name and null separator
+ $len = 0;
+ while ((ord(fread($f, 1)) > 0) AND ($len < 80)) {
+ ++$len;
+ }
+ // get compression method
+ if (ord(fread($f, 1)) != 0) {
+ //$this->Error('Unknown filter method: '.$file);
+ fclose($f);
+ return false;
+ }
+ // read ICC Color Profile
+ $icc = $this->rfread($f, ($n - $len - 2));
+ // decompress profile
+ $icc = gzuncompress($icc);
+ fread($f, 4);
+ } elseif ($type == 'IEND') {
+ break;
+ } else {
+ $this->rfread($f, $n + 4);
+ }
+ } while ($n);
+ if (($colspace == 'Indexed') AND (empty($pal))) {
+ //$this->Error('Missing palette in '.$file);
+ fclose($f);
+ return false;
+ }
+ fclose($f);
+ return array('w' => $w, 'h' => $h, 'ch' => $channels, 'icc' => $icc, 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'FlateDecode', 'parms' => $parms, 'pal' => $pal, 'trns' => $trns, 'data' => $data);
+ }
- /**
- * Extract info from a PNG image with alpha channel using the GD library.
- * @param string $file Name of the file containing the image.
- * @param float $x Abscissa of the upper-left corner.
- * @param float $y Ordinate of the upper-left corner.
- * @param float $w Width of the image in the page. If not specified or equal to zero, it is automatically calculated.
- * @param float $h Height of the image in the page. If not specified or equal to zero, it is automatically calculated.
- * @param string $type Image format. Possible values are (case insensitive): JPEG and PNG (whitout GD library) and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;. If not specified, the type is inferred from the file extension.
- * @param mixed $link URL or identifier returned by AddLink().
- * @param string $align Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:T: top-right for LTR or top-left for RTL M: middle-right for LTR or middle-left for RTL B: bottom-right for LTR or bottom-left for RTL N: next line
- * @param boolean $resize If true resize (reduce) the image to fit $w and $h (requires GD library).
- * @param int $dpi dot-per-inch resolution used on resize
- * @param string $palign Allows to center or align the image on the current line. Possible values are:L : left align C : center R : right align '' : empty string : left for LTR or right for RTL
- * @author Valentin Schmidt, Nicola Asuni
- * @access protected
- * @since 4.3.007 (2008-12-04)
- * @see Image()
- */
- protected function ImagePngAlpha($file, $x='', $y='', $w=0, $h=0, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='') {
- // get image size
- list($wpx, $hpx) = getimagesize($file);
+ /**
+ * Binary-safe and URL-safe file read.
+ * Reads up to length bytes from the file pointer referenced by handle. Reading stops as soon as one of the following conditions is met: length bytes have been read; EOF (end of file) is reached.
+ * @param $handle (resource)
+ * @param $length (int)
+ * @return Returns the read string or FALSE in case of error.
+ * @author Nicola Asuni
+ * @protected
+ * @since 4.5.027 (2009-03-16)
+ */
+ protected function rfread($handle, $length) {
+ $data = fread($handle, $length);
+ if ($data === false) {
+ return false;
+ }
+ $rest = $length - strlen($data);
+ if ($rest > 0) {
+ $data .= $this->rfread($handle, $rest);
+ }
+ return $data;
+ }
+
+ /**
+ * Extract info from a PNG image with alpha channel using the GD library.
+ * @param $file (string) Name of the file containing the image.
+ * @param $x (float) Abscissa of the upper-left corner.
+ * @param $y (float) Ordinate of the upper-left corner.
+ * @param $wpx (float) Original width of the image in pixels.
+ * @param $hpx (float) original height of the image in pixels.
+ * @param $w (float) Width of the image in the page. If not specified or equal to zero, it is automatically calculated.
+ * @param $h (float) Height of the image in the page. If not specified or equal to zero, it is automatically calculated.
+ * @param $type (string) Image format. Possible values are (case insensitive): JPEG and PNG (whitout GD library) and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;. If not specified, the type is inferred from the file extension.
+ * @param $link (mixed) URL or identifier returned by AddLink().
+ * @param $align (string) Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:T: top-right for LTR or top-left for RTL M: middle-right for LTR or middle-left for RTL B: bottom-right for LTR or bottom-left for RTL N: next line
+ * @param $resize (boolean) If true resize (reduce) the image to fit $w and $h (requires GD library).
+ * @param $dpi (int) dot-per-inch resolution used on resize
+ * @param $palign (string) Allows to center or align the image on the current line. Possible values are:L : left align C : center R : right align '' : empty string : left for LTR or right for RTL
+ * @param $filehash (string) File hash used to build unique file names.
+ * @author Nicola Asuni
+ * @protected
+ * @since 4.3.007 (2008-12-04)
+ * @see Image()
+ */
+ protected function ImagePngAlpha($file, $x, $y, $wpx, $hpx, $w, $h, $type, $link, $align, $resize, $dpi, $palign, $filehash='') {
+ if (empty($filehash)) {
+ $filehash = md5($file);
+ }
+ // create temp image file (without alpha channel)
+ $tempfile_plain = K_PATH_CACHE.'mskp_'.$filehash;
+ // create temp alpha file
+ $tempfile_alpha = K_PATH_CACHE.'mska_'.$filehash;
+ if (extension_loaded('imagick')) { // ImageMagick extension
+ // ImageMagick library
+ $img = new Imagick();
+ $img->readImage($file);
+ // clone image object
+ $imga = $img->clone();
+ // extract alpha channel
+ $img->separateImageChannel(8); // 8 = (imagick::CHANNEL_ALPHA | imagick::CHANNEL_OPACITY | imagick::CHANNEL_MATTE);
+ $img->negateImage(true);
+ $img->setImageFormat('png');
+ $img->writeImage($tempfile_alpha);
+ // remove alpha channel
+ $imga->separateImageChannel(39); // 39 = (imagick::CHANNEL_ALL & ~(imagick::CHANNEL_ALPHA | imagick::CHANNEL_OPACITY | imagick::CHANNEL_MATTE));
+ $imga->setImageFormat('png');
+ $imga->writeImage($tempfile_plain);
+ } elseif (function_exists('imagecreatefrompng')) { // GD extension
// generate images
$img = imagecreatefrompng($file);
$imgalpha = imagecreate($wpx, $hpx);
- // generate gray scale pallete
+ // generate gray scale palette (0 -> 255)
for ($c = 0; $c < 256; ++$c) {
ImageColorAllocate($imgalpha, $c, $c, $c);
}
// extract alpha channel
for ($xpx = 0; $xpx < $wpx; ++$xpx) {
for ($ypx = 0; $ypx < $hpx; ++$ypx) {
- $colorindex = imagecolorat($img, $xpx, $ypx);
- $col = imagecolorsforindex($img, $colorindex);
- imagesetpixel($imgalpha, $xpx, $ypx, $this->getGDgamma((127 - $col['alpha']) * 255 / 127));
+ $color = imagecolorat($img, $xpx, $ypx);
+ $alpha = ($color >> 24); // shifts off the first 24 bits (where 8x3 are used for each color), and returns the remaining 7 allocated bits (commonly used for alpha)
+ $alpha = (((127 - $alpha) / 127) * 255); // GD alpha is only 7 bit (0 -> 127)
+ $alpha = $this->getGDgamma($alpha); // correct gamma
+ imagesetpixel($imgalpha, $xpx, $ypx, $alpha);
}
}
- // create temp alpha file
- $tempfile_alpha = tempnam(K_PATH_CACHE, 'mska_');
imagepng($imgalpha, $tempfile_alpha);
imagedestroy($imgalpha);
// extract image without alpha channel
$imgplain = imagecreatetruecolor($wpx, $hpx);
imagecopy($imgplain, $img, 0, 0, 0, 0, $wpx, $hpx);
- // create temp image file
- $tempfile_plain = tempnam(K_PATH_CACHE, 'mskp_');
imagepng($imgplain, $tempfile_plain);
imagedestroy($imgplain);
- // embed mask image
- $imgmask = $this->Image($tempfile_alpha, $x, $y, $w, $h, 'PNG', '', '', $resize, $dpi, '', true, false);
- // embed image, masked with previously embedded mask
- $this->Image($tempfile_plain, $x, $y, $w, $h, $type, $link, $align, $resize, $dpi, $palign, false, $imgmask);
- // remove temp files
- unlink($tempfile_alpha);
- unlink($tempfile_plain);
+ } else {
+ $this->Error('TCPDF requires the Imagick or GD extension to handle PNG images with alpha channel.');
}
+ // embed mask image
+ $imgmask = $this->Image($tempfile_alpha, $x, $y, $w, $h, 'PNG', '', '', $resize, $dpi, '', true, false);
+ // embed image, masked with previously embedded mask
+ $this->Image($tempfile_plain, $x, $y, $w, $h, $type, $link, $align, $resize, $dpi, $palign, false, $imgmask);
+ // remove temp files
+ unlink($tempfile_alpha);
+ unlink($tempfile_plain);
+ }
- /**
- * Correct the gamma value to be used with GD library
- * @param float $v the gamma value to be corrected
- * @access protected
- * @since 4.3.007 (2008-12-04)
- */
- protected function getGDgamma($v) {
- return (pow(($v / 255), 2.2) * 255);
- }
-
- /**
- * Performs a line break.
- * The current abscissa goes back to the left margin and the ordinate increases by the amount passed in parameter.
- * @param float $h The height of the break. By default, the value equals the height of the last printed cell.
- * @param boolean $cell if true add a cMargin to the x coordinate
- * @access public
- * @since 1.0
- * @see Cell()
- */
- public function Ln($h='', $cell=false) {
- //Line feed; default value is last cell height
- if ($cell) {
- $cellmargin = $this->cMargin;
- } else {
- $cellmargin = 0;
- }
- if ($this->rtl) {
- $this->x = $this->w - $this->rMargin - $cellmargin;
- } else {
- $this->x = $this->lMargin + $cellmargin;
- }
- if (is_string($h)) {
- $this->y += $this->lasth;
- } else {
- $this->y += $h;
- }
- $this->newline = true;
- }
+ /**
+ * Correct the gamma value to be used with GD library
+ * @param $v (float) the gamma value to be corrected
+ * @protected
+ * @since 4.3.007 (2008-12-04)
+ */
+ protected function getGDgamma($v) {
+ return (pow(($v / 255), 2.2) * 255);
+ }
- /**
- * Returns the relative X value of current position.
- * The value is relative to the left border for LTR languages and to the right border for RTL languages.
- * @return float
- * @access public
- * @since 1.2
- * @see SetX(), GetY(), SetY()
- */
- public function GetX() {
- //Get x position
- if ($this->rtl) {
- return ($this->w - $this->x);
- } else {
- return $this->x;
- }
+ /**
+ * Performs a line break.
+ * The current abscissa goes back to the left margin and the ordinate increases by the amount passed in parameter.
+ * @param $h (float) The height of the break. By default, the value equals the height of the last printed cell.
+ * @param $cell (boolean) if true add the current left (or right o for RTL) padding to the X coordinate
+ * @public
+ * @since 1.0
+ * @see Cell()
+ */
+ public function Ln($h='', $cell=false) {
+ if (($this->num_columns > 1) AND ($this->y == $this->columns[$this->current_column]['y']) AND isset($this->columns[$this->current_column]['x']) AND ($this->x == $this->columns[$this->current_column]['x'])) {
+ // revove vertical space from the top of the column
+ return;
}
-
- /**
- * Returns the absolute X value of current position.
- * @return float
- * @access public
- * @since 1.2
- * @see SetX(), GetY(), SetY()
- */
- public function GetAbsX() {
+ if ($cell) {
+ if ($this->rtl) {
+ $cellpadding = $this->cell_padding['R'];
+ } else {
+ $cellpadding = $this->cell_padding['L'];
+ }
+ } else {
+ $cellpadding = 0;
+ }
+ if ($this->rtl) {
+ $this->x = $this->w - $this->rMargin - $cellpadding;
+ } else {
+ $this->x = $this->lMargin + $cellpadding;
+ }
+ if (is_string($h)) {
+ $this->y += $this->lasth;
+ } else {
+ $this->y += $h;
+ }
+ $this->newline = true;
+ }
+
+ /**
+ * Returns the relative X value of current position.
+ * The value is relative to the left border for LTR languages and to the right border for RTL languages.
+ * @return float
+ * @public
+ * @since 1.2
+ * @see SetX(), GetY(), SetY()
+ */
+ public function GetX() {
+ //Get x position
+ if ($this->rtl) {
+ return ($this->w - $this->x);
+ } else {
return $this->x;
}
-
- /**
- * Returns the ordinate of the current position.
- * @return float
- * @access public
- * @since 1.0
- * @see SetY(), GetX(), SetX()
- */
- public function GetY() {
- //Get y position
- return $this->y;
- }
-
- /**
- * Defines the abscissa of the current position.
- * If the passed value is negative, it is relative to the right of the page (or left if language is RTL).
- * @param float $x The value of the abscissa.
- * @access public
- * @since 1.2
- * @see GetX(), GetY(), SetY(), SetXY()
- */
- public function SetX($x) {
- //Set x position
- if ($this->rtl) {
- if ($x >= 0) {
- $this->x = $this->w - $x;
- } else {
- $this->x = abs($x);
- }
- } else {
- if ($x >= 0) {
- $this->x = $x;
- } else {
- $this->x = $this->w + $x;
- }
- }
- if ($this->x < 0) {
- $this->x = 0;
- }
- if ($this->x > $this->w) {
- $this->x = $this->w;
- }
- }
-
- /**
- * Moves the current abscissa back to the left margin and sets the ordinate.
- * If the passed value is negative, it is relative to the bottom of the page.
- * @param float $y The value of the ordinate.
- * @param bool $resetx if true (default) reset the X position.
- * @access public
- * @since 1.0
- * @see GetX(), GetY(), SetY(), SetXY()
- */
- public function SetY($y, $resetx=true) {
- if ($resetx) {
- //reset x
- if ($this->rtl) {
- $this->x = $this->w - $this->rMargin;
- } else {
- $this->x = $this->lMargin;
- }
- }
- if ($y >= 0) {
- $this->y = $y;
- } else {
- $this->y = $this->h + $y;
- }
- if ($this->y < 0) {
- $this->y = 0;
- }
- if ($this->y > $this->h) {
- $this->y = $this->h;
- }
- }
-
- /**
- * Defines the abscissa and ordinate of the current position.
- * If the passed values are negative, they are relative respectively to the right and bottom of the page.
- * @param float $x The value of the abscissa
- * @param float $y The value of the ordinate
- * @access public
- * @since 1.2
- * @see SetX(), SetY()
- */
- public function SetXY($x, $y) {
- //Set x and y positions
- $this->SetY($y);
- $this->SetX($x);
- }
+ }
- /**
- * Send the document to a given destination: string, local file or browser.
- * In the last case, the plug-in may be used (if present) or a download ("Save as" dialog box) may be forced.
- * The method first calls Close() if necessary to terminate the document.
- * @param string $name The name of the file when saved. Note that special characters are removed and blanks characters are replaced with the underscore character.
- * @param string $dest Destination where to send the document. It can take one of the following values:I: send the file inline to the browser (default). The plug-in is used if available. The name given by name is used when one selects the "Save as" option on the link generating the PDF. D: send to the browser and force a file download with the name given by name. F: save to a local file with the name given by name. S: return the document as a string. name is ignored.
- * @access public
- * @since 1.0
- * @see Close()
- */
- public function Output($name='doc.pdf', $dest='I') {
- //Output PDF to some destination
- //Finish document if necessary
- if ($this->state < 3) {
- $this->Close();
+ /**
+ * Returns the absolute X value of current position.
+ * @return float
+ * @public
+ * @since 1.2
+ * @see SetX(), GetY(), SetY()
+ */
+ public function GetAbsX() {
+ return $this->x;
+ }
+
+ /**
+ * Returns the ordinate of the current position.
+ * @return float
+ * @public
+ * @since 1.0
+ * @see SetY(), GetX(), SetX()
+ */
+ public function GetY() {
+ return $this->y;
+ }
+
+ /**
+ * Defines the abscissa of the current position.
+ * If the passed value is negative, it is relative to the right of the page (or left if language is RTL).
+ * @param $x (float) The value of the abscissa.
+ * @param $rtloff (boolean) if true always uses the page top-left corner as origin of axis.
+ * @public
+ * @since 1.2
+ * @see GetX(), GetY(), SetY(), SetXY()
+ */
+ public function SetX($x, $rtloff=false) {
+ if (!$rtloff AND $this->rtl) {
+ if ($x >= 0) {
+ $this->x = $this->w - $x;
+ } else {
+ $this->x = abs($x);
}
- //Normalize parameters
- if (is_bool($dest)) {
- $dest = $dest ? 'D' : 'F';
+ } else {
+ if ($x >= 0) {
+ $this->x = $x;
+ } else {
+ $this->x = $this->w + $x;
}
- $dest = strtoupper($dest);
- if ($dest != 'F') {
- $name = preg_replace('/[\s]+/', '_', $name);
- $name = preg_replace('/[^a-zA-Z0-9_\.-]/', '', $name);
+ }
+ if ($this->x < 0) {
+ $this->x = 0;
+ }
+ if ($this->x > $this->w) {
+ $this->x = $this->w;
+ }
+ }
+
+ /**
+ * Moves the current abscissa back to the left margin and sets the ordinate.
+ * If the passed value is negative, it is relative to the bottom of the page.
+ * @param $y (float) The value of the ordinate.
+ * @param $resetx (bool) if true (default) reset the X position.
+ * @param $rtloff (boolean) if true always uses the page top-left corner as origin of axis.
+ * @public
+ * @since 1.0
+ * @see GetX(), GetY(), SetY(), SetXY()
+ */
+ public function SetY($y, $resetx=true, $rtloff=false) {
+ if ($resetx) {
+ //reset x
+ if (!$rtloff AND $this->rtl) {
+ $this->x = $this->w - $this->rMargin;
+ } else {
+ $this->x = $this->lMargin;
}
- if ($this->sign) {
- // *** apply digital signature to the document ***
- // get the document content
- $pdfdoc = $this->getBuffer();
- // remove last newline
- $pdfdoc = substr($pdfdoc, 0, -1);
- // Remove the original buffer
- if (isset($this->diskcache) AND $this->diskcache) {
- // remove buffer file from cache
- unlink($this->buffer);
+ }
+ if ($y >= 0) {
+ $this->y = $y;
+ } else {
+ $this->y = $this->h + $y;
+ }
+ if ($this->y < 0) {
+ $this->y = 0;
+ }
+ if ($this->y > $this->h) {
+ $this->y = $this->h;
+ }
+ }
+
+ /**
+ * Defines the abscissa and ordinate of the current position.
+ * If the passed values are negative, they are relative respectively to the right and bottom of the page.
+ * @param $x (float) The value of the abscissa.
+ * @param $y (float) The value of the ordinate.
+ * @param $rtloff (boolean) if true always uses the page top-left corner as origin of axis.
+ * @public
+ * @since 1.2
+ * @see SetX(), SetY()
+ */
+ public function SetXY($x, $y, $rtloff=false) {
+ $this->SetY($y, false, $rtloff);
+ $this->SetX($x, $rtloff);
+ }
+
+ /**
+ * Ouput input data and compress it if possible.
+ * @param $data (string) Data to output.
+ * @param $length (int) Data length in bytes.
+ * @protected
+ * @since 5.9.086
+ */
+ protected function sendOutputData($data, $length) {
+ if (!isset($_SERVER['HTTP_ACCEPT_ENCODING']) OR empty($_SERVER['HTTP_ACCEPT_ENCODING'])) {
+ // the content length may vary if the server is using compression
+ header('Content-Length: '.$length);
+ }
+ echo $data;
+ }
+
+ /**
+ * Send the document to a given destination: string, local file or browser.
+ * In the last case, the plug-in may be used (if present) or a download ("Save as" dialog box) may be forced.
+ * The method first calls Close() if necessary to terminate the document.
+ * @param $name (string) The name of the file when saved. Note that special characters are removed and blanks characters are replaced with the underscore character.
+ * @param $dest (string) Destination where to send the document. It can take one of the following values:I: send the file inline to the browser (default). The plug-in is used if available. The name given by name is used when one selects the "Save as" option on the link generating the PDF. D: send to the browser and force a file download with the name given by name. F: save to a local server file with the name given by name. S: return the document as a string (name is ignored). FI: equivalent to F + I option FD: equivalent to F + D option E: return the document as base64 mime multi-part email attachment (RFC 2045)
+ * @public
+ * @since 1.0
+ * @see Close()
+ */
+ public function Output($name='doc.pdf', $dest='I') {
+ //Output PDF to some destination
+ //Finish document if necessary
+ if ($this->state < 3) {
+ $this->Close();
+ }
+ //Normalize parameters
+ if (is_bool($dest)) {
+ $dest = $dest ? 'D' : 'F';
+ }
+ $dest = strtoupper($dest);
+ if ($dest{0} != 'F') {
+ $name = preg_replace('/[\s]+/', '_', $name);
+ $name = preg_replace('/[^a-zA-Z0-9_\.-]/', '', $name);
+ }
+ if ($this->sign) {
+ // *** apply digital signature to the document ***
+ // get the document content
+ $pdfdoc = $this->getBuffer();
+ // remove last newline
+ $pdfdoc = substr($pdfdoc, 0, -1);
+ // Remove the original buffer
+ if (isset($this->diskcache) AND $this->diskcache) {
+ // remove buffer file from cache
+ unlink($this->buffer);
+ }
+ unset($this->buffer);
+ // remove filler space
+ $byterange_string_len = strlen($this->byterange_string);
+ // define the ByteRange
+ $byte_range = array();
+ $byte_range[0] = 0;
+ $byte_range[1] = strpos($pdfdoc, $this->byterange_string) + $byterange_string_len + 10;
+ $byte_range[2] = $byte_range[1] + $this->signature_max_length + 2;
+ $byte_range[3] = strlen($pdfdoc) - $byte_range[2];
+ $pdfdoc = substr($pdfdoc, 0, $byte_range[1]).substr($pdfdoc, $byte_range[2]);
+ // replace the ByteRange
+ $byterange = sprintf('/ByteRange[0 %u %u %u]', $byte_range[1], $byte_range[2], $byte_range[3]);
+ $byterange .= str_repeat(' ', ($byterange_string_len - strlen($byterange)));
+ $pdfdoc = str_replace($this->byterange_string, $byterange, $pdfdoc);
+ // write the document to a temporary folder
+ $tempdoc = tempnam(K_PATH_CACHE, 'tmppdf_');
+ $f = fopen($tempdoc, 'wb');
+ if (!$f) {
+ $this->Error('Unable to create temporary file: '.$tempdoc);
+ }
+ $pdfdoc_length = strlen($pdfdoc);
+ fwrite($f, $pdfdoc, $pdfdoc_length);
+ fclose($f);
+ // get digital signature via openssl library
+ $tempsign = tempnam(K_PATH_CACHE, 'tmpsig_');
+ if (empty($this->signature_data['extracerts'])) {
+ openssl_pkcs7_sign($tempdoc, $tempsign, $this->signature_data['signcert'], array($this->signature_data['privkey'], $this->signature_data['password']), array(), PKCS7_BINARY | PKCS7_DETACHED);
+ } else {
+ openssl_pkcs7_sign($tempdoc, $tempsign, $this->signature_data['signcert'], array($this->signature_data['privkey'], $this->signature_data['password']), array(), PKCS7_BINARY | PKCS7_DETACHED, $this->signature_data['extracerts']);
+ }
+ unlink($tempdoc);
+ // read signature
+ $signature = file_get_contents($tempsign);
+ unlink($tempsign);
+ // extract signature
+ $signature = substr($signature, $pdfdoc_length);
+ $signature = substr($signature, (strpos($signature, "%%EOF\n\n------") + 13));
+ $tmparr = explode("\n\n", $signature);
+ $signature = $tmparr[1];
+ unset($tmparr);
+ // decode signature
+ $signature = base64_decode(trim($signature));
+ // convert signature to hex
+ $signature = current(unpack('H*', $signature));
+ $signature = str_pad($signature, $this->signature_max_length, '0');
+ // disable disk caching
+ $this->diskcache = false;
+ // Add signature to the document
+ $this->buffer = substr($pdfdoc, 0, $byte_range[1]).'<'.$signature.'>'.substr($pdfdoc, $byte_range[1]);
+ $this->bufferlen = strlen($this->buffer);
+ }
+ switch($dest) {
+ case 'I': {
+ // Send PDF to the standard output
+ if (ob_get_contents()) {
+ $this->Error('Some data has already been output, can\'t send PDF file');
}
- unset($this->buffer);
- // remove filler space
- $byterange_string_len = strlen($this->byterange_string);
- // define the ByteRange
- $byte_range = array();
- $byte_range[0] = 0;
- $byte_range[1] = strpos($pdfdoc, $this->byterange_string) + $byterange_string_len + 10;
- $byte_range[2] = $byte_range[1] + $this->signature_max_lenght + 2;
- $byte_range[3] = strlen($pdfdoc) - $byte_range[2];
- $pdfdoc = substr($pdfdoc, 0, $byte_range[1]).substr($pdfdoc, $byte_range[2]);
- // replace the ByteRange
- $byterange = sprintf('/ByteRange[0 %u %u %u]', $byte_range[1], $byte_range[2], $byte_range[3]);
- $byterange .= str_repeat(' ', ($byterange_string_len - strlen($byterange)));
- $pdfdoc = str_replace($this->byterange_string, $byterange, $pdfdoc);
- // write the document to a temporary folder
- $tempdoc = tempnam(K_PATH_CACHE, 'tmppdf_');
- $f = fopen($tempdoc, 'wb');
- if (!$f) {
- $this->Error('Unable to create temporary file: '.$tempdoc);
- }
- $pdfdoc_lenght = strlen($pdfdoc);
- fwrite($f, $pdfdoc, $pdfdoc_lenght);
- fclose($f);
- // get digital signature via openssl library
- $tempsign = tempnam(K_PATH_CACHE, 'tmpsig_');
- if (empty($this->signature_data['extracerts'])) {
- openssl_pkcs7_sign($tempdoc, $tempsign, $this->signature_data['signcert'], array($this->signature_data['privkey'], $this->signature_data['password']), array(), PKCS7_BINARY | PKCS7_DETACHED);
+ if (php_sapi_name() != 'cli') {
+ // send output to a browser
+ header('Content-Type: application/pdf');
+ if (headers_sent()) {
+ $this->Error('Some data has already been output to browser, can\'t send PDF file');
+ }
+ header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1
+ header('Pragma: public');
+ header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
+ header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
+ header('Content-Disposition: inline; filename="'.basename($name).'";');
+ $this->sendOutputData($this->getBuffer(), $this->bufferlen);
} else {
- openssl_pkcs7_sign($tempdoc, $tempsign, $this->signature_data['signcert'], array($this->signature_data['privkey'], $this->signature_data['password']), array(), PKCS7_BINARY | PKCS7_DETACHED, $this->signature_data['extracerts']);
- }
- unlink($tempdoc);
- // read signature
- $signature = file_get_contents($tempsign, false, null, $pdfdoc_lenght);
- unlink($tempsign);
- // extract signature
- $signature = substr($signature, (strpos($signature, "%%EOF\n\n------") + 13));
- $tmparr = explode("\n\n", $signature);
- $signature = $tmparr[1];
- unset($tmparr);
- // decode signature
- $signature = base64_decode(trim($signature));
- // convert signature to hex
- $signature = current(unpack('H*', $signature));
- $signature = str_pad($signature, $this->signature_max_lenght, '0');
- // Add signature to the document
- $pdfdoc = substr($pdfdoc, 0, $byte_range[1]).'<'.$signature.'>'.substr($pdfdoc, ($byte_range[1]));
- $this->diskcache = false;
- $this->buffer = &$pdfdoc;
- $this->bufferlen = strlen($pdfdoc);
- }
- switch($dest) {
- case 'I': {
- // Send PDF to the standard output
- if (ob_get_contents()) {
- $this->Error('Some data has already been output, can\'t send PDF file');
- }
- if (php_sapi_name() != 'cli') {
- //We send to a browser
- header('Content-Type: application/pdf');
- if (headers_sent()) {
- $this->Error('Some data has already been output to browser, can\'t send PDF file');
- }
- header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1
- header('Pragma: public');
- header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
- header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
- header('Content-Length: '.$this->bufferlen);
- header('Content-Disposition: inline; filename="'.basename($name).'";');
- }
echo $this->getBuffer();
- break;
}
- case 'D': {
- // Download PDF as file
+ break;
+ }
+ case 'D': {
+ // download PDF as file
+ if (ob_get_contents()) {
+ $this->Error('Some data has already been output, can\'t send PDF file');
+ }
+ header('Content-Description: File Transfer');
+ if (headers_sent()) {
+ $this->Error('Some data has already been output to browser, can\'t send PDF file');
+ }
+ header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1
+ header('Pragma: public');
+ header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
+ header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
+ // force download dialog
+ if (strpos(php_sapi_name(), 'cgi') === false) {
+ header('Content-Type: application/force-download');
+ header('Content-Type: application/octet-stream', false);
+ header('Content-Type: application/download', false);
+ header('Content-Type: application/pdf', false);
+ } else {
+ header('Content-Type: application/pdf');
+ }
+ // use the Content-Disposition header to supply a recommended filename
+ header('Content-Disposition: attachment; filename="'.basename($name).'";');
+ header('Content-Transfer-Encoding: binary');
+ $this->sendOutputData($this->getBuffer(), $this->bufferlen);
+ break;
+ }
+ case 'F':
+ case 'FI':
+ case 'FD': {
+ // save PDF to a local file
+ if ($this->diskcache) {
+ copy($this->buffer, $name);
+ } else {
+ $f = fopen($name, 'wb');
+ if (!$f) {
+ $this->Error('Unable to create output file: '.$name);
+ }
+ fwrite($f, $this->getBuffer(), $this->bufferlen);
+ fclose($f);
+ }
+ if ($dest == 'FI') {
+ // send headers to browser
+ header('Content-Type: application/pdf');
+ header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1
+ header('Pragma: public');
+ header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
+ header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
+ header('Content-Disposition: inline; filename="'.basename($name).'";');
+ $this->sendOutputData(file_get_contents($name), filesize($name));
+ } elseif ($dest == 'FD') {
+ // send headers to browser
if (ob_get_contents()) {
$this->Error('Some data has already been output, can\'t send PDF file');
}
@@ -5430,7772 +8618,13072 @@ if (!class_exists('TCPDF', false)) {
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
// force download dialog
- header('Content-Type: application/force-download');
- header('Content-Type: application/octet-stream', false);
- header('Content-Type: application/download', false);
- header('Content-Type: application/pdf', false);
+ if (strpos(php_sapi_name(), 'cgi') === false) {
+ header('Content-Type: application/force-download');
+ header('Content-Type: application/octet-stream', false);
+ header('Content-Type: application/download', false);
+ header('Content-Type: application/pdf', false);
+ } else {
+ header('Content-Type: application/pdf');
+ }
// use the Content-Disposition header to supply a recommended filename
header('Content-Disposition: attachment; filename="'.basename($name).'";');
header('Content-Transfer-Encoding: binary');
- header('Content-Length: '.$this->bufferlen);
- echo $this->getBuffer();
- break;
+ $this->sendOutputData(file_get_contents($name), filesize($name));
}
- case 'F': {
- // Save PDF to a local file
- if ($this->diskcache) {
- copy($this->buffer, $name);
- } else {
- $f = fopen($name, 'wb');
- if (!$f) {
- $this->Error('Unable to create output file: '.$name);
- }
- fwrite($f, $this->getBuffer(), $this->bufferlen);
- fclose($f);
- }
- break;
- }
- case 'S': {
- // Returns PDF as a string
- return $this->getBuffer();
- }
- default: {
- $this->Error('Incorrect output destination: '.$dest);
+ break;
+ }
+ case 'E': {
+ // return PDF as base64 mime multi-part email attachment (RFC 2045)
+ $retval = 'Content-Type: application/pdf;'."\r\n";
+ $retval .= ' name="'.$name.'"'."\r\n";
+ $retval .= 'Content-Transfer-Encoding: base64'."\r\n";
+ $retval .= 'Content-Disposition: attachment;'."\r\n";
+ $retval .= ' filename="'.$name.'"'."\r\n\r\n";
+ $retval .= chunk_split(base64_encode($this->getBuffer()), 76, "\r\n");
+ return $retval;
+ }
+ case 'S': {
+ // returns PDF as a string
+ return $this->getBuffer();
+ }
+ default: {
+ $this->Error('Incorrect output destination: '.$dest);
+ }
+ }
+ return '';
+ }
+
+ /**
+ * Unset all class variables except the following critical variables: internal_encoding, state, bufferlen, buffer and diskcache.
+ * @param $destroyall (boolean) if true destroys all class variables, otherwise preserves critical variables.
+ * @param $preserve_objcopy (boolean) if true preserves the objcopy variable
+ * @public
+ * @since 4.5.016 (2009-02-24)
+ */
+ public function _destroy($destroyall=false, $preserve_objcopy=false) {
+ if ($destroyall AND isset($this->diskcache) AND $this->diskcache AND (!$preserve_objcopy) AND (!$this->empty_string($this->buffer))) {
+ // remove buffer file from cache
+ unlink($this->buffer);
+ }
+ foreach (array_keys(get_object_vars($this)) as $val) {
+ if ($destroyall OR (
+ ($val != 'internal_encoding')
+ AND ($val != 'state')
+ AND ($val != 'bufferlen')
+ AND ($val != 'buffer')
+ AND ($val != 'diskcache')
+ AND ($val != 'sign')
+ AND ($val != 'signature_data')
+ AND ($val != 'signature_max_length')
+ AND ($val != 'byterange_string')
+ )) {
+ if ((!$preserve_objcopy OR ($val != 'objcopy')) AND isset($this->$val)) {
+ unset($this->$val);
}
}
+ }
+ }
+
+ /**
+ * Check for locale-related bug
+ * @protected
+ */
+ protected function _dochecks() {
+ //Check for locale-related bug
+ if (1.1 == 1) {
+ $this->Error('Don\'t alter the locale before including class file');
+ }
+ //Check for decimal separator
+ if (sprintf('%.1F', 1.0) != '1.0') {
+ setlocale(LC_NUMERIC, 'C');
+ }
+ }
+
+ /**
+ * Return fonts path
+ * @return string
+ * @protected
+ */
+ protected function _getfontpath() {
+ if (!defined('K_PATH_FONTS') AND is_dir(dirname(__FILE__).'/fonts')) {
+ define('K_PATH_FONTS', dirname(__FILE__).'/fonts/');
+ }
+ return defined('K_PATH_FONTS') ? K_PATH_FONTS : '';
+ }
+
+ /**
+ * Return an array containing variations for the basic page number alias.
+ * @param $a (string) Base alias.
+ * @return array of page number aliases
+ * @protected
+ */
+ protected function getInternalPageNumberAliases($a= '') {
+ $alias = array();
+ // build array of Unicode + ASCII variants (the order is important)
+ $alias = array('u' => array(), 'a' => array());
+ $u = '{'.$a.'}';
+ $alias['u'][] = $this->_escape($u);
+ if ($this->isunicode) {
+ $alias['u'][] = $this->_escape($this->UTF8ToLatin1($u));
+ $alias['u'][] = $this->_escape($this->utf8StrRev($u, false, $this->tmprtl));
+ $alias['a'][] = $this->_escape($this->UTF8ToLatin1($a));
+ $alias['a'][] = $this->_escape($this->utf8StrRev($a, false, $this->tmprtl));
+ }
+ $alias['a'][] = $this->_escape($a);
+ return $alias;
+ }
+
+ /**
+ * Return an array containing all internal page aliases.
+ * @return array of page number aliases
+ * @protected
+ */
+ protected function getAllInternalPageNumberAliases() {
+ $basic_alias = array($this->alias_tot_pages, $this->alias_num_page, $this->alias_group_tot_pages, $this->alias_group_num_page, $this->alias_right_shift);
+ $pnalias = array();
+ foreach($basic_alias as $k => $a) {
+ $pnalias[$k] = $this->getInternalPageNumberAliases($a);
+ }
+ return $pnalias;
+ }
+
+ /**
+ * Replace page number aliases with number.
+ * @param $page (string) Page content.
+ * @param $replace (array) Array of replacements (array keys are replacement strings, values are alias arrays).
+ * @param $diff (int) If passed, this will be set to the total char number difference between alias and replacements.
+ * @return replaced page content and updated $diff parameter as array.
+ * @protected
+ */
+ protected function replacePageNumAliases($page, $replace, $diff=0) {
+ foreach ($replace as $rep) {
+ foreach ($rep[3] as $a) {
+ if (strpos($page, $a) !== false) {
+ $page = str_replace($a, $rep[0], $page);
+ $diff += ($rep[2] - $rep[1]);
+ }
+ }
+ }
+ return array($page, $diff);
+ }
+
+ /**
+ * Replace right shift page number aliases with spaces to correct right alignment.
+ * This works perfectly only when using monospaced fonts.
+ * @param $page (string) Page content.
+ * @param $aliases (array) Array of page aliases.
+ * @param $diff (int) initial difference to add.
+ * @return replaced page content.
+ * @protected
+ */
+ protected function replaceRightShiftPageNumAliases($page, $aliases, $diff) {
+ foreach ($aliases as $type => $alias) {
+ foreach ($alias as $a) {
+ // find position of compensation factor
+ $startnum = (strpos($a, ':') + 1);
+ $a = substr($a, 0, $startnum);
+ if (($pos = strpos($page, $a)) !== false) {
+ // end of alias
+ $endnum = strpos($page, '}', $pos);
+ // string to be replaced
+ $aa = substr($page, $pos, ($endnum - $pos + 1));
+ // get compensation factor
+ $ratio = substr($page, ($pos + $startnum), ($endnum - $pos - $startnum));
+ $ratio = preg_replace('/[^0-9\.]/', '', $ratio);
+ $ratio = floatval($ratio);
+ if ($type == 'u') {
+ $chrdiff = floor(($diff + 12) * $ratio);
+ $shift = str_repeat(' ', $chrdiff);
+ $shift = $this->UTF8ToUTF16BE($shift, false);
+ } else {
+ $chrdiff = floor(($diff + 11) * $ratio);
+ $shift = str_repeat(' ', $chrdiff);
+ }
+ $page = str_replace($aa, $shift, $page);
+ }
+ }
+ }
+ return $page;
+ }
+
+ /**
+ * Output pages (and replace page number aliases).
+ * @protected
+ */
+ protected function _putpages() {
+ $filter = ($this->compress) ? '/Filter /FlateDecode ' : '';
+ // get internal aliases for page numbers
+ $pnalias = $this->getAllInternalPageNumberAliases();
+ $num_pages = $this->numpages;
+ $ptpa = $this->formatPageNumber(($this->starting_page_number + $num_pages - 1));
+ $ptpu = $this->UTF8ToUTF16BE($ptpa, false);
+ $ptp_num_chars = $this->GetNumChars($ptpa);
+ $pagegroupnum = 0;
+ $groupnum = 0;
+ $ptgu = 1;
+ $ptga = 1;
+ for ($n = 1; $n <= $num_pages; ++$n) {
+ // get current page
+ $temppage = $this->getPageBuffer($n);
+ $pagelen = strlen($temppage);
+ // set replacements for total pages number
+ $pnpa = $this->formatPageNumber(($this->starting_page_number + $n - 1));
+ $pnpu = $this->UTF8ToUTF16BE($pnpa, false);
+ $pnp_num_chars = $this->GetNumChars($pnpa);
+ $pdiff = 0; // difference used for right shift alignment of page numbers
+ $gdiff = 0; // difference used for right shift alignment of page group numbers
+ if (!empty($this->pagegroups)) {
+ if (isset($this->newpagegroup[$n])) {
+ $pagegroupnum = 0;
+ ++$groupnum;
+ $ptga = $this->formatPageNumber($this->pagegroups[$groupnum]);
+ $ptgu = $this->UTF8ToUTF16BE($ptga, false);
+ $ptg_num_chars = $this->GetNumChars($ptga);
+ }
+ ++$pagegroupnum;
+ $pnga = $this->formatPageNumber($pagegroupnum);
+ $pngu = $this->UTF8ToUTF16BE($pnga, false);
+ $png_num_chars = $this->GetNumChars($pnga);
+ // replace page numbers
+ $replace = array();
+ $replace[] = array($ptgu, $ptg_num_chars, 9, $pnalias[2]['u']);
+ $replace[] = array($ptga, $ptg_num_chars, 7, $pnalias[2]['a']);
+ $replace[] = array($pngu, $png_num_chars, 9, $pnalias[3]['u']);
+ $replace[] = array($pnga, $png_num_chars, 7, $pnalias[3]['a']);
+ list($temppage, $gdiff) = $this->replacePageNumAliases($temppage, $replace, $gdiff);
+ }
+ // replace page numbers
+ $replace = array();
+ $replace[] = array($ptpu, $ptp_num_chars, 9, $pnalias[0]['u']);
+ $replace[] = array($ptpa, $ptp_num_chars, 7, $pnalias[0]['a']);
+ $replace[] = array($pnpu, $pnp_num_chars, 9, $pnalias[1]['u']);
+ $replace[] = array($pnpa, $pnp_num_chars, 7, $pnalias[1]['a']);
+ list($temppage, $pdiff) = $this->replacePageNumAliases($temppage, $replace, $pdiff);
+ // replace right shift alias
+ $temppage = $this->replaceRightShiftPageNumAliases($temppage, $pnalias[4], max($pdiff, $gdiff));
+ // replace EPS marker
+ $temppage = str_replace($this->epsmarker, '', $temppage);
+ //Page
+ $this->page_obj_id[$n] = $this->_newobj();
+ $out = '<<';
+ $out .= ' /Type /Page';
+ $out .= ' /Parent 1 0 R';
+ $out .= ' /LastModified '.$this->_datestring();
+ $out .= ' /Resources 2 0 R';
+ $boxes = array('MediaBox', 'CropBox', 'BleedBox', 'TrimBox', 'ArtBox');
+ foreach ($boxes as $box) {
+ $out .= ' /'.$box;
+ $out .= sprintf(' [%.2F %.2F %.2F %.2F]', $this->pagedim[$n][$box]['llx'], $this->pagedim[$n][$box]['lly'], $this->pagedim[$n][$box]['urx'], $this->pagedim[$n][$box]['ury']);
+ }
+ if (isset($this->pagedim[$n]['BoxColorInfo']) AND !empty($this->pagedim[$n]['BoxColorInfo'])) {
+ $out .= ' /BoxColorInfo <<';
+ foreach ($boxes as $box) {
+ if (isset($this->pagedim[$n]['BoxColorInfo'][$box])) {
+ $out .= ' /'.$box.' <<';
+ if (isset($this->pagedim[$n]['BoxColorInfo'][$box]['C'])) {
+ $color = $this->pagedim[$n]['BoxColorInfo'][$box]['C'];
+ $out .= ' /C [';
+ $out .= sprintf(' %.3F %.3F %.3F', $color[0]/255, $color[1]/255, $color[2]/255);
+ $out .= ' ]';
+ }
+ if (isset($this->pagedim[$n]['BoxColorInfo'][$box]['W'])) {
+ $out .= ' /W '.($this->pagedim[$n]['BoxColorInfo'][$box]['W'] * $this->k);
+ }
+ if (isset($this->pagedim[$n]['BoxColorInfo'][$box]['S'])) {
+ $out .= ' /S /'.$this->pagedim[$n]['BoxColorInfo'][$box]['S'];
+ }
+ if (isset($this->pagedim[$n]['BoxColorInfo'][$box]['D'])) {
+ $dashes = $this->pagedim[$n]['BoxColorInfo'][$box]['D'];
+ $out .= ' /D [';
+ foreach ($dashes as $dash) {
+ $out .= sprintf(' %.3F', ($dash * $this->k));
+ }
+ $out .= ' ]';
+ }
+ $out .= ' >>';
+ }
+ }
+ $out .= ' >>';
+ }
+ $out .= ' /Contents '.($this->n + 1).' 0 R';
+ $out .= ' /Rotate '.$this->pagedim[$n]['Rotate'];
+ if (!$this->pdfa_mode) {
+ $out .= ' /Group << /Type /Group /S /Transparency /CS /DeviceRGB >>';
+ }
+ if (isset($this->pagedim[$n]['trans']) AND !empty($this->pagedim[$n]['trans'])) {
+ // page transitions
+ if (isset($this->pagedim[$n]['trans']['Dur'])) {
+ $out .= ' /Dur '.$this->pagedim[$n]['trans']['Dur'];
+ }
+ $out .= ' /Trans <<';
+ $out .= ' /Type /Trans';
+ if (isset($this->pagedim[$n]['trans']['S'])) {
+ $out .= ' /S /'.$this->pagedim[$n]['trans']['S'];
+ }
+ if (isset($this->pagedim[$n]['trans']['D'])) {
+ $out .= ' /D '.$this->pagedim[$n]['trans']['D'];
+ }
+ if (isset($this->pagedim[$n]['trans']['Dm'])) {
+ $out .= ' /Dm /'.$this->pagedim[$n]['trans']['Dm'];
+ }
+ if (isset($this->pagedim[$n]['trans']['M'])) {
+ $out .= ' /M /'.$this->pagedim[$n]['trans']['M'];
+ }
+ if (isset($this->pagedim[$n]['trans']['Di'])) {
+ $out .= ' /Di '.$this->pagedim[$n]['trans']['Di'];
+ }
+ if (isset($this->pagedim[$n]['trans']['SS'])) {
+ $out .= ' /SS '.$this->pagedim[$n]['trans']['SS'];
+ }
+ if (isset($this->pagedim[$n]['trans']['B'])) {
+ $out .= ' /B '.$this->pagedim[$n]['trans']['B'];
+ }
+ $out .= ' >>';
+ }
+ $out .= $this->_getannotsrefs($n);
+ $out .= ' /PZ '.$this->pagedim[$n]['PZ'];
+ $out .= ' >>';
+ $out .= "\n".'endobj';
+ $this->_out($out);
+ //Page content
+ $p = ($this->compress) ? gzcompress($temppage) : $temppage;
+ $this->_newobj();
+ $p = $this->_getrawstream($p);
+ $this->_out('<<'.$filter.'/Length '.strlen($p).'>> stream'."\n".$p."\n".'endstream'."\n".'endobj');
+ if ($this->diskcache) {
+ // remove temporary files
+ unlink($this->pages[$n]);
+ }
+ }
+ //Pages root
+ $out = $this->_getobj(1)."\n";
+ $out .= '<< /Type /Pages /Kids [';
+ foreach($this->page_obj_id as $page_obj) {
+ $out .= ' '.$page_obj.' 0 R';
+ }
+ $out .= ' ] /Count '.$num_pages.' >>';
+ $out .= "\n".'endobj';
+ $this->_out($out);
+ }
+
+ /**
+ * Output references to page annotations
+ * @param $n (int) page number
+ * @protected
+ * @author Nicola Asuni
+ * @since 4.7.000 (2008-08-29)
+ * @deprecated
+ */
+ protected function _putannotsrefs($n) {
+ $this->_out($this->_getannotsrefs($n));
+ }
+
+ /**
+ * Get references to page annotations.
+ * @param $n (int) page number
+ * @return string
+ * @protected
+ * @author Nicola Asuni
+ * @since 5.0.010 (2010-05-17)
+ */
+ protected function _getannotsrefs($n) {
+ if (!(isset($this->PageAnnots[$n]) OR ($this->sign AND isset($this->signature_data['cert_type'])))) {
return '';
}
+ $out = ' /Annots [';
+ if (isset($this->PageAnnots[$n])) {
+ foreach ($this->PageAnnots[$n] as $key => $val) {
+ if (!in_array($val['n'], $this->radio_groups)) {
+ $out .= ' '.$val['n'].' 0 R';
+ }
+ }
+ // add radiobutton groups
+ if (isset($this->radiobutton_groups[$n])) {
+ foreach ($this->radiobutton_groups[$n] as $key => $data) {
+ if (isset($data['n'])) {
+ $out .= ' '.$data['n'].' 0 R';
+ }
+ }
+ }
+ }
+ if ($this->sign AND ($n == $this->signature_appearance['page']) AND isset($this->signature_data['cert_type'])) {
+ // set reference for signature object
+ $out .= ' '.$this->sig_obj_id.' 0 R';
+ }
+ if (!empty($this->empty_signature_appearance)) {
+ foreach ($this->empty_signature_appearance as $esa) {
+ if ($esa['page'] == $n) {
+ // set reference for empty signature objects
+ $out .= ' '.$esa['objid'].' 0 R';
+ }
+ }
+ }
+ $out .= ' ]';
+ return $out;
+ }
- /**
- * Unset all class variables except the following critical variables: internal_encoding, state, bufferlen, buffer and diskcache.
- * @param boolean $destroyall if true destroys all class variables, otherwise preserves critical variables.
- * @param boolean $preserve_objcopy if true preserves the objcopy variable
- * @access public
- * @since 4.5.016 (2009-02-24)
- */
- public function _destroy($destroyall=false, $preserve_objcopy=false) {
- if ($destroyall AND isset($this->diskcache) AND $this->diskcache AND (!$preserve_objcopy) AND (!$this->empty_string($this->buffer))) {
- // remove buffer file from cache
- unlink($this->buffer);
- }
- foreach (array_keys(get_object_vars($this)) as $val) {
- if ($destroyall OR (
- ($val != 'internal_encoding')
- AND ($val != 'state')
- AND ($val != 'bufferlen')
- AND ($val != 'buffer')
- AND ($val != 'diskcache')
- AND ($val != 'sign')
- AND ($val != 'signature_data')
- AND ($val != 'signature_max_lenght')
- AND ($val != 'byterange_string')
- )) {
- if (!$preserve_objcopy OR ($val != 'objcopy')) {
- unset($this->$val);
- }
- }
- }
- }
-
- /**
- * Check for locale-related bug
- * @access protected
- */
- protected function _dochecks() {
- //Check for locale-related bug
- if (1.1 == 1) {
- $this->Error('Don\'t alter the locale before including class file');
- }
- //Check for decimal separator
- if (sprintf('%.1F', 1.0) != '1.0') {
- setlocale(LC_NUMERIC, 'C');
- }
- }
-
- /**
- * Return fonts path
- * @return string
- * @access protected
- */
- protected function _getfontpath() {
- if (!defined('K_PATH_FONTS') AND is_dir(dirname(__FILE__).'/fonts')) {
- define('K_PATH_FONTS', dirname(__FILE__).'/fonts/');
- }
- return defined('K_PATH_FONTS') ? K_PATH_FONTS : '';
- }
-
- /**
- * Output pages.
- * @access protected
- */
- protected function _putpages() {
- $nb = $this->numpages;
- if (!empty($this->AliasNbPages)) {
- $nbs = $this->formatPageNumber($nb);
- $nbu = $this->UTF8ToUTF16BE($nbs, false); // replacement for unicode font
- $alias_a = $this->_escape($this->AliasNbPages);
- $alias_au = $this->_escape('{'.$this->AliasNbPages.'}');
- if ($this->isunicode) {
- $alias_b = $this->_escape($this->UTF8ToLatin1($this->AliasNbPages));
- $alias_bu = $this->_escape($this->UTF8ToLatin1('{'.$this->AliasNbPages.'}'));
- $alias_c = $this->_escape($this->utf8StrRev($this->AliasNbPages, false, $this->tmprtl));
- $alias_cu = $this->_escape($this->utf8StrRev('{'.$this->AliasNbPages.'}', false, $this->tmprtl));
- }
- }
- if (!empty($this->AliasNumPage)) {
- $alias_pa = $this->_escape($this->AliasNumPage);
- $alias_pau = $this->_escape('{'.$this->AliasNumPage.'}');
- if ($this->isunicode) {
- $alias_pb = $this->_escape($this->UTF8ToLatin1($this->AliasNumPage));
- $alias_pbu = $this->_escape($this->UTF8ToLatin1('{'.$this->AliasNumPage.'}'));
- $alias_pc = $this->_escape($this->utf8StrRev($this->AliasNumPage, false, $this->tmprtl));
- $alias_pcu = $this->_escape($this->utf8StrRev('{'.$this->AliasNumPage.'}', false, $this->tmprtl));
- }
- }
- $pagegroupnum = 0;
- $filter = ($this->compress) ? '/Filter /FlateDecode ' : '';
- for ($n=1; $n <= $nb; ++$n) {
- $temppage = $this->getPageBuffer($n);
- if (!empty($this->pagegroups)) {
- if(isset($this->newpagegroup[$n])) {
- $pagegroupnum = 0;
- }
- ++$pagegroupnum;
- foreach ($this->pagegroups as $k => $v) {
- // replace total pages group numbers
- $vs = $this->formatPageNumber($v);
- $vu = $this->UTF8ToUTF16BE($vs, false);
- $alias_ga = $this->_escape($k);
- $alias_gau = $this->_escape('{'.$k.'}');
- if ($this->isunicode) {
- $alias_gb = $this->_escape($this->UTF8ToLatin1($k));
- $alias_gbu = $this->_escape($this->UTF8ToLatin1('{'.$k.'}'));
- $alias_gc = $this->_escape($this->utf8StrRev($k, false, $this->tmprtl));
- $alias_gcu = $this->_escape($this->utf8StrRev('{'.$k.'}', false, $this->tmprtl));
- }
- $temppage = str_replace($alias_gau, $vu, $temppage);
- if ($this->isunicode) {
- $temppage = str_replace($alias_gbu, $vu, $temppage);
- $temppage = str_replace($alias_gcu, $vu, $temppage);
- $temppage = str_replace($alias_gb, $vs, $temppage);
- $temppage = str_replace($alias_gc, $vs, $temppage);
- }
- $temppage = str_replace($alias_ga, $vs, $temppage);
- // replace page group numbers
- $pvs = $this->formatPageNumber($pagegroupnum);
- $pvu = $this->UTF8ToUTF16BE($pvs, false);
- $pk = str_replace('{nb', '{pnb', $k);
- $alias_pga = $this->_escape($pk);
- $alias_pgau = $this->_escape('{'.$pk.'}');
- if ($this->isunicode) {
- $alias_pgb = $this->_escape($this->UTF8ToLatin1($pk));
- $alias_pgbu = $this->_escape($this->UTF8ToLatin1('{'.$pk.'}'));
- $alias_pgc = $this->_escape($this->utf8StrRev($pk, false, $this->tmprtl));
- $alias_pgcu = $this->_escape($this->utf8StrRev('{'.$pk.'}', false, $this->tmprtl));
- }
- $temppage = str_replace($alias_pgau, $pvu, $temppage);
- if ($this->isunicode) {
- $temppage = str_replace($alias_pgbu, $pvu, $temppage);
- $temppage = str_replace($alias_pgcu, $pvu, $temppage);
- $temppage = str_replace($alias_pgb, $pvs, $temppage);
- $temppage = str_replace($alias_pgc, $pvs, $temppage);
- }
- $temppage = str_replace($alias_pga, $pvs, $temppage);
- }
- }
- if (!empty($this->AliasNbPages)) {
- // replace total pages number
- $temppage = str_replace($alias_au, $nbu, $temppage);
- if ($this->isunicode) {
- $temppage = str_replace($alias_bu, $nbu, $temppage);
- $temppage = str_replace($alias_cu, $nbu, $temppage);
- $temppage = str_replace($alias_b, $nbs, $temppage);
- $temppage = str_replace($alias_c, $nbs, $temppage);
- }
- $temppage = str_replace($alias_a, $nbs, $temppage);
- }
- if (!empty($this->AliasNumPage)) {
- // replace page number
- $pnbs = $this->formatPageNumber($n);
- $pnbu = $this->UTF8ToUTF16BE($pnbs, false); // replacement for unicode font
- $temppage = str_replace($alias_pau, $pnbu, $temppage);
- if ($this->isunicode) {
- $temppage = str_replace($alias_pbu, $pnbu, $temppage);
- $temppage = str_replace($alias_pcu, $pnbu, $temppage);
- $temppage = str_replace($alias_pb, $pnbs, $temppage);
- $temppage = str_replace($alias_pc, $pnbs, $temppage);
- }
- $temppage = str_replace($alias_pa, $pnbs, $temppage);
- }
- $temppage = str_replace($this->epsmarker, '', $temppage);
- //Page
- $this->page_obj_id[$n] = $this->_newobj();
- $this->_out('<_out('/Parent 1 0 R');
- $this->_out(sprintf('/MediaBox [0 0 %.2F %.2F]', $this->pagedim[$n]['w'], $this->pagedim[$n]['h']));
- $this->_out('/Resources 2 0 R');
- $this->_putannotsrefs($n);
- $this->_out('/Contents '.($this->n + 1).' 0 R>>');
- $this->_out('endobj');
- //Page content
- $p = ($this->compress) ? gzcompress($temppage) : $temppage;
- $this->_newobj();
- $this->_out('<<'.$filter.'/Length '.strlen($p).'>>');
- $this->_putstream($p);
- $this->_out('endobj');
- if ($this->diskcache) {
- // remove temporary files
- unlink($this->pages[$n]);
- }
- }
- //Pages root
- $this->offsets[1] = $this->bufferlen;
- $this->_out('1 0 obj');
- $this->_out('<_out('/Kids [');
- foreach($this->page_obj_id as $page_obj) {
- $this->_out($page_obj.' 0 R');
- }
- $this->_out(']');
- $this->_out('/Count '.$nb);
- $this->_out('>>');
- $this->_out('endobj');
- }
-
- /**
- * Output referencees to page annotations
- * @param int $n page number
- * @access protected
- * @author Nicola Asuni
- * @since 4.7.000 (2008-08-29)
- */
- protected function _putannotsrefs($n) {
- if (!(isset($this->PageAnnots[$n]) OR ($this->sign AND isset($this->signature_data['cert_type'])))) {
- return;
- }
- $this->_out('/Annots [');
+ /**
+ * Output annotations objects for all pages.
+ * !!! THIS METHOD IS NOT YET COMPLETED !!!
+ * See section 12.5 of PDF 32000_2008 reference.
+ * @protected
+ * @author Nicola Asuni
+ * @since 4.0.018 (2008-08-06)
+ */
+ protected function _putannotsobjs() {
+ // reset object counter
+ for ($n=1; $n <= $this->numpages; ++$n) {
if (isset($this->PageAnnots[$n])) {
- $num_annots = count($this->PageAnnots[$n]);
- for ($i = 0; $i < $num_annots; ++$i) {
- ++$this->curr_annot_obj_id;
- if (!in_array($this->curr_annot_obj_id, $this->radio_groups)) {
- $this->_out($this->curr_annot_obj_id.' 0 R');
- } else {
- ++$num_annots;
- }
- }
- }
- if (($n==1) AND $this->sign AND isset($this->signature_data['cert_type'])) {
- // set reference for signature object
- $this->_out($this->sig_annot_ref);
- }
- $this->_out(']');
- }
-
- /**
- * Output annotations objects for all pages.
- * !!! THIS FUNCTION IS NOT YET COMPLETED !!!
- * See section 12.5 of PDF 32000_2008 reference.
- * @access protected
- * @author Nicola Asuni
- * @since 4.0.018 (2008-08-06)
- */
- protected function _putannotsobjs() {
- // reset object counter
- $this->annot_obj_id = $this->annots_start_obj_id;
- for ($n=1; $n <= $this->numpages; ++$n) {
- if (isset($this->PageAnnots[$n])) {
- // set page annotations
- foreach ($this->PageAnnots[$n] as $key => $pl) {
- // create annotation object for grouping radiobuttons
- if (isset($this->radiobutton_groups[$n][$pl['txt']]) AND is_array($this->radiobutton_groups[$n][$pl['txt']])) {
- $annots = '<<';
- $annots .= ' /Type /Annot';
- $annots .= ' /Subtype /Widget';
- $annots .= ' /T '.$this->_datastring($pl['txt']);
- $annots .= ' /FT /Btn';
+ // set page annotations
+ foreach ($this->PageAnnots[$n] as $key => $pl) {
+ $annot_obj_id = $this->PageAnnots[$n][$key]['n'];
+ // create annotation object for grouping radiobuttons
+ if (isset($this->radiobutton_groups[$n][$pl['txt']]) AND is_array($this->radiobutton_groups[$n][$pl['txt']])) {
+ $radio_button_obj_id = $this->radiobutton_groups[$n][$pl['txt']]['n'];
+ $annots = '<<';
+ $annots .= ' /Type /Annot';
+ $annots .= ' /Subtype /Widget';
+ $annots .= ' /Rect [0 0 0 0]';
+ if ($this->radiobutton_groups[$n][$pl['txt']]['#readonly#']) {
+ // read only
+ $annots .= ' /F 68';
+ $annots .= ' /Ff 49153';
+ } else {
+ $annots .= ' /F 4'; // default print for PDF/A
$annots .= ' /Ff 49152';
- $annots .= ' /Kids [';
- foreach ($this->radiobutton_groups[$n][$pl['txt']] as $data) {
+ }
+ $annots .= ' /T '.$this->_datastring($pl['txt'], $radio_button_obj_id);
+ $annots .= ' /FT /Btn';
+ $annots .= ' /Kids [';
+ foreach ($this->radiobutton_groups[$n][$pl['txt']] as $key => $data) {
+ if (isset($data['kid'])) {
$annots .= ' '.$data['kid'].' 0 R';
if ($data['def'] !== 'Off') {
$defval = $data['def'];
}
}
- $annots .= ' ]';
- if (isset($defval)) {
- $annots .= ' /V /'.$defval;
- }
- $annots .= ' >>';
- ++$this->annot_obj_id;
- $this->offsets[$this->annot_obj_id] = $this->bufferlen;
- $this->_out($this->annot_obj_id.' 0 obj');
- $this->_out($annots);
- $this->_out('endobj');
- $this->form_obj_id[] = $this->annot_obj_id;
- // store object id to be used on Parent entry of Kids
- $this->radiobutton_groups[$n][$pl['txt']] = $this->annot_obj_id;
}
- $formfield = false;
- $pl['opt'] = array_change_key_case($pl['opt'], CASE_LOWER);
- $a = $pl['x'] * $this->k;
- $b = $this->pagedim[$n]['h'] - (($pl['y'] + $pl['h']) * $this->k);
- $c = $pl['w'] * $this->k;
- $d = $pl['h'] * $this->k;
- $rect = sprintf('%.2F %.2F %.2F %.2F', $a, $b, $a+$c, $b+$d);
- // create new annotation object
- $annots = '<_textstring($pl['txt']);
- $annots .= ' /P '.$this->page_obj_id[$n].' 0 R';
- $annots .= ' /NM '.$this->_datastring(sprintf('%04u-%04u', $n, $key));
- $annots .= ' /M '.$this->_datestring();
- if (isset($pl['opt']['f'])) {
- $val = 0;
- if (is_array($pl['opt']['f'])) {
- foreach ($pl['opt']['f'] as $f) {
- switch (strtolower($f)) {
- case 'invisible': {
- $val += 1 << 0;
- break;
- }
- case 'hidden': {
- $val += 1 << 1;
- break;
- }
- case 'print': {
- $val += 1 << 2;
- break;
- }
- case 'nozoom': {
- $val += 1 << 3;
- break;
- }
- case 'norotate': {
- $val += 1 << 4;
- break;
- }
- case 'noview': {
- $val += 1 << 5;
- break;
- }
- case 'readonly': {
- $val += 1 << 6;
- break;
- }
- case 'locked': {
- $val += 1 << 8;
- break;
- }
- case 'togglenoview': {
- $val += 1 << 9;
- break;
- }
- case 'lockedcontents': {
- $val += 1 << 10;
- break;
- }
- default: {
- break;
- }
+ $annots .= ' >>';
+ $this->_out($this->_getobj($radio_button_obj_id)."\n".$annots."\n".'endobj');
+ $this->form_obj_id[] = $radio_button_obj_id;
+ // store object id to be used on Parent entry of Kids
+ $this->radiobutton_groups[$n][$pl['txt']] = $radio_button_obj_id;
+ }
+ $formfield = false;
+ $pl['opt'] = array_change_key_case($pl['opt'], CASE_LOWER);
+ $a = $pl['x'] * $this->k;
+ $b = $this->pagedim[$n]['h'] - (($pl['y'] + $pl['h']) * $this->k);
+ $c = $pl['w'] * $this->k;
+ $d = $pl['h'] * $this->k;
+ $rect = sprintf('%.2F %.2F %.2F %.2F', $a, $b, $a+$c, $b+$d);
+ // create new annotation object
+ $annots = '<_textstring($pl['txt'], $annot_obj_id);
+ $annots .= ' /P '.$this->page_obj_id[$n].' 0 R';
+ $annots .= ' /NM '.$this->_datastring(sprintf('%04u-%04u', $n, $key), $annot_obj_id);
+ $annots .= ' /M '.$this->_datestring($annot_obj_id);
+ if (isset($pl['opt']['f'])) {
+ $fval = 0;
+ if (is_array($pl['opt']['f'])) {
+ foreach ($pl['opt']['f'] as $f) {
+ switch (strtolower($f)) {
+ case 'invisible': {
+ $fval += 1 << 0;
+ break;
+ }
+ case 'hidden': {
+ $fval += 1 << 1;
+ break;
+ }
+ case 'print': {
+ $fval += 1 << 2;
+ break;
+ }
+ case 'nozoom': {
+ $fval += 1 << 3;
+ break;
+ }
+ case 'norotate': {
+ $fval += 1 << 4;
+ break;
+ }
+ case 'noview': {
+ $fval += 1 << 5;
+ break;
+ }
+ case 'readonly': {
+ $fval += 1 << 6;
+ break;
+ }
+ case 'locked': {
+ $fval += 1 << 8;
+ break;
+ }
+ case 'togglenoview': {
+ $fval += 1 << 9;
+ break;
+ }
+ case 'lockedcontents': {
+ $fval += 1 << 10;
+ break;
+ }
+ default: {
+ break;
}
}
- } else {
- $val = intval($pl['opt']['f']);
}
- $annots .= ' /F '.intval($val);
+ } else {
+ $fval = intval($pl['opt']['f']);
}
- if (isset($pl['opt']['as']) AND is_string($pl['opt']['as'])) {
- $annots .= ' /AS /'.$pl['opt']['as'];
- }
- if (isset($pl['opt']['ap'])) {
- // appearance stream
- $annots .= ' /AP <<';
- if (is_array($pl['opt']['ap'])) {
- foreach ($pl['opt']['ap'] as $apmode => $apdef) {
- // $apmode can be: n = normal; r = rollover; d = down;
- $annots .= ' /'.strtoupper($apmode);
- if (is_array($apdef)) {
- $annots .= ' <<';
- foreach ($apdef as $apstate => $stream) {
- // reference to XObject that define the appearance for this mode-state
- $apsobjid = $this->_putAPXObject($c, $d, $stream);
- $annots .= ' /'.$apstate.' '.$apsobjid.' 0 R';
- }
- $annots .= ' >>';
- } else {
- // reference to XObject that define the appearance for this mode
- $apsobjid = $this->_putAPXObject($c, $d, $apdef);
- $annots .= ' '.$apsobjid.' 0 R';
+ } else {
+ $fval = 4;
+ }
+ if ($this->pdfa_mode) {
+ // force print flag for PDF/A mode
+ $fval |= 4;
+ }
+ $annots .= ' /F '.intval($fval);
+ if (isset($pl['opt']['as']) AND is_string($pl['opt']['as'])) {
+ $annots .= ' /AS /'.$pl['opt']['as'];
+ }
+ if (isset($pl['opt']['ap'])) {
+ // appearance stream
+ $annots .= ' /AP <<';
+ if (is_array($pl['opt']['ap'])) {
+ foreach ($pl['opt']['ap'] as $apmode => $apdef) {
+ // $apmode can be: n = normal; r = rollover; d = down;
+ $annots .= ' /'.strtoupper($apmode);
+ if (is_array($apdef)) {
+ $annots .= ' <<';
+ foreach ($apdef as $apstate => $stream) {
+ // reference to XObject that define the appearance for this mode-state
+ $apsobjid = $this->_putAPXObject($c, $d, $stream);
+ $annots .= ' /'.$apstate.' '.$apsobjid.' 0 R';
}
+ $annots .= ' >>';
+ } else {
+ // reference to XObject that define the appearance for this mode
+ $apsobjid = $this->_putAPXObject($c, $d, $apdef);
+ $annots .= ' '.$apsobjid.' 0 R';
}
- } else {
- $annots .= $pl['opt']['ap'];
}
- $annots .= ' >>';
+ } else {
+ $annots .= $pl['opt']['ap'];
}
- if (isset($pl['opt']['bs']) AND (is_array($pl['opt']['bs']))) {
- $annots .= ' /BS <<';
- $annots .= ' /Type /Border';
- if (isset($pl['opt']['bs']['w'])) {
- $annots .= ' /W '.intval($pl['opt']['bs']['w']);
+ $annots .= ' >>';
+ }
+ if (isset($pl['opt']['bs']) AND (is_array($pl['opt']['bs']))) {
+ $annots .= ' /BS <<';
+ $annots .= ' /Type /Border';
+ if (isset($pl['opt']['bs']['w'])) {
+ $annots .= ' /W '.intval($pl['opt']['bs']['w']);
+ }
+ $bstyles = array('S', 'D', 'B', 'I', 'U');
+ if (isset($pl['opt']['bs']['s']) AND in_array($pl['opt']['bs']['s'], $bstyles)) {
+ $annots .= ' /S /'.$pl['opt']['bs']['s'];
+ }
+ if (isset($pl['opt']['bs']['d']) AND (is_array($pl['opt']['bs']['d']))) {
+ $annots .= ' /D [';
+ foreach ($pl['opt']['bs']['d'] as $cord) {
+ $annots .= ' '.intval($cord);
}
- $bstyles = array('S', 'D', 'B', 'I', 'U');
- if (isset($pl['opt']['bs']['s']) AND in_array($pl['opt']['bs']['s'], $bstyles)) {
- $annots .= ' /S /'.$pl['opt']['bs']['s'];
- }
- if (isset($pl['opt']['bs']['d']) AND (is_array($pl['opt']['bs']['d']))) {
- $annots .= ' /D [';
- foreach ($pl['opt']['bs']['d'] as $cord) {
- $annots .= ' '.intval($cord);
+ $annots .= ']';
+ }
+ $annots .= ' >>';
+ } else {
+ $annots .= ' /Border [';
+ if (isset($pl['opt']['border']) AND (count($pl['opt']['border']) >= 3)) {
+ $annots .= intval($pl['opt']['border'][0]).' ';
+ $annots .= intval($pl['opt']['border'][1]).' ';
+ $annots .= intval($pl['opt']['border'][2]);
+ if (isset($pl['opt']['border'][3]) AND is_array($pl['opt']['border'][3])) {
+ $annots .= ' [';
+ foreach ($pl['opt']['border'][3] as $dash) {
+ $annots .= intval($dash).' ';
}
$annots .= ']';
}
- $annots .= ' >>';
} else {
- $annots .= ' /Border [';
- if (isset($pl['opt']['border']) AND (count($pl['opt']['border']) >= 3)) {
- $annots .= intval($pl['opt']['border'][0]).' ';
- $annots .= intval($pl['opt']['border'][1]).' ';
- $annots .= intval($pl['opt']['border'][2]);
- if (isset($pl['opt']['border'][3]) AND is_array($pl['opt']['border'][3])) {
- $annots .= ' [';
- foreach ($pl['opt']['border'][3] as $dash) {
- $annots .= intval($dash).' ';
- }
- $annots .= ']';
+ $annots .= '0 0 0';
+ }
+ $annots .= ']';
+ }
+ if (isset($pl['opt']['be']) AND (is_array($pl['opt']['be']))) {
+ $annots .= ' /BE <<';
+ $bstyles = array('S', 'C');
+ if (isset($pl['opt']['be']['s']) AND in_array($pl['opt']['be']['s'], $markups)) {
+ $annots .= ' /S /'.$pl['opt']['bs']['s'];
+ } else {
+ $annots .= ' /S /S';
+ }
+ if (isset($pl['opt']['be']['i']) AND ($pl['opt']['be']['i'] >= 0) AND ($pl['opt']['be']['i'] <= 2)) {
+ $annots .= ' /I '.sprintf(' %.4F', $pl['opt']['be']['i']);
+ }
+ $annots .= '>>';
+ }
+ if (isset($pl['opt']['c']) AND (is_array($pl['opt']['c'])) AND !empty($pl['opt']['c'])) {
+ $annots .= ' /C [';
+ foreach ($pl['opt']['c'] as $col) {
+ $col = intval($col);
+ $color = $col <= 0 ? 0 : ($col >= 255 ? 1 : $col / 255);
+ $annots .= sprintf(' %.4F', $color);
+ }
+ $annots .= ']';
+ }
+ //$annots .= ' /StructParent ';
+ //$annots .= ' /OC ';
+ $markups = array('text', 'freetext', 'line', 'square', 'circle', 'polygon', 'polyline', 'highlight', 'underline', 'squiggly', 'strikeout', 'stamp', 'caret', 'ink', 'fileattachment', 'sound');
+ if (in_array(strtolower($pl['opt']['subtype']), $markups)) {
+ // this is a markup type
+ if (isset($pl['opt']['t']) AND is_string($pl['opt']['t'])) {
+ $annots .= ' /T '.$this->_textstring($pl['opt']['t'], $annot_obj_id);
+ }
+ //$annots .= ' /Popup ';
+ if (isset($pl['opt']['ca'])) {
+ $annots .= ' /CA '.sprintf('%.4F', floatval($pl['opt']['ca']));
+ }
+ if (isset($pl['opt']['rc'])) {
+ $annots .= ' /RC '.$this->_textstring($pl['opt']['rc'], $annot_obj_id);
+ }
+ $annots .= ' /CreationDate '.$this->_datestring($annot_obj_id);
+ //$annots .= ' /IRT ';
+ if (isset($pl['opt']['subj'])) {
+ $annots .= ' /Subj '.$this->_textstring($pl['opt']['subj'], $annot_obj_id);
+ }
+ //$annots .= ' /RT ';
+ //$annots .= ' /IT ';
+ //$annots .= ' /ExData ';
+ }
+ $lineendings = array('Square', 'Circle', 'Diamond', 'OpenArrow', 'ClosedArrow', 'None', 'Butt', 'ROpenArrow', 'RClosedArrow', 'Slash');
+ // Annotation types
+ switch (strtolower($pl['opt']['subtype'])) {
+ case 'text': {
+ if (isset($pl['opt']['open'])) {
+ $annots .= ' /Open '. (strtolower($pl['opt']['open']) == 'true' ? 'true' : 'false');
+ }
+ $iconsapp = array('Comment', 'Help', 'Insert', 'Key', 'NewParagraph', 'Note', 'Paragraph');
+ if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) {
+ $annots .= ' /Name /'.$pl['opt']['name'];
+ } else {
+ $annots .= ' /Name /Note';
+ }
+ $statemodels = array('Marked', 'Review');
+ if (isset($pl['opt']['statemodel']) AND in_array($pl['opt']['statemodel'], $statemodels)) {
+ $annots .= ' /StateModel /'.$pl['opt']['statemodel'];
+ } else {
+ $pl['opt']['statemodel'] = 'Marked';
+ $annots .= ' /StateModel /'.$pl['opt']['statemodel'];
+ }
+ if ($pl['opt']['statemodel'] == 'Marked') {
+ $states = array('Accepted', 'Unmarked');
+ } else {
+ $states = array('Accepted', 'Rejected', 'Cancelled', 'Completed', 'None');
+ }
+ if (isset($pl['opt']['state']) AND in_array($pl['opt']['state'], $states)) {
+ $annots .= ' /State /'.$pl['opt']['state'];
+ } else {
+ if ($pl['opt']['statemodel'] == 'Marked') {
+ $annots .= ' /State /Unmarked';
+ } else {
+ $annots .= ' /State /None';
}
+ }
+ break;
+ }
+ case 'link': {
+ if (is_string($pl['txt'])) {
+ // external URI link
+ $annots .= ' /A <_datastring($this->unhtmlentities($pl['txt']), $annot_obj_id).'>>';
} else {
- $annots .= '0 0 0';
+ // internal link
+ $l = $this->links[$pl['txt']];
+ if (isset($this->page_obj_id[($l[0])])) {
+ $annots .= sprintf(' /Dest [%u 0 R /XYZ 0 %.2F null]', $this->page_obj_id[($l[0])], ($this->pagedim[$l[0]]['h'] - ($l[1] * $this->k)));
+ }
}
- $annots .= ']';
- }
- if (isset($pl['opt']['be']) AND (is_array($pl['opt']['be']))) {
- $annots .= ' /BE <<';
- $bstyles = array('S', 'C');
- if (isset($pl['opt']['be']['s']) AND in_array($pl['opt']['be']['s'], $markups)) {
- $annots .= ' /S /'.$pl['opt']['bs']['s'];
+ $hmodes = array('N', 'I', 'O', 'P');
+ if (isset($pl['opt']['h']) AND in_array($pl['opt']['h'], $hmodes)) {
+ $annots .= ' /H /'.$pl['opt']['h'];
} else {
- $annots .= ' /S /S';
+ $annots .= ' /H /I';
}
- if (isset($pl['opt']['be']['i']) AND ($pl['opt']['be']['i'] >= 0) AND ($pl['opt']['be']['i'] <= 2)) {
- $annots .= ' /I '.sprintf(" %.4F", $pl['opt']['be']['i']);
- }
- $annots .= '>>';
+ //$annots .= ' /PA ';
+ //$annots .= ' /Quadpoints ';
+ break;
}
- if (isset($pl['opt']['c']) AND (is_array($pl['opt']['c'])) AND !empty($pl['opt']['c'])) {
- $annots .= ' /C [';
- foreach ($pl['opt']['c'] as $col) {
- $col = intval($col);
- $color = $col <= 0 ? 0 : ($col >= 255 ? 1 : $col / 255);
- $annots .= sprintf(" %.4F", $color);
+ case 'freetext': {
+ if (isset($pl['opt']['da']) AND !empty($pl['opt']['da'])) {
+ $annots .= ' /DA ('.$pl['opt']['da'].')';
}
- $annots .= ']';
- }
- //$annots .= ' /StructParent ';
- //$annots .= ' /OC ';
- $markups = array('text', 'freetext', 'line', 'square', 'circle', 'polygon', 'polyline', 'highlight', 'underline', 'squiggly', 'strikeout', 'stamp', 'caret', 'ink', 'fileattachment', 'sound');
- if (in_array(strtolower($pl['opt']['subtype']), $markups)) {
- // this is a markup type
- if (isset($pl['opt']['t']) AND is_string($pl['opt']['t'])) {
- $annots .= ' /T '.$this->_textstring($pl['opt']['t']);
- }
- //$annots .= ' /Popup ';
- if (isset($pl['opt']['ca'])) {
- $annots .= ' /CA '.sprintf("%.4F", floatval($pl['opt']['ca']));
+ if (isset($pl['opt']['q']) AND ($pl['opt']['q'] >= 0) AND ($pl['opt']['q'] <= 2)) {
+ $annots .= ' /Q '.intval($pl['opt']['q']);
}
if (isset($pl['opt']['rc'])) {
- $annots .= ' /RC '.$this->_textstring($pl['opt']['rc']);
+ $annots .= ' /RC '.$this->_textstring($pl['opt']['rc'], $annot_obj_id);
}
- $annots .= ' /CreationDate '.$this->_datestring();
- //$annots .= ' /IRT ';
- if (isset($pl['opt']['subj'])) {
- $annots .= ' /Subj '.$this->_textstring($pl['opt']['subj']);
+ if (isset($pl['opt']['ds'])) {
+ $annots .= ' /DS '.$this->_textstring($pl['opt']['ds'], $annot_obj_id);
}
- //$annots .= ' /RT ';
- //$annots .= ' /IT ';
- //$annots .= ' /ExData ';
- }
- $lineendings = array('Square', 'Circle', 'Diamond', 'OpenArrow', 'ClosedArrow', 'None', 'Butt', 'ROpenArrow', 'RClosedArrow', 'Slash');
- switch (strtolower($pl['opt']['subtype'])) {
- case 'text': {
- if (isset($pl['opt']['open'])) {
- $annots .= ' /Open '. (strtolower($pl['opt']['open']) == 'true' ? 'true' : 'false');
+ if (isset($pl['opt']['cl']) AND is_array($pl['opt']['cl'])) {
+ $annots .= ' /CL [';
+ foreach ($pl['opt']['cl'] as $cl) {
+ $annots .= sprintf('%.4F ', $cl * $this->k);
}
- $iconsapp = array('Comment', 'Help', 'Insert', 'Key', 'NewParagraph', 'Note', 'Paragraph');
+ $annots .= ']';
+ }
+ $tfit = array('FreeText', 'FreeTextCallout', 'FreeTextTypeWriter');
+ if (isset($pl['opt']['it']) AND in_array($pl['opt']['it'], $tfit)) {
+ $annots .= ' /IT /'.$pl['opt']['it'];
+ }
+ if (isset($pl['opt']['rd']) AND is_array($pl['opt']['rd'])) {
+ $l = $pl['opt']['rd'][0] * $this->k;
+ $r = $pl['opt']['rd'][1] * $this->k;
+ $t = $pl['opt']['rd'][2] * $this->k;
+ $b = $pl['opt']['rd'][3] * $this->k;
+ $annots .= ' /RD ['.sprintf('%.2F %.2F %.2F %.2F', $l, $r, $t, $b).']';
+ }
+ if (isset($pl['opt']['le']) AND in_array($pl['opt']['le'], $lineendings)) {
+ $annots .= ' /LE /'.$pl['opt']['le'];
+ }
+ break;
+ }
+ case 'line': {
+ break;
+ }
+ case 'square': {
+ break;
+ }
+ case 'circle': {
+ break;
+ }
+ case 'polygon': {
+ break;
+ }
+ case 'polyline': {
+ break;
+ }
+ case 'highlight': {
+ break;
+ }
+ case 'underline': {
+ break;
+ }
+ case 'squiggly': {
+ break;
+ }
+ case 'strikeout': {
+ break;
+ }
+ case 'stamp': {
+ break;
+ }
+ case 'caret': {
+ break;
+ }
+ case 'ink': {
+ break;
+ }
+ case 'popup': {
+ break;
+ }
+ case 'fileattachment': {
+ if ($this->pdfa_mode) {
+ // embedded files are not allowed in PDF/A mode
+ break;
+ }
+ if (!isset($pl['opt']['fs'])) {
+ break;
+ }
+ $filename = basename($pl['opt']['fs']);
+ if (isset($this->embeddedfiles[$filename]['n'])) {
+ $annots .= ' /FS <_datastring($filename, $annot_obj_id).' /EF <embeddedfiles[$filename]['n'].' 0 R>> >>';
+ $iconsapp = array('Graph', 'Paperclip', 'PushPin', 'Tag');
if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) {
$annots .= ' /Name /'.$pl['opt']['name'];
} else {
- $annots .= ' /Name /Note';
- }
- $statemodels = array('Marked', 'Review');
- if (isset($pl['opt']['statemodel']) AND in_array($pl['opt']['statemodel'], $statemodels)) {
- $annots .= ' /StateModel /'.$pl['opt']['statemodel'];
- } else {
- $pl['opt']['statemodel'] = 'Marked';
- $annots .= ' /StateModel /'.$pl['opt']['statemodel'];
- }
- if ($pl['opt']['statemodel'] == 'Marked') {
- $states = array('Accepted', 'Unmarked');
- } else {
- $states = array('Accepted', 'Rejected', 'Cancelled', 'Completed', 'None');
- }
- if (isset($pl['opt']['state']) AND in_array($pl['opt']['state'], $states)) {
- $annots .= ' /State /'.$pl['opt']['state'];
- } else {
- if ($pl['opt']['statemodel'] == 'Marked') {
- $annots .= ' /State /Unmarked';
- } else {
- $annots .= ' /State /None';
- }
+ $annots .= ' /Name /PushPin';
}
+ }
+ break;
+ }
+ case 'sound': {
+ if (!isset($pl['opt']['fs'])) {
break;
}
- case 'link': {
- if(is_string($pl['txt'])) {
- // external URI link
- $annots .= ' /A <_datastring($this->unhtmlentities($pl['txt'])).'>>';
+ $filename = basename($pl['opt']['fs']);
+ if (isset($this->embeddedfiles[$filename]['n'])) {
+ // ... TO BE COMPLETED ...
+ // /R /C /B /E /CO /CP
+ $annots .= ' /Sound <_datastring($filename, $annot_obj_id).' /EF <embeddedfiles[$filename]['n'].' 0 R>> >>';
+ $iconsapp = array('Speaker', 'Mic');
+ if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) {
+ $annots .= ' /Name /'.$pl['opt']['name'];
} else {
- // internal link
- $l = $this->links[$pl['txt']];
- $annots .= sprintf(' /Dest [%d 0 R /XYZ 0 %.2F null]', (1 + (2 * $l[0])), ($this->pagedim[$l[0]]['h'] - ($l[1] * $this->k)));
+ $annots .= ' /Name /Speaker';
}
- $hmodes = array('N', 'I', 'O', 'P');
- if (isset($pl['opt']['h']) AND in_array($pl['opt']['h'], $hmodes)) {
- $annots .= ' /H /'.$pl['opt']['h'];
- } else {
- $annots .= ' /H /I';
- }
- //$annots .= ' /PA ';
- //$annots .= ' /Quadpoints ';
- break;
}
- case 'freetext': {
- if (isset($pl['opt']['da']) AND !empty($pl['opt']['da'])) {
- $annots .= ' /DA ('.$pl['opt']['da'].')';
+ break;
+ }
+ case 'movie': {
+ break;
+ }
+ case 'widget': {
+ $hmode = array('N', 'I', 'O', 'P', 'T');
+ if (isset($pl['opt']['h']) AND in_array($pl['opt']['h'], $hmode)) {
+ $annots .= ' /H /'.$pl['opt']['h'];
+ }
+ if (isset($pl['opt']['mk']) AND (is_array($pl['opt']['mk'])) AND !empty($pl['opt']['mk'])) {
+ $annots .= ' /MK <<';
+ if (isset($pl['opt']['mk']['r'])) {
+ $annots .= ' /R '.$pl['opt']['mk']['r'];
}
- if (isset($pl['opt']['q']) AND ($pl['opt']['q'] >= 0) AND ($pl['opt']['q'] <= 2)) {
- $annots .= ' /Q '.intval($pl['opt']['q']);
- }
- if (isset($pl['opt']['rc'])) {
- $annots .= ' /RC '.$this->_textstring($pl['opt']['rc']);
- }
- if (isset($pl['opt']['ds'])) {
- $annots .= ' /DS '.$this->_textstring($pl['opt']['ds']);
- }
- if (isset($pl['opt']['cl']) AND is_array($pl['opt']['cl'])) {
- $annots .= ' /CL [';
- foreach ($pl['opt']['cl'] as $cl) {
- $annots .= sprintf("%.4F ", $cl * $this->k);
+ if (isset($pl['opt']['mk']['bc']) AND (is_array($pl['opt']['mk']['bc']))) {
+ $annots .= ' /BC [';
+ foreach($pl['opt']['mk']['bc'] AS $col) {
+ $col = intval($col);
+ $color = $col <= 0 ? 0 : ($col >= 255 ? 1 : $col / 255);
+ $annots .= sprintf(' %.2F', $color);
}
$annots .= ']';
}
- $tfit = array('FreeText', 'FreeTextCallout', 'FreeTextTypeWriter');
- if (isset($pl['opt']['it']) AND in_array($pl['opt']['it'], $tfit)) {
- $annots .= ' /IT '.$pl['opt']['it'];
+ if (isset($pl['opt']['mk']['bg']) AND (is_array($pl['opt']['mk']['bg']))) {
+ $annots .= ' /BG [';
+ foreach($pl['opt']['mk']['bg'] AS $col) {
+ $col = intval($col);
+ $color = $col <= 0 ? 0 : ($col >= 255 ? 1 : $col / 255);
+ $annots .= sprintf(' %.2F', $color);
+ }
+ $annots .= ']';
}
- if (isset($pl['opt']['rd']) AND is_array($pl['opt']['rd'])) {
- $l = $pl['opt']['rd'][0] * $this->k;
- $r = $pl['opt']['rd'][1] * $this->k;
- $t = $pl['opt']['rd'][2] * $this->k;
- $b = $pl['opt']['rd'][3] * $this->k;
- $annots .= ' /RD ['.sprintf('%.2F %.2F %.2F %.2F', $l, $r, $t, $b).']';
+ if (isset($pl['opt']['mk']['ca'])) {
+ $annots .= ' /CA '.$pl['opt']['mk']['ca'];
}
- if (isset($pl['opt']['le']) AND in_array($pl['opt']['le'], $lineendings)) {
- $annots .= ' /LE /'.$pl['opt']['le'];
+ if (isset($pl['opt']['mk']['rc'])) {
+ $annots .= ' /RC '.$pl['opt']['mk']['rc'];
}
- break;
- }
- case 'line': {
- break;
- }
- case 'square': {
- break;
- }
- case 'circle': {
- break;
- }
- case 'polygon': {
- break;
- }
- case 'polyline': {
- break;
- }
- case 'highlight': {
- break;
- }
- case 'underline': {
- break;
- }
- case 'squiggly': {
- break;
- }
- case 'strikeout': {
- break;
- }
- case 'stamp': {
- break;
- }
- case 'caret': {
- break;
- }
- case 'ink': {
- break;
- }
- case 'popup': {
- break;
- }
- case 'fileattachment': {
- if (!isset($pl['opt']['fs'])) {
- break;
+ if (isset($pl['opt']['mk']['ac'])) {
+ $annots .= ' /AC '.$pl['opt']['mk']['ac'];
}
- $filename = basename($pl['opt']['fs']);
- if (isset($this->embeddedfiles[$filename]['n'])) {
- $annots .= ' /FS <_datastring($filename).' /EF <embeddedfiles[$filename]['n'].' 0 R>> >>';
- $iconsapp = array('Graph', 'Paperclip', 'PushPin', 'Tag');
- if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) {
- $annots .= ' /Name /'.$pl['opt']['name'];
- } else {
- $annots .= ' /Name /PushPin';
+ if (isset($pl['opt']['mk']['i'])) {
+ $info = $this->getImageBuffer($pl['opt']['mk']['i']);
+ if ($info !== false) {
+ $annots .= ' /I '.$info['n'].' 0 R';
}
}
- break;
- }
- case 'sound': {
- if (!isset($pl['opt']['sound'])) {
- break;
- }
- $filename = basename($pl['opt']['sound']);
- if (isset($this->embeddedfiles[$filename]['n'])) {
- $annots .= ' /Sound <_datastring($filename).' /EF <embeddedfiles[$filename]['n'].' 0 R>> >>';
- $iconsapp = array('Speaker', 'Mic');
- if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) {
- $annots .= ' /Name /'.$pl['opt']['name'];
- } else {
- $annots .= ' /Name /Speaker';
+ if (isset($pl['opt']['mk']['ri'])) {
+ $info = $this->getImageBuffer($pl['opt']['mk']['ri']);
+ if ($info !== false) {
+ $annots .= ' /RI '.$info['n'].' 0 R';
}
}
- break;
- }
- case 'movie': {
- break;
- }
- case 'widget': {
- $hmode = array('N', 'I', 'O', 'P', 'T');
- if (isset($pl['opt']['h']) AND in_array($pl['opt']['h'], $hmode)) {
- $annots .= ' /H /'.$pl['opt']['h'];
- }
- if (isset($pl['opt']['mk']) AND (is_array($pl['opt']['mk'])) AND !empty($pl['opt']['mk'])) {
- $annots .= ' /MK <<';
- if (isset($pl['opt']['mk']['r'])) {
- $annots .= ' /R '.$pl['opt']['mk']['r'];
- }
- if (isset($pl['opt']['mk']['bc']) AND (is_array($pl['opt']['mk']['bc']))) {
- $annots .= ' /BC [';
- foreach($pl['opt']['mk']['bc'] AS $col) {
- $col = intval($col);
- $color = $col <= 0 ? 0 : ($col >= 255 ? 1 : $col / 255);
- $annots .= ' '.$color;
- }
- $annots .= ']';
- }
- if (isset($pl['opt']['mk']['bg']) AND (is_array($pl['opt']['mk']['bg']))) {
- $annots .= ' /BG [';
- foreach($pl['opt']['mk']['bg'] AS $col) {
- $col = intval($col);
- $color = $col <= 0 ? 0 : ($col >= 255 ? 1 : $col / 255);
- $annots .= ' '.$color;
- }
- $annots .= ']';
- }
- if (isset($pl['opt']['mk']['ca'])) {
- $annots .= ' /CA '.$pl['opt']['mk']['ca'].'';
- }
- if (isset($pl['opt']['mk']['rc'])) {
- $annots .= ' /RC '.$pl['opt']['mk']['ca'].'';
- }
- if (isset($pl['opt']['mk']['ac'])) {
- $annots .= ' /AC '.$pl['opt']['mk']['ca'].'';
- }
- if (isset($pl['opt']['mk']['i'])) {
- $info = $this->getImageBuffer($pl['opt']['mk']['i']);
- if ($info !== false) {
- $annots .= ' /I '.$info['n'].' 0 R';
- }
- }
- if (isset($pl['opt']['mk']['ri'])) {
- $info = $this->getImageBuffer($pl['opt']['mk']['ri']);
- if ($info !== false) {
- $annots .= ' /RI '.$info['n'].' 0 R';
- }
- }
- if (isset($pl['opt']['mk']['ix'])) {
- $info = $this->getImageBuffer($pl['opt']['mk']['ix']);
- if ($info !== false) {
- $annots .= ' /IX '.$info['n'].' 0 R';
- }
- }
- if (isset($pl['opt']['mk']['if']) AND (is_array($pl['opt']['mk']['if'])) AND !empty($pl['opt']['mk']['if'])) {
- $annots .= ' /IF <<';
- $if_sw = array('A', 'B', 'S', 'N');
- if (isset($pl['opt']['mk']['if']['sw']) AND in_array($pl['opt']['mk']['if']['sw'], $if_sw)) {
- $annots .= ' /SW /'.$pl['opt']['mk']['if']['sw'];
- }
- $if_s = array('A', 'P');
- if (isset($pl['opt']['mk']['if']['s']) AND in_array($pl['opt']['mk']['if']['s'], $if_s)) {
- $annots .= ' /S /'.$pl['opt']['mk']['if']['s'];
- }
- if (isset($pl['opt']['mk']['if']['a']) AND (is_array($pl['opt']['mk']['if']['a'])) AND !empty($pl['opt']['mk']['if']['a'])) {
- $annots .= ' /A ['.$pl['opt']['mk']['if']['a'][0].' '.$pl['opt']['mk']['if']['a'][1].']';
- }
- if (isset($pl['opt']['mk']['if']['fb']) AND ($pl['opt']['mk']['if']['fb'])) {
- $annots .= ' /FB true';
- }
- $annots .= '>>';
- }
- if (isset($pl['opt']['mk']['tp']) AND ($pl['opt']['mk']['tp'] >= 0) AND ($pl['opt']['mk']['tp'] <= 6)) {
- $annots .= ' /TP '.$pl['opt']['mk']['tp'];
- } else {
- $annots .= ' /TP 0';
- }
- $annots .= '>>';
- } // end MK
- // --- Entries for field dictionaries ---
- if (isset($this->radiobutton_groups[$n][$pl['txt']])) {
- // set parent
- $annots .= ' /Parent '.$this->radiobutton_groups[$n][$pl['txt']].' 0 R';
- }
- if (isset($pl['opt']['t']) AND is_string($pl['opt']['t'])) {
- $annots .= ' /T '.$this->_datastring($pl['opt']['t']);
- }
- if (isset($pl['opt']['tu']) AND is_string($pl['opt']['tu'])) {
- $annots .= ' /TU '.$this->_datastring($pl['opt']['tu']);
- }
- if (isset($pl['opt']['tm']) AND is_string($pl['opt']['tm'])) {
- $annots .= ' /TM '.$this->_datastring($pl['opt']['tm']);
- }
- if (isset($pl['opt']['ff'])) {
- if (is_array($pl['opt']['ff'])) {
- // array of bit settings
- $flag = 0;
- foreach($pl['opt']['ff'] as $val) {
- $flag += 1 << ($val - 1);
- }
- } else {
- $flag = intval($pl['opt']['ff']);
- }
- $annots .= ' /Ff '.$flag;
- }
- if (isset($pl['opt']['maxlen'])) {
- $annots .= ' /MaxLen '.intval($pl['opt']['maxlen']);
- }
- if (isset($pl['opt']['v'])) {
- $annots .= ' /V';
- if (is_array($pl['opt']['v'])) {
- foreach ($pl['opt']['v'] AS $optval) {
- $annots .= ' '.$optval;
- }
- } else {
- $annots .= ' '.$this->_textstring($pl['opt']['v']);
+ if (isset($pl['opt']['mk']['ix'])) {
+ $info = $this->getImageBuffer($pl['opt']['mk']['ix']);
+ if ($info !== false) {
+ $annots .= ' /IX '.$info['n'].' 0 R';
}
}
- if (isset($pl['opt']['dv']) AND is_string($pl['opt']['dv'])) {
- $annots .= ' /DV';
- if (is_array($pl['opt']['dv'])) {
- foreach ($pl['opt']['dv'] AS $optval) {
- $annots .= ' '.$optval;
+ if (isset($pl['opt']['mk']['if']) AND (is_array($pl['opt']['mk']['if'])) AND !empty($pl['opt']['mk']['if'])) {
+ $annots .= ' /IF <<';
+ $if_sw = array('A', 'B', 'S', 'N');
+ if (isset($pl['opt']['mk']['if']['sw']) AND in_array($pl['opt']['mk']['if']['sw'], $if_sw)) {
+ $annots .= ' /SW /'.$pl['opt']['mk']['if']['sw'];
+ }
+ $if_s = array('A', 'P');
+ if (isset($pl['opt']['mk']['if']['s']) AND in_array($pl['opt']['mk']['if']['s'], $if_s)) {
+ $annots .= ' /S /'.$pl['opt']['mk']['if']['s'];
+ }
+ if (isset($pl['opt']['mk']['if']['a']) AND (is_array($pl['opt']['mk']['if']['a'])) AND !empty($pl['opt']['mk']['if']['a'])) {
+ $annots .= sprintf(' /A [%.2F %.2F]', $pl['opt']['mk']['if']['a'][0], $pl['opt']['mk']['if']['a'][1]);
+ }
+ if (isset($pl['opt']['mk']['if']['fb']) AND ($pl['opt']['mk']['if']['fb'])) {
+ $annots .= ' /FB true';
+ }
+ $annots .= '>>';
+ }
+ if (isset($pl['opt']['mk']['tp']) AND ($pl['opt']['mk']['tp'] >= 0) AND ($pl['opt']['mk']['tp'] <= 6)) {
+ $annots .= ' /TP '.intval($pl['opt']['mk']['tp']);
+ }
+ $annots .= '>>';
+ } // end MK
+ // --- Entries for field dictionaries ---
+ if (isset($this->radiobutton_groups[$n][$pl['txt']])) {
+ // set parent
+ $annots .= ' /Parent '.$this->radiobutton_groups[$n][$pl['txt']].' 0 R';
+ }
+ if (isset($pl['opt']['t']) AND is_string($pl['opt']['t'])) {
+ $annots .= ' /T '.$this->_datastring($pl['opt']['t'], $annot_obj_id);
+ }
+ if (isset($pl['opt']['tu']) AND is_string($pl['opt']['tu'])) {
+ $annots .= ' /TU '.$this->_datastring($pl['opt']['tu'], $annot_obj_id);
+ }
+ if (isset($pl['opt']['tm']) AND is_string($pl['opt']['tm'])) {
+ $annots .= ' /TM '.$this->_datastring($pl['opt']['tm'], $annot_obj_id);
+ }
+ if (isset($pl['opt']['ff'])) {
+ if (is_array($pl['opt']['ff'])) {
+ // array of bit settings
+ $flag = 0;
+ foreach($pl['opt']['ff'] as $val) {
+ $flag += 1 << ($val - 1);
+ }
+ } else {
+ $flag = intval($pl['opt']['ff']);
+ }
+ $annots .= ' /Ff '.$flag;
+ }
+ if (isset($pl['opt']['maxlen'])) {
+ $annots .= ' /MaxLen '.intval($pl['opt']['maxlen']);
+ }
+ if (isset($pl['opt']['v'])) {
+ $annots .= ' /V';
+ if (is_array($pl['opt']['v'])) {
+ foreach ($pl['opt']['v'] AS $optval) {
+ if (is_float($optval)) {
+ $optval = sprintf('%.2F', $optval);
}
+ $annots .= ' '.$optval;
+ }
+ } else {
+ $annots .= ' '.$this->_textstring($pl['opt']['v'], $annot_obj_id);
+ }
+ }
+ if (isset($pl['opt']['dv'])) {
+ $annots .= ' /DV';
+ if (is_array($pl['opt']['dv'])) {
+ foreach ($pl['opt']['dv'] AS $optval) {
+ if (is_float($optval)) {
+ $optval = sprintf('%.2F', $optval);
+ }
+ $annots .= ' '.$optval;
+ }
+ } else {
+ $annots .= ' '.$this->_textstring($pl['opt']['dv'], $annot_obj_id);
+ }
+ }
+ if (isset($pl['opt']['rv'])) {
+ $annots .= ' /RV';
+ if (is_array($pl['opt']['rv'])) {
+ foreach ($pl['opt']['rv'] AS $optval) {
+ if (is_float($optval)) {
+ $optval = sprintf('%.2F', $optval);
+ }
+ $annots .= ' '.$optval;
+ }
+ } else {
+ $annots .= ' '.$this->_textstring($pl['opt']['rv'], $annot_obj_id);
+ }
+ }
+ if (isset($pl['opt']['a']) AND !empty($pl['opt']['a'])) {
+ $annots .= ' /A << '.$pl['opt']['a'].' >>';
+ }
+ if (isset($pl['opt']['aa']) AND !empty($pl['opt']['aa'])) {
+ $annots .= ' /AA << '.$pl['opt']['aa'].' >>';
+ }
+ if (isset($pl['opt']['da']) AND !empty($pl['opt']['da'])) {
+ $annots .= ' /DA ('.$pl['opt']['da'].')';
+ }
+ if (isset($pl['opt']['q']) AND ($pl['opt']['q'] >= 0) AND ($pl['opt']['q'] <= 2)) {
+ $annots .= ' /Q '.intval($pl['opt']['q']);
+ }
+ if (isset($pl['opt']['opt']) AND (is_array($pl['opt']['opt'])) AND !empty($pl['opt']['opt'])) {
+ $annots .= ' /Opt [';
+ foreach($pl['opt']['opt'] AS $copt) {
+ if (is_array($copt)) {
+ $annots .= ' ['.$this->_textstring($copt[0], $annot_obj_id).' '.$this->_textstring($copt[1], $annot_obj_id).']';
} else {
- $annots .= ' '.$this->_textstring($pl['opt']['dv']);
+ $annots .= ' '.$this->_textstring($copt, $annot_obj_id);
}
}
- if (isset($pl['opt']['rv']) AND is_string($pl['opt']['rv'])) {
- $annots .= ' /RV';
- if (is_array($pl['opt']['rv'])) {
- foreach ($pl['opt']['rv'] AS $optval) {
- $annots .= ' '.$optval;
- }
- } else {
- $annots .= ' '.$this->_textstring($pl['opt']['rv']);
- }
+ $annots .= ']';
+ }
+ if (isset($pl['opt']['ti'])) {
+ $annots .= ' /TI '.intval($pl['opt']['ti']);
+ }
+ if (isset($pl['opt']['i']) AND (is_array($pl['opt']['i'])) AND !empty($pl['opt']['i'])) {
+ $annots .= ' /I [';
+ foreach($pl['opt']['i'] AS $copt) {
+ $annots .= intval($copt).' ';
}
- if (isset($pl['opt']['a']) AND !empty($pl['opt']['a'])) {
- $annots .= ' /A << '.$pl['opt']['a'].' >>';
- }
- if (isset($pl['opt']['aa']) AND !empty($pl['opt']['aa'])) {
- $annots .= ' /AA << '.$pl['opt']['aa'].' >>';
- }
- if (isset($pl['opt']['da']) AND !empty($pl['opt']['da'])) {
- $annots .= ' /DA ('.$pl['opt']['da'].')';
- }
- if (isset($pl['opt']['q']) AND ($pl['opt']['q'] >= 0) AND ($pl['opt']['q'] <= 2)) {
- $annots .= ' /Q '.intval($pl['opt']['q']);
- }
- if (isset($pl['opt']['opt']) AND (is_array($pl['opt']['opt'])) AND !empty($pl['opt']['opt'])) {
- $annots .= ' /Opt [';
- foreach($pl['opt']['opt'] AS $copt) {
- if (is_array($copt)) {
- $annots .= ' ['.$this->_textstring($copt[0]).' '.$this->_textstring($copt[1]).']';
- } else {
- $annots .= ' '.$this->_textstring($copt);
- }
- }
- $annots .= ']';
- }
- if (isset($pl['opt']['ti'])) {
- $annots .= ' /TI '.intval($pl['opt']['ti']);
- }
- if (isset($pl['opt']['i']) AND (is_array($pl['opt']['i'])) AND !empty($pl['opt']['i'])) {
- $annots .= ' /I [';
- foreach($pl['opt']['i'] AS $copt) {
- $annots .= intval($copt).' ';
- }
- $annots .= ']';
- }
- break;
- }
- case 'screen': {
- break;
- }
- case 'printermark': {
- break;
- }
- case 'trapnet': {
- break;
- }
- case 'watermark': {
- break;
- }
- case '3d': {
- break;
- }
- default: {
- break;
+ $annots .= ']';
}
+ break;
}
- $annots .= '>>';
- // create new annotation object
- ++$this->annot_obj_id;
- $this->offsets[$this->annot_obj_id] = $this->bufferlen;
- $this->_out($this->annot_obj_id.' 0 obj');
- $this->_out($annots);
- $this->_out('endobj');
- if ($formfield AND ! isset($this->radiobutton_groups[$n][$pl['txt']])) {
- // store reference of form object
- $this->form_obj_id[] = $this->annot_obj_id;
+ case 'screen': {
+ break;
+ }
+ case 'printermark': {
+ break;
+ }
+ case 'trapnet': {
+ break;
+ }
+ case 'watermark': {
+ break;
+ }
+ case '3d': {
+ break;
+ }
+ default: {
+ break;
}
}
+ $annots .= '>>';
+ // create new annotation object
+ $this->_out($this->_getobj($annot_obj_id)."\n".$annots."\n".'endobj');
+ if ($formfield AND !isset($this->radiobutton_groups[$n][$pl['txt']])) {
+ // store reference of form object
+ $this->form_obj_id[] = $annot_obj_id;
+ }
}
- } // end for each page
- }
+ }
+ } // end for each page
+ }
- /**
- * Put appearance streams XObject used to define annotation's appearance states
- * @param int $w annotation width
- * @param int $h annotation height
- * @param string $stream appearance stream
- * @return int object ID
- * @access protected
- * @since 4.8.001 (2009-09-09)
- */
- protected function _putAPXObject($w=0, $h=0, $stream='') {
- $stream = trim($stream);
- ++$this->apxo_obj_id;
- $this->offsets[$this->apxo_obj_id] = $this->bufferlen;
- $this->_out($this->apxo_obj_id.' 0 obj');
- $this->_out('<<');
- $this->_out('/Type /XObject');
- $this->_out('/Subtype /Form');
- $this->_out('/FormType 1');
- if ($this->compress) {
- $stream = gzcompress($stream);
- $this->_out('/Filter /FlateDecode');
- }
- $rect = sprintf('%.2F %.2F', $w, $h);
- $this->_out('/BBox [0 0 '.$rect.']');
- $this->_out('/Matrix [1 0 0 1 0 0]');
- $this->_out('/Resources <>');
- $this->_out('/Length '.strlen($stream));
- $this->_out('>>');
- $this->_putstream($stream);
- $this->_out('endobj');
- return $this->apxo_obj_id;
+ /**
+ * Put appearance streams XObject used to define annotation's appearance states.
+ * @param $w (int) annotation width
+ * @param $h (int) annotation height
+ * @param $stream (string) appearance stream
+ * @return int object ID
+ * @protected
+ * @since 4.8.001 (2009-09-09)
+ */
+ protected function _putAPXObject($w=0, $h=0, $stream='') {
+ $stream = trim($stream);
+ $out = $this->_getobj()."\n";
+ $this->xobjects['AX'.$this->n] = array('n' => $this->n);
+ $out .= '<<';
+ $out .= ' /Type /XObject';
+ $out .= ' /Subtype /Form';
+ $out .= ' /FormType 1';
+ if ($this->compress) {
+ $stream = gzcompress($stream);
+ $out .= ' /Filter /FlateDecode';
}
+ $rect = sprintf('%.2F %.2F', $w, $h);
+ $out .= ' /BBox [0 0 '.$rect.']';
+ $out .= ' /Matrix [1 0 0 1 0 0]';
+ $out .= ' /Resources 2 0 R';
+ $stream = $this->_getrawstream($stream);
+ $out .= ' /Length '.strlen($stream);
+ $out .= ' >>';
+ $out .= ' stream'."\n".$stream."\n".'endstream';
+ $out .= "\n".'endobj';
+ $this->_out($out);
+ return $this->n;
+ }
- /**
- * Output fonts.
- * @access protected
- */
- protected function _putfonts() {
- $nf = $this->n;
- foreach ($this->diffs as $diff) {
- //Encodings
- $this->_newobj();
- $this->_out('<>');
- $this->_out('endobj');
+ /**
+ * Get ULONG from string (Big Endian 32-bit unsigned integer).
+ * @param $str (string) string from where to extract value
+ * @param $offset (int) point from where to read the data
+ * @return int 32 bit value
+ * @author Nicola Asuni
+ * @protected
+ * @since 5.2.000 (2010-06-02)
+ */
+ protected function _getULONG($str, $offset) {
+ $v = unpack('Ni', substr($str, $offset, 4));
+ return $v['i'];
+ }
+
+ /**
+ * Get USHORT from string (Big Endian 16-bit unsigned integer).
+ * @param $str (string) string from where to extract value
+ * @param $offset (int) point from where to read the data
+ * @return int 16 bit value
+ * @author Nicola Asuni
+ * @protected
+ * @since 5.2.000 (2010-06-02)
+ */
+ protected function _getUSHORT($str, $offset) {
+ $v = unpack('ni', substr($str, $offset, 2));
+ return $v['i'];
+ }
+
+ /**
+ * Get SHORT from string (Big Endian 16-bit signed integer).
+ * @param $str (string) string from where to extract value
+ * @param $offset (int) point from where to read the data
+ * @return int 16 bit value
+ * @author Nicola Asuni
+ * @protected
+ * @since 5.2.000 (2010-06-02)
+ */
+ protected function _getSHORT($str, $offset) {
+ $v = unpack('si', substr($str, $offset, 2));
+ return $v['i'];
+ }
+
+ /**
+ * Get FWORD from string (Big Endian 16-bit signed integer).
+ * @param $str (string) string from where to extract value
+ * @param $offset (int) point from where to read the data
+ * @return int 16 bit value
+ * @author Nicola Asuni
+ * @protected
+ * @since 5.9.123 (2011-09-30)
+ */
+ protected function _getFWORD($str, $offset) {
+ $v = $this->_getUSHORT($str, $offset);
+ if ($v > 0x7fff) {
+ $v -= 0x10000;
+ }
+ return $v;
+ }
+
+ /**
+ * Get UFWORD from string (Big Endian 16-bit unsigned integer).
+ * @param $str (string) string from where to extract value
+ * @param $offset (int) point from where to read the data
+ * @return int 16 bit value
+ * @author Nicola Asuni
+ * @protected
+ * @since 5.9.123 (2011-09-30)
+ */
+ protected function _getUFWORD($str, $offset) {
+ $v = $this->_getUSHORT($str, $offset);
+ return $v;
+ }
+
+ /**
+ * Get FIXED from string (32-bit signed fixed-point number (16.16).
+ * @param $str (string) string from where to extract value
+ * @param $offset (int) point from where to read the data
+ * @return int 16 bit value
+ * @author Nicola Asuni
+ * @protected
+ * @since 5.9.123 (2011-09-30)
+ */
+ protected function _getFIXED($str, $offset) {
+ // mantissa
+ $m = $this->_getFWORD($str, $offset);
+ // fraction
+ $f = $this->_getUSHORT($str, ($offset + 2));
+ $v = floatval(''.$m.'.'.$f.'');
+ return $v;
+ }
+
+ /**
+ * Get BYTE from string (8-bit unsigned integer).
+ * @param $str (string) String from where to extract value.
+ * @param $offset (int) Point from where to read the data.
+ * @return int 8 bit value
+ * @author Nicola Asuni
+ * @protected
+ * @since 5.2.000 (2010-06-02)
+ */
+ protected function _getBYTE($str, $offset) {
+ $v = unpack('Ci', substr($str, $offset, 1));
+ return $v['i'];
+ }
+ /**
+ * Update the CIDToGIDMap string with a new value.
+ * @param $map (string) CIDToGIDMap.
+ * @param $cid (int) CID value.
+ * @param $gid (int) GID value.
+ * @return (string) CIDToGIDMap.
+ * @author Nicola Asuni
+ * @protected
+ * @since 5.9.123 (2011-09-29)
+ */
+ protected function updateCIDtoGIDmap($map, $cid, $gid) {
+ if (($cid >= 0) AND ($cid <= 0xFFFF) AND ($gid >= 0)) {
+ if ($gid > 0xFFFF) {
+ $gid -= 0x10000;
}
- $mqr = $this->get_mqr();
- $this->set_mqr(false);
- foreach ($this->FontFiles as $file => $info) {
- // search and get font file to embedd
- $fontdir = $info['fontdir'];
- $file = strtolower($file);
- $fontfile = '';
- // search files on various directories
- if (file_exists($fontdir.$file)) {
- $fontfile = $fontdir.$file;
- } elseif (file_exists($this->_getfontpath().$file)) {
- $fontfile = $this->_getfontpath().$file;
- } elseif (file_exists($file)) {
- $fontfile = $file;
- }
- if (!$this->empty_string($fontfile)) {
- $font = file_get_contents($fontfile);
- $compressed = (substr($file, -2) == '.z');
- if ((!$compressed) AND (isset($info['length2']))) {
- $header = (ord($font{0}) == 128);
- if ($header) {
- //Strip first binary header
- $font = substr($font, 6);
- }
- if ($header AND (ord($font{$info['length1']}) == 128)) {
- //Strip second binary header
- $font = substr($font, 0, $info['length1']).substr($font, ($info['length1'] + 6));
- }
- }
- $this->_newobj();
- $this->FontFiles[$file]['n'] = $this->n;
- $this->_out('<_out('/Filter /FlateDecode');
- }
- $this->_out('/Length1 '.$info['length1']);
- if (isset($info['length2'])) {
- $this->_out('/Length2 '.$info['length2'].' /Length3 0');
- }
- $this->_out('>>');
- $this->_putstream($font);
- $this->_out('endobj');
- }
- }
- $this->set_mqr($mqr);
- foreach ($this->fontkeys as $k) {
- //Font objects
- $this->setFontSubBuffer($k, 'n', $this->n + 1);
- $font = $this->getFontBuffer($k);
- $type = $font['type'];
- $name = $font['name'];
- if ($type == 'core') {
- //Standard font
- $obj_id = $this->_newobj();
- $this->_out('<_out('/Subtype /Type1');
- $this->_out('/BaseFont /'.$name);
- $this->_out('/Name /F'.$font['i']);
- if ((strtolower($name) != 'symbol') AND (strtolower($name) != 'zapfdingbats')) {
- $this->_out('/Encoding /WinAnsiEncoding');
- }
- if (strtolower($name) == 'helvetica') {
- // add default font for annotations
- $this->annotation_fonts['helvetica'] = $k;
- }
- $this->_out('>>');
- $this->_out('endobj');
- } elseif (($type == 'Type1') OR ($type == 'TrueType')) {
- //Additional Type1 or TrueType font
- $obj_id = $this->_newobj();
- $this->_out('<_out('/Subtype /'.$type);
- $this->_out('/BaseFont /'.$name);
- $this->_out('/Name /F'.$font['i']);
- $this->_out('/FirstChar 32 /LastChar 255');
- $this->_out('/Widths '.($this->n + 1).' 0 R');
- $this->_out('/FontDescriptor '.($this->n + 2).' 0 R');
- if ($font['enc']) {
- if (isset($font['diff'])) {
- $this->_out('/Encoding '.($nf + $font['diff']).' 0 R');
- } else {
- $this->_out('/Encoding /WinAnsiEncoding');
- }
- }
- $this->_out('>>');
- $this->_out('endobj');
- // Widths
- $this->_newobj();
- $cw = &$font['cw'];
- $s = '[';
- for ($i = 32; $i < 256; ++$i) {
- $s .= $cw[$i].' ';
- }
- $this->_out($s.']');
- $this->_out('endobj');
- //Descriptor
- $this->_newobj();
- $s = '< $fdv) {
- $s .= ' /'.$fdk.' '.$fdv.'';
- }
- if (!$this->empty_string($font['file'])) {
- $s .= ' /FontFile'.($type == 'Type1' ? '' : '2').' '.$this->FontFiles[$font['file']]['n'].' 0 R';
- }
- $this->_out($s.'>>');
- $this->_out('endobj');
- } else {
- //Allow for additional types
- $mtd = '_put'.strtolower($type);
- if (!method_exists($this, $mtd)) {
- $this->Error('Unsupported font type: '.$type);
- }
- $obj_id = $this->$mtd($font);
- }
- // store object ID for current font
- $this->font_obj_ids[$k] = $obj_id;
+ $map{($cid * 2)} = chr($gid >> 8);
+ $map{(($cid * 2) + 1)} = chr($gid & 0xFF);
+ }
+ return $map;
+ }
+
+ /**
+ * Convert and add the selected TrueType or Type1 font to the fonts folder (that must be writeable).
+ * @param $fontfile (string) TrueType or Type1 font file (full path).
+ * @param $fonttype (string) Font type. Leave empty for autodetect mode. Valid values are: TrueTypeUnicode, TrueType, Type1, CID0JP = CID-0 Japanese, CID0KR = CID-0 Korean, CID0CS = CID-0 Chinese Simplified, CID0CT = CID-0 Chinese Traditional.
+ * @param $enc (string) Name of the encoding table to use. Leave empty for default mode. Omit this parameter for TrueType Unicode and symbolic fonts like Symbol or ZapfDingBats.
+ * @param $flags (int) Unsigned 32-bit integer containing flags specifying various characteristics of the font (PDF32000:2008 - 9.8.2 Font Descriptor Flags): +1 for fixed font; +4 for symbol or +32 for non-symbol; +64 for italic. Fixed and Italic mode are generally autodetected so you have to set it to 32 = non-symbolic font (default) or 4 = symbolic font.
+ * @param $outpath (string) Output path for generated font files (must be writeable by the web server). Leave empty for default font folder.
+ * @return (string) TCPDF font name.
+ * @author Nicola Asuni
+ * @public
+ * @since 5.9.123 (2010-09-30)
+ */
+ public function addTTFfont($fontfile, $fonttype='', $enc='', $flags=32, $outpath='') {
+ if (!file_exists($fontfile)) {
+ $this->Error('Could not find file: '.$fontfile.'');
+ }
+ // font metrics
+ $fmetric = array();
+ // build new font name for TCPDF compatibility
+ $font_path_parts = pathinfo($fontfile);
+ if (!isset($font_path_parts['filename'])) {
+ $font_path_parts['filename'] = substr($font_path_parts['basename'], 0, -(strlen($font_path_parts['extension']) + 1));
+ }
+ $font_name = strtolower($font_path_parts['filename']);
+ $font_name = preg_replace('/[^a-z0-9_]/', '', $font_name);
+ $search = array('bold', 'oblique', 'italic', 'regular');
+ $replace = array('b', 'i', 'i', '');
+ $font_name = str_replace($search, $replace, $font_name);
+ if (empty($font_name)) {
+ // set generic name
+ $font_name = 'tcpdffont';
+ }
+ // set output path
+ if (empty($outpath)) {
+ $outpath = $this->_getfontpath();
+ }
+ // check if this font already exist
+ if (file_exists($outpath.$font_name.'.php')) {
+ // this font already exist (delete it from fonts folder to rebuild it)
+ return $font_name;
+ }
+ $fmetric['file'] = $font_name.'.z';
+ $fmetric['ctg'] = $font_name.'.ctg.z';
+ // get font data
+ $font = file_get_contents($fontfile);
+ $fmetric['originalsize'] = strlen($font);
+ // autodetect font type
+ if (empty($fonttype)) {
+ if ($this->_getULONG($font, 0) == 0x10000) {
+ // True Type (Unicode or not)
+ $fonttype = 'TrueTypeUnicode';
+ } elseif (substr($font, 0, 4) == 'OTTO') {
+ // Open Type (Unicode or not)
+ $this->Error('Unsupported font format: OpenType with CFF data.');
+ } else {
+ // Type 1
+ $fonttype = 'Type1';
}
}
-
- /**
- * Outputs font widths
- * @parameter array $font font data
- * @parameter int $cidoffset offset for CID values
- * @author Nicola Asuni
- * @access protected
- * @since 4.4.000 (2008-12-07)
- */
- protected function _putfontwidths($font, $cidoffset=0) {
- ksort($font['cw']);
- $rangeid = 0;
- $range = array();
- $prevcid = -2;
- $prevwidth = -1;
- $interval = false;
- // for each character
- foreach ($font['cw'] as $cid => $width) {
- $cid -= $cidoffset;
- if ($width != $font['dw']) {
- if ($cid == ($prevcid + 1)) {
- // consecutive CID
- if ($width == $prevwidth) {
- if ($width == $range[$rangeid][0]) {
- $range[$rangeid][] = $width;
- } else {
- array_pop($range[$rangeid]);
- // new range
- $rangeid = $prevcid;
- $range[$rangeid] = array();
- $range[$rangeid][] = $prevwidth;
- $range[$rangeid][] = $width;
- }
- $interval = true;
- $range[$rangeid]['interval'] = true;
- } else {
- if ($interval) {
- // new range
- $rangeid = $cid;
- $range[$rangeid] = array();
- $range[$rangeid][] = $width;
- } else {
- $range[$rangeid][] = $width;
- }
- $interval = false;
+ // set font type
+ switch ($fonttype) {
+ case 'CID0CT':
+ case 'CID0CS':
+ case 'CID0KR':
+ case 'CID0JP': {
+ $fmetric['type'] = 'cidfont0';
+ break;
+ }
+ case 'Type1': {
+ $fmetric['type'] = 'Type1';
+ if (empty($enc) AND (($flags & 4) == 0)) {
+ $enc = 'cp1252';
+ }
+ break;
+ }
+ case 'TrueType': {
+ $fmetric['type'] = 'TrueType';
+ break;
+ }
+ case 'TrueTypeUnicode':
+ default: {
+ $fmetric['type'] = 'TrueTypeUnicode';
+ break;
+ }
+ }
+ // set encoding maps (if any)
+ $fmetric['enc'] = preg_replace('/[^A-Za-z0-9_\-]/', '', $enc);
+ $fmetric['diff'] = '';
+ if (($fmetric['type'] == 'TrueType') OR ($fmetric['type'] == 'Type1')) {
+ if (!empty($enc) AND ($enc != 'cp1252') AND isset($this->encmaps->encmap[$enc])) {
+ // build differences from reference encoding
+ $enc_ref = $this->encmaps->encmap['cp1252'];
+ $enc_target = $this->encmaps->encmap[$enc];
+ $last = 0;
+ for ($i = 32; $i <= 255; ++$i) {
+ if ($enc_target != $enc_ref[$i]) {
+ if ($i != ($last + 1)) {
+ $fmetric['diff'] .= $i.' ';
}
+ $last = $i;
+ $fmetric['diff'] .= '/'.$enc_target[$i].' ';
+ }
+ }
+ }
+ }
+ // parse the font by type
+ if ($fmetric['type'] == 'Type1') {
+ // ---------- TYPE 1 ----------
+ // read first segment
+ $a = unpack('Cmarker/Ctype/Vsize', substr($font, 0, 6));
+ if ($a['marker'] != 128) {
+ $this->Error('Font file is not a valid binary Type1');
+ }
+ $fmetric['size1'] = $a['size'];
+ $data = substr($font, 6, $fmetric['size1']);
+ // read second segment
+ $a = unpack('Cmarker/Ctype/Vsize', substr($font, (6 + $fmetric['size1']), 6));
+ if ($a['marker'] != 128) {
+ $this->Error('Font file is not a valid binary Type1');
+ }
+ $fmetric['size2'] = $a['size'];
+ $encrypted = substr($font, (12 + $fmetric['size1']), $fmetric['size2']);
+ $data .= $encrypted;
+ // store compressed font
+ $fp = fopen($outpath.$fmetric['file'], 'wb');
+ fwrite($fp, gzcompress($data));
+ fclose($fp);
+ // get font info
+ $fmetric['Flags'] = $flags;
+ preg_match ('#/FullName[\s]*\(([^\)]*)#', $font, $matches);
+ $fmetric['name'] = preg_replace('/[^a-zA-Z0-9_\-]/', '', $matches[1]);
+ preg_match('#/FontBBox[\s]*{([^}]*)#', $font, $matches);
+ $fmetric['bbox'] = trim($matches[1]);
+ $bv = explode(' ', $fmetric['bbox']);
+ $fmetric['Ascent'] = intval($bv[3]);
+ $fmetric['Descent'] = intval($bv[1]);
+ preg_match('#/ItalicAngle[\s]*([0-9\+\-]*)#', $font, $matches);
+ $fmetric['italicAngle'] = intval($matches[1]);
+ if ($fmetric['italicAngle'] != 0) {
+ $fmetric['Flags'] |= 64;
+ }
+ preg_match('#/UnderlinePosition[\s]*([0-9\+\-]*)#', $font, $matches);
+ $fmetric['underlinePosition'] = intval($matches[1]);
+ preg_match('#/UnderlineThickness[\s]*([0-9\+\-]*)#', $font, $matches);
+ $fmetric['underlineThickness'] = intval($matches[1]);
+ preg_match('#/isFixedPitch[\s]*([^\s]*)#', $font, $matches);
+ if ($matches[1] == 'true') {
+ $fmetric['Flags'] |= 1;
+ }
+ // get internal map
+ $imap = array();
+ if (preg_match_all('#dup[\s]([0-9]+)[\s]*/([^\s]*)[\s]put#sU', $font, $fmap, PREG_SET_ORDER) > 0) {
+ foreach ($fmap as $v) {
+ $imap[$v[2]] = $v[1];
+ }
+ }
+ // decrypt eexec encrypted part
+ $r = 55665; // eexec encryption constant
+ $c1 = 52845;
+ $c2 = 22719;
+ $elen = strlen($encrypted);
+ $eplain = '';
+ for ($i = 0; $i < $elen; ++$i) {
+ $chr = ord($encrypted{$i});
+ $eplain .= chr($chr ^ ($r >> 8));
+ $r = ((($chr + $r) * $c1 + $c2) % 65536);
+ }
+ if (preg_match('#/ForceBold[\s]*([^\s]*)#', $eplain, $matches) > 0) {
+ if ($matches[1] == 'true') {
+ $fmetric['Flags'] |= 0x40000;
+ }
+ }
+ if (preg_match('#/StdVW[\s]*\[([^\]]*)#', $eplain, $matches) > 0) {
+ $fmetric['StemV'] = intval($matches[1]);
+ } else {
+ $fmetric['StemV'] = 70;
+ }
+ if (preg_match('#/StdHW[\s]*\[([^\]]*)#', $eplain, $matches) > 0) {
+ $fmetric['StemH'] = intval($matches[1]);
+ } else {
+ $fmetric['StemH'] = 30;
+ }
+ if (preg_match('#/BlueValues[\s]*\[([^\]]*)#', $eplain, $matches) > 0) {
+ $bv = explode(' ', $matches[1]);
+ if (count($bv) >= 6) {
+ $v1 = intval($bv[2]);
+ $v2 = intval($bv[4]);
+ if ($v1 <= $v2) {
+ $fmetric['XHeight'] = $v1;
+ $fmetric['CapHeight'] = $v2;
} else {
- // new range
- $rangeid = $cid;
- $range[$rangeid] = array();
- $range[$rangeid][] = $width;
+ $fmetric['XHeight'] = $v2;
+ $fmetric['CapHeight'] = $v1;
+ }
+ } else {
+ $fmetric['XHeight'] = 450;
+ $fmetric['CapHeight'] = 700;
+ }
+ } else {
+ $fmetric['XHeight'] = 450;
+ $fmetric['CapHeight'] = 700;
+ }
+ // get the number of random bytes at the beginning of charstrings
+ if (preg_match('#/lenIV[\s]*([0-9]*)#', $eplain, $matches) > 0) {
+ $lenIV = intval($matches[1]);
+ } else {
+ $lenIV = 4;
+ }
+ $fmetric['Leading'] = 0;
+ // get charstring data
+ $eplain = substr($eplain, (strpos($eplain, '/CharStrings') + 1));
+ preg_match_all('#/([A-Za-z0-9\.]*)[\s][0-9]+[\s]RD[\s](.*)[\s]ND#sU', $eplain, $matches, PREG_SET_ORDER);
+ if (!empty($enc) AND isset($this->encmaps->encmap[$enc])) {
+ $enc_map = $this->encmaps->encmap[$enc];
+ } else {
+ $enc_map = false;
+ }
+ $fmetric['cw'] = '';
+ $fmetric['MaxWidth'] = 0;
+ $cwidths = array();
+ foreach ($matches as $k => $v) {
+ $cid = 0;
+ if (isset($imap[$v[1]])) {
+ $cid = $imap[$v[1]];
+ } elseif ($enc_map !== false) {
+ $cid = array_search($v[1], $enc_map);
+ if ($cid === false) {
+ $cid = 0;
+ } elseif ($cid > 1000) {
+ $cid -= 1000;
+ }
+ }
+ // decrypt charstring encrypted part
+ $r = 4330; // charstring encryption constant
+ $c1 = 52845;
+ $c2 = 22719;
+ $cd = $v[2];
+ $clen = strlen($cd);
+ $ccom = array();
+ for ($i = 0; $i < $clen; ++$i) {
+ $chr = ord($cd{$i});
+ $ccom[] = ($chr ^ ($r >> 8));
+ $r = ((($chr + $r) * $c1 + $c2) % 65536);
+ }
+ // decode numbers
+ $cdec = array();
+ $ck = 0;
+ $i = $lenIV;
+ while ($i < $clen) {
+ if ($ccom[$i] < 32) {
+ $cdec[$ck] = $ccom[$i];
+ if (($ck > 0) AND ($cdec[$ck] == 13)) {
+ // hsbw command: update width
+ $cwidths[$cid] = $cdec[($ck - 1)];
+ }
+ ++$i;
+ } elseif (($ccom[$i] >= 32) AND ($ccom[$i] <= 246)) {
+ $cdec[$ck] = ($ccom[$i] - 139);
+ ++$i;
+ } elseif (($ccom[$i] >= 247) AND ($ccom[$i] <= 250)) {
+ $cdec[$ck] = ((($ccom[$i] - 247) * 256) + $ccom[($i + 1)] + 108);
+ $i += 2;
+ } elseif (($ccom[$i] >= 251) AND ($ccom[$i] <= 254)) {
+ $cdec[$ck] = ((-($ccom[$i] - 251) * 256) - $ccom[($i + 1)] - 108);
+ $i += 2;
+ } elseif ($ccom[$i] == 255) {
+ $sval = chr($ccom[($i + 1)]).chr($ccom[($i + 2)]).chr($ccom[($i + 3)]).chr($ccom[($i + 4)]);
+ $vsval = unpack('li', $sval);
+ $cdec[$ck] = $vsval['i'];
+ $i += 5;
+ }
+ ++$ck;
+ }
+ } // end for each matches
+ $fmetric['MissingWidth'] = $cwidths[0];
+ $fmetric['MaxWidth'] = $fmetric['MissingWidth'];
+ $fmetric['AvgWidth'] = 0;
+ // set chars widths
+ for ($cid = 0; $cid <= 255; ++$cid) {
+ if (isset($cwidths[$cid])) {
+ if ($cwidths[$cid] > $fmetric['MaxWidth']) {
+ $fmetric['MaxWidth'] = $cwidths[$cid];
+ }
+ $fmetric['AvgWidth'] += $cwidths[$cid];
+ $fmetric['cw'] .= ','.$cid.'=>'.$cwidths[$cid];
+ } else {
+ $fmetric['cw'] .= ','.$cid.'=>'.$fmetric['MissingWidth'];
+ }
+ }
+ $fmetric['AvgWidth'] = round($fmetric['AvgWidth'] / count($cwidths));
+ } else {
+ // ---------- TRUE TYPE ----------
+ if ($fmetric['type'] != 'cidfont0') {
+ // store compressed font
+ $fp = fopen($outpath.$fmetric['file'], 'wb');
+ fwrite($fp, gzcompress($font));
+ fclose($fp);
+ }
+ $offset = 0; // offset position of the font data
+ if ($this->_getULONG($font, $offset) != 0x10000) {
+ // sfnt version must be 0x00010000 for TrueType version 1.0.
+ return $font;
+ }
+ $offset += 4;
+ // get number of tables
+ $numTables = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ // skip searchRange, entrySelector and rangeShift
+ $offset += 6;
+ // tables array
+ $table = array();
+ // ---------- get tables ----------
+ for ($i = 0; $i < $numTables; ++$i) {
+ // get table info
+ $tag = substr($font, $offset, 4);
+ $offset += 4;
+ $table[$tag] = array();
+ $table[$tag]['checkSum'] = $this->_getULONG($font, $offset);
+ $offset += 4;
+ $table[$tag]['offset'] = $this->_getULONG($font, $offset);
+ $offset += 4;
+ $table[$tag]['length'] = $this->_getULONG($font, $offset);
+ $offset += 4;
+ }
+ // check magicNumber
+ $offset = $table['head']['offset'] + 12;
+ if ($this->_getULONG($font, $offset) != 0x5F0F3CF5) {
+ // magicNumber must be 0x5F0F3CF5
+ return $font;
+ }
+ $offset += 4;
+ $offset += 2; // skip flags
+ // get FUnits
+ $fmetric['unitsPerEm'] = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ // units ratio constant
+ $urk = (1000 / $fmetric['unitsPerEm']);
+ $offset += 16; // skip created, modified
+ $xMin = round($this->_getFWORD($font, $offset) * $urk);
+ $offset += 2;
+ $yMin = round($this->_getFWORD($font, $offset) * $urk);
+ $offset += 2;
+ $xMax = round($this->_getFWORD($font, $offset) * $urk);
+ $offset += 2;
+ $yMax = round($this->_getFWORD($font, $offset) * $urk);
+ $offset += 2;
+ $fmetric['bbox'] = ''.$xMin.' '.$yMin.' '.$xMax.' '.$yMax.'';
+ $macStyle = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ // PDF font flags
+ $fmetric['Flags'] = $flags;
+ if (($macStyle & 2) == 2) {
+ // italic flag
+ $fmetric['Flags'] |= 64;
+ }
+ // get offset mode (indexToLocFormat : 0 = short, 1 = long)
+ $offset = $table['head']['offset'] + 50;
+ $short_offset = ($this->_getSHORT($font, $offset) == 0);
+ $offset += 2;
+ // get the offsets to the locations of the glyphs in the font, relative to the beginning of the glyphData table
+ $indexToLoc = array();
+ $offset = $table['loca']['offset'];
+ if ($short_offset) {
+ // short version
+ $tot_num_glyphs = ($table['loca']['length'] / 2); // numGlyphs + 1
+ for ($i = 0; $i < $tot_num_glyphs; ++$i) {
+ $indexToLoc[$i] = $this->_getUSHORT($font, $offset) * 2;
+ $offset += 2;
+ }
+ } else {
+ // long version
+ $tot_num_glyphs = ($table['loca']['length'] / 4); // numGlyphs + 1
+ for ($i = 0; $i < $tot_num_glyphs; ++$i) {
+ $indexToLoc[$i] = $this->_getULONG($font, $offset);
+ $offset += 4;
+ }
+ }
+ // get glyphs indexes of chars from cmap table
+ $offset = $table['cmap']['offset'] + 2;
+ $numEncodingTables = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ $encodingTables = array();
+ for ($i = 0; $i < $numEncodingTables; ++$i) {
+ $encodingTables[$i]['platformID'] = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ $encodingTables[$i]['encodingID'] = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ $encodingTables[$i]['offset'] = $this->_getULONG($font, $offset);
+ $offset += 4;
+ }
+ // ---------- get os/2 metrics ----------
+ $offset = $table['OS/2']['offset'];
+ $offset += 2; // skip version
+ // xAvgCharWidth
+ $fmetric['AvgWidth'] = round($this->_getFWORD($font, $offset) * $urk);
+ $offset += 2;
+ // usWeightClass
+ $usWeightClass = round($this->_getUFWORD($font, $offset) * $urk);
+ // estimate StemV and StemH (400 = usWeightClass for Normal - Regular font)
+ $fmetric['StemV'] = round((70 * $usWeightClass) / 400);
+ $fmetric['StemH'] = round((30 * $usWeightClass) / 400);
+ $offset += 2;
+ $offset += 2; // usWidthClass
+ $fsType = $this->_getSHORT($font, $offset);
+ $offset += 2;
+ if ($fsType == 2) {
+ $this->Error('This Font cannot be modified, embedded or exchanged in any manner without first obtaining permission of the legal owner.');
+ }
+ // ---------- get font name ----------
+ $fmetric['name'] = '';
+ $offset = $table['name']['offset'];
+ $offset += 2; // skip Format selector (=0).
+ // Number of NameRecords that follow n.
+ $numNameRecords = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ // Offset to start of string storage (from start of table).
+ $stringStorageOffset = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ for ($i = 0; $i < $numNameRecords; ++$i) {
+ $offset += 6; // skip Platform ID, Platform-specific encoding ID, Language ID.
+ // Name ID.
+ $nameID = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ if ($nameID == 6) {
+ // String length (in bytes).
+ $stringLength = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ // String offset from start of storage area (in bytes).
+ $stringOffset = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ $offset = ($table['name']['offset'] + $stringStorageOffset + $stringOffset);
+ $fmetric['name'] = substr($font, $offset, $stringLength);
+ $fmetric['name'] = preg_replace('/[^a-zA-Z0-9_\-]/', '', $fmetric['name']);
+ break;
+ } else {
+ $offset += 4; // skip String length, String offset
+ }
+ }
+ if (empty($fmetric['name'])) {
+ $fmetric['name'] = $font_name;
+ }
+ // ---------- get post data ----------
+ $offset = $table['post']['offset'];
+ $offset += 4; // skip Format Type
+ $fmetric['italicAngle'] = $this->_getFIXED($font, $offset);
+ $offset += 4;
+ $fmetric['underlinePosition'] = round($this->_getFWORD($font, $offset) * $urk);
+ $offset += 2;
+ $fmetric['underlineThickness'] = round($this->_getFWORD($font, $offset) * $urk);
+ $offset += 2;
+ $isFixedPitch = ($this->_getULONG($font, $offset) == 0) ? false : true;
+ $offset += 2;
+ if ($isFixedPitch) {
+ $fmetric['Flags'] |= 1;
+ }
+ // ---------- get hhea data ----------
+ $offset = $table['hhea']['offset'];
+ $offset += 4; // skip Table version number
+ // Ascender
+ $fmetric['Ascent'] = round($this->_getFWORD($font, $offset) * $urk);
+ $offset += 2;
+ // Descender
+ $fmetric['Descent'] = round($this->_getFWORD($font, $offset) * $urk);
+ $offset += 2;
+ // LineGap
+ $fmetric['Leading'] = round($this->_getFWORD($font, $offset) * $urk);
+ $offset += 2;
+ // advanceWidthMax
+ $fmetric['MaxWidth'] = round($this->_getUFWORD($font, $offset) * $urk);
+ $offset += 2;
+ $offset += 22; // skip some values
+ // get the number of hMetric entries in hmtx table
+ $numberOfHMetrics = $this->_getUSHORT($font, $offset);
+ // ---------- get maxp data ----------
+ $offset = $table['maxp']['offset'];
+ $offset += 4; // skip Table version number
+ // get the the number of glyphs in the font.
+ $numGlyphs = $this->_getUSHORT($font, $offset);
+ // ---------- get CIDToGIDMap ----------
+ $ctg = array();
+ foreach ($encodingTables as $enctable) {
+ if (($enctable['platformID'] == 3) AND ($enctable['encodingID'] == 0)) {
+ $modesymbol = true;
+ } else {
+ $modesymbol = false;
+ }
+ $offset = $table['cmap']['offset'] + $enctable['offset'];
+ $format = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ switch ($format) {
+ case 0: { // Format 0: Byte encoding table
+ $offset += 4; // skip length and version/language
+ for ($c = 0; $c < 256; ++$c) {
+ $g = $this->_getBYTE($font, $offset);
+ $ctg[$c] = $g;
+ ++$offset;
+ }
+ break;
+ }
+ case 2: { // Format 2: High-byte mapping through table
+ $offset += 4; // skip length and version/language
+ $numSubHeaders = 0;
+ for ($i = 0; $i < 256; ++$i) {
+ // Array that maps high bytes to subHeaders: value is subHeader index * 8.
+ $subHeaderKeys[$i] = ($this->_getUSHORT($font, $offset) / 8);
+ $offset += 2;
+ if ($numSubHeaders < $subHeaderKeys[$i]) {
+ $numSubHeaders = $subHeaderKeys[$i];
+ }
+ }
+ // the number of subHeaders is equal to the max of subHeaderKeys + 1
+ ++$numSubHeaders;
+ // read subHeader structures
+ $subHeaders = array();
+ $numGlyphIndexArray = 0;
+ for ($k = 0; $k < $numSubHeaders; ++$k) {
+ $subHeaders[$k]['firstCode'] = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ $subHeaders[$k]['entryCount'] = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ $subHeaders[$k]['idDelta'] = $this->_getSHORT($font, $offset);
+ $offset += 2;
+ $subHeaders[$k]['idRangeOffset'] = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ $subHeaders[$k]['idRangeOffset'] -= (2 + (($numSubHeaders - $k - 1) * 8));
+ $subHeaders[$k]['idRangeOffset'] /= 2;
+ $numGlyphIndexArray += $subHeaders[$k]['entryCount'];
+ }
+ for ($k = 0; $k < $numGlyphIndexArray; ++$k) {
+ $glyphIndexArray[$k] = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ }
+ for ($i = 0; $i < 256; ++$i) {
+ $k = $subHeaderKeys[$i];
+ if ($k == 0) {
+ // one byte code
+ $c = $i;
+ $g = $glyphIndexArray[0];
+ $ctg[$c] = $g;
+ } else {
+ // two bytes code
+ $start_byte = $subHeaders[$k]['firstCode'];
+ $end_byte = $start_byte + $subHeaders[$k]['entryCount'];
+ for ($j = $start_byte; $j < $end_byte; ++$j) {
+ // combine high and low bytes
+ $c = (($i << 8) + $j);
+ $idRangeOffset = ($subHeaders[$k]['idRangeOffset'] + $j - $subHeaders[$k]['firstCode']);
+ $g = $glyphIndexArray[$idRangeOffset];
+ $g += ($idDelta[$k] - 65536);
+ if ($g < 0) {
+ $g = 0;
+ }
+ $ctg[$c] = $g;
+ }
+ }
+ }
+ break;
+ }
+ case 4: { // Format 4: Segment mapping to delta values
+ $length = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ $offset += 2; // skip version/language
+ $segCount = ($this->_getUSHORT($font, $offset) / 2);
+ $offset += 2;
+ $offset += 6; // skip searchRange, entrySelector, rangeShift
+ $endCount = array(); // array of end character codes for each segment
+ for ($k = 0; $k < $segCount; ++$k) {
+ $endCount[$k] = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ }
+ $offset += 2; // skip reservedPad
+ $startCount = array(); // array of start character codes for each segment
+ for ($k = 0; $k < $segCount; ++$k) {
+ $startCount[$k] = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ }
+ $idDelta = array(); // delta for all character codes in segment
+ for ($k = 0; $k < $segCount; ++$k) {
+ $idDelta[$k] = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ }
+ $idRangeOffset = array(); // Offsets into glyphIdArray or 0
+ for ($k = 0; $k < $segCount; ++$k) {
+ $idRangeOffset[$k] = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ }
+ $gidlen = ($length / 2) - 8 - (4 * $segCount);
+ $glyphIdArray = array(); // glyph index array
+ for ($k = 0; $k < $gidlen; ++$k) {
+ $glyphIdArray[$k] = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ }
+ for ($k = 0; $k < $segCount; ++$k) {
+ for ($c = $startCount[$k]; $c <= $endCount[$k]; ++$c) {
+ if ($idRangeOffset[$k] == 0) {
+ $g = $c;
+ } else {
+ $gid = (($idRangeOffset[$k] / 2) + ($c - $startCount[$k]) - ($segCount - $k));
+ $g = $glyphIdArray[$gid];
+ }
+ $g += ($idDelta[$k] - 65536);
+ if ($g < 0) {
+ $g = 0;
+ }
+ $ctg[$c] = $g;
+ }
+ }
+ break;
+ }
+ case 6: { // Format 6: Trimmed table mapping
+ $offset += 4; // skip length and version/language
+ $firstCode = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ $entryCount = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ for ($k = 0; $k < $entryCount; ++$k) {
+ $c = ($k + $firstCode);
+ $g = $this->_getUSHORT($font, $offset);
+ $ctg[$c] = $g;
+ $offset += 2;
+ }
+ break;
+ }
+ case 8: { // Format 8: Mixed 16-bit and 32-bit coverage
+ $offset += 10; // skip reserved, length and version/language
+ for ($k = 0; $k < 8192; ++$k) {
+ $is32[$k] = $this->_getBYTE($font, $offset);
+ ++$offset;
+ }
+ $nGroups = $this->_getULONG($font, $offset);
+ $offset += 4;
+ for ($i = 0; $i < $nGroups; ++$i) {
+ $startCharCode = $this->_getULONG($font, $offset);
+ $offset += 4;
+ $endCharCode = $this->_getULONG($font, $offset);
+ $offset += 4;
+ $startGlyphID = $this->_getULONG($font, $offset);
+ $offset += 4;
+ for ($k = $startCharCode; $k <= $endCharCode; ++$k) {
+ $is32idx = floor($c / 8);
+ if ((isset($is32[$is32idx])) AND (($is32[$is32idx] & (1 << (7 - ($c % 8)))) == 0)) {
+ $c = $k;
+ } else {
+ // 32 bit format
+ // convert to decimal (http://www.unicode.org/faq//utf_bom.html#utf16-4)
+ //LEAD_OFFSET = (0xD800 - (0x10000 >> 10)) = 55232
+ //SURROGATE_OFFSET = (0x10000 - (0xD800 << 10) - 0xDC00) = -56613888
+ $c = ((55232 + ($k >> 10)) << 10) + (0xDC00 + ($k & 0x3FF)) -56613888;
+ }
+ $ctg[$c] = $g;
+ ++$startGlyphID;
+ }
+ }
+ break;
+ }
+ case 10: { // Format 10: Trimmed array
+ $offset += 10; // skip reserved, length and version/language
+ $startCharCode = $this->_getULONG($font, $offset);
+ $offset += 4;
+ $numChars = $this->_getULONG($font, $offset);
+ $offset += 4;
+ for ($k = 0; $k < $numChars; ++$k) {
+ $c = ($k + $startCharCode);
+ $g = $this->_getUSHORT($font, $offset);
+ $ctg[$c] = $g;
+ $offset += 2;
+ }
+ break;
+ }
+ case 12: { // Format 12: Segmented coverage
+ $offset += 10; // skip length and version/language
+ $nGroups = $this->_getULONG($font, $offset);
+ $offset += 4;
+ for ($k = 0; $k < $nGroups; ++$k) {
+ $startCharCode = $this->_getULONG($font, $offset);
+ $offset += 4;
+ $endCharCode = $this->_getULONG($font, $offset);
+ $offset += 4;
+ $startGlyphCode = $this->_getULONG($font, $offset);
+ $offset += 4;
+ for ($c = $startCharCode; $c <= $endCharCode; ++$c) {
+ $ctg[$c] = $startGlyphCode;
+ ++$startGlyphCode;
+ }
+ }
+ break;
+ }
+ case 13: { // Format 13: Many-to-one range mappings
+ // to be implemented ...
+ break;
+ }
+ case 14: { // Format 14: Unicode Variation Sequences
+ // to be implemented ...
+ break;
+ }
+ }
+ }
+ if (!isset($ctg[0])) {
+ $ctg[0] = 0;
+ }
+ // get xHeight (height of x)
+ $offset = ($table['glyf']['offset'] + $indexToLoc[$ctg[120]] + 4);
+ $yMin = $this->_getFWORD($font, $offset);
+ $offset += 4;
+ $yMax = $this->_getFWORD($font, $offset);
+ $offset += 2;
+ $fmetric['XHeight'] = round(($yMax - $yMin) * $urk);
+ // get CapHeight (height of H)
+ $offset = ($table['glyf']['offset'] + $indexToLoc[$ctg[72]] + 4);
+ $yMin = $this->_getFWORD($font, $offset);
+ $offset += 4;
+ $yMax = $this->_getFWORD($font, $offset);
+ $offset += 2;
+ $fmetric['CapHeight'] = round(($yMax - $yMin) * $urk);
+ // ceate widths array
+ $cw = array();
+ $offset = $table['hmtx']['offset'];
+ for ($i = 0 ; $i < $numberOfHMetrics; ++$i) {
+ $cw[$i] = round($this->_getUFWORD($font, $offset) * $urk);
+ $offset += 4; // skip lsb
+ }
+ if ($numberOfHMetrics < $numGlyphs) {
+ // fill missing widths with the last value
+ $cw = array_pad($cw, $numGlyphs, $cw[($numberOfHMetrics - 1)]);
+ }
+ $fmetric['MissingWidth'] = $cw[0];
+ $fmetric['cw'] = '';
+ for ($cid = 0; $cid <= 65535; ++$cid) {
+ if (isset($ctg[$cid]) AND isset($cw[$ctg[$cid]])) {
+ $fmetric['cw'] .= ','.$cid.'=>'.$cw[$ctg[$cid]];
+ }
+ }
+ } // end of true type
+ if (($fmetric['type'] == 'TrueTypeUnicode') AND (count($ctg) == 256)) {
+ $fmetric['type'] == 'TrueType';
+ }
+ // ---------- create php font file ----------
+ $pfile = '<'.'?'.'php'."\n";
+ $pfile .= '// TCPDF FONT FILE DESCRIPTION'."\n";
+ $pfile .= '$type=\''.$fmetric['type'].'\';'."\n";
+ $pfile .= '$name=\''.$fmetric['name'].'\';'."\n";
+ $pfile .= '$up='.$fmetric['underlinePosition'].';'."\n";
+ $pfile .= '$ut='.$fmetric['underlineThickness'].';'."\n";
+ if ($fmetric['MissingWidth'] > 0) {
+ $pfile .= '$dw='.$fmetric['MissingWidth'].';'."\n";
+ } else {
+ $pfile .= '$dw='.$fmetric['AvgWidth'].';'."\n";
+ }
+ $pfile .= '$diff=\''.$fmetric['diff'].'\';'."\n";
+ if ($fmetric['type'] == 'Type1') {
+ // Type 1
+ $pfile .= '$enc=\''.$fmetric['enc'].'\';'."\n";
+ $pfile .= '$file=\''.$fmetric['file'].'\';'."\n";
+ $pfile .= '$size1='.$fmetric['size1'].';'."\n";
+ $pfile .= '$size2='.$fmetric['size2'].';'."\n";
+ } else {
+ $pfile .= '$originalsize='.$fmetric['originalsize'].';'."\n";
+ if ($fmetric['type'] == 'cidfont0') {
+ // CID-0
+ switch ($fonttype) {
+ case 'CID0JP': {
+ $pfile .= '// Japanese'."\n";
+ $pfile .= '$enc=\'UniJIS-UTF16-H\';'."\n";
+ $pfile .= '$cidinfo=array(\'Registry\'=>\'Adobe\', \'Ordering\'=>\'Japan1\',\'Supplement\'=>5);'."\n";
+ $pfile .= 'include(dirname(__FILE__).\'/uni2cid_aj16.php\');'."\n";
+ break;
+ }
+ case 'CID0KR': {
+ $pfile .= '// Korean'."\n";
+ $pfile .= '$enc=\'UniKS-UTF16-H\';'."\n";
+ $pfile .= '$cidinfo=array(\'Registry\'=>\'Adobe\', \'Ordering\'=>\'Korea1\',\'Supplement\'=>0);'."\n";
+ $pfile .= 'include(dirname(__FILE__).\'/uni2cid_ak12.php\');'."\n";
+ break;
+ }
+ case 'CID0CS': {
+ $pfile .= '// Chinese Simplified'."\n";
+ $pfile .= '$enc=\'UniGB-UTF16-H\';'."\n";
+ $pfile .= '$cidinfo=array(\'Registry\'=>\'Adobe\', \'Ordering\'=>\'GB1\',\'Supplement\'=>2);'."\n";
+ $pfile .= 'include(dirname(__FILE__).\'/uni2cid_ag15.php\');'."\n";
+ break;
+ }
+ case 'CID0CT':
+ default: {
+ $pfile .= '// Chinese Traditional'."\n";
+ $pfile .= '$enc=\'UniCNS-UTF16-H\';'."\n";
+ $pfile .= '$cidinfo=array(\'Registry\'=>\'Adobe\', \'Ordering\'=>\'CNS1\',\'Supplement\'=>0);'."\n";
+ $pfile .= 'include(dirname(__FILE__).\'/uni2cid_aj16.php\');'."\n";
+ break;
+ }
+ }
+ } else {
+ // TrueType
+ $pfile .= '$enc=\''.$fmetric['enc'].'\';'."\n";
+ $pfile .= '$file=\''.$fmetric['file'].'\';'."\n";
+ $pfile .= '$ctg=\''.$fmetric['ctg'].'\';'."\n";
+ // create CIDToGIDMap
+ $cidtogidmap = str_pad('', 131072, "\x00"); // (256 * 256 * 2) = 131072
+ foreach ($ctg as $cid => $gid) {
+ $cidtogidmap = $this->updateCIDtoGIDmap($cidtogidmap, $cid, $ctg[$cid]);
+ }
+ // store compressed CIDToGIDMap
+ $fp = fopen($outpath.$fmetric['ctg'], 'wb');
+ fwrite($fp, gzcompress($cidtogidmap));
+ fclose($fp);
+ }
+ }
+ $pfile .= '$desc=array(';
+ $pfile .= '\'Flags\'=>'.$fmetric['Flags'].',';
+ $pfile .= '\'FontBBox\'=>\'['.$fmetric['bbox'].']\',';
+ $pfile .= '\'ItalicAngle\'=>'.$fmetric['italicAngle'].',';
+ $pfile .= '\'Ascent\'=>'.$fmetric['Ascent'].',';
+ $pfile .= '\'Descent\'=>'.$fmetric['Descent'].',';
+ $pfile .= '\'Leading\'=>'.$fmetric['Leading'].',';
+ $pfile .= '\'CapHeight\'=>'.$fmetric['CapHeight'].',';
+ $pfile .= '\'XHeight\'=>'.$fmetric['XHeight'].',';
+ $pfile .= '\'StemV\'=>'.$fmetric['StemV'].',';
+ $pfile .= '\'StemH\'=>'.$fmetric['StemH'].',';
+ $pfile .= '\'AvgWidth\'=>'.$fmetric['AvgWidth'].',';
+ $pfile .= '\'MaxWidth\'=>'.$fmetric['MaxWidth'].',';
+ $pfile .= '\'MissingWidth\'=>'.$fmetric['MissingWidth'].'';
+ $pfile .= ');'."\n";
+ $pfile .= '$cw=array('.substr($fmetric['cw'], 1).');'."\n";
+ $pfile .= '// --- EOF ---'."\n";
+ // store file
+ $fp = fopen($outpath.$font_name.'.php', 'w');
+ fwrite($fp, $pfile);
+ fclose($fp);
+ // return TCPDF font name
+ return $font_name;
+ }
+
+ /**
+ * Returns a subset of the TrueType font data without the unused glyphs.
+ * @param $font (string) TrueType font data.
+ * @param $subsetchars (array) Array of used characters (the glyphs to keep).
+ * @return (string) A subset of TrueType font data without the unused glyphs.
+ * @author Nicola Asuni
+ * @protected
+ * @since 5.2.000 (2010-06-02)
+ */
+ protected function _getTrueTypeFontSubset($font, $subsetchars) {
+ ksort($subsetchars);
+ $offset = 0; // offset position of the font data
+ if ($this->_getULONG($font, $offset) != 0x10000) {
+ // sfnt version must be 0x00010000 for TrueType version 1.0.
+ return $font;
+ }
+ $offset += 4;
+ // get number of tables
+ $numTables = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ // skip searchRange, entrySelector and rangeShift
+ $offset += 6;
+ // tables array
+ $table = array();
+ // for each table
+ for ($i = 0; $i < $numTables; ++$i) {
+ // get table info
+ $tag = substr($font, $offset, 4);
+ $offset += 4;
+ $table[$tag] = array();
+ $table[$tag]['checkSum'] = $this->_getULONG($font, $offset);
+ $offset += 4;
+ $table[$tag]['offset'] = $this->_getULONG($font, $offset);
+ $offset += 4;
+ $table[$tag]['length'] = $this->_getULONG($font, $offset);
+ $offset += 4;
+ }
+ // check magicNumber
+ $offset = $table['head']['offset'] + 12;
+ if ($this->_getULONG($font, $offset) != 0x5F0F3CF5) {
+ // magicNumber must be 0x5F0F3CF5
+ return $font;
+ }
+ $offset += 4;
+ // get offset mode (indexToLocFormat : 0 = short, 1 = long)
+ $offset = $table['head']['offset'] + 50;
+ $short_offset = ($this->_getSHORT($font, $offset) == 0);
+ $offset += 2;
+ // get the offsets to the locations of the glyphs in the font, relative to the beginning of the glyphData table
+ $indexToLoc = array();
+ $offset = $table['loca']['offset'];
+ if ($short_offset) {
+ // short version
+ $tot_num_glyphs = ($table['loca']['length'] / 2); // numGlyphs + 1
+ for ($i = 0; $i < $tot_num_glyphs; ++$i) {
+ $indexToLoc[$i] = $this->_getUSHORT($font, $offset) * 2;
+ $offset += 2;
+ }
+ } else {
+ // long version
+ $tot_num_glyphs = ($table['loca']['length'] / 4); // numGlyphs + 1
+ for ($i = 0; $i < $tot_num_glyphs; ++$i) {
+ $indexToLoc[$i] = $this->_getULONG($font, $offset);
+ $offset += 4;
+ }
+ }
+ // get glyphs indexes of chars from cmap table
+ $subsetglyphs = array(); // glyph IDs on key
+ $subsetglyphs[0] = true; // character codes that do not correspond to any glyph in the font should be mapped to glyph index 0
+ $offset = $table['cmap']['offset'] + 2;
+ $numEncodingTables = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ $encodingTables = array();
+ for ($i = 0; $i < $numEncodingTables; ++$i) {
+ $encodingTables[$i]['platformID'] = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ $encodingTables[$i]['encodingID'] = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ $encodingTables[$i]['offset'] = $this->_getULONG($font, $offset);
+ $offset += 4;
+ }
+ foreach ($encodingTables as $enctable) {
+ if (($enctable['platformID'] == 3) AND ($enctable['encodingID'] == 0)) {
+ $modesymbol = true;
+ } else {
+ $modesymbol = false;
+ }
+ $offset = $table['cmap']['offset'] + $enctable['offset'];
+ $format = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ switch ($format) {
+ case 0: { // Format 0: Byte encoding table
+ $offset += 4; // skip length and version/language
+ for ($c = 0; $c < 256; ++$c) {
+ if (isset($subsetchars[$c])) {
+ $g = $this->_getBYTE($font, $offset);
+ $subsetglyphs[$g] = true;
+ }
+ ++$offset;
+ }
+ break;
+ }
+ case 2: { // Format 2: High-byte mapping through table
+ $offset += 4; // skip length and version/language
+ $numSubHeaders = 0;
+ for ($i = 0; $i < 256; ++$i) {
+ // Array that maps high bytes to subHeaders: value is subHeader index * 8.
+ $subHeaderKeys[$i] = ($this->_getUSHORT($font, $offset) / 8);
+ $offset += 2;
+ if ($numSubHeaders < $subHeaderKeys[$i]) {
+ $numSubHeaders = $subHeaderKeys[$i];
+ }
+ }
+ // the number of subHeaders is equal to the max of subHeaderKeys + 1
+ ++$numSubHeaders;
+ // read subHeader structures
+ $subHeaders = array();
+ $numGlyphIndexArray = 0;
+ for ($k = 0; $k < $numSubHeaders; ++$k) {
+ $subHeaders[$k]['firstCode'] = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ $subHeaders[$k]['entryCount'] = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ $subHeaders[$k]['idDelta'] = $this->_getSHORT($font, $offset);
+ $offset += 2;
+ $subHeaders[$k]['idRangeOffset'] = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ $subHeaders[$k]['idRangeOffset'] -= (2 + (($numSubHeaders - $k - 1) * 8));
+ $subHeaders[$k]['idRangeOffset'] /= 2;
+ $numGlyphIndexArray += $subHeaders[$k]['entryCount'];
+ }
+ for ($k = 0; $k < $numGlyphIndexArray; ++$k) {
+ $glyphIndexArray[$k] = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ }
+ for ($i = 0; $i < 256; ++$i) {
+ $k = $subHeaderKeys[$i];
+ if ($k == 0) {
+ // one byte code
+ $c = $i;
+ if (isset($subsetchars[$c])) {
+ $g = $glyphIndexArray[0];
+ $subsetglyphs[$g] = true;
+ }
+ } else {
+ // two bytes code
+ $start_byte = $subHeaders[$k]['firstCode'];
+ $end_byte = $start_byte + $subHeaders[$k]['entryCount'];
+ for ($j = $start_byte; $j < $end_byte; ++$j) {
+ // combine high and low bytes
+ $c = (($i << 8) + $j);
+ if (isset($subsetchars[$c])) {
+ $idRangeOffset = ($subHeaders[$k]['idRangeOffset'] + $j - $subHeaders[$k]['firstCode']);
+ $g = $glyphIndexArray[$idRangeOffset];
+ $g += ($idDelta[$k] - 65536);
+ if ($g < 0) {
+ $g = 0;
+ }
+ $subsetglyphs[$g] = true;
+ }
+ }
+ }
+ }
+ break;
+ }
+ case 4: { // Format 4: Segment mapping to delta values
+ $length = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ $offset += 2; // skip version/language
+ $segCount = ($this->_getUSHORT($font, $offset) / 2);
+ $offset += 2;
+ $offset += 6; // skip searchRange, entrySelector, rangeShift
+ $endCount = array(); // array of end character codes for each segment
+ for ($k = 0; $k < $segCount; ++$k) {
+ $endCount[$k] = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ }
+ $offset += 2; // skip reservedPad
+ $startCount = array(); // array of start character codes for each segment
+ for ($k = 0; $k < $segCount; ++$k) {
+ $startCount[$k] = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ }
+ $idDelta = array(); // delta for all character codes in segment
+ for ($k = 0; $k < $segCount; ++$k) {
+ $idDelta[$k] = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ }
+ $idRangeOffset = array(); // Offsets into glyphIdArray or 0
+ for ($k = 0; $k < $segCount; ++$k) {
+ $idRangeOffset[$k] = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ }
+ $gidlen = ($length / 2) - 8 - (4 * $segCount);
+ $glyphIdArray = array(); // glyph index array
+ for ($k = 0; $k < $gidlen; ++$k) {
+ $glyphIdArray[$k] = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ }
+ for ($k = 0; $k < $segCount; ++$k) {
+ for ($c = $startCount[$k]; $c <= $endCount[$k]; ++$c) {
+ if (isset($subsetchars[$c])) {
+ if ($idRangeOffset[$k] == 0) {
+ $g = $c;
+ } else {
+ $gid = (($idRangeOffset[$k] / 2) + ($c - $startCount[$k]) - ($segCount - $k));
+ $g = $glyphIdArray[$gid];
+ }
+ $g += ($idDelta[$k] - 65536);
+ if ($g < 0) {
+ $g = 0;
+ }
+ $subsetglyphs[$g] = true;
+ }
+ }
+ }
+ break;
+ }
+ case 6: { // Format 6: Trimmed table mapping
+ $offset += 4; // skip length and version/language
+ $firstCode = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ $entryCount = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ for ($k = 0; $k < $entryCount; ++$k) {
+ $c = ($k + $firstCode);
+ if (isset($subsetchars[$c])) {
+ $g = $this->_getUSHORT($font, $offset);
+ $subsetglyphs[$g] = true;
+ }
+ $offset += 2;
+ }
+ break;
+ }
+ case 8: { // Format 8: Mixed 16-bit and 32-bit coverage
+ $offset += 10; // skip reserved, length and version/language
+ for ($k = 0; $k < 8192; ++$k) {
+ $is32[$k] = $this->_getBYTE($font, $offset);
+ ++$offset;
+ }
+ $nGroups = $this->_getULONG($font, $offset);
+ $offset += 4;
+ for ($i = 0; $i < $nGroups; ++$i) {
+ $startCharCode = $this->_getULONG($font, $offset);
+ $offset += 4;
+ $endCharCode = $this->_getULONG($font, $offset);
+ $offset += 4;
+ $startGlyphID = $this->_getULONG($font, $offset);
+ $offset += 4;
+ for ($k = $startCharCode; $k <= $endCharCode; ++$k) {
+ $is32idx = floor($c / 8);
+ if ((isset($is32[$is32idx])) AND (($is32[$is32idx] & (1 << (7 - ($c % 8)))) == 0)) {
+ $c = $k;
+ } else {
+ // 32 bit format
+ // convert to decimal (http://www.unicode.org/faq//utf_bom.html#utf16-4)
+ //LEAD_OFFSET = (0xD800 - (0x10000 >> 10)) = 55232
+ //SURROGATE_OFFSET = (0x10000 - (0xD800 << 10) - 0xDC00) = -56613888
+ $c = ((55232 + ($k >> 10)) << 10) + (0xDC00 + ($k & 0x3FF)) -56613888;
+ }
+ if (isset($subsetchars[$c])) {
+ $subsetglyphs[$startGlyphID] = true;
+ }
+ ++$startGlyphID;
+ }
+ }
+ break;
+ }
+ case 10: { // Format 10: Trimmed array
+ $offset += 10; // skip reserved, length and version/language
+ $startCharCode = $this->_getULONG($font, $offset);
+ $offset += 4;
+ $numChars = $this->_getULONG($font, $offset);
+ $offset += 4;
+ for ($k = 0; $k < $numChars; ++$k) {
+ $c = ($k + $startCharCode);
+ if (isset($subsetchars[$c])) {
+ $g = $this->_getUSHORT($font, $offset);
+ $subsetglyphs[$g] = true;
+ }
+ $offset += 2;
+ }
+ break;
+ }
+ case 12: { // Format 12: Segmented coverage
+ $offset += 10; // skip length and version/language
+ $nGroups = $this->_getULONG($font, $offset);
+ $offset += 4;
+ for ($k = 0; $k < $nGroups; ++$k) {
+ $startCharCode = $this->_getULONG($font, $offset);
+ $offset += 4;
+ $endCharCode = $this->_getULONG($font, $offset);
+ $offset += 4;
+ $startGlyphCode = $this->_getULONG($font, $offset);
+ $offset += 4;
+ for ($c = $startCharCode; $c <= $endCharCode; ++$c) {
+ if (isset($subsetchars[$c])) {
+ $subsetglyphs[$startGlyphCode] = true;
+ }
+ ++$startGlyphCode;
+ }
+ }
+ break;
+ }
+ case 13: { // Format 13: Many-to-one range mappings
+ // to be implemented ...
+ break;
+ }
+ case 14: { // Format 14: Unicode Variation Sequences
+ // to be implemented ...
+ break;
+ }
+ }
+ }
+ // include all parts of composite glyphs
+ $new_sga = $subsetglyphs;
+ while (!empty($new_sga)) {
+ $sga = $new_sga;
+ $new_sga = array();
+ foreach ($sga as $key => $val) {
+ if (isset($indexToLoc[$key])) {
+ $offset = ($table['glyf']['offset'] + $indexToLoc[$key]);
+ $numberOfContours = $this->_getSHORT($font, $offset);
+ $offset += 2;
+ if ($numberOfContours < 0) { // composite glyph
+ $offset += 8; // skip xMin, yMin, xMax, yMax
+ do {
+ $flags = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ $glyphIndex = $this->_getUSHORT($font, $offset);
+ $offset += 2;
+ if (!isset($subsetglyphs[$glyphIndex])) {
+ // add missing glyphs
+ $new_sga[$glyphIndex] = true;
+ }
+ // skip some bytes by case
+ if ($flags & 1) {
+ $offset += 4;
+ } else {
+ $offset += 2;
+ }
+ if ($flags & 8) {
+ $offset += 2;
+ } elseif ($flags & 64) {
+ $offset += 4;
+ } elseif ($flags & 128) {
+ $offset += 8;
+ }
+ } while ($flags & 32);
+ }
+ }
+ }
+ $subsetglyphs += $new_sga;
+ }
+ // sort glyphs by key (and remove duplicates)
+ ksort($subsetglyphs);
+ // build new glyf and loca tables
+ $glyf = '';
+ $loca = '';
+ $offset = 0;
+ $glyf_offset = $table['glyf']['offset'];
+ for ($i = 0; $i < $tot_num_glyphs; ++$i) {
+ if (isset($subsetglyphs[$i])) {
+ $length = ($indexToLoc[($i + 1)] - $indexToLoc[$i]);
+ $glyf .= substr($font, ($glyf_offset + $indexToLoc[$i]), $length);
+ } else {
+ $length = 0;
+ }
+ if ($short_offset) {
+ $loca .= pack('n', ($offset / 2));
+ } else {
+ $loca .= pack('N', $offset);
+ }
+ $offset += $length;
+ }
+ // array of table names to preserve (loca and glyf tables will be added later)
+ // the cmap table is not needed and shall not be present, since the mapping from character codes to glyph descriptions is provided separately
+ $table_names = array ('head', 'hhea', 'hmtx', 'maxp', 'cvt ', 'fpgm', 'prep'); // minimum required table names
+ // get the tables to preserve
+ $offset = 12;
+ foreach ($table as $tag => $val) {
+ if (in_array($tag, $table_names)) {
+ $table[$tag]['data'] = substr($font, $table[$tag]['offset'], $table[$tag]['length']);
+ if ($tag == 'head') {
+ // set the checkSumAdjustment to 0
+ $table[$tag]['data'] = substr($table[$tag]['data'], 0, 8)."\x0\x0\x0\x0".substr($table[$tag]['data'], 12);
+ }
+ $pad = 4 - ($table[$tag]['length'] % 4);
+ if ($pad != 4) {
+ // the length of a table must be a multiple of four bytes
+ $table[$tag]['length'] += $pad;
+ $table[$tag]['data'] .= str_repeat("\x0", $pad);
+ }
+ $table[$tag]['offset'] = $offset;
+ $offset += $table[$tag]['length'];
+ // check sum is not changed (so keep the following line commented)
+ //$table[$tag]['checkSum'] = $this->_getTTFtableChecksum($table[$tag]['data'], $table[$tag]['length']);
+ } else {
+ unset($table[$tag]);
+ }
+ }
+ // add loca
+ $table['loca']['data'] = $loca;
+ $table['loca']['length'] = strlen($loca);
+ $pad = 4 - ($table['loca']['length'] % 4);
+ if ($pad != 4) {
+ // the length of a table must be a multiple of four bytes
+ $table['loca']['length'] += $pad;
+ $table['loca']['data'] .= str_repeat("\x0", $pad);
+ }
+ $table['loca']['offset'] = $offset;
+ $table['loca']['checkSum'] = $this->_getTTFtableChecksum($table['loca']['data'], $table['loca']['length']);
+ $offset += $table['loca']['length'];
+ // add glyf
+ $table['glyf']['data'] = $glyf;
+ $table['glyf']['length'] = strlen($glyf);
+ $pad = 4 - ($table['glyf']['length'] % 4);
+ if ($pad != 4) {
+ // the length of a table must be a multiple of four bytes
+ $table['glyf']['length'] += $pad;
+ $table['glyf']['data'] .= str_repeat("\x0", $pad);
+ }
+ $table['glyf']['offset'] = $offset;
+ $table['glyf']['checkSum'] = $this->_getTTFtableChecksum($table['glyf']['data'], $table['glyf']['length']);
+ // rebuild font
+ $font = '';
+ $font .= pack('N', 0x10000); // sfnt version
+ $numTables = count($table);
+ $font .= pack('n', $numTables); // numTables
+ $entrySelector = floor(log($numTables, 2));
+ $searchRange = pow(2, $entrySelector) * 16;
+ $rangeShift = ($numTables * 16) - $searchRange;
+ $font .= pack('n', $searchRange); // searchRange
+ $font .= pack('n', $entrySelector); // entrySelector
+ $font .= pack('n', $rangeShift); // rangeShift
+ $offset = ($numTables * 16);
+ foreach ($table as $tag => $data) {
+ $font .= $tag; // tag
+ $font .= pack('N', $data['checkSum']); // checkSum
+ $font .= pack('N', ($data['offset'] + $offset)); // offset
+ $font .= pack('N', $data['length']); // length
+ }
+ foreach ($table as $data) {
+ $font .= $data['data'];
+ }
+ // set checkSumAdjustment on head table
+ $checkSumAdjustment = 0xB1B0AFBA - $this->_getTTFtableChecksum($font, strlen($font));
+ $font = substr($font, 0, $table['head']['offset'] + 8).pack('N', $checkSumAdjustment).substr($font, $table['head']['offset'] + 12);
+ return $font;
+ }
+
+ /**
+ * Returs the checksum of a TTF table.
+ * @param $table (string) table to check
+ * @param $length (int) length of table in bytes
+ * @return int checksum
+ * @author Nicola Asuni
+ * @protected
+ * @since 5.2.000 (2010-06-02)
+ */
+ protected function _getTTFtableChecksum($table, $length) {
+ $sum = 0;
+ $tlen = ($length / 4);
+ $offset = 0;
+ for ($i = 0; $i < $tlen; ++$i) {
+ $v = unpack('Ni', substr($table, $offset, 4));
+ $sum += $v['i'];
+ $offset += 4;
+ }
+ $sum = unpack('Ni', pack('N', $sum));
+ return $sum['i'];
+ }
+
+ /**
+ * Outputs font widths
+ * @param $font (array) font data
+ * @param $cidoffset (int) offset for CID values
+ * @return PDF command string for font widths
+ * @author Nicola Asuni
+ * @protected
+ * @since 4.4.000 (2008-12-07)
+ */
+ protected function _putfontwidths($font, $cidoffset=0) {
+ ksort($font['cw']);
+ $rangeid = 0;
+ $range = array();
+ $prevcid = -2;
+ $prevwidth = -1;
+ $interval = false;
+ // for each character
+ foreach ($font['cw'] as $cid => $width) {
+ $cid -= $cidoffset;
+ if ($font['subset'] AND ($cid > 255) AND (!isset($font['subsetchars'][$cid]))) {
+ // ignore the unused characters (font subsetting)
+ continue;
+ }
+ if ($width != $font['dw']) {
+ if ($cid == ($prevcid + 1)) {
+ // consecutive CID
+ if ($width == $prevwidth) {
+ if ($width == $range[$rangeid][0]) {
+ $range[$rangeid][] = $width;
+ } else {
+ array_pop($range[$rangeid]);
+ // new range
+ $rangeid = $prevcid;
+ $range[$rangeid] = array();
+ $range[$rangeid][] = $prevwidth;
+ $range[$rangeid][] = $width;
+ }
+ $interval = true;
+ $range[$rangeid]['interval'] = true;
+ } else {
+ if ($interval) {
+ // new range
+ $rangeid = $cid;
+ $range[$rangeid] = array();
+ $range[$rangeid][] = $width;
+ } else {
+ $range[$rangeid][] = $width;
+ }
$interval = false;
}
- $prevcid = $cid;
- $prevwidth = $width;
- }
- }
- // optimize ranges
- $prevk = -1;
- $nextk = -1;
- $prevint = false;
- foreach ($range as $k => $ws) {
- $cws = count($ws);
- if (($k == $nextk) AND (!$prevint) AND ((!isset($ws['interval'])) OR ($cws < 4))) {
- if (isset($range[$k]['interval'])) {
- unset($range[$k]['interval']);
- }
- $range[$prevk] = array_merge($range[$prevk], $range[$k]);
- unset($range[$k]);
} else {
- $prevk = $k;
+ // new range
+ $rangeid = $cid;
+ $range[$rangeid] = array();
+ $range[$rangeid][] = $width;
+ $interval = false;
}
- $nextk = $k + $cws;
- if (isset($ws['interval'])) {
- if ($cws > 3) {
- $prevint = true;
- } else {
- $prevint = false;
- }
+ $prevcid = $cid;
+ $prevwidth = $width;
+ }
+ }
+ // optimize ranges
+ $prevk = -1;
+ $nextk = -1;
+ $prevint = false;
+ foreach ($range as $k => $ws) {
+ $cws = count($ws);
+ if (($k == $nextk) AND (!$prevint) AND ((!isset($ws['interval'])) OR ($cws < 4))) {
+ if (isset($range[$k]['interval'])) {
unset($range[$k]['interval']);
- --$nextk;
+ }
+ $range[$prevk] = array_merge($range[$prevk], $range[$k]);
+ unset($range[$k]);
+ } else {
+ $prevk = $k;
+ }
+ $nextk = $k + $cws;
+ if (isset($ws['interval'])) {
+ if ($cws > 3) {
+ $prevint = true;
} else {
$prevint = false;
}
- }
- // output data
- $w = '';
- foreach ($range as $k => $ws) {
- if (count(array_count_values($ws)) == 1) {
- // interval mode is more compact
- $w .= ' '.$k.' '.($k + count($ws) - 1).' '.$ws[0];
- } else {
- // range mode
- $w .= ' '.$k.' [ '.implode(' ', $ws).' ]';
- }
- }
- $this->_out('/W ['.$w.' ]');
- }
-
- /**
- * Adds unicode fonts.
- * Based on PDF Reference 1.3 (section 5)
- * @parameter array $font font data
- * @return int font object ID
- * @access protected
- * @author Nicola Asuni
- * @since 1.52.0.TC005 (2005-01-05)
- */
- protected function _puttruetypeunicode($font) {
- // Type0 Font
- // A composite font composed of other fonts, organized hierarchically
- $obj_id = $this->_newobj();
- $this->_out('<_out('/Subtype /Type0');
- $this->_out('/BaseFont /'.$font['name'].'');
- $this->_out('/Name /F'.$font['i']);
- $this->_out('/Encoding /'.$font['enc']);
- $this->_out('/ToUnicode /Identity-H');
- $this->_out('/DescendantFonts ['.($this->n + 1).' 0 R]');
- $this->_out('>>');
- $this->_out('endobj');
- // CIDFontType2
- // A CIDFont whose glyph descriptions are based on TrueType font technology
- $this->_newobj();
- $this->_out('<_out('/Subtype /CIDFontType2');
- $this->_out('/BaseFont /'.$font['name'].'');
- // A dictionary containing entries that define the character collection of the CIDFont.
- $cidinfo = '/Registry '.$this->_datastring($font['cidinfo']['Registry']);
- $cidinfo .= ' /Ordering '.$this->_datastring($font['cidinfo']['Ordering']);
- $cidinfo .= ' /Supplement '.$font['cidinfo']['Supplement'];
- $this->_out('/CIDSystemInfo <<'.$cidinfo.'>>');
- $this->_out('/FontDescriptor '.($this->n + 1).' 0 R');
- $this->_out('/DW '.$font['dw'].''); // default width
- $this->_putfontwidths($font, 0);
- $this->_out('/CIDToGIDMap '.($this->n + 2).' 0 R');
- $this->_out('>>');
- $this->_out('endobj');
- // Font descriptor
- // A font descriptor describing the CIDFont default metrics other than its glyph widths
- $this->_newobj();
- $this->_out('<_out('/FontName /'.$font['name']);
- foreach ($font['desc'] as $key => $value) {
- $this->_out('/'.$key.' '.$value);
- }
- $fontdir = '';
- if (!$this->empty_string($font['file'])) {
- // A stream containing a TrueType font
- $this->_out('/FontFile2 '.$this->FontFiles[$font['file']]['n'].' 0 R');
- $fontdir = $this->FontFiles[$font['file']]['fontdir'];
- }
- $this->_out('>>');
- $this->_out('endobj');
- $this->_newobj();
- if (isset($font['ctg']) AND (!$this->empty_string($font['ctg']))) {
- // Embed CIDToGIDMap
- // A specification of the mapping from CIDs to glyph indices
- // search and get CTG font file to embedd
- $ctgfile = strtolower($font['ctg']);
- // search and get ctg font file to embedd
- $fontfile = '';
- // search files on various directories
- if (file_exists($fontdir.$ctgfile)) {
- $fontfile = $fontdir.$ctgfile;
- } elseif (file_exists($this->_getfontpath().$ctgfile)) {
- $fontfile = $this->_getfontpath().$ctgfile;
- } elseif (file_exists($ctgfile)) {
- $fontfile = $ctgfile;
- }
- if ($this->empty_string($fontfile)) {
- $this->Error('Font file not found: '.$ctgfile);
- }
- $size = filesize($fontfile);
- $this->_out('<_out('/Filter /FlateDecode');
- }
- $this->_out('>>');
- $this->_putstream(file_get_contents($fontfile));
- }
- $this->_out('endobj');
- return $obj_id;
- }
-
- /**
- * Output CID-0 fonts.
- * A Type 0 CIDFont contains glyph descriptions based on the Adobe Type 1 font format
- * @param array $font font data
- * @return int font object ID
- * @access protected
- * @author Andrew Whitehead, Nicola Asuni, Yukihiro Nakadaira
- * @since 3.2.000 (2008-06-23)
- */
- protected function _putcidfont0($font) {
- $cidoffset = 0;
- if (!isset($font['cw'][1])) {
- $cidoffset = 31;
- }
- if (isset($font['cidinfo']['uni2cid'])) {
- // convert unicode to cid.
- $uni2cid = $font['cidinfo']['uni2cid'];
- $cw = array();
- foreach ($font['cw'] as $uni => $width) {
- if (isset($uni2cid[$uni])) {
- $cw[($uni2cid[$uni] + $cidoffset)] = $width;
- } elseif ($uni < 256) {
- $cw[$uni] = $width;
- } // else unknown character
- }
- $font = array_merge($font, array('cw' => $cw));
- }
- $name = $font['name'];
- $enc = $font['enc'];
- if ($enc) {
- $longname = $name.'-'.$enc;
+ unset($range[$k]['interval']);
+ --$nextk;
} else {
- $longname = $name;
+ $prevint = false;
}
- $obj_id = $this->_newobj();
- $this->_out('<_out('/Subtype /Type0');
- $this->_out('/BaseFont /'.$longname);
- $this->_out('/Name /F'.$font['i']);
- if ($enc) {
- $this->_out('/Encoding /'.$enc);
- }
- $this->_out('/DescendantFonts ['.($this->n + 1).' 0 R]');
- $this->_out('>>');
- $this->_out('endobj');
- $this->_newobj();
- $this->_out('<_out('/Subtype /CIDFontType0');
- $this->_out('/BaseFont /'.$name);
- $cidinfo = '/Registry '.$this->_datastring($font['cidinfo']['Registry']);
- $cidinfo .= ' /Ordering '.$this->_datastring($font['cidinfo']['Ordering']);
- $cidinfo .= ' /Supplement '.$font['cidinfo']['Supplement'];
- $this->_out('/CIDSystemInfo <<'.$cidinfo.'>>');
- $this->_out('/FontDescriptor '.($this->n + 1).' 0 R');
- $this->_out('/DW '.$font['dw']);
- $this->_putfontwidths($font, $cidoffset);
- $this->_out('>>');
- $this->_out('endobj');
- $this->_newobj();
- $s = '< $v) {
- if ($k != 'Style') {
- $s .= ' /'.$k.' '.$v.'';
- }
- }
- $this->_out($s.'>>');
- $this->_out('endobj');
- return $obj_id;
}
+ // output data
+ $w = '';
+ foreach ($range as $k => $ws) {
+ if (count(array_count_values($ws)) == 1) {
+ // interval mode is more compact
+ $w .= ' '.$k.' '.($k + count($ws) - 1).' '.$ws[0];
+ } else {
+ // range mode
+ $w .= ' '.$k.' [ '.implode(' ', $ws).' ]';
+ }
+ }
+ return '/W ['.$w.' ]';
+ }
- /**
- * Output images.
- * @access protected
- */
- protected function _putimages() {
- $filter = ($this->compress) ? '/Filter /FlateDecode ' : '';
- foreach ($this->imagekeys as $file) {
- $info = $this->getImageBuffer($file);
- $this->_newobj();
- $this->setImageSubBuffer($file, 'n', $this->n);
- $this->_out('<_out('/Subtype /Image');
- $this->_out('/Width '.$info['w']);
- $this->_out('/Height '.$info['h']);
- if (isset($info['masked'])) {
- $this->_out('/SMask '.($this->n - 1).' 0 R');
- }
- if ($info['cs'] == 'Indexed') {
- $this->_out('/ColorSpace [/Indexed /DeviceRGB '.((strlen($info['pal']) / 3) - 1).' '.($this->n + 1).' 0 R]');
- } else {
- $this->_out('/ColorSpace /'.$info['cs']);
- if ($info['cs'] == 'DeviceCMYK') {
- $this->_out('/Decode [1 0 1 0 1 0 1 0]');
+ /**
+ * Output fonts.
+ * @author Nicola Asuni
+ * @protected
+ */
+ protected function _putfonts() {
+ $nf = $this->n;
+ foreach ($this->diffs as $diff) {
+ //Encodings
+ $this->_newobj();
+ $this->_out('<< /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['.$diff.'] >>'."\n".'endobj');
+ }
+ $mqr = $this->get_mqr();
+ $this->set_mqr(false);
+ foreach ($this->FontFiles as $file => $info) {
+ // search and get font file to embedd
+ $fontdir = $info['fontdir'];
+ $file = strtolower($file);
+ $fontfile = '';
+ // search files on various directories
+ if (($fontdir !== false) AND file_exists($fontdir.$file)) {
+ $fontfile = $fontdir.$file;
+ } elseif (file_exists($this->_getfontpath().$file)) {
+ $fontfile = $this->_getfontpath().$file;
+ } elseif (file_exists($file)) {
+ $fontfile = $file;
+ }
+ if (!$this->empty_string($fontfile)) {
+ $font = file_get_contents($fontfile);
+ $compressed = (substr($file, -2) == '.z');
+ if ((!$compressed) AND (isset($info['length2']))) {
+ $header = (ord($font{0}) == 128);
+ if ($header) {
+ // strip first binary header
+ $font = substr($font, 6);
+ }
+ if ($header AND (ord($font{$info['length1']}) == 128)) {
+ // strip second binary header
+ $font = substr($font, 0, $info['length1']).substr($font, ($info['length1'] + 6));
+ }
+ } elseif ($info['subset'] AND ((!$compressed) OR ($compressed AND function_exists('gzcompress')))) {
+ if ($compressed) {
+ // uncompress font
+ $font = gzuncompress($font);
+ }
+ // merge subset characters
+ $subsetchars = array(); // used chars
+ foreach ($info['fontkeys'] as $fontkey) {
+ $fontinfo = $this->getFontBuffer($fontkey);
+ $subsetchars += $fontinfo['subsetchars'];
+ }
+ // rebuild a font subset
+ $font = $this->_getTrueTypeFontSubset($font, $subsetchars);
+ // calculate new font length
+ $info['length1'] = strlen($font);
+ if ($compressed) {
+ // recompress font
+ $font = gzcompress($font);
}
}
- $this->_out('/BitsPerComponent '.$info['bpc']);
+ $this->_newobj();
+ $this->FontFiles[$file]['n'] = $this->n;
+ $stream = $this->_getrawstream($font);
+ $out = '<< /Length '.strlen($stream);
+ if ($compressed) {
+ $out .= ' /Filter /FlateDecode';
+ }
+ $out .= ' /Length1 '.$info['length1'];
+ if (isset($info['length2'])) {
+ $out .= ' /Length2 '.$info['length2'].' /Length3 0';
+ }
+ $out .= ' >>';
+ $out .= ' stream'."\n".$stream."\n".'endstream';
+ $out .= "\n".'endobj';
+ $this->_out($out);
+ }
+ }
+ $this->set_mqr($mqr);
+ foreach ($this->fontkeys as $k) {
+ //Font objects
+ $font = $this->getFontBuffer($k);
+ $type = $font['type'];
+ $name = $font['name'];
+ if ($type == 'core') {
+ // standard core font
+ $out = $this->_getobj($this->font_obj_ids[$k])."\n";
+ $out .= '<annotation_fonts[$k] = $font['i'];
+ }
+ $out .= ' >>';
+ $out .= "\n".'endobj';
+ $this->_out($out);
+ } elseif (($type == 'Type1') OR ($type == 'TrueType')) {
+ // additional Type1 or TrueType font
+ $out = $this->_getobj($this->font_obj_ids[$k])."\n";
+ $out .= '<n + 1).' 0 R';
+ $out .= ' /FontDescriptor '.($this->n + 2).' 0 R';
+ if ($font['enc']) {
+ if (isset($font['diff'])) {
+ $out .= ' /Encoding '.($nf + $font['diff']).' 0 R';
+ } else {
+ $out .= ' /Encoding /WinAnsiEncoding';
+ }
+ }
+ $out .= ' >>';
+ $out .= "\n".'endobj';
+ $this->_out($out);
+ // Widths
+ $this->_newobj();
+ $s = '[';
+ for ($i = 32; $i < 256; ++$i) {
+ $s .= $font['cw'][$i].' ';
+ }
+ $s .= ']';
+ $s .= "\n".'endobj';
+ $this->_out($s);
+ //Descriptor
+ $this->_newobj();
+ $s = '< $fdv) {
+ if (is_float($fdv)) {
+ $fdv = sprintf('%.3F', $fdv);
+ }
+ $s .= ' /'.$fdk.' '.$fdv.'';
+ }
+ if (!$this->empty_string($font['file'])) {
+ $s .= ' /FontFile'.($type == 'Type1' ? '' : '2').' '.$this->FontFiles[$font['file']]['n'].' 0 R';
+ }
+ $s .= '>>';
+ $s .= "\n".'endobj';
+ $this->_out($s);
+ } else {
+ // additional types
+ $mtd = '_put'.strtolower($type);
+ if (!method_exists($this, $mtd)) {
+ $this->Error('Unsupported font type: '.$type);
+ }
+ $this->$mtd($font);
+ }
+ }
+ }
+
+ /**
+ * Adds unicode fonts.
+ * Based on PDF Reference 1.3 (section 5)
+ * @param $font (array) font data
+ * @protected
+ * @author Nicola Asuni
+ * @since 1.52.0.TC005 (2005-01-05)
+ */
+ protected function _puttruetypeunicode($font) {
+ $fontname = '';
+ if ($font['subset']) {
+ // change name for font subsetting
+ $subtag = sprintf('%06u', $font['i']);
+ $subtag = strtr($subtag, '0123456789', 'ABCDEFGHIJ');
+ $fontname .= $subtag.'+';
+ }
+ $fontname .= $font['name'];
+ // Type0 Font
+ // A composite font composed of other fonts, organized hierarchically
+ $out = $this->_getobj($this->font_obj_ids[$font['fontkey']])."\n";
+ $out .= '<< /Type /Font';
+ $out .= ' /Subtype /Type0';
+ $out .= ' /BaseFont /'.$fontname;
+ $out .= ' /Name /F'.$font['i'];
+ $out .= ' /Encoding /'.$font['enc'];
+ $out .= ' /ToUnicode '.($this->n + 1).' 0 R';
+ $out .= ' /DescendantFonts ['.($this->n + 2).' 0 R]';
+ $out .= ' >>';
+ $out .= "\n".'endobj';
+ $this->_out($out);
+ // ToUnicode map for Identity-H
+ $stream = "/CIDInit /ProcSet findresource begin\n";
+ $stream .= "12 dict begin\n";
+ $stream .= "begincmap\n";
+ $stream .= "/CIDSystemInfo << /Registry (Adobe) /Ordering (UCS) /Supplement 0 >> def\n";
+ $stream .= "/CMapName /Adobe-Identity-UCS def\n";
+ $stream .= "/CMapType 2 def\n";
+ $stream .= "/WMode 0 def\n";
+ $stream .= "1 begincodespacerange\n";
+ $stream .= "<0000> \n";
+ $stream .= "endcodespacerange\n";
+ $stream .= "100 beginbfrange\n";
+ $stream .= "<0000> <00ff> <0000>\n";
+ $stream .= "<0100> <01ff> <0100>\n";
+ $stream .= "<0200> <02ff> <0200>\n";
+ $stream .= "<0300> <03ff> <0300>\n";
+ $stream .= "<0400> <04ff> <0400>\n";
+ $stream .= "<0500> <05ff> <0500>\n";
+ $stream .= "<0600> <06ff> <0600>\n";
+ $stream .= "<0700> <07ff> <0700>\n";
+ $stream .= "<0800> <08ff> <0800>\n";
+ $stream .= "<0900> <09ff> <0900>\n";
+ $stream .= "<0a00> <0aff> <0a00>\n";
+ $stream .= "<0b00> <0bff> <0b00>\n";
+ $stream .= "<0c00> <0cff> <0c00>\n";
+ $stream .= "<0d00> <0dff> <0d00>\n";
+ $stream .= "<0e00> <0eff> <0e00>\n";
+ $stream .= "<0f00> <0fff> <0f00>\n";
+ $stream .= "<1000> <10ff> <1000>\n";
+ $stream .= "<1100> <11ff> <1100>\n";
+ $stream .= "<1200> <12ff> <1200>\n";
+ $stream .= "<1300> <13ff> <1300>\n";
+ $stream .= "<1400> <14ff> <1400>\n";
+ $stream .= "<1500> <15ff> <1500>\n";
+ $stream .= "<1600> <16ff> <1600>\n";
+ $stream .= "<1700> <17ff> <1700>\n";
+ $stream .= "<1800> <18ff> <1800>\n";
+ $stream .= "<1900> <19ff> <1900>\n";
+ $stream .= "<1a00> <1aff> <1a00>\n";
+ $stream .= "<1b00> <1bff> <1b00>\n";
+ $stream .= "<1c00> <1cff> <1c00>\n";
+ $stream .= "<1d00> <1dff> <1d00>\n";
+ $stream .= "<1e00> <1eff> <1e00>\n";
+ $stream .= "<1f00> <1fff> <1f00>\n";
+ $stream .= "<2000> <20ff> <2000>\n";
+ $stream .= "<2100> <21ff> <2100>\n";
+ $stream .= "<2200> <22ff> <2200>\n";
+ $stream .= "<2300> <23ff> <2300>\n";
+ $stream .= "<2400> <24ff> <2400>\n";
+ $stream .= "<2500> <25ff> <2500>\n";
+ $stream .= "<2600> <26ff> <2600>\n";
+ $stream .= "<2700> <27ff> <2700>\n";
+ $stream .= "<2800> <28ff> <2800>\n";
+ $stream .= "<2900> <29ff> <2900>\n";
+ $stream .= "<2a00> <2aff> <2a00>\n";
+ $stream .= "<2b00> <2bff> <2b00>\n";
+ $stream .= "<2c00> <2cff> <2c00>\n";
+ $stream .= "<2d00> <2dff> <2d00>\n";
+ $stream .= "<2e00> <2eff> <2e00>\n";
+ $stream .= "<2f00> <2fff> <2f00>\n";
+ $stream .= "<3000> <30ff> <3000>\n";
+ $stream .= "<3100> <31ff> <3100>\n";
+ $stream .= "<3200> <32ff> <3200>\n";
+ $stream .= "<3300> <33ff> <3300>\n";
+ $stream .= "<3400> <34ff> <3400>\n";
+ $stream .= "<3500> <35ff> <3500>\n";
+ $stream .= "<3600> <36ff> <3600>\n";
+ $stream .= "<3700> <37ff> <3700>\n";
+ $stream .= "<3800> <38ff> <3800>\n";
+ $stream .= "<3900> <39ff> <3900>\n";
+ $stream .= "<3a00> <3aff> <3a00>\n";
+ $stream .= "<3b00> <3bff> <3b00>\n";
+ $stream .= "<3c00> <3cff> <3c00>\n";
+ $stream .= "<3d00> <3dff> <3d00>\n";
+ $stream .= "<3e00> <3eff> <3e00>\n";
+ $stream .= "<3f00> <3fff> <3f00>\n";
+ $stream .= "<4000> <40ff> <4000>\n";
+ $stream .= "<4100> <41ff> <4100>\n";
+ $stream .= "<4200> <42ff> <4200>\n";
+ $stream .= "<4300> <43ff> <4300>\n";
+ $stream .= "<4400> <44ff> <4400>\n";
+ $stream .= "<4500> <45ff> <4500>\n";
+ $stream .= "<4600> <46ff> <4600>\n";
+ $stream .= "<4700> <47ff> <4700>\n";
+ $stream .= "<4800> <48ff> <4800>\n";
+ $stream .= "<4900> <49ff> <4900>\n";
+ $stream .= "<4a00> <4aff> <4a00>\n";
+ $stream .= "<4b00> <4bff> <4b00>\n";
+ $stream .= "<4c00> <4cff> <4c00>\n";
+ $stream .= "<4d00> <4dff> <4d00>\n";
+ $stream .= "<4e00> <4eff> <4e00>\n";
+ $stream .= "<4f00> <4fff> <4f00>\n";
+ $stream .= "<5000> <50ff> <5000>\n";
+ $stream .= "<5100> <51ff> <5100>\n";
+ $stream .= "<5200> <52ff> <5200>\n";
+ $stream .= "<5300> <53ff> <5300>\n";
+ $stream .= "<5400> <54ff> <5400>\n";
+ $stream .= "<5500> <55ff> <5500>\n";
+ $stream .= "<5600> <56ff> <5600>\n";
+ $stream .= "<5700> <57ff> <5700>\n";
+ $stream .= "<5800> <58ff> <5800>\n";
+ $stream .= "<5900> <59ff> <5900>\n";
+ $stream .= "<5a00> <5aff> <5a00>\n";
+ $stream .= "<5b00> <5bff> <5b00>\n";
+ $stream .= "<5c00> <5cff> <5c00>\n";
+ $stream .= "<5d00> <5dff> <5d00>\n";
+ $stream .= "<5e00> <5eff> <5e00>\n";
+ $stream .= "<5f00> <5fff> <5f00>\n";
+ $stream .= "<6000> <60ff> <6000>\n";
+ $stream .= "<6100> <61ff> <6100>\n";
+ $stream .= "<6200> <62ff> <6200>\n";
+ $stream .= "<6300> <63ff> <6300>\n";
+ $stream .= "endbfrange\n";
+ $stream .= "100 beginbfrange\n";
+ $stream .= "<6400> <64ff> <6400>\n";
+ $stream .= "<6500> <65ff> <6500>\n";
+ $stream .= "<6600> <66ff> <6600>\n";
+ $stream .= "<6700> <67ff> <6700>\n";
+ $stream .= "<6800> <68ff> <6800>\n";
+ $stream .= "<6900> <69ff> <6900>\n";
+ $stream .= "<6a00> <6aff> <6a00>\n";
+ $stream .= "<6b00> <6bff> <6b00>\n";
+ $stream .= "<6c00> <6cff> <6c00>\n";
+ $stream .= "<6d00> <6dff> <6d00>\n";
+ $stream .= "<6e00> <6eff> <6e00>\n";
+ $stream .= "<6f00> <6fff> <6f00>\n";
+ $stream .= "<7000> <70ff> <7000>\n";
+ $stream .= "<7100> <71ff> <7100>\n";
+ $stream .= "<7200> <72ff> <7200>\n";
+ $stream .= "<7300> <73ff> <7300>\n";
+ $stream .= "<7400> <74ff> <7400>\n";
+ $stream .= "<7500> <75ff> <7500>\n";
+ $stream .= "<7600> <76ff> <7600>\n";
+ $stream .= "<7700> <77ff> <7700>\n";
+ $stream .= "<7800> <78ff> <7800>\n";
+ $stream .= "<7900> <79ff> <7900>\n";
+ $stream .= "<7a00> <7aff> <7a00>\n";
+ $stream .= "<7b00> <7bff> <7b00>\n";
+ $stream .= "<7c00> <7cff> <7c00>\n";
+ $stream .= "<7d00> <7dff> <7d00>\n";
+ $stream .= "<7e00> <7eff> <7e00>\n";
+ $stream .= "<7f00> <7fff> <7f00>\n";
+ $stream .= "<8000> <80ff> <8000>\n";
+ $stream .= "<8100> <81ff> <8100>\n";
+ $stream .= "<8200> <82ff> <8200>\n";
+ $stream .= "<8300> <83ff> <8300>\n";
+ $stream .= "<8400> <84ff> <8400>\n";
+ $stream .= "<8500> <85ff> <8500>\n";
+ $stream .= "<8600> <86ff> <8600>\n";
+ $stream .= "<8700> <87ff> <8700>\n";
+ $stream .= "<8800> <88ff> <8800>\n";
+ $stream .= "<8900> <89ff> <8900>\n";
+ $stream .= "<8a00> <8aff> <8a00>\n";
+ $stream .= "<8b00> <8bff> <8b00>\n";
+ $stream .= "<8c00> <8cff> <8c00>\n";
+ $stream .= "<8d00> <8dff> <8d00>\n";
+ $stream .= "<8e00> <8eff> <8e00>\n";
+ $stream .= "<8f00> <8fff> <8f00>\n";
+ $stream .= "<9000> <90ff> <9000>\n";
+ $stream .= "<9100> <91ff> <9100>\n";
+ $stream .= "<9200> <92ff> <9200>\n";
+ $stream .= "<9300> <93ff> <9300>\n";
+ $stream .= "<9400> <94ff> <9400>\n";
+ $stream .= "<9500> <95ff> <9500>\n";
+ $stream .= "<9600> <96ff> <9600>\n";
+ $stream .= "<9700> <97ff> <9700>\n";
+ $stream .= "<9800> <98ff> <9800>\n";
+ $stream .= "<9900> <99ff> <9900>\n";
+ $stream .= "<9a00> <9aff> <9a00>\n";
+ $stream .= "<9b00> <9bff> <9b00>\n";
+ $stream .= "<9c00> <9cff> <9c00>\n";
+ $stream .= "<9d00> <9dff> <9d00>\n";
+ $stream .= "<9e00> <9eff> <9e00>\n";
+ $stream .= "<9f00> <9fff> <9f00>\n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= "endbfrange\n";
+ $stream .= "56 beginbfrange\n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= " \n";
+ $stream .= "