// // Programmer: Craig Stuart Sapp // Creation Date: Wed Jun 23 12:43:44 PDT 2010 // Last Modified: Wed Jun 23 12:43:47 PDT 2010 // Last Modified: Tue Dec 21 14:41:33 PST 2010 added instrument processing // Last Modified: Mon Feb 28 14:59:17 PST 2011 added --jrp // Last Modified: Mon Dec 12 16:39:02 PST 2011 added -p option // Last Modified: Tue Dec 23 15:15:41 PST 2014 allow for unlabeled page files. // Last Modified: Tue 15 Sep 2020 01:24:26 PM PDT Added --l1, --l2, --l3, --r1, --r2, --re options // Filename: ...sig/examples/all/musefoot.cpp // Web Address: http://sig.sapp.org/examples/museinfo/musedata/musefoot.cpp // Syntax: C++; museinfo // // Description: Add footers onto PostScript pages which have standard // %!PS-Adobe-3.0 Document Structuring Conventions // #include "museinfo.h" #include "Options.h" #include "PerlRegularExpression.h" #include #include #include using namespace std; class KeyValue { public: KeyValue(void) { key.resize(1); key[0] = '\0'; key.resize(0); value.resize(1); value[0] = '\0'; value.resize(0); } string key; string value; }; #define LEFTSIDE 0 #define RIGHTSIDE 1 // function declarations void checkOptions (Options& opts, int argc, char* argv[]); void example (void); void usage (const char* command); void deleteData (vector& data); void appendString (vector& listing, string& lastone); void printData (ostream& out, vector& data); void getPostScriptFile (vector& postscript, vector& pages, const string& filename); void getPostScriptFiles (vector& postscript, vector& pages, Options& options); void getPostScriptFile (vector& postscript, vector& pages, istream& input, const string& filename = ""); void getFooterFile (vector& data, const string& filename); void getFooterFile (vector& data, istream& input); void getFooterFile (vector& data, vector& postscript); void appendKeyValueInfo (vector& data, string& dataline); void printFooterInfo (ostream& out, vector& data); int getNextPage (int start, vector& pages); void printPostScriptPage(vector& postscript, vector& footerinfo, int startindex, int stopindex, vector& boundingbox, int shiftamount, int pagecount, int page); void printFooter (ostream& out, const char* pagelabel, vector& boundingbox, vector& footerinfo, int pagecount); int getFirstPage (vector& pages); void addPostScriptHeaderInfo(ostream& out); void printLogoDefinition(ostream& out); void printLogoDefinitionJRP(ostream& out); void printLogoDefinitionTASSO(ostream& out); void printLogoDefinitionCCARH(ostream& out); void printOverlayBox (ostream& out, double shade = 1.0); void printPreamble (ostream& out, int starti, int stopi, vector& postscript); void printColophonLogo (ostream& out, double lmargin); void getBoundingBox (vector& boundingbox, vector& postscript, int minn, int maxx); void generateFooterText (ostream& out, vector& boundingbox, vector& footerinfo, const char* pagelabel, int pagecount); void getLeftRightFooterInfo(vector& footerinfo, vector& footerleft, vector& footerright); void printFooterTextField(ostream& out, string data, const char* pagelabel, int side, int pagecount); void getDateString (char* datestring); void adjustInstrumentName(string& instrumentname, const string& instfile); void printLastPage (vector& postscript, vector& footerinfo, int startindex, int stopindex, vector& boundingbox, int page, int shiftamount, int pagecount); void printISOLatin1FontDefinition(ostream& out); // global variables Options options; // database for command-line arguments string footerfile = ""; // used with -f option int verboseQ = 0; // used with -v option int embedQ = 0; // used with -e option int showboxQ = 0; // used with -b option int jrpQ = 0; // used with --jrp option int tassoQ = 0; // used with --tasso option int overlayQ = 1; // used with -O option int shiftQ = 0; // used with -s option int pageoffset = 0; // used with -p option int debugQ = 0; // used with --debug option int ISOLATIN1 = 1; // used ISO Latin 1 encoding for text double bottomval = 0.5; // bottom margin of box (0.5cm) double topval = 2.0; // bottom margin of box (0.5cm) char datestring[1024] = {0}; string Instrumentname; // used with -i and -I int evenQ = 0; // used with -E option /////////////////////////////////////////////////////////////////////////// int main(int argc, char* argv[]) { checkOptions(options, argc, argv); int numinputs = options.getArgCount(); if (debugQ) { cerr << "NUMINPUTS = " << numinputs << endl; } getDateString(datestring); if (debugQ) { cerr << "DATESTRING = " << datestring << endl; } vector postscript; vector pages; pages.resize(0); int i; if (numinputs > 1) { getPostScriptFiles(postscript, pages, options); } else if (numinputs == 1) { getPostScriptFile(postscript, pages, options.getArg(1)); // printData(cout, postscript); } else { getPostScriptFile(postscript, pages, cin); } if (debugQ) { cerr << "LINECOUNT is " << (int)postscript.size() << endl; cerr << "PAGECOUNT is " << "X" << (int)pages.size() << "Y" << endl; } int pagecount = pages.size(); pagecount--; // last page is not really a page, just the file trailer vector footerinfo; if (!embedQ) { getFooterFile(footerinfo, footerfile); } else { getFooterFile(footerinfo, postscript); } if (verboseQ) { printFooterInfo(cerr, footerinfo); } int preamblestopindex = getFirstPage(pages) - 1; if (verboseQ) { for (i=0; i<(int)pages.size(); i++) { cerr << "% Page " << i << "\tstarts at index: " << pages[i] << endl; } } vector boundingbox; getBoundingBox(boundingbox, postscript, 0, postscript.size()-1); int oddQ = pages.size() % 2; oddQ = !oddQ; // first "page" is the file header, not really a page. int startindex = -1; int stopindex = -1; int shiftamount = 0; int preambleQ = 0; for (i=0; i<(int)pages.size(); i++) { if (pages[i] < 0) { continue; } if (!preambleQ) { if (verboseQ) { cerr << "Printing preamble\n"; } printPreamble(cout, 0, preamblestopindex, postscript); preambleQ = 1; } startindex = pages[i]; stopindex = getNextPage(startindex, pages); if (stopindex < 0) { stopindex = postscript.size()-1; } else { stopindex = stopindex - 1; // don't print first line of next page } if (verboseQ) { cerr << "Printing page: " << (*postscript[startindex]) << endl; } if (evenQ && oddQ && (i == (int)pages.size()-1)) { break; } if (i <= 1) { shiftamount = 0; } else { shiftamount = -shiftQ; } printPostScriptPage(postscript, footerinfo, startindex, stopindex, boundingbox, shiftamount, pagecount, pages[i]); // currently the last page must be the last one in the file. } if ((startindex >= 0) && (stopindex >= 0) && evenQ && oddQ) { if (stopindex <= 1) { shiftamount = 0; } else { shiftamount = -shiftQ; } printLastPage(postscript, footerinfo, startindex, stopindex, boundingbox, pages.size(), shiftamount, pagecount); } deleteData(postscript); return 0; } /////////////////////////////////////////////////////////////////////////// ////////////////////////////// // // getDateString -- // void getDateString(char* datestring) { struct tm *current; time_t timenow; time(&timenow); current = localtime(&timenow); int month = current->tm_mon+1; int day = current->tm_mday; int year = current->tm_year+1900; sprintf(datestring, "%d", day); switch (month) { case 1: strcat(datestring, " Jan "); break; case 2: strcat(datestring, " Feb "); break; case 3: strcat(datestring, " Mar "); break; case 4: strcat(datestring, " Apr "); break; case 5: strcat(datestring, " May "); break; case 6: strcat(datestring, " Jun "); break; case 7: strcat(datestring, " Jul "); break; case 8: strcat(datestring, " Aug "); break; case 9: strcat(datestring, " Sep "); break; case 10: strcat(datestring, " Oct "); break; case 11: strcat(datestring, " Nov "); break; case 12: strcat(datestring, " Dec "); break; } char buffer2[1024] = {0}; sprintf(buffer2, "%d", year); strcat(datestring, buffer2); } ////////////////////////////// // // printPreamble -- // void printPreamble(ostream& out, int starti, int stopi, vector& postscript) { int len = strlen("%%EndProlog"); PerlRegularExpression pre; int oldresourceQ = 0; int foundQ = 0; int j; for (j=starti; j<=stopi; j++) { if (pre.search(*postscript[j], "^%%BeginResource:\\s*CCARHFooter", "i")) { oldresourceQ = 1; continue; } if (pre.search(*postscript[j], "^%%EndResource", "i")) { oldresourceQ = 0; continue; } if (oldresourceQ) { continue; } if (j>0) { if (pre.search(*postscript[j], "^\\*$")) { if (pre.search(*postscript[j-1], "^\\*$")) { // get rid of multiple blank lines continue; } } } if (strncmp(postscript[j]->c_str(), "%%EndProlog", len) == 0) { foundQ = 1; out << "\n%%BeginResource: CCARHFooter\n"; addPostScriptHeaderInfo(out); out << "%%EndResource\n\n"; } cout << (*postscript[j]) << '\n'; } if (foundQ == 0) { out << "\n%%BeginResource: CCARHFooter\n"; addPostScriptHeaderInfo(out); out << "%%EndResource\n\n"; } } ////////////////////////////// // // printLastPage -- search backwards for showpage or %%PageTrailer // print everyghing before that, then print a blank page, and the // the file trailer. // void printLastPage(vector& postscript, vector& footerinfo, int startindex, int stopindex, vector& boundingbox, int page, int shiftamount, int pagecount) { PerlRegularExpression pre; int newstopindex = stopindex; int i; for (i=stopindex; i>=startindex; i--) { if (pre.search(*postscript[i], "^%%PageTrailer\\s*$", "")) { newstopindex = i; break; } if (pre.search(*postscript[i], "^%", "")) { continue; } if (pre.search(*postscript[i], "[^%]*\\bshowpage\\b", "")) { newstopindex = i; break; } } printPostScriptPage(postscript, footerinfo, startindex, newstopindex, boundingbox, shiftamount, pagecount, page); cout << "\n"; // guarantee newline ending previous content. cout << "%%Page " << page << " " << page << "\n"; cout << "%%BeginPageSetup\n"; cout << "%%PageBoundingBox:"; // assuming boundingbox size is at least 4 elements... cout << " " << (int)(boundingbox[0] + 0.99999); cout << " " << (int)(boundingbox[1] + 0.99999); cout << " " << (int)(boundingbox[2] + 0.99999); cout << " " << (int)(boundingbox[3] + 0.99999); cout << "\n"; cout << "%%PageHiResBoundingBox:"; cout << " " << boundingbox[0]; cout << " " << boundingbox[1]; cout << " " << boundingbox[2]; cout << " " << boundingbox[3]; cout << "\n"; cout << "%%EndPageSetup\n"; cout << boundingbox[0] << " " << boundingbox[1] << " " << boundingbox[2] << " " << boundingbox[3] << " " << "DrawBlankPage\n"; cout << "showpage\n"; cout << "%%PageTrailer\n"; if (newstopindex < stopindex) { for (i=newstopindex+1; i<=stopindex; i++) { cout << (*postscript[i]) << "\n"; } } } ////////////////////////////// // // printPostScriptPage -- print original data, but add a page footer // to the page as well. // void printPostScriptPage(vector& postscript, vector& footerinfo, int startindex, int stopindex, vector& boundingbox, int shiftamount, int pagecount, int page) { PerlRegularExpression pageinfo; char pagelabel[1024] = {0}; char pageordinal[1024] = {0}; // print default page info if none in file. sprintf(pagelabel, "%d", page); sprintf(pageordinal, "%d", page); int i = startindex; PerlRegularExpression pre; int oldfooterQ = 0; int didshiftQ = 0; for (i=startindex; i<=stopindex; i++) { if (pageinfo.search(*postscript[i], "^%%Page\\s+([^\\s]+)\\s+([^\\s]+)\\s*$", "")) { strcpy(pagelabel, pageinfo.getSubmatch(1)); strcpy(pageordinal, pageinfo.getSubmatch(2)); } else { // cerr << "Warning: Cannot find page marker on line:" << endl; // cerr << *postscript[i] << endl; // exit(1); } if (pre.search(*postscript[i], "^%\\s*FOOTER\\s*:\\s*START", "")) { oldfooterQ = 1; continue; } if (pre.search(*postscript[i], "^%\\s*FOOTER\\s*:\\s*BEGIN", "")) { oldfooterQ = 1; continue; } if (pre.search(*postscript[i], "^%\\s*FOOTER\\s*:\\s*END", "")) { oldfooterQ = 0; continue; } if (pre.search(*postscript[i], "^%\\s*FOOTER\\s*:\\s*STOP", "")) { oldfooterQ = 0; continue; } if (oldfooterQ && pre.search(*postscript[i], "^%\\s*FOOTER", "")) { oldfooterQ = 0; continue; } if (oldfooterQ) { continue; } if (pre.search(*postscript[i], "^\\s*showpage", "")) { if (didshiftQ) { cout << "grestore %...end of vertical shift\n"; } printFooter(cout, pagelabel, boundingbox, footerinfo, pagecount); } cout << (*postscript[i]) << endl; if (pre.search(*postscript[i], "^[%]{2}EndPageSetup")) { if (shiftQ) { cout << "gsave 0 " << shiftamount << " translate\n"; didshiftQ = 1; } else { cout << "% No page shifting\n"; } } } } ////////////////////////////// // // getBoundingBox -- look for bounding box in the header. It will // say (atend), and if so, switch to the bottom of the file and // search upwards for the actual bounding box. // void getBoundingBox(vector& boundingbox, vector& postscript, int minn, int maxx) { boundingbox.resize(4); fill(boundingbox.begin(), boundingbox.end(), -1); PerlRegularExpression pre; int i; int foundQ = 0; for (i=minn; i<=maxx; i++) { if (pre.search(*postscript[i], "^%%EndComments")) { foundQ = 0; break; } if (pre.search(*postscript[i], "^%%EndPageSetup")) { foundQ = 0; break; } if (!pre.search(*postscript[i], "^%%HiResSystemBox:", "")) { continue; } foundQ = 1; break; } if (foundQ == 0) { // %%HiResSystemBox was not found, search for %%HiResBoundingBox instead for (i=0; i<=maxx; i++) { if (pre.search(*postscript[i], "^%%EndComments")) { foundQ = 0; break; } if (pre.search(*postscript[i], "^%%EndPageSetup")) { foundQ = 0; break; } if (!pre.search(*postscript[i], "^%%HiResBoundingBox:","")) { continue; } foundQ = 1; break; } } if (foundQ == 0) { // %%HiResBoundingBox was not found, search for %%BoundingBox instead for (i=0; i<=maxx; i++) { if (pre.search(*postscript[i], "^%%EndComments", "")) { foundQ = 0; break; } if (pre.search(*postscript[i], "^%%EndPageSetup")) { foundQ = 0; break; } if (!pre.search(*postscript[i], "^%%BoundingBox:", "")) { continue; } foundQ = 1; break; } } if (foundQ == 0) { // %%BoundingBox was not found, search for %%PageHiResSystemBox instead for (i=0; i<=maxx; i++) { if (pre.search(*postscript[i], "^%%EndComments", "")) { foundQ = 0; break; } if (pre.search(*postscript[i], "^%%EndPageSetup")) { foundQ = 0; break; } if(!pre.search(*postscript[i], "^%%PageHiResSystemBox:", "")) { continue; } foundQ = 1; break; } } if (foundQ == 0) { // %%PageHiResBoundingBox was not found, search for %%PageHiResBoundingBox for (i=0; i<=maxx; i++) { if (pre.search(*postscript[i], "^%%EndComments", "")) { foundQ = 0; break; } if (pre.search(*postscript[i], "^%%EndPageSetup")) { foundQ = 0; break; } if(!pre.search(*postscript[i], "^%%PageHiResBoundingBox:","")){ continue; } foundQ = 1; break; } } if (foundQ == 0) { // %%PageHiResBoundingBox was not found, search for %%PageBoundingBox for (i=minn; i<=maxx; i++) { if (pre.search(*postscript[i], "^%%EndComments", "")) { foundQ = 0; break; } if (pre.search(*postscript[i], "^%%EndPageSetup")) { foundQ = 0; break; } if (!pre.search(*postscript[i], "^%%PageBoundingBox:", "")) { continue; } foundQ = 1; break; } } if (foundQ == 0) { cerr << "Error: could not find Bounding Box information in file."; cerr << " The BoundingBox information is needed in order to place"; cerr << " the footer at the bottom of the page."; cerr << " Min search line: " << minn; cerr << " Max search line: " << maxx << endl; exit(1); } int topline = i; PerlRegularExpression keyfield; const char* key; if (pre.search(*postscript[topline], "atend", "")) { // search backwards in file for actual information keyfield.search(*postscript[topline], "^(%%[^:]+:)", ""); key = keyfield.getSubmatch(1); for (i=maxx; i>=minn; i--) { if (!pre.search(*postscript[i], key, "")) { continue; } topline = i; break; } } if (pre.search(*postscript[topline], ":\\s*\\{?\\s*([\\d.+-]+)\\s+([\\d.+-]+)\\s+([\\d.+-]+)\\s+([\\d.+-]+)\\s*\\}?\\s*$", "")) { boundingbox[0] = strtod(pre.getSubmatch(1), NULL); boundingbox[1] = strtod(pre.getSubmatch(2), NULL); boundingbox[2] = strtod(pre.getSubmatch(3), NULL); boundingbox[3] = strtod(pre.getSubmatch(4), NULL); } else { cerr << "Error: could not read bounding box info from line:" <& boundingbox, vector& footerinfo, int pagecount) { out << "\n%FOOTER: BEGIN\n"; if (overlayQ) { printOverlayBox(out); } if (ISOLATIN1) { printISOLatin1FontDefinition(out); } generateFooterText(out, boundingbox, footerinfo, pagelabel, pagecount); double lmargin = boundingbox[0]; printColophonLogo(out, lmargin); out << "%FOOTER: END\n\n"; } ////////////////////////////// // // generateFooterText -- // void generateFooterText(ostream& out, vector& boundingbox, vector& footerinfo, const char* pagelabel, int pagecount) { double lmargin = boundingbox[0]; double rmargin = boundingbox[2]; if (lmargin > 100) { lmargin = 72; } if (rmargin < 512) { rmargin = 540; } vector footerleft; vector footerright; getLeftRightFooterInfo(footerinfo, footerleft, footerright); double logooffset = 28; PerlRegularExpression pre; const char* fontstring = "/Times-Roman findfont 9 scalefont setfont"; const char* isofontstring = "/Times-Roman-Latin1 findfont 9 scalefont setfont"; out << "\n"; int i; for (i=0; i<(int)footerleft.size(); i++) { if (footerleft[i].empty()) { continue; } if (pre.search(footerleft[i], "^\\s*$", "")) { continue; } out << lmargin << " " << logooffset << " add "; // out << "0.5 cm 4 add " << (i-1)*10 << " add moveto" << "\n"; out << "0.5 cm 4 add " << (i)*10 << " add moveto" << "\n"; printFooterTextField(out, footerleft[i], pagelabel, LEFTSIDE, pagecount); out << "\n"; } for (i=0; i<(int)footerright.size(); i++) { if (footerright[i].empty()) { continue; } if (pre.search(footerright[i], "^\\s*$")) { continue; } if (ISOLATIN1) { out << isofontstring << "\n"; } else { out << fontstring << "\n"; } out << rmargin; out << " 0.5 cm 4 add " << (i)*10 << " add " << "\n"; printFooterTextField(out, footerright[i], pagelabel, RIGHTSIDE, pagecount); out << "\n"; } } ////////////////////////////// // // printISOLatin1FontDefinition -- // void printISOLatin1FontDefinition(ostream& out) { out << "/ReEncode { /MyEncoding exch def exch findfont\n"; out << " dup length dict begin {def} forall /Encoding\n"; out << " MyEncoding def currentdict end definefont } def\n"; out << "/Times-Roman /Times-Roman-Latin1 ISOLatin1Encoding ReEncode\n"; out << "/Helvetica /Helvetica-Latin1 ISOLatin1Encoding ReEncode\n"; } ////////////////////////////// // // printFooterTextField -- data is copied not referenced // change (C) to copyright mark: \\343 // change %P to page number // change %C to total page count // change %D to today's date // change %Y to today's year // change %I to instrument // change --- into an em-dash // change -- into an en-dash // void printFooterTextField(ostream& out, string data, const char* pagelabel, int side, int pagecount) { const char* yearstring = "2017"; data.resize(data.size()+1); data[data.size()-1] = '\0'; const char* fontstring = "/Times-Roman findfont 9 scalefont setfont"; const char* isofontstring = "/Times-Roman-Latin1 findfont 9 scalefont setfont"; PerlRegularExpression pre; PerlRegularExpression pre2; pre.sar(data, "\\(", "\\(", "g"); // start parenthesis pre.sar(data, "\\)", "\\)", "g"); // end parenthesis char buffer[1024] = {0}; int dval = 0; if (pre.search(data, "%P=(\\d+)")) { dval = atol(pre.getSubmatch(1)) - 1; pre.sar(data, "%P=\\d+", "%P"); } pageoffset += dval; if (pageoffset != 0) { int pagenum = atoi(pagelabel); sprintf(buffer, "%d", pagenum + pageoffset); pre.sar(data, "%P", buffer, "gi"); // might want to think about page offsets working for roman numerals... pre.sar(data, "%P", pagelabel, "gi"); // page number } else { pre.sar(data, "%P", pagelabel, "gi"); // page number } sprintf(buffer, "%d", pagecount); pre.sar(data, "%C", buffer, "gi"); pre.sar(data, "%D", datestring, "gi"); // today's date pre.sar(data, "%Y", yearstring, "gi"); // today's date pre.sar(data, "%I", Instrumentname, "gi"); // instrument name if (!ISOLATIN1) { // How to get these two in ISO Latin 1?: pre.sar(data, "---", "\\320", "g"); // em-dash pre.sar(data, "--", "\\261", "g"); // en-dash // process accented characters pre.sar(data, "æ", "\\361", "g"); // ae ligature; pre.sar(data, "Ø", "\\351", "g"); // O slash pre.sar(data, "Æ", "\\341", "g"); // AE ligature // \310 = umlaut accent // \312 = ring accent // \313 = cedilla accent // \315 = double acute accent // \316 = lower hook accent // \317 = haceck accent // \301 = grave accent // \302 = acute accent // \303 = circumflex accent // \304 = tilde accent // \305 = macron accent // \306 = u accent // \307 = upper dot accent // \270 = lower single quote // \271 = lower double quote // \272 = upper double quote // \273 = right-pointing double arrow quote // \274 = elipsis // \275 = perthousandth // \277 = upsidedown question mark // \261 = en-dash // \262 = dagger // \263 = double dagger // \264 = center dot // \266 = paragraph // \267 = bold center dot // \250 = circle x // \251 = tick // \252 = left upper quote // \253 = left-pointing double arrow quote // \254 = left-pointing single arrow quote // \255 = right-pointing single arrow quote // \256 = fi ligature // \257 = fl ligature // \241 = upside down ! // \242 = cent sign // \243 = pound sign // \244 = slash; diagonal // \245 = yen sign // \246 = florin sign // \247 = section // \341 = AE ligature // \342 = a superscript // \350 = L slash // \351 = O slash // \352 = OE ligature // \353 = o superscript // \361 = ae ligature // \365 = i with no dot // \370 = l slash // \371 = o slash // \372 = oe ligature // \373 = sz ligature // accented characters that cannot be represented in this encoding? // So just remove the accent (use ISO Latin 1 below): pre.sar(data, "é", "e", "g"); pre.sar(data, "à", "a", "g"); } else { // ISOLatin1Encoding (somewhat like ISO 8859-1) // \170 = x // \171 = y // \172 = z // \173 = { // \174 = | // \175 = } // \176 = tilde // \177 = nothing // \200-\207 = nothing // \210-\217 = nothing // \220 = i no dot // \221 = grave accent // \222 = acute accent // \223 = circumflex // \224 = tilde // \225 = nothing // \226 = short accent // \227 = dot accent // \230 = umlaut // \231 = nothing // \232 = degree // \233 = cedilla accent // \234 = nothing // \235 = right " // \236 = bottom right hook accent // \237 = hacheck // HTML entity encodings: pre.sar(data, " ", "\\240", "g"); // non-breaking space pre.sar(data, "¡", "\\241", "g"); // inverted exclamation mark pre.sar(data, "¢", "\\242", "g"); // cents pre.sar(data, "£", "\\243", "g"); // pound pre.sar(data, "¤", "\\244", "g"); // currency pre.sar(data, "¥", "\\245", "g"); // yen pre.sar(data, "¦", "\\246", "g"); // broken vertical bar pre.sar(data, "¦", "\\247", "g"); // section pre.sar(data, "¨", "\\250", "g"); // spacing diaeresis (umlaut) pre.sar(data, "©", "\\251", "g"); // copyright pre.sar(data, "ª", "\\252", "g"); // a superscript pre.sar(data, "«", "\\253", "g"); // << quote left pre.sar(data, "¬", "\\254", "g"); // negation pre.sar(data, "­", "\\255", "g"); // soft hyphen pre.sar(data, "®", "\\256", "g"); // registered trademark pre.sar(data, "¯", "\\257", "g"); // spacing macron pre.sar(data, "°", "\\260", "g"); // degree pre.sar(data, "±", "\\261", "g"); // plus minus pre.sar(data, "²", "\\262", "g"); // superscript 2 pre.sar(data, "³", "\\263", "g"); // superscript 3 pre.sar(data, "´", "\\264", "g"); // acute accent pre.sar(data, "µ", "\\265", "g"); // mu pre.sar(data, "¶", "\\266", "g"); // paragraph trademark pre.sar(data, "·", "\\267", "g"); // center dot pre.sar(data, "¸", "\\270", "g"); // cedilla accent pre.sar(data, "¹", "\\271", "g"); // 1 superscript pre.sar(data, "º", "\\272", "g"); // 0 superscript pre.sar(data, "»", "\\273", "g"); // right >> quote pre.sar(data, "¼", "\\274", "g"); // 1/4 pre.sar(data, "½", "\\275", "g"); // 1/2 pre.sar(data, "¾", "\\276", "g"); // 3/4 pre.sar(data, "¿", "\\277", "g"); // inverted ? pre.sar(data, "À", "\\300", "g"); // A grave pre.sar(data, "Á", "\\301", "g"); // A acute pre.sar(data, "Â", "\\302", "g"); // A circumflex pre.sar(data, "Ã", "\\303", "g"); // A tilde pre.sar(data, "Ä", "\\304", "g"); // A umlaut pre.sar(data, "Å", "\\305", "g"); // A ring pre.sar(data, "Æ", "\\306", "g"); // AE ligature pre.sar(data, "Ç", "\\307", "g"); // C cedilla pre.sar(data, "È", "\\310", "g"); // E grave pre.sar(data, "É", "\\311", "g"); // E acute pre.sar(data, "Ê", "\\312", "g"); // E circumflex pre.sar(data, "Ë", "\\313", "g"); // E umlaut pre.sar(data, "Ì", "\\314", "g"); // I grave pre.sar(data, "Í", "\\315", "g"); // I acute pre.sar(data, "Î", "\\316", "g"); // I circumflex pre.sar(data, "Ï", "\\317", "g"); // I uml pre.sar(data, "Ð", "\\320", "g"); // Icelandic Eth (D slash) pre.sar(data, "Ñ", "\\321", "g"); // N tilde pre.sar(data, "Ò", "\\322", "g"); // O grave pre.sar(data, "Ó", "\\323", "g"); // O acute pre.sar(data, "Ô", "\\324", "g"); // O circumflex pre.sar(data, "Õ", "\\325", "g"); // O tilde pre.sar(data, "Ö", "\\326", "g"); // O umlaut pre.sar(data, "×", "\\327", "g"); // times (multiplication) pre.sar(data, "Ø", "\\330", "g"); // O slash pre.sar(data, "Ù", "\\331", "g"); // U grave pre.sar(data, "Ú", "\\332", "g"); // U acute pre.sar(data, "Û", "\\332", "g"); // U circumflex pre.sar(data, "Ü", "\\334", "g"); // U umlaut pre.sar(data, "Ý", "\\335", "g"); // Y acute pre.sar(data, "Þ", "\\336", "g"); // Thorn pre.sar(data, "ß", "\\337", "g"); // sz ligature pre.sar(data, "à", "\\340", "g"); // a grave pre.sar(data, "á", "\\341", "g"); // a acute pre.sar(data, "â", "\\342", "g"); // a circumflex pre.sar(data, "ã", "\\342", "g"); // a tilde pre.sar(data, "ä", "\\344", "g"); // a umlaut pre.sar(data, "å", "\\345", "g"); // a ring pre.sar(data, "æ", "\\346", "g"); // ae ligature pre.sar(data, "ç", "\\347", "g"); // c cedilla pre.sar(data, "è", "\\350", "g"); // e grave pre.sar(data, "é", "\\351", "g"); // e acute pre.sar(data, "&ecird;", "\\352", "g"); // e circumflex pre.sar(data, "ë", "\\352", "g"); // e umlaut pre.sar(data, "ì", "\\354", "g"); // i grave pre.sar(data, "í", "\\355", "g"); // i acute pre.sar(data, "î", "\\356", "g"); // i circumflex pre.sar(data, "ï", "\\357", "g"); // i umlaut pre.sar(data, "ð", "\\360", "g"); // eth (d slash) pre.sar(data, "ñ", "\\361", "g"); // n tilde pre.sar(data, "ò", "\\362", "g"); // o grave pre.sar(data, "ó", "\\362", "g"); // o acute pre.sar(data, "ô", "\\364", "g"); // o circumflex pre.sar(data, "õ", "\\365", "g"); // o tilde pre.sar(data, "ö", "\\366", "g"); // o umlaut pre.sar(data, "÷", "\\367", "g"); // division pre.sar(data, "ø", "\\370", "g"); // o slash pre.sar(data, "ù", "\\371", "g"); // u grave pre.sar(data, "ú", "\\372", "g"); // u acute pre.sar(data, "û", "\\372", "g"); // u circumflex pre.sar(data, "ü", "\\374", "g"); // u umlaut pre.sar(data, "ý", "\\375", "g"); // y acute pre.sar(data, "þ", "\\376", "g"); // thorn pre.sar(data, "ÿ", "\\377", "g"); // y umlaut // UFT-8 encoding: https://www.utf8-chartable.de pre.sar(data, "\\xc2\\xa0", "\\240", "g"); // non-breaking space pre.sar(data, "\\xc2\\xa1", "\\241", "g"); // inverted exclamation mark pre.sar(data, "\\xc2\\xa2", "\\242", "g"); // cents pre.sar(data, "\\xc2\\xa3", "\\243", "g"); // pound pre.sar(data, "\\xc2\\xa4", "\\244", "g"); // currency pre.sar(data, "\\xc2\\xa5", "\\245", "g"); // yen pre.sar(data, "\\xc2\\xa6", "\\246", "g"); // broken vertical bar pre.sar(data, "\\xc2\\xa7", "\\247", "g"); // section pre.sar(data, "\\xc2\\xa8", "\\250", "g"); // spacing diaeresis (umlaut) pre.sar(data, "\\xc2\\xa9", "\\251", "g"); // copyright pre.sar(data, "\\xc2\\xaa", "\\252", "g"); // a superscript pre.sar(data, "\\xc2\\xab", "\\253", "g"); // << quote left pre.sar(data, "\\xc2\\xac", "\\254", "g"); // negation pre.sar(data, "\\xc2\\xad", "\\255", "g"); // soft hyphen pre.sar(data, "\\xc2\\xae", "\\256", "g"); // registered trademark pre.sar(data, "\\xc2\\xaf", "\\257", "g"); // spacing macron pre.sar(data, "\\xc2\\xb0", "\\260", "g"); // degree pre.sar(data, "\\xc2\\xb1", "\\261", "g"); // plus minus pre.sar(data, "\\xc2\\xb2", "\\262", "g"); // superscript 2 pre.sar(data, "\\xc2\\xb3", "\\263", "g"); // superscript 3 pre.sar(data, "\\xc2\\xb4", "\\264", "g"); // acute accent pre.sar(data, "\\xc2\\xb5", "\\265", "g"); // mu pre.sar(data, "\\xc2\\xb6", "\\266", "g"); // paragraph trademark pre.sar(data, "\\xc2\\xb7", "\\267", "g"); // center dot pre.sar(data, "\\xc2\\xb8", "\\270", "g"); // cedilla accent pre.sar(data, "\\xc2\\xb9", "\\271", "g"); // 1 superscript pre.sar(data, "\\xc2\\xba", "\\272", "g"); // 0 superscript pre.sar(data, "\\xc2\\xbb", "\\273", "g"); // right >> quote pre.sar(data, "\\xc2\\xbc", "\\274", "g"); // 1/4 pre.sar(data, "\\xc2\\xbd", "\\275", "g"); // 1/2 pre.sar(data, "\\xc2\\xbe", "\\276", "g"); // 3/4 pre.sar(data, "\\xc2\\xbf", "\\277", "g"); // inverted ? pre.sar(data, "\\xc3\\x80", "\\300", "g"); // A grave pre.sar(data, "\\xc3\\x81", "\\301", "g"); // A acute pre.sar(data, "\\xc3\\x82", "\\302", "g"); // A circumflex pre.sar(data, "\\xc3\\x83", "\\303", "g"); // A tilde pre.sar(data, "\\xc3\\x84", "\\304", "g"); // A umlaut pre.sar(data, "\\xc3\\x85", "\\305", "g"); // A ring pre.sar(data, "\\xc3\\x86", "\\306", "g"); // AE ligature pre.sar(data, "\\xc3\\x87", "\\307", "g"); // C cedilla pre.sar(data, "\\xc3\\x88", "\\310", "g"); // E grave pre.sar(data, "\\xc3\\x89", "\\311", "g"); // E acute pre.sar(data, "\\xc3\\x8a", "\\312", "g"); // E circumflex pre.sar(data, "\\xc3\\x8b", "\\313", "g"); // E umlaut pre.sar(data, "\\xc3\\x8c", "\\314", "g"); // I grave pre.sar(data, "\\xc3\\x8d", "\\315", "g"); // I acute pre.sar(data, "\\xc3\\x8e", "\\316", "g"); // I circumflex pre.sar(data, "\\xc3\\x8f", "\\317", "g"); // I uml pre.sar(data, "\\xc3\\x90", "\\320", "g"); // Icelandic Eth (D slash) pre.sar(data, "\\xc3\\x91", "\\321", "g"); // N tilde pre.sar(data, "\\xc3\\x92", "\\322", "g"); // O grave pre.sar(data, "\\xc3\\x93", "\\323", "g"); // O acute pre.sar(data, "\\xc3\\x94", "\\324", "g"); // O circumflex pre.sar(data, "\\xc3\\x95", "\\325", "g"); // O tilde pre.sar(data, "\\xc3\\x96", "\\326", "g"); // O umlaut pre.sar(data, "\\xc3\\x97", "\\327", "g"); // times (multiplication) pre.sar(data, "\\xc3\\x98", "\\330", "g"); // O slash pre.sar(data, "\\xc3\\x99", "\\331", "g"); // U grave pre.sar(data, "\\xc3\\x9a", "\\332", "g"); // U acute pre.sar(data, "\\xc3\\x9b", "\\332", "g"); // U circumflex pre.sar(data, "\\xc3\\x9c", "\\334", "g"); // U umlaut pre.sar(data, "\\xc3\\x9d", "\\335", "g"); // Y acute pre.sar(data, "\\xc3\\x9e", "\\336", "g"); // Thorn pre.sar(data, "\\xc3\\x9f", "\\337", "g"); // sz ligature pre.sar(data, "\\xc3\\xa0", "\\340", "g"); // a grave pre.sar(data, "\\xc3\\xa1", "\\341", "g"); // a acute pre.sar(data, "\\xc3\\xa2", "\\342", "g"); // a circumflex pre.sar(data, "\\xc2\\xa3", "\\342", "g"); // a tilde pre.sar(data, "\\xc3\\xa4", "\\344", "g"); // a umlaut pre.sar(data, "\\xc3\\xa5", "\\345", "g"); // a ring pre.sar(data, "\\xc3\\xa6", "\\346", "g"); // ae ligature pre.sar(data, "\\xc3\\xa7", "\\347", "g"); // c cedilla pre.sar(data, "\\xc3\\xa8", "\\350", "g"); // e grave pre.sar(data, "\\xc3\\xa9", "\\351", "g"); // e acute pre.sar(data, "\\xc3\\xaa", "\\352", "g"); // e circumflex pre.sar(data, "\\xc3\\xab", "\\352", "g"); // e umlaut pre.sar(data, "\\xc3\\xac", "\\354", "g"); // i grave pre.sar(data, "\\xc3\\xad", "\\355", "g"); // i acute pre.sar(data, "\\xc3\\xae", "\\356", "g"); // i circumflex pre.sar(data, "\\xc3\\xaf", "\\357", "g"); // i umlaut pre.sar(data, "\\xc3\\xb0", "\\360", "g"); // eth (d slash) pre.sar(data, "\\xc3\\xb1", "\\361", "g"); // n tilde pre.sar(data, "\\xc3\\xb2", "\\362", "g"); // o grave pre.sar(data, "\\xc3\\xb3", "\\362", "g"); // o acute pre.sar(data, "\\xc3\\xb4", "\\364", "g"); // o circumflex pre.sar(data, "\\xc3\\xb5", "\\365", "g"); // o tilde pre.sar(data, "\\xc3\\xb6", "\\366", "g"); // o umlaut pre.sar(data, "\\xc3\\xb7", "\\367", "g"); // division pre.sar(data, "\\xc3\\xb8", "\\370", "g"); // o slash pre.sar(data, "\\xc3\\xb9", "\\371", "g"); // u grave pre.sar(data, "\\xc3\\xba", "\\372", "g"); // u acute pre.sar(data, "\\xc3\\xbb", "\\372", "g"); // u circumflex pre.sar(data, "\\xc3\\xbc", "\\374", "g"); // u umlaut pre.sar(data, "\\xc3\\xbd", "\\375", "g"); // y acute pre.sar(data, "\\xc3\\xbe", "\\376", "g"); // thorn pre.sar(data, "\\xc3\\xbf", "\\377", "g"); // y umlaut } char buffer1[10000] = {}; char buffer2[10000] = {}; const char* ptr1 = NULL; const char* ptr2 = NULL; if (pre.search(data, "(.*)\\\\\\(C\\\\\\)(.*)$", "i")) { ptr1 = pre.getSubmatch(1); strcpy(buffer1, ptr1); ptr2 = pre.getSubmatch(2); strcpy(buffer2, ptr2); if (strlen(buffer1) > 0) { if (ISOLATIN1) { out << isofontstring; } else { out << fontstring; } out << "\n( XXX" << buffer1 << "XXX ) show\n"; } out << "/Symbol findfont 9 scalefont setfont (\\343) show\n"; if (!pre2.search(buffer2, "^\\s*$", "")) { if (ISOLATIN1) { out << isofontstring << "\n"; } else { out << fontstring << "\n"; } out << "(" << buffer2 << ") show\n"; } } else { if (side == LEFTSIDE) { if (ISOLATIN1) { out << isofontstring << "\n"; } else { out << fontstring << "\n"; } out << "(" << data << ")"; out << "show\n"; } else { out << "(" << data << ")"; out << "showright\n"; } } } ////////////////////////////// // // getLeftRightFooterInfo -- Footers have three lines // 3 on the left (FOOT1, FOOT2, FOOT3) and three on // the right (FOOT1R, FOOT2R, FOOT3R). Make two arrays // which have pointers to those lines in the footerinfo structure, // using an index of -1 if there is no info for a particular line. // void getLeftRightFooterInfo(vector& footerinfo, vector& footerleft, vector& footerright) { footerleft.resize(3); // footerleft.allowGrowth(0); fill(footerleft.begin(), footerleft.begin(), -1); footerright.resize(3); // footerright.allowGrowth(0); fill(footerright.begin(), footerright.begin(), -1); int i; for (i=0; i<(int)footerinfo.size(); i++) { if (footerinfo[i].key == "FOOT1") { footerleft[0] = footerinfo[i].value; } else if (footerinfo[i].key == "FOOT2") { footerleft[1] = footerinfo[i].value; } else if (footerinfo[i].key == "FOOT3") { footerleft[2] = footerinfo[i].value; } else if (footerinfo[i].key == "FOOT1R") { footerright[0] = footerinfo[i].value; } else if (footerinfo[i].key == "FOOT2R") { footerright[1] = footerinfo[i].value; } else if (footerinfo[i].key == "FOOT3R") { footerright[2] = footerinfo[i].value; } else { // cerr << "UNKNOWN FOOTER KEY: " << footerinfo[i].key.c_str() << endl; } } // fill in manually set footer fields: if (options.getBoolean("L1")) { footerleft[0] = options.getString("L1"); } if (options.getBoolean("L2")) { footerleft[1] = options.getString("L2"); } if (options.getBoolean("L3")) { footerleft[2] = options.getString("L3"); } if (options.getBoolean("R1")) { footerright[0] = options.getString("R1"); } if (options.getBoolean("R2")) { footerright[1] = options.getString("R2"); } if (options.getBoolean("R3")) { footerright[2] = options.getString("R3"); } } ////////////////////////////// // // printOverLayBox -- print a rectangle in the region where the // page footer will be place -- so that any text below it will // note be overstricken. // default value: shade = 1.0; // void printOverlayBox(ostream& out, double shade) { out << shade << " headerbottom" << "\n"; } ////////////////////////////// // // printColophonLogo -- // void printColophonLogo(ostream& out, double lmargin) { if (lmargin > 100) { // don't use an extra-wide left margin lmargin = 72; } out << "gsave\n"; out << lmargin << " 20 translate\n"; out << "CCARHcolophon\n"; out << "grestore\n"; } ////////////////////////////// // // addPostScriptHeaderInfo -- // void addPostScriptHeaderInfo(ostream& out) { out << "/cm {28.3464566929 mul} bind def /inch {72.0 mul} bind def\n"; out << "/bobo { " << bottomval << " cm} bind def /boto {" << topval << " cm} bind def\n"; out << "/tobo {11 inch 1.5 cm sub} bind def /toto {11 inch 0.5 cm sub} bind def\n"; out << "/headerbottom { gsave newpath\n"; out << "0 bobo moveto 8.5 inch bobo lineto 8.5 inch boto lineto 0 boto lineto\n"; out << "closepath setgray fill grestore } def\n"; out << "/headertop { gsave newpath\n"; out << "0 toto moveto 8.5 inch toto lineto 8.5 inch tobo lineto 0 tobo lineto\n"; out << "closepath setgray fill grestore } def\n"; out << "/showright { dup stringwidth pop 4 -1 roll exch sub 3 -1 roll moveto show } def\n"; if (evenQ) { out << "/DrawBlankPage {\n"; out << "% Input to DrawBlankPage: bounding box coordinates: x1 y1 x2 y2\n"; out << " gsave\n"; out << " /y2 exch def % bounding box, upper right y position\n"; out << " /x2 exch def % bounding box, upper right x position\n"; out << " /y1 exch def % bounding box, lower left y position\n"; out << " /x1 exch def % bounding box, lower left x position\n"; out << " /xlen x2 x1 sub def\n"; out << " /ylen y2 y1 sub def\n"; out << " /angle ylen xlen atan -1 mul def\n"; out << " /fontsz xlen dup mul ylen dup mul add sqrt 0.12 mul def\n"; out << " % 0.12 is an empirical value derived from \"BLANK PAGE\"\n"; out << " % It could be calulated from the bounding box and string length...\n"; out << " /centerx xlen 0.5 mul x1 add def\n"; out << " /centery ylen 0.5 mul y1 add def\n"; out << " /HeleveticaBold fontsz selectfont\n"; out << " /mystring (BLANK PAGE) def\n"; out << " /strlen mystring stringwidth pop def\n"; out << " /strhei gsave 0 0 moveto mystring false charpath flattenpath pathbbox\n"; out << " exch pop exch sub exch pop grestore def\n"; out << " centerx centery translate\n"; out << " angle rotate\n"; out << " 0 0 moveto\n"; out << " 0.95 0.95 0.95 setrgbcolor\n"; out << " strlen -0.5 mul strhei -0.5 mul moveto\n"; out << " mystring show\n"; out << " grestore\n"; out << "} bind def\n"; } printLogoDefinition(out); } ////////////////////////////// // // printLogoDefinition -- // void printLogoDefinition(ostream& out) { if (jrpQ) { printLogoDefinitionJRP(out); } else if (tassoQ) { printLogoDefinitionTASSO(out); } else { printLogoDefinitionCCARH(out); } } void printLogoDefinitionTASSO(ostream& out) { out << "/CCARHcolophon { "; out << "gsave 0.0 setgray\n"; out << "24.0977 23.5040 translate -1 1 scale 180 rotate -24.0977 0 translate\n"; out << "newpath 0 0 moveto (TMP) show\n"; out << "grestore } def\n"; out << "\n"; } void printLogoDefinitionJRP(ostream& out) { out << "\%BoundingBox: 0 0 89 35\n"; out << "/CCARHcolophon { /mo /moveto load def /li /lineto load def /cv /curveto\n"; out << "load def /cp /closepath load def /f /fill load def \n"; out << "gsave -1 -10 translate 0 setgray 0\n"; out << "setlinewidth 3.9375 33.8994 mo 3.9375 15.7588 li 3.9375 12.5625 3.8291\n"; out << "9.97559 3.6123 7.99707 cv 3.39551 5.98535 2.96191 4.23242 2.31152 2.73633\n"; out << "cv 1.66113 1.23926 0.890625 0.328125 0 0 cv 0 0.398438 li 0.779297 1.39648\n"; out << "1.41504 2.58887 1.90723 3.97559 cv 2.39355 5.33105 2.73633 6.82813 2.93555\n"; out << "8.46387 cv 3.12891 10.0859 3.22559 12.1729 3.22559 14.7295 cv 3.22559\n"; out << "28.6865 li 3.22559 30.3389 3.14648 31.5234 2.98828 32.2402 cv 2.81836\n"; out << "32.958 2.51367 33.4414 2.07422 33.6904 cv 2.07422 34.1807 li 2.90625\n"; out << "34.0254 3.52734 33.9316 3.9375 33.8994 cv cp f newpath 6.48633 34.1807 mo\n"; out << "6.48633 33.7607 li 6.0293 33.542 5.71875 33.082 5.55469 32.3809 cv 5.39063\n"; out << "31.6641 5.30859 30.5498 5.30859 29.0381 cv 5.30859 16.0156 li 5.30859\n"; out << "13.8652 5.35254 12.3535 5.44043 11.4805 cv 5.5166 10.6074 5.66016 9.86719\n"; out << "5.87109 9.25977 cv 5.46094 9.25977 5.14453 9.11133 4.92188 8.81445 cv\n"; out << "4.6875 8.50391 4.39746 7.80176 4.05176 6.71094 cv 4.25098 7.66113 4.3916\n"; out << "8.72168 4.47363 9.89063 cv 4.5498 10.9971 4.58789 12.8672 4.58789 15.501\n"; out << "cv 4.58789 33.8994 li 5.0625 33.9316 5.69531 34.0254 6.48633 34.1807 cv\n"; out << "cp f newpath 8.44629 33.9951 mo 8.44629 15.4678 li 8.06836 15.4678 li\n"; out << "7.92188 15.4678 7.69043 15.4326 7.37402 15.3623 cv 7.10449 15.292 6.78809\n"; out << "15.2568 6.4248 15.2568 cv 6.4248 15.5732 li 6.7998 15.6553 7.11035 16.0244\n"; out << "7.35645 16.6807 cv 7.60254 17.3369 7.72559 18.6025 7.72559 20.4775 cv\n"; out << "7.72559 29.5127 li 7.72559 32.0674 7.29199 33.5264 6.4248 33.8896 cv\n"; out << "6.4248 34.2061 li 6.7998 34.124 7.47363 34.0537 8.44629 33.9951 cv cp f\n"; out << "newpath 9.34277 15.4678 mo 9.08789 15.4678 li 9.08789 33.9951 li 9.43945\n"; out << "33.9951 9.81445 34.0244 10.2129 34.083 cv 10.6699 34.165 11.042 34.2061\n"; out << "11.3291 34.2061 cv 12.1318 34.2061 12.7295 33.7139 13.1221 32.7295 cv\n"; out << "13.5146 31.7568 13.7109 30.5557 13.7109 29.126 cv 13.7109 26.7002 13.1982\n"; out << "25.1475 12.1729 24.4678 cv 12.6826 24.3271 13.0313 23.7158 13.377 23.2471\n"; out << "cv 13.9189 22.5078 14.2573 21.5439 14.9238 20.2002 cv 16.0664 17.8799\n"; out << "17.1929 16.0459 17.9136 16.0459 cv 18.0601 16.0459 18.2095 16.1455\n"; out << "18.3618 16.3447 cv 18.397 16.0283 li 18.1626 15.4189 17.8374 15.1143\n"; out << "17.4214 15.1143 cv 16.9761 15.1143 16.5103 15.4482 16.0239 16.1162\n"; out << "cv 15.5669 16.749 14.9883 18.1611 14.0801 20.0127 cv 12.9902 22.2627\n"; out << "11.8418 24.2217 10.8105 24.2217 cv 11.4492 23.8232 12.3135 22.4814\n"; out << "13.4033 20.1963 cv 14.1709 18.6025 14.8828 16.9424 15.3457 16.2158 cv\n"; out << "15.8145 15.4893 16.1499 14.6221 16.5776 14.6221 cv 16.5776 14.6221 li\n"; out << "16.3784 14.4814 16.1821 14.2529 15.9888 14.2529 cv 15.4204 14.2529\n"; out << "14.7773 15.2197 14.3613 15.7939 cv 14.1387 16.1104 13.9072 16.5967\n"; out << "13.5645 17.2471 cv 13.2217 17.8975 13.0137 18.8408 12.5332 19.8721\n"; out << "cv 11.8301 21.3721 11.2207 22.6104 10.8809 23.1494 cv 10.5176 23.7002\n"; out << "10.1631 24.0869 9.81738 24.3096 cv 9.81738 20.1436 li 9.81738 17.3428\n"; out << "10.2393 15.8193 11.083 15.5732 cv 11.083 15.2568 li 10.3799 15.3975\n"; out << "9.7998 15.4678 9.34277 15.4678 cv cp f newpath 1 setgray 9.81738 29.1611\n"; out << "mo 9.81738 25.3467 li 10.1631 25.1709 10.5381 25.083 10.9424 25.083 cv\n"; out << "12.2607 25.083 12.9199 26.4541 12.9199 29.1963 cv 12.9199 31.7627 12.2666\n"; out << "33.0459 10.96 33.0459 cv 10.5381 33.0459 10.21 32.876 9.97559 32.5361\n"; out << "cv 9.87012 32.0674 9.81738 30.9424 9.81738 29.1611 cv cp f 0 setgray\n"; out << "newpath 13.7988 25.3643 mo 14.1797 26.5713 14.3701 27.9014 14.3701 29.3545\n"; out << "cv 14.3701 30.6787 14.1504 32.0088 13.7109 33.3447 cv 14.7188 32.4893\n"; out << "15.2227 31.1416 15.2227 29.3018 cv 15.2227 27.4385 14.748 26.126 13.7988\n"; out << "25.3643 cv cp f newpath 19.4531 33.9248 mo 19.4531 15.3975 li 19.1631\n"; out << "15.3975 li 18.7881 15.3975 18.2314 15.3271 17.4932 15.1865 cv 17.4932\n"; out << "15.5029 li 17.7979 15.5732 18.0791 15.9189 18.3369 16.54 cv 18.5947\n"; out << "17.1611 18.7236 18.4561 18.7236 20.4248 cv 18.7236 28.9854 li 18.7236\n"; out << "30.6143 18.6328 31.7686 18.4512 32.4482 cv 18.2695 33.1279 17.9502 33.585\n"; out << "17.4932 33.8193 cv 17.4932 34.1357 li 18.2725 34.0186 18.9258 33.9482\n"; out << "19.4531 33.9248 cv cp f newpath 20.7363 15.3975 mo 20.0947 15.3975 li\n"; out << "20.0947 33.9248 li 20.2412 33.9248 20.3555 33.9307 20.4375 33.9424 cv\n"; out << "20.7715 33.9658 21.0938 34.0068 21.4043 34.0654 cv 21.6094 34.1123 21.835\n"; out << "34.1357 22.0811 34.1357 cv 23.124 34.1357 23.8916 33.5908 24.3838 32.501\n"; out << "cv 24.8701 31.3994 25.1133 30.0283 25.1133 28.3877 cv 25.1133 26.7119\n"; out << "24.8467 25.376 24.3135 24.3799 cv 23.7803 23.3604 23.0859 22.8506 22.2305\n"; out << "22.8506 cv 21.7559 22.8506 21.2813 23.0146 20.8066 23.3428 cv 20.8066\n"; out << "20.2139 li 20.8066 18.6787 20.915 17.5479 21.1318 16.8213 cv 21.3428\n"; out << "16.0713 21.6914 15.6318 22.1777 15.5029 cv 22.1777 15.1865 li 21.9316\n"; out << "15.2568 21.627 15.3096 21.2637 15.3447 cv 20.7363 15.3975 li cp f newpath\n"; out << "1 setgray 20.8066 28.4932 mo 20.8066 24.6611 li 21.2109 24.3213 21.6445\n"; out << "24.1514 22.1074 24.1514 cv 22.8516 24.1514 23.4082 24.5615 23.7773 25.3818\n"; out << "cv 24.1465 26.2139 24.3311 27.2451 24.3311 28.4756 cv 24.3311 29.7529\n"; out << "24.1465 30.8135 23.7773 31.6572 cv 23.4082 32.501 22.8311 32.9229 22.0459\n"; out << "32.9229 cv 21.6123 32.9229 21.2959 32.7881 21.0967 32.5186 cv 20.9033\n"; out << "32.2373 20.8066 30.8955 20.8066 28.4932 cv cp f newpath 0 setgray 24.7969\n"; out << "23.5889 mo 25.4355 24.9014 25.7549 26.4717 25.7549 28.2998 cv 25.7549\n"; out << "30.2217 25.4355 31.8916 24.7969 33.3096 cv 25.9746 32.3604 26.5635 30.7432\n"; out << "26.5635 28.458 cv 26.5635 26.2197 25.9746 24.5967 24.7969 23.5889 cv cp f\n"; out << "newpath 7.65088 13.9238 mo 7.65088 14.0859 li 9.94873 14.0859 li 9.94873\n"; out << "13.9238 li 9.75488 13.9238 li 9.53613 13.9238 9.37646 13.8516 9.27637\n"; out << "13.707 cv 9.21289 13.6133 9.18115 13.3887 9.18115 13.0313 cv 9.18115\n"; out << "10.1172 li 9.18115 9.66992 9.13721 9.30469 9.04883 9.02734 cv 8.96045\n"; out << "8.74805 8.80811 8.50586 8.59229 8.30078 cv 8.37598 8.09375 8.11475 7.99023\n"; out << "7.80908 7.99023 cv 7.56104 7.99023 7.36621 8.05859 7.22363 8.19531 cv\n"; out << "7.08105 8.33008 7.01025 8.48633 7.01025 8.66211 cv 7.01025 8.80664 7.04297\n"; out << "8.91406 7.10889 8.98828 cv 7.1958 9.07813 7.29736 9.125 7.41357 9.125 cv\n"; out << "7.49805 9.125 7.57373 9.09375 7.64063 9.03125 cv 7.7085 8.9707 7.79297\n"; out << "8.80664 7.896 8.53906 cv 7.95654 8.38086 8.03418 8.30273 8.12939 8.30273\n"; out << "cv 8.20068 8.30273 8.26709 8.35156 8.32861 8.44727 cv 8.39063 8.54492\n"; out << "8.42188 8.71484 8.42188 8.96094 cv 8.42188 13.0313 li 8.42188 13.332\n"; out << "8.40479 13.5313 8.37061 13.6289 cv 8.34424 13.7012 8.28906 13.7656\n"; out << "8.20459 13.8184 cv 8.09131 13.8887 7.97119 13.9238 7.84473 13.9238\n"; out << "cv 7.65088 13.9238 li cp f newpath 12.021 12.2715 mo 12.5693 12.2715\n"; out << "13.0098 12.0391 13.3423 11.5762 cv 13.624 11.1816 13.7651 10.7266 13.7651\n"; out << "10.2148 cv 13.7651 9.85352 13.6875 9.48828 13.5317 9.11914 cv 13.3765\n"; out << "8.75 13.1621 8.47266 12.8896 8.28516 cv 12.6162 8.09766 12.3125 8.00391\n"; out << "11.9775 8.00391 cv 11.4316 8.00391 10.998 8.24609 10.6763 8.72852 cv\n"; out << "10.4048 9.13477 10.269 9.5918 10.269 10.0996 cv 10.269 10.4688 10.3511\n"; out << "10.8359 10.5166 11.2012 cv 10.6807 11.5645 10.8979 11.834 11.167 12.0098\n"; out << "cv 11.4355 12.1836 11.7207 12.2715 12.021 12.2715 cv cp f 1 setgray\n"; out << "newpath 11.8984 11.9844 mo 11.7588 11.9844 11.6182 11.9395 11.4771\n"; out << "11.8457 cv 11.3359 11.7539 11.2222 11.5918 11.1353 11.3613 cv 11.0483\n"; out << "11.1289 11.0049 10.832 11.0049 10.4688 cv 11.0049 9.88281 11.1099 9.37695\n"; out << "11.3188 8.95313 cv 11.5288 8.52734 11.8047 8.31641 12.1475 8.31641\n"; out << "cv 12.4033 8.31641 12.6143 8.43164 12.7803 8.66797 cv 12.9468 8.90039\n"; out << "13.0298 9.30469 13.0298 9.875 cv 13.0298 10.5898 12.8911 11.1523 12.6143\n"; out << "11.5625 cv 12.4272 11.8438 12.1885 11.9844 11.8984 11.9844 cv cp f 0\n"; out << "setgray newpath 16.6406 12.2715 mo 16.6406 10.9004 li 16.5103 10.9004 li\n"; out << "16.4102 11.3301 16.2813 11.623 16.1245 11.7793 cv 15.9673 11.9336 15.7681\n"; out << "12.0117 15.5254 12.0117 cv 15.3408 12.0117 15.1919 11.957 15.0786 11.8496\n"; out << "cv 14.9648 11.7402 14.9082 11.6211 14.9082 11.4883 cv 14.9082 11.3242\n"; out << "14.9507 11.1836 15.0347 11.0664 cv 15.1167 10.9453 15.2827 10.8184\n"; out << "15.5332 10.6836 cv 16.1108 10.373 li 16.646 10.082 16.9136 9.69922\n"; out << "16.9136 9.22461 cv 16.9136 8.85938 16.7891 8.56445 16.5396 8.33984 cv\n"; out << "16.291 8.11523 16.0117 8.00391 15.7031 8.00391 cv 15.4819 8.00391 15.2285\n"; out << "8.04688 14.9438 8.13477 cv 14.8569 8.16406 14.7856 8.17969 14.7305 8.17969\n"; out << "cv 14.6699 8.17969 14.6221 8.14063 14.5879 8.06445 cv 14.4575 8.06445\n"; out << "li 14.4575 9.50195 li 14.5879 9.50195 li 14.6616 9.0918 14.8027 8.7832\n"; out << "15.0112 8.57422 cv 15.2192 8.36719 15.4526 8.26367 15.7114 8.26367 cv\n"; out << "15.8931 8.26367 16.041 8.32227 16.1563 8.44141 cv 16.2705 8.55859 16.3281\n"; out << "8.70313 16.3281 8.86914 cv 16.3281 9.07227 16.2642 9.24023 16.1362\n"; out << "9.37891 cv 16.0083 9.51563 15.7534 9.69141 15.3711 9.90234 cv 14.9888\n"; out << "10.1133 14.7383 10.3027 14.6196 10.4727 cv 14.501 10.6406 14.4414 10.8516\n"; out << "14.4414 11.1055 cv 14.4414 11.4375 14.5435 11.7129 14.7485 11.9375 cv\n"; out << "14.9521 12.1582 15.2168 12.2715 15.541 12.2715 cv 15.6836 12.2715 15.8564\n"; out << "12.2363 16.0591 12.1699 cv 16.1938 12.125 16.2832 12.1035 16.3281 12.1035\n"; out << "cv 16.3706 12.1035 16.4033 12.1133 16.4272 12.1348 cv 16.4507 12.1543\n"; out << "16.4785 12.2012 16.5103 12.2715 cv 16.6406 12.2715 li cp f newpath 20.6592\n"; out << "12.2715 mo 20.6592 7.09375 li 20.6592 6.83594 20.6748 6.66992 20.7065\n"; out << "6.59766 cv 20.7383 6.52344 20.7871 6.4668 20.855 6.42578 cv 20.9219\n"; out << "6.38477 21.0532 6.36523 21.2485 6.36523 cv 21.2485 6.20117 li 19.4209\n"; out << "6.20117 li 19.4209 6.36523 li 19.4961 6.36523 li 19.644 6.36523 19.7559\n"; out << "6.38867 19.8325 6.43555 cv 19.8853 6.4668 19.9272 6.52539 19.959 6.60742\n"; out << "cv 19.9907 6.69141 20.0063 6.85352 20.0063 7.09375 cv 20.0063 8.82617 li\n"; out << "19.7666 8.50977 19.5566 8.29297 19.3774 8.17773 cv 19.1982 8.06055 19.0122\n"; out << "8.00391 18.8198 8.00391 cv 18.4692 8.00391 18.1558 8.17969 17.8809 8.53516\n"; out << "cv 17.605 8.88867 17.4673 9.36328 17.4673 9.95898 cv 17.4673 10.6406\n"; out << "17.6494 11.1973 18.0132 11.627 cv 18.377 12.0566 18.8159 12.2715 19.3301\n"; out << "12.2715 cv 19.4805 12.2715 19.6187 12.2461 19.7456 12.2012 cv 19.8721\n"; out << "12.1523 19.9854 12.082 20.0854 11.9902 cv 20.2383 12.0703 20.3848 12.166\n"; out << "20.5244 12.2715 cv 20.6592 12.2715 li cp f newpath 1 setgray 20.0063\n"; out << "9.10156 mo 20.0063 10.9922 li 20.0063 11.2109 19.9805 11.3848 19.9297\n"; out << "11.5098 cv 19.8774 11.6367 19.7861 11.7441 19.6543 11.832 cv 19.5225\n"; out << "11.9199 19.3735 11.9629 19.2075 11.9629 cv 18.9121 11.9629 18.6592\n"; out << "11.8242 18.4482 11.5449 cv 18.2373 11.2676 18.1318 10.8457 18.1318\n"; out << "10.2793 cv 18.1318 9.73828 18.2388 9.32617 18.4536 9.04492 cv 18.6689\n"; out << "8.76367 18.9282 8.62305 19.2314 8.62305 cv 19.3867 8.62305 19.5254 8.66016\n"; out << "19.6465 8.73438 cv 19.7676 8.81055 19.8877 8.93164 20.0063 9.10156 cv cp\n"; out << "f newpath 0 setgray 24.6772 12.1523 mo 24.6772 9.71289 li 24.6772 9.24805\n"; out << "24.687 8.96289 24.707 8.85742 cv 24.7266 8.75391 24.7583 8.68164 24.8022\n"; out << "8.64063 cv 24.8452 8.59961 24.896 8.58008 24.9541 8.58008 cv 25.0361\n"; out << "8.58008 25.1284 8.60352 25.231 8.6543 cv 25.2866 8.5 li 24.2026 8.00391\n"; out << "li 24.0249 8.00391 li 24.0249 8.85547 li 23.7139 8.48047 23.4766 8.24609\n"; out << "23.313 8.14844 cv 23.1494 8.05273 22.9766 8.00391 22.7949 8.00391 cv\n"; out << "22.5918 8.00391 22.4155 8.06836 22.2666 8.19922 cv 22.1177 8.33008 22.0142\n"; out << "8.49609 21.9561 8.70313 cv 21.8984 8.90625 21.8691 9.19727 21.8691 9.57227\n"; out << "cv 21.8691 11.3691 li 21.8691 11.5605 21.8506 11.6914 21.814 11.7656\n"; out << "cv 21.7769 11.8379 21.7222 11.8945 21.6494 11.9336 cv 21.5771 11.9746\n"; out << "21.4463 11.9922 21.2563 11.9902 cv 21.2563 12.1523 li 22.5259 12.1523\n"; out << "li 22.5259 9.45898 li 22.5259 9.08203 22.5845 8.83594 22.7017 8.7207 cv\n"; out << "22.8188 8.60156 22.9609 8.54492 23.127 8.54492 cv 23.2402 8.54492 23.3687\n"; out << "8.58398 23.5127 8.66211 cv 23.6563 8.74219 23.8271 8.89258 24.0249 9.11523\n"; out << "cv 24.0249 11.3965 li 24.0249 11.625 23.9873 11.7793 23.9116 11.8594 cv\n"; out << "23.8369 11.9395 23.6807 11.9824 23.4434 11.9902 cv 23.4434 12.1523 li\n"; out << "24.6772 12.1523 li cp f newpath 26.8013 12.2715 mo 26.8013 9.03711 li\n"; out << "26.8013 8.7832 26.8174 8.61719 26.8511 8.5332 cv 26.8833 8.44922 26.9321\n"; out << "8.38672 26.9966 8.3457 cv 27.0615 8.30469 27.1797 8.28516 27.3511\n"; out << "8.28516 cv 27.3511 8.12695 li 25.5908 8.12695 li 25.5908 8.28516 li\n"; out << "25.7676 8.28516 25.8862 8.30273 25.9468 8.3418 cv 26.0078 8.37891\n"; out << "26.0557 8.44336 26.0913 8.53125 cv 26.1265 8.61914 26.1445 8.78711\n"; out << "26.1445 9.03711 cv 26.1445 10.5879 li 26.1445 11.0234 26.1328 11.3066\n"; out << "26.1089 11.4355 cv 26.0908 11.5293 26.0615 11.5938 26.022 11.6309 cv\n"; out << "25.9824 11.668 25.9287 11.6855 25.8599 11.6855 cv 25.7861 11.6855 25.6963\n"; out << "11.6641 25.5908 11.6211 cv 25.5356 11.7793 li 26.6274 12.2715 li 26.8013\n"; out << "12.2715 li cp f newpath 26.4731 14.375 mo 26.5835 14.375 26.6777 14.332\n"; out << "26.7559 14.2461 cv 26.8335 14.1602 26.8726 14.0547 26.8726 13.9316\n"; out << "cv 26.8726 13.8086 26.8335 13.7031 26.7559 13.6152 cv 26.6777 13.5273\n"; out << "26.5835 13.4844 26.4731 13.4844 cv 26.3623 13.4844 26.2671 13.5273 26.188\n"; out << "13.6152 cv 26.1089 13.7031 26.0693 13.8086 26.0693 13.9316 cv 26.0693\n"; out << "14.0547 26.1084 14.1602 26.1865 14.2461 cv 26.2637 14.332 26.3594 14.375\n"; out << "26.4731 14.375 cv cp f newpath 28.8579 11.418 mo 29.2822 11.9863 29.687\n"; out << "12.2715 30.0723 12.2715 cv 30.27 12.2715 30.4399 12.2148 30.5825 12.1055\n"; out << "cv 30.7246 11.9961 30.8379 11.8145 30.9224 11.5625 cv 30.9805 11.3867\n"; out << "31.0093 11.1172 31.0093 10.7539 cv 31.0093 9.03711 li 31.0093 8.78125\n"; out << "31.0278 8.60742 31.0649 8.51758 cv 31.0938 8.44336 31.1406 8.38672\n"; out << "31.2051 8.3457 cv 31.2695 8.30469 31.3892 8.28516 31.563 8.28516 cv\n"; out << "31.563 8.12695 li 29.7715 8.12695 li 29.7715 8.28516 li 29.8467 8.28516\n"; out << "li 30.0156 8.28516 30.1338 8.3125 30.2002 8.37109 cv 30.2681 8.42773\n"; out << "30.3145 8.51172 30.3408 8.62305 cv 30.3516 8.66797 30.3569 8.80469 30.3569\n"; out << "9.03711 cv 30.3569 10.6836 li 30.3569 11.0508 30.314 11.3164 30.2285\n"; out << "11.4824 cv 30.1426 11.6465 29.998 11.7305 29.7954 11.7305 cv 29.4814\n"; out << "11.7305 29.1689 11.5391 28.8579 11.1582 cv 28.8579 9.03711 li 28.8579\n"; out << "8.76367 28.8726 8.5957 28.9014 8.53125 cv 28.9385 8.44531 28.9888 8.38281\n"; out << "29.0532 8.34375 cv 29.1182 8.30469 29.2495 8.28516 29.4473 8.28516 cv\n"; out << "29.4473 8.12695 li 27.6558 8.12695 li 27.6558 8.28516 li 27.7349 8.28516\n"; out << "li 27.9194 8.28516 28.0435 8.33594 28.1084 8.44141 cv 28.1729 8.54492\n"; out << "28.2051 8.74219 28.2051 9.03711 cv 28.2051 10.5313 li 28.2051 11.0137\n"; out << "28.1958 11.3086 28.1753 11.4141 cv 28.1563 11.5195 28.1255 11.5898 28.085\n"; out << "11.6289 cv 28.0435 11.666 27.9893 11.6855 27.9204 11.6855 cv 27.8467\n"; out << "11.6855 27.7583 11.6641 27.6558 11.6211 cv 27.5962 11.7793 li 28.688\n"; out << "12.2715 li 28.8579 12.2715 li 28.8579 11.418 li cp f newpath 39.0977\n"; out << "8.12695 mo 37.666 8.12695 li 35.8506 10.9121 li 35.7158 10.9063 35.6064\n"; out << "10.9043 35.522 10.9043 cv 35.4878 10.9043 35.4512 10.9043 35.4116 10.9063\n"; out << "cv 35.3721 10.9082 35.3311 10.9102 35.2891 10.9121 cv 35.2891 9.18164 li\n"; out << "35.2891 8.80664 35.3257 8.57227 35.3994 8.48242 cv 35.5 8.35352 35.6499\n"; out << "8.28906 35.8506 8.28906 cv 36.0601 8.28906 li 36.0601 8.12695 li 33.7622\n"; out << "8.12695 li 33.7622 8.28906 li 33.9639 8.28906 li 34.1904 8.28906 34.353\n"; out << "8.37109 34.4502 8.53516 cv 34.5059 8.625 34.5332 8.8418 34.5332 9.18164\n"; out << "cv 34.5332 13.0313 li 34.5332 13.4063 34.4966 13.6387 34.4229 13.7305\n"; out << "cv 34.3198 13.8574 34.167 13.9238 33.9639 13.9238 cv 33.7622 13.9238 li\n"; out << "33.7622 14.0859 li 35.7158 14.0859 li 36.2856 14.0859 36.7051 14.0391\n"; out << "36.9761 13.9473 cv 37.2456 13.8555 37.4751 13.6855 37.6641 13.4375 cv\n"; out << "37.8521 13.1895 37.9468 12.8945 37.9468 12.5527 cv 37.9468 12.1855 37.8389\n"; out << "11.8672 37.6245 11.5977 cv 37.4092 11.3281 37.0767 11.1387 36.6255 11.0273\n"; out << "cv 37.7329 9.31836 li 37.9863 8.92383 38.2036 8.66406 38.3857 8.53516 cv\n"; out << "38.5674 8.40625 38.8047 8.32422 39.0977 8.28906 cv 39.0977 8.12695 li cp\n"; out << "f newpath 1 setgray 35.2891 11.1895 mo 35.3389 11.1895 35.3823 11.1895\n"; out << "35.4194 11.1875 cv 35.4561 11.1855 35.4868 11.1855 35.5103 11.1855 cv\n"; out << "36.022 11.1855 36.4072 11.3086 36.6675 11.5547 cv 36.9268 11.8008 37.0566\n"; out << "12.1133 37.0566 12.4941 cv 37.0566 12.8672 36.9521 13.1699 36.7422 13.4023\n"; out << "cv 36.5327 13.6348 36.2554 13.752 35.9097 13.752 cv 35.7568 13.752 35.5498\n"; out << "13.7227 35.2891 13.668 cv 35.2891 11.1895 li cp f newpath 0 setgray\n"; out << "39.8887 10.6367 mo 39.8857 10.0391 40.0166 9.56836 40.2803 9.23047 cv\n"; out << "40.5439 8.88867 40.8535 8.7207 41.2095 8.7207 cv 41.4468 8.7207 41.6528\n"; out << "8.79297 41.8281 8.9375 cv 42.0039 9.08203 42.1509 9.33008 42.2695 9.68164\n"; out << "cv 42.3921 9.59375 li 42.3369 9.19336 42.1758 8.82813 41.9097 8.49805\n"; out << "cv 41.6436 8.16797 41.3096 8.00391 40.9092 8.00391 cv 40.4741 8.00391\n"; out << "40.1011 8.19141 39.792 8.56836 cv 39.4814 8.94531 39.3271 9.45117 39.3271\n"; out << "10.0859 cv 39.3271 10.7754 39.4858 11.3125 39.8032 11.6973 cv 40.1211\n"; out << "12.082 40.52 12.2754 41 12.2754 cv 41.4063 12.2754 41.7397 12.127 42.0005\n"; out << "11.8281 cv 42.2617 11.5313 42.3921 11.1328 42.3921 10.6367 cv 39.8887\n"; out << "10.6367 li cp f newpath 1 setgray 39.8887 10.8906 mo 41.5654 10.8906 li\n"; out << "41.5522 11.1484 41.5249 11.3301 41.4824 11.4355 cv 41.4165 11.5996 41.3184\n"; out << "11.7285 41.1875 11.8223 cv 41.0576 11.916 40.9209 11.9629 40.7783 11.9629\n"; out << "cv 40.5596 11.9629 40.3638 11.8691 40.1909 11.6797 cv 40.0181 11.4902\n"; out << "39.9175 11.2266 39.8887 10.8906 cv cp f newpath 0 setgray 45.2158 12.2715\n"; out << "mo 45.2158 10.9004 li 45.085 10.9004 li 44.9854 11.3301 44.8564 11.623\n"; out << "44.7002 11.7793 cv 44.543 11.9336 44.3433 12.0117 44.1006 12.0117 cv\n"; out << "43.916 12.0117 43.7671 11.957 43.6538 11.8496 cv 43.5405 11.7402 43.4839\n"; out << "11.6211 43.4839 11.4883 cv 43.4839 11.3242 43.5259 11.1836 43.6104 11.0664\n"; out << "cv 43.6919 10.9453 43.8584 10.8184 44.1089 10.6836 cv 44.6865 10.373\n"; out << "li 45.2217 10.082 45.4893 9.69922 45.4893 9.22461 cv 45.4893 8.85938\n"; out << "45.3643 8.56445 45.1152 8.33984 cv 44.8662 8.11523 44.5869 8.00391\n"; out << "44.2788 8.00391 cv 44.0571 8.00391 43.8042 8.04688 43.5195 8.13477 cv\n"; out << "43.4321 8.16406 43.3613 8.17969 43.3057 8.17969 cv 43.2451 8.17969 43.1978\n"; out << "8.14063 43.1636 8.06445 cv 43.0327 8.06445 li 43.0327 9.50195 li 43.1636\n"; out << "9.50195 li 43.2373 9.0918 43.3784 8.7832 43.5864 8.57422 cv 43.7949\n"; out << "8.36719 44.0283 8.26367 44.2866 8.26367 cv 44.4688 8.26367 44.6172\n"; out << "8.32227 44.7314 8.44141 cv 44.8467 8.55859 44.9033 8.70313 44.9033\n"; out << "8.86914 cv 44.9033 9.07227 44.8389 9.24023 44.7119 9.37891 cv 44.583\n"; out << "9.51563 44.3286 9.69141 43.9463 9.90234 cv 43.564 10.1133 43.3135 10.3027\n"; out << "43.1948 10.4727 cv 43.0762 10.6406 43.0171 10.8516 43.0171 11.1055 cv\n"; out << "43.0171 11.4375 43.1191 11.7129 43.3232 11.9375 cv 43.5278 12.1582\n"; out << "43.7925 12.2715 44.1167 12.2715 cv 44.2588 12.2715 44.4316 12.2363\n"; out << "44.6348 12.1699 cv 44.7686 12.125 44.8584 12.1035 44.9033 12.1035 cv\n"; out << "44.9463 12.1035 44.9795 12.1133 45.0029 12.1348 cv 45.0264 12.1543\n"; out << "45.0537 12.2012 45.085 12.2715 cv 45.2158 12.2715 li cp f newpath\n"; out << "46.6357 10.6367 mo 46.6338 10.0391 46.7637 9.56836 47.0273 9.23047 cv\n"; out << "47.291 8.88867 47.6006 8.7207 47.957 8.7207 cv 48.1943 8.7207 48.4004\n"; out << "8.79297 48.5752 8.9375 cv 48.751 9.08203 48.8984 9.33008 49.0166 9.68164\n"; out << "cv 49.1396 9.59375 li 49.084 9.19336 48.9229 8.82813 48.6572 8.49805\n"; out << "cv 48.3906 8.16797 48.0576 8.00391 47.6563 8.00391 cv 47.2217 8.00391\n"; out << "46.8486 8.19141 46.5391 8.56836 cv 46.2295 8.94531 46.0742 9.45117\n"; out << "46.0742 10.0859 cv 46.0742 10.7754 46.2334 11.3125 46.5508 11.6973\n"; out << "cv 46.8682 12.082 47.2676 12.2754 47.7471 12.2754 cv 48.1533 12.2754\n"; out << "48.4873 12.127 48.748 11.8281 cv 49.0088 11.5313 49.1396 11.1328 49.1396\n"; out << "10.6367 cv 46.6357 10.6367 li cp f newpath 1 setgray 46.6357 10.8906\n"; out << "mo 48.3135 10.8906 li 48.2998 11.1484 48.2725 11.3301 48.2295 11.4355\n"; out << "cv 48.1641 11.5996 48.0654 11.7285 47.9346 11.8223 cv 47.8047 11.916\n"; out << "47.6689 11.9629 47.5264 11.9629 cv 47.3076 11.9629 47.1104 11.8691\n"; out << "46.9385 11.6797 cv 46.7656 11.4902 46.665 11.2266 46.6357 10.8906 cv cp\n"; out << "f newpath 0 setgray 51.6748 8.70703 mo 51.3027 8.38672 51.0693 8.20313\n"; out << "50.9746 8.15234 cv 50.833 8.08008 50.6807 8.04297 50.5205 8.04297 cv\n"; out << "50.2695 8.04297 50.0635 8.13867 49.9014 8.32813 cv 49.7383 8.51953\n"; out << "49.6572 8.76953 49.6572 9.08008 cv 49.6572 9.27539 49.6973 9.44531\n"; out << "49.7764 9.58984 cv 49.8838 9.78906 50.0723 9.97656 50.3398 10.1523 cv\n"; out << "50.6074 10.3281 51.0518 10.541 51.6748 10.7949 cv 51.6748 10.9531 li\n"; out << "51.6748 11.3535 51.6182 11.6289 51.5029 11.7793 cv 51.3877 11.9277 51.2217\n"; out << "12.002 51.0029 12.002 cv 50.8369 12.002 50.7041 11.9531 50.6064 11.8535\n"; out << "cv 50.5068 11.7539 50.4561 11.6387 50.4561 11.5098 cv 50.4639 11.2559\n"; out << "li 50.4639 11.1211 50.4326 11.0156 50.3711 10.9434 cv 50.3096 10.8691\n"; out << "50.2285 10.834 50.1279 10.834 cv 50.0303 10.834 49.9502 10.8711 49.8887\n"; out << "10.9473 cv 49.8271 11.0234 49.7959 11.1289 49.7959 11.2598 cv 49.7959\n"; out << "11.5117 49.9121 11.7441 50.1436 11.9551 cv 50.376 12.166 50.7021 12.2715\n"; out << "51.1211 12.2715 cv 51.4424 12.2715 51.7061 12.2109 51.9121 12.0898 cv\n"; out << "52.0674 12 52.1826 11.8574 52.2568 11.6641 cv 52.3037 11.5371 52.3271\n"; out << "11.2793 52.3271 10.8906 cv 52.3271 9.52344 li 52.3271 9.14063 52.334\n"; out << "8.9043 52.3467 8.81836 cv 52.3604 8.73242 52.3818 8.67383 52.4121 8.64453\n"; out << "cv 52.4424 8.61523 52.4775 8.60156 52.5166 8.60156 cv 52.5596 8.60156\n"; out << "52.5967 8.61133 52.6279 8.63281 cv 52.6826 8.66992 52.79 8.77734 52.9482\n"; out << "8.95313 cv 52.9482 8.70703 li 52.6533 8.26758 52.3701 8.04688 52.1025\n"; out << "8.04688 cv 51.9727 8.04688 51.8701 8.09766 51.7939 8.19727 cv 51.7168\n"; out << "8.29688 51.6768 8.4668 51.6748 8.70703 cv cp f newpath 1 setgray 51.6748\n"; out << "8.99219 mo 51.6748 10.5254 li 51.2764 10.3496 51.0195 10.2246 50.9033\n"; out << "10.1523 cv 50.6953 10.0234 50.5459 9.88867 50.4561 9.74805 cv 50.3662\n"; out << "9.60742 50.3223 9.45313 50.3223 9.28711 cv 50.3223 9.07617 50.3789\n"; out << "8.90039 50.4922 8.76172 cv 50.6055 8.62305 50.7354 8.55273 50.8838\n"; out << "8.55273 cv 51.084 8.55273 51.3477 8.69922 51.6748 8.99219 cv cp f newpath\n"; out << "0 setgray 54.2773 12.2715 mo 54.2773 11.3652 li 54.5811 11.9688 54.8916\n"; out << "12.2715 55.21 12.2715 cv 55.3555 12.2715 55.4756 12.2207 55.5703 12.123\n"; out << "cv 55.665 12.0254 55.7129 11.9121 55.7129 11.7832 cv 55.7129 11.668\n"; out << "55.6787 11.5723 55.6104 11.4922 cv 55.542 11.4141 55.46 11.375 55.3643\n"; out << "11.375 cv 55.2725 11.375 55.1689 11.4238 55.0537 11.5254 cv 54.9404\n"; out << "11.627 54.8545 11.6777 54.7998 11.6777 cv 54.752 11.6777 54.7002 11.6484\n"; out << "54.6455 11.5898 cv 54.5264 11.4688 54.4033 11.2715 54.2773 10.9961 cv\n"; out << "54.2773 9.06641 li 54.2773 8.84375 54.3018 8.67578 54.3525 8.5625 cv\n"; out << "54.3867 8.48242 54.4473 8.41602 54.5342 8.36328 cv 54.6211 8.31055 54.7471\n"; out << "8.28516 54.9102 8.28516 cv 54.9102 8.12695 li 53.0557 8.12695 li 53.0557\n"; out << "8.28516 li 53.2393 8.28516 53.377 8.31641 53.4658 8.38086 cv 53.5322\n"; out << "8.42773 53.5791 8.50195 53.6045 8.60547 cv 53.6182 8.6543 53.624 8.79688\n"; out << "53.624 9.03125 cv 53.624 10.5918 li 53.624 11.0605 53.6162 11.3398 53.5986\n"; out << "11.4297 cv 53.5811 11.5176 53.5498 11.584 53.5039 11.625 cv 53.458 11.666\n"; out << "53.4004 11.6855 53.332 11.6855 cv 53.25 11.6855 53.1572 11.6641 53.0557\n"; out << "11.6211 cv 53.0156 11.7793 li 54.1104 12.2715 li 54.2773 12.2715 li cp f\n"; out << "newpath 58.9912 9.65625 mo 58.8936 9.125 58.7031 8.7168 58.418 8.43164\n"; out << "cv 58.1338 8.14648 57.8184 8.00391 57.4727 8.00391 cv 57.0615 8.00391\n"; out << "56.7031 8.19531 56.3975 8.58008 cv 56.0908 8.96289 55.9385 9.48047 55.9385\n"; out << "10.1348 cv 55.9385 10.7676 56.1074 11.2813 56.4463 11.6777 cv 56.7852\n"; out << "12.0723 57.1924 12.2715 57.667 12.2715 cv 58.0225 12.2715 58.3154 12.166\n"; out << "58.5449 11.957 cv 58.7744 11.7461 58.8887 11.5293 58.8887 11.3047 cv\n"; out << "58.8887 11.1914 58.8564 11.1016 58.792 11.0332 cv 58.7275 10.9648 58.6377\n"; out << "10.9297 58.5205 10.9297 cv 58.3652 10.9297 58.248 10.9863 58.1689 11.0977\n"; out << "cv 58.124 11.1582 58.0947 11.2754 58.0801 11.4492 cv 58.0654 11.6211\n"; out << "58.0127 11.7539 57.9199 11.8438 cv 57.8271 11.9316 57.7002 11.9766\n"; out << "57.5361 11.9766 cv 57.2725 11.9766 57.0596 11.8672 56.8994 11.6504 cv\n"; out << "56.6865 11.3633 56.5791 10.9844 56.5791 10.5137 cv 56.5791 10.0313\n"; out << "56.6846 9.60742 56.8975 9.24023 cv 57.1094 8.87305 57.3965 8.68945\n"; out << "57.7578 8.68945 cv 58.0166 8.68945 58.248 8.78711 58.4541 8.98438 cv\n"; out << "58.5986 9.11719 58.7393 9.36328 58.877 9.7168 cv 58.9912 9.65625 li cp\n"; out << "f newpath 60.5732 14.375 mo 60.5732 11.4316 li 60.8662 11.7891 61.0986\n"; out << "12.0176 61.2695 12.1191 cv 61.4404 12.2207 61.6123 12.2715 61.7842 12.2715\n"; out << "cv 61.9893 12.2715 62.166 12.207 62.3135 12.082 cv 62.4619 11.9551 62.5713\n"; out << "11.7578 62.6416 11.4883 cv 62.6924 11.3008 62.7178 10.957 62.7178 10.4609\n"; out << "cv 62.7178 9.03711 li 62.7178 8.78125 62.7354 8.60742 62.7725 8.51367 cv\n"; out << "62.7988 8.44336 62.8438 8.38672 62.9072 8.3457 cv 62.9697 8.30469 63.0869\n"; out << "8.28516 63.2549 8.28516 cv 63.2549 8.12695 li 61.4756 8.12695 li 61.4756\n"; out << "8.28516 li 61.5586 8.28516 li 61.7275 8.28516 61.8447 8.3125 61.9111\n"; out << "8.37109 cv 61.9766 8.42773 62.0225 8.51172 62.0488 8.62305 cv 62.0566\n"; out << "8.66992 62.0605 8.80859 62.0605 9.03711 cv 62.0605 10.4609 li 62.0605\n"; out << "10.9004 62.04 11.1875 61.999 11.3262 cv 61.958 11.4629 61.8936 11.5664\n"; out << "61.8037 11.6348 cv 61.7139 11.7051 61.6064 11.7383 61.4795 11.7383 cv\n"; out << "61.3506 11.7383 61.2158 11.7012 61.0762 11.625 cv 60.9365 11.5488 60.7686\n"; out << "11.3945 60.5732 11.1641 cv 60.5732 9.03711 li 60.5732 8.75977 60.5879\n"; out << "8.58984 60.6143 8.52148 cv 60.6436 8.45508 60.6943 8.39844 60.7695 8.35352\n"; out << "cv 60.8447 8.30664 60.9746 8.28516 61.1592 8.28516 cv 61.1592 8.12695\n"; out << "li 59.3633 8.12695 li 59.3633 8.28516 li 59.5244 8.28516 59.6514 8.3125\n"; out << "59.7432 8.36914 cv 59.7959 8.39648 59.8379 8.45313 59.8701 8.53516 cv\n"; out << "59.9014 8.61719 59.917 8.7832 59.917 9.03711 cv 59.917 12.6797 li 59.917\n"; out << "13.1387 59.9072 13.4219 59.8877 13.5273 cv 59.8682 13.6328 59.8369 13.7051\n"; out << "59.7969 13.7422 cv 59.7549 13.7813 59.7002 13.8008 59.6318 13.8008 cv\n"; out << "59.5771 13.8008 59.4873 13.7754 59.3633 13.7305 cv 59.3076 13.8828 li\n"; out << "60.3916 14.375 li 60.5732 14.375 li cp f newpath 66.9932 10.918 mo 66.9932\n"; out << "9.18164 li 66.9932 8.80664 67.0303 8.57227 67.1025 8.48242 cv 67.2041\n"; out << "8.35352 67.3564 8.28906 67.5576 8.28906 cv 67.7627 8.28906 li 67.7627\n"; out << "8.12695 li 65.4658 8.12695 li 65.4658 8.28906 li 65.668 8.28906 li 65.8955\n"; out << "8.28906 66.0576 8.37109 66.1533 8.53516 cv 66.2061 8.625 66.2334 8.8418\n"; out << "66.2334 9.18164 cv 66.2334 13.0313 li 66.2334 13.4063 66.1982 13.6387\n"; out << "66.1279 13.7305 cv 66.0225 13.8574 65.8701 13.9238 65.668 13.9238 cv\n"; out << "65.4658 13.9238 li 65.4658 14.0859 li 67.4307 14.0859 li 67.9111 14.0859\n"; out << "68.29 14.0313 68.5674 13.9199 cv 68.8428 13.8105 69.0771 13.625 69.2666\n"; out << "13.3652 cv 69.4561 13.1035 69.5518 12.7949 69.5518 12.4375 cv 69.5518\n"; out << "11.9512 69.4072 11.5547 69.1182 11.252 cv 68.8311 10.9453 68.4209 10.7949\n"; out << "67.8936 10.7949 cv 67.7646 10.7949 67.626 10.8047 67.4756 10.8242 cv\n"; out << "67.3252 10.8457 67.165 10.875 66.9932 10.918 cv cp f newpath 1 setgray\n"; out << "66.9932 11.168 mo 67.1318 11.1387 67.2568 11.1152 67.3643 11.1016 cv\n"; out << "67.4717 11.0859 67.5654 11.0801 67.6416 11.0801 cv 67.915 11.0801 68.1514\n"; out << "11.1973 68.3506 11.4336 cv 68.5498 11.6699 68.6494 11.9746 68.6494 12.3496\n"; out << "cv 68.6494 12.6074 68.6025 12.8477 68.5068 13.0684 cv 68.4131 13.2891\n"; out << "68.2783 13.4551 68.1045 13.5645 cv 67.9307 13.6738 67.7314 13.7305 67.5107\n"; out << "13.7305 cv 67.376 13.7305 67.2041 13.7012 66.9932 13.6465 cv 66.9932\n"; out << "11.168 li cp f newpath 0 setgray 71.1494 12.2715 mo 71.1494 11.3652 li\n"; out << "71.4541 11.9688 71.7646 12.2715 72.083 12.2715 cv 72.2275 12.2715 72.3486\n"; out << "12.2207 72.4424 12.123 cv 72.5381 12.0254 72.585 11.9121 72.585 11.7832\n"; out << "cv 72.585 11.668 72.5518 11.5723 72.4814 11.4922 cv 72.4131 11.4141 72.333\n"; out << "11.375 72.2373 11.375 cv 72.1455 11.375 72.042 11.4238 71.9268 11.5254 cv\n"; out << "71.8115 11.627 71.7275 11.6777 71.6709 11.6777 cv 71.624 11.6777 71.5732\n"; out << "11.6484 71.5166 11.5898 cv 71.3994 11.4688 71.2764 11.2715 71.1494 10.9961\n"; out << "cv 71.1494 9.06641 li 71.1494 8.84375 71.1748 8.67578 71.2256 8.5625\n"; out << "cv 71.2588 8.48242 71.3193 8.41602 71.4072 8.36328 cv 71.4932 8.31055\n"; out << "71.6182 8.28516 71.7822 8.28516 cv 71.7822 8.12695 li 69.9268 8.12695\n"; out << "li 69.9268 8.28516 li 70.1123 8.28516 70.249 8.31641 70.3389 8.38086 cv\n"; out << "70.4053 8.42773 70.4521 8.50195 70.4775 8.60547 cv 70.4893 8.6543 70.4971\n"; out << "8.79688 70.4971 9.03125 cv 70.4971 10.5918 li 70.4971 11.0605 70.4873\n"; out << "11.3398 70.4697 11.4297 cv 70.4541 11.5176 70.4229 11.584 70.376 11.625\n"; out << "cv 70.3291 11.666 70.2725 11.6855 70.2041 11.6855 cv 70.1221 11.6855\n"; out << "70.0303 11.6641 69.9268 11.6211 cv 69.8877 11.7793 li 70.9834 12.2715\n"; out << "li 71.1494 12.2715 li cp f newpath 74.5596 12.2715 mo 75.1084 12.2715\n"; out << "75.5479 12.0391 75.8799 11.5762 cv 76.1631 11.1816 76.3037 10.7266\n"; out << "76.3037 10.2148 cv 76.3037 9.85352 76.2256 9.48828 76.0693 9.11914 cv\n"; out << "75.915 8.75 75.7002 8.47266 75.4268 8.28516 cv 75.1533 8.09766 74.8506\n"; out << "8.00391 74.5146 8.00391 cv 73.9697 8.00391 73.5361 8.24609 73.2139\n"; out << "8.72852 cv 72.9424 9.13477 72.8076 9.5918 72.8076 10.0996 cv 72.8076\n"; out << "10.4688 72.8896 10.8359 73.0537 11.2012 cv 73.2178 11.5645 73.4365 11.834\n"; out << "73.7041 12.0098 cv 73.9736 12.1836 74.2588 12.2715 74.5596 12.2715 cv cp\n"; out << "f newpath 1 setgray 74.4365 11.9844 mo 74.2959 11.9844 74.1553 11.9395\n"; out << "74.0146 11.8457 cv 73.874 11.7539 73.7588 11.5918 73.6729 11.3613 cv\n"; out << "73.585 11.1289 73.542 10.832 73.542 10.4688 cv 73.542 9.88281 73.6475\n"; out << "9.37695 73.8564 8.95313 cv 74.0674 8.52734 74.3428 8.31641 74.6865 8.31641\n"; out << "cv 74.9404 8.31641 75.1514 8.43164 75.3193 8.66797 cv 75.4834 8.90039\n"; out << "75.5674 9.30469 75.5674 9.875 cv 75.5674 10.5898 75.4287 11.1523 75.1514\n"; out << "11.5625 cv 74.9658 11.8438 74.7256 11.9844 74.4365 11.9844 cv cp f newpath\n"; out << "0 setgray 78.0947 12.2715 mo 78.0947 8.21875 li 78.0947 7.53125 77.9619\n"; out << "7.01953 77.6982 6.68555 cv 77.4346 6.35156 77.0928 6.18359 76.6709 6.18359\n"; out << "cv 76.4307 6.18359 76.2529 6.23242 76.1377 6.33008 cv 76.0205 6.42578\n"; out << "75.9619 6.52539 75.9619 6.62891 cv 75.9619 6.73047 75.9951 6.81836\n"; out << "76.0596 6.89258 cv 76.124 6.96484 76.2002 7.00195 76.2881 7.00195 cv\n"; out << "76.3564 7.00195 76.4268 6.98242 76.4971 6.94531 cv 76.542 6.92383 76.6279\n"; out << "6.84961 76.7568 6.72266 cv 76.8838 6.5957 76.9912 6.53125 77.0791 6.53125\n"; out << "cv 77.1416 6.53125 77.2021 6.55859 77.2646 6.61328 cv 77.3252 6.66602\n"; out << "77.3701 6.75781 77.3975 6.88477 cv 77.4287 7.01172 77.4424 7.28906\n"; out << "77.4424 7.71289 cv 77.4424 10.5781 li 77.4424 11.0215 77.4307 11.3047\n"; out << "77.4072 11.4316 cv 77.3877 11.5273 77.3604 11.5938 77.3193 11.6309 cv\n"; out << "77.2803 11.668 77.2256 11.6855 77.1572 11.6855 cv 77.083 11.6855 76.9932\n"; out << "11.6641 76.8877 11.6211 cv 76.833 11.7793 li 77.9248 12.2715 li 78.0947\n"; out << "12.2715 li cp f newpath 77.7549 14.3809 mo 77.8682 14.3809 77.9639 14.3359\n"; out << "78.0439 14.248 cv 78.1221 14.1602 78.1611 14.0527 78.1611 13.9277 cv\n"; out << "78.1611 13.8047 78.1221 13.6992 78.0439 13.6113 cv 77.9639 13.5234\n"; out << "77.8682 13.4785 77.7549 13.4785 cv 77.6436 13.4785 77.5498 13.5234\n"; out << "77.4697 13.6113 cv 77.3916 13.6992 77.3506 13.8047 77.3506 13.9277 cv\n"; out << "77.3506 14.0527 77.3916 14.1602 77.4697 14.248 cv 77.5498 14.3359 77.6436\n"; out << "14.3809 77.7549 14.3809 cv cp f newpath 79.6963 10.6367 mo 79.6943 10.0391\n"; out << "79.8232 9.56836 80.0869 9.23047 cv 80.3506 8.88867 80.6611 8.7207 81.0166\n"; out << "8.7207 cv 81.2549 8.7207 81.46 8.79297 81.6357 8.9375 cv 81.8115 9.08203\n"; out << "81.958 9.33008 82.0771 9.68164 cv 82.2002 9.59375 li 82.1436 9.19336\n"; out << "81.9834 8.82813 81.7178 8.49805 cv 81.4521 8.16797 81.1182 8.00391\n"; out << "80.7178 8.00391 cv 80.2822 8.00391 79.9092 8.19141 79.5986 8.56836 cv\n"; out << "79.29 8.94531 79.1357 9.45117 79.1357 10.0859 cv 79.1357 10.7754 79.2939\n"; out << "11.3125 79.6104 11.6973 cv 79.9287 12.082 80.3291 12.2754 80.8076 12.2754\n"; out << "cv 81.2139 12.2754 81.5479 12.127 81.8076 11.8281 cv 82.0693 11.5313\n"; out << "82.2002 11.1328 82.2002 10.6367 cv 79.6963 10.6367 li cp f newpath\n"; out << "1 setgray 79.6963 10.8906 mo 81.374 10.8906 li 81.3604 11.1484 81.333\n"; out << "11.3301 81.29 11.4355 cv 81.2256 11.5996 81.126 11.7285 80.9971 11.8223 cv\n"; out << "80.8643 11.916 80.7295 11.9629 80.5869 11.9629 cv 80.3662 11.9629 80.1729\n"; out << "11.8691 79.999 11.6797 cv 79.8252 11.4902 79.7256 11.2266 79.6963 10.8906\n"; out << "cv cp f newpath 0 setgray 85.7607 9.65625 mo 85.6611 9.125 85.4717 8.7168\n"; out << "85.1865 8.43164 cv 84.9014 8.14648 84.585 8.00391 84.2412 8.00391 cv\n"; out << "83.8291 8.00391 83.4717 8.19531 83.165 8.58008 cv 82.8604 8.96289 82.7061\n"; out << "9.48047 82.7061 10.1348 cv 82.7061 10.7676 82.876 11.2813 83.2139 11.6777\n"; out << "cv 83.5537 12.0723 83.96 12.2715 84.4346 12.2715 cv 84.79 12.2715 85.083\n"; out << "12.166 85.3135 11.957 cv 85.542 11.7461 85.6572 11.5293 85.6572 11.3047\n"; out << "cv 85.6572 11.1914 85.624 11.1016 85.5596 11.0332 cv 85.4951 10.9648\n"; out << "85.4053 10.9297 85.2881 10.9297 cv 85.1338 10.9297 85.0166 10.9863\n"; out << "84.9365 11.0977 cv 84.8916 11.1582 84.8623 11.2754 84.8486 11.4492\n"; out << "cv 84.833 11.6211 84.7803 11.7539 84.6885 11.8438 cv 84.5947 11.9316\n"; out << "84.4678 11.9766 84.3037 11.9766 cv 84.04 11.9766 83.8291 11.8672 83.667\n"; out << "11.6504 cv 83.4541 11.3633 83.3467 10.9844 83.3467 10.5137 cv 83.3467\n"; out << "10.0313 83.4521 9.60742 83.665 9.24023 cv 83.8779 8.87305 84.1631 8.68945\n"; out << "84.5264 8.68945 cv 84.7842 8.68945 85.0166 8.78711 85.2217 8.98438 cv\n"; out << "85.3662 9.11719 85.5068 9.36328 85.6455 9.7168 cv 85.7607 9.65625 li cp f\n"; out << "newpath 87.3291 13.4746 mo 87.3291 12.1523 li 88.1768 12.1523 li 88.1768\n"; out << "11.8438 li 87.3291 11.8438 li 87.3291 9.23438 li 87.3291 8.97266 87.3623\n"; out << "8.79688 87.4307 8.70703 cv 87.499 8.61523 87.585 8.57031 87.6904 8.57031\n"; out << "cv 87.7764 8.57031 87.8604 8.59961 87.9424 8.66016 cv 88.0244 8.7207\n"; out << "88.0869 8.80859 88.1338 8.92578 cv 88.2861 8.92578 li 88.1943 8.63867\n"; out << "88.0654 8.42383 87.8955 8.27734 cv 87.7275 8.13281 87.5537 8.06055\n"; out << "87.374 8.06055 cv 87.2529 8.06055 87.1338 8.09766 87.0166 8.17188 cv\n"; out << "86.9014 8.24805 86.8154 8.35352 86.7607 8.49414 cv 86.7041 8.63281\n"; out << "86.6768 8.84766 86.6768 9.13672 cv 86.6768 11.8438 li 86.1045 11.8438\n"; out << "li 86.1045 11.9902 li 86.249 12.0527 86.3955 12.1621 86.5498 12.3164\n"; out << "cv 86.7002 12.4707 86.835 12.6523 86.9541 12.8633 cv 87.0146 12.9746\n"; out << "87.0986 13.1777 87.2061 13.4746 cv 87.3291 13.4746 li cp f grestore } def\n"; out << "\n"; } void printLogoDefinitionCCARH(ostream& out) { out << "\%BoundingBox: 0 0 25 24\n"; out << "\%HiResBoundingBox: 0 0 24.0977 23.5040\n"; out << "\%CropBox: 0 0 24.0977 23.5040\n"; out << "/CCARHcolophon { /mo /moveto load def /li /lineto load def /cv /curveto\n"; out << "load def /cp /closepath load def /f /fill load def gsave 0.0 setgray\n"; out << "24.0977 23.5040 translate -1 1 scale 180 rotate -24.0977 0 translate\n"; out << "newpath 0 0 mo 0 23.5039 li 24.0977 23.5039 li 24.0977 0 li cp clip\n"; out << "newpath 21.3477 11.9219 mo 21.189 11.8672 21.0112 11.625 20.8896 11.5137\n"; out << "cv 20.6719 11.3135 20.9517 11.166 21.0781 11.0498 cv 21.2515 10.8906\n"; out << "21.5469 10.5244 21.8047 10.5518 cv 21.9932 10.6787 22.0732 10.9258\n"; out << "22.2573 11.0693 cv 22.5488 11.2949 22.5112 11.4033 22.2407 11.6104 cv\n"; out << "22.0796 11.7344 21.4888 12.4023 21.3477 11.9219 cv cp false setoverprint\n"; out << "f 16.1987 5.13184 mo 16.2178 5.11719 16.2305 5.09473 16.2402 5.07031 cv\n"; out << "16.3706 5.05762 16.3784 5.16699 16.4893 5.17383 cv 16.8193 4.87207 17.1455\n"; out << "4.57031 17.4238 4.21875 cv 17.5898 4.00977 18.2222 3.2998 18.2344 3.03516\n"; out << "cv 18.1978 2.94043 18.1108 2.89453 18.0464 2.82715 cv 18.0347 2.75977\n"; out << "18.0605 2.73145 18.0679 2.68262 cv 18.3223 2.68262 18.6709 3.06152\n"; out << "18.8979 3.18066 cv 18.9019 3.5332 18.1074 3.81152 18.0259 4.17773 cv\n"; out << "18.2827 4.55664 18.7036 4.77344 19.064 5.0498 cv 19.2939 5.00098 19.8232\n"; out << "4.30371 19.749 4.05273 cv 19.6465 3.98926 19.3799 3.90137 19.563 3.74121\n"; out << "cv 19.7935 3.73242 20.2363 4.16699 20.4551 4.28125 cv 20.415 4.42676\n"; out << "19.5083 5.41309 19.417 5.40234 cv 19.3872 5.625 19.061 5.95898 18.9395\n"; out << "6.14941 cv 18.6724 6.56934 18.8379 6.57422 18.7734 7.00098 cv 18.6694\n"; out << "7.02832 18.0186 6.59375 18.0059 6.48242 cv 17.9863 6.32129 18.334\n"; out << "6.07324 18.4204 5.95605 cv 18.5801 5.74023 18.8428 5.55859 18.9395\n"; out << "5.31934 cv 18.6665 5.05469 18.0869 4.68066 17.7144 4.59277 cv 17.4517\n"; out << "4.70313 17.1392 5.31445 17.0298 5.56836 cv 17.043 5.67969 17.2114 5.63574\n"; out << "17.1953 5.77637 cv 17.1675 5.79688 17.1533 5.83105 17.1333 5.85938 cv\n"; out << "16.9624 5.81641 16.1982 5.2959 16.1987 5.13184 cv cp f 18.1914 17.2578\n"; out << "mo 18.2017 17.2529 18.2109 17.2471 18.2202 17.2412 cv 18.21 17.25 18.2007\n"; out << "17.2559 18.1914 17.2578 cv cp f 14.5166 4.03223 mo 14.3486 4.10352 13.3726\n"; out << "3.89844 13.3125 3.69922 cv 13.3452 3.5625 13.5361 3.64063 13.645 3.6582 cv\n"; out << "13.9556 3.25293 13.9087 2.67578 14.1846 2.26758 cv 14.188 1.9834 14.561\n"; out << "1.27051 14.4341 1.02148 cv 14.3604 .920898 14.166 .943359 14.04 .896484\n"; out << "cv 14.04 .833984 14.04 .772461 14.04 .708984 cv 14.2393 .651367 14.6763\n"; out << ".776367 14.8901 .813477 cv 15.3232 .888672 15.7041 1.04199 16.1152 1.1875\n"; out << "cv 16.2563 1.58984 16.3784 1.74805 16.1206 2.12695 cv 15.9355 2.40137\n"; out << "15.668 2.58105 15.3057 2.59863 cv 15.3809 2.97461 15.583 3.30176 15.7578\n"; out << "3.63379 cv 15.832 3.77832 15.9063 3.92383 15.9795 4.06836 cv 16.1621\n"; out << "4.41992 16.147 4.14355 16.3647 4.34375 cv 16.3647 4.39844 16.3647 4.4541\n"; out << "16.3647 4.50879 cv 15.9697 4.55371 15.7476 4.42188 15.4092 4.36426 cv\n"; out << "15.3687 3.98926 14.8911 2.71973 14.5381 2.62012 cv 14.335 2.78906 14.334\n"; out << "3.54492 14.2261 3.80371 cv 14.2861 3.86133 14.4072 3.85742 14.5166 3.86523\n"; out << "cv 14.5166 3.9209 14.5166 3.97656 14.5166 4.03223 cv cp 15.0151 1.10449\n"; out << "mo 14.9214 1.50586 14.6387 1.91016 14.6411 2.34961 cv 14.8555 2.52441\n"; out << "15.2041 2.45215 15.4307 2.3291 cv 15.5977 1.89063 15.707 1.16699 15.0151\n"; out << "1.10449 cv cp f .0239258 13.2715 mo -.0605469 12.9033 .108887 12.5498\n"; out << ".0493164 12.1924 cv -.0327148 11.7012 .0253906 11.042 .106445 10.5518 cv\n"; out << ".250488 9.7168 .408691 8.87402 .688477 8.08105 cv .877441 7.55176 1.13232\n"; out << "6.98926 1.39404 6.48242 cv 1.38428 6.0625 1.73047 5.84082 1.92529 5.53516\n"; out << "cv 2.16943 5.15137 2.39893 4.7168 2.76465 4.44727 cv 2.92188 3.76758\n"; out << "3.76221 3.40039 4.22021 2.85742 cv 4.42041 2.62012 4.67236 2.50586\n"; out << "4.92383 2.30859 cv 5.18359 2.10742 5.74268 1.86621 5.87891 1.58105 cv\n"; out << "6.12988 1.5791 7.47998 1.0957 7.51904 .875977 cv 7.67969 .950195 8.21582\n"; out << ".714844 8.39111 .667969 cv 8.68115 .59082 9.0083 .439453 9.28418 .31543\n"; out << "cv 9.60156 .202148 10.0532 .338867 10.4072 .212891 cv 10.9258 .0283203\n"; out << "11.4917 .0869141 12.0259 .107422 cv 12.1289 0 12.7749 -.0283203 12.9038\n"; out << ".0283203 cv 13.1646 .143555 13.7148 .0859375 14.0474 .141602 cv 14.376\n"; out << ".196289 14.7847 .222656 15.1187 .293945 cv 15.5313 .385742 15.9189\n"; out << ".667969 16.3647 .667969 cv 16.5483 .860352 17.0947 1.01758 17.3408\n"; out << "1.10449 cv 17.5977 1.19434 18.1045 1.40039 18.2544 1.64453 cv 18.6831\n"; out << "1.70313 18.8599 2.10254 19.1919 2.30566 cv 19.5845 2.5459 19.9141 2.87109\n"; out << "20.2686 3.18066 cv 20.2334 3.39551 20.8125 3.84473 20.9951 3.92773 cv\n"; out << "21.1328 4.31348 21.4473 4.65625 21.7031 4.9707 cv 22.2739 5.6709 22.8364\n"; out << "6.6377 23.0581 7.51172 cv 23.1152 7.73828 23.3711 8.40625 23.5288 8.55859\n"; out << "cv 23.5698 8.73047 23.5684 8.90723 23.6997 9.06543 cv 23.8955 9.30078\n"; out << "23.7207 9.7793 23.8496 10.0518 cv 23.9341 10.2285 23.8901 10.3848\n"; out << "23.8833 10.5713 cv 23.874 10.8389 24.0713 10.9199 24.0342 11.1924 cv\n"; out << "23.981 11.5859 24.1367 12.0176 24.0884 12.4199 cv 24.04 12.8477 24.0352\n"; out << "13.29 23.9956 13.7295 cv 23.9634 14.0938 23.8394 14.5303 23.7729 14.8848\n"; out << "cv 23.7012 15.2686 23.4063 15.7285 23.4038 16.0957 cv 23.0811 16.5508\n"; out << "22.7925 17.0996 22.5527 17.6113 cv 22.3999 17.9473 22.1523 18.2354 21.9717\n"; out << "18.5664 cv 21.8765 18.7402 21.7744 18.9268 21.5562 18.9609 cv 21.5195\n"; out << "19.127 21.2778 19.4434 21.1548 19.5254 cv 20.9946 19.6318 20.6445 20.2813\n"; out << "20.4863 20.29 cv 20.2803 20.3018 19.563 20.9551 19.4297 21.123 cv 19.2949\n"; out << "21.2969 19.1777 21.3408 18.96 21.3701 cv 18.8569 21.543 18.7036 21.6748\n"; out << "18.5317 21.7754 cv 18.3452 21.8838 18.1934 21.9736 18.0229 22.0898 cv\n"; out << "17.8423 22.2148 17.5415 22.1826 17.3818 22.3242 cv 16.7993 22.8525\n"; out << "15.7852 22.6699 15.2227 23.1758 cv 14.3022 23.2363 13.3677 23.6143\n"; out << "12.4546 23.4727 cv 12.1069 23.4199 11.8403 23.4854 11.5068 23.4258 cv\n"; out << "11.1938 23.3691 10.8496 23.3027 10.5386 23.2852 cv 9.729 23.2412 8.99951\n"; out << "22.9307 8.19922 22.7559 cv 7.43457 22.5889 6.73438 22.04 6.01807 21.6875\n"; out << "cv 5.33447 21.3516 4.64453 20.9512 4.12256 20.3643 cv 3.9248 20.1416\n"; out << "3.00732 19.5742 3.03418 19.2725 cv 2.65674 19.1904 2.50488 18.665 2.26123\n"; out << "18.4268 cv 2.05762 18.2266 1.74609 17.8096 1.68457 17.5078 cv .60498\n"; out << "16.3359 .363281 14.7754 .0239258 13.2715 cv cp .854004 10.1572 mo .769043\n"; out << "10.5254 .520996 11.2471 .563477 11.5898 cv .525879 12.1514 .716797 12.7324\n"; out << ".635254 13.2832 cv .600586 13.5254 .699707 14.2461 .82666 14.457 cv\n"; out << "1.09082 14.8955 1.04297 15.375 1.3291 15.8037 cv 1.58984 16.1963 1.68994\n"; out << "16.7119 1.89209 17.1338 cv 2.11035 17.5928 2.57422 18.0127 2.91797 18.3789\n"; out << "cv 3.24268 18.7246 3.50732 19.0947 3.84473 19.4385 cv 4.23389 19.8438\n"; out << "4.66211 20.2021 5.0874 20.583 cv 5.35254 20.8203 5.8291 21.0586 6.16797\n"; out << "21.2236 cv 6.5459 21.4072 6.94189 21.7637 7.37354 21.8467 cv 6.36621\n"; out << "21.1885 6.98584 20.0605 7.61719 19.4531 cv 8.09961 18.9893 8.83496 19.0391\n"; out << "9.45068 19.0439 cv 9.78076 19.3818 9.69189 19.7197 9.40869 20.1445 cv\n"; out << "9.33301 20.1299 9.22998 20.1436 9.20166 20.083 cv 9.18066 19.8887 9.30762\n"; out << "19.8428 9.30566 19.667 cv 9.11279 19.3574 8.48584 19.2715 8.18066 19.4258\n"; out << "cv 7.81201 19.6133 7.70264 19.9463 7.53174 20.2822 cv 7.27637 20.7852\n"; out << "7.55078 21.1299 7.76855 21.5566 cv 8.00781 21.6553 8.24219 21.7783\n"; out << "8.50684 21.7939 cv 8.77832 21.8105 8.88818 21.5889 9.11816 21.5977 cv\n"; out << "9.17529 21.6377 9.21533 21.6953 9.20166 21.8057 cv 8.91113 21.9795 8.5874\n"; out << "22.2402 8.2251 22.1299 cv 8.12988 22.1016 7.70459 21.9824 7.62354 22.0137\n"; out << "cv 8.354 22.4736 9.26807 22.6924 10.0864 22.7627 cv 10.877 22.8301 11.7007\n"; out << "23.127 12.5083 23.0156 cv 12.8657 22.9668 13.126 23.0898 13.499 22.9893 cv\n"; out << "13.7593 23.0244 14.1968 22.915 14.4546 22.8438 cv 14.7881 22.752 15.1011\n"; out << "22.6357 15.4468 22.5654 cv 15.6289 22.5283 16.1499 22.4697 16.2817 22.3457\n"; out << "cv 15.793 22.3047 15.1064 20.8906 14.6411 21.0791 cv 14.5264 21.4365\n"; out << "14.9102 21.9043 14.7866 22.2627 cv 14.8892 22.3174 15.1211 22.1445\n"; out << "15.1392 22.3457 cv 15.0518 22.541 13.9385 22.7305 13.9561 22.4902 cv\n"; out << "14.04 22.4492 14.1108 22.3965 14.2056 22.3662 cv 14.3364 21.9795 14.1602\n"; out << "21.3965 14.1221 20.9961 cv 14.103 20.792 14.061 20.5928 14.04 20.3936 cv\n"; out << "14.0156 20.1787 13.8735 19.8545 13.894 19.6465 cv 13.7646 19.6025 13.4746\n"; out << "19.7393 13.3745 19.6045 cv 13.4673 19.2861 14.1133 19.4844 14.2676 19.2725\n"; out << "cv 13.8247 19.249 13.4165 19.4629 12.98 19.501 cv 12.6099 19.5332 12.3003\n"; out << "19.457 11.9419 19.418 cv 11.2109 19.3389 10.5034 19.3398 9.76172 19.1895\n"; out << "cv 9.29199 18.7109 8.42871 18.7744 7.92236 18.3184 cv 7.80371 18.2119\n"; out << "7.00439 17.5957 6.93799 17.6113 cv 6.94971 17.4111 6.05518 16.8721 5.89551\n"; out << "16.6914 cv 5.69385 16.4648 5.53369 16.1816 5.2915 15.9902 cv 4.67041 15.5\n"; out << "4.53613 14.7471 4.40479 14.0195 cv 4.39307 13.9834 4.30615 14.0215 4.30078\n"; out << "13.9775 cv 4.354 13.5557 4.21338 12.9434 4.10742 12.5303 cv 4.0415 12.2715\n"; out << "4.04346 11.5146 4.11426 11.2578 cv 4.30762 10.832 4.10254 10.3809 4.20898\n"; out << "9.94824 cv 4.31885 9.50098 4.26465 9.07031 4.40479 8.62109 cv 4.53174\n"; out << "8.20898 4.58789 7.93457 4.87988 7.72559 cv 5.03271 7.61523 5.16357 7.45215\n"; out << "5.33887 7.375 cv 5.41357 7.02344 5.60889 7.16016 5.8374 6.95898 cv 5.91113\n"; out << "6.56055 6.41992 6.04004 6.77197 5.95508 cv 7.19482 5.85254 7.15186 5.31152\n"; out << "7.47803 5.21582 cv 7.53809 5.23242 7.49072 5.35449 7.58154 5.33984 cv\n"; out << "7.86621 5.31934 8.08252 4.96094 8.3291 4.8623 cv 8.65381 4.73242 9.00684\n"; out << "4.71191 9.32471 4.57227 cv 10.0332 4.25879 10.8457 4.19629 11.583 4.06934\n"; out << "cv 11.9971 3.99805 12.5298 4.0752 12.9331 4.14355 cv 13.3838 4.21973\n"; out << "13.8179 4.25977 14.2593 4.42383 cv 14.4453 4.49316 14.6216 4.59863\n"; out << "14.7451 4.75879 cv 14.9893 4.78809 15.1328 4.79785 15.3467 4.92676 cv\n"; out << "15.645 5.10547 16.0825 5.50586 16.4268 5.50586 cv 16.4404 5.59668 17.0645\n"; out << "6.10742 17.1333 6.16992 cv 17.333 6.41992 17.7124 6.47656 17.8394 6.79297\n"; out << "cv 18.1401 6.91699 18.4243 7.2627 18.5942 7.48145 cv 18.7715 7.71094\n"; out << "19.0532 7.81152 19.1611 8.09473 cv 19.3613 8.61816 19.9194 9.34277\n"; out << "19.895 9.89648 cv 19.8818 10.1982 20.0664 10.5205 20.0811 10.8428 cv\n"; out << "20.0923 11.0781 20.0698 11.3291 20.0752 11.5684 cv 20.1006 12.8828\n"; out << "20.1953 14.1016 19.6299 15.3232 cv 19.4429 15.7275 19.1021 16.3467\n"; out << "18.687 16.5586 cv 18.5293 16.6387 18.333 17.1406 18.2202 17.2412 cv\n"; out << "18.2109 17.2471 18.2017 17.2529 18.1914 17.2578 cv 18.2007 17.2559 18.21\n"; out << "17.25 18.2202 17.2412 cv 18.3994 17.124 18.439 16.8672 18.6904 16.8223 cv\n"; out << "18.8564 16.9473 18.9414 17.334 19.0874 17.5127 cv 19.2197 17.6748 19.3105\n"; out << "17.8525 19.4146 18.0322 cv 19.6401 18.4219 20.0811 18.9551 20.4761 19.168\n"; out << "cv 20.6025 19.1904 20.6172 19.1025 20.7251 19.1064 cv 20.8145 19.1006\n"; out << "20.7935 19.2041 20.8706 19.21 cv 20.8726 19.0303 21.3921 18.4766 21.5303\n"; out << "18.334 cv 21.7363 18.1221 21.8184 17.7822 21.9717 17.5078 cv 22.0903\n"; out << "17.2949 22.3799 17.1816 22.4692 16.9883 cv 22.4692 16.623 22.6533 16.4141\n"; out << "22.7227 16.0693 cv 22.7656 15.8564 22.8877 15.5664 23.0098 15.3896 cv\n"; out << "23.2827 14.9922 23.291 14.3037 23.3306 13.8223 cv 23.3765 13.2725 23.646\n"; out << "12.748 23.5249 12.1953 cv 23.4565 11.8818 23.522 11.5996 23.5239 11.2861\n"; out << "cv 23.5249 11.0977 23.4038 11.0088 23.3828 10.8213 cv 23.3398 10.4287\n"; out << "23.2559 10.0908 23.1953 9.7002 cv 23.144 9.35547 22.9067 9.06836 22.8638\n"; out << "8.72461 cv 22.7749 8.03125 22.3423 7.58398 22.1357 6.93164 cv 21.9482\n"; out << "6.34082 21.5039 5.4209 21.0581 5.04883 cv 20.8638 4.88672 20.9121 4.71973\n"; out << "20.71 4.52539 cv 20.4746 4.29785 20.3911 3.97949 20.1074 3.81543 cv\n"; out << "19.811 3.64258 19.7236 3.40137 19.498 3.17773 cv 19.3237 3.00586 19.1235\n"; out << "2.93848 19.0132 2.7334 cv 18.7832 2.30859 17.9805 2.2168 17.7549 1.79102\n"; out << "cv 17.6807 1.65234 17.3408 1.45996 17.1953 1.33203 cv 16.9907 1.36719\n"; out << "16.7749 1.24023 16.604 1.17676 cv 16.1328 1.00293 15.5801 .760742\n"; out << "15.0771 .647461 cv 14.5215 .521484 13.8774 .486328 13.3125 .501953\n"; out << "cv 12.7485 .513672 12.2129 .360352 11.6445 .394531 cv 11.2383 .418945\n"; out << "10.8638 .583008 10.4702 .668945 cv 10.1631 .736328 9.87207 .668945 9.5874\n"; out << ".763672 cv 9.13037 .916016 8.64209 .954102 8.18408 1.10449 cv 8.15527\n"; out << "1.49609 8.37598 1.80859 8.43311 2.18359 cv 8.36279 2.19727 8.32617\n"; out << "2.24316 8.22559 2.22559 cv 8.12256 2.13379 8.10156 1.96191 8.01709\n"; out << "1.85156 cv 6.89795 1.68945 6.72754 3.16699 7.28076 3.79785 cv 7.67969\n"; out << "4.25293 8.07568 4.31641 8.63184 4.08203 cv 8.83789 3.99512 9.12354 3.29199\n"; out << "9.32568 3.4502 cv 9.55811 3.85352 8.72656 4.68066 8.39111 4.80762 cv\n"; out << "7.74707 5.05078 7.0625 4.81348 6.81396 4.14551 cv 6.69531 3.82813 6.61475\n"; out << "3.63379 6.56494 3.30566 cv 6.51416 2.98438 6.67822 2.74902 6.66846 2.43262\n"; out << "cv 6.87256 2.25 6.9043 1.95508 7.104 1.76855 cv 7.31055 1.5752 7.58057\n"; out << "1.43164 7.81006 1.25 cv 7.15234 1.51465 6.56299 1.80859 5.94092 2.16309 cv\n"; out << "5.4834 2.4248 4.71875 2.70605 4.50879 3.24219 cv 4.54541 3.24805 4.6123\n"; out << "3.18457 4.6333 3.24219 cv 4.7251 3.40527 5.11572 3.89551 5.13135 4.07324\n"; out << "cv 5.0791 4.13867 5.02148 4.19922 4.92383 4.21875 cv 4.67236 4.09277\n"; out << "4.6499 3.74219 4.31348 4.02148 cv 4.09229 4.20508 3.91846 4.47754 3.80273\n"; out << "4.7373 cv 3.97559 5.26074 4.42578 6.66211 5.30811 6.19629 cv 5.61377\n"; out << "6.03516 5.98242 5.91797 6.05225 5.52539 cv 6.08398 5.34863 6.1582 4.92773\n"; out << "6.37793 5.21582 cv 6.22363 5.61914 6.28223 5.92969 6.05371 6.33203 cv\n"; out << "5.94873 6.5166 5.7793 6.71387 5.57813 6.80566 cv 5.16113 6.99609 4.56641\n"; out << "7 4.28027 6.62695 cv 4.11182 6.39941 3.85986 6.29102 3.72559 6.00977 cv\n"; out << "3.57275 5.69043 3.48877 5.34277 3.50195 4.98828 cv 3.52637 4.30078 3.9165\n"; out << "3.7373 4.40479 3.28418 cv 3.82178 3.3584 3.24121 4.4209 2.86816 4.7793 cv\n"; out << "2.7334 5.2666 2.21875 5.59082 2.01709 6.06738 cv 1.84814 6.4668 1.58008\n"; out << "6.90137 1.52734 7.3252 cv 1.47217 7.7627 1.15771 8.07227 1.14111 8.5332\n"; out << "cv 1.13135 8.79688 .992676 9 .937012 9.24316 cv .869141 9.54492 .925293\n"; out << "9.85547 .854004 10.1572 cv cp 4.86182 9.86621 mo 4.3916 10.3623 4.74707\n"; out << "11.6514 4.67432 12.2744 cv 4.60742 12.4541 4.78174 12.7773 4.75586 12.9902\n"; out << "cv 4.70117 13.4346 4.83984 13.6387 4.90283 14.0605 cv 4.96289 14.4541\n"; out << "4.94727 14.7539 5.19238 15.0586 cv 5.29932 15.1924 5.64551 15.6426 5.81689\n"; out << "15.6592 cv 6.25781 15.3047 6.02832 14.4541 6.48096 14.123 cv 6.48096\n"; out << "13.6719 6.24365 13.583 5.99609 13.2461 cv 5.8457 13.042 5.79395 12.71\n"; out << "5.69238 12.4824 cv 5.75977 12.1523 5.57813 11.2891 5.98291 11.1328 cv\n"; out << "5.97949 10.8008 6.23779 10.5928 6.29443 10.2822 cv 6.34619 10.2949 6.63672\n"; out << "10.0371 6.64746 9.99121 cv 6.39307 9.70215 6.22461 9.54004 6.01611 9.23828\n"; out << "cv 5.78369 8.90039 5.60889 8.58008 5.33887 8.24707 cv 4.63135 8.24707\n"; out << "4.9209 9.43945 4.86182 9.86621 cv cp 5.54688 7.97656 mo 5.56787 8.27734\n"; out << "7.57129 8.11816 7.83154 8.10156 cv 7.50928 6.72656 9.53076 6.40137 10.4058\n"; out << "6.19141 cv 10.5083 5.97754 10.4521 5.86914 10.6025 5.66602 cv 10.6909\n"; out << "5.54785 10.7715 5.4248 10.8433 5.29492 cv 10.9546 5.09375 11.1914 4.9248\n"; out << "11.2163 4.67578 cv 11.0146 4.37695 9.82568 4.89453 9.53809 4.92773 cv\n"; out << "9.17285 4.9707 8.87793 5.19531 8.54102 5.32031 cv 8.35059 5.39063 7.98242\n"; out << "5.47656 7.83252 5.60059 cv 7.35498 5.99805 6.76074 6.27441 6.38818 6.81445\n"; out << "cv 6.27881 6.97363 6.05664 7.40918 5.8374 7.45801 cv 5.83936 7.56055\n"; out << "5.62061 7.90625 5.54688 7.97656 cv cp 6.51074 15.1084 mo 6.37354 15.3525\n"; out << "6.13086 15.6064 6.12842 15.9092 cv 6.29639 16.0205 6.44385 15.917 6.59375\n"; out << "15.8408 cv 6.78418 15.7441 7.00391 15.8047 7.20898 15.8096 cv 7.54102\n"; out << "15.8184 7.92188 15.7725 8.10059 15.4521 cv 8.04492 15.0664 8.2124 14.7441\n"; out << "8.18408 14.3926 cv 7.69531 14.5391 7.45557 14.1699 7.04199 14.1025 cv\n"; out << "6.93506 14.4932 6.70068 14.7715 6.51074 15.1084 cv cp 7.66504 8.5166 mo\n"; out << "7.33105 8.4541 6.31445 8.34375 6.04541 8.6416 cv 6.01953 8.91504 6.86279\n"; out << "9.97559 7.14697 9.79395 cv 7.32031 9.68262 7.95703 9.72168 7.75586 9.33984\n"; out << "cv 7.58887 9.02148 7.75586 8.83887 7.66504 8.5166 cv cp 6.64893 10.918\n"; out << "mo 6.37256 11.1543 6.26221 11.5889 6.25293 11.9639 cv 6.24268 12.3525\n"; out << "6.55566 13.0186 6.82617 13.2793 cv 7.18457 13.626 7.57227 13.9658 8.12207\n"; out << "13.8945 cv 8.36963 13.71 8.42725 13.8213 8.70313 13.749 cv 8.85547 13.71\n"; out << "8.91357 13.4785 9.09814 13.5205 cv 9.27441 13.3232 9.97119 13.2402 9.99023\n"; out << "13.002 cv 9.41602 12.9688 8.35791 13.6035 7.83154 13.251 cv 7.79004 13.207\n"; out << "7.81494 13.1133 7.83154 13.0635 cv 8.4917 12.9795 9.1875 12.8916 9.82471\n"; out << "12.7324 cv 9.12549 12.7314 8.38818 12.7451 7.66504 12.7939 cv 7.62207\n"; out << "12.7061 7.50732 12.6885 7.49805 12.5664 cv 7.9502 12.4688 8.47314 12.457\n"; out << "8.95215 12.5039 cv 9.05469 12.5137 9.96045 12.4785 9.99023 12.4199 cv\n"; out << "9.96582 12.2168 8.62061 12.2773 8.49023 12.2588 cv 8.26318 12.2275 7.24609\n"; out << "12.4297 7.3125 11.9844 cv 7.68701 11.668 9.84473 12.4219 9.99023 11.9434\n"; out << "cv 9.32813 11.5947 8.33936 11.9121 7.62305 11.6943 cv 7.63623 11.624\n"; out << "7.59668 11.501 7.64355 11.4658 cv 7.92773 11.4668 10.2388 11.8076 10.3438\n"; out << "11.5273 cv 10.0908 11.2168 9.40088 11.4121 9.06836 11.3359 cv 8.68701\n"; out << "11.25 8.12695 11.1318 7.72656 11.1748 cv 7.68408 11.0869 7.58545 10.9883\n"; out << "7.64355 10.8633 cv 8.01709 10.8896 9.83447 11.3818 10.0732 11.1123 cv\n"; out << "10.0659 10.999 8.86963 10.8516 8.66406 10.834 cv 8.47754 10.8184 7.85986\n"; out << "10.6729 8.3291 10.4688 cv 8.66455 10.5967 9.09619 10.6289 9.47119 10.7178\n"; out << "cv 9.51074 10.6357 7.65283 9.89844 7.39209 10.3408 cv 7.30127 10.4951\n"; out << "7.02686 10.3877 6.89063 10.5723 cv 6.80762 10.6855 6.75781 10.8242\n"; out << "6.64893 10.918 cv cp 7.58936 16.2148 mo 7.30322 16.2051 6.51514 16.042\n"; out << "6.29443 16.3037 cv 6.30469 16.6191 7.05029 17.1729 7.29102 17.3828 cv\n"; out << "7.78857 17.8184 8.39355 18.001 8.93164 18.3379 cv 9.28174 18.5596 9.82568\n"; out << "18.7217 10.2188 18.7949 cv 10.9111 18.9258 11.75 19.168 12.4609 19.0234\n"; out << "cv 12.6499 18.6787 12.0449 18.5801 12.0259 18.2549 cv 11.8398 18.1006\n"; out << "11.6777 17.9189 11.5474 17.7148 cv 11.5664 17.5977 11.5386 17.4941\n"; out << "11.4639 17.4043 cv 11.3154 17.4404 11.1699 17.4893 11.0283 17.5488 cv\n"; out << "10.8403 17.5225 10.6538 17.5293 10.4683 17.5703 cv 10.1768 17.4473 9.93701\n"; out << "17.5547 9.69971 17.3203 cv 9.29102 17.2637 8.88281 16.8857 8.65967 16.582\n"; out << "cv 8.62061 16.5303 8.38721 16.165 8.3291 16.1582 cv 8.03955 16.042 7.87939\n"; out << "16.2256 7.58936 16.2148 cv cp 8.22363 8.2041 mo 8.19189 8.49023 8.15771\n"; out << "8.7959 8.12207 9.09766 cv 8.39307 9.44141 8.60596 9.84668 9.09814 9.9082\n"; out << "cv 9.11865 9.6377 8.72119 9.59473 8.68262 9.36816 cv 8.59131 8.85059\n"; out << "9.10303 9.4209 9.16016 9.49219 cv 9.38281 9.77734 9.60498 10.4189\n"; out << "10.0317 10.4893 cv 10.0415 9.80078 8.86816 9.43359 8.95215 8.72461 cv\n"; out << "9.00391 8.72754 9.0166 8.69141 9.05615 8.68262 cv 9.42871 8.8418 9.5791\n"; out << "9.44434 9.88672 9.7207 cv 9.89111 9.76074 9.86279 9.7666 9.86572 9.80469\n"; out << "cv 10.1445 9.85449 10.4502 10.5918 10.5713 10.5518 cv 10.6367 10.2285\n"; out << "9.98096 9.37598 9.7207 9.20215 cv 9.61621 8.95313 9.49658 8.73535 9.30566\n"; out << "8.54492 cv 9.14209 8.38184 9.34814 8.13379 9.52979 8.29297 cv 9.74023\n"; out << "8.47656 10.9541 10.7637 11.2363 10.6143 cv 11.332 10.5986 11.3125 10.4688\n"; out << "11.3608 10.4063 cv 11.2744 10.1777 10.9038 10.0566 10.9038 9.8252 cv\n"; out << "10.668 9.61914 10.5259 9.34863 10.3682 9.09473 cv 10.1934 8.8125 9.52393\n"; out << "8.25195 9.6582 7.89355 cv 9.97559 7.77637 10.2861 8.52246 10.438 8.7041 cv\n"; out << "10.6948 9.0127 11.0459 9.73145 11.4229 9.8877 cv 11.4863 9.72949 11.2559\n"; out << "9.69824 11.3188 9.47168 cv 10.8369 9.22168 10.1924 8.32715 9.96973 7.79004\n"; out << "cv 10.0166 7.72656 10.0405 7.63965 10.1563 7.64453 cv 10.4814 8.14746\n"; out << "10.8501 8.72754 11.2983 9.13965 cv 11.4375 8.67676 10.4834 8.18066\n"; out << "10.4258 7.79004 cv 10.4604 7.70703 10.5229 7.65137 10.6543 7.66504 cv\n"; out << "10.894 7.90234 11.1362 8.2041 11.2842 8.49023 cv 11.3481 8.61426 11.3306\n"; out << "8.90918 11.5684 8.87012 cv 11.7939 8.60938 11.2622 7.46582 11.1533 7.1875\n"; out << "cv 10.9702 6.97852 10.6909 6.85156 10.4238 6.7998 cv 10.2393 6.76367\n"; out << "9.77002 6.91016 9.65186 6.83105 cv 9.3833 6.65039 8.7417 7.43262 8.55762\n"; out << "7.54102 cv 8.48877 7.81836 8.25391 7.92773 8.22363 8.2041 cv cp 9.32568\n"; out << "14.04 mo 9.18359 14.293 8.92725 14.4424 8.68262 14.5801 cv 8.40039 15.1963\n"; out << "8.7124 15.7217 9.09521 16.1914 cv 9.83496 17.0986 11.2012 17.3164 12.0459\n"; out << "16.3242 cv 12.1079 15.8984 12.3433 15.3887 12.3081 14.9678 cv 12.2871\n"; out << "14.7295 12.5273 14.4316 12.4819 14.2275 cv 12.4546 14.1855 12.4243 14.1465\n"; out << "12.3364 14.1641 cv 12.2744 14.2197 12.2646 14.3281 12.2544 14.4346 cv\n"; out << "12.1934 14.4365 12.1172 14.4229 12.0879 14.4551 cv 11.8359 14.9111 11.9067\n"; out << "15.6172 11.6304 16.1162 cv 11.1479 16.1514 11.4834 15.3184 11.6724 15.1816\n"; out << "cv 11.6895 14.9521 12.0015 14.3555 11.9209 14.1641 cv 11.6191 14.1348\n"; out << "11.2095 15.9365 11.0283 16.1992 cv 10.9512 16.2285 10.7832 16.2412\n"; out << "10.7588 16.1582 cv 10.6709 16.0234 11.1084 15.2451 11.2163 15.1611\n"; out << "cv 11.1528 14.8203 11.4619 14.5137 11.5068 14.1855 cv 11.0024 14.1523\n"; out << "10.9683 16.29 10.4058 16.2197 cv 10.1558 16.0557 10.5303 15.2891 10.7051\n"; out << "15.1807 cv 10.8022 15.1201 11.1509 14.1357 11.0493 14.0605 cv 11.0239\n"; out << "14.0596 10.7642 14.4043 10.7588 14.4141 cv 10.7588 14.9619 10.29 15.541\n"; out << "10.1768 16.0957 cv 10.0938 16.1475 9.96191 16.0977 9.92773 16.0332 cv\n"; out << "10.0083 15.7246 9.97314 15.375 10.2397 15.0986 cv 10.3599 14.666 10.749\n"; out << "14.2656 10.7793 13.8115 cv 10.5479 13.8018 10.125 14.7119 10.0732 14.9121\n"; out << "cv 9.69385 15.0303 9.86035 15.6709 9.40869 15.7012 cv 8.95215 15.4326\n"; out << "10.4268 14.1211 10.4468 13.666 cv 10.1577 13.6348 10.0801 14.2842 9.78271\n"; out << "14.3301 cv 9.72314 14.5586 9.18408 15.2012 8.93164 15.1816 cv 8.59619\n"; out << "14.7549 10.1602 13.9287 10.1768 13.4795 cv 9.91895 13.4795 9.63184 13.9629\n"; out << "9.32568 14.04 cv cp 11.6104 5.00781 mo 11.3032 4.94531 10.7998 6.11719\n"; out << "10.6963 6.33691 cv 10.8555 6.51465 11.0288 6.65039 11.2778 6.66895 cv\n"; out << "11.3813 6.77832 11.4131 6.95313 11.5889 6.98047 cv 11.8462 6.69824\n"; out << "12.0156 6.40234 12.2544 6.12891 cv 12.2813 5.87695 11.7568 5.22168\n"; out << "11.6104 5.00781 cv cp 10.8628 12.0674 mo 10.96 12.457 11.2617 12.8203\n"; out << "11.6162 12.9746 cv 12.2207 13.2373 12.3916 13.1006 12.8584 12.6416 cv\n"; out << "13.2114 12.2949 13.146 11.4619 12.6763 11.2314 cv 12.4639 11.127 12.3418\n"; out << "10.9473 12.0894 10.9102 cv 11.77 10.8613 11.5239 11.0615 11.2363 11.1328\n"; out << "cv 11.0415 11.4209 10.8428 11.6797 10.8628 12.0674 cv cp 13.2085 4.61328\n"; out << "mo 13.1191 4.66016 11.521 4.30859 11.8945 4.76367 cv 12.1294 5.05078\n"; out << "12.583 5.45996 12.6689 5.81738 cv 12.8447 5.92969 13.0928 5.83594 13.271\n"; out << "5.77637 cv 13.4253 5.89941 13.5527 5.90039 13.7798 5.89844 cv 14.0605\n"; out << "5.89551 14.2446 5.94629 14.5034 6.10059 cv 14.7056 6.22168 14.9292 6.24512\n"; out << "15.1099 6.41602 cv 15.2734 6.57129 15.3506 6.79199 15.5269 6.90039 cv\n"; out << "16.0962 7.25 15.7993 7.98242 16.6763 7.70703 cv 16.9404 7.86035 17.1821\n"; out << "7.59668 17.4434 7.7041 cv 17.5913 7.76563 17.8623 7.77637 18.0259 7.70703\n"; out << "cv 18.1724 7.29297 17.1953 6.74512 16.9463 6.56445 cv 16.7441 6.42969\n"; out << "16.6533 6.17871 16.3857 6.08789 cv 16.353 5.86035 16.0386 5.88086\n"; out << "15.9287 5.67188 cv 15.4165 5.68066 14.9468 4.94043 14.4341 4.96582\n"; out << "cv 14.0625 5.13477 14.1831 4.85254 13.8623 4.78027 cv 13.7402 4.77148\n"; out << "13.6196 4.77832 13.499 4.80078 cv 13.4131 4.7207 13.3164 4.6582 13.2085\n"; out << "4.61328 cv cp 11.7974 17.1963 mo 11.9463 17.4414 12.2129 17.8125 12.3989\n"; out << "18.0264 cv 12.5171 18.1631 12.6431 18.6934 12.8354 18.6914 cv 13.0049\n"; out << "18.5508 12.9336 18.166 13.188 18.1094 cv 13.2905 17.8135 13.564 17.6338\n"; out << "13.583 17.2998 cv 13.2363 17.1719 12.6387 16.8711 12.5854 16.4697 cv\n"; out << "12.3882 16.4697 11.916 17.0117 11.7974 17.1963 cv cp 12.1494 8.03906 mo\n"; out << "12.1362 8.07422 12.1436 8.72168 12.2114 8.72461 cv 12.3711 8.77637 12.6909\n"; out << "7.75586 12.6895 7.62402 cv 13.355 7.38574 12.3438 9.06836 12.3364 9.26465\n"; out << "cv 12.6289 9.31836 12.814 8.60938 12.8145 8.41309 cv 13.0161 8.11719\n"; out << "13.2397 7.77637 13.3745 7.43652 cv 13.4692 7.39258 13.6563 7.41309\n"; out << "13.707 7.47852 cv 13.7393 7.69824 13.1958 8.30859 13.0923 8.56543 cv\n"; out << "12.9468 8.92285 12.7061 9.29785 12.5854 9.7002 cv 12.6289 9.74609 12.6543\n"; out << "9.81152 12.752 9.80469 cv 12.9082 9.53418 13.7583 7.3418 14.1846 7.45801\n"; out << "cv 14.2417 7.59863 14.1831 7.78711 14.0859 7.97656 cv 13.9561 8.22949\n"; out << "13.7578 8.48535 13.6743 8.63477 cv 13.4355 9.06641 13.0586 9.5791 12.98\n"; out << "10.0742 cv 13.2344 10.0439 13.6934 8.76953 13.8369 8.52637 cv 13.9365\n"; out << "8.35645 13.9966 8.15527 14.0859 7.97656 cv 14.1152 7.91699 14.1484\n"; out << "7.85938 14.187 7.80664 cv 14.3086 7.6416 14.5034 7.73242 14.4565 7.9248 cv\n"; out << "14.3975 8.1709 14.2305 8.37891 14.1431 8.61523 cv 14.0669 8.82129 13.8306\n"; out << "9.05762 13.8315 9.28516 cv 13.668 9.43262 13.3042 10.0029 13.3125 10.2197\n"; out << "cv 13.6958 10.168 13.9658 9.40332 14.0928 9.12109 cv 14.1772 8.93262\n"; out << "14.6514 7.90723 14.8076 7.91504 cv 15.2251 7.93359 14.6455 8.73438\n"; out << "14.5947 8.85449 cv 14.3862 9.35059 14.0156 9.72949 13.9355 10.2822 cv\n"; out << "14.1899 10.0898 14.6172 8.7832 14.9736 8.80762 cv 15.4736 8.84277 14.3354\n"; out << "10.0605 14.4546 10.1152 cv 14.6279 10.002 14.7432 9.81152 14.8901 9.67969\n"; out << "cv 15.0342 9.65527 15.1841 9.59668 15.2534 9.45703 cv 15.4429 9.0752\n"; out << "15.2769 8.46484 15.4927 8.10156 cv 15.3262 7.87109 15.3306 7.60352\n"; out << "15.1372 7.3916 cv 14.9751 7.21484 15.084 7.08691 14.8447 6.95215 cv\n"; out << "14.707 6.8877 14.5703 6.82031 14.4341 6.75195 cv 14.0991 6.55078 13.6714\n"; out << "6.45313 13.271 6.52344 cv 12.9375 6.41895 12.7129 6.74023 12.4399 6.85547\n"; out << "cv 12.1279 7.27441 12.145 7.57031 12.1494 8.03906 cv cp 12.6895 14.8086\n"; out << "mo 12.7935 15.1191 12.9263 15.8408 12.8555 16.1582 cv 13.1611 16.4551\n"; out << "13.4722 16.71 13.8672 16.8301 cv 14.1245 16.9092 14.6802 16.9727 14.8994\n"; out << "16.8252 cv 15.146 16.6592 15.2393 16.7705 15.46 16.5127 cv 15.5786 16.3643\n"; out << "15.7007 16.2188 15.8247 16.0752 cv 15.9458 16.0518 16.1621 15.373 16.166\n"; out << "15.2334 cv 16.1792 14.8682 15.9185 14.6328 15.8667 14.3096 cv 15.5688\n"; out << "14.165 15.3384 13.7861 14.9941 13.749 cv 14.9941 13.6113 14.687 13.4531\n"; out << "14.5791 13.5 cv 14.7988 13.8076 15.0137 14.127 15.3057 14.3721 cv 15.3589\n"; out << "14.625 15.6836 14.5625 15.6377 14.8711 cv 15.5581 14.8945 15.5078 14.9482\n"; out << "15.3887 14.9326 cv 15.145 14.6348 14.8579 14.3682 14.6416 14.0742 cv\n"; out << "14.5244 13.915 14.2266 13.417 14.0181 13.417 cv 14.2524 13.8809 14.6201\n"; out << "14.252 14.9155 14.6738 cv 15.0391 14.8506 15.3896 15.0996 15.3887 15.3477\n"; out << "cv 15.3726 15.3525 15.3647 15.3652 15.3677 15.3896 cv 15.2646 15.4561\n"; out << "15.1606 15.3682 15.0571 15.3691 cv 14.8628 15.1084 14.0747 13.6221\n"; out << "13.7485 13.6455 cv 13.7373 13.9336 14.2451 14.4688 14.4243 14.6719 cv\n"; out << "14.5767 14.8447 15.0728 15.3896 15.1187 15.5967 cv 15.0498 15.7041 14.9795\n"; out << "15.8379 14.7866 15.7637 cv 14.4331 15.0576 13.8594 14.5137 13.499 13.832\n"; out << "cv 13.4243 13.8203 13.3604 13.7969 13.2925 13.832 cv 13.2627 14.1367\n"; out << "13.9624 14.6426 14.0713 14.9717 cv 14.1611 15.2461 14.9458 15.7813 14.7866\n"; out << "16.0957 cv 14.3101 16.1709 14.1348 15.3711 13.8521 15.1816 cv 13.729\n"; out << "14.8906 13.2803 14.0332 12.959 14.0195 cv 12.9336 14.3262 13.6597 15.2266\n"; out << "13.8521 15.4307 cv 13.9258 15.6631 14.686 16.2402 14.1221 16.2822 cv\n"; out << "13.8237 15.8105 13.0425 15.0986 13.0425 14.5176 cv 12.8906 14.5176 12.9292\n"; out << "14.3262 12.752 14.3516 cv 12.7383 14.5342 12.8848 14.5527 12.98 14.6631 cv\n"; out << "13.0146 14.9004 13.1626 15.082 13.2759 15.291 cv 13.3999 15.5205 13.8682\n"; out << "16.124 13.8315 16.3857 cv 13.1304 16.5117 13.2378 14.8154 12.6895 14.8086\n"; out << "cv cp 13.9976 17.5078 mo 13.8042 18.0068 13.1841 18.4863 13.1465 19.0234\n"; out << "cv 13.4575 19.2236 14.3135 18.7959 14.6411 18.7266 cv 15.1982 18.6084\n"; out << "15.939 18.2686 16.4375 17.9707 cv 17.3716 17.4102 18.2881 16.6377 18.7939\n"; out << "15.6387 cv 18.7788 15.6348 18.7695 15.6211 18.7734 15.5967 cv 18.2485\n"; out << "15.2871 17.5264 15.8096 16.9878 15.5146 cv 16.627 15.9883 16.4136 16.6035\n"; out << "15.896 16.9277 cv 15.5962 17.1152 15.3022 17.3057 14.9531 17.3828 cv\n"; out << "14.6392 17.4531 14.3062 17.4072 13.9976 17.5078 cv cp 14.9321 11.1953\n"; out << "mo 14.7593 11.0938 13.6592 11.1807 14.0415 11.4014 cv 14.5376 11.6865\n"; out << "16.6406 10.8467 16.8428 11.5068 cv 16.7017 11.7422 15.5815 11.6484 15.3477\n"; out << "11.5898 cv 15.0244 11.7402 14.3467 11.6963 13.9771 11.6943 cv 13.9761\n"; out << "11.7842 13.9644 11.8857 14.0181 11.9219 cv 14.561 11.7715 15.1899 11.8242\n"; out << "15.7368 11.8232 cv 15.8501 11.8223 17.0825 11.6943 16.7178 12.0674 cv\n"; out << "16.3296 11.9961 15.9297 12.084 15.5391 12.0684 cv 15.2886 12.0586 14.9639\n"; out << "12.2051 14.7246 12.0879 cv 14.5713 12.248 13.7002 12 13.9771 12.3994 cv\n"; out << "14.437 12.5273 15.1069 12.292 15.5762 12.2744 cv 15.7642 12.2695 16.8501\n"; out << "12.0781 16.8008 12.3584 cv 16.7524 12.6396 14.48 12.6172 14.2056 12.6904\n"; out << "cv 14.1963 12.8057 14.1782 12.8389 14.2466 12.8975 cv 14.3501 12.9287\n"; out << "14.5713 12.7881 14.7041 12.7939 cv 14.8872 12.8018 15.0698 12.8135 15.25\n"; out << "12.7168 cv 15.375 12.6484 15.7964 12.71 15.9497 12.7109 cv 16.2754 12.7109\n"; out << "16.5317 12.7373 16.8628 12.6484 cv 17.4023 13.1934 15.1294 12.833 15.1392\n"; out << "13.1055 cv 15.7822 13.5234 16.4917 13.6016 17.1333 13.168 cv 17.5098\n"; out << "12.916 17.9121 12.2148 17.8198 11.7324 cv 17.7153 11.1836 17.6675 10.333\n"; out << "16.9883 10.0732 cv 16.3091 9.81348 15.5156 9.92871 14.9116 10.4277 cv\n"; out << "15.2632 10.3887 15.6865 10.2959 16.0313 10.3047 cv 16.3984 10.3135 16.4077\n"; out << "10.627 16.0264 10.5957 cv 15.8169 10.5791 15.3872 10.6494 15.2026 10.7295\n"; out << "cv 14.9229 10.8506 14.6089 10.5352 14.3711 10.6973 cv 14.3086 11.0986\n"; out << "15.2661 10.8545 15.4512 10.8428 cv 15.7109 10.8232 16.2944 10.6846\n"; out << "16.5308 10.7383 cv 16.7622 10.791 16.665 11.0488 16.4893 11.0918 cv\n"; out << "16.1567 10.9092 15.2793 11.0957 14.9321 11.1953 cv cp 14.4961 19.501 mo\n"; out << "14.4219 19.7373 14.4893 20.585 14.6211 20.7881 cv 15.647 20.8691 15.4644\n"; out << "19.4336 14.4961 19.501 cv cp 15.5342 18.7949 mo 15.3076 18.9014 14.6006\n"; out << "19.0029 14.4751 19.21 cv 14.8037 19.165 15.1421 19.1289 15.5342 19.1475\n"; out << "cv 15.8706 19.5313 16.1328 19.9248 15.7627 20.4346 cv 15.6621 20.4189\n"; out << "15.4199 20.6836 15.3677 20.7676 cv 15.668 21.0586 15.9395 21.3242 16.2607\n"; out << "21.5977 cv 16.1704 21.9092 16.9033 21.9004 17.0298 21.9307 cv 17.0391\n"; out << "21.9775 17.0703 22.0361 17.0298 22.0752 cv 17.4673 22.0137 17.8403 21.5625\n"; out << "18.2568 21.4072 cv 18.4551 21.334 18.6226 21.2568 18.7715 21.1006 cv\n"; out << "18.9883 20.873 19.1289 20.8857 19.376 20.7471 cv 19.5435 20.6514 19.8994\n"; out << "20.3701 19.9683 20.1768 cv 20.0352 19.9922 20.7729 19.5869 20.7046\n"; out << "19.376 cv 20.4956 19.5137 20.3584 19.7217 20.1021 19.8125 cv 19.7334\n"; out << "19.541 19.502 18.9336 19.2095 18.5674 cv 18.938 18.959 18.5186 19.2051\n"; out << "18.2344 19.584 cv 18.4346 19.752 18.541 19.9961 18.6973 20.2002 cv 18.7734\n"; out << "20.3057 18.8682 20.3906 18.981 20.4561 cv 19.0557 20.3496 19.2983 20.2959\n"; out << "19.3345 20.4766 cv 19.2148 20.6748 18.605 21.1221 18.3999 21.2031 cv\n"; out << "18.2314 21.1309 18.3564 20.9404 18.4409 20.8711 cv 18.3306 20.5566\n"; out << "18.0972 20.3184 17.9297 20.0371 cv 17.6572 19.5791 17.2427 19.0098\n"; out << "16.8008 18.6914 cv 16.709 18.7236 16.5703 18.8604 16.4688 18.7529 cv\n"; out << "16.4434 18.5713 16.9004 18.2549 17.0298 18.1719 cv 17.0601 18.1816 li\n"; out << "17.0601 18.1816 li 17.0498 18.1514 li 17.0981 18.123 17.1191 18.0674\n"; out << "17.2163 18.0889 cv 17.4971 18.4102 17.6108 18.8984 17.9629 19.1475 cv\n"; out << "18.3745 19.0352 18.6997 18.5547 19.0225 18.3174 cv 18.7959 18.0527 18.6152\n"; out << "17.7422 18.3584 17.5078 cv 18.0679 17.4463 18.0869 17.7441 17.8394 17.5283\n"; out << "cv 17.6392 17.791 17.2671 17.8838 17.0498 18.1299 cv 17.019 18.1201 li\n"; out << "17.0298 18.1514 li 16.6606 18.1133 15.8794 18.6338 15.5342 18.7949 cv\n"; out << "cp 16.1362 8.30957 mo 16.0293 8.48047 15.5874 9.56543 16.0532 9.57617\n"; out << "cv 16.2925 9.58105 16.2817 9.27832 16.5889 9.32129 cv 16.8076 9.35254\n"; out << "16.9849 9.51953 17.2163 9.47168 cv 17.2817 8.97168 17.7632 8.66406\n"; out << "17.8179 8.20508 cv 17.6143 8.02637 16.3887 8.19141 16.1362 8.30957 cv\n"; out << "cp 16.3857 13.8945 mo 16.123 14.0654 16.6338 14.9082 16.6763 15.1816\n"; out << "cv 17.2295 15.2021 17.9995 15.2793 18.6069 15.2441 cv 18.4141 14.7559\n"; out << "18.0093 14.3398 17.7354 13.915 cv 17.5234 13.5879 17.4277 13.6875 17.1006\n"; out << "13.8545 cv 16.8579 13.9785 16.6377 13.8652 16.3857 13.8945 cv cp 17.7559\n"; out << "9.32617 mo 17.4819 9.94238 17.9653 10.2393 18.3208 10.7139 cv 18.5435\n"; out << "11.0098 18.5298 11.8096 18.4204 12.1504 cv 18.3511 12.3652 18.3501\n"; out << "12.667 18.2485 12.8594 cv 18.1519 13.042 17.8169 13.4609 17.9219 13.666\n"; out << "cv 17.9814 13.7031 18.0757 13.7061 18.1504 13.7285 cv 18.3164 13.9883\n"; out << "18.4712 14.2813 18.6904 14.5381 cv 18.7007 14.6885 18.8169 15.2383\n"; out << "19.0225 15.2441 cv 19.3599 15.1064 19.5732 13.7998 19.6108 13.4443 cv\n"; out << "19.6733 12.8545 19.626 12.2578 19.6841 11.6631 cv 19.7153 11.3418 19.644\n"; out << "10.9258 19.5269 10.624 cv 19.4673 10.501 19.4512 10.373 19.479 10.2402\n"; out << "cv 19.3657 10.168 19.2988 10.0654 19.2783 9.93164 cv 19.2358 9.45605\n"; out << "19.1011 9.02051 18.7324 8.62109 cv 18.7622 8.45801 18.6567 7.98145\n"; out << "18.4204 7.99805 cv 18.3628 8.48242 17.9429 8.89648 17.7559 9.32617 cv\n"; out << "cp f 10.7588 3.99023 mo 10.4023 3.88965 10.0928 4.13574 9.82471 3.99023\n"; out << "cv 9.80371 3.81641 10.0923 3.22461 10.2217 3.09766 cv 10.3931 2.92773\n"; out << "10.5044 2.51367 10.5923 2.28809 cv 10.7104 1.98438 10.8462 1.69824\n"; out << "10.9639 1.41309 cv 11.0127 1.2959 11.1689 .679688 11.2778 .647461 cv\n"; out << "11.334 .606445 11.459 .634766 11.5474 .626953 cv 11.5869 1.17773 12.0605\n"; out << "1.66699 12.0664 2.2041 cv 12.3071 2.68164 12.4653 3.56445 13.064 3.5957\n"; out << "cv 13.0576 3.66602 13.0791 3.76367 13.0425 3.80371 cv 12.6768 3.75684\n"; out << "12.5366 3.93457 12.1914 3.90723 cv 12.0068 3.49902 11.9307 2.84668\n"; out << "11.6304 2.5166 cv 11.3481 2.59473 10.9937 2.59863 10.7588 2.72363 cv\n"; out << "10.707 3.07422 10.5288 3.29688 10.5303 3.69922 cv 10.582 3.83301 10.7793\n"; out << "3.7373 10.8828 3.7832 cv 10.8857 3.89551 10.8149 3.93555 10.7588 3.99023\n"; out << "cv cp 11.2778 1.43652 mo 11.1563 1.54492 10.959 2.12598 10.9448 2.28809 cv\n"; out << "11.1602 2.2998 11.3604 2.32715 11.5474 2.26758 cv 11.5303 2.1748 11.3179\n"; out << "1.42578 11.2778 1.43652 cv cp f 10.5093 22.5947 mo 10.4668 22.7305 9.62207\n"; out << "22.6016 9.5127 22.5527 cv 9.47949 22.2822 10.0317 21.8877 10.1353 21.6602\n"; out << "cv 10.5654 20.9414 11.0493 20.2568 11.4854 19.542 cv 11.5654 19.5518\n"; out << "11.6499 19.5586 11.7134 19.584 cv 11.875 20.2109 11.9263 20.8545 12.0625\n"; out << "21.4883 cv 12.1348 21.8262 12.2095 22.1699 12.3511 22.4863 cv 12.3901\n"; out << "22.5732 12.6992 22.7881 12.6895 22.8232 cv 12.5947 22.9678 11.9712\n"; out << "22.8584 11.8379 22.8643 cv 11.7148 22.3994 11.6855 21.8408 11.5474\n"; out << "21.3906 cv 11.2954 21.3623 11.0171 21.3896 10.6963 21.3906 cv 10.4526\n"; out << "21.5107 10.1934 22.1777 10.1982 22.4287 cv 10.249 22.5371 10.5337 22.4111\n"; out << "10.5093 22.5947 cv cp 11.3398 20.2061 mo 11.1958 20.5127 10.9844 20.751\n"; out << "10.8628 21.0791 cv 11.0493 21.1484 11.2925 21.1611 11.5269 21.1826 cv\n"; out << "11.4678 20.875 11.4375 20.5381 11.3818 20.2275 cv 11.3765 20.2109 11.3638\n"; out << "20.2031 11.3398 20.2061 cv cp f 11.5684 12.3994 mo 11.54 12.1299 11.2124\n"; out << "11.9561 11.5303 11.7119 cv 11.833 11.4795 12.0718 11.5322 12.4399 11.5488\n"; out << "cv 12.5459 11.6279 12.6719 11.7559 12.5449 11.9014 cv 12.3853 11.8975\n"; out << "12.248 11.7734 12.0879 11.8389 cv 12.168 11.9658 12.3384 12.0029 12.4609\n"; out << "12.0879 cv 12.5308 12.2051 12.5083 12.4258 12.4399 12.5244 cv 12.1211\n"; out << "12.6494 11.8149 12.4766 11.5684 12.3994 cv cp f 4.64795 20.1104 mo 4.24561\n"; out << "19.8662 3.72363 19.3105 3.86719 18.7842 cv 4.06055 18.0742 4.41846 17.5391\n"; out << "5.13623 17.3115 cv 5.62646 17.1553 6.58643 16.9941 6.83398 17.6523 cv\n"; out << "6.76074 17.7705 6.67725 17.8809 6.58496 17.9854 cv 6.5791 18.1074 6.55029\n"; out << "18.2256 6.50195 18.3379 cv 6.40918 18.3545 6.37793 18.3105 6.29443 18.3174\n"; out << "cv 6.25781 17.7549 6.38916 17.6357 5.7334 17.5283 cv 4.95801 17.4043\n"; out << "4.89795 17.999 4.50879 18.4629 cv 4.49658 19.0771 4.41602 19.4912 5.08203\n"; out << "19.8057 cv 5.30176 19.9092 5.55176 19.9639 5.78174 19.8584 cv 5.99121\n"; out << "19.7627 6.33594 19.9199 6.06006 20.0137 cv 5.56738 20.1826 5.16895 20.4268\n"; out << "4.64795 20.1104 cv cp f 1.83008 12.6484 mo 1.47363 12.3135 1.54053 12.3301\n"; out << "1.64307 11.9434 cv 1.75146 11.8906 2.28662 11.5342 2.28662 11.4023 cv\n"; out << "2.56543 11.3779 2.80713 11.8057 2.98877 11.9727 cv 3.33252 12.29 2.97314\n"; out << "12.3467 2.75049 12.5596 cv 2.35938 12.9355 2.2627 13.0586 1.83008 12.6484\n"; // out << "cv cp f .453952 setlinewidth 1 setlinecap 0 setlinejoin 4 setmiterlimit\n"; out << "cv cp f 0.0 setlinewidth 1 setlinecap 0 setlinejoin 4 setmiterlimit\n"; out << "[] 0 setdash true setstrokeadjust 17.0601 18.1816 mo 17.0459 18.1602\n"; out << "17.0347 18.1406 17.019 18.1201 cv grestore } def\n"; } ////////////////////////////// // // getNextPage -- // int getNextPage(int start, vector& pages) { int min = 1000000; int i; for (i=0; i<(int)pages.size(); i++) { if (pages[i] < 0) { continue; } if (pages[i] - start <= 0) { continue; } if (pages[i] < min) { min = pages[i]; } } if (min < 1000000) { return min; } else { return -1; } } ////////////////////////////// // // getFirstPage -- // int getFirstPage(vector& pages) { int i; int min = 10000000; for (i=0; i<(int)pages.size(); i++) { if (pages[i] < 0) { continue; } if (min > pages[i]) { min = pages[i]; } } if (min < 1000000) { return min; } else { return 0; } } ////////////////////////////// // // printFooterInfo -- // void printFooterInfo(ostream& out, vector& data) { int i; for (i=0; i<(int)data.size(); i++) { out << data[i].key << "\t" << data[i].value << endl; } } ////////////////////////////// // // printData -- // void printData(ostream& out, vector& data) { int i; for (i=0; i<(int)data.size(); i++) { out << (*data[i]) << '\n'; } out << flush; } ////////////////////////////// // // deleteData -- // void deleteData(vector& data) { int i; for (i=0; i<(int)data.size(); i++) { delete data[i]; data[i] = NULL; } data.resize(0); } ////////////////////////////// // // appendString -- // void appendString(vector& listing, string& lastone) { string* temp = new string(lastone); listing.push_back(temp); } ////////////////////////////// // // getFooterFile -- // void getFooterFile(vector& data, const string& filename) { data.clear(); if (!filename.empty()) { ifstream input(filename, ios::in); getFooterFile(data, input); } } // %=@START: FOOTER // %=@FOOT1: Josquin Research Project // %=@FOOT2: Josquin des Prez // %=@FOOT3: NJE 27.21: La Bernardina // %=@FOOT1R: Chanson // %=@FOOT2R: 28 Feb 2011 // %=@FOOT3R: page %P // %=@LOGO: JRP // %=@END: FOOTER void getFooterFile(vector& data, vector& postscript) { // find the first footer section PerlRegularExpression pre; stringstream datastream; int found = 0; int i; for (i=0; i<(int)postscript.size(); i++) { if (strncmp(postscript[i]->c_str(), "%=", 2) != 0) { continue; } if ((!found) && pre.search(*postscript[i], "^%=@START:\\s*FOOTER\\s*$", "")) { found = 1; datastream << postscript[i]->c_str()+2; datastream << "\n"; continue; } if (!found) { continue; } if (pre.search(*postscript[i], "^%=@END:\\s*FOOTER\\s*$", "")) { found = 0; datastream << postscript[i]->c_str()+2; datastream << "\n"; continue; } datastream << postscript[i]->c_str()+2; datastream << "\n"; } // datastream << ends; //cerr << "\% STRING IS: " << datastream.str().c_str() << endl; getFooterFile(data, datastream); } void getFooterFile(vector& data, istream& input) { data.reserve(1000); data.resize(1); string dataline; dataline.reserve(1000); dataline.resize(0); int character; char value; int isnewline; char lastvalue = 0; while (!input.eof()) { character = input.get(); if (input.eof()) { // end of file found without a newline termination on last line. if (dataline.size() > 0) { appendKeyValueInfo(data, dataline); dataline.resize(0); break; } } value = (char)character; if ((value == 0x0d) || (value == 0x0a)) { isnewline = 1; } else { isnewline = 0; } if (isnewline && (value == 0x0a) && (lastvalue == 0x0d)) { // ignore the second newline character in a dos-style newline. lastvalue = value; continue; } else { lastvalue = value; } if (isnewline) { appendKeyValueInfo(data, dataline); dataline.resize(0); } else { dataline.push_back(value); } } } ////////////////////////////// // // appendKeyValueInfo -- // void appendKeyValueInfo(vector& data, string& dataline) { int lastindex = data.size()-1; int newindex = lastindex+1; dataline.resize(dataline.size()+1); dataline[dataline.size()-1] = '\0'; dataline.resize(dataline.size()-1); PerlRegularExpression pre; if (pre.search(dataline, "^\\s*$", "")) { // ignore blank lines return; } if (pre.search(dataline, "^@LOGO:.*JRP", "i")) { jrpQ = 1; } if (pre.search(dataline, "^@LOGO:.*TASSO", "i")) { tassoQ = 1; } string pkey; string pvalue; string pt1 = ""; string pt2 = ""; if (pre.search(dataline, "^@([^\\s:]+)\\s*:\\s*(.*)\\s*$", "")){ pt1 = pre.getSubmatch(1); pkey = pt1; pt2 = pre.getSubmatch(2); pvalue = pt2; data.resize(data.size()+1); data.resize(lastindex+2); data[newindex].key = pt1; data[newindex].value = pt2; } else { // append data line to previous value if (pre.search(dataline, "^\\s*(.*)\\s$", "")) { const char* ptr3 = pre.getSubmatch(1); char space = '\n'; // char nullchar = '\0'; data[lastindex].value.push_back(space); data[lastindex].value += ptr3; } } } ////////////////////////////// // // getPostScriptFile -- return the contents of a PostScript file. // void getPostScriptFile(vector& postscript, vector& pages, const string& filename) { ifstream input(filename.c_str()); getPostScriptFile(postscript, pages, input, filename); } void getPostScriptFile(vector& postscript, vector& pages, istream& input, const string& filename) { pages.reserve(1000000); pages.resize(0); int maxpage = 0; postscript.resize(1000000); postscript.resize(0); string dataline; dataline.resize(100000); dataline.resize(0); int character; char value; int isnewline; char lastvalue = 0; while (!input.eof()) { character = input.get(); if (input.eof()) { // end of file found without a newline termination on last line. if (dataline.size() > 0) { appendString(postscript, dataline); dataline.resize(0); break; } } value = (char)character; if ((value == 0x0d) || (value == 0x0a)) { isnewline = 1; } else { isnewline = 0; } if (isnewline && (value == 0x0a) && (lastvalue == 0x0d)) { // ignore the second newline character in a dos-style newline. lastvalue = value; continue; } else { lastvalue = value; } if (isnewline) { appendString(postscript, dataline); dataline.resize(0); } else { dataline.push_back(value); } } int pagenum = 0; PerlRegularExpression pre; // %%Page label ordinal int i; for (i=0; i<(int)postscript.size(); i++) { if (pre.search(*postscript[i], "^%%Page\\s+([^\\s]+)\\s+([^\\s]+)\\s*$", "")) { pagenum = atol(pre.getSubmatch(2)); if (pagenum > maxpage) { maxpage = pagenum; pages.resize(pagenum+1); } pages[pagenum] = i; } } // EPS formated page number not found, so check if the filename // has a number and use that instead (assuming that each file // has a single PostScript page in it. PerlRegularExpression prefile; if (prefile.search(filename, "([1-9][0-9]*)")) { pagenum = atol(prefile.getSubmatch(1)); pages.push_back(pagenum); maxpage = pages.size(); } } void getPostScriptFiles(vector& postscript, vector& pages, Options& options) { ifstream input; int numinputs = options.getArgCount(); pages.reserve(10000); pages.resize(0); int maxpage = 0; vector start; start.reserve(10000); start.resize(0); int startval = 0; postscript.resize(1000000); postscript.resize(0); string dataline; dataline.resize(100000); dataline.resize(0); int pagenum = 0; int i; for (i=0; i 0) { appendString(postscript, dataline); dataline.resize(0); break; } } value = (char)character; if ((value == 0x0d) || (value == 0x0a)) { isnewline = 1; } else { isnewline = 0; } if (isnewline && (value == 0x0a) && (lastvalue == 0x0d)) { // ignore the second newline character in a dos-style newline. lastvalue = value; continue; } else { lastvalue = value; } if (isnewline) { appendString(postscript, dataline); dataline.resize(0); } else { dataline.push_back(value); } } input.close(); if (startval == 0) { continue; } PerlRegularExpression pre; // %%Page label ordinal int j; int found = 0; for (j=startval; j<(int)postscript.size(); j++) { if (pre.search(*postscript[i], "^%%Page\\s+([^\\s]+)\\s+([^\\s]+)\\s*$", "")) { pagenum = atol(pre.getSubmatch(2)); if (pagenum > maxpage) { maxpage = pagenum; pages.resize(pagenum+1); } pages[pagenum] = j; found = 1; break; } } if (found) { continue; } for (j=startval; j<(int)postscript.size(); j++) { if (pre.search(*postscript[i], "^%*Z\\s+7\\s+([^\\s]+)\\s*$", "")) { pagenum = atol(pre.getSubmatch(1)); if (pagenum > maxpage) { maxpage = pagenum; pages.resize(pagenum+1); } pages[pagenum] = j; found = 1; break; } } if (found) { continue; } // EPS formated page number not found, so check if the filename // has a number and use that instead (assuming that each file // has a single PostScript page in it. PerlRegularExpression prefile; if (prefile.search(options.getArgument(i+1), "([1-9][0-9]*)")) { pagenum = atol(prefile.getSubmatch(1)); pages.push_back(pagenum); maxpage = pages.size(); } } // repeat parsing for last page. } ////////////////////////////// // // checkOptions -- validate and process command-line options. // void checkOptions(Options& opts, int argc, char* argv[]) { opts.define("b|box=b", "show system bounding box"); opts.define("f|footer=s:", "footer definition file"); opts.define("s|shift=i:0", "vertical shift in point after first pg"); opts.define("v|verbose=b", "print verbose messages"); opts.define("e|embedded-footer|ef=b", "footer file is embedded in input"); opts.define("p|page-offset=i:0", "page offset (one less than start page)"); opts.define("O|no-overlay=b", "do not write overlay box"); opts.define("i|instrument-file|instruments=s", "instrument definition file"); opts.define("I|instrument-name=s", "instrument name"); opts.define("bv|bottombox=d:0.5", "Bottom margin of footer overlay box"); opts.define("tv|topbox=d:2.0", "Top margin of footer overlay box"); opts.define("E|even=b", "force even number of pages"); opts.define("l1|L1=s", "Bottom left text for footer"); opts.define("l2|L2=s", "Middle left text for footer"); opts.define("l3|L3=s", "Top left text for footer"); opts.define("r1|R1=s", "Bottom right text for footer"); opts.define("r2|R2=s", "Middle right text for footer"); opts.define("r3|R3=s", "Top left right for footer"); opts.define("debug=b"); // determine bad input line num opts.define("author=b"); // author of program opts.define("version=b"); // compilation info opts.define("example=b"); // example usages opts.define("h|help=b"); // short description opts.process(argc, argv); // handle basic options: if (opts.getBoolean("author")) { cout << "Written by Craig Stuart Sapp, " << "craig@ccrma.stanford.edu, June 2010" << endl; exit(0); } else if (opts.getBoolean("version")) { cout << argv[0] << ", version: 23 June 2010" << endl; cout << "compiled: " << __DATE__ << endl; cout << MUSEINFO_VERSION << endl; exit(0); } else if (opts.getBoolean("help")) { usage(opts.getCommand().c_str()); exit(0); } else if (opts.getBoolean("example")) { example(); exit(0); } bool hasFooterParameters = false; if (opts.getBoolean("L1")) { hasFooterParameters = true; } if (opts.getBoolean("L2")) { hasFooterParameters = true; } if (opts.getBoolean("L3")) { hasFooterParameters = true; } if (opts.getBoolean("R1")) { hasFooterParameters = true; } if (opts.getBoolean("R2")) { hasFooterParameters = true; } if (opts.getBoolean("R3")) { hasFooterParameters = true; } if (!hasFooterParameters) { if (!opts.getBoolean("ef")) { if (!opts.getBoolean("footer")) { cerr << "Error: footer definition file required as input" << endl; exit(1); } } } bottomval = opts.getDouble("bv"); // in centimeters topval = opts.getDouble("tv"); // in centimeters overlayQ =!opts.getBoolean("no-overlay"); shiftQ = opts.getInteger("shift"); footerfile = opts.getString("footer"); verboseQ = opts.getBoolean("verbose"); embedQ = opts.getBoolean("ef"); showboxQ = opts.getBoolean("box"); evenQ = opts.getBoolean("even"); pageoffset = opts.getInteger("page-offset"); debugQ = opts.getBoolean("debug"); if (opts.getBoolean("instrument-name")) { Instrumentname = opts.getString("instrument-name"); if (opts.getBoolean("instrument-file")) { adjustInstrumentName(Instrumentname, opts.getString("instrument-file")); } else if (opts.getBoolean("footer")) { adjustInstrumentName(Instrumentname, opts.getString("footer")); } } else { Instrumentname = ""; } } ////////////////////////////// // // adjustInstrumentName -- Reads a file searching for content // such as: // // @START: PARTLIST // @PART: fl Flauto traverso // @PART: vn1 Violino 1 // @PART: vn2 Violino 2 // @PART: va Viola // @PART: bc Violoncello/Basso continuo // @END: PARTLIST // // If the instrument name input is "fl" then output from this function // it will be "Flauto traverso". // void adjustInstrumentName(string& instrumentname, const string& instfile) { ifstream inputfile; inputfile.open(instfile); if (!inputfile.is_open()) { cerr << "Error: cannot open file: " << instfile << endl; exit(1); } PerlRegularExpression pre; PerlRegularExpression pre2; const char* searchpat = "^\\s*@\\s*PART\\s*:\\s*([^\\s]+)\\s*(.*)\\s*$"; char buffer[1024] = {0}; while (!inputfile.eof()) { inputfile.getline(buffer, 1024); if (pre.search(buffer, searchpat, "i")) { if (strcmp(instrumentname.c_str(), pre.getSubmatch(1)) == 0) { pre2.sar(instrumentname, instrumentname, pre.getSubmatch(2), ""); return; } } } } ////////////////////////////// // // example -- example usage of the program // void example(void) { cout << " \n" << endl; } ////////////////////////////// // // usage -- gives the usage statement for the program // void usage(const char* command) { cout << " \n" << endl; } // md5sum: 4b866035a003ec616b7565d808a070bc musefoot.cpp [20170605]